[jabref] 368/459: Imported Upstream version 2.9.1+ds

gregor herrmann gregoa at debian.org
Thu Sep 15 20:41:05 UTC 2016


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

gregoa pushed a commit to branch master
in repository jabref.

commit bcb24ac40d600909af04408d93b4ac6a30aece76
Author: gregor herrmann <gregoa at debian.org>
Date:   Tue Jan 1 17:07:58 2013 +0100

    Imported Upstream version 2.9.1+ds
---
 .classpath                                         |    84 +-
 .gitignore                                         |     1 -
 .project                                           |    34 +-
 JabRef - MrDlib.userlibraries                      |    50 +-
 build.gradle                                       |   176 +-
 build.number                                       |     3 -
 build.xml                                          |  1260 +-
 buildlib/licenses.txt                              |    40 +-
 combineJournalLists.py                             |    62 +-
 deploy                                             |    32 +-
 gradle/wrapper/gradle-wrapper.jar                  |   Bin 0 -> 39860 bytes
 gradle/wrapper/gradle-wrapper.properties           |     6 +
 gradlew                                            |   164 +
 gradlew.bat                                        |    90 +
 jabref-launch4j.xml                                |    36 +
 jabref.ebuild                                      |   158 +-
 src/extensions/API/overview.html                   |    34 +-
 src/extensions/SimpleCsvImporter.csv               |     4 +-
 src/extensions/SimpleCsvImporter.java              |    72 +-
 src/extensions/compileAll.bat                      |   100 +-
 src/extensions/compileAll.sh                       |    16 +-
 src/extensions/readme.html                         |   102 +-
 src/help/ACMPortalHelp.html                        |    54 +-
 src/help/About.html                                |   286 +-
 src/help/Autosave.html                             |    46 +-
 src/help/BaseFrameHelp.html                        |   228 +-
 src/help/BibtexHelp.html                           |   550 +-
 src/help/CiteSeerHelp.html                         |    38 +-
 src/help/CommandLine.html                          |   304 +-
 src/help/ContentSelectorHelp.html                  |    50 +-
 src/help/Contents.html                             |   160 +-
 src/help/CustomEntriesHelp.html                    |   164 +-
 src/help/CustomExports.html                        |  1162 +-
 src/help/CustomImports.html                        |   302 +-
 src/help/DOItoBibTeXHelp.html                      |    40 +-
 src/help/DatabaseProperties.html                   |    98 +-
 src/help/DiVAtoBibTeXHelp.html                     |    44 +-
 src/help/EndNoteFilters.html                       |   164 +-
 src/help/EntryEditorHelp.html                      |   260 +-
 src/help/ExternalFiles.html                        |   276 +-
 src/help/FileLinks.html                            |   184 +-
 src/help/GeneralFields.html                        |    54 +-
 src/help/GoogleScholarHelp.html                    |    46 +-
 src/help/GroupsHelp.html                           |   698 +-
 src/help/HelpHelp.html                             |    70 +-
 src/help/IEEEXploreHelp.html                       |    54 +-
 src/help/ISBNtoBibTeXHelp.html                     |    40 +-
 src/help/ImportInspectionDialog.html               |    48 +-
 src/help/JabRefHelp.html                           |    68 +-
 src/help/JournalAbbreviations.html                 |   210 +-
 src/help/LabelPatterns.html                        |   418 +-
 src/help/License.html                              |   988 +-
 src/help/MarkingHelp.html                          |    92 +-
 src/help/MedlineHelp.html                          |   120 +-
 src/help/OpenOfficeIntegration.html                |   934 +-
 src/help/OwnerHelp.html                            |    40 +-
 src/help/PreviewHelp.html                          |    42 +-
 src/help/RemoteHelp.html                           |    82 +-
 src/help/RevisionHistory.html                      |  3330 +--
 src/help/SearchHelp.html                           |   210 +-
 src/help/ShortIntegrityCheck.html                  |    26 +-
 src/help/SpecialFieldsHelp.html                    |   100 +-
 src/help/StringEditorHelp.html                     |   102 +-
 src/help/TimeStampHelp.html                        |   100 +-
 src/help/XMPHelp.html                              |   338 +-
 src/help/cpl-v10.html                              |   248 +-
 src/help/da/About.html                             |   270 +-
 src/help/de/About.html                             |   268 +-
 src/help/de/BaseFrameHelp.html                     |   276 +-
 src/help/de/BibtexHelp.html                        |   610 +-
 src/help/de/CiteSeerHelp.html                      |   134 +-
 src/help/de/CommandLine.html                       |   308 +-
 src/help/de/ContentSelectorHelp.html               |    68 +-
 src/help/de/Contents.html                          |   138 +-
 src/help/de/CustomEntriesHelp.html                 |   186 +-
 src/help/de/CustomExports.html                     |   972 +-
 src/help/de/CustomImports.html                     |   330 +-
 src/help/de/EndNoteFilters.html                    |   260 +-
 src/help/de/EntryEditorHelp.html                   |   294 +-
 src/help/de/ExternalFiles.html                     |   306 +-
 src/help/de/FileLinks.html                         |   170 +-
 src/help/de/GeneralFields.html                     |    62 +-
 src/help/de/GroupsHelp.html                        |   822 +-
 src/help/de/HelpHelp.html                          |    80 +-
 src/help/de/IEEEXploreHelp.html                    |    64 +-
 src/help/de/ImportInspectionDialog.html            |    52 +-
 src/help/de/JabRefHelp.html                        |    78 +-
 src/help/de/JournalAbbreviations.html              |   236 +-
 src/help/de/LabelPatterns.html                     |   398 +-
 src/help/de/License.html                           |   988 +-
 src/help/de/MarkingHelp.html                       |    72 +-
 src/help/de/MedlineHelp.html                       |   106 +-
 src/help/de/OpenOfficeHelp.html                    |   246 +-
 src/help/de/OwnerHelp.html                         |    44 +-
 src/help/de/PreviewHelp.html                       |    40 +-
 src/help/de/RemoteHelp.html                        |    88 +-
 src/help/de/RevisionHistory.html                   |  1547 +-
 src/help/de/SearchHelp.html                        |   226 +-
 src/help/de/ShortIntegrityCheck.html               |    18 +-
 src/help/de/StringEditorHelp.html                  |   116 +-
 src/help/de/TimeStampHelp.html                     |   102 +-
 src/help/de/XMPHelp.html                           |   344 +-
 src/help/de/jgoodies.html                          |    92 +-
 src/help/fr/ACMPortalHelp.html                     |    82 +-
 src/help/fr/About.html                             |   308 +-
 src/help/fr/Autosave.html                          |    46 +-
 src/help/fr/BaseFrameHelp.html                     |   302 +-
 src/help/fr/BibtexHelp.html                        |   620 +-
 src/help/fr/CiteSeerHelp.html                      |    50 +-
 src/help/fr/CommandLine.html                       |   362 +-
 src/help/fr/ContentSelectorHelp.html               |    64 +-
 src/help/fr/Contents.html                          |   162 +-
 src/help/fr/CustomEntriesHelp.html                 |   216 +-
 src/help/fr/CustomExports.html                     |  1524 +-
 src/help/fr/CustomImports.html                     |   374 +-
 src/help/fr/DOItoBibTeXHelp.html                   |    46 +-
 src/help/fr/DatabaseProperties.html                |    98 +-
 src/help/fr/DiVAtoBibTeXHelp.html                  |    52 +-
 src/help/fr/EndNoteFilters.html                    |   210 +-
 src/help/fr/EntryEditorHelp.html                   |   320 +-
 src/help/fr/ExternalFiles.html                     |   362 +-
 src/help/fr/FileLinks.html                         |   246 +-
 src/help/fr/GeneralFields.html                     |    58 +-
 src/help/fr/GoogleScholarHelp.html                 |    52 +-
 src/help/fr/GroupsHelp.html                        |   882 +-
 src/help/fr/HelpHelp.html                          |    82 +-
 src/help/fr/IEEEXploreHelp.html                    |    82 +-
 src/help/fr/ISBNtoBibTeXHelp.html                  |    46 +-
 src/help/fr/ImportInspectionDialog.html            |    64 +-
 src/help/fr/JabRefHelp.html                        |    90 +-
 src/help/fr/JournalAbbreviations.html              |   270 +-
 src/help/fr/LabelPatterns.html                     |   448 +-
 src/help/fr/MarkingHelp.html                       |   142 +-
 src/help/fr/MedlineHelp.html                       |   146 +-
 src/help/fr/OpenOfficeIntegration.html             |  1104 +-
 src/help/fr/OwnerHelp.html                         |    52 +-
 src/help/fr/PreviewHelp.html                       |    52 +-
 src/help/fr/RemoteHelp.html                        |   106 +-
 src/help/fr/RevisionHistory.html                   |  1665 +-
 src/help/fr/SearchHelp.html                        |   242 +-
 src/help/fr/ShortIntegrityCheck.html               |    24 +-
 src/help/fr/SpecialFieldsHelp.html                 |   108 +-
 src/help/fr/StringEditorHelp.html                  |   134 +-
 src/help/fr/TimeStampHelp.html                     |   112 +-
 src/help/fr/XMPHelp.html                           |   372 +-
 src/help/in/ACMPortalHelp.html                     |    76 +-
 src/help/in/About.html                             |   272 +-
 src/help/in/Autosave.html                          |    56 +-
 src/help/in/BaseFrameHelp.html                     |   224 +-
 src/help/in/BibtexHelp.html                        |   536 +-
 src/help/in/CiteSeerHelp.html                      |   122 +-
 src/help/in/ContentSelectorHelp.html               |    54 +-
 src/help/in/Contents.html                          |   150 +-
 src/help/in/CustomExports.html                     |  1122 +-
 src/help/in/DatabaseProperties.html                |   102 +-
 src/help/in/EntryEditorHelp.html                   |   276 +-
 src/help/in/HelpHelp.html                          |    68 +-
 src/help/in/IEEEXploreHelp.html                    |    64 +-
 src/help/in/JabRefHelp.html                        |    66 +-
 src/help/in/JournalAbbreviations.html              |   240 +-
 src/help/in/License.html                           |   988 +-
 src/help/in/MarkingHelp.html                       |    94 +-
 src/help/in/MedlineHelp.html                       |    92 +-
 src/help/in/OwnerHelp.html                         |    42 +-
 src/help/in/PreviewHelp.html                       |    44 +-
 src/help/in/RevisionHistory.html                   |  2932 +--
 src/help/in/SearchHelp.html                        |   210 +-
 src/help/in/ShortIntegrityCheck.html               |    28 +-
 src/help/in/StringEditorHelp.html                  |   100 +-
 src/help/in/TimeStampHelp.html                     |   100 +-
 src/help/in/jgoodies.html                          |    92 +-
 src/help/ja/ACMPortalHelp.html                     |    50 +-
 src/help/ja/About.html                             |   220 +-
 src/help/ja/Autosave.html                          |    28 +-
 src/help/ja/BaseFrameHelp.html                     |   120 +-
 src/help/ja/BibtexHelp.html                        |   324 +-
 src/help/ja/CiteSeerHelp.html                      |    78 +-
 src/help/ja/CommandLine.html                       |   268 +-
 src/help/ja/ContentSelectorHelp.html               |    34 +-
 src/help/ja/Contents.html                          |   158 +-
 src/help/ja/CustomEntriesHelp.html                 |   166 +-
 src/help/ja/CustomExports.html                     |  1132 +-
 src/help/ja/CustomImports.html                     |   302 +-
 src/help/ja/DatabaseProperties.html                |    82 +-
 src/help/ja/EndNoteFilters.html                    |    98 +-
 src/help/ja/EntryEditorHelp.html                   |   142 +-
 src/help/ja/ExternalFiles.html                     |   136 +-
 src/help/ja/FileLinks.html                         |    66 +-
 src/help/ja/GeneralFields.html                     |    54 +-
 src/help/ja/GroupsHelp.html                        |   418 +-
 src/help/ja/HelpHelp.html                          |    50 +-
 src/help/ja/IEEEXploreHelp.html                    |    48 +-
 src/help/ja/ImportInspectionDialog.html            |    48 +-
 src/help/ja/JabRefHelp.html                        |    36 +-
 src/help/ja/JournalAbbreviations.html              |   104 +-
 src/help/ja/LabelPatterns.html                     |   316 +-
 src/help/ja/License.html                           |   994 +-
 src/help/ja/MarkingHelp.html                       |    69 +-
 src/help/ja/MedlineHelp.html                       |    96 +-
 src/help/ja/OpenOfficeHelp.html                    |   146 +-
 src/help/ja/OwnerHelp.html                         |    30 +-
 src/help/ja/PreviewHelp.html                       |    34 +-
 src/help/ja/RemoteHelp.html                        |    62 +-
 src/help/ja/RevisionHistory.html                   |  1551 +-
 src/help/ja/SearchHelp.html                        |   157 +-
 src/help/ja/ShortIntegrityCheck.html               |    26 +-
 src/help/ja/StringEditorHelp.html                  |    46 +-
 src/help/ja/TimeStampHelp.html                     |    90 +-
 src/help/ja/XMPHelp.html                           |   336 +-
 src/help/ja/jabref_help.css                        |    72 +-
 src/help/jgoodies.html                             |    92 +-
 src/images/JabRef-icon-mac.svg                     |   116 +-
 src/images/JabRef-icon.svg                         |   414 +-
 src/images/connect_no.png                          |   Bin
 src/images/crystal_16/1downarrow.png               |   Bin
 src/images/crystal_16/1leftarrow.png               |   Bin
 src/images/crystal_16/1rightarrow.png              |   Bin
 src/images/crystal_16/1uparrow.png                 |   Bin
 src/images/crystal_16/Icons.properties             |   214 +-
 src/images/crystal_16/advancedsettings.png         |   Bin
 src/images/crystal_16/agt_internet.png             |   Bin
 src/images/crystal_16/button_ok.png                |   Bin
 src/images/crystal_16/cancel.png                   |   Bin
 src/images/crystal_16/colors.png                   |   Bin
 src/images/crystal_16/documentinfo.png             |   Bin
 src/images/crystal_16/edit.png                     |   Bin
 src/images/crystal_16/edit_add.png                 |   Bin
 src/images/crystal_16/edit_remove.png              |   Bin
 src/images/crystal_16/editcopy.png                 |   Bin
 src/images/crystal_16/editcut.png                  |   Bin
 src/images/crystal_16/editpaste.png                |   Bin
 src/images/crystal_16/fileimport.png               |   Bin
 src/images/crystal_16/filenew.png                  |   Bin
 src/images/crystal_16/fileopen.png                 |   Bin
 src/images/crystal_16/filesave.png                 |   Bin
 src/images/crystal_16/filesaveas.png               |   Bin
 src/images/crystal_16/gg_ignored.png               |   Bin
 src/images/crystal_16/help.png                     |   Bin
 src/images/crystal_16/kwikdisk.png                 |   Bin
 src/images/crystal_16/openoffice.png               |   Bin
 src/images/crystal_16/pdf-document.png             |   Bin
 src/images/crystal_16/ps.png                       |   Bin
 src/images/crystal_16/redo.png                     |   Bin
 src/images/crystal_16/reload.png                   |   Bin
 src/images/crystal_16/run.png                      |   Bin
 src/images/crystal_16/save_all.png                 |   Bin
 src/images/crystal_16/search.png                   |   Bin
 src/images/crystal_16/status_unknown.png           |   Bin
 src/images/crystal_16/trash.png                    |   Bin
 src/images/crystal_16/undo.png                     |   Bin
 src/images/splash-beta.svg                         |   604 +-
 src/images/splash-dev.svg                          |   628 +-
 src/images/splash-release.svg                      |   582 +-
 src/images/splash.png                              |   Bin 173073 -> 219865 bytes
 src/java/Eclipse_formatter.xml                     |   528 +-
 .../jgoodies/uif_lite/component/UIFSplitPane.java  |   538 +-
 .../uif_lite/panel/SimpleInternalFrame.java        |   948 +-
 src/java/gnu/dtools/ritopt/ArrayOption.java        |   170 +-
 src/java/gnu/dtools/ritopt/BooleanOption.java      |   490 +-
 src/java/gnu/dtools/ritopt/ByteOption.java         |   406 +-
 src/java/gnu/dtools/ritopt/CharOption.java         |   392 +-
 src/java/gnu/dtools/ritopt/DoubleOption.java       |   406 +-
 src/java/gnu/dtools/ritopt/FloatOption.java        |   406 +-
 src/java/gnu/dtools/ritopt/IntOption.java          |   408 +-
 src/java/gnu/dtools/ritopt/LongOption.java         |   406 +-
 src/java/gnu/dtools/ritopt/NotifyOption.java       |   636 +-
 src/java/gnu/dtools/ritopt/Option.java             |  1824 +-
 src/java/gnu/dtools/ritopt/OptionArrayable.java    |   130 +-
 src/java/gnu/dtools/ritopt/OptionEvent.java        |   390 +-
 src/java/gnu/dtools/ritopt/OptionException.java    |    96 +-
 src/java/gnu/dtools/ritopt/OptionListener.java     |   108 +-
 src/java/gnu/dtools/ritopt/OptionMenu.java         |   546 +-
 src/java/gnu/dtools/ritopt/OptionModifiable.java   |    96 +-
 .../dtools/ritopt/OptionModificationException.java |    98 +-
 src/java/gnu/dtools/ritopt/OptionModule.java       |   876 +-
 .../gnu/dtools/ritopt/OptionModuleRegistrar.java   |   124 +-
 src/java/gnu/dtools/ritopt/OptionNotifier.java     |   114 +-
 .../dtools/ritopt/OptionProcessingException.java   |    98 +-
 src/java/gnu/dtools/ritopt/OptionRegistrar.java    |   196 +-
 .../dtools/ritopt/OptionRegistrationException.java |   156 +-
 src/java/gnu/dtools/ritopt/Options.java            |  1666 +-
 src/java/gnu/dtools/ritopt/ShortOption.java        |   404 +-
 src/java/gnu/dtools/ritopt/SimpleProcess.java      |   438 +-
 src/java/gnu/dtools/ritopt/Stoppable.java          |    92 +-
 src/java/gnu/dtools/ritopt/StreamPrinter.java      |   386 +-
 src/java/gnu/dtools/ritopt/StringOption.java       |   368 +-
 src/java/gnu/dtools/ritopt/Utility.java            |   678 +-
 src/java/jalopy.format.convention.xml              |   812 +-
 src/java/net/sf/jabref/AbstractWorker.java         |   132 +-
 src/java/net/sf/jabref/AdvancedTab.java            |   544 +-
 src/java/net/sf/jabref/AppearancePrefsTab.java     |   416 +-
 src/java/net/sf/jabref/AuthorList.java             |  2558 +--
 src/java/net/sf/jabref/BaseAction.java             |    50 +-
 src/java/net/sf/jabref/BasePanel.java              |  6051 ++---
 src/java/net/sf/jabref/BibLatexEntryTypes.java     |  1720 +-
 src/java/net/sf/jabref/BibtexDatabase.java         |  1328 +-
 src/java/net/sf/jabref/BibtexEntry.java            |   896 +-
 src/java/net/sf/jabref/BibtexEntryType.java        |  2130 +-
 src/java/net/sf/jabref/BibtexFields.java           |  1462 +-
 src/java/net/sf/jabref/BibtexString.java           |   112 +-
 src/java/net/sf/jabref/BibtexStringComparator.java |   152 +-
 src/java/net/sf/jabref/BrowseAction.java           |   150 +-
 src/java/net/sf/jabref/CallBack.java               |    46 +-
 src/java/net/sf/jabref/CheckBoxMessage.java        |   102 +-
 src/java/net/sf/jabref/ClipBoardManager.java       |   176 +-
 .../net/sf/jabref/CompressedEntryEditorTab.java    |   908 +-
 src/java/net/sf/jabref/ContentSelectorDialog2.java |  1020 +-
 .../net/sf/jabref/CrossRefEntryComparator.java     |    90 +-
 src/java/net/sf/jabref/CustomEntryType.java        |   510 +-
 src/java/net/sf/jabref/DatabaseChangeEvent.java    |    90 +-
 src/java/net/sf/jabref/DatabaseChangeListener.java |    46 +-
 src/java/net/sf/jabref/DatabaseSearch.java         |   220 +-
 src/java/net/sf/jabref/DuplicateCheck.java         |   650 +-
 .../net/sf/jabref/DuplicateResolverDialog.java     |   552 +-
 src/java/net/sf/jabref/DuplicateSearch.java        |   430 +-
 src/java/net/sf/jabref/EntryComparator.java        |   270 +-
 src/java/net/sf/jabref/EntryContainer.java         |    48 +-
 src/java/net/sf/jabref/EntryEditor.java            |  3171 +--
 src/java/net/sf/jabref/EntryEditorPrefsTab.java    |   488 +-
 src/java/net/sf/jabref/EntryEditorTab.java         |   934 +-
 src/java/net/sf/jabref/EntryEditorTabList.java     |   148 +-
 src/java/net/sf/jabref/EntrySorter.java            |   288 +-
 src/java/net/sf/jabref/EntryTypeDialog.java        |   294 +-
 src/java/net/sf/jabref/ErrorMessageDisplay.java    |    80 +-
 src/java/net/sf/jabref/ExternalTab.java            |   540 +-
 src/java/net/sf/jabref/FieldComparator.java        |   380 +-
 src/java/net/sf/jabref/FieldComparatorStack.java   |    84 +-
 src/java/net/sf/jabref/FieldContentSelector.java   |   488 +-
 src/java/net/sf/jabref/FieldEditor.java            |   212 +-
 .../net/sf/jabref/FieldEditorFocusListener.java    |   106 +-
 src/java/net/sf/jabref/FieldNameLabel.java         |    92 +-
 src/java/net/sf/jabref/FieldTextArea.java          |   394 +-
 src/java/net/sf/jabref/FieldTextField.java         |   460 +-
 src/java/net/sf/jabref/FieldTextMenu.java          |   446 +-
 src/java/net/sf/jabref/FileHistory.java            |   280 +-
 src/java/net/sf/jabref/FileTab.java                |   450 +-
 .../net/sf/jabref/FindUnlinkedFilesDialog.java     |  2376 +-
 src/java/net/sf/jabref/FocusRequester.java         |    80 +-
 src/java/net/sf/jabref/FontSelectorDialog.java     |   886 +-
 src/java/net/sf/jabref/GUIGlobals.java             |   863 +-
 src/java/net/sf/jabref/GeneralRenderer.java        |   240 +-
 src/java/net/sf/jabref/GeneralTab.java             |   574 +-
 src/java/net/sf/jabref/GlobalFocusListener.java    |    86 +-
 src/java/net/sf/jabref/Globals.java                |  2875 +--
 src/java/net/sf/jabref/IconStringRenderer.java     |   102 +-
 src/java/net/sf/jabref/IdComparator.java           |    60 +-
 src/java/net/sf/jabref/ImportSettingsTab.java      |   394 +-
 src/java/net/sf/jabref/IncrementalSearcher.java    |   148 +-
 .../net/sf/jabref/JTextAreaWithHighlighting.java   |   348 +-
 src/java/net/sf/jabref/JabRef.java                 |  2012 +-
 src/java/net/sf/jabref/JabRefFileChooser.java      |   220 +-
 src/java/net/sf/jabref/JabRefFrame.java            |  5229 ++---
 src/java/net/sf/jabref/JabRefPreferences.java      |  2832 +--
 src/java/net/sf/jabref/KeyBindingsDialog.java      |   626 +-
 src/java/net/sf/jabref/KeyCollisionException.java  |    98 +-
 src/java/net/sf/jabref/MarkEntriesAction.java      |   156 +-
 src/java/net/sf/jabref/MarkedComparator.java       |   104 +-
 src/java/net/sf/jabref/MergeDialog.java            |   294 +-
 src/java/net/sf/jabref/MetaData.java               |   840 +-
 src/java/net/sf/jabref/MnemonicAwareAction.java    |   108 +-
 src/java/net/sf/jabref/NameFormatterTab.java       |   642 +-
 src/java/net/sf/jabref/OpenFileFilter.java         |   234 +-
 src/java/net/sf/jabref/OutputPrinterToNull.java    |    76 +-
 src/java/net/sf/jabref/PdfPreviewPanel.java        |   314 +-
 src/java/net/sf/jabref/PreambleEditor.java         |   464 +-
 src/java/net/sf/jabref/PrefsDialog3.java           |   564 +-
 src/java/net/sf/jabref/PrefsTab.java               |   124 +-
 src/java/net/sf/jabref/PreviewPanel.java           |   864 +-
 src/java/net/sf/jabref/PreviewPrefsTab.java        |   506 +-
 src/java/net/sf/jabref/RegExpRule.java             |   200 +-
 src/java/net/sf/jabref/ReplaceStringDialog.java    |   470 +-
 src/java/net/sf/jabref/RightClickMenu.java         |   854 +-
 src/java/net/sf/jabref/SearchManager2.java         |  1595 +-
 src/java/net/sf/jabref/SearchManagerNoGUI.java     |   264 +-
 src/java/net/sf/jabref/SearchRule.java             |    76 +-
 src/java/net/sf/jabref/SearchRuleSet.java          |   126 +-
 src/java/net/sf/jabref/SearchTextListener.java     |    68 +-
 src/java/net/sf/jabref/SendAsEMailAction.java      |   320 +-
 src/java/net/sf/jabref/SidePane.java               |   196 +-
 src/java/net/sf/jabref/SidePaneComponent.java      |   226 +-
 src/java/net/sf/jabref/SidePaneManager.java        |   378 +-
 src/java/net/sf/jabref/SimpleSearchRule.java       |   152 +-
 src/java/net/sf/jabref/SimpleUrlDragDrop.java      |   254 +-
 src/java/net/sf/jabref/SplashScreen.java           |   266 +-
 src/java/net/sf/jabref/StrictDuplicateSearch.java  |   192 +-
 src/java/net/sf/jabref/StringDialog.java           |  1127 +-
 src/java/net/sf/jabref/TabLabelPattern.java        |   389 +-
 src/java/net/sf/jabref/TableColumnsTab.java        |  1293 +-
 src/java/net/sf/jabref/TablePrefsTab.java          |   610 +-
 src/java/net/sf/jabref/TitleLabel.java             |    66 +-
 .../net/sf/jabref/TransferableBibtexEntry.java     |   142 +-
 src/java/net/sf/jabref/UnknownEntryType.java       |   128 +-
 src/java/net/sf/jabref/UrlDragDrop.java            |   440 +-
 src/java/net/sf/jabref/Util.java                   |  6436 +++---
 src/java/net/sf/jabref/Worker.java                 |    52 +-
 src/java/net/sf/jabref/XmpPrefsTab.java            |   500 +-
 src/java/net/sf/jabref/about/About2.java           |   176 +-
 src/java/net/sf/jabref/about/AboutPanel.java       |   914 +-
 src/java/net/sf/jabref/about/AboutTextLine.java    |   420 +-
 .../net/sf/jabref/about/AnimationListener.java     |    50 +-
 .../net/sf/jabref/about/ExtendedInfoPanel.java     |   326 +-
 src/java/net/sf/jabref/about/TextBlock.java        |   136 +-
 .../DetectSwingSingleThreadRuleViolations.aj       |    82 +-
 .../autocompleter/AbstractAutoCompleter.java       |   288 +-
 .../jabref/autocompleter/AutoCompleterFactory.java |    78 +-
 .../autocompleter/CrossrefAutoCompleter.java       |   106 +-
 .../jabref/autocompleter/DefaultAutoCompleter.java |   128 +-
 .../autocompleter/EntireFieldAutoCompleter.java    |   108 +-
 .../autocompleter/NameFieldAutoCompleter.java      |   342 +-
 src/java/net/sf/jabref/bst/.gitignore              |     1 -
 src/java/net/sf/jabref/bst/BibtexCaseChanger.java  |   528 +-
 .../net/sf/jabref/bst/BibtexNameFormatter.java     |   638 +-
 src/java/net/sf/jabref/bst/BibtexPurify.java       |   198 +-
 src/java/net/sf/jabref/bst/BibtexTextPrefix.java   |   186 +-
 src/java/net/sf/jabref/bst/BibtexWidth.java        |   512 +-
 src/java/net/sf/jabref/bst/Bst.g                   |   192 +-
 src/java/net/sf/jabref/bst/BstLexer.java           |  2534 +--
 src/java/net/sf/jabref/bst/BstParser.java          |  3182 +--
 src/java/net/sf/jabref/bst/ChangeCaseFunction.java |   160 +-
 src/java/net/sf/jabref/bst/FormatNameFunction.java |   164 +-
 src/java/net/sf/jabref/bst/PurifyFunction.java     |   124 +-
 src/java/net/sf/jabref/bst/TextPrefixFunction.java |   146 +-
 src/java/net/sf/jabref/bst/VM.java                 |  2682 +--
 src/java/net/sf/jabref/bst/VMException.java        |    48 +-
 src/java/net/sf/jabref/bst/Warn.java               |    40 +-
 src/java/net/sf/jabref/bst/WidthFunction.java      |   126 +-
 src/java/net/sf/jabref/collab/Change.java          |   168 +-
 .../net/sf/jabref/collab/ChangeDisplayDialog.java  |   310 +-
 src/java/net/sf/jabref/collab/ChangeScanner.java   |  1150 +-
 src/java/net/sf/jabref/collab/EntryAddChange.java  |   102 +-
 src/java/net/sf/jabref/collab/EntryChange.java     |   328 +-
 .../net/sf/jabref/collab/EntryDeleteChange.java    |   124 +-
 .../net/sf/jabref/collab/FileUpdateListener.java   |    60 +-
 .../net/sf/jabref/collab/FileUpdateMonitor.java    |   516 +-
 src/java/net/sf/jabref/collab/FileUpdatePanel.java |   236 +-
 src/java/net/sf/jabref/collab/GroupChange.java     |   164 +-
 src/java/net/sf/jabref/collab/InfoPane.java        |    68 +-
 src/java/net/sf/jabref/collab/MetaDataChange.java  |   248 +-
 src/java/net/sf/jabref/collab/PreambleChange.java  |   130 +-
 src/java/net/sf/jabref/collab/StringAddChange.java |   158 +-
 src/java/net/sf/jabref/collab/StringChange.java    |   206 +-
 .../net/sf/jabref/collab/StringNameChange.java     |   174 +-
 .../net/sf/jabref/collab/StringRemoveChange.java   |   156 +-
 src/java/net/sf/jabref/export/AutoSaveManager.java |   290 +-
 .../net/sf/jabref/export/CustomExportDialog.java   |   430 +-
 .../net/sf/jabref/export/CustomExportList.java     |   268 +-
 .../net/sf/jabref/export/ExpandEndnoteFilters.java |   166 +-
 .../net/sf/jabref/export/ExportComparator.java     |    50 +-
 .../jabref/export/ExportCustomizationDialog.java   |   363 +-
 .../net/sf/jabref/export/ExportFileFilter.java     |   116 +-
 src/java/net/sf/jabref/export/ExportFormat.java    |   764 +-
 src/java/net/sf/jabref/export/ExportFormats.java   |   674 +-
 .../sf/jabref/export/ExportToClipboardAction.java  |   316 +-
 src/java/net/sf/jabref/export/FieldFormatter.java  |    52 +-
 src/java/net/sf/jabref/export/FileActions.java     |  1055 +-
 .../net/sf/jabref/export/LatexFieldFormatter.java  |   534 +-
 .../net/sf/jabref/export/MSBibExportFormat.java    |   144 +-
 .../net/sf/jabref/export/ModsExportFormat.java     |   132 +-
 src/java/net/sf/jabref/export/MySQLExport.java     |   116 +-
 src/java/net/sf/jabref/export/OOCalcDatabase.java  |   410 +-
 .../jabref/export/OpenDocumentRepresentation.java  |   420 +-
 .../export/OpenDocumentSpreadsheetCreator.java     |   312 +-
 .../jabref/export/OpenOfficeDocumentCreator.java   |   278 +-
 .../sf/jabref/export/PluginBasedExportFormat.java  |   178 +-
 .../net/sf/jabref/export/PostgreSQLExport.java     |   118 +-
 src/java/net/sf/jabref/export/RtfSelection.java    |   130 +-
 src/java/net/sf/jabref/export/SaveAllAction.java   |   136 +-
 .../net/sf/jabref/export/SaveDatabaseAction.java   |   794 +-
 src/java/net/sf/jabref/export/SaveException.java   |   154 +-
 src/java/net/sf/jabref/export/SaveSession.java     |   346 +-
 src/java/net/sf/jabref/export/VerifyingWriter.java |   130 +-
 .../layout/AbstractParamLayoutFormatter.java       |   136 +-
 src/java/net/sf/jabref/export/layout/Layout.java   |   452 +-
 .../net/sf/jabref/export/layout/LayoutEntry.java   |  1124 +-
 .../sf/jabref/export/layout/LayoutFormatter.java   |    88 +-
 .../net/sf/jabref/export/layout/LayoutHelper.java  |  1058 +-
 .../jabref/export/layout/ParamLayoutFormatter.java |    74 +-
 .../net/sf/jabref/export/layout/StringInt.java     |   184 +-
 src/java/net/sf/jabref/export/layout/WSITools.java |   278 +-
 .../export/layout/format/AuthorAbbreviator.java    |    80 +-
 .../layout/format/AuthorAndsCommaReplacer.java     |   118 +-
 .../export/layout/format/AuthorAndsReplacer.java   |   122 +-
 .../layout/format/AuthorFirstAbbrLastCommas.java   |    70 +-
 .../format/AuthorFirstAbbrLastOxfordCommas.java    |    80 +-
 .../export/layout/format/AuthorFirstFirst.java     |    94 +-
 .../layout/format/AuthorFirstFirstCommas.java      |    74 +-
 .../layout/format/AuthorFirstLastCommas.java       |    78 +-
 .../layout/format/AuthorFirstLastOxfordCommas.java |    78 +-
 .../jabref/export/layout/format/AuthorLF_FF.java   |    62 +-
 .../export/layout/format/AuthorLF_FFAbbr.java      |    62 +-
 .../export/layout/format/AuthorLastFirst.java      |    54 +-
 .../layout/format/AuthorLastFirstAbbrCommas.java   |    78 +-
 .../format/AuthorLastFirstAbbrOxfordCommas.java    |    80 +-
 .../layout/format/AuthorLastFirstAbbreviator.java  |    96 +-
 .../layout/format/AuthorLastFirstCommas.java       |    76 +-
 .../layout/format/AuthorLastFirstOxfordCommas.java |    76 +-
 .../jabref/export/layout/format/AuthorNatBib.java  |    66 +-
 .../jabref/export/layout/format/AuthorOrgSci.java  |   114 +-
 .../sf/jabref/export/layout/format/Authors.java    |   672 +-
 .../export/layout/format/CompositeFormat.java      |   112 +-
 .../export/layout/format/CreateBibORDFAuthors.java |   202 +-
 .../export/layout/format/CreateDocBookAuthors.java |   372 +-
 .../export/layout/format/CreateDocBookEditors.java |   130 +-
 .../jabref/export/layout/format/CurrentDate.java   |   118 +-
 .../sf/jabref/export/layout/format/DOICheck.java   |    96 +-
 .../sf/jabref/export/layout/format/DOIStrip.java   |    74 +-
 .../sf/jabref/export/layout/format/Default.java    |    70 +-
 .../sf/jabref/export/layout/format/FileLink.java   |   204 +-
 .../sf/jabref/export/layout/format/FirstPage.java  |    74 +-
 .../jabref/export/layout/format/FormatChars.java   |   866 +-
 .../export/layout/format/FormatPagesForHTML.java   |    50 +-
 .../export/layout/format/FormatPagesForXML.java    |    50 +-
 .../export/layout/format/GetOpenOfficeType.java    |   154 +-
 .../sf/jabref/export/layout/format/HTMLChars.java  |   480 +-
 .../export/layout/format/HTMLParagraphs.java       |   126 +-
 .../sf/jabref/export/layout/format/IfPlural.java   |   118 +-
 .../export/layout/format/JournalAbbreviator.java   |   122 +-
 .../sf/jabref/export/layout/format/LastPage.java   |    82 +-
 .../layout/format/NoSpaceBetweenAbbreviations.java |   104 +-
 .../export/layout/format/NotFoundFormatter.java    |    80 +-
 .../net/sf/jabref/export/layout/format/Number.java |    66 +-
 .../sf/jabref/export/layout/format/RTFChars.java   |   400 +-
 .../export/layout/format/RemoveBrackets.java       |   148 +-
 .../layout/format/RemoveBracketsAddComma.java      |   156 +-
 .../export/layout/format/RemoveLatexCommands.java  |   218 +-
 .../jabref/export/layout/format/RemoveTilde.java   |   148 +-
 .../export/layout/format/RemoveWhitespace.java     |   128 +-
 .../sf/jabref/export/layout/format/Replace.java    |   138 +-
 .../sf/jabref/export/layout/format/ResolvePDF.java |   112 +-
 .../sf/jabref/export/layout/format/RisAuthors.java |    84 +-
 .../jabref/export/layout/format/RisKeywords.java   |    76 +-
 .../sf/jabref/export/layout/format/RisMonth.java   |   112 +-
 .../jabref/export/layout/format/ToLowerCase.java   |   106 +-
 .../jabref/export/layout/format/ToUpperCase.java   |    58 +-
 .../jabref/export/layout/format/WrapContent.java   |   102 +-
 .../jabref/export/layout/format/WrapFileLinks.java |   626 +-
 .../sf/jabref/export/layout/format/XMLChars.java   |   254 +-
 .../export/layout/format/plugin/NameFormat.java    |   332 +-
 .../sf/jabref/external/AccessLinksForEntries.java  |   458 +-
 .../net/sf/jabref/external/AttachFileAction.java   |   108 +-
 .../external/AutoSetExternalFileForEntries.java    |   642 +-
 .../external/ConfirmCloseFileListEntryEditor.java  |    56 +-
 .../sf/jabref/external/DownloadExternalFile.java   |   702 +-
 .../net/sf/jabref/external/DroppedFileHandler.java |  1226 +-
 .../sf/jabref/external/ExternalFileMenuItem.java   |   236 +-
 .../net/sf/jabref/external/ExternalFilePanel.java  |   954 +-
 .../net/sf/jabref/external/ExternalFileType.java   |   418 +-
 .../sf/jabref/external/ExternalFileTypeEditor.java |   738 +-
 .../external/ExternalFileTypeEntryEditor.java      |   534 +-
 .../jabref/external/FileLinksUpgradeWarning.java   |   434 +-
 src/java/net/sf/jabref/external/FindFullText.java  |   458 +-
 .../net/sf/jabref/external/FindFullTextAction.java |   220 +-
 .../net/sf/jabref/external/FullTextFinder.java     |    90 +-
 src/java/net/sf/jabref/external/IconSelection.java |   332 +-
 .../net/sf/jabref/external/MoveFileAction.java     |   374 +-
 .../net/sf/jabref/external/PushToApplication.java  |   174 +-
 .../jabref/external/PushToApplicationAction.java   |   222 +-
 .../jabref/external/PushToApplicationButton.java   |   682 +-
 src/java/net/sf/jabref/external/PushToEmacs.java   |   404 +-
 .../net/sf/jabref/external/PushToLatexEditor.java  |   256 +-
 src/java/net/sf/jabref/external/PushToLyx.java     |   310 +-
 .../net/sf/jabref/external/PushToTeXstudio.java    |   334 +-
 src/java/net/sf/jabref/external/PushToVim.java     |   326 +-
 src/java/net/sf/jabref/external/PushToWinEdt.java  |   252 +-
 .../net/sf/jabref/external/RegExpFileSearch.java   |   596 +-
 .../jabref/external/ScienceDirectPdfDownload.java  |   126 +-
 .../jabref/external/SpringerLinkPdfDownload.java   |   138 +-
 .../sf/jabref/external/SynchronizeFileField.java   |   814 +-
 .../external/TransferableFileLinkSelection.java    |   232 +-
 .../jabref/external/UnknownExternalFileType.java   |    60 +-
 .../net/sf/jabref/external/WriteXMPAction.java     |   562 +-
 .../jabref/external/WriteXMPEntryEditorAction.java |   278 +-
 src/java/net/sf/jabref/groups/AbstractGroup.java   |   446 +-
 .../net/sf/jabref/groups/AddToGroupAction.java     |   242 +-
 src/java/net/sf/jabref/groups/AllEntriesGroup.java |   242 +-
 .../net/sf/jabref/groups/AndOrSearchRuleSet.java   |   114 +-
 src/java/net/sf/jabref/groups/AutoGroupDialog.java |   552 +-
 .../jabref/groups/EntryTableTransferHandler.java   |  1074 +-
 src/java/net/sf/jabref/groups/ExplicitGroup.java   |   540 +-
 src/java/net/sf/jabref/groups/GroupDialog.java     |  1134 +-
 src/java/net/sf/jabref/groups/GroupMatcher.java    |    64 +-
 src/java/net/sf/jabref/groups/GroupSelector.java   |  3078 +--
 .../sf/jabref/groups/GroupTreeCellRenderer.java    |   342 +-
 src/java/net/sf/jabref/groups/GroupTreeNode.java   |   770 +-
 src/java/net/sf/jabref/groups/GroupsPrefsTab.java  |   288 +-
 src/java/net/sf/jabref/groups/GroupsTree.java      |   913 +-
 src/java/net/sf/jabref/groups/KeywordGroup.java    |   802 +-
 .../sf/jabref/groups/RemoveFromGroupAction.java    |   122 +-
 src/java/net/sf/jabref/groups/SearchGroup.java     |   818 +-
 .../jabref/groups/TransferableEntrySelection.java  |   184 +-
 .../sf/jabref/groups/UndoableAddOrRemoveGroup.java |   332 +-
 .../sf/jabref/groups/UndoableChangeAssignment.java |   198 +-
 .../net/sf/jabref/groups/UndoableModifyGroup.java  |   136 +-
 .../sf/jabref/groups/UndoableModifySubtree.java    |   192 +-
 .../net/sf/jabref/groups/UndoableMoveGroup.java    |   172 +-
 .../net/sf/jabref/groups/UndoableResetGroups.java  |   148 +-
 .../jabref/groups/UnsupportedVersionException.java |    48 +-
 src/java/net/sf/jabref/groups/VersionHandling.java |   414 +-
 src/java/net/sf/jabref/gui/AttachFileDialog.java   |   316 +-
 .../net/sf/jabref/gui/AutoCompleteListener.java    |  1020 +-
 .../net/sf/jabref/gui/BibtexKeyPatternDialog.java  |   234 +-
 src/java/net/sf/jabref/gui/CleanUpAction.java      |  1142 +-
 src/java/net/sf/jabref/gui/ColorSetupPanel.java    |   338 +-
 .../sf/jabref/gui/DatabasePropertiesDialog.java    |   522 +-
 src/java/net/sf/jabref/gui/DragDropPane.java       |   320 +-
 src/java/net/sf/jabref/gui/DragDropPopupPane.java  |   190 +-
 .../sf/jabref/gui/EntryCustomizationDialog2.java   |   890 +-
 src/java/net/sf/jabref/gui/EntryTypeList.java      |   292 +-
 .../net/sf/jabref/gui/FetcherPreviewDialog.java    |   542 +-
 src/java/net/sf/jabref/gui/FieldSetComponent.java  |   698 +-
 src/java/net/sf/jabref/gui/FieldWeightDialog.java  |   292 +-
 src/java/net/sf/jabref/gui/FileDialogs.java        |   438 +-
 src/java/net/sf/jabref/gui/FileListEditor.java     |  1358 +-
 .../jabref/gui/FileListEditorTransferHandler.java  |   358 +-
 src/java/net/sf/jabref/gui/FileListEntry.java      |   124 +-
 .../net/sf/jabref/gui/FileListEntryEditor.java     |   718 +-
 src/java/net/sf/jabref/gui/FileListTableModel.java |   590 +-
 .../net/sf/jabref/gui/FirstColumnComparator.java   |    88 +-
 .../net/sf/jabref/gui/GenFieldsCustomizer.java     |   489 +-
 src/java/net/sf/jabref/gui/GlazedEntrySorter.java  |   160 +-
 src/java/net/sf/jabref/gui/HtmlTransferable.java   |   144 +-
 src/java/net/sf/jabref/gui/IconComparator.java     |   122 +-
 .../net/sf/jabref/gui/ImportInspectionDialog.java  |  3004 ++-
 src/java/net/sf/jabref/gui/IsMarkedComparator.java |    62 +-
 src/java/net/sf/jabref/gui/MainTable.java          |  1414 +-
 src/java/net/sf/jabref/gui/MainTableFormat.java    |   718 +-
 .../sf/jabref/gui/MainTableSelectionListener.java  |  1140 +-
 .../jabref/gui/PersistenceTableColumnListener.java |   286 +-
 .../sf/jabref/gui/PreventDraggingJTableHeader.java |   336 +-
 .../sf/jabref/gui/PreviewPanelTransferHandler.java |   152 +-
 .../net/sf/jabref/gui/RankingFieldComparator.java  |   112 +-
 .../net/sf/jabref/gui/SearchResultsDialog.java     |   960 +-
 src/java/net/sf/jabref/gui/SortTabsAction.java     |   126 +-
 src/java/net/sf/jabref/gui/SysTray.java            |   184 +-
 .../net/sf/jabref/gui/WaitForSaveOperation.java    |   186 +-
 .../net/sf/jabref/gui/components/JPanelXBox.java   |    70 +-
 .../gui/components/JPanelXBoxLeftJustify.java      |    66 +-
 .../gui/components/JPanelXBoxPreferredHeight.java  |    66 +-
 .../gui/components/JPanelXBoxPreferredSize.java    |    62 +-
 .../net/sf/jabref/gui/components/JPanelYBox.java   |    58 +-
 .../gui/components/JPanelYBoxPreferredHeight.java  |    52 +-
 .../gui/components/JPanelYBoxPreferredSize.java    |    62 +-
 .../gui/components/JPanelYBoxPreferredWidth.java   |    52 +-
 .../net/sf/jabref/gui/date/DatePickerButton.java   |   124 +-
 src/java/net/sf/jabref/help/HTMLParagraphView.java |    30 +
 src/java/net/sf/jabref/{ => help}/HelpAction.java  |   218 +-
 src/java/net/sf/jabref/{ => help}/HelpContent.java |   397 +-
 src/java/net/sf/jabref/{ => help}/HelpDialog.java  |   316 +-
 .../net/sf/jabref/help/LargeHTMLEditorKit.java     |   160 +
 src/java/net/sf/jabref/help/MyEditorKit.java       |    72 +
 .../net/sf/jabref/imports/ACMPortalFetcher.java    |  1020 +-
 src/java/net/sf/jabref/imports/ADSFetcher.java     |   352 +-
 .../sf/jabref/imports/AppendDatabaseAction.java    |   420 +-
 .../sf/jabref/imports/AutosaveStartupPrompter.java |   246 +-
 .../net/sf/jabref/imports/BibTeXMLHandler.java     |   220 +-
 .../net/sf/jabref/imports/BiblioscapeImporter.java |   556 +-
 .../net/sf/jabref/imports/BibsonomyScraper.java    |   132 +-
 .../net/sf/jabref/imports/BibteXMLImporter.java    |   234 +-
 src/java/net/sf/jabref/imports/BibtexParser.java   |  2202 +-
 .../net/sf/jabref/imports/BiomailImporter.java     |   414 +-
 src/java/net/sf/jabref/imports/BooleanAssign.java  |    72 +-
 src/java/net/sf/jabref/imports/CaseKeeper.java     |   126 +-
 src/java/net/sf/jabref/imports/CaseKeeperList.java |  1420 +-
 .../imports/CheckForNewEntryTypesAction.java       |   136 +-
 .../net/sf/jabref/imports/CiteSeerXFetcher.java    |   354 +-
 src/java/net/sf/jabref/imports/CopacImporter.java  |   346 +-
 src/java/net/sf/jabref/imports/CsaImporter.java    |   940 +-
 .../net/sf/jabref/imports/CustomImportList.java    |   380 +-
 src/java/net/sf/jabref/imports/DBLPFetcher.java    |   328 +-
 src/java/net/sf/jabref/imports/DBLPHelper.java     |   212 +-
 .../net/sf/jabref/imports/DBLPParseException.java  |    60 +-
 .../net/sf/jabref/imports/DOItoBibTeXFetcher.java  |   292 +-
 .../net/sf/jabref/imports/DatabaseFileLookup.java  |   254 +-
 .../net/sf/jabref/imports/DiVAtoBibTeXFetcher.java |   286 +-
 .../net/sf/jabref/imports/EndnoteImporter.java     |   510 +-
 src/java/net/sf/jabref/imports/EntryFetcher.java   |   200 +-
 .../imports/EntryFromExternalFileCreator.java      |    74 +-
 .../sf/jabref/imports/EntryFromFileCreator.java    |   370 +-
 .../imports/EntryFromFileCreatorManager.java       |   442 +-
 .../net/sf/jabref/imports/EntryFromPDFCreator.java |   326 +-
 .../net/sf/jabref/imports/FieldContentParser.java  |   418 +-
 .../net/sf/jabref/imports/FreeCiteImporter.java    |   456 +-
 src/java/net/sf/jabref/imports/GeneralFetcher.java |   636 +-
 .../sf/jabref/imports/GoogleScholarFetcher.java    |   670 +-
 src/java/net/sf/jabref/imports/HTMLConverter.java  |  1704 +-
 .../net/sf/jabref/imports/IEEEXploreFetcher.java   |  1570 +-
 .../jabref/imports/INSPIREBibtexFilterReader.java  |   186 +-
 src/java/net/sf/jabref/imports/INSPIREFetcher.java |   490 +-
 .../jabref/imports/ImportCustomizationDialog.java  |   623 +-
 .../net/sf/jabref/imports/ImportFileFilter.java    |   106 +-
 src/java/net/sf/jabref/imports/ImportFormat.java   |   364 +-
 .../net/sf/jabref/imports/ImportFormatReader.java  |   908 +-
 src/java/net/sf/jabref/imports/ImportFormats.java  |   264 +-
 src/java/net/sf/jabref/imports/ImportMenuItem.java |   690 +-
 src/java/net/sf/jabref/imports/InspecImporter.java |   306 +-
 src/java/net/sf/jabref/imports/IsiImporter.java    |   882 +-
 src/java/net/sf/jabref/imports/JstorImporter.java  |   212 +-
 src/java/net/sf/jabref/imports/MedlineFetcher.java |   484 +-
 src/java/net/sf/jabref/imports/MedlineHandler.java |   710 +-
 .../net/sf/jabref/imports/MedlineImporter.java     |   296 +-
 src/java/net/sf/jabref/imports/MsBibImporter.java  |   192 +-
 src/java/net/sf/jabref/imports/OAI2Fetcher.java    |   670 +-
 src/java/net/sf/jabref/imports/OAI2Handler.java    |   230 +-
 .../net/sf/jabref/imports/OpenDatabaseAction.java  |   904 +-
 src/java/net/sf/jabref/imports/OvidImporter.java   |   524 +-
 src/java/net/sf/jabref/imports/ParserResult.java   |   454 +-
 .../net/sf/jabref/imports/PdfContentImporter.java  |  1228 +-
 src/java/net/sf/jabref/imports/PdfXmpImporter.java |   134 +-
 src/java/net/sf/jabref/imports/PostOpenAction.java |   104 +-
 .../net/sf/jabref/imports/PreviewEntryFetcher.java |    62 +-
 .../net/sf/jabref/imports/RepecNepImporter.java    |   978 +-
 src/java/net/sf/jabref/imports/RisImporter.java    |   538 +-
 .../jabref/imports/SPIRESBibtexFilterReader.java   |   180 +-
 src/java/net/sf/jabref/imports/SPIRESFetcher.java  |   470 +-
 .../net/sf/jabref/imports/ScifinderImporter.java   |   302 +-
 .../sf/jabref/imports/SilverPlatterImporter.java   |   408 +-
 .../net/sf/jabref/imports/SixpackImporter.java     |   330 +-
 src/java/net/sf/jabref/imports/TextAnalyzer.java   |   460 +-
 .../sf/jabref/imports/UnlinkedFilesCrawler.java    |   204 +-
 .../sf/jabref/imports/UnlinkedPDFFileFilter.java   |    72 +-
 src/java/net/sf/jabref/imports/ZipFileChooser.java |   558 +-
 .../imports/fetcher/ISBNtoBibTeXFetcher.java       |   284 +-
 .../sf/jabref/imports/fetcher/package-info.java    |     6 +-
 .../net/sf/jabref/journals/AbbreviateAction.java   |   146 +-
 .../sf/jabref/journals/JournalAbbreviations.java   |   666 +-
 .../sf/jabref/journals/ManageJournalsAction.java   |    94 +-
 .../sf/jabref/journals/ManageJournalsPanel.java    |  1288 +-
 .../net/sf/jabref/journals/UnabbreviateAction.java |   142 +-
 src/java/net/sf/jabref/label/ArticleLabelRule.java |   234 +-
 src/java/net/sf/jabref/label/BookLabelRule.java    |   140 +-
 src/java/net/sf/jabref/label/DefaultLabelRule.java |    60 +-
 .../sf/jabref/label/HandleDuplicateWarnings.java   |    92 +-
 .../net/sf/jabref/label/IncollectionLabelRule.java |    60 +-
 .../sf/jabref/label/InproceedingsLabelRule.java    |   168 +-
 src/java/net/sf/jabref/label/KeyWord.java          |   126 +-
 src/java/net/sf/jabref/label/LabelMaker.java       |   152 +-
 src/java/net/sf/jabref/label/LabelRule.java        |    52 +-
 .../net/sf/jabref/labelPattern/LabelPattern.java   |   288 +-
 .../sf/jabref/labelPattern/LabelPatternPanel.java  |   560 +-
 .../sf/jabref/labelPattern/LabelPatternUtil.java   |  1994 +-
 .../labelPattern/ResolveDuplicateLabelDialog.java  |   286 +-
 .../labelPattern/SearchFixDuplicateLabels.java     |   228 +-
 src/java/net/sf/jabref/mods/MODSDatabase.java      |   176 +-
 src/java/net/sf/jabref/mods/MODSEntry.java         |   710 +-
 src/java/net/sf/jabref/mods/PageNumbers.java       |   150 +-
 src/java/net/sf/jabref/mods/PersonName.java        |   284 +-
 src/java/net/sf/jabref/msbib/MSBibDatabase.java    |   274 +-
 src/java/net/sf/jabref/msbib/MSBibEntry.java       |  2428 +-
 src/java/net/sf/jabref/net/Cookie.java             |   278 +-
 src/java/net/sf/jabref/net/CookieHandlerImpl.java  |   240 +-
 src/java/net/sf/jabref/net/URLDownload.java        |   408 +-
 src/java/net/sf/jabref/oo/AdvancedCiteDialog.java  |   248 +-
 .../net/sf/jabref/oo/AlphanumericComparator.java   |   146 +-
 src/java/net/sf/jabref/oo/AutoDetectPaths.java     |   720 +-
 .../sf/jabref/oo/BibtexEntryNotFoundException.java |    74 +-
 src/java/net/sf/jabref/oo/BstWrapper.java          |   206 +-
 src/java/net/sf/jabref/oo/CitationManager.java     |   520 +-
 src/java/net/sf/jabref/oo/ComparableMark.java      |    96 +-
 .../net/sf/jabref/oo/ConnectionLostException.java  |    52 +-
 src/java/net/sf/jabref/oo/OOBibBase.java           |  2908 +--
 src/java/net/sf/jabref/oo/OOBibStyle.java          |  1732 +-
 src/java/net/sf/jabref/oo/OOPreFormatter.java      |   898 +-
 src/java/net/sf/jabref/oo/OOUtil.java              |   600 +-
 src/java/net/sf/jabref/oo/OpenOfficePanel.java     |  2011 +-
 src/java/net/sf/jabref/oo/StyleSelectDialog.java   |  1122 +-
 .../net/sf/jabref/oo/UndefinedBibtexEntry.java     |    74 +-
 .../oo/UndefinedCharacterFormatException.java      |    68 +-
 .../oo/UndefinedParagraphFormatException.java      |    68 +-
 src/java/net/sf/jabref/oo/YearComparator.java      |   102 +-
 .../net/sf/jabref/plugin/ManagePluginsDialog.java  |   580 +-
 src/java/net/sf/jabref/plugin/PluginCore.java      |   410 +-
 src/java/net/sf/jabref/plugin/PluginInstaller.java |  1192 +-
 .../sf/jabref/plugin/PluginInstallerAction.java    |   106 +-
 src/java/net/sf/jabref/plugin/SidePanePlugin.java  |    80 +-
 .../net/sf/jabref/plugin/core/JabRefPlugin.java    |   116 +-
 .../net/sf/jabref/plugin/core/generated/.gitignore |     1 -
 .../plugin/core/generated/_JabRefPlugin.java       |   360 -
 src/java/net/sf/jabref/remote/RemoteListener.java  |   375 +-
 src/java/net/sf/jabref/search/BasicSearch.java     |   354 +-
 .../net/sf/jabref/search/HitOrMissComparator.java  |    92 +-
 src/java/net/sf/jabref/search/Lexer.g              |   130 +-
 src/java/net/sf/jabref/search/NoSearchMatcher.java |    64 +-
 src/java/net/sf/jabref/search/Parser.g             |   206 +-
 src/java/net/sf/jabref/search/RegExNode.java       |    64 +-
 .../net/sf/jabref/search/SearchExpression.java     |   120 +-
 .../sf/jabref/search/SearchExpressionLexer.java    |   688 +-
 .../search/SearchExpressionLexerTokenTypes.java    |    76 +-
 .../sf/jabref/search/SearchExpressionParser.java   |   974 +-
 .../search/SearchExpressionParserTokenTypes.java   |    86 +-
 .../jabref/search/SearchExpressionTreeParser.java  |   642 +-
 .../SearchExpressionTreeParserTokenTypes.java      |    86 +-
 src/java/net/sf/jabref/search/SearchMatcher.java   |    64 +-
 src/java/net/sf/jabref/search/TreeParser.g         |   220 +-
 src/java/net/sf/jabref/specialfields/Priority.java |   136 +-
 src/java/net/sf/jabref/specialfields/Quality.java  |   128 +-
 src/java/net/sf/jabref/specialfields/Rank.java     |   104 +-
 .../net/sf/jabref/specialfields/RankCompact.java   |    76 +-
 .../net/sf/jabref/specialfields/RankExtended.java  |    76 +-
 .../net/sf/jabref/specialfields/Relevance.java     |   126 +-
 .../net/sf/jabref/specialfields/SpecialField.java  |   148 +-
 .../jabref/specialfields/SpecialFieldAction.java   |   166 +-
 .../SpecialFieldDatabaseChangeListener.java        |    72 +-
 .../jabref/specialfields/SpecialFieldDropDown.java |   210 +-
 .../specialfields/SpecialFieldMenuAction.java      |    76 +-
 .../specialfields/SpecialFieldUpdateListener.java  |   162 +-
 .../sf/jabref/specialfields/SpecialFieldValue.java |   248 +-
 .../jabref/specialfields/SpecialFieldsUtils.java   |   354 +-
 src/java/net/sf/jabref/sql/DBConnectDialog.java    |   566 +-
 .../jabref/sql/DBExporterAndImporterFactory.java   |   228 +-
 .../net/sf/jabref/sql/DBImportExportDialog.java    |   574 +-
 src/java/net/sf/jabref/sql/DBImporterExporter.java |   236 +-
 src/java/net/sf/jabref/sql/DBStrings.java          |   268 +-
 src/java/net/sf/jabref/sql/DbConnectAction.java    |   202 +-
 src/java/net/sf/jabref/sql/SQLUtil.java            |   668 +-
 .../net/sf/jabref/sql/exporter/DBExporter.java     |  1232 +-
 .../net/sf/jabref/sql/exporter/MySQLExporter.java  |   298 +-
 .../sf/jabref/sql/exporter/PostgreSQLExporter.java |   350 +-
 .../net/sf/jabref/sql/importer/DBImporter.java     |   572 +-
 .../net/sf/jabref/sql/importer/DbImportAction.java |   418 +-
 .../net/sf/jabref/sql/importer/MySQLImporter.java  |   142 +-
 .../sf/jabref/sql/importer/PostgreSQLImporter.java |   142 +-
 .../net/sf/jabref/undo/CountingUndoManager.java    |   122 +-
 src/java/net/sf/jabref/undo/NamedCompound.java     |   112 +-
 .../net/sf/jabref/undo/UndoableChangeType.java     |   112 +-
 .../net/sf/jabref/undo/UndoableFieldChange.java    |   164 +-
 .../net/sf/jabref/undo/UndoableInsertEntry.java    |   160 +-
 .../net/sf/jabref/undo/UndoableInsertString.java   |   132 +-
 src/java/net/sf/jabref/undo/UndoableKeyChange.java |   136 +-
 .../net/sf/jabref/undo/UndoablePreambleChange.java |   148 +-
 .../net/sf/jabref/undo/UndoableRemoveEntry.java    |   160 +-
 .../net/sf/jabref/undo/UndoableRemoveString.java   |   134 +-
 .../net/sf/jabref/undo/UndoableStringChange.java   |   166 +-
 src/java/net/sf/jabref/util/CaseChangeMenu.java    |   154 +-
 src/java/net/sf/jabref/util/CaseChanger.java       |   384 +-
 .../util/EncryptionNotSupportedException.java      |    56 +-
 src/java/net/sf/jabref/util/ErrorConsole.java      |   376 +-
 src/java/net/sf/jabref/util/FileNameCleaner.java   |    88 +-
 .../net/sf/jabref/util/ManageKeywordsAction.java   |   804 +-
 .../net/sf/jabref/util/MassSetFieldAction.java     |   452 +-
 .../net/sf/jabref/util/NameListNormalizer.java     |   510 +-
 .../net/sf/jabref/util/QuotedStringTokenizer.java  |   160 +-
 src/java/net/sf/jabref/util/ResourceExtractor.java |   118 +-
 src/java/net/sf/jabref/util/TBuildInfo.java        |   290 +-
 src/java/net/sf/jabref/util/TXMLReader.java        |   388 +-
 src/java/net/sf/jabref/util/XMPSchemaBibtex.java   |   644 +-
 src/java/net/sf/jabref/util/XMPUtil.java           |  2562 +--
 .../sf/jabref/wizard/auximport/AuxCommandLine.java |   160 +-
 .../jabref/wizard/auximport/AuxSubGenerator.java   |   832 +-
 .../jabref/wizard/auximport/gui/FromAuxDialog.java |   710 +-
 .../sf/jabref/wizard/integrity/IntegrityCheck.java |   552 +-
 .../jabref/wizard/integrity/IntegrityMessage.java  |   288 +-
 .../integrity/gui/IntegrityMessagePanel.java       |   488 +-
 .../wizard/integrity/gui/IntegrityWizard.java      |   348 +-
 .../jabref/wizard/text/TagToMarkedTextStore.java   |   214 +-
 .../sf/jabref/wizard/text/gui/HintListModel.java   |    76 +-
 .../sf/jabref/wizard/text/gui/OverlayPanel.java    |   196 +-
 .../sf/jabref/wizard/text/gui/TextInputDialog.java |  1704 +-
 src/java/tests/net/sf/jabref/AllTests.java         |    64 +-
 src/java/tests/net/sf/jabref/AuthorListTest.java   |  1112 +-
 .../tests/net/sf/jabref/BibtexDatabaseTest.java    |    72 +-
 .../tests/net/sf/jabref/DuplicateCheckTest.java    |   112 +-
 .../tests/net/sf/jabref/FileBasedTestCase.java     |   468 +-
 src/java/tests/net/sf/jabref/JabRefTestCase.java   |    46 +-
 .../net/sf/jabref/SearchTextListenerTest.java      |   230 +-
 src/java/tests/net/sf/jabref/TestUtils.java        |    80 +-
 src/java/tests/net/sf/jabref/UtilFindFileTest.java |   402 +-
 src/java/tests/net/sf/jabref/UtilTest.java         |   948 +-
 src/java/tests/net/sf/jabref/bst/AllTests.java     |    42 +-
 .../net/sf/jabref/bst/BibtexCaseChangerTest.java   |   250 +-
 .../net/sf/jabref/bst/BibtexNameFormatterTest.java |   270 +-
 .../tests/net/sf/jabref/bst/BibtexPurifyTest.java  |    54 +-
 .../tests/net/sf/jabref/bst/BibtexWidthTest.java   |   156 +-
 src/java/tests/net/sf/jabref/bst/TestVM.java       |  1296 +-
 .../net/sf/jabref/bst/TextPrefixFunctionTest.java  |    58 +-
 .../net/sf/jabref/export/layout/AllTests.java      |    38 +-
 .../net/sf/jabref/export/layout/HTMLCharsTest.java |    96 +-
 .../sf/jabref/export/layout/LayoutEntryTest.java   |   414 +-
 .../net/sf/jabref/export/layout/LayoutTest.java    |   216 +-
 .../net/sf/jabref/export/layout/RTFCharsTest.java  |   172 +-
 .../sf/jabref/export/layout/format/AllTests.java   |    74 +-
 .../layout/format/AuthorAbbreviatorTest.java       |   110 +-
 .../layout/format/AuthorAndsCommaReplacerTest.java |   122 +-
 .../layout/format/AuthorAndsReplacerTest.java      |   128 +-
 .../format/AuthorFirstAbbrLastCommasTest.java      |   122 +-
 .../AuthorFirstAbbrLastOxfordCommasTest.java       |   126 +-
 .../export/layout/format/AuthorFirstFirstTest.java |    96 +-
 .../layout/format/AuthorFirstLastCommasTest.java   |   126 +-
 .../format/AuthorFirstLastOxfordCommasTest.java    |   128 +-
 .../format/AuthorLastFirstAbbrCommasTest.java      |   128 +-
 .../AuthorLastFirstAbbrOxfordCommasTest.java       |   126 +-
 .../format/AuthorLastFirstAbbreviatorTester.java   |   200 +-
 .../layout/format/AuthorLastFirstCommasTest.java   |   130 +-
 .../format/AuthorLastFirstOxfordCommasTest.java    |   126 +-
 .../export/layout/format/AuthorLastFirstTest.java  |    60 +-
 .../export/layout/format/AuthorOrgSciTest.java     |    66 +-
 .../format/BibtexNameLayoutFormatterTest.java      |   118 +-
 .../export/layout/format/CompositeFormatTest.java  |   120 +-
 .../jabref/export/layout/format/DOICheckTest.java  |    74 +-
 .../export/layout/format/HTMLParagraphsTest.java   |    42 +-
 .../format/NoSpaceBetweenAbbreviationsTest.java    |    52 +-
 .../export/layout/format/RemoveTildeTest.java      |    62 +-
 .../export/layout/format/ResolvePDFTest.java       |   104 +-
 src/java/tests/net/sf/jabref/gui/AllTests.java     |    32 +-
 .../tests/net/sf/jabref/gui/AutoCompleterTest.java |   368 +-
 src/java/tests/net/sf/jabref/imports/AllTests.java |    40 +-
 .../net/sf/jabref/imports/BibtexParserTest.java    |   662 +-
 .../net/sf/jabref/imports/CopacImporterTest.java   |   162 +-
 .../sf/jabref/imports/DatabaseFileLookupTest.java  |   546 +-
 .../imports/EntryFromFileCreatorManagerTest.java   |   172 +-
 .../sf/jabref/imports/EntryFromPDFCreatorTest.java |   102 +-
 .../net/sf/jabref/imports/GeneralFetcherTest.java  |   136 +-
 .../net/sf/jabref/imports/IsiImporterTest.java     |   740 +-
 .../net/sf/jabref/imports/OAI2ImportTest.java      |   344 +-
 .../jabref/imports/UnlinkedFilesCrawlerTest.java   |   116 +-
 .../sf/jabref/imports/UnlinkedFilesTestSuite.java  |    48 +-
 src/java/tests/net/sf/jabref/search/AllTests.java  |    32 +-
 .../net/sf/jabref/search/BasicSearchTest.java      |   116 +-
 .../tests/net/sf/jabref/testutils/TestUtils.java   |   132 +-
 src/java/tests/net/sf/jabref/util/AllTests.java    |    36 +-
 .../tests/net/sf/jabref/util/CaseChangerTest.java  |   116 +-
 .../net/sf/jabref/util/XMPSchemaBibtexTest.java    |   524 +-
 src/java/tests/net/sf/jabref/util/XMPUtilTest.java |  3264 +--
 src/manuals/JabRef-UserManual.lyx                  |   458 +-
 src/manuals/de/JabRef-UserManual_de.bib            |   154 +-
 src/manuals/de/JabRef-UserManual_de.tex            |  6402 +++---
 src/osx/osxadapter/OSXAdapter.java                 |   266 +-
 src/plugins/net.sf.jabref.core/plugin.xml          |   544 +-
 src/plugins/net.sf.jabref.export.misq/build.xml    |    58 +-
 src/plugins/net.sf.jabref.export.misq/plugin.xml   |    42 +-
 .../templates/misq.article.layout                  |    36 +-
 .../templates/misq.begin.layout                    |     6 +-
 .../templates/misq.book.layout                     |    42 +-
 .../templates/misq.layout                          |    80 +-
 .../net.sf.jabref.export.misq/templates/readme.txt |    24 +-
 src/plugins/readme.txt                             |    16 +-
 src/resource/.gitignore                            |     1 -
 src/resource/IEEEJournalList.txt                   |   696 +-
 src/resource/Icons.properties                      |   138 +-
 src/resource/IntegrityMessage.properties           |    22 +-
 src/resource/IntegrityMessage_da.properties        |    24 +-
 src/resource/IntegrityMessage_de.properties        |    26 +-
 src/resource/IntegrityMessage_en.properties        |    22 +-
 src/resource/IntegrityMessage_fr.properties        |    22 +-
 src/resource/IntegrityMessage_in.properties        |    24 +-
 src/resource/IntegrityMessage_it.properties        |    22 +-
 src/resource/IntegrityMessage_ja.properties        |    26 +-
 src/resource/IntegrityMessage_nl.properties        |    22 +-
 src/resource/IntegrityMessage_no.properties        |    22 +-
 src/resource/IntegrityMessage_tr.properties        |    24 +-
 src/resource/IntegrityMessage_vi.properties        |    26 +-
 src/resource/IntegrityMessage_zh.properties        |    24 +-
 src/resource/JabRef_da.properties                  |  3324 +--
 src/resource/JabRef_de.properties                  |  4900 ++--
 src/resource/JabRef_en.properties                  |  4870 ++--
 src/resource/JabRef_fr.properties                  |  3202 +--
 src/resource/JabRef_in.properties                  |  3144 +--
 src/resource/JabRef_it.properties                  |  3372 +--
 src/resource/JabRef_ja.properties                  |  4895 ++--
 src/resource/JabRef_nl.properties                  |  4872 ++--
 src/resource/JabRef_no.properties                  |  5854 ++---
 src/resource/JabRef_tr.properties                  |  3188 +--
 src/resource/JabRef_vi.properties                  |  4864 ++--
 src/resource/JabRef_zh.properties                  |  4846 ++--
 src/resource/Menu_da.properties                    |   254 +-
 src/resource/Menu_de.properties                    |   456 +-
 src/resource/Menu_en.properties                    |   296 +-
 src/resource/Menu_es.properties                    |   302 +-
 src/resource/Menu_fr.properties                    |   272 +-
 src/resource/Menu_in.properties                    |   248 +-
 src/resource/Menu_it.properties                    |   290 +-
 src/resource/Menu_ja.properties                    |   302 +-
 src/resource/Menu_nl.properties                    |   468 +-
 src/resource/Menu_no.properties                    |   292 +-
 src/resource/Menu_tr.properties                    |   254 +-
 src/resource/Menu_vi.properties                    |   300 +-
 src/resource/Menu_zh.properties                    |   296 +-
 src/resource/build.properties                      |     3 -
 src/resource/journalList.txt                       | 22188 +++++++++----------
 src/resource/layout/bibordf.article.layout         |    28 +-
 src/resource/layout/bibordf.begin.layout           |    20 +-
 src/resource/layout/bibordf.end.layout             |     2 +-
 src/resource/layout/bibordf.layout                 |    22 +-
 src/resource/layout/bibtexml.begin.layout          |    10 +-
 src/resource/layout/bibtexml.end.layout            |     2 +-
 src/resource/layout/bibtexml.layout                |    74 +-
 src/resource/layout/din1505/README.txt             |    12 +-
 .../layout/din1505/din1505winword.article.layout   |    30 +-
 .../layout/din1505/din1505winword.begin.layout     |     4 +-
 .../din1505/din1505winword.conference.layout       |    44 +-
 .../din1505/din1505winword.inproceedings.layout    |    44 +-
 src/resource/layout/din1505/din1505winword.layout  |   100 +-
 src/resource/layout/docbook.begin.layout           |     8 +-
 src/resource/layout/docbook.end.layout             |     2 +-
 src/resource/layout/docbook.layout                 |    40 +-
 src/resource/layout/docbook.mastersthesis.layout   |    22 +-
 src/resource/layout/endnote/EndNote.article.layout |    88 +-
 src/resource/layout/endnote/EndNote.book.layout    |    88 +-
 src/resource/layout/endnote/EndNote.booklet.layout |    88 +-
 src/resource/layout/endnote/EndNote.inbook.layout  |    88 +-
 .../layout/endnote/EndNote.incollection.layout     |    88 +-
 .../layout/endnote/EndNote.inproceedings.layout    |    88 +-
 src/resource/layout/endnote/EndNote.layout         |    88 +-
 src/resource/layout/endnote/EndNote.manual.layout  |    88 +-
 .../layout/endnote/EndNote.mastersthesis.layout    |    88 +-
 src/resource/layout/endnote/EndNote.misc.layout    |    88 +-
 src/resource/layout/endnote/EndNote.other.layout   |    88 +-
 .../layout/endnote/EndNote.phdthesis.layout        |    88 +-
 .../layout/endnote/EndNote.proceedings.layout      |    88 +-
 .../layout/endnote/EndNote.techreport.layout       |    88 +-
 .../layout/endnote/EndNote.unpublished.layout      |    88 +-
 src/resource/layout/endnote/Readme.txt             |   138 +-
 src/resource/layout/harvard/harvard.article.layout |    26 +-
 src/resource/layout/harvard/harvard.begin.layout   |     6 +-
 src/resource/layout/harvard/harvard.book.layout    |    36 +-
 src/resource/layout/harvard/harvard.inbook.layout  |    42 +-
 .../layout/harvard/harvard.incollection.layout     |    30 +-
 .../layout/harvard/harvard.inproceedings.layout    |    32 +-
 src/resource/layout/harvard/harvard.layout         |    72 +-
 .../layout/harvard/harvard.mastersthesis.layout    |    14 +-
 .../layout/harvard/harvard.phdthesis.layout        |    14 +-
 .../layout/harvard/harvard.proceedings.layout      |    36 +-
 src/resource/layout/harvard/harvard.readme         |   110 +-
 src/resource/layout/html.begin.layout              |   126 +-
 src/resource/layout/html.book.layout               |   114 +-
 src/resource/layout/html.end.layout                |    12 +-
 src/resource/layout/html.inbook.layout             |   150 +-
 src/resource/layout/html.inproceedings.layout      |   150 +-
 src/resource/layout/html.layout                    |   162 +-
 src/resource/layout/html.mastersthesis.layout      |   102 +-
 src/resource/layout/html.phdthesis.layout          |   102 +-
 src/resource/layout/openoffice/README              |    30 +-
 .../layout/openoffice/openoffice-csv.begin.layout  |     2 +-
 .../layout/openoffice/openoffice-csv.layout        |     2 +-
 src/resource/layout/ris/ris.article.layout         |    40 +-
 src/resource/layout/ris/ris.book.layout            |    44 +-
 src/resource/layout/ris/ris.conference.layout      |    46 +-
 src/resource/layout/ris/ris.incollection.layout    |    46 +-
 src/resource/layout/ris/ris.inproceedings.layout   |    46 +-
 src/resource/layout/ris/ris.layout                 |    44 +-
 src/resource/layout/ris/ris.mastersthesis.layout   |    34 +-
 src/resource/layout/ris/ris.patent.layout          |    36 +-
 src/resource/layout/ris/ris.phdthesis.layout       |    34 +-
 src/resource/layout/ris/ris.techreport.layout      |    42 +-
 src/resource/layout/ris/ris.unpublished.layout     |    34 +-
 src/resource/layout/ris/ris.www.layout             |    30 +-
 src/resource/layout/simplehtml.layout              |    16 +-
 .../layout/tablerefs/tablerefs.begin.layout        |   636 +-
 src/resource/layout/tablerefs/tablerefs.end.layout |    18 +-
 src/resource/layout/tablerefs/tablerefs.layout     |    16 +-
 .../tablerefsabsbib/tablerefsabsbib.begin.layout   |   816 +-
 .../tablerefsabsbib/tablerefsabsbib.end.layout     |    14 +-
 .../layout/tablerefsabsbib/tablerefsabsbib.layout  |    70 +-
 src/resource/layout/text.layout                    |    20 +-
 src/resource/log4j.properties                      |    12 +-
 src/resource/ods/manifest.xml                      |    14 +-
 src/resource/ods/meta.xml                          |    26 +-
 src/resource/ods/settings.xml                      |    10 +-
 src/resource/openoffice/default_authoryear.jstyle  |   112 +-
 src/resource/openoffice/default_numerical.jstyle   |    84 +-
 src/resource/openoffice/manifest.xml               |    12 +-
 src/resource/openoffice/meta.xml                   |    12 +-
 src/tests/net/sf/jabref/bibtexFiles/test.bib       |   558 +-
 src/tests/net/sf/jabref/bst/abbrv.bst              |  2196 +-
 .../net/sf/jabref/imports/CopacImporterTest1.txt   |    18 +-
 .../net/sf/jabref/imports/CopacImporterTest2.txt   |    68 +-
 src/tests/net/sf/jabref/imports/IEEEImport1.txt    |   118 +-
 .../net/sf/jabref/imports/IsiImporterTest1.isi     |    48 +-
 .../sf/jabref/imports/IsiImporterTestInspec.isi    |   242 +-
 .../sf/jabref/imports/IsiImporterTestMedline.isi   |    52 +-
 .../net/sf/jabref/imports/IsiImporterTestWOS.isi   |   268 +-
 src/tests/net/sf/jabref/imports/oai2.xml           |    76 +-
 src/tests/net/sf/jabref/imports/oai22.xml          |    58 +-
 src/tests/net/sf/jabref/imports/oai23.xml          |    74 +-
 src/tests/net/sf/jabref/util/twente.bib            |   318 +-
 .../net/sf/jabref/util/unlinkedFilesTestBib.bib    |    54 +-
 src/txt/CHANGELOG                                  |  2348 +-
 src/txt/INSTALL                                    |    58 +-
 src/txt/README                                     |   204 +-
 src/txt/TODO                                       |    56 +-
 src/txt/gpl2.txt                                   |   678 +-
 src/txt/gpl3.txt                                   |  1346 +-
 src/txt/lesser.txt                                 |  1004 +-
 src/windows/nsis/README.txt                        |    85 +-
 src/windows/nsis/fileassoc.nsh                     |   119 +
 src/windows/nsis/installer_languages/english.nsh   |    66 +-
 src/windows/nsis/installer_languages/french.nsh    |    66 +-
 src/windows/nsis/installer_languages/german.nsh    |    66 +-
 src/windows/nsis/launcher.nsi                      |   117 -
 src/windows/nsis/setup.nsi                         |   539 +-
 syncLang.py                                        |   748 +-
 1090 files changed, 219419 insertions(+), 223846 deletions(-)

diff --git a/.classpath b/.classpath
index 13fe71e..6c83259 100644
--- a/.classpath
+++ b/.classpath
@@ -1,42 +1,42 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src/java"/>
-	<classpathentry excluding="extensions/|java/|osx/|osx/osxadapter/|txt/|windows/" kind="src" path="src"/>
-	<classpathentry exported="true" kind="lib" path="lib/plugin/commons-logging.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/spin.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/microba.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/antlr.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/plugin/jpf.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/plugin/jpf-boot.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/plugin/JPFCodeGenerator-rt.jar" sourcepath="/JPFCodeGenerator/src"/>
-	<classpathentry exported="true" kind="lib" path="lib/glazedlists-1.8.0_java15.jar"/>
-	<classpathentry kind="lib" path="lib/mysql-connector-java-5.0.7-bin.jar"/>
-	<classpathentry kind="lib" path="lib/spl/sciplore/xstream-1.4.1.jar"/>
-	<classpathentry kind="lib" path="lib/spl/sciplore/mrDlib-serialization-api.jar" sourcepath="/Serialization API"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
-		<accessrules>
-			<accessrule kind="accessible" pattern="**"/>
-		</accessrules>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
-	<classpathentry exported="true" kind="con" path="org.eclipse.jdt.USER_LIBRARY/resources"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/sciplore"/>
-	<classpathentry kind="lib" path="lib/spl/jersey/mimepull-1.3.jar"/>
-	<classpathentry kind="lib" path="lib/oo/juh.jar"/>
-	<classpathentry kind="lib" path="lib/oo/jurt.jar"/>
-	<classpathentry kind="lib" path="lib/oo/ridl.jar"/>
-	<classpathentry kind="lib" path="lib/oo/unoil.jar"/>
-	<classpathentry kind="lib" path="lib/spl/jersey/jersey-client-1.14.jar"/>
-	<classpathentry kind="lib" path="lib/spl/jersey/jersey-core-1.14.jar"/>
-	<classpathentry kind="lib" path="lib/spl/jersey/jersey-multipart-1.14.jar"/>
-	<classpathentry kind="lib" path="lib/antlr-3.4-complete.jar"/>
-	<classpathentry kind="lib" path="lib/jgoodies-common-1.4.0.jar"/>
-	<classpathentry kind="lib" path="lib/jgoodies-forms-1.6.0.jar"/>
-	<classpathentry kind="lib" path="lib/jgoodies-looks-2.5.2.jar"/>
-	<classpathentry kind="lib" path="lib/fontbox-1.7.1.jar"/>
-	<classpathentry kind="lib" path="lib/jempbox-1.7.1.jar"/>
-	<classpathentry kind="lib" path="lib/pdfbox-1.7.1.jar"/>
-	<classpathentry kind="lib" path="lib/jayatana-1.2.4.jar"/>
-	<classpathentry kind="lib" path="lib/postgresql-9.2-1002.jdbc4.jar"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/java"/>
+	<classpathentry excluding="extensions/|java/|osx/|osx/osxadapter/|txt/|windows/" kind="src" path="src"/>
+	<classpathentry exported="true" kind="lib" path="lib/plugin/commons-logging.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/spin.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/microba.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/antlr.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/plugin/jpf.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/plugin/jpf-boot.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/plugin/JPFCodeGenerator-rt.jar" sourcepath="/JPFCodeGenerator/src"/>
+	<classpathentry exported="true" kind="lib" path="lib/glazedlists-1.8.0_java15.jar"/>
+	<classpathentry kind="lib" path="lib/mysql-connector-java-5.0.7-bin.jar"/>
+	<classpathentry kind="lib" path="lib/spl/sciplore/xstream-1.4.1.jar"/>
+	<classpathentry kind="lib" path="lib/spl/sciplore/mrDlib-serialization-api.jar" sourcepath="/Serialization API"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**"/>
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
+	<classpathentry exported="true" kind="con" path="org.eclipse.jdt.USER_LIBRARY/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/sciplore"/>
+	<classpathentry kind="lib" path="lib/spl/jersey/mimepull-1.3.jar"/>
+	<classpathentry kind="lib" path="lib/oo/juh.jar"/>
+	<classpathentry kind="lib" path="lib/oo/jurt.jar"/>
+	<classpathentry kind="lib" path="lib/oo/ridl.jar"/>
+	<classpathentry kind="lib" path="lib/oo/unoil.jar"/>
+	<classpathentry kind="lib" path="lib/spl/jersey/jersey-client-1.14.jar"/>
+	<classpathentry kind="lib" path="lib/spl/jersey/jersey-core-1.14.jar"/>
+	<classpathentry kind="lib" path="lib/spl/jersey/jersey-multipart-1.14.jar"/>
+	<classpathentry kind="lib" path="lib/antlr-3.4-complete.jar"/>
+	<classpathentry kind="lib" path="lib/jgoodies-common-1.4.0.jar"/>
+	<classpathentry kind="lib" path="lib/jgoodies-forms-1.6.0.jar"/>
+	<classpathentry kind="lib" path="lib/jgoodies-looks-2.5.2.jar"/>
+	<classpathentry kind="lib" path="lib/fontbox-1.7.1.jar"/>
+	<classpathentry kind="lib" path="lib/jempbox-1.7.1.jar"/>
+	<classpathentry kind="lib" path="lib/pdfbox-1.7.1.jar"/>
+	<classpathentry kind="lib" path="lib/jayatana-1.2.4.jar"/>
+	<classpathentry kind="lib" path="lib/postgresql-9.2-1002.jdbc4.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 08a55c0..0000000
--- a/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-.gradle
diff --git a/.project b/.project
index ca82803..5f864bb 100644
--- a/.project
+++ b/.project
@@ -1,17 +1,17 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>Jabref</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Jabref</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/JabRef - MrDlib.userlibraries b/JabRef - MrDlib.userlibraries
index f53acbe..935ae57 100644
--- a/JabRef - MrDlib.userlibraries	
+++ b/JabRef - MrDlib.userlibraries	
@@ -1,25 +1,25 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<eclipse-userlibraries>
-  <library name="resources" />
-  <library name="sciplore">
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/intellij/annotations.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/intellij/forms_rt.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/jersey-client-1.1.5.1.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/jersey-core-1.1.5.1.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/jersey-multipart-1.1.5.1.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/jsr311-api-1.1.1.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/mimepull-1.3.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/sciplore/SciPloreDBAccess.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/bcel.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/commons-logging-1.0.4.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/jaxme-js-0.3.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/jibx-bind.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/jibx-extras.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/jibx-run.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/log4j-1.2.8.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/xpp3.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/bindings.jar" />
-    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/freemind.jar" />
-  </library>
-</eclipse-userlibraries>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<eclipse-userlibraries>
+  <library name="resources" />
+  <library name="sciplore">
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/intellij/annotations.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/intellij/forms_rt.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/jersey-client-1.1.5.1.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/jersey-core-1.1.5.1.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/jersey-multipart-1.1.5.1.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/jsr311-api-1.1.1.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jersey/mimepull-1.3.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/sciplore/SciPloreDBAccess.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/bcel.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/commons-logging-1.0.4.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/jaxme-js-0.3.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/jibx-bind.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/jibx-extras.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/jibx-run.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/log4j-1.2.8.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/jibx/xpp3.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/bindings.jar" />
+    <archive path="C:/Users/Christoph Arbeit/Documents/Arbeit/Hiwi/JabRef - MrDlib/lib/spl/freemind.jar" />
+  </library>
+</eclipse-userlibraries>
+
diff --git a/build.gradle b/build.gradle
index 52890bc..aa66ada 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,88 +1,88 @@
-apply plugin: 'java'
-
-// with gradle 1.1, Sonar 3.2 is not working. One needs Sonar 3.1.1
-apply plugin: 'sonar'
-
-sourceSets {
-	main {
-		java {
-			srcDir 'src/java'
-		}
-		resources {
-			srcDir 'src/resource'
-		}
-	}
-}
-
-repositories {
-	mavenCentral()
-}
-
-/* ANTLR support for Bst.g
-Source: http://fenrock.wordpress.com/2012/05/17/gradle-and-antlr-3-x/
-*/
-
-configurations {
-	antlr3
-}
-
-dependencies {
-	compile 'org.antlr:antlr-runtime:3.4'
-	antlr3 'org.antlr:antlr:3.4'
-}
-task generateGrammarSource(type: JavaExec) {
-    def antlrSource = 'src/java/net/sf/jabref/bst'
-    destinationDir = antlrSource
-
-    inputs.dir file(antlrSource)
-    outputs.dir file(destinationDir)
-
-    def grammars = fileTree(antlrSource).include('**/*.g')
-
-    main = 'org.antlr.Tool'
-    classpath = configurations.antlr3
-    args = ["-o", "${destinationDir}", grammars.files].flatten()
-}
-
-/*
- Code for JavaNCSS adapted from http://gradle.codehaus.org/Cookbook#Cookbook-usingJavaNCSS
- JavaNCSS: http://www.kclee.de/clemens/java/javancss/
-
-Cyclomatic
-Complexity             Ease of       Risk
-Number (CCN)           maintenance
-(McCabe metric)
----------------------------------------------
-1-10, simple           easy          minimum
-11-20, complex         moderate      moderate
-21-50, more complex    hard          high
->50, unstable          very hard     very high
-*/
-
-configurations {
-    javancssConf
-}
-
-dependencies {
-    javancssConf 'org.codehaus.javancss:javancss:32.53'
-}
-
-task javancss << {
-    println 'Running javancss quality metrics tool'
-    ant {
-        taskdef(name:'javancss', classname:'javancss.JavancssAntTask', classpath: configurations.javancssConf.asPath)
-        javancss(
-			srcdir:'src/java',
-			includes:'**/*.java',
-			excludes:'jama/**/*.java, jmat/**/*.java, cformat/**/*.java',
-			abortOnFail:'false',
-			generateReport:'true',
-			outputfile:'build/javancss_report.plain',
-			ccnPerFuncMax:'30',
-			format:'plain',
-			packageMetrics:'true',
-			classMetrics:'false',
-			functionMetrics:'false'
-		)
-    }
-}
+apply plugin: 'java'
+
+// with gradle 1.1, Sonar 3.2 is not working. One needs Sonar 3.1.1
+apply plugin: 'sonar'
+
+sourceSets {
+	main {
+		java {
+			srcDir 'src/java'
+		}
+		resources {
+			srcDir 'src/resource'
+		}
+	}
+}
+
+repositories {
+	mavenCentral()
+}
+
+/* ANTLR support for Bst.g
+Source: http://fenrock.wordpress.com/2012/05/17/gradle-and-antlr-3-x/
+*/
+
+configurations {
+	antlr3
+}
+
+dependencies {
+	compile 'org.antlr:antlr-runtime:3.4'
+	antlr3 'org.antlr:antlr:3.4'
+}
+task generateGrammarSource(type: JavaExec) {
+    def antlrSource = 'src/java/net/sf/jabref/bst'
+    destinationDir = antlrSource
+
+    inputs.dir file(antlrSource)
+    outputs.dir file(destinationDir)
+
+    def grammars = fileTree(antlrSource).include('**/*.g')
+
+    main = 'org.antlr.Tool'
+    classpath = configurations.antlr3
+    args = ["-o", "${destinationDir}", grammars.files].flatten()
+}
+
+/*
+ Code for JavaNCSS adapted from http://gradle.codehaus.org/Cookbook#Cookbook-usingJavaNCSS
+ JavaNCSS: http://www.kclee.de/clemens/java/javancss/
+
+Cyclomatic
+Complexity             Ease of       Risk
+Number (CCN)           maintenance
+(McCabe metric)
+---------------------------------------------
+1-10, simple           easy          minimum
+11-20, complex         moderate      moderate
+21-50, more complex    hard          high
+>50, unstable          very hard     very high
+*/
+
+configurations {
+    javancssConf
+}
+
+dependencies {
+    javancssConf 'org.codehaus.javancss:javancss:32.53'
+}
+
+task javancss << {
+    println 'Running javancss quality metrics tool'
+    ant {
+        taskdef(name:'javancss', classname:'javancss.JavancssAntTask', classpath: configurations.javancssConf.asPath)
+        javancss(
+			srcdir:'src/java',
+			includes:'**/*.java',
+			excludes:'jama/**/*.java, jmat/**/*.java, cformat/**/*.java',
+			abortOnFail:'false',
+			generateReport:'true',
+			outputfile:'build/javancss_report.plain',
+			ccnPerFuncMax:'30',
+			format:'plain',
+			packageMetrics:'true',
+			classMetrics:'false',
+			functionMetrics:'false'
+		)
+    }
+}
diff --git a/build.number b/build.number
deleted file mode 100644
index 93569f7..0000000
--- a/build.number
+++ /dev/null
@@ -1,3 +0,0 @@
-#Build Number for ANT. Do not edit!
-#Sat Dec 15 16:18:55 CET 2012
-build.number=5
diff --git a/build.xml b/build.xml
index 4a5325a..4b994b5 100644
--- a/build.xml
+++ b/build.xml
@@ -1,600 +1,660 @@
-<?xml version="1.0"?>
-<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-   Filename: build.xml
-   Purpose:  Ant build file for Jabref.
-
-             Ant-Download: http://jakarta.apache.org/ant
-             Ant-Manual:   http://jakarta.apache.org/ant/manual/index.html
-
-             Jabref homepage:       http://jabref.sourceforge.net
-             Jabref at SourceForge:    http://sourceforge.net/projects/jabref
-             Jabref at FreeCode:       http://apps.freecode.com/projects/jabref
-             Jabref at Ohloh:          https://www.ohloh.net/p/jabref
-             Jabref git repository: git://jabref.git.sourceforge.net/gitroot/jabref/jabref
-
-             Further questions:
-               help mailing list:   https://lists.sourceforge.net/lists/listinfo/jabref-users
-
-   Precondition: 1. Ant should be installed.
-                 2. JAVA_HOME environment variable contains the path to JDK1.6 or higher
-                 3. ANT_HOME environment variable contains the path to ant's home directory
-
-   Language: XML
-   Compiler: Ant
-   Authors:  Joerg K. Wegner, wegnerj at informatik.uni-tuebingen.de
-             Morten O. Alver
-
-   modified: see at git checkout and "gitk build.xml"
-
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
-
-<project name="JabRef" default="jars" basedir=".">
-
-	<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-        PROPERTY SETUP
-     +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
-
-	<!-- some version information -->
-	<property name="jabref.version" value="2.9" />
-	<property name="jabref.year" value="2012" />
-	<property name="jabref.placeholder.version" value="@version@" />
-	<property name="jabref.placeholder.year" value="@year@" />
-	<!-- used by replace task -->
-
-	<!-- Set the properties for intermediate directory -->
-	<property name="build.jar" value="JabRef-${jabref.version}.jar" />
-	<property name="build.dir" value="build" />
-	<property name="build.classes" value="${build.dir}/classes" />
-	<property name="build.tmp" value="${build.dir}/tmp" />
-	<property name="build.osx" value="${build.dir}/classes/osxadapter" />
-	<property name="build.lib" value="${build.dir}/lib" />
-	<property name="build.win" value="${build.dir}/windows" />
-	<property name="build.images" value="${build.dir}/images" />
-	<property name="build.fonts" value="${build.dir}/images/font" />
-	<property name="build.resource" value="${build.dir}/resource" />
-	<property name="build.help" value="${build.dir}/help" />
-	<property name="build.javadocs" value="${build.dir}/docs/API" />
-	<property name="build.extensions" value="${build.dir}/extensions" />
-	<property name="build.extension-javadocs" value="${build.extensions}/API" />
-	<property name="build.extension-layout" value="${build.extensions}/layout" />
-	<property name="build.openoffice.meta" value="${build.resource}/openoffice" />
-	<property name="build.tests" value="${build.dir}/tests" />
-
-	<!-- Set the properties for source directories -->
-	<property name="src.dir" value="src" />
-	<property name="src.tests" value="src/java/tests" />
-	<property name="plugin.dir" value="src/plugins/" />
-	<property name="txt.dir" value="src/txt" />
-	<property name="java.dir" value="${src.dir}/java" />
-	<property name="osx.dir" value="${src.dir}/osx" />
-	<property name="win.installer.dir" value="${src.dir}/windows/nsis" />
-	<property name="resource.dir" value="${src.dir}/resource" />
-	<property name="bin.dir" value="${src.dir}/scripts" />
-	<property name="images.dir" value="${src.dir}/images" />
-	<property name="fonts.dir" value="${src.dir}/images/font" />
-	<property name="help.dir" value="${src.dir}/help" />
-	<property name="extensions.dir" value="${src.dir}/extensions" />
-	<property name="layout.dir" value="${src.dir}/resource/layout" />
-	<property name="lib.dir" value="lib" />
-	<property name="buildlib.dir" value="buildlib" />
-	<property name="tests.dir" value="${src.dir}/tests" />
-
-	<property name="osxbin.dir" value="osx" />
-
-	<property name="nsis.executable" value="C:\Program files\NSIS\makensis.exe"/>
-	<property name="nsis.executable.linux" value="makensis"/>
-
-	<!-- Load user dependent properties -->
-	<!-- For instance to redefine the NSIS-compiler write 
-		nsis.executable="d:\prog\dev\NSIS\makensis.exe"
-	  -->
-	<property file="user.properties" />
-
-	<!-- win.installer can only be build under Windows if the nsis.executable is found -->
-	<condition property="is.windows">
-	  <and>
-	    <isset property="nsis.executable" />
-	    <os family="windows" />
-	  </and>
-	</condition>
-
-	<fileset id="jarsFileset" dir="${lib.dir}">
-		<include name="antlr.jar" />
-		<include name="antlr-3.4-complete.jar" />
-        <include name="jgoodies-common-1.4.0.jar" />
-		<include name="jgoodies-looks-2.5.2.jar" />
-		<include name="jgoodies-forms-1.6.0.jar" />
-		<include name="jayatana-1.2.4.jar" />
-		<include name="spin.jar" />
-		<include name="glazedlists-1.8.0_java15.jar" />
-		<include name="microba.jar" />
-		<include name="pdfbox-1.7.1.jar" />
-		<include name="jempbox-1.7.1.jar" />
-		<include name="fontbox-1.7.1.jar" />
-		<include name="zoom-java.jar" />
-    	<include name="mysql-connector-java-5.0.7-bin.jar" />
-		<include name="postgresql-9.2-1002.jdbc4.jar" />
-        <!-- Plugin runtime dependencies -->
-		<include name="plugin/JPFCodeGenerator-rt.jar" />
-		<include name="plugin/jpf.jar" />
-		<include name="plugin/jpf-boot.jar" />
-		<include name="plugin/commons-logging.jar" />
-	</fileset>
-
-    <!-- Openoffice connection dependencies. Compile-time only -->
-    <fileset id="ooFileset" dir="${lib.dir}">
-        <include name="oo/unoil.jar" />
-        <include name="oo/ridl.jar" />
-        <include name="oo/juh.jar" />
-        <include name="oo/jurt.jar" />
-    </fileset>
-
-    <!-- Done by MrDlib -->
-    <fileset id="splJars" dir="${lib.dir}">
-        <include name="spl/**/*.jar" />
-        <include name="spl/*.jar" />
-    </fileset>
-	<fileset id="deletableMeta-InfFiles" dir="${build.tmp}/META-INF">
-	        <exclude name="services/**/*" />	        
-	</fileset>
-    <!-- Done by MrDlib -->
-
-	<!-- Build classpath -->
-	<path id="classpath">
-		<pathelement path="${build.classes}" />
-		<pathelement path="${build.dir}" />
-        <!-- Done by MrDlib -->
-        <pathelement path="${lib.dir}/spl" />
-        <fileset refid="splJars" />
-        <!-- Done by MrDlib -->
-		<fileset refid="jarsFileset" />
-        <fileset refid="ooFileset" />
-	</path>
-
-	<!-- Classpath for running the code generator -->
-	<path id="codegenerator">
-		<pathelement location="${lib.dir}/plugin/JPFCodeGenerator.jar" />
-		<pathelement location="${lib.dir}/plugin/jpf.jar" />
-		<pathelement location="${lib.dir}/plugin/jpf-boot.jar" />
-		<pathelement location="${lib.dir}/plugin/velocity-dep-1.5.jar" />
-	</path>
-
-	<!-- Classpath for tests -->
-	<path id="classpathTest">
-		<path refid="classpath" />
-		<pathelement location="${buildlib.dir}/junit.jar" />
-	</path>
-
-	<target name="run" depends="build">
-		<java classname="net.sf.jabref.JabRefMain" fork="true">
-			<classpath refid="classpath" />
-		</java>
-	</target>
-
-	<!-- Runs project -->
-	<target name="runFromJar">
-		<java dir="${build.lib}" classname="net.sf.jabref.JabRefMain" fork="true">
-			<classpath>
-				<pathelement location="${build.lib}/${build.jar}" />
-			</classpath>
-		</java>
-	</target>
-
-	<!-- Only rerun the code generator if plug-in xml or jars are newer than generated java file. -->
-	<uptodate property="needsNoRegenerate" targetfile="${java.dir}/net/sf/jabref/plugin/core/generated/_JabRefPlugin.java">
-		<srcfiles dir=".">
-			<include name="${plugin.dir}/**/plugin.xml" />
-			<include name="${lib.dir}/plugin/*.jar" />
-		</srcfiles>
-	</uptodate>
-
-	<!-- Run the JPF Code Generator -->
-	<target name="generate" unless="needsNoRegenerate">
-		<java classname="net.sf.jabref.plugin.util.CodeGenerator" fork="true">
-			<arg value="${plugin.dir}" />
-			<classpath refid="codegenerator" />
-		</java>
-	</target>
-
-	<!-- Compiles project excluding tests -->
-	<target name="compile" depends="generate">
-		<mkdir dir="${build.classes}" />
-		<javac debug="on" deprecation="on" destdir="${build.classes}" encoding="UTF8"
-		   source="1.6" target="1.6">
-			<src path="${java.dir}" />
-			<exclude name="tests/**" />
-			<exclude name="**/JabRefMain.java" />
-			<classpath refid="classpath" />
-		</javac>
-		<javac debug="off" deprecation="on" destdir="${build.classes}" source="1.6" target="1.6">
-			<src path="${java.dir}" />
-			<include name="**/JabRefMain.java" />
-		</javac>
-	</target>
-
-	<!-- Compiles project including tests -->
-	<target name="compiletest">
-		<mkdir dir="${build.classes}" />
-		<javac debug="on" destdir="${build.classes}" source="1.6" target="1.6">
-			<src path="${java.dir}" />
-			<include name="tests/**" />
-			<classpath refid="classpathTest" />
-		</javac>
-	</target>
-
-	<!-- Builds the OSXAdapter -->
-	<target name="osx">
-		<mkdir dir="${build.classes}" />
-
-		<javac srcdir="${osx.dir}" debug="off" destdir="${build.classes}" target="1.6">
-		</javac>
-	</target>
-
-	<!-- Copies in the OSXAdapter class, which is compilable only on Mac  -->
-	<target name="non_osx">
-		<mkdir dir="${build.osx}" />
-		<copy file="${osxbin.dir}/OSXAdapter.class" todir="${build.osx}" />
-	</target>
-
-	<!-- Jars up project -->
-	<target name="jars" depends="build, unjarlib">
-		<mkdir dir="${build.lib}" />
-        
-		<mkdir dir="${build.tmp}" />
-		<jar destfile="${build.lib}/${build.jar}" > 
-        <!--<jar destfile="${build.lib}/JabRef-${revision}.jar" manifest="${src.dir}/MANIFEST.MF">-->
-
-			<fileset dir="${build.classes}" />
-			<fileset dir="${build.tmp}" />
-			<fileset dir="${build.dir}">
-				<include name="images/**" />
-				<include name="help/**" />
-				<include name="resource/**" />
-			</fileset>
-
-			<!-- Add Plugins -->
-			<fileset dir="${src.dir}">
-				<include name="plugins/**" />
-			</fileset>
-             <!-- Done by MrDlib -->
-            <fileset dir ="${java.dir}">
-                <include name="spl/localization/spljabref.properties"/>
-                <include name="spl/gui/ajax-loader.gif"/>
-                <include name="spl/gui/mrdlib header.png"/>
-            </fileset>
-            <!-- Done by MrDlib -->
-			<fileset dir="${lib.dir}">
-				<include name="EndNote.zip" />
-			</fileset>
-			<fileset dir="${txt.dir}">
-				<include name="gpl2.txt" />
-				<include name="gpl3.txt" />
-				<include name="lesser.txt" />
-				<include name="jgoodies.txt" />
-				<include name="README" />
-			</fileset>
-			<manifest>
-				<attribute name="Main-Class" value="net.sf.jabref.JabRefMain" />
-                <attribute name="Class-Path" value="." />
-			</manifest>
-		</jar>
-
-	</target>
-
-	<!-- copy all necessary files and insert version informations -->
-	<target name="build" depends="compile, buildinfos" description="Build project">
-
-		<mkdir dir="${build.resource}" />
-
-		<copy todir="${build.resource}">
-			<fileset dir="${resource.dir}">
-				<include name="**" />
-			</fileset>
-		</copy>
-		<mkdir dir="${build.images}" />
-		<copy todir="${build.images}">
-			<fileset dir="${images.dir}">
-				<include name="**" />
-			</fileset>
-		</copy>
-
-		<mkdir dir="${build.help}" />
-		<copy todir="${build.help}">
-			<fileset dir="${help.dir}" />
-		</copy>
-
-		<!-- Insert version informations -->
-		<replace dir="${build.help}">
-		    <replacefilter
-			    token="${jabref.placeholder.version}" 
-				value="${jabref.version}" />
-		    <replacefilter
-			    token="${jabref.placeholder.year}" 
-				value="${jabref.year}" />
-			<include name="**/About.html" />
-		</replace>
-		<replace dir="${build.openoffice.meta}" token="${jabref.placeholder.version}" value="${jabref.version}">
-			<include name="meta.xml" />
-		</replace>
-
-	</target>
-
-	<!-- Prepare for testing -->
-	<target name="buildtest" depends="build, compiletest" description="Build project for testing">
-
-		<mkdir dir="${build.tests}" />
-		<copy todir="${build.tests}">
-			<fileset dir="${tests.dir}">
-				<include name="**" />
-			</fileset>
-		</copy>
-	</target>
-
-	<!-- generate and save some build infos !!! necessary for dynamic build infos !!! -->
-	<!-- todo : replace it by the replace task :-),
-          src/resource/build.properties = template
-          build/resource/build.properties = real info file
-	-->
-	<target name="buildinfos">
-		<tstamp />
-		<!-- get date -->
-		<buildnumber />
-		<!-- generate new build number -> build.number -->
-		<echo message="build number = ${build.number}" />
-		<!-- write the file, please do not edit this lines -->
-		<echo file="${resource.dir}/build.properties">builddate=${TODAY}
-build=${build.number}
-version=${jabref.version}</echo>
-	</target>
-
-
-	<!-- Creates all docs -->
-	<target name="docs" depends="javadocs" description="Generates all the documentation" />
-
-	<!-- Creates javadocs -->
-	<target name="javadocs" depends="compile" description="Generates the javadocs">
-		<mkdir dir="${build.javadocs}" />
-		<javadoc sourcepath="${java.dir}" destdir="${build.javadocs}" author="true" version="true" windowtitle="JabRef API" link="http://docs.oracle.com/javase/6/docs/api/">
-
-			<fileset dir="${java.dir}" defaultexcludes="yes">
-				<include name="**/*.java" />
-			</fileset>
-
-			<classpath refid="classpath" />
-		</javadoc>
-	</target>
-
-	<!-- Creates javadocs for the extensions -->
-	<target name="extension-javadocs" depends="build" description="Generates the javadocs for the extensions archive">
-		<mkdir dir="${build.extension-javadocs}" />
-		<copy todir="${build.extension-javadocs}">
-			<fileset dir="${help.dir}" defaultexcludes="yes">
-				<include name="CustomExports.html" />
-				<include name="CustomImports.html" />
-			</fileset>
-		</copy>
-
-		<javadoc sourcepath="${java.dir}" destdir="${build.extension-javadocs}" author="true" version="true" windowtitle="JabRef-Extensions API" link="http://docs.oracle.com/javase/6/docs/api/" Overview="${extensions.dir}/API/overview.html" access="protected">
-			<!-- 
-                 create javadoc only selectively for classes that 
-                 users extending JabRef are likely to use
-              -->
-			<fileset dir="${java.dir}" defaultexcludes="yes">
-				<include name="net/sf/jabref/imports/ImportFormat.java" />
-				<include name="net/sf/jabref/imports/ImportFormatReader.java" />
-				<include name="net/sf/jabref/BibtexEntry.java" />
-				<include name="net/sf/jabref/BibtexEntryType.java" />
-				<include name="net/sf/jabref/AuthorList.java" />
-				<include name="net/sf/jabref/AuthorList.java" />
-				<include name="net/sf/jabref/export/layout/LayoutFormatter.java" />
-			</fileset>
-
-			<classpath refid="classpath" />
-		</javadoc>
-	</target>
-
-	<!-- Creates javadocs for the extensions -->
-	<target name="extensions" depends="extension-javadocs" description="Generates the extensions archive">
-		<!-- copy examples -->
-		<copy todir="${build.extensions}">
-			<fileset dir="${java.dir}">
-				<include name="net/sf/jabref/export/layout/format/CurrentDate.java" />
-				<include name="net/sf/jabref/export/layout/format/ToLowerCase.java" />
-				<include name="net/sf/jabref/export/layout/format/HTMLChars.java" />
-				<include name="net/sf/jabref/imports/*Importer.java" />
-			</fileset>
-		</copy>
-		<mkdir dir="${build.extension-layout}" />
-		<copy todir="${build.extension-layout}">
-			<fileset dir="${layout.dir}" />
-		</copy>
-		<copy todir="${build.extensions}">
-			<fileset dir="${extensions.dir}" />
-			<filterset>
-				<filter token="version" value="${jabref.version}" />
-			</filterset>
-		</copy>
-		<!-- create extensions-zip file -->
-		<zip destfile="${build.dir}/jabref-extensions.zip">
-			<zipfileset dir="${build.extensions}" prefix="jabref-extensions" />
-		</zip>
-	</target>
-
-	<target name="clean" depends="win.installer.clean" description="Clean project">
-		<delete dir="${build.dir}" />
-	</target>
-
-	<!-- Unpacks jar needed jar files from lib directory into temp directory. -->
-	<target name="unjarlib" description="Unpacks jars from library">
-		<mkdir dir="${build.tmp}" />
-		<unjar dest="${build.tmp}">
-			<fileset refid="jarsFileset" />
-			<fileset refid="splJars" />
-		</unjar>
-		<!-- done by MrDlib -->
-		<delete includeEmptyDirs="true">
-			<fileset refid="deletableMeta-InfFiles" />
-		</delete>
-		<!-- done by MrDlib -->
-		<!-- rename the microba license file -->
-		<move file="${build.tmp}/license.txt" tofile="${build.tmp}/microba-license.txt" />
-	</target>
-
-
-	<target name="osxjar">
-		<jarbundler dir="${build.lib}"
-                    name="JabRef"
-                    mainclass="net.sf.jabref.JabRef"
-                    jars="${build.lib}/${build.jar}"
-                    icon="${images.dir}/JabRef-Logo.icns"
-                    version="${jabref.version}"
-                    jvmversion="1.5+"
-                    stubfile="${osxbin.dir}/JavaApplicationStub"
-                    signature="JABr">
-            <documenttype name="BibTeX file" extensions="bib" role="Editor"
-                          iconFile="${images.dir}/JabRef-Logo.icns"/>
-        </jarbundler>
-        <!-- After running jarbundler we need to hack the Info.plist file: -->
-        <replace file="${build.lib}/JabRef.app/Contents/Info.plist" token="<key>CFBundleDocumentTypes</key>"
-            value="<key>NSPrincipalClass</key>${line.separator}
-   <string>NSApplication</string>${line.separator}
-   <key>CFBundleDocumentTypes</key>"/>
-	</target>
-
-
-	<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
-	<!-- Build Windows Installer                                                    -->
-	<!--                                                                            -->
-	<!-- Don't forget to set nsis.executable property                               -->
-	<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
-
-	<target name="win.installer.clean" description="Delete Installer and Exe-Wrapper + Temp-files">
-		<delete failonerror="false" dir="${win.installer.dir}/dist" />
-		<delete file="${win.installer.dir}/JabRefSetup.exe" />
-	</target>
-
-	<target name="win.installer" description="Copy files in place to be used by the installer" depends="jars">
-
-		<fail unless="is.windows" message="Not running on windows or NSIS not found. Please make sure that user.properties exists" />
-
-		<!-- Gather everything that will go into the installer in dist -->
-		<mkdir dir="${win.installer.dir}/dist" />
-
-		<copy file="${build.lib}/${build.jar}" todir="${win.installer.dir}/dist" />
-
-		<available property="win.installer.jar.available" file="${win.installer.dir}/dist/${build.jar}" />
-
-		<fail unless="win.installer.jar.available" message="Did not find jar: ${build.jar}" />
-
-		<copy todir="${win.installer.dir}/dist">
-			<fileset dir="${txt.dir}">
-				<include name="gpl2.txt" />
-				<include name="gpl3.txt" />
-				<include name="lesser.txt" />
-				<include name="README" />
-			</fileset>
-		</copy>
-
-		<!-- "Create Exe-Wrapper" -->
-		<exec dir="." executable="${nsis.executable}" failonerror="true">
-		  <arg line="'/DJARFILE=${build.jar}' '/DVERSION=${jabref.version}' '/DAPPICON=../../../${images.dir}/JabRef.ico' ${win.installer.dir}/launcher.nsi" />
-		</exec>
-
-		<!-- Finally create Windows-Installer -->
-		<exec dir="." executable="${nsis.executable}" failonerror="true">
-			<arg line="'/DVERSION=${jabref.version}' ${win.installer.dir}/setup.nsi" />
-		</exec>
-
-		<delete dir="${win.installer.dir}/dist" />
-
-	</target>
-
-	<target name="win.installer.linux" description="Copy files in place to be used by the installer" depends="jars">
-
-		<!-- Gather everything that will go into the installer in dist -->
-		<mkdir dir="${win.installer.dir}/dist" />
-
-		<copy file="${build.lib}/${build.jar}" todir="${win.installer.dir}/dist" />
-
-		<available property="win.installer.jar.available" file="${win.installer.dir}/dist/${build.jar}" />
-
-		<fail unless="win.installer.jar.available" message="Did not find jar: ${build.jar}" />
-
-		<copy todir="${win.installer.dir}/dist">
-			<fileset dir="${txt.dir}">
-				<include name="gpl2.txt" />
-				<include name="gpl3.txt" />
-				<include name="lesser.txt" />
-				<include name="README" />
-			</fileset>
-		</copy>
-
-		<!-- "Create Exe-Wrapper" -->
-		<exec dir="." executable="${nsis.executable.linux}" failonerror="true">
-		  <arg line="'-DJARFILE=${build.jar}' '-DVERSION=${jabref.version}' '-DAPPICON=../../../${images.dir}/JabRef.ico' ${win.installer.dir}/launcher.nsi" />
-		</exec>
-
-		<!-- Finally create Windows-Installer -->
-		<exec dir="." executable="${nsis.executable.linux}" failonerror="true">
-			<arg line="'-DVERSION=${jabref.version}' ${win.installer.dir}/setup.nsi" />
-		</exec>
-
-		<delete dir="${win.installer.dir}/dist" />
-
-	</target>
-
-	<target name="test" depends="buildtest" description="Runs all unit tests">
-		<java fork="yes" classname="junit.textui.TestRunner" failonerror="true">
-			<arg value="tests.net.sf.jabref.AllTests" />
-			<classpath refid="classpathTest" />
-		</java>
-	</target>
-
-
-
-	<!--+++++++++++++++++++++++++++++++++++++++++++++++++
-	   Auxiliary targets
-	  +++++++++++++++++++++++++++++++++++++++++++++++++-->
-
-	<target name="profile" depends="jars" description="Profile JabRef">
-		<fail unless="netbeans.home">This target can only run inside the NetBeans IDE.</fail>
-
-		<nbprofiledirect>
-			<classpath refid="classpath" />
-		</nbprofiledirect>
-
-		<property environment="env" />
-		<java fork="true" classname="net.sf.jabref.JabRef" dir="${build.dir}" jvm="${profiler.info.jvm}">
-			<jvmarg value="${profiler.info.jvmargs.agent}" />
-			<jvmarg line="${profiler.info.jvmargs}" />
-			<env key="LD_LIBRARY_PATH" path="${profiler.info.agentpath}:${env.LD_LIBRARY_PATH}" />
-			<classpath refid="classpath" />
-		</java>
-	</target>
-
-	<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-        What's about the software design ?!;-)
-    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
-
-	<target name="jalopy" description="SOFTWAREDESIGN: source code formatter using the JOELib convention.">
-		<taskdef name="jalopy" classname="de.hunsicker.jalopy.plugin.ant.AntPlugin">
-			<classpath>
-				<pathelement path="${classpath}" />
-				<fileset dir="${lib.dir}">
-					<include name="*.jar" />
-				</fileset>
-				<fileset dir="${buildlib.dir}">
-					<include name="*.jar" />
-				</fileset>
-			</classpath>
-		</taskdef>
-		<jalopy fileformat="unix" convention="${src.dir}/java/jalopy.format.convention.xml" history="file" historymethod="adler32" loglevel="error" threads="2" classpathref="classpath" backup="bak">
-			<fileset dir="${src.dir}">
-				<include name="java/net/sf/jabref/**/*.java" />
-			</fileset>
-		</jalopy>
-	</target>
-
-	<taskdef name="jarbundler" classpath="${buildlib.dir}/jarbundler-2.2.0.jar" classname="net.sourceforge.jarbundler.JarBundler" />
-
-</project>
+<?xml version="1.0"?>
+<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   Filename: build.xml
+   Purpose:  Ant build file for Jabref.
+
+             Ant-Download: http://jakarta.apache.org/ant
+             Ant-Manual:   http://jakarta.apache.org/ant/manual/index.html
+
+             Jabref homepage:       http://jabref.sourceforge.net
+             Jabref at SourceForge:    http://sourceforge.net/projects/jabref
+             Jabref at FreeCode:       http://apps.freecode.com/projects/jabref
+             Jabref at Ohloh:          https://www.ohloh.net/p/jabref
+             Jabref git repository: git://jabref.git.sourceforge.net/gitroot/jabref/jabref
+
+             Further questions:
+               help mailing list:   https://lists.sourceforge.net/lists/listinfo/jabref-users
+
+   Precondition: 1. Ant should be installed.
+                 2. JAVA_HOME environment variable contains the path to JDK1.6 or higher
+                 3. ANT_HOME environment variable contains the path to ant's home directory
+
+   Language: XML
+   Compiler: Ant
+   Authors:  Joerg K. Wegner, wegnerj at informatik.uni-tuebingen.de
+             Morten O. Alver
+
+   modified: see at git checkout and "gitk build.xml"
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
+
+<project name="JabRef" default="jars" basedir=".">
+
+	<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+        PROPERTY SETUP
+     +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
+
+	<!-- some version information -->
+	<property name="jabref.version" value="2.9.1" />
+	<property name="jabref.version.full" value="2.9.1.1" /> <!-- a version number with 4 places. Required by launch4j -->
+	<property name="jabref.year" value="2013" />
+	<property name="jabref.placeholder.version" value="@version@" />
+	<property name="jabref.placeholder.year" value="@year@" />
+	<!-- used by replace task -->
+
+	<!-- Set the properties for intermediate directory -->
+	<property name="build.jar" value="JabRef-${jabref.version}.jar" />
+	<property name="build.dir" value="build" />
+	<property name="build.classes" value="${build.dir}/classes" />
+	<property name="build.tmp" value="${build.dir}/tmp" />
+	<property name="build.osx" value="${build.dir}/classes/osxadapter" />
+	<property name="build.lib" value="${build.dir}/lib" />
+	<property name="build.win" value="${build.dir}/windows" />
+	<property name="build.images" value="${build.dir}/images" />
+	<property name="build.fonts" value="${build.dir}/images/font" />
+	<property name="build.resource" value="${build.dir}/resource" />
+	<property name="build.help" value="${build.dir}/help" />
+	<property name="build.javadocs" value="${build.dir}/docs/API" />
+	<property name="build.extensions" value="${build.dir}/extensions" />
+	<property name="build.extension-javadocs" value="${build.extensions}/API" />
+	<property name="build.extension-layout" value="${build.extensions}/layout" />
+	<property name="build.openoffice.meta" value="${build.resource}/openoffice" />
+	<property name="build.tests" value="${build.dir}/tests" />
+
+	<!-- Set the properties for source directories -->
+	<property name="src.dir" value="src" />
+	<property name="src.tests" value="src/java/tests" />
+	<property name="plugin.dir" value="src/plugins/" />
+	<property name="txt.dir" value="src/txt" />
+	<property name="java.dir" value="${src.dir}/java" />
+	<property name="osx.dir" value="${src.dir}/osx" />
+	<property name="win.installer.dir" value="${src.dir}/windows/nsis" />
+	<property name="resource.dir" value="${src.dir}/resource" />
+	<property name="bin.dir" value="${src.dir}/scripts" />
+	<property name="images.dir" value="${src.dir}/images" />
+	<property name="fonts.dir" value="${src.dir}/images/font" />
+	<property name="help.dir" value="${src.dir}/help" />
+	<property name="extensions.dir" value="${src.dir}/extensions" />
+	<property name="layout.dir" value="${src.dir}/resource/layout" />
+	<property name="lib.dir" value="lib" />
+	<property name="buildlib.dir" value="buildlib" />
+	<property name="tests.dir" value="${src.dir}/tests" />
+
+	<property name="osxbin.dir" value="osx" />
+
+	<!-- Load user dependent properties. Has to happen before setting the properties here -->
+	<!-- For instance to redefine the NSIS-compiler write 
+		nsis.executable="d:\\prog\\dev\\NSIS\\makensis.exe"
+	  -->
+	<property file="user.properties" />
+
+	<property name="nsis.executable" value="C:\Program files\NSIS\makensis.exe"/>
+	<property name="nsis.executable.linux" value="makensis"/>
+	<property name="launch4j.dir" location="/opt/launch4j" />
+
+	<!-- win.installer can only be build under Windows if the nsis.executable is found -->
+	<condition property="is.windows">
+	  <and>
+	    <isset property="nsis.executable" />
+	    <os family="windows" />
+	  </and>
+	</condition>
+
+	<fileset id="jarsFileset" dir="${lib.dir}">
+		<include name="antlr.jar" />
+		<include name="antlr-3.4-complete.jar" />
+        <include name="jgoodies-common-1.4.0.jar" />
+		<include name="jgoodies-looks-2.5.2.jar" />
+		<include name="jgoodies-forms-1.6.0.jar" />
+		<include name="jayatana-1.2.4.jar" />
+		<include name="spin.jar" />
+		<include name="glazedlists-1.8.0_java15.jar" />
+		<include name="microba.jar" />
+		<include name="pdfbox-1.7.1.jar" />
+		<include name="jempbox-1.7.1.jar" />
+		<include name="fontbox-1.7.1.jar" />
+		<include name="zoom-java.jar" />
+    	<include name="mysql-connector-java-5.0.7-bin.jar" />
+		<include name="postgresql-9.2-1002.jdbc4.jar" />
+        <!-- Plugin runtime dependencies -->
+		<include name="plugin/JPFCodeGenerator-rt.jar" />
+		<include name="plugin/jpf.jar" />
+		<include name="plugin/jpf-boot.jar" />
+		<include name="plugin/commons-logging.jar" />
+	</fileset>
+
+    <!-- Openoffice connection dependencies. Compile-time only -->
+    <fileset id="ooFileset" dir="${lib.dir}">
+        <include name="oo/unoil.jar" />
+        <include name="oo/ridl.jar" />
+        <include name="oo/juh.jar" />
+        <include name="oo/jurt.jar" />
+    </fileset>
+
+    <!-- Done by MrDlib -->
+    <fileset id="splJars" dir="${lib.dir}">
+        <include name="spl/**/*.jar" />
+        <include name="spl/*.jar" />
+    </fileset>
+	<fileset id="deletableMeta-InfFiles" dir="${build.tmp}/META-INF">
+	        <exclude name="services/**/*" />	        
+	</fileset>
+    <!-- Done by MrDlib -->
+
+	<!-- Build classpath -->
+	<path id="classpath">
+		<pathelement path="${build.classes}" />
+		<pathelement path="${build.dir}" />
+        <!-- Done by MrDlib -->
+        <pathelement path="${lib.dir}/spl" />
+        <fileset refid="splJars" />
+        <!-- Done by MrDlib -->
+		<fileset refid="jarsFileset" />
+        <fileset refid="ooFileset" />
+	</path>
+
+	<!-- Classpath for running the code generator -->
+	<path id="codegenerator">
+		<pathelement location="${lib.dir}/plugin/JPFCodeGenerator.jar" />
+		<pathelement location="${lib.dir}/plugin/jpf.jar" />
+		<pathelement location="${lib.dir}/plugin/jpf-boot.jar" />
+		<pathelement location="${lib.dir}/plugin/velocity-dep-1.5.jar" />
+	</path>
+
+	<!-- Classpath for tests -->
+	<path id="classpathTest">
+		<path refid="classpath" />
+		<pathelement location="${buildlib.dir}/junit.jar" />
+	</path>
+
+	<target name="run" depends="build">
+		<java classname="net.sf.jabref.JabRefMain" fork="true">
+			<classpath refid="classpath" />
+		</java>
+	</target>
+
+	<!-- Runs project -->
+	<target name="runFromJar">
+		<java dir="${build.lib}" classname="net.sf.jabref.JabRefMain" fork="true">
+			<classpath>
+				<pathelement location="${build.lib}/${build.jar}" />
+			</classpath>
+		</java>
+	</target>
+
+	<!-- Only rerun the code generator if plug-in xml or jars are newer than generated java file. -->
+	<uptodate property="needsNoRegenerate" targetfile="${java.dir}/net/sf/jabref/plugin/core/generated/_JabRefPlugin.java">
+		<srcfiles dir=".">
+			<include name="${plugin.dir}/**/plugin.xml" />
+			<include name="${lib.dir}/plugin/*.jar" />
+		</srcfiles>
+	</uptodate>
+
+	<!-- Run the JPF Code Generator -->
+	<target name="generate" unless="needsNoRegenerate">
+		<java classname="net.sf.jabref.plugin.util.CodeGenerator" fork="true">
+			<arg value="${plugin.dir}" />
+			<classpath refid="codegenerator" />
+		</java>
+	</target>
+
+	<!-- Compiles project excluding tests -->
+	<target name="compile" depends="generate">
+		<mkdir dir="${build.classes}" />
+		<javac debug="on" deprecation="on" destdir="${build.classes}" encoding="UTF8"
+		   source="1.6" target="1.6">
+			<src path="${java.dir}" />
+			<exclude name="tests/**" />
+			<exclude name="**/JabRefMain.java" />
+			<classpath refid="classpath" />
+		</javac>
+		<javac debug="off" deprecation="on" destdir="${build.classes}" source="1.6" target="1.6">
+			<src path="${java.dir}" />
+			<include name="**/JabRefMain.java" />
+		</javac>
+	</target>
+
+	<!-- Compiles project including tests -->
+	<target name="compiletest">
+		<mkdir dir="${build.classes}" />
+		<javac debug="on" destdir="${build.classes}" source="1.6" target="1.6">
+			<src path="${java.dir}" />
+			<include name="tests/**" />
+			<classpath refid="classpathTest" />
+		</javac>
+	</target>
+
+	<!-- Builds the OSXAdapter -->
+	<target name="osx">
+		<mkdir dir="${build.classes}" />
+
+		<javac srcdir="${osx.dir}" debug="off" destdir="${build.classes}" target="1.6">
+		</javac>
+	</target>
+
+	<!-- Copies in the OSXAdapter class, which is compilable only on Mac  -->
+	<target name="non_osx">
+		<mkdir dir="${build.osx}" />
+		<copy file="${osxbin.dir}/OSXAdapter.class" todir="${build.osx}" />
+	</target>
+
+	<!-- Jars up project -->
+	<target name="jars" depends="build, unjarlib">
+		<mkdir dir="${build.lib}" />
+        
+		<mkdir dir="${build.tmp}" />
+		<jar destfile="${build.lib}/${build.jar}" > 
+        <!--<jar destfile="${build.lib}/JabRef-${revision}.jar" manifest="${src.dir}/MANIFEST.MF">-->
+
+			<fileset dir="${build.classes}" />
+			<fileset dir="${build.tmp}" />
+			<fileset dir="${build.dir}">
+				<include name="images/**" />
+				<include name="help/**" />
+				<include name="resource/**" />
+			</fileset>
+
+			<!-- Add Plugins -->
+			<fileset dir="${src.dir}">
+				<include name="plugins/**" />
+			</fileset>
+             <!-- Done by MrDlib -->
+            <fileset dir ="${java.dir}">
+                <include name="spl/localization/spljabref.properties"/>
+                <include name="spl/gui/ajax-loader.gif"/>
+                <include name="spl/gui/mrdlib header.png"/>
+            </fileset>
+            <!-- Done by MrDlib -->
+			<fileset dir="${lib.dir}">
+				<include name="EndNote.zip" />
+			</fileset>
+			<fileset dir="${txt.dir}">
+				<include name="gpl2.txt" />
+				<include name="gpl3.txt" />
+				<include name="lesser.txt" />
+				<include name="jgoodies.txt" />
+				<include name="README" />
+			</fileset>
+			<manifest>
+				<attribute name="Main-Class" value="net.sf.jabref.JabRefMain" />
+                <attribute name="Class-Path" value="." />
+			</manifest>
+		</jar>
+
+	</target>
+
+	<!-- updates version information with git information.
+	     should be used in development builds only
+
+	     Use "ant addgitinfo jars" to generate a jar with version information in the filename
+	-->
+	<target name="addgitinfo" description="Adds git version information in ${jabref.version} and ${build.jar}">
+		<exec executable="git" searchpath="true" outputproperty="git.version" failifexecutionfails="true" errorproperty="">
+			<arg value="log" />
+			<arg value="-1" />
+			<arg value="--pretty=format:%cd - %H" />
+			<arg value="--date=iso" />
+		</exec>
+		<script language="javascript"><![CDATA[
+			var gitVersion = project.getProperty("git.version");
+			if ((gitVersion != undefined) && (gitVersion.length() > 0)) {
+				// convert "2012-12-16 15:44:07 +0100 - a249a226" to "2012-12-16 15.44.07 - a249a226"
+				gitVersion = gitVersion.substr(0,13) + "." + gitVersion.substr(14,2) + "." + gitVersion.substr(17, 2) + gitVersion.substr(25);
+
+				// we have to update the properties using JavaScript as properties are normally immutable
+				// Properties can be updated using JavaScript and not with the <property>-Task
+				var jabrefVersion = project.getProperty("jabref.version");
+				jabrefVersion = jabrefVersion + " - " + gitVersion;
+				project.setProperty("jabref.version", jabrefVersion);
+				project.setProperty("build.jar", "JabRef-" + jabrefVersion + ".jar");
+			}
+		]]></script>
+	</target>
+
+	<!-- copy all necessary files and insert version informations -->
+	<target name="build" depends="compile, buildinfos" description="Build project">
+
+		<mkdir dir="${build.resource}" />
+
+		<copy todir="${build.resource}">
+			<fileset dir="${resource.dir}">
+				<include name="**" />
+			</fileset>
+		</copy>
+		<mkdir dir="${build.images}" />
+		<copy todir="${build.images}">
+			<fileset dir="${images.dir}">
+				<include name="**" />
+			</fileset>
+		</copy>
+
+		<mkdir dir="${build.help}" />
+		<copy todir="${build.help}">
+			<fileset dir="${help.dir}" />
+		</copy>
+
+		<!-- Insert version informations -->
+		<replace dir="${build.help}">
+		    <replacefilter
+			    token="${jabref.placeholder.version}" 
+				value="${jabref.version}" />
+		    <replacefilter
+			    token="${jabref.placeholder.year}" 
+				value="${jabref.year}" />
+			<include name="**/About.html" />
+		</replace>
+		<replace dir="${build.openoffice.meta}" token="${jabref.placeholder.version}" value="${jabref.version}">
+			<include name="meta.xml" />
+		</replace>
+
+	</target>
+
+	<!-- Prepare for testing -->
+	<target name="buildtest" depends="build, compiletest" description="Build project for testing">
+
+		<mkdir dir="${build.tests}" />
+		<copy todir="${build.tests}">
+			<fileset dir="${tests.dir}">
+				<include name="**" />
+			</fileset>
+		</copy>
+	</target>
+
+	<!-- generate and save some build infos !!! necessary for dynamic build infos !!! -->
+	<!-- todo : replace it by the replace task :-),
+          src/resource/build.properties = template
+          build/resource/build.properties = real info file
+	-->
+	<target name="buildinfos">
+		<tstamp />
+		<!-- get date -->
+		<buildnumber />
+		<!-- generate new build number -> build.number -->
+		<echo message="build number = ${build.number}" />
+		<!-- write the file, please do not edit this lines -->
+		<echo file="${resource.dir}/build.properties">builddate=${TODAY}
+build=${build.number}
+version=${jabref.version}</echo>
+	</target>
+
+
+	<!-- Creates all docs -->
+	<target name="docs" depends="javadocs" description="Generates all the documentation" />
+
+	<!-- Creates javadocs -->
+	<target name="javadocs" depends="compile" description="Generates the javadocs">
+		<mkdir dir="${build.javadocs}" />
+		<javadoc sourcepath="${java.dir}" destdir="${build.javadocs}" author="true" version="true" windowtitle="JabRef API" link="http://docs.oracle.com/javase/6/docs/api/">
+
+			<fileset dir="${java.dir}" defaultexcludes="yes">
+				<include name="**/*.java" />
+			</fileset>
+
+			<classpath refid="classpath" />
+		</javadoc>
+	</target>
+
+	<!-- Creates javadocs for the extensions -->
+	<target name="extension-javadocs" depends="build" description="Generates the javadocs for the extensions archive">
+		<mkdir dir="${build.extension-javadocs}" />
+		<copy todir="${build.extension-javadocs}">
+			<fileset dir="${help.dir}" defaultexcludes="yes">
+				<include name="CustomExports.html" />
+				<include name="CustomImports.html" />
+			</fileset>
+		</copy>
+
+		<javadoc sourcepath="${java.dir}" destdir="${build.extension-javadocs}" author="true" version="true" windowtitle="JabRef-Extensions API" link="http://docs.oracle.com/javase/6/docs/api/" Overview="${extensions.dir}/API/overview.html" access="protected">
+			<!-- 
+                 create javadoc only selectively for classes that 
+                 users extending JabRef are likely to use
+              -->
+			<fileset dir="${java.dir}" defaultexcludes="yes">
+				<include name="net/sf/jabref/imports/ImportFormat.java" />
+				<include name="net/sf/jabref/imports/ImportFormatReader.java" />
+				<include name="net/sf/jabref/BibtexEntry.java" />
+				<include name="net/sf/jabref/BibtexEntryType.java" />
+				<include name="net/sf/jabref/AuthorList.java" />
+				<include name="net/sf/jabref/AuthorList.java" />
+				<include name="net/sf/jabref/export/layout/LayoutFormatter.java" />
+			</fileset>
+
+			<classpath refid="classpath" />
+		</javadoc>
+	</target>
+
+	<!-- Creates javadocs for the extensions -->
+	<target name="extensions" depends="extension-javadocs" description="Generates the extensions archive">
+		<!-- copy examples -->
+		<copy todir="${build.extensions}">
+			<fileset dir="${java.dir}">
+				<include name="net/sf/jabref/export/layout/format/CurrentDate.java" />
+				<include name="net/sf/jabref/export/layout/format/ToLowerCase.java" />
+				<include name="net/sf/jabref/export/layout/format/HTMLChars.java" />
+				<include name="net/sf/jabref/imports/*Importer.java" />
+			</fileset>
+		</copy>
+		<mkdir dir="${build.extension-layout}" />
+		<copy todir="${build.extension-layout}">
+			<fileset dir="${layout.dir}" />
+		</copy>
+		<copy todir="${build.extensions}">
+			<fileset dir="${extensions.dir}" />
+			<filterset>
+				<filter token="version" value="${jabref.version}" />
+			</filterset>
+		</copy>
+		<!-- create extensions-zip file -->
+		<zip destfile="${build.dir}/jabref-extensions.zip">
+			<zipfileset dir="${build.extensions}" prefix="jabref-extensions" />
+		</zip>
+	</target>
+
+	<target name="clean" depends="win.installer.clean" description="Clean project">
+		<delete dir="${build.dir}" />
+	</target>
+
+	<!-- Unpacks jar needed jar files from lib directory into temp directory. -->
+	<target name="unjarlib" description="Unpacks jars from library">
+		<mkdir dir="${build.tmp}" />
+		<unjar dest="${build.tmp}">
+			<fileset refid="jarsFileset" />
+			<fileset refid="splJars" />
+		</unjar>
+		<!-- done by MrDlib -->
+		<delete includeEmptyDirs="true">
+			<fileset refid="deletableMeta-InfFiles" />
+		</delete>
+		<!-- done by MrDlib -->
+		<!-- rename the microba license file -->
+		<move file="${build.tmp}/license.txt" tofile="${build.tmp}/microba-license.txt" />
+	</target>
+
+
+	<target name="osxjar" depends="jars">
+		<jarbundler dir="${build.lib}"
+                    name="JabRef"
+                    mainclass="net.sf.jabref.JabRef"
+                    jars="${build.lib}/${build.jar}"
+                    icon="${images.dir}/JabRef-Logo.icns"
+                    version="${jabref.version}"
+                    jvmversion="1.5+"
+                    stubfile="${osxbin.dir}/JavaApplicationStub"
+                    signature="JABr">
+            <documenttype name="BibTeX file" extensions="bib" role="Editor"
+                          iconFile="${images.dir}/JabRef-Logo.icns"/>
+        </jarbundler>
+        <!-- After running jarbundler we need to hack the Info.plist file: -->
+        <replace file="${build.lib}/JabRef.app/Contents/Info.plist" token="<key>CFBundleDocumentTypes</key>"
+            value="<key>NSPrincipalClass</key>${line.separator}
+   <string>NSApplication</string>${line.separator}
+   <key>CFBundleDocumentTypes</key>"/>
+		<zip basedir="${build.lib}" destfile="${build.lib}/JabRef-${jabref.version}-OSX.zip" includes="JabRef.app/" level="9" />
+	</target>
+
+
+	<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
+	<!-- Build Windows Installer                                                    -->
+	<!--                                                                            -->
+	<!-- Don't forget to set nsis.executable and launch4j.dir properties            -->
+	<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
+
+	<target name="win.installer.clean" description="Delete Installer and Exe-Wrapper + Temp-files">
+		<delete failonerror="false" dir="${win.installer.dir}/dist" />
+		<delete file="${win.installer.dir}/JabRefSetup.exe" />
+	</target>
+
+	<target name="win.installer.win.pre" description="Precondition for win.installer on Windows">
+		<fail unless="is.windows" message="Not running on windows or NSIS not found. Please make sure that user.properties exists" />
+	</target>
+
+	<target name="win.installer.step1">
+		<!-- Gather everything that will go into the installer in dist -->
+		<mkdir dir="${win.installer.dir}/dist" />
+
+		<copy file="${build.lib}/${build.jar}" todir="${win.installer.dir}/dist" />
+
+		<available property="win.installer.jar.available" file="${win.installer.dir}/dist/${build.jar}" />
+
+		<fail unless="win.installer.jar.available" message="Did not find jar: ${build.jar}" />
+
+		<copy todir="${win.installer.dir}/dist">
+			<fileset dir="${txt.dir}">
+				<include name="gpl2.txt" />
+				<include name="gpl3.txt" />
+				<include name="lesser.txt" />
+				<include name="README" />
+			</fileset>
+		</copy>
+
+		<!-- "Create Exe-Wrapper" -->
+
+		<!-- first of all, update version information -->
+		<script language="javascript"><![CDATA[
+			// create new property with a maximum length of 50 characters
+			var txtFileVersion = project.getProperty("jabref.version");
+			if (txtFileVersion.length()>50) {
+				txtFileVersion = txtFileVersion.substring(0,50);
+			}
+			project.setProperty("txtFileVersion", txtFileVersion);
+		]]></script>
+		<delete file="jabref-launch4j.tmp" />
+		<copy file="jabref-launch4j.xml" tofile="jabref-launch4j.tmp" />
+		<replace file="jabref-launch4j.tmp">
+			<replacefilter token="1.1.1" value="${jabref.version}" />
+			<replacefilter token="3.3.3" value="${txtFileVersion}" />
+			<replacefilter token="2.2.2.2" value="${jabref.version.full}" />
+			<replacefilter token="./" value="${basedir}/" />
+		</replace>
+
+		<!-- launch4j ant task does not work as ld.exe gets the wrong path passed - see https://sourceforge.net/tracker/?func=detail&aid=3598164&group_id=95944&atid=613100 -->
+		<exec
+			executable="${launch4j.dir}/launch4jc.exe"
+			dir="${launch4j.dir}">
+			<arg value="${basedir}/jabref-launch4j.tmp"/>
+		</exec>
+	</target>
+
+	<target name="win.installer.step2.linux" description="Create Windows-Installer on Linux">
+		<!-- Finally create Windows-Installer -->
+		<exec dir="." executable="${nsis.executable.linux}" failonerror="true">
+			<arg line="'-DVERSION=${jabref.version}' ${win.installer.dir}/setup.nsi" />
+		</exec>
+	</target>
+
+	<target name="win.installer.step2.win" description="Create Windows-Installer on Windows">
+		<exec dir="." executable="${nsis.executable}" failonerror="true">
+			<arg line="'/DVERSION=${jabref.version}' ${win.installer.dir}/setup.nsi" />
+		</exec>
+	</target>
+
+	<target name="win.installer.step3">
+		<move file="${win.installer.dir}/JabRefSetup.exe" tofile="${build.lib}/JabRef-${jabref.version}-setup.exe" />
+		<delete dir="${win.installer.dir}/dist" />
+	</target>
+
+	<target name="win.installer" description="Copy files in place to be used by the installer" depends="win.installer.win.pre, jars, win.installer.step1, win.installer.step2.win, win.installer.step3">
+	</target>
+
+	<target name="win.installer.linux" description="Copy files in place to be used by the installer" depends="jars, win.installer.step1, win.installer.step2.linux, win.installer.step3">
+		<delete dir="${win.installer.dir}/dist" />
+
+	</target>
+
+	<target name="test" depends="buildtest" description="Runs all unit tests">
+		<java fork="yes" classname="junit.textui.TestRunner" failonerror="true">
+			<arg value="tests.net.sf.jabref.AllTests" />
+			<classpath refid="classpathTest" />
+		</java>
+	</target>
+
+	<!--+++++++++++++++++++++++++++++++++++++++++++++++++
+	   Auxiliary targets
+	  +++++++++++++++++++++++++++++++++++++++++++++++++-->
+
+	<target name="profile" depends="jars" description="Profile JabRef">
+		<fail unless="netbeans.home">This target can only run inside the NetBeans IDE.</fail>
+
+		<nbprofiledirect>
+			<classpath refid="classpath" />
+		</nbprofiledirect>
+
+		<property environment="env" />
+		<java fork="true" classname="net.sf.jabref.JabRef" dir="${build.dir}" jvm="${profiler.info.jvm}">
+			<jvmarg value="${profiler.info.jvmargs.agent}" />
+			<jvmarg line="${profiler.info.jvmargs}" />
+			<env key="LD_LIBRARY_PATH" path="${profiler.info.agentpath}:${env.LD_LIBRARY_PATH}" />
+			<classpath refid="classpath" />
+		</java>
+	</target>
+
+	<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+        What's about the software design ?!;-)
+    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
+
+	<target name="jalopy" description="SOFTWAREDESIGN: source code formatter using the JOELib convention.">
+		<taskdef name="jalopy" classname="de.hunsicker.jalopy.plugin.ant.AntPlugin">
+			<classpath>
+				<pathelement path="${classpath}" />
+				<fileset dir="${lib.dir}">
+					<include name="*.jar" />
+				</fileset>
+				<fileset dir="${buildlib.dir}">
+					<include name="*.jar" />
+				</fileset>
+			</classpath>
+		</taskdef>
+		<jalopy fileformat="unix" convention="${src.dir}/java/jalopy.format.convention.xml" history="file" historymethod="adler32" loglevel="error" threads="2" classpathref="classpath" backup="bak">
+			<fileset dir="${src.dir}">
+				<include name="java/net/sf/jabref/**/*.java" />
+			</fileset>
+		</jalopy>
+	</target>
+
+	<taskdef name="jarbundler" classpath="${buildlib.dir}/jarbundler-2.2.0.jar" classname="net.sourceforge.jarbundler.JarBundler" />
+
+	<target name="zipsrc">
+		<!-- clone current repo into tmp dir. Reason: we want to have a clean src.zip, but do not want to execute "git clean -xdf" to allow developers having some temporary files (and user.properties) -->
+		<tempfile property="temp.dir" destDir="${java.io.tmpdir}" prefix="jabrefsrc"/>
+		<mkdir dir="${temp.dir}"/>
+		<exec executable="git" searchpath="true" failifexecutionfails="true" outputproperty="devnull" errorproperty="devnull">
+			<arg value="clone" />
+			<arg value="${basedir}/.." />
+			<arg value="${temp.dir}" />
+		</exec>
+		<!-- <property name="temp.dir" value="C:\Users\Oliver\AppData\Local\Temp\jabrefsrc628715364" /> -->
+
+		<!-- we want to have jabref-${jabref.version} as main directory -->
+		<property name="distsrc" value="${temp.dir}/distsrc/" />
+		<mkdir dir="${distsrc}" />
+		<move file="${temp.dir}/jabref" tofile="${distsrc}/jabref-${jabref.version}" />
+
+		<zip destfile="${build.lib}/JabRef-${jabref.version}-src.zip" basedir="${distsrc}" level="9" />
+		<tar destfile="${build.lib}/JabRef-${jabref.version}-src.tar.bz2" basedir="${distsrc}" excludes=".git/" compression="bzip2" />
+
+		<delete dir="${temp.dir}" failonerror="no"/>
+	</target>
+
+	<!-- creates all distribution files in ${build.lib} -->
+	<target name="release" depends="clean, win.installer, osxjar, zipsrc" />
+</project>
diff --git a/buildlib/licenses.txt b/buildlib/licenses.txt
index 3f1a2ee..82cce3d 100644
--- a/buildlib/licenses.txt
+++ b/buildlib/licenses.txt
@@ -1,20 +1,20 @@
-Path:    jalopy-1.0b10.jar
-Project: Jalopy Java Source Code Formatter
-URL:     http://sourceforge.net/projects/jalopy/
-License: BSD
-
-Path:    jalopy-ant-0.6.1.jar
-Project: Jalopy Java Source Code Formatter
-URL:     http://sourceforge.net/projects/jalopy/
-License: BSD
-
-Path:    jarbundler-2.2.0.jar
-Project: Mac OS X JarBundler ANT Task
-URL:     http://informagen.com/JarBundler/index.html
-License: GPLv2
-Note:    Required to build Mac OS X Jar
-
-Path:    junit.jar
-Project: JUnit 3
-URL:     http://www.junit.org/
-License: CPL 1.0
+Path:    jalopy-1.0b10.jar
+Project: Jalopy Java Source Code Formatter
+URL:     http://sourceforge.net/projects/jalopy/
+License: BSD
+
+Path:    jalopy-ant-0.6.1.jar
+Project: Jalopy Java Source Code Formatter
+URL:     http://sourceforge.net/projects/jalopy/
+License: BSD
+
+Path:    jarbundler-2.2.0.jar
+Project: Mac OS X JarBundler ANT Task
+URL:     http://informagen.com/JarBundler/index.html
+License: GPLv2
+Note:    Required to build Mac OS X Jar
+
+Path:    junit.jar
+Project: JUnit 3
+URL:     http://www.junit.org/
+License: CPL 1.0
diff --git a/combineJournalLists.py b/combineJournalLists.py
index be14c76..05bdbea 100644
--- a/combineJournalLists.py
+++ b/combineJournalLists.py
@@ -1,31 +1,31 @@
-#!/usr/bin/python
-
-# Python script for combining several journal abbreviation lists
-# and producing an alphabetically sorted list. If the same journal
-# names are repeated, only the version found last is retained.
-#
-# Usage: combineJournalLists.py outfile infile1 infile2 ...
-
-import sys
-import fnmatch
-import os
-
-outFile = sys.argv[1]
-dictionary = dict()
-for i in range(2,len(sys.argv)):
-    count = 0
-    f = open(sys.argv[i], "r")
-    for line in f:
-	if line[0] != "#":
-	    count = count+1
-	    parts = line.partition("=")
-	    dictionary[parts[0].strip()] = line.strip()
-    f.close()
-    print sys.argv[i]+": "+str(count)
-
-print "Combined key count: "+str(len(dictionary))
-
-f = open(outFile, "w")
-for key in sorted(dictionary.iterkeys()):
-      f.write(dictionary[key]+"\n")
-f.close()
+#!/usr/bin/python
+
+# Python script for combining several journal abbreviation lists
+# and producing an alphabetically sorted list. If the same journal
+# names are repeated, only the version found last is retained.
+#
+# Usage: combineJournalLists.py outfile infile1 infile2 ...
+
+import sys
+import fnmatch
+import os
+
+outFile = sys.argv[1]
+dictionary = dict()
+for i in range(2,len(sys.argv)):
+    count = 0
+    f = open(sys.argv[i], "r")
+    for line in f:
+	if line[0] != "#":
+	    count = count+1
+	    parts = line.partition("=")
+	    dictionary[parts[0].strip()] = line.strip()
+    f.close()
+    print sys.argv[i]+": "+str(count)
+
+print "Combined key count: "+str(len(dictionary))
+
+f = open(outFile, "w")
+for key in sorted(dictionary.iterkeys()):
+      f.write(dictionary[key]+"\n")
+f.close()
diff --git a/deploy b/deploy
index 871260c..a656967 100644
--- a/deploy
+++ b/deploy
@@ -1,16 +1,16 @@
-#!/bin/bash
-
-# Deploy script for JabRef. Builds jar file and OSX package, and creates source zip and tarball.
-rm ~/release_jabref/$1/*
-cd ~/jabref-$1/
-ant clean
-cd ~
-zip -r release_jabref/$1/JabRef-$1-src.zip jabref-$1
-tar cjf release_jabref/$1/JabRef-$1-src.tar.bz2 jabref-$1
-cd ~/jabref-$1/
-ant compile unjarlib non_osx jars osxjar
-cd build/lib
-cp JabRef-$1.jar ~/release_jabref/$1/
-zip -r ~/release_jabref/$1/JabRef-$1.OSX.zip JabRef.app
-cd ~/jabref-$1/
-
+#!/bin/bash
+
+# Deploy script for JabRef. Builds jar file and OSX package, and creates source zip and tarball.
+rm ~/release_jabref/$1/*
+cd ~/jabref-$1/
+ant clean
+cd ~
+zip -r release_jabref/$1/JabRef-$1-src.zip jabref-$1
+tar cjf release_jabref/$1/JabRef-$1-src.tar.bz2 jabref-$1
+cd ~/jabref-$1/
+ant compile unjarlib non_osx jars osxjar
+cd build/lib
+cp JabRef-$1.jar ~/release_jabref/$1/
+zip -r ~/release_jabref/$1/JabRef-$1.OSX.zip JabRef.app
+cd ~/jabref-$1/
+
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..e3b3376
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..52b783b
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Thu Aug 16 16:15:51 CEST 2012
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=http\://services.gradle.org/distributions/gradle-1.1-bin.zip
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..871c280
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,164 @@
+#!/bin/bash
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/"
+APP_HOME="`pwd -P`"
+cd "$SAVED"
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query businessSystem maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+    JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..aec9973
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,90 @@
+ at if "%DEBUG%" == "" @echo off
+ at rem ##########################################################################
+ at rem
+ at rem  Gradle startup script for Windows
+ at rem
+ at rem ##########################################################################
+
+ at rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+ at rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+ at rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+ at rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+ at rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+ at rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+ at rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+ at rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+ at rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/jabref-launch4j.xml b/jabref-launch4j.xml
new file mode 100644
index 0000000..f4efc92
--- /dev/null
+++ b/jabref-launch4j.xml
@@ -0,0 +1,36 @@
+<launch4jConfig>
+  <dontWrapJar>true</dontWrapJar>
+  <headerType>gui</headerType>
+  <jar>JabRef-1.1.1.jar</jar>
+  <outfile>.\src\windows\nsis\dist\JabRef.exe</outfile>
+  <errTitle></errTitle>
+  <cmdLine></cmdLine>
+  <chdir></chdir>
+  <priority>normal</priority>
+  <downloadUrl>http://java.com/download</downloadUrl>
+  <supportUrl></supportUrl>
+  <customProcName>false</customProcName>
+  <stayAlive>false</stayAlive>
+  <manifest></manifest>
+  <icon>.\src\images\JabRef.ico</icon>
+  <jre>
+    <path></path>
+    <minVersion>1.6.0</minVersion>
+    <maxVersion></maxVersion>
+    <jdkPreference>preferJre</jdkPreference>
+    <initialHeapSize>32</initialHeapSize>
+    <maxHeapSize>512</maxHeapSize>
+  </jre>
+  <versionInfo>
+    <fileVersion>2.2.2.2</fileVersion>
+    <txtFileVersion>3.3.3</txtFileVersion>
+    <fileDescription>JabRef</fileDescription>
+    <copyright>JabRef developers</copyright>
+    <productVersion>2.2.2.2</productVersion>
+    <txtProductVersion>3.3.3</txtProductVersion>
+    <productName>JabRef</productName>
+    <companyName></companyName>
+    <internalName>JabRef</internalName>
+    <originalFilename>JabRef.exe</originalFilename>
+  </versionInfo>
+</launch4jConfig>
\ No newline at end of file
diff --git a/jabref.ebuild b/jabref.ebuild
index 4e00a93..3000763 100644
--- a/jabref.ebuild
+++ b/jabref.ebuild
@@ -1,79 +1,79 @@
-#See also https://bugs.gentoo.org/show_bug.cgi?id=385751
-
-#=========== jabref ebuild hacked from dmol's 2.8.1 ==============
-# Copyright 1999-2012 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header:  $
-
-EAPI=4
-
-WANT_ANT_TASKS="dev-java/jarbundler:0"
-#docs aren't builded correctly?
-JAVA_PKG_IUSE=""
-inherit eutils java-pkg-2 java-ant-2
-
-MY_PV="${PV/_beta/b}"
-
-DESCRIPTION="GUI frontend for BibTeX, written in Java"
-HOMEPAGE="http://jabref.sourceforge.net/"
-SRC_URI="mirror://sourceforge/${PN}/JabRef-${MY_PV}-src.tar.bz2"
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="~amd64 ~x86"
-IUSE="mysql"
-
-#do not include antlr-3, use shipped antlr-3.0b5.jar ?
-#       >=dev-java/antlr-3.1.3:3[java]
-CDEPEND="dev-java/spin:0
-        dev-java/glazedlists:1.8
-        dev-java/jempbox:1.7
-        dev-java/pdfbox:1.7
-        >=dev-java/antlr-2.7.3:0[java]
-        >=dev-java/jgoodies-forms-1.1.0:0
-        dev-java/jgoodies-looks:2.0
-        >=dev-java/microba-0.4.3:0
-        dev-java/commons-logging:0
-        dev-java/jpf:1.5
-        dev-java/jpfcodegen:0
-        dev-java/jgoodies-forms:0
-        mysql? ( dev-java/jdbc-mysql:0 )"
-
-RDEPEND=">=virtual/jre-1.6
-        ${CDEPEND}"
-
-DEPEND=">=virtual/jdk-1.6
-        ${CDEPEND}"
-
-S="${WORKDIR}/${PN}-${MY_PV}"
-
-JAVA_ANT_REWRITE_CLASSPATH="true"
-#EANT_ANT_TASKS="jarbundler"
-EANT_BUILD_TARGET="jars"
-EANT_DOC_TARGET="docs"
-
-#do not include antlr-3, use shipped antlr-3.0b5.jar
-EANT_GENTOO_CLASSPATH="antlr,commons-logging,glazedlists-1.8,jempbox-1.7,jgoodies-forms,jgoodies-looks-2.0,jpf-1.5,microba,pdfbox-1.7,spin"
-EANT_GENTOO_CLASSPATH_EXTRA="${S}/lib/antlr-3.0b5.jar"
-
-src_install() {
-        java-pkg_newjar build/lib/JabRef-${MY_PV}.jar
-        java-pkg_dojar lib/antlr-3.0b5.jar
-        java-pkg_dojar lib/plugin/JPFCodeGenerator-rt.jar
-
-        #are not builded? Investigate why
-        #use doc && java-pkg_dojavadoc build/docs/API
-        dodoc src/txt/README
-
-        java-pkg_dolauncher ${PN} \
-                --main net.sf.jabref.JabRef
-
-        dodir /usr/share/${PN}/lib/plugins
-        keepdir /usr/share/${PN}/lib/plugins
-
-        java-pkg_register-optional-dependency jdbc-mysql
-
-        newicon src/images/JabRef-icon-48.png JabRef-icon.png || die
-        make_desktop_entry ${PN} JabRef JabRef-icon Office
-        echo "MimeType=text/x-bibtex;" >> "${D}/usr/share/applications/${PN}-${PN}.desktop"
-}
+#See also https://bugs.gentoo.org/show_bug.cgi?id=385751
+
+#=========== jabref ebuild hacked from dmol's 2.8.1 ==============
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header:  $
+
+EAPI=4
+
+WANT_ANT_TASKS="dev-java/jarbundler:0"
+#docs aren't builded correctly?
+JAVA_PKG_IUSE=""
+inherit eutils java-pkg-2 java-ant-2
+
+MY_PV="${PV/_beta/b}"
+
+DESCRIPTION="GUI frontend for BibTeX, written in Java"
+HOMEPAGE="http://jabref.sourceforge.net/"
+SRC_URI="mirror://sourceforge/${PN}/JabRef-${MY_PV}-src.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="mysql"
+
+#do not include antlr-3, use shipped antlr-3.0b5.jar ?
+#       >=dev-java/antlr-3.1.3:3[java]
+CDEPEND="dev-java/spin:0
+        dev-java/glazedlists:1.8
+        dev-java/jempbox:1.7
+        dev-java/pdfbox:1.7
+        >=dev-java/antlr-2.7.3:0[java]
+        >=dev-java/jgoodies-forms-1.1.0:0
+        dev-java/jgoodies-looks:2.0
+        >=dev-java/microba-0.4.3:0
+        dev-java/commons-logging:0
+        dev-java/jpf:1.5
+        dev-java/jpfcodegen:0
+        dev-java/jgoodies-forms:0
+        mysql? ( dev-java/jdbc-mysql:0 )"
+
+RDEPEND=">=virtual/jre-1.6
+        ${CDEPEND}"
+
+DEPEND=">=virtual/jdk-1.6
+        ${CDEPEND}"
+
+S="${WORKDIR}/${PN}-${MY_PV}"
+
+JAVA_ANT_REWRITE_CLASSPATH="true"
+#EANT_ANT_TASKS="jarbundler"
+EANT_BUILD_TARGET="jars"
+EANT_DOC_TARGET="docs"
+
+#do not include antlr-3, use shipped antlr-3.0b5.jar
+EANT_GENTOO_CLASSPATH="antlr,commons-logging,glazedlists-1.8,jempbox-1.7,jgoodies-forms,jgoodies-looks-2.0,jpf-1.5,microba,pdfbox-1.7,spin"
+EANT_GENTOO_CLASSPATH_EXTRA="${S}/lib/antlr-3.0b5.jar"
+
+src_install() {
+        java-pkg_newjar build/lib/JabRef-${MY_PV}.jar
+        java-pkg_dojar lib/antlr-3.0b5.jar
+        java-pkg_dojar lib/plugin/JPFCodeGenerator-rt.jar
+
+        #are not builded? Investigate why
+        #use doc && java-pkg_dojavadoc build/docs/API
+        dodoc src/txt/README
+
+        java-pkg_dolauncher ${PN} \
+                --main net.sf.jabref.JabRef
+
+        dodir /usr/share/${PN}/lib/plugins
+        keepdir /usr/share/${PN}/lib/plugins
+
+        java-pkg_register-optional-dependency jdbc-mysql
+
+        newicon src/images/JabRef-icon-48.png JabRef-icon.png || die
+        make_desktop_entry ${PN} JabRef JabRef-icon Office
+        echo "MimeType=text/x-bibtex;" >> "${D}/usr/share/applications/${PN}-${PN}.desktop"
+}
diff --git a/src/extensions/API/overview.html b/src/extensions/API/overview.html
index d6ac343..bd89e8a 100644
--- a/src/extensions/API/overview.html
+++ b/src/extensions/API/overview.html
@@ -1,18 +1,18 @@
-<html>
-<head>
-  <title>JabRef-Extensions help</title>
-</head>
-
-<body>
-  <p>
-    JabRef can be extended in several ways.
-    To find out how to extend JabRef, please choose one of
-    <ul>
-    <li><a href="CustomExports.html">custom export layouts</a><br/>
-    </li>
-    <li><a href="CustomImports.html">custom importers</a><br/>
-    </li> 
-  </ul>
-  </p>
-</body>
+<html>
+<head>
+  <title>JabRef-Extensions help</title>
+</head>
+
+<body>
+  <p>
+    JabRef can be extended in several ways.
+    To find out how to extend JabRef, please choose one of
+    <ul>
+    <li><a href="CustomExports.html">custom export layouts</a><br/>
+    </li>
+    <li><a href="CustomImports.html">custom importers</a><br/>
+    </li> 
+  </ul>
+  </p>
+</body>
 </html>
\ No newline at end of file
diff --git a/src/extensions/SimpleCsvImporter.csv b/src/extensions/SimpleCsvImporter.csv
index 0585107..2d53665 100644
--- a/src/extensions/SimpleCsvImporter.csv
+++ b/src/extensions/SimpleCsvImporter.csv
@@ -1,3 +1,3 @@
-1936;John Maynard Keynes;The General Theory of Employment, Interest and Money
-2003;Boldrin & Levine;Case Against Intellectual Monopoly
+1936;John Maynard Keynes;The General Theory of Employment, Interest and Money
+2003;Boldrin & Levine;Case Against Intellectual Monopoly
 2004;ROBERT HUNT AND JAMES BESSEN;The Software Patent Experiment
\ No newline at end of file
diff --git a/src/extensions/SimpleCsvImporter.java b/src/extensions/SimpleCsvImporter.java
index 3b4ee40..fe39750 100644
--- a/src/extensions/SimpleCsvImporter.java
+++ b/src/extensions/SimpleCsvImporter.java
@@ -1,36 +1,36 @@
-import java.io.*;
-import java.util.*;
-import net.sf.jabref.*;
-import net.sf.jabref.imports.ImportFormat;
-import net.sf.jabref.imports.ImportFormatReader;
-
-public class SimpleCsvImporter extends ImportFormat {
-
-  public String getFormatName() {
-    return "Simple CSV Importer";
-  }
-
-  public boolean isRecognizedFormat(InputStream stream) throws IOException {
-    return true; // this is discouraged except for demonstration purposes
-  }
-  
-  public List importEntries(InputStream stream) throws IOException {    
-    ArrayList bibitems = new ArrayList();
-    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-      
-    String line = in.readLine();
-    while (line != null) {
-      if (!"".equals(line.trim())) {
-        String[] fields = line.split(";");
-        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
-        be.setType(BibtexEntryType.getType("techreport"));
-        be.setField("year", fields[0]);
-        be.setField("author", fields[1]);
-        be.setField("title", fields[2]);
-        bibitems.add(be);
-        line = in.readLine();
-      }     
-    }
-    return bibitems;      
-  }
-}
+import java.io.*;
+import java.util.*;
+import net.sf.jabref.*;
+import net.sf.jabref.imports.ImportFormat;
+import net.sf.jabref.imports.ImportFormatReader;
+
+public class SimpleCsvImporter extends ImportFormat {
+
+  public String getFormatName() {
+    return "Simple CSV Importer";
+  }
+
+  public boolean isRecognizedFormat(InputStream stream) throws IOException {
+    return true; // this is discouraged except for demonstration purposes
+  }
+  
+  public List importEntries(InputStream stream) throws IOException {    
+    ArrayList bibitems = new ArrayList();
+    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+      
+    String line = in.readLine();
+    while (line != null) {
+      if (!"".equals(line.trim())) {
+        String[] fields = line.split(";");
+        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
+        be.setType(BibtexEntryType.getType("techreport"));
+        be.setField("year", fields[0]);
+        be.setField("author", fields[1]);
+        be.setField("title", fields[2]);
+        bibitems.add(be);
+        line = in.readLine();
+      }     
+    }
+    return bibitems;      
+  }
+}
diff --git a/src/extensions/compileAll.bat b/src/extensions/compileAll.bat
index b7604fc..8b77034 100644
--- a/src/extensions/compileAll.bat
+++ b/src/extensions/compileAll.bat
@@ -1,50 +1,50 @@
- at echo off
-:: Simple Windows batch script to compile Java-classes that are part 
-:: of the jabref-extensions.
-:: We don't use ant here, 'cause anyone just with a out-of-the-box
-:: Java-installation should be able to compile
-:: extension files.
-:: For UNIX there is a corresponding sh-script
-
-:: Make sure, jabref and java can be found
-if exist ..\lib\jabref.jar set JABREF_JAR=..\lib\jabref.jar
-if exist ..\lib\JabRef.jar set JABREF_JAR=..\lib\JabRef.jar
-if exist ..\lib\jabref- at version@.jar set JABREF_JAR=..\lib\jabref- at version@.jar
-if exist ..\lib\JabRef- at version@.jar set JABREF_JAR=..\lib\JabRef- at version@.jar
-if exist ..\jabref.jar set JABREF_JAR=..\jabref.jar
-if exist ..\JabRef.jar set JABREF_JAR=..\JabRef.jar
-if exist ..\jabref- at version@.jar set JABREF_JAR=..\jabref- at version@.jar
-if exist ..\JabRef- at version@.jar set JABREF_JAR=..\JabRef- at version@.jar
-if exist lib\jabref.jar set JABREF_JAR=lib\jabref.jar
-if exist lib\JabRef.jar set JABREF_JAR=lib\JabRef.jar
-if exist lib\jabref- at version@.jar set JABREF_JAR=lib\jabref- at version@.jar
-if exist lib\JabRef- at version@.jar set JABREF_JAR=lib\JabRef- at version@.jar
-if exist jabref.jar set JABREF_JAR=jabref.jar
-if exist JabRef.jar set JABREF_JAR=JabRef.jar
-if exist jabref- at version@.jar set JABREF_JAR=jabref- at version@.jar
-if exist JabRef- at version@.jar set JABREF_JAR=JabRef- at version@.jar
-if exist %JABREF_HOME%\jabref.jar set JABREF_JAR=%JABREF_HOME%\jabref.jar
-if exist %JABREF_HOME%\JabRef.jar set JABREF_JAR=%JABREF_HOME%\JabRef.jar
-if exist %JABREF_HOME%\jabref- at version@.jar set JABREF_JAR=%JABREF_HOME%\jabref- at version@.jar
-if exist %JABREF_HOME%\JabRef- at version@.jar set JABREF_JAR=%JABREF_HOME%\jabref- at version@.jar
-
-if NOT exist "%JABREF_JAR%"=="" goto nojabref
-
-if "%JAVA_HOME%"=="" goto nojava
-
-:: Compile Java-extensions
-%JAVA_HOME%\bin\javac -classpath %JABREF_JAR% net\sf\jabref\imports\*.java
-%JAVA_HOME%\bin\javac -classpath %JABREF_JAR% *.java
-%JAVA_HOME%\bin\javac -classpath %JABREF_JAR% net\sf\jabref\export\layout\format\*.java
-goto done
-
-:nojava
-echo Please set the environment variable JAVA_HOME to the base path of your Java-installation (e.g. set JAVA_HOME=C:\j2sdk1.4.2_07).
-goto done
-
-:nojabref
-echo Please set the environment variable JABREF_JAR to the path where your jabref.jar resides (e.g. set JABREF_HOME=C:\Programme\JabRef-2.0.1).
-goto done
-
-:done
-
+ at echo off
+:: Simple Windows batch script to compile Java-classes that are part 
+:: of the jabref-extensions.
+:: We don't use ant here, 'cause anyone just with a out-of-the-box
+:: Java-installation should be able to compile
+:: extension files.
+:: For UNIX there is a corresponding sh-script
+
+:: Make sure, jabref and java can be found
+if exist ..\lib\jabref.jar set JABREF_JAR=..\lib\jabref.jar
+if exist ..\lib\JabRef.jar set JABREF_JAR=..\lib\JabRef.jar
+if exist ..\lib\jabref- at version@.jar set JABREF_JAR=..\lib\jabref- at version@.jar
+if exist ..\lib\JabRef- at version@.jar set JABREF_JAR=..\lib\JabRef- at version@.jar
+if exist ..\jabref.jar set JABREF_JAR=..\jabref.jar
+if exist ..\JabRef.jar set JABREF_JAR=..\JabRef.jar
+if exist ..\jabref- at version@.jar set JABREF_JAR=..\jabref- at version@.jar
+if exist ..\JabRef- at version@.jar set JABREF_JAR=..\JabRef- at version@.jar
+if exist lib\jabref.jar set JABREF_JAR=lib\jabref.jar
+if exist lib\JabRef.jar set JABREF_JAR=lib\JabRef.jar
+if exist lib\jabref- at version@.jar set JABREF_JAR=lib\jabref- at version@.jar
+if exist lib\JabRef- at version@.jar set JABREF_JAR=lib\JabRef- at version@.jar
+if exist jabref.jar set JABREF_JAR=jabref.jar
+if exist JabRef.jar set JABREF_JAR=JabRef.jar
+if exist jabref- at version@.jar set JABREF_JAR=jabref- at version@.jar
+if exist JabRef- at version@.jar set JABREF_JAR=JabRef- at version@.jar
+if exist %JABREF_HOME%\jabref.jar set JABREF_JAR=%JABREF_HOME%\jabref.jar
+if exist %JABREF_HOME%\JabRef.jar set JABREF_JAR=%JABREF_HOME%\JabRef.jar
+if exist %JABREF_HOME%\jabref- at version@.jar set JABREF_JAR=%JABREF_HOME%\jabref- at version@.jar
+if exist %JABREF_HOME%\JabRef- at version@.jar set JABREF_JAR=%JABREF_HOME%\jabref- at version@.jar
+
+if NOT exist "%JABREF_JAR%"=="" goto nojabref
+
+if "%JAVA_HOME%"=="" goto nojava
+
+:: Compile Java-extensions
+%JAVA_HOME%\bin\javac -classpath %JABREF_JAR% net\sf\jabref\imports\*.java
+%JAVA_HOME%\bin\javac -classpath %JABREF_JAR% *.java
+%JAVA_HOME%\bin\javac -classpath %JABREF_JAR% net\sf\jabref\export\layout\format\*.java
+goto done
+
+:nojava
+echo Please set the environment variable JAVA_HOME to the base path of your Java-installation (e.g. set JAVA_HOME=C:\j2sdk1.4.2_07).
+goto done
+
+:nojabref
+echo Please set the environment variable JABREF_JAR to the path where your jabref.jar resides (e.g. set JABREF_HOME=C:\Programme\JabRef-2.0.1).
+goto done
+
+:done
+
diff --git a/src/extensions/compileAll.sh b/src/extensions/compileAll.sh
index 10e7b90..07ea824 100644
--- a/src/extensions/compileAll.sh
+++ b/src/extensions/compileAll.sh
@@ -1,9 +1,9 @@
-
-# Simple shell script to compile Java-classes that are part 
-# of the jabref-extensions.
-# We don't use ant here, 'cause anyone just with a out-of-the-box
-# Java-installation should be able to compile
-# extension files.
-# For Windows there is a corresponding batch-script
-
+
+# Simple shell script to compile Java-classes that are part 
+# of the jabref-extensions.
+# We don't use ant here, 'cause anyone just with a out-of-the-box
+# Java-installation should be able to compile
+# extension files.
+# For Windows there is a corresponding batch-script
+
 echo todo
\ No newline at end of file
diff --git a/src/extensions/readme.html b/src/extensions/readme.html
index 8de028c..467d117 100644
--- a/src/extensions/readme.html
+++ b/src/extensions/readme.html
@@ -1,52 +1,52 @@
-<html>
-<head>
-  <title>JabRef-Extensions for JabRef @version@ help</title>
-</head>
-
-<body>
-  <h1>Extending JabRef's export and import capabilities</h1>
-  
-  <h2>Custom exports</h2>
-  
-  <p>JabRef's export and import capabilities can be extended quite
-  easily. Please unzip the JabRef-extensions file, preferably to the
-  same folder where you installed JabRef (where the <code>jabref.jar</code> file can be found).
-  </p>
-  
-  <p>To create your own export format, you can define <i>custom layouts</i>,
-  simple templates where at certain places the contents of a JabRef database are written
-  into. For an example see the files in the <a href="layout">layout directory</a>.
-  For more details about creating your own export format, please read 
-  <a href="API/CustomExports.html"><code>API/CustomExports.html</code></a>.</p>
-  
-  <p>The extensions contain also a few simple examples on how to create new <i>field formatters</i> -
-  small commands that determine how database entries are written to your
-  custom layout, please check <a href="net/sf/jabref/export/layout/format"><code>net/sf/export/layout/format</code></a>.  
-  </p>
-  
-  <h2>Custom imports</h2>
-  
-  <p>You can also quite easily  create an importer that allows you
-  to read references from sources important to you. This requires only
-  modest programming skills. Please check the 
-  <a href="SimpleCsvImporter.java">example</a>, compile it
-  using the <code>compileAll.bat</code> script, register it
-  as a custom importer with your JabRef-installation and
-  import the <a href="SimpleCsvImporter.csv">SimpleCsvImporter.csv</a>
-  file to see how it is done. More details can be found
-  in <a href="API/CustomImports.html"><code>API/CustomImports.html</code></a>.</p>
-  
-  <p>All importers that are part of the standard JabRef-distribution are also
-  included in this extensions-package under <a href="net/sf/jabref/imports"><code>net/sf/jabref/imports</code></a>. 
-  In addition to serving as further examples, you can also fix them and register them as custom importers
-  if you encounter any problems.
-  </p>
-  
-  <h2>API documentation</h2>
-  
-  <p>The API-documentation for extensions that require some programming
-  is available under <a href="API/index.html"><code>API/index.html</code></a>.
-  </p>
-  
-</body>
+<html>
+<head>
+  <title>JabRef-Extensions for JabRef @version@ help</title>
+</head>
+
+<body>
+  <h1>Extending JabRef's export and import capabilities</h1>
+  
+  <h2>Custom exports</h2>
+  
+  <p>JabRef's export and import capabilities can be extended quite
+  easily. Please unzip the JabRef-extensions file, preferably to the
+  same folder where you installed JabRef (where the <code>jabref.jar</code> file can be found).
+  </p>
+  
+  <p>To create your own export format, you can define <i>custom layouts</i>,
+  simple templates where at certain places the contents of a JabRef database are written
+  into. For an example see the files in the <a href="layout">layout directory</a>.
+  For more details about creating your own export format, please read 
+  <a href="API/CustomExports.html"><code>API/CustomExports.html</code></a>.</p>
+  
+  <p>The extensions contain also a few simple examples on how to create new <i>field formatters</i> -
+  small commands that determine how database entries are written to your
+  custom layout, please check <a href="net/sf/jabref/export/layout/format"><code>net/sf/export/layout/format</code></a>.  
+  </p>
+  
+  <h2>Custom imports</h2>
+  
+  <p>You can also quite easily  create an importer that allows you
+  to read references from sources important to you. This requires only
+  modest programming skills. Please check the 
+  <a href="SimpleCsvImporter.java">example</a>, compile it
+  using the <code>compileAll.bat</code> script, register it
+  as a custom importer with your JabRef-installation and
+  import the <a href="SimpleCsvImporter.csv">SimpleCsvImporter.csv</a>
+  file to see how it is done. More details can be found
+  in <a href="API/CustomImports.html"><code>API/CustomImports.html</code></a>.</p>
+  
+  <p>All importers that are part of the standard JabRef-distribution are also
+  included in this extensions-package under <a href="net/sf/jabref/imports"><code>net/sf/jabref/imports</code></a>. 
+  In addition to serving as further examples, you can also fix them and register them as custom importers
+  if you encounter any problems.
+  </p>
+  
+  <h2>API documentation</h2>
+  
+  <p>The API-documentation for extensions that require some programming
+  is available under <a href="API/index.html"><code>API/index.html</code></a>.
+  </p>
+  
+</body>
 </html>
\ No newline at end of file
diff --git a/src/help/ACMPortalHelp.html b/src/help/ACMPortalHelp.html
index 1833c12..4704dda 100644
--- a/src/help/ACMPortalHelp.html
+++ b/src/help/ACMPortalHelp.html
@@ -1,27 +1,27 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Search ACM Portal</h1>
-
-    <p>The ACM Portal includes two databases: the ACM Digital Library that is a full text collection of every article published by ACM, including over 50 years of archives, and the Guide to Computing Literature that is a bibliographic collection from major publishers in computing with over one million entries.</p>
-
-    <p>JabRef can download citations from the ACM Portal database.
-    To use this feature, choose <b>Search -> Web search</b>, and the search interface will appear in the
-    side pane. Select <b>ACM Portal</b> in the dropdown menu.</p>
-
-    <p>To start a search, enter the words of your query, and press
-    <b>Enter</b> or the <b>Fetch</b> button.</p>
-
-    <p>You may choose which database to search and you may opt to download the abstracts along with the cite information for each entry, by checking the <b>Include abstracts</b> checkbox.</p>
-
-	<p>Frequent connections to ACM Portal may get your IP banned for hours. To avoid this, JabRef will for each search display a
-        preview of the first page of entries returned by the server. You can then choose which entries to download.
-	</p>
-
-	<p>Please email Aaron Chen <b>nextAaron at gmail.com</b> for any suggestions.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Search ACM Portal</h1>
+
+    <p>The ACM Portal includes two databases: the ACM Digital Library that is a full text collection of every article published by ACM, including over 50 years of archives, and the Guide to Computing Literature that is a bibliographic collection from major publishers in computing with over one million entries.</p>
+
+    <p>JabRef can download citations from the ACM Portal database.
+    To use this feature, choose <b>Search -> Web search</b>, and the search interface will appear in the
+    side pane. Select <b>ACM Portal</b> in the dropdown menu.</p>
+
+    <p>To start a search, enter the words of your query, and press
+    <b>Enter</b> or the <b>Fetch</b> button.</p>
+
+    <p>You may choose which database to search and you may opt to download the abstracts along with the cite information for each entry, by checking the <b>Include abstracts</b> checkbox.</p>
+
+	<p>Frequent connections to ACM Portal may get your IP banned for hours. To avoid this, JabRef will for each search display a
+        preview of the first page of entries returned by the server. You can then choose which entries to download.
+	</p>
+
+	<p>Please email Aaron Chen <b>nextAaron at gmail.com</b> for any suggestions.</p>
+</body>
+</html>
diff --git a/src/help/About.html b/src/help/About.html
old mode 100755
new mode 100644
index aa649bc..6bbda0a
--- a/src/help/About.html
+++ b/src/help/About.html
@@ -1,143 +1,143 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body id="aboutpage">
-        <h1>JabRef version @version@</h1>
-
-        <div id="logo">
-        <img src="../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
-        </div>
-
-	<p>JabRef is free software: you can redistribute it and/or modify it
-	under the terms of the GNU <a href="License.html">General Public
-	License</a> as published by the Free Software Foundation, either
-	version 2 of the License, or (at your option) any later version.</p>
-
-        <h2>Developers:</h2>
-
-        <p>Morten O. Alver,
-        Nizar N. Batada,
-        Michel Baylac,
-        Kolja Brix,
-        Guillaume Gardey,
-        Oscar Gustafsson,
-        Cyrille d'Haese,
-        Oliver Kopp,
-        S M Mahbub Murshed,
-        Raik Nagel,
-        Christopher Oezbek,
-        Ellen Reitmayr,
-        Gert Renckens,
-        Andreas Rudert,
-        Michael Spiegel,
-        Ulrik Stervbo,
-        Joerg K. Wegner,
-        Michael Wrighton,
-        Egon Willighagen,
-        Jörg Zieren</p>
-
-        <h2>Contributions from:</h2>
-
-        <p>Thomas Arildsen,
-        Michael Beckmann,
-        Oliver Beckmann,
-        Fedor Bezrukov,
-        Fabian Bieker,
-        Aaron Chen,
-        Fabrice Dessaint,
-        Nathan Dunn,
-        E. Hakan Duran,
-        Brian Van Essen,
-        Alexis Gallagher,
-        David Gleich,
-        Sascha Hunold,
-        Bernd Kalbfuss,
-        Martin Kähmer,
-        Ervin Kolenovic,
-        Krzysztof A. Kościuszkiewicz,
-        Christian Kopf,
-        Felix Langner,
-        Stephan Lau,
-        Jeffrey Kuhn,
-        Uwe Kuehn,
-        Alex Montgomery,
-        Saverio Mori,
-        Ambrogio Oliva,
-        Stephan Rave,
-        John Relph,
-        Hannes Restel,
-        Moritz Ringler,
-        Andreas Rudert,
-        Mark Schenk,
-        Rudolf Seemann,
-        Toralf Senger,
-        Manuel Siebeneicher,
-        Mike Smoot,
-        Ulrich Stärk,
-        Martin Stolle,
-        David Weitzman,
-        Seb Wills,
-        John Zedlewski,
-        Waluyo Adi Siswanto</p>
-
-        <h2>Thanks to:</h2>
-
-        <p>Samin Muhammad Ridwanul Karim,
-        Stefan Robert</p>
-
-        <h2>Third-party software used:</h2>
-
-        <p>JabRef uses JGoodies
-        Looks and JGoodies Forms, distributed by
-        JGoodies (<code>http://www.jgoodies.com</code>) under the
-        terms of the BSD License (see
-        <code>http://www.opensource.org/licenses/bsd-license.html</code>
-        for details).</p>
-
-        <p>Also included are two additional classes
-        (SimpleInternalFrame and UIFSplitPane) by Karsten Lentzsch,
-        which are distributed under <a href="jgoodies.html">these
-        terms</a>.</p>
-
-        <p>Command line options are parsed using RitOpt
-        (<code>http://ritopt.sourceforge.net</code>). RitOpt is
-        distributed under the terms of the GNU
-        <a href="License.html">General Public License</a>, version
-        2 (or later).</p>
-
-        <p>JabRef uses the ANTLR parser generator for interpreting
-        search strings. ANTLR is public domain software - see
-        <code>http://www.antlr.org/license.html</code> for the
-        licensing terms.</p>
-
-        <p>For table presentation and filtering, JabRef uses the
-        Glazed Lists library
-        (<code>http://publicobject.com/glazedlists</code>), which
-        is distributed under the Lesser General Public License.</p>
-
-        <p>JabRef also uses the threading library Spin, which
-        is distributed under the terms of the Lesser General Public
-        License.</p>
-
-        <p>Some GUI components from the Microba library are used,
-        it is licensed under a BSD style license. See
-        <code>http://sourceforge.net/projects/microba/</code> for
-        more informations.</p>
-
-        <p>The majority of icons are from the Crystal Clear icon
-        set by Everaldo (<code>http://www.everaldo.com</code>),
-        which is distributed under the terms of the Lesser General
-        Public License.</p>
-        
-        <p>JabRef uses the FontBox, JempBox, and PDFBox libraries for PDF
-        handling, which are distributed under the Apache License. See 
-        <code>http://pdfbox.apache.org</code> for more information.</p>
-        
-        <p>Under Ubuntu, JabRef uses Java Ayatana to add support for Unity Global
-            menu integration, which is licensed under the MIT License.
-            See <code>http://code.google.com/p/java-swing-ayatana/</code>
-         for more information.
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body id="aboutpage">
+        <h1>JabRef version @version@</h1>
+
+        <div id="logo">
+        <img src="../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
+        </div>
+
+	<p>JabRef is free software: you can redistribute it and/or modify it
+	under the terms of the GNU <a href="License.html">General Public
+	License</a> as published by the Free Software Foundation, either
+	version 2 of the License, or (at your option) any later version.</p>
+
+        <h2>Developers:</h2>
+
+        <p>Morten O. Alver,
+        Nizar N. Batada,
+        Michel Baylac,
+        Kolja Brix,
+        Guillaume Gardey,
+        Oscar Gustafsson,
+        Cyrille d'Haese,
+        Oliver Kopp,
+        S M Mahbub Murshed,
+        Raik Nagel,
+        Christopher Oezbek,
+        Ellen Reitmayr,
+        Gert Renckens,
+        Andreas Rudert,
+        Michael Spiegel,
+        Ulrik Stervbo,
+        Joerg K. Wegner,
+        Michael Wrighton,
+        Egon Willighagen,
+        Jörg Zieren</p>
+
+        <h2>Contributions from:</h2>
+
+        <p>Thomas Arildsen,
+        Michael Beckmann,
+        Oliver Beckmann,
+        Fedor Bezrukov,
+        Fabian Bieker,
+        Aaron Chen,
+        Fabrice Dessaint,
+        Nathan Dunn,
+        E. Hakan Duran,
+        Brian Van Essen,
+        Alexis Gallagher,
+        David Gleich,
+        Sascha Hunold,
+        Bernd Kalbfuss,
+        Martin Kähmer,
+        Ervin Kolenovic,
+        Krzysztof A. Kościuszkiewicz,
+        Christian Kopf,
+        Felix Langner,
+        Stephan Lau,
+        Jeffrey Kuhn,
+        Uwe Kuehn,
+        Alex Montgomery,
+        Saverio Mori,
+        Ambrogio Oliva,
+        Stephan Rave,
+        John Relph,
+        Hannes Restel,
+        Moritz Ringler,
+        Andreas Rudert,
+        Mark Schenk,
+        Rudolf Seemann,
+        Toralf Senger,
+        Manuel Siebeneicher,
+        Mike Smoot,
+        Ulrich Stärk,
+        Martin Stolle,
+        David Weitzman,
+        Seb Wills,
+        John Zedlewski,
+        Waluyo Adi Siswanto</p>
+
+        <h2>Thanks to:</h2>
+
+        <p>Samin Muhammad Ridwanul Karim,
+        Stefan Robert</p>
+
+        <h2>Third-party software used:</h2>
+
+        <p>JabRef uses JGoodies
+        Looks and JGoodies Forms, distributed by
+        JGoodies (<code>http://www.jgoodies.com</code>) under the
+        terms of the BSD License (see
+        <code>http://www.opensource.org/licenses/bsd-license.html</code>
+        for details).</p>
+
+        <p>Also included are two additional classes
+        (SimpleInternalFrame and UIFSplitPane) by Karsten Lentzsch,
+        which are distributed under <a href="jgoodies.html">these
+        terms</a>.</p>
+
+        <p>Command line options are parsed using RitOpt
+        (<code>http://ritopt.sourceforge.net</code>). RitOpt is
+        distributed under the terms of the GNU
+        <a href="License.html">General Public License</a>, version
+        2 (or later).</p>
+
+        <p>JabRef uses the ANTLR parser generator for interpreting
+        search strings. ANTLR is public domain software - see
+        <code>http://www.antlr.org/license.html</code> for the
+        licensing terms.</p>
+
+        <p>For table presentation and filtering, JabRef uses the
+        Glazed Lists library
+        (<code>http://publicobject.com/glazedlists</code>), which
+        is distributed under the Lesser General Public License.</p>
+
+        <p>JabRef also uses the threading library Spin, which
+        is distributed under the terms of the Lesser General Public
+        License.</p>
+
+        <p>Some GUI components from the Microba library are used,
+        it is licensed under a BSD style license. See
+        <code>http://sourceforge.net/projects/microba/</code> for
+        more informations.</p>
+
+        <p>The majority of icons are from the Crystal Clear icon
+        set by Everaldo (<code>http://www.everaldo.com</code>),
+        which is distributed under the terms of the Lesser General
+        Public License.</p>
+        
+        <p>JabRef uses the FontBox, JempBox, and PDFBox libraries for PDF
+        handling, which are distributed under the Apache License. See 
+        <code>http://pdfbox.apache.org</code> for more information.</p>
+        
+        <p>Under Ubuntu, JabRef uses Java Ayatana to add support for Unity Global
+            menu integration, which is licensed under the MIT License.
+            See <code>http://code.google.com/p/java-swing-ayatana/</code>
+         for more information.
+</body>
+</html>
diff --git a/src/help/Autosave.html b/src/help/Autosave.html
index 80a462b..f5acfd6 100644
--- a/src/help/Autosave.html
+++ b/src/help/Autosave.html
@@ -1,23 +1,23 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Autosave</h1>
-
-    <p>The autosave feature helps prevent loss of data if your computer or JabRef crashes.
-    When autosave is enabled, JabRef will check regularly (with a configurable time interval)
-    whether any of your databases have been modified since your last save. For each one that
-    has, JabRef will save a copy of the database in the file named <code>.$[file]$</code>,
-    where <code>[file]</code> is the file name of the database in question. The autosave file
-    lies in the same directory as the bib file.</p>
-    <p>The autosave file will be deleted whenever you actively save the database, and if you
-    quit JabRef normally. However, if JabRef is shut down due to a crash, the autosave file
-    will remain. In this case, it will be detected the next time you attempt to open the
-    database, and you will be given the option to recover the database from the autosave file.</p>
-    <p>Autosave is enabled by default, with a save interval of 5 minutes. If you prefer, you
-    can disable the option to prompt before using an autosave. In this
-    case, JabRef will quietly recover the database without providing any notifications.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Autosave</h1>
+
+    <p>The autosave feature helps prevent loss of data if your computer or JabRef crashes.
+    When autosave is enabled, JabRef will check regularly (with a configurable time interval)
+    whether any of your databases have been modified since your last save. For each one that
+    has, JabRef will save a copy of the database in the file named <code>.$[file]$</code>,
+    where <code>[file]</code> is the file name of the database in question. The autosave file
+    lies in the same directory as the bib file.</p>
+    <p>The autosave file will be deleted whenever you actively save the database, and if you
+    quit JabRef normally. However, if JabRef is shut down due to a crash, the autosave file
+    will remain. In this case, it will be detected the next time you attempt to open the
+    database, and you will be given the option to recover the database from the autosave file.</p>
+    <p>Autosave is enabled by default, with a save interval of 5 minutes. If you prefer, you
+    can disable the option to prompt before using an autosave. In this
+    case, JabRef will quietly recover the database without providing any notifications.</p>
+</body>
+</html>
diff --git a/src/help/BaseFrameHelp.html b/src/help/BaseFrameHelp.html
old mode 100755
new mode 100644
index e03ce12..5ebaa68
--- a/src/help/BaseFrameHelp.html
+++ b/src/help/BaseFrameHelp.html
@@ -1,114 +1,114 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>The JabRef main window</h1>
-
-    <p><em>Note:</em> most menu actions
-    referred in the following have keyboard shortcuts, and many are
-    available from the toolbar. The keyboard shortcuts are found in
-    the pull-down menus.</p>
-
-    <p>This is the main window from where you work with your
-    databases. Below the menubar and the toolbar is a tabbed pane
-    containing a panel for each of your currently open databases.
-    When you select one of these panels, a table appears, listing
-    all the database's entries, as well as a configurable selection
-    of their fields.</p>
-
-    <ul>
-        <li>You decide which fields are shown in the table by
-        checking the fields you want to see in the
-        <strong>Preferences</strong> dialog.</li>
-
-        <li>Double-click a line of the table to edit the entry
-        content. You can navigate the table with the arrow
-        keys.</li>
-
-        <li>The table is sorted according to a set of fields of
-        your choosing. The default sort order can be set up in
-        <strong>Preferences -> Entry table</strong>, but to
-        more quickly change the order, click the header of a column to
-        set it as the primary sort criterion, or reverse the
-        sorting if it is already set. Another click will deselect
-        the column as sorting criterion. Hold down <b>CONTROL</b>
-        and click a column to add, reverse or remove it as a
-        sub-criterion after the primary column. You can add an
-        arbitrary number of sub-criteria, but only three levels
-        will be stored for the next time you start JabRef.</li>
-
-        <li>Adjust the width of each column by dragging the borders
-        between their headers.</li>
-
-        <li>
-            Color codes can be toggled in the
-            <strong>Preferences</strong> dialog, and they help you
-            visualize the completeness of your database by coloring
-            cells as follows:
-
-            <ul>
-                <li>A <span style="color: red">red</span> cell in the
-                leftmost column denotes an incomplete entry.</li>
-
-                <li>A <span style="color: #909000">yellow</span> cell in
-                the leftmost column denotes an entry that doesn't
-                define all required fields by itself, but that
-                contains a cross-reference.</li>
-
-                <li>A <span style="color: blue">blue</span> cell denotes a
-                required field.</li>
-
-                <li>A <span style="color: green">green</span> cell denotes
-                an optional field.</li>
-
-                <li>An uncolored cell denotes a field which is not
-                used by the <em>bibtex</em> program for this type
-                of entry. The field can still be edited in
-                JabRef.</li>
-            </ul>
-        </li>
-    </ul>
-
-    <h2>Adding a new entry</h2>
-
-    <p>There are several ways to add a new
-    entry. The <strong>New entry</strong> menu action shows a
-    dialog where you can choose the type of the entry from a list.
-    To bypass this dialog, there are also separate menu actions for
-    each entry type, and keyboard shortcuts for the most common
-    types.</p>
-
-    <p>When a new entry is added, by default an
-    <a href="EntryEditorHelp.html">entry editor</a> for the entry
-    will be opened. This behaviour can be toggled in the
-    <strong>Preferences</strong> dialog.</p>
-
-    <p><em>Note:</em> We strongly recommend learning the shortcuts
-    for the entry types you use most often, e.g. CTRL-SHIFT-A for
-    adding an <em>article</em> entry.</p>
-
-    <h2>Editing an entry</h2>
-
-    <p>To open an
-    <a href="EntryEditorHelp.html">entry editor</a> for an
-    existing entry, simply double-click anywhere on the appropriate
-    line will open the <a href="EntryEditorHelp.html">entry editor</a>
-    (or select the entry and press ENTER).</p>
-
-    <h2>Referencing a <em>bibtex</em> string in a field</h2>
-
-    <p>In JabRef you write the contents of all fields the same way as you
-    would in a text editor, with one exception: to reference a
-    string, enclose the name of the string in a set of #
-    characters, e.g.:<br />
-      '#jan# 1997',<br />
-    which will be interpreted as the string named 'jan' followed by
-    ' 1997'.</p>
-
-    <p>See also: <a href="StringEditorHelp.html">string editor</a>.
-    </p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>The JabRef main window</h1>
+
+    <p><em>Note:</em> most menu actions
+    referred in the following have keyboard shortcuts, and many are
+    available from the toolbar. The keyboard shortcuts are found in
+    the pull-down menus.</p>
+
+    <p>This is the main window from where you work with your
+    databases. Below the menubar and the toolbar is a tabbed pane
+    containing a panel for each of your currently open databases.
+    When you select one of these panels, a table appears, listing
+    all the database's entries, as well as a configurable selection
+    of their fields.</p>
+
+    <ul>
+        <li>You decide which fields are shown in the table by
+        checking the fields you want to see in the
+        <strong>Preferences</strong> dialog.</li>
+
+        <li>Double-click a line of the table to edit the entry
+        content. You can navigate the table with the arrow
+        keys.</li>
+
+        <li>The table is sorted according to a set of fields of
+        your choosing. The default sort order can be set up in
+        <strong>Preferences -> Entry table</strong>, but to
+        more quickly change the order, click the header of a column to
+        set it as the primary sort criterion, or reverse the
+        sorting if it is already set. Another click will deselect
+        the column as sorting criterion. Hold down <b>CONTROL</b>
+        and click a column to add, reverse or remove it as a
+        sub-criterion after the primary column. You can add an
+        arbitrary number of sub-criteria, but only three levels
+        will be stored for the next time you start JabRef.</li>
+
+        <li>Adjust the width of each column by dragging the borders
+        between their headers.</li>
+
+        <li>
+            Color codes can be toggled in the
+            <strong>Preferences</strong> dialog, and they help you
+            visualize the completeness of your database by coloring
+            cells as follows:
+
+            <ul>
+                <li>A <span style="color: red">red</span> cell in the
+                leftmost column denotes an incomplete entry.</li>
+
+                <li>A <span style="color: #909000">yellow</span> cell in
+                the leftmost column denotes an entry that doesn't
+                define all required fields by itself, but that
+                contains a cross-reference.</li>
+
+                <li>A <span style="color: blue">blue</span> cell denotes a
+                required field.</li>
+
+                <li>A <span style="color: green">green</span> cell denotes
+                an optional field.</li>
+
+                <li>An uncolored cell denotes a field which is not
+                used by the <em>bibtex</em> program for this type
+                of entry. The field can still be edited in
+                JabRef.</li>
+            </ul>
+        </li>
+    </ul>
+
+    <h2>Adding a new entry</h2>
+
+    <p>There are several ways to add a new
+    entry. The <strong>New entry</strong> menu action shows a
+    dialog where you can choose the type of the entry from a list.
+    To bypass this dialog, there are also separate menu actions for
+    each entry type, and keyboard shortcuts for the most common
+    types.</p>
+
+    <p>When a new entry is added, by default an
+    <a href="EntryEditorHelp.html">entry editor</a> for the entry
+    will be opened. This behaviour can be toggled in the
+    <strong>Preferences</strong> dialog.</p>
+
+    <p><em>Note:</em> We strongly recommend learning the shortcuts
+    for the entry types you use most often, e.g. CTRL-SHIFT-A for
+    adding an <em>article</em> entry.</p>
+
+    <h2>Editing an entry</h2>
+
+    <p>To open an
+    <a href="EntryEditorHelp.html">entry editor</a> for an
+    existing entry, simply double-click anywhere on the appropriate
+    line will open the <a href="EntryEditorHelp.html">entry editor</a>
+    (or select the entry and press ENTER).</p>
+
+    <h2>Referencing a <em>bibtex</em> string in a field</h2>
+
+    <p>In JabRef you write the contents of all fields the same way as you
+    would in a text editor, with one exception: to reference a
+    string, enclose the name of the string in a set of #
+    characters, e.g.:<br />
+      '#jan# 1997',<br />
+    which will be interpreted as the string named 'jan' followed by
+    ' 1997'.</p>
+
+    <p>See also: <a href="StringEditorHelp.html">string editor</a>.
+    </p>
+</body>
+</html>
diff --git a/src/help/BibtexHelp.html b/src/help/BibtexHelp.html
old mode 100755
new mode 100644
index cd01417..1daa729
--- a/src/help/BibtexHelp.html
+++ b/src/help/BibtexHelp.html
@@ -1,275 +1,275 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>About <em>bibtex</em></h1>
-
-    <p>JabRef helps you work with your
-    <em>bibtex</em> databases, but there are still rules to keep in
-    mind when editing your entries, to ensure that your database is
-    treated properly by the <em>bibtex</em> program.</p>
-
-    <h2><em>Bibtex</em> fields</h2>
-
-    <p>There is a lot of different
-    fields in <em>bibtex</em>, and some additional fields that you
-    can set in JabRef.</p>
-
-    <p>Generally, you can use LaTeX commands inside of fields
-    containing text. <em>Bibtex</em> will automatically format your
-    reference lists, and those fields that are included in the
-    lists will be (de)capitalized according to your bibliography
-    style. To ensure that certain characters remain capitalized,
-    enclose them in braces, like in the word {B}elgium.</p>
-
-    <p>Notes about some of the field types:</p>
-
-    <ul>
-        <li><strong style="font-style: italic;">Bibtexkey</strong>
-        A unique string used to refer to the entry in LaTeX
-        documents. Note that when referencing an entry from LaTeX,
-        the key must match case-sensitively with the reference
-        string.<br />
-        <br /></li>
-
-        <li><strong>address<br /></strong> Usually the address of
-        the <tt>publisher</tt> or other type of institution. For
-        major publishing houses, van Leunen recommends
-        omitting the information entirely. For small publishers, on
-        the other hand, you can help the reader by giving the
-        complete address.</li>
-
-        <li><strong>annote<br /></strong> An annotation. It is not
-        used by the standard bibliography styles, but may be used
-        by others that produce an annotated bibliography.</li>
-
-        <li><strong>author<br /></strong> This field should contain
-        the complete author list for your entry. The names are
-        separated by the word <em>and</em>, even if there are more
-        than two authors. Each name can be written in two
-        equivalent forms:<br />
-         Donald E. Knuth <em>or</em> Knuth, Donald E.<br />
-         Eddie van Halen <em>or</em> van Halen, Eddie<br />
-         The second form should be used for authors with more than
-        two names, to differentiate between middle names and last
-        names.<br />
-        <br /></li>
-
-        <li><strong>booktitle<br /></strong> Title of a book, part
-        of which is being cited. For book entries, use the
-        <tt>title</tt> field instead.</li>
-
-        <li><strong>chapter<br /></strong> A chapter (or section or
-        whatever) number.</li>
-
-        <li><strong>crossref<br /></strong> The database key of the
-        entry being cross referenced.</li>
-
-        <li><strong>edition<br /></strong> The edition of a
-        book--for example, ``Second''. This should be an ordinal,
-        and should have the first letter capitalized, as shown
-        here; the standard styles convert to lower case when
-        necessary.</li>
-
-        <li><strong>editor<br /></strong> This field is analogue to
-        the <em>author</em> field. If there is also an
-        <tt>author</tt> field, then the <tt>editor</tt> field gives
-        the editor of the book or collection in which the reference
-        appears.</li>
-
-        <li><strong>howpublished<br /></strong> How something
-        strange has been published. The first word should be
-        capitalized.</li>
-
-        <li><strong>institution<br /></strong> The sponsoring
-        institution of a technical report.</li>
-
-        <li><strong>journal<br /></strong> A journal name. The name
-        of a journal can be abbreviated using a "string". To define
-        such string, use the <a href="StringEditorHelp.html">string
-        editor</a>.</li>
-
-        <li><strong>key<br /></strong> Used for alphabetizing,
-        cross referencing, and creating a label when the ``author''
-        information is missing. This field should not be confused
-        with the key that appears in the <code>\cite</code> command
-        and at the beginning of the database entry.</li>
-
-        <li><strong>month<br /></strong> The month in which the
-        work was published or, for an unpublished work, in which it
-        was written. You should use the standard three-letter
-        abbreviation (jan, feb, mar, apr, may, jun, jul, aug, sep,
-        oct, nov, dec).</li>
-
-        <li><strong>note<br /></strong> Any additional information
-        that can help the reader. The first word should be
-        capitalized.</li>
-
-        <li><strong>number</strong><br />
-        The number of a journal, magazine, technical report, or of
-        a work in a series. An issue of a journal or magazine is
-        usually identified by its volume and number; the
-        organization that issues a technical report usually gives
-        it a number; and sometimes books are given numbers in a
-        named series.</li>
-
-        <li><strong>organization<br /></strong> The organization
-        that sponsors a conference or that publishes a manual.</li>
-
-        <li><strong>pages<br /></strong> One or more page numbers
-        or range of numbers, such as <tt>42-111</tt> or
-        <tt>7,41,73-97</tt> or <tt>43+</tt> (the `<tt>+</tt>' in
-        this last example indicates pages following that don't form
-        a simple range). To make it easier to maintain
-        <em>Scribe</em>-compatible databases, the standard styles
-        convert a single dash (as in <tt>7-33</tt>) to the double
-        dash used in TeX to denote number ranges (as in
-        <tt>7-33</tt>).</li>
-
-        <li><strong>publisher<br /></strong> The publisher's
-        name.</li>
-
-        <li><strong>school<br /></strong> The name of the school
-        where a thesis was written.</li>
-
-        <li><strong>series<br /></strong> The name of a series or
-        set of books. When citing an entire book, the
-        <tt>title</tt> field gives its title and an optional
-        <tt>series</tt> field gives the name of a series or
-        multi-volume set in which the book is published.</li>
-
-        <li><strong>title<br /></strong> The work's title. The
-        capitalization may depend on the bibliography style and on
-        the language used. For words that have to be capitalized
-        (such as a proper noun), enclose the word (or its first
-        letter) in braces.</li>
-
-        <li><strong>type<br /></strong> The type of a technical
-        report--for example, ``Research Note''.</li>
-
-        <li><strong>volume<br /></strong> The volume of a journal
-        or multivolume book.</li>
-
-        <li><strong>year<br /></strong> The year of publication or,
-        for an unpublished work, the year it was written. Generally
-        it should consist of four numerals, such as <tt>1984</tt>,
-        although the standard styles can handle any <tt>year</tt>
-        whose last four nonpunctuation characters are numerals,
-        such as `(about 1984)'. This field is required for most
-        entry types.</li>
-    </ul><br />
-
-
-    <h2>Other fields</h2>
-
-    <p>BibTeX is extremely popular, and many
-    people have used it to store information. Here is a list of
-    some of the more common fields:</p>
-
-    <ul>
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        affiliation*</span><br /></strong> The authors
-        affiliation.<br />
-        <br /></li>
-
-        <li><strong>abstract<br /></strong> An abstract of the
-        work.<br />
-        <br /></li>
-
-        <li><strong>doi<br /></strong> The Digital Object
-        Identifier, a permanent identifier given to
-        documents.<br />
-        <br /></li>
-
-        <li><strong>eid<br /></strong> The Electronic identifier is
-        for electronic journals that also appear in print. This
-        number replaces the page number, and is used to find the
-        article within the printed volume. Sometimes also called
-        <em>citation number</em>.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        contents*</span><br /></strong> A Table of Contents<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        copyright*</span><br /></strong> Copyright
-        information.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        ISBN*</span><br /></strong> The International Standard Book
-        Number.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        ISSN*</span><br /></strong> The International Standard
-        Serial Number. Used to identify a journal.<br />
-        <br /></li>
-
-        <li><strong>keywords<br /></strong> Key words used for
-        searching or possibly for annotation.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        language*</span><br /></strong> The language the document
-        is in.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        location*</span><br /></strong> A location associated with
-        the entry, such as the city in which a conference took
-        place.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        LCCN*</span><br /></strong> The Library of Congress Control
-        Number. I've also seen this as <tt>lib-congress</tt>.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        mrnumber*</span><br /></strong> The <i>Mathematical
-        Reviews</i> number.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        price*</span><br /></strong> The price of the
-        document.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        size*</span><br /></strong> The physical dimensions of a
-        work.<br />
-        <br /></li>
-
-        <li><strong>URL<br /></strong> The WWW Uniform Resource
-        Locator that points to the item being referenced. This
-        often is used for technical reports to point to the ftp
-        site where the postscript source of the report is
-        located.</li>
-    </ul>
-
-    <h3>JuraBib</h3>
-
-    <ul>
-        <li><strong>urldate<br /></strong> The date of the last
-        page visit.</li>
-    </ul><br />
-     *) not direct supported by JabRef<br />
-     <br />
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>About <em>bibtex</em></h1>
+
+    <p>JabRef helps you work with your
+    <em>bibtex</em> databases, but there are still rules to keep in
+    mind when editing your entries, to ensure that your database is
+    treated properly by the <em>bibtex</em> program.</p>
+
+    <h2><em>Bibtex</em> fields</h2>
+
+    <p>There is a lot of different
+    fields in <em>bibtex</em>, and some additional fields that you
+    can set in JabRef.</p>
+
+    <p>Generally, you can use LaTeX commands inside of fields
+    containing text. <em>Bibtex</em> will automatically format your
+    reference lists, and those fields that are included in the
+    lists will be (de)capitalized according to your bibliography
+    style. To ensure that certain characters remain capitalized,
+    enclose them in braces, like in the word {B}elgium.</p>
+
+    <p>Notes about some of the field types:</p>
+
+    <ul>
+        <li><strong style="font-style: italic;">Bibtexkey</strong>
+        A unique string used to refer to the entry in LaTeX
+        documents. Note that when referencing an entry from LaTeX,
+        the key must match case-sensitively with the reference
+        string.<br />
+        <br /></li>
+
+        <li><strong>address<br /></strong> Usually the address of
+        the <tt>publisher</tt> or other type of institution. For
+        major publishing houses, van Leunen recommends
+        omitting the information entirely. For small publishers, on
+        the other hand, you can help the reader by giving the
+        complete address.</li>
+
+        <li><strong>annote<br /></strong> An annotation. It is not
+        used by the standard bibliography styles, but may be used
+        by others that produce an annotated bibliography.</li>
+
+        <li><strong>author<br /></strong> This field should contain
+        the complete author list for your entry. The names are
+        separated by the word <em>and</em>, even if there are more
+        than two authors. Each name can be written in two
+        equivalent forms:<br />
+         Donald E. Knuth <em>or</em> Knuth, Donald E.<br />
+         Eddie van Halen <em>or</em> van Halen, Eddie<br />
+         The second form should be used for authors with more than
+        two names, to differentiate between middle names and last
+        names.<br />
+        <br /></li>
+
+        <li><strong>booktitle<br /></strong> Title of a book, part
+        of which is being cited. For book entries, use the
+        <tt>title</tt> field instead.</li>
+
+        <li><strong>chapter<br /></strong> A chapter (or section or
+        whatever) number.</li>
+
+        <li><strong>crossref<br /></strong> The database key of the
+        entry being cross referenced.</li>
+
+        <li><strong>edition<br /></strong> The edition of a
+        book--for example, ``Second''. This should be an ordinal,
+        and should have the first letter capitalized, as shown
+        here; the standard styles convert to lower case when
+        necessary.</li>
+
+        <li><strong>editor<br /></strong> This field is analogue to
+        the <em>author</em> field. If there is also an
+        <tt>author</tt> field, then the <tt>editor</tt> field gives
+        the editor of the book or collection in which the reference
+        appears.</li>
+
+        <li><strong>howpublished<br /></strong> How something
+        strange has been published. The first word should be
+        capitalized.</li>
+
+        <li><strong>institution<br /></strong> The sponsoring
+        institution of a technical report.</li>
+
+        <li><strong>journal<br /></strong> A journal name. The name
+        of a journal can be abbreviated using a "string". To define
+        such string, use the <a href="StringEditorHelp.html">string
+        editor</a>.</li>
+
+        <li><strong>key<br /></strong> Used for alphabetizing,
+        cross referencing, and creating a label when the ``author''
+        information is missing. This field should not be confused
+        with the key that appears in the <code>\cite</code> command
+        and at the beginning of the database entry.</li>
+
+        <li><strong>month<br /></strong> The month in which the
+        work was published or, for an unpublished work, in which it
+        was written. You should use the standard three-letter
+        abbreviation (jan, feb, mar, apr, may, jun, jul, aug, sep,
+        oct, nov, dec).</li>
+
+        <li><strong>note<br /></strong> Any additional information
+        that can help the reader. The first word should be
+        capitalized.</li>
+
+        <li><strong>number</strong><br />
+        The number of a journal, magazine, technical report, or of
+        a work in a series. An issue of a journal or magazine is
+        usually identified by its volume and number; the
+        organization that issues a technical report usually gives
+        it a number; and sometimes books are given numbers in a
+        named series.</li>
+
+        <li><strong>organization<br /></strong> The organization
+        that sponsors a conference or that publishes a manual.</li>
+
+        <li><strong>pages<br /></strong> One or more page numbers
+        or range of numbers, such as <tt>42-111</tt> or
+        <tt>7,41,73-97</tt> or <tt>43+</tt> (the `<tt>+</tt>' in
+        this last example indicates pages following that don't form
+        a simple range). To make it easier to maintain
+        <em>Scribe</em>-compatible databases, the standard styles
+        convert a single dash (as in <tt>7-33</tt>) to the double
+        dash used in TeX to denote number ranges (as in
+        <tt>7-33</tt>).</li>
+
+        <li><strong>publisher<br /></strong> The publisher's
+        name.</li>
+
+        <li><strong>school<br /></strong> The name of the school
+        where a thesis was written.</li>
+
+        <li><strong>series<br /></strong> The name of a series or
+        set of books. When citing an entire book, the
+        <tt>title</tt> field gives its title and an optional
+        <tt>series</tt> field gives the name of a series or
+        multi-volume set in which the book is published.</li>
+
+        <li><strong>title<br /></strong> The work's title. The
+        capitalization may depend on the bibliography style and on
+        the language used. For words that have to be capitalized
+        (such as a proper noun), enclose the word (or its first
+        letter) in braces.</li>
+
+        <li><strong>type<br /></strong> The type of a technical
+        report--for example, ``Research Note''.</li>
+
+        <li><strong>volume<br /></strong> The volume of a journal
+        or multivolume book.</li>
+
+        <li><strong>year<br /></strong> The year of publication or,
+        for an unpublished work, the year it was written. Generally
+        it should consist of four numerals, such as <tt>1984</tt>,
+        although the standard styles can handle any <tt>year</tt>
+        whose last four nonpunctuation characters are numerals,
+        such as `(about 1984)'. This field is required for most
+        entry types.</li>
+    </ul><br />
+
+
+    <h2>Other fields</h2>
+
+    <p>BibTeX is extremely popular, and many
+    people have used it to store information. Here is a list of
+    some of the more common fields:</p>
+
+    <ul>
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        affiliation*</span><br /></strong> The authors
+        affiliation.<br />
+        <br /></li>
+
+        <li><strong>abstract<br /></strong> An abstract of the
+        work.<br />
+        <br /></li>
+
+        <li><strong>doi<br /></strong> The Digital Object
+        Identifier, a permanent identifier given to
+        documents.<br />
+        <br /></li>
+
+        <li><strong>eid<br /></strong> The Electronic identifier is
+        for electronic journals that also appear in print. This
+        number replaces the page number, and is used to find the
+        article within the printed volume. Sometimes also called
+        <em>citation number</em>.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        contents*</span><br /></strong> A Table of Contents<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        copyright*</span><br /></strong> Copyright
+        information.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        ISBN*</span><br /></strong> The International Standard Book
+        Number.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        ISSN*</span><br /></strong> The International Standard
+        Serial Number. Used to identify a journal.<br />
+        <br /></li>
+
+        <li><strong>keywords<br /></strong> Key words used for
+        searching or possibly for annotation.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        language*</span><br /></strong> The language the document
+        is in.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        location*</span><br /></strong> A location associated with
+        the entry, such as the city in which a conference took
+        place.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        LCCN*</span><br /></strong> The Library of Congress Control
+        Number. I've also seen this as <tt>lib-congress</tt>.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        mrnumber*</span><br /></strong> The <i>Mathematical
+        Reviews</i> number.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        price*</span><br /></strong> The price of the
+        document.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        size*</span><br /></strong> The physical dimensions of a
+        work.<br />
+        <br /></li>
+
+        <li><strong>URL<br /></strong> The WWW Uniform Resource
+        Locator that points to the item being referenced. This
+        often is used for technical reports to point to the ftp
+        site where the postscript source of the report is
+        located.</li>
+    </ul>
+
+    <h3>JuraBib</h3>
+
+    <ul>
+        <li><strong>urldate<br /></strong> The date of the last
+        page visit.</li>
+    </ul><br />
+     *) not direct supported by JabRef<br />
+     <br />
+</body>
+</html>
diff --git a/src/help/CiteSeerHelp.html b/src/help/CiteSeerHelp.html
index 22d9189..0800296 100644
--- a/src/help/CiteSeerHelp.html
+++ b/src/help/CiteSeerHelp.html
@@ -1,19 +1,19 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Importing From CiteSeerX</h1>
-
-    <p>To use this feature, choose <b>Search -> Web search</b>, and the search interface will appear in the
-    side pane. Select <b>CiteSeerX</b> in the dropdown menu.</p>
-
-    <p>CiteSeerX is an evolving scientific literature digital library and search engine that focuses
-    primarily on the literature in computer and information science. CiteSeerx aims to improve the
-    dissemination of scientific literature and to provide improvements in functionality, usability,
-    availability, cost, comprehensiveness, efficiency, and timeliness in the access of scientific
-    and scholarly knowledge.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Importing From CiteSeerX</h1>
+
+    <p>To use this feature, choose <b>Search -> Web search</b>, and the search interface will appear in the
+    side pane. Select <b>CiteSeerX</b> in the dropdown menu.</p>
+
+    <p>CiteSeerX is an evolving scientific literature digital library and search engine that focuses
+    primarily on the literature in computer and information science. CiteSeerx aims to improve the
+    dissemination of scientific literature and to provide improvements in functionality, usability,
+    availability, cost, comprehensiveness, efficiency, and timeliness in the access of scientific
+    and scholarly knowledge.</p>
+</body>
+</html>
diff --git a/src/help/CommandLine.html b/src/help/CommandLine.html
index e9d7f8c..03abfd5 100644
--- a/src/help/CommandLine.html
+++ b/src/help/CommandLine.html
@@ -1,152 +1,152 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Command line options</h1>
-
-    <p>Although JabRef is primarily a GUI
-    based application, it offers several command line options that
-    may be useful, and can even perform file conversion operations
-    without opening the graphical interface.</p>
-
-    <p>You can always specify one or more BibTeX files to load by
-    simply listing their filenames. Take care to specify all
-    options before your list of file names. You must make sure the
-    first file name is not misunderstood as being an argument for
-    an option - this simply means that if a boolean option like
-    <code>-n</code> or <code>-l</code> immediately precedes a file
-    name, add the word "true" as an argument. For instance, the
-    command line:</p>
-
-    <p><code>jabref -o filetoexport.xml,docbook -n true
-    original.bib</code></p>
-
-    <p>will correctly load the file <code>original.bib</code>,
-    export it in docbook format to <code>filetoexport.xml</code>,
-    and suppress the GUI. The word <em>true</em> prevents the file
-    name from being interpreted as an argument to the -n
-    option.</p>
-
-    <h2>Help: -h</h2>
-
-    <p>This option causes JabRef to display a summary
-    of the command line options, and quit immediately.</p>
-
-    <h2>No-GUI mode: -n</h2>
-
-    <p>This option suppresses both the JabRef
-    window and the splash window normally shown at startup. It
-    causes the program to quit immediately once the command line
-    options have been processed.</p>
-
-    <p>This option is useful for performing file conversion
-    operations from the command line or a script.</p>
-
-    <h2>Load session: -l</h2>
-
-    <p>This option causes JabRef to load the
-    saved session, if any, before opening the main window.</p>
-
-    <h2>Import file: -i filename[,format]</h2>
-
-    <p>This option causes
-    JabRef to import or load the specified file. If only a filename
-    is specified, or the filename is followed by a comma and a *
-    character, JabRef will attempt to detect the file format
-    automatically. This should work for all BibTeX files and files
-    in any import format supported by JabRef. If the filename is
-    followed by a comma and the name of an import format, the given
-    import filter will be used. Use the <code>-h</code> option to
-    get a list of availiable import formats.</p>
-
-    <p>If an output option is also specified, an import will always
-    be processed before it, and the imported or loaded file will be
-    given to the export filter. If the GUI is not suppressed using
-    the <code>-n</code> option, any imported or loaded file will
-    show up in the main window.</p>
-
-    <p>The -i option can be specified only once, and for one file
-    only.</p>
-
-    <h2>Export file: -o filename[,format]</h2>
-
-    <p>This option causes
-    JabRef to save or export a file imported or loaded by the same
-    command line. If a file is imported using the <code>-i</code>
-    option, that database will be exported. Otherwise, the
-    <em>last</em> file specified (and successfully loaded) without
-    the <code>-i</code> option will be exported.</p>
-
-    <p>If only a filename is specified, it will be saved in BibTeX
-    format. If the filename is followed by a comma and an export
-    format, the given export filter will be used. A custom export
-    filter can be used in this way, and will be preferred if the
-    export name matches both a custom and a standard export
-    filter.</p>
-
-    <p>Use the <code>-h</code> option to get a list of availiable
-    export formats.</p>
-
-    <p>If the <code>-n</code> option has not been invoked, any
-    export operation will be performed before the JabRef window is
-    opened, and the imported database will show up in the
-    window.</p>
-
-    <p>The -o option can be specified only once, and for one file
-    only.</p>
-
-    <h2>Export preferences: -x filename</h2>
-
-    <p>Using this option, you
-    can have JabRef export all user preferences to an XML file.
-    After exporting, JabRef will start normally.</p>
-
-    <h2>Import preferences: -p filename</h2>
-
-    <p>This option causes
-    JabRef to import user preferences exported using the
-    <code>-x</code> option. After importing, JabRef will start
-    normally.</p>
-    
-    <h2>Export matching entries: -m [field=]searchTerm,outputFile[,exportFormat]</h2>
-    <p>JabRef saves all the database entries matching to a given search term in a new file.
-    The export file's format can be chosen, the default format is html-table (with abstract
-    and bibtex, provided by tablerefsabsbib).
-    </p>
-    <p>Call: <code>JabRef.jar -m [field=]searchTerm,outputFile[,exportFormat] -n true inputFile</code></p>
-    <p>For information referring to the search function see the documentation for 'advanced search'.
-    In addition it is also possible to search for entries within a timeframe instead of only
-    searching for entries of a certain year.</p>
-    <p>Please note that search terms containing blanks need to be bracketed by quotation marks.</p>
-	<p>Examples</p>
-	<ul>
-		<li> <code>Year=2005</code> </li>
-		<li> <code>title|keywords=Optimization</code> </li>
-		<li> <code>(author=bock or title|keywords="computer methods")and not(author=sager)</code> </li>
-		<li> <code>Year=1989-2005</code> </li>
-	</ul>
-
-    <h2>Export only used items: -a
-    filename[.aux],newBibFile[.bib]</h2>
-
-    <p>Sometimes it is helpful, to
-    have a bibtex file that contains only the used bibtex entries.
-    A list of these used entries is located in an aux file. Jabref
-    can parse this file to generate a new bibtex file, which
-    contains only the known and used entries. That will mean, if an
-    entry is not defined in the standard bibtex file, it cannot be
-    located in the new file.</p>
-    
-    <h2>Fetch from Web: --fetch==name of fetcher:query string</h2>
-    
-    <p>The fetchers in the Web menu can also be run from the command 
-    line. Use the --fetch option and then pass both the name of a fetcher 
-    (for instance ieee, medline or jstor) and your search term or paper id and 
-    the given fetcher will be run. Note that some fetcher will still display 
-    GUI if they need feedback from you. To get a list of available fetchers run
-    --fetch without parameters.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Command line options</h1>
+
+    <p>Although JabRef is primarily a GUI
+    based application, it offers several command line options that
+    may be useful, and can even perform file conversion operations
+    without opening the graphical interface.</p>
+
+    <p>You can always specify one or more BibTeX files to load by
+    simply listing their filenames. Take care to specify all
+    options before your list of file names. You must make sure the
+    first file name is not misunderstood as being an argument for
+    an option - this simply means that if a boolean option like
+    <code>-n</code> or <code>-l</code> immediately precedes a file
+    name, add the word "true" as an argument. For instance, the
+    command line:</p>
+
+    <p><code>jabref -o filetoexport.xml,docbook -n true
+    original.bib</code></p>
+
+    <p>will correctly load the file <code>original.bib</code>,
+    export it in docbook format to <code>filetoexport.xml</code>,
+    and suppress the GUI. The word <em>true</em> prevents the file
+    name from being interpreted as an argument to the -n
+    option.</p>
+
+    <h2>Help: -h</h2>
+
+    <p>This option causes JabRef to display a summary
+    of the command line options, and quit immediately.</p>
+
+    <h2>No-GUI mode: -n</h2>
+
+    <p>This option suppresses both the JabRef
+    window and the splash window normally shown at startup. It
+    causes the program to quit immediately once the command line
+    options have been processed.</p>
+
+    <p>This option is useful for performing file conversion
+    operations from the command line or a script.</p>
+
+    <h2>Load session: -l</h2>
+
+    <p>This option causes JabRef to load the
+    saved session, if any, before opening the main window.</p>
+
+    <h2>Import file: -i filename[,format]</h2>
+
+    <p>This option causes
+    JabRef to import or load the specified file. If only a filename
+    is specified, or the filename is followed by a comma and a *
+    character, JabRef will attempt to detect the file format
+    automatically. This should work for all BibTeX files and files
+    in any import format supported by JabRef. If the filename is
+    followed by a comma and the name of an import format, the given
+    import filter will be used. Use the <code>-h</code> option to
+    get a list of availiable import formats.</p>
+
+    <p>If an output option is also specified, an import will always
+    be processed before it, and the imported or loaded file will be
+    given to the export filter. If the GUI is not suppressed using
+    the <code>-n</code> option, any imported or loaded file will
+    show up in the main window.</p>
+
+    <p>The -i option can be specified only once, and for one file
+    only.</p>
+
+    <h2>Export file: -o filename[,format]</h2>
+
+    <p>This option causes
+    JabRef to save or export a file imported or loaded by the same
+    command line. If a file is imported using the <code>-i</code>
+    option, that database will be exported. Otherwise, the
+    <em>last</em> file specified (and successfully loaded) without
+    the <code>-i</code> option will be exported.</p>
+
+    <p>If only a filename is specified, it will be saved in BibTeX
+    format. If the filename is followed by a comma and an export
+    format, the given export filter will be used. A custom export
+    filter can be used in this way, and will be preferred if the
+    export name matches both a custom and a standard export
+    filter.</p>
+
+    <p>Use the <code>-h</code> option to get a list of availiable
+    export formats.</p>
+
+    <p>If the <code>-n</code> option has not been invoked, any
+    export operation will be performed before the JabRef window is
+    opened, and the imported database will show up in the
+    window.</p>
+
+    <p>The -o option can be specified only once, and for one file
+    only.</p>
+
+    <h2>Export preferences: -x filename</h2>
+
+    <p>Using this option, you
+    can have JabRef export all user preferences to an XML file.
+    After exporting, JabRef will start normally.</p>
+
+    <h2>Import preferences: -p filename</h2>
+
+    <p>This option causes
+    JabRef to import user preferences exported using the
+    <code>-x</code> option. After importing, JabRef will start
+    normally.</p>
+    
+    <h2>Export matching entries: -m [field=]searchTerm,outputFile[,exportFormat]</h2>
+    <p>JabRef saves all the database entries matching to a given search term in a new file.
+    The export file's format can be chosen, the default format is html-table (with abstract
+    and bibtex, provided by tablerefsabsbib).
+    </p>
+    <p>Call: <code>JabRef.jar -m [field=]searchTerm,outputFile[,exportFormat] -n true inputFile</code></p>
+    <p>For information referring to the search function see the documentation for 'advanced search'.
+    In addition it is also possible to search for entries within a timeframe instead of only
+    searching for entries of a certain year.</p>
+    <p>Please note that search terms containing blanks need to be bracketed by quotation marks.</p>
+	<p>Examples</p>
+	<ul>
+		<li> <code>Year=2005</code> </li>
+		<li> <code>title|keywords=Optimization</code> </li>
+		<li> <code>(author=bock or title|keywords="computer methods")and not(author=sager)</code> </li>
+		<li> <code>Year=1989-2005</code> </li>
+	</ul>
+
+    <h2>Export only used items: -a
+    filename[.aux],newBibFile[.bib]</h2>
+
+    <p>Sometimes it is helpful, to
+    have a bibtex file that contains only the used bibtex entries.
+    A list of these used entries is located in an aux file. Jabref
+    can parse this file to generate a new bibtex file, which
+    contains only the known and used entries. That will mean, if an
+    entry is not defined in the standard bibtex file, it cannot be
+    located in the new file.</p>
+    
+    <h2>Fetch from Web: --fetch==name of fetcher:query string</h2>
+    
+    <p>The fetchers in the Web menu can also be run from the command 
+    line. Use the --fetch option and then pass both the name of a fetcher 
+    (for instance ieee, medline or jstor) and your search term or paper id and 
+    the given fetcher will be run. Note that some fetcher will still display 
+    GUI if they need feedback from you. To get a list of available fetchers run
+    --fetch without parameters.</p>
+</body>
+</html>
diff --git a/src/help/ContentSelectorHelp.html b/src/help/ContentSelectorHelp.html
old mode 100755
new mode 100644
index 175600e..67fcd5b
--- a/src/help/ContentSelectorHelp.html
+++ b/src/help/ContentSelectorHelp.html
@@ -1,25 +1,25 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Field content selector</h1>
-
-    <p>This feature allows you to store
-    a selection of often-used words or phrases that you use often
-    in your database. By default it is enabled for the fields
-    <em>Journal</em>, <em>Author</em>, <em>Keywords</em> and
-    <em>Publisher</em>, but you can also add selectors to other
-    fields, in the upper part of the <em>Manage</em> dialog (menu
-    <strong>Tools --> Manage content selectors</strong>).</p>
-
-    <p>The word selection is database-specific, and is saved along
-    with your references in the .bib file.</p>
-
-    <p>To add a new word, you can simply write it into the selector
-    combo box and press Enter. Using the <em>Manage</em> dialog you
-    can also remove words that you have added.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Field content selector</h1>
+
+    <p>This feature allows you to store
+    a selection of often-used words or phrases that you use often
+    in your database. By default it is enabled for the fields
+    <em>Journal</em>, <em>Author</em>, <em>Keywords</em> and
+    <em>Publisher</em>, but you can also add selectors to other
+    fields, in the upper part of the <em>Manage</em> dialog (menu
+    <strong>Tools --> Manage content selectors</strong>).</p>
+
+    <p>The word selection is database-specific, and is saved along
+    with your references in the .bib file.</p>
+
+    <p>To add a new word, you can simply write it into the selector
+    combo box and press Enter. Using the <em>Manage</em> dialog you
+    can also remove words that you have added.</p>
+</body>
+</html>
diff --git a/src/help/Contents.html b/src/help/Contents.html
old mode 100755
new mode 100644
index a15eb23..5ca74a8
--- a/src/help/Contents.html
+++ b/src/help/Contents.html
@@ -1,80 +1,80 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Help contents</h1>
-
-    <h2>General</h2>
-    <ul>
-      <li><a href="HelpHelp.html">About the Help window</a></li>
-      <li><a href="JabRefHelp.html">General information</a></li>
-      <li><a href="BaseFrameHelp.html">The JabRef main window</a></li>
-      <li><a href="EntryEditorHelp.html">Entry editor</a></li>
-      <li><a href="Autosave.html">Autosave</a></li>
-    </ul>
-
-    <h2>Fields</h2>
-    <ul>
-      <li><a href="BibtexHelp.html"><em>Bibtex</em> help</a></li>
-      <li><a href="FileLinks.html">External file links</a></li>
-      <li><a href="ExternalFiles.html">PDF/PS/URL/DOI links in JabRef</a></li>
-      <li><a href="TimeStampHelp.html">Entry time stamps</a></li>
-      <li><a href="OwnerHelp.html">The 'owner' field</a></li>
-      <li><a href="ContentSelectorHelp.html">Field content selector</a></li>
-      <li><a href="JournalAbbreviations.html">Journal abbreviations</a></li>
-      <li><a href="SpecialFieldsHelp.html">Special Fields</a></li>
-    </ul>
-    
-    <h2>Finding and sorting entries</h2>
-    <ul>
-      <li><a href="GroupsHelp.html">Help on using <em>Groups</em></a></li>
-      <li><a href="MarkingHelp.html">Marking entries</a></li>
-      <li><a href="SearchHelp.html">Searching in JabRef</a></li>
-    </ul>
-
-    <h2>Setup</h2>
-    <ul>
-      <li><a href="StringEditorHelp.html">String editor</a></li>
-      <li><a href="DatabaseProperties.html">Database properties window</a></li>
-      <li><a href="PreviewHelp.html">Entry preview setup</a></li>
-      <li><a href="LabelPatterns.html">Customizing the BibTex key generator</a></li>
-      <li><a href="CustomEntriesHelp.html">Customizing entry types</a></li>
-      <li><a href="GeneralFields.html">Customizing general fields</a></li>
-      <li><a href="Plugin.html">Extend JabRef using plugins</a></li>
-    </ul>
-
-    <h2>Import/Export</h2>
-    <ul>
-      <li><a href="CustomExports.html">Custom export filters</a></li>
-      <li><a href="CustomImports.html">Custom import filters</a></li>
-      <li><a href="ImportInspectionDialog.html">Import inspection window</a></li>
-      <li><a href="EndNoteFilters.html">The EndNote import/export filter set</a></li>
-      <li><a href="OpenOfficeIntegration.html">Using JabRef with OpenOffice.org or LibreOffice</a></li>
-      <li><a href="ACMPortalHelp.html">Fetching entries from <em>ACM</em> Portal</a></li>
-      <li><a href="CiteSeerHelp.html">Fetching entries from <em>CiteSeerX</em></a></li>
-      <li><a href="DiVAtoBibTeXHelp.html">Fetching entries from <em>DiVA</em></a></li>
-      <li><a href="DOItoBibTeXHelp.html">Fetching entries using the <em>DOI to BibTeX Converter</em></a></li>
-      <li><a href="GoogleScholarHelp.html">Fetching entries from <em>Google Scholar</em></a></li>
-      <li><a href="IEEEXploreHelp.html">Fetching entries from <em>IEEExplore</em></a></li>
-      <li><a href="ISBNtoBibTeXHelp.html">Fetching entries using the <em>ISBN to BibTeX Converter</em></a></li>
-      <li><a href="MedlineHelp.html">Fetching entries from <em>Medline</em></a></li>
-      <li><a href="JSTOR.html"><em>JStor</em> search</a></li>
-      <li><a href="ScienceDirect.html"><em>ScienceDirect</em> search</a></li>
-      <li><a href="Spires.html"><em>Spires</em> search</a></li>
-      <li><a href="SQLExport.html">Export to an External SQL Database</a></li>
-      <li><a href="XMPHelp.html">XMP metadata support in JabRef</a></li>
-      <li><a href="CommandLine.html">Command line options</a></li>
-      <li><a href="RemoteHelp.html">Remote operations</a></li>
-    </ul>
-
-    <h2>Miscellaneous</h2>
-    <ul>
-      <li><a href="RevisionHistory.html">Revision history</a></li>
-      <li><a href="About.html">About JabRef</a></li>
-    </ul>
-
-</body>
-</html> 
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Help contents</h1>
+
+    <h2>General</h2>
+    <ul>
+      <li><a href="HelpHelp.html">About the Help window</a></li>
+      <li><a href="JabRefHelp.html">General information</a></li>
+      <li><a href="BaseFrameHelp.html">The JabRef main window</a></li>
+      <li><a href="EntryEditorHelp.html">Entry editor</a></li>
+      <li><a href="Autosave.html">Autosave</a></li>
+    </ul>
+
+    <h2>Fields</h2>
+    <ul>
+      <li><a href="BibtexHelp.html"><em>Bibtex</em> help</a></li>
+      <li><a href="FileLinks.html">External file links</a></li>
+      <li><a href="ExternalFiles.html">PDF/PS/URL/DOI links in JabRef</a></li>
+      <li><a href="TimeStampHelp.html">Entry time stamps</a></li>
+      <li><a href="OwnerHelp.html">The 'owner' field</a></li>
+      <li><a href="ContentSelectorHelp.html">Field content selector</a></li>
+      <li><a href="JournalAbbreviations.html">Journal abbreviations</a></li>
+      <li><a href="SpecialFieldsHelp.html">Special Fields</a></li>
+    </ul>
+    
+    <h2>Finding and sorting entries</h2>
+    <ul>
+      <li><a href="GroupsHelp.html">Help on using <em>Groups</em></a></li>
+      <li><a href="MarkingHelp.html">Marking entries</a></li>
+      <li><a href="SearchHelp.html">Searching in JabRef</a></li>
+    </ul>
+
+    <h2>Setup</h2>
+    <ul>
+      <li><a href="StringEditorHelp.html">String editor</a></li>
+      <li><a href="DatabaseProperties.html">Database properties window</a></li>
+      <li><a href="PreviewHelp.html">Entry preview setup</a></li>
+      <li><a href="LabelPatterns.html">Customizing the BibTex key generator</a></li>
+      <li><a href="CustomEntriesHelp.html">Customizing entry types</a></li>
+      <li><a href="GeneralFields.html">Customizing general fields</a></li>
+      <li><a href="Plugin.html">Extend JabRef using plugins</a></li>
+    </ul>
+
+    <h2>Import/Export</h2>
+    <ul>
+      <li><a href="CustomExports.html">Custom export filters</a></li>
+      <li><a href="CustomImports.html">Custom import filters</a></li>
+      <li><a href="ImportInspectionDialog.html">Import inspection window</a></li>
+      <li><a href="EndNoteFilters.html">The EndNote import/export filter set</a></li>
+      <li><a href="OpenOfficeIntegration.html">Using JabRef with OpenOffice.org or LibreOffice</a></li>
+      <li><a href="ACMPortalHelp.html">Fetching entries from <em>ACM</em> Portal</a></li>
+      <li><a href="CiteSeerHelp.html">Fetching entries from <em>CiteSeerX</em></a></li>
+      <li><a href="DiVAtoBibTeXHelp.html">Fetching entries from <em>DiVA</em></a></li>
+      <li><a href="DOItoBibTeXHelp.html">Fetching entries using the <em>DOI to BibTeX Converter</em></a></li>
+      <li><a href="GoogleScholarHelp.html">Fetching entries from <em>Google Scholar</em></a></li>
+      <li><a href="IEEEXploreHelp.html">Fetching entries from <em>IEEExplore</em></a></li>
+      <li><a href="ISBNtoBibTeXHelp.html">Fetching entries using the <em>ISBN to BibTeX Converter</em></a></li>
+      <li><a href="MedlineHelp.html">Fetching entries from <em>Medline</em></a></li>
+      <li><a href="JSTOR.html"><em>JStor</em> search</a></li>
+      <li><a href="ScienceDirect.html"><em>ScienceDirect</em> search</a></li>
+      <li><a href="Spires.html"><em>Spires</em> search</a></li>
+      <li><a href="SQLExport.html">Export to an External SQL Database</a></li>
+      <li><a href="XMPHelp.html">XMP metadata support in JabRef</a></li>
+      <li><a href="CommandLine.html">Command line options</a></li>
+      <li><a href="RemoteHelp.html">Remote operations</a></li>
+    </ul>
+
+    <h2>Miscellaneous</h2>
+    <ul>
+      <li><a href="RevisionHistory.html">Revision history</a></li>
+      <li><a href="About.html">About JabRef</a></li>
+    </ul>
+
+</body>
+</html> 
diff --git a/src/help/CustomEntriesHelp.html b/src/help/CustomEntriesHelp.html
index 320bf8d..d5b2054 100644
--- a/src/help/CustomEntriesHelp.html
+++ b/src/help/CustomEntriesHelp.html
@@ -1,82 +1,82 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Customizing entry types</h1>
-
-    <p>To customize entry types, select the menu <strong>Options
-    --> Customize entry types</strong>.</p>
-
-    <p>When customizing an entry type, you both define how its
-    entry editor should look, and what it takes for JabRef to
-    consider an entry complete. You can both make changes to the
-    existing entry types, and define new ones.</p>
-
-    <p>Note that no modifications you make in this dialog will be
-    stored until you click <b>Apply</b> or <b>OK</b>. If you click
-    <b>Cancel</b> or simply close the dialog, unapplied changes
-    will be lost.</p>
-
-    <h2>Using the entry customization dialog</h2>
-
-    <p>The entry
-    customization dialog is divided in three main panels. The
-    leftmost panel is where you can select an entry type for
-    modification, and add new ones. The middle panel is used for
-    setting up the required fields of the selected entry type, and
-    the right panel for setting up the optional fields.</p>
-
-    <h3>Adding and removing entry types</h3>
-
-    <p>The currently available entry types are listed in the left
-    panel. Whenever you select an entry type, the other panels will
-    update to show what fields are required and optional for this
-    entry type.</p>
-
-    <p>To add a new entry type, you must enter a name for it in the
-    text field below the type list, and click <b>Add</b>. The new
-    entry type will be added to the list, and selected for
-    modification.</p>
-
-    <p>To remove a custom entry type, select it and click
-    <b>Remove</b>. This operation will only be available for custom
-    entry types that are not merely modifications of standard
-    types. It is not possible to remove a standard entry type.</p>
-
-    <p>To return a modified standard type to its default setup,
-    select it and click <b>Default</b>. This operation will only be
-    available for customized entry types that modify a standard
-    type.</p>
-
-    <h2>Editing entry types</h2>
-
-    <p>When an entry type is selected, the
-    current required and optional fields will be listed in the
-    center and right panels of the dialog. The process of editing
-    the lists are identical for the required and optional fields.</p>
-
-    <p>To add a new field, edit the text field below the list, or
-    select a field name from the dropdown menu, then click
-    <b>Add</b>. The chosen field name will be added at the end of
-    the list.</p>
-
-    <p>To remove one or more fields, select them in the list, and
-    click <b>Remove</b>.</p>
-
-    <p>To change the order of the fields, choose one field name,
-    and click the arrow buttons to move it up or down in the
-    list.</p>
-
-    <h3>Either/or fields</h3>
-    <p>Certain entry types have an either-or condition in their
-    required fields. For instance, a <em>book</em> entry is complete
-    with either the <em>author</em> or the <em>editor</em> field, or
-    both. To indicate such a condition in a custom entry type, you should
-    add a field named as the set of alternative fields separated by slashes,
-    for instance <em>author/editor</em> indicates the condition mentioned above for
-    the <em>book</em> entry type.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Customizing entry types</h1>
+
+    <p>To customize entry types, select the menu <strong>Options
+    --> Customize entry types</strong>.</p>
+
+    <p>When customizing an entry type, you both define how its
+    entry editor should look, and what it takes for JabRef to
+    consider an entry complete. You can both make changes to the
+    existing entry types, and define new ones.</p>
+
+    <p>Note that no modifications you make in this dialog will be
+    stored until you click <b>Apply</b> or <b>OK</b>. If you click
+    <b>Cancel</b> or simply close the dialog, unapplied changes
+    will be lost.</p>
+
+    <h2>Using the entry customization dialog</h2>
+
+    <p>The entry
+    customization dialog is divided in three main panels. The
+    leftmost panel is where you can select an entry type for
+    modification, and add new ones. The middle panel is used for
+    setting up the required fields of the selected entry type, and
+    the right panel for setting up the optional fields.</p>
+
+    <h3>Adding and removing entry types</h3>
+
+    <p>The currently available entry types are listed in the left
+    panel. Whenever you select an entry type, the other panels will
+    update to show what fields are required and optional for this
+    entry type.</p>
+
+    <p>To add a new entry type, you must enter a name for it in the
+    text field below the type list, and click <b>Add</b>. The new
+    entry type will be added to the list, and selected for
+    modification.</p>
+
+    <p>To remove a custom entry type, select it and click
+    <b>Remove</b>. This operation will only be available for custom
+    entry types that are not merely modifications of standard
+    types. It is not possible to remove a standard entry type.</p>
+
+    <p>To return a modified standard type to its default setup,
+    select it and click <b>Default</b>. This operation will only be
+    available for customized entry types that modify a standard
+    type.</p>
+
+    <h2>Editing entry types</h2>
+
+    <p>When an entry type is selected, the
+    current required and optional fields will be listed in the
+    center and right panels of the dialog. The process of editing
+    the lists are identical for the required and optional fields.</p>
+
+    <p>To add a new field, edit the text field below the list, or
+    select a field name from the dropdown menu, then click
+    <b>Add</b>. The chosen field name will be added at the end of
+    the list.</p>
+
+    <p>To remove one or more fields, select them in the list, and
+    click <b>Remove</b>.</p>
+
+    <p>To change the order of the fields, choose one field name,
+    and click the arrow buttons to move it up or down in the
+    list.</p>
+
+    <h3>Either/or fields</h3>
+    <p>Certain entry types have an either-or condition in their
+    required fields. For instance, a <em>book</em> entry is complete
+    with either the <em>author</em> or the <em>editor</em> field, or
+    both. To indicate such a condition in a custom entry type, you should
+    add a field named as the set of alternative fields separated by slashes,
+    for instance <em>author/editor</em> indicates the condition mentioned above for
+    the <em>book</em> entry type.</p>
+</body>
+</html>
diff --git a/src/help/CustomExports.html b/src/help/CustomExports.html
index 978968e..38b38cf 100644
--- a/src/help/CustomExports.html
+++ b/src/help/CustomExports.html
@@ -1,581 +1,581 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Custom export filters</h1>
-
-    <p>JabRef allows you to define and
-    use your own export filters, in the same way as the standard
-    export filters are defined. An export filter is defined by one
-    or more <i>layout files</i>, which with the help of a
-    collection of built-in formatter routines specify the format of
-    the exported files. Your layout files must be prepared in a
-    text editor outside of JabRef.</p>
-
-    <h2>Adding a custom export filter</h2>
-
-    <p>The only requirement for
-    a valid export filter is the existence of a file with the
-    extension <b>.layout</b>. To add a new custom export filter,
-    open the dialog box <b>Options -> Manage custom exports</b>,
-    and click <b>Add new</b>. A new dialog box will appear,
-    allowing you to specify a name for the export filter (which
-    will appear as one of the choices in the File type dropdown
-    menu of the file dialog when you use the <b>File ->
-    Export</b> menu choice in the JabRef window), the path to the
-    <b>.layout</b> file, and the preferred file extension for the
-    export filter (which will be the suggested extension in the
-    file dialog when you use the export filter).</p>
-
-    <h2>Creating the export filter</h2>
-
-    <p>To see examples of how export filters are made, look for
-    the package containing the layout files for the standard
-    export filters on our download page.</p>
-
-    <h3>Layout files</h3>
-
-    <p>Let us assume that we are creating an HTML export filter. 
-     While the export filter only needs to consist of a single
-    <b>.layout</b> file, which in this case could be called
-    <i>html.layout</i>, you may also want to add two files called
-    <i>html.begin.layout</i> and <i>html.end.layout</i>. The former
-    contains the header part of the output, and the latter the
-    footer part. JabRef will look for these two files whenever the
-    export filter is used, and if found, either of these will be
-    copied verbatim to the output before or after the individual
-    entries are written.</p>
-
-    <p>Note that these files must reside in the same directory as
-    <i>html.layout</i>, and must be named by inserting
-    <b>.begin</b> and <b>.end</b>, respectively.
-    In our example export filter, these could look like the
-    following:</p>
-
-    <p><i>html.begin.layout</i>:<br />
-    <code><!DOCTYPE html><br/><html><br /> <body style="color:#275856; font-family: Arial, sans-serif;"></code>
-    </p>
-
-    <p><i>html.end.layout</i>:<br />
-    <code></body><br /></html></code></p>
-
-    <p>The file <i>html.layout</i> provides the <i>default</i>
-    template for exporting one single entry. If you want to use
-    different templates for different entry types, you can do this
-    by adding entry-specific <b>.layout</b> files. These must also
-    reside in the same directory as the main layout file, and are
-    named by inserting <b>.entrytype</b> into the name of the main
-    layout file. The entry type name must be in all lowercase. In
-    our example, we might want to add a template for book entries,
-    and this would go into the file <i>html.book.layout</i>. For a
-    PhD thesis we would add the file <i>html.phdthesis.layout</i>,
-    and so on. These files are similar to the default layout file,
-    except that they will only be used for entries of the matching
-    type. Note that the default file can easily be made general
-    enough to cover most entry types in most export filters.</p>
-
-    <h3>The layout file format</h3>
-
-    <p>Layout files are created using a
-    simple markup format where commands are identified by a
-    preceding backslash. All text not identified as part of a
-    command will be copied verbatim to the output file.</p>
-
-    <h3>Field commands</h3>
-
-    <p>An arbitrary word preceded by a backslash, e.g.
-    <code>\author</code>, <code>\editor</code>, <code>\title</code>
-    or <code>\year</code>, will be interpreted as a reference to
-    the corresponding field, which will be copied directly to the
-    output.</p>
-
-    <h3>Field formatters</h3>
-
-    <p>Often there will be a need for some preprocessing of the
-    field contents before output. This is done using a <i>field
-    formatter</i> - a java class containing a single method that
-    manipulates the contents of a field.</p>
-
-    <p>A formatter is used by inserting the <code>\format</code>
-    command followed by the formatter name in square braces, and
-    the field command in curly braces, e.g.:</p>
-
-    <p><code>\format[ToLowerCase]{\author}</code></p>
-
-    <p>You can also specify multiple formatters separated by
-    commas. These will be called sequentially, from left to right,
-    e.g.</p>
-
-    <p><code>\format[ToLowerCase,HTMLChars]{\author}</code></p>
-
-    <p>will cause the formatter <b>ToLowerCase</b> to be called
-    first, and then <b>HTMLChars</b> will be called to format the
-    result. You can list an arbitrary number of formatters in this
-    way.</p>
-
-    <p>The argument to the formatters, withing the curly braces,
-    does not have to be a field command. Instead, you can insert
-    normal text, which will then be passed to the formatters
-    instead of the contents of any field. This can be useful for
-    some fomatters, e.g. the CurrentDate formatter (described
-    below).</p>
-
-    <p>Some formatters take an extra argument, given in parentheses
-    immediately after the formatter name. The argument can be enclosed
-    in quotes, which is necessary if it includes the parenthesis characters.
-    For instance, <code>\format[Replace("\s,_")]{\journal}</code> calls
-    the <b>Replace</b> formatter with the argument <b>\s,_</b> (which results
-    in the "journal" field after replacing all whitespace by underscores).
-    </p>
-
-    <p>See below for a list of built-in export formatters.</p>
-
-    <h3>Conditional output</h3>
-
-    <p>Some static output might only make
-    sense if a specific field is set. For instance, say we want to
-    follow the editor names with the text <code>(Ed.)</code>. This
-    can be done with the following text:</p>
-
-    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
-    (Ed.)</code></p>
-
-    <p>However, if the <code>editor</code> field has not been set -
-    it might not even make sense for the entry being exported - the
-    <code>(Ed.)</code> would be left hanging. This can be prevented
-    by instead using the <code>\begin</code> and <code>\end</code>
-    commands:</p>
-
-    <p><code>\begin{editor}<br />
-    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br />
-     \end{editor}</code></p>
-
-    <p>The <code>\begin</code> and <code>\end</code> commands make
-    sure the text in between is printed if and only if the field
-    referred in the curly braces is defined for the entry being
-    exported.</p>
-
-    <p>A conditional block can also be dependent on more than one field, and the content is only printed when simple boolean conditions are satisfied. Two boolean operator are provided:</p>
-    <ul>
-	<li>AND operator : <code>&</code>, <code>&&</code></li>
-	<li>OR operator : <code>|</code>, <code>||</code></li>
-    </ul>
-    <p>To output text only if both <code>year</code> and <code>month</code> are set, use a block like the following:<br/><br/> <code>\begin{year&&month}Month: \format[HTMLChars]{\month}\end{year&&month}</code><br/><br/>which will print "Month: " plus the contents of the <code>month</code> field, but only if also the <code>year</code> field is defined.</p>
-
-    <p><b>Note:</b> Use of the <code>\begin</code> and
-    <code>\end</code> commands is a key to creating layout files
-    that work well with a variety of entry types.</p>
-
-    <h3>Grouped output</h3>
-
-    <p>If you wish to separate your entries
-    into groups based on a certain field, use the grouped output
-    commands. Grouped output is very similar to conditional output,
-    except that the text in between is printed only if the field
-    referred in the curly braces has changed value.</p>
-
-    <p>For example, let's assume I wish to group by keyword. Before
-    exporting the file, make sure you have sorted your entries
-    based on keyword. Now use the following commands to group by
-    keyword:</p>
-
-    <p><code>\begingroup{keywords}New Category:
-    \format[HTMLChars]{\keywords}<br />
-     \endgroup{keywords}</code></p>
-
-    <h2>Sharing your work</h2>
-
-    <p>With external layout files, it's
-    fairly simple to share custom export formats between users. If
-    you write an export filter for a format not supported by
-    JabRef, or an improvement over an existing one, we encourage
-    you to post your work on our SourceForge.net page. The same
-    goes for formatter classes that you write. We'd be happy to
-    distribute a collection of submitted layout files, or to add to
-    the selection of standard export filters and formatters.</p>
-
-    <p>Starting with JabRef 2.4 you can also package your 
-	ExportFormat or LayoutFormatter as a plug-in. If you do so,
-	you can provide a single zip-file to other user to make use
-	of your ExportFormat. For an example download the JabRef
-	source release and have a look at the directory
-	<code>src/plugins/</code>. Don't hesitate to stop by the
-	forums on Sourceforge, since we don't have extensive documentation, yet.</p>
-
-
-    <h2>Built-in export formatters</h2>
-
-    <p>JabRef provides the following set of formatters:</p>
-
-    <ul>
-        <li><code>Authors</code> : this formatter provides formatting options for the author and editor fields; for detailed information, see below. It deprecates a range of dedicated formatters provided in versions of JabRef prior to 2.7.</li>
-
-		<li><code>CreateBibORDFAuthors</code> : formats authors for according to the requirements of the Bibliographic Ontology (bibo).</li>
-
-        <li><code>CreateDocBookAuthors</code> : formats the author
-        field in DocBook style.</li>
-
-        <li><code>CreateDocBookEditors</code> : formats the editor field in DocBook style. </li>
-
-        <li><code>CurrentDate</code> : outputs the current date.
-        With no argument, this formatter outputs the current date
-        and time in the format "yyyy.MM.dd hh:mm:ss z" (date, time
-        and time zone). By giving a different format string as
-        argument, the date format can be customized. E.g.
-        <code>\format[CurrentDate]{yyyy.MM.dd}</code> will give the
-        date only, e.g. 2005.11.30.</li>
-
-        <li><code>Default</code> : takes a single argument, which serves as a default value.
-        If the string to format is non-empty, it is output without changes. If it is empty,
-        the default value is output. For instance, <code>\format[Default(unknown)]{\year}</code>
-        will output the entry's year if set, and "unknown" if no year is set.</li>
-	
-        <li><code>DOIStrip</code> : strips any prefixes from the DOI string.</li>
-        <li><code>DOICheck</code> : provides the full url for a DOI link.</li>
-
-        <li><code>FileLink(filetype)</code> : if no argument is given, this formatter outputs
-        the first external file link encoded in the field. To work, the formatter must
-        be supplied with the contents of the "file" field.
-        <p>This formatter takes the name of an external file type as an optional argument,
-        specified in parentheses after the formatter name. For instance,
-        <code>\format[FileLink(pdf)]{\file}</code> specifies <code>pdf</code> as an
-        argument. When an argument is given, the formatter selects the first file
-        link of the specified type. In the example, the path to the first PDF link will
-        be output.</p></li>
-
-        <li><code>FirstPage</code> : returns the first page from the "pages" field, if set.
-            For instance, if the pages field is set to "345-360" or "345--360",
-            this formatter will return "345".</li>
-            
-        <li><code>FormatChars</code> : This formatter converts LaTeX character sequences 
-        their equicalent unicode characters and removes other LaTeX commands without
-        handling them.</li>
-
-        <li><code>FormatPagesForHTML</code> : replaces "--" with "-".</li>
-
-        <li><code>FormatPagesForXML</code> : replaces "--" with an XML en-dash.</li>
-
-        <li><code>GetOpenOfficeType</code> : returns the number used by the OpenOffice.org
-        bibliography system (versions 1.x and 2.x) to denote the type of this entry.</li>
-
-        <li><code>HTMLChars</code> : replaces TeX-specific special
-        characters (e.g. {\^a} or {\"{o}}) with their HTML
-        representations, and translates LaTeX commands \emph, \textit,
-        \textbf into HTML equivalents.</li>
-
-        <li><code>HTMLParagraphs</code> : interprets two
-        consecutive newlines (e.g. \n \n) as the beginning of a new
-        paragraph and creates paragraph-html-tags accordingly.</li>
-
-        <li><code>IfPlural</code> : outputs its first argument if the input field looks
-        like an author list with two or more names, or its second argument otherwise.
-        E.g. <code>\format[IfPlural(Eds.,Ed.)]{\editor}</code> will output "Eds." if there
-        is more than one editor, and "Ed." if there is only one.</li>
-        
-        <li><code>JournalAbbreviator</code> : The given input text is abbreviated according to the journal abbreviation lists.
-		If no abbreviation for input is found (e.g. not in list or already abbreviated), the input will be returned unmodified.
-		For instance, when using <code>\format[JournalAbbreviator]{\journal}</code>, 
-		"Physical Review Letters" gets "Phys. Rev. Lett." </li>
-
-        <li><code>LastPage</code> : returns the last page from the "pages" field, if set.
-            For instance, if the pages field is set to "345-360" or "345--360",
-            this formatter will return "360".</li>
-            
-        <li><code>NoSpaceBetweenAbbreviations</code> :  LayoutFormatter that removes
-        the space between abbreviated First names. Example: J. R. R. Tolkien becomes J.R.R. Tolkien.</li>
-        
-        <li><code>NotFoundFormatter</code> : Formatter used to signal that a formatter hasn't been found.
-        This can be used for graceful degradation if a layout uses an undefined format.</li>
- 
-        <li><code>Number</code> : outputs the 1-based sequence number of the current entry in the
-        current export. This formatter can be used to make a numbered list of entries. The
-        sequence number depends on the current entry's place in the current sort order, not on
-        the number of calls to this formatter.</li>
-
-        <li><code>RemoveBrackets</code> : removes all curly brackets "{" or "}".</li>
-
-        <li><code>RemoveBracketsAddComma</code> : removes all curly brackets "{" or "}". The closing curly bracket
-        is replaced by a comma.</li>
-
-        <li><code>RemoveLatexCommands</code> : removes LaTeX
-        commands like <code>\em</code>, <code>\textbf</code>, etc.
-        If used together with <code>HTMLChars</code> or
-        <code>XMLChars</code>, this formatter should be called
-        last.</li>
-
-        <li><code>RemoveTilde</code> : replaces the tilde character
-        used in LaTeX as a non-breakable space by a regular space.
-        Useful in combination with the <a href="#NameFormatter">NameFormatter</a> discussed in
-        the next section.</li>
-
-        <li><code>RemoveWhitespace</code> : removes all whitespace characters.</li>
-
-        <li><code>Replace(regexp,replacewith)</code> : does a regular expression replacement.
-        To use this formatter, a two-part argument must be given. The parts are
-        separated by a comma. To indicate the comma character, use an escape
-        sequence: \,<br/> <br/>
-        The first part is the regular expression to search for. Remember that any commma
-        character must be preceded by a backslash, and consequently a literal backslash must
-        be written as a pair of backslashes. A description of Java regular expressions can be
-        found at:<br/>
-         http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
-         <br/> <br/>
-        The second part is the text to replace all matches with.</li>
-
-		<li><code>RisAuthors</code> : to be documented.</li>
-		<li><code>RisKeywords</code> : to be documented.</li>
-		<li><code>RisMonth</code> : to be documented.</li>
-
-        <li><code>RTFChars</code> : replaces TeX-specific special
-        characters (e.g. {\^a} or {\"{o}}) with their RTF
-        representations, and translates LaTeX commands \emph, \textit,
-        \textbf into RTF equivalents.</li>
-
-        <li><code>ToLowerCase</code> : turns all characters into
-        lower case.</li>
-
-        <li><code>ToUpperCase</code> : turns all characters into
-        upper case.</li>
-
-        <li><code>WrapContent</code> : This formatter outputs the input value after adding a
-        prefix and a postfix, as long as the input value is non-empty. If the input value
-        is empty, an empty string is output (the prefix and postfix are not output in this case).
-        The formatter requires an argument containing the prefix and postix separated
-        by a comma. To include the comma character in either, use an escape sequence
-        (\,).</li>
-
-        <li><code>WrapFileLinks</code> : See below.</li>
-
-        <li><code>XMLChars</code> : replaces TeX-specific special
-        characters (e.g. {\^a} or {\"{o}}) with their XML
-        representations.</li>
-
-    </ul>
-
-<h3>The <code>Authors</code> formatter</h3>
-
-<p>To accommodate for the numerous citation styles, the <code>Authors</code> formatter allows flexible control over the layout of the author list. The formatter takes a comma-separated list of options, by which the default values can be overridden. The following option/value pairs are currently available, where the default values are given in curly brackets.</p>
-<dl>
-<dt><code>AuthorSort = [ {FirstFirst} | LastFirst | LastFirstFirstFirst ]</code></dt>
-<dd>specifies the order in which the author names are formatted.
-	<ul>
-		<li><code>FirstFirst</code> : first names are followed by the surname.</li>
-		<li><code>LastFirst</code> : the authors' surnames are followed by their first names, separated by a comma.</li>		
-		<li><code>LastFirstFirstFirst</code> : the first author is formatted as LastFirst, the subsequent authors as FirstFirst.</li>
-	</ul>
-</dd>
-
-<dt><code>AuthorAbbr = [ FullName | LastName | {Initials} | InitialsNoSpace | FirstInitial | MiddleInitial ]</code></dt>
-<dd>specifies how the author names are abbreviated.
-	<ul>
-		<li><code>FullName</code> : shows full author names; first names are not abbreviated.</li>
-		<li><code>LastName</code> : show only surnames, first names are removed.</li> 
-		<li><code>Initials</code> : all first names are abbreviated.</li> 
-		<li><code>InitialsNospace</code> : as Initials, with any spaces between initials removed.</li>
-		<li><code>FirstInitial</code> : only first initial is shown.</li> 
-		<li><code>MiddleInitial</code> : first name is shown, but all middle names are abbreviated.</li>
-	</ul>	
-</dd>
-
-<dt><code>AuthorPunc = [ {FullPunc} | NoPunc | NoComma | NoPeriod ]</code></dt>
-<dd>specifies the punctuation used in the author list when <code>AuthorAbbr</code> is used
-	<ul>
-		<li><code>FullPunc</code> : no changes are made to punctuation.</li>
-		<li><code>NoPunc</code> : all full stops and commas are removed from the author name.</li>
-		<li><code>NoComma</code> : all commas are removed from the author name.</li>
-		<li><code>NoPeriod</code> : all full stops are removed from the author name.</li>
-	</ul>	
-</dd>
-
-<dt><code>AuthorSep = [ {Comma} | And | Colon | Semicolon | Sep=<string> ]</code></dt>
-<dd>specifies the separator to be used between authors. Any separator can be specified, with the <code>Sep=<string></code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd> 
-
-<dt><code>AuthorLastSep = [ Comma | {And} | Colon | Semicolon | Amp | Oxford | LastSep=<string> ]</code></dt>
-<dd>specifies the last separator in the author list. Any separator can be specified, with the <code>LastSep=<string></code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd>
-
-<dt><code>AuthorNumber = [ {inf} | <integer> ]</code></dt>
-<dd>specifies the number of authors that are printed. If the number of authors exceeds the maximum specified, the authorlist is replaced by the first author (or any number specified by <code>AuthorNumberEtAl</code>), followed by <code>EtAlString</code>.</dd>
-
-<dt><code>AuthorNumberEtAl = [ {1} | <integer> ]</code></dt>
-<dd>specifies the number of authors that are printed if the total number of authors exceeds <code>AuthorNumber</code>.
-This argument can only be given after <code>AuthorNumber</code> has already been given.</dd>
-
-<dt><code>EtAlString = [ { et al.} | EtAl=<string> ]</code></dt>
-<dd>specifies the string used to replace multiple authors. Any string can be given, using <code>EtAl=<string></code></dd>
-
-</dl>
-
-<p>If an option is unspecified, the default value (shown in curly brackets above) is used. Therefore, only layout options that differ from the defaults need to be specified. The order in which the options are defined is (mostly) irrelevant. So, for example,</p>
-<p><code>\format[Authors(Initials,Oxford)]{\author}</code></p>
-<p>is equivalent to</p>
-<p><code>\format[Authors(Oxford,Initials)]{\author}</code></p>
-<p>As mentioned, the order in which the options are specified is irrelevant. There is one possibility for ambiguity, and that is if both <code>AuthorSep</code> and <code>AuthorLastSep</code> are given. In that case, the first applicable value encountered would be for <code>AuthorSep</code>, and the second for <code>AuthorLastSep</code>. It is good practise to specify both when changing the default, to avoid ambiguity.</p>
-
-<h4>Examples</h4>
-<p>Given the following authors, <i>"Joe James Doe and Mary Jane and Bruce Bar and Arthur Kay"</i> ,the <code>Authors</code> formatter will give the following results:</p>
-<dl>
-<dt><code>Authors()</code>, or equivalently, <code>Authors(FirstFirst,Initials,FullPunc,Comma,And,inf,EtAl= et al.)</code></dt>
-<dd><pre>J. J. Doe, M. Jane, B. Bar and A. Kay</pre></dd>
-
-<dt><code>Authors(LastFirstFirstFirst,MiddleInitial,Semicolon)</code></dt>
-<dd><pre>Doe, Joe J.; Mary Jane; Bruce Bar and Arthur Kay</pre></dd>
-
-<dt><code>Authors(LastFirst,InitialsNoSpace,NoPunc,Oxford)</code></dt>
-<dd><pre>Doe JJ, Jane M, Bar B, and Kay A</pre></dd>
-
-<dt><code>Authors(2,EtAl= and others)</code></dt>
-<dd><pre>J. J. Doe and others</pre></dd>
-</dl>
-<p>Most commonly available citation formats should be possible with this formatter. For even more advanced options, consider using the Custom Formatters detailed below.</p>
-
-<h3>The <code>WrapFileLinks</code> formatter</h3>
-
-<p>This formatter iterates over all file links, or all file links of a specified type, outputting a format string given as the first argument. The format string can contain a number of escape sequences indicating file link information to be inserted into the string.</p>
-<p>This formatter can take an optional second argument specifying the name of a file type. If specified, the iteration will only include those files with a file type matching the given name (case-insensitively). If specified as an empty argument, all file links will be included.</p>
-<p> After the second argument, pairs of additional arguments can be added in order to specify regular expression replacements to be done upon the inserted link information before insertion into the output string. A non-paired argument will be ignored. In order to specify replacements without filtering on file types, use an empty second argument.</p>
-<p>The escape sequences for embedding information are as follows:</p>
-<ul>
-	<li><code>\i</code> : This inserts the iteration index (starting from 1), and can be useful if the output list of files should be enumerated.</li>
-	<li><code>\p</code> : This inserts the file path of the file link.</li>
-	<li><code>\f</code> : This inserts the name of the file link's type.</li>
-	<li><code>\x</code> : This inserts the file's extension, if any.</li>
-	<li><code>\d</code> : This inserts the file link's description, if any.</li>
-</ul>
-<p>For instance, an entry could contain a file link to the file "/home/john/report.pdf" of the "PDF" type with description "John's final report". Using the WrapFileLinks formatter with the following argument:</p>
-<p><code>\format[WrapFileLinks(\i. \d (\p))]{\file}</code></p>
-<p>would give the following output:</p>
-<pre>
-    1. John's final report (/home/john/report.pdf)
-
-</pre>
-<p>If the entry contained a second file link to the file "/home/john/draft.txt" of the "Text file" type with description 'An early "draft"', the output would be as follows:</p>
-<pre>
-    1. John's final report (/home/john/report.pdf)
-    2. An early "draft" (/home/john/draft.txt)
-
-</pre>
-<p>If the formatter was called with a second argument, the list would be filtered. For instance:</p>
-<p><code>\format[WrapFileLinks(\i. \d (\p),,text file)]{\file}</code></p>
-<p> would show only the text file:</p>
-<pre>
-    1. An early "draft" (/home/john/draft.txt)
-
-</pre>
-<p>If we wanted this output to be part of an XML styled output, the quotes in the file description could cause problems. Adding two additional arguments to translate the quotes into XML characters solves this:</p>
-<p><code>\format[WrapFileLinks(\i. \d (\p),,text file,",&quot;)]{\file}</code></p>
-<p>would give the following output:</p>
-<pre>
-    1. An early "draft" (/home/john/draft.txt)
-
-</pre>
-<p>Additional pairs of replacements could be added.</p>
-
-
-    <h3>Custom formatters</h3>
-    <p>If none of the available formatters can do what you want to
-    achieve, you can add your own by implementing the
-    <code>net.sf.jabref.export.layout.LayoutFormatter</code>
-    interface. If you insert your class into the
-    <code>net.sf.jabref.export.layout.format</code> package, you
-    can call the formatter by its class name only, like with the
-    standard formatters. Otherwise, you must call the formatter by
-    its fully qualified name (including package name). In any case,
-    the formatter must be in your classpath when running
-    JabRef.</p>
-
-    <h2 id="NameFormatter">Using Custom Name Formatters</h2>
-
-    <p>From JabRef 2.2, it is possible to define custom name
-    formatters using the bibtex-sty-file syntax. This allows
-    ultimate flexibility, but is a cumbersome to write</p>
-
-    <p>You can define your own formatter in the preference tab
-    "Name Formatter" using the following format and then use it
-    with the name given to it as any other formatter</p>
-    <code><case1>@<range11>@<format>@<range12>@<format>@<range13>...@@<br />
-
-     <case2>@<range21>@... and so on.</code>
-
-    <p>This format first splits the task to format a list of author
-    into cases depending on how many authors there are (this is
-    since some formats differ depending on how many authors there
-    are). Each individual case is separated by @@ and contains
-    instructions on how to format each author in the case. These
-    instructions are separated by a @.</p>
-
-    <p>Cases are identified using integers (1, 2, 3, etc.) or the
-    character * (matches any number of authors) and will tell the
-    formatter to apply the following instructions if there are a
-    number of less or equal of authors given.</p>
-
-    <p>Ranges are either
-    <code><integer>..<integer></code>,
-    <code><integer></code> or the character <code>*</code>
-    using a 1 based index for indexing authors from the given list
-    of authors. Integer indexes can be negative to denote them to
-    start from the end of the list where -1 is the last author.</p>
-
-    <p>For instance with an authorlist of "Joe Doe and Mary Jane
-    and Bruce Bar and Arthur Kay":</p>
-
-    <ul>
-        <li>1..3 will affect Joe, Mary and Bruce</li>
-
-        <li>4..4 will affect Arthur</li>
-
-        <li>* will affect all of them</li>
-
-        <li>2..-1 will affect Mary, Bruce and Arthur</li>
-    </ul>
-
-    <p>The <code><format></code>-strings use the Bibtex
-    formatter format:</p>
-
-    <p>The four letters v, f, l, j indicate the name parts von,
-    first, last, jr which are used within curly braces. A single
-    letter v, f, l, j indicates that the name should be
-    abbreviated. If one of these letters or letter pairs is
-    encountered JabRef will output all the respective names
-    (possibly abbreviated), but the whole expression in curly
-    braces is only printed if the name part exists.</p>
-
-    <p>For instance if the format is "{ll} {vv {von Part}} {ff}"
-    and the names are "Mary Kay and John von Neumann", then JabRef
-    will output "Kay Mary" (with two space between last and first)
-    and "Neuman von von Part John".</p>
-
-    <p>I give two examples but would rather point you to the bibtex
-    documentation.</p>
-
-    <p>Small example: <code>"{ll}, {f.}"</code> will turn
-    <code>"Joe Doe"</code> into <code>"Doe, J."</code></p>
-
-    <p>Large example:</p>
-
-    <blockquote>
-        <p>To turn:</p>
-
-        <p><code>"Joe Doe and Mary Jane and Bruce Bar and Arthur
-        Kay"</code></p>
-
-        <p>into</p>
-
-        <p><code>"Doe, J., Jane, M., Bar, B. and Kay,
-        A."</code></p>
-
-        <p>you would use</p>
-
-        <p><code>1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll},
-        {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll},
-        {f}.</code></p>
-    </blockquote>
-
-    <p>If somebody would like to write a better tutorial about
-    this: Write a mail to one of the JabRef mailinglists!</p>
-
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Custom export filters</h1>
+
+    <p>JabRef allows you to define and
+    use your own export filters, in the same way as the standard
+    export filters are defined. An export filter is defined by one
+    or more <i>layout files</i>, which with the help of a
+    collection of built-in formatter routines specify the format of
+    the exported files. Your layout files must be prepared in a
+    text editor outside of JabRef.</p>
+
+    <h2>Adding a custom export filter</h2>
+
+    <p>The only requirement for
+    a valid export filter is the existence of a file with the
+    extension <b>.layout</b>. To add a new custom export filter,
+    open the dialog box <b>Options -> Manage custom exports</b>,
+    and click <b>Add new</b>. A new dialog box will appear,
+    allowing you to specify a name for the export filter (which
+    will appear as one of the choices in the File type dropdown
+    menu of the file dialog when you use the <b>File ->
+    Export</b> menu choice in the JabRef window), the path to the
+    <b>.layout</b> file, and the preferred file extension for the
+    export filter (which will be the suggested extension in the
+    file dialog when you use the export filter).</p>
+
+    <h2>Creating the export filter</h2>
+
+    <p>To see examples of how export filters are made, look for
+    the package containing the layout files for the standard
+    export filters on our download page.</p>
+
+    <h3>Layout files</h3>
+
+    <p>Let us assume that we are creating an HTML export filter. 
+     While the export filter only needs to consist of a single
+    <b>.layout</b> file, which in this case could be called
+    <i>html.layout</i>, you may also want to add two files called
+    <i>html.begin.layout</i> and <i>html.end.layout</i>. The former
+    contains the header part of the output, and the latter the
+    footer part. JabRef will look for these two files whenever the
+    export filter is used, and if found, either of these will be
+    copied verbatim to the output before or after the individual
+    entries are written.</p>
+
+    <p>Note that these files must reside in the same directory as
+    <i>html.layout</i>, and must be named by inserting
+    <b>.begin</b> and <b>.end</b>, respectively.
+    In our example export filter, these could look like the
+    following:</p>
+
+    <p><i>html.begin.layout</i>:<br />
+    <code><!DOCTYPE html><br/><html><br /> <body style="color:#275856; font-family: Arial, sans-serif;"></code>
+    </p>
+
+    <p><i>html.end.layout</i>:<br />
+    <code></body><br /></html></code></p>
+
+    <p>The file <i>html.layout</i> provides the <i>default</i>
+    template for exporting one single entry. If you want to use
+    different templates for different entry types, you can do this
+    by adding entry-specific <b>.layout</b> files. These must also
+    reside in the same directory as the main layout file, and are
+    named by inserting <b>.entrytype</b> into the name of the main
+    layout file. The entry type name must be in all lowercase. In
+    our example, we might want to add a template for book entries,
+    and this would go into the file <i>html.book.layout</i>. For a
+    PhD thesis we would add the file <i>html.phdthesis.layout</i>,
+    and so on. These files are similar to the default layout file,
+    except that they will only be used for entries of the matching
+    type. Note that the default file can easily be made general
+    enough to cover most entry types in most export filters.</p>
+
+    <h3>The layout file format</h3>
+
+    <p>Layout files are created using a
+    simple markup format where commands are identified by a
+    preceding backslash. All text not identified as part of a
+    command will be copied verbatim to the output file.</p>
+
+    <h3>Field commands</h3>
+
+    <p>An arbitrary word preceded by a backslash, e.g.
+    <code>\author</code>, <code>\editor</code>, <code>\title</code>
+    or <code>\year</code>, will be interpreted as a reference to
+    the corresponding field, which will be copied directly to the
+    output.</p>
+
+    <h3>Field formatters</h3>
+
+    <p>Often there will be a need for some preprocessing of the
+    field contents before output. This is done using a <i>field
+    formatter</i> - a java class containing a single method that
+    manipulates the contents of a field.</p>
+
+    <p>A formatter is used by inserting the <code>\format</code>
+    command followed by the formatter name in square braces, and
+    the field command in curly braces, e.g.:</p>
+
+    <p><code>\format[ToLowerCase]{\author}</code></p>
+
+    <p>You can also specify multiple formatters separated by
+    commas. These will be called sequentially, from left to right,
+    e.g.</p>
+
+    <p><code>\format[ToLowerCase,HTMLChars]{\author}</code></p>
+
+    <p>will cause the formatter <b>ToLowerCase</b> to be called
+    first, and then <b>HTMLChars</b> will be called to format the
+    result. You can list an arbitrary number of formatters in this
+    way.</p>
+
+    <p>The argument to the formatters, withing the curly braces,
+    does not have to be a field command. Instead, you can insert
+    normal text, which will then be passed to the formatters
+    instead of the contents of any field. This can be useful for
+    some fomatters, e.g. the CurrentDate formatter (described
+    below).</p>
+
+    <p>Some formatters take an extra argument, given in parentheses
+    immediately after the formatter name. The argument can be enclosed
+    in quotes, which is necessary if it includes the parenthesis characters.
+    For instance, <code>\format[Replace("\s,_")]{\journal}</code> calls
+    the <b>Replace</b> formatter with the argument <b>\s,_</b> (which results
+    in the "journal" field after replacing all whitespace by underscores).
+    </p>
+
+    <p>See below for a list of built-in export formatters.</p>
+
+    <h3>Conditional output</h3>
+
+    <p>Some static output might only make
+    sense if a specific field is set. For instance, say we want to
+    follow the editor names with the text <code>(Ed.)</code>. This
+    can be done with the following text:</p>
+
+    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
+    (Ed.)</code></p>
+
+    <p>However, if the <code>editor</code> field has not been set -
+    it might not even make sense for the entry being exported - the
+    <code>(Ed.)</code> would be left hanging. This can be prevented
+    by instead using the <code>\begin</code> and <code>\end</code>
+    commands:</p>
+
+    <p><code>\begin{editor}<br />
+    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br />
+     \end{editor}</code></p>
+
+    <p>The <code>\begin</code> and <code>\end</code> commands make
+    sure the text in between is printed if and only if the field
+    referred in the curly braces is defined for the entry being
+    exported.</p>
+
+    <p>A conditional block can also be dependent on more than one field, and the content is only printed when simple boolean conditions are satisfied. Two boolean operator are provided:</p>
+    <ul>
+	<li>AND operator : <code>&</code>, <code>&&</code></li>
+	<li>OR operator : <code>|</code>, <code>||</code></li>
+    </ul>
+    <p>To output text only if both <code>year</code> and <code>month</code> are set, use a block like the following:<br/><br/> <code>\begin{year&&month}Month: \format[HTMLChars]{\month}\end{year&&month}</code><br/><br/>which will print "Month: " plus the contents of the <code>month</code> field, but only if also the <code>year</code> field is defined.</p>
+
+    <p><b>Note:</b> Use of the <code>\begin</code> and
+    <code>\end</code> commands is a key to creating layout files
+    that work well with a variety of entry types.</p>
+
+    <h3>Grouped output</h3>
+
+    <p>If you wish to separate your entries
+    into groups based on a certain field, use the grouped output
+    commands. Grouped output is very similar to conditional output,
+    except that the text in between is printed only if the field
+    referred in the curly braces has changed value.</p>
+
+    <p>For example, let's assume I wish to group by keyword. Before
+    exporting the file, make sure you have sorted your entries
+    based on keyword. Now use the following commands to group by
+    keyword:</p>
+
+    <p><code>\begingroup{keywords}New Category:
+    \format[HTMLChars]{\keywords}<br />
+     \endgroup{keywords}</code></p>
+
+    <h2>Sharing your work</h2>
+
+    <p>With external layout files, it's
+    fairly simple to share custom export formats between users. If
+    you write an export filter for a format not supported by
+    JabRef, or an improvement over an existing one, we encourage
+    you to post your work on our SourceForge.net page. The same
+    goes for formatter classes that you write. We'd be happy to
+    distribute a collection of submitted layout files, or to add to
+    the selection of standard export filters and formatters.</p>
+
+    <p>Starting with JabRef 2.4 you can also package your 
+	ExportFormat or LayoutFormatter as a plug-in. If you do so,
+	you can provide a single zip-file to other user to make use
+	of your ExportFormat. For an example download the JabRef
+	source release and have a look at the directory
+	<code>src/plugins/</code>. Don't hesitate to stop by the
+	forums on Sourceforge, since we don't have extensive documentation, yet.</p>
+
+
+    <h2>Built-in export formatters</h2>
+
+    <p>JabRef provides the following set of formatters:</p>
+
+    <ul>
+        <li><code>Authors</code> : this formatter provides formatting options for the author and editor fields; for detailed information, see below. It deprecates a range of dedicated formatters provided in versions of JabRef prior to 2.7.</li>
+
+		<li><code>CreateBibORDFAuthors</code> : formats authors for according to the requirements of the Bibliographic Ontology (bibo).</li>
+
+        <li><code>CreateDocBookAuthors</code> : formats the author
+        field in DocBook style.</li>
+
+        <li><code>CreateDocBookEditors</code> : formats the editor field in DocBook style. </li>
+
+        <li><code>CurrentDate</code> : outputs the current date.
+        With no argument, this formatter outputs the current date
+        and time in the format "yyyy.MM.dd hh:mm:ss z" (date, time
+        and time zone). By giving a different format string as
+        argument, the date format can be customized. E.g.
+        <code>\format[CurrentDate]{yyyy.MM.dd}</code> will give the
+        date only, e.g. 2005.11.30.</li>
+
+        <li><code>Default</code> : takes a single argument, which serves as a default value.
+        If the string to format is non-empty, it is output without changes. If it is empty,
+        the default value is output. For instance, <code>\format[Default(unknown)]{\year}</code>
+        will output the entry's year if set, and "unknown" if no year is set.</li>
+	
+        <li><code>DOIStrip</code> : strips any prefixes from the DOI string.</li>
+        <li><code>DOICheck</code> : provides the full url for a DOI link.</li>
+
+        <li><code>FileLink(filetype)</code> : if no argument is given, this formatter outputs
+        the first external file link encoded in the field. To work, the formatter must
+        be supplied with the contents of the "file" field.
+        <p>This formatter takes the name of an external file type as an optional argument,
+        specified in parentheses after the formatter name. For instance,
+        <code>\format[FileLink(pdf)]{\file}</code> specifies <code>pdf</code> as an
+        argument. When an argument is given, the formatter selects the first file
+        link of the specified type. In the example, the path to the first PDF link will
+        be output.</p></li>
+
+        <li><code>FirstPage</code> : returns the first page from the "pages" field, if set.
+            For instance, if the pages field is set to "345-360" or "345--360",
+            this formatter will return "345".</li>
+            
+        <li><code>FormatChars</code> : This formatter converts LaTeX character sequences 
+        their equicalent unicode characters and removes other LaTeX commands without
+        handling them.</li>
+
+        <li><code>FormatPagesForHTML</code> : replaces "--" with "-".</li>
+
+        <li><code>FormatPagesForXML</code> : replaces "--" with an XML en-dash.</li>
+
+        <li><code>GetOpenOfficeType</code> : returns the number used by the OpenOffice.org
+        bibliography system (versions 1.x and 2.x) to denote the type of this entry.</li>
+
+        <li><code>HTMLChars</code> : replaces TeX-specific special
+        characters (e.g. {\^a} or {\"{o}}) with their HTML
+        representations, and translates LaTeX commands \emph, \textit,
+        \textbf into HTML equivalents.</li>
+
+        <li><code>HTMLParagraphs</code> : interprets two
+        consecutive newlines (e.g. \n \n) as the beginning of a new
+        paragraph and creates paragraph-html-tags accordingly.</li>
+
+        <li><code>IfPlural</code> : outputs its first argument if the input field looks
+        like an author list with two or more names, or its second argument otherwise.
+        E.g. <code>\format[IfPlural(Eds.,Ed.)]{\editor}</code> will output "Eds." if there
+        is more than one editor, and "Ed." if there is only one.</li>
+        
+        <li><code>JournalAbbreviator</code> : The given input text is abbreviated according to the journal abbreviation lists.
+		If no abbreviation for input is found (e.g. not in list or already abbreviated), the input will be returned unmodified.
+		For instance, when using <code>\format[JournalAbbreviator]{\journal}</code>, 
+		"Physical Review Letters" gets "Phys. Rev. Lett." </li>
+
+        <li><code>LastPage</code> : returns the last page from the "pages" field, if set.
+            For instance, if the pages field is set to "345-360" or "345--360",
+            this formatter will return "360".</li>
+            
+        <li><code>NoSpaceBetweenAbbreviations</code> :  LayoutFormatter that removes
+        the space between abbreviated First names. Example: J. R. R. Tolkien becomes J.R.R. Tolkien.</li>
+        
+        <li><code>NotFoundFormatter</code> : Formatter used to signal that a formatter hasn't been found.
+        This can be used for graceful degradation if a layout uses an undefined format.</li>
+ 
+        <li><code>Number</code> : outputs the 1-based sequence number of the current entry in the
+        current export. This formatter can be used to make a numbered list of entries. The
+        sequence number depends on the current entry's place in the current sort order, not on
+        the number of calls to this formatter.</li>
+
+        <li><code>RemoveBrackets</code> : removes all curly brackets "{" or "}".</li>
+
+        <li><code>RemoveBracketsAddComma</code> : removes all curly brackets "{" or "}". The closing curly bracket
+        is replaced by a comma.</li>
+
+        <li><code>RemoveLatexCommands</code> : removes LaTeX
+        commands like <code>\em</code>, <code>\textbf</code>, etc.
+        If used together with <code>HTMLChars</code> or
+        <code>XMLChars</code>, this formatter should be called
+        last.</li>
+
+        <li><code>RemoveTilde</code> : replaces the tilde character
+        used in LaTeX as a non-breakable space by a regular space.
+        Useful in combination with the <a href="#NameFormatter">NameFormatter</a> discussed in
+        the next section.</li>
+
+        <li><code>RemoveWhitespace</code> : removes all whitespace characters.</li>
+
+        <li><code>Replace(regexp,replacewith)</code> : does a regular expression replacement.
+        To use this formatter, a two-part argument must be given. The parts are
+        separated by a comma. To indicate the comma character, use an escape
+        sequence: \,<br/> <br/>
+        The first part is the regular expression to search for. Remember that any commma
+        character must be preceded by a backslash, and consequently a literal backslash must
+        be written as a pair of backslashes. A description of Java regular expressions can be
+        found at:<br/>
+         http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
+         <br/> <br/>
+        The second part is the text to replace all matches with.</li>
+
+		<li><code>RisAuthors</code> : to be documented.</li>
+		<li><code>RisKeywords</code> : to be documented.</li>
+		<li><code>RisMonth</code> : to be documented.</li>
+
+        <li><code>RTFChars</code> : replaces TeX-specific special
+        characters (e.g. {\^a} or {\"{o}}) with their RTF
+        representations, and translates LaTeX commands \emph, \textit,
+        \textbf into RTF equivalents.</li>
+
+        <li><code>ToLowerCase</code> : turns all characters into
+        lower case.</li>
+
+        <li><code>ToUpperCase</code> : turns all characters into
+        upper case.</li>
+
+        <li><code>WrapContent</code> : This formatter outputs the input value after adding a
+        prefix and a postfix, as long as the input value is non-empty. If the input value
+        is empty, an empty string is output (the prefix and postfix are not output in this case).
+        The formatter requires an argument containing the prefix and postix separated
+        by a comma. To include the comma character in either, use an escape sequence
+        (\,).</li>
+
+        <li><code>WrapFileLinks</code> : See below.</li>
+
+        <li><code>XMLChars</code> : replaces TeX-specific special
+        characters (e.g. {\^a} or {\"{o}}) with their XML
+        representations.</li>
+
+    </ul>
+
+<h3>The <code>Authors</code> formatter</h3>
+
+<p>To accommodate for the numerous citation styles, the <code>Authors</code> formatter allows flexible control over the layout of the author list. The formatter takes a comma-separated list of options, by which the default values can be overridden. The following option/value pairs are currently available, where the default values are given in curly brackets.</p>
+<dl>
+<dt><code>AuthorSort = [ {FirstFirst} | LastFirst | LastFirstFirstFirst ]</code></dt>
+<dd>specifies the order in which the author names are formatted.
+	<ul>
+		<li><code>FirstFirst</code> : first names are followed by the surname.</li>
+		<li><code>LastFirst</code> : the authors' surnames are followed by their first names, separated by a comma.</li>		
+		<li><code>LastFirstFirstFirst</code> : the first author is formatted as LastFirst, the subsequent authors as FirstFirst.</li>
+	</ul>
+</dd>
+
+<dt><code>AuthorAbbr = [ FullName | LastName | {Initials} | InitialsNoSpace | FirstInitial | MiddleInitial ]</code></dt>
+<dd>specifies how the author names are abbreviated.
+	<ul>
+		<li><code>FullName</code> : shows full author names; first names are not abbreviated.</li>
+		<li><code>LastName</code> : show only surnames, first names are removed.</li> 
+		<li><code>Initials</code> : all first names are abbreviated.</li> 
+		<li><code>InitialsNospace</code> : as Initials, with any spaces between initials removed.</li>
+		<li><code>FirstInitial</code> : only first initial is shown.</li> 
+		<li><code>MiddleInitial</code> : first name is shown, but all middle names are abbreviated.</li>
+	</ul>	
+</dd>
+
+<dt><code>AuthorPunc = [ {FullPunc} | NoPunc | NoComma | NoPeriod ]</code></dt>
+<dd>specifies the punctuation used in the author list when <code>AuthorAbbr</code> is used
+	<ul>
+		<li><code>FullPunc</code> : no changes are made to punctuation.</li>
+		<li><code>NoPunc</code> : all full stops and commas are removed from the author name.</li>
+		<li><code>NoComma</code> : all commas are removed from the author name.</li>
+		<li><code>NoPeriod</code> : all full stops are removed from the author name.</li>
+	</ul>	
+</dd>
+
+<dt><code>AuthorSep = [ {Comma} | And | Colon | Semicolon | Sep=<string> ]</code></dt>
+<dd>specifies the separator to be used between authors. Any separator can be specified, with the <code>Sep=<string></code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd> 
+
+<dt><code>AuthorLastSep = [ Comma | {And} | Colon | Semicolon | Amp | Oxford | LastSep=<string> ]</code></dt>
+<dd>specifies the last separator in the author list. Any separator can be specified, with the <code>LastSep=<string></code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd>
+
+<dt><code>AuthorNumber = [ {inf} | <integer> ]</code></dt>
+<dd>specifies the number of authors that are printed. If the number of authors exceeds the maximum specified, the authorlist is replaced by the first author (or any number specified by <code>AuthorNumberEtAl</code>), followed by <code>EtAlString</code>.</dd>
+
+<dt><code>AuthorNumberEtAl = [ {1} | <integer> ]</code></dt>
+<dd>specifies the number of authors that are printed if the total number of authors exceeds <code>AuthorNumber</code>.
+This argument can only be given after <code>AuthorNumber</code> has already been given.</dd>
+
+<dt><code>EtAlString = [ { et al.} | EtAl=<string> ]</code></dt>
+<dd>specifies the string used to replace multiple authors. Any string can be given, using <code>EtAl=<string></code></dd>
+
+</dl>
+
+<p>If an option is unspecified, the default value (shown in curly brackets above) is used. Therefore, only layout options that differ from the defaults need to be specified. The order in which the options are defined is (mostly) irrelevant. So, for example,</p>
+<p><code>\format[Authors(Initials,Oxford)]{\author}</code></p>
+<p>is equivalent to</p>
+<p><code>\format[Authors(Oxford,Initials)]{\author}</code></p>
+<p>As mentioned, the order in which the options are specified is irrelevant. There is one possibility for ambiguity, and that is if both <code>AuthorSep</code> and <code>AuthorLastSep</code> are given. In that case, the first applicable value encountered would be for <code>AuthorSep</code>, and the second for <code>AuthorLastSep</code>. It is good practise to specify both when changing the default, to avoid ambiguity.</p>
+
+<h4>Examples</h4>
+<p>Given the following authors, <i>"Joe James Doe and Mary Jane and Bruce Bar and Arthur Kay"</i> ,the <code>Authors</code> formatter will give the following results:</p>
+<dl>
+<dt><code>Authors()</code>, or equivalently, <code>Authors(FirstFirst,Initials,FullPunc,Comma,And,inf,EtAl= et al.)</code></dt>
+<dd><pre>J. J. Doe, M. Jane, B. Bar and A. Kay</pre></dd>
+
+<dt><code>Authors(LastFirstFirstFirst,MiddleInitial,Semicolon)</code></dt>
+<dd><pre>Doe, Joe J.; Mary Jane; Bruce Bar and Arthur Kay</pre></dd>
+
+<dt><code>Authors(LastFirst,InitialsNoSpace,NoPunc,Oxford)</code></dt>
+<dd><pre>Doe JJ, Jane M, Bar B, and Kay A</pre></dd>
+
+<dt><code>Authors(2,EtAl= and others)</code></dt>
+<dd><pre>J. J. Doe and others</pre></dd>
+</dl>
+<p>Most commonly available citation formats should be possible with this formatter. For even more advanced options, consider using the Custom Formatters detailed below.</p>
+
+<h3>The <code>WrapFileLinks</code> formatter</h3>
+
+<p>This formatter iterates over all file links, or all file links of a specified type, outputting a format string given as the first argument. The format string can contain a number of escape sequences indicating file link information to be inserted into the string.</p>
+<p>This formatter can take an optional second argument specifying the name of a file type. If specified, the iteration will only include those files with a file type matching the given name (case-insensitively). If specified as an empty argument, all file links will be included.</p>
+<p> After the second argument, pairs of additional arguments can be added in order to specify regular expression replacements to be done upon the inserted link information before insertion into the output string. A non-paired argument will be ignored. In order to specify replacements without filtering on file types, use an empty second argument.</p>
+<p>The escape sequences for embedding information are as follows:</p>
+<ul>
+	<li><code>\i</code> : This inserts the iteration index (starting from 1), and can be useful if the output list of files should be enumerated.</li>
+	<li><code>\p</code> : This inserts the file path of the file link.</li>
+	<li><code>\f</code> : This inserts the name of the file link's type.</li>
+	<li><code>\x</code> : This inserts the file's extension, if any.</li>
+	<li><code>\d</code> : This inserts the file link's description, if any.</li>
+</ul>
+<p>For instance, an entry could contain a file link to the file "/home/john/report.pdf" of the "PDF" type with description "John's final report". Using the WrapFileLinks formatter with the following argument:</p>
+<p><code>\format[WrapFileLinks(\i. \d (\p))]{\file}</code></p>
+<p>would give the following output:</p>
+<pre>
+    1. John's final report (/home/john/report.pdf)
+
+</pre>
+<p>If the entry contained a second file link to the file "/home/john/draft.txt" of the "Text file" type with description 'An early "draft"', the output would be as follows:</p>
+<pre>
+    1. John's final report (/home/john/report.pdf)
+    2. An early "draft" (/home/john/draft.txt)
+
+</pre>
+<p>If the formatter was called with a second argument, the list would be filtered. For instance:</p>
+<p><code>\format[WrapFileLinks(\i. \d (\p),,text file)]{\file}</code></p>
+<p> would show only the text file:</p>
+<pre>
+    1. An early "draft" (/home/john/draft.txt)
+
+</pre>
+<p>If we wanted this output to be part of an XML styled output, the quotes in the file description could cause problems. Adding two additional arguments to translate the quotes into XML characters solves this:</p>
+<p><code>\format[WrapFileLinks(\i. \d (\p),,text file,",&quot;)]{\file}</code></p>
+<p>would give the following output:</p>
+<pre>
+    1. An early "draft" (/home/john/draft.txt)
+
+</pre>
+<p>Additional pairs of replacements could be added.</p>
+
+
+    <h3>Custom formatters</h3>
+    <p>If none of the available formatters can do what you want to
+    achieve, you can add your own by implementing the
+    <code>net.sf.jabref.export.layout.LayoutFormatter</code>
+    interface. If you insert your class into the
+    <code>net.sf.jabref.export.layout.format</code> package, you
+    can call the formatter by its class name only, like with the
+    standard formatters. Otherwise, you must call the formatter by
+    its fully qualified name (including package name). In any case,
+    the formatter must be in your classpath when running
+    JabRef.</p>
+
+    <h2 id="NameFormatter">Using Custom Name Formatters</h2>
+
+    <p>From JabRef 2.2, it is possible to define custom name
+    formatters using the bibtex-sty-file syntax. This allows
+    ultimate flexibility, but is a cumbersome to write</p>
+
+    <p>You can define your own formatter in the preference tab
+    "Name Formatter" using the following format and then use it
+    with the name given to it as any other formatter</p>
+    <code><case1>@<range11>@<format>@<range12>@<format>@<range13>...@@<br />
+
+     <case2>@<range21>@... and so on.</code>
+
+    <p>This format first splits the task to format a list of author
+    into cases depending on how many authors there are (this is
+    since some formats differ depending on how many authors there
+    are). Each individual case is separated by @@ and contains
+    instructions on how to format each author in the case. These
+    instructions are separated by a @.</p>
+
+    <p>Cases are identified using integers (1, 2, 3, etc.) or the
+    character * (matches any number of authors) and will tell the
+    formatter to apply the following instructions if there are a
+    number of less or equal of authors given.</p>
+
+    <p>Ranges are either
+    <code><integer>..<integer></code>,
+    <code><integer></code> or the character <code>*</code>
+    using a 1 based index for indexing authors from the given list
+    of authors. Integer indexes can be negative to denote them to
+    start from the end of the list where -1 is the last author.</p>
+
+    <p>For instance with an authorlist of "Joe Doe and Mary Jane
+    and Bruce Bar and Arthur Kay":</p>
+
+    <ul>
+        <li>1..3 will affect Joe, Mary and Bruce</li>
+
+        <li>4..4 will affect Arthur</li>
+
+        <li>* will affect all of them</li>
+
+        <li>2..-1 will affect Mary, Bruce and Arthur</li>
+    </ul>
+
+    <p>The <code><format></code>-strings use the Bibtex
+    formatter format:</p>
+
+    <p>The four letters v, f, l, j indicate the name parts von,
+    first, last, jr which are used within curly braces. A single
+    letter v, f, l, j indicates that the name should be
+    abbreviated. If one of these letters or letter pairs is
+    encountered JabRef will output all the respective names
+    (possibly abbreviated), but the whole expression in curly
+    braces is only printed if the name part exists.</p>
+
+    <p>For instance if the format is "{ll} {vv {von Part}} {ff}"
+    and the names are "Mary Kay and John von Neumann", then JabRef
+    will output "Kay Mary" (with two space between last and first)
+    and "Neuman von von Part John".</p>
+
+    <p>I give two examples but would rather point you to the bibtex
+    documentation.</p>
+
+    <p>Small example: <code>"{ll}, {f.}"</code> will turn
+    <code>"Joe Doe"</code> into <code>"Doe, J."</code></p>
+
+    <p>Large example:</p>
+
+    <blockquote>
+        <p>To turn:</p>
+
+        <p><code>"Joe Doe and Mary Jane and Bruce Bar and Arthur
+        Kay"</code></p>
+
+        <p>into</p>
+
+        <p><code>"Doe, J., Jane, M., Bar, B. and Kay,
+        A."</code></p>
+
+        <p>you would use</p>
+
+        <p><code>1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll},
+        {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll},
+        {f}.</code></p>
+    </blockquote>
+
+    <p>If somebody would like to write a better tutorial about
+    this: Write a mail to one of the JabRef mailinglists!</p>
+
+
+</body>
+</html>
diff --git a/src/help/CustomImports.html b/src/help/CustomImports.html
index fe986ff..88f7269 100644
--- a/src/help/CustomImports.html
+++ b/src/help/CustomImports.html
@@ -1,151 +1,151 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Custom import filters</h1>
-
-    <p>JabRef allows you to define and use your own importers, in
-    very much the same way as the standard import filters are
-    defined. An import filter is defined by one or more Java
-    <i>classes</i>, which parse the contents of a file from an
-    input stream and create BibTex-Entries. So with some basic Java
-    programming you can add an importer for your favorite source of
-    references or register a new, improved version of an existing
-    importer. Also, this allows you to add compiled custom
-    importers that you might have obtained e.g. from SourceForge
-    without rebuilding JabRef (see "Sharing your work").</p>
-
-    <p>Custom importers take precedence over standard importers.
-    This way, you can override existing importers for the
-    Autodetect and Command Line features of JabRef. Custom
-    importers are ordered by name.</p>
-
-    <h2>Adding a custom import filter</h2>
-
-    <p>Make sure, you have a compiled custom import filter (one or
-    more <code>.class</code> files as described below) and the
-    class files are in a directory structure according to their
-    package structure. To add a new custom import filter, open the
-    dialog box <b>Options -> Manage custom imports</b>, and
-    click <b>Add from folder</b>. A file chooser will appear,
-    allowing you to select the classpath of your importer, i.e. the
-    directory where the top folder of the package structure of your
-    importer resides. In a second file chooser you select your
-    importer class file, which must be derived from
-    <code>ImportFormat</code>. By clicking <b>Select new
-    ImportFormat Subclass</b>, your new importer will appear in the
-    list of custom import filters. All custom importers will appear
-    in the <b>File -> Import -> Custom Importers</b> and
-    <b>File -> Import and Append -> Custom Importers</b>
-    submenus of the JabRef window.</p>
-
-    <p>Please note that if you move the class to another directory
-    you will have to remove and re-add the importer. If you add a
-    custom importer under a name that already exists, the existing
-    importer will be replaced. Although in some cases it is
-    possible to update an existing custom importer without
-    restarting JabRef (when the importer is not on the classpath),
-    we recommend restarting JabRef after updating an
-    custom-importer. You can also register importers contained in a
-    ZIP- or JAR-file, simply select the Zip- or Jar-archive, then
-    the entry (class-file) that represents the new importer.</p>
-
-    <h2>Creating an import filter</h2>
-
-    <p>For examples and some helpful
-    files on how to build your own importer, please check our
-    download page.</p>
-
-    <h3>A simple example</h3>
-
-    <p>Let us assume that we want to import files of the following
-    form:</p>
-    <pre>
-1936;John Maynard Keynes;The General Theory of Employment, Interest and Money
-2003;Boldrin & Levine;Case Against Intellectual Monopoly
-2004;ROBERT HUNT AND JAMES BESSEN;The Software Patent Experiment
-</pre><br />
-    <br />
-
-    <p>In your favorite IDE or text editor create a class derived
-    from <code>ImportFormat</code> that implements methods
-    <code>getFormatName()</code>, <code>isRecognizedFormat</code>
-    and <code>importEntries()</code>. Here is an example:</p>
-    <pre>
-import java.io.*;
-import java.util.*;
-import net.sf.jabref.*;
-import net.sf.jabref.imports.ImportFormat;
-import net.sf.jabref.imports.ImportFormatReader;
-
-public class SimpleCsvImporter extends ImportFormat {
-
-  public String getFormatName() {
-    return "Simple CSV Importer";
-  }
-
-  public boolean isRecognizedFormat(InputStream stream) throws IOException {
-    return true; // this is discouraged except for demonstration purposes
-  }
-
-  public List importEntries(InputStream stream) throws IOException {
-        ArrayList bibitems = new ArrayList();
-    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-
-    String line = in.readLine();
-    while (line != null) {
-      if (!"".equals(line.trim())) {
-        String[] fields = line.split(";");
-        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
-        be.setType(BibtexEntryType.getType("techreport"));
-        be.setField("year", fields[0]);
-        be.setField("author", fields[1]);
-        be.setField("title", fields[2]);
-        bibitems.add(be);
-        line = in.readLine();
-      }
-    }
-        return bibitems;
-  }
-}
-</pre><br />
-    <br />
-
-    <p>Note that the example is in the default package. Suppose you
-    have saved it under
-    <code>/mypath/SimpleCsvImporter.java</code>. Also suppose the
-    JabRef-2.0.jar is in the same folder as
-    <code>SimpleCsvImporter.java</code> and Java is on your command
-    path. Compile it using a JSDK 1.4 e.g. with</p>
-    <pre>
-javac -classpath JabRef-2.0.jar SimpleCsvImporter.java
-</pre>Now there should be a file
-<code>/mypath/SimpleCsvImporter.class</code>.<br />
-    <br />
-
-
-    <p>In JabRef, open <b>Options -> Manage custom imports</b>,
-    and click <b>Add from folder</b>. Navigate to
-    <code>/mypath</code> and click the <b>Select ...</b> button.
-    Select the <code>SimpleCsvImporter.class</code> and click the
-    <b>Select ...</b> button. Your importer should now appear in
-    the list of custom importers under the name "Simple CSV
-    Importer" and, after you click <b>Close</b> also in the <b>File
-    -> Import -> Custom Importers</b> and <b>File ->
-    Import and Append -> Custom Importers</b> submenus of the
-    JabRef window.</p>
-
-    <h2>Sharing your work</h2>
-
-    <p>With custom importer files, it's fairly simple to share
-    custom import formats between users. If you write an import
-    filter for a format not supported by JabRef, or an improvement
-    over an existing one, we encourage you to post your work on our
-    SourceForge.net page. We'd be happy to distribute a collection
-    of submitted import files, or to add to the selection of
-    standard importers.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Custom import filters</h1>
+
+    <p>JabRef allows you to define and use your own importers, in
+    very much the same way as the standard import filters are
+    defined. An import filter is defined by one or more Java
+    <i>classes</i>, which parse the contents of a file from an
+    input stream and create BibTex-Entries. So with some basic Java
+    programming you can add an importer for your favorite source of
+    references or register a new, improved version of an existing
+    importer. Also, this allows you to add compiled custom
+    importers that you might have obtained e.g. from SourceForge
+    without rebuilding JabRef (see "Sharing your work").</p>
+
+    <p>Custom importers take precedence over standard importers.
+    This way, you can override existing importers for the
+    Autodetect and Command Line features of JabRef. Custom
+    importers are ordered by name.</p>
+
+    <h2>Adding a custom import filter</h2>
+
+    <p>Make sure, you have a compiled custom import filter (one or
+    more <code>.class</code> files as described below) and the
+    class files are in a directory structure according to their
+    package structure. To add a new custom import filter, open the
+    dialog box <b>Options -> Manage custom imports</b>, and
+    click <b>Add from folder</b>. A file chooser will appear,
+    allowing you to select the classpath of your importer, i.e. the
+    directory where the top folder of the package structure of your
+    importer resides. In a second file chooser you select your
+    importer class file, which must be derived from
+    <code>ImportFormat</code>. By clicking <b>Select new
+    ImportFormat Subclass</b>, your new importer will appear in the
+    list of custom import filters. All custom importers will appear
+    in the <b>File -> Import -> Custom Importers</b> and
+    <b>File -> Import and Append -> Custom Importers</b>
+    submenus of the JabRef window.</p>
+
+    <p>Please note that if you move the class to another directory
+    you will have to remove and re-add the importer. If you add a
+    custom importer under a name that already exists, the existing
+    importer will be replaced. Although in some cases it is
+    possible to update an existing custom importer without
+    restarting JabRef (when the importer is not on the classpath),
+    we recommend restarting JabRef after updating an
+    custom-importer. You can also register importers contained in a
+    ZIP- or JAR-file, simply select the Zip- or Jar-archive, then
+    the entry (class-file) that represents the new importer.</p>
+
+    <h2>Creating an import filter</h2>
+
+    <p>For examples and some helpful
+    files on how to build your own importer, please check our
+    download page.</p>
+
+    <h3>A simple example</h3>
+
+    <p>Let us assume that we want to import files of the following
+    form:</p>
+    <pre>
+1936;John Maynard Keynes;The General Theory of Employment, Interest and Money
+2003;Boldrin & Levine;Case Against Intellectual Monopoly
+2004;ROBERT HUNT AND JAMES BESSEN;The Software Patent Experiment
+</pre><br />
+    <br />
+
+    <p>In your favorite IDE or text editor create a class derived
+    from <code>ImportFormat</code> that implements methods
+    <code>getFormatName()</code>, <code>isRecognizedFormat</code>
+    and <code>importEntries()</code>. Here is an example:</p>
+    <pre>
+import java.io.*;
+import java.util.*;
+import net.sf.jabref.*;
+import net.sf.jabref.imports.ImportFormat;
+import net.sf.jabref.imports.ImportFormatReader;
+
+public class SimpleCsvImporter extends ImportFormat {
+
+  public String getFormatName() {
+    return "Simple CSV Importer";
+  }
+
+  public boolean isRecognizedFormat(InputStream stream) throws IOException {
+    return true; // this is discouraged except for demonstration purposes
+  }
+
+  public List importEntries(InputStream stream) throws IOException {
+        ArrayList bibitems = new ArrayList();
+    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+
+    String line = in.readLine();
+    while (line != null) {
+      if (!"".equals(line.trim())) {
+        String[] fields = line.split(";");
+        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
+        be.setType(BibtexEntryType.getType("techreport"));
+        be.setField("year", fields[0]);
+        be.setField("author", fields[1]);
+        be.setField("title", fields[2]);
+        bibitems.add(be);
+        line = in.readLine();
+      }
+    }
+        return bibitems;
+  }
+}
+</pre><br />
+    <br />
+
+    <p>Note that the example is in the default package. Suppose you
+    have saved it under
+    <code>/mypath/SimpleCsvImporter.java</code>. Also suppose the
+    JabRef-2.0.jar is in the same folder as
+    <code>SimpleCsvImporter.java</code> and Java is on your command
+    path. Compile it using a JSDK 1.4 e.g. with</p>
+    <pre>
+javac -classpath JabRef-2.0.jar SimpleCsvImporter.java
+</pre>Now there should be a file
+<code>/mypath/SimpleCsvImporter.class</code>.<br />
+    <br />
+
+
+    <p>In JabRef, open <b>Options -> Manage custom imports</b>,
+    and click <b>Add from folder</b>. Navigate to
+    <code>/mypath</code> and click the <b>Select ...</b> button.
+    Select the <code>SimpleCsvImporter.class</code> and click the
+    <b>Select ...</b> button. Your importer should now appear in
+    the list of custom importers under the name "Simple CSV
+    Importer" and, after you click <b>Close</b> also in the <b>File
+    -> Import -> Custom Importers</b> and <b>File ->
+    Import and Append -> Custom Importers</b> submenus of the
+    JabRef window.</p>
+
+    <h2>Sharing your work</h2>
+
+    <p>With custom importer files, it's fairly simple to share
+    custom import formats between users. If you write an import
+    filter for a format not supported by JabRef, or an improvement
+    over an existing one, we encourage you to post your work on our
+    SourceForge.net page. We'd be happy to distribute a collection
+    of submitted import files, or to add to the selection of
+    standard importers.</p>
+</body>
+</html>
diff --git a/src/help/DOItoBibTeXHelp.html b/src/help/DOItoBibTeXHelp.html
index 8348d53..809c140 100644
--- a/src/help/DOItoBibTeXHelp.html
+++ b/src/help/DOItoBibTeXHelp.html
@@ -1,20 +1,20 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Fetching entries using the Digital Object Identifier (DOI)</h1>
-
-    <p>To use this feature, choose <b>Search -> Web search</b>, and the
-    search interface will appear in the side pane. Select <b>DOI to BibTeX</b> in the dropdown menu.</p>
-
-    <p>This fetcher uses <a href="http://dx.doi.org/">http://dx.doi.org/</a>
-    to convert an DOI to a BibTeX entry.</p>
-
-    <p>Enter the DOI in the search field and press <b>Enter</b> or the <b>Fetch</b>
-    button. The entry will be fetched and added to your currently active
-    database. In case an error occurs, it is shown in a popup.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Fetching entries using the Digital Object Identifier (DOI)</h1>
+
+    <p>To use this feature, choose <b>Search -> Web search</b>, and the
+    search interface will appear in the side pane. Select <b>DOI to BibTeX</b> in the dropdown menu.</p>
+
+    <p>This fetcher uses <a href="http://dx.doi.org/">http://dx.doi.org/</a>
+    to convert an DOI to a BibTeX entry.</p>
+
+    <p>Enter the DOI in the search field and press <b>Enter</b> or the <b>Fetch</b>
+    button. The entry will be fetched and added to your currently active
+    database. In case an error occurs, it is shown in a popup.</p>
+
+</body>
+</html>
diff --git a/src/help/DatabaseProperties.html b/src/help/DatabaseProperties.html
index 5af0ba5..2cce75b 100644
--- a/src/help/DatabaseProperties.html
+++ b/src/help/DatabaseProperties.html
@@ -1,49 +1,49 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Database properties window</h1>
-
-<p><em>Opened from the main window by selecting <b>File -> Database properties</b></em></p>
-
-The database properties window lets you set certain database-specific settings.
-
-<h2>Database encoding</h2>
-
-<p>This setting determines which character encoding JabRef will use when writing this database
-to disk. Changing this setting will override the setting made in Preferences dialog for this
-database. JabRef specifies the encoding near the top of the bib file, in order to be able
-to use the correct encoding next time you open the file.</p>
-
-<h2>Override default file directories</h2>
-
-<p>These settings are used to specify which directory will be used to search for general file links
-(specified in the <em>file</em> field), and for legacy PDF/PS links (the <em>pdf</em> and <em>ps</em>
-fields were used in JabRef versions prior to 2.3, but should in current versions be replaced by
-general file links).</p>
-
-<p>Relative directories can be specified. This means that the location of the files will be interpreted
-relative to the location of the bib file. Simply setting a directory to "." (without quotes) means
-that the files should reside in the same directory as the bib file.</p>
-
-<p>These settings override the general file directories specified in the Preferences dialog. If
-no values are set, the general directories will be used.</p>
-
-<h2>Database protection</h2>
-
-<p>This setting lets you enforce reviewing of external changes before the database can be saved. Without
-the protection enabled, users have the option to save even if other users have made changes to the file,
-without reviewing the changes - although they will be warned about the changes. When the protection is
-enabled, users will only be able to save after any external changes have been reviewed and merged (however,
-the user can disable individual changes in the course of reviewing them).</p>
-
-<p><b>Note:</b> this is not a security feature, merely a way to prevent users from overwriting other users'
-changes inadvertently. This feature does not protect your database against malicious users.</p>
-
-
-
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Database properties window</h1>
+
+<p><em>Opened from the main window by selecting <b>File -> Database properties</b></em></p>
+
+The database properties window lets you set certain database-specific settings.
+
+<h2>Database encoding</h2>
+
+<p>This setting determines which character encoding JabRef will use when writing this database
+to disk. Changing this setting will override the setting made in Preferences dialog for this
+database. JabRef specifies the encoding near the top of the bib file, in order to be able
+to use the correct encoding next time you open the file.</p>
+
+<h2>Override default file directories</h2>
+
+<p>These settings are used to specify which directory will be used to search for general file links
+(specified in the <em>file</em> field), and for legacy PDF/PS links (the <em>pdf</em> and <em>ps</em>
+fields were used in JabRef versions prior to 2.3, but should in current versions be replaced by
+general file links).</p>
+
+<p>Relative directories can be specified. This means that the location of the files will be interpreted
+relative to the location of the bib file. Simply setting a directory to "." (without quotes) means
+that the files should reside in the same directory as the bib file.</p>
+
+<p>These settings override the general file directories specified in the Preferences dialog. If
+no values are set, the general directories will be used.</p>
+
+<h2>Database protection</h2>
+
+<p>This setting lets you enforce reviewing of external changes before the database can be saved. Without
+the protection enabled, users have the option to save even if other users have made changes to the file,
+without reviewing the changes - although they will be warned about the changes. When the protection is
+enabled, users will only be able to save after any external changes have been reviewed and merged (however,
+the user can disable individual changes in the course of reviewing them).</p>
+
+<p><b>Note:</b> this is not a security feature, merely a way to prevent users from overwriting other users'
+changes inadvertently. This feature does not protect your database against malicious users.</p>
+
+
+
+
+</body>
+</html>
diff --git a/src/help/DiVAtoBibTeXHelp.html b/src/help/DiVAtoBibTeXHelp.html
index 7d3a27a..90476e7 100644
--- a/src/help/DiVAtoBibTeXHelp.html
+++ b/src/help/DiVAtoBibTeXHelp.html
@@ -1,22 +1,22 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Fetching entries from DiVA</h1>
-            
-    <p><a href="http://www.diva-portal.org/">DiVA (Digitala Vetenskapliga Arkivet)</a> is a database
-        with publications from about <a href="http://www.diva-portal.org/smash/aboutdiva.jsf">30</a>
-        Swedish universities and colleges of higher education.
-        
-    <p>To use this feature, choose <b>Search -> Web search</b>, and the
-    search interface will appear in the side pane. Select <b>DiVA</b> in the dropdown menu.</p>
-
-    <p>Enter the DiVA identifier, e.g., <b>diva2:260746</b> in the search field
-        and press <b>Enter</b> or the <b>Fetch</b>
-    button. The entry will be fetched and added to your currently active
-    database. In case an error occurs, it is shown in a popup.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Fetching entries from DiVA</h1>
+            
+    <p><a href="http://www.diva-portal.org/">DiVA (Digitala Vetenskapliga Arkivet)</a> is a database
+        with publications from about <a href="http://www.diva-portal.org/smash/aboutdiva.jsf">30</a>
+        Swedish universities and colleges of higher education.
+        
+    <p>To use this feature, choose <b>Search -> Web search</b>, and the
+    search interface will appear in the side pane. Select <b>DiVA</b> in the dropdown menu.</p>
+
+    <p>Enter the DiVA identifier, e.g., <b>diva2:260746</b> in the search field
+        and press <b>Enter</b> or the <b>Fetch</b>
+    button. The entry will be fetched and added to your currently active
+    database. In case an error occurs, it is shown in a popup.</p>
+
+</body>
+</html>
diff --git a/src/help/EndNoteFilters.html b/src/help/EndNoteFilters.html
index d90c7a0..d04eb0d 100644
--- a/src/help/EndNoteFilters.html
+++ b/src/help/EndNoteFilters.html
@@ -1,82 +1,82 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>EndNote Export Filter</h1>
-
-    <h2>Export from JabRef</h2>
-
-    <p>JabRef can export databases to
-    EndNote-readable files. To use this feature, choose <b>File
-    -> Export</b>, choose the file type <b>Endnote (txt)</b> and
-    then specify the name of the export file.</p>
-
-    <h2>Import to EndNote</h2>
-
-    <p>The default EndNote Import filter
-    does not handle multiple authors or editors properly. There are
-    two options to work around this:</p>
-
-    <ol>
-        <li>Use the built-in filter and fix the file later. To open
-        up the file in EndNote, create a new database or open an
-        old database in EndNote. Then select <b>File ->
-        Import</b>, click on <b>Choose File</b>, then highlight the
-        exported file and click <b>Choose</b>. Click on <b>Import
-        Options</b> and select <b>EndNote Import</b>. Click
-        <b>Import</b> to start the import. After import, select
-        <b>Edit-> Change Text</b>. Change <b>Any Field</b> to
-        <b>Author</b>. Enter " and " into the search field (without
-        quotes). enter a return character into the change field
-        (option-return on Mac OS X, ctrl-return on Windows XP).
-        Click <b>Change</b>. Repeat with the <b>Secondary
-        Author</b> field.</li>
-
-        <li>Install the <i>EndNote Import from JabRef filter</i> in
-        the <i>EndNote Extras</i>. Follow the instructions in
-        <i>Advanced Use</i> below. To open up the file in EndNote,
-        create a new database or open an old database in EndNote.
-        Then select <b>File -> Import</b>, click on <b>Choose
-        File</b>, then highlight the exported file and click
-        <b>Choose</b>. Click on <b>Import Options</b> and select
-        <b>EndNote Import from JabRef</b> (if it does not appear,
-        select Other filters. If it still doesn't appear, it was
-        not correctly installed.) Click <b>Import</b> to start the
-        import.</li>
-    </ol>
-
-    <h2>Notes</h2>
-
-    <p>The EndNote Export filter maps BibTeX entrytypes
-    to EndNote reference types as follows:</p>
-    <pre>
-BibTeX entrytype -> EndNote Reference Type
-------------------------------------------
-misc, other -> Generic
-unpublished -> Manuscript
-manual -> Computer Program
-article -> Journal Article
-book -> Book
-booklet -> Personal Communication
-inbook,incollection -> Book Section
-inproceedings -> Conference Proceedings
-techreport -> Report
-mastersthesis, phdthesis -> Thesis</pre>
-
-    <h2>Corporate Authors</h2>
-
-    <p>By default, the export filter assumes
-    that entries in the author or editor fields in brackets are
-    corporate authors and replaces the brackets with a trailing
-    comma. However, this means that entries that include LaTeX code
-    in brackets will be assumed to be corporate authors and
-    therefore will be improperly formatted.</p>
-
-    <h2>Advanced Use: EndNote Extras</h2>
-
-    For better interoperability between EndNote and JabRef, download the
-    EndNote filter set from the Resources page of JabRef's web page.
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>EndNote Export Filter</h1>
+
+    <h2>Export from JabRef</h2>
+
+    <p>JabRef can export databases to
+    EndNote-readable files. To use this feature, choose <b>File
+    -> Export</b>, choose the file type <b>Endnote (txt)</b> and
+    then specify the name of the export file.</p>
+
+    <h2>Import to EndNote</h2>
+
+    <p>The default EndNote Import filter
+    does not handle multiple authors or editors properly. There are
+    two options to work around this:</p>
+
+    <ol>
+        <li>Use the built-in filter and fix the file later. To open
+        up the file in EndNote, create a new database or open an
+        old database in EndNote. Then select <b>File ->
+        Import</b>, click on <b>Choose File</b>, then highlight the
+        exported file and click <b>Choose</b>. Click on <b>Import
+        Options</b> and select <b>EndNote Import</b>. Click
+        <b>Import</b> to start the import. After import, select
+        <b>Edit-> Change Text</b>. Change <b>Any Field</b> to
+        <b>Author</b>. Enter " and " into the search field (without
+        quotes). enter a return character into the change field
+        (option-return on Mac OS X, ctrl-return on Windows XP).
+        Click <b>Change</b>. Repeat with the <b>Secondary
+        Author</b> field.</li>
+
+        <li>Install the <i>EndNote Import from JabRef filter</i> in
+        the <i>EndNote Extras</i>. Follow the instructions in
+        <i>Advanced Use</i> below. To open up the file in EndNote,
+        create a new database or open an old database in EndNote.
+        Then select <b>File -> Import</b>, click on <b>Choose
+        File</b>, then highlight the exported file and click
+        <b>Choose</b>. Click on <b>Import Options</b> and select
+        <b>EndNote Import from JabRef</b> (if it does not appear,
+        select Other filters. If it still doesn't appear, it was
+        not correctly installed.) Click <b>Import</b> to start the
+        import.</li>
+    </ol>
+
+    <h2>Notes</h2>
+
+    <p>The EndNote Export filter maps BibTeX entrytypes
+    to EndNote reference types as follows:</p>
+    <pre>
+BibTeX entrytype -> EndNote Reference Type
+------------------------------------------
+misc, other -> Generic
+unpublished -> Manuscript
+manual -> Computer Program
+article -> Journal Article
+book -> Book
+booklet -> Personal Communication
+inbook,incollection -> Book Section
+inproceedings -> Conference Proceedings
+techreport -> Report
+mastersthesis, phdthesis -> Thesis</pre>
+
+    <h2>Corporate Authors</h2>
+
+    <p>By default, the export filter assumes
+    that entries in the author or editor fields in brackets are
+    corporate authors and replaces the brackets with a trailing
+    comma. However, this means that entries that include LaTeX code
+    in brackets will be assumed to be corporate authors and
+    therefore will be improperly formatted.</p>
+
+    <h2>Advanced Use: EndNote Extras</h2>
+
+    For better interoperability between EndNote and JabRef, download the
+    EndNote filter set from the Resources page of JabRef's web page.
+</body>
+</html>
diff --git a/src/help/EntryEditorHelp.html b/src/help/EntryEditorHelp.html
old mode 100755
new mode 100644
index 5f0ca23..2cb770c
--- a/src/help/EntryEditorHelp.html
+++ b/src/help/EntryEditorHelp.html
@@ -1,130 +1,130 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-<h1>The entry editor</h1>
-
-    <p><em>Opened from main window by
-    double-clicking anywhere on the line of the entry, or selecting
-    the entry and pressing ENTER or CTRL-D. The panel is closed by pressing
-    ESC.</em></p>
-
-    <p>In this panel you can specify all relevant information on a
-    single entry. The entry editor checks the type of your entry,
-    and lists all the fields that are required, and the ones that
-    are optional, for referring the entry with <em>bibtex</em>. In
-    addition, there are several fields termed <em>General
-    fields</em>, that are common to all entry types.</p>
-
-    <p>You can fully customize which fields should be regarded as
-    required and optional for each type of entry, and which fields
-    appear in the General fields tabs. See
-    <a href="CustomEntriesHelp.html">Customizing entry types</a>
-    for more information about this.</p>
-
-    <p>For information about how the fields should be filled out,
-    see <a href="BibtexHelp.html">Bibtex help</a>.</p>
-
-    <h2>The entry editor's panels</h2>
-
-    <p>The entry editor contains six
-    panels: <em>Required fields</em>, <em>Optional fields</em>,
-    <em>General</em>, <em>Abstract</em>, <em>Review</em> and
-    <em>BibTeX source</em>, where <em>General</em>,
-    <em>Abstract</em> and <em>Review</em> can be customized (see
-    <a href="GeneralFields.html">Customizing general fields</a> for
-    details). Inside the three first panels, TAB and SHIFT-TAB are
-    used to switch focus between the text fields.</p>
-
-    <p>Switch panels by clicking on the tabs, or navigate to the
-    panel to the left or right using the following key
-    combinations: CTRL-TAB or CTRL-PLUS switch to the tab to the
-    right, and CTRL-SHIFT-TAB or CTRL-MINUS switch to the tab to
-    the left. You can also switch to the next or previous entry by
-    pressing CTRL-SHIFT-DOWN or CTRL-SHIFT-UP, respectively, or by
-    clicking the appropriate toolbar button.</p>
-
-    <p>The <em>bibtex source</em> panel shows how the entry will
-    appear when the database is saved in <em>bibtex</em> format. If
-    you wish, you can edit the <em>bibtex</em> source directly in
-    this panel. When you move to a different panel, press CTRL-S or
-    close the entry editor, JabRef will try to parse the contents
-    of the source panel. If there are problems, you will be
-    notified, and given the option to edit your entry further, or
-    to revert to the former contents. If <strong>Show source by
-    default</strong> is checked in the <strong>General
-    options</strong> tab of the <strong>Preferences</strong>
-    dialog, the source panel will be the one shown each time you
-    open the entry editor. If you prefer editing the source rather
-    than using the other four panels, you should check this
-    option.</p>
-
-    <p><strong>Tip:</strong> If your database contains fields
-    unknown to JabRef, these will be visible in the source
-    panel.</p>
-
-	<p><strong>Tip:</strong> the <i>pdf</i> and <i>url</i> fields
-    support Drag and Drop operations. You can drop there an url
-    from your browser. either a link to a pdf file (that JabRef can
-    download for you) or you can keep the link.</p>
-	
-    <h2>Field consistency checking</h2>
-
-    <p>When the contents of a field
-    is changed, JabRef checks if the new contents are acceptable.
-    For field types that are used by <em>bibtex</em>, the contents
-    are checked with respect to the use of the '#' character. The
-    hash symbol is <em>only</em> to be used in pairs (except in escaped
-    form, '\#'), wrapping the
-    name of a <em>bibtex</em> string that is referenced. Note that
-    JabRef does not check if the referenced string actually exists
-    (this is not trivial, since the <em>bibtex</em> style you use
-    can define an arbitrary set of strings unknown to JabRef).</p>
-
-    <p>If the contents are not accepted, the field will turn red,
-    indicating an error. In this case the change will not be
-    stored.</p>
-
-    <h2>Word/name autocompletion</h2>
-
-    <p>The entry editor offers autocompletion of words. In the Preferences dialog
-    you can enable or disable autocompletion, and choose for which fields
-    autocompletion is active.</p>
-
-    <p>With autocompletion, JabRef records all words that appear in
-    each of the chosen fields throughout your database. Whenever you write
-    the beginning of one of these words, it will be suggested visually. To
-    ignore the suggestion, simply write on. To accept the suggestion,
-    either press <em>ENTER</em> or use your arrow keys or other keys to
-    remove the selection box around the suggested characters.</p>
-
-    <p><em>Note:</em> the words considered for suggestion are only the ones
-    appearing in the same field in entries of the same database as the one you
-    are editing. There are many ways to realise this kind of feature, and if you feel
-    it should have been implemented differently, we'd like to hear your suggestions!</p>
-
-    <h2>Copy <em>bibtex</em> key including citation command.</h2>
-
-    <p>Pressing CTRL-K or the 'key' button causes the <em>bibtex</em> key for your entry
-    including the surrounding to be copied to the clipboard.</p>
-
-    <h2>Copy <em>bibtex</em> key</h2>
-
-    <p>Pressing CTRL-SHIFT-K causes the <em>bibtex</em> key for your entry
-    to be copied to the clipboard.</p>
-
-    <h2>Autogenerate <em>bibtex</em> key</h2>
-
-    <p>Press CTRL-G or the
-    'gen key' button (the magic wand) to autogenerate a
-    <em>bibtex</em> key for your entry based on the contents of its
-    required fields.</p>
-
-    <p>For more information on how JabRef generates <em>bibtex</em>
-    keys, see <a href="LabelPatterns.html">Customizing the BibTex
-    key generator</a>.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+<h1>The entry editor</h1>
+
+    <p><em>Opened from main window by
+    double-clicking anywhere on the line of the entry, or selecting
+    the entry and pressing ENTER or CTRL-D. The panel is closed by pressing
+    ESC.</em></p>
+
+    <p>In this panel you can specify all relevant information on a
+    single entry. The entry editor checks the type of your entry,
+    and lists all the fields that are required, and the ones that
+    are optional, for referring the entry with <em>bibtex</em>. In
+    addition, there are several fields termed <em>General
+    fields</em>, that are common to all entry types.</p>
+
+    <p>You can fully customize which fields should be regarded as
+    required and optional for each type of entry, and which fields
+    appear in the General fields tabs. See
+    <a href="CustomEntriesHelp.html">Customizing entry types</a>
+    for more information about this.</p>
+
+    <p>For information about how the fields should be filled out,
+    see <a href="BibtexHelp.html">Bibtex help</a>.</p>
+
+    <h2>The entry editor's panels</h2>
+
+    <p>The entry editor contains six
+    panels: <em>Required fields</em>, <em>Optional fields</em>,
+    <em>General</em>, <em>Abstract</em>, <em>Review</em> and
+    <em>BibTeX source</em>, where <em>General</em>,
+    <em>Abstract</em> and <em>Review</em> can be customized (see
+    <a href="GeneralFields.html">Customizing general fields</a> for
+    details). Inside the three first panels, TAB and SHIFT-TAB are
+    used to switch focus between the text fields.</p>
+
+    <p>Switch panels by clicking on the tabs, or navigate to the
+    panel to the left or right using the following key
+    combinations: CTRL-TAB or CTRL-PLUS switch to the tab to the
+    right, and CTRL-SHIFT-TAB or CTRL-MINUS switch to the tab to
+    the left. You can also switch to the next or previous entry by
+    pressing CTRL-SHIFT-DOWN or CTRL-SHIFT-UP, respectively, or by
+    clicking the appropriate toolbar button.</p>
+
+    <p>The <em>bibtex source</em> panel shows how the entry will
+    appear when the database is saved in <em>bibtex</em> format. If
+    you wish, you can edit the <em>bibtex</em> source directly in
+    this panel. When you move to a different panel, press CTRL-S or
+    close the entry editor, JabRef will try to parse the contents
+    of the source panel. If there are problems, you will be
+    notified, and given the option to edit your entry further, or
+    to revert to the former contents. If <strong>Show source by
+    default</strong> is checked in the <strong>General
+    options</strong> tab of the <strong>Preferences</strong>
+    dialog, the source panel will be the one shown each time you
+    open the entry editor. If you prefer editing the source rather
+    than using the other four panels, you should check this
+    option.</p>
+
+    <p><strong>Tip:</strong> If your database contains fields
+    unknown to JabRef, these will be visible in the source
+    panel.</p>
+
+	<p><strong>Tip:</strong> the <i>pdf</i> and <i>url</i> fields
+    support Drag and Drop operations. You can drop there an url
+    from your browser. either a link to a pdf file (that JabRef can
+    download for you) or you can keep the link.</p>
+	
+    <h2>Field consistency checking</h2>
+
+    <p>When the contents of a field
+    is changed, JabRef checks if the new contents are acceptable.
+    For field types that are used by <em>bibtex</em>, the contents
+    are checked with respect to the use of the '#' character. The
+    hash symbol is <em>only</em> to be used in pairs (except in escaped
+    form, '\#'), wrapping the
+    name of a <em>bibtex</em> string that is referenced. Note that
+    JabRef does not check if the referenced string actually exists
+    (this is not trivial, since the <em>bibtex</em> style you use
+    can define an arbitrary set of strings unknown to JabRef).</p>
+
+    <p>If the contents are not accepted, the field will turn red,
+    indicating an error. In this case the change will not be
+    stored.</p>
+
+    <h2>Word/name autocompletion</h2>
+
+    <p>The entry editor offers autocompletion of words. In the Preferences dialog
+    you can enable or disable autocompletion, and choose for which fields
+    autocompletion is active.</p>
+
+    <p>With autocompletion, JabRef records all words that appear in
+    each of the chosen fields throughout your database. Whenever you write
+    the beginning of one of these words, it will be suggested visually. To
+    ignore the suggestion, simply write on. To accept the suggestion,
+    either press <em>ENTER</em> or use your arrow keys or other keys to
+    remove the selection box around the suggested characters.</p>
+
+    <p><em>Note:</em> the words considered for suggestion are only the ones
+    appearing in the same field in entries of the same database as the one you
+    are editing. There are many ways to realise this kind of feature, and if you feel
+    it should have been implemented differently, we'd like to hear your suggestions!</p>
+
+    <h2>Copy <em>bibtex</em> key including citation command.</h2>
+
+    <p>Pressing CTRL-K or the 'key' button causes the <em>bibtex</em> key for your entry
+    including the surrounding to be copied to the clipboard.</p>
+
+    <h2>Copy <em>bibtex</em> key</h2>
+
+    <p>Pressing CTRL-SHIFT-K causes the <em>bibtex</em> key for your entry
+    to be copied to the clipboard.</p>
+
+    <h2>Autogenerate <em>bibtex</em> key</h2>
+
+    <p>Press CTRL-G or the
+    'gen key' button (the magic wand) to autogenerate a
+    <em>bibtex</em> key for your entry based on the contents of its
+    required fields.</p>
+
+    <p>For more information on how JabRef generates <em>bibtex</em>
+    keys, see <a href="LabelPatterns.html">Customizing the BibTex
+    key generator</a>.</p>
+
+</body>
+</html>
diff --git a/src/help/ExternalFiles.html b/src/help/ExternalFiles.html
index 5d11c79..880089e 100644
--- a/src/help/ExternalFiles.html
+++ b/src/help/ExternalFiles.html
@@ -1,138 +1,138 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>PDF/PS/URL/DOI links in JabRef</h1>
-
-    <p><b>Note:</b> JabRef 2.3
-    and later versions offer an <a href="FileLinks.html">improved
-    system for external file links</a>.</p>
-
-    <p>JabRef lets you link up your entries with PDF or PS files
-    stored on your system, as well as links to the document on the
-    web in the form of an URL or a DOI identifier.</p>
-
-    <h2>Setting up external viewers</h2>
-
-    <p>The program has to know
-    which external viewers to use for PDF, PS and web pages. These
-    are by default set to values that probably make sense for your
-    operating system, so there's a fair chance you don't have to
-    change these values.</p>
-
-    <p>To change the external viewer settings, go to <b>Options
-    -> Preferences -> External programs</b>.</p>
-
-    <h2>Opening external files or links</h2>
-
-    <p>There are several ways
-    to open an external file or web page. In the entry editor, you
-    can double click on the text field containing the file name,
-    DOI or URL. In the entry table you can select an entry and use
-    the menu choice, keyboard shortcut or the right-click menu to
-    open the file or web page. Finally, you can click on a PDF, PS,
-    URL or DOI icon.</p>
-
-    <p>By default the entry table will contain two columns with
-    icons for those entries that link to external files and URLs.
-    You can disable any of these in <b>Preferences -> Table</b>.
-    The second column of the entry table shows icons for PDF or PS
-    files (only PDF if both are present), and the third column
-    shows icons for URL or DOI (only URL if both are present). You
-    open the file or web page by clicking on an icon.</p>
-
-    <p><b>Note:</b> If the PS field does not appear in the entry
-    editor (in the 'General' panel), you may have to
-    <a href="GeneralFields.html">customize the entry types of the
-    general fields</a>.</p>
-
-    <h2>The main PDF and PS directories</h2>
-
-    <p>JabRef makes it easy to
-    link PDF and PS files to your entries. To take advantage of
-    this, you have to indicate in <b>Options -> Preferences
-    -> External programs</b> your main PDF and PS directories.
-    All PDF and PS files that are stored in or below each of these
-    directories will be referred to with a relative path by JabRef,
-    making it easy for you if you need to move the PDF and PS
-    directories, or if several users use the same database from
-    different network places.</p>
-
-    <p>Additionally, if you give your PDF and PS files names that
-    correspond to the relevant entry's bibtex key (plus '.pdf' or
-    '.ps'), JabRef will be able to search your main directories and
-    its subfolders for the correct PDF and PS. Once the
-    correctly-named PDF or PS is in place you access this function
-    by clicking the 'Auto' button next to the PDF and PS fields in
-    the entry editor. If the PDF or PS is found, the field will
-    immediately be set.</p>
-
-    <p>If you name a PDF or PS file as mentioned, you can also open
-    the file without setting the PDF or PS field of the entry at
-    all. The downside is that the PDF or PS icon will not appear in
-    the table unless you do (manually or with the 'Auto'
-    button).</p>
-
-    <h2>The database-specific PDF and PS directories</h2>
-
-    <p>You can set PDF and PS directories specific to a database
-    (<b>File -> Database properties</b>). These directories will
-    supersede the main directories.</p>
-
-    <h2><a name="RegularExpressionSearch"
-       id="RegularExpressionSearch">Using Regular Expression Search
-       for Auto-Linking</a></h2>
-
-    <p>In the previous sections JabRef's auto-linking feature was
-    described: If you choose names for your files corresponding to
-    the bibtex-key + plus the extension, JabRef will automatically
-    be able to find it.</p>
-
-    <p>Since JabRef 2.2 it is now possible to have greater
-    flexibility in the naming scheme by using regular expression
-    for the search. In most cases it should not be necessary though
-    to adapt the given default.</p>
-
-    <p>If you open the external preferences (Options ->
-    Preferences -> External Programs) you will find an option
-    called "Use Regular Expression Search". Checking this option
-    will allow you to enter your own regular expression for search
-    in the PDF directories.</p>
-
-    <p>The following syntax is understood:</p>
-
-    <ul>
-        <li><code>*</code> - Search in all immediate all
-        subdirectories excluding the current and any deeper
-        subdirectories.</li>
-
-        <li><code>**</code> - Search in all subdirectories
-        recursively AND the current directory.</li>
-
-        <li><code>.</code> and <code>..</code> - The current
-        directory and the parent directory.</li>
-
-        <li><code>[title]</code> - All expressions in square
-        brackets are replace by the corresponding field in the
-        current entry</li>
-
-        <li><code>[extension]</code> - Is replaced by the
-        file-extension of the field you are using.</li>
-
-        <li>All other text is interpreted as a regular expression.
-        But caution: You need to escape backslashes by putting two
-        backslashes after each other to not confuse them with the
-        path-separator.</li>
-    </ul>
-
-    <p>The default for searches is
-    <code>**/.*[bibtexkey].*\\.[extension]</code>. As you can see
-    this will search in all subdirectories of the extension-based
-    directory (for instance in the PDF directory) for any file that
-    has the correct extension and contains the Bibtex-key
-    somewhere.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>PDF/PS/URL/DOI links in JabRef</h1>
+
+    <p><b>Note:</b> JabRef 2.3
+    and later versions offer an <a href="FileLinks.html">improved
+    system for external file links</a>.</p>
+
+    <p>JabRef lets you link up your entries with PDF or PS files
+    stored on your system, as well as links to the document on the
+    web in the form of an URL or a DOI identifier.</p>
+
+    <h2>Setting up external viewers</h2>
+
+    <p>The program has to know
+    which external viewers to use for PDF, PS and web pages. These
+    are by default set to values that probably make sense for your
+    operating system, so there's a fair chance you don't have to
+    change these values.</p>
+
+    <p>To change the external viewer settings, go to <b>Options
+    -> Preferences -> External programs</b>.</p>
+
+    <h2>Opening external files or links</h2>
+
+    <p>There are several ways
+    to open an external file or web page. In the entry editor, you
+    can double click on the text field containing the file name,
+    DOI or URL. In the entry table you can select an entry and use
+    the menu choice, keyboard shortcut or the right-click menu to
+    open the file or web page. Finally, you can click on a PDF, PS,
+    URL or DOI icon.</p>
+
+    <p>By default the entry table will contain two columns with
+    icons for those entries that link to external files and URLs.
+    You can disable any of these in <b>Preferences -> Table</b>.
+    The second column of the entry table shows icons for PDF or PS
+    files (only PDF if both are present), and the third column
+    shows icons for URL or DOI (only URL if both are present). You
+    open the file or web page by clicking on an icon.</p>
+
+    <p><b>Note:</b> If the PS field does not appear in the entry
+    editor (in the 'General' panel), you may have to
+    <a href="GeneralFields.html">customize the entry types of the
+    general fields</a>.</p>
+
+    <h2>The main PDF and PS directories</h2>
+
+    <p>JabRef makes it easy to
+    link PDF and PS files to your entries. To take advantage of
+    this, you have to indicate in <b>Options -> Preferences
+    -> External programs</b> your main PDF and PS directories.
+    All PDF and PS files that are stored in or below each of these
+    directories will be referred to with a relative path by JabRef,
+    making it easy for you if you need to move the PDF and PS
+    directories, or if several users use the same database from
+    different network places.</p>
+
+    <p>Additionally, if you give your PDF and PS files names that
+    correspond to the relevant entry's bibtex key (plus '.pdf' or
+    '.ps'), JabRef will be able to search your main directories and
+    its subfolders for the correct PDF and PS. Once the
+    correctly-named PDF or PS is in place you access this function
+    by clicking the 'Auto' button next to the PDF and PS fields in
+    the entry editor. If the PDF or PS is found, the field will
+    immediately be set.</p>
+
+    <p>If you name a PDF or PS file as mentioned, you can also open
+    the file without setting the PDF or PS field of the entry at
+    all. The downside is that the PDF or PS icon will not appear in
+    the table unless you do (manually or with the 'Auto'
+    button).</p>
+
+    <h2>The database-specific PDF and PS directories</h2>
+
+    <p>You can set PDF and PS directories specific to a database
+    (<b>File -> Database properties</b>). These directories will
+    supersede the main directories.</p>
+
+    <h2><a name="RegularExpressionSearch"
+       id="RegularExpressionSearch">Using Regular Expression Search
+       for Auto-Linking</a></h2>
+
+    <p>In the previous sections JabRef's auto-linking feature was
+    described: If you choose names for your files corresponding to
+    the bibtex-key + plus the extension, JabRef will automatically
+    be able to find it.</p>
+
+    <p>Since JabRef 2.2 it is now possible to have greater
+    flexibility in the naming scheme by using regular expression
+    for the search. In most cases it should not be necessary though
+    to adapt the given default.</p>
+
+    <p>If you open the external preferences (Options ->
+    Preferences -> External Programs) you will find an option
+    called "Use Regular Expression Search". Checking this option
+    will allow you to enter your own regular expression for search
+    in the PDF directories.</p>
+
+    <p>The following syntax is understood:</p>
+
+    <ul>
+        <li><code>*</code> - Search in all immediate all
+        subdirectories excluding the current and any deeper
+        subdirectories.</li>
+
+        <li><code>**</code> - Search in all subdirectories
+        recursively AND the current directory.</li>
+
+        <li><code>.</code> and <code>..</code> - The current
+        directory and the parent directory.</li>
+
+        <li><code>[title]</code> - All expressions in square
+        brackets are replace by the corresponding field in the
+        current entry</li>
+
+        <li><code>[extension]</code> - Is replaced by the
+        file-extension of the field you are using.</li>
+
+        <li>All other text is interpreted as a regular expression.
+        But caution: You need to escape backslashes by putting two
+        backslashes after each other to not confuse them with the
+        path-separator.</li>
+    </ul>
+
+    <p>The default for searches is
+    <code>**/.*[bibtexkey].*\\.[extension]</code>. As you can see
+    this will search in all subdirectories of the extension-based
+    directory (for instance in the PDF directory) for any file that
+    has the correct extension and contains the Bibtex-key
+    somewhere.</p>
+</body>
+</html>
diff --git a/src/help/FileLinks.html b/src/help/FileLinks.html
index 4a6a4f6..885d064 100644
--- a/src/help/FileLinks.html
+++ b/src/help/FileLinks.html
@@ -1,92 +1,92 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>File links in JabRef</h1>
-
-    <p>JabRef lets you link up your
-    entries with files of any type stored on your system, as well
-    as links to the document on the web in the form of an URL or a
-    DOI identifier. Each entry can have an arbitrary number of file
-    links, and each linked file can be opened quickly from JabRef.</p>
-
-    <p>In BibTeX terms, the file links of an entry are encoded in a
-    single field. However, from within JabRef they appear as an
-    editable list of links accessed from the entry editor along
-    with other BibTeX fields.</p>
-
-    <h2>Setting up external file types</h2>
-
-    <p>For each file link, a
-    file type must be chosen, to determine what icon should be used
-    and what application should be called to open the file. The
-    list of file types can be viewed and edited by choosing
-    <b>Options -> Manage external file types</b>, or by clicking
-    the <b>Manage external file types</b> button in the <b>External
-    programs</b> tab of the Preferences dialog.</p>
-
-    <p>A file type is specified by its name, a graphical icon, a
-    file extension and an application to view the files. On
-    Windows, the name of the application can be omitted in order to
-    use Window's default viewer instead.</p>
-
-    <h2>Adding external links to an entry</h2>
-
-    <p>If the "file" field
-    is included in <a href="GeneralFields.html">General fields</a>,
-    you can edit the list of external links for an entry in the
-    <a href="EntryEditorHelp.html">Entry editor</a>. The editor
-    includes buttons for inserting, editing and removing links, as
-    well as buttons for reordering the list of links.</p>
-
-    <p>If you have a file within or below your file directory (set
-    up in <b>Preferences -> External programs -> External
-    file links -> Main file directory</b>) with an extension
-    matching one of the defined external file types, and a name
-    containing a BibTeX entry's BibTeX key, the file can be
-    autolinked by clicking on the <b>Auto</b> button in the entry
-    editor. The rules for which file names can be autolinked to a
-    BibTeX key can be set up in <b>Preferences -> External
-    programs -> External file links -> Use regular expression
-    search</b>.</p>
-
-    <p>If you want to download a file and link to it from a BibTeX
-    entry, you can do this by clicking the <b>Download</b> button
-    in the entry editor. A dialog box will appear, prompting you to
-    enter the URL. The file will be downloaded to your main file
-    directory, named based on the entry's BibTeX key, and finally
-    linked from the entry.</p>
-
-    <p>There are a couple of alternatives to the global file directory.
-    You have the option (under <b>Preferences -> External programs</b>) to
-    allow links relative to the location of the bib file. Files linked
-    in this way can be moved along with the bib file without breaking the
-    links. There is an additional setting determining whether the bib file
-    location should be the <i>primary</i> file directory. This decides which
-    directory JabRef will use when downloading or moving linked files into
-    your file directory.</p>
-
-    <p>You can also set a file directory (absolute, or relative to the
-    bib file location) specifically for one database under <b>File ->
-    Database properties</b>. Finally, in the <b>Database properties</b> dialog
-    you can set a user-specific file directory, which will be valid only when
-    you are the one working on the bib file.</p>
-
-    <h2>Opening external files</h2>
-
-    <p>There are several ways to open
-    an external file or web page. In the entry table you can select
-    an entry and use the menu choice, keyboard shortcut or the
-    right-click menu to open an entry's first external link.
-    Alternatively, if the entry table is set up to show the
-    <b>file</b> column (set up in <b>Preferences -> Entry table
-    -> Special table columns -> Show file column</b>), you
-    can click on the file icon to open an entry's first link. To
-    access any of an entry's links, click on the icon with the
-    right mouse button (or <b>Ctrl-click</b> on Mac OS X) to bring
-    up a menu showing all links.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>File links in JabRef</h1>
+
+    <p>JabRef lets you link up your
+    entries with files of any type stored on your system, as well
+    as links to the document on the web in the form of an URL or a
+    DOI identifier. Each entry can have an arbitrary number of file
+    links, and each linked file can be opened quickly from JabRef.</p>
+
+    <p>In BibTeX terms, the file links of an entry are encoded in a
+    single field. However, from within JabRef they appear as an
+    editable list of links accessed from the entry editor along
+    with other BibTeX fields.</p>
+
+    <h2>Setting up external file types</h2>
+
+    <p>For each file link, a
+    file type must be chosen, to determine what icon should be used
+    and what application should be called to open the file. The
+    list of file types can be viewed and edited by choosing
+    <b>Options -> Manage external file types</b>, or by clicking
+    the <b>Manage external file types</b> button in the <b>External
+    programs</b> tab of the Preferences dialog.</p>
+
+    <p>A file type is specified by its name, a graphical icon, a
+    file extension and an application to view the files. On
+    Windows, the name of the application can be omitted in order to
+    use Window's default viewer instead.</p>
+
+    <h2>Adding external links to an entry</h2>
+
+    <p>If the "file" field
+    is included in <a href="GeneralFields.html">General fields</a>,
+    you can edit the list of external links for an entry in the
+    <a href="EntryEditorHelp.html">Entry editor</a>. The editor
+    includes buttons for inserting, editing and removing links, as
+    well as buttons for reordering the list of links.</p>
+
+    <p>If you have a file within or below your file directory (set
+    up in <b>Preferences -> External programs -> External
+    file links -> Main file directory</b>) with an extension
+    matching one of the defined external file types, and a name
+    containing a BibTeX entry's BibTeX key, the file can be
+    autolinked by clicking on the <b>Auto</b> button in the entry
+    editor. The rules for which file names can be autolinked to a
+    BibTeX key can be set up in <b>Preferences -> External
+    programs -> External file links -> Use regular expression
+    search</b>.</p>
+
+    <p>If you want to download a file and link to it from a BibTeX
+    entry, you can do this by clicking the <b>Download</b> button
+    in the entry editor. A dialog box will appear, prompting you to
+    enter the URL. The file will be downloaded to your main file
+    directory, named based on the entry's BibTeX key, and finally
+    linked from the entry.</p>
+
+    <p>There are a couple of alternatives to the global file directory.
+    You have the option (under <b>Preferences -> External programs</b>) to
+    allow links relative to the location of the bib file. Files linked
+    in this way can be moved along with the bib file without breaking the
+    links. There is an additional setting determining whether the bib file
+    location should be the <i>primary</i> file directory. This decides which
+    directory JabRef will use when downloading or moving linked files into
+    your file directory.</p>
+
+    <p>You can also set a file directory (absolute, or relative to the
+    bib file location) specifically for one database under <b>File ->
+    Database properties</b>. Finally, in the <b>Database properties</b> dialog
+    you can set a user-specific file directory, which will be valid only when
+    you are the one working on the bib file.</p>
+
+    <h2>Opening external files</h2>
+
+    <p>There are several ways to open
+    an external file or web page. In the entry table you can select
+    an entry and use the menu choice, keyboard shortcut or the
+    right-click menu to open an entry's first external link.
+    Alternatively, if the entry table is set up to show the
+    <b>file</b> column (set up in <b>Preferences -> Entry table
+    -> Special table columns -> Show file column</b>), you
+    can click on the file icon to open an entry's first link. To
+    access any of an entry's links, click on the icon with the
+    right mouse button (or <b>Ctrl-click</b> on Mac OS X) to bring
+    up a menu showing all links.</p>
+</body>
+</html>
diff --git a/src/help/GeneralFields.html b/src/help/GeneralFields.html
index 0174050..a5ad630 100644
--- a/src/help/GeneralFields.html
+++ b/src/help/GeneralFields.html
@@ -1,27 +1,27 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Customizing general fields</h1>
-
-    <p>You can add an arbitrary number of tabs to the entry editor.
-    These will be present for all entry types. To customize these
-    tabs, go to "Options -> Set up general fields".</p>
-
-    <p>You specify one tab on each line. The line should start with
-    the name of the tab, followed by a colon (:), and the fields it
-    should contain, separated by semicolons (;).</p>
-
-    <p>E.g.<br />
-    <code>General:url;keywords;doi;pdf<br />
-     Abstract:abstract;annote</code></p>
-
-    <p>which would give one tab named "General" containing the
-    fields <em>url</em>, <em>keywords</em>, <em>doi</em> and
-    <em>pdf</em>, and another tab named "Abstract" containing the
-    fields <em>abstract</em> and <em>annote</em>.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Customizing general fields</h1>
+
+    <p>You can add an arbitrary number of tabs to the entry editor.
+    These will be present for all entry types. To customize these
+    tabs, go to "Options -> Set up general fields".</p>
+
+    <p>You specify one tab on each line. The line should start with
+    the name of the tab, followed by a colon (:), and the fields it
+    should contain, separated by semicolons (;).</p>
+
+    <p>E.g.<br />
+    <code>General:url;keywords;doi;pdf<br />
+     Abstract:abstract;annote</code></p>
+
+    <p>which would give one tab named "General" containing the
+    fields <em>url</em>, <em>keywords</em>, <em>doi</em> and
+    <em>pdf</em>, and another tab named "Abstract" containing the
+    fields <em>abstract</em> and <em>annote</em>.</p>
+</body>
+</html>
diff --git a/src/help/GoogleScholarHelp.html b/src/help/GoogleScholarHelp.html
index 870a4a4..677fa44 100644
--- a/src/help/GoogleScholarHelp.html
+++ b/src/help/GoogleScholarHelp.html
@@ -1,23 +1,23 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Search Google Scholar</h1>
-
-    <p>JabRef can search and download citations from Google Scholar.
-    To use this feature, choose <b>Search -> Web search</b>, and the search interface will appear in the
-    side pane. Select <b>Google Scholar</b> in the dropdown menu.</p>
-
-    <p>To start a search, enter the words of your query, and press
-    <b>Enter</b> or the <b>Fetch</b> button.</p>
-
-    <p>Frequent connections to Google Scholar will cause Google to display a CAPTCHA challenge which JabRef
-        cannot pass. To avoid this, JabRef will for each search display a preview of the first page of
-        entries returned by the server. You can then choose which entries to download.
-  	</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Search Google Scholar</h1>
+
+    <p>JabRef can search and download citations from Google Scholar.
+    To use this feature, choose <b>Search -> Web search</b>, and the search interface will appear in the
+    side pane. Select <b>Google Scholar</b> in the dropdown menu.</p>
+
+    <p>To start a search, enter the words of your query, and press
+    <b>Enter</b> or the <b>Fetch</b> button.</p>
+
+    <p>Frequent connections to Google Scholar will cause Google to display a CAPTCHA challenge which JabRef
+        cannot pass. To avoid this, JabRef will for each search display a preview of the first page of
+        entries returned by the server. You can then choose which entries to download.
+  	</p>
+
+</body>
+</html>
diff --git a/src/help/GroupsHelp.html b/src/help/GroupsHelp.html
index 3bff328..dc54166 100644
--- a/src/help/GroupsHelp.html
+++ b/src/help/GroupsHelp.html
@@ -1,349 +1,349 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-<h1>Groups</h1>
-
-    <p>Groups allow to structure a BibTeX database in a
-    tree-like way that is similar to organizing files on disk in
-    directories and subdirectories. The two main differences are:</p>
-
-    <ul>
-        <li>While a file is always located in exactly one
-        directory, an entry may be contained in more than one
-        group.</li>
-
-        <li>Groups may use certain criteria to dynamically define
-        their content. New entries that match these criteria are
-        automatically contained in these groups. This feature is
-        not available in common file systems, but in several Email
-        clients (e.g. Thunderbird and Opera).</li>
-    </ul>Selecting a group shows the entries contained in that
-    group. Selecting multiple groups shows the entries contained in
-    any group (union) or those contained in all groups
-    (intersection), depending on the current settings. All this is
-    explained in detail below.
-
-    <p>Group definitions are database-specific; they are saved as a
-    <tt>@COMMENT</tt> block in the <tt>.bib</tt>-file and are
-    shared among all users. (Future versions of JabRef might
-    support user-dependent groups.)</p>
-
-    <h2>Interface</h2>
-
-    <p>The groups interface is shown in the side
-    pane on the left of the screen. It can be toggled on or off by
-    pressing <tt>CTRL-SHIFT-G</tt> or by the groups button in the
-    toolbar. The interface has several buttons, but most functions
-    are accessed via a context ("right-click") menu. Drag and Drop
-    is also supported.</p>
-
-    <table cellspacing="0"
-           cellpadding="5"
-           border="0"
-           style="background-color: #C0FFC0"
-		   summary="Examples">
-        <tr>
-            <td>
-                <h2>Some quick examples</h2>
-
-                <p>You might want to...</p>
-
-                <h3>...just create a group and assign some entries
-                to it</h3>
-
-                <p>Ensure that the groups interface is
-                visible. Press the <b>New Group</b> button, enter a
-                name for the group, then press OK, leaving all
-                values at their defaults. Now select the entries to
-                be assigned to the group and use Drag and Drop to
-                the group, or the option <b>Add to group</b> in the
-                context menu. Finally select the group to see its
-                content (which should be the entries you just
-                assigned).</p>
-
-                <h3>...use the <tt>keywords</tt> field to group the
-                entries</h3>
-
-                <p>Ensure that the groups interface is
-                visible. Press the <b>New Group</b> button, enter a
-                name for the group, and select the option to
-                dynamically group entries by searching a field for
-                a keyword. Enter the keyword to search for, then
-                click OK. Finally select the group to see its
-                content (which should be all entries whose
-                <tt>keywords</tt> field contains the keyword you
-                specified).</p>
-
-                <h3>...use a free-form search expression to define
-                a group</h3>
-
-                <p>Ensure that the groups interface is
-                visible. Press the <b>New Group</b> button, enter a
-                name for the group, and select the option to
-                dynamically group entries by a free-form search
-                expression. Enter <tt>author=smith</tt> as a search
-                expression (replace <tt>smith</tt> with a name that
-                actually occurs in your database) and click
-                <b>OK</b>. Finally select the group to see its
-                content (which should be all entries whose
-                <tt>author</tt> field contains the name you
-                specified).</p>
-
-                <h3>...combine multiple groups</h3>
-
-                <p>Create two
-                different groups (e.g. as described above). Click
-                the <b>Settings</b> button and make sure that
-                <b>Union</b> is selected. Now select both groups.
-                You should see all entries contained in any of the
-                two groups. Click <b>Settings</b> again and select
-                <b>Intersection</b>. Now you should see only those
-                entries contained in both groups (which might be
-                none at all, or exactly the same entries as before
-                in case both groups contain the same entries).</p>
-
-                <h3>...identify overlapping groups</h3>
-
-                <p>JabRef allows you to easily identify groups that overlap
-                with the currently selected groups (i.e. that
-                contain at least one entry that is also contained
-                in the currently selected groups). Click
-                <b>Settings</b> and activate the option to
-                highlight overlapping groups. Then select a group
-                that overlaps with other groups. The other groups
-                should be highlighted.</p>
-            </td>
-        </tr>
-    </table>
-
-    <h2>Types of groups</h2>
-
-    <p>In JabRef there are four different types of groups:</p>
-
-    <ol>
-        <li>The group <b>All Entries</b>, which -- as the name
-        suggests -- contains all entries, is always present and
-        cannot be edited or removed.</li>
-
-        <li><b>Static groups</b> behave like directories on disk
-        and contain only those entries that you explicitly assign
-        to them.</li>
-
-        <li><b>Dynamic groups based on keyword search</b> contain
-        entries in which a certain BibTeX field (e.g.
-        <tt>keywords</tt>) contains a certain keyword (e.g.
-        <tt>electrical</tt>). This method does not require manual
-        assignment of entries, but uses information that is already
-        present in the database. If all entries in your database
-        have suitable keywords in their <tt>keywords</tt> field,
-        using this type of group might be the best choice.</li>
-
-        <li><b>Dynamic groups based on free-form search
-        expressions</b> contain entries that match a specified
-        search expression, using the same syntax as the
-        <a href="SearchHelp.html">search panel</a> on the side
-        pane. This <a href="SearchHelp.html#advanced">syntax</a>
-        supports logical operators (<tt>AND</tt>, <tt>OR</tt>,
-        <tt>NOT</tt>) and allows to specify one or more BibTeX
-        fields to search, facilitating more flexible group
-        definitions than a keyword search (e.g. <tt>author=smith
-        and title=electrical</tt>).</li>
-    </ol>Every group that you create is of one of the last three
-    types. The group editing dialog, which is invoked by
-    double-clicking on a group, shows a short description of the
-    selected/edited group in plain English.
-
-    <h2>Groups structure, creating and removing groups</h2>
-
-    <p>Just like directories, groups are structured like a tree, with the
-    group <b>All Entries</b> at the root. By right-clicking on a
-    group you can add a new group to the tree, either at the same
-    level as the selected group or as a subgroup of it. The <b>New
-    Group</b> button lets you create a new subgroup of the group
-    <b>All Entries</b>, regardless of the currently selected
-    group(s). The context menu also allows to remove groups and/or
-    subgroups, to sort subgroups alphabetically, or to move groups
-    to a different location in the tree. The latter can also be
-    done by Drag and Drop, with the restriction that Drag and Drop
-    does not support changing the order of a group's subgroups.</p>
-
-    <p>Undo and redo is supported for all edits.</p>
-
-    <h3>Static groups</h3>
-
-    <p>Static groups are populated only by
-    explicit manual assignment of entries. After creating a static
-    group you select the entries to be assigned to it, and use
-    either Drag and Drop or the main table's context menu to
-    perform the assignment. To remove entries from a static group,
-    select them and use the main table's context menu. There are no
-    options to be configured.</p>
-
-    <p>This method of grouping requires that all entries have a
-    unique BibTeX key. In case of missing or duplicate BibTeX keys,
-    the assignment of the affected entries cannot be correctly
-    restored in future sessions.</p>
-
-    <h3>Dynamic groups</h3>
-
-    <p>The content of a dynamic group is
-    defined by a logical condition. Only entries that meet this
-    condition are contained in the group. This method uses the
-    information stored in the database itself, and updates
-    dynamically whenever the database changes.</p>
-
-    <p>Two types of conditions can be used:</p>
-
-    <dl>
-        <dt><b>Searching a field for a keyword</b></dt>
-
-        <dd>This method groups entries in which a specified BibTeX
-        field (e.g. <tt>keywords</tt>) contains a specified search
-        term (e.g. <tt>electrical</tt>). Obviously, for this to
-        work, the grouping field must be present in every entry,
-        and its content must be accurate. The above example would
-        group all entries referring to something electrical. Using
-        the field <tt>author</tt> allows to group entries by a
-        certain author, etc. The search can either be done as a
-        plain-text or a regular expression search. In the former
-        case, JabRef allows to manually assign/remove entries
-        to/from the group by simply appending/removing the search
-        term to/from the content of the grouping field. This makes
-        sense only for the <tt>keywords</tt> field or for
-        self-defined fields, but obviously not for fields like
-        <tt>author</tt> or <tt>year</tt>.</dd>
-
-        <dt><b>Using a free-form search expression</b></dt>
-
-        <dd>This is similar to the above, but rather than search a
-        single field for a single search term, the
-        <a href="SearchHelp.html#advanced">search expression
-        syntax</a> can be used, which supports logical operators
-        (<tt>AND</tt>, <tt>OR</tt>, <tt>NOT</tt>) and allows to
-        search multiple BibTeX fields. For example, the search
-        expression <tt>keywords=regression and not
-        keywords=linear</tt> groups entries concerned with
-        non-linear regression.</dd>
-    </dl>In the groups view, dynamic groups are shown in
-    <i>italics</i> by default. This can be turned off in the
-    preferences (Options -> Preferences -> Groups, box "Show
-    dynamic groups in italics").
-
-    <h3>Hierarchical context</h3>
-
-    <p>By default, a group is
-    <b>independent</b> of its position in the groups tree: When
-    selected, only the group's contents are shown. However,
-    especially when using dynamic groups, it is often useful to
-    define a subgroup that <b>refines its supergroup</b>, i.e.,
-    when selected, entries contained in both groups are displayed.
-    For example, create a supergroup containing entries with the
-    keyword <tt>distribution</tt> and a subgroup containing entries
-    with the keyword <tt>gauss</tt> that refines this supergroup.
-    Selecting the subgroup now displays entries that match both
-    conditions, i.e. are concerned with Gaussian distributions. By
-    adding another refining subgroup for <tt>laplace</tt> to the
-    original supergroup, the grouping can easily be extended. In
-    the groups tree, refining groups have a special icon (this can
-    be turned off in the preferences).</p>
-
-    <p>The logical complement to a refining group is a group that
-    <b>includes its subgroups</b>, i.e. when selected, not only the
-    group's own entries, but also its subgroups' entries are shown.
-    In the groups tree, this type of group has a special icon (this
-    can be turned off in the preferences).</p>
-
-    <h2>Viewing a group's entries, combining multiple
-    groups</h2>
-
-    <p>Selecting a group shows the entries contained in
-    that group by highlighting them and, depending on the settings
-    (accessible by clicking the <b>Settings</b> button), moving
-    them to the top of the list and/or selecting them. These
-    options are identical to those available for the regular
-    search.</p>
-
-    <p>When multiple groups are selected, either the union or the
-    intersection of their content is shown, depending on the
-    current settings. This allows to quickly combine multiple
-    conditions, e.g. if you have a static group <tt>Extremely
-    Important</tt> to which you assign all extremely important
-    entries, you can view the extremely important entries in any
-    other group by selecting both groups (this requires to have
-    <b>Intersection</b> selected in the settings).</p>
-
-    <h2>Groups and searching</h2>
-
-    <p>When viewing the contents of the
-    selected group(s), a search can be performed within these
-    contents using the regular search facility.</p>
-
-    <h2>Highlighting overlapping groups</h2>
-
-    <p>The <b>Settings</b>
-    button offers an option to highlight overlapping groups. If
-    this is activated, upon selection of one or more groups, all
-    groups that contain at least one of the entries contained in
-    the currently selected group(s) are highlighted. This quickly
-    identifies overlap between the groups' contents. You might, for
-    example, create a group <tt>To Read</tt> that contains all
-    entries which you plan to read. Now, whenever you select any
-    group, the group <tt>To Read</tt> is highlighted if the
-    selected group contains entries that you plan to read.</p>
-
-	<h2>New entries assigned to selected groups</h2>
-   
-   <p>The <b>Settings</b> button offers also an option to
-   automatically assign new entries to selected groups. If this
-   is activated, upon selection of one or more groups, all the
-   new entries created will be assigned to the selected groups.
-   This work both for entries created from menu button or
-   entries pasted from clipboard. This option can also be
-   enabled/disabled from the menu "option > preferences > group".
-   </p>
-
-    <h2>Advanced features</h2>
-
-    <p>After mastering the grouping concepts
-    described above, the following advanced features might come in
-    handy.</p>
-
-    <h3>Automatically creating dynamic groups</h3>
-
-    <p>By clicking the
-    <b>Automatically create groups for database</b> button, you can
-    quickly create a set of groups appropriate for your database.
-    This feature will gather all words found in a specific field of
-    your choice, and create a group for each word. This is useful
-    for instance if your database contains suitable keywords for
-    all entries. By autogenerating groups based on the
-    <tt>keywords</tt> field, you should have a basic set of groups
-    at no cost.</p>
-
-    <p>You can also specify characters to ignore, for instance
-    commas used between keywords. These will be treated as
-    separators between words, and not part of them. This step is
-    important for combined keywords such as <tt>laplace
-    distribution</tt> to be recognized as a single semantic unit.
-    (You cannot use this option to remove complete words. Instead,
-    delete the unwanted groups manually after they were created
-    automatically.)</p>
-
-    <h3>Refreshing the groups view</h3>
-
-    <p>The <b>Refresh</b> button
-    updates the entry table to reflect the current groups
-    selection. This is usually done automatically, but in rare
-    occasions (e.g. after a group-related undo/redo) a manual
-    refresh is required.</p>
-
-    <h3>Mixing refining groups with including groups</h3>
-
-    <p>If a refining group is a subgroup of a group that includes its
-    subgroups -- the refining group's siblings --, these siblings
-    are ignored when the refining group is selected.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+<h1>Groups</h1>
+
+    <p>Groups allow to structure a BibTeX database in a
+    tree-like way that is similar to organizing files on disk in
+    directories and subdirectories. The two main differences are:</p>
+
+    <ul>
+        <li>While a file is always located in exactly one
+        directory, an entry may be contained in more than one
+        group.</li>
+
+        <li>Groups may use certain criteria to dynamically define
+        their content. New entries that match these criteria are
+        automatically contained in these groups. This feature is
+        not available in common file systems, but in several Email
+        clients (e.g. Thunderbird and Opera).</li>
+    </ul>Selecting a group shows the entries contained in that
+    group. Selecting multiple groups shows the entries contained in
+    any group (union) or those contained in all groups
+    (intersection), depending on the current settings. All this is
+    explained in detail below.
+
+    <p>Group definitions are database-specific; they are saved as a
+    <tt>@COMMENT</tt> block in the <tt>.bib</tt>-file and are
+    shared among all users. (Future versions of JabRef might
+    support user-dependent groups.)</p>
+
+    <h2>Interface</h2>
+
+    <p>The groups interface is shown in the side
+    pane on the left of the screen. It can be toggled on or off by
+    pressing <tt>CTRL-SHIFT-G</tt> or by the groups button in the
+    toolbar. The interface has several buttons, but most functions
+    are accessed via a context ("right-click") menu. Drag and Drop
+    is also supported.</p>
+
+    <table cellspacing="0"
+           cellpadding="5"
+           border="0"
+           style="background-color: #C0FFC0"
+		   summary="Examples">
+        <tr>
+            <td>
+                <h2>Some quick examples</h2>
+
+                <p>You might want to...</p>
+
+                <h3>...just create a group and assign some entries
+                to it</h3>
+
+                <p>Ensure that the groups interface is
+                visible. Press the <b>New Group</b> button, enter a
+                name for the group, then press OK, leaving all
+                values at their defaults. Now select the entries to
+                be assigned to the group and use Drag and Drop to
+                the group, or the option <b>Add to group</b> in the
+                context menu. Finally select the group to see its
+                content (which should be the entries you just
+                assigned).</p>
+
+                <h3>...use the <tt>keywords</tt> field to group the
+                entries</h3>
+
+                <p>Ensure that the groups interface is
+                visible. Press the <b>New Group</b> button, enter a
+                name for the group, and select the option to
+                dynamically group entries by searching a field for
+                a keyword. Enter the keyword to search for, then
+                click OK. Finally select the group to see its
+                content (which should be all entries whose
+                <tt>keywords</tt> field contains the keyword you
+                specified).</p>
+
+                <h3>...use a free-form search expression to define
+                a group</h3>
+
+                <p>Ensure that the groups interface is
+                visible. Press the <b>New Group</b> button, enter a
+                name for the group, and select the option to
+                dynamically group entries by a free-form search
+                expression. Enter <tt>author=smith</tt> as a search
+                expression (replace <tt>smith</tt> with a name that
+                actually occurs in your database) and click
+                <b>OK</b>. Finally select the group to see its
+                content (which should be all entries whose
+                <tt>author</tt> field contains the name you
+                specified).</p>
+
+                <h3>...combine multiple groups</h3>
+
+                <p>Create two
+                different groups (e.g. as described above). Click
+                the <b>Settings</b> button and make sure that
+                <b>Union</b> is selected. Now select both groups.
+                You should see all entries contained in any of the
+                two groups. Click <b>Settings</b> again and select
+                <b>Intersection</b>. Now you should see only those
+                entries contained in both groups (which might be
+                none at all, or exactly the same entries as before
+                in case both groups contain the same entries).</p>
+
+                <h3>...identify overlapping groups</h3>
+
+                <p>JabRef allows you to easily identify groups that overlap
+                with the currently selected groups (i.e. that
+                contain at least one entry that is also contained
+                in the currently selected groups). Click
+                <b>Settings</b> and activate the option to
+                highlight overlapping groups. Then select a group
+                that overlaps with other groups. The other groups
+                should be highlighted.</p>
+            </td>
+        </tr>
+    </table>
+
+    <h2>Types of groups</h2>
+
+    <p>In JabRef there are four different types of groups:</p>
+
+    <ol>
+        <li>The group <b>All Entries</b>, which -- as the name
+        suggests -- contains all entries, is always present and
+        cannot be edited or removed.</li>
+
+        <li><b>Static groups</b> behave like directories on disk
+        and contain only those entries that you explicitly assign
+        to them.</li>
+
+        <li><b>Dynamic groups based on keyword search</b> contain
+        entries in which a certain BibTeX field (e.g.
+        <tt>keywords</tt>) contains a certain keyword (e.g.
+        <tt>electrical</tt>). This method does not require manual
+        assignment of entries, but uses information that is already
+        present in the database. If all entries in your database
+        have suitable keywords in their <tt>keywords</tt> field,
+        using this type of group might be the best choice.</li>
+
+        <li><b>Dynamic groups based on free-form search
+        expressions</b> contain entries that match a specified
+        search expression, using the same syntax as the
+        <a href="SearchHelp.html">search panel</a> on the side
+        pane. This <a href="SearchHelp.html#advanced">syntax</a>
+        supports logical operators (<tt>AND</tt>, <tt>OR</tt>,
+        <tt>NOT</tt>) and allows to specify one or more BibTeX
+        fields to search, facilitating more flexible group
+        definitions than a keyword search (e.g. <tt>author=smith
+        and title=electrical</tt>).</li>
+    </ol>Every group that you create is of one of the last three
+    types. The group editing dialog, which is invoked by
+    double-clicking on a group, shows a short description of the
+    selected/edited group in plain English.
+
+    <h2>Groups structure, creating and removing groups</h2>
+
+    <p>Just like directories, groups are structured like a tree, with the
+    group <b>All Entries</b> at the root. By right-clicking on a
+    group you can add a new group to the tree, either at the same
+    level as the selected group or as a subgroup of it. The <b>New
+    Group</b> button lets you create a new subgroup of the group
+    <b>All Entries</b>, regardless of the currently selected
+    group(s). The context menu also allows to remove groups and/or
+    subgroups, to sort subgroups alphabetically, or to move groups
+    to a different location in the tree. The latter can also be
+    done by Drag and Drop, with the restriction that Drag and Drop
+    does not support changing the order of a group's subgroups.</p>
+
+    <p>Undo and redo is supported for all edits.</p>
+
+    <h3>Static groups</h3>
+
+    <p>Static groups are populated only by
+    explicit manual assignment of entries. After creating a static
+    group you select the entries to be assigned to it, and use
+    either Drag and Drop or the main table's context menu to
+    perform the assignment. To remove entries from a static group,
+    select them and use the main table's context menu. There are no
+    options to be configured.</p>
+
+    <p>This method of grouping requires that all entries have a
+    unique BibTeX key. In case of missing or duplicate BibTeX keys,
+    the assignment of the affected entries cannot be correctly
+    restored in future sessions.</p>
+
+    <h3>Dynamic groups</h3>
+
+    <p>The content of a dynamic group is
+    defined by a logical condition. Only entries that meet this
+    condition are contained in the group. This method uses the
+    information stored in the database itself, and updates
+    dynamically whenever the database changes.</p>
+
+    <p>Two types of conditions can be used:</p>
+
+    <dl>
+        <dt><b>Searching a field for a keyword</b></dt>
+
+        <dd>This method groups entries in which a specified BibTeX
+        field (e.g. <tt>keywords</tt>) contains a specified search
+        term (e.g. <tt>electrical</tt>). Obviously, for this to
+        work, the grouping field must be present in every entry,
+        and its content must be accurate. The above example would
+        group all entries referring to something electrical. Using
+        the field <tt>author</tt> allows to group entries by a
+        certain author, etc. The search can either be done as a
+        plain-text or a regular expression search. In the former
+        case, JabRef allows to manually assign/remove entries
+        to/from the group by simply appending/removing the search
+        term to/from the content of the grouping field. This makes
+        sense only for the <tt>keywords</tt> field or for
+        self-defined fields, but obviously not for fields like
+        <tt>author</tt> or <tt>year</tt>.</dd>
+
+        <dt><b>Using a free-form search expression</b></dt>
+
+        <dd>This is similar to the above, but rather than search a
+        single field for a single search term, the
+        <a href="SearchHelp.html#advanced">search expression
+        syntax</a> can be used, which supports logical operators
+        (<tt>AND</tt>, <tt>OR</tt>, <tt>NOT</tt>) and allows to
+        search multiple BibTeX fields. For example, the search
+        expression <tt>keywords=regression and not
+        keywords=linear</tt> groups entries concerned with
+        non-linear regression.</dd>
+    </dl>In the groups view, dynamic groups are shown in
+    <i>italics</i> by default. This can be turned off in the
+    preferences (Options -> Preferences -> Groups, box "Show
+    dynamic groups in italics").
+
+    <h3>Hierarchical context</h3>
+
+    <p>By default, a group is
+    <b>independent</b> of its position in the groups tree: When
+    selected, only the group's contents are shown. However,
+    especially when using dynamic groups, it is often useful to
+    define a subgroup that <b>refines its supergroup</b>, i.e.,
+    when selected, entries contained in both groups are displayed.
+    For example, create a supergroup containing entries with the
+    keyword <tt>distribution</tt> and a subgroup containing entries
+    with the keyword <tt>gauss</tt> that refines this supergroup.
+    Selecting the subgroup now displays entries that match both
+    conditions, i.e. are concerned with Gaussian distributions. By
+    adding another refining subgroup for <tt>laplace</tt> to the
+    original supergroup, the grouping can easily be extended. In
+    the groups tree, refining groups have a special icon (this can
+    be turned off in the preferences).</p>
+
+    <p>The logical complement to a refining group is a group that
+    <b>includes its subgroups</b>, i.e. when selected, not only the
+    group's own entries, but also its subgroups' entries are shown.
+    In the groups tree, this type of group has a special icon (this
+    can be turned off in the preferences).</p>
+
+    <h2>Viewing a group's entries, combining multiple
+    groups</h2>
+
+    <p>Selecting a group shows the entries contained in
+    that group by highlighting them and, depending on the settings
+    (accessible by clicking the <b>Settings</b> button), moving
+    them to the top of the list and/or selecting them. These
+    options are identical to those available for the regular
+    search.</p>
+
+    <p>When multiple groups are selected, either the union or the
+    intersection of their content is shown, depending on the
+    current settings. This allows to quickly combine multiple
+    conditions, e.g. if you have a static group <tt>Extremely
+    Important</tt> to which you assign all extremely important
+    entries, you can view the extremely important entries in any
+    other group by selecting both groups (this requires to have
+    <b>Intersection</b> selected in the settings).</p>
+
+    <h2>Groups and searching</h2>
+
+    <p>When viewing the contents of the
+    selected group(s), a search can be performed within these
+    contents using the regular search facility.</p>
+
+    <h2>Highlighting overlapping groups</h2>
+
+    <p>The <b>Settings</b>
+    button offers an option to highlight overlapping groups. If
+    this is activated, upon selection of one or more groups, all
+    groups that contain at least one of the entries contained in
+    the currently selected group(s) are highlighted. This quickly
+    identifies overlap between the groups' contents. You might, for
+    example, create a group <tt>To Read</tt> that contains all
+    entries which you plan to read. Now, whenever you select any
+    group, the group <tt>To Read</tt> is highlighted if the
+    selected group contains entries that you plan to read.</p>
+
+	<h2>New entries assigned to selected groups</h2>
+   
+   <p>The <b>Settings</b> button offers also an option to
+   automatically assign new entries to selected groups. If this
+   is activated, upon selection of one or more groups, all the
+   new entries created will be assigned to the selected groups.
+   This work both for entries created from menu button or
+   entries pasted from clipboard. This option can also be
+   enabled/disabled from the menu "option > preferences > group".
+   </p>
+
+    <h2>Advanced features</h2>
+
+    <p>After mastering the grouping concepts
+    described above, the following advanced features might come in
+    handy.</p>
+
+    <h3>Automatically creating dynamic groups</h3>
+
+    <p>By clicking the
+    <b>Automatically create groups for database</b> button, you can
+    quickly create a set of groups appropriate for your database.
+    This feature will gather all words found in a specific field of
+    your choice, and create a group for each word. This is useful
+    for instance if your database contains suitable keywords for
+    all entries. By autogenerating groups based on the
+    <tt>keywords</tt> field, you should have a basic set of groups
+    at no cost.</p>
+
+    <p>You can also specify characters to ignore, for instance
+    commas used between keywords. These will be treated as
+    separators between words, and not part of them. This step is
+    important for combined keywords such as <tt>laplace
+    distribution</tt> to be recognized as a single semantic unit.
+    (You cannot use this option to remove complete words. Instead,
+    delete the unwanted groups manually after they were created
+    automatically.)</p>
+
+    <h3>Refreshing the groups view</h3>
+
+    <p>The <b>Refresh</b> button
+    updates the entry table to reflect the current groups
+    selection. This is usually done automatically, but in rare
+    occasions (e.g. after a group-related undo/redo) a manual
+    refresh is required.</p>
+
+    <h3>Mixing refining groups with including groups</h3>
+
+    <p>If a refining group is a subgroup of a group that includes its
+    subgroups -- the refining group's siblings --, these siblings
+    are ignored when the refining group is selected.</p>
+</body>
+</html>
diff --git a/src/help/HelpHelp.html b/src/help/HelpHelp.html
old mode 100755
new mode 100644
index a907074..2a001ca
--- a/src/help/HelpHelp.html
+++ b/src/help/HelpHelp.html
@@ -1,35 +1,35 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>The help window</h1>
-
-    <p><em>Opened by clicking the help button or pressing F1.</em></p>
-
-    <p>The help window is there to provide information about using
-    JabRef.</p>
-
-    <h2>Navigating the help files</h2>
-
-    <p>The help window is in fact a lightweight HTML browser, and the
-    help files are standard HTML files.</p>
-
-    <p>When opened, the help window will default to different files
-    depending on which program window it is called from. If this
-    file doesn't explain the aspect you are interested in, the
-    <em>Contents</em> button in the toolbar will take you to a list
-    of the available help files.</p>
-
-    <p>In addition the toolbar contains navigation buttons for
-    showing the next or previous file. These are similar to the
-    <em>Back</em> and <em>Forward</em> buttons of a standard web
-    browser. The keyboard shortcuts for navigation are the arrow
-    key left for <em>Back</em> and the arrow key right for
-    <em>Forward</em>.</p>
-
-    <p>The help window is closed by pressing ESCAPE.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>The help window</h1>
+
+    <p><em>Opened by clicking the help button or pressing F1.</em></p>
+
+    <p>The help window is there to provide information about using
+    JabRef.</p>
+
+    <h2>Navigating the help files</h2>
+
+    <p>The help window is in fact a lightweight HTML browser, and the
+    help files are standard HTML files.</p>
+
+    <p>When opened, the help window will default to different files
+    depending on which program window it is called from. If this
+    file doesn't explain the aspect you are interested in, the
+    <em>Contents</em> button in the toolbar will take you to a list
+    of the available help files.</p>
+
+    <p>In addition the toolbar contains navigation buttons for
+    showing the next or previous file. These are similar to the
+    <em>Back</em> and <em>Forward</em> buttons of a standard web
+    browser. The keyboard shortcuts for navigation are the arrow
+    key left for <em>Back</em> and the arrow key right for
+    <em>Forward</em>.</p>
+
+    <p>The help window is closed by pressing ESCAPE.</p>
+</body>
+</html>
diff --git a/src/help/IEEEXploreHelp.html b/src/help/IEEEXploreHelp.html
index 8c51500..e6d32a8 100644
--- a/src/help/IEEEXploreHelp.html
+++ b/src/help/IEEEXploreHelp.html
@@ -1,27 +1,27 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Search IEEEXplore</h1>
-
-    <p>To use this feature, choose <b>Search -> Web search</b>, and the search
-    interface will appear in the side pane. Select <b>IEEEXplore</b> in the dropdown menu.</p>
-
-    <p>IEEEXplore delivers access to technical literature in electrical engineering, computer
-    science, and electronics. To start a search, enter the words of your query, and press
-    <b>Enter</b> or the <b>Fetch</b> button.</p>
-
-    <p>The search is done in guest mode, which means that a maximum
-    of 100 results will be returned.</p>
-
-    <p>You may opt to download the abstracts along with the cite
-    information for each entry, by checking the <b>Include
-    abstracts</b> checkbox. This will NOT cause more network queries.</p>
-
-    <p>The option to download BibTeX citations directly from IEEEXplore is not working yet.</p>
-
-    <p>Please email Oscar Gustafsson <b>ogib73 at gmail.com</b> or Aaron Chen <b>nextAaron at gmail.com</b> for any suggestions.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Search IEEEXplore</h1>
+
+    <p>To use this feature, choose <b>Search -> Web search</b>, and the search
+    interface will appear in the side pane. Select <b>IEEEXplore</b> in the dropdown menu.</p>
+
+    <p>IEEEXplore delivers access to technical literature in electrical engineering, computer
+    science, and electronics. To start a search, enter the words of your query, and press
+    <b>Enter</b> or the <b>Fetch</b> button.</p>
+
+    <p>The search is done in guest mode, which means that a maximum
+    of 100 results will be returned.</p>
+
+    <p>You may opt to download the abstracts along with the cite
+    information for each entry, by checking the <b>Include
+    abstracts</b> checkbox. This will NOT cause more network queries.</p>
+
+    <p>The option to download BibTeX citations directly from IEEEXplore is not working yet.</p>
+
+    <p>Please email Oscar Gustafsson <b>ogib73 at gmail.com</b> or Aaron Chen <b>nextAaron at gmail.com</b> for any suggestions.</p>
+</body>
+</html>
diff --git a/src/help/ISBNtoBibTeXHelp.html b/src/help/ISBNtoBibTeXHelp.html
index 01daaf3..1273394 100644
--- a/src/help/ISBNtoBibTeXHelp.html
+++ b/src/help/ISBNtoBibTeXHelp.html
@@ -1,20 +1,20 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Fetching entries using the ISBN number</h1>
-
-    <p>To use this feature, choose <b>Search -> Web search</b>, and the
-    search interface will appear in the side pane. Select <b>ISBN to BibTeX</b> in the dropdown menu.</p>
-
-    <p>This fetcher uses <a href="http://manas.tungare.name/software/isbn-to-bibtex/">Manas Tungare's ISBN to BibTeX Converter</a>
-    to convert an ISBN to a BibTeX entry.</p>
-
-    <p>Enter the ISBN number in the search field and press <b>Enter</b> or the <b>Fetch</b>
-    button. The entry will be fetched and added to your currently active
-    database. In case an error occurs, it is shown in a popup.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Fetching entries using the ISBN number</h1>
+
+    <p>To use this feature, choose <b>Search -> Web search</b>, and the
+    search interface will appear in the side pane. Select <b>ISBN to BibTeX</b> in the dropdown menu.</p>
+
+    <p>This fetcher uses <a href="http://manas.tungare.name/software/isbn-to-bibtex/">Manas Tungare's ISBN to BibTeX Converter</a>
+    to convert an ISBN to a BibTeX entry.</p>
+
+    <p>Enter the ISBN number in the search field and press <b>Enter</b> or the <b>Fetch</b>
+    button. The entry will be fetched and added to your currently active
+    database. In case an error occurs, it is shown in a popup.</p>
+
+</body>
+</html>
diff --git a/src/help/ImportInspectionDialog.html b/src/help/ImportInspectionDialog.html
index 44fe93e..ce430d4 100644
--- a/src/help/ImportInspectionDialog.html
+++ b/src/help/ImportInspectionDialog.html
@@ -1,24 +1,24 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Import inspection window</h1>
-
-    <p>When you import new entries
-    from a supported reference format, or fetch entries directly
-    from the Internet, they are first shown in this window for
-    inspection. At this point none of the entries have been added
-    to the database you already have open (if any).</p>
-
-    <p>The inspection window allows you to discard entries you
-    don't want to keep, and to perform some simple operations like
-    generating BibTeX keys for the entries, or adding them to
-    <a href="GroupsHelp.html">groups</a>. If you are importing into
-    an existing database, it is often easier to perform these
-    operations before they are mixed in between the entries of the
-    existing database.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Import inspection window</h1>
+
+    <p>When you import new entries
+    from a supported reference format, or fetch entries directly
+    from the Internet, they are first shown in this window for
+    inspection. At this point none of the entries have been added
+    to the database you already have open (if any).</p>
+
+    <p>The inspection window allows you to discard entries you
+    don't want to keep, and to perform some simple operations like
+    generating BibTeX keys for the entries, or adding them to
+    <a href="GroupsHelp.html">groups</a>. If you are importing into
+    an existing database, it is often easier to perform these
+    operations before they are mixed in between the entries of the
+    existing database.</p>
+</body>
+</html>
diff --git a/src/help/JabRefHelp.html b/src/help/JabRefHelp.html
old mode 100755
new mode 100644
index 90b867c..718b8b0
--- a/src/help/JabRefHelp.html
+++ b/src/help/JabRefHelp.html
@@ -1,34 +1,34 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>JabRef</h1>
-
-    <p><strong>Note:</strong> The <em>bibtex</em> program is
-    mentioned many times in these help files. <em>Bibtex</em> is a
-    utility for the generation of bibliographic references in LaTeX
-    documents, created by Oren Patashnik. The same database format
-    is also used with CiteMaker, a utility for bibliography
-    generation in Adobe FrameMaker.</p>
-
-    <p>JabRef is is a program for working with <em>bibtex</em>
-    databases. The program uses no internal file format, which
-    means you normally load and save your databases directly in the
-    <em>bibtex</em> .bib format. However, you can also import
-    bibliography databases in a number of other formats into
-    JabRef.</p>
-
-    <p>JabRef provides sorting and searching functionality for
-    getting the overview of your databases' contents. You can
-    easily add new database entries without having to remember what
-    information is required, and <em>bibtex</em> keys can be
-    autogenerated. JabRef will be most useful for those using
-    <em>bibtex</em> or CiteMaker, but may also be of use to those
-    using other referencing systems or simply wanting to organize
-    their literature sources.</p>
-
-    <p><a href="BaseFrameHelp.html">The JabRef main window</a></p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>JabRef</h1>
+
+    <p><strong>Note:</strong> The <em>bibtex</em> program is
+    mentioned many times in these help files. <em>Bibtex</em> is a
+    utility for the generation of bibliographic references in LaTeX
+    documents, created by Oren Patashnik. The same database format
+    is also used with CiteMaker, a utility for bibliography
+    generation in Adobe FrameMaker.</p>
+
+    <p>JabRef is is a program for working with <em>bibtex</em>
+    databases. The program uses no internal file format, which
+    means you normally load and save your databases directly in the
+    <em>bibtex</em> .bib format. However, you can also import
+    bibliography databases in a number of other formats into
+    JabRef.</p>
+
+    <p>JabRef provides sorting and searching functionality for
+    getting the overview of your databases' contents. You can
+    easily add new database entries without having to remember what
+    information is required, and <em>bibtex</em> keys can be
+    autogenerated. JabRef will be most useful for those using
+    <em>bibtex</em> or CiteMaker, but may also be of use to those
+    using other referencing systems or simply wanting to organize
+    their literature sources.</p>
+
+    <p><a href="BaseFrameHelp.html">The JabRef main window</a></p>
+</body>
+</html>
diff --git a/src/help/JournalAbbreviations.html b/src/help/JournalAbbreviations.html
index 06646aa..8838ef4 100644
--- a/src/help/JournalAbbreviations.html
+++ b/src/help/JournalAbbreviations.html
@@ -1,105 +1,105 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Journal abbreviations</h1>
-
-    <p>This feature can be configured
-    under <b>Options -> Manage journal abbreviations</b>.</p>
-
-    <p>JabRef can automatically toggle journal names between
-    abbreviated and unabbreviated form, as long as the names are
-    contained in one of your journal lists. JabRef includes a fairly
-    extensive list of journal abbreviations, but it it still likely
-    to be incomplete for the purposes of many users. You can add
-    abbreviations from any number of lists, all realized as external
-    text files on your hard disk.</p>
-
-    <h2>Using the feature</h2>
-
-    <p>Journal name conversion can be accessed either from within
-    the entry editor, or from the <b>Tools</b> menu. In the entry
-    editor you will find a button labelled <i>Toggle
-    abbreviation</i> by the <i>journal</i> field. Clicking this
-    button will cause the current journal name to be switched to
-    the next of three modes:</p>
-
-    <ul>
-        <li>Full name, e.g. "Aquacultural Engineering"</li>
-
-        <li>ISO abbreviation, e.g. "Aquacult. Eng."</li>
-
-        <li>MEDLINE abbreviation, e.g. "Aquacult Eng"</li>
-    </ul>If the current journal name is not found in your journal
-    lists, the field will not be modified.
-
-    <p>To convert the journal names of many entries in bulk, you
-    can select any number of entries, and choose <b>Tools ->
-    Abbreviate journal names (ISO)</b>, <b>Tools -> Abbreviate
-    journal names (MEDLINE)</b> or <b>Tools -> Unabbreviate
-    journal names</b>. These three actions will abbreviate and
-    unabbreviate the journal names of all selected entries for
-    which the journal name could be found in your journal
-    lists.</p>
-
-    <h2>Setting up your journal lists</h2>
-
-    <p>In addition to the list included in JabRef by default, you can
-    have several lists in the form of external text files linked from JabRef.
-    The primary list can be edited from within JabRef.</p>
-
-    <h3>Your personal journal abbreviations list</h3>
-
-    <p>Your personal
-    journal list is managed in the upper part of the <b>Manage
-    journal abbreviations</b> window. To start building your
-    personal journal abbreviations list, choose <i>New file</i>,
-    and enter a filename manually or using the <i>Browse</i>
-    button. If you already have a file that you want to use as a
-    starting point, choose <i>Existing file</i>, and use the
-    <i>Browse</i> button to choose the file. The table will update
-    to show the contents of the list you have selected.</p>
-
-    <p>The table and the tool buttons to the right allow you to
-    add, remove and edit journal entries. For each entry you must
-    provide the full journal name, and the ISO abbreviation (e.g.
-    "Aquacultural Engineering" and "Aquacult. Eng."). To edit an
-    entry, double-click its row in the table.</p>
-
-    <p>Once you click <i>OK</i>, if you have selected a file, and
-    the table contains at least one entry, the table contents will
-    be stored to the selected file, and JabRef's list of journals
-    will be updated.</p>
-
-    <h3>External journal lists</h3>
-
-    <p>In addition to your personal
-    list, you can link to a number of external lists. These links
-    can be set up in the lower part of the <b>Manage journal
-    abbreviations</b> window. External lists are similar to the
-    personal list - the only difference is that JabRef doesn't
-    provide an interface for editing the external lists.</p>
-
-    <p>To add a new external list, if necessary, click the <b>+</b>
-    button to add another slot to the interface. Then use either
-    the <i>Browse</i> or <i>Download</i> button next to one of the
-    slots in the lower part of the window.</p>
-
-    <ul>
-        <li>The <i>Browse</i> button allows you to select an
-        existing file on your computer.</li>
-
-        <li>The <i>Download</i> button allows you to download a
-        list over the internet by entering and URL, store it to a
-        local file on your computer, and link to it as a journal
-        list from JabRef. The URL will default to the address of a
-        journal list provided from the JabRef web page. This list
-        is incomplete, but may be improved in the future.</li>
-    </ul>Any entry in your personal journal list will override an
-    entry with the same full journal name in one of the external
-    lists. Similarly, the external lists are given precedence in
-    the order they are listed.
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Journal abbreviations</h1>
+
+    <p>This feature can be configured
+    under <b>Options -> Manage journal abbreviations</b>.</p>
+
+    <p>JabRef can automatically toggle journal names between
+    abbreviated and unabbreviated form, as long as the names are
+    contained in one of your journal lists. JabRef includes a fairly
+    extensive list of journal abbreviations, but it it still likely
+    to be incomplete for the purposes of many users. You can add
+    abbreviations from any number of lists, all realized as external
+    text files on your hard disk.</p>
+
+    <h2>Using the feature</h2>
+
+    <p>Journal name conversion can be accessed either from within
+    the entry editor, or from the <b>Tools</b> menu. In the entry
+    editor you will find a button labelled <i>Toggle
+    abbreviation</i> by the <i>journal</i> field. Clicking this
+    button will cause the current journal name to be switched to
+    the next of three modes:</p>
+
+    <ul>
+        <li>Full name, e.g. "Aquacultural Engineering"</li>
+
+        <li>ISO abbreviation, e.g. "Aquacult. Eng."</li>
+
+        <li>MEDLINE abbreviation, e.g. "Aquacult Eng"</li>
+    </ul>If the current journal name is not found in your journal
+    lists, the field will not be modified.
+
+    <p>To convert the journal names of many entries in bulk, you
+    can select any number of entries, and choose <b>Tools ->
+    Abbreviate journal names (ISO)</b>, <b>Tools -> Abbreviate
+    journal names (MEDLINE)</b> or <b>Tools -> Unabbreviate
+    journal names</b>. These three actions will abbreviate and
+    unabbreviate the journal names of all selected entries for
+    which the journal name could be found in your journal
+    lists.</p>
+
+    <h2>Setting up your journal lists</h2>
+
+    <p>In addition to the list included in JabRef by default, you can
+    have several lists in the form of external text files linked from JabRef.
+    The primary list can be edited from within JabRef.</p>
+
+    <h3>Your personal journal abbreviations list</h3>
+
+    <p>Your personal
+    journal list is managed in the upper part of the <b>Manage
+    journal abbreviations</b> window. To start building your
+    personal journal abbreviations list, choose <i>New file</i>,
+    and enter a filename manually or using the <i>Browse</i>
+    button. If you already have a file that you want to use as a
+    starting point, choose <i>Existing file</i>, and use the
+    <i>Browse</i> button to choose the file. The table will update
+    to show the contents of the list you have selected.</p>
+
+    <p>The table and the tool buttons to the right allow you to
+    add, remove and edit journal entries. For each entry you must
+    provide the full journal name, and the ISO abbreviation (e.g.
+    "Aquacultural Engineering" and "Aquacult. Eng."). To edit an
+    entry, double-click its row in the table.</p>
+
+    <p>Once you click <i>OK</i>, if you have selected a file, and
+    the table contains at least one entry, the table contents will
+    be stored to the selected file, and JabRef's list of journals
+    will be updated.</p>
+
+    <h3>External journal lists</h3>
+
+    <p>In addition to your personal
+    list, you can link to a number of external lists. These links
+    can be set up in the lower part of the <b>Manage journal
+    abbreviations</b> window. External lists are similar to the
+    personal list - the only difference is that JabRef doesn't
+    provide an interface for editing the external lists.</p>
+
+    <p>To add a new external list, if necessary, click the <b>+</b>
+    button to add another slot to the interface. Then use either
+    the <i>Browse</i> or <i>Download</i> button next to one of the
+    slots in the lower part of the window.</p>
+
+    <ul>
+        <li>The <i>Browse</i> button allows you to select an
+        existing file on your computer.</li>
+
+        <li>The <i>Download</i> button allows you to download a
+        list over the internet by entering and URL, store it to a
+        local file on your computer, and link to it as a journal
+        list from JabRef. The URL will default to the address of a
+        journal list provided from the JabRef web page. This list
+        is incomplete, but may be improved in the future.</li>
+    </ul>Any entry in your personal journal list will override an
+    entry with the same full journal name in one of the external
+    lists. Similarly, the external lists are given precedence in
+    the order they are listed.
+</body>
+</html>
diff --git a/src/help/LabelPatterns.html b/src/help/LabelPatterns.html
index 1f3ec47..c684594 100644
--- a/src/help/LabelPatterns.html
+++ b/src/help/LabelPatterns.html
@@ -1,209 +1,209 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Customizing the BibTeX key generator</h1>
-
-    <p>In the 'Key pattern' tab in Preferences, one can set the fields
-    used in auto generation of BibTex labels. The pattern can be
-    set for each of the standard entry types.</p>
-
-    <h2>Key patterns</h2>
-
-    <p>The pattern can contain any text you wish,
-    in addition to field markers that indicate that a specific
-    field of the entry should be inserted at that position of the
-    key. A field marker generally consists of the field name
-    enclosed in square braces, e.g. <b>[volume]</b>. If the field
-    is undefined in an entry at the time of key generation, no text
-    will be inserted by the field marker.</p>
-
-    <p>Several special field markers are offered, which extract
-    only a specific part of a field. These are listed below. Feel
-    free to suggest new special field markers.</p>
-
-    <p>Special field markers:</p>
-
-    <ul>
-        <li><b>[<code>auth</code>]</b>: The last name of the first
-        author<br /></li>
-
-        <li><b>[<code>authors</code>]</b>: The last name of all
-        authors<br /></li>
-
-        <li><b>[<code>authorLast</code>]</b>: The last name of the last
-        author<br /></li>
-
-        <li><b>[<code>authorsN</code>]</b>: The last name of up to
-        N authors. If there are more authors, "EtAl" is
-        appended.<br /></li>
-        
-        <li><b>[<code>authorsAlpha</code>]</b>: Corresponds to the BibTeX
-        style "alpha". One author: First three letters of the last name.
-        Two to four authors: First letters of last names concatenated.
-        More than four authors: First letters of last names of first three
-        authors concatenated. "+" at the end. <br /></li>  
-
-        <li><b>[<code>authIniN</code>]</b>: The beginning of each
-        author's last name, using no more than N
-        characters.<br /></li>
-
-        <li><b>[<code>authorIni</code>]</b>: The first 5 characters
-        of the first author's last name, and the last name initials
-        of the remaining authors.<br /></li>
-
-        <li><b>[<code>authN</code>]</b>: The first N characters of
-        the first author's last name<br /></li>
-
-        <li><b>[<code>authN_M</code>]</b>: The first N characters
-        of the Mth author's last name<br /></li>
-
-        <li><b>[<code>auth.auth.ea</code>]</b>: The last name of
-        the first two authors, and ".ea" if there are more than
-        two.<br /></li>
-
-        <li><b>[<code>auth.etal</code>]</b>: The last name of the
-        first author, and the last name of the second author if
-        there are two authors or ".etal" if there are more than
-        two.<br /></li>
-
-        <li><b>[<code>authshort</code>]</b>: The last name if one
-        author is given; the first character of up to three
-        authors' last names if more than one author is given. A
-        plus character is added, if there are more than three
-        authors.<br /></li>
-    </ul><b>Note:</b> If there is no author (as in the case of an
-    edited book), then all of the above
-    <b><code>[auth...]</code></b> markers will use the editor(s)
-    (if any) as a fallback. Thus, the editor(s) of a book with no
-    author will be treated as the author(s) for label-generation
-    purposes. If you do not want this behaviour, i.e. you require a
-    marker which expands to nothing if there is no author, use
-    <b><code>pureauth</code></b> instead of
-    <b><code>auth</code></b> in the above codes. For example,
-    <b><code>[pureauth]</code></b>, or
-    <b><code>[pureauthors3]</code></b>.
-
-    <ul>
-        <li><b>[<code>edtr</code>]</b>: The last name of the first
-        editor<br /></li>
-
-        <li><b>[<code>edtrIniN</code>]</b>: The beginning of each
-        editor's last name, using no more than N
-        characters<br /></li>
-
-        <li><b>[<code>editors</code>]</b>: The last name of all
-        editors<br /></li>
-
-        <li><b>[<code>editorLast</code>]</b>: The last name of the last
-        editor<br /></li>
-
-        <li><b>[<code>editorIni</code>]</b>: The first 5 characters
-        of the first editor's last name, and the last name initials
-        of the remaining editors.<br /></li>
-
-        <li><b>[<code>edtrN</code>]</b>: The first N characters of
-        the first editor's last name<br /></li>
-
-        <li><b>[<code>edtrN_M</code>]</b>: The first N characters
-        of the Mth editor's last name<br /></li>
-
-        <li><b>[<code>edtr.edtr.ea</code>]</b>: The last name of
-        the first two editors, and ".ea" if there are more than
-        two.<br /></li>
-
-        <li><b>[<code>edtrshort</code>]</b>: The last name if one
-        editor is given; the first character of up to three
-        editors' last names if more than one editor is given. A
-        plus character is added, if there are more than three
-        editors.<br /></li>
-
-        <li><b>[<code>firstpage</code>]</b>: The number of the
-        first page of the publication (Caution: this will return 
-        the lowest number found in the pages field, since bibtex 
-        allows <code>7,41,73--97</code> or <code>43+</code>.)<br /></li>
-
-        <li><b>[<code>keywordN</code>]</b>: Keyword number N from
-        the "keywords" field, assuming keywords are separated by
-        commas or semicolons.<br /></li>
-
-        <li><b>[<code>lastpage</code>]</b>: The number of the last
-        page of the publication (See the remark on 
-        <code>firstpage</code>)<br /></li>
-
-        <li><b>[<code>shorttitle</code>]</b>: The first 3 words of
-        the title<br /></li>
-
-        <li><b>[<code>shortyear</code>]</b>: The last 2 digits of
-        the publication year<br /></li>
-
-        <li><b>[<code>veryshorttitle</code>]</b>: The first word of
-        the title, discounting 'the', 'a', 'an'.<br /></li>
-    </ul>
-
-    <p>A field name (or one of the above pseudo-field names) may
-    optionally be followed by one or more modifiers. Modifiers are
-    applied in the order they are specified.</p>
-
-    <ul>
-        <li><b>:abbr</b>: Abbreviates the text produced by the
-        field name or spcial field marker. Only the first character
-        and subsequent characters following white space will be
-        included. For example, <b>[journal:abbr]</b> would from the
-        journal name "Journal of Fish Biology" produce
-        "JoFB".<br /></li>
-
-        <li><b>:lower</b>: Forces the text inserted by the field
-        marker to be in lowercase. For example, <b>[auth:lower]</b>
-        expands the last name of the first author in
-        lowercase.<br /></li>
-
-        <li><b>:upper</b>: Forces the text inserted by the field
-        marker to be in uppercase. For example, <b>[auth:upper]</b>
-        expands the last name of the first author in
-        uppercase.<br /></li>
-
-        <li><b>:(x)</b>: Replace x by any string. The string between
-        the parentheses will be inserted if the field marker preceding this
-        modifier resolves to an empty value. For instance, the marker
-        <b>[volume:(unknown)]</b> will return the entry's volume if set, and the
-        string <b>unknown</b> if the entry's <code>volume</code> field is not set.
-        </li>
-    </ul>
-
-    <p>If you haven't defined a key pattern for a certain entry
-    type, the <b>Default key pattern</b> will be used. You can
-    change the default pattern - its setting is above the list of
-    entry types in the <b>Key pattern</b> section of the
-    <b>Preferences</b> dialog.</p>
-
-    <p>The default key pattern is [auth][year], and this could
-    produce keys like e.g. <code>Yared1998</code> If the key is not
-    unique in the current database, it is made unique by adding one
-    of the letters a-z until a unique key is found. Thus, the
-    labels might look like:</p>
-
-    <p style="margin-left: 28pt">
-        <code>Yared1998</code><br />
-        <code>Yared1998a</code><br />
-        <code>Yared1998b</code>
-    </p>
-
-    <h2>Regular expression replace</h2>
-
-    <p>After the key pattern has
-    been applied to produce a key, you can choose to have the key
-    generator search for occurrences of a specific regular
-    expression, and replace it with a string. The regular
-    expression and replacement string are entered in the text
-    fields below the list of key patterns. If the replacement
-    string is empty, matches of the regular expression will simply
-    be removed from the generated key. For instance,
-    <code>\p{Punct}</code> or <code>[:/%]</code> can be replaced
-    by nothing to remove unwanted characters from the key.
-    This may be useful when naming PDFs according to BibTeX keys.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Customizing the BibTeX key generator</h1>
+
+    <p>In the 'Key pattern' tab in Preferences, one can set the fields
+    used in auto generation of BibTex labels. The pattern can be
+    set for each of the standard entry types.</p>
+
+    <h2>Key patterns</h2>
+
+    <p>The pattern can contain any text you wish,
+    in addition to field markers that indicate that a specific
+    field of the entry should be inserted at that position of the
+    key. A field marker generally consists of the field name
+    enclosed in square braces, e.g. <b>[volume]</b>. If the field
+    is undefined in an entry at the time of key generation, no text
+    will be inserted by the field marker.</p>
+
+    <p>Several special field markers are offered, which extract
+    only a specific part of a field. These are listed below. Feel
+    free to suggest new special field markers.</p>
+
+    <p>Special field markers:</p>
+
+    <ul>
+        <li><b>[<code>auth</code>]</b>: The last name of the first
+        author<br /></li>
+
+        <li><b>[<code>authors</code>]</b>: The last name of all
+        authors<br /></li>
+
+        <li><b>[<code>authorLast</code>]</b>: The last name of the last
+        author<br /></li>
+
+        <li><b>[<code>authorsN</code>]</b>: The last name of up to
+        N authors. If there are more authors, "EtAl" is
+        appended.<br /></li>
+        
+        <li><b>[<code>authorsAlpha</code>]</b>: Corresponds to the BibTeX
+        style "alpha". One author: First three letters of the last name.
+        Two to four authors: First letters of last names concatenated.
+        More than four authors: First letters of last names of first three
+        authors concatenated. "+" at the end. <br /></li>  
+
+        <li><b>[<code>authIniN</code>]</b>: The beginning of each
+        author's last name, using no more than N
+        characters.<br /></li>
+
+        <li><b>[<code>authorIni</code>]</b>: The first 5 characters
+        of the first author's last name, and the last name initials
+        of the remaining authors.<br /></li>
+
+        <li><b>[<code>authN</code>]</b>: The first N characters of
+        the first author's last name<br /></li>
+
+        <li><b>[<code>authN_M</code>]</b>: The first N characters
+        of the Mth author's last name<br /></li>
+
+        <li><b>[<code>auth.auth.ea</code>]</b>: The last name of
+        the first two authors, and ".ea" if there are more than
+        two.<br /></li>
+
+        <li><b>[<code>auth.etal</code>]</b>: The last name of the
+        first author, and the last name of the second author if
+        there are two authors or ".etal" if there are more than
+        two.<br /></li>
+
+        <li><b>[<code>authshort</code>]</b>: The last name if one
+        author is given; the first character of up to three
+        authors' last names if more than one author is given. A
+        plus character is added, if there are more than three
+        authors.<br /></li>
+    </ul><b>Note:</b> If there is no author (as in the case of an
+    edited book), then all of the above
+    <b><code>[auth...]</code></b> markers will use the editor(s)
+    (if any) as a fallback. Thus, the editor(s) of a book with no
+    author will be treated as the author(s) for label-generation
+    purposes. If you do not want this behaviour, i.e. you require a
+    marker which expands to nothing if there is no author, use
+    <b><code>pureauth</code></b> instead of
+    <b><code>auth</code></b> in the above codes. For example,
+    <b><code>[pureauth]</code></b>, or
+    <b><code>[pureauthors3]</code></b>.
+
+    <ul>
+        <li><b>[<code>edtr</code>]</b>: The last name of the first
+        editor<br /></li>
+
+        <li><b>[<code>edtrIniN</code>]</b>: The beginning of each
+        editor's last name, using no more than N
+        characters<br /></li>
+
+        <li><b>[<code>editors</code>]</b>: The last name of all
+        editors<br /></li>
+
+        <li><b>[<code>editorLast</code>]</b>: The last name of the last
+        editor<br /></li>
+
+        <li><b>[<code>editorIni</code>]</b>: The first 5 characters
+        of the first editor's last name, and the last name initials
+        of the remaining editors.<br /></li>
+
+        <li><b>[<code>edtrN</code>]</b>: The first N characters of
+        the first editor's last name<br /></li>
+
+        <li><b>[<code>edtrN_M</code>]</b>: The first N characters
+        of the Mth editor's last name<br /></li>
+
+        <li><b>[<code>edtr.edtr.ea</code>]</b>: The last name of
+        the first two editors, and ".ea" if there are more than
+        two.<br /></li>
+
+        <li><b>[<code>edtrshort</code>]</b>: The last name if one
+        editor is given; the first character of up to three
+        editors' last names if more than one editor is given. A
+        plus character is added, if there are more than three
+        editors.<br /></li>
+
+        <li><b>[<code>firstpage</code>]</b>: The number of the
+        first page of the publication (Caution: this will return 
+        the lowest number found in the pages field, since bibtex 
+        allows <code>7,41,73--97</code> or <code>43+</code>.)<br /></li>
+
+        <li><b>[<code>keywordN</code>]</b>: Keyword number N from
+        the "keywords" field, assuming keywords are separated by
+        commas or semicolons.<br /></li>
+
+        <li><b>[<code>lastpage</code>]</b>: The number of the last
+        page of the publication (See the remark on 
+        <code>firstpage</code>)<br /></li>
+
+        <li><b>[<code>shorttitle</code>]</b>: The first 3 words of
+        the title<br /></li>
+
+        <li><b>[<code>shortyear</code>]</b>: The last 2 digits of
+        the publication year<br /></li>
+
+        <li><b>[<code>veryshorttitle</code>]</b>: The first word of
+        the title, discounting 'the', 'a', 'an'.<br /></li>
+    </ul>
+
+    <p>A field name (or one of the above pseudo-field names) may
+    optionally be followed by one or more modifiers. Modifiers are
+    applied in the order they are specified.</p>
+
+    <ul>
+        <li><b>:abbr</b>: Abbreviates the text produced by the
+        field name or spcial field marker. Only the first character
+        and subsequent characters following white space will be
+        included. For example, <b>[journal:abbr]</b> would from the
+        journal name "Journal of Fish Biology" produce
+        "JoFB".<br /></li>
+
+        <li><b>:lower</b>: Forces the text inserted by the field
+        marker to be in lowercase. For example, <b>[auth:lower]</b>
+        expands the last name of the first author in
+        lowercase.<br /></li>
+
+        <li><b>:upper</b>: Forces the text inserted by the field
+        marker to be in uppercase. For example, <b>[auth:upper]</b>
+        expands the last name of the first author in
+        uppercase.<br /></li>
+
+        <li><b>:(x)</b>: Replace x by any string. The string between
+        the parentheses will be inserted if the field marker preceding this
+        modifier resolves to an empty value. For instance, the marker
+        <b>[volume:(unknown)]</b> will return the entry's volume if set, and the
+        string <b>unknown</b> if the entry's <code>volume</code> field is not set.
+        </li>
+    </ul>
+
+    <p>If you haven't defined a key pattern for a certain entry
+    type, the <b>Default key pattern</b> will be used. You can
+    change the default pattern - its setting is above the list of
+    entry types in the <b>Key pattern</b> section of the
+    <b>Preferences</b> dialog.</p>
+
+    <p>The default key pattern is [auth][year], and this could
+    produce keys like e.g. <code>Yared1998</code> If the key is not
+    unique in the current database, it is made unique by adding one
+    of the letters a-z until a unique key is found. Thus, the
+    labels might look like:</p>
+
+    <p style="margin-left: 28pt">
+        <code>Yared1998</code><br />
+        <code>Yared1998a</code><br />
+        <code>Yared1998b</code>
+    </p>
+
+    <h2>Regular expression replace</h2>
+
+    <p>After the key pattern has
+    been applied to produce a key, you can choose to have the key
+    generator search for occurrences of a specific regular
+    expression, and replace it with a string. The regular
+    expression and replacement string are entered in the text
+    fields below the list of key patterns. If the replacement
+    string is empty, matches of the regular expression will simply
+    be removed from the generated key. For instance,
+    <code>\p{Punct}</code> or <code>[:/%]</code> can be replaced
+    by nothing to remove unwanted characters from the key.
+    This may be useful when naming PDFs according to BibTeX keys.</p>
+</body>
+</html>
diff --git a/src/help/License.html b/src/help/License.html
index ce67dad..ef11208 100644
--- a/src/help/License.html
+++ b/src/help/License.html
@@ -1,494 +1,494 @@
-<HTML>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">
-<H1>GNU General Public License</H1>
-
-<H2>Table of Contents</H2>
-<UL>
-
-  <LI><A NAME="TOC1" HREF="License.html#SEC1">GNU GENERAL PUBLIC LICENSE</A>
-<UL>
-<LI><A NAME="TOC2" HREF="License.html#SEC2">Preamble</A>
-<LI><A NAME="TOC3" HREF="License.html#SEC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A>
-<LI><A NAME="TOC4" HREF="License.html#SEC4">How to Apply These Terms to Your New Programs</A>
-
-</UL>
-</UL>
-
-<P>
-
-<HR>
-
-<P>
-
-
-
-<H2><A NAME="SEC1" HREF="License#TOC1">GNU GENERAL PUBLIC LICENSE</A></H2>
-<P>
-Version 2, June 1991
-
-</P>
-
-<PRE>
-Copyright (C) 1989, 1991 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.
-</PRE>
-
-
-
-<H2><A NAME="SEC2" HREF="License.html#TOC2">Preamble</A></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
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-</P>
-<P>
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-</P>
-<P>
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-</P>
-<P>
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-</P>
-<P>
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-</P>
-<P>
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-</P>
-<P>
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-</P>
-<P>
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-</P>
-
-
-<H2><A NAME="SEC3" HREF="License.html#TOC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A></H2>
-
-
-<P>
-
-<STRONG>0.</STRONG>
- This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-<P>
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-<P>
-
-<STRONG>1.</STRONG>
- You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-<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>
-
-<STRONG>2.</STRONG>
- You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-<P>
-
-<UL>
-
-<LI><STRONG>a)</STRONG>
-     You must cause the modified files to carry prominent notices
-     stating that you changed the files and the date of any change.
-
-<P>
-<LI><STRONG>b)</STRONG>
-     You must cause any work that you distribute or publish, that in
-     whole or in part contains or is derived from the Program or any
-     part thereof, to be licensed as a whole at no charge to all third
-     parties under the terms of this License.
-
-<P>
-<LI><STRONG>c)</STRONG>
-     If the modified program normally reads commands interactively
-     when run, you must cause it, when started running for such
-     interactive use in the most ordinary way, to print or display an
-     announcement including an appropriate copyright notice and a
-     notice that there is no warranty (or else, saying that you provide
-     a warranty) and that users may redistribute the program under
-     these conditions, and telling the user how to view a copy of this
-     License.  (Exception: if the Program itself is interactive but
-     does not normally print such an announcement, your work based on
-     the Program is not required to print an announcement.)
-</UL>
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-<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 Program.
-<P>
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-<P>
-
-<STRONG>3.</STRONG>
- You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-
-<!-- we use this doubled UL to get the sub-sections indented, -->
-<!-- while making the bullets as unobvious as possible. -->
-<UL>
-
-<LI><STRONG>a)</STRONG>
-     Accompany it with the complete corresponding machine-readable
-     source code, which must be distributed under the terms of Sections
-     1 and 2 above on a medium customarily used for software interchange; or,
-
-<P>
-<LI><STRONG>b)</STRONG>
-     Accompany it with a written offer, valid for at least three
-     years, to give any third party, for a charge no more than your
-     cost of physically performing source distribution, a complete
-     machine-readable copy of the corresponding source code, to be
-     distributed under the terms of Sections 1 and 2 above on a medium
-     customarily used for software interchange; or,
-
-<P>
-<LI><STRONG>c)</STRONG>
-     Accompany it with the information you received as to the offer
-     to distribute corresponding source code.  (This alternative is
-     allowed only for noncommercial distribution and only if you
-     received the program in object code or executable form with such
-     an offer, in accord with Subsection b above.)
-</UL>
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-<P>
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-<P>
-
-<STRONG>4.</STRONG>
- You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-<P>
-
-<STRONG>5.</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 Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-<P>
-
-<STRONG>6.</STRONG>
- Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-<P>
-
-<STRONG>7.</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 Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-<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>
-
-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>
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-<P>
-
-<STRONG>8.</STRONG>
- If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-<P>
-
-<STRONG>9.</STRONG>
- The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-<P>
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-<P>
-
-
-<STRONG>10.</STRONG>
- If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-
-
-<P><STRONG>NO WARRANTY</STRONG></P>
-
-<P>
-
-<STRONG>11.</STRONG>
- BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-<P>
-
-<STRONG>12.</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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-<P>
-
-
-<H2>END OF TERMS AND CONDITIONS</H2>
-
-
-
-<H2><A NAME="SEC4" HREF="License.html#TOC4">How to Apply These Terms to Your New Programs</A></H2>
-
-<P>
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-</P>
-<P>
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-</P>
-
-<PRE>
-<VAR>one line to give the program's name and an idea of what it does.</VAR>
-Copyright (C) <VAR>yyyy</VAR>  <VAR>name of author</VAR>
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-</PRE>
-
-<P>
-Also add information on how to contact you by electronic and paper mail.
-
-</P>
-<P>
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-</P>
-
-<PRE>
-Gnomovision version 69, Copyright (C) <VAR>year</VAR> <VAR>name of author</VAR>
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-type `show w'.  This is free software, and you are welcome
-to redistribute it under certain conditions; type `show c' 
-for details.
-</PRE>
-
-<P>
-The hypothetical commands <SAMP>`show w'</SAMP> and <SAMP>`show c'</SAMP> should show
-the appropriate parts of the General Public License.  Of course, the
-commands you use may be called something other than <SAMP>`show w'</SAMP> and
-<SAMP>`show c'</SAMP>; they could even be mouse-clicks or menu items--whatever
-suits your program.
-
-</P>
-<P>
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-</P>
-
-<PRE>
-Yoyodyne, Inc., hereby disclaims all copyright
-interest in the program `Gnomovision'
-(which makes passes at compilers) written 
-by James Hacker.
-
-<VAR>signature of Ty Coon</VAR>, 1 April 1989
-Ty Coon, President of Vice
-</PRE>
-
-<P>
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
-<P><CENTER><a href="About.html">Back</a>
-</BODY>
-</HTML>
+<HTML>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">
+<H1>GNU General Public License</H1>
+
+<H2>Table of Contents</H2>
+<UL>
+
+  <LI><A NAME="TOC1" HREF="License.html#SEC1">GNU GENERAL PUBLIC LICENSE</A>
+<UL>
+<LI><A NAME="TOC2" HREF="License.html#SEC2">Preamble</A>
+<LI><A NAME="TOC3" HREF="License.html#SEC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A>
+<LI><A NAME="TOC4" HREF="License.html#SEC4">How to Apply These Terms to Your New Programs</A>
+
+</UL>
+</UL>
+
+<P>
+
+<HR>
+
+<P>
+
+
+
+<H2><A NAME="SEC1" HREF="License#TOC1">GNU GENERAL PUBLIC LICENSE</A></H2>
+<P>
+Version 2, June 1991
+
+</P>
+
+<PRE>
+Copyright (C) 1989, 1991 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.
+</PRE>
+
+
+
+<H2><A NAME="SEC2" HREF="License.html#TOC2">Preamble</A></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
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+</P>
+<P>
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+</P>
+<P>
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+</P>
+<P>
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+</P>
+<P>
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+</P>
+<P>
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+</P>
+<P>
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+</P>
+<P>
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+</P>
+
+
+<H2><A NAME="SEC3" HREF="License.html#TOC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A></H2>
+
+
+<P>
+
+<STRONG>0.</STRONG>
+ This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+<P>
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+<P>
+
+<STRONG>1.</STRONG>
+ You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+<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>
+
+<STRONG>2.</STRONG>
+ You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+<P>
+
+<UL>
+
+<LI><STRONG>a)</STRONG>
+     You must cause the modified files to carry prominent notices
+     stating that you changed the files and the date of any change.
+
+<P>
+<LI><STRONG>b)</STRONG>
+     You must cause any work that you distribute or publish, that in
+     whole or in part contains or is derived from the Program or any
+     part thereof, to be licensed as a whole at no charge to all third
+     parties under the terms of this License.
+
+<P>
+<LI><STRONG>c)</STRONG>
+     If the modified program normally reads commands interactively
+     when run, you must cause it, when started running for such
+     interactive use in the most ordinary way, to print or display an
+     announcement including an appropriate copyright notice and a
+     notice that there is no warranty (or else, saying that you provide
+     a warranty) and that users may redistribute the program under
+     these conditions, and telling the user how to view a copy of this
+     License.  (Exception: if the Program itself is interactive but
+     does not normally print such an announcement, your work based on
+     the Program is not required to print an announcement.)
+</UL>
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+<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 Program.
+<P>
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+<P>
+
+<STRONG>3.</STRONG>
+ You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+
+<!-- we use this doubled UL to get the sub-sections indented, -->
+<!-- while making the bullets as unobvious as possible. -->
+<UL>
+
+<LI><STRONG>a)</STRONG>
+     Accompany it with the complete corresponding machine-readable
+     source code, which must be distributed under the terms of Sections
+     1 and 2 above on a medium customarily used for software interchange; or,
+
+<P>
+<LI><STRONG>b)</STRONG>
+     Accompany it with a written offer, valid for at least three
+     years, to give any third party, for a charge no more than your
+     cost of physically performing source distribution, a complete
+     machine-readable copy of the corresponding source code, to be
+     distributed under the terms of Sections 1 and 2 above on a medium
+     customarily used for software interchange; or,
+
+<P>
+<LI><STRONG>c)</STRONG>
+     Accompany it with the information you received as to the offer
+     to distribute corresponding source code.  (This alternative is
+     allowed only for noncommercial distribution and only if you
+     received the program in object code or executable form with such
+     an offer, in accord with Subsection b above.)
+</UL>
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+<P>
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+<P>
+
+<STRONG>4.</STRONG>
+ You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+<P>
+
+<STRONG>5.</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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+<P>
+
+<STRONG>6.</STRONG>
+ Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+<P>
+
+<STRONG>7.</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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+<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>
+
+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>
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+<P>
+
+<STRONG>8.</STRONG>
+ If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+<P>
+
+<STRONG>9.</STRONG>
+ The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+<P>
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+<P>
+
+
+<STRONG>10.</STRONG>
+ If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+
+
+<P><STRONG>NO WARRANTY</STRONG></P>
+
+<P>
+
+<STRONG>11.</STRONG>
+ BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+<P>
+
+<STRONG>12.</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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+<P>
+
+
+<H2>END OF TERMS AND CONDITIONS</H2>
+
+
+
+<H2><A NAME="SEC4" HREF="License.html#TOC4">How to Apply These Terms to Your New Programs</A></H2>
+
+<P>
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+</P>
+<P>
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+</P>
+
+<PRE>
+<VAR>one line to give the program's name and an idea of what it does.</VAR>
+Copyright (C) <VAR>yyyy</VAR>  <VAR>name of author</VAR>
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+</PRE>
+
+<P>
+Also add information on how to contact you by electronic and paper mail.
+
+</P>
+<P>
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+</P>
+
+<PRE>
+Gnomovision version 69, Copyright (C) <VAR>year</VAR> <VAR>name of author</VAR>
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'.  This is free software, and you are welcome
+to redistribute it under certain conditions; type `show c' 
+for details.
+</PRE>
+
+<P>
+The hypothetical commands <SAMP>`show w'</SAMP> and <SAMP>`show c'</SAMP> should show
+the appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than <SAMP>`show w'</SAMP> and
+<SAMP>`show c'</SAMP>; they could even be mouse-clicks or menu items--whatever
+suits your program.
+
+</P>
+<P>
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+</P>
+
+<PRE>
+Yoyodyne, Inc., hereby disclaims all copyright
+interest in the program `Gnomovision'
+(which makes passes at compilers) written 
+by James Hacker.
+
+<VAR>signature of Ty Coon</VAR>, 1 April 1989
+Ty Coon, President of Vice
+</PRE>
+
+<P>
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+<P><CENTER><a href="About.html">Back</a>
+</BODY>
+</HTML>
diff --git a/src/help/MarkingHelp.html b/src/help/MarkingHelp.html
index bf4aefb..990e4d1 100644
--- a/src/help/MarkingHelp.html
+++ b/src/help/MarkingHelp.html
@@ -1,46 +1,46 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Mark entries</h1>
-
-    <p>You have the option of <em>marking</em>
-    entries. Keyboard shortcuts are CTRL-M and CTRL-SHIFT-M to mark
-    and unmark the selected entries, respectively, and you can also
-    access these actions in the menus.</p>
-
-    <p>Marking is not the same as selecting entries.
-    Marked entries behave differently from other entries in two
-    ways. First, they are always displayed with a different background
-    color in the entry table. Second, they will float to the top of your
-    entry list, as long as your table is not sorted according to
-    groups or a Float search.</p>
-
-    <p>The color each marked entry is displayed in depends on the marking
-    level of the entry, with the default colors ranging from yellow to red.
-    There are menu choices both for incrementing the marking level of the
-    selected entry or entries, and for directly setting the marking to a specific
-    level.</p>
-
-    <p>Marking entries can be useful for instance if you need to do
-    several searches without losing your first search results, or
-    if you need to remember which articles or books to look more
-    closely at.</p>
-    
-    <p>In addition to manually marking entries, JabRef can optionally auto-mark
-    the latest imported entries, and at the same time unmark the previous entries
-    marked in this way. Such entries will be shown in a different color
-    from manually marked entries - by default green. This feature is toggled under
-    <b>Options -> Preferences -> General</b></p>
-
-    <p>Marking of entries will be associated with your username, the same name as is
-    used to fill in the "owner" field of entries you create or import (this will by
-    default match your user name in the operating system, but can be changed under
-    <b>Options -> Preferences -> General</b>). Different users can mark entries
-    independently. Saving the database will preserve the markings.</p>
-
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Mark entries</h1>
+
+    <p>You have the option of <em>marking</em>
+    entries. Keyboard shortcuts are CTRL-M and CTRL-SHIFT-M to mark
+    and unmark the selected entries, respectively, and you can also
+    access these actions in the menus.</p>
+
+    <p>Marking is not the same as selecting entries.
+    Marked entries behave differently from other entries in two
+    ways. First, they are always displayed with a different background
+    color in the entry table. Second, they will float to the top of your
+    entry list, as long as your table is not sorted according to
+    groups or a Float search.</p>
+
+    <p>The color each marked entry is displayed in depends on the marking
+    level of the entry, with the default colors ranging from yellow to red.
+    There are menu choices both for incrementing the marking level of the
+    selected entry or entries, and for directly setting the marking to a specific
+    level.</p>
+
+    <p>Marking entries can be useful for instance if you need to do
+    several searches without losing your first search results, or
+    if you need to remember which articles or books to look more
+    closely at.</p>
+    
+    <p>In addition to manually marking entries, JabRef can optionally auto-mark
+    the latest imported entries, and at the same time unmark the previous entries
+    marked in this way. Such entries will be shown in a different color
+    from manually marked entries - by default green. This feature is toggled under
+    <b>Options -> Preferences -> General</b></p>
+
+    <p>Marking of entries will be associated with your username, the same name as is
+    used to fill in the "owner" field of entries you create or import (this will by
+    default match your user name in the operating system, but can be changed under
+    <b>Options -> Preferences -> General</b>). Different users can mark entries
+    independently. Saving the database will preserve the markings.</p>
+
+
+</body>
+</html>
diff --git a/src/help/MedlineHelp.html b/src/help/MedlineHelp.html
index fe37cfb..f1a5f02 100644
--- a/src/help/MedlineHelp.html
+++ b/src/help/MedlineHelp.html
@@ -1,60 +1,60 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Fetching Medline entries</h1>
-
-    <p>To use this feature, choose <b>Search -> Web search</b>, and the
-    search interface will appear in the side pane. Select <b>Medline</b> in the dropdown menu.</p>
-
-    <p>MEDLINE is the U.S. National Library of Medicine's premier
-    bibliographic database. It contains references to journal
-    articles in life sciences with a concentration on biomedicine.</p>
-
-    <p>There are two ways of specifying which entries to
-    download:</p>
-
-    <ol>
-        <li>Enter one or more Medline IDs (separated by
-        comma/semicolon) in the text field.</li>
-
-        <li>Enter a set of names and/or words to search for. You
-        can use the operators <em>and</em> and <em>or</em> and
-        parentheses to refine your search expression. See
-        <a href="http://www.ovid.com/site/products/ovidguide/medline.htm">Medline/OVID operators</a>
-        for full description.</li>
-
-       <li> Examples:
-       <ol>
-         <li>May [au] AND Anderson [au]</li>
-         <li> Anderson RM [au] HIV [ti] </li>
-         <li> Valleron [au] 1988:2000[dp] HIV [ti]</li>
-         <li> Valleron [au] AND 1987:2000[dp] AND (AIDS [ti] OR HIV[ti])</li>
-         <li> Anderson [au] AND Nature [ta]</li>
-         <li>Population [ta] </li>
-       </ol>
-       </li>
-    </ol>In both cases, press <b>Enter</b> or the <b>Fetch</b>
-    button. If you use a text search, you will be prompted with the
-    number of entries found, and given a choice of how many to
-    download.
-
-    <p>The entries fetched will be added to your currently active
-    database.</p>
-
-    <h2>Using a Proxy Server</h2>
-
-    <p>If you need to use an http proxy
-    server, pass the server name and port number to java at
-    runtime.</p>
-
-    <p><code>java -Dhttp.proxyHost="hostname"
-    -Dhttp.proxyPort="portnumber"</code></p>
-
-    <p>These environment settings are documented in the 
-    <a href="http://docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html">Oracle J2SE documentation</a>.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Fetching Medline entries</h1>
+
+    <p>To use this feature, choose <b>Search -> Web search</b>, and the
+    search interface will appear in the side pane. Select <b>Medline</b> in the dropdown menu.</p>
+
+    <p>MEDLINE is the U.S. National Library of Medicine's premier
+    bibliographic database. It contains references to journal
+    articles in life sciences with a concentration on biomedicine.</p>
+
+    <p>There are two ways of specifying which entries to
+    download:</p>
+
+    <ol>
+        <li>Enter one or more Medline IDs (separated by
+        comma/semicolon) in the text field.</li>
+
+        <li>Enter a set of names and/or words to search for. You
+        can use the operators <em>and</em> and <em>or</em> and
+        parentheses to refine your search expression. See
+        <a href="http://www.ovid.com/site/products/ovidguide/medline.htm">Medline/OVID operators</a>
+        for full description.</li>
+
+       <li> Examples:
+       <ol>
+         <li>May [au] AND Anderson [au]</li>
+         <li> Anderson RM [au] HIV [ti] </li>
+         <li> Valleron [au] 1988:2000[dp] HIV [ti]</li>
+         <li> Valleron [au] AND 1987:2000[dp] AND (AIDS [ti] OR HIV[ti])</li>
+         <li> Anderson [au] AND Nature [ta]</li>
+         <li>Population [ta] </li>
+       </ol>
+       </li>
+    </ol>In both cases, press <b>Enter</b> or the <b>Fetch</b>
+    button. If you use a text search, you will be prompted with the
+    number of entries found, and given a choice of how many to
+    download.
+
+    <p>The entries fetched will be added to your currently active
+    database.</p>
+
+    <h2>Using a Proxy Server</h2>
+
+    <p>If you need to use an http proxy
+    server, pass the server name and port number to java at
+    runtime.</p>
+
+    <p><code>java -Dhttp.proxyHost="hostname"
+    -Dhttp.proxyPort="portnumber"</code></p>
+
+    <p>These environment settings are documented in the 
+    <a href="http://docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html">Oracle J2SE documentation</a>.</p>
+
+</body>
+</html>
diff --git a/src/help/OpenOfficeIntegration.html b/src/help/OpenOfficeIntegration.html
index cb9c9ae..a7b2b89 100644
--- a/src/help/OpenOfficeIntegration.html
+++ b/src/help/OpenOfficeIntegration.html
@@ -1,467 +1,467 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-    <link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-<h1>OpenOffice/LibreOffice integration</h1>
-
-<h2>Introduction</h2>
-
-<p>This feature offers an interface for inserting citations and formatting a Bibliography in an OpenOffice
-    or LibreOffice Writer document from JabRef.</p>
-
-<p>Throughout this help document, whenever the name <i>OpenOffice</i>
-    is used, it can be interchanged with <i>LibreOffice</i>.</p>
-
-<h2>Using the OpenOffice/LibreOffice interface</h2>
-
-<p>To communicate with OpenOffice, JabRef must first connect to a running OpenOffice instance. You need to start
-    OpenOffice and enter your document before connecting from JabRef. JabRef needs to know the location of your
-    OpenOffice executable (<b>soffice.exe</b> on Windows, and <b>soffice</b> on other platforms), and the directory
-    where several OpenOffice jar files reside. If you connect by clicking the <b>Connect</b> button, JabRef will try
-    to automatically determine these locations. If this does not work, you need to connect using the <b>Manual
-    connect</b> button, which will open a window asking you for the needed locations.</p>
-
-<p>After the connection has been established, you can insert citations by selecting one or more entries in JabRef and
-    using the <b>Push to OpenOffice</b> button in the dropdown menu of JabRef's toolbar, or by using the appropriate
-    button in the OpenOffice panel in the side pane. This will insert citations for the selected entries at the
-    current cursor position in the OpenOffice document, and update the bibliography to contain the full reference.</p>
-
-<p><b>Note:</b> JabRef does not use OpenOffice's built-in bibliography system, because of the limitations of that
-    system. A document containing citations inserted from JabRef will not generally be compatible with other reference
-    managers such as Bibus and Zotero.</p>
-
-<p>Two different types of citations can be inserted - either a citation in parenthesis, "(Author 2007)", or an in-text
-    citation, "Author (2007)". This distinction is only meaningful if author-year citations are used instead of numbered
-    citations, but the distinction will be preserved if you switch between the two styles.</p>
-
-<p>If you modify entries in JabRef after inserting their citations into OpenOffice, you will need to synchronize the
-    bibliography. The <b>Sync OO bibliography</b> button will update all entries of the bibliography, provided their
-    BibTeX keys have not been altered (JabRef encodes the BibTeX key into the reference name for each citation to keep
-    track of which BibTeX key the original JabRef entry has).</p>
-
-<h2>The style file</h2>
-
-<p>To customize the citation style you need to select a style file, or use one of the default styles.
-   The style defines the format of citations and the format of the bibliography. You can use standard
-   JabRef export formatters to process entry fields before they are sent to OpenOffice. Through the style file, the
-   intention is to give as much flexibility in citation styles as possible. You can switch style files at any time,
-   and use the <b>Update</b> button to refresh your bibliography to follow the new style.</p>
-<p>By clicking the <b>Select style</b> button you can bring up a window that allows selection of either the default
-   style or an external style file. If you want to create a new style based on the default, you can click the
-   <b>View</b> button to bring up the default style contents, which can be copied into a text editor and modified.</p>
-<p>To choose an external style file, you have two options. Either you can choose a style file directly, or you can
-   set a style file directory. If you do the latter, you will see a list of styles from that directory (and
-   subdirectories), and can choose one from that list.</p>
-
-<p>Here is an example style file:</p>
-<pre>
-NAME
-Example style file for JabRef-OpenOffice integration.
-
-JOURNALS
-Journal name 1
-Journal name 2
-
-PROPERTIES
-Title="References"
-IsSortByPosition="false"
-IsNumberEntries="false"
-ReferenceParagraphFormat="Default"
-ReferenceHeaderParagraphFormat="Heading 1"
-
-CITATION
-AuthorField="author/editor"
-YearField="year"
-MaxAuthors="3"
-MaxAuthorsFirst="3"
-AuthorSeparator=", "
-AuthorLastSeparator=" & "
-EtAlString=" et al."
-ItalicEtAl="true"
-YearSeparator=" "
-InTextYearSeparator=" "
-BracketBefore="["
-BracketAfter="]"
-BracketBeforeInList="["
-BracketAfterInList="]"
-CitationSeparator="; "
-UniquefierSeparator=","
-GroupedNumbersSeparator="-"
-MinimumGroupingCount="3"
-FormatCitations="false"
-CitationCharacterFormat="Default"
-MultiCiteChronological="false"
-PageInfoSeparator="; "
-
-LAYOUT
-article=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
-(<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} :
-\format[FormatPagesForHTML]{\pages}\end{pages}.
-
-book=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}\begin{editor}
-\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.)\end{editor},
-<b>\year\uniq</b>. <i>\title</i>. \publisher, \address.
-
-incollection=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
-(<b>\year\uniq</b>). <i>\title</i>. In: \format[AuthorLastFirst,
-AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\booktitle</i>, \publisher.
-
-inbook=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
-(<b>\year\uniq</b>). <i>\chapter</i>. In: \format[AuthorLastFirst,
-AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\title</i>, \publisher.
-
-phdthesis=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
-(<b>\year\uniq</b>). <i>\title</i>, \school.
-
-default=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
-(<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} :
-\format[FormatPagesForHTML]{\pages}\end{pages}.
-
-</pre>
-
-<p>(Note that the layout for each entry type must be constrained to a single line in the style file - above, the lines
-    are broken up to improve readability.)</p>
-
-<h3>Global properties</h3>
-
-<p>The <b>PROPERTIES</b> section describes global properties for the bibliography.
-    The following table describes the available properties:</p>
-
-<table border="1" rules="none" summary="Available Properties">
-    <tr>
-        <td><b>Property</b></td>
-        <td><b>Type</b></td>
-        <td><b>Default value</b></td>
-        <td><b>Description</b></td>
-    </tr>
-    <tr>
-        <td>IsNumberEntries</td>
-        <td>boolean</td>
-        <td><code>false</code></td>
-        <td>Determines the type of citations to use. If <code>true</code>, number citations will be
-            used. If <code>false</code>, author-year citations will be used.
-        </td>
-    </tr>
-    <tr>
-        <td>IsSortByPosition</td>
-        <td>boolean</td>
-        <td><code>false</code></td>
-        <td>Determines how the bibliography is sorted. If true, the entries
-            will be sorted according to the order in which they are cited. If false, the entries will be
-            sorted alphabetically by authors.
-        </td>
-    </tr>
-    <tr>
-        <td>ReferenceParagraphFormat</td>
-        <td>string</td>
-        <td><code>Default</code></td>
-        <td>Gives the name of the paragraph format to be used for the reference list. This format
-            must be defined in your OpenOffice document.
-        </td>
-    </tr>
-    <tr>
-        <td>ReferenceHeaderParagraphFormat</td>
-        <td>string</td>
-        <td><code>Heading 1</code></td>
-        <td>Gives the name of the paragraph format to be used for the headline of the reference list.
-            This format must be defined in your OpenOffice document.
-        </td>
-    </tr>
-    <tr>
-        <td>Title</td>
-        <td>string</td>
-        <td><code>Bibliography</code></td>
-        <td>The text to enter as the headline of the reference list.</td>
-    </tr>
-</table>
-
-<h3>Citation properties</h3>
-
-<p>The <b>CITATION</b> section describes the format of the citation markers inserted into the text.</p>
-
-<p>The following table gives a brief description of all the available citation properties. Properties that are not
-    given in the style file will keep their default value.</p>
-
-<table border="1" rules="none" summary="Brief Description">
-    <tr>
-        <td><b>Property</b></td>
-        <td><b>Type</b></td>
-        <td><b>Default value</b></td>
-        <td><b>Description</b></td>
-    </tr>
-    <tr>
-        <td>AuthorField</td>
-        <td>string</td>
-        <td><code>author/editor</code></td>
-        <td>BibTeX field containing author names. Can specify fallback field, e.g. <code>author/editor</code></td>
-    </tr>
-    <tr>
-        <td>AuthorLastSeparator</td>
-        <td>string</td>
-        <td><code> & </code></td>
-        <td>Text inserted between the two last author names.</td>
-    </tr>
-    <tr>
-        <td>AuthorLastSeparatorInText</td>
-        <td>string</td>
-        <td> </td>
-        <td>If specified, this propery overrides <code>AuthorLastSeparator</code> for in-text citations such as
-            <code>Smith & Jones (2001)</code>.
-        </td>
-    </tr>
-    <tr>
-        <td>AuthorSeparator</td>
-        <td>string</td>
-        <td><code>, </code></td>
-        <td>Text inserted between author names except the last two.</td>
-    </tr>
-    <tr>
-        <td>BracketAfter</td>
-        <td>string</td>
-        <td><code>]</code></td>
-        <td>The closing bracket of citations.</td>
-    </tr>
-    <tr>
-        <td>BracketAfterInList</td>
-        <td>string</td>
-        <td>]</td>
-        <td>The closing bracket for citation numbering in the reference list.</td>
-    </tr>
-    <tr>
-        <td>BracketBefore</td>
-        <td>string</td>
-        <td><code>[</code></td>
-        <td>The opening bracket of citations.</td>
-    </tr>
-    <tr>
-        <td>BracketBeforeInList</td>
-        <td>string</td>
-        <td>[</td>
-        <td>The opening bracket for citation numbering in the reference list.</td>
-    </tr>
-    <tr>
-        <td>CitationCharacterFormat</td>
-        <td>string</td>
-        <td><code>Default</code></td>
-        <td>If <code>FormatCitations</code> is set to <code>true</code>, the character format with the name
-            given by this property will be applied to citations. The character format must be defined in your
-            OpenOffice document.
-        </td>
-    </tr>
-    <tr>
-        <td>CitationSeparator</td>
-        <td>string</td>
-        <td><code>; </code></td>
-        <td>Text inserted between items when a citation contains multiple entries, e.g. <code>[Smith 2001; Jones
-            2002]</code></td>
-    </tr>
-    <tr>
-        <td>EtAlString</td>
-        <td>string</td>
-        <td><code> et al. </code></td>
-        <td>Text inserted after author names when not all authors are listed, e.g. <code>[Smith et al. 2001]</code></td>
-    </tr>
-    <tr>
-        <td>FormatCitations</td>
-        <td>boolean</td>
-        <td><code>false</code></td>
-        <td>Determines whether formatting should be applied to citations. If true, a character format will be
-            applied to the citations. The property <code>CitationCharacterFormat</code> controls which format
-            should be applied, and the given format must be defined in your OpenOffice document. Any font settings
-            and effects can be chosen within OpenOffice for your chosen character format.
-        </td>
-    </tr>
-    <tr>
-        <td>GroupedNumbersSeparator</td>
-        <td>string</td>
-        <td><code>-</code></td>
-        <td>Text inserted between numbers when numbered citations are grouped, e.g. <code>[4-6]</code></td>
-    </tr>
-    <tr>
-        <td>InTextYearSeparator</td>
-        <td>string</td>
-        <td>Single Space</td>
-        <td>Text inserted between author names and starting bracket before year in in-text citations.</td>
-    </tr>
-    <tr>
-        <td>ItalicEtAl</td>
-        <td>boolean</td>
-        <td><code>true</code></td>
-        <td>If true, the "et al." string in citation markers is italicized.</td>
-    </tr>
-    <tr>
-        <td>MaxAuthors</td>
-        <td>integer</td>
-        <td><code>3</code></td>
-        <td>The maximum number of authors to list in a citation that has appeared earlier in the document.</td>
-    </tr>
-    <tr>
-        <td>MaxAuthorsFirst</td>
-        <td>integer</td>
-        <td><code>3</code></td>
-        <td>The maximum number of authors to list in a citation when appearing for the first time.</td>
-    </tr>
-    <tr>
-        <td>MinimumGroupingCount</td>
-        <td>integer</td>
-        <td><code>3</code></td>
-        <td>The minimum number of consecutive entries a citation should contain before the numbers are grouped,
-            e.g. <code>[4-6]</code> vs. <code>[4; 5; 6]</code>.
-        </td>
-    </tr>
-    <tr>
-        <td>MultiCiteChronological</td>
-        <td>boolean</td>
-        <td><code>true</code></td>
-        <td>If <code>true</code>, multiple entries in the same citation are sorted chronologically, otherwise
-            they are sorted alphabetically.
-        </td>
-    </tr>
-    <tr>
-        <td>PageInfoSeparator</td>
-        <td>string</td>
-        <td><code>; </code></td>
-        <td>For citations with extra information, e.g. page numbers, this string is inserted between the year
-            (for author-year citations) or the citation number (for numbered citations) and the extra information.
-            E.g. the text between <code>2001</code> and <code>p. 301</code> in <code>[Smith 2001; p. 301]</code>.
-        </td>
-    </tr>
-    <tr>
-        <td>UniquefierSeparator</td>
-        <td>string</td>
-        <td><code>, </code></td>
-        <td>Text inserted between letters used to differentiate citations with similar authors and year. E.g.
-            the text between <code>a</code> and <code>b</code> in <code>[Smith 2001a, b]</code>.
-        </td>
-    </tr>
-    <tr>
-        <td>YearField</td>
-        <td>string</td>
-        <td><code>year</code></td>
-        <td>The BibTeX field to get publication year from.</td>
-    </tr>
-    <tr>
-        <td>YearSeparator</td>
-        <td>string</td>
-        <td>Single Space</td>
-        <td>Text inserted between author names and year in parenthesis citations such as <code>[Smith 2001]</code>.</td>
-    </tr>
-</table>
-
-<p>If numbered entries are used, the <code>BracketBefore</code> and <code>BracketAfter</code> properties
-    are the most important - they define which characters the citation number is wrapped in. The citation is composed
-    as follows:<br/>
-    <code>[BracketBefore][Number][BracketAfter]</code><br/>
-    where [Number] is the number of the citation, determined according to the ordering of the bibliography and/or
-    the position of the citation in the text. If a citation refers to several entries, these will be separated
-    by the string given in the property <code>CitationSeparator</code> (for instance, if <code>CitationSeparator</code>=;,
-    the citation could look like <code>[2;4;6]</code>). If two or more of the entries have a series of consecutive
-    numbers, the numbers can be grouped (for instance <code>[2-4]</code> for 2, 3 and 4 or <code>[2;5-7]</code> for
-    2, 5, 6 and 7). The property <code>GroupedNumbersSeparator</code> (default <code>-</code>) determines which string
-    separates the first and last
-    of the grouped numbers. The integer property <code>MinimumGroupingCount</code> (default 3) determines what number of
-    consecutive numbers is required before entries are grouped. If <code>MinimumGroupingCount</code>=3, the numbers
-    2 and 3 will not be grouped, while 2, 3, 4 will be. If <code>MinimumGroupingCount</code>=0, no grouping will be
-    done regardless of the number of consecutive numbers.
-</p>
-
-<p>If numbered entries are not used, author-year citations will be created based on the citation properties.
-    A parenthesis citation is composed as follows:<br/>
-    <code>[BracketBefore][Author][YearSeparator][Year][BracketAfter]</code><br/>
-    where [Author] is the result of looking up the field or fields given in the <code>AuthorField</code> property,
-    and formatting a list of authors. The list can contain up to <code>MaxAuthors</code> names - if more are present,
-    the list will be composed as the first author plus the text specified in the property <code>EtAlString</code>.
-    If the property <code>MaxAuthorsFirst</code> is given, it overrides <code>MaxAuthors</code> the first time each
-    citation appears in the text.</p>
-
-<p>If several, slash-separated, fields are given in the <code>AuthorField</code> property, they will be looked up
-    successively if the first field is empty for the given BibTeX entry. In the example above, the "author" field will
-    be used, but if empty, the "editor" field will be used as a backup.</p>
-
-<p>The names in the author list will be separated by the text given by the <code>AuthorSeparator</code>
-    property, except for the last two names, which will be separated by the text given by
-    <code>AuthorLastSeparator</code>.
-    If the property <code>AuthorLastSeparatorInText</code> is given, it overrides the former for citations of the
-    in-text
-    type. This makes it possible to get citations like <code>(Olsen & Jensen, 2008)</code> and <code>Olsen and
-        Jensen (2008)</code>
-    for the same style.
-</p>
-
-<p>[Year] is the result of looking up the field or fields given in the [YearField] property.</p>
-
-<p>An in-text citation is composed as follows:<br/>
-    <code>[Author][InTextYearSeparator][BracketBefore][Year][BracketAfter]</code><br/>
-    where [Author] and [Year] are resolved in exactly the same way as for the parenthesis citations.
-</p>
-
-<p>If two different cited sources have the same authors and publication year, and author-year citations are used,
-    their markers will need modification in order to be distinguishable. This is done automatically by appending a
-    letter after the year for
-    each of the publications; 'a' for the first cited reference, 'b' for the next, and so on.
-    For instance, if the author "Olsen" has two cited papers from 2005, the citation markers will be modified to
-    <code>(Olsen, 2005a)</code> and <code>(Olsen, 2005b)</code>. In the bibliography
-    layout, the placement of the "uniquefier" letter is indicated explicitly by inserting the virtual field
-    <code>uniq</code>.</p>
-
-<p>If several entries that have been "uniquefied" are cited together, they will be grouped in the citation
-    marker. For instance, of the two entries in the example above are cited together, the citation marker will
-    be <code>(Olsen, 2005a, b)</code> rather than <code>Olsen, 2005a; Olsen, 2005b)</code>. The grouped uniquefier
-    letters (a and b in our example) will be separated by the string specified by the <code>UniquefierSeparator</code>
-    property.
-</p>
-
-<p>Author-year citations referring more than one entry will by default be sorted chronologically. If you wish them
-    to be sorted alphabetically, the citation property <code>MultiCiteChronological</code> should be set to
-    <code>false.</code>.</p>
-
-
-<h3>Reference list layout</h3>
-
-<p>The <b>LAYOUT</b> section describes how the bibliography entry for each entry type in JabRef
-    should appear. Each line should start with either the name of a BibTeX entry type, or the word
-    <code>default</code>, followed by a '='. The <code>default</code> layout will be used for all
-    entry types for which an explicit layout hasn't been given.</p>
-
-<p>The remainder of each line defines the layout, with normal text and spaces appearing literally
-    in the bibliography entry. Information from the BibTeX entry is inserted by adding <code>\field</code> markers
-    with the appropriate field name (e.g. <code>\author</code> for inserting the author names). Formatting
-    information for the field can be included here, following JabRef's standard export layout syntax.
-    Refer to <a href="http://jabref.sourceforge.net/help/CustomExports.php">JabRef's documentation on custom export
-        filters</a>
-    for more information about which formatters are available.</p>
-
-<p>If author-year citations are used, you have to explicitly specify the position of the "uniquefier" letter
-    that is added to distinguish similar-looking citations. This is done by including a marker for the virtual field
-    <code>uniq</code>, typically right after the year (as shown in the example style file). The <code>uniq</code>
-    field is automatically set correctly for each entry before its reference text is laid out.
-</p>
-
-<p>To indicate formatting in the bibliography, you can use the HTML-like tag pairs <b> </b>,
-    <i> </i>, <sup> </sup> and <sub> </sub> to specify bold text,
-    italic text, superscript and subscript, respectively.</p>
-
-<p>If you are using numbered citations, the number for each entry will be automatically inserted at the start
-    of each entry in the reference list. By default, the numbers will be enclosed in the same brackets defined for
-    citations. The optional citation properties <code>BracketBeforeInList</code> and
-    <code>BracketAfterInList</code> override <code>BracketBefore</code> and <code>BracketAfter</code> if set. These
-    can be used if you want different types of brackets (or no brackets) in the reference list. Note that these need
-    not be brackets as such - they can be any combination of characters.</p>
-
-<h2>Known issues</h2>
-
-<ul>
-    <li>Make sure to save your Writer document in OpenDocument format (odt). Saving to Word format will lose your
-        reference marks.
-    </li>
-    <li>There is currently no support for footnote based citations.</li>
-    <li>The cursor may be poorly positioned after inserting a citation.</li>
-    <li>Copy-pasting the example style file directly from this page can give an unparseable file. To avoid this, instead
-        download the example file from the link in the download section.
-    </li>
-</ul>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+<h1>OpenOffice/LibreOffice integration</h1>
+
+<h2>Introduction</h2>
+
+<p>This feature offers an interface for inserting citations and formatting a Bibliography in an OpenOffice
+    or LibreOffice Writer document from JabRef.</p>
+
+<p>Throughout this help document, whenever the name <i>OpenOffice</i>
+    is used, it can be interchanged with <i>LibreOffice</i>.</p>
+
+<h2>Using the OpenOffice/LibreOffice interface</h2>
+
+<p>To communicate with OpenOffice, JabRef must first connect to a running OpenOffice instance. You need to start
+    OpenOffice and enter your document before connecting from JabRef. JabRef needs to know the location of your
+    OpenOffice executable (<b>soffice.exe</b> on Windows, and <b>soffice</b> on other platforms), and the directory
+    where several OpenOffice jar files reside. If you connect by clicking the <b>Connect</b> button, JabRef will try
+    to automatically determine these locations. If this does not work, you need to connect using the <b>Manual
+    connect</b> button, which will open a window asking you for the needed locations.</p>
+
+<p>After the connection has been established, you can insert citations by selecting one or more entries in JabRef and
+    using the <b>Push to OpenOffice</b> button in the dropdown menu of JabRef's toolbar, or by using the appropriate
+    button in the OpenOffice panel in the side pane. This will insert citations for the selected entries at the
+    current cursor position in the OpenOffice document, and update the bibliography to contain the full reference.</p>
+
+<p><b>Note:</b> JabRef does not use OpenOffice's built-in bibliography system, because of the limitations of that
+    system. A document containing citations inserted from JabRef will not generally be compatible with other reference
+    managers such as Bibus and Zotero.</p>
+
+<p>Two different types of citations can be inserted - either a citation in parenthesis, "(Author 2007)", or an in-text
+    citation, "Author (2007)". This distinction is only meaningful if author-year citations are used instead of numbered
+    citations, but the distinction will be preserved if you switch between the two styles.</p>
+
+<p>If you modify entries in JabRef after inserting their citations into OpenOffice, you will need to synchronize the
+    bibliography. The <b>Sync OO bibliography</b> button will update all entries of the bibliography, provided their
+    BibTeX keys have not been altered (JabRef encodes the BibTeX key into the reference name for each citation to keep
+    track of which BibTeX key the original JabRef entry has).</p>
+
+<h2>The style file</h2>
+
+<p>To customize the citation style you need to select a style file, or use one of the default styles.
+   The style defines the format of citations and the format of the bibliography. You can use standard
+   JabRef export formatters to process entry fields before they are sent to OpenOffice. Through the style file, the
+   intention is to give as much flexibility in citation styles as possible. You can switch style files at any time,
+   and use the <b>Update</b> button to refresh your bibliography to follow the new style.</p>
+<p>By clicking the <b>Select style</b> button you can bring up a window that allows selection of either the default
+   style or an external style file. If you want to create a new style based on the default, you can click the
+   <b>View</b> button to bring up the default style contents, which can be copied into a text editor and modified.</p>
+<p>To choose an external style file, you have two options. Either you can choose a style file directly, or you can
+   set a style file directory. If you do the latter, you will see a list of styles from that directory (and
+   subdirectories), and can choose one from that list.</p>
+
+<p>Here is an example style file:</p>
+<pre>
+NAME
+Example style file for JabRef-OpenOffice integration.
+
+JOURNALS
+Journal name 1
+Journal name 2
+
+PROPERTIES
+Title="References"
+IsSortByPosition="false"
+IsNumberEntries="false"
+ReferenceParagraphFormat="Default"
+ReferenceHeaderParagraphFormat="Heading 1"
+
+CITATION
+AuthorField="author/editor"
+YearField="year"
+MaxAuthors="3"
+MaxAuthorsFirst="3"
+AuthorSeparator=", "
+AuthorLastSeparator=" & "
+EtAlString=" et al."
+ItalicEtAl="true"
+YearSeparator=" "
+InTextYearSeparator=" "
+BracketBefore="["
+BracketAfter="]"
+BracketBeforeInList="["
+BracketAfterInList="]"
+CitationSeparator="; "
+UniquefierSeparator=","
+GroupedNumbersSeparator="-"
+MinimumGroupingCount="3"
+FormatCitations="false"
+CitationCharacterFormat="Default"
+MultiCiteChronological="false"
+PageInfoSeparator="; "
+
+LAYOUT
+article=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
+(<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} :
+\format[FormatPagesForHTML]{\pages}\end{pages}.
+
+book=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}\begin{editor}
+\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.)\end{editor},
+<b>\year\uniq</b>. <i>\title</i>. \publisher, \address.
+
+incollection=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
+(<b>\year\uniq</b>). <i>\title</i>. In: \format[AuthorLastFirst,
+AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\booktitle</i>, \publisher.
+
+inbook=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
+(<b>\year\uniq</b>). <i>\chapter</i>. In: \format[AuthorLastFirst,
+AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\title</i>, \publisher.
+
+phdthesis=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
+(<b>\year\uniq</b>). <i>\title</i>, \school.
+
+default=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
+(<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} :
+\format[FormatPagesForHTML]{\pages}\end{pages}.
+
+</pre>
+
+<p>(Note that the layout for each entry type must be constrained to a single line in the style file - above, the lines
+    are broken up to improve readability.)</p>
+
+<h3>Global properties</h3>
+
+<p>The <b>PROPERTIES</b> section describes global properties for the bibliography.
+    The following table describes the available properties:</p>
+
+<table border="1" rules="none" summary="Available Properties">
+    <tr>
+        <td><b>Property</b></td>
+        <td><b>Type</b></td>
+        <td><b>Default value</b></td>
+        <td><b>Description</b></td>
+    </tr>
+    <tr>
+        <td>IsNumberEntries</td>
+        <td>boolean</td>
+        <td><code>false</code></td>
+        <td>Determines the type of citations to use. If <code>true</code>, number citations will be
+            used. If <code>false</code>, author-year citations will be used.
+        </td>
+    </tr>
+    <tr>
+        <td>IsSortByPosition</td>
+        <td>boolean</td>
+        <td><code>false</code></td>
+        <td>Determines how the bibliography is sorted. If true, the entries
+            will be sorted according to the order in which they are cited. If false, the entries will be
+            sorted alphabetically by authors.
+        </td>
+    </tr>
+    <tr>
+        <td>ReferenceParagraphFormat</td>
+        <td>string</td>
+        <td><code>Default</code></td>
+        <td>Gives the name of the paragraph format to be used for the reference list. This format
+            must be defined in your OpenOffice document.
+        </td>
+    </tr>
+    <tr>
+        <td>ReferenceHeaderParagraphFormat</td>
+        <td>string</td>
+        <td><code>Heading 1</code></td>
+        <td>Gives the name of the paragraph format to be used for the headline of the reference list.
+            This format must be defined in your OpenOffice document.
+        </td>
+    </tr>
+    <tr>
+        <td>Title</td>
+        <td>string</td>
+        <td><code>Bibliography</code></td>
+        <td>The text to enter as the headline of the reference list.</td>
+    </tr>
+</table>
+
+<h3>Citation properties</h3>
+
+<p>The <b>CITATION</b> section describes the format of the citation markers inserted into the text.</p>
+
+<p>The following table gives a brief description of all the available citation properties. Properties that are not
+    given in the style file will keep their default value.</p>
+
+<table border="1" rules="none" summary="Brief Description">
+    <tr>
+        <td><b>Property</b></td>
+        <td><b>Type</b></td>
+        <td><b>Default value</b></td>
+        <td><b>Description</b></td>
+    </tr>
+    <tr>
+        <td>AuthorField</td>
+        <td>string</td>
+        <td><code>author/editor</code></td>
+        <td>BibTeX field containing author names. Can specify fallback field, e.g. <code>author/editor</code></td>
+    </tr>
+    <tr>
+        <td>AuthorLastSeparator</td>
+        <td>string</td>
+        <td><code> & </code></td>
+        <td>Text inserted between the two last author names.</td>
+    </tr>
+    <tr>
+        <td>AuthorLastSeparatorInText</td>
+        <td>string</td>
+        <td> </td>
+        <td>If specified, this propery overrides <code>AuthorLastSeparator</code> for in-text citations such as
+            <code>Smith & Jones (2001)</code>.
+        </td>
+    </tr>
+    <tr>
+        <td>AuthorSeparator</td>
+        <td>string</td>
+        <td><code>, </code></td>
+        <td>Text inserted between author names except the last two.</td>
+    </tr>
+    <tr>
+        <td>BracketAfter</td>
+        <td>string</td>
+        <td><code>]</code></td>
+        <td>The closing bracket of citations.</td>
+    </tr>
+    <tr>
+        <td>BracketAfterInList</td>
+        <td>string</td>
+        <td>]</td>
+        <td>The closing bracket for citation numbering in the reference list.</td>
+    </tr>
+    <tr>
+        <td>BracketBefore</td>
+        <td>string</td>
+        <td><code>[</code></td>
+        <td>The opening bracket of citations.</td>
+    </tr>
+    <tr>
+        <td>BracketBeforeInList</td>
+        <td>string</td>
+        <td>[</td>
+        <td>The opening bracket for citation numbering in the reference list.</td>
+    </tr>
+    <tr>
+        <td>CitationCharacterFormat</td>
+        <td>string</td>
+        <td><code>Default</code></td>
+        <td>If <code>FormatCitations</code> is set to <code>true</code>, the character format with the name
+            given by this property will be applied to citations. The character format must be defined in your
+            OpenOffice document.
+        </td>
+    </tr>
+    <tr>
+        <td>CitationSeparator</td>
+        <td>string</td>
+        <td><code>; </code></td>
+        <td>Text inserted between items when a citation contains multiple entries, e.g. <code>[Smith 2001; Jones
+            2002]</code></td>
+    </tr>
+    <tr>
+        <td>EtAlString</td>
+        <td>string</td>
+        <td><code> et al. </code></td>
+        <td>Text inserted after author names when not all authors are listed, e.g. <code>[Smith et al. 2001]</code></td>
+    </tr>
+    <tr>
+        <td>FormatCitations</td>
+        <td>boolean</td>
+        <td><code>false</code></td>
+        <td>Determines whether formatting should be applied to citations. If true, a character format will be
+            applied to the citations. The property <code>CitationCharacterFormat</code> controls which format
+            should be applied, and the given format must be defined in your OpenOffice document. Any font settings
+            and effects can be chosen within OpenOffice for your chosen character format.
+        </td>
+    </tr>
+    <tr>
+        <td>GroupedNumbersSeparator</td>
+        <td>string</td>
+        <td><code>-</code></td>
+        <td>Text inserted between numbers when numbered citations are grouped, e.g. <code>[4-6]</code></td>
+    </tr>
+    <tr>
+        <td>InTextYearSeparator</td>
+        <td>string</td>
+        <td>Single Space</td>
+        <td>Text inserted between author names and starting bracket before year in in-text citations.</td>
+    </tr>
+    <tr>
+        <td>ItalicEtAl</td>
+        <td>boolean</td>
+        <td><code>true</code></td>
+        <td>If true, the "et al." string in citation markers is italicized.</td>
+    </tr>
+    <tr>
+        <td>MaxAuthors</td>
+        <td>integer</td>
+        <td><code>3</code></td>
+        <td>The maximum number of authors to list in a citation that has appeared earlier in the document.</td>
+    </tr>
+    <tr>
+        <td>MaxAuthorsFirst</td>
+        <td>integer</td>
+        <td><code>3</code></td>
+        <td>The maximum number of authors to list in a citation when appearing for the first time.</td>
+    </tr>
+    <tr>
+        <td>MinimumGroupingCount</td>
+        <td>integer</td>
+        <td><code>3</code></td>
+        <td>The minimum number of consecutive entries a citation should contain before the numbers are grouped,
+            e.g. <code>[4-6]</code> vs. <code>[4; 5; 6]</code>.
+        </td>
+    </tr>
+    <tr>
+        <td>MultiCiteChronological</td>
+        <td>boolean</td>
+        <td><code>true</code></td>
+        <td>If <code>true</code>, multiple entries in the same citation are sorted chronologically, otherwise
+            they are sorted alphabetically.
+        </td>
+    </tr>
+    <tr>
+        <td>PageInfoSeparator</td>
+        <td>string</td>
+        <td><code>; </code></td>
+        <td>For citations with extra information, e.g. page numbers, this string is inserted between the year
+            (for author-year citations) or the citation number (for numbered citations) and the extra information.
+            E.g. the text between <code>2001</code> and <code>p. 301</code> in <code>[Smith 2001; p. 301]</code>.
+        </td>
+    </tr>
+    <tr>
+        <td>UniquefierSeparator</td>
+        <td>string</td>
+        <td><code>, </code></td>
+        <td>Text inserted between letters used to differentiate citations with similar authors and year. E.g.
+            the text between <code>a</code> and <code>b</code> in <code>[Smith 2001a, b]</code>.
+        </td>
+    </tr>
+    <tr>
+        <td>YearField</td>
+        <td>string</td>
+        <td><code>year</code></td>
+        <td>The BibTeX field to get publication year from.</td>
+    </tr>
+    <tr>
+        <td>YearSeparator</td>
+        <td>string</td>
+        <td>Single Space</td>
+        <td>Text inserted between author names and year in parenthesis citations such as <code>[Smith 2001]</code>.</td>
+    </tr>
+</table>
+
+<p>If numbered entries are used, the <code>BracketBefore</code> and <code>BracketAfter</code> properties
+    are the most important - they define which characters the citation number is wrapped in. The citation is composed
+    as follows:<br/>
+    <code>[BracketBefore][Number][BracketAfter]</code><br/>
+    where [Number] is the number of the citation, determined according to the ordering of the bibliography and/or
+    the position of the citation in the text. If a citation refers to several entries, these will be separated
+    by the string given in the property <code>CitationSeparator</code> (for instance, if <code>CitationSeparator</code>=;,
+    the citation could look like <code>[2;4;6]</code>). If two or more of the entries have a series of consecutive
+    numbers, the numbers can be grouped (for instance <code>[2-4]</code> for 2, 3 and 4 or <code>[2;5-7]</code> for
+    2, 5, 6 and 7). The property <code>GroupedNumbersSeparator</code> (default <code>-</code>) determines which string
+    separates the first and last
+    of the grouped numbers. The integer property <code>MinimumGroupingCount</code> (default 3) determines what number of
+    consecutive numbers is required before entries are grouped. If <code>MinimumGroupingCount</code>=3, the numbers
+    2 and 3 will not be grouped, while 2, 3, 4 will be. If <code>MinimumGroupingCount</code>=0, no grouping will be
+    done regardless of the number of consecutive numbers.
+</p>
+
+<p>If numbered entries are not used, author-year citations will be created based on the citation properties.
+    A parenthesis citation is composed as follows:<br/>
+    <code>[BracketBefore][Author][YearSeparator][Year][BracketAfter]</code><br/>
+    where [Author] is the result of looking up the field or fields given in the <code>AuthorField</code> property,
+    and formatting a list of authors. The list can contain up to <code>MaxAuthors</code> names - if more are present,
+    the list will be composed as the first author plus the text specified in the property <code>EtAlString</code>.
+    If the property <code>MaxAuthorsFirst</code> is given, it overrides <code>MaxAuthors</code> the first time each
+    citation appears in the text.</p>
+
+<p>If several, slash-separated, fields are given in the <code>AuthorField</code> property, they will be looked up
+    successively if the first field is empty for the given BibTeX entry. In the example above, the "author" field will
+    be used, but if empty, the "editor" field will be used as a backup.</p>
+
+<p>The names in the author list will be separated by the text given by the <code>AuthorSeparator</code>
+    property, except for the last two names, which will be separated by the text given by
+    <code>AuthorLastSeparator</code>.
+    If the property <code>AuthorLastSeparatorInText</code> is given, it overrides the former for citations of the
+    in-text
+    type. This makes it possible to get citations like <code>(Olsen & Jensen, 2008)</code> and <code>Olsen and
+        Jensen (2008)</code>
+    for the same style.
+</p>
+
+<p>[Year] is the result of looking up the field or fields given in the [YearField] property.</p>
+
+<p>An in-text citation is composed as follows:<br/>
+    <code>[Author][InTextYearSeparator][BracketBefore][Year][BracketAfter]</code><br/>
+    where [Author] and [Year] are resolved in exactly the same way as for the parenthesis citations.
+</p>
+
+<p>If two different cited sources have the same authors and publication year, and author-year citations are used,
+    their markers will need modification in order to be distinguishable. This is done automatically by appending a
+    letter after the year for
+    each of the publications; 'a' for the first cited reference, 'b' for the next, and so on.
+    For instance, if the author "Olsen" has two cited papers from 2005, the citation markers will be modified to
+    <code>(Olsen, 2005a)</code> and <code>(Olsen, 2005b)</code>. In the bibliography
+    layout, the placement of the "uniquefier" letter is indicated explicitly by inserting the virtual field
+    <code>uniq</code>.</p>
+
+<p>If several entries that have been "uniquefied" are cited together, they will be grouped in the citation
+    marker. For instance, of the two entries in the example above are cited together, the citation marker will
+    be <code>(Olsen, 2005a, b)</code> rather than <code>Olsen, 2005a; Olsen, 2005b)</code>. The grouped uniquefier
+    letters (a and b in our example) will be separated by the string specified by the <code>UniquefierSeparator</code>
+    property.
+</p>
+
+<p>Author-year citations referring more than one entry will by default be sorted chronologically. If you wish them
+    to be sorted alphabetically, the citation property <code>MultiCiteChronological</code> should be set to
+    <code>false.</code>.</p>
+
+
+<h3>Reference list layout</h3>
+
+<p>The <b>LAYOUT</b> section describes how the bibliography entry for each entry type in JabRef
+    should appear. Each line should start with either the name of a BibTeX entry type, or the word
+    <code>default</code>, followed by a '='. The <code>default</code> layout will be used for all
+    entry types for which an explicit layout hasn't been given.</p>
+
+<p>The remainder of each line defines the layout, with normal text and spaces appearing literally
+    in the bibliography entry. Information from the BibTeX entry is inserted by adding <code>\field</code> markers
+    with the appropriate field name (e.g. <code>\author</code> for inserting the author names). Formatting
+    information for the field can be included here, following JabRef's standard export layout syntax.
+    Refer to <a href="http://jabref.sourceforge.net/help/CustomExports.php">JabRef's documentation on custom export
+        filters</a>
+    for more information about which formatters are available.</p>
+
+<p>If author-year citations are used, you have to explicitly specify the position of the "uniquefier" letter
+    that is added to distinguish similar-looking citations. This is done by including a marker for the virtual field
+    <code>uniq</code>, typically right after the year (as shown in the example style file). The <code>uniq</code>
+    field is automatically set correctly for each entry before its reference text is laid out.
+</p>
+
+<p>To indicate formatting in the bibliography, you can use the HTML-like tag pairs <b> </b>,
+    <i> </i>, <sup> </sup> and <sub> </sub> to specify bold text,
+    italic text, superscript and subscript, respectively.</p>
+
+<p>If you are using numbered citations, the number for each entry will be automatically inserted at the start
+    of each entry in the reference list. By default, the numbers will be enclosed in the same brackets defined for
+    citations. The optional citation properties <code>BracketBeforeInList</code> and
+    <code>BracketAfterInList</code> override <code>BracketBefore</code> and <code>BracketAfter</code> if set. These
+    can be used if you want different types of brackets (or no brackets) in the reference list. Note that these need
+    not be brackets as such - they can be any combination of characters.</p>
+
+<h2>Known issues</h2>
+
+<ul>
+    <li>Make sure to save your Writer document in OpenDocument format (odt). Saving to Word format will lose your
+        reference marks.
+    </li>
+    <li>There is currently no support for footnote based citations.</li>
+    <li>The cursor may be poorly positioned after inserting a citation.</li>
+    <li>Copy-pasting the example style file directly from this page can give an unparseable file. To avoid this, instead
+        download the example file from the link in the download section.
+    </li>
+</ul>
+
+</body>
+</html>
diff --git a/src/help/OwnerHelp.html b/src/help/OwnerHelp.html
index 1b3bbce..5e8ec1e 100644
--- a/src/help/OwnerHelp.html
+++ b/src/help/OwnerHelp.html
@@ -1,20 +1,20 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>The 'owner' field</h1>
-
-    <p>JabRef can optionally mark all new
-    entries added or imported to a database with your username. You
-    can disable or enable this feature by entering <b>Preferences
-    -> General</b>, and you can also change the name used to
-    mark your entries. The default name used is your user name.</p>
-
-    <p>The name will be added in a field called 'owner', which by
-    default is visible in the <b>General fields</b> tab in the
-    Entry Editor.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>The 'owner' field</h1>
+
+    <p>JabRef can optionally mark all new
+    entries added or imported to a database with your username. You
+    can disable or enable this feature by entering <b>Preferences
+    -> General</b>, and you can also change the name used to
+    mark your entries. The default name used is your user name.</p>
+
+    <p>The name will be added in a field called 'owner', which by
+    default is visible in the <b>General fields</b> tab in the
+    Entry Editor.</p>
+</body>
+</html>
diff --git a/src/help/PreviewHelp.html b/src/help/PreviewHelp.html
index cbf1d9b..ef6629d 100644
--- a/src/help/PreviewHelp.html
+++ b/src/help/PreviewHelp.html
@@ -1,21 +1,21 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Entry preview setup</h1>
-
-    <p>The entry preview is created using
-    the same mechanism as used by the
-    <a href="CustomExports.html">Custom export filter</a> facility.
-    When previewed, an entry is processed using one of the two
-    alternative layouts (you can switch between the two layouts by
-    pressing F9) to produce HTML code which is displayed by the
-    preview panel. To modify the appearance and contents of the
-    preview you need to edit the preview layouts using the syntax
-    described in the help file on
-    <a href="CustomExports.html">Custom export filters</a>.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Entry preview setup</h1>
+
+    <p>The entry preview is created using
+    the same mechanism as used by the
+    <a href="CustomExports.html">Custom export filter</a> facility.
+    When previewed, an entry is processed using one of the two
+    alternative layouts (you can switch between the two layouts by
+    pressing F9) to produce HTML code which is displayed by the
+    preview panel. To modify the appearance and contents of the
+    preview you need to edit the preview layouts using the syntax
+    described in the help file on
+    <a href="CustomExports.html">Custom export filters</a>.</p>
+</body>
+</html>
diff --git a/src/help/RemoteHelp.html b/src/help/RemoteHelp.html
index d24ba62..0807333 100644
--- a/src/help/RemoteHelp.html
+++ b/src/help/RemoteHelp.html
@@ -1,41 +1,41 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Remote operation</h1>
-
-    <p>This feature can be toggled and
-    configured under <b>Preferences -> Advanced</b>.</p>
-
-    <p><i>Note that activating this feature under Windows XP SP2
-    (and possibly other configurations) may prompt a message box
-    stating that certain features of the program have been blocked
-    by the Windows firewall. You can safely tell the firewall to
-    keep blocking - the firewall will not interfere with remote
-    operation of JabRef.</i></p>
-
-    <p>If listening for remote operation is enabled, JabRef will at
-    startup attempt to start listening to a specific port. This
-    means that other applications can send information to JabRef
-    through this port. JabRef will only accept local connections,
-    to avoid the risk of interference from outside.</p>
-
-    <p>Binding to this port makes it possible for a second JabRef
-    instance to discover that the first one is running. In this
-    case, unless specifically instructed to run in stand-alone
-    mode, the second JabRef instance will pass its command line
-    options through the port to the first JabRef instance, and then
-    immediately quit.</p>
-
-    <p>The first JabRef instance will read the command line
-    options, and perform the indicated actions, such as reading or
-    importing a file, or importing a file to the currently shown
-    database. If a file is imported using the command-line option
-    <code>--importToOpen</code>, the imported entries will be added
-    to the currently shown database. If no database is open, a new
-    one will be created.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Remote operation</h1>
+
+    <p>This feature can be toggled and
+    configured under <b>Preferences -> Advanced</b>.</p>
+
+    <p><i>Note that activating this feature under Windows XP SP2
+    (and possibly other configurations) may prompt a message box
+    stating that certain features of the program have been blocked
+    by the Windows firewall. You can safely tell the firewall to
+    keep blocking - the firewall will not interfere with remote
+    operation of JabRef.</i></p>
+
+    <p>If listening for remote operation is enabled, JabRef will at
+    startup attempt to start listening to a specific port. This
+    means that other applications can send information to JabRef
+    through this port. JabRef will only accept local connections,
+    to avoid the risk of interference from outside.</p>
+
+    <p>Binding to this port makes it possible for a second JabRef
+    instance to discover that the first one is running. In this
+    case, unless specifically instructed to run in stand-alone
+    mode, the second JabRef instance will pass its command line
+    options through the port to the first JabRef instance, and then
+    immediately quit.</p>
+
+    <p>The first JabRef instance will read the command line
+    options, and perform the indicated actions, such as reading or
+    importing a file, or importing a file to the currently shown
+    database. If a file is imported using the command-line option
+    <code>--importToOpen</code>, the imported entries will be added
+    to the currently shown database. If no database is open, a new
+    one will be created.</p>
+</body>
+</html>
diff --git a/src/help/RevisionHistory.html b/src/help/RevisionHistory.html
index d92409b..9d4e0cf 100644
--- a/src/help/RevisionHistory.html
+++ b/src/help/RevisionHistory.html
@@ -1,1661 +1,1669 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-  <h1>Revision history</h1>
-    <h3>2.9</h3>
-    <ul>
-    <li>Fixed bug: in OO/LO reference lists, entries may fall out when multiple entries with same
-      author and year are cited.</li>
-    <li>Added support for converting HTML combining accents to LaTeX</li>
-    <li>When generating subdatabase from AUX file, preamble and strings are now included from
-      the source database.</li>
-    <li>Added cleanup action for removing redundant $, {, and }</li>
-    <li>Fix for removing starting and ending spaces in the page number cleanup action</li>
-    <li>Fix for a more liberal detection in the month cleanup action</li>
-    </ul>
-    <h3>2.9 beta 2</h3>
-    <ul>
-      <li>Can control if the HTML converter should create subscripts and superscripts
-      as text or an equation via the preferences</li>
-      <li>Added initial support for adding curly brackets {} for certain
-        key words to keep the character case independent of .bst, e.g., for
-        names and abbreviations (use via "Cleanup entries") and can be controlled 
-        via preferences if it should be used at searches</li>
-      <li>Fixed author and DOI import from IEEE Xplore.</li>
-      <li>Improved import of equations in IEEE Xplore titles handling images, (sub) and /spl / representations</li>
-      <li>Rewrote the HTML import in a more general way. A few characters need to be added.</li>
-      <li>IEEE Xplore abstract fetching should now be working again.</li>
-      <li>Added DOI to BibTex entry fetcher.</li>
-      <li>Added ADS (The SAO/NASA Astrophysics Data System) fetcher by Ryo Igarashi (patch #120).</li>
-      <li>Reintroduced Google Scholar and ACM portal fetcher with entry preview to reduce server load.</li>
-      <li>Added alternate entry fetcher type where a preview can be displayed so the user can choose
-        which entries to download. This can reduce server load significantly and prevent users from
-        getting locked out of search services.</li>
-      <li>Fix for exception and minor bugs in HTML import parsing (patch 3575998 by Daniel Sv�rd)</li>
-      <li>HTML import handles more characters. Cleanup can also do HTML cleanup. (Patch 3582375 by Oscar Gustafsson)</li>
-      <li>During file renaming: More illegal characters are removed (idea by Sarel Botha)</li>
-      <li>Rudimentary support for IEEEtranBSTCTL added (patch 3582376 by Oscar Gustafsson)</li>
-      <li>":" is not filtered from the BibTeX keys any more (patch 3582376 by Oscar Gustafsson)</li>
-      <li>Changed internal look&feel setting (based on patch 3580605)</li>
-      <li>Custom importers nested in jars should be supported now (bug 3582838)</li>
-      <li>PDFContentImporter uses the DOI fetcher to fetch the BibTeX for the entry (if a DOI exists at the first page).</li>
-      <li>Moved migration of legacy PDF/PS fields from legacy tools to clean up dialog.</li>
-      <li>MHT files can now also be linked by drag'n'drop without the need to configure "external file types".</li>
-      <li>Adds support for Ubunut's global menu and HUD integration by using java-swing-ayatana (feature #796).</li>
-      <li>Updates PostgreSQL support to PostgreSQL 9.2</li>
-    </ul>
-    <h3>2.9 beta</h3>
-    <ul>
-      <li>Replaced notification dialog after moving/renaming linked file by status message.</li>
-      <li>Replaced dialog warnings about empty/duplicate key in entry editor by status line messages,
-      to prevent lockup if Save button is pressed directly.</li>
-      <li>Replaced window icon with 48x48 image.</li>
-      <li>Added local undo/redo handling for entry editor text fields.</li>
-      <li>Added special field functionality for ranking, marking as relevant,
-      marking as quality assured, and prioritizing. Can be enabled by "Entry table columns".
-      Based on the work by Igor Chernyavsky, Florian Straßer, and Marius Kleiner.</li>
-      <li>Added PDF preview functionality to the preview panel. Configurable via "Entry preview" settings.</li>
-      <li>Group edit dialog now closes when Escape is pressed.</li>
-      <li>Fixed MS bib import, month was lost on import.</li>
-      <li>Generate key action in entry editor now honors key overwrite settings.</li>
-      <li>Fixed bug when importing XMP data from PDF, file will now be linked from the new entry.</li>
-      <li>Fixed bug in layout processing - quoted formatter argments are now handled correctly.</li>
-      <li>Fixed bug 3545394: null and curly brackets in custom export filter.</li>
-      <li>Added "Manage keywords" popup menu to manage common keywords of selected entries.</li>
-      <li>Added support for pushing citations to TeXstudio (requires TeXstudio >=2.4)</li>
-      <li>Text-based citations can now be imported using FreeCite by Brown University
-      (http://freecite.library.brown.edu). By Kai Mindermann and Daniel Maurer.</li>
-      <li>JabRef supports synchronization of unlinked PDFs. Feature request "[2163626] Scan database - find unlinked files".
-      Based on patch 3122104. </li>
-      <li>Added command line argument -d/-prdef for resetting preferences to default values. Can
-      reset a comma-separated list of preference values, or all values.</li>
-      <li>Added small right-click popup menu at each tab</li>
-      <li>A PDF can also be dropped to the preview panel to trigger linking it</li>
-      <li>Drag'n'drop of text from the preview panel to other applications is now working</li>
-      <li>Added highlighting in preview area for search text (based on patch 3121914 by
-      Maximilian Lengsfeld).</li>
-      <li>New context menu option "Switch preview layout" in the preview panel. </li>
-      <li>BibTeX key generator patterns can now be stored in per database (implements feature 3495993)</li>
-      <li>Braces around author names are now dropped internally. They remain in the .bib though
-      Effects (incomplete list): Authors in the main window are shown without braces,
-      autocompletion does not show these braces</li>
-      <li>Autocompletion: ";" is now also a delimiter allowing "keyword1; keyword2" in the keyword fields</li>
-      <li>Autocompletion: the amount of characters to trigger autocompletion may now be configured
-      (default is 2)</li>
-      <li>Autocompletion: in case lower case letters are used, the search is case-insenstive,
-      otherwise the search is case sensitive.</li>
-      <li>Autocompletion: new preference to choose how to deal with first names 
-      (always full/always abbreviated/both full and abbreviated)</li>
-      <li>Added functionality "clean up entries" 
-      - Includes clean up DOI functionality by Florian Straßer and Marius Kleiner
-        (move of DOIs from ee, note, and url field is supported)
-      - Option to rename PDF of entry according to configured PDF-naming-scheme
-        (by Florian Straßer and Marius Kleiner)
-      - make file paths relative
-      - clean up month (functionality based on patch 3470076 by Mathias Walter)
-      - clean up pages
-      - fix superscripts</li>
-    <li>New "ISBN to BibTeX" fetcher. Uses the online "ISBN to BibTeX Converter" service by Manas Tungare.</li>
-    <li>Added support for drag'n'drop of tabs by Florian Straßer and Marius Kleiner.</li>
-    <li>PDF import dialog now always stores settings: checkbox removed</li>
-    <li>float search now also jumps to first entry if entry editor is opened</li>
-    <li>usability improvements of "content selectors"</li>
-    </ul>
-  <h3>Version 2.8.1</h3>
-    <ul><li>New DBLP fetcher. Patch 3462232 by Sascha Hunold.</li>
-    <li>Disabled ACM portal fetcher to avoid users of getting banned.</li>
-    <li>Fixed bug in PostgreSQL export/import.</li>
-    <li>Improved handling of file fields written in the style exported from Zotero.</li>
-    </ul>
-  <h3>Version 2.8</h3>
-  <ul><li>Applied Oscar Gustafsson's fix for IEEEXplore fetcher.</li>
-    <li>Added capability to remove databases from SQL database.</li>
-    <li>Fixed customization of entries in Biblatex mode.</li>
-  </ul>
-  <h3>Version 2.8 beta 2</h3>
-  <ul><li>Improvements to SQL export and import. Fixed bug where subsequent exports to same
-      database would fail. Can now save multiple bib bases to a single SQL database.</li>
-    <li>"abbr" modifier in BibTeX key generator now skips parentheses.</li>
-    <li>Minor change to FirstPage formatter. Now splits at spaces as well as hyphens,
-      and returns original field content if only one page number is found.</li>
-    <li>When using the preferences import command line option, preferences are now imported
-      before load/import/export operations are handled.</li>
-    <li>Applied Nicolas Pavillon's patch for proper keystroke handling on Mac OS X.</li>
-    <li>Applied Ivanilton Polato's patch for handling multi-line fields in CSV export.</li>
-    <li>Fixed bug: "Send as Email" did not handle absolute paths correctly.</li>
-    <li>Fixed bug 3472991: Search: "Highlight Words" inconsistent.</li>
-    <li>Fixed bug 2933201: Exporting InProceedings to Word 2007.</li>
-    <li>Fixed bug 3146059: Error in translating author field to MS Office.</li>
-    <li>Fixed bug: entering field names containing capital letters in table columns tab
-      in Preferences makes the columns empty.</li>
-  </ul>
-  <h3>Version 2.8 beta</h3>
-  <ul><li>Fixed issues with ACM portal fetcher using Benjamin Langmann's patch, plus an
-      additional minor fix.</li>
-    <li>A large list of journal abbreviations is now loaded by default.</li>
-    <li>Added global option to allow file links relative to the bib file location, in addition
-      to the global or database- or user-specific file directory.</li>
-    <li>Fixed bug 3434674: Reviewing changes overwrites groups.</li>
-    <li>Integrated the plugin for interaction with OpenOffice/LibreOffice as a standard part
-      of JabRef.</li>
-    <li>Added keyboard shortcuts Ctrl-Up and Ctrl-Down to move file links up and down in a list
-      of external links in the entry editor.</li>
-    <li>Applied "bjoerntm"'s patch for making the loading of group information less sensitive
-      to white space, in order to prevent trouble loading files written by other tools.</li>
-    <li>Added optional autocompletion of author/editor last names in search field.</li>
-    <li>Changed entry fetcher system so all fetchers are accessed from a single side pane
-      component with a selector.</li>
-    <li>Added INSPIRE fetcher by Sheer El-Showk.</li>
-    <li>Improved error handling when importing in specific format.</li>
-    <li>Prevented crash when calling invalid import format on startup.</li>
-    <li>Improved duplicate detection.</li>
-    <li>Added markers \filename and \filepath for ".begin.layout" and ".end.layout" files
-      in order to output the name or full path of the bib file of the exported database.</li>
-    <li>Fixed possible array index exception in LastPage formatter.</li>
-    <li>Improved author/editor normalization in entry editor.</li>
-    <li>Added metadata extraction from text when PDFs are dragged into JabRef.</li>
-    <li>The filename pattern for renaming a file when dropping a PDF can now be
-      configured at "Options"/"Preferences"/"Import"/"File name format pattern".</li>
-    <li>The defaults of the ImportDialog shown when PDFs are dragged into JabRef
-      can now be configured at "Options"/"Preferences"/"Import". It is possible to
-      override showing the ImportDialog.</li>
-    <li>An entry can be sent by a right click on an entry and select "Send as Email"
-      (patch 3306271).</li>
-    <li>Added option to "copy BibTeX key and title" (patch 3370471).</li>
-    <li>The command for pushing to emacs can be configured now. New command for Emacs 23.
-      New default for Windows: emacsclient.</li>
-    <li>Added export support for DIN1505 style (based on patch 1874662).</li>
-    <li>Added support for PostgreSQL import/export (patch 3368760 by Fred Stevens).</li>
-    <li>Added formatter "JournalAbbreviator" (patch 3013311 by Meigel).</li>
-    <li>RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
-      (patch 2905383 by Russell Almond).</li>
-    <li>Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).</li>
-    <li>ToggleButton added to GroupSelector to ease adding/removing references to/from groups
-      (based on patch 3313564 updated by Andreas Schlicker).</li>
-    <li>Export filter "tablerefsandbib" updated to contain links to files and notes
-      (patch 2787096 by Thomas Arildsen).</li>
-    <li>"of" added to the list of skip words (patch 2781830).</li>
-    <li>Added cli-function for exporting entries filtered by a search term
-      (patch 1817093 by Silberer, Zirn)</li>
-    <li>Added highlighting in textarea for search text (patch 3117881 by Ben).
-      Slightly modified to cope with words[]={""}, support for "BibTeX source" tab, and that
-      "Clear" also clears the highlighting.</li>
-    <li>Added highlighting in preview area for search text (based on patch 3121914 by
-      Maximilian Lengsfeld).</li>
-    <li>Switched from PDFBox 0.7.3 to PDFBox 1.6.0.</li>
-  </ul>
-
-  <h3>Version 2.7.2</h3>
-    <ul><li>Fixed bug that prevented search functions from working under Java 7.</li></ul>
-
-  <h3>Version 2.7.1</h3>
-    <ul>
-    <li>Fixed problem with search function under Java 7.</li>
-    <li>Made Database properties dialog modal to prevent database from being closed
-      while properties window is open.</li>
-    <li>Fixed error handling in custom import dialog when invalid jar files or class
-      files are specified.</li>
-    <li>Added OR operator for conditional export formatting.</li>
-    <li>DocBook export format switched to 4.4 (based on patch 3313898).</li>
-    <li>Fixed bug that made the key generator combination [shorttitle:abbr] return
-      only a single letter.</li>
-    <li>"of" added to the list of skip words (patch 2781830).</li>
-    <li>Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).</li>
-    <li>RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
-      (patch 2905383 by Russell Almond).</li>
-    <li>Fixed bug that made menu items for marking in specific colors invisible
-      under Windows 7.</li>
-    <li>In case a new entry is added, this entry is highlighted and the editor is opened
-      if configured in the settings (patch 3370466). The UI behavior of adding an entry
-      at "new entry from plain text" is now similar to "new entry".</li>
-    <li>Fixed bug in focus handling that affected some actions.</li>
-    <li>Running JabRef under the Oracle JVM will no longer give a warning.</li>
-    </ul>
-
-  <h3>Version 2.7</h3>
-    <ul>
-    <li>Medline importer now wraps multipart last names in braces.</li>
-    <li>RIS importer now handles multiple title fields by concatenation.</li>
-    <li>Disallowed "comment" as entry type name, since this conflicts with the BibTeX format.</li>
-    <li>Fixed handling of suffix name parts (Jr, etc.) in Medline importer.</li>
-    <li>Added optional second numeric argument to Authors formatter, which determines
-      how many authors are shown if the maximum number is exceeded.</li>
-    <li>Added content selector for "review" field in entry editor.</li>
-    <li>Improved detection of file type when adding new link. Can now recognize double
-      extensions such as ".ps.gz".</li>
-    <li>Improved autocompletion of author names. Added options to complete either in
-      'Firstname Lastname' or 'Lastname, Firstname' formats, or in both.</li>
-    <li>Fixed bug in import function if no suitable import filter is found.</li>
-    </ul>
-
-  <h3>Version 2.7beta 2</h3>
-    <ul>
-	<li>Added support for MrdLib lookup or metadata extraction when PDFs are dragged
-	into JabRef.</li>
-    <li>Added option under "External programs" for disabling the automatic opening of the
-      Browse dialog when creating a new file link.</li>
-    <li>Fixed shortcut key collision. Shortcut for Import to new database is now Ctrl-Alt-I.</li>
-    <li>The "Open URL or DOI" action now uses URL links in the "file" field as fallback if
-      no links are found in the "url" or "doi" fields.</li>
-    <li>Restricted remote listener port numbers to interval 1025-65535.</li>
-    <li>Added Japanese translation by Koji Yokota.</li>
-    <li>Added scrollbar to entry editor when it is too high to fit in its panel. Patch
-      by Matthias Erll.</li>
-    <li>Made it possible to copy entries from the search dialog.</li>
-    <li>Added proper error message when trying to search with invalid regular expression.</li>
-    <li>Added error dialog on startup if custom look and feel cannot be loaded.</li>
-    <li>Applied Alexander Hug's patch for correctly importing doi from ScienceDirect RIS files.</li>
-    <li>Removed potential NullPointerException in SearchExpressionTreeParser.</li>
-    </ul>
-
-    <h3>Version 2.7beta</h3>
-    <ul>
-	<li>Some improvements to MS Office export filter.</li>
-	<li>Introduced three choices for ensuring unique generated keys. The default one (marking
-      	with a, b, etc.), a modified one (marking with b, c, etc.) and always adding a letter
-      	(a, b, etc.).</li>
-	<li>Font and background colors are now customizable in the entry editor (Options ->
-      	Preferences -> Appearance).</li>
-	<li>Window title now includes the full path to the current file.</li>
-	<li>Entries can now be marked in a series of different colors. Automarking of imported
-	entries is now done in separate color without affecting other marked entries.</li>
-	<li>Added new feature (Tools -> Scan database... -> Resolve duplicate BibTeX keys) to
-	search for duplicate keys and offer to generate new keys to resolve the duplicates.
-	Instead of being listed in a warning dialog after opening a bib file, duplicate keys
-	now trigger a dialog asking whether the user wants to resolve the duplicates.</li>
-	<li>Added check that ensures that application doesn't quit while a large save operation
-	is still in progress. Shows wait message with cancel button.</li>
-	<li>Added apostrophe (') as illegal character in BibTeX keys.</li>
-	<li>BibTeX strings that refer each other are now sorted correctly when saving bib file.</li>
-	<li>Fixed bug in merging external changes - file would still be reported as modified
-	externally after merging changes.</li>
-	<li>Fixed bug in Move/rename file link feature that could cause the wrong link to be
-	stored for certain directory structures.</li>
-	<li>Fixed bug: curly braces can now be used in arguments to formatters. </li>
-	<li>Fixed lockup bug when generating key for entries with crossref fields.</li>
-	<li>BibTeX strings are now resolved before attempting to (un)abbreviate journal names.</li>
-	<li>Modified [shorttitle] and [veryshorttitle] key generator markers so they consider
-	a hyphen a word boundary, and remove punctuation characters (keep only numbers and
-	letters).</li>
-	<li>deprecate various export formatters with new Authors formatter, which provides flexible formatting options.</li>
-    </ul>
-
-    <h3>Version 2.6</h3>
-    <ul>
-        <li>Fixed IEEExplorer and ACM fetchers to adapt to web site changes.</li>
-        <li>Active preview (1 or 2) is now remembered.</li>
-        <li>Applied patch by Igor L. Chernyavsky. to prevent loss of entry selection after
-            generating key.</li>
-        <li>Changed OpenDocument Spreadsheet export so the mimetype file is written correctly
-            at the start of the zip file.</li>
-        <li>Fixed bug when importing preferences: custom export filters would not be updated
-            after import.</li>
-        <li>Changed help page loading procedure so help pages can be loaded for plugin entry
-            fetchers.</li>
-        <li>Made it possible to define customized entry types with either-or conditions on
-            required fields, e.g. using a pseudo-field called "author/editor" will indicate
-            that the entry requires either the "author" or the "editor" field set.</li>
-        <li>Fixed bug: entries of a customized type could be indicated as complete even if
-            BibTeX key was not set.</li>
-        <li>Changed deletion process for some temporary files to avoid leftover files.</li>
-    </ul>
-
-    <h3>Version 2.6beta3</h3>
-    <ul>
-        <li>Added ScienceDirect entry fetcher that utilizes the BibSonomy scraper.</li>
-        <li>Changed non-native file dialog setting so files cannot be renamed. This prevents
-          accidentally entering rename mode when trying to enter directory. Can be enabled
-          again in Options -> Preferences -> Advanced.</li>
-        <li>Added new JStor fetcher that utilizes the BibSonomy scraper to obtain BibTeX data.</li>
-        <li>Fixed bug in CookieHandlerImpl.</li>
-        <li>Fixed bug; when dragging a file into JabRef and asking to move it to the file
-          directory, warning will now be given if the destination file already exists. Patch
-          by Alastair Mailer.</li>
-        <li>When dragging a file into JabRef and asking to copy or move it to the file directory,
-          it is now possible to rename to an arbitrary name. Patch by Alastair Mailer.</li>
-        <li>Added "review" field to BibTeXML export.</li>
-        <li>Added Reset button to entry fetchers. Patch by Dennis Hartrampf and Ines Moosdorf.</li>
-        <li>Changed Microsoft Office XML export so "number" rather than "issue" is exported
-          as <b:Issue>, which conforms with import format.</li>
-        <li>Added confirmation dialog that allows saving without backup in cases when
-          backup creation fails.</li>
-        <li>Fixed bug 2938562: using the move/rename feature on a file link could give an
-          absolute link even if the file was put below the main file directory.</li>
-        <li>Fixed bug 2931293: error generating key with [authorsAlpha] for short names.</li>
-        <li>When checking for external modifications, file size is now checked in addition
-          to the time stamp.</li>
-        <li>Fixed handling of maximised state when shutting down and starting up JabRef.
-          Patch by Igor L. Chernyavsky.</li>
-        <li>Fixed bug that prevented correct handling of DOS short file names. Patch
-          by Igor L. Chernyavsky.</li>
-        <li>Added support for KOI8_R character set.</li>
-        <li>Removed DocumentPrinter class, using standard API functions instead. Patch by
-          Tony Mancill.</li>
-        <li>Removed HightlightFilter class, using standard API functions instead. Patch by
-          Tony Mancill.</li>
-        <li>Changed keyboard shortcut for IEEXplorer search to Alt-F8.</li>
-        <li>Disabled JStor search, which doesn't work due to API changes.</li>
-        <li>External file type manager now removes "." prefix in file type extension if the user
-          has typed it that way.</li>
-        <li>Preview panel now defaults to preview layout 1 instead of 2. Switched default layouts.</li>
-        <li>Added IfPlural formatter by Russell Almond. The formatter outputs its first argument
-          if the input field contains " and " and the second one otherwise.</li>
-        <li>Applied patch by Philipp Cordes and Björn Kahlert for improved handling of names by
-          autocompleter. The patch also reorganizes the autocompleter classes.</li>
-        <li>Table will now scroll to keep the currently edited entry visible if an edit leads to
-          the entry getting sorted to a different position.</li>
-        <li>Reworked author and editor handling in Docbook export. Added Docbook XML header.</li>
-        <li>Database will no longer be marked as changed after accepting external changes, unless one or
-          more changes were not accepted before merging, and unless database was already marked as
-          changed.</li>
-        <li>Fixed bug: undesired autocompletion when saving file.</li>
-        <li>Fixed bug: entry editor doesn't appear when new entry is added while a filtering search or
-          group selection is active.</li>
-        <li>Fixed bug in writing of metadata on Windows. For certain metadata lengths newlines would be
-          messed up after the metadata comment in a bib file.</li>
-        <li>Search dialog now automatically previews first hit, and hides preview if there are no hits.</li>
-    </ul>
-
-    <h3>Version 2.6beta2</h3>
-    <ul>
-        <li>Added export formatter "Default" which takes a single argument. Outputs the string to format
-          unchanged if it is non-empty, otherwise outputs the argument.</li>
-        <li>Added option under Options -> Preferences -> General for disabling the strict enforcing of
-          correct BibTeX keys. Disabling this makes it possible to use e.g. umlaut characters in keys.</li>
-        <li>Modified launcher script for Windows installer to give higher heap size limit.</li>
-        <li>Improved autocompletion. All fields with autocompletion which have content selectors will now
-          autocomplete on content selector values. For the "journal" field, the autocompleter will now
-          additionally use entries from the current journal abbreviations list, and will also complete
-          on the entire field up to the cursor rather than just looking at the last word only.</li>
-        <li>Added support for postformatter in Layout. The postformatter will be run after
-          the formatters called from a layout.</li>
-        <li>Improved group autogeneration. Added option to generate groups based on author or editor
-          last names. Autogenerated groups are now alphabetized.</li>
-        <li>Modified Endnote export filter so "--" gets converted to "-" in the "pages" field.</li>
-        <li>Changed keyword groups so they will match on whole words only. E.g. a keyword group for the
-          keyword "can" will no longer match the keyword "scanner".</li>
-        <li>Improved entry type determination and author parsing for some varieties of CSA files.</li>
-        <li>Minor change to Harvard RTF export. Added space after "ed.", and added editor to output for
-          inbook entries.</li>
-        <li>Set limit to the number of displayed characters in group names in groups tree in order to
-          avoid group panel width problems.</li>
-        <li>Changed file link handling so all remote links classified as URL can be opened through
-          the browser. Setting a different file type manually makes JabRef call a remote link using
-          the handler application instead.</li>
-        <li>Modified Endnote/refer import filter to strip "doi:" from the %R field.</li>
-        <li>Modified HTML conversion so single newline is displayed in the preview (and HTML exports) as
-          <br>, while multiple newlines are displayed as <p>.</li>
-        <li>Fixed bug: switching entry editor between entries of different type may result in switching
-          of entry editor tabs.</li>
-        <li>Fixed bug: adding external file link leads to relative path from root directory if file
-          directory is set to an empty string.</li>
-        <li>Fixed error message when a # in a BibTeX string prevents saving. No longer states that the
-          problem is in an entry, but specifies that it is in a string.</li>
-        <li>Fixed bug: ODS export doesn't resolve BibTeX strings.</li>
-        <li>Fixed bug: content selector for "editor" field uses "," instead of " and " as delimiter.</li>
-        <li>Fixed bug: editing source doesn't allow change of entry type.</li>
-        <li>RTFChars formatter now converts --- to \emdash and -- to \endash.</li>
-    </ul>
-
-    <h3>Version 2.6beta</h3>
-
-    <ul>
-        <li>Added pages information to several entry types in Endnote export.</li>
-        <li>Modified LastPage formatter so it returns the number when only the number of pages is given.</li>
-        <li>Modified search algorithms so LaTeX commands are removed before search. For instance, this
-            means that the value "test \textit{case}" now matches the search string "test case".</li>
-        <li>Changed default table font family to "SansSerif".</li>
-        <li>Can now create lock file while writing a bib file. The lock file is checked before
-            saving, and before scanning an externally changed file, in order to avoid reading an
-            unfinished file.</li>
-        <li>Added support for dragging a file link from the file column to another application.</li>
-        <li>Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.</li>
-        <li>Improved ISI import filter so DOI information is included.</li>
-        <li>Fixed bug: metadata changes would not be detected as external changes to a database.</li>
-        <li>Fixed bug: when accepting external changes and not saving before new changes are
-            detected, the previously accepted changes would also be listed.</li>
-        <li>Fixed bug in Scifinder import where an empty Inventor field could overwrite the
-            author field.</li>
-        <li>Fixed bug in autocompleter. Current suggested completion would be added to the field
-            if the user closed the entry editor or mouse clicked on another field.</li>
-        <li>Fixed problem with exporting to some MySql versions. Patch by François Dorin.</li>
-        <li>Fixed bug in handling of LaTeX character sequences - now sequences with = as command
-            character (e.g. "\={A}") are recognized.</li>
-        <li>Fixed bug: gray out / hide setting in groups panel is overridden on startup
-            by search mode selection. Added separate prefs key for the groups setting.
-            Fix suggested by Igor L. Chernyavsky.</li>
-        <li>Fixed bug: cookie manager installed by Download button in file field editor throws
-            an exception when trying to fetch from Medline.</li>
-        <li>Fixed bug: temporary files don't get deleted on shutdown.</li>
-        <li>Disabled table column reordering in import inspection window, since a user reported
-            problems when using this.</li>
-        <li>Changed years from 2008 to 2009 in splash image.</li>
-    </ul>
-    <h3>Version 2.5 (June 22nd, 2009)</h3>
-    <ul>
-        <li>Modified export layout procedure so missing formatters can be reported in the error
-          output. Export now succeeds with warnings added where formatters are missing.</li>
-        <li>Conditional blocks (\begin{field}...\end{field}) in layout files can now be given a
-          semicolon-separated list of fields as argument. All fields must then be set for output
-          to be given.</li>
-        <li>Changed RIS import so multiple abstract fields in an entry are concatenated.</li>
-        <li>Added quoting of some special characters in SQL export, based on Kyle Crabtree's patch.</li>
-        <li>Fixed bug in MS Office 2007 XML export - editor names missing.</li>
-        <li>Fixed bug in plugin manager that prevented the "Download plugin" button from working.</li>
-        <li>Fixed bug in plugin manager routine that checks for installed versions of a plugin.</li>
-        <li>Fixed bug in startup that could show warnings multiple times when loading
-          from autosave files.</li>
-    </ul>
-    <h3>Version 2.5beta 2 (May 19th, 2009)</h3>
-    <ul>
-        <li>Plugin manager now handles plugin versions correctly based on the version number in their
-          plugin.xml file.</li>
-        <li>Added formatter "Number" that outputs a sequence number for the current entry in the current
-          export operation. This formatter can be used to produce a numbered list of entries.</li>
-        <li>Added autosave feature.</li>
-        <li>Fixed bug in file link handling in BibTeXML export.</li>
-        <li>Improved handling of patents in Scifinder import.</li>
-    </ul>
-
-    <h3>Version 2.5beta (April 21st, 2009)</h3>
-
-    <ul>
-      <li> Added Simplified Chinese translation.</li>
-      <li> Added simple plugin manager.</li>
-      <li> Added ~/.jabref/plugins as user-specific plugin directory.</li>
-      <li> Added \r marker to WrapFileLinks formatter that outputs file links without expanding relative links.</li>
-      <li> Added [authorsAlpha] key marker that formats authors according to the "alpha" BibTeX style. Patch submitted by Oliver Kopp.</li>
-      <li> Table sort order set by clicking and Ctrl-clicking table columns is now immediately set as default sort order in preferences.</li>
-      <li> Changed LyX pipe setting so it works whether ".in" is included or omitted.</li>
-      <li> Modified ISI importer so the words "of", "and" and "the" will not be capitalized in the title, journal or publisher fields.</li>
-      <li> When adding new local file link, browse dialog now appears immediately when opening file link editor, saving one mouse click.</li>
-      <li> Added "Remove all broken links" option in the resolver dialog for broken links when synchronizing file links.</li>
-      <li> Added rename option to Set/clear field dialog, to move contents from one field to another.</li>
-      <li> Added Back and Forward actions, for switching between recently edited BibTeX entries.</li>
-      <li> Added option under "Entry table" to designate fields as numeric for sorting purposes.</li>
-      <li> Added possibility for custom export filters to define their own name formatters. This is done by adding a file named "<filtername>.formatters". This file defines one formatter on each line, with each line containing the name of the formatter and the formatter definition, separated by a colon (:).</li>
-      <li> Added menu items for increasing/decreasing table font size, with shortcut keys Ctrl-plus and Ctrl-minus.</li>
-      <li> Added options to automatically mark entries imported into an existing database, and to unmark previously marked entries when importing.</li>
-      <li> Added ":(x)" modifier to key generator, specifying that the arbitrary string x should be used as a fallback value if the value returned by the field marker is empty.</li>
-      <li> Added ":upper" modifier to key generator, to force uppercase for a field marker.</li>
-      <li> Added buttons in External programs tab in Preferences for modifying settings for "Push to"-features, and removed obsolete fields.</li>
-      <li> Added support for DOI field in Endnote importer.</li>
-      <li> Added support for language and publication status fields in Medline import (publication status stored in "medline-pst" field).</li>
-      <li> Enabled cookie handling for downloading full-text articles.</li>
-      <li> Improved handling of invalid BibTeX keys containing white space. Parser will now try to piece together the key and avoid disturbing the continued parsing. Patch submitted by Stephan Lau.</li>
-      <li> Cosmetic change to the entry type label to the left in the entry editor.</li>
-      <li> Changed name handling so a single-entry name without a capital initial letter, such as "unknown", will be treated as a solitary last name rather than a von particle.</li>
-      <li> Changed table selection coloring so entries that are grayed out or marked can be distinguished from normal entries when selected.</li>
-      <li> Changed handling of "affiliation" in Medline import - now makes sure to escape # characters before storing.</li>
-      <li> Modified ACM portal fetcher due to web site changes.</li>
-      <li> Improvements to IEEEXplore fetcher - better handling of month and page fields.</li>
-      <li> Changed behaviour of source panel when an entry contains imbalanced # characters - the panel can now show the entry in its invalid form, allowing the user to fix the problem.</li>
-      <li> Improved handling of PDF files without XMP metadata - other metadata will now be retained. Patch submitted by Felix Langner.</li>
-      <li> Fixed bug in parsing file field - double spaces in file names would be reduced to single spaces, breaking the file link. Fix submitted by Uwe Kuehn.</li>
-      <li> Fixed NullPointerException when downloading external file and file directory is undefined.</li>
-      <li> Fixed bug in HTMLConverter.</li>
-      <li> Fixed NullPointerException in key generator for incomplete names.</li>
-      <li> Fixed bug in removing custom export filters.</li>
-      <li> Fixed bug 2225371: restart is no longer required after adding a new custom export filter. </li>
-      <li> Fixed bug in "Move/rename file" feature in file field editor with regard to undefined file directory.</li>
-      <li> Fixed bug in Ris importer.</li>
-      <li> Fixed NullPointerException in Endnote importer.</li>
-    </ul>
-
-
-    <h3>Version 2.4.2 (November 1st, 2008)</h3>
-
-    <ul>
-      <li>Added missing layout formatters FirstPage and LastPage.</li>
-      <li>Fixed a bug regarding ParamLayoutFormatter loaded from plugin.</li>
-      <li>Fixed crash during initalization of journal abbreviation list.</li>
-      <li>Added option to have JabRef search for external file when "Open file" function is chosen for an entry without any linked files. This is similar to what was always done in JabRef 2.3.1 and earlier.</li>
-      <li>Improved regular expression file search, so the regular expression can contain field markers as used for BibTeX key generation in addition to just regular fields. It is no longer possible to call arbitrary layout formatters, but the modifiers "upper", "lower" and "abbr" (for case conversion and abbreviation) can be used.</li>
-      <li>Ris importer now imports PB as "school" instead of "publisher" for THES entries.</li>
-      <li>Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.</li>
-    </ul>
-
-    <h3>Version 2.4.1 (October 8th, 2008)</h3>
-
-      <ul>
-        <li>Fixed bug: layout formatter arguments were not set when using a ParamLayoutFormatter loaded from plugin.</li>
-        <li>Fixed bug: when abbreviating first names, for authors with first names connected with "-", only the first letter is shown.</li>
-        <li>Enhanced ExportFormatTemplate plugins with an optional property "encoding" which overrides the default encoding with the given one.</li>
-        <li>Fixed menu colors under Windows Vista.</li>
-        <li>Fixed bug 2137771: Missing file extension when downloading.</li>
-        <li>Fixed bug 2105329: Ensure that newly added entry is visible in table.</li>
-        <li>Fixed bug 1908222: Preference "Fit table horizontally on screen" doesn't work</li>
-        <li>Fixed bug 2119059: Handling of the A1 tag in the RIS format.</li>
-        <li>Added missing help file for ACM digital library fetcher.</li>
-        <li>Added option for whether to use IEEE LaTeX journal abbreviation list.</li>
-        <li>Added tooltip to menu items in push-to-application popup menu.</li>
-      </ul>
-
-
-    <h3>Version 2.4 (September 1st, 2008)</h3>
-
-      <ul>
-        <li>Added mappings for some special characters that need to be sanitized when generating BibTeX keys.</li>
-        <li>Added ACM Digital Library fetcher by Aaron Chen.</li>
-        <li>Added new entry types (conference, patent, standard, electronic).</li>
-        <li>Improvements to IEEEXplore fetcher.</li>
-        <li>Added explanatory text to indicate that "ps" and "pdf" files are legacy features.</li>
-        <li>Fixed unexpected behaviour of "Open PDF or PS" menu item - now looks in "file" field, and does not launch search for external files.</li>
-        <li>Fixed bug 1827568: 'Save database' might not store current edit in entry editor.</li>
-        <li>Fixed bug 2027944: updating custom export definitions requires restart.</li>
-      </ul>
-
-
-    <h3>Version 2.4beta (March 12th, 2008)</h3>
-
-      <ul>
-	<li>Added "protection" flag in Database properties. When this flag is set, JabRef will refuse to save the database when the file has been externally modified, until the changes have been reviewed and partly or completely accepted.</li>
-	<li>Fixed bug where the external update notification in the side pane would remain even if the referred database was closed.</li>
-	<li>Added two new search modes - display search results in a dialog, and global search.</li>
-	<li>Support for fetching from the command line using --fetch (contributed by Jan F. Boldt and David Kaltschmidt).</li>
-	<li>Support for fetching from Spires (contributed by Fedor Bezrukov).</li>
-	<li>Support for fetching from JSTOR (contributed by Tobias Langner, Juliane Doege, Sebastian de Hoog and Christoph Jacob)</li>
-	<li>Added context menu for file list editor with options to move/rename linked file as well as to automatically move the file to file directory and optionally rename after BibTeX key.</li>
-	<li>JabRef can now be extended by plugins (using the Java Plugin Framework JPF as the underlying technology). Currently extension points exist for:
-          <ul>
-            <li>ImportFormat</li>
-            <li>ExportFormat based on Templates</li>
-            <li>ExportFormat based on IExportFormat (contributed by Kariem Hussein)</li>
-            <li>LayoutFormatter</li>
-            <li>EntryFetcher</li>
-            <li>PushToApplication</li>
-          </ul>
-           JabRef uses JPFCodeGenerator (which was written just for JabRef) to generate helper classes for making JPF easier. Current version used: 0.4 http://forge.spline.inf.fu-berlin.de/projects/jpfcodegen/
-	</li>
-	<li>Print warnings if insufficient Java version is used or if JRE is not from Sun.</li>
-	<li>Memory Stick Mode: JabRef automatically loads configuration settings from jabref.xml and also writes them there if enabled.</li>
-	<li>Improved handling of crossrefs. Fields are now resolved in preview and export.</li>
-	<li>Updated dependencies, now using: JempBox-0.2</li>
-	<li>Improved handling of ArXiv URIs.</li>
-	<li>Changed default preference value: now using import inspection dialog also when just a single entry is imported.</li>
-	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
-	<li>[ 1738920 ] Fixed: Windows Position in Multi-Monitor environment</li>
-	<li>[ 1795355 ] Fixed: LatexFieldFormatter omits "{" on beginning of optional field</li>
-	<li>[ 1297576 ] New feature: Printing of entry preview (use right-click menu)</li>
-	<li>[ 1717849 ] Fixed: Bug in aux import (contributed by Kai Eckert)</li>
-	<li>[ 1749613 ] Fixed: About translation</li>
-	<li>[ 1709449 ] Fixed: Clicking a DOI from context menu fails</li>
-	<li>[ 1869331 ] Fixed: Uninstall after silent install removes Windows start menu</li>
-	<li>[ 1723219 ] Fixed: Strange message (LyX) while installing 2.3</li>
-	<li>Added handling of unknown file types when synchronizing the file field.</li>
-	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
-	<li>Moved file preferences from General tab to new File tab.</li>
-	<li>Reduced horizontal size of preferences dialog.</li>
-	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
-	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).    </li>
-      </ul>
-
-
-    <h3>Version 2.3.1 (November 29th, 2007)</h3>
-
-      <ul>
-	<li>Removed default applications for file types under Mac OS X, and made use of the standard "/usr/bin/open <filename>" way to open files except when an application name is explicitly set.</li>
-	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
-      </ul>
-
-
-    <h3>Version 2.3 (November 8th, 2007)</h3>
-
-      <ul>
-	<li>Added handling of unknown file types when synchronizing the file field.</li>
-	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
-	<li>Moved file preferences from General tab to new File tab.</li>
-	<li>Reduced horizontal size of preferences dialog.</li>
-	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
-	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).</li>
-      </ul>
-
-
-    <h3>Version 2.3beta3 (October 6th, 2007)</h3>
-
-      <ul>
-	<li>Export formats that output the character encoding now use common names for encodings instead of Java-specific names.</li>
-	<li>Added "Open" button in external link dialog box to test or use the link.</li>
-	<li>Added formatter WrapFileLinks which iterates over file links, producing a formatted string for each containing any desired information about the file link.</li>
-	<li>Applied Fedor Bezrukov patch (setting User-Agent in URLDownload to solve ArXiv problem).</li>
-	<li>Applied Aaron Chen's patch for fixing bugs in IEEExplore fetcher.</li>
-	<li>Applied Edward Valeev's patch for handling article numbers replacing pages in Refer/Endnote import.</li>
-	<li>Added toolbar button to entry editor for writing XMP-metadata.</li>
-	<li>Added paste and drag & drop support to file list editor.</li>
-	<li>Added "authorLast" and "editorLast" markers for using last author's last name in BibTeX keys.</li>
-	<li>Added support for file field in Write XMP action.</li>
-	<li>Numeric fields (year, volume, number, pmid, citeseercitationcount) are now sorted as numbers when possible.</li>
-	<li>Improvements to the Ovid import filter.</li>
-	<li>Modified AuthorLastFirstAbbreviator and AuthorAbbreviator to accept names in both last-first and first-first format, but always return in last-first format. These two formatters are identical.</li>
-	<li>[ 1648789 ] Fixed: Problem on writing XMP when option to leave out some fields was active.</li>
-	<li>[ 1561990 ] Fixed: Exporting to WinEdt - apostrophe.</li>
-	<li>Fixed bug in entry editor: source panel edits were not properly stored when clicking a different entry in the main table.</li>
-	<li>Fixed problem with "Synchronize file links" not honouring database specific file directory.</li>
-	<li>Fixed problem with file type selection in external file link editor not being up-to-date.</li>
-	<li>Fixed problem with wrong enable/disable behaviour of Clear search button when switching between tabs.</li>
-	<li>Fixed argument parsing in AbstractParamLayoutFormatter so \t and \n can be used for tabs and newlines.</li>
-      </ul>
-
-
-    <h3>Version 2.3beta2 (August 29th, 2007)</h3>
-
-      <ul>
-	<li>When user chooses to save to an existing file, and answers that the file should not be overwritten, a new file dialog now appears instead of the operation cancelling.</li>
-	<li>Removed antialias setting for main table, because it interferes with proper rendering on LCDs when running under JRE 6. Removed non-optional antialias settings for entry editor for the same reason.</li>
-	<li>Changed external link handling so remote (http) links can be sent to the external application. Applications like Evince and Gimp can open remote links.</li>
-	<li>Replaced Simle HTML export filter with improved version by Mark Schenk.</li>
-	<li>Introduced ParamLayoutFormatter interface for layout formatters that can take an argument by the following syntax: \format[MyFormatter(argument)]{\field}. Implementing classes contain a setArgument(String) method that receives the argument (if any) before the format() method is called.</li>
-	<li>Timestamp and owner fields are now set also when appending a bib file, and new options have been introduced to control whether imported/appended/pasted entries should have these fields overwritten if already set.</li>
-	<li>Added operations for adding file links in import inspection window, and made file and URL icons in the table clickable.</li>
-	<li>Removed PDF and PS columns and operations in import inspection window (replaced by operations on the "file" field).</li>
-	<li>File field column in main table now shows file type icon instead of generic icon.</li>
-	<li>Modified Endnote export to take "file" field into account, and to resolve full paths to PDF files.</li>
-	<li>Added "Auto" button to automatically set "owner" field to the default username.</li>
-	<li>Added \encoding tag for begin/end layouts in export filters to print the name of the character encoding used for the export. The tag is not available in entry layouts.</li>
-	<li>Added \% as a supported LaTeX command, producing '%'.</li>
-	<li>Fixed bug in HTMLChars: commands like {\aa} and {\o} were not processed properly, even though defined in Globals.HTMLCHARS.</li>
-	<li>Fixed bug that made it possible to accidentally close database without saving, when error occurs during the save operation.</li>
-      </ul>
-
-
-    <h3>Version 2.3beta (June 28th, 2007)</h3>
-
-      <ul>
-	<li>Added MIS Quarterly export format.</li>
-	<li>Added support for COPAC file format.</li>
-	<li>Added RemoveTilde LayoutFormatter to deal with Bibtex non-breakable spaces.</li>
-	<li>Added autocompletion feature for author/editors and other fields.</li>
-	<li>Added feature to save all open databases.</li>
-	<li>Added support for pushing citations to Vim when Vim server is enabled.</li>
-	<li>Added missing option for specifying the path to LEd.exe.</li>
-	<li>Added -s/--nosplash command line option for disabling the splash screen.</li>
-	<li>Added new field marker [auth.etal] for key generation.</li>
-	<li>Added support in XMP metadata handling for bibtex string resolution.</li>
-	<li>When opening databases, already open files are now skipped.</li>
-	<li>Option to use native instead of Swing file dialogs is now available on all OSes.</li>
-	<li>Synchronize external links now searches entire database, not selected entries.</li>
-	<li>Medline import now adds <Affiliation> information into the "institution" field.</li>
-	<li>Improved handling of external links. The 'file' field can now specify a list of external links, and arbitrary file types are supported. Old-style PDF and PS links can be moved automatically into the 'file' field.</li>
-	<li>Fixed bug in RIS and Refer/Endnote imports. Entries with editors but no authors are now imported properly.</li>
-	<li>Fixed missing export formatter AuthorFirstFirstCommas.</li>
-	<li>Fixed minor bug in Harvard export with missing space between year and title.</li>
-	<li>Fixed bug that caused lockup when connection to IEEExplore fails.</li>
-	<li>Fixed wrong dependency in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed problem with foreign characters in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed problem with key generation in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed bug in duplicate search that made misc entries never get detected as duplicates.</li>
-	<li>Fixed bug in XMP reimport from DublinCore related to month strings.</li>
-      </ul>
-
-
-    <h3>Version 2.2 (January 30th, 2007)</h3>
-
-      <ul>
-	<li>Added progress bar to indicate progress when synchronizing PS/PDF links.</li>
-	<li>Option to autogenerate key for imported entries now also affects entries imported
-      without using the import inspection window.</li>
-	<li>Modified quick jump behaviour so sequences of letters can be found. Timeout or
-      ESC resets the search.</li>
-	<li>Improved XMP support:
-          <ul>
-	    <li>JabRef now reads and write DublinCore and Legacy Document Properties;
-		Caution needs to be used though since, JabRef does overwrite existing values.</li>
-	    <li>XMP privacy filter can be used to prevent sensible fields to be exported.</li>
-          </ul>
-	</li>  
-	<li>Support for OAI2 identifiers with subcategories, e.g. math.RA/0601001</li>
-	<li>Fixed bug that made explicit groups appear empty after updating group tree from external change.</li>
-	<li>New windows installer thanks to Uwe Stöhr.</li>
-	<li>[ 1641247 ] Fixed: No update of preview after generating bibtex key</li>
-	<li>[ 1631548 ] Fixed: Absolute paths should be stored for last open files.</li>
-	<li>[ 1598777 ] Fixed: Month sorting</li>
-	<li>[ 1570570 ] New Feature: Deselect all duplicates on import</li>
-	<li>[ 1574773 ] Fixed: sanitizeUrl() breaks ftp:// and file:///</li>
-	<li>[ 1609991 ] Fixed: Silverplatter Import: Publisher and Year confused</li>
-	<li>[ 1608391 ] Fixed: Medline Search Editbox size gets to big</li>
-      </ul>
-
-
-    <h3>Version 2.2beta2 (November 26th, 2006)</h3>
-
-      <ul>
-	<li>Redesigned export functions to simplify GUI and provide "Export selected entries" functionality. Export filter is now chosen using the file type dropdown menu in the file dialog.</li>
-	<li>Fixed bug that caused UnsupportedEncodingException on Windows when saving.</li>
-	<li>Added warning dialog when exporting failed.</li>
-	<li>Added fix for exporting special chars in RTF like éóú...</li>
-	<li>Added NameFormat LayoutFormatter based on Bibtex method name.format$</li>
-	<li>Added Fetch from ArXiv.org to Web Search<br />
-            [1587342] Quering ArXiv (and any OAI2 Repository)</li>
-	<li>[1594123] Fixed: Failure to import big numbers in Bibtex</li>
-	<li>[1594169] Fixed: Entry editor navigation between panels faulty</li>
-	<li>[1588028] Fixed: Export HTML table has relative DOI URL</li>
-	<li>[1601651] Fixed: PDF subdirectory - missing first character</li>
-      </ul>
-
-
-    <h3>Version 2.2beta (October 13th, 2006)</h3>
-
-      <ul>
-	<li>Added Mark Schenk's advanced HTML export filter.</li>
-	<li>Added options to copy/move/link to dragged linkable file (pdf, ps, etc.).</li>
-	<li>Removed unnecessary output text when scanning for external file changes.</li>
-	<li>Changed layout of entry editor to solve problem with collapsing text fields.</li>
-	<li>Added first version of support for XMP-metadata in PDFs.
-          <ul>
-	    <li>"Import into..."</li>
-            <li>Integrate with copy/move/link.</li>
-            <li>Added option to write all/selected PDFs in database</li>
-          </ul>
-	</li>
-	<li>Added tooltips to database tabs showing the file's full path.</li>
-	<li>Added function for setting or clearing specific fields in selected or all entries.</li>
-	<li>Setting a relative PDF/PS path in Database Properties now makes JabRef look for the directory relative to the bib file's location.</li>
-	<li>Removed Oxford comma from AuthorList...Comma-LayoutFormatters.</li>
-	<li>Added LayoutFormatters that print the Oxford comma.</li>
-	<li>Added missing space between abbreviated author first names: William Andrew Paul => W. A. Paul (used to be W.A. Paul)</li>
-	<li>Added LayoutFormatter for HTML paragraphs.</li>
-	<li>Changing Database Properties now causes the database to be marked as changed.</li>
-	<li>Improved simple search. Words are now treated as separate search terms, and phrases can be indicated with "double quotes".</li>
-	<li>When a letter key is pressed in the table, the first entry starting with the same letter (in the current sort column) is selected.</li>
-	<li>Bib files dragged into JabRef now appear in the Recent files menu.</li>
-	<li>Fixed bug in import dialog.</li>
-	<li>Better support for ISI files in general (should basically be better than INSPEC) including IEEE parsing.</li>
-	<li>Added regular expression search for auto-linking. Search is now more flexible by default.</li>
-	<li>Search operation also now search relative to the JabRef directory.</li>
-	<li>General improvements in Inspec ISI handling.</li>
-	<li>New LayoutFormatter: AuthorOrgSci - first author is in "last, first" all others in "first last". First names are abbreviated.</li>
-	<li>New LayoutFormatter: NoSpaceBetweenAbbreviations - spaces between multiple abbreviated first names are removed.</li>
-	<li>Improved PDF link resolver to produce proper URIs.</li>
-	<li>[1503956] Fixed: Help text instead of Help icon.</li>
-	<li>[1542552] Fixed: Wrong author import from ISI file.</li>
-	<li>[1534537] Fixed: resize groups interface</li>
-	<li>[1465610] Fixed: (Double-)Names containing hyphen (-) not handled correctly</li>
-	<li>[1436014] Fixed: No comma added to separate keywords</li>
-	<li>[1548875] Fixed: download pdf produces unsupported filename</li>
-	<li>[1545601] Fixed: downloading pdf corrupts pdf field text</li>
-	<li>[1285977] Fixed: Impossible to properly sort a numeric field</li>
-	<li>[1535044] Fixed: Month sorting</li>
-	<li>[1540646] Fixed: Default sort order: bibtexkey</li>
-	<li>[1553552] Fixed: Not properly detecting changes to flag as changed</li>
-      </ul>
-
-    <h3>Version 2.1 (August 9th, 2006)</h3>
-
-      <ul>
-	<li>Added capability to drag files and WWW links into JabRef. BibTeX files will be opened normally, other files imported, and WWW links downloaded and imported.</li>
-	<li>The -v command line option now makes the application only print version number and quit immediately.</li>
-	<li>Duplicates within a set of imported entries are now found and shown in the import inspection window.</li>
-	<li>Mac users can now choose between native and Swing file chooser under Preferences -> Advanced.</li>
-	<li>Fixed missing duplicate warning when importing without import inspection window.</li>
-	<li>Fixed error in ISI import which allowed empty fields to be set, causing errors when saving and reloading entries.</li>
-	<li>Fixed missing time and owner stamps when importing entries (only in 2.1b/2.1b2).</li>
-	<li>Fixed erroneous updates in entry editor if user switches to a different entry while downloading PDF/PS file.</li>
-	<li>Fixed bug (only in 2.1b2) in calling file open/save dialog on Mac OS X.</li>
-	<li>Fixed bug that made duplicate resolver dialog pop under import inspection dialog.</li>
-      </ul>
-
-    <h3>Version 2.1beta2 (June 29th, 2006)</h3>
-
-      <ul>
-	<li>Added option to toggle floating of marked entries to the top of the table.</li>
-	<li>Added option to open, append and import multiple BibTeX files.</li>
-	<li>Improved support for LaTeX special characters in HTML and RTF representations.</li>
-	<li>Fixed bug that made entry selection get lost when an edit modifies the entry's position in the main table.</li>
-	<li>Fixed bug in BibTeXML export (entry type name missing in tag).</li>
-	<li>Fixed name handling in (non-compliant) Endnote files giving all author names on the same line.</li>
-	<li>Fixed problem with keyword handling in Medline import.</li>
-	<li>Fixed (harmless) NullPointerException when medline fetch is cancelled.</li>
-	<li>Fixed bug in parser that made {"} illegal in fields quoted with ".</li>
-      </ul>
-
-    <h3>Version 2.1beta (May 9th, 2006)</h3>
-
-      <ul>
-	<li>Known issue: font sizes cannot be changed, but should follow OS settings on Windows and Mac.</li>
-	<li>Known issue: some HTML may be handled inappropriately when downloading from IEEEXplore.</li>
-	<li>Changed Paste function so timestamp and owner fields are updated.</li>
-	<li>Added "Other" item to the "New entry ..." menu.</li>
-	<li>Changed sorting order so marked entries are displayed at the top of the table.</li>
-	<li>Added IEEEXplore search and download feature.</li>
-	<li>Added option to store entries in their original order. Unsorted table view now shows entries in their original order.</li>
-	<li>Added option to autogenerate keys for entries with missing keys before each save.</li>
-	<li>Improved handling of external URLs to prevent problems with special characters.</li>
-	<li>Medline and Endnote imports no longer automatically add curly braces around capital letters in title.</li>
-	<li>Float search now scrolls table to the top.</li>
-	<li>Fixed lockup problem in preview with uneven number of # characters in fields.</li>
-	<li>Fixed problem with default content selector fields reappearing after removal.</li>
-	<li>Fixed problem with unsupported character encodings being selectable and causing unreported save errors.</li>
-	<li>Fixed bug that blocked last line in table columns setup from being removed.</li>
-	<li>Fixed missing export formats from command line.</li>
-	<li>Fixed bug that made Review tab impossible to remove from entry editor.</li>
-	<li>Fixed bug in Medline XML import that assigned wrong PMID for some entries.</li>
-	<li>Fixed bug in custom export that collapsed sequences of two or more backslashes into a single backslash in output.</li>
-	<li>Fixed bug (misspelled formatter name) in Harvard RTF export.</li>
-      </ul>
-
-    <h3>Version 2.0.1 (February 2nd, 2006)</h3>
-
-      <ul>
-	<li>Fixed bug that made a hidden entry editor under some circumstances store a field value to the wrong entry.</li>
-	<li>Fixed synchronization bug that made the opening of a new database sometimes fail.</li>
-	<li>Fixed bug in setting external journal lists when no personal list is set.</li>
-      </ul>
-
-    <h3>Version 2.0 (January 30th, 2006)</h3>
-
-      <ul>
-	<li>Changed sorting selection interface for main table for more intuitive operation.</li>
-	<li>Made import operation update "working directory".</li>
-	<li>Removed hard-coded author/editor name rearrangement in OpenOffice and OpenDocument exports.</li>
-	<li>Fixed hangup when parsing RIS files from Nature.</li>
-	<li>Fixed NullPointerException when generating database from AUX file on Mac OS X.</li>
-	<li>Fixed bug in routine for adding braces around capital letters.</li>
-	<li>Fixed bug in switching preview layouts.</li>
-	<li>Fixed bug in link handling in entry preview.</li>
-      </ul>
-
-    <h3>Version 2.0b2 (January 15th, 2006)</h3>
-
-      <ul>
-	<li>Changed field order in OpenDocument export
-	to comply with bibliography requirement.</li>
-	<li>Added support for inserting citations into
-	Emacs using gnuserv/gnuclient.</li>
-	<li>Added option to set a regular expression
-	replace operation on generated bibtex keys.</li>
-	<li>Added support for custom importers inside
-	a jar file.</li>
-	<li>Fixed bug in opening URLs containing "&"
-	on Windows.</li>
-      </ul>
-
-    <h3>Version 2.0b (January 4rd, 2006)</h3>
-
-      <ul>
-	<li>Added a system for registering custom import
-	formats in the form of Java classes.</li>
-
-	<li>Added export option for OpenDocument
-	spreadsheet.</li>
-
-	<li>Added new options for name formatting in main
-	table.</li>
-
-	<li>Added REPEC-NEP import filter.</li>
-
-	<li>Added option for non-field parameters for export
-	formatters. If the parameters does not start with the
-	backslash character, it will be passed unchanged to the
-	formatter in place of any field value.</li>
-
-	<li>Added export formatter CurrentDate, which returns
-	the current date, and takes a format string as
-	parameter.</li>
-
-	<li>Added customization of table colors, accessible
-	from Tools -> Preferences -> Entry table.</li>
-
-	<li>Added new Appearance tab to preferences dialog to
-	gather appearance related options.</li>
-
-	<li>Added toggling of abbreviated and full journal
-	names. The list of journals is realized as an external
-	file, but editable from a Manage Journal Abbreviations
-	panel. Secondary lists can also be linked, but not
-	edited. There is a download option to quickly get a
-	list available on the internet, and we will provide one
-	or more lists for download from the SourceForge web
-	server.</li>
-
-	<li>Added functionality for new JabRef instances to
-	detect a running instance, and send command line
-	parameters to the running instance for processing.</li>
-
-	<li>Added handling of HTML links in preview panel.</li>
-
-	<li>Added confirmation dialog when database is saved
-	and the chosen encoding doesn't support all characters.
-	Gives options to save, cancel or try a different
-	encoding.</li>
-
-	<li>The encoding used when opening a database is now
-	remembered, and used when database is stored.</li>
-
-	<li>Added review field for research comments, paper
-	reviews, etc.</li>
-
-	<li>Added option to disable wrapping for certain
-	fields. Wrapping of pdf, ps, doi and url is disabled by
-	default.</li>
-
-	<li>Antialiasing option now affects entry editor text
-	fields as well as table text.</li>
-
-	<li>Changed to monospaced font in source editor
-	field.</li>
-
-	<li>Removed option to put double braces around BibTeX
-	fields, but retained option to remove double braces
-	when loading. Added option to put braces around capital
-	letters of a chosen set of fields.</li>
-
-	<li>Improved Ovid import.</li>
-
-	<li>Fixed problem with ordering of BibTeX strings that
-	are referred to by other strings.</li>
-
-	<li>Fixed problem with loading 16-bit encoded bib files
-	with 8-bit encoding as default, and vice versa.</li>
-
-	<li>Fixed multiplying authors bug when author/editor
-	field appears both in Required and Optional tabs.</li>
-
-	<li>Fixed startup freeze when trying to load certain
-	malformed bib files.</li>
-
-	<li>Fixed bug related to multi-line fields in RIS
-	import.</li>
-
-	<li>Fixed bug related to looking up a fully qualified
-	DOI</li>
-
-	<li>Included review field to preview panel 1, which
-	shows the abstract</li>
-
-	<li>Fixed bug where booktitle field was not displayed
-	in preview for conference proceedings, similar to
-	journal field</li>
-      </ul>
-
-    <h3>Version 1.8.1 (September 15th, 2005)</h3>
-
-      <ul>
-	<li>Added automatic timestamp with configurable format
-	for entries.</li>
-
-	<li>Added new key generator modifier ":abbr" to
-	abbreviate field contents.</li>
-
-	<li>Added Help button in Preferences -> Entry
-	preview</li>
-
-	<li>Added Big5, Big5_HKSCS and GBK encodings for
-	Chinese.</li>
-
-	<li>Improved marking feature. Username is now used for
-	marking, so different users can mark entries separately
-	without interference.</li>
-
-	<li>Improved handling of names such as "Firstname de la
-	Lastname jr.", with different handling for presentation
-	and sorting purposes. Key generation now should always
-	use the genuine last name, and not produce keys like
-	"de2001".</li>
-
-	<li>Removed duplicate warning from inspection dialog
-	for non-selected entries.</li>
-
-	<li>Fixed setting of sheet name in OpenOffice.org Calc
-	export.</li>
-
-	<li>Fixed bug that prevented PDF/PS opening by F4 from
-	automatically finding files in subdirectories below the
-	main PDF/PS dir.</li>
-
-	<li>Fixed BibTeX parser bug that made it choke on short
-	comment strings.</li>
-
-	<li>Fixed bug that made regexp search fail for fields
-	containing newline characters.</li>
-
-	<li>Fixed platform-dependent handling of newline
-	characters.</li>
-
-	<li>Fixed bug that prevented command line import with
-	explicit format.</li>
-
-	<li>Fixed bug that made it impossible to disable table
-	antialiasing.</li>
-
-	<li>Fixed AuthorAndsCommaReplacer.</li>
-      </ul>
-
-    <h3>Version 1.8 (July 30th, 2005)</h3>
-
-      <ul>
-	<li>Search panel now starts visible if it was visible
-	at last shutdown.</li>
-
-	<li>Added option to disable import inspection window
-	when only one entry is being imported.</li>
-
-	<li>Fixed parser bug that caused problems for bib files
-	containing extra characters after the last entry.</li>
-
-	<li>Fixed missing month in JStor import.</li>
-
-	<li>Fixed some bugs in "new from plain-text"
-	wizard</li>
-      </ul>
-
-    <h3>Version 1.8b2 (July 13th, 2005)</h3>
-
-      <ul>
-	<li>Changed handling of external updates so the
-	notification is suppressed when there are no actual
-	changes.</li>
-
-	<li>Changed autodetecting import so BibTeX files are
-	handled more similarly to other formats.</li>
-
-	<li>Enabled sorting by icon columns.</li>
-
-	<li>Added option to remove BibTeX source panel from
-	entry editor.</li>
-
-	<li>Added command line option to not load any files at
-	startup. Will override any autoloading or other command
-	line options that normally load or import files.</li>
-
-	<li>Added handling of duplicates to import inspection
-	window.</li>
-
-	<li>Made entry preview be updated whenever the
-	selection is expanded by one row, to make it more
-	useful while selecting a set of entries.</li>
-
-	<li>Changed BibTeX field parsing to avoid inserting
-	line breaks at wrong places.</li>
-
-	<li>Improved handling of page numbers in Medline
-	import.</li>
-
-	<li>Fixed import of file links when importing SixPack
-	files.</li>
-
-	<li>Fixed bug that prevented closing of search
-	interface when no databases are open.</li>
-
-	<li>Fixed OpenOffice Calc export to be compatible with
-	OpenOffice.org 2.0 beta.</li>
-
-	<li>Fixed bugs in Refer/Endnote import filter.</li>
-
-	<li>Fixed bug that caused changes to be lost in some
-	cases when the same field is present in multiple entry
-	editor tabs.</li>
-
-	<li>Fixed bug that prevented command line autodetecting
-	import from working with BibTeX files.</li>
-
-	<li>Fixed minor bug in routine for removing double
-	braces.</li>
-      </ul>
-
-    <h3>Version 1.8b (June 6th, 2005)</h3>
-
-      <ul>
-	<li>Added option to store bib file with double
-	braces.</li>
-
-	<li>Follow @input tags in aux files to indicate nested
-	aux files for generating subdatabases.</li>
-
-	<li>Improved wrapping and formatting of bib files, to
-	preserve paragraph separator (empty line).</li>
-
-	<li>Added test buttons for customization of preview
-	layouts.</li>
-
-	<li>Added inspection dialog for previewing and
-	generating keys for imported entries, and deciding
-	which ones to keep and discard. The dialog allows
-	inspection during long import processes such as Medline
-	search.</li>
-
-	<li>Restructured layout to use a common side pane with
-	all tabs.</li>
-
-	<li>Added import filter for Cambridge Scientific
-	Abstracts (CSA) format.</li>
-
-	<li>Added PS directory with similar options as
-	PDF.</li>
-
-	<li>Added [authshort] and [edtrshort] key field
-	markers. Patch submitted by Kolja Brix.</li>
-
-	<li>Made the program remember preview enable
-	setting.</li>
-
-	<li>Improved handling of illegal regular expressions in
-	search.</li>
-
-	<li>Removed options to search only Required, Optional
-	and/or General fields, in order to simplify search
-	interface.</li>
-
-	<li>Changed keys for Next and Previous tab to CTRL-PGDN
-	and CTRL-PGUP to match shortcuts in a certain popular
-	web browser.</li>
-
-	<li>Minor change to Preferences -> Table columns to
-	enable insertion of column in position 2.</li>
-
-	<li>Fixed parser bug that caused problems for files
-	with >10000 entries.</li>
-
-	<li>Fixed bug in entry editor that caused the source
-	edit panel to remove marking from entries.</li>
-
-	<li>Fixed export bug that made "\begin" tags fail if
-	encountered immediately after an "\end" tag.</li>
-
-	<li>Fixed export bug that made whitespace disappear
-	after empty field values.</li>
-
-	<li>Fixed ISI import bug that handled SO fields with
-	line breaks wrong.</li>
-
-	<li>Fixed bug occuring when choosing not to import
-	duplicate imported entry.</li>
-
-	<li>Fixed problem with detecting popup trigger on Mac
-	OSX with one button mouse.</li>
-
-	<li>Fixed erroneous relative paths for PDF files when
-	PDF directory is not set.</li>
-
-	<li>Fixed entry preview to resolve string
-	references.</li>
-      </ul>
-
-    <h3>Version 1.7.1 (April 11th, 2005)</h3>
-
-      <ul>
-	<li>Removed unnecessary stack traces when opening
-	external viewer.</li>
-
-	<li>Fixed bug that made Ctrl-E destroy current edit in
-	entry editor.</li>
-
-	<li>Fixed problem when copying modified BibTeX key gave
-	old value.</li>
-
-	<li>Fixed missing 'booktitle' import in CONF entries in
-	RIS import.</li>
-
-	<li>Fixed bug that made group tree disappear for
-	certain keyword expressions.</li>
-
-	<li>Fixed bug that made standard BibTeX fields be saved
-	without line wrapping.</li>
-      </ul>
-
-    <h3>Version 1.7 (March 20th, 2005)</h3>
-
-      <ul>
-	<li>When fetching from Medline or CiteSeer, fetched
-	entry is now opened in editor.</li>
-
-	<li>Added French translations of help files.</li>
-
-	<li>Added color highlighting of focused text field in
-	entry editor.</li>
-
-	<li>Added option in context menu of entry editor for
-	changing capitalization of field contents.</li>
-
-	<li>Added name conversion "Smith, RA" -> "Smith, R.
-	A." to Medline import.</li>
-
-	<li>Updated task bar icon.</li>
-
-	<li>Fixed bug that left some search settings items
-	inappropriately disabled.</li>
-
-	<li>Fixed bug that caused requirement for restart to
-	register change in default key pattern.</li>
-
-	<li>Fixed bug that caused crash some times after
-	adding/removing field content selectors.</li>
-
-	<li>Fixed bug in recognizing custom entry types when
-	reading bib files.</li>
-
-	<li>Fixed bug that allowed a deleted entry to stay
-	visible in the entry editor.</li>
-      </ul>
-
-    <h3>Version 1.7b2 (March 7th, 2005)</h3>
-
-      <ul>
-	<li>Made side pane resizable.</li>
-
-	<li>Replaced entry customization dialog with improved
-	interface.</li>
-
-	<li>Added standard entry type "conference", similar to
-	"inproceedings".</li>
-
-	<li>Added "default" label pattern to avoid the need to
-	set similar patterns manually.</li>
-
-	<li>Added line wrapping to metadata in saved .bib file
-	to avoid long lines.</li>
-
-	<li>Added "bibtexkey" as implicit fourth sort
-	criterion, to minimize problem with almost similar
-	entries swapping places.</li>
-
-	<li>Added OpenOffice.org Calc export filter that
-	exports spreadsheet compatible with the OpenOffice.org
-	bibliography feature.</li>
-
-	<li>Added a couple of previously unsupported
-	publication types in SciFinder.</li>
-
-	<li>Added extra shortcuts CTRL-+ and CTRL-- for
-	switching tabs in entry editor, since original
-	shortcuts CTRL[-SHIFT]-TAB is used by some window
-	managers.</li>
-
-	<li>Updated Endnote export filter.</li>
-
-	<li>Fixed focus and key binding problems for switching
-	tabs/entries in entry editor</li>
-
-	<li>Fixed bug that prevented required fields tab from
-	appearing for entries with only bibtex key as required
-	field.</li>
-
-	<li>Fixed bug that prevented the user from changing the
-	default encoding.</li>
-
-	<li>Fixed bugs in RIS import.</li>
-
-	<li>Fixed bug 1112050; freeze when reading certain
-	author fields with mismatched braces.</li>
-      </ul>
-
-    <h3>Version 1.7 beta (January, 27th, 2005)</h3>
-
-      <ul>
-	<li>Changed routine for rearranging author names
-	(Lastname, Firstname) so bracketed expressions are
-	treated as units.</li>
-
-	<li>Grouping controls now allow group hierarchies, and
-	now allow explicit and search expression groups as well
-	as keyword groups.</li>
-
-	<li>Added full customization of general fields
-	tabs</li>
-
-	<li>Added option to preserve formatting for non-BibTeX
-	fields.</li>
-
-	<li>Added integrity check for database.</li>
-
-	<li>Added export filters EndNote and Harvard RTF.</li>
-
-	<li>Added automatic import format chooser for import
-	(same as wildcard import below).</li>
-
-	<li>Added wildcard (*) option for command-line import,
-	to try to automatically determine the correct
-	format.</li>
-
-	<li>Improved layout of Preferences dialog.</li>
-
-	<li>Improved several import filters.</li>
-
-	<li>Added authIniN/edtrIniN key formatters.</li>
-
-	<li>Marked entries now float to the top when no
-	searching or grouping reordering is active.</li>
-
-	<li>Fixed problem with opening file dialog on Win NT -
-	AWT dialog is now opened if Swing dialog fails.</li>
-      </ul>
-
-    <h3>Version 1.6 (November 27th, 2004)</h3>
-
-      <ul>
-	<li>Improved handling of entry selection in various
-	ways. E.g. selected entry is now scrolled into view
-	when opening entry editor and entry is kept selected
-	when importing CiteSeer fields.</li>
-
-	<li>Fixed update bug between autogenerated bibtex key
-	and source panel.</li>
-
-	<li>Fixed missing . at the end of last author name in
-	RIS import.</li>
-
-	<li>Fixed NullPointerException on certain special
-	characters when exporting to BibTeXML.</li>
-
-	<li>Fixed bug that sometimes prevented the unmarking of
-	entries.</li>
-
-	<li>Fixed problem with formatting one-name
-	authors.</li>
-
-	<li>Various other bugfixes.</li>
-      </ul>
-
-    <h3>Version 1.6 beta (November 8th, 2004)</h3>
-
-      In an effort to produce better and more stable releases,
-      we have decided to release a beta versions prior to
-      future versions. We start out with today's beta release
-      of version 1.6. Users can now choose whether to download
-      and use the beta version for earlier access to new
-      features, or whether to wait for the final, better-tested
-      version. The final 1.6 version is expected to be released
-      in a few weeks from today.
-
-      <ul>
-	<li>Added mnemonic keys to menus and menu items.</li>
-
-	<li>Added MODS and tab-separated file export</li>
-
-	<li>Added facility for detecting and handling external
-	changes to open bib files.</li>
-
-	<li>Added scan option for exact duplicates with
-	automatic removal.</li>
-
-	<li>Bibtex strings are now sorted automatically.</li>
-
-	<li>Bibtex strings are now resolved when exporting
-	database.</li>
-
-	<li>Fixed problem with field content selector getting
-	too wide. Limited width.</li>
-
-	<li>Fixed PDF/PS view routine to remove problems with
-	filenames containing spaces.</li>
-
-	<li>Fixed bug that interfered with Fetch Medline by ID,
-	and fixed parsing problem with certain Medline
-	entries.</li>
-
-	<li>Fixed bug that interfered with Push to WinEdt.</li>
-
-	<li>Fixed HTML output so \c{c} is handled
-	correctly.</li>
-
-	<li>command line option for generating a sub-database
-	from LaTex aux file entries</li>
-
-	<li>simple copy/paste menu in entry editor</li>
-
-	<li>experimental: text-input-area with underlying
-	infotext in plaintext import dialog</li>
-      </ul>
-
-    <h3>Version 1.55 (October 12th, 2004)</h3>
-
-      <ul>
-	<li>Made method for opening PDF files robust with
-	regard to file separators (/ and \), so bib files can
-	easier be used across platforms.</li>
-
-	<li>Improved Medline fetcher. Can now fetch entries
-	based on a search expression.</li>
-
-	<li>Added features for fetching fields and referring
-	publications from the CiteSeer database.</li>
-
-	<li>Added option to always save database ordered by
-	author/editor/year, and made this the default
-	setting.</li>
-
-	<li>When a single entry is selected, right-click menu
-	now shows a checkbox menu for group memberships instead
-	of the regular "Add to" and "Remove from" menus.</li>
-
-	<li>Improved [shorttitle] and [veryshorttitle] special
-	key pattern fields.</li>
-
-	<li>Added dialog box for conveniently setting the
-	fields of an entry from a plain text description.</li>
-
-	<li>Added formatter "ResolvePDF" to create correct
-	PDF/PS links in HTML export when relative file names
-	are used.</li>
-
-	<li>Added Abstract panel in entry editor.</li>
-
-	<li>Added alternate preview with abstract, and made
-	both previews configurable.</li>
-
-	<li>Added the option to create a subset of a database
-	based on an .aux file.</li>
-
-	<li>Added 'Cancel' button to duplicate resolver dialog,
-	so the process can be stopped.</li>
-
-	<li>Added check for spaces in custom entry type
-	names.</li>
-
-	<li>Added several new key pattern markers.</li>
-
-	<li>Added toolbar buttons for Mark/Unmark to improve
-	discoverability.</li>
-
-	<li>Fixed bug that made export filters ignore the
-	chosen character encoding.</li>
-
-	<li>Fixed bug that interfered with author name
-	formatting.</li>
-
-	<li>Fixed various bugs in import filters.</li>
-
-	<li>Fixed bug that prevented confirmation dialog when
-	deleting entry from the entry editor.</li>
-
-	<li>Fixed bug that made the next entry be opened
-	instead of the current, when pressing Enter in
-	table.</li>
-
-	<li>Fixed bug that made it possible to leave a source
-	edit when the source didn't validate properly. Also
-	made it impossible to change table selection until
-	source validates.</li>
-      </ul>
-
-    <h3>Version 1.5 (August 3rd, 2004)</h3>
-
-      <ul>
-	<li>Added Highlight and select options to the group
-	interface, and made it possible to change the number of
-	visible lines in the list.</li>
-
-	<li>Added option to allow or disallow direct table
-	editing.</li>
-
-	<li>Added optional confirmation dialog for deleting
-	entries.</li>
-
-	<li>Added optional warning dialog for duplicate BibTeX
-	keys.</li>
-
-	<li>Added warnings to bibtex parser, and prevented
-	failure to load files with duplicate string
-	definitions.</li>
-
-	<li>Added JStor import filter.</li>
-
-	<li>Changed the look and feel to JGoodies Forms on
-	non-Macintosh platforms.</li>
-
-	<li>Optimized performance in several areas.</li>
-
-	<li>Numerous usability improvements.</li>
-
-	<li>Fixed RIS import bug caused by short lines.</li>
-
-	<li>Fixed bug in SciFinder import.</li>
-
-	<li>Fixed bug that made entire field get cleared when
-	removing from group.</li>
-      </ul>
-
-    <h3>Version 1.4 (June 6th, 2004)</h3>
-
-      Version 1.4 provides command line options for importing
-      and exporting files, advanced search, custom export
-      filters, and several bug fixes and minor changes.
-
-      <ul>
-	<li>Added advanced search feature.</li>
-
-	<li>Added facility for using custom export
-	formats.</li>
-
-	<li>Added command line options for importing/exporting
-	files, importing/exporting, user preferences, loading
-	session and for suppressing the GUI (using RitOpt for
-	parsing options).</li>
-
-	<li>Added automatic stripping of \url{} when opening
-	url.</li>
-
-	<li>Improved export filters.</li>
-
-	<li>Fixed focus bug which sometimes interfered with
-	cut/copy/paste.</li>
-      </ul>
-
-    <h3>Version 1.3.1 (May 9, 2004)</h3>
-
-      Release 1.3.1 resolves a couple of severe bugs in 1.3.
-      All users who have downloaded 1.3 should upgrade (the
-      bugs in 1.3 impaired functionality but did not pose a
-      security risk).
-
-    <h3>Version 1.3.* (May 9, 2004)</h3>
-
-      This release adds entry preview, detection of duplicate
-      entries, persistent entry marking, new import and export
-      filters, better linking to PDF/PS/URL/DOI, and better Mac
-      OS X compatibility. There are several other changes and
-      improvements, and many bugfixes.
-
-    <h3>Version 1.2 (March 21, 2004)</h3>
-
-      The icon set has been replaced. Notable new features are
-      French language support, key generator customization,
-      string replace, and BibTeXML import. Several bugs have
-      been fixed.
-
-    <h3>Version 1.19 (Feb 19,2004)</h3>
-
-      <ul>
-	<li>Entry editor is now opened for an entry that causes
-	an error when saving.</li>
-
-	<li>Added options to display names in harmonised format
-	in the main table.</li>
-
-	<li>Added Docbook and (experimental) HTML export.</li>
-
-	<li>Enabled 'doi' and 'pii' fields for Medline
-	import.</li>
-
-	<li>Enabled antialiasing fonts.</li>
-
-	<li>Added the Kunststoff look&feel to give a more
-	pleasant user interface.</li>
-
-	<li>Added font selector for the main table.</li>
-
-	<li>Improved table column customization.</li>
-
-	<li>Added word selector feature for selected fields
-	(keywords, journal).</li>
-
-	<li>Added support for German and Norwegian
-	language.</li>
-
-	<li>Generalized copy cite key features for multiple
-	entries.</li>
-
-	<li>Added quick load/save session feature.</li>
-
-	<li>Fixed issue/number bug in ISI import.</li>
-
-	<li>Added "Open pdf/ps" item in right-click menu.</li>
-
-	<li>Fixed bug causing external viewer to only work in
-	General fields.</li>
-
-	<li>Added functionality for using Browse buttons for
-	file-related fields (ps, pdf, etc.).</li>
-
-	<li>Added Browse buttons to External programs tab in
-	Preferences.</li>
-
-	<li>Fixed bug related to Save database and Source field
-	which caused changes to disappear.</li>
-      </ul>
-
-    <h3>Version 1.1 (Jan 02, 2004)</h3>
-
-      <ul>
-	<li>Added bibtex key uniqueness checking, and prevented
-	autogeneration from generating non-unique keys.</li>
-
-	<li>Added command line option to load file on
-	startup.</li>
-
-	<li>Fixed problem with autogeneration creating invalid
-	keys.</li>
-
-	<li>Improved Refer/Endnote import.</li>
-
-	<li>Added feature for importing entries and/or strings
-	and/or group definitions from another BibTeX
-	database.</li>
-
-	<li>Added menu choices to import into open
-	database.</li>
-
-	<li>Added toolbar button for closing current
-	database.</li>
-
-	<li>Fixed shortcut key for "Store field" in entry
-	editor, and fixed problem that made shortcut for "Save
-	database" unavailable from entry editor.</li>
-
-	<li>Added option to fetch Medline entries automatically
-	by ID, based on a patch submitted by Mike Smoot.</li>
-
-	<li>Fixed bug in RIS import.</li>
-
-	<li>Added options to copy key and copy "\cite{key}" to
-	right-click menu.</li>
-
-	<li>Fixed bug that caused some General fields not to
-	get displayed.</li>
-
-	<li>Enabled customization of General fields.</li>
-
-	<li>Enabled customization of existing entry types, and
-	definition of new types.</li>
-      </ul>
-
-    <h3>Version 1.0 (Nov 29, 2003)</h3>
-
-      First release of JabRef
-
-  </body>
-
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+  <h1>Revision history</h1>
+    <h3>2.9.1</h3>
+    <ul>
+    <li>Command line option <code>--importToOpen</code> now also adds to an open tab when JabRef is launched.</li>
+    <li>Importing of entries works again. Fixes <a href="https://sourceforge.net/p/jabref/bugs/1121">bug 1121</a>.</li>
+    <li>Import inspection dialog is now modal.</li>
+    <li>Replaced Java launcher by <a href="http://launch4j.sourceforge.net/">launch4j</a>. Fixes bugs <a href="https://sourceforge.net/p/jabref/bugs/1100">1100</a>, <a href="https://sourceforge.net/p/jabref/bugs/1103">1103</a>, <a href="https://sourceforge.net/p/jabref/bugs/1123">1123</a>.</li>
+    <li>Menu font size can now be changed again. Help contents are also enlarged accordingly. Fixes <a href="https://sourceforge.net/p/jabref/bugs/1122">bug 1122</a>.</li>
+    </ul>
+    <h3>2.9</h3>
+    <ul>
+    <li>Fixed bug: in OO/LO reference lists, entries may fall out when multiple entries with same
+      author and year are cited.</li>
+    <li>Added support for converting HTML combining accents to LaTeX</li>
+    <li>When generating subdatabase from AUX file, preamble and strings are now included from
+      the source database.</li>
+    <li>Added cleanup action for removing redundant $, {, and }</li>
+    <li>Fix for removing starting and ending spaces in the page number cleanup action</li>
+    <li>Fix for a more liberal detection in the month cleanup action</li>
+    </ul>
+    <h3>2.9 beta 2</h3>
+    <ul>
+      <li>Can control if the HTML converter should create subscripts and superscripts
+      as text or an equation via the preferences</li>
+      <li>Added initial support for adding curly brackets {} for certain
+        key words to keep the character case independent of .bst, e.g., for
+        names and abbreviations (use via "Cleanup entries") and can be controlled 
+        via preferences if it should be used at searches</li>
+      <li>Fixed author and DOI import from IEEE Xplore.</li>
+      <li>Improved import of equations in IEEE Xplore titles handling images, (sub) and /spl / representations</li>
+      <li>Rewrote the HTML import in a more general way. A few characters need to be added.</li>
+      <li>IEEE Xplore abstract fetching should now be working again.</li>
+      <li>Added DOI to BibTex entry fetcher.</li>
+      <li>Added ADS (The SAO/NASA Astrophysics Data System) fetcher by Ryo Igarashi (patch #120).</li>
+      <li>Reintroduced Google Scholar and ACM portal fetcher with entry preview to reduce server load.</li>
+      <li>Added alternate entry fetcher type where a preview can be displayed so the user can choose
+        which entries to download. This can reduce server load significantly and prevent users from
+        getting locked out of search services.</li>
+      <li>Fix for exception and minor bugs in HTML import parsing (patch 3575998 by Daniel Sv�rd)</li>
+      <li>HTML import handles more characters. Cleanup can also do HTML cleanup. (Patch 3582375 by Oscar Gustafsson)</li>
+      <li>During file renaming: More illegal characters are removed (idea by Sarel Botha)</li>
+      <li>Rudimentary support for IEEEtranBSTCTL added (patch 3582376 by Oscar Gustafsson)</li>
+      <li>":" is not filtered from the BibTeX keys any more (patch 3582376 by Oscar Gustafsson)</li>
+      <li>Changed internal look&feel setting (based on patch 3580605)</li>
+      <li>Custom importers nested in jars should be supported now (bug 3582838)</li>
+      <li>PDFContentImporter uses the DOI fetcher to fetch the BibTeX for the entry (if a DOI exists at the first page).</li>
+      <li>Moved migration of legacy PDF/PS fields from legacy tools to clean up dialog.</li>
+      <li>MHT files can now also be linked by drag'n'drop without the need to configure "external file types".</li>
+      <li>Adds support for Ubunut's global menu and HUD integration by using java-swing-ayatana (feature #796).</li>
+      <li>Updates PostgreSQL support to PostgreSQL 9.2</li>
+    </ul>
+    <h3>2.9 beta</h3>
+    <ul>
+      <li>Replaced notification dialog after moving/renaming linked file by status message.</li>
+      <li>Replaced dialog warnings about empty/duplicate key in entry editor by status line messages,
+      to prevent lockup if Save button is pressed directly.</li>
+      <li>Replaced window icon with 48x48 image.</li>
+      <li>Added local undo/redo handling for entry editor text fields.</li>
+      <li>Added special field functionality for ranking, marking as relevant,
+      marking as quality assured, and prioritizing. Can be enabled by "Entry table columns".
+      Based on the work by Igor Chernyavsky, Florian Straßer, and Marius Kleiner.</li>
+      <li>Added PDF preview functionality to the preview panel. Configurable via "Entry preview" settings.</li>
+      <li>Group edit dialog now closes when Escape is pressed.</li>
+      <li>Fixed MS bib import, month was lost on import.</li>
+      <li>Generate key action in entry editor now honors key overwrite settings.</li>
+      <li>Fixed bug when importing XMP data from PDF, file will now be linked from the new entry.</li>
+      <li>Fixed bug in layout processing - quoted formatter argments are now handled correctly.</li>
+      <li>Fixed bug 3545394: null and curly brackets in custom export filter.</li>
+      <li>Added "Manage keywords" popup menu to manage common keywords of selected entries.</li>
+      <li>Added support for pushing citations to TeXstudio (requires TeXstudio >=2.4)</li>
+      <li>Text-based citations can now be imported using FreeCite by Brown University
+      (http://freecite.library.brown.edu). By Kai Mindermann and Daniel Maurer.</li>
+      <li>JabRef supports synchronization of unlinked PDFs. Feature request "[2163626] Scan database - find unlinked files".
+      Based on patch 3122104. </li>
+      <li>Added command line argument -d/-prdef for resetting preferences to default values. Can
+      reset a comma-separated list of preference values, or all values.</li>
+      <li>Added small right-click popup menu at each tab</li>
+      <li>A PDF can also be dropped to the preview panel to trigger linking it</li>
+      <li>Drag'n'drop of text from the preview panel to other applications is now working</li>
+      <li>Added highlighting in preview area for search text (based on patch 3121914 by
+      Maximilian Lengsfeld).</li>
+      <li>New context menu option "Switch preview layout" in the preview panel. </li>
+      <li>BibTeX key generator patterns can now be stored in per database (implements feature 3495993)</li>
+      <li>Braces around author names are now dropped internally. They remain in the .bib though
+      Effects (incomplete list): Authors in the main window are shown without braces,
+      autocompletion does not show these braces</li>
+      <li>Autocompletion: ";" is now also a delimiter allowing "keyword1; keyword2" in the keyword fields</li>
+      <li>Autocompletion: the amount of characters to trigger autocompletion may now be configured
+      (default is 2)</li>
+      <li>Autocompletion: in case lower case letters are used, the search is case-insenstive,
+      otherwise the search is case sensitive.</li>
+      <li>Autocompletion: new preference to choose how to deal with first names 
+      (always full/always abbreviated/both full and abbreviated)</li>
+      <li>Added functionality "clean up entries" 
+      - Includes clean up DOI functionality by Florian Straßer and Marius Kleiner
+        (move of DOIs from ee, note, and url field is supported)
+      - Option to rename PDF of entry according to configured PDF-naming-scheme
+        (by Florian Straßer and Marius Kleiner)
+      - make file paths relative
+      - clean up month (functionality based on patch 3470076 by Mathias Walter)
+      - clean up pages
+      - fix superscripts</li>
+    <li>New "ISBN to BibTeX" fetcher. Uses the online "ISBN to BibTeX Converter" service by Manas Tungare.</li>
+    <li>Added support for drag'n'drop of tabs by Florian Straßer and Marius Kleiner.</li>
+    <li>PDF import dialog now always stores settings: checkbox removed</li>
+    <li>float search now also jumps to first entry if entry editor is opened</li>
+    <li>usability improvements of "content selectors"</li>
+    </ul>
+  <h3>Version 2.8.1</h3>
+    <ul><li>New DBLP fetcher. Patch 3462232 by Sascha Hunold.</li>
+    <li>Disabled ACM portal fetcher to avoid users of getting banned.</li>
+    <li>Fixed bug in PostgreSQL export/import.</li>
+    <li>Improved handling of file fields written in the style exported from Zotero.</li>
+    </ul>
+  <h3>Version 2.8</h3>
+  <ul><li>Applied Oscar Gustafsson's fix for IEEEXplore fetcher.</li>
+    <li>Added capability to remove databases from SQL database.</li>
+    <li>Fixed customization of entries in Biblatex mode.</li>
+  </ul>
+  <h3>Version 2.8 beta 2</h3>
+  <ul><li>Improvements to SQL export and import. Fixed bug where subsequent exports to same
+      database would fail. Can now save multiple bib bases to a single SQL database.</li>
+    <li>"abbr" modifier in BibTeX key generator now skips parentheses.</li>
+    <li>Minor change to FirstPage formatter. Now splits at spaces as well as hyphens,
+      and returns original field content if only one page number is found.</li>
+    <li>When using the preferences import command line option, preferences are now imported
+      before load/import/export operations are handled.</li>
+    <li>Applied Nicolas Pavillon's patch for proper keystroke handling on Mac OS X.</li>
+    <li>Applied Ivanilton Polato's patch for handling multi-line fields in CSV export.</li>
+    <li>Fixed bug: "Send as Email" did not handle absolute paths correctly.</li>
+    <li>Fixed bug 3472991: Search: "Highlight Words" inconsistent.</li>
+    <li>Fixed bug 2933201: Exporting InProceedings to Word 2007.</li>
+    <li>Fixed bug 3146059: Error in translating author field to MS Office.</li>
+    <li>Fixed bug: entering field names containing capital letters in table columns tab
+      in Preferences makes the columns empty.</li>
+  </ul>
+  <h3>Version 2.8 beta</h3>
+  <ul><li>Fixed issues with ACM portal fetcher using Benjamin Langmann's patch, plus an
+      additional minor fix.</li>
+    <li>A large list of journal abbreviations is now loaded by default.</li>
+    <li>Added global option to allow file links relative to the bib file location, in addition
+      to the global or database- or user-specific file directory.</li>
+    <li>Fixed bug 3434674: Reviewing changes overwrites groups.</li>
+    <li>Integrated the plugin for interaction with OpenOffice/LibreOffice as a standard part
+      of JabRef.</li>
+    <li>Added keyboard shortcuts Ctrl-Up and Ctrl-Down to move file links up and down in a list
+      of external links in the entry editor.</li>
+    <li>Applied "bjoerntm"'s patch for making the loading of group information less sensitive
+      to white space, in order to prevent trouble loading files written by other tools.</li>
+    <li>Added optional autocompletion of author/editor last names in search field.</li>
+    <li>Changed entry fetcher system so all fetchers are accessed from a single side pane
+      component with a selector.</li>
+    <li>Added INSPIRE fetcher by Sheer El-Showk.</li>
+    <li>Improved error handling when importing in specific format.</li>
+    <li>Prevented crash when calling invalid import format on startup.</li>
+    <li>Improved duplicate detection.</li>
+    <li>Added markers \filename and \filepath for ".begin.layout" and ".end.layout" files
+      in order to output the name or full path of the bib file of the exported database.</li>
+    <li>Fixed possible array index exception in LastPage formatter.</li>
+    <li>Improved author/editor normalization in entry editor.</li>
+    <li>Added metadata extraction from text when PDFs are dragged into JabRef.</li>
+    <li>The filename pattern for renaming a file when dropping a PDF can now be
+      configured at "Options"/"Preferences"/"Import"/"File name format pattern".</li>
+    <li>The defaults of the ImportDialog shown when PDFs are dragged into JabRef
+      can now be configured at "Options"/"Preferences"/"Import". It is possible to
+      override showing the ImportDialog.</li>
+    <li>An entry can be sent by a right click on an entry and select "Send as Email"
+      (patch 3306271).</li>
+    <li>Added option to "copy BibTeX key and title" (patch 3370471).</li>
+    <li>The command for pushing to emacs can be configured now. New command for Emacs 23.
+      New default for Windows: emacsclient.</li>
+    <li>Added export support for DIN1505 style (based on patch 1874662).</li>
+    <li>Added support for PostgreSQL import/export (patch 3368760 by Fred Stevens).</li>
+    <li>Added formatter "JournalAbbreviator" (patch 3013311 by Meigel).</li>
+    <li>RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
+      (patch 2905383 by Russell Almond).</li>
+    <li>Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).</li>
+    <li>ToggleButton added to GroupSelector to ease adding/removing references to/from groups
+      (based on patch 3313564 updated by Andreas Schlicker).</li>
+    <li>Export filter "tablerefsandbib" updated to contain links to files and notes
+      (patch 2787096 by Thomas Arildsen).</li>
+    <li>"of" added to the list of skip words (patch 2781830).</li>
+    <li>Added cli-function for exporting entries filtered by a search term
+      (patch 1817093 by Silberer, Zirn)</li>
+    <li>Added highlighting in textarea for search text (patch 3117881 by Ben).
+      Slightly modified to cope with words[]={""}, support for "BibTeX source" tab, and that
+      "Clear" also clears the highlighting.</li>
+    <li>Added highlighting in preview area for search text (based on patch 3121914 by
+      Maximilian Lengsfeld).</li>
+    <li>Switched from PDFBox 0.7.3 to PDFBox 1.6.0.</li>
+  </ul>
+
+  <h3>Version 2.7.2</h3>
+    <ul><li>Fixed bug that prevented search functions from working under Java 7.</li></ul>
+
+  <h3>Version 2.7.1</h3>
+    <ul>
+    <li>Fixed problem with search function under Java 7.</li>
+    <li>Made Database properties dialog modal to prevent database from being closed
+      while properties window is open.</li>
+    <li>Fixed error handling in custom import dialog when invalid jar files or class
+      files are specified.</li>
+    <li>Added OR operator for conditional export formatting.</li>
+    <li>DocBook export format switched to 4.4 (based on patch 3313898).</li>
+    <li>Fixed bug that made the key generator combination [shorttitle:abbr] return
+      only a single letter.</li>
+    <li>"of" added to the list of skip words (patch 2781830).</li>
+    <li>Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).</li>
+    <li>RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
+      (patch 2905383 by Russell Almond).</li>
+    <li>Fixed bug that made menu items for marking in specific colors invisible
+      under Windows 7.</li>
+    <li>In case a new entry is added, this entry is highlighted and the editor is opened
+      if configured in the settings (patch 3370466). The UI behavior of adding an entry
+      at "new entry from plain text" is now similar to "new entry".</li>
+    <li>Fixed bug in focus handling that affected some actions.</li>
+    <li>Running JabRef under the Oracle JVM will no longer give a warning.</li>
+    </ul>
+
+  <h3>Version 2.7</h3>
+    <ul>
+    <li>Medline importer now wraps multipart last names in braces.</li>
+    <li>RIS importer now handles multiple title fields by concatenation.</li>
+    <li>Disallowed "comment" as entry type name, since this conflicts with the BibTeX format.</li>
+    <li>Fixed handling of suffix name parts (Jr, etc.) in Medline importer.</li>
+    <li>Added optional second numeric argument to Authors formatter, which determines
+      how many authors are shown if the maximum number is exceeded.</li>
+    <li>Added content selector for "review" field in entry editor.</li>
+    <li>Improved detection of file type when adding new link. Can now recognize double
+      extensions such as ".ps.gz".</li>
+    <li>Improved autocompletion of author names. Added options to complete either in
+      'Firstname Lastname' or 'Lastname, Firstname' formats, or in both.</li>
+    <li>Fixed bug in import function if no suitable import filter is found.</li>
+    </ul>
+
+  <h3>Version 2.7beta 2</h3>
+    <ul>
+	<li>Added support for MrdLib lookup or metadata extraction when PDFs are dragged
+	into JabRef.</li>
+    <li>Added option under "External programs" for disabling the automatic opening of the
+      Browse dialog when creating a new file link.</li>
+    <li>Fixed shortcut key collision. Shortcut for Import to new database is now Ctrl-Alt-I.</li>
+    <li>The "Open URL or DOI" action now uses URL links in the "file" field as fallback if
+      no links are found in the "url" or "doi" fields.</li>
+    <li>Restricted remote listener port numbers to interval 1025-65535.</li>
+    <li>Added Japanese translation by Koji Yokota.</li>
+    <li>Added scrollbar to entry editor when it is too high to fit in its panel. Patch
+      by Matthias Erll.</li>
+    <li>Made it possible to copy entries from the search dialog.</li>
+    <li>Added proper error message when trying to search with invalid regular expression.</li>
+    <li>Added error dialog on startup if custom look and feel cannot be loaded.</li>
+    <li>Applied Alexander Hug's patch for correctly importing doi from ScienceDirect RIS files.</li>
+    <li>Removed potential NullPointerException in SearchExpressionTreeParser.</li>
+    </ul>
+
+    <h3>Version 2.7beta</h3>
+    <ul>
+	<li>Some improvements to MS Office export filter.</li>
+	<li>Introduced three choices for ensuring unique generated keys. The default one (marking
+      	with a, b, etc.), a modified one (marking with b, c, etc.) and always adding a letter
+      	(a, b, etc.).</li>
+	<li>Font and background colors are now customizable in the entry editor (Options ->
+      	Preferences -> Appearance).</li>
+	<li>Window title now includes the full path to the current file.</li>
+	<li>Entries can now be marked in a series of different colors. Automarking of imported
+	entries is now done in separate color without affecting other marked entries.</li>
+	<li>Added new feature (Tools -> Scan database... -> Resolve duplicate BibTeX keys) to
+	search for duplicate keys and offer to generate new keys to resolve the duplicates.
+	Instead of being listed in a warning dialog after opening a bib file, duplicate keys
+	now trigger a dialog asking whether the user wants to resolve the duplicates.</li>
+	<li>Added check that ensures that application doesn't quit while a large save operation
+	is still in progress. Shows wait message with cancel button.</li>
+	<li>Added apostrophe (') as illegal character in BibTeX keys.</li>
+	<li>BibTeX strings that refer each other are now sorted correctly when saving bib file.</li>
+	<li>Fixed bug in merging external changes - file would still be reported as modified
+	externally after merging changes.</li>
+	<li>Fixed bug in Move/rename file link feature that could cause the wrong link to be
+	stored for certain directory structures.</li>
+	<li>Fixed bug: curly braces can now be used in arguments to formatters. </li>
+	<li>Fixed lockup bug when generating key for entries with crossref fields.</li>
+	<li>BibTeX strings are now resolved before attempting to (un)abbreviate journal names.</li>
+	<li>Modified [shorttitle] and [veryshorttitle] key generator markers so they consider
+	a hyphen a word boundary, and remove punctuation characters (keep only numbers and
+	letters).</li>
+	<li>deprecate various export formatters with new Authors formatter, which provides flexible formatting options.</li>
+    </ul>
+
+    <h3>Version 2.6</h3>
+    <ul>
+        <li>Fixed IEEExplorer and ACM fetchers to adapt to web site changes.</li>
+        <li>Active preview (1 or 2) is now remembered.</li>
+        <li>Applied patch by Igor L. Chernyavsky. to prevent loss of entry selection after
+            generating key.</li>
+        <li>Changed OpenDocument Spreadsheet export so the mimetype file is written correctly
+            at the start of the zip file.</li>
+        <li>Fixed bug when importing preferences: custom export filters would not be updated
+            after import.</li>
+        <li>Changed help page loading procedure so help pages can be loaded for plugin entry
+            fetchers.</li>
+        <li>Made it possible to define customized entry types with either-or conditions on
+            required fields, e.g. using a pseudo-field called "author/editor" will indicate
+            that the entry requires either the "author" or the "editor" field set.</li>
+        <li>Fixed bug: entries of a customized type could be indicated as complete even if
+            BibTeX key was not set.</li>
+        <li>Changed deletion process for some temporary files to avoid leftover files.</li>
+    </ul>
+
+    <h3>Version 2.6beta3</h3>
+    <ul>
+        <li>Added ScienceDirect entry fetcher that utilizes the BibSonomy scraper.</li>
+        <li>Changed non-native file dialog setting so files cannot be renamed. This prevents
+          accidentally entering rename mode when trying to enter directory. Can be enabled
+          again in Options -> Preferences -> Advanced.</li>
+        <li>Added new JStor fetcher that utilizes the BibSonomy scraper to obtain BibTeX data.</li>
+        <li>Fixed bug in CookieHandlerImpl.</li>
+        <li>Fixed bug; when dragging a file into JabRef and asking to move it to the file
+          directory, warning will now be given if the destination file already exists. Patch
+          by Alastair Mailer.</li>
+        <li>When dragging a file into JabRef and asking to copy or move it to the file directory,
+          it is now possible to rename to an arbitrary name. Patch by Alastair Mailer.</li>
+        <li>Added "review" field to BibTeXML export.</li>
+        <li>Added Reset button to entry fetchers. Patch by Dennis Hartrampf and Ines Moosdorf.</li>
+        <li>Changed Microsoft Office XML export so "number" rather than "issue" is exported
+          as <b:Issue>, which conforms with import format.</li>
+        <li>Added confirmation dialog that allows saving without backup in cases when
+          backup creation fails.</li>
+        <li>Fixed bug 2938562: using the move/rename feature on a file link could give an
+          absolute link even if the file was put below the main file directory.</li>
+        <li>Fixed bug 2931293: error generating key with [authorsAlpha] for short names.</li>
+        <li>When checking for external modifications, file size is now checked in addition
+          to the time stamp.</li>
+        <li>Fixed handling of maximised state when shutting down and starting up JabRef.
+          Patch by Igor L. Chernyavsky.</li>
+        <li>Fixed bug that prevented correct handling of DOS short file names. Patch
+          by Igor L. Chernyavsky.</li>
+        <li>Added support for KOI8_R character set.</li>
+        <li>Removed DocumentPrinter class, using standard API functions instead. Patch by
+          Tony Mancill.</li>
+        <li>Removed HightlightFilter class, using standard API functions instead. Patch by
+          Tony Mancill.</li>
+        <li>Changed keyboard shortcut for IEEXplorer search to Alt-F8.</li>
+        <li>Disabled JStor search, which doesn't work due to API changes.</li>
+        <li>External file type manager now removes "." prefix in file type extension if the user
+          has typed it that way.</li>
+        <li>Preview panel now defaults to preview layout 1 instead of 2. Switched default layouts.</li>
+        <li>Added IfPlural formatter by Russell Almond. The formatter outputs its first argument
+          if the input field contains " and " and the second one otherwise.</li>
+        <li>Applied patch by Philipp Cordes and Björn Kahlert for improved handling of names by
+          autocompleter. The patch also reorganizes the autocompleter classes.</li>
+        <li>Table will now scroll to keep the currently edited entry visible if an edit leads to
+          the entry getting sorted to a different position.</li>
+        <li>Reworked author and editor handling in Docbook export. Added Docbook XML header.</li>
+        <li>Database will no longer be marked as changed after accepting external changes, unless one or
+          more changes were not accepted before merging, and unless database was already marked as
+          changed.</li>
+        <li>Fixed bug: undesired autocompletion when saving file.</li>
+        <li>Fixed bug: entry editor doesn't appear when new entry is added while a filtering search or
+          group selection is active.</li>
+        <li>Fixed bug in writing of metadata on Windows. For certain metadata lengths newlines would be
+          messed up after the metadata comment in a bib file.</li>
+        <li>Search dialog now automatically previews first hit, and hides preview if there are no hits.</li>
+    </ul>
+
+    <h3>Version 2.6beta2</h3>
+    <ul>
+        <li>Added export formatter "Default" which takes a single argument. Outputs the string to format
+          unchanged if it is non-empty, otherwise outputs the argument.</li>
+        <li>Added option under Options -> Preferences -> General for disabling the strict enforcing of
+          correct BibTeX keys. Disabling this makes it possible to use e.g. umlaut characters in keys.</li>
+        <li>Modified launcher script for Windows installer to give higher heap size limit.</li>
+        <li>Improved autocompletion. All fields with autocompletion which have content selectors will now
+          autocomplete on content selector values. For the "journal" field, the autocompleter will now
+          additionally use entries from the current journal abbreviations list, and will also complete
+          on the entire field up to the cursor rather than just looking at the last word only.</li>
+        <li>Added support for postformatter in Layout. The postformatter will be run after
+          the formatters called from a layout.</li>
+        <li>Improved group autogeneration. Added option to generate groups based on author or editor
+          last names. Autogenerated groups are now alphabetized.</li>
+        <li>Modified Endnote export filter so "--" gets converted to "-" in the "pages" field.</li>
+        <li>Changed keyword groups so they will match on whole words only. E.g. a keyword group for the
+          keyword "can" will no longer match the keyword "scanner".</li>
+        <li>Improved entry type determination and author parsing for some varieties of CSA files.</li>
+        <li>Minor change to Harvard RTF export. Added space after "ed.", and added editor to output for
+          inbook entries.</li>
+        <li>Set limit to the number of displayed characters in group names in groups tree in order to
+          avoid group panel width problems.</li>
+        <li>Changed file link handling so all remote links classified as URL can be opened through
+          the browser. Setting a different file type manually makes JabRef call a remote link using
+          the handler application instead.</li>
+        <li>Modified Endnote/refer import filter to strip "doi:" from the %R field.</li>
+        <li>Modified HTML conversion so single newline is displayed in the preview (and HTML exports) as
+          <br>, while multiple newlines are displayed as <p>.</li>
+        <li>Fixed bug: switching entry editor between entries of different type may result in switching
+          of entry editor tabs.</li>
+        <li>Fixed bug: adding external file link leads to relative path from root directory if file
+          directory is set to an empty string.</li>
+        <li>Fixed error message when a # in a BibTeX string prevents saving. No longer states that the
+          problem is in an entry, but specifies that it is in a string.</li>
+        <li>Fixed bug: ODS export doesn't resolve BibTeX strings.</li>
+        <li>Fixed bug: content selector for "editor" field uses "," instead of " and " as delimiter.</li>
+        <li>Fixed bug: editing source doesn't allow change of entry type.</li>
+        <li>RTFChars formatter now converts --- to \emdash and -- to \endash.</li>
+    </ul>
+
+    <h3>Version 2.6beta</h3>
+
+    <ul>
+        <li>Added pages information to several entry types in Endnote export.</li>
+        <li>Modified LastPage formatter so it returns the number when only the number of pages is given.</li>
+        <li>Modified search algorithms so LaTeX commands are removed before search. For instance, this
+            means that the value "test \textit{case}" now matches the search string "test case".</li>
+        <li>Changed default table font family to "SansSerif".</li>
+        <li>Can now create lock file while writing a bib file. The lock file is checked before
+            saving, and before scanning an externally changed file, in order to avoid reading an
+            unfinished file.</li>
+        <li>Added support for dragging a file link from the file column to another application.</li>
+        <li>Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.</li>
+        <li>Improved ISI import filter so DOI information is included.</li>
+        <li>Fixed bug: metadata changes would not be detected as external changes to a database.</li>
+        <li>Fixed bug: when accepting external changes and not saving before new changes are
+            detected, the previously accepted changes would also be listed.</li>
+        <li>Fixed bug in Scifinder import where an empty Inventor field could overwrite the
+            author field.</li>
+        <li>Fixed bug in autocompleter. Current suggested completion would be added to the field
+            if the user closed the entry editor or mouse clicked on another field.</li>
+        <li>Fixed problem with exporting to some MySql versions. Patch by François Dorin.</li>
+        <li>Fixed bug in handling of LaTeX character sequences - now sequences with = as command
+            character (e.g. "\={A}") are recognized.</li>
+        <li>Fixed bug: gray out / hide setting in groups panel is overridden on startup
+            by search mode selection. Added separate prefs key for the groups setting.
+            Fix suggested by Igor L. Chernyavsky.</li>
+        <li>Fixed bug: cookie manager installed by Download button in file field editor throws
+            an exception when trying to fetch from Medline.</li>
+        <li>Fixed bug: temporary files don't get deleted on shutdown.</li>
+        <li>Disabled table column reordering in import inspection window, since a user reported
+            problems when using this.</li>
+        <li>Changed years from 2008 to 2009 in splash image.</li>
+    </ul>
+    <h3>Version 2.5 (June 22nd, 2009)</h3>
+    <ul>
+        <li>Modified export layout procedure so missing formatters can be reported in the error
+          output. Export now succeeds with warnings added where formatters are missing.</li>
+        <li>Conditional blocks (\begin{field}...\end{field}) in layout files can now be given a
+          semicolon-separated list of fields as argument. All fields must then be set for output
+          to be given.</li>
+        <li>Changed RIS import so multiple abstract fields in an entry are concatenated.</li>
+        <li>Added quoting of some special characters in SQL export, based on Kyle Crabtree's patch.</li>
+        <li>Fixed bug in MS Office 2007 XML export - editor names missing.</li>
+        <li>Fixed bug in plugin manager that prevented the "Download plugin" button from working.</li>
+        <li>Fixed bug in plugin manager routine that checks for installed versions of a plugin.</li>
+        <li>Fixed bug in startup that could show warnings multiple times when loading
+          from autosave files.</li>
+    </ul>
+    <h3>Version 2.5beta 2 (May 19th, 2009)</h3>
+    <ul>
+        <li>Plugin manager now handles plugin versions correctly based on the version number in their
+          plugin.xml file.</li>
+        <li>Added formatter "Number" that outputs a sequence number for the current entry in the current
+          export operation. This formatter can be used to produce a numbered list of entries.</li>
+        <li>Added autosave feature.</li>
+        <li>Fixed bug in file link handling in BibTeXML export.</li>
+        <li>Improved handling of patents in Scifinder import.</li>
+    </ul>
+
+    <h3>Version 2.5beta (April 21st, 2009)</h3>
+
+    <ul>
+      <li> Added Simplified Chinese translation.</li>
+      <li> Added simple plugin manager.</li>
+      <li> Added ~/.jabref/plugins as user-specific plugin directory.</li>
+      <li> Added \r marker to WrapFileLinks formatter that outputs file links without expanding relative links.</li>
+      <li> Added [authorsAlpha] key marker that formats authors according to the "alpha" BibTeX style. Patch submitted by Oliver Kopp.</li>
+      <li> Table sort order set by clicking and Ctrl-clicking table columns is now immediately set as default sort order in preferences.</li>
+      <li> Changed LyX pipe setting so it works whether ".in" is included or omitted.</li>
+      <li> Modified ISI importer so the words "of", "and" and "the" will not be capitalized in the title, journal or publisher fields.</li>
+      <li> When adding new local file link, browse dialog now appears immediately when opening file link editor, saving one mouse click.</li>
+      <li> Added "Remove all broken links" option in the resolver dialog for broken links when synchronizing file links.</li>
+      <li> Added rename option to Set/clear field dialog, to move contents from one field to another.</li>
+      <li> Added Back and Forward actions, for switching between recently edited BibTeX entries.</li>
+      <li> Added option under "Entry table" to designate fields as numeric for sorting purposes.</li>
+      <li> Added possibility for custom export filters to define their own name formatters. This is done by adding a file named "<filtername>.formatters". This file defines one formatter on each line, with each line containing the name of the formatter and the formatter definition, separated by a colon (:).</li>
+      <li> Added menu items for increasing/decreasing table font size, with shortcut keys Ctrl-plus and Ctrl-minus.</li>
+      <li> Added options to automatically mark entries imported into an existing database, and to unmark previously marked entries when importing.</li>
+      <li> Added ":(x)" modifier to key generator, specifying that the arbitrary string x should be used as a fallback value if the value returned by the field marker is empty.</li>
+      <li> Added ":upper" modifier to key generator, to force uppercase for a field marker.</li>
+      <li> Added buttons in External programs tab in Preferences for modifying settings for "Push to"-features, and removed obsolete fields.</li>
+      <li> Added support for DOI field in Endnote importer.</li>
+      <li> Added support for language and publication status fields in Medline import (publication status stored in "medline-pst" field).</li>
+      <li> Enabled cookie handling for downloading full-text articles.</li>
+      <li> Improved handling of invalid BibTeX keys containing white space. Parser will now try to piece together the key and avoid disturbing the continued parsing. Patch submitted by Stephan Lau.</li>
+      <li> Cosmetic change to the entry type label to the left in the entry editor.</li>
+      <li> Changed name handling so a single-entry name without a capital initial letter, such as "unknown", will be treated as a solitary last name rather than a von particle.</li>
+      <li> Changed table selection coloring so entries that are grayed out or marked can be distinguished from normal entries when selected.</li>
+      <li> Changed handling of "affiliation" in Medline import - now makes sure to escape # characters before storing.</li>
+      <li> Modified ACM portal fetcher due to web site changes.</li>
+      <li> Improvements to IEEEXplore fetcher - better handling of month and page fields.</li>
+      <li> Changed behaviour of source panel when an entry contains imbalanced # characters - the panel can now show the entry in its invalid form, allowing the user to fix the problem.</li>
+      <li> Improved handling of PDF files without XMP metadata - other metadata will now be retained. Patch submitted by Felix Langner.</li>
+      <li> Fixed bug in parsing file field - double spaces in file names would be reduced to single spaces, breaking the file link. Fix submitted by Uwe Kuehn.</li>
+      <li> Fixed NullPointerException when downloading external file and file directory is undefined.</li>
+      <li> Fixed bug in HTMLConverter.</li>
+      <li> Fixed NullPointerException in key generator for incomplete names.</li>
+      <li> Fixed bug in removing custom export filters.</li>
+      <li> Fixed bug 2225371: restart is no longer required after adding a new custom export filter. </li>
+      <li> Fixed bug in "Move/rename file" feature in file field editor with regard to undefined file directory.</li>
+      <li> Fixed bug in Ris importer.</li>
+      <li> Fixed NullPointerException in Endnote importer.</li>
+    </ul>
+
+
+    <h3>Version 2.4.2 (November 1st, 2008)</h3>
+
+    <ul>
+      <li>Added missing layout formatters FirstPage and LastPage.</li>
+      <li>Fixed a bug regarding ParamLayoutFormatter loaded from plugin.</li>
+      <li>Fixed crash during initalization of journal abbreviation list.</li>
+      <li>Added option to have JabRef search for external file when "Open file" function is chosen for an entry without any linked files. This is similar to what was always done in JabRef 2.3.1 and earlier.</li>
+      <li>Improved regular expression file search, so the regular expression can contain field markers as used for BibTeX key generation in addition to just regular fields. It is no longer possible to call arbitrary layout formatters, but the modifiers "upper", "lower" and "abbr" (for case conversion and abbreviation) can be used.</li>
+      <li>Ris importer now imports PB as "school" instead of "publisher" for THES entries.</li>
+      <li>Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.</li>
+    </ul>
+
+    <h3>Version 2.4.1 (October 8th, 2008)</h3>
+
+      <ul>
+        <li>Fixed bug: layout formatter arguments were not set when using a ParamLayoutFormatter loaded from plugin.</li>
+        <li>Fixed bug: when abbreviating first names, for authors with first names connected with "-", only the first letter is shown.</li>
+        <li>Enhanced ExportFormatTemplate plugins with an optional property "encoding" which overrides the default encoding with the given one.</li>
+        <li>Fixed menu colors under Windows Vista.</li>
+        <li>Fixed bug 2137771: Missing file extension when downloading.</li>
+        <li>Fixed bug 2105329: Ensure that newly added entry is visible in table.</li>
+        <li>Fixed bug 1908222: Preference "Fit table horizontally on screen" doesn't work</li>
+        <li>Fixed bug 2119059: Handling of the A1 tag in the RIS format.</li>
+        <li>Added missing help file for ACM digital library fetcher.</li>
+        <li>Added option for whether to use IEEE LaTeX journal abbreviation list.</li>
+        <li>Added tooltip to menu items in push-to-application popup menu.</li>
+      </ul>
+
+
+    <h3>Version 2.4 (September 1st, 2008)</h3>
+
+      <ul>
+        <li>Added mappings for some special characters that need to be sanitized when generating BibTeX keys.</li>
+        <li>Added ACM Digital Library fetcher by Aaron Chen.</li>
+        <li>Added new entry types (conference, patent, standard, electronic).</li>
+        <li>Improvements to IEEEXplore fetcher.</li>
+        <li>Added explanatory text to indicate that "ps" and "pdf" files are legacy features.</li>
+        <li>Fixed unexpected behaviour of "Open PDF or PS" menu item - now looks in "file" field, and does not launch search for external files.</li>
+        <li>Fixed bug 1827568: 'Save database' might not store current edit in entry editor.</li>
+        <li>Fixed bug 2027944: updating custom export definitions requires restart.</li>
+      </ul>
+
+
+    <h3>Version 2.4beta (March 12th, 2008)</h3>
+
+      <ul>
+	<li>Added "protection" flag in Database properties. When this flag is set, JabRef will refuse to save the database when the file has been externally modified, until the changes have been reviewed and partly or completely accepted.</li>
+	<li>Fixed bug where the external update notification in the side pane would remain even if the referred database was closed.</li>
+	<li>Added two new search modes - display search results in a dialog, and global search.</li>
+	<li>Support for fetching from the command line using --fetch (contributed by Jan F. Boldt and David Kaltschmidt).</li>
+	<li>Support for fetching from Spires (contributed by Fedor Bezrukov).</li>
+	<li>Support for fetching from JSTOR (contributed by Tobias Langner, Juliane Doege, Sebastian de Hoog and Christoph Jacob)</li>
+	<li>Added context menu for file list editor with options to move/rename linked file as well as to automatically move the file to file directory and optionally rename after BibTeX key.</li>
+	<li>JabRef can now be extended by plugins (using the Java Plugin Framework JPF as the underlying technology). Currently extension points exist for:
+          <ul>
+            <li>ImportFormat</li>
+            <li>ExportFormat based on Templates</li>
+            <li>ExportFormat based on IExportFormat (contributed by Kariem Hussein)</li>
+            <li>LayoutFormatter</li>
+            <li>EntryFetcher</li>
+            <li>PushToApplication</li>
+          </ul>
+           JabRef uses JPFCodeGenerator (which was written just for JabRef) to generate helper classes for making JPF easier. Current version used: 0.4 http://forge.spline.inf.fu-berlin.de/projects/jpfcodegen/
+	</li>
+	<li>Print warnings if insufficient Java version is used or if JRE is not from Sun.</li>
+	<li>Memory Stick Mode: JabRef automatically loads configuration settings from jabref.xml and also writes them there if enabled.</li>
+	<li>Improved handling of crossrefs. Fields are now resolved in preview and export.</li>
+	<li>Updated dependencies, now using: JempBox-0.2</li>
+	<li>Improved handling of ArXiv URIs.</li>
+	<li>Changed default preference value: now using import inspection dialog also when just a single entry is imported.</li>
+	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
+	<li>[ 1738920 ] Fixed: Windows Position in Multi-Monitor environment</li>
+	<li>[ 1795355 ] Fixed: LatexFieldFormatter omits "{" on beginning of optional field</li>
+	<li>[ 1297576 ] New feature: Printing of entry preview (use right-click menu)</li>
+	<li>[ 1717849 ] Fixed: Bug in aux import (contributed by Kai Eckert)</li>
+	<li>[ 1749613 ] Fixed: About translation</li>
+	<li>[ 1709449 ] Fixed: Clicking a DOI from context menu fails</li>
+	<li>[ 1869331 ] Fixed: Uninstall after silent install removes Windows start menu</li>
+	<li>[ 1723219 ] Fixed: Strange message (LyX) while installing 2.3</li>
+	<li>Added handling of unknown file types when synchronizing the file field.</li>
+	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
+	<li>Moved file preferences from General tab to new File tab.</li>
+	<li>Reduced horizontal size of preferences dialog.</li>
+	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
+	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).    </li>
+      </ul>
+
+
+    <h3>Version 2.3.1 (November 29th, 2007)</h3>
+
+      <ul>
+	<li>Removed default applications for file types under Mac OS X, and made use of the standard "/usr/bin/open <filename>" way to open files except when an application name is explicitly set.</li>
+	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
+      </ul>
+
+
+    <h3>Version 2.3 (November 8th, 2007)</h3>
+
+      <ul>
+	<li>Added handling of unknown file types when synchronizing the file field.</li>
+	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
+	<li>Moved file preferences from General tab to new File tab.</li>
+	<li>Reduced horizontal size of preferences dialog.</li>
+	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
+	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).</li>
+      </ul>
+
+
+    <h3>Version 2.3beta3 (October 6th, 2007)</h3>
+
+      <ul>
+	<li>Export formats that output the character encoding now use common names for encodings instead of Java-specific names.</li>
+	<li>Added "Open" button in external link dialog box to test or use the link.</li>
+	<li>Added formatter WrapFileLinks which iterates over file links, producing a formatted string for each containing any desired information about the file link.</li>
+	<li>Applied Fedor Bezrukov patch (setting User-Agent in URLDownload to solve ArXiv problem).</li>
+	<li>Applied Aaron Chen's patch for fixing bugs in IEEExplore fetcher.</li>
+	<li>Applied Edward Valeev's patch for handling article numbers replacing pages in Refer/Endnote import.</li>
+	<li>Added toolbar button to entry editor for writing XMP-metadata.</li>
+	<li>Added paste and drag & drop support to file list editor.</li>
+	<li>Added "authorLast" and "editorLast" markers for using last author's last name in BibTeX keys.</li>
+	<li>Added support for file field in Write XMP action.</li>
+	<li>Numeric fields (year, volume, number, pmid, citeseercitationcount) are now sorted as numbers when possible.</li>
+	<li>Improvements to the Ovid import filter.</li>
+	<li>Modified AuthorLastFirstAbbreviator and AuthorAbbreviator to accept names in both last-first and first-first format, but always return in last-first format. These two formatters are identical.</li>
+	<li>[ 1648789 ] Fixed: Problem on writing XMP when option to leave out some fields was active.</li>
+	<li>[ 1561990 ] Fixed: Exporting to WinEdt - apostrophe.</li>
+	<li>Fixed bug in entry editor: source panel edits were not properly stored when clicking a different entry in the main table.</li>
+	<li>Fixed problem with "Synchronize file links" not honouring database specific file directory.</li>
+	<li>Fixed problem with file type selection in external file link editor not being up-to-date.</li>
+	<li>Fixed problem with wrong enable/disable behaviour of Clear search button when switching between tabs.</li>
+	<li>Fixed argument parsing in AbstractParamLayoutFormatter so \t and \n can be used for tabs and newlines.</li>
+      </ul>
+
+
+    <h3>Version 2.3beta2 (August 29th, 2007)</h3>
+
+      <ul>
+	<li>When user chooses to save to an existing file, and answers that the file should not be overwritten, a new file dialog now appears instead of the operation cancelling.</li>
+	<li>Removed antialias setting for main table, because it interferes with proper rendering on LCDs when running under JRE 6. Removed non-optional antialias settings for entry editor for the same reason.</li>
+	<li>Changed external link handling so remote (http) links can be sent to the external application. Applications like Evince and Gimp can open remote links.</li>
+	<li>Replaced Simle HTML export filter with improved version by Mark Schenk.</li>
+	<li>Introduced ParamLayoutFormatter interface for layout formatters that can take an argument by the following syntax: \format[MyFormatter(argument)]{\field}. Implementing classes contain a setArgument(String) method that receives the argument (if any) before the format() method is called.</li>
+	<li>Timestamp and owner fields are now set also when appending a bib file, and new options have been introduced to control whether imported/appended/pasted entries should have these fields overwritten if already set.</li>
+	<li>Added operations for adding file links in import inspection window, and made file and URL icons in the table clickable.</li>
+	<li>Removed PDF and PS columns and operations in import inspection window (replaced by operations on the "file" field).</li>
+	<li>File field column in main table now shows file type icon instead of generic icon.</li>
+	<li>Modified Endnote export to take "file" field into account, and to resolve full paths to PDF files.</li>
+	<li>Added "Auto" button to automatically set "owner" field to the default username.</li>
+	<li>Added \encoding tag for begin/end layouts in export filters to print the name of the character encoding used for the export. The tag is not available in entry layouts.</li>
+	<li>Added \% as a supported LaTeX command, producing '%'.</li>
+	<li>Fixed bug in HTMLChars: commands like {\aa} and {\o} were not processed properly, even though defined in Globals.HTMLCHARS.</li>
+	<li>Fixed bug that made it possible to accidentally close database without saving, when error occurs during the save operation.</li>
+      </ul>
+
+
+    <h3>Version 2.3beta (June 28th, 2007)</h3>
+
+      <ul>
+	<li>Added MIS Quarterly export format.</li>
+	<li>Added support for COPAC file format.</li>
+	<li>Added RemoveTilde LayoutFormatter to deal with Bibtex non-breakable spaces.</li>
+	<li>Added autocompletion feature for author/editors and other fields.</li>
+	<li>Added feature to save all open databases.</li>
+	<li>Added support for pushing citations to Vim when Vim server is enabled.</li>
+	<li>Added missing option for specifying the path to LEd.exe.</li>
+	<li>Added -s/--nosplash command line option for disabling the splash screen.</li>
+	<li>Added new field marker [auth.etal] for key generation.</li>
+	<li>Added support in XMP metadata handling for bibtex string resolution.</li>
+	<li>When opening databases, already open files are now skipped.</li>
+	<li>Option to use native instead of Swing file dialogs is now available on all OSes.</li>
+	<li>Synchronize external links now searches entire database, not selected entries.</li>
+	<li>Medline import now adds <Affiliation> information into the "institution" field.</li>
+	<li>Improved handling of external links. The 'file' field can now specify a list of external links, and arbitrary file types are supported. Old-style PDF and PS links can be moved automatically into the 'file' field.</li>
+	<li>Fixed bug in RIS and Refer/Endnote imports. Entries with editors but no authors are now imported properly.</li>
+	<li>Fixed missing export formatter AuthorFirstFirstCommas.</li>
+	<li>Fixed minor bug in Harvard export with missing space between year and title.</li>
+	<li>Fixed bug that caused lockup when connection to IEEExplore fails.</li>
+	<li>Fixed wrong dependency in OAI2/ArXiv Fetcher.</li>
+	<li>Fixed problem with foreign characters in OAI2/ArXiv Fetcher.</li>
+	<li>Fixed problem with key generation in OAI2/ArXiv Fetcher.</li>
+	<li>Fixed bug in duplicate search that made misc entries never get detected as duplicates.</li>
+	<li>Fixed bug in XMP reimport from DublinCore related to month strings.</li>
+      </ul>
+
+
+    <h3>Version 2.2 (January 30th, 2007)</h3>
+
+      <ul>
+	<li>Added progress bar to indicate progress when synchronizing PS/PDF links.</li>
+	<li>Option to autogenerate key for imported entries now also affects entries imported
+      without using the import inspection window.</li>
+	<li>Modified quick jump behaviour so sequences of letters can be found. Timeout or
+      ESC resets the search.</li>
+	<li>Improved XMP support:
+          <ul>
+	    <li>JabRef now reads and write DublinCore and Legacy Document Properties;
+		Caution needs to be used though since, JabRef does overwrite existing values.</li>
+	    <li>XMP privacy filter can be used to prevent sensible fields to be exported.</li>
+          </ul>
+	</li>  
+	<li>Support for OAI2 identifiers with subcategories, e.g. math.RA/0601001</li>
+	<li>Fixed bug that made explicit groups appear empty after updating group tree from external change.</li>
+	<li>New windows installer thanks to Uwe Stöhr.</li>
+	<li>[ 1641247 ] Fixed: No update of preview after generating bibtex key</li>
+	<li>[ 1631548 ] Fixed: Absolute paths should be stored for last open files.</li>
+	<li>[ 1598777 ] Fixed: Month sorting</li>
+	<li>[ 1570570 ] New Feature: Deselect all duplicates on import</li>
+	<li>[ 1574773 ] Fixed: sanitizeUrl() breaks ftp:// and file:///</li>
+	<li>[ 1609991 ] Fixed: Silverplatter Import: Publisher and Year confused</li>
+	<li>[ 1608391 ] Fixed: Medline Search Editbox size gets to big</li>
+      </ul>
+
+
+    <h3>Version 2.2beta2 (November 26th, 2006)</h3>
+
+      <ul>
+	<li>Redesigned export functions to simplify GUI and provide "Export selected entries" functionality. Export filter is now chosen using the file type dropdown menu in the file dialog.</li>
+	<li>Fixed bug that caused UnsupportedEncodingException on Windows when saving.</li>
+	<li>Added warning dialog when exporting failed.</li>
+	<li>Added fix for exporting special chars in RTF like éóú...</li>
+	<li>Added NameFormat LayoutFormatter based on Bibtex method name.format$</li>
+	<li>Added Fetch from ArXiv.org to Web Search<br />
+            [1587342] Quering ArXiv (and any OAI2 Repository)</li>
+	<li>[1594123] Fixed: Failure to import big numbers in Bibtex</li>
+	<li>[1594169] Fixed: Entry editor navigation between panels faulty</li>
+	<li>[1588028] Fixed: Export HTML table has relative DOI URL</li>
+	<li>[1601651] Fixed: PDF subdirectory - missing first character</li>
+      </ul>
+
+
+    <h3>Version 2.2beta (October 13th, 2006)</h3>
+
+      <ul>
+	<li>Added Mark Schenk's advanced HTML export filter.</li>
+	<li>Added options to copy/move/link to dragged linkable file (pdf, ps, etc.).</li>
+	<li>Removed unnecessary output text when scanning for external file changes.</li>
+	<li>Changed layout of entry editor to solve problem with collapsing text fields.</li>
+	<li>Added first version of support for XMP-metadata in PDFs.
+          <ul>
+	    <li>"Import into..."</li>
+            <li>Integrate with copy/move/link.</li>
+            <li>Added option to write all/selected PDFs in database</li>
+          </ul>
+	</li>
+	<li>Added tooltips to database tabs showing the file's full path.</li>
+	<li>Added function for setting or clearing specific fields in selected or all entries.</li>
+	<li>Setting a relative PDF/PS path in Database Properties now makes JabRef look for the directory relative to the bib file's location.</li>
+	<li>Removed Oxford comma from AuthorList...Comma-LayoutFormatters.</li>
+	<li>Added LayoutFormatters that print the Oxford comma.</li>
+	<li>Added missing space between abbreviated author first names: William Andrew Paul => W. A. Paul (used to be W.A. Paul)</li>
+	<li>Added LayoutFormatter for HTML paragraphs.</li>
+	<li>Changing Database Properties now causes the database to be marked as changed.</li>
+	<li>Improved simple search. Words are now treated as separate search terms, and phrases can be indicated with "double quotes".</li>
+	<li>When a letter key is pressed in the table, the first entry starting with the same letter (in the current sort column) is selected.</li>
+	<li>Bib files dragged into JabRef now appear in the Recent files menu.</li>
+	<li>Fixed bug in import dialog.</li>
+	<li>Better support for ISI files in general (should basically be better than INSPEC) including IEEE parsing.</li>
+	<li>Added regular expression search for auto-linking. Search is now more flexible by default.</li>
+	<li>Search operation also now search relative to the JabRef directory.</li>
+	<li>General improvements in Inspec ISI handling.</li>
+	<li>New LayoutFormatter: AuthorOrgSci - first author is in "last, first" all others in "first last". First names are abbreviated.</li>
+	<li>New LayoutFormatter: NoSpaceBetweenAbbreviations - spaces between multiple abbreviated first names are removed.</li>
+	<li>Improved PDF link resolver to produce proper URIs.</li>
+	<li>[1503956] Fixed: Help text instead of Help icon.</li>
+	<li>[1542552] Fixed: Wrong author import from ISI file.</li>
+	<li>[1534537] Fixed: resize groups interface</li>
+	<li>[1465610] Fixed: (Double-)Names containing hyphen (-) not handled correctly</li>
+	<li>[1436014] Fixed: No comma added to separate keywords</li>
+	<li>[1548875] Fixed: download pdf produces unsupported filename</li>
+	<li>[1545601] Fixed: downloading pdf corrupts pdf field text</li>
+	<li>[1285977] Fixed: Impossible to properly sort a numeric field</li>
+	<li>[1535044] Fixed: Month sorting</li>
+	<li>[1540646] Fixed: Default sort order: bibtexkey</li>
+	<li>[1553552] Fixed: Not properly detecting changes to flag as changed</li>
+      </ul>
+
+    <h3>Version 2.1 (August 9th, 2006)</h3>
+
+      <ul>
+	<li>Added capability to drag files and WWW links into JabRef. BibTeX files will be opened normally, other files imported, and WWW links downloaded and imported.</li>
+	<li>The -v command line option now makes the application only print version number and quit immediately.</li>
+	<li>Duplicates within a set of imported entries are now found and shown in the import inspection window.</li>
+	<li>Mac users can now choose between native and Swing file chooser under Preferences -> Advanced.</li>
+	<li>Fixed missing duplicate warning when importing without import inspection window.</li>
+	<li>Fixed error in ISI import which allowed empty fields to be set, causing errors when saving and reloading entries.</li>
+	<li>Fixed missing time and owner stamps when importing entries (only in 2.1b/2.1b2).</li>
+	<li>Fixed erroneous updates in entry editor if user switches to a different entry while downloading PDF/PS file.</li>
+	<li>Fixed bug (only in 2.1b2) in calling file open/save dialog on Mac OS X.</li>
+	<li>Fixed bug that made duplicate resolver dialog pop under import inspection dialog.</li>
+      </ul>
+
+    <h3>Version 2.1beta2 (June 29th, 2006)</h3>
+
+      <ul>
+	<li>Added option to toggle floating of marked entries to the top of the table.</li>
+	<li>Added option to open, append and import multiple BibTeX files.</li>
+	<li>Improved support for LaTeX special characters in HTML and RTF representations.</li>
+	<li>Fixed bug that made entry selection get lost when an edit modifies the entry's position in the main table.</li>
+	<li>Fixed bug in BibTeXML export (entry type name missing in tag).</li>
+	<li>Fixed name handling in (non-compliant) Endnote files giving all author names on the same line.</li>
+	<li>Fixed problem with keyword handling in Medline import.</li>
+	<li>Fixed (harmless) NullPointerException when medline fetch is cancelled.</li>
+	<li>Fixed bug in parser that made {"} illegal in fields quoted with ".</li>
+      </ul>
+
+    <h3>Version 2.1beta (May 9th, 2006)</h3>
+
+      <ul>
+	<li>Known issue: font sizes cannot be changed, but should follow OS settings on Windows and Mac.</li>
+	<li>Known issue: some HTML may be handled inappropriately when downloading from IEEEXplore.</li>
+	<li>Changed Paste function so timestamp and owner fields are updated.</li>
+	<li>Added "Other" item to the "New entry ..." menu.</li>
+	<li>Changed sorting order so marked entries are displayed at the top of the table.</li>
+	<li>Added IEEEXplore search and download feature.</li>
+	<li>Added option to store entries in their original order. Unsorted table view now shows entries in their original order.</li>
+	<li>Added option to autogenerate keys for entries with missing keys before each save.</li>
+	<li>Improved handling of external URLs to prevent problems with special characters.</li>
+	<li>Medline and Endnote imports no longer automatically add curly braces around capital letters in title.</li>
+	<li>Float search now scrolls table to the top.</li>
+	<li>Fixed lockup problem in preview with uneven number of # characters in fields.</li>
+	<li>Fixed problem with default content selector fields reappearing after removal.</li>
+	<li>Fixed problem with unsupported character encodings being selectable and causing unreported save errors.</li>
+	<li>Fixed bug that blocked last line in table columns setup from being removed.</li>
+	<li>Fixed missing export formats from command line.</li>
+	<li>Fixed bug that made Review tab impossible to remove from entry editor.</li>
+	<li>Fixed bug in Medline XML import that assigned wrong PMID for some entries.</li>
+	<li>Fixed bug in custom export that collapsed sequences of two or more backslashes into a single backslash in output.</li>
+	<li>Fixed bug (misspelled formatter name) in Harvard RTF export.</li>
+      </ul>
+
+    <h3>Version 2.0.1 (February 2nd, 2006)</h3>
+
+      <ul>
+	<li>Fixed bug that made a hidden entry editor under some circumstances store a field value to the wrong entry.</li>
+	<li>Fixed synchronization bug that made the opening of a new database sometimes fail.</li>
+	<li>Fixed bug in setting external journal lists when no personal list is set.</li>
+      </ul>
+
+    <h3>Version 2.0 (January 30th, 2006)</h3>
+
+      <ul>
+	<li>Changed sorting selection interface for main table for more intuitive operation.</li>
+	<li>Made import operation update "working directory".</li>
+	<li>Removed hard-coded author/editor name rearrangement in OpenOffice and OpenDocument exports.</li>
+	<li>Fixed hangup when parsing RIS files from Nature.</li>
+	<li>Fixed NullPointerException when generating database from AUX file on Mac OS X.</li>
+	<li>Fixed bug in routine for adding braces around capital letters.</li>
+	<li>Fixed bug in switching preview layouts.</li>
+	<li>Fixed bug in link handling in entry preview.</li>
+      </ul>
+
+    <h3>Version 2.0b2 (January 15th, 2006)</h3>
+
+      <ul>
+	<li>Changed field order in OpenDocument export
+	to comply with bibliography requirement.</li>
+	<li>Added support for inserting citations into
+	Emacs using gnuserv/gnuclient.</li>
+	<li>Added option to set a regular expression
+	replace operation on generated bibtex keys.</li>
+	<li>Added support for custom importers inside
+	a jar file.</li>
+	<li>Fixed bug in opening URLs containing "&"
+	on Windows.</li>
+      </ul>
+
+    <h3>Version 2.0b (January 4rd, 2006)</h3>
+
+      <ul>
+	<li>Added a system for registering custom import
+	formats in the form of Java classes.</li>
+
+	<li>Added export option for OpenDocument
+	spreadsheet.</li>
+
+	<li>Added new options for name formatting in main
+	table.</li>
+
+	<li>Added REPEC-NEP import filter.</li>
+
+	<li>Added option for non-field parameters for export
+	formatters. If the parameters does not start with the
+	backslash character, it will be passed unchanged to the
+	formatter in place of any field value.</li>
+
+	<li>Added export formatter CurrentDate, which returns
+	the current date, and takes a format string as
+	parameter.</li>
+
+	<li>Added customization of table colors, accessible
+	from Tools -> Preferences -> Entry table.</li>
+
+	<li>Added new Appearance tab to preferences dialog to
+	gather appearance related options.</li>
+
+	<li>Added toggling of abbreviated and full journal
+	names. The list of journals is realized as an external
+	file, but editable from a Manage Journal Abbreviations
+	panel. Secondary lists can also be linked, but not
+	edited. There is a download option to quickly get a
+	list available on the internet, and we will provide one
+	or more lists for download from the SourceForge web
+	server.</li>
+
+	<li>Added functionality for new JabRef instances to
+	detect a running instance, and send command line
+	parameters to the running instance for processing.</li>
+
+	<li>Added handling of HTML links in preview panel.</li>
+
+	<li>Added confirmation dialog when database is saved
+	and the chosen encoding doesn't support all characters.
+	Gives options to save, cancel or try a different
+	encoding.</li>
+
+	<li>The encoding used when opening a database is now
+	remembered, and used when database is stored.</li>
+
+	<li>Added review field for research comments, paper
+	reviews, etc.</li>
+
+	<li>Added option to disable wrapping for certain
+	fields. Wrapping of pdf, ps, doi and url is disabled by
+	default.</li>
+
+	<li>Antialiasing option now affects entry editor text
+	fields as well as table text.</li>
+
+	<li>Changed to monospaced font in source editor
+	field.</li>
+
+	<li>Removed option to put double braces around BibTeX
+	fields, but retained option to remove double braces
+	when loading. Added option to put braces around capital
+	letters of a chosen set of fields.</li>
+
+	<li>Improved Ovid import.</li>
+
+	<li>Fixed problem with ordering of BibTeX strings that
+	are referred to by other strings.</li>
+
+	<li>Fixed problem with loading 16-bit encoded bib files
+	with 8-bit encoding as default, and vice versa.</li>
+
+	<li>Fixed multiplying authors bug when author/editor
+	field appears both in Required and Optional tabs.</li>
+
+	<li>Fixed startup freeze when trying to load certain
+	malformed bib files.</li>
+
+	<li>Fixed bug related to multi-line fields in RIS
+	import.</li>
+
+	<li>Fixed bug related to looking up a fully qualified
+	DOI</li>
+
+	<li>Included review field to preview panel 1, which
+	shows the abstract</li>
+
+	<li>Fixed bug where booktitle field was not displayed
+	in preview for conference proceedings, similar to
+	journal field</li>
+      </ul>
+
+    <h3>Version 1.8.1 (September 15th, 2005)</h3>
+
+      <ul>
+	<li>Added automatic timestamp with configurable format
+	for entries.</li>
+
+	<li>Added new key generator modifier ":abbr" to
+	abbreviate field contents.</li>
+
+	<li>Added Help button in Preferences -> Entry
+	preview</li>
+
+	<li>Added Big5, Big5_HKSCS and GBK encodings for
+	Chinese.</li>
+
+	<li>Improved marking feature. Username is now used for
+	marking, so different users can mark entries separately
+	without interference.</li>
+
+	<li>Improved handling of names such as "Firstname de la
+	Lastname jr.", with different handling for presentation
+	and sorting purposes. Key generation now should always
+	use the genuine last name, and not produce keys like
+	"de2001".</li>
+
+	<li>Removed duplicate warning from inspection dialog
+	for non-selected entries.</li>
+
+	<li>Fixed setting of sheet name in OpenOffice.org Calc
+	export.</li>
+
+	<li>Fixed bug that prevented PDF/PS opening by F4 from
+	automatically finding files in subdirectories below the
+	main PDF/PS dir.</li>
+
+	<li>Fixed BibTeX parser bug that made it choke on short
+	comment strings.</li>
+
+	<li>Fixed bug that made regexp search fail for fields
+	containing newline characters.</li>
+
+	<li>Fixed platform-dependent handling of newline
+	characters.</li>
+
+	<li>Fixed bug that prevented command line import with
+	explicit format.</li>
+
+	<li>Fixed bug that made it impossible to disable table
+	antialiasing.</li>
+
+	<li>Fixed AuthorAndsCommaReplacer.</li>
+      </ul>
+
+    <h3>Version 1.8 (July 30th, 2005)</h3>
+
+      <ul>
+	<li>Search panel now starts visible if it was visible
+	at last shutdown.</li>
+
+	<li>Added option to disable import inspection window
+	when only one entry is being imported.</li>
+
+	<li>Fixed parser bug that caused problems for bib files
+	containing extra characters after the last entry.</li>
+
+	<li>Fixed missing month in JStor import.</li>
+
+	<li>Fixed some bugs in "new from plain-text"
+	wizard</li>
+      </ul>
+
+    <h3>Version 1.8b2 (July 13th, 2005)</h3>
+
+      <ul>
+	<li>Changed handling of external updates so the
+	notification is suppressed when there are no actual
+	changes.</li>
+
+	<li>Changed autodetecting import so BibTeX files are
+	handled more similarly to other formats.</li>
+
+	<li>Enabled sorting by icon columns.</li>
+
+	<li>Added option to remove BibTeX source panel from
+	entry editor.</li>
+
+	<li>Added command line option to not load any files at
+	startup. Will override any autoloading or other command
+	line options that normally load or import files.</li>
+
+	<li>Added handling of duplicates to import inspection
+	window.</li>
+
+	<li>Made entry preview be updated whenever the
+	selection is expanded by one row, to make it more
+	useful while selecting a set of entries.</li>
+
+	<li>Changed BibTeX field parsing to avoid inserting
+	line breaks at wrong places.</li>
+
+	<li>Improved handling of page numbers in Medline
+	import.</li>
+
+	<li>Fixed import of file links when importing SixPack
+	files.</li>
+
+	<li>Fixed bug that prevented closing of search
+	interface when no databases are open.</li>
+
+	<li>Fixed OpenOffice Calc export to be compatible with
+	OpenOffice.org 2.0 beta.</li>
+
+	<li>Fixed bugs in Refer/Endnote import filter.</li>
+
+	<li>Fixed bug that caused changes to be lost in some
+	cases when the same field is present in multiple entry
+	editor tabs.</li>
+
+	<li>Fixed bug that prevented command line autodetecting
+	import from working with BibTeX files.</li>
+
+	<li>Fixed minor bug in routine for removing double
+	braces.</li>
+      </ul>
+
+    <h3>Version 1.8b (June 6th, 2005)</h3>
+
+      <ul>
+	<li>Added option to store bib file with double
+	braces.</li>
+
+	<li>Follow @input tags in aux files to indicate nested
+	aux files for generating subdatabases.</li>
+
+	<li>Improved wrapping and formatting of bib files, to
+	preserve paragraph separator (empty line).</li>
+
+	<li>Added test buttons for customization of preview
+	layouts.</li>
+
+	<li>Added inspection dialog for previewing and
+	generating keys for imported entries, and deciding
+	which ones to keep and discard. The dialog allows
+	inspection during long import processes such as Medline
+	search.</li>
+
+	<li>Restructured layout to use a common side pane with
+	all tabs.</li>
+
+	<li>Added import filter for Cambridge Scientific
+	Abstracts (CSA) format.</li>
+
+	<li>Added PS directory with similar options as
+	PDF.</li>
+
+	<li>Added [authshort] and [edtrshort] key field
+	markers. Patch submitted by Kolja Brix.</li>
+
+	<li>Made the program remember preview enable
+	setting.</li>
+
+	<li>Improved handling of illegal regular expressions in
+	search.</li>
+
+	<li>Removed options to search only Required, Optional
+	and/or General fields, in order to simplify search
+	interface.</li>
+
+	<li>Changed keys for Next and Previous tab to CTRL-PGDN
+	and CTRL-PGUP to match shortcuts in a certain popular
+	web browser.</li>
+
+	<li>Minor change to Preferences -> Table columns to
+	enable insertion of column in position 2.</li>
+
+	<li>Fixed parser bug that caused problems for files
+	with >10000 entries.</li>
+
+	<li>Fixed bug in entry editor that caused the source
+	edit panel to remove marking from entries.</li>
+
+	<li>Fixed export bug that made "\begin" tags fail if
+	encountered immediately after an "\end" tag.</li>
+
+	<li>Fixed export bug that made whitespace disappear
+	after empty field values.</li>
+
+	<li>Fixed ISI import bug that handled SO fields with
+	line breaks wrong.</li>
+
+	<li>Fixed bug occuring when choosing not to import
+	duplicate imported entry.</li>
+
+	<li>Fixed problem with detecting popup trigger on Mac
+	OSX with one button mouse.</li>
+
+	<li>Fixed erroneous relative paths for PDF files when
+	PDF directory is not set.</li>
+
+	<li>Fixed entry preview to resolve string
+	references.</li>
+      </ul>
+
+    <h3>Version 1.7.1 (April 11th, 2005)</h3>
+
+      <ul>
+	<li>Removed unnecessary stack traces when opening
+	external viewer.</li>
+
+	<li>Fixed bug that made Ctrl-E destroy current edit in
+	entry editor.</li>
+
+	<li>Fixed problem when copying modified BibTeX key gave
+	old value.</li>
+
+	<li>Fixed missing 'booktitle' import in CONF entries in
+	RIS import.</li>
+
+	<li>Fixed bug that made group tree disappear for
+	certain keyword expressions.</li>
+
+	<li>Fixed bug that made standard BibTeX fields be saved
+	without line wrapping.</li>
+      </ul>
+
+    <h3>Version 1.7 (March 20th, 2005)</h3>
+
+      <ul>
+	<li>When fetching from Medline or CiteSeer, fetched
+	entry is now opened in editor.</li>
+
+	<li>Added French translations of help files.</li>
+
+	<li>Added color highlighting of focused text field in
+	entry editor.</li>
+
+	<li>Added option in context menu of entry editor for
+	changing capitalization of field contents.</li>
+
+	<li>Added name conversion "Smith, RA" -> "Smith, R.
+	A." to Medline import.</li>
+
+	<li>Updated task bar icon.</li>
+
+	<li>Fixed bug that left some search settings items
+	inappropriately disabled.</li>
+
+	<li>Fixed bug that caused requirement for restart to
+	register change in default key pattern.</li>
+
+	<li>Fixed bug that caused crash some times after
+	adding/removing field content selectors.</li>
+
+	<li>Fixed bug in recognizing custom entry types when
+	reading bib files.</li>
+
+	<li>Fixed bug that allowed a deleted entry to stay
+	visible in the entry editor.</li>
+      </ul>
+
+    <h3>Version 1.7b2 (March 7th, 2005)</h3>
+
+      <ul>
+	<li>Made side pane resizable.</li>
+
+	<li>Replaced entry customization dialog with improved
+	interface.</li>
+
+	<li>Added standard entry type "conference", similar to
+	"inproceedings".</li>
+
+	<li>Added "default" label pattern to avoid the need to
+	set similar patterns manually.</li>
+
+	<li>Added line wrapping to metadata in saved .bib file
+	to avoid long lines.</li>
+
+	<li>Added "bibtexkey" as implicit fourth sort
+	criterion, to minimize problem with almost similar
+	entries swapping places.</li>
+
+	<li>Added OpenOffice.org Calc export filter that
+	exports spreadsheet compatible with the OpenOffice.org
+	bibliography feature.</li>
+
+	<li>Added a couple of previously unsupported
+	publication types in SciFinder.</li>
+
+	<li>Added extra shortcuts CTRL-+ and CTRL-- for
+	switching tabs in entry editor, since original
+	shortcuts CTRL[-SHIFT]-TAB is used by some window
+	managers.</li>
+
+	<li>Updated Endnote export filter.</li>
+
+	<li>Fixed focus and key binding problems for switching
+	tabs/entries in entry editor</li>
+
+	<li>Fixed bug that prevented required fields tab from
+	appearing for entries with only bibtex key as required
+	field.</li>
+
+	<li>Fixed bug that prevented the user from changing the
+	default encoding.</li>
+
+	<li>Fixed bugs in RIS import.</li>
+
+	<li>Fixed bug 1112050; freeze when reading certain
+	author fields with mismatched braces.</li>
+      </ul>
+
+    <h3>Version 1.7 beta (January, 27th, 2005)</h3>
+
+      <ul>
+	<li>Changed routine for rearranging author names
+	(Lastname, Firstname) so bracketed expressions are
+	treated as units.</li>
+
+	<li>Grouping controls now allow group hierarchies, and
+	now allow explicit and search expression groups as well
+	as keyword groups.</li>
+
+	<li>Added full customization of general fields
+	tabs</li>
+
+	<li>Added option to preserve formatting for non-BibTeX
+	fields.</li>
+
+	<li>Added integrity check for database.</li>
+
+	<li>Added export filters EndNote and Harvard RTF.</li>
+
+	<li>Added automatic import format chooser for import
+	(same as wildcard import below).</li>
+
+	<li>Added wildcard (*) option for command-line import,
+	to try to automatically determine the correct
+	format.</li>
+
+	<li>Improved layout of Preferences dialog.</li>
+
+	<li>Improved several import filters.</li>
+
+	<li>Added authIniN/edtrIniN key formatters.</li>
+
+	<li>Marked entries now float to the top when no
+	searching or grouping reordering is active.</li>
+
+	<li>Fixed problem with opening file dialog on Win NT -
+	AWT dialog is now opened if Swing dialog fails.</li>
+      </ul>
+
+    <h3>Version 1.6 (November 27th, 2004)</h3>
+
+      <ul>
+	<li>Improved handling of entry selection in various
+	ways. E.g. selected entry is now scrolled into view
+	when opening entry editor and entry is kept selected
+	when importing CiteSeer fields.</li>
+
+	<li>Fixed update bug between autogenerated bibtex key
+	and source panel.</li>
+
+	<li>Fixed missing . at the end of last author name in
+	RIS import.</li>
+
+	<li>Fixed NullPointerException on certain special
+	characters when exporting to BibTeXML.</li>
+
+	<li>Fixed bug that sometimes prevented the unmarking of
+	entries.</li>
+
+	<li>Fixed problem with formatting one-name
+	authors.</li>
+
+	<li>Various other bugfixes.</li>
+      </ul>
+
+    <h3>Version 1.6 beta (November 8th, 2004)</h3>
+
+      In an effort to produce better and more stable releases,
+      we have decided to release a beta versions prior to
+      future versions. We start out with today's beta release
+      of version 1.6. Users can now choose whether to download
+      and use the beta version for earlier access to new
+      features, or whether to wait for the final, better-tested
+      version. The final 1.6 version is expected to be released
+      in a few weeks from today.
+
+      <ul>
+	<li>Added mnemonic keys to menus and menu items.</li>
+
+	<li>Added MODS and tab-separated file export</li>
+
+	<li>Added facility for detecting and handling external
+	changes to open bib files.</li>
+
+	<li>Added scan option for exact duplicates with
+	automatic removal.</li>
+
+	<li>Bibtex strings are now sorted automatically.</li>
+
+	<li>Bibtex strings are now resolved when exporting
+	database.</li>
+
+	<li>Fixed problem with field content selector getting
+	too wide. Limited width.</li>
+
+	<li>Fixed PDF/PS view routine to remove problems with
+	filenames containing spaces.</li>
+
+	<li>Fixed bug that interfered with Fetch Medline by ID,
+	and fixed parsing problem with certain Medline
+	entries.</li>
+
+	<li>Fixed bug that interfered with Push to WinEdt.</li>
+
+	<li>Fixed HTML output so \c{c} is handled
+	correctly.</li>
+
+	<li>command line option for generating a sub-database
+	from LaTex aux file entries</li>
+
+	<li>simple copy/paste menu in entry editor</li>
+
+	<li>experimental: text-input-area with underlying
+	infotext in plaintext import dialog</li>
+      </ul>
+
+    <h3>Version 1.55 (October 12th, 2004)</h3>
+
+      <ul>
+	<li>Made method for opening PDF files robust with
+	regard to file separators (/ and \), so bib files can
+	easier be used across platforms.</li>
+
+	<li>Improved Medline fetcher. Can now fetch entries
+	based on a search expression.</li>
+
+	<li>Added features for fetching fields and referring
+	publications from the CiteSeer database.</li>
+
+	<li>Added option to always save database ordered by
+	author/editor/year, and made this the default
+	setting.</li>
+
+	<li>When a single entry is selected, right-click menu
+	now shows a checkbox menu for group memberships instead
+	of the regular "Add to" and "Remove from" menus.</li>
+
+	<li>Improved [shorttitle] and [veryshorttitle] special
+	key pattern fields.</li>
+
+	<li>Added dialog box for conveniently setting the
+	fields of an entry from a plain text description.</li>
+
+	<li>Added formatter "ResolvePDF" to create correct
+	PDF/PS links in HTML export when relative file names
+	are used.</li>
+
+	<li>Added Abstract panel in entry editor.</li>
+
+	<li>Added alternate preview with abstract, and made
+	both previews configurable.</li>
+
+	<li>Added the option to create a subset of a database
+	based on an .aux file.</li>
+
+	<li>Added 'Cancel' button to duplicate resolver dialog,
+	so the process can be stopped.</li>
+
+	<li>Added check for spaces in custom entry type
+	names.</li>
+
+	<li>Added several new key pattern markers.</li>
+
+	<li>Added toolbar buttons for Mark/Unmark to improve
+	discoverability.</li>
+
+	<li>Fixed bug that made export filters ignore the
+	chosen character encoding.</li>
+
+	<li>Fixed bug that interfered with author name
+	formatting.</li>
+
+	<li>Fixed various bugs in import filters.</li>
+
+	<li>Fixed bug that prevented confirmation dialog when
+	deleting entry from the entry editor.</li>
+
+	<li>Fixed bug that made the next entry be opened
+	instead of the current, when pressing Enter in
+	table.</li>
+
+	<li>Fixed bug that made it possible to leave a source
+	edit when the source didn't validate properly. Also
+	made it impossible to change table selection until
+	source validates.</li>
+      </ul>
+
+    <h3>Version 1.5 (August 3rd, 2004)</h3>
+
+      <ul>
+	<li>Added Highlight and select options to the group
+	interface, and made it possible to change the number of
+	visible lines in the list.</li>
+
+	<li>Added option to allow or disallow direct table
+	editing.</li>
+
+	<li>Added optional confirmation dialog for deleting
+	entries.</li>
+
+	<li>Added optional warning dialog for duplicate BibTeX
+	keys.</li>
+
+	<li>Added warnings to bibtex parser, and prevented
+	failure to load files with duplicate string
+	definitions.</li>
+
+	<li>Added JStor import filter.</li>
+
+	<li>Changed the look and feel to JGoodies Forms on
+	non-Macintosh platforms.</li>
+
+	<li>Optimized performance in several areas.</li>
+
+	<li>Numerous usability improvements.</li>
+
+	<li>Fixed RIS import bug caused by short lines.</li>
+
+	<li>Fixed bug in SciFinder import.</li>
+
+	<li>Fixed bug that made entire field get cleared when
+	removing from group.</li>
+      </ul>
+
+    <h3>Version 1.4 (June 6th, 2004)</h3>
+
+      Version 1.4 provides command line options for importing
+      and exporting files, advanced search, custom export
+      filters, and several bug fixes and minor changes.
+
+      <ul>
+	<li>Added advanced search feature.</li>
+
+	<li>Added facility for using custom export
+	formats.</li>
+
+	<li>Added command line options for importing/exporting
+	files, importing/exporting, user preferences, loading
+	session and for suppressing the GUI (using RitOpt for
+	parsing options).</li>
+
+	<li>Added automatic stripping of \url{} when opening
+	url.</li>
+
+	<li>Improved export filters.</li>
+
+	<li>Fixed focus bug which sometimes interfered with
+	cut/copy/paste.</li>
+      </ul>
+
+    <h3>Version 1.3.1 (May 9, 2004)</h3>
+
+      Release 1.3.1 resolves a couple of severe bugs in 1.3.
+      All users who have downloaded 1.3 should upgrade (the
+      bugs in 1.3 impaired functionality but did not pose a
+      security risk).
+
+    <h3>Version 1.3.* (May 9, 2004)</h3>
+
+      This release adds entry preview, detection of duplicate
+      entries, persistent entry marking, new import and export
+      filters, better linking to PDF/PS/URL/DOI, and better Mac
+      OS X compatibility. There are several other changes and
+      improvements, and many bugfixes.
+
+    <h3>Version 1.2 (March 21, 2004)</h3>
+
+      The icon set has been replaced. Notable new features are
+      French language support, key generator customization,
+      string replace, and BibTeXML import. Several bugs have
+      been fixed.
+
+    <h3>Version 1.19 (Feb 19,2004)</h3>
+
+      <ul>
+	<li>Entry editor is now opened for an entry that causes
+	an error when saving.</li>
+
+	<li>Added options to display names in harmonised format
+	in the main table.</li>
+
+	<li>Added Docbook and (experimental) HTML export.</li>
+
+	<li>Enabled 'doi' and 'pii' fields for Medline
+	import.</li>
+
+	<li>Enabled antialiasing fonts.</li>
+
+	<li>Added the Kunststoff look&feel to give a more
+	pleasant user interface.</li>
+
+	<li>Added font selector for the main table.</li>
+
+	<li>Improved table column customization.</li>
+
+	<li>Added word selector feature for selected fields
+	(keywords, journal).</li>
+
+	<li>Added support for German and Norwegian
+	language.</li>
+
+	<li>Generalized copy cite key features for multiple
+	entries.</li>
+
+	<li>Added quick load/save session feature.</li>
+
+	<li>Fixed issue/number bug in ISI import.</li>
+
+	<li>Added "Open pdf/ps" item in right-click menu.</li>
+
+	<li>Fixed bug causing external viewer to only work in
+	General fields.</li>
+
+	<li>Added functionality for using Browse buttons for
+	file-related fields (ps, pdf, etc.).</li>
+
+	<li>Added Browse buttons to External programs tab in
+	Preferences.</li>
+
+	<li>Fixed bug related to Save database and Source field
+	which caused changes to disappear.</li>
+      </ul>
+
+    <h3>Version 1.1 (Jan 02, 2004)</h3>
+
+      <ul>
+	<li>Added bibtex key uniqueness checking, and prevented
+	autogeneration from generating non-unique keys.</li>
+
+	<li>Added command line option to load file on
+	startup.</li>
+
+	<li>Fixed problem with autogeneration creating invalid
+	keys.</li>
+
+	<li>Improved Refer/Endnote import.</li>
+
+	<li>Added feature for importing entries and/or strings
+	and/or group definitions from another BibTeX
+	database.</li>
+
+	<li>Added menu choices to import into open
+	database.</li>
+
+	<li>Added toolbar button for closing current
+	database.</li>
+
+	<li>Fixed shortcut key for "Store field" in entry
+	editor, and fixed problem that made shortcut for "Save
+	database" unavailable from entry editor.</li>
+
+	<li>Added option to fetch Medline entries automatically
+	by ID, based on a patch submitted by Mike Smoot.</li>
+
+	<li>Fixed bug in RIS import.</li>
+
+	<li>Added options to copy key and copy "\cite{key}" to
+	right-click menu.</li>
+
+	<li>Fixed bug that caused some General fields not to
+	get displayed.</li>
+
+	<li>Enabled customization of General fields.</li>
+
+	<li>Enabled customization of existing entry types, and
+	definition of new types.</li>
+      </ul>
+
+    <h3>Version 1.0 (Nov 29, 2003)</h3>
+
+      First release of JabRef
+
+  </body>
+
+</html>
diff --git a/src/help/SearchHelp.html b/src/help/SearchHelp.html
index aefb38d..4219298 100644
--- a/src/help/SearchHelp.html
+++ b/src/help/SearchHelp.html
@@ -1,105 +1,105 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Searching</h1>
-
-    <h2>Keyboard shortcuts</h2>
-
-    <p><em>CTRL-F</em> opens or focuses the search interface.
-    Pressing <em>CTRL-F</em> several times toggles search mode.
-    When searching incrementally, pressing <em>CTRL-F</em> makes
-    the program search for the next occurence of the search
-    string.</p>
-
-    <p><em>CTRL-SHIFT-F</em> opens or focuses the search interface,
-    and selects incremental search. When searching incrementally,
-    <em>CTRL-SHIFT-F</em> also finds the next occurence of the
-    search string.</p>
-
-    <h2>Search modes</h2>
-   
-    <p>There are three search modes in JabRef.</p>
-    
-    <h3>Incremental search</h3>
-
-    <p>When searching incrementally, the
-    program searches immediately each time you press a letter. The
-    status line informs you about the success of the search.
-    Pressing the search shortcut keys causes the program to find
-    the next occurrence of the current search string. If no further
-    occurrences can be found, the status line will notify you about
-    this. Repeating the search again causes the search to restart
-    at the top. The search order always follows the current sorting
-    of your database. To escape an incremental search, press ESC or
-    click "Clear search".</p>
-
-    <h3>Normal search</h3>
-
-    <p>In a normal search, the program searches your
-    database for all occurences of the words in your search string,
-    once you press ENTER. Only entries containing all words will be
-    considered matches. To search for sequences of words, enclose
-    the sequences in double quotes. For instance, the query
-    <b>progress "marine aquaculture"</b> will match entries
-    containing both the word "progress" and the phrase "marine
-    aquaculture". All entries that don't match are hidden, leaving
-    for display the matching entries only (filter mode), or are
-    grayed-out (float mode). To stop displaying the search results,
-    press ESC or click "Clear search".</p>
-
-    <h3><a name="advanced" id="advanced"></a>
-        Advanced search</h3>
-
-    <p>In order to search specific fields only
-    and/or include logical operators in the search expression, a
-    special syntax is available in which these can be specified.
-    E.g. to search for entries whose author is "Miller", enter
-    (in any but incremental search mode):</p>
-
-    <p>author = miller</p>
-
-    <p>Both the field specification and the search term support
-    regular expressions. If the search term contains spaces,
-    enclose it in quotes. Do <i>not</i> use spaces in the field
-    specification! E.g. to search for entries about image
-    processing, type:</p>
-
-    <p>title|keywords = "image processing"</p>
-
-    <p>You can use "and", "or", "not", and braces as intuitively
-    expected:</p>
-
-    <p>(author = miller or title|keywords = "image processing") and
-    not author = brown</p>
-
-    <p>The "=" sign is actually a shorthand for "contains".
-    Searching for an exact match is possible using "matches" or
-    "==". Using "!=" tests if the search term is <i>not</i>
-    contained in the field (equivalent to "not ... contains ...").
-    The selection of field types to search (required, optional,
-    all) is always overruled by the field specification in the
-    search expression. To search for entries of a certain type, a
-    pseudo field called "entrytype" is available:</p>
-
-    <p>entrytype = thesis</p>
-
-    <p>This finds entries whose type (as displayed in the
-    "Entrytype" column) contains the word "thesis" (which would be
-    "phdthesis" and "mastersthesis"). Another pseudo field
-    "bibtexkey" allows to search for citation keys, e.g.</p>
-
-    <p>bibtexkey = miller2005</p>
-
-    <h2>Search settings</h2>
-
-    <p>The <em>Settings</em> button opens a
-    menu that allows to toggle case sensitivity and use of regular
-    expressions in the search, and whether search results should be
-    selected in the table and whether the search words should be
-    highlighted in the editor and the preview.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Searching</h1>
+
+    <h2>Keyboard shortcuts</h2>
+
+    <p><em>CTRL-F</em> opens or focuses the search interface.
+    Pressing <em>CTRL-F</em> several times toggles search mode.
+    When searching incrementally, pressing <em>CTRL-F</em> makes
+    the program search for the next occurence of the search
+    string.</p>
+
+    <p><em>CTRL-SHIFT-F</em> opens or focuses the search interface,
+    and selects incremental search. When searching incrementally,
+    <em>CTRL-SHIFT-F</em> also finds the next occurence of the
+    search string.</p>
+
+    <h2>Search modes</h2>
+   
+    <p>There are three search modes in JabRef.</p>
+    
+    <h3>Incremental search</h3>
+
+    <p>When searching incrementally, the
+    program searches immediately each time you press a letter. The
+    status line informs you about the success of the search.
+    Pressing the search shortcut keys causes the program to find
+    the next occurrence of the current search string. If no further
+    occurrences can be found, the status line will notify you about
+    this. Repeating the search again causes the search to restart
+    at the top. The search order always follows the current sorting
+    of your database. To escape an incremental search, press ESC or
+    click "Clear search".</p>
+
+    <h3>Normal search</h3>
+
+    <p>In a normal search, the program searches your
+    database for all occurences of the words in your search string,
+    once you press ENTER. Only entries containing all words will be
+    considered matches. To search for sequences of words, enclose
+    the sequences in double quotes. For instance, the query
+    <b>progress "marine aquaculture"</b> will match entries
+    containing both the word "progress" and the phrase "marine
+    aquaculture". All entries that don't match are hidden, leaving
+    for display the matching entries only (filter mode), or are
+    grayed-out (float mode). To stop displaying the search results,
+    press ESC or click "Clear search".</p>
+
+    <h3><a name="advanced" id="advanced"></a>
+        Advanced search</h3>
+
+    <p>In order to search specific fields only
+    and/or include logical operators in the search expression, a
+    special syntax is available in which these can be specified.
+    E.g. to search for entries whose author is "Miller", enter
+    (in any but incremental search mode):</p>
+
+    <p>author = miller</p>
+
+    <p>Both the field specification and the search term support
+    regular expressions. If the search term contains spaces,
+    enclose it in quotes. Do <i>not</i> use spaces in the field
+    specification! E.g. to search for entries about image
+    processing, type:</p>
+
+    <p>title|keywords = "image processing"</p>
+
+    <p>You can use "and", "or", "not", and braces as intuitively
+    expected:</p>
+
+    <p>(author = miller or title|keywords = "image processing") and
+    not author = brown</p>
+
+    <p>The "=" sign is actually a shorthand for "contains".
+    Searching for an exact match is possible using "matches" or
+    "==". Using "!=" tests if the search term is <i>not</i>
+    contained in the field (equivalent to "not ... contains ...").
+    The selection of field types to search (required, optional,
+    all) is always overruled by the field specification in the
+    search expression. To search for entries of a certain type, a
+    pseudo field called "entrytype" is available:</p>
+
+    <p>entrytype = thesis</p>
+
+    <p>This finds entries whose type (as displayed in the
+    "Entrytype" column) contains the word "thesis" (which would be
+    "phdthesis" and "mastersthesis"). Another pseudo field
+    "bibtexkey" allows to search for citation keys, e.g.</p>
+
+    <p>bibtexkey = miller2005</p>
+
+    <h2>Search settings</h2>
+
+    <p>The <em>Settings</em> button opens a
+    menu that allows to toggle case sensitivity and use of regular
+    expressions in the search, and whether search results should be
+    selected in the table and whether the search words should be
+    highlighted in the editor and the preview.</p>
+</body>
+</html>
diff --git a/src/help/ShortIntegrityCheck.html b/src/help/ShortIntegrityCheck.html
index d6c32b7..0f04341 100644
--- a/src/help/ShortIntegrityCheck.html
+++ b/src/help/ShortIntegrityCheck.html
@@ -1,13 +1,13 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Integrity check</h1>
-
-    <p>Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check. </p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Integrity check</h1>
+
+    <p>Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check. </p>
+
+</body>
+</html>
diff --git a/src/help/SpecialFieldsHelp.html b/src/help/SpecialFieldsHelp.html
index cdd77dd..38d5e47 100644
--- a/src/help/SpecialFieldsHelp.html
+++ b/src/help/SpecialFieldsHelp.html
@@ -1,50 +1,50 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-<h1>Special Fields</h1>
-
-<p>Special fields offer the functionality </p>
-<ul>
-<li>rate read papers</li>
-<li>mark papers as relevant for the work</li>
-<li>mark Bibtex entries as quality assured, and </li>
-<li>prioritize unread papers.</li>
-</ul>
-<p>
-The main difference from the marked entry is that the rated entry is not floating by default and only highlight the number column. Thus, an entry may be both marked and rated.
-</p>
-<p>
-Each special field may be turned on and off in the settings.
-</p>
-
-<h2>Types of Fields</h2>
-
-<h3>Ranking</h3>
-<p>The aim is to add a functionality to set a range of “positive” ratings. JabRef offers a rank from one to five stars to rate papers.</p>
-
-<h3>Relevance</h3>
-<p>An entry may be marked as relevant.</p>
-
-<h3>Quality Assured</h3>
-<p>An entry may be marked as quality assured. The intention is to mark Bibtex entries, where a thorough checking of the field contents has been done.</p>
-
-<h3>Priority</h3>
-<p>One may prioritize entries from prio3 (low) to prio1 (high). The main intention is to prioritize unread papers.</p>
-
-<h2>Storage in the Bibtex Entry</h2>
-<p>Internally, each special field is stored in a separate Bibtex field. If “Write values of
-special fields as separate fields to BibTeX” is active, these fields are also written when the
-database is saved. JabRef also offers synchronizing the fields with keywords. This is enabled by the
-setting “Synchronize with keywords”. If this setting is active, then each change in a
-special field is reflected in the keyword field. Vice versa, each change in a keyword also leads to
-a change in the special field. Additionally, when loading a the database or pasting a new entry, the
-keywords are used to set the special field values.
-</p>
-
-</body>
-</html>
-
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+<h1>Special Fields</h1>
+
+<p>Special fields offer the functionality </p>
+<ul>
+<li>rate read papers</li>
+<li>mark papers as relevant for the work</li>
+<li>mark Bibtex entries as quality assured, and </li>
+<li>prioritize unread papers.</li>
+</ul>
+<p>
+The main difference from the marked entry is that the rated entry is not floating by default and only highlight the number column. Thus, an entry may be both marked and rated.
+</p>
+<p>
+Each special field may be turned on and off in the settings.
+</p>
+
+<h2>Types of Fields</h2>
+
+<h3>Ranking</h3>
+<p>The aim is to add a functionality to set a range of “positive” ratings. JabRef offers a rank from one to five stars to rate papers.</p>
+
+<h3>Relevance</h3>
+<p>An entry may be marked as relevant.</p>
+
+<h3>Quality Assured</h3>
+<p>An entry may be marked as quality assured. The intention is to mark Bibtex entries, where a thorough checking of the field contents has been done.</p>
+
+<h3>Priority</h3>
+<p>One may prioritize entries from prio3 (low) to prio1 (high). The main intention is to prioritize unread papers.</p>
+
+<h2>Storage in the Bibtex Entry</h2>
+<p>Internally, each special field is stored in a separate Bibtex field. If “Write values of
+special fields as separate fields to BibTeX” is active, these fields are also written when the
+database is saved. JabRef also offers synchronizing the fields with keywords. This is enabled by the
+setting “Synchronize with keywords”. If this setting is active, then each change in a
+special field is reflected in the keyword field. Vice versa, each change in a keyword also leads to
+a change in the special field. Additionally, when loading a the database or pasting a new entry, the
+keywords are used to set the special field values.
+</p>
+
+</body>
+</html>
+
diff --git a/src/help/StringEditorHelp.html b/src/help/StringEditorHelp.html
old mode 100755
new mode 100644
index c313623..77beb65
--- a/src/help/StringEditorHelp.html
+++ b/src/help/StringEditorHelp.html
@@ -1,51 +1,51 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>The string editor</h1>
-
-    <p><em>Opened from the main window
-    by <b>BibTeX -> Edit strings</b> or pressing a button in the toolbar.</em></p>
-
-    <p><em>Strings</em> are the <em>bibtex</em> equivalent to
-    constants in a programming language. Each string is defined
-    with a unique <em>name</em> and a <em>content</em>. Elsewhere
-    in the database, the name can be used to represent the
-    content.</p>
-
-    <p>For instance, if many entries are from a journal with an
-    abbreviation that may be hard to remember, such as 'J. Theor.
-    Biol.' (Journal of Theroretical Biology), a string named JTB
-    could be defined to represent the journal's name. Instead of
-    repeating the exact journal name in each entry, the characters
-    '#JTB#' (without quotes) are put into the <em>journal</em>
-    field of each, ensuring the journal name is written identically
-    each time.</p>
-
-    <p>A string reference can appear anywhere in a field, always by
-    enclosing the string's name in a pair of '#' characters. This
-    syntax is specific for JabRef, and differs slightly from the
-    <em>bibtex</em> notation that is produced when you save your
-    database. Strings can by default be used for all standard
-    BibTeX fields, and in <b>Preferences -> General ->
-    File</b> you can opt to enable strings for non-standard fields
-    as well. In the latter case you can specify a set of fields
-    that are excepted from string resolving, and here it is
-    recommended to include the 'url' field and other fields that
-    may need to contain the '#' character and that may be processed
-    by BibTeX/LaTeX.</p>
-
-    <p>A string may in the same way be referred in the content of
-    another string, provided the referred string is defined
-    <em>before</em> the referring one.</p>
-
-    <p>While the order of strings in your BibTeX file is important
-    in some cases, you don't have to worry about this when using
-    JabRef. The strings will be displayed in alphabetical order in
-    the string editor, and stored in the same order, except when a
-    different ordering is required by BibTeX.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>The string editor</h1>
+
+    <p><em>Opened from the main window
+    by <b>BibTeX -> Edit strings</b> or pressing a button in the toolbar.</em></p>
+
+    <p><em>Strings</em> are the <em>bibtex</em> equivalent to
+    constants in a programming language. Each string is defined
+    with a unique <em>name</em> and a <em>content</em>. Elsewhere
+    in the database, the name can be used to represent the
+    content.</p>
+
+    <p>For instance, if many entries are from a journal with an
+    abbreviation that may be hard to remember, such as 'J. Theor.
+    Biol.' (Journal of Theroretical Biology), a string named JTB
+    could be defined to represent the journal's name. Instead of
+    repeating the exact journal name in each entry, the characters
+    '#JTB#' (without quotes) are put into the <em>journal</em>
+    field of each, ensuring the journal name is written identically
+    each time.</p>
+
+    <p>A string reference can appear anywhere in a field, always by
+    enclosing the string's name in a pair of '#' characters. This
+    syntax is specific for JabRef, and differs slightly from the
+    <em>bibtex</em> notation that is produced when you save your
+    database. Strings can by default be used for all standard
+    BibTeX fields, and in <b>Preferences -> General ->
+    File</b> you can opt to enable strings for non-standard fields
+    as well. In the latter case you can specify a set of fields
+    that are excepted from string resolving, and here it is
+    recommended to include the 'url' field and other fields that
+    may need to contain the '#' character and that may be processed
+    by BibTeX/LaTeX.</p>
+
+    <p>A string may in the same way be referred in the content of
+    another string, provided the referred string is defined
+    <em>before</em> the referring one.</p>
+
+    <p>While the order of strings in your BibTeX file is important
+    in some cases, you don't have to worry about this when using
+    JabRef. The strings will be displayed in alphabetical order in
+    the string editor, and stored in the same order, except when a
+    different ordering is required by BibTeX.</p>
+</body>
+</html>
diff --git a/src/help/TimeStampHelp.html b/src/help/TimeStampHelp.html
index 62a461e..794b83e 100644
--- a/src/help/TimeStampHelp.html
+++ b/src/help/TimeStampHelp.html
@@ -1,50 +1,50 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Entry time stamps</h1>
-
-    <p>This feature can be toggled and configured under <b>Options ->
-    Preferences -> General</b>.</p>
-
-    <p>JabRef can automatically set a field to contain the date an
-    entry was added to the database.</p>
-
-    <h2>Formatting</h2>
-
-    <p>The formatting of the time stamp is
-    determined by a string containing designator words that
-    indicate the position of the various parts of the date.</p>
-
-    <p>These are some of the available designator letters (examples
-    are given in parentheses for Wednesday 14th of September 2005
-    at 5.45 PM):</p>
-
-    <ul>
-        <li><b>yy</b>: year (05)</li>
-
-        <li><b>yyyy</b>: year (2005)</li>
-
-        <li><b>MM</b>: month (09)</li>
-
-        <li><b>dd</b>: day in month (14)</li>
-
-        <li><b>HH</b>: hour in day (17)</li>
-
-        <li><b>mm</b>: minute in hour (45)</li>
-    </ul>These designators can be combined along with punctuation
-    and whitespace. A couple of examples:
-
-    <ul>
-        <li><b>yyyy.MM.dd</b> gives <b>2005.09.14</b></li>
-
-        <li><b>yy.MM.dd</b> gives <b>05.09.14</b></li>
-
-        <li><b>yyyy.MM.dd HH:mm</b> gives <b>2005.09.14
-        17:45</b></li>
-    </ul>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Entry time stamps</h1>
+
+    <p>This feature can be toggled and configured under <b>Options ->
+    Preferences -> General</b>.</p>
+
+    <p>JabRef can automatically set a field to contain the date an
+    entry was added to the database.</p>
+
+    <h2>Formatting</h2>
+
+    <p>The formatting of the time stamp is
+    determined by a string containing designator words that
+    indicate the position of the various parts of the date.</p>
+
+    <p>These are some of the available designator letters (examples
+    are given in parentheses for Wednesday 14th of September 2005
+    at 5.45 PM):</p>
+
+    <ul>
+        <li><b>yy</b>: year (05)</li>
+
+        <li><b>yyyy</b>: year (2005)</li>
+
+        <li><b>MM</b>: month (09)</li>
+
+        <li><b>dd</b>: day in month (14)</li>
+
+        <li><b>HH</b>: hour in day (17)</li>
+
+        <li><b>mm</b>: minute in hour (45)</li>
+    </ul>These designators can be combined along with punctuation
+    and whitespace. A couple of examples:
+
+    <ul>
+        <li><b>yyyy.MM.dd</b> gives <b>2005.09.14</b></li>
+
+        <li><b>yy.MM.dd</b> gives <b>05.09.14</b></li>
+
+        <li><b>yyyy.MM.dd HH:mm</b> gives <b>2005.09.14
+        17:45</b></li>
+    </ul>
+</body>
+</html>
diff --git a/src/help/XMPHelp.html b/src/help/XMPHelp.html
index 17e0d0b..4eff5a2 100644
--- a/src/help/XMPHelp.html
+++ b/src/help/XMPHelp.html
@@ -1,169 +1,169 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>XMP metadata support in JabRef</h1>
-
-    <p>XMP is a standard created by Adobe Systems for storing
-    metadata (data about data) in files. An well known example for
-    metadata are MP3 tags, which can be used to describe artist,
-    album and song name of a MP3 file. Adding metadata to MP3 helps
-    other people to identify the songs correctly independent of
-    file-name and can provide means for software (MP3 players for
-    instance) to sort and group songs.</p>
-
-    <p>With XMP-support the JabRef team tries to bring the
-    advantages of metadata to the world of reference managers. You
-    can now choose to "Write XMP" metadata in the General Tab of
-    JabRef, which will put all the Bibtex information into the PDF.
-    If you then email this PDF to a collegue she can just drag the
-    file into JabRef and all information that you entered will be
-    available to her.</p>
-
-    <h2>Usage</h2>
-
-    <p>To use the XMP-feature in JabRef you can do the
-    following:</p>
-
-    <ul>
-        <li>To <b>import a single annotated PDF-file</b> that
-        contains XMP you can select "File -> Import into...
-        -> XMP-annotated PDF" or drag the file into the main
-        view.</li>
-
-        <li>To <b>write the bibliographic information to the
-        associated PDF</b> do the following: Double click the entry
-        in the main view, go to the "General" tab and click on
-        "Write XMP".</li>
-
-        <li>If you want <b>to annotate all the PDFs in a given
-        database</b> you can select "Tools -> Write XMP for
-        database"</li>
-
-        <li>To verify if it worked you can open the PDF in Adobe
-        Acrobat and select "File -> Document Properties ->
-        Additional Metadata -> Advanced". In the tree to the
-        right you should see an entry called
-        "http://purl.org/net/bibteXMP". This works only with Adobe
-        Acrobat, not with Adobe Reader.</li>
-
-        <li>If you don't have Adobe Acrobat, you can use
-        <i>pdfinfo</i> instead in order to see the XMP metadata.
-        <i>pdfinfo</i> is part of Xpdf
-        (<code>www.foolabs.com/xpdf</code>) and Poppler
-        (<code>http://poppler.freedesktop.org</code>).</li>
-
-        <li style="list-style: none">
-            <div style="margin-left: 2em">
-                <h2>BibteXmp Fileformat</h2>
-
-                <p>XMP uses a subset of the Resource Description
-                Framework (RDF) to store data. For JabRef a new
-                metadata format is used which maps very closely to
-                BibTeX. Basically all fields and values are turned
-                into nodes of an XML document. Only authors and
-                editors are stored as rdf:Seq-structures, so users
-                of the data can skip the splitting on 'and's. All
-                strings and crossrefs will be resolved in the
-                data.</p>
-
-                <p>The following easy minimal schema is used:</p>
-
-                <ul>
-                    <li>The BibTeX-key is stored as
-                    <code>bibtexkey</code>.</li>
-
-                    <li>The type of the BibTeX-entry is stored as
-                    <code>entrytype</code>.</li>
-
-                    <li><code>author</code> and <code>editor</code>
-                    are encoding as <code>rdf:Seq</code>s where the
-                    individual authors are represented as
-                    <code>rdf:li</code>s.</li>
-
-                    <li>All other fields are saved using their
-                    field-name as is.</li>
-                </ul><br />
-                <br />
-
-
-                <p>The following is an example of the mapping</p>
-                <pre>
- at INPROCEEDINGS{CroAnnHow05,
-  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
-  title = {Effective work practices for floss development: A model and propositions},
-  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
-  year = {2005},
-  owner = {oezbek},
-  timestamp = {2006.05.29},
-  url = {http://james.howison.name/publications.html}
-}
-</pre>will be transformed into
-                <pre>
-<rdf:Description xmlns:bibtex="http://jabref.sourceforge.net/bibteXMP/"
-    bibtex:bibtexkey="CroAnnHow05"
-    bibtex:year="2005"
-    bibtex:title="Effective work practices for floss development: A model and propositions"
-    bibtex:owner="oezbek"
-    bibtex:url="http://james.howison.name/publications.html"
-    bibtex:booktitle="Hawaii International Conference On System Sciences (HICSS)"
-    bibtex:timestamp="2006.05.29">
-        <bibtex:author>
-            <rdf:Seq>
-                <rdf:li>K. Crowston</rdf:li>
-                <rdf:li>H. Annabi</rdf:li>
-                <rdf:li>J. Howison</rdf:li>
-                <rdf:li>C. Masango</rdf:li>
-            </rdf:Seq>
-        </bibtex:author>
-    <bibtex:entrytype>Inproceedings</bibtex:entrytype>
-</rdf:Description>
-</pre>
-
-                <p>Beware of the following caveats if you trying to
-                parse bibteXMP:</p>
-
-                <ul>
-                    <li>In RDF attribute-value pairs can also be
-                    expressed as nodes and vice versa.</li>
-                </ul><br />
-                <br />
-
-
-                <h2>Related Links:</h2>
-
-                <p>Some links about XMP and annotating PDFs:</p>
-
-                <ul>
-                    <li>
-                    <a href="http://freelancepropaganda.com/themp/">
-                    James Howison's blog "Themp---Managing Academic
-                    Papers like MP3s"</a></li>
-
-                    <li>
-                    <a href="http://www.xml.com/pub/a/2004/09/22/xmp.html">
-                    XML.com article about XMP</a></li>
-
-					<li><a href="http://pdfbox.apache.org/">PDFBox</a> by
-					the Apache Software Foundation is the Jaba library used to
-					access the PDFs and the metadata stream.</li>
-
-                    <li>
-                    <a href="http://arstechnica.com/civis/viewtopic.php?f=19&t=408429">
-                    Good thread on ArsTechnica discussing the
-                    management of PDFs.</a></li>
-
-                    <li>
-                    <a href="http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart1.pdf">
-                    Adobe XMP Specification</a></li>
-                </ul><br />
-                <br />
-
-            </div>
-        </li>
-    </ul>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>XMP metadata support in JabRef</h1>
+
+    <p>XMP is a standard created by Adobe Systems for storing
+    metadata (data about data) in files. An well known example for
+    metadata are MP3 tags, which can be used to describe artist,
+    album and song name of a MP3 file. Adding metadata to MP3 helps
+    other people to identify the songs correctly independent of
+    file-name and can provide means for software (MP3 players for
+    instance) to sort and group songs.</p>
+
+    <p>With XMP-support the JabRef team tries to bring the
+    advantages of metadata to the world of reference managers. You
+    can now choose to "Write XMP" metadata in the General Tab of
+    JabRef, which will put all the Bibtex information into the PDF.
+    If you then email this PDF to a collegue she can just drag the
+    file into JabRef and all information that you entered will be
+    available to her.</p>
+
+    <h2>Usage</h2>
+
+    <p>To use the XMP-feature in JabRef you can do the
+    following:</p>
+
+    <ul>
+        <li>To <b>import a single annotated PDF-file</b> that
+        contains XMP you can select "File -> Import into...
+        -> XMP-annotated PDF" or drag the file into the main
+        view.</li>
+
+        <li>To <b>write the bibliographic information to the
+        associated PDF</b> do the following: Double click the entry
+        in the main view, go to the "General" tab and click on
+        "Write XMP".</li>
+
+        <li>If you want <b>to annotate all the PDFs in a given
+        database</b> you can select "Tools -> Write XMP for
+        database"</li>
+
+        <li>To verify if it worked you can open the PDF in Adobe
+        Acrobat and select "File -> Document Properties ->
+        Additional Metadata -> Advanced". In the tree to the
+        right you should see an entry called
+        "http://purl.org/net/bibteXMP". This works only with Adobe
+        Acrobat, not with Adobe Reader.</li>
+
+        <li>If you don't have Adobe Acrobat, you can use
+        <i>pdfinfo</i> instead in order to see the XMP metadata.
+        <i>pdfinfo</i> is part of Xpdf
+        (<code>www.foolabs.com/xpdf</code>) and Poppler
+        (<code>http://poppler.freedesktop.org</code>).</li>
+
+        <li style="list-style: none">
+            <div style="margin-left: 2em">
+                <h2>BibteXmp Fileformat</h2>
+
+                <p>XMP uses a subset of the Resource Description
+                Framework (RDF) to store data. For JabRef a new
+                metadata format is used which maps very closely to
+                BibTeX. Basically all fields and values are turned
+                into nodes of an XML document. Only authors and
+                editors are stored as rdf:Seq-structures, so users
+                of the data can skip the splitting on 'and's. All
+                strings and crossrefs will be resolved in the
+                data.</p>
+
+                <p>The following easy minimal schema is used:</p>
+
+                <ul>
+                    <li>The BibTeX-key is stored as
+                    <code>bibtexkey</code>.</li>
+
+                    <li>The type of the BibTeX-entry is stored as
+                    <code>entrytype</code>.</li>
+
+                    <li><code>author</code> and <code>editor</code>
+                    are encoding as <code>rdf:Seq</code>s where the
+                    individual authors are represented as
+                    <code>rdf:li</code>s.</li>
+
+                    <li>All other fields are saved using their
+                    field-name as is.</li>
+                </ul><br />
+                <br />
+
+
+                <p>The following is an example of the mapping</p>
+                <pre>
+ at INPROCEEDINGS{CroAnnHow05,
+  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
+  title = {Effective work practices for floss development: A model and propositions},
+  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
+  year = {2005},
+  owner = {oezbek},
+  timestamp = {2006.05.29},
+  url = {http://james.howison.name/publications.html}
+}
+</pre>will be transformed into
+                <pre>
+<rdf:Description xmlns:bibtex="http://jabref.sourceforge.net/bibteXMP/"
+    bibtex:bibtexkey="CroAnnHow05"
+    bibtex:year="2005"
+    bibtex:title="Effective work practices for floss development: A model and propositions"
+    bibtex:owner="oezbek"
+    bibtex:url="http://james.howison.name/publications.html"
+    bibtex:booktitle="Hawaii International Conference On System Sciences (HICSS)"
+    bibtex:timestamp="2006.05.29">
+        <bibtex:author>
+            <rdf:Seq>
+                <rdf:li>K. Crowston</rdf:li>
+                <rdf:li>H. Annabi</rdf:li>
+                <rdf:li>J. Howison</rdf:li>
+                <rdf:li>C. Masango</rdf:li>
+            </rdf:Seq>
+        </bibtex:author>
+    <bibtex:entrytype>Inproceedings</bibtex:entrytype>
+</rdf:Description>
+</pre>
+
+                <p>Beware of the following caveats if you trying to
+                parse bibteXMP:</p>
+
+                <ul>
+                    <li>In RDF attribute-value pairs can also be
+                    expressed as nodes and vice versa.</li>
+                </ul><br />
+                <br />
+
+
+                <h2>Related Links:</h2>
+
+                <p>Some links about XMP and annotating PDFs:</p>
+
+                <ul>
+                    <li>
+                    <a href="http://freelancepropaganda.com/themp/">
+                    James Howison's blog "Themp---Managing Academic
+                    Papers like MP3s"</a></li>
+
+                    <li>
+                    <a href="http://www.xml.com/pub/a/2004/09/22/xmp.html">
+                    XML.com article about XMP</a></li>
+
+					<li><a href="http://pdfbox.apache.org/">PDFBox</a> by
+					the Apache Software Foundation is the Jaba library used to
+					access the PDFs and the metadata stream.</li>
+
+                    <li>
+                    <a href="http://arstechnica.com/civis/viewtopic.php?f=19&t=408429">
+                    Good thread on ArsTechnica discussing the
+                    management of PDFs.</a></li>
+
+                    <li>
+                    <a href="http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart1.pdf">
+                    Adobe XMP Specification</a></li>
+                </ul><br />
+                <br />
+
+            </div>
+        </li>
+    </ul>
+</body>
+</html>
diff --git a/src/help/cpl-v10.html b/src/help/cpl-v10.html
index 36aa208..1900994 100644
--- a/src/help/cpl-v10.html
+++ b/src/help/cpl-v10.html
@@ -1,125 +1,125 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-<HEAD>
-<TITLE>Common Public License - v 1.0</TITLE>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF" VLINK="#800000">
-
-
-<P ALIGN="CENTER"><B>Common Public License - v 1.0</B>
-<P><B></B><FONT SIZE="3"></FONT>
-<P><FONT SIZE="3"></FONT><FONT SIZE="2">THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT").  ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.</FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"><B>1.  DEFINITIONS</B></FONT>
-<P><FONT SIZE="2">"Contribution" means:</FONT>
-
-<UL><FONT SIZE="2">a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and<BR CLEAR="LEFT">
-b) in the case of each subsequent Contributor:</FONT></UL>
-
-
-<UL><FONT SIZE="2">i)	 	changes to the Program, and</FONT></UL>
-
-
-<UL><FONT SIZE="2">ii)		additions to the Program;</FONT></UL>
-
-
-<UL><FONT SIZE="2">where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.  </FONT><FONT SIZE="2">A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf.  </FONT><FONT SIZE="2">Contributions do not include additions to the Program which:  (i) are separate modules of software distributed in conjunction with the Program under their ow [...]
-
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">"Contributor" means any person or entity that distributes the Program.</FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.  </FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2">"Program" means the Contributions distributed in accordance with this Agreement.</FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.</FONT>
-<P><FONT SIZE="2"><B></B></FONT>
-<P><FONT SIZE="2"><B>2.  GRANT OF RIGHTS</B></FONT>
-
-<UL><FONT SIZE="2"></FONT><FONT SIZE="2">a)	</FONT><FONT SIZE="2">Subject to the terms of this Agreement, each Contributor hereby grants</FONT><FONT SIZE="2"> Recipient a non-exclusive, worldwide, royalty-free copyright license to</FONT><FONT SIZE="2" COLOR="#FF0000"> </FONT><FONT SIZE="2">reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object  [...]
-
-
-<UL><FONT SIZE="2"></FONT></UL>
-
-
-<UL><FONT SIZE="2"></FONT><FONT SIZE="2">b) 	Subject to the terms of this Agreement, each Contributor hereby grants </FONT><FONT SIZE="2">Recipient a non-exclusive, worldwide,</FONT><FONT SIZE="2" COLOR="#008000"> </FONT><FONT SIZE="2">royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form.  This patent license shall apply to the combination of th [...]
-
-
-<UL><FONT SIZE="2"></FONT></UL>
-
-
-<UL><FONT SIZE="2">c)	Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity.  Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise.  As a condition to exercising the rights and  [...]
-
-
-<UL><FONT SIZE="2"></FONT></UL>
-
-
-<UL><FONT SIZE="2">d)	Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. </FONT></UL>
-
-
-<UL><FONT SIZE="2"></FONT></UL>
-
-<P><FONT SIZE="2"><B>3.  REQUIREMENTS</B></FONT>
-<P><FONT SIZE="2"><B></B>A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:</FONT>
-
-<UL><FONT SIZE="2">a)	it complies with the terms and conditions of this Agreement; and</FONT></UL>
-
-
-<UL><FONT SIZE="2">b)	its license agreement:</FONT></UL>
-
-
-<UL><FONT SIZE="2">i)	effectively disclaims</FONT><FONT SIZE="2"> on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; </FONT></UL>
-
-
-<UL><FONT SIZE="2">ii) 	effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; </FONT></UL>
-
-
-<UL><FONT SIZE="2">iii)</FONT><FONT SIZE="2">	states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and</FONT></UL>
-
-
-<UL><FONT SIZE="2">iv)	states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.</FONT><FONT SIZE="2" COLOR="#0000FF"> </FONT><FONT SIZE="2" COLOR="#FF0000"></FONT></UL>
-
-
-<UL><FONT SIZE="2" COLOR="#FF0000"></FONT><FONT SIZE="2"></FONT></UL>
-
-<P><FONT SIZE="2">When the Program is made available in source code form:</FONT>
-
-<UL><FONT SIZE="2">a)	it must be made available under this Agreement; and </FONT></UL>
-
-
-<UL><FONT SIZE="2">b)	a copy of this Agreement must be included with each copy of the Program.  </FONT></UL>
-
-<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT>
-<P><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT><FONT SIZE="2">Contributors may not remove or alter any copyright notices contained within the Program.  </FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.  </FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"><B>4.  COMMERCIAL DISTRIBUTION</B></FONT>
-<P><FONT SIZE="2">Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like.  While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors.   Therefore, if a Contributor includes the Program in a commercial product offering, such Contrib [...]
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">For example, a Contributor might include the Program in a commercial product offering, Product X.  That Contributor is then a Commercial Contributor.  If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.  Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to thos [...]
-<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"></FONT>
-<P><FONT SIZE="2" COLOR="#0000FF"></FONT><FONT SIZE="2"><B>5.  NO WARRANTY</B></FONT>
-<P><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is</FONT><FONT SIZE="2"> solely responsible for determining the appropriateness of using and distributing </FONT><FONT SIZE="2">the Program</FONT><FONT  [...]
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"><B>6.  DISCLAIMER OF LIABILITY</B></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES </FONT><FONT SIZE="2">(INCLUDING WITHOUT LIMITATION LOST PROFITS),</FONT><FONT SIZE="2"> HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR  [...]
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"><B>7.  GENERAL</B></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2">If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.</FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed.  In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program i [...]
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance.  If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable.  However, Recipient's obligations under this Agreement and any lice [...]
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2">Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted  and may only be modified in the following manner. The Agreement Steward reserves the right to </FONT><FONT SIZE="2">publish new versions (including revisions) of this Agreement from time to </FONT><FONT SIZE="2">time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initia [...]
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose.  Each party waives its rights to a jury trial in any resulting litigation.</FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT>
-
-</BODY>
-
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Common Public License - v 1.0</TITLE>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" VLINK="#800000">
+
+
+<P ALIGN="CENTER"><B>Common Public License - v 1.0</B>
+<P><B></B><FONT SIZE="3"></FONT>
+<P><FONT SIZE="3"></FONT><FONT SIZE="2">THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT").  ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"><B>1.  DEFINITIONS</B></FONT>
+<P><FONT SIZE="2">"Contribution" means:</FONT>
+
+<UL><FONT SIZE="2">a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and<BR CLEAR="LEFT">
+b) in the case of each subsequent Contributor:</FONT></UL>
+
+
+<UL><FONT SIZE="2">i)	 	changes to the Program, and</FONT></UL>
+
+
+<UL><FONT SIZE="2">ii)		additions to the Program;</FONT></UL>
+
+
+<UL><FONT SIZE="2">where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.  </FONT><FONT SIZE="2">A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf.  </FONT><FONT SIZE="2">Contributions do not include additions to the Program which:  (i) are separate modules of software distributed in conjunction with the Program under their ow [...]
+
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">"Contributor" means any person or entity that distributes the Program.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.  </FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">"Program" means the Contributions distributed in accordance with this Agreement.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.</FONT>
+<P><FONT SIZE="2"><B></B></FONT>
+<P><FONT SIZE="2"><B>2.  GRANT OF RIGHTS</B></FONT>
+
+<UL><FONT SIZE="2"></FONT><FONT SIZE="2">a)	</FONT><FONT SIZE="2">Subject to the terms of this Agreement, each Contributor hereby grants</FONT><FONT SIZE="2"> Recipient a non-exclusive, worldwide, royalty-free copyright license to</FONT><FONT SIZE="2" COLOR="#FF0000"> </FONT><FONT SIZE="2">reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object  [...]
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT><FONT SIZE="2">b) 	Subject to the terms of this Agreement, each Contributor hereby grants </FONT><FONT SIZE="2">Recipient a non-exclusive, worldwide,</FONT><FONT SIZE="2" COLOR="#008000"> </FONT><FONT SIZE="2">royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form.  This patent license shall apply to the combination of th [...]
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+
+<UL><FONT SIZE="2">c)	Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity.  Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise.  As a condition to exercising the rights and  [...]
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+
+<UL><FONT SIZE="2">d)	Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. </FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+<P><FONT SIZE="2"><B>3.  REQUIREMENTS</B></FONT>
+<P><FONT SIZE="2"><B></B>A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:</FONT>
+
+<UL><FONT SIZE="2">a)	it complies with the terms and conditions of this Agreement; and</FONT></UL>
+
+
+<UL><FONT SIZE="2">b)	its license agreement:</FONT></UL>
+
+
+<UL><FONT SIZE="2">i)	effectively disclaims</FONT><FONT SIZE="2"> on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; </FONT></UL>
+
+
+<UL><FONT SIZE="2">ii) 	effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; </FONT></UL>
+
+
+<UL><FONT SIZE="2">iii)</FONT><FONT SIZE="2">	states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and</FONT></UL>
+
+
+<UL><FONT SIZE="2">iv)	states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.</FONT><FONT SIZE="2" COLOR="#0000FF"> </FONT><FONT SIZE="2" COLOR="#FF0000"></FONT></UL>
+
+
+<UL><FONT SIZE="2" COLOR="#FF0000"></FONT><FONT SIZE="2"></FONT></UL>
+
+<P><FONT SIZE="2">When the Program is made available in source code form:</FONT>
+
+<UL><FONT SIZE="2">a)	it must be made available under this Agreement; and </FONT></UL>
+
+
+<UL><FONT SIZE="2">b)	a copy of this Agreement must be included with each copy of the Program.  </FONT></UL>
+
+<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT>
+<P><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT><FONT SIZE="2">Contributors may not remove or alter any copyright notices contained within the Program.  </FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.  </FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"><B>4.  COMMERCIAL DISTRIBUTION</B></FONT>
+<P><FONT SIZE="2">Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like.  While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors.   Therefore, if a Contributor includes the Program in a commercial product offering, such Contrib [...]
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">For example, a Contributor might include the Program in a commercial product offering, Product X.  That Contributor is then a Commercial Contributor.  If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.  Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to thos [...]
+<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"></FONT>
+<P><FONT SIZE="2" COLOR="#0000FF"></FONT><FONT SIZE="2"><B>5.  NO WARRANTY</B></FONT>
+<P><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is</FONT><FONT SIZE="2"> solely responsible for determining the appropriateness of using and distributing </FONT><FONT SIZE="2">the Program</FONT><FONT  [...]
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"><B>6.  DISCLAIMER OF LIABILITY</B></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES </FONT><FONT SIZE="2">(INCLUDING WITHOUT LIMITATION LOST PROFITS),</FONT><FONT SIZE="2"> HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR  [...]
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"><B>7.  GENERAL</B></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed.  In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program i [...]
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance.  If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable.  However, Recipient's obligations under this Agreement and any lice [...]
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted  and may only be modified in the following manner. The Agreement Steward reserves the right to </FONT><FONT SIZE="2">publish new versions (including revisions) of this Agreement from time to </FONT><FONT SIZE="2">time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initia [...]
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose.  Each party waives its rights to a jury trial in any resulting litigation.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT>
+
+</BODY>
+
 </HTML>
\ No newline at end of file
diff --git a/src/help/da/About.html b/src/help/da/About.html
old mode 100755
new mode 100644
index ef10d2a..a4e9d32
--- a/src/help/da/About.html
+++ b/src/help/da/About.html
@@ -1,135 +1,135 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body id="aboutpage">
-        <h1>JabRef version @version@</h1>
-
-        <div id="logo">
-        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
-        </div>
-
-        <p>JabRef kan frit distribueres under betingelserne i
-        GNU <a href="License.html">General Public License</a>,
-        version 2.</p>
-
-        <h2>Udviklere:</h2>
-
-        <p>Morten O. Alver,
-        Nizar N. Batada,
-        Michel Baylac,
-        Kolja Brix,
-        Guillaume Gardey,
-        Oscar Gustafsson,
-        Cyrille d'Haese,
-        Oliver Kopp,
-        S M Mahbub Murshed,
-        Raik Nagel,
-        Christopher Oezbek,
-        Ellen Reitmayr,
-        Gert Renckens,
-        Andreas Rudert,
-        Michael Spiegel,
-        Ulrik Stervbo,
-        Joerg K. Wegner,
-        Michael Wrighton,
-        Egon Willighagen,
-        Jörg Zieren</p>
-
-        <h2>Bidrag fra:</h2>
-
-        <p>Thomas Arildsen,
-        Michael Beckmann,
-        Oliver Beckmann,
-        Fedor Bezrukov,
-        Fabian Bieker,
-        Aaron Chen,
-        Fabrice Dessaint,
-        Nathan Dunn,
-        E. Hakan Duran,
-        Brian Van Essen,
-        Alexis Gallagher,
-        David Gleich,
-        Sascha Hunold,
-        Bernd Kalbfuss,
-        Martin Kähmer,
-        Ervin Kolenovic,
-        Krzysztof A. Kościuszkiewicz,
-        Christian Kopf,
-        Felix Langner,
-        Stephan Lau,
-        Jeffrey Kuhn,
-        Uwe Kuehn,
-        Alex Montgomery,
-        Saverio Mori,
-        Ambrogio Oliva,
-        Stephan Rave,
-        John Relph,
-        Hannes Restel,
-        Moritz Ringler,
-        Andreas Rudert,
-        Mark Schenk,
-        Rudolf Seemann,
-        Toralf Senger,
-        Manuel Siebeneicher,
-        Mike Smoot,
-        Ulrich Stärk,
-        Martin Stolle,
-        David Weitzman,
-        Seb Wills,
-        John Zedlewski</p>
-
-        <h2>Tak til:</h2>
-
-        <p>Samin Muhammad Ridwanul Karim,
-        Stefan Robert</p>
-
-        <h2>Tredjepartssoftware anvendt:</h2>
-
-        <p>JabRef bruger JGoodies Looks og JGoodies Forms,
-        distribueret af JGoodies
-        (<code>http://www.jgoodies.com</code>) under betingelserne i
-        BSD License (se
-        <code>http://www.opensource.org/licenses/bsd-license.html</code>
-        for detaljer).</p>
-
-        <p>Inkluderer yderligere to klasser (SimpleInternalFrame og
-        UIFSplitPane) af Karsten Lentzsch, som distribueres
-        under <a href="jgoodies.html">disse betingelser</a>.</p>
-
-        <p>Kommandolinjeparametre fortolkes med RitOpt
-        (<code>http://ritopt.sourceforge.net</code>). RitOpt
-        distribueres under betingelserne i GNU
-        <a href="License.html">General Public License</a>, version
-        2.</p>
-
-        <p>JabRef bruger ANTLR parser-generatoren til fortolkning af
-        søgestrenge. ANTLR er public domain software - se
-        <code>http://www.antlr.org/license.html</code> for
-        licensbetingelser.</p>
-
-        <p>Til tabelpræsentation og -filtrering benytter JabRef
-        Glazed Lists biblioteket
-        (<code>http://publicobject.com/glazedlists</code>), som
-        distribueres under Lesser General Public License.</p>
-
-        <p>JabRef benytter også trådbiblioteket Spin, 
-            som distribueres under betingelserne i Lesser General
-        Public License.</p>
-
-        <p>Der er brugt visse GUI-komponenter fra Microba-biblioteket,
-        som er licenseret under en BSD-lignende licens. See
-        <code>http://sourceforge.net/projects/microba/</code> for mere
-        information.</p>
-
-        <p>Størstedelen af ikonerne stammer fra Crystal Clear
-        ikonsættet af Everaldo
-        (<code>http://www.everaldo.com</code>), som distribueres under
-        betingelserne i Lesser General Public License.</p>
-
-        <p>JabRef benytter JempBox og PDFBox bibliotekerne til
-        PDF-håndtering; begge distribueres under en BSD-lignende
-        licens.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body id="aboutpage">
+        <h1>JabRef version @version@</h1>
+
+        <div id="logo">
+        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
+        </div>
+
+        <p>JabRef kan frit distribueres under betingelserne i
+        GNU <a href="License.html">General Public License</a>,
+        version 2.</p>
+
+        <h2>Udviklere:</h2>
+
+        <p>Morten O. Alver,
+        Nizar N. Batada,
+        Michel Baylac,
+        Kolja Brix,
+        Guillaume Gardey,
+        Oscar Gustafsson,
+        Cyrille d'Haese,
+        Oliver Kopp,
+        S M Mahbub Murshed,
+        Raik Nagel,
+        Christopher Oezbek,
+        Ellen Reitmayr,
+        Gert Renckens,
+        Andreas Rudert,
+        Michael Spiegel,
+        Ulrik Stervbo,
+        Joerg K. Wegner,
+        Michael Wrighton,
+        Egon Willighagen,
+        Jörg Zieren</p>
+
+        <h2>Bidrag fra:</h2>
+
+        <p>Thomas Arildsen,
+        Michael Beckmann,
+        Oliver Beckmann,
+        Fedor Bezrukov,
+        Fabian Bieker,
+        Aaron Chen,
+        Fabrice Dessaint,
+        Nathan Dunn,
+        E. Hakan Duran,
+        Brian Van Essen,
+        Alexis Gallagher,
+        David Gleich,
+        Sascha Hunold,
+        Bernd Kalbfuss,
+        Martin Kähmer,
+        Ervin Kolenovic,
+        Krzysztof A. Kościuszkiewicz,
+        Christian Kopf,
+        Felix Langner,
+        Stephan Lau,
+        Jeffrey Kuhn,
+        Uwe Kuehn,
+        Alex Montgomery,
+        Saverio Mori,
+        Ambrogio Oliva,
+        Stephan Rave,
+        John Relph,
+        Hannes Restel,
+        Moritz Ringler,
+        Andreas Rudert,
+        Mark Schenk,
+        Rudolf Seemann,
+        Toralf Senger,
+        Manuel Siebeneicher,
+        Mike Smoot,
+        Ulrich Stärk,
+        Martin Stolle,
+        David Weitzman,
+        Seb Wills,
+        John Zedlewski</p>
+
+        <h2>Tak til:</h2>
+
+        <p>Samin Muhammad Ridwanul Karim,
+        Stefan Robert</p>
+
+        <h2>Tredjepartssoftware anvendt:</h2>
+
+        <p>JabRef bruger JGoodies Looks og JGoodies Forms,
+        distribueret af JGoodies
+        (<code>http://www.jgoodies.com</code>) under betingelserne i
+        BSD License (se
+        <code>http://www.opensource.org/licenses/bsd-license.html</code>
+        for detaljer).</p>
+
+        <p>Inkluderer yderligere to klasser (SimpleInternalFrame og
+        UIFSplitPane) af Karsten Lentzsch, som distribueres
+        under <a href="jgoodies.html">disse betingelser</a>.</p>
+
+        <p>Kommandolinjeparametre fortolkes med RitOpt
+        (<code>http://ritopt.sourceforge.net</code>). RitOpt
+        distribueres under betingelserne i GNU
+        <a href="License.html">General Public License</a>, version
+        2.</p>
+
+        <p>JabRef bruger ANTLR parser-generatoren til fortolkning af
+        søgestrenge. ANTLR er public domain software - se
+        <code>http://www.antlr.org/license.html</code> for
+        licensbetingelser.</p>
+
+        <p>Til tabelpræsentation og -filtrering benytter JabRef
+        Glazed Lists biblioteket
+        (<code>http://publicobject.com/glazedlists</code>), som
+        distribueres under Lesser General Public License.</p>
+
+        <p>JabRef benytter også trådbiblioteket Spin, 
+            som distribueres under betingelserne i Lesser General
+        Public License.</p>
+
+        <p>Der er brugt visse GUI-komponenter fra Microba-biblioteket,
+        som er licenseret under en BSD-lignende licens. See
+        <code>http://sourceforge.net/projects/microba/</code> for mere
+        information.</p>
+
+        <p>Størstedelen af ikonerne stammer fra Crystal Clear
+        ikonsættet af Everaldo
+        (<code>http://www.everaldo.com</code>), som distribueres under
+        betingelserne i Lesser General Public License.</p>
+
+        <p>JabRef benytter JempBox og PDFBox bibliotekerne til
+        PDF-håndtering; begge distribueres under en BSD-lignende
+        licens.</p>
+</body>
+</html>
diff --git a/src/help/de/About.html b/src/help/de/About.html
index b75976d..d27e393 100644
--- a/src/help/de/About.html
+++ b/src/help/de/About.html
@@ -1,134 +1,134 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body id="aboutpage">
-        <h1>JabRef Version @version@</h1>
-
-        <div id="logo">
-        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
-        </div>
-
-        <p>JabRef ist frei verfügbar unter den Bedingungen der
-        GNU <a href="License.html">General Public License</a>.</p>
-
-        <h2>Entwickler:</h2>
-
-        <p>Morten O. Alver,
-        Nizar N. Batada,
-        Michel Baylac,
-        Kolja Brix,
-        Guillaume Gardey,
-        Oscar Gustafsson,
-        Cyrille d'Haese,
-        Oliver Kopp,
-        S M Mahbub Murshed,
-        Raik Nagel,
-        Christopher Oezbek,
-        Ellen Reitmayr,
-        Gert Renckens,
-        Andreas Rudert,
-        Michael Spiegel,
-        Ulrik Stervbo,
-        Joerg K. Wegner,
-        Michael Wrighton,
-        Egon Willighagen,
-        Jörg Zieren</p>
-
-        <h2>Beiträge von:</h2>
-
-        <p>Thomas Arildsen,
-        Michael Beckmann,
-        Oliver Beckmann,
-        Fedor Bezrukov,            
-        Aaron Chen,
-        Fabrice Dessaint,
-        Nathan Dunn,
-        E. Hakan Duran,
-        Brian Van Essen,
-        Alexis Gallagher,
-        David Gleich,
-        Sascha Hunold,
-        Bernd Kalbfuss,
-        Martin Kähmer,
-        Ervin Kolenovic,
-        Krzysztof A. Kościuszkiewicz,
-        Christian Kopf,
-        Felix Langner,
-        Stephan Lau,
-        Jeffrey Kuhn,
-        Uwe Kuehn,
-        Alex Montgomery,
-        Ambrogio Oliva,
-        Stephan Rave,
-        John Relph,
-        Hannes Restel,
-        Moritz Ringler,
-        Andreas Rudert,
-        Mark Schenk,
-        Rudolf Seemann,
-        Toralf Senger,
-        Manuel Siebeneicher,
-        Mike Smoot,
-        Ulrich Stärk,
-        Martin Stolle,
-        David Weitzman,
-        Seb Wills,
-        John Zedlewski</p>
-
-        <h2>Dank an:</h2>
-
-        <p>Samin Muhammad Ridwanul Karim,
-        Stefan Robert</p>
-
-        <h2>Benutzte Fremdsoftware:</h2>
-
-        <p>JabRef benutzt JGoodies
-        Looks und JGoodies Forms, das von JGoodies
-        (<code>http://www.jgoodies.com</code>) unter den
-        Bedingungen der BSD-Lizenz vertrieben wird (siehe
-        <code>http://www.opensource.org/licenses/bsd-license.html</code>
-        für nähere Einzelheiten dieser Lizenz).</p>
-
-        <p>Außerdem werden zwei zustätzliche Klassen
-        (SimpleInternalFrame and UIFSplitPane) von Karsten Lentzsch
-        benutzt, die unter <a href="jgoodies.html">diesen
-        Bedingungen</a> vertrieben werden.</p>
-
-        <p>Kommandozeilenbefehle werden geparst mit RitOpt
-        (<code>http://ritopt.sourceforge.net</code>), das unter den
-        Bedingungen der GNU <a href="License.html">General Public
-        License</a> (Version 2) verfügbar ist.</p>
-
-        <p>JabRef verwendet für die Suche den ANTLR Parser
-        Generator. ANTLR ist public domain software - siehe
-        <code>http://www.antlr.org/license.html</code> für die
-        Lizenzbedingungen.</p>
-
-        <p>Für die Darstellung und Filterung der Tabelle
-        benutzt JabRef die Glazed Lists library
-        (<code>http://publicobject.com/glazedlists</code>), die
-        unter den Bedingungen der Lesser General Public License
-        vertrieben wird.</p>
-
-        <p>JabRef benutzt darüber hinaus die "threading
-        library" Spin, die ebenfalls unter den Bedingungen
-        der Lesser General Public License vertrieben wird.</p>
-
-        <p>Für die einfache Auswahl und den Umgang mit
-        Datumsangaben werden Komponenten der Microba-Bibliothek
-        verwenden. Diese wird unter einer BSD-Lizenz vertrieben,
-        siehe <code>http://sourceforge.net/projects/microba/</code>
-        für eine genauere Beschreibung.</p>
-
-        <p>Die meisten Icons stammen aus dem Crystal Clear Icon-Set
-        von Everaldo (<code>http://www.everaldo.com</code>), das
-        unter den Bedingungen der Lesser General Public License
-        vertrieben wird.</p>
-
-        <p>JabRef verwendet für die Behandlung von PDF-Dateien
-        die JempBox- und PDFBox-Bibliotheken, die unter einer
-        Apache-Lizenz vertrieben werden.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body id="aboutpage">
+        <h1>JabRef Version @version@</h1>
+
+        <div id="logo">
+        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
+        </div>
+
+        <p>JabRef ist frei verfügbar unter den Bedingungen der
+        GNU <a href="License.html">General Public License</a>.</p>
+
+        <h2>Entwickler:</h2>
+
+        <p>Morten O. Alver,
+        Nizar N. Batada,
+        Michel Baylac,
+        Kolja Brix,
+        Guillaume Gardey,
+        Oscar Gustafsson,
+        Cyrille d'Haese,
+        Oliver Kopp,
+        S M Mahbub Murshed,
+        Raik Nagel,
+        Christopher Oezbek,
+        Ellen Reitmayr,
+        Gert Renckens,
+        Andreas Rudert,
+        Michael Spiegel,
+        Ulrik Stervbo,
+        Joerg K. Wegner,
+        Michael Wrighton,
+        Egon Willighagen,
+        Jörg Zieren</p>
+
+        <h2>Beiträge von:</h2>
+
+        <p>Thomas Arildsen,
+        Michael Beckmann,
+        Oliver Beckmann,
+        Fedor Bezrukov,            
+        Aaron Chen,
+        Fabrice Dessaint,
+        Nathan Dunn,
+        E. Hakan Duran,
+        Brian Van Essen,
+        Alexis Gallagher,
+        David Gleich,
+        Sascha Hunold,
+        Bernd Kalbfuss,
+        Martin Kähmer,
+        Ervin Kolenovic,
+        Krzysztof A. Kościuszkiewicz,
+        Christian Kopf,
+        Felix Langner,
+        Stephan Lau,
+        Jeffrey Kuhn,
+        Uwe Kuehn,
+        Alex Montgomery,
+        Ambrogio Oliva,
+        Stephan Rave,
+        John Relph,
+        Hannes Restel,
+        Moritz Ringler,
+        Andreas Rudert,
+        Mark Schenk,
+        Rudolf Seemann,
+        Toralf Senger,
+        Manuel Siebeneicher,
+        Mike Smoot,
+        Ulrich Stärk,
+        Martin Stolle,
+        David Weitzman,
+        Seb Wills,
+        John Zedlewski</p>
+
+        <h2>Dank an:</h2>
+
+        <p>Samin Muhammad Ridwanul Karim,
+        Stefan Robert</p>
+
+        <h2>Benutzte Fremdsoftware:</h2>
+
+        <p>JabRef benutzt JGoodies
+        Looks und JGoodies Forms, das von JGoodies
+        (<code>http://www.jgoodies.com</code>) unter den
+        Bedingungen der BSD-Lizenz vertrieben wird (siehe
+        <code>http://www.opensource.org/licenses/bsd-license.html</code>
+        für nähere Einzelheiten dieser Lizenz).</p>
+
+        <p>Außerdem werden zwei zustätzliche Klassen
+        (SimpleInternalFrame and UIFSplitPane) von Karsten Lentzsch
+        benutzt, die unter <a href="jgoodies.html">diesen
+        Bedingungen</a> vertrieben werden.</p>
+
+        <p>Kommandozeilenbefehle werden geparst mit RitOpt
+        (<code>http://ritopt.sourceforge.net</code>), das unter den
+        Bedingungen der GNU <a href="License.html">General Public
+        License</a> (Version 2) verfügbar ist.</p>
+
+        <p>JabRef verwendet für die Suche den ANTLR Parser
+        Generator. ANTLR ist public domain software - siehe
+        <code>http://www.antlr.org/license.html</code> für die
+        Lizenzbedingungen.</p>
+
+        <p>Für die Darstellung und Filterung der Tabelle
+        benutzt JabRef die Glazed Lists library
+        (<code>http://publicobject.com/glazedlists</code>), die
+        unter den Bedingungen der Lesser General Public License
+        vertrieben wird.</p>
+
+        <p>JabRef benutzt darüber hinaus die "threading
+        library" Spin, die ebenfalls unter den Bedingungen
+        der Lesser General Public License vertrieben wird.</p>
+
+        <p>Für die einfache Auswahl und den Umgang mit
+        Datumsangaben werden Komponenten der Microba-Bibliothek
+        verwenden. Diese wird unter einer BSD-Lizenz vertrieben,
+        siehe <code>http://sourceforge.net/projects/microba/</code>
+        für eine genauere Beschreibung.</p>
+
+        <p>Die meisten Icons stammen aus dem Crystal Clear Icon-Set
+        von Everaldo (<code>http://www.everaldo.com</code>), das
+        unter den Bedingungen der Lesser General Public License
+        vertrieben wird.</p>
+
+        <p>JabRef verwendet für die Behandlung von PDF-Dateien
+        die JempBox- und PDFBox-Bibliotheken, die unter einer
+        Apache-Lizenz vertrieben werden.</p>
+</body>
+</html>
diff --git a/src/help/de/BaseFrameHelp.html b/src/help/de/BaseFrameHelp.html
index a7628b7..5992e43 100644
--- a/src/help/de/BaseFrameHelp.html
+++ b/src/help/de/BaseFrameHelp.html
@@ -1,138 +1,138 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Das Hauptfenster von JabRef</h1>
-
-    <p><em>Anmerkung:</em> Die
-    meisten Menüfunktionen, auf die im Folgenden hingewiesen
-    wird, haben Tastenkürzel, und viele Funktionen können
-    über die Werkzeugleiste aufgerufen werden.</p>
-
-    <p>Dies ist das Hauptfenster, in dem Sie mit Ihrer Datei
-    arbeiten. Unter der Menüleiste und der Werkzeugleiste
-    befindet sich die Tableiste mit Tabs (Reitern) für jede
-    Ihrer geöffneten Dateien. Wenn Sie einen dieser Tabs
-    anklicken, erscheint eine Tabelle, die alle Datensätze und
-    einige der Datenfelder auflistet.</p>
-
-    <ul>
-        <li>Die Auswahl der entsprechenden Felder können Sie
-        im <strong>Einstellungs</strong>-Dialog vornehmen.</li>
-
-        <li>Mit einem Doppelklick auf eine Tabellenzeile
-        können Sie den Inhalt bearbeiten (der
-        <a href="EntryEditorHelp.html">Eintragseditor</a> wird
-        geöffnet). Sie können mit den Pfeiltasten
-        innerhalb der Tabelle navigieren. Wenn Sie einen Buchstaben
-        drücken, springen Sie zu dem ersten Eintrag, der mit
-        diesem Buchstaben beginnt (abhängig von der Spalte,
-        nach der Sie die Tabelle sortiert haben).</li>
-
-        <li>Die Tabelle wird nach einem Feld Ihrer Wahl sortiert.
-        Sie können das Standardverhalten unter
-        <strong>Optionen -> Einstellungen ->
-        Tabellenansicht</strong> angeben. Um die Sortierreihenfolge
-        schnell zu ändern, klicken Sie einfach auf die
-        Kopfzeile einer Spalte; damit haben Sie das primäre
-        Sortierkriterium definiert. Klicken Sie erneut auf den
-        Spaltenkopf, um die Sortierrichtung umzukehren. Ein
-        weiterer Klick sorgt dafür, dass die Spalte nicht mehr
-        zur Sortierung herangezogen wird. Halten Sie die
-        CONTROL-Taste beim Klicken auf einen Spaltenknopf
-        gedrückt, um eine zweite Spalte als sekundäres
-        Sortierkriterium festzulegen. Sie können beliebig
-        viele Spalten zur Sortierung heranziehen.</li>
-
-        <li>Sie können die Breite der Tabellenspalten
-        einstellen, indem Sie die Trennlinie zwischen den
-        Spaltenköpfen anklicken und verschieben. Die
-        Reihenfolge der Spalten können Sie festlegen, indem
-        Sie mit der Maus auf den Spaltenkopf klicken und die Spalte
-        an die gewünschte Stelle ziehen.</li>
-
-        <li>Im <strong>Einstellungs</strong>-Dialog können Sie
-        festlegen, ob die Tabelle an die Bildschirmgröße
-        angepasst werden soll oder nicht. Aktivieren Sie diese
-        Funktion, um sicherzustellen, dass Sie die gesamte Tabelle
-        sehen können. Deaktivieren Sie diese Funktion, wenn
-        mehr Informationen dargestellt werden sollen.</li>
-
-        <li>
-            Die Farbanzeige kann ebenfalls im
-            <strong>Einstellungs</strong>-Dialog ein- und
-            ausgeschaltet werden. Die Farbanzeige illustriert, ob
-            Ihre Daten vollständig sind, indem sie die Zellen
-            wie folgt darstellt:
-
-            <ul>
-                <li>Eine <span style="color: red">rote</span> Zelle in der
-                linken Spalte kennzeichnet einen
-                unvollständigen Eintrag.</li>
-
-                <li>Eine <span style="color: #909000">gelbe</span> Zelle
-                in der linken Spalte kennzeichnet einen Eintrag,
-                der nicht alle benötigten Felder selbst
-                enthält, der aber einen Querverweis
-                enthält.</li>
-
-                <li>Eine <span style="color: blue">blaue</span> Zelle
-                kennzeichnet ein benötigtes Feld.</li>
-
-                <li>Eine <span style="color: green">grüne</span>
-                Zelle kennzeichnet ein optionales Feld.</li>
-
-                <li>Eine farblose (weiße) Zelle kennzeichnet
-                ein Feld, das von BibTeX für diesen
-                Eintragstyp nicht benutzt wird. Das Feld can
-                selbstverständlich in JabRef bearbeitet
-                werden.</li>
-            </ul>
-        </li>
-    </ul>
-
-    <h2>Einen neuen Eintrag hinzufügen</h2>
-
-    <p>Es gibt verschiedene Möglichkeiten, einen neuen Eintrag
-    hinzuzufügen. Im Menü <strong>BibTeX</strong>
-    führt ein Klick auf <strong>Neuer Eintrag</strong> zu
-    einem Dialog, in dem Sie den Eintragstyp aus einer Liste
-    wählen können. Um diesen Dialog zu umgehen, gibt es
-    auch eigene Menüpunkte für jeden Eintragstyp und
-    außerdem Tastenkürzel für die gängigsten
-    Typen.</p>
-
-    <p>Wenn ein Eintrag hinzugefügt wird, wird
-    standardmäßig ein
-    <a href="EntryEditorHelp.html">Editor</a> für den Eintrag
-    geöffnet. Sie können dieses Verhalten im
-    <strong>Einstellungs</strong>-Dialog abstellen.</p>
-
-    <p><em>Anmerkung:</em> Wir empfehlen dringend, sich die
-    Tastenkürzel für die Eintragstypen einzuprägen,
-    die Sie am häufigsten benutzen, z.B. STRG-SHIFT-A für
-    einen Zeitschriftenaufsatz (<em>article</em>).</p>
-
-    <h2>Einen Eintrag bearbeiten</h2>
-
-    <p>Um den <a href="EntryEditorHelp.html">Eintrags-Editor</a> zur
-    Bearbeitung eines existierenden Eintrags zu öffnen,
-    klicken Sie einfach doppelt auf die Zeile des Eintrags oder
-    markieren den Eintrag und drücken auf ENTER.</p>
-
-    <h2>Einen <em>BibTeX</em> String in einem Feld verwenden</h2>
-
-    <p>In JabRef schreiben Sie den Inhalt aller Felder so, wie Sie es in
-    einem Texteditor machen würden, mit einer Ausnahme: um
-    einen String (Anm. d. Übers.: eine Art Abkürzung) zu
-    verwenden, umschließen Sie den Namen des Strings mit je
-    einem #, z.B.</p>
-    <p>  '#jan# 1997',</p>
-    <p>was interpretiert wird als String mit dem Namen 'jan' gefolgt
-    von '1997'.</p>
-
-    <p>Vergleichen Sie auch die Hilfeseite zum
-    <a href="StringEditorHelp.html">String-Editor</a>. </p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Das Hauptfenster von JabRef</h1>
+
+    <p><em>Anmerkung:</em> Die
+    meisten Menüfunktionen, auf die im Folgenden hingewiesen
+    wird, haben Tastenkürzel, und viele Funktionen können
+    über die Werkzeugleiste aufgerufen werden.</p>
+
+    <p>Dies ist das Hauptfenster, in dem Sie mit Ihrer Datei
+    arbeiten. Unter der Menüleiste und der Werkzeugleiste
+    befindet sich die Tableiste mit Tabs (Reitern) für jede
+    Ihrer geöffneten Dateien. Wenn Sie einen dieser Tabs
+    anklicken, erscheint eine Tabelle, die alle Datensätze und
+    einige der Datenfelder auflistet.</p>
+
+    <ul>
+        <li>Die Auswahl der entsprechenden Felder können Sie
+        im <strong>Einstellungs</strong>-Dialog vornehmen.</li>
+
+        <li>Mit einem Doppelklick auf eine Tabellenzeile
+        können Sie den Inhalt bearbeiten (der
+        <a href="EntryEditorHelp.html">Eintragseditor</a> wird
+        geöffnet). Sie können mit den Pfeiltasten
+        innerhalb der Tabelle navigieren. Wenn Sie einen Buchstaben
+        drücken, springen Sie zu dem ersten Eintrag, der mit
+        diesem Buchstaben beginnt (abhängig von der Spalte,
+        nach der Sie die Tabelle sortiert haben).</li>
+
+        <li>Die Tabelle wird nach einem Feld Ihrer Wahl sortiert.
+        Sie können das Standardverhalten unter
+        <strong>Optionen -> Einstellungen ->
+        Tabellenansicht</strong> angeben. Um die Sortierreihenfolge
+        schnell zu ändern, klicken Sie einfach auf die
+        Kopfzeile einer Spalte; damit haben Sie das primäre
+        Sortierkriterium definiert. Klicken Sie erneut auf den
+        Spaltenkopf, um die Sortierrichtung umzukehren. Ein
+        weiterer Klick sorgt dafür, dass die Spalte nicht mehr
+        zur Sortierung herangezogen wird. Halten Sie die
+        CONTROL-Taste beim Klicken auf einen Spaltenknopf
+        gedrückt, um eine zweite Spalte als sekundäres
+        Sortierkriterium festzulegen. Sie können beliebig
+        viele Spalten zur Sortierung heranziehen.</li>
+
+        <li>Sie können die Breite der Tabellenspalten
+        einstellen, indem Sie die Trennlinie zwischen den
+        Spaltenköpfen anklicken und verschieben. Die
+        Reihenfolge der Spalten können Sie festlegen, indem
+        Sie mit der Maus auf den Spaltenkopf klicken und die Spalte
+        an die gewünschte Stelle ziehen.</li>
+
+        <li>Im <strong>Einstellungs</strong>-Dialog können Sie
+        festlegen, ob die Tabelle an die Bildschirmgröße
+        angepasst werden soll oder nicht. Aktivieren Sie diese
+        Funktion, um sicherzustellen, dass Sie die gesamte Tabelle
+        sehen können. Deaktivieren Sie diese Funktion, wenn
+        mehr Informationen dargestellt werden sollen.</li>
+
+        <li>
+            Die Farbanzeige kann ebenfalls im
+            <strong>Einstellungs</strong>-Dialog ein- und
+            ausgeschaltet werden. Die Farbanzeige illustriert, ob
+            Ihre Daten vollständig sind, indem sie die Zellen
+            wie folgt darstellt:
+
+            <ul>
+                <li>Eine <span style="color: red">rote</span> Zelle in der
+                linken Spalte kennzeichnet einen
+                unvollständigen Eintrag.</li>
+
+                <li>Eine <span style="color: #909000">gelbe</span> Zelle
+                in der linken Spalte kennzeichnet einen Eintrag,
+                der nicht alle benötigten Felder selbst
+                enthält, der aber einen Querverweis
+                enthält.</li>
+
+                <li>Eine <span style="color: blue">blaue</span> Zelle
+                kennzeichnet ein benötigtes Feld.</li>
+
+                <li>Eine <span style="color: green">grüne</span>
+                Zelle kennzeichnet ein optionales Feld.</li>
+
+                <li>Eine farblose (weiße) Zelle kennzeichnet
+                ein Feld, das von BibTeX für diesen
+                Eintragstyp nicht benutzt wird. Das Feld can
+                selbstverständlich in JabRef bearbeitet
+                werden.</li>
+            </ul>
+        </li>
+    </ul>
+
+    <h2>Einen neuen Eintrag hinzufügen</h2>
+
+    <p>Es gibt verschiedene Möglichkeiten, einen neuen Eintrag
+    hinzuzufügen. Im Menü <strong>BibTeX</strong>
+    führt ein Klick auf <strong>Neuer Eintrag</strong> zu
+    einem Dialog, in dem Sie den Eintragstyp aus einer Liste
+    wählen können. Um diesen Dialog zu umgehen, gibt es
+    auch eigene Menüpunkte für jeden Eintragstyp und
+    außerdem Tastenkürzel für die gängigsten
+    Typen.</p>
+
+    <p>Wenn ein Eintrag hinzugefügt wird, wird
+    standardmäßig ein
+    <a href="EntryEditorHelp.html">Editor</a> für den Eintrag
+    geöffnet. Sie können dieses Verhalten im
+    <strong>Einstellungs</strong>-Dialog abstellen.</p>
+
+    <p><em>Anmerkung:</em> Wir empfehlen dringend, sich die
+    Tastenkürzel für die Eintragstypen einzuprägen,
+    die Sie am häufigsten benutzen, z.B. STRG-SHIFT-A für
+    einen Zeitschriftenaufsatz (<em>article</em>).</p>
+
+    <h2>Einen Eintrag bearbeiten</h2>
+
+    <p>Um den <a href="EntryEditorHelp.html">Eintrags-Editor</a> zur
+    Bearbeitung eines existierenden Eintrags zu öffnen,
+    klicken Sie einfach doppelt auf die Zeile des Eintrags oder
+    markieren den Eintrag und drücken auf ENTER.</p>
+
+    <h2>Einen <em>BibTeX</em> String in einem Feld verwenden</h2>
+
+    <p>In JabRef schreiben Sie den Inhalt aller Felder so, wie Sie es in
+    einem Texteditor machen würden, mit einer Ausnahme: um
+    einen String (Anm. d. Übers.: eine Art Abkürzung) zu
+    verwenden, umschließen Sie den Namen des Strings mit je
+    einem #, z.B.</p>
+    <p>  '#jan# 1997',</p>
+    <p>was interpretiert wird als String mit dem Namen 'jan' gefolgt
+    von '1997'.</p>
+
+    <p>Vergleichen Sie auch die Hilfeseite zum
+    <a href="StringEditorHelp.html">String-Editor</a>. </p>
+</body>
+</html>
diff --git a/src/help/de/BibtexHelp.html b/src/help/de/BibtexHelp.html
index 8eab85c..de709d6 100644
--- a/src/help/de/BibtexHelp.html
+++ b/src/help/de/BibtexHelp.html
@@ -1,305 +1,305 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Über <em>BibTeX</em></h1>
-
-    <p>JabRef hilft Ihnen bei der
-    Arbeit mit Ihren <em>BibTeX</em>-Dateien, aber es müssen
-    dennoch Regeln beachtet werden, wenn Sie Ihre Einträge
-    bearbeiten. Nur so kann sichergestellt werden, dass
-    <em>BibTeX</em> Ihre Datei richtig verarbeiten kann.</p>
-
-    <h2><em>BibTeX</em> Felder</h2>
-
-    <p>Es gibt viele unterschiedliche
-    Felder in <em>BibTeX</em> und einige zusätzliche Felder,
-    die Sie in JabRef einsetzen können.</p>
-
-    <p>Grundsätzlich können Sie LaTeX-Befehle in Feldern,
-    die Text beinhalten, einsetzen. <em>BibTeX</em> wird Ihr
-    Literaturverzeichnis automatisch formatieren und je nach
-    <em>BibTeX</em> style (Stildatei .bst) Großbuchstaben
-    verkleinern. Um sicherzustellen, dass einzelne Buchstaben
-    groß bleiben, müssen Sie sie in Klammern
-    einschließen, wie im Wort {B}elgien. <em>(Anm. d.
-    Übers.: Die meisten deutschen BibTeX-Stile behalten
-    die Großbuchstaben ohnehin bei.)</em></p>
-
-    <p>Hinweise zu einigen Feldtypen:</p>
-
-    <ul>
-        <li>
-        <strong style="font-style: italic;">Bibtexkey<br /></strong>Eine
-        eindeutige Bezeichnung, um sich in LaTeX-Dokumenten auf den
-        Eintrag beziehen zu können. Beachten Sie, dass der
-        Bibtexkey genau mit dem Verweis im LaTeX-Dokument
-        übereinstimmen muss (auch die
-        Groß-/Kleinschreibung).<br />
-        </li>
-
-        <li><strong>address<br /></strong> Der Ort des
-        <em>Verlags</em> oder einer anderen Institution.</li>
-
-        <li><strong>annote<br /></strong> Eine Anmerkung. Dieses
-        Feld wird von den Standard-Bibliographiestilen nicht
-        verwendet, kann aber bei einigen Stilen benutzt werden, um
-        eine kommentierte Literaturliste zu erstellen.</li>
-
-        <li>
-            <strong>author<br /></strong> Dieses Feld sollte alle
-            Autoren Ihres Eintrags enthalten. Die Namen werden
-            durch das Wort <tt>and</tt> getrennt, auch wenn es mehr
-            als zwei Autoren gibt. Jeder Name kann in zwei
-            gleichwertigen Formen notiert werden:
-
-            <ul>
-                <li>Donald E. Knuth <em>oder</em> Knuth, Donald
-                E.</li>
-
-                <li>Eddie van Halen <em>oder</em> van Halen,
-                Eddie</li>
-            </ul>Die zweite Form sollte für Autoren mit zwei
-            oder mehr Nachnamen benutzt werden, um zwischen dem
-            mittleren und dem Nachnamen zu unterscheiden.<br />
-        </li>
-
-        <li><strong>booktitle<br /></strong> Der Titel eines
-        Buches, aus dem ein Teil zitiert wird. Falls Sie ein Buch
-        zitieren wollen, nehmen Sie für den Titel stattdessen
-        das <tt>title</tt>-Feld.</li>
-
-        <li><strong>chapter<br /></strong> Eine Kapitelnummer (oder
-        Abschnittsnummer oder was-auch-immer-Nummer).</li>
-
-        <li><strong>crossref<br /></strong> Der <tt>key</tt> eines
-        Eintrags, auf den ein Querverweis gesetzt wird. Damit
-        lassen sich beispielsweise die Daten eines Sammelbandes in
-        einem Eintrag für einen Aufsatztitel wiederverwenden,
-        ohne sie bei jedem Aufsatztitel explizit einzutragen. Die
-        Funktionalität von <tt>crossref</tt> ist jedoch nicht
-        in jedem Fall praktikabel.</li>
-
-        <li><strong>edition<br /></strong> Die Auflage eines Buch,
-        z.B. ,,Zweite``. Die Ordnungszahl sollte mit einem
-        Großbuchstaben beginnen; sie wird von den
-        Standardstilen gegebenenfalls in Kleinbuchstaben
-        umgewandelt. Manche Stile verlangen hier eine Ziffer.</li>
-
-        <li><strong>editor<br /></strong> Dieses Feld ist analog zu
-        dem <em>author</em>-Feld. Falls zusätzlich ein
-        <tt>author</tt>-Feld angegeben wird, bezeichnet das
-        <tt>editor</tt>-Feld den Herausgeber des Buches oder des
-        Sammelbandes, in dem die referenzierte Literatur erschienen
-        ist.</li>
-
-        <li><strong>howpublished<br /></strong> Die Art, wie ein
-        Werk veröffentlicht wurde (meist außerhalb eines
-        Verlags). Das erste Wort sollte mit einem
-        Großbuchstaben beginnen.</li>
-
-        <li><strong>institution<br /></strong> Die fördernde
-        Institutions eines technischen Reports.</li>
-
-        <li><strong>journal<br /></strong> Ein Zeitschriftenname.
-        Mit Hilfe von "Strings" können Zeitschriftennamen
-        abgekürzt werden. Zum Erstellen eines solchen Strings
-        können Sie den
-        <a href="StringEditorHelp.html">String-Editor</a> benutzen
-        oder die Funktionalität zur
-        <a href="JournalAbbreviations.html">Abkürzung von
-        Zeitschriftentiteln</a> verwenden.</li>
-
-        <li><strong>key<br /></strong> Dieses Feld wird zur
-        Sortierung, zur Erstellung von Labels (falls kein
-        <tt>author</tt> vorhanden ist) und für Querverweise
-        (<tt>crossref</tt>) verwendet. Verwechseln Sie dieses Feld
-        nicht mit dem <tt>Bibtexkey</tt>, der für die
-        <code>\cite</code>-Kommandos gebraucht wird und am Anfang
-        jedes Eintrags erscheint (im BibTeX-Quelltext).</li>
-
-        <li><strong>month<br /></strong> Der Monat, in dem ein Werk
-        veröffentlicht oder geschrieben wurde. Benutzen Sie am
-        besten die englischen Abkürzungen (jan, feb, mar, apr,
-        may, jun, jul, aug, sep, oct, nov, dec).</li>
-
-        <li><strong>note<br /></strong> Zusätzliche
-        Infromationen. Das erste Wort sollte mit einem
-        Großbuchstaben beginnen.</li>
-
-        <li><strong>number</strong><br />
-        Die Nummer einer Zeitschrift, eines technischen Reports
-        oder eines Bandes innerhalb einer Reihe (<tt>series</tt>).
-        Zeitschriften haben oft eine Band- und Heftzählung,
-        der Band entspricht dem <tt>volume</tt>-, das Heft dem
-        <tt>number</tt>-Eintrag.</li>
-
-        <li><strong>organization<br /></strong> Die Organisation,
-        die einen Konferenzband fördert.</li>
-
-        <li><strong>pages<br /></strong> Die Seitenzahl(en) oder
-        der Seitenzahlbereich, z.B. <tt>42-111</tt> oder
-        <tt>7,41,73-97</tt> or <tt>43+</tt> (das `<tt>+</tt>'
-        deutet auf folgende Seiten, die nicht einen einfachen
-        Bereich umfassen). Ein einfacher Bindestrich (wie in
-        <tt>7-33</tt>) wird in einen doppelten Bindestrich
-        (<tt>--</tt>) verwandelt, der in TeX den bis-Strich anzeigt
-        (also 7–33).</li>
-
-        <li><strong>publisher<br /></strong> Der Name des
-        Verlags.</li>
-
-        <li><strong>school<br /></strong> Der Name einer
-        Universität, an der eine Abschlussarbeit - z.B. eine
-        Dissertation (<tt>phdthesis</tt>) oder Magisterarbeit
-        (<tt>mastersthesis</tt>) - geschrieben wurde.</li>
-
-        <li><strong>series<br /></strong> Der Name einer Reihe, in
-        der ein Buch erschienen ist. Falls die Bücher einer
-        Reihe nummeriert sind, wird die entsprechende Nummer im
-        Feld <tt>number</tt> angegeben.</li>
-
-        <li><strong>title<br /></strong> Der Titel des Werkes. Die
-        Groß- und Kleinschreibung kann von den
-        Bibliographiestilen und der benutzten Sprache abhängig
-        sein (wobei sie mit deutschen Bibliographiestilen
-        beibehalten wird). Worte, die auch bei Verwendung
-        englischer Bibliographiestile groß geschrieben werden
-        sollen, müssen in geschweifte Klammern eingefasst
-        werden (z.B. <tt>A {German} title</tt>).</li>
-
-        <li><strong>type<br /></strong> Der Typ eines technischen
-        Reports, z.B. ``Research Note''. Bei <em>jurabib</em> wird
-        dieses Feld auch für den Typ einer Abschlussarbeit
-        verwendet.</li>
-
-        <li><strong>volume<br /></strong> Der Band (Jahrgang) einer
-        Zeitschrift oder der Band eines Buches in einem
-        mehrbändigen Werk.</li>
-
-        <li><strong>year<br /></strong> Das Jahr der
-        Veröffentlichung (oder bei einem
-        unveröffentlichten Werk das Jahr, in dem es
-        geschrieben wurde). Normalerweise sollte im
-        <tt>year</tt>-Feld nur eine vierstellige Zahl stehen, z.B.
-        <tt>1984</tt>. Die Standardstile können aber auch mit
-        <tt>year</tt>-Einträgen umgehen, deren letzte vier
-        Zeichen (ausgenommen Satzzeichen) Ziffern sind,
-        beispielsweise <tt>(um 1984)</tt>. Dieses Feld wird
-        für die meisten Eintragstypen benötigt.</li>
-    </ul>
-
-    <h2>Andere Felder</h2>
-
-    <p>Bibliographie-Stile für BibTeX
-    wurden von vielen Leuten entwickelt, und einige haben weitere
-    Felder erstellt. Es folgt eine kleine Auswahl.</p>
-
-    <p>Feldnamen, die mit einem Stern* versehen sind, werden nicht
-    direkt von JabRef unterstützt, können aber
-    eingebunden werden (siehe
-    <a href="CustomEntriesHelp.html">Eintragstypen anpassen</a>).</p>
-
-    <ul>
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        affiliation*</span><br /></strong> Die Zugehörigkeit
-        eines Autors.<br />
-        </li>
-
-        <li><strong>abstract<br /></strong> Die Zusammenfassung
-        eines Werks.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        contents*</span><br /></strong> Ein
-        Inhaltsverzeichnis.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        copyright*</span><br /></strong>
-        Copyright-Informationen.<br />
-        </li>
-
-        <li><strong>doi<br /></strong> Der <em>Digital Object
-        Identifier</em> ist eine permanente Kennung von
-        Dokumenten.<br />
-        </li>
-
-        <li><strong>eid<br /></strong> Der EID (<em>Electronic
-        identifier</em>) wird für elektronische Zeitschriften
-        benutzt, die auch im Druck erscheinen. Mit dieser Nummer,
-        die die Seitenzahlen ersetzt, lässt sich der Artikel
-        in der gedruckten Ausgabe finden. Der EID wird manchmal
-        auch <em>citation number</em> genannt.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        ISBN*</span><br /></strong> Die Internationale
-        Standardbuchnummer.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        ISSN*</span><br /></strong> Die Internationale
-        Standardseriennummer (für Zeitschriften).<br />
-        </li>
-
-        <li><strong>keywords<br /></strong> Stichworte, können
-        in JabRef gut zum Gruppieren verwendet werden.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        language*</span><br /></strong> Die Sprache des
-        Werks.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        location*</span><br /></strong> Der Ort, der mit einem Werk
-        in Verbindung steht, z.B. die Stadt, in der eine Konferenz
-        stattgefunden hat.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        LCCN*</span><br /></strong> Die <em>Library of Congress
-        Call Number</em>. Manchmal heißt das Feld auch
-        <tt>lib-congress</tt>.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        mrnumber*</span><br /></strong> Die <i>Mathematical
-        Reviews</i>-Nummer.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        price*</span><br /></strong> Der Preis.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        size*</span><br /></strong> Die physische Größe
-        eines Dokuments.<br />
-        </li>
-
-        <li><strong>url<br /></strong> Der <em>Uniform Resource
-        Locator</em> (URL, "einheitlicher Quellenanzeiger"), der
-        auf eine Webseite im Internet verweist.<br />
-        </li>
-
-        <li><strong>urldate<br /></strong> Das Datum, an dem eine
-        Webseite zuletzt besucht wurde.</li>
-    </ul><br />
-     <br />
-     <br />
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Über <em>BibTeX</em></h1>
+
+    <p>JabRef hilft Ihnen bei der
+    Arbeit mit Ihren <em>BibTeX</em>-Dateien, aber es müssen
+    dennoch Regeln beachtet werden, wenn Sie Ihre Einträge
+    bearbeiten. Nur so kann sichergestellt werden, dass
+    <em>BibTeX</em> Ihre Datei richtig verarbeiten kann.</p>
+
+    <h2><em>BibTeX</em> Felder</h2>
+
+    <p>Es gibt viele unterschiedliche
+    Felder in <em>BibTeX</em> und einige zusätzliche Felder,
+    die Sie in JabRef einsetzen können.</p>
+
+    <p>Grundsätzlich können Sie LaTeX-Befehle in Feldern,
+    die Text beinhalten, einsetzen. <em>BibTeX</em> wird Ihr
+    Literaturverzeichnis automatisch formatieren und je nach
+    <em>BibTeX</em> style (Stildatei .bst) Großbuchstaben
+    verkleinern. Um sicherzustellen, dass einzelne Buchstaben
+    groß bleiben, müssen Sie sie in Klammern
+    einschließen, wie im Wort {B}elgien. <em>(Anm. d.
+    Übers.: Die meisten deutschen BibTeX-Stile behalten
+    die Großbuchstaben ohnehin bei.)</em></p>
+
+    <p>Hinweise zu einigen Feldtypen:</p>
+
+    <ul>
+        <li>
+        <strong style="font-style: italic;">Bibtexkey<br /></strong>Eine
+        eindeutige Bezeichnung, um sich in LaTeX-Dokumenten auf den
+        Eintrag beziehen zu können. Beachten Sie, dass der
+        Bibtexkey genau mit dem Verweis im LaTeX-Dokument
+        übereinstimmen muss (auch die
+        Groß-/Kleinschreibung).<br />
+        </li>
+
+        <li><strong>address<br /></strong> Der Ort des
+        <em>Verlags</em> oder einer anderen Institution.</li>
+
+        <li><strong>annote<br /></strong> Eine Anmerkung. Dieses
+        Feld wird von den Standard-Bibliographiestilen nicht
+        verwendet, kann aber bei einigen Stilen benutzt werden, um
+        eine kommentierte Literaturliste zu erstellen.</li>
+
+        <li>
+            <strong>author<br /></strong> Dieses Feld sollte alle
+            Autoren Ihres Eintrags enthalten. Die Namen werden
+            durch das Wort <tt>and</tt> getrennt, auch wenn es mehr
+            als zwei Autoren gibt. Jeder Name kann in zwei
+            gleichwertigen Formen notiert werden:
+
+            <ul>
+                <li>Donald E. Knuth <em>oder</em> Knuth, Donald
+                E.</li>
+
+                <li>Eddie van Halen <em>oder</em> van Halen,
+                Eddie</li>
+            </ul>Die zweite Form sollte für Autoren mit zwei
+            oder mehr Nachnamen benutzt werden, um zwischen dem
+            mittleren und dem Nachnamen zu unterscheiden.<br />
+        </li>
+
+        <li><strong>booktitle<br /></strong> Der Titel eines
+        Buches, aus dem ein Teil zitiert wird. Falls Sie ein Buch
+        zitieren wollen, nehmen Sie für den Titel stattdessen
+        das <tt>title</tt>-Feld.</li>
+
+        <li><strong>chapter<br /></strong> Eine Kapitelnummer (oder
+        Abschnittsnummer oder was-auch-immer-Nummer).</li>
+
+        <li><strong>crossref<br /></strong> Der <tt>key</tt> eines
+        Eintrags, auf den ein Querverweis gesetzt wird. Damit
+        lassen sich beispielsweise die Daten eines Sammelbandes in
+        einem Eintrag für einen Aufsatztitel wiederverwenden,
+        ohne sie bei jedem Aufsatztitel explizit einzutragen. Die
+        Funktionalität von <tt>crossref</tt> ist jedoch nicht
+        in jedem Fall praktikabel.</li>
+
+        <li><strong>edition<br /></strong> Die Auflage eines Buch,
+        z.B. ,,Zweite``. Die Ordnungszahl sollte mit einem
+        Großbuchstaben beginnen; sie wird von den
+        Standardstilen gegebenenfalls in Kleinbuchstaben
+        umgewandelt. Manche Stile verlangen hier eine Ziffer.</li>
+
+        <li><strong>editor<br /></strong> Dieses Feld ist analog zu
+        dem <em>author</em>-Feld. Falls zusätzlich ein
+        <tt>author</tt>-Feld angegeben wird, bezeichnet das
+        <tt>editor</tt>-Feld den Herausgeber des Buches oder des
+        Sammelbandes, in dem die referenzierte Literatur erschienen
+        ist.</li>
+
+        <li><strong>howpublished<br /></strong> Die Art, wie ein
+        Werk veröffentlicht wurde (meist außerhalb eines
+        Verlags). Das erste Wort sollte mit einem
+        Großbuchstaben beginnen.</li>
+
+        <li><strong>institution<br /></strong> Die fördernde
+        Institutions eines technischen Reports.</li>
+
+        <li><strong>journal<br /></strong> Ein Zeitschriftenname.
+        Mit Hilfe von "Strings" können Zeitschriftennamen
+        abgekürzt werden. Zum Erstellen eines solchen Strings
+        können Sie den
+        <a href="StringEditorHelp.html">String-Editor</a> benutzen
+        oder die Funktionalität zur
+        <a href="JournalAbbreviations.html">Abkürzung von
+        Zeitschriftentiteln</a> verwenden.</li>
+
+        <li><strong>key<br /></strong> Dieses Feld wird zur
+        Sortierung, zur Erstellung von Labels (falls kein
+        <tt>author</tt> vorhanden ist) und für Querverweise
+        (<tt>crossref</tt>) verwendet. Verwechseln Sie dieses Feld
+        nicht mit dem <tt>Bibtexkey</tt>, der für die
+        <code>\cite</code>-Kommandos gebraucht wird und am Anfang
+        jedes Eintrags erscheint (im BibTeX-Quelltext).</li>
+
+        <li><strong>month<br /></strong> Der Monat, in dem ein Werk
+        veröffentlicht oder geschrieben wurde. Benutzen Sie am
+        besten die englischen Abkürzungen (jan, feb, mar, apr,
+        may, jun, jul, aug, sep, oct, nov, dec).</li>
+
+        <li><strong>note<br /></strong> Zusätzliche
+        Infromationen. Das erste Wort sollte mit einem
+        Großbuchstaben beginnen.</li>
+
+        <li><strong>number</strong><br />
+        Die Nummer einer Zeitschrift, eines technischen Reports
+        oder eines Bandes innerhalb einer Reihe (<tt>series</tt>).
+        Zeitschriften haben oft eine Band- und Heftzählung,
+        der Band entspricht dem <tt>volume</tt>-, das Heft dem
+        <tt>number</tt>-Eintrag.</li>
+
+        <li><strong>organization<br /></strong> Die Organisation,
+        die einen Konferenzband fördert.</li>
+
+        <li><strong>pages<br /></strong> Die Seitenzahl(en) oder
+        der Seitenzahlbereich, z.B. <tt>42-111</tt> oder
+        <tt>7,41,73-97</tt> or <tt>43+</tt> (das `<tt>+</tt>'
+        deutet auf folgende Seiten, die nicht einen einfachen
+        Bereich umfassen). Ein einfacher Bindestrich (wie in
+        <tt>7-33</tt>) wird in einen doppelten Bindestrich
+        (<tt>--</tt>) verwandelt, der in TeX den bis-Strich anzeigt
+        (also 7–33).</li>
+
+        <li><strong>publisher<br /></strong> Der Name des
+        Verlags.</li>
+
+        <li><strong>school<br /></strong> Der Name einer
+        Universität, an der eine Abschlussarbeit - z.B. eine
+        Dissertation (<tt>phdthesis</tt>) oder Magisterarbeit
+        (<tt>mastersthesis</tt>) - geschrieben wurde.</li>
+
+        <li><strong>series<br /></strong> Der Name einer Reihe, in
+        der ein Buch erschienen ist. Falls die Bücher einer
+        Reihe nummeriert sind, wird die entsprechende Nummer im
+        Feld <tt>number</tt> angegeben.</li>
+
+        <li><strong>title<br /></strong> Der Titel des Werkes. Die
+        Groß- und Kleinschreibung kann von den
+        Bibliographiestilen und der benutzten Sprache abhängig
+        sein (wobei sie mit deutschen Bibliographiestilen
+        beibehalten wird). Worte, die auch bei Verwendung
+        englischer Bibliographiestile groß geschrieben werden
+        sollen, müssen in geschweifte Klammern eingefasst
+        werden (z.B. <tt>A {German} title</tt>).</li>
+
+        <li><strong>type<br /></strong> Der Typ eines technischen
+        Reports, z.B. ``Research Note''. Bei <em>jurabib</em> wird
+        dieses Feld auch für den Typ einer Abschlussarbeit
+        verwendet.</li>
+
+        <li><strong>volume<br /></strong> Der Band (Jahrgang) einer
+        Zeitschrift oder der Band eines Buches in einem
+        mehrbändigen Werk.</li>
+
+        <li><strong>year<br /></strong> Das Jahr der
+        Veröffentlichung (oder bei einem
+        unveröffentlichten Werk das Jahr, in dem es
+        geschrieben wurde). Normalerweise sollte im
+        <tt>year</tt>-Feld nur eine vierstellige Zahl stehen, z.B.
+        <tt>1984</tt>. Die Standardstile können aber auch mit
+        <tt>year</tt>-Einträgen umgehen, deren letzte vier
+        Zeichen (ausgenommen Satzzeichen) Ziffern sind,
+        beispielsweise <tt>(um 1984)</tt>. Dieses Feld wird
+        für die meisten Eintragstypen benötigt.</li>
+    </ul>
+
+    <h2>Andere Felder</h2>
+
+    <p>Bibliographie-Stile für BibTeX
+    wurden von vielen Leuten entwickelt, und einige haben weitere
+    Felder erstellt. Es folgt eine kleine Auswahl.</p>
+
+    <p>Feldnamen, die mit einem Stern* versehen sind, werden nicht
+    direkt von JabRef unterstützt, können aber
+    eingebunden werden (siehe
+    <a href="CustomEntriesHelp.html">Eintragstypen anpassen</a>).</p>
+
+    <ul>
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        affiliation*</span><br /></strong> Die Zugehörigkeit
+        eines Autors.<br />
+        </li>
+
+        <li><strong>abstract<br /></strong> Die Zusammenfassung
+        eines Werks.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        contents*</span><br /></strong> Ein
+        Inhaltsverzeichnis.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        copyright*</span><br /></strong>
+        Copyright-Informationen.<br />
+        </li>
+
+        <li><strong>doi<br /></strong> Der <em>Digital Object
+        Identifier</em> ist eine permanente Kennung von
+        Dokumenten.<br />
+        </li>
+
+        <li><strong>eid<br /></strong> Der EID (<em>Electronic
+        identifier</em>) wird für elektronische Zeitschriften
+        benutzt, die auch im Druck erscheinen. Mit dieser Nummer,
+        die die Seitenzahlen ersetzt, lässt sich der Artikel
+        in der gedruckten Ausgabe finden. Der EID wird manchmal
+        auch <em>citation number</em> genannt.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        ISBN*</span><br /></strong> Die Internationale
+        Standardbuchnummer.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        ISSN*</span><br /></strong> Die Internationale
+        Standardseriennummer (für Zeitschriften).<br />
+        </li>
+
+        <li><strong>keywords<br /></strong> Stichworte, können
+        in JabRef gut zum Gruppieren verwendet werden.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        language*</span><br /></strong> Die Sprache des
+        Werks.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        location*</span><br /></strong> Der Ort, der mit einem Werk
+        in Verbindung steht, z.B. die Stadt, in der eine Konferenz
+        stattgefunden hat.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        LCCN*</span><br /></strong> Die <em>Library of Congress
+        Call Number</em>. Manchmal heißt das Feld auch
+        <tt>lib-congress</tt>.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        mrnumber*</span><br /></strong> Die <i>Mathematical
+        Reviews</i>-Nummer.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        price*</span><br /></strong> Der Preis.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        size*</span><br /></strong> Die physische Größe
+        eines Dokuments.<br />
+        </li>
+
+        <li><strong>url<br /></strong> Der <em>Uniform Resource
+        Locator</em> (URL, "einheitlicher Quellenanzeiger"), der
+        auf eine Webseite im Internet verweist.<br />
+        </li>
+
+        <li><strong>urldate<br /></strong> Das Datum, an dem eine
+        Webseite zuletzt besucht wurde.</li>
+    </ul><br />
+     <br />
+     <br />
+</body>
+</html>
diff --git a/src/help/de/CiteSeerHelp.html b/src/help/de/CiteSeerHelp.html
index 440f4bd..8a3864e 100644
--- a/src/help/de/CiteSeerHelp.html
+++ b/src/help/de/CiteSeerHelp.html
@@ -1,67 +1,67 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>CiteSeer-Import</h1>
-
-    <p>CiteSeer ist eine digitale Bibliothek
-    und Suchmaschine für wissenschaftliche Literatur,
-    vornehmlich zu den Bereichen Computer und Informatik.</p>
-
-    <h2>Importieren eines Eintrags von CiteSeer</h2>
-
-    <p>JabRef kann
-    Informationen über eine bestimmte Literaturangabe aus der
-    CiteSeer-Datenbank herunterladen. Um diesen Vorgang zu starten,
-    fügen Sie Ihrer Datei einen neuen Eintrag hinzu und
-    belegen das Feld <em>citeseerurl</em> mit einem Link zur
-    entsprechenden Inhaltsseite auf CiteSeer. Das Feld
-    <em>citeseerurl</em> muss in einem der folgenden Formate
-    eingegeben werden:</p>
-
-    <p>http://citeseer.ist.psu.edu/DDDDDD[.html], oder<br />
-     oai:CiteSeerPSU:DDDDDD, oder<br />
-     DDDDDD</p>
-
-    <p>wobei DDDDDD eine Ziffernfolge darstellt. Um diese
-    Ziffernfolge (DDDDDD) für einen CiteSeer-Eintrag zu
-    finden, gehen Sie auf die Dokumentseite der Literaturangabe des
-    Formats http://citeseer.ist.psu.edu/<i>nameYearTitle</i>.html
-    und klicken den (Update)-Link für diese Literaturangabe.
-    Die URL für den Update-Link beinhaltet die numerische ID
-    für diese Literaturangabe.</p>
-
-    <p>Sobald Sie das Feld <em>citeseerurl</em> belegt haben,
-    können Sie die CiteSeer-Felder herunterladen, indem Sie
-    <b>BibTeX -> Felder von CiteSeer importieren</b>
-    auswählen. Achten Sie darauf, dass Sie die Zeile(n)
-    ausgewählt haben, die Sie aktualisieren wollen.</p>
-
-    <h2>Eine Datei mit zitierenden Literaturangaben
-    erzeugen</h2>
-
-    <p>Mit einem Satz von Literaturangaben können
-    Sie eine Liste der Dokumente erzeugen, die die einzelnen
-    Literaturangaben ihrerseits zitieren. Dazu muss jede
-    Literaturangabe der entsprechenden Datenbank-Datei ein
-    ausgefülltes citeseerurl-Feld besitzen, dessen Inhalt dem
-    in <b>Importieren eines Eintrags von CiteSeer</b> beschriebenen
-    Format entspricht. Sie können diese Funktion nutzen, indem
-    Sie <b>Zitierende Literatur von CiteSeer abrufen</b>
-    auswählen.</p>
-
-    <h2>Benutzung eines Proxy-Servers</h2>
-
-    <p>Wenn Sie einen
-    HTTP-Proxy-Server benutzen müssen, übergeben Sie den
-    Servernamen und die Portnummer an Java.</p>
-
-    <p><code>java -Dhttp.proxyHost="hostname"
-    -Dhttp.proxyPort="portnumber"</code></p>
-
-    <p>Diese Umgebungseinstellungen sind in der <a href="http://java.sun.com/j2se/1.4.2/docs/guide/net/properties.html">Sun J2SE Dokumentation</a> beschrieben.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>CiteSeer-Import</h1>
+
+    <p>CiteSeer ist eine digitale Bibliothek
+    und Suchmaschine für wissenschaftliche Literatur,
+    vornehmlich zu den Bereichen Computer und Informatik.</p>
+
+    <h2>Importieren eines Eintrags von CiteSeer</h2>
+
+    <p>JabRef kann
+    Informationen über eine bestimmte Literaturangabe aus der
+    CiteSeer-Datenbank herunterladen. Um diesen Vorgang zu starten,
+    fügen Sie Ihrer Datei einen neuen Eintrag hinzu und
+    belegen das Feld <em>citeseerurl</em> mit einem Link zur
+    entsprechenden Inhaltsseite auf CiteSeer. Das Feld
+    <em>citeseerurl</em> muss in einem der folgenden Formate
+    eingegeben werden:</p>
+
+    <p>http://citeseer.ist.psu.edu/DDDDDD[.html], oder<br />
+     oai:CiteSeerPSU:DDDDDD, oder<br />
+     DDDDDD</p>
+
+    <p>wobei DDDDDD eine Ziffernfolge darstellt. Um diese
+    Ziffernfolge (DDDDDD) für einen CiteSeer-Eintrag zu
+    finden, gehen Sie auf die Dokumentseite der Literaturangabe des
+    Formats http://citeseer.ist.psu.edu/<i>nameYearTitle</i>.html
+    und klicken den (Update)-Link für diese Literaturangabe.
+    Die URL für den Update-Link beinhaltet die numerische ID
+    für diese Literaturangabe.</p>
+
+    <p>Sobald Sie das Feld <em>citeseerurl</em> belegt haben,
+    können Sie die CiteSeer-Felder herunterladen, indem Sie
+    <b>BibTeX -> Felder von CiteSeer importieren</b>
+    auswählen. Achten Sie darauf, dass Sie die Zeile(n)
+    ausgewählt haben, die Sie aktualisieren wollen.</p>
+
+    <h2>Eine Datei mit zitierenden Literaturangaben
+    erzeugen</h2>
+
+    <p>Mit einem Satz von Literaturangaben können
+    Sie eine Liste der Dokumente erzeugen, die die einzelnen
+    Literaturangaben ihrerseits zitieren. Dazu muss jede
+    Literaturangabe der entsprechenden Datenbank-Datei ein
+    ausgefülltes citeseerurl-Feld besitzen, dessen Inhalt dem
+    in <b>Importieren eines Eintrags von CiteSeer</b> beschriebenen
+    Format entspricht. Sie können diese Funktion nutzen, indem
+    Sie <b>Zitierende Literatur von CiteSeer abrufen</b>
+    auswählen.</p>
+
+    <h2>Benutzung eines Proxy-Servers</h2>
+
+    <p>Wenn Sie einen
+    HTTP-Proxy-Server benutzen müssen, übergeben Sie den
+    Servernamen und die Portnummer an Java.</p>
+
+    <p><code>java -Dhttp.proxyHost="hostname"
+    -Dhttp.proxyPort="portnumber"</code></p>
+
+    <p>Diese Umgebungseinstellungen sind in der <a href="http://java.sun.com/j2se/1.4.2/docs/guide/net/properties.html">Sun J2SE Dokumentation</a> beschrieben.</p>
+
+</body>
+</html>
diff --git a/src/help/de/CommandLine.html b/src/help/de/CommandLine.html
index 58f669d..53b193b 100644
--- a/src/help/de/CommandLine.html
+++ b/src/help/de/CommandLine.html
@@ -1,154 +1,154 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Kommandozeilen-Optionen</h1>
-
-    <p>Obwohl JabRef in erster Linie
-    ein Programm mit grafischer Benutzeroberfläche ist, bietet
-    es einige nützliche Optionen für die Kommandozeile
-    und kann sogar Dateikonvertierungen durchführen, ohne die
-    grafische Benutzeroberfläche zu öffnen.</p>
-
-    <p>Sie können eine oder mehrere BibTeX-Dateien laden,
-    indem Sie auf der Kommandozeile die entsprechenden Dateinamen
-    auflisten. Achten Sie darauf, alle gewünschten Optionen
-    anzugeben, bevor Sie die Dateinamen anfügen.
-    Außerdem müssen Sie sich vergewissern, dass der
-    erste Dateiname nicht als Argument einer Option missverstanden
-    werden kann - falls eine Bool'sche Option wie
-    <code>-n</code> oder <code>-l</code> direkt vor einem
-    Dateinamen steht, müssen Sie also "true" als Argument
-    angeben. Das Beispielkommando:</p>
-
-    <p><code>jabref -o filetoexport.xml,docbook -n true
-    original.bib</code></p>
-
-    <p>lädt die Datei <code>original.bib</code>, exportiert
-    sie in das Docbook-Format, speichert sie unter dem Namen
-    <code>filetoexport.xml</code> und unterdrückt das Laden
-    der grafischen Oberfläche. Das Word <em>true</em>
-    verhindert, dass der Dateiname als Argument der Option
-    <code>-n</code> interpretiert wird.</p>
-
-    <h2>Hilfe: -h</h2>
-
-    <p>Diese Option veranlasst JabRef, eine
-    Zusammenfassung der Kommandozeilen-Optionen anzuzeigen und das
-    Programm unmittelbar darauf zu schließen.</p>
-
-    <h2>Kein GUI-Modus: -n</h2>
-
-    <p>Diese Option unterdrückt sowohl
-    das JabRef-Fenster als auch den Eröffnungsbildschirm, der
-    normalerweise beim Programmstart angezeigt wird. Das Programm
-    wird beendet, sobald die Kommandozeilen-Optionen abgearbeitet
-    wurden.</p>
-
-    <p>Diese Option ist nützlich, um Dateikonvertierungen von
-    der Kommandozeile oder mit Hilfe eines Scripts
-    durchzuführen.</p>
-
-    <h2>Sitzung laden: -l</h2>
-
-    <p>Diese Option veranlasst JabRef, eine
-    gespeicherte Sitzung zu laden, sofern eine vorhanden ist, bevor
-    sich das Hauptfenster öffnet.</p>
-
-    <h2>Datei importieren: -i Dateiname[,Importformat]</h2>
-
-    <p>Bei dieser Option importiert oder lädt JabRef eine bestimmte
-    Datei. Wenn nur ein Dateiname angegeben wird oder ein Komma und
-    ein *-Zeichen hinter dem Dateinamen stehen, versucht JabRef,
-    das Dateiformat automatisch zu erkennen. Das sollte bei allen
-    BibTeX-Dateien ebenso funktionieren wie bei Dateien, die in
-    einem der von JabRef unterstützten Importformate
-    vorliegen. Wenn dem Dateinamen ein Komma und ein Importformat
-    folgen, wird der angegebene Importfilter benutzt. Mit der
-    Option <code>-h</code> können Sie sich eine Liste der
-    verfügbaren Importformate anzeigen lassen.</p>
-
-    <p>Wenn Sie zusätzlich eine Export-Option angeben, wird
-    der Import immer zuerst ausgeführt, bevor die importierte
-    oder geladene Datei an den Exportfilter übergeben wird.
-    Falls die grafische Oberfläche nicht mit der Option
-    <code>-n</code> unterdrückt wird, werden alle geladenen
-    oder importierten Dateien im Hauptfenster von JabRef
-    angezeigt.</p>
-
-    <p>Die Option <code>-i</code> kann nur einmal angegeben werden
-    und nimmt als Argument maximal eine Datei.</p>
-
-    <h2>Datei exportieren: -o Dateiname[,Exportformat]</h2>
-
-    <p>Diese Option veranlasst JabRef, eine Datei zu speichern oder zu
-    exportieren, die von derselben Kommandozeile geladen oder
-    importiert wurde. Wenn eine Datei mit der Option
-    <code>-i</code> importiert wurde, wird diese Datei exportiert.
-    Ansonsten wird die Datei exportiert, die
-    <em>zuletzt</em> - ohne die Option <code>-i</code> -
-    angegeben (und erfolgreich geladen) wurde.</p>
-
-    <p>Wird nur ein Dateiname angegeben, so wird diese Datei im
-    BibTeX-Format gespeichert. Wenn dem Dateinamen ein Komma und
-    ein Exportformat folgen, wird der angegebene Exportfilter
-    benutzt. Auf diese Weise wird auch ein benutzerdefinierter
-    Exportfilter angewendet; wenn der Name sowohl auf einen
-    Standard-Exportfilter, als auch auf einen benutzerdefinierten
-    Exportfilter zutrifft, wird der benutzerdefinierte
-    verwendet.</p>
-
-    <p>Mit der Option <code>-h</code> können Sie sich eine
-    Liste der verfügbaren Exportformate anzeigen lassen.</p>
-
-    <p>Falls die Option <code>-n</code> nicht aufgerufen wurde,
-    wird jeder Exportvorgang durchgeführt, bevor das
-    JabRef-Fenster geöffnet wird. Dort werden dann die
-    importierten Dateien angezeigt.</p>
-
-    <p>Die Option <code>-o</code> kann nur einmal angegeben werden
-    und nimmt als Argument maximal eine Datei.</p>
-
-    <h2>Einstellungen exportieren: -x Dateiname</h2>
-
-    <p>Mit dieser Option können Sie JabRef veranlassen, alle
-    Benutzer-Einstellungen in eine XML-Datei zu speichern. Nach dem
-    Export startet JabRef normal.</p>
-
-    <h2>Einstellungen importieren: -p Dateiname</h2>
-
-    <p>Mit dieser Option importiert JabRef Benutzer-Einstellungen, die mit der
-    Option <code>-x</code> exportiert wurden. Nach dem Import
-    startet JabRef normal.</p>
-
-    <h2>Nur benutzte Einträge exportieren: -a
-    Dateiname[.aux],neueBibDatei[.bib]</h2>
-
-    <p>Manchmal ist es
-    nützlich, eine BibTeX-Datei zu haben, die nur die
-    benutzten Einträge enthält. Eine Liste dieser
-    benutzten Einträge findet sich in einer .aux-Datei (sobald
-    Sie LaTeX aufgerufen haben). JabRef kann diese Datei
-    analysieren, um eine neue BibTeX-Datei zu erstellen, die nur
-    die bekannten und benutzten Einträge enthält. Das
-    bedeutet, dass ein Eintrag, der in der Standard-BibTeX-Datei
-    nicht definiert ist, auch nicht in die neue Datei geschrieben
-    werden kann.</p>
-
-    <h2>Aus dem Internet abrufen: --fetch==Name des Fetchers:Suchausdruck</h2>
-
-    <p>Die <em>Fetcher</em>, also die direkte Suche in Online-Datenbanken,
-	die Sie im Menü <b>Internet</b> finden, können auch von der Kommandozeile
-    aus gestartet werden. Nutzen Sie dazu die Option <code>--fetch</code> und geben
-    sowohl den Namen des Fetchers (z.B. 'ieee', 'medline' oder 'jstor')
-    als auch den Suchausdruck oder die ID des gesuchten Mediums an. Beachten
-    Sie, dass einige Fetcher eine graphische Oberfläche (GUI) anzeigen,
-    falls Sie eine Rückmeldung von Ihnen brauchen. Um eine Übersicht der
-    verfügbaren Fetcher zu erhalten, geben Sie <code>--fetch</code> ohne
-    Parameter ein.</p>
-	
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Kommandozeilen-Optionen</h1>
+
+    <p>Obwohl JabRef in erster Linie
+    ein Programm mit grafischer Benutzeroberfläche ist, bietet
+    es einige nützliche Optionen für die Kommandozeile
+    und kann sogar Dateikonvertierungen durchführen, ohne die
+    grafische Benutzeroberfläche zu öffnen.</p>
+
+    <p>Sie können eine oder mehrere BibTeX-Dateien laden,
+    indem Sie auf der Kommandozeile die entsprechenden Dateinamen
+    auflisten. Achten Sie darauf, alle gewünschten Optionen
+    anzugeben, bevor Sie die Dateinamen anfügen.
+    Außerdem müssen Sie sich vergewissern, dass der
+    erste Dateiname nicht als Argument einer Option missverstanden
+    werden kann - falls eine Bool'sche Option wie
+    <code>-n</code> oder <code>-l</code> direkt vor einem
+    Dateinamen steht, müssen Sie also "true" als Argument
+    angeben. Das Beispielkommando:</p>
+
+    <p><code>jabref -o filetoexport.xml,docbook -n true
+    original.bib</code></p>
+
+    <p>lädt die Datei <code>original.bib</code>, exportiert
+    sie in das Docbook-Format, speichert sie unter dem Namen
+    <code>filetoexport.xml</code> und unterdrückt das Laden
+    der grafischen Oberfläche. Das Word <em>true</em>
+    verhindert, dass der Dateiname als Argument der Option
+    <code>-n</code> interpretiert wird.</p>
+
+    <h2>Hilfe: -h</h2>
+
+    <p>Diese Option veranlasst JabRef, eine
+    Zusammenfassung der Kommandozeilen-Optionen anzuzeigen und das
+    Programm unmittelbar darauf zu schließen.</p>
+
+    <h2>Kein GUI-Modus: -n</h2>
+
+    <p>Diese Option unterdrückt sowohl
+    das JabRef-Fenster als auch den Eröffnungsbildschirm, der
+    normalerweise beim Programmstart angezeigt wird. Das Programm
+    wird beendet, sobald die Kommandozeilen-Optionen abgearbeitet
+    wurden.</p>
+
+    <p>Diese Option ist nützlich, um Dateikonvertierungen von
+    der Kommandozeile oder mit Hilfe eines Scripts
+    durchzuführen.</p>
+
+    <h2>Sitzung laden: -l</h2>
+
+    <p>Diese Option veranlasst JabRef, eine
+    gespeicherte Sitzung zu laden, sofern eine vorhanden ist, bevor
+    sich das Hauptfenster öffnet.</p>
+
+    <h2>Datei importieren: -i Dateiname[,Importformat]</h2>
+
+    <p>Bei dieser Option importiert oder lädt JabRef eine bestimmte
+    Datei. Wenn nur ein Dateiname angegeben wird oder ein Komma und
+    ein *-Zeichen hinter dem Dateinamen stehen, versucht JabRef,
+    das Dateiformat automatisch zu erkennen. Das sollte bei allen
+    BibTeX-Dateien ebenso funktionieren wie bei Dateien, die in
+    einem der von JabRef unterstützten Importformate
+    vorliegen. Wenn dem Dateinamen ein Komma und ein Importformat
+    folgen, wird der angegebene Importfilter benutzt. Mit der
+    Option <code>-h</code> können Sie sich eine Liste der
+    verfügbaren Importformate anzeigen lassen.</p>
+
+    <p>Wenn Sie zusätzlich eine Export-Option angeben, wird
+    der Import immer zuerst ausgeführt, bevor die importierte
+    oder geladene Datei an den Exportfilter übergeben wird.
+    Falls die grafische Oberfläche nicht mit der Option
+    <code>-n</code> unterdrückt wird, werden alle geladenen
+    oder importierten Dateien im Hauptfenster von JabRef
+    angezeigt.</p>
+
+    <p>Die Option <code>-i</code> kann nur einmal angegeben werden
+    und nimmt als Argument maximal eine Datei.</p>
+
+    <h2>Datei exportieren: -o Dateiname[,Exportformat]</h2>
+
+    <p>Diese Option veranlasst JabRef, eine Datei zu speichern oder zu
+    exportieren, die von derselben Kommandozeile geladen oder
+    importiert wurde. Wenn eine Datei mit der Option
+    <code>-i</code> importiert wurde, wird diese Datei exportiert.
+    Ansonsten wird die Datei exportiert, die
+    <em>zuletzt</em> - ohne die Option <code>-i</code> -
+    angegeben (und erfolgreich geladen) wurde.</p>
+
+    <p>Wird nur ein Dateiname angegeben, so wird diese Datei im
+    BibTeX-Format gespeichert. Wenn dem Dateinamen ein Komma und
+    ein Exportformat folgen, wird der angegebene Exportfilter
+    benutzt. Auf diese Weise wird auch ein benutzerdefinierter
+    Exportfilter angewendet; wenn der Name sowohl auf einen
+    Standard-Exportfilter, als auch auf einen benutzerdefinierten
+    Exportfilter zutrifft, wird der benutzerdefinierte
+    verwendet.</p>
+
+    <p>Mit der Option <code>-h</code> können Sie sich eine
+    Liste der verfügbaren Exportformate anzeigen lassen.</p>
+
+    <p>Falls die Option <code>-n</code> nicht aufgerufen wurde,
+    wird jeder Exportvorgang durchgeführt, bevor das
+    JabRef-Fenster geöffnet wird. Dort werden dann die
+    importierten Dateien angezeigt.</p>
+
+    <p>Die Option <code>-o</code> kann nur einmal angegeben werden
+    und nimmt als Argument maximal eine Datei.</p>
+
+    <h2>Einstellungen exportieren: -x Dateiname</h2>
+
+    <p>Mit dieser Option können Sie JabRef veranlassen, alle
+    Benutzer-Einstellungen in eine XML-Datei zu speichern. Nach dem
+    Export startet JabRef normal.</p>
+
+    <h2>Einstellungen importieren: -p Dateiname</h2>
+
+    <p>Mit dieser Option importiert JabRef Benutzer-Einstellungen, die mit der
+    Option <code>-x</code> exportiert wurden. Nach dem Import
+    startet JabRef normal.</p>
+
+    <h2>Nur benutzte Einträge exportieren: -a
+    Dateiname[.aux],neueBibDatei[.bib]</h2>
+
+    <p>Manchmal ist es
+    nützlich, eine BibTeX-Datei zu haben, die nur die
+    benutzten Einträge enthält. Eine Liste dieser
+    benutzten Einträge findet sich in einer .aux-Datei (sobald
+    Sie LaTeX aufgerufen haben). JabRef kann diese Datei
+    analysieren, um eine neue BibTeX-Datei zu erstellen, die nur
+    die bekannten und benutzten Einträge enthält. Das
+    bedeutet, dass ein Eintrag, der in der Standard-BibTeX-Datei
+    nicht definiert ist, auch nicht in die neue Datei geschrieben
+    werden kann.</p>
+
+    <h2>Aus dem Internet abrufen: --fetch==Name des Fetchers:Suchausdruck</h2>
+
+    <p>Die <em>Fetcher</em>, also die direkte Suche in Online-Datenbanken,
+	die Sie im Menü <b>Internet</b> finden, können auch von der Kommandozeile
+    aus gestartet werden. Nutzen Sie dazu die Option <code>--fetch</code> und geben
+    sowohl den Namen des Fetchers (z.B. 'ieee', 'medline' oder 'jstor')
+    als auch den Suchausdruck oder die ID des gesuchten Mediums an. Beachten
+    Sie, dass einige Fetcher eine graphische Oberfläche (GUI) anzeigen,
+    falls Sie eine Rückmeldung von Ihnen brauchen. Um eine Übersicht der
+    verfügbaren Fetcher zu erhalten, geben Sie <code>--fetch</code> ohne
+    Parameter ein.</p>
+	
+
+</body>
+</html>
diff --git a/src/help/de/ContentSelectorHelp.html b/src/help/de/ContentSelectorHelp.html
index aca30da..017976e 100644
--- a/src/help/de/ContentSelectorHelp.html
+++ b/src/help/de/ContentSelectorHelp.html
@@ -1,34 +1,34 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Wortauswahl verwalten</h1>
-
-    <p>Diese Funktion ermöglicht
-    es, eine Auswahl von oft benutzten Wörtern oder Phrasen zu
-    speichern. In der Standardeinstellung ist sie für die
-    Felder <em>Journal</em>, <em>Keywords</em> und
-    <em>Publisher</em> aktiviert, aber Sie können die Funktion
-    auch in anderen Feldern verwenden, indem Sie diese Felder im
-    oberen Teil des Dialogs <em>Extras -> Wortauswahl
-    verwalten</em> hinzufügen.</p>
-
-    <p>Die Wortauswahl gilt nur für die jeweilige Datei und
-    wird daher zusammen mit den Literaturangaben in der .bib-Datei
-    gespeichert.</p>
-
-    <p>Jedes Feld mit Wortauswahl erhält im Eintrags-Editor
-    einen gesonderten Bereich mit einer Auswahlliste und der
-    Schaltfläche <em>Verwalten</em>. Wenn Sie die Auswahlliste
-    mit der Maus anklicken, erscheint eine Liste der für
-    dieses Feld verfügbaren Wörter. Sobald Sie auf das
-    gewünschte Wort klicken, wird es in das entsprechende Feld
-    geschrieben.</p>
-
-    <p>Um ein neues Wort hinzuzufügen, schreiben Sie es
-    einfach in das Auswahlfeld und drücken ENTER. Im Dialog
-    <em>Verwalten</em> können Sie hinzugefügte
-    Wörter auch wieder löschen.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Wortauswahl verwalten</h1>
+
+    <p>Diese Funktion ermöglicht
+    es, eine Auswahl von oft benutzten Wörtern oder Phrasen zu
+    speichern. In der Standardeinstellung ist sie für die
+    Felder <em>Journal</em>, <em>Keywords</em> und
+    <em>Publisher</em> aktiviert, aber Sie können die Funktion
+    auch in anderen Feldern verwenden, indem Sie diese Felder im
+    oberen Teil des Dialogs <em>Extras -> Wortauswahl
+    verwalten</em> hinzufügen.</p>
+
+    <p>Die Wortauswahl gilt nur für die jeweilige Datei und
+    wird daher zusammen mit den Literaturangaben in der .bib-Datei
+    gespeichert.</p>
+
+    <p>Jedes Feld mit Wortauswahl erhält im Eintrags-Editor
+    einen gesonderten Bereich mit einer Auswahlliste und der
+    Schaltfläche <em>Verwalten</em>. Wenn Sie die Auswahlliste
+    mit der Maus anklicken, erscheint eine Liste der für
+    dieses Feld verfügbaren Wörter. Sobald Sie auf das
+    gewünschte Wort klicken, wird es in das entsprechende Feld
+    geschrieben.</p>
+
+    <p>Um ein neues Wort hinzuzufügen, schreiben Sie es
+    einfach in das Auswahlfeld und drücken ENTER. Im Dialog
+    <em>Verwalten</em> können Sie hinzugefügte
+    Wörter auch wieder löschen.</p>
+</body>
+</html>
diff --git a/src/help/de/Contents.html b/src/help/de/Contents.html
index 91daff5..632ee29 100644
--- a/src/help/de/Contents.html
+++ b/src/help/de/Contents.html
@@ -1,69 +1,69 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Hilfe - Inhalt</h1>
-
-    <h2>Allgemeines</h2>
-    <ul>
-      <li><a href="HelpHelp.html">Über die Hilfe</a></li>
-      <li><a href="JabRefHelp.html">Allgemeines</a></li>
-      <li><a href="BaseFrameHelp.html">Das Hauptfenster von JabRef</a></li>
-      <li><a href="EntryEditorHelp.html">Der Eintrags-Editor</a></li>
-    </ul>
-
-    <h2>Felder</h2>
-    <ul>
-      <li><a href="BibtexHelp.html"><em>BibTeX</em> Hilfe</a></li>
-      <li><a href="FileLinks.html">Links zu externen Dateien</a></li>
-      <li><a href="ExternalFiles.html">Links zu PDF- und PS-Dateien, URLs und DOIs</a></li>
-      <li><a href="TimeStampHelp.html">Zeitstempel</a></li>
-      <li><a href="OwnerHelp.html">Das 'Besitzer' (owner) Feld</a></li>
-      <li><a href="ContentSelectorHelp.html">Wortauswahl verwalten</a></li>
-      <li><a href="JournalAbbreviations.html">Zeitschriftentitel abkürzen</a></li>
-    </ul>
-
-    <h2>Einträge finden und sortieren</h2>
-    <ul>
-      <li><a href="GroupsHelp.html">Hilfe zu den <em>Gruppen</em></a></li>
-      <li><a href="MarkingHelp.html">Einträge markieren</a></li>
-      <li><a href="SearchHelp.html">Die Suchfunktionen von JabRef</a></li>
-    </ul>
-
-    <h2>Einstellungen</h2>
-    <ul>
-      <li><a href="CustomEntriesHelp.html">Eintragstypen anpassen</a></li>
-      <li><a href="GeneralFields.html">Allgemeine Felder festlegen</a></li>
-      <li><a href="LabelPatterns.html">Anpassen der automatischen Generierung von BibTeX-keys</a></li>
-      <li><a href="PreviewHelp.html">Eintragsvorschau anpassen</a></li>
-      <li><a href="StringEditorHelp.html">Der String-Editor</a></li>
-      <li><a href="Plugin.html">Plugins hinzufügen</a></li>
-    </ul>
-
-    <h2>Import/Export</h2>
-    <ul>
-      <li><a href="CiteSeerHelp.html">Einträge von <em>CiteSeer</em> abrufen</a></li>
-      <li><a href="IEEEXploreHelp.html">Einträge von <em>IEEExplore</em> abrufen</a></li>
-      <li><a href="MedlineHelp.html">Einträge von <em>Medline</em> abrufen</a></li>
-      <li><a href="JSTOR.html"><em>JStor</em>-Suche</a></li>
-      <li><a href="CustomExports.html">Exportfilter anpassen</a></li>
-      <li><a href="CustomImports.html">Importfilter anpassen</a></li> 
-      <li><a href="SQLExport.html">Export in eine externe SQL-Datenbank</a></li>
-      <li><a href="RemoteHelp.html">Externer Zugriff</a></li>
-      <li><a href="EndNoteFilters.html">Die Exportfilter und Importfilter für EndNote</a></li>
-      <li><a href="ImportInspectionDialog.html">Import-Kontrollfenster</a></li>
-
-      <li><a href="OpenOfficeHelp.html">JabRef-Bibliographien in OpenOffice.org benutzen</a></li>
-      <li><a href="XMPHelp.html">XMP-Metadaten und JabRef</a></li>
-      <li><a href="CommandLine.html">Kommandozeilen-Optionen</a></li>
-    </ul>
-
-    <h2>Verschiedenes</h2>
-    <ul>
-      <li><a href="RevisionHistory.html">Versionsgeschichte</a></li>
-      <li><a href="About.html">Über JabRef</a></li>
-    </ul>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Hilfe - Inhalt</h1>
+
+    <h2>Allgemeines</h2>
+    <ul>
+      <li><a href="HelpHelp.html">Über die Hilfe</a></li>
+      <li><a href="JabRefHelp.html">Allgemeines</a></li>
+      <li><a href="BaseFrameHelp.html">Das Hauptfenster von JabRef</a></li>
+      <li><a href="EntryEditorHelp.html">Der Eintrags-Editor</a></li>
+    </ul>
+
+    <h2>Felder</h2>
+    <ul>
+      <li><a href="BibtexHelp.html"><em>BibTeX</em> Hilfe</a></li>
+      <li><a href="FileLinks.html">Links zu externen Dateien</a></li>
+      <li><a href="ExternalFiles.html">Links zu PDF- und PS-Dateien, URLs und DOIs</a></li>
+      <li><a href="TimeStampHelp.html">Zeitstempel</a></li>
+      <li><a href="OwnerHelp.html">Das 'Besitzer' (owner) Feld</a></li>
+      <li><a href="ContentSelectorHelp.html">Wortauswahl verwalten</a></li>
+      <li><a href="JournalAbbreviations.html">Zeitschriftentitel abkürzen</a></li>
+    </ul>
+
+    <h2>Einträge finden und sortieren</h2>
+    <ul>
+      <li><a href="GroupsHelp.html">Hilfe zu den <em>Gruppen</em></a></li>
+      <li><a href="MarkingHelp.html">Einträge markieren</a></li>
+      <li><a href="SearchHelp.html">Die Suchfunktionen von JabRef</a></li>
+    </ul>
+
+    <h2>Einstellungen</h2>
+    <ul>
+      <li><a href="CustomEntriesHelp.html">Eintragstypen anpassen</a></li>
+      <li><a href="GeneralFields.html">Allgemeine Felder festlegen</a></li>
+      <li><a href="LabelPatterns.html">Anpassen der automatischen Generierung von BibTeX-keys</a></li>
+      <li><a href="PreviewHelp.html">Eintragsvorschau anpassen</a></li>
+      <li><a href="StringEditorHelp.html">Der String-Editor</a></li>
+      <li><a href="Plugin.html">Plugins hinzufügen</a></li>
+    </ul>
+
+    <h2>Import/Export</h2>
+    <ul>
+      <li><a href="CiteSeerHelp.html">Einträge von <em>CiteSeer</em> abrufen</a></li>
+      <li><a href="IEEEXploreHelp.html">Einträge von <em>IEEExplore</em> abrufen</a></li>
+      <li><a href="MedlineHelp.html">Einträge von <em>Medline</em> abrufen</a></li>
+      <li><a href="JSTOR.html"><em>JStor</em>-Suche</a></li>
+      <li><a href="CustomExports.html">Exportfilter anpassen</a></li>
+      <li><a href="CustomImports.html">Importfilter anpassen</a></li> 
+      <li><a href="SQLExport.html">Export in eine externe SQL-Datenbank</a></li>
+      <li><a href="RemoteHelp.html">Externer Zugriff</a></li>
+      <li><a href="EndNoteFilters.html">Die Exportfilter und Importfilter für EndNote</a></li>
+      <li><a href="ImportInspectionDialog.html">Import-Kontrollfenster</a></li>
+
+      <li><a href="OpenOfficeHelp.html">JabRef-Bibliographien in OpenOffice.org benutzen</a></li>
+      <li><a href="XMPHelp.html">XMP-Metadaten und JabRef</a></li>
+      <li><a href="CommandLine.html">Kommandozeilen-Optionen</a></li>
+    </ul>
+
+    <h2>Verschiedenes</h2>
+    <ul>
+      <li><a href="RevisionHistory.html">Versionsgeschichte</a></li>
+      <li><a href="About.html">Über JabRef</a></li>
+    </ul>
+
+</body>
+</html>
diff --git a/src/help/de/CustomEntriesHelp.html b/src/help/de/CustomEntriesHelp.html
index 0538154..5af555c 100644
--- a/src/help/de/CustomEntriesHelp.html
+++ b/src/help/de/CustomEntriesHelp.html
@@ -1,93 +1,93 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Eintragstypen anpassen</h1>
-
-    <p>Um Eintragstypen anzupassen, wählen Sie den
-    Menüpunkt <strong>Optionen --> Eintragstypen
-    anpassen</strong>.</p>
-
-    <p>Wenn Sie einen Eintragstyp anpassen, definieren Sie sowohl
-    sein Erscheinungsbild im Eintragseditor als auch die
-    Bedingungen, nach denen JabRef einen Eintrag als
-    vollständig akzeptiert. Sie können die bestehenden
-    Eintragstypen verändern und neue hinzufügen.</p>
-
-    <p>Beachten Sie, dass in diesem Dialog keine Änderungen
-    gespeichert werden, solange Sie nicht auf
-    <b>Übernehmen</b> oder <b>OK</b> klicken. Wenn Sie
-    <b>Cancel</b> anklicken oder einfach den Dialog
-    schließen, gehen die bislang nicht übernommenen
-    Änderungen verloren.</p>
-
-    <h2>Der Dialog <i>Eintragstypen anpassen</i></h2>
-
-    <p>Der Dialog
-    <i>Eintragstypen anpassen</i> ist in drei Hauptbereiche
-    unterteilt. Im linken Bereich können Sie den Eintragstyp
-    auswählen, den Sie bearbeiten wollen, und neue
-    Eintragstypen hinzufügen. Im mittleren Bereich werden die
-    Einstellungen für die benötigten Felder des
-    ausgewählten Eintragstyps vorgenommen und im rechten
-    Bereich diejenigen der optionalen Felder.</p>
-
-    <h3>Eintragstypen hinzufügen und löschen</h3>
-
-    <p>Die derzeit verfügbaren Eintragstypen werden im linken
-    Bereich des Dialogfensters aufgelistet. Wenn Sie einen
-    Eintragstyp auswählen, werden die anderen Bereiche
-    aktualisiert und zeigen die benötigten und optionalen
-    Felder dieses Eintragstyps.</p>
-
-    <p>Um einen neuen Eintragstyp hinzuzufügen, geben Sie
-    einfach seinen Namen in das Textfeld unter der Typliste ein und
-    klicken <b>Hinzufügen</b>. Der neue Eintragstyp wird zur
-    Liste hinzugefügt und zur Bearbeitung ausgewählt.</p>
-
-    <p>Um einen eigenen Eintragstyp zu entfernen, wählen Sie
-    ihn aus und klicken auf <b>Löschen</b>. Dieser Vorgang ist
-    nur für eigene Eintragstypen verfügbar, die nicht nur
-    Abwandlungen der Standard-Typen sind. Die
-    Standard-Eintragstypen können nicht gelöscht
-    werden.</p>
-
-    <p>Um einem Eintragstyp seinen Standardwert zurüzugeben,
-    wählen Sie ihn aus und drücken auf <b>Standard</b>.
-    Dieser Vorgang ist nur für Standard-Typen verfügbar,
-    die bearbeitet wurden.</p>
-
-    <h2>Eintragstypen bearbeiten</h2>
-
-    <p>Wenn ein Eintragstyp
-    ausgewählt ist, werden die derzeitigen benötigten und
-    optionalen Felder im mittleren und rechten Bereich des
-    Dialogfensters aufgelistet. Das Vorgehen beim Bearbeiten dieser
-    Listen ist für die benötigten und optionalen Felder
-    identisch.</p>
-
-    <p>Um ein neues Feld hinzuzufügen, bearbeiten Sie das
-    Textfeld unterhalb der Liste oder wählen einen Feldnamen
-    aus dem Dropdown-Menü und klicken auf
-    <b>Hinzufügen</b>. Der gewählte Feldname erscheint am
-    Ende der Liste.</p>
-
-    <p>Um eines oder mehrere Felder zu löschen, wählen
-    Sie sie in der Liste aus und klicken auf
-    <b>Löschen</b>.</p>
-
-    <p>Die Reihenfolge der Felder können Sie ändern,
-    indem Sie einen Feldnamen auswählen und die Pfeiltasten
-    benutzen, um das Feld nach oben oder nach unten zu
-    verschieben.</p>
-
-    <p>Es gibt eine Beschränkung beim Anpassen der
-    Eintragstypen; bestimmte Typen haben eine und/oder-Bedingung in
-    ihren benötigten Feldern. Ein <em>book</em>-Eintrag ist
-    beispielsweise komplett, wenn entweder das Feld <em>author</em>
-    oder <em>editor</em> oder beide gesetzt sind. Diese Art von
-    Bedingung kann in einem angepassten Eintragstyp nicht
-    realisiert werden.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Eintragstypen anpassen</h1>
+
+    <p>Um Eintragstypen anzupassen, wählen Sie den
+    Menüpunkt <strong>Optionen --> Eintragstypen
+    anpassen</strong>.</p>
+
+    <p>Wenn Sie einen Eintragstyp anpassen, definieren Sie sowohl
+    sein Erscheinungsbild im Eintragseditor als auch die
+    Bedingungen, nach denen JabRef einen Eintrag als
+    vollständig akzeptiert. Sie können die bestehenden
+    Eintragstypen verändern und neue hinzufügen.</p>
+
+    <p>Beachten Sie, dass in diesem Dialog keine Änderungen
+    gespeichert werden, solange Sie nicht auf
+    <b>Übernehmen</b> oder <b>OK</b> klicken. Wenn Sie
+    <b>Cancel</b> anklicken oder einfach den Dialog
+    schließen, gehen die bislang nicht übernommenen
+    Änderungen verloren.</p>
+
+    <h2>Der Dialog <i>Eintragstypen anpassen</i></h2>
+
+    <p>Der Dialog
+    <i>Eintragstypen anpassen</i> ist in drei Hauptbereiche
+    unterteilt. Im linken Bereich können Sie den Eintragstyp
+    auswählen, den Sie bearbeiten wollen, und neue
+    Eintragstypen hinzufügen. Im mittleren Bereich werden die
+    Einstellungen für die benötigten Felder des
+    ausgewählten Eintragstyps vorgenommen und im rechten
+    Bereich diejenigen der optionalen Felder.</p>
+
+    <h3>Eintragstypen hinzufügen und löschen</h3>
+
+    <p>Die derzeit verfügbaren Eintragstypen werden im linken
+    Bereich des Dialogfensters aufgelistet. Wenn Sie einen
+    Eintragstyp auswählen, werden die anderen Bereiche
+    aktualisiert und zeigen die benötigten und optionalen
+    Felder dieses Eintragstyps.</p>
+
+    <p>Um einen neuen Eintragstyp hinzuzufügen, geben Sie
+    einfach seinen Namen in das Textfeld unter der Typliste ein und
+    klicken <b>Hinzufügen</b>. Der neue Eintragstyp wird zur
+    Liste hinzugefügt und zur Bearbeitung ausgewählt.</p>
+
+    <p>Um einen eigenen Eintragstyp zu entfernen, wählen Sie
+    ihn aus und klicken auf <b>Löschen</b>. Dieser Vorgang ist
+    nur für eigene Eintragstypen verfügbar, die nicht nur
+    Abwandlungen der Standard-Typen sind. Die
+    Standard-Eintragstypen können nicht gelöscht
+    werden.</p>
+
+    <p>Um einem Eintragstyp seinen Standardwert zurüzugeben,
+    wählen Sie ihn aus und drücken auf <b>Standard</b>.
+    Dieser Vorgang ist nur für Standard-Typen verfügbar,
+    die bearbeitet wurden.</p>
+
+    <h2>Eintragstypen bearbeiten</h2>
+
+    <p>Wenn ein Eintragstyp
+    ausgewählt ist, werden die derzeitigen benötigten und
+    optionalen Felder im mittleren und rechten Bereich des
+    Dialogfensters aufgelistet. Das Vorgehen beim Bearbeiten dieser
+    Listen ist für die benötigten und optionalen Felder
+    identisch.</p>
+
+    <p>Um ein neues Feld hinzuzufügen, bearbeiten Sie das
+    Textfeld unterhalb der Liste oder wählen einen Feldnamen
+    aus dem Dropdown-Menü und klicken auf
+    <b>Hinzufügen</b>. Der gewählte Feldname erscheint am
+    Ende der Liste.</p>
+
+    <p>Um eines oder mehrere Felder zu löschen, wählen
+    Sie sie in der Liste aus und klicken auf
+    <b>Löschen</b>.</p>
+
+    <p>Die Reihenfolge der Felder können Sie ändern,
+    indem Sie einen Feldnamen auswählen und die Pfeiltasten
+    benutzen, um das Feld nach oben oder nach unten zu
+    verschieben.</p>
+
+    <p>Es gibt eine Beschränkung beim Anpassen der
+    Eintragstypen; bestimmte Typen haben eine und/oder-Bedingung in
+    ihren benötigten Feldern. Ein <em>book</em>-Eintrag ist
+    beispielsweise komplett, wenn entweder das Feld <em>author</em>
+    oder <em>editor</em> oder beide gesetzt sind. Diese Art von
+    Bedingung kann in einem angepassten Eintragstyp nicht
+    realisiert werden.</p>
+</body>
+</html>
diff --git a/src/help/de/CustomExports.html b/src/help/de/CustomExports.html
index 0241839..d40683f 100644
--- a/src/help/de/CustomExports.html
+++ b/src/help/de/CustomExports.html
@@ -1,486 +1,486 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Exportfilter anpassen</h1>
-
-    <p>Mit JabRef können Sie Ihre
-    eigenen Exportfilter definieren und genau so wie die
-    Standard-Exportfilter benutzen. Ein Exportfilter wird durch
-    eine oder mehr <i>Layout-Dateien</i> definiert, die mittels
-    eingebauter Formatierprogramme das Format der exportierten
-    Dateien festlegen. Ihre Layout-Datei müssen Sie in einem
-    separaten Texteditor erstellen.</p>
-
-    <h2>Hinzufügen eines Exportfilters</h2>
-
-    <p>Die einzige
-    Voraussetzung für einen Exportfilter ist, daß eine
-    Datei mit der Endung <b>.layout</b> vorhanden ist. Um einen
-    neuen, eigenen Exportfilter hinzuzufügen, öffnen Sie
-    das Dialogfenster <b>Optionen -> Verwalte externe
-    Exportfilter</b> und klicken auf die Schaltfläche
-    <b>Neu</b>. Es öffnet sich ein neues Fenster, in dem Sie
-    einen Namen (der als Auswahl im Dateityp-Dropdownmenü
-    erscheint, wenn man <b>Datei -> Exportieren</b> im
-    JabRef-Hauptfenster wählt), eine Pfadangabe zur
-    <b>.layout</b>-Datei und die gewünschte Dateiendung
-    für den Exportfilter angeben können. Wenn Sie den
-    Exportfilter benutzen, wird diese Endung im Datei-Dialog
-    automatisch vorgeschlagen.</p>
-
-    <h2>Das Erstellen des Exportfilters</h2>
-
-    <p>Um einen Eindruck zu
-    bekommen, wie Exportfilter auszusehen haben, suchen Sie am
-    besten auf unserer Homepage nach dem Paket, das die
-    Layout-Dateien der Standard-Exportfilter enthält.</p>
-
-    <h3>Layout-Dateien</h3>
-
-    <p>Nehmen wir einmal an, dass wir einen
-    HTML-Exportfilter erstellen wollen.</p>
-
-    <p>Der Exportfilter muss lediglich aus einer einzigen
-    <b>.layout</b>-Datei bestehen, die in diesem Fall
-    <i>html.layout</i> genannt werden könnte. Sie können
-    darüber hinaus auch zwei Dateien mit den Namen
-    <i>html.begin.layout</i> und <i>html.end.layout</i> anlegen.
-    Die erste dieser beiden Dateien enthält den Kopfteil der
-    Ausgabe, die zweite den Fußteil. JabRef sucht jedes Mal,
-    wenn der Exportfilter benutzt wird, nach diesen Dateien und
-    fügt sie – falls sie gefunden
-    werden – wörtlich vor bzw. nach den einzelnen
-    Einträgen in die Ausgabe ein.</p>
-
-    <p>Beachten Sie, dass sich diese Dateien in demselben
-    Verzeichnis wie <i>html.layout</i> befinden müssen und die
-    Namensbestandteile <b>.begin</b> bzw. <b>.end</b> enthalten
-    müssen.</p>
-
-    <p>In unserem Beispiel-Exportfilter könnten diese Dateien
-    folgendermaßen aussehen:</p>
-
-    <p><i>html.begin.layout</i>:<br />
-    <code><HTML><br />
-     <BODY> text="#275856"><br />
-    <basefont size="4" color="#2F4958"
-    face="arial"></code></p>
-
-    <p><i>html.end.layout</i>:<br />
-    <code></BODY><br />
-     </HTML></code></p>
-
-    <p>Die Datei <i>html.layout</i> stellt die
-    <i>Standard</i>-Formatvorlage für den Export eines
-    einzelnen Eintrags bereit. Falls Sie unterschiedliche
-    Formatvorlagen für verschiedene Eintragstypen anwenden
-    wollen, müssen Sie Eintrags-spezifische
-    <b>.layout</b>-Dateien erstellen. Diese müssen sich
-    ebenfalls in demselben Verzeichnis wie die Haupt-Layout-Datei
-    befinden und den Namensbestandteil <b>.entrytype</b> enthalten.
-    Der Name des Eintragstyps muss komplett in Kleinbuchstaben
-    geschrieben werden. In unserem Beispiel wollen wir eine
-    Formatvorlage für Einträge des Typs "book" haben, die
-    in der Datei <i>html.book.layout</i> abgelegt wird. Für
-    eine Dissertation würden wir die Datei
-    <i>html.phdthesis.layout</i> anlegen – und so
-    weiter. Diese Dateien sind der Standard-Layout-Datei sehr
-    ähnlich, nur dass sie lediglich für Einträge des
-    entsprechenden Typs genutzt werden. Beachten Sie, dass die
-    Standard-Layout-Datei so allgemein gehalten werden kann, dass
-    sie die meisten Eintragstypen abdeckt.</p>
-
-    <h3>Das Format der Layout-Datei</h3>
-
-    <p>Layout-Dateien werden mit
-    einem einfachen markup-Format erstellt, bei dem die Kommandos
-    mit einem "backslash" (<code>\</code>) eingeleitet werden. Alle
-    Textbestandteile, die nicht als Kommando identifiziert werden,
-    gelangen direkt in die Ausgabedatei.</p>
-
-    <h3>Feldkommandos</h3>
-
-    <p>Ein beliebiges Wort, vor dem ein backslash steht, z.B.
-    <code>\author</code>, <code>\editor</code>, <code>\title</code>
-    or <code>\year</code>, wird als Verweis auf das entsprechende
-    Feld ausgewertet, das dann direkt in die Ausgabe kopiert
-    wird.</p>
-
-    <h3>Feldformatierer</h3>
-
-    <p>Oft muss der Feldinhalt vor der Ausgabe verarbeitet werden.
-    Dies wird mit Hilfe eines <i>Feldformatierers</i> gemacht -
-    einer java class, die eine Methode zur Verarbeitung des
-    Feldinhaltes enthält.</p>
-
-    <p>Ein Formatierer wird angewendet, indem man das Kommando
-    <code>\format</code> gefolgt vom Namen des Formatierers in
-    eckigen Klammern und dem Feldnamen in geschweiften Klammern
-    einfügt, z.B.:</p>
-
-    <p><code>\format[ToLowerCase]{\author}</code></p>
-
-    <p>Sie können auch mehrere Formatierer angeben, getrennt
-    durch Kommas. Sie werden nacheinander aufgerufen, und zwar von
-    links nach rechts. Das Kommando</p>
-
-    <p><code>\format[ToLowerCase,HTMLChars]{\author}</code></p>
-
-    <p>ruft z.B. zunächst den Formatierer <b>ToLowerCase</b>
-    auf, <b>HTMLChars</b> formatiert anschließend das
-    Ergebnis. Auf diese Weise können Sie eine beliebige Anzahl
-    an Formatierern auflisten.</p>
-
-    <p>JabRef bietet die folgenden Formatierer, wobei einige von
-    anderen abhängen:</p>
-
-    <ul>
-        <li><code>HTMLChars</code> : ersetzt TeX-spezifische
-        Sonderzeichen (z.B. {\^a} oder {\"{o}}) durch ihre
-        HTML-Entsprechungen und übersetzt die LaTeX-Befehle
-        \emph, \textit, \textbf in ihre HTML-Entsprechungen.</li>
-
-        <li><code>HTMLParagraphs</code> : interpretiert zwei
-        aufeinanderfolgende Zeilenumbrüche (z.B. \n \n) als
-        Beginn eines neuen Absatzes und erstellt dementsprechend
-        Absatz-HTML-Tags.</li>
-
-        <li><code>XMLChars</code> : ersetzt TeX-spezifische
-        Sonderzeichen (z.B. {\^a} oder {\"{o}}) durch ihre
-        XML-Entsprechungen.</li>
-
-        <li><code>CreateDocBookAuthors</code> : formatiert das
-        author-Feld im DocBook-Stil.</li>
-
-        <li><code>CreateDocBookEditors</code> : Dokumentation
-        folgt.</li>
-
-        <li><code>CurrentDate</code> : gibt das aktuelle Datum aus.
-        Ohne Argument gibt dieser Formatierer das aktuelle Datum im
-        Format "JJJJ.MM.TT HH:MM:SS Z" (Datum, Zeit und Zeitzone)
-        aus. Mit einem anderen Format-String als Argument kann das
-        Datum angepasst werden. So ergibt
-        <code>\format[CurrentDate]{yyyy.MM.dd}</code> nur das
-        Datum, z.B. 2005.11.30.</li>
-
-        <li><code>AuthorFirstFirst</code> : formatiert die Felder
-        author/editor mit den Vornamen zuerst.</li>
-
-        <li><code>AuthorFirstFirstCommas</code> oder <code>AuthorFirstLastCommas</code> :
-        formatiert die Felder author/editor mit den Vornamen zuerst und abgetrennt
-        durch Kommas.</li>
-
-        <li><code>AuthorFirstLastOxfordCommas</code> : ähnlich wie
-        <code>AuthorFirstLastCommas</code>, außer dass das "and"
-        zwischen den letzten beiden Namen durch ein Komma eingeleitet
-        wird.</li>
-
-        <li><code>AuthorFirstAbbrLastCommas</code> : formatiert die
-        Felder author/editor mit abgekürzten Vornamen, abgetrennt durch
-        Kommas, mit einem "and" zwischen den letzten beiden Namen.</li>
-
-        <li><code>AuthorFirstAbbrLastOxfordCommas</code> : ähnlich wie
-        <code>AuthorFirstAbbrLastCommas</code>, außer dass das "and"
-        zwischen den letzten beiden Namen durch ein Komma eingeleitet
-        wird.</li>
-
-        <li><code>AuthorLastFirst</code> : formatiert die Felder
-        author/editor mit den Nachnamen zuerst.</li>
-
-        <li><code>AuthorAbbreviator</code> oder <code>AuthorLastFirstAbbreviator</code> :
-        kürzt die Vornamen und mittleren Namen aller Autoren. Dieser Formatierer gibt
-        Nachnamen zuerst aus. Wenn Sie abgekürzte Namen mit vorangestellten Initialen
-        wollen, wenden Sie anschließend den Formatierer <code>AuthorFirstFirst</code> an.</li>
-
-        <li><code>AuthorLastFirstCommas</code> : formatiert die Felder
-        author/editor mit den Nachnamen zuerst, abgetrennt durch Kommas,
-        mit einem "and" zwischen den letzten beiden Namen.</li>
-
-        <li><code>AuthorLastFirstOxfordCommas</code> : ähnlich wie
-        <code>AuthorLastFirstCommas</code>, außer dass das "and"
-        zwischen den letzten beiden Namen durch ein Komma eingeleitet
-        wird.</li>
-
-        <li><code>AuthorLastFirstAbbrCommas</code> : formatiert die Felder
-        author/editor mit Nachnamen zuerst und abgekürzten Vornamen,
-        abgetrennt durch Kommas, mit einem "and" zwischen den letzten
-        beiden Namen.</li>
-
-        <li><code>AuthorLastFirstAbbrOxfordCommas</code> : ähnlich wie
-        <code>AuthorLastFirstAbbrCommas</code>, außer dass das "and"
-        zwischen den letzten beiden Namen durch ein Komma eingeleitet
-        wird.</li>
-
-        <li><code>AuthorAndsReplacer</code> : ersetzt "and"
-        zwischen den Namen durch ";", zwischen den letzten beiden
-        Autoren steht "&".</li>
-
-        <li><code>AuthorAndsCommaReplacer</code> : ersetzt "and"
-        zwischen den Namen durch "," sowie "&" zwischen den
-        beiden letzten.</li>
-
-        <li><code>AuthorOrgSci</code> : Der erste Autor erscheint
-        als "Nachname, Vorname", alle anderen als "Vorname
-        Nachname". Vornamen werden abgekürzt.</li>
-
-        <li><code>AuthorAbbreviator</code> : Dokumentation
-        folgt.</li>
-
-        <li><code>AuthorNatBib</code> : formatiert Autorennamen im
-        Natbib-Stil, also nur mit Nachnamen; zwei Autoren werden
-        durch ein "and" voneinander getrennt, bei mehr als zwei
-        Autoren wird der erste angegeben, gefolgt von "et al."</li>
-
-        <li><code>NoSpaceBetweenAbbreviations</code> : Leerzeichen
-        zwischen mehreren abgekürzten Vornamen werden
-        gelöscht.</li>
-
-        <li><code>FileLink(Dateityp)</code> : wenn kein Argument angegeben
-        wird, gibt dieser Formatierer den ersten externen Dateityp aus, der
-        in dem Feld "file" angegeben ist.
-        <p>Dieser Formatierer nimmt den Namen eines Dateityps als optionales
-        Argument, das in Klammern nach dem Namen des Formatierers angegeben
-        wird. Zum Beispiel wird mit <code>\format[FileLink(pdf)]{\file}</code>
-        der Dateityp <code>pdf</code> als Argument angegeben. Wenn ein Argument
-        mitgegeben wird, wählt der Formatierer den ersten Dateilink des
-        entsprechenden Typs. Im Beispiel wird der Pfad zum ersten PDF-Link
-        ausgegeben.</p></li>
-
-        <li><code>FormatPagesForHTML</code> : ersetzt "--" durch
-        "-".</li>
-
-        <li><code>FormatPagesForXML</code> : ersetzt "--" durch
-        einen XML en-dash (Gedanken- bzw. Bis-Strich).</li>
-
-        <li><code>Replace(regexp,ersetzedurch)</code> : führt eine Ersetzung
-        mit einem Regulären Ausdruck durch. Um diesen Formatierer zu
-        benutzen, muss ein zweiteiliges Argument mitgegeben werden. Die Teile
-        werden durch ein Komma getrennt. Will man ein Komma ausgeben lassen,
-        muss man es maskieren: \,
-        <p>Der erste Teil ist der Reguläre Ausdruck, nach dem gesucht wird.
-        Er wird normal geschrieben, ohne Backslashes (\) zu maskieren.
-        Eine Beschreibung von Regulären Ausdrücken ist hier zu finden:<br />
-        http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html</p>
-        <p>Der zweite Teil ist der Text, der für alle Treffer eingesetzt
-        werden soll.</p></li>
-
-        <li><code>RemoveBrackets</code> : entfernt alle
-        geschweiften Klammern "{" oder "}".</li>
-
-        <li><code>RemoveBracketsAddComma</code> : Dokumentation
-        folgt.</li>
-
-        <li><code>RemoveWhitespace</code> : löscht alle Leerzeichen.</li>
-
-        <li><code>RemoveLatexCommands</code> : entfernt LaTeX
-        Kommandos wie <code>\emph</code>, <code>\textbf</code> etc.
-        Zusammen mit <code>HTMLChars</code> oder
-        <code>XMLChars</code> sollte dieser Formatierer zuletzt
-        aufgerufen werden.</li>
-
-        <li><code>RemoveTilde</code> : ersetzt das Tilde-Zeichen
-        (~), das in LaTeX als festes Leerzeichen dient, durch ein
-        normales Leerzeichen. Nützlich in Kombination mit dem
-        <a href="#NameFormatter">Namens-Formatierer</a>, der im
-        nächsten Abschnitt beschrieben wird.</li>
-
-        <li><code>ToLowerCase</code> : macht aus allen Buchstaben
-        Kleinbuchstaben.</li>
-
-        <li><code>ToUpperCase</code> : macht aus allen Buchstaben
-        Großbuchstaben.</li>
-
-        <li><code>GetOpenOfficeType</code> : gibt die Nummer wieder,
-        die vom bibliographischen System von OpenOffice.org (Versionen
-        1.x und 2.x) benutzt wird, um den Typ dieses Eintrags zu
-        bezeichnen.</li>
-
-        <li><code>RTFChars</code> : ersetzt alle TeX-spezifischen
-        Sonderzeichen (z.B. {\^a} oder {\"{o}}) durch ihre
-        RTF-Entsprechung und übersetzt LaTeX-Befehle wie \emph, \textit,
-        \textbf in ihre RTF-Entsprechungen.</li>
-
-    </ul>
-
-    <p>Falls keiner der verfügbaren Formatierer das Ergebnis
-    erzielt, das Sie erreichen möchten, können Sie Ihren
-    eigenen Formatierer hinzufügen, indem Sie das
-    <code>net.sf.jabref.export.layout.LayoutFormatter</code>-Interface
-    implementieren. Wenn Sie Ihre Klasse (class) in das Paket
-    <code>net.sf.jabref.export.layout.format</code> einfügen,
-    können Sie den Formatierer mit seinem Klassennamen
-    aufrufen, so wie auch die Standard-Formatierer. Ansonsten
-    müssen Sie den Formatierer mit seinem vollen Namen
-    aufrufen (inklusive Paketname). In jedem Fall muss der
-    Formatierer in ihrem classpath sein, wenn Sie JabRef
-    starten.</p>
-
-    <h2><a name="NameFormatter"
-       id="NameFormatter">Eigene Namens-Formatierer
-       verwenden</a></h2>
-
-    <p>Mit JabRef 2.2 ist es jetzt möglich, eigene
-    Namens-Formatierer zu definieren. Dazu wird die Syntax der
-    Bibliographie-Stile (bst) verwendet. Das erlaubt
-    äußerste Flexibilität, ist allerdings
-    aufwändig in der Schreibweise.</p>
-
-    <p>Sie können unter <strong>Optionen -> Einstellungen
-    -> Namens-Formatierer</strong> Ihren eigenen Formatierer
-    schreiben. Benutzen Sie das folgende Format:
-    <code><Fall1>@<Bereich11>@<Format>@<Bereich12>@<Format>@<Bereich13>...@@<br />
-
-     <Fall2>@<Bereich21>@... und so weiter.</code></p>
-
-    <p>Dieses Format teilt die Aufgabe, eine Liste von Autoren zu
-    formatieren, in unterschiedliche Fälle abhängig von
-    der Zahl der Autoren (das ist nötig, weil manche Formate
-    sich je nach der Zahl der Autoren unterscheiden). Die einzelnen
-    Fälle werden durch <code>@@</code> voneinander getrennt
-    und enthalten Anweisungen, wie jeder einzelne Autor in diesem
-    Fall zu formatieren ist. Diese Anweisungen werden durch
-    <code>@</code> getrennt.</p>
-
-    <p>Fälle werden durch Ganzzahlen (1, 2, 3, etc.) oder das
-    Zeichen <code>*</code> (alle Autoren) definiert. Sie geben die
-    nachfolgenden Anweisungen an den Formatierer weiter, falls
-    weniger oder gleich viele Autoren vorhanden sind.</p>
-
-    <p>Bereiche sind entweder
-    <code><Ganzzahl>..<Ganzzahl></code>,
-    <code><Ganzzahl></code> oder das Zeichen <code>*</code>.
-    Die Liste der Autoren fängt bei 1 an. Die Ganzzahlen
-    können einen negativen Wert haben, um vom letzten Autor
-    der Liste zu starten, wobei -1 der Wert für den letzten
-    Autor ist.</p>
-
-    <p>Als Beispiel dient die Autorenliste "Joe Doe and Mary Jane
-    and Bruce Bar and Arthur Kay":</p>
-
-    <ul>
-        <li>1..3 betrifft Joe, Mary und Bruce</li>
-
-        <li>4..4 betrifft Arthur</li>
-
-        <li>* betrifft alle</li>
-
-        <li>2..-1 betrifft Mary, Bruce und Arthur</li>
-    </ul>
-
-    <p>Die <code><Format></code>-Strings nutzen das
-    BibTeX-Namensschema:</p>
-
-    <p>Die vier Buchstaben v, f, l, j stehen für die
-    Namensteile von, Vorname (first), Nachname (last) und Junior
-    und werden in geschweiften Klammern gesetzt. Ein einzelner
-    Buchstabe v, f, l, j bedeutet, dass der Name abgekürzt
-    werden soll. Wenn einer dieser Buchstaben oder Buchstabenpaare
-    vorkommen, gibt JabRef alle entsprechenden Namen (eventuell
-    abgekürzt) aus, aber der Ausdruck in geschweiften Klammern
-    wird nur ausgegeben, wenn der Namensteil existiert.</p>
-
-    <p>Beispielsweise wird beim Format "{ll} {vv {von Part}} {ff}"
-    die Autorenliste "Mary Kay and John von Neumann" von JabRef als
-    "Kay Mary" (mit zwei Leerzeichen) und "Neumann von von Part
-    John" ausgegeben.</p>
-
-    <p>Zwei weitere Beispiele sollen das Ganze verdeutlichen; die
-    BibTeX-Dokumentation gibt weitere Hinweise.</p>
-
-    <p>Kurzes Beispiel: <code>"{ll}, {f.}"</code> formatiert
-    <code>"Joe Doe"</code> als <code>"Doe, J."</code></p>
-
-    <p>Ausführliches Beispiel:</p>
-
-    <blockquote>
-        <p>Um</p>
-
-        <p><code>"Joe Doe and Mary Jane and Bruce Bar and Arthur
-        Kay"</code></p>
-
-        <p>als</p>
-
-        <p><code>"Doe, J., Jane, M., Bar, B. and Kay,
-        A."</code></p>
-
-        <p>zu formatieren, nutzt man</p>
-
-        <p><code>1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll},
-        {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll},
-        {f}.</code></p>
-    </blockquote>
-
-    <p>Falls jemand eine bessere Dokumentation hierzu verfassen
-    möchte: Wenden Sie sich einfach an die
-    JabRef-Maililnglisten!</p>
-
-    <h3>Bedingte Ausgabe</h3>
-
-    <p>Manche statische Ausgabe macht nur
-    Sinn, wenn ein bestimmtes Feld nicht leer ist. Wenn wir z.B.
-    hinter den Namen der Editoren den Text <code>(Hrsg.)</code>
-    haben wollen, brauchen wir folgendes:</p>
-
-    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
-    (Hrsg.)</code></p>
-
-    <p>Wenn nun aber das <code>editor</code>-Feld leer ist -
-    möglicherweise ist es für den Eintrag, der exportiert
-    werden soll, nicht erforderlich -, dann würde das
-    <code>(Hrsg.)</code> dennoch erscheinen. Das kann man mit den
-    Kommandos <code>\begin</code> und <code>\end</code>
-    verhindern:</p>
-
-    <p><code>\begin{editor}<br />
-    \format[HTMLChars,AuthorFirstFirst]{\editor} (Hrsg.)<br />
-     \end{editor}</code></p>
-
-    <p>Die Kommandos <code>\begin</code> und <code>\end</code>
-    sorgen dafür, dass der Text, den sie einschließen,
-    nur dann ausgegeben wird, falls das Feld, auf das in den
-    geschweiften Klammern verwiesen wird, für den zu
-    exportierenden Eintrag definiert und damit nicht leer ist.</p>
-
-    <p><b>Anmerkung:</b> Das Benutzen der Kommandos
-    <code>\begin</code> und <code>\end</code> ist ein
-    Schlüssel zum Erstellen von Layout-Dateien, die mit einer
-    Vielzahl von Eintragstypen umgehen können.</p>
-
-    <h3>Gruppierte Ausgabe</h3>
-
-    <p>Wenn Sie Ihre Einträge auf der
-    Basis eines bestimmten Feldes gruppieren wollen, benutzen Sie
-    die Kommandos für die gruppierte Ausgabe. Die gruppierte
-    Ausgabe ist der bedingten Ausgabe sehr ähnlich, auß
-    dass der Text zwischen den Kommandos nur ausgegeben wird, wenn
-    das Feld, auf das in den geschweiften Klammern verwiesen wird,
-    unterschiedliche Werte enthält.</p>
-
-    <p>Nehmen wir zum Beispiel an, dass wir die Ausgabe nach dem
-    keyword (Stichwort) gruppieren wollen. Bevor die Datei
-    exportiert wird, müssen die Einträge nach dem keyword
-    sortiert worden sein. Dann benutzen Sie die folgenden
-    Kommandos, um nach keyword zu gruppieren:</p>
-
-    <p><code>\begingroup{keywords}New Category:
-    \format[HTMLChars]{\keywords}<br />
-     \endgroup{keywords}</code></p>
-
-    <h2>Teilen Sie Ihre Arbeit mit anderen</h2>
-
-    <p>Mit externen
-    Layout-Dateien ist es einfach, Ihre eigenen Export-Formate mit
-    anderen Anwendern gemeinsam zu benutzen. Falls Sie einen
-    Exportfilter für ein Format erstellen, das nicht von
-    JabRef unterstützt wird, oder falls Sie einen bestehenden
-    Exportfilter verbessern, möchten wir Sie ermutigen, Ihre
-    Arbeit auf der SourceForge.net-Seite bereitzustellen. Dasselbe
-    gilt für Formatierklassen, die Sie schreiben. Wir
-    würden uns freuen, eine Sammlung von bereitgestellten
-    Layout-Dateien verteilen zu können oder die
-    Standard-Export-Filter und Standard-Formatierer zu erweitern.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Exportfilter anpassen</h1>
+
+    <p>Mit JabRef können Sie Ihre
+    eigenen Exportfilter definieren und genau so wie die
+    Standard-Exportfilter benutzen. Ein Exportfilter wird durch
+    eine oder mehr <i>Layout-Dateien</i> definiert, die mittels
+    eingebauter Formatierprogramme das Format der exportierten
+    Dateien festlegen. Ihre Layout-Datei müssen Sie in einem
+    separaten Texteditor erstellen.</p>
+
+    <h2>Hinzufügen eines Exportfilters</h2>
+
+    <p>Die einzige
+    Voraussetzung für einen Exportfilter ist, daß eine
+    Datei mit der Endung <b>.layout</b> vorhanden ist. Um einen
+    neuen, eigenen Exportfilter hinzuzufügen, öffnen Sie
+    das Dialogfenster <b>Optionen -> Verwalte externe
+    Exportfilter</b> und klicken auf die Schaltfläche
+    <b>Neu</b>. Es öffnet sich ein neues Fenster, in dem Sie
+    einen Namen (der als Auswahl im Dateityp-Dropdownmenü
+    erscheint, wenn man <b>Datei -> Exportieren</b> im
+    JabRef-Hauptfenster wählt), eine Pfadangabe zur
+    <b>.layout</b>-Datei und die gewünschte Dateiendung
+    für den Exportfilter angeben können. Wenn Sie den
+    Exportfilter benutzen, wird diese Endung im Datei-Dialog
+    automatisch vorgeschlagen.</p>
+
+    <h2>Das Erstellen des Exportfilters</h2>
+
+    <p>Um einen Eindruck zu
+    bekommen, wie Exportfilter auszusehen haben, suchen Sie am
+    besten auf unserer Homepage nach dem Paket, das die
+    Layout-Dateien der Standard-Exportfilter enthält.</p>
+
+    <h3>Layout-Dateien</h3>
+
+    <p>Nehmen wir einmal an, dass wir einen
+    HTML-Exportfilter erstellen wollen.</p>
+
+    <p>Der Exportfilter muss lediglich aus einer einzigen
+    <b>.layout</b>-Datei bestehen, die in diesem Fall
+    <i>html.layout</i> genannt werden könnte. Sie können
+    darüber hinaus auch zwei Dateien mit den Namen
+    <i>html.begin.layout</i> und <i>html.end.layout</i> anlegen.
+    Die erste dieser beiden Dateien enthält den Kopfteil der
+    Ausgabe, die zweite den Fußteil. JabRef sucht jedes Mal,
+    wenn der Exportfilter benutzt wird, nach diesen Dateien und
+    fügt sie – falls sie gefunden
+    werden – wörtlich vor bzw. nach den einzelnen
+    Einträgen in die Ausgabe ein.</p>
+
+    <p>Beachten Sie, dass sich diese Dateien in demselben
+    Verzeichnis wie <i>html.layout</i> befinden müssen und die
+    Namensbestandteile <b>.begin</b> bzw. <b>.end</b> enthalten
+    müssen.</p>
+
+    <p>In unserem Beispiel-Exportfilter könnten diese Dateien
+    folgendermaßen aussehen:</p>
+
+    <p><i>html.begin.layout</i>:<br />
+    <code><HTML><br />
+     <BODY> text="#275856"><br />
+    <basefont size="4" color="#2F4958"
+    face="arial"></code></p>
+
+    <p><i>html.end.layout</i>:<br />
+    <code></BODY><br />
+     </HTML></code></p>
+
+    <p>Die Datei <i>html.layout</i> stellt die
+    <i>Standard</i>-Formatvorlage für den Export eines
+    einzelnen Eintrags bereit. Falls Sie unterschiedliche
+    Formatvorlagen für verschiedene Eintragstypen anwenden
+    wollen, müssen Sie Eintrags-spezifische
+    <b>.layout</b>-Dateien erstellen. Diese müssen sich
+    ebenfalls in demselben Verzeichnis wie die Haupt-Layout-Datei
+    befinden und den Namensbestandteil <b>.entrytype</b> enthalten.
+    Der Name des Eintragstyps muss komplett in Kleinbuchstaben
+    geschrieben werden. In unserem Beispiel wollen wir eine
+    Formatvorlage für Einträge des Typs "book" haben, die
+    in der Datei <i>html.book.layout</i> abgelegt wird. Für
+    eine Dissertation würden wir die Datei
+    <i>html.phdthesis.layout</i> anlegen – und so
+    weiter. Diese Dateien sind der Standard-Layout-Datei sehr
+    ähnlich, nur dass sie lediglich für Einträge des
+    entsprechenden Typs genutzt werden. Beachten Sie, dass die
+    Standard-Layout-Datei so allgemein gehalten werden kann, dass
+    sie die meisten Eintragstypen abdeckt.</p>
+
+    <h3>Das Format der Layout-Datei</h3>
+
+    <p>Layout-Dateien werden mit
+    einem einfachen markup-Format erstellt, bei dem die Kommandos
+    mit einem "backslash" (<code>\</code>) eingeleitet werden. Alle
+    Textbestandteile, die nicht als Kommando identifiziert werden,
+    gelangen direkt in die Ausgabedatei.</p>
+
+    <h3>Feldkommandos</h3>
+
+    <p>Ein beliebiges Wort, vor dem ein backslash steht, z.B.
+    <code>\author</code>, <code>\editor</code>, <code>\title</code>
+    or <code>\year</code>, wird als Verweis auf das entsprechende
+    Feld ausgewertet, das dann direkt in die Ausgabe kopiert
+    wird.</p>
+
+    <h3>Feldformatierer</h3>
+
+    <p>Oft muss der Feldinhalt vor der Ausgabe verarbeitet werden.
+    Dies wird mit Hilfe eines <i>Feldformatierers</i> gemacht -
+    einer java class, die eine Methode zur Verarbeitung des
+    Feldinhaltes enthält.</p>
+
+    <p>Ein Formatierer wird angewendet, indem man das Kommando
+    <code>\format</code> gefolgt vom Namen des Formatierers in
+    eckigen Klammern und dem Feldnamen in geschweiften Klammern
+    einfügt, z.B.:</p>
+
+    <p><code>\format[ToLowerCase]{\author}</code></p>
+
+    <p>Sie können auch mehrere Formatierer angeben, getrennt
+    durch Kommas. Sie werden nacheinander aufgerufen, und zwar von
+    links nach rechts. Das Kommando</p>
+
+    <p><code>\format[ToLowerCase,HTMLChars]{\author}</code></p>
+
+    <p>ruft z.B. zunächst den Formatierer <b>ToLowerCase</b>
+    auf, <b>HTMLChars</b> formatiert anschließend das
+    Ergebnis. Auf diese Weise können Sie eine beliebige Anzahl
+    an Formatierern auflisten.</p>
+
+    <p>JabRef bietet die folgenden Formatierer, wobei einige von
+    anderen abhängen:</p>
+
+    <ul>
+        <li><code>HTMLChars</code> : ersetzt TeX-spezifische
+        Sonderzeichen (z.B. {\^a} oder {\"{o}}) durch ihre
+        HTML-Entsprechungen und übersetzt die LaTeX-Befehle
+        \emph, \textit, \textbf in ihre HTML-Entsprechungen.</li>
+
+        <li><code>HTMLParagraphs</code> : interpretiert zwei
+        aufeinanderfolgende Zeilenumbrüche (z.B. \n \n) als
+        Beginn eines neuen Absatzes und erstellt dementsprechend
+        Absatz-HTML-Tags.</li>
+
+        <li><code>XMLChars</code> : ersetzt TeX-spezifische
+        Sonderzeichen (z.B. {\^a} oder {\"{o}}) durch ihre
+        XML-Entsprechungen.</li>
+
+        <li><code>CreateDocBookAuthors</code> : formatiert das
+        author-Feld im DocBook-Stil.</li>
+
+        <li><code>CreateDocBookEditors</code> : Dokumentation
+        folgt.</li>
+
+        <li><code>CurrentDate</code> : gibt das aktuelle Datum aus.
+        Ohne Argument gibt dieser Formatierer das aktuelle Datum im
+        Format "JJJJ.MM.TT HH:MM:SS Z" (Datum, Zeit und Zeitzone)
+        aus. Mit einem anderen Format-String als Argument kann das
+        Datum angepasst werden. So ergibt
+        <code>\format[CurrentDate]{yyyy.MM.dd}</code> nur das
+        Datum, z.B. 2005.11.30.</li>
+
+        <li><code>AuthorFirstFirst</code> : formatiert die Felder
+        author/editor mit den Vornamen zuerst.</li>
+
+        <li><code>AuthorFirstFirstCommas</code> oder <code>AuthorFirstLastCommas</code> :
+        formatiert die Felder author/editor mit den Vornamen zuerst und abgetrennt
+        durch Kommas.</li>
+
+        <li><code>AuthorFirstLastOxfordCommas</code> : ähnlich wie
+        <code>AuthorFirstLastCommas</code>, außer dass das "and"
+        zwischen den letzten beiden Namen durch ein Komma eingeleitet
+        wird.</li>
+
+        <li><code>AuthorFirstAbbrLastCommas</code> : formatiert die
+        Felder author/editor mit abgekürzten Vornamen, abgetrennt durch
+        Kommas, mit einem "and" zwischen den letzten beiden Namen.</li>
+
+        <li><code>AuthorFirstAbbrLastOxfordCommas</code> : ähnlich wie
+        <code>AuthorFirstAbbrLastCommas</code>, außer dass das "and"
+        zwischen den letzten beiden Namen durch ein Komma eingeleitet
+        wird.</li>
+
+        <li><code>AuthorLastFirst</code> : formatiert die Felder
+        author/editor mit den Nachnamen zuerst.</li>
+
+        <li><code>AuthorAbbreviator</code> oder <code>AuthorLastFirstAbbreviator</code> :
+        kürzt die Vornamen und mittleren Namen aller Autoren. Dieser Formatierer gibt
+        Nachnamen zuerst aus. Wenn Sie abgekürzte Namen mit vorangestellten Initialen
+        wollen, wenden Sie anschließend den Formatierer <code>AuthorFirstFirst</code> an.</li>
+
+        <li><code>AuthorLastFirstCommas</code> : formatiert die Felder
+        author/editor mit den Nachnamen zuerst, abgetrennt durch Kommas,
+        mit einem "and" zwischen den letzten beiden Namen.</li>
+
+        <li><code>AuthorLastFirstOxfordCommas</code> : ähnlich wie
+        <code>AuthorLastFirstCommas</code>, außer dass das "and"
+        zwischen den letzten beiden Namen durch ein Komma eingeleitet
+        wird.</li>
+
+        <li><code>AuthorLastFirstAbbrCommas</code> : formatiert die Felder
+        author/editor mit Nachnamen zuerst und abgekürzten Vornamen,
+        abgetrennt durch Kommas, mit einem "and" zwischen den letzten
+        beiden Namen.</li>
+
+        <li><code>AuthorLastFirstAbbrOxfordCommas</code> : ähnlich wie
+        <code>AuthorLastFirstAbbrCommas</code>, außer dass das "and"
+        zwischen den letzten beiden Namen durch ein Komma eingeleitet
+        wird.</li>
+
+        <li><code>AuthorAndsReplacer</code> : ersetzt "and"
+        zwischen den Namen durch ";", zwischen den letzten beiden
+        Autoren steht "&".</li>
+
+        <li><code>AuthorAndsCommaReplacer</code> : ersetzt "and"
+        zwischen den Namen durch "," sowie "&" zwischen den
+        beiden letzten.</li>
+
+        <li><code>AuthorOrgSci</code> : Der erste Autor erscheint
+        als "Nachname, Vorname", alle anderen als "Vorname
+        Nachname". Vornamen werden abgekürzt.</li>
+
+        <li><code>AuthorAbbreviator</code> : Dokumentation
+        folgt.</li>
+
+        <li><code>AuthorNatBib</code> : formatiert Autorennamen im
+        Natbib-Stil, also nur mit Nachnamen; zwei Autoren werden
+        durch ein "and" voneinander getrennt, bei mehr als zwei
+        Autoren wird der erste angegeben, gefolgt von "et al."</li>
+
+        <li><code>NoSpaceBetweenAbbreviations</code> : Leerzeichen
+        zwischen mehreren abgekürzten Vornamen werden
+        gelöscht.</li>
+
+        <li><code>FileLink(Dateityp)</code> : wenn kein Argument angegeben
+        wird, gibt dieser Formatierer den ersten externen Dateityp aus, der
+        in dem Feld "file" angegeben ist.
+        <p>Dieser Formatierer nimmt den Namen eines Dateityps als optionales
+        Argument, das in Klammern nach dem Namen des Formatierers angegeben
+        wird. Zum Beispiel wird mit <code>\format[FileLink(pdf)]{\file}</code>
+        der Dateityp <code>pdf</code> als Argument angegeben. Wenn ein Argument
+        mitgegeben wird, wählt der Formatierer den ersten Dateilink des
+        entsprechenden Typs. Im Beispiel wird der Pfad zum ersten PDF-Link
+        ausgegeben.</p></li>
+
+        <li><code>FormatPagesForHTML</code> : ersetzt "--" durch
+        "-".</li>
+
+        <li><code>FormatPagesForXML</code> : ersetzt "--" durch
+        einen XML en-dash (Gedanken- bzw. Bis-Strich).</li>
+
+        <li><code>Replace(regexp,ersetzedurch)</code> : führt eine Ersetzung
+        mit einem Regulären Ausdruck durch. Um diesen Formatierer zu
+        benutzen, muss ein zweiteiliges Argument mitgegeben werden. Die Teile
+        werden durch ein Komma getrennt. Will man ein Komma ausgeben lassen,
+        muss man es maskieren: \,
+        <p>Der erste Teil ist der Reguläre Ausdruck, nach dem gesucht wird.
+        Er wird normal geschrieben, ohne Backslashes (\) zu maskieren.
+        Eine Beschreibung von Regulären Ausdrücken ist hier zu finden:<br />
+        http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html</p>
+        <p>Der zweite Teil ist der Text, der für alle Treffer eingesetzt
+        werden soll.</p></li>
+
+        <li><code>RemoveBrackets</code> : entfernt alle
+        geschweiften Klammern "{" oder "}".</li>
+
+        <li><code>RemoveBracketsAddComma</code> : Dokumentation
+        folgt.</li>
+
+        <li><code>RemoveWhitespace</code> : löscht alle Leerzeichen.</li>
+
+        <li><code>RemoveLatexCommands</code> : entfernt LaTeX
+        Kommandos wie <code>\emph</code>, <code>\textbf</code> etc.
+        Zusammen mit <code>HTMLChars</code> oder
+        <code>XMLChars</code> sollte dieser Formatierer zuletzt
+        aufgerufen werden.</li>
+
+        <li><code>RemoveTilde</code> : ersetzt das Tilde-Zeichen
+        (~), das in LaTeX als festes Leerzeichen dient, durch ein
+        normales Leerzeichen. Nützlich in Kombination mit dem
+        <a href="#NameFormatter">Namens-Formatierer</a>, der im
+        nächsten Abschnitt beschrieben wird.</li>
+
+        <li><code>ToLowerCase</code> : macht aus allen Buchstaben
+        Kleinbuchstaben.</li>
+
+        <li><code>ToUpperCase</code> : macht aus allen Buchstaben
+        Großbuchstaben.</li>
+
+        <li><code>GetOpenOfficeType</code> : gibt die Nummer wieder,
+        die vom bibliographischen System von OpenOffice.org (Versionen
+        1.x und 2.x) benutzt wird, um den Typ dieses Eintrags zu
+        bezeichnen.</li>
+
+        <li><code>RTFChars</code> : ersetzt alle TeX-spezifischen
+        Sonderzeichen (z.B. {\^a} oder {\"{o}}) durch ihre
+        RTF-Entsprechung und übersetzt LaTeX-Befehle wie \emph, \textit,
+        \textbf in ihre RTF-Entsprechungen.</li>
+
+    </ul>
+
+    <p>Falls keiner der verfügbaren Formatierer das Ergebnis
+    erzielt, das Sie erreichen möchten, können Sie Ihren
+    eigenen Formatierer hinzufügen, indem Sie das
+    <code>net.sf.jabref.export.layout.LayoutFormatter</code>-Interface
+    implementieren. Wenn Sie Ihre Klasse (class) in das Paket
+    <code>net.sf.jabref.export.layout.format</code> einfügen,
+    können Sie den Formatierer mit seinem Klassennamen
+    aufrufen, so wie auch die Standard-Formatierer. Ansonsten
+    müssen Sie den Formatierer mit seinem vollen Namen
+    aufrufen (inklusive Paketname). In jedem Fall muss der
+    Formatierer in ihrem classpath sein, wenn Sie JabRef
+    starten.</p>
+
+    <h2><a name="NameFormatter"
+       id="NameFormatter">Eigene Namens-Formatierer
+       verwenden</a></h2>
+
+    <p>Mit JabRef 2.2 ist es jetzt möglich, eigene
+    Namens-Formatierer zu definieren. Dazu wird die Syntax der
+    Bibliographie-Stile (bst) verwendet. Das erlaubt
+    äußerste Flexibilität, ist allerdings
+    aufwändig in der Schreibweise.</p>
+
+    <p>Sie können unter <strong>Optionen -> Einstellungen
+    -> Namens-Formatierer</strong> Ihren eigenen Formatierer
+    schreiben. Benutzen Sie das folgende Format:
+    <code><Fall1>@<Bereich11>@<Format>@<Bereich12>@<Format>@<Bereich13>...@@<br />
+
+     <Fall2>@<Bereich21>@... und so weiter.</code></p>
+
+    <p>Dieses Format teilt die Aufgabe, eine Liste von Autoren zu
+    formatieren, in unterschiedliche Fälle abhängig von
+    der Zahl der Autoren (das ist nötig, weil manche Formate
+    sich je nach der Zahl der Autoren unterscheiden). Die einzelnen
+    Fälle werden durch <code>@@</code> voneinander getrennt
+    und enthalten Anweisungen, wie jeder einzelne Autor in diesem
+    Fall zu formatieren ist. Diese Anweisungen werden durch
+    <code>@</code> getrennt.</p>
+
+    <p>Fälle werden durch Ganzzahlen (1, 2, 3, etc.) oder das
+    Zeichen <code>*</code> (alle Autoren) definiert. Sie geben die
+    nachfolgenden Anweisungen an den Formatierer weiter, falls
+    weniger oder gleich viele Autoren vorhanden sind.</p>
+
+    <p>Bereiche sind entweder
+    <code><Ganzzahl>..<Ganzzahl></code>,
+    <code><Ganzzahl></code> oder das Zeichen <code>*</code>.
+    Die Liste der Autoren fängt bei 1 an. Die Ganzzahlen
+    können einen negativen Wert haben, um vom letzten Autor
+    der Liste zu starten, wobei -1 der Wert für den letzten
+    Autor ist.</p>
+
+    <p>Als Beispiel dient die Autorenliste "Joe Doe and Mary Jane
+    and Bruce Bar and Arthur Kay":</p>
+
+    <ul>
+        <li>1..3 betrifft Joe, Mary und Bruce</li>
+
+        <li>4..4 betrifft Arthur</li>
+
+        <li>* betrifft alle</li>
+
+        <li>2..-1 betrifft Mary, Bruce und Arthur</li>
+    </ul>
+
+    <p>Die <code><Format></code>-Strings nutzen das
+    BibTeX-Namensschema:</p>
+
+    <p>Die vier Buchstaben v, f, l, j stehen für die
+    Namensteile von, Vorname (first), Nachname (last) und Junior
+    und werden in geschweiften Klammern gesetzt. Ein einzelner
+    Buchstabe v, f, l, j bedeutet, dass der Name abgekürzt
+    werden soll. Wenn einer dieser Buchstaben oder Buchstabenpaare
+    vorkommen, gibt JabRef alle entsprechenden Namen (eventuell
+    abgekürzt) aus, aber der Ausdruck in geschweiften Klammern
+    wird nur ausgegeben, wenn der Namensteil existiert.</p>
+
+    <p>Beispielsweise wird beim Format "{ll} {vv {von Part}} {ff}"
+    die Autorenliste "Mary Kay and John von Neumann" von JabRef als
+    "Kay Mary" (mit zwei Leerzeichen) und "Neumann von von Part
+    John" ausgegeben.</p>
+
+    <p>Zwei weitere Beispiele sollen das Ganze verdeutlichen; die
+    BibTeX-Dokumentation gibt weitere Hinweise.</p>
+
+    <p>Kurzes Beispiel: <code>"{ll}, {f.}"</code> formatiert
+    <code>"Joe Doe"</code> als <code>"Doe, J."</code></p>
+
+    <p>Ausführliches Beispiel:</p>
+
+    <blockquote>
+        <p>Um</p>
+
+        <p><code>"Joe Doe and Mary Jane and Bruce Bar and Arthur
+        Kay"</code></p>
+
+        <p>als</p>
+
+        <p><code>"Doe, J., Jane, M., Bar, B. and Kay,
+        A."</code></p>
+
+        <p>zu formatieren, nutzt man</p>
+
+        <p><code>1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll},
+        {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll},
+        {f}.</code></p>
+    </blockquote>
+
+    <p>Falls jemand eine bessere Dokumentation hierzu verfassen
+    möchte: Wenden Sie sich einfach an die
+    JabRef-Maililnglisten!</p>
+
+    <h3>Bedingte Ausgabe</h3>
+
+    <p>Manche statische Ausgabe macht nur
+    Sinn, wenn ein bestimmtes Feld nicht leer ist. Wenn wir z.B.
+    hinter den Namen der Editoren den Text <code>(Hrsg.)</code>
+    haben wollen, brauchen wir folgendes:</p>
+
+    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
+    (Hrsg.)</code></p>
+
+    <p>Wenn nun aber das <code>editor</code>-Feld leer ist -
+    möglicherweise ist es für den Eintrag, der exportiert
+    werden soll, nicht erforderlich -, dann würde das
+    <code>(Hrsg.)</code> dennoch erscheinen. Das kann man mit den
+    Kommandos <code>\begin</code> und <code>\end</code>
+    verhindern:</p>
+
+    <p><code>\begin{editor}<br />
+    \format[HTMLChars,AuthorFirstFirst]{\editor} (Hrsg.)<br />
+     \end{editor}</code></p>
+
+    <p>Die Kommandos <code>\begin</code> und <code>\end</code>
+    sorgen dafür, dass der Text, den sie einschließen,
+    nur dann ausgegeben wird, falls das Feld, auf das in den
+    geschweiften Klammern verwiesen wird, für den zu
+    exportierenden Eintrag definiert und damit nicht leer ist.</p>
+
+    <p><b>Anmerkung:</b> Das Benutzen der Kommandos
+    <code>\begin</code> und <code>\end</code> ist ein
+    Schlüssel zum Erstellen von Layout-Dateien, die mit einer
+    Vielzahl von Eintragstypen umgehen können.</p>
+
+    <h3>Gruppierte Ausgabe</h3>
+
+    <p>Wenn Sie Ihre Einträge auf der
+    Basis eines bestimmten Feldes gruppieren wollen, benutzen Sie
+    die Kommandos für die gruppierte Ausgabe. Die gruppierte
+    Ausgabe ist der bedingten Ausgabe sehr ähnlich, auß
+    dass der Text zwischen den Kommandos nur ausgegeben wird, wenn
+    das Feld, auf das in den geschweiften Klammern verwiesen wird,
+    unterschiedliche Werte enthält.</p>
+
+    <p>Nehmen wir zum Beispiel an, dass wir die Ausgabe nach dem
+    keyword (Stichwort) gruppieren wollen. Bevor die Datei
+    exportiert wird, müssen die Einträge nach dem keyword
+    sortiert worden sein. Dann benutzen Sie die folgenden
+    Kommandos, um nach keyword zu gruppieren:</p>
+
+    <p><code>\begingroup{keywords}New Category:
+    \format[HTMLChars]{\keywords}<br />
+     \endgroup{keywords}</code></p>
+
+    <h2>Teilen Sie Ihre Arbeit mit anderen</h2>
+
+    <p>Mit externen
+    Layout-Dateien ist es einfach, Ihre eigenen Export-Formate mit
+    anderen Anwendern gemeinsam zu benutzen. Falls Sie einen
+    Exportfilter für ein Format erstellen, das nicht von
+    JabRef unterstützt wird, oder falls Sie einen bestehenden
+    Exportfilter verbessern, möchten wir Sie ermutigen, Ihre
+    Arbeit auf der SourceForge.net-Seite bereitzustellen. Dasselbe
+    gilt für Formatierklassen, die Sie schreiben. Wir
+    würden uns freuen, eine Sammlung von bereitgestellten
+    Layout-Dateien verteilen zu können oder die
+    Standard-Export-Filter und Standard-Formatierer zu erweitern.</p>
+</body>
+</html>
diff --git a/src/help/de/CustomImports.html b/src/help/de/CustomImports.html
index 7b508a1..00ab09e 100644
--- a/src/help/de/CustomImports.html
+++ b/src/help/de/CustomImports.html
@@ -1,165 +1,165 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Importfilter anpassen</h1>
-
-    <p>JabRef bietet Ihnen die Möglichkeit, ganz ähnlich
-    den Standard-Importern, eigene Importer zu definieren und zu
-    benutzen. Man definiert einen Importer durch eine oder mehrere
-    Java <i>Klassen</i>, die Dateinhalte aus einem sogenannten
-    <i>Input stream</i> lesen und daraus BibTex-Einträge
-    erzeugen. Sie können vorkompilierte Importer einbinden,
-    die Sie vielleicht von SourceForge erhalten haben (siehe "Ihre
-    Arbeit anderen zur Verfügung stellen"). Sie können
-    auch mit Grundkenntnissen der Java-Programmierung eigene
-    Importer für für Sie wichtige Referenzquellen
-    erstellen oder neue, verbesserte Versionen existierender
-    Importer einbinden, ohne JabRef neu zu kompilieren.</p>
-
-    <p>Externe Importfilter haben Vorrang vor Standard-Importern.
-    So können Sie mit Ihren Importern die existierenden in der
-    automatischen Formaterkennung und an der Kommandozeile in
-    JabRef überschreiben. Externe Importfilter selbst sind
-    dann nach Namen sortiert.</p>
-
-    <h2>Einen externen Importfilter hinzufügen</h2>
-
-    <p>Stellen Sie sicher, dass Sie den Importer in kompilierter
-    Form haben (eine oder mehrere <code>.class</code> Dateien) und
-    dass die Klassendateien in einer Verzeichnisstruktur
-    entsprechend ihrer Package-Struktur liegen. Um einen neuen
-    externen Importfilter hinzuzufügen, öffnen Sie den
-    Dialog <b>Optionen -> Verwalte externe Importfilter</b>, und
-    klicken Sie auf <b>Aus Klassenpfad hinzufügen</b>. Ein
-    Dateiauswahl-Fenster erscheint, mit dem Sie den Klassenpfad des
-    Importers wählen, dass heißt den obersten Ordner, in
-    dem die Package-Struktur Ihres Importers beginnt. In einem
-    zweiten Dateiauswahl-Fenster wählen Sie die
-    <i>.class</i>-Datei Ihres Importers, die von
-    <code>ImportFormat</code> abgeleitet ist. Wenn Sie <b>Klasse
-    auswählen</b> klicken, erscheint Ihr neuer Importer in der
-    Liste der externen Importfilter. Alle externen Importfilter
-    erscheinen in den JabRef-Submenüs <b>Datei ->
-    Importieren -> Externe Importfilter</b> und <b>Datei ->
-    Importieren und Anhängen -> Externe
-    Importfilter</b>.</p>
-
-    <p>Bitte beachten Sie: wenn Sie die Klassen in ein anderes
-    Verzeichnis verschieben, müssen Sie den Importer entfernen
-    und neu hinzufügen. Wenn Sie einen Importfilter mit einem
-    bereits vorhandenen Namen registrieren, ersetzt JabRef den
-    vorhandenen externen Importfilter. Auch wenn es in manchen
-    Fällen möglich ist, einen schon registrierten
-    Importer zu aktualisieren ohne JabRef neu zu starten
-    (nämlich dann, wenn der Importer nicht im Klassenpfad von
-    JabRef ist), empfehlen wir, grundsätzlich JabRef neu zu
-    starten, wenn Sie ein Update eines externen Importers
-    durchgeführt haben. Sie können auch Importer aus ZIP-
-    oder JAR-Archiven registrieren, wählen Sie einfach <b>Aus
-    Archiv-Datei hinzufügen</b>, dann das ZIP- oder JAR-Archiv
-    und dann den Eintrag (Klassendatei), der den neuen Importer
-    darstellt.</p>
-
-    <h2>Einen Importfilter entwickeln</h2>
-
-    <p>Bitte schauen Sie auf
-    unseren Download-Seiten nach Beispielen und nützliche
-    Dateien zur Entwicklung Ihres Importfilters.</p>
-
-    <h3>Ein einfaches Beispiel</h3>
-
-    <p>Angenommen, wir wollen Dateien der folgenden Form
-    importieren:</p>
-    <pre>
-1936;John Maynard Keynes;The General Theory of Employment, Interest and Money
-2003;Boldrin & Levine;Case Against Intellectual Monopoly
-2004;ROBERT HUNT AND JAMES BESSEN;The Software Patent Experiment
-</pre>
-
-    <p>Erzeugen Sie in einem Text-Editor eine von
-    <code>ImportFormat</code> abgeleitete Klasse, die die Methoden
-    <code>getFormatName()</code>, <code>isRecognizedFormat()</code>
-    und <code>importEntries()</code> implementiert. Hier ein
-    Beispiel:</p>
-    <pre>
-import java.io.*;
-import java.util.*;
-import net.sf.jabref.*;
-import net.sf.jabref.imports.ImportFormat;
-import net.sf.jabref.imports.ImportFormatReader;
-
-public class SimpleCsvImporter extends ImportFormat {
-
-  public String getFormatName() {
-    return "Simple CSV Importer";
-  }
-
-  public boolean isRecognizedFormat(InputStream stream) throws IOException {
-    return true; // this is discouraged except for demonstration purposes
-  }
-
-  public List importEntries(InputStream stream) throws IOException {
-        ArrayList bibitems = new ArrayList();
-    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-
-    String line = in.readLine();
-    while (line != null) {
-      if (!"".equals(line.trim())) {
-        String[] fields = line.split(";");
-        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
-        be.setType(BibtexEntryType.getType("techreport"));
-        be.setField("year", fields[0]);
-        be.setField("author", fields[1]);
-        be.setField("title", fields[2]);
-        bibitems.add(be);
-        line = in.readLine();
-      }
-    }
-    return bibitems;
-  }
-}
-</pre>
-
-    <p>Beachten Sie, dass die Beispielklasse im Default-Package
-    liegt. Angenommen, Sie haben sie unter
-    <code>/meinpfad/SimpleCsvImporter.java</code> gespeichert.
-    Nehmen wir weiter an, die Datei <i>JabRef-2.0.jar</i> ist im
-    gleichen Verzeichnis wie <code>SimpleCsvImporter.java</code>
-    und Java ist in Ihrem Kommandopfad. Kompilieren Sie die Klasse
-    mit JSDK 1.4 zum Beispiel mit folgendem
-    Kommandozeilen-Aufruf:</p>
-    <pre>
-javac -classpath JabRef-2.0.jar SimpleCsvImporter.java
-</pre>Nun sollte dort auch eine Datei
-<code>/mypath/SimpleCsvImporter.class</code> liegen.
-
-    <p>Öffnen Sie in JabRef <b>Optionen -> Verwaltung
-    externer Importfilter</b> und klicken Sie auf <b>Aus
-    Klassenpfad hinzufügen</b>. Navigieren Sie nach
-    <code>/meinpfad</code> und klicken Sie <b>Klassenpfad
-    auswählen</b>. Wählen Sie dann
-    <code>SimpleCsvImporter.class</code> und klicken Sie <b>Klasse
-    auswählen</b>. Ihr Importfilter sollte nun in der Liste
-    der externen Importfilter unter dem Namen "Simple CSV Importer"
-    erscheinen, und, sobald Sie <b>Schließen</b> gewählt
-    haben, auch in den Untermenüs <b>Datei -> Importieren
-    -> Externe Importfilter</b> und <b>Datei -> Importieren
-    und Anhängen -> Externe Importfilter</b> des
-    JabRef-Hauptfensters.</p>
-
-    <h2>Teilen Sie Ihre Arbeit</h2>
-
-    <p>Mit externen Importfiltern ist
-    es recht einfach, Importfilter zwischen Nutzern auszutauschen
-    und gemeinsam zu nutzen. Wenn Sie einen Importer für ein
-    Format schreiben, das JabRef noch nicht unterstützt, oder
-    einen Importer verbessern, bitten wir Sie, Ihre Ergebnisse auf
-    unserer SourceForge.net Seite zu veröffentlichen. Wir
-    bieten gerne eine Sammlung eingereichter Importfilter an oder
-    fügen sie unserer Auswahl an Standard-Importfiltern hinzu.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Importfilter anpassen</h1>
+
+    <p>JabRef bietet Ihnen die Möglichkeit, ganz ähnlich
+    den Standard-Importern, eigene Importer zu definieren und zu
+    benutzen. Man definiert einen Importer durch eine oder mehrere
+    Java <i>Klassen</i>, die Dateinhalte aus einem sogenannten
+    <i>Input stream</i> lesen und daraus BibTex-Einträge
+    erzeugen. Sie können vorkompilierte Importer einbinden,
+    die Sie vielleicht von SourceForge erhalten haben (siehe "Ihre
+    Arbeit anderen zur Verfügung stellen"). Sie können
+    auch mit Grundkenntnissen der Java-Programmierung eigene
+    Importer für für Sie wichtige Referenzquellen
+    erstellen oder neue, verbesserte Versionen existierender
+    Importer einbinden, ohne JabRef neu zu kompilieren.</p>
+
+    <p>Externe Importfilter haben Vorrang vor Standard-Importern.
+    So können Sie mit Ihren Importern die existierenden in der
+    automatischen Formaterkennung und an der Kommandozeile in
+    JabRef überschreiben. Externe Importfilter selbst sind
+    dann nach Namen sortiert.</p>
+
+    <h2>Einen externen Importfilter hinzufügen</h2>
+
+    <p>Stellen Sie sicher, dass Sie den Importer in kompilierter
+    Form haben (eine oder mehrere <code>.class</code> Dateien) und
+    dass die Klassendateien in einer Verzeichnisstruktur
+    entsprechend ihrer Package-Struktur liegen. Um einen neuen
+    externen Importfilter hinzuzufügen, öffnen Sie den
+    Dialog <b>Optionen -> Verwalte externe Importfilter</b>, und
+    klicken Sie auf <b>Aus Klassenpfad hinzufügen</b>. Ein
+    Dateiauswahl-Fenster erscheint, mit dem Sie den Klassenpfad des
+    Importers wählen, dass heißt den obersten Ordner, in
+    dem die Package-Struktur Ihres Importers beginnt. In einem
+    zweiten Dateiauswahl-Fenster wählen Sie die
+    <i>.class</i>-Datei Ihres Importers, die von
+    <code>ImportFormat</code> abgeleitet ist. Wenn Sie <b>Klasse
+    auswählen</b> klicken, erscheint Ihr neuer Importer in der
+    Liste der externen Importfilter. Alle externen Importfilter
+    erscheinen in den JabRef-Submenüs <b>Datei ->
+    Importieren -> Externe Importfilter</b> und <b>Datei ->
+    Importieren und Anhängen -> Externe
+    Importfilter</b>.</p>
+
+    <p>Bitte beachten Sie: wenn Sie die Klassen in ein anderes
+    Verzeichnis verschieben, müssen Sie den Importer entfernen
+    und neu hinzufügen. Wenn Sie einen Importfilter mit einem
+    bereits vorhandenen Namen registrieren, ersetzt JabRef den
+    vorhandenen externen Importfilter. Auch wenn es in manchen
+    Fällen möglich ist, einen schon registrierten
+    Importer zu aktualisieren ohne JabRef neu zu starten
+    (nämlich dann, wenn der Importer nicht im Klassenpfad von
+    JabRef ist), empfehlen wir, grundsätzlich JabRef neu zu
+    starten, wenn Sie ein Update eines externen Importers
+    durchgeführt haben. Sie können auch Importer aus ZIP-
+    oder JAR-Archiven registrieren, wählen Sie einfach <b>Aus
+    Archiv-Datei hinzufügen</b>, dann das ZIP- oder JAR-Archiv
+    und dann den Eintrag (Klassendatei), der den neuen Importer
+    darstellt.</p>
+
+    <h2>Einen Importfilter entwickeln</h2>
+
+    <p>Bitte schauen Sie auf
+    unseren Download-Seiten nach Beispielen und nützliche
+    Dateien zur Entwicklung Ihres Importfilters.</p>
+
+    <h3>Ein einfaches Beispiel</h3>
+
+    <p>Angenommen, wir wollen Dateien der folgenden Form
+    importieren:</p>
+    <pre>
+1936;John Maynard Keynes;The General Theory of Employment, Interest and Money
+2003;Boldrin & Levine;Case Against Intellectual Monopoly
+2004;ROBERT HUNT AND JAMES BESSEN;The Software Patent Experiment
+</pre>
+
+    <p>Erzeugen Sie in einem Text-Editor eine von
+    <code>ImportFormat</code> abgeleitete Klasse, die die Methoden
+    <code>getFormatName()</code>, <code>isRecognizedFormat()</code>
+    und <code>importEntries()</code> implementiert. Hier ein
+    Beispiel:</p>
+    <pre>
+import java.io.*;
+import java.util.*;
+import net.sf.jabref.*;
+import net.sf.jabref.imports.ImportFormat;
+import net.sf.jabref.imports.ImportFormatReader;
+
+public class SimpleCsvImporter extends ImportFormat {
+
+  public String getFormatName() {
+    return "Simple CSV Importer";
+  }
+
+  public boolean isRecognizedFormat(InputStream stream) throws IOException {
+    return true; // this is discouraged except for demonstration purposes
+  }
+
+  public List importEntries(InputStream stream) throws IOException {
+        ArrayList bibitems = new ArrayList();
+    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+
+    String line = in.readLine();
+    while (line != null) {
+      if (!"".equals(line.trim())) {
+        String[] fields = line.split(";");
+        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
+        be.setType(BibtexEntryType.getType("techreport"));
+        be.setField("year", fields[0]);
+        be.setField("author", fields[1]);
+        be.setField("title", fields[2]);
+        bibitems.add(be);
+        line = in.readLine();
+      }
+    }
+    return bibitems;
+  }
+}
+</pre>
+
+    <p>Beachten Sie, dass die Beispielklasse im Default-Package
+    liegt. Angenommen, Sie haben sie unter
+    <code>/meinpfad/SimpleCsvImporter.java</code> gespeichert.
+    Nehmen wir weiter an, die Datei <i>JabRef-2.0.jar</i> ist im
+    gleichen Verzeichnis wie <code>SimpleCsvImporter.java</code>
+    und Java ist in Ihrem Kommandopfad. Kompilieren Sie die Klasse
+    mit JSDK 1.4 zum Beispiel mit folgendem
+    Kommandozeilen-Aufruf:</p>
+    <pre>
+javac -classpath JabRef-2.0.jar SimpleCsvImporter.java
+</pre>Nun sollte dort auch eine Datei
+<code>/mypath/SimpleCsvImporter.class</code> liegen.
+
+    <p>Öffnen Sie in JabRef <b>Optionen -> Verwaltung
+    externer Importfilter</b> und klicken Sie auf <b>Aus
+    Klassenpfad hinzufügen</b>. Navigieren Sie nach
+    <code>/meinpfad</code> und klicken Sie <b>Klassenpfad
+    auswählen</b>. Wählen Sie dann
+    <code>SimpleCsvImporter.class</code> und klicken Sie <b>Klasse
+    auswählen</b>. Ihr Importfilter sollte nun in der Liste
+    der externen Importfilter unter dem Namen "Simple CSV Importer"
+    erscheinen, und, sobald Sie <b>Schließen</b> gewählt
+    haben, auch in den Untermenüs <b>Datei -> Importieren
+    -> Externe Importfilter</b> und <b>Datei -> Importieren
+    und Anhängen -> Externe Importfilter</b> des
+    JabRef-Hauptfensters.</p>
+
+    <h2>Teilen Sie Ihre Arbeit</h2>
+
+    <p>Mit externen Importfiltern ist
+    es recht einfach, Importfilter zwischen Nutzern auszutauschen
+    und gemeinsam zu nutzen. Wenn Sie einen Importer für ein
+    Format schreiben, das JabRef noch nicht unterstützt, oder
+    einen Importer verbessern, bitten wir Sie, Ihre Ergebnisse auf
+    unserer SourceForge.net Seite zu veröffentlichen. Wir
+    bieten gerne eine Sammlung eingereichter Importfilter an oder
+    fügen sie unserer Auswahl an Standard-Importfiltern hinzu.</p>
+
+</body>
+</html>
diff --git a/src/help/de/EndNoteFilters.html b/src/help/de/EndNoteFilters.html
index 2d92298..38ac3b2 100644
--- a/src/help/de/EndNoteFilters.html
+++ b/src/help/de/EndNoteFilters.html
@@ -1,130 +1,130 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>EndNote Exportfilter</h1>
-
-    <h2>Exportieren aus JabRef</h2>
-
-    <p>JabRef kann Dateien so
-    exportieren, dass EndNote sie lesen kann. Um diese Funktion zu
-    nutzen, wählen Sie <b>Datei -> Exportieren</b>,
-    wählen als Dateityp <b>Endnote (txt)</b> und dann den
-    Namen der Export-Datei.</p>
-
-    <h2>Importieren in EndNote</h2>
-
-    <p>Der
-    Standard-EndNote-Importfilter kann nicht richtig mit mehreren
-    Autoren oder Editoren umgehen. Es gibt zwei Möglichkeiten,
-    um diese Schwierigkeit zu umgehen:</p>
-
-    <ol>
-        <li>Benutzen Sie den eingebauten Filter und bessern Sie die
-        Datei später aus. Um die Datei in EndNote zu
-        öffnen, erstellen Sie eine neue Datei oder öffnen
-        eine bestehende Datei in EndNote. Dann wählen Sie
-        <b>Datei -> Importieren</b>, klicken mit der Maus auf
-        <b>Datei wählen</b>, wählen die exportierte Datei
-        aus und drücken auf <b>Auswählen</b>.
-        Anschließend drücken Sie auf <b>Import
-        Optionen</b> und wählen <b>EndNote Import</b>. Mit
-        einem Klick auf <b>Importieren</b> starten Sie den
-        Importvorgang. Anschließend gehen Sie zum
-        Menüpunkt <b>Bearbeiten -> Text ändern</b> und
-        ändern <b>Any Field</b> in <b>Author</b>. Geben Sie "
-        and " in das Suchfeld ein (ohne Anführungszeichen)
-        sowie ein RETURN-Zeichen in das Feld Ändern
-        (Option-Return unter Mac OS X, Strg-Return unter Windows
-        XP). Dann klicken Sie auf <b>Ändern</b>. Wiederholen
-        Sie das Ganze für das Feld <b>Secondary Author</b>
-        (Zweiter Autor).</li>
-
-        <li>Installieren Sie den <i>EndNote Import from JabRef
-        Filter</i> in <i>EndNote Extras</i>. Folgen Sie den
-        Anweisungen in <i>Erweitert</i> (unten). Um die Datei in
-        EndNote zu öffnen, erstellen Sie eine neue Datei oder
-        öffnen eine bestehende Datei in EndNote. Dann
-        wählen Sie <b>Datei -> Importieren</b>, klicken auf
-        <b>Datei wählen</b>, wählen die exportierte Datei
-        aus und drücken auf <b>Auswählen</b>.
-        Anschließend drücken Sie auf <b>Import
-        Optionen</b> und wählen <b>EndNote Import from
-        JabRef</b>. (Falls dieser Eintrag nicht erscheint,
-        wählen Sie Weitere Filter. Wenn er dann immer noch
-        nicht erscheint, wurde der Filter nicht korrekt
-        installiert.) Klicken Sie schließlich auf
-        <b>Importieren</b>, um den Importvorgang zu starten.</li>
-    </ol>
-
-    <h2>Anmerkungen</h2>
-
-    <p>Der EndNote Exportfilter ordnet
-    BibTeX-Eintragstypen folgenden EndNote-Referenztypen zu:</p>
-    <pre>
-BibTeX-Eintragstyp -> Endnote Referenztyp
-------------------------------------------
-misc, other -> Generic
-unpublished -> Manuscript
-manual -> Computer Program
-article -> Journal Article
-book -> Book
-booklet -> Personal Communication
-inbook,incollection -> Book Section
-inproceedings -> Conference Proceedings
-techreport -> Report
-mastersthesis, phdthesis -> Thesis</pre>
-
-    <h2>Mehrere Autoren</h2>
-
-    <p>In der Standardeinstellung geht der
-    Exportfilter davon aus, dass Einträge in den Feldern
-    author oder editor, die geklammert sind, mehrere Autoren
-    enthalten und ersetzt die Klammern durch ein angehängtes
-    Komma. Dadurch werden Einträge, die LaTeX-Befehle mit
-    Klammern enthalten, als Eintrag mit mehreren Autoren gewertet
-    und demzufolge unpassend formatiert.</p>
-
-    <h2>Erweiterte Benutzung: Endnote Extras</h2>
-
-    <h3>Installieren des EndNote Import from JabRef Filters</h3>
-
-    <p>Der vorgegebene EndNote-Importfilter kann das Feld author nicht
-    richtig analysieren. Der EndNote Import from JabRef Filter kann
-    dies. Außerdem erkennt dieser Filter ein Feld
-    <code>endnotereftype</code>, das die vorgegebene Zuordnung
-    überschreibt. Um den Filter zu installieren, extrahieren
-    Sie die EndNote Extras (<b>Extras -> EndNote Filter-Set
-    entpacken</b>) und entpacken die Zip-Datei, die dabei erstellt
-    wird. Dann folgen Sie den Angaben in der Datei
-    <code>readme.txt</code>.</p>
-
-    <h3>Ändern der EndNote Referenztypen</h3>
-
-    <p>Einige Felder,
-    die von BibTeX genutzt werden, gehören nicht zu EndNotes
-    vorgegebenen Referenztypen. Während der Import in JabRef
-    und der Export nach JabRef ohne ein Ändern der
-    Referenztypen funktioniert, werden die Feldnamen in EndNote
-    nicht korrekt dargestellt (z.B. wird das pdf-Feld <i>Custom
-    1</i> heißen statt <i>pdf</i>). Darüber hinaus
-    können diese Felder bei neuen Einträgen in EndNote
-    nicht genutzt werden, weil sie nicht im Eintragsdialog
-    erscheinen. Um die EndNote-Referenztypen anzupassen,
-    müssen Sie die EndNote Extras extrahieren und den
-    Anweisungen in der Datei <code>readme.txt</code> folgen.</p>
-
-    <h3>Exportieren nach JabRef</h3>
-
-    <p>EndNote hat einen Export-Stil
-    BibTeX, der allerdings nicht alle Eintragstypen und Felder von
-    BibTeX und auch nicht die zusätzlich von JabRef genutzten
-    Allgemeinen Felder (<i>pdf, owner, key</i> usw.)
-    unterstützt. Falls Sie diese Felder nutzen wollen,
-    extrahieren Sie die EndNote Extras (<b>Extras -> EndNote
-    Filter-Set entpacken</b>) und folgen den Anweisungen in der
-    Datei <code>readme.txt</code>.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>EndNote Exportfilter</h1>
+
+    <h2>Exportieren aus JabRef</h2>
+
+    <p>JabRef kann Dateien so
+    exportieren, dass EndNote sie lesen kann. Um diese Funktion zu
+    nutzen, wählen Sie <b>Datei -> Exportieren</b>,
+    wählen als Dateityp <b>Endnote (txt)</b> und dann den
+    Namen der Export-Datei.</p>
+
+    <h2>Importieren in EndNote</h2>
+
+    <p>Der
+    Standard-EndNote-Importfilter kann nicht richtig mit mehreren
+    Autoren oder Editoren umgehen. Es gibt zwei Möglichkeiten,
+    um diese Schwierigkeit zu umgehen:</p>
+
+    <ol>
+        <li>Benutzen Sie den eingebauten Filter und bessern Sie die
+        Datei später aus. Um die Datei in EndNote zu
+        öffnen, erstellen Sie eine neue Datei oder öffnen
+        eine bestehende Datei in EndNote. Dann wählen Sie
+        <b>Datei -> Importieren</b>, klicken mit der Maus auf
+        <b>Datei wählen</b>, wählen die exportierte Datei
+        aus und drücken auf <b>Auswählen</b>.
+        Anschließend drücken Sie auf <b>Import
+        Optionen</b> und wählen <b>EndNote Import</b>. Mit
+        einem Klick auf <b>Importieren</b> starten Sie den
+        Importvorgang. Anschließend gehen Sie zum
+        Menüpunkt <b>Bearbeiten -> Text ändern</b> und
+        ändern <b>Any Field</b> in <b>Author</b>. Geben Sie "
+        and " in das Suchfeld ein (ohne Anführungszeichen)
+        sowie ein RETURN-Zeichen in das Feld Ändern
+        (Option-Return unter Mac OS X, Strg-Return unter Windows
+        XP). Dann klicken Sie auf <b>Ändern</b>. Wiederholen
+        Sie das Ganze für das Feld <b>Secondary Author</b>
+        (Zweiter Autor).</li>
+
+        <li>Installieren Sie den <i>EndNote Import from JabRef
+        Filter</i> in <i>EndNote Extras</i>. Folgen Sie den
+        Anweisungen in <i>Erweitert</i> (unten). Um die Datei in
+        EndNote zu öffnen, erstellen Sie eine neue Datei oder
+        öffnen eine bestehende Datei in EndNote. Dann
+        wählen Sie <b>Datei -> Importieren</b>, klicken auf
+        <b>Datei wählen</b>, wählen die exportierte Datei
+        aus und drücken auf <b>Auswählen</b>.
+        Anschließend drücken Sie auf <b>Import
+        Optionen</b> und wählen <b>EndNote Import from
+        JabRef</b>. (Falls dieser Eintrag nicht erscheint,
+        wählen Sie Weitere Filter. Wenn er dann immer noch
+        nicht erscheint, wurde der Filter nicht korrekt
+        installiert.) Klicken Sie schließlich auf
+        <b>Importieren</b>, um den Importvorgang zu starten.</li>
+    </ol>
+
+    <h2>Anmerkungen</h2>
+
+    <p>Der EndNote Exportfilter ordnet
+    BibTeX-Eintragstypen folgenden EndNote-Referenztypen zu:</p>
+    <pre>
+BibTeX-Eintragstyp -> Endnote Referenztyp
+------------------------------------------
+misc, other -> Generic
+unpublished -> Manuscript
+manual -> Computer Program
+article -> Journal Article
+book -> Book
+booklet -> Personal Communication
+inbook,incollection -> Book Section
+inproceedings -> Conference Proceedings
+techreport -> Report
+mastersthesis, phdthesis -> Thesis</pre>
+
+    <h2>Mehrere Autoren</h2>
+
+    <p>In der Standardeinstellung geht der
+    Exportfilter davon aus, dass Einträge in den Feldern
+    author oder editor, die geklammert sind, mehrere Autoren
+    enthalten und ersetzt die Klammern durch ein angehängtes
+    Komma. Dadurch werden Einträge, die LaTeX-Befehle mit
+    Klammern enthalten, als Eintrag mit mehreren Autoren gewertet
+    und demzufolge unpassend formatiert.</p>
+
+    <h2>Erweiterte Benutzung: Endnote Extras</h2>
+
+    <h3>Installieren des EndNote Import from JabRef Filters</h3>
+
+    <p>Der vorgegebene EndNote-Importfilter kann das Feld author nicht
+    richtig analysieren. Der EndNote Import from JabRef Filter kann
+    dies. Außerdem erkennt dieser Filter ein Feld
+    <code>endnotereftype</code>, das die vorgegebene Zuordnung
+    überschreibt. Um den Filter zu installieren, extrahieren
+    Sie die EndNote Extras (<b>Extras -> EndNote Filter-Set
+    entpacken</b>) und entpacken die Zip-Datei, die dabei erstellt
+    wird. Dann folgen Sie den Angaben in der Datei
+    <code>readme.txt</code>.</p>
+
+    <h3>Ändern der EndNote Referenztypen</h3>
+
+    <p>Einige Felder,
+    die von BibTeX genutzt werden, gehören nicht zu EndNotes
+    vorgegebenen Referenztypen. Während der Import in JabRef
+    und der Export nach JabRef ohne ein Ändern der
+    Referenztypen funktioniert, werden die Feldnamen in EndNote
+    nicht korrekt dargestellt (z.B. wird das pdf-Feld <i>Custom
+    1</i> heißen statt <i>pdf</i>). Darüber hinaus
+    können diese Felder bei neuen Einträgen in EndNote
+    nicht genutzt werden, weil sie nicht im Eintragsdialog
+    erscheinen. Um die EndNote-Referenztypen anzupassen,
+    müssen Sie die EndNote Extras extrahieren und den
+    Anweisungen in der Datei <code>readme.txt</code> folgen.</p>
+
+    <h3>Exportieren nach JabRef</h3>
+
+    <p>EndNote hat einen Export-Stil
+    BibTeX, der allerdings nicht alle Eintragstypen und Felder von
+    BibTeX und auch nicht die zusätzlich von JabRef genutzten
+    Allgemeinen Felder (<i>pdf, owner, key</i> usw.)
+    unterstützt. Falls Sie diese Felder nutzen wollen,
+    extrahieren Sie die EndNote Extras (<b>Extras -> EndNote
+    Filter-Set entpacken</b>) und folgen den Anweisungen in der
+    Datei <code>readme.txt</code>.</p>
+</body>
+</html>
diff --git a/src/help/de/EntryEditorHelp.html b/src/help/de/EntryEditorHelp.html
index 85cd121..bfc5369 100644
--- a/src/help/de/EntryEditorHelp.html
+++ b/src/help/de/EntryEditorHelp.html
@@ -1,147 +1,147 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Der Eintrags-Editor</h1>
-
-    <p><em>Geöffnet wird der
-    Eintrags-Editor im Hauptfenster durch einen Doppelklick auf die
-    Zeile eines Eintrags oder durch Drücken auf ENTER. Der
-    Eintrags-Editor wird geschlossen, indem man auf ESC
-    drückt.</em></p>
-
-    <p>Im Eintrags-Editor können Sie alle relevanten
-    Informationen eines Eintrags festlegen. Der Editor
-    überprüft den Eintragstyp und zeigt alle
-    benötigten und optionalen Felder für den Gebrauch mit
-    <em>BibTeX</em> an. Darüber hinaus gibt es einige Felder,
-    die <em>Allgemeine Felder</em> genannt werden und für alle
-    Eintragstypen gelten.</p>
-
-    <p>Sie können die Felder, die für die einzelnen
-    Eintragstypen als benötigt und optional angesehen werden,
-    und auch die Allgemeinen Felder anpassen. Schlagen Sie unter
-    <a href="CustomEntriesHelp.html">Eintragstypen anpassen</a>
-    nach, wenn Sie mehr Informationen darüber erhalten
-    möchten.</p>
-
-    <p>Nähere Informationen darüber, was in die Felder
-    eingetragen werden soll, finden sie in der
-    <a href="BibtexHelp.html">Bibtex Hilfe</a>.</p>
-
-    <h2>Die Panels des Eintrags-Editors</h2>
-
-    <p>Der Eintrags-Editor
-    besteht in der Standardeinstellung aus fünf Panels:
-    <em>Benötigte Felder</em>, <em>Optionale Felder</em>,
-    <em>General</em>, <em>Abstract</em> und <em>BibTeX
-    Quelltext</em>, wobei <em>General</em> und <em>Abstract</em>
-    vom Benutzer angepasst werden können (siehe dazu
-    <a href="GeneralFields.html">Allgemeine Felder festlegen</a>).
-    In den ersten drei Panels können Sie mit TAB und SHIFT-TAB
-    zwischen den einzelnen Feldern hin- und herwechseln.</p>
-
-    <p>Zu einem anderen Panel gelangen Sie, indem Sie auf die Tabs
-    klicken. Mit den folgenden Tastaturkürzeln können Sie
-    ebenfalls zwischen den Panels navigieren: CTRL-TAB oder
-    CTRL-PLUS wechselt zum Panel rechts vom aktuellen Panel,
-    CTRL-SHIFT-TAB oder CTRL-MINUS wechselt dementsprechend zum
-    Panel links vom aktuellen Panel. Außerdem können Sie
-    zum nächsten oder vorherigen Eintrag wechseln, indem Sie
-    "STRG-SHIFT-Pfeil nach unten" bzw. "STRG-SHIFT-Pfeil nach oben"
-    oder die Pfeiltasten in der linken Toolbar drücken.</p>
-
-    <p>Das Panel <em>BibTeX Quelltext</em> zeigt, wie der Eintrag
-    aussehen wird, wenn die Datei im <em>bibtex</em>-Format
-    gespeichert wird. Wenn Sie wollen, können Sie den
-    <em>BibTeX</em> Quelltext direkt bearbeiten. Sobald Sie zu
-    einem anderen Panel wechseln, STRG-S drücken oder den
-    Eintrags-Editor schließen, wird JabRef versuchen, den
-    Inhalt des Quelltext-Panels zu analysieren. Falls dabei
-    Probleme auftreten, werden Sie benachrichtigt und erhalten die
-    Möglichkeit, den Eintrag noch einmal zu überarbeiten
-    oder den vorherigen Inhalt wiederherzustellen. Wenn in den
-    <strong>Einstellungen</strong> (unter
-    <strong>Allgemein</strong>) die Option <strong>Quelltext
-    standardmäßig anzeigen</strong> gewählt wurde,
-    wird das Quelltext-Panel beim Öffnen des Eintrags-Editors
-    als erstes angezeigt. Wenn Sie lieber den Quelltext bearbeiten
-    als die anderen Panels zu benutzen, sollten Sie diese Option
-    wählen.</p>
-
-    <p><strong>Tip:</strong> Wenn Ihre Datei Felder enthält,
-    die JabRef nicht kennt, erscheinen diese im
-    Quelltext-Panel.</p>
-
-    <p><strong>Tip:</strong> Die <i>pdf</i> und <i>url</i>-Felder
-    unterstützen Drag & Drop. Sie können z.B. ein URL
-    aus Ihrem Browser dort einfügen.</p>
-
-    <h2>Überprüfung der Feldkonsistenz</h2>
-
-    <p>Wenn der
-    Inhalt eines Feldes geändert wird, überprüft
-    JabRef, ob der neue Inhalt akzeptiert werden kann. Bei Feldern,
-    die von <em>BibTeX</em> genutzt werden, wird der Inhalt zum
-    einen auf die richtige Klammerung mit geschweiften Klammern,
-    aber auch auf die Benutzung des Zeichens '#' hin
-    überprüft. Das "hash"-Symbol darf <em>nur</em>
-    paarweise benutzt werden, um damit den Namen eines
-    <em>BibTeX</em>-Strings einzuschließen. Beachten Sie,
-    dass JabRef nicht überprüft, ob der angeführte
-    String tatsächlich vorhanden ist (der
-    <em>BibTeX</em>-Stil, den Sie benutzen, kann eine beliebige
-    Anzahl von Strings definieren, die JabRef nicht kennt).</p>
-
-    <p>Falls die Inhalte nicht akzeptabel sind, wird das Feld mit
-    roter Farbe hinterlegt, was auf einen Fehler hindeutet. In
-    diesem Fall werden die Änderungen nicht gespeichert.</p>
-
-    <h2>Autovervollständigung von Wörtern und Namen</h2>
-
-    <p>Der Eintragseditor bietet die Autovervollständigung von Wörtern.
-    Im Dialog <em>Optionen -> Einstellungen</em> können Sie auswählen,
-    in welchen Feldern die Autovervollständigung aktiviert werden soll.</p>
-
-    <p>Bei aktiver Autovervollständigung zeichnet JabRef alle Worte
-	auf, die in jedem der ausgewählten Felder der Datei vorkommen.
-	Immer wenn Sie den Anfang eines dieser Wörter schreiben, wird das
-	Wort sichtbar vorgeschlagen. Sie können den Vorschlag ignorieren,
-	indem Sie einfach weiterschreiben. Um den Vorschlag anzunehmen,
-	drücken Sie entweder auf <em>ENTER</em> oder benutzen die Pfeiltasten
-	oder andere Tasten, um die Auswahlbox um die vorgeschlagenen Buchstaben
-	zu entfernen.</p>
-
-    <p><em>Anmerkung:</em> Bei den Wörtern, die für
-    die Vorschläge berücksichtigt werden, handelt es sich nur um
-    solche, die in demselben Feld in Einträgen der Datei vorkommen, die Sie
-    gerade bearbeiten. Es gibt viele Möglichkeiten, um dieses Feature
-    zu realisieren, und wenn Sie der Meinung sind, das es auf eine andere
-    Art implementiert werden sollte, würden wir gerne Ihre
-    Vorschläge hören.</p>
-
-    <h2><em>BibTeX</em> Key kopieren</h2>
-
-    <p>Mit STRG-K oder dem 'Key'-Knopf wird der <em>BibTeX</em> Key des
-    ausgewählten Eintrags mit umgebenden <code>\cite{...}</code> in die Zwischenablage kopiert.</p>
-
-    <h2>Nur <em>BibTeX</em> Key kopieren</h2>
-
-    <p>Mit STRG-SHIFT-K wird der <em>BibTeX</em> Key des
-    ausgewählten Eintrags in die Zwischenablage kopiert.</p>
-
-    <h2><em>BibTeX</em> Key automatisch generieren</h2>
-
-    <p>Um einen
-    <em>BibTeX</em> Key für einen Eintrag automatisch
-    erstellen zu lassen, drücken Sie STRG-G oder den
-    entsprechenden (Zauberstab-)Knopf in der Toolbar-Leiste.</p>
-
-    <p>Für nähere Informationen, wie die <em>BibTeX</em>
-    Keys generiert werden, schauen Sie bitte unter
-    <a href="LabelPatterns.html">Anpassen der automatischen
-    Generierung von BibTeX-keys</a> nach.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Der Eintrags-Editor</h1>
+
+    <p><em>Geöffnet wird der
+    Eintrags-Editor im Hauptfenster durch einen Doppelklick auf die
+    Zeile eines Eintrags oder durch Drücken auf ENTER. Der
+    Eintrags-Editor wird geschlossen, indem man auf ESC
+    drückt.</em></p>
+
+    <p>Im Eintrags-Editor können Sie alle relevanten
+    Informationen eines Eintrags festlegen. Der Editor
+    überprüft den Eintragstyp und zeigt alle
+    benötigten und optionalen Felder für den Gebrauch mit
+    <em>BibTeX</em> an. Darüber hinaus gibt es einige Felder,
+    die <em>Allgemeine Felder</em> genannt werden und für alle
+    Eintragstypen gelten.</p>
+
+    <p>Sie können die Felder, die für die einzelnen
+    Eintragstypen als benötigt und optional angesehen werden,
+    und auch die Allgemeinen Felder anpassen. Schlagen Sie unter
+    <a href="CustomEntriesHelp.html">Eintragstypen anpassen</a>
+    nach, wenn Sie mehr Informationen darüber erhalten
+    möchten.</p>
+
+    <p>Nähere Informationen darüber, was in die Felder
+    eingetragen werden soll, finden sie in der
+    <a href="BibtexHelp.html">Bibtex Hilfe</a>.</p>
+
+    <h2>Die Panels des Eintrags-Editors</h2>
+
+    <p>Der Eintrags-Editor
+    besteht in der Standardeinstellung aus fünf Panels:
+    <em>Benötigte Felder</em>, <em>Optionale Felder</em>,
+    <em>General</em>, <em>Abstract</em> und <em>BibTeX
+    Quelltext</em>, wobei <em>General</em> und <em>Abstract</em>
+    vom Benutzer angepasst werden können (siehe dazu
+    <a href="GeneralFields.html">Allgemeine Felder festlegen</a>).
+    In den ersten drei Panels können Sie mit TAB und SHIFT-TAB
+    zwischen den einzelnen Feldern hin- und herwechseln.</p>
+
+    <p>Zu einem anderen Panel gelangen Sie, indem Sie auf die Tabs
+    klicken. Mit den folgenden Tastaturkürzeln können Sie
+    ebenfalls zwischen den Panels navigieren: CTRL-TAB oder
+    CTRL-PLUS wechselt zum Panel rechts vom aktuellen Panel,
+    CTRL-SHIFT-TAB oder CTRL-MINUS wechselt dementsprechend zum
+    Panel links vom aktuellen Panel. Außerdem können Sie
+    zum nächsten oder vorherigen Eintrag wechseln, indem Sie
+    "STRG-SHIFT-Pfeil nach unten" bzw. "STRG-SHIFT-Pfeil nach oben"
+    oder die Pfeiltasten in der linken Toolbar drücken.</p>
+
+    <p>Das Panel <em>BibTeX Quelltext</em> zeigt, wie der Eintrag
+    aussehen wird, wenn die Datei im <em>bibtex</em>-Format
+    gespeichert wird. Wenn Sie wollen, können Sie den
+    <em>BibTeX</em> Quelltext direkt bearbeiten. Sobald Sie zu
+    einem anderen Panel wechseln, STRG-S drücken oder den
+    Eintrags-Editor schließen, wird JabRef versuchen, den
+    Inhalt des Quelltext-Panels zu analysieren. Falls dabei
+    Probleme auftreten, werden Sie benachrichtigt und erhalten die
+    Möglichkeit, den Eintrag noch einmal zu überarbeiten
+    oder den vorherigen Inhalt wiederherzustellen. Wenn in den
+    <strong>Einstellungen</strong> (unter
+    <strong>Allgemein</strong>) die Option <strong>Quelltext
+    standardmäßig anzeigen</strong> gewählt wurde,
+    wird das Quelltext-Panel beim Öffnen des Eintrags-Editors
+    als erstes angezeigt. Wenn Sie lieber den Quelltext bearbeiten
+    als die anderen Panels zu benutzen, sollten Sie diese Option
+    wählen.</p>
+
+    <p><strong>Tip:</strong> Wenn Ihre Datei Felder enthält,
+    die JabRef nicht kennt, erscheinen diese im
+    Quelltext-Panel.</p>
+
+    <p><strong>Tip:</strong> Die <i>pdf</i> und <i>url</i>-Felder
+    unterstützen Drag & Drop. Sie können z.B. ein URL
+    aus Ihrem Browser dort einfügen.</p>
+
+    <h2>Überprüfung der Feldkonsistenz</h2>
+
+    <p>Wenn der
+    Inhalt eines Feldes geändert wird, überprüft
+    JabRef, ob der neue Inhalt akzeptiert werden kann. Bei Feldern,
+    die von <em>BibTeX</em> genutzt werden, wird der Inhalt zum
+    einen auf die richtige Klammerung mit geschweiften Klammern,
+    aber auch auf die Benutzung des Zeichens '#' hin
+    überprüft. Das "hash"-Symbol darf <em>nur</em>
+    paarweise benutzt werden, um damit den Namen eines
+    <em>BibTeX</em>-Strings einzuschließen. Beachten Sie,
+    dass JabRef nicht überprüft, ob der angeführte
+    String tatsächlich vorhanden ist (der
+    <em>BibTeX</em>-Stil, den Sie benutzen, kann eine beliebige
+    Anzahl von Strings definieren, die JabRef nicht kennt).</p>
+
+    <p>Falls die Inhalte nicht akzeptabel sind, wird das Feld mit
+    roter Farbe hinterlegt, was auf einen Fehler hindeutet. In
+    diesem Fall werden die Änderungen nicht gespeichert.</p>
+
+    <h2>Autovervollständigung von Wörtern und Namen</h2>
+
+    <p>Der Eintragseditor bietet die Autovervollständigung von Wörtern.
+    Im Dialog <em>Optionen -> Einstellungen</em> können Sie auswählen,
+    in welchen Feldern die Autovervollständigung aktiviert werden soll.</p>
+
+    <p>Bei aktiver Autovervollständigung zeichnet JabRef alle Worte
+	auf, die in jedem der ausgewählten Felder der Datei vorkommen.
+	Immer wenn Sie den Anfang eines dieser Wörter schreiben, wird das
+	Wort sichtbar vorgeschlagen. Sie können den Vorschlag ignorieren,
+	indem Sie einfach weiterschreiben. Um den Vorschlag anzunehmen,
+	drücken Sie entweder auf <em>ENTER</em> oder benutzen die Pfeiltasten
+	oder andere Tasten, um die Auswahlbox um die vorgeschlagenen Buchstaben
+	zu entfernen.</p>
+
+    <p><em>Anmerkung:</em> Bei den Wörtern, die für
+    die Vorschläge berücksichtigt werden, handelt es sich nur um
+    solche, die in demselben Feld in Einträgen der Datei vorkommen, die Sie
+    gerade bearbeiten. Es gibt viele Möglichkeiten, um dieses Feature
+    zu realisieren, und wenn Sie der Meinung sind, das es auf eine andere
+    Art implementiert werden sollte, würden wir gerne Ihre
+    Vorschläge hören.</p>
+
+    <h2><em>BibTeX</em> Key kopieren</h2>
+
+    <p>Mit STRG-K oder dem 'Key'-Knopf wird der <em>BibTeX</em> Key des
+    ausgewählten Eintrags mit umgebenden <code>\cite{...}</code> in die Zwischenablage kopiert.</p>
+
+    <h2>Nur <em>BibTeX</em> Key kopieren</h2>
+
+    <p>Mit STRG-SHIFT-K wird der <em>BibTeX</em> Key des
+    ausgewählten Eintrags in die Zwischenablage kopiert.</p>
+
+    <h2><em>BibTeX</em> Key automatisch generieren</h2>
+
+    <p>Um einen
+    <em>BibTeX</em> Key für einen Eintrag automatisch
+    erstellen zu lassen, drücken Sie STRG-G oder den
+    entsprechenden (Zauberstab-)Knopf in der Toolbar-Leiste.</p>
+
+    <p>Für nähere Informationen, wie die <em>BibTeX</em>
+    Keys generiert werden, schauen Sie bitte unter
+    <a href="LabelPatterns.html">Anpassen der automatischen
+    Generierung von BibTeX-keys</a> nach.</p>
+</body>
+</html>
diff --git a/src/help/de/ExternalFiles.html b/src/help/de/ExternalFiles.html
index d877853..f870473 100644
--- a/src/help/de/ExternalFiles.html
+++ b/src/help/de/ExternalFiles.html
@@ -1,153 +1,153 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Links zu PDF- und PS-Dateien, URLs und DOIs in
-    JabRef</h1>
-
-    <p><b>Anmerkung:</b> Ab JabRef 2.3 gibt es ein
-    <a href="FileLinks.html">verbessertes System für Links zu
-    externen Dateien</a>.</p>
-
-    <p>Mit JabRef können Sie Ihre Einträge mit den
-    entsprechenden PDF- oder PS-Dateien, die sich auf Ihrem
-    Computer befinden, verlinken. Ebenso ist es möglich,
-    Dateien im Internet über ein URL oder DOI zu
-    verlinken.</p>
-
-    <h2>Externe Betrachter einrichten</h2>
-
-    <p>JabRef benötigt
-    Informationen darüber, welche Programme es für PDF-
-    und PS-Dateien und Internetseiten benutzen soll. In der
-    Standardeinstellung werden sie auf Werte gesetzt, die
-    wahrscheinlich zu Ihrem Betriebssystem passen, so dass eine
-    gute Chance besteht, dass Sie diese Werte nicht zu
-    verändern brauchen.</p>
-
-    <p>Um die Einstellungen der externen Programme zu ändern,
-    öffnen Sie den Unterpunkt <em>Externe Programme</em> im
-    Dialog <em>Optionen -> Einstellungen</em>.</p>
-
-    <h2>Externe Dateien oder Links öffnen</h2>
-
-    <p>Es gibt
-    verschiedene Möglichkeiten, wie man externe Dateien oder
-    Internetseiten aus JabRef öffnen kann. Im Eintrags-Editor
-    können Sie einfach auf das Textfeld, das ein DOI oder URL
-    enthält, doppelklicken. In der Tabellenansicht können
-    Sie einen Eintrag auswählen und die Menüeinträge
-    (unter <em>Extras</em>), die Tastenkombinationen (in der
-    Standardeinstellung F4 für PDF/PS und F3 für DOI/URL)
-    oder das Kontextmenü (mit der rechten Maustaste) benutzen,
-    um die Datei oder Internetseite zu öffnen.
-    Schließlich können Sie auch auf ein PDF-, PS-, URL-
-    oder DOI-Icon in der Tabelle klicken.</p>
-
-    <p>In der Standardeinstellung zeigt die Tabellenansicht zwei
-    Spalten mit Icons für die Einträge, die mit externen
-    Dateien oder URLs verlinkt sind. Beide Spalten können im
-    Unterpunkt <em>Tabellenansicht</em> des Dialogs <em>Optionen
-    -> Einstellungen</em> ausgeblendet werden. Die zweite Spalte
-    zeigt Icons für PDF- oder PS-Dateien (nur PDF, wenn beide
-    vorhanden sind), die dritte Spalte zeigt Icons für URL
-    oder DOI (nur URL, wenn beide vorhanden sind).</p>
-
-    <h2>Der Standard-Ordner für PDF-Dateien</h2>
-
-    <p>PDF-Dateien
-    erhalten von JabRef eine "Spezialbehandlung", um das Verlinken
-    mit den entsprechenden Einträgen so einfach wie
-    möglich zu gestalten. Um diese "Spezialbehandlung" nutzen
-    zu können, müssen Sie im Unterpunkt <em>Externe
-    Programme</em> des Dialogs <em>Optionen ->
-    Einstellungen</em> einen Ordner als Standard-Ordner für
-    Ihre PDF-Dateien angeben. Alle PDF-Dateien, die in diesem
-    Ordner oder einem Unterordner gespeichert sind, werden mit
-    einer relativen Pfadangabe referenziert, so dass Sie problemlos
-    PDF-Verzeichnisse verschieben oder mit mehreren Benutzern von
-    verschiedenen Netzwerkarbeitsplätzen aus an derselben
-    Datei arbeiten können.</p>
-
-    <p>Wenn Sie Ihren PDF-Dateien dann noch Namen geben, die mit
-    dem BibTeX Key des entsprechenden Eintrags übereinstimmen
-    (plus '.pdf' im Dateinamen), sucht JabRef in Ihrem
-    Standard-PDF-Ordner und dessen Unterordnern nach der richtigen
-    PDF-Datei. Sobald die korrekt benannte PDF-Datei sich dort
-    befindet, klicken Sie auf die Schaltfläche <em>Auto</em>
-    neben dem PDF-Feld im Eintrags-Editor. Wenn die PDF-Datei
-    gefunden wird, wird das Feld entsprechend gesetzt.</p>
-
-    <p>Wenn Sie eine PDF-Datei wie beschrieben benennen,
-    können Sie sie auch öffnen, ohne das PDF-Feld
-    überhaupt zu benutzen. Der Nachteil ist in diesem Fall
-    allerdings, dass das PDF-Icon in der Tabellenansicht nicht
-    angezeigt wird, solange das PDF-Feld leer bleibt.</p>
-
-    <h2>Dateispezifische PDF- und PS-Verzeichnisse</h2>
-
-    <p>Sie können für jede Datei eigene PDF- und
-    PS-Verzeichnisse angeben (<b>Datei -> Eigenschaften der
-    Datei</b>). Diese Verzeichnisse ersetzen dann die
-    Standardverzeichnisse.</p>
-
-    <h2><a name="RegularExpressionSearch"
-       id="RegularExpressionSearch">Die Suche mit regulären
-       Ausdrücken für automatische Verknüpfungen
-       nutzen</a></h2>
-
-    <p>Wenn Sie Dateinamen verwenden, die dem bibtexkey
-    ergänzt um die Dateiendung entsprechen, findet JabRef
-    diese Dateien automatisch.</p>
-
-    <p>Ab Version 2.2 ist mit Hilfe von regulären
-    Ausdrücken eine größere Flexibilität beim
-    Benennen der Dateien gewährleistet. In den meisten
-    Fällen dürfte das Standardverhalten bereits
-    ausreichend sein.</p>
-
-    <p>In den Einstellungen zu externen Programmen (<b>Optionen
-    -> Einstellungen -> Externe Programme</b>) findet sich
-    eine Option "Suche mit regulärem Ausdruck benutzen". Wenn
-    Sie diese Option aktivieren, können Sie für die Suche
-    in PDF-Verzeichnissen einen eigenen regulären Ausdruck
-    angeben.</p>
-
-    <p>Die folgende Syntax wird verwendet:</p>
-
-    <ul>
-        <li><code>*</code> - Suche in allen direkten
-        Unterverzeichnissen, NICHT im aktuellen Verzeichnis und in
-        Unterverzeichnissen zweiter oder tieferer Ebene.</li>
-
-        <li><code>**</code> - Rekursive Suche in allen
-        Unterverzeichnissen UND im aktuellen Verzeichnis.</li>
-
-        <li><code>.</code> und <code>..</code> - Das aktuelle
-        Verzeichnis und das Elternverzeichnis (eine Ebene
-        höher).</li>
-
-        <li><code>[title]</code> - Alle Ausdrücke in eckigen
-        Klammern werden durch den Inhalt des entsprechenden Felds
-        ersetzt.</li>
-
-        <li><code>[extension]</code> - Wird durch die Dateiendung
-        des Feldes, das Sie benutzen, ersetzt.</li>
-
-        <li>Anderer Text wird als regulärer Ausdruck
-        interpretiert. Aber Vorsicht: <em>backslashes</em>
-        müssen mit einem weiteren <em>backslash</em>
-        <em>escaped</em> werden (<tt>\\</tt>), damit sie nicht mit
-        Separatoren in Pfad-Angaben verwechselt werden.</li>
-    </ul>
-
-    <p>Der Standard ist
-    <code>**/.*[bibtexkey].*\\.[extension]</code>. Damit wird in
-    allen Unterverzeichnissen des Ordners der entsprechenden
-    Dateiendung (z.B. das PDF-Verzeichnis) nach allen Dateien mit
-    der richtigen Dateiendung gesucht, die den bibtexkey in ihrem
-    Namen haben.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Links zu PDF- und PS-Dateien, URLs und DOIs in
+    JabRef</h1>
+
+    <p><b>Anmerkung:</b> Ab JabRef 2.3 gibt es ein
+    <a href="FileLinks.html">verbessertes System für Links zu
+    externen Dateien</a>.</p>
+
+    <p>Mit JabRef können Sie Ihre Einträge mit den
+    entsprechenden PDF- oder PS-Dateien, die sich auf Ihrem
+    Computer befinden, verlinken. Ebenso ist es möglich,
+    Dateien im Internet über ein URL oder DOI zu
+    verlinken.</p>
+
+    <h2>Externe Betrachter einrichten</h2>
+
+    <p>JabRef benötigt
+    Informationen darüber, welche Programme es für PDF-
+    und PS-Dateien und Internetseiten benutzen soll. In der
+    Standardeinstellung werden sie auf Werte gesetzt, die
+    wahrscheinlich zu Ihrem Betriebssystem passen, so dass eine
+    gute Chance besteht, dass Sie diese Werte nicht zu
+    verändern brauchen.</p>
+
+    <p>Um die Einstellungen der externen Programme zu ändern,
+    öffnen Sie den Unterpunkt <em>Externe Programme</em> im
+    Dialog <em>Optionen -> Einstellungen</em>.</p>
+
+    <h2>Externe Dateien oder Links öffnen</h2>
+
+    <p>Es gibt
+    verschiedene Möglichkeiten, wie man externe Dateien oder
+    Internetseiten aus JabRef öffnen kann. Im Eintrags-Editor
+    können Sie einfach auf das Textfeld, das ein DOI oder URL
+    enthält, doppelklicken. In der Tabellenansicht können
+    Sie einen Eintrag auswählen und die Menüeinträge
+    (unter <em>Extras</em>), die Tastenkombinationen (in der
+    Standardeinstellung F4 für PDF/PS und F3 für DOI/URL)
+    oder das Kontextmenü (mit der rechten Maustaste) benutzen,
+    um die Datei oder Internetseite zu öffnen.
+    Schließlich können Sie auch auf ein PDF-, PS-, URL-
+    oder DOI-Icon in der Tabelle klicken.</p>
+
+    <p>In der Standardeinstellung zeigt die Tabellenansicht zwei
+    Spalten mit Icons für die Einträge, die mit externen
+    Dateien oder URLs verlinkt sind. Beide Spalten können im
+    Unterpunkt <em>Tabellenansicht</em> des Dialogs <em>Optionen
+    -> Einstellungen</em> ausgeblendet werden. Die zweite Spalte
+    zeigt Icons für PDF- oder PS-Dateien (nur PDF, wenn beide
+    vorhanden sind), die dritte Spalte zeigt Icons für URL
+    oder DOI (nur URL, wenn beide vorhanden sind).</p>
+
+    <h2>Der Standard-Ordner für PDF-Dateien</h2>
+
+    <p>PDF-Dateien
+    erhalten von JabRef eine "Spezialbehandlung", um das Verlinken
+    mit den entsprechenden Einträgen so einfach wie
+    möglich zu gestalten. Um diese "Spezialbehandlung" nutzen
+    zu können, müssen Sie im Unterpunkt <em>Externe
+    Programme</em> des Dialogs <em>Optionen ->
+    Einstellungen</em> einen Ordner als Standard-Ordner für
+    Ihre PDF-Dateien angeben. Alle PDF-Dateien, die in diesem
+    Ordner oder einem Unterordner gespeichert sind, werden mit
+    einer relativen Pfadangabe referenziert, so dass Sie problemlos
+    PDF-Verzeichnisse verschieben oder mit mehreren Benutzern von
+    verschiedenen Netzwerkarbeitsplätzen aus an derselben
+    Datei arbeiten können.</p>
+
+    <p>Wenn Sie Ihren PDF-Dateien dann noch Namen geben, die mit
+    dem BibTeX Key des entsprechenden Eintrags übereinstimmen
+    (plus '.pdf' im Dateinamen), sucht JabRef in Ihrem
+    Standard-PDF-Ordner und dessen Unterordnern nach der richtigen
+    PDF-Datei. Sobald die korrekt benannte PDF-Datei sich dort
+    befindet, klicken Sie auf die Schaltfläche <em>Auto</em>
+    neben dem PDF-Feld im Eintrags-Editor. Wenn die PDF-Datei
+    gefunden wird, wird das Feld entsprechend gesetzt.</p>
+
+    <p>Wenn Sie eine PDF-Datei wie beschrieben benennen,
+    können Sie sie auch öffnen, ohne das PDF-Feld
+    überhaupt zu benutzen. Der Nachteil ist in diesem Fall
+    allerdings, dass das PDF-Icon in der Tabellenansicht nicht
+    angezeigt wird, solange das PDF-Feld leer bleibt.</p>
+
+    <h2>Dateispezifische PDF- und PS-Verzeichnisse</h2>
+
+    <p>Sie können für jede Datei eigene PDF- und
+    PS-Verzeichnisse angeben (<b>Datei -> Eigenschaften der
+    Datei</b>). Diese Verzeichnisse ersetzen dann die
+    Standardverzeichnisse.</p>
+
+    <h2><a name="RegularExpressionSearch"
+       id="RegularExpressionSearch">Die Suche mit regulären
+       Ausdrücken für automatische Verknüpfungen
+       nutzen</a></h2>
+
+    <p>Wenn Sie Dateinamen verwenden, die dem bibtexkey
+    ergänzt um die Dateiendung entsprechen, findet JabRef
+    diese Dateien automatisch.</p>
+
+    <p>Ab Version 2.2 ist mit Hilfe von regulären
+    Ausdrücken eine größere Flexibilität beim
+    Benennen der Dateien gewährleistet. In den meisten
+    Fällen dürfte das Standardverhalten bereits
+    ausreichend sein.</p>
+
+    <p>In den Einstellungen zu externen Programmen (<b>Optionen
+    -> Einstellungen -> Externe Programme</b>) findet sich
+    eine Option "Suche mit regulärem Ausdruck benutzen". Wenn
+    Sie diese Option aktivieren, können Sie für die Suche
+    in PDF-Verzeichnissen einen eigenen regulären Ausdruck
+    angeben.</p>
+
+    <p>Die folgende Syntax wird verwendet:</p>
+
+    <ul>
+        <li><code>*</code> - Suche in allen direkten
+        Unterverzeichnissen, NICHT im aktuellen Verzeichnis und in
+        Unterverzeichnissen zweiter oder tieferer Ebene.</li>
+
+        <li><code>**</code> - Rekursive Suche in allen
+        Unterverzeichnissen UND im aktuellen Verzeichnis.</li>
+
+        <li><code>.</code> und <code>..</code> - Das aktuelle
+        Verzeichnis und das Elternverzeichnis (eine Ebene
+        höher).</li>
+
+        <li><code>[title]</code> - Alle Ausdrücke in eckigen
+        Klammern werden durch den Inhalt des entsprechenden Felds
+        ersetzt.</li>
+
+        <li><code>[extension]</code> - Wird durch die Dateiendung
+        des Feldes, das Sie benutzen, ersetzt.</li>
+
+        <li>Anderer Text wird als regulärer Ausdruck
+        interpretiert. Aber Vorsicht: <em>backslashes</em>
+        müssen mit einem weiteren <em>backslash</em>
+        <em>escaped</em> werden (<tt>\\</tt>), damit sie nicht mit
+        Separatoren in Pfad-Angaben verwechselt werden.</li>
+    </ul>
+
+    <p>Der Standard ist
+    <code>**/.*[bibtexkey].*\\.[extension]</code>. Damit wird in
+    allen Unterverzeichnissen des Ordners der entsprechenden
+    Dateiendung (z.B. das PDF-Verzeichnis) nach allen Dateien mit
+    der richtigen Dateiendung gesucht, die den bibtexkey in ihrem
+    Namen haben.</p>
+</body>
+</html>
diff --git a/src/help/de/FileLinks.html b/src/help/de/FileLinks.html
index bf4d395..7d80199 100644
--- a/src/help/de/FileLinks.html
+++ b/src/help/de/FileLinks.html
@@ -1,85 +1,85 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Datei-Links in JabRef</h1>
-
-    <p>JabRef lässt Sie Ihre
-    Einträge mit Dateien jeden Typs verlinken, die Sie auf
-    Ihrem System gespeichert haben. Außerdem sind Links zu
-    Dokumenten im Internet in der Form eines URL oder eines DOI
-    möglich. Jedem Eintrag kann eine beliebige Anzahl von
-    Datei-Links zugeordnet werden und jede verlinkte Datei kann
-    schnell aus JabRef heraus geöffnet werden.</p>
-
-    <p>Was BibTeX angeht, werden die Datei-Links eines Eintrags in
-    ein einzelnes Feld geschrieben. In JabRef erscheinen sie aber
-    als editierbare Liste von Links, die im Eintrags-Editor
-    zugänglich sind.</p>
-
-    <h2>Einrichten der Dateitypen</h2>
-
-    <p>Für jeden Datei-Link
-    muss ein Dateityp gewählt werden, damit das richtige
-    Programm zum Öffnen der Datei und das entsprechende Icon
-    gefunden werden. Die Liste der Dateitypen können Sie
-    einsehen und bearbeiten, indem Sie <b>Optionen -> Externe
-    Dateitypen verwalten</b> wählen oder auf die
-    Schaltfläche <b>Externe Dateitypen verwalten</b> im
-    Bereich <b>Externe Programme</b> des Einstellungs-Dialogs
-    klicken.</p>
-
-    <p>Ein Dateityp besteht aus einem Namen, einem graphischen
-    Icon, einer Dateierweiterung und einer Anwendung zum
-    Öffnen der Dateien. Wenn Sie Windows benutzen, können
-    Sie den Namen der Anwendung weglassen, wenn Sie das
-    Standardprogramm verwenden wollen.</p>
-
-    <h2>Datei-Links zu einem Eintrag hinzufügen</h2>
-
-    <p>Wenn bei
-    den <a href="GeneralFields.html">Allgemeinen Feldern</a> das
-    Feld "file" eingetragen ist, können Sie die Liste der
-    externen Links im
-    <a href="EntryEditorHelp.html">Eintrags-Editor</a> bearbeiten.
-    Der Editor hat dann Schaltflächen zum Einfügen,
-    Bearbeiten, Löschen und Sortieren der Links.</p>
-
-    <p>Eine Datei kann mit Hilfe der <b>Auto</b>-Schaltfläche
-    automatisch verlinkt werden, falls sie in Ihrem
-    Dateiverzeichnis (<b>Einstellungen -> Externe Programme
-    -> Links zu externen Dateien -> Hauptverzeichnis</b>)
-    oder einem Unterordner liegt, eine Dateierweiterung hat, die
-    JabRef bekannt ist, und einen Namen hat, der mit dem BibTeX-Key
-    des Eintrags übereinstimmt. Die Regeln, nach denen
-    Dateinamen mit BibTeX-Keys automatisch verknüpft werden,
-    können eingestellt werden unter <b>Einstellungen ->
-    Externe Programme -> Links zu externen Dateien -> Suche
-    mit regulärem Ausdruck benutzen</b>.</p>
-
-    <p>Um eine Datei herunterzuladen und mit einem Eintrag zu
-    verlinken, benutzen Sie die Schaltfläche <b>Download</b>
-    im Eintrags-Editor. Es erscheint ein Dialog, in dem Sie den URL
-    eingeben müssen. Die Datei wird dann in Ihr
-    Hauptverzeichnis gespeichert, anhand des BibTeX-Keys benannt
-    und mit dem Eintrag verknüpft.</p>
-
-    <h2>Externe Dateien öffnen</h2>
-
-    <p>Es gibt mehrere
-    Möglichkeiten, externe Dateien oder Internetseiten zu
-    öffnen. In der Tabellenansicht können Sie einen
-    Eintrag auswählen und mit dem Menü, einem
-    Tastenkürzel oder dem Kontextmenü den ersten externen
-    Link öffnen. Falls in der Tabellenansicht die Spalte
-    <b>file</b> angezeigt wird (<b>Einstellungen ->
-    Tabellenansicht -> Spezielle Spalten -> Datei-Spalten
-    anzeigen</b>), können Sie auch auf das Icon klicken, um
-    den ersten Link eines Eintrags zu öffnen. Um weitere Links
-    zu öffnen, klicken Sie mit der rechten Maustaste auf das
-    Icon (Mac OS X: <b>Strg-Klick</b>); es erscheint dann ein
-    Menü mit allen Links.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Datei-Links in JabRef</h1>
+
+    <p>JabRef lässt Sie Ihre
+    Einträge mit Dateien jeden Typs verlinken, die Sie auf
+    Ihrem System gespeichert haben. Außerdem sind Links zu
+    Dokumenten im Internet in der Form eines URL oder eines DOI
+    möglich. Jedem Eintrag kann eine beliebige Anzahl von
+    Datei-Links zugeordnet werden und jede verlinkte Datei kann
+    schnell aus JabRef heraus geöffnet werden.</p>
+
+    <p>Was BibTeX angeht, werden die Datei-Links eines Eintrags in
+    ein einzelnes Feld geschrieben. In JabRef erscheinen sie aber
+    als editierbare Liste von Links, die im Eintrags-Editor
+    zugänglich sind.</p>
+
+    <h2>Einrichten der Dateitypen</h2>
+
+    <p>Für jeden Datei-Link
+    muss ein Dateityp gewählt werden, damit das richtige
+    Programm zum Öffnen der Datei und das entsprechende Icon
+    gefunden werden. Die Liste der Dateitypen können Sie
+    einsehen und bearbeiten, indem Sie <b>Optionen -> Externe
+    Dateitypen verwalten</b> wählen oder auf die
+    Schaltfläche <b>Externe Dateitypen verwalten</b> im
+    Bereich <b>Externe Programme</b> des Einstellungs-Dialogs
+    klicken.</p>
+
+    <p>Ein Dateityp besteht aus einem Namen, einem graphischen
+    Icon, einer Dateierweiterung und einer Anwendung zum
+    Öffnen der Dateien. Wenn Sie Windows benutzen, können
+    Sie den Namen der Anwendung weglassen, wenn Sie das
+    Standardprogramm verwenden wollen.</p>
+
+    <h2>Datei-Links zu einem Eintrag hinzufügen</h2>
+
+    <p>Wenn bei
+    den <a href="GeneralFields.html">Allgemeinen Feldern</a> das
+    Feld "file" eingetragen ist, können Sie die Liste der
+    externen Links im
+    <a href="EntryEditorHelp.html">Eintrags-Editor</a> bearbeiten.
+    Der Editor hat dann Schaltflächen zum Einfügen,
+    Bearbeiten, Löschen und Sortieren der Links.</p>
+
+    <p>Eine Datei kann mit Hilfe der <b>Auto</b>-Schaltfläche
+    automatisch verlinkt werden, falls sie in Ihrem
+    Dateiverzeichnis (<b>Einstellungen -> Externe Programme
+    -> Links zu externen Dateien -> Hauptverzeichnis</b>)
+    oder einem Unterordner liegt, eine Dateierweiterung hat, die
+    JabRef bekannt ist, und einen Namen hat, der mit dem BibTeX-Key
+    des Eintrags übereinstimmt. Die Regeln, nach denen
+    Dateinamen mit BibTeX-Keys automatisch verknüpft werden,
+    können eingestellt werden unter <b>Einstellungen ->
+    Externe Programme -> Links zu externen Dateien -> Suche
+    mit regulärem Ausdruck benutzen</b>.</p>
+
+    <p>Um eine Datei herunterzuladen und mit einem Eintrag zu
+    verlinken, benutzen Sie die Schaltfläche <b>Download</b>
+    im Eintrags-Editor. Es erscheint ein Dialog, in dem Sie den URL
+    eingeben müssen. Die Datei wird dann in Ihr
+    Hauptverzeichnis gespeichert, anhand des BibTeX-Keys benannt
+    und mit dem Eintrag verknüpft.</p>
+
+    <h2>Externe Dateien öffnen</h2>
+
+    <p>Es gibt mehrere
+    Möglichkeiten, externe Dateien oder Internetseiten zu
+    öffnen. In der Tabellenansicht können Sie einen
+    Eintrag auswählen und mit dem Menü, einem
+    Tastenkürzel oder dem Kontextmenü den ersten externen
+    Link öffnen. Falls in der Tabellenansicht die Spalte
+    <b>file</b> angezeigt wird (<b>Einstellungen ->
+    Tabellenansicht -> Spezielle Spalten -> Datei-Spalten
+    anzeigen</b>), können Sie auch auf das Icon klicken, um
+    den ersten Link eines Eintrags zu öffnen. Um weitere Links
+    zu öffnen, klicken Sie mit der rechten Maustaste auf das
+    Icon (Mac OS X: <b>Strg-Klick</b>); es erscheint dann ein
+    Menü mit allen Links.</p>
+</body>
+</html>
diff --git a/src/help/de/GeneralFields.html b/src/help/de/GeneralFields.html
index f00de72..6d29111 100644
--- a/src/help/de/GeneralFields.html
+++ b/src/help/de/GeneralFields.html
@@ -1,31 +1,31 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Allgemeine Felder festlegen</h1>
-
-    <p>Sie können dem Eintragseditor eine beliebige Anzahl von
-    Tabs hinzufügen, die bei allen Eintragstypen sichtbar
-    sind. Wählen Sie dazu den Menüeintrag "Optionen ->
-    Allgemeine Felder festlegen".</p>
-
-    <p>Jede Zeile repräsentiert einen Tab. Der Anfang der
-    Zeile steht für den Namen des Tabs, gefolgt von einem
-    Doppelpunkt (:). Anschließend listen Sie die einzelnen
-    Felder auf, die der Tab enthalten soll, und trennen sie jeweils
-    durch ein Semikolon (;).</p>
-
-    <p>Das Beispiel</p>
-
-    <p><code>Allgemeine Felder:url;keywords;doi;pdf<br />
-     Zusammenfassung:abstract;annote</code></p>
-
-    <p>ergibt somit einen Tab mit dem Namen "Allgemeine Felder",
-    der die Felder <em>url</em>, <em>keywords</em>, <em>doi</em>
-    und <em>pdf</em> enthält, sowie einen zweiten Tab namens
-    "Zusammenfassung" mit den Feldern <em>abstract</em> und
-    <em>annote</em>.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Allgemeine Felder festlegen</h1>
+
+    <p>Sie können dem Eintragseditor eine beliebige Anzahl von
+    Tabs hinzufügen, die bei allen Eintragstypen sichtbar
+    sind. Wählen Sie dazu den Menüeintrag "Optionen ->
+    Allgemeine Felder festlegen".</p>
+
+    <p>Jede Zeile repräsentiert einen Tab. Der Anfang der
+    Zeile steht für den Namen des Tabs, gefolgt von einem
+    Doppelpunkt (:). Anschließend listen Sie die einzelnen
+    Felder auf, die der Tab enthalten soll, und trennen sie jeweils
+    durch ein Semikolon (;).</p>
+
+    <p>Das Beispiel</p>
+
+    <p><code>Allgemeine Felder:url;keywords;doi;pdf<br />
+     Zusammenfassung:abstract;annote</code></p>
+
+    <p>ergibt somit einen Tab mit dem Namen "Allgemeine Felder",
+    der die Felder <em>url</em>, <em>keywords</em>, <em>doi</em>
+    und <em>pdf</em> enthält, sowie einen zweiten Tab namens
+    "Zusammenfassung" mit den Feldern <em>abstract</em> und
+    <em>annote</em>.</p>
+</body>
+</html>
diff --git a/src/help/de/GroupsHelp.html b/src/help/de/GroupsHelp.html
index 20e15fe..3ae0cb9 100644
--- a/src/help/de/GroupsHelp.html
+++ b/src/help/de/GroupsHelp.html
@@ -1,411 +1,411 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Gruppen</h1>
-
-    <p>Mit Gruppen können Sie Ihre BibTeX-Datei
-    in einer Baumstruktur anordnen, vergleichbar mit einer
-    Dateistruktur in Ordnern und Unterordnern. Die beiden
-    Hauptunterschiede sind:</p>
-
-    <ul>
-        <li>Während eine Datei auf einer Festplatte immer in
-        genau einem Ordner abgelegt ist, kann ein Literatureintrag
-        in JabRef mehreren Gruppen angehören.</li>
-
-        <li>Gruppen benutzen bestimmte Kriterien, um ihren Inhalt
-        dynamisch zu bestimmen. Neue Einträge, die den
-        Kriterien einer Gruppe entsprechen, gehören
-        automatisch zu dieser Gruppe. Diese Funktionalität
-        gibt es nicht in üblichen Dateisystemen, wohl aber in
-        einigen E-Mail-Programmen (z.B. Thunderbird und
-        Opera).</li>
-    </ul>Wenn Sie eine Gruppe auswählen, werden die
-    Einträge dieser Gruppe angezeigt. Wenn Sie mehrere Gruppen
-    auswählen, werden entweder die Einträge angezeigt,
-    die in einer der Gruppen sind (Vereinigung), oder solche, die
-    in allen Gruppen vorhanden sind (Schnittmenge) -- das
-    hängt von Ihren Einstellungen ab. All dies wird im
-    Folgenden detailliert erläutert.
-
-    <p>Gruppendefinitionen sind dateispezifisch; sie werden als
-    <tt>@COMMENT</tt>-Block in der <tt>bib</tt>-Datei gespeichert
-    und werden von allen Benutzern gemeinsam benutzt.
-    (Künftige Versionen von JabRef werden möglicherweise
-    benutzerabhängige Gruppen unterstützen.)</p>
-
-    <h2>Die Gruppenansicht</h2>
-
-    <p>Die Gruppenansicht wird im linken
-    Bereich des Bildschirms angezeigt. Sie kann mit der
-    Tastenkombination <tt>STRG-SHIFT-G</tt> oder dem Gruppen-Button
-    in der Toolbar ein- und ausgeblendet werden. Die Gruppenansicht
-    verfügt über mehrere Schaltflächen, aber die
-    meisten Funktionen werden über das Kontextmenü
-    angesteuert (also mit der rechten Maustaste). Drag & Drop
-    wird ebenfalls unterstützt.</p>
-
-    <table cellspacing="0"
-           cellpadding="5"
-           border="0"
-           style="background-color: #C0FFC0"
-		   summary="Beispiele">
-        <tr>
-            <td>
-                <h2>Einige kurze Beispiele</h2>
-
-                <p>Sie möchten vielleicht...</p>
-
-                <h3>...einfach nur eine Gruppe anlegen und ihr
-                einige Einträge zuordnen</h3>
-
-                <p>Vergewissern Sie
-                sich, dass die Gruppenansicht eingeschaltet ist.
-                Drücken Sie auf den Button <b>Neue Gruppe</b>,
-                geben einen Namen für die Gruppe ein und
-                drücken OK. Sie können alle Einstellungen
-                auf ihren Standardwerten belassen. Jetzt
-                wählen Sie die Einträge aus, die der
-                Gruppe zugeordnet werden sollen, und ziehen diese
-                mit der Maus auf die Gruppe oder wählen <b>Zu
-                Gruppe hinzufügen</b> aus dem
-                Kontextmenü. Jetzt können Sie die Gruppe
-                anklicken, um sich ihren Inhalt anzeigen zu lassen
-                (das sollten die Einträge sein, die Sie gerade
-                hinzugefügt haben).</p>
-
-                <h3>...das Feld <tt>keywords</tt> benutzen, um die
-                Einträge zu gruppieren</h3>
-
-                <p>Stellen Sie sicher,
-                dass die Gruppenansicht aktiviert ist. Drücken
-                Sie auf den Button <b>Neue Gruppe</b>, geben einen
-                Namen für die Gruppe ein und wählen die
-                Option <b>Dynamisches Gruppieren der Einträge
-                anhand eines Stichworts in einem Feld</b>. Geben
-                Sie das Stichwort, nach dem gesucht werden soll,
-                ein und drücken OK. Jetzt können Sie die
-                Gruppe anklicken, um sich ihren Inhalt anzeigen zu
-                lassen (das sollten alle Einträge sein, deren
-                <tt>keywords</tt>-Feld das Stichwort enthält,
-                das Sie angegeben haben).</p>
-
-                <h3>...einen frei wählbaren Suchausdruck
-                verwenden, um eine Gruppe zu definieren</h3>
-
-                <p>Stellen Sie sicher, dass die Gruppenansicht aktiviert ist.
-                Drücken Sie auf den Button <b>Neue Gruppe</b>,
-                geben einen Namen für die Gruppe ein und
-                wählen die Option <b>Dynamisches Gruppieren
-                der Einträge anhand eines beliebigen
-                Suchausdrucks</b>. Geben Sie <tt>author=smith</tt>
-                als Suchausdruck ein (ersetzen Sie <tt>smith</tt>
-                mit einem Namen, der wirklich in Ihrer Datei
-                vorkommt) und klicken <b>OK</b>. Jetzt können
-                Sie die Gruppe anklicken, um sich ihren Inhalt
-                anzeigen zu lassen (das sollten alle Einträge
-                sein, deren <tt>author</tt>-Feld den Namen
-                beinhaltet, den Sie angegeben haben).</p>
-
-                <h3>...mehrere Gruppen kombinieren</h3>
-
-                <p>Erstellen sie zwei unterschiedliche Gruppen
-                (z.B. so wie oben beschrieben).
-                Klicken Sie auf den Button
-                <b>Einstellungen</b> in der Gruppenansicht und
-                wählen <b>Vereinigung</b>. Jetzt wählen
-                Sie beide Gruppen aus (dazu klicken Sie auf eine
-                Gruppe und anschließend bei gedrückter
-                STRG-Taste auf die andere Gruppe). Sie sollten
-                jetzt alle Einträge sehen, die in einer der
-                beiden Gruppen aufgeführt sind. Klicken Sie
-                noch einmal auf <b>Einstellungen</b> und
-                wählen <b>Schnittmenge</b> aus. Nun sollten
-                Sie nur die Einträge sehen, die in beiden
-                Gruppen enthalten sind (das können auch keine
-                sein, oder aber genau dieselben Einträge wie
-                zuvor, sofern beide Gruppen dieselben Einträge
-                enthalten).</p>
-
-                <h3>...sehen, welche Gruppen sich
-                überschneiden</h3>
-
-                <p>Mit JabRef können Sie
-                ganz einfach herausfinden, welche Gruppen sich mit
-                den aktuell ausgewählten Gruppen
-                überschneiden (d.h. welche Gruppen zumindest
-                einen Eintrag enthalten, der auch in der aktuell
-                ausgewählten Gruppe ist). Klicken Sie auf
-                <b>Einstellungen</b> und aktivieren die Option
-                <b>Sich überschneidende Gruppen markieren</b>.
-                Wählen Sie dann eine Gruppe, die sich mit
-                anderen überschneidet. Diese anderen Gruppen
-                sollten nun markiert sein.</p>
-            </td>
-        </tr>
-    </table>
-
-    <h2>Arten von Gruppen</h2>
-
-    <p>In JabRef 1.8 gibt es vier verschiedene Arten von Gruppen</p>
-
-    <ol>
-        <li>Die Gruppe <b>Alle Einträge</b>, die -- wie der
-        Name vermuten lässt -- alle Einträge beinhaltet,
-        ist immer vorhanden und kann weder verändert noch
-        gelöscht werden.</li>
-
-        <li><b>Statische Gruppen</b> verhalten sich wie Ordner auf
-        einer Festplatte und beinhalten nur die Einträge, die
-        Sie ihnen explizit zuweisen.</li>
-
-        <li><b>Dynamische Gruppen basierend auf einem Stichwort</b>
-        beinhalten Einträge, die in einem bestimmten
-        BibTeX-Feld (z.B. <tt>keywords</tt>) ein bestimmtes
-        Stichwort (z.B. <tt>elektrisch</tt>) aufweisen. Diese
-        Methode benötigt kein manuelles Zuweisen der
-        Einträge, sondern nutzt die bereits in der Datei
-        vorhandenen Informationen. Wenn alle Einträge in Ihrer
-        Datenbank passende Stichwörter haben, könnte
-        diese Art von Gruppe die beste Wahl für Sie sein.</li>
-
-        <li><b>Dynamische Gruppen basierend auf einer freien
-        Suche</b> beinhalten Einträge, die mit einem
-        bestimmten Suchausdruck übereinstimmen. Dabei wird
-        dieselbe Syntax verwendet wie beim
-        <a href="SearchHelp.html">Suchen</a>. Diese
-        <a href="SearchHelp.html#advanced">Syntax</a>
-        unterstützt logische Operatoren (<tt>AND</tt>,
-        <tt>OR</tt>, <tt>NOT</tt>) und erlaubt es, in einem oder
-        mehreren BibTeX-Feldern zu suchen. Dadurch ist eine
-        flexiblere Definition von Gruppen möglich als mit
-        einer Stichwortsuche (z.B. <tt>author=smith AND
-        title=elektrisch</tt>).</li>
-    </ol>Jede Gruppe, die Sie erstellen, ist von einer der drei
-    letztgenannten Arten. Der Dialog "Gruppe bearbeiten", der mit
-    einem Doppelklick auf eine Gruppe aufgerufen wird, zeigt eine
-    kurze Beschreibung der ausgewählten Gruppe.
-
-    <h2>Gruppenstrukturen, Erstellen und Löschen von
-    Gruppen</h2>
-
-    <p>Vergleichbar mit Ordnern sind die Gruppen in einer
-    Baumansicht strukturiert, wo die Gruppe <b>Alle
-    Einträge</b> das Stammelement ist. Mit einem Rechtsklick
-    auf eine Gruppe können Sie dem Baum eine neue Gruppe
-    hinzufügen, entweder auf derselben Ebene wie die
-    ausgewählte Gruppe oder als ihre Untergruppe. Der Button
-    <b>Neue Gruppe</b> erzeugt eine neue Untergruppe der Gruppe
-    <b>Alle Einträge</b>, egal ob Sie gerade Gruppen
-    ausgewählt haben oder nicht. Im Kontextmenü
-    können Sie auch Gruppen und/oder Untergruppen
-    löschen, Untergruppen alphabetisch sortieren oder Gruppen
-    an eine andere Stelle des Baums verschieben. Letzteres
-    können Sie auch mit Drag & Drop machen,
-    allerdings mit der Einschränkung, dass bei
-    Drag & Drop die Reihenfolge der Untergruppen
-    einer Gruppe nicht verändert werden kann.</p>
-
-    <p>Rückgängig und Wiederholen wird für alle
-    Bearbeitungsschritte unterstützt.</p>
-
-    <h3>Statische Gruppen</h3>
-
-    <p>Statische Gruppen werden nur durch
-    manuelles Zuweisen von Einträgen "gefüttert". Nachdem
-    Sie eine statische Gruppe erstellt haben, wählen Sie die
-    Einträge aus, die Sie ihr zuweisen wollen, und nutzen
-    entweder Drag & Drop oder das Kontextmenü in
-    der Tabelle, um die Zuweisung durchzuführen. Um
-    Einträge aus einer Gruppe zu entfernen, wählen Sie
-    sie aus und benutzen das Kontextmenü in der Tabelle. Es
-    können keine weiteren Optionen angegeben werden.</p>
-
-    <p>Diese Methode des Gruppierens setzt voraus, dass alle
-    Einträge einen eindeutigen BibTeX-Key haben. Im Falle von
-    fehlenden oder doppelten BibTeX-Keys kann das Zuweisen der
-    betreffenden Einträge in künftigen Sitzungen nicht
-    korrekt wiederhergestellt werden.</p>
-
-    <h3>Dynamische Gruppen</h3>
-
-    <p>Der Inhalt einer dynamischen Gruppe
-    wird von einer logischen Bedingung bestimmt. Nur Einträge,
-    die dieser Bedingung entsprechen, gehören zu dieser
-    Gruppe. Diese Methode nutzt die bereits in der Datei
-    vorhandenen Informationen und wird aktualisiert, sobald Sie
-    Veränderungen in der Datei vornehmen.</p>
-
-    <p>Es gibt zwei mögliche Arten von Bedingungen:</p>
-
-    <dl>
-        <dt><b>Ein Feld nach einem Stichwort durchsuchen</b></dt>
-
-        <dd>Diese Methode gruppiert Einträge, bei denen ein
-        bestimmtes BibTeX Feld (z.B. <tt>keywords</tt>) einen
-        bestimmten Suchausdruck (z.B. <tt>elektrisch</tt>)
-        enthält. Damit dies funktioniert, muss das Feld, nach
-        dem sortiert wird, natürlich in jedem Eintrag
-        vorhanden und sein Inhalt fehlerfrei sein. Das obige
-        Beispiel würde alle Einträge zu einer Gruppe
-        zusammenfassen, die sich auf etwas elektrisches beziehen.
-        Benutzt man das Feld <tt>author</tt>, kann man sich
-        Einträge eines bestimmten Autors gruppieren lassen,
-        usw. Die Suche ist als reine Textsuche oder mit einem
-        regulären Ausdruck möglich. Im ersten Fall
-        erlaubt JabRef das manuelle Zuweisen zu und Entfernen aus
-        einer Gruppe; dazu fügt JabRef den Suchausdruck dem
-        entsprechenden Feld zu bzw. entfernt ihn daraus. Das macht
-        nur für das Feld <tt>keywords</tt> oder für
-        selbstdefinierte Felder Sinn, aber offensichtlich nicht
-        für Felder wie <tt>author</tt> oder
-        <tt>year</tt>.</dd>
-
-        <dt><b>Einen freien Suchausdruck verwenden</b></dt>
-
-        <dd>Diese Vorgehensweise ist ganz ähnlich wie die eben
-        beschriebene, aber statt nur ein Feld nach einem
-        Suchausdruck zu durchsuchen, kann hierbei die
-        <a href="SearchHelp.html#advanced">Syntax der Suche</a>
-        angewendet werden, die logische Operatoren (<tt>AND</tt>,
-        <tt>OR</tt>, <tt>NOT</tt>) und die Suche in mehreren
-        Feldern gleichzeitig unterstützt. So fasst z.B. die
-        Suchanfrage <tt>keywords=Regression AND NOT
-        keywords=linear</tt> Einträge, die sich mit
-        nicht-linearer Regression beschäftigen, zu einer
-        Gruppe zusammen.</dd>
-    </dl>In der Gruppenansicht werden dynamische Gruppen
-    standardmäßig <i>kursiv</i> dargestellt. Dies kann
-    unter <strong>Optionen -> Einstellungen ->
-    Gruppen</strong> abgestellt werden.
-
-    <h3>Hierarchischer Kontext</h3>
-
-    <p>Standardmäßig ist
-    eine Gruppe <b>unabhängig</b> von ihrer Position im
-    Gruppenbaum. Ist eine Gruppe ausgewählt, wird nur der
-    Inhalt dieser Gruppe angezeigt. Es ist jedoch -- besonders beim
-    Verwenden dynamischer Gruppen -- oft nützlich, eine
-    Untergruppe zu erstellen, die <b>ihre Obergruppe
-    verfeinert</b>. Wenn diese Untergruppe ausgewählt wird,
-    werden alle Einträge dieser Gruppe und ihrer Obergruppe
-    angezeigt. Erstellen Sie z.B. eine Obergrupe, die Einträge
-    mit dem Stichwort <tt>Verteilung</tt> enthält, sowie eine
-    verfeinernde Untergruppe mit Einträgen, die das Stichwort
-    <tt>Gauß</tt> enthalten. Wenn Sie nun die Untergruppe
-    auswählen, werden alle Einträge angezeigt, die beiden
-    Bedingungen entsprechen, also alle, die mit Gauß'scher
-    Verteilung zu tun haben. Indem Sie nun eine weitere Untergruppe
-    für <tt>Laplace</tt> anlegen, die dieselbe Obergruppe
-    verfeinert, können Sie die Gruppierung einfach erweitern.
-    Im Gruppenbaum haben solche Gruppen, die ihre Obergruppen
-    verfeinern, ein spezielles Icon. (Dieses Verhalten kann in den
-    Einstellungen abgestellt werden.)</p>
-
-    <p>Das logische Gegenstück zu einer solchen verfeinernden
-    Untergruppe ist eine Gruppe, die <b>ihre Untergruppen
-    berücksichtigt</b>. Wird sie ausgewählt, werden nicht
-    nur die Einträge dieser Gruppe, sondern auch diejenigen
-    aller Untergruppen angezeigt. Im Gruppenbaum hat auch diese Art
-    von Gruppen ein spezielles Icon. (Dieses Verhalten kann in den
-    Einstellungen abgestellt werden.)</p>
-
-    <h2>Einträge einer Gruppe anzeigen, mehrere Gruppen
-    kombinieren</h2>
-
-    <p>Wenn Sie eine Gruppe auswählen, werden die
-    Einträge, die dieser Gruppe zugeordnet sind, hervorgehoben
-    und -- je nach Einstellung (die mit einem Klick auf den
-    <b>Einstellungen</b>-Button vorgenommen werden kann) -- an den
-    Anfang der Tabelle verschoben und/oder ausgewählt. Diese
-    Optionen entsprechen denen für die normale Suche.</p>
-
-    <p>Wenn Sie meherere Gruppen auswählen (indem Sie die
-    STRG-Taste gedrückt halten und mehrere Gruppen anklicken),
-    wird -- je nach Einstellung -- entweder die Vereinigung oder
-    die Schnittmenge ihrer Inhalte angezeigt. Damit können
-    mehrere Bedingungen schnell miteinander kombiniert werden. Ein
-    Beispiel: Wenn Sie eine statische Gruppe <tt>Sehr wichtig</tt>
-    haben, in der alle sehr wichtigen Einträge sind,
-    können Sie sich die sehr wichtigen Einträge jeder
-    anderen Gruppe anzeigen lassen, indem Sie beide Gruppen
-    auswählen (dazu muss <b>Schnittmenge</b> in den
-    Einstellungen aktiviert sein).</p>
-
-    <h2>Gruppen und Suche</h2>
-
-    <p>Wenn der Inhalt einer oder mehrerer
-    Gruppen angezeigt wird, können Sie eine Suche innerhalb
-    dieser Einträge durchführen. Benutzen Sie dazu die
-    normalen Suchfunktionen.</p>
-
-    <h2>Sich überschneidende Gruppen markieren</h2>
-
-    <p>Der <b>Einstellungs</b>-Button bietet eine Option zum Markieren von
-    sich überschneidenden Gruppen. Wenn diese Option aktiviert
-    ist und Sie eine (oder mehrere) Gruppe(n) auswählen,
-    werden alle Gruppen markiert, die mindestens einen Eintrag
-    enthalten, der auch der ausgewählten Gruppe zugeordnet
-    ist. Damit können Sie schnell Überschneidungen
-    zwischen den Einträgen verschiedener Gruppen erkennen. Sie
-    könnten beispielsweise eine Gruppe <tt>lesen</tt>
-    erstellen, die alle Einträge enthält, die sie lesen
-    wollen. Sobald Sie nun eine Gruppe auswählen, wird die
-    Gruppe <tt>lesen</tt> markiert, sofern die ausgewählte
-    Gruppe Einträge enthält, die Sie noch lesen wollten.</p>
-
-    <h2>Erweiterte Funktionen</h2>
-
-    <p>Wenn Sie sich mit dem oben
-    beschriebenen Gruppenkonzept vertraut gemacht haben,
-    könnten die folgenden erweiterten Funktionen nützlich
-    sein.</p>
-
-    <h3>Dynamische Gruppen automatisch erstellen</h3>
-
-    <p>Mit einem
-    Klick auf den Button <b>Automatisch Gruppen für die Datei
-    anlegen</b> können Sie ganz schnell passende Gruppen
-    für Ihre Datei erzeugen. Diese Funktion sammelt alle
-    Wörter eines bestimmten Felds Ihrer Wahl und erstellt eine
-    Gruppe für jedes Wort. Das ist zum Beispiel nützlich,
-    wenn Ihre Datei geeignete Stichworte für alle
-    Einträge enthält. Mit dem automatischen Erstellen von
-    Gruppen basierend auf dem Feld <tt>keywords</tt> können
-    Sie also ohne großen Aufwand ein Grundgerüst von
-    Gruppen anlegen.</p>
-
-    <p>Sie können auch Buchstaben angeben, die ignoriert
-    werden sollen, z.B. Kommas, die zwischen einzelnen Stichworten
-    stehen. Diese werden als Worttrenner behandelt und nicht als
-    Teile des Wortes selbst. Dieser Schritt ist wichtig, damit
-    kombinierte Stichworte wie etwa <tt>Gauß'sche
-    Verteilung</tt> als semantische Einheit interpretiert werden
-    können. (Sie können diese Option allerdings nicht
-    verwenden, um ganze Wörter zu ignorieren. Sie müssen
-    stattdessen die Gruppen, die Sie nicht wollen, nach dem
-    automatischen Erstellen von Hand löschen.)</p>
-
-    <h3>Ansicht aktualisieren</h3>
-
-    <p>Der <b>Aktualisieren</b>-Button
-    aktualisiert die Tabelle in Bezug auf die aktuell
-    ausgewählten Gruppen. Normalerweise erfolgt dies
-    automatisch, aber in seltenen Fällen (z.B. nach einem
-    Rückgängig- oder Wiederholen-Vorgang, der mit Gruppen
-    zusammenhängt) ist ein händisches Aktualisieren
-    nötig.</p>
-
-    <h3>Verfeinernde Untergruppen und einbeziehende Obergruppen
-    mischen</h3>
-
-    <p>Wenn eine verfeinernde Gruppe die Untergruppe von
-    einer Gruppe ist, die ihre Untergruppen berücksichtigt --
-    also sozusagen die Geschwister der verfeinernden Gruppe --,
-    dann werden diese Geschwister ignoriert, sobald die
-    verfeinernde Gruppe ausgewählt wird.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Gruppen</h1>
+
+    <p>Mit Gruppen können Sie Ihre BibTeX-Datei
+    in einer Baumstruktur anordnen, vergleichbar mit einer
+    Dateistruktur in Ordnern und Unterordnern. Die beiden
+    Hauptunterschiede sind:</p>
+
+    <ul>
+        <li>Während eine Datei auf einer Festplatte immer in
+        genau einem Ordner abgelegt ist, kann ein Literatureintrag
+        in JabRef mehreren Gruppen angehören.</li>
+
+        <li>Gruppen benutzen bestimmte Kriterien, um ihren Inhalt
+        dynamisch zu bestimmen. Neue Einträge, die den
+        Kriterien einer Gruppe entsprechen, gehören
+        automatisch zu dieser Gruppe. Diese Funktionalität
+        gibt es nicht in üblichen Dateisystemen, wohl aber in
+        einigen E-Mail-Programmen (z.B. Thunderbird und
+        Opera).</li>
+    </ul>Wenn Sie eine Gruppe auswählen, werden die
+    Einträge dieser Gruppe angezeigt. Wenn Sie mehrere Gruppen
+    auswählen, werden entweder die Einträge angezeigt,
+    die in einer der Gruppen sind (Vereinigung), oder solche, die
+    in allen Gruppen vorhanden sind (Schnittmenge) -- das
+    hängt von Ihren Einstellungen ab. All dies wird im
+    Folgenden detailliert erläutert.
+
+    <p>Gruppendefinitionen sind dateispezifisch; sie werden als
+    <tt>@COMMENT</tt>-Block in der <tt>bib</tt>-Datei gespeichert
+    und werden von allen Benutzern gemeinsam benutzt.
+    (Künftige Versionen von JabRef werden möglicherweise
+    benutzerabhängige Gruppen unterstützen.)</p>
+
+    <h2>Die Gruppenansicht</h2>
+
+    <p>Die Gruppenansicht wird im linken
+    Bereich des Bildschirms angezeigt. Sie kann mit der
+    Tastenkombination <tt>STRG-SHIFT-G</tt> oder dem Gruppen-Button
+    in der Toolbar ein- und ausgeblendet werden. Die Gruppenansicht
+    verfügt über mehrere Schaltflächen, aber die
+    meisten Funktionen werden über das Kontextmenü
+    angesteuert (also mit der rechten Maustaste). Drag & Drop
+    wird ebenfalls unterstützt.</p>
+
+    <table cellspacing="0"
+           cellpadding="5"
+           border="0"
+           style="background-color: #C0FFC0"
+		   summary="Beispiele">
+        <tr>
+            <td>
+                <h2>Einige kurze Beispiele</h2>
+
+                <p>Sie möchten vielleicht...</p>
+
+                <h3>...einfach nur eine Gruppe anlegen und ihr
+                einige Einträge zuordnen</h3>
+
+                <p>Vergewissern Sie
+                sich, dass die Gruppenansicht eingeschaltet ist.
+                Drücken Sie auf den Button <b>Neue Gruppe</b>,
+                geben einen Namen für die Gruppe ein und
+                drücken OK. Sie können alle Einstellungen
+                auf ihren Standardwerten belassen. Jetzt
+                wählen Sie die Einträge aus, die der
+                Gruppe zugeordnet werden sollen, und ziehen diese
+                mit der Maus auf die Gruppe oder wählen <b>Zu
+                Gruppe hinzufügen</b> aus dem
+                Kontextmenü. Jetzt können Sie die Gruppe
+                anklicken, um sich ihren Inhalt anzeigen zu lassen
+                (das sollten die Einträge sein, die Sie gerade
+                hinzugefügt haben).</p>
+
+                <h3>...das Feld <tt>keywords</tt> benutzen, um die
+                Einträge zu gruppieren</h3>
+
+                <p>Stellen Sie sicher,
+                dass die Gruppenansicht aktiviert ist. Drücken
+                Sie auf den Button <b>Neue Gruppe</b>, geben einen
+                Namen für die Gruppe ein und wählen die
+                Option <b>Dynamisches Gruppieren der Einträge
+                anhand eines Stichworts in einem Feld</b>. Geben
+                Sie das Stichwort, nach dem gesucht werden soll,
+                ein und drücken OK. Jetzt können Sie die
+                Gruppe anklicken, um sich ihren Inhalt anzeigen zu
+                lassen (das sollten alle Einträge sein, deren
+                <tt>keywords</tt>-Feld das Stichwort enthält,
+                das Sie angegeben haben).</p>
+
+                <h3>...einen frei wählbaren Suchausdruck
+                verwenden, um eine Gruppe zu definieren</h3>
+
+                <p>Stellen Sie sicher, dass die Gruppenansicht aktiviert ist.
+                Drücken Sie auf den Button <b>Neue Gruppe</b>,
+                geben einen Namen für die Gruppe ein und
+                wählen die Option <b>Dynamisches Gruppieren
+                der Einträge anhand eines beliebigen
+                Suchausdrucks</b>. Geben Sie <tt>author=smith</tt>
+                als Suchausdruck ein (ersetzen Sie <tt>smith</tt>
+                mit einem Namen, der wirklich in Ihrer Datei
+                vorkommt) und klicken <b>OK</b>. Jetzt können
+                Sie die Gruppe anklicken, um sich ihren Inhalt
+                anzeigen zu lassen (das sollten alle Einträge
+                sein, deren <tt>author</tt>-Feld den Namen
+                beinhaltet, den Sie angegeben haben).</p>
+
+                <h3>...mehrere Gruppen kombinieren</h3>
+
+                <p>Erstellen sie zwei unterschiedliche Gruppen
+                (z.B. so wie oben beschrieben).
+                Klicken Sie auf den Button
+                <b>Einstellungen</b> in der Gruppenansicht und
+                wählen <b>Vereinigung</b>. Jetzt wählen
+                Sie beide Gruppen aus (dazu klicken Sie auf eine
+                Gruppe und anschließend bei gedrückter
+                STRG-Taste auf die andere Gruppe). Sie sollten
+                jetzt alle Einträge sehen, die in einer der
+                beiden Gruppen aufgeführt sind. Klicken Sie
+                noch einmal auf <b>Einstellungen</b> und
+                wählen <b>Schnittmenge</b> aus. Nun sollten
+                Sie nur die Einträge sehen, die in beiden
+                Gruppen enthalten sind (das können auch keine
+                sein, oder aber genau dieselben Einträge wie
+                zuvor, sofern beide Gruppen dieselben Einträge
+                enthalten).</p>
+
+                <h3>...sehen, welche Gruppen sich
+                überschneiden</h3>
+
+                <p>Mit JabRef können Sie
+                ganz einfach herausfinden, welche Gruppen sich mit
+                den aktuell ausgewählten Gruppen
+                überschneiden (d.h. welche Gruppen zumindest
+                einen Eintrag enthalten, der auch in der aktuell
+                ausgewählten Gruppe ist). Klicken Sie auf
+                <b>Einstellungen</b> und aktivieren die Option
+                <b>Sich überschneidende Gruppen markieren</b>.
+                Wählen Sie dann eine Gruppe, die sich mit
+                anderen überschneidet. Diese anderen Gruppen
+                sollten nun markiert sein.</p>
+            </td>
+        </tr>
+    </table>
+
+    <h2>Arten von Gruppen</h2>
+
+    <p>In JabRef 1.8 gibt es vier verschiedene Arten von Gruppen</p>
+
+    <ol>
+        <li>Die Gruppe <b>Alle Einträge</b>, die -- wie der
+        Name vermuten lässt -- alle Einträge beinhaltet,
+        ist immer vorhanden und kann weder verändert noch
+        gelöscht werden.</li>
+
+        <li><b>Statische Gruppen</b> verhalten sich wie Ordner auf
+        einer Festplatte und beinhalten nur die Einträge, die
+        Sie ihnen explizit zuweisen.</li>
+
+        <li><b>Dynamische Gruppen basierend auf einem Stichwort</b>
+        beinhalten Einträge, die in einem bestimmten
+        BibTeX-Feld (z.B. <tt>keywords</tt>) ein bestimmtes
+        Stichwort (z.B. <tt>elektrisch</tt>) aufweisen. Diese
+        Methode benötigt kein manuelles Zuweisen der
+        Einträge, sondern nutzt die bereits in der Datei
+        vorhandenen Informationen. Wenn alle Einträge in Ihrer
+        Datenbank passende Stichwörter haben, könnte
+        diese Art von Gruppe die beste Wahl für Sie sein.</li>
+
+        <li><b>Dynamische Gruppen basierend auf einer freien
+        Suche</b> beinhalten Einträge, die mit einem
+        bestimmten Suchausdruck übereinstimmen. Dabei wird
+        dieselbe Syntax verwendet wie beim
+        <a href="SearchHelp.html">Suchen</a>. Diese
+        <a href="SearchHelp.html#advanced">Syntax</a>
+        unterstützt logische Operatoren (<tt>AND</tt>,
+        <tt>OR</tt>, <tt>NOT</tt>) und erlaubt es, in einem oder
+        mehreren BibTeX-Feldern zu suchen. Dadurch ist eine
+        flexiblere Definition von Gruppen möglich als mit
+        einer Stichwortsuche (z.B. <tt>author=smith AND
+        title=elektrisch</tt>).</li>
+    </ol>Jede Gruppe, die Sie erstellen, ist von einer der drei
+    letztgenannten Arten. Der Dialog "Gruppe bearbeiten", der mit
+    einem Doppelklick auf eine Gruppe aufgerufen wird, zeigt eine
+    kurze Beschreibung der ausgewählten Gruppe.
+
+    <h2>Gruppenstrukturen, Erstellen und Löschen von
+    Gruppen</h2>
+
+    <p>Vergleichbar mit Ordnern sind die Gruppen in einer
+    Baumansicht strukturiert, wo die Gruppe <b>Alle
+    Einträge</b> das Stammelement ist. Mit einem Rechtsklick
+    auf eine Gruppe können Sie dem Baum eine neue Gruppe
+    hinzufügen, entweder auf derselben Ebene wie die
+    ausgewählte Gruppe oder als ihre Untergruppe. Der Button
+    <b>Neue Gruppe</b> erzeugt eine neue Untergruppe der Gruppe
+    <b>Alle Einträge</b>, egal ob Sie gerade Gruppen
+    ausgewählt haben oder nicht. Im Kontextmenü
+    können Sie auch Gruppen und/oder Untergruppen
+    löschen, Untergruppen alphabetisch sortieren oder Gruppen
+    an eine andere Stelle des Baums verschieben. Letzteres
+    können Sie auch mit Drag & Drop machen,
+    allerdings mit der Einschränkung, dass bei
+    Drag & Drop die Reihenfolge der Untergruppen
+    einer Gruppe nicht verändert werden kann.</p>
+
+    <p>Rückgängig und Wiederholen wird für alle
+    Bearbeitungsschritte unterstützt.</p>
+
+    <h3>Statische Gruppen</h3>
+
+    <p>Statische Gruppen werden nur durch
+    manuelles Zuweisen von Einträgen "gefüttert". Nachdem
+    Sie eine statische Gruppe erstellt haben, wählen Sie die
+    Einträge aus, die Sie ihr zuweisen wollen, und nutzen
+    entweder Drag & Drop oder das Kontextmenü in
+    der Tabelle, um die Zuweisung durchzuführen. Um
+    Einträge aus einer Gruppe zu entfernen, wählen Sie
+    sie aus und benutzen das Kontextmenü in der Tabelle. Es
+    können keine weiteren Optionen angegeben werden.</p>
+
+    <p>Diese Methode des Gruppierens setzt voraus, dass alle
+    Einträge einen eindeutigen BibTeX-Key haben. Im Falle von
+    fehlenden oder doppelten BibTeX-Keys kann das Zuweisen der
+    betreffenden Einträge in künftigen Sitzungen nicht
+    korrekt wiederhergestellt werden.</p>
+
+    <h3>Dynamische Gruppen</h3>
+
+    <p>Der Inhalt einer dynamischen Gruppe
+    wird von einer logischen Bedingung bestimmt. Nur Einträge,
+    die dieser Bedingung entsprechen, gehören zu dieser
+    Gruppe. Diese Methode nutzt die bereits in der Datei
+    vorhandenen Informationen und wird aktualisiert, sobald Sie
+    Veränderungen in der Datei vornehmen.</p>
+
+    <p>Es gibt zwei mögliche Arten von Bedingungen:</p>
+
+    <dl>
+        <dt><b>Ein Feld nach einem Stichwort durchsuchen</b></dt>
+
+        <dd>Diese Methode gruppiert Einträge, bei denen ein
+        bestimmtes BibTeX Feld (z.B. <tt>keywords</tt>) einen
+        bestimmten Suchausdruck (z.B. <tt>elektrisch</tt>)
+        enthält. Damit dies funktioniert, muss das Feld, nach
+        dem sortiert wird, natürlich in jedem Eintrag
+        vorhanden und sein Inhalt fehlerfrei sein. Das obige
+        Beispiel würde alle Einträge zu einer Gruppe
+        zusammenfassen, die sich auf etwas elektrisches beziehen.
+        Benutzt man das Feld <tt>author</tt>, kann man sich
+        Einträge eines bestimmten Autors gruppieren lassen,
+        usw. Die Suche ist als reine Textsuche oder mit einem
+        regulären Ausdruck möglich. Im ersten Fall
+        erlaubt JabRef das manuelle Zuweisen zu und Entfernen aus
+        einer Gruppe; dazu fügt JabRef den Suchausdruck dem
+        entsprechenden Feld zu bzw. entfernt ihn daraus. Das macht
+        nur für das Feld <tt>keywords</tt> oder für
+        selbstdefinierte Felder Sinn, aber offensichtlich nicht
+        für Felder wie <tt>author</tt> oder
+        <tt>year</tt>.</dd>
+
+        <dt><b>Einen freien Suchausdruck verwenden</b></dt>
+
+        <dd>Diese Vorgehensweise ist ganz ähnlich wie die eben
+        beschriebene, aber statt nur ein Feld nach einem
+        Suchausdruck zu durchsuchen, kann hierbei die
+        <a href="SearchHelp.html#advanced">Syntax der Suche</a>
+        angewendet werden, die logische Operatoren (<tt>AND</tt>,
+        <tt>OR</tt>, <tt>NOT</tt>) und die Suche in mehreren
+        Feldern gleichzeitig unterstützt. So fasst z.B. die
+        Suchanfrage <tt>keywords=Regression AND NOT
+        keywords=linear</tt> Einträge, die sich mit
+        nicht-linearer Regression beschäftigen, zu einer
+        Gruppe zusammen.</dd>
+    </dl>In der Gruppenansicht werden dynamische Gruppen
+    standardmäßig <i>kursiv</i> dargestellt. Dies kann
+    unter <strong>Optionen -> Einstellungen ->
+    Gruppen</strong> abgestellt werden.
+
+    <h3>Hierarchischer Kontext</h3>
+
+    <p>Standardmäßig ist
+    eine Gruppe <b>unabhängig</b> von ihrer Position im
+    Gruppenbaum. Ist eine Gruppe ausgewählt, wird nur der
+    Inhalt dieser Gruppe angezeigt. Es ist jedoch -- besonders beim
+    Verwenden dynamischer Gruppen -- oft nützlich, eine
+    Untergruppe zu erstellen, die <b>ihre Obergruppe
+    verfeinert</b>. Wenn diese Untergruppe ausgewählt wird,
+    werden alle Einträge dieser Gruppe und ihrer Obergruppe
+    angezeigt. Erstellen Sie z.B. eine Obergrupe, die Einträge
+    mit dem Stichwort <tt>Verteilung</tt> enthält, sowie eine
+    verfeinernde Untergruppe mit Einträgen, die das Stichwort
+    <tt>Gauß</tt> enthalten. Wenn Sie nun die Untergruppe
+    auswählen, werden alle Einträge angezeigt, die beiden
+    Bedingungen entsprechen, also alle, die mit Gauß'scher
+    Verteilung zu tun haben. Indem Sie nun eine weitere Untergruppe
+    für <tt>Laplace</tt> anlegen, die dieselbe Obergruppe
+    verfeinert, können Sie die Gruppierung einfach erweitern.
+    Im Gruppenbaum haben solche Gruppen, die ihre Obergruppen
+    verfeinern, ein spezielles Icon. (Dieses Verhalten kann in den
+    Einstellungen abgestellt werden.)</p>
+
+    <p>Das logische Gegenstück zu einer solchen verfeinernden
+    Untergruppe ist eine Gruppe, die <b>ihre Untergruppen
+    berücksichtigt</b>. Wird sie ausgewählt, werden nicht
+    nur die Einträge dieser Gruppe, sondern auch diejenigen
+    aller Untergruppen angezeigt. Im Gruppenbaum hat auch diese Art
+    von Gruppen ein spezielles Icon. (Dieses Verhalten kann in den
+    Einstellungen abgestellt werden.)</p>
+
+    <h2>Einträge einer Gruppe anzeigen, mehrere Gruppen
+    kombinieren</h2>
+
+    <p>Wenn Sie eine Gruppe auswählen, werden die
+    Einträge, die dieser Gruppe zugeordnet sind, hervorgehoben
+    und -- je nach Einstellung (die mit einem Klick auf den
+    <b>Einstellungen</b>-Button vorgenommen werden kann) -- an den
+    Anfang der Tabelle verschoben und/oder ausgewählt. Diese
+    Optionen entsprechen denen für die normale Suche.</p>
+
+    <p>Wenn Sie meherere Gruppen auswählen (indem Sie die
+    STRG-Taste gedrückt halten und mehrere Gruppen anklicken),
+    wird -- je nach Einstellung -- entweder die Vereinigung oder
+    die Schnittmenge ihrer Inhalte angezeigt. Damit können
+    mehrere Bedingungen schnell miteinander kombiniert werden. Ein
+    Beispiel: Wenn Sie eine statische Gruppe <tt>Sehr wichtig</tt>
+    haben, in der alle sehr wichtigen Einträge sind,
+    können Sie sich die sehr wichtigen Einträge jeder
+    anderen Gruppe anzeigen lassen, indem Sie beide Gruppen
+    auswählen (dazu muss <b>Schnittmenge</b> in den
+    Einstellungen aktiviert sein).</p>
+
+    <h2>Gruppen und Suche</h2>
+
+    <p>Wenn der Inhalt einer oder mehrerer
+    Gruppen angezeigt wird, können Sie eine Suche innerhalb
+    dieser Einträge durchführen. Benutzen Sie dazu die
+    normalen Suchfunktionen.</p>
+
+    <h2>Sich überschneidende Gruppen markieren</h2>
+
+    <p>Der <b>Einstellungs</b>-Button bietet eine Option zum Markieren von
+    sich überschneidenden Gruppen. Wenn diese Option aktiviert
+    ist und Sie eine (oder mehrere) Gruppe(n) auswählen,
+    werden alle Gruppen markiert, die mindestens einen Eintrag
+    enthalten, der auch der ausgewählten Gruppe zugeordnet
+    ist. Damit können Sie schnell Überschneidungen
+    zwischen den Einträgen verschiedener Gruppen erkennen. Sie
+    könnten beispielsweise eine Gruppe <tt>lesen</tt>
+    erstellen, die alle Einträge enthält, die sie lesen
+    wollen. Sobald Sie nun eine Gruppe auswählen, wird die
+    Gruppe <tt>lesen</tt> markiert, sofern die ausgewählte
+    Gruppe Einträge enthält, die Sie noch lesen wollten.</p>
+
+    <h2>Erweiterte Funktionen</h2>
+
+    <p>Wenn Sie sich mit dem oben
+    beschriebenen Gruppenkonzept vertraut gemacht haben,
+    könnten die folgenden erweiterten Funktionen nützlich
+    sein.</p>
+
+    <h3>Dynamische Gruppen automatisch erstellen</h3>
+
+    <p>Mit einem
+    Klick auf den Button <b>Automatisch Gruppen für die Datei
+    anlegen</b> können Sie ganz schnell passende Gruppen
+    für Ihre Datei erzeugen. Diese Funktion sammelt alle
+    Wörter eines bestimmten Felds Ihrer Wahl und erstellt eine
+    Gruppe für jedes Wort. Das ist zum Beispiel nützlich,
+    wenn Ihre Datei geeignete Stichworte für alle
+    Einträge enthält. Mit dem automatischen Erstellen von
+    Gruppen basierend auf dem Feld <tt>keywords</tt> können
+    Sie also ohne großen Aufwand ein Grundgerüst von
+    Gruppen anlegen.</p>
+
+    <p>Sie können auch Buchstaben angeben, die ignoriert
+    werden sollen, z.B. Kommas, die zwischen einzelnen Stichworten
+    stehen. Diese werden als Worttrenner behandelt und nicht als
+    Teile des Wortes selbst. Dieser Schritt ist wichtig, damit
+    kombinierte Stichworte wie etwa <tt>Gauß'sche
+    Verteilung</tt> als semantische Einheit interpretiert werden
+    können. (Sie können diese Option allerdings nicht
+    verwenden, um ganze Wörter zu ignorieren. Sie müssen
+    stattdessen die Gruppen, die Sie nicht wollen, nach dem
+    automatischen Erstellen von Hand löschen.)</p>
+
+    <h3>Ansicht aktualisieren</h3>
+
+    <p>Der <b>Aktualisieren</b>-Button
+    aktualisiert die Tabelle in Bezug auf die aktuell
+    ausgewählten Gruppen. Normalerweise erfolgt dies
+    automatisch, aber in seltenen Fällen (z.B. nach einem
+    Rückgängig- oder Wiederholen-Vorgang, der mit Gruppen
+    zusammenhängt) ist ein händisches Aktualisieren
+    nötig.</p>
+
+    <h3>Verfeinernde Untergruppen und einbeziehende Obergruppen
+    mischen</h3>
+
+    <p>Wenn eine verfeinernde Gruppe die Untergruppe von
+    einer Gruppe ist, die ihre Untergruppen berücksichtigt --
+    also sozusagen die Geschwister der verfeinernden Gruppe --,
+    dann werden diese Geschwister ignoriert, sobald die
+    verfeinernde Gruppe ausgewählt wird.</p>
+</body>
+</html>
diff --git a/src/help/de/HelpHelp.html b/src/help/de/HelpHelp.html
index 43d2861..10f08d2 100644
--- a/src/help/de/HelpHelp.html
+++ b/src/help/de/HelpHelp.html
@@ -1,40 +1,40 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Das Hilfefenster</h1>
-
-    <p><em>Das Hilfefenster öffnet sich,
-    wenn man den Hilfeknopf oder die Taste F1 drückt.</em></p>
-
-    <p>Das Hilfefenster soll Ihnen Informationen zur Nutzung von
-    JabRef geben.</p>
-
-    <h2>Navigation in den Hilfedateien</h2>
-
-    <p>Das Hilfefenster ist
-    eigentlich ein kleiner HTML-Browser, die Hilfedateien sind
-    normale HTML-Dateien.</p>
-
-    <p>Wenn Sie die Hilfe öffnen, zeigt das Hilfefenster
-    unterschiedliche Dateien an, je nachdem, von welchem
-    Programmfenster aus Sie die Hilfe aufgerufen haben. Falls diese
-    Datei nicht das beinhaltet, was Sie erklärt haben wollten,
-    können Sie mit dem <em>Inhalt</em>-Knopf in der
-    Werkzeugleiste zu einer Liste aller verfügbaren
-    Hilfedateien gehen.</p>
-
-    <p>Außerdem befinden sich in der Werkzeugleiste
-    Knöpfe zum Zeigen der nächsten oder vorherigen Datei.
-    Sie sind ähnlich den <em>Zurück</em>- und
-    <em>Vorwärts</em>-Knöpfen eines gewöhnlichen
-    HTML-Browsers. Die Tastenkürzel zur Navigation sind
-    STRG-SHIFT und Pfeil nach links für <em>Zurück</em>
-    sowie Pfeil nach rechts für <em>Vorwärts</em>.</p>
-
-    <p>Sie können das Hilfefenster schließen, indem Sie
-    ESCAPE drücken.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Das Hilfefenster</h1>
+
+    <p><em>Das Hilfefenster öffnet sich,
+    wenn man den Hilfeknopf oder die Taste F1 drückt.</em></p>
+
+    <p>Das Hilfefenster soll Ihnen Informationen zur Nutzung von
+    JabRef geben.</p>
+
+    <h2>Navigation in den Hilfedateien</h2>
+
+    <p>Das Hilfefenster ist
+    eigentlich ein kleiner HTML-Browser, die Hilfedateien sind
+    normale HTML-Dateien.</p>
+
+    <p>Wenn Sie die Hilfe öffnen, zeigt das Hilfefenster
+    unterschiedliche Dateien an, je nachdem, von welchem
+    Programmfenster aus Sie die Hilfe aufgerufen haben. Falls diese
+    Datei nicht das beinhaltet, was Sie erklärt haben wollten,
+    können Sie mit dem <em>Inhalt</em>-Knopf in der
+    Werkzeugleiste zu einer Liste aller verfügbaren
+    Hilfedateien gehen.</p>
+
+    <p>Außerdem befinden sich in der Werkzeugleiste
+    Knöpfe zum Zeigen der nächsten oder vorherigen Datei.
+    Sie sind ähnlich den <em>Zurück</em>- und
+    <em>Vorwärts</em>-Knöpfen eines gewöhnlichen
+    HTML-Browsers. Die Tastenkürzel zur Navigation sind
+    STRG-SHIFT und Pfeil nach links für <em>Zurück</em>
+    sowie Pfeil nach rechts für <em>Vorwärts</em>.</p>
+
+    <p>Sie können das Hilfefenster schließen, indem Sie
+    ESCAPE drücken.</p>
+</body>
+</html>
diff --git a/src/help/de/IEEEXploreHelp.html b/src/help/de/IEEEXploreHelp.html
index 3ff37e0..cb7fc77 100644
--- a/src/help/de/IEEEXploreHelp.html
+++ b/src/help/de/IEEEXploreHelp.html
@@ -1,32 +1,32 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>IEEEXplore durchsuchen</h1>
-
-    <p>IEEEXplore bietet Zugang zu
-    Literatur in den Bereichen Elektrotechnik, Informatik und
-    Elektronik.</p>
-
-    <p>JabRef kann Literaturangaben der IEEEXplore-Datenbank
-    herunterladen. Um diese Funktion zu nutzen, wählen Sie
-    <b>Internet -> IEEEXplore abfragen</b> und geben in dem
-    Dialog, der im linken Bildschirmbereich erscheint, Ihre
-    Suchausdrücke ein. Drücken Sie anschließend die
-    <b>Enter</b>-Taste oder den <b>Abrufen</b>-Button.</p>
-
-    <p>Die Suche wird im Gäste-Modus durchgeführt, es
-    werden also maximal 100 Ergebnisse angezeigt.</p>
-
-    <p>Sie können die <i>abstracts</i> zusammen mit den
-    Literaturangaben herunterladen, indem Sie einen Haken bei
-    <b>Abstracts berücksichtigen</b> setzen. Das verursacht
-    eine deutlich höhere Anzahl von Netzwerk-Anfragen; um die
-    Webseite von IEEEXplore nicht übermäßig zu
-    belasten, lädt JabRef <i>abstracts</i> nur bei einer
-    Suche, deren Ergebnis eine bestimmte Trefferanzahl nicht
-    übersteigt.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>IEEEXplore durchsuchen</h1>
+
+    <p>IEEEXplore bietet Zugang zu
+    Literatur in den Bereichen Elektrotechnik, Informatik und
+    Elektronik.</p>
+
+    <p>JabRef kann Literaturangaben der IEEEXplore-Datenbank
+    herunterladen. Um diese Funktion zu nutzen, wählen Sie
+    <b>Internet -> IEEEXplore abfragen</b> und geben in dem
+    Dialog, der im linken Bildschirmbereich erscheint, Ihre
+    Suchausdrücke ein. Drücken Sie anschließend die
+    <b>Enter</b>-Taste oder den <b>Abrufen</b>-Button.</p>
+
+    <p>Die Suche wird im Gäste-Modus durchgeführt, es
+    werden also maximal 100 Ergebnisse angezeigt.</p>
+
+    <p>Sie können die <i>abstracts</i> zusammen mit den
+    Literaturangaben herunterladen, indem Sie einen Haken bei
+    <b>Abstracts berücksichtigen</b> setzen. Das verursacht
+    eine deutlich höhere Anzahl von Netzwerk-Anfragen; um die
+    Webseite von IEEEXplore nicht übermäßig zu
+    belasten, lädt JabRef <i>abstracts</i> nur bei einer
+    Suche, deren Ergebnis eine bestimmte Trefferanzahl nicht
+    übersteigt.</p>
+</body>
+</html>
diff --git a/src/help/de/ImportInspectionDialog.html b/src/help/de/ImportInspectionDialog.html
index 74aa5a3..1bdd61a 100644
--- a/src/help/de/ImportInspectionDialog.html
+++ b/src/help/de/ImportInspectionDialog.html
@@ -1,26 +1,26 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Import-Kontrollfenster</h1>
-
-    <p>Beim Importieren neuer
-    Einträge aus einem unterstützten Format oder beim
-    Herunterladen von Einträgen aus dem Internet werden diese
-    Einträge zunächst im Import-Kontrollfenster gezeigt.
-    Zu diesem Zeitpunkt wurden noch keine Einträge zu einer
-    geöffneten Datei hinzugefügt.</p>
-
-    <p>Im Kontrollfenster können Sie Einträge entfernen,
-    die nicht übernommen werden sollen, und einige einfache
-    Arbeiten durchführen wie etwa das Generieren von BibTeX
-    keys für die Einträge oder das Zuordnen von
-    Einträgen zu <a href="GroupsHelp.html">Gruppen</a>. Wenn
-    Sie in eine bestehende Datei importieren, ist es oftmals
-    leichter, diese Arbeiten durchzuführen, bevor die neuen
-    Einträge zwischen die bereits bestehenden sortiert
-    wurden.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Import-Kontrollfenster</h1>
+
+    <p>Beim Importieren neuer
+    Einträge aus einem unterstützten Format oder beim
+    Herunterladen von Einträgen aus dem Internet werden diese
+    Einträge zunächst im Import-Kontrollfenster gezeigt.
+    Zu diesem Zeitpunkt wurden noch keine Einträge zu einer
+    geöffneten Datei hinzugefügt.</p>
+
+    <p>Im Kontrollfenster können Sie Einträge entfernen,
+    die nicht übernommen werden sollen, und einige einfache
+    Arbeiten durchführen wie etwa das Generieren von BibTeX
+    keys für die Einträge oder das Zuordnen von
+    Einträgen zu <a href="GroupsHelp.html">Gruppen</a>. Wenn
+    Sie in eine bestehende Datei importieren, ist es oftmals
+    leichter, diese Arbeiten durchzuführen, bevor die neuen
+    Einträge zwischen die bereits bestehenden sortiert
+    wurden.</p>
+</body>
+</html>
diff --git a/src/help/de/JabRefHelp.html b/src/help/de/JabRefHelp.html
index 70ab1f9..49bd16e 100644
--- a/src/help/de/JabRefHelp.html
+++ b/src/help/de/JabRefHelp.html
@@ -1,39 +1,39 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>JabRef</h1>
-
-    <p><strong>Anmerkung:</strong> Das Programm <em>BibTeX</em>
-    wird in den Hilfedateien häufig erwähnt.
-    <em>BibTeX</em> ist ein Hilfsprogramm zur Erstellung
-    bibliographischer Angaben in LaTeX-Dokumenten, das Oren
-    Patashnik entwickelt hat. Dasselbe Dateiformat wird von
-    CiteMaker benutzt, einem Hilfsprogramm zur Erstellung von
-    Bibliographien mit Adobe FrameMaker.</p>
-
-    <p>JabRef ist ein Programm zur Verwaltung von
-    <em>BibTeX</em>-Dateien. Es benutzt kein eigenes Dateiformat,
-    d.h. dass Sie Ihre Dateien direkt im <em>BibTeX</em>-Format
-    (Dateiendung .bib) laden und speichern. Sie können aber
-    auch bibliographische Datenbanken in anderen Formaten in JabRef
-    importieren.</p>
-
-    <p>JabRef unterstützt Sortier- und Suchfunktionen, um
-    einen Überblick über den Inhalt Ihrer Datei zu
-    bekommen. Sie können der Datei ganz einfach neue
-    Einträge hinzufügen, ohne sich daran erinnern zu
-    müssen, welche Informationen benötigt werden.
-    Außerdem kann JabRef <em>BibTeX</em> keys automatisch
-    generieren. JabRef ist sehr nützlich, wenn Sie
-    <em>BibTeX</em> oder CiteMaker benutzen, kann aber auch
-    für diejenigen sinnvoll sein, die andere
-    Bibliographie-Systeme benutzen oder schlicht und einfach ihre
-    Literaturquellen organisieren wollen.</p>
-
-    <p><a href="BaseFrameHelp.html">Das Hauptfenster von
-    JabRef</a></p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>JabRef</h1>
+
+    <p><strong>Anmerkung:</strong> Das Programm <em>BibTeX</em>
+    wird in den Hilfedateien häufig erwähnt.
+    <em>BibTeX</em> ist ein Hilfsprogramm zur Erstellung
+    bibliographischer Angaben in LaTeX-Dokumenten, das Oren
+    Patashnik entwickelt hat. Dasselbe Dateiformat wird von
+    CiteMaker benutzt, einem Hilfsprogramm zur Erstellung von
+    Bibliographien mit Adobe FrameMaker.</p>
+
+    <p>JabRef ist ein Programm zur Verwaltung von
+    <em>BibTeX</em>-Dateien. Es benutzt kein eigenes Dateiformat,
+    d.h. dass Sie Ihre Dateien direkt im <em>BibTeX</em>-Format
+    (Dateiendung .bib) laden und speichern. Sie können aber
+    auch bibliographische Datenbanken in anderen Formaten in JabRef
+    importieren.</p>
+
+    <p>JabRef unterstützt Sortier- und Suchfunktionen, um
+    einen Überblick über den Inhalt Ihrer Datei zu
+    bekommen. Sie können der Datei ganz einfach neue
+    Einträge hinzufügen, ohne sich daran erinnern zu
+    müssen, welche Informationen benötigt werden.
+    Außerdem kann JabRef <em>BibTeX</em> keys automatisch
+    generieren. JabRef ist sehr nützlich, wenn Sie
+    <em>BibTeX</em> oder CiteMaker benutzen, kann aber auch
+    für diejenigen sinnvoll sein, die andere
+    Bibliographie-Systeme benutzen oder schlicht und einfach ihre
+    Literaturquellen organisieren wollen.</p>
+
+    <p><a href="BaseFrameHelp.html">Das Hauptfenster von
+    JabRef</a></p>
+</body>
+</html>
diff --git a/src/help/de/JournalAbbreviations.html b/src/help/de/JournalAbbreviations.html
index 630c9a7..703aee7 100644
--- a/src/help/de/JournalAbbreviations.html
+++ b/src/help/de/JournalAbbreviations.html
@@ -1,118 +1,118 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Zeitschriftentitel abkürzen</h1>
-
-    <p>Diese Funktion kann
-    unter <b>Optionen -> Abkürzungen der Zeitschriften
-    verwalten</b> eingestellt werden.</p>
-
-    <p>JabRef kann automatisch zwischen Zeitschriftentiteln in
-    abgekürzter und ausführlicher Form hin- und
-    herschalten, sofern die Titel in einer Ihrer
-    Zeitschriftenlisten enthalten ist. Sie können mehrere
-    dieser Listen benutzen, die Sie als externe Textdateien
-    anlegen.</p>
-
-    <h2>Benutzungshinweise</h2>
-
-    <p>Die Abkürzung von Zeitschriftentiteln können Sie
-    von Eintragseditor oder vom Menü <b>Extras</b> aus ein-
-    und ausschalten. Im Eintragseditor benutzen Sie dazu den Button
-    <b>Abkürzung an-/abschalten</b> neben dem
-    <b>Journal</b>-Feld. Es wird zwischen drei Modi hin- und
-    hergeschaltet:</p>
-
-    <ul>
-        <li>Kompletter Name, z.B. "Aquacultural Engineering"</li>
-
-        <li>ISO-Abkürzung, z.B. "Aquacult. Eng."</li>
-
-        <li>MEDLINE-Abkürzung, z.B. "Aquacult Eng"</li>
-    </ul>Falls der Zeitschriftenname sich nicht in Ihren
-    Zeitschriftenlisten findet, wird das Feld nicht verändert.
-
-
-    <p>Um die Zeitschriftennamen mehrerer Einträge auf einmal
-    zu konvertieren, können Sie eine beliebige Anzahl von
-    Einträgen auswählen und im Menü <b>Extras</b>
-    einen der Einträge <b>Zeitschriftennamen abkürzen
-    (ISO)</b>, <b>Zeitschriftennamen abkürzen (MEDLINE)</b>
-    und <b>Abkürzung der Zeitschriften aufheben</b>
-    wählen. Diese drei Aktionen sorgen dafür, dass bei
-    allen ausgewählten Einträgen die Zeitschriftennamen,
-    die in den Zeitschriftenlisten gefunden werden konnten,
-    abgekürzt oder komplett ausgeschrieben werden.</p>
-
-    <h2>Zeitschriftenlisten verwalten</h2>
-
-    <p>Sie können mehrere
-    Zeitschriftenlisten als externe Textdateien benutzen, die mit
-    JabRef verlinkt sind. Die primäre Liste kann in JabRef
-    selbst verwaltet werden.</p>
-
-    <h3>Ihre persönliche
-    Zeitschriften-Abkürzungsliste</h3>
-
-    <p>Ihre persönliche
-    Liste verwalten Sie im oberen Teil des <b>Abkürzung der
-    Zeitschriftennamen</b>-Dialogs. Wählen Sie <b>Neue
-    Datei</b> und geben einen Dateinamen ein oder klicken auf den
-    <b>Durchsuchen</b>-Button. Wenn Sie bereits eine Datei haben,
-    die Sie als Grundlage nehmen wollen, wählen Sie
-    stattdessen <b>Bestehende Datei</b> und benutzen den
-    <b>Durchsuchen</b>-Button zum Auswählen dieser Datei. Die
-    Tabelle zeigt dann den Inhalt der Liste, die Sie
-    ausgewählt haben.</p>
-
-    <p>Sie können mit Hilfe der <b>+</b> und <b>-</b> Buttons
-    an der rechten Seite Einträge hinzufügen oder
-    entfernen. Für jeden Eintrag müssen Sie den
-    vollständigen Zeitschriftennamen und die
-    ISO-Abkürzung angeben (z.B. "Aquacultural Engineering" und
-    "Aquacult. Eng."). Mit einem Doppelklick auf die Tabellenzeile
-    können Sie die Einträge bearbeiten.</p>
-
-    <p>Sobald Sie auf <b>OK</b> klicken (oder wenn Sie eine
-    bestehende Datei ausgewält haben), enthält die
-    Tabelle mindestens eine Zeile. Der Tabelleninhalt wird in die
-    ausgewählte Datei geschrieben und die Zeitschriftenliste
-    von JabRef wird aktualisiert.</p>
-
-    <h3>Externe Zeitschriftenlisten</h3>
-
-    <p>Zusätzlich zu Ihrer
-    persönlichen Liste können Sie mehrere externe Listen
-    verlinken. Diese Verknüpfungen werden im unteren Teil des
-    <b>Abkürzung der Zeitschriftennamen</b>-Dialogs verwaltet.
-    Externe Listen sind den persönlichen Listen ähnlich -
-    der einzige Unterschied ist, dass Sie nicht mit JabRef selbst
-    verwaltet werden können.</p>
-
-    <p>Um eine externe Liste hinzuzufügen, klicken Sie
-    zunächst auf den <b>+</b> Knopf, falls nötig (das
-    fügt eine weitere Zeile hinzu). Dann benutzen Sie entweder
-    den <b>Durchsuchen</b>- oder den
-    <b>Herunterladen</b>-Button.</p>
-
-    <ul>
-        <li>Mit dem <b>Durchsuchen</b>-Knopf können Sie eine
-        auf Ihrem Computer bestehende Datei auswählen.</li>
-
-        <li>Mit dem <b>Herunterladen</b>-Knopf können Sie eine
-        Liste aus dem Internet herunterladen, indem Sie eine URL
-        angeben. Die Datei wird auf Ihrem Computer gespeichert und
-        mit JabRef verlinkt. Die URL ist standardmäßig
-        die Adresse einer Zeitschriftenliste auf der
-        JabRef-Homepage. Diese Liste ist unvollständig, wird
-        in Zukunft aber ausgebaut.</li>
-    </ul>Jeder Eintrag in Ihrer persönlichen Liste
-    überschreibt einen Eintrag mit demselben
-    vollständigen Zeitschriftennamen in einer Ihrer externen
-    Listen. In ähnlicher Weise werden die externen Listen in
-    der Reihenfolge, wie sie aufgelistet werden, abgearbeitet.
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Zeitschriftentitel abkürzen</h1>
+
+    <p>Diese Funktion kann
+    unter <b>Optionen -> Abkürzungen der Zeitschriften
+    verwalten</b> eingestellt werden.</p>
+
+    <p>JabRef kann automatisch zwischen Zeitschriftentiteln in
+    abgekürzter und ausführlicher Form hin- und
+    herschalten, sofern die Titel in einer Ihrer
+    Zeitschriftenlisten enthalten ist. Sie können mehrere
+    dieser Listen benutzen, die Sie als externe Textdateien
+    anlegen.</p>
+
+    <h2>Benutzungshinweise</h2>
+
+    <p>Die Abkürzung von Zeitschriftentiteln können Sie
+    von Eintragseditor oder vom Menü <b>Extras</b> aus ein-
+    und ausschalten. Im Eintragseditor benutzen Sie dazu den Button
+    <b>Abkürzung an-/abschalten</b> neben dem
+    <b>Journal</b>-Feld. Es wird zwischen drei Modi hin- und
+    hergeschaltet:</p>
+
+    <ul>
+        <li>Kompletter Name, z.B. "Aquacultural Engineering"</li>
+
+        <li>ISO-Abkürzung, z.B. "Aquacult. Eng."</li>
+
+        <li>MEDLINE-Abkürzung, z.B. "Aquacult Eng"</li>
+    </ul>Falls der Zeitschriftenname sich nicht in Ihren
+    Zeitschriftenlisten findet, wird das Feld nicht verändert.
+
+
+    <p>Um die Zeitschriftennamen mehrerer Einträge auf einmal
+    zu konvertieren, können Sie eine beliebige Anzahl von
+    Einträgen auswählen und im Menü <b>Extras</b>
+    einen der Einträge <b>Zeitschriftennamen abkürzen
+    (ISO)</b>, <b>Zeitschriftennamen abkürzen (MEDLINE)</b>
+    und <b>Abkürzung der Zeitschriften aufheben</b>
+    wählen. Diese drei Aktionen sorgen dafür, dass bei
+    allen ausgewählten Einträgen die Zeitschriftennamen,
+    die in den Zeitschriftenlisten gefunden werden konnten,
+    abgekürzt oder komplett ausgeschrieben werden.</p>
+
+    <h2>Zeitschriftenlisten verwalten</h2>
+
+    <p>Sie können mehrere
+    Zeitschriftenlisten als externe Textdateien benutzen, die mit
+    JabRef verlinkt sind. Die primäre Liste kann in JabRef
+    selbst verwaltet werden.</p>
+
+    <h3>Ihre persönliche
+    Zeitschriften-Abkürzungsliste</h3>
+
+    <p>Ihre persönliche
+    Liste verwalten Sie im oberen Teil des <b>Abkürzung der
+    Zeitschriftennamen</b>-Dialogs. Wählen Sie <b>Neue
+    Datei</b> und geben einen Dateinamen ein oder klicken auf den
+    <b>Durchsuchen</b>-Button. Wenn Sie bereits eine Datei haben,
+    die Sie als Grundlage nehmen wollen, wählen Sie
+    stattdessen <b>Bestehende Datei</b> und benutzen den
+    <b>Durchsuchen</b>-Button zum Auswählen dieser Datei. Die
+    Tabelle zeigt dann den Inhalt der Liste, die Sie
+    ausgewählt haben.</p>
+
+    <p>Sie können mit Hilfe der <b>+</b> und <b>-</b> Buttons
+    an der rechten Seite Einträge hinzufügen oder
+    entfernen. Für jeden Eintrag müssen Sie den
+    vollständigen Zeitschriftennamen und die
+    ISO-Abkürzung angeben (z.B. "Aquacultural Engineering" und
+    "Aquacult. Eng."). Mit einem Doppelklick auf die Tabellenzeile
+    können Sie die Einträge bearbeiten.</p>
+
+    <p>Sobald Sie auf <b>OK</b> klicken (oder wenn Sie eine
+    bestehende Datei ausgewält haben), enthält die
+    Tabelle mindestens eine Zeile. Der Tabelleninhalt wird in die
+    ausgewählte Datei geschrieben und die Zeitschriftenliste
+    von JabRef wird aktualisiert.</p>
+
+    <h3>Externe Zeitschriftenlisten</h3>
+
+    <p>Zusätzlich zu Ihrer
+    persönlichen Liste können Sie mehrere externe Listen
+    verlinken. Diese Verknüpfungen werden im unteren Teil des
+    <b>Abkürzung der Zeitschriftennamen</b>-Dialogs verwaltet.
+    Externe Listen sind den persönlichen Listen ähnlich -
+    der einzige Unterschied ist, dass Sie nicht mit JabRef selbst
+    verwaltet werden können.</p>
+
+    <p>Um eine externe Liste hinzuzufügen, klicken Sie
+    zunächst auf den <b>+</b> Knopf, falls nötig (das
+    fügt eine weitere Zeile hinzu). Dann benutzen Sie entweder
+    den <b>Durchsuchen</b>- oder den
+    <b>Herunterladen</b>-Button.</p>
+
+    <ul>
+        <li>Mit dem <b>Durchsuchen</b>-Knopf können Sie eine
+        auf Ihrem Computer bestehende Datei auswählen.</li>
+
+        <li>Mit dem <b>Herunterladen</b>-Knopf können Sie eine
+        Liste aus dem Internet herunterladen, indem Sie eine URL
+        angeben. Die Datei wird auf Ihrem Computer gespeichert und
+        mit JabRef verlinkt. Die URL ist standardmäßig
+        die Adresse einer Zeitschriftenliste auf der
+        JabRef-Homepage. Diese Liste ist unvollständig, wird
+        in Zukunft aber ausgebaut.</li>
+    </ul>Jeder Eintrag in Ihrer persönlichen Liste
+    überschreibt einen Eintrag mit demselben
+    vollständigen Zeitschriftennamen in einer Ihrer externen
+    Listen. In ähnlicher Weise werden die externen Listen in
+    der Reihenfolge, wie sie aufgelistet werden, abgearbeitet.
+</body>
+</html>
diff --git a/src/help/de/LabelPatterns.html b/src/help/de/LabelPatterns.html
index a146ac8..c19e960 100644
--- a/src/help/de/LabelPatterns.html
+++ b/src/help/de/LabelPatterns.html
@@ -1,199 +1,199 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Anpassen der automatischen Erstellung von
-    BibTeX-Keys</h1>
-
-    <p>Im Tab "Key-Muster" im Dialog "Einstellungen"
-    kann man die Felder bestimmen, die zur automatischen
-    Generierung der BibTeX-Labels (bibtexkey) herangezogen werden.
-    Das Muster kann für jeden der vorgegebenen Eintragstypen
-    bestimmt werden.</p>
-
-    <h2>Key-Muster</h2>
-
-    <p>Das Muster kann beliebigen Text enthalten,
-    unabhängig von und zusätzlich zu den Feldmarken, die
-    angeben, dass ein bestimmtes Feld des Eintrags an dieser Stelle
-    des Keys eingefügt werden soll. Eine Feldmarke besteht
-    gewöhnlich aus dem Feldnamen in eckigen Klammern, z.B.
-    <b>[volume]</b>. Wenn dieses Feld zum Zeitpunkt der Erstellung
-    des Keys leer ist, wird kein Text eingefügt.</p>
-
-    <p>Es gibt außerdem mehrere spezielle Feldmarken, die nur
-    einen bestimmten Teil aus einem Feld extrahieren. Sie werden
-    unten aufgelistet. Natürlich können Sie auch neue
-    spezielle Feldmarken vorschlagen.</p>
-
-    <p>Spezielle Feldmarken:</p>
-
-    <ul>
-        <li><b>[<code>auth</code>]</b>: Der Nachname des ersten
-        Autors.<br /></li>
-
-        <li><b>[<code>authors</code>]</b>: Die Nachnamen aller
-        Autoren.<br /></li>
-
-        <li><b>[<code>authorLast</code>]</b>: Der Nachname des
-        letzten Autors<br /></li>
-
-        <li><b>[<code>authorsN</code>]</b>: Die Nachnamen von bis
-        zu N Autoren. Falls es mehr Autoren gibt, wird EtAl
-        angehängt.<br /></li>
-
-        <li><b>[<code>authorsAlpha</code>]</b>: Wie bei dem BibTeX-Stil
-        "alpha". Ein Autor: Erste drei Buchstaben des Nachnamens.
-        Zwei bis vier Autoren: Der erste Buchstabe jedes Nachnamens wird 
-        hintereinandergehägt. Mehr als vier Autoren: Jeweils der erste 
-        Buchstabe der ersten drei Nachnamens wird hintereinandergehängt. 
-        Zusätzlich ein "+" am Ende. <br /></li>  
-
-        <li><b>[<code>authIniN</code>]</b>: Der Anfang des
-        Nachnamens von jedem Autoren, wobei nicht mehr als N
-        Buchstaben verwendet werden.<br /></li>
-
-        <li><b>[<code>authorIni</code>]</b>: Die ersten 5
-        Buchstaben des Nachnamens des ersten Autors und die
-        Initialen der Nachnamen der restlichen Autoren.<br /></li>
-
-        <li><b>[<code>authN</code>]</b>: Die ersten N Buchstaben
-        des Nachnamens des ersten Autors.<br /></li>
-
-        <li><b>[<code>authN_M</code>]</b>: Die ersten N Buchstaben
-        des Nachnamens des M. Autors.<br /></li>
-
-        <li><b>[<code>auth.auth.ea</code>]</b>: Die Nachnamen der
-        beiden ersten Autoren und ".ea", falls es mehr als zwei
-        Autoren sind.<br /></li>
-
-        <li><b>[<code>auth.etal</code>]</b>: Der Nachname des
-        ersten Autors und der Nachname des zweiten Autors bei zwei
-        Autoren bzw. ".etal" bei mehr als zwei Autoren.</li>
-
-        <li><b>[<code>authshort</code>]</b>: Der Nachname bei einem
-        Autor; der erste Buchstabe der Nachnamen von bis zu drei
-        Autoren, falls mehr als ein Autor vorhanden ist. Ein Plus
-        (+) wird angehängt, falls es mehr als drei Autoren
-        gibt.<br /></li>
-    </ul><b>Anmerkung:</b>Falls es keinen Autor gibt (z.B. bei
-    einem Buch mit Herausgeber), benutzen die genannten
-    [auth...]-Feldmarken den oder die Herausgeber, die im
-    editor-Feld angegeben wurden. Also werden die Herausgeber eines
-    Buches ohne Autor für die Label-Erstellung wie Autoren
-    behandelt. Falls Sie dieses Verhalten nicht wünschen und
-    die Feldmarke stattdessen bei einem leeren author-Feld zu
-    nichts expandieren soll, müssen Sie <b>pureauth</b> statt
-    <b>auth</b> verwenden, z.B.: <b>[pureauth]</b> oder
-    <b>[pureauthors3]</b>.
-
-    <ul>
-        <li><b>[<code>edtr</code>]</b>: Der Nachname des ersten
-        Herausgebers.<br /></li>
-
-        <li><b>[<code>editors</code>]</b>: Die Nachnamen aller
-        Herausgeber.<br /></li>
-
-        <li><b>[<code>editorLast</code>]</b>: Der Nachname des letzten
-        Herausgebers.<br /></li>
-
-        <li><b>[<code>edtrIniN</code>]</b>: Der Anfang des
-        Nachnamens von jedem Herausgeber, wobei nicht mehr als N
-        Buchstaben verwendet werden.<br /></li>
-
-        <li><b>[<code>editorIni</code>]</b>: Die ersten 5
-        Buchstaben des Nachnamens des Herausgebers und die Initialen der
-        Nachnamen der restlichen Herausgeber.<br /></li>
-
-        <li><b>[<code>edtrN</code>]</b>: Die ersten N Buchstaben
-        des Nachnamens des ersten Herausgebers.<br /></li>
-
-        <li><b>[<code>edtrN_M</code>]</b>: Die ersten N Buchstaben
-        des Nachnamens des M. Herausgebers.<br /></li>
-
-        <li><b>[<code>edtr.edtr.ea</code>]</b>: Der Nachname der
-        ersten beiden Herausgeber und ".ea", falls es mehr als zwei
-        Herausgeber sind.<br /></li>
-
-        <li><b>[<code>edtrshort</code>]</b>: Der Nachname bei einem
-        Herausgeber; der erste Buchstabe der Nachnamen von bis zu drei
-        Herausgebern, falls mehr als ein Herausgeber vorhanden ist. Ein Plus
-        (+) wird angehängt, falls es mehr als drei Herausgeber
-        gibt.<br /></li>
-
-        <li><b>[<code>firstpage</code>]</b>: Die erste Seitenzahl
-        einer Veröffentlichung (pages).<br /></li>
-
-        <li><b>[<code>keywordN</code>]</b>: Stichwort Nummer N aus
-        dem Feld "keywords", gesetzt den Fall, dass die Stichworte
-        durch Komma oder Semikolon voneinander getrennt
-        sind.<br /></li>
-
-        <li><b>[<code>lastpage</code>]</b>: Die letzte Seitenzahl
-        einer Veröffentlichung (pages).<br /></li>
-
-        <li><b>[<code>shorttitle</code>]</b>: Die ersten 3 Worte
-        eines Titels (title).<br /></li>
-
-        <li><b>[<code>shortyear</code>]</b>: Die letzten 2 Ziffern
-        des Jahrgangs (year).<br /></li>
-
-        <li><b>[<code>veryshorttitle</code>]</b>: Die ersten beiden
-        Worte des Titels (title), wobei 'the', 'a' und 'an'
-        ausgelassen werden.<br /></li>
-    </ul>
-
-    <p>Hinter einem Feldnamen (oder einem der oben
-    aufgeführten Pseudo-Feldnamen) kann ein Modifikator
-    stehen. Modifikatoren werden in der Reihenfolge angewendet, in
-    der sie angegeben wurden.</p>
-
-    <ul>
-        <li><b>:abbr</b>: Kürzt den Text, der von einem
-        Feldnamen oder speziellen Feldmarken gebildet wird. Nur der
-        erste Buchstabe und weitere Buchstaben, die auf ein
-        Leerzeichen folgen, werden berücksichtigt. Zum
-        Beispiel würde <b>[journal:abbr]</b> die Zeitschrift
-        "Jorunal of Fish Biology" zu "JoFB" wandeln.<br /></li>
-
-        <li><b>:lower</b>: Wandelt den von der Feldmarke
-        eingefügten Text in Kleinbuchstaben. So wird
-        beispielsweise bei <b>[auth:lower]</b> der Nachname des
-        ersten Autors in Kleinbuchstaben ausgegeben.</li>
-    </ul>
-
-    <p>Wenn Sie keine Key-Muster für einen bestimmten
-    Eintragstyp angeben, wird das vorgegebene Muster (default
-    pattern) verwendet. Sie können das vorgegebene Muster
-    natürlich ebenfalls anpassen - seine Einstellung befindet
-    sich über der Liste der Eintragstypen im Tab
-    <b>Key-Muster</b> des Dialogs <b>Einstellungen</b>.</p>
-
-    <p>Das vorgegebene Key-Muster ist [auth][year], das Keys wie
-    z.B. <code>Yared1998</code> generiert. Falls der Key in der
-    geöffneten Datei nicht eindeutig sein sollte, wird einer
-    der Buchstaben a-z angefügt, bis ein eindeutiger Key
-    gefunden ist. Dementsprechend könnten die Labels wie folgt
-    aussehen:</p>
-
-    <p style="margin-left: 28pt">
-        <code>Yared1998</code><br />
-        <code>Yared1998a</code><br />
-        <code>Yared1998b</code>
-    </p>
-
-    <h2>Ersetzen eines regulären Ausdrucks</h2>
-
-    <p>Nachdem das Key-Muster angewendet wurde, um einen BibTeX-Key
-    zu erstellen, können Sie den Key-Generator nach einem bestimmten
-    regulären Ausdruck suchen und ihn durch eine Zeichenfolge
-    ersetzen lassen. Der reguläre Ausdruck und die
-    Zeichenfolge, die ihn ersetzen soll, werden in den Textfeldern
-    unter der Liste der Key-Muster eingegeben. Falls das Feld zur
-    Ersetzung des regulären Ausdrucks leer ist, werden die mit
-    der Suche übereinstimmenden regulären Ausdrücke
-    einfach gelöscht.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Anpassen der automatischen Erstellung von
+    BibTeX-Keys</h1>
+
+    <p>Im Tab "Key-Muster" im Dialog "Einstellungen"
+    kann man die Felder bestimmen, die zur automatischen
+    Generierung der BibTeX-Labels (bibtexkey) herangezogen werden.
+    Das Muster kann für jeden der vorgegebenen Eintragstypen
+    bestimmt werden.</p>
+
+    <h2>Key-Muster</h2>
+
+    <p>Das Muster kann beliebigen Text enthalten,
+    unabhängig von und zusätzlich zu den Feldmarken, die
+    angeben, dass ein bestimmtes Feld des Eintrags an dieser Stelle
+    des Keys eingefügt werden soll. Eine Feldmarke besteht
+    gewöhnlich aus dem Feldnamen in eckigen Klammern, z.B.
+    <b>[volume]</b>. Wenn dieses Feld zum Zeitpunkt der Erstellung
+    des Keys leer ist, wird kein Text eingefügt.</p>
+
+    <p>Es gibt außerdem mehrere spezielle Feldmarken, die nur
+    einen bestimmten Teil aus einem Feld extrahieren. Sie werden
+    unten aufgelistet. Natürlich können Sie auch neue
+    spezielle Feldmarken vorschlagen.</p>
+
+    <p>Spezielle Feldmarken:</p>
+
+    <ul>
+        <li><b>[<code>auth</code>]</b>: Der Nachname des ersten
+        Autors.<br /></li>
+
+        <li><b>[<code>authors</code>]</b>: Die Nachnamen aller
+        Autoren.<br /></li>
+
+        <li><b>[<code>authorLast</code>]</b>: Der Nachname des
+        letzten Autors<br /></li>
+
+        <li><b>[<code>authorsN</code>]</b>: Die Nachnamen von bis
+        zu N Autoren. Falls es mehr Autoren gibt, wird EtAl
+        angehängt.<br /></li>
+
+        <li><b>[<code>authorsAlpha</code>]</b>: Wie bei dem BibTeX-Stil
+        "alpha". Ein Autor: Erste drei Buchstaben des Nachnamens.
+        Zwei bis vier Autoren: Der erste Buchstabe jedes Nachnamens wird 
+        hintereinandergehägt. Mehr als vier Autoren: Jeweils der erste 
+        Buchstabe der ersten drei Nachnamens wird hintereinandergehängt. 
+        Zusätzlich ein "+" am Ende. <br /></li>  
+
+        <li><b>[<code>authIniN</code>]</b>: Der Anfang des
+        Nachnamens von jedem Autoren, wobei nicht mehr als N
+        Buchstaben verwendet werden.<br /></li>
+
+        <li><b>[<code>authorIni</code>]</b>: Die ersten 5
+        Buchstaben des Nachnamens des ersten Autors und die
+        Initialen der Nachnamen der restlichen Autoren.<br /></li>
+
+        <li><b>[<code>authN</code>]</b>: Die ersten N Buchstaben
+        des Nachnamens des ersten Autors.<br /></li>
+
+        <li><b>[<code>authN_M</code>]</b>: Die ersten N Buchstaben
+        des Nachnamens des M. Autors.<br /></li>
+
+        <li><b>[<code>auth.auth.ea</code>]</b>: Die Nachnamen der
+        beiden ersten Autoren und ".ea", falls es mehr als zwei
+        Autoren sind.<br /></li>
+
+        <li><b>[<code>auth.etal</code>]</b>: Der Nachname des
+        ersten Autors und der Nachname des zweiten Autors bei zwei
+        Autoren bzw. ".etal" bei mehr als zwei Autoren.</li>
+
+        <li><b>[<code>authshort</code>]</b>: Der Nachname bei einem
+        Autor; der erste Buchstabe der Nachnamen von bis zu drei
+        Autoren, falls mehr als ein Autor vorhanden ist. Ein Plus
+        (+) wird angehängt, falls es mehr als drei Autoren
+        gibt.<br /></li>
+    </ul><b>Anmerkung:</b>Falls es keinen Autor gibt (z.B. bei
+    einem Buch mit Herausgeber), benutzen die genannten
+    [auth...]-Feldmarken den oder die Herausgeber, die im
+    editor-Feld angegeben wurden. Also werden die Herausgeber eines
+    Buches ohne Autor für die Label-Erstellung wie Autoren
+    behandelt. Falls Sie dieses Verhalten nicht wünschen und
+    die Feldmarke stattdessen bei einem leeren author-Feld zu
+    nichts expandieren soll, müssen Sie <b>pureauth</b> statt
+    <b>auth</b> verwenden, z.B.: <b>[pureauth]</b> oder
+    <b>[pureauthors3]</b>.
+
+    <ul>
+        <li><b>[<code>edtr</code>]</b>: Der Nachname des ersten
+        Herausgebers.<br /></li>
+
+        <li><b>[<code>editors</code>]</b>: Die Nachnamen aller
+        Herausgeber.<br /></li>
+
+        <li><b>[<code>editorLast</code>]</b>: Der Nachname des letzten
+        Herausgebers.<br /></li>
+
+        <li><b>[<code>edtrIniN</code>]</b>: Der Anfang des
+        Nachnamens von jedem Herausgeber, wobei nicht mehr als N
+        Buchstaben verwendet werden.<br /></li>
+
+        <li><b>[<code>editorIni</code>]</b>: Die ersten 5
+        Buchstaben des Nachnamens des Herausgebers und die Initialen der
+        Nachnamen der restlichen Herausgeber.<br /></li>
+
+        <li><b>[<code>edtrN</code>]</b>: Die ersten N Buchstaben
+        des Nachnamens des ersten Herausgebers.<br /></li>
+
+        <li><b>[<code>edtrN_M</code>]</b>: Die ersten N Buchstaben
+        des Nachnamens des M. Herausgebers.<br /></li>
+
+        <li><b>[<code>edtr.edtr.ea</code>]</b>: Der Nachname der
+        ersten beiden Herausgeber und ".ea", falls es mehr als zwei
+        Herausgeber sind.<br /></li>
+
+        <li><b>[<code>edtrshort</code>]</b>: Der Nachname bei einem
+        Herausgeber; der erste Buchstabe der Nachnamen von bis zu drei
+        Herausgebern, falls mehr als ein Herausgeber vorhanden ist. Ein Plus
+        (+) wird angehängt, falls es mehr als drei Herausgeber
+        gibt.<br /></li>
+
+        <li><b>[<code>firstpage</code>]</b>: Die erste Seitenzahl
+        einer Veröffentlichung (pages).<br /></li>
+
+        <li><b>[<code>keywordN</code>]</b>: Stichwort Nummer N aus
+        dem Feld "keywords", gesetzt den Fall, dass die Stichworte
+        durch Komma oder Semikolon voneinander getrennt
+        sind.<br /></li>
+
+        <li><b>[<code>lastpage</code>]</b>: Die letzte Seitenzahl
+        einer Veröffentlichung (pages).<br /></li>
+
+        <li><b>[<code>shorttitle</code>]</b>: Die ersten 3 Worte
+        eines Titels (title).<br /></li>
+
+        <li><b>[<code>shortyear</code>]</b>: Die letzten 2 Ziffern
+        des Jahrgangs (year).<br /></li>
+
+        <li><b>[<code>veryshorttitle</code>]</b>: Die ersten beiden
+        Worte des Titels (title), wobei 'the', 'a' und 'an'
+        ausgelassen werden.<br /></li>
+    </ul>
+
+    <p>Hinter einem Feldnamen (oder einem der oben
+    aufgeführten Pseudo-Feldnamen) kann ein Modifikator
+    stehen. Modifikatoren werden in der Reihenfolge angewendet, in
+    der sie angegeben wurden.</p>
+
+    <ul>
+        <li><b>:abbr</b>: Kürzt den Text, der von einem
+        Feldnamen oder speziellen Feldmarken gebildet wird. Nur der
+        erste Buchstabe und weitere Buchstaben, die auf ein
+        Leerzeichen folgen, werden berücksichtigt. Zum
+        Beispiel würde <b>[journal:abbr]</b> die Zeitschrift
+        "Jorunal of Fish Biology" zu "JoFB" wandeln.<br /></li>
+
+        <li><b>:lower</b>: Wandelt den von der Feldmarke
+        eingefügten Text in Kleinbuchstaben. So wird
+        beispielsweise bei <b>[auth:lower]</b> der Nachname des
+        ersten Autors in Kleinbuchstaben ausgegeben.</li>
+    </ul>
+
+    <p>Wenn Sie keine Key-Muster für einen bestimmten
+    Eintragstyp angeben, wird das vorgegebene Muster (default
+    pattern) verwendet. Sie können das vorgegebene Muster
+    natürlich ebenfalls anpassen - seine Einstellung befindet
+    sich über der Liste der Eintragstypen im Tab
+    <b>Key-Muster</b> des Dialogs <b>Einstellungen</b>.</p>
+
+    <p>Das vorgegebene Key-Muster ist [auth][year], das Keys wie
+    z.B. <code>Yared1998</code> generiert. Falls der Key in der
+    geöffneten Datei nicht eindeutig sein sollte, wird einer
+    der Buchstaben a-z angefügt, bis ein eindeutiger Key
+    gefunden ist. Dementsprechend könnten die Labels wie folgt
+    aussehen:</p>
+
+    <p style="margin-left: 28pt">
+        <code>Yared1998</code><br />
+        <code>Yared1998a</code><br />
+        <code>Yared1998b</code>
+    </p>
+
+    <h2>Ersetzen eines regulären Ausdrucks</h2>
+
+    <p>Nachdem das Key-Muster angewendet wurde, um einen BibTeX-Key
+    zu erstellen, können Sie den Key-Generator nach einem bestimmten
+    regulären Ausdruck suchen und ihn durch eine Zeichenfolge
+    ersetzen lassen. Der reguläre Ausdruck und die
+    Zeichenfolge, die ihn ersetzen soll, werden in den Textfeldern
+    unter der Liste der Key-Muster eingegeben. Falls das Feld zur
+    Ersetzung des regulären Ausdrucks leer ist, werden die mit
+    der Suche übereinstimmenden regulären Ausdrücke
+    einfach gelöscht.</p>
+</body>
+</html>
diff --git a/src/help/de/License.html b/src/help/de/License.html
index ce67dad..ef11208 100644
--- a/src/help/de/License.html
+++ b/src/help/de/License.html
@@ -1,494 +1,494 @@
-<HTML>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">
-<H1>GNU General Public License</H1>
-
-<H2>Table of Contents</H2>
-<UL>
-
-  <LI><A NAME="TOC1" HREF="License.html#SEC1">GNU GENERAL PUBLIC LICENSE</A>
-<UL>
-<LI><A NAME="TOC2" HREF="License.html#SEC2">Preamble</A>
-<LI><A NAME="TOC3" HREF="License.html#SEC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A>
-<LI><A NAME="TOC4" HREF="License.html#SEC4">How to Apply These Terms to Your New Programs</A>
-
-</UL>
-</UL>
-
-<P>
-
-<HR>
-
-<P>
-
-
-
-<H2><A NAME="SEC1" HREF="License#TOC1">GNU GENERAL PUBLIC LICENSE</A></H2>
-<P>
-Version 2, June 1991
-
-</P>
-
-<PRE>
-Copyright (C) 1989, 1991 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.
-</PRE>
-
-
-
-<H2><A NAME="SEC2" HREF="License.html#TOC2">Preamble</A></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
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-</P>
-<P>
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-</P>
-<P>
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-</P>
-<P>
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-</P>
-<P>
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-</P>
-<P>
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-</P>
-<P>
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-</P>
-<P>
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-</P>
-
-
-<H2><A NAME="SEC3" HREF="License.html#TOC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A></H2>
-
-
-<P>
-
-<STRONG>0.</STRONG>
- This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-<P>
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-<P>
-
-<STRONG>1.</STRONG>
- You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-<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>
-
-<STRONG>2.</STRONG>
- You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-<P>
-
-<UL>
-
-<LI><STRONG>a)</STRONG>
-     You must cause the modified files to carry prominent notices
-     stating that you changed the files and the date of any change.
-
-<P>
-<LI><STRONG>b)</STRONG>
-     You must cause any work that you distribute or publish, that in
-     whole or in part contains or is derived from the Program or any
-     part thereof, to be licensed as a whole at no charge to all third
-     parties under the terms of this License.
-
-<P>
-<LI><STRONG>c)</STRONG>
-     If the modified program normally reads commands interactively
-     when run, you must cause it, when started running for such
-     interactive use in the most ordinary way, to print or display an
-     announcement including an appropriate copyright notice and a
-     notice that there is no warranty (or else, saying that you provide
-     a warranty) and that users may redistribute the program under
-     these conditions, and telling the user how to view a copy of this
-     License.  (Exception: if the Program itself is interactive but
-     does not normally print such an announcement, your work based on
-     the Program is not required to print an announcement.)
-</UL>
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-<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 Program.
-<P>
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-<P>
-
-<STRONG>3.</STRONG>
- You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-
-<!-- we use this doubled UL to get the sub-sections indented, -->
-<!-- while making the bullets as unobvious as possible. -->
-<UL>
-
-<LI><STRONG>a)</STRONG>
-     Accompany it with the complete corresponding machine-readable
-     source code, which must be distributed under the terms of Sections
-     1 and 2 above on a medium customarily used for software interchange; or,
-
-<P>
-<LI><STRONG>b)</STRONG>
-     Accompany it with a written offer, valid for at least three
-     years, to give any third party, for a charge no more than your
-     cost of physically performing source distribution, a complete
-     machine-readable copy of the corresponding source code, to be
-     distributed under the terms of Sections 1 and 2 above on a medium
-     customarily used for software interchange; or,
-
-<P>
-<LI><STRONG>c)</STRONG>
-     Accompany it with the information you received as to the offer
-     to distribute corresponding source code.  (This alternative is
-     allowed only for noncommercial distribution and only if you
-     received the program in object code or executable form with such
-     an offer, in accord with Subsection b above.)
-</UL>
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-<P>
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-<P>
-
-<STRONG>4.</STRONG>
- You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-<P>
-
-<STRONG>5.</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 Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-<P>
-
-<STRONG>6.</STRONG>
- Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-<P>
-
-<STRONG>7.</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 Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-<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>
-
-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>
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-<P>
-
-<STRONG>8.</STRONG>
- If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-<P>
-
-<STRONG>9.</STRONG>
- The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-<P>
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-<P>
-
-
-<STRONG>10.</STRONG>
- If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-
-
-<P><STRONG>NO WARRANTY</STRONG></P>
-
-<P>
-
-<STRONG>11.</STRONG>
- BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-<P>
-
-<STRONG>12.</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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-<P>
-
-
-<H2>END OF TERMS AND CONDITIONS</H2>
-
-
-
-<H2><A NAME="SEC4" HREF="License.html#TOC4">How to Apply These Terms to Your New Programs</A></H2>
-
-<P>
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-</P>
-<P>
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-</P>
-
-<PRE>
-<VAR>one line to give the program's name and an idea of what it does.</VAR>
-Copyright (C) <VAR>yyyy</VAR>  <VAR>name of author</VAR>
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-</PRE>
-
-<P>
-Also add information on how to contact you by electronic and paper mail.
-
-</P>
-<P>
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-</P>
-
-<PRE>
-Gnomovision version 69, Copyright (C) <VAR>year</VAR> <VAR>name of author</VAR>
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-type `show w'.  This is free software, and you are welcome
-to redistribute it under certain conditions; type `show c' 
-for details.
-</PRE>
-
-<P>
-The hypothetical commands <SAMP>`show w'</SAMP> and <SAMP>`show c'</SAMP> should show
-the appropriate parts of the General Public License.  Of course, the
-commands you use may be called something other than <SAMP>`show w'</SAMP> and
-<SAMP>`show c'</SAMP>; they could even be mouse-clicks or menu items--whatever
-suits your program.
-
-</P>
-<P>
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-</P>
-
-<PRE>
-Yoyodyne, Inc., hereby disclaims all copyright
-interest in the program `Gnomovision'
-(which makes passes at compilers) written 
-by James Hacker.
-
-<VAR>signature of Ty Coon</VAR>, 1 April 1989
-Ty Coon, President of Vice
-</PRE>
-
-<P>
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
-<P><CENTER><a href="About.html">Back</a>
-</BODY>
-</HTML>
+<HTML>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">
+<H1>GNU General Public License</H1>
+
+<H2>Table of Contents</H2>
+<UL>
+
+  <LI><A NAME="TOC1" HREF="License.html#SEC1">GNU GENERAL PUBLIC LICENSE</A>
+<UL>
+<LI><A NAME="TOC2" HREF="License.html#SEC2">Preamble</A>
+<LI><A NAME="TOC3" HREF="License.html#SEC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A>
+<LI><A NAME="TOC4" HREF="License.html#SEC4">How to Apply These Terms to Your New Programs</A>
+
+</UL>
+</UL>
+
+<P>
+
+<HR>
+
+<P>
+
+
+
+<H2><A NAME="SEC1" HREF="License#TOC1">GNU GENERAL PUBLIC LICENSE</A></H2>
+<P>
+Version 2, June 1991
+
+</P>
+
+<PRE>
+Copyright (C) 1989, 1991 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.
+</PRE>
+
+
+
+<H2><A NAME="SEC2" HREF="License.html#TOC2">Preamble</A></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
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+</P>
+<P>
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+</P>
+<P>
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+</P>
+<P>
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+</P>
+<P>
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+</P>
+<P>
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+</P>
+<P>
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+</P>
+<P>
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+</P>
+
+
+<H2><A NAME="SEC3" HREF="License.html#TOC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A></H2>
+
+
+<P>
+
+<STRONG>0.</STRONG>
+ This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+<P>
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+<P>
+
+<STRONG>1.</STRONG>
+ You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+<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>
+
+<STRONG>2.</STRONG>
+ You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+<P>
+
+<UL>
+
+<LI><STRONG>a)</STRONG>
+     You must cause the modified files to carry prominent notices
+     stating that you changed the files and the date of any change.
+
+<P>
+<LI><STRONG>b)</STRONG>
+     You must cause any work that you distribute or publish, that in
+     whole or in part contains or is derived from the Program or any
+     part thereof, to be licensed as a whole at no charge to all third
+     parties under the terms of this License.
+
+<P>
+<LI><STRONG>c)</STRONG>
+     If the modified program normally reads commands interactively
+     when run, you must cause it, when started running for such
+     interactive use in the most ordinary way, to print or display an
+     announcement including an appropriate copyright notice and a
+     notice that there is no warranty (or else, saying that you provide
+     a warranty) and that users may redistribute the program under
+     these conditions, and telling the user how to view a copy of this
+     License.  (Exception: if the Program itself is interactive but
+     does not normally print such an announcement, your work based on
+     the Program is not required to print an announcement.)
+</UL>
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+<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 Program.
+<P>
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+<P>
+
+<STRONG>3.</STRONG>
+ You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+
+<!-- we use this doubled UL to get the sub-sections indented, -->
+<!-- while making the bullets as unobvious as possible. -->
+<UL>
+
+<LI><STRONG>a)</STRONG>
+     Accompany it with the complete corresponding machine-readable
+     source code, which must be distributed under the terms of Sections
+     1 and 2 above on a medium customarily used for software interchange; or,
+
+<P>
+<LI><STRONG>b)</STRONG>
+     Accompany it with a written offer, valid for at least three
+     years, to give any third party, for a charge no more than your
+     cost of physically performing source distribution, a complete
+     machine-readable copy of the corresponding source code, to be
+     distributed under the terms of Sections 1 and 2 above on a medium
+     customarily used for software interchange; or,
+
+<P>
+<LI><STRONG>c)</STRONG>
+     Accompany it with the information you received as to the offer
+     to distribute corresponding source code.  (This alternative is
+     allowed only for noncommercial distribution and only if you
+     received the program in object code or executable form with such
+     an offer, in accord with Subsection b above.)
+</UL>
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+<P>
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+<P>
+
+<STRONG>4.</STRONG>
+ You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+<P>
+
+<STRONG>5.</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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+<P>
+
+<STRONG>6.</STRONG>
+ Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+<P>
+
+<STRONG>7.</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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+<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>
+
+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>
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+<P>
+
+<STRONG>8.</STRONG>
+ If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+<P>
+
+<STRONG>9.</STRONG>
+ The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+<P>
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+<P>
+
+
+<STRONG>10.</STRONG>
+ If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+
+
+<P><STRONG>NO WARRANTY</STRONG></P>
+
+<P>
+
+<STRONG>11.</STRONG>
+ BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+<P>
+
+<STRONG>12.</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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+<P>
+
+
+<H2>END OF TERMS AND CONDITIONS</H2>
+
+
+
+<H2><A NAME="SEC4" HREF="License.html#TOC4">How to Apply These Terms to Your New Programs</A></H2>
+
+<P>
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+</P>
+<P>
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+</P>
+
+<PRE>
+<VAR>one line to give the program's name and an idea of what it does.</VAR>
+Copyright (C) <VAR>yyyy</VAR>  <VAR>name of author</VAR>
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+</PRE>
+
+<P>
+Also add information on how to contact you by electronic and paper mail.
+
+</P>
+<P>
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+</P>
+
+<PRE>
+Gnomovision version 69, Copyright (C) <VAR>year</VAR> <VAR>name of author</VAR>
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'.  This is free software, and you are welcome
+to redistribute it under certain conditions; type `show c' 
+for details.
+</PRE>
+
+<P>
+The hypothetical commands <SAMP>`show w'</SAMP> and <SAMP>`show c'</SAMP> should show
+the appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than <SAMP>`show w'</SAMP> and
+<SAMP>`show c'</SAMP>; they could even be mouse-clicks or menu items--whatever
+suits your program.
+
+</P>
+<P>
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+</P>
+
+<PRE>
+Yoyodyne, Inc., hereby disclaims all copyright
+interest in the program `Gnomovision'
+(which makes passes at compilers) written 
+by James Hacker.
+
+<VAR>signature of Ty Coon</VAR>, 1 April 1989
+Ty Coon, President of Vice
+</PRE>
+
+<P>
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+<P><CENTER><a href="About.html">Back</a>
+</BODY>
+</HTML>
diff --git a/src/help/de/MarkingHelp.html b/src/help/de/MarkingHelp.html
index b94ce86..6ca5175 100644
--- a/src/help/de/MarkingHelp.html
+++ b/src/help/de/MarkingHelp.html
@@ -1,36 +1,36 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Einträge markieren</h1>
-
-    <p>Mit der Tastenkombination
-    STRG-M können Sie Einträge <em>markieren</em> und
-    diese Markierung mit STRG-SHIFT-M wieder aufheben. Diese
-    Aktionen sind auch im Menü "Bearbeiten" zu finden.</p>
-
-    <p>Das Markieren ist nicht dasselbe wie das Auswählen
-    eines Eintrags. Markierte Einträge verhalten sich in
-    zweierlei Hinsicht anders als die restlichen Einträge:</p>
-
-    <ol>
-        <li>Markierte Einträge werden immer mit einem gelben
-        Hintergrund in der Tabelle angezeigt.</li>
-
-        <li>Markierte Einträge werden an den Anfang der
-        Eintragsliste verschoben, falls Ihre Tabelle nicht nach
-        Gruppen oder aufgrund einer Suche sortiert ist.</li>
-    </ol>
-
-    <p>Wenn Sie Ihre Datei speichern, werden die Markierungen
-    beibehalten.</p>
-
-    <p>Das Markieren von Einträgen ist z.B. nützlich,
-    wenn Sie verschiedene Suchvorgänge durchführen
-    wollen, ohne das erste Suchergebnis zu verlieren, oder wenn Sie
-    sich merken wollen, welche Artikel oder Bücher Sie noch
-    einmal genauer ansehen müssen.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Einträge markieren</h1>
+
+    <p>Mit der Tastenkombination
+    STRG-M können Sie Einträge <em>markieren</em> und
+    diese Markierung mit STRG-SHIFT-M wieder aufheben. Diese
+    Aktionen sind auch im Menü "Bearbeiten" zu finden.</p>
+
+    <p>Das Markieren ist nicht dasselbe wie das Auswählen
+    eines Eintrags. Markierte Einträge verhalten sich in
+    zweierlei Hinsicht anders als die restlichen Einträge:</p>
+
+    <ol>
+        <li>Markierte Einträge werden immer mit einem gelben
+        Hintergrund in der Tabelle angezeigt.</li>
+
+        <li>Markierte Einträge werden an den Anfang der
+        Eintragsliste verschoben, falls Ihre Tabelle nicht nach
+        Gruppen oder aufgrund einer Suche sortiert ist.</li>
+    </ol>
+
+    <p>Wenn Sie Ihre Datei speichern, werden die Markierungen
+    beibehalten.</p>
+
+    <p>Das Markieren von Einträgen ist z.B. nützlich,
+    wenn Sie verschiedene Suchvorgänge durchführen
+    wollen, ohne das erste Suchergebnis zu verlieren, oder wenn Sie
+    sich merken wollen, welche Artikel oder Bücher Sie noch
+    einmal genauer ansehen müssen.</p>
+</body>
+</html>
diff --git a/src/help/de/MedlineHelp.html b/src/help/de/MedlineHelp.html
index 6187b08..f4c4a5f 100644
--- a/src/help/de/MedlineHelp.html
+++ b/src/help/de/MedlineHelp.html
@@ -1,53 +1,53 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Einträge von Medline abrufen</h1>
-
-    <p>MEDLINE ist die
-    wichtigste Datenbank der <em>U.S. National Library of
-    Medicine</em>. Sie enthält Literaturangaben von
-    Zeitschriftenartikeln der Lebenswissenschaften, vornehmlich der
-    Biomedizin.</p>
-
-    <p>JabRef kann Literaturangaben von der Medline-Datenbank
-    herunterladen. Um diese Funktion zu nutzen, wählen Sie
-    <b>Extras -> Medline abrufen</b>, so dass der Medline-Dialog
-    im linken Seitenfeld erscheint.</p>
-
-    <p>Es gibt zwei Möglichkeiten, die Auswahl der
-    Einträge vorzunehmen, die heruntergeladen werden
-    sollen:</p>
-
-    <ol>
-        <li>Geben Sie eine oder mehr Medline IDs (getrennt durch
-        Komma/Semikolon) in das Textfeld ein.</li>
-
-        <li>Geben Sie Namen oder Wörter ein, nach denen
-        gesucht werden soll. Sie können dazu die Operatoren
-        <em>and</em> und <em>or</em> sowie Klammern benutzen, um
-        Ihren Suchbegriff zu verfeinern.</li>
-    </ol>In beiden Fällen drücken Sie dann <b>Enter</b>
-    oder die Schaltfläche <b>Abrufen</b>. Wenn Sie eine
-    Textsuche durchführen, wird Ihnen die Anzahl der
-    gefundenen Einträge angezeigt, und Sie können
-    wählen, wie viele Sie herunterladen möchten.
-
-    <p>Die abgerufenen Einträge werden Ihrer zu diesem
-    Zeitpunkt aktivierten Datei zugeordnet.</p>
-
-    <h2>Benutzung eines Proxy-Servers</h2>
-
-    <p>Wenn Sie einen
-    HTTP-Proxy-Server benutzen müssen, übergeben Sie den
-    Servernamen und die Portnummer an Java.</p>
-
-    <p><code>java -Dhttp.proxyHost="hostname"
-    -Dhttp.proxyPort="portnumber"</code></p>
-
-    <p>Diese Umgebungseinstellungen sind in der <a href="http://docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html">Sun J2SE Dokumentation</a> beschrieben.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Einträge von Medline abrufen</h1>
+
+    <p>MEDLINE ist die
+    wichtigste Datenbank der <em>U.S. National Library of
+    Medicine</em>. Sie enthält Literaturangaben von
+    Zeitschriftenartikeln der Lebenswissenschaften, vornehmlich der
+    Biomedizin.</p>
+
+    <p>JabRef kann Literaturangaben von der Medline-Datenbank
+    herunterladen. Um diese Funktion zu nutzen, wählen Sie
+    <b>Extras -> Medline abrufen</b>, so dass der Medline-Dialog
+    im linken Seitenfeld erscheint.</p>
+
+    <p>Es gibt zwei Möglichkeiten, die Auswahl der
+    Einträge vorzunehmen, die heruntergeladen werden
+    sollen:</p>
+
+    <ol>
+        <li>Geben Sie eine oder mehr Medline IDs (getrennt durch
+        Komma/Semikolon) in das Textfeld ein.</li>
+
+        <li>Geben Sie Namen oder Wörter ein, nach denen
+        gesucht werden soll. Sie können dazu die Operatoren
+        <em>and</em> und <em>or</em> sowie Klammern benutzen, um
+        Ihren Suchbegriff zu verfeinern.</li>
+    </ol>In beiden Fällen drücken Sie dann <b>Enter</b>
+    oder die Schaltfläche <b>Abrufen</b>. Wenn Sie eine
+    Textsuche durchführen, wird Ihnen die Anzahl der
+    gefundenen Einträge angezeigt, und Sie können
+    wählen, wie viele Sie herunterladen möchten.
+
+    <p>Die abgerufenen Einträge werden Ihrer zu diesem
+    Zeitpunkt aktivierten Datei zugeordnet.</p>
+
+    <h2>Benutzung eines Proxy-Servers</h2>
+
+    <p>Wenn Sie einen
+    HTTP-Proxy-Server benutzen müssen, übergeben Sie den
+    Servernamen und die Portnummer an Java.</p>
+
+    <p><code>java -Dhttp.proxyHost="hostname"
+    -Dhttp.proxyPort="portnumber"</code></p>
+
+    <p>Diese Umgebungseinstellungen sind in der <a href="http://docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html">Sun J2SE Dokumentation</a> beschrieben.</p>
+
+</body>
+</html>
diff --git a/src/help/de/OpenOfficeHelp.html b/src/help/de/OpenOfficeHelp.html
index 74bae7b..ad4c3c5 100644
--- a/src/help/de/OpenOfficeHelp.html
+++ b/src/help/de/OpenOfficeHelp.html
@@ -1,123 +1,123 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>JabRef-Bibliographien in OpenOffice.org benutzen</h1>
-
-    <p>JabRef kann Ihre Datei sowohl in das OpenOffice.org 1.1
-    <b>.sxc</b>-Tabellenkalkulationsformat als auch in das
-    OpenDocument <b>.ods</b>-Tabellenkalkulationsformat, das von
-    OpenOffice.org 2.0 benutzt wird, exportieren.</p>
-
-    <p>In beiden fällen besteht die exportierte Tabelle aus
-    einem Arbeitsblatt, das die Einträge in Reihen und die
-    unterschiedlichen Felder in Spalten enthält. Die
-    Reihenfolge und Bennung der Spalten ist kompatibel zu den
-    Literaturverzeichnis-Funktionen von OpenOffice.org (OOo 1.1:
-    <b>.sxc</b>, OOo 2.0: <b>.ods</b>).</p>
-
-    <p>Je nach Ihrer Version von OpenOffice.org gibt es verschiedene
-    Vorgehensweisen, um JabRef zum Verwalten Ihrer bibliographischen
-    Datenbank zu benutzen:</p>
-
-    <h2>Die exportierte Datei als bibliographische Datenbank in
-    OpenOffice.org 2.3 und 2.4 benutzen</h2>
-
-    <p>Mit folgenden Schritten können Sie eine aus JabRef exportierte
-    Tabelle als bibliographische Datenbank benutzen:</p>
-
-    <ul>
-    <li>Exportieren Sie in JabRef Ihre Datei in das <b>.ods</b>-Format</li>
-    <li>Öffnen Sie OpenOffice.org Writer</li>
-
-    <li>Wählen Sie <b>Bearbeiten -> Datenbank austauschen</b>. Klicken Sie auf
-    <b>Durchsuchen</b> und wählen die Datei, die Sie in das .ods-Format
-    exportiert haben.</li>
-    <li>Klicken Sie auf das <b>+</b> vor dem Namen der Datenbank, anschließend
-    auf den angezeigten Dateinamen und schließlich auf den Knopf <b>Festlegen</b>.</li>
-    <li>Wählen Sie <b>Extras -> Optionen -> OpenOffice.org Base ->
-    Datenbanken</b>. In diesem Fenster sollte die Datenbank, die Sie gerade
-    importiert haben, angezeigt werden. Die Standard-Datenbank für Bibliographien
-    von OOo sollte ebenfalls angezeigt werden (<i>Bibliography</i>).</li>
-    <li>Klicken Sie auf <b>Bearbeiten</b> und ändern Sie den Namen der Datenbank
-    <i>Bibliography</i>, z.B. zu <i>Bibliography-old</i> (denn OpenOffice.org
-    kann nicht mit mehreren bibliographischen Datenbanken arbeiten).</li>
-    <li>Wählen Sie anschließend Ihre bibliographische Datenbank und benennen Sie sie um in
-    <i>Bibliography</i> (achten Sie auf einen Großbuchstaben am Anfang des Namens).</li>
-    </ul>
-
-    <p>Nach diesen Schritten sollte Ihre bibliographische Datenbank zur Benutzung
-    mit OpenOffice.org bereit sein. Um das zu prüfen, wählen Sie <b>Einfügen ->
-    Verzeichnisse -> Literaturverzeichniseintrag...</b>. Im folgenden Dialog sollten
-    in der Dropdownliste (unter <b>Kurzbezeichnung</b>) die BibTeX-Keys Ihrer
-    Datenbank erscheinen.</p>
-
-    <h2>Die exportierte Datei als Bibliographiedatenbank in
-    OpenOffice 2.0, 2.1 oder 2.2 benutzen</h2>
-
-    <p>Gehen Sie folgendermaßen vor, um eine Tabelle, die von JabRef
-    exportiert wurde, als Bibliographiedatenbank in OpenOffice.org
-    zu benutzen:</p>
-
-    <ul>
-        <li>Exportieren Sie Ihre Datenbank in das <b>.ods</b>
-        -Format</li>
-
-        <li>Starten Sie OpenOffice.org</li>
-
-        <li>Wählen Sie <b>Extras -> Optionen ->
-        OpenOffice.org Base -> Datenbanken</b></li>
-
-        <li>Bearbeiten Sie die <i>Bibliography</i>-Datenbank und
-        ändern ihren Namen z.B. in
-        <i>Bibliographie-alt</i></li>
-
-        <li>Schließen Sie das Fenster <b>Optionen</b> und
-        gehen Sie zu <b>Datei -> Neu -> Datenbank</b></li>
-
-        <li>Wählen Sie <b>Verbindung zu einer bestehenden
-        Datenbank herstellen</b>, wählen
-        <b>Tabellendokument</b> als Datenbanktyp und wählen
-        die <b>.ods</b>-Datei, die Sie exportiert haben</li>
-
-        <li>Klicken Sie auf <b>Fertig stellen</b> und wählen
-        den Namen <i>Bibliography</i> im Speicherdialog</li>
-    </ul>Anschließend wählen Sie <b>Extras ->
-    Literaturdatenbank</b>. Ihre Datenbank sollte nun angezeigt
-    werden.
-
-    <h2>Eine exportierte Datei als Datenbank in OpenOffice 1.1.x
-    benutzen</h2>
-
-    <ul>
-        <li>Exportieren Sie Ihre Datei in das
-        <b>.sxc</b>-Format</li>
-
-        <li>Starten Sie OpenOffice.org</li>
-
-        <li>Wählen Sie <b>Extras -> Datenquellen</b></li>
-
-        <li>Wählen Sie die <i>Bibliography</i>-Datei und
-        ändern ihren Namen z.B. in
-        <i>Bibliographie-alt</i>.</li>
-
-        <li>Drücken Sie <b>Anwenden</b>.</li>
-
-        <li>Klicken Sie <b>Neue Datenquelle</b>. Ein neuer Eintrag
-        erscheint. Ändern Sie den Namen zu
-        <i>Bibliography</i>.</li>
-
-        <li>Ändern Sie den <b>Dateityp</b> zu <b>Tabelle</b>.
-        Klicken Sie den <b>...</b>-Button in der Zeile
-        <b>Datenquellen URL</b>. Wählen Sie die
-        <b>.sxc</b>-Datei, die Sie exportiert haben.</li>
-
-        <li>Klicken Sie auf <b>OK</b>, um das Fenster
-        <b>Datenquellen</b> zu schließen.</li>
-    </ul>Anschließend wählen Sie <b>Extras ->
-    Literaturdatenbank</b>. Ihre Datenbank sollte nun angezeigt
-    werden.
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>JabRef-Bibliographien in OpenOffice.org benutzen</h1>
+
+    <p>JabRef kann Ihre Datei sowohl in das OpenOffice.org 1.1
+    <b>.sxc</b>-Tabellenkalkulationsformat als auch in das
+    OpenDocument <b>.ods</b>-Tabellenkalkulationsformat, das von
+    OpenOffice.org 2.0 benutzt wird, exportieren.</p>
+
+    <p>In beiden fällen besteht die exportierte Tabelle aus
+    einem Arbeitsblatt, das die Einträge in Reihen und die
+    unterschiedlichen Felder in Spalten enthält. Die
+    Reihenfolge und Bennung der Spalten ist kompatibel zu den
+    Literaturverzeichnis-Funktionen von OpenOffice.org (OOo 1.1:
+    <b>.sxc</b>, OOo 2.0: <b>.ods</b>).</p>
+
+    <p>Je nach Ihrer Version von OpenOffice.org gibt es verschiedene
+    Vorgehensweisen, um JabRef zum Verwalten Ihrer bibliographischen
+    Datenbank zu benutzen:</p>
+
+    <h2>Die exportierte Datei als bibliographische Datenbank in
+    OpenOffice.org 2.3 und 2.4 benutzen</h2>
+
+    <p>Mit folgenden Schritten können Sie eine aus JabRef exportierte
+    Tabelle als bibliographische Datenbank benutzen:</p>
+
+    <ul>
+    <li>Exportieren Sie in JabRef Ihre Datei in das <b>.ods</b>-Format</li>
+    <li>Öffnen Sie OpenOffice.org Writer</li>
+
+    <li>Wählen Sie <b>Bearbeiten -> Datenbank austauschen</b>. Klicken Sie auf
+    <b>Durchsuchen</b> und wählen die Datei, die Sie in das .ods-Format
+    exportiert haben.</li>
+    <li>Klicken Sie auf das <b>+</b> vor dem Namen der Datenbank, anschließend
+    auf den angezeigten Dateinamen und schließlich auf den Knopf <b>Festlegen</b>.</li>
+    <li>Wählen Sie <b>Extras -> Optionen -> OpenOffice.org Base ->
+    Datenbanken</b>. In diesem Fenster sollte die Datenbank, die Sie gerade
+    importiert haben, angezeigt werden. Die Standard-Datenbank für Bibliographien
+    von OOo sollte ebenfalls angezeigt werden (<i>Bibliography</i>).</li>
+    <li>Klicken Sie auf <b>Bearbeiten</b> und ändern Sie den Namen der Datenbank
+    <i>Bibliography</i>, z.B. zu <i>Bibliography-old</i> (denn OpenOffice.org
+    kann nicht mit mehreren bibliographischen Datenbanken arbeiten).</li>
+    <li>Wählen Sie anschließend Ihre bibliographische Datenbank und benennen Sie sie um in
+    <i>Bibliography</i> (achten Sie auf einen Großbuchstaben am Anfang des Namens).</li>
+    </ul>
+
+    <p>Nach diesen Schritten sollte Ihre bibliographische Datenbank zur Benutzung
+    mit OpenOffice.org bereit sein. Um das zu prüfen, wählen Sie <b>Einfügen ->
+    Verzeichnisse -> Literaturverzeichniseintrag...</b>. Im folgenden Dialog sollten
+    in der Dropdownliste (unter <b>Kurzbezeichnung</b>) die BibTeX-Keys Ihrer
+    Datenbank erscheinen.</p>
+
+    <h2>Die exportierte Datei als Bibliographiedatenbank in
+    OpenOffice 2.0, 2.1 oder 2.2 benutzen</h2>
+
+    <p>Gehen Sie folgendermaßen vor, um eine Tabelle, die von JabRef
+    exportiert wurde, als Bibliographiedatenbank in OpenOffice.org
+    zu benutzen:</p>
+
+    <ul>
+        <li>Exportieren Sie Ihre Datenbank in das <b>.ods</b>
+        -Format</li>
+
+        <li>Starten Sie OpenOffice.org</li>
+
+        <li>Wählen Sie <b>Extras -> Optionen ->
+        OpenOffice.org Base -> Datenbanken</b></li>
+
+        <li>Bearbeiten Sie die <i>Bibliography</i>-Datenbank und
+        ändern ihren Namen z.B. in
+        <i>Bibliographie-alt</i></li>
+
+        <li>Schließen Sie das Fenster <b>Optionen</b> und
+        gehen Sie zu <b>Datei -> Neu -> Datenbank</b></li>
+
+        <li>Wählen Sie <b>Verbindung zu einer bestehenden
+        Datenbank herstellen</b>, wählen
+        <b>Tabellendokument</b> als Datenbanktyp und wählen
+        die <b>.ods</b>-Datei, die Sie exportiert haben</li>
+
+        <li>Klicken Sie auf <b>Fertig stellen</b> und wählen
+        den Namen <i>Bibliography</i> im Speicherdialog</li>
+    </ul>Anschließend wählen Sie <b>Extras ->
+    Literaturdatenbank</b>. Ihre Datenbank sollte nun angezeigt
+    werden.
+
+    <h2>Eine exportierte Datei als Datenbank in OpenOffice 1.1.x
+    benutzen</h2>
+
+    <ul>
+        <li>Exportieren Sie Ihre Datei in das
+        <b>.sxc</b>-Format</li>
+
+        <li>Starten Sie OpenOffice.org</li>
+
+        <li>Wählen Sie <b>Extras -> Datenquellen</b></li>
+
+        <li>Wählen Sie die <i>Bibliography</i>-Datei und
+        ändern ihren Namen z.B. in
+        <i>Bibliographie-alt</i>.</li>
+
+        <li>Drücken Sie <b>Anwenden</b>.</li>
+
+        <li>Klicken Sie <b>Neue Datenquelle</b>. Ein neuer Eintrag
+        erscheint. Ändern Sie den Namen zu
+        <i>Bibliography</i>.</li>
+
+        <li>Ändern Sie den <b>Dateityp</b> zu <b>Tabelle</b>.
+        Klicken Sie den <b>...</b>-Button in der Zeile
+        <b>Datenquellen URL</b>. Wählen Sie die
+        <b>.sxc</b>-Datei, die Sie exportiert haben.</li>
+
+        <li>Klicken Sie auf <b>OK</b>, um das Fenster
+        <b>Datenquellen</b> zu schließen.</li>
+    </ul>Anschließend wählen Sie <b>Extras ->
+    Literaturdatenbank</b>. Ihre Datenbank sollte nun angezeigt
+    werden.
+</body>
+</html>
diff --git a/src/help/de/OwnerHelp.html b/src/help/de/OwnerHelp.html
index 28774ab..0edc30e 100644
--- a/src/help/de/OwnerHelp.html
+++ b/src/help/de/OwnerHelp.html
@@ -1,22 +1,22 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Das 'Besitzer' (owner) Feld</h1>
-
-    <p>JabRef kann allen neuen
-    Einträgen, die zu einer Datei hinzugefügt oder in sie
-    importiert werden, Ihren Benutzernamen beigeben. Dieses Feature
-    können Sie im Menü <b>Einstellungen ->
-    Allgemein</b> ein- und ausschalten. Dort können Sie auch
-    den Namen angeben, der in den Einträgen erscheinen soll.
-    In der Standardeinstellung wird Ihr (System-)Benutzername
-    verwendet.</p>
-
-    <p>Der Name wird in dem Feld 'owner' eingetragen, das in der
-    Standardeinstellung im Tab <b>General fields</b> des
-    Eintragseditors angezeigt wird.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Das 'Besitzer' (owner) Feld</h1>
+
+    <p>JabRef kann allen neuen
+    Einträgen, die zu einer Datei hinzugefügt oder in sie
+    importiert werden, Ihren Benutzernamen beigeben. Dieses Feature
+    können Sie im Menü <b>Einstellungen ->
+    Allgemein</b> ein- und ausschalten. Dort können Sie auch
+    den Namen angeben, der in den Einträgen erscheinen soll.
+    In der Standardeinstellung wird Ihr (System-)Benutzername
+    verwendet.</p>
+
+    <p>Der Name wird in dem Feld 'owner' eingetragen, das in der
+    Standardeinstellung im Tab <b>General fields</b> des
+    Eintragseditors angezeigt wird.</p>
+</body>
+</html>
diff --git a/src/help/de/PreviewHelp.html b/src/help/de/PreviewHelp.html
index 740d1e7..c0ae3f8 100644
--- a/src/help/de/PreviewHelp.html
+++ b/src/help/de/PreviewHelp.html
@@ -1,20 +1,20 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Eintragsvorschau einstellen</h1>
-
-    <p>Die Eintragsvorschau wird
-    mit denselben Mechanismen erstellt, die auch bei den
-    <a href="CustomExports.html">Exportfiltern</a> angewendet
-    werden. Bei der Vorschau durchläuft ein Eintrag eins von
-    zwei möglichen Layouts (die sie mit F9 wechseln
-    können) und erstellt HTML-Code, der im Vorschaudialog
-    angezeigt wird. Aussehen und Inhalt der Vorschau können
-    mit derselben Syntax verändert werden, die in der Hilfe
-    zur Anpassung der <a href="CustomExports.html">Exportfilter</a>
-    beschrieben wird.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Eintragsvorschau einstellen</h1>
+
+    <p>Die Eintragsvorschau wird
+    mit denselben Mechanismen erstellt, die auch bei den
+    <a href="CustomExports.html">Exportfiltern</a> angewendet
+    werden. Bei der Vorschau durchläuft ein Eintrag eins von
+    zwei möglichen Layouts (die sie mit F9 wechseln
+    können) und erstellt HTML-Code, der im Vorschaudialog
+    angezeigt wird. Aussehen und Inhalt der Vorschau können
+    mit derselben Syntax verändert werden, die in der Hilfe
+    zur Anpassung der <a href="CustomExports.html">Exportfilter</a>
+    beschrieben wird.</p>
+</body>
+</html>
diff --git a/src/help/de/RemoteHelp.html b/src/help/de/RemoteHelp.html
index f857236..123306a 100644
--- a/src/help/de/RemoteHelp.html
+++ b/src/help/de/RemoteHelp.html
@@ -1,44 +1,44 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Externer Zugriff</h1>
-
-    <p>Diese Funktion kann unter
-    <b>Einstellungen -> Erweitert</b> eingestellt werden.</p>
-
-    <p><i>Beachten Sie, dass das Aktivieren dieser Funktion mit
-    Windows XP SP2 (und möglicherweise auch mit anderen
-    Konfigurationen) zu einer Meldung führen kann, die besagt,
-    dass bestimmte Funktionen des Programms von der
-    Windows-Firewall geblockt wurden. Sie können die Firewall
-    anweisen, weiterhin zu blocken, denn die Firewall
-    beeinträchtigt den Externen Zugriff von JabRef
-    nicht.</i></p>
-
-    <p>Falls das Abhören von externen Zugriffen aktiviert ist,
-    versucht JabRef beim Programmstart, den entsprechenden Port
-    abzuhören. Das bedeutet, dass andere Anwendungen
-    Informationen durch diesen Port an JabRef senden können.
-    JabRef akzeptiert dabei nur lokale Verbindungen, um das Risiko
-    eines Eingriffs von außerhalb auszuschließen.</p>
-
-    <p>Mit dem externen Zugriff kann eine zweite Instanz von JabRef
-    erkennen, dass eine erste Instanz bereits läuft. In diesem
-    Fall leitet die zweite Instanz ihre Kommandozeilen-Optionen an
-    die erste Instanz weiter und beendet sich selbst direkt im
-    Anschluss - sofern die zweite Instanz nicht ausdrücklich
-    instruiert wurde, im Stand-Alone-Modus (als selbständige
-    Instanz) zu starten.</p>
-
-    <p>Die erste JabRef-Instanz liest die Kommandozeilenoptionen
-    und führt die erforderlichen Aktionen aus, z.B. das Lesen
-    oder Importieren einer Datei oder das Anhängen einer Datei
-    an die aktive Datenbank. Falls eine Datei mit der Option
-    <code>--importToOpen</code> importiert wird, werden die
-    Einträge an die aktive Datei angehängt. Falls keine
-    Datei geöffnet ist, wird eine neue Datei angelegt.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Externer Zugriff</h1>
+
+    <p>Diese Funktion kann unter
+    <b>Einstellungen -> Erweitert</b> eingestellt werden.</p>
+
+    <p><i>Beachten Sie, dass das Aktivieren dieser Funktion mit
+    Windows XP SP2 (und möglicherweise auch mit anderen
+    Konfigurationen) zu einer Meldung führen kann, die besagt,
+    dass bestimmte Funktionen des Programms von der
+    Windows-Firewall geblockt wurden. Sie können die Firewall
+    anweisen, weiterhin zu blocken, denn die Firewall
+    beeinträchtigt den Externen Zugriff von JabRef
+    nicht.</i></p>
+
+    <p>Falls das Abhören von externen Zugriffen aktiviert ist,
+    versucht JabRef beim Programmstart, den entsprechenden Port
+    abzuhören. Das bedeutet, dass andere Anwendungen
+    Informationen durch diesen Port an JabRef senden können.
+    JabRef akzeptiert dabei nur lokale Verbindungen, um das Risiko
+    eines Eingriffs von außerhalb auszuschließen.</p>
+
+    <p>Mit dem externen Zugriff kann eine zweite Instanz von JabRef
+    erkennen, dass eine erste Instanz bereits läuft. In diesem
+    Fall leitet die zweite Instanz ihre Kommandozeilen-Optionen an
+    die erste Instanz weiter und beendet sich selbst direkt im
+    Anschluss - sofern die zweite Instanz nicht ausdrücklich
+    instruiert wurde, im Stand-Alone-Modus (als selbständige
+    Instanz) zu starten.</p>
+
+    <p>Die erste JabRef-Instanz liest die Kommandozeilenoptionen
+    und führt die erforderlichen Aktionen aus, z.B. das Lesen
+    oder Importieren einer Datei oder das Anhängen einer Datei
+    an die aktive Datenbank. Falls eine Datei mit der Option
+    <code>--importToOpen</code> importiert wird, werden die
+    Einträge an die aktive Datei angehängt. Falls keine
+    Datei geöffnet ist, wird eine neue Datei angelegt.</p>
+</body>
+</html>
diff --git a/src/help/de/RevisionHistory.html b/src/help/de/RevisionHistory.html
index e607484..3db255d 100644
--- a/src/help/de/RevisionHistory.html
+++ b/src/help/de/RevisionHistory.html
@@ -1,1535 +1,12 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-  <h1>Versionsgeschichte (auf Englisch)</h1>
-
-  <h3>Version 2.8 beta</h3>
-  <ul><li>Fixed issues with ACM portal fetcher using Benjamin Langmann's patch, plus an
-      additional minor fix.</li>
-    <li>A large list of journal abbreviations is now loaded by default.</li>
-    <li>Added global option to allow file links relative to the bib file location, in addition
-      to the global or database- or user-specific file directory.</li>
-    <li>Fixed bug 3434674: Reviewing changes overwrites groups.</li>
-    <li>Integrated the plugin for interaction with OpenOffice/LibreOffice as a standard part
-      of JabRef.</li>
-    <li>Added keyboard shortcuts Ctrl-Up and Ctrl-Down to move file links up and down in a list
-      of external links in the entry editor.</li>
-    <li>Applied "bjoerntm"'s patch for making the loading of group information less sensitive
-      to white space, in order to prevent trouble loading files written by other tools.</li>
-    <li>Added optional autocompletion of author/editor last names in search field.</li>
-    <li>Changed entry fetcher system so all fetchers are accessed from a single side pane
-      component with a selector.</li>
-    <li>Added INSPIRE fetcher by Sheer El-Showk.</li>
-    <li>Improved error handling when importing in specific format.</li>
-    <li>Prevented crash when calling invalid import format on startup.</li>
-    <li>Improved duplicate detection.</li>
-    <li>Added markers \filename and \filepath for ".begin.layout" and ".end.layout" files
-      in order to output the name or full path of the bib file of the exported database.</li>
-    <li>Fixed possible array index exception in LastPage formatter.</li>
-    <li>Improved author/editor normalization in entry editor.</li>
-    <li>Added metadata extraction from text when PDFs are dragged into JabRef.</li>
-    <li>The filename pattern for renaming a file when dropping a PDF can now be
-      configured at "Options"/"Preferences"/"Import"/"File name format pattern".</li>
-    <li>The defaults of the ImportDialog shown when PDFs are dragged into JabRef
-      can now be configured at "Options"/"Preferences"/"Import". It is possible to
-      override showing the ImportDialog.</li>
-    <li>An entry can be sent by a right click on an entry and select "Send as Email"
-      (patch 3306271).</li>
-    <li>Added option to "copy BibTeX key and title" (patch 3370471).</li>
-    <li>The command for pushing to emacs can be configured now. New command for Emacs 23.
-      New default for Windows: emacsclient.</li>
-    <li>Added export support for DIN1505 style (based on patch 1874662).</li>
-    <li>Added support for PostgreSQL import/export (patch 3368760 by Fred Stevens).</li>
-    <li>Added formatter "JournalAbbreviator" (patch 3013311 by Meigel).</li>
-    <li>RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
-      (patch 2905383 by Russell Almond).</li>
-    <li>Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).</li>
-    <li>ToggleButton added to GroupSelector to ease adding/removing references to/from groups
-      (based on patch 3313564 updated by Andreas Schlicker).</li>
-    <li>Export filter "tablerefsandbib" updated to contain links to files and notes
-      (patch 2787096 by Thomas Arildsen).</li>
-    <li>"of" added to the list of skip words (patch 2781830).</li>
-    <li>Added cli-function for exporting entries filtered by a search term
-      (patch 1817093 by Silberer, Zirn)</li>
-    <li>Added highlighting in textarea for search text (patch 3117881 by Ben).
-      Slightly modified to cope with words[]={""}, support for "BibTeX source" tab, and that
-      "Clear" also clears the highlighting.</li>
-    <li>Added highlighting in preview area for search text (based on patch 3121914 by
-      Maximilian Lengsfeld).</li>
-    <li>Switched from PDFBox 0.7.3 to PDFBox 1.6.0.</li>
-  </ul>
-
-  <h3>Version 2.7.2</h3>
-    <ul><li>Fixed bug that prevented search functions from working under Java 7.</li></ul>
-
-  <h3>Version 2.7.1</h3>
-    <ul>
-    <li>Fixed problem with search function under Java 7.</li>
-    <li>Made Database properties dialog modal to prevent database from being closed
-      while properties window is open.</li>
-    <li>Fixed error handling in custom import dialog when invalid jar files or class
-      files are specified.</li>
-    <li>Added OR operator for conditional export formatting.</li>
-    <li>DocBook export format switched to 4.4 (based on patch 3313898).</li>
-    <li>Fixed bug that made the key generator combination [shorttitle:abbr] return
-      only a single letter.</li>
-    <li>"of" added to the list of skip words (patch 2781830).</li>
-    <li>Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).</li>
-    <li>RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
-      (patch 2905383 by Russell Almond).</li>
-    <li>Fixed bug that made menu items for marking in specific colors invisible
-      under Windows 7.</li>
-    <li>In case a new entry is added, this entry is highlighted and the editor is opened
-      if configured in the settings (patch 3370466). The UI behavior of adding an entry
-      at "new entry from plain text" is now similar to "new entry".</li>
-    <li>Fixed bug in focus handling that affected some actions.</li>
-    <li>Running JabRef under the Oracle JVM will no longer give a warning.</li>
-    </ul>
-
-  <h3>Version 2.7</h3>
-    <ul>
-    <li>Medline importer now wraps multipart last names in braces.</li>
-    <li>RIS importer now handles multiple title fields by concatenation.</li>
-    <li>Disallowed "comment" as entry type name, since this conflicts with the BibTeX format.</li>
-    <li>Fixed handling of suffix name parts (Jr, etc.) in Medline importer.</li>
-    <li>Added optional second numeric argument to Authors formatter, which determines
-      how many authors are shown if the maximum number is exceeded.</li>
-    <li>Added content selector for "review" field in entry editor.</li>
-    <li>Improved detection of file type when adding new link. Can now recognize double
-      extensions such as ".ps.gz".</li>
-    <li>Improved autocompletion of author names. Added options to complete either in
-      'Firstname Lastname' or 'Lastname, Firstname' formats, or in both.</li>
-    <li>Fixed bug in import function if no suitable import filter is found.</li>
-    </ul>
-
-  <h3>Version 2.7beta 2</h3>
-    <ul>
-	<li>Added support for MrdLib lookup or metadata extraction when PDFs are dragged
-	into JabRef.</li>
-    <li>Added option under "External programs" for disabling the automatic opening of the
-      Browse dialog when creating a new file link.</li>
-    <li>Fixed shortcut key collision. Shortcut for Import to new database is now Ctrl-Alt-I.</li>
-    <li>The "Open URL or DOI" action now uses URL links in the "file" field as fallback if
-      no links are found in the "url" or "doi" fields.</li>
-    <li>Restricted remote listener port numbers to interval 1025-65535.</li>
-    <li>Added Japanese translation by Koji Yokota.</li>
-    <li>Added scrollbar to entry editor when it is too high to fit in its panel. Patch
-      by Matthias Erll.</li>
-    <li>Made it possible to copy entries from the search dialog.</li>
-    <li>Added proper error message when trying to search with invalid regular expression.</li>
-    <li>Added error dialog on startup if custom look and feel cannot be loaded.</li>
-    <li>Applied Alexander Hug's patch for correctly importing doi from ScienceDirect RIS files.</li>
-    <li>Removed potential NullPointerException in SearchExpressionTreeParser.</li>
-    </ul>
-
-    <h3>Version 2.7beta</h3>
-    <ul>
-	<li>Some improvements to MS Office export filter.</li>
-	<li>Introduced three choices for ensuring unique generated keys. The default one (marking
-      	with a, b, etc.), a modified one (marking with b, c, etc.) and always adding a letter
-      	(a, b, etc.).</li>
-	<li>Font and background colors are now customizable in the entry editor (Options ->
-      	Preferences -> Appearance).</li>
-	<li>Window title now includes the full path to the current file.</li>
-	<li>Entries can now be marked in a series of different colors. Automarking of imported
-	entries is now done in separate color without affecting other marked entries.</li>
-	<li>Added new feature (Tools -> Scan database... -> Resolve duplicate BibTeX keys) to
-	search for duplicate keys and offer to generate new keys to resolve the duplicates.
-	Instead of being listed in a warning dialog after opening a bib file, duplicate keys
-	now trigger a dialog asking whether the user wants to resolve the duplicates.</li>
-	<li>Added check that ensures that application doesn't quit while a large save operation
-	is still in progress. Shows wait message with cancel button.</li>
-	<li>Added apostrophe (') as illegal character in BibTeX keys.</li>
-	<li>BibTeX strings that refer each other are now sorted correctly when saving bib file.</li>
-	<li>Fixed bug in merging external changes - file would still be reported as modified
-	externally after merging changes.</li>
-	<li>Fixed bug in Move/rename file link feature that could cause the wrong link to be
-	stored for certain directory structures.</li>
-	<li>Fixed bug: curly braces can now be used in arguments to formatters. </li>
-	<li>Fixed lockup bug when generating key for entries with crossref fields.</li>
-	<li>BibTeX strings are now resolved before attempting to (un)abbreviate journal names.</li>
-	<li>Modified [shorttitle] and [veryshorttitle] key generator markers so they consider
-	a hyphen a word boundary, and remove punctuation characters (keep only numbers and
-	letters).</li>
-	<li>deprecate various export formatters with new Authors formatter, which provides flexible formatting options.</li>
-    </ul>
-
-    <h3>Version 2.6</h3>
-    <ul>
-        <li>Fixed IEEExplorer and ACM fetchers to adapt to web site changes.</li>
-        <li>Active preview (1 or 2) is now remembered.</li>
-        <li>Applied patch by Igor L. Chernyavsky. to prevent loss of entry selection after
-            generating key.</li>
-        <li>Changed OpenDocument Spreadsheet export so the mimetype file is written correctly
-            at the start of the zip file.</li>
-        <li>Fixed bug when importing preferences: custom export filters would not be updated
-            after import.</li>
-        <li>Changed help page loading procedure so help pages can be loaded for plugin entry
-            fetchers.</li>
-        <li>Made it possible to define customized entry types with either-or conditions on
-            required fields, e.g. using a pseudo-field called "author/editor" will indicate
-            that the entry requires either the "author" or the "editor" field set.</li>
-        <li>Fixed bug: entries of a customized type could be indicated as complete even if
-            BibTeX key was not set.</li>
-        <li>Changed deletion process for some temporary files to avoid leftover files.</li>
-    </ul>
-
-    <h3>Version 2.6beta3</h3>
-    <ul>
-        <li>Added ScienceDirect entry fetcher that utilizes the BibSonomy scraper.</li>
-        <li>Changed non-native file dialog setting so files cannot be renamed. This prevents
-          accidentally entering rename mode when trying to enter directory. Can be enabled
-          again in Options -> Preferences -> Advanced.</li>
-        <li>Added new JStor fetcher that utilizes the BibSonomy scraper to obtain BibTeX data.</li>
-        <li>Fixed bug in CookieHandlerImpl.</li>
-        <li>Fixed bug; when dragging a file into JabRef and asking to move it to the file
-          directory, warning will now be given if the destination file already exists. Patch
-          by Alastair Mailer.</li>
-        <li>When dragging a file into JabRef and asking to copy or move it to the file directory,
-          it is now possible to rename to an arbitrary name. Patch by Alastair Mailer.</li>
-        <li>Added "review" field to BibTeXML export.</li>
-        <li>Added Reset button to entry fetchers. Patch by Dennis Hartrampf and Ines Moosdorf.</li>
-        <li>Changed Microsoft Office XML export so "number" rather than "issue" is exported
-          as <b:Issue>, which conforms with import format.</li>
-        <li>Added confirmation dialog that allows saving without backup in cases when
-          backup creation fails.</li>
-        <li>Fixed bug 2938562: using the move/rename feature on a file link could give an
-          absolute link even if the file was put below the main file directory.</li>
-        <li>Fixed bug 2931293: error generating key with [authorsAlpha] for short names.</li>
-        <li>When checking for external modifications, file size is now checked in addition
-          to the time stamp.</li>
-        <li>Fixed handling of maximised state when shutting down and starting up JabRef.
-          Patch by Igor L. Chernyavsky.</li>
-        <li>Fixed bug that prevented correct handling of DOS short file names. Patch
-          by Igor L. Chernyavsky.</li>
-        <li>Added support for KOI8_R character set.</li>
-        <li>Removed DocumentPrinter class, using standard API functions instead. Patch by
-          Tony Mancill.</li>
-        <li>Removed HightlightFilter class, using standard API functions instead. Patch by
-          Tony Mancill.</li>
-        <li>Changed keyboard shortcut for IEEXplorer search to Alt-F8.</li>
-        <li>Disabled JStor search, which doesn't work due to API changes.</li>
-        <li>External file type manager now removes "." prefix in file type extension if the user
-          has typed it that way.</li>
-        <li>Preview panel now defaults to preview layout 1 instead of 2. Switched default layouts.</li>
-        <li>Added IfPlural formatter by Russell Almond. The formatter outputs its first argument
-          if the input field contains " and " and the second one otherwise.</li>
-        <li>Applied patch by Philipp Cordes and Björn Kahlert for improved handling of names by
-          autocompleter. The patch also reorganizes the autocompleter classes.</li>
-        <li>Table will now scroll to keep the currently edited entry visible if an edit leads to
-          the entry getting sorted to a different position.</li>
-        <li>Reworked author and editor handling in Docbook export. Added Docbook XML header.</li>
-        <li>Database will no longer be marked as changed after accepting external changes, unless one or
-          more changes were not accepted before merging, and unless database was already marked as
-          changed.</li>
-        <li>Fixed bug: undesired autocompletion when saving file.</li>
-        <li>Fixed bug: entry editor doesn't appear when new entry is added while a filtering search or
-          group selection is active.</li>
-        <li>Fixed bug in writing of metadata on Windows. For certain metadata lengths newlines would be
-          messed up after the metadata comment in a bib file.</li>
-        <li>Search dialog now automatically previews first hit, and hides preview if there are no hits.</li>
-    </ul>
-
-    <h3>Version 2.6beta2</h3>
-    <ul>
-        <li>Added export formatter "Default" which takes a single argument. Outputs the string to format
-          unchanged if it is non-empty, otherwise outputs the argument.</li>
-        <li>Added option under Options -> Preferences -> General for disabling the strict enforcing of
-          correct BibTeX keys. Disabling this makes it possible to use e.g. umlaut characters in keys.</li>
-        <li>Modified launcher script for Windows installer to give higher heap size limit.</li>
-        <li>Improved autocompletion. All fields with autocompletion which have content selectors will now
-          autocomplete on content selector values. For the "journal" field, the autocompleter will now
-          additionally use entries from the current journal abbreviations list, and will also complete
-          on the entire field up to the cursor rather than just looking at the last word only.</li>
-        <li>Added support for postformatter in Layout. The postformatter will be run after
-          the formatters called from a layout.</li>
-        <li>Improved group autogeneration. Added option to generate groups based on author or editor
-          last names. Autogenerated groups are now alphabetized.</li>
-        <li>Modified Endnote export filter so "--" gets converted to "-" in the "pages" field.</li>
-        <li>Changed keyword groups so they will match on whole words only. E.g. a keyword group for the
-          keyword "can" will no longer match the keyword "scanner".</li>
-        <li>Improved entry type determination and author parsing for some varieties of CSA files.</li>
-        <li>Minor change to Harvard RTF export. Added space after "ed.", and added editor to output for
-          inbook entries.</li>
-        <li>Set limit to the number of displayed characters in group names in groups tree in order to
-          avoid group panel width problems.</li>
-        <li>Changed file link handling so all remote links classified as URL can be opened through
-          the browser. Setting a different file type manually makes JabRef call a remote link using
-          the handler application instead.</li>
-        <li>Modified Endnote/refer import filter to strip "doi:" from the %R field.</li>
-        <li>Modified HTML conversion so single newline is displayed in the preview (and HTML exports) as
-          <br>, while multiple newlines are displayed as <p>.</li>
-        <li>Fixed bug: switching entry editor between entries of different type may result in switching
-          of entry editor tabs.</li>
-        <li>Fixed bug: adding external file link leads to relative path from root directory if file
-          directory is set to an empty string.</li>
-        <li>Fixed error message when a # in a BibTeX string prevents saving. No longer states that the
-          problem is in an entry, but specifies that it is in a string.</li>
-        <li>Fixed bug: ODS export doesn't resolve BibTeX strings.</li>
-        <li>Fixed bug: content selector for "editor" field uses "," instead of " and " as delimiter.</li>
-        <li>Fixed bug: editing source doesn't allow change of entry type.</li>
-        <li>RTFChars formatter now converts --- to \emdash and -- to \endash.</li>
-    </ul>
-
-    <h3>Version 2.6beta</h3>
-
-    <ul>
-        <li>Added pages information to several entry types in Endnote export.</li>
-        <li>Modified LastPage formatter so it returns the number when only the number of pages is given.</li>
-        <li>Modified search algorithms so LaTeX commands are removed before search. For instance, this
-            means that the value "test \textit{case}" now matches the search string "test case".</li>
-        <li>Changed default table font family to "SansSerif".</li>
-        <li>Can now create lock file while writing a bib file. The lock file is checked before
-            saving, and before scanning an externally changed file, in order to avoid reading an
-            unfinished file.</li>
-        <li>Added support for dragging a file link from the file column to another application.</li>
-        <li>Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.</li>
-        <li>Improved ISI import filter so DOI information is included.</li>
-        <li>Fixed bug: metadata changes would not be detected as external changes to a database.</li>
-        <li>Fixed bug: when accepting external changes and not saving before new changes are
-            detected, the previously accepted changes would also be listed.</li>
-        <li>Fixed bug in Scifinder import where an empty Inventor field could overwrite the
-            author field.</li>
-        <li>Fixed bug in autocompleter. Current suggested completion would be added to the field
-            if the user closed the entry editor or mouse clicked on another field.</li>
-        <li>Fixed problem with exporting to some MySql versions. Patch by François Dorin.</li>
-        <li>Fixed bug in handling of LaTeX character sequences - now sequences with = as command
-            character (e.g. "\={A}") are recognized.</li>
-        <li>Fixed bug: gray out / hide setting in groups panel is overridden on startup
-            by search mode selection. Added separate prefs key for the groups setting.
-            Fix suggested by Igor L. Chernyavsky.</li>
-        <li>Fixed bug: cookie manager installed by Download button in file field editor throws
-            an exception when trying to fetch from Medline.</li>
-        <li>Fixed bug: temporary files don't get deleted on shutdown.</li>
-        <li>Disabled table column reordering in import inspection window, since a user reported
-            problems when using this.</li>
-        <li>Changed years from 2008 to 2009 in splash image.</li>
-    </ul>
-
-    <h3>Version 2.5 (June 22nd, 2009)</h3>
-    <ul>
-        <li>Modified export layout procedure so missing formatters can be reported in the error
-          output. Export now succeeds with warnings added where formatters are missing.</li>
-        <li>Conditional blocks (\begin{field}...\end{field}) in layout files can now be given a
-          semicolon-separated list of fields as argument. All fields must then be set for output
-          to be given.</li>
-        <li>Changed RIS import so multiple abstract fields in an entry are concatenated.</li>
-        <li>Added quoting of some special characters in SQL export, based on Kyle Crabtree's patch.</li>
-        <li>Fixed bug in MS Office 2007 XML export - editor names missing.</li>
-        <li>Fixed bug in plugin manager that prevented the "Download plugin" button from working.</li>
-        <li>Fixed bug in plugin manager routine that checks for installed versions of a plugin.</li>
-        <li>Fixed bug in startup that could show warnings multiple times when loading
-          from autosave files.</li>
-    </ul>
-
-    <h3>Version 2.5beta 2 (May 19th, 2009)</h3>
-    <ul>
-        <li>Plugin manager now handles plugin versions correctly based on the version number in their
-          plugin.xml file.</li>
-        <li>Added formatter "Number" that outputs a sequence number for the current entry in the current
-          export operation. This formatter can be used to produce a numbered list of entries.</li>
-        <li>Added autosave feature.</li>
-        <li>Fixed bug in file link handling in BibTeXML export.</li>
-        <li>Improved handling of patents in Scifinder import.</li>
-    </ul>
-
-    <h3>Version 2.5beta (April 21st, 2009)</h3>
-
-    <ul>
-      <li> Added Simplified Chinese translation.</li>
-      <li> Added simple plugin manager.</li>
-      <li> Added ~/.jabref/plugins as user-specific plugin directory.</li>
-      <li> Added \r marker to WrapFileLinks formatter that outputs file links without expanding relative links.</li>
-      <li> Added [authorAlpha] key marker that formats authors according to the "alpha" BibTeX style. Patch submitted by Oliver Kopp.</li>
-      <li> Table sort order set by clicking and Ctrl-clicking table columns is now immediately set as default sort order in preferences.</li>
-      <li> Changed LyX pipe setting so it works whether ".in" is included or omitted.</li>
-      <li> Modified ISI importer so the words "of", "and" and "the" will not be capitalized in the title, journal or publisher fields.</li>
-      <li> When adding new local file link, browse dialog now appears immediately when opening file link editor, saving one mouse click.</li>
-      <li> Added "Remove all broken links" option in the resolver dialog for broken links when synchronizing file links.</li>
-      <li> Added rename option to Set/clear field dialog, to move contents from one field to another.</li>
-      <li> Added Back and Forward actions, for switching between recently edited BibTeX entries.</li>
-      <li> Added option under "Entry table" to designate fields as numeric for sorting purposes.</li>
-      <li> Added possibility for custom export filters to define their own name formatters. This is done by adding a file named "<filtername>.formatters". This file defines one formatter on each line, with each line containing the name of the formatter and the formatter definition, separated by a colon (:).</li>
-      <li> Added menu items for increasing/decreasing table font size, with shortcut keys Ctrl-plus and Ctrl-minus.</li>
-      <li> Added options to automatically mark entries imported into an existing database, and to unmark previously marked entries when importing.</li>
-      <li> Added ":(x)" modifier to key generator, specifying that the arbitrary string x should be used as a fallback value if the value returned by the field marker is empty.</li>
-      <li> Added ":upper" modifier to key generator, to force uppercase for a field marker.</li>
-      <li> Added buttons in External programs tab in Preferences for modifying settings for "Push to"-features, and removed obsolete fields.</li>
-      <li> Added support for DOI field in Endnote importer.</li>
-      <li> Added support for language and publication status fields in Medline import (publication status stored in "medline-pst" field).</li>
-      <li> Enabled cookie handling for downloading full-text articles.</li>
-      <li> Improved handling of invalid BibTeX keys containing white space. Parser will now try to piece together the key and avoid disturbing the continued parsing. Patch submitted by Stephan Lau.</li>
-      <li> Cosmetic change to the entry type label to the left in the entry editor.</li>
-      <li> Changed name handling so a single-entry name without a capital initial letter, such as "unknown", will be treated as a solitary last name rather than a von particle.</li>
-      <li> Changed table selection coloring so entries that are grayed out or marked can be distinguished from normal entries when selected.</li>
-      <li> Changed handling of "affiliation" in Medline import - now makes sure to escape # characters before storing.</li>
-      <li> Modified ACM portal fetcher due to web site changes.</li>
-      <li> Improvements to IEEEXplore fetcher - better handling of month and page fields.</li>
-      <li> Changed behaviour of source panel when an entry contains imbalanced # characters - the panel can now show the entry in its invalid form, allowing the user to fix the problem.</li>
-      <li> Improved handling of PDF files without XMP metadata - other metadata will now be retained. Patch submitted by Felix Langner.</li>
-      <li> Fixed bug in parsing file field - double spaces in file names would be reduced to single spaces, breaking the file link. Fix submitted by Uwe Kuehn.</li>
-      <li> Fixed NullPointerException when downloading external file and file directory is undefined.</li>
-      <li> Fixed bug in HTMLConverter.</li>
-      <li> Fixed NullPointerException in key generator for incomplete names.</li>
-      <li> Fixed bug in removing custom export filters.</li>
-      <li> Fixed bug 2225371: restart is no longer required after adding a new custom export filter. </li>
-      <li> Fixed bug in "Move/rename file" feature in file field editor with regard to undefined file directory.</li>
-      <li> Fixed bug in Ris importer.</li>
-      <li> Fixed NullPointerException in Endnote importer.</li>
-    </ul>
-
-
-    <h3>Version 2.4.2 (November 1st, 2008)</h3>
-    <ul>
-      <li>Added missing layout formatters FirstPage and LastPage.</li>
-      <li>Fixed a bug regarding ParamLayoutFormatter loaded from plugin.</li>
-      <li>Fixed crash during initalization of journal abbreviation list.</li>
-      <li>Added option to have JabRef search for external file when "Open file" function is chosen for an entry without any linked files. This is similar to what was always done in JabRef 2.3.1 and earlier.</li>
-      <li>Improved regular expression file search, so the regular expression can contain field markers as used for BibTeX key generation in addition to just regular fields. It is no longer possible to call arbitrary layout formatters, but the modifiers "upper", "lower" and "abbr" (for case conversion and abbreviation) can be used.</li>
-      <li>Ris importer now imports PB as "school" instead of "publisher" for THES entries.</li>
-      <li>Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.</li>
-    </ul>
-
-
-    <h3>Version 2.4.1 (October 8th, 2008)</h3>
-
-      <ul>
-        <li>Fixed bug: layout formatter arguments were not set when using a ParamLayoutFormatter loaded from plugin.</li>
-        <li>Fixed bug: when abbreviating first names, for authors with first names connected with "-", only the first letter is shown.</li>
-        <li>Enhanced ExportFormatTemplate plugins with an optional property "encoding" which overrides the default encoding with the given one.</li>
-        <li>Fixed menu colors under Windows Vista.</li>
-        <li>Fixed bug 2137771: Missing file extension when downloading.</li>
-        <li>Fixed bug 2105329: Ensure that newly added entry is visible in table.</li>
-        <li>Fixed bug 1908222: Preference "Fit table horizontally on screen" doesn't work</li>
-        <li>Fixed bug 2119059: Handling of the A1 tag in the RIS format.</li>
-        <li>Added missing help file for ACM digital library fetcher.</li>
-        <li>Added option for whether to use IEEE LaTeX journal abbreviation list.</li>
-        <li>Added tooltip to menu items in push-to-application popup menu.</li>
-      </ul>
-
-
-    <h3>Version 2.4 (September 1st, 2008)</h3>
-
-      <ul>
-        <li>Added mappings for some special characters that need to be sanitized when generating BibTeX keys.</li>
-        <li>Added ACM Digital Library fetcher by Aaron Chen.</li>
-        <li>Added new entry types (conference, patent, standard, electronic).</li>
-        <li>Improvements to IEEEXplore fetcher.</li>
-        <li>Added explanatory text to indicate that "ps" and "pdf" files are legacy features.</li>
-        <li>Fixed unexpected behaviour of "Open PDF or PS" menu item - now looks in "file" field, and does not launch search for external files.</li>
-        <li>Fixed bug 1827568: 'Save database' might not store current edit in entry editor.</li>
-        <li>Fixed bug 2027944: updating custom export definitions requires restart.</li>
-      </ul>
-
-
-    <h3>Version 2.4beta (March 12th, 2008)</h3>
-
-      <ul>
-	<li>Added "protection" flag in Database properties. When this flag is set, JabRef will refuse to save the database when the file has been externally modified, until the changes have been reviewed and partly or completely accepted.</li>
-	<li>Fixed bug where the external update notification in the side pane would remain even if the referred database was closed.</li>
-	<li>Added two new search modes - display search results in a dialog, and global search.</li>
-	<li>Support for fetching from the command line using --fetch (contributed by Jan F. Boldt and David Kaltschmidt).</li>
-	<li>Support for fetching from Spires (contributed by Fedor Bezrukov).</li>
-	<li>Support for fetching from JSTOR (contributed by Tobias Langner, Juliane Doege, Sebastian de Hoog and Christoph Jacob)</li>
-	<li>Added context menu for file list editor with options to move/rename linked file as well as to automatically move the file to file directory and optionally rename after BibTeX key.</li>
-	<li>JabRef can now be extended by plugins (using the Java Plugin Framework JPF as the underlying technology). Currently extension points exist for:
-          <ul>
-            <li>ImportFormat</li>
-            <li>ExportFormat based on Templates</li>
-            <li>ExportFormat based on IExportFormat (contributed by Kariem Hussein)</li>
-            <li>LayoutFormatter</li>
-            <li>EntryFetcher</li>
-            <li>PushToApplication</li>
-          </ul>
-           JabRef uses JPFCodeGenerator (which was written just for JabRef) to generate helper classes for making JPF easier. Current version used: 0.4 http://forge.spline.inf.fu-berlin.de/projects/jpfcodegen/
-	</li>
-	<li>Print warnings if insufficient Java version is used or if JRE is not from Sun.</li>
-	<li>Memory Stick Mode: JabRef automatically loads configuration settings from jabref.xml and also writes them there if enabled.</li>
-	<li>Improved handling of crossrefs. Fields are now resolved in preview and export.</li>
-	<li>Updated dependencies, now using: JempBox-0.2</li>
-	<li>Improved handling of ArXiv URIs.</li>
-	<li>Changed default preference value: now using import inspection dialog also when just a single entry is imported.</li>
-	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
-	<li>[ 1738920 ] Fixed: Windows Position in Multi-Monitor environment</li>
-	<li>[ 1795355 ] Fixed: LatexFieldFormatter omits "{" on beginning of optional field</li>
-	<li>[ 1297576 ] New feature: Printing of entry preview (use right-click menu)</li>
-	<li>[ 1717849 ] Fixed: Bug in aux import (contributed by Kai Eckert)</li>
-	<li>[ 1749613 ] Fixed: About translation</li>
-	<li>[ 1709449 ] Fixed: Clicking a DOI from context menu fails</li>
-	<li>[ 1869331 ] Fixed: Uninstall after silent install removes Windows start menu</li>
-	<li>[ 1723219 ] Fixed: Strange message (LyX) while installing 2.3</li>
-	<li>Added handling of unknown file types when synchronizing the file field.</li>
-	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
-	<li>Moved file preferences from General tab to new File tab.</li>
-	<li>Reduced horizontal size of preferences dialog.</li>
-	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
-	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).    </li>
-      </ul>
-
-
-    <h3>Version 2.3.1 (November 29th, 2007)</h3>
-
-      <ul>
-	<li>Removed default applications for file types under Mac OS X, and made use of the standard "/usr/bin/open <filename>" way to open files except when an application name is explicitly set.</li>
-	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
-      </ul>
-
-
-    <h3>Version 2.3 (November 8th, 2007)</h3>
-
-      <ul>
-	<li>Added handling of unknown file types when synchronizing the file field.</li>
-	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
-	<li>Moved file preferences from General tab to new File tab.</li>
-	<li>Reduced horizontal size of preferences dialog.</li>
-	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
-	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).</li>
-      </ul>
-
-
-    <h3>Version 2.3beta3 (October 6th, 2007)</h3>
-
-      <ul>
-	<li>Export formats that output the character encoding now use common names for encodings instead of Java-specific names.</li>
-	<li>Added "Open" button in external link dialog box to test or use the link.</li>
-	<li>Added formatter WrapFileLinks which iterates over file links, producing a formatted string for each containing any desired information about the file link.</li>
-	<li>Applied Fedor Bezrukov patch (setting User-Agent in URLDownload to solve ArXiv problem).</li>
-	<li>Applied Aaron Chen's patch for fixing bugs in IEEExplore fetcher.</li>
-	<li>Applied Edward Valeev's patch for handling article numbers replacing pages in Refer/Endnote import.</li>
-	<li>Added toolbar button to entry editor for writing XMP-metadata.</li>
-	<li>Added paste and drag & drop support to file list editor.</li>
-	<li>Added "authorLast" and "editorLast" markers for using last author's last name in BibTeX keys.</li>
-	<li>Added support for file field in Write XMP action.</li>
-	<li>Numeric fields (year, volume, number, pmid, citeseercitationcount) are now sorted as numbers when possible.</li>
-	<li>Improvements to the Ovid import filter.</li>
-	<li>Modified AuthorLastFirstAbbreviator and AuthorAbbreviator to accept names in both last-first and first-first format, but always return in last-first format. These two formatters are identical.</li>
-	<li>[ 1648789 ] Fixed: Problem on writing XMP when option to leave out some fields was active.</li>
-	<li>[ 1561990 ] Fixed: Exporting to WinEdt - apostrophe.</li>
-	<li>Fixed bug in entry editor: source panel edits were not properly stored when clicking a different entry in the main table.</li>
-	<li>Fixed problem with "Synchronize file links" not honouring database specific file directory.</li>
-	<li>Fixed problem with file type selection in external file link editor not being up-to-date.</li>
-	<li>Fixed problem with wrong enable/disable behaviour of Clear search button when switching between tabs.</li>
-	<li>Fixed argument parsing in AbstractParamLayoutFormatter so \t and \n can be used for tabs and newlines.</li>
-      </ul>
-
-
-    <h3>Version 2.3beta2 (August 29th, 2007)</h3>
-
-      <ul>
-	<li>When user chooses to save to an existing file, and answers that the file should not be overwritten, a new file dialog now appears instead of the operation cancelling.</li>
-	<li>Removed antialias setting for main table, because it interferes with proper rendering on LCDs when running under JRE 6. Removed non-optional antialias settings for entry editor for the same reason.</li>
-	<li>Changed external link handling so remote (http) links can be sent to the external application. Applications like Evince and Gimp can open remote links.</li>
-	<li>Replaced Simle HTML export filter with improved version by Mark Schenk.</li>
-	<li>Introduced ParamLayoutFormatter interface for layout formatters that can take an argument by the following syntax: \format[MyFormatter(argument)]{\field}. Implementing classes contain a setArgument(String) method that receives the argument (if any) before the format() method is called.</li>
-	<li>Timestamp and owner fields are now set also when appending a bib file, and new options have been introduced to control whether imported/appended/pasted entries should have these fields overwritten if already set.</li>
-	<li>Added operations for adding file links in import inspection window, and made file and URL icons in the table clickable.</li>
-	<li>Removed PDF and PS columns and operations in import inspection window (replaced by operations on the "file" field).</li>
-	<li>File field column in main table now shows file type icon instead of generic icon.</li>
-	<li>Modified Endnote export to take "file" field into account, and to resolve full paths to PDF files.</li>
-	<li>Added "Auto" button to automatically set "owner" field to the default username.</li>
-	<li>Added \encoding tag for begin/end layouts in export filters to print the name of the character encoding used for the export. The tag is not available in entry layouts.</li>
-	<li>Added \% as a supported LaTeX command, producing '%'.</li>
-	<li>Fixed bug in HTMLChars: commands like {\aa} and {\o} were not processed properly, even though defined in Globals.HTMLCHARS.</li>
-	<li>Fixed bug that made it possible to accidentally close database without saving, when error occurs during the save operation.</li>
-      </ul>
-
-
-    <h3>Version 2.3beta (June 28th, 2007)</h3>
-
-      <ul>
-	<li>Added MIS Quarterly export format.</li>
-	<li>Added support for COPAC file format.</li>
-	<li>Added RemoveTilde LayoutFormatter to deal with Bibtex non-breakable spaces.</li>
-	<li>Added autocompletion feature for author/editors and other fields.</li>
-	<li>Added feature to save all open databases.</li>
-	<li>Added support for pushing citations to Vim when Vim server is enabled.</li>
-	<li>Added missing option for specifying the path to LEd.exe.</li>
-	<li>Added -s/--nosplash command line option for disabling the splash screen.</li>
-	<li>Added new field marker [auth.etal] for key generation.</li>
-	<li>Added support in XMP metadata handling for bibtex string resolution.</li>
-	<li>When opening databases, already open files are now skipped.</li>
-	<li>Option to use native instead of Swing file dialogs is now available on all OSes.</li>
-	<li>Synchronize external links now searches entire database, not selected entries.</li>
-	<li>Medline import now adds <Affiliation> information into the "institution" field.</li>
-	<li>Improved handling of external links. The 'file' field can now specify a list of external links, and arbitrary file types are supported. Old-style PDF and PS links can be moved automatically into the 'file' field.</li>
-	<li>Fixed bug in RIS and Refer/Endnote imports. Entries with editors but no authors are now imported properly.</li>
-	<li>Fixed missing export formatter AuthorFirstFirstCommas.</li>
-	<li>Fixed minor bug in Harvard export with missing space between year and title.</li>
-	<li>Fixed bug that caused lockup when connection to IEEExplore fails.</li>
-	<li>Fixed wrong dependency in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed problem with foreign characters in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed problem with key generation in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed bug in duplicate search that made misc entries never get detected as duplicates.</li>
-	<li>Fixed bug in XMP reimport from DublinCore related to month strings.</li>
-      </ul>
-
-
-    <h3>Version 2.2 (January 30th, 2007)</h3>
-
-      <ul>
-	<li>Added progress bar to indicate progress when synchronizing PS/PDF links.</li>
-	<li>Option to autogenerate key for imported entries now also affects entries imported
-      without using the import inspection window.</li>
-	<li>Modified quick jump behaviour so sequences of letters can be found. Timeout or
-      ESC resets the search.</li>
-	<li>Improved XMP support:
-          <ul>
-	    <li>JabRef now reads and write DublinCore and Legacy Document Properties;
-		Caution needs to be used though since, JabRef does overwrite existing values.</li>
-	    <li>XMP privacy filter can be used to prevent sensible fields to be exported.</li>
-          </ul>
-	</li>  
-	<li>Support for OAI2 identifiers with subcategories, e.g. math.RA/0601001</li>
-	<li>Fixed bug that made explicit groups appear empty after updating group tree from external change.</li>
-	<li>New windows installer thanks to Uwe Stöhr.</li>
-	<li>[ 1641247 ] Fixed: No update of preview after generating bibtex key</li>
-	<li>[ 1631548 ] Fixed: Absolute paths should be stored for last open files.</li>
-	<li>[ 1598777 ] Fixed: Month sorting</li>
-	<li>[ 1570570 ] New Feature: Deselect all duplicates on import</li>
-	<li>[ 1574773 ] Fixed: sanitizeUrl() breaks ftp:// and file:///</li>
-	<li>[ 1609991 ] Fixed: Silverplatter Import: Publisher and Year confused</li>
-	<li>[ 1608391 ] Fixed: Medline Search Editbox size gets to big</li>
-      </ul>
-
-
-    <h3>Version 2.2beta2 (November 26th, 2006)</h3>
-
-      <ul>
-	<li>Redesigned export functions to simplify GUI and provide "Export selected entries" functionality. Export filter is now chosen using the file type dropdown menu in the file dialog.</li>
-	<li>Fixed bug that caused UnsupportedEncodingException on Windows when saving.</li>
-	<li>Added warning dialog when exporting failed.</li>
-	<li>Added fix for exporting special chars in RTF like éóú...</li>
-	<li>Added NameFormat LayoutFormatter based on Bibtex method name.format$</li>
-	<li>Added Fetch from ArXiv.org to Web Search<br />
-            [1587342] Quering ArXiv (and any OAI2 Repository)</li>
-	<li>[1594123] Fixed: Failure to import big numbers in Bibtex</li>
-	<li>[1594169] Fixed: Entry editor navigation between panels faulty</li>
-	<li>[1588028] Fixed: Export HTML table has relative DOI URL</li>
-	<li>[1601651] Fixed: PDF subdirectory - missing first character</li>
-      </ul>
-
-
-    <h3>Version 2.2beta (October 13th, 2006)</h3>
-
-      <ul>
-	<li>Added Mark Schenk's advanced HTML export filter.</li>
-	<li>Added options to copy/move/link to dragged linkable file (pdf, ps, etc.).</li>
-	<li>Removed unnecessary output text when scanning for external file changes.</li>
-	<li>Changed layout of entry editor to solve problem with collapsing text fields.</li>
-	<li>Added first version of support for XMP-metadata in PDFs.
-          <ul>
-	    <li>"Import into..."</li>
-            <li>Integrate with copy/move/link.</li>
-            <li>Added option to write all/selected PDFs in database</li>
-          </ul>
-	</li>
-	<li>Added tooltips to database tabs showing the file's full path.</li>
-	<li>Added function for setting or clearing specific fields in selected or all entries.</li>
-	<li>Setting a relative PDF/PS path in Database Properties now makes JabRef look for the directory relative to the bib file's location.</li>
-	<li>Removed Oxford comma from AuthorList...Comma-LayoutFormatters.</li>
-	<li>Added LayoutFormatters that print the Oxford comma.</li>
-	<li>Added missing space between abbreviated author first names: William Andrew Paul => W. A. Paul (used to be W.A. Paul)</li>
-	<li>Added LayoutFormatter for HTML paragraphs.</li>
-	<li>Changing Database Properties now causes the database to be marked as changed.</li>
-	<li>Improved simple search. Words are now treated as separate search terms, and phrases can be indicated with "double quotes".</li>
-	<li>When a letter key is pressed in the table, the first entry starting with the same letter (in the current sort column) is selected.</li>
-	<li>Bib files dragged into JabRef now appear in the Recent files menu.</li>
-	<li>Fixed bug in import dialog.</li>
-	<li>Better support for ISI files in general (should basically be better than INSPEC) including IEEE parsing.</li>
-	<li>Added regular expression search for auto-linking. Search is now more flexible by default.</li>
-	<li>Search operation also now search relative to the JabRef directory.</li>
-	<li>General improvements in Inspec ISI handling.</li>
-	<li>New LayoutFormatter: AuthorOrgSci - first author is in "last, first" all others in "first last". First names are abbreviated.</li>
-	<li>New LayoutFormatter: NoSpaceBetweenAbbreviations - spaces between multiple abbreviated first names are removed.</li>
-	<li>Improved PDF link resolver to produce proper URIs.</li>
-	<li>[1503956] Fixed: Help text instead of Help icon.</li>
-	<li>[1542552] Fixed: Wrong author import from ISI file.</li>
-	<li>[1534537] Fixed: resize groups interface</li>
-	<li>[1465610] Fixed: (Double-)Names containing hyphen (-) not handled correctly</li>
-	<li>[1436014] Fixed: No comma added to separate keywords</li>
-	<li>[1548875] Fixed: download pdf produces unsupported filename</li>
-	<li>[1545601] Fixed: downloading pdf corrupts pdf field text</li>
-	<li>[1285977] Fixed: Impossible to properly sort a numeric field</li>
-	<li>[1535044] Fixed: Month sorting</li>
-	<li>[1540646] Fixed: Default sort order: bibtexkey</li>
-	<li>[1553552] Fixed: Not properly detecting changes to flag as changed</li>
-      </ul>
-
-    <h3>Version 2.1 (August 9th, 2006)</h3>
-
-      <ul>
-	<li>Added capability to drag files and WWW links into JabRef. BibTeX files will be opened normally, other files imported, and WWW links downloaded and imported.</li>
-	<li>The -v command line option now makes the application only print version number and quit immediately.</li>
-	<li>Duplicates within a set of imported entries are now found and shown in the import inspection window.</li>
-	<li>Mac users can now choose between native and Swing file chooser under Preferences -> Advanced.</li>
-	<li>Fixed missing duplicate warning when importing without import inspection window.</li>
-	<li>Fixed error in ISI import which allowed empty fields to be set, causing errors when saving and reloading entries.</li>
-	<li>Fixed missing time and owner stamps when importing entries (only in 2.1b/2.1b2).</li>
-	<li>Fixed erroneous updates in entry editor if user switches to a different entry while downloading PDF/PS file.</li>
-	<li>Fixed bug (only in 2.1b2) in calling file open/save dialog on Mac OS X.</li>
-	<li>Fixed bug that made duplicate resolver dialog pop under import inspection dialog.</li>
-      </ul>
-
-    <h3>Version 2.1beta2 (June 29th, 2006)</h3>
-
-      <ul>
-	<li>Added option to toggle floating of marked entries to the top of the table.</li>
-	<li>Added option to open, append and import multiple BibTeX files.</li>
-	<li>Improved support for LaTeX special characters in HTML and RTF representations.</li>
-	<li>Fixed bug that made entry selection get lost when an edit modifies the entry's position in the main table.</li>
-	<li>Fixed bug in BibTeXML export (entry type name missing in tag).</li>
-	<li>Fixed name handling in (non-compliant) Endnote files giving all author names on the same line.</li>
-	<li>Fixed problem with keyword handling in Medline import.</li>
-	<li>Fixed (harmless) NullPointerException when medline fetch is cancelled.</li>
-	<li>Fixed bug in parser that made {"} illegal in fields quoted with ".</li>
-      </ul>
-
-    <h3>Version 2.1beta (May 9th, 2006)</h3>
-
-      <ul>
-	<li>Known issue: font sizes cannot be changed, but should follow OS settings on Windows and Mac.</li>
-	<li>Known issue: some HTML may be handled inappropriately when downloading from IEEEXplore.</li>
-	<li>Changed Paste function so timestamp and owner fields are updated.</li>
-	<li>Added "Other" item to the "New entry ..." menu.</li>
-	<li>Changed sorting order so marked entries are displayed at the top of the table.</li>
-	<li>Added IEEEXplore search and download feature.</li>
-	<li>Added option to store entries in their original order. Unsorted table view now shows entries in their original order.</li>
-	<li>Added option to autogenerate keys for entries with missing keys before each save.</li>
-	<li>Improved handling of external URLs to prevent problems with special characters.</li>
-	<li>Medline and Endnote imports no longer automatically add curly braces around capital letters in title.</li>
-	<li>Float search now scrolls table to the top.</li>
-	<li>Fixed lockup problem in preview with uneven number of # characters in fields.</li>
-	<li>Fixed problem with default content selector fields reappearing after removal.</li>
-	<li>Fixed problem with unsupported character encodings being selectable and causing unreported save errors.</li>
-	<li>Fixed bug that blocked last line in table columns setup from being removed.</li>
-	<li>Fixed missing export formats from command line.</li>
-	<li>Fixed bug that made Review tab impossible to remove from entry editor.</li>
-	<li>Fixed bug in Medline XML import that assigned wrong PMID for some entries.</li>
-	<li>Fixed bug in custom export that collapsed sequences of two or more backslashes into a single backslash in output.</li>
-	<li>Fixed bug (misspelled formatter name) in Harvard RTF export.</li>
-      </ul>
-
-    <h3>Version 2.0.1 (February 2nd, 2006)</h3>
-
-      <ul>
-	<li>Fixed bug that made a hidden entry editor under some circumstances store a field value to the wrong entry.</li>
-	<li>Fixed synchronization bug that made the opening of a new database sometimes fail.</li>
-	<li>Fixed bug in setting external journal lists when no personal list is set.</li>
-      </ul>
-
-    <h3>Version 2.0 (January 30th, 2006)</h3>
-
-      <ul>
-	<li>Changed sorting selection interface for main table for more intuitive operation.</li>
-	<li>Made import operation update "working directory".</li>
-	<li>Removed hard-coded author/editor name rearrangement in OpenOffice and OpenDocument exports.</li>
-	<li>Fixed hangup when parsing RIS files from Nature.</li>
-	<li>Fixed NullPointerException when generating database from AUX file on Mac OS X.</li>
-	<li>Fixed bug in routine for adding braces around capital letters.</li>
-	<li>Fixed bug in switching preview layouts.</li>
-	<li>Fixed bug in link handling in entry preview.</li>
-      </ul>
-
-    <h3>Version 2.0b2 (January 15th, 2006)</h3>
-
-      <ul>
-	<li>Changed field order in OpenDocument export
-	to comply with bibliography requirement.</li>
-	<li>Added support for inserting citations into
-	Emacs using gnuserv/gnuclient.</li>
-	<li>Added option to set a regular expression
-	replace operation on generated bibtex keys.</li>
-	<li>Added support for custom importers inside
-	a jar file.</li>
-	<li>Fixed bug in opening URLs containing "&"
-	on Windows.</li>
-      </ul>
-
-    <h3>Version 2.0b (January 4rd, 2006)</h3>
-
-      <ul>
-	<li>Added a system for registering custom import
-	formats in the form of Java classes.</li>
-
-	<li>Added export option for OpenDocument
-	spreadsheet.</li>
-
-	<li>Added new options for name formatting in main
-	table.</li>
-
-	<li>Added REPEC-NEP import filter.</li>
-
-	<li>Added option for non-field parameters for export
-	formatters. If the parameters does not start with the
-	backslash character, it will be passed unchanged to the
-	formatter in place of any field value.</li>
-
-	<li>Added export formatter CurrentDate, which returns
-	the current date, and takes a format string as
-	parameter.</li>
-
-	<li>Added customization of table colors, accessible
-	from Tools -> Preferences -> Entry table.</li>
-
-	<li>Added new Appearance tab to preferences dialog to
-	gather appearance related options.</li>
-
-	<li>Added toggling of abbreviated and full journal
-	names. The list of journals is realized as an external
-	file, but editable from a Manage Journal Abbreviations
-	panel. Secondary lists can also be linked, but not
-	edited. There is a download option to quickly get a
-	list available on the internet, and we will provide one
-	or more lists for download from the SourceForge web
-	server.</li>
-
-	<li>Added functionality for new JabRef instances to
-	detect a running instance, and send command line
-	parameters to the running instance for processing.</li>
-
-	<li>Added handling of HTML links in preview panel.</li>
-
-	<li>Added confirmation dialog when database is saved
-	and the chosen encoding doesn't support all characters.
-	Gives options to save, cancel or try a different
-	encoding.</li>
-
-	<li>The encoding used when opening a database is now
-	remembered, and used when database is stored.</li>
-
-	<li>Added review field for research comments, paper
-	reviews, etc.</li>
-
-	<li>Added option to disable wrapping for certain
-	fields. Wrapping of pdf, ps, doi and url is disabled by
-	default.</li>
-
-	<li>Antialiasing option now affects entry editor text
-	fields as well as table text.</li>
-
-	<li>Changed to monospaced font in source editor
-	field.</li>
-
-	<li>Removed option to put double braces around BibTeX
-	fields, but retained option to remove double braces
-	when loading. Added option to put braces around capital
-	letters of a chosen set of fields.</li>
-
-	<li>Improved Ovid import.</li>
-
-	<li>Fixed problem with ordering of BibTeX strings that
-	are referred to by other strings.</li>
-
-	<li>Fixed problem with loading 16-bit encoded bib files
-	with 8-bit encoding as default, and vice versa.</li>
-
-	<li>Fixed multiplying authors bug when author/editor
-	field appears both in Required and Optional tabs.</li>
-
-	<li>Fixed startup freeze when trying to load certain
-	malformed bib files.</li>
-
-	<li>Fixed bug related to multi-line fields in RIS
-	import.</li>
-
-	<li>Fixed bug related to looking up a fully qualified
-	DOI</li>
-
-	<li>Included review field to preview panel 1, which
-	shows the abstract</li>
-
-	<li>Fixed bug where booktitle field was not displayed
-	in preview for conference proceedings, similar to
-	journal field</li>
-      </ul>
-
-    <h3>Version 1.8.1 (September 15th, 2005)</h3>
-
-      <ul>
-	<li>Added automatic timestamp with configurable format
-	for entries.</li>
-
-	<li>Added new key generator modifier ":abbr" to
-	abbreviate field contents.</li>
-
-	<li>Added Help button in Preferences -> Entry
-	preview</li>
-
-	<li>Added Big5, Big5_HKSCS and GBK encodings for
-	Chinese.</li>
-
-	<li>Improved marking feature. Username is now used for
-	marking, so different users can mark entries separately
-	without interference.</li>
-
-	<li>Improved handling of names such as "Firstname de la
-	Lastname jr.", with different handling for presentation
-	and sorting purposes. Key generation now should always
-	use the genuine last name, and not produce keys like
-	"de2001".</li>
-
-	<li>Removed duplicate warning from inspection dialog
-	for non-selected entries.</li>
-
-	<li>Fixed setting of sheet name in OpenOffice.org Calc
-	export.</li>
-
-	<li>Fixed bug that prevented PDF/PS opening by F4 from
-	automatically finding files in subdirectories below the
-	main PDF/PS dir.</li>
-
-	<li>Fixed BibTeX parser bug that made it choke on short
-	comment strings.</li>
-
-	<li>Fixed bug that made regexp search fail for fields
-	containing newline characters.</li>
-
-	<li>Fixed platform-dependent handling of newline
-	characters.</li>
-
-	<li>Fixed bug that prevented command line import with
-	explicit format.</li>
-
-	<li>Fixed bug that made it impossible to disable table
-	antialiasing.</li>
-
-	<li>Fixed AuthorAndsCommaReplacer.</li>
-      </ul>
-
-    <h3>Version 1.8 (July 30th, 2005)</h3>
-
-      <ul>
-	<li>Search panel now starts visible if it was visible
-	at last shutdown.</li>
-
-	<li>Added option to disable import inspection window
-	when only one entry is being imported.</li>
-
-	<li>Fixed parser bug that caused problems for bib files
-	containing extra characters after the last entry.</li>
-
-	<li>Fixed missing month in JStor import.</li>
-
-	<li>Fixed some bugs in "new from plain-text"
-	wizard</li>
-      </ul>
-
-    <h3>Version 1.8b2 (July 13th, 2005)</h3>
-
-      <ul>
-	<li>Changed handling of external updates so the
-	notification is suppressed when there are no actual
-	changes.</li>
-
-	<li>Changed autodetecting import so BibTeX files are
-	handled more similarly to other formats.</li>
-
-	<li>Enabled sorting by icon columns.</li>
-
-	<li>Added option to remove BibTeX source panel from
-	entry editor.</li>
-
-	<li>Added command line option to not load any files at
-	startup. Will override any autoloading or other command
-	line options that normally load or import files.</li>
-
-	<li>Added handling of duplicates to import inspection
-	window.</li>
-
-	<li>Made entry preview be updated whenever the
-	selection is expanded by one row, to make it more
-	useful while selecting a set of entries.</li>
-
-	<li>Changed BibTeX field parsing to avoid inserting
-	line breaks at wrong places.</li>
-
-	<li>Improved handling of page numbers in Medline
-	import.</li>
-
-	<li>Fixed import of file links when importing SixPack
-	files.</li>
-
-	<li>Fixed bug that prevented closing of search
-	interface when no databases are open.</li>
-
-	<li>Fixed OpenOffice Calc export to be compatible with
-	OpenOffice.org 2.0 beta.</li>
-
-	<li>Fixed bugs in Refer/Endnote import filter.</li>
-
-	<li>Fixed bug that caused changes to be lost in some
-	cases when the same field is present in multiple entry
-	editor tabs.</li>
-
-	<li>Fixed bug that prevented command line autodetecting
-	import from working with BibTeX files.</li>
-
-	<li>Fixed minor bug in routine for removing double
-	braces.</li>
-      </ul>
-
-    <h3>Version 1.8b (June 6th, 2005)</h3>
-
-      <ul>
-	<li>Added option to store bib file with double
-	braces.</li>
-
-	<li>Follow @input tags in aux files to indicate nested
-	aux files for generating subdatabases.</li>
-
-	<li>Improved wrapping and formatting of bib files, to
-	preserve paragraph separator (empty line).</li>
-
-	<li>Added test buttons for customization of preview
-	layouts.</li>
-
-	<li>Added inspection dialog for previewing and
-	generating keys for imported entries, and deciding
-	which ones to keep and discard. The dialog allows
-	inspection during long import processes such as Medline
-	search.</li>
-
-	<li>Restructured layout to use a common side pane with
-	all tabs.</li>
-
-	<li>Added import filter for Cambridge Scientific
-	Abstracts (CSA) format.</li>
-
-	<li>Added PS directory with similar options as
-	PDF.</li>
-
-	<li>Added [authshort] and [edtrshort] key field
-	markers. Patch submitted by Kolja Brix.</li>
-
-	<li>Made the program remember preview enable
-	setting.</li>
-
-	<li>Improved handling of illegal regular expressions in
-	search.</li>
-
-	<li>Removed options to search only Required, Optional
-	and/or General fields, in order to simplify search
-	interface.</li>
-
-	<li>Changed keys for Next and Previous tab to CTRL-PGDN
-	and CTRL-PGUP to match shortcuts in a certain popular
-	web browser.</li>
-
-	<li>Minor change to Preferences -> Table columns to
-	enable insertion of column in position 2.</li>
-
-	<li>Fixed parser bug that caused problems for files
-	with >10000 entries.</li>
-
-	<li>Fixed bug in entry editor that caused the source
-	edit panel to remove marking from entries.</li>
-
-	<li>Fixed export bug that made "\begin" tags fail if
-	encountered immediately after an "\end" tag.</li>
-
-	<li>Fixed export bug that made whitespace disappear
-	after empty field values.</li>
-
-	<li>Fixed ISI import bug that handled SO fields with
-	line breaks wrong.</li>
-
-	<li>Fixed bug occuring when choosing not to import
-	duplicate imported entry.</li>
-
-	<li>Fixed problem with detecting popup trigger on Mac
-	OSX with one button mouse.</li>
-
-	<li>Fixed erroneous relative paths for PDF files when
-	PDF directory is not set.</li>
-
-	<li>Fixed entry preview to resolve string
-	references.</li>
-      </ul>
-
-    <h3>Version 1.7.1 (April 11th, 2005)</h3>
-
-      <ul>
-	<li>Removed unnecessary stack traces when opening
-	external viewer.</li>
-
-	<li>Fixed bug that made Ctrl-E destroy current edit in
-	entry editor.</li>
-
-	<li>Fixed problem when copying modified BibTeX key gave
-	old value.</li>
-
-	<li>Fixed missing 'booktitle' import in CONF entries in
-	RIS import.</li>
-
-	<li>Fixed bug that made group tree disappear for
-	certain keyword expressions.</li>
-
-	<li>Fixed bug that made standard BibTeX fields be saved
-	without line wrapping.</li>
-      </ul>
-
-    <h3>Version 1.7 (March 20th, 2005)</h3>
-
-      <ul>
-	<li>When fetching from Medline or CiteSeer, fetched
-	entry is now opened in editor.</li>
-
-	<li>Added French translations of help files.</li>
-
-	<li>Added color highlighting of focused text field in
-	entry editor.</li>
-
-	<li>Added option in context menu of entry editor for
-	changing capitalization of field contents.</li>
-
-	<li>Added name conversion "Smith, RA" -> "Smith, R.
-	A." to Medline import.</li>
-
-	<li>Updated task bar icon.</li>
-
-	<li>Fixed bug that left some search settings items
-	inappropriately disabled.</li>
-
-	<li>Fixed bug that caused requirement for restart to
-	register change in default key pattern.</li>
-
-	<li>Fixed bug that caused crash some times after
-	adding/removing field content selectors.</li>
-
-	<li>Fixed bug in recognizing custom entry types when
-	reading bib files.</li>
-
-	<li>Fixed bug that allowed a deleted entry to stay
-	visible in the entry editor.</li>
-      </ul>
-
-    <h3>Version 1.7b2 (March 7th, 2005)</h3>
-
-      <ul>
-	<li>Made side pane resizable.</li>
-
-	<li>Replaced entry customization dialog with improved
-	interface.</li>
-
-	<li>Added standard entry type "conference", similar to
-	"inproceedings".</li>
-
-	<li>Added "default" label pattern to avoid the need to
-	set similar patterns manually.</li>
-
-	<li>Added line wrapping to metadata in saved .bib file
-	to avoid long lines.</li>
-
-	<li>Added "bibtexkey" as implicit fourth sort
-	criterion, to minimize problem with almost similar
-	entries swapping places.</li>
-
-	<li>Added OpenOffice.org Calc export filter that
-	exports spreadsheet compatible with the OpenOffice.org
-	bibliography feature.</li>
-
-	<li>Added a couple of previously unsupported
-	publication types in SciFinder.</li>
-
-	<li>Added extra shortcuts CTRL-+ and CTRL-- for
-	switching tabs in entry editor, since original
-	shortcuts CTRL[-SHIFT]-TAB is used by some window
-	managers.</li>
-
-	<li>Updated Endnote export filter.</li>
-
-	<li>Fixed focus and key binding problems for switching
-	tabs/entries in entry editor</li>
-
-	<li>Fixed bug that prevented required fields tab from
-	appearing for entries with only bibtex key as required
-	field.</li>
-
-	<li>Fixed bug that prevented the user from changing the
-	default encoding.</li>
-
-	<li>Fixed bugs in RIS import.</li>
-
-	<li>Fixed bug 1112050; freeze when reading certain
-	author fields with mismatched braces.</li>
-      </ul>
-
-    <h3>Version 1.7 beta (January, 27th, 2005)</h3>
-
-      <ul>
-	<li>Changed routine for rearranging author names
-	(Lastname, Firstname) so bracketed expressions are
-	treated as units.</li>
-
-	<li>Grouping controls now allow group hierarchies, and
-	now allow explicit and search expression groups as well
-	as keyword groups.</li>
-
-	<li>Added full customization of general fields
-	tabs</li>
-
-	<li>Added option to preserve formatting for non-BibTeX
-	fields.</li>
-
-	<li>Added integrity check for database.</li>
-
-	<li>Added export filters EndNote and Harvard RTF.</li>
-
-	<li>Added automatic import format chooser for import
-	(same as wildcard import below).</li>
-
-	<li>Added wildcard (*) option for command-line import,
-	to try to automatically determine the correct
-	format.</li>
-
-	<li>Improved layout of Preferences dialog.</li>
-
-	<li>Improved several import filters.</li>
-
-	<li>Added authIniN/edtrIniN key formatters.</li>
-
-	<li>Marked entries now float to the top when no
-	searching or grouping reordering is active.</li>
-
-	<li>Fixed problem with opening file dialog on Win NT -
-	AWT dialog is now opened if Swing dialog fails.</li>
-      </ul>
-
-    <h3>Version 1.6 (November 27th, 2004)</h3>
-
-      <ul>
-	<li>Improved handling of entry selection in various
-	ways. E.g. selected entry is now scrolled into view
-	when opening entry editor and entry is kept selected
-	when importing CiteSeer fields.</li>
-
-	<li>Fixed update bug between autogenerated bibtex key
-	and source panel.</li>
-
-	<li>Fixed missing . at the end of last author name in
-	RIS import.</li>
-
-	<li>Fixed NullPointerException on certain special
-	characters when exporting to BibTeXML.</li>
-
-	<li>Fixed bug that sometimes prevented the unmarking of
-	entries.</li>
-
-	<li>Fixed problem with formatting one-name
-	authors.</li>
-
-	<li>Various other bugfixes.</li>
-      </ul>
-
-    <h3>Version 1.6 beta (November 8th, 2004)</h3>
-
-      In an effort to produce better and more stable releases,
-      we have decided to release a beta versions prior to
-      future versions. We start out with today's beta release
-      of version 1.6. Users can now choose whether to download
-      and use the beta version for earlier access to new
-      features, or whether to wait for the final, better-tested
-      version. The final 1.6 version is expected to be released
-      in a few weeks from today.
-
-      <ul>
-	<li>Added mnemonic keys to menus and menu items.</li>
-
-	<li>Added MODS and tab-separated file export</li>
-
-	<li>Added facility for detecting and handling external
-	changes to open bib files.</li>
-
-	<li>Added scan option for exact duplicates with
-	automatic removal.</li>
-
-	<li>Bibtex strings are now sorted automatically.</li>
-
-	<li>Bibtex strings are now resolved when exporting
-	database.</li>
-
-	<li>Fixed problem with field content selector getting
-	too wide. Limited width.</li>
-
-	<li>Fixed PDF/PS view routine to remove problems with
-	filenames containing spaces.</li>
-
-	<li>Fixed bug that interfered with Fetch Medline by ID,
-	and fixed parsing problem with certain Medline
-	entries.</li>
-
-	<li>Fixed bug that interfered with Push to WinEdt.</li>
-
-	<li>Fixed HTML output so \c{c} is handled
-	correctly.</li>
-
-	<li>command line option for generating a sub-database
-	from LaTex aux file entries</li>
-
-	<li>simple copy/paste menu in entry editor</li>
-
-	<li>experimental: text-input-area with underlying
-	infotext in plaintext import dialog</li>
-      </ul>
-
-    <h3>Version 1.55 (October 12th, 2004)</h3>
-
-      <ul>
-	<li>Made method for opening PDF files robust with
-	regard to file separators (/ and \), so bib files can
-	easier be used across platforms.</li>
-
-	<li>Improved Medline fetcher. Can now fetch entries
-	based on a search expression.</li>
-
-	<li>Added features for fetching fields and referring
-	publications from the CiteSeer database.</li>
-
-	<li>Added option to always save database ordered by
-	author/editor/year, and made this the default
-	setting.</li>
-
-	<li>When a single entry is selected, right-click menu
-	now shows a checkbox menu for group memberships instead
-	of the regular "Add to" and "Remove from" menus.</li>
-
-	<li>Improved [shorttitle] and [veryshorttitle] special
-	key pattern fields.</li>
-
-	<li>Added dialog box for conveniently setting the
-	fields of an entry from a plain text description.</li>
-
-	<li>Added formatter "ResolvePDF" to create correct
-	PDF/PS links in HTML export when relative file names
-	are used.</li>
-
-	<li>Added Abstract panel in entry editor.</li>
-
-	<li>Added alternate preview with abstract, and made
-	both previews configurable.</li>
-
-	<li>Added the option to create a subset of a database
-	based on an .aux file.</li>
-
-	<li>Added 'Cancel' button to duplicate resolver dialog,
-	so the process can be stopped.</li>
-
-	<li>Added check for spaces in custom entry type
-	names.</li>
-
-	<li>Added several new key pattern markers.</li>
-
-	<li>Added toolbar buttons for Mark/Unmark to improve
-	discoverability.</li>
-
-	<li>Fixed bug that made export filters ignore the
-	chosen character encoding.</li>
-
-	<li>Fixed bug that interfered with author name
-	formatting.</li>
-
-	<li>Fixed various bugs in import filters.</li>
-
-	<li>Fixed bug that prevented confirmation dialog when
-	deleting entry from the entry editor.</li>
-
-	<li>Fixed bug that made the next entry be opened
-	instead of the current, when pressing Enter in
-	table.</li>
-
-	<li>Fixed bug that made it possible to leave a source
-	edit when the source didn't validate properly. Also
-	made it impossible to change table selection until
-	source validates.</li>
-      </ul>
-
-    <h3>Version 1.5 (August 3rd, 2004)</h3>
-
-      <ul>
-	<li>Added Highlight and select options to the group
-	interface, and made it possible to change the number of
-	visible lines in the list.</li>
-
-	<li>Added option to allow or disallow direct table
-	editing.</li>
-
-	<li>Added optional confirmation dialog for deleting
-	entries.</li>
-
-	<li>Added optional warning dialog for duplicate BibTeX
-	keys.</li>
-
-	<li>Added warnings to bibtex parser, and prevented
-	failure to load files with duplicate string
-	definitions.</li>
-
-	<li>Added JStor import filter.</li>
-
-	<li>Changed the look and feel to JGoodies Forms on
-	non-Macintosh platforms.</li>
-
-	<li>Optimized performance in several areas.</li>
-
-	<li>Numerous usability improvements.</li>
-
-	<li>Fixed RIS import bug caused by short lines.</li>
-
-	<li>Fixed bug in SciFinder import.</li>
-
-	<li>Fixed bug that made entire field get cleared when
-	removing from group.</li>
-      </ul>
-
-    <h3>Version 1.4 (June 6th, 2004)</h3>
-
-      Version 1.4 provides command line options for importing
-      and exporting files, advanced search, custom export
-      filters, and several bug fixes and minor changes.
-
-      <ul>
-	<li>Added advanced search feature.</li>
-
-	<li>Added facility for using custom export
-	formats.</li>
-
-	<li>Added command line options for importing/exporting
-	files, importing/exporting, user preferences, loading
-	session and for suppressing the GUI (using RitOpt for
-	parsing options).</li>
-
-	<li>Added automatic stripping of \url{} when opening
-	url.</li>
-
-	<li>Improved export filters.</li>
-
-	<li>Fixed focus bug which sometimes interfered with
-	cut/copy/paste.</li>
-      </ul>
-
-    <h3>Version 1.3.1 (May 9, 2004)</h3>
-
-      Release 1.3.1 resolves a couple of severe bugs in 1.3.
-      All users who have downloaded 1.3 should upgrade (the
-      bugs in 1.3 impaired functionality but did not pose a
-      security risk).
-
-    <h3>Version 1.3.* (May 9, 2004)</h3>
-
-      This release adds entry preview, detection of duplicate
-      entries, persistent entry marking, new import and export
-      filters, better linking to PDF/PS/URL/DOI, and better Mac
-      OS X compatibility. There are several other changes and
-      improvements, and many bugfixes.
-
-    <h3>Version 1.2 (March 21, 2004)</h3>
-
-      The icon set has been replaced. Notable new features are
-      French language support, key generator customization,
-      string replace, and BibTeXML import. Several bugs have
-      been fixed.
-
-    <h3>Version 1.19 (Feb 19,2004)</h3>
-
-      <ul>
-	<li>Entry editor is now opened for an entry that causes
-	an error when saving.</li>
-
-	<li>Added options to display names in harmonised format
-	in the main table.</li>
-
-	<li>Added Docbook and (experimental) HTML export.</li>
-
-	<li>Enabled 'doi' and 'pii' fields for Medline
-	import.</li>
-
-	<li>Enabled antialiasing fonts.</li>
-
-	<li>Added the Kunststoff look&feel to give a more
-	pleasant user interface.</li>
-
-	<li>Added font selector for the main table.</li>
-
-	<li>Improved table column customization.</li>
-
-	<li>Added word selector feature for selected fields
-	(keywords, journal).</li>
-
-	<li>Added support for German and Norwegian
-	language.</li>
-
-	<li>Generalized copy cite key features for multiple
-	entries.</li>
-
-	<li>Added quick load/save session feature.</li>
-
-	<li>Fixed issue/number bug in ISI import.</li>
-
-	<li>Added "Open pdf/ps" item in right-click menu.</li>
-
-	<li>Fixed bug causing external viewer to only work in
-	General fields.</li>
-
-	<li>Added functionality for using Browse buttons for
-	file-related fields (ps, pdf, etc.).</li>
-
-	<li>Added Browse buttons to External programs tab in
-	Preferences.</li>
-
-	<li>Fixed bug related to Save database and Source field
-	which caused changes to disappear.</li>
-      </ul>
-
-    <h3>Version 1.1 (Jan 02, 2004)</h3>
-
-      <ul>
-	<li>Added bibtex key uniqueness checking, and prevented
-	autogeneration from generating non-unique keys.</li>
-
-	<li>Added command line option to load file on
-	startup.</li>
-
-	<li>Fixed problem with autogeneration creating invalid
-	keys.</li>
-
-	<li>Improved Refer/Endnote import.</li>
-
-	<li>Added feature for importing entries and/or strings
-	and/or group definitions from another BibTeX
-	database.</li>
-
-	<li>Added menu choices to import into open
-	database.</li>
-
-	<li>Added toolbar button for closing current
-	database.</li>
-
-	<li>Fixed shortcut key for "Store field" in entry
-	editor, and fixed problem that made shortcut for "Save
-	database" unavailable from entry editor.</li>
-
-	<li>Added option to fetch Medline entries automatically
-	by ID, based on a patch submitted by Mike Smoot.</li>
-
-	<li>Fixed bug in RIS import.</li>
-
-	<li>Added options to copy key and copy "\cite{key}" to
-	right-click menu.</li>
-
-	<li>Fixed bug that caused some General fields not to
-	get displayed.</li>
-
-	<li>Enabled customization of General fields.</li>
-
-	<li>Enabled customization of existing entry types, and
-	definition of new types.</li>
-      </ul>
-
-    <h3>Version 1.0 (Nov 29, 2003)</h3>
-
-      First release of JabRef
-
-  </body>
-
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+  <h1>Versionsgeschichte (auf Englisch)</h1>
+
+    <p>Die vollstä Versionsgeschichte ist auf Englisch unter <a href=http://jabref.sourceforge.net/revisionhistory.php">http://jabref.sourceforge.net/revisionhistory.php</a> zu finden.</p>
+
+</body>
+
+</html>
diff --git a/src/help/de/SearchHelp.html b/src/help/de/SearchHelp.html
index 4294fe7..68817cf 100644
--- a/src/help/de/SearchHelp.html
+++ b/src/help/de/SearchHelp.html
@@ -1,113 +1,113 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Suchfunktionen</h1>
-
-    <p><em>STRG-F</em> öffnet oder aktiviert den Suchdialog.
-    Drückt man mehrmals auf <em>STRG-F</em>, so werden die
-    verschiedenen Suchmodi ausgewählt. Bei der direkten Suche
-    springt man mit <em>STRG-F</em> zum nächsten Treffer.</p>
-
-    <p><em>STRG-SHIFT-F</em> öffnet oder aktiviert den
-    Suchdialog und wählt die direkte Suche aus. Bei der
-    direkten Suche springt man mit <em>STRG-SHIFT-F</em> ebenfalls
-    zum nächsten Treffer.</p>
-
-    <h2>Direkte Suche</h2>
-
-    <p>Bei der direkten Suche sucht das Programm
-    sofort, sobald Sie einen Buchstaben eingeben. Die Statuszeile
-    informiert Sie über den Sucherfolg. Mit den
-    Tastaturkürzeln wird das Programm dazu veranlasst, nach
-    dem nächsten Vorkommen des aktuellen Suchbegriffs zu
-    suchen. Falls es keine weiteren Vorkommen gibt, informiert die
-    Statuszeile sie darüber. Bei erneuter Wiederholung startet
-    die Suche vom Anfang der Datei. Die Suchreihenfolge richtet
-    sich nach der aktuellen Sortierung Ihrer Datei. Um die direkte
-    Suche zu verlassen, drücken Sie ESC oder klicken Sie auf
-    "Zurücksetzen".</p>
-
-    <h2>Normale Suche</h2>
-
-    <p>Hierbei sucht das Programm nach allen
-    Vorkommen der Wörter ihres Suchausdrucks, sobald Sie ENTER
-    drücken. Nur Einträge, die alle Wörter
-    enthalten, gelten als Treffer. Um nach festen Ausdrücken
-    zu suchen, müssen Sie die Wörter in doppelte
-    Anführungszeichen einfassen. Zum Beispiel findet die
-    Suchanfrage <b>progress "marine acquaculture"</b>
-    Einträge, die sowohl das wort "progress" als auch den
-    Ausdruck "marine acquaculture" aufweisen. Alle Einträge,
-    die keine Treffer sind, werden entweder ausgeblendet, so dass
-    nur die Treffer sichtbar sind (Option <b>Filter</b>), oder sie
-    werden grau dargestellt, während die Treffer oben
-    angezeigt werden (Option <b>Oben einsortieren</b>). Um die
-    Trefferanzeige zu beenden, drücken Sie ESC oder klicken
-    auf die Schaltfläche <b>Zurücksetzen</b> im
-    Suchen-Dialog.</p>
-
-    <h2><a name="advanced"
-       id="advanced">Feldbezeichner und logische
-       Operatoren</a></h2>
-
-       <p>Um nur einige bestimmte Felder zu
-       durchsuchen und/oder logische Operatoren im Suchbegriff zu
-       benutzen, wird eine spezielle Syntax zur Verfügung
-       gestellt. Um beispielsweise nach Einträgen mit dem
-       Autor "Miller" zu suchen, geben Sie</p>
-
-    <p>author = miller</p>
-
-    <p>in das Suchfeld ein (Achtung! Das funktioniert nicht bei der
-    direkten Suche!). Falls der Suchbegriff Leerzeichen
-    enthält, schließen Sie ihn in Anführungszeichen
-    ein. Benutzen Sie <i>nie</i> Leerzeichen in dem Feldbezeichner.
-    Um beispielsweise nach Einträgen über Karl den
-    Großen zu suchen, geben Sie folgendes ein:</p>
-
-    <p>title|keywords = "Karl der Große"</p>
-
-    <p>Sie können "and", "or", "not" und Klammern
-    verwenden:</p>
-
-    <p>(author = miller or title|keywords = "Karl der Große")
-    and not author = brown</p>
-
-    <p>... sucht nach Einträgen, in denen entweder der Autor
-    "Miller" heißt oder im title- oder keywords-Feld der
-    Begriff "Karl der Große" steht; gleichzeitig werden die
-    Einträge mit dem Autor "Brown" nicht angezeigt.</p>
-
-    <p>Das "="-Zeichen ist eigentlich eine Abkürzung für
-    "enthält" ("contains"). Wenn man nach genauen Treffern
-    suchen möchte, muss man "==" oder "matches"
-    ("übereinstimmen") eingeben. "!=" sucht nach
-    Einträgen, bei denen der Suchbegriff <i>nicht</i>
-    enthalten ist. Die Auswahl von Feldern, die durchsucht werden
-    sollen (benötigte, optionale, allgemeine Felder), wird
-    ignoriert, wenn man im Suchausdruck Feldbezeichner verwendet.
-    Um nach Einträgen eines bestimmten Typs zu suchen, gibt es
-    ein Pseudofeld namens "entrytype":</p>
-
-    <p>entrytype = thesis</p>
-
-    <p>… findet z.B. Einträge, deren Typ (wie in der
-    Spalte "Entrytype" dargestellt) das Wort "thesis" enthält
-    (z.B. "phdthesis" und "mastersthesis"). Ebenso erlaubt das
-    Pseudofeld "bibtexkey" die Suche nach BibTeX-Keys, z.B.:</p>
-
-    <p>bibtexkey = miller2005</p>
-
-    <h2>Suchoptionen</h2>
-
-    <p>Der <em>Einstellungen</em>-Knopf
-    öffnet ein Menü mit mehreren Optionen: das Beachten
-    von Groß- und Kleinschreibung, das Nutzen regulärer
-    Ausdrücke sowie das Auswählen der Suchergebnisse in
-    der Tabelle und das Hervorheben der einzelnen Suchwörter in dem
-    Editor sowie der Vorschau.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Suchfunktionen</h1>
+
+    <p><em>STRG-F</em> öffnet oder aktiviert den Suchdialog.
+    Drückt man mehrmals auf <em>STRG-F</em>, so werden die
+    verschiedenen Suchmodi ausgewählt. Bei der direkten Suche
+    springt man mit <em>STRG-F</em> zum nächsten Treffer.</p>
+
+    <p><em>STRG-SHIFT-F</em> öffnet oder aktiviert den
+    Suchdialog und wählt die direkte Suche aus. Bei der
+    direkten Suche springt man mit <em>STRG-SHIFT-F</em> ebenfalls
+    zum nächsten Treffer.</p>
+
+    <h2>Direkte Suche</h2>
+
+    <p>Bei der direkten Suche sucht das Programm
+    sofort, sobald Sie einen Buchstaben eingeben. Die Statuszeile
+    informiert Sie über den Sucherfolg. Mit den
+    Tastaturkürzeln wird das Programm dazu veranlasst, nach
+    dem nächsten Vorkommen des aktuellen Suchbegriffs zu
+    suchen. Falls es keine weiteren Vorkommen gibt, informiert die
+    Statuszeile sie darüber. Bei erneuter Wiederholung startet
+    die Suche vom Anfang der Datei. Die Suchreihenfolge richtet
+    sich nach der aktuellen Sortierung Ihrer Datei. Um die direkte
+    Suche zu verlassen, drücken Sie ESC oder klicken Sie auf
+    "Zurücksetzen".</p>
+
+    <h2>Normale Suche</h2>
+
+    <p>Hierbei sucht das Programm nach allen
+    Vorkommen der Wörter ihres Suchausdrucks, sobald Sie ENTER
+    drücken. Nur Einträge, die alle Wörter
+    enthalten, gelten als Treffer. Um nach festen Ausdrücken
+    zu suchen, müssen Sie die Wörter in doppelte
+    Anführungszeichen einfassen. Zum Beispiel findet die
+    Suchanfrage <b>progress "marine acquaculture"</b>
+    Einträge, die sowohl das wort "progress" als auch den
+    Ausdruck "marine acquaculture" aufweisen. Alle Einträge,
+    die keine Treffer sind, werden entweder ausgeblendet, so dass
+    nur die Treffer sichtbar sind (Option <b>Filter</b>), oder sie
+    werden grau dargestellt, während die Treffer oben
+    angezeigt werden (Option <b>Oben einsortieren</b>). Um die
+    Trefferanzeige zu beenden, drücken Sie ESC oder klicken
+    auf die Schaltfläche <b>Zurücksetzen</b> im
+    Suchen-Dialog.</p>
+
+    <h2><a name="advanced"
+       id="advanced">Feldbezeichner und logische
+       Operatoren</a></h2>
+
+       <p>Um nur einige bestimmte Felder zu
+       durchsuchen und/oder logische Operatoren im Suchbegriff zu
+       benutzen, wird eine spezielle Syntax zur Verfügung
+       gestellt. Um beispielsweise nach Einträgen mit dem
+       Autor "Miller" zu suchen, geben Sie</p>
+
+    <p>author = miller</p>
+
+    <p>in das Suchfeld ein (Achtung! Das funktioniert nicht bei der
+    direkten Suche!). Falls der Suchbegriff Leerzeichen
+    enthält, schließen Sie ihn in Anführungszeichen
+    ein. Benutzen Sie <i>nie</i> Leerzeichen in dem Feldbezeichner.
+    Um beispielsweise nach Einträgen über Karl den
+    Großen zu suchen, geben Sie folgendes ein:</p>
+
+    <p>title|keywords = "Karl der Große"</p>
+
+    <p>Sie können "and", "or", "not" und Klammern
+    verwenden:</p>
+
+    <p>(author = miller or title|keywords = "Karl der Große")
+    and not author = brown</p>
+
+    <p>... sucht nach Einträgen, in denen entweder der Autor
+    "Miller" heißt oder im title- oder keywords-Feld der
+    Begriff "Karl der Große" steht; gleichzeitig werden die
+    Einträge mit dem Autor "Brown" nicht angezeigt.</p>
+
+    <p>Das "="-Zeichen ist eigentlich eine Abkürzung für
+    "enthält" ("contains"). Wenn man nach genauen Treffern
+    suchen möchte, muss man "==" oder "matches"
+    ("übereinstimmen") eingeben. "!=" sucht nach
+    Einträgen, bei denen der Suchbegriff <i>nicht</i>
+    enthalten ist. Die Auswahl von Feldern, die durchsucht werden
+    sollen (benötigte, optionale, allgemeine Felder), wird
+    ignoriert, wenn man im Suchausdruck Feldbezeichner verwendet.
+    Um nach Einträgen eines bestimmten Typs zu suchen, gibt es
+    ein Pseudofeld namens "entrytype":</p>
+
+    <p>entrytype = thesis</p>
+
+    <p>… findet z.B. Einträge, deren Typ (wie in der
+    Spalte "Entrytype" dargestellt) das Wort "thesis" enthält
+    (z.B. "phdthesis" und "mastersthesis"). Ebenso erlaubt das
+    Pseudofeld "bibtexkey" die Suche nach BibTeX-Keys, z.B.:</p>
+
+    <p>bibtexkey = miller2005</p>
+
+    <h2>Suchoptionen</h2>
+
+    <p>Der <em>Einstellungen</em>-Knopf
+    öffnet ein Menü mit mehreren Optionen: das Beachten
+    von Groß- und Kleinschreibung, das Nutzen regulärer
+    Ausdrücke sowie das Auswählen der Suchergebnisse in
+    der Tabelle und das Hervorheben der einzelnen Suchwörter in dem
+    Editor sowie der Vorschau.</p>
+</body>
+</html>
diff --git a/src/help/de/ShortIntegrityCheck.html b/src/help/de/ShortIntegrityCheck.html
index 8875d07..83b3a89 100644
--- a/src/help/de/ShortIntegrityCheck.html
+++ b/src/help/de/ShortIntegrityCheck.html
@@ -1,9 +1,9 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<body>
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <p>Die Integritätsprüfung überprüft alle Einträge auf deren Gültigkeit und versucht Fehler aufzudecken. Mit dem "Überprüfen" Button kann der Vorgang gestartet werden.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body>
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <p>Die Integritätsprüfung überprüft alle Einträge auf deren Gültigkeit und versucht Fehler aufzudecken. Mit dem "Überprüfen" Button kann der Vorgang gestartet werden.</p>
+
+</body>
+</html>
diff --git a/src/help/de/StringEditorHelp.html b/src/help/de/StringEditorHelp.html
index 537bab7..fd61afb 100644
--- a/src/help/de/StringEditorHelp.html
+++ b/src/help/de/StringEditorHelp.html
@@ -1,58 +1,58 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Der String-Editor</h1>
-
-    <p><em>Zugriff über das Menü
-    <b>BibTeX -> Strings bearbeiten</b> oder durch Klick auf die
-    Schaltfläche <b>Strings bearbeiten</b></em>.</p>
-
-    <p><em>Strings</em> sind das <em>BibTeX</em>-Äquivalent zu
-    Konstanten in einer Programmiersprache. Jeder String wird durch
-    einen eindeutigen <em>Namen</em> und einen <em>Inhalt</em>
-    festgelegt. Der Name kann an anderer Stelle in der Datei
-    benutzt werden, um den Inhalt wiederzugeben.</p>
-
-    <p>Ein Beispiel: Wenn viele Einträge aus einer Zeitschrift
-    stammen, deren Abkürzung schwer zu behalten ist, wie etwa
-    'J. Theor. Biol.' (Journal of Theroretical Biology),
-    könnte ein String mit dem Namen 'JTB' angelegt werden, um
-    den Namen der Zeitschrift zu repräsentieren. Statt nun in
-    jedem Eintrag den exakten Namen der Zeitschrift einzutragen,
-    genügt die Zeichenfolge <code>#JTB#</code> im Feld
-    <em>journal</em>, und es ist sichergestellt, dass der Name
-    jedesmal in identischer Schreibweise ausgegeben wird.</p>
-
-    <p>Der Verweis auf einen String kann an jeder Stelle eines
-    Feldes erscheinen, wobei der Name des Strings immer von einem
-    Paar '#'-Zeichen eingeschlossen werden muss. Diese Syntax gilt
-    nur für JabRef und weicht ein wenig von der
-    <em>BibTeX</em>-Syntax ab, die erzeugt wird, wenn Sie Ihre
-    Datei speichern. Strings können für alle
-    Standard-BibTeX-Felder verwendet werden. Unter <b>Optionen
-    -> Einstellungen -> Allgemein</b> können Sie im
-    Bereich <b>Datei</b> festlegen, ob Strings auch in
-    Nicht-Standard-Feldern benutzt werden dürfen. In diesem
-    Fall können Sie Felder bestimmen, die von der
-    Auflösung der Strings ausgenommen werden; hierbei wird
-    empfohlen, das Feld 'url' und andere Felder anzugeben, die das
-    Zeichen '#' enthalten können und die von BibTeX/LaTeX
-    abgearbeitet werden können.</p>
-
-    <p>In derselben Weise kann man auch im Inhalt eines Strings auf
-    einen anderen String verweisen, vorausgesetzt, dass der String,
-    auf den verwiesen wird, bereits <em>vorher</em> definiert
-    ist.</p>
-
-    <p>Während die Reihenfolge der Strings in Ihrer
-    BibTeX-Datei in einigen Fällen wichtig ist, brauchen Sie
-    sich bei der Benutzung von JabRef darüber keine Gedanken
-    zu machen. Die Strings werden in alphabetischer Reihenfolge im
-    String-Editor aufgelistet und in derselben Reihenfolge
-    gespeichert, außer wenn eine andere Reihenfolge von
-    BibTeX verlangt wird.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Der String-Editor</h1>
+
+    <p><em>Zugriff über das Menü
+    <b>BibTeX -> Strings bearbeiten</b> oder durch Klick auf die
+    Schaltfläche <b>Strings bearbeiten</b></em>.</p>
+
+    <p><em>Strings</em> sind das <em>BibTeX</em>-Äquivalent zu
+    Konstanten in einer Programmiersprache. Jeder String wird durch
+    einen eindeutigen <em>Namen</em> und einen <em>Inhalt</em>
+    festgelegt. Der Name kann an anderer Stelle in der Datei
+    benutzt werden, um den Inhalt wiederzugeben.</p>
+
+    <p>Ein Beispiel: Wenn viele Einträge aus einer Zeitschrift
+    stammen, deren Abkürzung schwer zu behalten ist, wie etwa
+    'J. Theor. Biol.' (Journal of Theroretical Biology),
+    könnte ein String mit dem Namen 'JTB' angelegt werden, um
+    den Namen der Zeitschrift zu repräsentieren. Statt nun in
+    jedem Eintrag den exakten Namen der Zeitschrift einzutragen,
+    genügt die Zeichenfolge <code>#JTB#</code> im Feld
+    <em>journal</em>, und es ist sichergestellt, dass der Name
+    jedesmal in identischer Schreibweise ausgegeben wird.</p>
+
+    <p>Der Verweis auf einen String kann an jeder Stelle eines
+    Feldes erscheinen, wobei der Name des Strings immer von einem
+    Paar '#'-Zeichen eingeschlossen werden muss. Diese Syntax gilt
+    nur für JabRef und weicht ein wenig von der
+    <em>BibTeX</em>-Syntax ab, die erzeugt wird, wenn Sie Ihre
+    Datei speichern. Strings können für alle
+    Standard-BibTeX-Felder verwendet werden. Unter <b>Optionen
+    -> Einstellungen -> Allgemein</b> können Sie im
+    Bereich <b>Datei</b> festlegen, ob Strings auch in
+    Nicht-Standard-Feldern benutzt werden dürfen. In diesem
+    Fall können Sie Felder bestimmen, die von der
+    Auflösung der Strings ausgenommen werden; hierbei wird
+    empfohlen, das Feld 'url' und andere Felder anzugeben, die das
+    Zeichen '#' enthalten können und die von BibTeX/LaTeX
+    abgearbeitet werden können.</p>
+
+    <p>In derselben Weise kann man auch im Inhalt eines Strings auf
+    einen anderen String verweisen, vorausgesetzt, dass der String,
+    auf den verwiesen wird, bereits <em>vorher</em> definiert
+    ist.</p>
+
+    <p>Während die Reihenfolge der Strings in Ihrer
+    BibTeX-Datei in einigen Fällen wichtig ist, brauchen Sie
+    sich bei der Benutzung von JabRef darüber keine Gedanken
+    zu machen. Die Strings werden in alphabetischer Reihenfolge im
+    String-Editor aufgelistet und in derselben Reihenfolge
+    gespeichert, außer wenn eine andere Reihenfolge von
+    BibTeX verlangt wird.</p>
+</body>
+</html>
diff --git a/src/help/de/TimeStampHelp.html b/src/help/de/TimeStampHelp.html
index 1242a63..da9797b 100644
--- a/src/help/de/TimeStampHelp.html
+++ b/src/help/de/TimeStampHelp.html
@@ -1,51 +1,51 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Zeitstempel</h1>
-
-    <p>Die Benutzung des Zeitstempels kann unter
-    <b>Einstellungen -> Allgemeines</b> an- und abgestellt sowie
-    verändert werden.</p>
-
-    <p>JabRef kann automatisch ein Feld setzen, das das Datum
-    enthält, an dem der Eintrag zur Datei hinzugefügt
-    wurde.</p>
-
-    <h2>Formatierung</h2>
-
-    <p>Die Formatierung des Zeitstempels wird von
-    einem Ausdruck mit Bezeichnern bestimmt, die die Position
-    verschiedener Bestandteile des Datums angeben.</p>
-
-    <p>Hier einige der verfügbaren Bezeichner (die Beispiele
-    in Klammern beziehen sich auf Mittwoch, den 14. September 2005,
-    17:45 Uhr):</p>
-
-    <ul>
-        <li><b>yy</b>: Jahr (05)</li>
-
-        <li><b>yyyy</b>: Jahr (2005)</li>
-
-        <li><b>MM</b>: Monat (09)</li>
-
-        <li><b>dd</b>: Tag (14)</li>
-
-        <li><b>HH</b>: Stunde (17)</li>
-
-        <li><b>mm</b>: Minute (45)</li>
-    </ul>Diese Bezeichner können mit Interpunktion und
-    Leerzeichen kombiniert werden. Hier einige Beispiele:
-
-    <ul>
-        <li><b>yyyy.MM.dd</b> ergibt <b>2005.09.14</b></li>
-
-        <li><b>yy.MM.dd</b> ergibt <b>05.09.14</b></li>
-
-        <li><b>yyyy.MM.dd HH:mm</b> ergibt <b>2005.09.14
-        17:45</b></li>
-    </ul>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Zeitstempel</h1>
+
+    <p>Die Benutzung des Zeitstempels kann unter
+    <b>Einstellungen -> Allgemeines</b> an- und abgestellt sowie
+    verändert werden.</p>
+
+    <p>JabRef kann automatisch ein Feld setzen, das das Datum
+    enthält, an dem der Eintrag zur Datei hinzugefügt
+    wurde.</p>
+
+    <h2>Formatierung</h2>
+
+    <p>Die Formatierung des Zeitstempels wird von
+    einem Ausdruck mit Bezeichnern bestimmt, die die Position
+    verschiedener Bestandteile des Datums angeben.</p>
+
+    <p>Hier einige der verfügbaren Bezeichner (die Beispiele
+    in Klammern beziehen sich auf Mittwoch, den 14. September 2005,
+    17:45 Uhr):</p>
+
+    <ul>
+        <li><b>yy</b>: Jahr (05)</li>
+
+        <li><b>yyyy</b>: Jahr (2005)</li>
+
+        <li><b>MM</b>: Monat (09)</li>
+
+        <li><b>dd</b>: Tag (14)</li>
+
+        <li><b>HH</b>: Stunde (17)</li>
+
+        <li><b>mm</b>: Minute (45)</li>
+    </ul>Diese Bezeichner können mit Interpunktion und
+    Leerzeichen kombiniert werden. Hier einige Beispiele:
+
+    <ul>
+        <li><b>yyyy.MM.dd</b> ergibt <b>2005.09.14</b></li>
+
+        <li><b>yy.MM.dd</b> ergibt <b>05.09.14</b></li>
+
+        <li><b>yyyy.MM.dd HH:mm</b> ergibt <b>2005.09.14
+        17:45</b></li>
+    </ul>
+</body>
+</html>
diff --git a/src/help/de/XMPHelp.html b/src/help/de/XMPHelp.html
index c72309d..42740d1 100644
--- a/src/help/de/XMPHelp.html
+++ b/src/help/de/XMPHelp.html
@@ -1,172 +1,172 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-
-<body text="#275856">
-    <basefont size="4" color="#2F4958" face="arial" />
-
-    <h1>Unterstützung von XMP-Metadaten in JabRef</h1>
-
-    <p>XMP ist ein Standard, der von Adobe Systems entwickelt
-    wurde, um Metadaten (Daten, die Informationen über andere
-    Daten enthalten) in Dateien zu speichern. Ein bekanntes
-    Beispiel für Metadaten sind ID3-Tags, die zur Beschreibung
-    von Künstlern, Albumtiteln und Liednamen einer MP3-Datei
-    verwendet werden. Mit Hilfe von Metadaten können
-    MP3-Dateien unabhängig von ihrem Dateinamen identifiziert
-    und z.B. von MP3-Playern ausgelesen und angezeigt werden.</p>
-
-    <p>Mit der XMP-Unterstützung versucht das JabRef-Team, die
-    Vorteile von Metadaten in die Welt der Literaturmanager
-    einzuführen. Sie können <b>XMP schreiben</b> im
-    <b>Allgemein</b>-Tab des Eintragseditors wählen und damit
-    alle BibTeX-Informationen in die verlinkte PDF-Datei schreiben.
-    Wenn Sie diese PDF-Datei mit anderen austauschen, können
-    diese die Datei in das JabRef-Fenster ziehen und haben damit
-    alle Informationen zur Verfügung, die Sie eingegeben
-    haben.</p>
-
-    <h2>Benutzung</h2>
-
-    <p>Um die XMP-Funktionen in JabRef zu nutzen,
-    gehen Sie folgendermaßen vor:</p>
-
-    <ul>
-        <li>Zum <i>Importieren einer einzelnen PDF-Datei mit
-        Metadaten</i> wählen Sie <b>Datei -> Importieren in
-        [neue|aktuelle] Datenbank</b> und im anschließenden
-        Dialog als Dateiformat <b>PDF mit XMP-Anmerkungen</b> aus.
-        Sie können die PDF-Datei stattdessen auch mit der Maus
-        auf das Hauptfenster von JabRef ziehen.</li>
-
-        <li>Um <i>bibliographische Informationen in eine verlinkte
-        PDF-Datei zu schreiben</i>, klicken Sie auf <b>XMP
-        schreiben</b> im <b>Allgemein</b>-Tab des
-        Eintragseditors.</li>
-
-        <li>Wenn Sie <i>alle PDFs einer Datei mit Metadaten
-        versehen</i> wollen, wählen Sie <b>Extras ->
-        XMP-Metadaten in PDFs schreiben</b>.</li>
-
-        <li>Um zu überprüfen, ob das Schreiben der
-        Metadaten funktioniert hat, öffnen Sie die Datei in
-        Adobe Acrobat und wählen <b>Datei ->
-        Dokumenteigenschaften</b> und dann unter dem Reiter
-        <b>Beschreibung</b> die Schaltfläche
-        <b>Zusätzliche Metadaten</b>. Wenn Sie links
-        "Erweitert" auswählen, sollten Sie im rechten Teil des
-        Dialogs einen Eintrag
-        "http://jabref.sourceforge.net/bibteXMP" sehen, der die
-        entsprechenden Metadaten enthält. Dies geht nur mit
-        dem Vollprogramm Adobe Acrobat, nicht mit dem Adobe
-        Reader.</li>
-
-        <li>Wer kein Adobe Acrobat zur Verfügung hat, kann
-        stattdessen das Programm <i>pdfinfo</i> verwenden, um die
-        XMP-Metadaten zu überprüfen. <i>pdfinfo</i> ist
-        Teil von Xpdf (<code>www.foolabs.com/xpdf</code>) und
-        Poppler (<code>http://poppler.freedesktop.org</code>).</li>
-    </ul>
-
-    <h2>BibteXmp Dateiformat</h2>
-
-    <p>XMP nutzt zum Speichern der Daten eine Teilmenge des
-    <i>Resource Description Framework</i> (RDF). Für JabRef
-    wird ein neues Metadatenformat benutzt, das BibTeX sehr gut
-    abbildet. Alle Felder und Werte werden in Knoten eines
-    XML-Dokuments verwandelt. Nur Autoren und Herausgeber werden
-    als rdf:Seq-Strukturen gespeichert, so dass die trennenden
-    'and's weggelassen werden können. Alle Strings und
-    crossrefs werden in den Metadaten aufgelöst.</p>
-
-    <p>Das folgende einfache Minimal-Schema wird benutzt:</p>
-
-    <ul>
-        <li>Der BibTeX-Key wird als <code>bibtexkey</code>
-        gespeichert.</li>
-
-        <li>Der Eintragstyp wird als <code>entrytype</code>
-        gespeichert.</li>
-
-        <li><code>author</code> und <code>editor</code> sind
-        kodiert als <code>rdf:Seq</code>s, wobei die einzelnen
-        Autoren und Herausgeber als <code>rdf:li</code>s
-        dargestellt werden.</li>
-
-        <li>Alle anderen Felder werden unter ihrem Feld-Namen
-        gespeichert.</li>
-    </ul><br />
-    <br />
-
-
-    <p>Es folgt ein Beispiel:</p>
-    <pre>
- at INPROCEEDINGS{CroAnnHow05,
-  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
-  title = {Effective work practices for floss development: A model and propositions},
-  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
-  year = {2005},
-  owner = {oezbek},
-  timestamp = {2006.05.29},
-  url = {http://james.howison.name/publications.html}
-}
-</pre>wird umgewandelt in
-    <pre>
-<rdf:Description xmlns:bibtex="http://jabref.sourceforge.net/bibteXMP/"
-    bibtex:bibtexkey="CroAnnHow05"
-    bibtex:year="2005"
-    bibtex:title="Effective work practices for floss development: A model and propositions"
-    bibtex:owner="oezbek"
-    bibtex:url="http://james.howison.name/publications.html"
-    bibtex:booktitle="Hawaii International Conference On System Sciences (HICSS)"
-    bibtex:timestamp="2006.05.29">
-        <bibtex:author>
-            <rdf:Seq>
-                <rdf:li>K. Crowston</rdf:li>
-                <rdf:li>H. Annabi</rdf:li>
-                <rdf:li>J. Howison</rdf:li>
-                <rdf:li>C. Masango</rdf:li>
-            </rdf:Seq>
-        </bibtex:author>
-    <bibtex:entrytype>Inproceedings</bibtex:entrytype>
-</rdf:Description>
-</pre>
-
-    <p>Beachten Sie die folgenden Warnungen, wenn Sie bibteXMP
-    parsen möchten:</p>
-
-    <ul>
-        <li>In RDF können Attribut-Wert-Paare auch als Knoten
-        wiedergegeben werden und vice versa.</li>
-    </ul><br />
-    <br />
-
-
-    <h2>Weiterführende Links</h2>
-
-    <p>Einige Links zu XMP und PDFs mit Anmerkungen (englisch):</p>
-
-    <ul>
-        <li><a href="http://freelancepropaganda.com/themp/">James
-        Howison's Blog "Themp---Managing Academic Papers like
-        MP3s"</a></li>
-
-        <li>
-        <a href="http://www.xml.com/pub/a/2004/09/22/xmp.html">XML.com-Artikel
-        zu XMP</a></li>
-
-		<li><a href="http://pdfbox.apache.org/">PDFBox</a> von der Apache Software Foundation
-		ist die von JabRef verwendete Java libraries zum Zugriff auf die PDFs und deren
-		Metadaten</li>
-
-        <li>
-        <a href="http://arstechnica.com/civis/viewtopic.php?f=19&t=408429">
-        Gute Diskussion bei ArsTechnica zum Management von
-        PDFs.</a></li>
-
-        <li>
-        <a href="http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart1.pdf">
-        Adobe XMP Spezifikation</a></li>
-    </ul><br />
-    <br />
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Unterstützung von XMP-Metadaten in JabRef</h1>
+
+    <p>XMP ist ein Standard, der von Adobe Systems entwickelt
+    wurde, um Metadaten (Daten, die Informationen über andere
+    Daten enthalten) in Dateien zu speichern. Ein bekanntes
+    Beispiel für Metadaten sind ID3-Tags, die zur Beschreibung
+    von Künstlern, Albumtiteln und Liednamen einer MP3-Datei
+    verwendet werden. Mit Hilfe von Metadaten können
+    MP3-Dateien unabhängig von ihrem Dateinamen identifiziert
+    und z.B. von MP3-Playern ausgelesen und angezeigt werden.</p>
+
+    <p>Mit der XMP-Unterstützung versucht das JabRef-Team, die
+    Vorteile von Metadaten in die Welt der Literaturmanager
+    einzuführen. Sie können <b>XMP schreiben</b> im
+    <b>Allgemein</b>-Tab des Eintragseditors wählen und damit
+    alle BibTeX-Informationen in die verlinkte PDF-Datei schreiben.
+    Wenn Sie diese PDF-Datei mit anderen austauschen, können
+    diese die Datei in das JabRef-Fenster ziehen und haben damit
+    alle Informationen zur Verfügung, die Sie eingegeben
+    haben.</p>
+
+    <h2>Benutzung</h2>
+
+    <p>Um die XMP-Funktionen in JabRef zu nutzen,
+    gehen Sie folgendermaßen vor:</p>
+
+    <ul>
+        <li>Zum <i>Importieren einer einzelnen PDF-Datei mit
+        Metadaten</i> wählen Sie <b>Datei -> Importieren in
+        [neue|aktuelle] Datenbank</b> und im anschließenden
+        Dialog als Dateiformat <b>PDF mit XMP-Anmerkungen</b> aus.
+        Sie können die PDF-Datei stattdessen auch mit der Maus
+        auf das Hauptfenster von JabRef ziehen.</li>
+
+        <li>Um <i>bibliographische Informationen in eine verlinkte
+        PDF-Datei zu schreiben</i>, klicken Sie auf <b>XMP
+        schreiben</b> im <b>Allgemein</b>-Tab des
+        Eintragseditors.</li>
+
+        <li>Wenn Sie <i>alle PDFs einer Datei mit Metadaten
+        versehen</i> wollen, wählen Sie <b>Extras ->
+        XMP-Metadaten in PDFs schreiben</b>.</li>
+
+        <li>Um zu überprüfen, ob das Schreiben der
+        Metadaten funktioniert hat, öffnen Sie die Datei in
+        Adobe Acrobat und wählen <b>Datei ->
+        Dokumenteigenschaften</b> und dann unter dem Reiter
+        <b>Beschreibung</b> die Schaltfläche
+        <b>Zusätzliche Metadaten</b>. Wenn Sie links
+        "Erweitert" auswählen, sollten Sie im rechten Teil des
+        Dialogs einen Eintrag
+        "http://jabref.sourceforge.net/bibteXMP" sehen, der die
+        entsprechenden Metadaten enthält. Dies geht nur mit
+        dem Vollprogramm Adobe Acrobat, nicht mit dem Adobe
+        Reader.</li>
+
+        <li>Wer kein Adobe Acrobat zur Verfügung hat, kann
+        stattdessen das Programm <i>pdfinfo</i> verwenden, um die
+        XMP-Metadaten zu überprüfen. <i>pdfinfo</i> ist
+        Teil von Xpdf (<code>www.foolabs.com/xpdf</code>) und
+        Poppler (<code>http://poppler.freedesktop.org</code>).</li>
+    </ul>
+
+    <h2>BibteXmp Dateiformat</h2>
+
+    <p>XMP nutzt zum Speichern der Daten eine Teilmenge des
+    <i>Resource Description Framework</i> (RDF). Für JabRef
+    wird ein neues Metadatenformat benutzt, das BibTeX sehr gut
+    abbildet. Alle Felder und Werte werden in Knoten eines
+    XML-Dokuments verwandelt. Nur Autoren und Herausgeber werden
+    als rdf:Seq-Strukturen gespeichert, so dass die trennenden
+    'and's weggelassen werden können. Alle Strings und
+    crossrefs werden in den Metadaten aufgelöst.</p>
+
+    <p>Das folgende einfache Minimal-Schema wird benutzt:</p>
+
+    <ul>
+        <li>Der BibTeX-Key wird als <code>bibtexkey</code>
+        gespeichert.</li>
+
+        <li>Der Eintragstyp wird als <code>entrytype</code>
+        gespeichert.</li>
+
+        <li><code>author</code> und <code>editor</code> sind
+        kodiert als <code>rdf:Seq</code>s, wobei die einzelnen
+        Autoren und Herausgeber als <code>rdf:li</code>s
+        dargestellt werden.</li>
+
+        <li>Alle anderen Felder werden unter ihrem Feld-Namen
+        gespeichert.</li>
+    </ul><br />
+    <br />
+
+
+    <p>Es folgt ein Beispiel:</p>
+    <pre>
+ at INPROCEEDINGS{CroAnnHow05,
+  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
+  title = {Effective work practices for floss development: A model and propositions},
+  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
+  year = {2005},
+  owner = {oezbek},
+  timestamp = {2006.05.29},
+  url = {http://james.howison.name/publications.html}
+}
+</pre>wird umgewandelt in
+    <pre>
+<rdf:Description xmlns:bibtex="http://jabref.sourceforge.net/bibteXMP/"
+    bibtex:bibtexkey="CroAnnHow05"
+    bibtex:year="2005"
+    bibtex:title="Effective work practices for floss development: A model and propositions"
+    bibtex:owner="oezbek"
+    bibtex:url="http://james.howison.name/publications.html"
+    bibtex:booktitle="Hawaii International Conference On System Sciences (HICSS)"
+    bibtex:timestamp="2006.05.29">
+        <bibtex:author>
+            <rdf:Seq>
+                <rdf:li>K. Crowston</rdf:li>
+                <rdf:li>H. Annabi</rdf:li>
+                <rdf:li>J. Howison</rdf:li>
+                <rdf:li>C. Masango</rdf:li>
+            </rdf:Seq>
+        </bibtex:author>
+    <bibtex:entrytype>Inproceedings</bibtex:entrytype>
+</rdf:Description>
+</pre>
+
+    <p>Beachten Sie die folgenden Warnungen, wenn Sie bibteXMP
+    parsen möchten:</p>
+
+    <ul>
+        <li>In RDF können Attribut-Wert-Paare auch als Knoten
+        wiedergegeben werden und vice versa.</li>
+    </ul><br />
+    <br />
+
+
+    <h2>Weiterführende Links</h2>
+
+    <p>Einige Links zu XMP und PDFs mit Anmerkungen (englisch):</p>
+
+    <ul>
+        <li><a href="http://freelancepropaganda.com/themp/">James
+        Howison's Blog "Themp---Managing Academic Papers like
+        MP3s"</a></li>
+
+        <li>
+        <a href="http://www.xml.com/pub/a/2004/09/22/xmp.html">XML.com-Artikel
+        zu XMP</a></li>
+
+		<li><a href="http://pdfbox.apache.org/">PDFBox</a> von der Apache Software Foundation
+		ist die von JabRef verwendete Java libraries zum Zugriff auf die PDFs und deren
+		Metadaten</li>
+
+        <li>
+        <a href="http://arstechnica.com/civis/viewtopic.php?f=19&t=408429">
+        Gute Diskussion bei ArsTechnica zum Management von
+        PDFs.</a></li>
+
+        <li>
+        <a href="http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart1.pdf">
+        Adobe XMP Spezifikation</a></li>
+    </ul><br />
+    <br />
+</body>
+</html>
diff --git a/src/help/de/jgoodies.html b/src/help/de/jgoodies.html
index 4170aab..7c15cb4 100644
--- a/src/help/de/jgoodies.html
+++ b/src/help/de/jgoodies.html
@@ -1,46 +1,46 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>JGoodies</h1>
-
-    Copyright (c) 2003 JGoodies Karsten Lentzsch. All Rights
-    Reserved. 
-
-    <p>Redistribution and use in source and binary forms, with or
-    without modification, are permitted provided that the following
-    conditions are met:</p>
-
-    <ul>
-        <li>Redistributions of source code must retain the above
-        copyright notice, this list of conditions and the following
-        disclaimer.</li>
-
-        <li>Redistributions in binary form must reproduce the above
-        copyright notice, this list of conditions and the following
-        disclaimer in the documentation and/or other materials
-        provided with the distribution.</li>
-
-        <li>Neither the name of JGoodies Karsten Lentzsch nor the
-        names of its contributors may be used to endorse or promote
-        products derived from this software without specific prior
-        written permission.</li>
-    </ul>
-
-    <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-    CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
-    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-    EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>JGoodies</h1>
+
+    Copyright (c) 2003 JGoodies Karsten Lentzsch. All Rights
+    Reserved. 
+
+    <p>Redistribution and use in source and binary forms, with or
+    without modification, are permitted provided that the following
+    conditions are met:</p>
+
+    <ul>
+        <li>Redistributions of source code must retain the above
+        copyright notice, this list of conditions and the following
+        disclaimer.</li>
+
+        <li>Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials
+        provided with the distribution.</li>
+
+        <li>Neither the name of JGoodies Karsten Lentzsch nor the
+        names of its contributors may be used to endorse or promote
+        products derived from this software without specific prior
+        written permission.</li>
+    </ul>
+
+    <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+    CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+    EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
+</body>
+</html>
diff --git a/src/help/fr/ACMPortalHelp.html b/src/help/fr/ACMPortalHelp.html
index aba0278..d183586 100644
--- a/src/help/fr/ACMPortalHelp.html
+++ b/src/help/fr/ACMPortalHelp.html
@@ -1,41 +1,41 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Récupération d'entrées depuis le portail <em>ACM</em></h1>
-
-    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> Recherche Web</b>.
-    L'interface de recherche apparaitra dans le panneau latéral. Sélectionnez
-    <b>ACM Portal</b> dans le menu déroulant.</p>    
-    
-    <p>Pour démarrer la recherche, entrer les mots de votre requête et appuyer sur 
-    <b>Entrée</b> ou sur le bouton <b>Rechercher</b>.</p>
-    
-    <p>Le portail ACM inclut deux bases de données : le bibliothèque numérique ACM ("ACM Digital Library")
-    qui est la collection complète de tous les articles publiés par ACM, incluant plus de 50 ans d'archives, et
-    le Guide sur la Littérature Informatique ("Guide to Computing Literature") qui est une collection
-    bibliographique provenant de grands éditeurs en informatique et contenant plus d'un million d'entrées.
-    </p>
-    
-    <p>Vous pouvez choisir la base de données sur laquelle portera la recherche.
-    Vous pouvez décider de télécharger les résumés
-    avec les autres informations de chaque entrée en validant la
-    case à cocher <b>Inclure les résumés</b>.</p>
-    
-    <p>Pour éviter de mettre une pression excessive sur le site internet du
-    portail ACM, JabRef refusera de télécharger
-    plus qu'un certain nombre d'entrées.</p>
-
-    <p>À ce moment, des connexions fréquentes au portail ACM vont causer
-    l'interdiction de votre adresse IP pour plusieurs heures. Aussi, JabRef attendra
-    5 secondes entre chaque connexion, et le processus de téléchargement
-    sera très lent.</p>
-
-    <p>Pour toute suggestion, envoyez s'il vous plaît
-    un courriel à Aaron Chen <b>nextAaron at gmail.com</b>.</p>    
-    
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Récupération d'entrées depuis le portail <em>ACM</em></h1>
+
+    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> Recherche Web</b>.
+    L'interface de recherche apparaitra dans le panneau latéral. Sélectionnez
+    <b>ACM Portal</b> dans le menu déroulant.</p>    
+    
+    <p>Pour démarrer la recherche, entrer les mots de votre requête et appuyer sur 
+    <b>Entrée</b> ou sur le bouton <b>Rechercher</b>.</p>
+    
+    <p>Le portail ACM inclut deux bases de données : le bibliothèque numérique ACM ("ACM Digital Library")
+    qui est la collection complète de tous les articles publiés par ACM, incluant plus de 50 ans d'archives, et
+    le Guide sur la Littérature Informatique ("Guide to Computing Literature") qui est une collection
+    bibliographique provenant de grands éditeurs en informatique et contenant plus d'un million d'entrées.
+    </p>
+    
+    <p>Vous pouvez choisir la base de données sur laquelle portera la recherche.
+    Vous pouvez décider de télécharger les résumés
+    avec les autres informations de chaque entrée en validant la
+    case à cocher <b>Inclure les résumés</b>.</p>
+    
+    <p>Pour éviter de mettre une pression excessive sur le site internet du
+    portail ACM, JabRef refusera de télécharger
+    plus qu'un certain nombre d'entrées.</p>
+
+    <p>À ce moment, des connexions fréquentes au portail ACM vont causer
+    l'interdiction de votre adresse IP pour plusieurs heures. Aussi, JabRef attendra
+    5 secondes entre chaque connexion, et le processus de téléchargement
+    sera très lent.</p>
+
+    <p>Pour toute suggestion, envoyez s'il vous plaît
+    un courriel à Aaron Chen <b>nextAaron at gmail.com</b>.</p>    
+    
+</body>
+</html>
diff --git a/src/help/fr/About.html b/src/help/fr/About.html
index 298088d..5e388d0 100644
--- a/src/help/fr/About.html
+++ b/src/help/fr/About.html
@@ -1,154 +1,154 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body id="aboutpage">
-
-        <h1>JabRef version @version@</h1>
-
-        <div id="logo">
-        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
-        </div>
-
-        <p>JabRef est librement distribuable selon les termes de la
-        GNU <a href="../License.html">General Public License</a>,
-        version 2.</p>
-        
-        <p>JabRef est un logiciel libre : vous pouvez le rédistribuer
-        et/ou le modifier selon les termes de la GNU
-        <a href="../License.html">General Public License</a>
-        tels que publiés par la Free Software Foundation, 
-        soit en version 2 de cette License, soit (à votre choix)
-        dans n'importe quelle version ultérieure.</p>
-        
-        <h2>Développeurs :</h2>
-
-        <p>Morten O. Alver,
-        Nizar N. Batada,
-        Michel Baylac,
-        Kolja Brix,
-        Guillaume Gardey,
-        Oscar Gustafsson,
-        Cyrille d'Haese,
-        Oliver Kopp,
-        S M Mahbub Murshed,
-        Raik Nagel,
-        Christopher Oezbek,
-        Ellen Reitmayr,
-        Gert Renckens,
-        Andreas Rudert,
-        Michael Spiegel,
-        Ulrik Stervbo,
-        Joerg K. Wegner,
-        Michael Wrighton,
-        Egon Willighagen,
-        Jörg Zieren</p>
-
-        <h2>Contributions de :</h2>
-
-        <p>Thomas Arildsen,
-        Michael Beckmann,
-        Oliver Beckmann,
-        Fedor Bezrukov,
-        Fabian Bieker,
-        Aaron Chen,
-        Fabrice Dessaint,
-        Nathan Dunn,
-        E. Hakan Duran,
-        Brian Van Essen,
-        Alexis Gallagher,
-        David Gleich,
-        Sascha Hunold,
-        Bernd Kalbfuss,
-        Martin Kähmer,
-        Ervin Kolenovic,
-        Krzysztof A. Kościuszkiewicz,
-        Christian Kopf,
-        Felix Langner,
-        Stephan Lau,
-        Jeffrey Kuhn,
-        Alex Montgomery,
-        Saverio Mori,
-        Ambrogio Oliva,
-        Stephan Rave,
-        John Relph,
-        Hannes Restel,
-        Moritz Ringler,
-        Andreas Rudert,
-        Mark Schenk,
-        Rudolf Seemann,
-        Toralf Senger,
-        Manuel Siebeneicher,
-        Mike Smoot,
-        Ulrich Stärk,
-        Martin Stolle,
-        David Weitzman,
-        Seb Wills,
-        John Zedlewski</p>
-
-        <h2>Remerciements à :</h2>
-
-        <p>Samin Muhammad Ridwanul Karim,
-        Stefan Robert</p>
-
-        <h2>Logiciels tiers utilisés :</h2>
-
-        <p>JabRef
-        utilise JGoodies Looks 2.0.4 et JGoodies Forms 1.0.5
-        distribués par JGoodies
-        (<code>http://www.jgoodies.com</code>) selon les termes de
-        la License BSD (voir
-        <code>http://www.opensource.org/licenses/bsd-license.html</code>
-        pour plus de détails).</p>
-
-        <p>Deux classes additionnelles sont aussi incluses
-        (SimpleInternalFrame et UIFSplitPane), de Karsten Lentzsch,
-        qui sont distribuées sous
-        <a href="../jgoodies.html">ces termes</a>.</p>
-
-        <p>Les options de la ligne de commande sont traitées
-        en utilisant RitOpt
-        (<code>http://ritopt.sourceforge.net</code>). RitOpt est
-        distribuée selon les termes de la GNU
-        <a href="../License.html">General Public License</a>,
-        version 2 (ou ultérieure).</p>
-
-        <p>JabRef utilise le générateur d'analyseur
-        syntaxique ANTLR pour interpréter les chaînes
-        de recherche. ANTLR est un logiciel du domaine public -
-        voir <code>http://www.antlr.org/license.html</code> pour
-        les termes de la license.</p>
-
-        <p>Pour la présentation de la table et le filtrage,
-        JabRef utilise la bibliothèque Glazed Lists
-        (<code>http://publicobject.com/glazedlists</code>), qui est
-        distribuée sous la license "Lesser General Public
-        License".</p>
-
-        <p>JabRef utilise aussi la bibliothèque de threading
-        Spin 1.3.1, qui est distribuée selon les termes de
-        la Lesser GNU Public License.</p>
-
-       <p>Certains composants de l'interface graphique de la
-        bibliothèque Microba sont
-        utilisés. Elle est
-        distribuée sous une license de type
-        BSD. Voir
-        <code>http://sourceforge.net/projects/microba/</code> pour
-        plus d'informations.</p>
-
-        <p>La majorité des
-        icônes proviennent de l'ensemble
-        d'icônes Crystal Clear par Everaldo
-        (<code>http://www.everaldo.com</code>), qui est
-        distribuée sous les termes de la
-        Lesser General Public License.</p>
-
-        <p>JabRef utilise les bibliothèques FontBox, JempBox et
-        PDFBox pour gérer et manipuler les PDF. Elles sont
-	distribuées sous licence Apache. Voir 
-        <code>http://pdfbox.apache.org</code> pour plus d'informations.</p>
-
-</body>
-</html> 
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body id="aboutpage">
+
+        <h1>JabRef version @version@</h1>
+
+        <div id="logo">
+        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
+        </div>
+
+        <p>JabRef est librement distribuable selon les termes de la
+        GNU <a href="../License.html">General Public License</a>,
+        version 2.</p>
+        
+        <p>JabRef est un logiciel libre : vous pouvez le rédistribuer
+        et/ou le modifier selon les termes de la GNU
+        <a href="../License.html">General Public License</a>
+        tels que publiés par la Free Software Foundation, 
+        soit en version 2 de cette License, soit (à votre choix)
+        dans n'importe quelle version ultérieure.</p>
+        
+        <h2>Développeurs :</h2>
+
+        <p>Morten O. Alver,
+        Nizar N. Batada,
+        Michel Baylac,
+        Kolja Brix,
+        Guillaume Gardey,
+        Oscar Gustafsson,
+        Cyrille d'Haese,
+        Oliver Kopp,
+        S M Mahbub Murshed,
+        Raik Nagel,
+        Christopher Oezbek,
+        Ellen Reitmayr,
+        Gert Renckens,
+        Andreas Rudert,
+        Michael Spiegel,
+        Ulrik Stervbo,
+        Joerg K. Wegner,
+        Michael Wrighton,
+        Egon Willighagen,
+        Jörg Zieren</p>
+
+        <h2>Contributions de :</h2>
+
+        <p>Thomas Arildsen,
+        Michael Beckmann,
+        Oliver Beckmann,
+        Fedor Bezrukov,
+        Fabian Bieker,
+        Aaron Chen,
+        Fabrice Dessaint,
+        Nathan Dunn,
+        E. Hakan Duran,
+        Brian Van Essen,
+        Alexis Gallagher,
+        David Gleich,
+        Sascha Hunold,
+        Bernd Kalbfuss,
+        Martin Kähmer,
+        Ervin Kolenovic,
+        Krzysztof A. Kościuszkiewicz,
+        Christian Kopf,
+        Felix Langner,
+        Stephan Lau,
+        Jeffrey Kuhn,
+        Alex Montgomery,
+        Saverio Mori,
+        Ambrogio Oliva,
+        Stephan Rave,
+        John Relph,
+        Hannes Restel,
+        Moritz Ringler,
+        Andreas Rudert,
+        Mark Schenk,
+        Rudolf Seemann,
+        Toralf Senger,
+        Manuel Siebeneicher,
+        Mike Smoot,
+        Ulrich Stärk,
+        Martin Stolle,
+        David Weitzman,
+        Seb Wills,
+        John Zedlewski</p>
+
+        <h2>Remerciements à :</h2>
+
+        <p>Samin Muhammad Ridwanul Karim,
+        Stefan Robert</p>
+
+        <h2>Logiciels tiers utilisés :</h2>
+
+        <p>JabRef
+        utilise JGoodies Looks 2.0.4 et JGoodies Forms 1.0.5
+        distribués par JGoodies
+        (<code>http://www.jgoodies.com</code>) selon les termes de
+        la License BSD (voir
+        <code>http://www.opensource.org/licenses/bsd-license.html</code>
+        pour plus de détails).</p>
+
+        <p>Deux classes additionnelles sont aussi incluses
+        (SimpleInternalFrame et UIFSplitPane), de Karsten Lentzsch,
+        qui sont distribuées sous
+        <a href="../jgoodies.html">ces termes</a>.</p>
+
+        <p>Les options de la ligne de commande sont traitées
+        en utilisant RitOpt
+        (<code>http://ritopt.sourceforge.net</code>). RitOpt est
+        distribuée selon les termes de la GNU
+        <a href="../License.html">General Public License</a>,
+        version 2 (ou ultérieure).</p>
+
+        <p>JabRef utilise le générateur d'analyseur
+        syntaxique ANTLR pour interpréter les chaînes
+        de recherche. ANTLR est un logiciel du domaine public -
+        voir <code>http://www.antlr.org/license.html</code> pour
+        les termes de la license.</p>
+
+        <p>Pour la présentation de la table et le filtrage,
+        JabRef utilise la bibliothèque Glazed Lists
+        (<code>http://publicobject.com/glazedlists</code>), qui est
+        distribuée sous la license "Lesser General Public
+        License".</p>
+
+        <p>JabRef utilise aussi la bibliothèque de threading
+        Spin 1.3.1, qui est distribuée selon les termes de
+        la Lesser GNU Public License.</p>
+
+       <p>Certains composants de l'interface graphique de la
+        bibliothèque Microba sont
+        utilisés. Elle est
+        distribuée sous une license de type
+        BSD. Voir
+        <code>http://sourceforge.net/projects/microba/</code> pour
+        plus d'informations.</p>
+
+        <p>La majorité des
+        icônes proviennent de l'ensemble
+        d'icônes Crystal Clear par Everaldo
+        (<code>http://www.everaldo.com</code>), qui est
+        distribuée sous les termes de la
+        Lesser General Public License.</p>
+
+        <p>JabRef utilise les bibliothèques FontBox, JempBox et
+        PDFBox pour gérer et manipuler les PDF. Elles sont
+	distribuées sous licence Apache. Voir 
+        <code>http://pdfbox.apache.org</code> pour plus d'informations.</p>
+
+</body>
+</html> 
diff --git a/src/help/fr/Autosave.html b/src/help/fr/Autosave.html
index 968c3d5..ff1cf2b 100644
--- a/src/help/fr/Autosave.html
+++ b/src/help/fr/Autosave.html
@@ -1,23 +1,23 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <p>La fonction de sauvegarde automatique aide à prévenir la perte de données si votre ordinateur ou JabRef plante.
-    Quand la sauvegarde automatique est activée, JabRef vérifie régulièrement (à un intervalle de temps configurable)
-    si l'une de vos bases a été modifiée depuis votre dernier enregistrement. Si c'est le cas,
-    JabRef créera une copie de la base dans un fichier nommé <code>.$[fichier]$</code>,
-    où <code>[fichier]</code> est le nom de fichier de la base en question. Le fichier de sauvegarde automatique
-    se trouve dans le même répertoire que le fichier bib.</p>
-    <p>Le fichier de sauvegarde automatique sera effacé dès que vous enregistrerez la base, ainsi qui si vous
-    quittez normalement JabRef. Cependant, si JabRef se ferme à cause d'un plantage, le fichier de sauvegarde automatique
-    persistera. Dans ce cas, il sera détecté la prochaine fois que vous essayerez d'ouvrir la base, et on vous proposera
-    alors de récupérer la base à partir du fichier de sauvegarde automatique.</p>
-    <p>La sauvegarde automatique est activée par défaut, avec un intervalle de sauvegarde de 5 minutes. Si vous le voulez, vous
-    pouvez désactiver l'option vous demandant de confirmer la récupération de la base à partir du fichier de sauvegarde automatique.
-    Dans ce cas, JabRef récupérera la base directement, sans vous en informer.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <p>La fonction de sauvegarde automatique aide à prévenir la perte de données si votre ordinateur ou JabRef plante.
+    Quand la sauvegarde automatique est activée, JabRef vérifie régulièrement (à un intervalle de temps configurable)
+    si l'une de vos bases a été modifiée depuis votre dernier enregistrement. Si c'est le cas,
+    JabRef créera une copie de la base dans un fichier nommé <code>.$[fichier]$</code>,
+    où <code>[fichier]</code> est le nom de fichier de la base en question. Le fichier de sauvegarde automatique
+    se trouve dans le même répertoire que le fichier bib.</p>
+    <p>Le fichier de sauvegarde automatique sera effacé dès que vous enregistrerez la base, ainsi qui si vous
+    quittez normalement JabRef. Cependant, si JabRef se ferme à cause d'un plantage, le fichier de sauvegarde automatique
+    persistera. Dans ce cas, il sera détecté la prochaine fois que vous essayerez d'ouvrir la base, et on vous proposera
+    alors de récupérer la base à partir du fichier de sauvegarde automatique.</p>
+    <p>La sauvegarde automatique est activée par défaut, avec un intervalle de sauvegarde de 5 minutes. Si vous le voulez, vous
+    pouvez désactiver l'option vous demandant de confirmer la récupération de la base à partir du fichier de sauvegarde automatique.
+    Dans ce cas, JabRef récupérera la base directement, sans vous en informer.</p>
+</body>
+</html>
diff --git a/src/help/fr/BaseFrameHelp.html b/src/help/fr/BaseFrameHelp.html
index 538a661..d93c86b 100644
--- a/src/help/fr/BaseFrameHelp.html
+++ b/src/help/fr/BaseFrameHelp.html
@@ -1,151 +1,151 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>La fenêtre principale de
-    JabRef</h1>
-
-    <p><em>Note :</em> La plupart des menus dont il
-    est question dans les paragraphes suivants ont des raccourcis
-    claviers, et beaucoup sont accessibles depuis la barre
-    d'outils. Les raccourcis clavier sont affichés dans les
-    menus déroulants.</p>
-
-    <p>Ceci est la fenêtre principale à partir de
-    laquelle vous travaillez avec vos bases de données. En
-    dessous de la barre de menus et de la barre d'outils se trouve
-    un panneau à onglets contenant un onglet pour chacune de
-    vos bases de données actuellement ouvertes. Quand vous
-    sélectionnez un de ces onglets, un tableau
-    apparaît, listant toutes les entrées de la base de
-    données, ainsi qu'une sélection configurable de
-    leurs champs.</p>
-
-    <ul>
-        <li>Vous décidez des champs affichés dans ce
-        tableau en cochant les champs que vous voulez voir dans la
-        fenêtre de dialogue
-        <strong>Préférences</strong>.</li>
-
-        <li>Pour éditer la valeur d'un champ,
-        double-cliquez sur la ligne que vous voulez modifiez. Vous
-        pouvez naviguer dans le tableau en utilisant les
-        flèches du clavier.</li>
-
-        <li>Le tableau est trié selon une série de
-            champs de votre choix. L'ordre de tri par défaut peut être
-        configuré dans <strong>Options ->
-        Préférences -> Table des
-        entrées</strong> mais pour changer plus rapidement cet
-        ordre, cliquez l'entête d'une colonne pour la
-        définir comme critère de tri principal, ou
-        inverser l'ordre du tri s'il est déjà
-        défini. Un clic supplémentaire
-        désélectionnera la colonne comme
-        critère de tri. Maintenez la touche <b>CONTROL</b>
-        enfoncée et cliquez sur un autre entête de
-        colonne pour l'ajouter, l'inverser ou l'enlever comme
-        critère de tri auxiliaire. Vous pouvez ajouter un
-        nombre arbitraire de critères auxiliaires, mais uniquement
-        trois niveaux seront mémorisés pour
-        le démarrage suivant de JabRef.</li>
-
-        <li>Vous pouvez ajuster la largeur des colonnes en faisant
-        glisser les limites entre les entêtes.</li>
-
-        <li>Dans la fenêtre de dialogue
-        <strong>Préférences</strong>, choisissez si
-        le tableau doit être redimensionné pour
-        s'ajuster à la fenêtre. Sélectionnez
-        cette option pour toujours voir l'ensemble du tableau, et
-        désélectionnez là pour permettre
-        l'affichage de plus d'informations.</li>
-
-        <li>
-            Les codes de couleurs vous aident à visualiser
-            l'état de votre base de données. Les
-            cellules sont colorées de la façon
-            suivante :
-
-            <ul>
-                <li>Une cellule <span style="color: red">rouge</span> dans
-                la colonne la plus à gauche signale une
-                entrée incomplète.</li>
-
-                <li>Une cellule <span style="color: #909000">jaune</span>
-                dans la colonne la plus à gauche signale une
-                entrée qui ne définit pas par
-                elle-même l'ensemble des champs requis, mais
-                qui contient un renvoi.</li>
-
-                <li>Une cellule <span style="color: blue">bleue</span>
-                correspond à un champ requis.</li>
-
-                <li>Une cellule <span style="color: green">verte</span>
-                correspond à un champ optionnel.</li>
-
-                <li>Une cellule sans couleur correspond à un
-                champ qui n'est pas utilisé par le programme
-                <em>BibTeX</em> pour ce type d'entrée. Le
-                champ peut cependant être édité
-                dans JabRef.</li>
-            </ul>
-        </li>
-
-        <li style="list-style: none">Les codes de couleurs peuvent
-        être modifiés dans la fenêtre de
-        dialogue <strong>Préférences</strong>.</li>
-    </ul>
-
-    <h2>Ajouter une nouvelle entrée</h2>
-
-    <p>Il y a plusieurs
-    façons d'ajouter une nouvelle entrée.
-    L'activation du menu <strong>BibTeX/ Nouvelle
-    entrée</strong> affiche une fenêtre de dialogue
-    où vous pouvez choisir le type d'entrée à
-    partir d'une liste. Pour éviter cette fenêtre de
-    dialogue, vous pouvez utilisez le menu <strong>BibTeX/ Nouvelle
-    entrée...</strong> ainsi que des raccourcis clavier pour
-    les types les plus courants.</p>
-
-    <p>Lorsqu'une nouvelle entrée est ajoutée, par
-    défaut,  l'<a href="EntryEditorHelp.html">éditeur
-    d'entrées</a> s'ouvre. Ce comportement peut être
-    modifié dans la fenêtre de dialogue
-    <strong>Préférences</strong>.</p>
-
-    <p><em>Note :</em> Nous vous recommandons fortement
-    d'apprendre les raccourcis clavier des types d'entrées
-    que vous utilisez le plus souvent, tel que CTRL-SHIFT-A pour
-    l'ajout d'une entrée <em>article</em>.</p>
-
-    <h2>Editer une entrée</h2>
-
-    <p>Pour ouvrir l'<a href="EntryEditorHelp.html">éditeur
-    d'entrées</a> sur une entrée existante,
-    double-cliquez simplement sur la ligne correspondant à
-    l'entrée (ou appuyez sur ENTREE après avoir
-    sélectionné l'entrée).</p>
-
-    <h2>Référencer une chaîne <em>BibTeX</em>
-    dans un champ</h2>
-
-    <p>Dans JabRef vous écrivez le contenu de
-    tous les champs de la même façon que dans un
-    éditeur de texte, à une exception
-    près : pour référencer une
-    chaîne, entourer le nom de la chaîne avec le
-    caractère #, tel que dans :<br />
-      '#jan# 1997',<br />
-    ce qui sera interprété comme la chaîne
-    nommée 'jan' suivie de '1997'.</p>
-
-    <p>Voir aussi : <a href="StringEditorHelp.html">Editeur de
-    chaîne</a>. </p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>La fenêtre principale de
+    JabRef</h1>
+
+    <p><em>Note :</em> La plupart des menus dont il
+    est question dans les paragraphes suivants ont des raccourcis
+    claviers, et beaucoup sont accessibles depuis la barre
+    d'outils. Les raccourcis clavier sont affichés dans les
+    menus déroulants.</p>
+
+    <p>Ceci est la fenêtre principale à partir de
+    laquelle vous travaillez avec vos bases de données. En
+    dessous de la barre de menus et de la barre d'outils se trouve
+    un panneau à onglets contenant un onglet pour chacune de
+    vos bases de données actuellement ouvertes. Quand vous
+    sélectionnez un de ces onglets, un tableau
+    apparaît, listant toutes les entrées de la base de
+    données, ainsi qu'une sélection configurable de
+    leurs champs.</p>
+
+    <ul>
+        <li>Vous décidez des champs affichés dans ce
+        tableau en cochant les champs que vous voulez voir dans la
+        fenêtre de dialogue
+        <strong>Préférences</strong>.</li>
+
+        <li>Pour éditer la valeur d'un champ,
+        double-cliquez sur la ligne que vous voulez modifiez. Vous
+        pouvez naviguer dans le tableau en utilisant les
+        flèches du clavier.</li>
+
+        <li>Le tableau est trié selon une série de
+            champs de votre choix. L'ordre de tri par défaut peut être
+        configuré dans <strong>Options ->
+        Préférences -> Table des
+        entrées</strong> mais pour changer plus rapidement cet
+        ordre, cliquez l'entête d'une colonne pour la
+        définir comme critère de tri principal, ou
+        inverser l'ordre du tri s'il est déjà
+        défini. Un clic supplémentaire
+        désélectionnera la colonne comme
+        critère de tri. Maintenez la touche <b>CONTROL</b>
+        enfoncée et cliquez sur un autre entête de
+        colonne pour l'ajouter, l'inverser ou l'enlever comme
+        critère de tri auxiliaire. Vous pouvez ajouter un
+        nombre arbitraire de critères auxiliaires, mais uniquement
+        trois niveaux seront mémorisés pour
+        le démarrage suivant de JabRef.</li>
+
+        <li>Vous pouvez ajuster la largeur des colonnes en faisant
+        glisser les limites entre les entêtes.</li>
+
+        <li>Dans la fenêtre de dialogue
+        <strong>Préférences</strong>, choisissez si
+        le tableau doit être redimensionné pour
+        s'ajuster à la fenêtre. Sélectionnez
+        cette option pour toujours voir l'ensemble du tableau, et
+        désélectionnez là pour permettre
+        l'affichage de plus d'informations.</li>
+
+        <li>
+            Les codes de couleurs vous aident à visualiser
+            l'état de votre base de données. Les
+            cellules sont colorées de la façon
+            suivante :
+
+            <ul>
+                <li>Une cellule <span style="color: red">rouge</span> dans
+                la colonne la plus à gauche signale une
+                entrée incomplète.</li>
+
+                <li>Une cellule <span style="color: #909000">jaune</span>
+                dans la colonne la plus à gauche signale une
+                entrée qui ne définit pas par
+                elle-même l'ensemble des champs requis, mais
+                qui contient un renvoi.</li>
+
+                <li>Une cellule <span style="color: blue">bleue</span>
+                correspond à un champ requis.</li>
+
+                <li>Une cellule <span style="color: green">verte</span>
+                correspond à un champ optionnel.</li>
+
+                <li>Une cellule sans couleur correspond à un
+                champ qui n'est pas utilisé par le programme
+                <em>BibTeX</em> pour ce type d'entrée. Le
+                champ peut cependant être édité
+                dans JabRef.</li>
+            </ul>
+        </li>
+
+        <li style="list-style: none">Les codes de couleurs peuvent
+        être modifiés dans la fenêtre de
+        dialogue <strong>Préférences</strong>.</li>
+    </ul>
+
+    <h2>Ajouter une nouvelle entrée</h2>
+
+    <p>Il y a plusieurs
+    façons d'ajouter une nouvelle entrée.
+    L'activation du menu <strong>BibTeX/ Nouvelle
+    entrée</strong> affiche une fenêtre de dialogue
+    où vous pouvez choisir le type d'entrée à
+    partir d'une liste. Pour éviter cette fenêtre de
+    dialogue, vous pouvez utilisez le menu <strong>BibTeX/ Nouvelle
+    entrée...</strong> ainsi que des raccourcis clavier pour
+    les types les plus courants.</p>
+
+    <p>Lorsqu'une nouvelle entrée est ajoutée, par
+    défaut,  l'<a href="EntryEditorHelp.html">éditeur
+    d'entrées</a> s'ouvre. Ce comportement peut être
+    modifié dans la fenêtre de dialogue
+    <strong>Préférences</strong>.</p>
+
+    <p><em>Note :</em> Nous vous recommandons fortement
+    d'apprendre les raccourcis clavier des types d'entrées
+    que vous utilisez le plus souvent, tel que CTRL-SHIFT-A pour
+    l'ajout d'une entrée <em>article</em>.</p>
+
+    <h2>Editer une entrée</h2>
+
+    <p>Pour ouvrir l'<a href="EntryEditorHelp.html">éditeur
+    d'entrées</a> sur une entrée existante,
+    double-cliquez simplement sur la ligne correspondant à
+    l'entrée (ou appuyez sur ENTREE après avoir
+    sélectionné l'entrée).</p>
+
+    <h2>Référencer une chaîne <em>BibTeX</em>
+    dans un champ</h2>
+
+    <p>Dans JabRef vous écrivez le contenu de
+    tous les champs de la même façon que dans un
+    éditeur de texte, à une exception
+    près : pour référencer une
+    chaîne, entourer le nom de la chaîne avec le
+    caractère #, tel que dans :<br />
+      '#jan# 1997',<br />
+    ce qui sera interprété comme la chaîne
+    nommée 'jan' suivie de '1997'.</p>
+
+    <p>Voir aussi : <a href="StringEditorHelp.html">Editeur de
+    chaîne</a>. </p>
+</body>
+</html>
diff --git a/src/help/fr/BibtexHelp.html b/src/help/fr/BibtexHelp.html
index 02c2b87..0614be7 100644
--- a/src/help/fr/BibtexHelp.html
+++ b/src/help/fr/BibtexHelp.html
@@ -1,310 +1,310 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>A propos de <em>BibTeX</em></h1>
-
-    <p>JabRef vous aide à
-    travailler avec vos bases de données <em>BibTeX</em>,
-    mais certaines règles doivent être gardées
-    à l'esprit lorsque vous éditez vos entrées
-    afin d'obtenir un traitement correct de vos bases de
-    données par le programme <em>BibTeX</em>.</p>
-
-    <h2>Les champs <em>BibTeX</em></h2>
-
-    <p>Il y a un grand nombre de
-    champs possibles dans <em>BibTeX</em>, et quelques champs en
-    plus que vous pouvez paramétrer dans JabRef.</p>
-
-    <p>Généralement, vous pouvez utiliser des
-    commandes LaTeX à l'intérieur de champs contenant
-    du texte. <em>BibTeX</em> formatera automatiquement vos listes
-    de références et les champs qui sont inclus dans
-    ces listes seront mis en majuscules/minuscules selon votre
-    style bibliographique. Pour être certain que certains
-    caractères restent en majuscules, encadrez-les par des
-    accolades, comme dans le mot {B}elgique.</p>
-
-    <p>Notes à propos de certains types de champs :</p>
-
-    <ul>
-        <li><strong style="font-style: italic;">Bibtexkey</strong>
-        C'est une chaîne unique utilisée pour
-        référencer l'entrée dans les documents
-        LaTeX. Notez que lorsque vous référencez une
-        entrée dans LaTeX, la clef doit respecter la casse
-        (majuscules/minuscules) de la chaîne de
-        référence.<br /></li>
-
-        <li><strong>address<br /></strong> Habituellement l'adresse
-        de l'<tt>éditeur commercial</tt> ("publisher" en
-        anglais) ou d'un autre type d'institution. Pour les
-        principales maisons d'édition, van Leunen
-        recommande d'omettre complètement cette information.
-        Pour les petites maisons d'édition, d'un autre
-        coté, vous pouvez aider le lecteur en donnant
-        l'adresse complète.</li>
-
-        <li><strong>annote<br /></strong> Une annotation. Ce champ
-        n'est pas utilisé par les styles bibliographiques
-        standards, mais peut être utilisé par d'autres
-        styles qui produisent une bibliographie
-        annotée.</li>
-
-        <li><strong>author<br /></strong> Ce champ doit contenir la
-        liste complète des auteurs de votre entrée.
-        Les noms sont séparés par le mot
-        <em>and</em>, même si il y a plus de deux auteurs.
-        Chaque nom peut être écrit dans deux formes
-        équivalentes :<br />
-         Donald E. Knuth <em>ou</em> Knuth, Donald E.<br />
-         Eddie van Halen <em>ou</em> van Halen, Eddie<br />
-         La seconde forme devrait être utilisée pour
-        les auteurs ayants plus de deux noms afin de
-        différencier les seconds prénoms et les noms
-        de famille [NDT: pas sur de la traduction...].<br />
-        <br /></li>
-
-        <li><strong>booktitle<br /></strong> Titre d'un livre, dont
-        une partie est citée. Pour les entrées du
-        type "book", utilisez le champ <tt>title</tt>.</li>
-
-        <li><strong>chapter<br /></strong> Un numéro de
-        chapitre (ou de partie, ou d'autre chose).</li>
-
-        <li><strong>crossref<br /></strong> La clef de
-        l'entrée vers laquelle on effectue le renvoi.</li>
-
-        <li><strong>edition<br /></strong> Le numéro
-        d'édition d'un livre -- par exemple
-        "Troisième". Cela doit être un nombre, et la
-        première lettre doit être capitalisée,
-        comme montré ici ; les styles standards la
-        convertisse en minuscule si nécessaire.</li>
-
-        <li><strong>editor<br /></strong> Ce champ est analogue au
-        champ <em>author</em>. Il permet d'indiquer le nom des
-        éditeurs scientifiques, coordonateurs, etc.</li>
-
-        <li><strong>howpublished<br /></strong> Comment quelque
-        chose de non-standard a été publiée.
-        Le premier mot prend une majuscule.</li>
-
-        <li><strong>institution<br /></strong> L'institution ayant
-        promue un rapport technique.</li>
-
-        <li><strong>journal<br /></strong> Un nom de journal. Le
-        nom d'un journal peut être abrégé en
-        utilisant une "chaîne". Pour définir une
-        chaîne, utilisez
-        <a href="StringEditorHelp.html">l'éditeur de
-        chaînes</a>.</li>
-
-        <li><strong>key<br /></strong> utilisé pour
-        alphabétiser, renvoyer et créer une
-        étiquette quand l'information sur "author" est
-        manquante. Ce champ ne doit pas être confondu avec la
-        clef qui est fournie dans la commande <code>\cite</code> et
-        au début de l'entrée.</li>
-
-        <li><strong>month<br /></strong> Le mois au cours duquel le
-        travail a été publié ou, pour un
-        travail non publié, au cours duquel il a
-        été écrit. Vous devriez utiliser
-        l'abréviation standard à trois lettres (jan,
-        feb, mar, apr, may, jun, jul, aug, sep, oct, nov,
-        dec).</li>
-
-        <li><strong>note<br /></strong> Toute information
-        additionnelle qui peut aider le lecteur. Le premier mot
-        doit prendre une majuscule.</li>
-
-        <li><strong>number</strong><br />
-        Le numéro d'un journal, d'un magazine, d'un rapport
-        technique ou d'un travail dans une série. Les
-        journaux et les magazines sont habituellement
-        identifiés par leur volume et leur
-        numéro ; l'organisation qui publie un rapport
-        technique lui donne en général un
-        numéro ; et parfois les livres portent des
-        numéros lorsqu'ils appartiennent à une
-        série nommée.</li>
-
-        <li><strong>organization<br /></strong> L'organisation
-        ayant promue une conférence ou qui publie un
-        manuel.</li>
-
-        <li><strong>pages<br /></strong> Un ou plusieurs
-        numéros de page, ou une gamme de numéros, tel
-        que <tt>42-111</tt> ou <tt>7,41,73-97</tt> ou <tt>43+</tt>
-        (le `<tt>+</tt>' dans le dernier exemple indique des pages
-        suivantes qui ne sont pas dans un ordre simple). Pour
-        garder facilement la compatibilité avec les bases de
-        données compatibles <em>Scribe</em>, les styles
-        standards convertissent le tiret simple (comme dans
-        <tt>7-33</tt>) en un tiret double utilisé par TeX
-        pour définir une gamme de nombres (comme dans
-        <tt>7-33</tt>).</li>
-
-        <li><strong>publisher<br /></strong> Le nom de
-        l'éditeur commercial.</li>
-
-        <li><strong>school<br /></strong> Le nom de l'école
-        où a été écrite une
-        thèse.</li>
-
-        <li><strong>series<br /></strong> Le nom d'une série
-        ou d'un ensemble de livres. Quand on cite un livre entier,
-        le champ <tt>title</tt> donne son titre et le champ
-        optionnel <tt>series</tt> donne le nom de la série
-        ou de l'ensemble de volumes dans lequel le livre est
-        publié.</li>
-
-        <li><strong>title<br /></strong> Le titre du travail. La
-        capitalisation dépend du style bibliographique et de
-        la langue utilisés. Pour les mots qui doivent
-        être capitalisés (tel un nom propre), mettre
-        le mot (ou sa première lettre) entre accolades.</li>
-
-        <li><strong>type<br /></strong> Le type de rapport
-        technique -- par exemple, "Note de recherche".</li>
-
-        <li><strong>volume<br /></strong> Le volume d'un journal ou
-        d'un livre en plusieurs tomes.</li>
-
-        <li><strong>year<br /></strong> L'année de
-        publication ou, pour un travail non publié,
-        l'année où il a été
-        écrit. Généralement, elle doit prendre
-        quatre chiffres, tel que <tt>1984</tt>, cependant les
-        styles standards peuvent gérer toute valeur de
-        <tt>year</tt> dont les quatre derniers caractères
-        sont des chiffres (hors caractères de ponctuation),
-        tel que `(autour de 1984)'. Ce champ est requis par la
-        plupart des types d'entrées.</li>
-    </ul><br />
-
-
-    <h2>Autres champs</h2>
-
-    <p>BibTeX est très populaire, et
-    beaucoup de gens l'ont utilisé pour stocker des
-    informations. Voici une liste de quelque uns des champs les
-    plus communs :</p>
-
-    <ul>
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        affiliation*</span><br /></strong> L'affiliation des
-        auteurs.<br />
-        <br /></li>
-
-        <li><strong>abstract<br /></strong> Le résumé
-        d'un travail.<br />
-        <br /></li>
-
-        <li><strong>doi<br /></strong> Le Digital Object Identifier
-        ("identifiant d'objet numérique") est l'identifiant
-        permanent donné à un document
-        numérique.<br />
-        <br /></li>
-
-        <li><strong>eid<br /></strong> L'Electronic IDentifier
-        ("identifiant électronique") est utilisé par
-        les journaux électroniques qui ont aussi une version
-        papier. Ce numéro remplace le nombre de pages et est
-        utilisé pour trouver un article dans un volume
-        imprimé. Il est parfois aussi appelé
-        <em>citation number</em>.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        contents*</span><br /></strong> La table des
-        matières<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        copyright*</span><br /></strong> Informations sur les
-        droits d'auteur (copyright).<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        ISBN*</span><br /></strong> L'"International Standard Book
-        Number".<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        ISSN*</span><br /></strong> L'"International Standard
-        Serial Number". Utilisé pour identifier un
-        journal.<br />
-        <br /></li>
-
-        <li><strong>keywords<br /></strong> Mots-clefs
-        utilisés pour la recherche, ou pour
-        annotation.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        language*</span><br /></strong> La langue du
-        document.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        location*</span><br /></strong> Une localisation
-        associée avec l'entrée, telle que la ville
-        où la conférence a eu lieu.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        LCCN*</span><br /></strong> Le "Library of Congress Control
-        Number". Champ parfois nommé
-        <tt>lib-congress</tt>.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        mrnumber*</span><br /></strong> Le numéro de
-        <i>Mathematical Reviews</i>.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        price*</span><br /></strong> Le prix du document.<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        size*</span><br /></strong> La taille physique d'un
-        travail.<br />
-        <br /></li>
-
-        <li><strong>URL<br /></strong> Le "WWW Uniform Resource
-        Locator" (adresse URL) qui pointe vers
-        l'élément référencé.
-        C'est souvent utilisé pour les rapports techniques
-        afin d'indiquer le site ftp où la source postscript
-        du rapport est localisée.</li>
-    </ul>
-
-    <h3>JuraBib</h3>
-
-    <ul>
-        <li><strong>urldate<br /></strong> La date de la
-        dernière visite de la page.</li>
-    </ul><br />
-     *) non supporté directement par JabRef<br />
-     <br />
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>A propos de <em>BibTeX</em></h1>
+
+    <p>JabRef vous aide à
+    travailler avec vos bases de données <em>BibTeX</em>,
+    mais certaines règles doivent être gardées
+    à l'esprit lorsque vous éditez vos entrées
+    afin d'obtenir un traitement correct de vos bases de
+    données par le programme <em>BibTeX</em>.</p>
+
+    <h2>Les champs <em>BibTeX</em></h2>
+
+    <p>Il y a un grand nombre de
+    champs possibles dans <em>BibTeX</em>, et quelques champs en
+    plus que vous pouvez paramétrer dans JabRef.</p>
+
+    <p>Généralement, vous pouvez utiliser des
+    commandes LaTeX à l'intérieur de champs contenant
+    du texte. <em>BibTeX</em> formatera automatiquement vos listes
+    de références et les champs qui sont inclus dans
+    ces listes seront mis en majuscules/minuscules selon votre
+    style bibliographique. Pour être certain que certains
+    caractères restent en majuscules, encadrez-les par des
+    accolades, comme dans le mot {B}elgique.</p>
+
+    <p>Notes à propos de certains types de champs :</p>
+
+    <ul>
+        <li><strong style="font-style: italic;">Bibtexkey</strong>
+        C'est une chaîne unique utilisée pour
+        référencer l'entrée dans les documents
+        LaTeX. Notez que lorsque vous référencez une
+        entrée dans LaTeX, la clef doit respecter la casse
+        (majuscules/minuscules) de la chaîne de
+        référence.<br /></li>
+
+        <li><strong>address<br /></strong> Habituellement l'adresse
+        de l'<tt>éditeur commercial</tt> ("publisher" en
+        anglais) ou d'un autre type d'institution. Pour les
+        principales maisons d'édition, van Leunen
+        recommande d'omettre complètement cette information.
+        Pour les petites maisons d'édition, d'un autre
+        coté, vous pouvez aider le lecteur en donnant
+        l'adresse complète.</li>
+
+        <li><strong>annote<br /></strong> Une annotation. Ce champ
+        n'est pas utilisé par les styles bibliographiques
+        standards, mais peut être utilisé par d'autres
+        styles qui produisent une bibliographie
+        annotée.</li>
+
+        <li><strong>author<br /></strong> Ce champ doit contenir la
+        liste complète des auteurs de votre entrée.
+        Les noms sont séparés par le mot
+        <em>and</em>, même si il y a plus de deux auteurs.
+        Chaque nom peut être écrit dans deux formes
+        équivalentes :<br />
+         Donald E. Knuth <em>ou</em> Knuth, Donald E.<br />
+         Eddie van Halen <em>ou</em> van Halen, Eddie<br />
+         La seconde forme devrait être utilisée pour
+        les auteurs ayants plus de deux noms afin de
+        différencier les seconds prénoms et les noms
+        de famille [NDT: pas sur de la traduction...].<br />
+        <br /></li>
+
+        <li><strong>booktitle<br /></strong> Titre d'un livre, dont
+        une partie est citée. Pour les entrées du
+        type "book", utilisez le champ <tt>title</tt>.</li>
+
+        <li><strong>chapter<br /></strong> Un numéro de
+        chapitre (ou de partie, ou d'autre chose).</li>
+
+        <li><strong>crossref<br /></strong> La clef de
+        l'entrée vers laquelle on effectue le renvoi.</li>
+
+        <li><strong>edition<br /></strong> Le numéro
+        d'édition d'un livre -- par exemple
+        "Troisième". Cela doit être un nombre, et la
+        première lettre doit être capitalisée,
+        comme montré ici ; les styles standards la
+        convertisse en minuscule si nécessaire.</li>
+
+        <li><strong>editor<br /></strong> Ce champ est analogue au
+        champ <em>author</em>. Il permet d'indiquer le nom des
+        éditeurs scientifiques, coordonateurs, etc.</li>
+
+        <li><strong>howpublished<br /></strong> Comment quelque
+        chose de non-standard a été publiée.
+        Le premier mot prend une majuscule.</li>
+
+        <li><strong>institution<br /></strong> L'institution ayant
+        promue un rapport technique.</li>
+
+        <li><strong>journal<br /></strong> Un nom de journal. Le
+        nom d'un journal peut être abrégé en
+        utilisant une "chaîne". Pour définir une
+        chaîne, utilisez
+        <a href="StringEditorHelp.html">l'éditeur de
+        chaînes</a>.</li>
+
+        <li><strong>key<br /></strong> utilisé pour
+        alphabétiser, renvoyer et créer une
+        étiquette quand l'information sur "author" est
+        manquante. Ce champ ne doit pas être confondu avec la
+        clef qui est fournie dans la commande <code>\cite</code> et
+        au début de l'entrée.</li>
+
+        <li><strong>month<br /></strong> Le mois au cours duquel le
+        travail a été publié ou, pour un
+        travail non publié, au cours duquel il a
+        été écrit. Vous devriez utiliser
+        l'abréviation standard à trois lettres (jan,
+        feb, mar, apr, may, jun, jul, aug, sep, oct, nov,
+        dec).</li>
+
+        <li><strong>note<br /></strong> Toute information
+        additionnelle qui peut aider le lecteur. Le premier mot
+        doit prendre une majuscule.</li>
+
+        <li><strong>number</strong><br />
+        Le numéro d'un journal, d'un magazine, d'un rapport
+        technique ou d'un travail dans une série. Les
+        journaux et les magazines sont habituellement
+        identifiés par leur volume et leur
+        numéro ; l'organisation qui publie un rapport
+        technique lui donne en général un
+        numéro ; et parfois les livres portent des
+        numéros lorsqu'ils appartiennent à une
+        série nommée.</li>
+
+        <li><strong>organization<br /></strong> L'organisation
+        ayant promue une conférence ou qui publie un
+        manuel.</li>
+
+        <li><strong>pages<br /></strong> Un ou plusieurs
+        numéros de page, ou une gamme de numéros, tel
+        que <tt>42-111</tt> ou <tt>7,41,73-97</tt> ou <tt>43+</tt>
+        (le `<tt>+</tt>' dans le dernier exemple indique des pages
+        suivantes qui ne sont pas dans un ordre simple). Pour
+        garder facilement la compatibilité avec les bases de
+        données compatibles <em>Scribe</em>, les styles
+        standards convertissent le tiret simple (comme dans
+        <tt>7-33</tt>) en un tiret double utilisé par TeX
+        pour définir une gamme de nombres (comme dans
+        <tt>7-33</tt>).</li>
+
+        <li><strong>publisher<br /></strong> Le nom de
+        l'éditeur commercial.</li>
+
+        <li><strong>school<br /></strong> Le nom de l'école
+        où a été écrite une
+        thèse.</li>
+
+        <li><strong>series<br /></strong> Le nom d'une série
+        ou d'un ensemble de livres. Quand on cite un livre entier,
+        le champ <tt>title</tt> donne son titre et le champ
+        optionnel <tt>series</tt> donne le nom de la série
+        ou de l'ensemble de volumes dans lequel le livre est
+        publié.</li>
+
+        <li><strong>title<br /></strong> Le titre du travail. La
+        capitalisation dépend du style bibliographique et de
+        la langue utilisés. Pour les mots qui doivent
+        être capitalisés (tel un nom propre), mettre
+        le mot (ou sa première lettre) entre accolades.</li>
+
+        <li><strong>type<br /></strong> Le type de rapport
+        technique -- par exemple, "Note de recherche".</li>
+
+        <li><strong>volume<br /></strong> Le volume d'un journal ou
+        d'un livre en plusieurs tomes.</li>
+
+        <li><strong>year<br /></strong> L'année de
+        publication ou, pour un travail non publié,
+        l'année où il a été
+        écrit. Généralement, elle doit prendre
+        quatre chiffres, tel que <tt>1984</tt>, cependant les
+        styles standards peuvent gérer toute valeur de
+        <tt>year</tt> dont les quatre derniers caractères
+        sont des chiffres (hors caractères de ponctuation),
+        tel que `(autour de 1984)'. Ce champ est requis par la
+        plupart des types d'entrées.</li>
+    </ul><br />
+
+
+    <h2>Autres champs</h2>
+
+    <p>BibTeX est très populaire, et
+    beaucoup de gens l'ont utilisé pour stocker des
+    informations. Voici une liste de quelque uns des champs les
+    plus communs :</p>
+
+    <ul>
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        affiliation*</span><br /></strong> L'affiliation des
+        auteurs.<br />
+        <br /></li>
+
+        <li><strong>abstract<br /></strong> Le résumé
+        d'un travail.<br />
+        <br /></li>
+
+        <li><strong>doi<br /></strong> Le Digital Object Identifier
+        ("identifiant d'objet numérique") est l'identifiant
+        permanent donné à un document
+        numérique.<br />
+        <br /></li>
+
+        <li><strong>eid<br /></strong> L'Electronic IDentifier
+        ("identifiant électronique") est utilisé par
+        les journaux électroniques qui ont aussi une version
+        papier. Ce numéro remplace le nombre de pages et est
+        utilisé pour trouver un article dans un volume
+        imprimé. Il est parfois aussi appelé
+        <em>citation number</em>.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        contents*</span><br /></strong> La table des
+        matières<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        copyright*</span><br /></strong> Informations sur les
+        droits d'auteur (copyright).<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        ISBN*</span><br /></strong> L'"International Standard Book
+        Number".<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        ISSN*</span><br /></strong> L'"International Standard
+        Serial Number". Utilisé pour identifier un
+        journal.<br />
+        <br /></li>
+
+        <li><strong>keywords<br /></strong> Mots-clefs
+        utilisés pour la recherche, ou pour
+        annotation.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        language*</span><br /></strong> La langue du
+        document.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        location*</span><br /></strong> Une localisation
+        associée avec l'entrée, telle que la ville
+        où la conférence a eu lieu.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        LCCN*</span><br /></strong> Le "Library of Congress Control
+        Number". Champ parfois nommé
+        <tt>lib-congress</tt>.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        mrnumber*</span><br /></strong> Le numéro de
+        <i>Mathematical Reviews</i>.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        price*</span><br /></strong> Le prix du document.<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        size*</span><br /></strong> La taille physique d'un
+        travail.<br />
+        <br /></li>
+
+        <li><strong>URL<br /></strong> Le "WWW Uniform Resource
+        Locator" (adresse URL) qui pointe vers
+        l'élément référencé.
+        C'est souvent utilisé pour les rapports techniques
+        afin d'indiquer le site ftp où la source postscript
+        du rapport est localisée.</li>
+    </ul>
+
+    <h3>JuraBib</h3>
+
+    <ul>
+        <li><strong>urldate<br /></strong> La date de la
+        dernière visite de la page.</li>
+    </ul><br />
+     *) non supporté directement par JabRef<br />
+     <br />
+</body>
+</html>
diff --git a/src/help/fr/CiteSeerHelp.html b/src/help/fr/CiteSeerHelp.html
index 7913909..aeaf601 100644
--- a/src/help/fr/CiteSeerHelp.html
+++ b/src/help/fr/CiteSeerHelp.html
@@ -1,25 +1,25 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Récupération d'entrées depuis CiteSeerX</h1>
-
-    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> Recherche Web</b>.
-    L'interface de recherche apparaitra dans le panneau latéral. Sélectionnez
-    <b>CiteSeerX</b> dans le menu déroulant.</p>    
-    
-    <p>CiteSeerX est une bibliothèque numérique évolutive de littérature
-        scientifique et un moteur de recherche se focalisant principalement
-        sur la littérature des sciences de l'information et de l'informatique.
-        CiteSeerx vise à améliorer la dissémination de la littérature
-        scientifique et à fournir des améliorations dans la fonctionnalité,
-        l'utilité, la disponibilité, le coût, la complétude, l'efficacité et
-        l'intemporalité de l'accès aux connaissances scientifiques et
-        savante.
-    </p>
-    
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Récupération d'entrées depuis CiteSeerX</h1>
+
+    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> Recherche Web</b>.
+    L'interface de recherche apparaitra dans le panneau latéral. Sélectionnez
+    <b>CiteSeerX</b> dans le menu déroulant.</p>    
+    
+    <p>CiteSeerX est une bibliothèque numérique évolutive de littérature
+        scientifique et un moteur de recherche se focalisant principalement
+        sur la littérature des sciences de l'information et de l'informatique.
+        CiteSeerx vise à améliorer la dissémination de la littérature
+        scientifique et à fournir des améliorations dans la fonctionnalité,
+        l'utilité, la disponibilité, le coût, la complétude, l'efficacité et
+        l'intemporalité de l'accès aux connaissances scientifiques et
+        savante.
+    </p>
+    
+</body>
+</html>
diff --git a/src/help/fr/CommandLine.html b/src/help/fr/CommandLine.html
index 40db062..7cf4e37 100644
--- a/src/help/fr/CommandLine.html
+++ b/src/help/fr/CommandLine.html
@@ -1,181 +1,181 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Les options de la ligne de commande</h1>
-
-    <p>Bien que JabRef
-    soit d'abord une application graphique, il offre plusieurs
-    options pour la ligne de commande qui peuvent être utiles
-    et qui peuvent réaliser des opérations de
-    conversion de fichiers sans avoir à ouvrir l'interface
-    graphique.</p>
-
-    <p>Vous pouvez spécifier le chargement d'un ou de
-    plusieurs fichiers BibTeX en indiquant simplement leurs noms.
-    Prenez la précaution de spécifier l'ensemble des
-    options avant la liste des fichiers. Vous devez toujours
-    vérifier que le premier nom de fichier ne sera pas
-    compris comme l'argument d'une option - cela veut simplement
-    dire que si une option de type logique comme <code>-n</code> ou
-    <code>-l</code> précède immédiatement un
-    nom de fichier, il faut ajouter le mot "true" comme argument.
-    Par exemple, la commande</p>
-
-    <p><code>jabref -o filetoexport.xml,docbook -n true
-    original.bib</code></p>
-
-    <p>va charger correctement le fichier <code>original.bib</code>
-    et l'exporter au format docbook dans le fichier
-    <code>filetoexport.xml</code> sans afficher l'interface
-    graphique. Le mot <em>true</em> évite que le nom de
-    fichier ne soit interpréter comme un argument de
-    l'option <code>-n</code></p>
-
-    <h2>Aide : -h</h2>
-
-    <p>Cette option demande à JabRef
-    d'afficher un résumé des options possibles avec
-    la ligne de commande et de quitter immédiatement.</p>
-
-    <h2>No-GUI mode : -n</h2>
-
-    <p>Cette option supprime le
-    lancement de l'interface graphique et du logo JabRef qui
-    apparaît normalement au démarrage de
-    l'application. Elle permet la sortie du programme
-    immédiatement après l'exécution des autres
-    options.</p>
-
-    <p>Cette option est quelque fois utile pour réaliser des
-    opérations de conversion à partir de la ligne de
-    commande ou dans un script.</p>
-
-    <h2>Chargement d'une session : -l</h2>
-
-    <p>Cette option demande
-    à JabRef de charger la session sauvegardée, si
-    elle existe, avant d'ouvrir la fenêtre principale.</p>
-
-    <h2>Importation de fichier : -i
-    nomdefichier[,format]</h2>
-
-    <p>Cette option demande à JabRef
-    d'importer ou de charger le fichier indiqué. Si on
-    n'indique que le nom du fichier, il est chargé comme un
-    fichier BibTeX. Si le fichier est suivi d'une virgule et d'un
-    format d'importation, le filtre d'importation correspondant est
-    utilisé. Utilisez l'option <code>-h</code> pour obtenir
-    la liste des formats d'importations disponibles.</p>
-
-    <p>Si une option de sortie est ajoutée, l'importation aura
-    toujours lieu avant et le fichier importé ou
-    chargé sera ensuite converti selon le format
-    d'exportation. Si l'interface graphique (GUI) n'est pas
-    supprimée avec l'option <code>-n</code>, les fichiers
-    importés ou chargés seront affichés dans
-    la fenêtre principale.</p>
-
-    <p>L'option <code>-i</code>  ne peut être
-    spécifiée qu'une seule fois et pour un seul
-    fichier.</p>
-
-    <h2>Exportation de fichier : -o
-    nomdefichier[,format]</h2>
-
-    <p>Cette option demande à JabRef
-    de sauvegarder ou d'exporter un fichier chargé ou
-    importé par la même commande ligne. Si le fichier
-    importé l'est via une option <code>-i</code>, alors la
-    base de données sera exportée. Autrement, le
-    fichier spécifié (et chargé avec
-    succès) sans l'option <code>-i</code> sera
-    exporté. </p>
-
-    <p>Si seul le nom du fichier est indiqué, il est
-    sauvegardé au format BibTeX. Si le fichier est suivi par
-    une virgule et un format d'exportation, le filtre d'exportation
-    demandé sera utilisé. Un filtre d'exportation
-    personnel peut ainsi être utilisé et sera
-    systématiquement préféré au style
-    d'exportation standard de même nom.</p>
-
-    <p>Utilisez l'option <code>-h</code> pour avoir la liste des
-    formats disponibles.</p>
-
-    <p>Si l'option <code>-n</code> n'a pas été
-    utilisée, les opérations d'exportation sont
-    faites avant l'ouverture de la fenêtre JabRef et la base
-    importée ou chargée sera présente dans la
-    fenêtre principale.</p>
-
-    <p>L'option <code>-o</code> ne peut être utilisée
-    qu'une seule fois et pour un seul fichier.</p>
-
-    <h2>Exportation des préférences : -x
-    nomdefichier</h2>
-
-    <p>Cette option indique à JabRef
-    d'exporter sous forme d'un fichier .xml, l'ensemble des
-    préférences de l'utilisateur. Après
-    l'exportation, JabRef est lancé normalement.</p>
-
-    <h2>Importation des préférences : -p
-    nomdefichier</h2>
-
-    <p>Cette option indique à JabRef
-    d'importer les préférences de l'utilisateur
-    préalablement exportées avec l'option
-    <code>-x</code>. Après l'importation, JabRef
-    démarre normalement.</p>
-
-
-    <h2>Exportation des entrées correspondantes : -m [field=]TermeDeRecherche,FichierDeSortie[,FormatExportation]</h2>
-    <p>JabRef enregistre toutes les entrées de la base correspondant à un terme de recherche donné dans un nouveau fichier.
-    Le format du fichier d'exportation peut être choisi, le format par défaut étant un tableau html (avec résumé
-    et BibTeX, fourni par tablerefsabsbib).
-    </p>
-    <p>Appel : <code>JabRef.jar -m [field=]TermeDeRecherche,FichierDeSortie[,FormatExportation] -n true FichierEntrée</code></p>
-    <p>Pour des informations sur la fonction de recherche, voyez l'aide sur la 'recherche avancée'.
-    De plus, il est aussi possible de recherche des entrées sur une période temporelle au lieu
-    de les rechercher uniquement pour une année donnée.</p>
-    <p>Notez que les termes de recherche contenant des espaces doivent être encadrés par des guillemets.</p>
-	<p>Exemples</p>
-	<ul>
-		<li> <code>Year=2005</code> </li>
-		<li> <code>title|keywords=Optimization</code> </li>
-		<li> <code>(author=bock or title|keywords="computer methods")and not(author=sager)</code> </li>
-		<li> <code>Year=1989-2005</code> </li>
-	</ul>
-
-    <h2>Exportation des entrées utilisées : -a
-    nomdefichier[.aux],nouvelleBaseBib[.bib]</h2>
-
-    <p>Il est quelques
-    fois utile d'avoir un fichier BibTeX qui ne contienne que les
-    références BibTeX utilisées. Une liste de
-    ces entrées utilisées est stockée dans un
-    fichier .aux. JabRef peut analyser ce fichier pour
-    générer un nouveau fichier BibTeX qui ne
-    contiendra que les entrées connues et utilisées.
-    Cela veut dire que si une entrée n'est pas
-    définie dans le fichier BibTeX courant, elle ne sera pas
-    intégrée dans le nouveau fichier.</p>
-    
-      <h2>Récupération par internet : --fetch==nom du récupérateur:chaîne d'interrogation</h2>
-
-    <p>Les récupérateurs dans le menu Recherche Internet peuvent aussi fonctionner
-    en ligne de commande. Utilisez l'option --fetch en précisant à la fois le nom du
-    récupérateur (par exemple ieee, medline ou jstor) et votre recherche (ou l'identité du
-    papier) ; le récupérateur sera lancé. Notez que certains récupérateurs continueront
-    d'afficher l'interface graphique s'ils nécessitent un retour de votre part. Pour obtenir
-    la liste des récupérateurs disponibles, lancez l'option --fetch sans paramètres.
-    </p>
-    
-    
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Les options de la ligne de commande</h1>
+
+    <p>Bien que JabRef
+    soit d'abord une application graphique, il offre plusieurs
+    options pour la ligne de commande qui peuvent être utiles
+    et qui peuvent réaliser des opérations de
+    conversion de fichiers sans avoir à ouvrir l'interface
+    graphique.</p>
+
+    <p>Vous pouvez spécifier le chargement d'un ou de
+    plusieurs fichiers BibTeX en indiquant simplement leurs noms.
+    Prenez la précaution de spécifier l'ensemble des
+    options avant la liste des fichiers. Vous devez toujours
+    vérifier que le premier nom de fichier ne sera pas
+    compris comme l'argument d'une option - cela veut simplement
+    dire que si une option de type logique comme <code>-n</code> ou
+    <code>-l</code> précède immédiatement un
+    nom de fichier, il faut ajouter le mot "true" comme argument.
+    Par exemple, la commande</p>
+
+    <p><code>jabref -o filetoexport.xml,docbook -n true
+    original.bib</code></p>
+
+    <p>va charger correctement le fichier <code>original.bib</code>
+    et l'exporter au format docbook dans le fichier
+    <code>filetoexport.xml</code> sans afficher l'interface
+    graphique. Le mot <em>true</em> évite que le nom de
+    fichier ne soit interpréter comme un argument de
+    l'option <code>-n</code></p>
+
+    <h2>Aide : -h</h2>
+
+    <p>Cette option demande à JabRef
+    d'afficher un résumé des options possibles avec
+    la ligne de commande et de quitter immédiatement.</p>
+
+    <h2>No-GUI mode : -n</h2>
+
+    <p>Cette option supprime le
+    lancement de l'interface graphique et du logo JabRef qui
+    apparaît normalement au démarrage de
+    l'application. Elle permet la sortie du programme
+    immédiatement après l'exécution des autres
+    options.</p>
+
+    <p>Cette option est quelque fois utile pour réaliser des
+    opérations de conversion à partir de la ligne de
+    commande ou dans un script.</p>
+
+    <h2>Chargement d'une session : -l</h2>
+
+    <p>Cette option demande
+    à JabRef de charger la session sauvegardée, si
+    elle existe, avant d'ouvrir la fenêtre principale.</p>
+
+    <h2>Importation de fichier : -i
+    nomdefichier[,format]</h2>
+
+    <p>Cette option demande à JabRef
+    d'importer ou de charger le fichier indiqué. Si on
+    n'indique que le nom du fichier, il est chargé comme un
+    fichier BibTeX. Si le fichier est suivi d'une virgule et d'un
+    format d'importation, le filtre d'importation correspondant est
+    utilisé. Utilisez l'option <code>-h</code> pour obtenir
+    la liste des formats d'importations disponibles.</p>
+
+    <p>Si une option de sortie est ajoutée, l'importation aura
+    toujours lieu avant et le fichier importé ou
+    chargé sera ensuite converti selon le format
+    d'exportation. Si l'interface graphique (GUI) n'est pas
+    supprimée avec l'option <code>-n</code>, les fichiers
+    importés ou chargés seront affichés dans
+    la fenêtre principale.</p>
+
+    <p>L'option <code>-i</code>  ne peut être
+    spécifiée qu'une seule fois et pour un seul
+    fichier.</p>
+
+    <h2>Exportation de fichier : -o
+    nomdefichier[,format]</h2>
+
+    <p>Cette option demande à JabRef
+    de sauvegarder ou d'exporter un fichier chargé ou
+    importé par la même commande ligne. Si le fichier
+    importé l'est via une option <code>-i</code>, alors la
+    base de données sera exportée. Autrement, le
+    fichier spécifié (et chargé avec
+    succès) sans l'option <code>-i</code> sera
+    exporté. </p>
+
+    <p>Si seul le nom du fichier est indiqué, il est
+    sauvegardé au format BibTeX. Si le fichier est suivi par
+    une virgule et un format d'exportation, le filtre d'exportation
+    demandé sera utilisé. Un filtre d'exportation
+    personnel peut ainsi être utilisé et sera
+    systématiquement préféré au style
+    d'exportation standard de même nom.</p>
+
+    <p>Utilisez l'option <code>-h</code> pour avoir la liste des
+    formats disponibles.</p>
+
+    <p>Si l'option <code>-n</code> n'a pas été
+    utilisée, les opérations d'exportation sont
+    faites avant l'ouverture de la fenêtre JabRef et la base
+    importée ou chargée sera présente dans la
+    fenêtre principale.</p>
+
+    <p>L'option <code>-o</code> ne peut être utilisée
+    qu'une seule fois et pour un seul fichier.</p>
+
+    <h2>Exportation des préférences : -x
+    nomdefichier</h2>
+
+    <p>Cette option indique à JabRef
+    d'exporter sous forme d'un fichier .xml, l'ensemble des
+    préférences de l'utilisateur. Après
+    l'exportation, JabRef est lancé normalement.</p>
+
+    <h2>Importation des préférences : -p
+    nomdefichier</h2>
+
+    <p>Cette option indique à JabRef
+    d'importer les préférences de l'utilisateur
+    préalablement exportées avec l'option
+    <code>-x</code>. Après l'importation, JabRef
+    démarre normalement.</p>
+
+
+    <h2>Exportation des entrées correspondantes : -m [field=]TermeDeRecherche,FichierDeSortie[,FormatExportation]</h2>
+    <p>JabRef enregistre toutes les entrées de la base correspondant à un terme de recherche donné dans un nouveau fichier.
+    Le format du fichier d'exportation peut être choisi, le format par défaut étant un tableau html (avec résumé
+    et BibTeX, fourni par tablerefsabsbib).
+    </p>
+    <p>Appel : <code>JabRef.jar -m [field=]TermeDeRecherche,FichierDeSortie[,FormatExportation] -n true FichierEntrée</code></p>
+    <p>Pour des informations sur la fonction de recherche, voyez l'aide sur la 'recherche avancée'.
+    De plus, il est aussi possible de recherche des entrées sur une période temporelle au lieu
+    de les rechercher uniquement pour une année donnée.</p>
+    <p>Notez que les termes de recherche contenant des espaces doivent être encadrés par des guillemets.</p>
+	<p>Exemples</p>
+	<ul>
+		<li> <code>Year=2005</code> </li>
+		<li> <code>title|keywords=Optimization</code> </li>
+		<li> <code>(author=bock or title|keywords="computer methods")and not(author=sager)</code> </li>
+		<li> <code>Year=1989-2005</code> </li>
+	</ul>
+
+    <h2>Exportation des entrées utilisées : -a
+    nomdefichier[.aux],nouvelleBaseBib[.bib]</h2>
+
+    <p>Il est quelques
+    fois utile d'avoir un fichier BibTeX qui ne contienne que les
+    références BibTeX utilisées. Une liste de
+    ces entrées utilisées est stockée dans un
+    fichier .aux. JabRef peut analyser ce fichier pour
+    générer un nouveau fichier BibTeX qui ne
+    contiendra que les entrées connues et utilisées.
+    Cela veut dire que si une entrée n'est pas
+    définie dans le fichier BibTeX courant, elle ne sera pas
+    intégrée dans le nouveau fichier.</p>
+    
+      <h2>Récupération par internet : --fetch==nom du récupérateur:chaîne d'interrogation</h2>
+
+    <p>Les récupérateurs dans le menu Recherche Internet peuvent aussi fonctionner
+    en ligne de commande. Utilisez l'option --fetch en précisant à la fois le nom du
+    récupérateur (par exemple ieee, medline ou jstor) et votre recherche (ou l'identité du
+    papier) ; le récupérateur sera lancé. Notez que certains récupérateurs continueront
+    d'afficher l'interface graphique s'ils nécessitent un retour de votre part. Pour obtenir
+    la liste des récupérateurs disponibles, lancez l'option --fetch sans paramètres.
+    </p>
+    
+    
+</body>
+</html>
diff --git a/src/help/fr/ContentSelectorHelp.html b/src/help/fr/ContentSelectorHelp.html
index a0a808e..0e69f2c 100644
--- a/src/help/fr/ContentSelectorHelp.html
+++ b/src/help/fr/ContentSelectorHelp.html
@@ -1,32 +1,32 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Sélecteur de contenu de champ</h1>
-
-    <p>Cette opération vous permet d'enregistrer une
-    sélection de mots et de phrases que vous utilisez
-    souvent dans votre base de données. Par défaut,
-    c'est possible avec les champs <em>Journal</em>,
-    <em>Author</em>, <em>Keywords</em> et <em>Publisher</em> mais
-    vous pouvez aussi ajouter des sélecteurs à
-    d'autres champs, en utilisant la partie supérieure de la
-    fenêtre <i>Gérer les sélecteurs</i> (menu
-    <strong>Outils --> Gérer les sélecteurs de
-    contenu</strong>).</p>
-
-    <p>La sélection des mots est spécifique à
-    la base de données et sauvegardée avec vos
-    références dans le fichier .bib.</p>
-
-    <p>Pour ajouter un nouveau mot, vous pouvez simplement
-    l'écrire dans la boite de sélection des mots et
-    appuyer sur la touche Enter. A partir de la fenêtre
-    <i>Gérer les sélecteurs</i>, vous pouvez aussi
-    supprimer les mots que vous avez ajoutés.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Sélecteur de contenu de champ</h1>
+
+    <p>Cette opération vous permet d'enregistrer une
+    sélection de mots et de phrases que vous utilisez
+    souvent dans votre base de données. Par défaut,
+    c'est possible avec les champs <em>Journal</em>,
+    <em>Author</em>, <em>Keywords</em> et <em>Publisher</em> mais
+    vous pouvez aussi ajouter des sélecteurs à
+    d'autres champs, en utilisant la partie supérieure de la
+    fenêtre <i>Gérer les sélecteurs</i> (menu
+    <strong>Outils --> Gérer les sélecteurs de
+    contenu</strong>).</p>
+
+    <p>La sélection des mots est spécifique à
+    la base de données et sauvegardée avec vos
+    références dans le fichier .bib.</p>
+
+    <p>Pour ajouter un nouveau mot, vous pouvez simplement
+    l'écrire dans la boite de sélection des mots et
+    appuyer sur la touche Enter. A partir de la fenêtre
+    <i>Gérer les sélecteurs</i>, vous pouvez aussi
+    supprimer les mots que vous avez ajoutés.</p>
+</body>
+</html>
diff --git a/src/help/fr/Contents.html b/src/help/fr/Contents.html
index 2e4ed10..597d8ae 100644
--- a/src/help/fr/Contents.html
+++ b/src/help/fr/Contents.html
@@ -1,81 +1,81 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Contenu de l'aide</h1>
-
-    <h2>Général</h2>
-    <ul>
-      <li><a href="HelpHelp.html">A propos de la fenêtre d'aide</a></li>
-      <li><a href="JabRefHelp.html">Informations générales</a></li>
-      <li><a href="BaseFrameHelp.html">La fenêtre principale de JabRef</a></li>
-      <li><a href="EntryEditorHelp.html">Éditeur d'entrées</a></li>
-      <li><a href="Autosave.html">Sauvegarde automatique</a></li>
-      <li><a href="SpecialFieldsHelp.html">Champs spéciaux</a></li>
-    </ul>
-
-    <h2>Champs</h2>
-    <ul>
-      <li><a href="BibtexHelp.html">Aide sur <em>BibTeX</em></a></li>
-      <li><a href="FileLinks.html">Liens de fichiers externes</a></li>
-      <li><a href="ExternalFiles.html">Liens PDF/PS/URL/DOI dans JabRef</a></li>
-      <li><a href="TimeStampHelp.html">Horodatage des entrées</a></li>
-      <li><a href="OwnerHelp.html">Le champ 'owner' (propriétaire)</a></li>
-      <li><a href="ContentSelectorHelp.html">Sélecteur de contenu de champ</a></li>
-      <li><a href="JournalAbbreviations.html">Abréviations de journaux</a></li>
-      <li><a href="SpecialFieldsHelp.html">Champs spéciaux</a></li>
-    </ul>
-
-    <h2>Recherche et tri des entrées</h2>
-    <ul>
-      <li><a href="GroupsHelp.html">Utilisation des <em>Groupes</em></a></li>
-      <li><a href="MarkingHelp.html">Étiqueter des entrées</a></li>
-      <li><a href="SearchHelp.html">Recherche dans JabRef</a></li>
-    </ul>
-
-    <h2>Configuration</h2>
-    <ul>
-      <li><a href="StringEditorHelp.html">Éditeur de chaînes</a></li>
-      <li><a href="DatabaseProperties.html">Propriétés de la base de données</a></li>
-      <li><a href="PreviewHelp.html">Configuration de l'aperçu des entrées</a></li>
-      <li><a href="LabelPatterns.html">Personnalisation du générateur de clefs BibTeX</a></li>
-      <li><a href="CustomEntriesHelp.html">Personnalisation des types d'entrées</a></li>
-      <li><a href="GeneralFields.html">Personnalisation des champs généraux</a></li>
-      <li><a href="Plugin.html">Etendre JabRef en utilisant des greffons</a></li>
-    </ul>
-
-    <h2>Importation/Exportation</h2>
-    <ul>
-      <li><a href="CustomExports.html">Filtres d'exportation personnalisés</a></li>
-      <li><a href="CustomImports.html">Filtres d'importation personnalisés</a></li>
-      <li><a href="ImportInspectionDialog.html">Fenêtre de vérification des importations</a></li>
-      <li><a href="EndNoteFilters.html">Filtres d'importation/exportation d'EndNote</a></li>
-      <li><a href="OpenOfficeIntegration.html">Utiliser JabRef avec OpenOffice.org ou LibreOffice</a></li>
-      <li><a href="ACMPortalHelp.html">Récupération d'entrées depuis le portail <em>ACM</em></a></li>
-      <li><a href="CiteSeerHelp.html">Récupération d'entrées depuis <em>CiteSeerX</em></a></li>
-      <li><a href="DiVAtoBibTeXHelp.html">Récupération d'entrées depuis <em>DiVA</em></a></li>
-      <li><a href="DOItoBibTeXHelp.html">Récupération d'entrées avec le convertisseur <em>DOI vers BibTeX</em></a></li>
-      <li><a href="GoogleScholarHelp.html">Récupération d'entrées depuis <em>Google Scholar</em></a></li>      
-      <li><a href="IEEEXploreHelp.html">Récupération d'entrées depuis <em>IEEExplore</em></a></li>
-      <li><a href="ISBNtoBibTeXHelp.html">Récupération d'entrées avec le convertisseur <em>ISBN vers BibTeX</em></a></li>
-      <li><a href="MedlineHelp.html">Récupération d'entrées depuis <em>Medline</em></a></li>
-      <li><a href="JSTOR.html">Récupération d'entrées depuis <em>JStor</em></a></li>
-      <li><a href="ScienceDirect.html">Récupération d'entrées depuis <em>ScienceDirect</em></a></li>
-      <li><a href="Spires.html">Récupération d'entrées depuis <em>Spires</em></a></li>
-      <li><a href="SQLExport.html">Exporter vers une base de données SQL externe</a></li>
-      <li><a href="XMPHelp.html">Support des métadonnées XMP dans JabRef</a></li>
-      <li><a href="CommandLine.html">Options de la ligne de commande</a></li>
-      <li><a href="RemoteHelp.html">Opérations à distance</a></li>
-    </ul>
-
-    <h2>Divers</h2>
-    <ul>
-      <li><a href="RevisionHistory.html">Historique des révisions (en anglais)</a></li>
-      <li><a href="About.html">About JabRef</a></li>
-    </ul>
-
-</body>
-</html> 
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Contenu de l'aide</h1>
+
+    <h2>Général</h2>
+    <ul>
+      <li><a href="HelpHelp.html">A propos de la fenêtre d'aide</a></li>
+      <li><a href="JabRefHelp.html">Informations générales</a></li>
+      <li><a href="BaseFrameHelp.html">La fenêtre principale de JabRef</a></li>
+      <li><a href="EntryEditorHelp.html">Éditeur d'entrées</a></li>
+      <li><a href="Autosave.html">Sauvegarde automatique</a></li>
+      <li><a href="SpecialFieldsHelp.html">Champs spéciaux</a></li>
+    </ul>
+
+    <h2>Champs</h2>
+    <ul>
+      <li><a href="BibtexHelp.html">Aide sur <em>BibTeX</em></a></li>
+      <li><a href="FileLinks.html">Liens de fichiers externes</a></li>
+      <li><a href="ExternalFiles.html">Liens PDF/PS/URL/DOI dans JabRef</a></li>
+      <li><a href="TimeStampHelp.html">Horodatage des entrées</a></li>
+      <li><a href="OwnerHelp.html">Le champ 'owner' (propriétaire)</a></li>
+      <li><a href="ContentSelectorHelp.html">Sélecteur de contenu de champ</a></li>
+      <li><a href="JournalAbbreviations.html">Abréviations de journaux</a></li>
+      <li><a href="SpecialFieldsHelp.html">Champs spéciaux</a></li>
+    </ul>
+
+    <h2>Recherche et tri des entrées</h2>
+    <ul>
+      <li><a href="GroupsHelp.html">Utilisation des <em>Groupes</em></a></li>
+      <li><a href="MarkingHelp.html">Étiqueter des entrées</a></li>
+      <li><a href="SearchHelp.html">Recherche dans JabRef</a></li>
+    </ul>
+
+    <h2>Configuration</h2>
+    <ul>
+      <li><a href="StringEditorHelp.html">Éditeur de chaînes</a></li>
+      <li><a href="DatabaseProperties.html">Propriétés de la base de données</a></li>
+      <li><a href="PreviewHelp.html">Configuration de l'aperçu des entrées</a></li>
+      <li><a href="LabelPatterns.html">Personnalisation du générateur de clefs BibTeX</a></li>
+      <li><a href="CustomEntriesHelp.html">Personnalisation des types d'entrées</a></li>
+      <li><a href="GeneralFields.html">Personnalisation des champs généraux</a></li>
+      <li><a href="Plugin.html">Etendre JabRef en utilisant des greffons</a></li>
+    </ul>
+
+    <h2>Importation/Exportation</h2>
+    <ul>
+      <li><a href="CustomExports.html">Filtres d'exportation personnalisés</a></li>
+      <li><a href="CustomImports.html">Filtres d'importation personnalisés</a></li>
+      <li><a href="ImportInspectionDialog.html">Fenêtre de vérification des importations</a></li>
+      <li><a href="EndNoteFilters.html">Filtres d'importation/exportation d'EndNote</a></li>
+      <li><a href="OpenOfficeIntegration.html">Utiliser JabRef avec OpenOffice.org ou LibreOffice</a></li>
+      <li><a href="ACMPortalHelp.html">Récupération d'entrées depuis le portail <em>ACM</em></a></li>
+      <li><a href="CiteSeerHelp.html">Récupération d'entrées depuis <em>CiteSeerX</em></a></li>
+      <li><a href="DiVAtoBibTeXHelp.html">Récupération d'entrées depuis <em>DiVA</em></a></li>
+      <li><a href="DOItoBibTeXHelp.html">Récupération d'entrées avec le convertisseur <em>DOI vers BibTeX</em></a></li>
+      <li><a href="GoogleScholarHelp.html">Récupération d'entrées depuis <em>Google Scholar</em></a></li>      
+      <li><a href="IEEEXploreHelp.html">Récupération d'entrées depuis <em>IEEExplore</em></a></li>
+      <li><a href="ISBNtoBibTeXHelp.html">Récupération d'entrées avec le convertisseur <em>ISBN vers BibTeX</em></a></li>
+      <li><a href="MedlineHelp.html">Récupération d'entrées depuis <em>Medline</em></a></li>
+      <li><a href="JSTOR.html">Récupération d'entrées depuis <em>JStor</em></a></li>
+      <li><a href="ScienceDirect.html">Récupération d'entrées depuis <em>ScienceDirect</em></a></li>
+      <li><a href="Spires.html">Récupération d'entrées depuis <em>Spires</em></a></li>
+      <li><a href="SQLExport.html">Exporter vers une base de données SQL externe</a></li>
+      <li><a href="XMPHelp.html">Support des métadonnées XMP dans JabRef</a></li>
+      <li><a href="CommandLine.html">Options de la ligne de commande</a></li>
+      <li><a href="RemoteHelp.html">Opérations à distance</a></li>
+    </ul>
+
+    <h2>Divers</h2>
+    <ul>
+      <li><a href="RevisionHistory.html">Historique des révisions (en anglais)</a></li>
+      <li><a href="About.html">About JabRef</a></li>
+    </ul>
+
+</body>
+</html> 
diff --git a/src/help/fr/CustomEntriesHelp.html b/src/help/fr/CustomEntriesHelp.html
index 078a484..50de1b5 100644
--- a/src/help/fr/CustomEntriesHelp.html
+++ b/src/help/fr/CustomEntriesHelp.html
@@ -1,108 +1,108 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Personnaliser les types d'entrées</h1>
-
-    <p>Pour accéder à cette fonction, cliquez sur le
-    menu <strong>Options --> Personnaliser les types
-    d'entrées</strong>.</p>
-
-    <p>Lors de la personnalisation d'un type d'entrée, vous
-    définissez à la fois son apparence dans
-    l'éditeur d'entrées et ce qui est
-    nécessaire pour que JabRef considère une
-    entrée comme complète. Vous pouvez aussi bien
-    changer les types d'entrée existants qu'en
-    définir de nouveaux.</p>
-
-    <p>Notez qu'aucune des modifications que vous effectuez dans
-    cette fenêtre ne sera stockée tant que vous
-    n'aurez pas cliqué sur <b>Apply</b> ou <b>OK</b>. Si
-    vous cliquez sur <b>Cancel</b> ou si vous fermez simplement la
-    fenêtre, les changements non-appliqués seront
-    perdus.</p>
-
-    <h2>Utiliser la fenêtre de personnalisation des
-    entrées</h2>
-
-    <p>La fenêtre de personnalisation des
-    entrées est divisée en 3 panneaux principaux. Le
-    panneau de gauche vous permet de sélectionner
-    l'entrée à modifier, et d'en ajouter de
-    nouvelles. Le panneau central est utilisé pour
-    paramétrer les champs requis du type d'entrée
-    sélectionné. Le panneau de droite est
-    utilisé pour paramétrer les champs optionnels du
-    type d'entrée sélectionné.</p>
-
-    <h3>Ajouter et supprimer des types d'entrées</h3>
-
-    <p>Les types d'entrées actuellement disponibles sont
-    listés dans le panneau de gauche. Lorsque vous
-    sélectionnez un type d'entrée, les autres
-    panneaux sont mis à jour afin d'afficher les champs
-    requis et optionnels pour ce type d'entrée.</p>
-
-    <p>Pour ajouter un nouveau type d'entrées, vous devez
-    entrer son nom dans le champ de texte situé sous la
-    liste des types et cliquer sur <b>Ajouter</b> Le nouveau type
-    d'entrées sera ajouté à la liste et
-    sélectionné pour pouvoir être
-    modifié.</p>
-
-    <p>Pour supprimer un type d'entrées personnalisé,
-    sélectionnez-le et cliquez sur <b>Supprimer</b>. Cette
-    opération n'est possible que pour les types
-    d'entrées personnalisés qui ne sont pas de
-    simples modifications des types standards. Il n'est pas
-    possible de supprimer les types standards.</p>
-
-    <p>Pour qu'un type standard modifié reprenne ses valeurs
-    par défaut, sélectionnez-le et cliquez sur
-    <b>Défaut</b>. Cette opération n'est possible que
-    pour les types d'entrées personnalisés qui
-    modifient un type standard.</p>
-
-    <h2>Editer les types d'entrées</h2>
-
-    <p>Quand un type
-    d'entrées est sélectionné, ses champs
-    requis et optionnels sont listés dans les panneaux du
-    centre et de droite. La méthode d'édition des
-    listes de champs est la même pour les champs requis et
-    optionnels.</p>
-
-    <p>Pour ajouter un nouveau champ, éditez le champ de
-    texte situé sous la liste, ou sélectionnez un nom
-    de champ à partir du menu déroulant, puis cliquez
-    sur <b>Ajouter</b>. Le nom du champ sélectionné
-    sera ajouté à la fin de la liste.</p>
-
-    <p>Pour supprimer un ou plusieurs champs,
-    sélectionnez-les dans la liste et cliquez sur
-    <b>Supprimer</b>.</p>
-
-    <p>Pour changer l'ordre des champs, sélectionner le nom
-    d'un champ et cliquer sur les boutons en forme de
-    flèches pour le déplacer vers le haut ou vers le
-    bas de la liste.</p> 
-    
-    <h3>Les champs et/ou </h3>
-    <p>Certains types d'entrées ont une condition et/ou
-    dans leurs champs requis. Par exemple, une entrée <em>book</em>
-    est complète quand au moins un des champs <em>author</em> ou
-    <em>editor</em> est rempli.
-    Pour indiquer une telle condition dans un type d'entrée
-    personnalisé, vous devez ajouter un champ nommé
-    par une série de champs alternatifs séparés
-    par des slashs (/), comme par exemple <em>author/editor</em>
-    pour indiquer la condition mentionnée ci-dessus
-    pour l'entrée de type <em>book</em>.</p>
-    
-    
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Personnaliser les types d'entrées</h1>
+
+    <p>Pour accéder à cette fonction, cliquez sur le
+    menu <strong>Options --> Personnaliser les types
+    d'entrées</strong>.</p>
+
+    <p>Lors de la personnalisation d'un type d'entrée, vous
+    définissez à la fois son apparence dans
+    l'éditeur d'entrées et ce qui est
+    nécessaire pour que JabRef considère une
+    entrée comme complète. Vous pouvez aussi bien
+    changer les types d'entrée existants qu'en
+    définir de nouveaux.</p>
+
+    <p>Notez qu'aucune des modifications que vous effectuez dans
+    cette fenêtre ne sera stockée tant que vous
+    n'aurez pas cliqué sur <b>Apply</b> ou <b>OK</b>. Si
+    vous cliquez sur <b>Cancel</b> ou si vous fermez simplement la
+    fenêtre, les changements non-appliqués seront
+    perdus.</p>
+
+    <h2>Utiliser la fenêtre de personnalisation des
+    entrées</h2>
+
+    <p>La fenêtre de personnalisation des
+    entrées est divisée en 3 panneaux principaux. Le
+    panneau de gauche vous permet de sélectionner
+    l'entrée à modifier, et d'en ajouter de
+    nouvelles. Le panneau central est utilisé pour
+    paramétrer les champs requis du type d'entrée
+    sélectionné. Le panneau de droite est
+    utilisé pour paramétrer les champs optionnels du
+    type d'entrée sélectionné.</p>
+
+    <h3>Ajouter et supprimer des types d'entrées</h3>
+
+    <p>Les types d'entrées actuellement disponibles sont
+    listés dans le panneau de gauche. Lorsque vous
+    sélectionnez un type d'entrée, les autres
+    panneaux sont mis à jour afin d'afficher les champs
+    requis et optionnels pour ce type d'entrée.</p>
+
+    <p>Pour ajouter un nouveau type d'entrées, vous devez
+    entrer son nom dans le champ de texte situé sous la
+    liste des types et cliquer sur <b>Ajouter</b> Le nouveau type
+    d'entrées sera ajouté à la liste et
+    sélectionné pour pouvoir être
+    modifié.</p>
+
+    <p>Pour supprimer un type d'entrées personnalisé,
+    sélectionnez-le et cliquez sur <b>Supprimer</b>. Cette
+    opération n'est possible que pour les types
+    d'entrées personnalisés qui ne sont pas de
+    simples modifications des types standards. Il n'est pas
+    possible de supprimer les types standards.</p>
+
+    <p>Pour qu'un type standard modifié reprenne ses valeurs
+    par défaut, sélectionnez-le et cliquez sur
+    <b>Défaut</b>. Cette opération n'est possible que
+    pour les types d'entrées personnalisés qui
+    modifient un type standard.</p>
+
+    <h2>Editer les types d'entrées</h2>
+
+    <p>Quand un type
+    d'entrées est sélectionné, ses champs
+    requis et optionnels sont listés dans les panneaux du
+    centre et de droite. La méthode d'édition des
+    listes de champs est la même pour les champs requis et
+    optionnels.</p>
+
+    <p>Pour ajouter un nouveau champ, éditez le champ de
+    texte situé sous la liste, ou sélectionnez un nom
+    de champ à partir du menu déroulant, puis cliquez
+    sur <b>Ajouter</b>. Le nom du champ sélectionné
+    sera ajouté à la fin de la liste.</p>
+
+    <p>Pour supprimer un ou plusieurs champs,
+    sélectionnez-les dans la liste et cliquez sur
+    <b>Supprimer</b>.</p>
+
+    <p>Pour changer l'ordre des champs, sélectionner le nom
+    d'un champ et cliquer sur les boutons en forme de
+    flèches pour le déplacer vers le haut ou vers le
+    bas de la liste.</p> 
+    
+    <h3>Les champs et/ou </h3>
+    <p>Certains types d'entrées ont une condition et/ou
+    dans leurs champs requis. Par exemple, une entrée <em>book</em>
+    est complète quand au moins un des champs <em>author</em> ou
+    <em>editor</em> est rempli.
+    Pour indiquer une telle condition dans un type d'entrée
+    personnalisé, vous devez ajouter un champ nommé
+    par une série de champs alternatifs séparés
+    par des slashs (/), comme par exemple <em>author/editor</em>
+    pour indiquer la condition mentionnée ci-dessus
+    pour l'entrée de type <em>book</em>.</p>
+    
+    
+</body>
+</html>
diff --git a/src/help/fr/CustomExports.html b/src/help/fr/CustomExports.html
index aed26ae..665d8dd 100644
--- a/src/help/fr/CustomExports.html
+++ b/src/help/fr/CustomExports.html
@@ -1,762 +1,762 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Filtres d'exportation personnalisés</h1>
-
-    <p>JabRef vous permet de définir et d'utiliser vos
-    propres filtres d'exportation de la même manière
-    que les filtres d'exportation standards. Un filtre
-    d'exportation est défini par un ou plusieurs <i>fichiers
-    gabarit</i> qui, avec l'aide d'un certain nombre de routines
-    internes de formatage, définissent le format des
-    fichiers exportés. Vos fichiers gabarit doivent
-    être préparés avec un éditeur de
-    texte à l'extérieur de JabRef.</p>
-
-    <h2>Ajout d'un filtre d'exportation personnalisé</h2>
-
-    <p>La seule obligation pour avoir un filtre d'exportation
-    valide est l'existence d'un fichier avec l'extension
-    <b>.layout</b>. Pour ajouter un nouveau filtre d'exportation,
-    on utilise le menu <b>Options -> Gérer les
-    exportations personnalisées</b>, et on clique sur
-    <b>Ajouter nouvelle</b>. Une nouvelle boite de dialogue
-    apparaît et vous permet de spécifier le nom du
-    nouveau filtre d'exportation (ce nom apparaîtra ensuite
-    comme l'un des choix du menu déroulant "Type de fichier"
-    de la fenêtre de dialogue affectée au menu
-    <b>Fichier -> Exporter</b> de la fenêtre principale de
-    JabRef), le chemin du fichier <b>.layout</b>, et l'extension de
-    fichier préférée par le filtre
-    d'exportation (c'est cette extension qui sera
-    suggérée dans la boite de dialogue lorsque le
-    filtre sera utilisé).</p>
-
-    <h2>Création d'un filtre d'exportation</h2>
-
-    <p>Pour voir des exemples de constitution de filtres
-    d'exportation, recherchez le répertoire contenant les
-    fichiers gabarit des filtres d'exportation standards sur notre
-    page de téléchargement.</p>
-
-    <h3>Les fichiers gabarit</h3>
-
-    <p>On suppose que l'on veut créer un filtre
-    d'exportation pour une sortie HTML.</p>
-
-    <p>Bien que le filtre d'exportation ne nécessite qu'un
-    seul fichier <b>.layout</b>, qui dans ce cas pourrait s'appeler
-    <i>html.layout</i>, vous pouvez désirer ajouter deux
-    autres fichiers appelés <i>html.begin.layout</i> et
-    <i>html.end.layout</i>. Le premier contient le début de
-    la sortie et le dernier la fin. JabRef recherche ces deux
-    fichiers quelque soit le fichier d'exportation utilisé
-    et, s'il les trouve, les recopie tel quel dans la sortie avant
-    et après l'écriture des entrées
-    individuelles.</p>
-
-    <p>Il faut noter que ces fichiers doivent être dans le
-    même répertoire que le fichier <i>html.layout</i>,
-    et que leur nom doit comporter <b>.begin</b> pour l'un et
-    <b>.end</b> pour l'autre.</p>
-
-    <p>Dans notre exemple de fichier d'exportation, cela pourrait
-    ressembler à</p>
-
-    <p><i>html.begin.layout</i> :<br />
-    <code><!DOCTYPE html><br/><html><br /> <body
-    style="color:#275856; font-family: Arial, sans-serif;"></code>
-    </p>
-
-    <p><i>html.end.layout</i> :<br />
-    <code></BODY><br /></HTML></code></p>
-
-    <p>Le fichier <i>html.layout</i> fournit le gabarit par
-    défaut pour l'exportation d'une seule entrée. Si
-    vous devez utiliser différents gabarits pour les
-    différentes entrées, vous pouvez le faire en
-    ajoutant des fichiers <b>.layout</b> spécifiques. Les
-    fichiers doivent aussi être dans le même
-    répertoire que le gabarit principal et ils sont
-    nommés en insérant <b>.entrytype</b> dans le nom
-    du fichier gabarit principal. Le nom de l'entrée doit
-    être en minuscules. Dans notre exemple, on peut vouloir
-    ajouter un gabarit différent pour les livres et cela se
-    fera via le fichier <i>html.book.layout</i>. Pour une
-    thèse, on ajoutera le fichier
-    <i>html.phdthesis.layout</i>. Ces fichiers sont similaires au
-    gabarit principal, si ce n'est qu'ils sont utilisés pour
-    des entrées spécifiques. A noter que le gabarit
-    général peut aisément être
-    créé suffisamment général pour
-    être utilisable avec la plupart des entrées dans
-    la majorité des filtres d'exportation.</p>
-
-    <h3>Le format des fichiers gabarit</h3>
-
-    <p>Les fichiers gabarit utilisent un simple langage de balisage
-    dans lequel les commandes sont identifiées par
-    l'antislash (\) les précédant. Tout texte non
-    identifié comme faisant partie d'une entrée est
-    recopié tel quel dans le fichier de sortie.</p>
-
-    <h3>Les commandes relatives aux champs</h3>
-
-    <p>Les mots précédés d'un antislash, par
-    exemple <code>\author</code>, <code>\editor</code>,
-    <code>\title</code> ou <code>\year</code>, sont
-    interprétés comme des références
-    aux champs correspondants et le contenu du champ est
-    copié directement dans la sortie.</p>
-
-    <h3>Les formateurs de champs</h3>
-
-    <p>Souvent, on a besoin de faire subir au contenu d'un champ un
-    pré-traitement avant de le copier dans le fichier de
-    sortie. Cela est réalisé en utilisant un
-    <i>formateur de champ</i> - une classe java contenant une seule
-    méthode qui manipule le contenu du champ.</p>
-
-    <p>Le formateur est utilisé en insérant la
-    commande <code>\format</code> suivie du nom du formateur entre
-    crochets et du nom du champ entre accolades, par exemple</p>
-
-    <p><code>\format[ToLowerCase]{\author}</code></p>
-
-    <p>Vous pouvez aussi indiquer plusieurs formateurs
-    séparés par des virgules. Ils seront alors
-    appelés séquentiellement de la gauche vers la
-    droite, par exemple :</p>
-
-    <p><code>\format[ToLowerCase,HTMLChars]{\author}</code></p>
-
-    <p>va d'abord appliquer le formateur <b>ToLowerCase</b> puis
-    <b>HTMLChars</b> sur le résultat. Vous pouvez lister un
-    nombre arbitraire de formateurs de cette manière.</p>
-
-
-    <p>L'argument des formateurs, à l'intérieur des accolades,
-    n'est pas obligatoirement une commande de champ. Ce peut aussi
-    être du texte normal qui sera ensuite passé aux formateurs
-    au lieu des contenus d'un champ. Cela peut être utilisé pour
-    certains formateurs, par ex. le formateur CurrentDate (décrit
-    ci-dessous).</p>
-
-    <p>Certains formateurs prennent un argument supplémentaire, spécifié entre parenthèses
-    immédiatement après le nom du formateur. L'argument peut être mis
-    entre crochets, ce qui est nécessaire s'il inclut les caractères de parenthèses.
-    Par exemple, <code>\format[Replace("\s,_")]{\journal}</code> appelle
-    le formateur <b>Replace</b> avec l'argument <b>\s,_</b> (ce qui remplace
-    tous les espaces par des soulignés dans le champ "field").</p>
-
-
-    <p>Voir ci-dessous pour une liste des formateurs d'exportation disponibles.</p>
-
-
-    <h3>Les sorties conditionnelles</h3>
-
-    <p>Certaines informations dans les sorties ne prennent de sens
-    que si un certain champ est utilisé. Par exemple, disons
-    que l'on veuille faire suivre le nom de l'éditeur par le
-    texte <code>(Ed.)</code>. Cela peut être
-    réalisé avec le code suivant :</p>
-
-    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
-    (Ed.)</code></p>
-
-    <p>Cependant, si le champs <code>editor</code> n'a pas
-    été renseigné - il n'a pas de sens pour
-    l'entrée exportée - le texte <code>(Ed.)</code>
-    doit être ignoré. Cela peut être
-    effectué en utilisant les commandes <code>\begin</code>
-    et <code>\end</code> :</p>
-
-    <p><code>\begin{editor}<br />
-    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br />
-     \end{editor}</code></p>
-
-    <p>Les commandes <code>\begin</code> et <code>\end</code>
-    assure que le texte contenu entre les deux commandes ne sera
-    imprimé que si et seulement si le champ
-    spécifié entre accolades est renseigné
-    dans l'entrée que l'on veut exporter.</p>
-
-    <p>Un bloc conditionnel peut aussi dépendre de plus d'un champ,
-    et le contenu du bloc est affiché uniquement
-    quand toutes les conditions sont remplies.
-    Deux opérateurs conditionnels sont disponibles :</p>
-    <ul>
-        <li>opérateur ET : <code>&</code>, <code>&&</code></li>
-        <li>opérateur OU : <code>|</code>, <code>||</code></li>
-    </ul>
-
-    <p>Pour imprimer du texte uniquement si à la fois les champs
-    <code>year</code> et <code>month</code> sont renseignés, utilisez
-    un bloc tel que celui-ci :<br/><br/>
-    <code>\begin{year&&month}Month: \format[HTMLChars]
-        {\month}\end{year&&month}</code><br/><br/>
-    qui imprimera "Month: " plus le contenu du champ <code>month</code>, mais
-    seulement si le champ <code>year</code> est lui-aussi défini.</p>
-
-    <p><b>Note :</b> L'utilisation des commandes
-    <code>\begin</code> et <code>\end</code> est une manière
-    astucieuse de créer des gabarits qui sont communs
-    à une grande variété d'entrées.</p>
-
-
-    <h3>Les sorties groupées</h3>
-
-    <p>Si vous désirez séparer vos entrées en
-    groupes basés sur un certain champ, vous pouvez utiliser
-    les commandes de sorties groupées. La sortie
-    groupée est assez similaire aux sorties conditionnelles,
-    excepté que le texte spécifié n'est
-    imprimé que si le champ indiqué dans les
-    accolades change de valeur.</p>
-
-    <p>Par exemple, on suppose que l'on désire faire des
-    groupes à partir de mots-clefs. Avant l'exportation, on
-    s'assure que les entrées sont triées selon les
-    mots-clefs. Ensuite, on utilise les commandes suivantes pour
-    les grouper par mot-clefs :</p>
-    
-    <p><code>\begingroup{keywords}New Category:
-    \format[HTMLChars]{\keywords}<br />
-     \endgroup{keywords}</code></p>
-
-    <h2>Partage de votre travail</h2>
-
-    <p>Avec les fichiers gabarit externes, il est relativement
-    simple de partager des formats d'exportation entre
-    utilisateurs. Si vous écrivez un filtre d'exportation
-    pour un format non supporté par JabRef, ou si vous
-    améliorez un filtre déjà existant, nous
-    vous encourageons à déposer votre travail sur
-    notre page SourceForge.net. La même chose est possible
-    pour les nouvelles classes de formateur que vous avez
-    écrites. Nous serons heureux de distribuer une
-    collection des fichiers gabarit soumis ou de les ajouter
-    à la série des filtres d'exportation standard ou
-    des formateurs.</p>
-
-    <p>À partir de JabRef 2.4 vous pouvez aussi empaqueter votre
-    format d'exportation ("ExportFormat") ou formateur de gabarit
-    ("LayoutFormatter") comme un greffon ("plug-in"). Si vous le
-    faites, vous pouvez fournir un unique fichier zip à d'autres
-    utilisateurs afin qu'ils utilisent votre format d'exportation.
-    Pour un exemple, télécharger le source de JabRef et jeter un
-    oeil au répertoire <code>src/plugins/</code>. N'hésitez pas
-    à participer aux forums sur Sourceforge, puisque nous ne disposons
-    pas encore d'une documentation volumineuse.</p>
-
-
-    <h2>Formateurs d'exportation inclus</h2>
-
-    <p>JabRef fournit la série suivante de formateurs :</p>
-
-    <ul>
-        <li><code>Authors</code> : Ce formateur fournit des options de
-            formatage pour les champs author et editor 
-            pour des informations détaillées, voir ci-dessous.
-            Il rend obsolète une série de formateurs
-            dédiés qui étaient disponibles dans les
-            versions de JabRef antérieures à 2.7.</li>
-
-        <li><code>CreateBibORDFAuthors</code> : formate les auteurs
-            selon les spécification de Bibliographic Ontology (bibo).</li>
-
-        <li><code>CreateDocBookAuthors</code> : formate le
-        contenu du champ author selon le style DocBook.</li>
-
-        <li><code>CreateDocBookEditors</code> : formate le
-        contenu du champ editor selon le style DocBook.</li>
-
-        <li><code>CurrentDate</code> : renvoie la date
-        actuelle. Sans argument, ce formateur renvoie la date et
-        l'heure actuelle au format "yyyy.MM.dd hh:mm:ss z" (date,
-        heure et fuseau horaire). En donnant une chaîne de
-        format différent comme argument, le format de la
-        date peut-être adapté. Par exemple,
-        <code>\format[CurrentDate]{yyyy.MM.dd}</code> renverra
-        uniquement la date, comme par exemple 2005.11.30.</li>
-        
-        <li><code>Default</code> : prend un seul argument, qui sert comme
-        valeur par défaut. Si la chaîne à formater
-        n'est pas vide, elle est renvoyée sans changement.
-        Si elle est vide, la valeur par défaut est renvoyée.
-        Par exemple,
-        <code>\format[Default(unknown)]{\year}</code>
-        renverra l'année de l'entrée si elle existe,
-        et "unknown" si l'année n'est pas précisée.</li>
-
-        <li><code>DOIStrip</code> : supprime tous les préfixes d'une
-            chaîne de DOI.</li>
-
-        <li><code>DOICheck</code> : fournit l'URL complète pour
-            un lien DOI.</li>
-
-        <li><code>FileLink(TypeDeFichier)</code> : sans argument, ce formateur renvoie
-        le premier lien apparaissant dans le champ. Pour fonctionner, ce formateur doit
-        être alimenté par le contenu du champ "file" (fichier).<br/>
-        Ce formateur prend comme argument optionnel l'extension du type de fichier externe
-        spécifié entre parenthèses après le nom du formateur. Par exemple,
-        <code>\format[FileLink(pdf)]{\file}</code> spécifie <code>pdf</code> comme un
-        argument. Quand un argument est fourni, le formateur sélectionne le premier lien
-        vers un fichier du type spécifié. Dans l'exemple, le chemin vers le premier lien PDF
-        sera renvoyé.</li>
-
-        <li><code>FirstPage</code> : renvoie la première page du champ "pages", si initialisé.
-        Par exemple, si le champ "pages" est initialisé avec "345-360" ou "345--360",
-        ce formateur renverra "345".</li>
-
-        <li><code>FormatChars</code> : Ce formateur convertit les séquences
-        de caractères LaTeX dans les caractères unicode équivalents et
-        supprime les autres commandes LaTeX sans les transférer.</li>
-
-        <li><code>FormatPagesForHTML</code> : remplace "--"
-        par "-".</li>
-
-        <li><code>FormatPagesForXML</code> : remplace "--" par
-        un tiret XML.</li>
-        
-        <li><code>GetOpenOfficeType</code> : renvoie le numéro
-        utilisé par le système bibliographique d'OpenOffice.org
-        (versions 1.x et 2.x) pour définir le type
-        de cette ée.</li>
-        
-        <li><code>HTMLChars</code> : remplace les
-        caractères spéciaux spécifiques
-        à TeX (par exemple : {\^a} ou {\"{o}}) par leur
-        représentation HTML, et traduit les commandes LaTeX
-        \emph, \textit, \textbf dans leurs équivalents HTML.</li>
-
-        <li><code>HTMLParagraphs</code> : interprète
-        deux retours-chariot consécutifs (comme \n \n) comme
-        le début d'un nouveau paragraphe et crée les
-        balises html de paragraphes appropriées.</li>
-
-        <li><code>IfPlural</code> : renvoie son premier argument si le
-        champ d'entrée ressemble à une liste d'auteurs avec deux
-        noms ou plus, sinon renvoie son second argument. Par exemple,
-        <code>\format[IfPlural(Eds.,Ed.)]{\editor}</code> renverra "Eds." s'il y
-        a plus d'un éditeur et "Ed." s'il n'y en a qu'un seul.</li>
-
-        <li><code>JournalAbbreviator</code> : Le texte donné en entrée
-        est abrégé selon les listes d'abréviations des journaux.
-        Si aucune abréviation n'est trouvé pour l'entrée (par exemple, si elle
-        n'est pas dans la liste ou si elle est déjà abrégée), l'entrée sera
-        renvoyée sans modification.
-        Par exemple, en utilisant <code>\format[JournalAbbreviator]{\journal}</code>,
-	"Physical Review Letters" renvoie "Phys. Rev. Lett."</li>
-
-        <li><code>LastPage</code> : renvoie la dernière page du champ "pages", si initialisé.
-        Par exemple, si le champ "pages" est initialisé avec "345-360" ou "345--360",
-        ce formateur renverra "360".</li>
-
-        <li><code>NoSpaceBetweenAbbreviations</code> : Un formateur de mise
-        en page qui supprime l'espace entre les initiales des prénoms.
-        Par exemple : J. R. R. Tolkien devient J.R.R. Tolkien.</li>
-
-        <li><code>NotFoundFormatter</code> : Ce formateur est utilisé
-        pour indiquer qu'un formateur n'a pas été trouvé.
-        Cela peut-être utilisé pour gérer proprement les cas où une mise
-        en page utilise un format non défini.</li>
-
-        <li><code>Number</code> : renvoie la séquence de nombres à base de 1 de l'entrée actuelle dans
-        l'exportation actuelle. Ce formateur peut être utilisé pour faire une liste numérotée d'entrées. Le
-        numéro de séquence dépend de la place de l'entrée actuelle dans l'ordre de tri actuel, pas du
-        nombre d'appels de ce formateur.</li>
-
-        <li><code>RemoveBrackets</code> : supprime toutes les
-        accolades "{" ou "}".</li>
-
-        <li><code>RemoveBracketsAddComma</code> : supprime toutes les
-        accolades "{" ou "}". L'accolade fermante est remplacée par une virgule.</li>
-
-        <li><code>RemoveLatexCommands</code> : supprime toutes
-        les commandes LaTeX comme <code>\em</code>,
-        <code>\textbf</code>, etc. Lorsqu'il est utilisé
-        avec <code>HTMLChars</code> ou <code>XMLChars</code>, ce
-        formateur doit être appelé en dernier.</li>
-
-        <li><code>RemoveTilde</code> : remplace le
-        caractère tilde (utilisé dans LaTeX comme un
-        espace insécable) par un espace normal. Utile en
-        combinaison avec <a href="#NameFormatter">un formateur de nom</a>        
-        comme discuté dans la prochaine section.</li>
-
-        <li><code>RemoveWhitespace</code> : supprime tous les caractères espace.</li>
-
-        <li><code>Replace(ExpReg,RemplaceAvec)</code> : effectue le remplacement d'une expression régulière.
-        Pour utiliser ce formateur, un argument en deux parties doit être fourni. Les parties sont
-        séparées par une virgule. Pour indiquer le caractère virgule, utilisez la séquence
-        d'échappement : \,<br/>
-        La première partie est l'expression régulière à rechercher. 
-        Notez bien que toute virgule doit y être précédée par un antislash,
-        et, qu'en conséquence, un antislash dans l'expression régulière
-        recherchée y est représenté par une paire d'anti-slash. Une description
-        des expression régulières de Java peut être trouvée à :<br/>
-         http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html<br/>
-        La seconde partie est le texte qui remplace tous les correspondances.</li>
-
-        <li><code>RisAuthors</code> : à documenter.</li>
-
-        <li><code>RisKeywords</code> : à documenter.</li>
-
-        <li><code>RisMonth</code> : à documenter.</li>
-
-        <li><code>RTFChars</code> : remplace les
-        caractères spéciaux spécifiques
-        à TeX (par exemple : {\^a} ou {\"{o}}) par leur
-        représentation RTF, et traduit les commandes LaTeX
-        \emph, \textit, \textbf dans leurs équivalents RTF.</li>
-
-        <li><code>ToLowerCase</code> : bascule tous les
-        caractères en minuscules.</li>
-
-        <li><code>ToUpperCase</code> : bascule tous les
-        caractères en majuscules.</li>
-
-        <li><code>WrapContent</code> : 
-        Ce formateur renvoie la valeur d'entrée après ajout d'un préfixe et
-        d'un suffixe, tant que la valeur d'entrée n'est pas vide.
-        
-        Si la valeur d'entrée est vide, une chaîne vide est renvoyée (le
-        préfixe et le suffixe ne sont pas renvoyés dans ce cas).
-        Le formateur nécessite un argument contenant le préfixe et le suffixe
-        séparés par une virgule.
-        Pour inclure le caractère virgule dans l'un d'entre eux, utilisez la
-        chaîne d'échappement
-        (\,).</li>
-
-        <li><code>WrapFileLinks</code> : Voir ci-dessous.</li>
-
-        <li><code>XMLChars</code> : remplace les
-        caractères spéciaux spécifiques
-        à TeX (par exemple : {\^a} ou {\"{o}}) par leur
-        représentation XML.</li>
-
-    </ul>
-
-    <h3>Le formateur <code>Authors</code></h3>
-
-    <p>Pour satisfaire les nombreux styles de citation,
-        le formateur <code>Authors</code> permet un contrôle flexible de la mise
-        en page de la liste des auteurs. Le formateur prend en argument
-        une liste d'options séparées par des virgules, ce qui remplace leurs
-        valeurs par défaut. Les paires option/valeur suivantes sont actuellement
-        disponibles, les valeurs par défaut étant écrites entre accolades.</p>
-
-    <dl>
-    <dt><code>AuthorSort = [ {FirstFirst} | LastFirst | LastFirstFirstFirst]</code></dt>
-    <dd>définit l'ordre dans lequel les noms d'auteur sont formatés.
-	<ul>
-		<li><code>FirstFirst</code> :
-                    les prénoms sont suivis du nom de famille.</li>
-		<li><code>LastFirst</code> :
-                    les noms de famille des auteurs sont suivis de leurs prénoms,
-                    séparés par une virgule.</li>
-		<li><code>LastFirstFirstFirst</code> :
-                    Le premier auteur est formaté en LastFirst ;
-                    les auteurs suivants en FirstFirst.</li>
-	</ul>
-    </dd>
-
-    <dt><code>AuthorAbbr = [ FullName | LastName | {Initials} | InitialsNoSpace | FirstInitial | MiddleInitial]</code></dt>
-    <dd>définit comment les noms d'auteur sont abrégés.
-    <ul>
-		<li><code>FullName</code> :
-                    montre les noms complets des auteurs ;
-                    les prénoms ne sont pas abrégés.</li>
-		<li><code>LastName</code> :
-                    montre uniquement les noms de familles,
-                    les prénoms sont enlevés.</li>
-		<li><code>Initials</code> :
-                    tous les prénoms sont abrégés.</li>
-		<li><code>InitialsNospace</code> :
-                    comme Initials, tous les espaces entre les initiales
-                    étant enlevés.</li>
-		<li><code>FirstInitial</code> :
-                    seule la première initiale est affichée.</li>
-		<li><code>MiddleInitial</code> :
-                    le premier prénom est affiché, mais tous les prénoms suivants
-                    sont abrégés.</li>
-	</ul>
-    </dd>
-
-    <dt><code>AuthorPunc = [ {FullPunc} | NoPunc | NoComma | NoPeriod]</code></dt>
-    <dd>définit la ponctuation à utiliser dans la liste des auteurs
-        lorsque <code>AuthorAbbr</code> est utilisé
-	<ul>
-		<li><code>FullPunc</code> :
-                    aucun changement à la ponctuation n'est effectué.</li>
-		<li><code>NoPunc</code> :
-                    tous les points et les virgules sont supprimés du nom d'auteur.</li>
-		<li><code>NoComma</code> :
-                    toutes les virgules sont supprimées du nom d'auteur.</li>
-		<li><code>NoPeriod</code> :
-                    tous les points sont supprimés du nom d'auteur.</li>
-	</ul>
-    </dd>
-
-    <dt><code>AuthorSep = [ {Comma} | And | Colon | Semicolon | Sep=<string>]</code></dt>
-    <dd>définit le séparateur à utiliser entre les auteurs. Tout séparateur
-        peut être spécifié grâce à l'option <code>Sep=<string></code>.</dd>
-
-    <dt><code>AuthorLastSep = [ Comma | {And} | Colon | Semicolon | Amp | Oxford | LastSep=<string>]</code></dt>
-    <dd>définit le dernier séparateur dans la liste d'auteurs. Tout séparateur
-        peut être spécifié grâce à l'option <code>LastSep=<string></code>.</dd>
-
-    <dt><code>AuthorNumber = [ {inf} | <integer>]</code></dt>
-    <dd>définit le nombre d'auteurs devant être affichés. Si le nombre d'auteurs
-        excède le maximum défini, la liste d'auteurs est remplacée par le
-        premier auteur suivi de <code>EtAlString</code>.</dd>
-
-    <dt><code>EtAlString = [ {et al.} | EtAl=<string>]</code></dt>
-    <dd>définit la chaîne utilisée pour remplacer des auteurs multiples.
-        Toute chaîne peut être spécifiée en utilisant <code>EtAl=<string></code></dd>
-
-    </dl>
-
-    <p>Si une option n'est pas spécifiée, la valeur par défaut (montrée entre accolades
-        ci-dessus) est utilisée. Ainsi, uniquement les options de mise en page
-        qui diffère de celles par défaut ont besoin d'être définies.
-        L'ordre dans lequel les options sont définies est (en général) indifférent.
-        Ainsi, par exemple,</p>
-    <p><code>\format[Authors(Initials,Oxford)]{\author}</code></p>
-    <p>est équivalent à</p>
-    <p><code>\format[Authors(Oxford,Initials)]{\author}</code></p>
-    
-    <p>Comme mentionné, l'ordre dans lequel les options sont définies est
-        indifférent. Il y a une possibilité d'ambiguïté si à la fois
-        <code>AuthorSep</code> et <code>AuthorLastSep</code> sont définis.
-        Dans ce cas, la première valeur applicable rencontrée devrait être
-        pour <code>AuthorSep</code>, et la seconde pour <code>AuthorLastSep</code>.
-        Afin d'éviter toute ambiguïté, lorsque la valeur par défaut
-        est modifiée, il est recommandé de spécifier les deux.
-    </p>
-
-
-    <h4>Exemples</h4>
-    <p>Pour les auteurs suivants, <i>"Joe James Doe and Mary Jane
-        and Bruce Bar and Arthur Kay"</i> ,le formateur <code>Authors</code>
-        donnera les résultats suivants :</p>
-    <dl>
-    <dt><code>Authors()</code> ou, de manière équivalente,
-        <code>Authors(FirstFirst,Initials,FullPunc,Comma,And,inf,EtAl= et al.)</code></dt>
-    <dd><pre>J. J. Doe, M. Jane, B. Bar and A. Kay</pre></dd>
-
-    <dt><code>Authors(LastFirstFirstFirst,MiddleInitial,Semicolon)</code></dt>
-    <dd><pre>Doe, Joe J.; Mary Jane; Bruce Bar and Arthur Kay</pre></dd>
-
-    <dt><code>Authors(LastFirst,InitialsNoSpace,NoPunc,Oxford)</code></dt>
-    <dd><pre>Doe JJ, Jane M, Bar B, and Kay A</pre></dd>
-
-    <dt><code>Authors(2,EtAl= and others)</code></dt>
-    <dd><pre>J. J. Doe and others</pre></dd>
-    </dl>
-    <p>Les formats de citations les plus courants devraient être réalisables
-        avec ce formateur. Pour des options encore plus avancées, envisagez
-        d'utiliser les Formateurs personnalisés détaillés ci-dessous.
-    </p>
-
-    <h3>Le formateur <code>WrapFileLinks</code></h3>
-
-    <p>
-    Ce formateur itère sur tous les liens de fichiers, ou tous les liens de fichiers
-    d'un type particulier, renvoyant une chaîne de formatage donnée comme premier
-    argument. La chaîne de formatage peut contenir un nombre de séquences d'échappement
-    indiquant les informations sur le lien de fichier à être inséré dans la chaîne.
-    </p>
-    <p>
-    Ce formateur peut prendre un second argument optionnel spécifiant le nom d'un type
-    de fichier. Si spécifié, l'itération inclura uniquement les fichiers correspondant
-    au type de fichier recherché (en étant sensible à la casse des
-    caractères). S'il est spécifié comme un argument vide, tous les liens de fichiers
-    seront inclus.
-    </p>
-    <p>
-    Après le second argument, des paires d'arguments additionnels peuvent être ajoutées
-    afin de spécifier des expressions régulières de remplacement devant être exécutées
-    sur les informations du lien inséré avant son insertion dans la chaîne de sortie.
-    Un argument non apparié sera ignoré. Afin de spécifier des remplacements sans effectuer
-    de filtrage sur les types de fichiers, utilisez un second argument vide.
-    </p>
-    <p>
-    Les séquences d'échappement pour les informations incluses sont les suivantes :
-    </p>
-    <ul>
-        <li><code>\i</code> : Cela insère l'index d'itération (débutant
-                à 1), et peut être utile si la liste des fichiers en sortie
-                doit être énumérée.</li>
-        <li><code>\p</code> : Cela insère le chemin de fichier d'un lien de fichier.</li>
-        <li><code>\f</code> : Cela insère le nom du type du lien de fichier.</li>
-        <li><code>\x</code> : Cela insère l'extension de fichier, si elle existe.</li>
-        <li><code>\d</code> : Cela insère la description du lien de fichier, si elle existe.</li>
-    </ul>
-    <p>
-    Par exemple, une entrée pourrait contenir un lien de fichier vers le fichier    
-    "/home/john/report.pdf" de type "PDF" avec la description "John's final report".
-    En utilisant le formateur WrapFileLinks avec l'argument suivant :
-    </p><code>\format[WrapFileLinks(\i. \d (\p))]{\file}</code>
-    <p>donnera la sortie suivante :</p>
-    <pre>
-    1. John's final report (/home/john/report.pdf)
-    </pre>
-    <p>
-    Si l'entrée contient un second lien de fichier vers le fichier "/home/john/draft.txt"
-    du type "Text file" avec la description 'An early "draft"', le sortie sera comme suit :</p>
-    <pre>
-    1. John's final report (/home/john/report.pdf)
-    2. An early "draft" (/home/john/draft.txt)
-
-    </pre>
-    <p>
-    Si le formateur a été appelé avec un second argument, la liste sera filtrée.
-    Par exemple :
-    </p>
-    <p><code>\format[WrapFileLinks(\i. \d (\p),,text file)]{\file}</code></p>
-    <p>affichera uniquement le texte suivant :</p>
-    <pre>
-    1. An early "draft" (/home/john/draft.txt)
-
-    </pre>
-    
-    <p>
-    Si l'on veut que cette sortie soit incluse dans une sortie en style XML,
-    les guillemets dans la description de fichier pourrait causer problème.
-    En ajoutant deux arguments additionnels pour traduire les guillemets en
-    caractères XML, on résoudra ce problème :</p>
-    <p><code>\format[WrapFileLinks(\i. \d (\p),,text file,",")]{\file}
-    </code></p>
-    <p>affichera la sortie suivante :</p>
-    <pre>
-    1. An early "draft" (/home/john/draft.txt)
-
-    </pre>
-    <p>Des paires de remplacement supplémentaires pourraient être ajoutées.</p>
-
-
-    <h3>Formateurs personnalisés</h3>
-
-    <p>Si aucun des formateurs disponibles ne peut faire ce que
-    vous désirez, vous pouvez ajouter le votre à
-    l'interface
-    <code>net.sf.jabref.export.layout.LayoutFormatter</code>. Si
-    vous insérez votre propre classe dans
-    <code>net.sf.jabref.export.layout.format</code>, vous pouvez
-    appeler votre formateur en utilisant son nom de classe, comme
-    pour les formateurs standards. Sinon, vous devez appeler le
-    formateur par son nom complet (incluant le nom du paquetage).
-    Dans les deux cas, le formateur doit être dans votre
-    chemin de classe lorsque vous lancez JabRef</p>
-
-    <h2 id="NameFormatter">Utiliser des formateurs de nom
-    personnalisé</h2>
-
-    <p>À partir de JabRef 2.2, il est possible de
-    définir des formateurs de nom personnalisés et
-    utilisant la syntaxe des fichiers de style BibTeX. Cela permet
-    une flexibilité totale, mais c'est fastidieux à
-    écrire</p>
-
-    <p>Vous pouvez définir votre propre formateur dans
-    l'onglet "Formateur de nom" des préférences en
-    utilisant le format suivant et en l'utilisant ensuite avec le
-    nom que vous avez défini comme de n'importe quel autre
-    formateur</p>
-    <code><cas1>@<gamme11>@<format>@<gamme12>@<format>@<gamme13>...@@<br />
-
-     <cas2>@<gamme21>@... et ainsi de suite.</code>
-
-    <p>Ce format commence par séparer la tache de formatage
-    de la liste d'auteurs dans des cas dépendant du nombre
-    d'auteurs qu'il y a (c'est ainsi car certains formats
-    diffèrent en fonction du nombre d'auteurs). Chaque cas
-    individuel est séparé par @@ et contient les
-    instructions sur la façon de formater chaque auteur dans
-    le cas considéré. Ces instructions sont
-    séparées par un @.</p>
-
-    <p>Les cas sont identifiés en utilisant des entiers (1,
-    2, 3, etc.) ou le caractère * (correspondant à
-    n'importe quel nombre d'auteurs) et spécifieront le
-    formateur à appliquer s'il y a un nombre
-    inférieur ou égal d'auteurs.</p>
-
-    <p>Les gammes sont soit
-    <code><entier>..<entier></code>,
-    <code><entier></code> ou le caractère
-    <code>*</code> en utilisant un index basé sur 1 pour
-    indexer les auteurs d'une liste donnée d'auteurs. Les
-    index entiers peuvent être négatif afin de
-    signifier qu'ils commencent par la fin de la liste où -1
-    est le dernier auteur.</p>
-
-    <p>Par exemple, avec une liste d'auteurs comme "Joe Doe and
-    Mary Jane and Bruce Bar and Arthur Kay" :</p>
-
-    <ul>
-        <li>1..3 affectera Joe, Mary and Bruce</li>
-
-        <li>4..4 affectera Arthur</li>
-
-        <li>* les affectera tous</li>
-
-        <li>2..-1 affectera Mary, Bruce and Arthur</li>
-    </ul>
-
-    <p>Les chaînes de <code><format></code> utilisent
-    le format du formateur BibTeX :</p>
-
-    <p>Les quatre lettres v, f, l et j indiquent les parties du nom
-    von, first, last et jr qui sont utilisées entre
-    accolades. Une unique lettre v, f, l ou j indique que le nom
-    doit être abrégé. Si l'une de ces lettres
-    ou paires de lettres sont rencontrées, JabRef retournera
-    tous les noms respectifs (potentiellement
-    abrégés), mais l'expression totale entre
-    accolades est uniquement imprimée si la partie du nom
-    existe.</p>
-
-    <p>Par exemple, si le format est "{ll} {vv {von Part}} {ff}" et
-    si les noms sont "Mary Kay and John von Neumann", alors JabRef
-    retournera "Kay Mary" (avec deux espaces entre le nom propre et
-    le prénom) et "Neuman von von Part John".</p>
-
-    <p>Je donne ici deux exemples, mais je préférerai
-    vous diriger vers la documentations BibTeX.</p>
-
-    <p>Exemple court : <code>"{ll}, {f.}"</code> va convertir
-    <code>"Joe Doe"</code> en <code>"Doe, J."</code></p>
-
-    <p>Exemple long :</p>
-
-    <blockquote>
-        <p>Pour convertir :</p>
-
-        <p><code>"Joe Doe and Mary Jane and Bruce Bar and Arthur
-        Kay"</code></p>
-
-        <p>en</p>
-
-        <p><code>"Doe, J., Jane, M., Bar, B. and Kay,
-        A."</code></p>
-
-        <p>vous devrez utiliser</p>
-
-        <p><code>1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll},
-        {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll},
-        {f}.</code></p>
-    </blockquote>
-
-    <p>Si quelqu'un souhaite écrire un meilleur didacticiel
-    sur ce sujet, envoyez un courriel sur l'une des listes de
-    diffusion de JabRef !</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Filtres d'exportation personnalisés</h1>
+
+    <p>JabRef vous permet de définir et d'utiliser vos
+    propres filtres d'exportation de la même manière
+    que les filtres d'exportation standards. Un filtre
+    d'exportation est défini par un ou plusieurs <i>fichiers
+    gabarit</i> qui, avec l'aide d'un certain nombre de routines
+    internes de formatage, définissent le format des
+    fichiers exportés. Vos fichiers gabarit doivent
+    être préparés avec un éditeur de
+    texte à l'extérieur de JabRef.</p>
+
+    <h2>Ajout d'un filtre d'exportation personnalisé</h2>
+
+    <p>La seule obligation pour avoir un filtre d'exportation
+    valide est l'existence d'un fichier avec l'extension
+    <b>.layout</b>. Pour ajouter un nouveau filtre d'exportation,
+    on utilise le menu <b>Options -> Gérer les
+    exportations personnalisées</b>, et on clique sur
+    <b>Ajouter nouvelle</b>. Une nouvelle boite de dialogue
+    apparaît et vous permet de spécifier le nom du
+    nouveau filtre d'exportation (ce nom apparaîtra ensuite
+    comme l'un des choix du menu déroulant "Type de fichier"
+    de la fenêtre de dialogue affectée au menu
+    <b>Fichier -> Exporter</b> de la fenêtre principale de
+    JabRef), le chemin du fichier <b>.layout</b>, et l'extension de
+    fichier préférée par le filtre
+    d'exportation (c'est cette extension qui sera
+    suggérée dans la boite de dialogue lorsque le
+    filtre sera utilisé).</p>
+
+    <h2>Création d'un filtre d'exportation</h2>
+
+    <p>Pour voir des exemples de constitution de filtres
+    d'exportation, recherchez le répertoire contenant les
+    fichiers gabarit des filtres d'exportation standards sur notre
+    page de téléchargement.</p>
+
+    <h3>Les fichiers gabarit</h3>
+
+    <p>On suppose que l'on veut créer un filtre
+    d'exportation pour une sortie HTML.</p>
+
+    <p>Bien que le filtre d'exportation ne nécessite qu'un
+    seul fichier <b>.layout</b>, qui dans ce cas pourrait s'appeler
+    <i>html.layout</i>, vous pouvez désirer ajouter deux
+    autres fichiers appelés <i>html.begin.layout</i> et
+    <i>html.end.layout</i>. Le premier contient le début de
+    la sortie et le dernier la fin. JabRef recherche ces deux
+    fichiers quelque soit le fichier d'exportation utilisé
+    et, s'il les trouve, les recopie tel quel dans la sortie avant
+    et après l'écriture des entrées
+    individuelles.</p>
+
+    <p>Il faut noter que ces fichiers doivent être dans le
+    même répertoire que le fichier <i>html.layout</i>,
+    et que leur nom doit comporter <b>.begin</b> pour l'un et
+    <b>.end</b> pour l'autre.</p>
+
+    <p>Dans notre exemple de fichier d'exportation, cela pourrait
+    ressembler à</p>
+
+    <p><i>html.begin.layout</i> :<br />
+    <code><!DOCTYPE html><br/><html><br /> <body
+    style="color:#275856; font-family: Arial, sans-serif;"></code>
+    </p>
+
+    <p><i>html.end.layout</i> :<br />
+    <code></BODY><br /></HTML></code></p>
+
+    <p>Le fichier <i>html.layout</i> fournit le gabarit par
+    défaut pour l'exportation d'une seule entrée. Si
+    vous devez utiliser différents gabarits pour les
+    différentes entrées, vous pouvez le faire en
+    ajoutant des fichiers <b>.layout</b> spécifiques. Les
+    fichiers doivent aussi être dans le même
+    répertoire que le gabarit principal et ils sont
+    nommés en insérant <b>.entrytype</b> dans le nom
+    du fichier gabarit principal. Le nom de l'entrée doit
+    être en minuscules. Dans notre exemple, on peut vouloir
+    ajouter un gabarit différent pour les livres et cela se
+    fera via le fichier <i>html.book.layout</i>. Pour une
+    thèse, on ajoutera le fichier
+    <i>html.phdthesis.layout</i>. Ces fichiers sont similaires au
+    gabarit principal, si ce n'est qu'ils sont utilisés pour
+    des entrées spécifiques. A noter que le gabarit
+    général peut aisément être
+    créé suffisamment général pour
+    être utilisable avec la plupart des entrées dans
+    la majorité des filtres d'exportation.</p>
+
+    <h3>Le format des fichiers gabarit</h3>
+
+    <p>Les fichiers gabarit utilisent un simple langage de balisage
+    dans lequel les commandes sont identifiées par
+    l'antislash (\) les précédant. Tout texte non
+    identifié comme faisant partie d'une entrée est
+    recopié tel quel dans le fichier de sortie.</p>
+
+    <h3>Les commandes relatives aux champs</h3>
+
+    <p>Les mots précédés d'un antislash, par
+    exemple <code>\author</code>, <code>\editor</code>,
+    <code>\title</code> ou <code>\year</code>, sont
+    interprétés comme des références
+    aux champs correspondants et le contenu du champ est
+    copié directement dans la sortie.</p>
+
+    <h3>Les formateurs de champs</h3>
+
+    <p>Souvent, on a besoin de faire subir au contenu d'un champ un
+    pré-traitement avant de le copier dans le fichier de
+    sortie. Cela est réalisé en utilisant un
+    <i>formateur de champ</i> - une classe java contenant une seule
+    méthode qui manipule le contenu du champ.</p>
+
+    <p>Le formateur est utilisé en insérant la
+    commande <code>\format</code> suivie du nom du formateur entre
+    crochets et du nom du champ entre accolades, par exemple</p>
+
+    <p><code>\format[ToLowerCase]{\author}</code></p>
+
+    <p>Vous pouvez aussi indiquer plusieurs formateurs
+    séparés par des virgules. Ils seront alors
+    appelés séquentiellement de la gauche vers la
+    droite, par exemple :</p>
+
+    <p><code>\format[ToLowerCase,HTMLChars]{\author}</code></p>
+
+    <p>va d'abord appliquer le formateur <b>ToLowerCase</b> puis
+    <b>HTMLChars</b> sur le résultat. Vous pouvez lister un
+    nombre arbitraire de formateurs de cette manière.</p>
+
+
+    <p>L'argument des formateurs, à l'intérieur des accolades,
+    n'est pas obligatoirement une commande de champ. Ce peut aussi
+    être du texte normal qui sera ensuite passé aux formateurs
+    au lieu des contenus d'un champ. Cela peut être utilisé pour
+    certains formateurs, par ex. le formateur CurrentDate (décrit
+    ci-dessous).</p>
+
+    <p>Certains formateurs prennent un argument supplémentaire, spécifié entre parenthèses
+    immédiatement après le nom du formateur. L'argument peut être mis
+    entre crochets, ce qui est nécessaire s'il inclut les caractères de parenthèses.
+    Par exemple, <code>\format[Replace("\s,_")]{\journal}</code> appelle
+    le formateur <b>Replace</b> avec l'argument <b>\s,_</b> (ce qui remplace
+    tous les espaces par des soulignés dans le champ "field").</p>
+
+
+    <p>Voir ci-dessous pour une liste des formateurs d'exportation disponibles.</p>
+
+
+    <h3>Les sorties conditionnelles</h3>
+
+    <p>Certaines informations dans les sorties ne prennent de sens
+    que si un certain champ est utilisé. Par exemple, disons
+    que l'on veuille faire suivre le nom de l'éditeur par le
+    texte <code>(Ed.)</code>. Cela peut être
+    réalisé avec le code suivant :</p>
+
+    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
+    (Ed.)</code></p>
+
+    <p>Cependant, si le champs <code>editor</code> n'a pas
+    été renseigné - il n'a pas de sens pour
+    l'entrée exportée - le texte <code>(Ed.)</code>
+    doit être ignoré. Cela peut être
+    effectué en utilisant les commandes <code>\begin</code>
+    et <code>\end</code> :</p>
+
+    <p><code>\begin{editor}<br />
+    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br />
+     \end{editor}</code></p>
+
+    <p>Les commandes <code>\begin</code> et <code>\end</code>
+    assure que le texte contenu entre les deux commandes ne sera
+    imprimé que si et seulement si le champ
+    spécifié entre accolades est renseigné
+    dans l'entrée que l'on veut exporter.</p>
+
+    <p>Un bloc conditionnel peut aussi dépendre de plus d'un champ,
+    et le contenu du bloc est affiché uniquement
+    quand toutes les conditions sont remplies.
+    Deux opérateurs conditionnels sont disponibles :</p>
+    <ul>
+        <li>opérateur ET : <code>&</code>, <code>&&</code></li>
+        <li>opérateur OU : <code>|</code>, <code>||</code></li>
+    </ul>
+
+    <p>Pour imprimer du texte uniquement si à la fois les champs
+    <code>year</code> et <code>month</code> sont renseignés, utilisez
+    un bloc tel que celui-ci :<br/><br/>
+    <code>\begin{year&&month}Month: \format[HTMLChars]
+        {\month}\end{year&&month}</code><br/><br/>
+    qui imprimera "Month: " plus le contenu du champ <code>month</code>, mais
+    seulement si le champ <code>year</code> est lui-aussi défini.</p>
+
+    <p><b>Note :</b> L'utilisation des commandes
+    <code>\begin</code> et <code>\end</code> est une manière
+    astucieuse de créer des gabarits qui sont communs
+    à une grande variété d'entrées.</p>
+
+
+    <h3>Les sorties groupées</h3>
+
+    <p>Si vous désirez séparer vos entrées en
+    groupes basés sur un certain champ, vous pouvez utiliser
+    les commandes de sorties groupées. La sortie
+    groupée est assez similaire aux sorties conditionnelles,
+    excepté que le texte spécifié n'est
+    imprimé que si le champ indiqué dans les
+    accolades change de valeur.</p>
+
+    <p>Par exemple, on suppose que l'on désire faire des
+    groupes à partir de mots-clefs. Avant l'exportation, on
+    s'assure que les entrées sont triées selon les
+    mots-clefs. Ensuite, on utilise les commandes suivantes pour
+    les grouper par mot-clefs :</p>
+    
+    <p><code>\begingroup{keywords}New Category:
+    \format[HTMLChars]{\keywords}<br />
+     \endgroup{keywords}</code></p>
+
+    <h2>Partage de votre travail</h2>
+
+    <p>Avec les fichiers gabarit externes, il est relativement
+    simple de partager des formats d'exportation entre
+    utilisateurs. Si vous écrivez un filtre d'exportation
+    pour un format non supporté par JabRef, ou si vous
+    améliorez un filtre déjà existant, nous
+    vous encourageons à déposer votre travail sur
+    notre page SourceForge.net. La même chose est possible
+    pour les nouvelles classes de formateur que vous avez
+    écrites. Nous serons heureux de distribuer une
+    collection des fichiers gabarit soumis ou de les ajouter
+    à la série des filtres d'exportation standard ou
+    des formateurs.</p>
+
+    <p>À partir de JabRef 2.4 vous pouvez aussi empaqueter votre
+    format d'exportation ("ExportFormat") ou formateur de gabarit
+    ("LayoutFormatter") comme un greffon ("plug-in"). Si vous le
+    faites, vous pouvez fournir un unique fichier zip à d'autres
+    utilisateurs afin qu'ils utilisent votre format d'exportation.
+    Pour un exemple, télécharger le source de JabRef et jeter un
+    oeil au répertoire <code>src/plugins/</code>. N'hésitez pas
+    à participer aux forums sur Sourceforge, puisque nous ne disposons
+    pas encore d'une documentation volumineuse.</p>
+
+
+    <h2>Formateurs d'exportation inclus</h2>
+
+    <p>JabRef fournit la série suivante de formateurs :</p>
+
+    <ul>
+        <li><code>Authors</code> : Ce formateur fournit des options de
+            formatage pour les champs author et editor 
+            pour des informations détaillées, voir ci-dessous.
+            Il rend obsolète une série de formateurs
+            dédiés qui étaient disponibles dans les
+            versions de JabRef antérieures à 2.7.</li>
+
+        <li><code>CreateBibORDFAuthors</code> : formate les auteurs
+            selon les spécification de Bibliographic Ontology (bibo).</li>
+
+        <li><code>CreateDocBookAuthors</code> : formate le
+        contenu du champ author selon le style DocBook.</li>
+
+        <li><code>CreateDocBookEditors</code> : formate le
+        contenu du champ editor selon le style DocBook.</li>
+
+        <li><code>CurrentDate</code> : renvoie la date
+        actuelle. Sans argument, ce formateur renvoie la date et
+        l'heure actuelle au format "yyyy.MM.dd hh:mm:ss z" (date,
+        heure et fuseau horaire). En donnant une chaîne de
+        format différent comme argument, le format de la
+        date peut-être adapté. Par exemple,
+        <code>\format[CurrentDate]{yyyy.MM.dd}</code> renverra
+        uniquement la date, comme par exemple 2005.11.30.</li>
+        
+        <li><code>Default</code> : prend un seul argument, qui sert comme
+        valeur par défaut. Si la chaîne à formater
+        n'est pas vide, elle est renvoyée sans changement.
+        Si elle est vide, la valeur par défaut est renvoyée.
+        Par exemple,
+        <code>\format[Default(unknown)]{\year}</code>
+        renverra l'année de l'entrée si elle existe,
+        et "unknown" si l'année n'est pas précisée.</li>
+
+        <li><code>DOIStrip</code> : supprime tous les préfixes d'une
+            chaîne de DOI.</li>
+
+        <li><code>DOICheck</code> : fournit l'URL complète pour
+            un lien DOI.</li>
+
+        <li><code>FileLink(TypeDeFichier)</code> : sans argument, ce formateur renvoie
+        le premier lien apparaissant dans le champ. Pour fonctionner, ce formateur doit
+        être alimenté par le contenu du champ "file" (fichier).<br/>
+        Ce formateur prend comme argument optionnel l'extension du type de fichier externe
+        spécifié entre parenthèses après le nom du formateur. Par exemple,
+        <code>\format[FileLink(pdf)]{\file}</code> spécifie <code>pdf</code> comme un
+        argument. Quand un argument est fourni, le formateur sélectionne le premier lien
+        vers un fichier du type spécifié. Dans l'exemple, le chemin vers le premier lien PDF
+        sera renvoyé.</li>
+
+        <li><code>FirstPage</code> : renvoie la première page du champ "pages", si initialisé.
+        Par exemple, si le champ "pages" est initialisé avec "345-360" ou "345--360",
+        ce formateur renverra "345".</li>
+
+        <li><code>FormatChars</code> : Ce formateur convertit les séquences
+        de caractères LaTeX dans les caractères unicode équivalents et
+        supprime les autres commandes LaTeX sans les transférer.</li>
+
+        <li><code>FormatPagesForHTML</code> : remplace "--"
+        par "-".</li>
+
+        <li><code>FormatPagesForXML</code> : remplace "--" par
+        un tiret XML.</li>
+        
+        <li><code>GetOpenOfficeType</code> : renvoie le numéro
+        utilisé par le système bibliographique d'OpenOffice.org
+        (versions 1.x et 2.x) pour définir le type
+        de cette ée.</li>
+        
+        <li><code>HTMLChars</code> : remplace les
+        caractères spéciaux spécifiques
+        à TeX (par exemple : {\^a} ou {\"{o}}) par leur
+        représentation HTML, et traduit les commandes LaTeX
+        \emph, \textit, \textbf dans leurs équivalents HTML.</li>
+
+        <li><code>HTMLParagraphs</code> : interprète
+        deux retours-chariot consécutifs (comme \n \n) comme
+        le début d'un nouveau paragraphe et crée les
+        balises html de paragraphes appropriées.</li>
+
+        <li><code>IfPlural</code> : renvoie son premier argument si le
+        champ d'entrée ressemble à une liste d'auteurs avec deux
+        noms ou plus, sinon renvoie son second argument. Par exemple,
+        <code>\format[IfPlural(Eds.,Ed.)]{\editor}</code> renverra "Eds." s'il y
+        a plus d'un éditeur et "Ed." s'il n'y en a qu'un seul.</li>
+
+        <li><code>JournalAbbreviator</code> : Le texte donné en entrée
+        est abrégé selon les listes d'abréviations des journaux.
+        Si aucune abréviation n'est trouvé pour l'entrée (par exemple, si elle
+        n'est pas dans la liste ou si elle est déjà abrégée), l'entrée sera
+        renvoyée sans modification.
+        Par exemple, en utilisant <code>\format[JournalAbbreviator]{\journal}</code>,
+	"Physical Review Letters" renvoie "Phys. Rev. Lett."</li>
+
+        <li><code>LastPage</code> : renvoie la dernière page du champ "pages", si initialisé.
+        Par exemple, si le champ "pages" est initialisé avec "345-360" ou "345--360",
+        ce formateur renverra "360".</li>
+
+        <li><code>NoSpaceBetweenAbbreviations</code> : Un formateur de mise
+        en page qui supprime l'espace entre les initiales des prénoms.
+        Par exemple : J. R. R. Tolkien devient J.R.R. Tolkien.</li>
+
+        <li><code>NotFoundFormatter</code> : Ce formateur est utilisé
+        pour indiquer qu'un formateur n'a pas été trouvé.
+        Cela peut-être utilisé pour gérer proprement les cas où une mise
+        en page utilise un format non défini.</li>
+
+        <li><code>Number</code> : renvoie la séquence de nombres à base de 1 de l'entrée actuelle dans
+        l'exportation actuelle. Ce formateur peut être utilisé pour faire une liste numérotée d'entrées. Le
+        numéro de séquence dépend de la place de l'entrée actuelle dans l'ordre de tri actuel, pas du
+        nombre d'appels de ce formateur.</li>
+
+        <li><code>RemoveBrackets</code> : supprime toutes les
+        accolades "{" ou "}".</li>
+
+        <li><code>RemoveBracketsAddComma</code> : supprime toutes les
+        accolades "{" ou "}". L'accolade fermante est remplacée par une virgule.</li>
+
+        <li><code>RemoveLatexCommands</code> : supprime toutes
+        les commandes LaTeX comme <code>\em</code>,
+        <code>\textbf</code>, etc. Lorsqu'il est utilisé
+        avec <code>HTMLChars</code> ou <code>XMLChars</code>, ce
+        formateur doit être appelé en dernier.</li>
+
+        <li><code>RemoveTilde</code> : remplace le
+        caractère tilde (utilisé dans LaTeX comme un
+        espace insécable) par un espace normal. Utile en
+        combinaison avec <a href="#NameFormatter">un formateur de nom</a>        
+        comme discuté dans la prochaine section.</li>
+
+        <li><code>RemoveWhitespace</code> : supprime tous les caractères espace.</li>
+
+        <li><code>Replace(ExpReg,RemplaceAvec)</code> : effectue le remplacement d'une expression régulière.
+        Pour utiliser ce formateur, un argument en deux parties doit être fourni. Les parties sont
+        séparées par une virgule. Pour indiquer le caractère virgule, utilisez la séquence
+        d'échappement : \,<br/>
+        La première partie est l'expression régulière à rechercher. 
+        Notez bien que toute virgule doit y être précédée par un antislash,
+        et, qu'en conséquence, un antislash dans l'expression régulière
+        recherchée y est représenté par une paire d'anti-slash. Une description
+        des expression régulières de Java peut être trouvée à :<br/>
+         http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html<br/>
+        La seconde partie est le texte qui remplace tous les correspondances.</li>
+
+        <li><code>RisAuthors</code> : à documenter.</li>
+
+        <li><code>RisKeywords</code> : à documenter.</li>
+
+        <li><code>RisMonth</code> : à documenter.</li>
+
+        <li><code>RTFChars</code> : remplace les
+        caractères spéciaux spécifiques
+        à TeX (par exemple : {\^a} ou {\"{o}}) par leur
+        représentation RTF, et traduit les commandes LaTeX
+        \emph, \textit, \textbf dans leurs équivalents RTF.</li>
+
+        <li><code>ToLowerCase</code> : bascule tous les
+        caractères en minuscules.</li>
+
+        <li><code>ToUpperCase</code> : bascule tous les
+        caractères en majuscules.</li>
+
+        <li><code>WrapContent</code> : 
+        Ce formateur renvoie la valeur d'entrée après ajout d'un préfixe et
+        d'un suffixe, tant que la valeur d'entrée n'est pas vide.
+        
+        Si la valeur d'entrée est vide, une chaîne vide est renvoyée (le
+        préfixe et le suffixe ne sont pas renvoyés dans ce cas).
+        Le formateur nécessite un argument contenant le préfixe et le suffixe
+        séparés par une virgule.
+        Pour inclure le caractère virgule dans l'un d'entre eux, utilisez la
+        chaîne d'échappement
+        (\,).</li>
+
+        <li><code>WrapFileLinks</code> : Voir ci-dessous.</li>
+
+        <li><code>XMLChars</code> : remplace les
+        caractères spéciaux spécifiques
+        à TeX (par exemple : {\^a} ou {\"{o}}) par leur
+        représentation XML.</li>
+
+    </ul>
+
+    <h3>Le formateur <code>Authors</code></h3>
+
+    <p>Pour satisfaire les nombreux styles de citation,
+        le formateur <code>Authors</code> permet un contrôle flexible de la mise
+        en page de la liste des auteurs. Le formateur prend en argument
+        une liste d'options séparées par des virgules, ce qui remplace leurs
+        valeurs par défaut. Les paires option/valeur suivantes sont actuellement
+        disponibles, les valeurs par défaut étant écrites entre accolades.</p>
+
+    <dl>
+    <dt><code>AuthorSort = [ {FirstFirst} | LastFirst | LastFirstFirstFirst]</code></dt>
+    <dd>définit l'ordre dans lequel les noms d'auteur sont formatés.
+	<ul>
+		<li><code>FirstFirst</code> :
+                    les prénoms sont suivis du nom de famille.</li>
+		<li><code>LastFirst</code> :
+                    les noms de famille des auteurs sont suivis de leurs prénoms,
+                    séparés par une virgule.</li>
+		<li><code>LastFirstFirstFirst</code> :
+                    Le premier auteur est formaté en LastFirst ;
+                    les auteurs suivants en FirstFirst.</li>
+	</ul>
+    </dd>
+
+    <dt><code>AuthorAbbr = [ FullName | LastName | {Initials} | InitialsNoSpace | FirstInitial | MiddleInitial]</code></dt>
+    <dd>définit comment les noms d'auteur sont abrégés.
+    <ul>
+		<li><code>FullName</code> :
+                    montre les noms complets des auteurs ;
+                    les prénoms ne sont pas abrégés.</li>
+		<li><code>LastName</code> :
+                    montre uniquement les noms de familles,
+                    les prénoms sont enlevés.</li>
+		<li><code>Initials</code> :
+                    tous les prénoms sont abrégés.</li>
+		<li><code>InitialsNospace</code> :
+                    comme Initials, tous les espaces entre les initiales
+                    étant enlevés.</li>
+		<li><code>FirstInitial</code> :
+                    seule la première initiale est affichée.</li>
+		<li><code>MiddleInitial</code> :
+                    le premier prénom est affiché, mais tous les prénoms suivants
+                    sont abrégés.</li>
+	</ul>
+    </dd>
+
+    <dt><code>AuthorPunc = [ {FullPunc} | NoPunc | NoComma | NoPeriod]</code></dt>
+    <dd>définit la ponctuation à utiliser dans la liste des auteurs
+        lorsque <code>AuthorAbbr</code> est utilisé
+	<ul>
+		<li><code>FullPunc</code> :
+                    aucun changement à la ponctuation n'est effectué.</li>
+		<li><code>NoPunc</code> :
+                    tous les points et les virgules sont supprimés du nom d'auteur.</li>
+		<li><code>NoComma</code> :
+                    toutes les virgules sont supprimées du nom d'auteur.</li>
+		<li><code>NoPeriod</code> :
+                    tous les points sont supprimés du nom d'auteur.</li>
+	</ul>
+    </dd>
+
+    <dt><code>AuthorSep = [ {Comma} | And | Colon | Semicolon | Sep=<string>]</code></dt>
+    <dd>définit le séparateur à utiliser entre les auteurs. Tout séparateur
+        peut être spécifié grâce à l'option <code>Sep=<string></code>.</dd>
+
+    <dt><code>AuthorLastSep = [ Comma | {And} | Colon | Semicolon | Amp | Oxford | LastSep=<string>]</code></dt>
+    <dd>définit le dernier séparateur dans la liste d'auteurs. Tout séparateur
+        peut être spécifié grâce à l'option <code>LastSep=<string></code>.</dd>
+
+    <dt><code>AuthorNumber = [ {inf} | <integer>]</code></dt>
+    <dd>définit le nombre d'auteurs devant être affichés. Si le nombre d'auteurs
+        excède le maximum défini, la liste d'auteurs est remplacée par le
+        premier auteur suivi de <code>EtAlString</code>.</dd>
+
+    <dt><code>EtAlString = [ {et al.} | EtAl=<string>]</code></dt>
+    <dd>définit la chaîne utilisée pour remplacer des auteurs multiples.
+        Toute chaîne peut être spécifiée en utilisant <code>EtAl=<string></code></dd>
+
+    </dl>
+
+    <p>Si une option n'est pas spécifiée, la valeur par défaut (montrée entre accolades
+        ci-dessus) est utilisée. Ainsi, uniquement les options de mise en page
+        qui diffère de celles par défaut ont besoin d'être définies.
+        L'ordre dans lequel les options sont définies est (en général) indifférent.
+        Ainsi, par exemple,</p>
+    <p><code>\format[Authors(Initials,Oxford)]{\author}</code></p>
+    <p>est équivalent à</p>
+    <p><code>\format[Authors(Oxford,Initials)]{\author}</code></p>
+    
+    <p>Comme mentionné, l'ordre dans lequel les options sont définies est
+        indifférent. Il y a une possibilité d'ambiguïté si à la fois
+        <code>AuthorSep</code> et <code>AuthorLastSep</code> sont définis.
+        Dans ce cas, la première valeur applicable rencontrée devrait être
+        pour <code>AuthorSep</code>, et la seconde pour <code>AuthorLastSep</code>.
+        Afin d'éviter toute ambiguïté, lorsque la valeur par défaut
+        est modifiée, il est recommandé de spécifier les deux.
+    </p>
+
+
+    <h4>Exemples</h4>
+    <p>Pour les auteurs suivants, <i>"Joe James Doe and Mary Jane
+        and Bruce Bar and Arthur Kay"</i> ,le formateur <code>Authors</code>
+        donnera les résultats suivants :</p>
+    <dl>
+    <dt><code>Authors()</code> ou, de manière équivalente,
+        <code>Authors(FirstFirst,Initials,FullPunc,Comma,And,inf,EtAl= et al.)</code></dt>
+    <dd><pre>J. J. Doe, M. Jane, B. Bar and A. Kay</pre></dd>
+
+    <dt><code>Authors(LastFirstFirstFirst,MiddleInitial,Semicolon)</code></dt>
+    <dd><pre>Doe, Joe J.; Mary Jane; Bruce Bar and Arthur Kay</pre></dd>
+
+    <dt><code>Authors(LastFirst,InitialsNoSpace,NoPunc,Oxford)</code></dt>
+    <dd><pre>Doe JJ, Jane M, Bar B, and Kay A</pre></dd>
+
+    <dt><code>Authors(2,EtAl= and others)</code></dt>
+    <dd><pre>J. J. Doe and others</pre></dd>
+    </dl>
+    <p>Les formats de citations les plus courants devraient être réalisables
+        avec ce formateur. Pour des options encore plus avancées, envisagez
+        d'utiliser les Formateurs personnalisés détaillés ci-dessous.
+    </p>
+
+    <h3>Le formateur <code>WrapFileLinks</code></h3>
+
+    <p>
+    Ce formateur itère sur tous les liens de fichiers, ou tous les liens de fichiers
+    d'un type particulier, renvoyant une chaîne de formatage donnée comme premier
+    argument. La chaîne de formatage peut contenir un nombre de séquences d'échappement
+    indiquant les informations sur le lien de fichier à être inséré dans la chaîne.
+    </p>
+    <p>
+    Ce formateur peut prendre un second argument optionnel spécifiant le nom d'un type
+    de fichier. Si spécifié, l'itération inclura uniquement les fichiers correspondant
+    au type de fichier recherché (en étant sensible à la casse des
+    caractères). S'il est spécifié comme un argument vide, tous les liens de fichiers
+    seront inclus.
+    </p>
+    <p>
+    Après le second argument, des paires d'arguments additionnels peuvent être ajoutées
+    afin de spécifier des expressions régulières de remplacement devant être exécutées
+    sur les informations du lien inséré avant son insertion dans la chaîne de sortie.
+    Un argument non apparié sera ignoré. Afin de spécifier des remplacements sans effectuer
+    de filtrage sur les types de fichiers, utilisez un second argument vide.
+    </p>
+    <p>
+    Les séquences d'échappement pour les informations incluses sont les suivantes :
+    </p>
+    <ul>
+        <li><code>\i</code> : Cela insère l'index d'itération (débutant
+                à 1), et peut être utile si la liste des fichiers en sortie
+                doit être énumérée.</li>
+        <li><code>\p</code> : Cela insère le chemin de fichier d'un lien de fichier.</li>
+        <li><code>\f</code> : Cela insère le nom du type du lien de fichier.</li>
+        <li><code>\x</code> : Cela insère l'extension de fichier, si elle existe.</li>
+        <li><code>\d</code> : Cela insère la description du lien de fichier, si elle existe.</li>
+    </ul>
+    <p>
+    Par exemple, une entrée pourrait contenir un lien de fichier vers le fichier    
+    "/home/john/report.pdf" de type "PDF" avec la description "John's final report".
+    En utilisant le formateur WrapFileLinks avec l'argument suivant :
+    </p><code>\format[WrapFileLinks(\i. \d (\p))]{\file}</code>
+    <p>donnera la sortie suivante :</p>
+    <pre>
+    1. John's final report (/home/john/report.pdf)
+    </pre>
+    <p>
+    Si l'entrée contient un second lien de fichier vers le fichier "/home/john/draft.txt"
+    du type "Text file" avec la description 'An early "draft"', le sortie sera comme suit :</p>
+    <pre>
+    1. John's final report (/home/john/report.pdf)
+    2. An early "draft" (/home/john/draft.txt)
+
+    </pre>
+    <p>
+    Si le formateur a été appelé avec un second argument, la liste sera filtrée.
+    Par exemple :
+    </p>
+    <p><code>\format[WrapFileLinks(\i. \d (\p),,text file)]{\file}</code></p>
+    <p>affichera uniquement le texte suivant :</p>
+    <pre>
+    1. An early "draft" (/home/john/draft.txt)
+
+    </pre>
+    
+    <p>
+    Si l'on veut que cette sortie soit incluse dans une sortie en style XML,
+    les guillemets dans la description de fichier pourrait causer problème.
+    En ajoutant deux arguments additionnels pour traduire les guillemets en
+    caractères XML, on résoudra ce problème :</p>
+    <p><code>\format[WrapFileLinks(\i. \d (\p),,text file,",")]{\file}
+    </code></p>
+    <p>affichera la sortie suivante :</p>
+    <pre>
+    1. An early "draft" (/home/john/draft.txt)
+
+    </pre>
+    <p>Des paires de remplacement supplémentaires pourraient être ajoutées.</p>
+
+
+    <h3>Formateurs personnalisés</h3>
+
+    <p>Si aucun des formateurs disponibles ne peut faire ce que
+    vous désirez, vous pouvez ajouter le votre à
+    l'interface
+    <code>net.sf.jabref.export.layout.LayoutFormatter</code>. Si
+    vous insérez votre propre classe dans
+    <code>net.sf.jabref.export.layout.format</code>, vous pouvez
+    appeler votre formateur en utilisant son nom de classe, comme
+    pour les formateurs standards. Sinon, vous devez appeler le
+    formateur par son nom complet (incluant le nom du paquetage).
+    Dans les deux cas, le formateur doit être dans votre
+    chemin de classe lorsque vous lancez JabRef</p>
+
+    <h2 id="NameFormatter">Utiliser des formateurs de nom
+    personnalisé</h2>
+
+    <p>À partir de JabRef 2.2, il est possible de
+    définir des formateurs de nom personnalisés et
+    utilisant la syntaxe des fichiers de style BibTeX. Cela permet
+    une flexibilité totale, mais c'est fastidieux à
+    écrire</p>
+
+    <p>Vous pouvez définir votre propre formateur dans
+    l'onglet "Formateur de nom" des préférences en
+    utilisant le format suivant et en l'utilisant ensuite avec le
+    nom que vous avez défini comme de n'importe quel autre
+    formateur</p>
+    <code><cas1>@<gamme11>@<format>@<gamme12>@<format>@<gamme13>...@@<br />
+
+     <cas2>@<gamme21>@... et ainsi de suite.</code>
+
+    <p>Ce format commence par séparer la tache de formatage
+    de la liste d'auteurs dans des cas dépendant du nombre
+    d'auteurs qu'il y a (c'est ainsi car certains formats
+    diffèrent en fonction du nombre d'auteurs). Chaque cas
+    individuel est séparé par @@ et contient les
+    instructions sur la façon de formater chaque auteur dans
+    le cas considéré. Ces instructions sont
+    séparées par un @.</p>
+
+    <p>Les cas sont identifiés en utilisant des entiers (1,
+    2, 3, etc.) ou le caractère * (correspondant à
+    n'importe quel nombre d'auteurs) et spécifieront le
+    formateur à appliquer s'il y a un nombre
+    inférieur ou égal d'auteurs.</p>
+
+    <p>Les gammes sont soit
+    <code><entier>..<entier></code>,
+    <code><entier></code> ou le caractère
+    <code>*</code> en utilisant un index basé sur 1 pour
+    indexer les auteurs d'une liste donnée d'auteurs. Les
+    index entiers peuvent être négatif afin de
+    signifier qu'ils commencent par la fin de la liste où -1
+    est le dernier auteur.</p>
+
+    <p>Par exemple, avec une liste d'auteurs comme "Joe Doe and
+    Mary Jane and Bruce Bar and Arthur Kay" :</p>
+
+    <ul>
+        <li>1..3 affectera Joe, Mary and Bruce</li>
+
+        <li>4..4 affectera Arthur</li>
+
+        <li>* les affectera tous</li>
+
+        <li>2..-1 affectera Mary, Bruce and Arthur</li>
+    </ul>
+
+    <p>Les chaînes de <code><format></code> utilisent
+    le format du formateur BibTeX :</p>
+
+    <p>Les quatre lettres v, f, l et j indiquent les parties du nom
+    von, first, last et jr qui sont utilisées entre
+    accolades. Une unique lettre v, f, l ou j indique que le nom
+    doit être abrégé. Si l'une de ces lettres
+    ou paires de lettres sont rencontrées, JabRef retournera
+    tous les noms respectifs (potentiellement
+    abrégés), mais l'expression totale entre
+    accolades est uniquement imprimée si la partie du nom
+    existe.</p>
+
+    <p>Par exemple, si le format est "{ll} {vv {von Part}} {ff}" et
+    si les noms sont "Mary Kay and John von Neumann", alors JabRef
+    retournera "Kay Mary" (avec deux espaces entre le nom propre et
+    le prénom) et "Neuman von von Part John".</p>
+
+    <p>Je donne ici deux exemples, mais je préférerai
+    vous diriger vers la documentations BibTeX.</p>
+
+    <p>Exemple court : <code>"{ll}, {f.}"</code> va convertir
+    <code>"Joe Doe"</code> en <code>"Doe, J."</code></p>
+
+    <p>Exemple long :</p>
+
+    <blockquote>
+        <p>Pour convertir :</p>
+
+        <p><code>"Joe Doe and Mary Jane and Bruce Bar and Arthur
+        Kay"</code></p>
+
+        <p>en</p>
+
+        <p><code>"Doe, J., Jane, M., Bar, B. and Kay,
+        A."</code></p>
+
+        <p>vous devrez utiliser</p>
+
+        <p><code>1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll},
+        {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll},
+        {f}.</code></p>
+    </blockquote>
+
+    <p>Si quelqu'un souhaite écrire un meilleur didacticiel
+    sur ce sujet, envoyez un courriel sur l'une des listes de
+    diffusion de JabRef !</p>
+
+</body>
+</html>
diff --git a/src/help/fr/CustomImports.html b/src/help/fr/CustomImports.html
index 9772e43..571d58a 100644
--- a/src/help/fr/CustomImports.html
+++ b/src/help/fr/CustomImports.html
@@ -1,187 +1,187 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Filtres d'importation personnalisés</h1>
-
-    <p>JabRef vous permet de définir et d'utiliser vos
-    propres formats d'importation, d'une façon très
-    similaire aux filtres d'importation standard qui sont
-    définis. Un filtre d'importation est défini par
-    une ou plusieurs <i>classes</i> Java qui analyse le contenu
-    d'un fichier à partir d'un flux d'entrée et
-    crée des entrées BibTeX. Ainsi, avec un peu de
-    programmation de base en Java, vous pouvez ajouter un format
-    d'importation correspondant à votre source de
-    références favorite ou enregistrer une version
-    améliorée d'un format d'importation existant. De
-    plus, cela vous permet d'ajouter des formats d'importation
-    personnalisés compilés que vous pourriez obtenir
-    à partir de SourceForge (par exemple) sans avoir
-    à recompiler JabRef (voir plus bas "Partager votre
-    travail").</p>
-
-    <p>Les formats d'importation personnalisés sont
-    prioritaires sur les formats d'importation standard. De cette
-    façon, vous pouvez remplacer les formats d'importations
-    existants pour les fonctions d'auto-détection et de
-    ligne de commande de JabRef. Les formats d'importation
-    personnalisés sont classés par nom.</p>
-
-    <h2>Ajouter un filtre d'importation personnalisé</h2>
-
-    <p>Assurez-vous que vous avez un filtre d'importation
-    personnalisé compilé (un ou plusieurs fichiers
-    <code>.class</code> sont décrits ci-dessous) et que les
-    fichiers de classe soient dans la structure des
-    répertoires selon la structure de leur paquetage. Pour
-    ajouter un nouveau filtre d'importation personnalisé,
-    ouvrez la boîte de dialogue <b>Options -> Gérer
-    les importations personnalisées</b>, et cliquez 
-    <b>Ajouter à partir du répertoire</b>. Une
-    fenêtre de sélection de fichier apparaîtra,
-    vous permettant de sélectionner le chemin de classe de
-    votre filtre d'importation, c'est à dire le
-    répertoire où se trouve le répertoire
-    supérieur de votre structure de paquetage. Vous ouvrirez
-    autant de  fenêtres que nécessaire pour
-    sélectionner votre fichier de classe de filtre
-    d'importation, lequel doit dériver de
-    <code>ImportFormat</code>. Cela permettra ainsi d'indiquer le
-    chemin complet d'accès au fichier de classe. En cliquant
-    sur <b>Sélectionner une nouvelle sous-classe de format
-    d'importation</b>, votre nouveau filtre d'importation
-    apparaîtra dans la liste des filtres d'importation
-    personnalisés. Tous les filtres d'importations
-    personnalisés apparaîtront dans le menu <b>Fichier
-    -> Importer -> Filtres d'importation
-    personnalisés</b> et <b>Fichier -> Importer et
-    joindre -> Filtres d'importation personnalisés</b> de
-    la fenêtre de JabRef.</p>
-
-    <p>S'il vous plaît, notez que si vous déplacez la
-    classe vers un autre répertoire, vous aurez à
-    supprimer et à ré-ajouter le filtre
-    d'importation. Si vous ajoutez un filtre d'importation
-    personnalisé sous un nom qui existe déjà,
-    le filtre d'importation existant sera remplacé. De plus,
-    dans certains cas, il est possible de mettre à jour un
-    filtre d'importation personnali sé existant sans
-    redémarrer JabRef (lorsque le filtre d'importation n'est
-    pas dans le chemin de classe). Cependant, nous recommandons de
-    redémarrer JabRef après la mise à jour
-    d'un filtre d'importation personnalisé. Vous pouvez
-    aussi ajouter des filtres d'importation contenu dans un fichier
-    ZIP ou JAR ; sélectionnez simplement l'archive Zip
-    ou Jar, puis l'entrée (fichier de classe) qui correspond
-    au nouveau filtre d'importation.</p>
-
-    <h2>Créer un filtre d'importation</h2>
-
-    <p>Pour des exemples
-    et quelques fichiers utiles sur la façon de construire
-    vos propres filtres d'importation, consultez s'il vous
-    plaît la page de téléchargement.</p>
-
-    <h3>Un exemple simple</h3>
-
-    <p>Supposons que vous vouliez importer des fichiers de la forme
-    suivante :</p>
-    <pre>
-1936;John Maynard Keynes;The General Theory of Employment, Interest and Money
-2003;Boldrin & Levine;Case Against Intellectual Monopoly
-2004;ROBERT HUNT AND JAMES BESSEN;The Software Patent Experiment
-</pre>
-
-    <p>Dans votre outil de développement ou éditeur
-    de texte préféré, créez une classe
-    dérivée de <code>ImportFormat</code> qui
-    implémente les méthodes
-    <code>getFormatName()</code>, <code>isRecognizedFormat</code>
-    and <code>importEntries()</code>. En voici un
-    exemple :</p>
-    <pre>
-import java.io.*;
-import java.util.*;
-import net.sf.jabref.*;
-import net.sf.jabref.imports.ImportFormat;
-import net.sf.jabref.imports.ImportFormatReader;
-
-public class SimpleCsvImporter extends ImportFormat {
-
-  public String getFormatName() {
-    return "Simple CSV Importer";
-  }
-
-  public boolean isRecognizedFormat(InputStream stream) throws IOException {
-    return true; // ceci est déconseillé sauf pour les besoins de la démonstration
-  }
-
-  public List importEntries(InputStream stream) throws IOException {
-        ArrayList bibitems = new ArrayList();
-    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-
-    String line = in.readLine();
-    while (line != null) {
-      if (!"".equals(line.trim())) {
-        String[] fields = line.split(";");
-        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
-        be.setType(BibtexEntryType.getType("techreport"));
-        be.setField("year", fields[0]);
-        be.setField("author", fields[1]);
-        be.setField("title", fields[2]);
-        bibitems.add(be);
-        line = in.readLine();
-      }
-    }
-        return bibitems;
-  }
-}
-</pre>
-
-    <p>Notez que l'exemple est dans le paquetage par défaut.
-    Supposez que vous l'avez sauvé sous
-    <code>/mypath/SimpleCsvImporter.java</code>. Supposez aussi que
-    JabRef-2.0.jar est dans le même répertoire que
-    <code>SimpleCsvImporter.java</code> et que Java est dans votre
-    chemin d'exécutables. Compilez-le en utilisant par
-    exemple JSDK 1.4 avec</p>
-    <pre>
-javac -classpath JabRef-2.0.jar SimpleCsvImporter.java
-</pre>A présent il doit y avoir un fichier
-<code>/mypath/SimpleCsvImporter.class</code>.
-
-    <p>Dans JabRef, ouvrez <b>Options -> Gérer les
-    importations personnalisées</b>, et cliquez sur
-    <b>Ajouter à partir du répertoire</b>. Allez dans
-    <code>/mypath</code> et cliquez le bouton
-    <b>Sélectionner...</b>. Sélectionnez
-    <code>SimpleCsvImporter.class</code> et cliquez sur le bouton
-    <b>Sélectionner...</b>. Votre filtre d'importation
-    devrait maintenant apparaître dans la liste des filtres
-    d'importation personnalisés sous le nom "Simple CSV
-    Importer" et, après avoir cliqué sur
-    <b>Fermer</b>, aussi dans les menus <b>Fichier -> Importer
-    -> Filtres d'importation personnalisés</b> et
-    <b>Fichier -> Importer et joindre -> Filtres
-    d'importation personnalisés</b> de la fenêtre de
-    JabRef.</p>
-
-    <h2>Partager votre travail</h2>
-
-    <p>Avec des fichiers de filtres d'importation
-    personnalisés, il est vraiment simple de partager des
-    formats d'importation personnalisés entre utilisateurs.
-    Si vous écrivez un filtre d'importation pour un format
-    non supporté par JabRef, ou l'amélioration d'un
-    filtre existant, nous vous encourageons à soumettre
-    votre travail sur notre page SourceForge.net. Nous serons
-    heureux de distribuer la collection des fichiers d'importation
-    soumis, ou d'en ajouter à la sélection de filtres
-    d'importation standard.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Filtres d'importation personnalisés</h1>
+
+    <p>JabRef vous permet de définir et d'utiliser vos
+    propres formats d'importation, d'une façon très
+    similaire aux filtres d'importation standard qui sont
+    définis. Un filtre d'importation est défini par
+    une ou plusieurs <i>classes</i> Java qui analyse le contenu
+    d'un fichier à partir d'un flux d'entrée et
+    crée des entrées BibTeX. Ainsi, avec un peu de
+    programmation de base en Java, vous pouvez ajouter un format
+    d'importation correspondant à votre source de
+    références favorite ou enregistrer une version
+    améliorée d'un format d'importation existant. De
+    plus, cela vous permet d'ajouter des formats d'importation
+    personnalisés compilés que vous pourriez obtenir
+    à partir de SourceForge (par exemple) sans avoir
+    à recompiler JabRef (voir plus bas "Partager votre
+    travail").</p>
+
+    <p>Les formats d'importation personnalisés sont
+    prioritaires sur les formats d'importation standard. De cette
+    façon, vous pouvez remplacer les formats d'importations
+    existants pour les fonctions d'auto-détection et de
+    ligne de commande de JabRef. Les formats d'importation
+    personnalisés sont classés par nom.</p>
+
+    <h2>Ajouter un filtre d'importation personnalisé</h2>
+
+    <p>Assurez-vous que vous avez un filtre d'importation
+    personnalisé compilé (un ou plusieurs fichiers
+    <code>.class</code> sont décrits ci-dessous) et que les
+    fichiers de classe soient dans la structure des
+    répertoires selon la structure de leur paquetage. Pour
+    ajouter un nouveau filtre d'importation personnalisé,
+    ouvrez la boîte de dialogue <b>Options -> Gérer
+    les importations personnalisées</b>, et cliquez 
+    <b>Ajouter à partir du répertoire</b>. Une
+    fenêtre de sélection de fichier apparaîtra,
+    vous permettant de sélectionner le chemin de classe de
+    votre filtre d'importation, c'est à dire le
+    répertoire où se trouve le répertoire
+    supérieur de votre structure de paquetage. Vous ouvrirez
+    autant de  fenêtres que nécessaire pour
+    sélectionner votre fichier de classe de filtre
+    d'importation, lequel doit dériver de
+    <code>ImportFormat</code>. Cela permettra ainsi d'indiquer le
+    chemin complet d'accès au fichier de classe. En cliquant
+    sur <b>Sélectionner une nouvelle sous-classe de format
+    d'importation</b>, votre nouveau filtre d'importation
+    apparaîtra dans la liste des filtres d'importation
+    personnalisés. Tous les filtres d'importations
+    personnalisés apparaîtront dans le menu <b>Fichier
+    -> Importer -> Filtres d'importation
+    personnalisés</b> et <b>Fichier -> Importer et
+    joindre -> Filtres d'importation personnalisés</b> de
+    la fenêtre de JabRef.</p>
+
+    <p>S'il vous plaît, notez que si vous déplacez la
+    classe vers un autre répertoire, vous aurez à
+    supprimer et à ré-ajouter le filtre
+    d'importation. Si vous ajoutez un filtre d'importation
+    personnalisé sous un nom qui existe déjà,
+    le filtre d'importation existant sera remplacé. De plus,
+    dans certains cas, il est possible de mettre à jour un
+    filtre d'importation personnali sé existant sans
+    redémarrer JabRef (lorsque le filtre d'importation n'est
+    pas dans le chemin de classe). Cependant, nous recommandons de
+    redémarrer JabRef après la mise à jour
+    d'un filtre d'importation personnalisé. Vous pouvez
+    aussi ajouter des filtres d'importation contenu dans un fichier
+    ZIP ou JAR ; sélectionnez simplement l'archive Zip
+    ou Jar, puis l'entrée (fichier de classe) qui correspond
+    au nouveau filtre d'importation.</p>
+
+    <h2>Créer un filtre d'importation</h2>
+
+    <p>Pour des exemples
+    et quelques fichiers utiles sur la façon de construire
+    vos propres filtres d'importation, consultez s'il vous
+    plaît la page de téléchargement.</p>
+
+    <h3>Un exemple simple</h3>
+
+    <p>Supposons que vous vouliez importer des fichiers de la forme
+    suivante :</p>
+    <pre>
+1936;John Maynard Keynes;The General Theory of Employment, Interest and Money
+2003;Boldrin & Levine;Case Against Intellectual Monopoly
+2004;ROBERT HUNT AND JAMES BESSEN;The Software Patent Experiment
+</pre>
+
+    <p>Dans votre outil de développement ou éditeur
+    de texte préféré, créez une classe
+    dérivée de <code>ImportFormat</code> qui
+    implémente les méthodes
+    <code>getFormatName()</code>, <code>isRecognizedFormat</code>
+    and <code>importEntries()</code>. En voici un
+    exemple :</p>
+    <pre>
+import java.io.*;
+import java.util.*;
+import net.sf.jabref.*;
+import net.sf.jabref.imports.ImportFormat;
+import net.sf.jabref.imports.ImportFormatReader;
+
+public class SimpleCsvImporter extends ImportFormat {
+
+  public String getFormatName() {
+    return "Simple CSV Importer";
+  }
+
+  public boolean isRecognizedFormat(InputStream stream) throws IOException {
+    return true; // ceci est déconseillé sauf pour les besoins de la démonstration
+  }
+
+  public List importEntries(InputStream stream) throws IOException {
+        ArrayList bibitems = new ArrayList();
+    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+
+    String line = in.readLine();
+    while (line != null) {
+      if (!"".equals(line.trim())) {
+        String[] fields = line.split(";");
+        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
+        be.setType(BibtexEntryType.getType("techreport"));
+        be.setField("year", fields[0]);
+        be.setField("author", fields[1]);
+        be.setField("title", fields[2]);
+        bibitems.add(be);
+        line = in.readLine();
+      }
+    }
+        return bibitems;
+  }
+}
+</pre>
+
+    <p>Notez que l'exemple est dans le paquetage par défaut.
+    Supposez que vous l'avez sauvé sous
+    <code>/mypath/SimpleCsvImporter.java</code>. Supposez aussi que
+    JabRef-2.0.jar est dans le même répertoire que
+    <code>SimpleCsvImporter.java</code> et que Java est dans votre
+    chemin d'exécutables. Compilez-le en utilisant par
+    exemple JSDK 1.4 avec</p>
+    <pre>
+javac -classpath JabRef-2.0.jar SimpleCsvImporter.java
+</pre>A présent il doit y avoir un fichier
+<code>/mypath/SimpleCsvImporter.class</code>.
+
+    <p>Dans JabRef, ouvrez <b>Options -> Gérer les
+    importations personnalisées</b>, et cliquez sur
+    <b>Ajouter à partir du répertoire</b>. Allez dans
+    <code>/mypath</code> et cliquez le bouton
+    <b>Sélectionner...</b>. Sélectionnez
+    <code>SimpleCsvImporter.class</code> et cliquez sur le bouton
+    <b>Sélectionner...</b>. Votre filtre d'importation
+    devrait maintenant apparaître dans la liste des filtres
+    d'importation personnalisés sous le nom "Simple CSV
+    Importer" et, après avoir cliqué sur
+    <b>Fermer</b>, aussi dans les menus <b>Fichier -> Importer
+    -> Filtres d'importation personnalisés</b> et
+    <b>Fichier -> Importer et joindre -> Filtres
+    d'importation personnalisés</b> de la fenêtre de
+    JabRef.</p>
+
+    <h2>Partager votre travail</h2>
+
+    <p>Avec des fichiers de filtres d'importation
+    personnalisés, il est vraiment simple de partager des
+    formats d'importation personnalisés entre utilisateurs.
+    Si vous écrivez un filtre d'importation pour un format
+    non supporté par JabRef, ou l'amélioration d'un
+    filtre existant, nous vous encourageons à soumettre
+    votre travail sur notre page SourceForge.net. Nous serons
+    heureux de distribuer la collection des fichiers d'importation
+    soumis, ou d'en ajouter à la sélection de filtres
+    d'importation standard.</p>
+</body>
+</html>
diff --git a/src/help/fr/DOItoBibTeXHelp.html b/src/help/fr/DOItoBibTeXHelp.html
index 476927f..e5084d9 100644
--- a/src/help/fr/DOItoBibTeXHelp.html
+++ b/src/help/fr/DOItoBibTeXHelp.html
@@ -1,24 +1,24 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Récupération d'entrées en utilisant
-         l'identifiant d'objet numérique (DOI)</h1>
-
-    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> recherche Web</b>,
-    et l'interface de recherche s'affichera dans le panneau latéral.
-    Sélectionnez <b>DOI vers BibTeX</b> dans le menu déroulant.</p>
-
-    <p>Ce moteur de recherche utilise
-    <a href="http://dx.doi.org/">http://dx.doi.org/</a>
-    pour convertir un DOI en une entrée BibTeX.</p>
-
-    <p>Entrer le DOI dans le champ de recherche et presser sur <b>Entrer</b>
-        ou sur le bouton <b>Recherche</b>.
-        L'entrée sera récupérée et ajoutée à votre base actuellement active.
-        En cas de survenue d'une erreur, elle s'affichera dans une fenêtre.</p>
-
-</body>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Récupération d'entrées en utilisant
+         l'identifiant d'objet numérique (DOI)</h1>
+
+    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> recherche Web</b>,
+    et l'interface de recherche s'affichera dans le panneau latéral.
+    Sélectionnez <b>DOI vers BibTeX</b> dans le menu déroulant.</p>
+
+    <p>Ce moteur de recherche utilise
+    <a href="http://dx.doi.org/">http://dx.doi.org/</a>
+    pour convertir un DOI en une entrée BibTeX.</p>
+
+    <p>Entrer le DOI dans le champ de recherche et presser sur <b>Entrer</b>
+        ou sur le bouton <b>Recherche</b>.
+        L'entrée sera récupérée et ajoutée à votre base actuellement active.
+        En cas de survenue d'une erreur, elle s'affichera dans une fenêtre.</p>
+
+</body>
 </html>
\ No newline at end of file
diff --git a/src/help/fr/DatabaseProperties.html b/src/help/fr/DatabaseProperties.html
index 0750fe2..817b23c 100644
--- a/src/help/fr/DatabaseProperties.html
+++ b/src/help/fr/DatabaseProperties.html
@@ -1,49 +1,49 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Propriétés de la base de données.</h1>
-
-<p><em>Se configurent à partir de la fenêtre principale en sélectionnant <b>Fichier -> Propriétés de la base de données</b></em></p>
-
-La fenêtre des propriétés de la base de données vous permet de configurer certains paramètres spécifiques à la base de données.
-
-<h2>Encodage de la base de données</h2>
-
-<p>Ce paramètre détermine quel encodage de caractères JabRef va utiliser quand il écrira cette base
-sur le disque. Changer ce paramètre supplantera, pour cette base, la configuration indiquée dans les préférences.
-JabRef spécifie l'encodage dans les premières lignes du fichier bib afin de pouvoir
-utiliser le bon encodage lors de la prochaine ouverture du fichier.</p>
-
-<h2>Remplacer les répertoires par défaut</h2>
-
-<p>Ces paramètres sont utilisés pour spécifier dans quel répertoire chercher les fichiers liés (spécifiés dans le champ <em>File</em>) et pour les anciens liens PDF/PS (les champs <em>pdf</em>
-et <em>ps</em> étaient utilisés dans les versions de JabRef inférieures à la version 2.3, mais devraient être
-remplacés par les fichiers liés du champ "File").</p>
-
-<p>Des chemins de répertoires relatifs peuvent être spécifiés. Cela signifie que la localisation des fichiers sera
-interprétée par rapport à la localisation du fichier bib. Paramétrer le répertoire "." (sans les guillemets) signifie
-que les fichiers doivent se trouver dans le même répertoire que le fichier bib.</p>
-
-<p>Ces paramètres supplantent les répertoires spécifiés dans la fenêtre de préférence (onglet "Programmes externes"). Si
-aucune valeur n'est spécifiée, les répertoires par défaut seront utilisés.</p>
-
-<h2>Protection de la base de données</h2>
-
-<p>Ce paramètre vous permet d'obliger la relecture des changements externes avant que la base de données ne soit
-sauvée. Si cette protection n'est pas activée, les utilisateurs pourront sauver la base même si les
-autres utilisateurs ont effectués des changements dans le fichier, sans passer en revue les changements - un message
-leur indiquera cependant que des changements ont été effectués. Quand la protection est activée, les utilisateurs
-pourront sauver la base uniquement après avoir parcouru et fusionné les changements externes (cependant, l'utilisateur
-pourra annuler des changements individuels au cours de sa relecture).</p>
-
-<p><b>Note :</b> Ceci n'est pas une fonction de sécurité, mais juste une façon d'éviter que des utilisateurs
-écrasent par inadvertance les changements effectués par d'autres utilisateurs. Cette fonction ne protège pas votre
-base de données contre des utilisateurs indélicats.</p>
-
-</body>
-</html> 
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Propriétés de la base de données.</h1>
+
+<p><em>Se configurent à partir de la fenêtre principale en sélectionnant <b>Fichier -> Propriétés de la base de données</b></em></p>
+
+La fenêtre des propriétés de la base de données vous permet de configurer certains paramètres spécifiques à la base de données.
+
+<h2>Encodage de la base de données</h2>
+
+<p>Ce paramètre détermine quel encodage de caractères JabRef va utiliser quand il écrira cette base
+sur le disque. Changer ce paramètre supplantera, pour cette base, la configuration indiquée dans les préférences.
+JabRef spécifie l'encodage dans les premières lignes du fichier bib afin de pouvoir
+utiliser le bon encodage lors de la prochaine ouverture du fichier.</p>
+
+<h2>Remplacer les répertoires par défaut</h2>
+
+<p>Ces paramètres sont utilisés pour spécifier dans quel répertoire chercher les fichiers liés (spécifiés dans le champ <em>File</em>) et pour les anciens liens PDF/PS (les champs <em>pdf</em>
+et <em>ps</em> étaient utilisés dans les versions de JabRef inférieures à la version 2.3, mais devraient être
+remplacés par les fichiers liés du champ "File").</p>
+
+<p>Des chemins de répertoires relatifs peuvent être spécifiés. Cela signifie que la localisation des fichiers sera
+interprétée par rapport à la localisation du fichier bib. Paramétrer le répertoire "." (sans les guillemets) signifie
+que les fichiers doivent se trouver dans le même répertoire que le fichier bib.</p>
+
+<p>Ces paramètres supplantent les répertoires spécifiés dans la fenêtre de préférence (onglet "Programmes externes"). Si
+aucune valeur n'est spécifiée, les répertoires par défaut seront utilisés.</p>
+
+<h2>Protection de la base de données</h2>
+
+<p>Ce paramètre vous permet d'obliger la relecture des changements externes avant que la base de données ne soit
+sauvée. Si cette protection n'est pas activée, les utilisateurs pourront sauver la base même si les
+autres utilisateurs ont effectués des changements dans le fichier, sans passer en revue les changements - un message
+leur indiquera cependant que des changements ont été effectués. Quand la protection est activée, les utilisateurs
+pourront sauver la base uniquement après avoir parcouru et fusionné les changements externes (cependant, l'utilisateur
+pourra annuler des changements individuels au cours de sa relecture).</p>
+
+<p><b>Note :</b> Ceci n'est pas une fonction de sécurité, mais juste une façon d'éviter que des utilisateurs
+écrasent par inadvertance les changements effectués par d'autres utilisateurs. Cette fonction ne protège pas votre
+base de données contre des utilisateurs indélicats.</p>
+
+</body>
+</html> 
diff --git a/src/help/fr/DiVAtoBibTeXHelp.html b/src/help/fr/DiVAtoBibTeXHelp.html
index c45da85..12e8e8e 100644
--- a/src/help/fr/DiVAtoBibTeXHelp.html
+++ b/src/help/fr/DiVAtoBibTeXHelp.html
@@ -1,26 +1,26 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Récupération d'entrées en utilisant DiVA</h1>
-            
-    <p><a href="http://www.diva-portal.org/">DiVA (Digitala Vetenskapliga Arkivet)</a>
-        est une base de données de publications provenant d'environ
-        <a href="http://www.diva-portal.org/smash/aboutdiva.jsf">30 universités
-            et établissements d'enseignement supérieur suédois</a>.
-        
-    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> recherche Web</b>,
-    et l'interface de recherche s'affichera dans le panneau latéral.
-    Sélectionnez <b>DiVA</b> dans le menu déroulant.</p>
-    
-    <p>Entrer l'identifiant DiVA, par exemple <b>diva2:260746</b>,
-    dans le champ de recherche et presser sur <b>Entrer</b>
-    ou sur le bouton <b>Recherche</b>.
-    L'entrée sera récupérée et ajoutée à
-    votre base actuellement active.
-    En cas de survenue d'une erreur, elle s'affichera dans une fenêtre.</p>
-    
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Récupération d'entrées en utilisant DiVA</h1>
+            
+    <p><a href="http://www.diva-portal.org/">DiVA (Digitala Vetenskapliga Arkivet)</a>
+        est une base de données de publications provenant d'environ
+        <a href="http://www.diva-portal.org/smash/aboutdiva.jsf">30 universités
+            et établissements d'enseignement supérieur suédois</a>.
+        
+    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> recherche Web</b>,
+    et l'interface de recherche s'affichera dans le panneau latéral.
+    Sélectionnez <b>DiVA</b> dans le menu déroulant.</p>
+    
+    <p>Entrer l'identifiant DiVA, par exemple <b>diva2:260746</b>,
+    dans le champ de recherche et presser sur <b>Entrer</b>
+    ou sur le bouton <b>Recherche</b>.
+    L'entrée sera récupérée et ajoutée à
+    votre base actuellement active.
+    En cas de survenue d'une erreur, elle s'affichera dans une fenêtre.</p>
+    
+</body>
+</html>
diff --git a/src/help/fr/EndNoteFilters.html b/src/help/fr/EndNoteFilters.html
index 2dbe56a..7c2b439 100644
--- a/src/help/fr/EndNoteFilters.html
+++ b/src/help/fr/EndNoteFilters.html
@@ -1,105 +1,105 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
- />
-
-    <h1>Filtre d'exportation EndNote</h1>
-
-    <h2>Exportation à partir de JabRef</h2>
-
-    <p>JabRef peut
-    exporter des bases de données dans des fichiers lisibles
-    par EndNote. Pour utiliser cette fonction, choisissez
-    <b>Fichier -> Export</b>, choisissez le type de fichier
-    <b>Endnote (*.txt)</b> et spécifiez le nom du fichier
-    d'exportation.</p>
-
-    <h2>Importer dans EndNote</h2>
-
-    <p>Le fichier par défaut
-    d'importation d'EndNote ne traite pas proprement les auteurs ou
-    les éditeurs multiples. Il y a deux façons de
-    contourner cela :</p>
-
-    <ol>
-        <li>Utiliser le filtre interne et corriger ensuite le
-        fichier. Pour ouvrir le fichier dans EndNote, créez
-        une nouvelle base de données ou ouvrez une ancienne
-        base de données dans EndNote. Ensuite,
-        sélectionnez <b>Fichier -> Importer</b>, cliquer
-        sur <b>Choisir le filtre</b>, puis sélectionnez le
-        fichier exporté et cliquez sur <b>Choisir</b>.
-        Cliquez sur <b>Options d'importation</b> et
-        sélectionnez <b>Importation EndNote</b>. Cliquez sur
-        <b>Importer</b> pour démarrer l'importation.
-        Après l'importation, sélectionnez
-        <b>Edition-> Changer le texte</b>. Changez <b>N'importe
-        quel champ</b> en <b>Author</b>. Entrez " and " à
-        l'intérieur du champ de recherche (sans les
-        guillemets). Entrez un retour chariot dans le champ
-        Remplacer (option-return pour Mac OS X, ctrl-return pour
-        Windows XP). Cliquez sur <b>Remplacer</b>.
-        Répétez avec le champ <b>Secondary
-        Author</b>. [NdT: difficile à traduire sans avoir
-        EndNote... oui]</li>
-
-        <li>Installer le <i>filtre d'importation d'EndNote depuis
-        JabRef</i> dans le <i>EndNote Extras</i>. Suivez les
-        instructions dans la section <i>Utilisation
-        avancée</i> ci-dessous. Pour ouvrir le fichier dans
-        EndNote, créez une nouvelle base de données
-        ou ouvrez une ancienne base de données dans EndNote.
-        Ensuite, sélectionnez <b>Fichier -> Importer</b>,
-        cliquez sur <b>Choisir le filtre</b>, puis
-        sélectionnez le fichier exporté et cliquez
-        sur <b>Choisir</b>. Cliquez sur <b>Options
-        d'importation</b> et sélectionnez <b>Filtre
-        d'importation d'EndNote depuis JabRef</b> (s'il n'est pas
-        présent, sélectionnez Autres filtres. S'il
-        n'apparaît toujours pas, il n'a pas été
-        installé correctement). Cliquer sur <b>Importer</b>
-        pour démarrer l'importation.</li>
-    </ol>
-
-    <h2>Notes</h2>
-
-    <p>Le filtre d'exportation EndNote fait correspondre
-    les types d'entrées BibTeX avec les types de
-    référence d'EndNote de la façon
-    suivante :</p>
-    <pre>
-Type d'entrée BibTeX -> Type de référence d'EndNote
----------------------------------------------------
-misc, other -> Generic
-unpublished -> Manuscript
-manual -> Computer Program
-article -> Journal Article
-book -> Book
-booklet -> Personal Communication
-inbook,incollection -> Book Section
-inproceedings -> Conference Proceedings
-techreport -> Report
-mastersthesis, phdthesis -> Thesis</pre>
-
-    <h2>Auteurs collectifs</h2>
-
-    <p>Par défaut, le filtre
-    d'exportation suppose que le contenu des champs author ou
-    editor qui sont dans des accolades sont des auteurs collectifs
-    et remplace les accolades par une virgule. Cependant, cela
-    signifie que les champs qui contiennent du code LaTeX entre
-    accolades seront supposés être des auteurs
-    collectifs et seront donc improprement formatés.</p>
-
-    <h2>Utilisation avancée : Suppléments
-    EndNote</h2>
-
-    Pour une meilleure interopérabilité entre Endnote et JabRef,
-    télécharger l'ensemble de filtres Endnote depuis la page de
-    ressources du site de JabRef.
-    
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+ />
+
+    <h1>Filtre d'exportation EndNote</h1>
+
+    <h2>Exportation à partir de JabRef</h2>
+
+    <p>JabRef peut
+    exporter des bases de données dans des fichiers lisibles
+    par EndNote. Pour utiliser cette fonction, choisissez
+    <b>Fichier -> Export</b>, choisissez le type de fichier
+    <b>Endnote (*.txt)</b> et spécifiez le nom du fichier
+    d'exportation.</p>
+
+    <h2>Importer dans EndNote</h2>
+
+    <p>Le fichier par défaut
+    d'importation d'EndNote ne traite pas proprement les auteurs ou
+    les éditeurs multiples. Il y a deux façons de
+    contourner cela :</p>
+
+    <ol>
+        <li>Utiliser le filtre interne et corriger ensuite le
+        fichier. Pour ouvrir le fichier dans EndNote, créez
+        une nouvelle base de données ou ouvrez une ancienne
+        base de données dans EndNote. Ensuite,
+        sélectionnez <b>Fichier -> Importer</b>, cliquer
+        sur <b>Choisir le filtre</b>, puis sélectionnez le
+        fichier exporté et cliquez sur <b>Choisir</b>.
+        Cliquez sur <b>Options d'importation</b> et
+        sélectionnez <b>Importation EndNote</b>. Cliquez sur
+        <b>Importer</b> pour démarrer l'importation.
+        Après l'importation, sélectionnez
+        <b>Edition-> Changer le texte</b>. Changez <b>N'importe
+        quel champ</b> en <b>Author</b>. Entrez " and " à
+        l'intérieur du champ de recherche (sans les
+        guillemets). Entrez un retour chariot dans le champ
+        Remplacer (option-return pour Mac OS X, ctrl-return pour
+        Windows XP). Cliquez sur <b>Remplacer</b>.
+        Répétez avec le champ <b>Secondary
+        Author</b>. [NdT: difficile à traduire sans avoir
+        EndNote... oui]</li>
+
+        <li>Installer le <i>filtre d'importation d'EndNote depuis
+        JabRef</i> dans le <i>EndNote Extras</i>. Suivez les
+        instructions dans la section <i>Utilisation
+        avancée</i> ci-dessous. Pour ouvrir le fichier dans
+        EndNote, créez une nouvelle base de données
+        ou ouvrez une ancienne base de données dans EndNote.
+        Ensuite, sélectionnez <b>Fichier -> Importer</b>,
+        cliquez sur <b>Choisir le filtre</b>, puis
+        sélectionnez le fichier exporté et cliquez
+        sur <b>Choisir</b>. Cliquez sur <b>Options
+        d'importation</b> et sélectionnez <b>Filtre
+        d'importation d'EndNote depuis JabRef</b> (s'il n'est pas
+        présent, sélectionnez Autres filtres. S'il
+        n'apparaît toujours pas, il n'a pas été
+        installé correctement). Cliquer sur <b>Importer</b>
+        pour démarrer l'importation.</li>
+    </ol>
+
+    <h2>Notes</h2>
+
+    <p>Le filtre d'exportation EndNote fait correspondre
+    les types d'entrées BibTeX avec les types de
+    référence d'EndNote de la façon
+    suivante :</p>
+    <pre>
+Type d'entrée BibTeX -> Type de référence d'EndNote
+---------------------------------------------------
+misc, other -> Generic
+unpublished -> Manuscript
+manual -> Computer Program
+article -> Journal Article
+book -> Book
+booklet -> Personal Communication
+inbook,incollection -> Book Section
+inproceedings -> Conference Proceedings
+techreport -> Report
+mastersthesis, phdthesis -> Thesis</pre>
+
+    <h2>Auteurs collectifs</h2>
+
+    <p>Par défaut, le filtre
+    d'exportation suppose que le contenu des champs author ou
+    editor qui sont dans des accolades sont des auteurs collectifs
+    et remplace les accolades par une virgule. Cependant, cela
+    signifie que les champs qui contiennent du code LaTeX entre
+    accolades seront supposés être des auteurs
+    collectifs et seront donc improprement formatés.</p>
+
+    <h2>Utilisation avancée : Suppléments
+    EndNote</h2>
+
+    Pour une meilleure interopérabilité entre Endnote et JabRef,
+    télécharger l'ensemble de filtres Endnote depuis la page de
+    ressources du site de JabRef.
+    
+</body>
+</html>
diff --git a/src/help/fr/EntryEditorHelp.html b/src/help/fr/EntryEditorHelp.html
index 94e9df4..883583a 100644
--- a/src/help/fr/EntryEditorHelp.html
+++ b/src/help/fr/EntryEditorHelp.html
@@ -1,160 +1,160 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>L'éditeur d'entrées</h1>
-
-    <p><em>On l'ouvre
-    à partir de la fenêtre principale en
-    double-cliquant n'importe où sur la ligne de
-    l'entrée, ou en sélectionnant l'entrée et
-    en appuyant sur ENTREE ou CTRL-D. L'éditeur d'entrées se
-    ferme en appuyant sur ESC.</em></p>
-
-    <p>Dans l'éditeur d'entrées, vous pouvez
-    spécifier toutes les informations pertinentes pour une
-    entrée donnée. L'éditeur d'entrées
-    vérifie le type de votre entrée et affiche tous
-    les champs qui sont requis ou optionnels pour que
-    <em>BibTeX</em> traite l'entrée. De plus, il y a
-    plusieurs champs, appelés <em>Champs
-    généraux</em>, qui sont communs à tous les
-    types d'entrées.</p>
-
-    <p>Vous pouvez personnaliser complètement les champs qui
-    doivent être considérés comme requis ou
-    optionnel pour chaque type d'entrée, ainsi que les
-    champs apparaissant dans l'onglet Général. Voir
-    <a href="CustomEntriesHelp.html">Personnaliser les types
-    d'entrées</a> pour plus d'informations à ce
-    sujet.</p>
-
-    <p>Pour des informations sur la façon de remplir les
-    champs, voir <a href="BibtexHelp.html">Aide sur BibTeX</a>.</p>
-
-    <h2>Le panneau à onglets de l'éditeur
-    d'entrées</h2>
-
-    <p>L'éditeur d'entrée contient
-    six onglets : <em>Champs requis</em>, <em>Champs
-    optionnels</em>, <em>Général</em>,
-    <em>Abstract</em>, <em>Review</em> et <em>Source BibTeX</em>.
-    Les onglets <em>Général</em>, <em>Abstract</em>
-    et <em>Review</em> peuvent être personnalisés
-    (voir <a href="GeneralFields.html">Personnalisation des champs
-    généraux</a> pour plus de détails). A
-    l'intérieur des trois premiers onglets, TAB et MAJ-TAB
-    sont utilisés pour naviguer entre les champs de texte.</p>
-
-    <p>Naviguez entre les onglets en cliquant sur les onglets ou en
-    utilisant les combinaisons de touches suivantes pour vous
-    déplacer vers la gauche ou la droite : CTRL-TAB ou
-    CTRL-PLUS affiche l'onglet à droite, et CTRL-MAJ-TAB ou
-    CTRL-MOINS affiche l'onglet à gauche. Vous pouvez aussi
-    afficher l'entrée précédente ou suivante
-    en appuyant respectivement sur CTRL-MAJ-DOWN ou CTRL-MAJ-UP,
-    ainsi qu'en cliquant sur les boutons de la barre d'outils de
-    l'éditeur d'entrées.</p>
-
-    <p>L'onglet <em>Source BibTeX</em> montre comment
-    l'entrée apparaîtra lorsque la base de
-    données sera sauvegardée au format
-    <em>BibTeX</em>. Si vous le souhaitez, vous pouvez
-    éditer la source <em>BibTeX</em> directement dans cet
-    onglet. Lorsque vous changez d'onglet, que vous appuyez sur
-    CTRL-S ou que vous fermez l'éditeur d'entrées,
-    JabRef essayera de traiter le contenu de l'onglet <em>Source
-    BibTeX</em>. S'il y a des problèmes, vous en serez
-    informé ; vous pourrez alors éditer à
-    nouveau votre entrée ou rétablir son contenu
-    initial. Si <strong>Par défaut, afficher l'onglet Source
-    BibTeX</strong> est coché dans les options
-    <strong>Général</strong> de la fenêtre de
-    dialogue <strong>Préférences</strong>, l'onglet
-    <em>Source BibTeX</em> sera affiché par défaut
-    chaque fois que l'éditeur d'entrées sera ouvert.
-    Si vous préférez éditer la source au lieu
-    d'utiliser les quatre autres onglets, vous devez cocher cette
-    option.</p>
-
-    <p><strong>Astuce :</strong> les champs <i>pdf</i> et
-    <i>url</i> supportent les opérations de
-    Glisser-Déplacer. Vous pouvez faire glisser une url
-    depuis votre navigateur. Ensuite, vous aurez le choix entre
-    insérer l'URL et télécharger le
-    fichier.</p>
-
-    <h2>Vérification de la cohérence des
-    champs</h2>
-
-    <p>Quand le contenu d'un champ est modifié,
-    JabRef vérifie que le nouveau contenu est acceptable.
-    Pour les champs qui sont utilisés par <em>BibTeX</em>,
-    le contenu est vérifié par rapport à
-    l'utilisation du caractère '#'. Le symbole dièse
-    doit <em>toujours</em> être utilisé par paires
-    (excepté pour la forme d'échappement '\#'),
-    encadrant le nom d'une chaîne <em>BibTeX</em> existante.
-    Notez que JabRef ne vérifie pas si la chaîne
-    <em>BibTeX</em> est vraiment définie (ce n'est pas
-    trivial, puisque le style <em>BibTeX</em> que vous utilisez
-    peut définir une série arbitraire de
-    chaînes dont JabRef n'a pas connaissance).</p>
-
-    <p>Si le contenu n'est pas valide, le champ sera affiché
-    en rouge, indiquant ainsi une erreur. Dans ce cas, le
-    changement ne sera pas sauvé.</p>
-
-    <h2>Autocomplétion de mot/nom</h2>
-
-    <p>L'éditeur d'entrée permet l'autocomplétion des mots.
-    Dans le fenêtre de dialogue Préférences vous pouvez activer ou
-    désactiver l'autocomplétion et choisir pour quels champs elle est
-    active.</p>
-
-    <p>Avec l'autocomplétion, JabRef enregistre tous les mots qui
-    apparaissent dans chacun des champs choisis au sein de votre
-    base de données. Dès que vous tapez le début d'un de ces mots,
-    il vous sera suggéré visuellement. Pour ignorer cette suggestion,
-    continuez simplement à taper. Pour accepter la suggestion, pressez
-    <em>ENTREE</em> ou utilisez les flèches du clavier ou d'autres
-    touches pour supprimer la boîte de sélection autour des caractères
-    suggérés.</p>
-
-    <p><em>Note :
-    </em> Les mots pris en compte pour la complétion sont seulement ceux
-    apparaissant, au sein de la base de données en cours, dans le même
-    champ que celui que vous êtes en train d'éditer. Il existe de
-    nombreuses façons de mettre en place cette fonctionnalité et si vous
-    pensez qu'il devrait être implémenté différemment, nous apprécierons
-    vos suggestions !</p>
-
-    <h2>Copier une clef <em>BibTeX</em> en incluant la commande de citation.</h2>
-
-    <p>En appuyant CTRL-K ou le bouton 'clef' copie la clef <em>BibTeX</em>
-    de votre entrée et la commande vers le presse-papier.</p>
-
-    <h2>Copier une clef <em>BibTeX</em></h2>
-
-    <p>En appuyant CTRL-SHIFT-K copie la clef <em>BibTeX</em>
-    de votre entrée vers le presse-papier.</p>
-
-    <h2>Génération automatique des clefs
-    <em>BibTeX</em></h2>
-
-    <p>Appuyez sur CTRL-G ou sur le bouton
-    'Créer la clef BibTeX' (la baguette magique) pour
-    générer automatiquement une clef <em>BibTeX</em>
-    à partir du contenu des champs requis.</p>
-
-    <p>Pour plus d'informations sur la façon dont JabRef
-    génère les clefs <em>BibTeX</em>, voir
-    <a href="LabelPatterns.html">Personnalisation du
-    générateur de clefs BibTeX</a>.</p>
-    
-</body>
-</html> 
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>L'éditeur d'entrées</h1>
+
+    <p><em>On l'ouvre
+    à partir de la fenêtre principale en
+    double-cliquant n'importe où sur la ligne de
+    l'entrée, ou en sélectionnant l'entrée et
+    en appuyant sur ENTREE ou CTRL-D. L'éditeur d'entrées se
+    ferme en appuyant sur ESC.</em></p>
+
+    <p>Dans l'éditeur d'entrées, vous pouvez
+    spécifier toutes les informations pertinentes pour une
+    entrée donnée. L'éditeur d'entrées
+    vérifie le type de votre entrée et affiche tous
+    les champs qui sont requis ou optionnels pour que
+    <em>BibTeX</em> traite l'entrée. De plus, il y a
+    plusieurs champs, appelés <em>Champs
+    généraux</em>, qui sont communs à tous les
+    types d'entrées.</p>
+
+    <p>Vous pouvez personnaliser complètement les champs qui
+    doivent être considérés comme requis ou
+    optionnel pour chaque type d'entrée, ainsi que les
+    champs apparaissant dans l'onglet Général. Voir
+    <a href="CustomEntriesHelp.html">Personnaliser les types
+    d'entrées</a> pour plus d'informations à ce
+    sujet.</p>
+
+    <p>Pour des informations sur la façon de remplir les
+    champs, voir <a href="BibtexHelp.html">Aide sur BibTeX</a>.</p>
+
+    <h2>Le panneau à onglets de l'éditeur
+    d'entrées</h2>
+
+    <p>L'éditeur d'entrée contient
+    six onglets : <em>Champs requis</em>, <em>Champs
+    optionnels</em>, <em>Général</em>,
+    <em>Abstract</em>, <em>Review</em> et <em>Source BibTeX</em>.
+    Les onglets <em>Général</em>, <em>Abstract</em>
+    et <em>Review</em> peuvent être personnalisés
+    (voir <a href="GeneralFields.html">Personnalisation des champs
+    généraux</a> pour plus de détails). A
+    l'intérieur des trois premiers onglets, TAB et MAJ-TAB
+    sont utilisés pour naviguer entre les champs de texte.</p>
+
+    <p>Naviguez entre les onglets en cliquant sur les onglets ou en
+    utilisant les combinaisons de touches suivantes pour vous
+    déplacer vers la gauche ou la droite : CTRL-TAB ou
+    CTRL-PLUS affiche l'onglet à droite, et CTRL-MAJ-TAB ou
+    CTRL-MOINS affiche l'onglet à gauche. Vous pouvez aussi
+    afficher l'entrée précédente ou suivante
+    en appuyant respectivement sur CTRL-MAJ-DOWN ou CTRL-MAJ-UP,
+    ainsi qu'en cliquant sur les boutons de la barre d'outils de
+    l'éditeur d'entrées.</p>
+
+    <p>L'onglet <em>Source BibTeX</em> montre comment
+    l'entrée apparaîtra lorsque la base de
+    données sera sauvegardée au format
+    <em>BibTeX</em>. Si vous le souhaitez, vous pouvez
+    éditer la source <em>BibTeX</em> directement dans cet
+    onglet. Lorsque vous changez d'onglet, que vous appuyez sur
+    CTRL-S ou que vous fermez l'éditeur d'entrées,
+    JabRef essayera de traiter le contenu de l'onglet <em>Source
+    BibTeX</em>. S'il y a des problèmes, vous en serez
+    informé ; vous pourrez alors éditer à
+    nouveau votre entrée ou rétablir son contenu
+    initial. Si <strong>Par défaut, afficher l'onglet Source
+    BibTeX</strong> est coché dans les options
+    <strong>Général</strong> de la fenêtre de
+    dialogue <strong>Préférences</strong>, l'onglet
+    <em>Source BibTeX</em> sera affiché par défaut
+    chaque fois que l'éditeur d'entrées sera ouvert.
+    Si vous préférez éditer la source au lieu
+    d'utiliser les quatre autres onglets, vous devez cocher cette
+    option.</p>
+
+    <p><strong>Astuce :</strong> les champs <i>pdf</i> et
+    <i>url</i> supportent les opérations de
+    Glisser-Déplacer. Vous pouvez faire glisser une url
+    depuis votre navigateur. Ensuite, vous aurez le choix entre
+    insérer l'URL et télécharger le
+    fichier.</p>
+
+    <h2>Vérification de la cohérence des
+    champs</h2>
+
+    <p>Quand le contenu d'un champ est modifié,
+    JabRef vérifie que le nouveau contenu est acceptable.
+    Pour les champs qui sont utilisés par <em>BibTeX</em>,
+    le contenu est vérifié par rapport à
+    l'utilisation du caractère '#'. Le symbole dièse
+    doit <em>toujours</em> être utilisé par paires
+    (excepté pour la forme d'échappement '\#'),
+    encadrant le nom d'une chaîne <em>BibTeX</em> existante.
+    Notez que JabRef ne vérifie pas si la chaîne
+    <em>BibTeX</em> est vraiment définie (ce n'est pas
+    trivial, puisque le style <em>BibTeX</em> que vous utilisez
+    peut définir une série arbitraire de
+    chaînes dont JabRef n'a pas connaissance).</p>
+
+    <p>Si le contenu n'est pas valide, le champ sera affiché
+    en rouge, indiquant ainsi une erreur. Dans ce cas, le
+    changement ne sera pas sauvé.</p>
+
+    <h2>Autocomplétion de mot/nom</h2>
+
+    <p>L'éditeur d'entrée permet l'autocomplétion des mots.
+    Dans le fenêtre de dialogue Préférences vous pouvez activer ou
+    désactiver l'autocomplétion et choisir pour quels champs elle est
+    active.</p>
+
+    <p>Avec l'autocomplétion, JabRef enregistre tous les mots qui
+    apparaissent dans chacun des champs choisis au sein de votre
+    base de données. Dès que vous tapez le début d'un de ces mots,
+    il vous sera suggéré visuellement. Pour ignorer cette suggestion,
+    continuez simplement à taper. Pour accepter la suggestion, pressez
+    <em>ENTREE</em> ou utilisez les flèches du clavier ou d'autres
+    touches pour supprimer la boîte de sélection autour des caractères
+    suggérés.</p>
+
+    <p><em>Note :
+    </em> Les mots pris en compte pour la complétion sont seulement ceux
+    apparaissant, au sein de la base de données en cours, dans le même
+    champ que celui que vous êtes en train d'éditer. Il existe de
+    nombreuses façons de mettre en place cette fonctionnalité et si vous
+    pensez qu'il devrait être implémenté différemment, nous apprécierons
+    vos suggestions !</p>
+
+    <h2>Copier une clef <em>BibTeX</em> en incluant la commande de citation.</h2>
+
+    <p>En appuyant CTRL-K ou le bouton 'clef' copie la clef <em>BibTeX</em>
+    de votre entrée et la commande vers le presse-papier.</p>
+
+    <h2>Copier une clef <em>BibTeX</em></h2>
+
+    <p>En appuyant CTRL-SHIFT-K copie la clef <em>BibTeX</em>
+    de votre entrée vers le presse-papier.</p>
+
+    <h2>Génération automatique des clefs
+    <em>BibTeX</em></h2>
+
+    <p>Appuyez sur CTRL-G ou sur le bouton
+    'Créer la clef BibTeX' (la baguette magique) pour
+    générer automatiquement une clef <em>BibTeX</em>
+    à partir du contenu des champs requis.</p>
+
+    <p>Pour plus d'informations sur la façon dont JabRef
+    génère les clefs <em>BibTeX</em>, voir
+    <a href="LabelPatterns.html">Personnalisation du
+    générateur de clefs BibTeX</a>.</p>
+    
+</body>
+</html> 
diff --git a/src/help/fr/ExternalFiles.html b/src/help/fr/ExternalFiles.html
index b5d7d9e..c7e6f45 100644
--- a/src/help/fr/ExternalFiles.html
+++ b/src/help/fr/ExternalFiles.html
@@ -1,181 +1,181 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Les liens PDF/PS/URL/DOI dans JabRef</h1>
-
-    <p><b>Note:</b>
-    JabRef 2.3 et suivants offrent un
-    <a href="FileLinks.html">système amélioré pour les liens vers les
-    fichiers externes</a>.</p>
-
-    <p>JabRef vous permet de lier vos entrées avec des
-    fichiers PDF ou PS stockés sur votre ordinateur, ainsi
-    que de créer des liens vers des documents sur internet
-    par l'intermédiaire d'une URL ou d'un identifiant
-    DOI.</p>
-
-    <h2>Configurer les visionneurs externes</h2>
-
-    <p>Le programme doit
-    savoir quels visionneurs externes utiliser pour les fichiers
-    PDF et PS ainsi que pour les pages internet. Ils sont par
-    défaut configurés avec des valeurs qui
-    fonctionnent probablement avec votre système
-    d'exploitation ; aussi, il est très possible que
-    vous n'ayez pas besoin de changer ces valeurs</p>
-
-    <p>Pour changer la configuration des visionneurs externes,
-    allez dans le menu <b>Options -> Préférences
-    -> Programmes externes</b>.</p>
-
-    <h2>Ouvrir des fichiers externes ou des liens</h2>
-
-    <p>Il y a
-    plusieurs façons d'ouvrir un fichier externe ou une page
-    internet. Dans l'éditeur d'entrées, vous pouvez
-    double-cliquer sur le texte du champ contenant le nom du
-    fichier, le DOI ou l'URL. Dans le tableau des entrées,
-    vous pouvez sélectionner une entrée et utiliser
-    le menu (<b>Outils/ Ouvrir PS ou PDF</b> et <b>Outils/ Ouvrir
-    URL ou DOI</b>), le raccourci clavier ou le menu contextuel
-    (avec un clic droit). Enfin, vous pouvez cliquer sur les
-    icônes PDF, PS, URL ou DOI de la barre d'outils.</p>
-
-    <p>Par défaut, le tableau des entrées contient
-    deux colonnes dans lesquelles des icônes s'affichent pour
-    les entrées possédant un lien vers un fichier
-    externe ou une URL. La seconde colonne du tableau montre les
-    icônes qui ouvrent les fichiers PDF et PS (uniquement le
-    fichier PDF si les deux fichiers sont présents), et la
-    troisième colonne montre les icônes ouvrant les
-    URL et les DOI (uniquement l'URL si les deux liens sont
-    présents). Vous ouvrez le fichier ou la page internet en
-    cliquant sur une de ces icônes. Vous pouvez
-    désactiver n'importe laquelle de ces fonctions en
-    utilisant le menu <b>Options/ Préférences ->
-    Table des entrées</b>.</p>
-
-    <p><b>Remarque:</b> Si le champ n'apparaît pas dans
-    l'éditeur d'entrée (dans l'onglet 'General'),
-    Vous pourriez avoir à
-    <a href="GeneralFields.html">personnaliser les champs
-    généraux</a>.</p>
-
-    <h2>Les répertoires PDF et PS principaux</h2>
-
-    <p>JabRef
-    permet de lier facilement les fichiers PDF et PS
-    à vos entrées. Pour
-    bénéficier de cette fonction, vous devez
-    définir dans le menu <b>Options ->
-    Préférences -> Programmes externes</b> vos
-    répertoires principaux pour les fichiers PDF et PS. Tous
-    les fichiers PDF et PS qui sont stockés dans (ou
-    en-dessous de) chacun de ces répertoires seront
-    référencés par un chemin relatif. Il vous
-    sera ainsi facile de déplacer les répertoires PDF
-    et PS principaux ou de partager votre base de données
-    avec d'autres utilisateurs situés en des points
-    différents du réseau.</p>
-
-    <p>De plus, si vous donnez à vos fichiers PDF et PS des
-    noms qui correspondent à la clef BibTeX des
-    entrées (plus '.pdf' ou '.ps'), JabRef sera capable de
-    rechercher dans vos répertoires principaux et leurs
-    sous-répertoires le bon fichier PDF ou PS. Lorsqu'un
-    fichier PDF ou PS (nommé correctement) est
-    déjà dans le répertoire principal, vous
-    accédez à cette fonction en cliquant sur le
-    bouton 'Auto' situé à coté des champs PDF
-    et PS de l'éditeur d'entrées. Si le fichier PDF
-    ou PS est trouvé, le champ sera immédiatement
-    rempli.</p>
-
-    <p>Si vous nommez un fichier PDF ou PS comme mentionné
-    ci-dessus, vous pourrez aussi ouvrir le fichier sans configurer
-    préalablement le champ PDF ou PS de l'entrée.
-    Cependant, dans ce cas, l'icône PDF ou PS
-    n'apparaîtra pas dans le tableau des entrées.</p>
-
-    <h2>Les répertoires PDF et PS
-    spécifiques à la base de
-    données</h2>
-
-    <p>Vous pouvez définir des répertoires PDF et PS
-    spécifiques à une base de données
-    (<b>Fichier -> Propriétés de la base de
-    données</b>). Ces répertoires remplacent alors
-    les répertoires principaux.</p>
-
-    <h2><a name="RegularExpressionSearch"
-       id="RegularExpressionSearch">Utiliser la recherche
-       d'expressions régulières pour les liaisons
-       automatiques</a></h2>
-
-    <p>Dans les sections précédentes, la fonction de
-    liaison automatique de JabRef était
-    décrite : si vous choisissiez des noms de fichiers
-    qui correspondaient à la clef BibTex suivi de
-    l'extension, JabRef était capable de trouver les
-    fichiers automatiquement.</p>
-
-    <p>A partir de JabRef 2.2, il est possible d'avoir une plus
-    grande flexibilité dans la forme du nom grâce
-    à l'utilisation d'une expression régulière
-    pour la recherche. Dans la plupart des cas, adapter
-    l'expression régulière donnée par
-    défaut devrait suffire.</p>
-
-    <p>Si vous ouvrez les préférences pour les
-    programmes externes (Options -> Préférences
-    -> Programmes externes), vous y trouverez une option
-    nommée "Rechercher l'expression
-    régulière". Cocher cette option vous permettra
-    d'entrer votre propre expression régulière pour
-    la recherche dans les répertoires PDF.</p>
-
-    <p>Voici la syntaxe à utiliser :</p>
-
-    <ul>
-        <li><code>*</code> - Rechercher dans tous les
-        sous-répertoires directs en excluant le
-        répertoire courant et tout autre
-        sous-répertoire.</li>
-
-        <li><code>**</code> - Rechercher récursivement dans
-        tous les sous-répertoires ET dans le
-        répertoire courant.</li>
-
-        <li><code>.</code> et <code>..</code> - Le
-        répertoire courant et le répertoire
-        parent.</li>
-
-        <li><code>[title]</code> - Toutes les expressions entre
-        crochets sont remplacées par le champ correspondant
-        dans l'entrée courante.</li>
-
-        <li><code>[extension]</code> - Remplacement par l'extension
-        de fichier du champ que vous utilisez.</li>
-
-        <li>Tout autre texte est interprété comme une
-        expression régulière. Mais attention :
-        vous devez remplacer chaque caractère anti-slash (\)
-        par deux anti-slashs (\\) afin d'éviter la confusion
-        avec un séparateur de répertoire .</li>
-    </ul>
-
-    <p>Par défaut, l'expression régulière de
-    recherche est <code>**/.*[bibtexkey].*\\.[extension]</code>.
-    Comme vous pouvez le voir cela effectuera la recherche dans
-    tous les sous-répertoires du répertoire
-    défini pour l'extension (par exemple dans le
-    répertoire PDF) de tout nom de fichier qui
-    possède la bonne extension et qui contient quelque part
-    la clef BibTeX.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Les liens PDF/PS/URL/DOI dans JabRef</h1>
+
+    <p><b>Note:</b>
+    JabRef 2.3 et suivants offrent un
+    <a href="FileLinks.html">système amélioré pour les liens vers les
+    fichiers externes</a>.</p>
+
+    <p>JabRef vous permet de lier vos entrées avec des
+    fichiers PDF ou PS stockés sur votre ordinateur, ainsi
+    que de créer des liens vers des documents sur internet
+    par l'intermédiaire d'une URL ou d'un identifiant
+    DOI.</p>
+
+    <h2>Configurer les visionneurs externes</h2>
+
+    <p>Le programme doit
+    savoir quels visionneurs externes utiliser pour les fichiers
+    PDF et PS ainsi que pour les pages internet. Ils sont par
+    défaut configurés avec des valeurs qui
+    fonctionnent probablement avec votre système
+    d'exploitation ; aussi, il est très possible que
+    vous n'ayez pas besoin de changer ces valeurs</p>
+
+    <p>Pour changer la configuration des visionneurs externes,
+    allez dans le menu <b>Options -> Préférences
+    -> Programmes externes</b>.</p>
+
+    <h2>Ouvrir des fichiers externes ou des liens</h2>
+
+    <p>Il y a
+    plusieurs façons d'ouvrir un fichier externe ou une page
+    internet. Dans l'éditeur d'entrées, vous pouvez
+    double-cliquer sur le texte du champ contenant le nom du
+    fichier, le DOI ou l'URL. Dans le tableau des entrées,
+    vous pouvez sélectionner une entrée et utiliser
+    le menu (<b>Outils/ Ouvrir PS ou PDF</b> et <b>Outils/ Ouvrir
+    URL ou DOI</b>), le raccourci clavier ou le menu contextuel
+    (avec un clic droit). Enfin, vous pouvez cliquer sur les
+    icônes PDF, PS, URL ou DOI de la barre d'outils.</p>
+
+    <p>Par défaut, le tableau des entrées contient
+    deux colonnes dans lesquelles des icônes s'affichent pour
+    les entrées possédant un lien vers un fichier
+    externe ou une URL. La seconde colonne du tableau montre les
+    icônes qui ouvrent les fichiers PDF et PS (uniquement le
+    fichier PDF si les deux fichiers sont présents), et la
+    troisième colonne montre les icônes ouvrant les
+    URL et les DOI (uniquement l'URL si les deux liens sont
+    présents). Vous ouvrez le fichier ou la page internet en
+    cliquant sur une de ces icônes. Vous pouvez
+    désactiver n'importe laquelle de ces fonctions en
+    utilisant le menu <b>Options/ Préférences ->
+    Table des entrées</b>.</p>
+
+    <p><b>Remarque:</b> Si le champ n'apparaît pas dans
+    l'éditeur d'entrée (dans l'onglet 'General'),
+    Vous pourriez avoir à
+    <a href="GeneralFields.html">personnaliser les champs
+    généraux</a>.</p>
+
+    <h2>Les répertoires PDF et PS principaux</h2>
+
+    <p>JabRef
+    permet de lier facilement les fichiers PDF et PS
+    à vos entrées. Pour
+    bénéficier de cette fonction, vous devez
+    définir dans le menu <b>Options ->
+    Préférences -> Programmes externes</b> vos
+    répertoires principaux pour les fichiers PDF et PS. Tous
+    les fichiers PDF et PS qui sont stockés dans (ou
+    en-dessous de) chacun de ces répertoires seront
+    référencés par un chemin relatif. Il vous
+    sera ainsi facile de déplacer les répertoires PDF
+    et PS principaux ou de partager votre base de données
+    avec d'autres utilisateurs situés en des points
+    différents du réseau.</p>
+
+    <p>De plus, si vous donnez à vos fichiers PDF et PS des
+    noms qui correspondent à la clef BibTeX des
+    entrées (plus '.pdf' ou '.ps'), JabRef sera capable de
+    rechercher dans vos répertoires principaux et leurs
+    sous-répertoires le bon fichier PDF ou PS. Lorsqu'un
+    fichier PDF ou PS (nommé correctement) est
+    déjà dans le répertoire principal, vous
+    accédez à cette fonction en cliquant sur le
+    bouton 'Auto' situé à coté des champs PDF
+    et PS de l'éditeur d'entrées. Si le fichier PDF
+    ou PS est trouvé, le champ sera immédiatement
+    rempli.</p>
+
+    <p>Si vous nommez un fichier PDF ou PS comme mentionné
+    ci-dessus, vous pourrez aussi ouvrir le fichier sans configurer
+    préalablement le champ PDF ou PS de l'entrée.
+    Cependant, dans ce cas, l'icône PDF ou PS
+    n'apparaîtra pas dans le tableau des entrées.</p>
+
+    <h2>Les répertoires PDF et PS
+    spécifiques à la base de
+    données</h2>
+
+    <p>Vous pouvez définir des répertoires PDF et PS
+    spécifiques à une base de données
+    (<b>Fichier -> Propriétés de la base de
+    données</b>). Ces répertoires remplacent alors
+    les répertoires principaux.</p>
+
+    <h2><a name="RegularExpressionSearch"
+       id="RegularExpressionSearch">Utiliser la recherche
+       d'expressions régulières pour les liaisons
+       automatiques</a></h2>
+
+    <p>Dans les sections précédentes, la fonction de
+    liaison automatique de JabRef était
+    décrite : si vous choisissiez des noms de fichiers
+    qui correspondaient à la clef BibTex suivi de
+    l'extension, JabRef était capable de trouver les
+    fichiers automatiquement.</p>
+
+    <p>A partir de JabRef 2.2, il est possible d'avoir une plus
+    grande flexibilité dans la forme du nom grâce
+    à l'utilisation d'une expression régulière
+    pour la recherche. Dans la plupart des cas, adapter
+    l'expression régulière donnée par
+    défaut devrait suffire.</p>
+
+    <p>Si vous ouvrez les préférences pour les
+    programmes externes (Options -> Préférences
+    -> Programmes externes), vous y trouverez une option
+    nommée "Rechercher l'expression
+    régulière". Cocher cette option vous permettra
+    d'entrer votre propre expression régulière pour
+    la recherche dans les répertoires PDF.</p>
+
+    <p>Voici la syntaxe à utiliser :</p>
+
+    <ul>
+        <li><code>*</code> - Rechercher dans tous les
+        sous-répertoires directs en excluant le
+        répertoire courant et tout autre
+        sous-répertoire.</li>
+
+        <li><code>**</code> - Rechercher récursivement dans
+        tous les sous-répertoires ET dans le
+        répertoire courant.</li>
+
+        <li><code>.</code> et <code>..</code> - Le
+        répertoire courant et le répertoire
+        parent.</li>
+
+        <li><code>[title]</code> - Toutes les expressions entre
+        crochets sont remplacées par le champ correspondant
+        dans l'entrée courante.</li>
+
+        <li><code>[extension]</code> - Remplacement par l'extension
+        de fichier du champ que vous utilisez.</li>
+
+        <li>Tout autre texte est interprété comme une
+        expression régulière. Mais attention :
+        vous devez remplacer chaque caractère anti-slash (\)
+        par deux anti-slashs (\\) afin d'éviter la confusion
+        avec un séparateur de répertoire .</li>
+    </ul>
+
+    <p>Par défaut, l'expression régulière de
+    recherche est <code>**/.*[bibtexkey].*\\.[extension]</code>.
+    Comme vous pouvez le voir cela effectuera la recherche dans
+    tous les sous-répertoires du répertoire
+    défini pour l'extension (par exemple dans le
+    répertoire PDF) de tout nom de fichier qui
+    possède la bonne extension et qui contient quelque part
+    la clef BibTeX.</p>
+</body>
+</html>
diff --git a/src/help/fr/FileLinks.html b/src/help/fr/FileLinks.html
index 8a4fb35..b81e642 100644
--- a/src/help/fr/FileLinks.html
+++ b/src/help/fr/FileLinks.html
@@ -1,123 +1,123 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Liens de fichier dans JabRef</h1>
-
-    <p>JabRef vous permet de lier
-    vos entrées avec des fichiers de n'importe quel type
-    stockés sur votre système, ainsi qu'avec des
-    documents sur internet sous forme d'une URL ou d'un identifiant
-    DOI. Chaque entrée peut contenir un nombre arbitraire de
-    liens de fichier et chaque fichier lié peut être
-    ouvert rapidement depuis JabRef.</p>
-
-    <p>En termes BibTeX, dans une entrée, les liens de
-    fichier sont encodés dans un unique champ. Cependant,
-    à l'intérieur de JabRef, ils apparaissent comme
-    une liste modifiable de liens à laquelle on
-    accède depuis l'éditeur d'entrées, comme
-    pour les autres champs BibTeX.</p>
-
-    <h2>Configurer les types de fichiers externes</h2>
-
-    <p>Pour chaque
-    lien de fichier, un type de fichier doit être choisi afin
-    de déterminer quel icône devra être
-    utilisé et quelle application devra être
-    appelée pour ouvrir le fichier. La liste des types de
-    fichier peut être affichée et éditée
-    en choisissant <b>Options -> Gérer les types de
-    fichiers externes</b> ou en cliquant sur le bouton
-    <b>Gérer les types de fichiers externes</b> dans
-    l'onglet <b>Programmes externes</b> des
-    préférences.</p>
-
-    <p>Un type de fichier est défini par un nom, un
-    icône, une extension de fichier et une application pour
-    afficher les fichiers. Sous Windows, le nom de l'application
-    peut être omis afin d'utiliser l'afficheur par
-    défaut de Windows.</p>
-
-    <h2>Ajouter des liens externes à une
-    entrée</h2>
-
-    <p>Si le champ "File" (fichier) est inclus dans les
-    <a href="GeneralFields.html">champs généraux</a>,
-    vous pouvez éditer la liste des liens externes d'une
-    entrée dans
-    l'<a href="EntryEditorHelp.html">éditeur
-    d'entrées</a>. L'éditeur d'entrée inclut
-    des boutons pour insérer, éditer et supprimer des
-    liens, ainsi que des boutons pour ré-ordonner la liste
-    de liens.</p>
-
-    <p>Si vous avez un fichier à l'intérieur ou en
-    aval de votre répertoire de fichiers (configuré
-    dans <b>Préférences -> Programmes externes
-    -> Liens vers les fichiers externes -> Répertoire
-    de fichiers principal</b>), si son extension correspondant
-    à l'un des types de fichiers externes définis, et
-    si son nom contient la clef d'une entrée BibTeX, le
-    fichier pourra être lié automatiquement en
-    cliquant sur le bouton <b>Auto</b> dans l'éditeur
-    d'entrées. Les règles décrivant les noms
-    de fichiers pouvant être liés automatiquement
-    à une clef BibTeX peuvent être configurées
-    dans <b>Préférences -> Programmes externes
-    -> Liens vers les fichiers externes -> Utiliser une
-    recherche par expression régulière</b>.</p>
-
-    <p>Si vous voulez télécharger un fichier et le
-    lier à partir d'une entrée BibTeX, vous pouvez le
-    faire en cliquant sur le bouton
-    <b>Télécharger</b> de l'éditeur
-    d'entrées. Une boîte de dialogue va s'afficher,
-    vous demandant d'entrer l'URL. Le fichier sera
-    téléchargé dans votre répertoire de
-    fichiers principal, renommé selon la clef BibTeX de
-    l'entrée et finalement lié depuis cette
-    entrée.</p>
-    
-    <p>Il y a plusieurs alternatives au répertoire de fichiers principal.
-    Vous avez la possibilité (dans <b>Préférences -> Programmes externes</b>)
-    d'autoriser des liens relatifs à la localisation du fichier bib. Les
-    fichiers liés de cette manière peuvent être déplacés avec le fichier bib
-    sans casser ces liens. Il y a un autre paramètre spécifiant si la
-    localisation du fichier bib doit être le répertoire de fichier
-    <i>principal</i>. Cela détermine quel répertoire sera utilisé par JabRef
-    lors du téléchargement ou du déplacement de liens liés dans votre
-    répertoire de fichiers.</p>
-    
-    <p>Vous pouvez aussi configurer un répertoire de fichiers (absolu ou
-    relatif à la localisation du fichier bib) spécifiquement pour une base de
-    données dans <b>Fichier -> Propriétés de la base de données</b>.
-    Finalement, dans la boîte de dialogue <b>Propriétés de la base de
-    données</b>, vous pouvez configurer un répertoire de fichiers spécifique à
-    l'utilisateur qui n'est valable uniquement quand vous êtes celui travaillant
-    sur le fichier bib.</p>    
-    
-    <h2>Ouvrir les fichiers externes</h2>
-
-    <p>Il y a plusieurs
-    façons d'ouvrir un fichier externe ou une page web. Dans
-    la table d'entrées, vous pouvez sélectionner une
-    entrée et utiliser le menu, le raccourci-clavier ou le
-    menu déroulant pour ouvrir le premier lien externe d'une
-    entrée. Alternativement, si la table d'entrées
-    est configurée pour afficher la colonne <b>Fichier</b>
-    (configuré dans <b>Préférences -> Table
-    des entrées -> Colonnes de tableau
-    particulières -> Afficher la colonne Fichier</b>),
-    vous pouvez cliquer sur l'icône fichier pour ouvrir le
-    premier lien externe d'une entrée. Pour accéder
-    à un lien particulier d'une entrée, cliquez sur
-    l'icône avec le bouton droit de la souris (ou
-    <b>Ctrl-clic</b> sur Max OS X) pour afficher un menu montrant
-    tous les liens.</p>
-</body>
-</html> 
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Liens de fichier dans JabRef</h1>
+
+    <p>JabRef vous permet de lier
+    vos entrées avec des fichiers de n'importe quel type
+    stockés sur votre système, ainsi qu'avec des
+    documents sur internet sous forme d'une URL ou d'un identifiant
+    DOI. Chaque entrée peut contenir un nombre arbitraire de
+    liens de fichier et chaque fichier lié peut être
+    ouvert rapidement depuis JabRef.</p>
+
+    <p>En termes BibTeX, dans une entrée, les liens de
+    fichier sont encodés dans un unique champ. Cependant,
+    à l'intérieur de JabRef, ils apparaissent comme
+    une liste modifiable de liens à laquelle on
+    accède depuis l'éditeur d'entrées, comme
+    pour les autres champs BibTeX.</p>
+
+    <h2>Configurer les types de fichiers externes</h2>
+
+    <p>Pour chaque
+    lien de fichier, un type de fichier doit être choisi afin
+    de déterminer quel icône devra être
+    utilisé et quelle application devra être
+    appelée pour ouvrir le fichier. La liste des types de
+    fichier peut être affichée et éditée
+    en choisissant <b>Options -> Gérer les types de
+    fichiers externes</b> ou en cliquant sur le bouton
+    <b>Gérer les types de fichiers externes</b> dans
+    l'onglet <b>Programmes externes</b> des
+    préférences.</p>
+
+    <p>Un type de fichier est défini par un nom, un
+    icône, une extension de fichier et une application pour
+    afficher les fichiers. Sous Windows, le nom de l'application
+    peut être omis afin d'utiliser l'afficheur par
+    défaut de Windows.</p>
+
+    <h2>Ajouter des liens externes à une
+    entrée</h2>
+
+    <p>Si le champ "File" (fichier) est inclus dans les
+    <a href="GeneralFields.html">champs généraux</a>,
+    vous pouvez éditer la liste des liens externes d'une
+    entrée dans
+    l'<a href="EntryEditorHelp.html">éditeur
+    d'entrées</a>. L'éditeur d'entrée inclut
+    des boutons pour insérer, éditer et supprimer des
+    liens, ainsi que des boutons pour ré-ordonner la liste
+    de liens.</p>
+
+    <p>Si vous avez un fichier à l'intérieur ou en
+    aval de votre répertoire de fichiers (configuré
+    dans <b>Préférences -> Programmes externes
+    -> Liens vers les fichiers externes -> Répertoire
+    de fichiers principal</b>), si son extension correspondant
+    à l'un des types de fichiers externes définis, et
+    si son nom contient la clef d'une entrée BibTeX, le
+    fichier pourra être lié automatiquement en
+    cliquant sur le bouton <b>Auto</b> dans l'éditeur
+    d'entrées. Les règles décrivant les noms
+    de fichiers pouvant être liés automatiquement
+    à une clef BibTeX peuvent être configurées
+    dans <b>Préférences -> Programmes externes
+    -> Liens vers les fichiers externes -> Utiliser une
+    recherche par expression régulière</b>.</p>
+
+    <p>Si vous voulez télécharger un fichier et le
+    lier à partir d'une entrée BibTeX, vous pouvez le
+    faire en cliquant sur le bouton
+    <b>Télécharger</b> de l'éditeur
+    d'entrées. Une boîte de dialogue va s'afficher,
+    vous demandant d'entrer l'URL. Le fichier sera
+    téléchargé dans votre répertoire de
+    fichiers principal, renommé selon la clef BibTeX de
+    l'entrée et finalement lié depuis cette
+    entrée.</p>
+    
+    <p>Il y a plusieurs alternatives au répertoire de fichiers principal.
+    Vous avez la possibilité (dans <b>Préférences -> Programmes externes</b>)
+    d'autoriser des liens relatifs à la localisation du fichier bib. Les
+    fichiers liés de cette manière peuvent être déplacés avec le fichier bib
+    sans casser ces liens. Il y a un autre paramètre spécifiant si la
+    localisation du fichier bib doit être le répertoire de fichier
+    <i>principal</i>. Cela détermine quel répertoire sera utilisé par JabRef
+    lors du téléchargement ou du déplacement de liens liés dans votre
+    répertoire de fichiers.</p>
+    
+    <p>Vous pouvez aussi configurer un répertoire de fichiers (absolu ou
+    relatif à la localisation du fichier bib) spécifiquement pour une base de
+    données dans <b>Fichier -> Propriétés de la base de données</b>.
+    Finalement, dans la boîte de dialogue <b>Propriétés de la base de
+    données</b>, vous pouvez configurer un répertoire de fichiers spécifique à
+    l'utilisateur qui n'est valable uniquement quand vous êtes celui travaillant
+    sur le fichier bib.</p>    
+    
+    <h2>Ouvrir les fichiers externes</h2>
+
+    <p>Il y a plusieurs
+    façons d'ouvrir un fichier externe ou une page web. Dans
+    la table d'entrées, vous pouvez sélectionner une
+    entrée et utiliser le menu, le raccourci-clavier ou le
+    menu déroulant pour ouvrir le premier lien externe d'une
+    entrée. Alternativement, si la table d'entrées
+    est configurée pour afficher la colonne <b>Fichier</b>
+    (configuré dans <b>Préférences -> Table
+    des entrées -> Colonnes de tableau
+    particulières -> Afficher la colonne Fichier</b>),
+    vous pouvez cliquer sur l'icône fichier pour ouvrir le
+    premier lien externe d'une entrée. Pour accéder
+    à un lien particulier d'une entrée, cliquez sur
+    l'icône avec le bouton droit de la souris (ou
+    <b>Ctrl-clic</b> sur Max OS X) pour afficher un menu montrant
+    tous les liens.</p>
+</body>
+</html> 
diff --git a/src/help/fr/GeneralFields.html b/src/help/fr/GeneralFields.html
index 6fa22a9..4c6ec5b 100644
--- a/src/help/fr/GeneralFields.html
+++ b/src/help/fr/GeneralFields.html
@@ -1,29 +1,29 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Personnalisation des champs généraux</h1>
-
-    <p>Vous pouvez ajouter un nombre arbitraire d'onglets dans
-    l'éditeur d'entrées. Ceux-ci seront alors
-    présents pour tous les types d'entrées. Pour
-    personnaliser ces onglets, allez dans "Options -> Configurer
-    les champs généraux".</p>
-
-    <p>Vous devez spécifier un onglet par ligne. La ligne
-    doit commencer par le nom de l'onglet suivi par 2 points (:)
-    puis par les champs séparés par un point-virgule
-    (;), devant être contenus.</p>
-
-    <p>Exemple :</p><code>General:url;keyword;doi;pdf<br />
-    Abstract:abstract;annote</code>
-
-    <p>produit un onglet appelé "General" contenant les
-    champs url, keywords, doi et pdf et un onglet appelé
-    "Abstract" contenant les champs abstract et annote.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Personnalisation des champs généraux</h1>
+
+    <p>Vous pouvez ajouter un nombre arbitraire d'onglets dans
+    l'éditeur d'entrées. Ceux-ci seront alors
+    présents pour tous les types d'entrées. Pour
+    personnaliser ces onglets, allez dans "Options -> Configurer
+    les champs généraux".</p>
+
+    <p>Vous devez spécifier un onglet par ligne. La ligne
+    doit commencer par le nom de l'onglet suivi par 2 points (:)
+    puis par les champs séparés par un point-virgule
+    (;), devant être contenus.</p>
+
+    <p>Exemple :</p><code>General:url;keyword;doi;pdf<br />
+    Abstract:abstract;annote</code>
+
+    <p>produit un onglet appelé "General" contenant les
+    champs url, keywords, doi et pdf et un onglet appelé
+    "Abstract" contenant les champs abstract et annote.</p>
+</body>
+</html>
diff --git a/src/help/fr/GoogleScholarHelp.html b/src/help/fr/GoogleScholarHelp.html
index 8a65818..67555f7 100644
--- a/src/help/fr/GoogleScholarHelp.html
+++ b/src/help/fr/GoogleScholarHelp.html
@@ -1,26 +1,26 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Recherche Google Scholar</h1>
-
-    <p>JabRef peut rechercher et télécharger des citations depuis Google Scholar.
-    Pour utiliser cette fonction, choisissez <b>Recherche -> recherche Web</b>,
-    et l'interface de recherche s'affichera dans le panneau latéral.
-    Sélectionnez <b>Google Scholar</b> dans le menu déroulant.</p>
-        
-    
-    <p>Pour démarrer une recherche, entrer les mots de votre requête
-        et presser sur <b>Entrer</b> ou sur le bouton <b>Recherche</b>.</p>
-
-    <p>De fréquentes connexions à Google Scholar feront que Google affichera un
-        test CAPTCHA que JabRef ne peut pas passer. Pour éviter cette situation,
-        JabRef affichera pour chaque recherche une prévisualisation de la 
-        première page des entrées renvoyées par le serveur. Vous pouvez alors
-        choisir quelles entrées doivent être téléchargées.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Recherche Google Scholar</h1>
+
+    <p>JabRef peut rechercher et télécharger des citations depuis Google Scholar.
+    Pour utiliser cette fonction, choisissez <b>Recherche -> recherche Web</b>,
+    et l'interface de recherche s'affichera dans le panneau latéral.
+    Sélectionnez <b>Google Scholar</b> dans le menu déroulant.</p>
+        
+    
+    <p>Pour démarrer une recherche, entrer les mots de votre requête
+        et presser sur <b>Entrer</b> ou sur le bouton <b>Recherche</b>.</p>
+
+    <p>De fréquentes connexions à Google Scholar feront que Google affichera un
+        test CAPTCHA que JabRef ne peut pas passer. Pour éviter cette situation,
+        JabRef affichera pour chaque recherche une prévisualisation de la 
+        première page des entrées renvoyées par le serveur. Vous pouvez alors
+        choisir quelles entrées doivent être téléchargées.</p>
+
+</body>
+</html>
diff --git a/src/help/fr/GroupsHelp.html b/src/help/fr/GroupsHelp.html
index ddb98a1..bd811c2 100644
--- a/src/help/fr/GroupsHelp.html
+++ b/src/help/fr/GroupsHelp.html
@@ -1,441 +1,441 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Les groupes</h1>
-
-    <p>Les groupes permettent de structurer une
-    base de données BibTeX selon une arborescence rappelant
-    l'organisation des fichiers sur un disque dur dans des
-    répertoires et sous-répertoires. Les deux
-    principales différences sont :</p>
-
-    <ul>
-        <li>Alors qu'un fichier est toujours localisé dans
-        un seul répertoire, une entrée peut
-        être incluse dans plus d'un groupe.</li>
-
-        <li>Les groupes peuvent utiliser certains critères
-        pour définir dynamiquement leur contenu. Les
-        nouvelles entrées qui correspondent à ces
-        critères sont automatiquement incluses à ces
-        groupes. Cette caractéristique n'est pas disponible
-        dans les systèmes de fichiers habituels, mais est
-        présente dans certains logiciels de messagerie
-        électronique (tel que Thunderbird et Opera).</li>
-    </ul>Sélectionner un groupe montre les entrées
-    contenues dans ce groupe. Sélectionner plusieurs groupes
-    montre les entrées contenues dans au moins un des
-    groupes (union) ou dans tous les groupes (intersection), selon
-    le paramétrage en cours. Tout ceci est expliqué
-    en détail ci-dessous.
-
-    <p>Les définitions de groupes sont spécifiques
-    à chaque base de données ; Elles sont
-    sauvées comme un bloc <tt>@COMMENT</tt> dans le fichier
-    <tt>.bib</tt> et sont communes à tous les utilisateurs
-    (des futures versions de JabRef pourrait supporter des groupes
-    dépendants des utilisateurs).</p>
-
-    <h2>Interface</h2>
-
-    <p>L'interface des groupes se trouve dans le
-    panneau latéral sur la gauche de l'écran. Il peut
-    être affiché ou masqué en appuyant sur
-    <tt>CTRL-MAJ-G</tt> ou sur le bouton des groupes dans la barre
-    d'outils. L'interface a plusieurs boutons, mais la plupart des
-    fonctions sont accessibles par un menu contextuel ("clic
-    droit"). La fonction Glisser-Déplacer est aussi
-    disponible.</p>
-
-    <table cellspacing="0"
-           cellpadding="5"
-           border="0"
-           style="background-color: #C0FFC0"
-		   summary="Exemples">
-        <tr>
-            <td>
-                <h2>Quelques exemples rapides</h2>
-
-                <p>Vous pourriez vouloir...</p>
-
-                <h3>...uniquement créer un groupe et lui
-                assigner quelques entrées.</h3>
-
-                <p>Assurez-vous
-                que l'interface des groupes est visible. Appuyez
-                sur le bouton <b>Nouveau Groupe</b>, entrez un nom
-                pour ce groupe puis appuyez sur OK en conservant
-                les valeurs par défaut. Maintenant,
-                sélectionnez les entrées qui doivent
-                être assignées à ce groupe et
-                utilisez un Glisser-Déplacer vers le groupe,
-                ou l'option <b>Ajouter au groupe</b> du menu
-                contextuel. Enfin, sélectionnez le groupe
-                pour voir son contenu (qui doit correspondre aux
-                entrées que vous venez de lui assigner).</p>
-
-                <h3>...utiliser le champ <tt>keywords</tt> pour
-                grouper les entrées</h3>
-
-                <p>Assurez-vous que
-                l'interface des groupes est visible. Appuyez sur le
-                bouton <b>Nouveau Groupe</b>, entrez un nom pour ce
-                groupe et sélectionnez l'option qui groupe
-                dynamiquement les entrées en cherchant un
-                mot-clef dans un champ. Entrez le mot-clef à
-                rechercher, puis cliquer sur OK. Enfin,
-                sélectionnez le groupe pour voir son contenu
-                (qui doit correspondre aux entrées dont le
-                champ <tt>keywords</tt> contient le mot-clef que
-                vous avez spécifié).</p>
-
-                <h3>...utiliser une expression de recherche de
-                forme libre pour définir un
-                groupe</h3>
-
-                <p>Assurez-vous que l'interface des groupes
-                est visible. Appuyez sur le bouton <b>Nouveau
-                Groupe</b>, entrez un nom pour ce groupe et
-                sélectionnez l'option qui groupe
-                dynamiquement les entrées en utilisant une
-                expression de recherche de forme libre. Entrez
-                <tt>author=smith</tt> comme expression de recherche
-                (remplacez <tt>smith</tt> avec un nom d'auteur
-                présent dans votre base et cliquez sur OK.
-                Enfin, sélectionnez le groupe pour voir son
-                contenu (qui doit correspondre aux entrées
-                dont le champ <tt>author</tt> contient le nom que
-                vous avez spécifié).</p>
-
-                <h3>...combiner plusieurs groupes</h3>
-
-                <p>Créez
-                deux groupes différents (par exemple, tel
-                que décrit ci-dessus). Cliquez sur le bouton
-                <b>Paramètres</b> et assurez-vous que
-                <b>Union</b> est sélectionné.
-                Maintenant, sélectionnez les deux groupes.
-                Vous devriez voir uniquement les entrées
-                appartenant aux deux groupes (ce qui peut en faire
-                aucune ou exactement les mêmes entrées
-                que précédemment si les deux groupes
-                contiennent les mêmes entrées).</p>
-
-                <h3>...identifier les groupes se
-                chevauchant</h3>
-
-                <p>JabRef vous permet d'identifier
-                facilement les groupes qui se chevauchent parmi les
-                groupes actuellement sélectionnés
-                (c-à-d ceux qui contiennent au moins une
-                entrée qui est aussi contenu dans les
-                groupes actuellement sélectionnés).
-                Cliquez sur le bouton <b>Paramètres</b> et
-                activé l'option pour montrer les groupes qui
-                se chevauchent. Ensuite sélectionnez un
-                groupe qui chevauche d'autres groupes. Les noms de
-                ces groupes s'afficheront en rouge.</p>
-            </td>
-        </tr>
-    </table>
-
-    <h2>Les types de groupes</h2>
-
-    <p>Dans JabRef, il y a quatre types
-    de groupes différents :</p>
-
-    <ol>
-        <li>Le groupe <b>Toutes les entrées</b>, qui --
-        comme son nom le suggère -- contient toutes les
-        entrées, est toujours présent et ne peut pas
-        être édité ou supprimé.</li>
-
-        <li><b>Les groupes manuels</b> se comportent comme les
-        répertoires d'un disque et contiennent uniquement
-        les entrées que vous leur avez explicitement
-        assignées.</li>
-
-        <li><b>Les groupes dynamiques basés sur la recherche
-        d'un mot-clef</b> contiennent des entrées pour
-        lesquelles un champ BibTeX donné (par ex.
-        <tt>keywords</tt>) contient un certain mot-clef (par ex.
-        <tt>électrique</tt>). Cette méthode ne
-        nécessite pas d'assignation manuelle des
-        entrées, mais utilise les informations qui sont
-        déjà présentes dans la base de
-        données. Si toutes les entrées de votre base
-        de données ont des mots-clefs pertinents dans leur
-        champ <tt>keywords</tt>, utiliser ce type de groupe
-        pourrait être votre meilleur choix.</li>
-
-        <li><b>Les groupes dynamiques basés sur des
-        expressions de recherche de forme libre</b> contiennent les
-        entrées qui correspondent à l'expression de
-        recherche spécifiée et suivant la même
-        syntaxe que <a href="SearchHelp.html">l'interface de
-        recherche</a> dans le panneau latéral. Cette
-        <a href="SearchHelp.html#advanced">syntaxe</a> supportent
-        les opérateurs logiques (<tt>AND</tt>, <tt>OR</tt>,
-        <tt>NOT</tt>) et permet de spécifier un ou plusieurs
-        champs BibTeX pour la recherche, autorisant des
-        définitions de groupes plus flexibles que la
-        recherche d'un mot-clef (par ex. <tt>author=smith and
-        title=électrique</tt>).</li>
-    </ol>Chaque groupe que vous créez fait partie de ces
-    trois derniers types. La fenêtre d'édition des
-    groupes, qui s'ouvre en double-cliquant sur un groupe, montre
-    une description succincte (en français de tous les
-    jours) de la définition du groupe
-    sélectionné/édité.
-
-    <h2>La structure des groupes, créer et supprimer des
-    groupes</h2>
-
-    <p>Comme pour les répertoires, les groupes sont
-    structurés selon une arborescence, avec le groupe
-    <b>Toutes les entrées</b> à la racine. En faisant
-    un clic droit sur un groupe, vous pouvez ajoutez un nouveau
-    groupe à l'arbre, soit au même niveau que le
-    groupe sélectionné, soit comme un sous-groupe. Le
-    bouton <b>Nouveau groupe</b> vous permet de créer un
-    nouveau sous-groupe au groupe <b>Toutes les entrées</b>,
-    quelque soit le(s) groupe(s) actuellement
-    sélectionné(s). Le menu contextuel vous permet de
-    supprimer des groupes et/ou des sous-groupes, de trier les
-    sous-groupes par ordre alphabétique ou de
-    déplacer des groupes au sein de l'arbre. Cette
-    dernière fonction peut aussi être
-    réalisées par Glisser-Déplacer, avec la
-    limitation que le Glisser-Déplacer ne permet pas de
-    changer l'ordre des sous-groupes d'un groupe.</p>
-
-    <p>Annuler et Répéter fonctionnent pour toutes
-    les éditions.</p>
-
-    <h3>Les groupes manuels</h3>
-
-    <p>Les groupes manuels sont
-    alimentés uniquement par l'assignation explicite des
-    entrées. Après avoir créé un groupe
-    manuel, vous sélectionnez les entrées à
-    lui assigner et utilisez soit un Glisser-Déplacer soit
-    le menu contextuel de la table des entrées. Il n'y a pas
-    d'options à configurer.</p>
-
-    <p>Cette méthode de groupement nécessite que
-    toutes les entrées aient une clef BibTeX unique. Dans le
-    cas de clefs BibTeX manquantes ou dupliquées,
-    l'assignation de ces entrées ne pourra pas être
-    correctement rétablie lors de futures sessions.</p>
-
-    <h3>Les groupes dynamiques</h3>
-
-    <p>Le contenu d'un groupe dynamique
-    est défini par une condition logique. Uniquement les
-    entrées qui remplissent cette condition sont contenues
-    dans le groupe. Cette méthode utilise des informations
-    stockées dans la base de données elle-même
-    et s'actualise dynamiquement dés que la base de
-    données est modifiée.</p>
-
-    <p>Deux types de conditions logiques peuvent être
-    utilisées :</p>
-
-    <dl>
-        <dt><b>Recherche d'un mot-clef dans un champ</b></dt>
-
-        <dd>Cette méthode groupe les entrées dans
-        lesquelles un champ BibTeX spécifié (par ex.
-        <tt>keywords</tt>) contient le terme de recherche
-        spécifié (par ex.
-        <tt>électrique</tt>). Evidemment, pour que cela
-        fonctionne, le champ doit être présent dans
-        toutes les entrées et son contenu doit être
-        pertinent. L'exemple ci-dessus regroupera toutes les
-        entrées qui font références à
-        électrique. Utiliser le champ <tt>author</tt> permet
-        de grouper les entrées d'un auteur donné,
-        etc. Le mot-clef à rechercher peut être du
-        texte brut ou une expression régulière. Dans
-        le premier cas, JabRef permet l'assignation(/la
-        suppression) manuelle des entrées d'un groupe en
-        modifiant(/supprimant) simplement le terme de recherche du
-        contenu du champ de groupement. C'est pertinent uniquement
-        pour le champ <tt>keywords</tt> ou pour les champs
-        auto-définis mais, évidemment, pas pour les
-        champs tels que <tt>author</tt> ou <tt>year</tt>.</dd>
-
-        <dt><b>Utiliser une expression de recherche de forme
-        libre</b></dt>
-
-        <dd>Ceci est similaire à ce qui est décrit
-        ci-dessus mais, au lieu de rechercher dans un seul champ
-        pour un unique terme de recherche, la
-        <a href="SearchHelp.html#advanced">syntaxe des expressions
-        de recherche</a> peut être utilisées,
-        autorisant l'emploi d'opérateurs logiques
-        (<tt>AND</tt>, <tt>OR</tt>, <tt>NOT</tt>) et permettant les
-        recherches sur plusieurs champs BibTeX. Par exemple,
-        l'expression de recherche <tt>keywords=régression
-        and not keywords=linéaire</tt> groupe les
-        entrées concernant la régression
-        non-linéaire.</dd>
-    </dl>Dans le panneau des groupes, les groupes dynamiques sont
-    par défaut affichés en <i>italique</i>. Cela peut
-    être modifié dans les préférences
-    (Options -> Préférences -> Groupes, case
-    "Afficher les groupes dynamiques en italique").
-
-    <h3>Contexte hiérarchique</h3>
-
-    <p>Par défaut, un
-    groupe est <b>indépendant</b> de sa position dans
-    l'arbre des groupes : lorsqu'il est
-    sélectionné, uniquement son contenu est
-    affiché. Cependant, particulièrement lors de
-    l'utilisation de groupes dynamiques, il est souvent utile de
-    définir un sous-groupe qui <b>raffine son
-    sur-groupe</b>, c-à-d qu'en le sélectionnant les
-    entrées contenues dans les deux groupes sont
-    affichées. Par exemple, créez un sur-groupe
-    contenant les entrées possédant le mot-clef
-    <tt>distribution</tt> et un sous-groupe contenant les
-    entrées possédant le mot-clef <tt>gauss</tt>
-    raffinant ce sur-groupe. Sélectionner le sous-groupe
-    affichera les entrées correspondant aux deux conditions,
-    c-à-d celles qui concerneront les distributions
-    gaussiennes. En ajoutant au sur-groupe original un autre
-    sous-groupe recherchant le terme <tt>laplace</tt>, le
-    groupement peut facilement être étendu. Dans un
-    arbre de groupes, les groupes raffinants ont une icône
-    spécial (cela peut être annulé dans les
-    préférences).</p>
-
-    <p>Le complément logique au groupe raffinant est un
-    groupe qui <b>inclut ses sous-groupes</b>, c-à-d qu'en
-    le sélectionnant, ce ne sont pas uniquement les propres
-    entrées du groupe mais aussi les entrées de ses
-    sous-groupes qui sont affichées. Dans l'arbre des
-    groupes, ce type de groupe possède une icône
-    spécial (cela peut-être annulé dans les
-    préférences).</p>
-
-    <h2>Afficher les entrées d'un groupe, combiner plusieurs
-    groupes</h2>
-
-    <p>Sélectionner un groupe montre les
-    entrées contenues dans ce groupe en les surlignant et,
-    selon le paramétrage (accessible en cliquant sur le
-    bouton <b>Paramètres</b>), les déplacent au
-    sommet de la liste et/ou les sélectionnent. Ces options
-    sont identiques à celles disponibles habituellement pour
-    la recherche.</p>
-
-    <p>Quand plusieurs groupes sont sélectionnés,
-    soit l'union soit l'intersection de leurs contenus est
-    affiché en fonction de paramétrage choisi. Cela
-    permet de combiner rapidement plusieurs conditions. Par
-    exemple, si vous avez un groupe manuel <tt>Extrêmement
-    Important</tt> auquel vous assignez toutes les entrées
-    extrêmement importantes, vous pouvez voir les
-    entrées extrêmement importantes dans tout autre
-    groupe en sélectionnant les deux groupes (cela
-    nécessite d'avoir <b>Intersection</b>
-    sélectionné dans les paramètres).</p>
-
-    <h2>Groupes et recherche</h2>
-
-    <p>Lors de l'affichage de contenu
-    d'un ou plusieurs groupes, une recherche peut être
-    effectuée à l'intérieur de ce contenu en
-    utilisant la technique de recherche habituelle.</p>
-
-    <h2>Surligner les groupes se chevauchant</h2>
-
-    <p>Le bouton
-    <b>Paramètres</b> offre une option de surlignement des
-    groupes se chevauchant. Si elle est activée, lors de la
-    sélection d'un ou plusieurs groupes, tous les groupes
-    contenant au moins une des entrées appartenant au(x)
-    groupe(s) sélectionné(s) sont surlignés.
-    Cela identifie rapidement les chevauchements entre les contenus
-    des groupes. Vous pourriez, par exemple, créer un groupe
-    <tt>A lire</tt> qui contient toutes les entrées que vous
-    comptez lire. À présent, dès que vous
-    sélectionnez n'importe quel groupe, le groupe <tt>A
-    lire</tt> sera surligné si le groupe
-    sélectionné contient des entrées que vous
-    comptez lire.</p>
-
-    <h2>Nouvelles entrées assignées aux groupes sélectionnés</h2>
-   
-    <p>Le bouton <b>Paramètres</b> offre aussi une option pour
-    assigner automatiquement de nouvelles entrées aux groupes
-    sélectionnés. Si elle est activée, lors de la
-    sélection d'un ou plusieurs groupes, toutes les nouvelles entrées
-    créées seront assignés aux groupes sélectionnés.
-    Cela fonctionne à la fois pour des entrées créées
-    à partir du bouton du menu et pour des entrées créées
-    par collage à partir du presse-papier. Cette option peut aussi être
-    activée/désactivée à partir du menu
-    "Options > Préférences > Groupes".
-    </p>
-
-    <h2>Caractéristiques avancées</h2>
-
-    <p>Une fois que
-    vous maîtriserez les concepts de groupe décrits
-    ci-dessus, les caractéristiques avancées
-    suivantes pourraient vous être utile.</p>
-
-    <h3>Création automatique de groupes dynamiques</h3>
-
-    <p>En cliquant sur le bouton <b>Créer automatiquement des
-    groupes pour la base</b>, vous pouvez facilement créer une
-    série de groupes pertinents pour votre base de
-    données. Ce dispositif collectera tous les mots
-    trouvés dans le champ que vous aurez
-    spécifié et créera un groupe pour chaque
-    mot. C'est utile si, par exemple, votre base contient des
-    mots-clefs pertinents pour toutes les entrées. En
-    gênerant automatiquement les groupes en se basant sur le
-    champ <tt>keywords</tt>, vous devriez avoir une série de
-    groupes sans effort.</p>
-
-    <p>Vous pouvez aussi spécifier des caractères
-    à ignorer, par exemple les virgules utilisées
-    entre les mots-clefs. Ils seront traités comme des
-    séparateurs de mots et non comme en faisant partie.
-    Cette étape est importante pour que les mots-clefs
-    composés tels que <tt>distribution de Laplace</tt>
-    soient reconnus comme une unique entité
-    sémantique (vous ne pouvez pas utiliser cette option
-    pour supprimer des mots complets. Pour cela, supprimer
-    manuellement les groupes non voulus à la suite de leur
-    création automatique.</p>
-
-    <h3>Rafraîchir l'affichage des groupes</h3>
-
-    <p>Le bouton
-    <b>Rafraîchir</b> met à jour la table des
-    entrées pour refléter la sélection
-    actuelle des groupes. Habituellement, cela s'effectue
-    automatiquement, mais, dans quelques occasions (par exemple
-    après un Annuler/Répéter en rapport avec
-    les groupes), un rafraîchissement manuel est
-    nécessaire.</p>
-
-    <h3>Combiner des groupes raffinants avec des groupes
-    incluants</h3>
-
-    <p>Si un groupe raffinant est le sous-groupe d'un
-    groupe qui inclue ses sous-groupes -- les frères du
-    groupe raffinant --, les frères sont ignorés
-    quand le groupe raffinant est sélectionné.</p>
-</body>
-</html> 
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Les groupes</h1>
+
+    <p>Les groupes permettent de structurer une
+    base de données BibTeX selon une arborescence rappelant
+    l'organisation des fichiers sur un disque dur dans des
+    répertoires et sous-répertoires. Les deux
+    principales différences sont :</p>
+
+    <ul>
+        <li>Alors qu'un fichier est toujours localisé dans
+        un seul répertoire, une entrée peut
+        être incluse dans plus d'un groupe.</li>
+
+        <li>Les groupes peuvent utiliser certains critères
+        pour définir dynamiquement leur contenu. Les
+        nouvelles entrées qui correspondent à ces
+        critères sont automatiquement incluses à ces
+        groupes. Cette caractéristique n'est pas disponible
+        dans les systèmes de fichiers habituels, mais est
+        présente dans certains logiciels de messagerie
+        électronique (tel que Thunderbird et Opera).</li>
+    </ul>Sélectionner un groupe montre les entrées
+    contenues dans ce groupe. Sélectionner plusieurs groupes
+    montre les entrées contenues dans au moins un des
+    groupes (union) ou dans tous les groupes (intersection), selon
+    le paramétrage en cours. Tout ceci est expliqué
+    en détail ci-dessous.
+
+    <p>Les définitions de groupes sont spécifiques
+    à chaque base de données ; Elles sont
+    sauvées comme un bloc <tt>@COMMENT</tt> dans le fichier
+    <tt>.bib</tt> et sont communes à tous les utilisateurs
+    (des futures versions de JabRef pourrait supporter des groupes
+    dépendants des utilisateurs).</p>
+
+    <h2>Interface</h2>
+
+    <p>L'interface des groupes se trouve dans le
+    panneau latéral sur la gauche de l'écran. Il peut
+    être affiché ou masqué en appuyant sur
+    <tt>CTRL-MAJ-G</tt> ou sur le bouton des groupes dans la barre
+    d'outils. L'interface a plusieurs boutons, mais la plupart des
+    fonctions sont accessibles par un menu contextuel ("clic
+    droit"). La fonction Glisser-Déplacer est aussi
+    disponible.</p>
+
+    <table cellspacing="0"
+           cellpadding="5"
+           border="0"
+           style="background-color: #C0FFC0"
+		   summary="Exemples">
+        <tr>
+            <td>
+                <h2>Quelques exemples rapides</h2>
+
+                <p>Vous pourriez vouloir...</p>
+
+                <h3>...uniquement créer un groupe et lui
+                assigner quelques entrées.</h3>
+
+                <p>Assurez-vous
+                que l'interface des groupes est visible. Appuyez
+                sur le bouton <b>Nouveau Groupe</b>, entrez un nom
+                pour ce groupe puis appuyez sur OK en conservant
+                les valeurs par défaut. Maintenant,
+                sélectionnez les entrées qui doivent
+                être assignées à ce groupe et
+                utilisez un Glisser-Déplacer vers le groupe,
+                ou l'option <b>Ajouter au groupe</b> du menu
+                contextuel. Enfin, sélectionnez le groupe
+                pour voir son contenu (qui doit correspondre aux
+                entrées que vous venez de lui assigner).</p>
+
+                <h3>...utiliser le champ <tt>keywords</tt> pour
+                grouper les entrées</h3>
+
+                <p>Assurez-vous que
+                l'interface des groupes est visible. Appuyez sur le
+                bouton <b>Nouveau Groupe</b>, entrez un nom pour ce
+                groupe et sélectionnez l'option qui groupe
+                dynamiquement les entrées en cherchant un
+                mot-clef dans un champ. Entrez le mot-clef à
+                rechercher, puis cliquer sur OK. Enfin,
+                sélectionnez le groupe pour voir son contenu
+                (qui doit correspondre aux entrées dont le
+                champ <tt>keywords</tt> contient le mot-clef que
+                vous avez spécifié).</p>
+
+                <h3>...utiliser une expression de recherche de
+                forme libre pour définir un
+                groupe</h3>
+
+                <p>Assurez-vous que l'interface des groupes
+                est visible. Appuyez sur le bouton <b>Nouveau
+                Groupe</b>, entrez un nom pour ce groupe et
+                sélectionnez l'option qui groupe
+                dynamiquement les entrées en utilisant une
+                expression de recherche de forme libre. Entrez
+                <tt>author=smith</tt> comme expression de recherche
+                (remplacez <tt>smith</tt> avec un nom d'auteur
+                présent dans votre base et cliquez sur OK.
+                Enfin, sélectionnez le groupe pour voir son
+                contenu (qui doit correspondre aux entrées
+                dont le champ <tt>author</tt> contient le nom que
+                vous avez spécifié).</p>
+
+                <h3>...combiner plusieurs groupes</h3>
+
+                <p>Créez
+                deux groupes différents (par exemple, tel
+                que décrit ci-dessus). Cliquez sur le bouton
+                <b>Paramètres</b> et assurez-vous que
+                <b>Union</b> est sélectionné.
+                Maintenant, sélectionnez les deux groupes.
+                Vous devriez voir uniquement les entrées
+                appartenant aux deux groupes (ce qui peut en faire
+                aucune ou exactement les mêmes entrées
+                que précédemment si les deux groupes
+                contiennent les mêmes entrées).</p>
+
+                <h3>...identifier les groupes se
+                chevauchant</h3>
+
+                <p>JabRef vous permet d'identifier
+                facilement les groupes qui se chevauchent parmi les
+                groupes actuellement sélectionnés
+                (c-à-d ceux qui contiennent au moins une
+                entrée qui est aussi contenu dans les
+                groupes actuellement sélectionnés).
+                Cliquez sur le bouton <b>Paramètres</b> et
+                activé l'option pour montrer les groupes qui
+                se chevauchent. Ensuite sélectionnez un
+                groupe qui chevauche d'autres groupes. Les noms de
+                ces groupes s'afficheront en rouge.</p>
+            </td>
+        </tr>
+    </table>
+
+    <h2>Les types de groupes</h2>
+
+    <p>Dans JabRef, il y a quatre types
+    de groupes différents :</p>
+
+    <ol>
+        <li>Le groupe <b>Toutes les entrées</b>, qui --
+        comme son nom le suggère -- contient toutes les
+        entrées, est toujours présent et ne peut pas
+        être édité ou supprimé.</li>
+
+        <li><b>Les groupes manuels</b> se comportent comme les
+        répertoires d'un disque et contiennent uniquement
+        les entrées que vous leur avez explicitement
+        assignées.</li>
+
+        <li><b>Les groupes dynamiques basés sur la recherche
+        d'un mot-clef</b> contiennent des entrées pour
+        lesquelles un champ BibTeX donné (par ex.
+        <tt>keywords</tt>) contient un certain mot-clef (par ex.
+        <tt>électrique</tt>). Cette méthode ne
+        nécessite pas d'assignation manuelle des
+        entrées, mais utilise les informations qui sont
+        déjà présentes dans la base de
+        données. Si toutes les entrées de votre base
+        de données ont des mots-clefs pertinents dans leur
+        champ <tt>keywords</tt>, utiliser ce type de groupe
+        pourrait être votre meilleur choix.</li>
+
+        <li><b>Les groupes dynamiques basés sur des
+        expressions de recherche de forme libre</b> contiennent les
+        entrées qui correspondent à l'expression de
+        recherche spécifiée et suivant la même
+        syntaxe que <a href="SearchHelp.html">l'interface de
+        recherche</a> dans le panneau latéral. Cette
+        <a href="SearchHelp.html#advanced">syntaxe</a> supportent
+        les opérateurs logiques (<tt>AND</tt>, <tt>OR</tt>,
+        <tt>NOT</tt>) et permet de spécifier un ou plusieurs
+        champs BibTeX pour la recherche, autorisant des
+        définitions de groupes plus flexibles que la
+        recherche d'un mot-clef (par ex. <tt>author=smith and
+        title=électrique</tt>).</li>
+    </ol>Chaque groupe que vous créez fait partie de ces
+    trois derniers types. La fenêtre d'édition des
+    groupes, qui s'ouvre en double-cliquant sur un groupe, montre
+    une description succincte (en français de tous les
+    jours) de la définition du groupe
+    sélectionné/édité.
+
+    <h2>La structure des groupes, créer et supprimer des
+    groupes</h2>
+
+    <p>Comme pour les répertoires, les groupes sont
+    structurés selon une arborescence, avec le groupe
+    <b>Toutes les entrées</b> à la racine. En faisant
+    un clic droit sur un groupe, vous pouvez ajoutez un nouveau
+    groupe à l'arbre, soit au même niveau que le
+    groupe sélectionné, soit comme un sous-groupe. Le
+    bouton <b>Nouveau groupe</b> vous permet de créer un
+    nouveau sous-groupe au groupe <b>Toutes les entrées</b>,
+    quelque soit le(s) groupe(s) actuellement
+    sélectionné(s). Le menu contextuel vous permet de
+    supprimer des groupes et/ou des sous-groupes, de trier les
+    sous-groupes par ordre alphabétique ou de
+    déplacer des groupes au sein de l'arbre. Cette
+    dernière fonction peut aussi être
+    réalisées par Glisser-Déplacer, avec la
+    limitation que le Glisser-Déplacer ne permet pas de
+    changer l'ordre des sous-groupes d'un groupe.</p>
+
+    <p>Annuler et Répéter fonctionnent pour toutes
+    les éditions.</p>
+
+    <h3>Les groupes manuels</h3>
+
+    <p>Les groupes manuels sont
+    alimentés uniquement par l'assignation explicite des
+    entrées. Après avoir créé un groupe
+    manuel, vous sélectionnez les entrées à
+    lui assigner et utilisez soit un Glisser-Déplacer soit
+    le menu contextuel de la table des entrées. Il n'y a pas
+    d'options à configurer.</p>
+
+    <p>Cette méthode de groupement nécessite que
+    toutes les entrées aient une clef BibTeX unique. Dans le
+    cas de clefs BibTeX manquantes ou dupliquées,
+    l'assignation de ces entrées ne pourra pas être
+    correctement rétablie lors de futures sessions.</p>
+
+    <h3>Les groupes dynamiques</h3>
+
+    <p>Le contenu d'un groupe dynamique
+    est défini par une condition logique. Uniquement les
+    entrées qui remplissent cette condition sont contenues
+    dans le groupe. Cette méthode utilise des informations
+    stockées dans la base de données elle-même
+    et s'actualise dynamiquement dés que la base de
+    données est modifiée.</p>
+
+    <p>Deux types de conditions logiques peuvent être
+    utilisées :</p>
+
+    <dl>
+        <dt><b>Recherche d'un mot-clef dans un champ</b></dt>
+
+        <dd>Cette méthode groupe les entrées dans
+        lesquelles un champ BibTeX spécifié (par ex.
+        <tt>keywords</tt>) contient le terme de recherche
+        spécifié (par ex.
+        <tt>électrique</tt>). Evidemment, pour que cela
+        fonctionne, le champ doit être présent dans
+        toutes les entrées et son contenu doit être
+        pertinent. L'exemple ci-dessus regroupera toutes les
+        entrées qui font références à
+        électrique. Utiliser le champ <tt>author</tt> permet
+        de grouper les entrées d'un auteur donné,
+        etc. Le mot-clef à rechercher peut être du
+        texte brut ou une expression régulière. Dans
+        le premier cas, JabRef permet l'assignation(/la
+        suppression) manuelle des entrées d'un groupe en
+        modifiant(/supprimant) simplement le terme de recherche du
+        contenu du champ de groupement. C'est pertinent uniquement
+        pour le champ <tt>keywords</tt> ou pour les champs
+        auto-définis mais, évidemment, pas pour les
+        champs tels que <tt>author</tt> ou <tt>year</tt>.</dd>
+
+        <dt><b>Utiliser une expression de recherche de forme
+        libre</b></dt>
+
+        <dd>Ceci est similaire à ce qui est décrit
+        ci-dessus mais, au lieu de rechercher dans un seul champ
+        pour un unique terme de recherche, la
+        <a href="SearchHelp.html#advanced">syntaxe des expressions
+        de recherche</a> peut être utilisées,
+        autorisant l'emploi d'opérateurs logiques
+        (<tt>AND</tt>, <tt>OR</tt>, <tt>NOT</tt>) et permettant les
+        recherches sur plusieurs champs BibTeX. Par exemple,
+        l'expression de recherche <tt>keywords=régression
+        and not keywords=linéaire</tt> groupe les
+        entrées concernant la régression
+        non-linéaire.</dd>
+    </dl>Dans le panneau des groupes, les groupes dynamiques sont
+    par défaut affichés en <i>italique</i>. Cela peut
+    être modifié dans les préférences
+    (Options -> Préférences -> Groupes, case
+    "Afficher les groupes dynamiques en italique").
+
+    <h3>Contexte hiérarchique</h3>
+
+    <p>Par défaut, un
+    groupe est <b>indépendant</b> de sa position dans
+    l'arbre des groupes : lorsqu'il est
+    sélectionné, uniquement son contenu est
+    affiché. Cependant, particulièrement lors de
+    l'utilisation de groupes dynamiques, il est souvent utile de
+    définir un sous-groupe qui <b>raffine son
+    sur-groupe</b>, c-à-d qu'en le sélectionnant les
+    entrées contenues dans les deux groupes sont
+    affichées. Par exemple, créez un sur-groupe
+    contenant les entrées possédant le mot-clef
+    <tt>distribution</tt> et un sous-groupe contenant les
+    entrées possédant le mot-clef <tt>gauss</tt>
+    raffinant ce sur-groupe. Sélectionner le sous-groupe
+    affichera les entrées correspondant aux deux conditions,
+    c-à-d celles qui concerneront les distributions
+    gaussiennes. En ajoutant au sur-groupe original un autre
+    sous-groupe recherchant le terme <tt>laplace</tt>, le
+    groupement peut facilement être étendu. Dans un
+    arbre de groupes, les groupes raffinants ont une icône
+    spécial (cela peut être annulé dans les
+    préférences).</p>
+
+    <p>Le complément logique au groupe raffinant est un
+    groupe qui <b>inclut ses sous-groupes</b>, c-à-d qu'en
+    le sélectionnant, ce ne sont pas uniquement les propres
+    entrées du groupe mais aussi les entrées de ses
+    sous-groupes qui sont affichées. Dans l'arbre des
+    groupes, ce type de groupe possède une icône
+    spécial (cela peut-être annulé dans les
+    préférences).</p>
+
+    <h2>Afficher les entrées d'un groupe, combiner plusieurs
+    groupes</h2>
+
+    <p>Sélectionner un groupe montre les
+    entrées contenues dans ce groupe en les surlignant et,
+    selon le paramétrage (accessible en cliquant sur le
+    bouton <b>Paramètres</b>), les déplacent au
+    sommet de la liste et/ou les sélectionnent. Ces options
+    sont identiques à celles disponibles habituellement pour
+    la recherche.</p>
+
+    <p>Quand plusieurs groupes sont sélectionnés,
+    soit l'union soit l'intersection de leurs contenus est
+    affiché en fonction de paramétrage choisi. Cela
+    permet de combiner rapidement plusieurs conditions. Par
+    exemple, si vous avez un groupe manuel <tt>Extrêmement
+    Important</tt> auquel vous assignez toutes les entrées
+    extrêmement importantes, vous pouvez voir les
+    entrées extrêmement importantes dans tout autre
+    groupe en sélectionnant les deux groupes (cela
+    nécessite d'avoir <b>Intersection</b>
+    sélectionné dans les paramètres).</p>
+
+    <h2>Groupes et recherche</h2>
+
+    <p>Lors de l'affichage de contenu
+    d'un ou plusieurs groupes, une recherche peut être
+    effectuée à l'intérieur de ce contenu en
+    utilisant la technique de recherche habituelle.</p>
+
+    <h2>Surligner les groupes se chevauchant</h2>
+
+    <p>Le bouton
+    <b>Paramètres</b> offre une option de surlignement des
+    groupes se chevauchant. Si elle est activée, lors de la
+    sélection d'un ou plusieurs groupes, tous les groupes
+    contenant au moins une des entrées appartenant au(x)
+    groupe(s) sélectionné(s) sont surlignés.
+    Cela identifie rapidement les chevauchements entre les contenus
+    des groupes. Vous pourriez, par exemple, créer un groupe
+    <tt>A lire</tt> qui contient toutes les entrées que vous
+    comptez lire. À présent, dès que vous
+    sélectionnez n'importe quel groupe, le groupe <tt>A
+    lire</tt> sera surligné si le groupe
+    sélectionné contient des entrées que vous
+    comptez lire.</p>
+
+    <h2>Nouvelles entrées assignées aux groupes sélectionnés</h2>
+   
+    <p>Le bouton <b>Paramètres</b> offre aussi une option pour
+    assigner automatiquement de nouvelles entrées aux groupes
+    sélectionnés. Si elle est activée, lors de la
+    sélection d'un ou plusieurs groupes, toutes les nouvelles entrées
+    créées seront assignés aux groupes sélectionnés.
+    Cela fonctionne à la fois pour des entrées créées
+    à partir du bouton du menu et pour des entrées créées
+    par collage à partir du presse-papier. Cette option peut aussi être
+    activée/désactivée à partir du menu
+    "Options > Préférences > Groupes".
+    </p>
+
+    <h2>Caractéristiques avancées</h2>
+
+    <p>Une fois que
+    vous maîtriserez les concepts de groupe décrits
+    ci-dessus, les caractéristiques avancées
+    suivantes pourraient vous être utile.</p>
+
+    <h3>Création automatique de groupes dynamiques</h3>
+
+    <p>En cliquant sur le bouton <b>Créer automatiquement des
+    groupes pour la base</b>, vous pouvez facilement créer une
+    série de groupes pertinents pour votre base de
+    données. Ce dispositif collectera tous les mots
+    trouvés dans le champ que vous aurez
+    spécifié et créera un groupe pour chaque
+    mot. C'est utile si, par exemple, votre base contient des
+    mots-clefs pertinents pour toutes les entrées. En
+    gênerant automatiquement les groupes en se basant sur le
+    champ <tt>keywords</tt>, vous devriez avoir une série de
+    groupes sans effort.</p>
+
+    <p>Vous pouvez aussi spécifier des caractères
+    à ignorer, par exemple les virgules utilisées
+    entre les mots-clefs. Ils seront traités comme des
+    séparateurs de mots et non comme en faisant partie.
+    Cette étape est importante pour que les mots-clefs
+    composés tels que <tt>distribution de Laplace</tt>
+    soient reconnus comme une unique entité
+    sémantique (vous ne pouvez pas utiliser cette option
+    pour supprimer des mots complets. Pour cela, supprimer
+    manuellement les groupes non voulus à la suite de leur
+    création automatique.</p>
+
+    <h3>Rafraîchir l'affichage des groupes</h3>
+
+    <p>Le bouton
+    <b>Rafraîchir</b> met à jour la table des
+    entrées pour refléter la sélection
+    actuelle des groupes. Habituellement, cela s'effectue
+    automatiquement, mais, dans quelques occasions (par exemple
+    après un Annuler/Répéter en rapport avec
+    les groupes), un rafraîchissement manuel est
+    nécessaire.</p>
+
+    <h3>Combiner des groupes raffinants avec des groupes
+    incluants</h3>
+
+    <p>Si un groupe raffinant est le sous-groupe d'un
+    groupe qui inclue ses sous-groupes -- les frères du
+    groupe raffinant --, les frères sont ignorés
+    quand le groupe raffinant est sélectionné.</p>
+</body>
+</html> 
diff --git a/src/help/fr/HelpHelp.html b/src/help/fr/HelpHelp.html
index 7b32156..c38c25c 100644
--- a/src/help/fr/HelpHelp.html
+++ b/src/help/fr/HelpHelp.html
@@ -1,41 +1,41 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>La fenêtre d'aide</h1>
-
-    <p><em>S'ouvre en cliquant sur le
-    bouton d'aide ou en appuyant sur F1.</em></p>
-
-    <p>La fenêtre d'aide est conçue pour fournir des
-    informations sur l'utilisation de JabRef.</p>
-
-    <h2>Naviguer entre les fichiers d'aide</h2>
-
-    <p>La fenêtre
-    d'aide est en fait un navigateur HTML simplifié, et les
-    fichiers d'aide sont des fichiers HTML standard.</p>
-
-    <p>A l'ouverture, la fenêtre d'aide affichera des
-    fichiers différents selon la fenêtre à
-    partir de laquelle elle est lancée. Si ce fichier
-    n'explique pas les points qui vous intéressent, le
-    bouton <em>Contenu</em> de la barre d'outils vous affichera la
-    liste des fichiers d'aide disponibles.</p>
-
-    <p>De plus, la barre d'outils contient des boutons de
-    navigation pour afficher les fichiers précédents
-    et suivants. Ils sont similaires aux boutons
-    <em>Précédent</em> et <em>Suivant</em> d'un
-    navigateur internet standard. Les raccourcis clavier pour la
-    navigation sont la flèche gauche pour
-    <em>Précédent</em> et la flèche droite
-    pour <em>Suivant</em>.</p>
-
-    <p>La fenêtre d'aide se ferme en pressant ESCAPE.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>La fenêtre d'aide</h1>
+
+    <p><em>S'ouvre en cliquant sur le
+    bouton d'aide ou en appuyant sur F1.</em></p>
+
+    <p>La fenêtre d'aide est conçue pour fournir des
+    informations sur l'utilisation de JabRef.</p>
+
+    <h2>Naviguer entre les fichiers d'aide</h2>
+
+    <p>La fenêtre
+    d'aide est en fait un navigateur HTML simplifié, et les
+    fichiers d'aide sont des fichiers HTML standard.</p>
+
+    <p>A l'ouverture, la fenêtre d'aide affichera des
+    fichiers différents selon la fenêtre à
+    partir de laquelle elle est lancée. Si ce fichier
+    n'explique pas les points qui vous intéressent, le
+    bouton <em>Contenu</em> de la barre d'outils vous affichera la
+    liste des fichiers d'aide disponibles.</p>
+
+    <p>De plus, la barre d'outils contient des boutons de
+    navigation pour afficher les fichiers précédents
+    et suivants. Ils sont similaires aux boutons
+    <em>Précédent</em> et <em>Suivant</em> d'un
+    navigateur internet standard. Les raccourcis clavier pour la
+    navigation sont la flèche gauche pour
+    <em>Précédent</em> et la flèche droite
+    pour <em>Suivant</em>.</p>
+
+    <p>La fenêtre d'aide se ferme en pressant ESCAPE.</p>
+</body>
+</html>
diff --git a/src/help/fr/IEEEXploreHelp.html b/src/help/fr/IEEEXploreHelp.html
index 78f9733..3292f93 100644
--- a/src/help/fr/IEEEXploreHelp.html
+++ b/src/help/fr/IEEEXploreHelp.html
@@ -1,41 +1,41 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Recherche IEEEXplore</h1>
-
-    
-    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> Recherche Web</b>.
-    L'interface de recherche apparaitra dans le panneau latéral. Sélectionnez
-    <b>IEEEXplore</b> dans le menu déroulant.</p>
-    
-    <p>IEEEXplore permet l'accès
-    à de la litterature technique en génie
-    électrique, informatique et électronique.
-    Pour lancer une recherche, entrez les mots de votre
-    requête et appuyez sur <b>Entrée</b> ou sur le
-    bouton <b>Rechercher</b>.</p>
-
-    <p>La recherche est effectuée en mode invité, ce
-    qui signifie qu'au maximum 100 résultats vous seront
-    retournés.</p>
-
-    <p>Vous pouvez choisir de télécharger les
-    résumés avec les informations de citation pour
-    chaque entrée en cochant la case <b>Inclure les
-    résumés</b>. Cela ne créera PAS de
-    requêtes réseau supplémentaires.</p>
-
-    <p>L'option de téléchargement direct de
-    citations BibTeX à partir de IEEEXplore ne
-    fonctionne pas encore.</p>
-
-    <p>Pour toute suggestion, envoyez s'il vous plaît
-    un courriel à Aaron Chen <b>nextAaron at gmail.com</b>.</p>    
-    
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Recherche IEEEXplore</h1>
+
+    
+    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> Recherche Web</b>.
+    L'interface de recherche apparaitra dans le panneau latéral. Sélectionnez
+    <b>IEEEXplore</b> dans le menu déroulant.</p>
+    
+    <p>IEEEXplore permet l'accès
+    à de la litterature technique en génie
+    électrique, informatique et électronique.
+    Pour lancer une recherche, entrez les mots de votre
+    requête et appuyez sur <b>Entrée</b> ou sur le
+    bouton <b>Rechercher</b>.</p>
+
+    <p>La recherche est effectuée en mode invité, ce
+    qui signifie qu'au maximum 100 résultats vous seront
+    retournés.</p>
+
+    <p>Vous pouvez choisir de télécharger les
+    résumés avec les informations de citation pour
+    chaque entrée en cochant la case <b>Inclure les
+    résumés</b>. Cela ne créera PAS de
+    requêtes réseau supplémentaires.</p>
+
+    <p>L'option de téléchargement direct de
+    citations BibTeX à partir de IEEEXplore ne
+    fonctionne pas encore.</p>
+
+    <p>Pour toute suggestion, envoyez s'il vous plaît
+    un courriel à Aaron Chen <b>nextAaron at gmail.com</b>.</p>    
+    
+</body>
+</html>
diff --git a/src/help/fr/ISBNtoBibTeXHelp.html b/src/help/fr/ISBNtoBibTeXHelp.html
index 129f9f5..3ac406e 100644
--- a/src/help/fr/ISBNtoBibTeXHelp.html
+++ b/src/help/fr/ISBNtoBibTeXHelp.html
@@ -1,23 +1,23 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Récupération d'entrées à partir du numéro ISBN</h1>
-    
-    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> recherche Web</b>,
-        et l'interface de recherche s'affichera dans le panneau latéral.
-        Sélectionnez <b>ISBN vers BibTeX</b> dans le menu déroulant.</p>
-
-    <p>Ce moteur de recherche utilise
-        <a href="http://manas.tungare.name/software/isbn-to-bibtex/">Manas Tungare's ISBN to BibTeX Converter</a>
-        pour convertir un ISBN en une entrée BibTeX.</p>
-
-    <p>Entrer le numéro ISBN dans le champ de recherche et presser sur <b>Entrer</b>
-        ou sur le bouton <b>Recherche</b>.
-        L'entrée sera récupérée et ajoutée à votre base actuellement active.
-        En cas de survenue d'une erreur, elle s'affichera dans une fenêtre.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Récupération d'entrées à partir du numéro ISBN</h1>
+    
+    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> recherche Web</b>,
+        et l'interface de recherche s'affichera dans le panneau latéral.
+        Sélectionnez <b>ISBN vers BibTeX</b> dans le menu déroulant.</p>
+
+    <p>Ce moteur de recherche utilise
+        <a href="http://manas.tungare.name/software/isbn-to-bibtex/">Manas Tungare's ISBN to BibTeX Converter</a>
+        pour convertir un ISBN en une entrée BibTeX.</p>
+
+    <p>Entrer le numéro ISBN dans le champ de recherche et presser sur <b>Entrer</b>
+        ou sur le bouton <b>Recherche</b>.
+        L'entrée sera récupérée et ajoutée à votre base actuellement active.
+        En cas de survenue d'une erreur, elle s'affichera dans une fenêtre.</p>
+
+</body>
+</html>
diff --git a/src/help/fr/ImportInspectionDialog.html b/src/help/fr/ImportInspectionDialog.html
index c1976c7..3dd84cb 100644
--- a/src/help/fr/ImportInspectionDialog.html
+++ b/src/help/fr/ImportInspectionDialog.html
@@ -1,32 +1,32 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Fenêtre de vérification des importations</h1>
-
-    <p>Quand vous importez de nouvelles entrées à
-    partir d'un format de référence connu, ou que
-    vous récupérez des entrées directement sur
-    internet, elles sont tout d'abord affichées dans une
-    fenêtre pour leur vérification. A ce moment,
-    aucune des entrées n'a encore été
-    ajoutée à la base de données actuellement
-    ouverte (si une base est ouverte).</p>
-
-    <p>La fenêtre de vérification vous permet de
-    supprimer les entrées que vous ne voulez pas garder et
-    d'effectuer des opérations simples telles que la
-    générations des clefs BibTeX pour ces
-    entrées ou leur ajout à des
-    <a href="GroupsHelp.html">groupes</a> manuels. Si vous les
-    importez dans une base de données existante, il est
-    souvent plus facile d'effectuer ces opérations avant que
-    les nouvelles entrées soient insérées
-    parmi les entrées déjà présentes
-    dans la base de données.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Fenêtre de vérification des importations</h1>
+
+    <p>Quand vous importez de nouvelles entrées à
+    partir d'un format de référence connu, ou que
+    vous récupérez des entrées directement sur
+    internet, elles sont tout d'abord affichées dans une
+    fenêtre pour leur vérification. A ce moment,
+    aucune des entrées n'a encore été
+    ajoutée à la base de données actuellement
+    ouverte (si une base est ouverte).</p>
+
+    <p>La fenêtre de vérification vous permet de
+    supprimer les entrées que vous ne voulez pas garder et
+    d'effectuer des opérations simples telles que la
+    générations des clefs BibTeX pour ces
+    entrées ou leur ajout à des
+    <a href="GroupsHelp.html">groupes</a> manuels. Si vous les
+    importez dans une base de données existante, il est
+    souvent plus facile d'effectuer ces opérations avant que
+    les nouvelles entrées soient insérées
+    parmi les entrées déjà présentes
+    dans la base de données.</p>
+</body>
+</html>
diff --git a/src/help/fr/JabRefHelp.html b/src/help/fr/JabRefHelp.html
index 7cf5648..a0211d7 100644
--- a/src/help/fr/JabRefHelp.html
+++ b/src/help/fr/JabRefHelp.html
@@ -1,45 +1,45 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>JabRef</h1>
-
-    <p><strong>Note :</strong> Le programme <em>BibTeX</em>
-    est mentionné de nombreuses fois dans ces fichiers
-    d'aide. <em>BibTeX</em> est un utilitaire pour la
-    génération de références
-    bibliographiques dans les documents LaTeX, créé
-    par Oren Patashnik. Le même format de base de
-    données est aussi utilisé par CiteMaker, un
-    utilitaire pour la génération de bibliographie
-    d'Adobe FrameMaker.</p>
-
-    <p>JabRef est un programme permettant l'exploitation des bases
-    de données <em>BibTeX</em>. Ce programme n'utilise aucun
-    format de fichier interne, ce qui signifie qu'habituellement
-    vous ouvrez et sauvez vos bases de données directement
-    dans le format .bib de <em>BibTeX</em>. Cependant, vous pouvez
-    aussi importer dans JabRef d'autres formats de bases de
-    données bibliographiques.</p>
-
-    <p>JabRef possède des fonctionnalités de tri et
-    de recherche afin de vous donner une vue d'ensemble du contenu
-    de vos bases de données. Vous pouvez facilement ajouter
-    de nouvelles entrées à vos bases de
-    données sans avoir à vous souvenir des
-    informations requises, et les clefs <em>BibTeX</em> peuvent
-    être générées automatiquement.
-    JabRef sera surtout utile aux utilisateurs de <em>BibTeX</em>
-    ou CiteMaker, mais il peut aussi être utile à ceux
-    qui se servent d'autres systèmes de
-    référencements ou qui veulent simplement
-    organiser leurs sources bibliographiques.</p>
-
-    <p><a href="BaseFrameHelp.html">La fenêtre principale de
-    JabRef</a></p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>JabRef</h1>
+
+    <p><strong>Note :</strong> Le programme <em>BibTeX</em>
+    est mentionné de nombreuses fois dans ces fichiers
+    d'aide. <em>BibTeX</em> est un utilitaire pour la
+    génération de références
+    bibliographiques dans les documents LaTeX, créé
+    par Oren Patashnik. Le même format de base de
+    données est aussi utilisé par CiteMaker, un
+    utilitaire pour la génération de bibliographie
+    d'Adobe FrameMaker.</p>
+
+    <p>JabRef est un programme permettant l'exploitation des bases
+    de données <em>BibTeX</em>. Ce programme n'utilise aucun
+    format de fichier interne, ce qui signifie qu'habituellement
+    vous ouvrez et sauvez vos bases de données directement
+    dans le format .bib de <em>BibTeX</em>. Cependant, vous pouvez
+    aussi importer dans JabRef d'autres formats de bases de
+    données bibliographiques.</p>
+
+    <p>JabRef possède des fonctionnalités de tri et
+    de recherche afin de vous donner une vue d'ensemble du contenu
+    de vos bases de données. Vous pouvez facilement ajouter
+    de nouvelles entrées à vos bases de
+    données sans avoir à vous souvenir des
+    informations requises, et les clefs <em>BibTeX</em> peuvent
+    être générées automatiquement.
+    JabRef sera surtout utile aux utilisateurs de <em>BibTeX</em>
+    ou CiteMaker, mais il peut aussi être utile à ceux
+    qui se servent d'autres systèmes de
+    référencements ou qui veulent simplement
+    organiser leurs sources bibliographiques.</p>
+
+    <p><a href="BaseFrameHelp.html">La fenêtre principale de
+    JabRef</a></p>
+</body>
+</html>
diff --git a/src/help/fr/JournalAbbreviations.html b/src/help/fr/JournalAbbreviations.html
index 54aa954..b1d30b3 100644
--- a/src/help/fr/JournalAbbreviations.html
+++ b/src/help/fr/JournalAbbreviations.html
@@ -1,135 +1,135 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Abréviations des journaux</h1>
-
-    <p>Cette fonction peut
-    être configurée dans <b>Options -> Gérer
-    les abréviations de journaux</b>.</p>
-
-    <p>JabRef peut basculer automatiquement les noms de journaux
-    entre leurs formes abrégées et non
-    abrégées tant que les noms sont
-    contenus dans une de vos listes de journaux. 
-    JabRef inclut une très longue liste d'abréviations de journaux,
-    toutefois il est probable qu'elle soit incomplète pour les travaux
-    de beaucoup d'utilisateurs. 
-    Vous pouvez ajouter des abréviations à partir d'un nombre
-    quelconque de listes, chacune correspond à un fichier texte
-    présent sur votre disque dur.</p>
-
-    <h2>Utiliser cette fonction</h2>
-
-    <p>La conversion de noms de journaux peut être
-    effectuée depuis l'éditeur d'entrées ou
-    depuis le menu <b>Outils</b>. Dans l'éditeur
-    d'entrées, vous trouverez un bouton nommé
-    <i>Masquer/afficher l'abréviation</i> à droite du
-    champ <i>journal</i>. Cliquer sur ce bouton changera le mode
-    d'affichage du nom du journal. Trois modes sont
-    possibles :</p>
-
-    <ul>
-        <li>Nom complet, par exemple "Aquacultural
-        Engineering"</li>
-
-        <li>Abréviation ISO, par exemple "Aquacult.
-        Eng."</li>
-
-        <li>Abréviation MEDLINE, par exemple "Aquacult
-        Eng"</li>
-    </ul>Si le nom du journal actuel n'est pas trouvé dans
-    la liste des journaux, le champ ne sera pas modifié.
-
-    <p>Pour convertir en une seule fois les noms de journaux de
-    beaucoup d'entrées, vous pouvez sélectionner ces
-    entrées et choisir <b>Outils -> Abréger les
-    noms de journaux (ISO)</b>, <b>Outils -> Abréger les
-    noms de journaux (MEDLINE)</b> ou <b>Outils ->
-    Développer les noms des journaux</b>. Ces trois actions
-    abrégeront ou développeront les noms de journaux
-    pour toutes les entrées sélectionnées dont
-    le nom de journal a pu être trouvé dans vos listes
-    de journaux.</p>
-
-    <h2>Paramétrer vos listes de journaux</h2>
-
-    <p>En plus de la liste inclue par défaut dans JabRef, 
-    vous pouvez avoir plusieurs listes sous la forme de
-    fichiers texte externes liés depuis JabRef.
-    La liste par défaut peut être 
-    éditée depuis JabRef.</p>
-    
-    <h3>Votre liste personnelle des abréviations de
-    journaux</h3>
-
-    <p>Votre liste personnelle de journaux est
-    gérée dans la partie supérieure de la
-    fenêtre <b>Gérer les abréviations de
-    journaux</b>. Pour commencer à construire votre liste
-    d'abréviations de journaux, choisissez <i>Nouveau
-    fichier</i>, et entrez manuellement le nom du fichier ou
-    utilisez le bouton <i>Explorer</i>. Si vous disposez
-    déjà d'un fichier que vous souhaitez utiliser
-    comme point de départ, choisissez <i>Fichier
-    existant</i> et utilisez le bouton <i>Explorer</i> pour choisir
-    le fichier. La table sera mise à jour pour tenir compte
-    du contenu de la liste sélectionnée.</p>
-
-    <p>La table et les boutons d'outils à sa droite vous
-    permettent d'ajouter, de supprimer et d'éditer les
-    entrées de journaux. Pour chaque entrée, vous
-    devez fournir le nom complet du journal et son
-    abréviation ISO (par exemple "Aquacultural Engineering"
-    et "Aquacult. Eng."). Pour éditer une entrée,
-    double-cliquez sur sa ligne dans la table.</p>
-
-    <p>Une fois que vous avez cliqué sur <i>OK</i>, si vous
-    avez sélectionné un fichier et que la table
-    contient au moins une entrée, le contenu de la table
-    sera stocké dans le fichier sélectionné,
-    et la liste des journaux de JabRef sera mise à jour.</p>
-
-    <h3>Listes externes de journaux</h3>
-
-    <p>En plus de votre liste
-    personnelle, vous pouvez relier plusieurs listes externes. Ces
-    liens peuvent être paramétré dans la partie
-    inférieure de la fenêtre <b>Gérer les
-    abréviations de journaux</b>. Les listes externes sont
-    similaires à la liste personnelle - la seule
-    différence est que JabRef ne fournit pas d'interface
-    pour éditer les listes externes.</p>
-
-    <p>Pour ajouter une nouvelle liste externe, cliquez sur le
-    bouton <b>+</b>. Cela ajoutera une nouvelle entrée
-    à l'interface. Ensuite, utilisez soit le bouton
-    <i>Explorer</i> soit le bouton <i>Télécharger</i>
-    situé à coté d'une des entrées de
-    la partie inférieure de la fenêtre.</p>
-
-    <ul>
-        <li>Le bouton <i>Explorer</i> vous permet de
-        sélectionner un fichier existant sur votre
-        ordinateur.</li>
-
-        <li>Le bouton <i>Télécharger</i> vous permet
-        de télécharger une liste depuis l'internet en
-        entrant une URL, de la stocker dans un fichier local sur
-        votre ordinateur et de la lier comme une liste de journaux
-        depuis JabRef. L'URL sera par défaut l'adresse de la
-        liste de journaux disponible depuis la page web de JabRef.
-        Cette liste est incomplète mais pourra être
-        améliorée dans le futur.</li>
-    </ul>Toute entrée dans votre liste personnelle de
-    journaux sera prioritaire devant une entrée ayant le
-    même nom complet dans l'une des listes externes. De
-    même, les listes externes sont prioritaires selon l'ordre
-    dans lequel elles sont listées.
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Abréviations des journaux</h1>
+
+    <p>Cette fonction peut
+    être configurée dans <b>Options -> Gérer
+    les abréviations de journaux</b>.</p>
+
+    <p>JabRef peut basculer automatiquement les noms de journaux
+    entre leurs formes abrégées et non
+    abrégées tant que les noms sont
+    contenus dans une de vos listes de journaux. 
+    JabRef inclut une très longue liste d'abréviations de journaux,
+    toutefois il est probable qu'elle soit incomplète pour les travaux
+    de beaucoup d'utilisateurs. 
+    Vous pouvez ajouter des abréviations à partir d'un nombre
+    quelconque de listes, chacune correspond à un fichier texte
+    présent sur votre disque dur.</p>
+
+    <h2>Utiliser cette fonction</h2>
+
+    <p>La conversion de noms de journaux peut être
+    effectuée depuis l'éditeur d'entrées ou
+    depuis le menu <b>Outils</b>. Dans l'éditeur
+    d'entrées, vous trouverez un bouton nommé
+    <i>Masquer/afficher l'abréviation</i> à droite du
+    champ <i>journal</i>. Cliquer sur ce bouton changera le mode
+    d'affichage du nom du journal. Trois modes sont
+    possibles :</p>
+
+    <ul>
+        <li>Nom complet, par exemple "Aquacultural
+        Engineering"</li>
+
+        <li>Abréviation ISO, par exemple "Aquacult.
+        Eng."</li>
+
+        <li>Abréviation MEDLINE, par exemple "Aquacult
+        Eng"</li>
+    </ul>Si le nom du journal actuel n'est pas trouvé dans
+    la liste des journaux, le champ ne sera pas modifié.
+
+    <p>Pour convertir en une seule fois les noms de journaux de
+    beaucoup d'entrées, vous pouvez sélectionner ces
+    entrées et choisir <b>Outils -> Abréger les
+    noms de journaux (ISO)</b>, <b>Outils -> Abréger les
+    noms de journaux (MEDLINE)</b> ou <b>Outils ->
+    Développer les noms des journaux</b>. Ces trois actions
+    abrégeront ou développeront les noms de journaux
+    pour toutes les entrées sélectionnées dont
+    le nom de journal a pu être trouvé dans vos listes
+    de journaux.</p>
+
+    <h2>Paramétrer vos listes de journaux</h2>
+
+    <p>En plus de la liste inclue par défaut dans JabRef, 
+    vous pouvez avoir plusieurs listes sous la forme de
+    fichiers texte externes liés depuis JabRef.
+    La liste par défaut peut être 
+    éditée depuis JabRef.</p>
+    
+    <h3>Votre liste personnelle des abréviations de
+    journaux</h3>
+
+    <p>Votre liste personnelle de journaux est
+    gérée dans la partie supérieure de la
+    fenêtre <b>Gérer les abréviations de
+    journaux</b>. Pour commencer à construire votre liste
+    d'abréviations de journaux, choisissez <i>Nouveau
+    fichier</i>, et entrez manuellement le nom du fichier ou
+    utilisez le bouton <i>Explorer</i>. Si vous disposez
+    déjà d'un fichier que vous souhaitez utiliser
+    comme point de départ, choisissez <i>Fichier
+    existant</i> et utilisez le bouton <i>Explorer</i> pour choisir
+    le fichier. La table sera mise à jour pour tenir compte
+    du contenu de la liste sélectionnée.</p>
+
+    <p>La table et les boutons d'outils à sa droite vous
+    permettent d'ajouter, de supprimer et d'éditer les
+    entrées de journaux. Pour chaque entrée, vous
+    devez fournir le nom complet du journal et son
+    abréviation ISO (par exemple "Aquacultural Engineering"
+    et "Aquacult. Eng."). Pour éditer une entrée,
+    double-cliquez sur sa ligne dans la table.</p>
+
+    <p>Une fois que vous avez cliqué sur <i>OK</i>, si vous
+    avez sélectionné un fichier et que la table
+    contient au moins une entrée, le contenu de la table
+    sera stocké dans le fichier sélectionné,
+    et la liste des journaux de JabRef sera mise à jour.</p>
+
+    <h3>Listes externes de journaux</h3>
+
+    <p>En plus de votre liste
+    personnelle, vous pouvez relier plusieurs listes externes. Ces
+    liens peuvent être paramétré dans la partie
+    inférieure de la fenêtre <b>Gérer les
+    abréviations de journaux</b>. Les listes externes sont
+    similaires à la liste personnelle - la seule
+    différence est que JabRef ne fournit pas d'interface
+    pour éditer les listes externes.</p>
+
+    <p>Pour ajouter une nouvelle liste externe, cliquez sur le
+    bouton <b>+</b>. Cela ajoutera une nouvelle entrée
+    à l'interface. Ensuite, utilisez soit le bouton
+    <i>Explorer</i> soit le bouton <i>Télécharger</i>
+    situé à coté d'une des entrées de
+    la partie inférieure de la fenêtre.</p>
+
+    <ul>
+        <li>Le bouton <i>Explorer</i> vous permet de
+        sélectionner un fichier existant sur votre
+        ordinateur.</li>
+
+        <li>Le bouton <i>Télécharger</i> vous permet
+        de télécharger une liste depuis l'internet en
+        entrant une URL, de la stocker dans un fichier local sur
+        votre ordinateur et de la lier comme une liste de journaux
+        depuis JabRef. L'URL sera par défaut l'adresse de la
+        liste de journaux disponible depuis la page web de JabRef.
+        Cette liste est incomplète mais pourra être
+        améliorée dans le futur.</li>
+    </ul>Toute entrée dans votre liste personnelle de
+    journaux sera prioritaire devant une entrée ayant le
+    même nom complet dans l'une des listes externes. De
+    même, les listes externes sont prioritaires selon l'ordre
+    dans lequel elles sont listées.
+</body>
+</html>
diff --git a/src/help/fr/LabelPatterns.html b/src/help/fr/LabelPatterns.html
index 707baa5..dbe5b4b 100644
--- a/src/help/fr/LabelPatterns.html
+++ b/src/help/fr/LabelPatterns.html
@@ -1,224 +1,224 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Personnalisation du générateur de clefs
-    BibTeX</h1>
-
-    <p>Dans le menu 'Paramétrage des clefs' de la
-    fenêtre Préférences, on peut indiquer les
-    champs à utiliser pour la génération
-    automatique des clefs BibTeX. La définition peut
-    être faite pour chacune des entrées standards.</p>
-
-    <h2>Les définitions de clefs</h2>
-
-    <p>La définition peut contenir n'importe quel texte au
-    choix ainsi que des marqueurs de champs qui indiquent les
-    champs particuliers de l'entrée utilisés et leur
-    position dans la clef. Un marqueur de champ est
-    constitué généralement du nom du champ
-    entre crochets, par ex. <b>[volume]</b>. Si le champ n'est pas
-    défini dans l'entrée lorsque la clef est
-    générée, aucun texte n'est
-    inséré dans la clef.</p>
-
-    <p>Plusieurs marqueurs de champs spéciaux sont fournis
-    et permettent l'extraction d'une partie du contenu d'un champ.
-    Ils sont donnés ci-dessous. Vous pouvez librement
-    suggérer de nouveaux marqueurs de champs
-    spéciaux.</p>
-
-    <p>Les marqueurs de champs spéciaux :</p>
-
-    <ul>
-        <li><b>[<code>auth</code>]</b> : Le nom du premier
-        auteur<br /></li>
-
-        <li><b>[<code>authors</code>]</b> : Le nom de tous les
-        auteurs<br /></li>
-
-        <li><b>[<code>authorLast</code>]</b>: Le nom propre du dernier
-        auteur<br /></li>
-
-        <li><b>[<code>authorsN</code>]</b>: Les noms des N premiers
-        auteurs. S'il y a plus d'auteurs, "EtAl" est
-        ajouté.<br /></li>
-                
-        <li><b>[<code>authorsAlpha</code>]</b> : correspond au style
-        BibTeX "alpha". Un auteur : les trois premières lettres du nom.
-        Deux à quatre auteurs : Les premières lettres des noms, concaténées.
-        Plus de quatre auterus : Les premières lettres des noms des trois
-        premiers auteurs, concaténées, avec un "+" à la fin.<br /></li>
-
-        <li><b>[<code>authIniN</code>]</b> : Les N
-        premières lettres (ou moins) du nom de chacun des
-        auteurs.<br /></li>
-
-        <li><b>[<code>authorIni</code>]</b> : Les 5
-        premières lettres du nom du premier auteur et les
-        initiales du nom des auteurs restants<br /></li>
-
-        <li><b>[<code>authN</code>]</b> : Les N
-        premières lettres du premier auteur.<br /></li>
-
-        <li><b>[<code>authN_M</code>]</b> : Les N
-        premières lettres du nom des M premiers
-        auteurs.<br /></li>
-
-        <li><b>[<code>auth.auth.ea</code>]</b> : Le nom des
-        deux premiers auteurs suivi de ".ea" lorsqu'ils sont plus
-        de deux.<br /></li>
-
-        <li><b>[<code>auth.etal</code>]</b>: Le nom du premier
-        auteur et le nom du second auteur, ou ".etal" s'il y en a
-        plus de deux.<br /></li>
-
-        <li><b>[<code>authshort</code>]</b> : Le nom s'il n'y
-        a qu'un seul auteur. Jusqu'à trois auteurs, le
-        premier caractère du nom de chacun d'eux. Au
-        delà de trois auteurs, le caractère plus (+)
-        est ajouté.<br /></li>
-    </ul><b>Note :</b> S'il n'y a pas d'auteur (dans le cas
-    d'un livre édité), alors tous les marqueurs
-    <b><code>[auth...]</code></b> ci-dessus utiliseront
-    l'éditeur(s) (s'il y en a) comme alternative. Ainsi
-    l'éditeur(s) d'un livre sans auteur sera traité
-    comme l'auteur(s) pour la génération des clefs.
-    Si vous ne désirez pas ce comportement, c'est à
-    dire si vous voulez un marqueur qui soit vide s'il n'y a pas
-    d'auteur, utilisez le code <b><code>pureauth</code></b> au lieu
-    du code <b><code>auth</code></b> dans les marqueurs ci-dessus.
-    Par exemple, <b><code>[pureauth]</code></b> ou
-    <b><code>[pureauthors3]</code></b>.
-
-    <ul>
-        <li><b>[<code>edtr</code>]</b> : Le nom du premier
-        éditeur.<br /></li>
-
-        <li><b>[<code>edtrIniN</code>]</b> : Les N
-        premières lettres du nom de chaque
-        éditeur.<br /></li>
-
-        <li><b>[<code>editors</code>]</b> : Le nom des chacun
-        des éditeurs.<br /></li>
-
-        <li><b>[<code>editorLast</code>]</b>: Le nom propre du dernier
-        éditeur<br /></li>
-        
-        <li><b>[<code>editorIni</code>]</b> : Les cinq
-        premières lettres du nom du premier éditeur
-        suivi des initiales du nom des éditeurs
-        restants.<br /></li>
-
-        <li><b>[<code>edtrN</code>]</b> : Les N
-        premières lettres du nom du premier
-        éditeur.<br /></li>
-
-        <li><b>[<code>edtrN_M</code>]</b> : Les N
-        premières lettres du nom des M premiers
-        éditeurs.<br /></li>
-
-        <li><b>[<code>edtr.edtr.ea</code>]</b> : Le nom des
-        deux premiers éditeurs suivi de ".ea" lorsqu'ils
-        sont plus de deux.<br /></li>
-
-        <li><b>[<code>edtrshort</code>]</b> : Le nom s'il n'y
-        a qu'un seul éditeur. Jusqu'à trois
-        éditeurs, le premier caractère du nom de
-        chacun d'eux. Au delà de trois éditeurs, le
-        caractère plus (+) est ajouté.<br /></li>
-
-        <li><b>[<code>firstpage</code>]</b> : Le numéro
-        de la première page de la publication (Attention : cela retournera
-        le plus petit nombre trouvé dans le champ pages, puisque BibTeX
-        permet <code>7,41,73--97</code> ou <code>43+</code>).<br /></li>
-
-        <li><b>[<code>keywordN</code>]</b>: Nombre de mots-clefs
-        dans le champ "keywords" en supposant que les mots-clefs
-        sont séparés par des virgules ou des
-        points-virgules.<br /></li>
-
-        <li><b>[<code>lastpage</code>]</b> : Le numéro
-        de la dernière page de la publication (voir la remarque dans
-        <code>firstpage</code>).<br /></li>
-
-        <li><b>[<code>shorttitle</code>]</b> : Les 3 premiers
-        mots du titre.<br /></li>
-
-        <li><b>[<code>shortyear</code>]</b> : Les 2 derniers
-        chiffres de l'année de publication.<br /></li>
-
-        <li><b>[<code>veryshorttitle</code>]</b> : Le premier
-        mot du titre qui ne soit pas 'the', 'a', 'an'.<br /></li>
-    </ul>
-
-    <p>Un nom de champs (ou celui de l'un des pseudo-champs vu au
-    dessus) peut, de façon optionnelle, être suivi par
-    un ou plusieurs modificateurs. Les modificateurs sont
-    appliqués dans l'ordre où ils sont
-    spécifiés.</p>
-
-    <ul>
-        <li><b>:abbr</b>: Abrège le texte produit par le nom
-        du champ ou un marqueur de champ spécial. Uniquement
-        le premier caractère et les caractères
-        suivant un espace seront inclus. Par exemple,
-        <b>[journal:abbr]</b> abrègera "Journal of Fish
-        Biology" en "JoFB".<br /></li>
-
-        <li><b>:lower</b>, force le texte inséré par
-        le marqueur de champ à être en minuscules. Par
-        exemple, <b>[auth:lower]</b> bascule le nom du premier
-        auteur en minuscules.</li>
-    </ul>
-
-    <p>Si vous n'avez pas défini de modèle de clef
-    pour un type d'entrées donné, le <b>Modèle
-    de clef par défaut</b> sera utilisé. Vous pouvez
-    changer le modèle par défaut - son
-    paramétrage se trouve au-dessus de la liste des types
-    d'entrées dans la section <b>Paramétrage des
-    clefs</b> de la fenêtre
-    <b>Préférences</b>.</p>
-
-    <p>La clef utilisée par défaut est [auth][year];
-    elle produit des clefs du type <code>Yared1998</code>. Si la
-    clef n'est pas unique dans la base de donnée, elle est
-    modifiée par l'ajout d'une des lettres de a à z
-    et ceci jusqu'a ce quelle soit unique. De cette façon,
-    les étiquettes ressemblent à :</p>
-
-    <p style="margin-left: 28pt">
-        <code>Yared1998</code><br />
-        <code>Yared1998a</code><br />
-        <code>Yared1998b</code>
-    </p>
-
-    <h2>Remplacement d'expressions régulières</h2>
-
-    <p>Après que la définition de clef ait
-    été appliquée pour produire une clef, vous
-    pouvez demander au générateur de clef de
-    rechercher les occurrences d'une expression
-    régulière donnée et de la remplacer avec
-    une chaîne. L'expression régulière et la
-    chaîne de remplacement sont entrées dans les
-    champs textes situés sous la liste des définition
-    de clefs.</p>
-
-    <p>Si la chaîne de remplacement est vide, les
-    correspondances de l'expression régulière seront
-    simplement supprimées de la clef
-    générée. Par exemple, en remplaçant
-    <code>\p{Punct}</code> ou <code>[:/%]</code>
-    par une chaîne vide, on supprimera les caractères
-    correspondants (et non désirés) de la clef.
-    Cela peut être utile lors du renommage des PDF sur la base
-    des clefs BibTeX.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Personnalisation du générateur de clefs
+    BibTeX</h1>
+
+    <p>Dans le menu 'Paramétrage des clefs' de la
+    fenêtre Préférences, on peut indiquer les
+    champs à utiliser pour la génération
+    automatique des clefs BibTeX. La définition peut
+    être faite pour chacune des entrées standards.</p>
+
+    <h2>Les définitions de clefs</h2>
+
+    <p>La définition peut contenir n'importe quel texte au
+    choix ainsi que des marqueurs de champs qui indiquent les
+    champs particuliers de l'entrée utilisés et leur
+    position dans la clef. Un marqueur de champ est
+    constitué généralement du nom du champ
+    entre crochets, par ex. <b>[volume]</b>. Si le champ n'est pas
+    défini dans l'entrée lorsque la clef est
+    générée, aucun texte n'est
+    inséré dans la clef.</p>
+
+    <p>Plusieurs marqueurs de champs spéciaux sont fournis
+    et permettent l'extraction d'une partie du contenu d'un champ.
+    Ils sont donnés ci-dessous. Vous pouvez librement
+    suggérer de nouveaux marqueurs de champs
+    spéciaux.</p>
+
+    <p>Les marqueurs de champs spéciaux :</p>
+
+    <ul>
+        <li><b>[<code>auth</code>]</b> : Le nom du premier
+        auteur<br /></li>
+
+        <li><b>[<code>authors</code>]</b> : Le nom de tous les
+        auteurs<br /></li>
+
+        <li><b>[<code>authorLast</code>]</b>: Le nom propre du dernier
+        auteur<br /></li>
+
+        <li><b>[<code>authorsN</code>]</b>: Les noms des N premiers
+        auteurs. S'il y a plus d'auteurs, "EtAl" est
+        ajouté.<br /></li>
+                
+        <li><b>[<code>authorsAlpha</code>]</b> : correspond au style
+        BibTeX "alpha". Un auteur : les trois premières lettres du nom.
+        Deux à quatre auteurs : Les premières lettres des noms, concaténées.
+        Plus de quatre auterus : Les premières lettres des noms des trois
+        premiers auteurs, concaténées, avec un "+" à la fin.<br /></li>
+
+        <li><b>[<code>authIniN</code>]</b> : Les N
+        premières lettres (ou moins) du nom de chacun des
+        auteurs.<br /></li>
+
+        <li><b>[<code>authorIni</code>]</b> : Les 5
+        premières lettres du nom du premier auteur et les
+        initiales du nom des auteurs restants<br /></li>
+
+        <li><b>[<code>authN</code>]</b> : Les N
+        premières lettres du premier auteur.<br /></li>
+
+        <li><b>[<code>authN_M</code>]</b> : Les N
+        premières lettres du nom des M premiers
+        auteurs.<br /></li>
+
+        <li><b>[<code>auth.auth.ea</code>]</b> : Le nom des
+        deux premiers auteurs suivi de ".ea" lorsqu'ils sont plus
+        de deux.<br /></li>
+
+        <li><b>[<code>auth.etal</code>]</b>: Le nom du premier
+        auteur et le nom du second auteur, ou ".etal" s'il y en a
+        plus de deux.<br /></li>
+
+        <li><b>[<code>authshort</code>]</b> : Le nom s'il n'y
+        a qu'un seul auteur. Jusqu'à trois auteurs, le
+        premier caractère du nom de chacun d'eux. Au
+        delà de trois auteurs, le caractère plus (+)
+        est ajouté.<br /></li>
+    </ul><b>Note :</b> S'il n'y a pas d'auteur (dans le cas
+    d'un livre édité), alors tous les marqueurs
+    <b><code>[auth...]</code></b> ci-dessus utiliseront
+    l'éditeur(s) (s'il y en a) comme alternative. Ainsi
+    l'éditeur(s) d'un livre sans auteur sera traité
+    comme l'auteur(s) pour la génération des clefs.
+    Si vous ne désirez pas ce comportement, c'est à
+    dire si vous voulez un marqueur qui soit vide s'il n'y a pas
+    d'auteur, utilisez le code <b><code>pureauth</code></b> au lieu
+    du code <b><code>auth</code></b> dans les marqueurs ci-dessus.
+    Par exemple, <b><code>[pureauth]</code></b> ou
+    <b><code>[pureauthors3]</code></b>.
+
+    <ul>
+        <li><b>[<code>edtr</code>]</b> : Le nom du premier
+        éditeur.<br /></li>
+
+        <li><b>[<code>edtrIniN</code>]</b> : Les N
+        premières lettres du nom de chaque
+        éditeur.<br /></li>
+
+        <li><b>[<code>editors</code>]</b> : Le nom des chacun
+        des éditeurs.<br /></li>
+
+        <li><b>[<code>editorLast</code>]</b>: Le nom propre du dernier
+        éditeur<br /></li>
+        
+        <li><b>[<code>editorIni</code>]</b> : Les cinq
+        premières lettres du nom du premier éditeur
+        suivi des initiales du nom des éditeurs
+        restants.<br /></li>
+
+        <li><b>[<code>edtrN</code>]</b> : Les N
+        premières lettres du nom du premier
+        éditeur.<br /></li>
+
+        <li><b>[<code>edtrN_M</code>]</b> : Les N
+        premières lettres du nom des M premiers
+        éditeurs.<br /></li>
+
+        <li><b>[<code>edtr.edtr.ea</code>]</b> : Le nom des
+        deux premiers éditeurs suivi de ".ea" lorsqu'ils
+        sont plus de deux.<br /></li>
+
+        <li><b>[<code>edtrshort</code>]</b> : Le nom s'il n'y
+        a qu'un seul éditeur. Jusqu'à trois
+        éditeurs, le premier caractère du nom de
+        chacun d'eux. Au delà de trois éditeurs, le
+        caractère plus (+) est ajouté.<br /></li>
+
+        <li><b>[<code>firstpage</code>]</b> : Le numéro
+        de la première page de la publication (Attention : cela retournera
+        le plus petit nombre trouvé dans le champ pages, puisque BibTeX
+        permet <code>7,41,73--97</code> ou <code>43+</code>).<br /></li>
+
+        <li><b>[<code>keywordN</code>]</b>: Nombre de mots-clefs
+        dans le champ "keywords" en supposant que les mots-clefs
+        sont séparés par des virgules ou des
+        points-virgules.<br /></li>
+
+        <li><b>[<code>lastpage</code>]</b> : Le numéro
+        de la dernière page de la publication (voir la remarque dans
+        <code>firstpage</code>).<br /></li>
+
+        <li><b>[<code>shorttitle</code>]</b> : Les 3 premiers
+        mots du titre.<br /></li>
+
+        <li><b>[<code>shortyear</code>]</b> : Les 2 derniers
+        chiffres de l'année de publication.<br /></li>
+
+        <li><b>[<code>veryshorttitle</code>]</b> : Le premier
+        mot du titre qui ne soit pas 'the', 'a', 'an'.<br /></li>
+    </ul>
+
+    <p>Un nom de champs (ou celui de l'un des pseudo-champs vu au
+    dessus) peut, de façon optionnelle, être suivi par
+    un ou plusieurs modificateurs. Les modificateurs sont
+    appliqués dans l'ordre où ils sont
+    spécifiés.</p>
+
+    <ul>
+        <li><b>:abbr</b>: Abrège le texte produit par le nom
+        du champ ou un marqueur de champ spécial. Uniquement
+        le premier caractère et les caractères
+        suivant un espace seront inclus. Par exemple,
+        <b>[journal:abbr]</b> abrègera "Journal of Fish
+        Biology" en "JoFB".<br /></li>
+
+        <li><b>:lower</b>, force le texte inséré par
+        le marqueur de champ à être en minuscules. Par
+        exemple, <b>[auth:lower]</b> bascule le nom du premier
+        auteur en minuscules.</li>
+    </ul>
+
+    <p>Si vous n'avez pas défini de modèle de clef
+    pour un type d'entrées donné, le <b>Modèle
+    de clef par défaut</b> sera utilisé. Vous pouvez
+    changer le modèle par défaut - son
+    paramétrage se trouve au-dessus de la liste des types
+    d'entrées dans la section <b>Paramétrage des
+    clefs</b> de la fenêtre
+    <b>Préférences</b>.</p>
+
+    <p>La clef utilisée par défaut est [auth][year];
+    elle produit des clefs du type <code>Yared1998</code>. Si la
+    clef n'est pas unique dans la base de donnée, elle est
+    modifiée par l'ajout d'une des lettres de a à z
+    et ceci jusqu'a ce quelle soit unique. De cette façon,
+    les étiquettes ressemblent à :</p>
+
+    <p style="margin-left: 28pt">
+        <code>Yared1998</code><br />
+        <code>Yared1998a</code><br />
+        <code>Yared1998b</code>
+    </p>
+
+    <h2>Remplacement d'expressions régulières</h2>
+
+    <p>Après que la définition de clef ait
+    été appliquée pour produire une clef, vous
+    pouvez demander au générateur de clef de
+    rechercher les occurrences d'une expression
+    régulière donnée et de la remplacer avec
+    une chaîne. L'expression régulière et la
+    chaîne de remplacement sont entrées dans les
+    champs textes situés sous la liste des définition
+    de clefs.</p>
+
+    <p>Si la chaîne de remplacement est vide, les
+    correspondances de l'expression régulière seront
+    simplement supprimées de la clef
+    générée. Par exemple, en remplaçant
+    <code>\p{Punct}</code> ou <code>[:/%]</code>
+    par une chaîne vide, on supprimera les caractères
+    correspondants (et non désirés) de la clef.
+    Cela peut être utile lors du renommage des PDF sur la base
+    des clefs BibTeX.</p>
+</body>
+</html>
diff --git a/src/help/fr/MarkingHelp.html b/src/help/fr/MarkingHelp.html
index a21e80a..eafa787 100644
--- a/src/help/fr/MarkingHelp.html
+++ b/src/help/fr/MarkingHelp.html
@@ -1,71 +1,71 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Etiqueter les entrées</h1>
-
-    <p>Vous avez la
-    possibilité d'<em>étiqueter</em> des
-    entrées. Les raccourcis claviers sont CTRL-M et
-    CTRL-MAJ-M pour, respectivement, étiqueter et
-    désétiqueter les entrées
-    sélectionnées. Vous pouvez aussi accéder
-    à ces actions en utilisant le menu <b>Edition</b>.</p>
-
-    <p>Étiqueter des entrées n'est pas la
-    même chose que les sélectionner. Les
-    entrées étiquetées se comportent
-    différemment des autres, et ce de deux façons.
-    Premièrement, elles sont toujours affichées avec
-    un fond de couleur différente dans le tableau des entrées.
-    Deuxièmement, elles seront affichées en haut de
-    la liste des entrées, et ce tant que votre table n'est
-    pas triée selon des groupes ou par une recherche
-    flottante.</p>
-
-    <p>Sauver votre base de données préservera
-    l'étiquetage.</p>
-
-    <p>La couleur avec laquelle chaque entrée étiquetée
-    est affichée dépend du niveau d'étiquetage de
-    l'entrée. Les couleurs par défaut vont du jaune au
-    rouge. Des menus permettent à la fois d'incrémenter le niveau
-    d'étiquetage des entrées sélectionnées et
-    de sélectionner directement le niveau d'étiquetage
-    désiré.
-    </p>
-
-    <p>Les entrées étiquetées vous seront
-    utiles si, par exemple, vous avez besoin de faire plusieurs
-    recherches sans perdre vos premiers résultats, ou si
-    vous avez besoin de vous souvenir des articles ou des livres
-    auxquels il faut que vous prêtiez attention.</p>
-
-    <p>En  plus de l'étiquetage manuel des entrées, JabRef peut
-    éventuellement étiqueter automatiquement les dernières
-    entrées importées et simultanément
-    désétiqueter les entrées précédemment
-    étiquetées de cette façon. Ces entrées seront
-    affichées d'une couleur différente de celles
-    étiquetées manuellement - par défaut en vert.
-    Cette fonctionnalité est activé dans
-    <b>Options -> Préférences -> Général</b></p>
-
-    <p>L'étiquetage des entrées sera associé à
-    votre nom d'utilisateur, le même nom que vous utilisez pour remplir
-    le champ "owner" des entrées que vous créez ou importez
-    (cela correspondra par défaut à votre nom d'utilisateur dans
-    votre système d'exploitation, mais peut-être modifié
-    dans <b>Options -> Préférences -> Général</b>.
-    Différents utilisateurs peuvent marquer des entrées
-    indépendamment. L'enregistrement de la base de données
-    conservera les étiquettes.
-    </p>
-
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Etiqueter les entrées</h1>
+
+    <p>Vous avez la
+    possibilité d'<em>étiqueter</em> des
+    entrées. Les raccourcis claviers sont CTRL-M et
+    CTRL-MAJ-M pour, respectivement, étiqueter et
+    désétiqueter les entrées
+    sélectionnées. Vous pouvez aussi accéder
+    à ces actions en utilisant le menu <b>Edition</b>.</p>
+
+    <p>Étiqueter des entrées n'est pas la
+    même chose que les sélectionner. Les
+    entrées étiquetées se comportent
+    différemment des autres, et ce de deux façons.
+    Premièrement, elles sont toujours affichées avec
+    un fond de couleur différente dans le tableau des entrées.
+    Deuxièmement, elles seront affichées en haut de
+    la liste des entrées, et ce tant que votre table n'est
+    pas triée selon des groupes ou par une recherche
+    flottante.</p>
+
+    <p>Sauver votre base de données préservera
+    l'étiquetage.</p>
+
+    <p>La couleur avec laquelle chaque entrée étiquetée
+    est affichée dépend du niveau d'étiquetage de
+    l'entrée. Les couleurs par défaut vont du jaune au
+    rouge. Des menus permettent à la fois d'incrémenter le niveau
+    d'étiquetage des entrées sélectionnées et
+    de sélectionner directement le niveau d'étiquetage
+    désiré.
+    </p>
+
+    <p>Les entrées étiquetées vous seront
+    utiles si, par exemple, vous avez besoin de faire plusieurs
+    recherches sans perdre vos premiers résultats, ou si
+    vous avez besoin de vous souvenir des articles ou des livres
+    auxquels il faut que vous prêtiez attention.</p>
+
+    <p>En  plus de l'étiquetage manuel des entrées, JabRef peut
+    éventuellement étiqueter automatiquement les dernières
+    entrées importées et simultanément
+    désétiqueter les entrées précédemment
+    étiquetées de cette façon. Ces entrées seront
+    affichées d'une couleur différente de celles
+    étiquetées manuellement - par défaut en vert.
+    Cette fonctionnalité est activé dans
+    <b>Options -> Préférences -> Général</b></p>
+
+    <p>L'étiquetage des entrées sera associé à
+    votre nom d'utilisateur, le même nom que vous utilisez pour remplir
+    le champ "owner" des entrées que vous créez ou importez
+    (cela correspondra par défaut à votre nom d'utilisateur dans
+    votre système d'exploitation, mais peut-être modifié
+    dans <b>Options -> Préférences -> Général</b>.
+    Différents utilisateurs peuvent marquer des entrées
+    indépendamment. L'enregistrement de la base de données
+    conservera les étiquettes.
+    </p>
+
+
+</body>
+</html>
diff --git a/src/help/fr/MedlineHelp.html b/src/help/fr/MedlineHelp.html
index 09934cb..b56890c 100644
--- a/src/help/fr/MedlineHelp.html
+++ b/src/help/fr/MedlineHelp.html
@@ -1,73 +1,73 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Récupération d'entrées depuis
-    Medline</h1>
-
-    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> Recherche Web</b>.
-    L'interface de recherche apparaitra dans le panneau latéral. Sélectionnez
-    <b>Medline</b> dans le menu déroulant.</p>
-            
-    <p>MEDLINE est la principale base de données
-    bibliographique de la bibliothèque nationale de
-    médecine des États-Unis. Elle contient des
-    références à des articles de journaux sur
-    les sciences de la vie avec une spécialisation sur la
-    biomédecine.</p>
-
-    <p>Il y a deux manières d'indiquer les entrées
-    à télécharger :</p>
-
-    <ol>
-        <li>Entrez un ou plusieurs ID Medline
-        (séparés par des virgules/points-virgules)
-        dans le champ texte</li>
-
-        <li>Entrez une série de noms et/ou de mots à
-        rechercher. Vous pouvez utiliser les opérateurs
-        <em>and</em> et <em>or</em> et les parenthèses pour
-        raffiner l'expression de votre recherche. Voir
-        <a href="http://www.ovid.com/site/products/ovidguide/medline.htm">opérateurs Medline/OVID</a>
-        pour une description complète.</li>
-
-       <li> Exemples :
-       <ol>
-         <li>May [au] AND Anderson [au]</li>
-         <li> Anderson RM [au] HIV [ti] </li>
-         <li> Valleron [au] 1988:2000[dp] HIV [ti]</li>
-         <li> Valleron [au] AND 1987:2000[dp] AND (AIDS [ti] OR HIV[ti])</li>
-         <li> Anderson [au] AND Nature [ta]</li>
-         <li>Population [ta] </li>
-       </ol>
-       </li>
-	   </ol>
-
-       <p>Dans les deux cas, appuyez sur la touche
-    <b>Entrée</b> du clavier ou sur le bouton
-    <b>Rechercher</b>. Si vous utilisez une recherche de texte,
-    vous serez informé du nombre d'entrées
-    trouvées et vous pourrez choisir le nombre
-    d'entrées à télécharger.</p>
-
-    <p>Les entrées recherchées seront ajoutées
-    à votre base de données active.</p>
-
-    <h2>Utilisation d'un serveur proxy</h2>
-
-    <p>Si vous avez besoin d'utiliser un serveur de proxy, passez
-    le nom du serveur et le numéro de port au lancement de
-    java.</p>
-
-    <p><code>java -Dhttp.proxyHost="hostname"
-    -Dhttp.proxyPort="portnumber"</code></p>
-
-    <p>Ces paramètres d'environnement sont
-    expliqués dans la <a href="http://docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html">documentation Oracle J2SE</a>.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Récupération d'entrées depuis
+    Medline</h1>
+
+    <p>Pour utiliser cette fonction, choisissez <b>Recherche -> Recherche Web</b>.
+    L'interface de recherche apparaitra dans le panneau latéral. Sélectionnez
+    <b>Medline</b> dans le menu déroulant.</p>
+            
+    <p>MEDLINE est la principale base de données
+    bibliographique de la bibliothèque nationale de
+    médecine des États-Unis. Elle contient des
+    références à des articles de journaux sur
+    les sciences de la vie avec une spécialisation sur la
+    biomédecine.</p>
+
+    <p>Il y a deux manières d'indiquer les entrées
+    à télécharger :</p>
+
+    <ol>
+        <li>Entrez un ou plusieurs ID Medline
+        (séparés par des virgules/points-virgules)
+        dans le champ texte</li>
+
+        <li>Entrez une série de noms et/ou de mots à
+        rechercher. Vous pouvez utiliser les opérateurs
+        <em>and</em> et <em>or</em> et les parenthèses pour
+        raffiner l'expression de votre recherche. Voir
+        <a href="http://www.ovid.com/site/products/ovidguide/medline.htm">opérateurs Medline/OVID</a>
+        pour une description complète.</li>
+
+       <li> Exemples :
+       <ol>
+         <li>May [au] AND Anderson [au]</li>
+         <li> Anderson RM [au] HIV [ti] </li>
+         <li> Valleron [au] 1988:2000[dp] HIV [ti]</li>
+         <li> Valleron [au] AND 1987:2000[dp] AND (AIDS [ti] OR HIV[ti])</li>
+         <li> Anderson [au] AND Nature [ta]</li>
+         <li>Population [ta] </li>
+       </ol>
+       </li>
+	   </ol>
+
+       <p>Dans les deux cas, appuyez sur la touche
+    <b>Entrée</b> du clavier ou sur le bouton
+    <b>Rechercher</b>. Si vous utilisez une recherche de texte,
+    vous serez informé du nombre d'entrées
+    trouvées et vous pourrez choisir le nombre
+    d'entrées à télécharger.</p>
+
+    <p>Les entrées recherchées seront ajoutées
+    à votre base de données active.</p>
+
+    <h2>Utilisation d'un serveur proxy</h2>
+
+    <p>Si vous avez besoin d'utiliser un serveur de proxy, passez
+    le nom du serveur et le numéro de port au lancement de
+    java.</p>
+
+    <p><code>java -Dhttp.proxyHost="hostname"
+    -Dhttp.proxyPort="portnumber"</code></p>
+
+    <p>Ces paramètres d'environnement sont
+    expliqués dans la <a href="http://docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html">documentation Oracle J2SE</a>.</p>
+
+</body>
+</html>
diff --git a/src/help/fr/OpenOfficeIntegration.html b/src/help/fr/OpenOfficeIntegration.html
index 3749bed..e1824e6 100644
--- a/src/help/fr/OpenOfficeIntegration.html
+++ b/src/help/fr/OpenOfficeIntegration.html
@@ -1,553 +1,553 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-<h1>Intégration dans OpenOffice/LibreOffice</h1>
-
-<h2>Introduction</h2>
-
-<p>Cette fonction offre une interface pour insérer des citations et formater une
-    bibliographie dans un document OpenOffice ou LibreOffice Writer à partir
-    de JabRef.</p>
-
-<p>Tout au long de ce document d'aide, lorsque le nom <i>OpenOffice</i>
-    est utilisé, il peut être remplacé par <i>LibreOffice</i>.</p>
-    
-<h2>Utiliser l'interface OpenOffice/LibreOffice</h2>
-
-<p>Pour communiquer avec OpenOffice, JabRef doit tout d'abord se connecter à 
-    une instance active d'OpenOffice. Vous devez démarrez OpenOffice et ouvrir
-    votre document avant de vous y connecter à partir de JabRef. JabRef a
-    besoin de connaître la localisation de vos exécutables OpenOffice
-    (<b>soffice.exe</b> sous Windows et <b>soffice</b> sous les autres
-    systémes d'exploitation) et le répertoire où se trouvent plusieurs fichiers
-    OpenOffice jar. Si vous lancez la connexion en cliquant sur le bouton
-    <b>Connexion automatique</b>, JabRef tentera automatiquement de déterminer ses
-    emplacements. Si cela ne fonctionne pas, vous devez établir la connexion
-    en utilisant le bouton <b>Connexion manuelle</b> qui ouvrira une
-    fenêtre vous demandant les emplacements nécessaires.</p>
-
-<p>Après que la connexion ait été établie, vous pouvez insérer des citations en
-    sélectionnant une ou plusieurs entrées dans JabRef et en utilisant le bouton
-    <b>Envoyer vers OpenOffice</b> dans le menu déroulant de la barre d'outils
-    de JabRef ou en utilisant le bouton approprié dans la sous-fenêtre
-    OpenOffice du panneau latéral. Cela insérera les citations pour les entrées
-    sélectionnées à l'emplacement actuel du curseur dans le document OpenOffice
-    et mettra à jour la bibliographie afin qu'elle contienne la référence
-    complète.</p>
-
-<p><b>Note :</b> JabRef n'utilise pas le système de bibliographie intégré
-    à OpenOffice à cause des limitations de ce système. Un document contenant
-    des citations insérées par JabRef ne sera en général pas compatible avec 
-    d'autres gestionnaires de références tels que Bibus et Zotero.</p>
-
-<p>Deux types de citations différents peuvent être insérés - soit une citation
-    entre parenthèses, "(Auteur 2007)", soit une citation dans le texte
-    "Author (2007)". Cette distinction est uniquement pertinente si les
-    citations auteur-année sont utilisées au lieu des citations numérotées, mais
-    cette distinction sera conservée si vous basculer entre les deux styles.</p>
-
-<p>Si vous modifiez les entrées dans JabRef après l'insertion de leurs citations
-    dans OpenOffice, vous devrez synchroniser la bibliographie. Le bouton
-    <b>Synchroniser la bibliographie OO</b> mettra à jour toutes les entrées
-    de la bibliographie tant que leurs clefs BibTeX n'ont pas été modifiées
-    (JabRef encode la clef BibTeX dans le nom de la référence pour chaque
-    citation afin de suivre quelle clef BibTeX a l'entrée JabRef originale).</p>
-
-<h2>Le fichier de style</h2>
-
-<p>Pour configurer le style de citation, vous devez sélectionner un style de
-    fichier ou utiliser un des styles par défaut. Le style définit le format
-    des citations et le format de la bibliographie. Vous pouvez utiliser des
-    formateurs d'exportations standards de JabRef pour traiter les champs des
-    entrées avant qu'ils soient envoyés à OpenOffice. Grâce à l'existence de ce
-    fichier de style, vous disposez d'une flexibilité aussi grande que possible
-    dans les styles de citation. Vous pouvez changer de fichier de style à
-    tout moment et utiliser le bouton <b>Mettre à jour</b> pour que votre
-    bibliographie suive ce nouveau style.</p>
-<p>En cliquant sur le bouton <b>Sélectionner le style</b> vous pouvez ouvrir
-    une fenêtre qui permet de sélectionner soit le style par défaut soit un
-    fichier de style externe. Si vous voulez créer un nouveau style basé sur
-    celui par défaut, vous pouvez cliquer sur le bouton <b>Aperçu</b> afin
-    d'afficher le contenu du style par défaut que vous pouvez copier dans un
-    éditeur de texte et modifier.</p>
-<p>Pour choisir un fichier de style externe, vous avez deux possibilités.
-    Soit vous choisissez directement un fichier de style, soit vous paramétrez
-    un répertoire de fichiers de style. Si vous choisissez cette dernière
-    possibilité, vous pourrez voir la liste des styles de ce répertoire (et
-    de ces sous-répertoires) et en choisir un à partir de cette liste.</p>
-
-<p>Voici un exemple de fichier de style :</p>
-<pre>
-NAME
-Example style file for JabRef-OpenOffice integration.
-
-JOURNALS
-Journal name 1
-Journal name 2
-
-PROPERTIES
-Title="References"
-IsSortByPosition="false"
-IsNumberEntries="false"
-ReferenceParagraphFormat="Default"
-ReferenceHeaderParagraphFormat="Heading 1"
-
-CITATION
-AuthorField="author/editor"
-YearField="year"
-MaxAuthors="3"
-MaxAuthorsFirst="3"
-AuthorSeparator=", "
-AuthorLastSeparator=" & "
-EtAlString=" et al."
-ItalicEtAl="true"
-YearSeparator=" "
-InTextYearSeparator=" "
-BracketBefore="["
-BracketAfter="]"
-BracketBeforeInList="["
-BracketAfterInList="]"
-CitationSeparator="; "
-UniquefierSeparator=","
-GroupedNumbersSeparator="-"
-MinimumGroupingCount="3"
-FormatCitations="false"
-CitationCharacterFormat="Default"
-MultiCiteChronological="false"
-PageInfoSeparator="; "
-
-LAYOUT
-article=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
-(<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} :
-\format[FormatPagesForHTML]{\pages}\end{pages}.
-
-book=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}\begin{editor}
-\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.)\end{editor},
-<b>\year\uniq</b>. <i>\title</i>. \publisher, \address.
-
-incollection=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
-(<b>\year\uniq</b>). <i>\title</i>. In: \format[AuthorLastFirst,
-AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\booktitle</i>, \publisher.
-
-inbook=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
-(<b>\year\uniq</b>). <i>\chapter</i>. In: \format[AuthorLastFirst,
-AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\title</i>, \publisher.
-
-phdthesis=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
-(<b>\year\uniq</b>). <i>\title</i>, \school.
-
-default=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
-(<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} :
-\format[FormatPagesForHTML]{\pages}\end{pages}.
-
-</pre>
-
-<p>(Notez que la mise en page de chaque type d'entrée doit être limité à 
-    une seule ligne dans le fichier de style - ci-dessus, les lignes sont
-    coupées pour faciliter la lecture)</p>
-
-<h3>Propriétés générales</h3>
-
-<p>La section <b>PROPERTIES</b> décrit les propriétés générales de la
-    bibliographie. Le tableau ci-dessous décrit les propriétés
-    disponibles :</p>
-
-<table border="1" rules="none" summary="propriétés disponibles ">
-    <tr>
-        <td><b>Propriété</b></td>
-        <td><b>Type</b></td>
-        <td><b>Valeur par défaut</b></td>
-        <td><b>Description</b></td>
-    </tr>
-    <tr>
-        <td>IsNumberEntries</td>
-        <td>booléen</td>
-        <td><code>false</code></td>
-        <td>Détermine le type de citations à utiliser. Si <code>true</code>,
-            des citations numérotées seront utilisées. Si <code>false</code>,
-            des citations auteur-année seront utilisées.
-        </td>
-    </tr>
-    <tr>
-        <td>IsSortByPosition</td>
-        <td>booléen</td>
-        <td><code>false</code></td>
-        <td>Détermine comment la bibliographie est triée. Si vrai, les entrées
-            seront triées selon l'ordre dans lequel elles sont citées. Si faux,
-            les entrées seront classées par ordre alphabétique des auteurs.
-        </td>
-    </tr>
-    <tr>
-        <td>ReferenceParagraphFormat</td>
-        <td>chaîne</td>
-        <td><code>Default</code></td>
-        <td>Donne le nom du format de paragraphe à utiliser pour la liste de
-            références. Ce format doit être défini dans votre document
-            OpenOffice.
-        </td>
-    </tr>
-    <tr>
-        <td>ReferenceHeaderParagraphFormat</td>
-        <td>chaîne</td>
-        <td><code>Heading 1</code></td>
-        <td>Donne le nom du format de paragraphe à utiliser pour le titre de
-            la liste de références. Ce format doit être défini dans votre document
-            OpenOffice.
-        </td>
-    </tr>
-    <tr>
-        <td>Title</td>
-        <td>chaîne</td>
-        <td><code>Bibliography</code></td>
-        <td>Le texte à entrer comme titre de la liste de références.</td>
-    </tr>
-</table>
-
-<h3>Propriétés des citations</h3>
-
-<p>La section <b>CITATION</b> décrit le format des marqueurs de citation
-    insérés dans le texte.</p>
-
-<p>Le tableau ci-dessous donne une brève description de toutes les propriétés
-    de citation disponibles. Les propriétés qui n'apparaissent pas dans le
-    fichier de style garderont leur valeur par défaut.</p>
-
-<table border="1" rules="none" summary="description">
-    <tr>
-        <td><b>Propriété</b></td>
-        <td><b>Type</b></td>
-        <td><b>Valeur par défaut</b></td>
-        <td><b>Description</b></td>
-    </tr>
-    <tr>
-        <td>AuthorField</td>
-        <td>chaîne</td>
-        <td><code>author/editor</code></td>
-        <td>Champ BibTeX contenant les noms des auteurs. Peut contenir des
-            champs alternatifs, par exemple <code>author/editor</code></td>
-    </tr>
-    <tr>
-        <td>AuthorLastSeparator</td>
-        <td>chaîne</td>
-        <td><code> & </code></td>
-        <td>Texte inséré entre les deux derniers noms d'auteur.</td>
-    </tr>
-    <tr>
-        <td>AuthorLastSeparatorInText</td>
-        <td>chaîne</td>
-        <td> </td>
-        <td>Si spécifiés, cette propriété écrase
-            <code>AuthorLastSeparator</code> pour les citations dans le texte
-            telles que <code>Smith & Jones (2001)</code>.
-        </td>
-    </tr>
-    <tr>
-        <td>AuthorSeparator</td>
-        <td>chaîne</td>
-        <td><code>, </code></td>
-        <td>Texte inséré entre les noms d'auteurs excepté pour les deux
-            derniers.</td>
-    </tr>
-    <tr>
-        <td>BracketAfter</td>
-        <td>chaîne</td>
-        <td><code>]</code></td>
-        <td>La parenthèse fermante des citations.</td>
-    </tr>
-    <tr>
-        <td>BracketAfterInList</td>
-        <td>chaîne</td>
-        <td>]</td>
-        <td>La parenthèse fermante pour la numérotation des citations dans
-            la liste des références.</td>
-    </tr>
-    <tr>
-        <td>BracketBefore</td>
-        <td>chaîne</td>
-        <td><code>[</code></td>
-        <td>La parenthèse ouvrante des citations.</td>
-    </tr>
-    <tr>
-        <td>BracketBeforeInList</td>
-        <td>chaîne</td>
-        <td>[</td>
-        <td>La parenthèse ouvrante pour la numérotation des citations dans
-            la liste des références.</td>
-    </tr>
-    <tr>
-        <td>CitationCharacterFormat</td>
-        <td>chaîne</td>
-        <td><code>Default</code></td>
-        <td>Si <code>FormatCitations</code> est mis à <code>true</code>,
-            le format de caractère ayant le nom donné par cette propriété sera
-            appliqué aux citations. Le format de caractère doit être défini
-            dans votre document OpenOffice.
-        </td>
-    </tr>
-    <tr>
-        <td>CitationSeparator</td>
-        <td>chaîne</td>
-        <td><code>; </code></td>
-        <td>Texte inséré entre les éléments quand une citation contient
-            plusieurs entrées, par exemple <code>[Smith 2001; Jones
-            2002]</code></td>
-    </tr>
-    <tr>
-        <td>EtAlString</td>
-        <td>chaîne</td>
-        <td><code> et al. </code></td>
-        <td>Texte inséré après les noms d'auteur quand tous les auteurs ne
-            sont pas listés, par exemple <code>[Smith et al. 2001]</code></td>
-    </tr>
-    <tr>
-        <td>FormatCitations</td>
-        <td>booléen</td>
-        <td><code>false</code></td>
-        <td>Détermine si le formatage doit être appliqué aux citations. Si vrai,
-            un format de caractère sera appliqué aux citations. La propriété
-            <code>CitationCharacterFormat</code> contrôle quel format doit être
-            appliqué.  Le format doit être défini dans votre document
-            OpenOffice. Tout paramètre et effet de caractère peut être choisit
-            dans OpenOffice pour votre format de caractère.
-        </td>
-    </tr>
-    <tr>
-        <td>GroupedNumbersSeparator</td>
-        <td>chaîne</td>
-        <td><code>-</code></td>
-        <td>Texte inséré entre les nombres quand les citations numériques sont
-            groupées, par exemple <code>[4-6]</code></td>
-    </tr>
-    <tr>
-        <td>InTextYearSeparator</td>
-        <td>chaîne</td>
-        <td>Single Space</td>
-        <td>Texte inséré entre les noms d'auteur et la parenthèse ouvrante
-            avant l'année dans les citations dans le texte.</td>
-    </tr>
-    <tr>
-        <td>ItalicEtAl</td>
-        <td>boolean</td>
-        <td><code>true</code></td>
-        <td>Si <code>true</code>, la chaîne "et al." dans les marqueurs de citation est mis en italique.</td>
-    </tr>
-    <tr>
-        <td>MaxAuthors</td>
-        <td>integer</td>
-        <td><code>3</code></td>
-        <td>Le nombre maximum d'auteurs à lister dans une citation qui apparaît
-            précédemment dans le document.</td>
-    </tr>
-    <tr>
-        <td>MaxAuthorsFirst</td>
-        <td>integer</td>
-        <td><code>3</code></td>
-        <td>Le nombre maximum d'auteurs à lister dans une citation qui apparaît
-            pour la première fois.</td>
-    </tr>
-    <tr>
-        <td>MinimumGroupingCount</td>
-        <td>integer</td>
-        <td><code>3</code></td>
-        <td>Le nombre minimum d'entrées consécutives qu'une citation doit
-            contenir avant que les nombres soient groupés, par exemple
-            <code>[4-6]</code> ou <code>[4; 5; 6]</code>.
-        </td>
-    </tr>
-    <tr>
-        <td>MultiCiteChronological</td>
-        <td>booléen</td>
-        <td><code>true</code></td>
-        <td>Si <code>true</code>, les entrées multiples d'une même citation
-            sont triées chronologiquement. Sinon, elles sont sorties
-            alphabétiquement.
-        </td>
-    </tr>
-    <tr>
-        <td>PageInfoSeparator</td>
-        <td>chaîne</td>
-        <td><code>; </code></td>
-        <td>Pour des citations avec des informations complémentaires, par exemple des numéros de page,
-            cette chaîne est insérée entre l'année (pour les citations auteur-année)
-            ou le numéro de citation (pour les citations numérotées) et les informations complémentaires.
-            Par exemple, le texte entre <code>2001</code> et <code>p. 301</code> dans <code>[Smith 2001; p. 301]</code>.
-        </td>
-    </tr>
-    <tr>
-        <td>UniquefierSeparator</td>
-        <td>chaîne</td>
-        <td><code>, </code></td>
-        <td>Texte inséré entre les lettres utilisées pour différencier les
-            citations ayant des auteurs et année similaires. Par exemple
-            le texte entre <code>a</code> et <code>b</code> dans
-            <code>[Smith 2001a, b]</code>.
-        </td>
-    </tr>
-    <tr>
-        <td>YearField</td>
-        <td>chaîne</td>
-        <td><code>year</code></td>
-        <td>Le champ BibTeX pour l'année de publication.</td>
-    </tr>
-    <tr>
-        <td>YearSeparator</td>
-        <td>chaîne</td>
-        <td>Single Space</td>
-        <td>Texte inséré entre les noms d'auteurs et l'année dans les citations
-            entre parenthèses telle que <code>[Smith 2001]</code>.</td>
-    </tr>
-</table>
-
-<p>Si des entrées numérotées sont utilisées, les propriétés
-    <code>BracketBefore</code> et <code>BracketAfter</code> sont les plus
-    importantes - elles définissent quels caractères sont utilisés dans le numéro
-    de citation. La citation est composée ainsi :<br/>
-    <code>[BracketBefore][Number][BracketAfter]</code><br/>
-    où [Number] est le nombre dans la citation, déterminé selon l'ordre de la
-    bibliographie et/ou la position de cette citation dans le texte. Si une
-    citation correspond à plusieurs entrées, elles seront séparées par la
-    chaîne donnée dans la propriété <code>CitationSeparator</code>
-    (par exemple, si <code>CitationSeparator</code>=;, la citation
-    ressemblera à <code>[2;4;6]</code>). Si au moins deux entrées correspondent
-    à des numéros consécutifs, ces numéros seront groupés (par exemple
-    <code>[2-4]</code> pour 2, 3 and 4 ou <code>[2;5-7]</code> pour 2, 5, 6 et
-    7). La propriété <code>GroupedNumbersSeparator</code> (par défaut
-    <code>-</code>) détermine quelle chaîne sépare le premier et le dernier
-    élément des numéros groupés. La propriété entière
-    <code>MinimumGroupingCount</code> (par défaut 3) détermine quel nombre
-    de numéros consécutifs est autorisé avant que les entrées ne soient
-    groupées. Si <code>MinimumGroupingCount</code>=3, les numéros 2 et 3 ne
-    seront pas groupés, tandis que 2, 3, 4 le seront. Si
-    <code>MinimumGroupingCount</code>=0, aucun groupement ne sera effectué
-    quel que soit le nombre de numéros consécutifs.
-</p>
-
-<p>Si des entrées numérotées ne sont pas utilisées, des citations auteur-année
-    seront créées sur la base des propriétés de citation.
-    Une citation entre parenthèses est composée ainsi :<br/>
-    <code>[BracketBefore][Author][YearSeparator][Year][BracketAfter]</code><br/>
-    où [Author] est le résultat du ou des champs donnés dans la propriété
-    <code>AuthorField</code> et le formatage d'une liste d'auteurs.
-    Cette liste peu contenir jusqu'à <code>MaxAuthors</code> noms - s'il y en
-    à plus, la liste sera composée du premier auteur et du texte spécifié dans
-    la propriété <code>EtAlString</code>. Si la propriété
-    <code>MaxAuthorsFirst</code> est donnée, elle est prioritaire sur
-    <code>MaxAuthors</code> la première fois que chaque citation apparaît dans
-    le texte.</p>
-
-<p>Si plusieurs champs séparés par des slashs sont donnés dans la propriété
-    <code>AuthorField</code>, ils seront considérés successivement si le premier
-    champ est vide pour l'entrée BibTeX considérée. Dans l'exemple ci-dessus,
-    le champ "author" sera utilisé ; mais, s'il est vide le champ "editor"
-    sera utilisé en remplacement.</p>
-
-<p>Les noms de la liste d'auteurs seront séparés par le texte donné par la
-    propriété <code>AuthorSeparator</code>, exceptés pour les deux derniers
-    noms qui seront séparés par le texte spécifié dans 
-    <code>AuthorLastSeparator</code>.
-    Si la propriété <code>AuthorLastSeparatorInText</code> est spécifiée, elle
-    remplace le précédent pour les citations du type "dans le texte". Cela
-    permet d'avoir des citations comme <code>(Olsen & Jensen, 2008)</code>
-    et <code>Olsen and Jensen (2008)</code> avec un même style.
-</p>
-
-<p>[Year] est la résultante du ou des champs spécifiés dans la propriété
-    [YearField].</p>
-
-<p>Une citation "dans le texte" est composée comme suit :<br/>
-    <code>[Author][InTextYearSeparator][BracketBefore][Year][BracketAfter]</code><br/>
-    où [Author] et [Year] sont traités exactement de la même façon que pour
-    les citations entre parenthèses.</p>
-
-<p>Si deux sources différentes sont citées et si elles ont les mêmes auteurs
-    et années de publication, et si des citations auteur-année sont utilisées,
-    leurs appels nécessiteront une modification afin d'être rendue
-    discernables. Ceci est fait automatiquement en rajoutant une lettre après
-    l'année pour chacune de ces publications ; 'a' pour la première
-    référence citée, 'b' pour la suivante, et ainsi de suite.
-    Par exemple, si l'auteur "Olsen" a deux papiers cités pour 2005, les appels
-    de citation seront modifiés en <code>(Olsen, 2005a)</code> et
-    <code>(Olsen, 2005b)</code>. Dans la mise en page de la bibliographie,
-    l'utisation d'une lettre "singularisante" sera indiquée explicitement par
-    l'insertion du champ virtuel <code>uniq</code>.</p>
-
-<p>Si plusieurs entrées ayant été "singularisées" sont citées ensemble, elles
-    seront groupées dans l'appel à référence. Par exemple, des deux entrées
-    données ci-dessus en exemple sont citées ensemble, l'appel à référence
-    sera <code>(Olsen, 2005a, b)</code> au lieu de 
-    <code>Olsen, 2005a; Olsen, 2005b)</code>. Les lettres discrimantes
-    regroupées (a et b dans notre exemple) seront séparés par une chaîne
-    spécifiée par la propriété <code>UniquefierSeparator</code>.</p>
-
-<p>Les citations auteur-année faisant référence à plus d'une entrée seront par
-    défaut triée chronologiquement. Si vous souhaitez qu'elles soient triées
-    alphabétiquement, la propriété de citation
-    <code>MultiCiteChronological</code> doit être paramétrée à
-    <code>false.</code>.</p>
-
-<h3>Mise en page de la liste de références</h3>
-
-<p>La section <b>LAYOUT</b> décrit comment doit apparaître l'entrée
-    bibliographique correspondant à chaque type d'entrée de JabRef.
-    Chaque ligne doit débuter soit avec le nom d'un type d'entrée BibTeX, soit
-    avec le mot <code>default</code>, suivi par un '='. La mise en page
-    <code>default</code> sera utilisée pour toutes les entrées où une mise
-    en page n'a pas été spécifiée.</p>
-
-<p>Le reste de chaque ligne définit la mise en page, avec le texte et les
-    espaces habituels apparaissant directement dans l'entrée bibliographique.
-    Les informations provenant de l'entrée BibTeX sont insérées en ajoutant des
-    marqueurs <code>\field</code> avec le nom de fichier approprié (par exemple
-    <code>\author</code> pour insérer les noms des auteurs). Les informations
-    de formatage pour le champ peuvent être inclues ici, en suivant la syntaxe
-    de JabRef pour la mise en page d'exportation. Voir
-    <a href="http://jabref.sourceforge.net/help/fr/CustomExports.php"> la
-        documentation de JabRef sur les filtres d'exportation personnalisés</a>
-    pour plus d'informations sur les formateurs disponibles.</p>
-
-<p>Si des citations auteur-année sont utilisées, vous devez spécifier
-    explicitement la position de la lettre "singularisante" qui est ajoutée
-    pour distinguer des citations similaires. Ceci est effectué en incluant
-    le champ virtuel <code>uniq</code>, typiquement juste après l'année (comme
-    montré dans l'exemple du fichier de style). Le champ <code>uniq</code> est
-    automatiquement paramétré correctement pour chaque entrée avant que son
-    texte de référence soit mis en page.</p>
-
-<p>Pour spécifier le formatage dans la bibliographie, vous pouvez utiliser les
-    paires de balises de style HTML <b> </b>,
-    <i> </i>, <sup> </sup> and <sub> </sub> 
-    pour définir respectivement du texte en gras, en italique, en exposant et
-    en indice.</p>
-
-<p>Si vous utilisez des citations numérotées, le numéro de chaque entrée sera
-    automatiquement inséré au début de chaque entrée dans le liste de
-    références. Par défaut, les numéros seront mis entre les même parenthèses
-    que définies pour les citations. Les propriétés de citations optionelles
-    <code>BracketBeforeInList</code> et <code>BracketAfterInList</code> 
-    remplacent <code>BracketBefore</code> et <code>BracketAfter</code> si elles
-    sont paramétrées. Elles peuvent être utilisées si vous voulez des types
-    différents de parenthèses (ou pas de parenthèses) dans votre liste de 
-    références. Notez que ce ne sont pas nécessairement des parenthèses ;
-    cela peut être toute combinaison de caractères.</p>
-
-<h2>Problèmes connus</h2>
-
-<ul>
-    <li>Assurez-vous d'enregistrer votre document Write dans le format
-        OpenDocument (odt). Enregistrer au format Word perdra vos marques de
-        références.</li>
-    <li>Il n'y a actuellement pas de citations basés sur des notes de bas
-        de page.</li>
-    <li>Le curseur peut être mal positionné après l'insertion d'une
-        citation.</li>
-    <li>Copier-coller le fichier de style en exemple directement à partir de
-        cette page donnera un fichier non utilisable. Pour éviter cela,
-        téléchargez le fichier d'exemple à partir du lien dans la section de
-        téléchargement.
-    </li>
-</ul>
-
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+<h1>Intégration dans OpenOffice/LibreOffice</h1>
+
+<h2>Introduction</h2>
+
+<p>Cette fonction offre une interface pour insérer des citations et formater une
+    bibliographie dans un document OpenOffice ou LibreOffice Writer à partir
+    de JabRef.</p>
+
+<p>Tout au long de ce document d'aide, lorsque le nom <i>OpenOffice</i>
+    est utilisé, il peut être remplacé par <i>LibreOffice</i>.</p>
+    
+<h2>Utiliser l'interface OpenOffice/LibreOffice</h2>
+
+<p>Pour communiquer avec OpenOffice, JabRef doit tout d'abord se connecter à 
+    une instance active d'OpenOffice. Vous devez démarrez OpenOffice et ouvrir
+    votre document avant de vous y connecter à partir de JabRef. JabRef a
+    besoin de connaître la localisation de vos exécutables OpenOffice
+    (<b>soffice.exe</b> sous Windows et <b>soffice</b> sous les autres
+    systémes d'exploitation) et le répertoire où se trouvent plusieurs fichiers
+    OpenOffice jar. Si vous lancez la connexion en cliquant sur le bouton
+    <b>Connexion automatique</b>, JabRef tentera automatiquement de déterminer ses
+    emplacements. Si cela ne fonctionne pas, vous devez établir la connexion
+    en utilisant le bouton <b>Connexion manuelle</b> qui ouvrira une
+    fenêtre vous demandant les emplacements nécessaires.</p>
+
+<p>Après que la connexion ait été établie, vous pouvez insérer des citations en
+    sélectionnant une ou plusieurs entrées dans JabRef et en utilisant le bouton
+    <b>Envoyer vers OpenOffice</b> dans le menu déroulant de la barre d'outils
+    de JabRef ou en utilisant le bouton approprié dans la sous-fenêtre
+    OpenOffice du panneau latéral. Cela insérera les citations pour les entrées
+    sélectionnées à l'emplacement actuel du curseur dans le document OpenOffice
+    et mettra à jour la bibliographie afin qu'elle contienne la référence
+    complète.</p>
+
+<p><b>Note :</b> JabRef n'utilise pas le système de bibliographie intégré
+    à OpenOffice à cause des limitations de ce système. Un document contenant
+    des citations insérées par JabRef ne sera en général pas compatible avec 
+    d'autres gestionnaires de références tels que Bibus et Zotero.</p>
+
+<p>Deux types de citations différents peuvent être insérés - soit une citation
+    entre parenthèses, "(Auteur 2007)", soit une citation dans le texte
+    "Author (2007)". Cette distinction est uniquement pertinente si les
+    citations auteur-année sont utilisées au lieu des citations numérotées, mais
+    cette distinction sera conservée si vous basculer entre les deux styles.</p>
+
+<p>Si vous modifiez les entrées dans JabRef après l'insertion de leurs citations
+    dans OpenOffice, vous devrez synchroniser la bibliographie. Le bouton
+    <b>Synchroniser la bibliographie OO</b> mettra à jour toutes les entrées
+    de la bibliographie tant que leurs clefs BibTeX n'ont pas été modifiées
+    (JabRef encode la clef BibTeX dans le nom de la référence pour chaque
+    citation afin de suivre quelle clef BibTeX a l'entrée JabRef originale).</p>
+
+<h2>Le fichier de style</h2>
+
+<p>Pour configurer le style de citation, vous devez sélectionner un style de
+    fichier ou utiliser un des styles par défaut. Le style définit le format
+    des citations et le format de la bibliographie. Vous pouvez utiliser des
+    formateurs d'exportations standards de JabRef pour traiter les champs des
+    entrées avant qu'ils soient envoyés à OpenOffice. Grâce à l'existence de ce
+    fichier de style, vous disposez d'une flexibilité aussi grande que possible
+    dans les styles de citation. Vous pouvez changer de fichier de style à
+    tout moment et utiliser le bouton <b>Mettre à jour</b> pour que votre
+    bibliographie suive ce nouveau style.</p>
+<p>En cliquant sur le bouton <b>Sélectionner le style</b> vous pouvez ouvrir
+    une fenêtre qui permet de sélectionner soit le style par défaut soit un
+    fichier de style externe. Si vous voulez créer un nouveau style basé sur
+    celui par défaut, vous pouvez cliquer sur le bouton <b>Aperçu</b> afin
+    d'afficher le contenu du style par défaut que vous pouvez copier dans un
+    éditeur de texte et modifier.</p>
+<p>Pour choisir un fichier de style externe, vous avez deux possibilités.
+    Soit vous choisissez directement un fichier de style, soit vous paramétrez
+    un répertoire de fichiers de style. Si vous choisissez cette dernière
+    possibilité, vous pourrez voir la liste des styles de ce répertoire (et
+    de ces sous-répertoires) et en choisir un à partir de cette liste.</p>
+
+<p>Voici un exemple de fichier de style :</p>
+<pre>
+NAME
+Example style file for JabRef-OpenOffice integration.
+
+JOURNALS
+Journal name 1
+Journal name 2
+
+PROPERTIES
+Title="References"
+IsSortByPosition="false"
+IsNumberEntries="false"
+ReferenceParagraphFormat="Default"
+ReferenceHeaderParagraphFormat="Heading 1"
+
+CITATION
+AuthorField="author/editor"
+YearField="year"
+MaxAuthors="3"
+MaxAuthorsFirst="3"
+AuthorSeparator=", "
+AuthorLastSeparator=" & "
+EtAlString=" et al."
+ItalicEtAl="true"
+YearSeparator=" "
+InTextYearSeparator=" "
+BracketBefore="["
+BracketAfter="]"
+BracketBeforeInList="["
+BracketAfterInList="]"
+CitationSeparator="; "
+UniquefierSeparator=","
+GroupedNumbersSeparator="-"
+MinimumGroupingCount="3"
+FormatCitations="false"
+CitationCharacterFormat="Default"
+MultiCiteChronological="false"
+PageInfoSeparator="; "
+
+LAYOUT
+article=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
+(<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} :
+\format[FormatPagesForHTML]{\pages}\end{pages}.
+
+book=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}\begin{editor}
+\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.)\end{editor},
+<b>\year\uniq</b>. <i>\title</i>. \publisher, \address.
+
+incollection=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
+(<b>\year\uniq</b>). <i>\title</i>. In: \format[AuthorLastFirst,
+AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\booktitle</i>, \publisher.
+
+inbook=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
+(<b>\year\uniq</b>). <i>\chapter</i>. In: \format[AuthorLastFirst,
+AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\title</i>, \publisher.
+
+phdthesis=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
+(<b>\year\uniq</b>). <i>\title</i>, \school.
+
+default=\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
+(<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} :
+\format[FormatPagesForHTML]{\pages}\end{pages}.
+
+</pre>
+
+<p>(Notez que la mise en page de chaque type d'entrée doit être limité à 
+    une seule ligne dans le fichier de style - ci-dessus, les lignes sont
+    coupées pour faciliter la lecture)</p>
+
+<h3>Propriétés générales</h3>
+
+<p>La section <b>PROPERTIES</b> décrit les propriétés générales de la
+    bibliographie. Le tableau ci-dessous décrit les propriétés
+    disponibles :</p>
+
+<table border="1" rules="none" summary="propriétés disponibles ">
+    <tr>
+        <td><b>Propriété</b></td>
+        <td><b>Type</b></td>
+        <td><b>Valeur par défaut</b></td>
+        <td><b>Description</b></td>
+    </tr>
+    <tr>
+        <td>IsNumberEntries</td>
+        <td>booléen</td>
+        <td><code>false</code></td>
+        <td>Détermine le type de citations à utiliser. Si <code>true</code>,
+            des citations numérotées seront utilisées. Si <code>false</code>,
+            des citations auteur-année seront utilisées.
+        </td>
+    </tr>
+    <tr>
+        <td>IsSortByPosition</td>
+        <td>booléen</td>
+        <td><code>false</code></td>
+        <td>Détermine comment la bibliographie est triée. Si vrai, les entrées
+            seront triées selon l'ordre dans lequel elles sont citées. Si faux,
+            les entrées seront classées par ordre alphabétique des auteurs.
+        </td>
+    </tr>
+    <tr>
+        <td>ReferenceParagraphFormat</td>
+        <td>chaîne</td>
+        <td><code>Default</code></td>
+        <td>Donne le nom du format de paragraphe à utiliser pour la liste de
+            références. Ce format doit être défini dans votre document
+            OpenOffice.
+        </td>
+    </tr>
+    <tr>
+        <td>ReferenceHeaderParagraphFormat</td>
+        <td>chaîne</td>
+        <td><code>Heading 1</code></td>
+        <td>Donne le nom du format de paragraphe à utiliser pour le titre de
+            la liste de références. Ce format doit être défini dans votre document
+            OpenOffice.
+        </td>
+    </tr>
+    <tr>
+        <td>Title</td>
+        <td>chaîne</td>
+        <td><code>Bibliography</code></td>
+        <td>Le texte à entrer comme titre de la liste de références.</td>
+    </tr>
+</table>
+
+<h3>Propriétés des citations</h3>
+
+<p>La section <b>CITATION</b> décrit le format des marqueurs de citation
+    insérés dans le texte.</p>
+
+<p>Le tableau ci-dessous donne une brève description de toutes les propriétés
+    de citation disponibles. Les propriétés qui n'apparaissent pas dans le
+    fichier de style garderont leur valeur par défaut.</p>
+
+<table border="1" rules="none" summary="description">
+    <tr>
+        <td><b>Propriété</b></td>
+        <td><b>Type</b></td>
+        <td><b>Valeur par défaut</b></td>
+        <td><b>Description</b></td>
+    </tr>
+    <tr>
+        <td>AuthorField</td>
+        <td>chaîne</td>
+        <td><code>author/editor</code></td>
+        <td>Champ BibTeX contenant les noms des auteurs. Peut contenir des
+            champs alternatifs, par exemple <code>author/editor</code></td>
+    </tr>
+    <tr>
+        <td>AuthorLastSeparator</td>
+        <td>chaîne</td>
+        <td><code> & </code></td>
+        <td>Texte inséré entre les deux derniers noms d'auteur.</td>
+    </tr>
+    <tr>
+        <td>AuthorLastSeparatorInText</td>
+        <td>chaîne</td>
+        <td> </td>
+        <td>Si spécifiés, cette propriété écrase
+            <code>AuthorLastSeparator</code> pour les citations dans le texte
+            telles que <code>Smith & Jones (2001)</code>.
+        </td>
+    </tr>
+    <tr>
+        <td>AuthorSeparator</td>
+        <td>chaîne</td>
+        <td><code>, </code></td>
+        <td>Texte inséré entre les noms d'auteurs excepté pour les deux
+            derniers.</td>
+    </tr>
+    <tr>
+        <td>BracketAfter</td>
+        <td>chaîne</td>
+        <td><code>]</code></td>
+        <td>La parenthèse fermante des citations.</td>
+    </tr>
+    <tr>
+        <td>BracketAfterInList</td>
+        <td>chaîne</td>
+        <td>]</td>
+        <td>La parenthèse fermante pour la numérotation des citations dans
+            la liste des références.</td>
+    </tr>
+    <tr>
+        <td>BracketBefore</td>
+        <td>chaîne</td>
+        <td><code>[</code></td>
+        <td>La parenthèse ouvrante des citations.</td>
+    </tr>
+    <tr>
+        <td>BracketBeforeInList</td>
+        <td>chaîne</td>
+        <td>[</td>
+        <td>La parenthèse ouvrante pour la numérotation des citations dans
+            la liste des références.</td>
+    </tr>
+    <tr>
+        <td>CitationCharacterFormat</td>
+        <td>chaîne</td>
+        <td><code>Default</code></td>
+        <td>Si <code>FormatCitations</code> est mis à <code>true</code>,
+            le format de caractère ayant le nom donné par cette propriété sera
+            appliqué aux citations. Le format de caractère doit être défini
+            dans votre document OpenOffice.
+        </td>
+    </tr>
+    <tr>
+        <td>CitationSeparator</td>
+        <td>chaîne</td>
+        <td><code>; </code></td>
+        <td>Texte inséré entre les éléments quand une citation contient
+            plusieurs entrées, par exemple <code>[Smith 2001; Jones
+            2002]</code></td>
+    </tr>
+    <tr>
+        <td>EtAlString</td>
+        <td>chaîne</td>
+        <td><code> et al. </code></td>
+        <td>Texte inséré après les noms d'auteur quand tous les auteurs ne
+            sont pas listés, par exemple <code>[Smith et al. 2001]</code></td>
+    </tr>
+    <tr>
+        <td>FormatCitations</td>
+        <td>booléen</td>
+        <td><code>false</code></td>
+        <td>Détermine si le formatage doit être appliqué aux citations. Si vrai,
+            un format de caractère sera appliqué aux citations. La propriété
+            <code>CitationCharacterFormat</code> contrôle quel format doit être
+            appliqué.  Le format doit être défini dans votre document
+            OpenOffice. Tout paramètre et effet de caractère peut être choisit
+            dans OpenOffice pour votre format de caractère.
+        </td>
+    </tr>
+    <tr>
+        <td>GroupedNumbersSeparator</td>
+        <td>chaîne</td>
+        <td><code>-</code></td>
+        <td>Texte inséré entre les nombres quand les citations numériques sont
+            groupées, par exemple <code>[4-6]</code></td>
+    </tr>
+    <tr>
+        <td>InTextYearSeparator</td>
+        <td>chaîne</td>
+        <td>Single Space</td>
+        <td>Texte inséré entre les noms d'auteur et la parenthèse ouvrante
+            avant l'année dans les citations dans le texte.</td>
+    </tr>
+    <tr>
+        <td>ItalicEtAl</td>
+        <td>boolean</td>
+        <td><code>true</code></td>
+        <td>Si <code>true</code>, la chaîne "et al." dans les marqueurs de citation est mis en italique.</td>
+    </tr>
+    <tr>
+        <td>MaxAuthors</td>
+        <td>integer</td>
+        <td><code>3</code></td>
+        <td>Le nombre maximum d'auteurs à lister dans une citation qui apparaît
+            précédemment dans le document.</td>
+    </tr>
+    <tr>
+        <td>MaxAuthorsFirst</td>
+        <td>integer</td>
+        <td><code>3</code></td>
+        <td>Le nombre maximum d'auteurs à lister dans une citation qui apparaît
+            pour la première fois.</td>
+    </tr>
+    <tr>
+        <td>MinimumGroupingCount</td>
+        <td>integer</td>
+        <td><code>3</code></td>
+        <td>Le nombre minimum d'entrées consécutives qu'une citation doit
+            contenir avant que les nombres soient groupés, par exemple
+            <code>[4-6]</code> ou <code>[4; 5; 6]</code>.
+        </td>
+    </tr>
+    <tr>
+        <td>MultiCiteChronological</td>
+        <td>booléen</td>
+        <td><code>true</code></td>
+        <td>Si <code>true</code>, les entrées multiples d'une même citation
+            sont triées chronologiquement. Sinon, elles sont sorties
+            alphabétiquement.
+        </td>
+    </tr>
+    <tr>
+        <td>PageInfoSeparator</td>
+        <td>chaîne</td>
+        <td><code>; </code></td>
+        <td>Pour des citations avec des informations complémentaires, par exemple des numéros de page,
+            cette chaîne est insérée entre l'année (pour les citations auteur-année)
+            ou le numéro de citation (pour les citations numérotées) et les informations complémentaires.
+            Par exemple, le texte entre <code>2001</code> et <code>p. 301</code> dans <code>[Smith 2001; p. 301]</code>.
+        </td>
+    </tr>
+    <tr>
+        <td>UniquefierSeparator</td>
+        <td>chaîne</td>
+        <td><code>, </code></td>
+        <td>Texte inséré entre les lettres utilisées pour différencier les
+            citations ayant des auteurs et année similaires. Par exemple
+            le texte entre <code>a</code> et <code>b</code> dans
+            <code>[Smith 2001a, b]</code>.
+        </td>
+    </tr>
+    <tr>
+        <td>YearField</td>
+        <td>chaîne</td>
+        <td><code>year</code></td>
+        <td>Le champ BibTeX pour l'année de publication.</td>
+    </tr>
+    <tr>
+        <td>YearSeparator</td>
+        <td>chaîne</td>
+        <td>Single Space</td>
+        <td>Texte inséré entre les noms d'auteurs et l'année dans les citations
+            entre parenthèses telle que <code>[Smith 2001]</code>.</td>
+    </tr>
+</table>
+
+<p>Si des entrées numérotées sont utilisées, les propriétés
+    <code>BracketBefore</code> et <code>BracketAfter</code> sont les plus
+    importantes - elles définissent quels caractères sont utilisés dans le numéro
+    de citation. La citation est composée ainsi :<br/>
+    <code>[BracketBefore][Number][BracketAfter]</code><br/>
+    où [Number] est le nombre dans la citation, déterminé selon l'ordre de la
+    bibliographie et/ou la position de cette citation dans le texte. Si une
+    citation correspond à plusieurs entrées, elles seront séparées par la
+    chaîne donnée dans la propriété <code>CitationSeparator</code>
+    (par exemple, si <code>CitationSeparator</code>=;, la citation
+    ressemblera à <code>[2;4;6]</code>). Si au moins deux entrées correspondent
+    à des numéros consécutifs, ces numéros seront groupés (par exemple
+    <code>[2-4]</code> pour 2, 3 and 4 ou <code>[2;5-7]</code> pour 2, 5, 6 et
+    7). La propriété <code>GroupedNumbersSeparator</code> (par défaut
+    <code>-</code>) détermine quelle chaîne sépare le premier et le dernier
+    élément des numéros groupés. La propriété entière
+    <code>MinimumGroupingCount</code> (par défaut 3) détermine quel nombre
+    de numéros consécutifs est autorisé avant que les entrées ne soient
+    groupées. Si <code>MinimumGroupingCount</code>=3, les numéros 2 et 3 ne
+    seront pas groupés, tandis que 2, 3, 4 le seront. Si
+    <code>MinimumGroupingCount</code>=0, aucun groupement ne sera effectué
+    quel que soit le nombre de numéros consécutifs.
+</p>
+
+<p>Si des entrées numérotées ne sont pas utilisées, des citations auteur-année
+    seront créées sur la base des propriétés de citation.
+    Une citation entre parenthèses est composée ainsi :<br/>
+    <code>[BracketBefore][Author][YearSeparator][Year][BracketAfter]</code><br/>
+    où [Author] est le résultat du ou des champs donnés dans la propriété
+    <code>AuthorField</code> et le formatage d'une liste d'auteurs.
+    Cette liste peu contenir jusqu'à <code>MaxAuthors</code> noms - s'il y en
+    à plus, la liste sera composée du premier auteur et du texte spécifié dans
+    la propriété <code>EtAlString</code>. Si la propriété
+    <code>MaxAuthorsFirst</code> est donnée, elle est prioritaire sur
+    <code>MaxAuthors</code> la première fois que chaque citation apparaît dans
+    le texte.</p>
+
+<p>Si plusieurs champs séparés par des slashs sont donnés dans la propriété
+    <code>AuthorField</code>, ils seront considérés successivement si le premier
+    champ est vide pour l'entrée BibTeX considérée. Dans l'exemple ci-dessus,
+    le champ "author" sera utilisé ; mais, s'il est vide le champ "editor"
+    sera utilisé en remplacement.</p>
+
+<p>Les noms de la liste d'auteurs seront séparés par le texte donné par la
+    propriété <code>AuthorSeparator</code>, exceptés pour les deux derniers
+    noms qui seront séparés par le texte spécifié dans 
+    <code>AuthorLastSeparator</code>.
+    Si la propriété <code>AuthorLastSeparatorInText</code> est spécifiée, elle
+    remplace le précédent pour les citations du type "dans le texte". Cela
+    permet d'avoir des citations comme <code>(Olsen & Jensen, 2008)</code>
+    et <code>Olsen and Jensen (2008)</code> avec un même style.
+</p>
+
+<p>[Year] est la résultante du ou des champs spécifiés dans la propriété
+    [YearField].</p>
+
+<p>Une citation "dans le texte" est composée comme suit :<br/>
+    <code>[Author][InTextYearSeparator][BracketBefore][Year][BracketAfter]</code><br/>
+    où [Author] et [Year] sont traités exactement de la même façon que pour
+    les citations entre parenthèses.</p>
+
+<p>Si deux sources différentes sont citées et si elles ont les mêmes auteurs
+    et années de publication, et si des citations auteur-année sont utilisées,
+    leurs appels nécessiteront une modification afin d'être rendue
+    discernables. Ceci est fait automatiquement en rajoutant une lettre après
+    l'année pour chacune de ces publications ; 'a' pour la première
+    référence citée, 'b' pour la suivante, et ainsi de suite.
+    Par exemple, si l'auteur "Olsen" a deux papiers cités pour 2005, les appels
+    de citation seront modifiés en <code>(Olsen, 2005a)</code> et
+    <code>(Olsen, 2005b)</code>. Dans la mise en page de la bibliographie,
+    l'utisation d'une lettre "singularisante" sera indiquée explicitement par
+    l'insertion du champ virtuel <code>uniq</code>.</p>
+
+<p>Si plusieurs entrées ayant été "singularisées" sont citées ensemble, elles
+    seront groupées dans l'appel à référence. Par exemple, des deux entrées
+    données ci-dessus en exemple sont citées ensemble, l'appel à référence
+    sera <code>(Olsen, 2005a, b)</code> au lieu de 
+    <code>Olsen, 2005a; Olsen, 2005b)</code>. Les lettres discrimantes
+    regroupées (a et b dans notre exemple) seront séparés par une chaîne
+    spécifiée par la propriété <code>UniquefierSeparator</code>.</p>
+
+<p>Les citations auteur-année faisant référence à plus d'une entrée seront par
+    défaut triée chronologiquement. Si vous souhaitez qu'elles soient triées
+    alphabétiquement, la propriété de citation
+    <code>MultiCiteChronological</code> doit être paramétrée à
+    <code>false.</code>.</p>
+
+<h3>Mise en page de la liste de références</h3>
+
+<p>La section <b>LAYOUT</b> décrit comment doit apparaître l'entrée
+    bibliographique correspondant à chaque type d'entrée de JabRef.
+    Chaque ligne doit débuter soit avec le nom d'un type d'entrée BibTeX, soit
+    avec le mot <code>default</code>, suivi par un '='. La mise en page
+    <code>default</code> sera utilisée pour toutes les entrées où une mise
+    en page n'a pas été spécifiée.</p>
+
+<p>Le reste de chaque ligne définit la mise en page, avec le texte et les
+    espaces habituels apparaissant directement dans l'entrée bibliographique.
+    Les informations provenant de l'entrée BibTeX sont insérées en ajoutant des
+    marqueurs <code>\field</code> avec le nom de fichier approprié (par exemple
+    <code>\author</code> pour insérer les noms des auteurs). Les informations
+    de formatage pour le champ peuvent être inclues ici, en suivant la syntaxe
+    de JabRef pour la mise en page d'exportation. Voir
+    <a href="http://jabref.sourceforge.net/help/fr/CustomExports.php"> la
+        documentation de JabRef sur les filtres d'exportation personnalisés</a>
+    pour plus d'informations sur les formateurs disponibles.</p>
+
+<p>Si des citations auteur-année sont utilisées, vous devez spécifier
+    explicitement la position de la lettre "singularisante" qui est ajoutée
+    pour distinguer des citations similaires. Ceci est effectué en incluant
+    le champ virtuel <code>uniq</code>, typiquement juste après l'année (comme
+    montré dans l'exemple du fichier de style). Le champ <code>uniq</code> est
+    automatiquement paramétré correctement pour chaque entrée avant que son
+    texte de référence soit mis en page.</p>
+
+<p>Pour spécifier le formatage dans la bibliographie, vous pouvez utiliser les
+    paires de balises de style HTML <b> </b>,
+    <i> </i>, <sup> </sup> and <sub> </sub> 
+    pour définir respectivement du texte en gras, en italique, en exposant et
+    en indice.</p>
+
+<p>Si vous utilisez des citations numérotées, le numéro de chaque entrée sera
+    automatiquement inséré au début de chaque entrée dans le liste de
+    références. Par défaut, les numéros seront mis entre les même parenthèses
+    que définies pour les citations. Les propriétés de citations optionelles
+    <code>BracketBeforeInList</code> et <code>BracketAfterInList</code> 
+    remplacent <code>BracketBefore</code> et <code>BracketAfter</code> si elles
+    sont paramétrées. Elles peuvent être utilisées si vous voulez des types
+    différents de parenthèses (ou pas de parenthèses) dans votre liste de 
+    références. Notez que ce ne sont pas nécessairement des parenthèses ;
+    cela peut être toute combinaison de caractères.</p>
+
+<h2>Problèmes connus</h2>
+
+<ul>
+    <li>Assurez-vous d'enregistrer votre document Write dans le format
+        OpenDocument (odt). Enregistrer au format Word perdra vos marques de
+        références.</li>
+    <li>Il n'y a actuellement pas de citations basés sur des notes de bas
+        de page.</li>
+    <li>Le curseur peut être mal positionné après l'insertion d'une
+        citation.</li>
+    <li>Copier-coller le fichier de style en exemple directement à partir de
+        cette page donnera un fichier non utilisable. Pour éviter cela,
+        téléchargez le fichier d'exemple à partir du lien dans la section de
+        téléchargement.
+    </li>
+</ul>
+
 </body>
\ No newline at end of file
diff --git a/src/help/fr/OwnerHelp.html b/src/help/fr/OwnerHelp.html
index 7746e70..c768223 100644
--- a/src/help/fr/OwnerHelp.html
+++ b/src/help/fr/OwnerHelp.html
@@ -1,26 +1,26 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Le champ 'owner' (propriétaire)</h1>
-
-    <p>JabRef peut
-    éventuellement signer toutes les nouvelles
-    entrées ajoutées ou importées dans une
-    base de données avec votre nom. Vous pouvez activer ou
-    désactiver cette fonction dans le menu <b>Options/
-    Préférences -> Général</b>, et
-    vous pouvez aussi changer le nom utilisé pour signer vos
-    entrées. Le nom utilisé par défaut est
-    votre nom d'utilisateur.</p>
-
-    <p>Ce nom sera ajouté dans un champ nommé
-    'owner', qui, par défaut, est visible dans l'onglet
-    <b>Champs Généraux</b> de l'éditeur
-    d'entrées.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Le champ 'owner' (propriétaire)</h1>
+
+    <p>JabRef peut
+    éventuellement signer toutes les nouvelles
+    entrées ajoutées ou importées dans une
+    base de données avec votre nom. Vous pouvez activer ou
+    désactiver cette fonction dans le menu <b>Options/
+    Préférences -> Général</b>, et
+    vous pouvez aussi changer le nom utilisé pour signer vos
+    entrées. Le nom utilisé par défaut est
+    votre nom d'utilisateur.</p>
+
+    <p>Ce nom sera ajouté dans un champ nommé
+    'owner', qui, par défaut, est visible dans l'onglet
+    <b>Champs Généraux</b> de l'éditeur
+    d'entrées.</p>
+</body>
+</html>
diff --git a/src/help/fr/PreviewHelp.html b/src/help/fr/PreviewHelp.html
index 30a3c91..a40b7f6 100644
--- a/src/help/fr/PreviewHelp.html
+++ b/src/help/fr/PreviewHelp.html
@@ -1,26 +1,26 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Configuration de l'aperçu des
-    entrées</h1>
-
-    <p>L'aperçu des entrées est
-    créé en utilisant le même mécanisme
-    que pour les <a href="CustomExports.html">filtres d'exportation
-    personnalisés</a>. En mode aperçu, une
-    entrée est traitée en utilisant l'une des deux
-    mises en page disponibles (vous pouvez basculer entre les deux
-    mises en page en pressant F9) afin de produire du code HTML qui
-    est affiché dans le panneau d'aperçu. Pour
-    modifier l'apparence et le contenu de l'aperçu vous
-    devez éditer les mises en page de l'aperçu en
-    utilisant la syntaxe décrite dans le fichier d'aide
-    portant sur les <a href="CustomExports.html">filtres
-    d'exportation personnalisés</a>.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Configuration de l'aperçu des
+    entrées</h1>
+
+    <p>L'aperçu des entrées est
+    créé en utilisant le même mécanisme
+    que pour les <a href="CustomExports.html">filtres d'exportation
+    personnalisés</a>. En mode aperçu, une
+    entrée est traitée en utilisant l'une des deux
+    mises en page disponibles (vous pouvez basculer entre les deux
+    mises en page en pressant F9) afin de produire du code HTML qui
+    est affiché dans le panneau d'aperçu. Pour
+    modifier l'apparence et le contenu de l'aperçu vous
+    devez éditer les mises en page de l'aperçu en
+    utilisant la syntaxe décrite dans le fichier d'aide
+    portant sur les <a href="CustomExports.html">filtres
+    d'exportation personnalisés</a>.</p>
+</body>
+</html>
diff --git a/src/help/fr/RemoteHelp.html b/src/help/fr/RemoteHelp.html
index e4f1993..e815ef5 100644
--- a/src/help/fr/RemoteHelp.html
+++ b/src/help/fr/RemoteHelp.html
@@ -1,53 +1,53 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Accès à distance</h1>
-
-    <p>Cette fonction peut
-    être activée et configurée dans
-    <b>Préférences -> Avancé</b>.</p>
-
-    <p><i>Notez qu'activer cette fonction sous Windows XP SP2 (et
-    probablement d'autres configurations) peut afficher une
-    boîte de message disant que certaines fonctions du
-    programme ont été bloquées par le pare-feu
-    de Windows. Vous pouvez en toute sécurité dire au
-    pare-feu de continuer à bloquer ; le pare-feu
-    n'interférera pas avec l'accès à distance
-    de JabRef.</i></p>
-
-    <p>Si l'accès à distance est activé,
-    JabRef se mettra à écouter un port
-    spécifique lors de son démarrage. Cela signifie
-    que les autres applications peuvent envoyer des informations
-    à JabRef à travers ce port. JabRef n'acceptera
-    que des connexions locales, afin d'éviter le risque
-    d'interférence à partir de
-    l'extérieur.</p>
-
-    <p>La réservation du port permet à une seconde
-    instance de JabRef de découvrir qu'une première
-    instance tourne déjà. Dans ce cas, à moins
-    qu'elle soit spécifiquement configurée pour
-    tourner en mode autonome, la seconde instance de JabRef passera
-    ses options de sa ligne de commande à la première
-    instance en utilisant le port, puis se terminera
-    immédiatement.</p>
-
-    <p>La première instance de JabRef lira les options de la
-    ligne de commande et effectuera les actions indiquées,
-    tel que la lecture ou l'importation d'un fichier, ou la fusion
-    d'un fichier avec la base de données actuellement
-    affichée. Si un fichier est importé en utilisant
-    l'option de ligne de commande <code>--importToOpen</code>, les
-    entrées importées seront ajoutées à
-    la base de données actuellement affichée. Si
-    aucune base de données n'est ouverte, une nouvelle base
-    sera créée.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Accès à distance</h1>
+
+    <p>Cette fonction peut
+    être activée et configurée dans
+    <b>Préférences -> Avancé</b>.</p>
+
+    <p><i>Notez qu'activer cette fonction sous Windows XP SP2 (et
+    probablement d'autres configurations) peut afficher une
+    boîte de message disant que certaines fonctions du
+    programme ont été bloquées par le pare-feu
+    de Windows. Vous pouvez en toute sécurité dire au
+    pare-feu de continuer à bloquer ; le pare-feu
+    n'interférera pas avec l'accès à distance
+    de JabRef.</i></p>
+
+    <p>Si l'accès à distance est activé,
+    JabRef se mettra à écouter un port
+    spécifique lors de son démarrage. Cela signifie
+    que les autres applications peuvent envoyer des informations
+    à JabRef à travers ce port. JabRef n'acceptera
+    que des connexions locales, afin d'éviter le risque
+    d'interférence à partir de
+    l'extérieur.</p>
+
+    <p>La réservation du port permet à une seconde
+    instance de JabRef de découvrir qu'une première
+    instance tourne déjà. Dans ce cas, à moins
+    qu'elle soit spécifiquement configurée pour
+    tourner en mode autonome, la seconde instance de JabRef passera
+    ses options de sa ligne de commande à la première
+    instance en utilisant le port, puis se terminera
+    immédiatement.</p>
+
+    <p>La première instance de JabRef lira les options de la
+    ligne de commande et effectuera les actions indiquées,
+    tel que la lecture ou l'importation d'un fichier, ou la fusion
+    d'un fichier avec la base de données actuellement
+    affichée. Si un fichier est importé en utilisant
+    l'option de ligne de commande <code>--importToOpen</code>, les
+    entrées importées seront ajoutées à
+    la base de données actuellement affichée. Si
+    aucune base de données n'est ouverte, une nouvelle base
+    sera créée.</p>
+</body>
+</html>
diff --git a/src/help/fr/RevisionHistory.html b/src/help/fr/RevisionHistory.html
index a99329c..dba1640 100644
--- a/src/help/fr/RevisionHistory.html
+++ b/src/help/fr/RevisionHistory.html
@@ -1,1651 +1,14 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-  <h1>Historique des révisions (en anglais)</h1>
-  <h3>2.9 beta 2</h3>
-    <ul>
-      <li>Can control if the HTML converter should create subscripts and superscripts
-      as text or an equation via the preferences</li>
-      <li>Added initial support for adding curly brackets {} for certain
-        key words to keep the character case independent of .bst, e.g., for
-        names and abbreviations (use via "Cleanup entries") and can be controlled 
-        via preferences if it should be used at searches</li>
-      <li>Fixed author and DOI import from IEEE Xplore.</li>
-      <li>Improved import of equations in IEEE Xplore titles handling images, (sub) and /spl / representations</li>
-      <li>Rewrote the HTML import in a more general way. A few characters need to be added.</li>
-      <li>IEEE Xplore abstract fetching should now be working again.</li>
-      <li>Added DOI to BibTex entry fetcher.</li>
-      <li>Added ADS (The SAO/NASA Astrophysics Data System) fetcher by Ryo Igarashi (patch #120).</li>
-      <li>Reintroduced Google Scholar and ACM portal fetcher with entry preview to reduce server load.</li>
-      <li>Added alternate entry fetcher type where a preview can be displayed so the user can choose
-        which entries to download. This can reduce server load significantly and prevent users from
-        getting locked out of search services.</li>
-      <li>Fix for exception and minor bugs in HTML import parsing (patch 3575998 by Daniel Sv�rd)</li>
-      <li>HTML import handles more characters. Cleanup can also do HTML cleanup. (Patch 3582375 by Oscar Gustafsson)</li>
-      <li>During file renaming: More illegal characters are removed (idea by Sarel Botha)</li>
-      <li>Rudimentary support for IEEEtranBSTCTL added (patch 3582376 by Oscar Gustafsson)</li>
-      <li>":" is not filtered from the BibTeX keys any more (patch 3582376 by Oscar Gustafsson)</li>
-      <li>Changed internal look&feel setting (based on patch 3580605)</li>
-      <li>Custom importers nested in jars should be supported now (bug 3582838)</li>
-      <li>PDFContentImporter uses the DOI fetcher to fetch the BibTeX for the entry (if a DOI exists at the first page).</li>
-      <li>Moved migration of legacy PDF/PS fields from legacy tools to clean up dialog.</li>
-      <li>MHT files can now also be linked by drag'n'drop without the need to configure "external file types".</li>
-      <li>Adds support for Ubunut's global menu and HUD integration by using java-swing-ayatana (feature #796).</li>
-      <li>Updates PostgreSQL support to PostgreSQL 9.2</li>
-    </ul>
-  <h3>2.9 beta</h3>
-    <ul>
-      <li>Replaced notification dialog after moving/renaming linked file by status message.</li>
-      <li>Replaced dialog warnings about empty/duplicate key in entry editor by status line messages,
-      to prevent lockup if Save button is pressed directly.</li>
-      <li>Replaced window icon with 48x48 image.</li>
-      <li>Added local undo/redo handling for entry editor text fields.</li>
-      <li>Added special field functionality for ranking, marking as relevant,
-      marking as quality assured, and prioritizing. Can be enabled by "Entry table columns".
-      Based on the work by Igor Chernyavsky, Florian Straßer, and Marius Kleiner.</li>
-      <li>Added PDF preview functionality to the preview panel. Configurable via "Entry preview" settings.</li>
-      <li>Group edit dialog now closes when Escape is pressed.</li>
-      <li>Fixed MS bib import, month was lost on import.</li>
-      <li>Generate key action in entry editor now honors key overwrite settings.</li>
-      <li>Fixed bug when importing XMP data from PDF, file will now be linked from the new entry.</li>
-      <li>Fixed bug in layout processing - quoted formatter argments are now handled correctly.</li>
-      <li>Fixed bug 3545394: null and curly brackets in custom export filter.</li>
-      <li>Added "Manage keywords" popup menu to manage common keywords of selected entries.</li>
-      <li>Added support for pushing citations to TeXstudio (requires TeXstudio >=2.4)</li>
-      <li>Text-based citations can now be imported using FreeCite by Brown University
-      (http://freecite.library.brown.edu). By Kai Mindermann and Daniel Maurer.</li>
-      <li>JabRef supports synchronization of unlinked PDFs. Feature request "[2163626] Scan database - find unlinked files".
-      Based on patch 3122104. </li>
-      <li>Added command line argument -d/-prdef for resetting preferences to default values. Can
-      reset a comma-separated list of preference values, or all values.</li>
-      <li>Added small right-click popup menu at each tab</li>
-      <li>A PDF can also be dropped to the preview panel to trigger linking it</li>
-      <li>Drag'n'drop of text from the preview panel to other applications is now working</li>
-      <li>Added highlighting in preview area for search text (based on patch 3121914 by
-      Maximilian Lengsfeld).</li>
-      <li>New context menu option "Switch preview layout" in the preview panel. </li>
-      <li>BibTeX key generator patterns can now be stored in per database (implements feature 3495993)</li>
-      <li>Braces around author names are now dropped internally. They remain in the .bib though
-      Effects (incomplete list): Authors in the main window are shown without braces,
-      autocompletion does not show these braces</li>
-      <li>Autocompletion: ";" is now also a delimiter allowing "keyword1; keyword2" in the keyword fields</li>
-      <li>Autocompletion: the amount of characters to trigger autocompletion may now be configured
-      (default is 2)</li>
-      <li>Autocompletion: in case lower case letters are used, the search is case-insenstive,
-      otherwise the search is case sensitive.</li>
-      <li>Autocompletion: new preference to choose how to deal with first names 
-      (always full/always abbreviated/both full and abbreviated)</li>
-      <li>Added functionality "clean up entries" 
-      - Includes clean up DOI functionality by Florian Straßer and Marius Kleiner
-        (move of DOIs from ee, note, and url field is supported)
-      - Option to rename PDF of entry according to configured PDF-naming-scheme
-        (by Florian Straßer and Marius Kleiner)
-      - make file paths relative
-      - clean up month (functionality based on patch 3470076 by Mathias Walter)
-      - clean up pages
-      - fix superscripts</li>
-    <li>New "ISBN to BibTeX" fetcher. Uses the online "ISBN to BibTeX Converter" service by Manas Tungare.</li>
-    <li>Added support for drag'n'drop of tabs by Florian Straßer and Marius Kleiner.</li>
-    <li>PDF import dialog now always stores settings: checkbox removed</li>
-    <li>float search now also jumps to first entry if entry editor is opened</li>
-    <li>usability improvements of "content selectors"</li>
-    </ul>
-  <h3>Version 2.8.1</h3>
-    <ul><li>New DBLP fetcher. Patch 3462232 by Sascha Hunold.</li>
-    <li>Disabled ACM portal fetcher to avoid users of getting banned.</li>
-    <li>Fixed bug in PostgreSQL export/import.</li>
-    <li>Improved handling of file fields written in the style exported from Zotero.</li>
-    </ul>
-  <h3>Version 2.8</h3>
-  <ul><li>Applied Oscar Gustafsson's fix for IEEEXplore fetcher.</li>
-    <li>Added capability to remove databases from SQL database.</li>
-    <li>Modified Google Scholar fetcher to adapt to changes to web site.</li>
-    <li>Fixed customization of entries in Biblatex mode.</li>
-  </ul>
-  <h3>Version 2.8 beta 2</h3>
-  <ul><li>Improvements to SQL export and import. Fixed bug where subsequent exports to same
-      database would fail. Can now save multiple bib bases to a single SQL database.</li>
-    <li>"abbr" modifier in BibTeX key generator now skips parentheses.</li>
-    <li>Minor change to FirstPage formatter. Now splits at spaces as well as hyphens,
-      and returns original field content if only one page number is found.</li>
-    <li>When using the preferences import command line option, preferences are now imported
-      before load/import/export operations are handled.</li>
-    <li>Applied Nicolas Pavillon's patch for proper keystroke handling on Mac OS X.</li>
-    <li>Applied Ivanilton Polato's patch for handling multi-line fields in CSV export.</li>
-    <li>Fixed bug: "Send as Email" did not handle absolute paths correctly.</li>
-    <li>Fixed bug 3472991: Search: "Highlight Words" inconsistent.</li>
-    <li>Fixed bug 2933201: Exporting InProceedings to Word 2007.</li>
-    <li>Fixed bug 3146059: Error in translating author field to MS Office.</li>
-    <li>Fixed bug: entering field names containing capital letters in table columns tab
-      in Preferences makes the columns empty.</li>
-  </ul>
-  <h3>Version 2.8 beta</h3>
-  <ul><li>Fixed issues with ACM portal fetcher using Benjamin Langmann's patch, plus an
-      additional minor fix.</li>
-    <li>A large list of journal abbreviations is now loaded by default.</li>
-    <li>Added global option to allow file links relative to the bib file location, in addition
-      to the global or database- or user-specific file directory.</li>
-    <li>Fixed bug 3434674: Reviewing changes overwrites groups.</li>
-    <li>Integrated the plugin for interaction with OpenOffice/LibreOffice as a standard part
-      of JabRef.</li>
-    <li>Added keyboard shortcuts Ctrl-Up and Ctrl-Down to move file links up and down in a list
-      of external links in the entry editor.</li>
-    <li>Applied "bjoerntm"'s patch for making the loading of group information less sensitive
-      to white space, in order to prevent trouble loading files written by other tools.</li>
-    <li>Added optional autocompletion of author/editor last names in search field.</li>
-    <li>Changed entry fetcher system so all fetchers are accessed from a single side pane
-      component with a selector.</li>
-    <li>Added INSPIRE fetcher by Sheer El-Showk.</li>
-    <li>Improved error handling when importing in specific format.</li>
-    <li>Prevented crash when calling invalid import format on startup.</li>
-    <li>Improved duplicate detection.</li>
-    <li>Added markers \filename and \filepath for ".begin.layout" and ".end.layout" files
-      in order to output the name or full path of the bib file of the exported database.</li>
-    <li>Fixed possible array index exception in LastPage formatter.</li>
-    <li>Improved author/editor normalization in entry editor.</li>
-    <li>Added metadata extraction from text when PDFs are dragged into JabRef.</li>
-    <li>The filename pattern for renaming a file when dropping a PDF can now be
-      configured at "Options"/"Preferences"/"Import"/"File name format pattern".</li>
-    <li>The defaults of the ImportDialog shown when PDFs are dragged into JabRef
-      can now be configured at "Options"/"Preferences"/"Import". It is possible to
-      override showing the ImportDialog.</li>
-    <li>An entry can be sent by a right click on an entry and select "Send as Email"
-      (patch 3306271).</li>
-    <li>Added option to "copy BibTeX key and title" (patch 3370471).</li>
-    <li>The command for pushing to emacs can be configured now. New command for Emacs 23.
-      New default for Windows: emacsclient.</li>
-    <li>Added export support for DIN1505 style (based on patch 1874662).</li>
-    <li>Added support for PostgreSQL import/export (patch 3368760 by Fred Stevens).</li>
-    <li>Added formatter "JournalAbbreviator" (patch 3013311 by Meigel).</li>
-    <li>RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
-      (patch 2905383 by Russell Almond).</li>
-    <li>Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).</li>
-    <li>ToggleButton added to GroupSelector to ease adding/removing references to/from groups
-      (based on patch 3313564 updated by Andreas Schlicker).</li>
-    <li>Export filter "tablerefsandbib" updated to contain links to files and notes
-      (patch 2787096 by Thomas Arildsen).</li>
-    <li>"of" added to the list of skip words (patch 2781830).</li>
-    <li>Added cli-function for exporting entries filtered by a search term
-      (patch 1817093 by Silberer, Zirn)</li>
-    <li>Added highlighting in textarea for search text (patch 3117881 by Ben).
-      Slightly modified to cope with words[]={""}, support for "BibTeX source" tab, and that
-      "Clear" also clears the highlighting.</li>
-    <li>Added highlighting in preview area for search text (based on patch 3121914 by
-      Maximilian Lengsfeld).</li>
-    <li>Switched from PDFBox 0.7.3 to PDFBox 1.6.0.</li>
-  </ul>
-
-<h3>Version 2.7.2</h3>
-    <ul><li>Fixed bug that prevented search functions from working under Java 7.</li></ul>
-
-<h3>Version 2.7.1</h3>
-    <ul>
-    <li>Fixed problem with search function under Java 7.</li>
-     <li>Made Database properties dialog modal to prevent database from being closed
-      while properties window is open.</li>
-    <li>Fixed error handling in custom import dialog when invalid jar files or class
-      files are specified.</li>
-    <li>Added OR operator for conditional export formatting.</li>
-    <li>DocBook export format switched to 4.4 (based on patch 3313898).</li>
-    <li>Fixed bug that made the key generator combination [shorttitle:abbr] return
-      only a single letter.</li>
-    <li>"of" added to the list of skip words (patch 2781830).</li>
-    <li>Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).</li>
-    <li>RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
-      (patch 2905383 by Russell Almond).</li>
-    <li>Fixed bug that made menu items for marking in specific colors invisible
-      under Windows 7.</li>
-    <li>In case a new entry is added, this entry is highlighted and the editor is opened
-      if configured in the settings (patch 3370466). The UI behavior of adding an entry
-      at "new entry from plain text" is now similar to "new entry".</li>
-    <li>Fixed bug in focus handling that affected some actions.</li>
-    <li>Running JabRef under the Oracle JVM will no longer give a warning.</li>
-    </ul>
-
-  <h3>Version 2.7</h3>
-    <ul>
-    <li>Medline importer now wraps multipart last names in braces.</li>
-    <li>RIS importer now handles multiple title fields by concatenation.</li>
-    <li>Disallowed "comment" as entry type name, since this conflicts with the BibTeX format.</li>
-    <li>Fixed handling of suffix name parts (Jr, etc.) in Medline importer.</li>
-    <li>Added optional second numeric argument to Authors formatter, which determines
-      how many authors are shown if the maximum number is exceeded.</li>
-    <li>Added content selector for "review" field in entry editor.</li>
-    <li>Improved detection of file type when adding new link. Can now recognize double
-      extensions such as ".ps.gz".</li>
-    <li>Improved autocompletion of author names. Added options to complete either in
-      'Firstname Lastname' or 'Lastname, Firstname' formats, or in both.</li>
-    <li>Fixed bug in import function if no suitable import filter is found.</li>
-    </ul>
-
-  <h3>Version 2.7beta 2</h3>
-    <ul>
-	<li>Added support for MrdLib lookup or metadata extraction when PDFs are dragged
-	into JabRef.</li>
-    <li>Added option under "External programs" for disabling the automatic opening of the
-      Browse dialog when creating a new file link.</li>
-    <li>Fixed shortcut key collision. Shortcut for Import to new database is now Ctrl-Alt-I.</li>
-    <li>The "Open URL or DOI" action now uses URL links in the "file" field as fallback if
-      no links are found in the "url" or "doi" fields.</li>
-    <li>Restricted remote listener port numbers to interval 1025-65535.</li>
-    <li>Added Japanese translation by Koji Yokota.</li>
-    <li>Added scrollbar to entry editor when it is too high to fit in its panel. Patch
-      by Matthias Erll.</li>
-    <li>Made it possible to copy entries from the search dialog.</li>
-    <li>Added proper error message when trying to search with invalid regular expression.</li>
-    <li>Added error dialog on startup if custom look and feel cannot be loaded.</li>
-    <li>Applied Alexander Hug's patch for correctly importing doi from ScienceDirect RIS files.</li>
-    <li>Removed potential NullPointerException in SearchExpressionTreeParser.</li>
-    </ul>
-
-    <h3>Version 2.7beta</h3>
-    <ul>
-	<li>Some improvements to MS Office export filter.</li>
-	<li>Introduced three choices for ensuring unique generated keys. The default one (marking
-      	with a, b, etc.), a modified one (marking with b, c, etc.) and always adding a letter
-      	(a, b, etc.).</li>
-	<li>Font and background colors are now customizable in the entry editor (Options ->
-      	Preferences -> Appearance).</li>
-	<li>Window title now includes the full path to the current file.</li>
-	<li>Entries can now be marked in a series of different colors. Automarking of imported
-	entries is now done in separate color without affecting other marked entries.</li>
-	<li>Added new feature (Tools -> Scan database... -> Resolve duplicate BibTeX keys) to
-	search for duplicate keys and offer to generate new keys to resolve the duplicates.
-	Instead of being listed in a warning dialog after opening a bib file, duplicate keys
-	now trigger a dialog asking whether the user wants to resolve the duplicates.</li>
-	<li>Added check that ensures that application doesn't quit while a large save operation
-	is still in progress. Shows wait message with cancel button.</li>
-	<li>Added apostrophe (') as illegal character in BibTeX keys.</li>
-	<li>BibTeX strings that refer each other are now sorted correctly when saving bib file.</li>
-	<li>Fixed bug in merging external changes - file would still be reported as modified
-	externally after merging changes.</li>
-	<li>Fixed bug in Move/rename file link feature that could cause the wrong link to be
-	stored for certain directory structures.</li>
-	<li>Fixed bug: curly braces can now be used in arguments to formatters. </li>
-	<li>Fixed lockup bug when generating key for entries with crossref fields.</li>
-	<li>BibTeX strings are now resolved before attempting to (un)abbreviate journal names.</li>
-	<li>Modified [shorttitle] and [veryshorttitle] key generator markers so they consider
-	a hyphen a word boundary, and remove punctuation characters (keep only numbers and
-	letters).</li>
-	<li>deprecate various export formatters with new Authors formatter, which provides flexible formatting options.</li>
-    </ul>
-
-    <h3>Version 2.6</h3>
-    <ul>
-        <li>Fixed IEEExplorer and ACM fetchers to adapt to web site changes.</li>
-        <li>Active preview (1 or 2) is now remembered.</li>
-        <li>Applied patch by Igor L. Chernyavsky. to prevent loss of entry selection after
-            generating key.</li>
-        <li>Changed OpenDocument Spreadsheet export so the mimetype file is written correctly
-            at the start of the zip file.</li>
-        <li>Fixed bug when importing preferences: custom export filters would not be updated
-            after import.</li>
-        <li>Changed help page loading procedure so help pages can be loaded for plugin entry
-            fetchers.</li>
-        <li>Made it possible to define customized entry types with either-or conditions on
-            required fields, e.g. using a pseudo-field called "author/editor" will indicate
-            that the entry requires either the "author" or the "editor" field set.</li>
-        <li>Fixed bug: entries of a customized type could be indicated as complete even if
-            BibTeX key was not set.</li>
-        <li>Changed deletion process for some temporary files to avoid leftover files.</li>
-    </ul>
-
-    <h3>Version 2.6beta3</h3>
-    <ul>
-        <li>Added ScienceDirect entry fetcher that utilizes the BibSonomy scraper.</li>
-        <li>Changed non-native file dialog setting so files cannot be renamed. This prevents
-          accidentally entering rename mode when trying to enter directory. Can be enabled
-          again in Options -> Preferences -> Advanced.</li>
-        <li>Added new JStor fetcher that utilizes the BibSonomy scraper to obtain BibTeX data.</li>
-        <li>Fixed bug in CookieHandlerImpl.</li>
-        <li>Fixed bug; when dragging a file into JabRef and asking to move it to the file
-          directory, warning will now be given if the destination file already exists. Patch
-          by Alastair Mailer.</li>
-        <li>When dragging a file into JabRef and asking to copy or move it to the file directory,
-          it is now possible to rename to an arbitrary name. Patch by Alastair Mailer.</li>
-        <li>Added "review" field to BibTeXML export.</li>
-        <li>Added Reset button to entry fetchers. Patch by Dennis Hartrampf and Ines Moosdorf.</li>
-        <li>Changed Microsoft Office XML export so "number" rather than "issue" is exported
-          as <b:Issue>, which conforms with import format.</li>
-        <li>Added confirmation dialog that allows saving without backup in cases when
-          backup creation fails.</li>
-        <li>Fixed bug 2938562: using the move/rename feature on a file link could give an
-          absolute link even if the file was put below the main file directory.</li>
-        <li>Fixed bug 2931293: error generating key with [authorsAlpha] for short names.</li>
-        <li>When checking for external modifications, file size is now checked in addition
-          to the time stamp.</li>
-        <li>Fixed handling of maximised state when shutting down and starting up JabRef.
-          Patch by Igor L. Chernyavsky.</li>
-        <li>Fixed bug that prevented correct handling of DOS short file names. Patch
-          by Igor L. Chernyavsky.</li>
-        <li>Added support for KOI8_R character set.</li>
-        <li>Removed DocumentPrinter class, using standard API functions instead. Patch by
-          Tony Mancill.</li>
-        <li>Removed HightlightFilter class, using standard API functions instead. Patch by
-          Tony Mancill.</li>
-        <li>Changed keyboard shortcut for IEEXplorer search to Alt-F8.</li>
-        <li>Disabled JStor search, which doesn't work due to API changes.</li>
-        <li>External file type manager now removes "." prefix in file type extension if the user
-          has typed it that way.</li>
-        <li>Preview panel now defaults to preview layout 1 instead of 2. Switched default layouts.</li>
-        <li>Added IfPlural formatter by Russell Almond. The formatter outputs its first argument
-          if the input field contains " and " and the second one otherwise.</li>
-        <li>Applied patch by Philipp Cordes and Björn Kahlert for improved handling of names by
-          autocompleter. The patch also reorganizes the autocompleter classes.</li>
-        <li>Table will now scroll to keep the currently edited entry visible if an edit leads to
-          the entry getting sorted to a different position.</li>
-        <li>Reworked author and editor handling in Docbook export. Added Docbook XML header.</li>
-        <li>Database will no longer be marked as changed after accepting external changes, unless one or
-          more changes were not accepted before merging, and unless database was already marked as
-          changed.</li>
-        <li>Fixed bug: undesired autocompletion when saving file.</li>
-        <li>Fixed bug: entry editor doesn't appear when new entry is added while a filtering search or
-          group selection is active.</li>
-        <li>Fixed bug in writing of metadata on Windows. For certain metadata lengths newlines would be
-          messed up after the metadata comment in a bib file.</li>
-        <li>Search dialog now automatically previews first hit, and hides preview if there are no hits.</li>
-    </ul>
-
-    <h3>Version 2.6beta2</h3>
-    <ul>
-        <li>Added export formatter "Default" which takes a single argument. Outputs the string to format
-          unchanged if it is non-empty, otherwise outputs the argument.</li>
-        <li>Added option under Options -> Preferences -> General for disabling the strict enforcing of
-          correct BibTeX keys. Disabling this makes it possible to use e.g. umlaut characters in keys.</li>
-        <li>Modified launcher script for Windows installer to give higher heap size limit.</li>
-        <li>Improved autocompletion. All fields with autocompletion which have content selectors will now
-          autocomplete on content selector values. For the "journal" field, the autocompleter will now
-          additionally use entries from the current journal abbreviations list, and will also complete
-          on the entire field up to the cursor rather than just looking at the last word only.</li>
-        <li>Added support for postformatter in Layout. The postformatter will be run after
-          the formatters called from a layout.</li>
-        <li>Improved group autogeneration. Added option to generate groups based on author or editor
-          last names. Autogenerated groups are now alphabetized.</li>
-        <li>Modified Endnote export filter so "--" gets converted to "-" in the "pages" field.</li>
-        <li>Changed keyword groups so they will match on whole words only. E.g. a keyword group for the
-          keyword "can" will no longer match the keyword "scanner".</li>
-        <li>Improved entry type determination and author parsing for some varieties of CSA files.</li>
-        <li>Minor change to Harvard RTF export. Added space after "ed.", and added editor to output for
-          inbook entries.</li>
-        <li>Set limit to the number of displayed characters in group names in groups tree in order to
-          avoid group panel width problems.</li>
-        <li>Changed file link handling so all remote links classified as URL can be opened through
-          the browser. Setting a different file type manually makes JabRef call a remote link using
-          the handler application instead.</li>
-        <li>Modified Endnote/refer import filter to strip "doi:" from the %R field.</li>
-        <li>Modified HTML conversion so single newline is displayed in the preview (and HTML exports) as
-          <br>, while multiple newlines are displayed as <p>.</li>
-        <li>Fixed bug: switching entry editor between entries of different type may result in switching
-          of entry editor tabs.</li>
-        <li>Fixed bug: adding external file link leads to relative path from root directory if file
-          directory is set to an empty string.</li>
-        <li>Fixed error message when a # in a BibTeX string prevents saving. No longer states that the
-          problem is in an entry, but specifies that it is in a string.</li>
-        <li>Fixed bug: ODS export doesn't resolve BibTeX strings.</li>
-        <li>Fixed bug: content selector for "editor" field uses "," instead of " and " as delimiter.</li>
-        <li>Fixed bug: editing source doesn't allow change of entry type.</li>
-        <li>RTFChars formatter now converts --- to \emdash and -- to \endash.</li>
-    </ul>
-
-    <h3>Version 2.6beta</h3>
-
-    <ul>
-        <li>Added pages information to several entry types in Endnote export.</li>
-        <li>Modified LastPage formatter so it returns the number when only the number of pages is given.</li>
-        <li>Modified search algorithms so LaTeX commands are removed before search. For instance, this
-            means that the value "test \textit{case}" now matches the search string "test case".</li>
-        <li>Changed default table font family to "SansSerif".</li>
-        <li>Can now create lock file while writing a bib file. The lock file is checked before
-            saving, and before scanning an externally changed file, in order to avoid reading an
-            unfinished file.</li>
-        <li>Added support for dragging a file link from the file column to another application.</li>
-        <li>Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.</li>
-        <li>Improved ISI import filter so DOI information is included.</li>
-        <li>Fixed bug: metadata changes would not be detected as external changes to a database.</li>
-        <li>Fixed bug: when accepting external changes and not saving before new changes are
-            detected, the previously accepted changes would also be listed.</li>
-        <li>Fixed bug in Scifinder import where an empty Inventor field could overwrite the
-            author field.</li>
-        <li>Fixed bug in autocompleter. Current suggested completion would be added to the field
-            if the user closed the entry editor or mouse clicked on another field.</li>
-        <li>Fixed problem with exporting to some MySql versions. Patch by François Dorin.</li>
-        <li>Fixed bug in handling of LaTeX character sequences - now sequences with = as command
-            character (e.g. "\={A}") are recognized.</li>
-        <li>Fixed bug: gray out / hide setting in groups panel is overridden on startup
-            by search mode selection. Added separate prefs key for the groups setting.
-            Fix suggested by Igor L. Chernyavsky.</li>
-        <li>Fixed bug: cookie manager installed by Download button in file field editor throws
-            an exception when trying to fetch from Medline.</li>
-        <li>Fixed bug: temporary files don't get deleted on shutdown.</li>
-        <li>Disabled table column reordering in import inspection window, since a user reported
-            problems when using this.</li>
-        <li>Changed years from 2008 to 2009 in splash image.</li>
-    </ul>
-    <h3>Version 2.5 (June 22nd, 2009)</h3>
-    <ul>
-        <li>Modified export layout procedure so missing formatters can be reported in the error
-          output. Export now succeeds with warnings added where formatters are missing.</li>
-        <li>Conditional blocks (\begin{field}...\end{field}) in layout files can now be given a
-          semicolon-separated list of fields as argument. All fields must then be set for output
-          to be given.</li>
-        <li>Changed RIS import so multiple abstract fields in an entry are concatenated.</li>
-        <li>Added quoting of some special characters in SQL export, based on Kyle Crabtree's patch.</li>
-        <li>Fixed bug in MS Office 2007 XML export - editor names missing.</li>
-        <li>Fixed bug in plugin manager that prevented the "Download plugin" button from working.</li>
-        <li>Fixed bug in plugin manager routine that checks for installed versions of a plugin.</li>
-        <li>Fixed bug in startup that could show warnings multiple times when loading
-          from autosave files.</li>
-    </ul>
-    <h3>Version 2.5beta 2 (May 19th, 2009)</h3>
-    <ul>
-        <li>Plugin manager now handles plugin versions correctly based on the version number in their
-          plugin.xml file.</li>
-        <li>Added formatter "Number" that outputs a sequence number for the current entry in the current
-          export operation. This formatter can be used to produce a numbered list of entries.</li>
-        <li>Added autosave feature.</li>
-        <li>Fixed bug in file link handling in BibTeXML export.</li>
-        <li>Improved handling of patents in Scifinder import.</li>
-    </ul>
-
-    <h3>Version 2.5beta (April 21st, 2009)</h3>
-
-    <ul>
-      <li> Added Simplified Chinese translation.</li>
-      <li> Added simple plugin manager.</li>
-      <li> Added ~/.jabref/plugins as user-specific plugin directory.</li>
-      <li> Added \r marker to WrapFileLinks formatter that outputs file links without expanding relative links.</li>
-      <li> Added [authorsAlpha] key marker that formats authors according to the "alpha" BibTeX style. Patch submitted by Oliver Kopp.</li>
-      <li> Table sort order set by clicking and Ctrl-clicking table columns is now immediately set as default sort order in preferences.</li>
-      <li> Changed LyX pipe setting so it works whether ".in" is included or omitted.</li>
-      <li> Modified ISI importer so the words "of", "and" and "the" will not be capitalized in the title, journal or publisher fields.</li>
-      <li> When adding new local file link, browse dialog now appears immediately when opening file link editor, saving one mouse click.</li>
-      <li> Added "Remove all broken links" option in the resolver dialog for broken links when synchronizing file links.</li>
-      <li> Added rename option to Set/clear field dialog, to move contents from one field to another.</li>
-      <li> Added Back and Forward actions, for switching between recently edited BibTeX entries.</li>
-      <li> Added option under "Entry table" to designate fields as numeric for sorting purposes.</li>
-      <li> Added possibility for custom export filters to define their own name formatters. This is done by adding a file named "<filtername>.formatters". This file defines one formatter on each line, with each line containing the name of the formatter and the formatter definition, separated by a colon (:).</li>
-      <li> Added menu items for increasing/decreasing table font size, with shortcut keys Ctrl-plus and Ctrl-minus.</li>
-      <li> Added options to automatically mark entries imported into an existing database, and to unmark previously marked entries when importing.</li>
-      <li> Added ":(x)" modifier to key generator, specifying that the arbitrary string x should be used as a fallback value if the value returned by the field marker is empty.</li>
-      <li> Added ":upper" modifier to key generator, to force uppercase for a field marker.</li>
-      <li> Added buttons in External programs tab in Preferences for modifying settings for "Push to"-features, and removed obsolete fields.</li>
-      <li> Added support for DOI field in Endnote importer.</li>
-      <li> Added support for language and publication status fields in Medline import (publication status stored in "medline-pst" field).</li>
-      <li> Enabled cookie handling for downloading full-text articles.</li>
-      <li> Improved handling of invalid BibTeX keys containing white space. Parser will now try to piece together the key and avoid disturbing the continued parsing. Patch submitted by Stephan Lau.</li>
-      <li> Cosmetic change to the entry type label to the left in the entry editor.</li>
-      <li> Changed name handling so a single-entry name without a capital initial letter, such as "unknown", will be treated as a solitary last name rather than a von particle.</li>
-      <li> Changed table selection coloring so entries that are grayed out or marked can be distinguished from normal entries when selected.</li>
-      <li> Changed handling of "affiliation" in Medline import - now makes sure to escape # characters before storing.</li>
-      <li> Modified ACM portal fetcher due to web site changes.</li>
-      <li> Improvements to IEEEXplore fetcher - better handling of month and page fields.</li>
-      <li> Changed behaviour of source panel when an entry contains imbalanced # characters - the panel can now show the entry in its invalid form, allowing the user to fix the problem.</li>
-      <li> Improved handling of PDF files without XMP metadata - other metadata will now be retained. Patch submitted by Felix Langner.</li>
-      <li> Fixed bug in parsing file field - double spaces in file names would be reduced to single spaces, breaking the file link. Fix submitted by Uwe Kuehn.</li>
-      <li> Fixed NullPointerException when downloading external file and file directory is undefined.</li>
-      <li> Fixed bug in HTMLConverter.</li>
-      <li> Fixed NullPointerException in key generator for incomplete names.</li>
-      <li> Fixed bug in removing custom export filters.</li>
-      <li> Fixed bug 2225371: restart is no longer required after adding a new custom export filter. </li>
-      <li> Fixed bug in "Move/rename file" feature in file field editor with regard to undefined file directory.</li>
-      <li> Fixed bug in Ris importer.</li>
-      <li> Fixed NullPointerException in Endnote importer.</li>
-    </ul>
-
-
-    <h3>Version 2.4.2 (November 1st, 2008)</h3>
-
-    <ul>
-      <li>Added missing layout formatters FirstPage and LastPage.</li>
-      <li>Fixed a bug regarding ParamLayoutFormatter loaded from plugin.</li>
-      <li>Fixed crash during initalization of journal abbreviation list.</li>
-      <li>Added option to have JabRef search for external file when "Open file" function is chosen for an entry without any linked files. This is similar to what was always done in JabRef 2.3.1 and earlier.</li>
-      <li>Improved regular expression file search, so the regular expression can contain field markers as used for BibTeX key generation in addition to just regular fields. It is no longer possible to call arbitrary layout formatters, but the modifiers "upper", "lower" and "abbr" (for case conversion and abbreviation) can be used.</li>
-      <li>Ris importer now imports PB as "school" instead of "publisher" for THES entries.</li>
-      <li>Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.</li>
-    </ul>
-
-    <h3>Version 2.4.1 (October 8th, 2008)</h3>
-
-      <ul>
-        <li>Fixed bug: layout formatter arguments were not set when using a ParamLayoutFormatter loaded from plugin.</li>
-        <li>Fixed bug: when abbreviating first names, for authors with first names connected with "-", only the first letter is shown.</li>
-        <li>Enhanced ExportFormatTemplate plugins with an optional property "encoding" which overrides the default encoding with the given one.</li>
-        <li>Fixed menu colors under Windows Vista.</li>
-        <li>Fixed bug 2137771: Missing file extension when downloading.</li>
-        <li>Fixed bug 2105329: Ensure that newly added entry is visible in table.</li>
-        <li>Fixed bug 1908222: Preference "Fit table horizontally on screen" doesn't work</li>
-        <li>Fixed bug 2119059: Handling of the A1 tag in the RIS format.</li>
-        <li>Added missing help file for ACM digital library fetcher.</li>
-        <li>Added option for whether to use IEEE LaTeX journal abbreviation list.</li>
-        <li>Added tooltip to menu items in push-to-application popup menu.</li>
-      </ul>
-
-
-    <h3>Version 2.4 (September 1st, 2008)</h3>
-
-      <ul>
-        <li>Added mappings for some special characters that need to be sanitized when generating BibTeX keys.</li>
-        <li>Added ACM Digital Library fetcher by Aaron Chen.</li>
-        <li>Added new entry types (conference, patent, standard, electronic).</li>
-        <li>Improvements to IEEEXplore fetcher.</li>
-        <li>Added explanatory text to indicate that "ps" and "pdf" files are legacy features.</li>
-        <li>Fixed unexpected behaviour of "Open PDF or PS" menu item - now looks in "file" field, and does not launch search for external files.</li>
-        <li>Fixed bug 1827568: 'Save database' might not store current edit in entry editor.</li>
-        <li>Fixed bug 2027944: updating custom export definitions requires restart.</li>
-      </ul>
-
-
-    <h3>Version 2.4beta (March 12th, 2008)</h3>
-
-      <ul>
-	<li>Added "protection" flag in Database properties. When this flag is set, JabRef will refuse to save the database when the file has been externally modified, until the changes have been reviewed and partly or completely accepted.</li>
-	<li>Fixed bug where the external update notification in the side pane would remain even if the referred database was closed.</li>
-	<li>Added two new search modes - display search results in a dialog, and global search.</li>
-	<li>Support for fetching from the command line using --fetch (contributed by Jan F. Boldt and David Kaltschmidt).</li>
-	<li>Support for fetching from Spires (contributed by Fedor Bezrukov).</li>
-	<li>Support for fetching from JSTOR (contributed by Tobias Langner, Juliane Doege, Sebastian de Hoog and Christoph Jacob)</li>
-	<li>Added context menu for file list editor with options to move/rename linked file as well as to automatically move the file to file directory and optionally rename after BibTeX key.</li>
-	<li>JabRef can now be extended by plugins (using the Java Plugin Framework JPF as the underlying technology). Currently extension points exist for:
-          <ul>
-            <li>ImportFormat</li>
-            <li>ExportFormat based on Templates</li>
-            <li>ExportFormat based on IExportFormat (contributed by Kariem Hussein)</li>
-            <li>LayoutFormatter</li>
-            <li>EntryFetcher</li>
-            <li>PushToApplication</li>
-          </ul>
-           JabRef uses JPFCodeGenerator (which was written just for JabRef) to generate helper classes for making JPF easier. Current version used: 0.4 http://forge.spline.inf.fu-berlin.de/projects/jpfcodegen/
-	</li>
-	<li>Print warnings if insufficient Java version is used or if JRE is not from Sun.</li>
-	<li>Memory Stick Mode: JabRef automatically loads configuration settings from jabref.xml and also writes them there if enabled.</li>
-	<li>Improved handling of crossrefs. Fields are now resolved in preview and export.</li>
-	<li>Updated dependencies, now using: JempBox-0.2</li>
-	<li>Improved handling of ArXiv URIs.</li>
-	<li>Changed default preference value: now using import inspection dialog also when just a single entry is imported.</li>
-	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
-	<li>[ 1738920 ] Fixed: Windows Position in Multi-Monitor environment</li>
-	<li>[ 1795355 ] Fixed: LatexFieldFormatter omits "{" on beginning of optional field</li>
-	<li>[ 1297576 ] New feature: Printing of entry preview (use right-click menu)</li>
-	<li>[ 1717849 ] Fixed: Bug in aux import (contributed by Kai Eckert)</li>
-	<li>[ 1749613 ] Fixed: About translation</li>
-	<li>[ 1709449 ] Fixed: Clicking a DOI from context menu fails</li>
-	<li>[ 1869331 ] Fixed: Uninstall after silent install removes Windows start menu</li>
-	<li>[ 1723219 ] Fixed: Strange message (LyX) while installing 2.3</li>
-	<li>Added handling of unknown file types when synchronizing the file field.</li>
-	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
-	<li>Moved file preferences from General tab to new File tab.</li>
-	<li>Reduced horizontal size of preferences dialog.</li>
-	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
-	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).    </li>
-      </ul>
-
-
-    <h3>Version 2.3.1 (November 29th, 2007)</h3>
-
-      <ul>
-	<li>Removed default applications for file types under Mac OS X, and made use of the standard "/usr/bin/open <filename>" way to open files except when an application name is explicitly set.</li>
-	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
-      </ul>
-
-
-    <h3>Version 2.3 (November 8th, 2007)</h3>
-
-      <ul>
-	<li>Added handling of unknown file types when synchronizing the file field.</li>
-	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
-	<li>Moved file preferences from General tab to new File tab.</li>
-	<li>Reduced horizontal size of preferences dialog.</li>
-	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
-	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).</li>
-      </ul>
-
-
-    <h3>Version 2.3beta3 (October 6th, 2007)</h3>
-
-      <ul>
-	<li>Export formats that output the character encoding now use common names for encodings instead of Java-specific names.</li>
-	<li>Added "Open" button in external link dialog box to test or use the link.</li>
-	<li>Added formatter WrapFileLinks which iterates over file links, producing a formatted string for each containing any desired information about the file link.</li>
-	<li>Applied Fedor Bezrukov patch (setting User-Agent in URLDownload to solve ArXiv problem).</li>
-	<li>Applied Aaron Chen's patch for fixing bugs in IEEExplore fetcher.</li>
-	<li>Applied Edward Valeev's patch for handling article numbers replacing pages in Refer/Endnote import.</li>
-	<li>Added toolbar button to entry editor for writing XMP-metadata.</li>
-	<li>Added paste and drag & drop support to file list editor.</li>
-	<li>Added "authorLast" and "editorLast" markers for using last author's last name in BibTeX keys.</li>
-	<li>Added support for file field in Write XMP action.</li>
-	<li>Numeric fields (year, volume, number, pmid, citeseercitationcount) are now sorted as numbers when possible.</li>
-	<li>Improvements to the Ovid import filter.</li>
-	<li>Modified AuthorLastFirstAbbreviator and AuthorAbbreviator to accept names in both last-first and first-first format, but always return in last-first format. These two formatters are identical.</li>
-	<li>[ 1648789 ] Fixed: Problem on writing XMP when option to leave out some fields was active.</li>
-	<li>[ 1561990 ] Fixed: Exporting to WinEdt - apostrophe.</li>
-	<li>Fixed bug in entry editor: source panel edits were not properly stored when clicking a different entry in the main table.</li>
-	<li>Fixed problem with "Synchronize file links" not honouring database specific file directory.</li>
-	<li>Fixed problem with file type selection in external file link editor not being up-to-date.</li>
-	<li>Fixed problem with wrong enable/disable behaviour of Clear search button when switching between tabs.</li>
-	<li>Fixed argument parsing in AbstractParamLayoutFormatter so \t and \n can be used for tabs and newlines.</li>
-      </ul>
-
-
-    <h3>Version 2.3beta2 (August 29th, 2007)</h3>
-
-      <ul>
-	<li>When user chooses to save to an existing file, and answers that the file should not be overwritten, a new file dialog now appears instead of the operation cancelling.</li>
-	<li>Removed antialias setting for main table, because it interferes with proper rendering on LCDs when running under JRE 6. Removed non-optional antialias settings for entry editor for the same reason.</li>
-	<li>Changed external link handling so remote (http) links can be sent to the external application. Applications like Evince and Gimp can open remote links.</li>
-	<li>Replaced Simle HTML export filter with improved version by Mark Schenk.</li>
-	<li>Introduced ParamLayoutFormatter interface for layout formatters that can take an argument by the following syntax: \format[MyFormatter(argument)]{\field}. Implementing classes contain a setArgument(String) method that receives the argument (if any) before the format() method is called.</li>
-	<li>Timestamp and owner fields are now set also when appending a bib file, and new options have been introduced to control whether imported/appended/pasted entries should have these fields overwritten if already set.</li>
-	<li>Added operations for adding file links in import inspection window, and made file and URL icons in the table clickable.</li>
-	<li>Removed PDF and PS columns and operations in import inspection window (replaced by operations on the "file" field).</li>
-	<li>File field column in main table now shows file type icon instead of generic icon.</li>
-	<li>Modified Endnote export to take "file" field into account, and to resolve full paths to PDF files.</li>
-	<li>Added "Auto" button to automatically set "owner" field to the default username.</li>
-	<li>Added \encoding tag for begin/end layouts in export filters to print the name of the character encoding used for the export. The tag is not available in entry layouts.</li>
-	<li>Added \% as a supported LaTeX command, producing '%'.</li>
-	<li>Fixed bug in HTMLChars: commands like {\aa} and {\o} were not processed properly, even though defined in Globals.HTMLCHARS.</li>
-	<li>Fixed bug that made it possible to accidentally close database without saving, when error occurs during the save operation.</li>
-      </ul>
-
-
-    <h3>Version 2.3beta (June 28th, 2007)</h3>
-
-      <ul>
-	<li>Added MIS Quarterly export format.</li>
-	<li>Added support for COPAC file format.</li>
-	<li>Added RemoveTilde LayoutFormatter to deal with Bibtex non-breakable spaces.</li>
-	<li>Added autocompletion feature for author/editors and other fields.</li>
-	<li>Added feature to save all open databases.</li>
-	<li>Added support for pushing citations to Vim when Vim server is enabled.</li>
-	<li>Added missing option for specifying the path to LEd.exe.</li>
-	<li>Added -s/--nosplash command line option for disabling the splash screen.</li>
-	<li>Added new field marker [auth.etal] for key generation.</li>
-	<li>Added support in XMP metadata handling for bibtex string resolution.</li>
-	<li>When opening databases, already open files are now skipped.</li>
-	<li>Option to use native instead of Swing file dialogs is now available on all OSes.</li>
-	<li>Synchronize external links now searches entire database, not selected entries.</li>
-	<li>Medline import now adds <Affiliation> information into the "institution" field.</li>
-	<li>Improved handling of external links. The 'file' field can now specify a list of external links, and arbitrary file types are supported. Old-style PDF and PS links can be moved automatically into the 'file' field.</li>
-	<li>Fixed bug in RIS and Refer/Endnote imports. Entries with editors but no authors are now imported properly.</li>
-	<li>Fixed missing export formatter AuthorFirstFirstCommas.</li>
-	<li>Fixed minor bug in Harvard export with missing space between year and title.</li>
-	<li>Fixed bug that caused lockup when connection to IEEExplore fails.</li>
-	<li>Fixed wrong dependency in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed problem with foreign characters in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed problem with key generation in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed bug in duplicate search that made misc entries never get detected as duplicates.</li>
-	<li>Fixed bug in XMP reimport from DublinCore related to month strings.</li>
-      </ul>
-
-
-    <h3>Version 2.2 (January 30th, 2007)</h3>
-
-      <ul>
-	<li>Added progress bar to indicate progress when synchronizing PS/PDF links.</li>
-	<li>Option to autogenerate key for imported entries now also affects entries imported
-      without using the import inspection window.</li>
-	<li>Modified quick jump behaviour so sequences of letters can be found. Timeout or
-      ESC resets the search.</li>
-	<li>Improved XMP support:
-          <ul>
-	    <li>JabRef now reads and write DublinCore and Legacy Document Properties;
-		Caution needs to be used though since, JabRef does overwrite existing values.</li>
-	    <li>XMP privacy filter can be used to prevent sensible fields to be exported.</li>
-          </ul>
-	</li>
-	<li>Support for OAI2 identifiers with subcategories, e.g. math.RA/0601001</li>
-	<li>Fixed bug that made explicit groups appear empty after updating group tree from external change.</li>
-	<li>New windows installer thanks to Uwe Stöhr.</li>
-	<li>[ 1641247 ] Fixed: No update of preview after generating bibtex key</li>
-	<li>[ 1631548 ] Fixed: Absolute paths should be stored for last open files.</li>
-	<li>[ 1598777 ] Fixed: Month sorting</li>
-	<li>[ 1570570 ] New Feature: Deselect all duplicates on import</li>
-	<li>[ 1574773 ] Fixed: sanitizeUrl() breaks ftp:// and file:///</li>
-	<li>[ 1609991 ] Fixed: Silverplatter Import: Publisher and Year confused</li>
-	<li>[ 1608391 ] Fixed: Medline Search Editbox size gets to big</li>
-      </ul>
-
-
-    <h3>Version 2.2beta2 (November 26th, 2006)</h3>
-
-      <ul>
-	<li>Redesigned export functions to simplify GUI and provide "Export selected entries" functionality. Export filter is now chosen using the file type dropdown menu in the file dialog.</li>
-	<li>Fixed bug that caused UnsupportedEncodingException on Windows when saving.</li>
-	<li>Added warning dialog when exporting failed.</li>
-	<li>Added fix for exporting special chars in RTF like éóú...</li>
-	<li>Added NameFormat LayoutFormatter based on Bibtex method name.format$</li>
-	<li>Added Fetch from ArXiv.org to Web Search<br />
-            [1587342] Quering ArXiv (and any OAI2 Repository)</li>
-	<li>[1594123] Fixed: Failure to import big numbers in Bibtex</li>
-	<li>[1594169] Fixed: Entry editor navigation between panels faulty</li>
-	<li>[1588028] Fixed: Export HTML table has relative DOI URL</li>
-	<li>[1601651] Fixed: PDF subdirectory - missing first character</li>
-      </ul>
-
-
-    <h3>Version 2.2beta (October 13th, 2006)</h3>
-
-      <ul>
-	<li>Added Mark Schenk's advanced HTML export filter.</li>
-	<li>Added options to copy/move/link to dragged linkable file (pdf, ps, etc.).</li>
-	<li>Removed unnecessary output text when scanning for external file changes.</li>
-	<li>Changed layout of entry editor to solve problem with collapsing text fields.</li>
-	<li>Added first version of support for XMP-metadata in PDFs.
-          <ul>
-	    <li>"Import into..."</li>
-            <li>Integrate with copy/move/link.</li>
-            <li>Added option to write all/selected PDFs in database</li>
-          </ul>
-	</li>
-	<li>Added tooltips to database tabs showing the file's full path.</li>
-	<li>Added function for setting or clearing specific fields in selected or all entries.</li>
-	<li>Setting a relative PDF/PS path in Database Properties now makes JabRef look for the directory relative to the bib file's location.</li>
-	<li>Removed Oxford comma from AuthorList...Comma-LayoutFormatters.</li>
-	<li>Added LayoutFormatters that print the Oxford comma.</li>
-	<li>Added missing space between abbreviated author first names: William Andrew Paul => W. A. Paul (used to be W.A. Paul)</li>
-	<li>Added LayoutFormatter for HTML paragraphs.</li>
-	<li>Changing Database Properties now causes the database to be marked as changed.</li>
-	<li>Improved simple search. Words are now treated as separate search terms, and phrases can be indicated with "double quotes".</li>
-	<li>When a letter key is pressed in the table, the first entry starting with the same letter (in the current sort column) is selected.</li>
-	<li>Bib files dragged into JabRef now appear in the Recent files menu.</li>
-	<li>Fixed bug in import dialog.</li>
-	<li>Better support for ISI files in general (should basically be better than INSPEC) including IEEE parsing.</li>
-	<li>Added regular expression search for auto-linking. Search is now more flexible by default.</li>
-	<li>Search operation also now search relative to the JabRef directory.</li>
-	<li>General improvements in Inspec ISI handling.</li>
-	<li>New LayoutFormatter: AuthorOrgSci - first author is in "last, first" all others in "first last". First names are abbreviated.</li>
-	<li>New LayoutFormatter: NoSpaceBetweenAbbreviations - spaces between multiple abbreviated first names are removed.</li>
-	<li>Improved PDF link resolver to produce proper URIs.</li>
-	<li>[1503956] Fixed: Help text instead of Help icon.</li>
-	<li>[1542552] Fixed: Wrong author import from ISI file.</li>
-	<li>[1534537] Fixed: resize groups interface</li>
-	<li>[1465610] Fixed: (Double-)Names containing hyphen (-) not handled correctly</li>
-	<li>[1436014] Fixed: No comma added to separate keywords</li>
-	<li>[1548875] Fixed: download pdf produces unsupported filename</li>
-	<li>[1545601] Fixed: downloading pdf corrupts pdf field text</li>
-	<li>[1285977] Fixed: Impossible to properly sort a numeric field</li>
-	<li>[1535044] Fixed: Month sorting</li>
-	<li>[1540646] Fixed: Default sort order: bibtexkey</li>
-	<li>[1553552] Fixed: Not properly detecting changes to flag as changed</li>
-      </ul>
-
-    <h3>Version 2.1 (August 9th, 2006)</h3>
-
-      <ul>
-	<li>Added capability to drag files and WWW links into JabRef. BibTeX files will be opened normally, other files imported, and WWW links downloaded and imported.</li>
-	<li>The -v command line option now makes the application only print version number and quit immediately.</li>
-	<li>Duplicates within a set of imported entries are now found and shown in the import inspection window.</li>
-	<li>Mac users can now choose between native and Swing file chooser under Preferences -> Advanced.</li>
-	<li>Fixed missing duplicate warning when importing without import inspection window.</li>
-	<li>Fixed error in ISI import which allowed empty fields to be set, causing errors when saving and reloading entries.</li>
-	<li>Fixed missing time and owner stamps when importing entries (only in 2.1b/2.1b2).</li>
-	<li>Fixed erroneous updates in entry editor if user switches to a different entry while downloading PDF/PS file.</li>
-	<li>Fixed bug (only in 2.1b2) in calling file open/save dialog on Mac OS X.</li>
-	<li>Fixed bug that made duplicate resolver dialog pop under import inspection dialog.</li>
-      </ul>
-
-    <h3>Version 2.1beta2 (June 29th, 2006)</h3>
-
-      <ul>
-	<li>Added option to toggle floating of marked entries to the top of the table.</li>
-	<li>Added option to open, append and import multiple BibTeX files.</li>
-	<li>Improved support for LaTeX special characters in HTML and RTF representations.</li>
-	<li>Fixed bug that made entry selection get lost when an edit modifies the entry's position in the main table.</li>
-	<li>Fixed bug in BibTeXML export (entry type name missing in tag).</li>
-	<li>Fixed name handling in (non-compliant) Endnote files giving all author names on the same line.</li>
-	<li>Fixed problem with keyword handling in Medline import.</li>
-	<li>Fixed (harmless) NullPointerException when medline fetch is cancelled.</li>
-	<li>Fixed bug in parser that made {"} illegal in fields quoted with ".</li>
-      </ul>
-
-    <h3>Version 2.1beta (May 9th, 2006)</h3>
-
-      <ul>
-	<li>Known issue: font sizes cannot be changed, but should follow OS settings on Windows and Mac.</li>
-	<li>Known issue: some HTML may be handled inappropriately when downloading from IEEEXplore.</li>
-	<li>Changed Paste function so timestamp and owner fields are updated.</li>
-	<li>Added "Other" item to the "New entry ..." menu.</li>
-	<li>Changed sorting order so marked entries are displayed at the top of the table.</li>
-	<li>Added IEEEXplore search and download feature.</li>
-	<li>Added option to store entries in their original order. Unsorted table view now shows entries in their original order.</li>
-	<li>Added option to autogenerate keys for entries with missing keys before each save.</li>
-	<li>Improved handling of external URLs to prevent problems with special characters.</li>
-	<li>Medline and Endnote imports no longer automatically add curly braces around capital letters in title.</li>
-	<li>Float search now scrolls table to the top.</li>
-	<li>Fixed lockup problem in preview with uneven number of # characters in fields.</li>
-	<li>Fixed problem with default content selector fields reappearing after removal.</li>
-	<li>Fixed problem with unsupported character encodings being selectable and causing unreported save errors.</li>
-	<li>Fixed bug that blocked last line in table columns setup from being removed.</li>
-	<li>Fixed missing export formats from command line.</li>
-	<li>Fixed bug that made Review tab impossible to remove from entry editor.</li>
-	<li>Fixed bug in Medline XML import that assigned wrong PMID for some entries.</li>
-	<li>Fixed bug in custom export that collapsed sequences of two or more backslashes into a single backslash in output.</li>
-	<li>Fixed bug (misspelled formatter name) in Harvard RTF export.</li>
-      </ul>
-
-    <h3>Version 2.0.1 (February 2nd, 2006)</h3>
-
-      <ul>
-	<li>Fixed bug that made a hidden entry editor under some circumstances store a field value to the wrong entry.</li>
-	<li>Fixed synchronization bug that made the opening of a new database sometimes fail.</li>
-	<li>Fixed bug in setting external journal lists when no personal list is set.</li>
-      </ul>
-
-    <h3>Version 2.0 (January 30th, 2006)</h3>
-
-      <ul>
-	<li>Changed sorting selection interface for main table for more intuitive operation.</li>
-	<li>Made import operation update "working directory".</li>
-	<li>Removed hard-coded author/editor name rearrangement in OpenOffice and OpenDocument exports.</li>
-	<li>Fixed hangup when parsing RIS files from Nature.</li>
-	<li>Fixed NullPointerException when generating database from AUX file on Mac OS X.</li>
-	<li>Fixed bug in routine for adding braces around capital letters.</li>
-	<li>Fixed bug in switching preview layouts.</li>
-	<li>Fixed bug in link handling in entry preview.</li>
-      </ul>
-
-    <h3>Version 2.0b2 (January 15th, 2006)</h3>
-
-      <ul>
-	<li>Changed field order in OpenDocument export
-	to comply with bibliography requirement.</li>
-	<li>Added support for inserting citations into
-	Emacs using gnuserv/gnuclient.</li>
-	<li>Added option to set a regular expression
-	replace operation on generated bibtex keys.</li>
-	<li>Added support for custom importers inside
-	a jar file.</li>
-	<li>Fixed bug in opening URLs containing "&"
-	on Windows.</li>
-      </ul>
-
-    <h3>Version 2.0b (January 4rd, 2006)</h3>
-
-      <ul>
-	<li>Added a system for registering custom import
-	formats in the form of Java classes.</li>
-
-	<li>Added export option for OpenDocument
-	spreadsheet.</li>
-
-	<li>Added new options for name formatting in main
-	table.</li>
-
-	<li>Added REPEC-NEP import filter.</li>
-
-	<li>Added option for non-field parameters for export
-	formatters. If the parameters does not start with the
-	backslash character, it will be passed unchanged to the
-	formatter in place of any field value.</li>
-
-	<li>Added export formatter CurrentDate, which returns
-	the current date, and takes a format string as
-	parameter.</li>
-
-	<li>Added customization of table colors, accessible
-	from Tools -> Preferences -> Entry table.</li>
-
-	<li>Added new Appearance tab to preferences dialog to
-	gather appearance related options.</li>
-
-	<li>Added toggling of abbreviated and full journal
-	names. The list of journals is realized as an external
-	file, but editable from a Manage Journal Abbreviations
-	panel. Secondary lists can also be linked, but not
-	edited. There is a download option to quickly get a
-	list available on the internet, and we will provide one
-	or more lists for download from the SourceForge web
-	server.</li>
-
-	<li>Added functionality for new JabRef instances to
-	detect a running instance, and send command line
-	parameters to the running instance for processing.</li>
-
-	<li>Added handling of HTML links in preview panel.</li>
-
-	<li>Added confirmation dialog when database is saved
-	and the chosen encoding doesn't support all characters.
-	Gives options to save, cancel or try a different
-	encoding.</li>
-
-	<li>The encoding used when opening a database is now
-	remembered, and used when database is stored.</li>
-
-	<li>Added review field for research comments, paper
-	reviews, etc.</li>
-
-	<li>Added option to disable wrapping for certain
-	fields. Wrapping of pdf, ps, doi and url is disabled by
-	default.</li>
-
-	<li>Antialiasing option now affects entry editor text
-	fields as well as table text.</li>
-
-	<li>Changed to monospaced font in source editor
-	field.</li>
-
-	<li>Removed option to put double braces around BibTeX
-	fields, but retained option to remove double braces
-	when loading. Added option to put braces around capital
-	letters of a chosen set of fields.</li>
-
-	<li>Improved Ovid import.</li>
-
-	<li>Fixed problem with ordering of BibTeX strings that
-	are referred to by other strings.</li>
-
-	<li>Fixed problem with loading 16-bit encoded bib files
-	with 8-bit encoding as default, and vice versa.</li>
-
-	<li>Fixed multiplying authors bug when author/editor
-	field appears both in Required and Optional tabs.</li>
-
-	<li>Fixed startup freeze when trying to load certain
-	malformed bib files.</li>
-
-	<li>Fixed bug related to multi-line fields in RIS
-	import.</li>
-
-	<li>Fixed bug related to looking up a fully qualified
-	DOI</li>
-
-	<li>Included review field to preview panel 1, which
-	shows the abstract</li>
-
-	<li>Fixed bug where booktitle field was not displayed
-	in preview for conference proceedings, similar to
-	journal field</li>
-      </ul>
-
-    <h3>Version 1.8.1 (September 15th, 2005)</h3>
-
-      <ul>
-	<li>Added automatic timestamp with configurable format
-	for entries.</li>
-
-	<li>Added new key generator modifier ":abbr" to
-	abbreviate field contents.</li>
-
-	<li>Added Help button in Preferences -> Entry
-	preview</li>
-
-	<li>Added Big5, Big5_HKSCS and GBK encodings for
-	Chinese.</li>
-
-	<li>Improved marking feature. Username is now used for
-	marking, so different users can mark entries separately
-	without interference.</li>
-
-	<li>Improved handling of names such as "Firstname de la
-	Lastname jr.", with different handling for presentation
-	and sorting purposes. Key generation now should always
-	use the genuine last name, and not produce keys like
-	"de2001".</li>
-
-	<li>Removed duplicate warning from inspection dialog
-	for non-selected entries.</li>
-
-	<li>Fixed setting of sheet name in OpenOffice.org Calc
-	export.</li>
-
-	<li>Fixed bug that prevented PDF/PS opening by F4 from
-	automatically finding files in subdirectories below the
-	main PDF/PS dir.</li>
-
-	<li>Fixed BibTeX parser bug that made it choke on short
-	comment strings.</li>
-
-	<li>Fixed bug that made regexp search fail for fields
-	containing newline characters.</li>
-
-	<li>Fixed platform-dependent handling of newline
-	characters.</li>
-
-	<li>Fixed bug that prevented command line import with
-	explicit format.</li>
-
-	<li>Fixed bug that made it impossible to disable table
-	antialiasing.</li>
-
-	<li>Fixed AuthorAndsCommaReplacer.</li>
-      </ul>
-
-    <h3>Version 1.8 (July 30th, 2005)</h3>
-
-      <ul>
-	<li>Search panel now starts visible if it was visible
-	at last shutdown.</li>
-
-	<li>Added option to disable import inspection window
-	when only one entry is being imported.</li>
-
-	<li>Fixed parser bug that caused problems for bib files
-	containing extra characters after the last entry.</li>
-
-	<li>Fixed missing month in JStor import.</li>
-
-	<li>Fixed some bugs in "new from plain-text"
-	wizard</li>
-      </ul>
-
-    <h3>Version 1.8b2 (July 13th, 2005)</h3>
-
-      <ul>
-	<li>Changed handling of external updates so the
-	notification is suppressed when there are no actual
-	changes.</li>
-
-	<li>Changed autodetecting import so BibTeX files are
-	handled more similarly to other formats.</li>
-
-	<li>Enabled sorting by icon columns.</li>
-
-	<li>Added option to remove BibTeX source panel from
-	entry editor.</li>
-
-	<li>Added command line option to not load any files at
-	startup. Will override any autoloading or other command
-	line options that normally load or import files.</li>
-
-	<li>Added handling of duplicates to import inspection
-	window.</li>
-
-	<li>Made entry preview be updated whenever the
-	selection is expanded by one row, to make it more
-	useful while selecting a set of entries.</li>
-
-	<li>Changed BibTeX field parsing to avoid inserting
-	line breaks at wrong places.</li>
-
-	<li>Improved handling of page numbers in Medline
-	import.</li>
-
-	<li>Fixed import of file links when importing SixPack
-	files.</li>
-
-	<li>Fixed bug that prevented closing of search
-	interface when no databases are open.</li>
-
-	<li>Fixed OpenOffice Calc export to be compatible with
-	OpenOffice.org 2.0 beta.</li>
-
-	<li>Fixed bugs in Refer/Endnote import filter.</li>
-
-	<li>Fixed bug that caused changes to be lost in some
-	cases when the same field is present in multiple entry
-	editor tabs.</li>
-
-	<li>Fixed bug that prevented command line autodetecting
-	import from working with BibTeX files.</li>
-
-	<li>Fixed minor bug in routine for removing double
-	braces.</li>
-      </ul>
-
-    <h3>Version 1.8b (June 6th, 2005)</h3>
-
-      <ul>
-	<li>Added option to store bib file with double
-	braces.</li>
-
-	<li>Follow @input tags in aux files to indicate nested
-	aux files for generating subdatabases.</li>
-
-	<li>Improved wrapping and formatting of bib files, to
-	preserve paragraph separator (empty line).</li>
-
-	<li>Added test buttons for customization of preview
-	layouts.</li>
-
-	<li>Added inspection dialog for previewing and
-	generating keys for imported entries, and deciding
-	which ones to keep and discard. The dialog allows
-	inspection during long import processes such as Medline
-	search.</li>
-
-	<li>Restructured layout to use a common side pane with
-	all tabs.</li>
-
-	<li>Added import filter for Cambridge Scientific
-	Abstracts (CSA) format.</li>
-
-	<li>Added PS directory with similar options as
-	PDF.</li>
-
-	<li>Added [authshort] and [edtrshort] key field
-	markers. Patch submitted by Kolja Brix.</li>
-
-	<li>Made the program remember preview enable
-	setting.</li>
-
-	<li>Improved handling of illegal regular expressions in
-	search.</li>
-
-	<li>Removed options to search only Required, Optional
-	and/or General fields, in order to simplify search
-	interface.</li>
-
-	<li>Changed keys for Next and Previous tab to CTRL-PGDN
-	and CTRL-PGUP to match shortcuts in a certain popular
-	web browser.</li>
-
-	<li>Minor change to Preferences -> Table columns to
-	enable insertion of column in position 2.</li>
-
-	<li>Fixed parser bug that caused problems for files
-	with >10000 entries.</li>
-
-	<li>Fixed bug in entry editor that caused the source
-	edit panel to remove marking from entries.</li>
-
-	<li>Fixed export bug that made "\begin" tags fail if
-	encountered immediately after an "\end" tag.</li>
-
-	<li>Fixed export bug that made whitespace disappear
-	after empty field values.</li>
-
-	<li>Fixed ISI import bug that handled SO fields with
-	line breaks wrong.</li>
-
-	<li>Fixed bug occuring when choosing not to import
-	duplicate imported entry.</li>
-
-	<li>Fixed problem with detecting popup trigger on Mac
-	OSX with one button mouse.</li>
-
-	<li>Fixed erroneous relative paths for PDF files when
-	PDF directory is not set.</li>
-
-	<li>Fixed entry preview to resolve string
-	references.</li>
-      </ul>
-
-    <h3>Version 1.7.1 (April 11th, 2005)</h3>
-
-      <ul>
-	<li>Removed unnecessary stack traces when opening
-	external viewer.</li>
-
-	<li>Fixed bug that made Ctrl-E destroy current edit in
-	entry editor.</li>
-
-	<li>Fixed problem when copying modified BibTeX key gave
-	old value.</li>
-
-	<li>Fixed missing 'booktitle' import in CONF entries in
-	RIS import.</li>
-
-	<li>Fixed bug that made group tree disappear for
-	certain keyword expressions.</li>
-
-	<li>Fixed bug that made standard BibTeX fields be saved
-	without line wrapping.</li>
-      </ul>
-
-    <h3>Version 1.7 (March 20th, 2005)</h3>
-
-      <ul>
-	<li>When fetching from Medline or CiteSeer, fetched
-	entry is now opened in editor.</li>
-
-	<li>Added French translations of help files.</li>
-
-	<li>Added color highlighting of focused text field in
-	entry editor.</li>
-
-	<li>Added option in context menu of entry editor for
-	changing capitalization of field contents.</li>
-
-	<li>Added name conversion "Smith, RA" -> "Smith, R.
-	A." to Medline import.</li>
-
-	<li>Updated task bar icon.</li>
-
-	<li>Fixed bug that left some search settings items
-	inappropriately disabled.</li>
-
-	<li>Fixed bug that caused requirement for restart to
-	register change in default key pattern.</li>
-
-	<li>Fixed bug that caused crash some times after
-	adding/removing field content selectors.</li>
-
-	<li>Fixed bug in recognizing custom entry types when
-	reading bib files.</li>
-
-	<li>Fixed bug that allowed a deleted entry to stay
-	visible in the entry editor.</li>
-      </ul>
-
-    <h3>Version 1.7b2 (March 7th, 2005)</h3>
-
-      <ul>
-	<li>Made side pane resizable.</li>
-
-	<li>Replaced entry customization dialog with improved
-	interface.</li>
-
-	<li>Added standard entry type "conference", similar to
-	"inproceedings".</li>
-
-	<li>Added "default" label pattern to avoid the need to
-	set similar patterns manually.</li>
-
-	<li>Added line wrapping to metadata in saved .bib file
-	to avoid long lines.</li>
-
-	<li>Added "bibtexkey" as implicit fourth sort
-	criterion, to minimize problem with almost similar
-	entries swapping places.</li>
-
-	<li>Added OpenOffice.org Calc export filter that
-	exports spreadsheet compatible with the OpenOffice.org
-	bibliography feature.</li>
-
-	<li>Added a couple of previously unsupported
-	publication types in SciFinder.</li>
-
-	<li>Added extra shortcuts CTRL-+ and CTRL-- for
-	switching tabs in entry editor, since original
-	shortcuts CTRL[-SHIFT]-TAB is used by some window
-	managers.</li>
-
-	<li>Updated Endnote export filter.</li>
-
-	<li>Fixed focus and key binding problems for switching
-	tabs/entries in entry editor</li>
-
-	<li>Fixed bug that prevented required fields tab from
-	appearing for entries with only bibtex key as required
-	field.</li>
-
-	<li>Fixed bug that prevented the user from changing the
-	default encoding.</li>
-
-	<li>Fixed bugs in RIS import.</li>
-
-	<li>Fixed bug 1112050; freeze when reading certain
-	author fields with mismatched braces.</li>
-      </ul>
-
-    <h3>Version 1.7 beta (January, 27th, 2005)</h3>
-
-      <ul>
-	<li>Changed routine for rearranging author names
-	(Lastname, Firstname) so bracketed expressions are
-	treated as units.</li>
-
-	<li>Grouping controls now allow group hierarchies, and
-	now allow explicit and search expression groups as well
-	as keyword groups.</li>
-
-	<li>Added full customization of general fields
-	tabs</li>
-
-	<li>Added option to preserve formatting for non-BibTeX
-	fields.</li>
-
-	<li>Added integrity check for database.</li>
-
-	<li>Added export filters EndNote and Harvard RTF.</li>
-
-	<li>Added automatic import format chooser for import
-	(same as wildcard import below).</li>
-
-	<li>Added wildcard (*) option for command-line import,
-	to try to automatically determine the correct
-	format.</li>
-
-	<li>Improved layout of Preferences dialog.</li>
-
-	<li>Improved several import filters.</li>
-
-	<li>Added authIniN/edtrIniN key formatters.</li>
-
-	<li>Marked entries now float to the top when no
-	searching or grouping reordering is active.</li>
-
-	<li>Fixed problem with opening file dialog on Win NT -
-	AWT dialog is now opened if Swing dialog fails.</li>
-      </ul>
-
-    <h3>Version 1.6 (November 27th, 2004)</h3>
-
-      <ul>
-	<li>Improved handling of entry selection in various
-	ways. E.g. selected entry is now scrolled into view
-	when opening entry editor and entry is kept selected
-	when importing CiteSeer fields.</li>
-
-	<li>Fixed update bug between autogenerated bibtex key
-	and source panel.</li>
-
-	<li>Fixed missing . at the end of last author name in
-	RIS import.</li>
-
-	<li>Fixed NullPointerException on certain special
-	characters when exporting to BibTeXML.</li>
-
-	<li>Fixed bug that sometimes prevented the unmarking of
-	entries.</li>
-
-	<li>Fixed problem with formatting one-name
-	authors.</li>
-
-	<li>Various other bugfixes.</li>
-      </ul>
-
-    <h3>Version 1.6 beta (November 8th, 2004)</h3>
-
-      In an effort to produce better and more stable releases,
-      we have decided to release a beta versions prior to
-      future versions. We start out with today's beta release
-      of version 1.6. Users can now choose whether to download
-      and use the beta version for earlier access to new
-      features, or whether to wait for the final, better-tested
-      version. The final 1.6 version is expected to be released
-      in a few weeks from today.
-
-      <ul>
-	<li>Added mnemonic keys to menus and menu items.</li>
-
-	<li>Added MODS and tab-separated file export</li>
-
-	<li>Added facility for detecting and handling external
-	changes to open bib files.</li>
-
-	<li>Added scan option for exact duplicates with
-	automatic removal.</li>
-
-	<li>Bibtex strings are now sorted automatically.</li>
-
-	<li>Bibtex strings are now resolved when exporting
-	database.</li>
-
-	<li>Fixed problem with field content selector getting
-	too wide. Limited width.</li>
-
-	<li>Fixed PDF/PS view routine to remove problems with
-	filenames containing spaces.</li>
-
-	<li>Fixed bug that interfered with Fetch Medline by ID,
-	and fixed parsing problem with certain Medline
-	entries.</li>
-
-	<li>Fixed bug that interfered with Push to WinEdt.</li>
-
-	<li>Fixed HTML output so \c{c} is handled
-	correctly.</li>
-
-	<li>command line option for generating a sub-database
-	from LaTex aux file entries</li>
-
-	<li>simple copy/paste menu in entry editor</li>
-
-	<li>experimental: text-input-area with underlying
-	infotext in plaintext import dialog</li>
-      </ul>
-
-    <h3>Version 1.55 (October 12th, 2004)</h3>
-
-      <ul>
-	<li>Made method for opening PDF files robust with
-	regard to file separators (/ and \), so bib files can
-	easier be used across platforms.</li>
-
-	<li>Improved Medline fetcher. Can now fetch entries
-	based on a search expression.</li>
-
-	<li>Added features for fetching fields and referring
-	publications from the CiteSeer database.</li>
-
-	<li>Added option to always save database ordered by
-	author/editor/year, and made this the default
-	setting.</li>
-
-	<li>When a single entry is selected, right-click menu
-	now shows a checkbox menu for group memberships instead
-	of the regular "Add to" and "Remove from" menus.</li>
-
-	<li>Improved [shorttitle] and [veryshorttitle] special
-	key pattern fields.</li>
-
-	<li>Added dialog box for conveniently setting the
-	fields of an entry from a plain text description.</li>
-
-	<li>Added formatter "ResolvePDF" to create correct
-	PDF/PS links in HTML export when relative file names
-	are used.</li>
-
-	<li>Added Abstract panel in entry editor.</li>
-
-	<li>Added alternate preview with abstract, and made
-	both previews configurable.</li>
-
-	<li>Added the option to create a subset of a database
-	based on an .aux file.</li>
-
-	<li>Added 'Cancel' button to duplicate resolver dialog,
-	so the process can be stopped.</li>
-
-	<li>Added check for spaces in custom entry type
-	names.</li>
-
-	<li>Added several new key pattern markers.</li>
-
-	<li>Added toolbar buttons for Mark/Unmark to improve
-	discoverability.</li>
-
-	<li>Fixed bug that made export filters ignore the
-	chosen character encoding.</li>
-
-	<li>Fixed bug that interfered with author name
-	formatting.</li>
-
-	<li>Fixed various bugs in import filters.</li>
-
-	<li>Fixed bug that prevented confirmation dialog when
-	deleting entry from the entry editor.</li>
-
-	<li>Fixed bug that made the next entry be opened
-	instead of the current, when pressing Enter in
-	table.</li>
-
-	<li>Fixed bug that made it possible to leave a source
-	edit when the source didn't validate properly. Also
-	made it impossible to change table selection until
-	source validates.</li>
-      </ul>
-
-    <h3>Version 1.5 (August 3rd, 2004)</h3>
-
-      <ul>
-	<li>Added Highlight and select options to the group
-	interface, and made it possible to change the number of
-	visible lines in the list.</li>
-
-	<li>Added option to allow or disallow direct table
-	editing.</li>
-
-	<li>Added optional confirmation dialog for deleting
-	entries.</li>
-
-	<li>Added optional warning dialog for duplicate BibTeX
-	keys.</li>
-
-	<li>Added warnings to bibtex parser, and prevented
-	failure to load files with duplicate string
-	definitions.</li>
-
-	<li>Added JStor import filter.</li>
-
-	<li>Changed the look and feel to JGoodies Forms on
-	non-Macintosh platforms.</li>
-
-	<li>Optimized performance in several areas.</li>
-
-	<li>Numerous usability improvements.</li>
-
-	<li>Fixed RIS import bug caused by short lines.</li>
-
-	<li>Fixed bug in SciFinder import.</li>
-
-	<li>Fixed bug that made entire field get cleared when
-	removing from group.</li>
-      </ul>
-
-    <h3>Version 1.4 (June 6th, 2004)</h3>
-
-      Version 1.4 provides command line options for importing
-      and exporting files, advanced search, custom export
-      filters, and several bug fixes and minor changes.
-
-      <ul>
-	<li>Added advanced search feature.</li>
-
-	<li>Added facility for using custom export
-	formats.</li>
-
-	<li>Added command line options for importing/exporting
-	files, importing/exporting, user preferences, loading
-	session and for suppressing the GUI (using RitOpt for
-	parsing options).</li>
-
-	<li>Added automatic stripping of \url{} when opening
-	url.</li>
-
-	<li>Improved export filters.</li>
-
-	<li>Fixed focus bug which sometimes interfered with
-	cut/copy/paste.</li>
-      </ul>
-
-    <h3>Version 1.3.1 (May 9, 2004)</h3>
-
-      Release 1.3.1 resolves a couple of severe bugs in 1.3.
-      All users who have downloaded 1.3 should upgrade (the
-      bugs in 1.3 impaired functionality but did not pose a
-      security risk).
-
-    <h3>Version 1.3.* (May 9, 2004)</h3>
-
-      This release adds entry preview, detection of duplicate
-      entries, persistent entry marking, new import and export
-      filters, better linking to PDF/PS/URL/DOI, and better Mac
-      OS X compatibility. There are several other changes and
-      improvements, and many bugfixes.
-
-    <h3>Version 1.2 (March 21, 2004)</h3>
-
-      The icon set has been replaced. Notable new features are
-      French language support, key generator customization,
-      string replace, and BibTeXML import. Several bugs have
-      been fixed.
-
-    <h3>Version 1.19 (Feb 19,2004)</h3>
-
-      <ul>
-	<li>Entry editor is now opened for an entry that causes
-	an error when saving.</li>
-
-	<li>Added options to display names in harmonised format
-	in the main table.</li>
-
-	<li>Added Docbook and (experimental) HTML export.</li>
-
-	<li>Enabled 'doi' and 'pii' fields for Medline
-	import.</li>
-
-	<li>Enabled antialiasing fonts.</li>
-
-	<li>Added the Kunststoff look&feel to give a more
-	pleasant user interface.</li>
-
-	<li>Added font selector for the main table.</li>
-
-	<li>Improved table column customization.</li>
-
-	<li>Added word selector feature for selected fields
-	(keywords, journal).</li>
-
-	<li>Added support for German and Norwegian
-	language.</li>
-
-	<li>Generalized copy cite key features for multiple
-	entries.</li>
-
-	<li>Added quick load/save session feature.</li>
-
-	<li>Fixed issue/number bug in ISI import.</li>
-
-	<li>Added "Open pdf/ps" item in right-click menu.</li>
-
-	<li>Fixed bug causing external viewer to only work in
-	General fields.</li>
-
-	<li>Added functionality for using Browse buttons for
-	file-related fields (ps, pdf, etc.).</li>
-
-	<li>Added Browse buttons to External programs tab in
-	Preferences.</li>
-
-	<li>Fixed bug related to Save database and Source field
-	which caused changes to disappear.</li>
-      </ul>
-
-    <h3>Version 1.1 (Jan 02, 2004)</h3>
-
-      <ul>
-	<li>Added bibtex key uniqueness checking, and prevented
-	autogeneration from generating non-unique keys.</li>
-
-	<li>Added command line option to load file on
-	startup.</li>
-
-	<li>Fixed problem with autogeneration creating invalid
-	keys.</li>
-
-	<li>Improved Refer/Endnote import.</li>
-
-	<li>Added feature for importing entries and/or strings
-	and/or group definitions from another BibTeX
-	database.</li>
-
-	<li>Added menu choices to import into open
-	database.</li>
-
-	<li>Added toolbar button for closing current
-	database.</li>
-
-	<li>Fixed shortcut key for "Store field" in entry
-	editor, and fixed problem that made shortcut for "Save
-	database" unavailable from entry editor.</li>
-
-	<li>Added option to fetch Medline entries automatically
-	by ID, based on a patch submitted by Mike Smoot.</li>
-
-	<li>Fixed bug in RIS import.</li>
-
-	<li>Added options to copy key and copy "\cite{key}" to
-	right-click menu.</li>
-
-	<li>Fixed bug that caused some General fields not to
-	get displayed.</li>
-
-	<li>Enabled customization of General fields.</li>
-
-	<li>Enabled customization of existing entry types, and
-	definition of new types.</li>
-      </ul>
-
-    <h3>Version 1.0 (Nov 29, 2003)</h3>
-
-      First release of JabRef
-
-  </body>
-
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+  <h1>Historique des révisions (en anglais)</h1>
+
+  <p>Please refer to <a href=http://jabref.sourceforge.net/revisionhistory.php">http://jabref.sourceforge.net/revisionhistory.php</a> for a complete history in English.</p>
+
+</body>
+
+</html>
diff --git a/src/help/fr/SearchHelp.html b/src/help/fr/SearchHelp.html
index 473bb93..d6affc9 100644
--- a/src/help/fr/SearchHelp.html
+++ b/src/help/fr/SearchHelp.html
@@ -1,121 +1,121 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Recherche</h1>
-
-     <h2>Raccourcis clavier</h2>
-    
-    <p><em>CTRL-F</em> ouvre ou active l'interface de recherche.
-    Appuyer sur <em>CTRL-F</em> plusieurs fois modifie le mode de
-    recherche. En recherche incrémentale, <em>CTRL-F</em>
-    affiche l'occurrence suivante de la chaîne à
-    rechercher.</p>
-
-    <p><em>CTRL-MAJ-F</em> ouvre ou active l'interface de
-    recherche, et sélectionne la recherche
-    incrémentale. En recherche incrémentale, appuyer
-    sur <em>CTRL-MAJ-F</em> affiche aussi l'occurrence suivante de
-    la chaîne à rechercher.</p>
-
-    <h2>Modes de recherche</h2>
-    
-    <p>Il y a trois modes de
-    recherche dans JabRef.</p>
-
-    <h3>Recherche incrémentale</h3>
-
-    <p>En recherche
-    incrémentale, le programme effectue une recherche chaque
-    fois qu'une lettre est tapée. La ligne de statut vous
-    informe du résultat de cette recherche. Entrer le
-    raccourci clavier de la recherche affiche l'occurrence suivante
-    de la chaîne à rechercher. Si aucune autre
-    occurrence ne peut être trouvée, la ligne de
-    statut vous en informe. Répéter alors la
-    recherche fera redémarrer la recherche au début.
-    L'ordre de recherche se fait toujours selon l'ordre de tri
-    actuel de votre base de données. Pour quitter la
-    recherche incrémentale, appuyez sur ESC ou cliquez sur
-    "Vider".</p>
-
-    <h3>Recherche normale</h3>
-
-    <p>Dans une recherche normale, le
-    programme recherche dans votre base les occurrences de votre
-    chaîne de recherche, après que vous ayez
-    appuyé sur Entrée. Toutes les entrées qui
-    ne correspondent pas sont masquées, ne laissant alors
-    apparaître que les entrées correspondant aux
-    critères (mode filtre), ou sont grisées (mode
-    flottante). Pour ne plus afficher les résultats de la
-    recherche, appuyer sur ESC ou cliquer sur "Vider".</p>
-
-    <h3><a name="advanced" id="advanced"></a>
-            Recherche avancée</h3>
-
-    <p>Afin de rechercher
-    uniquement des champs spécifiques et/ou d'inclure des
-    opérateurs logiques dans l'expression à
-    rechercher, une syntaxe particulière est disponible.
-    Par exemple, pour rechercher les entrées dont
-    l'auteur est "Miller", entrez (excepté en mode de
-    recherche incrémentale) :</p>
-
-    <p>author = miller</p>
-
-    <p>A la fois la spécification du champ et le terme
-    à rechercher peuvent être des expressions
-    régulières. Si un terme à rechercher
-    contient des espaces, le mettre entre guillemets. Il ne faut
-    <i>jamais</i> utiliser d'espace dans la spécification du
-    champ ! Par exemple, pour rechercher les entrées
-    à propos de traitement d'images, entrez :</p>
-
-    <p>title|keywords = "traitement d'images"</p>
-
-    <p>Vous pouvez utiliser "and", "or", "not", et les
-    parenthèses de la façon habituelle :</p>
-
-    <p>(author = miller or title|keywords = "traitement d'images")
-    and not author = brown</p>
-
-    <p>En fait, le signe "=" signifie "contient". La recherche
-    d'une correspondance exacte est possible en utilisant "matches"
-    ou "==". Utilisez "!=" pour tester si le terme à
-    rechercher n'est <i>pas</i> contenu dans le champ (un
-    équivalent de "not ... contains ..."). Si vous
-    spécifiez un type de champ dans l'expression à
-    rechercher, la sélection des types de champs (requis,
-    optionnels, généraux) apparaissant dans les
-    paramètres de recherche n'est pas prise en compte. Pour
-    chercher des entrées d'un certain type, un pseudo-champ
-    nommé "entrytype" est disponible :</p>
-
-    <p>entrytype = thesis</p>
-
-    <p>recherchera les entrées dont le type (tel
-    qu'affiché dans la colonne "Entrytype") contient le mot
-    "thesis" (et qui sera donc "phdthesis" ou "mastersthesis"). Le
-    pseudo-champ "bibtexkey" permet de rechercher dans les clefs de
-    citation, tel que :</p>
-
-    <p>bibtexkey = miller2005</p>
-
-    <h2>Paramètres de recherche</h2>
-
-    <p>Le bouton
-    <em>Paramètres</em> ouvre un menu qui permet de basculer
-    en mode "sensible à la casse", d'utiliser des
-    expressions régulières lors de la recherche, et
-    de définir si les résultats de la recherche
-    doivent être sélectionnés dans la table
-    et si les mots recherchés doivent être surlignés lors de
-    l'édition et de la prévisualisation.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Recherche</h1>
+
+     <h2>Raccourcis clavier</h2>
+    
+    <p><em>CTRL-F</em> ouvre ou active l'interface de recherche.
+    Appuyer sur <em>CTRL-F</em> plusieurs fois modifie le mode de
+    recherche. En recherche incrémentale, <em>CTRL-F</em>
+    affiche l'occurrence suivante de la chaîne à
+    rechercher.</p>
+
+    <p><em>CTRL-MAJ-F</em> ouvre ou active l'interface de
+    recherche, et sélectionne la recherche
+    incrémentale. En recherche incrémentale, appuyer
+    sur <em>CTRL-MAJ-F</em> affiche aussi l'occurrence suivante de
+    la chaîne à rechercher.</p>
+
+    <h2>Modes de recherche</h2>
+    
+    <p>Il y a trois modes de
+    recherche dans JabRef.</p>
+
+    <h3>Recherche incrémentale</h3>
+
+    <p>En recherche
+    incrémentale, le programme effectue une recherche chaque
+    fois qu'une lettre est tapée. La ligne de statut vous
+    informe du résultat de cette recherche. Entrer le
+    raccourci clavier de la recherche affiche l'occurrence suivante
+    de la chaîne à rechercher. Si aucune autre
+    occurrence ne peut être trouvée, la ligne de
+    statut vous en informe. Répéter alors la
+    recherche fera redémarrer la recherche au début.
+    L'ordre de recherche se fait toujours selon l'ordre de tri
+    actuel de votre base de données. Pour quitter la
+    recherche incrémentale, appuyez sur ESC ou cliquez sur
+    "Vider".</p>
+
+    <h3>Recherche normale</h3>
+
+    <p>Dans une recherche normale, le
+    programme recherche dans votre base les occurrences de votre
+    chaîne de recherche, après que vous ayez
+    appuyé sur Entrée. Toutes les entrées qui
+    ne correspondent pas sont masquées, ne laissant alors
+    apparaître que les entrées correspondant aux
+    critères (mode filtre), ou sont grisées (mode
+    flottante). Pour ne plus afficher les résultats de la
+    recherche, appuyer sur ESC ou cliquer sur "Vider".</p>
+
+    <h3><a name="advanced" id="advanced"></a>
+            Recherche avancée</h3>
+
+    <p>Afin de rechercher
+    uniquement des champs spécifiques et/ou d'inclure des
+    opérateurs logiques dans l'expression à
+    rechercher, une syntaxe particulière est disponible.
+    Par exemple, pour rechercher les entrées dont
+    l'auteur est "Miller", entrez (excepté en mode de
+    recherche incrémentale) :</p>
+
+    <p>author = miller</p>
+
+    <p>A la fois la spécification du champ et le terme
+    à rechercher peuvent être des expressions
+    régulières. Si un terme à rechercher
+    contient des espaces, le mettre entre guillemets. Il ne faut
+    <i>jamais</i> utiliser d'espace dans la spécification du
+    champ ! Par exemple, pour rechercher les entrées
+    à propos de traitement d'images, entrez :</p>
+
+    <p>title|keywords = "traitement d'images"</p>
+
+    <p>Vous pouvez utiliser "and", "or", "not", et les
+    parenthèses de la façon habituelle :</p>
+
+    <p>(author = miller or title|keywords = "traitement d'images")
+    and not author = brown</p>
+
+    <p>En fait, le signe "=" signifie "contient". La recherche
+    d'une correspondance exacte est possible en utilisant "matches"
+    ou "==". Utilisez "!=" pour tester si le terme à
+    rechercher n'est <i>pas</i> contenu dans le champ (un
+    équivalent de "not ... contains ..."). Si vous
+    spécifiez un type de champ dans l'expression à
+    rechercher, la sélection des types de champs (requis,
+    optionnels, généraux) apparaissant dans les
+    paramètres de recherche n'est pas prise en compte. Pour
+    chercher des entrées d'un certain type, un pseudo-champ
+    nommé "entrytype" est disponible :</p>
+
+    <p>entrytype = thesis</p>
+
+    <p>recherchera les entrées dont le type (tel
+    qu'affiché dans la colonne "Entrytype") contient le mot
+    "thesis" (et qui sera donc "phdthesis" ou "mastersthesis"). Le
+    pseudo-champ "bibtexkey" permet de rechercher dans les clefs de
+    citation, tel que :</p>
+
+    <p>bibtexkey = miller2005</p>
+
+    <h2>Paramètres de recherche</h2>
+
+    <p>Le bouton
+    <em>Paramètres</em> ouvre un menu qui permet de basculer
+    en mode "sensible à la casse", d'utiliser des
+    expressions régulières lors de la recherche, et
+    de définir si les résultats de la recherche
+    doivent être sélectionnés dans la table
+    et si les mots recherchés doivent être surlignés lors de
+    l'édition et de la prévisualisation.</p>
+
+</body>
+</html>
diff --git a/src/help/fr/ShortIntegrityCheck.html b/src/help/fr/ShortIntegrityCheck.html
index 7ec9c77..98caa54 100644
--- a/src/help/fr/ShortIntegrityCheck.html
+++ b/src/help/fr/ShortIntegrityCheck.html
@@ -1,12 +1,12 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <p>La vérification d'intégrité est un processus qui recherche des indices de champs BibTeX mal remplis."Démarrer" est le bouton pour lancer la vérification.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <p>La vérification d'intégrité est un processus qui recherche des indices de champs BibTeX mal remplis."Démarrer" est le bouton pour lancer la vérification.</p>
+
+</body>
+</html>
diff --git a/src/help/fr/SpecialFieldsHelp.html b/src/help/fr/SpecialFieldsHelp.html
index 6103ada..06b8195 100644
--- a/src/help/fr/SpecialFieldsHelp.html
+++ b/src/help/fr/SpecialFieldsHelp.html
@@ -1,54 +1,54 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-<h1>Champs spéciaux</h1>
-    
-<p>Les champs spéciaux permettent ces fonctionnalités : </p>
-<ul>
-<li>évaluer les publications lues</li>
-<li>marquer les publications selon leur pertinence pour le travail</li>
-<li>marquer des entrées BibTeX comme de qualité vérifiée</li>
-<li>donner une priorité aux publications non lues.</li>
-</ul>
-<p>
-La principale différence avec une entrée marquée est que l'entrée évaluée n'est pas flottante par défaut
-et que seul le numéro de colonne est surligné. Ainsi, une entrée peut être à la fois marquée et évaluée.
-</p>
-<p>
-Chaque champ spécial peut être activé ou désactivé dans les paramètres.
-</p>
-
-<h2>Types de champs</h2>
-
-<h3>Evaluation</h3>
-<p>Le but est d'ajouter une fonctionnalité permettant d'attribuer une gamme d'évaluations “positives”. 
-    JabRef offre une gamme de valeurs allant de une à cinq étoiles pour l'évaluation des publications.</p>
-
-<h3>Pertinence</h3>
-<p>Une entrée peut être marquée comme pertinente.</p>
-
-<h3>Qualité vérifiée</h3>
-<p>Une entrée peut être marquée comme vérifiée. L'intention est de marquer les entrées BibTeX
-    pour lesquelles une vérification poussée du contenu de chaque champ a été effectuée.</p>
-
-<h3>Priorité</h3>
-<p>On peut affecter une priorité aux entrées allant de prio3 (faible) to prio1 (forte).
-    L'intention principale est de donner des priorités aux publications non lues.</p>
-
-<h2>Enregistrement dans l'entrée BibTeX</h2>
-<p>En interne, chaque champ spécial est enregistré dans un champ BibTeX séparé. 
-Si “Ecrire les valeurs des champs spéciaux dans des champs BibTeX séparés” est actif,
-ces champs sont aussi écrits lorsque la base est sauvée.
-JabRef permet aussi de synchroniser des champs avec mot-clefs. Ceci est activé par l'option
-“Synchroniser avec les_mots-clefs”. Si cette option est active, alors chaque changement
-dans un champ spécial affectera le champ mot-clef. Réciproquement, chaque changement dans un mot-clef
-entraînera un changement dans le champ spécial. De plus, lors de l'ouverture d'une base ou le
-collage d'une entrée, les mots-clefs sont utilisés comme valeurs des champs spéciaux.</p>
-
-</body>
-</html>
-
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+<h1>Champs spéciaux</h1>
+    
+<p>Les champs spéciaux permettent ces fonctionnalités : </p>
+<ul>
+<li>évaluer les publications lues</li>
+<li>marquer les publications selon leur pertinence pour le travail</li>
+<li>marquer des entrées BibTeX comme de qualité vérifiée</li>
+<li>donner une priorité aux publications non lues.</li>
+</ul>
+<p>
+La principale différence avec une entrée marquée est que l'entrée évaluée n'est pas flottante par défaut
+et que seul le numéro de colonne est surligné. Ainsi, une entrée peut être à la fois marquée et évaluée.
+</p>
+<p>
+Chaque champ spécial peut être activé ou désactivé dans les paramètres.
+</p>
+
+<h2>Types de champs</h2>
+
+<h3>Evaluation</h3>
+<p>Le but est d'ajouter une fonctionnalité permettant d'attribuer une gamme d'évaluations “positives”. 
+    JabRef offre une gamme de valeurs allant de une à cinq étoiles pour l'évaluation des publications.</p>
+
+<h3>Pertinence</h3>
+<p>Une entrée peut être marquée comme pertinente.</p>
+
+<h3>Qualité vérifiée</h3>
+<p>Une entrée peut être marquée comme vérifiée. L'intention est de marquer les entrées BibTeX
+    pour lesquelles une vérification poussée du contenu de chaque champ a été effectuée.</p>
+
+<h3>Priorité</h3>
+<p>On peut affecter une priorité aux entrées allant de prio3 (faible) to prio1 (forte).
+    L'intention principale est de donner des priorités aux publications non lues.</p>
+
+<h2>Enregistrement dans l'entrée BibTeX</h2>
+<p>En interne, chaque champ spécial est enregistré dans un champ BibTeX séparé. 
+Si “Ecrire les valeurs des champs spéciaux dans des champs BibTeX séparés” est actif,
+ces champs sont aussi écrits lorsque la base est sauvée.
+JabRef permet aussi de synchroniser des champs avec mot-clefs. Ceci est activé par l'option
+“Synchroniser avec les_mots-clefs”. Si cette option est active, alors chaque changement
+dans un champ spécial affectera le champ mot-clef. Réciproquement, chaque changement dans un mot-clef
+entraînera un changement dans le champ spécial. De plus, lors de l'ouverture d'une base ou le
+collage d'une entrée, les mots-clefs sont utilisés comme valeurs des champs spéciaux.</p>
+
+</body>
+</html>
+
diff --git a/src/help/fr/StringEditorHelp.html b/src/help/fr/StringEditorHelp.html
index 93303d0..56ba928 100644
--- a/src/help/fr/StringEditorHelp.html
+++ b/src/help/fr/StringEditorHelp.html
@@ -1,67 +1,67 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>L'éditeur de chaîne</h1>
-
-    <p><em>On l'ouvre
-    à partir de la fenêtre principale par le menu<b>
-    BibTeX -> Editer les chaînes</b> ou en appuyant sur un des
-    icônes de la barre d'outils. Le raccourci clavier est
-    CTRL-T.</em></p>
-
-    <p>Les <em>chaînes</em> sont l'équivalent
-    <em>BibTeX</em> des constantes dans un langage de
-    programmation. Chaque chaîne est définie par un
-    <em>nom</em> unique et un <em>contenu</em>. Dans votre base de
-    données, ce nom peut être utilisé pour
-    représenter ce contenu.</p>
-
-    <p>Par exemple, si beaucoup d'entrées appartiennent
-    à un journal dont l'abréviation est difficile
-    à mémoriser, tel que 'J. Theor. Biol.' (Journal
-    of Theroretical Biology), une chaîne nommée JTB
-    peut être définie pour représenter le nom
-    de ce journal. Au lieu de taper le nom exact du journal dans
-    chaque entrée, les caractères '#JTB#' sont
-    entrés (sans les guillemets) dans le champ
-    <em>journal</em> de chaque entrée, assurant ainsi que le
-    nom du journal est écrit de la même façon
-    à chaque fois.</p>
-
-    <p>Une telle chaîne peut apparaître n'importe
-    où dans un champ en incluant le nom de la chaîne
-    entre une paire de caractères '#'. Cette syntaxe est
-    spécifique à JabRef et diffère
-    légèrement de la notation <em>BibTeX</em> qui est
-    produite quand vous sauvez votre base de données. Les
-    chaînes peuvent par défaut être
-    utilisées pour tous les champs BibTeX standard, et dans
-    <b>Options -> Préférences ->
-    Général-> Fichier</b>, vous pouvez choisir
-    d'autoriser les chaînes pour des champs non-standards.
-    Dans ce dernier cas, vous pouvez spécifier une
-    série de champs où les chaînes ne doivent
-    pas être recherchées ; il est
-    recommandé d'y inclure le champ 'url' ainsi que les
-    autres champs qui pourraient contenir des caractères '#'
-    que BibTeX/LaTeX est susceptible de traiter.</p>
-
-    <p>Une chaîne peut être incluse dans le contenu
-    d'une autre chaîne (chaîne incluante), à la
-    condition que la chaîne incluse soit définie
-    <em>avant</em> la chaîne incluante.</p>
-
-    <p>Alors que l'ordre des chaînes dans votre fichier
-    BibTeX est important dans certains cas, vous n'avez pas
-    à vous en préoccuper quand vous utilisez JabRef.
-    Dans l'éditeur de chaînes, les chaînes
-    seront affichées selon l'ordre alphabétique et
-    stockée dans le même ordre, excepté quand
-    BibTeX aura besoin d'un ordre différent.</p>
-</body>
-</html> 
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>L'éditeur de chaîne</h1>
+
+    <p><em>On l'ouvre
+    à partir de la fenêtre principale par le menu<b>
+    BibTeX -> Editer les chaînes</b> ou en appuyant sur un des
+    icônes de la barre d'outils. Le raccourci clavier est
+    CTRL-T.</em></p>
+
+    <p>Les <em>chaînes</em> sont l'équivalent
+    <em>BibTeX</em> des constantes dans un langage de
+    programmation. Chaque chaîne est définie par un
+    <em>nom</em> unique et un <em>contenu</em>. Dans votre base de
+    données, ce nom peut être utilisé pour
+    représenter ce contenu.</p>
+
+    <p>Par exemple, si beaucoup d'entrées appartiennent
+    à un journal dont l'abréviation est difficile
+    à mémoriser, tel que 'J. Theor. Biol.' (Journal
+    of Theroretical Biology), une chaîne nommée JTB
+    peut être définie pour représenter le nom
+    de ce journal. Au lieu de taper le nom exact du journal dans
+    chaque entrée, les caractères '#JTB#' sont
+    entrés (sans les guillemets) dans le champ
+    <em>journal</em> de chaque entrée, assurant ainsi que le
+    nom du journal est écrit de la même façon
+    à chaque fois.</p>
+
+    <p>Une telle chaîne peut apparaître n'importe
+    où dans un champ en incluant le nom de la chaîne
+    entre une paire de caractères '#'. Cette syntaxe est
+    spécifique à JabRef et diffère
+    légèrement de la notation <em>BibTeX</em> qui est
+    produite quand vous sauvez votre base de données. Les
+    chaînes peuvent par défaut être
+    utilisées pour tous les champs BibTeX standard, et dans
+    <b>Options -> Préférences ->
+    Général-> Fichier</b>, vous pouvez choisir
+    d'autoriser les chaînes pour des champs non-standards.
+    Dans ce dernier cas, vous pouvez spécifier une
+    série de champs où les chaînes ne doivent
+    pas être recherchées ; il est
+    recommandé d'y inclure le champ 'url' ainsi que les
+    autres champs qui pourraient contenir des caractères '#'
+    que BibTeX/LaTeX est susceptible de traiter.</p>
+
+    <p>Une chaîne peut être incluse dans le contenu
+    d'une autre chaîne (chaîne incluante), à la
+    condition que la chaîne incluse soit définie
+    <em>avant</em> la chaîne incluante.</p>
+
+    <p>Alors que l'ordre des chaînes dans votre fichier
+    BibTeX est important dans certains cas, vous n'avez pas
+    à vous en préoccuper quand vous utilisez JabRef.
+    Dans l'éditeur de chaînes, les chaînes
+    seront affichées selon l'ordre alphabétique et
+    stockée dans le même ordre, excepté quand
+    BibTeX aura besoin d'un ordre différent.</p>
+</body>
+</html> 
diff --git a/src/help/fr/TimeStampHelp.html b/src/help/fr/TimeStampHelp.html
index 5da5888..0c5d7ce 100644
--- a/src/help/fr/TimeStampHelp.html
+++ b/src/help/fr/TimeStampHelp.html
@@ -1,56 +1,56 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Horodatage des entrées</h1>
-
-    <p>Cette fonction peut
-    être activée et configurée sous <b>Options
-    -> Préférences ->
-    Général</b>.</p>
-
-    <p>JabRef peut automatiquement insérer un champ qui
-    contient la date à laquelle une entrée a
-    été ajoutée à la base de
-    données.</p>
-
-    <h2>Mise en forme</h2>
-
-    <p>Le format d'horodatage est
-    déterminé par une chaîne contenant des
-    codes qui indiquent la position des différentes parties
-    de la date.</p>
-
-    <p>Voici certains des codes disponibles (exemples donnés
-    entre parenthèses pour le mercredi 14 septembre 2005
-    à 17h45) :</p>
-
-    <ul>
-        <li><b>yy</b>: année (05)</li>
-
-        <li><b>yyyy</b>: année (2005)</li>
-
-        <li><b>MM</b>: mois (09)</li>
-
-        <li><b>dd</b>: jour du mois (14)</li>
-
-        <li><b>HH</b>: heure du jour (17)</li>
-
-        <li><b>mm</b>: minute de l'heure (45)</li>
-    </ul>Ces codes peuvent être combinés avec des
-    ponctuations et des espaces. Quelques exemples :
-
-    <ul>
-        <li><b>yyyy.MM.dd</b> donne <b>2005.09.14</b></li>
-
-        <li><b>yy.MM.dd</b> donne <b>05.09.14</b></li>
-
-        <li><b>yyyy.MM.dd HH:mm</b> donne <b>2005.09.14
-        17:45</b></li>
-    </ul>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Horodatage des entrées</h1>
+
+    <p>Cette fonction peut
+    être activée et configurée sous <b>Options
+    -> Préférences ->
+    Général</b>.</p>
+
+    <p>JabRef peut automatiquement insérer un champ qui
+    contient la date à laquelle une entrée a
+    été ajoutée à la base de
+    données.</p>
+
+    <h2>Mise en forme</h2>
+
+    <p>Le format d'horodatage est
+    déterminé par une chaîne contenant des
+    codes qui indiquent la position des différentes parties
+    de la date.</p>
+
+    <p>Voici certains des codes disponibles (exemples donnés
+    entre parenthèses pour le mercredi 14 septembre 2005
+    à 17h45) :</p>
+
+    <ul>
+        <li><b>yy</b>: année (05)</li>
+
+        <li><b>yyyy</b>: année (2005)</li>
+
+        <li><b>MM</b>: mois (09)</li>
+
+        <li><b>dd</b>: jour du mois (14)</li>
+
+        <li><b>HH</b>: heure du jour (17)</li>
+
+        <li><b>mm</b>: minute de l'heure (45)</li>
+    </ul>Ces codes peuvent être combinés avec des
+    ponctuations et des espaces. Quelques exemples :
+
+    <ul>
+        <li><b>yyyy.MM.dd</b> donne <b>2005.09.14</b></li>
+
+        <li><b>yy.MM.dd</b> donne <b>05.09.14</b></li>
+
+        <li><b>yyyy.MM.dd HH:mm</b> donne <b>2005.09.14
+        17:45</b></li>
+    </ul>
+</body>
+</html>
diff --git a/src/help/fr/XMPHelp.html b/src/help/fr/XMPHelp.html
index ba52866..f9bb223 100644
--- a/src/help/fr/XMPHelp.html
+++ b/src/help/fr/XMPHelp.html
@@ -1,186 +1,186 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-
-    <h1>Support des metadonnées XMP dans
-    JabRef</h1>
-
-    <p>NdT : Menus à vérifier !!!</p>
-
-    <p>XMP est un standard créé par Adobe Systems
-    pour stocker des métadonnées (des données
-    sur les données) dans des fichiers. A exemple bien connu
-    de métadonnées sont les balises MP3 qui peuvent
-    être utilisées pour décrire l'artiste,
-    l'album et le nom de la chanson dans un fichier MP3. Ajouter
-    des métadonnées à des fichiers MP3 aide
-    les autres utilisateurs à identifier correctement les
-    chansons indépendamment du nom du fichier et permet aux
-    logiciels (lecteurs MP3 par exemple) de trier et de grouper les
-    chansons.</p>
-
-    <p>Avec le support de XMP, l'équipe de
-    développement de JabRef introduit les avantages des
-    métadonnées au monde des gestionnaires de
-    références. Vous avez maintenant la
-    possibilité d'"écrire des
-    métadonnées XMP" dans l'onglet General de Jabref,
-    ce qui mettra toutes les informations BibTex dans un fichier
-    PDF. En transférant ce fichier à un
-    collègue, il aura simplement à faire glisser le
-    fichier dans JabRef pour que toutes les informations que vous y
-    avez entrées lui soient disponibles.</p>
-
-    <h2>Utilisation</h2>
-
-    <p>Pour utiliser la fonction XMP dans JabRef,
-    vous pouvez faire les choses suivantes :</p>
-
-    <ul>
-        <li><b>Importer un unique fichier PDF annoté</b>
-        contenant les métadonnées XMP. Vous pouvez
-        sélectionner "Fichier -> Importer dans... ->
-        PDF avec annotations XMP" ou faire glisser le fichier dans
-        la fenêtre principale.</li>
-
-        <li><b>Ecrire les informations bibliographiques dans le
-        fichier PDF associé.</b> Pour cela, double-cliquez
-        sur l'entrée dans la fenêtre principale, allez
-        dans l'onglet "General" et cliquer sur "Ecrire XMP".</li>
-
-        <li>Si vous voulez <b>annoter tous les PDFs dans une base
-        de données déterminée</b> vous pouvez
-        sélectionner "Outils -> Ecrire XMP pour la base
-        de données"</li>
-
-        <li>Pour vérifier si cela a fonctionné, vous
-        pouvez ouvrir le PDF dans Adobe Acrobat et
-        sélectionner "Fichier -> Propriétés
-        du Document -> Métadonnées additionnelles
-        -> Avancé". Dans l'arborescence sur la droite
-        vous devriez voir une entrée nommée
-        "http://purl.org/net/bibteXMP". Cela fonctionne uniquement
-        avec Adobe Acrobat, et pas avec Adobe Reader.</li>
-
-        <li>Si vous n'avez pas Adobe Acrobat, vous pouvez utiliser
-        <i>pdfinfo</i> à la place afin de voir les
-        métadonnées XMP. <i>pdfinfo</i> fait partie
-        de Xpdf (<code>www.foolabs.com/xpdf</code>) et Poppler
-        (<code>http://poppler.freedesktop.org</code>).</li>
-    </ul>
-
-    <h2>Format de fichier BibteXmp</h2>
-
-    <p>XMP utilise un sous-ensemble du Schéma de Description
-    des Ressources (Resource Description Framework - RDF) pour
-    stocker les données. Pour JabRef, un nouveau format de
-    métadonnées est utilisé ; il
-    ressemble beaucoup au format BibTeX. Fondamentalement, tous les
-    champs et valeurs sont transformés en noeuds dans un
-    document XML. Seuls les auteurs et les éditeurs sont
-    stockés comme des rdf:Seq-structures, aussi les
-    utilisateurs des données peuvent éviter la
-    séparation basées sur des 'and'. Toutes les
-    chaînes et les références croisées
-    seront présentes dans les données.</p>
-
-    <p>Le schéma suivant, facile et minimal, est
-    utilisé :</p>
-
-    <ul>
-        <li>La clef BibTeX est stockée comme une
-        <code>bibtexkey</code>.</li>
-
-        <li>Le type d'entrée BibTeX est stocké comme
-        une <code>entrytype</code>.</li>
-
-        <li>les champs <code>author</code> et <code>editor</code>
-        sont encodés comme des <code>rdf:Seq</code>s
-        où les auteurs individuels sont
-        représentés par des
-        <code>rdf:li</code>s.</li>
-
-        <li>Tous les autres champs sont sauvés en utilisant
-        directement le nom de leur champ.</li>
-    </ul><br />
-    <br />
-
-
-    <p>Ci-dessous, un exemple de mise en correspondance</p>
-    <pre>
- at INPROCEEDINGS{CroAnnHow05,
-  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
-  title = {Effective work practices for floss development: A model and propositions},
-  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
-  year = {2005},
-  owner = {oezbek},
-  timestamp = {2006.05.29},
-  url = {http://james.howison.name/publications.html}
-}
-</pre>sera transformé en
-    <pre>
-<rdf:Description xmlns:bibtex="http://jabref.sourceforge.net/bibteXMP/"
-    bibtex:bibtexkey="CroAnnHow05"
-    bibtex:year="2005"
-    bibtex:title="Effective work practices for floss development: A model and propositions"
-    bibtex:owner="oezbek"
-    bibtex:url="http://james.howison.name/publications.html"
-    bibtex:booktitle="Hawaii International Conference On System Sciences (HICSS)"
-    bibtex:timestamp="2006.05.29">
-        <bibtex:author>
-            <rdf:Seq>
-                <rdf:li>K. Crowston</rdf:li>
-                <rdf:li>H. Annabi</rdf:li>
-                <rdf:li>J. Howison</rdf:li>
-                <rdf:li>C. Masango</rdf:li>
-            </rdf:Seq>
-        </bibtex:author>
-    <bibtex:entrytype>Inproceedings</bibtex:entrytype>
-</rdf:Description>
-</pre>
-
-    <p>Faites attention aux pièges suivants si vous essayez
-    de traiter les métadonnées bibtexXMP :</p>
-
-    <ul>
-        <li>Selon RDF, les couples attribut-valeur peuvent aussi
-        être exprimés comme des noeuds, et
-        vice-versa.</li>
-    </ul><br />
-    <br />
-
-
-    <h2>Liens :</h2>
-
-    <p>Quelques liens (en anglais) à propos de XMP et de
-    l'annotation des PDFs :</p>
-
-    <ul>
-        <li><a href="http://freelancepropaganda.com/themp/">James
-        Howison's blog "Themp---Managing Academic Papers like
-        MP3s"</a></li>
-
-        <li>
-        <a href="http://www.xml.com/pub/a/2004/09/22/xmp.html">XML.com
-        article about XMP</a></li>
-
-		<li><a href="http://pdfbox.apache.org/">PDFBox</a> by
-		the Apache Software Foundation is the Jaba library used to
-		access the PDFs and the metadata stream.</li>
-
-        <li>
-        <a href="http://arstechnica.com/civis/viewtopic.php?f=19&t=408429">
-        Good thread on ArsTechnica discussing the management of
-        PDFs.</a></li>
-
-        <li>
-        <a href="http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart1.pdf">
-        Adobe XMP Specification</a></li>
-    </ul><br />
-    <br />
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+
+    <h1>Support des metadonnées XMP dans
+    JabRef</h1>
+
+    <p>NdT : Menus à vérifier !!!</p>
+
+    <p>XMP est un standard créé par Adobe Systems
+    pour stocker des métadonnées (des données
+    sur les données) dans des fichiers. A exemple bien connu
+    de métadonnées sont les balises MP3 qui peuvent
+    être utilisées pour décrire l'artiste,
+    l'album et le nom de la chanson dans un fichier MP3. Ajouter
+    des métadonnées à des fichiers MP3 aide
+    les autres utilisateurs à identifier correctement les
+    chansons indépendamment du nom du fichier et permet aux
+    logiciels (lecteurs MP3 par exemple) de trier et de grouper les
+    chansons.</p>
+
+    <p>Avec le support de XMP, l'équipe de
+    développement de JabRef introduit les avantages des
+    métadonnées au monde des gestionnaires de
+    références. Vous avez maintenant la
+    possibilité d'"écrire des
+    métadonnées XMP" dans l'onglet General de Jabref,
+    ce qui mettra toutes les informations BibTex dans un fichier
+    PDF. En transférant ce fichier à un
+    collègue, il aura simplement à faire glisser le
+    fichier dans JabRef pour que toutes les informations que vous y
+    avez entrées lui soient disponibles.</p>
+
+    <h2>Utilisation</h2>
+
+    <p>Pour utiliser la fonction XMP dans JabRef,
+    vous pouvez faire les choses suivantes :</p>
+
+    <ul>
+        <li><b>Importer un unique fichier PDF annoté</b>
+        contenant les métadonnées XMP. Vous pouvez
+        sélectionner "Fichier -> Importer dans... ->
+        PDF avec annotations XMP" ou faire glisser le fichier dans
+        la fenêtre principale.</li>
+
+        <li><b>Ecrire les informations bibliographiques dans le
+        fichier PDF associé.</b> Pour cela, double-cliquez
+        sur l'entrée dans la fenêtre principale, allez
+        dans l'onglet "General" et cliquer sur "Ecrire XMP".</li>
+
+        <li>Si vous voulez <b>annoter tous les PDFs dans une base
+        de données déterminée</b> vous pouvez
+        sélectionner "Outils -> Ecrire XMP pour la base
+        de données"</li>
+
+        <li>Pour vérifier si cela a fonctionné, vous
+        pouvez ouvrir le PDF dans Adobe Acrobat et
+        sélectionner "Fichier -> Propriétés
+        du Document -> Métadonnées additionnelles
+        -> Avancé". Dans l'arborescence sur la droite
+        vous devriez voir une entrée nommée
+        "http://purl.org/net/bibteXMP". Cela fonctionne uniquement
+        avec Adobe Acrobat, et pas avec Adobe Reader.</li>
+
+        <li>Si vous n'avez pas Adobe Acrobat, vous pouvez utiliser
+        <i>pdfinfo</i> à la place afin de voir les
+        métadonnées XMP. <i>pdfinfo</i> fait partie
+        de Xpdf (<code>www.foolabs.com/xpdf</code>) et Poppler
+        (<code>http://poppler.freedesktop.org</code>).</li>
+    </ul>
+
+    <h2>Format de fichier BibteXmp</h2>
+
+    <p>XMP utilise un sous-ensemble du Schéma de Description
+    des Ressources (Resource Description Framework - RDF) pour
+    stocker les données. Pour JabRef, un nouveau format de
+    métadonnées est utilisé ; il
+    ressemble beaucoup au format BibTeX. Fondamentalement, tous les
+    champs et valeurs sont transformés en noeuds dans un
+    document XML. Seuls les auteurs et les éditeurs sont
+    stockés comme des rdf:Seq-structures, aussi les
+    utilisateurs des données peuvent éviter la
+    séparation basées sur des 'and'. Toutes les
+    chaînes et les références croisées
+    seront présentes dans les données.</p>
+
+    <p>Le schéma suivant, facile et minimal, est
+    utilisé :</p>
+
+    <ul>
+        <li>La clef BibTeX est stockée comme une
+        <code>bibtexkey</code>.</li>
+
+        <li>Le type d'entrée BibTeX est stocké comme
+        une <code>entrytype</code>.</li>
+
+        <li>les champs <code>author</code> et <code>editor</code>
+        sont encodés comme des <code>rdf:Seq</code>s
+        où les auteurs individuels sont
+        représentés par des
+        <code>rdf:li</code>s.</li>
+
+        <li>Tous les autres champs sont sauvés en utilisant
+        directement le nom de leur champ.</li>
+    </ul><br />
+    <br />
+
+
+    <p>Ci-dessous, un exemple de mise en correspondance</p>
+    <pre>
+ at INPROCEEDINGS{CroAnnHow05,
+  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
+  title = {Effective work practices for floss development: A model and propositions},
+  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
+  year = {2005},
+  owner = {oezbek},
+  timestamp = {2006.05.29},
+  url = {http://james.howison.name/publications.html}
+}
+</pre>sera transformé en
+    <pre>
+<rdf:Description xmlns:bibtex="http://jabref.sourceforge.net/bibteXMP/"
+    bibtex:bibtexkey="CroAnnHow05"
+    bibtex:year="2005"
+    bibtex:title="Effective work practices for floss development: A model and propositions"
+    bibtex:owner="oezbek"
+    bibtex:url="http://james.howison.name/publications.html"
+    bibtex:booktitle="Hawaii International Conference On System Sciences (HICSS)"
+    bibtex:timestamp="2006.05.29">
+        <bibtex:author>
+            <rdf:Seq>
+                <rdf:li>K. Crowston</rdf:li>
+                <rdf:li>H. Annabi</rdf:li>
+                <rdf:li>J. Howison</rdf:li>
+                <rdf:li>C. Masango</rdf:li>
+            </rdf:Seq>
+        </bibtex:author>
+    <bibtex:entrytype>Inproceedings</bibtex:entrytype>
+</rdf:Description>
+</pre>
+
+    <p>Faites attention aux pièges suivants si vous essayez
+    de traiter les métadonnées bibtexXMP :</p>
+
+    <ul>
+        <li>Selon RDF, les couples attribut-valeur peuvent aussi
+        être exprimés comme des noeuds, et
+        vice-versa.</li>
+    </ul><br />
+    <br />
+
+
+    <h2>Liens :</h2>
+
+    <p>Quelques liens (en anglais) à propos de XMP et de
+    l'annotation des PDFs :</p>
+
+    <ul>
+        <li><a href="http://freelancepropaganda.com/themp/">James
+        Howison's blog "Themp---Managing Academic Papers like
+        MP3s"</a></li>
+
+        <li>
+        <a href="http://www.xml.com/pub/a/2004/09/22/xmp.html">XML.com
+        article about XMP</a></li>
+
+		<li><a href="http://pdfbox.apache.org/">PDFBox</a> by
+		the Apache Software Foundation is the Jaba library used to
+		access the PDFs and the metadata stream.</li>
+
+        <li>
+        <a href="http://arstechnica.com/civis/viewtopic.php?f=19&t=408429">
+        Good thread on ArsTechnica discussing the management of
+        PDFs.</a></li>
+
+        <li>
+        <a href="http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart1.pdf">
+        Adobe XMP Specification</a></li>
+    </ul><br />
+    <br />
+</body>
+</html>
diff --git a/src/help/in/ACMPortalHelp.html b/src/help/in/ACMPortalHelp.html
index d3c9df1..dc89fa5 100644
--- a/src/help/in/ACMPortalHelp.html
+++ b/src/help/in/ACMPortalHelp.html
@@ -1,38 +1,38 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Pencarian melalui Portal ACM</h1>
-
-    <p>Portal ACM Portal mempunyai dua basisdata: Pustaka ACM Dijital yang mempunyai koleksi
-    teks lengkap dari setiap publikasi artikel oleh ACM termasuk arsip yang berumur 50 tahun,
-    serta Panduan untuk Computing Literature yang merupakan koleksi bibliografi dari penerbit yang
-    terkenal dalam bidang komputer yang totalnya ada lebih dari satu juta entri.</p>
-
-    <p>JabRef dapat melakukan muaturun acuan dari postal basisdata ACM.
-    Untuk menggunakan fitur ini, pilih <b>Pencarian Web -> Pencarian
-    Portal ACM</b>, kemudian dialog pencarian akan muncul di sebelah kiri
-    jendela.</p>
-
-    <p>Untuk memulai pencarian, tulislah kata yang ingin anda cari, kemudian tekan
-    <b>Enter</b> atau tekan tombol<b>Mencari</b>.</p>
-
-    <p>Anda bisa memilih basisdata yang digunakan serta ada pilihan termasuk abstrak untuk setiap
-    entri, dengan memilih kotak pilihan <b>Termasuk abstrak</b>.</p>
-
-    <p>Untuk mengurangi beban yang terlalu berat
-    pada Portal ACM, JabRef akan menolak mengambil
-    entri lebih dari jumlah tertentu.
-    </p>
-
-    <p>Perlu anda ketahui, koneksi yang terlalu sering ke Portal ACM
-    akan menyebabkan IP anda ditolak selama beberapa jam. Oleh karena itu JabRef
-    akan menunggu 5 detik antara tiap koneksi sehingga proses muaturun akan sedikit lambat
-    </p>
-
-   <p>Silahkan hubungi Aaron Chen <b>nextAaron at gmail.com</b> apabila ada saran.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Pencarian melalui Portal ACM</h1>
+
+    <p>Portal ACM Portal mempunyai dua basisdata: Pustaka ACM Dijital yang mempunyai koleksi
+    teks lengkap dari setiap publikasi artikel oleh ACM termasuk arsip yang berumur 50 tahun,
+    serta Panduan untuk Computing Literature yang merupakan koleksi bibliografi dari penerbit yang
+    terkenal dalam bidang komputer yang totalnya ada lebih dari satu juta entri.</p>
+
+    <p>JabRef dapat melakukan muaturun acuan dari postal basisdata ACM.
+    Untuk menggunakan fitur ini, pilih <b>Pencarian Web -> Pencarian
+    Portal ACM</b>, kemudian dialog pencarian akan muncul di sebelah kiri
+    jendela.</p>
+
+    <p>Untuk memulai pencarian, tulislah kata yang ingin anda cari, kemudian tekan
+    <b>Enter</b> atau tekan tombol<b>Mencari</b>.</p>
+
+    <p>Anda bisa memilih basisdata yang digunakan serta ada pilihan termasuk abstrak untuk setiap
+    entri, dengan memilih kotak pilihan <b>Termasuk abstrak</b>.</p>
+
+    <p>Untuk mengurangi beban yang terlalu berat
+    pada Portal ACM, JabRef akan menolak mengambil
+    entri lebih dari jumlah tertentu.
+    </p>
+
+    <p>Perlu anda ketahui, koneksi yang terlalu sering ke Portal ACM
+    akan menyebabkan IP anda ditolak selama beberapa jam. Oleh karena itu JabRef
+    akan menunggu 5 detik antara tiap koneksi sehingga proses muaturun akan sedikit lambat
+    </p>
+
+   <p>Silahkan hubungi Aaron Chen <b>nextAaron at gmail.com</b> apabila ada saran.</p>
+</body>
+</html>
diff --git a/src/help/in/About.html b/src/help/in/About.html
old mode 100755
new mode 100644
index abc91bc..b732e4e
--- a/src/help/in/About.html
+++ b/src/help/in/About.html
@@ -1,136 +1,136 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body id="aboutpage">
-        <h1>JabRef versi @version@</h1>
-
-        <div id="logo">
-        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
-        </div>
-
-        <p>JabRef dapat disebarkan tanpa bayar mengikut syarat dari
-        GNU <a href="License.html">General Public License</a>,
-        versi 2.</p>
-
-        <h2>Pengembang utama:</h2>
-
-        <p>Morten O. Alver,
-        Nizar N. Batada,
-        Michel Baylac,
-        Kolja Brix,
-        Guillaume Gardey,
-        Oscar Gustafsson,
-        Cyrille d'Haese,
-        Oliver Kopp,
-        S M Mahbub Murshed,
-        Raik Nagel,
-        Christopher Oezbek,
-        Ellen Reitmayr,
-        Gert Renckens,
-        Andreas Rudert,
-        Michael Spiegel,
-        Ulrik Stervbo,
-        Joerg K. Wegner,
-        Michael Wrighton,
-        Egon Willighagen,
-        Jörg Zieren</p>
-
-        <h2>Pendukung lain:</h2>
-
-        <p>Thomas Arildsen,
-        Michael Beckmann,
-        Oliver Beckmann,
-        Fedor Bezrukov,
-        Fabian Bieker,
-        Aaron Chen,
-        Fabrice Dessaint,
-        Nathan Dunn,
-        E. Hakan Duran,
-        Brian Van Essen,
-        Alexis Gallagher,
-        David Gleich,
-        Sascha Hunold,
-        Bernd Kalbfuss,
-        Martin Kähmer,
-        Ervin Kolenovic,
-        Krzysztof A. Kościuszkiewicz,
-        Christian Kopf,
-        Felix Langner,
-        Stephan Lau,
-        Jeffrey Kuhn,
-        Uwe Kuehn,
-        Alex Montgomery,
-        Saverio Mori,
-        Ambrogio Oliva,
-        Stephan Rave,
-        John Relph,
-        Hannes Restel,
-        Moritz Ringler,
-        Andreas Rudert,
-        Mark Schenk,
-        Rudolf Seemann,
-        Toralf Senger,
-        Manuel Siebeneicher,
-        Mike Smoot,
-        Ulrich Stärk,
-        Martin Stolle,
-        David Weitzman,
-        Seb Wills,
-        John Zedlewski,
-        Waluyo Adi Siswanto</p>
-
-        <h2>Terima kasih kepada:</h2>
-
-        <p>Samin Muhammad Ridwanul Karim,
-        Stefan Robert</p>
-
-        <h2>Program tambahan yang digunakan:</h2>
-
-        <p>JabRef menggunakan JGoodies
-        Looks dan JGoodies Forms, yang disebarkan oleh
-        JGoodies (<code>http://www.jgoodies.com</code>) mengikuti syarat dari Lisensi (Lihat
-        <code>http://www.opensource.org/licenses/bsd-license.html</code>
-        untuk perincian lanjut).</p>
-
-        <p>Juga melibatkan dua tambahan kelas
-        (SimpleInternalFrame dan UIFSplitPane) oleh Karsten Lentzsch,
-        yang disebarkan mengikuti <a href="jgoodies.html">syarat
-        ini</a>.</p>
-
-        <p>Perintah baris tambahan dijalankan menggunakan RitOpt
-        (<code>http://ritopt.sourceforge.net</code>). RitOpt disebarkan
-        mengikuti syarat dari GNU
-        <a href="License.html">General Public License</a>, versi
-        2.</p>
-
-        <p>JabRef menggunakan ANTLR parser generator untuk mengenali
-        string pencarian. ANTLR adalah perangkat lunak umum - lihat
-        <code>http://www.antlr.org/license.html</code> untuk
-        syarat lisensi.</p>
-
-        <p>Untuk tampilan tabel dan penapis, JabRef menggunakan
-        Glazed Lists library
-        (<code>http://publicobject.com/glazedlists</code>), yang
-        disebarkan mengikut Lisensi Lesser General Public.</p>
-
-        <p>JabRef juga menggunakan threading library Spin, yang
-        disebarkan mengikut syarat Lisensi Lesser General Public
-        .</p>
-
-        <p>Beberapa komponen GUI digunakan dari Microba library,
-        mengikut lisensi BSD style. Lihat
-        <code>http://sourceforge.net/projects/microba/</code> untuk
-        informasi lanjut.</p>
-
-        <p>Hampir semua ikon berasal dari Crystal Clear
-        dibuat oleh Everaldo (<code>http://www.everaldo.com</code>),
-        yang disebarkan mengikut syarat Lisensi Lesser General
-        Public.</p>
-
-        <p>JabRef menggunakan  pustaka JempBox dan PDFBox untuk pengaturan
-        PDF, keduanya disebarkan mengikut syarat lisensi BSD.
-        </p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body id="aboutpage">
+        <h1>JabRef versi @version@</h1>
+
+        <div id="logo">
+        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
+        </div>
+
+        <p>JabRef dapat disebarkan tanpa bayar mengikut syarat dari
+        GNU <a href="License.html">General Public License</a>,
+        versi 2.</p>
+
+        <h2>Pengembang utama:</h2>
+
+        <p>Morten O. Alver,
+        Nizar N. Batada,
+        Michel Baylac,
+        Kolja Brix,
+        Guillaume Gardey,
+        Oscar Gustafsson,
+        Cyrille d'Haese,
+        Oliver Kopp,
+        S M Mahbub Murshed,
+        Raik Nagel,
+        Christopher Oezbek,
+        Ellen Reitmayr,
+        Gert Renckens,
+        Andreas Rudert,
+        Michael Spiegel,
+        Ulrik Stervbo,
+        Joerg K. Wegner,
+        Michael Wrighton,
+        Egon Willighagen,
+        Jörg Zieren</p>
+
+        <h2>Pendukung lain:</h2>
+
+        <p>Thomas Arildsen,
+        Michael Beckmann,
+        Oliver Beckmann,
+        Fedor Bezrukov,
+        Fabian Bieker,
+        Aaron Chen,
+        Fabrice Dessaint,
+        Nathan Dunn,
+        E. Hakan Duran,
+        Brian Van Essen,
+        Alexis Gallagher,
+        David Gleich,
+        Sascha Hunold,
+        Bernd Kalbfuss,
+        Martin Kähmer,
+        Ervin Kolenovic,
+        Krzysztof A. Kościuszkiewicz,
+        Christian Kopf,
+        Felix Langner,
+        Stephan Lau,
+        Jeffrey Kuhn,
+        Uwe Kuehn,
+        Alex Montgomery,
+        Saverio Mori,
+        Ambrogio Oliva,
+        Stephan Rave,
+        John Relph,
+        Hannes Restel,
+        Moritz Ringler,
+        Andreas Rudert,
+        Mark Schenk,
+        Rudolf Seemann,
+        Toralf Senger,
+        Manuel Siebeneicher,
+        Mike Smoot,
+        Ulrich Stärk,
+        Martin Stolle,
+        David Weitzman,
+        Seb Wills,
+        John Zedlewski,
+        Waluyo Adi Siswanto</p>
+
+        <h2>Terima kasih kepada:</h2>
+
+        <p>Samin Muhammad Ridwanul Karim,
+        Stefan Robert</p>
+
+        <h2>Program tambahan yang digunakan:</h2>
+
+        <p>JabRef menggunakan JGoodies
+        Looks dan JGoodies Forms, yang disebarkan oleh
+        JGoodies (<code>http://www.jgoodies.com</code>) mengikuti syarat dari Lisensi (Lihat
+        <code>http://www.opensource.org/licenses/bsd-license.html</code>
+        untuk perincian lanjut).</p>
+
+        <p>Juga melibatkan dua tambahan kelas
+        (SimpleInternalFrame dan UIFSplitPane) oleh Karsten Lentzsch,
+        yang disebarkan mengikuti <a href="jgoodies.html">syarat
+        ini</a>.</p>
+
+        <p>Perintah baris tambahan dijalankan menggunakan RitOpt
+        (<code>http://ritopt.sourceforge.net</code>). RitOpt disebarkan
+        mengikuti syarat dari GNU
+        <a href="License.html">General Public License</a>, versi
+        2.</p>
+
+        <p>JabRef menggunakan ANTLR parser generator untuk mengenali
+        string pencarian. ANTLR adalah perangkat lunak umum - lihat
+        <code>http://www.antlr.org/license.html</code> untuk
+        syarat lisensi.</p>
+
+        <p>Untuk tampilan tabel dan penapis, JabRef menggunakan
+        Glazed Lists library
+        (<code>http://publicobject.com/glazedlists</code>), yang
+        disebarkan mengikut Lisensi Lesser General Public.</p>
+
+        <p>JabRef juga menggunakan threading library Spin, yang
+        disebarkan mengikut syarat Lisensi Lesser General Public
+        .</p>
+
+        <p>Beberapa komponen GUI digunakan dari Microba library,
+        mengikut lisensi BSD style. Lihat
+        <code>http://sourceforge.net/projects/microba/</code> untuk
+        informasi lanjut.</p>
+
+        <p>Hampir semua ikon berasal dari Crystal Clear
+        dibuat oleh Everaldo (<code>http://www.everaldo.com</code>),
+        yang disebarkan mengikut syarat Lisensi Lesser General
+        Public.</p>
+
+        <p>JabRef menggunakan  pustaka JempBox dan PDFBox untuk pengaturan
+        PDF, keduanya disebarkan mengikut syarat lisensi BSD.
+        </p>
+</body>
+</html>
diff --git a/src/help/in/Autosave.html b/src/help/in/Autosave.html
index 1ead9ef..5d4e9b2 100644
--- a/src/help/in/Autosave.html
+++ b/src/help/in/Autosave.html
@@ -1,28 +1,28 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Menyimpan otomatis</h1>
-
-    <p>Fitur otomatis sangat membantu anda agar tidak kehilangan data jika tiba-tiba komputer
-    mati. Ketika menyimpan otomatis diaktifkan, JabRef akan menyimpan secara teratur (interval
-    waktu penyimpanan dapat diatur) dengan terlebih dahulu melihat apakah basisdata ada
-    perubahan sejak penyimpanan terakhir. Jika ditemukan adanya perubahan, JabRef akan
-    menyimpan salinan basisdata dengan nama  <code>.$[berkas]$</code>, dimana 
-    <code>[berkas]</code> adalah nama berkas basisdata yang diperiksa. Berkas hasil 
-    penyimpanan otomatis berada pada lokasi yang sama dengan berkas bib.</p>
-
-    <p>Berkas penyimpanan otomatis akan dihapus ketika anda menyimpan sendiri basisdata anda,
-    kemudian anda keluar JabRef secara normal. Namun demikian, jika JabRef ditutup karena
-    komputer mati sendiri, maka berkas simpanan otomatis tetap ada. Pada kasus ini, berkas
-    darurat ini akan dideteksi ketika anda membuka basisdata, sehingga anda akan diberikan
-    pilihan untuk memanggil kembali berkas hasil penyimpanan otomatis.</p>
-
-    <p>Penyimpanan otomatis merupakan fitur bawaan, dengan interval setiap 5 menit.
-    Jika anda menginginkan, anda dapat mematikan dialog yang muncul menanyakan untuk
-    melakukan penyimpanan otomatis. Pada kasus ini, JabRef akan memanggil berkas hasil
-    simpanan otomatis secara diam-diam tanpa menanyakan pemberitahuan pada anda.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Menyimpan otomatis</h1>
+
+    <p>Fitur otomatis sangat membantu anda agar tidak kehilangan data jika tiba-tiba komputer
+    mati. Ketika menyimpan otomatis diaktifkan, JabRef akan menyimpan secara teratur (interval
+    waktu penyimpanan dapat diatur) dengan terlebih dahulu melihat apakah basisdata ada
+    perubahan sejak penyimpanan terakhir. Jika ditemukan adanya perubahan, JabRef akan
+    menyimpan salinan basisdata dengan nama  <code>.$[berkas]$</code>, dimana 
+    <code>[berkas]</code> adalah nama berkas basisdata yang diperiksa. Berkas hasil 
+    penyimpanan otomatis berada pada lokasi yang sama dengan berkas bib.</p>
+
+    <p>Berkas penyimpanan otomatis akan dihapus ketika anda menyimpan sendiri basisdata anda,
+    kemudian anda keluar JabRef secara normal. Namun demikian, jika JabRef ditutup karena
+    komputer mati sendiri, maka berkas simpanan otomatis tetap ada. Pada kasus ini, berkas
+    darurat ini akan dideteksi ketika anda membuka basisdata, sehingga anda akan diberikan
+    pilihan untuk memanggil kembali berkas hasil penyimpanan otomatis.</p>
+
+    <p>Penyimpanan otomatis merupakan fitur bawaan, dengan interval setiap 5 menit.
+    Jika anda menginginkan, anda dapat mematikan dialog yang muncul menanyakan untuk
+    melakukan penyimpanan otomatis. Pada kasus ini, JabRef akan memanggil berkas hasil
+    simpanan otomatis secara diam-diam tanpa menanyakan pemberitahuan pada anda.</p>
+</body>
+</html>
diff --git a/src/help/in/BaseFrameHelp.html b/src/help/in/BaseFrameHelp.html
old mode 100755
new mode 100644
index a76638c..45c6cc3
--- a/src/help/in/BaseFrameHelp.html
+++ b/src/help/in/BaseFrameHelp.html
@@ -1,112 +1,112 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Jendela utama JabRef</h1>
-
-    <p><em>Catatan:</em> sebagian besar perintah yang
-    dituliskan dibawah ini mempunyai pintasan menggunakan papan ketik,
-    beberapa perintah lain dari kotak bantuan. Pintasan dapat dilihat
-    dari ketika menggunakan menu utama.</p>
-
-    <p>Ini adalah jendela utama untuk bekerja pada basisdata
-    anda. Dibawah kotak menu dana kotak bantuan ada ruang yang mempuyai tab 
-    untuk menampilkan basis data yang anda buka.
-    Ketika anda memilih salah satu tab, tabel yang berisi semua entri
-    basisdata anda akan muncul, demikian pula isi masing-masing bidang
-    yang bisa anda ubah datanya.</p>
-
-    <ul>
-        <li>Untuk merubah bidang apa saja yang dimunculkan pada kolom tabel,
-        anda dapat mengaturnya dari dialog
-        <strong>Preferensi</strong>.</li>
-
-        <li>Untuk menyunting entri basisdata di salah satu baris, 		anda perlu klik-ganda di baris tersebut. Anda bisa melihat isi
-	basisdata di tiap baris atau navigasi dengan menggunakan tombol panah
-	naik/turun.</li>
-
-        <li>Kolom tabel diurutkan menurut urutan pada bidang yang anda pilih.
-	Cara pengurutan bawaan dapat dirubah dari
-        <strong>Preferensi -> Tabel entri</strong>, tetapi
-        cara yang lebih cepat untuk merubah urutan, klik pada judul kolom
-	yang anda pilih sebagai kriteria utama, atau membalik urutan jika
-	sudah ditentukan urutan. Jika di klik lagi, akan melepaskan sebagai
-	pilihan kriteria utama urutan. Tekan dan tahan tombol
-	<b>Ctrl</b> serta klik salah satu kolom untuk tambah kriteria,
-	membalik urutan atau menghapus sub-kriteria. Anda bisa menambah
-	beberapa sub-kriteria, tetapi hanya dibatasi sampai tiga
-	sub-kriteria yang disimpan ketika menjalankan ulang JabRef.</li>
-
-        <li>Untuk mengatur lebar kolom, anda dapat menyeret pada batas judul
-	kolom yang anda inginkan.</li>
-
-        <li>
-            Tanda warna dapat diubah sesuai keinginan melalui
-            dialog <strong>Preferensi</strong>, sehingga membantu mengenali
-            tampilan dan makna basisdata anda dengan melihat
-            warna sel sebagai berikut:
-
-            <ul>
-                <li>Warna <span style="color: red">merah</span> di sel
-                kolom paling kiri menunjukkan entri tidak lengkap.</li>
-
-                <li>Warna <span style="color: #909000">kuning</span> di sel
-                kolom palingkiri menunjukkan entri yang tidak didefinisikan
-		semua bidangnya, tetapi mengandung referensi-silang.</li>
-
-                <li>Warna sel <span style="color: blue">biru</span> menunjukkan
-                bidang utama yang diperlukan.</li>
-
-                <li>Warna sel <span style="color: green">hijau</span> menunjukkan
-                bidang sel tambahan.</li>
-
-                <li>Sel tanpa warna menunjukkan bidang yang tidak digunakan
-		program <em>bibtex</em> untuk tipe entri ini.
-                Bidang ini dapat masih disunting dalam JabRef.</li>
-            </ul>
-        </li>
-    </ul>
-
-    <h2>Menambah entri baru</h2>
-
-    <p>Ada beberapa cara untuk menambah entri baru.
-    Perintah menu <strong>BibTeX -> Entri baru</strong> menampilkan
-    dialog pilihan untuk memilih satu tipe entri dari yang ada. Jika anda
-    tidak menginginkan menampilkan dialog ini, tersedia beberapa menu tersendiri
-    untuk menggunakan tipe entri tertentu. Demikian juga ada pintasan
-    langsung ke tipe yang umum digunakan.</p>
-
-    <p>Ketika entri baru ditambahkan,
-    <a href="EntryEditorHelp.html">penyunting entri</a> akan
-    muncul. Bagaimana munculnya penyunting entri ini
-    dapat diatur dari menu <strong>Preferensi-> Penyunting Entri</strong>.</p>
-
-    <p><em>Catatan:</em> Kami menyarankan anda mempelajari pintasan
-    untuk menambah entri untuk berbagai tipe yang paling sering digunakan,
-    misalnya CTRL-SHIFT-A untuk menambah entri <em>artikel</em>.</p>
-
-    <h2>Menyunting entri</h2>
-
-    <p>Untuk membuka
-    <a href="EntryEditorHelp.html">penyunting entri</a> dari
-    entri yang sudah ada, klik-ganda di baris entri yang akan disunting,
-    maka <a href="EntryEditorHelp.html">Penyunting entri</a> akan dibuka
-    (atau pada baris entri tekan ENTER).</p>
-
-    <h2>Mengacu string <em>bibtex</em> dalam bidang</h2>
-
-    <p>Dalam JabRef cara menuliskan isi dalam bidang sama seperti
-    yang anda lakukan pada penyunting teks lainnya, hanya ada satu
-    perbedaan: untuk mengacu string, anda perlu menulis dalam karakter
-    #, misalnya:<br />
-      '#jan# 1997',<br />
-    yang akan diartikan sebagai string 'jan' diikuti oleh
-    ' 1997'.</p>
-
-    <p>Baca juga: <a href="StringEditorHelp.html">penyunting string</a>.
-    </p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Jendela utama JabRef</h1>
+
+    <p><em>Catatan:</em> sebagian besar perintah yang
+    dituliskan dibawah ini mempunyai pintasan menggunakan papan ketik,
+    beberapa perintah lain dari kotak bantuan. Pintasan dapat dilihat
+    dari ketika menggunakan menu utama.</p>
+
+    <p>Ini adalah jendela utama untuk bekerja pada basisdata
+    anda. Dibawah kotak menu dana kotak bantuan ada ruang yang mempuyai tab 
+    untuk menampilkan basis data yang anda buka.
+    Ketika anda memilih salah satu tab, tabel yang berisi semua entri
+    basisdata anda akan muncul, demikian pula isi masing-masing bidang
+    yang bisa anda ubah datanya.</p>
+
+    <ul>
+        <li>Untuk merubah bidang apa saja yang dimunculkan pada kolom tabel,
+        anda dapat mengaturnya dari dialog
+        <strong>Preferensi</strong>.</li>
+
+        <li>Untuk menyunting entri basisdata di salah satu baris, 		anda perlu klik-ganda di baris tersebut. Anda bisa melihat isi
+	basisdata di tiap baris atau navigasi dengan menggunakan tombol panah
+	naik/turun.</li>
+
+        <li>Kolom tabel diurutkan menurut urutan pada bidang yang anda pilih.
+	Cara pengurutan bawaan dapat dirubah dari
+        <strong>Preferensi -> Tabel entri</strong>, tetapi
+        cara yang lebih cepat untuk merubah urutan, klik pada judul kolom
+	yang anda pilih sebagai kriteria utama, atau membalik urutan jika
+	sudah ditentukan urutan. Jika di klik lagi, akan melepaskan sebagai
+	pilihan kriteria utama urutan. Tekan dan tahan tombol
+	<b>Ctrl</b> serta klik salah satu kolom untuk tambah kriteria,
+	membalik urutan atau menghapus sub-kriteria. Anda bisa menambah
+	beberapa sub-kriteria, tetapi hanya dibatasi sampai tiga
+	sub-kriteria yang disimpan ketika menjalankan ulang JabRef.</li>
+
+        <li>Untuk mengatur lebar kolom, anda dapat menyeret pada batas judul
+	kolom yang anda inginkan.</li>
+
+        <li>
+            Tanda warna dapat diubah sesuai keinginan melalui
+            dialog <strong>Preferensi</strong>, sehingga membantu mengenali
+            tampilan dan makna basisdata anda dengan melihat
+            warna sel sebagai berikut:
+
+            <ul>
+                <li>Warna <span style="color: red">merah</span> di sel
+                kolom paling kiri menunjukkan entri tidak lengkap.</li>
+
+                <li>Warna <span style="color: #909000">kuning</span> di sel
+                kolom palingkiri menunjukkan entri yang tidak didefinisikan
+		semua bidangnya, tetapi mengandung referensi-silang.</li>
+
+                <li>Warna sel <span style="color: blue">biru</span> menunjukkan
+                bidang utama yang diperlukan.</li>
+
+                <li>Warna sel <span style="color: green">hijau</span> menunjukkan
+                bidang sel tambahan.</li>
+
+                <li>Sel tanpa warna menunjukkan bidang yang tidak digunakan
+		program <em>bibtex</em> untuk tipe entri ini.
+                Bidang ini dapat masih disunting dalam JabRef.</li>
+            </ul>
+        </li>
+    </ul>
+
+    <h2>Menambah entri baru</h2>
+
+    <p>Ada beberapa cara untuk menambah entri baru.
+    Perintah menu <strong>BibTeX -> Entri baru</strong> menampilkan
+    dialog pilihan untuk memilih satu tipe entri dari yang ada. Jika anda
+    tidak menginginkan menampilkan dialog ini, tersedia beberapa menu tersendiri
+    untuk menggunakan tipe entri tertentu. Demikian juga ada pintasan
+    langsung ke tipe yang umum digunakan.</p>
+
+    <p>Ketika entri baru ditambahkan,
+    <a href="EntryEditorHelp.html">penyunting entri</a> akan
+    muncul. Bagaimana munculnya penyunting entri ini
+    dapat diatur dari menu <strong>Preferensi-> Penyunting Entri</strong>.</p>
+
+    <p><em>Catatan:</em> Kami menyarankan anda mempelajari pintasan
+    untuk menambah entri untuk berbagai tipe yang paling sering digunakan,
+    misalnya CTRL-SHIFT-A untuk menambah entri <em>artikel</em>.</p>
+
+    <h2>Menyunting entri</h2>
+
+    <p>Untuk membuka
+    <a href="EntryEditorHelp.html">penyunting entri</a> dari
+    entri yang sudah ada, klik-ganda di baris entri yang akan disunting,
+    maka <a href="EntryEditorHelp.html">Penyunting entri</a> akan dibuka
+    (atau pada baris entri tekan ENTER).</p>
+
+    <h2>Mengacu string <em>bibtex</em> dalam bidang</h2>
+
+    <p>Dalam JabRef cara menuliskan isi dalam bidang sama seperti
+    yang anda lakukan pada penyunting teks lainnya, hanya ada satu
+    perbedaan: untuk mengacu string, anda perlu menulis dalam karakter
+    #, misalnya:<br />
+      '#jan# 1997',<br />
+    yang akan diartikan sebagai string 'jan' diikuti oleh
+    ' 1997'.</p>
+
+    <p>Baca juga: <a href="StringEditorHelp.html">penyunting string</a>.
+    </p>
+</body>
+</html>
diff --git a/src/help/in/BibtexHelp.html b/src/help/in/BibtexHelp.html
old mode 100755
new mode 100644
index 6c817c6..a7e0261
--- a/src/help/in/BibtexHelp.html
+++ b/src/help/in/BibtexHelp.html
@@ -1,268 +1,268 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Tentang <em>bibtex</em></h1>
-
-    <p>JabRef membantu anda bekerja menggunakan basisdata
-    <em>bibtex</em>, namun ada beberapa aturan yang harus anda ikuti
-    ketika melakukan penyuntingan entri, untuk memastikan bahwa 
-    basidata anda dapat dibaca dengan benar oleh program <em>bibtex</em>.</p>
-
-    <h2>Bidang dalam <em>bibtex</em></h2>
-
-    <p>Ada banyak perbedaan di bidang-bidang 
-    dalam <em>bibtex</em>, dengan beberapa bidang tambahan
-    yang dapat anda atur di JabRef.</p>
-
-    <p>Secara umum, anda dapat menggunakan perintah LaTeX dalam bidang
-    yang berisi teks. <em>Bibtex</em> akan secara otomatis 
-    memformat daftar referensi anda, serta bidang-bidang
-    yang ada dalam daftar akan diatur huruf besar kecilnya sesuai
-    dengan gaya bibliografi yang anda gunakan. Untuk mempertahankan
-    karakter tetap dalam huruf besar, anda harus menggunakan tanda
-    kurung kurawal, seperti pada kata {B}elgia.</p>
-
-    <p>Catatan tentang beberapa tipe bidang:</p>
-
-    <ul>
-        <li><strong style="font-style: italic;">Bibtexkey<br /></strong>
-        String tertentu digunakan untuk mengacu entri di dokumen LaTeX.
-        membuat acuan di LaTeX, kunci yang digunakan harus sesuai dengan
-        string kunci bibtex. Huruf besar dan kecil akan dibedakan.<br />
-        </li>
-
-        <li><strong>address<br /></strong> Biasanya merupakan
-        alamat dari <tt>penerbit</tt> atau dari tipe institusi. Untuk
-        berbagai tempat peenrbitan, van Leunen menyarankan
-        menghilangkan atau tidak menggunakan informasi ini. Sebagian
-        penerbit yang masih belum berkembang, anda dapat memberikan
-        informasi pada pembaca dengan menulis alamat lengkap.</li>
-
-        <li><strong>annote<br /></strong> Untuk membuat catatan.
-        Tidak digunakan dalam gaya bibliografi standar, tetapi bisa
-        digunakan bagi yang ingin menambahkan catatan bibliografi.</li>
-
-        <li><strong>author<br /></strong> Bidang ini harus
-        berisi semua penulis yang ada. Nama tiap penulis dipisahkan dengan kata
-        <em>and</em>, meskipun jumlah penulis lebih dari dua. Cara menulis
-        nama penulis ada dua format dengan maksud yang sama:<br />
-         Donald E. Knuth <em>atau</em> Knuth, Donald E.<br />
-         Eddie van Halen <em>atau</em> van Halen, Eddie<br />
-        Format yang kedua digunakan apabila penulis lebih dari dua,
-        untuk membedakan antara nama tengah dan nama belakang.<br />
-        </li>
-
-        <li><strong>booktitle<br /></strong> Judul dari buku, 
-        bagian dari buku akan diacu. Untuk entri buku, gunakan
-        bidang <tt>title (judul)</tt>.</li>
-
-        <li><strong>chapter<br /></strong> Untuk nomor bab (atau subbab atau
-        atau yang setara).</li>
-
-        <li><strong>crossref<br /></strong> Kunci basisdata
-        dari entri yang digunakan sebagai referensi silang.</li>
-
-        <li><strong>edition<br /></strong> Edisi terbitan dari
-        buku--misalnya, ``Kedua''. Harus berupa angka urutan,
-        dan huruf pertama harus huruf besar, seperti contoh tadi;
-        gaya standar akan mengubah ke huruf kecil apabila perlu.</li>
-
-        <li><strong>editor<br /></strong> Bidang ini setara
-        dengan bidang <em>author</em>. Apabila digunakan juga bidang
-        <tt>author</tt>, maka bidang <tt>editor</tt> akan menghasilkan
-        penyunting buku atau koleksi dimana referensi akan muncul.</li>
-
-        <li><strong>howpublished<br /></strong> Bagaimana suatu karya
-        diterbitkan. Huruf pertama dari kata pertama harus huruf besar.</li>
-
-        <li><strong>institution<br /></strong> Institusi yang
-        mendukung atau memberi sponsor karya yang diterbitkan.</li>
-
-        <li><strong>journal<br /></strong> Nama jurnal. Nama jurnal
-        seringkali disingkat menggunakan "string". Untuk menuliskan
-        string, gunakan <a href="StringEditorHelp.html">penyunting string
-        </a>.</li>
-
-        <li><strong>key<br /></strong> Digunakan untuk mengurutkan,
-        referensi silang, dan membuat label apabila informasi ``author''
-        tidak ada. Bidang ini jangan diartikan sama dengan kunci bibtex yang
-        dipanggil dengan perintah <code>\cite</code>
-        serta yang ada di bagian awal entri basisdata.</li>
-
-        <li><strong>month<br /></strong> Bulan karya dipublikasikan
-        atau, untuk karya yang tidak diterbitkan, menggunakan
-        bulan waktu ditulis. Anda harus menggunakan singkatan standar
-        tiga huruf (jan, feb, mar, apr, may, jun, jul, aug, sep,
-        oct, nov, dec).</li>
-
-        <li><strong>note<br /></strong> Informasi tambahan
-        yang dapat membantu pembaca. Kata pertama harus huruf besar.
-        </li>
-
-        <li><strong>number</strong><br />
-        Nomor jurnal, majalah, laporan penelitian, atau karya
-        dalam serial. Jurnal atau majalah biasanya dikenali dari
-        nomor volume dan nomor terbitannya; organisasi yang menerbitkan
-        biasanya memberikan nomor terbitan; beberapa buku serial juga
-        mempunyai nomor terbitan.</li>
-
-        <li><strong>organization<br /></strong> Organisasi yang
-        memberikan bantuan pada konferensi atau organisasi yang
-        menerbitkan manual.</li>
-
-        <li><strong>pages<br /></strong> Halaman atau halaman yang dinyatakan
-        dengan jangkah, misalnya <tt>42-111</tt> atau
-        <tt>7,41,73-97</tt> atau <tt>43+</tt> (tanda `<tt>+</tt>' di
-        contoh terakhir menandakan halaman setelahnya yang tidak ditulis
-        dengan jangkah). Untuk mempermudah mempertahankan kompatibilitas
-        basisdata <em>Scribe</em>, standar gaya akan merubah ke satu 
-        tanda coret (seperti <tt>7-33</tt>) dari dua tanda coret yang
-        digunakan TeX untuk nomor dalam jangkah (seperti
-        <tt>7--33</tt>).</li>
-
-        <li><strong>publisher<br /></strong> Nama
-        penerbit.</li>
-
-        <li><strong>school<br /></strong> Nama sekolah atau universitas
-        dimana tesis ditulis.</li>
-
-        <li><strong>series<br /></strong> Nama seri dari
-        terbitan buku. Ketika mengacu seluruh buku, bidang
-        <tt>title</tt> memberikan judul, sedangkan tambahan bidang
-        <tt>series</tt> memberikan  nama seri atau
-        nama volume buku yang diterbitkan.</li>
-
-        <li><strong>title<br /></strong> Judul karya. Huruf besar dan kecil
-        tergantung dari gaya bibliografi serta bahasa yang digunakan.
-        Jika huruf harus huruf besar, pastikan anda menggunakan
-        tanda kurung kurawal agar tidak berubah, misalnya {I)ndonesia atau
-        {Indonesia}.</li>
-
-        <li><strong>type<br /></strong> Tipe dari laporan
-        teknis--misalnya, ``Laporan Penelitian''.</li>
-
-        <li><strong>volume<br /></strong> Nomor volume jurnal
-        atau nomor volume dari buku.</li>
-
-        <li><strong>year<br /></strong> Tahun penerbitan,
-        untuk karya yang tidak diterbitkan, tahun ditulis. Secara umum,
-        harus terdiri dari angka bulat, seperti <tt>1984</tt>,
-        meskipun gaya bibliografi standar dapat mengenali <tt>year</tt>
-        dengan kombinasi teks asalkan empat terakhir berupa angka tahun,
-        misalnya `(sekitar 1984)'. Bidang ini diperlukan hampir
-        disemua tipe entri.</li>
-    </ul><br />
-
-
-    <h2>Bidang tambahan</h2>
-
-    <p>BibTeX sangat populer sehingga banyak orang
-    menggunakan untuk menyimpan informasi. Dibawah ini adalah daftar
-    bidang tambahan yang sering digunakan:</p>
-
-    <ul>
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        affiliation*</span><br /></strong> Afiliasi
-        penulis.<br />
-        </li>
-
-        <li><strong>abstract<br /></strong> Abstrak dari
-        tulisan.<br />
-        </li>
-
-        <li><strong>doi<br /></strong> Singkatan Digital Object
-        Identifier, merupakan identitas permanen yang diberikan 
-        pada dokumen.<br />
-        </li>
-
-        <li><strong>eid<br /></strong> Singkatan dari Electronic identifier
-        yang digunakan oleh jurnal elektronik serta cetakan. Kode angka
-        menggantikan nomor halaman, serta digunakan untuk mencari
-        artikel dalam volume yang dicetak. Seringkali juga disebut
-        <em>citation number (nomor acuan)</em>.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        contents*</span><br /></strong> Daftar Isi<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        copyright*</span><br /></strong> Informasi
-        Hakcipta.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        ISBN*</span><br /></strong> Singkatan dari International Standard Book
-        Number.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        ISSN*</span><br /></strong> Singkatan dari International Standard
-        Serial Number. Digunakan sebagai identifikasi jurnal.<br />
-        </li>
-
-        <li><strong>keywords (katakunci)<br /></strong> Katakunci
-        digunakan untuk mencari topik tertentu yang sesuai.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        language*</span><br /></strong> Bahasa yang digunakan dalam
-        dokumen.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        location*</span><br /></strong> Lokasi yang berhubungan dengan
-        entri, misalnya kota tempat berlangsungnya konferensi.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        LCCN*</span><br /></strong> Singkatan dari Library of Congress Call
-        Number. Seringkali muncul dengan singkatan nama <tt>lib-congress</tt>.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        mrnumber*</span><br /></strong> Nomor dari <i>Mathematical
-        Reviews</i>.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        price*</span><br /></strong> Harga dari sebuah
-        documen.<br />
-        </li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        size*</span><br /></strong> Ukuran dimensi fisik dari suatu
-        karya.<br />
-        </li>
-
-        <li><strong>URL<br /></strong> Singkatan dari Universal Resource
-        Locator yang menunjukkan acuan www berada. Hal ini sering
-        digunakan pada laporan teknis yang mengacu situs ftp dimana dokumen
-        postscript disimpan.</li>
-    </ul>
-
-    <h3>JuraBib</h3>
-
-    <ul>
-        <li><strong>urldate<br /></strong> Tanggal terakhir 
-        dikunjungi.</li>
-    </ul><br />
-     *) tidak secara langsung didukung oleh JabRef<br />
-     <br />
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Tentang <em>bibtex</em></h1>
+
+    <p>JabRef membantu anda bekerja menggunakan basisdata
+    <em>bibtex</em>, namun ada beberapa aturan yang harus anda ikuti
+    ketika melakukan penyuntingan entri, untuk memastikan bahwa 
+    basidata anda dapat dibaca dengan benar oleh program <em>bibtex</em>.</p>
+
+    <h2>Bidang dalam <em>bibtex</em></h2>
+
+    <p>Ada banyak perbedaan di bidang-bidang 
+    dalam <em>bibtex</em>, dengan beberapa bidang tambahan
+    yang dapat anda atur di JabRef.</p>
+
+    <p>Secara umum, anda dapat menggunakan perintah LaTeX dalam bidang
+    yang berisi teks. <em>Bibtex</em> akan secara otomatis 
+    memformat daftar referensi anda, serta bidang-bidang
+    yang ada dalam daftar akan diatur huruf besar kecilnya sesuai
+    dengan gaya bibliografi yang anda gunakan. Untuk mempertahankan
+    karakter tetap dalam huruf besar, anda harus menggunakan tanda
+    kurung kurawal, seperti pada kata {B}elgia.</p>
+
+    <p>Catatan tentang beberapa tipe bidang:</p>
+
+    <ul>
+        <li><strong style="font-style: italic;">Bibtexkey<br /></strong>
+        String tertentu digunakan untuk mengacu entri di dokumen LaTeX.
+        membuat acuan di LaTeX, kunci yang digunakan harus sesuai dengan
+        string kunci bibtex. Huruf besar dan kecil akan dibedakan.<br />
+        </li>
+
+        <li><strong>address<br /></strong> Biasanya merupakan
+        alamat dari <tt>penerbit</tt> atau dari tipe institusi. Untuk
+        berbagai tempat peenrbitan, van Leunen menyarankan
+        menghilangkan atau tidak menggunakan informasi ini. Sebagian
+        penerbit yang masih belum berkembang, anda dapat memberikan
+        informasi pada pembaca dengan menulis alamat lengkap.</li>
+
+        <li><strong>annote<br /></strong> Untuk membuat catatan.
+        Tidak digunakan dalam gaya bibliografi standar, tetapi bisa
+        digunakan bagi yang ingin menambahkan catatan bibliografi.</li>
+
+        <li><strong>author<br /></strong> Bidang ini harus
+        berisi semua penulis yang ada. Nama tiap penulis dipisahkan dengan kata
+        <em>and</em>, meskipun jumlah penulis lebih dari dua. Cara menulis
+        nama penulis ada dua format dengan maksud yang sama:<br />
+         Donald E. Knuth <em>atau</em> Knuth, Donald E.<br />
+         Eddie van Halen <em>atau</em> van Halen, Eddie<br />
+        Format yang kedua digunakan apabila penulis lebih dari dua,
+        untuk membedakan antara nama tengah dan nama belakang.<br />
+        </li>
+
+        <li><strong>booktitle<br /></strong> Judul dari buku, 
+        bagian dari buku akan diacu. Untuk entri buku, gunakan
+        bidang <tt>title (judul)</tt>.</li>
+
+        <li><strong>chapter<br /></strong> Untuk nomor bab (atau subbab atau
+        atau yang setara).</li>
+
+        <li><strong>crossref<br /></strong> Kunci basisdata
+        dari entri yang digunakan sebagai referensi silang.</li>
+
+        <li><strong>edition<br /></strong> Edisi terbitan dari
+        buku--misalnya, ``Kedua''. Harus berupa angka urutan,
+        dan huruf pertama harus huruf besar, seperti contoh tadi;
+        gaya standar akan mengubah ke huruf kecil apabila perlu.</li>
+
+        <li><strong>editor<br /></strong> Bidang ini setara
+        dengan bidang <em>author</em>. Apabila digunakan juga bidang
+        <tt>author</tt>, maka bidang <tt>editor</tt> akan menghasilkan
+        penyunting buku atau koleksi dimana referensi akan muncul.</li>
+
+        <li><strong>howpublished<br /></strong> Bagaimana suatu karya
+        diterbitkan. Huruf pertama dari kata pertama harus huruf besar.</li>
+
+        <li><strong>institution<br /></strong> Institusi yang
+        mendukung atau memberi sponsor karya yang diterbitkan.</li>
+
+        <li><strong>journal<br /></strong> Nama jurnal. Nama jurnal
+        seringkali disingkat menggunakan "string". Untuk menuliskan
+        string, gunakan <a href="StringEditorHelp.html">penyunting string
+        </a>.</li>
+
+        <li><strong>key<br /></strong> Digunakan untuk mengurutkan,
+        referensi silang, dan membuat label apabila informasi ``author''
+        tidak ada. Bidang ini jangan diartikan sama dengan kunci bibtex yang
+        dipanggil dengan perintah <code>\cite</code>
+        serta yang ada di bagian awal entri basisdata.</li>
+
+        <li><strong>month<br /></strong> Bulan karya dipublikasikan
+        atau, untuk karya yang tidak diterbitkan, menggunakan
+        bulan waktu ditulis. Anda harus menggunakan singkatan standar
+        tiga huruf (jan, feb, mar, apr, may, jun, jul, aug, sep,
+        oct, nov, dec).</li>
+
+        <li><strong>note<br /></strong> Informasi tambahan
+        yang dapat membantu pembaca. Kata pertama harus huruf besar.
+        </li>
+
+        <li><strong>number</strong><br />
+        Nomor jurnal, majalah, laporan penelitian, atau karya
+        dalam serial. Jurnal atau majalah biasanya dikenali dari
+        nomor volume dan nomor terbitannya; organisasi yang menerbitkan
+        biasanya memberikan nomor terbitan; beberapa buku serial juga
+        mempunyai nomor terbitan.</li>
+
+        <li><strong>organization<br /></strong> Organisasi yang
+        memberikan bantuan pada konferensi atau organisasi yang
+        menerbitkan manual.</li>
+
+        <li><strong>pages<br /></strong> Halaman atau halaman yang dinyatakan
+        dengan jangkah, misalnya <tt>42-111</tt> atau
+        <tt>7,41,73-97</tt> atau <tt>43+</tt> (tanda `<tt>+</tt>' di
+        contoh terakhir menandakan halaman setelahnya yang tidak ditulis
+        dengan jangkah). Untuk mempermudah mempertahankan kompatibilitas
+        basisdata <em>Scribe</em>, standar gaya akan merubah ke satu 
+        tanda coret (seperti <tt>7-33</tt>) dari dua tanda coret yang
+        digunakan TeX untuk nomor dalam jangkah (seperti
+        <tt>7--33</tt>).</li>
+
+        <li><strong>publisher<br /></strong> Nama
+        penerbit.</li>
+
+        <li><strong>school<br /></strong> Nama sekolah atau universitas
+        dimana tesis ditulis.</li>
+
+        <li><strong>series<br /></strong> Nama seri dari
+        terbitan buku. Ketika mengacu seluruh buku, bidang
+        <tt>title</tt> memberikan judul, sedangkan tambahan bidang
+        <tt>series</tt> memberikan  nama seri atau
+        nama volume buku yang diterbitkan.</li>
+
+        <li><strong>title<br /></strong> Judul karya. Huruf besar dan kecil
+        tergantung dari gaya bibliografi serta bahasa yang digunakan.
+        Jika huruf harus huruf besar, pastikan anda menggunakan
+        tanda kurung kurawal agar tidak berubah, misalnya {I)ndonesia atau
+        {Indonesia}.</li>
+
+        <li><strong>type<br /></strong> Tipe dari laporan
+        teknis--misalnya, ``Laporan Penelitian''.</li>
+
+        <li><strong>volume<br /></strong> Nomor volume jurnal
+        atau nomor volume dari buku.</li>
+
+        <li><strong>year<br /></strong> Tahun penerbitan,
+        untuk karya yang tidak diterbitkan, tahun ditulis. Secara umum,
+        harus terdiri dari angka bulat, seperti <tt>1984</tt>,
+        meskipun gaya bibliografi standar dapat mengenali <tt>year</tt>
+        dengan kombinasi teks asalkan empat terakhir berupa angka tahun,
+        misalnya `(sekitar 1984)'. Bidang ini diperlukan hampir
+        disemua tipe entri.</li>
+    </ul><br />
+
+
+    <h2>Bidang tambahan</h2>
+
+    <p>BibTeX sangat populer sehingga banyak orang
+    menggunakan untuk menyimpan informasi. Dibawah ini adalah daftar
+    bidang tambahan yang sering digunakan:</p>
+
+    <ul>
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        affiliation*</span><br /></strong> Afiliasi
+        penulis.<br />
+        </li>
+
+        <li><strong>abstract<br /></strong> Abstrak dari
+        tulisan.<br />
+        </li>
+
+        <li><strong>doi<br /></strong> Singkatan Digital Object
+        Identifier, merupakan identitas permanen yang diberikan 
+        pada dokumen.<br />
+        </li>
+
+        <li><strong>eid<br /></strong> Singkatan dari Electronic identifier
+        yang digunakan oleh jurnal elektronik serta cetakan. Kode angka
+        menggantikan nomor halaman, serta digunakan untuk mencari
+        artikel dalam volume yang dicetak. Seringkali juga disebut
+        <em>citation number (nomor acuan)</em>.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        contents*</span><br /></strong> Daftar Isi<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        copyright*</span><br /></strong> Informasi
+        Hakcipta.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        ISBN*</span><br /></strong> Singkatan dari International Standard Book
+        Number.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        ISSN*</span><br /></strong> Singkatan dari International Standard
+        Serial Number. Digunakan sebagai identifikasi jurnal.<br />
+        </li>
+
+        <li><strong>keywords (katakunci)<br /></strong> Katakunci
+        digunakan untuk mencari topik tertentu yang sesuai.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        language*</span><br /></strong> Bahasa yang digunakan dalam
+        dokumen.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        location*</span><br /></strong> Lokasi yang berhubungan dengan
+        entri, misalnya kota tempat berlangsungnya konferensi.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        LCCN*</span><br /></strong> Singkatan dari Library of Congress Call
+        Number. Seringkali muncul dengan singkatan nama <tt>lib-congress</tt>.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        mrnumber*</span><br /></strong> Nomor dari <i>Mathematical
+        Reviews</i>.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        price*</span><br /></strong> Harga dari sebuah
+        documen.<br />
+        </li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        size*</span><br /></strong> Ukuran dimensi fisik dari suatu
+        karya.<br />
+        </li>
+
+        <li><strong>URL<br /></strong> Singkatan dari Universal Resource
+        Locator yang menunjukkan acuan www berada. Hal ini sering
+        digunakan pada laporan teknis yang mengacu situs ftp dimana dokumen
+        postscript disimpan.</li>
+    </ul>
+
+    <h3>JuraBib</h3>
+
+    <ul>
+        <li><strong>urldate<br /></strong> Tanggal terakhir 
+        dikunjungi.</li>
+    </ul><br />
+     *) tidak secara langsung didukung oleh JabRef<br />
+     <br />
+</body>
+</html>
diff --git a/src/help/in/CiteSeerHelp.html b/src/help/in/CiteSeerHelp.html
index 1a08f39..2d0d485 100644
--- a/src/help/in/CiteSeerHelp.html
+++ b/src/help/in/CiteSeerHelp.html
@@ -1,61 +1,61 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Impor entri dari CiteSeer</h1>
-
-    <p>CiteSeer adalah sumber pustaka dijital saintifik
-    serta mesin pencarian yang berfokus pada bidang sains komputer
-    dan teknolofi informasi.</p>
-
-    <h2>Mengimpor entri dari CiteSeer</h2>
-
-    <p>JabRef dapat memuaturun
-    informasi acuan langsung dari basisdata CiteSeer.
-    Untuk memulai proses muaturun, anda perlu menambahkan entri
-    dalam basisdata anda dan menulis bidang citeseerurl dengan
-    tautan halaman web CiteSeer. Bidang citeseerurl harus dalam bentuk
-    salah satu format berikut:</p>
-
-    <p>http://citeseer.ist.psu.edu/DDDDDD[.html], atau<br />
-    oai:CiteSeerPSU:DDDDDD, atau<br />
-    DDDDDD</p>
-
-    <p>dimana DDDDD adalah angka urutan. Untuk memperoleh angka
-    urutan (DDDDD) untuk entri CiteSeer, anda perlu ke halaman
-    dokumen dengan format http://citeseer.ist.psu.edu/<i>namaTahunJudul</i>.html 
-    kemudian klik tombol tautan (Perbarui) utuk acuan. Nama URL untuk tautan
-    Perbarui berisi angka ID untuk acuan ini.</p>
-
-    <p>Setelah anda menambahkan bidang citeseerurl, anda bisa memuaturun
-    bidang CiteSeer dengan memilih <b>BibTex ->
-    Impor Bidang dari CiteSeer</b>. Pastikan anda sudah memilih
-    baris entri yang ingin diperbarui.</p>
-
-    <h2>Membuat Basisdata Acuan</h2>
-
-    <p>Dengan memberikan referensi, anda aka dapat membuat daftar
-    dalam dokumen anda yang mengacu pada referensi. Agar dapat menggunakan
-    fitur ini, setiap acuan dalam basisdata harus mempunyai bidang 
-    citeseerurl dengan format seperti ditulis di subbab 
-    <b>Mengimpor entri dari CiteSeer</b> diatas. Untuk menggunakan
-    fitur ini, pilih <b>Pencarian Web -> 
-    Ambil data acuan dari CiteSeer</b>.</p>
-
-    <h2>Menggunakan Proxy Server</h2>
-
-    <p>Apabila anda ingin menggunakan proxy
-    server http, tuliskan nama server dan nomor port ke java saat
-    menjalankan program.</p>
-
-    <p><code>java -Dhttp.proxyHost="hostname"
-    -Dhttp.proxyPort="portnumber"</code></p>
-
-    <p>Pengaturan tersebut didokumentasikan di 
-    <a href="http://java.sun.com/j2se/1.4.2/docs/guide/net/properties.html">Sun J2SE documentation</a>.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Impor entri dari CiteSeer</h1>
+
+    <p>CiteSeer adalah sumber pustaka dijital saintifik
+    serta mesin pencarian yang berfokus pada bidang sains komputer
+    dan teknolofi informasi.</p>
+
+    <h2>Mengimpor entri dari CiteSeer</h2>
+
+    <p>JabRef dapat memuaturun
+    informasi acuan langsung dari basisdata CiteSeer.
+    Untuk memulai proses muaturun, anda perlu menambahkan entri
+    dalam basisdata anda dan menulis bidang citeseerurl dengan
+    tautan halaman web CiteSeer. Bidang citeseerurl harus dalam bentuk
+    salah satu format berikut:</p>
+
+    <p>http://citeseer.ist.psu.edu/DDDDDD[.html], atau<br />
+    oai:CiteSeerPSU:DDDDDD, atau<br />
+    DDDDDD</p>
+
+    <p>dimana DDDDD adalah angka urutan. Untuk memperoleh angka
+    urutan (DDDDD) untuk entri CiteSeer, anda perlu ke halaman
+    dokumen dengan format http://citeseer.ist.psu.edu/<i>namaTahunJudul</i>.html 
+    kemudian klik tombol tautan (Perbarui) utuk acuan. Nama URL untuk tautan
+    Perbarui berisi angka ID untuk acuan ini.</p>
+
+    <p>Setelah anda menambahkan bidang citeseerurl, anda bisa memuaturun
+    bidang CiteSeer dengan memilih <b>BibTex ->
+    Impor Bidang dari CiteSeer</b>. Pastikan anda sudah memilih
+    baris entri yang ingin diperbarui.</p>
+
+    <h2>Membuat Basisdata Acuan</h2>
+
+    <p>Dengan memberikan referensi, anda aka dapat membuat daftar
+    dalam dokumen anda yang mengacu pada referensi. Agar dapat menggunakan
+    fitur ini, setiap acuan dalam basisdata harus mempunyai bidang 
+    citeseerurl dengan format seperti ditulis di subbab 
+    <b>Mengimpor entri dari CiteSeer</b> diatas. Untuk menggunakan
+    fitur ini, pilih <b>Pencarian Web -> 
+    Ambil data acuan dari CiteSeer</b>.</p>
+
+    <h2>Menggunakan Proxy Server</h2>
+
+    <p>Apabila anda ingin menggunakan proxy
+    server http, tuliskan nama server dan nomor port ke java saat
+    menjalankan program.</p>
+
+    <p><code>java -Dhttp.proxyHost="hostname"
+    -Dhttp.proxyPort="portnumber"</code></p>
+
+    <p>Pengaturan tersebut didokumentasikan di 
+    <a href="http://java.sun.com/j2se/1.4.2/docs/guide/net/properties.html">Sun J2SE documentation</a>.</p>
+
+</body>
+</html>
diff --git a/src/help/in/ContentSelectorHelp.html b/src/help/in/ContentSelectorHelp.html
old mode 100755
new mode 100644
index 3d7b376..5487fcc
--- a/src/help/in/ContentSelectorHelp.html
+++ b/src/help/in/ContentSelectorHelp.html
@@ -1,27 +1,27 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Pengisian kata dalam bidang</h1>
-
-    <p>Fitur ini membantu anda untuk menyimpan
-    kata-kata atau teminologi yang sering anda gunakan dalam
-    pengisian basisdata anda. Bidang yang memiliki fitur ini
-    adalah <em>Journal</em>, <em>Author</em>, <em>Keywords</em> and
-    <em>Publisher</em>. Anda bisa menambah sendiri bidang lain yang
-    anda inginkan. Dalam dialog <em>Pengaturan pengisian kata</em> (menu
-    <strong>AlatBantuan --> Pengaturan pengisian kata</strong>).</p>
-
-    <p>Pemilihan kata adalah spesifik-basisdata. Kata-kata 
-    disimpan bersama dengan koleksi referensi anda dalam berkas
-    .bib anda</p>
-
-    <p>Untuk menambahkan kata, anda cukup menuliskan pada kotak
-    sebelah kanan kemudian tekan Enter. Dalam dialog
-    <em>Pengaturan pengisian kata</em> ini anda juga
-    bisa menghapus kata-kata yang anda tambahkan.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Pengisian kata dalam bidang</h1>
+
+    <p>Fitur ini membantu anda untuk menyimpan
+    kata-kata atau teminologi yang sering anda gunakan dalam
+    pengisian basisdata anda. Bidang yang memiliki fitur ini
+    adalah <em>Journal</em>, <em>Author</em>, <em>Keywords</em> and
+    <em>Publisher</em>. Anda bisa menambah sendiri bidang lain yang
+    anda inginkan. Dalam dialog <em>Pengaturan pengisian kata</em> (menu
+    <strong>AlatBantuan --> Pengaturan pengisian kata</strong>).</p>
+
+    <p>Pemilihan kata adalah spesifik-basisdata. Kata-kata 
+    disimpan bersama dengan koleksi referensi anda dalam berkas
+    .bib anda</p>
+
+    <p>Untuk menambahkan kata, anda cukup menuliskan pada kotak
+    sebelah kanan kemudian tekan Enter. Dalam dialog
+    <em>Pengaturan pengisian kata</em> ini anda juga
+    bisa menghapus kata-kata yang anda tambahkan.</p>
+</body>
+</html>
diff --git a/src/help/in/Contents.html b/src/help/in/Contents.html
old mode 100755
new mode 100644
index 58ac592..77f4e44
--- a/src/help/in/Contents.html
+++ b/src/help/in/Contents.html
@@ -1,75 +1,75 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Daftar Isi Bantuan</h1>
-
-    <h2>Umum</h2>
-    <ul>
-      <li><a href="HelpHelp.html">Tentang Jendela Bantuan</a></li>
-      <li><a href="JabRefHelp.html">Informasi Umum</a></li>
-      <li><a href="BaseFrameHelp.html">Jendela utama JabRef</a></li>
-      <li><a href="EntryEditorHelp.html">Penyunting Entri</a></li>
-      <li><a href="Autosave.html">Menyimpan otomatis</a></li>
-    </ul>
-
-    <h2>Bidang dalam Entri</h2>
-    <ul>
-      <li><a href="BibtexHelp.html">Informasi <em>Bibtex</em></a></li>
-      <li><a href="FileLinks.html">External file links</a></li>
-      <li><a href="ExternalFiles.html">PDF/PS/URL/DOI links in JabRef</a></li>
-      <li><a href="TimeStampHelp.html">Cap waktu entri</a></li>
-      <li><a href="OwnerHelp.html">Bidang 'pemilik'</a></li>
-      <li><a href="ContentSelectorHelp.html">Pengisian kata dalam bidang</a></li>
-      <li><a href="JournalAbbreviations.html">Singkatan nama jurnal</a></li>
-    </ul>
-    
-    <h2>Mencari dan mengurutkan entri</h2>
-    <ul>
-      <li><a href="GroupsHelp.html">Help on using <em>Groups</em></a></li>
-      <li><a href="MarkingHelp.html">Menandai entri</a></li>
-      <li><a href="SearchHelp.html">Pencarian di JabRef</a></li>
-    </ul>
-
-    <h2>Pengaturan</h2>
-    <ul>
-      <li><a href="StringEditorHelp.html">Penyunting string</a></li>
-      <li><a href="DatabaseProperties.html">Jendela properti basisdata</a></li>
-      <li><a href="PreviewHelp.html">Pengaturan pratampilan entri</a></li>
-      <li><a href="LabelPatterns.html">Customizing the BibTex key generator</a></li>
-      <li><a href="CustomEntriesHelp.html">Customizing entry types</a></li>
-      <li><a href="GeneralFields.html">Customizing general fields</a></li>
-      <li><a href="Plugin.html">Extend JabRef using plugins</a></li>
-    </ul>
-
-    <h2>Impor/Ekspor</h2>
-    <ul>
-      <li><a href="CustomExports.html">Penapis ekspor suaian</a></li>
-      <li><a href="CustomImports.html">Penapis impor suaian</a></li>
-      <li><a href="ImportInspectionDialog.html">Import inspection window</a></li>
-      <li><a href="EndNoteFilters.html">The EndNote import/export filter set</a></li>
-      <li><a href="OpenOfficeHelp.html">Using JabRef bibliographies in OpenOffice.org</a></li>
-      <li><a href="ACMPortalHelp.html">Mengambil entri dari Portal <em>ACM</em></a></li>
-      <li><a href="CiteSeerHelp.html">Mengambil entri dari <em>CiteSeer</em></a></li>
-      <li><a href="IEEEXploreHelp.html">Mengambil entri dari <em>IEEExplore</em></a></li>
-      <li><a href="MedlineHelp.html">Mengambil entri dari <em>Medline</em></a></li>
-      <li><a href="JSTOR.html">Pencarian <em>JStor</em></a></li>
-      <li><a href="ScienceDirect.html">Pencarian <em>ScienceDirect</em></a></li>
-      <li><a href="Spires.html">Pencarian <em>Spires</em></a></li>
-      <li><a href="SQLExport.html">Export to an External SQL Database</a></li>
-      <li><a href="XMPHelp.html">XMP metadata support in JabRef</a></li>
-      <li><a href="CommandLine.html">Command line options</a></li>
-      <li><a href="RemoteHelp.html">Remote operations</a></li>
-    </ul>
-
-    <h2>Lain-lain</h2>
-    <ul>
-      <li><a href="RevisionHistory.html">Riwayat Perbaikan</a></li>
-      <li><a href="About.html">Tentang JabRef</a></li>
-    </ul>
-
-</body>
-</html> 
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Daftar Isi Bantuan</h1>
+
+    <h2>Umum</h2>
+    <ul>
+      <li><a href="HelpHelp.html">Tentang Jendela Bantuan</a></li>
+      <li><a href="JabRefHelp.html">Informasi Umum</a></li>
+      <li><a href="BaseFrameHelp.html">Jendela utama JabRef</a></li>
+      <li><a href="EntryEditorHelp.html">Penyunting Entri</a></li>
+      <li><a href="Autosave.html">Menyimpan otomatis</a></li>
+    </ul>
+
+    <h2>Bidang dalam Entri</h2>
+    <ul>
+      <li><a href="BibtexHelp.html">Informasi <em>Bibtex</em></a></li>
+      <li><a href="FileLinks.html">External file links</a></li>
+      <li><a href="ExternalFiles.html">PDF/PS/URL/DOI links in JabRef</a></li>
+      <li><a href="TimeStampHelp.html">Cap waktu entri</a></li>
+      <li><a href="OwnerHelp.html">Bidang 'pemilik'</a></li>
+      <li><a href="ContentSelectorHelp.html">Pengisian kata dalam bidang</a></li>
+      <li><a href="JournalAbbreviations.html">Singkatan nama jurnal</a></li>
+    </ul>
+    
+    <h2>Mencari dan mengurutkan entri</h2>
+    <ul>
+      <li><a href="GroupsHelp.html">Help on using <em>Groups</em></a></li>
+      <li><a href="MarkingHelp.html">Menandai entri</a></li>
+      <li><a href="SearchHelp.html">Pencarian di JabRef</a></li>
+    </ul>
+
+    <h2>Pengaturan</h2>
+    <ul>
+      <li><a href="StringEditorHelp.html">Penyunting string</a></li>
+      <li><a href="DatabaseProperties.html">Jendela properti basisdata</a></li>
+      <li><a href="PreviewHelp.html">Pengaturan pratampilan entri</a></li>
+      <li><a href="LabelPatterns.html">Customizing the BibTex key generator</a></li>
+      <li><a href="CustomEntriesHelp.html">Customizing entry types</a></li>
+      <li><a href="GeneralFields.html">Customizing general fields</a></li>
+      <li><a href="Plugin.html">Extend JabRef using plugins</a></li>
+    </ul>
+
+    <h2>Impor/Ekspor</h2>
+    <ul>
+      <li><a href="CustomExports.html">Penapis ekspor suaian</a></li>
+      <li><a href="CustomImports.html">Penapis impor suaian</a></li>
+      <li><a href="ImportInspectionDialog.html">Import inspection window</a></li>
+      <li><a href="EndNoteFilters.html">The EndNote import/export filter set</a></li>
+      <li><a href="OpenOfficeHelp.html">Using JabRef bibliographies in OpenOffice.org</a></li>
+      <li><a href="ACMPortalHelp.html">Mengambil entri dari Portal <em>ACM</em></a></li>
+      <li><a href="CiteSeerHelp.html">Mengambil entri dari <em>CiteSeer</em></a></li>
+      <li><a href="IEEEXploreHelp.html">Mengambil entri dari <em>IEEExplore</em></a></li>
+      <li><a href="MedlineHelp.html">Mengambil entri dari <em>Medline</em></a></li>
+      <li><a href="JSTOR.html">Pencarian <em>JStor</em></a></li>
+      <li><a href="ScienceDirect.html">Pencarian <em>ScienceDirect</em></a></li>
+      <li><a href="Spires.html">Pencarian <em>Spires</em></a></li>
+      <li><a href="SQLExport.html">Export to an External SQL Database</a></li>
+      <li><a href="XMPHelp.html">XMP metadata support in JabRef</a></li>
+      <li><a href="CommandLine.html">Command line options</a></li>
+      <li><a href="RemoteHelp.html">Remote operations</a></li>
+    </ul>
+
+    <h2>Lain-lain</h2>
+    <ul>
+      <li><a href="RevisionHistory.html">Riwayat Perbaikan</a></li>
+      <li><a href="About.html">Tentang JabRef</a></li>
+    </ul>
+
+</body>
+</html> 
diff --git a/src/help/in/CustomExports.html b/src/help/in/CustomExports.html
index bec3888..50e6a12 100644
--- a/src/help/in/CustomExports.html
+++ b/src/help/in/CustomExports.html
@@ -1,561 +1,561 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Penapis ekspor atursendiri</h1>
-
-    <p>Dalam JabRef, anda dapat mengatur sendiri
-    penapis ekspor sesuai dengan kehendak anda sendiri,
-    dengan cara seperti yang digunakan penapis standar lainnya.
-    Penapis ekspor didefinisikan dengan satu atau beberapa
-    <i>berkas tataletak</i>, yang dapat disiapkan dengan cara
-    merubah dari rutin pemformat sudah ada. Berkas tataletak 
-    anda perlu disiapkan dengan penyunting teks lain di luar JabRef.</p>
-
-    <h2>Menambah penapis ekspor atursendiri</h2>
-
-    <p>Berkas penapis ekspor yang sah harus mempunyai
-    ekstensi <b>.layout</b>. Untuk menambahkan penapis ekspor atursendiri
-    baru, <b>Pengaturan -> Pengaturan ekspor atursendiri</b>,
-    kemudian klik <b>Tambah baru</b>. Kotak dialog pengaturan akan muncul.
-    Anda perlu menuliskan nama penapis ekspor (yang akan muncul
-    dalam pilihan ketika anda menggunakan menu <b>Berkas ->
-    Ekspor</b>), lokasi berkas <b>.layout</b>, serta ekstensi berkas untuk
-    penapis ekspor (yang akan disarankan ketika anda menggunakan penapis
-    ekspor atursendiri yang anda buat).</p>
-
-    <h2>Membuat penapis ekspor</h2>
-
-    <p>Untuk melihat contoh bagaimana membuat penapis ekspor, anda perlu
-    mencari berkas tataletak <b>.layout</b> untuk penapis ekspor yang ada
-    di situs web muaturun kami.</p>
-
-    <h3>Berkas tataletak (.layout)</h3>
-
-    <p>Sebagai contoh kami menganggap sekarang kita membuat
-    penapis ekspor HTML.</p>
-
-    <p>Berkas penapis ekspor hanya mempunyai satu berkas utama
-    <b>.layout</b> saja, sehingga untuk contoh ini bisa diberi nama
-    <i>html.layout</i>. Disamping itu, anda bisa menambah dua berkas lagi
-    <i>html.begin.layout</i> dan <i>html.end.layout</i>. Berkas pertama
-    mengatur bagian awal dari keluaran, sedangkan berkas kedua
-    mengatur bagian akhir. JabRef akan mencari dua berkas ini setiap kali
-    penapis ekspor digunakan, dan jika ditemukan, akan menyalin persis
-    ke keluaran sebelum atau sesudah tiap entri dituliskan.</p>
-
-    <p>Catatan kedua berkas tambahan harus berada di direktori yang sama
-    dengan direktori dimana berkas <i>html.layout</i> berada, dan harus
-    mempunyai nama tambahan <b>.begin</b> dan <b>.end</b>.</p>
-
-    <p>Contoh berkas penapis tambahan tadi dapat berbentuk 
-    seperti berikut:</p>
-
-    <p><i>html.begin.layout</i>:<br />
-    <code><HTML><br />
-     <BODY> text="#275856"><br />
-    <basefont size="4" color="#2F4958"
-    face="arial"></code></p>
-
-    <p><i>html.end.layout</i>:<br />
-    <code></BODY><br />
-     </HTML></code></p>
-
-    <p>Berkas <i>html.layout</i> mengatur templet <i>bawaan</i>
-    untuk mengekspor satu entri. Apabila anda ingin menggunakan
-    beberapa templet untuk tipe entri yang berbeda, anda perlu
-    menambahkan berkas entri khusus <b>.layout</b>. Berkas tataletak ini 
-    harus berada di direktori yang sama dengan berkas tataletak utama,
-    serta diberi nama dengan menyisipkan <b>.entrytype</b> dalam
-    berkas tata letak utama. Nama tipe entri harus ditulis dengan 
-    huruf kecil semuanya. Pada contoh yang kami berikan, kami akan
-    menambahkan templet untuk entri buku, dan akan disimpan dalam 
-    berkas <i>html.book.layout</i>. Untuk PhD thesis, akan ditambahkan
-    dalam berkas <i>html.phdthesis.layout</i>, dll.
-    Berkas-berkas ini mirip dengan berkas tataletak bawaan, kecuali
-    hanya akan digunakan untuk entri yang mempunyai tipe sama.
-    Catatan, berkas bawaan dapat dengan mudah dibuat umum untuk
-    memenuhi semua tipe entri yang bisa digunakan di hampir semua
-    penapis ekspor.</p>
-
-    <h3>Format berkas tataletak</h3>
-
-    <p>Berkas tataletak dibuat menggunakan format markup sederhana
-    dimana perintah dikenali dengan awalan coret miring (\).
-    Teks lain yang tidak ada tanda perintah akan disalin secara
-    verbatim ke berkas keluaran.</p>
-
-    <h3>Perintah bidang</h3>
-
-    <p>Merupakan kata bebas yang dimulai dengan coret miring, misal
-    <code>\author</code>, <code>\editor</code>, <code>\title</code>
-    atau <code>\year</code>, akan diartikan sebagai acuan ke 
-    bidang terkait, yang disalin langsung ke berkas keluaran.</p>
-
-    <h3>Pemformat bidang</h3>
-
-    <p>Seringkali, ada perlunya melakukan pra proses isi bidang sebelum
-    keluaran. Hal ini dilakukan menggunakan <i>pemformat bidang</i> -
-    yaitu berupa kelas java yang mempunyai metoda tunggal untuk memipulasi
-    isi dari suatu bidang.</p>
-
-    <p>Pemformat digunakan dengan cara menyisipkan perintah <code>\format</code>
-    yang diikuti dengan nama pemformat dalam kurung kotak, dan
-    perintah bidang dalam kurung kurawal, misalnya:</p>
-
-    <p><code>\format[ToLowerCase]{\author}</code></p>
-
-    <p>Anda juga bisa menggunakan beberapa pemformat  yang dipisahkan dengan tanda
-    koma. Pemformat ini akan dipanggil berurutan, dari kiri ke kanan,
-    misalnya</p>
-
-    <p><code>\format[ToLowerCase,HTMLChars]{\author}</code></p>
-
-    <p>akan memanggil pemformat <b>ToLowerCase</b> terlebih dahulu,
-    kemudian <b>HTMLChars</b> untuk memformat hasil. 
-    Anda dapat menggunakan beberapa pemformat dengan cara ini.</p>
-
-    <p>Argumen untuk pemformat, dalam kurung kurawal,
-    tidak harus dalam bentuk perintah bidang. Anda dapat menyisipkan
-    teks normal, yang akan dibaca oleh pemformat
-    bukan sebagai isi dari bidang manapun. Hal ini sangat berguna untuk
-    bebrapa pemformat, misalnya pemformat CurrentDate (dijelaskan
-    dibawah).</p>
-
-    <p>Beberapa pemformat memerlukan argumen ekstra, memerlukan tanda kurung
-    setelah nama pemformat. Argumen boleh menggunakan tanda petik, yang diperlukan
-    jika menggunakan karakter kurung. Misalnya, <code>\format[Replace("\s,_")]{\journal}</code>
-    memanggil pemformat <b>Replace</b> dengan argumen <b>\s,_</b> (yang menghasilkan
-    bidang "journal" setelah mengganti semua spasi dengan garis bawah).
-    </p>
-
-    <p>Lihat dibawah ini daftar pemformat ekspor yang sudah dibuat.</p>
-
-    <h3>Keluaran kondisional</h3>
-
-    <p>Beberapa keluaran statik hanya mungkin dibuat
-    apabila ditentukan bidang spesifik. Sebagai contoh, kita ingin menulis
-    nama editor yang diikuti dengan teks <code>(Ed.)</code>. Hal ini bisa dilakukan
-    dengan cara berikut:</p>
-
-    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
-    (Ed.)</code></p>
-
-    <p>Namun demikian, jika bidang <code>editor</code> tidak ditentukan -
-    ketika dilakukan ekspor informasinya akan membingungkan - Kata
-    <code>(Ed.)</code> akan berada di sebelah kiri. Hal ini bisa dihindari
-    dengan menggunakan perintah <code>\begin</code> dan <code>\end</code>
-    :</p>
-
-    <p><code>\begin{editor}<br />
-    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br />
-     \end{editor}</code></p>
-
-    <p>Perintah <code>\begin</code> dan <code>\end</code> akan memastikan
-    teks yang berada diantaranya dicetak hanya jika bidang dalam tanda kurung kurawal 
-    didefinisikan untuk entri yang diekspor.</p>
-
-    <p>Blok kondisional bisa tergantung pada lebih dari satu bidang. Pada kasus ini
-    isi dalam blok hanya dicetak jika semua bindangnya didefinisikan terlebih dahulu.
-    Untuk membuat blok, caranya adalah dengan menulis bidang-bidang dengan pemisah titik koma.
-    Sebagai contoh, untuk menulis keluaran <code>year</code> dam <code>month</code>, gunakan
-    blok seperti dibawah ini:</p>
-
-    <p><code>\begin{year;month}Month: \format[HTMLChars]{\month}\end{year;month}</code></p>
-
-    <p>yang akan mencetak "Month: " ditambah denngan bidang <code>month</code>, jika
-    bidang <code>year</code> didefinisikan.</p>
-
-    <p><b>Catatan:</b> Perintah <code>\begin</code> dan
-    <code>\end</code> adalah perintah umum untuk membuat berkas tataletak
-    yang bisa digunakan untuk berbagai tipe entri.</p>
-
-    <h3>Keluaran grup</h3>
-
-    <p>If you wish to separate your entries
-    into groups based on a certain field, use the grouped output
-    commands. Grouped output is very similar to conditional output,
-    except that the text in between is printed only if the field
-    referred in the curly braces has changed value.</p>
-
-    <p>For example, let's assume I wish to group by keyword. Before
-    exporting the file, make sure you have sorted your entries
-    based on keyword. Now use the following commands to group by
-    keyword:</p>
-
-    <p><code>\begingroup{keywords}New Category:
-    \format[HTMLChars]{\keywords}<br />
-     \endgroup{keywords}</code></p>
-
-    <h2>Sharing your work</h2>
-
-    <p>With external layout files, it's
-    fairly simple to share custom export formats between users. If
-    you write an export filter for a format not supported by
-    JabRef, or an improvement over an existing one, we encourage
-    you to post your work on our SourceForge.net page. The same
-    goes for formatter classes that you write. We'd be happy to
-    distribute a collection of submitted layout files, or to add to
-    the selection of standard export filters and formatters.</p>
-
-    <p>Starting with JabRef 2.4 you can also package your 
-	ExportFormat or LayoutFormatter as a plug-in. If you do so,
-	you can provide a single zip-file to other user to make use
-	of your ExportFormat. For an example download the JabRef
-	source release and have a look at the directory
-	<code>src/plugins/</code>. Don't hesitate to stop by the
-	forums on Sourceforge, since we don't have extensive documentation, yet.</p>
-
-
-    <h2>Built-in export formatters</h2>
-
-    <p>JabRef provides the following set of formatters:</p>
-
-    <ul>
-        <li><code>Authors</code> : this formatter provides formatting options for the author and editor fields; for detailed information, see below. It deprecates a range of dedicated formatters provided in versions of JabRef prior to 2.7.</li>
-
-        <li><code>CreateDocBookAuthors</code> : formats the author
-        field in DocBook style.</li>
-
-        <li><code>CreateDocBookEditors</code> : to be
-        documented.</li>
-
-        <li><code>CurrentDate</code> : outputs the current date.
-        With no argument, this formatter outputs the current date
-        and time in the format "yyyy.MM.dd hh:mm:ss z" (date, time
-        and time zone). By giving a different format string as
-        argument, the date format can be customized. E.g.
-        <code>\format[CurrentDate]{yyyy.MM.dd}</code> will give the
-        date only, e.g. 2005.11.30.</li>
-
-        <li><code>Default</code> : takes a single argument, which serves as a default value.
-        If the string to format is non-empty, it is output without changes. If it is empty,
-        the default value is output. For instance, <code>\format[Default(unknown)]{\year}</code>
-        will output the entry's year if set, and "unknown" if no year is set.</li>
-	
-        <li><code>DOIStrip</code> : strips any prefixes from the DOI string.</li>
-        <li><code>DOICheck</code> : provides the full url for a DOI link.</li>
-
-        <li><code>FileLink(filetype)</code> : if no argument is given, this formatter outputs
-        the first external file link encoded in the field. To work, the formatter must
-        be supplied with the contents of the "file" field.
-        <p>This formatter takes the name of an external file type as an optional argument,
-        specified in parentheses after the formatter name. For instance,
-        <code>\format[FileLink(pdf)]{\file}</code> specifies <code>pdf</code> as an
-        argument. When an argument is given, the formatter selects the first file
-        link of the specified type. In the example, the path to the first PDF link will
-        be output.</p></li>
-
-        <li><code>FirstPage</code> : returns the first page from the "pages" field, if set.
-            For instance, if the pages field is set to "345-360" or "345--360",
-            this formatter will return "345".</li>
-
-        <li><code>FormatPagesForHTML</code> : replaces "--" with "-".</li>
-
-        <li><code>FormatPagesForXML</code> : replaces "--" with an XML en-dash.</li>
-
-        <li><code>GetOpenOfficeType</code> : returns the number used by the OpenOffice.org
-        bibliography system (versions 1.x and 2.x) to denote the type of this entry.</li>
-
-        <li><code>HTMLChars</code> : replaces TeX-specific special
-        characters (e.g. {\^a} or {\"{o}}) with their HTML
-        representations, and translates LaTeX commands \emph, \textit,
-        \textbf into HTML equivalents.</li>
-
-        <li><code>HTMLParagraphs</code> : interprets two
-        consecutive newlines (e.g. \n \n) as the beginning of a new
-        paragraph and creates paragraph-html-tags accordingly.</li>
-
-        <li><code>IfPlural</code> : outputs its first argument if the input field looks
-        like an author list with two or more names, or its second argument otherwise.
-        E.g. <code>\format[IfPlural(Eds.,Ed.)]{\editor}</code> will output "Eds." if there
-        is more than one editor, and "Ed." if there is only one.</li>
-
-        <li><code>LastPage</code> : returns the last page from the "pages" field, if set.
-            For instance, if the pages field is set to "345-360" or "345--360",
-            this formatter will return "360".</li>
-
-        <li><code>Number</code> : outputs the 1-based sequence number of the current entry in the
-        current export. This formatter can be used to make a numbered list of entries. The
-        sequence number depends on the current entry's place in the current sort order, not on
-        the number of calls to this formatter.</li>
-
-        <li><code>RemoveBrackets</code> : removes all curly brackets "{" or "}".</li>
-
-        <li><code>RemoveBracketsAddComma</code> : to be documented.</li>
-
-        <li><code>RemoveLatexCommands</code> : removes LaTeX
-        commands like <code>\em</code>, <code>\textbf</code>, etc.
-        If used together with <code>HTMLChars</code> or
-        <code>XMLChars</code>, this formatter should be called
-        last.</li>
-
-        <li><code>RemoveTilde</code> : replaces the tilde character
-        used in LaTeX as a non-breakable space by a regular space.
-        Useful in combination with the NameFormatter discussed in
-        the next section.</li>
-
-        <li><code>RemoveWhitespace</code> : removes all whitespace characters.</li>
-
-        <li><code>Replace(regexp,replacewith)</code> : does a regular expression replacement.
-        To use this formatter, a two-part argument must be given. The parts are
-        separated by a comma. To indicate the comma character, use an escape
-        sequence: \,<br/> <br/>
-        The first part is the regular expression to search for. Remember that any commma
-        character must be preceded by a backslash, and consequently a literal backslash must
-        be written as a pair of backslashes. A description of Java regular expressions can be
-        found at:<br/>
-         http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
-         <br/> <br/>
-        The second part is the text to replace all matches with.</li>
-
-        <li><code>RTFChars</code> : replaces TeX-specific special
-        characters (e.g. {\^a} or {\"{o}}) with their RTF
-        representations, and translates LaTeX commands \emph, \textit,
-        \textbf into RTF equivalents.</li>
-
-        <li><code>ToLowerCase</code> : turns all characters into
-        lower case.</li>
-
-        <li><code>ToUpperCase</code> : turns all characters into
-        upper case.</li>
-
-        <li><code>WrapContent</code> : This formatter outputs the input value after adding a
-        prefix and a postfix, as long as the input value is non-empty. If the input value
-        is empty, an empty string is output (the prefix and postfix are not output in this case).
-        The formatter requires an argument containing the prefix and postix separated
-        by a comma. To include the comma character in either, use an escape sequence
-        (\,).</li>
-
-        <li><code>WrapFileLinks</code> : See below.</li>
-
-        <li><code>XMLChars</code> : replaces TeX-specific special
-        characters (e.g. {\^a} or {\"{o}}) with their XML
-        representations.</li>
-
-    </ul>
-
-<h3>The <code>Authors</code> formatter</h3>
-
-<p>To accommodate for the numerous citation styles, the <code>Authors</code> formatter allows flexible control over the layout of the author list. The formatter takes a comma-separated list of options, by which the default values can be overridden. The following option/value pairs are currently available, where the default values are given in curly brackets.</p>
-<dl>
-<dt><code>AuthorSort = [ {FirstFirst} | LastFirst | LastFirstFirstFirst ]</code></dt>
-<dd>specifies the order in which the author names are formatted.
-	<ul>
-		<li><code>FirstFirst</code> : first names are followed by the surname.</li>
-		<li><code>LastFirst</code> : the authors' surnames are followed by their first names, separated by a comma.</li>		
-		<li><code>LastFirstFirstFirst</code> : the first author is formatted as LastFirst, the subsequent authors as FirstFirst.</li>
-	</ul>
-</dd>
-
-<dt><code>AuthorAbbr = [ FullName | LastName | {Initials} | InitialsNoSpace | FirstInitial | MiddleInitial ]</code></dt>
-<dd>specifies how the author names are abbreviated.
-	<ul>
-		<li><code>FullName</code> : shows full author names; first names are not abbreviated.</li>
-		<li><code>LastName</code> : show only surnames, first names are removed.</li> 
-		<li><code>Initials</code> : all first names are abbreviated.</li> 
-		<li><code>InitialsNospace</code> : as Initials, with any spaces between initials removed.</li>
-		<li><code>FirstInitial</code> : only first initial is shown.</li> 
-		<li><code>MiddleInitial</code> : first name is shown, but all middle names are abbreviated.</li>
-	</ul>	
-</dd>
-
-<dt><code>AuthorPunc = [ {FullPunc} | NoPunc | NoComma | NoPeriod ]</code></dt>
-<dd>specifies the punctuation used in the author list when <code>AuthorAbbr</code> is used
-	<ul>
-		<li><code>FullPunc</code> : no changes are made to punctuation.</li>
-		<li><code>NoPunc</code> : all full stops and commas are removed from the author name.</li>
-		<li><code>NoComma</code> : all commas are removed from the author name.</li>
-		<li><code>NoPeriod</code> : all full stops are removed from the author name.</li>
-	</ul>	
-</dd>
-
-<dt><code>AuthorSep = [ {Comma} | And | Colon | Semicolon | Sep=<string> ]</code></dt>
-<dd>specifies the separator to be used between authors. Any separator can be specified, with the <code>Sep=<string></code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd> 
-
-<dt><code>AuthorLastSep = [ Comma | {And} | Colon | Semicolon | Amp | Oxford | LastSep=<string> ]</code></dt>
-<dd>specifies the last separator in the author list. Any separator can be specified, with the <code>LastSep=<string></code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd>
-
-<dt><code>AuthorNumber = [ {inf} | <integer> ]</code></dt>
-<dd>specifies the number of authors that are printed. If the number of authors exceeds the maximum specified, the authorlist is replaced by the first author, followed by <code>EtAlString</code>.</dd>
-
-<dt><code>EtAlString = [ { et al.} | EtAl=<string> ]</code></dt>
-<dd>specifies the string used to replace multiple authors. Any string can be given, using <code>EtAl=<string></code></dd>
-
-</dl>
-
-<p>If an option is unspecified, the default value (shown in curly brackets above) is used. Therefore, only layout options that differ from the defaults need to be specified. The order in which the options are defined is (mostly) irrelevant. So, for example,</p>
-<p><code>\format[Authors(Initials,Oxford)]{\author}</code></p>
-<p>is equivalent to</p>
-<p><code>\format[Authors(Oxford,Initials)]{\author}</code></p>
-<p>As mentioned, the order in which the options are specified is irrelevant. There is one possibility for ambiguity, and that is if both <code>AuthorSep</code> and <code>AuthorLastSep</code> are given. In that case, the first applicable value encountered would be for <code>AuthorSep</code>, and the second for <code>AuthorLastSep</code>. It is good practise to specify both when changing the default, to avoid ambiguity.</p>
-
-<h4>Examples</h4>
-<p>Given the following authors, <i>"Joe James Doe and Mary Jane and Bruce Bar and Arthur Kay"</i> ,the <code>Authors</code> formatter will give the following results:</p>
-<dl>
-<dt><code>Authors()</code>, or equivalently, <code>Authors(FirstFirst,Initials,FullPunc,Comma,And,inf,EtAl= et al.)</code></dt>
-<dd><pre>J. J. Doe, M. Jane, B. Bar and A. Kay</pre></dd>
-
-<dt><code>Authors(LastFirstFirstFirst,MiddleInitial,Semicolon)</code></dt>
-<dd><pre>Doe, Joe J.; Mary Jane; Bruce Bar and Arthur Kay</pre></dd>
-
-<dt><code>Authors(LastFirst,InitialsNoSpace,NoPunc,Oxford)</code></dt>
-<dd><pre>Doe JJ, Jane M, Bar B, and Kay A</pre></dd>
-
-<dt><code>Authors(2,EtAl= and others)</code></dt>
-<dd><pre>J. J. Doe and others</pre></dd>
-</dl>
-<p>Most commonly available citation formats should be possible with this formatter. For even more advanced options, consider using the Custom Formatters detailed below.</p>
-
-<h3>The <code>WrapFileLinks</code> formatter</h3>
-
-<p>This formatter iterates over all file links, or all file links of a specified type, outputting a format string given as the first argument. The format string can contain a number of escape sequences indicating file link information to be inserted into the string.</p>
-<p>This formatter can take an optional second argument specifying the name of a file type. If specified, the iteration will only include those files with a file type matching the given name (case-insensitively). If specified as an empty argument, all file links will be included.</p>
-<p> After the second argument, pairs of additional arguments can be added in order to specify regular expression replacements to be done upon the inserted link information before insertion into the output string. A non-paired argument will be ignored. In order to specify replacements without filtering on file types, use an empty second argument.</p>
-<p>The escape sequences for embedding information are as follows:</p>
-<ul>
-	<li><code>\i</code> : This inserts the iteration index (starting from 1), and can be useful if the output list of files should be enumerated.</li>
-	<li><code>\p</code> : This inserts the file path of the file link.</li>
-	<li><code>\f</code> : This inserts the name of the file link's type.</li>
-	<li><code>\x</code> : This inserts the file's extension, if any.</li>
-	<li><code>\d</code> : This inserts the file link's description, if any.</li>
-</ul>
-<p>For instance, an entry could contain a file link to the file "/home/john/report.pdf" of the "PDF" type with description "John's final report". Using the WrapFileLinks formatter with the following argument:</p>
-<p><code>\format[WrapFileLinks(\i. \d (\p))]{\file}</code></p>
-<p>would give the following output:</p>
-<pre>
-    1. John's final report (/home/john/report.pdf)
-
-</pre>
-<p>If the entry contained a second file link to the file "/home/john/draft.txt" of the "Text file" type with description 'An early "draft"', the output would be as follows:</p>
-<pre>
-    1. John's final report (/home/john/report.pdf)
-    2. An early "draft" (/home/john/draft.txt)
-
-</pre>
-<p>If the formatter was called with a second argument, the list would be filtered. For instance:</p>
-<p><code>\format[WrapFileLinks(\i. \d (\p),,text file)]{\file}</code></p>
-<p> would show only the text file:</p>
-<pre>
-    1. An early "draft" (/home/john/draft.txt)
-
-</pre>
-<p>If we wanted this output to be part of an XML styled output, the quotes in the file description could cause problems. Adding two additional arguments to translate the quotes into XML characters solves this:</p>
-<p><code>\format[WrapFileLinks(\i. \d (\p),,text file,",&quot;)]{\file}</code></p>
-<p>would give the following output:</p>
-<pre>
-    1. An early "draft" (/home/john/draft.txt)
-
-</pre>
-<p>Additional pairs of replacements could be added.</p>
-
-
-    <h3>Custom formatters</h3>
-    <p>If none of the available formatters can do what you want to
-    achieve, you can add your own by implementing the
-    <code>net.sf.jabref.export.layout.LayoutFormatter</code>
-    interface. If you insert your class into the
-    <code>net.sf.jabref.export.layout.format</code> package, you
-    can call the formatter by its class name only, like with the
-    standard formatters. Otherwise, you must call the formatter by
-    its fully qualified name (including package name). In any case,
-    the formatter must be in your classpath when running
-    JabRef.</p>
-
-    <h2><a name="NameFormatter"
-       id="NameFormatter">Using Custom Name Formatters</a></h2>
-
-    <p>From JabRef 2.2, it is possible to define custom name
-    formatters using the bibtex-sty-file syntax. This allows
-    ultimate flexibility, but is a cumbersome to write</p>
-
-    <p>You can define your own formatter in the preference tab
-    "Name Formatter" using the following format and then use it
-    with the name given to it as any other formatter</p>
-    <code><case1>@<range11>@<format>@<range12>@<format>@<range13>...@@<br />
-
-     <case2>@<range21>@... and so on.</code>
-
-    <p>This format first splits the task to format a list of author
-    into cases depending on how many authors there are (this is
-    since some formats differ depending on how many authors there
-    are). Each individual case is separated by @@ and contains
-    instructions on how to format each author in the case. These
-    instructions are separated by a @.</p>
-
-    <p>Cases are identified using integers (1, 2, 3, etc.) or the
-    character * (matches any number of authors) and will tell the
-    formatter to apply the following instructions if there are a
-    number of less or equal of authors given.</p>
-
-    <p>Ranges are either
-    <code><integer>..<integer></code>,
-    <code><integer></code> or the character <code>*</code>
-    using a 1 based index for indexing authors from the given list
-    of authors. Integer indexes can be negative to denote them to
-    start from the end of the list where -1 is the last author.</p>
-
-    <p>For instance with an authorlist of "Joe Doe and Mary Jane
-    and Bruce Bar and Arthur Kay":</p>
-
-    <ul>
-        <li>1..3 will affect Joe, Mary and Bruce</li>
-
-        <li>4..4 will affect Arthur</li>
-
-        <li>* will affect all of them</li>
-
-        <li>2..-1 will affect Mary, Bruce and Arthur</li>
-    </ul>
-
-    <p>The <code><format></code>-strings use the Bibtex
-    formatter format:</p>
-
-    <p>The four letters v, f, l, j indicate the name parts von,
-    first, last, jr which are used within curly braces. A single
-    letter v, f, l, j indicates that the name should be
-    abbreviated. If one of these letters or letter pairs is
-    encountered JabRef will output all the respective names
-    (possibly abbreviated), but the whole expression in curly
-    braces is only printed if the name part exists.</p>
-
-    <p>For instance if the format is "{ll} {vv {von Part}} {ff}"
-    and the names are "Mary Kay and John von Neumann", then JabRef
-    will output "Kay Mary" (with two space between last and first)
-    and "Neuman von von Part John".</p>
-
-    <p>I give two examples but would rather point you to the bibtex
-    documentation.</p>
-
-    <p>Small example: <code>"{ll}, {f.}"</code> will turn
-    <code>"Joe Doe"</code> into <code>"Doe, J."</code></p>
-
-    <p>Large example:</p>
-
-    <blockquote>
-        <p>To turn:</p>
-
-        <p><code>"Joe Doe and Mary Jane and Bruce Bar and Arthur
-        Kay"</code></p>
-
-        <p>into</p>
-
-        <p><code>"Doe, J., Jane, M., Bar, B. and Kay,
-        A."</code></p>
-
-        <p>you would use</p>
-
-        <p><code>1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll},
-        {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll},
-        {f}.</code></p>
-    </blockquote>
-
-    <p>If somebody would like to write a better tutorial about
-    this: Write a mail to one of the JabRef mailinglists!</p>
-
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Penapis ekspor atursendiri</h1>
+
+    <p>Dalam JabRef, anda dapat mengatur sendiri
+    penapis ekspor sesuai dengan kehendak anda sendiri,
+    dengan cara seperti yang digunakan penapis standar lainnya.
+    Penapis ekspor didefinisikan dengan satu atau beberapa
+    <i>berkas tataletak</i>, yang dapat disiapkan dengan cara
+    merubah dari rutin pemformat sudah ada. Berkas tataletak 
+    anda perlu disiapkan dengan penyunting teks lain di luar JabRef.</p>
+
+    <h2>Menambah penapis ekspor atursendiri</h2>
+
+    <p>Berkas penapis ekspor yang sah harus mempunyai
+    ekstensi <b>.layout</b>. Untuk menambahkan penapis ekspor atursendiri
+    baru, <b>Pengaturan -> Pengaturan ekspor atursendiri</b>,
+    kemudian klik <b>Tambah baru</b>. Kotak dialog pengaturan akan muncul.
+    Anda perlu menuliskan nama penapis ekspor (yang akan muncul
+    dalam pilihan ketika anda menggunakan menu <b>Berkas ->
+    Ekspor</b>), lokasi berkas <b>.layout</b>, serta ekstensi berkas untuk
+    penapis ekspor (yang akan disarankan ketika anda menggunakan penapis
+    ekspor atursendiri yang anda buat).</p>
+
+    <h2>Membuat penapis ekspor</h2>
+
+    <p>Untuk melihat contoh bagaimana membuat penapis ekspor, anda perlu
+    mencari berkas tataletak <b>.layout</b> untuk penapis ekspor yang ada
+    di situs web muaturun kami.</p>
+
+    <h3>Berkas tataletak (.layout)</h3>
+
+    <p>Sebagai contoh kami menganggap sekarang kita membuat
+    penapis ekspor HTML.</p>
+
+    <p>Berkas penapis ekspor hanya mempunyai satu berkas utama
+    <b>.layout</b> saja, sehingga untuk contoh ini bisa diberi nama
+    <i>html.layout</i>. Disamping itu, anda bisa menambah dua berkas lagi
+    <i>html.begin.layout</i> dan <i>html.end.layout</i>. Berkas pertama
+    mengatur bagian awal dari keluaran, sedangkan berkas kedua
+    mengatur bagian akhir. JabRef akan mencari dua berkas ini setiap kali
+    penapis ekspor digunakan, dan jika ditemukan, akan menyalin persis
+    ke keluaran sebelum atau sesudah tiap entri dituliskan.</p>
+
+    <p>Catatan kedua berkas tambahan harus berada di direktori yang sama
+    dengan direktori dimana berkas <i>html.layout</i> berada, dan harus
+    mempunyai nama tambahan <b>.begin</b> dan <b>.end</b>.</p>
+
+    <p>Contoh berkas penapis tambahan tadi dapat berbentuk 
+    seperti berikut:</p>
+
+    <p><i>html.begin.layout</i>:<br />
+    <code><HTML><br />
+     <BODY> text="#275856"><br />
+    <basefont size="4" color="#2F4958"
+    face="arial"></code></p>
+
+    <p><i>html.end.layout</i>:<br />
+    <code></BODY><br />
+     </HTML></code></p>
+
+    <p>Berkas <i>html.layout</i> mengatur templet <i>bawaan</i>
+    untuk mengekspor satu entri. Apabila anda ingin menggunakan
+    beberapa templet untuk tipe entri yang berbeda, anda perlu
+    menambahkan berkas entri khusus <b>.layout</b>. Berkas tataletak ini 
+    harus berada di direktori yang sama dengan berkas tataletak utama,
+    serta diberi nama dengan menyisipkan <b>.entrytype</b> dalam
+    berkas tata letak utama. Nama tipe entri harus ditulis dengan 
+    huruf kecil semuanya. Pada contoh yang kami berikan, kami akan
+    menambahkan templet untuk entri buku, dan akan disimpan dalam 
+    berkas <i>html.book.layout</i>. Untuk PhD thesis, akan ditambahkan
+    dalam berkas <i>html.phdthesis.layout</i>, dll.
+    Berkas-berkas ini mirip dengan berkas tataletak bawaan, kecuali
+    hanya akan digunakan untuk entri yang mempunyai tipe sama.
+    Catatan, berkas bawaan dapat dengan mudah dibuat umum untuk
+    memenuhi semua tipe entri yang bisa digunakan di hampir semua
+    penapis ekspor.</p>
+
+    <h3>Format berkas tataletak</h3>
+
+    <p>Berkas tataletak dibuat menggunakan format markup sederhana
+    dimana perintah dikenali dengan awalan coret miring (\).
+    Teks lain yang tidak ada tanda perintah akan disalin secara
+    verbatim ke berkas keluaran.</p>
+
+    <h3>Perintah bidang</h3>
+
+    <p>Merupakan kata bebas yang dimulai dengan coret miring, misal
+    <code>\author</code>, <code>\editor</code>, <code>\title</code>
+    atau <code>\year</code>, akan diartikan sebagai acuan ke 
+    bidang terkait, yang disalin langsung ke berkas keluaran.</p>
+
+    <h3>Pemformat bidang</h3>
+
+    <p>Seringkali, ada perlunya melakukan pra proses isi bidang sebelum
+    keluaran. Hal ini dilakukan menggunakan <i>pemformat bidang</i> -
+    yaitu berupa kelas java yang mempunyai metoda tunggal untuk memipulasi
+    isi dari suatu bidang.</p>
+
+    <p>Pemformat digunakan dengan cara menyisipkan perintah <code>\format</code>
+    yang diikuti dengan nama pemformat dalam kurung kotak, dan
+    perintah bidang dalam kurung kurawal, misalnya:</p>
+
+    <p><code>\format[ToLowerCase]{\author}</code></p>
+
+    <p>Anda juga bisa menggunakan beberapa pemformat  yang dipisahkan dengan tanda
+    koma. Pemformat ini akan dipanggil berurutan, dari kiri ke kanan,
+    misalnya</p>
+
+    <p><code>\format[ToLowerCase,HTMLChars]{\author}</code></p>
+
+    <p>akan memanggil pemformat <b>ToLowerCase</b> terlebih dahulu,
+    kemudian <b>HTMLChars</b> untuk memformat hasil. 
+    Anda dapat menggunakan beberapa pemformat dengan cara ini.</p>
+
+    <p>Argumen untuk pemformat, dalam kurung kurawal,
+    tidak harus dalam bentuk perintah bidang. Anda dapat menyisipkan
+    teks normal, yang akan dibaca oleh pemformat
+    bukan sebagai isi dari bidang manapun. Hal ini sangat berguna untuk
+    bebrapa pemformat, misalnya pemformat CurrentDate (dijelaskan
+    dibawah).</p>
+
+    <p>Beberapa pemformat memerlukan argumen ekstra, memerlukan tanda kurung
+    setelah nama pemformat. Argumen boleh menggunakan tanda petik, yang diperlukan
+    jika menggunakan karakter kurung. Misalnya, <code>\format[Replace("\s,_")]{\journal}</code>
+    memanggil pemformat <b>Replace</b> dengan argumen <b>\s,_</b> (yang menghasilkan
+    bidang "journal" setelah mengganti semua spasi dengan garis bawah).
+    </p>
+
+    <p>Lihat dibawah ini daftar pemformat ekspor yang sudah dibuat.</p>
+
+    <h3>Keluaran kondisional</h3>
+
+    <p>Beberapa keluaran statik hanya mungkin dibuat
+    apabila ditentukan bidang spesifik. Sebagai contoh, kita ingin menulis
+    nama editor yang diikuti dengan teks <code>(Ed.)</code>. Hal ini bisa dilakukan
+    dengan cara berikut:</p>
+
+    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
+    (Ed.)</code></p>
+
+    <p>Namun demikian, jika bidang <code>editor</code> tidak ditentukan -
+    ketika dilakukan ekspor informasinya akan membingungkan - Kata
+    <code>(Ed.)</code> akan berada di sebelah kiri. Hal ini bisa dihindari
+    dengan menggunakan perintah <code>\begin</code> dan <code>\end</code>
+    :</p>
+
+    <p><code>\begin{editor}<br />
+    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br />
+     \end{editor}</code></p>
+
+    <p>Perintah <code>\begin</code> dan <code>\end</code> akan memastikan
+    teks yang berada diantaranya dicetak hanya jika bidang dalam tanda kurung kurawal 
+    didefinisikan untuk entri yang diekspor.</p>
+
+    <p>Blok kondisional bisa tergantung pada lebih dari satu bidang. Pada kasus ini
+    isi dalam blok hanya dicetak jika semua bindangnya didefinisikan terlebih dahulu.
+    Untuk membuat blok, caranya adalah dengan menulis bidang-bidang dengan pemisah titik koma.
+    Sebagai contoh, untuk menulis keluaran <code>year</code> dam <code>month</code>, gunakan
+    blok seperti dibawah ini:</p>
+
+    <p><code>\begin{year;month}Month: \format[HTMLChars]{\month}\end{year;month}</code></p>
+
+    <p>yang akan mencetak "Month: " ditambah denngan bidang <code>month</code>, jika
+    bidang <code>year</code> didefinisikan.</p>
+
+    <p><b>Catatan:</b> Perintah <code>\begin</code> dan
+    <code>\end</code> adalah perintah umum untuk membuat berkas tataletak
+    yang bisa digunakan untuk berbagai tipe entri.</p>
+
+    <h3>Keluaran grup</h3>
+
+    <p>If you wish to separate your entries
+    into groups based on a certain field, use the grouped output
+    commands. Grouped output is very similar to conditional output,
+    except that the text in between is printed only if the field
+    referred in the curly braces has changed value.</p>
+
+    <p>For example, let's assume I wish to group by keyword. Before
+    exporting the file, make sure you have sorted your entries
+    based on keyword. Now use the following commands to group by
+    keyword:</p>
+
+    <p><code>\begingroup{keywords}New Category:
+    \format[HTMLChars]{\keywords}<br />
+     \endgroup{keywords}</code></p>
+
+    <h2>Sharing your work</h2>
+
+    <p>With external layout files, it's
+    fairly simple to share custom export formats between users. If
+    you write an export filter for a format not supported by
+    JabRef, or an improvement over an existing one, we encourage
+    you to post your work on our SourceForge.net page. The same
+    goes for formatter classes that you write. We'd be happy to
+    distribute a collection of submitted layout files, or to add to
+    the selection of standard export filters and formatters.</p>
+
+    <p>Starting with JabRef 2.4 you can also package your 
+	ExportFormat or LayoutFormatter as a plug-in. If you do so,
+	you can provide a single zip-file to other user to make use
+	of your ExportFormat. For an example download the JabRef
+	source release and have a look at the directory
+	<code>src/plugins/</code>. Don't hesitate to stop by the
+	forums on Sourceforge, since we don't have extensive documentation, yet.</p>
+
+
+    <h2>Built-in export formatters</h2>
+
+    <p>JabRef provides the following set of formatters:</p>
+
+    <ul>
+        <li><code>Authors</code> : this formatter provides formatting options for the author and editor fields; for detailed information, see below. It deprecates a range of dedicated formatters provided in versions of JabRef prior to 2.7.</li>
+
+        <li><code>CreateDocBookAuthors</code> : formats the author
+        field in DocBook style.</li>
+
+        <li><code>CreateDocBookEditors</code> : to be
+        documented.</li>
+
+        <li><code>CurrentDate</code> : outputs the current date.
+        With no argument, this formatter outputs the current date
+        and time in the format "yyyy.MM.dd hh:mm:ss z" (date, time
+        and time zone). By giving a different format string as
+        argument, the date format can be customized. E.g.
+        <code>\format[CurrentDate]{yyyy.MM.dd}</code> will give the
+        date only, e.g. 2005.11.30.</li>
+
+        <li><code>Default</code> : takes a single argument, which serves as a default value.
+        If the string to format is non-empty, it is output without changes. If it is empty,
+        the default value is output. For instance, <code>\format[Default(unknown)]{\year}</code>
+        will output the entry's year if set, and "unknown" if no year is set.</li>
+	
+        <li><code>DOIStrip</code> : strips any prefixes from the DOI string.</li>
+        <li><code>DOICheck</code> : provides the full url for a DOI link.</li>
+
+        <li><code>FileLink(filetype)</code> : if no argument is given, this formatter outputs
+        the first external file link encoded in the field. To work, the formatter must
+        be supplied with the contents of the "file" field.
+        <p>This formatter takes the name of an external file type as an optional argument,
+        specified in parentheses after the formatter name. For instance,
+        <code>\format[FileLink(pdf)]{\file}</code> specifies <code>pdf</code> as an
+        argument. When an argument is given, the formatter selects the first file
+        link of the specified type. In the example, the path to the first PDF link will
+        be output.</p></li>
+
+        <li><code>FirstPage</code> : returns the first page from the "pages" field, if set.
+            For instance, if the pages field is set to "345-360" or "345--360",
+            this formatter will return "345".</li>
+
+        <li><code>FormatPagesForHTML</code> : replaces "--" with "-".</li>
+
+        <li><code>FormatPagesForXML</code> : replaces "--" with an XML en-dash.</li>
+
+        <li><code>GetOpenOfficeType</code> : returns the number used by the OpenOffice.org
+        bibliography system (versions 1.x and 2.x) to denote the type of this entry.</li>
+
+        <li><code>HTMLChars</code> : replaces TeX-specific special
+        characters (e.g. {\^a} or {\"{o}}) with their HTML
+        representations, and translates LaTeX commands \emph, \textit,
+        \textbf into HTML equivalents.</li>
+
+        <li><code>HTMLParagraphs</code> : interprets two
+        consecutive newlines (e.g. \n \n) as the beginning of a new
+        paragraph and creates paragraph-html-tags accordingly.</li>
+
+        <li><code>IfPlural</code> : outputs its first argument if the input field looks
+        like an author list with two or more names, or its second argument otherwise.
+        E.g. <code>\format[IfPlural(Eds.,Ed.)]{\editor}</code> will output "Eds." if there
+        is more than one editor, and "Ed." if there is only one.</li>
+
+        <li><code>LastPage</code> : returns the last page from the "pages" field, if set.
+            For instance, if the pages field is set to "345-360" or "345--360",
+            this formatter will return "360".</li>
+
+        <li><code>Number</code> : outputs the 1-based sequence number of the current entry in the
+        current export. This formatter can be used to make a numbered list of entries. The
+        sequence number depends on the current entry's place in the current sort order, not on
+        the number of calls to this formatter.</li>
+
+        <li><code>RemoveBrackets</code> : removes all curly brackets "{" or "}".</li>
+
+        <li><code>RemoveBracketsAddComma</code> : to be documented.</li>
+
+        <li><code>RemoveLatexCommands</code> : removes LaTeX
+        commands like <code>\em</code>, <code>\textbf</code>, etc.
+        If used together with <code>HTMLChars</code> or
+        <code>XMLChars</code>, this formatter should be called
+        last.</li>
+
+        <li><code>RemoveTilde</code> : replaces the tilde character
+        used in LaTeX as a non-breakable space by a regular space.
+        Useful in combination with the NameFormatter discussed in
+        the next section.</li>
+
+        <li><code>RemoveWhitespace</code> : removes all whitespace characters.</li>
+
+        <li><code>Replace(regexp,replacewith)</code> : does a regular expression replacement.
+        To use this formatter, a two-part argument must be given. The parts are
+        separated by a comma. To indicate the comma character, use an escape
+        sequence: \,<br/> <br/>
+        The first part is the regular expression to search for. Remember that any commma
+        character must be preceded by a backslash, and consequently a literal backslash must
+        be written as a pair of backslashes. A description of Java regular expressions can be
+        found at:<br/>
+         http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
+         <br/> <br/>
+        The second part is the text to replace all matches with.</li>
+
+        <li><code>RTFChars</code> : replaces TeX-specific special
+        characters (e.g. {\^a} or {\"{o}}) with their RTF
+        representations, and translates LaTeX commands \emph, \textit,
+        \textbf into RTF equivalents.</li>
+
+        <li><code>ToLowerCase</code> : turns all characters into
+        lower case.</li>
+
+        <li><code>ToUpperCase</code> : turns all characters into
+        upper case.</li>
+
+        <li><code>WrapContent</code> : This formatter outputs the input value after adding a
+        prefix and a postfix, as long as the input value is non-empty. If the input value
+        is empty, an empty string is output (the prefix and postfix are not output in this case).
+        The formatter requires an argument containing the prefix and postix separated
+        by a comma. To include the comma character in either, use an escape sequence
+        (\,).</li>
+
+        <li><code>WrapFileLinks</code> : See below.</li>
+
+        <li><code>XMLChars</code> : replaces TeX-specific special
+        characters (e.g. {\^a} or {\"{o}}) with their XML
+        representations.</li>
+
+    </ul>
+
+<h3>The <code>Authors</code> formatter</h3>
+
+<p>To accommodate for the numerous citation styles, the <code>Authors</code> formatter allows flexible control over the layout of the author list. The formatter takes a comma-separated list of options, by which the default values can be overridden. The following option/value pairs are currently available, where the default values are given in curly brackets.</p>
+<dl>
+<dt><code>AuthorSort = [ {FirstFirst} | LastFirst | LastFirstFirstFirst ]</code></dt>
+<dd>specifies the order in which the author names are formatted.
+	<ul>
+		<li><code>FirstFirst</code> : first names are followed by the surname.</li>
+		<li><code>LastFirst</code> : the authors' surnames are followed by their first names, separated by a comma.</li>		
+		<li><code>LastFirstFirstFirst</code> : the first author is formatted as LastFirst, the subsequent authors as FirstFirst.</li>
+	</ul>
+</dd>
+
+<dt><code>AuthorAbbr = [ FullName | LastName | {Initials} | InitialsNoSpace | FirstInitial | MiddleInitial ]</code></dt>
+<dd>specifies how the author names are abbreviated.
+	<ul>
+		<li><code>FullName</code> : shows full author names; first names are not abbreviated.</li>
+		<li><code>LastName</code> : show only surnames, first names are removed.</li> 
+		<li><code>Initials</code> : all first names are abbreviated.</li> 
+		<li><code>InitialsNospace</code> : as Initials, with any spaces between initials removed.</li>
+		<li><code>FirstInitial</code> : only first initial is shown.</li> 
+		<li><code>MiddleInitial</code> : first name is shown, but all middle names are abbreviated.</li>
+	</ul>	
+</dd>
+
+<dt><code>AuthorPunc = [ {FullPunc} | NoPunc | NoComma | NoPeriod ]</code></dt>
+<dd>specifies the punctuation used in the author list when <code>AuthorAbbr</code> is used
+	<ul>
+		<li><code>FullPunc</code> : no changes are made to punctuation.</li>
+		<li><code>NoPunc</code> : all full stops and commas are removed from the author name.</li>
+		<li><code>NoComma</code> : all commas are removed from the author name.</li>
+		<li><code>NoPeriod</code> : all full stops are removed from the author name.</li>
+	</ul>	
+</dd>
+
+<dt><code>AuthorSep = [ {Comma} | And | Colon | Semicolon | Sep=<string> ]</code></dt>
+<dd>specifies the separator to be used between authors. Any separator can be specified, with the <code>Sep=<string></code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd> 
+
+<dt><code>AuthorLastSep = [ Comma | {And} | Colon | Semicolon | Amp | Oxford | LastSep=<string> ]</code></dt>
+<dd>specifies the last separator in the author list. Any separator can be specified, with the <code>LastSep=<string></code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd>
+
+<dt><code>AuthorNumber = [ {inf} | <integer> ]</code></dt>
+<dd>specifies the number of authors that are printed. If the number of authors exceeds the maximum specified, the authorlist is replaced by the first author, followed by <code>EtAlString</code>.</dd>
+
+<dt><code>EtAlString = [ { et al.} | EtAl=<string> ]</code></dt>
+<dd>specifies the string used to replace multiple authors. Any string can be given, using <code>EtAl=<string></code></dd>
+
+</dl>
+
+<p>If an option is unspecified, the default value (shown in curly brackets above) is used. Therefore, only layout options that differ from the defaults need to be specified. The order in which the options are defined is (mostly) irrelevant. So, for example,</p>
+<p><code>\format[Authors(Initials,Oxford)]{\author}</code></p>
+<p>is equivalent to</p>
+<p><code>\format[Authors(Oxford,Initials)]{\author}</code></p>
+<p>As mentioned, the order in which the options are specified is irrelevant. There is one possibility for ambiguity, and that is if both <code>AuthorSep</code> and <code>AuthorLastSep</code> are given. In that case, the first applicable value encountered would be for <code>AuthorSep</code>, and the second for <code>AuthorLastSep</code>. It is good practise to specify both when changing the default, to avoid ambiguity.</p>
+
+<h4>Examples</h4>
+<p>Given the following authors, <i>"Joe James Doe and Mary Jane and Bruce Bar and Arthur Kay"</i> ,the <code>Authors</code> formatter will give the following results:</p>
+<dl>
+<dt><code>Authors()</code>, or equivalently, <code>Authors(FirstFirst,Initials,FullPunc,Comma,And,inf,EtAl= et al.)</code></dt>
+<dd><pre>J. J. Doe, M. Jane, B. Bar and A. Kay</pre></dd>
+
+<dt><code>Authors(LastFirstFirstFirst,MiddleInitial,Semicolon)</code></dt>
+<dd><pre>Doe, Joe J.; Mary Jane; Bruce Bar and Arthur Kay</pre></dd>
+
+<dt><code>Authors(LastFirst,InitialsNoSpace,NoPunc,Oxford)</code></dt>
+<dd><pre>Doe JJ, Jane M, Bar B, and Kay A</pre></dd>
+
+<dt><code>Authors(2,EtAl= and others)</code></dt>
+<dd><pre>J. J. Doe and others</pre></dd>
+</dl>
+<p>Most commonly available citation formats should be possible with this formatter. For even more advanced options, consider using the Custom Formatters detailed below.</p>
+
+<h3>The <code>WrapFileLinks</code> formatter</h3>
+
+<p>This formatter iterates over all file links, or all file links of a specified type, outputting a format string given as the first argument. The format string can contain a number of escape sequences indicating file link information to be inserted into the string.</p>
+<p>This formatter can take an optional second argument specifying the name of a file type. If specified, the iteration will only include those files with a file type matching the given name (case-insensitively). If specified as an empty argument, all file links will be included.</p>
+<p> After the second argument, pairs of additional arguments can be added in order to specify regular expression replacements to be done upon the inserted link information before insertion into the output string. A non-paired argument will be ignored. In order to specify replacements without filtering on file types, use an empty second argument.</p>
+<p>The escape sequences for embedding information are as follows:</p>
+<ul>
+	<li><code>\i</code> : This inserts the iteration index (starting from 1), and can be useful if the output list of files should be enumerated.</li>
+	<li><code>\p</code> : This inserts the file path of the file link.</li>
+	<li><code>\f</code> : This inserts the name of the file link's type.</li>
+	<li><code>\x</code> : This inserts the file's extension, if any.</li>
+	<li><code>\d</code> : This inserts the file link's description, if any.</li>
+</ul>
+<p>For instance, an entry could contain a file link to the file "/home/john/report.pdf" of the "PDF" type with description "John's final report". Using the WrapFileLinks formatter with the following argument:</p>
+<p><code>\format[WrapFileLinks(\i. \d (\p))]{\file}</code></p>
+<p>would give the following output:</p>
+<pre>
+    1. John's final report (/home/john/report.pdf)
+
+</pre>
+<p>If the entry contained a second file link to the file "/home/john/draft.txt" of the "Text file" type with description 'An early "draft"', the output would be as follows:</p>
+<pre>
+    1. John's final report (/home/john/report.pdf)
+    2. An early "draft" (/home/john/draft.txt)
+
+</pre>
+<p>If the formatter was called with a second argument, the list would be filtered. For instance:</p>
+<p><code>\format[WrapFileLinks(\i. \d (\p),,text file)]{\file}</code></p>
+<p> would show only the text file:</p>
+<pre>
+    1. An early "draft" (/home/john/draft.txt)
+
+</pre>
+<p>If we wanted this output to be part of an XML styled output, the quotes in the file description could cause problems. Adding two additional arguments to translate the quotes into XML characters solves this:</p>
+<p><code>\format[WrapFileLinks(\i. \d (\p),,text file,",&quot;)]{\file}</code></p>
+<p>would give the following output:</p>
+<pre>
+    1. An early "draft" (/home/john/draft.txt)
+
+</pre>
+<p>Additional pairs of replacements could be added.</p>
+
+
+    <h3>Custom formatters</h3>
+    <p>If none of the available formatters can do what you want to
+    achieve, you can add your own by implementing the
+    <code>net.sf.jabref.export.layout.LayoutFormatter</code>
+    interface. If you insert your class into the
+    <code>net.sf.jabref.export.layout.format</code> package, you
+    can call the formatter by its class name only, like with the
+    standard formatters. Otherwise, you must call the formatter by
+    its fully qualified name (including package name). In any case,
+    the formatter must be in your classpath when running
+    JabRef.</p>
+
+    <h2><a name="NameFormatter"
+       id="NameFormatter">Using Custom Name Formatters</a></h2>
+
+    <p>From JabRef 2.2, it is possible to define custom name
+    formatters using the bibtex-sty-file syntax. This allows
+    ultimate flexibility, but is a cumbersome to write</p>
+
+    <p>You can define your own formatter in the preference tab
+    "Name Formatter" using the following format and then use it
+    with the name given to it as any other formatter</p>
+    <code><case1>@<range11>@<format>@<range12>@<format>@<range13>...@@<br />
+
+     <case2>@<range21>@... and so on.</code>
+
+    <p>This format first splits the task to format a list of author
+    into cases depending on how many authors there are (this is
+    since some formats differ depending on how many authors there
+    are). Each individual case is separated by @@ and contains
+    instructions on how to format each author in the case. These
+    instructions are separated by a @.</p>
+
+    <p>Cases are identified using integers (1, 2, 3, etc.) or the
+    character * (matches any number of authors) and will tell the
+    formatter to apply the following instructions if there are a
+    number of less or equal of authors given.</p>
+
+    <p>Ranges are either
+    <code><integer>..<integer></code>,
+    <code><integer></code> or the character <code>*</code>
+    using a 1 based index for indexing authors from the given list
+    of authors. Integer indexes can be negative to denote them to
+    start from the end of the list where -1 is the last author.</p>
+
+    <p>For instance with an authorlist of "Joe Doe and Mary Jane
+    and Bruce Bar and Arthur Kay":</p>
+
+    <ul>
+        <li>1..3 will affect Joe, Mary and Bruce</li>
+
+        <li>4..4 will affect Arthur</li>
+
+        <li>* will affect all of them</li>
+
+        <li>2..-1 will affect Mary, Bruce and Arthur</li>
+    </ul>
+
+    <p>The <code><format></code>-strings use the Bibtex
+    formatter format:</p>
+
+    <p>The four letters v, f, l, j indicate the name parts von,
+    first, last, jr which are used within curly braces. A single
+    letter v, f, l, j indicates that the name should be
+    abbreviated. If one of these letters or letter pairs is
+    encountered JabRef will output all the respective names
+    (possibly abbreviated), but the whole expression in curly
+    braces is only printed if the name part exists.</p>
+
+    <p>For instance if the format is "{ll} {vv {von Part}} {ff}"
+    and the names are "Mary Kay and John von Neumann", then JabRef
+    will output "Kay Mary" (with two space between last and first)
+    and "Neuman von von Part John".</p>
+
+    <p>I give two examples but would rather point you to the bibtex
+    documentation.</p>
+
+    <p>Small example: <code>"{ll}, {f.}"</code> will turn
+    <code>"Joe Doe"</code> into <code>"Doe, J."</code></p>
+
+    <p>Large example:</p>
+
+    <blockquote>
+        <p>To turn:</p>
+
+        <p><code>"Joe Doe and Mary Jane and Bruce Bar and Arthur
+        Kay"</code></p>
+
+        <p>into</p>
+
+        <p><code>"Doe, J., Jane, M., Bar, B. and Kay,
+        A."</code></p>
+
+        <p>you would use</p>
+
+        <p><code>1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll},
+        {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll},
+        {f}.</code></p>
+    </blockquote>
+
+    <p>If somebody would like to write a better tutorial about
+    this: Write a mail to one of the JabRef mailinglists!</p>
+
+
+</body>
+</html>
diff --git a/src/help/in/DatabaseProperties.html b/src/help/in/DatabaseProperties.html
index 14f12dc..8b40dc9 100644
--- a/src/help/in/DatabaseProperties.html
+++ b/src/help/in/DatabaseProperties.html
@@ -1,51 +1,51 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Jendela propereti basisdata</h1>
-
-     <p><em>Dibuka dari meu utama <b>Berkas -> Properti basisdata</b></em></p>
-
-     Jendela properti basisdata membantu anda untuk mengatur beberapa hal yang terkait
-     dengan basisdata.
-
-     <h2>Enkoding basisdata</h2>
-
-     <p>Pengaturan ini menentukan enkoding karakter yang akan digunakan JabRef
-     ketika menulis berkas basisdata ke cakra. Perubahan ini akan menindih pengaturan
-     yang dilakukan melalui dialog preferensi untuk basisdata. JabRef menuliskan enkoding
-     di bagian atas dari berkas bib, agar ketika anda membuka berkas akan terlebih dahulu
-     mengenal enkoding karakter yang digunakan.</p>
-
-     <h2>Mengganti direktori berkas</h2>
-
-     <p>Pengaturan ini digunakan untuk menyatakan lokasi yang digunakan untuk tautan berkas umum
-     (yang dinyatakan dalam bidang <em>berkas</em>), serta untuk legasi tautan PDF/PS
-     (bidang <em>pdf</em> dan <em>ps</em> digunaan di JabRef sebelum versi 2.3, 
-     tetapi di versi selanjutnya sampai sekarang diganti dengan tautan berkas umum).</p>
-
-     <p>Lokasi relatif dapat digunakan juga. Lokasi relatif ini maksudnya berkas dapat dinyatakan
-     relatif terhadap berkas bib. Cara mengaturnya adalah dengan menggunakan "." 
-     (tanpa tanda petik) yang berarti berkas berada dalam direktori yang sama dengan
-     lokasi berkas bib.</p>
-
-     <p>Pengaturan ini menindih pengaturan direktori umum melalui dialog Preferensi. 
-     Apabila tidak ada kotak isian dibiarkan kosong, direktori umum akan digunakan.</p>
-
-     <h2>Proteksi basisdata</h2>
-
-     <p>Pengaktifan pilihan ini akan memaksa memeriksa perubahan yang dilakukan secara eksternal
-     pada berkas basisdata sebelum menyimpan. Jika tidak diaktifkan, pengguna mempunyai bisa
-     menyimpan berkas walaupun pengguna lain telah melakukan perubahan data dalam basisdata, tanpa
-     melakukan pemeriksaan perubahan - serta ada peringatan tentang adanya perubahan.
-     Jika pilihan proteksi ini aktif, pengguna hanya bisa menyimpan berkas setelah 
-     perubahan eksternal diperiksa (pengguna bisa mengabaikan perubahan individual 
-     ketika melakukan pemeriksaan).</p>
-
-     <p><b>Catatan:</b> fitur ini bukan berhubungan dengan keamanan, namun hanya untuk 
-     menghindari penindihan perubahan yang sudah dilakukan oleh pengguna lain.
-     Fitur ini tidak akan mengenali perubahan pengguna yang tidak sah.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Jendela propereti basisdata</h1>
+
+     <p><em>Dibuka dari meu utama <b>Berkas -> Properti basisdata</b></em></p>
+
+     Jendela properti basisdata membantu anda untuk mengatur beberapa hal yang terkait
+     dengan basisdata.
+
+     <h2>Enkoding basisdata</h2>
+
+     <p>Pengaturan ini menentukan enkoding karakter yang akan digunakan JabRef
+     ketika menulis berkas basisdata ke cakra. Perubahan ini akan menindih pengaturan
+     yang dilakukan melalui dialog preferensi untuk basisdata. JabRef menuliskan enkoding
+     di bagian atas dari berkas bib, agar ketika anda membuka berkas akan terlebih dahulu
+     mengenal enkoding karakter yang digunakan.</p>
+
+     <h2>Mengganti direktori berkas</h2>
+
+     <p>Pengaturan ini digunakan untuk menyatakan lokasi yang digunakan untuk tautan berkas umum
+     (yang dinyatakan dalam bidang <em>berkas</em>), serta untuk legasi tautan PDF/PS
+     (bidang <em>pdf</em> dan <em>ps</em> digunaan di JabRef sebelum versi 2.3, 
+     tetapi di versi selanjutnya sampai sekarang diganti dengan tautan berkas umum).</p>
+
+     <p>Lokasi relatif dapat digunakan juga. Lokasi relatif ini maksudnya berkas dapat dinyatakan
+     relatif terhadap berkas bib. Cara mengaturnya adalah dengan menggunakan "." 
+     (tanpa tanda petik) yang berarti berkas berada dalam direktori yang sama dengan
+     lokasi berkas bib.</p>
+
+     <p>Pengaturan ini menindih pengaturan direktori umum melalui dialog Preferensi. 
+     Apabila tidak ada kotak isian dibiarkan kosong, direktori umum akan digunakan.</p>
+
+     <h2>Proteksi basisdata</h2>
+
+     <p>Pengaktifan pilihan ini akan memaksa memeriksa perubahan yang dilakukan secara eksternal
+     pada berkas basisdata sebelum menyimpan. Jika tidak diaktifkan, pengguna mempunyai bisa
+     menyimpan berkas walaupun pengguna lain telah melakukan perubahan data dalam basisdata, tanpa
+     melakukan pemeriksaan perubahan - serta ada peringatan tentang adanya perubahan.
+     Jika pilihan proteksi ini aktif, pengguna hanya bisa menyimpan berkas setelah 
+     perubahan eksternal diperiksa (pengguna bisa mengabaikan perubahan individual 
+     ketika melakukan pemeriksaan).</p>
+
+     <p><b>Catatan:</b> fitur ini bukan berhubungan dengan keamanan, namun hanya untuk 
+     menghindari penindihan perubahan yang sudah dilakukan oleh pengguna lain.
+     Fitur ini tidak akan mengenali perubahan pengguna yang tidak sah.</p>
+</body>
+</html>
diff --git a/src/help/in/EntryEditorHelp.html b/src/help/in/EntryEditorHelp.html
old mode 100755
new mode 100644
index 26973f4..52a7b6d
--- a/src/help/in/EntryEditorHelp.html
+++ b/src/help/in/EntryEditorHelp.html
@@ -1,138 +1,138 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-<h1>Penyunting entri</h1>
-
-    <p><em>Dibuka dari jendela utama dengan klik-ganda salah satu
-    baris daftar entri yang ada, atau dengan cara memilih salah satu
-    baris kemudian tekan ENTER. Untuk menutup panel penyunting 
-    dengan cara menekan tombol ESC.</em></p>
-
-    <p>Dalam panel ini anda dapat mengisikan semua informasi yang
-    relevan untuk entri yang anda pilih. Penyunting entri memeriksa
-    semua tipe entri yang ada, dan memberikan anda keleluasaan untuk
-    menyunting bidang-bidang utama yang diperlukan serta bidang tambahan
-    lainnya yang akan digunakan dalam referensi menggunakan 
-    <em>bibtex</em>. Selain itu ada beberapa bidang yang akan dimasukkan
-    dalam <em>Bidang umum</em>, yang umum ada untuk semua tipe entri.</p>
-
-    <p>Anda sepenuhnya dapat mengatur bidang mana yang anda inginkan
-    masuk dalam katagori diperlukan serta mana saja yang bersifat tambahan
-    untuk tiap tipe entri. Selain itu anda juga bisa mengatur bidang apa saja
-    yang akan masuk dalam tab Bidang umum. Silahkan baca 
-    <a href="CustomEntriesHelp.html">Pengaturan tipe entri</a>
-    untuk informasi yang lebih terperinci.</p>
-
-    <p>Informasi lain tentang bagaimana mengisi bidang yang ada, silahkan baca
-    <a href="BibtexHelp.html">Bantuan bibtex</a>.</p>
-
-    <h2>Panel penyunting entri</h2>
-
-    <p>Penyunting entri mempunyai enam panel: 
-    <em>Bidang diperlukan</em>, <em>Bidang tambahan</em>,
-    <em>Umum</em>, <em>Abstrak</em>, <em>Ulasan</em> dan
-    <em>sumber BibTeX</em>, dimana <em>Umum</em>,
-    <em>Abstrak</em> dan <em>Ulasan</em> dapat diatur (baca
-    <a href="GeneralFields.html">Pengaturan bidang umum</a> untuk
-    penjelasan terperinci). Dalam tiga panel yang pertama, TAB dan SHIFT-TAB
-    bisa digunakan untuk menggerakkan lokasi bidang teks.</p>
-
-    <p>Berpindah penyuntingan dari panel ke panel dapat menggunakan
-    tombol TAB dengan kombinasi tombol ketik lainnya:CTRL-TAB atau CTRL-PLUS
-    untuk berpindah ke tab sebelah kanan, sedangkan CTRL-SHIFT-TAB atau
-    CTRL-MINUS untuk berpindah ke tab sebelah kiri. Anda dapat berpindah
-    ke entri sebelumnya atau setelahnya dengan menekan CTRL-SHIFT-DOWN atau
-    CTRL-SHIFT-UP. Anda bisa juga menggunakan tombol panah yang ada di 
-    kotak bantuan.</p>
-
-    <p>Panel <em>Sumber BibTeX</em> menampilkan bagaimana entri
-    hasilnya jika basisdata anda simpan ke format <em>bibtex</em>.
-    Jika anda menginginkan, anda bisa menyunting sumber <em>bibtex</em>
-    langsung dari penel ini. Ketika anda berpindah ke panel lainnya,
-    tekan CTRL-S atau tutup penyunting entri, JabRef akan menyesuaikan
-    perubahan yang anda lakukan di penel Sumber BibTeX. Apabila ada 
-    kesalahan, pesan pemberitahuan akan muncul, dan memberikan pilihan
-    apakah anda akan memperbaikinya atau mengembalikan ke isi sebelumnya.
-    Jika anda memilih <strong>Tampilkan sumber BibTeX sebagai bawaan</strong> di panel
-    <strong>Penyunting Entri</strong> dari menu 
-    <strong>Pengaturan->Preferensi</strong>, panel sumber BibTeX akan muncul
-    satu-satunya panel ketika anda membuka penyunting entri. Jika anda lebih suka
-    menyunting sumber daripada menggunakan panel penyunting, inilah pilihan
-    yang tepat untuk anda.</p>
-
-    <p><strong>Saran:</strong> Apabila basisdata anda mempunyai bidang
-    yang tidak dikenal oleh JabRef, bidang tersebut akan muncul di panel 
-    sumber.</p>
-
-    <h2>Memeriksa konsistensi bidang</h2>
-
-    <p>Apabila isi dari bidang berubah, JabRef akan memeriksa apakah
-    isi yang baru dapat diterima. Untuk tipe bidang yang digunakan 
-    <em>bibtex</em>, isinya diperiksa berdasar penggunaan karakter '#'.
-    Simbol pagar ini <em>hanya</em> boleh digunakan secara berpasangan
-    (kecuali untuk penulisan, '\#'), yang bermakna melipat string
-    <em>bibtex</em> yang diacu. JabRef tidak akan memeriksa jika string
-    yang diacu benar-benar ada (ini bukan buka suatu tipuan, karena gaya
-    <em>bibtex</em> yang anda gunakan dapat mendefinisikan kumpulan
-    string bebas yang tidak dikenali JabRef).</p>
-
-    <p>Apabila isi tidak dapat diterima, bidang akan berubah warna menjadi
-    merah, yang menandakan adanya kesalahan. Jika hal ini terjadi, perubahan
-    tidak akan disimpan.</p>
-
-    <!--<h2>Word/name autocompletion</h2>
-
-    <p>The entry editor offers autocompletion of words. In the Preferences dialog
-    you can enable or disable autocompletion, and choose for which fields
-    autocompletion is active.</p>
-
-    <p>With autocompletion, JabRef records all words that appear in
-    each of the chosen fields throughout your database. Whenever you write
-    the beginning of one of these words, it will be suggested visually. To
-    ignore the suggestion, simply write on. To accept the suggestion,
-    either press <em>ENTER</em> or use your arrow keys or other keys to
-    remove the selection box around the suggested characters.</p>
-
-    <p><em>Note:</em> the words considered for suggestion are only the ones
-    appearing in the same field in entries of the same database as the one you
-    are editing. There are many ways to realise this kind of feature, and if you feel
-    it should have been implemented differently, we'd like to hear your suggestions!</p>
-
-    <h2>Copy <em>bibtex</em> key</h2>
-
-    <p>Pressing CTRL-K or the 'key' button causes the <em>bibtex</em> key for your entry
-    to be copied to the clipboard.</p>
-    -->
-
-    <h2>Kunci <em>bibtex</em> otomatis</h2>
-
-    <p>Tekan CTRL-G atau gunakan 
-    tombol 'membuat kunci BibTeX' (tongkat ajaib) untuk membuat kunci
-    <em>bibtex</em> secara otomatis berdasarkan isi dari entri yang berada di
-    Bidang diperlukan.</p>
-
-    <p>Informasi lebih lanjut bagaimana JabRef membuat kunci
-    <em>bibtex</em>, silahkan baca
-    <a href="LabelPatterns.html">Pengaturan pembuat kunci BibTex</a>.</p>
-
-    <h2>Pengisian otomatis kata/nama</h2>
-
-    <p>JabRef mempunyai fitur pengisian otomatis kata/nama.
-    Pengaturan fitur ini dapat diubah dari <b>Pengaturan -> 
-    Preferensi -> Penyunting entri</b>. Pengaturan bawaan adalah
-    aktif untuk semua bidang yang umum digunakan.</p>
-
-    <p>Ketika menyunting satu bidang yang pengisian otomatisnya aktif,
-    JabRef akan mencoba menyarankan kata lengkap ketika anda menulis,
-    berdasarkan kata-kata yang digunakan di mana-mana bidang dalam basisdata
-    anda. Saran kata akan muncul dalam bentuk teks warna terang. Jika ada
-    beberapa kata yang mungkin, anda bisa menggunakan tombol PAGE UP dan
-    PAGE DOWN untuk melihat kata-kata yang disarankan. Pilih salah satu
-    kata, kemudian tekan ENTER. Untuk mengabaikan saran, teruskan menulis kata
-    anda sendiri.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+<h1>Penyunting entri</h1>
+
+    <p><em>Dibuka dari jendela utama dengan klik-ganda salah satu
+    baris daftar entri yang ada, atau dengan cara memilih salah satu
+    baris kemudian tekan ENTER. Untuk menutup panel penyunting 
+    dengan cara menekan tombol ESC.</em></p>
+
+    <p>Dalam panel ini anda dapat mengisikan semua informasi yang
+    relevan untuk entri yang anda pilih. Penyunting entri memeriksa
+    semua tipe entri yang ada, dan memberikan anda keleluasaan untuk
+    menyunting bidang-bidang utama yang diperlukan serta bidang tambahan
+    lainnya yang akan digunakan dalam referensi menggunakan 
+    <em>bibtex</em>. Selain itu ada beberapa bidang yang akan dimasukkan
+    dalam <em>Bidang umum</em>, yang umum ada untuk semua tipe entri.</p>
+
+    <p>Anda sepenuhnya dapat mengatur bidang mana yang anda inginkan
+    masuk dalam katagori diperlukan serta mana saja yang bersifat tambahan
+    untuk tiap tipe entri. Selain itu anda juga bisa mengatur bidang apa saja
+    yang akan masuk dalam tab Bidang umum. Silahkan baca 
+    <a href="CustomEntriesHelp.html">Pengaturan tipe entri</a>
+    untuk informasi yang lebih terperinci.</p>
+
+    <p>Informasi lain tentang bagaimana mengisi bidang yang ada, silahkan baca
+    <a href="BibtexHelp.html">Bantuan bibtex</a>.</p>
+
+    <h2>Panel penyunting entri</h2>
+
+    <p>Penyunting entri mempunyai enam panel: 
+    <em>Bidang diperlukan</em>, <em>Bidang tambahan</em>,
+    <em>Umum</em>, <em>Abstrak</em>, <em>Ulasan</em> dan
+    <em>sumber BibTeX</em>, dimana <em>Umum</em>,
+    <em>Abstrak</em> dan <em>Ulasan</em> dapat diatur (baca
+    <a href="GeneralFields.html">Pengaturan bidang umum</a> untuk
+    penjelasan terperinci). Dalam tiga panel yang pertama, TAB dan SHIFT-TAB
+    bisa digunakan untuk menggerakkan lokasi bidang teks.</p>
+
+    <p>Berpindah penyuntingan dari panel ke panel dapat menggunakan
+    tombol TAB dengan kombinasi tombol ketik lainnya:CTRL-TAB atau CTRL-PLUS
+    untuk berpindah ke tab sebelah kanan, sedangkan CTRL-SHIFT-TAB atau
+    CTRL-MINUS untuk berpindah ke tab sebelah kiri. Anda dapat berpindah
+    ke entri sebelumnya atau setelahnya dengan menekan CTRL-SHIFT-DOWN atau
+    CTRL-SHIFT-UP. Anda bisa juga menggunakan tombol panah yang ada di 
+    kotak bantuan.</p>
+
+    <p>Panel <em>Sumber BibTeX</em> menampilkan bagaimana entri
+    hasilnya jika basisdata anda simpan ke format <em>bibtex</em>.
+    Jika anda menginginkan, anda bisa menyunting sumber <em>bibtex</em>
+    langsung dari penel ini. Ketika anda berpindah ke panel lainnya,
+    tekan CTRL-S atau tutup penyunting entri, JabRef akan menyesuaikan
+    perubahan yang anda lakukan di penel Sumber BibTeX. Apabila ada 
+    kesalahan, pesan pemberitahuan akan muncul, dan memberikan pilihan
+    apakah anda akan memperbaikinya atau mengembalikan ke isi sebelumnya.
+    Jika anda memilih <strong>Tampilkan sumber BibTeX sebagai bawaan</strong> di panel
+    <strong>Penyunting Entri</strong> dari menu 
+    <strong>Pengaturan->Preferensi</strong>, panel sumber BibTeX akan muncul
+    satu-satunya panel ketika anda membuka penyunting entri. Jika anda lebih suka
+    menyunting sumber daripada menggunakan panel penyunting, inilah pilihan
+    yang tepat untuk anda.</p>
+
+    <p><strong>Saran:</strong> Apabila basisdata anda mempunyai bidang
+    yang tidak dikenal oleh JabRef, bidang tersebut akan muncul di panel 
+    sumber.</p>
+
+    <h2>Memeriksa konsistensi bidang</h2>
+
+    <p>Apabila isi dari bidang berubah, JabRef akan memeriksa apakah
+    isi yang baru dapat diterima. Untuk tipe bidang yang digunakan 
+    <em>bibtex</em>, isinya diperiksa berdasar penggunaan karakter '#'.
+    Simbol pagar ini <em>hanya</em> boleh digunakan secara berpasangan
+    (kecuali untuk penulisan, '\#'), yang bermakna melipat string
+    <em>bibtex</em> yang diacu. JabRef tidak akan memeriksa jika string
+    yang diacu benar-benar ada (ini bukan buka suatu tipuan, karena gaya
+    <em>bibtex</em> yang anda gunakan dapat mendefinisikan kumpulan
+    string bebas yang tidak dikenali JabRef).</p>
+
+    <p>Apabila isi tidak dapat diterima, bidang akan berubah warna menjadi
+    merah, yang menandakan adanya kesalahan. Jika hal ini terjadi, perubahan
+    tidak akan disimpan.</p>
+
+    <!--<h2>Word/name autocompletion</h2>
+
+    <p>The entry editor offers autocompletion of words. In the Preferences dialog
+    you can enable or disable autocompletion, and choose for which fields
+    autocompletion is active.</p>
+
+    <p>With autocompletion, JabRef records all words that appear in
+    each of the chosen fields throughout your database. Whenever you write
+    the beginning of one of these words, it will be suggested visually. To
+    ignore the suggestion, simply write on. To accept the suggestion,
+    either press <em>ENTER</em> or use your arrow keys or other keys to
+    remove the selection box around the suggested characters.</p>
+
+    <p><em>Note:</em> the words considered for suggestion are only the ones
+    appearing in the same field in entries of the same database as the one you
+    are editing. There are many ways to realise this kind of feature, and if you feel
+    it should have been implemented differently, we'd like to hear your suggestions!</p>
+
+    <h2>Copy <em>bibtex</em> key</h2>
+
+    <p>Pressing CTRL-K or the 'key' button causes the <em>bibtex</em> key for your entry
+    to be copied to the clipboard.</p>
+    -->
+
+    <h2>Kunci <em>bibtex</em> otomatis</h2>
+
+    <p>Tekan CTRL-G atau gunakan 
+    tombol 'membuat kunci BibTeX' (tongkat ajaib) untuk membuat kunci
+    <em>bibtex</em> secara otomatis berdasarkan isi dari entri yang berada di
+    Bidang diperlukan.</p>
+
+    <p>Informasi lebih lanjut bagaimana JabRef membuat kunci
+    <em>bibtex</em>, silahkan baca
+    <a href="LabelPatterns.html">Pengaturan pembuat kunci BibTex</a>.</p>
+
+    <h2>Pengisian otomatis kata/nama</h2>
+
+    <p>JabRef mempunyai fitur pengisian otomatis kata/nama.
+    Pengaturan fitur ini dapat diubah dari <b>Pengaturan -> 
+    Preferensi -> Penyunting entri</b>. Pengaturan bawaan adalah
+    aktif untuk semua bidang yang umum digunakan.</p>
+
+    <p>Ketika menyunting satu bidang yang pengisian otomatisnya aktif,
+    JabRef akan mencoba menyarankan kata lengkap ketika anda menulis,
+    berdasarkan kata-kata yang digunakan di mana-mana bidang dalam basisdata
+    anda. Saran kata akan muncul dalam bentuk teks warna terang. Jika ada
+    beberapa kata yang mungkin, anda bisa menggunakan tombol PAGE UP dan
+    PAGE DOWN untuk melihat kata-kata yang disarankan. Pilih salah satu
+    kata, kemudian tekan ENTER. Untuk mengabaikan saran, teruskan menulis kata
+    anda sendiri.</p>
+
+</body>
+</html>
diff --git a/src/help/in/HelpHelp.html b/src/help/in/HelpHelp.html
old mode 100755
new mode 100644
index bcb286f..5ac17fd
--- a/src/help/in/HelpHelp.html
+++ b/src/help/in/HelpHelp.html
@@ -1,34 +1,34 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Jendela Bantuan</h1>
-
-    <p><em>Dibuka dengan cara klik menu Bantuan atau tekan F1.</em></p>
-
-    <p>Jendela bantuan memberikan informasi bagaimana menggunakan JabRef.</p>
-
-    <h2>Bagaimana menggunakan jendela bantuan</h2>
-
-    <p>Jendela bantuan pada dasarnya adalah penjelajah HTML, berkas
-    bantuan merupakan berkas HTML.</p>
-
-    <p>Ketika dibuka, jendela bantuan akan menyiapkan beberapa berkas
-    pada jendela yang sedang dibuka. Apabila berkas yang dibuka tidak
-    anda informasi yang anda inginkan, tombol
-    <em>Daftar Isi</em> di kotak bantuan akan membawa anda ke berkas
-    bantuan yang lain.</p>
-
-    <p>Pada kotak bantuan, anda dapat menggunakan tombol navigasi
-    tuntuk membuka berkas sebelumnya atau setelahnya. Tombol ini mirip
-    dengan tombol <em>Mundur</em> dan <em>Maju</em> pada penjelajah standar.
-    Pintasan tombol ketik untuk navigasi adalah menggunakan tombol ketik
-    panah kiri untuk <em>Mundur</em> tombol ketik kanan untuk 
-    <em>Maju</em>.</p>
-
-    <p>Cara menutup jendela bantuan dengan menekan tombol ESCAPE.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Jendela Bantuan</h1>
+
+    <p><em>Dibuka dengan cara klik menu Bantuan atau tekan F1.</em></p>
+
+    <p>Jendela bantuan memberikan informasi bagaimana menggunakan JabRef.</p>
+
+    <h2>Bagaimana menggunakan jendela bantuan</h2>
+
+    <p>Jendela bantuan pada dasarnya adalah penjelajah HTML, berkas
+    bantuan merupakan berkas HTML.</p>
+
+    <p>Ketika dibuka, jendela bantuan akan menyiapkan beberapa berkas
+    pada jendela yang sedang dibuka. Apabila berkas yang dibuka tidak
+    anda informasi yang anda inginkan, tombol
+    <em>Daftar Isi</em> di kotak bantuan akan membawa anda ke berkas
+    bantuan yang lain.</p>
+
+    <p>Pada kotak bantuan, anda dapat menggunakan tombol navigasi
+    tuntuk membuka berkas sebelumnya atau setelahnya. Tombol ini mirip
+    dengan tombol <em>Mundur</em> dan <em>Maju</em> pada penjelajah standar.
+    Pintasan tombol ketik untuk navigasi adalah menggunakan tombol ketik
+    panah kiri untuk <em>Mundur</em> tombol ketik kanan untuk 
+    <em>Maju</em>.</p>
+
+    <p>Cara menutup jendela bantuan dengan menekan tombol ESCAPE.</p>
+</body>
+</html>
diff --git a/src/help/in/IEEEXploreHelp.html b/src/help/in/IEEEXploreHelp.html
index 67c6e07..5b8c263 100644
--- a/src/help/in/IEEEXploreHelp.html
+++ b/src/help/in/IEEEXploreHelp.html
@@ -1,32 +1,32 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Pencarian IEEEXplore</h1>
-
-    <p>IEEEXplore mempunyai banyak koleksi yang berhubungan dengan
-    pustaka teknik bidang teknik elektro, sain komputer,
-    serta elektronika.</p>
-
-    <p>JabRef dapat melakukan muaturun langsung dari basisdata IEEEXplore.
-    Untuk menggunakan fitur ini, Pilih <b>Pencarian Web -> Pencarian
-    IEEEXplore</b>, kemudian dialog pencarian akan muncul di jendela
-    sebelah kiri.</p>
-
-    <p>Untuk memulai pencarian, tulislah kata yang ingin anda cari, kemudian tekan
-    <b>Enter</b> atau tekan tombol <b>Mencari</b>.</p>
-
-    <p>Pencarian dilakukan melalui mode tamu, yang berarti akan memberikan
-    jumlah hasil yang dibatasi sampai 100 entri.</p>
-
-    <p>Anda bisa memilih basisdata yang digunakan serta ada pilihan termasuk abstrak untuk setiap
-    entri, dengan memilih kotak pilihan <b>Termasuk abstrak</b>. 
-    Pilihan ini TIDAK AKAN menyebabkan beban pencarian menjadi bertambah.</p>
-
-    <p>Pilihan untuk muaturun acuan BibTeX langsung dari IEEEXplore belum dapat digunakan.</p>
-
-    <p>Silahkan hubungi Aaron Chen <b>nextAaron at gmail.com</b> apabila ada saran.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Pencarian IEEEXplore</h1>
+
+    <p>IEEEXplore mempunyai banyak koleksi yang berhubungan dengan
+    pustaka teknik bidang teknik elektro, sain komputer,
+    serta elektronika.</p>
+
+    <p>JabRef dapat melakukan muaturun langsung dari basisdata IEEEXplore.
+    Untuk menggunakan fitur ini, Pilih <b>Pencarian Web -> Pencarian
+    IEEEXplore</b>, kemudian dialog pencarian akan muncul di jendela
+    sebelah kiri.</p>
+
+    <p>Untuk memulai pencarian, tulislah kata yang ingin anda cari, kemudian tekan
+    <b>Enter</b> atau tekan tombol <b>Mencari</b>.</p>
+
+    <p>Pencarian dilakukan melalui mode tamu, yang berarti akan memberikan
+    jumlah hasil yang dibatasi sampai 100 entri.</p>
+
+    <p>Anda bisa memilih basisdata yang digunakan serta ada pilihan termasuk abstrak untuk setiap
+    entri, dengan memilih kotak pilihan <b>Termasuk abstrak</b>. 
+    Pilihan ini TIDAK AKAN menyebabkan beban pencarian menjadi bertambah.</p>
+
+    <p>Pilihan untuk muaturun acuan BibTeX langsung dari IEEEXplore belum dapat digunakan.</p>
+
+    <p>Silahkan hubungi Aaron Chen <b>nextAaron at gmail.com</b> apabila ada saran.</p>
+</body>
+</html>
diff --git a/src/help/in/JabRefHelp.html b/src/help/in/JabRefHelp.html
old mode 100755
new mode 100644
index 3f7242c..13d9ffb
--- a/src/help/in/JabRefHelp.html
+++ b/src/help/in/JabRefHelp.html
@@ -1,33 +1,33 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-    <h1>JabRef</h1>
-
-    <p><strong>Catatan:</strong> Program <em>bibtex</em> sering
-    disebut pada berkas bantuan. <em>Bibtex</em> adalah suatu piranti
-    yang dibuat oleh Oren Patashnik untuk membuat referensi bibliografi
-    dalam dokumen LaTeX. Format basisdata yang sama juga digunakan 
-    pada CiteMaker yang merupakan piranti pembuat bibliografi pada
-    Adobe FrameMaker.</p>
-
-    <p>JabRef adalah program untuk menyunting basisdata <em>bibtex</em>.
-    Program ini menggunakan format berkas internal, yang berarti
-    anda dapat memuat dan menyimpan basisdata anda langsung dalam
-    format <em>bibtex</em> .bib. Anda juga dapat mengimpor berbagai format
-    basisdata bibliograf ke JabRef.</p>
-
-    <p>JabRef mempunyai fitur untuk mengurutkan dan mencari isi dari
-    basisdata. Anda dapat dengan mudah menambah entri tanpa
-    harus hafal informasi utama yang diperlukan, demikian pula
-    kunci <em>bibtex</em> dapat dibuat secara otomatis. JabRef akan sangat
-    berguna bagi yang menggunakan <em>bibtex</em> atau CiteMaker, 
-    tetapi juga bermanfaat bagi yang menggunakan sistem referensi lain
-    atau sangat membantu bagi yang sekedar ingin merapikan sumber
-    pustaka.</p>
-
-    <p><a href="BaseFrameHelp.html">Jendela utama JabRef</a></p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+    <h1>JabRef</h1>
+
+    <p><strong>Catatan:</strong> Program <em>bibtex</em> sering
+    disebut pada berkas bantuan. <em>Bibtex</em> adalah suatu piranti
+    yang dibuat oleh Oren Patashnik untuk membuat referensi bibliografi
+    dalam dokumen LaTeX. Format basisdata yang sama juga digunakan 
+    pada CiteMaker yang merupakan piranti pembuat bibliografi pada
+    Adobe FrameMaker.</p>
+
+    <p>JabRef adalah program untuk menyunting basisdata <em>bibtex</em>.
+    Program ini menggunakan format berkas internal, yang berarti
+    anda dapat memuat dan menyimpan basisdata anda langsung dalam
+    format <em>bibtex</em> .bib. Anda juga dapat mengimpor berbagai format
+    basisdata bibliograf ke JabRef.</p>
+
+    <p>JabRef mempunyai fitur untuk mengurutkan dan mencari isi dari
+    basisdata. Anda dapat dengan mudah menambah entri tanpa
+    harus hafal informasi utama yang diperlukan, demikian pula
+    kunci <em>bibtex</em> dapat dibuat secara otomatis. JabRef akan sangat
+    berguna bagi yang menggunakan <em>bibtex</em> atau CiteMaker, 
+    tetapi juga bermanfaat bagi yang menggunakan sistem referensi lain
+    atau sangat membantu bagi yang sekedar ingin merapikan sumber
+    pustaka.</p>
+
+    <p><a href="BaseFrameHelp.html">Jendela utama JabRef</a></p>
+</body>
+</html>
diff --git a/src/help/in/JournalAbbreviations.html b/src/help/in/JournalAbbreviations.html
index 4481de0..169e737 100644
--- a/src/help/in/JournalAbbreviations.html
+++ b/src/help/in/JournalAbbreviations.html
@@ -1,120 +1,120 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Singkatan nama jurnal</h1>
-
-    <p>Fitur ini dapat diatur melalui
-    menu <b>Pengaturan -> Pengaturan singkatan jurnal</b>.</p>
-
-    <p>JabRef dapat secara otomatis merubah dari bentuk
-    singkatan ke nama penuh dan sebaliknya, selama nama jurnal
-    dan singkatannya ada dalam daftar anda. Anda bisa menggunakan
-    memperoleh daftar singkatan dari beberapa berkas yang ada 
-    dalam cakra padat anda.</p>
-
-    <h2>Penggunaan fitur ini</h2>
-
-    <p>Pengubahan nama jurnal dapat dilakukan dari penyunting entri
-    atau dari menu <b>AlatBantuan</b>. Jika anda berada di 
-    di bagian <i>Jurnal</i> dalam penyunting entri, untuk merubah ke
-    bentuk singkatan, tekan tombol <i>Gunakan
-    singkatan</i>. Setelah tombol ini anda tekan maka anda akan
-    diberikan tiga pilihan:</p>
-
-    <ul>
-        <li>Nama penuh, misalnya "Aquacultural Engineering"</li>
-
-        <li>Singkatan ISO, misalnya "Aquacult. Eng."</li>
-
-        <li>Singkatan MEDLINE, misalnya "Aquacult Eng"</li>
-    </ul>
-    <p>Jika nama jurnal tidak ada dalam daftar, maka nama jurnal
-    tidak akan berubah sama sekali.</p>
-
-    <p>Untuk merubah nama jurnal bersamaan, anda dapat memilih
-    beberapa entri yang ingin anda ubah nama jurnalnya, kemudian
-    dari menu <b>AlatBantuan ->
-    Singkatan nama jurnal (ISO)</b>, <b>AlatBantuan -> Singkatan
-    nama jurnal (MEDLINE)</b> atau <b>AlatBantuan -> Tidak
-    menyingkat nama jurnal</b>. Ketiga perintah tersebut dapat
-    menyingkat atau menggunakan nama lengkap dari entri pilihan dimana
-    nama jurnal ada dalam daftar jurnal.</p>
-
-    <h2>Membuat daftar nama jurnal</h2>
-
-    <p>Anda boleh menggunakan beberapa
-    berkas daftar jurnal yang kesemuanya dapat ditautkan dari JabRef.
-    Berkas daftar jurnal yang utama dapat disunting dari dalam JabRef.</p>
-
-    <h3>Daftar singkatan jurnal pribadi</h3>
-
-    <p>Pengaturan dan pengeloaan daftar singkatan jurnal pribadi
-    ada di bagian atas jendela <b>Singkatan nama jurnal</b>.
-    Untuk memulai membangun daftar jurnal pribadi, pilih 
-    <i>Berkas baru</i>, tulis nama berkas atau gunakan
-    tombol <i>Jelajah</i>. Apabila anda sudah mempunyai berkas
-    daftar nama jurnal sebelumnya dan ingin anda gunakan
-    pilih <i>Berkas yang ada</i>, dan tekan
-    tombol <i>Jelajah</i> untuk memilih berkas. Tabel di kotak
-    bawahnya akan menampilkan isi daftar jurnal dari berkas
-    yang anda pilih.</p>
-
-    <p>Tabel serta tombol bantuan disebelah kanan akan membantu anda
-    untuk menambah, menghapus dan menyunting nama jurnal serta 
-    singkatannya. Pada setiap entri, anda harus menuliskan nama
-    lengkap dari jurnal serta nama singkatan ISO (misalnya
-    "Aquacultural Engineering" dan "Aquacult. Eng."). Untuk
-    menyunting entri, klik-ganda entri pada tabel.</p>
-
-    <p>Apabila anda sudah memilih berkas dan entri tabel
-    memiliki paling tidak satu entri, kemudian anda menekan tombol
-    <i>OK</i>, maka semuanya entri dalam tabel akan
-    disimpan ke berkas yang dipilih, dan daftar jurnal yang ada
-    di JabRef akan diperbarui.</p>
-
-    <h3>Daftar jurnal eksternal</h3>
-
-    <p>Sebagai tambahan dari daftar jurnal pribadi,
-    anda juga dapat mengkaitkan dengan beberapa berkas daftar jurnal
-    eksternal. Definisi tautan ke berkas eksternal ada di bagian bawah
-    dari jendela <b>Singkatan nama jurnal</b>. 
-    Daftar jurnal eksternal mempunyai format yang sama dengan daftar
-    jurnal pribadi - perbedaanya hanya JabRef tidak memberikan
-    fasilitas antarmuka untuk penyuntingan penyuntingan berkas
-    eksternal.</p>
-
-    <p>Apabila perlu, untuk menambah daftar berkas eksternal baru, 
-    klik tombol <b>+</b> di bagian kotak bawah. Setelah itu anda
-    bisa menekan tombol <i>Jelajah</i> atau tombol <i>Muaturun</i> 
-    yang terletak di sebelah kanan dari kotak berkas eksternal pada
-    kotak bagian bawah jendela. Untuk melihat isi dari berkas
-    anda bisa menggunakan tombol <i>Pratampilan</i>.</p>
-
-    <ul>
-        <li>Tombol <i>Jelajah</i> membantu anda untuk memilih
-        berkas daftar jurnal yang anda miliki yang berada
-        di salah satu direktori dalam komputer anda.</li>
-
-        <li>Tombol <i>Muaturun</i> berfungsi untuk muaturun berkas
-        yang ada di tautan internet dengan cara menuliskan alamat
-        URL. Anda perlu memberi nama baru dan menyimpan ke lokal
-        komputer. Selanutnya JabRef akan mengenalinya sebagai berkas
-        daftar jurnal eksternal. Ketika anda menekan tombol 
-        <i>Muaturun</i>, dalam alamat URL anda akan lihat alamat URL
-        bawaan dari situs JabRef yang berisi daftar jurnal serta
-        singkatannya. Namun demikian daftar yang ada tidak lengkap
-        sekali, anda bis melengkapinya sendiri.</li>
-
-        <li>Tombol <i>Pratampilan</i> akan menampilkan isi daftar 
-        dari berkas internal yang anda pilih</li>
-    </ul>
-
-    Setiap entri yang anda miliki dari daftar jurnal pribadi akan
-    menindih informasi dari nama jurnal yang sama dari berkas
-    eksternal. Pada eksternal jurnal, urutan tautan akan menentukan
-    prioritas yang dipakai.
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Singkatan nama jurnal</h1>
+
+    <p>Fitur ini dapat diatur melalui
+    menu <b>Pengaturan -> Pengaturan singkatan jurnal</b>.</p>
+
+    <p>JabRef dapat secara otomatis merubah dari bentuk
+    singkatan ke nama penuh dan sebaliknya, selama nama jurnal
+    dan singkatannya ada dalam daftar anda. Anda bisa menggunakan
+    memperoleh daftar singkatan dari beberapa berkas yang ada 
+    dalam cakra padat anda.</p>
+
+    <h2>Penggunaan fitur ini</h2>
+
+    <p>Pengubahan nama jurnal dapat dilakukan dari penyunting entri
+    atau dari menu <b>AlatBantuan</b>. Jika anda berada di 
+    di bagian <i>Jurnal</i> dalam penyunting entri, untuk merubah ke
+    bentuk singkatan, tekan tombol <i>Gunakan
+    singkatan</i>. Setelah tombol ini anda tekan maka anda akan
+    diberikan tiga pilihan:</p>
+
+    <ul>
+        <li>Nama penuh, misalnya "Aquacultural Engineering"</li>
+
+        <li>Singkatan ISO, misalnya "Aquacult. Eng."</li>
+
+        <li>Singkatan MEDLINE, misalnya "Aquacult Eng"</li>
+    </ul>
+    <p>Jika nama jurnal tidak ada dalam daftar, maka nama jurnal
+    tidak akan berubah sama sekali.</p>
+
+    <p>Untuk merubah nama jurnal bersamaan, anda dapat memilih
+    beberapa entri yang ingin anda ubah nama jurnalnya, kemudian
+    dari menu <b>AlatBantuan ->
+    Singkatan nama jurnal (ISO)</b>, <b>AlatBantuan -> Singkatan
+    nama jurnal (MEDLINE)</b> atau <b>AlatBantuan -> Tidak
+    menyingkat nama jurnal</b>. Ketiga perintah tersebut dapat
+    menyingkat atau menggunakan nama lengkap dari entri pilihan dimana
+    nama jurnal ada dalam daftar jurnal.</p>
+
+    <h2>Membuat daftar nama jurnal</h2>
+
+    <p>Anda boleh menggunakan beberapa
+    berkas daftar jurnal yang kesemuanya dapat ditautkan dari JabRef.
+    Berkas daftar jurnal yang utama dapat disunting dari dalam JabRef.</p>
+
+    <h3>Daftar singkatan jurnal pribadi</h3>
+
+    <p>Pengaturan dan pengeloaan daftar singkatan jurnal pribadi
+    ada di bagian atas jendela <b>Singkatan nama jurnal</b>.
+    Untuk memulai membangun daftar jurnal pribadi, pilih 
+    <i>Berkas baru</i>, tulis nama berkas atau gunakan
+    tombol <i>Jelajah</i>. Apabila anda sudah mempunyai berkas
+    daftar nama jurnal sebelumnya dan ingin anda gunakan
+    pilih <i>Berkas yang ada</i>, dan tekan
+    tombol <i>Jelajah</i> untuk memilih berkas. Tabel di kotak
+    bawahnya akan menampilkan isi daftar jurnal dari berkas
+    yang anda pilih.</p>
+
+    <p>Tabel serta tombol bantuan disebelah kanan akan membantu anda
+    untuk menambah, menghapus dan menyunting nama jurnal serta 
+    singkatannya. Pada setiap entri, anda harus menuliskan nama
+    lengkap dari jurnal serta nama singkatan ISO (misalnya
+    "Aquacultural Engineering" dan "Aquacult. Eng."). Untuk
+    menyunting entri, klik-ganda entri pada tabel.</p>
+
+    <p>Apabila anda sudah memilih berkas dan entri tabel
+    memiliki paling tidak satu entri, kemudian anda menekan tombol
+    <i>OK</i>, maka semuanya entri dalam tabel akan
+    disimpan ke berkas yang dipilih, dan daftar jurnal yang ada
+    di JabRef akan diperbarui.</p>
+
+    <h3>Daftar jurnal eksternal</h3>
+
+    <p>Sebagai tambahan dari daftar jurnal pribadi,
+    anda juga dapat mengkaitkan dengan beberapa berkas daftar jurnal
+    eksternal. Definisi tautan ke berkas eksternal ada di bagian bawah
+    dari jendela <b>Singkatan nama jurnal</b>. 
+    Daftar jurnal eksternal mempunyai format yang sama dengan daftar
+    jurnal pribadi - perbedaanya hanya JabRef tidak memberikan
+    fasilitas antarmuka untuk penyuntingan penyuntingan berkas
+    eksternal.</p>
+
+    <p>Apabila perlu, untuk menambah daftar berkas eksternal baru, 
+    klik tombol <b>+</b> di bagian kotak bawah. Setelah itu anda
+    bisa menekan tombol <i>Jelajah</i> atau tombol <i>Muaturun</i> 
+    yang terletak di sebelah kanan dari kotak berkas eksternal pada
+    kotak bagian bawah jendela. Untuk melihat isi dari berkas
+    anda bisa menggunakan tombol <i>Pratampilan</i>.</p>
+
+    <ul>
+        <li>Tombol <i>Jelajah</i> membantu anda untuk memilih
+        berkas daftar jurnal yang anda miliki yang berada
+        di salah satu direktori dalam komputer anda.</li>
+
+        <li>Tombol <i>Muaturun</i> berfungsi untuk muaturun berkas
+        yang ada di tautan internet dengan cara menuliskan alamat
+        URL. Anda perlu memberi nama baru dan menyimpan ke lokal
+        komputer. Selanutnya JabRef akan mengenalinya sebagai berkas
+        daftar jurnal eksternal. Ketika anda menekan tombol 
+        <i>Muaturun</i>, dalam alamat URL anda akan lihat alamat URL
+        bawaan dari situs JabRef yang berisi daftar jurnal serta
+        singkatannya. Namun demikian daftar yang ada tidak lengkap
+        sekali, anda bis melengkapinya sendiri.</li>
+
+        <li>Tombol <i>Pratampilan</i> akan menampilkan isi daftar 
+        dari berkas internal yang anda pilih</li>
+    </ul>
+
+    Setiap entri yang anda miliki dari daftar jurnal pribadi akan
+    menindih informasi dari nama jurnal yang sama dari berkas
+    eksternal. Pada eksternal jurnal, urutan tautan akan menentukan
+    prioritas yang dipakai.
+</body>
+</html>
diff --git a/src/help/in/License.html b/src/help/in/License.html
index ce67dad..ef11208 100644
--- a/src/help/in/License.html
+++ b/src/help/in/License.html
@@ -1,494 +1,494 @@
-<HTML>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">
-<H1>GNU General Public License</H1>
-
-<H2>Table of Contents</H2>
-<UL>
-
-  <LI><A NAME="TOC1" HREF="License.html#SEC1">GNU GENERAL PUBLIC LICENSE</A>
-<UL>
-<LI><A NAME="TOC2" HREF="License.html#SEC2">Preamble</A>
-<LI><A NAME="TOC3" HREF="License.html#SEC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A>
-<LI><A NAME="TOC4" HREF="License.html#SEC4">How to Apply These Terms to Your New Programs</A>
-
-</UL>
-</UL>
-
-<P>
-
-<HR>
-
-<P>
-
-
-
-<H2><A NAME="SEC1" HREF="License#TOC1">GNU GENERAL PUBLIC LICENSE</A></H2>
-<P>
-Version 2, June 1991
-
-</P>
-
-<PRE>
-Copyright (C) 1989, 1991 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.
-</PRE>
-
-
-
-<H2><A NAME="SEC2" HREF="License.html#TOC2">Preamble</A></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
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-</P>
-<P>
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-</P>
-<P>
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-</P>
-<P>
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-</P>
-<P>
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-</P>
-<P>
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-</P>
-<P>
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-</P>
-<P>
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-</P>
-
-
-<H2><A NAME="SEC3" HREF="License.html#TOC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A></H2>
-
-
-<P>
-
-<STRONG>0.</STRONG>
- This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-<P>
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-<P>
-
-<STRONG>1.</STRONG>
- You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-<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>
-
-<STRONG>2.</STRONG>
- You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-<P>
-
-<UL>
-
-<LI><STRONG>a)</STRONG>
-     You must cause the modified files to carry prominent notices
-     stating that you changed the files and the date of any change.
-
-<P>
-<LI><STRONG>b)</STRONG>
-     You must cause any work that you distribute or publish, that in
-     whole or in part contains or is derived from the Program or any
-     part thereof, to be licensed as a whole at no charge to all third
-     parties under the terms of this License.
-
-<P>
-<LI><STRONG>c)</STRONG>
-     If the modified program normally reads commands interactively
-     when run, you must cause it, when started running for such
-     interactive use in the most ordinary way, to print or display an
-     announcement including an appropriate copyright notice and a
-     notice that there is no warranty (or else, saying that you provide
-     a warranty) and that users may redistribute the program under
-     these conditions, and telling the user how to view a copy of this
-     License.  (Exception: if the Program itself is interactive but
-     does not normally print such an announcement, your work based on
-     the Program is not required to print an announcement.)
-</UL>
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-<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 Program.
-<P>
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-<P>
-
-<STRONG>3.</STRONG>
- You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-
-<!-- we use this doubled UL to get the sub-sections indented, -->
-<!-- while making the bullets as unobvious as possible. -->
-<UL>
-
-<LI><STRONG>a)</STRONG>
-     Accompany it with the complete corresponding machine-readable
-     source code, which must be distributed under the terms of Sections
-     1 and 2 above on a medium customarily used for software interchange; or,
-
-<P>
-<LI><STRONG>b)</STRONG>
-     Accompany it with a written offer, valid for at least three
-     years, to give any third party, for a charge no more than your
-     cost of physically performing source distribution, a complete
-     machine-readable copy of the corresponding source code, to be
-     distributed under the terms of Sections 1 and 2 above on a medium
-     customarily used for software interchange; or,
-
-<P>
-<LI><STRONG>c)</STRONG>
-     Accompany it with the information you received as to the offer
-     to distribute corresponding source code.  (This alternative is
-     allowed only for noncommercial distribution and only if you
-     received the program in object code or executable form with such
-     an offer, in accord with Subsection b above.)
-</UL>
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-<P>
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-<P>
-
-<STRONG>4.</STRONG>
- You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-<P>
-
-<STRONG>5.</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 Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-<P>
-
-<STRONG>6.</STRONG>
- Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-<P>
-
-<STRONG>7.</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 Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-<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>
-
-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>
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-<P>
-
-<STRONG>8.</STRONG>
- If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-<P>
-
-<STRONG>9.</STRONG>
- The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-<P>
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-<P>
-
-
-<STRONG>10.</STRONG>
- If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-
-
-<P><STRONG>NO WARRANTY</STRONG></P>
-
-<P>
-
-<STRONG>11.</STRONG>
- BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-<P>
-
-<STRONG>12.</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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-<P>
-
-
-<H2>END OF TERMS AND CONDITIONS</H2>
-
-
-
-<H2><A NAME="SEC4" HREF="License.html#TOC4">How to Apply These Terms to Your New Programs</A></H2>
-
-<P>
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-</P>
-<P>
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-</P>
-
-<PRE>
-<VAR>one line to give the program's name and an idea of what it does.</VAR>
-Copyright (C) <VAR>yyyy</VAR>  <VAR>name of author</VAR>
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-</PRE>
-
-<P>
-Also add information on how to contact you by electronic and paper mail.
-
-</P>
-<P>
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-</P>
-
-<PRE>
-Gnomovision version 69, Copyright (C) <VAR>year</VAR> <VAR>name of author</VAR>
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-type `show w'.  This is free software, and you are welcome
-to redistribute it under certain conditions; type `show c' 
-for details.
-</PRE>
-
-<P>
-The hypothetical commands <SAMP>`show w'</SAMP> and <SAMP>`show c'</SAMP> should show
-the appropriate parts of the General Public License.  Of course, the
-commands you use may be called something other than <SAMP>`show w'</SAMP> and
-<SAMP>`show c'</SAMP>; they could even be mouse-clicks or menu items--whatever
-suits your program.
-
-</P>
-<P>
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-</P>
-
-<PRE>
-Yoyodyne, Inc., hereby disclaims all copyright
-interest in the program `Gnomovision'
-(which makes passes at compilers) written 
-by James Hacker.
-
-<VAR>signature of Ty Coon</VAR>, 1 April 1989
-Ty Coon, President of Vice
-</PRE>
-
-<P>
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
-<P><CENTER><a href="About.html">Back</a>
-</BODY>
-</HTML>
+<HTML>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">
+<H1>GNU General Public License</H1>
+
+<H2>Table of Contents</H2>
+<UL>
+
+  <LI><A NAME="TOC1" HREF="License.html#SEC1">GNU GENERAL PUBLIC LICENSE</A>
+<UL>
+<LI><A NAME="TOC2" HREF="License.html#SEC2">Preamble</A>
+<LI><A NAME="TOC3" HREF="License.html#SEC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A>
+<LI><A NAME="TOC4" HREF="License.html#SEC4">How to Apply These Terms to Your New Programs</A>
+
+</UL>
+</UL>
+
+<P>
+
+<HR>
+
+<P>
+
+
+
+<H2><A NAME="SEC1" HREF="License#TOC1">GNU GENERAL PUBLIC LICENSE</A></H2>
+<P>
+Version 2, June 1991
+
+</P>
+
+<PRE>
+Copyright (C) 1989, 1991 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.
+</PRE>
+
+
+
+<H2><A NAME="SEC2" HREF="License.html#TOC2">Preamble</A></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
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+</P>
+<P>
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+</P>
+<P>
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+</P>
+<P>
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+</P>
+<P>
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+</P>
+<P>
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+</P>
+<P>
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+</P>
+<P>
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+</P>
+
+
+<H2><A NAME="SEC3" HREF="License.html#TOC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A></H2>
+
+
+<P>
+
+<STRONG>0.</STRONG>
+ This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+<P>
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+<P>
+
+<STRONG>1.</STRONG>
+ You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+<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>
+
+<STRONG>2.</STRONG>
+ You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+<P>
+
+<UL>
+
+<LI><STRONG>a)</STRONG>
+     You must cause the modified files to carry prominent notices
+     stating that you changed the files and the date of any change.
+
+<P>
+<LI><STRONG>b)</STRONG>
+     You must cause any work that you distribute or publish, that in
+     whole or in part contains or is derived from the Program or any
+     part thereof, to be licensed as a whole at no charge to all third
+     parties under the terms of this License.
+
+<P>
+<LI><STRONG>c)</STRONG>
+     If the modified program normally reads commands interactively
+     when run, you must cause it, when started running for such
+     interactive use in the most ordinary way, to print or display an
+     announcement including an appropriate copyright notice and a
+     notice that there is no warranty (or else, saying that you provide
+     a warranty) and that users may redistribute the program under
+     these conditions, and telling the user how to view a copy of this
+     License.  (Exception: if the Program itself is interactive but
+     does not normally print such an announcement, your work based on
+     the Program is not required to print an announcement.)
+</UL>
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+<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 Program.
+<P>
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+<P>
+
+<STRONG>3.</STRONG>
+ You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+
+<!-- we use this doubled UL to get the sub-sections indented, -->
+<!-- while making the bullets as unobvious as possible. -->
+<UL>
+
+<LI><STRONG>a)</STRONG>
+     Accompany it with the complete corresponding machine-readable
+     source code, which must be distributed under the terms of Sections
+     1 and 2 above on a medium customarily used for software interchange; or,
+
+<P>
+<LI><STRONG>b)</STRONG>
+     Accompany it with a written offer, valid for at least three
+     years, to give any third party, for a charge no more than your
+     cost of physically performing source distribution, a complete
+     machine-readable copy of the corresponding source code, to be
+     distributed under the terms of Sections 1 and 2 above on a medium
+     customarily used for software interchange; or,
+
+<P>
+<LI><STRONG>c)</STRONG>
+     Accompany it with the information you received as to the offer
+     to distribute corresponding source code.  (This alternative is
+     allowed only for noncommercial distribution and only if you
+     received the program in object code or executable form with such
+     an offer, in accord with Subsection b above.)
+</UL>
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+<P>
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+<P>
+
+<STRONG>4.</STRONG>
+ You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+<P>
+
+<STRONG>5.</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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+<P>
+
+<STRONG>6.</STRONG>
+ Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+<P>
+
+<STRONG>7.</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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+<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>
+
+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>
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+<P>
+
+<STRONG>8.</STRONG>
+ If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+<P>
+
+<STRONG>9.</STRONG>
+ The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+<P>
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+<P>
+
+
+<STRONG>10.</STRONG>
+ If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+
+
+<P><STRONG>NO WARRANTY</STRONG></P>
+
+<P>
+
+<STRONG>11.</STRONG>
+ BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+<P>
+
+<STRONG>12.</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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+<P>
+
+
+<H2>END OF TERMS AND CONDITIONS</H2>
+
+
+
+<H2><A NAME="SEC4" HREF="License.html#TOC4">How to Apply These Terms to Your New Programs</A></H2>
+
+<P>
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+</P>
+<P>
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+</P>
+
+<PRE>
+<VAR>one line to give the program's name and an idea of what it does.</VAR>
+Copyright (C) <VAR>yyyy</VAR>  <VAR>name of author</VAR>
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+</PRE>
+
+<P>
+Also add information on how to contact you by electronic and paper mail.
+
+</P>
+<P>
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+</P>
+
+<PRE>
+Gnomovision version 69, Copyright (C) <VAR>year</VAR> <VAR>name of author</VAR>
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'.  This is free software, and you are welcome
+to redistribute it under certain conditions; type `show c' 
+for details.
+</PRE>
+
+<P>
+The hypothetical commands <SAMP>`show w'</SAMP> and <SAMP>`show c'</SAMP> should show
+the appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than <SAMP>`show w'</SAMP> and
+<SAMP>`show c'</SAMP>; they could even be mouse-clicks or menu items--whatever
+suits your program.
+
+</P>
+<P>
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+</P>
+
+<PRE>
+Yoyodyne, Inc., hereby disclaims all copyright
+interest in the program `Gnomovision'
+(which makes passes at compilers) written 
+by James Hacker.
+
+<VAR>signature of Ty Coon</VAR>, 1 April 1989
+Ty Coon, President of Vice
+</PRE>
+
+<P>
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+<P><CENTER><a href="About.html">Back</a>
+</BODY>
+</HTML>
diff --git a/src/help/in/MarkingHelp.html b/src/help/in/MarkingHelp.html
index 246c3d6..6d5a338 100644
--- a/src/help/in/MarkingHelp.html
+++ b/src/help/in/MarkingHelp.html
@@ -1,47 +1,47 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Menandai entri</h1>
-
-    <p>Anda mempunyai pilihan bagaimana <em>menandai</em>
-    entri. Pintasan tombol ketik CTRL-M untuk menandai entri,
-    sedangkan CTRL-SHIFT-M untuk melepaskan tanda entri. Anda juga
-    bisa melakukan pada menu.</p>
-
-    <p>Penandaan tidak sama dengan memilih entri.
-    Entri yang ditandai mempunyai perilaku berbeda dengan yang tidak ditandai
-    dalam dua hal. Yang pertama, jika entri sudah ditandai akan selalu
-    mempunyai warna latar tabel entri berbeda. Yang kedua, entri yang 
-    sudah ditandai selalu berada di lapis paling atas pada senarai entri,
-    apabila tidak anda urutkan menurut grup atau setelah pencarian kata.</p>
-
-    <p>Warna penandaan entri tergantung dari tingkat entri, dengan 
-    urutan warna mulai dari kuning sampai merah. Ada menu untuk pengaturan
-    warna di tiap tingkat entri, serta untuk pengaturan warna untuk tingkat
-    entri tertentu.</p>
-
-    <p>Penandaan entri sangat berguna misalnya jika anda ingin melakukan
-    pencarian tanpa ingin kehilangan hasil pencarian sebelumnya, atau
-    contoh lainnya, anda ingin mengingat atau menandai artikel atau buku
-    yang penting dan perlu ditambah/diperbaiki datanya.</p>
-    
-    <p>Sebagai tambahan dari penandaan entri secara manual, JabRef dapat 
-    melakukan penandaan otomatis pada entri yang diimpor yang terakhir sekaligus
-    melepaskan tanda entri yang dibuat sebelumnya. Penandaan entri otomatis ini
-    akan mempunyai warna yang berbeda dengan warna hasil penandaan secara manual.
-    Warna penandaan otomatis adalah hijau. Fitur ini bisa diatur dari menu
-    <b>Pengaturan -> Preferensi -> Umum</b></p>
-
-    <p>Penandaan entri berhubungan dengan nama pengguna anda. Nama yang digunakan
-    dalam bidang "owner" dari entri yang anda buat atau anda import adalah nama
-    pengguna anda untuk sistem operasi, namun demikian anda bisa merubahnya
-    melalui menu <b>Pengaturan -> Preferensi -> Umum</b>). Pengguna lain
-    dari berkas basisdata dapat menandai secara independen. Jika anda menyimpan
-    berkas basisdata, penandaan yang anda lakukan juga akan disimpan.</p>
-
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Menandai entri</h1>
+
+    <p>Anda mempunyai pilihan bagaimana <em>menandai</em>
+    entri. Pintasan tombol ketik CTRL-M untuk menandai entri,
+    sedangkan CTRL-SHIFT-M untuk melepaskan tanda entri. Anda juga
+    bisa melakukan pada menu.</p>
+
+    <p>Penandaan tidak sama dengan memilih entri.
+    Entri yang ditandai mempunyai perilaku berbeda dengan yang tidak ditandai
+    dalam dua hal. Yang pertama, jika entri sudah ditandai akan selalu
+    mempunyai warna latar tabel entri berbeda. Yang kedua, entri yang 
+    sudah ditandai selalu berada di lapis paling atas pada senarai entri,
+    apabila tidak anda urutkan menurut grup atau setelah pencarian kata.</p>
+
+    <p>Warna penandaan entri tergantung dari tingkat entri, dengan 
+    urutan warna mulai dari kuning sampai merah. Ada menu untuk pengaturan
+    warna di tiap tingkat entri, serta untuk pengaturan warna untuk tingkat
+    entri tertentu.</p>
+
+    <p>Penandaan entri sangat berguna misalnya jika anda ingin melakukan
+    pencarian tanpa ingin kehilangan hasil pencarian sebelumnya, atau
+    contoh lainnya, anda ingin mengingat atau menandai artikel atau buku
+    yang penting dan perlu ditambah/diperbaiki datanya.</p>
+    
+    <p>Sebagai tambahan dari penandaan entri secara manual, JabRef dapat 
+    melakukan penandaan otomatis pada entri yang diimpor yang terakhir sekaligus
+    melepaskan tanda entri yang dibuat sebelumnya. Penandaan entri otomatis ini
+    akan mempunyai warna yang berbeda dengan warna hasil penandaan secara manual.
+    Warna penandaan otomatis adalah hijau. Fitur ini bisa diatur dari menu
+    <b>Pengaturan -> Preferensi -> Umum</b></p>
+
+    <p>Penandaan entri berhubungan dengan nama pengguna anda. Nama yang digunakan
+    dalam bidang "owner" dari entri yang anda buat atau anda import adalah nama
+    pengguna anda untuk sistem operasi, namun demikian anda bisa merubahnya
+    melalui menu <b>Pengaturan -> Preferensi -> Umum</b>). Pengguna lain
+    dari berkas basisdata dapat menandai secara independen. Jika anda menyimpan
+    berkas basisdata, penandaan yang anda lakukan juga akan disimpan.</p>
+
+
+</body>
+</html>
diff --git a/src/help/in/MedlineHelp.html b/src/help/in/MedlineHelp.html
index 8aa198e..d15a50e 100644
--- a/src/help/in/MedlineHelp.html
+++ b/src/help/in/MedlineHelp.html
@@ -1,46 +1,46 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Mengambil entri dari Medline</h1>
-
-    <p>MEDLINE adalah basisdata utama kedokteran di U.S. National Library.
-    Basisdata ini berisi referensi dari artikel jurnal yang berkaitan dengan
-    sains kehidupan dengan konsentrasi pada biomedicine.</p>
-
-    <p>JabRef dapat melaukan muaturun dari basisdata Medline.
-    Untuk menggunakan fitur ini, pilih <b>Pencarian Web -> Pencarian Medline</b>,
-    kemudaian dialog pencarian Medline akan muncul di jendela sebelah kiri.</p>
-
-    <p>Ada dua cara untuk memilih entri yang akan dimuaturun:</p>
-
-    <ol>
-        <li>Tulis satu atau lebih dari Medline ID (dipisah dengan
-        koma/titik koma) di kotak pencarian.</li>
-
-        <li>Tulis nama atau kata yang dicari. Anda
-        bisa menggunakan kata <em>and</em> dan <em>or</em> serta
-        tanda kurung untuk memperhalus ekspresi pencarian.</li>
-    </ol>Setelah ini, tekan <b>Enter</b> atau tekan tombol <b>Mengambil</b>.
-    Apabila anda menggunakan pencarian teks, anda akan diberikan informasi
-    jumlah entri yang ditemukan, dan anda bisa menentukan berapa jumlah yang
-    akan dimuaturun.
-
-    <p>Entri yang diambil kemudian akan ditambahkan dalam basisdata anda yang aktif.</p>
-
-    <h2>Menggunakan Proxy Server</h2>
-
-    <p>Apabila anda ingin menggunakan http proxy
-    server, anda harus memasukkan nama server name serta nomor port ke java saat
-    menjalankan.</p>
-
-    <p><code>java -Dhttp.proxyHost="namakomputer"
-    -Dhttp.proxyPort="nomorport"</code></p>
-
-    <p>Pengaturan lingkungan ini didokumentasikan di 
-    <a href="http://docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html">Sun J2SE documentation</a>.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Mengambil entri dari Medline</h1>
+
+    <p>MEDLINE adalah basisdata utama kedokteran di U.S. National Library.
+    Basisdata ini berisi referensi dari artikel jurnal yang berkaitan dengan
+    sains kehidupan dengan konsentrasi pada biomedicine.</p>
+
+    <p>JabRef dapat melaukan muaturun dari basisdata Medline.
+    Untuk menggunakan fitur ini, pilih <b>Pencarian Web -> Pencarian Medline</b>,
+    kemudaian dialog pencarian Medline akan muncul di jendela sebelah kiri.</p>
+
+    <p>Ada dua cara untuk memilih entri yang akan dimuaturun:</p>
+
+    <ol>
+        <li>Tulis satu atau lebih dari Medline ID (dipisah dengan
+        koma/titik koma) di kotak pencarian.</li>
+
+        <li>Tulis nama atau kata yang dicari. Anda
+        bisa menggunakan kata <em>and</em> dan <em>or</em> serta
+        tanda kurung untuk memperhalus ekspresi pencarian.</li>
+    </ol>Setelah ini, tekan <b>Enter</b> atau tekan tombol <b>Mengambil</b>.
+    Apabila anda menggunakan pencarian teks, anda akan diberikan informasi
+    jumlah entri yang ditemukan, dan anda bisa menentukan berapa jumlah yang
+    akan dimuaturun.
+
+    <p>Entri yang diambil kemudian akan ditambahkan dalam basisdata anda yang aktif.</p>
+
+    <h2>Menggunakan Proxy Server</h2>
+
+    <p>Apabila anda ingin menggunakan http proxy
+    server, anda harus memasukkan nama server name serta nomor port ke java saat
+    menjalankan.</p>
+
+    <p><code>java -Dhttp.proxyHost="namakomputer"
+    -Dhttp.proxyPort="nomorport"</code></p>
+
+    <p>Pengaturan lingkungan ini didokumentasikan di 
+    <a href="http://docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html">Sun J2SE documentation</a>.</p>
+
+</body>
+</html>
diff --git a/src/help/in/OwnerHelp.html b/src/help/in/OwnerHelp.html
index 7a3c6af..5d4331a 100644
--- a/src/help/in/OwnerHelp.html
+++ b/src/help/in/OwnerHelp.html
@@ -1,21 +1,21 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Bidang 'pemilik'</h1>
-
-    <p>JabRef dapat memberikan tanda pada semua entri basisdata
-    yang ditambahkan atau yang diimpor dengan nama pengguna anda.
-    And juga dapat mengatur aktif tidaknya fitur ini dari 
-    <b>Preferensi -> Umum</b>, serta merubah nama pemilik yang ingin
-    anda gunakan untuk menandai semua entri. Nama pemilik bawaan adalah
-    nama pengguna anda.</p>
-
-    <p>Nama pemilik dituliskan dalam bidang bernama 'pemilik',
-    yang pada pengaturan bawaan akan muncul dalam tab <b>Umum</b>
-    pada Penyunting Entri.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Bidang 'pemilik'</h1>
+
+    <p>JabRef dapat memberikan tanda pada semua entri basisdata
+    yang ditambahkan atau yang diimpor dengan nama pengguna anda.
+    And juga dapat mengatur aktif tidaknya fitur ini dari 
+    <b>Preferensi -> Umum</b>, serta merubah nama pemilik yang ingin
+    anda gunakan untuk menandai semua entri. Nama pemilik bawaan adalah
+    nama pengguna anda.</p>
+
+    <p>Nama pemilik dituliskan dalam bidang bernama 'pemilik',
+    yang pada pengaturan bawaan akan muncul dalam tab <b>Umum</b>
+    pada Penyunting Entri.</p>
+</body>
+</html>
diff --git a/src/help/in/PreviewHelp.html b/src/help/in/PreviewHelp.html
index ee126fe..a0f2911 100644
--- a/src/help/in/PreviewHelp.html
+++ b/src/help/in/PreviewHelp.html
@@ -1,22 +1,22 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Pengaturan pratampilan entri</h1>
-
-    <p>Pratampilan entri menggunakan cara yang sama seperti
-    yang digunakan pada fasilitas
-    <a href="CustomExports.html">Penapis ekspor suaian</a>.
-    Ketika melakukan pratampilan, entri diproses menggunakan
-    salah satu dari dua pilihan tataletak (anda bisa merubah
-    tataletak yang dipilih dengan menekan F9) untuk menghasilkan
-    kode HTML yang kemudian dimunculkan di panel pratampilan.
-    Untuk memodifikasi penampilan dan isi dari pratampilan, anda
-    perlu menyunting tataletak pratampilan menggunakan sintak
-    yang dijelaskan di berkas bantuan 
-    <a href="CustomExports.html">Penapis ekspor suaian</a>.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Pengaturan pratampilan entri</h1>
+
+    <p>Pratampilan entri menggunakan cara yang sama seperti
+    yang digunakan pada fasilitas
+    <a href="CustomExports.html">Penapis ekspor suaian</a>.
+    Ketika melakukan pratampilan, entri diproses menggunakan
+    salah satu dari dua pilihan tataletak (anda bisa merubah
+    tataletak yang dipilih dengan menekan F9) untuk menghasilkan
+    kode HTML yang kemudian dimunculkan di panel pratampilan.
+    Untuk memodifikasi penampilan dan isi dari pratampilan, anda
+    perlu menyunting tataletak pratampilan menggunakan sintak
+    yang dijelaskan di berkas bantuan 
+    <a href="CustomExports.html">Penapis ekspor suaian</a>.</p>
+</body>
+</html>
diff --git a/src/help/in/RevisionHistory.html b/src/help/in/RevisionHistory.html
index c11e3f5..de3993a 100644
--- a/src/help/in/RevisionHistory.html
+++ b/src/help/in/RevisionHistory.html
@@ -1,1466 +1,1466 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-  <h1>Riwayat Perbaikan</h1>
-
-  <h3>Versi 2.7</h3>
-    <ul>
-      <li>Pengimpor Medline meringkas nama belakang ganda dalam kurung kurawal.</li>
-      <li>Pengimpor RIS dapat menggunakan bidang judul ganda dalam satu rangkaian.</li>
-      <li>Tidak lagi menggunakan "komentar" di semua tipe, karena menyebabkan konflik dengan format BibTeX.</li>
-      <li>Penanganan nama tambahan (Jr, dll.) dalam pengimpor Medline sudah diperbaiki.</li>
-      <li>Penambahan argumen angka tambahan untuk pemformat Penulis, untuk menghitung jumlah penulis
-        yang ditampilkan jika sudah melebihi jumlah penulis maksimum.</li>
-      <li>Penambahan pemilih isi untuk bidang "review" di penyunting entri.</li>
-      <li>Perbaikan deteksi type berkas ketika menambah tautan baru. Sekarang bisa membedakan
-        adanya ekstensi ganda misalnya ".ps.gz".</li>
-      <li>Perbaikan isi otomatis untuk nama penulis. Menambahkan pilihan dengan format
-        'Namadepan Namabelakang' atau 'Namabelakang, Namadepan', atau gabungan keduanya.</li>
-      <li>Memperbaiki kutu fungsi impor jika penapis impor tidak ditemukan.</li>
-    </ul>
-
-  <h3>Version 2.7beta 2</h3>
-    <ul>
-      <li>Penambahan dukungan untuk pengenal MrdLib atau ekstraksi metadata ketika PDF diseret masuk ke 
-	  dalam JabRef.</li>
-      <li>Penambahan pilihan dalam "Program eksternal" untuk mematikan buka otomatis dari
-          dialog melayari ketika membuat tautan berkas baru.</li>
-      <li>Perbaikan kunci pintasan pemercepat. Kunci pintasan untuk impor ke basidata baru 
-          sekarang Ctrl-Alt-I.</li>
-      <li>Aksi "Membuka URL atau DOI" sekarang menggunakan tautan URL dalam bidang "berkas" yang tadinya
-          hanya akan menuju ke bidang "url" atau "doi".</li>
-      <li>Pembatasan port pendengar jauh hanya dalam interval 1025-65535.</li>
-      <li>Penambahan terjemahan basasa Jepang oleh Koji Yokota.</li>
-      <li>Penambahan kotak pengulung untuk penyunting entri ketika tidak sesuai dengan jendela. 
-          Perbaikan ini dilakukan oleh Matthias Erll.</li>
-      <li>Sekarang memungkinkan menyalin ke entri dari dialog pencarian.</li>
-      <li>Penambahan pesan kesalahan yang tepat ketika mencoba mencari dan 
-          menghasilkan ekspresi yang salah.</li>
-      <li>Penambahan dialog kesalahan jika tampilan suaian sendiri tidak bisa dimuat.</li>
-      <li>Penggunakan tempelan dari Alexander Hug untuk mengimpor secara benar doi 
-          dari berkas RIS ScienceDirect.</li>
-      <li>Menghilangkan kemungkinan NullPointerException di SearchExpressionTreeParser.</li>
-    </ul>
-
-    <h3>Versi 2.7beta</h3>
-    <ul>
-	<li>Beberapa perbaikan untuk penapis ekspor MS Office.</li>
-	<li>Diperkenalkan tiga pilihan untuk memastikan membuat kunci yang unik.
-        Yang pertama bawaan (menandai dengan a, b, dst.), yang kedua dimodifikasi
-        (menandai dengan b, c, dst.) dan yang ketiga selalu menandari dengan huruf 
-        (a, b, dst.).</li>
-	<li>Warna huruf dan latar di penyunting entri sekarang bisa diatur
-        (Pengaturan -> Preferensi -> Penampilan).</li>
-	<li>Judul yang muncul di jendela utama sekarang menampilkan nama berkas serta
-        lokasi direktorinya secara penuh.</li>
-	<li>Sekarang entri dapat ditandai dengan warna berbeda. Penandaan otomatis entri
-        yang diimpor menggunakan warna berbeda tanpa mempengaruhi entri lain yang sudah
-        ditandai.</li>
-	<li>Tambahan fitur baru (AlatBantuan -> Pindai Basisdata... -> Menyelesaikan
-        kesamaan kunci BibTeX) untuk mencari adanya kunci yang sama kemudian memberikan
-        saran untuk mengatasi permasalahan adanya kunci yang sama.</li>
-	<li>Tambahan pemeriksaan untuk memastikan bahwa program tidak keluar dulu
-        ketika masih dalam proses menyimpan berkas yang besar. Pesan menunggu ditampilkan
-        dengan disediakan tombol pembatalan.</li>
-	<li>Tambahan tanda apostrophe (') sebagai karakter tidak sah untuk kunci BibTeX.</li>
-	<li>String BibTeX yang saling mengacu sama lain sekarang sudah bisa diurutkan
-        ketika menyimpan berkas bib.</li>
-	<li>Mengatasi kutu ketika menggabung perubahan eksternal - berkas tidak akan 
-        dilaporkan sebagai diubah secara eksternal setelah perubahan penggabungan.</li>
-	<li>Mengatasi kutu di fitur tautan Ganti/namaulang yang menyebabkan tautan yang
-        disimpan menjadi salah pada struktur direktori tertentu.</li>
-	<li>Mengatasi kutu: kurung kurawal sekarang bisa digunakan sebagai argumen untuk
-        pemformat. </li>
-	<li>Mengatasi kutu yang membuat macet ketika membuat kunci untuk bidang entri
-        yang mempunyai referensi silang.</li>
-	<li>String BibTeX sekarang dapat diselesaikan sebelum proses membuat singkatan
-        nama jurnal.</li>
-	<li>Memodifikasi pembuat kunci [shorttitle] dan [veryshorttitle] sehingga
-        mempertimbangkan tanda petik pada kata, dan membuang karakter tanda pentung
-        (hanya menggunakan angka dan huruf saja).</li>
-	<li>Mengganti berbagai pemformat ekspor dengan pemformat Penulis, 
-        yang menyediakan berbagai pilihan format yang fleksibel.</li>
-    </ul>
-
-
-
-    <h3>Versi 2.6</h3>
-    <ul>
-        <li>Fixed IEEExplorer and ACM fetchers to adapt to web site changes.</li>
-        <li>Active preview (1 or 2) is now remembered.</li>
-        <li>Applied patch by Igor L. Chernyavsky. to prevent loss of entry selection after
-            generating key.</li>
-        <li>Changed OpenDocument Spreadsheet export so the mimetype file is written correctly
-            at the start of the zip file.</li>
-        <li>Fixed bug when importing preferences: custom export filters would not be updated
-            after import.</li>
-        <li>Changed help page loading procedure so help pages can be loaded for plugin entry
-            fetchers.</li>
-        <li>Made it possible to define customized entry types with either-or conditions on
-            required fields, e.g. using a pseudo-field called "author/editor" will indicate
-            that the entry requires either the "author" or the "editor" field set.</li>
-        <li>Fixed bug: entries of a customized type could be indicated as complete even if
-            BibTeX key was not set.</li>
-        <li>Changed deletion process for some temporary files to avoid leftover files.</li>
-    </ul>
-
-    <h3>Versi 2.6beta3</h3>
-    <ul>
-        <li>Added ScienceDirect entry fetcher that utilizes the BibSonomy scraper.</li>
-        <li>Changed non-native file dialog setting so files cannot be renamed. This prevents
-          accidentally entering rename mode when trying to enter directory. Can be enabled
-          again in Options -> Preferences -> Advanced.</li>
-        <li>Added new JStor fetcher that utilizes the BibSonomy scraper to obtain BibTeX data.</li>
-        <li>Fixed bug in CookieHandlerImpl.</li>
-        <li>Fixed bug; when dragging a file into JabRef and asking to move it to the file
-          directory, warning will now be given if the destination file already exists. Patch
-          by Alastair Mailer.</li>
-        <li>When dragging a file into JabRef and asking to copy or move it to the file directory,
-          it is now possible to rename to an arbitrary name. Patch by Alastair Mailer.</li>
-        <li>Added "review" field to BibTeXML export.</li>
-        <li>Added Reset button to entry fetchers. Patch by Dennis Hartrampf and Ines Moosdorf.</li>
-        <li>Changed Microsoft Office XML export so "number" rather than "issue" is exported
-          as <b:Issue>, which conforms with import format.</li>
-        <li>Added confirmation dialog that allows saving without backup in cases when
-          backup creation fails.</li>
-        <li>Fixed bug 2938562: using the move/rename feature on a file link could give an
-          absolute link even if the file was put below the main file directory.</li>
-        <li>Fixed bug 2931293: error generating key with [authorsAlpha] for short names.</li>
-        <li>When checking for external modifications, file size is now checked in addition
-          to the time stamp.</li>
-        <li>Fixed handling of maximised state when shutting down and starting up JabRef.
-          Patch by Igor L. Chernyavsky.</li>
-        <li>Fixed bug that prevented correct handling of DOS short file names. Patch
-          by Igor L. Chernyavsky.</li>
-        <li>Added support for KOI8_R character set.</li>
-        <li>Removed DocumentPrinter class, using standard API functions instead. Patch by
-          Tony Mancill.</li>
-        <li>Removed HightlightFilter class, using standard API functions instead. Patch by
-          Tony Mancill.</li>
-        <li>Changed keyboard shortcut for IEEXplorer search to Alt-F8.</li>
-        <li>Disabled JStor search, which doesn't work due to API changes.</li>
-        <li>External file type manager now removes "." prefix in file type extension if the user
-          has typed it that way.</li>
-        <li>Preview panel now defaults to preview layout 1 instead of 2. Switched default layouts.</li>
-        <li>Added IfPlural formatter by Russell Almond. The formatter outputs its first argument
-          if the input field contains " and " and the second one otherwise.</li>
-        <li>Applied patch by Philipp Cordes and Björn Kahlert for improved handling of names by
-          autocompleter. The patch also reorganizes the autocompleter classes.</li>
-        <li>Table will now scroll to keep the currently edited entry visible if an edit leads to
-          the entry getting sorted to a different position.</li>
-        <li>Reworked author and editor handling in Docbook export. Added Docbook XML header.</li>
-        <li>Database will no longer be marked as changed after accepting external changes, unless one or
-          more changes were not accepted before merging, and unless database was already marked as
-          changed.</li>
-        <li>Fixed bug: undesired autocompletion when saving file.</li>
-        <li>Fixed bug: entry editor doesn't appear when new entry is added while a filtering search or
-          group selection is active.</li>
-        <li>Fixed bug in writing of metadata on Windows. For certain metadata lengths newlines would be
-          messed up after the metadata comment in a bib file.</li>
-        <li>Search dialog now automatically previews first hit, and hides preview if there are no hits.</li>
-    </ul>
-
-    <h3>Versi 2.6beta2</h3>
-    <ul>
-
-        <li>Added export formatter "Default" which takes a single argument. Outputs the string to format
-          unchanged if it is non-empty, otherwise outputs the argument.</li>
-        <li>Added option under Options -> Preferences -> General for disabling the strict enforcing of
-          correct BibTeX keys. Disabling this makes it possible to use e.g. umlaut characters in keys.</li>
-        <li>Modified launcher script for Windows installer to give higher heap size limit.</li>
-        <li>Improved autocompletion. All fields with autocompletion which have content selectors will now
-          autocomplete on content selector values. For the "journal" field, the autocompleter will now
-          additionally use entries from the current journal abbreviations list, and will also complete
-          on the entire field up to the cursor rather than just looking at the last word only.</li>
-        <li>Added support for postformatter in Layout. The postformatter will be run after
-          the formatters called from a layout.</li>
-        <li>Improved group autogeneration. Added option to generate groups based on author or editor
-          last names. Autogenerated groups are now alphabetized.</li>
-        <li>Modified Endnote export filter so "--" gets converted to "-" in the "pages" field.</li>
-        <li>Changed keyword groups so they will match on whole words only. E.g. a keyword group for the
-          keyword "can" will no longer match the keyword "scanner".</li>
-        <li>Improved entry type determination and author parsing for some varieties of CSA files.</li>
-        <li>Minor change to Harvard RTF export. Added space after "ed.", and added editor to output for
-          inbook entries.</li>
-        <li>Set limit to the number of displayed characters in group names in groups tree in order to
-          avoid group panel width problems.</li>
-        <li>Changed file link handling so all remote links classified as URL can be opened through
-          the browser. Setting a different file type manually makes JabRef call a remote link using
-          the handler application instead.</li>
-        <li>Modified Endnote/refer import filter to strip "doi:" from the %R field.</li>
-        <li>Modified HTML conversion so single newline is displayed in the preview (and HTML exports) as
-          <br>, while multiple newlines are displayed as <p>.</li>
-        <li>Fixed bug: switching entry editor between entries of different type may result in switching
-          of entry editor tabs.</li>
-        <li>Fixed bug: adding external file link leads to relative path from root directory if file
-          directory is set to an empty string.</li>
-        <li>Fixed error message when a # in a BibTeX string prevents saving. No longer states that the
-          problem is in an entry, but specifies that it is in a string.</li>
-        <li>Fixed bug: ODS export doesn't resolve BibTeX strings.</li>
-        <li>Fixed bug: content selector for "editor" field uses "," instead of " and " as delimiter.</li>
-        <li>Fixed bug: editing source doesn't allow change of entry type.</li>
-        <li>RTFChars formatter now converts --- to \emdash and -- to \endash.</li>
-    </ul>
-
-    <h3>Versi 2.6beta</h3>
-
-    <ul>
-        <li>Added pages information to several entry types in Endnote export.</li>
-        <li>Modified LastPage formatter so it returns the number when only the number of pages is given.</li>
-        <li>Modified search algorithms so LaTeX commands are removed before search. For instance, this
-            means that the value "test \textit{case}" now matches the search string "test case".</li>
-        <li>Changed default table font family to "SansSerif".</li>
-        <li>Can now create lock file while writing a bib file. The lock file is checked before
-            saving, and before scanning an externally changed file, in order to avoid reading an
-            unfinished file.</li>
-        <li>Added support for dragging a file link from the file column to another application.</li>
-        <li>Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.</li>
-        <li>Improved ISI import filter so DOI information is included.</li>
-        <li>Fixed bug: metadata changes would not be detected as external changes to a database.</li>
-        <li>Fixed bug: when accepting external changes and not saving before new changes are
-            detected, the previously accepted changes would also be listed.</li>
-        <li>Fixed bug in Scifinder import where an empty Inventor field could overwrite the
-            author field.</li>
-        <li>Fixed bug in autocompleter. Current suggested completion would be added to the field
-            if the user closed the entry editor or mouse clicked on another field.</li>
-        <li>Fixed problem with exporting to some MySql versions. Patch by François Dorin.</li>
-        <li>Fixed bug in handling of LaTeX character sequences - now sequences with = as command
-            character (e.g. "\={A}") are recognized.</li>
-        <li>Fixed bug: gray out / hide setting in groups panel is overridden on startup
-            by search mode selection. Added separate prefs key for the groups setting.
-            Fix suggested by Igor L. Chernyavsky.</li>
-        <li>Fixed bug: cookie manager installed by Download button in file field editor throws
-            an exception when trying to fetch from Medline.</li>
-        <li>Fixed bug: temporary files don't get deleted on shutdown.</li>
-        <li>Disabled table column reordering in import inspection window, since a user reported
-            problems when using this.</li>
-        <li>Changed years from 2008 to 2009 in splash image.</li>
-    </ul>
-    <h3>Versi 2.5 (June 22nd, 2009)</h3>
-    <ul>
-        <li>Modified export layout procedure so missing formatters can be reported in the error
-          output. Export now succeeds with warnings added where formatters are missing.</li>
-        <li>Conditional blocks (\begin{field}...\end{field}) in layout files can now be given a
-          semicolon-separated list of fields as argument. All fields must then be set for output
-          to be given.</li>
-        <li>Changed RIS import so multiple abstract fields in an entry are concatenated.</li>
-        <li>Added quoting of some special characters in SQL export, based on Kyle Crabtree's patch.</li>
-        <li>Fixed bug in MS Office 2007 XML export - editor names missing.</li>
-        <li>Fixed bug in plugin manager that prevented the "Download plugin" button from working.</li>
-        <li>Fixed bug in plugin manager routine that checks for installed versions of a plugin.</li>
-        <li>Fixed bug in startup that could show warnings multiple times when loading
-          from autosave files.</li>
-    </ul>
-    <h3>Versi 2.5beta 2 (May 19th, 2009)</h3>
-    <ul>
-        <li>Plugin manager now handles plugin versions correctly based on the version number in their
-          plugin.xml file.</li>
-        <li>Added formatter "Number" that outputs a sequence number for the current entry in the current
-          export operation. This formatter can be used to produce a numbered list of entries.</li>
-        <li>Added autosave feature.</li>
-        <li>Fixed bug in file link handling in BibTeXML export.</li>
-        <li>Improved handling of patents in Scifinder import.</li>
-    </ul>
-
-    <h3>Versi 2.5beta (April 21st, 2009)</h3>
-
-    <ul>
-      <li> Added Simplified Chinese translation.</li>
-      <li> Added simple plugin manager.</li>
-      <li> Added ~/.jabref/plugins as user-specific plugin directory.</li>
-      <li> Added \r marker to WrapFileLinks formatter that outputs file links without expanding relative links.</li>
-      <li> Added [authorsAlpha] key marker that formats authors according to the "alpha" BibTeX style. Patch submitted by Oliver Kopp.</li>
-      <li> Table sort order set by clicking and Ctrl-clicking table columns is now immediately set as default sort order in preferences.</li>
-      <li> Changed LyX pipe setting so it works whether ".in" is included or omitted.</li>
-      <li> Modified ISI importer so the words "of", "and" and "the" will not be capitalized in the title, journal or publisher fields.</li>
-      <li> When adding new local file link, browse dialog now appears immediately when opening file link editor, saving one mouse click.</li>
-      <li> Added "Remove all broken links" option in the resolver dialog for broken links when synchronizing file links.</li>
-      <li> Added rename option to Set/clear field dialog, to move contents from one field to another.</li>
-      <li> Added Back and Forward actions, for switching between recently edited BibTeX entries.</li>
-      <li> Added option under "Entry table" to designate fields as numeric for sorting purposes.</li>
-      <li> Added possibility for custom export filters to define their own name formatters. This is done by adding a file named "<filtername>.formatters". This file defines one formatter on each line, with each line containing the name of the formatter and the formatter definition, separated by a colon (:).</li>
-      <li> Added menu items for increasing/decreasing table font size, with shortcut keys Ctrl-plus and Ctrl-minus.</li>
-      <li> Added options to automatically mark entries imported into an existing database, and to unmark previously marked entries when importing.</li>
-      <li> Added ":(x)" modifier to key generator, specifying that the arbitrary string x should be used as a fallback value if the value returned by the field marker is empty.</li>
-      <li> Added ":upper" modifier to key generator, to force uppercase for a field marker.</li>
-      <li> Added buttons in External programs tab in Preferences for modifying settings for "Push to"-features, and removed obsolete fields.</li>
-      <li> Added support for DOI field in Endnote importer.</li>
-      <li> Added support for language and publication status fields in Medline import (publication status stored in "medline-pst" field).</li>
-      <li> Enabled cookie handling for downloading full-text articles.</li>
-      <li> Improved handling of invalid BibTeX keys containing white space. Parser will now try to piece together the key and avoid disturbing the continued parsing. Patch submitted by Stephan Lau.</li>
-      <li> Cosmetic change to the entry type label to the left in the entry editor.</li>
-      <li> Changed name handling so a single-entry name without a capital initial letter, such as "unknown", will be treated as a solitary last name rather than a von particle.</li>
-      <li> Changed table selection coloring so entries that are grayed out or marked can be distinguished from normal entries when selected.</li>
-      <li> Changed handling of "affiliation" in Medline import - now makes sure to escape # characters before storing.</li>
-      <li> Modified ACM portal fetcher due to web site changes.</li>
-      <li> Improvements to IEEEXplore fetcher - better handling of month and page fields.</li>
-      <li> Changed behaviour of source panel when an entry contains imbalanced # characters - the panel can now show the entry in its invalid form, allowing the user to fix the problem.</li>
-      <li> Improved handling of PDF files without XMP metadata - other metadata will now be retained. Patch submitted by Felix Langner.</li>
-      <li> Fixed bug in parsing file field - double spaces in file names would be reduced to single spaces, breaking the file link. Fix submitted by Uwe Kuehn.</li>
-      <li> Fixed NullPointerException when downloading external file and file directory is undefined.</li>
-      <li> Fixed bug in HTMLConverter.</li>
-      <li> Fixed NullPointerException in key generator for incomplete names.</li>
-      <li> Fixed bug in removing custom export filters.</li>
-      <li> Fixed bug 2225371: restart is no longer required after adding a new custom export filter. </li>
-      <li> Fixed bug in "Move/rename file" feature in file field editor with regard to undefined file directory.</li>
-      <li> Fixed bug in Ris importer.</li>
-      <li> Fixed NullPointerException in Endnote importer.</li>
-    </ul>
-
-
-    <h3>Versi 2.4.2 (November 1st, 2008)</h3>
-
-    <ul>
-      <li>Added missing layout formatters FirstPage and LastPage.</li>
-      <li>Fixed a bug regarding ParamLayoutFormatter loaded from plugin.</li>
-      <li>Fixed crash during initalization of journal abbreviation list.</li>
-      <li>Added option to have JabRef search for external file when "Open file" function is chosen for an entry without any linked files. This is similar to what was always done in JabRef 2.3.1 and earlier.</li>
-      <li>Improved regular expression file search, so the regular expression can contain field markers as used for BibTeX key generation in addition to just regular fields. It is no longer possible to call arbitrary layout formatters, but the modifiers "upper", "lower" and "abbr" (for case conversion and abbreviation) can be used.</li>
-      <li>Ris importer now imports PB as "school" instead of "publisher" for THES entries.</li>
-      <li>Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.</li>
-    </ul>
-
-    <h3>Versi 2.4.1 (October 8th, 2008)</h3>
-
-      <ul>
-        <li>Fixed bug: layout formatter arguments were not set when using a ParamLayoutFormatter loaded from plugin.</li>
-        <li>Fixed bug: when abbreviating first names, for authors with first names connected with "-", only the first letter is shown.</li>
-        <li>Enhanced ExportFormatTemplate plugins with an optional property "encoding" which overrides the default encoding with the given one.</li>
-        <li>Fixed menu colors under Windows Vista.</li>
-        <li>Fixed bug 2137771: Missing file extension when downloading.</li>
-        <li>Fixed bug 2105329: Ensure that newly added entry is visible in table.</li>
-        <li>Fixed bug 1908222: Preference "Fit table horizontally on screen" doesn't work</li>
-        <li>Fixed bug 2119059: Handling of the A1 tag in the RIS format.</li>
-        <li>Added missing help file for ACM digital library fetcher.</li>
-        <li>Added option for whether to use IEEE LaTeX journal abbreviation list.</li>
-        <li>Added tooltip to menu items in push-to-application popup menu.</li>
-      </ul>
-
-
-    <h3>Versi 2.4 (September 1st, 2008)</h3>
-
-      <ul>
-        <li>Added mappings for some special characters that need to be sanitized when generating BibTeX keys.</li>
-        <li>Added ACM Digital Library fetcher by Aaron Chen.</li>
-        <li>Added new entry types (conference, patent, standard, electronic).</li>
-        <li>Improvements to IEEEXplore fetcher.</li>
-        <li>Added explanatory text to indicate that "ps" and "pdf" files are legacy features.</li>
-        <li>Fixed unexpected behaviour of "Open PDF or PS" menu item - now looks in "file" field, and does not launch search for external files.</li>
-        <li>Fixed bug 1827568: 'Save database' might not store current edit in entry editor.</li>
-        <li>Fixed bug 2027944: updating custom export definitions requires restart.</li>
-      </ul>
-
-
-    <h3>Versi 2.4beta (March 12th, 2008)</h3>
-
-      <ul>
-	<li>Added "protection" flag in Database properties. When this flag is set, JabRef will refuse to save the database when the file has been externally modified, until the changes have been reviewed and partly or completely accepted.</li>
-	<li>Fixed bug where the external update notification in the side pane would remain even if the referred database was closed.</li>
-	<li>Added two new search modes - display search results in a dialog, and global search.</li>
-	<li>Support for fetching from the command line using --fetch (contributed by Jan F. Boldt and David Kaltschmidt).</li>
-	<li>Support for fetching from Spires (contributed by Fedor Bezrukov).</li>
-	<li>Support for fetching from JSTOR (contributed by Tobias Langner, Juliane Doege, Sebastian de Hoog and Christoph Jacob)</li>
-	<li>Added context menu for file list editor with options to move/rename linked file as well as to automatically move the file to file directory and optionally rename after BibTeX key.</li>
-	<li>JabRef can now be extended by plugins (using the Java Plugin Framework JPF as the underlying technology). Currently extension points exist for:
-          <ul>
-            <li>ImportFormat</li>
-            <li>ExportFormat based on Templates</li>
-            <li>ExportFormat based on IExportFormat (contributed by Kariem Hussein)</li>
-            <li>LayoutFormatter</li>
-            <li>EntryFetcher</li>
-            <li>PushToApplication</li>
-          </ul>
-           JabRef uses JPFCodeGenerator (which was written just for JabRef) to generate helper classes for making JPF easier. Current version used: 0.4 http://forge.spline.inf.fu-berlin.de/projects/jpfcodegen/
-	</li>
-	<li>Print warnings if insufficient Java version is used or if JRE is not from Sun.</li>
-	<li>Memory Stick Mode: JabRef automatically loads configuration settings from jabref.xml and also writes them there if enabled.</li>
-	<li>Improved handling of crossrefs. Fields are now resolved in preview and export.</li>
-	<li>Updated dependencies, now using: JempBox-0.2</li>
-	<li>Improved handling of ArXiv URIs.</li>
-	<li>Changed default preference value: now using import inspection dialog also when just a single entry is imported.</li>
-	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
-	<li>[ 1738920 ] Fixed: Windows Position in Multi-Monitor environment</li>
-	<li>[ 1795355 ] Fixed: LatexFieldFormatter omits "{" on beginning of optional field</li>
-	<li>[ 1297576 ] New feature: Printing of entry preview (use right-click menu)</li>
-	<li>[ 1717849 ] Fixed: Bug in aux import (contributed by Kai Eckert)</li>
-	<li>[ 1749613 ] Fixed: About translation</li>
-	<li>[ 1709449 ] Fixed: Clicking a DOI from context menu fails</li>
-	<li>[ 1869331 ] Fixed: Uninstall after silent install removes Windows start menu</li>
-	<li>[ 1723219 ] Fixed: Strange message (LyX) while installing 2.3</li>
-	<li>Added handling of unknown file types when synchronizing the file field.</li>
-	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
-	<li>Moved file preferences from General tab to new File tab.</li>
-	<li>Reduced horizontal size of preferences dialog.</li>
-	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
-	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).    </li>
-      </ul>
-
-
-    <h3>Versi 2.3.1 (November 29th, 2007)</h3>
-
-      <ul>
-	<li>Removed default applications for file types under Mac OS X, and made use of the standard "/usr/bin/open <filename>" way to open files except when an application name is explicitly set.</li>
-	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
-      </ul>
-
-
-    <h3>Versi 2.3 (November 8th, 2007)</h3>
-
-      <ul>
-	<li>Added handling of unknown file types when synchronizing the file field.</li>
-	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
-	<li>Moved file preferences from General tab to new File tab.</li>
-	<li>Reduced horizontal size of preferences dialog.</li>
-	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
-	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).</li>
-      </ul>
-
-
-    <h3>Versi 2.3beta3 (October 6th, 2007)</h3>
-
-      <ul>
-	<li>Export formats that output the character encoding now use common names for encodings instead of Java-specific names.</li>
-	<li>Added "Open" button in external link dialog box to test or use the link.</li>
-	<li>Added formatter WrapFileLinks which iterates over file links, producing a formatted string for each containing any desired information about the file link.</li>
-	<li>Applied Fedor Bezrukov patch (setting User-Agent in URLDownload to solve ArXiv problem).</li>
-	<li>Applied Aaron Chen's patch for fixing bugs in IEEExplore fetcher.</li>
-	<li>Applied Edward Valeev's patch for handling article numbers replacing pages in Refer/Endnote import.</li>
-	<li>Added toolbar button to entry editor for writing XMP-metadata.</li>
-	<li>Added paste and drag & drop support to file list editor.</li>
-	<li>Added "authorLast" and "editorLast" markers for using last author's last name in BibTeX keys.</li>
-	<li>Added support for file field in Write XMP action.</li>
-	<li>Numeric fields (year, volume, number, pmid, citeseercitationcount) are now sorted as numbers when possible.</li>
-	<li>Improvements to the Ovid import filter.</li>
-	<li>Modified AuthorLastFirstAbbreviator and AuthorAbbreviator to accept names in both last-first and first-first format, but always return in last-first format. These two formatters are identical.</li>
-	<li>[ 1648789 ] Fixed: Problem on writing XMP when option to leave out some fields was active.</li>
-	<li>[ 1561990 ] Fixed: Exporting to WinEdt - apostrophe.</li>
-	<li>Fixed bug in entry editor: source panel edits were not properly stored when clicking a different entry in the main table.</li>
-	<li>Fixed problem with "Synchronize file links" not honouring database specific file directory.</li>
-	<li>Fixed problem with file type selection in external file link editor not being up-to-date.</li>
-	<li>Fixed problem with wrong enable/disable behaviour of Clear search button when switching between tabs.</li>
-	<li>Fixed argument parsing in AbstractParamLayoutFormatter so \t and \n can be used for tabs and newlines.</li>
-      </ul>
-
-
-    <h3>Versi 2.3beta2 (August 29th, 2007)</h3>
-
-      <ul>
-	<li>When user chooses to save to an existing file, and answers that the file should not be overwritten, a new file dialog now appears instead of the operation cancelling.</li>
-	<li>Removed antialias setting for main table, because it interferes with proper rendering on LCDs when running under JRE 6. Removed non-optional antialias settings for entry editor for the same reason.</li>
-	<li>Changed external link handling so remote (http) links can be sent to the external application. Applications like Evince and Gimp can open remote links.</li>
-	<li>Replaced Simle HTML export filter with improved version by Mark Schenk.</li>
-	<li>Introduced ParamLayoutFormatter interface for layout formatters that can take an argument by the following syntax: \format[MyFormatter(argument)]{\field}. Implementing classes contain a setArgument(String) method that receives the argument (if any) before the format() method is called.</li>
-	<li>Timestamp and owner fields are now set also when appending a bib file, and new options have been introduced to control whether imported/appended/pasted entries should have these fields overwritten if already set.</li>
-	<li>Added operations for adding file links in import inspection window, and made file and URL icons in the table clickable.</li>
-	<li>Removed PDF and PS columns and operations in import inspection window (replaced by operations on the "file" field).</li>
-	<li>File field column in main table now shows file type icon instead of generic icon.</li>
-	<li>Modified Endnote export to take "file" field into account, and to resolve full paths to PDF files.</li>
-	<li>Added "Auto" button to automatically set "owner" field to the default username.</li>
-	<li>Added \encoding tag for begin/end layouts in export filters to print the name of the character encoding used for the export. The tag is not available in entry layouts.</li>
-	<li>Added \% as a supported LaTeX command, producing '%'.</li>
-	<li>Fixed bug in HTMLChars: commands like {\aa} and {\o} were not processed properly, even though defined in Globals.HTMLCHARS.</li>
-	<li>Fixed bug that made it possible to accidentally close database without saving, when error occurs during the save operation.</li>
-      </ul>
-
-
-    <h3>Versi 2.3beta (June 28th, 2007)</h3>
-
-      <ul>
-	<li>Added MIS Quarterly export format.</li>
-	<li>Added support for COPAC file format.</li>
-	<li>Added RemoveTilde LayoutFormatter to deal with Bibtex non-breakable spaces.</li>
-	<li>Added autocompletion feature for author/editors and other fields.</li>
-	<li>Added feature to save all open databases.</li>
-	<li>Added support for pushing citations to Vim when Vim server is enabled.</li>
-	<li>Added missing option for specifying the path to LEd.exe.</li>
-	<li>Added -s/--nosplash command line option for disabling the splash screen.</li>
-	<li>Added new field marker [auth.etal] for key generation.</li>
-	<li>Added support in XMP metadata handling for bibtex string resolution.</li>
-	<li>When opening databases, already open files are now skipped.</li>
-	<li>Option to use native instead of Swing file dialogs is now available on all OSes.</li>
-	<li>Synchronize external links now searches entire database, not selected entries.</li>
-	<li>Medline import now adds <Affiliation> information into the "institution" field.</li>
-	<li>Improved handling of external links. The 'file' field can now specify a list of external links, and arbitrary file types are supported. Old-style PDF and PS links can be moved automatically into the 'file' field.</li>
-	<li>Fixed bug in RIS and Refer/Endnote imports. Entries with editors but no authors are now imported properly.</li>
-	<li>Fixed missing export formatter AuthorFirstFirstCommas.</li>
-	<li>Fixed minor bug in Harvard export with missing space between year and title.</li>
-	<li>Fixed bug that caused lockup when connection to IEEExplore fails.</li>
-	<li>Fixed wrong dependency in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed problem with foreign characters in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed problem with key generation in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed bug in duplicate search that made misc entries never get detected as duplicates.</li>
-	<li>Fixed bug in XMP reimport from DublinCore related to month strings.</li>
-      </ul>
-
-
-    <h3>Versi 2.2 (January 30th, 2007)</h3>
-
-      <ul>
-	<li>Added progress bar to indicate progress when synchronizing PS/PDF links.</li>
-	<li>Option to autogenerate key for imported entries now also affects entries imported
-      without using the import inspection window.</li>
-	<li>Modified quick jump behaviour so sequences of letters can be found. Timeout or
-      ESC resets the search.</li>
-	<li>Improved XMP support:
-          <ul>
-	    <li>JabRef now reads and write DublinCore and Legacy Document Properties;
-		Caution needs to be used though since, JabRef does overwrite existing values.</li>
-	    <li>XMP privacy filter can be used to prevent sensible fields to be exported.</li>
-          </ul>
-	</li>  
-	<li>Support for OAI2 identifiers with subcategories, e.g. math.RA/0601001</li>
-	<li>Fixed bug that made explicit groups appear empty after updating group tree from external change.</li>
-	<li>New windows installer thanks to Uwe Stöhr.</li>
-	<li>[ 1641247 ] Fixed: No update of preview after generating bibtex key</li>
-	<li>[ 1631548 ] Fixed: Absolute paths should be stored for last open files.</li>
-	<li>[ 1598777 ] Fixed: Month sorting</li>
-	<li>[ 1570570 ] New Feature: Deselect all duplicates on import</li>
-	<li>[ 1574773 ] Fixed: sanitizeUrl() breaks ftp:// and file:///</li>
-	<li>[ 1609991 ] Fixed: Silverplatter Import: Publisher and Year confused</li>
-	<li>[ 1608391 ] Fixed: Medline Search Editbox size gets to big</li>
-      </ul>
-
-
-    <h3>Versi 2.2beta2 (November 26th, 2006)</h3>
-
-      <ul>
-	<li>Redesigned export functions to simplify GUI and provide "Export selected entries" functionality. Export filter is now chosen using the file type dropdown menu in the file dialog.</li>
-	<li>Fixed bug that caused UnsupportedEncodingException on Windows when saving.</li>
-	<li>Added warning dialog when exporting failed.</li>
-	<li>Added fix for exporting special chars in RTF like éóú...</li>
-	<li>Added NameFormat LayoutFormatter based on Bibtex method name.format$</li>
-	<li>Added Fetch from ArXiv.org to Web Search<br />
-            [1587342] Quering ArXiv (and any OAI2 Repository)</li>
-	<li>[1594123] Fixed: Failure to import big numbers in Bibtex</li>
-	<li>[1594169] Fixed: Entry editor navigation between panels faulty</li>
-	<li>[1588028] Fixed: Export HTML table has relative DOI URL</li>
-	<li>[1601651] Fixed: PDF subdirectory - missing first character</li>
-      </ul>
-
-
-    <h3>Versi 2.2beta (October 13th, 2006)</h3>
-
-      <ul>
-	<li>Added Mark Schenk's advanced HTML export filter.</li>
-	<li>Added options to copy/move/link to dragged linkable file (pdf, ps, etc.).</li>
-	<li>Removed unnecessary output text when scanning for external file changes.</li>
-	<li>Changed layout of entry editor to solve problem with collapsing text fields.</li>
-	<li>Added first version of support for XMP-metadata in PDFs.
-          <ul>
-	    <li>"Import into..."</li>
-            <li>Integrate with copy/move/link.</li>
-            <li>Added option to write all/selected PDFs in database</li>
-          </ul>
-	</li>
-	<li>Added tooltips to database tabs showing the file's full path.</li>
-	<li>Added function for setting or clearing specific fields in selected or all entries.</li>
-	<li>Setting a relative PDF/PS path in Database Properties now makes JabRef look for the directory relative to the bib file's location.</li>
-	<li>Removed Oxford comma from AuthorList...Comma-LayoutFormatters.</li>
-	<li>Added LayoutFormatters that print the Oxford comma.</li>
-	<li>Added missing space between abbreviated author first names: William Andrew Paul => W. A. Paul (used to be W.A. Paul)</li>
-	<li>Added LayoutFormatter for HTML paragraphs.</li>
-	<li>Changing Database Properties now causes the database to be marked as changed.</li>
-	<li>Improved simple search. Words are now treated as separate search terms, and phrases can be indicated with "double quotes".</li>
-	<li>When a letter key is pressed in the table, the first entry starting with the same letter (in the current sort column) is selected.</li>
-	<li>Bib files dragged into JabRef now appear in the Recent files menu.</li>
-	<li>Fixed bug in import dialog.</li>
-	<li>Better support for ISI files in general (should basically be better than INSPEC) including IEEE parsing.</li>
-	<li>Added regular expression search for auto-linking. Search is now more flexible by default.</li>
-	<li>Search operation also now search relative to the JabRef directory.</li>
-	<li>General improvements in Inspec ISI handling.</li>
-	<li>New LayoutFormatter: AuthorOrgSci - first author is in "last, first" all others in "first last". First names are abbreviated.</li>
-	<li>New LayoutFormatter: NoSpaceBetweenAbbreviations - spaces between multiple abbreviated first names are removed.</li>
-	<li>Improved PDF link resolver to produce proper URIs.</li>
-	<li>[1503956] Fixed: Help text instead of Help icon.</li>
-	<li>[1542552] Fixed: Wrong author import from ISI file.</li>
-	<li>[1534537] Fixed: resize groups interface</li>
-	<li>[1465610] Fixed: (Double-)Names containing hyphen (-) not handled correctly</li>
-	<li>[1436014] Fixed: No comma added to separate keywords</li>
-	<li>[1548875] Fixed: download pdf produces unsupported filename</li>
-	<li>[1545601] Fixed: downloading pdf corrupts pdf field text</li>
-	<li>[1285977] Fixed: Impossible to properly sort a numeric field</li>
-	<li>[1535044] Fixed: Month sorting</li>
-	<li>[1540646] Fixed: Default sort order: bibtexkey</li>
-	<li>[1553552] Fixed: Not properly detecting changes to flag as changed</li>
-      </ul>
-
-    <h3>Versi 2.1 (August 9th, 2006)</h3>
-
-      <ul>
-	<li>Added capability to drag files and WWW links into JabRef. BibTeX files will be opened normally, other files imported, and WWW links downloaded and imported.</li>
-	<li>The -v command line option now makes the application only print version number and quit immediately.</li>
-	<li>Duplicates within a set of imported entries are now found and shown in the import inspection window.</li>
-	<li>Mac users can now choose between native and Swing file chooser under Preferences -> Advanced.</li>
-	<li>Fixed missing duplicate warning when importing without import inspection window.</li>
-	<li>Fixed error in ISI import which allowed empty fields to be set, causing errors when saving and reloading entries.</li>
-	<li>Fixed missing time and owner stamps when importing entries (only in 2.1b/2.1b2).</li>
-	<li>Fixed erroneous updates in entry editor if user switches to a different entry while downloading PDF/PS file.</li>
-	<li>Fixed bug (only in 2.1b2) in calling file open/save dialog on Mac OS X.</li>
-	<li>Fixed bug that made duplicate resolver dialog pop under import inspection dialog.</li>
-      </ul>
-
-    <h3>Versi 2.1beta2 (June 29th, 2006)</h3>
-
-      <ul>
-	<li>Added option to toggle floating of marked entries to the top of the table.</li>
-	<li>Added option to open, append and import multiple BibTeX files.</li>
-	<li>Improved support for LaTeX special characters in HTML and RTF representations.</li>
-	<li>Fixed bug that made entry selection get lost when an edit modifies the entry's position in the main table.</li>
-	<li>Fixed bug in BibTeXML export (entry type name missing in tag).</li>
-	<li>Fixed name handling in (non-compliant) Endnote files giving all author names on the same line.</li>
-	<li>Fixed problem with keyword handling in Medline import.</li>
-	<li>Fixed (harmless) NullPointerException when medline fetch is cancelled.</li>
-	<li>Fixed bug in parser that made {"} illegal in fields quoted with ".</li>
-      </ul>
-
-    <h3>Versi 2.1beta (May 9th, 2006)</h3>
-
-      <ul>
-	<li>Known issue: font sizes cannot be changed, but should follow OS settings on Windows and Mac.</li>
-	<li>Known issue: some HTML may be handled inappropriately when downloading from IEEEXplore.</li>
-	<li>Changed Paste function so timestamp and owner fields are updated.</li>
-	<li>Added "Other" item to the "New entry ..." menu.</li>
-	<li>Changed sorting order so marked entries are displayed at the top of the table.</li>
-	<li>Added IEEEXplore search and download feature.</li>
-	<li>Added option to store entries in their original order. Unsorted table view now shows entries in their original order.</li>
-	<li>Added option to autogenerate keys for entries with missing keys before each save.</li>
-	<li>Improved handling of external URLs to prevent problems with special characters.</li>
-	<li>Medline and Endnote imports no longer automatically add curly braces around capital letters in title.</li>
-	<li>Float search now scrolls table to the top.</li>
-	<li>Fixed lockup problem in preview with uneven number of # characters in fields.</li>
-	<li>Fixed problem with default content selector fields reappearing after removal.</li>
-	<li>Fixed problem with unsupported character encodings being selectable and causing unreported save errors.</li>
-	<li>Fixed bug that blocked last line in table columns setup from being removed.</li>
-	<li>Fixed missing export formats from command line.</li>
-	<li>Fixed bug that made Review tab impossible to remove from entry editor.</li>
-	<li>Fixed bug in Medline XML import that assigned wrong PMID for some entries.</li>
-	<li>Fixed bug in custom export that collapsed sequences of two or more backslashes into a single backslash in output.</li>
-	<li>Fixed bug (misspelled formatter name) in Harvard RTF export.</li>
-      </ul>
-
-    <h3>Versi 2.0.1 (February 2nd, 2006)</h3>
-
-      <ul>
-	<li>Fixed bug that made a hidden entry editor under some circumstances store a field value to the wrong entry.</li>
-	<li>Fixed synchronization bug that made the opening of a new database sometimes fail.</li>
-	<li>Fixed bug in setting external journal lists when no personal list is set.</li>
-      </ul>
-
-    <h3>Versi 2.0 (January 30th, 2006)</h3>
-
-      <ul>
-	<li>Changed sorting selection interface for main table for more intuitive operation.</li>
-	<li>Made import operation update "working directory".</li>
-	<li>Removed hard-coded author/editor name rearrangement in OpenOffice and OpenDocument exports.</li>
-	<li>Fixed hangup when parsing RIS files from Nature.</li>
-	<li>Fixed NullPointerException when generating database from AUX file on Mac OS X.</li>
-	<li>Fixed bug in routine for adding braces around capital letters.</li>
-	<li>Fixed bug in switching preview layouts.</li>
-	<li>Fixed bug in link handling in entry preview.</li>
-      </ul>
-
-    <h3>Versi 2.0b2 (January 15th, 2006)</h3>
-
-      <ul>
-	<li>Changed field order in OpenDocument export
-	to comply with bibliography requirement.</li>
-	<li>Added support for inserting citations into
-	Emacs using gnuserv/gnuclient.</li>
-	<li>Added option to set a regular expression
-	replace operation on generated bibtex keys.</li>
-	<li>Added support for custom importers inside
-	a jar file.</li>
-	<li>Fixed bug in opening URLs containing "&"
-	on Windows.</li>
-      </ul>
-
-    <h3>Versi 2.0b (January 4rd, 2006)</h3>
-
-      <ul>
-	<li>Added a system for registering custom import
-	formats in the form of Java classes.</li>
-
-	<li>Added export option for OpenDocument
-	spreadsheet.</li>
-
-	<li>Added new options for name formatting in main
-	table.</li>
-
-	<li>Added REPEC-NEP import filter.</li>
-
-	<li>Added option for non-field parameters for export
-	formatters. If the parameters does not start with the
-	backslash character, it will be passed unchanged to the
-	formatter in place of any field value.</li>
-
-	<li>Added export formatter CurrentDate, which returns
-	the current date, and takes a format string as
-	parameter.</li>
-
-	<li>Added customization of table colors, accessible
-	from Tools -> Preferences -> Entry table.</li>
-
-	<li>Added new Appearance tab to preferences dialog to
-	gather appearance related options.</li>
-
-	<li>Added toggling of abbreviated and full journal
-	names. The list of journals is realized as an external
-	file, but editable from a Manage Journal Abbreviations
-	panel. Secondary lists can also be linked, but not
-	edited. There is a download option to quickly get a
-	list available on the internet, and we will provide one
-	or more lists for download from the SourceForge web
-	server.</li>
-
-	<li>Added functionality for new JabRef instances to
-	detect a running instance, and send command line
-	parameters to the running instance for processing.</li>
-
-	<li>Added handling of HTML links in preview panel.</li>
-
-	<li>Added confirmation dialog when database is saved
-	and the chosen encoding doesn't support all characters.
-	Gives options to save, cancel or try a different
-	encoding.</li>
-
-	<li>The encoding used when opening a database is now
-	remembered, and used when database is stored.</li>
-
-	<li>Added review field for research comments, paper
-	reviews, etc.</li>
-
-	<li>Added option to disable wrapping for certain
-	fields. Wrapping of pdf, ps, doi and url is disabled by
-	default.</li>
-
-	<li>Antialiasing option now affects entry editor text
-	fields as well as table text.</li>
-
-	<li>Changed to monospaced font in source editor
-	field.</li>
-
-	<li>Removed option to put double braces around BibTeX
-	fields, but retained option to remove double braces
-	when loading. Added option to put braces around capital
-	letters of a chosen set of fields.</li>
-
-	<li>Improved Ovid import.</li>
-
-	<li>Fixed problem with ordering of BibTeX strings that
-	are referred to by other strings.</li>
-
-	<li>Fixed problem with loading 16-bit encoded bib files
-	with 8-bit encoding as default, and vice versa.</li>
-
-	<li>Fixed multiplying authors bug when author/editor
-	field appears both in Required and Optional tabs.</li>
-
-	<li>Fixed startup freeze when trying to load certain
-	malformed bib files.</li>
-
-	<li>Fixed bug related to multi-line fields in RIS
-	import.</li>
-
-	<li>Fixed bug related to looking up a fully qualified
-	DOI</li>
-
-	<li>Included review field to preview panel 1, which
-	shows the abstract</li>
-
-	<li>Fixed bug where booktitle field was not displayed
-	in preview for conference proceedings, similar to
-	journal field</li>
-      </ul>
-
-    <h3>Versi 1.8.1 (September 15th, 2005)</h3>
-
-      <ul>
-	<li>Added automatic timestamp with configurable format
-	for entries.</li>
-
-	<li>Added new key generator modifier ":abbr" to
-	abbreviate field contents.</li>
-
-	<li>Added Help button in Preferences -> Entry
-	preview</li>
-
-	<li>Added Big5, Big5_HKSCS and GBK encodings for
-	Chinese.</li>
-
-	<li>Improved marking feature. Username is now used for
-	marking, so different users can mark entries separately
-	without interference.</li>
-
-	<li>Improved handling of names such as "Firstname de la
-	Lastname jr.", with different handling for presentation
-	and sorting purposes. Key generation now should always
-	use the genuine last name, and not produce keys like
-	"de2001".</li>
-
-	<li>Removed duplicate warning from inspection dialog
-	for non-selected entries.</li>
-
-	<li>Fixed setting of sheet name in OpenOffice.org Calc
-	export.</li>
-
-	<li>Fixed bug that prevented PDF/PS opening by F4 from
-	automatically finding files in subdirectories below the
-	main PDF/PS dir.</li>
-
-	<li>Fixed BibTeX parser bug that made it choke on short
-	comment strings.</li>
-
-	<li>Fixed bug that made regexp search fail for fields
-	containing newline characters.</li>
-
-	<li>Fixed platform-dependent handling of newline
-	characters.</li>
-
-	<li>Fixed bug that prevented command line import with
-	explicit format.</li>
-
-	<li>Fixed bug that made it impossible to disable table
-	antialiasing.</li>
-
-	<li>Fixed AuthorAndsCommaReplacer.</li>
-      </ul>
-
-    <h3>Versi 1.8 (July 30th, 2005)</h3>
-
-      <ul>
-	<li>Search panel now starts visible if it was visible
-	at last shutdown.</li>
-
-	<li>Added option to disable import inspection window
-	when only one entry is being imported.</li>
-
-	<li>Fixed parser bug that caused problems for bib files
-	containing extra characters after the last entry.</li>
-
-	<li>Fixed missing month in JStor import.</li>
-
-	<li>Fixed some bugs in "new from plain-text"
-	wizard</li>
-      </ul>
-
-    <h3>Versi 1.8b2 (July 13th, 2005)</h3>
-
-      <ul>
-	<li>Changed handling of external updates so the
-	notification is suppressed when there are no actual
-	changes.</li>
-
-	<li>Changed autodetecting import so BibTeX files are
-	handled more similarly to other formats.</li>
-
-	<li>Enabled sorting by icon columns.</li>
-
-	<li>Added option to remove BibTeX source panel from
-	entry editor.</li>
-
-	<li>Added command line option to not load any files at
-	startup. Will override any autoloading or other command
-	line options that normally load or import files.</li>
-
-	<li>Added handling of duplicates to import inspection
-	window.</li>
-
-	<li>Made entry preview be updated whenever the
-	selection is expanded by one row, to make it more
-	useful while selecting a set of entries.</li>
-
-	<li>Changed BibTeX field parsing to avoid inserting
-	line breaks at wrong places.</li>
-
-	<li>Improved handling of page numbers in Medline
-	import.</li>
-
-	<li>Fixed import of file links when importing SixPack
-	files.</li>
-
-	<li>Fixed bug that prevented closing of search
-	interface when no databases are open.</li>
-
-	<li>Fixed OpenOffice Calc export to be compatible with
-	OpenOffice.org 2.0 beta.</li>
-
-	<li>Fixed bugs in Refer/Endnote import filter.</li>
-
-	<li>Fixed bug that caused changes to be lost in some
-	cases when the same field is present in multiple entry
-	editor tabs.</li>
-
-	<li>Fixed bug that prevented command line autodetecting
-	import from working with BibTeX files.</li>
-
-	<li>Fixed minor bug in routine for removing double
-	braces.</li>
-      </ul>
-
-    <h3>Versi 1.8b (June 6th, 2005)</h3>
-
-      <ul>
-	<li>Added option to store bib file with double
-	braces.</li>
-
-	<li>Follow @input tags in aux files to indicate nested
-	aux files for generating subdatabases.</li>
-
-	<li>Improved wrapping and formatting of bib files, to
-	preserve paragraph separator (empty line).</li>
-
-	<li>Added test buttons for customization of preview
-	layouts.</li>
-
-	<li>Added inspection dialog for previewing and
-	generating keys for imported entries, and deciding
-	which ones to keep and discard. The dialog allows
-	inspection during long import processes such as Medline
-	search.</li>
-
-	<li>Restructured layout to use a common side pane with
-	all tabs.</li>
-
-	<li>Added import filter for Cambridge Scientific
-	Abstracts (CSA) format.</li>
-
-	<li>Added PS directory with similar options as
-	PDF.</li>
-
-	<li>Added [authshort] and [edtrshort] key field
-	markers. Patch submitted by Kolja Brix.</li>
-
-	<li>Made the program remember preview enable
-	setting.</li>
-
-	<li>Improved handling of illegal regular expressions in
-	search.</li>
-
-	<li>Removed options to search only Required, Optional
-	and/or General fields, in order to simplify search
-	interface.</li>
-
-	<li>Changed keys for Next and Previous tab to CTRL-PGDN
-	and CTRL-PGUP to match shortcuts in a certain popular
-	web browser.</li>
-
-	<li>Minor change to Preferences -> Table columns to
-	enable insertion of column in position 2.</li>
-
-	<li>Fixed parser bug that caused problems for files
-	with >10000 entries.</li>
-
-	<li>Fixed bug in entry editor that caused the source
-	edit panel to remove marking from entries.</li>
-
-	<li>Fixed export bug that made "\begin" tags fail if
-	encountered immediately after an "\end" tag.</li>
-
-	<li>Fixed export bug that made whitespace disappear
-	after empty field values.</li>
-
-	<li>Fixed ISI import bug that handled SO fields with
-	line breaks wrong.</li>
-
-	<li>Fixed bug occuring when choosing not to import
-	duplicate imported entry.</li>
-
-	<li>Fixed problem with detecting popup trigger on Mac
-	OSX with one button mouse.</li>
-
-	<li>Fixed erroneous relative paths for PDF files when
-	PDF directory is not set.</li>
-
-	<li>Fixed entry preview to resolve string
-	references.</li>
-      </ul>
-
-    <h3>Versi 1.7.1 (April 11th, 2005)</h3>
-
-      <ul>
-	<li>Removed unnecessary stack traces when opening
-	external viewer.</li>
-
-	<li>Fixed bug that made Ctrl-E destroy current edit in
-	entry editor.</li>
-
-	<li>Fixed problem when copying modified BibTeX key gave
-	old value.</li>
-
-	<li>Fixed missing 'booktitle' import in CONF entries in
-	RIS import.</li>
-
-	<li>Fixed bug that made group tree disappear for
-	certain keyword expressions.</li>
-
-	<li>Fixed bug that made standard BibTeX fields be saved
-	without line wrapping.</li>
-      </ul>
-
-    <h3>Versi 1.7 (March 20th, 2005)</h3>
-
-      <ul>
-	<li>When fetching from Medline or CiteSeer, fetched
-	entry is now opened in editor.</li>
-
-	<li>Added French translations of help files.</li>
-
-	<li>Added color highlighting of focused text field in
-	entry editor.</li>
-
-	<li>Added option in context menu of entry editor for
-	changing capitalization of field contents.</li>
-
-	<li>Added name conversion "Smith, RA" -> "Smith, R.
-	A." to Medline import.</li>
-
-	<li>Updated task bar icon.</li>
-
-	<li>Fixed bug that left some search settings items
-	inappropriately disabled.</li>
-
-	<li>Fixed bug that caused requirement for restart to
-	register change in default key pattern.</li>
-
-	<li>Fixed bug that caused crash some times after
-	adding/removing field content selectors.</li>
-
-	<li>Fixed bug in recognizing custom entry types when
-	reading bib files.</li>
-
-	<li>Fixed bug that allowed a deleted entry to stay
-	visible in the entry editor.</li>
-      </ul>
-
-    <h3>Versi 1.7b2 (March 7th, 2005)</h3>
-
-      <ul>
-	<li>Made side pane resizable.</li>
-
-	<li>Replaced entry customization dialog with improved
-	interface.</li>
-
-	<li>Added standard entry type "conference", similar to
-	"inproceedings".</li>
-
-	<li>Added "default" label pattern to avoid the need to
-	set similar patterns manually.</li>
-
-	<li>Added line wrapping to metadata in saved .bib file
-	to avoid long lines.</li>
-
-	<li>Added "bibtexkey" as implicit fourth sort
-	criterion, to minimize problem with almost similar
-	entries swapping places.</li>
-
-	<li>Added OpenOffice.org Calc export filter that
-	exports spreadsheet compatible with the OpenOffice.org
-	bibliography feature.</li>
-
-	<li>Added a couple of previously unsupported
-	publication types in SciFinder.</li>
-
-	<li>Added extra shortcuts CTRL-+ and CTRL-- for
-	switching tabs in entry editor, since original
-	shortcuts CTRL[-SHIFT]-TAB is used by some window
-	managers.</li>
-
-	<li>Updated Endnote export filter.</li>
-
-	<li>Fixed focus and key binding problems for switching
-	tabs/entries in entry editor</li>
-
-	<li>Fixed bug that prevented required fields tab from
-	appearing for entries with only bibtex key as required
-	field.</li>
-
-	<li>Fixed bug that prevented the user from changing the
-	default encoding.</li>
-
-	<li>Fixed bugs in RIS import.</li>
-
-	<li>Fixed bug 1112050; freeze when reading certain
-	author fields with mismatched braces.</li>
-      </ul>
-
-    <h3>Versi 1.7 beta (January, 27th, 2005)</h3>
-
-      <ul>
-	<li>Changed routine for rearranging author names
-	(Lastname, Firstname) so bracketed expressions are
-	treated as units.</li>
-
-	<li>Grouping controls now allow group hierarchies, and
-	now allow explicit and search expression groups as well
-	as keyword groups.</li>
-
-	<li>Added full customization of general fields
-	tabs</li>
-
-	<li>Added option to preserve formatting for non-BibTeX
-	fields.</li>
-
-	<li>Added integrity check for database.</li>
-
-	<li>Added export filters EndNote and Harvard RTF.</li>
-
-	<li>Added automatic import format chooser for import
-	(same as wildcard import below).</li>
-
-	<li>Added wildcard (*) option for command-line import,
-	to try to automatically determine the correct
-	format.</li>
-
-	<li>Improved layout of Preferences dialog.</li>
-
-	<li>Improved several import filters.</li>
-
-	<li>Added authIniN/edtrIniN key formatters.</li>
-
-	<li>Marked entries now float to the top when no
-	searching or grouping reordering is active.</li>
-
-	<li>Fixed problem with opening file dialog on Win NT -
-	AWT dialog is now opened if Swing dialog fails.</li>
-      </ul>
-
-    <h3>Versi 1.6 (November 27th, 2004)</h3>
-
-      <ul>
-	<li>Improved handling of entry selection in various
-	ways. E.g. selected entry is now scrolled into view
-	when opening entry editor and entry is kept selected
-	when importing CiteSeer fields.</li>
-
-	<li>Fixed update bug between autogenerated bibtex key
-	and source panel.</li>
-
-	<li>Fixed missing . at the end of last author name in
-	RIS import.</li>
-
-	<li>Fixed NullPointerException on certain special
-	characters when exporting to BibTeXML.</li>
-
-	<li>Fixed bug that sometimes prevented the unmarking of
-	entries.</li>
-
-	<li>Fixed problem with formatting one-name
-	authors.</li>
-
-	<li>Various other bugfixes.</li>
-      </ul>
-
-    <h3>Versi 1.6 beta (November 8th, 2004)</h3>
-
-      In an effort to produce better and more stable releases,
-      we have decided to release a beta versions prior to
-      future versions. We start out with today's beta release
-      of version 1.6. Users can now choose whether to download
-      and use the beta version for earlier access to new
-      features, or whether to wait for the final, better-tested
-      version. The final 1.6 version is expected to be released
-      in a few weeks from today.
-
-      <ul>
-	<li>Added mnemonic keys to menus and menu items.</li>
-
-	<li>Added MODS and tab-separated file export</li>
-
-	<li>Added facility for detecting and handling external
-	changes to open bib files.</li>
-
-	<li>Added scan option for exact duplicates with
-	automatic removal.</li>
-
-	<li>Bibtex strings are now sorted automatically.</li>
-
-	<li>Bibtex strings are now resolved when exporting
-	database.</li>
-
-	<li>Fixed problem with field content selector getting
-	too wide. Limited width.</li>
-
-	<li>Fixed PDF/PS view routine to remove problems with
-	filenames containing spaces.</li>
-
-	<li>Fixed bug that interfered with Fetch Medline by ID,
-	and fixed parsing problem with certain Medline
-	entries.</li>
-
-	<li>Fixed bug that interfered with Push to WinEdt.</li>
-
-	<li>Fixed HTML output so \c{c} is handled
-	correctly.</li>
-
-	<li>command line option for generating a sub-database
-	from LaTex aux file entries</li>
-
-	<li>simple copy/paste menu in entry editor</li>
-
-	<li>experimental: text-input-area with underlying
-	infotext in plaintext import dialog</li>
-      </ul>
-
-    <h3>Versi 1.55 (October 12th, 2004)</h3>
-
-      <ul>
-	<li>Made method for opening PDF files robust with
-	regard to file separators (/ and \), so bib files can
-	easier be used across platforms.</li>
-
-	<li>Improved Medline fetcher. Can now fetch entries
-	based on a search expression.</li>
-
-	<li>Added features for fetching fields and referring
-	publications from the CiteSeer database.</li>
-
-	<li>Added option to always save database ordered by
-	author/editor/year, and made this the default
-	setting.</li>
-
-	<li>When a single entry is selected, right-click menu
-	now shows a checkbox menu for group memberships instead
-	of the regular "Add to" and "Remove from" menus.</li>
-
-	<li>Improved [shorttitle] and [veryshorttitle] special
-	key pattern fields.</li>
-
-	<li>Added dialog box for conveniently setting the
-	fields of an entry from a plain text description.</li>
-
-	<li>Added formatter "ResolvePDF" to create correct
-	PDF/PS links in HTML export when relative file names
-	are used.</li>
-
-	<li>Added Abstract panel in entry editor.</li>
-
-	<li>Added alternate preview with abstract, and made
-	both previews configurable.</li>
-
-	<li>Added the option to create a subset of a database
-	based on an .aux file.</li>
-
-	<li>Added 'Cancel' button to duplicate resolver dialog,
-	so the process can be stopped.</li>
-
-	<li>Added check for spaces in custom entry type
-	names.</li>
-
-	<li>Added several new key pattern markers.</li>
-
-	<li>Added toolbar buttons for Mark/Unmark to improve
-	discoverability.</li>
-
-	<li>Fixed bug that made export filters ignore the
-	chosen character encoding.</li>
-
-	<li>Fixed bug that interfered with author name
-	formatting.</li>
-
-	<li>Fixed various bugs in import filters.</li>
-
-	<li>Fixed bug that prevented confirmation dialog when
-	deleting entry from the entry editor.</li>
-
-	<li>Fixed bug that made the next entry be opened
-	instead of the current, when pressing Enter in
-	table.</li>
-
-	<li>Fixed bug that made it possible to leave a source
-	edit when the source didn't validate properly. Also
-	made it impossible to change table selection until
-	source validates.</li>
-      </ul>
-
-    <h3>Versi 1.5 (August 3rd, 2004)</h3>
-
-      <ul>
-	<li>Added Highlight and select options to the group
-	interface, and made it possible to change the number of
-	visible lines in the list.</li>
-
-	<li>Added option to allow or disallow direct table
-	editing.</li>
-
-	<li>Added optional confirmation dialog for deleting
-	entries.</li>
-
-	<li>Added optional warning dialog for duplicate BibTeX
-	keys.</li>
-
-	<li>Added warnings to bibtex parser, and prevented
-	failure to load files with duplicate string
-	definitions.</li>
-
-	<li>Added JStor import filter.</li>
-
-	<li>Changed the look and feel to JGoodies Forms on
-	non-Macintosh platforms.</li>
-
-	<li>Optimized performance in several areas.</li>
-
-	<li>Numerous usability improvements.</li>
-
-	<li>Fixed RIS import bug caused by short lines.</li>
-
-	<li>Fixed bug in SciFinder import.</li>
-
-	<li>Fixed bug that made entire field get cleared when
-	removing from group.</li>
-      </ul>
-
-    <h3>Versi 1.4 (June 6th, 2004)</h3>
-
-      Version 1.4 provides command line options for importing
-      and exporting files, advanced search, custom export
-      filters, and several bug fixes and minor changes.
-
-      <ul>
-	<li>Added advanced search feature.</li>
-
-	<li>Added facility for using custom export
-	formats.</li>
-
-	<li>Added command line options for importing/exporting
-	files, importing/exporting, user preferences, loading
-	session and for suppressing the GUI (using RitOpt for
-	parsing options).</li>
-
-	<li>Added automatic stripping of \url{} when opening
-	url.</li>
-
-	<li>Improved export filters.</li>
-
-	<li>Fixed focus bug which sometimes interfered with
-	cut/copy/paste.</li>
-      </ul>
-
-    <h3>Versi 1.3.1 (May 9, 2004)</h3>
-
-      Release 1.3.1 resolves a couple of severe bugs in 1.3.
-      All users who have downloaded 1.3 should upgrade (the
-      bugs in 1.3 impaired functionality but did not pose a
-      security risk).
-
-    <h3>Versi 1.3.* (May 9, 2004)</h3>
-
-      This release adds entry preview, detection of duplicate
-      entries, persistent entry marking, new import and export
-      filters, better linking to PDF/PS/URL/DOI, and better Mac
-      OS X compatibility. There are several other changes and
-      improvements, and many bugfixes.
-
-    <h3>Versi 1.2 (March 21, 2004)</h3>
-
-      The icon set has been replaced. Notable new features are
-      French language support, key generator customization,
-      string replace, and BibTeXML import. Several bugs have
-      been fixed.
-
-    <h3>Versi 1.19 (Feb 19,2004)</h3>
-
-      <ul>
-	<li>Entry editor is now opened for an entry that causes
-	an error when saving.</li>
-
-	<li>Added options to display names in harmonised format
-	in the main table.</li>
-
-	<li>Added Docbook and (experimental) HTML export.</li>
-
-	<li>Enabled 'doi' and 'pii' fields for Medline
-	import.</li>
-
-	<li>Enabled antialiasing fonts.</li>
-
-	<li>Added the Kunststoff look&feel to give a more
-	pleasant user interface.</li>
-
-	<li>Added font selector for the main table.</li>
-
-	<li>Improved table column customization.</li>
-
-	<li>Added word selector feature for selected fields
-	(keywords, journal).</li>
-
-	<li>Added support for German and Norwegian
-	language.</li>
-
-	<li>Generalized copy cite key features for multiple
-	entries.</li>
-
-	<li>Added quick load/save session feature.</li>
-
-	<li>Fixed issue/number bug in ISI import.</li>
-
-	<li>Added "Open pdf/ps" item in right-click menu.</li>
-
-	<li>Fixed bug causing external viewer to only work in
-	General fields.</li>
-
-	<li>Added functionality for using Browse buttons for
-	file-related fields (ps, pdf, etc.).</li>
-
-	<li>Added Browse buttons to External programs tab in
-	Preferences.</li>
-
-	<li>Fixed bug related to Save database and Source field
-	which caused changes to disappear.</li>
-      </ul>
-
-    <h3>Versi 1.1 (Jan 02, 2004)</h3>
-
-      <ul>
-	<li>Added bibtex key uniqueness checking, and prevented
-	autogeneration from generating non-unique keys.</li>
-
-	<li>Added command line option to load file on
-	startup.</li>
-
-	<li>Fixed problem with autogeneration creating invalid
-	keys.</li>
-
-	<li>Improved Refer/Endnote import.</li>
-
-	<li>Added feature for importing entries and/or strings
-	and/or group definitions from another BibTeX
-	database.</li>
-
-	<li>Added menu choices to import into open
-	database.</li>
-
-	<li>Added toolbar button for closing current
-	database.</li>
-
-	<li>Fixed shortcut key for "Store field" in entry
-	editor, and fixed problem that made shortcut for "Save
-	database" unavailable from entry editor.</li>
-
-	<li>Added option to fetch Medline entries automatically
-	by ID, based on a patch submitted by Mike Smoot.</li>
-
-	<li>Fixed bug in RIS import.</li>
-
-	<li>Added options to copy key and copy "\cite{key}" to
-	right-click menu.</li>
-
-	<li>Fixed bug that caused some General fields not to
-	get displayed.</li>
-
-	<li>Enabled customization of General fields.</li>
-
-	<li>Enabled customization of existing entry types, and
-	definition of new types.</li>
-      </ul>
-
-    <h3>Versi 1.0 (Nov 29, 2003)</h3>
-
-      First release of JabRef
-
-  </body>
-
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+  <h1>Riwayat Perbaikan</h1>
+
+  <h3>Versi 2.7</h3>
+    <ul>
+      <li>Pengimpor Medline meringkas nama belakang ganda dalam kurung kurawal.</li>
+      <li>Pengimpor RIS dapat menggunakan bidang judul ganda dalam satu rangkaian.</li>
+      <li>Tidak lagi menggunakan "komentar" di semua tipe, karena menyebabkan konflik dengan format BibTeX.</li>
+      <li>Penanganan nama tambahan (Jr, dll.) dalam pengimpor Medline sudah diperbaiki.</li>
+      <li>Penambahan argumen angka tambahan untuk pemformat Penulis, untuk menghitung jumlah penulis
+        yang ditampilkan jika sudah melebihi jumlah penulis maksimum.</li>
+      <li>Penambahan pemilih isi untuk bidang "review" di penyunting entri.</li>
+      <li>Perbaikan deteksi type berkas ketika menambah tautan baru. Sekarang bisa membedakan
+        adanya ekstensi ganda misalnya ".ps.gz".</li>
+      <li>Perbaikan isi otomatis untuk nama penulis. Menambahkan pilihan dengan format
+        'Namadepan Namabelakang' atau 'Namabelakang, Namadepan', atau gabungan keduanya.</li>
+      <li>Memperbaiki kutu fungsi impor jika penapis impor tidak ditemukan.</li>
+    </ul>
+
+  <h3>Version 2.7beta 2</h3>
+    <ul>
+      <li>Penambahan dukungan untuk pengenal MrdLib atau ekstraksi metadata ketika PDF diseret masuk ke 
+	  dalam JabRef.</li>
+      <li>Penambahan pilihan dalam "Program eksternal" untuk mematikan buka otomatis dari
+          dialog melayari ketika membuat tautan berkas baru.</li>
+      <li>Perbaikan kunci pintasan pemercepat. Kunci pintasan untuk impor ke basidata baru 
+          sekarang Ctrl-Alt-I.</li>
+      <li>Aksi "Membuka URL atau DOI" sekarang menggunakan tautan URL dalam bidang "berkas" yang tadinya
+          hanya akan menuju ke bidang "url" atau "doi".</li>
+      <li>Pembatasan port pendengar jauh hanya dalam interval 1025-65535.</li>
+      <li>Penambahan terjemahan basasa Jepang oleh Koji Yokota.</li>
+      <li>Penambahan kotak pengulung untuk penyunting entri ketika tidak sesuai dengan jendela. 
+          Perbaikan ini dilakukan oleh Matthias Erll.</li>
+      <li>Sekarang memungkinkan menyalin ke entri dari dialog pencarian.</li>
+      <li>Penambahan pesan kesalahan yang tepat ketika mencoba mencari dan 
+          menghasilkan ekspresi yang salah.</li>
+      <li>Penambahan dialog kesalahan jika tampilan suaian sendiri tidak bisa dimuat.</li>
+      <li>Penggunakan tempelan dari Alexander Hug untuk mengimpor secara benar doi 
+          dari berkas RIS ScienceDirect.</li>
+      <li>Menghilangkan kemungkinan NullPointerException di SearchExpressionTreeParser.</li>
+    </ul>
+
+    <h3>Versi 2.7beta</h3>
+    <ul>
+	<li>Beberapa perbaikan untuk penapis ekspor MS Office.</li>
+	<li>Diperkenalkan tiga pilihan untuk memastikan membuat kunci yang unik.
+        Yang pertama bawaan (menandai dengan a, b, dst.), yang kedua dimodifikasi
+        (menandai dengan b, c, dst.) dan yang ketiga selalu menandari dengan huruf 
+        (a, b, dst.).</li>
+	<li>Warna huruf dan latar di penyunting entri sekarang bisa diatur
+        (Pengaturan -> Preferensi -> Penampilan).</li>
+	<li>Judul yang muncul di jendela utama sekarang menampilkan nama berkas serta
+        lokasi direktorinya secara penuh.</li>
+	<li>Sekarang entri dapat ditandai dengan warna berbeda. Penandaan otomatis entri
+        yang diimpor menggunakan warna berbeda tanpa mempengaruhi entri lain yang sudah
+        ditandai.</li>
+	<li>Tambahan fitur baru (AlatBantuan -> Pindai Basisdata... -> Menyelesaikan
+        kesamaan kunci BibTeX) untuk mencari adanya kunci yang sama kemudian memberikan
+        saran untuk mengatasi permasalahan adanya kunci yang sama.</li>
+	<li>Tambahan pemeriksaan untuk memastikan bahwa program tidak keluar dulu
+        ketika masih dalam proses menyimpan berkas yang besar. Pesan menunggu ditampilkan
+        dengan disediakan tombol pembatalan.</li>
+	<li>Tambahan tanda apostrophe (') sebagai karakter tidak sah untuk kunci BibTeX.</li>
+	<li>String BibTeX yang saling mengacu sama lain sekarang sudah bisa diurutkan
+        ketika menyimpan berkas bib.</li>
+	<li>Mengatasi kutu ketika menggabung perubahan eksternal - berkas tidak akan 
+        dilaporkan sebagai diubah secara eksternal setelah perubahan penggabungan.</li>
+	<li>Mengatasi kutu di fitur tautan Ganti/namaulang yang menyebabkan tautan yang
+        disimpan menjadi salah pada struktur direktori tertentu.</li>
+	<li>Mengatasi kutu: kurung kurawal sekarang bisa digunakan sebagai argumen untuk
+        pemformat. </li>
+	<li>Mengatasi kutu yang membuat macet ketika membuat kunci untuk bidang entri
+        yang mempunyai referensi silang.</li>
+	<li>String BibTeX sekarang dapat diselesaikan sebelum proses membuat singkatan
+        nama jurnal.</li>
+	<li>Memodifikasi pembuat kunci [shorttitle] dan [veryshorttitle] sehingga
+        mempertimbangkan tanda petik pada kata, dan membuang karakter tanda pentung
+        (hanya menggunakan angka dan huruf saja).</li>
+	<li>Mengganti berbagai pemformat ekspor dengan pemformat Penulis, 
+        yang menyediakan berbagai pilihan format yang fleksibel.</li>
+    </ul>
+
+
+
+    <h3>Versi 2.6</h3>
+    <ul>
+        <li>Fixed IEEExplorer and ACM fetchers to adapt to web site changes.</li>
+        <li>Active preview (1 or 2) is now remembered.</li>
+        <li>Applied patch by Igor L. Chernyavsky. to prevent loss of entry selection after
+            generating key.</li>
+        <li>Changed OpenDocument Spreadsheet export so the mimetype file is written correctly
+            at the start of the zip file.</li>
+        <li>Fixed bug when importing preferences: custom export filters would not be updated
+            after import.</li>
+        <li>Changed help page loading procedure so help pages can be loaded for plugin entry
+            fetchers.</li>
+        <li>Made it possible to define customized entry types with either-or conditions on
+            required fields, e.g. using a pseudo-field called "author/editor" will indicate
+            that the entry requires either the "author" or the "editor" field set.</li>
+        <li>Fixed bug: entries of a customized type could be indicated as complete even if
+            BibTeX key was not set.</li>
+        <li>Changed deletion process for some temporary files to avoid leftover files.</li>
+    </ul>
+
+    <h3>Versi 2.6beta3</h3>
+    <ul>
+        <li>Added ScienceDirect entry fetcher that utilizes the BibSonomy scraper.</li>
+        <li>Changed non-native file dialog setting so files cannot be renamed. This prevents
+          accidentally entering rename mode when trying to enter directory. Can be enabled
+          again in Options -> Preferences -> Advanced.</li>
+        <li>Added new JStor fetcher that utilizes the BibSonomy scraper to obtain BibTeX data.</li>
+        <li>Fixed bug in CookieHandlerImpl.</li>
+        <li>Fixed bug; when dragging a file into JabRef and asking to move it to the file
+          directory, warning will now be given if the destination file already exists. Patch
+          by Alastair Mailer.</li>
+        <li>When dragging a file into JabRef and asking to copy or move it to the file directory,
+          it is now possible to rename to an arbitrary name. Patch by Alastair Mailer.</li>
+        <li>Added "review" field to BibTeXML export.</li>
+        <li>Added Reset button to entry fetchers. Patch by Dennis Hartrampf and Ines Moosdorf.</li>
+        <li>Changed Microsoft Office XML export so "number" rather than "issue" is exported
+          as <b:Issue>, which conforms with import format.</li>
+        <li>Added confirmation dialog that allows saving without backup in cases when
+          backup creation fails.</li>
+        <li>Fixed bug 2938562: using the move/rename feature on a file link could give an
+          absolute link even if the file was put below the main file directory.</li>
+        <li>Fixed bug 2931293: error generating key with [authorsAlpha] for short names.</li>
+        <li>When checking for external modifications, file size is now checked in addition
+          to the time stamp.</li>
+        <li>Fixed handling of maximised state when shutting down and starting up JabRef.
+          Patch by Igor L. Chernyavsky.</li>
+        <li>Fixed bug that prevented correct handling of DOS short file names. Patch
+          by Igor L. Chernyavsky.</li>
+        <li>Added support for KOI8_R character set.</li>
+        <li>Removed DocumentPrinter class, using standard API functions instead. Patch by
+          Tony Mancill.</li>
+        <li>Removed HightlightFilter class, using standard API functions instead. Patch by
+          Tony Mancill.</li>
+        <li>Changed keyboard shortcut for IEEXplorer search to Alt-F8.</li>
+        <li>Disabled JStor search, which doesn't work due to API changes.</li>
+        <li>External file type manager now removes "." prefix in file type extension if the user
+          has typed it that way.</li>
+        <li>Preview panel now defaults to preview layout 1 instead of 2. Switched default layouts.</li>
+        <li>Added IfPlural formatter by Russell Almond. The formatter outputs its first argument
+          if the input field contains " and " and the second one otherwise.</li>
+        <li>Applied patch by Philipp Cordes and Björn Kahlert for improved handling of names by
+          autocompleter. The patch also reorganizes the autocompleter classes.</li>
+        <li>Table will now scroll to keep the currently edited entry visible if an edit leads to
+          the entry getting sorted to a different position.</li>
+        <li>Reworked author and editor handling in Docbook export. Added Docbook XML header.</li>
+        <li>Database will no longer be marked as changed after accepting external changes, unless one or
+          more changes were not accepted before merging, and unless database was already marked as
+          changed.</li>
+        <li>Fixed bug: undesired autocompletion when saving file.</li>
+        <li>Fixed bug: entry editor doesn't appear when new entry is added while a filtering search or
+          group selection is active.</li>
+        <li>Fixed bug in writing of metadata on Windows. For certain metadata lengths newlines would be
+          messed up after the metadata comment in a bib file.</li>
+        <li>Search dialog now automatically previews first hit, and hides preview if there are no hits.</li>
+    </ul>
+
+    <h3>Versi 2.6beta2</h3>
+    <ul>
+
+        <li>Added export formatter "Default" which takes a single argument. Outputs the string to format
+          unchanged if it is non-empty, otherwise outputs the argument.</li>
+        <li>Added option under Options -> Preferences -> General for disabling the strict enforcing of
+          correct BibTeX keys. Disabling this makes it possible to use e.g. umlaut characters in keys.</li>
+        <li>Modified launcher script for Windows installer to give higher heap size limit.</li>
+        <li>Improved autocompletion. All fields with autocompletion which have content selectors will now
+          autocomplete on content selector values. For the "journal" field, the autocompleter will now
+          additionally use entries from the current journal abbreviations list, and will also complete
+          on the entire field up to the cursor rather than just looking at the last word only.</li>
+        <li>Added support for postformatter in Layout. The postformatter will be run after
+          the formatters called from a layout.</li>
+        <li>Improved group autogeneration. Added option to generate groups based on author or editor
+          last names. Autogenerated groups are now alphabetized.</li>
+        <li>Modified Endnote export filter so "--" gets converted to "-" in the "pages" field.</li>
+        <li>Changed keyword groups so they will match on whole words only. E.g. a keyword group for the
+          keyword "can" will no longer match the keyword "scanner".</li>
+        <li>Improved entry type determination and author parsing for some varieties of CSA files.</li>
+        <li>Minor change to Harvard RTF export. Added space after "ed.", and added editor to output for
+          inbook entries.</li>
+        <li>Set limit to the number of displayed characters in group names in groups tree in order to
+          avoid group panel width problems.</li>
+        <li>Changed file link handling so all remote links classified as URL can be opened through
+          the browser. Setting a different file type manually makes JabRef call a remote link using
+          the handler application instead.</li>
+        <li>Modified Endnote/refer import filter to strip "doi:" from the %R field.</li>
+        <li>Modified HTML conversion so single newline is displayed in the preview (and HTML exports) as
+          <br>, while multiple newlines are displayed as <p>.</li>
+        <li>Fixed bug: switching entry editor between entries of different type may result in switching
+          of entry editor tabs.</li>
+        <li>Fixed bug: adding external file link leads to relative path from root directory if file
+          directory is set to an empty string.</li>
+        <li>Fixed error message when a # in a BibTeX string prevents saving. No longer states that the
+          problem is in an entry, but specifies that it is in a string.</li>
+        <li>Fixed bug: ODS export doesn't resolve BibTeX strings.</li>
+        <li>Fixed bug: content selector for "editor" field uses "," instead of " and " as delimiter.</li>
+        <li>Fixed bug: editing source doesn't allow change of entry type.</li>
+        <li>RTFChars formatter now converts --- to \emdash and -- to \endash.</li>
+    </ul>
+
+    <h3>Versi 2.6beta</h3>
+
+    <ul>
+        <li>Added pages information to several entry types in Endnote export.</li>
+        <li>Modified LastPage formatter so it returns the number when only the number of pages is given.</li>
+        <li>Modified search algorithms so LaTeX commands are removed before search. For instance, this
+            means that the value "test \textit{case}" now matches the search string "test case".</li>
+        <li>Changed default table font family to "SansSerif".</li>
+        <li>Can now create lock file while writing a bib file. The lock file is checked before
+            saving, and before scanning an externally changed file, in order to avoid reading an
+            unfinished file.</li>
+        <li>Added support for dragging a file link from the file column to another application.</li>
+        <li>Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.</li>
+        <li>Improved ISI import filter so DOI information is included.</li>
+        <li>Fixed bug: metadata changes would not be detected as external changes to a database.</li>
+        <li>Fixed bug: when accepting external changes and not saving before new changes are
+            detected, the previously accepted changes would also be listed.</li>
+        <li>Fixed bug in Scifinder import where an empty Inventor field could overwrite the
+            author field.</li>
+        <li>Fixed bug in autocompleter. Current suggested completion would be added to the field
+            if the user closed the entry editor or mouse clicked on another field.</li>
+        <li>Fixed problem with exporting to some MySql versions. Patch by François Dorin.</li>
+        <li>Fixed bug in handling of LaTeX character sequences - now sequences with = as command
+            character (e.g. "\={A}") are recognized.</li>
+        <li>Fixed bug: gray out / hide setting in groups panel is overridden on startup
+            by search mode selection. Added separate prefs key for the groups setting.
+            Fix suggested by Igor L. Chernyavsky.</li>
+        <li>Fixed bug: cookie manager installed by Download button in file field editor throws
+            an exception when trying to fetch from Medline.</li>
+        <li>Fixed bug: temporary files don't get deleted on shutdown.</li>
+        <li>Disabled table column reordering in import inspection window, since a user reported
+            problems when using this.</li>
+        <li>Changed years from 2008 to 2009 in splash image.</li>
+    </ul>
+    <h3>Versi 2.5 (June 22nd, 2009)</h3>
+    <ul>
+        <li>Modified export layout procedure so missing formatters can be reported in the error
+          output. Export now succeeds with warnings added where formatters are missing.</li>
+        <li>Conditional blocks (\begin{field}...\end{field}) in layout files can now be given a
+          semicolon-separated list of fields as argument. All fields must then be set for output
+          to be given.</li>
+        <li>Changed RIS import so multiple abstract fields in an entry are concatenated.</li>
+        <li>Added quoting of some special characters in SQL export, based on Kyle Crabtree's patch.</li>
+        <li>Fixed bug in MS Office 2007 XML export - editor names missing.</li>
+        <li>Fixed bug in plugin manager that prevented the "Download plugin" button from working.</li>
+        <li>Fixed bug in plugin manager routine that checks for installed versions of a plugin.</li>
+        <li>Fixed bug in startup that could show warnings multiple times when loading
+          from autosave files.</li>
+    </ul>
+    <h3>Versi 2.5beta 2 (May 19th, 2009)</h3>
+    <ul>
+        <li>Plugin manager now handles plugin versions correctly based on the version number in their
+          plugin.xml file.</li>
+        <li>Added formatter "Number" that outputs a sequence number for the current entry in the current
+          export operation. This formatter can be used to produce a numbered list of entries.</li>
+        <li>Added autosave feature.</li>
+        <li>Fixed bug in file link handling in BibTeXML export.</li>
+        <li>Improved handling of patents in Scifinder import.</li>
+    </ul>
+
+    <h3>Versi 2.5beta (April 21st, 2009)</h3>
+
+    <ul>
+      <li> Added Simplified Chinese translation.</li>
+      <li> Added simple plugin manager.</li>
+      <li> Added ~/.jabref/plugins as user-specific plugin directory.</li>
+      <li> Added \r marker to WrapFileLinks formatter that outputs file links without expanding relative links.</li>
+      <li> Added [authorsAlpha] key marker that formats authors according to the "alpha" BibTeX style. Patch submitted by Oliver Kopp.</li>
+      <li> Table sort order set by clicking and Ctrl-clicking table columns is now immediately set as default sort order in preferences.</li>
+      <li> Changed LyX pipe setting so it works whether ".in" is included or omitted.</li>
+      <li> Modified ISI importer so the words "of", "and" and "the" will not be capitalized in the title, journal or publisher fields.</li>
+      <li> When adding new local file link, browse dialog now appears immediately when opening file link editor, saving one mouse click.</li>
+      <li> Added "Remove all broken links" option in the resolver dialog for broken links when synchronizing file links.</li>
+      <li> Added rename option to Set/clear field dialog, to move contents from one field to another.</li>
+      <li> Added Back and Forward actions, for switching between recently edited BibTeX entries.</li>
+      <li> Added option under "Entry table" to designate fields as numeric for sorting purposes.</li>
+      <li> Added possibility for custom export filters to define their own name formatters. This is done by adding a file named "<filtername>.formatters". This file defines one formatter on each line, with each line containing the name of the formatter and the formatter definition, separated by a colon (:).</li>
+      <li> Added menu items for increasing/decreasing table font size, with shortcut keys Ctrl-plus and Ctrl-minus.</li>
+      <li> Added options to automatically mark entries imported into an existing database, and to unmark previously marked entries when importing.</li>
+      <li> Added ":(x)" modifier to key generator, specifying that the arbitrary string x should be used as a fallback value if the value returned by the field marker is empty.</li>
+      <li> Added ":upper" modifier to key generator, to force uppercase for a field marker.</li>
+      <li> Added buttons in External programs tab in Preferences for modifying settings for "Push to"-features, and removed obsolete fields.</li>
+      <li> Added support for DOI field in Endnote importer.</li>
+      <li> Added support for language and publication status fields in Medline import (publication status stored in "medline-pst" field).</li>
+      <li> Enabled cookie handling for downloading full-text articles.</li>
+      <li> Improved handling of invalid BibTeX keys containing white space. Parser will now try to piece together the key and avoid disturbing the continued parsing. Patch submitted by Stephan Lau.</li>
+      <li> Cosmetic change to the entry type label to the left in the entry editor.</li>
+      <li> Changed name handling so a single-entry name without a capital initial letter, such as "unknown", will be treated as a solitary last name rather than a von particle.</li>
+      <li> Changed table selection coloring so entries that are grayed out or marked can be distinguished from normal entries when selected.</li>
+      <li> Changed handling of "affiliation" in Medline import - now makes sure to escape # characters before storing.</li>
+      <li> Modified ACM portal fetcher due to web site changes.</li>
+      <li> Improvements to IEEEXplore fetcher - better handling of month and page fields.</li>
+      <li> Changed behaviour of source panel when an entry contains imbalanced # characters - the panel can now show the entry in its invalid form, allowing the user to fix the problem.</li>
+      <li> Improved handling of PDF files without XMP metadata - other metadata will now be retained. Patch submitted by Felix Langner.</li>
+      <li> Fixed bug in parsing file field - double spaces in file names would be reduced to single spaces, breaking the file link. Fix submitted by Uwe Kuehn.</li>
+      <li> Fixed NullPointerException when downloading external file and file directory is undefined.</li>
+      <li> Fixed bug in HTMLConverter.</li>
+      <li> Fixed NullPointerException in key generator for incomplete names.</li>
+      <li> Fixed bug in removing custom export filters.</li>
+      <li> Fixed bug 2225371: restart is no longer required after adding a new custom export filter. </li>
+      <li> Fixed bug in "Move/rename file" feature in file field editor with regard to undefined file directory.</li>
+      <li> Fixed bug in Ris importer.</li>
+      <li> Fixed NullPointerException in Endnote importer.</li>
+    </ul>
+
+
+    <h3>Versi 2.4.2 (November 1st, 2008)</h3>
+
+    <ul>
+      <li>Added missing layout formatters FirstPage and LastPage.</li>
+      <li>Fixed a bug regarding ParamLayoutFormatter loaded from plugin.</li>
+      <li>Fixed crash during initalization of journal abbreviation list.</li>
+      <li>Added option to have JabRef search for external file when "Open file" function is chosen for an entry without any linked files. This is similar to what was always done in JabRef 2.3.1 and earlier.</li>
+      <li>Improved regular expression file search, so the regular expression can contain field markers as used for BibTeX key generation in addition to just regular fields. It is no longer possible to call arbitrary layout formatters, but the modifiers "upper", "lower" and "abbr" (for case conversion and abbreviation) can be used.</li>
+      <li>Ris importer now imports PB as "school" instead of "publisher" for THES entries.</li>
+      <li>Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.</li>
+    </ul>
+
+    <h3>Versi 2.4.1 (October 8th, 2008)</h3>
+
+      <ul>
+        <li>Fixed bug: layout formatter arguments were not set when using a ParamLayoutFormatter loaded from plugin.</li>
+        <li>Fixed bug: when abbreviating first names, for authors with first names connected with "-", only the first letter is shown.</li>
+        <li>Enhanced ExportFormatTemplate plugins with an optional property "encoding" which overrides the default encoding with the given one.</li>
+        <li>Fixed menu colors under Windows Vista.</li>
+        <li>Fixed bug 2137771: Missing file extension when downloading.</li>
+        <li>Fixed bug 2105329: Ensure that newly added entry is visible in table.</li>
+        <li>Fixed bug 1908222: Preference "Fit table horizontally on screen" doesn't work</li>
+        <li>Fixed bug 2119059: Handling of the A1 tag in the RIS format.</li>
+        <li>Added missing help file for ACM digital library fetcher.</li>
+        <li>Added option for whether to use IEEE LaTeX journal abbreviation list.</li>
+        <li>Added tooltip to menu items in push-to-application popup menu.</li>
+      </ul>
+
+
+    <h3>Versi 2.4 (September 1st, 2008)</h3>
+
+      <ul>
+        <li>Added mappings for some special characters that need to be sanitized when generating BibTeX keys.</li>
+        <li>Added ACM Digital Library fetcher by Aaron Chen.</li>
+        <li>Added new entry types (conference, patent, standard, electronic).</li>
+        <li>Improvements to IEEEXplore fetcher.</li>
+        <li>Added explanatory text to indicate that "ps" and "pdf" files are legacy features.</li>
+        <li>Fixed unexpected behaviour of "Open PDF or PS" menu item - now looks in "file" field, and does not launch search for external files.</li>
+        <li>Fixed bug 1827568: 'Save database' might not store current edit in entry editor.</li>
+        <li>Fixed bug 2027944: updating custom export definitions requires restart.</li>
+      </ul>
+
+
+    <h3>Versi 2.4beta (March 12th, 2008)</h3>
+
+      <ul>
+	<li>Added "protection" flag in Database properties. When this flag is set, JabRef will refuse to save the database when the file has been externally modified, until the changes have been reviewed and partly or completely accepted.</li>
+	<li>Fixed bug where the external update notification in the side pane would remain even if the referred database was closed.</li>
+	<li>Added two new search modes - display search results in a dialog, and global search.</li>
+	<li>Support for fetching from the command line using --fetch (contributed by Jan F. Boldt and David Kaltschmidt).</li>
+	<li>Support for fetching from Spires (contributed by Fedor Bezrukov).</li>
+	<li>Support for fetching from JSTOR (contributed by Tobias Langner, Juliane Doege, Sebastian de Hoog and Christoph Jacob)</li>
+	<li>Added context menu for file list editor with options to move/rename linked file as well as to automatically move the file to file directory and optionally rename after BibTeX key.</li>
+	<li>JabRef can now be extended by plugins (using the Java Plugin Framework JPF as the underlying technology). Currently extension points exist for:
+          <ul>
+            <li>ImportFormat</li>
+            <li>ExportFormat based on Templates</li>
+            <li>ExportFormat based on IExportFormat (contributed by Kariem Hussein)</li>
+            <li>LayoutFormatter</li>
+            <li>EntryFetcher</li>
+            <li>PushToApplication</li>
+          </ul>
+           JabRef uses JPFCodeGenerator (which was written just for JabRef) to generate helper classes for making JPF easier. Current version used: 0.4 http://forge.spline.inf.fu-berlin.de/projects/jpfcodegen/
+	</li>
+	<li>Print warnings if insufficient Java version is used or if JRE is not from Sun.</li>
+	<li>Memory Stick Mode: JabRef automatically loads configuration settings from jabref.xml and also writes them there if enabled.</li>
+	<li>Improved handling of crossrefs. Fields are now resolved in preview and export.</li>
+	<li>Updated dependencies, now using: JempBox-0.2</li>
+	<li>Improved handling of ArXiv URIs.</li>
+	<li>Changed default preference value: now using import inspection dialog also when just a single entry is imported.</li>
+	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
+	<li>[ 1738920 ] Fixed: Windows Position in Multi-Monitor environment</li>
+	<li>[ 1795355 ] Fixed: LatexFieldFormatter omits "{" on beginning of optional field</li>
+	<li>[ 1297576 ] New feature: Printing of entry preview (use right-click menu)</li>
+	<li>[ 1717849 ] Fixed: Bug in aux import (contributed by Kai Eckert)</li>
+	<li>[ 1749613 ] Fixed: About translation</li>
+	<li>[ 1709449 ] Fixed: Clicking a DOI from context menu fails</li>
+	<li>[ 1869331 ] Fixed: Uninstall after silent install removes Windows start menu</li>
+	<li>[ 1723219 ] Fixed: Strange message (LyX) while installing 2.3</li>
+	<li>Added handling of unknown file types when synchronizing the file field.</li>
+	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
+	<li>Moved file preferences from General tab to new File tab.</li>
+	<li>Reduced horizontal size of preferences dialog.</li>
+	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
+	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).    </li>
+      </ul>
+
+
+    <h3>Versi 2.3.1 (November 29th, 2007)</h3>
+
+      <ul>
+	<li>Removed default applications for file types under Mac OS X, and made use of the standard "/usr/bin/open <filename>" way to open files except when an application name is explicitly set.</li>
+	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
+      </ul>
+
+
+    <h3>Versi 2.3 (November 8th, 2007)</h3>
+
+      <ul>
+	<li>Added handling of unknown file types when synchronizing the file field.</li>
+	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
+	<li>Moved file preferences from General tab to new File tab.</li>
+	<li>Reduced horizontal size of preferences dialog.</li>
+	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
+	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).</li>
+      </ul>
+
+
+    <h3>Versi 2.3beta3 (October 6th, 2007)</h3>
+
+      <ul>
+	<li>Export formats that output the character encoding now use common names for encodings instead of Java-specific names.</li>
+	<li>Added "Open" button in external link dialog box to test or use the link.</li>
+	<li>Added formatter WrapFileLinks which iterates over file links, producing a formatted string for each containing any desired information about the file link.</li>
+	<li>Applied Fedor Bezrukov patch (setting User-Agent in URLDownload to solve ArXiv problem).</li>
+	<li>Applied Aaron Chen's patch for fixing bugs in IEEExplore fetcher.</li>
+	<li>Applied Edward Valeev's patch for handling article numbers replacing pages in Refer/Endnote import.</li>
+	<li>Added toolbar button to entry editor for writing XMP-metadata.</li>
+	<li>Added paste and drag & drop support to file list editor.</li>
+	<li>Added "authorLast" and "editorLast" markers for using last author's last name in BibTeX keys.</li>
+	<li>Added support for file field in Write XMP action.</li>
+	<li>Numeric fields (year, volume, number, pmid, citeseercitationcount) are now sorted as numbers when possible.</li>
+	<li>Improvements to the Ovid import filter.</li>
+	<li>Modified AuthorLastFirstAbbreviator and AuthorAbbreviator to accept names in both last-first and first-first format, but always return in last-first format. These two formatters are identical.</li>
+	<li>[ 1648789 ] Fixed: Problem on writing XMP when option to leave out some fields was active.</li>
+	<li>[ 1561990 ] Fixed: Exporting to WinEdt - apostrophe.</li>
+	<li>Fixed bug in entry editor: source panel edits were not properly stored when clicking a different entry in the main table.</li>
+	<li>Fixed problem with "Synchronize file links" not honouring database specific file directory.</li>
+	<li>Fixed problem with file type selection in external file link editor not being up-to-date.</li>
+	<li>Fixed problem with wrong enable/disable behaviour of Clear search button when switching between tabs.</li>
+	<li>Fixed argument parsing in AbstractParamLayoutFormatter so \t and \n can be used for tabs and newlines.</li>
+      </ul>
+
+
+    <h3>Versi 2.3beta2 (August 29th, 2007)</h3>
+
+      <ul>
+	<li>When user chooses to save to an existing file, and answers that the file should not be overwritten, a new file dialog now appears instead of the operation cancelling.</li>
+	<li>Removed antialias setting for main table, because it interferes with proper rendering on LCDs when running under JRE 6. Removed non-optional antialias settings for entry editor for the same reason.</li>
+	<li>Changed external link handling so remote (http) links can be sent to the external application. Applications like Evince and Gimp can open remote links.</li>
+	<li>Replaced Simle HTML export filter with improved version by Mark Schenk.</li>
+	<li>Introduced ParamLayoutFormatter interface for layout formatters that can take an argument by the following syntax: \format[MyFormatter(argument)]{\field}. Implementing classes contain a setArgument(String) method that receives the argument (if any) before the format() method is called.</li>
+	<li>Timestamp and owner fields are now set also when appending a bib file, and new options have been introduced to control whether imported/appended/pasted entries should have these fields overwritten if already set.</li>
+	<li>Added operations for adding file links in import inspection window, and made file and URL icons in the table clickable.</li>
+	<li>Removed PDF and PS columns and operations in import inspection window (replaced by operations on the "file" field).</li>
+	<li>File field column in main table now shows file type icon instead of generic icon.</li>
+	<li>Modified Endnote export to take "file" field into account, and to resolve full paths to PDF files.</li>
+	<li>Added "Auto" button to automatically set "owner" field to the default username.</li>
+	<li>Added \encoding tag for begin/end layouts in export filters to print the name of the character encoding used for the export. The tag is not available in entry layouts.</li>
+	<li>Added \% as a supported LaTeX command, producing '%'.</li>
+	<li>Fixed bug in HTMLChars: commands like {\aa} and {\o} were not processed properly, even though defined in Globals.HTMLCHARS.</li>
+	<li>Fixed bug that made it possible to accidentally close database without saving, when error occurs during the save operation.</li>
+      </ul>
+
+
+    <h3>Versi 2.3beta (June 28th, 2007)</h3>
+
+      <ul>
+	<li>Added MIS Quarterly export format.</li>
+	<li>Added support for COPAC file format.</li>
+	<li>Added RemoveTilde LayoutFormatter to deal with Bibtex non-breakable spaces.</li>
+	<li>Added autocompletion feature for author/editors and other fields.</li>
+	<li>Added feature to save all open databases.</li>
+	<li>Added support for pushing citations to Vim when Vim server is enabled.</li>
+	<li>Added missing option for specifying the path to LEd.exe.</li>
+	<li>Added -s/--nosplash command line option for disabling the splash screen.</li>
+	<li>Added new field marker [auth.etal] for key generation.</li>
+	<li>Added support in XMP metadata handling for bibtex string resolution.</li>
+	<li>When opening databases, already open files are now skipped.</li>
+	<li>Option to use native instead of Swing file dialogs is now available on all OSes.</li>
+	<li>Synchronize external links now searches entire database, not selected entries.</li>
+	<li>Medline import now adds <Affiliation> information into the "institution" field.</li>
+	<li>Improved handling of external links. The 'file' field can now specify a list of external links, and arbitrary file types are supported. Old-style PDF and PS links can be moved automatically into the 'file' field.</li>
+	<li>Fixed bug in RIS and Refer/Endnote imports. Entries with editors but no authors are now imported properly.</li>
+	<li>Fixed missing export formatter AuthorFirstFirstCommas.</li>
+	<li>Fixed minor bug in Harvard export with missing space between year and title.</li>
+	<li>Fixed bug that caused lockup when connection to IEEExplore fails.</li>
+	<li>Fixed wrong dependency in OAI2/ArXiv Fetcher.</li>
+	<li>Fixed problem with foreign characters in OAI2/ArXiv Fetcher.</li>
+	<li>Fixed problem with key generation in OAI2/ArXiv Fetcher.</li>
+	<li>Fixed bug in duplicate search that made misc entries never get detected as duplicates.</li>
+	<li>Fixed bug in XMP reimport from DublinCore related to month strings.</li>
+      </ul>
+
+
+    <h3>Versi 2.2 (January 30th, 2007)</h3>
+
+      <ul>
+	<li>Added progress bar to indicate progress when synchronizing PS/PDF links.</li>
+	<li>Option to autogenerate key for imported entries now also affects entries imported
+      without using the import inspection window.</li>
+	<li>Modified quick jump behaviour so sequences of letters can be found. Timeout or
+      ESC resets the search.</li>
+	<li>Improved XMP support:
+          <ul>
+	    <li>JabRef now reads and write DublinCore and Legacy Document Properties;
+		Caution needs to be used though since, JabRef does overwrite existing values.</li>
+	    <li>XMP privacy filter can be used to prevent sensible fields to be exported.</li>
+          </ul>
+	</li>  
+	<li>Support for OAI2 identifiers with subcategories, e.g. math.RA/0601001</li>
+	<li>Fixed bug that made explicit groups appear empty after updating group tree from external change.</li>
+	<li>New windows installer thanks to Uwe Stöhr.</li>
+	<li>[ 1641247 ] Fixed: No update of preview after generating bibtex key</li>
+	<li>[ 1631548 ] Fixed: Absolute paths should be stored for last open files.</li>
+	<li>[ 1598777 ] Fixed: Month sorting</li>
+	<li>[ 1570570 ] New Feature: Deselect all duplicates on import</li>
+	<li>[ 1574773 ] Fixed: sanitizeUrl() breaks ftp:// and file:///</li>
+	<li>[ 1609991 ] Fixed: Silverplatter Import: Publisher and Year confused</li>
+	<li>[ 1608391 ] Fixed: Medline Search Editbox size gets to big</li>
+      </ul>
+
+
+    <h3>Versi 2.2beta2 (November 26th, 2006)</h3>
+
+      <ul>
+	<li>Redesigned export functions to simplify GUI and provide "Export selected entries" functionality. Export filter is now chosen using the file type dropdown menu in the file dialog.</li>
+	<li>Fixed bug that caused UnsupportedEncodingException on Windows when saving.</li>
+	<li>Added warning dialog when exporting failed.</li>
+	<li>Added fix for exporting special chars in RTF like éóú...</li>
+	<li>Added NameFormat LayoutFormatter based on Bibtex method name.format$</li>
+	<li>Added Fetch from ArXiv.org to Web Search<br />
+            [1587342] Quering ArXiv (and any OAI2 Repository)</li>
+	<li>[1594123] Fixed: Failure to import big numbers in Bibtex</li>
+	<li>[1594169] Fixed: Entry editor navigation between panels faulty</li>
+	<li>[1588028] Fixed: Export HTML table has relative DOI URL</li>
+	<li>[1601651] Fixed: PDF subdirectory - missing first character</li>
+      </ul>
+
+
+    <h3>Versi 2.2beta (October 13th, 2006)</h3>
+
+      <ul>
+	<li>Added Mark Schenk's advanced HTML export filter.</li>
+	<li>Added options to copy/move/link to dragged linkable file (pdf, ps, etc.).</li>
+	<li>Removed unnecessary output text when scanning for external file changes.</li>
+	<li>Changed layout of entry editor to solve problem with collapsing text fields.</li>
+	<li>Added first version of support for XMP-metadata in PDFs.
+          <ul>
+	    <li>"Import into..."</li>
+            <li>Integrate with copy/move/link.</li>
+            <li>Added option to write all/selected PDFs in database</li>
+          </ul>
+	</li>
+	<li>Added tooltips to database tabs showing the file's full path.</li>
+	<li>Added function for setting or clearing specific fields in selected or all entries.</li>
+	<li>Setting a relative PDF/PS path in Database Properties now makes JabRef look for the directory relative to the bib file's location.</li>
+	<li>Removed Oxford comma from AuthorList...Comma-LayoutFormatters.</li>
+	<li>Added LayoutFormatters that print the Oxford comma.</li>
+	<li>Added missing space between abbreviated author first names: William Andrew Paul => W. A. Paul (used to be W.A. Paul)</li>
+	<li>Added LayoutFormatter for HTML paragraphs.</li>
+	<li>Changing Database Properties now causes the database to be marked as changed.</li>
+	<li>Improved simple search. Words are now treated as separate search terms, and phrases can be indicated with "double quotes".</li>
+	<li>When a letter key is pressed in the table, the first entry starting with the same letter (in the current sort column) is selected.</li>
+	<li>Bib files dragged into JabRef now appear in the Recent files menu.</li>
+	<li>Fixed bug in import dialog.</li>
+	<li>Better support for ISI files in general (should basically be better than INSPEC) including IEEE parsing.</li>
+	<li>Added regular expression search for auto-linking. Search is now more flexible by default.</li>
+	<li>Search operation also now search relative to the JabRef directory.</li>
+	<li>General improvements in Inspec ISI handling.</li>
+	<li>New LayoutFormatter: AuthorOrgSci - first author is in "last, first" all others in "first last". First names are abbreviated.</li>
+	<li>New LayoutFormatter: NoSpaceBetweenAbbreviations - spaces between multiple abbreviated first names are removed.</li>
+	<li>Improved PDF link resolver to produce proper URIs.</li>
+	<li>[1503956] Fixed: Help text instead of Help icon.</li>
+	<li>[1542552] Fixed: Wrong author import from ISI file.</li>
+	<li>[1534537] Fixed: resize groups interface</li>
+	<li>[1465610] Fixed: (Double-)Names containing hyphen (-) not handled correctly</li>
+	<li>[1436014] Fixed: No comma added to separate keywords</li>
+	<li>[1548875] Fixed: download pdf produces unsupported filename</li>
+	<li>[1545601] Fixed: downloading pdf corrupts pdf field text</li>
+	<li>[1285977] Fixed: Impossible to properly sort a numeric field</li>
+	<li>[1535044] Fixed: Month sorting</li>
+	<li>[1540646] Fixed: Default sort order: bibtexkey</li>
+	<li>[1553552] Fixed: Not properly detecting changes to flag as changed</li>
+      </ul>
+
+    <h3>Versi 2.1 (August 9th, 2006)</h3>
+
+      <ul>
+	<li>Added capability to drag files and WWW links into JabRef. BibTeX files will be opened normally, other files imported, and WWW links downloaded and imported.</li>
+	<li>The -v command line option now makes the application only print version number and quit immediately.</li>
+	<li>Duplicates within a set of imported entries are now found and shown in the import inspection window.</li>
+	<li>Mac users can now choose between native and Swing file chooser under Preferences -> Advanced.</li>
+	<li>Fixed missing duplicate warning when importing without import inspection window.</li>
+	<li>Fixed error in ISI import which allowed empty fields to be set, causing errors when saving and reloading entries.</li>
+	<li>Fixed missing time and owner stamps when importing entries (only in 2.1b/2.1b2).</li>
+	<li>Fixed erroneous updates in entry editor if user switches to a different entry while downloading PDF/PS file.</li>
+	<li>Fixed bug (only in 2.1b2) in calling file open/save dialog on Mac OS X.</li>
+	<li>Fixed bug that made duplicate resolver dialog pop under import inspection dialog.</li>
+      </ul>
+
+    <h3>Versi 2.1beta2 (June 29th, 2006)</h3>
+
+      <ul>
+	<li>Added option to toggle floating of marked entries to the top of the table.</li>
+	<li>Added option to open, append and import multiple BibTeX files.</li>
+	<li>Improved support for LaTeX special characters in HTML and RTF representations.</li>
+	<li>Fixed bug that made entry selection get lost when an edit modifies the entry's position in the main table.</li>
+	<li>Fixed bug in BibTeXML export (entry type name missing in tag).</li>
+	<li>Fixed name handling in (non-compliant) Endnote files giving all author names on the same line.</li>
+	<li>Fixed problem with keyword handling in Medline import.</li>
+	<li>Fixed (harmless) NullPointerException when medline fetch is cancelled.</li>
+	<li>Fixed bug in parser that made {"} illegal in fields quoted with ".</li>
+      </ul>
+
+    <h3>Versi 2.1beta (May 9th, 2006)</h3>
+
+      <ul>
+	<li>Known issue: font sizes cannot be changed, but should follow OS settings on Windows and Mac.</li>
+	<li>Known issue: some HTML may be handled inappropriately when downloading from IEEEXplore.</li>
+	<li>Changed Paste function so timestamp and owner fields are updated.</li>
+	<li>Added "Other" item to the "New entry ..." menu.</li>
+	<li>Changed sorting order so marked entries are displayed at the top of the table.</li>
+	<li>Added IEEEXplore search and download feature.</li>
+	<li>Added option to store entries in their original order. Unsorted table view now shows entries in their original order.</li>
+	<li>Added option to autogenerate keys for entries with missing keys before each save.</li>
+	<li>Improved handling of external URLs to prevent problems with special characters.</li>
+	<li>Medline and Endnote imports no longer automatically add curly braces around capital letters in title.</li>
+	<li>Float search now scrolls table to the top.</li>
+	<li>Fixed lockup problem in preview with uneven number of # characters in fields.</li>
+	<li>Fixed problem with default content selector fields reappearing after removal.</li>
+	<li>Fixed problem with unsupported character encodings being selectable and causing unreported save errors.</li>
+	<li>Fixed bug that blocked last line in table columns setup from being removed.</li>
+	<li>Fixed missing export formats from command line.</li>
+	<li>Fixed bug that made Review tab impossible to remove from entry editor.</li>
+	<li>Fixed bug in Medline XML import that assigned wrong PMID for some entries.</li>
+	<li>Fixed bug in custom export that collapsed sequences of two or more backslashes into a single backslash in output.</li>
+	<li>Fixed bug (misspelled formatter name) in Harvard RTF export.</li>
+      </ul>
+
+    <h3>Versi 2.0.1 (February 2nd, 2006)</h3>
+
+      <ul>
+	<li>Fixed bug that made a hidden entry editor under some circumstances store a field value to the wrong entry.</li>
+	<li>Fixed synchronization bug that made the opening of a new database sometimes fail.</li>
+	<li>Fixed bug in setting external journal lists when no personal list is set.</li>
+      </ul>
+
+    <h3>Versi 2.0 (January 30th, 2006)</h3>
+
+      <ul>
+	<li>Changed sorting selection interface for main table for more intuitive operation.</li>
+	<li>Made import operation update "working directory".</li>
+	<li>Removed hard-coded author/editor name rearrangement in OpenOffice and OpenDocument exports.</li>
+	<li>Fixed hangup when parsing RIS files from Nature.</li>
+	<li>Fixed NullPointerException when generating database from AUX file on Mac OS X.</li>
+	<li>Fixed bug in routine for adding braces around capital letters.</li>
+	<li>Fixed bug in switching preview layouts.</li>
+	<li>Fixed bug in link handling in entry preview.</li>
+      </ul>
+
+    <h3>Versi 2.0b2 (January 15th, 2006)</h3>
+
+      <ul>
+	<li>Changed field order in OpenDocument export
+	to comply with bibliography requirement.</li>
+	<li>Added support for inserting citations into
+	Emacs using gnuserv/gnuclient.</li>
+	<li>Added option to set a regular expression
+	replace operation on generated bibtex keys.</li>
+	<li>Added support for custom importers inside
+	a jar file.</li>
+	<li>Fixed bug in opening URLs containing "&"
+	on Windows.</li>
+      </ul>
+
+    <h3>Versi 2.0b (January 4rd, 2006)</h3>
+
+      <ul>
+	<li>Added a system for registering custom import
+	formats in the form of Java classes.</li>
+
+	<li>Added export option for OpenDocument
+	spreadsheet.</li>
+
+	<li>Added new options for name formatting in main
+	table.</li>
+
+	<li>Added REPEC-NEP import filter.</li>
+
+	<li>Added option for non-field parameters for export
+	formatters. If the parameters does not start with the
+	backslash character, it will be passed unchanged to the
+	formatter in place of any field value.</li>
+
+	<li>Added export formatter CurrentDate, which returns
+	the current date, and takes a format string as
+	parameter.</li>
+
+	<li>Added customization of table colors, accessible
+	from Tools -> Preferences -> Entry table.</li>
+
+	<li>Added new Appearance tab to preferences dialog to
+	gather appearance related options.</li>
+
+	<li>Added toggling of abbreviated and full journal
+	names. The list of journals is realized as an external
+	file, but editable from a Manage Journal Abbreviations
+	panel. Secondary lists can also be linked, but not
+	edited. There is a download option to quickly get a
+	list available on the internet, and we will provide one
+	or more lists for download from the SourceForge web
+	server.</li>
+
+	<li>Added functionality for new JabRef instances to
+	detect a running instance, and send command line
+	parameters to the running instance for processing.</li>
+
+	<li>Added handling of HTML links in preview panel.</li>
+
+	<li>Added confirmation dialog when database is saved
+	and the chosen encoding doesn't support all characters.
+	Gives options to save, cancel or try a different
+	encoding.</li>
+
+	<li>The encoding used when opening a database is now
+	remembered, and used when database is stored.</li>
+
+	<li>Added review field for research comments, paper
+	reviews, etc.</li>
+
+	<li>Added option to disable wrapping for certain
+	fields. Wrapping of pdf, ps, doi and url is disabled by
+	default.</li>
+
+	<li>Antialiasing option now affects entry editor text
+	fields as well as table text.</li>
+
+	<li>Changed to monospaced font in source editor
+	field.</li>
+
+	<li>Removed option to put double braces around BibTeX
+	fields, but retained option to remove double braces
+	when loading. Added option to put braces around capital
+	letters of a chosen set of fields.</li>
+
+	<li>Improved Ovid import.</li>
+
+	<li>Fixed problem with ordering of BibTeX strings that
+	are referred to by other strings.</li>
+
+	<li>Fixed problem with loading 16-bit encoded bib files
+	with 8-bit encoding as default, and vice versa.</li>
+
+	<li>Fixed multiplying authors bug when author/editor
+	field appears both in Required and Optional tabs.</li>
+
+	<li>Fixed startup freeze when trying to load certain
+	malformed bib files.</li>
+
+	<li>Fixed bug related to multi-line fields in RIS
+	import.</li>
+
+	<li>Fixed bug related to looking up a fully qualified
+	DOI</li>
+
+	<li>Included review field to preview panel 1, which
+	shows the abstract</li>
+
+	<li>Fixed bug where booktitle field was not displayed
+	in preview for conference proceedings, similar to
+	journal field</li>
+      </ul>
+
+    <h3>Versi 1.8.1 (September 15th, 2005)</h3>
+
+      <ul>
+	<li>Added automatic timestamp with configurable format
+	for entries.</li>
+
+	<li>Added new key generator modifier ":abbr" to
+	abbreviate field contents.</li>
+
+	<li>Added Help button in Preferences -> Entry
+	preview</li>
+
+	<li>Added Big5, Big5_HKSCS and GBK encodings for
+	Chinese.</li>
+
+	<li>Improved marking feature. Username is now used for
+	marking, so different users can mark entries separately
+	without interference.</li>
+
+	<li>Improved handling of names such as "Firstname de la
+	Lastname jr.", with different handling for presentation
+	and sorting purposes. Key generation now should always
+	use the genuine last name, and not produce keys like
+	"de2001".</li>
+
+	<li>Removed duplicate warning from inspection dialog
+	for non-selected entries.</li>
+
+	<li>Fixed setting of sheet name in OpenOffice.org Calc
+	export.</li>
+
+	<li>Fixed bug that prevented PDF/PS opening by F4 from
+	automatically finding files in subdirectories below the
+	main PDF/PS dir.</li>
+
+	<li>Fixed BibTeX parser bug that made it choke on short
+	comment strings.</li>
+
+	<li>Fixed bug that made regexp search fail for fields
+	containing newline characters.</li>
+
+	<li>Fixed platform-dependent handling of newline
+	characters.</li>
+
+	<li>Fixed bug that prevented command line import with
+	explicit format.</li>
+
+	<li>Fixed bug that made it impossible to disable table
+	antialiasing.</li>
+
+	<li>Fixed AuthorAndsCommaReplacer.</li>
+      </ul>
+
+    <h3>Versi 1.8 (July 30th, 2005)</h3>
+
+      <ul>
+	<li>Search panel now starts visible if it was visible
+	at last shutdown.</li>
+
+	<li>Added option to disable import inspection window
+	when only one entry is being imported.</li>
+
+	<li>Fixed parser bug that caused problems for bib files
+	containing extra characters after the last entry.</li>
+
+	<li>Fixed missing month in JStor import.</li>
+
+	<li>Fixed some bugs in "new from plain-text"
+	wizard</li>
+      </ul>
+
+    <h3>Versi 1.8b2 (July 13th, 2005)</h3>
+
+      <ul>
+	<li>Changed handling of external updates so the
+	notification is suppressed when there are no actual
+	changes.</li>
+
+	<li>Changed autodetecting import so BibTeX files are
+	handled more similarly to other formats.</li>
+
+	<li>Enabled sorting by icon columns.</li>
+
+	<li>Added option to remove BibTeX source panel from
+	entry editor.</li>
+
+	<li>Added command line option to not load any files at
+	startup. Will override any autoloading or other command
+	line options that normally load or import files.</li>
+
+	<li>Added handling of duplicates to import inspection
+	window.</li>
+
+	<li>Made entry preview be updated whenever the
+	selection is expanded by one row, to make it more
+	useful while selecting a set of entries.</li>
+
+	<li>Changed BibTeX field parsing to avoid inserting
+	line breaks at wrong places.</li>
+
+	<li>Improved handling of page numbers in Medline
+	import.</li>
+
+	<li>Fixed import of file links when importing SixPack
+	files.</li>
+
+	<li>Fixed bug that prevented closing of search
+	interface when no databases are open.</li>
+
+	<li>Fixed OpenOffice Calc export to be compatible with
+	OpenOffice.org 2.0 beta.</li>
+
+	<li>Fixed bugs in Refer/Endnote import filter.</li>
+
+	<li>Fixed bug that caused changes to be lost in some
+	cases when the same field is present in multiple entry
+	editor tabs.</li>
+
+	<li>Fixed bug that prevented command line autodetecting
+	import from working with BibTeX files.</li>
+
+	<li>Fixed minor bug in routine for removing double
+	braces.</li>
+      </ul>
+
+    <h3>Versi 1.8b (June 6th, 2005)</h3>
+
+      <ul>
+	<li>Added option to store bib file with double
+	braces.</li>
+
+	<li>Follow @input tags in aux files to indicate nested
+	aux files for generating subdatabases.</li>
+
+	<li>Improved wrapping and formatting of bib files, to
+	preserve paragraph separator (empty line).</li>
+
+	<li>Added test buttons for customization of preview
+	layouts.</li>
+
+	<li>Added inspection dialog for previewing and
+	generating keys for imported entries, and deciding
+	which ones to keep and discard. The dialog allows
+	inspection during long import processes such as Medline
+	search.</li>
+
+	<li>Restructured layout to use a common side pane with
+	all tabs.</li>
+
+	<li>Added import filter for Cambridge Scientific
+	Abstracts (CSA) format.</li>
+
+	<li>Added PS directory with similar options as
+	PDF.</li>
+
+	<li>Added [authshort] and [edtrshort] key field
+	markers. Patch submitted by Kolja Brix.</li>
+
+	<li>Made the program remember preview enable
+	setting.</li>
+
+	<li>Improved handling of illegal regular expressions in
+	search.</li>
+
+	<li>Removed options to search only Required, Optional
+	and/or General fields, in order to simplify search
+	interface.</li>
+
+	<li>Changed keys for Next and Previous tab to CTRL-PGDN
+	and CTRL-PGUP to match shortcuts in a certain popular
+	web browser.</li>
+
+	<li>Minor change to Preferences -> Table columns to
+	enable insertion of column in position 2.</li>
+
+	<li>Fixed parser bug that caused problems for files
+	with >10000 entries.</li>
+
+	<li>Fixed bug in entry editor that caused the source
+	edit panel to remove marking from entries.</li>
+
+	<li>Fixed export bug that made "\begin" tags fail if
+	encountered immediately after an "\end" tag.</li>
+
+	<li>Fixed export bug that made whitespace disappear
+	after empty field values.</li>
+
+	<li>Fixed ISI import bug that handled SO fields with
+	line breaks wrong.</li>
+
+	<li>Fixed bug occuring when choosing not to import
+	duplicate imported entry.</li>
+
+	<li>Fixed problem with detecting popup trigger on Mac
+	OSX with one button mouse.</li>
+
+	<li>Fixed erroneous relative paths for PDF files when
+	PDF directory is not set.</li>
+
+	<li>Fixed entry preview to resolve string
+	references.</li>
+      </ul>
+
+    <h3>Versi 1.7.1 (April 11th, 2005)</h3>
+
+      <ul>
+	<li>Removed unnecessary stack traces when opening
+	external viewer.</li>
+
+	<li>Fixed bug that made Ctrl-E destroy current edit in
+	entry editor.</li>
+
+	<li>Fixed problem when copying modified BibTeX key gave
+	old value.</li>
+
+	<li>Fixed missing 'booktitle' import in CONF entries in
+	RIS import.</li>
+
+	<li>Fixed bug that made group tree disappear for
+	certain keyword expressions.</li>
+
+	<li>Fixed bug that made standard BibTeX fields be saved
+	without line wrapping.</li>
+      </ul>
+
+    <h3>Versi 1.7 (March 20th, 2005)</h3>
+
+      <ul>
+	<li>When fetching from Medline or CiteSeer, fetched
+	entry is now opened in editor.</li>
+
+	<li>Added French translations of help files.</li>
+
+	<li>Added color highlighting of focused text field in
+	entry editor.</li>
+
+	<li>Added option in context menu of entry editor for
+	changing capitalization of field contents.</li>
+
+	<li>Added name conversion "Smith, RA" -> "Smith, R.
+	A." to Medline import.</li>
+
+	<li>Updated task bar icon.</li>
+
+	<li>Fixed bug that left some search settings items
+	inappropriately disabled.</li>
+
+	<li>Fixed bug that caused requirement for restart to
+	register change in default key pattern.</li>
+
+	<li>Fixed bug that caused crash some times after
+	adding/removing field content selectors.</li>
+
+	<li>Fixed bug in recognizing custom entry types when
+	reading bib files.</li>
+
+	<li>Fixed bug that allowed a deleted entry to stay
+	visible in the entry editor.</li>
+      </ul>
+
+    <h3>Versi 1.7b2 (March 7th, 2005)</h3>
+
+      <ul>
+	<li>Made side pane resizable.</li>
+
+	<li>Replaced entry customization dialog with improved
+	interface.</li>
+
+	<li>Added standard entry type "conference", similar to
+	"inproceedings".</li>
+
+	<li>Added "default" label pattern to avoid the need to
+	set similar patterns manually.</li>
+
+	<li>Added line wrapping to metadata in saved .bib file
+	to avoid long lines.</li>
+
+	<li>Added "bibtexkey" as implicit fourth sort
+	criterion, to minimize problem with almost similar
+	entries swapping places.</li>
+
+	<li>Added OpenOffice.org Calc export filter that
+	exports spreadsheet compatible with the OpenOffice.org
+	bibliography feature.</li>
+
+	<li>Added a couple of previously unsupported
+	publication types in SciFinder.</li>
+
+	<li>Added extra shortcuts CTRL-+ and CTRL-- for
+	switching tabs in entry editor, since original
+	shortcuts CTRL[-SHIFT]-TAB is used by some window
+	managers.</li>
+
+	<li>Updated Endnote export filter.</li>
+
+	<li>Fixed focus and key binding problems for switching
+	tabs/entries in entry editor</li>
+
+	<li>Fixed bug that prevented required fields tab from
+	appearing for entries with only bibtex key as required
+	field.</li>
+
+	<li>Fixed bug that prevented the user from changing the
+	default encoding.</li>
+
+	<li>Fixed bugs in RIS import.</li>
+
+	<li>Fixed bug 1112050; freeze when reading certain
+	author fields with mismatched braces.</li>
+      </ul>
+
+    <h3>Versi 1.7 beta (January, 27th, 2005)</h3>
+
+      <ul>
+	<li>Changed routine for rearranging author names
+	(Lastname, Firstname) so bracketed expressions are
+	treated as units.</li>
+
+	<li>Grouping controls now allow group hierarchies, and
+	now allow explicit and search expression groups as well
+	as keyword groups.</li>
+
+	<li>Added full customization of general fields
+	tabs</li>
+
+	<li>Added option to preserve formatting for non-BibTeX
+	fields.</li>
+
+	<li>Added integrity check for database.</li>
+
+	<li>Added export filters EndNote and Harvard RTF.</li>
+
+	<li>Added automatic import format chooser for import
+	(same as wildcard import below).</li>
+
+	<li>Added wildcard (*) option for command-line import,
+	to try to automatically determine the correct
+	format.</li>
+
+	<li>Improved layout of Preferences dialog.</li>
+
+	<li>Improved several import filters.</li>
+
+	<li>Added authIniN/edtrIniN key formatters.</li>
+
+	<li>Marked entries now float to the top when no
+	searching or grouping reordering is active.</li>
+
+	<li>Fixed problem with opening file dialog on Win NT -
+	AWT dialog is now opened if Swing dialog fails.</li>
+      </ul>
+
+    <h3>Versi 1.6 (November 27th, 2004)</h3>
+
+      <ul>
+	<li>Improved handling of entry selection in various
+	ways. E.g. selected entry is now scrolled into view
+	when opening entry editor and entry is kept selected
+	when importing CiteSeer fields.</li>
+
+	<li>Fixed update bug between autogenerated bibtex key
+	and source panel.</li>
+
+	<li>Fixed missing . at the end of last author name in
+	RIS import.</li>
+
+	<li>Fixed NullPointerException on certain special
+	characters when exporting to BibTeXML.</li>
+
+	<li>Fixed bug that sometimes prevented the unmarking of
+	entries.</li>
+
+	<li>Fixed problem with formatting one-name
+	authors.</li>
+
+	<li>Various other bugfixes.</li>
+      </ul>
+
+    <h3>Versi 1.6 beta (November 8th, 2004)</h3>
+
+      In an effort to produce better and more stable releases,
+      we have decided to release a beta versions prior to
+      future versions. We start out with today's beta release
+      of version 1.6. Users can now choose whether to download
+      and use the beta version for earlier access to new
+      features, or whether to wait for the final, better-tested
+      version. The final 1.6 version is expected to be released
+      in a few weeks from today.
+
+      <ul>
+	<li>Added mnemonic keys to menus and menu items.</li>
+
+	<li>Added MODS and tab-separated file export</li>
+
+	<li>Added facility for detecting and handling external
+	changes to open bib files.</li>
+
+	<li>Added scan option for exact duplicates with
+	automatic removal.</li>
+
+	<li>Bibtex strings are now sorted automatically.</li>
+
+	<li>Bibtex strings are now resolved when exporting
+	database.</li>
+
+	<li>Fixed problem with field content selector getting
+	too wide. Limited width.</li>
+
+	<li>Fixed PDF/PS view routine to remove problems with
+	filenames containing spaces.</li>
+
+	<li>Fixed bug that interfered with Fetch Medline by ID,
+	and fixed parsing problem with certain Medline
+	entries.</li>
+
+	<li>Fixed bug that interfered with Push to WinEdt.</li>
+
+	<li>Fixed HTML output so \c{c} is handled
+	correctly.</li>
+
+	<li>command line option for generating a sub-database
+	from LaTex aux file entries</li>
+
+	<li>simple copy/paste menu in entry editor</li>
+
+	<li>experimental: text-input-area with underlying
+	infotext in plaintext import dialog</li>
+      </ul>
+
+    <h3>Versi 1.55 (October 12th, 2004)</h3>
+
+      <ul>
+	<li>Made method for opening PDF files robust with
+	regard to file separators (/ and \), so bib files can
+	easier be used across platforms.</li>
+
+	<li>Improved Medline fetcher. Can now fetch entries
+	based on a search expression.</li>
+
+	<li>Added features for fetching fields and referring
+	publications from the CiteSeer database.</li>
+
+	<li>Added option to always save database ordered by
+	author/editor/year, and made this the default
+	setting.</li>
+
+	<li>When a single entry is selected, right-click menu
+	now shows a checkbox menu for group memberships instead
+	of the regular "Add to" and "Remove from" menus.</li>
+
+	<li>Improved [shorttitle] and [veryshorttitle] special
+	key pattern fields.</li>
+
+	<li>Added dialog box for conveniently setting the
+	fields of an entry from a plain text description.</li>
+
+	<li>Added formatter "ResolvePDF" to create correct
+	PDF/PS links in HTML export when relative file names
+	are used.</li>
+
+	<li>Added Abstract panel in entry editor.</li>
+
+	<li>Added alternate preview with abstract, and made
+	both previews configurable.</li>
+
+	<li>Added the option to create a subset of a database
+	based on an .aux file.</li>
+
+	<li>Added 'Cancel' button to duplicate resolver dialog,
+	so the process can be stopped.</li>
+
+	<li>Added check for spaces in custom entry type
+	names.</li>
+
+	<li>Added several new key pattern markers.</li>
+
+	<li>Added toolbar buttons for Mark/Unmark to improve
+	discoverability.</li>
+
+	<li>Fixed bug that made export filters ignore the
+	chosen character encoding.</li>
+
+	<li>Fixed bug that interfered with author name
+	formatting.</li>
+
+	<li>Fixed various bugs in import filters.</li>
+
+	<li>Fixed bug that prevented confirmation dialog when
+	deleting entry from the entry editor.</li>
+
+	<li>Fixed bug that made the next entry be opened
+	instead of the current, when pressing Enter in
+	table.</li>
+
+	<li>Fixed bug that made it possible to leave a source
+	edit when the source didn't validate properly. Also
+	made it impossible to change table selection until
+	source validates.</li>
+      </ul>
+
+    <h3>Versi 1.5 (August 3rd, 2004)</h3>
+
+      <ul>
+	<li>Added Highlight and select options to the group
+	interface, and made it possible to change the number of
+	visible lines in the list.</li>
+
+	<li>Added option to allow or disallow direct table
+	editing.</li>
+
+	<li>Added optional confirmation dialog for deleting
+	entries.</li>
+
+	<li>Added optional warning dialog for duplicate BibTeX
+	keys.</li>
+
+	<li>Added warnings to bibtex parser, and prevented
+	failure to load files with duplicate string
+	definitions.</li>
+
+	<li>Added JStor import filter.</li>
+
+	<li>Changed the look and feel to JGoodies Forms on
+	non-Macintosh platforms.</li>
+
+	<li>Optimized performance in several areas.</li>
+
+	<li>Numerous usability improvements.</li>
+
+	<li>Fixed RIS import bug caused by short lines.</li>
+
+	<li>Fixed bug in SciFinder import.</li>
+
+	<li>Fixed bug that made entire field get cleared when
+	removing from group.</li>
+      </ul>
+
+    <h3>Versi 1.4 (June 6th, 2004)</h3>
+
+      Version 1.4 provides command line options for importing
+      and exporting files, advanced search, custom export
+      filters, and several bug fixes and minor changes.
+
+      <ul>
+	<li>Added advanced search feature.</li>
+
+	<li>Added facility for using custom export
+	formats.</li>
+
+	<li>Added command line options for importing/exporting
+	files, importing/exporting, user preferences, loading
+	session and for suppressing the GUI (using RitOpt for
+	parsing options).</li>
+
+	<li>Added automatic stripping of \url{} when opening
+	url.</li>
+
+	<li>Improved export filters.</li>
+
+	<li>Fixed focus bug which sometimes interfered with
+	cut/copy/paste.</li>
+      </ul>
+
+    <h3>Versi 1.3.1 (May 9, 2004)</h3>
+
+      Release 1.3.1 resolves a couple of severe bugs in 1.3.
+      All users who have downloaded 1.3 should upgrade (the
+      bugs in 1.3 impaired functionality but did not pose a
+      security risk).
+
+    <h3>Versi 1.3.* (May 9, 2004)</h3>
+
+      This release adds entry preview, detection of duplicate
+      entries, persistent entry marking, new import and export
+      filters, better linking to PDF/PS/URL/DOI, and better Mac
+      OS X compatibility. There are several other changes and
+      improvements, and many bugfixes.
+
+    <h3>Versi 1.2 (March 21, 2004)</h3>
+
+      The icon set has been replaced. Notable new features are
+      French language support, key generator customization,
+      string replace, and BibTeXML import. Several bugs have
+      been fixed.
+
+    <h3>Versi 1.19 (Feb 19,2004)</h3>
+
+      <ul>
+	<li>Entry editor is now opened for an entry that causes
+	an error when saving.</li>
+
+	<li>Added options to display names in harmonised format
+	in the main table.</li>
+
+	<li>Added Docbook and (experimental) HTML export.</li>
+
+	<li>Enabled 'doi' and 'pii' fields for Medline
+	import.</li>
+
+	<li>Enabled antialiasing fonts.</li>
+
+	<li>Added the Kunststoff look&feel to give a more
+	pleasant user interface.</li>
+
+	<li>Added font selector for the main table.</li>
+
+	<li>Improved table column customization.</li>
+
+	<li>Added word selector feature for selected fields
+	(keywords, journal).</li>
+
+	<li>Added support for German and Norwegian
+	language.</li>
+
+	<li>Generalized copy cite key features for multiple
+	entries.</li>
+
+	<li>Added quick load/save session feature.</li>
+
+	<li>Fixed issue/number bug in ISI import.</li>
+
+	<li>Added "Open pdf/ps" item in right-click menu.</li>
+
+	<li>Fixed bug causing external viewer to only work in
+	General fields.</li>
+
+	<li>Added functionality for using Browse buttons for
+	file-related fields (ps, pdf, etc.).</li>
+
+	<li>Added Browse buttons to External programs tab in
+	Preferences.</li>
+
+	<li>Fixed bug related to Save database and Source field
+	which caused changes to disappear.</li>
+      </ul>
+
+    <h3>Versi 1.1 (Jan 02, 2004)</h3>
+
+      <ul>
+	<li>Added bibtex key uniqueness checking, and prevented
+	autogeneration from generating non-unique keys.</li>
+
+	<li>Added command line option to load file on
+	startup.</li>
+
+	<li>Fixed problem with autogeneration creating invalid
+	keys.</li>
+
+	<li>Improved Refer/Endnote import.</li>
+
+	<li>Added feature for importing entries and/or strings
+	and/or group definitions from another BibTeX
+	database.</li>
+
+	<li>Added menu choices to import into open
+	database.</li>
+
+	<li>Added toolbar button for closing current
+	database.</li>
+
+	<li>Fixed shortcut key for "Store field" in entry
+	editor, and fixed problem that made shortcut for "Save
+	database" unavailable from entry editor.</li>
+
+	<li>Added option to fetch Medline entries automatically
+	by ID, based on a patch submitted by Mike Smoot.</li>
+
+	<li>Fixed bug in RIS import.</li>
+
+	<li>Added options to copy key and copy "\cite{key}" to
+	right-click menu.</li>
+
+	<li>Fixed bug that caused some General fields not to
+	get displayed.</li>
+
+	<li>Enabled customization of General fields.</li>
+
+	<li>Enabled customization of existing entry types, and
+	definition of new types.</li>
+      </ul>
+
+    <h3>Versi 1.0 (Nov 29, 2003)</h3>
+
+      First release of JabRef
+
+  </body>
+
+</html>
diff --git a/src/help/in/SearchHelp.html b/src/help/in/SearchHelp.html
index f6a069d..2793940 100644
--- a/src/help/in/SearchHelp.html
+++ b/src/help/in/SearchHelp.html
@@ -1,105 +1,105 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Pencarian</h1>
-
-    <p>Ada tiga pola pencarian yang bisa dilakukan dalam JabRef.</p>
-
-    <p><em>CTRL-F</em> membuka dialog pencarian.
-    Menekan <em>CTRL-F</em> beberapa kali akan membuka dan menutup
-    dialog pencarian ini. Ketika melakukan pencarian secara bertahap,
-    menekan <em>CTRL-F</em> akan memerintahkan program pencarian
-    meneruskan pencarian.</p>
-
-    <p><em>CTRL-SHIFT-F</em> membuka dialog pencarian, sekaligus
-    memilih pencarian bertahap. Ketika dalam proses pencarian secara
-    bertahap, anda menekan <em>CTRL-SHIFT-F</em> maka akan mencari
-    kata berikutnya yang anda cari.</p>
-
-    <h2>Pencarian bertahap</h2>
-
-    <p>Ketika melakukan pencarian bertahap, program pencarian
-    segera memulai pencarian setelah anda menekan satu huruf. Di 
-    baris status memberikan informasi kepada anda jika menemukan
-    yang anda cari. Jika anda menggunakan tombol pintasan, maka program
-    pencarian meneruskan mencari kata pada teks berikutnya. Jika
-    sudah tidak menemukan ada kata yang sama lagi, baris status
-    akan memberitahu anda bahwa sudah tidak ada kata yang ditemukan.
-    Jika anda mengulang pencarian, akan dimulai dari paling atas lagi.
-    Urutan pencarian selalu mengikuti urutan basisdata yang sekarang.
-    Untuk menghentikan pencarian, tekan tombol ketik ESC atau tekan
-    tombol dialog "Bersihkan pencarian".</p>
-
-    <h2>Normal</h2>
-
-    <p>Pada pencarian normal, setelah menekan ENTER program pencarian
-    mulai mencari dalam berkas basisdata anda yang mengandung kata 
-    carian yang anda inginkan. Hanya entri yang mengandung kata carian
-    dengan tepat yang dipertimbangkan oleh program pencarian. Untuk
-    mencari kata yang berurutan, anda perlu harus menuliskan dalam
-    tanda petik. Misalnya, carian <b>progress "marine aquaculture"</b>
-    akan menemukan baik kata pro "progress" maupun frasa "marine
-    aquaculture". Entri lain yang tidak mempunyai kata-kata tersebut
-    kemudian akan disembunyikan, dan hanya menampilkan entri yang
-    mempunyai kata carian (mode penapis), atau entri yang tidak mengandung
-    kata carian akan menjadi kelabu (mode mengambang). Untuk 
-    menghentikan pencarian, tekan tombol ketik ESC atau tekan
-    tombol dialog "Bersihkan pencarian".</p>
-
-    <h2><a name="advanced"
-       id="advanced">Spesifikasi bidang, operator
-       logika</a></h2>
-
-       <p>Untuk melakukan pencarian hanya pada bidang tertentu
-       dan/atau menggunakan operator logika sebagai ekspresi
-       pencarian, perlu menggunakan sintaks khusus yang sudah
-       disediakan. Misalnya untuk mencari penulis "Miller",
-       tuliskan (pada semua mode kecuali pencarian bertahap):</p>
-
-    <p>author = miller</p>
-
-    <p>Baik spesifikasi bidang maupun pencarian kata mendukung
-    ekspresi reguler. Jika kata carian mengandung spasi, anda 
-    perlu menuliskan dalam tanda petik. <i>Jangan</i> menggunakan
-    spasi di spesifikasi bidang! Misalnya untuk mencari entri
-    tentang image processing, tulis:</p>
-
-    <p>title|keywords = "image processing"</p>
-
-    <p>Anda bisa menggunakan "and", "or", "not", dan ekspresi
-    kurung kurawal untuk mencari:</p>
-
-    <p>(author = miller or title|keywords = "image processing") and
-    not author = brown</p>
-
-    <p>Tanda "=" digunakan untuk pernyataan "mengandung".
-    Pencarian kata yang tepat dimungkinkan dengan pernyataan perintah
-    "matches" atau "==". Pernyataan "!=" akan menguji apakah kata
-    carian <i>tidak</i> ditemukan dalam bidang (setara dengan perintah
-    "not ... contains ..."). Pemilihan tipe bidang yang dicari (diperlukan,
-    tambahan, semua) akan selalu menindih perintah yang dituliskan
-    dalam spesifikasi bidang di ekspresi pencarian. Untuk mencari
-    entri dari tipe tertentu, bidang pseudo yang disebut "entrytype"
-    juga tersedia:</p>
-
-    <p>entrytype = thesis</p>
-
-    <p>Ekspresi ini mencari entri yang mempunyai tipe (yang ditampilkan
-    pada kolum "Entrytype") dan mengandung kata "thesis" (mungkin sebagai
-    "phdthesis" dan "mastersthesis"). Bidang psedo lainnya
-    "bibtexkey" digunakan untuk mencari kunci acuan, misalnya:</p>
-
-    <p>bibtexkey = miller2005</p>
-
-    <h2>Pengaturan pencarian</h2>
-
-    <p>Tombol <em>Pengaturan</em> membuka menu lain
-    untuk mengatur sensitivitas huruf (huruf besar atau huruf kecil),
-    mengatur ekspresi pencarian, serta mengatur apakah hasilnya
-    perlu dipilih pada tabel tertentu.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Pencarian</h1>
+
+    <p>Ada tiga pola pencarian yang bisa dilakukan dalam JabRef.</p>
+
+    <p><em>CTRL-F</em> membuka dialog pencarian.
+    Menekan <em>CTRL-F</em> beberapa kali akan membuka dan menutup
+    dialog pencarian ini. Ketika melakukan pencarian secara bertahap,
+    menekan <em>CTRL-F</em> akan memerintahkan program pencarian
+    meneruskan pencarian.</p>
+
+    <p><em>CTRL-SHIFT-F</em> membuka dialog pencarian, sekaligus
+    memilih pencarian bertahap. Ketika dalam proses pencarian secara
+    bertahap, anda menekan <em>CTRL-SHIFT-F</em> maka akan mencari
+    kata berikutnya yang anda cari.</p>
+
+    <h2>Pencarian bertahap</h2>
+
+    <p>Ketika melakukan pencarian bertahap, program pencarian
+    segera memulai pencarian setelah anda menekan satu huruf. Di 
+    baris status memberikan informasi kepada anda jika menemukan
+    yang anda cari. Jika anda menggunakan tombol pintasan, maka program
+    pencarian meneruskan mencari kata pada teks berikutnya. Jika
+    sudah tidak menemukan ada kata yang sama lagi, baris status
+    akan memberitahu anda bahwa sudah tidak ada kata yang ditemukan.
+    Jika anda mengulang pencarian, akan dimulai dari paling atas lagi.
+    Urutan pencarian selalu mengikuti urutan basisdata yang sekarang.
+    Untuk menghentikan pencarian, tekan tombol ketik ESC atau tekan
+    tombol dialog "Bersihkan pencarian".</p>
+
+    <h2>Normal</h2>
+
+    <p>Pada pencarian normal, setelah menekan ENTER program pencarian
+    mulai mencari dalam berkas basisdata anda yang mengandung kata 
+    carian yang anda inginkan. Hanya entri yang mengandung kata carian
+    dengan tepat yang dipertimbangkan oleh program pencarian. Untuk
+    mencari kata yang berurutan, anda perlu harus menuliskan dalam
+    tanda petik. Misalnya, carian <b>progress "marine aquaculture"</b>
+    akan menemukan baik kata pro "progress" maupun frasa "marine
+    aquaculture". Entri lain yang tidak mempunyai kata-kata tersebut
+    kemudian akan disembunyikan, dan hanya menampilkan entri yang
+    mempunyai kata carian (mode penapis), atau entri yang tidak mengandung
+    kata carian akan menjadi kelabu (mode mengambang). Untuk 
+    menghentikan pencarian, tekan tombol ketik ESC atau tekan
+    tombol dialog "Bersihkan pencarian".</p>
+
+    <h2><a name="advanced"
+       id="advanced">Spesifikasi bidang, operator
+       logika</a></h2>
+
+       <p>Untuk melakukan pencarian hanya pada bidang tertentu
+       dan/atau menggunakan operator logika sebagai ekspresi
+       pencarian, perlu menggunakan sintaks khusus yang sudah
+       disediakan. Misalnya untuk mencari penulis "Miller",
+       tuliskan (pada semua mode kecuali pencarian bertahap):</p>
+
+    <p>author = miller</p>
+
+    <p>Baik spesifikasi bidang maupun pencarian kata mendukung
+    ekspresi reguler. Jika kata carian mengandung spasi, anda 
+    perlu menuliskan dalam tanda petik. <i>Jangan</i> menggunakan
+    spasi di spesifikasi bidang! Misalnya untuk mencari entri
+    tentang image processing, tulis:</p>
+
+    <p>title|keywords = "image processing"</p>
+
+    <p>Anda bisa menggunakan "and", "or", "not", dan ekspresi
+    kurung kurawal untuk mencari:</p>
+
+    <p>(author = miller or title|keywords = "image processing") and
+    not author = brown</p>
+
+    <p>Tanda "=" digunakan untuk pernyataan "mengandung".
+    Pencarian kata yang tepat dimungkinkan dengan pernyataan perintah
+    "matches" atau "==". Pernyataan "!=" akan menguji apakah kata
+    carian <i>tidak</i> ditemukan dalam bidang (setara dengan perintah
+    "not ... contains ..."). Pemilihan tipe bidang yang dicari (diperlukan,
+    tambahan, semua) akan selalu menindih perintah yang dituliskan
+    dalam spesifikasi bidang di ekspresi pencarian. Untuk mencari
+    entri dari tipe tertentu, bidang pseudo yang disebut "entrytype"
+    juga tersedia:</p>
+
+    <p>entrytype = thesis</p>
+
+    <p>Ekspresi ini mencari entri yang mempunyai tipe (yang ditampilkan
+    pada kolum "Entrytype") dan mengandung kata "thesis" (mungkin sebagai
+    "phdthesis" dan "mastersthesis"). Bidang psedo lainnya
+    "bibtexkey" digunakan untuk mencari kunci acuan, misalnya:</p>
+
+    <p>bibtexkey = miller2005</p>
+
+    <h2>Pengaturan pencarian</h2>
+
+    <p>Tombol <em>Pengaturan</em> membuka menu lain
+    untuk mengatur sensitivitas huruf (huruf besar atau huruf kecil),
+    mengatur ekspresi pencarian, serta mengatur apakah hasilnya
+    perlu dipilih pada tabel tertentu.</p>
+</body>
+</html>
diff --git a/src/help/in/ShortIntegrityCheck.html b/src/help/in/ShortIntegrityCheck.html
index 8f8bae2..c658627 100644
--- a/src/help/in/ShortIntegrityCheck.html
+++ b/src/help/in/ShortIntegrityCheck.html
@@ -1,14 +1,14 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Pemeriksaan Integritas</h1>
-
-    <p>Pemeriksaan integritas adalah suatu proses untuk melakukan pemeriksaan adanya indikasi
-    kesalahan mengisi bidang bibtex. "Memindai" adalah tombol untuk memulai pemeiksaan ini.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Pemeriksaan Integritas</h1>
+
+    <p>Pemeriksaan integritas adalah suatu proses untuk melakukan pemeriksaan adanya indikasi
+    kesalahan mengisi bidang bibtex. "Memindai" adalah tombol untuk memulai pemeiksaan ini.</p>
+
+</body>
+</html>
diff --git a/src/help/in/StringEditorHelp.html b/src/help/in/StringEditorHelp.html
old mode 100755
new mode 100644
index b53f3f8..04a32c9
--- a/src/help/in/StringEditorHelp.html
+++ b/src/help/in/StringEditorHelp.html
@@ -1,50 +1,50 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Penyunting string </h1>
-
-    <p><em>Dibuka dari menu utama
-    <b>BibTeX -> Sunting entri</b> atau bisa juga dengan cara menekan tombol di kotak
-    bantuan.</em></p>
-
-    <p>Data <em>String</em> adalah kode <em>bibtex</em> yang setara
-    dengan konstanta di bahasa pemrograman. Tiap-tiap string didefinisikan
-    dengan <em>nama</em> dan <em>isi</em>. Dalam basisdata,
-    nama dapat digunakan untuk mewakili isi.</p>
-
-    <p>Sebagai contoh, jika ada beberapa entri dari salah satu jurnal
-    yang mempunyai singkatan yang tidak mudah untuk diingat, misalnya
-    'J. Theor. Biol.' (Journal of Theroretical Biology), maka nama string
-    JTB dapat digunakan untuk menyatakan nama jurnal tadi. Anda tidak perlu
-    menuliskan nama jurnal yang sama di setiap entri, tetapi cukup
-    dengan menulis karakter '#JTB#' (tanpa tanda petik) pada bidang
-    <em>journal</em>, sehingga nama jurnal akan tertulis dengan benar
-    di setiap entri.</p>
-
-    <p>Acuan string dapat digunakan dalam bidang. Acuan string harus
-    ditulis diantara karakter '#'. Sintak ini adalah cara yang digunakan
-    JabRef yang sedikit berbeda dengan notasi <em>bibtex</em> yang digunakan
-    ketika anda menyimpan berkas basisdata. String merupakan cara bawaan
-    yang digunakan untuk menulis di semua bidang BibTeX standar.
-    Anda bisa juga menyatakan untuk bidang lain yang bukan standar, dari
-    <b>Pengaturan -> Preferensi -> Berkas</b>. Dari dialog ini
-    ada ada pilihan perkecualian untuk mengatasi masalah string yang perlu
-    perkecualian pada bidang yang mungkin mengandung karakter '#' seperti 
-    pada bidang 'url' dan bidang lain yang diinginkan agar tetap diproses
-    oleh BibTeX/LaTeX.</p>
-
-    <p>String bisa juga diacu dari string lain dengan cara yang sama
-    dengan syarat string yang diacu terlebih dahulu didefinisikan
-    <em>sebelum</em> string yang mengacu.</p>
-
-    <p>Walaupun urutan string dalam berkas BibTeX adalah penting,
-    anda tidak perlu kawatir ketika anda menggunakan JabRef.
-    String dapat ditampilkan menurut urutan alfabet pada penyunting
-    string, kemudian disimpan dengan dengan urutan yang sama, kecuali
-    BibTeX memerlukan urutan tertentu yang berbeda.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Penyunting string </h1>
+
+    <p><em>Dibuka dari menu utama
+    <b>BibTeX -> Sunting entri</b> atau bisa juga dengan cara menekan tombol di kotak
+    bantuan.</em></p>
+
+    <p>Data <em>String</em> adalah kode <em>bibtex</em> yang setara
+    dengan konstanta di bahasa pemrograman. Tiap-tiap string didefinisikan
+    dengan <em>nama</em> dan <em>isi</em>. Dalam basisdata,
+    nama dapat digunakan untuk mewakili isi.</p>
+
+    <p>Sebagai contoh, jika ada beberapa entri dari salah satu jurnal
+    yang mempunyai singkatan yang tidak mudah untuk diingat, misalnya
+    'J. Theor. Biol.' (Journal of Theroretical Biology), maka nama string
+    JTB dapat digunakan untuk menyatakan nama jurnal tadi. Anda tidak perlu
+    menuliskan nama jurnal yang sama di setiap entri, tetapi cukup
+    dengan menulis karakter '#JTB#' (tanpa tanda petik) pada bidang
+    <em>journal</em>, sehingga nama jurnal akan tertulis dengan benar
+    di setiap entri.</p>
+
+    <p>Acuan string dapat digunakan dalam bidang. Acuan string harus
+    ditulis diantara karakter '#'. Sintak ini adalah cara yang digunakan
+    JabRef yang sedikit berbeda dengan notasi <em>bibtex</em> yang digunakan
+    ketika anda menyimpan berkas basisdata. String merupakan cara bawaan
+    yang digunakan untuk menulis di semua bidang BibTeX standar.
+    Anda bisa juga menyatakan untuk bidang lain yang bukan standar, dari
+    <b>Pengaturan -> Preferensi -> Berkas</b>. Dari dialog ini
+    ada ada pilihan perkecualian untuk mengatasi masalah string yang perlu
+    perkecualian pada bidang yang mungkin mengandung karakter '#' seperti 
+    pada bidang 'url' dan bidang lain yang diinginkan agar tetap diproses
+    oleh BibTeX/LaTeX.</p>
+
+    <p>String bisa juga diacu dari string lain dengan cara yang sama
+    dengan syarat string yang diacu terlebih dahulu didefinisikan
+    <em>sebelum</em> string yang mengacu.</p>
+
+    <p>Walaupun urutan string dalam berkas BibTeX adalah penting,
+    anda tidak perlu kawatir ketika anda menggunakan JabRef.
+    String dapat ditampilkan menurut urutan alfabet pada penyunting
+    string, kemudian disimpan dengan dengan urutan yang sama, kecuali
+    BibTeX memerlukan urutan tertentu yang berbeda.</p>
+</body>
+</html>
diff --git a/src/help/in/TimeStampHelp.html b/src/help/in/TimeStampHelp.html
index 01fa9ae..47fc95c 100644
--- a/src/help/in/TimeStampHelp.html
+++ b/src/help/in/TimeStampHelp.html
@@ -1,50 +1,50 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Cap waktu entri</h1>
-
-    <p>Fitur ini bisa dipilih dan diatur melalui menu
-    <b>Pengaturan ->
-    Preferensi -> Umum</b>.</p>
-
-    <p>JabRef dapat menuliskan tanggal entri ditambahkan
-    dalam basisdata.</p>
-
-    <h2>Format</h2>
-
-    <p>Format cap waktu dibuat dengan string yang mengandung
-    tanda waktu yang memberikan informasi tentang tanggal
-    dan waktu.</p>
-
-    <p>Dibawah ini adalah daftar kode huruf (hasil penulisan
-    dituliskan dalam tanda kurung) untuk menuliskan berbagai
-    parameter tanggal:</p>
-
-    <ul>
-        <li><b>yy</b>: tahun (05)</li>
-
-        <li><b>yyyy</b>: tahun (2005)</li>
-
-        <li><b>MM</b>: bulan (09)</li>
-
-        <li><b>dd</b>: tanggal pada bulan (14)</li>
-
-        <li><b>HH</b>: jam pada hari (17)</li>
-
-        <li><b>mm</b>: menit pada jam (45)</li>
-    </ul>Kode waktu bisa digabungkan dengan tanda lainnya juga dengan spasi
-	 kosong. Beberapa contoh penggabungan:
-    <ul>
-        <li><b>yyyy.MM.dd</b> memberikan hasil <b>2005.09.14</b></li>
-
-        <li><b>yy.MM.dd</b> memberikan hasil <b>05.09.14</b></li>
-
-        <li><b>yyyy.MM.dd HH:mm</b> memberikan hasil <b>2005.09.14
-        17:45</b></li>
-    </ul>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="../jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Cap waktu entri</h1>
+
+    <p>Fitur ini bisa dipilih dan diatur melalui menu
+    <b>Pengaturan ->
+    Preferensi -> Umum</b>.</p>
+
+    <p>JabRef dapat menuliskan tanggal entri ditambahkan
+    dalam basisdata.</p>
+
+    <h2>Format</h2>
+
+    <p>Format cap waktu dibuat dengan string yang mengandung
+    tanda waktu yang memberikan informasi tentang tanggal
+    dan waktu.</p>
+
+    <p>Dibawah ini adalah daftar kode huruf (hasil penulisan
+    dituliskan dalam tanda kurung) untuk menuliskan berbagai
+    parameter tanggal:</p>
+
+    <ul>
+        <li><b>yy</b>: tahun (05)</li>
+
+        <li><b>yyyy</b>: tahun (2005)</li>
+
+        <li><b>MM</b>: bulan (09)</li>
+
+        <li><b>dd</b>: tanggal pada bulan (14)</li>
+
+        <li><b>HH</b>: jam pada hari (17)</li>
+
+        <li><b>mm</b>: menit pada jam (45)</li>
+    </ul>Kode waktu bisa digabungkan dengan tanda lainnya juga dengan spasi
+	 kosong. Beberapa contoh penggabungan:
+    <ul>
+        <li><b>yyyy.MM.dd</b> memberikan hasil <b>2005.09.14</b></li>
+
+        <li><b>yy.MM.dd</b> memberikan hasil <b>05.09.14</b></li>
+
+        <li><b>yyyy.MM.dd HH:mm</b> memberikan hasil <b>2005.09.14
+        17:45</b></li>
+    </ul>
+</body>
+</html>
diff --git a/src/help/in/jgoodies.html b/src/help/in/jgoodies.html
index 4170aab..7c15cb4 100644
--- a/src/help/in/jgoodies.html
+++ b/src/help/in/jgoodies.html
@@ -1,46 +1,46 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>JGoodies</h1>
-
-    Copyright (c) 2003 JGoodies Karsten Lentzsch. All Rights
-    Reserved. 
-
-    <p>Redistribution and use in source and binary forms, with or
-    without modification, are permitted provided that the following
-    conditions are met:</p>
-
-    <ul>
-        <li>Redistributions of source code must retain the above
-        copyright notice, this list of conditions and the following
-        disclaimer.</li>
-
-        <li>Redistributions in binary form must reproduce the above
-        copyright notice, this list of conditions and the following
-        disclaimer in the documentation and/or other materials
-        provided with the distribution.</li>
-
-        <li>Neither the name of JGoodies Karsten Lentzsch nor the
-        names of its contributors may be used to endorse or promote
-        products derived from this software without specific prior
-        written permission.</li>
-    </ul>
-
-    <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-    CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
-    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-    EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>JGoodies</h1>
+
+    Copyright (c) 2003 JGoodies Karsten Lentzsch. All Rights
+    Reserved. 
+
+    <p>Redistribution and use in source and binary forms, with or
+    without modification, are permitted provided that the following
+    conditions are met:</p>
+
+    <ul>
+        <li>Redistributions of source code must retain the above
+        copyright notice, this list of conditions and the following
+        disclaimer.</li>
+
+        <li>Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials
+        provided with the distribution.</li>
+
+        <li>Neither the name of JGoodies Karsten Lentzsch nor the
+        names of its contributors may be used to endorse or promote
+        products derived from this software without specific prior
+        written permission.</li>
+    </ul>
+
+    <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+    CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+    EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
+</body>
+</html>
diff --git a/src/help/ja/ACMPortalHelp.html b/src/help/ja/ACMPortalHelp.html
index b0fc78a..66e5f21 100644
--- a/src/help/ja/ACMPortalHelp.html
+++ b/src/help/ja/ACMPortalHelp.html
@@ -1,25 +1,25 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1>ACM Portalの検索</h1>
-
-    <p>ACM Portalには二つのデータベースがあります。そのうちの一つ、ACMデジタルライブラリは、50年以上のアーカイブを含む、ACMから出版された論文すべての全文収録コレクションであり、Guide to Computing Literatureは、コンピューティングに関わる主要な出版社からの文献コレクションで、100万以上の項目があります。</p>
-
-    <p>JabRefは、ACM Portalデータベースから文献情報をダウンロードすることができます。この機能を使うには、<b>ウェブ検索→ACMPortalを検索</b>を選択してください。すると検索インタフェースが側面に表示されるようになります。</p>
-
-    <p>検索を始めるには、問い合わせる単語を入力し、<b>Enter</b>鍵を押すか<b>取得</b>ボタンを押してください。</p>
-
-    <p>どのデータベースを検索するかを選択することができるほか、<b>概要を取り込む</b>というチェックボックスを有効にすれば、各項目の文献情報に加えて要約もダウンロードすることを選ぶことができます。</p>
-
-    <p>ACM Portalウェブサイトに過度な負荷をかけることを防ぐために、与えられた数以上の項目をダウンロードすることは、JabRefによって拒否されます。</p>
-
-    <p>この点に関して、ACM Portalに頻繁に接続すると、お使いのIPアドレスが数時間アクセス不能になります。そこで、JabRefは、各接続の間に5秒間待機しますので、ダウンロード手順は非常に遅くなります。</p>
-
-    <p>何かご提案がありましたら、Aaron Chen <b>nextAaron at gmail.com</b>にメールを送ってください。</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+    <h1>ACM Portalの検索</h1>
+
+    <p>ACM Portalには二つのデータベースがあります。そのうちの一つ、ACMデジタルライブラリは、50年以上のアーカイブを含む、ACMから出版された論文すべての全文収録コレクションであり、Guide to Computing Literatureは、コンピューティングに関わる主要な出版社からの文献コレクションで、100万以上の項目があります。</p>
+
+    <p>JabRefは、ACM Portalデータベースから文献情報をダウンロードすることができます。この機能を使うには、<b>ウェブ検索→ACMPortalを検索</b>を選択してください。すると検索インタフェースが側面に表示されるようになります。</p>
+
+    <p>検索を始めるには、問い合わせる単語を入力し、<b>Enter</b>鍵を押すか<b>取得</b>ボタンを押してください。</p>
+
+    <p>どのデータベースを検索するかを選択することができるほか、<b>概要を取り込む</b>というチェックボックスを有効にすれば、各項目の文献情報に加えて要約もダウンロードすることを選ぶことができます。</p>
+
+    <p>ACM Portalウェブサイトに過度な負荷をかけることを防ぐために、与えられた数以上の項目をダウンロードすることは、JabRefによって拒否されます。</p>
+
+    <p>この点に関して、ACM Portalに頻繁に接続すると、お使いのIPアドレスが数時間アクセス不能になります。そこで、JabRefは、各接続の間に5秒間待機しますので、ダウンロード手順は非常に遅くなります。</p>
+
+    <p>何かご提案がありましたら、Aaron Chen <b>nextAaron at gmail.com</b>にメールを送ってください。</p>
+</body>
+</html>
diff --git a/src/help/ja/About.html b/src/help/ja/About.html
old mode 100755
new mode 100644
index 5d9e966..059574d
--- a/src/help/ja/About.html
+++ b/src/help/ja/About.html
@@ -1,110 +1,110 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body id="aboutpage">
-        <h1>JabRef 第 @version@ 版</h1>
-
-        <div id="logo">
-        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
-        </div>
-
-        <p>JabRefは、GNU <a href="License.html">General Public License</a>, version 2の下で自由に配布可能です。</p>
-
-        <h2>開発者:</h2>
-
-        <p>Morten O. Alver,
-        Nizar N. Batada,
-        Michel Baylac,
-        Kolja Brix,
-        Guillaume Gardey,
-        Oscar Gustafsson,
-        Cyrille d'Haese,
-        Oliver Kopp,
-        S M Mahbub Murshed,
-        Raik Nagel,
-        Christopher Oezbek,
-        Ellen Reitmayr,
-        Gert Renckens,
-        Andreas Rudert,
-        Michael Spiegel,
-        Ulrik Stervbo,
-        Joerg K. Wegner,
-        Michael Wrighton,
-        Egon Willighagen,
-        Jörg Zieren</p>
-
-        <h2>貢献者:</h2>
-
-        <p>Thomas Arildsen,
-        Michael Beckmann,
-        Oliver Beckmann,
-        Fedor Bezrukov,
-        Fabian Bieker,
-        Aaron Chen,
-        Fabrice Dessaint,
-        Nathan Dunn,
-        E. Hakan Duran,
-        Brian Van Essen,
-        Alexis Gallagher,
-        David Gleich,
-        Sascha Hunold,
-        Bernd Kalbfuss,
-        Martin Kähmer,
-        Ervin Kolenovic,
-        Krzysztof A. Kościuszkiewicz,
-        Christian Kopf,
-        Felix Langner,
-        Stephan Lau,
-        Jeffrey Kuhn,
-        Uwe Kuehn,
-        Alex Montgomery,
-        Saverio Mori,
-        Ambrogio Oliva,
-        Stephan Rave,
-        John Relph,
-        Hannes Restel,
-        Moritz Ringler,
-        Andreas Rudert,
-        Mark Schenk,
-        Rudolf Seemann,
-        Toralf Senger,
-        Manuel Siebeneicher,
-        Mike Smoot,
-        Ulrich Stärk,
-        Martin Stolle,
-        David Weitzman,
-        Seb Wills,
-        Koji Yokota,
-        John Zedlewski,
-        Waluyo Adi Siswanto</p>
-
-        <h2>以下の方々に感謝します:</h2>
-
-        <p>Samin Muhammad Ridwanul Karim,
-        Stefan Robert</p>
-
-        <h2>使用しているサードパーティ・ソフトウェア:</h2>
-
-        <p>JabRefは、JGoodies (<code>http://www.jgoodies.com</code>) がBSDライセンス (詳細については<code>http://www.opensource.org/licenses/bsd-license.html</code>を参照) の下で配布しているJGoodies Looks およびJGoodies Forms を使用しています。</p>
-
-        <p>また、<a href="../jgoodies.html">これらの条件</a>で配布されているKarsten Lentzschによる二つのクラス (SimpleInternalFrameおよびUIFSplitPane) も含まれています。</p>
-
-        <p>コマンドラインオプションは、RitOpt (<code>http://ritopt.sourceforge.net</code>) を使用して解析しています。RitOptは、GNU <a href="License.html">General Public License</a>, version 2の下で配布されています。</p>
-
-        <p>JabRefは、検索文字列の解釈にANTLR解析生成子を使用しています。ANTLRはパブリックドメイン・ソフトウェアです。ライセンス条項については、<code>http://www.antlr.org/license.html</code>をご覧ください。</p>
-
-        <p>JabRefは、表の表示とフィルタリングにGlazed Listsライブラリ (<code>http://publicobject.com/glazedlists</code>) を使用しています。これはLesser General Public Licenseの下で配布されています。</p>
-
-        <p>JabRefは、スレッディングライブラリSpin も使用しており、これはLesser General Public Licenseの下で配布されています。</p>
-
-        <p>Microbaライブラリ由来のいくつかのGUIコンポーネントが使用されており、これはBSDスタイルライセンスの下でライセンスされています。詳しい情報については<code>http://sourceforge.net/projects/microba/</code>をご覧ください。</p>
-
-        <p>大半のアイコンは、Everaldo (<code>http://www.everaldo.com</code>) によるCrystal Clearから採られています。これはLesser General Public Licenseの下で配布されています。</p>
-
-        <p>JabRefは、PDF取扱のために、JempBoxおよびPDFBoxライブラリを使用しています。両者ともBSDスタイルライセンスの下で配布されています。
-		</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body id="aboutpage">
+        <h1>JabRef 第 @version@ 版</h1>
+
+        <div id="logo">
+        <img src="../../images/JabRef-icon-48.png" alt="JabRef logo"/><br/>© 2003- at year@
+        </div>
+
+        <p>JabRefは、GNU <a href="License.html">General Public License</a>, version 2の下で自由に配布可能です。</p>
+
+        <h2>開発者:</h2>
+
+        <p>Morten O. Alver,
+        Nizar N. Batada,
+        Michel Baylac,
+        Kolja Brix,
+        Guillaume Gardey,
+        Oscar Gustafsson,
+        Cyrille d'Haese,
+        Oliver Kopp,
+        S M Mahbub Murshed,
+        Raik Nagel,
+        Christopher Oezbek,
+        Ellen Reitmayr,
+        Gert Renckens,
+        Andreas Rudert,
+        Michael Spiegel,
+        Ulrik Stervbo,
+        Joerg K. Wegner,
+        Michael Wrighton,
+        Egon Willighagen,
+        Jörg Zieren</p>
+
+        <h2>貢献者:</h2>
+
+        <p>Thomas Arildsen,
+        Michael Beckmann,
+        Oliver Beckmann,
+        Fedor Bezrukov,
+        Fabian Bieker,
+        Aaron Chen,
+        Fabrice Dessaint,
+        Nathan Dunn,
+        E. Hakan Duran,
+        Brian Van Essen,
+        Alexis Gallagher,
+        David Gleich,
+        Sascha Hunold,
+        Bernd Kalbfuss,
+        Martin Kähmer,
+        Ervin Kolenovic,
+        Krzysztof A. Kościuszkiewicz,
+        Christian Kopf,
+        Felix Langner,
+        Stephan Lau,
+        Jeffrey Kuhn,
+        Uwe Kuehn,
+        Alex Montgomery,
+        Saverio Mori,
+        Ambrogio Oliva,
+        Stephan Rave,
+        John Relph,
+        Hannes Restel,
+        Moritz Ringler,
+        Andreas Rudert,
+        Mark Schenk,
+        Rudolf Seemann,
+        Toralf Senger,
+        Manuel Siebeneicher,
+        Mike Smoot,
+        Ulrich Stärk,
+        Martin Stolle,
+        David Weitzman,
+        Seb Wills,
+        Koji Yokota,
+        John Zedlewski,
+        Waluyo Adi Siswanto</p>
+
+        <h2>以下の方々に感謝します:</h2>
+
+        <p>Samin Muhammad Ridwanul Karim,
+        Stefan Robert</p>
+
+        <h2>使用しているサードパーティ・ソフトウェア:</h2>
+
+        <p>JabRefは、JGoodies (<code>http://www.jgoodies.com</code>) がBSDライセンス (詳細については<code>http://www.opensource.org/licenses/bsd-license.html</code>を参照) の下で配布しているJGoodies Looks およびJGoodies Forms を使用しています。</p>
+
+        <p>また、<a href="../jgoodies.html">これらの条件</a>で配布されているKarsten Lentzschによる二つのクラス (SimpleInternalFrameおよびUIFSplitPane) も含まれています。</p>
+
+        <p>コマンドラインオプションは、RitOpt (<code>http://ritopt.sourceforge.net</code>) を使用して解析しています。RitOptは、GNU <a href="License.html">General Public License</a>, version 2の下で配布されています。</p>
+
+        <p>JabRefは、検索文字列の解釈にANTLR解析生成子を使用しています。ANTLRはパブリックドメイン・ソフトウェアです。ライセンス条項については、<code>http://www.antlr.org/license.html</code>をご覧ください。</p>
+
+        <p>JabRefは、表の表示とフィルタリングにGlazed Listsライブラリ (<code>http://publicobject.com/glazedlists</code>) を使用しています。これはLesser General Public Licenseの下で配布されています。</p>
+
+        <p>JabRefは、スレッディングライブラリSpin も使用しており、これはLesser General Public Licenseの下で配布されています。</p>
+
+        <p>Microbaライブラリ由来のいくつかのGUIコンポーネントが使用されており、これはBSDスタイルライセンスの下でライセンスされています。詳しい情報については<code>http://sourceforge.net/projects/microba/</code>をご覧ください。</p>
+
+        <p>大半のアイコンは、Everaldo (<code>http://www.everaldo.com</code>) によるCrystal Clearから採られています。これはLesser General Public Licenseの下で配布されています。</p>
+
+        <p>JabRefは、PDF取扱のために、JempBoxおよびPDFBoxライブラリを使用しています。両者ともBSDスタイルライセンスの下で配布されています。
+		</p>
+</body>
+</html>
diff --git a/src/help/ja/Autosave.html b/src/help/ja/Autosave.html
index e1066bd..a555b30 100644
--- a/src/help/ja/Autosave.html
+++ b/src/help/ja/Autosave.html
@@ -1,14 +1,14 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-    <h1>自動保存</h1>
-
-    <p>自動保存機能は、お使いのコンピューターやJabRefがクラッシュした場合に、データが失われることを回避するのに役立ちます。自動保存が有効になっている場合には、JabRefは、最後に保存されてからお使いのデータベースが変更されたかどうかを、定期的に(間隔は設定可能)点検します。各データベースについて、JabRefはそのコピーを<code>.$[ファイル]$</code>という名称のファイルに保存します。ここで<code>[ファイル]</code>は該当するデータベースのファイル名です。自動保存ファイルは、bibファイルと同じディレクトリに作られます。</p>
-    <p>自動保存ファイルは、能動的にデータベースを保存したときやJabRefを正常に終了したときには削除されます。しかしながら、JabRefがクラッシュによって終了した場合には、自動保存ファイルは残されたままになります。この場合には、次にデータベースを開こうとした際に自動保存ファイルが検出され、データベースを自動保存ファイルから回復するかどうか尋ねられます。</p>
-    <p>自動保存は、既定では有効にされており、5分ごとに保存されます。望むならば、自動保存を使用する前に尋ねるオプションを無効にすることができます。この場合には、JabRefは、通知することなく静かにデータベースを回復します。</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+    <h1>自動保存</h1>
+
+    <p>自動保存機能は、お使いのコンピューターやJabRefがクラッシュした場合に、データが失われることを回避するのに役立ちます。自動保存が有効になっている場合には、JabRefは、最後に保存されてからお使いのデータベースが変更されたかどうかを、定期的に(間隔は設定可能)点検します。各データベースについて、JabRefはそのコピーを<code>.$[ファイル]$</code>という名称のファイルに保存します。ここで<code>[ファイル]</code>は該当するデータベースのファイル名です。自動保存ファイルは、bibファイルと同じディレクトリに作られます。</p>
+    <p>自動保存ファイルは、能動的にデータベースを保存したときやJabRefを正常に終了したときには削除されます。しかしながら、JabRefがクラッシュによって終了した場合には、自動保存ファイルは残されたままになります。この場合には、次にデータベースを開こうとした際に自動保存ファイルが検出され、データベースを自動保存ファイルから回復するかどうか尋ねられます。</p>
+    <p>自動保存は、既定では有効にされており、5分ごとに保存されます。望むならば、自動保存を使用する前に尋ねるオプションを無効にすることができます。この場合には、JabRefは、通知することなく静かにデータベースを回復します。</p>
+</body>
+</html>
diff --git a/src/help/ja/BaseFrameHelp.html b/src/help/ja/BaseFrameHelp.html
old mode 100755
new mode 100644
index b897b82..506dba3
--- a/src/help/ja/BaseFrameHelp.html
+++ b/src/help/ja/BaseFrameHelp.html
@@ -1,60 +1,60 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1>JabRef 基本ウィンドウ</h1>
-
-    <p><b>《註》</b>以下に言及されているメニューアクションのほとんどには、短絡キーがあり、多くはツールバーからも使用できます。短絡キーは、プルダウンメニューに表示されます。</p>
-
-    <p>これは基本ウィンドウであり、ここからあなたのデータベースを操作します。メニューバーとツールバーの下には、タブ付きのパネルがあり、各パネルが現在開いているデータベースの各々に対応しています。これらのパネルの一つを選択すると、表が表われて、データベース全項目のうち主要なフィールド(表示フィールドは設定可能)が表示されます。</p>
-
-    <ul>
-        <li>表中どのフィールドを表示するかを選ぶには、見たいフィールドを<strong>設定</strong>ダイアログの中でチェックします。</li>
-
-        <li>項目の内容を編集するには、表中の行をダブルクリックしてください。表内部は矢印キーで移動することができます。</li>
-
-	<li>表は、あなたの選択したフィールド群を使って整序されます。既定の整序順は、<strong>設定→項目表</strong>で設定することができますが、もっと間便に順序を変えるには、適切な列のヘッダをクリックすれば、それが第一の整序基準に据えられるか、仮に既にそうなっている場合には整序順が反転されます。もう一度クリックすれば、そのコラムが整序基準から外されます。列を第二の整序基準に加えたり、その整序順を反転させたり、あるいは基準から外したりする場合には、<b>コントロール</b>キーを押しながら、列をクリックしてください。第二の整序基準は、いくつでも追加できますが、次回JabRefを起動したときに保存されているのは、第三レベルまでです。</li>
-
-	<li>各列の幅を調整するには、各列ヘッダ間の境界をドラッグしてください。</li>
-
-	<li>色コードは、<strong>設定</strong>ダイアログの中で入切することができ、以下のようにセルを色づけすることによって、お使いのデータベースの完全性を維持するために視覚化することができます。
-
-	<ul>
-	  <li>最左列の<span style="color: red">赤色</span>セルは、その項目が不完全であることを示します。</li>
-
-	  <li>最左列の<span style="color: #909000">黄色</span>セルは、それ自身で全必須フィールドを定義しておらず、内部参照が使用されていることを示します。</li>
-
-	  <li><span style="color: blue">青色</span>セルは、必須フィールドを示します。</li>
-
-	  <li><span style="color: green">緑色</span>セルは、非必須フィールドを示します。</li>
-
-	  <li>色づけされていないセルは、<em>bibtex</em>プログラムが、この型の項目用にこのフィールドを使用していないことを示します。このフィールドは、JabRef中では編集することができます。</li>
-	</ul>
-      </li>
-    </ul>
-
-    <h2>項目を新しく追加するには</h2>
-
-    <p>項目を新しく追加するには、いくつかの方法があります。<strong>新規項目</strong>メニューを選ぶと、ダイアログが表示されて、一覧から項目型を選択することができます。このダイアログを飛ばすためには、各項目型に対応したメニューがあり、良く使用されるほとんどの型については短絡キーもあります。</p>
-
-    <p>新しい項目が追加されると、既定ではその項目の<a href="EntryEditorHelp.html">項目エディタ</a>が開きます。この挙動は、<strong>設定</strong>ダイアログの中で切り替えることができます。</p>
-
-    <p><b>《註》</b>もっともよく使う項目型の短絡キーを覚えておくことを、つよくお勧めします。たとえば、<em>article</em>型項目を追加するのはCTRL-SHIFT-Aです。</p>
-
-    <h2>項目の編集</h2>
-
-    <p>既存の項目の<a href="EntryEditorHelp.html">項目エディタ</a>を開くには、適切な行のどこでもいいのでダブルクリックするか、項目を選択してENTERキーを押してください。</p>
-
-    <h2>フィールド中で<em>bibtex</em>文字列を参照するには</h2>
-
-    <p>JabRefでは、全フィールドの中身は、テキストエディタ中で書くのと同じようにそのまま書くことができますが、一つだけ例外があります。文字列を参照するには、<br />
-      「#jan# 1997」<br />
-    のように、文字列名を#で囲んでください。こうすると、文字列名「jan」の後に「 1997」が続いているものと解釈されます。</p>
-
-    <p><a href="StringEditorHelp.html">文字列エディタ</a>もご参照ください。</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+    <h1>JabRef 基本ウィンドウ</h1>
+
+    <p><b>《註》</b>以下に言及されているメニューアクションのほとんどには、短絡キーがあり、多くはツールバーからも使用できます。短絡キーは、プルダウンメニューに表示されます。</p>
+
+    <p>これは基本ウィンドウであり、ここからあなたのデータベースを操作します。メニューバーとツールバーの下には、タブ付きのパネルがあり、各パネルが現在開いているデータベースの各々に対応しています。これらのパネルの一つを選択すると、表が表われて、データベース全項目のうち主要なフィールド(表示フィールドは設定可能)が表示されます。</p>
+
+    <ul>
+        <li>表中どのフィールドを表示するかを選ぶには、見たいフィールドを<strong>設定</strong>ダイアログの中でチェックします。</li>
+
+        <li>項目の内容を編集するには、表中の行をダブルクリックしてください。表内部は矢印キーで移動することができます。</li>
+
+	<li>表は、あなたの選択したフィールド群を使って整序されます。既定の整序順は、<strong>設定→項目表</strong>で設定することができますが、もっと間便に順序を変えるには、適切な列のヘッダをクリックすれば、それが第一の整序基準に据えられるか、仮に既にそうなっている場合には整序順が反転されます。もう一度クリックすれば、そのコラムが整序基準から外されます。列を第二の整序基準に加えたり、その整序順を反転させたり、あるいは基準から外したりする場合には、<b>コントロール</b>キーを押しながら、列をクリックしてください。第二の整序基準は、いくつでも追加できますが、次回JabRefを起動したときに保存されているのは、第三レベルまでです。</li>
+
+	<li>各列の幅を調整するには、各列ヘッダ間の境界をドラッグしてください。</li>
+
+	<li>色コードは、<strong>設定</strong>ダイアログの中で入切することができ、以下のようにセルを色づけすることによって、お使いのデータベースの完全性を維持するために視覚化することができます。
+
+	<ul>
+	  <li>最左列の<span style="color: red">赤色</span>セルは、その項目が不完全であることを示します。</li>
+
+	  <li>最左列の<span style="color: #909000">黄色</span>セルは、それ自身で全必須フィールドを定義しておらず、内部参照が使用されていることを示します。</li>
+
+	  <li><span style="color: blue">青色</span>セルは、必須フィールドを示します。</li>
+
+	  <li><span style="color: green">緑色</span>セルは、非必須フィールドを示します。</li>
+
+	  <li>色づけされていないセルは、<em>bibtex</em>プログラムが、この型の項目用にこのフィールドを使用していないことを示します。このフィールドは、JabRef中では編集することができます。</li>
+	</ul>
+      </li>
+    </ul>
+
+    <h2>項目を新しく追加するには</h2>
+
+    <p>項目を新しく追加するには、いくつかの方法があります。<strong>新規項目</strong>メニューを選ぶと、ダイアログが表示されて、一覧から項目型を選択することができます。このダイアログを飛ばすためには、各項目型に対応したメニューがあり、良く使用されるほとんどの型については短絡キーもあります。</p>
+
+    <p>新しい項目が追加されると、既定ではその項目の<a href="EntryEditorHelp.html">項目エディタ</a>が開きます。この挙動は、<strong>設定</strong>ダイアログの中で切り替えることができます。</p>
+
+    <p><b>《註》</b>もっともよく使う項目型の短絡キーを覚えておくことを、つよくお勧めします。たとえば、<em>article</em>型項目を追加するのはCTRL-SHIFT-Aです。</p>
+
+    <h2>項目の編集</h2>
+
+    <p>既存の項目の<a href="EntryEditorHelp.html">項目エディタ</a>を開くには、適切な行のどこでもいいのでダブルクリックするか、項目を選択してENTERキーを押してください。</p>
+
+    <h2>フィールド中で<em>bibtex</em>文字列を参照するには</h2>
+
+    <p>JabRefでは、全フィールドの中身は、テキストエディタ中で書くのと同じようにそのまま書くことができますが、一つだけ例外があります。文字列を参照するには、<br />
+      「#jan# 1997」<br />
+    のように、文字列名を#で囲んでください。こうすると、文字列名「jan」の後に「 1997」が続いているものと解釈されます。</p>
+
+    <p><a href="StringEditorHelp.html">文字列エディタ</a>もご参照ください。</p>
+</body>
+</html>
diff --git a/src/help/ja/BibtexHelp.html b/src/help/ja/BibtexHelp.html
old mode 100755
new mode 100644
index fab3a60..064b384
--- a/src/help/ja/BibtexHelp.html
+++ b/src/help/ja/BibtexHelp.html
@@ -1,162 +1,162 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1><em>bibtex</em> について</h1>
-
-    <p>JabRefは、あなたが<em>bibtex</em>データベースの作業をする手助けをしますが、それでも依然として、お使いのデータベースが、正しく確実に<em>bibtex</em>プログラムによって取り扱われるようにするためには、項目編集にあたって頭においておかなくてはならない規則があります。</p>
-
-    <h2><em>Bibtex</em> フィールド</h2>
-
-    <p><em>bibtex</em>には多くのフィールドがあるほか、JabRef特有のフィールドもあります。</p>
-
-    <p>一般に、テキストを含むフィールド内部では、LaTeXコマンドを使用することができます。<em>Bibtex</em>は、自動的にあなたの文献一覧を整形し、一覧に含まれているフィールドは、文献目録様式にしたがって、自動的に大文字や小文字に変換されます。特定の文字が確実に大文字のままで残されるようにするためには、{B}elgiumのように、その文字を波括弧で囲んでください。</p>
-
-    <p>一部のフィールド型に関する注釈:</p>
-
-    <ul>
-        <li><strong style="font-style: italic;">Bibtexkey</strong> LaTeX文書中で、この項目を参照するために使われる固有文字列。LaTeXから項目を参照する際、キーは大文字小文字の区別を含め、参照文字列と一致していなくてはならないことに注意してください。<br /><br /></li>
-
-        <li><strong>address<br /></strong> 通常は、<tt>publisher</tt>あるいは他の型の団体の住所を示します。van Leunenによれば、主要な出版社に関しては、この情報を空欄にしておくことが推奨されます。一方、小さな出版社については、完全なアドレスを提供することによって読者を助けることができるでしょう。</li>
-
-        <li><strong>annote<br /></strong> 注釈。標準の文献目録様式では使用されませんが、注釈付きの文献目録を出力する一部の様式では使用されることがあります。 </li>
-
-        <li><strong>author<br /></strong> このフィールドは、当該項目の著者全員のリストを入れます。氏名は、3名以上の著者がいる場合でも<em>and</em>という単語で区切ります。それぞれの氏名は、以下の二つの書き方で書くことができます。<br/>
-         Donald E. Knuth <em>または</em> Knuth, Donald E.<br />
-         Eddie van Halen <em>または</em> van Halen, Eddie<br />
-	2つ以上の名前からなる著者には、ミドルネームや姓と区別するために、後者の形を使用しなくてはなりません。<br />
-        <br /></li>
-
-        <li><strong>booktitle<br /></strong> 内容の一部が引用されている場合の書籍のタイトル。book項目の場合には、これではなく<tt>title</tt>フィールドを使用してください。</li>
-
-        <li><strong>chapter<br /></strong> 章 (または節などの)番号</li>
-
-        <li><strong>crossref<br /></strong> 相互参照している項目のデータベースキー。</li>
-
-        <li><strong>edition<br /></strong> 書籍の版--例えば「Second」。これは、ここに示されているように第1文字を大文字にした序数でなくてはなりません。標準的な様式では、必要に応じて小文字に変換されます。</li>
-
-        <li><strong>editor<br /></strong> このフィールドは<em>author</em>フィールドに類似のものです。<tt>author</tt>フィールドもある場合、<tt>editor</tt>フィールドは、参照文献の現れる書籍やコレクションの編集者を示します。</li>
-
-        <li><strong>howpublished<br /></strong> 変わった経緯を持つ文献がどのように出版されたかを示します。最初の文字は大文字にしなくてはなりません。</li>
-
-        <li><strong>institution<br /></strong> テクニカルレポートを提供している団体。</li>
-
-        <li><strong>journal<br /></strong> 学術誌名。学術誌名は、「文字列」を使用して短縮することができます。この文字列を定義するには、<a href="StringEditorHelp.html">文字列エディタ</a>を使用してください。</li>
-
-        <li><strong>key<br /></strong> 「author」情報が欠けているときに、アルファベット順の整序や相互参照、ラベルの作成に使用されます。このフィールドを、<code>\cite</code>コマンドに現れるキーやデータベース項目の最初のキーと混同しないようにしてください。</li>
-
-        <li><strong>month<br /></strong> 著作が発行された月、または未刊行著作の場合にはそれが書かれた月。標準的な3文字短縮形を使用してください (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec)。</li>
-
-        <li><strong>note<br /></strong> 読者の助けとなる任意の追加情報。最初の文字は大文字にしてください。</li>
-
-        <li><strong>number</strong><br />
-	学術誌・雑誌・テクニカルレポートまたはシリーズ中の著作の号。学術誌や雑誌刊行物は、通常、巻と号とで識別されます。テクニカルレポートを発行する団体は、通常、号を付与します。また、シリーズものの書籍にも号が振られることがあります。</li>
-
-        <li><strong>organization<br /></strong> コンファレンスの主催団体やマニュアルの発行元団体。</li>
-
-        <li><strong>pages<br /></strong> <tt>42-111</tt>や<tt>7,41,73-97</tt>や<tt>43+</tt>のように表記される(最後の例における「<tt>+</tt>」はそのページに続く範囲が単純な範囲ではないことを示します)、ページ数あるいはページ数の範囲。<em>Scribe</em>互換のデータベースを維持することが簡単になるように、標準的な様式は、単一のダッシュ(例: <tt>7-33</tt>)を、TeX中でのページ範囲の表記のように複数ダッシュ(例: <tt>7--33</tt>)に変換します。</li>
-
-        <li><strong>publisher<br /></strong> 出版社名。</li>
-
-        <li><strong>school<br /></strong> 論文の執筆された学校名。</li>
-
-        <li><strong>series<br /></strong> シリーズまたは全集の名称。書籍全体を引用する際には、<tt>title</tt>フィールドがそのタイトルを与え、非必須フィールドの<tt>series</tt>が、その本が刊行されたシリーズ名ないし複数巻書籍の名称を与えます。</li>
-
-        <li><strong>title<br /></strong> 著作のタイトル。大文字化は、文献目録様式と使用される言語とに依存します。大文字にしなくてはならない単語(固有名詞など)については、その単語(ないし最初の文字)を波括弧で囲んでください。</li>
-
-        <li><strong>type<br /></strong> テクニカルレポートの型。例えば「Research Note」。</li>
-
-        <li><strong>volume<br /></strong> 学術誌ないし複数巻書籍の巻。</li>
-
-        <li><strong>year<br /></strong> 発行年、あるいは未発行の著作に関しては執筆年。一般には、<tt>1984</tt>のような4桁数字を含んでいなくてはなりません。しかしながら、標準的な様式は、「(about 1984)」のように最後の非句読点文字4つが数字であるものならば、どのような<tt>year</tt>も取扱可能です。このフィールドは、ほとんどの項目型で必須です。</li>
-    </ul><br />
-
-
-    <h2>他のフィールド</h2>
-
-    <p>BibTeXは非常にポピュラーであり、多くの人々が情報を保管するために使用しています。以下は、よく使われるフィールドの一部を挙げたものです。</p>
-
-    <ul>
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        affiliation*</span><br /></strong> 著者の所属<br />
-        <br /></li>
-
-        <li><strong>abstract<br /></strong> 著作の要約<br />
-        <br /></li>
-
-        <li><strong>doi<br /></strong> デジタルオブジェクト識別子 (Digital Object Identifier)。文書に振られた恒久的識別子。<br />
-        <br /></li>
-
-        <li><strong>eid<br /></strong> 電子識別子 (electronic identifier) は、印刷もされている電子ジャーナルのためのものです。この番号はページ数の代わりであり、印刷された刊行物で論文を見つけるのに用いられます。これは、<em>citation number</em>とも呼ばれています。<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        contents*</span><br /></strong> 目次<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        copyright*</span><br /></strong> 著作権情報<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        ISBN*</span><br /></strong> 国際標準図書番号 (International Standard Book Number)<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        ISSN*</span><br /></strong> 国際標準逐次刊行物番号 (International Standard Serial Number)。学術誌を特定するのに使用されます。<br />
-        <br /></li>
-
-        <li><strong>keywords<br /></strong> 検索やときに注釈に使われるキーワード<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        language*</span><br /></strong> 文書で使用されている言語<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        location*</span><br /></strong> コンファレンスの開催された都市など、項目に関連した場所。<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        LCCN*</span><br /></strong> 米国議会図書館管理番号 (Library of Congress Control Number)。<tt>lib-congress</tt>と表記することもあるようです。<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        mrnumber*</span><br /></strong> <i>Mathematical Reviews</i>番号<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        price*</span><br /></strong> 文書の価格<br />
-        <br /></li>
-
-        <li>
-        <strong><span style="font-weight: normal; font-style: italic;">
-        size*</span><br /></strong> 著作物の物理的な寸法<br />
-        <br /></li>
-
-        <li><strong>URL<br /></strong> 参照されている項目を指し示すWWWユニフォームリソースロケータ。これは、テクニカルレポートにおいて、レポートのPostScriptソースのあるFTPサイトを指し示すのによく使用されます。</li>
-    </ul>
-
-    <h3>JuraBib</h3>
-
-    <ul>
-        <li><strong>urldate<br /></strong> 最後にページを訪れた日付。</li>
-    </ul><br />
-     *) は、JabRefによって直接サポートされていません。<br />
-     <br />
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+    <h1><em>bibtex</em> について</h1>
+
+    <p>JabRefは、あなたが<em>bibtex</em>データベースの作業をする手助けをしますが、それでも依然として、お使いのデータベースが、正しく確実に<em>bibtex</em>プログラムによって取り扱われるようにするためには、項目編集にあたって頭においておかなくてはならない規則があります。</p>
+
+    <h2><em>Bibtex</em> フィールド</h2>
+
+    <p><em>bibtex</em>には多くのフィールドがあるほか、JabRef特有のフィールドもあります。</p>
+
+    <p>一般に、テキストを含むフィールド内部では、LaTeXコマンドを使用することができます。<em>Bibtex</em>は、自動的にあなたの文献一覧を整形し、一覧に含まれているフィールドは、文献目録様式にしたがって、自動的に大文字や小文字に変換されます。特定の文字が確実に大文字のままで残されるようにするためには、{B}elgiumのように、その文字を波括弧で囲んでください。</p>
+
+    <p>一部のフィールド型に関する注釈:</p>
+
+    <ul>
+        <li><strong style="font-style: italic;">Bibtexkey</strong> LaTeX文書中で、この項目を参照するために使われる固有文字列。LaTeXから項目を参照する際、キーは大文字小文字の区別を含め、参照文字列と一致していなくてはならないことに注意してください。<br /><br /></li>
+
+        <li><strong>address<br /></strong> 通常は、<tt>publisher</tt>あるいは他の型の団体の住所を示します。van Leunenによれば、主要な出版社に関しては、この情報を空欄にしておくことが推奨されます。一方、小さな出版社については、完全なアドレスを提供することによって読者を助けることができるでしょう。</li>
+
+        <li><strong>annote<br /></strong> 注釈。標準の文献目録様式では使用されませんが、注釈付きの文献目録を出力する一部の様式では使用されることがあります。 </li>
+
+        <li><strong>author<br /></strong> このフィールドは、当該項目の著者全員のリストを入れます。氏名は、3名以上の著者がいる場合でも<em>and</em>という単語で区切ります。それぞれの氏名は、以下の二つの書き方で書くことができます。<br/>
+         Donald E. Knuth <em>または</em> Knuth, Donald E.<br />
+         Eddie van Halen <em>または</em> van Halen, Eddie<br />
+	2つ以上の名前からなる著者には、ミドルネームや姓と区別するために、後者の形を使用しなくてはなりません。<br />
+        <br /></li>
+
+        <li><strong>booktitle<br /></strong> 内容の一部が引用されている場合の書籍のタイトル。book項目の場合には、これではなく<tt>title</tt>フィールドを使用してください。</li>
+
+        <li><strong>chapter<br /></strong> 章 (または節などの)番号</li>
+
+        <li><strong>crossref<br /></strong> 相互参照している項目のデータベースキー。</li>
+
+        <li><strong>edition<br /></strong> 書籍の版--例えば「Second」。これは、ここに示されているように第1文字を大文字にした序数でなくてはなりません。標準的な様式では、必要に応じて小文字に変換されます。</li>
+
+        <li><strong>editor<br /></strong> このフィールドは<em>author</em>フィールドに類似のものです。<tt>author</tt>フィールドもある場合、<tt>editor</tt>フィールドは、参照文献の現れる書籍やコレクションの編集者を示します。</li>
+
+        <li><strong>howpublished<br /></strong> 変わった経緯を持つ文献がどのように出版されたかを示します。最初の文字は大文字にしなくてはなりません。</li>
+
+        <li><strong>institution<br /></strong> テクニカルレポートを提供している団体。</li>
+
+        <li><strong>journal<br /></strong> 学術誌名。学術誌名は、「文字列」を使用して短縮することができます。この文字列を定義するには、<a href="StringEditorHelp.html">文字列エディタ</a>を使用してください。</li>
+
+        <li><strong>key<br /></strong> 「author」情報が欠けているときに、アルファベット順の整序や相互参照、ラベルの作成に使用されます。このフィールドを、<code>\cite</code>コマンドに現れるキーやデータベース項目の最初のキーと混同しないようにしてください。</li>
+
+        <li><strong>month<br /></strong> 著作が発行された月、または未刊行著作の場合にはそれが書かれた月。標準的な3文字短縮形を使用してください (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec)。</li>
+
+        <li><strong>note<br /></strong> 読者の助けとなる任意の追加情報。最初の文字は大文字にしてください。</li>
+
+        <li><strong>number</strong><br />
+	学術誌・雑誌・テクニカルレポートまたはシリーズ中の著作の号。学術誌や雑誌刊行物は、通常、巻と号とで識別されます。テクニカルレポートを発行する団体は、通常、号を付与します。また、シリーズものの書籍にも号が振られることがあります。</li>
+
+        <li><strong>organization<br /></strong> コンファレンスの主催団体やマニュアルの発行元団体。</li>
+
+        <li><strong>pages<br /></strong> <tt>42-111</tt>や<tt>7,41,73-97</tt>や<tt>43+</tt>のように表記される(最後の例における「<tt>+</tt>」はそのページに続く範囲が単純な範囲ではないことを示します)、ページ数あるいはページ数の範囲。<em>Scribe</em>互換のデータベースを維持することが簡単になるように、標準的な様式は、単一のダッシュ(例: <tt>7-33</tt>)を、TeX中でのページ範囲の表記のように複数ダッシュ(例: <tt>7--33</tt>)に変換します。</li>
+
+        <li><strong>publisher<br /></strong> 出版社名。</li>
+
+        <li><strong>school<br /></strong> 論文の執筆された学校名。</li>
+
+        <li><strong>series<br /></strong> シリーズまたは全集の名称。書籍全体を引用する際には、<tt>title</tt>フィールドがそのタイトルを与え、非必須フィールドの<tt>series</tt>が、その本が刊行されたシリーズ名ないし複数巻書籍の名称を与えます。</li>
+
+        <li><strong>title<br /></strong> 著作のタイトル。大文字化は、文献目録様式と使用される言語とに依存します。大文字にしなくてはならない単語(固有名詞など)については、その単語(ないし最初の文字)を波括弧で囲んでください。</li>
+
+        <li><strong>type<br /></strong> テクニカルレポートの型。例えば「Research Note」。</li>
+
+        <li><strong>volume<br /></strong> 学術誌ないし複数巻書籍の巻。</li>
+
+        <li><strong>year<br /></strong> 発行年、あるいは未発行の著作に関しては執筆年。一般には、<tt>1984</tt>のような4桁数字を含んでいなくてはなりません。しかしながら、標準的な様式は、「(about 1984)」のように最後の非句読点文字4つが数字であるものならば、どのような<tt>year</tt>も取扱可能です。このフィールドは、ほとんどの項目型で必須です。</li>
+    </ul><br />
+
+
+    <h2>他のフィールド</h2>
+
+    <p>BibTeXは非常にポピュラーであり、多くの人々が情報を保管するために使用しています。以下は、よく使われるフィールドの一部を挙げたものです。</p>
+
+    <ul>
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        affiliation*</span><br /></strong> 著者の所属<br />
+        <br /></li>
+
+        <li><strong>abstract<br /></strong> 著作の要約<br />
+        <br /></li>
+
+        <li><strong>doi<br /></strong> デジタルオブジェクト識別子 (Digital Object Identifier)。文書に振られた恒久的識別子。<br />
+        <br /></li>
+
+        <li><strong>eid<br /></strong> 電子識別子 (electronic identifier) は、印刷もされている電子ジャーナルのためのものです。この番号はページ数の代わりであり、印刷された刊行物で論文を見つけるのに用いられます。これは、<em>citation number</em>とも呼ばれています。<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        contents*</span><br /></strong> 目次<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        copyright*</span><br /></strong> 著作権情報<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        ISBN*</span><br /></strong> 国際標準図書番号 (International Standard Book Number)<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        ISSN*</span><br /></strong> 国際標準逐次刊行物番号 (International Standard Serial Number)。学術誌を特定するのに使用されます。<br />
+        <br /></li>
+
+        <li><strong>keywords<br /></strong> 検索やときに注釈に使われるキーワード<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        language*</span><br /></strong> 文書で使用されている言語<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        location*</span><br /></strong> コンファレンスの開催された都市など、項目に関連した場所。<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        LCCN*</span><br /></strong> 米国議会図書館管理番号 (Library of Congress Control Number)。<tt>lib-congress</tt>と表記することもあるようです。<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        mrnumber*</span><br /></strong> <i>Mathematical Reviews</i>番号<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        price*</span><br /></strong> 文書の価格<br />
+        <br /></li>
+
+        <li>
+        <strong><span style="font-weight: normal; font-style: italic;">
+        size*</span><br /></strong> 著作物の物理的な寸法<br />
+        <br /></li>
+
+        <li><strong>URL<br /></strong> 参照されている項目を指し示すWWWユニフォームリソースロケータ。これは、テクニカルレポートにおいて、レポートのPostScriptソースのあるFTPサイトを指し示すのによく使用されます。</li>
+    </ul>
+
+    <h3>JuraBib</h3>
+
+    <ul>
+        <li><strong>urldate<br /></strong> 最後にページを訪れた日付。</li>
+    </ul><br />
+     *) は、JabRefによって直接サポートされていません。<br />
+     <br />
+</body>
+</html>
diff --git a/src/help/ja/CiteSeerHelp.html b/src/help/ja/CiteSeerHelp.html
index 4c98940..62b9005 100644
--- a/src/help/ja/CiteSeerHelp.html
+++ b/src/help/ja/CiteSeerHelp.html
@@ -1,39 +1,39 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1>CiteSeerから取り込む</h1>
-
-    <p>CiteSeerは、科学文献デジタルライブラリであり、主にコンピューターおよび情報科学の文献に特化した検索エンジンです。</p>
-
-    <h2>CiteSeerから項目を取り込む</h2>
-
-    <p>JabRefは、特定の文献についての情報をCiteSeerデータベースからダウンロードすることができます。この手順を開始するには、データベースに新規項目を追加し、citeseerurlフィールドに、CiteSeer上の当該内容ページへのリンクを置いてください。citeseerurlフィールドは、DDDDDDを数字の列として、以下の書式で書かなくてはなりません。</p>
-
-    <p>http://citeseer.ist.psu.edu/DDDDDD[.html], または<br />
-    oai:CiteSeerPSU:DDDDDD, または<br />
-    DDDDDD</p>
-
-    <p>CiteSeer項目の数字列(DDDDDD)を見つけるには、http://citeseer.ist.psu.edu/<b>名前年タイトル</b>.htmlというアドレスのその文献の文書ページに行き、この文献の(更新)リンクをクリックしてください。更新リンクのURLにこの文献の数値IDが含まれています。</p>
-
-    <p>citeseerurlフィールドを埋めると、<b>BibTeX→CiteSeerからフィールドを取り込む</b>を選択してCiteSeerの各フィールドをダウンロードすることができます。更新したい行を選択していることを確かめてください。</p>
-
-    <h2>文献データベースを生成する</h2>
-
-    <p>いくつかの参考文献の組に対して、これらの構成文献を引用している文書の一覧を生成することができます。この機能を利用するには、データベース中の各文献に、<b>CiteSeerから項目を取り込む</b>で指定した書式に則ったcitesserurlフィールドが含まれている必要があります。この機能を使用するには、<b>ウェブ検索→引用をCiteSeerから取得</b>を選択してください。</p>
-
-    <h2>プロキシサーバーを使用する</h2>
-
-    <p>httpプロクシサーバーを使用する必要があるときには、以下のように、実行時にサーバー名とポート番号を渡してください。</p>
-
-    <p><code>java -Dhttp.proxyHost="ホスト名"
-    -Dhttp.proxyPort="ポート番号"</code></p>
-
-    <p>これらの環境設定は、<a href="http://java.sun.com/j2se/1.4.2/docs/guide/net/properties.html">Sun J2SE documentation</a>で説明されています。</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+    <h1>CiteSeerから取り込む</h1>
+
+    <p>CiteSeerは、科学文献デジタルライブラリであり、主にコンピューターおよび情報科学の文献に特化した検索エンジンです。</p>
+
+    <h2>CiteSeerから項目を取り込む</h2>
+
+    <p>JabRefは、特定の文献についての情報をCiteSeerデータベースからダウンロードすることができます。この手順を開始するには、データベースに新規項目を追加し、citeseerurlフィールドに、CiteSeer上の当該内容ページへのリンクを置いてください。citeseerurlフィールドは、DDDDDDを数字の列として、以下の書式で書かなくてはなりません。</p>
+
+    <p>http://citeseer.ist.psu.edu/DDDDDD[.html], または<br />
+    oai:CiteSeerPSU:DDDDDD, または<br />
+    DDDDDD</p>
+
+    <p>CiteSeer項目の数字列(DDDDDD)を見つけるには、http://citeseer.ist.psu.edu/<b>名前年タイトル</b>.htmlというアドレスのその文献の文書ページに行き、この文献の(更新)リンクをクリックしてください。更新リンクのURLにこの文献の数値IDが含まれています。</p>
+
+    <p>citeseerurlフィールドを埋めると、<b>BibTeX→CiteSeerからフィールドを取り込む</b>を選択してCiteSeerの各フィールドをダウンロードすることができます。更新したい行を選択していることを確かめてください。</p>
+
+    <h2>文献データベースを生成する</h2>
+
+    <p>いくつかの参考文献の組に対して、これらの構成文献を引用している文書の一覧を生成することができます。この機能を利用するには、データベース中の各文献に、<b>CiteSeerから項目を取り込む</b>で指定した書式に則ったcitesserurlフィールドが含まれている必要があります。この機能を使用するには、<b>ウェブ検索→引用をCiteSeerから取得</b>を選択してください。</p>
+
+    <h2>プロキシサーバーを使用する</h2>
+
+    <p>httpプロクシサーバーを使用する必要があるときには、以下のように、実行時にサーバー名とポート番号を渡してください。</p>
+
+    <p><code>java -Dhttp.proxyHost="ホスト名"
+    -Dhttp.proxyPort="ポート番号"</code></p>
+
+    <p>これらの環境設定は、<a href="http://java.sun.com/j2se/1.4.2/docs/guide/net/properties.html">Sun J2SE documentation</a>で説明されています。</p>
+
+</body>
+</html>
diff --git a/src/help/ja/CommandLine.html b/src/help/ja/CommandLine.html
index d618e14..d915636 100644
--- a/src/help/ja/CommandLine.html
+++ b/src/help/ja/CommandLine.html
@@ -1,134 +1,134 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Command line options</h1>
-
-    <p>Although JabRef is primarily a GUI
-    based application, it offers several command line options that
-    may be useful, and can even perform file conversion operations
-    without opening the graphical interface.</p>
-
-    <p>You can always specify one or more BibTeX files to load by
-    simply listing their filenames. Take care to specify all
-    options before your list of file names. You must make sure the
-    first file name is not misunderstood as being an argument for
-    an option - this simply means that if a boolean option like
-    <code>-n</code> or <code>-l</code> immediately precedes a file
-    name, add the word "true" as an argument. For instance, the
-    command line:</p>
-
-    <p><code>jabref -o filetoexport.xml,docbook -n true
-    original.bib</code></p>
-
-    <p>will correctly load the file <code>original.bib</code>,
-    export it in docbook format to <code>filetoexport.xml</code>,
-    and suppress the GUI. The word <em>true</em> prevents the file
-    name from being interpreted as an argument to the -n
-    option.</p>
-
-    <h2>Help: -h</h2>
-
-    <p>This option causes JabRef to display a summary
-    of the command line options, and quit immediately.</p>
-
-    <h2>No-GUI mode: -n</h2>
-
-    <p>This option suppresses both the JabRef
-    window and the splash window normally shown at startup. It
-    causes the program to quit immediately once the command line
-    options have been processed.</p>
-
-    <p>This option is useful for performing file conversion
-    operations from the command line or a script.</p>
-
-    <h2>Load session: -l</h2>
-
-    <p>This option causes JabRef to load the
-    saved session, if any, before opening the main window.</p>
-
-    <h2>Import file: -i filename[,format]</h2>
-
-    <p>This option causes
-    JabRef to import or load the specified file. If only a filename
-    is specified, or the filename is followed by a comma and a *
-    character, JabRef will attempt to detect the file format
-    automatically. This should work for all BibTeX files and files
-    in any import format supported by JabRef. If the filename is
-    followed by a comma and the name of an import format, the given
-    import filter will be used. Use the <code>-h</code> option to
-    get a list of availiable import formats.</p>
-
-    <p>If an output option is also specified, an import will always
-    be processed before it, and the imported or loaded file will be
-    given to the export filter. If the GUI is not suppressed using
-    the <code>-n</code> option, any imported or loaded file will
-    show up in the main window.</p>
-
-    <p>The -i option can be specified only once, and for one file
-    only.</p>
-
-    <h2>Export file: -o filename[,format]</h2>
-
-    <p>This option causes
-    JabRef to save or export a file imported or loaded by the same
-    command line. If a file is imported using the <code>-i</code>
-    option, that database will be exported. Otherwise, the
-    <em>last</em> file specified (and successfully loaded) without
-    the <code>-i</code> option will be exported.</p>
-
-    <p>If only a filename is specified, it will be saved in BibTeX
-    format. If the filename is followed by a comma and an export
-    format, the given export filter will be used. A custom export
-    filter can be used in this way, and will be preferred if the
-    export name matches both a custom and a standard export
-    filter.</p>
-
-    <p>Use the <code>-h</code> option to get a list of availiable
-    export formats.</p>
-
-    <p>If the <code>-n</code> option has not been invoked, any
-    export operation will be performed before the JabRef window is
-    opened, and the imported database will show up in the
-    window.</p>
-
-    <p>The -o option can be specified only once, and for one file
-    only.</p>
-
-    <h2>Export preferences: -x filename</h2>
-
-    <p>Using this option, you
-    can have JabRef export all user preferences to an XML file.
-    After exporting, JabRef will start normally.</p>
-
-    <h2>Import preferences: -p filename</h2>
-
-    <p>This option causes
-    JabRef to import user preferences exported using the
-    <code>-x</code> option. After importing, JabRef will start
-    normally.</p>
-
-    <h2>Export only used items: -a
-    filename[.aux],newBibFile[.bib]</h2>
-
-    <p>Sometimes it is helpful, to
-    have a bibtex file that contains only the used bibtex entries.
-    A list of these used entries is located in an aux file. Jabref
-    can parse this file to generate a new bibtex file, which
-    contains only the known and used entries. That will mean, if an
-    entry is not defined in the standard bibtex file, it cannot be
-    located in the new file.</p>
-    
-    <h2>Fetch from Web: --fetch==name of fetcher:query string</h2>
-    
-    <p>The fetchers in the Web menu can also be run from the command 
-    line. Use the --fetch option and then pass both the name of a fetcher 
-    (for instance ieee, medline or jstor) and your search term or paper id and 
-    the given fetcher will be run. Note that some fetcher will still display 
-    GUI if they need feedback from you. To get a list of available fetchers run
-    --fetch without parameters.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Command line options</h1>
+
+    <p>Although JabRef is primarily a GUI
+    based application, it offers several command line options that
+    may be useful, and can even perform file conversion operations
+    without opening the graphical interface.</p>
+
+    <p>You can always specify one or more BibTeX files to load by
+    simply listing their filenames. Take care to specify all
+    options before your list of file names. You must make sure the
+    first file name is not misunderstood as being an argument for
+    an option - this simply means that if a boolean option like
+    <code>-n</code> or <code>-l</code> immediately precedes a file
+    name, add the word "true" as an argument. For instance, the
+    command line:</p>
+
+    <p><code>jabref -o filetoexport.xml,docbook -n true
+    original.bib</code></p>
+
+    <p>will correctly load the file <code>original.bib</code>,
+    export it in docbook format to <code>filetoexport.xml</code>,
+    and suppress the GUI. The word <em>true</em> prevents the file
+    name from being interpreted as an argument to the -n
+    option.</p>
+
+    <h2>Help: -h</h2>
+
+    <p>This option causes JabRef to display a summary
+    of the command line options, and quit immediately.</p>
+
+    <h2>No-GUI mode: -n</h2>
+
+    <p>This option suppresses both the JabRef
+    window and the splash window normally shown at startup. It
+    causes the program to quit immediately once the command line
+    options have been processed.</p>
+
+    <p>This option is useful for performing file conversion
+    operations from the command line or a script.</p>
+
+    <h2>Load session: -l</h2>
+
+    <p>This option causes JabRef to load the
+    saved session, if any, before opening the main window.</p>
+
+    <h2>Import file: -i filename[,format]</h2>
+
+    <p>This option causes
+    JabRef to import or load the specified file. If only a filename
+    is specified, or the filename is followed by a comma and a *
+    character, JabRef will attempt to detect the file format
+    automatically. This should work for all BibTeX files and files
+    in any import format supported by JabRef. If the filename is
+    followed by a comma and the name of an import format, the given
+    import filter will be used. Use the <code>-h</code> option to
+    get a list of availiable import formats.</p>
+
+    <p>If an output option is also specified, an import will always
+    be processed before it, and the imported or loaded file will be
+    given to the export filter. If the GUI is not suppressed using
+    the <code>-n</code> option, any imported or loaded file will
+    show up in the main window.</p>
+
+    <p>The -i option can be specified only once, and for one file
+    only.</p>
+
+    <h2>Export file: -o filename[,format]</h2>
+
+    <p>This option causes
+    JabRef to save or export a file imported or loaded by the same
+    command line. If a file is imported using the <code>-i</code>
+    option, that database will be exported. Otherwise, the
+    <em>last</em> file specified (and successfully loaded) without
+    the <code>-i</code> option will be exported.</p>
+
+    <p>If only a filename is specified, it will be saved in BibTeX
+    format. If the filename is followed by a comma and an export
+    format, the given export filter will be used. A custom export
+    filter can be used in this way, and will be preferred if the
+    export name matches both a custom and a standard export
+    filter.</p>
+
+    <p>Use the <code>-h</code> option to get a list of availiable
+    export formats.</p>
+
+    <p>If the <code>-n</code> option has not been invoked, any
+    export operation will be performed before the JabRef window is
+    opened, and the imported database will show up in the
+    window.</p>
+
+    <p>The -o option can be specified only once, and for one file
+    only.</p>
+
+    <h2>Export preferences: -x filename</h2>
+
+    <p>Using this option, you
+    can have JabRef export all user preferences to an XML file.
+    After exporting, JabRef will start normally.</p>
+
+    <h2>Import preferences: -p filename</h2>
+
+    <p>This option causes
+    JabRef to import user preferences exported using the
+    <code>-x</code> option. After importing, JabRef will start
+    normally.</p>
+
+    <h2>Export only used items: -a
+    filename[.aux],newBibFile[.bib]</h2>
+
+    <p>Sometimes it is helpful, to
+    have a bibtex file that contains only the used bibtex entries.
+    A list of these used entries is located in an aux file. Jabref
+    can parse this file to generate a new bibtex file, which
+    contains only the known and used entries. That will mean, if an
+    entry is not defined in the standard bibtex file, it cannot be
+    located in the new file.</p>
+    
+    <h2>Fetch from Web: --fetch==name of fetcher:query string</h2>
+    
+    <p>The fetchers in the Web menu can also be run from the command 
+    line. Use the --fetch option and then pass both the name of a fetcher 
+    (for instance ieee, medline or jstor) and your search term or paper id and 
+    the given fetcher will be run. Note that some fetcher will still display 
+    GUI if they need feedback from you. To get a list of available fetchers run
+    --fetch without parameters.</p>
+</body>
+</html>
diff --git a/src/help/ja/ContentSelectorHelp.html b/src/help/ja/ContentSelectorHelp.html
old mode 100755
new mode 100644
index 42f3801..f977708
--- a/src/help/ja/ContentSelectorHelp.html
+++ b/src/help/ja/ContentSelectorHelp.html
@@ -1,17 +1,17 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1>フィールド内容選択メニュー</h1>
-
-    <p>この機能は、使用しているデータベースでしばしば用いられる頻出語や頻出句を選んで保存することができるようにするものです。この機能は、既定では<em>Journal</em>・<em>Author</em>・<em>Keywords</em>・<em>Publisher</em>の各フィールドに対して有効になっていますが、<em>選択メニューを設定</em>ダイアログ(<strong>ツール→内容選択メニューを管理</strong>メニュー)の上部で、他のフィールドにも内容選択メニューを追加することができます。</p>
-
-    <p>設定した単語は、データベース毎に固有のものであり、文献データとともに.bibファイルに保存されます。</p>
-
-    <p>単語を新しく付け加えるには、<em>選択メニューを設定</em>ダイアログのキーワード欄に書き込んでEnter鍵を押してください。削除ボタンを使えば、単語を削除することができます。</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+    <h1>フィールド内容選択メニュー</h1>
+
+    <p>この機能は、使用しているデータベースでしばしば用いられる頻出語や頻出句を選んで保存することができるようにするものです。この機能は、既定では<em>Journal</em>・<em>Author</em>・<em>Keywords</em>・<em>Publisher</em>の各フィールドに対して有効になっていますが、<em>選択メニューを設定</em>ダイアログ(<strong>ツール→内容選択メニューを管理</strong>メニュー)の上部で、他のフィールドにも内容選択メニューを追加することができます。</p>
+
+    <p>設定した単語は、データベース毎に固有のものであり、文献データとともに.bibファイルに保存されます。</p>
+
+    <p>単語を新しく付け加えるには、<em>選択メニューを設定</em>ダイアログのキーワード欄に書き込んでEnter鍵を押してください。削除ボタンを使えば、単語を削除することができます。</p>
+</body>
+</html>
diff --git a/src/help/ja/Contents.html b/src/help/ja/Contents.html
old mode 100755
new mode 100644
index 08d6b32..2341e9b
--- a/src/help/ja/Contents.html
+++ b/src/help/ja/Contents.html
@@ -1,76 +1,82 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1>ヘルプ目次</h1>
-
-    <h2>一般</h2>
-    <ul>
-      <li><a href="HelpHelp.html">ヘルプウィンドウについて</a></li>
-      <li><a href="JabRefHelp.html">一般的な情報</a></li>
-      <li><a href="BaseFrameHelp.html">JabRef 基本ウィンドウ</a></li>
-      <li><a href="EntryEditorHelp.html">項目エディタ</a></li>
-      <li><a href="Autosave.html">自動保存</a></li>
-    </ul>
-
-    <h2>フィールド</h2>
-    <ul>
-      <li><a href="BibtexHelp.html"><em>Bibtex</em>ヘルプ</a></li>
-      <li><a href="FileLinks.html">外部ファイルリンク</a></li>
-      <li><a href="ExternalFiles.html">JabRef におけるPDF/PS/URL/DOIリンク</a></li>
-      <li><a href="TimeStampHelp.html">項目の時間スタンプ</a></li>
-      <li><a href="OwnerHelp.html">「owner」フィールド</a></li>
-      <li><a href="ContentSelectorHelp.html">フィールド内容選択メニュー</a></li>
-      <li><a href="JournalAbbreviations.html">学術誌名の短縮形</a></li>
-    </ul>
-    
-    <h2>項目の検索と整序</h2>
-    <ul>
-      <li><a href="GroupsHelp.html">Help on using <em>Groups</em></a></li>
-      <li><a href="MarkingHelp.html">Marking entries</a></li>
-      <li><a href="SearchHelp.html">Searching in JabRef</a></li>
-    </ul>
-
-    <h2>設定</h2>
-    <ul>
-      <li><a href="StringEditorHelp.html">文字列エディタ</a></li>
-      <li><a href="DatabaseProperties.html">Database properties window</a></li>
-      <li><a href="PreviewHelp.html">Entry preview setup</a></li>
-      <li><a href="LabelPatterns.html">Customizing the BibTex key generator</a></li>
-      <li><a href="CustomEntriesHelp.html">Customizing entry types</a></li>
-      <li><a href="GeneralFields.html">Customizing general fields</a></li>
-      <li><a href="Plugin.html">プラグインを使用してJabRefを拡張する</a></li>
-    </ul>
-
-    <h2>読み込み/書き出し</h2>
-    <ul>
-      <li><a href="CustomExports.html">Custom export filters</a></li>
-      <li><a href="CustomImports.html">Custom import filters</a></li>
-      <li><a href="ImportInspectionDialog.html">Import inspection window</a></li>
-      <li><a href="EndNoteFilters.html">EndNote読み込み/書き出しフィルタセット</a></li>
-      <li><a href="OpenOfficeHelp.html">OpenOffice.orgでJabRef書誌情報を利用するには</a></li>
-      <li><a href="ACMPortalHelp.html"><em>ACM</em> Portalから項目を取得する</a></li>
-      <li><a href="CiteSeerHelp.html"><em>CiteSeer</em>から項目を取得する</a></li>
-      <li><a href="IEEEXploreHelp.html"><em>IEEExplore</em>から項目を取得する</a></li>
-      <li><a href="MedlineHelp.html">Fetching entries from <em>Medline</em></a></li>
-      <li><a href="JSTOR.html"><em>JStor</em> 検索</a></li>
-      <li><a href="ScienceDirect.html"><em>ScienceDirect</em> 検索</a></li>
-      <li><a href="Spires.html"><em>Spires</em> 検索</a></li>
-      <li><a href="SQLExport.html">Export to an External SQL Database</a></li>
-      <li><a href="XMPHelp.html">XMP metadata support in JabRef</a></li>
-      <li><a href="CommandLine.html">Command line options</a></li>
-      <li><a href="RemoteHelp.html">Remote operations</a></li>
-    </ul>
-
-    <h2>その他</h2>
-    <ul>
-      <li><a href="RevisionHistory.html">更新履歴</a></li>
-      <li><a href="About.html">JabRefについて</a></li>
-    </ul>
-
-</body>
-</html> 
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>ヘルプ目次</h1>
+
+    <h2>一般</h2>
+    <ul>
+      <li><a href="HelpHelp.html">ヘルプウィンドウについて</a></li>
+      <li><a href="JabRefHelp.html">一般的な情報</a></li>
+      <li><a href="BaseFrameHelp.html">JabRef 基本ウィンドウ</a></li>
+      <li><a href="EntryEditorHelp.html">項目エディタ</a></li>
+      <li><a href="Autosave.html">自動保存</a></li>
+    </ul>
+
+    <h2>フィールド</h2>
+    <ul>
+      <li><a href="BibtexHelp.html"><em>Bibtex</em>ヘルプ</a></li>
+      <li><a href="FileLinks.html">外部ファイルリンク</a></li>
+      <li><a href="ExternalFiles.html">JabRef におけるPDF/PS/URL/DOIリンク</a></li>
+      <li><a href="TimeStampHelp.html">項目の時間スタンプ</a></li>
+      <li><a href="OwnerHelp.html">「owner」フィールド</a></li>
+      <li><a href="ContentSelectorHelp.html">フィールド内容選択メニュー</a></li>
+      <li><a href="JournalAbbreviations.html">学術誌名の短縮形</a></li>
+      <li><a href="SpecialFieldsHelp.html">特殊フィールド</a></li>
+    </ul>
+    
+    <h2>項目の検索と整序</h2>
+    <ul>
+      <li><a href="GroupsHelp.html"><em>グループ</em>を使うためのヘルプ</a></li>
+      <li><a href="MarkingHelp.html">項目の標識付け</a></li>
+      <li><a href="SearchHelp.html">JabRefでの検索</a></li>
+    </ul>
+
+    <h2>設定</h2>
+    <ul>
+      <li><a href="StringEditorHelp.html">文字列エディタ</a></li>
+      <li><a href="DatabaseProperties.html">データベース特性ウィンドウ</a></li>
+      <li><a href="PreviewHelp.html">項目プレビューの設定</a></li>
+      <li><a href="LabelPatterns.html">BibTeXキー生成機構の個人用設定</a></li>
+      <li><a href="CustomEntriesHelp.html">Customizing entry types</a></li>
+      <li><a href="GeneralFields.html">一般フィールドの個人用設定</a></li>
+      <li><a href="Plugin.html">プラグインを使用してJabRefを拡張する</a></li>
+    </ul>
+
+    <h2>読み込み/書き出し</h2>
+    <ul>
+      <li><a href="CustomExports.html">Custom export filters</a></li>
+      <li><a href="CustomImports.html">Custom import filters</a></li>
+      <li><a href="ImportInspectionDialog.html">Import inspection window</a></li>
+      <li><a href="EndNoteFilters.html">EndNote読み込み/書き出しフィルタセット</a></li>
+      <li><a href="OpenOfficeHelp.html">OpenOffice.orgでJabRef書誌情報を利用するには</a></li>
+      <li><a href="ACMPortalHelp.html"><em>ACM</em> Portalから項目を取得する</a></li>
+      <li><a href="CiteSeerHelp.html"><em>CiteSeerX</em>から項目を取得する</a></li>
+      <li><a href="DiVAtoBibTeXHelp.html"><em>DiVA</em>から項目を取得する</a></li>
+      <li><a href="DOItoBibTeXHelp.html"><em>DOI to BibTeX Converter</em>を使用して項目を取得する</a></li>
+      <li><a href="GoogleScholarHelp.html"><em>Google Scholar</em>から項目を取得する</a></li>
+
+      <li><a href="IEEEXploreHelp.html"><em>IEEExplore</em>から項目を取得する</a></li>
+      <li><a href="ISBNtoBibTeXHelp.html"><em>ISBN to BibTeX Converter</em>を使用して項目を取得する</a></li>
+      <li><a href="MedlineHelp.html">Fetching entries from <em>Medline</em></a></li>
+      <li><a href="JSTOR.html"><em>JStor</em> 検索</a></li>
+      <li><a href="ScienceDirect.html"><em>ScienceDirect</em> 検索</a></li>
+      <li><a href="Spires.html"><em>Spires</em> 検索</a></li>
+      <li><a href="SQLExport.html">Export to an External SQL Database</a></li>
+      <li><a href="XMPHelp.html">XMP metadata support in JabRef</a></li>
+      <li><a href="CommandLine.html">Command line options</a></li>
+      <li><a href="RemoteHelp.html">リモート操作</a></li>
+    </ul>
+
+    <h2>その他</h2>
+    <ul>
+      <li><a href="RevisionHistory.html">更新履歴</a></li>
+      <li><a href="About.html">JabRefについて</a></li>
+    </ul>
+
+</body>
+</html> 
diff --git a/src/help/ja/CustomEntriesHelp.html b/src/help/ja/CustomEntriesHelp.html
index 34e553b..197b246 100644
--- a/src/help/ja/CustomEntriesHelp.html
+++ b/src/help/ja/CustomEntriesHelp.html
@@ -1,83 +1,83 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1>項目型のカスタマイズ</h1>
-
-    <p>To customize entry types, select the menu <strong>Options
-    --> Customize entry types</strong>.</p>
-
-    <p>When customizing an entry type, you both define how its
-    entry editor should look, and what it takes for JabRef to
-    consider an entry complete. You can both make changes to the
-    existing entry types, and define new ones.</p>
-
-    <p>Note that no modifications you make in this dialog will be
-    stored until you click <b>Apply</b> or <b>OK</b>. If you click
-    <b>Cancel</b> or simply close the dialog, unapplied changes
-    will be lost.</p>
-
-    <h2>Using the entry customization dialog</h2>
-
-    <p>The entry
-    customization dialog is divided in three main panels. The
-    leftmost panel is where you can select an entry type for
-    modification, and add new ones. The middle panel is used for
-    setting up the required fields of the selected entry type, and
-    the right panel for setting up the optional fields.</p>
-
-    <h3>Adding and removing entry types</h3>
-
-    <p>The currently available entry types are listed in the left
-    panel. Whenever you select an entry type, the other panels will
-    update to show what fields are required and optional for this
-    entry type.</p>
-
-    <p>To add a new entry type, you must enter a name for it in the
-    text field below the type list, and click <b>Add</b>. The new
-    entry type will be added to the list, and selected for
-    modification.</p>
-
-    <p>To remove a custom entry type, select it and click
-    <b>Remove</b>. This operation will only be available for custom
-    entry types that are not merely modifications of standard
-    types. It is not possible to remove a standard entry type.</p>
-
-    <p>To return a modified standard type to its default setup,
-    select it and click <b>Default</b>. This operation will only be
-    available for customized entry types that modify a standard
-    type.</p>
-
-    <h2>Editing entry types</h2>
-
-    <p>When an entry type is selected, the
-    current required and optional fields will be listed in the
-    center and right panels of the dialog. The process of editing
-    the lists are identical for the required and optional fields.</p>
-
-    <p>To add a new field, edit the text field below the list, or
-    select a field name from the dropdown menu, then click
-    <b>Add</b>. The chosen field name will be added at the end of
-    the list.</p>
-
-    <p>To remove one or more fields, select them in the list, and
-    click <b>Remove</b>.</p>
-
-    <p>To change the order of the fields, choose one field name,
-    and click the arrow buttons to move it up or down in the
-    list.</p>
-
-    <h3>Either/or fields</h3>
-    <p>Certain entry types have an either-or condition in their
-    required fields. For instance, a <em>book</em> entry is complete
-    with either the <em>author</em> or the <em>editor</em> field, or
-    both. To indicate such a condition in a custom entry type, you should
-    add a field named as the set of alternative fields separated by slashes,
-    for instance <em>author/editor</em> indicates the condition mentioned above for
-    the <em>book</em> entry type.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+    <h1>項目型のカスタマイズ</h1>
+
+    <p>To customize entry types, select the menu <strong>Options
+    --> Customize entry types</strong>.</p>
+
+    <p>When customizing an entry type, you both define how its
+    entry editor should look, and what it takes for JabRef to
+    consider an entry complete. You can both make changes to the
+    existing entry types, and define new ones.</p>
+
+    <p>Note that no modifications you make in this dialog will be
+    stored until you click <b>Apply</b> or <b>OK</b>. If you click
+    <b>Cancel</b> or simply close the dialog, unapplied changes
+    will be lost.</p>
+
+    <h2>Using the entry customization dialog</h2>
+
+    <p>The entry
+    customization dialog is divided in three main panels. The
+    leftmost panel is where you can select an entry type for
+    modification, and add new ones. The middle panel is used for
+    setting up the required fields of the selected entry type, and
+    the right panel for setting up the optional fields.</p>
+
+    <h3>Adding and removing entry types</h3>
+
+    <p>The currently available entry types are listed in the left
+    panel. Whenever you select an entry type, the other panels will
+    update to show what fields are required and optional for this
+    entry type.</p>
+
+    <p>To add a new entry type, you must enter a name for it in the
+    text field below the type list, and click <b>Add</b>. The new
+    entry type will be added to the list, and selected for
+    modification.</p>
+
+    <p>To remove a custom entry type, select it and click
+    <b>Remove</b>. This operation will only be available for custom
+    entry types that are not merely modifications of standard
+    types. It is not possible to remove a standard entry type.</p>
+
+    <p>To return a modified standard type to its default setup,
+    select it and click <b>Default</b>. This operation will only be
+    available for customized entry types that modify a standard
+    type.</p>
+
+    <h2>Editing entry types</h2>
+
+    <p>When an entry type is selected, the
+    current required and optional fields will be listed in the
+    center and right panels of the dialog. The process of editing
+    the lists are identical for the required and optional fields.</p>
+
+    <p>To add a new field, edit the text field below the list, or
+    select a field name from the dropdown menu, then click
+    <b>Add</b>. The chosen field name will be added at the end of
+    the list.</p>
+
+    <p>To remove one or more fields, select them in the list, and
+    click <b>Remove</b>.</p>
+
+    <p>To change the order of the fields, choose one field name,
+    and click the arrow buttons to move it up or down in the
+    list.</p>
+
+    <h3>Either/or fields</h3>
+    <p>Certain entry types have an either-or condition in their
+    required fields. For instance, a <em>book</em> entry is complete
+    with either the <em>author</em> or the <em>editor</em> field, or
+    both. To indicate such a condition in a custom entry type, you should
+    add a field named as the set of alternative fields separated by slashes,
+    for instance <em>author/editor</em> indicates the condition mentioned above for
+    the <em>book</em> entry type.</p>
+</body>
+</html>
diff --git a/src/help/ja/CustomExports.html b/src/help/ja/CustomExports.html
index 7a88132..5b58b53 100644
--- a/src/help/ja/CustomExports.html
+++ b/src/help/ja/CustomExports.html
@@ -1,566 +1,566 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Custom export filters</h1>
-
-    <p>JabRef allows you to define and
-    use your own export filters, in the same way as the standard
-    export filters are defined. An export filter is defined by one
-    or more <i>layout files</i>, which with the help of a
-    collection of built-in formatter routines specify the format of
-    the exported files. Your layout files must be prepared in a
-    text editor outside of JabRef.</p>
-
-    <h2>Adding a custom export filter</h2>
-
-    <p>The only requirement for
-    a valid export filter is the existence of a file with the
-    extension <b>.layout</b>. To add a new custom export filter,
-    open the dialog box <b>Options -> Manage custom exports</b>,
-    and click <b>Add new</b>. A new dialog box will appear,
-    allowing you to specify a name for the export filter (which
-    will appear as one of the choices in the File type dropdown
-    menu of the file dialog when you use the <b>File ->
-    Export</b> menu choice in the JabRef window), the path to the
-    <b>.layout</b> file, and the preferred file extension for the
-    export filter (which will be the suggested extension in the
-    file dialog when you use the export filter).</p>
-
-    <h2>Creating the export filter</h2>
-
-    <p>To see examples of how export filters are made, look for
-    the package containing the layout files for the standard
-    export filters on our download page.</p>
-
-    <h3>Layout files</h3>
-
-    <p>Let us assume that we are creating an HTML export filter.</p>
-
-    <p>While the export filter only needs to consist of a single
-    <b>.layout</b> file, which in this case could be called
-    <i>html.layout</i>, you may also want to add two files called
-    <i>html.begin.layout</i> and <i>html.end.layout</i>. The former
-    contains the header part of the output, and the latter the
-    footer part. JabRef will look for these two files whenever the
-    export filter is used, and if found, either of these will be
-    copied verbatim to the output before or after the individual
-    entries are written.</p>
-
-    <p>Note that these files must reside in the same directory as
-    <i>html.layout</i>, and must be named by inserting
-    <b>.begin</b> and <b>.end</b>, respectively.</p>
-
-    <p>In our example export filter, these could look like the
-    following:</p>
-
-    <p><i>html.begin.layout</i>:<br />
-    <code><HTML><br />
-     <BODY> text="#275856"><br />
-    <basefont size="4" color="#2F4958"
-    face="arial"></code></p>
-
-    <p><i>html.end.layout</i>:<br />
-    <code></BODY><br />
-     </HTML></code></p>
-
-    <p>The file <i>html.layout</i> provides the <i>default</i>
-    template for exporting one single entry. If you want to use
-    different templates for different entry types, you can do this
-    by adding entry-specific <b>.layout</b> files. These must also
-    reside in the same directory as the main layout file, and are
-    named by inserting <b>.entrytype</b> into the name of the main
-    layout file. The entry type name must be in all lowercase. In
-    our example, we might want to add a template for book entries,
-    and this would go into the file <i>html.book.layout</i>. For a
-    PhD thesis we would add the file <i>html.phdthesis.layout</i>,
-    and so on. These files are similar to the default layout file,
-    except that they will only be used for entries of the matching
-    type. Note that the default file can easily be made general
-    enough to cover most entry types in most export filters.</p>
-
-    <h3>The layout file format</h3>
-
-    <p>Layout files are created using a
-    simple markup format where commands are identified by a
-    preceding backslash. All text not identified as part of a
-    command will be copied verbatim to the output file.</p>
-
-    <h3>Field commands</h3>
-
-    <p>An arbitrary word preceded by a backslash, e.g.
-    <code>\author</code>, <code>\editor</code>, <code>\title</code>
-    or <code>\year</code>, will be interpreted as a reference to
-    the corresponding field, which will be copied directly to the
-    output.</p>
-
-    <h3>Field formatters</h3>
-
-    <p>Often there will be a need for some preprocessing of the
-    field contents before output. This is done using a <i>field
-    formatter</i> - a java class containing a single method that
-    manipulates the contents of a field.</p>
-
-    <p>A formatter is used by inserting the <code>\format</code>
-    command followed by the formatter name in square braces, and
-    the field command in curly braces, e.g.:</p>
-
-    <p><code>\format[ToLowerCase]{\author}</code></p>
-
-    <p>You can also specify multiple formatters separated by
-    commas. These will be called sequentially, from left to right,
-    e.g.</p>
-
-    <p><code>\format[ToLowerCase,HTMLChars]{\author}</code></p>
-
-    <p>will cause the formatter <b>ToLowerCase</b> to be called
-    first, and then <b>HTMLChars</b> will be called to format the
-    result. You can list an arbitrary number of formatters in this
-    way.</p>
-
-    <p>The argument to the formatters, withing the curly braces,
-    does not have to be a field command. Instead, you can insert
-    normal text, which will then be passed to the formatters
-    instead of the contents of any field. This can be useful for
-    some fomatters, e.g. the CurrentDate formatter (described
-    below).</p>
-
-    <p>Some formatters take an extra argument, given in parentheses
-    immediately after the formatter name. The argument can be enclosed
-    in quotes, which is necessary if it includes the parenthesis characters.
-    For instance, <code>\format[Replace("\s,_")]{\journal}</code> calls
-    the <b>Replace</b> formatter with the argument <b>\s,_</b> (which results
-    in the "journal" field after replacing all whitespace by underscores).
-    </p>
-
-    <p>See below for a list of built-in export formatters.</p>
-
-    <h3>Conditional output</h3>
-
-    <p>Some static output might only make
-    sense if a specific field is set. For instance, say we want to
-    follow the editor names with the text <code>(Ed.)</code>. This
-    can be done with the following text:</p>
-
-    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
-    (Ed.)</code></p>
-
-    <p>However, if the <code>editor</code> field has not been set -
-    it might not even make sense for the entry being exported - the
-    <code>(Ed.)</code> would be left hanging. This can be prevented
-    by instead using the <code>\begin</code> and <code>\end</code>
-    commands:</p>
-
-    <p><code>\begin{editor}<br />
-    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br />
-     \end{editor}</code></p>
-
-    <p>The <code>\begin</code> and <code>\end</code> commands make
-    sure the text in between is printed if and only if the field
-    referred in the curly braces is defined for the entry being
-    exported.</p>
-
-    <p>A conditional block can also be dependent on more than one field. In this case
-    the contents of the block are printed only if all the fields are defined. To make
-    such a block, simply give the list of fields separated by semicolons. For instance,
-    to output text only if both <code>year</code> and <code>month</code> are set, use
-    a block like the following:</p>
-
-    <p><code>\begin{year;month}Month: \format[HTMLChars]{\month}\end{year;month}</code></p>
-
-    <p>which will print "Month: " plus the contents of the <code>month</code> field, but
-    only if also the <code>year</code> field is defined.</p>
-
-    <p><b>Note:</b> Use of the <code>\begin</code> and
-    <code>\end</code> commands is a key to creating layout files
-    that work well with a variety of entry types.</p>
-
-    <h3>Grouped output</h3>
-
-    <p>If you wish to separate your entries
-    into groups based on a certain field, use the grouped output
-    commands. Grouped output is very similar to conditional output,
-    except that the text in between is printed only if the field
-    referred in the curly braces has changed value.</p>
-
-    <p>For example, let's assume I wish to group by keyword. Before
-    exporting the file, make sure you have sorted your entries
-    based on keyword. Now use the following commands to group by
-    keyword:</p>
-
-    <p><code>\begingroup{keywords}New Category:
-    \format[HTMLChars]{\keywords}<br />
-     \endgroup{keywords}</code></p>
-
-    <h2>Sharing your work</h2>
-
-    <p>With external layout files, it's
-    fairly simple to share custom export formats between users. If
-    you write an export filter for a format not supported by
-    JabRef, or an improvement over an existing one, we encourage
-    you to post your work on our SourceForge.net page. The same
-    goes for formatter classes that you write. We'd be happy to
-    distribute a collection of submitted layout files, or to add to
-    the selection of standard export filters and formatters.</p>
-
-    <p>Starting with JabRef 2.4 you can also package your 
-	ExportFormat or LayoutFormatter as a plug-in. If you do so,
-	you can provide a single zip-file to other user to make use
-	of your ExportFormat. For an example download the JabRef
-	source release and have a look at the directory
-	<code>src/plugins/</code>. Don't hesitate to stop by the
-	forums on Sourceforge, since we don't have extensive documentation, yet.</p>
-
-
-    <h2>Built-in export formatters</h2>
-
-    <p>JabRef provides the following set of formatters:</p>
-
-    <ul>
-        <li><code>Authors</code> : this formatter provides formatting options for the author and editor fields; for detailed information, see below. It deprecates a range of dedicated formatters provided in versions of JabRef prior to 2.7.</li>
-
-        <li><code>CreateDocBookAuthors</code> : formats the author
-        field in DocBook style.</li>
-
-        <li><code>CreateDocBookEditors</code> : to be
-        documented.</li>
-
-        <li><code>CurrentDate</code> : outputs the current date.
-        With no argument, this formatter outputs the current date
-        and time in the format "yyyy.MM.dd hh:mm:ss z" (date, time
-        and time zone). By giving a different format string as
-        argument, the date format can be customized. E.g.
-        <code>\format[CurrentDate]{yyyy.MM.dd}</code> will give the
-        date only, e.g. 2005.11.30.</li>
-
-        <li><code>Default</code> : takes a single argument, which serves as a default value.
-        If the string to format is non-empty, it is output without changes. If it is empty,
-        the default value is output. For instance, <code>\format[Default(unknown)]{\year}</code>
-        will output the entry's year if set, and "unknown" if no year is set.</li>
-	
-        <li><code>DOIStrip</code> : strips any prefixes from the DOI string.</li>
-        <li><code>DOICheck</code> : provides the full url for a DOI link.</li>
-
-        <li><code>FileLink(filetype)</code> : if no argument is given, this formatter outputs
-        the first external file link encoded in the field. To work, the formatter must
-        be supplied with the contents of the "file" field.
-        <p>This formatter takes the name of an external file type as an optional argument,
-        specified in parentheses after the formatter name. For instance,
-        <code>\format[FileLink(pdf)]{\file}</code> specifies <code>pdf</code> as an
-        argument. When an argument is given, the formatter selects the first file
-        link of the specified type. In the example, the path to the first PDF link will
-        be output.</p></li>
-
-        <li><code>FirstPage</code> : returns the first page from the "pages" field, if set.
-            For instance, if the pages field is set to "345-360" or "345--360",
-            this formatter will return "345".</li>
-
-        <li><code>FormatPagesForHTML</code> : replaces "--" with "-".</li>
-
-        <li><code>FormatPagesForXML</code> : replaces "--" with an XML en-dash.</li>
-
-        <li><code>GetOpenOfficeType</code> : returns the number used by the OpenOffice.org
-        bibliography system (versions 1.x and 2.x) to denote the type of this entry.</li>
-
-        <li><code>HTMLChars</code> : replaces TeX-specific special
-        characters (e.g. {\^a} or {\"{o}}) with their HTML
-        representations, and translates LaTeX commands \emph, \textit,
-        \textbf into HTML equivalents.</li>
-
-        <li><code>HTMLParagraphs</code> : interprets two
-        consecutive newlines (e.g. \n \n) as the beginning of a new
-        paragraph and creates paragraph-html-tags accordingly.</li>
-
-        <li><code>IfPlural</code> : outputs its first argument if the input field looks
-        like an author list with two or more names, or its second argument otherwise.
-        E.g. <code>\format[IfPlural(Eds.,Ed.)]{\editor}</code> will output "Eds." if there
-        is more than one editor, and "Ed." if there is only one.</li>
-
-        <li><code>LastPage</code> : returns the last page from the "pages" field, if set.
-            For instance, if the pages field is set to "345-360" or "345--360",
-            this formatter will return "360".</li>
-
-        <li><code>Number</code> : outputs the 1-based sequence number of the current entry in the
-        current export. This formatter can be used to make a numbered list of entries. The
-        sequence number depends on the current entry's place in the current sort order, not on
-        the number of calls to this formatter.</li>
-
-        <li><code>RemoveBrackets</code> : removes all curly brackets "{" or "}".</li>
-
-        <li><code>RemoveBracketsAddComma</code> : to be documented.</li>
-
-        <li><code>RemoveLatexCommands</code> : removes LaTeX
-        commands like <code>\em</code>, <code>\textbf</code>, etc.
-        If used together with <code>HTMLChars</code> or
-        <code>XMLChars</code>, this formatter should be called
-        last.</li>
-
-        <li><code>RemoveTilde</code> : replaces the tilde character
-        used in LaTeX as a non-breakable space by a regular space.
-        Useful in combination with the NameFormatter discussed in
-        the next section.</li>
-
-        <li><code>RemoveWhitespace</code> : removes all whitespace characters.</li>
-
-        <li><code>Replace(regexp,replacewith)</code> : does a regular expression replacement.
-        To use this formatter, a two-part argument must be given. The parts are
-        separated by a comma. To indicate the comma character, use an escape
-        sequence: \,<br/> <br/>
-        The first part is the regular expression to search for. Remember that any commma
-        character must be preceded by a backslash, and consequently a literal backslash must
-        be written as a pair of backslashes. A description of Java regular expressions can be
-        found at:<br/>
-         http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
-         <br/> <br/>
-        The second part is the text to replace all matches with.</li>
-
-        <li><code>RTFChars</code> : replaces TeX-specific special
-        characters (e.g. {\^a} or {\"{o}}) with their RTF
-        representations, and translates LaTeX commands \emph, \textit,
-        \textbf into RTF equivalents.</li>
-
-        <li><code>ToLowerCase</code> : turns all characters into
-        lower case.</li>
-
-        <li><code>ToUpperCase</code> : turns all characters into
-        upper case.</li>
-
-        <li><code>WrapContent</code> : This formatter outputs the input value after adding a
-        prefix and a postfix, as long as the input value is non-empty. If the input value
-        is empty, an empty string is output (the prefix and postfix are not output in this case).
-        The formatter requires an argument containing the prefix and postix separated
-        by a comma. To include the comma character in either, use an escape sequence
-        (\,).</li>
-
-        <li><code>WrapFileLinks</code> : See below.</li>
-
-        <li><code>XMLChars</code> : replaces TeX-specific special
-        characters (e.g. {\^a} or {\"{o}}) with their XML
-        representations.</li>
-
-    </ul>
-
-<h3>The <code>Authors</code> formatter</h3>
-
-<p>To accommodate for the numerous citation styles, the <code>Authors</code> formatter allows flexible control over the layout of the author list. The formatter takes a comma-separated list of options, by which the default values can be overridden. The following option/value pairs are currently available, where the default values are given in curly brackets.</p>
-<dl>
-<dt><code>AuthorSort = [ {FirstFirst} | LastFirst | LastFirstFirstFirst ]</code></dt>
-<dd>specifies the order in which the author names are formatted.
-	<ul>
-		<li><code>FirstFirst</code> : first names are followed by the surname.</li>
-		<li><code>LastFirst</code> : the authors' surnames are followed by their first names, separated by a comma.</li>		
-		<li><code>LastFirstFirstFirst</code> : the first author is formatted as LastFirst, the subsequent authors as FirstFirst.</li>
-	</ul>
-</dd>
-
-<dt><code>AuthorAbbr = [ FullName | LastName | {Initials} | InitialsNoSpace | FirstInitial | MiddleInitial ]</code></dt>
-<dd>specifies how the author names are abbreviated.
-	<ul>
-		<li><code>FullName</code> : shows full author names; first names are not abbreviated.</li>
-		<li><code>LastName</code> : show only surnames, first names are removed.</li> 
-		<li><code>Initials</code> : all first names are abbreviated.</li> 
-		<li><code>InitialsNospace</code> : as Initials, with any spaces between initials removed.</li>
-		<li><code>FirstInitial</code> : only first initial is shown.</li> 
-		<li><code>MiddleInitial</code> : first name is shown, but all middle names are abbreviated.</li>
-	</ul>	
-</dd>
-
-<dt><code>AuthorPunc = [ {FullPunc} | NoPunc | NoComma | NoPeriod ]</code></dt>
-<dd>specifies the punctuation used in the author list when <code>AuthorAbbr</code> is used
-	<ul>
-		<li><code>FullPunc</code> : no changes are made to punctuation.</li>
-		<li><code>NoPunc</code> : all full stops and commas are removed from the author name.</li>
-		<li><code>NoComma</code> : all commas are removed from the author name.</li>
-		<li><code>NoPeriod</code> : all full stops are removed from the author name.</li>
-	</ul>	
-</dd>
-
-<dt><code>AuthorSep = [ {Comma} | And | Colon | Semicolon | Sep=<string> ]</code></dt>
-<dd>specifies the separator to be used between authors. Any separator can be specified, with the <code>Sep=<string></code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd> 
-
-<dt><code>AuthorLastSep = [ Comma | {And} | Colon | Semicolon | Amp | Oxford | LastSep=<string> ]</code></dt>
-<dd>specifies the last separator in the author list. Any separator can be specified, with the <code>LastSep=<string></code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd>
-
-<dt><code>AuthorNumber = [ {inf} | <integer> ]</code></dt>
-<dd>specifies the number of authors that are printed. If the number of authors exceeds the maximum specified, the authorlist is replaced by the first author, followed by <code>EtAlString</code>.</dd>
-
-<dt><code>EtAlString = [ { et al.} | EtAl=<string> ]</code></dt>
-<dd>specifies the string used to replace multiple authors. Any string can be given, using <code>EtAl=<string></code></dd>
-
-</dl>
-
-<p>If an option is unspecified, the default value (shown in curly brackets above) is used. Therefore, only layout options that differ from the defaults need to be specified. The order in which the options are defined is (mostly) irrelevant. So, for example,</p>
-<p><code>\format[Authors(Initials,Oxford)]{\author}</code></p>
-<p>is equivalent to</p>
-<p><code>\format[Authors(Oxford,Initials)]{\author}</code></p>
-<p>As mentioned, the order in which the options are specified is irrelevant. There is one possibility for ambiguity, and that is if both <code>AuthorSep</code> and <code>AuthorLastSep</code> are given. In that case, the first applicable value encountered would be for <code>AuthorSep</code>, and the second for <code>AuthorLastSep</code>. It is good practise to specify both when changing the default, to avoid ambiguity.</p>
-
-<h4>Examples</h4>
-<p>Given the following authors, <i>"Joe James Doe and Mary Jane and Bruce Bar and Arthur Kay"</i> ,the <code>Authors</code> formatter will give the following results:</p>
-<dl>
-<dt><code>Authors()</code>, or equivalently, <code>Authors(FirstFirst,Initials,FullPunc,Comma,And,inf,EtAl= et al.)</code></dt>
-<dd><pre>J. J. Doe, M. Jane, B. Bar and A. Kay</pre></dd>
-
-<dt><code>Authors(LastFirstFirstFirst,MiddleInitial,Semicolon)</code></dt>
-<dd><pre>Doe, Joe J.; Mary Jane; Bruce Bar and Arthur Kay</pre></dd>
-
-<dt><code>Authors(LastFirst,InitialsNoSpace,NoPunc,Oxford)</code></dt>
-<dd><pre>Doe JJ, Jane M, Bar B, and Kay A</pre></dd>
-
-<dt><code>Authors(2,EtAl= and others)</code></dt>
-<dd><pre>J. J. Doe and others</pre></dd>
-</dl>
-<p>Most commonly available citation formats should be possible with this formatter. For even more advanced options, consider using the Custom Formatters detailed below.</p>
-
-<h3>The <code>WrapFileLinks</code> formatter</h3>
-
-<p>This formatter iterates over all file links, or all file links of a specified type, outputting a format string given as the first argument. The format string can contain a number of escape sequences indicating file link information to be inserted into the string.</p>
-<p>This formatter can take an optional second argument specifying the name of a file type. If specified, the iteration will only include those files with a file type matching the given name (case-insensitively). If specified as an empty argument, all file links will be included.</p>
-<p> After the second argument, pairs of additional arguments can be added in order to specify regular expression replacements to be done upon the inserted link information before insertion into the output string. A non-paired argument will be ignored. In order to specify replacements without filtering on file types, use an empty second argument.</p>
-<p>The escape sequences for embedding information are as follows:</p>
-<ul>
-	<li><code>\i</code> : This inserts the iteration index (starting from 1), and can be useful if the output list of files should be enumerated.</li>
-	<li><code>\p</code> : This inserts the file path of the file link.</li>
-	<li><code>\f</code> : This inserts the name of the file link's type.</li>
-	<li><code>\x</code> : This inserts the file's extension, if any.</li>
-	<li><code>\d</code> : This inserts the file link's description, if any.</li>
-</ul>
-<p>For instance, an entry could contain a file link to the file "/home/john/report.pdf" of the "PDF" type with description "John's final report". Using the WrapFileLinks formatter with the following argument:</p>
-<p><code>\format[WrapFileLinks(\i. \d (\p))]{\file}</code></p>
-<p>would give the following output:</p>
-<pre>
-    1. John's final report (/home/john/report.pdf)
-
-</pre>
-<p>If the entry contained a second file link to the file "/home/john/draft.txt" of the "Text file" type with description 'An early "draft"', the output would be as follows:</p>
-<pre>
-    1. John's final report (/home/john/report.pdf)
-    2. An early "draft" (/home/john/draft.txt)
-
-</pre>
-<p>If the formatter was called with a second argument, the list would be filtered. For instance:</p>
-<p><code>\format[WrapFileLinks(\i. \d (\p),,text file)]{\file}</code></p>
-<p> would show only the text file:</p>
-<pre>
-    1. An early "draft" (/home/john/draft.txt)
-
-</pre>
-<p>If we wanted this output to be part of an XML styled output, the quotes in the file description could cause problems. Adding two additional arguments to translate the quotes into XML characters solves this:</p>
-<p><code>\format[WrapFileLinks(\i. \d (\p),,text file,",&quot;)]{\file}</code></p>
-<p>would give the following output:</p>
-<pre>
-    1. An early "draft" (/home/john/draft.txt)
-
-</pre>
-<p>Additional pairs of replacements could be added.</p>
-
-
-    <h3>Custom formatters</h3>
-    <p>If none of the available formatters can do what you want to
-    achieve, you can add your own by implementing the
-    <code>net.sf.jabref.export.layout.LayoutFormatter</code>
-    interface. If you insert your class into the
-    <code>net.sf.jabref.export.layout.format</code> package, you
-    can call the formatter by its class name only, like with the
-    standard formatters. Otherwise, you must call the formatter by
-    its fully qualified name (including package name). In any case,
-    the formatter must be in your classpath when running
-    JabRef.</p>
-
-    <h2><a name="NameFormatter"
-       id="NameFormatter">Using Custom Name Formatters</a></h2>
-
-    <p>From JabRef 2.2, it is possible to define custom name
-    formatters using the bibtex-sty-file syntax. This allows
-    ultimate flexibility, but is a cumbersome to write</p>
-
-    <p>You can define your own formatter in the preference tab
-    "Name Formatter" using the following format and then use it
-    with the name given to it as any other formatter</p>
-    <code><case1>@<range11>@<format>@<range12>@<format>@<range13>...@@<br />
-
-     <case2>@<range21>@... and so on.</code>
-
-    <p>This format first splits the task to format a list of author
-    into cases depending on how many authors there are (this is
-    since some formats differ depending on how many authors there
-    are). Each individual case is separated by @@ and contains
-    instructions on how to format each author in the case. These
-    instructions are separated by a @.</p>
-
-    <p>Cases are identified using integers (1, 2, 3, etc.) or the
-    character * (matches any number of authors) and will tell the
-    formatter to apply the following instructions if there are a
-    number of less or equal of authors given.</p>
-
-    <p>Ranges are either
-    <code><integer>..<integer></code>,
-    <code><integer></code> or the character <code>*</code>
-    using a 1 based index for indexing authors from the given list
-    of authors. Integer indexes can be negative to denote them to
-    start from the end of the list where -1 is the last author.</p>
-
-    <p>For instance with an authorlist of "Joe Doe and Mary Jane
-    and Bruce Bar and Arthur Kay":</p>
-
-    <ul>
-        <li>1..3 will affect Joe, Mary and Bruce</li>
-
-        <li>4..4 will affect Arthur</li>
-
-        <li>* will affect all of them</li>
-
-        <li>2..-1 will affect Mary, Bruce and Arthur</li>
-    </ul>
-
-    <p>The <code><format></code>-strings use the Bibtex
-    formatter format:</p>
-
-    <p>The four letters v, f, l, j indicate the name parts von,
-    first, last, jr which are used within curly braces. A single
-    letter v, f, l, j indicates that the name should be
-    abbreviated. If one of these letters or letter pairs is
-    encountered JabRef will output all the respective names
-    (possibly abbreviated), but the whole expression in curly
-    braces is only printed if the name part exists.</p>
-
-    <p>For instance if the format is "{ll} {vv {von Part}} {ff}"
-    and the names are "Mary Kay and John von Neumann", then JabRef
-    will output "Kay Mary" (with two space between last and first)
-    and "Neuman von von Part John".</p>
-
-    <p>I give two examples but would rather point you to the bibtex
-    documentation.</p>
-
-    <p>Small example: <code>"{ll}, {f.}"</code> will turn
-    <code>"Joe Doe"</code> into <code>"Doe, J."</code></p>
-
-    <p>Large example:</p>
-
-    <blockquote>
-        <p>To turn:</p>
-
-        <p><code>"Joe Doe and Mary Jane and Bruce Bar and Arthur
-        Kay"</code></p>
-
-        <p>into</p>
-
-        <p><code>"Doe, J., Jane, M., Bar, B. and Kay,
-        A."</code></p>
-
-        <p>you would use</p>
-
-        <p><code>1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll},
-        {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll},
-        {f}.</code></p>
-    </blockquote>
-
-    <p>If somebody would like to write a better tutorial about
-    this: Write a mail to one of the JabRef mailinglists!</p>
-
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Custom export filters</h1>
+
+    <p>JabRef allows you to define and
+    use your own export filters, in the same way as the standard
+    export filters are defined. An export filter is defined by one
+    or more <i>layout files</i>, which with the help of a
+    collection of built-in formatter routines specify the format of
+    the exported files. Your layout files must be prepared in a
+    text editor outside of JabRef.</p>
+
+    <h2>Adding a custom export filter</h2>
+
+    <p>The only requirement for
+    a valid export filter is the existence of a file with the
+    extension <b>.layout</b>. To add a new custom export filter,
+    open the dialog box <b>Options -> Manage custom exports</b>,
+    and click <b>Add new</b>. A new dialog box will appear,
+    allowing you to specify a name for the export filter (which
+    will appear as one of the choices in the File type dropdown
+    menu of the file dialog when you use the <b>File ->
+    Export</b> menu choice in the JabRef window), the path to the
+    <b>.layout</b> file, and the preferred file extension for the
+    export filter (which will be the suggested extension in the
+    file dialog when you use the export filter).</p>
+
+    <h2>Creating the export filter</h2>
+
+    <p>To see examples of how export filters are made, look for
+    the package containing the layout files for the standard
+    export filters on our download page.</p>
+
+    <h3>Layout files</h3>
+
+    <p>Let us assume that we are creating an HTML export filter.</p>
+
+    <p>While the export filter only needs to consist of a single
+    <b>.layout</b> file, which in this case could be called
+    <i>html.layout</i>, you may also want to add two files called
+    <i>html.begin.layout</i> and <i>html.end.layout</i>. The former
+    contains the header part of the output, and the latter the
+    footer part. JabRef will look for these two files whenever the
+    export filter is used, and if found, either of these will be
+    copied verbatim to the output before or after the individual
+    entries are written.</p>
+
+    <p>Note that these files must reside in the same directory as
+    <i>html.layout</i>, and must be named by inserting
+    <b>.begin</b> and <b>.end</b>, respectively.</p>
+
+    <p>In our example export filter, these could look like the
+    following:</p>
+
+    <p><i>html.begin.layout</i>:<br />
+    <code><HTML><br />
+     <BODY> text="#275856"><br />
+    <basefont size="4" color="#2F4958"
+    face="arial"></code></p>
+
+    <p><i>html.end.layout</i>:<br />
+    <code></BODY><br />
+     </HTML></code></p>
+
+    <p>The file <i>html.layout</i> provides the <i>default</i>
+    template for exporting one single entry. If you want to use
+    different templates for different entry types, you can do this
+    by adding entry-specific <b>.layout</b> files. These must also
+    reside in the same directory as the main layout file, and are
+    named by inserting <b>.entrytype</b> into the name of the main
+    layout file. The entry type name must be in all lowercase. In
+    our example, we might want to add a template for book entries,
+    and this would go into the file <i>html.book.layout</i>. For a
+    PhD thesis we would add the file <i>html.phdthesis.layout</i>,
+    and so on. These files are similar to the default layout file,
+    except that they will only be used for entries of the matching
+    type. Note that the default file can easily be made general
+    enough to cover most entry types in most export filters.</p>
+
+    <h3>The layout file format</h3>
+
+    <p>Layout files are created using a
+    simple markup format where commands are identified by a
+    preceding backslash. All text not identified as part of a
+    command will be copied verbatim to the output file.</p>
+
+    <h3>Field commands</h3>
+
+    <p>An arbitrary word preceded by a backslash, e.g.
+    <code>\author</code>, <code>\editor</code>, <code>\title</code>
+    or <code>\year</code>, will be interpreted as a reference to
+    the corresponding field, which will be copied directly to the
+    output.</p>
+
+    <h3>Field formatters</h3>
+
+    <p>Often there will be a need for some preprocessing of the
+    field contents before output. This is done using a <i>field
+    formatter</i> - a java class containing a single method that
+    manipulates the contents of a field.</p>
+
+    <p>A formatter is used by inserting the <code>\format</code>
+    command followed by the formatter name in square braces, and
+    the field command in curly braces, e.g.:</p>
+
+    <p><code>\format[ToLowerCase]{\author}</code></p>
+
+    <p>You can also specify multiple formatters separated by
+    commas. These will be called sequentially, from left to right,
+    e.g.</p>
+
+    <p><code>\format[ToLowerCase,HTMLChars]{\author}</code></p>
+
+    <p>will cause the formatter <b>ToLowerCase</b> to be called
+    first, and then <b>HTMLChars</b> will be called to format the
+    result. You can list an arbitrary number of formatters in this
+    way.</p>
+
+    <p>The argument to the formatters, withing the curly braces,
+    does not have to be a field command. Instead, you can insert
+    normal text, which will then be passed to the formatters
+    instead of the contents of any field. This can be useful for
+    some fomatters, e.g. the CurrentDate formatter (described
+    below).</p>
+
+    <p>Some formatters take an extra argument, given in parentheses
+    immediately after the formatter name. The argument can be enclosed
+    in quotes, which is necessary if it includes the parenthesis characters.
+    For instance, <code>\format[Replace("\s,_")]{\journal}</code> calls
+    the <b>Replace</b> formatter with the argument <b>\s,_</b> (which results
+    in the "journal" field after replacing all whitespace by underscores).
+    </p>
+
+    <p>See below for a list of built-in export formatters.</p>
+
+    <h3>Conditional output</h3>
+
+    <p>Some static output might only make
+    sense if a specific field is set. For instance, say we want to
+    follow the editor names with the text <code>(Ed.)</code>. This
+    can be done with the following text:</p>
+
+    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
+    (Ed.)</code></p>
+
+    <p>However, if the <code>editor</code> field has not been set -
+    it might not even make sense for the entry being exported - the
+    <code>(Ed.)</code> would be left hanging. This can be prevented
+    by instead using the <code>\begin</code> and <code>\end</code>
+    commands:</p>
+
+    <p><code>\begin{editor}<br />
+    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br />
+     \end{editor}</code></p>
+
+    <p>The <code>\begin</code> and <code>\end</code> commands make
+    sure the text in between is printed if and only if the field
+    referred in the curly braces is defined for the entry being
+    exported.</p>
+
+    <p>A conditional block can also be dependent on more than one field. In this case
+    the contents of the block are printed only if all the fields are defined. To make
+    such a block, simply give the list of fields separated by semicolons. For instance,
+    to output text only if both <code>year</code> and <code>month</code> are set, use
+    a block like the following:</p>
+
+    <p><code>\begin{year;month}Month: \format[HTMLChars]{\month}\end{year;month}</code></p>
+
+    <p>which will print "Month: " plus the contents of the <code>month</code> field, but
+    only if also the <code>year</code> field is defined.</p>
+
+    <p><b>Note:</b> Use of the <code>\begin</code> and
+    <code>\end</code> commands is a key to creating layout files
+    that work well with a variety of entry types.</p>
+
+    <h3>Grouped output</h3>
+
+    <p>If you wish to separate your entries
+    into groups based on a certain field, use the grouped output
+    commands. Grouped output is very similar to conditional output,
+    except that the text in between is printed only if the field
+    referred in the curly braces has changed value.</p>
+
+    <p>For example, let's assume I wish to group by keyword. Before
+    exporting the file, make sure you have sorted your entries
+    based on keyword. Now use the following commands to group by
+    keyword:</p>
+
+    <p><code>\begingroup{keywords}New Category:
+    \format[HTMLChars]{\keywords}<br />
+     \endgroup{keywords}</code></p>
+
+    <h2>Sharing your work</h2>
+
+    <p>With external layout files, it's
+    fairly simple to share custom export formats between users. If
+    you write an export filter for a format not supported by
+    JabRef, or an improvement over an existing one, we encourage
+    you to post your work on our SourceForge.net page. The same
+    goes for formatter classes that you write. We'd be happy to
+    distribute a collection of submitted layout files, or to add to
+    the selection of standard export filters and formatters.</p>
+
+    <p>Starting with JabRef 2.4 you can also package your 
+	ExportFormat or LayoutFormatter as a plug-in. If you do so,
+	you can provide a single zip-file to other user to make use
+	of your ExportFormat. For an example download the JabRef
+	source release and have a look at the directory
+	<code>src/plugins/</code>. Don't hesitate to stop by the
+	forums on Sourceforge, since we don't have extensive documentation, yet.</p>
+
+
+    <h2>Built-in export formatters</h2>
+
+    <p>JabRef provides the following set of formatters:</p>
+
+    <ul>
+        <li><code>Authors</code> : this formatter provides formatting options for the author and editor fields; for detailed information, see below. It deprecates a range of dedicated formatters provided in versions of JabRef prior to 2.7.</li>
+
+        <li><code>CreateDocBookAuthors</code> : formats the author
+        field in DocBook style.</li>
+
+        <li><code>CreateDocBookEditors</code> : to be
+        documented.</li>
+
+        <li><code>CurrentDate</code> : outputs the current date.
+        With no argument, this formatter outputs the current date
+        and time in the format "yyyy.MM.dd hh:mm:ss z" (date, time
+        and time zone). By giving a different format string as
+        argument, the date format can be customized. E.g.
+        <code>\format[CurrentDate]{yyyy.MM.dd}</code> will give the
+        date only, e.g. 2005.11.30.</li>
+
+        <li><code>Default</code> : takes a single argument, which serves as a default value.
+        If the string to format is non-empty, it is output without changes. If it is empty,
+        the default value is output. For instance, <code>\format[Default(unknown)]{\year}</code>
+        will output the entry's year if set, and "unknown" if no year is set.</li>
+	
+        <li><code>DOIStrip</code> : strips any prefixes from the DOI string.</li>
+        <li><code>DOICheck</code> : provides the full url for a DOI link.</li>
+
+        <li><code>FileLink(filetype)</code> : if no argument is given, this formatter outputs
+        the first external file link encoded in the field. To work, the formatter must
+        be supplied with the contents of the "file" field.
+        <p>This formatter takes the name of an external file type as an optional argument,
+        specified in parentheses after the formatter name. For instance,
+        <code>\format[FileLink(pdf)]{\file}</code> specifies <code>pdf</code> as an
+        argument. When an argument is given, the formatter selects the first file
+        link of the specified type. In the example, the path to the first PDF link will
+        be output.</p></li>
+
+        <li><code>FirstPage</code> : returns the first page from the "pages" field, if set.
+            For instance, if the pages field is set to "345-360" or "345--360",
+            this formatter will return "345".</li>
+
+        <li><code>FormatPagesForHTML</code> : replaces "--" with "-".</li>
+
+        <li><code>FormatPagesForXML</code> : replaces "--" with an XML en-dash.</li>
+
+        <li><code>GetOpenOfficeType</code> : returns the number used by the OpenOffice.org
+        bibliography system (versions 1.x and 2.x) to denote the type of this entry.</li>
+
+        <li><code>HTMLChars</code> : replaces TeX-specific special
+        characters (e.g. {\^a} or {\"{o}}) with their HTML
+        representations, and translates LaTeX commands \emph, \textit,
+        \textbf into HTML equivalents.</li>
+
+        <li><code>HTMLParagraphs</code> : interprets two
+        consecutive newlines (e.g. \n \n) as the beginning of a new
+        paragraph and creates paragraph-html-tags accordingly.</li>
+
+        <li><code>IfPlural</code> : outputs its first argument if the input field looks
+        like an author list with two or more names, or its second argument otherwise.
+        E.g. <code>\format[IfPlural(Eds.,Ed.)]{\editor}</code> will output "Eds." if there
+        is more than one editor, and "Ed." if there is only one.</li>
+
+        <li><code>LastPage</code> : returns the last page from the "pages" field, if set.
+            For instance, if the pages field is set to "345-360" or "345--360",
+            this formatter will return "360".</li>
+
+        <li><code>Number</code> : outputs the 1-based sequence number of the current entry in the
+        current export. This formatter can be used to make a numbered list of entries. The
+        sequence number depends on the current entry's place in the current sort order, not on
+        the number of calls to this formatter.</li>
+
+        <li><code>RemoveBrackets</code> : removes all curly brackets "{" or "}".</li>
+
+        <li><code>RemoveBracketsAddComma</code> : to be documented.</li>
+
+        <li><code>RemoveLatexCommands</code> : removes LaTeX
+        commands like <code>\em</code>, <code>\textbf</code>, etc.
+        If used together with <code>HTMLChars</code> or
+        <code>XMLChars</code>, this formatter should be called
+        last.</li>
+
+        <li><code>RemoveTilde</code> : replaces the tilde character
+        used in LaTeX as a non-breakable space by a regular space.
+        Useful in combination with the NameFormatter discussed in
+        the next section.</li>
+
+        <li><code>RemoveWhitespace</code> : removes all whitespace characters.</li>
+
+        <li><code>Replace(regexp,replacewith)</code> : does a regular expression replacement.
+        To use this formatter, a two-part argument must be given. The parts are
+        separated by a comma. To indicate the comma character, use an escape
+        sequence: \,<br/> <br/>
+        The first part is the regular expression to search for. Remember that any commma
+        character must be preceded by a backslash, and consequently a literal backslash must
+        be written as a pair of backslashes. A description of Java regular expressions can be
+        found at:<br/>
+         http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
+         <br/> <br/>
+        The second part is the text to replace all matches with.</li>
+
+        <li><code>RTFChars</code> : replaces TeX-specific special
+        characters (e.g. {\^a} or {\"{o}}) with their RTF
+        representations, and translates LaTeX commands \emph, \textit,
+        \textbf into RTF equivalents.</li>
+
+        <li><code>ToLowerCase</code> : turns all characters into
+        lower case.</li>
+
+        <li><code>ToUpperCase</code> : turns all characters into
+        upper case.</li>
+
+        <li><code>WrapContent</code> : This formatter outputs the input value after adding a
+        prefix and a postfix, as long as the input value is non-empty. If the input value
+        is empty, an empty string is output (the prefix and postfix are not output in this case).
+        The formatter requires an argument containing the prefix and postix separated
+        by a comma. To include the comma character in either, use an escape sequence
+        (\,).</li>
+
+        <li><code>WrapFileLinks</code> : See below.</li>
+
+        <li><code>XMLChars</code> : replaces TeX-specific special
+        characters (e.g. {\^a} or {\"{o}}) with their XML
+        representations.</li>
+
+    </ul>
+
+<h3>The <code>Authors</code> formatter</h3>
+
+<p>To accommodate for the numerous citation styles, the <code>Authors</code> formatter allows flexible control over the layout of the author list. The formatter takes a comma-separated list of options, by which the default values can be overridden. The following option/value pairs are currently available, where the default values are given in curly brackets.</p>
+<dl>
+<dt><code>AuthorSort = [ {FirstFirst} | LastFirst | LastFirstFirstFirst ]</code></dt>
+<dd>specifies the order in which the author names are formatted.
+	<ul>
+		<li><code>FirstFirst</code> : first names are followed by the surname.</li>
+		<li><code>LastFirst</code> : the authors' surnames are followed by their first names, separated by a comma.</li>		
+		<li><code>LastFirstFirstFirst</code> : the first author is formatted as LastFirst, the subsequent authors as FirstFirst.</li>
+	</ul>
+</dd>
+
+<dt><code>AuthorAbbr = [ FullName | LastName | {Initials} | InitialsNoSpace | FirstInitial | MiddleInitial ]</code></dt>
+<dd>specifies how the author names are abbreviated.
+	<ul>
+		<li><code>FullName</code> : shows full author names; first names are not abbreviated.</li>
+		<li><code>LastName</code> : show only surnames, first names are removed.</li> 
+		<li><code>Initials</code> : all first names are abbreviated.</li> 
+		<li><code>InitialsNospace</code> : as Initials, with any spaces between initials removed.</li>
+		<li><code>FirstInitial</code> : only first initial is shown.</li> 
+		<li><code>MiddleInitial</code> : first name is shown, but all middle names are abbreviated.</li>
+	</ul>	
+</dd>
+
+<dt><code>AuthorPunc = [ {FullPunc} | NoPunc | NoComma | NoPeriod ]</code></dt>
+<dd>specifies the punctuation used in the author list when <code>AuthorAbbr</code> is used
+	<ul>
+		<li><code>FullPunc</code> : no changes are made to punctuation.</li>
+		<li><code>NoPunc</code> : all full stops and commas are removed from the author name.</li>
+		<li><code>NoComma</code> : all commas are removed from the author name.</li>
+		<li><code>NoPeriod</code> : all full stops are removed from the author name.</li>
+	</ul>	
+</dd>
+
+<dt><code>AuthorSep = [ {Comma} | And | Colon | Semicolon | Sep=<string> ]</code></dt>
+<dd>specifies the separator to be used between authors. Any separator can be specified, with the <code>Sep=<string></code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd> 
+
+<dt><code>AuthorLastSep = [ Comma | {And} | Colon | Semicolon | Amp | Oxford | LastSep=<string> ]</code></dt>
+<dd>specifies the last separator in the author list. Any separator can be specified, with the <code>LastSep=<string></code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd>
+
+<dt><code>AuthorNumber = [ {inf} | <integer> ]</code></dt>
+<dd>specifies the number of authors that are printed. If the number of authors exceeds the maximum specified, the authorlist is replaced by the first author, followed by <code>EtAlString</code>.</dd>
+
+<dt><code>EtAlString = [ { et al.} | EtAl=<string> ]</code></dt>
+<dd>specifies the string used to replace multiple authors. Any string can be given, using <code>EtAl=<string></code></dd>
+
+</dl>
+
+<p>If an option is unspecified, the default value (shown in curly brackets above) is used. Therefore, only layout options that differ from the defaults need to be specified. The order in which the options are defined is (mostly) irrelevant. So, for example,</p>
+<p><code>\format[Authors(Initials,Oxford)]{\author}</code></p>
+<p>is equivalent to</p>
+<p><code>\format[Authors(Oxford,Initials)]{\author}</code></p>
+<p>As mentioned, the order in which the options are specified is irrelevant. There is one possibility for ambiguity, and that is if both <code>AuthorSep</code> and <code>AuthorLastSep</code> are given. In that case, the first applicable value encountered would be for <code>AuthorSep</code>, and the second for <code>AuthorLastSep</code>. It is good practise to specify both when changing the default, to avoid ambiguity.</p>
+
+<h4>Examples</h4>
+<p>Given the following authors, <i>"Joe James Doe and Mary Jane and Bruce Bar and Arthur Kay"</i> ,the <code>Authors</code> formatter will give the following results:</p>
+<dl>
+<dt><code>Authors()</code>, or equivalently, <code>Authors(FirstFirst,Initials,FullPunc,Comma,And,inf,EtAl= et al.)</code></dt>
+<dd><pre>J. J. Doe, M. Jane, B. Bar and A. Kay</pre></dd>
+
+<dt><code>Authors(LastFirstFirstFirst,MiddleInitial,Semicolon)</code></dt>
+<dd><pre>Doe, Joe J.; Mary Jane; Bruce Bar and Arthur Kay</pre></dd>
+
+<dt><code>Authors(LastFirst,InitialsNoSpace,NoPunc,Oxford)</code></dt>
+<dd><pre>Doe JJ, Jane M, Bar B, and Kay A</pre></dd>
+
+<dt><code>Authors(2,EtAl= and others)</code></dt>
+<dd><pre>J. J. Doe and others</pre></dd>
+</dl>
+<p>Most commonly available citation formats should be possible with this formatter. For even more advanced options, consider using the Custom Formatters detailed below.</p>
+
+<h3>The <code>WrapFileLinks</code> formatter</h3>
+
+<p>This formatter iterates over all file links, or all file links of a specified type, outputting a format string given as the first argument. The format string can contain a number of escape sequences indicating file link information to be inserted into the string.</p>
+<p>This formatter can take an optional second argument specifying the name of a file type. If specified, the iteration will only include those files with a file type matching the given name (case-insensitively). If specified as an empty argument, all file links will be included.</p>
+<p> After the second argument, pairs of additional arguments can be added in order to specify regular expression replacements to be done upon the inserted link information before insertion into the output string. A non-paired argument will be ignored. In order to specify replacements without filtering on file types, use an empty second argument.</p>
+<p>The escape sequences for embedding information are as follows:</p>
+<ul>
+	<li><code>\i</code> : This inserts the iteration index (starting from 1), and can be useful if the output list of files should be enumerated.</li>
+	<li><code>\p</code> : This inserts the file path of the file link.</li>
+	<li><code>\f</code> : This inserts the name of the file link's type.</li>
+	<li><code>\x</code> : This inserts the file's extension, if any.</li>
+	<li><code>\d</code> : This inserts the file link's description, if any.</li>
+</ul>
+<p>For instance, an entry could contain a file link to the file "/home/john/report.pdf" of the "PDF" type with description "John's final report". Using the WrapFileLinks formatter with the following argument:</p>
+<p><code>\format[WrapFileLinks(\i. \d (\p))]{\file}</code></p>
+<p>would give the following output:</p>
+<pre>
+    1. John's final report (/home/john/report.pdf)
+
+</pre>
+<p>If the entry contained a second file link to the file "/home/john/draft.txt" of the "Text file" type with description 'An early "draft"', the output would be as follows:</p>
+<pre>
+    1. John's final report (/home/john/report.pdf)
+    2. An early "draft" (/home/john/draft.txt)
+
+</pre>
+<p>If the formatter was called with a second argument, the list would be filtered. For instance:</p>
+<p><code>\format[WrapFileLinks(\i. \d (\p),,text file)]{\file}</code></p>
+<p> would show only the text file:</p>
+<pre>
+    1. An early "draft" (/home/john/draft.txt)
+
+</pre>
+<p>If we wanted this output to be part of an XML styled output, the quotes in the file description could cause problems. Adding two additional arguments to translate the quotes into XML characters solves this:</p>
+<p><code>\format[WrapFileLinks(\i. \d (\p),,text file,",&quot;)]{\file}</code></p>
+<p>would give the following output:</p>
+<pre>
+    1. An early "draft" (/home/john/draft.txt)
+
+</pre>
+<p>Additional pairs of replacements could be added.</p>
+
+
+    <h3>Custom formatters</h3>
+    <p>If none of the available formatters can do what you want to
+    achieve, you can add your own by implementing the
+    <code>net.sf.jabref.export.layout.LayoutFormatter</code>
+    interface. If you insert your class into the
+    <code>net.sf.jabref.export.layout.format</code> package, you
+    can call the formatter by its class name only, like with the
+    standard formatters. Otherwise, you must call the formatter by
+    its fully qualified name (including package name). In any case,
+    the formatter must be in your classpath when running
+    JabRef.</p>
+
+    <h2><a name="NameFormatter"
+       id="NameFormatter">Using Custom Name Formatters</a></h2>
+
+    <p>From JabRef 2.2, it is possible to define custom name
+    formatters using the bibtex-sty-file syntax. This allows
+    ultimate flexibility, but is a cumbersome to write</p>
+
+    <p>You can define your own formatter in the preference tab
+    "Name Formatter" using the following format and then use it
+    with the name given to it as any other formatter</p>
+    <code><case1>@<range11>@<format>@<range12>@<format>@<range13>...@@<br />
+
+     <case2>@<range21>@... and so on.</code>
+
+    <p>This format first splits the task to format a list of author
+    into cases depending on how many authors there are (this is
+    since some formats differ depending on how many authors there
+    are). Each individual case is separated by @@ and contains
+    instructions on how to format each author in the case. These
+    instructions are separated by a @.</p>
+
+    <p>Cases are identified using integers (1, 2, 3, etc.) or the
+    character * (matches any number of authors) and will tell the
+    formatter to apply the following instructions if there are a
+    number of less or equal of authors given.</p>
+
+    <p>Ranges are either
+    <code><integer>..<integer></code>,
+    <code><integer></code> or the character <code>*</code>
+    using a 1 based index for indexing authors from the given list
+    of authors. Integer indexes can be negative to denote them to
+    start from the end of the list where -1 is the last author.</p>
+
+    <p>For instance with an authorlist of "Joe Doe and Mary Jane
+    and Bruce Bar and Arthur Kay":</p>
+
+    <ul>
+        <li>1..3 will affect Joe, Mary and Bruce</li>
+
+        <li>4..4 will affect Arthur</li>
+
+        <li>* will affect all of them</li>
+
+        <li>2..-1 will affect Mary, Bruce and Arthur</li>
+    </ul>
+
+    <p>The <code><format></code>-strings use the Bibtex
+    formatter format:</p>
+
+    <p>The four letters v, f, l, j indicate the name parts von,
+    first, last, jr which are used within curly braces. A single
+    letter v, f, l, j indicates that the name should be
+    abbreviated. If one of these letters or letter pairs is
+    encountered JabRef will output all the respective names
+    (possibly abbreviated), but the whole expression in curly
+    braces is only printed if the name part exists.</p>
+
+    <p>For instance if the format is "{ll} {vv {von Part}} {ff}"
+    and the names are "Mary Kay and John von Neumann", then JabRef
+    will output "Kay Mary" (with two space between last and first)
+    and "Neuman von von Part John".</p>
+
+    <p>I give two examples but would rather point you to the bibtex
+    documentation.</p>
+
+    <p>Small example: <code>"{ll}, {f.}"</code> will turn
+    <code>"Joe Doe"</code> into <code>"Doe, J."</code></p>
+
+    <p>Large example:</p>
+
+    <blockquote>
+        <p>To turn:</p>
+
+        <p><code>"Joe Doe and Mary Jane and Bruce Bar and Arthur
+        Kay"</code></p>
+
+        <p>into</p>
+
+        <p><code>"Doe, J., Jane, M., Bar, B. and Kay,
+        A."</code></p>
+
+        <p>you would use</p>
+
+        <p><code>1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll},
+        {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll},
+        {f}.</code></p>
+    </blockquote>
+
+    <p>If somebody would like to write a better tutorial about
+    this: Write a mail to one of the JabRef mailinglists!</p>
+
+
+</body>
+</html>
diff --git a/src/help/ja/CustomImports.html b/src/help/ja/CustomImports.html
index fe986ff..88f7269 100644
--- a/src/help/ja/CustomImports.html
+++ b/src/help/ja/CustomImports.html
@@ -1,151 +1,151 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Custom import filters</h1>
-
-    <p>JabRef allows you to define and use your own importers, in
-    very much the same way as the standard import filters are
-    defined. An import filter is defined by one or more Java
-    <i>classes</i>, which parse the contents of a file from an
-    input stream and create BibTex-Entries. So with some basic Java
-    programming you can add an importer for your favorite source of
-    references or register a new, improved version of an existing
-    importer. Also, this allows you to add compiled custom
-    importers that you might have obtained e.g. from SourceForge
-    without rebuilding JabRef (see "Sharing your work").</p>
-
-    <p>Custom importers take precedence over standard importers.
-    This way, you can override existing importers for the
-    Autodetect and Command Line features of JabRef. Custom
-    importers are ordered by name.</p>
-
-    <h2>Adding a custom import filter</h2>
-
-    <p>Make sure, you have a compiled custom import filter (one or
-    more <code>.class</code> files as described below) and the
-    class files are in a directory structure according to their
-    package structure. To add a new custom import filter, open the
-    dialog box <b>Options -> Manage custom imports</b>, and
-    click <b>Add from folder</b>. A file chooser will appear,
-    allowing you to select the classpath of your importer, i.e. the
-    directory where the top folder of the package structure of your
-    importer resides. In a second file chooser you select your
-    importer class file, which must be derived from
-    <code>ImportFormat</code>. By clicking <b>Select new
-    ImportFormat Subclass</b>, your new importer will appear in the
-    list of custom import filters. All custom importers will appear
-    in the <b>File -> Import -> Custom Importers</b> and
-    <b>File -> Import and Append -> Custom Importers</b>
-    submenus of the JabRef window.</p>
-
-    <p>Please note that if you move the class to another directory
-    you will have to remove and re-add the importer. If you add a
-    custom importer under a name that already exists, the existing
-    importer will be replaced. Although in some cases it is
-    possible to update an existing custom importer without
-    restarting JabRef (when the importer is not on the classpath),
-    we recommend restarting JabRef after updating an
-    custom-importer. You can also register importers contained in a
-    ZIP- or JAR-file, simply select the Zip- or Jar-archive, then
-    the entry (class-file) that represents the new importer.</p>
-
-    <h2>Creating an import filter</h2>
-
-    <p>For examples and some helpful
-    files on how to build your own importer, please check our
-    download page.</p>
-
-    <h3>A simple example</h3>
-
-    <p>Let us assume that we want to import files of the following
-    form:</p>
-    <pre>
-1936;John Maynard Keynes;The General Theory of Employment, Interest and Money
-2003;Boldrin & Levine;Case Against Intellectual Monopoly
-2004;ROBERT HUNT AND JAMES BESSEN;The Software Patent Experiment
-</pre><br />
-    <br />
-
-    <p>In your favorite IDE or text editor create a class derived
-    from <code>ImportFormat</code> that implements methods
-    <code>getFormatName()</code>, <code>isRecognizedFormat</code>
-    and <code>importEntries()</code>. Here is an example:</p>
-    <pre>
-import java.io.*;
-import java.util.*;
-import net.sf.jabref.*;
-import net.sf.jabref.imports.ImportFormat;
-import net.sf.jabref.imports.ImportFormatReader;
-
-public class SimpleCsvImporter extends ImportFormat {
-
-  public String getFormatName() {
-    return "Simple CSV Importer";
-  }
-
-  public boolean isRecognizedFormat(InputStream stream) throws IOException {
-    return true; // this is discouraged except for demonstration purposes
-  }
-
-  public List importEntries(InputStream stream) throws IOException {
-        ArrayList bibitems = new ArrayList();
-    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-
-    String line = in.readLine();
-    while (line != null) {
-      if (!"".equals(line.trim())) {
-        String[] fields = line.split(";");
-        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
-        be.setType(BibtexEntryType.getType("techreport"));
-        be.setField("year", fields[0]);
-        be.setField("author", fields[1]);
-        be.setField("title", fields[2]);
-        bibitems.add(be);
-        line = in.readLine();
-      }
-    }
-        return bibitems;
-  }
-}
-</pre><br />
-    <br />
-
-    <p>Note that the example is in the default package. Suppose you
-    have saved it under
-    <code>/mypath/SimpleCsvImporter.java</code>. Also suppose the
-    JabRef-2.0.jar is in the same folder as
-    <code>SimpleCsvImporter.java</code> and Java is on your command
-    path. Compile it using a JSDK 1.4 e.g. with</p>
-    <pre>
-javac -classpath JabRef-2.0.jar SimpleCsvImporter.java
-</pre>Now there should be a file
-<code>/mypath/SimpleCsvImporter.class</code>.<br />
-    <br />
-
-
-    <p>In JabRef, open <b>Options -> Manage custom imports</b>,
-    and click <b>Add from folder</b>. Navigate to
-    <code>/mypath</code> and click the <b>Select ...</b> button.
-    Select the <code>SimpleCsvImporter.class</code> and click the
-    <b>Select ...</b> button. Your importer should now appear in
-    the list of custom importers under the name "Simple CSV
-    Importer" and, after you click <b>Close</b> also in the <b>File
-    -> Import -> Custom Importers</b> and <b>File ->
-    Import and Append -> Custom Importers</b> submenus of the
-    JabRef window.</p>
-
-    <h2>Sharing your work</h2>
-
-    <p>With custom importer files, it's fairly simple to share
-    custom import formats between users. If you write an import
-    filter for a format not supported by JabRef, or an improvement
-    over an existing one, we encourage you to post your work on our
-    SourceForge.net page. We'd be happy to distribute a collection
-    of submitted import files, or to add to the selection of
-    standard importers.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Custom import filters</h1>
+
+    <p>JabRef allows you to define and use your own importers, in
+    very much the same way as the standard import filters are
+    defined. An import filter is defined by one or more Java
+    <i>classes</i>, which parse the contents of a file from an
+    input stream and create BibTex-Entries. So with some basic Java
+    programming you can add an importer for your favorite source of
+    references or register a new, improved version of an existing
+    importer. Also, this allows you to add compiled custom
+    importers that you might have obtained e.g. from SourceForge
+    without rebuilding JabRef (see "Sharing your work").</p>
+
+    <p>Custom importers take precedence over standard importers.
+    This way, you can override existing importers for the
+    Autodetect and Command Line features of JabRef. Custom
+    importers are ordered by name.</p>
+
+    <h2>Adding a custom import filter</h2>
+
+    <p>Make sure, you have a compiled custom import filter (one or
+    more <code>.class</code> files as described below) and the
+    class files are in a directory structure according to their
+    package structure. To add a new custom import filter, open the
+    dialog box <b>Options -> Manage custom imports</b>, and
+    click <b>Add from folder</b>. A file chooser will appear,
+    allowing you to select the classpath of your importer, i.e. the
+    directory where the top folder of the package structure of your
+    importer resides. In a second file chooser you select your
+    importer class file, which must be derived from
+    <code>ImportFormat</code>. By clicking <b>Select new
+    ImportFormat Subclass</b>, your new importer will appear in the
+    list of custom import filters. All custom importers will appear
+    in the <b>File -> Import -> Custom Importers</b> and
+    <b>File -> Import and Append -> Custom Importers</b>
+    submenus of the JabRef window.</p>
+
+    <p>Please note that if you move the class to another directory
+    you will have to remove and re-add the importer. If you add a
+    custom importer under a name that already exists, the existing
+    importer will be replaced. Although in some cases it is
+    possible to update an existing custom importer without
+    restarting JabRef (when the importer is not on the classpath),
+    we recommend restarting JabRef after updating an
+    custom-importer. You can also register importers contained in a
+    ZIP- or JAR-file, simply select the Zip- or Jar-archive, then
+    the entry (class-file) that represents the new importer.</p>
+
+    <h2>Creating an import filter</h2>
+
+    <p>For examples and some helpful
+    files on how to build your own importer, please check our
+    download page.</p>
+
+    <h3>A simple example</h3>
+
+    <p>Let us assume that we want to import files of the following
+    form:</p>
+    <pre>
+1936;John Maynard Keynes;The General Theory of Employment, Interest and Money
+2003;Boldrin & Levine;Case Against Intellectual Monopoly
+2004;ROBERT HUNT AND JAMES BESSEN;The Software Patent Experiment
+</pre><br />
+    <br />
+
+    <p>In your favorite IDE or text editor create a class derived
+    from <code>ImportFormat</code> that implements methods
+    <code>getFormatName()</code>, <code>isRecognizedFormat</code>
+    and <code>importEntries()</code>. Here is an example:</p>
+    <pre>
+import java.io.*;
+import java.util.*;
+import net.sf.jabref.*;
+import net.sf.jabref.imports.ImportFormat;
+import net.sf.jabref.imports.ImportFormatReader;
+
+public class SimpleCsvImporter extends ImportFormat {
+
+  public String getFormatName() {
+    return "Simple CSV Importer";
+  }
+
+  public boolean isRecognizedFormat(InputStream stream) throws IOException {
+    return true; // this is discouraged except for demonstration purposes
+  }
+
+  public List importEntries(InputStream stream) throws IOException {
+        ArrayList bibitems = new ArrayList();
+    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+
+    String line = in.readLine();
+    while (line != null) {
+      if (!"".equals(line.trim())) {
+        String[] fields = line.split(";");
+        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
+        be.setType(BibtexEntryType.getType("techreport"));
+        be.setField("year", fields[0]);
+        be.setField("author", fields[1]);
+        be.setField("title", fields[2]);
+        bibitems.add(be);
+        line = in.readLine();
+      }
+    }
+        return bibitems;
+  }
+}
+</pre><br />
+    <br />
+
+    <p>Note that the example is in the default package. Suppose you
+    have saved it under
+    <code>/mypath/SimpleCsvImporter.java</code>. Also suppose the
+    JabRef-2.0.jar is in the same folder as
+    <code>SimpleCsvImporter.java</code> and Java is on your command
+    path. Compile it using a JSDK 1.4 e.g. with</p>
+    <pre>
+javac -classpath JabRef-2.0.jar SimpleCsvImporter.java
+</pre>Now there should be a file
+<code>/mypath/SimpleCsvImporter.class</code>.<br />
+    <br />
+
+
+    <p>In JabRef, open <b>Options -> Manage custom imports</b>,
+    and click <b>Add from folder</b>. Navigate to
+    <code>/mypath</code> and click the <b>Select ...</b> button.
+    Select the <code>SimpleCsvImporter.class</code> and click the
+    <b>Select ...</b> button. Your importer should now appear in
+    the list of custom importers under the name "Simple CSV
+    Importer" and, after you click <b>Close</b> also in the <b>File
+    -> Import -> Custom Importers</b> and <b>File ->
+    Import and Append -> Custom Importers</b> submenus of the
+    JabRef window.</p>
+
+    <h2>Sharing your work</h2>
+
+    <p>With custom importer files, it's fairly simple to share
+    custom import formats between users. If you write an import
+    filter for a format not supported by JabRef, or an improvement
+    over an existing one, we encourage you to post your work on our
+    SourceForge.net page. We'd be happy to distribute a collection
+    of submitted import files, or to add to the selection of
+    standard importers.</p>
+</body>
+</html>
diff --git a/src/help/ja/DatabaseProperties.html b/src/help/ja/DatabaseProperties.html
index 5af0ba5..ec9ba8e 100644
--- a/src/help/ja/DatabaseProperties.html
+++ b/src/help/ja/DatabaseProperties.html
@@ -1,49 +1,33 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Database properties window</h1>
-
-<p><em>Opened from the main window by selecting <b>File -> Database properties</b></em></p>
-
-The database properties window lets you set certain database-specific settings.
-
-<h2>Database encoding</h2>
-
-<p>This setting determines which character encoding JabRef will use when writing this database
-to disk. Changing this setting will override the setting made in Preferences dialog for this
-database. JabRef specifies the encoding near the top of the bib file, in order to be able
-to use the correct encoding next time you open the file.</p>
-
-<h2>Override default file directories</h2>
-
-<p>These settings are used to specify which directory will be used to search for general file links
-(specified in the <em>file</em> field), and for legacy PDF/PS links (the <em>pdf</em> and <em>ps</em>
-fields were used in JabRef versions prior to 2.3, but should in current versions be replaced by
-general file links).</p>
-
-<p>Relative directories can be specified. This means that the location of the files will be interpreted
-relative to the location of the bib file. Simply setting a directory to "." (without quotes) means
-that the files should reside in the same directory as the bib file.</p>
-
-<p>These settings override the general file directories specified in the Preferences dialog. If
-no values are set, the general directories will be used.</p>
-
-<h2>Database protection</h2>
-
-<p>This setting lets you enforce reviewing of external changes before the database can be saved. Without
-the protection enabled, users have the option to save even if other users have made changes to the file,
-without reviewing the changes - although they will be warned about the changes. When the protection is
-enabled, users will only be able to save after any external changes have been reviewed and merged (however,
-the user can disable individual changes in the course of reviewing them).</p>
-
-<p><b>Note:</b> this is not a security feature, merely a way to prevent users from overwriting other users'
-changes inadvertently. This feature does not protect your database against malicious users.</p>
-
-
-
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>データベース特性ウィンドウ</h1>
+
+<p><em>メインウィンドウから<b>ファイル→データベース特性</b>を選べば開きます。</em></p>
+
+データベース特性ウィンドウでは、データベースに関連した設定を行うことができます。
+
+<h2>データベースのエンコーディング</h2>
+
+<p>この設定は、データベースをディスクに書き込む際、JabRefがどの文字エンコーディングを使うべきかを指定します。この設定を変更すると、このデータベースに関しては、この設定が、「JabRefの設定」ダイアログで行った設定よりも優先して用いられます。JabRefはエンコーディングをbibファイルの冒頭部に書き込み、次回このファイルを開いたときに正しいエンコーディングで開くことができるようにします。</p>
+
+<h2>ファイルディレクトリ既定値の上書き</h2>
+
+<p>これらの設定は、一般ファイルリンク(<em>file</em>フィールドで指定)と旧来のPDF/PSリンク(この<em>pdf</em>および<em>ps</em>フィールドは、JabRef第2.3版以前で用いられていましたが、現行版では一般ファイルリンクを用いなくてはなりません)を検索する際、どのディレクトリを対象とするか指定するのに用いられます。</p>
+
+<p>相対ディレクトリを指定することは可能です。この場合、ファイルの場所は、bibファイルのある場所からの相対パスとして解釈されます。ディレクトリを「.」に指定すると(除括弧)、ファイルがbibファイルと同じディレクトリにあることを意味します。</p>
+
+<p>これらの設定は、「JabRefの設定」ダイアログで指定した一般ファイルディレクトリよりも優先して扱われます。ここで値を指定しない場合は、「JabRefの設定」ダイアログの値が用いられます。</p>
+
+<h2>データベース保護</h2>
+
+<p>この設定は、データベースを保存する前に、外部から加えられた変更を常に審査するように強制します。データベース保護を有効にしないと、他のユーザーがファイルに変更を加えていた場合に、変更が為されているという警告は発せられますが、変更内容を審査せずに保存することができてしまいます。データベース保護を有効にすると、外部から加えられた変更を審査し、マージした上でないと保存することができません(ただし審査過程で、ユーザーが各々の変更をなかったことにすることは可能です)。</p>
+
+<p><b>《註》</b>本機能は、セキュリティ機能を提供するものではなく、他のユーザーが加えた変更を意図せずに上書きしてしまうのを避ける機会を提供するだけです。本機能は、悪意を持ったユーザーからあなたのデータベースを守るわけではありません。</p>
+
+</body>
+</html>
diff --git a/src/help/ja/EndNoteFilters.html b/src/help/ja/EndNoteFilters.html
index a53470a..9451bbf 100644
--- a/src/help/ja/EndNoteFilters.html
+++ b/src/help/ja/EndNoteFilters.html
@@ -1,49 +1,49 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-    <h1>EndNote書き出しフィルタ</h1>
-
-    <h2>JabRefからの書き出し</h2>
-
-    <p>JabRefは、EndoNoteが読み込み可能な形式のファイルへ書き出すことができます。この機能を使うには、<b>ファイル→書き出す</b>を選択して、ファイル形式 <b>Endnote (*.txt)</b> を選択し、書き出しファイル名を指定してください。</p>
-
-    <h2>EndNoteへの読み込み</h2>
-
-    <p>EndNoteの既定の読み込みフィルタは、複数の著者や編者を適切に取り扱うことができません。これを回避するには、以下の2つの方法があります。</p>
-
-    <ol>
-        <li>組み込みフィルタを使用して、ファイルを後から修正します。ファイルをEndNoteで開くには、EndNoteで新規データベースを作成するか、既存のデータベースを開いてください。その後、<b>File → Import</b>を選んで <b>Choose File</b> をクリックし、書き出したファイルを選択してから <b>Choose</b> をクリックしてください。<b>Import Options</b> をクリックして、<b>EndNote Import</b> を選択します。<b>Import</b> をクリックすれば、読み込みが始まります。読み込み後、<b>Edit → Change Text</b> を選択し、<b>Any Field</b> を <b>Author</b> に変更します。" and "を検索フィールドに入力し(引用符なし)、変更フィールドにリターン文字を入力して(Mac OS Xではoption-return、Windows XPではctrl-return)、<b>Change</b> をクリックしてください。同じこ [...]
-
-        <li><i>EndNote Extras</i> に <i>EndNote Import from JabRef filter</i> を導入します。下記の <b>進んだ使い方</b> の指示に従ってください。ファイルをEndNoteで開くには、EndNoteで新規データベースを作成するか、既存のデータベースを開いてください。その後、<b>File → Import</b>を選んで <b>Choose File</b> をクリックし、書き出したファイルを選択してから <b>Choose</b> をクリックしてください。<b>Import Options</b> をクリックして、<b>EndNote Import from JabRef</b> を選択します(もしこれが表示されていなければ Other filters を選択してください。それでも表示されていなければ、フィルタが正しく導入されていません)。<b>Import</b> をクリックすれば、読み込みが始まります。</li>
-    </ol>
-
-    <h2>注記</h2>
-
-    <p>EndNote書き出しフィルタは、BibTeX項目型を以下のように EndNote reference type に対応させます。</p>
-    <pre>
-BibTeX項目型 → EndNote Reference Type
-------------------------------------------
-misc, other → Generic
-unpublished → Manuscript
-manual → Computer Program
-article → Journal Article
-book → Book
-booklet → Personal Communication
-inbook,incollection → Book Section
-inproceedings → Conference Proceedings
-techreport → Report
-mastersthesis, phdthesis → Thesis</pre>
-
-    <h2>共著者</h2>
-
-    <p>既定の書き出しフィルタは、authorフィールドやeditorフィールド中の角括弧に囲まれた項目は、共著者であるものと見なし、角括弧は後ろに付けたコンマに変換されます。しかし、これは角括弧に囲まれたLaTeXコードを含む項目も共著者と見なされることを意味し、このような場合には適切に整形されません。</p>
-
-    <h2>進んだ使い方: EndNote Extras</h2>
-
-   EndNoteとJabRefの間の相互互換性を向上させるためには、JabRefウェブページにあるResourcesのページからEndNoteフィルターセットをダウンロードしてください。
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+    <h1>EndNote書き出しフィルタ</h1>
+
+    <h2>JabRefからの書き出し</h2>
+
+    <p>JabRefは、EndoNoteが読み込み可能な形式のファイルへ書き出すことができます。この機能を使うには、<b>ファイル→書き出す</b>を選択して、ファイル形式 <b>Endnote (*.txt)</b> を選択し、書き出しファイル名を指定してください。</p>
+
+    <h2>EndNoteへの読み込み</h2>
+
+    <p>EndNoteの既定の読み込みフィルタは、複数の著者や編者を適切に取り扱うことができません。これを回避するには、以下の2つの方法があります。</p>
+
+    <ol>
+        <li>組み込みフィルタを使用して、ファイルを後から修正します。ファイルをEndNoteで開くには、EndNoteで新規データベースを作成するか、既存のデータベースを開いてください。その後、<b>File → Import</b>を選んで <b>Choose File</b> をクリックし、書き出したファイルを選択してから <b>Choose</b> をクリックしてください。<b>Import Options</b> をクリックして、<b>EndNote Import</b> を選択します。<b>Import</b> をクリックすれば、読み込みが始まります。読み込み後、<b>Edit → Change Text</b> を選択し、<b>Any Field</b> を <b>Author</b> に変更します。" and "を検索フィールドに入力し(引用符なし)、変更フィールドにリターン文字を入力して(Mac OS Xではoption-return、Windows XPではctrl-return)、<b>Change</b> をクリックしてください。同じこ [...]
+
+        <li><i>EndNote Extras</i> に <i>EndNote Import from JabRef filter</i> を導入します。下記の <b>進んだ使い方</b> の指示に従ってください。ファイルをEndNoteで開くには、EndNoteで新規データベースを作成するか、既存のデータベースを開いてください。その後、<b>File → Import</b>を選んで <b>Choose File</b> をクリックし、書き出したファイルを選択してから <b>Choose</b> をクリックしてください。<b>Import Options</b> をクリックして、<b>EndNote Import from JabRef</b> を選択します(もしこれが表示されていなければ Other filters を選択してください。それでも表示されていなければ、フィルタが正しく導入されていません)。<b>Import</b> をクリックすれば、読み込みが始まります。</li>
+    </ol>
+
+    <h2>注記</h2>
+
+    <p>EndNote書き出しフィルタは、BibTeX項目型を以下のように EndNote reference type に対応させます。</p>
+    <pre>
+BibTeX項目型 → EndNote Reference Type
+------------------------------------------
+misc, other → Generic
+unpublished → Manuscript
+manual → Computer Program
+article → Journal Article
+book → Book
+booklet → Personal Communication
+inbook,incollection → Book Section
+inproceedings → Conference Proceedings
+techreport → Report
+mastersthesis, phdthesis → Thesis</pre>
+
+    <h2>共著者</h2>
+
+    <p>既定の書き出しフィルタは、authorフィールドやeditorフィールド中の角括弧に囲まれた項目は、共著者であるものと見なし、角括弧は後ろに付けたコンマに変換されます。しかし、これは角括弧に囲まれたLaTeXコードを含む項目も共著者と見なされることを意味し、このような場合には適切に整形されません。</p>
+
+    <h2>進んだ使い方: EndNote Extras</h2>
+
+   EndNoteとJabRefの間の相互互換性を向上させるためには、JabRefウェブページにあるResourcesのページからEndNoteフィルターセットをダウンロードしてください。
+</body>
+</html>
diff --git a/src/help/ja/EntryEditorHelp.html b/src/help/ja/EntryEditorHelp.html
old mode 100755
new mode 100644
index 4d7bf09..50b2dea
--- a/src/help/ja/EntryEditorHelp.html
+++ b/src/help/ja/EntryEditorHelp.html
@@ -1,71 +1,71 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-<h1>項目エディタ</h1>
-
-    <p><em>これは、基本ウィンドウで当該項目行の適当なところをダブルクリックするか、項目を選んでENTER鍵を押すと開きます。パネルはESC鍵を押すと閉じます。</em></p>
-
-    <p>このパネルでは、単一の項目に関連したすべての情報を指定することができます。項目エディタは、ご使用の項目の型を確認し、この項目を<em>bibtex</em>で参照するための、必須フィールドと非必須フィールドとをすべて列挙します。くわえて、すべての項目型に共通な<em>汎用フィールド</em>と名付けられたフィールドがあります。</p>
-
-    <p>項目型のそれぞれについて、どのフィールドが必須で、どのフィールドが非必須か、またどのフィールドが汎用フィールドタブに表示されるべきかを、完全に指定することができます。これについて詳しくは、<a href="CustomEntriesHelp.html">項目型のカスタマイズ</a>を参照してください。</p>
-
-    <p>フィールドをどのように埋めていくべきかについての情報は、<a href="BibtexHelp.html">Bibtexヘルプ</a>をご覧ください。</p>
-
-    <h2>項目エディタのパネル</h2>
-
-    <p>項目エディタには、<em>必須フィールド</em>・<em>非必須フィールド</em>・<em>汎用</em>・<em>概要</em>・<em>レビュー</em>・<em>BibTeXソース</em>の6つのパネルがあります。ここで、<em>汎用</em>・<em>概要</em>・<em>レビュー</em>はカスタマイズ可能です(<a href="GeneralFields.html">汎用フィールドのカスタマイズ</a>を参照)。最初の3つのパネルでは、TABとSHIFT-TABがテキストフィールド間でフォーカスを移すのに使用できます。</p>
-
-    <p>パネルを切り替えるにはタブをクリックするか、以下のキーの組み合わせで左右のパネルに移動してください。右側のタブに異動するには、CTRL-TABまたはCTRL-プラス、左側のタブに異動するには、CTRL-SHIFT-TABまたはCTRL-マイナスを使います。また、次または前の項目に移動するには、それぞれCTRL-SHIFT-↓またはCTRL-SHIFT-↑を押すか、適切なツールバーボタンをクリックしてください。</p>
-
-    <p><em>bibtexソース</em>パネルは、データベースが<em>bibtex</em>形式に保存されたときに、項目がどのように表記されるかを示します。お望みならば、このパネルで<em>bibtex</em>ソースを直接編集することもできます。別のパネルに移動したり、CTRL-Sを押したり、あるいは項目エディタを閉じたりした際に、JabRefはソースパネルの内容を解析しようと試みます。問題がある場合には、それを通知して、その項目をさらに編集するのか、以前の内容に戻すのかの選択肢を提示します。<strong>設定</strong>ダイアログの<strong>項目エディタ</strong>タブにある<strong>既定でBibTeXソースを表示</strong>を有効にすると、項目エディタを開く度に、ソースパネルが表示されます。BibTeXの提供する4つのパネルではなく、ソースで編集することをお好みならば、このオプションを有効にしてください。</p>
-
-    <p><strong>一口メモ</strong> お使いのデータベースにJabRefが知らないフィールドが含まれている場合、これらはソースパネルから見ることができます。</p>
-
-    <h2>フィールド整合性検査</h2>
-
-    <p>フィールドの内容が変更された場合、JabRefは新しい内容を受諾可能かどうか検査します。<em>bibtex</em>が使用するフィールド型については、「#」文字の使用法に関しての検査も行われます。#記号は、(「\#」の形でエスケープされている場合を除き)<em>つねに</em>対で使用され、参照されている<em>bibtex</em>文字列を囲みます。なお、JabRefは、参照されている文字列が実際に存在するかどうかの検査は行わないので注意してください(これは自明ではありません。自分で使用する<em>bibtex</em>スタイルは、JabRefが知らない文字列を好きなだけ定義することができるからです)。</p>
-
-   <p>内容が受諾されなければ、フィールドが赤く表示されてエラーであることを示します。この場合には、変更点は保存されません。</p>
-
-<!--<h2>Word/name autocompletion</h2>
-
-    <p>The entry editor offers autocompletion of words. In the Preferences dialog
-    you can enable or disable autocompletion, and choose for which fields
-    autocompletion is active.</p>
-
-    <p>With autocompletion, JabRef records all words that appear in
-    each of the chosen fields throughout your database. Whenever you write
-    the beginning of one of these words, it will be suggested visually. To
-    ignore the suggestion, simply write on. To accept the suggestion,
-    either press <em>ENTER</em> or use your arrow keys or other keys to
-    remove the selection box around the suggested characters.</p>
-
-    <p><em>Note:</em> the words considered for suggestion are only the ones
-    appearing in the same field in entries of the same database as the one you
-    are editing. There are many ways to realise this kind of feature, and if you feel
-    it should have been implemented differently, we'd like to hear your suggestions!</p>
-
-    <h2>Copy <em>bibtex</em> key</h2>
-
-    <p>Pressing CTRL-K or the 'key' button causes the <em>bibtex</em> key for your entry
-    to be copied to the clipboard.</p>
-    -->
-
-    <h2><em>bibtex</em>キー自動生成</h2>
-
-    <p>当該項目の必須フィールドの内容に基づいて<em>bibtex</em>キーを自動生成させるには、CTRL-Gを押すか「キー生成」ボタン(魔法の杖)を押してください。</p>
-
-    <p>JabRefがどうやって<em>bibtex</em>キーを生成するかについての詳しい情報は、<a href="LabelPatterns.html">BibTeXキーの生成をカスタマイズする</a>をご覧ください。</p>
-
-    <h2>単語/名称自動補完</h2>
-
-    <p>JabRefには、単語および名称の自動補完機能があります。自動補完は、<b>オプション→設定→項目エディタ</b>で設定することができ、よく使われるフィールドのいくつかにおいて、既定で有効化されています。</p>
-
-    <p>自動補完が有効になっているフィールドを編集すると、JabRefは、これまでにデータベース中のその特定のフィールドで使用された単語に基づいて、あなたが書き込むと同時に単語補完を提案しようとします。提案候補は、補完時に強調されたテキストブロックとして表示されます。補完候補が複数ある場合には、候補を変えるのにPAGE UPおよびPAGE DOWNを使用することができます。候補を受け入れるには、ENTERを一度押してください。候補を無視するには、入力をそのまま続けてください。</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+<h1>項目エディタ</h1>
+
+    <p><em>これは、基本ウィンドウで当該項目行の適当なところをダブルクリックするか、項目を選んでENTER鍵を押すと開きます。パネルはESC鍵を押すと閉じます。</em></p>
+
+    <p>このパネルでは、単一の項目に関連したすべての情報を指定することができます。項目エディタは、ご使用の項目の型を確認し、この項目を<em>bibtex</em>で参照するための、必須フィールドと非必須フィールドとをすべて列挙します。くわえて、すべての項目型に共通な<em>汎用フィールド</em>と名付けられたフィールドがあります。</p>
+
+    <p>項目型のそれぞれについて、どのフィールドが必須で、どのフィールドが非必須か、またどのフィールドが汎用フィールドタブに表示されるべきかを、完全に指定することができます。これについて詳しくは、<a href="CustomEntriesHelp.html">項目型のカスタマイズ</a>を参照してください。</p>
+
+    <p>フィールドをどのように埋めていくべきかについての情報は、<a href="BibtexHelp.html">Bibtexヘルプ</a>をご覧ください。</p>
+
+    <h2>項目エディタのパネル</h2>
+
+    <p>項目エディタには、<em>必須フィールド</em>・<em>非必須フィールド</em>・<em>汎用</em>・<em>概要</em>・<em>レビュー</em>・<em>BibTeXソース</em>の6つのパネルがあります。ここで、<em>汎用</em>・<em>概要</em>・<em>レビュー</em>はカスタマイズ可能です(<a href="GeneralFields.html">汎用フィールドのカスタマイズ</a>を参照)。最初の3つのパネルでは、TABとSHIFT-TABがテキストフィールド間でフォーカスを移すのに使用できます。</p>
+
+    <p>パネルを切り替えるにはタブをクリックするか、以下のキーの組み合わせで左右のパネルに移動してください。右側のタブに異動するには、CTRL-TABまたはCTRL-プラス、左側のタブに異動するには、CTRL-SHIFT-TABまたはCTRL-マイナスを使います。また、次または前の項目に移動するには、それぞれCTRL-SHIFT-↓またはCTRL-SHIFT-↑を押すか、適切なツールバーボタンをクリックしてください。</p>
+
+    <p><em>bibtexソース</em>パネルは、データベースが<em>bibtex</em>形式に保存されたときに、項目がどのように表記されるかを示します。お望みならば、このパネルで<em>bibtex</em>ソースを直接編集することもできます。別のパネルに移動したり、CTRL-Sを押したり、あるいは項目エディタを閉じたりした際に、JabRefはソースパネルの内容を解析しようと試みます。問題がある場合には、それを通知して、その項目をさらに編集するのか、以前の内容に戻すのかの選択肢を提示します。<strong>設定</strong>ダイアログの<strong>項目エディタ</strong>タブにある<strong>既定でBibTeXソースを表示</strong>を有効にすると、項目エディタを開く度に、ソースパネルが表示されます。BibTeXの提供する4つのパネルではなく、ソースで編集することをお好みならば、このオプションを有効にしてください。</p>
+
+    <p><strong>一口メモ</strong> お使いのデータベースにJabRefが知らないフィールドが含まれている場合、これらはソースパネルから見ることができます。</p>
+
+    <h2>フィールド整合性検査</h2>
+
+    <p>フィールドの内容が変更された場合、JabRefは新しい内容を受諾可能かどうか検査します。<em>bibtex</em>が使用するフィールド型については、「#」文字の使用法に関しての検査も行われます。#記号は、(「\#」の形でエスケープされている場合を除き)<em>つねに</em>対で使用され、参照されている<em>bibtex</em>文字列を囲みます。なお、JabRefは、参照されている文字列が実際に存在するかどうかの検査は行わないので注意してください(これは自明ではありません。自分で使用する<em>bibtex</em>スタイルは、JabRefが知らない文字列を好きなだけ定義することができるからです)。</p>
+
+   <p>内容が受諾されなければ、フィールドが赤く表示されてエラーであることを示します。この場合には、変更点は保存されません。</p>
+
+<!--<h2>Word/name autocompletion</h2>
+
+    <p>The entry editor offers autocompletion of words. In the Preferences dialog
+    you can enable or disable autocompletion, and choose for which fields
+    autocompletion is active.</p>
+
+    <p>With autocompletion, JabRef records all words that appear in
+    each of the chosen fields throughout your database. Whenever you write
+    the beginning of one of these words, it will be suggested visually. To
+    ignore the suggestion, simply write on. To accept the suggestion,
+    either press <em>ENTER</em> or use your arrow keys or other keys to
+    remove the selection box around the suggested characters.</p>
+
+    <p><em>Note:</em> the words considered for suggestion are only the ones
+    appearing in the same field in entries of the same database as the one you
+    are editing. There are many ways to realise this kind of feature, and if you feel
+    it should have been implemented differently, we'd like to hear your suggestions!</p>
+
+    <h2>Copy <em>bibtex</em> key</h2>
+
+    <p>Pressing CTRL-K or the 'key' button causes the <em>bibtex</em> key for your entry
+    to be copied to the clipboard.</p>
+    -->
+
+    <h2><em>bibtex</em>キー自動生成</h2>
+
+    <p>当該項目の必須フィールドの内容に基づいて<em>bibtex</em>キーを自動生成させるには、CTRL-Gを押すか「キー生成」ボタン(魔法の杖)を押してください。</p>
+
+    <p>JabRefがどうやって<em>bibtex</em>キーを生成するかについての詳しい情報は、<a href="LabelPatterns.html">BibTeXキーの生成をカスタマイズする</a>をご覧ください。</p>
+
+    <h2>単語/名称自動補完</h2>
+
+    <p>JabRefには、単語および名称の自動補完機能があります。自動補完は、<b>オプション→設定→項目エディタ</b>で設定することができ、よく使われるフィールドのいくつかにおいて、既定で有効化されています。</p>
+
+    <p>自動補完が有効になっているフィールドを編集すると、JabRefは、これまでにデータベース中のその特定のフィールドで使用された単語に基づいて、あなたが書き込むと同時に単語補完を提案しようとします。提案候補は、補完時に強調されたテキストブロックとして表示されます。補完候補が複数ある場合には、候補を変えるのにPAGE UPおよびPAGE DOWNを使用することができます。候補を受け入れるには、ENTERを一度押してください。候補を無視するには、入力をそのまま続けてください。</p>
+
+</body>
+</html>
diff --git a/src/help/ja/ExternalFiles.html b/src/help/ja/ExternalFiles.html
index 6679864..6b71540 100644
--- a/src/help/ja/ExternalFiles.html
+++ b/src/help/ja/ExternalFiles.html
@@ -1,68 +1,68 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1>JabRef における PDF/PS/URL/DOI リンク</h1>
-
-    <p><b>《註》</b>JabRef 2.3以降の版は、<a href="FileLinks.html">改善された外部ファイルリンクシステム</a>を装備しています。</p>
-
-    <p>JabRefでは、ご使用のシステム上にあるPDFあるいはPSファイルを項目にリンクさせたり、URLもしくはDOI識別子の形で、ウェブ上にある文書をリンクさせたりすることができます。</p>
-
-    <h2>外部ビューアの設定</h2>
-
-    <p>JabRefは、PDFとPSおよびウェブページについて、どの外部ビューアを使用すればいいのか知っている必要があります。これらは、既定値としてお使いのOS上で妥当な値に設定されているため、これらの値は変更する必要がない可能性が高いでしょう。</p>
-
-    <p>外部ビューア設定を変更するには、<b>オプション→設定→外部プログラム</b>を訪れてください。</p>
-
-    <h2>外部ファイルやリンクを開く</h2>
-
-    <p>外部ファイルやウェブページを開くには、いくつかの方法があります。項目エディタでは、ファイル名やDOIもしくはURLを含むテキストフィールドをダブルクリックします。項目表では、項目を選択して、メニューを選ぶか短絡キーを使うか右クリックメニューを使用するかして、ファイルやウェブページを開くことができます。さらに、PDF/PS/URL/DOIアイコンをクリックすることもできます。</p>
-
-    <p>既定では、項目表には、外部ファイルやURLにリンクしている項目のために、2つのアイコン列があります。これらは、<b>設定→項目表</b>で表示しないようにすることができます。項目表の2列目は、PDFまたはPSファイルのアイコンを(両方が存在するときはPDFのみ)表示し、3列目はURLまたはDOIのアイコンを(両者が存在するときはURLのみ)表示します。これらのファイルやウェブページはアイコンをクリックすれば開くことができます。</p>
-
-    <p><b>《註》</b>項目エディタ(の「汎用」パネル)にPSフィールドが表示されないときは、<a href="GeneralFields.html">汎用フィールドの項目型をカスタマイズ</a>しなくてはならないかもしれません。</p>
-
-    <h2>基本PDFディレクトリと基本PSディレクトリ</h2>
-
-    <p>JabRefでは、PDFファイルやPSファイルを項目に簡単にリンクさせることができます。これを利用するには、<b>オプション→設定→外部プログラム</b>で、基本PDFディレクトリと基本PSディレクトリを指定する必要があります。これらのディレクトリ以下に保管されているすべてのPDFファイルやPSファイルに対して、JabRefは相対パスで参照を行いますので、PDFやPSディレクトリを移動する必要があったり、複数のユーザーがネットワーク上の別の場所から同じデータベースを使用している場合には、便利です。</p>
-
-    <p>加えて、PDFファイルやPSファイル名を、関連した項目のbibtexキー(プラス「.pdf」または「.ps」)と同じものにした場合、JabRefは、基本ディレクトリとそのサブディレクトリ内でそのPDFまたはPSを検出することができます。正しく命名されたPDFもしくはPSがそこに存在する場合、項目エディタ中のPDFフィールドとPSフィールドの横にある「自動」ボタンを押すことによって、この機能を使用することができます。PDFまたはPSが検出されれば、フィールドが直ちに設定されます。</p>
-
-    <p>PDFファイルまたはPSファイルを上述のように命名すると、項目のPDFフィールドやPSフィールドを全く設定しなくても、このファイルを開くことができます。この欠点は、フィールドを埋める(手動であるいは「自動」ボタンを使って)まで、PDFアイコンやPSアイコンが表中に表示されないことです。</p>
-
-    <h2>データベース毎のPDF/PSディレクトリ</h2>
-
-    <p>ユーザーは、データベースに固有のPDFディレクトリやPSディレクトリを設定することができます(<b>ファイル→データベース特性</b>)。これらのディレクトリは、基本ディレクトリよりも優先します。</p>
-
-    <h2><a name="RegularExpressionSearch"
-       id="RegularExpressionSearch">自動リンクに正規表現検索を使うには</a></h2>
-
-    <p>上記各節でJabRefの自動リンク機構を説明しました。お持ちのファイルの名称をbibtexキー+拡張子とした場合、JabRefは自動的にファイルを検出することができます。</p>
-
-    <p>JabRef2.2以降、検索に正規表現を使うことによって、ファイル命名規則にさらに柔軟性を持たせることができるようになりました。ただしほとんどの場合、与えられた既定値を変更する必要があることはないでしょう。</p>
-
-    <p>外部設定を開くと(<b>オプション→設定→外部プログラム</b>)「正規表現を使用」という選択肢があります。この選択肢を有効にすると、PDFディレクトリを検索するのに自前の正規表現を入力できるようになります。</p>
-
-    <p>以下の文法が使用できます。</p>
-
-    <ul>
-        <li><code>*</code> - 直下のサブディレクトリをすべて検索する。カレントディレクトリと2階以上下のサブディレクトリは検索しません。</li>
-
-        <li><code>**</code> - すべてのサブディレクトリとカレントディレクトリを再帰的に検索する。</li>
-
-        <li><code>.</code>および<code>..</code> - カレントディレクトリと親ディレクトリ。</li>
-
-	<li><code>[title]</code> - 角括弧に囲まれた表現は、すべて現在の項目の対応するフィールドで置換されます。</li>
-
-        <li><code>[extension]</code> - これは、使用しているフィールドのファイル拡張子に置換されます</li>
-
-        <li>他のすべてのテキストは正規表現として解釈されます。ただし、バックスラッシュは、パス分離記号と区別するために、2つのバックスラッシュを続けて置く必要があることに注意してください。</li>
-      </ul>
-
-    <p>検索の既定値は、<code>**/.*[bibtexkey].*\\.[extension]</code>です。これは、この種のファイルのためのディレクトリ(たとえばPDFディレクトリ)のすべてのサブディレクトリを検索し、正しい拡張子を持ち、名称のどこかにBibtexキーを含んでいるファイルを探し出します。</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+    <h1>JabRef における PDF/PS/URL/DOI リンク</h1>
+
+    <p><b>《註》</b>JabRef 2.3以降の版は、<a href="FileLinks.html">改善された外部ファイルリンクシステム</a>を装備しています。</p>
+
+    <p>JabRefでは、ご使用のシステム上にあるPDFあるいはPSファイルを項目にリンクさせたり、URLもしくはDOI識別子の形で、ウェブ上にある文書をリンクさせたりすることができます。</p>
+
+    <h2>外部ビューアの設定</h2>
+
+    <p>JabRefは、PDFとPSおよびウェブページについて、どの外部ビューアを使用すればいいのか知っている必要があります。これらは、既定値としてお使いのOS上で妥当な値に設定されているため、これらの値は変更する必要がない可能性が高いでしょう。</p>
+
+    <p>外部ビューア設定を変更するには、<b>オプション→設定→外部プログラム</b>を訪れてください。</p>
+
+    <h2>外部ファイルやリンクを開く</h2>
+
+    <p>外部ファイルやウェブページを開くには、いくつかの方法があります。項目エディタでは、ファイル名やDOIもしくはURLを含むテキストフィールドをダブルクリックします。項目表では、項目を選択して、メニューを選ぶか短絡キーを使うか右クリックメニューを使用するかして、ファイルやウェブページを開くことができます。さらに、PDF/PS/URL/DOIアイコンをクリックすることもできます。</p>
+
+    <p>既定では、項目表には、外部ファイルやURLにリンクしている項目のために、2つのアイコン列があります。これらは、<b>設定→項目表</b>で表示しないようにすることができます。項目表の2列目は、PDFまたはPSファイルのアイコンを(両方が存在するときはPDFのみ)表示し、3列目はURLまたはDOIのアイコンを(両者が存在するときはURLのみ)表示します。これらのファイルやウェブページはアイコンをクリックすれば開くことができます。</p>
+
+    <p><b>《註》</b>項目エディタ(の「汎用」パネル)にPSフィールドが表示されないときは、<a href="GeneralFields.html">汎用フィールドの項目型をカスタマイズ</a>しなくてはならないかもしれません。</p>
+
+    <h2>基本PDFディレクトリと基本PSディレクトリ</h2>
+
+    <p>JabRefでは、PDFファイルやPSファイルを項目に簡単にリンクさせることができます。これを利用するには、<b>オプション→設定→外部プログラム</b>で、基本PDFディレクトリと基本PSディレクトリを指定する必要があります。これらのディレクトリ以下に保管されているすべてのPDFファイルやPSファイルに対して、JabRefは相対パスで参照を行いますので、PDFやPSディレクトリを移動する必要があったり、複数のユーザーがネットワーク上の別の場所から同じデータベースを使用している場合には、便利です。</p>
+
+    <p>加えて、PDFファイルやPSファイル名を、関連した項目のbibtexキー(プラス「.pdf」または「.ps」)と同じものにした場合、JabRefは、基本ディレクトリとそのサブディレクトリ内でそのPDFまたはPSを検出することができます。正しく命名されたPDFもしくはPSがそこに存在する場合、項目エディタ中のPDFフィールドとPSフィールドの横にある「自動」ボタンを押すことによって、この機能を使用することができます。PDFまたはPSが検出されれば、フィールドが直ちに設定されます。</p>
+
+    <p>PDFファイルまたはPSファイルを上述のように命名すると、項目のPDFフィールドやPSフィールドを全く設定しなくても、このファイルを開くことができます。この欠点は、フィールドを埋める(手動であるいは「自動」ボタンを使って)まで、PDFアイコンやPSアイコンが表中に表示されないことです。</p>
+
+    <h2>データベース毎のPDF/PSディレクトリ</h2>
+
+    <p>ユーザーは、データベースに固有のPDFディレクトリやPSディレクトリを設定することができます(<b>ファイル→データベース特性</b>)。これらのディレクトリは、基本ディレクトリよりも優先します。</p>
+
+    <h2><a name="RegularExpressionSearch"
+       id="RegularExpressionSearch">自動リンクに正規表現検索を使うには</a></h2>
+
+    <p>上記各節でJabRefの自動リンク機構を説明しました。お持ちのファイルの名称をbibtexキー+拡張子とした場合、JabRefは自動的にファイルを検出することができます。</p>
+
+    <p>JabRef2.2以降、検索に正規表現を使うことによって、ファイル命名規則にさらに柔軟性を持たせることができるようになりました。ただしほとんどの場合、与えられた既定値を変更する必要があることはないでしょう。</p>
+
+    <p>外部設定を開くと(<b>オプション→設定→外部プログラム</b>)「正規表現を使用」という選択肢があります。この選択肢を有効にすると、PDFディレクトリを検索するのに自前の正規表現を入力できるようになります。</p>
+
+    <p>以下の文法が使用できます。</p>
+
+    <ul>
+        <li><code>*</code> - 直下のサブディレクトリをすべて検索する。カレントディレクトリと2階以上下のサブディレクトリは検索しません。</li>
+
+        <li><code>**</code> - すべてのサブディレクトリとカレントディレクトリを再帰的に検索する。</li>
+
+        <li><code>.</code>および<code>..</code> - カレントディレクトリと親ディレクトリ。</li>
+
+	<li><code>[title]</code> - 角括弧に囲まれた表現は、すべて現在の項目の対応するフィールドで置換されます。</li>
+
+        <li><code>[extension]</code> - これは、使用しているフィールドのファイル拡張子に置換されます</li>
+
+        <li>他のすべてのテキストは正規表現として解釈されます。ただし、バックスラッシュは、パス分離記号と区別するために、2つのバックスラッシュを続けて置く必要があることに注意してください。</li>
+      </ul>
+
+    <p>検索の既定値は、<code>**/.*[bibtexkey].*\\.[extension]</code>です。これは、この種のファイルのためのディレクトリ(たとえばPDFディレクトリ)のすべてのサブディレクトリを検索し、正しい拡張子を持ち、名称のどこかにBibtexキーを含んでいるファイルを探し出します。</p>
+</body>
+</html>
diff --git a/src/help/ja/FileLinks.html b/src/help/ja/FileLinks.html
index eb99526..2200fbd 100644
--- a/src/help/ja/FileLinks.html
+++ b/src/help/ja/FileLinks.html
@@ -1,33 +1,33 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1>JabRef におけるファイルリンク</h1>
-
-    <p>JabRefでは、使用中のシステムに保管されているあらゆる型の文書のみならず、URLやDOI識別子の形でウェブ上の文書も、項目にリンクさせることができます。各項目にはいくつでもファイルリンクを付けることができ、リンクされた各ファイルはJabRefから簡単に開くことができます。</p>
-
-    <p>BibTeXから見れば、項目のファイルリンクはすべて一つのフィールドにコーディングされますが、JabRef内部では、編集可能なリンク一覧として表示されます。これは、他のBibTeXフィールドと同様に項目エディタからアクセスすることができます。</p>
-
-    <h2>外部ファイル型を設定する</h2>
-
-    <p>ファイルを開く際にどのアプリケーションを呼び出せばよいのか、アイコンはどれを表示すればよいのかを特定するために、各ファイルリンクに対しては、ファイル型を選択しなくてはなりません。ファイル型の一覧は、<b>オプション→外部ファイル型の管理</b>を選ぶか、設定ダイアログの<b>外部プログラム</b>タブ中の<b>外部ファイル型の管理</b>ボタンをクリックすることで、閲覧したり編集したりすることができます。</p>
-
-    <p>ファイル型には、名称・グラフィカルアイコン・ファイル拡張子・ファイルを閲覧するためのアプリケーションが指定されます。Windows上では、Windowsの既定ビューアを使用するためには、アプリケーション名を省略すれば結構です。</p>
-
-    <h2>項目に外部リンクを追加する</h2>
-
-    <p><a href="GeneralFields.html">汎用フィールド</a>に「file」フィールドが含まれている場合、<a href="EntryEditorHelp.html">項目エディタ</a>内で、項目中の外部ファイル一覧を編集することができます。エディタには、リンクの挿入や編集、削除のためのボタンの他、リンク一覧を整序するためのボタンがあります。</p>
-
-    <p>お使いのファイルディレクトリ(<b>設定→外部プログラム→外部ファイルリンク→基本ファイルディレクトリ</b>で設定)に、定義済みの外部ファイル型のいずれかを拡張子として持ち、名称にBibTeX項目のBibTeXキーが含まれているファイルがある場合、項目エディタの<b>自動</b>ボタンをクリックすれば、このファイルを自動的にリンクすることができます。どのファイル名をBibTeXキーに自動リンクするかの規則は、<b>設定→外部プログラム→外部ファイルリンク→正規表現検索を使用</b>で設定できます。</p>
-
-    <p>ファイルをダウンロードし、それに対してBibTeX項目からリンクを張るには、項目エディタから<b>ダウンロード</b>ボタンをクリックします。すると、ダイアログボックスが現れ、URLを入力するよう促されます。ファイルは基本ファイルディレクトリにダウンロードされ、その項目のBibTeXキーに基づいて名称が割り振られた上で、この項目からのリンクが張られます。</p>
-
-    <h2>外部ファイルを開く</h2>
-
-    <p>外部ファイルやウェブページを開くにはいくつかの方法があります。項目の最優先外部リンクを開くには、項目表から項目を選び、メニューを選ぶか、短絡キーを使用するか、あるいは右クリックメニューを使用します。または、項目表が<b>ファイル</b>列を表示するように設定されている場合には(<b>設定→項目表→特殊な表列→ファイル列を表示</b>で設定)、ファイルアイコンをクリックすれば、項目の最優先リンクが開きます。項目のその他のリンクにアクセスするには、アイコンを右マウスボタンでクリックし(Mac OS Xの場合はCtrl-クリック)、すべてのリンクが載っているメニューを表示させてください。</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+    <h1>JabRef におけるファイルリンク</h1>
+
+    <p>JabRefでは、使用中のシステムに保管されているあらゆる型の文書のみならず、URLやDOI識別子の形でウェブ上の文書も、項目にリンクさせることができます。各項目にはいくつでもファイルリンクを付けることができ、リンクされた各ファイルはJabRefから簡単に開くことができます。</p>
+
+    <p>BibTeXから見れば、項目のファイルリンクはすべて一つのフィールドにコーディングされますが、JabRef内部では、編集可能なリンク一覧として表示されます。これは、他のBibTeXフィールドと同様に項目エディタからアクセスすることができます。</p>
+
+    <h2>外部ファイル型を設定する</h2>
+
+    <p>ファイルを開く際にどのアプリケーションを呼び出せばよいのか、アイコンはどれを表示すればよいのかを特定するために、各ファイルリンクに対しては、ファイル型を選択しなくてはなりません。ファイル型の一覧は、<b>オプション→外部ファイル型の管理</b>を選ぶか、設定ダイアログの<b>外部プログラム</b>タブ中の<b>外部ファイル型の管理</b>ボタンをクリックすることで、閲覧したり編集したりすることができます。</p>
+
+    <p>ファイル型には、名称・グラフィカルアイコン・ファイル拡張子・ファイルを閲覧するためのアプリケーションが指定されます。Windows上では、Windowsの既定ビューアを使用するためには、アプリケーション名を省略すれば結構です。</p>
+
+    <h2>項目に外部リンクを追加する</h2>
+
+    <p><a href="GeneralFields.html">汎用フィールド</a>に「file」フィールドが含まれている場合、<a href="EntryEditorHelp.html">項目エディタ</a>内で、項目中の外部ファイル一覧を編集することができます。エディタには、リンクの挿入や編集、削除のためのボタンの他、リンク一覧を整序するためのボタンがあります。</p>
+
+    <p>お使いのファイルディレクトリ(<b>設定→外部プログラム→外部ファイルリンク→基本ファイルディレクトリ</b>で設定)に、定義済みの外部ファイル型のいずれかを拡張子として持ち、名称にBibTeX項目のBibTeXキーが含まれているファイルがある場合、項目エディタの<b>自動</b>ボタンをクリックすれば、このファイルを自動的にリンクすることができます。どのファイル名をBibTeXキーに自動リンクするかの規則は、<b>設定→外部プログラム→外部ファイルリンク→正規表現検索を使用</b>で設定できます。</p>
+
+    <p>ファイルをダウンロードし、それに対してBibTeX項目からリンクを張るには、項目エディタから<b>ダウンロード</b>ボタンをクリックします。すると、ダイアログボックスが現れ、URLを入力するよう促されます。ファイルは基本ファイルディレクトリにダウンロードされ、その項目のBibTeXキーに基づいて名称が割り振られた上で、この項目からのリンクが張られます。</p>
+
+    <h2>外部ファイルを開く</h2>
+
+    <p>外部ファイルやウェブページを開くにはいくつかの方法があります。項目の最優先外部リンクを開くには、項目表から項目を選び、メニューを選ぶか、短絡キーを使用するか、あるいは右クリックメニューを使用します。または、項目表が<b>ファイル</b>列を表示するように設定されている場合には(<b>設定→項目表→特殊な表列→ファイル列を表示</b>で設定)、ファイルアイコンをクリックすれば、項目の最優先リンクが開きます。項目のその他のリンクにアクセスするには、アイコンを右マウスボタンでクリックし(Mac OS Xの場合はCtrl-クリック)、すべてのリンクが載っているメニューを表示させてください。</p>
+</body>
+</html>
diff --git a/src/help/ja/GeneralFields.html b/src/help/ja/GeneralFields.html
index 0174050..a5ad630 100644
--- a/src/help/ja/GeneralFields.html
+++ b/src/help/ja/GeneralFields.html
@@ -1,27 +1,27 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Customizing general fields</h1>
-
-    <p>You can add an arbitrary number of tabs to the entry editor.
-    These will be present for all entry types. To customize these
-    tabs, go to "Options -> Set up general fields".</p>
-
-    <p>You specify one tab on each line. The line should start with
-    the name of the tab, followed by a colon (:), and the fields it
-    should contain, separated by semicolons (;).</p>
-
-    <p>E.g.<br />
-    <code>General:url;keywords;doi;pdf<br />
-     Abstract:abstract;annote</code></p>
-
-    <p>which would give one tab named "General" containing the
-    fields <em>url</em>, <em>keywords</em>, <em>doi</em> and
-    <em>pdf</em>, and another tab named "Abstract" containing the
-    fields <em>abstract</em> and <em>annote</em>.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Customizing general fields</h1>
+
+    <p>You can add an arbitrary number of tabs to the entry editor.
+    These will be present for all entry types. To customize these
+    tabs, go to "Options -> Set up general fields".</p>
+
+    <p>You specify one tab on each line. The line should start with
+    the name of the tab, followed by a colon (:), and the fields it
+    should contain, separated by semicolons (;).</p>
+
+    <p>E.g.<br />
+    <code>General:url;keywords;doi;pdf<br />
+     Abstract:abstract;annote</code></p>
+
+    <p>which would give one tab named "General" containing the
+    fields <em>url</em>, <em>keywords</em>, <em>doi</em> and
+    <em>pdf</em>, and another tab named "Abstract" containing the
+    fields <em>abstract</em> and <em>annote</em>.</p>
+</body>
+</html>
diff --git a/src/help/ja/GroupsHelp.html b/src/help/ja/GroupsHelp.html
index 9d18b0a..0dcf6f4 100644
--- a/src/help/ja/GroupsHelp.html
+++ b/src/help/ja/GroupsHelp.html
@@ -1,209 +1,209 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-</head>
-
-<body>
-<h1>グループ</h1>
-
-    <p>グループを用いると、ディスク上のファイルをディレクトリやサブディレクトリを使って整理するように、BibTeXデータベースをツリー状に構造化することができます。ファイルツリーと違うところは、大きく2つあります。</p>
-
-    <ul>
-        <li>ファイルは、常に唯一のディレクトリ内に属しますが、項目は二つ以上のグループに属することができます。</li>
-
-        <li>グループは、特定の基準を設けて内容を動的に制御することができます。これらの基準に一致する新規項目は、自動的にグループに加えられます。このような機能は、通常のファイルシステムにはありませんが、電子メールクライアントの中には、同様の機能を持つものがあります(ThunderbirdやOperaなど)。</li>
-    </ul>
-
-    <p>グループを選択すると、当該グループに属する項目が表示されます。複数のグループを選択すると、現在の設定の状態によって、どれかのグループに属する項目が表示されるか(和集合)、すべてのグループに属する項目が表示されます(積集合)。これらはすべて下記に詳細に説明します。</p>
-
-    <p>グループの定義はデータベース毎に為されます。これは、<tt>.bib</tt>ファイル内の<tt>@COMMENT</tt>ブロックに保存され、全ユーザーに共有されます(将来のJabRefではユーザー毎のグループがサポートされるかもしれません)。</p>
-
-    <h2>制御盤</h2>
-
-    <p>グループ制御盤は、画面左側のサイド・ペーンに表示されます。<tt>CTRL-SHIFT-G</tt>を押すか、ツールバーのグループボタンを押すことで入切することができます。制御盤にはいくつかのボタンがありますが、ほとんどの機能はコンテクストメニュー(「右クリック」)でもアクセスできます。ドラッグ&ドロップもサポートされています。</p>
-
-    <table cellspacing="0"
-           cellpadding="5"
-           border="0"
-           style="background-color: #C0FFC0"
-		   summary="Examples">
-        <tr>
-            <td>
-                <h2>いくつかの簡単な例</h2>
-
-                <p>わたしは...</p>
-
-                <h3>...グループを作成して、いくつかの項目を割り当てたいのです</h3>
-
-                <p>グループ制御盤が表示されていることを確認します。<b>新規グループ</b>ボタンを押し、新しいグループの名称を入力、他の値はすべて既定値にしたままで<b>OK</b>ボタンを押します。そのグループに所属させたい項目群を選択して、そのグループへドラッグ&ドロップするか、コンテクストメニュー中の<b>グループに追加</b>オプションを選択します。最後に、そのグループを選択して、内容を表示させます(いま所属させた項目が表示されるはずです)。</p>
-
-                <h3>...<tt>keywords</tt>フィールドを使用して項目をグループ分けしたいのです</h3>
-
-                <p>グループ制御盤が表示されていることを確認します。<b>新規グループ</b>ボタンを押し、新しいグループの名称を入力、オプションを「フィールド中のキーワードを検索して動的にグループ化」に設定します。検索するキーワードを入力して<b>OK</b>ボタンを押します。最後に、そのグループを選択して、内容を表示させます(<tt>keywords</tt>フィールドに指定したキーワードが入っている項目すべてが表示されるはずです)。</p>
-
-                <h3>...自由型検索表現を使ってグループを定義したいのです</h3>
-
-                <p>グループ制御盤が表示されていることを確認します。<b>新規グループ</b>ボタンを押し、新しいグループの名称を入力、オプションを「自由型検索表現で動的にグループ化」に設定します。「検索表現」に<tt>author=smith</tt>のように入力し(<tt>smith</tt>はデータベース中の実際の名前に置き換えてください)、<b>OK</b>ボタンを押します。最後に、そのグループを選択して、内容を表示させます(<tt>author</tt>フィールドに指定した名前が入っている項目すべてが表示されるはずです)。</p>
-
-                <h3>...複数のグループを連結したいのです</h3>
-
-                <p>上述の方法などを使って、2つのグループを作成します。<b>設定</b>ボタンを押して、<b>論理和</b>が選択されていることを確認します。それから2つのグループを選択します。2つのグループのうちどちらかに属している項目がすべて表示されます。<b>設定</b>をもう一度押し、<b>論理積</b>を選択します。すると、両方のグループの属している項目のみが表示されます(全く表示されないかもしれませんし、両方のグループが同じ項目を含んでいる場合には全く同じ項目が表示されます)。</p>
-
-                <h3>...重複のあるグループを識別したいのです</h3>
-
-                <p>JabRefでは、現在選択しているグループと重複部分があるグループ(すなわち、そのうち少なくとも1つの項目が現在選択しているグループにも含まれているもの)を簡単に見つけることができます。<b>設定</b>を押して、「重複のあるグループを着色」オプションを有効にします。そして、他のグループと重複しているグループを選択すると、他のグループの方が着色されます。</p>
-            </td>
-        </tr>
-    </table>
-
-    <h2>グループの型</h2>
-
-    <p>JabRefには、以下の4つのグループ型があります。</p>
-
-    <ol>
-        <li><b>全項目</b>グループは、名称が示すとおり、全ての項目を含んでいて、常に存在し、編集したり削除したりすることはできません。</li>
-
-        <li><b>静的グループ</b>は、ディスク上のディレクトリと同様の働きを示し、明示的に割り当てた項目のみを含みます。</li>
-
-        <li><b>キーワード検索に基づく動的グループ</b>には、特定のBibTeXフィールド(例えば<tt>keywords</tt>)に特定のキーワード(例えば<tt>electrical</tt>)が含まれる項目が含まれます。この方法では、項目を手動で割り当てる必要はなく、データベースに既存の情報を使用します。もしデータベース中の全ての項目が、<tt>keywords</tt>フィールドに適切なキーワードが収録されているならば、このグループ型を用いるのがもっとも良い方法でしょう。</li>
-
-        <li><b>自由型検索表現に基づく動的グループ</b>には、指定した検索表現に一致する項目が含まれます。検索表現は、サイド・ペーンの<a href="SearchHelp.html">検索パネル</a>と同一の文法を用います。この<a href="SearchHelp.html#advanced">文法</a>は、論理演算子(<tt>AND</tt>・<tt>OR</tt>・<tt>NOT</tt>)をサポートし、検索対象として1つ以上のBibTeXフィールドを指定することができるので、キーワード検索よりも柔軟なグループ定義を行うことができます(例:<tt>author=smith and title=electrical</tt>)。</li>
-    </ol>
-    <p>作成したグループは、上記の後ろ3つの型のいずれかになります。グループをダブルクリックして現れるグループ編集ダイアログでは、選択もしくは編集したグループの定義の説明が、簡便な言葉で表示されます。</p>
-
-
-    <h2>グループの構造およびグループの作成と削除</h2>
-
-    <p>ディレクトリと同様に、グループはツリー状に体系化することができます。この時、<b>全項目</b>グループがルート(ツリーの起点)になります。グループを右クリックすれば、選択したグループと同じ階層かそれよりも下層に、新しいグループを追加することができます。<b>新規グループ</b>ボタンを押せば、現在選択されているグループの状態に関わらず、<b>全項目</b>グループ配下に、新しい下層グループを加えることができます。コンテキストメニューを使えば、グループや下層グループを削除したり、下層グループをアルファベット順に整序したり、グループをツリー内の別の場所に移動したりすることができます。後者は、ドラッグ&ドロップでも行えるようになっていますが、グループ内の下層グループの順序を変更することはサポートされません。</p>
-
-    <p>取り消しと再実行は、編集全てにおいてサポートされています。</p>
-
-    <h3>静的グループ</h3>
-
-    <p>静的グループは、項目を明示的に割り当てることによってのみ、作成することができます。静的グループを作成した後、それに割り当てる項目を選択し、ドラッグ&ドロップか主要表のコンテクストメニューを用いて割り当てを行ってください。静的グループから項目を削除するには、項目を選択して、主要表のコンテクストメニューを使ってください。設定できるオプションはありません。</p>
-
-    <p>このグループ化法は、全項目が一意的なBibTeX鍵を持っていることを前提としています。BibTeX鍵の欠損や重複がある場合は、それらの項目を割り当てても、後のセッションで正しく呼び出されません。</p>
-
-    <h3>動的グループ</h3>
-
-    <p>動的グループの中身は、論理条件によって定義されます。この条件に合致する項目のみがグループに含まれることになります。この方法は、データベース自身に含まれる情報を用い、データベースが変更されると、常に動的に更新されます。</p>
-
-    <p>下記の2つの条件型を使用することができます。</p>
-
-    <dl>
-        <dt><b>フィールド中のキーワードを検索</b></dt>
-
-        <dd>この方法は、特定のBibTeXフィールド(例えば<tt>keywords</tt>)に、特定の検索語(例えば<tt>electrical</tt>)が含まれる項目をグループ化します。当然ながら、この方法が機能するためには、すべての項目にグループ化用フィールドが存在しているとともに、その内容が正確でなくてはなりません。上記の用例を用いると、electricalに関係する全ての項目をグループ化することになります。あるいは、<tt>author</tt>フィールドを使用すると、著者毎にグループ化することができます。検索は、平文でも正規表現でも行うことができます。前者の場合は、グループ化用フィールドの内容に、手動で検索語を追加したり削除したりするだけで、項目を追加したり削除したりすることができます。この方法は、<tt>keywords</tt>フィールドや他の自己定義フィールドでは意味を成しますが、<tt>author</tt>や<tt>year</tt>のようなフィールドでは、明らかに意味を成しません。</dd>
-
-        <dt><b>自由型検索表現を使用</b></dt>
-
-        <dd>これは上記と同様ですが、単独フィールドを単独検索語で検索するのではなく、<a href="SearchHelp.html#advanced">検索表現文法</a>を使用することができます。これは、論理演算子(<tt>AND</tt>・<tt>OR</tt>・<tt>NOT</tt>)をサポートし、複数のBibTeXフィールドを検索することができます。例えば、<tt>keywords=regression and not keywords=linear</tt>という検索表現は、非線形回帰に関係した項目をグループ化します。</dd>
-    </dl>
-
-    <p>グループ表示において、動的グループは、既定値で<i>イタリック体</i>で表示されます。この表示は、設定(オプション→設定→グループ→「動的グループをイタリック体で表示」チェックボックス)で、止めることができます。</p>
-
-    <h3>Hierarchical context</h3>
-
-    <p>By default, a group is
-    <b>independent</b> of its position in the groups tree: When
-    selected, only the group's contents are shown. However,
-    especially when using dynamic groups, it is often useful to
-    define a subgroup that <b>refines its supergroup</b>, i.e.,
-    when selected, entries contained in both groups are displayed.
-    For example, create a supergroup containing entries with the
-    keyword <tt>distribution</tt> and a subgroup containing entries
-    with the keyword <tt>gauss</tt> that refines this supergroup.
-    Selecting the subgroup now displays entries that match both
-    conditions, i.e. are concerned with Gaussian distributions. By
-    adding another refining subgroup for <tt>laplace</tt> to the
-    original supergroup, the grouping can easily be extended. In
-    the groups tree, refining groups have a special icon (this can
-    be turned off in the preferences).</p>
-
-    <p>The logical complement to a refining group is a group that
-    <b>includes its subgroups</b>, i.e. when selected, not only the
-    group's own entries, but also its subgroups' entries are shown.
-    In the groups tree, this type of group has a special icon (this
-    can be turned off in the preferences).</p>
-
-    <h2>Viewing a group's entries, combining multiple
-    groups</h2>
-
-    <p>Selecting a group shows the entries contained in
-    that group by highlighting them and, depending on the settings
-    (accessible by clicking the <b>Settings</b> button), moving
-    them to the top of the list and/or selecting them. These
-    options are identical to those available for the regular
-    search.</p>
-
-    <p>When multiple groups are selected, either the union or the
-    intersection of their content is shown, depending on the
-    current settings. This allows to quickly combine multiple
-    conditions, e.g. if you have a static group <tt>Extremely
-    Important</tt> to which you assign all extremely important
-    entries, you can view the extremely important entries in any
-    other group by selecting both groups (this requires to have
-    <b>Intersection</b> selected in the settings).</p>
-
-    <h2>Groups and searching</h2>
-
-    <p>When viewing the contents of the
-    selected group(s), a search can be performed within these
-    contents using the regular search facility.</p>
-
-    <h2>Highlighting overlapping groups</h2>
-
-    <p>The <b>Settings</b>
-    button offers an option to highlight overlapping groups. If
-    this is activated, upon selection of one or more groups, all
-    groups that contain at least one of the entries contained in
-    the currently selected group(s) are highlighted. This quickly
-    identifies overlap between the groups' contents. You might, for
-    example, create a group <tt>To Read</tt> that contains all
-    entries which you plan to read. Now, whenever you select any
-    group, the group <tt>To Read</tt> is highlighted if the
-    selected group contains entries that you plan to read.</p>
-
-    <h2>Advanced features</h2>
-
-    <p>After mastering the grouping concepts
-    described above, the following advanced features might come in
-    handy.</p>
-
-    <h3>Automatically creating dynamic groups</h3>
-
-    <p>By clicking the
-    <b>Automatically create groups for database</b> button, you can
-    quickly create a set of groups appropriate for your database.
-    This feature will gather all words found in a specific field of
-    your choice, and create a group for each word. This is useful
-    for instance if your database contains suitable keywords for
-    all entries. By autogenerating groups based on the
-    <tt>keywords</tt> field, you should have a basic set of groups
-    at no cost.</p>
-
-    <p>You can also specify characters to ignore, for instance
-    commas used between keywords. These will be treated as
-    separators between words, and not part of them. This step is
-    important for combined keywords such as <tt>laplace
-    distribution</tt> to be recognized as a single semantic unit.
-    (You cannot use this option to remove complete words. Instead,
-    delete the unwanted groups manually after they were created
-    automatically.)</p>
-
-    <h3>Refreshing the groups view</h3>
-
-    <p>The <b>Refresh</b> button
-    updates the entry table to reflect the current groups
-    selection. This is usually done automatically, but in rare
-    occasions (e.g. after a group-related undo/redo) a manual
-    refresh is required.</p>
-
-    <h3>Mixing refining groups with including groups</h3>
-
-    <p>If a refining group is a subgroup of a group that includes its
-    subgroups -- the refining group's siblings --, these siblings
-    are ignored when the refining group is selected.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+</head>
+
+<body>
+<h1>グループ</h1>
+
+    <p>グループを用いると、ディスク上のファイルをディレクトリやサブディレクトリを使って整理するように、BibTeXデータベースをツリー状に構造化することができます。ファイルツリーと違うところは、大きく2つあります。</p>
+
+    <ul>
+        <li>ファイルは、常に唯一のディレクトリ内に属しますが、項目は二つ以上のグループに属することができます。</li>
+
+        <li>グループは、特定の基準を設けて内容を動的に制御することができます。これらの基準に一致する新規項目は、自動的にグループに加えられます。このような機能は、通常のファイルシステムにはありませんが、電子メールクライアントの中には、同様の機能を持つものがあります(ThunderbirdやOperaなど)。</li>
+    </ul>
+
+    <p>グループを選択すると、当該グループに属する項目が表示されます。複数のグループを選択すると、現在の設定の状態によって、どれかのグループに属する項目が表示されるか(和集合)、すべてのグループに属する項目が表示されます(積集合)。これらはすべて下記に詳細に説明します。</p>
+
+    <p>グループの定義はデータベース毎に為されます。これは、<tt>.bib</tt>ファイル内の<tt>@COMMENT</tt>ブロックに保存され、全ユーザーに共有されます(将来のJabRefではユーザー毎のグループがサポートされるかもしれません)。</p>
+
+    <h2>制御盤</h2>
+
+    <p>グループ制御盤は、画面左側のサイド・ペーンに表示されます。<tt>CTRL-SHIFT-G</tt>を押すか、ツールバーのグループボタンを押すことで入切することができます。制御盤にはいくつかのボタンがありますが、ほとんどの機能はコンテクストメニュー(「右クリック」)でもアクセスできます。ドラッグ&ドロップもサポートされています。</p>
+
+    <table cellspacing="0"
+           cellpadding="5"
+           border="0"
+           style="background-color: #C0FFC0"
+		   summary="Examples">
+        <tr>
+            <td>
+                <h2>いくつかの簡単な例</h2>
+
+                <p>わたしは...</p>
+
+                <h3>...グループを作成して、いくつかの項目を割り当てたいのです</h3>
+
+                <p>グループ制御盤が表示されていることを確認します。<b>新規グループ</b>ボタンを押し、新しいグループの名称を入力、他の値はすべて既定値にしたままで<b>OK</b>ボタンを押します。そのグループに所属させたい項目群を選択して、そのグループへドラッグ&ドロップするか、コンテクストメニュー中の<b>グループに追加</b>オプションを選択します。最後に、そのグループを選択して、内容を表示させます(いま所属させた項目が表示されるはずです)。</p>
+
+                <h3>...<tt>keywords</tt>フィールドを使用して項目をグループ分けしたいのです</h3>
+
+                <p>グループ制御盤が表示されていることを確認します。<b>新規グループ</b>ボタンを押し、新しいグループの名称を入力、オプションを「フィールド中のキーワードを検索して動的にグループ化」に設定します。検索するキーワードを入力して<b>OK</b>ボタンを押します。最後に、そのグループを選択して、内容を表示させます(<tt>keywords</tt>フィールドに指定したキーワードが入っている項目すべてが表示されるはずです)。</p>
+
+                <h3>...自由型検索表現を使ってグループを定義したいのです</h3>
+
+                <p>グループ制御盤が表示されていることを確認します。<b>新規グループ</b>ボタンを押し、新しいグループの名称を入力、オプションを「自由型検索表現で動的にグループ化」に設定します。「検索表現」に<tt>author=smith</tt>のように入力し(<tt>smith</tt>はデータベース中の実際の名前に置き換えてください)、<b>OK</b>ボタンを押します。最後に、そのグループを選択して、内容を表示させます(<tt>author</tt>フィールドに指定した名前が入っている項目すべてが表示されるはずです)。</p>
+
+                <h3>...複数のグループを連結したいのです</h3>
+
+                <p>上述の方法などを使って、2つのグループを作成します。<b>設定</b>ボタンを押して、<b>論理和</b>が選択されていることを確認します。それから2つのグループを選択します。2つのグループのうちどちらかに属している項目がすべて表示されます。<b>設定</b>をもう一度押し、<b>論理積</b>を選択します。すると、両方のグループの属している項目のみが表示されます(全く表示されないかもしれませんし、両方のグループが同じ項目を含んでいる場合には全く同じ項目が表示されます)。</p>
+
+                <h3>...重複のあるグループを識別したいのです</h3>
+
+                <p>JabRefでは、現在選択しているグループと重複部分があるグループ(すなわち、そのうち少なくとも1つの項目が現在選択しているグループにも含まれているもの)を簡単に見つけることができます。<b>設定</b>を押して、「重複のあるグループを着色」オプションを有効にします。そして、他のグループと重複しているグループを選択すると、他のグループの方が着色されます。</p>
+            </td>
+        </tr>
+    </table>
+
+    <h2>グループの型</h2>
+
+    <p>JabRefには、以下の4つのグループ型があります。</p>
+
+    <ol>
+        <li><b>全項目</b>グループは、名称が示すとおり、全ての項目を含んでいて、常に存在し、編集したり削除したりすることはできません。</li>
+
+        <li><b>静的グループ</b>は、ディスク上のディレクトリと同様の働きを示し、明示的に割り当てた項目のみを含みます。</li>
+
+        <li><b>キーワード検索に基づく動的グループ</b>には、特定のBibTeXフィールド(例えば<tt>keywords</tt>)に特定のキーワード(例えば<tt>electrical</tt>)が含まれる項目が含まれます。この方法では、項目を手動で割り当てる必要はなく、データベースに既存の情報を使用します。もしデータベース中の全ての項目が、<tt>keywords</tt>フィールドに適切なキーワードが収録されているならば、このグループ型を用いるのがもっとも良い方法でしょう。</li>
+
+        <li><b>自由型検索表現に基づく動的グループ</b>には、指定した検索表現に一致する項目が含まれます。検索表現は、サイド・ペーンの<a href="SearchHelp.html">検索パネル</a>と同一の文法を用います。この<a href="SearchHelp.html#advanced">文法</a>は、論理演算子(<tt>AND</tt>・<tt>OR</tt>・<tt>NOT</tt>)をサポートし、検索対象として1つ以上のBibTeXフィールドを指定することができるので、キーワード検索よりも柔軟なグループ定義を行うことができます(例:<tt>author=smith and title=electrical</tt>)。</li>
+    </ol>
+    <p>作成したグループは、上記の後ろ3つの型のいずれかになります。グループをダブルクリックして現れるグループ編集ダイアログでは、選択もしくは編集したグループの定義の説明が、簡便な言葉で表示されます。</p>
+
+
+    <h2>グループの構造およびグループの作成と削除</h2>
+
+    <p>ディレクトリと同様に、グループはツリー状に体系化することができます。この時、<b>全項目</b>グループがルート(ツリーの起点)になります。グループを右クリックすれば、選択したグループと同じ階層かそれよりも下層に、新しいグループを追加することができます。<b>新規グループ</b>ボタンを押せば、現在選択されているグループの状態に関わらず、<b>全項目</b>グループ配下に、新しい下層グループを加えることができます。コンテキストメニューを使えば、グループや下層グループを削除したり、下層グループをアルファベット順に整序したり、グループをツリー内の別の場所に移動したりすることができます。後者は、ドラッグ&ドロップでも行えるようになっていますが、グループ内の下層グループの順序を変更することはサポートされません。</p>
+
+    <p>取り消しと再実行は、編集全てにおいてサポートされています。</p>
+
+    <h3>静的グループ</h3>
+
+    <p>静的グループは、項目を明示的に割り当てることによってのみ、作成することができます。静的グループを作成した後、それに割り当てる項目を選択し、ドラッグ&ドロップか主要表のコンテクストメニューを用いて割り当てを行ってください。静的グループから項目を削除するには、項目を選択して、主要表のコンテクストメニューを使ってください。設定できるオプションはありません。</p>
+
+    <p>このグループ化法は、全項目が一意的なBibTeX鍵を持っていることを前提としています。BibTeX鍵の欠損や重複がある場合は、それらの項目を割り当てても、後のセッションで正しく呼び出されません。</p>
+
+    <h3>動的グループ</h3>
+
+    <p>動的グループの中身は、論理条件によって定義されます。この条件に合致する項目のみがグループに含まれることになります。この方法は、データベース自身に含まれる情報を用い、データベースが変更されると、常に動的に更新されます。</p>
+
+    <p>下記の2つの条件型を使用することができます。</p>
+
+    <dl>
+        <dt><b>フィールド中のキーワードを検索</b></dt>
+
+        <dd>この方法は、特定のBibTeXフィールド(例えば<tt>keywords</tt>)に、特定の検索語(例えば<tt>electrical</tt>)が含まれる項目をグループ化します。当然ながら、この方法が機能するためには、すべての項目にグループ化用フィールドが存在しているとともに、その内容が正確でなくてはなりません。上記の用例を用いると、electricalに関係する全ての項目をグループ化することになります。あるいは、<tt>author</tt>フィールドを使用すると、著者毎にグループ化することができます。検索は、平文でも正規表現でも行うことができます。前者の場合は、グループ化用フィールドの内容に、手動で検索語を追加したり削除したりするだけで、項目を追加したり削除したりすることができます。この方法は、<tt>keywords</tt>フィールドや他の自己定義フィールドでは意味を成しますが、<tt>author</tt>や<tt>year</tt>のようなフィールドでは、明らかに意味を成しません。</dd>
+
+        <dt><b>自由型検索表現を使用</b></dt>
+
+        <dd>これは上記と同様ですが、単独フィールドを単独検索語で検索するのではなく、<a href="SearchHelp.html#advanced">検索表現文法</a>を使用することができます。これは、論理演算子(<tt>AND</tt>・<tt>OR</tt>・<tt>NOT</tt>)をサポートし、複数のBibTeXフィールドを検索することができます。例えば、<tt>keywords=regression and not keywords=linear</tt>という検索表現は、非線形回帰に関係した項目をグループ化します。</dd>
+    </dl>
+
+    <p>グループ表示において、動的グループは、既定値で<i>イタリック体</i>で表示されます。この表示は、設定(オプション→設定→グループ→「動的グループをイタリック体で表示」チェックボックス)で、止めることができます。</p>
+
+    <h3>Hierarchical context</h3>
+
+    <p>By default, a group is
+    <b>independent</b> of its position in the groups tree: When
+    selected, only the group's contents are shown. However,
+    especially when using dynamic groups, it is often useful to
+    define a subgroup that <b>refines its supergroup</b>, i.e.,
+    when selected, entries contained in both groups are displayed.
+    For example, create a supergroup containing entries with the
+    keyword <tt>distribution</tt> and a subgroup containing entries
+    with the keyword <tt>gauss</tt> that refines this supergroup.
+    Selecting the subgroup now displays entries that match both
+    conditions, i.e. are concerned with Gaussian distributions. By
+    adding another refining subgroup for <tt>laplace</tt> to the
+    original supergroup, the grouping can easily be extended. In
+    the groups tree, refining groups have a special icon (this can
+    be turned off in the preferences).</p>
+
+    <p>The logical complement to a refining group is a group that
+    <b>includes its subgroups</b>, i.e. when selected, not only the
+    group's own entries, but also its subgroups' entries are shown.
+    In the groups tree, this type of group has a special icon (this
+    can be turned off in the preferences).</p>
+
+    <h2>Viewing a group's entries, combining multiple
+    groups</h2>
+
+    <p>Selecting a group shows the entries contained in
+    that group by highlighting them and, depending on the settings
+    (accessible by clicking the <b>Settings</b> button), moving
+    them to the top of the list and/or selecting them. These
+    options are identical to those available for the regular
+    search.</p>
+
+    <p>When multiple groups are selected, either the union or the
+    intersection of their content is shown, depending on the
+    current settings. This allows to quickly combine multiple
+    conditions, e.g. if you have a static group <tt>Extremely
+    Important</tt> to which you assign all extremely important
+    entries, you can view the extremely important entries in any
+    other group by selecting both groups (this requires to have
+    <b>Intersection</b> selected in the settings).</p>
+
+    <h2>Groups and searching</h2>
+
+    <p>When viewing the contents of the
+    selected group(s), a search can be performed within these
+    contents using the regular search facility.</p>
+
+    <h2>Highlighting overlapping groups</h2>
+
+    <p>The <b>Settings</b>
+    button offers an option to highlight overlapping groups. If
+    this is activated, upon selection of one or more groups, all
+    groups that contain at least one of the entries contained in
+    the currently selected group(s) are highlighted. This quickly
+    identifies overlap between the groups' contents. You might, for
+    example, create a group <tt>To Read</tt> that contains all
+    entries which you plan to read. Now, whenever you select any
+    group, the group <tt>To Read</tt> is highlighted if the
+    selected group contains entries that you plan to read.</p>
+
+    <h2>Advanced features</h2>
+
+    <p>After mastering the grouping concepts
+    described above, the following advanced features might come in
+    handy.</p>
+
+    <h3>Automatically creating dynamic groups</h3>
+
+    <p>By clicking the
+    <b>Automatically create groups for database</b> button, you can
+    quickly create a set of groups appropriate for your database.
+    This feature will gather all words found in a specific field of
+    your choice, and create a group for each word. This is useful
+    for instance if your database contains suitable keywords for
+    all entries. By autogenerating groups based on the
+    <tt>keywords</tt> field, you should have a basic set of groups
+    at no cost.</p>
+
+    <p>You can also specify characters to ignore, for instance
+    commas used between keywords. These will be treated as
+    separators between words, and not part of them. This step is
+    important for combined keywords such as <tt>laplace
+    distribution</tt> to be recognized as a single semantic unit.
+    (You cannot use this option to remove complete words. Instead,
+    delete the unwanted groups manually after they were created
+    automatically.)</p>
+
+    <h3>Refreshing the groups view</h3>
+
+    <p>The <b>Refresh</b> button
+    updates the entry table to reflect the current groups
+    selection. This is usually done automatically, but in rare
+    occasions (e.g. after a group-related undo/redo) a manual
+    refresh is required.</p>
+
+    <h3>Mixing refining groups with including groups</h3>
+
+    <p>If a refining group is a subgroup of a group that includes its
+    subgroups -- the refining group's siblings --, these siblings
+    are ignored when the refining group is selected.</p>
+</body>
+</html>
diff --git a/src/help/ja/HelpHelp.html b/src/help/ja/HelpHelp.html
old mode 100755
new mode 100644
index 2bd8aba..e08e5b6
--- a/src/help/ja/HelpHelp.html
+++ b/src/help/ja/HelpHelp.html
@@ -1,25 +1,25 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1>ヘルプウィンドウ</h1>
-
-    <p><em>ヘルプボタンをクリックするか、F1を押すと開きます。</em></p>
-
-    <p>ヘルプウィンドウは、JabRefを使う上での情報を提供するためにあります。</p>
-
-    <h2>ヘルプファイルの閲覧</h2>
-
-    <p>ヘルプウィンドウは、実際には軽量HTMLブラウザであり、ヘルプファイルは標準的なHTMLファイルです。</p>
-
-    <p>ヘルプウィンドウは、どのプログラムウィンドウからそれが呼ばれたのかによって、異なるファイルを既定で開きます。もしこのファイルが、あなたの関心事を説明していないときには、ツールバーの<em>目次</em>ボタンを押すと、利用できるヘルプファイルの一覧が表示されます。</p>
-
-    <p>さらに、ツールバーには、次または前のファイルを表示するための移動ボタンがあります。これらは、標準的なウェブブラウザの<em>戻る</em>ボタンや<em>進む</em>ボタンに似たものです。<em> 戻る</em>の移動短絡キーは左矢印キーであり、<em>進む</em>の移動短絡キーは右矢印キーです。</p>
-
-    <p>ヘルプウィンドウは、エスケープ鍵を押すと閉じます。</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+    <h1>ヘルプウィンドウ</h1>
+
+    <p><em>ヘルプボタンをクリックするか、F1を押すと開きます。</em></p>
+
+    <p>ヘルプウィンドウは、JabRefを使う上での情報を提供するためにあります。</p>
+
+    <h2>ヘルプファイルの閲覧</h2>
+
+    <p>ヘルプウィンドウは、実際には軽量HTMLブラウザであり、ヘルプファイルは標準的なHTMLファイルです。</p>
+
+    <p>ヘルプウィンドウは、どのプログラムウィンドウからそれが呼ばれたのかによって、異なるファイルを既定で開きます。もしこのファイルが、あなたの関心事を説明していないときには、ツールバーの<em>目次</em>ボタンを押すと、利用できるヘルプファイルの一覧が表示されます。</p>
+
+    <p>さらに、ツールバーには、次または前のファイルを表示するための移動ボタンがあります。これらは、標準的なウェブブラウザの<em>戻る</em>ボタンや<em>進む</em>ボタンに似たものです。<em> 戻る</em>の移動短絡キーは左矢印キーであり、<em>進む</em>の移動短絡キーは右矢印キーです。</p>
+
+    <p>ヘルプウィンドウは、エスケープ鍵を押すと閉じます。</p>
+</body>
+</html>
diff --git a/src/help/ja/IEEEXploreHelp.html b/src/help/ja/IEEEXploreHelp.html
index eaa8403..b4bbca3 100644
--- a/src/help/ja/IEEEXploreHelp.html
+++ b/src/help/ja/IEEEXploreHelp.html
@@ -1,24 +1,24 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-    <h1>IEEEXploreの検索</h1>
-
-    <p>IEEEXploreは、電気工学やコンピューター科学、電子工学分野の技術文献へのアクセスを提供しています。</p>
-
-    <p>JabRefは、IEEEXploreデータベースから文献情報をダウンロードすることができます。この機能を使うには、<b>ウェブ検索→ACMPortalを検索</b>を選択してください。すると検索インタフェースが側面に表示されるようになります。</p>
-
-    <p>検索を始めるには、問い合わせる単語を入力し、<b>Enter</b>鍵を押すか<b>取得</b>ボタンを押してください。</p>
-
-    <p>検索はゲストモードで為されますので、最大で100個の結果が返されます。</p>
-
-    <p><b>概要を取り込む</b>というチェックボックスを有効にすれば、各項目の文献情報に加えて要約もダウンロードすることを選ぶことができます。これはネットワークへの問い合わせを増やすことは<b>ありません</b>。</p>
-
-    <p>BibTeX引用をIEEEXploreから直接ダウンロードするオプションは、まだ動作しません。</p>
-
-    <p>何かご提案がありましたら、Aaron Chen <b>nextAaron at gmail.com</b>にメールを送ってください。</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+    <h1>IEEEXploreの検索</h1>
+
+    <p>IEEEXploreは、電気工学やコンピューター科学、電子工学分野の技術文献へのアクセスを提供しています。</p>
+
+    <p>JabRefは、IEEEXploreデータベースから文献情報をダウンロードすることができます。この機能を使うには、<b>ウェブ検索→ACMPortalを検索</b>を選択してください。すると検索インタフェースが側面に表示されるようになります。</p>
+
+    <p>検索を始めるには、問い合わせる単語を入力し、<b>Enter</b>鍵を押すか<b>取得</b>ボタンを押してください。</p>
+
+    <p>検索はゲストモードで為されますので、最大で100個の結果が返されます。</p>
+
+    <p><b>概要を取り込む</b>というチェックボックスを有効にすれば、各項目の文献情報に加えて要約もダウンロードすることを選ぶことができます。これはネットワークへの問い合わせを増やすことは<b>ありません</b>。</p>
+
+    <p>BibTeX引用をIEEEXploreから直接ダウンロードするオプションは、まだ動作しません。</p>
+
+    <p>何かご提案がありましたら、Aaron Chen <b>nextAaron at gmail.com</b>にメールを送ってください。</p>
+</body>
+</html>
diff --git a/src/help/ja/ImportInspectionDialog.html b/src/help/ja/ImportInspectionDialog.html
index 44fe93e..ce430d4 100644
--- a/src/help/ja/ImportInspectionDialog.html
+++ b/src/help/ja/ImportInspectionDialog.html
@@ -1,24 +1,24 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Import inspection window</h1>
-
-    <p>When you import new entries
-    from a supported reference format, or fetch entries directly
-    from the Internet, they are first shown in this window for
-    inspection. At this point none of the entries have been added
-    to the database you already have open (if any).</p>
-
-    <p>The inspection window allows you to discard entries you
-    don't want to keep, and to perform some simple operations like
-    generating BibTeX keys for the entries, or adding them to
-    <a href="GroupsHelp.html">groups</a>. If you are importing into
-    an existing database, it is often easier to perform these
-    operations before they are mixed in between the entries of the
-    existing database.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Import inspection window</h1>
+
+    <p>When you import new entries
+    from a supported reference format, or fetch entries directly
+    from the Internet, they are first shown in this window for
+    inspection. At this point none of the entries have been added
+    to the database you already have open (if any).</p>
+
+    <p>The inspection window allows you to discard entries you
+    don't want to keep, and to perform some simple operations like
+    generating BibTeX keys for the entries, or adding them to
+    <a href="GroupsHelp.html">groups</a>. If you are importing into
+    an existing database, it is often easier to perform these
+    operations before they are mixed in between the entries of the
+    existing database.</p>
+</body>
+</html>
diff --git a/src/help/ja/JabRefHelp.html b/src/help/ja/JabRefHelp.html
old mode 100755
new mode 100644
index 0405bf1..b6f5e53
--- a/src/help/ja/JabRefHelp.html
+++ b/src/help/ja/JabRefHelp.html
@@ -1,18 +1,18 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-    <h1>JabRef</h1>
-
-    <p><strong>《註》</strong><em>bibtex</em>プログラムは、各ヘルプファイル中で繰り返し言及されています。<em>Bibtex</em>は、Oren Patashniによって作られた、LaTeX文書中の書誌参照を生成するためのユーティリティです。同じデータベース形式が、Adobe FrameMaker中の書誌情報生成ユーティリティであるCiteMakerでも使用されています。</p>
-
-    <p>JabRefは、<em>bibtex</em>データベースを操作するためのプログラムです。本プログラムは、内部ファイル形式は使用しておらず、通常はデータベースを直接<em>bibtex</em> .bib形式で読み込んだり保存したりします。一方で、様々な形式の書誌データベースをJabRefに読み込むこともできます。</p>
-
-    <p>JabRefは、使用しているデータベース内容の全体像を得られるように、整序機能や検索機能を備えています。また、どの情報が必須だったか暗記しておくことなく、簡単に新しいデータベース項目を追加することができますし、<em>bibtex</em>キーを自動生成させることもできます。JabRefは、<em>bibtex</em>やCiteMakerを利用している方々に最適ですが、その他の参照システムを使用している方や、単に文献ソースを整理したいという方にも便利です。</p>
-
-    <p><a href="BaseFrameHelp.html">JabRef 基本ウィンドウ</a></p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+    <h1>JabRef</h1>
+
+    <p><strong>《註》</strong><em>bibtex</em>プログラムは、各ヘルプファイル中で繰り返し言及されています。<em>Bibtex</em>は、Oren Patashniによって作られた、LaTeX文書中の書誌参照を生成するためのユーティリティです。同じデータベース形式が、Adobe FrameMaker中の書誌情報生成ユーティリティであるCiteMakerでも使用されています。</p>
+
+    <p>JabRefは、<em>bibtex</em>データベースを操作するためのプログラムです。本プログラムは、内部ファイル形式は使用しておらず、通常はデータベースを直接<em>bibtex</em> .bib形式で読み込んだり保存したりします。一方で、様々な形式の書誌データベースをJabRefに読み込むこともできます。</p>
+
+    <p>JabRefは、使用しているデータベース内容の全体像を得られるように、整序機能や検索機能を備えています。また、どの情報が必須だったか暗記しておくことなく、簡単に新しいデータベース項目を追加することができますし、<em>bibtex</em>キーを自動生成させることもできます。JabRefは、<em>bibtex</em>やCiteMakerを利用している方々に最適ですが、その他の参照システムを使用している方や、単に文献ソースを整理したいという方にも便利です。</p>
+
+    <p><a href="BaseFrameHelp.html">JabRef 基本ウィンドウ</a></p>
+</body>
+</html>
diff --git a/src/help/ja/JournalAbbreviations.html b/src/help/ja/JournalAbbreviations.html
index a37cd34..124d60d 100644
--- a/src/help/ja/JournalAbbreviations.html
+++ b/src/help/ja/JournalAbbreviations.html
@@ -1,52 +1,52 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-    <h1>学術誌名の短縮形</h1>
-
-    <p>この機能は、<b>オプション→誌名短縮形を管理</b>で設定することができます。</p>
-
-    <p>JabRefでは、学術誌名が誌名表に登録されていれば、短縮形と非短縮形を切り替えることができます。誌名表は複数持つことができ、これらはハードディスク上の外部テキストファイルとして取り扱われます。</p>
-
-    <h2>この機能を使うには</h2>
-
-    <p>誌名変換機能は、項目エディタ内か<b>ツール</b>メニューから使用することができます。項目エディタ内には、<i>journal</i>フィールド脇に<b>短縮形/非短縮形の切替</b>というラベルの付いたボタンがあります。これを押すと、現在の誌名が、以下の3つのモードの間で切り替わります。</p>
-
-    <ul>
-        <li>完全名 (例) "Aquacultural Engineering"</li>
-
-        <li>ISO式短縮形 (例) "Aquacult. Eng."</li>
-
-        <li>MEDLINE式短縮形 (例) "Aquacult Eng"</li>
-    </ul>現在の誌名が誌名表にない場合には、フィールドは変更されません。
-
-    <p>多くの項目の誌名を一括して変換するには、好きな数だけ項目を選択してから、<b>ツール→学術誌名を短縮形に (ISO)</b>、<b>ツール→学術誌名を短縮形に (MEDLINE)</b>、または<b>ツール→学術誌名を非短縮形に</b>のいずれかを選択します。これら3つのアクションは、選択項目のうち、誌名表に掲載されているすべての誌名を、略語化したり解除したりします。</p>
-
-    <h2>誌名表を準備する</h2>
-
-    <p>誌名表は、JabRefからリンクした外部テキストファイルの形で、複数持つことができます。そのうち優先表は、JabRef内から編集することができます。</p>
-
-    <h3>個人用の誌名短縮表</h3>
-
-    <p>個人用の誌名表は、<b>誌名短縮形の管理</b>ウィンドウの上部で取り扱うことができます。個人用誌名表を作成するには、<b>新規ファイル</b>を選択して、手動でファイル名を入力するか<b>一覧</b>ボタンを使用してください。手始めとなるファイルが既にある場合には、<b>既存ファイル</b>を選択して、<b>一覧</b>ボタンからファイルを選択してください。画面の表が更新されて、選択した表の内容が表示されます。</p>
-
-    <p>この表と右側のツールボタンを用いて、学術誌項目を追加したり削除したり編集したりすることができます。それぞれの項目については、学術誌の完全な名称とISO式短縮形を指定しなくてはなりません(例えば"Aquacultural Engineering"と"Aquacult. Eng.")。項目を編集するには、表中の行をダブルクリックしてください。</p>
-
-    <p>ファイルが選択されていて、表に1項目以上が含まれていれば、<b>OK</b>をクリックすると、表の内容が選択したファイルに保存され、JabRefの誌名表が更新されます。</p>
-
-    <h3>外部誌名表</h3>
-
-    <p>個人用誌名表の他に、複数の外部の誌名表にリンクすることができます。これらのリンクは、<b>誌名短縮形の管理</b>ウィンドウの下部で設定することができます。外部誌名表は、個人用誌名表と類似しています。唯一の違いは、JabRefには、外部誌名表を編集するインタフェースが備わっていないことです。</p>
-
-    <p>必要に応じて外部誌名表を新たに追加するには、<b>+</b>ボタンをクリックして、インタフェースにファイル行を追加してください。その上で、ウィンドウ下部のファイル行横にある<b>一覧</b>か<b>ダウンロード</b>ボタンを使用してください。</p>
-
-    <ul>
-        <li><b>一覧</b>ボタンを使うと、コンピューター上の既存のファイルを選択することができます。</li>
-
-        <li><b>ダウンロード</b>ボタンを使うと、URLを入力してインターネットから誌名表をダウンロードし、コンピューター上のローカルファイルとして保存して、JabRefから誌名表としてリンクすることができます。URLは、既定でJabRefのウェブページにある誌名表のアドレスになっています。この誌名表は完全ではありませんが、将来的に改善されていくでしょう。</li>
-    </ul>個人用誌名表にある項目は、外部誌名表のいずれかに存在する、同じ完全名の項目に優先します。同様に、外部誌名表間の優先順位は、ウィンドウに挙げられている順で優先されます。
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+    <h1>学術誌名の短縮形</h1>
+
+    <p>この機能は、<b>オプション→誌名短縮形を管理</b>で設定することができます。</p>
+
+    <p>JabRefでは、学術誌名が誌名表に登録されていれば、短縮形と非短縮形を切り替えることができます。誌名表は複数持つことができ、これらはハードディスク上の外部テキストファイルとして取り扱われます。</p>
+
+    <h2>この機能を使うには</h2>
+
+    <p>誌名変換機能は、項目エディタ内か<b>ツール</b>メニューから使用することができます。項目エディタ内には、<i>journal</i>フィールド脇に<b>短縮形/非短縮形の切替</b>というラベルの付いたボタンがあります。これを押すと、現在の誌名が、以下の3つのモードの間で切り替わります。</p>
+
+    <ul>
+        <li>完全名 (例) "Aquacultural Engineering"</li>
+
+        <li>ISO式短縮形 (例) "Aquacult. Eng."</li>
+
+        <li>MEDLINE式短縮形 (例) "Aquacult Eng"</li>
+    </ul>現在の誌名が誌名表にない場合には、フィールドは変更されません。
+
+    <p>多くの項目の誌名を一括して変換するには、好きな数だけ項目を選択してから、<b>ツール→学術誌名を短縮形に (ISO)</b>、<b>ツール→学術誌名を短縮形に (MEDLINE)</b>、または<b>ツール→学術誌名を非短縮形に</b>のいずれかを選択します。これら3つのアクションは、選択項目のうち、誌名表に掲載されているすべての誌名を、略語化したり解除したりします。</p>
+
+    <h2>誌名表を準備する</h2>
+
+    <p>誌名表は、JabRefからリンクした外部テキストファイルの形で、複数持つことができます。そのうち優先表は、JabRef内から編集することができます。</p>
+
+    <h3>個人用の誌名短縮表</h3>
+
+    <p>個人用の誌名表は、<b>誌名短縮形の管理</b>ウィンドウの上部で取り扱うことができます。個人用誌名表を作成するには、<b>新規ファイル</b>を選択して、手動でファイル名を入力するか<b>一覧</b>ボタンを使用してください。手始めとなるファイルが既にある場合には、<b>既存ファイル</b>を選択して、<b>一覧</b>ボタンからファイルを選択してください。画面の表が更新されて、選択した表の内容が表示されます。</p>
+
+    <p>この表と右側のツールボタンを用いて、学術誌項目を追加したり削除したり編集したりすることができます。それぞれの項目については、学術誌の完全な名称とISO式短縮形を指定しなくてはなりません(例えば"Aquacultural Engineering"と"Aquacult. Eng.")。項目を編集するには、表中の行をダブルクリックしてください。</p>
+
+    <p>ファイルが選択されていて、表に1項目以上が含まれていれば、<b>OK</b>をクリックすると、表の内容が選択したファイルに保存され、JabRefの誌名表が更新されます。</p>
+
+    <h3>外部誌名表</h3>
+
+    <p>個人用誌名表の他に、複数の外部の誌名表にリンクすることができます。これらのリンクは、<b>誌名短縮形の管理</b>ウィンドウの下部で設定することができます。外部誌名表は、個人用誌名表と類似しています。唯一の違いは、JabRefには、外部誌名表を編集するインタフェースが備わっていないことです。</p>
+
+    <p>必要に応じて外部誌名表を新たに追加するには、<b>+</b>ボタンをクリックして、インタフェースにファイル行を追加してください。その上で、ウィンドウ下部のファイル行横にある<b>一覧</b>か<b>ダウンロード</b>ボタンを使用してください。</p>
+
+    <ul>
+        <li><b>一覧</b>ボタンを使うと、コンピューター上の既存のファイルを選択することができます。</li>
+
+        <li><b>ダウンロード</b>ボタンを使うと、URLを入力してインターネットから誌名表をダウンロードし、コンピューター上のローカルファイルとして保存して、JabRefから誌名表としてリンクすることができます。URLは、既定でJabRefのウェブページにある誌名表のアドレスになっています。この誌名表は完全ではありませんが、将来的に改善されていくでしょう。</li>
+    </ul>個人用誌名表にある項目は、外部誌名表のいずれかに存在する、同じ完全名の項目に優先します。同様に、外部誌名表間の優先順位は、ウィンドウに挙げられている順で優先されます。
+</body>
+</html>
diff --git a/src/help/ja/LabelPatterns.html b/src/help/ja/LabelPatterns.html
index 02474bd..46533ef 100644
--- a/src/help/ja/LabelPatterns.html
+++ b/src/help/ja/LabelPatterns.html
@@ -1,206 +1,110 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Customizing the BibTeX key generator</h1>
-
-    <p>In the 'Key pattern' tab in Preferences, one can set the fields
-    used in auto generation of BibTex labels. The pattern can be
-    set for each of the standard entry types.</p>
-
-    <h2>Key patterns</h2>
-
-    <p>The pattern can contain any text you wish,
-    in addition to field markers that indicate that a specific
-    field of the entry should be inserted at that position of the
-    key. A field marker generally consists of the field name
-    enclosed in square braces, e.g. <b>[volume]</b>. If the field
-    is undefined in an entry at the time of key generation, no text
-    will be inserted by the field marker.</p>
-
-    <p>Several special field markers are offered, which extract
-    only a specific part of a field. These are listed below. Feel
-    free to suggest new special field markers.</p>
-
-    <p>Special field markers:</p>
-
-    <ul>
-        <li><b>[<code>auth</code>]</b>: The last name of the first
-        author<br /></li>
-
-        <li><b>[<code>authors</code>]</b>: The last name of all
-        authors<br /></li>
-
-        <li><b>[<code>authorLast</code>]</b>: The last name of the last
-        author<br /></li>
-
-        <li><b>[<code>authorsN</code>]</b>: The last name of up to
-        N authors. If there are more authors, "EtAl" is
-        appended.<br /></li>
-        
-        <li><b>[<code>authorsAlpha</code>]</b>: Corresponds to the BibTeX
-        style "alpha". One author: First three letters of the last name.
-        Two to four authors: First letters of last names concatenated.
-        More than four authors: First letters of last names of first three
-        authors concatenated. "+" at the end. <br /></li>  
-
-        <li><b>[<code>authIniN</code>]</b>: The beginning of each
-        author's last name, using no more than N
-        characters.<br /></li>
-
-        <li><b>[<code>authorIni</code>]</b>: The first 5 characters
-        of the first author's last name, and the last name initials
-        of the remaining authors.<br /></li>
-
-        <li><b>[<code>authN</code>]</b>: The first N characters of
-        the first author's last name<br /></li>
-
-        <li><b>[<code>authN_M</code>]</b>: The first N characters
-        of the Mth author's last name<br /></li>
-
-        <li><b>[<code>auth.auth.ea</code>]</b>: The last name of
-        the first two authors, and ".ea" if there are more than
-        two.<br /></li>
-
-        <li><b>[<code>auth.etal</code>]</b>: The last name of the
-        first author, and the last name of the second author if
-        there are two authors or ".etal" if there are more than
-        two.<br /></li>
-
-        <li><b>[<code>authshort</code>]</b>: The last name if one
-        author is given; the first character of up to three
-        authors' last names if more than one author is given. A
-        plus character is added, if there are more than three
-        authors.<br /></li>
-    </ul><b>Note:</b> If there is no author (as in the case of an
-    edited book), then all of the above
-    <b><code>[auth...]</code></b> markers will use the editor(s)
-    (if any) as a fallback. Thus, the editor(s) of a book with no
-    author will be treated as the author(s) for label-generation
-    purposes. If you do not want this behaviour, i.e. you require a
-    marker which expands to nothing if there is no author, use
-    <b><code>pureauth</code></b> instead of
-    <b><code>auth</code></b> in the above codes. For example,
-    <b><code>[pureauth]</code></b>, or
-    <b><code>[pureauthors3]</code></b>.
-
-    <ul>
-        <li><b>[<code>edtr</code>]</b>: The last name of the first
-        editor<br /></li>
-
-        <li><b>[<code>edtrIniN</code>]</b>: The beginning of each
-        editor's last name, using no more than N
-        characters<br /></li>
-
-        <li><b>[<code>editors</code>]</b>: The last name of all
-        editors<br /></li>
-
-        <li><b>[<code>editorLast</code>]</b>: The last name of the last
-        editor<br /></li>
-
-        <li><b>[<code>editorIni</code>]</b>: The first 5 characters
-        of the first editor's last name, and the last name initials
-        of the remaining editors.<br /></li>
-
-        <li><b>[<code>edtrN</code>]</b>: The first N characters of
-        the first editor's last name<br /></li>
-
-        <li><b>[<code>edtrN_M</code>]</b>: The first N characters
-        of the Mth editor's last name<br /></li>
-
-        <li><b>[<code>edtr.edtr.ea</code>]</b>: The last name of
-        the first two editors, and ".ea" if there are more than
-        two.<br /></li>
-
-        <li><b>[<code>edtrshort</code>]</b>: The last name if one
-        editor is given; the first character of up to three
-        editors' last names if more than one editor is given. A
-        plus character is added, if there are more than three
-        editors.<br /></li>
-
-        <li><b>[<code>firstpage</code>]</b>: The number of the
-        first page of the publication (Caution: this will return 
-        the lowest number found in the pages field, since bibtex 
-        allows <code>7,41,73--97</code> or <code>43+</code>.)<br /></li>
-
-        <li><b>[<code>keywordN</code>]</b>: Keyword number N from
-        the "keywords" field, assuming keywords are separated by
-        commas or semicolons.<br /></li>
-
-        <li><b>[<code>lastpage</code>]</b>: The number of the last
-        page of the publication (See the remark on 
-        <code>firstpage</code>)<br /></li>
-
-        <li><b>[<code>shorttitle</code>]</b>: The first 3 words of
-        the title<br /></li>
-
-        <li><b>[<code>shortyear</code>]</b>: The last 2 digits of
-        the publication year<br /></li>
-
-        <li><b>[<code>veryshorttitle</code>]</b>: The first word of
-        the title, discounting 'the', 'a', 'an'.<br /></li>
-    </ul>
-
-    <p>A field name (or one of the above pseudo-field names) may
-    optionally be followed by one or more modifiers. Modifiers are
-    applied in the order they are specified.</p>
-
-    <ul>
-        <li><b>:abbr</b>: Abbreviates the text produced by the
-        field name or spcial field marker. Only the first character
-        and subsequent characters following white space will be
-        included. For example, <b>[journal:abbr]</b> would from the
-        journal name "Journal of Fish Biology" produce
-        "JoFB".<br /></li>
-
-        <li><b>:lower</b>: Forces the text inserted by the field
-        marker to be in lowercase. For example, <b>[auth:lower]</b>
-        expands the last name of the first author in
-        lowercase.<br /></li>
-
-        <li><b>:upper</b>: Forces the text inserted by the field
-        marker to be in uppercase. For example, <b>[auth:upper]</b>
-        expands the last name of the first author in
-        uppercase.<br /></li>
-
-        <li><b>:(x)</b>: Replace x by any string. The string between
-        the parentheses will be inserted if the field marker preceding this
-        modifier resolves to an empty value. For instance, the marker
-        <b>[volume:(unknown)]</b> will return the entry's volume if set, and the
-        string <b>unknown</b> if the entry's <code>volume</code> field is not set.
-        </li>
-    </ul>
-
-    <p>If you haven't defined a key pattern for a certain entry
-    type, the <b>Default key pattern</b> will be used. You can
-    change the default pattern - its setting is above the list of
-    entry types in the <b>Key pattern</b> section of the
-    <b>Preferences</b> dialog.</p>
-
-    <p>The default key pattern is [auth][year], and this could
-    produce keys like e.g. <code>Yared1998</code> If the key is not
-    unique in the current database, it is made unique by adding one
-    of the letters a-z until a unique key is found. Thus, the
-    labels might look like:</p>
-
-    <p style="margin-left: 28pt">
-        <code>Yared1998</code><br />
-        <code>Yared1998a</code><br />
-        <code>Yared1998b</code>
-    </p>
-
-    <h2>Regular expression replace</h2>
-
-    <p>After the key pattern has
-    been applied to produce a key, you can choose to have the key
-    generator search for occurences of a specific regular
-    expression, and replace it with a string. The regular
-    expression and replacement string are entered in the text
-    fields below the list of key patterns. If the replacement
-    string is empty, matches of the regular expression will simply
-    be removed from the generated key.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>BibTeXキー生成機構の個人用設定</h1>
+
+    <p>JabRef設定の「BibTeXキーの生成」タブでは、BibTeXラベルの自動生成に使用されるフィールドを設定することができます。パターンは、標準的な項目型それぞれに対して設定することができます。</p>
+
+    <h2>キーパターン</h2>
+
+    <p>パターンには、特定の項目フィールドをキー内のその場所に入れることを示すフィールドマーカーの他、好きな文字列を含めることができます。フィールドマーカーは、<b>[volume]</b>のように、通常、フィールド名を角括弧で囲ったものです。キーを生成するときに、項目内でフィールドが定義されていなければ、フィールドマーカーには何も挿入されません。</p>
+
+    <p>フィールド中の特定部分を抜き出す特殊フィールドマーカーがいくつか用意されています。これらを下記に列挙します。追加したい特殊フィールドマーカーがありましたら、ぜひお知らせください。</p>
+
+    <p>特殊フィールドマーカー</p>
+
+    <ul>
+        <li><b>[<code>auth</code>]</b>: 第1著者の姓<br /></li>
+
+        <li><b>[<code>authors</code>]</b>: 全著者の姓<br /></li>
+
+        <li><b>[<code>authorLast</code>]</b>: 末尾著者の姓<br /></li>
+
+        <li><b>[<code>authorsN</code>]</b>: N人めの著者までの姓。それよりも多い著者がいる場合は、その後に"EtAl"を付けます。<br /></li>
+        
+        <li><b>[<code>authorsAlpha</code>]</b>: BibTeXスタイル「alpha」に対応します。著者1名の時:姓の最初の3文字。著者2〜4名:姓の最初の文字を繋げたもの。著者5名以上:最初の著者3名の最初の文字を繋げ、最後に「+」を付けたもの。<br /></li>  
+
+        <li><b>[<code>authIniN</code>]</b>: 各著者の姓の頭部最大N文字。<br /></li>
+
+        <li><b>[<code>authorIni</code>]</b>: 第1著者の姓の最初5文字と、残りの著者の姓の頭文字。<br /></li>
+
+        <li><b>[<code>authN</code>]</b>: 第1著者の姓の頭部N文字。<br /></li>
+
+        <li><b>[<code>authN_M</code>]</b>: M番目の著者の姓の頭部N文字。<br /></li>
+
+        <li><b>[<code>auth.auth.ea</code>]</b>: 最初の著者2名の姓と、3名以上著者がいる時には「.ea」を追加。<br /></li>
+
+        <li><b>[<code>auth.etal</code>]</b>: 第1著者の姓の後に、著者が2名の時は第2著者の姓、著者が3名以上の時は「.etal」。<br /></li>
+
+        <li><b>[<code>authshort</code>]</b>: 著者1名の時はその姓、著者2名以上の時は、3名までの著者の姓の最初の文字。4名以上の著者がいる時には、その後に+文字。<br /></li>
+
+    </ul>
+
+    <p><b>《註》</b>(編集書籍など)著者がいない場合には、上記の<b><code>[auth...]</code></b>マーカーはすべて、編者を(ある場合には)代わりに使用します。したがって、著者のいない書籍の編者は、ラベル生成用には著者として取り扱われます。この挙動を望まない、即ち著者がいない場合は何も出力しないマーカーが必要な場合には、上記のコードにおいて<b><code>auth</code></b>の代わりに<b><code>pureauth</code></b>を使用してください。例:<b><code>[pureauth]</code></b>や<b><code>[pureauthors3]</code></b>など。</p>
+
+    <ul>
+        <li><b>[<code>edtr</code>]</b>: 第1編者の姓<br /></li>
+
+        <li><b>[<code>edtrIniN</code>]</b>: 各編者の姓の頭部N文字以内<br /></li>
+
+        <li><b>[<code>editors</code>]</b>: 全編者の姓<br /></li>
+
+        <li><b>[<code>editorLast</code>]</b>: 最後の編者の姓<br /></li>
+
+        <li><b>[<code>editorIni</code>]</b>: 第1編者の姓の頭部5文字と、残りの編者の姓の頭文字<br /></li>
+
+        <li><b>[<code>edtrN</code>]</b>: 第1編者の頭部N文字<br /></li>
+
+        <li><b>[<code>edtrN_M</code>]</b>: 第M編者の頭部N文字<br /></li>
+
+        <li><b>[<code>edtr.edtr.ea</code>]</b>: 最初の2編者の姓と、3名以上の場合は「.ea」を追加。<br /></li>
+
+        <li><b>[<code>edtrshort</code>]</b>: 編者1名の時はその姓、編者2名以上の時は、3名までの編者の姓の最初の文字。4名以上の編者がいる時には、その後に+文字。<br /></li>
+
+        <li><b>[<code>firstpage</code>]</b>: 発行物の最初のページ番号(注意:bibtexは<code>7,41,73--97</code>あるいは<code>43+</code>という表記をするので、pagesフィールド中の最小のページ番号を返します)<br /></li>
+
+        <li><b>[<code>keywordN</code>]</b>: "keywords"フィールドのN番目のキーワード。キーワードがコンマかセミコロンで区切られていると仮定します。<br /></li>
+
+        <li><b>[<code>lastpage</code>]</b>: 発行物の最後のページ(<code>firstpage</code>の註を参照)<br /></li>
+
+        <li><b>[<code>shorttitle</code>]</b>: タイトルの最初の3単語<br /></li>
+
+        <li><b>[<code>shortyear</code>]</b>: 出版年の下2桁<br /></li>
+
+        <li><b>[<code>veryshorttitle</code>]</b>: タイトルの最初の単語。「the」「a」「an」を除く。<br /></li>
+    </ul>
+
+    <p>フィールド名(もしくは上記の準フィールド名)には、1つ以上の修正辞を後ろに付けることができます。修正辞は記述順に適用されます。</p>
+
+    <ul>
+        <li><b>:abbr</b>: フィールド名や特殊フィールドマーカーで生成された文字列を短縮形にします。最初の文字と、その後は空白の次の文字のみを使います。例えば、<b>[journal:abbr]</b>は、ジャーナル名"Journal of Fish Biology"を"JoFB"と出力します。<br /></li>
+
+        <li><b>:lower</b>: フィールドマーカーが挿入した文字列を強制的に小文字にします。例えば、<b>[auth:lower]</b>は、第1著者の姓を小文字で出力します。<br /></li>
+
+        <li><b>:upper</b>: フィールドマーカーが挿入した文字列を強制的に大文字にします。例えば、<b>[auth:upper]</b>は、第1著者の姓を大文字で出力します。<br /></li>
+
+        <li><b>:(x)</b>: xには任意の文字列を入れてください。この修正辞の前のフィールドマーカーの値が空の時、括弧の間の文字列を挿入します。例えば、<b>[volume:(unknown)]</b>というマーカーは、項目の<code>volume</code>フィールドが設定されていれば、それを返し、設定されていなければ、<b>unknown</b>を返します。
+        </li>
+    </ul>
+
+    <p>ある項目型に対してキーパターンを定義していない場合には、<b>既定キーパターン</b>が使われます。既定パターンは変更することができ、<b>設定</b>ダイアログの<b>キーパターン</b>セクションの項目型一覧の上で設定します。</p>
+
+    <p>既定キーパターンは[auth][year]となっており、これは<code>Yared1998</code>のようなキーを生成します。現在のデータベース中でキーが一意でない場合には、キーが一意になるようにa-zのうち1文字を付け加えます。したがって、ラベルは以下のような形になります。</p>
+
+    <p style="margin-left: 28pt">
+        <code>Yared1998</code><br />
+        <code>Yared1998a</code><br />
+        <code>Yared1998b</code>
+    </p>
+
+    <h2>正規表現での置換</h2>
+
+    <p>キーパターンを適用してキーを生成した後、キー生成機構に特定の正規表現を検索させ、それを文字列で置換することができます。正規表現文字列と置換文字列は、キーパターン一覧の下にあるテキストフィールドに入力します。置換文字列が空の場合、正規表現に一致した文字列は、生成されたキーから削除されます。例えば、置換対象に<code>\p{Punct}</code>あるいは<code>[:/%]</code>を入れ、置換文字列を空にした場合、キーから不必要な文字を取り除くことができます。これは、BibTeXキーにしたがってPDFの名前を付ける時便利です。</p>
+
+</body>
+</html>
diff --git a/src/help/ja/License.html b/src/help/ja/License.html
index 94cdd7a..28a94fc 100644
--- a/src/help/ja/License.html
+++ b/src/help/ja/License.html
@@ -1,497 +1,497 @@
-<HTML>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">
-<H1>GNU General Public License</H1>
-
-<H2>Table of Contents</H2>
-<UL>
-
-  <LI><A NAME="TOC1" HREF="License.html#SEC1">GNU GENERAL PUBLIC LICENSE</A>
-<UL>
-<LI><A NAME="TOC2" HREF="License.html#SEC2">Preamble</A>
-<LI><A NAME="TOC3" HREF="License.html#SEC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A>
-<LI><A NAME="TOC4" HREF="License.html#SEC4">How to Apply These Terms to Your New Programs</A>
-
-</UL>
-</UL>
-
-<P>
-
-<HR>
-
-<P>
-
-
-
-<H2><A NAME="SEC1" HREF="License#TOC1">GNU GENERAL PUBLIC LICENSE</A></H2>
-<P>
-Version 2, June 1991
-
-</P>
-
-<PRE>
-Copyright (C) 1989, 1991 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.
-</PRE>
-
-
-
-<H2><A NAME="SEC2" HREF="License.html#TOC2">Preamble</A></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
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-</P>
-<P>
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-</P>
-<P>
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-</P>
-<P>
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-</P>
-<P>
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-</P>
-<P>
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-</P>
-<P>
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-</P>
-<P>
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-</P>
-
-
-<H2><A NAME="SEC3" HREF="License.html#TOC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A></H2>
-
-
-<P>
-
-<STRONG>0.</STRONG>
- This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-<P>
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-<P>
-
-<STRONG>1.</STRONG>
- You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-<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>
-
-<STRONG>2.</STRONG>
- You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-<P>
-
-<UL>
-
-<LI><STRONG>a)</STRONG>
-     You must cause the modified files to carry prominent notices
-     stating that you changed the files and the date of any change.
-
-<P>
-<LI><STRONG>b)</STRONG>
-     You must cause any work that you distribute or publish, that in
-     whole or in part contains or is derived from the Program or any
-     part thereof, to be licensed as a whole at no charge to all third
-     parties under the terms of this License.
-
-<P>
-<LI><STRONG>c)</STRONG>
-     If the modified program normally reads commands interactively
-     when run, you must cause it, when started running for such
-     interactive use in the most ordinary way, to print or display an
-     announcement including an appropriate copyright notice and a
-     notice that there is no warranty (or else, saying that you provide
-     a warranty) and that users may redistribute the program under
-     these conditions, and telling the user how to view a copy of this
-     License.  (Exception: if the Program itself is interactive but
-     does not normally print such an announcement, your work based on
-     the Program is not required to print an announcement.)
-</UL>
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-<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 Program.
-<P>
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-<P>
-
-<STRONG>3.</STRONG>
- You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-
-<!-- we use this doubled UL to get the sub-sections indented, -->
-<!-- while making the bullets as unobvious as possible. -->
-<UL>
-
-<LI><STRONG>a)</STRONG>
-     Accompany it with the complete corresponding machine-readable
-     source code, which must be distributed under the terms of Sections
-     1 and 2 above on a medium customarily used for software interchange; or,
-
-<P>
-<LI><STRONG>b)</STRONG>
-     Accompany it with a written offer, valid for at least three
-     years, to give any third party, for a charge no more than your
-     cost of physically performing source distribution, a complete
-     machine-readable copy of the corresponding source code, to be
-     distributed under the terms of Sections 1 and 2 above on a medium
-     customarily used for software interchange; or,
-
-<P>
-<LI><STRONG>c)</STRONG>
-     Accompany it with the information you received as to the offer
-     to distribute corresponding source code.  (This alternative is
-     allowed only for noncommercial distribution and only if you
-     received the program in object code or executable form with such
-     an offer, in accord with Subsection b above.)
-</UL>
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-<P>
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-<P>
-
-<STRONG>4.</STRONG>
- You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-<P>
-
-<STRONG>5.</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 Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-<P>
-
-<STRONG>6.</STRONG>
- Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-<P>
-
-<STRONG>7.</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 Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-<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>
-
-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>
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-<P>
-
-<STRONG>8.</STRONG>
- If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-<P>
-
-<STRONG>9.</STRONG>
- The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-<P>
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-<P>
-
-
-<STRONG>10.</STRONG>
- If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-
-
-<P><STRONG>NO WARRANTY</STRONG></P>
-
-<P>
-
-<STRONG>11.</STRONG>
- BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-<P>
-
-<STRONG>12.</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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-<P>
-
-
-<H2>END OF TERMS AND CONDITIONS</H2>
-
-
-
-<H2><A NAME="SEC4" HREF="License.html#TOC4">How to Apply These Terms to Your New Programs</A></H2>
-
-<P>
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-</P>
-<P>
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-</P>
-
-<PRE>
-<VAR>one line to give the program's name and an idea of what it does.</VAR>
-Copyright (C) <VAR>yyyy</VAR>  <VAR>name of author</VAR>
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-</PRE>
-
-<P>
-Also add information on how to contact you by electronic and paper mail.
-
-</P>
-<P>
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-</P>
-
-<PRE>
-Gnomovision version 69, Copyright (C) <VAR>year</VAR> <VAR>name of author</VAR>
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-type `show w'.  This is free software, and you are welcome
-to redistribute it under certain conditions; type `show c' 
-for details.
-</PRE>
-
-<P>
-The hypothetical commands <SAMP>`show w'</SAMP> and <SAMP>`show c'</SAMP> should show
-the appropriate parts of the General Public License.  Of course, the
-commands you use may be called something other than <SAMP>`show w'</SAMP> and
-<SAMP>`show c'</SAMP>; they could even be mouse-clicks or menu items--whatever
-suits your program.
-
-</P>
-<P>
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-</P>
-
-<PRE>
-Yoyodyne, Inc., hereby disclaims all copyright
-interest in the program `Gnomovision'
-(which makes passes at compilers) written 
-by James Hacker.
-
-<VAR>signature of Ty Coon</VAR>, 1 April 1989
-Ty Coon, President of Vice
-</PRE>
-
-<P>
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
-<P><CENTER><a href="About.html">戻る</a>
-</BODY>
-</HTML>
+<HTML>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">
+<H1>GNU General Public License</H1>
+
+<H2>Table of Contents</H2>
+<UL>
+
+  <LI><A NAME="TOC1" HREF="License.html#SEC1">GNU GENERAL PUBLIC LICENSE</A>
+<UL>
+<LI><A NAME="TOC2" HREF="License.html#SEC2">Preamble</A>
+<LI><A NAME="TOC3" HREF="License.html#SEC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A>
+<LI><A NAME="TOC4" HREF="License.html#SEC4">How to Apply These Terms to Your New Programs</A>
+
+</UL>
+</UL>
+
+<P>
+
+<HR>
+
+<P>
+
+
+
+<H2><A NAME="SEC1" HREF="License#TOC1">GNU GENERAL PUBLIC LICENSE</A></H2>
+<P>
+Version 2, June 1991
+
+</P>
+
+<PRE>
+Copyright (C) 1989, 1991 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.
+</PRE>
+
+
+
+<H2><A NAME="SEC2" HREF="License.html#TOC2">Preamble</A></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
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+</P>
+<P>
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+</P>
+<P>
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+</P>
+<P>
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+</P>
+<P>
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+</P>
+<P>
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+</P>
+<P>
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+</P>
+<P>
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+</P>
+
+
+<H2><A NAME="SEC3" HREF="License.html#TOC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A></H2>
+
+
+<P>
+
+<STRONG>0.</STRONG>
+ This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+<P>
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+<P>
+
+<STRONG>1.</STRONG>
+ You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+<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>
+
+<STRONG>2.</STRONG>
+ You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+<P>
+
+<UL>
+
+<LI><STRONG>a)</STRONG>
+     You must cause the modified files to carry prominent notices
+     stating that you changed the files and the date of any change.
+
+<P>
+<LI><STRONG>b)</STRONG>
+     You must cause any work that you distribute or publish, that in
+     whole or in part contains or is derived from the Program or any
+     part thereof, to be licensed as a whole at no charge to all third
+     parties under the terms of this License.
+
+<P>
+<LI><STRONG>c)</STRONG>
+     If the modified program normally reads commands interactively
+     when run, you must cause it, when started running for such
+     interactive use in the most ordinary way, to print or display an
+     announcement including an appropriate copyright notice and a
+     notice that there is no warranty (or else, saying that you provide
+     a warranty) and that users may redistribute the program under
+     these conditions, and telling the user how to view a copy of this
+     License.  (Exception: if the Program itself is interactive but
+     does not normally print such an announcement, your work based on
+     the Program is not required to print an announcement.)
+</UL>
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+<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 Program.
+<P>
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+<P>
+
+<STRONG>3.</STRONG>
+ You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+
+<!-- we use this doubled UL to get the sub-sections indented, -->
+<!-- while making the bullets as unobvious as possible. -->
+<UL>
+
+<LI><STRONG>a)</STRONG>
+     Accompany it with the complete corresponding machine-readable
+     source code, which must be distributed under the terms of Sections
+     1 and 2 above on a medium customarily used for software interchange; or,
+
+<P>
+<LI><STRONG>b)</STRONG>
+     Accompany it with a written offer, valid for at least three
+     years, to give any third party, for a charge no more than your
+     cost of physically performing source distribution, a complete
+     machine-readable copy of the corresponding source code, to be
+     distributed under the terms of Sections 1 and 2 above on a medium
+     customarily used for software interchange; or,
+
+<P>
+<LI><STRONG>c)</STRONG>
+     Accompany it with the information you received as to the offer
+     to distribute corresponding source code.  (This alternative is
+     allowed only for noncommercial distribution and only if you
+     received the program in object code or executable form with such
+     an offer, in accord with Subsection b above.)
+</UL>
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+<P>
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+<P>
+
+<STRONG>4.</STRONG>
+ You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+<P>
+
+<STRONG>5.</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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+<P>
+
+<STRONG>6.</STRONG>
+ Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+<P>
+
+<STRONG>7.</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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+<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>
+
+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>
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+<P>
+
+<STRONG>8.</STRONG>
+ If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+<P>
+
+<STRONG>9.</STRONG>
+ The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+<P>
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+<P>
+
+
+<STRONG>10.</STRONG>
+ If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+
+
+<P><STRONG>NO WARRANTY</STRONG></P>
+
+<P>
+
+<STRONG>11.</STRONG>
+ BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+<P>
+
+<STRONG>12.</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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+<P>
+
+
+<H2>END OF TERMS AND CONDITIONS</H2>
+
+
+
+<H2><A NAME="SEC4" HREF="License.html#TOC4">How to Apply These Terms to Your New Programs</A></H2>
+
+<P>
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+</P>
+<P>
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+</P>
+
+<PRE>
+<VAR>one line to give the program's name and an idea of what it does.</VAR>
+Copyright (C) <VAR>yyyy</VAR>  <VAR>name of author</VAR>
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+</PRE>
+
+<P>
+Also add information on how to contact you by electronic and paper mail.
+
+</P>
+<P>
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+</P>
+
+<PRE>
+Gnomovision version 69, Copyright (C) <VAR>year</VAR> <VAR>name of author</VAR>
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'.  This is free software, and you are welcome
+to redistribute it under certain conditions; type `show c' 
+for details.
+</PRE>
+
+<P>
+The hypothetical commands <SAMP>`show w'</SAMP> and <SAMP>`show c'</SAMP> should show
+the appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than <SAMP>`show w'</SAMP> and
+<SAMP>`show c'</SAMP>; they could even be mouse-clicks or menu items--whatever
+suits your program.
+
+</P>
+<P>
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+</P>
+
+<PRE>
+Yoyodyne, Inc., hereby disclaims all copyright
+interest in the program `Gnomovision'
+(which makes passes at compilers) written 
+by James Hacker.
+
+<VAR>signature of Ty Coon</VAR>, 1 April 1989
+Ty Coon, President of Vice
+</PRE>
+
+<P>
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+<P><CENTER><a href="About.html">戻る</a>
+</BODY>
+</HTML>
diff --git a/src/help/ja/MarkingHelp.html b/src/help/ja/MarkingHelp.html
index bf4aefb..5ccd0d6 100644
--- a/src/help/ja/MarkingHelp.html
+++ b/src/help/ja/MarkingHelp.html
@@ -1,46 +1,23 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Mark entries</h1>
-
-    <p>You have the option of <em>marking</em>
-    entries. Keyboard shortcuts are CTRL-M and CTRL-SHIFT-M to mark
-    and unmark the selected entries, respectively, and you can also
-    access these actions in the menus.</p>
-
-    <p>Marking is not the same as selecting entries.
-    Marked entries behave differently from other entries in two
-    ways. First, they are always displayed with a different background
-    color in the entry table. Second, they will float to the top of your
-    entry list, as long as your table is not sorted according to
-    groups or a Float search.</p>
-
-    <p>The color each marked entry is displayed in depends on the marking
-    level of the entry, with the default colors ranging from yellow to red.
-    There are menu choices both for incrementing the marking level of the
-    selected entry or entries, and for directly setting the marking to a specific
-    level.</p>
-
-    <p>Marking entries can be useful for instance if you need to do
-    several searches without losing your first search results, or
-    if you need to remember which articles or books to look more
-    closely at.</p>
-    
-    <p>In addition to manually marking entries, JabRef can optionally auto-mark
-    the latest imported entries, and at the same time unmark the previous entries
-    marked in this way. Such entries will be shown in a different color
-    from manually marked entries - by default green. This feature is toggled under
-    <b>Options -> Preferences -> General</b></p>
-
-    <p>Marking of entries will be associated with your username, the same name as is
-    used to fill in the "owner" field of entries you create or import (this will by
-    default match your user name in the operating system, but can be changed under
-    <b>Options -> Preferences -> General</b>). Different users can mark entries
-    independently. Saving the database will preserve the markings.</p>
-
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+</head>
+
+<body>
+    <h1>項目の標識付け</h1>
+
+    <p>項目には,<ruby><rb><strong>標識</strong></rb><rp>(</rp><rt>マーク</rt><rp>)</rp></ruby>を付けることができます。選択項目を標識付けする<ruby><rb>短絡鍵</rb><rp>(</rp><rt>ショートカット</rt><rp>)</rp></ruby>はCTRL-M,外す短絡鍵はCTRL-SHIFT-Mです。これらはメニューからもアクセスすることができます。</p>
+
+    <p>標識付けは項目の選択とは違います。標識を付けた項目は,他の項目と2つの点で異なる働きをします。まず,項目表中でこれらの項目は,常に異なる背景色で表示されます。第二に,グループ順に整序されていたり,検索結果を上部に表示する設定をしていない限り,これらは項目一覧の最上位に表示されます。</p>
+
+    <p>項目が表示される標識色は,項目の標識階層に依存し,規定値では黄色から赤色になっています。メニュー中には,選択項目の標識階層を上げたり,直接指定した階層に標識する選択肢があります。</p>
+
+    <p>項目の標識付けは,例えば,最初の検索結果を消さないで,複数の検索を行う必要があるときや,後に詳細に検討する必要がある論文や書籍を覚えておかなくてはならない時などに便利です。</p>
+    
+    <p>手動での標識付けに加えて,JabRefでは,自動的に直近の読み込み項目を標識付けし,同時に以前に同じ方法で標識を付けた項目を自動的に標識から外すことも可能です。これらの項目は,手動で標識を付けた色とは別の色 ―規定値では緑― で表示されます。この機能は,<b>オプション→設定→一般</b>で入切することができます。</p>
+
+    <p>項目の標識は、項目を作成したり読み込んだりする際の「owner」フィールドの入力に用いる、ユーザー名に関連付けられます(これは、既定値ではオペレーティング・システムのユーザー名と同じですが、<b>オプション→設定→一般</b>で変更することができます)。つまり、ユーザーごとに独立した標識を付けることができます。データベースを保存すると、標識も保存されます。</p>
+
+</body>
+</html>
diff --git a/src/help/ja/MedlineHelp.html b/src/help/ja/MedlineHelp.html
index 6f49a1a..929280a 100644
--- a/src/help/ja/MedlineHelp.html
+++ b/src/help/ja/MedlineHelp.html
@@ -1,48 +1,48 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>Fetching Medline entries</h1>
-
-    <p>MEDLINE is the U.S. National Library of Medicine's premier
-    bibliographic database. It contains references to journal
-    articles in life sciences with a concentration on biomedicine.</p>
-
-    <p>JabRef can download citations from the Medline database. To
-    use this feature, choose <b>Web search -> Fetch Medline</b>,
-    and the Medline interface will appear in the side pane.</p>
-
-    <p>There are two ways of specifying which entries to
-    download:</p>
-
-    <ol>
-        <li>Enter one or more Medline IDs (separated by
-        comma/semicolon) in the text field.</li>
-
-        <li>Enter a set of names and/or words to search for. You
-        can use the operators <em>and</em> and <em>or</em> and
-        parentheses to refine your search expression.</li>
-    </ol>In both cases, press <b>Enter</b> or the <b>Fetch</b>
-    button. If you use a text search, you will be prompted with the
-    number of entries found, and given a choice of how many to
-    download.
-
-    <p>The entries fetched will be added to your currently active
-    database.</p>
-
-    <h2>Using a Proxy Server</h2>
-
-    <p>If you need to use an http proxy
-    server, pass the server name and port number to java at
-    runtime.</p>
-
-    <p><code>java -Dhttp.proxyHost="hostname"
-    -Dhttp.proxyPort="portnumber"</code></p>
-
-    <p>These environment settings are documented in the 
-    <a href="http://docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html">Sun J2SE documentation</a>.</p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>Fetching Medline entries</h1>
+
+    <p>MEDLINE is the U.S. National Library of Medicine's premier
+    bibliographic database. It contains references to journal
+    articles in life sciences with a concentration on biomedicine.</p>
+
+    <p>JabRef can download citations from the Medline database. To
+    use this feature, choose <b>Web search -> Fetch Medline</b>,
+    and the Medline interface will appear in the side pane.</p>
+
+    <p>There are two ways of specifying which entries to
+    download:</p>
+
+    <ol>
+        <li>Enter one or more Medline IDs (separated by
+        comma/semicolon) in the text field.</li>
+
+        <li>Enter a set of names and/or words to search for. You
+        can use the operators <em>and</em> and <em>or</em> and
+        parentheses to refine your search expression.</li>
+    </ol>In both cases, press <b>Enter</b> or the <b>Fetch</b>
+    button. If you use a text search, you will be prompted with the
+    number of entries found, and given a choice of how many to
+    download.
+
+    <p>The entries fetched will be added to your currently active
+    database.</p>
+
+    <h2>Using a Proxy Server</h2>
+
+    <p>If you need to use an http proxy
+    server, pass the server name and port number to java at
+    runtime.</p>
+
+    <p><code>java -Dhttp.proxyHost="hostname"
+    -Dhttp.proxyPort="portnumber"</code></p>
+
+    <p>These environment settings are documented in the 
+    <a href="http://docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html">Sun J2SE documentation</a>.</p>
+
+</body>
+</html>
diff --git a/src/help/ja/OpenOfficeHelp.html b/src/help/ja/OpenOfficeHelp.html
index f84cbf1..7d2bbcb 100644
--- a/src/help/ja/OpenOfficeHelp.html
+++ b/src/help/ja/OpenOfficeHelp.html
@@ -1,73 +1,73 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1>OpenOffice.org で JabRef 書誌情報を利用するには</h1>
-
-    <p>JabRef は、データベースを OpenOffice.org 1.1 の <b>.sxc</b> 表計算ドキュメント形式と、 OpenOffice.org 2.0 で用いられる OpenDocument <b>.ods</b> 表計算ドキュメント形式の両方に書き出すことができます。</p>
-
-    <p>どちらの場合も、書き出した表計算ドキュメントには、各項目を行とし、各フィールドを列とした1つのデータシートだけが含まれます。列順と列名は、OpenOffice.org の書誌情報関数と互換性があるように設定されます (<b>.sxc</b> 形式の場合は OOo 1.1、<b>.ods</b> 形式の場合は OOo 2.0)。</p>
-
-    以下は、OpenOffice.org のバージョン毎の、JabRef 書誌情報データベースの利用法です。
-
-    <h2>書き出したファイルを OpenOffice.org 2.3 および 2.4 の書誌情報データベースとして利用するには</h2>
-
-    <p>JabRef から書き出したスプレッドシートを OpenOffice.org の書誌情報データベースとして設定するには、以下のステップを踏んでください。</p>
-
-    <ul>
-    <li>JabRef からデータベースを <b>.ods</b> 形式で書き出します。</li>
-    <li>OpenOffice.org Writer を起動します。</li>
-
-    <li><b>編集→データベースを交換</b>を選ぶ。<b>選択</b>をクリックし、.ods 形式に書き出されたデータベースを選択します。</li>
-    <li>読み込んだデータベース名の前にある <b>+</b> を展開して、表示されたファイル名をクリックし、最後に<b>指定</b>ボタンを押します。</li>
-    <li><b>ツール→オプション→OpenOffice.org Base→データベース</b>を選択します。このウィンドウには、いま読み込んだデータベースが表示されているはずです。また、既定のOOo書誌情報データベース (<i>Bibliography</i>) も表示されているはずです。</li>
-    <li>Bibliography データベースを編集し、その名前を <i>Bibliography-old</i> などに変えてください (OpenOffice.org Writer では複数の書誌情報データベースを選択することができません)。</li>
-    <li>使用する書誌情報データベースを選択し、その名前を <i>Bibliography</i> に変えてください (名前の最初の文字が大文字になっていることに特に注意してください)。</li>
-    </ul>
-
-    これらのステップを踏むと、あなたの書誌情報データベースが OpenOffice.org で利用できるようになっているはずです。これを確認するには、<b>挿入→目次と索引→参考文献項目...</b>を選択してください。すると、BibTeX 鍵のリストが表示されるはずです。
-
-
-    <h2>書き出したファイルを OpenOffice.org 2.0/2.1/2.2 の書誌情報データベースとして利用するには</h2>
-
-    <p>JabRef から書き出したスプレッドシートを OpenOffice.org の書誌情報データベースとして設定するには、以下のステップを踏んでください。</p>
-
-    <ul>
-        <li>データベースを <b>.ods</b> 形式で書き出します。</li>
-
-        <li>OpenOffice.org を起動します。</li>
-
-        <li><b>ツール→オプション→OpenOffice.org Base→データベース</b>を選択します。</li>
-
-        <li><i>Bibliography</i> データベースを編集し、その名前を <i>Bibliography-old</i> などに変えてください (OpenOffice.org Writer では複数の書誌情報データベースを選択することができません)。</li>
-
-        <li><b>オプション</b>ウィンドウを閉じて、<b>ファイル→新規作成→データベース</b>を選びます。</li>
-
-        <li><b>既存のデータベースに接続</b>を選び、データベース型として<b>表計算ドキュメント</b>を選択して、書き出した <b>.ods</b> ファイルを選びます。</li>
-
-        <li><b>完了</b>をクリックして、選択を促されたら <i>Bibliography</i> を選んでください。</li>
-    </ul>これらのステップを終えた後に<b>ツール→参考文献データベース</b>を選んでください。すると、あなたのデータベースwが表示されているはずです。
-
-    <h2>書き出したファイルを OpenOffice.org 1.1.x の書誌情報データベースとして利用するには</h2>
-
-    <ul>
-        <li>データベースを <b>.sxc</b> 形式で書き出します。</li>
-
-        <li>OpenOffice.org を起動する</li>
-
-        <li><b>ツール→データソース</b>を選択します。</li>
-
-        <li><i>Bibliography</i> データベースを編集し、その名前を <i>Bibliography-old</i> などに変え、<b>適用</b>をクリックしてください。</li>
-
-	<li><b>新規データソース</b>をクリックすると、新しい項目が表示されるので、その名前を <i>Bibliography</i> に変更してください。</li>
-
-        <li><b>データベース型</b>を<b>表計算ドキュメント</b>に変更し、<b>データソースURL</b>行にある<b>...</b>ボタンをクリックしてください。そして書き出した <b>.sxc</b> ファイルを選択してください。</li>
-
-        <li><b>OK</b> をクリックして<b>データソース</b>ウィンドウを閉じてください。</li>
-    </ul>これらのステップを終えた後に<b>ツール→参考文献データベース</b>を選んでください。すると、あなたのデータベースが表示されているはずです。
-</body>
-</html> 
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+    <h1>OpenOffice.org で JabRef 書誌情報を利用するには</h1>
+
+    <p>JabRef は、データベースを OpenOffice.org 1.1 の <b>.sxc</b> 表計算ドキュメント形式と、 OpenOffice.org 2.0 で用いられる OpenDocument <b>.ods</b> 表計算ドキュメント形式の両方に書き出すことができます。</p>
+
+    <p>どちらの場合も、書き出した表計算ドキュメントには、各項目を行とし、各フィールドを列とした1つのデータシートだけが含まれます。列順と列名は、OpenOffice.org の書誌情報関数と互換性があるように設定されます (<b>.sxc</b> 形式の場合は OOo 1.1、<b>.ods</b> 形式の場合は OOo 2.0)。</p>
+
+    以下は、OpenOffice.org のバージョン毎の、JabRef 書誌情報データベースの利用法です。
+
+    <h2>書き出したファイルを OpenOffice.org 2.3 および 2.4 の書誌情報データベースとして利用するには</h2>
+
+    <p>JabRef から書き出したスプレッドシートを OpenOffice.org の書誌情報データベースとして設定するには、以下のステップを踏んでください。</p>
+
+    <ul>
+    <li>JabRef からデータベースを <b>.ods</b> 形式で書き出します。</li>
+    <li>OpenOffice.org Writer を起動します。</li>
+
+    <li><b>編集→データベースを交換</b>を選ぶ。<b>選択</b>をクリックし、.ods 形式に書き出されたデータベースを選択します。</li>
+    <li>読み込んだデータベース名の前にある <b>+</b> を展開して、表示されたファイル名をクリックし、最後に<b>指定</b>ボタンを押します。</li>
+    <li><b>ツール→オプション→OpenOffice.org Base→データベース</b>を選択します。このウィンドウには、いま読み込んだデータベースが表示されているはずです。また、既定のOOo書誌情報データベース (<i>Bibliography</i>) も表示されているはずです。</li>
+    <li>Bibliography データベースを編集し、その名前を <i>Bibliography-old</i> などに変えてください (OpenOffice.org Writer では複数の書誌情報データベースを選択することができません)。</li>
+    <li>使用する書誌情報データベースを選択し、その名前を <i>Bibliography</i> に変えてください (名前の最初の文字が大文字になっていることに特に注意してください)。</li>
+    </ul>
+
+    これらのステップを踏むと、あなたの書誌情報データベースが OpenOffice.org で利用できるようになっているはずです。これを確認するには、<b>挿入→目次と索引→参考文献項目...</b>を選択してください。すると、BibTeX 鍵のリストが表示されるはずです。
+
+
+    <h2>書き出したファイルを OpenOffice.org 2.0/2.1/2.2 の書誌情報データベースとして利用するには</h2>
+
+    <p>JabRef から書き出したスプレッドシートを OpenOffice.org の書誌情報データベースとして設定するには、以下のステップを踏んでください。</p>
+
+    <ul>
+        <li>データベースを <b>.ods</b> 形式で書き出します。</li>
+
+        <li>OpenOffice.org を起動します。</li>
+
+        <li><b>ツール→オプション→OpenOffice.org Base→データベース</b>を選択します。</li>
+
+        <li><i>Bibliography</i> データベースを編集し、その名前を <i>Bibliography-old</i> などに変えてください (OpenOffice.org Writer では複数の書誌情報データベースを選択することができません)。</li>
+
+        <li><b>オプション</b>ウィンドウを閉じて、<b>ファイル→新規作成→データベース</b>を選びます。</li>
+
+        <li><b>既存のデータベースに接続</b>を選び、データベース型として<b>表計算ドキュメント</b>を選択して、書き出した <b>.ods</b> ファイルを選びます。</li>
+
+        <li><b>完了</b>をクリックして、選択を促されたら <i>Bibliography</i> を選んでください。</li>
+    </ul>これらのステップを終えた後に<b>ツール→参考文献データベース</b>を選んでください。すると、あなたのデータベースwが表示されているはずです。
+
+    <h2>書き出したファイルを OpenOffice.org 1.1.x の書誌情報データベースとして利用するには</h2>
+
+    <ul>
+        <li>データベースを <b>.sxc</b> 形式で書き出します。</li>
+
+        <li>OpenOffice.org を起動する</li>
+
+        <li><b>ツール→データソース</b>を選択します。</li>
+
+        <li><i>Bibliography</i> データベースを編集し、その名前を <i>Bibliography-old</i> などに変え、<b>適用</b>をクリックしてください。</li>
+
+	<li><b>新規データソース</b>をクリックすると、新しい項目が表示されるので、その名前を <i>Bibliography</i> に変更してください。</li>
+
+        <li><b>データベース型</b>を<b>表計算ドキュメント</b>に変更し、<b>データソースURL</b>行にある<b>...</b>ボタンをクリックしてください。そして書き出した <b>.sxc</b> ファイルを選択してください。</li>
+
+        <li><b>OK</b> をクリックして<b>データソース</b>ウィンドウを閉じてください。</li>
+    </ul>これらのステップを終えた後に<b>ツール→参考文献データベース</b>を選んでください。すると、あなたのデータベースが表示されているはずです。
+</body>
+</html> 
diff --git a/src/help/ja/OwnerHelp.html b/src/help/ja/OwnerHelp.html
index 7c95f75..a5357ae 100644
--- a/src/help/ja/OwnerHelp.html
+++ b/src/help/ja/OwnerHelp.html
@@ -1,15 +1,15 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1>「owner」フィールド</h1>
-
-    <p>JabRefでは、データベースに追加したり読み込んだりした新しい項目すべてに、あなたのユーザー名を付加することができます。この機能は、<b>設定→一般</b>で無効にしたり有効にしたりすることができ、項目に付加するのに使う名前も変更することができます。既定値は、あなたのユーザー名です。</p>
-
-    <p>名前は、「owner」というフィールドに書き込まれ、既定では、項目エディタの<b>汎用フィールド</b>に表示されます。</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+    <h1>「owner」フィールド</h1>
+
+    <p>JabRefでは、データベースに追加したり読み込んだりした新しい項目すべてに、あなたのユーザー名を付加することができます。この機能は、<b>設定→一般</b>で無効にしたり有効にしたりすることができ、項目に付加するのに使う名前も変更することができます。既定値は、あなたのユーザー名です。</p>
+
+    <p>名前は、「owner」というフィールドに書き込まれ、既定では、項目エディタの<b>汎用フィールド</b>に表示されます。</p>
+</body>
+</html>
diff --git a/src/help/ja/PreviewHelp.html b/src/help/ja/PreviewHelp.html
index cbf1d9b..5c7d392 100644
--- a/src/help/ja/PreviewHelp.html
+++ b/src/help/ja/PreviewHelp.html
@@ -1,21 +1,13 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Entry preview setup</h1>
-
-    <p>The entry preview is created using
-    the same mechanism as used by the
-    <a href="CustomExports.html">Custom export filter</a> facility.
-    When previewed, an entry is processed using one of the two
-    alternative layouts (you can switch between the two layouts by
-    pressing F9) to produce HTML code which is displayed by the
-    preview panel. To modify the appearance and contents of the
-    preview you need to edit the preview layouts using the syntax
-    described in the help file on
-    <a href="CustomExports.html">Custom export filters</a>.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>項目プレビューの設定</h1>
+
+    <p>項目プレビューは、<a href="CustomExports.html">個人設定書き出しフィルタ</a>機能と同じ機構を使って生成されます。プレビューを行うと、項目は、2つのレイアウトのうち1つを使用して(2つのレイアウトはF9を押して切り替えられます)HTMLコードが生成され、プレビュー画面に表示されます。プレビューの外見と内容を修正するには、ヘルプファイル<a href="CustomExports.html">個人設定書き出しフィルタ</a>に記述のある文法を用いて、プレビューレイアウトを編集する必要があります。</p>
+</body>
+</html>
diff --git a/src/help/ja/RemoteHelp.html b/src/help/ja/RemoteHelp.html
index d24ba62..9c98bcd 100644
--- a/src/help/ja/RemoteHelp.html
+++ b/src/help/ja/RemoteHelp.html
@@ -1,41 +1,21 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Remote operation</h1>
-
-    <p>This feature can be toggled and
-    configured under <b>Preferences -> Advanced</b>.</p>
-
-    <p><i>Note that activating this feature under Windows XP SP2
-    (and possibly other configurations) may prompt a message box
-    stating that certain features of the program have been blocked
-    by the Windows firewall. You can safely tell the firewall to
-    keep blocking - the firewall will not interfere with remote
-    operation of JabRef.</i></p>
-
-    <p>If listening for remote operation is enabled, JabRef will at
-    startup attempt to start listening to a specific port. This
-    means that other applications can send information to JabRef
-    through this port. JabRef will only accept local connections,
-    to avoid the risk of interference from outside.</p>
-
-    <p>Binding to this port makes it possible for a second JabRef
-    instance to discover that the first one is running. In this
-    case, unless specifically instructed to run in stand-alone
-    mode, the second JabRef instance will pass its command line
-    options through the port to the first JabRef instance, and then
-    immediately quit.</p>
-
-    <p>The first JabRef instance will read the command line
-    options, and perform the indicated actions, such as reading or
-    importing a file, or importing a file to the currently shown
-    database. If a file is imported using the command-line option
-    <code>--importToOpen</code>, the imported entries will be added
-    to the currently shown database. If no database is open, a new
-    one will be created.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>リモート操作</h1>
+
+    <p>本機能は、<b>設定→詳細設定</b>で入切したり設定したりすることができます。</p>
+
+    <p><i>Windows XP SP2(恐らく他のシステムでも)で本機能を有効にすると、このプログラムの機能のうち、Windowsファイアウォールによってブロックされる機能があるかもしれないというメッセージボックスが表示されることがあるかもしれません。この場合、ファイアウォールにブロックを続けさせるように返答して構いません。ファイアウォールは、JabRefのリモート操作と干渉しません。</i></p>
+
+    <p>リモート操作の待ち受けを有効にすると、JabRefは、起動時に特定のポートでの待ち受けを開始するように試みます。つまり、他のアプリケーションが、このポートを通じてJabRefに情報を送ることができるようになります。JabRefは、外部からの干渉リスクを回避するため、ローカル接続のみを許可します。</p>
+
+    <p>このポートにバインドすると、2つめのJabRefインスタンスが、最初のインスタンスが実行中であることを発見できるようになります。この場合、明示的にスタンド・アローン・モードで実行するように指示しない限り、2つめのJabRefインスタンスは、最初のJabRefインスタンスに、コマンドラインオプションをこのポートを通じて渡した後、直ちに終了します。</p>
+
+    <p>最初のJabRefインスタンスは、このコマンドラインオプションを読み、ファイルを開いたり読み込んだり等、指定された動作を実行します。ファイルが、コマンドラインオプション<code>--importToOpen</code>を使って読み込まれる場合、読み込まれた項目は、現在表示されているデータベースに追加されます。データベースが開かれていない場合には、新規に作成します。</p>
+</body>
+</html>
diff --git a/src/help/ja/RevisionHistory.html b/src/help/ja/RevisionHistory.html
index 746d1b7..85f7223 100644
--- a/src/help/ja/RevisionHistory.html
+++ b/src/help/ja/RevisionHistory.html
@@ -1,1536 +1,15 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-  <h1>更新履歴</h1>
-
-  <h3>Version 2.8 beta</h3>
-  <ul><li>Fixed issues with ACM portal fetcher using Benjamin Langmann's patch, plus an
-      additional minor fix.</li>
-    <li>A large list of journal abbreviations is now loaded by default.</li>
-    <li>Added global option to allow file links relative to the bib file location, in addition
-      to the global or database- or user-specific file directory.</li>
-    <li>Fixed bug 3434674: Reviewing changes overwrites groups.</li>
-    <li>Integrated the plugin for interaction with OpenOffice/LibreOffice as a standard part
-      of JabRef.</li>
-    <li>Added keyboard shortcuts Ctrl-Up and Ctrl-Down to move file links up and down in a list
-      of external links in the entry editor.</li>
-    <li>Applied "bjoerntm"'s patch for making the loading of group information less sensitive
-      to white space, in order to prevent trouble loading files written by other tools.</li>
-    <li>Added optional autocompletion of author/editor last names in search field.</li>
-    <li>Changed entry fetcher system so all fetchers are accessed from a single side pane
-      component with a selector.</li>
-    <li>Added INSPIRE fetcher by Sheer El-Showk.</li>
-    <li>Improved error handling when importing in specific format.</li>
-    <li>Prevented crash when calling invalid import format on startup.</li>
-    <li>Improved duplicate detection.</li>
-    <li>Added markers \filename and \filepath for ".begin.layout" and ".end.layout" files
-      in order to output the name or full path of the bib file of the exported database.</li>
-    <li>Fixed possible array index exception in LastPage formatter.</li>
-    <li>Improved author/editor normalization in entry editor.</li>
-    <li>Added metadata extraction from text when PDFs are dragged into JabRef.</li>
-    <li>The filename pattern for renaming a file when dropping a PDF can now be
-      configured at "Options"/"Preferences"/"Import"/"File name format pattern".</li>
-    <li>The defaults of the ImportDialog shown when PDFs are dragged into JabRef
-      can now be configured at "Options"/"Preferences"/"Import". It is possible to
-      override showing the ImportDialog.</li>
-    <li>An entry can be sent by a right click on an entry and select "Send as Email"
-      (patch 3306271).</li>
-    <li>Added option to "copy BibTeX key and title" (patch 3370471).</li>
-    <li>The command for pushing to emacs can be configured now. New command for Emacs 23.
-      New default for Windows: emacsclient.</li>
-    <li>Added export support for DIN1505 style (based on patch 1874662).</li>
-    <li>Added support for PostgreSQL import/export (patch 3368760 by Fred Stevens).</li>
-    <li>Added formatter "JournalAbbreviator" (patch 3013311 by Meigel).</li>
-    <li>RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
-      (patch 2905383 by Russell Almond).</li>
-    <li>Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).</li>
-    <li>ToggleButton added to GroupSelector to ease adding/removing references to/from groups
-      (based on patch 3313564 updated by Andreas Schlicker).</li>
-    <li>Export filter "tablerefsandbib" updated to contain links to files and notes
-      (patch 2787096 by Thomas Arildsen).</li>
-    <li>"of" added to the list of skip words (patch 2781830).</li>
-    <li>Added cli-function for exporting entries filtered by a search term
-      (patch 1817093 by Silberer, Zirn)</li>
-    <li>Added highlighting in textarea for search text (patch 3117881 by Ben).
-      Slightly modified to cope with words[]={""}, support for "BibTeX source" tab, and that
-      "Clear" also clears the highlighting.</li>
-    <li>Added highlighting in preview area for search text (based on patch 3121914 by
-      Maximilian Lengsfeld).</li>
-    <li>Switched from PDFBox 0.7.3 to PDFBox 1.6.0.</li>
-  </ul>
-
-  <h3>Version 2.7.2</h3>
-    <ul><li>Fixed bug that prevented search functions from working under Java 7.</li></ul>
-
-  <h3>Version 2.7.1</h3>
-    <ul>
-    <li>Fixed problem with search function under Java 7.</li>
-    <li>Made Database properties dialog modal to prevent database from being closed
-      while properties window is open.</li>
-    <li>Fixed error handling in custom import dialog when invalid jar files or class
-      files are specified.</li>
-    <li>Added OR operator for conditional export formatting.</li>
-    <li>DocBook export format switched to 4.4 (based on patch 3313898).</li>
-    <li>Fixed bug that made the key generator combination [shorttitle:abbr] return
-      only a single letter.</li>
-    <li>"of" added to the list of skip words (patch 2781830).</li>
-    <li>Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).</li>
-    <li>RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
-      (patch 2905383 by Russell Almond).</li>
-    <li>Fixed bug that made menu items for marking in specific colors invisible
-      under Windows 7.</li>
-    <li>In case a new entry is added, this entry is highlighted and the editor is opened
-      if configured in the settings (patch 3370466). The UI behavior of adding an entry
-      at "new entry from plain text" is now similar to "new entry".</li>
-    <li>Fixed bug in focus handling that affected some actions.</li>
-    <li>Running JabRef under the Oracle JVM will no longer give a warning.</li>
-    </ul>
-
-  <h3>Version 2.7</h3>
-    <ul>
-    <li>Medline importer now wraps multipart last names in braces.</li>
-    <li>RIS importer now handles multiple title fields by concatenation.</li>
-    <li>Disallowed "comment" as entry type name, since this conflicts with the BibTeX format.</li>
-    <li>Fixed handling of suffix name parts (Jr, etc.) in Medline importer.</li>
-    <li>Added optional second numeric argument to Authors formatter, which determines
-      how many authors are shown if the maximum number is exceeded.</li>
-    <li>Added content selector for "review" field in entry editor.</li>
-    <li>Improved detection of file type when adding new link. Can now recognize double
-      extensions such as ".ps.gz".</li>
-    <li>Improved autocompletion of author names. Added options to complete either in
-      'Firstname Lastname' or 'Lastname, Firstname' formats, or in both.</li>
-    <li>Fixed bug in import function if no suitable import filter is found.</li>
-    </ul>
-
-    <h3>Version 2.7beta 2</h3>
-    <ul>
-	<li>Added support for MrdLib lookup or metadata extraction when PDFs are dragged
-	into JabRef.</li>
-	<li> Added option under "External programs" for disabling the automatic opening of the
-	Browse dialog when creating a new file link.</li>
-	<li>Fixed shortcut key collision. Shortcut for Import to new database is now Ctrl-Alt-I.</li>
-	<li>The "Open URL or DOI" action now uses URL links in the "file" field as fallback if
-	no links are found in the "url" or "doi" fields.</li>
-	<li>Restricted remote listener port numbers to interval 1025-65535.</li>
-	<li>Added Japanese translation by Koji Yokota.</li>
-	<li>Added scrollbar to entry editor when it is too high to fit in its panel. Patch
-	by Matthias Erll.</li>
-	<li>Made it possible to copy entries from the search dialog.</li>
-	<li>Added proper error message when trying to search with invalid regular expression.</li>
-	<li>Added error dialog on startup if custom look and feel cannot be loaded.</li>
-	<li>Applied Alexander Hug's patch for correctly importing doi from ScienceDirect RIS files.</li>
-	<li>Removed potential NullPointerException in SearchExpressionTreeParser.</li>
-    </ul>
-
-    <h3>Version 2.7beta</h3>
-    <ul>
-	<li>Some improvements to MS Office export filter.</li>
-	<li>Introduced three choices for ensuring unique generated keys. The default one (marking
-      	with a, b, etc.), a modified one (marking with b, c, etc.) and always adding a letter
-      	(a, b, etc.).</li>
-	<li>Font and background colors are now customizable in the entry editor (Options ->
-      	Preferences -> Appearance).</li>
-	<li>Window title now includes the full path to the current file.</li>
-	<li>Entries can now be marked in a series of different colors. Automarking of imported
-	entries is now done in separate color without affecting other marked entries.</li>
-	<li>Added new feature (Tools -> Scan database... -> Resolve duplicate BibTeX keys) to
-	search for duplicate keys and offer to generate new keys to resolve the duplicates.
-	Instead of being listed in a warning dialog after opening a bib file, duplicate keys
-	now trigger a dialog asking whether the user wants to resolve the duplicates.</li>
-	<li>Added check that ensures that application doesn't quit while a large save operation
-	is still in progress. Shows wait message with cancel button.</li>
-	<li>Added apostrophe (') as illegal character in BibTeX keys.</li>
-	<li>BibTeX strings that refer each other are now sorted correctly when saving bib file.</li>
-	<li>Fixed bug in merging external changes - file would still be reported as modified
-	externally after merging changes.</li>
-	<li>Fixed bug in Move/rename file link feature that could cause the wrong link to be
-	stored for certain directory structures.</li>
-	<li>Fixed bug: curly braces can now be used in arguments to formatters. </li>
-	<li>Fixed lockup bug when generating key for entries with crossref fields.</li>
-	<li>BibTeX strings are now resolved before attempting to (un)abbreviate journal names.</li>
-	<li>Modified [shorttitle] and [veryshorttitle] key generator markers so they consider
-	a hyphen a word boundary, and remove punctuation characters (keep only numbers and
-	letters).</li>
-	<li>deprecate various export formatters with new Authors formatter, which provides flexible formatting options.</li>
-    </ul>
-
-    <h3>Version 2.6</h3>
-    <ul>
-        <li>Fixed IEEExplorer and ACM fetchers to adapt to web site changes.</li>
-        <li>Active preview (1 or 2) is now remembered.</li>
-        <li>Applied patch by Igor L. Chernyavsky. to prevent loss of entry selection after
-            generating key.</li>
-        <li>Changed OpenDocument Spreadsheet export so the mimetype file is written correctly
-            at the start of the zip file.</li>
-        <li>Fixed bug when importing preferences: custom export filters would not be updated
-            after import.</li>
-        <li>Changed help page loading procedure so help pages can be loaded for plugin entry
-            fetchers.</li>
-        <li>Made it possible to define customized entry types with either-or conditions on
-            required fields, e.g. using a pseudo-field called "author/editor" will indicate
-            that the entry requires either the "author" or the "editor" field set.</li>
-        <li>Fixed bug: entries of a customized type could be indicated as complete even if
-            BibTeX key was not set.</li>
-        <li>Changed deletion process for some temporary files to avoid leftover files.</li>
-    </ul>
-
-    <h3>Version 2.6beta3</h3>
-    <ul>
-        <li>Added ScienceDirect entry fetcher that utilizes the BibSonomy scraper.</li>
-        <li>Changed non-native file dialog setting so files cannot be renamed. This prevents
-          accidentally entering rename mode when trying to enter directory. Can be enabled
-          again in Options -> Preferences -> Advanced.</li>
-        <li>Added new JStor fetcher that utilizes the BibSonomy scraper to obtain BibTeX data.</li>
-        <li>Fixed bug in CookieHandlerImpl.</li>
-        <li>Fixed bug; when dragging a file into JabRef and asking to move it to the file
-          directory, warning will now be given if the destination file already exists. Patch
-          by Alastair Mailer.</li>
-        <li>When dragging a file into JabRef and asking to copy or move it to the file directory,
-          it is now possible to rename to an arbitrary name. Patch by Alastair Mailer.</li>
-        <li>Added "review" field to BibTeXML export.</li>
-        <li>Added Reset button to entry fetchers. Patch by Dennis Hartrampf and Ines Moosdorf.</li>
-        <li>Changed Microsoft Office XML export so "number" rather than "issue" is exported
-          as <b:Issue>, which conforms with import format.</li>
-        <li>Added confirmation dialog that allows saving without backup in cases when
-          backup creation fails.</li>
-        <li>Fixed bug 2938562: using the move/rename feature on a file link could give an
-          absolute link even if the file was put below the main file directory.</li>
-        <li>Fixed bug 2931293: error generating key with [authorsAlpha] for short names.</li>
-        <li>When checking for external modifications, file size is now checked in addition
-          to the time stamp.</li>
-        <li>Fixed handling of maximised state when shutting down and starting up JabRef.
-          Patch by Igor L. Chernyavsky.</li>
-        <li>Fixed bug that prevented correct handling of DOS short file names. Patch
-          by Igor L. Chernyavsky.</li>
-        <li>Added support for KOI8_R character set.</li>
-        <li>Removed DocumentPrinter class, using standard API functions instead. Patch by
-          Tony Mancill.</li>
-        <li>Removed HightlightFilter class, using standard API functions instead. Patch by
-          Tony Mancill.</li>
-        <li>Changed keyboard shortcut for IEEXplorer search to Alt-F8.</li>
-        <li>Disabled JStor search, which doesn't work due to API changes.</li>
-        <li>External file type manager now removes "." prefix in file type extension if the user
-          has typed it that way.</li>
-        <li>Preview panel now defaults to preview layout 1 instead of 2. Switched default layouts.</li>
-        <li>Added IfPlural formatter by Russell Almond. The formatter outputs its first argument
-          if the input field contains " and " and the second one otherwise.</li>
-        <li>Applied patch by Philipp Cordes and Bj旦rn Kahlert for improved handling of names by
-          autocompleter. The patch also reorganizes the autocompleter classes.</li>
-        <li>Table will now scroll to keep the currently edited entry visible if an edit leads to
-          the entry getting sorted to a different position.</li>
-        <li>Reworked author and editor handling in Docbook export. Added Docbook XML header.</li>
-        <li>Database will no longer be marked as changed after accepting external changes, unless one or
-          more changes were not accepted before merging, and unless database was already marked as
-          changed.</li>
-        <li>Fixed bug: undesired autocompletion when saving file.</li>
-        <li>Fixed bug: entry editor doesn't appear when new entry is added while a filtering search or
-          group selection is active.</li>
-        <li>Fixed bug in writing of metadata on Windows. For certain metadata lengths newlines would be
-          messed up after the metadata comment in a bib file.</li>
-        <li>Search dialog now automatically previews first hit, and hides preview if there are no hits.</li>
-    </ul>
-
-    <h3>Version 2.6beta2</h3>
-    <ul>
-        <li>Added export formatter "Default" which takes a single argument. Outputs the string to format
-          unchanged if it is non-empty, otherwise outputs the argument.</li>
-        <li>Added option under Options -> Preferences -> General for disabling the strict enforcing of
-          correct BibTeX keys. Disabling this makes it possible to use e.g. umlaut characters in keys.</li>
-        <li>Modified launcher script for Windows installer to give higher heap size limit.</li>
-        <li>Improved autocompletion. All fields with autocompletion which have content selectors will now
-          autocomplete on content selector values. For the "journal" field, the autocompleter will now
-          additionally use entries from the current journal abbreviations list, and will also complete
-          on the entire field up to the cursor rather than just looking at the last word only.</li>
-        <li>Added support for postformatter in Layout. The postformatter will be run after
-          the formatters called from a layout.</li>
-        <li>Improved group autogeneration. Added option to generate groups based on author or editor
-          last names. Autogenerated groups are now alphabetized.</li>
-        <li>Modified Endnote export filter so "--" gets converted to "-" in the "pages" field.</li>
-        <li>Changed keyword groups so they will match on whole words only. E.g. a keyword group for the
-          keyword "can" will no longer match the keyword "scanner".</li>
-        <li>Improved entry type determination and author parsing for some varieties of CSA files.</li>
-        <li>Minor change to Harvard RTF export. Added space after "ed.", and added editor to output for
-          inbook entries.</li>
-        <li>Set limit to the number of displayed characters in group names in groups tree in order to
-          avoid group panel width problems.</li>
-        <li>Changed file link handling so all remote links classified as URL can be opened through
-          the browser. Setting a different file type manually makes JabRef call a remote link using
-          the handler application instead.</li>
-        <li>Modified Endnote/refer import filter to strip "doi:" from the %R field.</li>
-        <li>Modified HTML conversion so single newline is displayed in the preview (and HTML exports) as
-          <br>, while multiple newlines are displayed as <p>.</li>
-        <li>Fixed bug: switching entry editor between entries of different type may result in switching
-          of entry editor tabs.</li>
-        <li>Fixed bug: adding external file link leads to relative path from root directory if file
-          directory is set to an empty string.</li>
-        <li>Fixed error message when a # in a BibTeX string prevents saving. No longer states that the
-          problem is in an entry, but specifies that it is in a string.</li>
-        <li>Fixed bug: ODS export doesn't resolve BibTeX strings.</li>
-        <li>Fixed bug: content selector for "editor" field uses "," instead of " and " as delimiter.</li>
-        <li>Fixed bug: editing source doesn't allow change of entry type.</li>
-        <li>RTFChars formatter now converts --- to \emdash and -- to \endash.</li>
-    </ul>
-
-    <h3>Version 2.6beta</h3>
-
-    <ul>
-        <li>Added pages information to several entry types in Endnote export.</li>
-        <li>Modified LastPage formatter so it returns the number when only the number of pages is given.</li>
-        <li>Modified search algorithms so LaTeX commands are removed before search. For instance, this
-            means that the value "test \textit{case}" now matches the search string "test case".</li>
-        <li>Changed default table font family to "SansSerif".</li>
-        <li>Can now create lock file while writing a bib file. The lock file is checked before
-            saving, and before scanning an externally changed file, in order to avoid reading an
-            unfinished file.</li>
-        <li>Added support for dragging a file link from the file column to another application.</li>
-        <li>Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.</li>
-        <li>Improved ISI import filter so DOI information is included.</li>
-        <li>Fixed bug: metadata changes would not be detected as external changes to a database.</li>
-        <li>Fixed bug: when accepting external changes and not saving before new changes are
-            detected, the previously accepted changes would also be listed.</li>
-        <li>Fixed bug in Scifinder import where an empty Inventor field could overwrite the
-            author field.</li>
-        <li>Fixed bug in autocompleter. Current suggested completion would be added to the field
-            if the user closed the entry editor or mouse clicked on another field.</li>
-        <li>Fixed problem with exporting to some MySql versions. Patch by Fran巽ois Dorin.</li>
-        <li>Fixed bug in handling of LaTeX character sequences - now sequences with = as command
-            character (e.g. "\={A}") are recognized.</li>
-        <li>Fixed bug: gray out / hide setting in groups panel is overridden on startup
-            by search mode selection. Added separate prefs key for the groups setting.
-            Fix suggested by Igor L. Chernyavsky.</li>
-        <li>Fixed bug: cookie manager installed by Download button in file field editor throws
-            an exception when trying to fetch from Medline.</li>
-        <li>Fixed bug: temporary files don't get deleted on shutdown.</li>
-        <li>Disabled table column reordering in import inspection window, since a user reported
-            problems when using this.</li>
-        <li>Changed years from 2008 to 2009 in splash image.</li>
-    </ul>
-    <h3>Version 2.5 (June 22nd, 2009)</h3>
-    <ul>
-        <li>Modified export layout procedure so missing formatters can be reported in the error
-          output. Export now succeeds with warnings added where formatters are missing.</li>
-        <li>Conditional blocks (\begin{field}...\end{field}) in layout files can now be given a
-          semicolon-separated list of fields as argument. All fields must then be set for output
-          to be given.</li>
-        <li>Changed RIS import so multiple abstract fields in an entry are concatenated.</li>
-        <li>Added quoting of some special characters in SQL export, based on Kyle Crabtree's patch.</li>
-        <li>Fixed bug in MS Office 2007 XML export - editor names missing.</li>
-        <li>Fixed bug in plugin manager that prevented the "Download plugin" button from working.</li>
-        <li>Fixed bug in plugin manager routine that checks for installed versions of a plugin.</li>
-        <li>Fixed bug in startup that could show warnings multiple times when loading
-          from autosave files.</li>
-    </ul>
-    <h3>Version 2.5beta 2 (May 19th, 2009)</h3>
-    <ul>
-        <li>Plugin manager now handles plugin versions correctly based on the version number in their
-          plugin.xml file.</li>
-        <li>Added formatter "Number" that outputs a sequence number for the current entry in the current
-          export operation. This formatter can be used to produce a numbered list of entries.</li>
-        <li>Added autosave feature.</li>
-        <li>Fixed bug in file link handling in BibTeXML export.</li>
-        <li>Improved handling of patents in Scifinder import.</li>
-    </ul>
-
-    <h3>Version 2.5beta (April 21st, 2009)</h3>
-
-    <ul>
-      <li> Added Simplified Chinese translation.</li>
-      <li> Added simple plugin manager.</li>
-      <li> Added ~/.jabref/plugins as user-specific plugin directory.</li>
-      <li> Added \r marker to WrapFileLinks formatter that outputs file links without expanding relative links.</li>
-      <li> Added [authorsAlpha] key marker that formats authors according to the "alpha" BibTeX style. Patch submitted by Oliver Kopp.</li>
-      <li> Table sort order set by clicking and Ctrl-clicking table columns is now immediately set as default sort order in preferences.</li>
-      <li> Changed LyX pipe setting so it works whether ".in" is included or omitted.</li>
-      <li> Modified ISI importer so the words "of", "and" and "the" will not be capitalized in the title, journal or publisher fields.</li>
-      <li> When adding new local file link, browse dialog now appears immediately when opening file link editor, saving one mouse click.</li>
-      <li> Added "Remove all broken links" option in the resolver dialog for broken links when synchronizing file links.</li>
-      <li> Added rename option to Set/clear field dialog, to move contents from one field to another.</li>
-      <li> Added Back and Forward actions, for switching between recently edited BibTeX entries.</li>
-      <li> Added option under "Entry table" to designate fields as numeric for sorting purposes.</li>
-      <li> Added possibility for custom export filters to define their own name formatters. This is done by adding a file named "<filtername>.formatters". This file defines one formatter on each line, with each line containing the name of the formatter and the formatter definition, separated by a colon (:).</li>
-      <li> Added menu items for increasing/decreasing table font size, with shortcut keys Ctrl-plus and Ctrl-minus.</li>
-      <li> Added options to automatically mark entries imported into an existing database, and to unmark previously marked entries when importing.</li>
-      <li> Added ":(x)" modifier to key generator, specifying that the arbitrary string x should be used as a fallback value if the value returned by the field marker is empty.</li>
-      <li> Added ":upper" modifier to key generator, to force uppercase for a field marker.</li>
-      <li> Added buttons in External programs tab in Preferences for modifying settings for "Push to"-features, and removed obsolete fields.</li>
-      <li> Added support for DOI field in Endnote importer.</li>
-      <li> Added support for language and publication status fields in Medline import (publication status stored in "medline-pst" field).</li>
-      <li> Enabled cookie handling for downloading full-text articles.</li>
-      <li> Improved handling of invalid BibTeX keys containing white space. Parser will now try to piece together the key and avoid disturbing the continued parsing. Patch submitted by Stephan Lau.</li>
-      <li> Cosmetic change to the entry type label to the left in the entry editor.</li>
-      <li> Changed name handling so a single-entry name without a capital initial letter, such as "unknown", will be treated as a solitary last name rather than a von particle.</li>
-      <li> Changed table selection coloring so entries that are grayed out or marked can be distinguished from normal entries when selected.</li>
-      <li> Changed handling of "affiliation" in Medline import - now makes sure to escape # characters before storing.</li>
-      <li> Modified ACM portal fetcher due to web site changes.</li>
-      <li> Improvements to IEEEXplore fetcher - better handling of month and page fields.</li>
-      <li> Changed behaviour of source panel when an entry contains imbalanced # characters - the panel can now show the entry in its invalid form, allowing the user to fix the problem.</li>
-      <li> Improved handling of PDF files without XMP metadata - other metadata will now be retained. Patch submitted by Felix Langner.</li>
-      <li> Fixed bug in parsing file field - double spaces in file names would be reduced to single spaces, breaking the file link. Fix submitted by Uwe Kuehn.</li>
-      <li> Fixed NullPointerException when downloading external file and file directory is undefined.</li>
-      <li> Fixed bug in HTMLConverter.</li>
-      <li> Fixed NullPointerException in key generator for incomplete names.</li>
-      <li> Fixed bug in removing custom export filters.</li>
-      <li> Fixed bug 2225371: restart is no longer required after adding a new custom export filter. </li>
-      <li> Fixed bug in "Move/rename file" feature in file field editor with regard to undefined file directory.</li>
-      <li> Fixed bug in Ris importer.</li>
-      <li> Fixed NullPointerException in Endnote importer.</li>
-    </ul>
-
-
-    <h3>Version 2.4.2 (November 1st, 2008)</h3>
-
-    <ul>
-      <li>Added missing layout formatters FirstPage and LastPage.</li>
-      <li>Fixed a bug regarding ParamLayoutFormatter loaded from plugin.</li>
-      <li>Fixed crash during initalization of journal abbreviation list.</li>
-      <li>Added option to have JabRef search for external file when "Open file" function is chosen for an entry without any linked files. This is similar to what was always done in JabRef 2.3.1 and earlier.</li>
-      <li>Improved regular expression file search, so the regular expression can contain field markers as used for BibTeX key generation in addition to just regular fields. It is no longer possible to call arbitrary layout formatters, but the modifiers "upper", "lower" and "abbr" (for case conversion and abbreviation) can be used.</li>
-      <li>Ris importer now imports PB as "school" instead of "publisher" for THES entries.</li>
-      <li>Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.</li>
-    </ul>
-
-    <h3>Version 2.4.1 (October 8th, 2008)</h3>
-
-      <ul>
-        <li>Fixed bug: layout formatter arguments were not set when using a ParamLayoutFormatter loaded from plugin.</li>
-        <li>Fixed bug: when abbreviating first names, for authors with first names connected with "-", only the first letter is shown.</li>
-        <li>Enhanced ExportFormatTemplate plugins with an optional property "encoding" which overrides the default encoding with the given one.</li>
-        <li>Fixed menu colors under Windows Vista.</li>
-        <li>Fixed bug 2137771: Missing file extension when downloading.</li>
-        <li>Fixed bug 2105329: Ensure that newly added entry is visible in table.</li>
-        <li>Fixed bug 1908222: Preference "Fit table horizontally on screen" doesn't work</li>
-        <li>Fixed bug 2119059: Handling of the A1 tag in the RIS format.</li>
-        <li>Added missing help file for ACM digital library fetcher.</li>
-        <li>Added option for whether to use IEEE LaTeX journal abbreviation list.</li>
-        <li>Added tooltip to menu items in push-to-application popup menu.</li>
-      </ul>
-
-
-    <h3>Version 2.4 (September 1st, 2008)</h3>
-
-      <ul>
-        <li>Added mappings for some special characters that need to be sanitized when generating BibTeX keys.</li>
-        <li>Added ACM Digital Library fetcher by Aaron Chen.</li>
-        <li>Added new entry types (conference, patent, standard, electronic).</li>
-        <li>Improvements to IEEEXplore fetcher.</li>
-        <li>Added explanatory text to indicate that "ps" and "pdf" files are legacy features.</li>
-        <li>Fixed unexpected behaviour of "Open PDF or PS" menu item - now looks in "file" field, and does not launch search for external files.</li>
-        <li>Fixed bug 1827568: 'Save database' might not store current edit in entry editor.</li>
-        <li>Fixed bug 2027944: updating custom export definitions requires restart.</li>
-      </ul>
-
-
-    <h3>Version 2.4beta (March 12th, 2008)</h3>
-
-      <ul>
-	<li>Added "protection" flag in Database properties. When this flag is set, JabRef will refuse to save the database when the file has been externally modified, until the changes have been reviewed and partly or completely accepted.</li>
-	<li>Fixed bug where the external update notification in the side pane would remain even if the referred database was closed.</li>
-	<li>Added two new search modes - display search results in a dialog, and global search.</li>
-	<li>Support for fetching from the command line using --fetch (contributed by Jan F. Boldt and David Kaltschmidt).</li>
-	<li>Support for fetching from Spires (contributed by Fedor Bezrukov).</li>
-	<li>Support for fetching from JSTOR (contributed by Tobias Langner, Juliane Doege, Sebastian de Hoog and Christoph Jacob)</li>
-	<li>Added context menu for file list editor with options to move/rename linked file as well as to automatically move the file to file directory and optionally rename after BibTeX key.</li>
-	<li>JabRef can now be extended by plugins (using the Java Plugin Framework JPF as the underlying technology). Currently extension points exist for:
-          <ul>
-            <li>ImportFormat</li>
-            <li>ExportFormat based on Templates</li>
-            <li>ExportFormat based on IExportFormat (contributed by Kariem Hussein)</li>
-            <li>LayoutFormatter</li>
-            <li>EntryFetcher</li>
-            <li>PushToApplication</li>
-          </ul>
-           JabRef uses JPFCodeGenerator (which was written just for JabRef) to generate helper classes for making JPF easier. Current version used: 0.4 http://forge.spline.inf.fu-berlin.de/projects/jpfcodegen/
-	</li>
-	<li>Print warnings if insufficient Java version is used or if JRE is not from Sun.</li>
-	<li>Memory Stick Mode: JabRef automatically loads configuration settings from jabref.xml and also writes them there if enabled.</li>
-	<li>Improved handling of crossrefs. Fields are now resolved in preview and export.</li>
-	<li>Updated dependencies, now using: JempBox-0.2</li>
-	<li>Improved handling of ArXiv URIs.</li>
-	<li>Changed default preference value: now using import inspection dialog also when just a single entry is imported.</li>
-	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
-	<li>[ 1738920 ] Fixed: Windows Position in Multi-Monitor environment</li>
-	<li>[ 1795355 ] Fixed: LatexFieldFormatter omits "{" on beginning of optional field</li>
-	<li>[ 1297576 ] New feature: Printing of entry preview (use right-click menu)</li>
-	<li>[ 1717849 ] Fixed: Bug in aux import (contributed by Kai Eckert)</li>
-	<li>[ 1749613 ] Fixed: About translation</li>
-	<li>[ 1709449 ] Fixed: Clicking a DOI from context menu fails</li>
-	<li>[ 1869331 ] Fixed: Uninstall after silent install removes Windows start menu</li>
-	<li>[ 1723219 ] Fixed: Strange message (LyX) while installing 2.3</li>
-	<li>Added handling of unknown file types when synchronizing the file field.</li>
-	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
-	<li>Moved file preferences from General tab to new File tab.</li>
-	<li>Reduced horizontal size of preferences dialog.</li>
-	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
-	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).    </li>
-      </ul>
-
-
-    <h3>Version 2.3.1 (November 29th, 2007)</h3>
-
-      <ul>
-	<li>Removed default applications for file types under Mac OS X, and made use of the standard "/usr/bin/open <filename>" way to open files except when an application name is explicitly set.</li>
-	<li>[ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch</li>
-      </ul>
-
-
-    <h3>Version 2.3 (November 8th, 2007)</h3>
-
-      <ul>
-	<li>Added handling of unknown file types when synchronizing the file field.</li>
-	<li>Changed the way customized external file types are stored. Types are now stored in a way analogous to a diff from the default types. This allows default types added in later versions to appear immediately, even if the user has customized the list.</li>
-	<li>Moved file preferences from General tab to new File tab.</li>
-	<li>Reduced horizontal size of preferences dialog.</li>
-	<li>Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug #448917).</li>
-	<li>Download file procedure now strips query string in order to find correct file extension (Debian bug #448027).</li>
-      </ul>
-
-
-    <h3>Version 2.3beta3 (October 6th, 2007)</h3>
-
-      <ul>
-	<li>Export formats that output the character encoding now use common names for encodings instead of Java-specific names.</li>
-	<li>Added "Open" button in external link dialog box to test or use the link.</li>
-	<li>Added formatter WrapFileLinks which iterates over file links, producing a formatted string for each containing any desired information about the file link.</li>
-	<li>Applied Fedor Bezrukov patch (setting User-Agent in URLDownload to solve ArXiv problem).</li>
-	<li>Applied Aaron Chen's patch for fixing bugs in IEEExplore fetcher.</li>
-	<li>Applied Edward Valeev's patch for handling article numbers replacing pages in Refer/Endnote import.</li>
-	<li>Added toolbar button to entry editor for writing XMP-metadata.</li>
-	<li>Added paste and drag & drop support to file list editor.</li>
-	<li>Added "authorLast" and "editorLast" markers for using last author's last name in BibTeX keys.</li>
-	<li>Added support for file field in Write XMP action.</li>
-	<li>Numeric fields (year, volume, number, pmid, citeseercitationcount) are now sorted as numbers when possible.</li>
-	<li>Improvements to the Ovid import filter.</li>
-	<li>Modified AuthorLastFirstAbbreviator and AuthorAbbreviator to accept names in both last-first and first-first format, but always return in last-first format. These two formatters are identical.</li>
-	<li>[ 1648789 ] Fixed: Problem on writing XMP when option to leave out some fields was active.</li>
-	<li>[ 1561990 ] Fixed: Exporting to WinEdt - apostrophe.</li>
-	<li>Fixed bug in entry editor: source panel edits were not properly stored when clicking a different entry in the main table.</li>
-	<li>Fixed problem with "Synchronize file links" not honouring database specific file directory.</li>
-	<li>Fixed problem with file type selection in external file link editor not being up-to-date.</li>
-	<li>Fixed problem with wrong enable/disable behaviour of Clear search button when switching between tabs.</li>
-	<li>Fixed argument parsing in AbstractParamLayoutFormatter so \t and \n can be used for tabs and newlines.</li>
-      </ul>
-
-
-    <h3>Version 2.3beta2 (August 29th, 2007)</h3>
-
-      <ul>
-	<li>When user chooses to save to an existing file, and answers that the file should not be overwritten, a new file dialog now appears instead of the operation cancelling.</li>
-	<li>Removed antialias setting for main table, because it interferes with proper rendering on LCDs when running under JRE 6. Removed non-optional antialias settings for entry editor for the same reason.</li>
-	<li>Changed external link handling so remote (http) links can be sent to the external application. Applications like Evince and Gimp can open remote links.</li>
-	<li>Replaced Simle HTML export filter with improved version by Mark Schenk.</li>
-	<li>Introduced ParamLayoutFormatter interface for layout formatters that can take an argument by the following syntax: \format[MyFormatter(argument)]{\field}. Implementing classes contain a setArgument(String) method that receives the argument (if any) before the format() method is called.</li>
-	<li>Timestamp and owner fields are now set also when appending a bib file, and new options have been introduced to control whether imported/appended/pasted entries should have these fields overwritten if already set.</li>
-	<li>Added operations for adding file links in import inspection window, and made file and URL icons in the table clickable.</li>
-	<li>Removed PDF and PS columns and operations in import inspection window (replaced by operations on the "file" field).</li>
-	<li>File field column in main table now shows file type icon instead of generic icon.</li>
-	<li>Modified Endnote export to take "file" field into account, and to resolve full paths to PDF files.</li>
-	<li>Added "Auto" button to automatically set "owner" field to the default username.</li>
-	<li>Added \encoding tag for begin/end layouts in export filters to print the name of the character encoding used for the export. The tag is not available in entry layouts.</li>
-	<li>Added \% as a supported LaTeX command, producing '%'.</li>
-	<li>Fixed bug in HTMLChars: commands like {\aa} and {\o} were not processed properly, even though defined in Globals.HTMLCHARS.</li>
-	<li>Fixed bug that made it possible to accidentally close database without saving, when error occurs during the save operation.</li>
-      </ul>
-
-
-    <h3>Version 2.3beta (June 28th, 2007)</h3>
-
-      <ul>
-	<li>Added MIS Quarterly export format.</li>
-	<li>Added support for COPAC file format.</li>
-	<li>Added RemoveTilde LayoutFormatter to deal with Bibtex non-breakable spaces.</li>
-	<li>Added autocompletion feature for author/editors and other fields.</li>
-	<li>Added feature to save all open databases.</li>
-	<li>Added support for pushing citations to Vim when Vim server is enabled.</li>
-	<li>Added missing option for specifying the path to LEd.exe.</li>
-	<li>Added -s/--nosplash command line option for disabling the splash screen.</li>
-	<li>Added new field marker [auth.etal] for key generation.</li>
-	<li>Added support in XMP metadata handling for bibtex string resolution.</li>
-	<li>When opening databases, already open files are now skipped.</li>
-	<li>Option to use native instead of Swing file dialogs is now available on all OSes.</li>
-	<li>Synchronize external links now searches entire database, not selected entries.</li>
-	<li>Medline import now adds <Affiliation> information into the "institution" field.</li>
-	<li>Improved handling of external links. The 'file' field can now specify a list of external links, and arbitrary file types are supported. Old-style PDF and PS links can be moved automatically into the 'file' field.</li>
-	<li>Fixed bug in RIS and Refer/Endnote imports. Entries with editors but no authors are now imported properly.</li>
-	<li>Fixed missing export formatter AuthorFirstFirstCommas.</li>
-	<li>Fixed minor bug in Harvard export with missing space between year and title.</li>
-	<li>Fixed bug that caused lockup when connection to IEEExplore fails.</li>
-	<li>Fixed wrong dependency in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed problem with foreign characters in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed problem with key generation in OAI2/ArXiv Fetcher.</li>
-	<li>Fixed bug in duplicate search that made misc entries never get detected as duplicates.</li>
-	<li>Fixed bug in XMP reimport from DublinCore related to month strings.</li>
-      </ul>
-
-
-    <h3>Version 2.2 (January 30th, 2007)</h3>
-
-      <ul>
-	<li>Added progress bar to indicate progress when synchronizing PS/PDF links.</li>
-	<li>Option to autogenerate key for imported entries now also affects entries imported
-      without using the import inspection window.</li>
-	<li>Modified quick jump behaviour so sequences of letters can be found. Timeout or
-      ESC resets the search.</li>
-	<li>Improved XMP support:
-          <ul>
-	    <li>JabRef now reads and write DublinCore and Legacy Document Properties;
-		Caution needs to be used though since, JabRef does overwrite existing values.</li>
-	    <li>XMP privacy filter can be used to prevent sensible fields to be exported.</li>
-          </ul>
-	</li>  
-	<li>Support for OAI2 identifiers with subcategories, e.g. math.RA/0601001</li>
-	<li>Fixed bug that made explicit groups appear empty after updating group tree from external change.</li>
-	<li>New windows installer thanks to Uwe Stöhr.</li>
-	<li>[ 1641247 ] Fixed: No update of preview after generating bibtex key</li>
-	<li>[ 1631548 ] Fixed: Absolute paths should be stored for last open files.</li>
-	<li>[ 1598777 ] Fixed: Month sorting</li>
-	<li>[ 1570570 ] New Feature: Deselect all duplicates on import</li>
-	<li>[ 1574773 ] Fixed: sanitizeUrl() breaks ftp:// and file:///</li>
-	<li>[ 1609991 ] Fixed: Silverplatter Import: Publisher and Year confused</li>
-	<li>[ 1608391 ] Fixed: Medline Search Editbox size gets to big</li>
-      </ul>
-
-
-    <h3>Version 2.2beta2 (November 26th, 2006)</h3>
-
-      <ul>
-	<li>Redesigned export functions to simplify GUI and provide "Export selected entries" functionality. Export filter is now chosen using the file type dropdown menu in the file dialog.</li>
-	<li>Fixed bug that caused UnsupportedEncodingException on Windows when saving.</li>
-	<li>Added warning dialog when exporting failed.</li>
-	<li>Added fix for exporting special chars in RTF like éóú...</li>
-	<li>Added NameFormat LayoutFormatter based on Bibtex method name.format$</li>
-	<li>Added Fetch from ArXiv.org to Web Search<br />
-            [1587342] Quering ArXiv (and any OAI2 Repository)</li>
-	<li>[1594123] Fixed: Failure to import big numbers in Bibtex</li>
-	<li>[1594169] Fixed: Entry editor navigation between panels faulty</li>
-	<li>[1588028] Fixed: Export HTML table has relative DOI URL</li>
-	<li>[1601651] Fixed: PDF subdirectory - missing first character</li>
-      </ul>
-
-
-    <h3>Version 2.2beta (October 13th, 2006)</h3>
-
-      <ul>
-	<li>Added Mark Schenk's advanced HTML export filter.</li>
-	<li>Added options to copy/move/link to dragged linkable file (pdf, ps, etc.).</li>
-	<li>Removed unnecessary output text when scanning for external file changes.</li>
-	<li>Changed layout of entry editor to solve problem with collapsing text fields.</li>
-	<li>Added first version of support for XMP-metadata in PDFs.
-          <ul>
-	    <li>"Import into..."</li>
-            <li>Integrate with copy/move/link.</li>
-            <li>Added option to write all/selected PDFs in database</li>
-          </ul>
-	</li>
-	<li>Added tooltips to database tabs showing the file's full path.</li>
-	<li>Added function for setting or clearing specific fields in selected or all entries.</li>
-	<li>Setting a relative PDF/PS path in Database Properties now makes JabRef look for the directory relative to the bib file's location.</li>
-	<li>Removed Oxford comma from AuthorList...Comma-LayoutFormatters.</li>
-	<li>Added LayoutFormatters that print the Oxford comma.</li>
-	<li>Added missing space between abbreviated author first names: William Andrew Paul => W. A. Paul (used to be W.A. Paul)</li>
-	<li>Added LayoutFormatter for HTML paragraphs.</li>
-	<li>Changing Database Properties now causes the database to be marked as changed.</li>
-	<li>Improved simple search. Words are now treated as separate search terms, and phrases can be indicated with "double quotes".</li>
-	<li>When a letter key is pressed in the table, the first entry starting with the same letter (in the current sort column) is selected.</li>
-	<li>Bib files dragged into JabRef now appear in the Recent files menu.</li>
-	<li>Fixed bug in import dialog.</li>
-	<li>Better support for ISI files in general (should basically be better than INSPEC) including IEEE parsing.</li>
-	<li>Added regular expression search for auto-linking. Search is now more flexible by default.</li>
-	<li>Search operation also now search relative to the JabRef directory.</li>
-	<li>General improvements in Inspec ISI handling.</li>
-	<li>New LayoutFormatter: AuthorOrgSci - first author is in "last, first" all others in "first last". First names are abbreviated.</li>
-	<li>New LayoutFormatter: NoSpaceBetweenAbbreviations - spaces between multiple abbreviated first names are removed.</li>
-	<li>Improved PDF link resolver to produce proper URIs.</li>
-	<li>[1503956] Fixed: Help text instead of Help icon.</li>
-	<li>[1542552] Fixed: Wrong author import from ISI file.</li>
-	<li>[1534537] Fixed: resize groups interface</li>
-	<li>[1465610] Fixed: (Double-)Names containing hyphen (-) not handled correctly</li>
-	<li>[1436014] Fixed: No comma added to separate keywords</li>
-	<li>[1548875] Fixed: download pdf produces unsupported filename</li>
-	<li>[1545601] Fixed: downloading pdf corrupts pdf field text</li>
-	<li>[1285977] Fixed: Impossible to properly sort a numeric field</li>
-	<li>[1535044] Fixed: Month sorting</li>
-	<li>[1540646] Fixed: Default sort order: bibtexkey</li>
-	<li>[1553552] Fixed: Not properly detecting changes to flag as changed</li>
-      </ul>
-
-    <h3>Version 2.1 (August 9th, 2006)</h3>
-
-      <ul>
-	<li>Added capability to drag files and WWW links into JabRef. BibTeX files will be opened normally, other files imported, and WWW links downloaded and imported.</li>
-	<li>The -v command line option now makes the application only print version number and quit immediately.</li>
-	<li>Duplicates within a set of imported entries are now found and shown in the import inspection window.</li>
-	<li>Mac users can now choose between native and Swing file chooser under Preferences -> Advanced.</li>
-	<li>Fixed missing duplicate warning when importing without import inspection window.</li>
-	<li>Fixed error in ISI import which allowed empty fields to be set, causing errors when saving and reloading entries.</li>
-	<li>Fixed missing time and owner stamps when importing entries (only in 2.1b/2.1b2).</li>
-	<li>Fixed erroneous updates in entry editor if user switches to a different entry while downloading PDF/PS file.</li>
-	<li>Fixed bug (only in 2.1b2) in calling file open/save dialog on Mac OS X.</li>
-	<li>Fixed bug that made duplicate resolver dialog pop under import inspection dialog.</li>
-      </ul>
-
-    <h3>Version 2.1beta2 (June 29th, 2006)</h3>
-
-      <ul>
-	<li>Added option to toggle floating of marked entries to the top of the table.</li>
-	<li>Added option to open, append and import multiple BibTeX files.</li>
-	<li>Improved support for LaTeX special characters in HTML and RTF representations.</li>
-	<li>Fixed bug that made entry selection get lost when an edit modifies the entry's position in the main table.</li>
-	<li>Fixed bug in BibTeXML export (entry type name missing in tag).</li>
-	<li>Fixed name handling in (non-compliant) Endnote files giving all author names on the same line.</li>
-	<li>Fixed problem with keyword handling in Medline import.</li>
-	<li>Fixed (harmless) NullPointerException when medline fetch is cancelled.</li>
-	<li>Fixed bug in parser that made {"} illegal in fields quoted with ".</li>
-      </ul>
-
-    <h3>Version 2.1beta (May 9th, 2006)</h3>
-
-      <ul>
-	<li>Known issue: font sizes cannot be changed, but should follow OS settings on Windows and Mac.</li>
-	<li>Known issue: some HTML may be handled inappropriately when downloading from IEEEXplore.</li>
-	<li>Changed Paste function so timestamp and owner fields are updated.</li>
-	<li>Added "Other" item to the "New entry ..." menu.</li>
-	<li>Changed sorting order so marked entries are displayed at the top of the table.</li>
-	<li>Added IEEEXplore search and download feature.</li>
-	<li>Added option to store entries in their original order. Unsorted table view now shows entries in their original order.</li>
-	<li>Added option to autogenerate keys for entries with missing keys before each save.</li>
-	<li>Improved handling of external URLs to prevent problems with special characters.</li>
-	<li>Medline and Endnote imports no longer automatically add curly braces around capital letters in title.</li>
-	<li>Float search now scrolls table to the top.</li>
-	<li>Fixed lockup problem in preview with uneven number of # characters in fields.</li>
-	<li>Fixed problem with default content selector fields reappearing after removal.</li>
-	<li>Fixed problem with unsupported character encodings being selectable and causing unreported save errors.</li>
-	<li>Fixed bug that blocked last line in table columns setup from being removed.</li>
-	<li>Fixed missing export formats from command line.</li>
-	<li>Fixed bug that made Review tab impossible to remove from entry editor.</li>
-	<li>Fixed bug in Medline XML import that assigned wrong PMID for some entries.</li>
-	<li>Fixed bug in custom export that collapsed sequences of two or more backslashes into a single backslash in output.</li>
-	<li>Fixed bug (misspelled formatter name) in Harvard RTF export.</li>
-      </ul>
-
-    <h3>Version 2.0.1 (February 2nd, 2006)</h3>
-
-      <ul>
-	<li>Fixed bug that made a hidden entry editor under some circumstances store a field value to the wrong entry.</li>
-	<li>Fixed synchronization bug that made the opening of a new database sometimes fail.</li>
-	<li>Fixed bug in setting external journal lists when no personal list is set.</li>
-      </ul>
-
-    <h3>Version 2.0 (January 30th, 2006)</h3>
-
-      <ul>
-	<li>Changed sorting selection interface for main table for more intuitive operation.</li>
-	<li>Made import operation update "working directory".</li>
-	<li>Removed hard-coded author/editor name rearrangement in OpenOffice and OpenDocument exports.</li>
-	<li>Fixed hangup when parsing RIS files from Nature.</li>
-	<li>Fixed NullPointerException when generating database from AUX file on Mac OS X.</li>
-	<li>Fixed bug in routine for adding braces around capital letters.</li>
-	<li>Fixed bug in switching preview layouts.</li>
-	<li>Fixed bug in link handling in entry preview.</li>
-      </ul>
-
-    <h3>Version 2.0b2 (January 15th, 2006)</h3>
-
-      <ul>
-	<li>Changed field order in OpenDocument export
-	to comply with bibliography requirement.</li>
-	<li>Added support for inserting citations into
-	Emacs using gnuserv/gnuclient.</li>
-	<li>Added option to set a regular expression
-	replace operation on generated bibtex keys.</li>
-	<li>Added support for custom importers inside
-	a jar file.</li>
-	<li>Fixed bug in opening URLs containing "&"
-	on Windows.</li>
-      </ul>
-
-    <h3>Version 2.0b (January 4rd, 2006)</h3>
-
-      <ul>
-	<li>Added a system for registering custom import
-	formats in the form of Java classes.</li>
-
-	<li>Added export option for OpenDocument
-	spreadsheet.</li>
-
-	<li>Added new options for name formatting in main
-	table.</li>
-
-	<li>Added REPEC-NEP import filter.</li>
-
-	<li>Added option for non-field parameters for export
-	formatters. If the parameters does not start with the
-	backslash character, it will be passed unchanged to the
-	formatter in place of any field value.</li>
-
-	<li>Added export formatter CurrentDate, which returns
-	the current date, and takes a format string as
-	parameter.</li>
-
-	<li>Added customization of table colors, accessible
-	from Tools -> Preferences -> Entry table.</li>
-
-	<li>Added new Appearance tab to preferences dialog to
-	gather appearance related options.</li>
-
-	<li>Added toggling of abbreviated and full journal
-	names. The list of journals is realized as an external
-	file, but editable from a Manage Journal Abbreviations
-	panel. Secondary lists can also be linked, but not
-	edited. There is a download option to quickly get a
-	list available on the internet, and we will provide one
-	or more lists for download from the SourceForge web
-	server.</li>
-
-	<li>Added functionality for new JabRef instances to
-	detect a running instance, and send command line
-	parameters to the running instance for processing.</li>
-
-	<li>Added handling of HTML links in preview panel.</li>
-
-	<li>Added confirmation dialog when database is saved
-	and the chosen encoding doesn't support all characters.
-	Gives options to save, cancel or try a different
-	encoding.</li>
-
-	<li>The encoding used when opening a database is now
-	remembered, and used when database is stored.</li>
-
-	<li>Added review field for research comments, paper
-	reviews, etc.</li>
-
-	<li>Added option to disable wrapping for certain
-	fields. Wrapping of pdf, ps, doi and url is disabled by
-	default.</li>
-
-	<li>Antialiasing option now affects entry editor text
-	fields as well as table text.</li>
-
-	<li>Changed to monospaced font in source editor
-	field.</li>
-
-	<li>Removed option to put double braces around BibTeX
-	fields, but retained option to remove double braces
-	when loading. Added option to put braces around capital
-	letters of a chosen set of fields.</li>
-
-	<li>Improved Ovid import.</li>
-
-	<li>Fixed problem with ordering of BibTeX strings that
-	are referred to by other strings.</li>
-
-	<li>Fixed problem with loading 16-bit encoded bib files
-	with 8-bit encoding as default, and vice versa.</li>
-
-	<li>Fixed multiplying authors bug when author/editor
-	field appears both in Required and Optional tabs.</li>
-
-	<li>Fixed startup freeze when trying to load certain
-	malformed bib files.</li>
-
-	<li>Fixed bug related to multi-line fields in RIS
-	import.</li>
-
-	<li>Fixed bug related to looking up a fully qualified
-	DOI</li>
-
-	<li>Included review field to preview panel 1, which
-	shows the abstract</li>
-
-	<li>Fixed bug where booktitle field was not displayed
-	in preview for conference proceedings, similar to
-	journal field</li>
-      </ul>
-
-    <h3>Version 1.8.1 (September 15th, 2005)</h3>
-
-      <ul>
-	<li>Added automatic timestamp with configurable format
-	for entries.</li>
-
-	<li>Added new key generator modifier ":abbr" to
-	abbreviate field contents.</li>
-
-	<li>Added Help button in Preferences -> Entry
-	preview</li>
-
-	<li>Added Big5, Big5_HKSCS and GBK encodings for
-	Chinese.</li>
-
-	<li>Improved marking feature. Username is now used for
-	marking, so different users can mark entries separately
-	without interference.</li>
-
-	<li>Improved handling of names such as "Firstname de la
-	Lastname jr.", with different handling for presentation
-	and sorting purposes. Key generation now should always
-	use the genuine last name, and not produce keys like
-	"de2001".</li>
-
-	<li>Removed duplicate warning from inspection dialog
-	for non-selected entries.</li>
-
-	<li>Fixed setting of sheet name in OpenOffice.org Calc
-	export.</li>
-
-	<li>Fixed bug that prevented PDF/PS opening by F4 from
-	automatically finding files in subdirectories below the
-	main PDF/PS dir.</li>
-
-	<li>Fixed BibTeX parser bug that made it choke on short
-	comment strings.</li>
-
-	<li>Fixed bug that made regexp search fail for fields
-	containing newline characters.</li>
-
-	<li>Fixed platform-dependent handling of newline
-	characters.</li>
-
-	<li>Fixed bug that prevented command line import with
-	explicit format.</li>
-
-	<li>Fixed bug that made it impossible to disable table
-	antialiasing.</li>
-
-	<li>Fixed AuthorAndsCommaReplacer.</li>
-      </ul>
-
-    <h3>Version 1.8 (July 30th, 2005)</h3>
-
-      <ul>
-	<li>Search panel now starts visible if it was visible
-	at last shutdown.</li>
-
-	<li>Added option to disable import inspection window
-	when only one entry is being imported.</li>
-
-	<li>Fixed parser bug that caused problems for bib files
-	containing extra characters after the last entry.</li>
-
-	<li>Fixed missing month in JStor import.</li>
-
-	<li>Fixed some bugs in "new from plain-text"
-	wizard</li>
-      </ul>
-
-    <h3>Version 1.8b2 (July 13th, 2005)</h3>
-
-      <ul>
-	<li>Changed handling of external updates so the
-	notification is suppressed when there are no actual
-	changes.</li>
-
-	<li>Changed autodetecting import so BibTeX files are
-	handled more similarly to other formats.</li>
-
-	<li>Enabled sorting by icon columns.</li>
-
-	<li>Added option to remove BibTeX source panel from
-	entry editor.</li>
-
-	<li>Added command line option to not load any files at
-	startup. Will override any autoloading or other command
-	line options that normally load or import files.</li>
-
-	<li>Added handling of duplicates to import inspection
-	window.</li>
-
-	<li>Made entry preview be updated whenever the
-	selection is expanded by one row, to make it more
-	useful while selecting a set of entries.</li>
-
-	<li>Changed BibTeX field parsing to avoid inserting
-	line breaks at wrong places.</li>
-
-	<li>Improved handling of page numbers in Medline
-	import.</li>
-
-	<li>Fixed import of file links when importing SixPack
-	files.</li>
-
-	<li>Fixed bug that prevented closing of search
-	interface when no databases are open.</li>
-
-	<li>Fixed OpenOffice Calc export to be compatible with
-	OpenOffice.org 2.0 beta.</li>
-
-	<li>Fixed bugs in Refer/Endnote import filter.</li>
-
-	<li>Fixed bug that caused changes to be lost in some
-	cases when the same field is present in multiple entry
-	editor tabs.</li>
-
-	<li>Fixed bug that prevented command line autodetecting
-	import from working with BibTeX files.</li>
-
-	<li>Fixed minor bug in routine for removing double
-	braces.</li>
-      </ul>
-
-    <h3>Version 1.8b (June 6th, 2005)</h3>
-
-      <ul>
-	<li>Added option to store bib file with double
-	braces.</li>
-
-	<li>Follow @input tags in aux files to indicate nested
-	aux files for generating subdatabases.</li>
-
-	<li>Improved wrapping and formatting of bib files, to
-	preserve paragraph separator (empty line).</li>
-
-	<li>Added test buttons for customization of preview
-	layouts.</li>
-
-	<li>Added inspection dialog for previewing and
-	generating keys for imported entries, and deciding
-	which ones to keep and discard. The dialog allows
-	inspection during long import processes such as Medline
-	search.</li>
-
-	<li>Restructured layout to use a common side pane with
-	all tabs.</li>
-
-	<li>Added import filter for Cambridge Scientific
-	Abstracts (CSA) format.</li>
-
-	<li>Added PS directory with similar options as
-	PDF.</li>
-
-	<li>Added [authshort] and [edtrshort] key field
-	markers. Patch submitted by Kolja Brix.</li>
-
-	<li>Made the program remember preview enable
-	setting.</li>
-
-	<li>Improved handling of illegal regular expressions in
-	search.</li>
-
-	<li>Removed options to search only Required, Optional
-	and/or General fields, in order to simplify search
-	interface.</li>
-
-	<li>Changed keys for Next and Previous tab to CTRL-PGDN
-	and CTRL-PGUP to match shortcuts in a certain popular
-	web browser.</li>
-
-	<li>Minor change to Preferences -> Table columns to
-	enable insertion of column in position 2.</li>
-
-	<li>Fixed parser bug that caused problems for files
-	with >10000 entries.</li>
-
-	<li>Fixed bug in entry editor that caused the source
-	edit panel to remove marking from entries.</li>
-
-	<li>Fixed export bug that made "\begin" tags fail if
-	encountered immediately after an "\end" tag.</li>
-
-	<li>Fixed export bug that made whitespace disappear
-	after empty field values.</li>
-
-	<li>Fixed ISI import bug that handled SO fields with
-	line breaks wrong.</li>
-
-	<li>Fixed bug occuring when choosing not to import
-	duplicate imported entry.</li>
-
-	<li>Fixed problem with detecting popup trigger on Mac
-	OSX with one button mouse.</li>
-
-	<li>Fixed erroneous relative paths for PDF files when
-	PDF directory is not set.</li>
-
-	<li>Fixed entry preview to resolve string
-	references.</li>
-      </ul>
-
-    <h3>Version 1.7.1 (April 11th, 2005)</h3>
-
-      <ul>
-	<li>Removed unnecessary stack traces when opening
-	external viewer.</li>
-
-	<li>Fixed bug that made Ctrl-E destroy current edit in
-	entry editor.</li>
-
-	<li>Fixed problem when copying modified BibTeX key gave
-	old value.</li>
-
-	<li>Fixed missing 'booktitle' import in CONF entries in
-	RIS import.</li>
-
-	<li>Fixed bug that made group tree disappear for
-	certain keyword expressions.</li>
-
-	<li>Fixed bug that made standard BibTeX fields be saved
-	without line wrapping.</li>
-      </ul>
-
-    <h3>Version 1.7 (March 20th, 2005)</h3>
-
-      <ul>
-	<li>When fetching from Medline or CiteSeer, fetched
-	entry is now opened in editor.</li>
-
-	<li>Added French translations of help files.</li>
-
-	<li>Added color highlighting of focused text field in
-	entry editor.</li>
-
-	<li>Added option in context menu of entry editor for
-	changing capitalization of field contents.</li>
-
-	<li>Added name conversion "Smith, RA" -> "Smith, R.
-	A." to Medline import.</li>
-
-	<li>Updated task bar icon.</li>
-
-	<li>Fixed bug that left some search settings items
-	inappropriately disabled.</li>
-
-	<li>Fixed bug that caused requirement for restart to
-	register change in default key pattern.</li>
-
-	<li>Fixed bug that caused crash some times after
-	adding/removing field content selectors.</li>
-
-	<li>Fixed bug in recognizing custom entry types when
-	reading bib files.</li>
-
-	<li>Fixed bug that allowed a deleted entry to stay
-	visible in the entry editor.</li>
-      </ul>
-
-    <h3>Version 1.7b2 (March 7th, 2005)</h3>
-
-      <ul>
-	<li>Made side pane resizable.</li>
-
-	<li>Replaced entry customization dialog with improved
-	interface.</li>
-
-	<li>Added standard entry type "conference", similar to
-	"inproceedings".</li>
-
-	<li>Added "default" label pattern to avoid the need to
-	set similar patterns manually.</li>
-
-	<li>Added line wrapping to metadata in saved .bib file
-	to avoid long lines.</li>
-
-	<li>Added "bibtexkey" as implicit fourth sort
-	criterion, to minimize problem with almost similar
-	entries swapping places.</li>
-
-	<li>Added OpenOffice.org Calc export filter that
-	exports spreadsheet compatible with the OpenOffice.org
-	bibliography feature.</li>
-
-	<li>Added a couple of previously unsupported
-	publication types in SciFinder.</li>
-
-	<li>Added extra shortcuts CTRL-+ and CTRL-- for
-	switching tabs in entry editor, since original
-	shortcuts CTRL[-SHIFT]-TAB is used by some window
-	managers.</li>
-
-	<li>Updated Endnote export filter.</li>
-
-	<li>Fixed focus and key binding problems for switching
-	tabs/entries in entry editor</li>
-
-	<li>Fixed bug that prevented required fields tab from
-	appearing for entries with only bibtex key as required
-	field.</li>
-
-	<li>Fixed bug that prevented the user from changing the
-	default encoding.</li>
-
-	<li>Fixed bugs in RIS import.</li>
-
-	<li>Fixed bug 1112050; freeze when reading certain
-	author fields with mismatched braces.</li>
-      </ul>
-
-    <h3>Version 1.7 beta (January, 27th, 2005)</h3>
-
-      <ul>
-	<li>Changed routine for rearranging author names
-	(Lastname, Firstname) so bracketed expressions are
-	treated as units.</li>
-
-	<li>Grouping controls now allow group hierarchies, and
-	now allow explicit and search expression groups as well
-	as keyword groups.</li>
-
-	<li>Added full customization of general fields
-	tabs</li>
-
-	<li>Added option to preserve formatting for non-BibTeX
-	fields.</li>
-
-	<li>Added integrity check for database.</li>
-
-	<li>Added export filters EndNote and Harvard RTF.</li>
-
-	<li>Added automatic import format chooser for import
-	(same as wildcard import below).</li>
-
-	<li>Added wildcard (*) option for command-line import,
-	to try to automatically determine the correct
-	format.</li>
-
-	<li>Improved layout of Preferences dialog.</li>
-
-	<li>Improved several import filters.</li>
-
-	<li>Added authIniN/edtrIniN key formatters.</li>
-
-	<li>Marked entries now float to the top when no
-	searching or grouping reordering is active.</li>
-
-	<li>Fixed problem with opening file dialog on Win NT -
-	AWT dialog is now opened if Swing dialog fails.</li>
-      </ul>
-
-    <h3>Version 1.6 (November 27th, 2004)</h3>
-
-      <ul>
-	<li>Improved handling of entry selection in various
-	ways. E.g. selected entry is now scrolled into view
-	when opening entry editor and entry is kept selected
-	when importing CiteSeer fields.</li>
-
-	<li>Fixed update bug between autogenerated bibtex key
-	and source panel.</li>
-
-	<li>Fixed missing . at the end of last author name in
-	RIS import.</li>
-
-	<li>Fixed NullPointerException on certain special
-	characters when exporting to BibTeXML.</li>
-
-	<li>Fixed bug that sometimes prevented the unmarking of
-	entries.</li>
-
-	<li>Fixed problem with formatting one-name
-	authors.</li>
-
-	<li>Various other bugfixes.</li>
-      </ul>
-
-    <h3>Version 1.6 beta (November 8th, 2004)</h3>
-
-      In an effort to produce better and more stable releases,
-      we have decided to release a beta versions prior to
-      future versions. We start out with today's beta release
-      of version 1.6. Users can now choose whether to download
-      and use the beta version for earlier access to new
-      features, or whether to wait for the final, better-tested
-      version. The final 1.6 version is expected to be released
-      in a few weeks from today.
-
-      <ul>
-	<li>Added mnemonic keys to menus and menu items.</li>
-
-	<li>Added MODS and tab-separated file export</li>
-
-	<li>Added facility for detecting and handling external
-	changes to open bib files.</li>
-
-	<li>Added scan option for exact duplicates with
-	automatic removal.</li>
-
-	<li>Bibtex strings are now sorted automatically.</li>
-
-	<li>Bibtex strings are now resolved when exporting
-	database.</li>
-
-	<li>Fixed problem with field content selector getting
-	too wide. Limited width.</li>
-
-	<li>Fixed PDF/PS view routine to remove problems with
-	filenames containing spaces.</li>
-
-	<li>Fixed bug that interfered with Fetch Medline by ID,
-	and fixed parsing problem with certain Medline
-	entries.</li>
-
-	<li>Fixed bug that interfered with Push to WinEdt.</li>
-
-	<li>Fixed HTML output so \c{c} is handled
-	correctly.</li>
-
-	<li>command line option for generating a sub-database
-	from LaTex aux file entries</li>
-
-	<li>simple copy/paste menu in entry editor</li>
-
-	<li>experimental: text-input-area with underlying
-	infotext in plaintext import dialog</li>
-      </ul>
-
-    <h3>Version 1.55 (October 12th, 2004)</h3>
-
-      <ul>
-	<li>Made method for opening PDF files robust with
-	regard to file separators (/ and \), so bib files can
-	easier be used across platforms.</li>
-
-	<li>Improved Medline fetcher. Can now fetch entries
-	based on a search expression.</li>
-
-	<li>Added features for fetching fields and referring
-	publications from the CiteSeer database.</li>
-
-	<li>Added option to always save database ordered by
-	author/editor/year, and made this the default
-	setting.</li>
-
-	<li>When a single entry is selected, right-click menu
-	now shows a checkbox menu for group memberships instead
-	of the regular "Add to" and "Remove from" menus.</li>
-
-	<li>Improved [shorttitle] and [veryshorttitle] special
-	key pattern fields.</li>
-
-	<li>Added dialog box for conveniently setting the
-	fields of an entry from a plain text description.</li>
-
-	<li>Added formatter "ResolvePDF" to create correct
-	PDF/PS links in HTML export when relative file names
-	are used.</li>
-
-	<li>Added Abstract panel in entry editor.</li>
-
-	<li>Added alternate preview with abstract, and made
-	both previews configurable.</li>
-
-	<li>Added the option to create a subset of a database
-	based on an .aux file.</li>
-
-	<li>Added 'Cancel' button to duplicate resolver dialog,
-	so the process can be stopped.</li>
-
-	<li>Added check for spaces in custom entry type
-	names.</li>
-
-	<li>Added several new key pattern markers.</li>
-
-	<li>Added toolbar buttons for Mark/Unmark to improve
-	discoverability.</li>
-
-	<li>Fixed bug that made export filters ignore the
-	chosen character encoding.</li>
-
-	<li>Fixed bug that interfered with author name
-	formatting.</li>
-
-	<li>Fixed various bugs in import filters.</li>
-
-	<li>Fixed bug that prevented confirmation dialog when
-	deleting entry from the entry editor.</li>
-
-	<li>Fixed bug that made the next entry be opened
-	instead of the current, when pressing Enter in
-	table.</li>
-
-	<li>Fixed bug that made it possible to leave a source
-	edit when the source didn't validate properly. Also
-	made it impossible to change table selection until
-	source validates.</li>
-      </ul>
-
-    <h3>Version 1.5 (August 3rd, 2004)</h3>
-
-      <ul>
-	<li>Added Highlight and select options to the group
-	interface, and made it possible to change the number of
-	visible lines in the list.</li>
-
-	<li>Added option to allow or disallow direct table
-	editing.</li>
-
-	<li>Added optional confirmation dialog for deleting
-	entries.</li>
-
-	<li>Added optional warning dialog for duplicate BibTeX
-	keys.</li>
-
-	<li>Added warnings to bibtex parser, and prevented
-	failure to load files with duplicate string
-	definitions.</li>
-
-	<li>Added JStor import filter.</li>
-
-	<li>Changed the look and feel to JGoodies Forms on
-	non-Macintosh platforms.</li>
-
-	<li>Optimized performance in several areas.</li>
-
-	<li>Numerous usability improvements.</li>
-
-	<li>Fixed RIS import bug caused by short lines.</li>
-
-	<li>Fixed bug in SciFinder import.</li>
-
-	<li>Fixed bug that made entire field get cleared when
-	removing from group.</li>
-      </ul>
-
-    <h3>Version 1.4 (June 6th, 2004)</h3>
-
-      Version 1.4 provides command line options for importing
-      and exporting files, advanced search, custom export
-      filters, and several bug fixes and minor changes.
-
-      <ul>
-	<li>Added advanced search feature.</li>
-
-	<li>Added facility for using custom export
-	formats.</li>
-
-	<li>Added command line options for importing/exporting
-	files, importing/exporting, user preferences, loading
-	session and for suppressing the GUI (using RitOpt for
-	parsing options).</li>
-
-	<li>Added automatic stripping of \url{} when opening
-	url.</li>
-
-	<li>Improved export filters.</li>
-
-	<li>Fixed focus bug which sometimes interfered with
-	cut/copy/paste.</li>
-      </ul>
-
-    <h3>Version 1.3.1 (May 9, 2004)</h3>
-
-      Release 1.3.1 resolves a couple of severe bugs in 1.3.
-      All users who have downloaded 1.3 should upgrade (the
-      bugs in 1.3 impaired functionality but did not pose a
-      security risk).
-
-    <h3>Version 1.3.* (May 9, 2004)</h3>
-
-      This release adds entry preview, detection of duplicate
-      entries, persistent entry marking, new import and export
-      filters, better linking to PDF/PS/URL/DOI, and better Mac
-      OS X compatibility. There are several other changes and
-      improvements, and many bugfixes.
-
-    <h3>Version 1.2 (March 21, 2004)</h3>
-
-      The icon set has been replaced. Notable new features are
-      French language support, key generator customization,
-      string replace, and BibTeXML import. Several bugs have
-      been fixed.
-
-    <h3>Version 1.19 (Feb 19,2004)</h3>
-
-      <ul>
-	<li>Entry editor is now opened for an entry that causes
-	an error when saving.</li>
-
-	<li>Added options to display names in harmonised format
-	in the main table.</li>
-
-	<li>Added Docbook and (experimental) HTML export.</li>
-
-	<li>Enabled 'doi' and 'pii' fields for Medline
-	import.</li>
-
-	<li>Enabled antialiasing fonts.</li>
-
-	<li>Added the Kunststoff look&feel to give a more
-	pleasant user interface.</li>
-
-	<li>Added font selector for the main table.</li>
-
-	<li>Improved table column customization.</li>
-
-	<li>Added word selector feature for selected fields
-	(keywords, journal).</li>
-
-	<li>Added support for German and Norwegian
-	language.</li>
-
-	<li>Generalized copy cite key features for multiple
-	entries.</li>
-
-	<li>Added quick load/save session feature.</li>
-
-	<li>Fixed issue/number bug in ISI import.</li>
-
-	<li>Added "Open pdf/ps" item in right-click menu.</li>
-
-	<li>Fixed bug causing external viewer to only work in
-	General fields.</li>
-
-	<li>Added functionality for using Browse buttons for
-	file-related fields (ps, pdf, etc.).</li>
-
-	<li>Added Browse buttons to External programs tab in
-	Preferences.</li>
-
-	<li>Fixed bug related to Save database and Source field
-	which caused changes to disappear.</li>
-      </ul>
-
-    <h3>Version 1.1 (Jan 02, 2004)</h3>
-
-      <ul>
-	<li>Added bibtex key uniqueness checking, and prevented
-	autogeneration from generating non-unique keys.</li>
-
-	<li>Added command line option to load file on
-	startup.</li>
-
-	<li>Fixed problem with autogeneration creating invalid
-	keys.</li>
-
-	<li>Improved Refer/Endnote import.</li>
-
-	<li>Added feature for importing entries and/or strings
-	and/or group definitions from another BibTeX
-	database.</li>
-
-	<li>Added menu choices to import into open
-	database.</li>
-
-	<li>Added toolbar button for closing current
-	database.</li>
-
-	<li>Fixed shortcut key for "Store field" in entry
-	editor, and fixed problem that made shortcut for "Save
-	database" unavailable from entry editor.</li>
-
-	<li>Added option to fetch Medline entries automatically
-	by ID, based on a patch submitted by Mike Smoot.</li>
-
-	<li>Fixed bug in RIS import.</li>
-
-	<li>Added options to copy key and copy "\cite{key}" to
-	right-click menu.</li>
-
-	<li>Fixed bug that caused some General fields not to
-	get displayed.</li>
-
-	<li>Enabled customization of General fields.</li>
-
-	<li>Enabled customization of existing entry types, and
-	definition of new types.</li>
-      </ul>
-
-    <h3>Version 1.0 (Nov 29, 2003)</h3>
-
-      First release of JabRef
-
-  </body>
-
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+  <h1>更新履歴</h1>
+
+  <p>Please refer to <a href=http://jabref.sourceforge.net/revisionhistory.php">http://jabref.sourceforge.net/revisionhistory.php</a> for a complete history in English.</p>
+
+</body>
+
+</html>
diff --git a/src/help/ja/SearchHelp.html b/src/help/ja/SearchHelp.html
index 8a0c4aa..b70fab8 100644
--- a/src/help/ja/SearchHelp.html
+++ b/src/help/ja/SearchHelp.html
@@ -1,101 +1,56 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Searching</h1>
-
-    <p>There are three different search modes in JabRef.</p>
-
-    <p><em>CTRL-F</em> opens or focuses the search interface.
-    Pressing <em>CTRL-F</em> several times toggles search mode.
-    When searching incrementally, pressing <em>CTRL-F</em> makes
-    the program search for the next occurence of the search
-    string.</p>
-
-    <p><em>CTRL-SHIFT-F</em> opens or focuses the search interface,
-    and selects incremental search. When searching incrementally,
-    <em>CTRL-SHIFT-F</em> also finds the next occurence of the
-    search string.</p>
-
-    <h2>Incremental search</h2>
-
-    <p>When searching incrementally, the
-    program searches immediately each time you press a letter. The
-    status line informs you about the success of the search.
-    Pressing the search shortcut keys causes the program to find
-    the next occurrence of the current search string. If no further
-    occurrences can be found, the status line will notify you about
-    this. Repeating the search again causes the search to restart
-    at the top. The search order always follows the current sorting
-    of your database. To escape an incremental search, press ESC or
-    click "Clear search".</p>
-
-    <h2>Normal</h2>
-
-    <p>In a normal search, the program searches your
-    database for all occurences of the words in your search string,
-    once you press ENTER. Only entries containing all words will be
-    considered matches. To search for sequences of words, enclose
-    the sequences in double quotes. For instance, the query
-    <b>progress "marine aquaculture"</b> will match entries
-    containing both the word "progress" and the phrase "marine
-    aquaculture". All entries that don't match are hidden, leaving
-    for display the matching entries only (filter mode), or are
-    grayed-out (float mode). To stop displaying the search results,
-    press ESC or click "Clear search".</p>
-
-    <h2><a name="advanced"
-       id="advanced">Field specification, logical
-       operators</a></h2>
-
-       <p>In order to search specific fields only
-       and/or include logical operators in the search expression, a
-       special syntax is available in which these can be specified.
-       E.g. to search for entries whose author is "Miller", enter
-       (in any but incremental search mode):</p>
-
-    <p>author = miller</p>
-
-    <p>Both the field specification and the search term support
-    regular expressions. If the search term contains spaces,
-    enclose it in quotes. Do <i>not</i> use spaces in the field
-    specification! E.g. to search for entries about image
-    processing, type:</p>
-
-    <p>title|keywords = "image processing"</p>
-
-    <p>You can use "and", "or", "not", and braces as intuitively
-    expected:</p>
-
-    <p>(author = miller or title|keywords = "image processing") and
-    not author = brown</p>
-
-    <p>The "=" sign is actually a shorthand for "contains".
-    Searching for an exact match is possible using "matches" or
-    "==". Using "!=" tests if the search term is <i>not</i>
-    contained in the field (equivalent to "not ... contains ...").
-    The selection of field types to search (required, optional,
-    all) is always overruled by the field specification in the
-    search expression. To search for entries of a certain type, a
-    pseudo field called "entrytype" is available:</p>
-
-    <p>entrytype = thesis</p>
-
-    <p>This finds entries whose type (as displayed in the
-    "Entrytype" column) contains the word "thesis" (which would be
-    "phdthesis" and "mastersthesis"). Another pseudo field
-    "bibtexkey" allows to search for citation keys, e.g.</p>
-
-    <p>bibtexkey = miller2005</p>
-
-    <h2>Search settings</h2>
-
-    <p>The <em>Settings</em> button opens a
-    menu that allows to toggle case sensitivity and use of regular
-    expressions in the search, and whether search results should be
-    selected in the table.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>検索</h1>
+
+    <h2>キーボード<ruby><rb>短絡鍵</rb><rp>(</rp><rt>ショートカット</rt><rp>)</rp></ruby></h2>
+
+    <p><em>CTRL-F</em>を押すと、検索操作盤が開くかフォーカスを得ます。<em>CTRL-F</em>を押すたびに、検索モードが切り替わります。<ruby><rb>逐次検索</rb><rp>(</rp><rt>インクリメンタルサーチ</rt><rp>)</rp></ruby>中に、<em>CTRL-F</em>を押すと、プログラムは、検索文字列の次の該当箇所を探します。</p>
+
+    <p><em>CTRL-SHIFT-F</em>を押すと、検索操作盤が開くかフォーカスを得て、逐次検索が選択されます。逐次検索中に、<em>CTRL-SHIFT-F</em>を押すと、プログラムは、検索文字列の次の該当箇所を探します。</p>
+
+    <h2>検索モード</h2>
+   
+    <p>JabRefには3つの検索モードがあります。</p>
+    
+    <h3><ruby><rb>逐次検索</rb><rp>(</rp><rt>インクリメンタルサーチ</rt><rp>)</rp></ruby></h3>
+
+    <p>逐次検索では、あなたが一文字入力するごとにプログラムが即座に検索を開始します。検索結果は、ステイタスラインに表示されます。検索短絡鍵を押すと、現在の検索文字列の次の該当箇所を探し始めます。次の該当箇所がない場合には、その旨ステイタスラインに表示されます。そのまま検索を続けると、検索は冒頭から再開されます。検索順は、常に現在のデータベースの整序順に従います。逐次検索を終えるには、ESC鍵を押すか「消去」ボタンを押してください。</p>
+
+    <h3>通常検索</h3>
+
+    <p>通常検索では、ENTERを押すと、入力した検索文字列に含まれる単語の該当箇所すべてが、データベースから検索されます。ここでは、すべての単語を含む項目のみが、一致項目と見なされます。連続した単語群を検索するには、その単語群を引用符""で括ってください。例えば、<b>progress "marine aquaculture"</b>という問い合わせは、"progress"という単語と"marine aquaculture"という句をともに含む項目に一致します。一致しない項目はすべて非表示となり、一致項目だけを残すか(フィルターモード)、一致しない項目を淡色表示します(上部表示モード)。検索結果の表示を終了するには、ESC鍵を押すか「消去」ボタンを押してください。</p>
+
+    <h3><a name="advanced" id="advanced"></a>詳細検索</h3>
+
+    <p>特定のフィールドのみを検索したかったり、検索表現に論理演算子を含めたい場合には、これらを使用するための特別な文法があります。例えば、著者が「Miller」である項目を検索するには、(逐次検索モード以外で)</p>
+
+    <p>author = miller</p>
+
+<p>と入力してください。フィールドの指定方法と検索文字列の双方とも正規表現をサポートしています。検索文字列に空白が含まれる場合には、文字列を引用符で囲んでください。フィールドの指定に空白は<b>決して</b>使わないでください!例えば、画像処理に関する項目を検索するには、</p>
+
+    <p>title|keywords = "image processing"</p>
+
+<p>と入力してください。この中で、下記のように「and」「or」「not」および括弧を使用することができます。</p>
+
+    <p>(author = miller or title|keywords = "image processing") and
+    not author = brown</p>
+
+    <p>「=」記号は、実は「contains」の省略形です。完全一致検索は、「matches」あるいは「==」を使って行うことができます。「!=」を使うと、フィールドに含まれて<b>いない</b>検索語を探します(「not ... contains ...」と等価)。検索対象のフィールド型の選択(必須/非必須/すべて)よりも、検索表現中のフィールド指定の方が常に優先されます。ある型の項目を検索するには、下記のように「entrytype」という準フィールドを使うことができます。</p>
+
+    <p>entrytype = thesis</p>
+
+    <p>こうすると、(「Entrytype」列に表示されている)型に「thesis」という単語(「phdthesis」「mastewrthesis」等)を含む項目を検索します。下記のように、別の準フィールド「bibtexkey」を使うと、引用鍵を検索することができます。</p>
+
+    <p>bibtexkey = miller2005</p>
+
+    <h2>検索設定</h2>
+
+    <p><b>設定</b>ボタンを押すと、大小文字を区別するかを切り替えたり、検索に正規表現を使うようにしたり、検索結果が表中で選択されるようにするか、エディタとプレビュー中において検索語を着色するかを切り替えることができるメニューが表示されます。</p>
+</body>
+</html>
diff --git a/src/help/ja/ShortIntegrityCheck.html b/src/help/ja/ShortIntegrityCheck.html
index d6c32b7..0f04341 100644
--- a/src/help/ja/ShortIntegrityCheck.html
+++ b/src/help/ja/ShortIntegrityCheck.html
@@ -1,13 +1,13 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>Integrity check</h1>
-
-    <p>Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check. </p>
-
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>Integrity check</h1>
+
+    <p>Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check. </p>
+
+</body>
+</html>
diff --git a/src/help/ja/StringEditorHelp.html b/src/help/ja/StringEditorHelp.html
old mode 100755
new mode 100644
index 4f596aa..6021091
--- a/src/help/ja/StringEditorHelp.html
+++ b/src/help/ja/StringEditorHelp.html
@@ -1,23 +1,23 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1>文字列エディタ</h1>
-
-    <p><em>これは、基本ウィンドウから<b>BibTeX→文字列を編集</b>かツールバーボタンを押すことで開きます。</em></p>
-
-    <p><em>文字列</em>は、<em>bibtex</em>においてプログラミング言語の定数と同じ役割を果たします。各文字列は、重複のない<em>名称</em>と<em>内容</em>とで定義されます。この名称は、データベースの他の場所で内容を表すものとして使用することができます。</p>
-
-    <p>例えば、多くの項目が「J. Theor. Biol.」(Journal of Theroretical Biology)のように、短縮形を覚えるのが難しい学術誌からのものである場合、この学術誌の名称を表すものとしてJTBという文字列を定義することができます。各項目ごとに正確な学術誌名を繰り返す代わりに、それぞれの<em>journal</em>フィールドに「#JTB#」という文字を入れれば、毎回正確に同じ学術誌名が書き込まれるようにすることができます。</p>
-
-    <p>文字列への参照はフィールド中どこでも使用することができ、文字列の名称を必ず「#」文字の対で囲みます。この文法はJabRef特有のものであり、データベースを保存したときに生成される<em>bibtex</em>のものとは若干異なります。文字列は、既定で標準のBibTeXフィールドすべてで使用することができ、<b>設定→一般→ファイル</b>で非標準のフィールドでも文字列を有効にすることができます。後者の場合は、文字列解決から除外するフィールドを指定することができ、ここには「url」フィールドや、その他「#」文字を入れる必要がありBibTeX/LaTeXで処理される可能性のあるフィールドを含めておくことをお勧めします。</p>
-
-    <p>文字列は、参照される文字列が参照する文字列の<em>前に</em>定義されている限り、他の文字列の内容を同じように参照することができます。</p>
-
-    <p>BibTeXファイル中の文字列の順序は場合により重要ですが、JabRefを使用している場合には、その心配をする必要はありません。文字列エディタでは、文字列はアルファベット順に表示され、同じ順序で保存されますが、BibTeXが異なる順序を要求する場合には調整されます。</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+    <h1>文字列エディタ</h1>
+
+    <p><em>これは、基本ウィンドウから<b>BibTeX→文字列を編集</b>かツールバーボタンを押すことで開きます。</em></p>
+
+    <p><em>文字列</em>は、<em>bibtex</em>においてプログラミング言語の定数と同じ役割を果たします。各文字列は、重複のない<em>名称</em>と<em>内容</em>とで定義されます。この名称は、データベースの他の場所で内容を表すものとして使用することができます。</p>
+
+    <p>例えば、多くの項目が「J. Theor. Biol.」(Journal of Theroretical Biology)のように、短縮形を覚えるのが難しい学術誌からのものである場合、この学術誌の名称を表すものとしてJTBという文字列を定義することができます。各項目ごとに正確な学術誌名を繰り返す代わりに、それぞれの<em>journal</em>フィールドに「#JTB#」という文字を入れれば、毎回正確に同じ学術誌名が書き込まれるようにすることができます。</p>
+
+    <p>文字列への参照はフィールド中どこでも使用することができ、文字列の名称を必ず「#」文字の対で囲みます。この文法はJabRef特有のものであり、データベースを保存したときに生成される<em>bibtex</em>のものとは若干異なります。文字列は、既定で標準のBibTeXフィールドすべてで使用することができ、<b>設定→一般→ファイル</b>で非標準のフィールドでも文字列を有効にすることができます。後者の場合は、文字列解決から除外するフィールドを指定することができ、ここには「url」フィールドや、その他「#」文字を入れる必要がありBibTeX/LaTeXで処理される可能性のあるフィールドを含めておくことをお勧めします。</p>
+
+    <p>文字列は、参照される文字列が参照する文字列の<em>前に</em>定義されている限り、他の文字列の内容を同じように参照することができます。</p>
+
+    <p>BibTeXファイル中の文字列の順序は場合により重要ですが、JabRefを使用している場合には、その心配をする必要はありません。文字列エディタでは、文字列はアルファベット順に表示され、同じ順序で保存されますが、BibTeXが異なる順序を要求する場合には調整されます。</p>
+</body>
+</html>
diff --git a/src/help/ja/TimeStampHelp.html b/src/help/ja/TimeStampHelp.html
index da9a7dc..dd9cda4 100644
--- a/src/help/ja/TimeStampHelp.html
+++ b/src/help/ja/TimeStampHelp.html
@@ -1,45 +1,45 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-</head>
-
-<body>
-
-    <h1>項目の時間スタンプ</h1>
-
-    <p>この機能は、<b>オプション→設定→一般</b>で入切したり設定したりすることができます。</p>
-
-    <p>JabRefでは、データベースに項目が加えられた日付を、フィールドに自動的に入れるようにすることができます。</p>
-
-    <h2>整形</h2>
-
-    <p>時間スタンプの整形は、日付の各部分の位置を示す指示文字を含む文字列を用いて指定します。</p>
-
-    <p>以下は、使用できる指示文字の一部です(括弧中の部分は2005年9月14日水曜日午後5時45分の場合の表示例を示します)。</p>
-
-    <ul>
-        <li><b>yy</b>: 西暦 (05)</li>
-
-        <li><b>yyyy</b>: 西暦 (2005)</li>
-
-        <li><b>MM</b>: 月 (09)</li>
-
-        <li><b>dd</b>: 日 (14)</li>
-
-        <li><b>HH</b>: 時 (17)</li>
-
-        <li><b>mm</b>: 分 (45)</li>
-    </ul>
-
-    <p>これらの指示子は区切り文字や空白とともに使用することができます。以下に例を挙げます。</p>
-
-    <ul>
-        <li><b>yyyy/MM/dd</b> は <b>2005/09/14</b> となります。</li>
-
-        <li><b>yy.MM.dd</b> は <b>05.09.14</b> となります。</li>
-
-        <li><b>yyyy/MM/dd HH:mm</b> は <b>2005/09/14 17:45</b> となります。</li>
-    </ul>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+
+<body>
+
+    <h1>項目の時間スタンプ</h1>
+
+    <p>この機能は、<b>オプション→設定→一般</b>で入切したり設定したりすることができます。</p>
+
+    <p>JabRefでは、データベースに項目が加えられた日付を、フィールドに自動的に入れるようにすることができます。</p>
+
+    <h2>整形</h2>
+
+    <p>時間スタンプの整形は、日付の各部分の位置を示す指示文字を含む文字列を用いて指定します。</p>
+
+    <p>以下は、使用できる指示文字の一部です(括弧中の部分は2005年9月14日水曜日午後5時45分の場合の表示例を示します)。</p>
+
+    <ul>
+        <li><b>yy</b>: 西暦 (05)</li>
+
+        <li><b>yyyy</b>: 西暦 (2005)</li>
+
+        <li><b>MM</b>: 月 (09)</li>
+
+        <li><b>dd</b>: 日 (14)</li>
+
+        <li><b>HH</b>: 時 (17)</li>
+
+        <li><b>mm</b>: 分 (45)</li>
+    </ul>
+
+    <p>これらの指示子は区切り文字や空白とともに使用することができます。以下に例を挙げます。</p>
+
+    <ul>
+        <li><b>yyyy/MM/dd</b> は <b>2005/09/14</b> となります。</li>
+
+        <li><b>yy.MM.dd</b> は <b>05.09.14</b> となります。</li>
+
+        <li><b>yyyy/MM/dd HH:mm</b> は <b>2005/09/14 17:45</b> となります。</li>
+    </ul>
+</body>
+</html>
diff --git a/src/help/ja/XMPHelp.html b/src/help/ja/XMPHelp.html
index 987aa2e..c78545a 100644
--- a/src/help/ja/XMPHelp.html
+++ b/src/help/ja/XMPHelp.html
@@ -1,168 +1,168 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-
-    <h1>XMP metadata support in JabRef</h1>
-
-    <p>XMP is a standard created by Adobe Systems for storing
-    metadata (data about data) in files. An well known example for
-    metadata are MP3 tags, which can be used to describe artist,
-    album and song name of a MP3 file. Adding metadata to MP3 helps
-    other people to identify the songs correctly independent of
-    file-name and can provide means for software (MP3 players for
-    instance) to sort and group songs.</p>
-
-    <p>With XMP-support the JabRef team tries to bring the
-    advantages of metadata to the world of reference managers. You
-    can now choose to "Write XMP" metadata in the General Tab of
-    JabRef, which will put all the Bibtex information into the PDF.
-    If you then email this PDF to a collegue she can just drag the
-    file into JabRef and all information that you entered will be
-    available to her.</p>
-
-    <h2>Usage</h2>
-
-    <p>To use the XMP-feature in JabRef you can do the
-    following:</p>
-
-    <ul>
-        <li>To <b>import a single annotated PDF-file</b> that
-        contains XMP you can select "File -> Import into...
-        -> XMP-annotated PDF" or drag the file into the main
-        view.</li>
-
-        <li>To <b>write the bibliographic information to the
-        associated PDF</b> do the following: Double click the entry
-        in the main view, go to the "General" tab and click on
-        "Write XMP".</li>
-
-        <li>If you want <b>to annotate all the PDFs in a given
-        database</b> you can select "Tools -> Write XMP for
-        database"</li>
-
-        <li>To verify if it worked you can open the PDF in Adobe
-        Acrobat and select "File -> Document Properties ->
-        Additional Metadata -> Advanced". In the tree to the
-        right you should see an entry called
-        "http://purl.org/net/bibteXMP". This works only with Adobe
-        Acrobat, not with Adobe Reader.</li>
-
-        <li>If you don't have Adobe Acrobat, you can use
-        <i>pdfinfo</i> instead in order to see the XMP metadata.
-        <i>pdfinfo</i> is part of Xpdf
-        (<code>www.foolabs.com/xpdf</code>) and Poppler
-        (<code>http://poppler.freedesktop.org</code>).</li>
-
-        <li style="list-style: none">
-            <div style="margin-left: 2em">
-                <h2>BibteXmp Fileformat</h2>
-
-                <p>XMP uses a subset of the Resource Description
-                Framework (RDF) to store data. For JabRef a new
-                metadata format is used which maps very closely to
-                BibTeX. Basically all fields and values are turned
-                into nodes of an XML document. Only authors and
-                editors are stored as rdf:Seq-structures, so users
-                of the data can skip the splitting on 'and's. All
-                strings and crossrefs will be resolved in the
-                data.</p>
-
-                <p>The following easy minimal schema is used:</p>
-
-                <ul>
-                    <li>The BibTeX-key is stored as
-                    <code>bibtexkey</code>.</li>
-
-                    <li>The type of the BibTeX-entry is stored as
-                    <code>entrytype</code>.</li>
-
-                    <li><code>author</code> and <code>editor</code>
-                    are encoding as <code>rdf:Seq</code>s where the
-                    individual authors are represented as
-                    <code>rdf:li</code>s.</li>
-
-                    <li>All other fields are saved using their
-                    field-name as is.</li>
-                </ul><br />
-                <br />
-
-
-                <p>The following is an example of the mapping</p>
-                <pre>
- at INPROCEEDINGS{CroAnnHow05,
-  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
-  title = {Effective work practices for floss development: A model and propositions},
-  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
-  year = {2005},
-  owner = {oezbek},
-  timestamp = {2006.05.29},
-  url = {http://james.howison.name/publications.html}
-}
-</pre>will be transformed into
-                <pre>
-<rdf:Description xmlns:bibtex="http://jabref.sourceforge.net/bibteXMP/"
-    bibtex:bibtexkey="CroAnnHow05"
-    bibtex:year="2005"
-    bibtex:title="Effective work practices for floss development: A model and propositions"
-    bibtex:owner="oezbek"
-    bibtex:url="http://james.howison.name/publications.html"
-    bibtex:booktitle="Hawaii International Conference On System Sciences (HICSS)"
-    bibtex:timestamp="2006.05.29">
-        <bibtex:author>
-            <rdf:Seq>
-                <rdf:li>K. Crowston</rdf:li>
-                <rdf:li>H. Annabi</rdf:li>
-                <rdf:li>J. Howison</rdf:li>
-                <rdf:li>C. Masango</rdf:li>
-            </rdf:Seq>
-        </bibtex:author>
-    <bibtex:entrytype>Inproceedings</bibtex:entrytype>
-</rdf:Description>
-</pre>
-
-                <p>Beware of the following caveats if you trying to
-                parse bibteXMP:</p>
-
-                <ul>
-                    <li>In RDF attribute-value pairs can also be
-                    expressed as nodes and vice versa.</li>
-                </ul><br />
-                <br />
-
-
-                <h2>Related Links:</h2>
-
-                <p>Some links about XMP and annotating PDFs:</p>
-
-                <ul>
-                    <li>
-                    <a href="http://freelancepropaganda.com/themp/">
-                    James Howison's blog "Themp---Managing Academic
-                    Papers like MP3s"</a></li>
-
-                    <li>
-                    <a href="http://www.xml.com/pub/a/2004/09/22/xmp.html">
-                    XML.com article about XMP</a></li>
-
-					<li><a href="http://pdfbox.apache.org">PDFBox libraries</a> for PDF
-				    file and metadata handling. They are distributed under the Apache License.</li>
-
-                    <li>
-                    <a href="http://arstechnica.com/civis/viewtopic.php?f=19&t=408429">
-                    Good thread on ArsTechnica discussing the
-                    management of PDFs.</a></li>
-
-                    <li>
-                    <a href="http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart1.pdf">
-                    Adobe XMP Specification</a></li>
-                </ul><br />
-                <br />
-
-            </div>
-        </li>
-    </ul>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+
+    <h1>XMP metadata support in JabRef</h1>
+
+    <p>XMP is a standard created by Adobe Systems for storing
+    metadata (data about data) in files. An well known example for
+    metadata are MP3 tags, which can be used to describe artist,
+    album and song name of a MP3 file. Adding metadata to MP3 helps
+    other people to identify the songs correctly independent of
+    file-name and can provide means for software (MP3 players for
+    instance) to sort and group songs.</p>
+
+    <p>With XMP-support the JabRef team tries to bring the
+    advantages of metadata to the world of reference managers. You
+    can now choose to "Write XMP" metadata in the General Tab of
+    JabRef, which will put all the Bibtex information into the PDF.
+    If you then email this PDF to a collegue she can just drag the
+    file into JabRef and all information that you entered will be
+    available to her.</p>
+
+    <h2>Usage</h2>
+
+    <p>To use the XMP-feature in JabRef you can do the
+    following:</p>
+
+    <ul>
+        <li>To <b>import a single annotated PDF-file</b> that
+        contains XMP you can select "File -> Import into...
+        -> XMP-annotated PDF" or drag the file into the main
+        view.</li>
+
+        <li>To <b>write the bibliographic information to the
+        associated PDF</b> do the following: Double click the entry
+        in the main view, go to the "General" tab and click on
+        "Write XMP".</li>
+
+        <li>If you want <b>to annotate all the PDFs in a given
+        database</b> you can select "Tools -> Write XMP for
+        database"</li>
+
+        <li>To verify if it worked you can open the PDF in Adobe
+        Acrobat and select "File -> Document Properties ->
+        Additional Metadata -> Advanced". In the tree to the
+        right you should see an entry called
+        "http://purl.org/net/bibteXMP". This works only with Adobe
+        Acrobat, not with Adobe Reader.</li>
+
+        <li>If you don't have Adobe Acrobat, you can use
+        <i>pdfinfo</i> instead in order to see the XMP metadata.
+        <i>pdfinfo</i> is part of Xpdf
+        (<code>www.foolabs.com/xpdf</code>) and Poppler
+        (<code>http://poppler.freedesktop.org</code>).</li>
+
+        <li style="list-style: none">
+            <div style="margin-left: 2em">
+                <h2>BibteXmp Fileformat</h2>
+
+                <p>XMP uses a subset of the Resource Description
+                Framework (RDF) to store data. For JabRef a new
+                metadata format is used which maps very closely to
+                BibTeX. Basically all fields and values are turned
+                into nodes of an XML document. Only authors and
+                editors are stored as rdf:Seq-structures, so users
+                of the data can skip the splitting on 'and's. All
+                strings and crossrefs will be resolved in the
+                data.</p>
+
+                <p>The following easy minimal schema is used:</p>
+
+                <ul>
+                    <li>The BibTeX-key is stored as
+                    <code>bibtexkey</code>.</li>
+
+                    <li>The type of the BibTeX-entry is stored as
+                    <code>entrytype</code>.</li>
+
+                    <li><code>author</code> and <code>editor</code>
+                    are encoding as <code>rdf:Seq</code>s where the
+                    individual authors are represented as
+                    <code>rdf:li</code>s.</li>
+
+                    <li>All other fields are saved using their
+                    field-name as is.</li>
+                </ul><br />
+                <br />
+
+
+                <p>The following is an example of the mapping</p>
+                <pre>
+ at INPROCEEDINGS{CroAnnHow05,
+  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
+  title = {Effective work practices for floss development: A model and propositions},
+  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
+  year = {2005},
+  owner = {oezbek},
+  timestamp = {2006.05.29},
+  url = {http://james.howison.name/publications.html}
+}
+</pre>will be transformed into
+                <pre>
+<rdf:Description xmlns:bibtex="http://jabref.sourceforge.net/bibteXMP/"
+    bibtex:bibtexkey="CroAnnHow05"
+    bibtex:year="2005"
+    bibtex:title="Effective work practices for floss development: A model and propositions"
+    bibtex:owner="oezbek"
+    bibtex:url="http://james.howison.name/publications.html"
+    bibtex:booktitle="Hawaii International Conference On System Sciences (HICSS)"
+    bibtex:timestamp="2006.05.29">
+        <bibtex:author>
+            <rdf:Seq>
+                <rdf:li>K. Crowston</rdf:li>
+                <rdf:li>H. Annabi</rdf:li>
+                <rdf:li>J. Howison</rdf:li>
+                <rdf:li>C. Masango</rdf:li>
+            </rdf:Seq>
+        </bibtex:author>
+    <bibtex:entrytype>Inproceedings</bibtex:entrytype>
+</rdf:Description>
+</pre>
+
+                <p>Beware of the following caveats if you trying to
+                parse bibteXMP:</p>
+
+                <ul>
+                    <li>In RDF attribute-value pairs can also be
+                    expressed as nodes and vice versa.</li>
+                </ul><br />
+                <br />
+
+
+                <h2>Related Links:</h2>
+
+                <p>Some links about XMP and annotating PDFs:</p>
+
+                <ul>
+                    <li>
+                    <a href="http://freelancepropaganda.com/themp/">
+                    James Howison's blog "Themp---Managing Academic
+                    Papers like MP3s"</a></li>
+
+                    <li>
+                    <a href="http://www.xml.com/pub/a/2004/09/22/xmp.html">
+                    XML.com article about XMP</a></li>
+
+					<li><a href="http://pdfbox.apache.org">PDFBox libraries</a> for PDF
+				    file and metadata handling. They are distributed under the Apache License.</li>
+
+                    <li>
+                    <a href="http://arstechnica.com/civis/viewtopic.php?f=19&t=408429">
+                    Good thread on ArsTechnica discussing the
+                    management of PDFs.</a></li>
+
+                    <li>
+                    <a href="http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart1.pdf">
+                    Adobe XMP Specification</a></li>
+                </ul><br />
+                <br />
+
+            </div>
+        </li>
+    </ul>
+</body>
+</html>
diff --git a/src/help/ja/jabref_help.css b/src/help/ja/jabref_help.css
index db832e8..44fd49c 100644
--- a/src/help/ja/jabref_help.css
+++ b/src/help/ja/jabref_help.css
@@ -1,33 +1,73 @@
 /* CSS for JabRef */
 @charset ‘UTF-8′;
 
-body { 
-	font-family: 'ヒラギノ角ゴ Pro W3','Hiragino Kaku Gothic Pro','メイリオ',Meiryo,'MS Pゴシック', Arial, sans-serif; 
-	font-size: 12pt;
+body {
+	font-family: 'ヒラギノ角ゴ Pro W3','Hiragino Kaku Gothic Pro','メイリオ', Meiryo, Osaka, 'MS Pゴシック','MS PGothic', sans-serif;
+	font-size: 13pt;
 	color: #393939;
 	margin: 0px;
-	padding: 20px;
-	padding-left: 50px;
-	background-image: url(/images/JabRef-icon-48.png);
-	background-repeat: no-repeat;
-	background-attachment: fixed;
-	word-break: break-all;
+	padding: 20px 50px;
 }
 
-h1 { font-size: 18pt; background-color: #efefef; padding: 2px 0px; margin-top: 0px; }
-h2 { font-size: 14pt; margin-top: 15px ; margin-bottom: 5px; }
-h3 { font-size: 12pt; margin-top: 10px ; margin-bottom: 5px; }
+h1 {
+	font-size: 19pt;
+	padding: 2px 5px;
+	margin-top: 0px;
 
-p { text-align: justify; margin-top: 0px; margin-bottom: 10px; line-height: 15pt; }
+	color: #3D3C5E;
+	background-color: #D8D4EC;
 
-code { font-family: Courier, monospace; font-size: 12pt; background-color: #FAFAFA; }
+	border-width: 1px;
+	border-style: solid;
+	border-color: #3D3C5E;
+
+}
+
+h2 { font-size: 15pt; margin-top: 15px ; margin-bottom: 5px; color: #3D3C5E; }
+h3 { font-size: 13pt; margin-top: 10px ; margin-bottom: 5px; }
+
+p { text-align: justify; margin-top: 0px; margin-bottom: 10px; line-height: 16pt; }
+
+code { font-family: Courier, monospace; font-size: 13pt; background-color: #f3f2fa; }
 
 ul, dl { margin-top: 0px; }
-li, dd { text-align: justify; margin-top: 0px; margin-bottom: 3px; } 
+li, dd { text-align: justify; margin-top: 0px; margin-bottom: 3px; }
 
 ul { margin-left: 10px; }
 
-blockquote { background-color: #FAFAFA; border: 1px solid #EFEFEF; padding: 5px; }
+blockquote { background-color: #f3f2fa; padding: 5px; }
+
+a, a:visited { text-decoration: underline; color: #4f5f8f; }
 
+#aboutpage { text-align: center; }
+#logo { margin-bottom: 10px; }
 
+.withRuby {
+    display: inline-block;
+    position: relative;
+    top: -1em;
+    left: 0;
+    margin: 0;
+    padding: 0;
+    border: none;
+    white-space: nowrap;
+    text-indent: 0;
+    line-height: 100%;
+    vertical-align: text-bottom;
+    text-align: center;
+    text-decoration: none;
+    }
 
+.withRuby:after {
+    display: block;
+    margin: -3em 0 0;
+    padding: 0;
+    border: none;
+    white-space: nowrap;
+    font: inherit;
+    font-size: 50%;
+    line-height: 100%;
+    text-decoration: none;
+    text-align: center;
+    content: attr(title);
+    }
\ No newline at end of file
diff --git a/src/help/jgoodies.html b/src/help/jgoodies.html
index f201c22..8fb74d3 100644
--- a/src/help/jgoodies.html
+++ b/src/help/jgoodies.html
@@ -1,46 +1,46 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
-</head>
-
-<body>
-    <h1>JGoodies</h1>
-
-    Copyright (c) 2002-2012 JGoodies Karsten Lentzsch. All Rights
-    Reserved. 
-
-    <p>Redistribution and use in source and binary forms, with or
-    without modification, are permitted provided that the following
-    conditions are met:</p>
-
-    <ul>
-        <li>Redistributions of source code must retain the above
-        copyright notice, this list of conditions and the following
-        disclaimer.</li>
-
-        <li>Redistributions in binary form must reproduce the above
-        copyright notice, this list of conditions and the following
-        disclaimer in the documentation and/or other materials
-        provided with the distribution.</li>
-
-        <li>Neither the name of JGoodies Karsten Lentzsch nor the
-        names of its contributors may be used to endorse or promote
-        products derived from this software without specific prior
-        written permission.</li>
-    </ul>
-
-    <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-    CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
-    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-    EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-</body>
-</html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" type="text/css" href="jabref_help.css"/>
+</head>
+
+<body>
+    <h1>JGoodies</h1>
+
+    Copyright (c) 2002-2012 JGoodies Karsten Lentzsch. All Rights
+    Reserved. 
+
+    <p>Redistribution and use in source and binary forms, with or
+    without modification, are permitted provided that the following
+    conditions are met:</p>
+
+    <ul>
+        <li>Redistributions of source code must retain the above
+        copyright notice, this list of conditions and the following
+        disclaimer.</li>
+
+        <li>Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials
+        provided with the distribution.</li>
+
+        <li>Neither the name of JGoodies Karsten Lentzsch nor the
+        names of its contributors may be used to endorse or promote
+        products derived from this software without specific prior
+        written permission.</li>
+    </ul>
+
+    <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+    CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+    EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
+</body>
+</html>
diff --git a/src/images/JabRef-icon-mac.svg b/src/images/JabRef-icon-mac.svg
index 9269439..011a7e3 100644
--- a/src/images/JabRef-icon-mac.svg
+++ b/src/images/JabRef-icon-mac.svg
@@ -1,59 +1,59 @@
-<?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://web.resource.org/cc/" 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="48" height="48" id="svg2" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docbase="/Us [...]
-  <defs id="defs4">
-    <linearGradient id="linearGradient3183">
-      <stop style="stop-color:#4f5f8f;stop-opacity:1;" offset="0" id="stop3185"/>
-      <stop style="stop-color:#3a4669;stop-opacity:1;" offset="1" id="stop3187"/>
-    </linearGradient>
-    <linearGradient id="linearGradient3167">
-      <stop id="stop3169" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
-      <stop id="stop3171" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
-    </linearGradient>
-    <linearGradient id="linearGradient2915">
-      <stop id="stop2917" offset="0" style="stop-color:white;stop-opacity:1;"/>
-      <stop id="stop2919" offset="1" style="stop-color:#dadce0;stop-opacity:1;"/>
-    </linearGradient>
-    <linearGradient id="linearGradient2909">
-      <stop id="stop2911" offset="0" style="stop-color:white;stop-opacity:1;"/>
-      <stop id="stop2913" offset="1" style="stop-color:#cfd1d7;stop-opacity:1;"/>
-    </linearGradient>
-    <linearGradient id="linearGradient2897">
-      <stop style="stop-color:#dadee7;stop-opacity:1;" offset="0" id="stop2899"/>
-      <stop style="stop-color:#1e68c6;stop-opacity:1;" offset="1" id="stop2901"/>
-    </linearGradient>
-    <linearGradient id="linearGradient2889">
-      <stop style="stop-color:#e0e4ee;stop-opacity:1;" offset="0" id="stop2891"/>
-      <stop style="stop-color:#e0e4ee;stop-opacity:0;" offset="1" id="stop2893"/>
-    </linearGradient>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2915" id="linearGradient2971" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.115225,0,0,1,-1.889007,46.1244)" x1="329.18756" y1="289.87192" x2="598.66205" y2="548.62866"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2909" id="linearGradient2974" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.082601,0,0,1,-1.374219,40)" x1="145.45497" y1="332.74286" x2="326.12537" y2="576.18854"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2909" id="linearGradient2983" gradientUnits="userSpaceOnUse" gradientTransform="matrix(8.119652e-2,0,0,7.966468e-2,422.1323,954.272)" x1="145.45497" y1="332.74286" x2="326.12537" y2="576.18854"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2915" id="linearGradient2985" gradientUnits="userSpaceOnUse" gradientTransform="matrix(8.119652e-2,0,0,7.966468e-2,424.2434,954.7598)" x1="329.18756" y1="289.87192" x2="598.66205" y2="548.62866"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2909" id="linearGradient3878" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.824753e-2,0,0,3.538487e-2,403.2956,1005.814)" x1="145.45497" y1="332.74286" x2="326.12537" y2="576.18854"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2915" id="linearGradient3880" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.863231e-2,4.140938e-3,-3.672702e-3,3.351102e-2,404.9189,1005.265)" x1="329.18756" y1="289.87192" x2="598.66205" y2="548.62866"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3167" id="linearGradient3165" x1="413.51489" y1="1009.7088" x2="418.98639" y2="1030.8461" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.1676489,0,0,1.0769432,-42.634492,-73.039372)"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3167" id="linearGradient3181" x1="405.51611" y1="1009.0013" x2="412.79776" y2="1017.7543" gradientUnits="userSpaceOnUse"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3183" id="linearGradient3189" x1="403.69495" y1="1008.1696" x2="426.66931" y2="1033.0624" gradientUnits="userSpaceOnUse"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3167" id="linearGradient3217" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.1676489,0,0,1.0769432,-60.486221,-72.099807)" x1="413.51489" y1="1009.7088" x2="418.98639" y2="1030.8461"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3167" id="linearGradient3219" gradientUnits="userSpaceOnUse" x1="405.51611" y1="1009.0013" x2="412.79776" y2="1017.7543" gradientTransform="matrix(1.7988326,0,0,1.7988326,-724.41667,-1811.5399)"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2915" id="linearGradient3221" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6.9493059e-2,7.4488542e-3,-6.6065761e-3,6.0280715e-2,3.9646274,-3.2364708)" x1="329.18756" y1="289.87192" x2="598.66205" y2="548.62866"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2909" id="linearGradient3223" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6.8800903e-2,0,0,6.3651458e-2,1.0445825,-2.2489117)" x1="145.45497" y1="332.74286" x2="326.12537" y2="576.18854"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3183" id="linearGradient3225" gradientUnits="userSpaceOnUse" x1="403.69495" y1="1008.1696" x2="426.66931" y2="1033.0624" gradientTransform="matrix(1.7988326,0,0,1.7988326,-724.41667,-1811.5399)"/>
-  </defs>
-  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="50" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="5.3216135" inkscape:cx="38.815775" inkscape:cy="21.291729" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:guide-bbox="false" showguides="true" inkscape:window-width="1118" inkscape:window-height="800" inkscape:window-x="0" inkscape: [...]
-  <metadata id="metadata7">
-    <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="Layer 1" inkscape:groupmode="layer" id="layer1">
-    <rect style="opacity:1;fill:url(#linearGradient3225);fill-opacity:1" id="rect2184" width="44.9123" height="44.777832" x="1.7629348" y="1.9884412" inkscape:export-xdpi="173.03" inkscape:export-ydpi="173.03" inkscape:export-filename="/home/alver/div/smalltheme/jabrefIkon-48.png" ry="5.0703583"/>
-    <path style="fill:url(#linearGradient3223);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 9.230458,6.042987 C 14.734544,6.042987 19.283468,6.1753811 19.283468,6.1753811 C 19.283468,6.1753811 24.803851,10.308919 21.946441,34.112871 C 21.123493,38.723638 17.071461,42.817062 12.120427,42.817062 C 7.1693556,42.817062 4.3251315,39.89288 4.3251315,36.482293 C 9.4349678,38.791815 13.223794,37.622933 14.544767,37 [...]
-    <path style="fill:url(#linearGradient3221);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05348015px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 23.393566,6.0886773 C 36.731928,6.7477697 46.75263,17.557136 33.602104,24.722605 C 29.911636,27.055511 39.058934,38.657261 42.60508,43.909313 C 33.547329,40.892132 25.628364,31.6634 26.201311,25.390871 C 26.584264,20.852056 33.99263,21.159118 34.298737,18.36607 C 34.604827,15.573203 29.431546,15.86983 23.393 [...]
-    <path style="opacity:0.71111115;fill:url(#linearGradient3219);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 2.416732,36.468262 C 2.1420683,34.306425 1.8027545,27.329653 1.7829493,20.312407 C 1.7631442,13.294981 0.060980919,7.0555498 3.0662725,3.5749887 C 6.0762591,0.089031076 14.405519,2.018279 22.367854,2.0531764 C 30.330189,2.0882535 38.094615,2.0878938 40.143881,2.2639995 C 42.187661,2.4397454 19.2027 [...]
-  </g>
+<?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://web.resource.org/cc/" 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="48" height="48" id="svg2" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docbase="/Us [...]
+  <defs id="defs4">
+    <linearGradient id="linearGradient3183">
+      <stop style="stop-color:#4f5f8f;stop-opacity:1;" offset="0" id="stop3185"/>
+      <stop style="stop-color:#3a4669;stop-opacity:1;" offset="1" id="stop3187"/>
+    </linearGradient>
+    <linearGradient id="linearGradient3167">
+      <stop id="stop3169" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
+      <stop id="stop3171" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
+    </linearGradient>
+    <linearGradient id="linearGradient2915">
+      <stop id="stop2917" offset="0" style="stop-color:white;stop-opacity:1;"/>
+      <stop id="stop2919" offset="1" style="stop-color:#dadce0;stop-opacity:1;"/>
+    </linearGradient>
+    <linearGradient id="linearGradient2909">
+      <stop id="stop2911" offset="0" style="stop-color:white;stop-opacity:1;"/>
+      <stop id="stop2913" offset="1" style="stop-color:#cfd1d7;stop-opacity:1;"/>
+    </linearGradient>
+    <linearGradient id="linearGradient2897">
+      <stop style="stop-color:#dadee7;stop-opacity:1;" offset="0" id="stop2899"/>
+      <stop style="stop-color:#1e68c6;stop-opacity:1;" offset="1" id="stop2901"/>
+    </linearGradient>
+    <linearGradient id="linearGradient2889">
+      <stop style="stop-color:#e0e4ee;stop-opacity:1;" offset="0" id="stop2891"/>
+      <stop style="stop-color:#e0e4ee;stop-opacity:0;" offset="1" id="stop2893"/>
+    </linearGradient>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2915" id="linearGradient2971" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.115225,0,0,1,-1.889007,46.1244)" x1="329.18756" y1="289.87192" x2="598.66205" y2="548.62866"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2909" id="linearGradient2974" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.082601,0,0,1,-1.374219,40)" x1="145.45497" y1="332.74286" x2="326.12537" y2="576.18854"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2909" id="linearGradient2983" gradientUnits="userSpaceOnUse" gradientTransform="matrix(8.119652e-2,0,0,7.966468e-2,422.1323,954.272)" x1="145.45497" y1="332.74286" x2="326.12537" y2="576.18854"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2915" id="linearGradient2985" gradientUnits="userSpaceOnUse" gradientTransform="matrix(8.119652e-2,0,0,7.966468e-2,424.2434,954.7598)" x1="329.18756" y1="289.87192" x2="598.66205" y2="548.62866"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2909" id="linearGradient3878" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.824753e-2,0,0,3.538487e-2,403.2956,1005.814)" x1="145.45497" y1="332.74286" x2="326.12537" y2="576.18854"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2915" id="linearGradient3880" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.863231e-2,4.140938e-3,-3.672702e-3,3.351102e-2,404.9189,1005.265)" x1="329.18756" y1="289.87192" x2="598.66205" y2="548.62866"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3167" id="linearGradient3165" x1="413.51489" y1="1009.7088" x2="418.98639" y2="1030.8461" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.1676489,0,0,1.0769432,-42.634492,-73.039372)"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3167" id="linearGradient3181" x1="405.51611" y1="1009.0013" x2="412.79776" y2="1017.7543" gradientUnits="userSpaceOnUse"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3183" id="linearGradient3189" x1="403.69495" y1="1008.1696" x2="426.66931" y2="1033.0624" gradientUnits="userSpaceOnUse"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3167" id="linearGradient3217" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.1676489,0,0,1.0769432,-60.486221,-72.099807)" x1="413.51489" y1="1009.7088" x2="418.98639" y2="1030.8461"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3167" id="linearGradient3219" gradientUnits="userSpaceOnUse" x1="405.51611" y1="1009.0013" x2="412.79776" y2="1017.7543" gradientTransform="matrix(1.7988326,0,0,1.7988326,-724.41667,-1811.5399)"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2915" id="linearGradient3221" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6.9493059e-2,7.4488542e-3,-6.6065761e-3,6.0280715e-2,3.9646274,-3.2364708)" x1="329.18756" y1="289.87192" x2="598.66205" y2="548.62866"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient2909" id="linearGradient3223" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6.8800903e-2,0,0,6.3651458e-2,1.0445825,-2.2489117)" x1="145.45497" y1="332.74286" x2="326.12537" y2="576.18854"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3183" id="linearGradient3225" gradientUnits="userSpaceOnUse" x1="403.69495" y1="1008.1696" x2="426.66931" y2="1033.0624" gradientTransform="matrix(1.7988326,0,0,1.7988326,-724.41667,-1811.5399)"/>
+  </defs>
+  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="50" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="5.3216135" inkscape:cx="38.815775" inkscape:cy="21.291729" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:guide-bbox="false" showguides="true" inkscape:window-width="1118" inkscape:window-height="800" inkscape:window-x="0" inkscape: [...]
+  <metadata id="metadata7">
+    <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="Layer 1" inkscape:groupmode="layer" id="layer1">
+    <rect style="opacity:1;fill:url(#linearGradient3225);fill-opacity:1" id="rect2184" width="44.9123" height="44.777832" x="1.7629348" y="1.9884412" inkscape:export-xdpi="173.03" inkscape:export-ydpi="173.03" inkscape:export-filename="/home/alver/div/smalltheme/jabrefIkon-48.png" ry="5.0703583"/>
+    <path style="fill:url(#linearGradient3223);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 9.230458,6.042987 C 14.734544,6.042987 19.283468,6.1753811 19.283468,6.1753811 C 19.283468,6.1753811 24.803851,10.308919 21.946441,34.112871 C 21.123493,38.723638 17.071461,42.817062 12.120427,42.817062 C 7.1693556,42.817062 4.3251315,39.89288 4.3251315,36.482293 C 9.4349678,38.791815 13.223794,37.622933 14.544767,37 [...]
+    <path style="fill:url(#linearGradient3221);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05348015px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 23.393566,6.0886773 C 36.731928,6.7477697 46.75263,17.557136 33.602104,24.722605 C 29.911636,27.055511 39.058934,38.657261 42.60508,43.909313 C 33.547329,40.892132 25.628364,31.6634 26.201311,25.390871 C 26.584264,20.852056 33.99263,21.159118 34.298737,18.36607 C 34.604827,15.573203 29.431546,15.86983 23.393 [...]
+    <path style="opacity:0.71111115;fill:url(#linearGradient3219);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 2.416732,36.468262 C 2.1420683,34.306425 1.8027545,27.329653 1.7829493,20.312407 C 1.7631442,13.294981 0.060980919,7.0555498 3.0662725,3.5749887 C 6.0762591,0.089031076 14.405519,2.018279 22.367854,2.0531764 C 30.330189,2.0882535 38.094615,2.0878938 40.143881,2.2639995 C 42.187661,2.4397454 19.2027 [...]
+  </g>
 </svg>
\ No newline at end of file
diff --git a/src/images/JabRef-icon.svg b/src/images/JabRef-icon.svg
index 1204858..a41263e 100644
--- a/src/images/JabRef-icon.svg
+++ b/src/images/JabRef-icon.svg
@@ -1,207 +1,207 @@
-<?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://web.resource.org/cc/"
-   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="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.44"
-   sodipodi:docbase="/home/alver/Documents"
-   sodipodi:docname="jabrefIkon.svg">
-  <defs
-     id="defs4">
-    <linearGradient
-       id="linearGradient2915">
-      <stop
-         id="stop2917"
-         offset="0"
-         style="stop-color:white;stop-opacity:1;" />
-      <stop
-         id="stop2919"
-         offset="1"
-         style="stop-color:#dadce0;stop-opacity:1;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2909">
-      <stop
-         id="stop2911"
-         offset="0"
-         style="stop-color:white;stop-opacity:1;" />
-      <stop
-         id="stop2913"
-         offset="1"
-         style="stop-color:#cfd1d7;stop-opacity:1;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2897">
-      <stop
-         style="stop-color:#dadee7;stop-opacity:1;"
-         offset="0"
-         id="stop2899" />
-      <stop
-         style="stop-color:#1e68c6;stop-opacity:1;"
-         offset="1"
-         id="stop2901" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2889">
-      <stop
-         style="stop-color:#e0e4ee;stop-opacity:1;"
-         offset="0"
-         id="stop2891" />
-      <stop
-         style="stop-color:#e0e4ee;stop-opacity:0;"
-         offset="1"
-         id="stop2893" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2915"
-       id="linearGradient2971"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.115225,0,0,1,-1.889007,46.1244)"
-       x1="329.18756"
-       y1="289.87192"
-       x2="598.66205"
-       y2="548.62866" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2909"
-       id="linearGradient2974"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.082601,0,0,1,-1.374219,40)"
-       x1="145.45497"
-       y1="332.74286"
-       x2="326.12537"
-       y2="576.18854" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2909"
-       id="linearGradient2983"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(8.119652e-2,0,0,7.966468e-2,422.1323,954.272)"
-       x1="145.45497"
-       y1="332.74286"
-       x2="326.12537"
-       y2="576.18854" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2915"
-       id="linearGradient2985"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(8.119652e-2,0,0,7.966468e-2,424.2434,954.7598)"
-       x1="329.18756"
-       y1="289.87192"
-       x2="598.66205"
-       y2="548.62866" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2909"
-       id="linearGradient3878"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(3.824753e-2,0,0,3.538487e-2,403.2956,1005.814)"
-       x1="145.45497"
-       y1="332.74286"
-       x2="326.12537"
-       y2="576.18854" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2915"
-       id="linearGradient3880"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(3.863231e-2,4.140938e-3,-3.672702e-3,3.351102e-2,404.9189,1005.265)"
-       x1="329.18756"
-       y1="289.87192"
-       x2="598.66205"
-       y2="548.62866" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     gridtolerance="50"
-     guidetolerance="10"
-     objecttolerance="10"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="21.286454"
-     inkscape:cx="416.46054"
-     inkscape:cy="31.511436"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:guide-bbox="false"
-     showguides="true"
-     inkscape:window-width="1118"
-     inkscape:window-height="944"
-     inkscape:window-x="0"
-     inkscape:window-y="0" />
-  <metadata
-     id="metadata7">
-    <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="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <rect
-       style="opacity:1;fill:#4f5f8f;fill-opacity:1"
-       id="rect2905"
-       width="716.55713"
-       height="730.3371"
-       x="10.717734"
-       y="89.297173" />
-    <path
-       style="fill:url(#linearGradient2974);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 122.04224,150.95548 C 208.65029,150.95548 286.97046,184.73542 286.97046,184.73542 C 286.97046,184.73542 372.48612,237.27117 327.52453,611.24332 C 314.57556,683.68157 250.81542,747.98797 172.90939,747.98797 C 95.003363,747.98797 50.24884,702.05483 50.24884,648.46615 C 119.867,694.3993 168.69957,681.54848 189.48514,672.96384 C 199.45516,668.84613 251.63441,636.1731 257.44572,548.94433 C 264.07602,449.42251 247.50026,297.84312 122.04224,150.95548 z "
-       id="path1972"
-       sodipodi:nodetypes="cccscssc" />
-    <path
-       style="fill:url(#linearGradient2971);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05348015px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 322.49657,164.88378 C 533.15821,196.83799 712.94701,311.87314 516.81377,452.47165 C 462.33232,497.20754 627.59274,671.35798 692.97048,751.2435 C 544.0545,717.69157 402.40271,580.28849 400.58666,476.43731 C 398.77062,401.34492 516.81377,393.35637 516.81377,347.02276 C 516.81377,300.68916 344.28916,262.34411 322.49657,164.88378 z "
-       id="path1993"
-       sodipodi:nodetypes="cccc" />
-    <rect
-       style="opacity:1;fill:#4f5f8f;fill-opacity:1"
-       id="rect3872"
-       width="24.96747"
-       height="24.892717"
-       x="403.74191"
-       y="1008.134"
-       inkscape:export-xdpi="173.03"
-       inkscape:export-ydpi="173.03"
-       inkscape:export-filename="/home/alver/div/smalltheme/jabrefIkon-48.png" />
-    <path
-       style="fill:url(#linearGradient3878);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 407.84626,1010.4236 C 410.90607,1010.4236 413.43489,1010.4972 413.43489,1010.4972 C 413.43489,1010.4972 416.50376,1012.7951 414.91528,1026.0281 C 414.45779,1028.5913 412.2052,1030.8669 409.45284,1030.8669 C 406.70046,1030.8669 405.11931,1029.2413 405.11931,1027.3453 C 407.95995,1028.6292 410.06622,1027.9794 410.80057,1027.6755 C 411.15281,1027.5298 412.46165,1026.9172 412.43944,1023.8236 C 412.38788,1016.6442 413.08837,1015.0847 407.84626,1010.4236 z "
-       id="path3874"
-       sodipodi:nodetypes="cccscssc"
-       inkscape:export-filename="/home/alver/div/smalltheme/jabrefIkon-48.png"
-       inkscape:export-xdpi="173.03"
-       inkscape:export-ydpi="173.03" />
-    <path
-       style="fill:url(#linearGradient3880);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05348015px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 415.71976,1010.449 C 423.13477,1010.8154 428.70544,1016.8245 421.39485,1020.8079 C 419.34326,1022.1048 424.42839,1028.5544 426.39975,1031.4741 C 421.3644,1029.7968 416.96212,1024.6664 417.28063,1021.1794 C 417.49352,1018.6562 421.61195,1018.8269 421.78212,1017.2742 C 421.95228,1015.7216 419.07637,1015.8865 415.71976,1010.449 z "
-       id="path3876"
-       sodipodi:nodetypes="ccccsc"
-       inkscape:export-filename="/home/alver/div/smalltheme/jabrefIkon-48.png"
-       inkscape:export-xdpi="173.03"
-       inkscape:export-ydpi="173.03" />
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   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="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.44"
+   sodipodi:docbase="/home/alver/Documents"
+   sodipodi:docname="jabrefIkon.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient2915">
+      <stop
+         id="stop2917"
+         offset="0"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         id="stop2919"
+         offset="1"
+         style="stop-color:#dadce0;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2909">
+      <stop
+         id="stop2911"
+         offset="0"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         id="stop2913"
+         offset="1"
+         style="stop-color:#cfd1d7;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2897">
+      <stop
+         style="stop-color:#dadee7;stop-opacity:1;"
+         offset="0"
+         id="stop2899" />
+      <stop
+         style="stop-color:#1e68c6;stop-opacity:1;"
+         offset="1"
+         id="stop2901" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2889">
+      <stop
+         style="stop-color:#e0e4ee;stop-opacity:1;"
+         offset="0"
+         id="stop2891" />
+      <stop
+         style="stop-color:#e0e4ee;stop-opacity:0;"
+         offset="1"
+         id="stop2893" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2915"
+       id="linearGradient2971"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.115225,0,0,1,-1.889007,46.1244)"
+       x1="329.18756"
+       y1="289.87192"
+       x2="598.66205"
+       y2="548.62866" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2909"
+       id="linearGradient2974"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.082601,0,0,1,-1.374219,40)"
+       x1="145.45497"
+       y1="332.74286"
+       x2="326.12537"
+       y2="576.18854" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2909"
+       id="linearGradient2983"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(8.119652e-2,0,0,7.966468e-2,422.1323,954.272)"
+       x1="145.45497"
+       y1="332.74286"
+       x2="326.12537"
+       y2="576.18854" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2915"
+       id="linearGradient2985"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(8.119652e-2,0,0,7.966468e-2,424.2434,954.7598)"
+       x1="329.18756"
+       y1="289.87192"
+       x2="598.66205"
+       y2="548.62866" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2909"
+       id="linearGradient3878"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.824753e-2,0,0,3.538487e-2,403.2956,1005.814)"
+       x1="145.45497"
+       y1="332.74286"
+       x2="326.12537"
+       y2="576.18854" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2915"
+       id="linearGradient3880"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.863231e-2,4.140938e-3,-3.672702e-3,3.351102e-2,404.9189,1005.265)"
+       x1="329.18756"
+       y1="289.87192"
+       x2="598.66205"
+       y2="548.62866" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="50"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="21.286454"
+     inkscape:cx="416.46054"
+     inkscape:cy="31.511436"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:guide-bbox="false"
+     showguides="true"
+     inkscape:window-width="1118"
+     inkscape:window-height="944"
+     inkscape:window-x="0"
+     inkscape:window-y="0" />
+  <metadata
+     id="metadata7">
+    <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="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <rect
+       style="opacity:1;fill:#4f5f8f;fill-opacity:1"
+       id="rect2905"
+       width="716.55713"
+       height="730.3371"
+       x="10.717734"
+       y="89.297173" />
+    <path
+       style="fill:url(#linearGradient2974);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 122.04224,150.95548 C 208.65029,150.95548 286.97046,184.73542 286.97046,184.73542 C 286.97046,184.73542 372.48612,237.27117 327.52453,611.24332 C 314.57556,683.68157 250.81542,747.98797 172.90939,747.98797 C 95.003363,747.98797 50.24884,702.05483 50.24884,648.46615 C 119.867,694.3993 168.69957,681.54848 189.48514,672.96384 C 199.45516,668.84613 251.63441,636.1731 257.44572,548.94433 C 264.07602,449.42251 247.50026,297.84312 122.04224,150.95548 z "
+       id="path1972"
+       sodipodi:nodetypes="cccscssc" />
+    <path
+       style="fill:url(#linearGradient2971);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05348015px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 322.49657,164.88378 C 533.15821,196.83799 712.94701,311.87314 516.81377,452.47165 C 462.33232,497.20754 627.59274,671.35798 692.97048,751.2435 C 544.0545,717.69157 402.40271,580.28849 400.58666,476.43731 C 398.77062,401.34492 516.81377,393.35637 516.81377,347.02276 C 516.81377,300.68916 344.28916,262.34411 322.49657,164.88378 z "
+       id="path1993"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       style="opacity:1;fill:#4f5f8f;fill-opacity:1"
+       id="rect3872"
+       width="24.96747"
+       height="24.892717"
+       x="403.74191"
+       y="1008.134"
+       inkscape:export-xdpi="173.03"
+       inkscape:export-ydpi="173.03"
+       inkscape:export-filename="/home/alver/div/smalltheme/jabrefIkon-48.png" />
+    <path
+       style="fill:url(#linearGradient3878);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 407.84626,1010.4236 C 410.90607,1010.4236 413.43489,1010.4972 413.43489,1010.4972 C 413.43489,1010.4972 416.50376,1012.7951 414.91528,1026.0281 C 414.45779,1028.5913 412.2052,1030.8669 409.45284,1030.8669 C 406.70046,1030.8669 405.11931,1029.2413 405.11931,1027.3453 C 407.95995,1028.6292 410.06622,1027.9794 410.80057,1027.6755 C 411.15281,1027.5298 412.46165,1026.9172 412.43944,1023.8236 C 412.38788,1016.6442 413.08837,1015.0847 407.84626,1010.4236 z "
+       id="path3874"
+       sodipodi:nodetypes="cccscssc"
+       inkscape:export-filename="/home/alver/div/smalltheme/jabrefIkon-48.png"
+       inkscape:export-xdpi="173.03"
+       inkscape:export-ydpi="173.03" />
+    <path
+       style="fill:url(#linearGradient3880);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05348015px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 415.71976,1010.449 C 423.13477,1010.8154 428.70544,1016.8245 421.39485,1020.8079 C 419.34326,1022.1048 424.42839,1028.5544 426.39975,1031.4741 C 421.3644,1029.7968 416.96212,1024.6664 417.28063,1021.1794 C 417.49352,1018.6562 421.61195,1018.8269 421.78212,1017.2742 C 421.95228,1015.7216 419.07637,1015.8865 415.71976,1010.449 z "
+       id="path3876"
+       sodipodi:nodetypes="ccccsc"
+       inkscape:export-filename="/home/alver/div/smalltheme/jabrefIkon-48.png"
+       inkscape:export-xdpi="173.03"
+       inkscape:export-ydpi="173.03" />
+  </g>
+</svg>
diff --git a/src/images/connect_no.png b/src/images/connect_no.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/1downarrow.png b/src/images/crystal_16/1downarrow.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/1leftarrow.png b/src/images/crystal_16/1leftarrow.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/1rightarrow.png b/src/images/crystal_16/1rightarrow.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/1uparrow.png b/src/images/crystal_16/1uparrow.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/Icons.properties b/src/images/crystal_16/Icons.properties
index 48a0be6..6d6e95a 100644
--- a/src/images/crystal_16/Icons.properties
+++ b/src/images/crystal_16/Icons.properties
@@ -1,107 +1,107 @@
-jabrefIcon=JabRef-icon.png
-jabrefIcon48=JabRef-icon-48.png
-#jabrefIcon=ikon.gif
-about=JabRef-icon.png
-
-new=filenew.png
-open=fileopen.png
-loadSession=fileimport.png
-save=filesave.png
-saveAs=filesaveas.png
-saveAll=save_all.png
-copy=editcopy.png
-paste=editpaste.png
-cut=editcut.png
-undo=undo.png
-redo=redo.png
-refresh=reload.png
-left=1leftarrow.png
-right=1rightarrow.png
-up=1uparrow.png
-down=1downarrow.png
-add=edit_add.png
-remove=edit_remove.png
-delete=trash.png
-edit=edit.png
-help=help.png
-helpSmall=help.png
-helpContents=contents2.png
-search=search.png
-incSearch=search.png
-toggleSearch=search.png
-complete=button_ok.png
-wrong=cancel.png
-makeKey=wizard.png
-psSmall=ps.png
-pdfSmall=pdf-document.png
-openFile=pdf-document.png
-openExternalFile=ps.png
-preferences=advancedsettings.png
-openUrl=agt_internet.png
-www=agt_internet.png
-wwwSmall=agt_internet_small.png
-medline=agt_internet.png
-integrityWarn=status_unknown.png
-integrityInfo=documentinfo.png
-integrityFail=gg_ignored.png
-
-togglePreview=text_bottom.png
-toggleGroups=queue.png
-editPreamble=preamble.png
-editStrings=strings.png
-emacs=emacs.png
-vim=vim.png
-openoffice=openoffice.png
-picture=colors.png
-lyx=lyx2.png
-winedt=winedt.png
-required=reqIcon.png
-optional=optIcon.png
-general=genIcon.png
-abstract=absIcon.png
-source=viewsource.gif
-duplicate=duplicate.png
-autoGroup=run.png
-markEntries=mark.png
-unmarkEntries=unmark.png
-citeseer=wwwciteseer.png
-doiSmall=doismall.png
-arxiv=arxiv_16.png
-groupsHighlightAny=groupsHighlightAny.png
-groupsHighlightAll=groupsHighlightAll.png
-close=fileclose.png
-close2=fileclose2.png
-integrityCheck=integrity.png
-groupIncluding=groupIncluding.png
-groupRefining=groupRefining.png
-unknown=help.png
-dbConnect=database_connect.png
-dbExport=database_save.png
-dbImport=database_save.png
-plugin=kwikdisk.png
-cleanupentries=cleanupentries.png
-dragNdropArrow=dragNdropArrow.png
-relevant=relevance.png
-toggleRelevance=relevance.png
-setRelevant=relevance.png
-qualityAssured=button_ok.png
-toggleQualityAssured=button_ok.png
-quality=button_ok.png
-rank1=rank1.png
-rank2=rank2.png
-rank3=rank3.png
-rank4=rank4.png
-rank5=rank5.png
-ranking=ranking.png
-rankc1=rankc1.png
-rankc2=rankc2.png
-rankc3=rankc3.png
-rankc4=rankc4.png
-rankc5=rankc5.png
-priority=priority.png
-red=red.png
-orange=orange.png
-green=green.png
-exportToKeywords=exportToKeywords.png
-importFromKeywords=importFromKeywords.png
-texstudio=texstudio.png
+jabrefIcon=JabRef-icon.png
+jabrefIcon48=JabRef-icon-48.png
+#jabrefIcon=ikon.gif
+about=JabRef-icon.png
+
+new=filenew.png
+open=fileopen.png
+loadSession=fileimport.png
+save=filesave.png
+saveAs=filesaveas.png
+saveAll=save_all.png
+copy=editcopy.png
+paste=editpaste.png
+cut=editcut.png
+undo=undo.png
+redo=redo.png
+refresh=reload.png
+left=1leftarrow.png
+right=1rightarrow.png
+up=1uparrow.png
+down=1downarrow.png
+add=edit_add.png
+remove=edit_remove.png
+delete=trash.png
+edit=edit.png
+help=help.png
+helpSmall=help.png
+helpContents=contents2.png
+search=search.png
+incSearch=search.png
+toggleSearch=search.png
+complete=button_ok.png
+wrong=cancel.png
+makeKey=wizard.png
+psSmall=ps.png
+pdfSmall=pdf-document.png
+openFile=pdf-document.png
+openExternalFile=ps.png
+preferences=advancedsettings.png
+openUrl=agt_internet.png
+www=agt_internet.png
+wwwSmall=agt_internet_small.png
+medline=agt_internet.png
+integrityWarn=status_unknown.png
+integrityInfo=documentinfo.png
+integrityFail=gg_ignored.png
+
+togglePreview=text_bottom.png
+toggleGroups=queue.png
+editPreamble=preamble.png
+editStrings=strings.png
+emacs=emacs.png
+vim=vim.png
+openoffice=openoffice.png
+picture=colors.png
+lyx=lyx2.png
+winedt=winedt.png
+required=reqIcon.png
+optional=optIcon.png
+general=genIcon.png
+abstract=absIcon.png
+source=viewsource.gif
+duplicate=duplicate.png
+autoGroup=run.png
+markEntries=mark.png
+unmarkEntries=unmark.png
+citeseer=wwwciteseer.png
+doiSmall=doismall.png
+arxiv=arxiv_16.png
+groupsHighlightAny=groupsHighlightAny.png
+groupsHighlightAll=groupsHighlightAll.png
+close=fileclose.png
+close2=fileclose2.png
+integrityCheck=integrity.png
+groupIncluding=groupIncluding.png
+groupRefining=groupRefining.png
+unknown=help.png
+dbConnect=database_connect.png
+dbExport=database_save.png
+dbImport=database_save.png
+plugin=kwikdisk.png
+cleanupentries=cleanupentries.png
+dragNdropArrow=dragNdropArrow.png
+relevant=relevance.png
+toggleRelevance=relevance.png
+setRelevant=relevance.png
+qualityAssured=button_ok.png
+toggleQualityAssured=button_ok.png
+quality=button_ok.png
+rank1=rank1.png
+rank2=rank2.png
+rank3=rank3.png
+rank4=rank4.png
+rank5=rank5.png
+ranking=ranking.png
+rankc1=rankc1.png
+rankc2=rankc2.png
+rankc3=rankc3.png
+rankc4=rankc4.png
+rankc5=rankc5.png
+priority=priority.png
+red=red.png
+orange=orange.png
+green=green.png
+exportToKeywords=exportToKeywords.png
+importFromKeywords=importFromKeywords.png
+texstudio=texstudio.png
diff --git a/src/images/crystal_16/advancedsettings.png b/src/images/crystal_16/advancedsettings.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/agt_internet.png b/src/images/crystal_16/agt_internet.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/button_ok.png b/src/images/crystal_16/button_ok.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/cancel.png b/src/images/crystal_16/cancel.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/colors.png b/src/images/crystal_16/colors.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/documentinfo.png b/src/images/crystal_16/documentinfo.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/edit.png b/src/images/crystal_16/edit.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/edit_add.png b/src/images/crystal_16/edit_add.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/edit_remove.png b/src/images/crystal_16/edit_remove.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/editcopy.png b/src/images/crystal_16/editcopy.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/editcut.png b/src/images/crystal_16/editcut.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/editpaste.png b/src/images/crystal_16/editpaste.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/fileimport.png b/src/images/crystal_16/fileimport.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/filenew.png b/src/images/crystal_16/filenew.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/fileopen.png b/src/images/crystal_16/fileopen.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/filesave.png b/src/images/crystal_16/filesave.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/filesaveas.png b/src/images/crystal_16/filesaveas.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/gg_ignored.png b/src/images/crystal_16/gg_ignored.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/help.png b/src/images/crystal_16/help.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/kwikdisk.png b/src/images/crystal_16/kwikdisk.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/openoffice.png b/src/images/crystal_16/openoffice.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/pdf-document.png b/src/images/crystal_16/pdf-document.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/ps.png b/src/images/crystal_16/ps.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/redo.png b/src/images/crystal_16/redo.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/reload.png b/src/images/crystal_16/reload.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/run.png b/src/images/crystal_16/run.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/save_all.png b/src/images/crystal_16/save_all.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/search.png b/src/images/crystal_16/search.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/status_unknown.png b/src/images/crystal_16/status_unknown.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/trash.png b/src/images/crystal_16/trash.png
old mode 100755
new mode 100644
diff --git a/src/images/crystal_16/undo.png b/src/images/crystal_16/undo.png
old mode 100755
new mode 100644
diff --git a/src/images/splash-beta.svg b/src/images/splash-beta.svg
index 4dc56e5..3428867 100644
--- a/src/images/splash-beta.svg
+++ b/src/images/splash-beta.svg
@@ -1,302 +1,302 @@
-<?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"
-   inkscape:export-ydpi="90.000000"
-   inkscape:export-xdpi="90.000000"
-   inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/jabref_splash-2.2.png"
-   sodipodi:docname="splash-release.svg"
-   inkscape:version="0.48.2 r9819"
-   sodipodi:version="0.32"
-   id="svg2138"
-   height="1052.3622047"
-   width="744.09448819"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   version="1.1">
-  <defs
-     id="defs2140">
-    <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="perspective2595" />
-    <linearGradient
-       id="linearGradient2974">
-      <stop
-         style="stop-color:#505b77;stop-opacity:1;"
-         offset="0"
-         id="stop2976" />
-      <stop
-         style="stop-color:#596a97;stop-opacity:1;"
-         offset="1"
-         id="stop2978" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2883">
-      <stop
-         style="stop-color:#c5c1c1;stop-opacity:1;"
-         offset="0"
-         id="stop2885" />
-      <stop
-         style="stop-color:white;stop-opacity:1;"
-         offset="1"
-         id="stop2887" />
-    </linearGradient>
-    <pattern
-       patternTransform="translate(316.0000,1046.362)"
-       id="pattern9054"
-       xlink:href="#pattern9048"
-       inkscape:collect="always" />
-    <marker
-       style="overflow:visible;"
-       id="Arrow2Send"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow2Send">
-      <path
-         transform="scale(0.3) rotate(180) translate(-5,0)"
-         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 "
-         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
-         id="path3046"
-         sodipodi:nodetypes="cccc" />
-    </marker>
-    <pattern
-       id="pattern9048"
-       patternTransform="translate(231.0000,284.3622)"
-       height="428.00000"
-       width="572.00000"
-       patternUnits="userSpaceOnUse">
-      <image
-         sodipodi:absref="/home/alver/jabref/jabref/src/images/behandlet.png"
-         xlink:href="behandlet.png"
-         transform="translate(-231.0000,-284.3622)"
-         style="opacity:1.0000000;stroke:#000000;stroke-width:5.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
-         inkscape:export-ydpi="90.000000"
-         inkscape:export-xdpi="90.000000"
-         inkscape:export-filename="/home/alver/Desktop/bilder/jabref/splash4.png"
-         y="284.36218"
-         x="231.00000"
-         width="572.00000"
-         height="428.00000"
-         id="image9050" />
-    </pattern>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2889"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="linearGradient2909"
-       x1="443.79153"
-       y1="351.89935"
-       x2="602.17139"
-       y2="351.89935"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2796"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2798"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549" />
-  </defs>
-  <sodipodi:namedview
-     inkscape:window-y="31"
-     inkscape:window-x="0"
-     inkscape:window-height="714"
-     inkscape:window-width="1366"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="675.8697"
-     inkscape:cx="238.10531"
-     inkscape:zoom="1"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base"
-     showgrid="false"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata2143">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Layer 1">
-    <rect
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       y="170.36218"
-       x="77.500000"
-       height="432.00000"
-       width="576.00000"
-       id="rect6833"
-       style="opacity:1.0000000;fill:#6b6b75;fill-opacity:1.0000000;stroke:none;stroke-width:5.0000000;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000" />
-    <image
-       sodipodi:absref="/home/alver/jabref/jabref/src/images/splashBackground.png"
-       xlink:href="splashBackground.png"
-       id="image1821"
-       height="428"
-       width="572"
-       x="79"
-       y="172.36218"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75" />
-    <flowRoot
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       style="opacity:1.0000000;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000"
-       transform="matrix(1.875133,0.000000,0.000000,2.542210,-129.6969,-372.8897)"
-       id="flowRoot2189"
-       xml:space="preserve">
-      <flowRegion
-   id="flowRegion2191">
-        <rect
-   style="fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-opacity:1.0000000;stroke-width:0.48137557;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-linejoin:bevel"
-   y="199.10532"
-   x="128.49385"
-   height="127.49445"
-   width="283.51782"
-   id="rect2193" />
-      </flowRegion>
-      <flowPara
-   style="font-size:90.000000px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;font-family:AR PL KaitiM GB"
-   id="flowPara2201">JabRef</flowPara>
-    </flowRoot>    <flowRoot
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       transform="matrix(0.972246,0,0,1.325301,6.054966,-126.1181)"
-       style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
-       id="flowRoot3076"
-       xml:space="preserve"><flowRegion
-         id="flowRegion3078">
-        <rect
-   style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
-   y="514.56494"
-   x="115.50008"
-   height="78.684433"
-   width="506.03476"
-   id="rect3080" />
-      </flowRegion><flowPara
-         id="flowPara1339">This program is distributed under the terms of the General Public License.</flowPara><flowPara
-         id="flowPara1341">Copyright (2003-2012) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       transform="scale(0.853347,1.171856)"
-       sodipodi:linespacing="100%"
-       id="text2179"
-       y="450.75409"
-       x="187.49605"
-       style="font-size:43.99980927px;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;fill:#805b41;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L"
-       xml:space="preserve"><tspan
-         y="450.75409"
-         x="187.49605"
-         id="tspan2181"
-         sodipodi:role="line">JabRef reference manager</tspan></text>
-    <g
-       id="g2867"
-       transform="matrix(1.14435,0,0,1.103688,-34.88143,-26.75429)"
-       style="fill:#3d3d5f;fill-opacity:1;stroke:url(#radialGradient2889);stroke-width:1.99301183;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75">
-      <path
-         inkscape:export-ydpi="57.68"
-         inkscape:export-xdpi="57.68"
-         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
-         sodipodi:nodetypes="cccscssc"
-         id="path3874"
-         d="M 157.96931,200.83693 C 195.68133,200.83693 226.84892,201.74266 226.84892,201.74266 C 226.84892,201.74266 264.67261,230.02095 245.09466,392.86816 C 239.45611,424.41127 211.69305,452.41514 177.77033,452.41514 C 143.84738,452.41514 124.35978,432.41027 124.35978,409.07782 C 159.37053,424.87768 185.33022,416.88114 194.38104,413.14131 C 198.72239,411.3483 214.85378,403.80956 214.58004,365.73926 C 213.94457,277.38853 222.57808,258.1971 157.96931,200.83693 z "
-         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2796);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <path
-         inkscape:export-ydpi="57.68"
-         inkscape:export-xdpi="57.68"
-         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
-         sodipodi:nodetypes="ccccsc"
-         id="path3876"
-         d="M 255.00983,201.1495 C 346.39949,205.65848 415.05774,279.60734 324.95506,328.62763 C 299.6693,344.58746 362.3433,423.95718 386.64022,459.88743 C 324.57976,439.24633 270.32186,376.11089 274.24748,333.19936 C 276.87135,302.14849 327.63081,304.24915 329.72814,285.1414 C 331.82536,266.03489 296.3799,268.06417 255.00983,201.1495 z "
-         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2798);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-size:57.1212616px;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;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Nimbus Sans L"
-       x="462.20135"
-       y="426.2529"
-       id="text2911"
-       sodipodi:linespacing="100%"
-       transform="scale(0.917932,1.089405)"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75"><tspan
-         sodipodi:role="line"
-         id="tspan2913"
-         x="462.20135"
-         y="426.2529"
-         style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Bitstream Vera Sans">2.9</tspan></text>
-    <flowRoot
-       xml:space="preserve"
-       id="flowRoot2745"
-       style="font-size:56px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#f91616;fill-opacity:0.65789472;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold"
-       transform="matrix(0.9688007,-0.2478411,0.2478411,0.9688007,-87.20276,118.59483)"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75"><flowRegion
-         id="flowRegion2747"><rect
-           id="rect2749"
-           width="164"
-           height="68"
-           x="482"
-           y="470.36218"
-           style="font-size:56px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#f91616;fill-opacity:0.65789472;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold" /></flowRegion><flowPara
-         id="flowPara2751">beta</flowPara></flowRoot>  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   inkscape:export-ydpi="90.000000"
+   inkscape:export-xdpi="90.000000"
+   inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/jabref_splash-2.2.png"
+   sodipodi:docname="splash-release.svg"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:version="0.32"
+   id="svg2138"
+   height="1052.3622047"
+   width="744.09448819"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.1">
+  <defs
+     id="defs2140">
+    <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="perspective2595" />
+    <linearGradient
+       id="linearGradient2974">
+      <stop
+         style="stop-color:#505b77;stop-opacity:1;"
+         offset="0"
+         id="stop2976" />
+      <stop
+         style="stop-color:#596a97;stop-opacity:1;"
+         offset="1"
+         id="stop2978" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2883">
+      <stop
+         style="stop-color:#c5c1c1;stop-opacity:1;"
+         offset="0"
+         id="stop2885" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop2887" />
+    </linearGradient>
+    <pattern
+       patternTransform="translate(316.0000,1046.362)"
+       id="pattern9054"
+       xlink:href="#pattern9048"
+       inkscape:collect="always" />
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Send"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Send">
+      <path
+         transform="scale(0.3) rotate(180) translate(-5,0)"
+         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 "
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         id="path3046"
+         sodipodi:nodetypes="cccc" />
+    </marker>
+    <pattern
+       id="pattern9048"
+       patternTransform="translate(231.0000,284.3622)"
+       height="428.00000"
+       width="572.00000"
+       patternUnits="userSpaceOnUse">
+      <image
+         sodipodi:absref="/home/alver/jabref/jabref/src/images/behandlet.png"
+         xlink:href="behandlet.png"
+         transform="translate(-231.0000,-284.3622)"
+         style="opacity:1.0000000;stroke:#000000;stroke-width:5.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+         inkscape:export-ydpi="90.000000"
+         inkscape:export-xdpi="90.000000"
+         inkscape:export-filename="/home/alver/Desktop/bilder/jabref/splash4.png"
+         y="284.36218"
+         x="231.00000"
+         width="572.00000"
+         height="428.00000"
+         id="image9050" />
+    </pattern>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="radialGradient2889"
+       cx="255.5"
+       cy="330.36218"
+       fx="255.5"
+       fy="330.36218"
+       r="135.88549"
+       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="linearGradient2909"
+       x1="443.79153"
+       y1="351.89935"
+       x2="602.17139"
+       y2="351.89935"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="radialGradient2796"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
+       cx="255.5"
+       cy="330.36218"
+       fx="255.5"
+       fy="330.36218"
+       r="135.88549" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="radialGradient2798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
+       cx="255.5"
+       cy="330.36218"
+       fx="255.5"
+       fy="330.36218"
+       r="135.88549" />
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-y="31"
+     inkscape:window-x="0"
+     inkscape:window-height="714"
+     inkscape:window-width="1366"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="675.8697"
+     inkscape:cx="238.10531"
+     inkscape:zoom="1"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     showgrid="false"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata2143">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <rect
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       y="170.36218"
+       x="77.500000"
+       height="432.00000"
+       width="576.00000"
+       id="rect6833"
+       style="opacity:1.0000000;fill:#6b6b75;fill-opacity:1.0000000;stroke:none;stroke-width:5.0000000;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000" />
+    <image
+       sodipodi:absref="/home/alver/jabref/jabref/src/images/splashBackground.png"
+       xlink:href="splashBackground.png"
+       id="image1821"
+       height="428"
+       width="572"
+       x="79"
+       y="172.36218"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75" />
+    <flowRoot
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       style="opacity:1.0000000;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000"
+       transform="matrix(1.875133,0.000000,0.000000,2.542210,-129.6969,-372.8897)"
+       id="flowRoot2189"
+       xml:space="preserve">
+      <flowRegion
+   id="flowRegion2191">
+        <rect
+   style="fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-opacity:1.0000000;stroke-width:0.48137557;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-linejoin:bevel"
+   y="199.10532"
+   x="128.49385"
+   height="127.49445"
+   width="283.51782"
+   id="rect2193" />
+      </flowRegion>
+      <flowPara
+   style="font-size:90.000000px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;font-family:AR PL KaitiM GB"
+   id="flowPara2201">JabRef</flowPara>
+    </flowRoot>    <flowRoot
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       transform="matrix(0.972246,0,0,1.325301,6.054966,-126.1181)"
+       style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
+       id="flowRoot3076"
+       xml:space="preserve"><flowRegion
+         id="flowRegion3078">
+        <rect
+   style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
+   y="514.56494"
+   x="115.50008"
+   height="78.684433"
+   width="506.03476"
+   id="rect3080" />
+      </flowRegion><flowPara
+         id="flowPara1339">This program is distributed under the terms of the General Public License.</flowPara><flowPara
+         id="flowPara1341">Copyright (2003-2012) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       transform="scale(0.853347,1.171856)"
+       sodipodi:linespacing="100%"
+       id="text2179"
+       y="450.75409"
+       x="187.49605"
+       style="font-size:43.99980927px;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;fill:#805b41;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L"
+       xml:space="preserve"><tspan
+         y="450.75409"
+         x="187.49605"
+         id="tspan2181"
+         sodipodi:role="line">JabRef reference manager</tspan></text>
+    <g
+       id="g2867"
+       transform="matrix(1.14435,0,0,1.103688,-34.88143,-26.75429)"
+       style="fill:#3d3d5f;fill-opacity:1;stroke:url(#radialGradient2889);stroke-width:1.99301183;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75">
+      <path
+         inkscape:export-ydpi="57.68"
+         inkscape:export-xdpi="57.68"
+         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
+         sodipodi:nodetypes="cccscssc"
+         id="path3874"
+         d="M 157.96931,200.83693 C 195.68133,200.83693 226.84892,201.74266 226.84892,201.74266 C 226.84892,201.74266 264.67261,230.02095 245.09466,392.86816 C 239.45611,424.41127 211.69305,452.41514 177.77033,452.41514 C 143.84738,452.41514 124.35978,432.41027 124.35978,409.07782 C 159.37053,424.87768 185.33022,416.88114 194.38104,413.14131 C 198.72239,411.3483 214.85378,403.80956 214.58004,365.73926 C 213.94457,277.38853 222.57808,258.1971 157.96931,200.83693 z "
+         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2796);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         inkscape:export-ydpi="57.68"
+         inkscape:export-xdpi="57.68"
+         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
+         sodipodi:nodetypes="ccccsc"
+         id="path3876"
+         d="M 255.00983,201.1495 C 346.39949,205.65848 415.05774,279.60734 324.95506,328.62763 C 299.6693,344.58746 362.3433,423.95718 386.64022,459.88743 C 324.57976,439.24633 270.32186,376.11089 274.24748,333.19936 C 276.87135,302.14849 327.63081,304.24915 329.72814,285.1414 C 331.82536,266.03489 296.3799,268.06417 255.00983,201.1495 z "
+         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2798);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:57.1212616px;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;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Nimbus Sans L"
+       x="462.20135"
+       y="426.2529"
+       id="text2911"
+       sodipodi:linespacing="100%"
+       transform="scale(0.917932,1.089405)"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75"><tspan
+         sodipodi:role="line"
+         id="tspan2913"
+         x="462.20135"
+         y="426.2529"
+         style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Bitstream Vera Sans">2.9</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot2745"
+       style="font-size:56px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#f91616;fill-opacity:0.65789472;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold"
+       transform="matrix(0.9688007,-0.2478411,0.2478411,0.9688007,-87.20276,118.59483)"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75"><flowRegion
+         id="flowRegion2747"><rect
+           id="rect2749"
+           width="164"
+           height="68"
+           x="482"
+           y="470.36218"
+           style="font-size:56px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#f91616;fill-opacity:0.65789472;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold" /></flowRegion><flowPara
+         id="flowPara2751">beta</flowPara></flowRoot>  </g>
+</svg>
diff --git a/src/images/splash-dev.svg b/src/images/splash-dev.svg
index 541f2b6..7450894 100644
--- a/src/images/splash-dev.svg
+++ b/src/images/splash-dev.svg
@@ -1,287 +1,341 @@
-<?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"
-   inkscape:export-ydpi="90.000000"
-   inkscape:export-xdpi="90.000000"
-   inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/splash.png"
-   sodipodi:docname="splash-dev.svg"
-   inkscape:version="0.48.2 r9819"
-   sodipodi:version="0.32"
-   id="svg2138"
-   height="1052.3622047"
-   width="744.09448819"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   version="1.1">
-  <defs
-     id="defs2140">
-    <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="perspective2595" />
-    <linearGradient
-       id="linearGradient2974">
-      <stop
-         style="stop-color:#505b77;stop-opacity:1;"
-         offset="0"
-         id="stop2976" />
-      <stop
-         style="stop-color:#596a97;stop-opacity:1;"
-         offset="1"
-         id="stop2978" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2883">
-      <stop
-         style="stop-color:#c5c1c1;stop-opacity:1;"
-         offset="0"
-         id="stop2885" />
-      <stop
-         style="stop-color:white;stop-opacity:1;"
-         offset="1"
-         id="stop2887" />
-    </linearGradient>
-    <pattern
-       patternTransform="translate(316.0000,1046.362)"
-       id="pattern9054"
-       xlink:href="#pattern9048"
-       inkscape:collect="always" />
-    <marker
-       style="overflow:visible;"
-       id="Arrow2Send"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow2Send">
-      <path
-         transform="scale(0.3) rotate(180) translate(-5,0)"
-         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 "
-         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
-         id="path3046"
-         sodipodi:nodetypes="cccc" />
-    </marker>
-    <pattern
-       id="pattern9048"
-       patternTransform="translate(231.0000,284.3622)"
-       height="428.00000"
-       width="572.00000"
-       patternUnits="userSpaceOnUse">
-      <image
-         sodipodi:absref="C:\git-repos\jabref\jabref\src\images\behandlet.png"
-         xlink:href="behandlet.png"
-         id="image9050"
-         height="428.00000"
-         width="572.00000"
-         x="231.00000"
-         y="284.36218"
-         inkscape:export-filename="/home/alver/Desktop/bilder/jabref/splash4.png"
-         inkscape:export-xdpi="90.000000"
-         inkscape:export-ydpi="90.000000"
-         style="opacity:1.0000000;stroke:#000000;stroke-width:5.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
-         transform="translate(-231.0000,-284.3622)" />
-    </pattern>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2889"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="linearGradient2909"
-       x1="443.79153"
-       y1="351.89935"
-       x2="602.17139"
-       y2="351.89935"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2796"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2798"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549" />
-  </defs>
-  <sodipodi:namedview
-     inkscape:window-y="-8"
-     inkscape:window-x="-8"
-     inkscape:window-height="878"
-     inkscape:window-width="1467"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="675.8697"
-     inkscape:cx="238.10531"
-     inkscape:zoom="1"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base"
-     showgrid="false"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata2143">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Layer 1">
-    <rect
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       y="170.36218"
-       x="77.500000"
-       height="432.00000"
-       width="576.00000"
-       id="rect6833"
-       style="opacity:1.0000000;fill:#6b6b75;fill-opacity:1.0000000;stroke:none;stroke-width:5.0000000;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000" />
-    <image
-       sodipodi:absref="C:\git-repos\jabref\jabref\src\images\splashBackground.png"
-       xlink:href="splashBackground.png"
-       inkscape:export-ydpi="75"
-       inkscape:export-xdpi="75"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       y="172.36218"
-       x="79"
-       width="572"
-       height="428"
-       id="image1821" />
-    <flowRoot
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       style="opacity:1.0000000;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000"
-       transform="matrix(1.875133,0.000000,0.000000,2.542210,-129.6969,-372.8897)"
-       id="flowRoot2189"
-       xml:space="preserve">
-      <flowRegion
-   id="flowRegion2191">
-        <rect
-   style="fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-opacity:1.0000000;stroke-width:0.48137557;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-linejoin:bevel"
-   y="199.10532"
-   x="128.49385"
-   height="127.49445"
-   width="283.51782"
-   id="rect2193" />
-      </flowRegion>
-      <flowPara
-   style="font-size:90.000000px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;font-family:AR PL KaitiM GB"
-   id="flowPara2201">JabRef</flowPara>
-    </flowRoot>    <flowRoot
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       transform="matrix(0.972246,0,0,1.325301,6.054966,-126.1181)"
-       style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
-       id="flowRoot3076"
-       xml:space="preserve"><flowRegion
-         id="flowRegion3078">
-        <rect
-   style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
-   y="514.56494"
-   x="115.50008"
-   height="78.684433"
-   width="506.03476"
-   id="rect3080" />
-      </flowRegion><flowPara
-         id="flowPara1339">This program is distributed under the terms of the General Public License.</flowPara><flowPara
-         id="flowPara1341">Copyright (2003-2012) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       transform="scale(0.853347,1.171856)"
-       sodipodi:linespacing="100%"
-       id="text2179"
-       y="450.75409"
-       x="187.49605"
-       style="font-size:43.99980927px;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;fill:#805b41;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L"
-       xml:space="preserve"><tspan
-         y="450.75409"
-         x="187.49605"
-         id="tspan2181"
-         sodipodi:role="line">JabRef reference manager</tspan></text>
-    <g
-       id="g2867"
-       transform="matrix(1.14435,0,0,1.103688,-34.88143,-26.75429)"
-       style="fill:#3d3d5f;fill-opacity:1;stroke:url(#radialGradient2889);stroke-width:1.99301183;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75">
-      <path
-         inkscape:export-ydpi="57.68"
-         inkscape:export-xdpi="57.68"
-         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
-         sodipodi:nodetypes="cccscssc"
-         id="path3874"
-         d="M 157.96931,200.83693 C 195.68133,200.83693 226.84892,201.74266 226.84892,201.74266 C 226.84892,201.74266 264.67261,230.02095 245.09466,392.86816 C 239.45611,424.41127 211.69305,452.41514 177.77033,452.41514 C 143.84738,452.41514 124.35978,432.41027 124.35978,409.07782 C 159.37053,424.87768 185.33022,416.88114 194.38104,413.14131 C 198.72239,411.3483 214.85378,403.80956 214.58004,365.73926 C 213.94457,277.38853 222.57808,258.1971 157.96931,200.83693 z "
-         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2796);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <path
-         inkscape:export-ydpi="57.68"
-         inkscape:export-xdpi="57.68"
-         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
-         sodipodi:nodetypes="ccccsc"
-         id="path3876"
-         d="M 255.00983,201.1495 C 346.39949,205.65848 415.05774,279.60734 324.95506,328.62763 C 299.6693,344.58746 362.3433,423.95718 386.64022,459.88743 C 324.57976,439.24633 270.32186,376.11089 274.24748,333.19936 C 276.87135,302.14849 327.63081,304.24915 329.72814,285.1414 C 331.82536,266.03489 296.3799,268.06417 255.00983,201.1495 z "
-         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2798);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-size:57.12126159999999700px;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;fill:#ff0000;fill-opacity:1;stroke:#ff6600;stroke-width:4.00000058000000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Nimbus Sans L"
-       x="462.20135"
-       y="426.2529"
-       id="text2911"
-       sodipodi:linespacing="100%"
-       transform="scale(0.917932,1.089405)"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75"><tspan
-         sodipodi:role="line"
-         id="tspan2913"
-         x="462.20135"
-         y="426.2529"
-         style="font-size:119.00263214000003000px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:#ff6600;stroke-width:4.00000058000000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Bitstream Vera Sans">dev</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   inkscape:export-ydpi="90.000000"
+   inkscape:export-xdpi="90.000000"
+   inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/splash.png"
+   sodipodi:docname="splash-dev.svg"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:version="0.32"
+   id="svg2138"
+   height="432"
+   width="576"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.1">
+  <defs
+     id="defs2140">
+    <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="perspective2595" />
+    <linearGradient
+       id="linearGradient2974">
+      <stop
+         style="stop-color:#505b77;stop-opacity:1;"
+         offset="0"
+         id="stop2976" />
+      <stop
+         style="stop-color:#596a97;stop-opacity:1;"
+         offset="1"
+         id="stop2978" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2883">
+      <stop
+         style="stop-color:#c5c1c1;stop-opacity:1;"
+         offset="0"
+         id="stop2885" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop2887" />
+    </linearGradient>
+    <pattern
+       patternTransform="translate(316.0000,1046.362)"
+       id="pattern9054"
+       xlink:href="#pattern9048"
+       inkscape:collect="always" />
+    <marker
+       style="overflow:visible"
+       id="Arrow2Send"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Send">
+      <path
+         transform="matrix(-0.3,0,0,-0.3,1.5,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         id="path3046"
+         sodipodi:nodetypes="cccc"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <pattern
+       id="pattern9048"
+       patternTransform="translate(231.0000,284.3622)"
+       height="428.00000"
+       width="572.00000"
+       patternUnits="userSpaceOnUse">
+      <image
+         sodipodi:absref="C:\git-repositories\jabref\jabref\src\images\behandlet.png"
+         xlink:href="behandlet.png"
+         transform="translate(-231.0000,-284.3622)"
+         style="opacity:1.0000000;stroke:#000000;stroke-width:5.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+         inkscape:export-ydpi="90.000000"
+         inkscape:export-xdpi="90.000000"
+         inkscape:export-filename="/home/alver/Desktop/bilder/jabref/splash4.png"
+         y="284.36218"
+         x="231.00000"
+         width="572.00000"
+         height="428.00000"
+         id="image9050" />
+    </pattern>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="radialGradient2889"
+       cx="255.5"
+       cy="330.36218"
+       fx="255.5"
+       fy="330.36218"
+       r="135.88548"
+       gradientTransform="matrix(-0.799579,-0.05606082,0.06979161,-1.00875,436.7358,677.9388)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="linearGradient2909"
+       x1="443.79153"
+       y1="351.89935"
+       x2="602.17139"
+       y2="351.89935"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="radialGradient2796"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.799579,-0.05606082,0.06979161,-1.00875,436.7358,677.9388)"
+       cx="255.5"
+       cy="330.36218"
+       fx="255.5"
+       fy="330.36218"
+       r="135.88548" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="radialGradient2798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.799579,-0.05606082,0.06979161,-1.00875,436.7358,677.9388)"
+       cx="255.5"
+       cy="330.36218"
+       fx="255.5"
+       fy="330.36218"
+       r="135.88548" />
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-y="-8"
+     inkscape:window-x="-8"
+     inkscape:window-height="1027"
+     inkscape:window-width="1920"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="225.8697"
+     inkscape:cx="160.60531"
+     inkscape:zoom="1"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     showgrid="false"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata2143">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1"
+     transform="translate(-77.5,-170.36218)">
+    <rect
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       y="170.36218"
+       x="77.5"
+       height="432"
+       width="576"
+       id="rect6833"
+       style="fill:#6b6b75;fill-opacity:1;stroke:none" />
+    <image
+       sodipodi:absref="C:\git-repositories\jabref\jabref\src\images\splashBackground.png"
+       xlink:href="splashBackground.png"
+       id="image1821"
+       height="428"
+       width="572"
+       x="79"
+       y="172.36218"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75" />
+    <flowRoot
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       style="fill:#635578;fill-opacity:1;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       transform="matrix(1.875133,0,0,2.54221,-129.6969,-372.8897)"
+       id="flowRoot2189"
+       xml:space="preserve">
+      <flowRegion
+   id="flowRegion2191">
+        <rect
+   style="fill:#635578;fill-opacity:1;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+   y="199.10532"
+   x="128.49385"
+   height="127.49445"
+   width="283.51782"
+   id="rect2193" />
+      </flowRegion>
+      <flowPara
+   style="font-size:90px;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:#635578;fill-opacity:1;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:AR PL KaitiM GB"
+   id="flowPara2201">JabRef</flowPara>
+    </flowRoot>    <flowRoot
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       transform="matrix(0.972246,0,0,1.325301,6.054966,-126.1181)"
+       style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
+       id="flowRoot3076"
+       xml:space="preserve"><flowRegion
+         id="flowRegion3078">
+        <rect
+   style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
+   y="514.56494"
+   x="115.50008"
+   height="78.684433"
+   width="506.03476"
+   id="rect3080" />
+      </flowRegion><flowPara
+         id="flowPara1339">This program is distributed under the terms of the General Public License.</flowPara><flowPara
+         id="flowPara1341">Copyright (2003-2012) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       transform="scale(0.853347,1.171856)"
+       sodipodi:linespacing="100%"
+       id="text2179"
+       y="450.75409"
+       x="187.49605"
+       style="font-size:43.99980927px;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;fill:#805b41;fill-opacity:1;stroke:none;font-family:URW Palladio L"
+       xml:space="preserve"><tspan
+         y="450.75409"
+         x="187.49605"
+         id="tspan2181"
+         sodipodi:role="line">JabRef reference manager</tspan></text>
+    <g
+       id="g2867"
+       transform="matrix(1.14435,0,0,1.103688,-34.88143,-26.75429)"
+       style="fill:#3d3d5f;fill-opacity:1;stroke:url(#radialGradient2889);stroke-width:1.99301183;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75">
+      <path
+         inkscape:export-ydpi="57.68"
+         inkscape:export-xdpi="57.68"
+         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
+         sodipodi:nodetypes="cccscssc"
+         id="path3874"
+         d="m 157.96931,200.83693 c 37.71202,0 68.87961,0.90573 68.87961,0.90573 0,0 37.82369,28.27829 18.24574,191.1255 -5.63855,31.54311 -33.40161,59.54698 -67.32433,59.54698 -33.92295,0 -53.41055,-20.00487 -53.41055,-43.33732 35.01075,15.79986 60.97044,7.80332 70.02126,4.06349 4.34135,-1.79301 20.47274,-9.33175 20.199,-47.40205 -0.63547,-88.35073 7.99804,-107.54216 -56.61073,-164.90233 z"
+         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2796);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="57.68"
+         inkscape:export-xdpi="57.68"
+         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
+         sodipodi:nodetypes="ccccsc"
+         id="path3876"
+         d="m 255.00983,201.1495 c 91.38966,4.50898 160.04791,78.45784 69.94523,127.47813 -25.28576,15.95983 37.38824,95.32955 61.68516,131.2598 -62.06046,-20.6411 -116.31836,-83.77654 -112.39274,-126.68807 2.62387,-31.05087 53.38333,-28.95021 55.48066,-48.05796 2.09722,-19.10651 -33.34824,-17.07723 -74.71831,-83.9919 z"
+         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2798);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:57.12125397px;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;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000007;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Nimbus Sans L"
+       x="451.30728"
+       y="426.25284"
+       id="text2911"
+       sodipodi:linespacing="100%"
+       transform="scale(0.9179321,1.0894052)"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75"><tspan
+         sodipodi:role="line"
+         id="tspan2913"
+         x="451.30728"
+         y="426.25284"
+         style="font-size:119.00261688px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000007;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Bitstream Vera Sans">2.9.1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:41.23898697px;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;fill:#ff0000;fill-opacity:1;stroke:#ff6600;stroke-width:2.8878212;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Nimbus Sans L"
+       x="243.9458"
+       y="638.84186"
+       id="text2911-4"
+       sodipodi:linespacing="100%"
+       transform="matrix(0.80568825,-0.44174063,0.52619691,0.95267301,0,0)"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75"><tspan
+         sodipodi:role="line"
+         id="tspan2913-0"
+         x="243.9458"
+         y="638.84186"
+         style="font-size:85.91455841px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:#ff6600;stroke-width:2.8878212;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Bitstream Vera Sans">dev</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:29.93491554px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="510.92227"
+       y="226.16539"
+       id="text3244"
+       sodipodi:linespacing="125%"
+       transform="scale(1.0223375,0.97815054)"><tspan
+         sodipodi:role="line"
+         x="510.92227"
+         y="226.16539"
+         id="tspan3252"
+         style="font-size:23.9479332px;text-align:center;text-anchor:middle;fill:#ff0000">This is a</tspan><tspan
+         sodipodi:role="line"
+         x="510.92227"
+         y="256.10031"
+         id="tspan3256"
+         style="font-size:23.9479332px;text-align:center;text-anchor:middle;fill:#ff0000"><tspan
+   style="font-weight:bold;-inkscape-font-specification:Sans Bold"
+   id="tspan3266">development version</tspan>.</tspan><tspan
+         sodipodi:role="line"
+         x="510.92227"
+         y="286.03522"
+         id="tspan3258"
+         style="font-size:23.9479332px;text-align:center;text-anchor:middle;fill:#ff0000">Features may</tspan><tspan
+         sodipodi:role="line"
+         x="510.92227"
+         y="315.97015"
+         id="tspan3260"
+         style="font-size:23.9479332px;text-align:center;text-anchor:middle;fill:#ff0000">not work as expected.</tspan></text>
+  </g>
+</svg>
diff --git a/src/images/splash-release.svg b/src/images/splash-release.svg
index 274a5a7..5ccdf62 100644
--- a/src/images/splash-release.svg
+++ b/src/images/splash-release.svg
@@ -1,287 +1,295 @@
-<?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"
-   inkscape:export-ydpi="90.000000"
-   inkscape:export-xdpi="90.000000"
-   inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/jabref_splash-2.2.png"
-   sodipodi:docname="splash-beta.svg"
-   inkscape:version="0.48.2 r9819"
-   sodipodi:version="0.32"
-   id="svg2138"
-   height="1052.3622047"
-   width="744.09448819"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   version="1.1">
-  <defs
-     id="defs2140">
-    <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="perspective2595" />
-    <linearGradient
-       id="linearGradient2974">
-      <stop
-         style="stop-color:#505b77;stop-opacity:1;"
-         offset="0"
-         id="stop2976" />
-      <stop
-         style="stop-color:#596a97;stop-opacity:1;"
-         offset="1"
-         id="stop2978" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2883">
-      <stop
-         style="stop-color:#c5c1c1;stop-opacity:1;"
-         offset="0"
-         id="stop2885" />
-      <stop
-         style="stop-color:white;stop-opacity:1;"
-         offset="1"
-         id="stop2887" />
-    </linearGradient>
-    <pattern
-       patternTransform="translate(316.0000,1046.362)"
-       id="pattern9054"
-       xlink:href="#pattern9048"
-       inkscape:collect="always" />
-    <marker
-       style="overflow:visible;"
-       id="Arrow2Send"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow2Send">
-      <path
-         transform="scale(0.3) rotate(180) translate(-5,0)"
-         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 "
-         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
-         id="path3046"
-         sodipodi:nodetypes="cccc" />
-    </marker>
-    <pattern
-       id="pattern9048"
-       patternTransform="translate(231.0000,284.3622)"
-       height="428.00000"
-       width="572.00000"
-       patternUnits="userSpaceOnUse">
-      <image
-         sodipodi:absref="/home/alver/jabref/jabref/src/images/behandlet.png"
-         xlink:href="behandlet.png"
-         transform="translate(-231.0000,-284.3622)"
-         style="opacity:1.0000000;stroke:#000000;stroke-width:5.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
-         inkscape:export-ydpi="90.000000"
-         inkscape:export-xdpi="90.000000"
-         inkscape:export-filename="/home/alver/Desktop/bilder/jabref/splash4.png"
-         y="284.36218"
-         x="231.00000"
-         width="572.00000"
-         height="428.00000"
-         id="image9050" />
-    </pattern>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2889"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="linearGradient2909"
-       x1="443.79153"
-       y1="351.89935"
-       x2="602.17139"
-       y2="351.89935"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2796"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2798"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549" />
-  </defs>
-  <sodipodi:namedview
-     inkscape:window-y="31"
-     inkscape:window-x="0"
-     inkscape:window-height="714"
-     inkscape:window-width="1366"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="675.8697"
-     inkscape:cx="238.10531"
-     inkscape:zoom="1"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base"
-     showgrid="false"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata2143">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Layer 1">
-    <rect
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       y="170.36218"
-       x="77.500000"
-       height="432.00000"
-       width="576.00000"
-       id="rect6833"
-       style="opacity:1.0000000;fill:#6b6b75;fill-opacity:1.0000000;stroke:none;stroke-width:5.0000000;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000" />
-    <image
-       sodipodi:absref="/home/alver/jabref/jabref/src/images/splashBackground.png"
-       xlink:href="splashBackground.png"
-       id="image1821"
-       height="428"
-       width="572"
-       x="79"
-       y="172.36218"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75" />
-    <flowRoot
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       style="opacity:1.0000000;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000"
-       transform="matrix(1.875133,0.000000,0.000000,2.542210,-129.6969,-372.8897)"
-       id="flowRoot2189"
-       xml:space="preserve">
-      <flowRegion
-   id="flowRegion2191">
-        <rect
-   style="fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-opacity:1.0000000;stroke-width:0.48137557;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-linejoin:bevel"
-   y="199.10532"
-   x="128.49385"
-   height="127.49445"
-   width="283.51782"
-   id="rect2193" />
-      </flowRegion>
-      <flowPara
-   style="font-size:90.000000px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;font-family:AR PL KaitiM GB"
-   id="flowPara2201">JabRef</flowPara>
-    </flowRoot>    <flowRoot
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       transform="matrix(0.972246,0,0,1.325301,6.054966,-126.1181)"
-       style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
-       id="flowRoot3076"
-       xml:space="preserve"><flowRegion
-         id="flowRegion3078">
-        <rect
-   style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
-   y="514.56494"
-   x="115.50008"
-   height="78.684433"
-   width="506.03476"
-   id="rect3080" />
-      </flowRegion><flowPara
-         id="flowPara1339">This program is distributed under the terms of the General Public License.</flowPara><flowPara
-         id="flowPara1341">Copyright (2003-2012) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       transform="scale(0.853347,1.171856)"
-       sodipodi:linespacing="100%"
-       id="text2179"
-       y="450.75409"
-       x="187.49605"
-       style="font-size:43.99980927px;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;fill:#805b41;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L"
-       xml:space="preserve"><tspan
-         y="450.75409"
-         x="187.49605"
-         id="tspan2181"
-         sodipodi:role="line">JabRef reference manager</tspan></text>
-    <g
-       id="g2867"
-       transform="matrix(1.14435,0,0,1.103688,-34.88143,-26.75429)"
-       style="fill:#3d3d5f;fill-opacity:1;stroke:url(#radialGradient2889);stroke-width:1.99301183;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75">
-      <path
-         inkscape:export-ydpi="57.68"
-         inkscape:export-xdpi="57.68"
-         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
-         sodipodi:nodetypes="cccscssc"
-         id="path3874"
-         d="M 157.96931,200.83693 C 195.68133,200.83693 226.84892,201.74266 226.84892,201.74266 C 226.84892,201.74266 264.67261,230.02095 245.09466,392.86816 C 239.45611,424.41127 211.69305,452.41514 177.77033,452.41514 C 143.84738,452.41514 124.35978,432.41027 124.35978,409.07782 C 159.37053,424.87768 185.33022,416.88114 194.38104,413.14131 C 198.72239,411.3483 214.85378,403.80956 214.58004,365.73926 C 213.94457,277.38853 222.57808,258.1971 157.96931,200.83693 z "
-         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2796);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <path
-         inkscape:export-ydpi="57.68"
-         inkscape:export-xdpi="57.68"
-         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
-         sodipodi:nodetypes="ccccsc"
-         id="path3876"
-         d="M 255.00983,201.1495 C 346.39949,205.65848 415.05774,279.60734 324.95506,328.62763 C 299.6693,344.58746 362.3433,423.95718 386.64022,459.88743 C 324.57976,439.24633 270.32186,376.11089 274.24748,333.19936 C 276.87135,302.14849 327.63081,304.24915 329.72814,285.1414 C 331.82536,266.03489 296.3799,268.06417 255.00983,201.1495 z "
-         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2798);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-size:57.1212616px;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;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Nimbus Sans L"
-       x="462.20135"
-       y="426.2529"
-       id="text2911"
-       sodipodi:linespacing="100%"
-       transform="scale(0.917932,1.089405)"
-       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75"><tspan
-         sodipodi:role="line"
-         id="tspan2913"
-         x="462.20135"
-         y="426.2529"
-         style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Bitstream Vera Sans">2.9</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   inkscape:export-ydpi="90.000000"
+   inkscape:export-xdpi="90.000000"
+   inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/jabref_splash-2.2.png"
+   sodipodi:docname="splash-release.svg"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:version="0.32"
+   id="svg2138"
+   height="432"
+   width="576"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.1">
+  <defs
+     id="defs2140">
+    <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="perspective2595" />
+    <linearGradient
+       id="linearGradient2974">
+      <stop
+         style="stop-color:#505b77;stop-opacity:1;"
+         offset="0"
+         id="stop2976" />
+      <stop
+         style="stop-color:#596a97;stop-opacity:1;"
+         offset="1"
+         id="stop2978" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2883">
+      <stop
+         style="stop-color:#c5c1c1;stop-opacity:1;"
+         offset="0"
+         id="stop2885" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop2887" />
+    </linearGradient>
+    <pattern
+       patternTransform="translate(316.0000,1046.362)"
+       id="pattern9054"
+       xlink:href="#pattern9048"
+       inkscape:collect="always" />
+    <marker
+       style="overflow:visible"
+       id="Arrow2Send"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Send">
+      <path
+         transform="matrix(-0.3,0,0,-0.3,1.5,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         id="path3046"
+         sodipodi:nodetypes="cccc"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <pattern
+       id="pattern9048"
+       patternTransform="translate(231.0000,284.3622)"
+       height="428.00000"
+       width="572.00000"
+       patternUnits="userSpaceOnUse">
+      <image
+         sodipodi:absref="/home/alver/jabref/jabref/src/images/behandlet.png"
+         xlink:href="behandlet.png"
+         id="image9050"
+         height="428.00000"
+         width="572.00000"
+         x="231.00000"
+         y="284.36218"
+         inkscape:export-filename="/home/alver/Desktop/bilder/jabref/splash4.png"
+         inkscape:export-xdpi="90.000000"
+         inkscape:export-ydpi="90.000000"
+         style="opacity:1.0000000;stroke:#000000;stroke-width:5.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+         transform="translate(-231.0000,-284.3622)" />
+    </pattern>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="radialGradient2889"
+       cx="255.5"
+       cy="330.36218"
+       fx="255.5"
+       fy="330.36218"
+       r="135.88548"
+       gradientTransform="matrix(-0.799579,-0.05606082,0.06979161,-1.00875,436.7358,677.9388)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="linearGradient2909"
+       x1="443.79153"
+       y1="351.89935"
+       x2="602.17139"
+       y2="351.89935"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="radialGradient2796"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.799579,-0.05606082,0.06979161,-1.00875,436.7358,677.9388)"
+       cx="255.5"
+       cy="330.36218"
+       fx="255.5"
+       fy="330.36218"
+       r="135.88548" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="radialGradient2798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.799579,-0.05606082,0.06979161,-1.00875,436.7358,677.9388)"
+       cx="255.5"
+       cy="330.36218"
+       fx="255.5"
+       fy="330.36218"
+       r="135.88548" />
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-y="1072"
+     inkscape:window-x="161"
+     inkscape:window-height="877"
+     inkscape:window-width="1538"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="225.8697"
+     inkscape:cx="160.60531"
+     inkscape:zoom="1"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     showgrid="false"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata2143">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1"
+     transform="translate(-77.5,-170.36218)">
+    <rect
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       y="170.36218"
+       x="77.5"
+       height="432"
+       width="576"
+       id="rect6833"
+       style="fill:#6b6b75;fill-opacity:1;stroke:none" />
+    <image
+       sodipodi:absref="/home/alver/jabref/jabref/src/images/splashBackground.png"
+       xlink:href="splashBackground.png"
+       inkscape:export-ydpi="75"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       y="172.36218"
+       x="79"
+       width="572"
+       height="428"
+       id="image1821" />
+    <flowRoot
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       style="fill:#635578;fill-opacity:1;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       transform="matrix(1.875133,0,0,2.54221,-129.6969,-372.8897)"
+       id="flowRoot2189"
+       xml:space="preserve">
+      <flowRegion
+   id="flowRegion2191">
+        <rect
+   style="fill:#635578;fill-opacity:1;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+   y="199.10532"
+   x="128.49385"
+   height="127.49445"
+   width="283.51782"
+   id="rect2193" />
+      </flowRegion>
+      <flowPara
+   style="font-size:90px;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:#635578;fill-opacity:1;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:AR PL KaitiM GB"
+   id="flowPara2201">JabRef</flowPara>
+    </flowRoot>    <flowRoot
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       transform="matrix(0.972246,0,0,1.325301,6.054966,-126.1181)"
+       style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
+       id="flowRoot3076"
+       xml:space="preserve"><flowRegion
+         id="flowRegion3078">
+        <rect
+   style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
+   y="514.56494"
+   x="115.50008"
+   height="78.684433"
+   width="506.03476"
+   id="rect3080" />
+      </flowRegion><flowPara
+         id="flowPara1339">This program is distributed under the terms of the General Public License.</flowPara><flowPara
+         id="flowPara1341">Copyright (2003-2012) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
+       inkscape:export-ydpi="75.000000"
+       inkscape:export-xdpi="75.000000"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       transform="scale(0.853347,1.171856)"
+       sodipodi:linespacing="100%"
+       id="text2179"
+       y="450.75409"
+       x="187.49605"
+       style="font-size:43.99980927px;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;fill:#805b41;fill-opacity:1;stroke:none;font-family:URW Palladio L"
+       xml:space="preserve"><tspan
+         y="450.75409"
+         x="187.49605"
+         id="tspan2181"
+         sodipodi:role="line">JabRef reference manager</tspan></text>
+    <g
+       id="g2867"
+       transform="matrix(1.14435,0,0,1.103688,-34.88143,-26.75429)"
+       style="fill:#3d3d5f;fill-opacity:1;stroke:url(#radialGradient2889);stroke-width:1.99301183;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75">
+      <path
+         inkscape:export-ydpi="57.68"
+         inkscape:export-xdpi="57.68"
+         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
+         sodipodi:nodetypes="cccscssc"
+         id="path3874"
+         d="m 157.96931,200.83693 c 37.71202,0 68.87961,0.90573 68.87961,0.90573 0,0 37.82369,28.27829 18.24574,191.1255 -5.63855,31.54311 -33.40161,59.54698 -67.32433,59.54698 -33.92295,0 -53.41055,-20.00487 -53.41055,-43.33732 35.01075,15.79986 60.97044,7.80332 70.02126,4.06349 4.34135,-1.79301 20.47274,-9.33175 20.199,-47.40205 -0.63547,-88.35073 7.99804,-107.54216 -56.61073,-164.90233 z"
+         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2796);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="57.68"
+         inkscape:export-xdpi="57.68"
+         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
+         sodipodi:nodetypes="ccccsc"
+         id="path3876"
+         d="m 255.00983,201.1495 c 91.38966,4.50898 160.04791,78.45784 69.94523,127.47813 -25.28576,15.95983 37.38824,95.32955 61.68516,131.2598 -62.06046,-20.6411 -116.31836,-83.77654 -112.39274,-126.68807 2.62387,-31.05087 53.38333,-28.95021 55.48066,-48.05796 2.09722,-19.10651 -33.34824,-17.07723 -74.71831,-83.9919 z"
+         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2798);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:57.12125397px;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;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000007;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Nimbus Sans L"
+       x="446.94968"
+       y="426.25284"
+       id="text2911"
+       sodipodi:linespacing="100%"
+       transform="scale(0.9179321,1.0894052)"
+       inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75"><tspan
+         sodipodi:role="line"
+         id="tspan2913"
+         x="446.94968"
+         y="426.25284"
+         style="font-size:119.00261688px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000007;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Bitstream Vera Sans">2.9.1</tspan></text>
+  </g>
+</svg>
diff --git a/src/images/splash.png b/src/images/splash.png
index be3cc0f..0a55fb5 100644
Binary files a/src/images/splash.png and b/src/images/splash.png differ
diff --git a/src/java/Eclipse_formatter.xml b/src/java/Eclipse_formatter.xml
index 1f04105..efa1078 100644
--- a/src/java/Eclipse_formatter.xml
+++ b/src/java/Eclipse_formatter.xml
@@ -1,264 +1,264 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<profiles version="11">
-<profile kind="CodeFormatterProfile" name="JabRef" version="11">
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="80"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.compiler.source" value="1.5"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.5"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="true"/>
-<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.5"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
-</profile>
-</profiles>
+<?xml version="1.0" encoding="UTF-8"?>
+<profiles version="11">
+<profile kind="CodeFormatterProfile" name="JabRef" version="11">
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.compiler.source" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="true"/>
+<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
+</profile>
+</profiles>
diff --git a/src/java/com/jgoodies/uif_lite/component/UIFSplitPane.java b/src/java/com/jgoodies/uif_lite/component/UIFSplitPane.java
index 80b618e..c28f5bc 100644
--- a/src/java/com/jgoodies/uif_lite/component/UIFSplitPane.java
+++ b/src/java/com/jgoodies/uif_lite/component/UIFSplitPane.java
@@ -1,270 +1,270 @@
-/*
- * Copyright (c) 2003, 2004 JGoodies Karsten Lentzsch. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions are met:
- * 
- *  o Redistributions of source code must retain the above copyright notice, 
- *    this list of conditions and the following disclaimer. 
- *     
- *  o Redistributions in binary form must reproduce the above copyright notice, 
- *    this list of conditions and the following disclaimer in the documentation 
- *    and/or other materials provided with the distribution. 
- *     
- *  o Neither the name of JGoodies Karsten Lentzsch nor the names of 
- *    its contributors may be used to endorse or promote products derived 
- *    from this software without specific prior written permission. 
- *     
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-package com.jgoodies.uif_lite.component;
-
-import java.awt.Component;
-
-import javax.swing.JButton;
-import javax.swing.JSplitPane;
-import javax.swing.UIManager;
-import javax.swing.border.Border;
-import javax.swing.border.EmptyBorder;
-import javax.swing.plaf.SplitPaneUI;
-import javax.swing.plaf.basic.BasicSplitPaneUI;
-
-/**
- * A <code>JSplitPane</code> subclass that can try to remove the divider border. 
- * Useful if the splitted components render their own borders.
- * Note that this feature is not supported by all look&feels.
- * Some look&feel implementation will always show a divider border, 
- * and conversely, others will never show a divider border.
- * 
- * @author Karsten Lentzsch
- * @version $Revision$
- * 
- * @see javax.swing.plaf.basic.BasicSplitPaneUI
- */
-
-public final class UIFSplitPane extends JSplitPane {
-    
-    /**
-     * Holds the name of the bound property that tries to show or hide
-     * the split pane's divider border.
-     * 
-     * @see #isDividerBorderVisible()
-     * @see #setDividerBorderVisible(boolean)
-     */
-    public static final String PROPERTYNAME_DIVIDER_BORDER_VISIBLE = 
-        "dividerBorderVisible";
-    
-    /**
-     * Holds an empty border that is reused for the split pane itself
-     * and the divider.
-     */
-    private static final Border EMPTY_BORDER = new EmptyBorder(0, 0, 0, 0);
-    
-    /**
-     * Determines whether the divider border shall be removed when
-     * the UI is updated.
-     * 
-     * @see #isDividerBorderVisible()
-     * @see #setDividerBorderVisible(boolean) 
-     */
-    private boolean dividerBorderVisible;
-
-   
-    // Instance Creation *****************************************************
-    
-    /**
-     * Constructs a <code>UIFSplitPane</code> configured to arrange the child
-     * components side-by-side horizontally with no continuous 
-     * layout, using two buttons for the components.
-     */
-    public UIFSplitPane() {
-        this(JSplitPane.HORIZONTAL_SPLIT, false,
-                new JButton(UIManager.getString("SplitPane.leftButtonText")),
-                new JButton(UIManager.getString("SplitPane.rightButtonText")));
-    }
-
-
-    /**
-     * Constructs a <code>UIFSplitPane</code> configured with the
-     * specified orientation and no continuous layout.
-     *
-     * @param newOrientation  <code>JSplitPane.HORIZONTAL_SPLIT</code> or
-     *                        <code>JSplitPane.VERTICAL_SPLIT</code>
-     * @throws IllegalArgumentException if <code>orientation</code>
-     *		is not one of HORIZONTAL_SPLIT or VERTICAL_SPLIT.
-     */
-    public UIFSplitPane(int newOrientation) {
-        this(newOrientation, false);
-    }
-
-
-    /**
-     * Constructs a <code>UIFSplitPane</code> with the specified
-     * orientation and redrawing style.
-     *
-     * @param newOrientation  <code>JSplitPane.HORIZONTAL_SPLIT</code> or
-     *                        <code>JSplitPane.VERTICAL_SPLIT</code>
-     * @param newContinuousLayout  a boolean, true for the components to 
-     *        redraw continuously as the divider changes position, false
-     *        to wait until the divider position stops changing to redraw
-     * @throws IllegalArgumentException if <code>orientation</code>
-     *		is not one of HORIZONTAL_SPLIT or VERTICAL_SPLIT
-     */
-    public UIFSplitPane(int newOrientation,
-                      boolean newContinuousLayout) {
-        this(newOrientation, newContinuousLayout, null, null);
-    }
-
-
-    /**
-     * Constructs a <code>UIFSplitPane</code> with the specified orientation
-     * and the given componenents.
-     * 
-     * @param orientation  <code>JSplitPane.HORIZONTAL_SPLIT</code> or
-     *                        <code>JSplitPane.VERTICAL_SPLIT</code>
-     * @param leftComponent the <code>Component</code> that will
-     *    appear on the left of a horizontally-split pane, 
-     *    or at the top of a vertically-split pane
-     * @param rightComponent the <code>Component</code> that will
-     *    appear on the right of a horizontally-split pane, 
-     *    or at the bottom of a	vertically-split pane
-     * @throws IllegalArgumentException if <code>orientation</code>
-     *    is not one of: HORIZONTAL_SPLIT or VERTICAL_SPLIT
-     */
-    public UIFSplitPane(int orientation,
-                         Component leftComponent,
-                         Component rightComponent) {
-        this(orientation, false, leftComponent, rightComponent);
-    }
-    
-    
-    /**
-     * Constructs a <code>UIFSplitPane</code> with the specified orientation,
-     * redrawing style, and given components.
-     *
-     * @param orientation  <code>JSplitPane.HORIZONTAL_SPLIT</code> or
-     *                        <code>JSplitPane.VERTICAL_SPLIT</code>
-     * @param continuousLayout  a boolean, true for the components to 
-     *        redraw continuously as the divider changes position, false
-     *        to wait until the divider position stops changing to redraw
-     * @param leftComponent the <code>Component</code> that will
-     *		appear on the left
-     *        	of a horizontally-split pane, or at the top of a
-     *        	vertically-split pane
-     * @param rightComponent the <code>Component</code> that will
-     *		appear on the right
-     *        	of a horizontally-split pane, or at the bottom of a
-     *        	vertically-split pane
-     * @throws IllegalArgumentException if <code>orientation</code>
-     *		is not one of HORIZONTAL_SPLIT or VERTICAL_SPLIT
-     */
-    public UIFSplitPane(int orientation,
-                      boolean continuousLayout,
-                      Component leftComponent,
-                      Component rightComponent){
-        super(orientation, continuousLayout, leftComponent, rightComponent);
-        dividerBorderVisible = false;
-    }
-    
-    
-    /**
-     * Constructs a <code>UIFSplitPane</code>, 
-     * i.e. a <code>JSplitPane</code> that has no borders.
-     * Also disabled the one touch exandable property.
-     * 
-     * @param orientation  <code>JSplitPane.HORIZONTAL_SPLIT</code> or
-     *                        <code>JSplitPane.VERTICAL_SPLIT</code>
-     * @param leftComponent the <code>Component</code> that will
-     *    appear on the left of a horizontally-split pane, 
-     *    or at the top of a vertically-split pane
-     * @param rightComponent the <code>Component</code> that will
-     *    appear on the right of a horizontally-split pane, 
-     *    or at the bottom of a	vertically-split pane
-     * @throws IllegalArgumentException if <code>orientation</code>
-     *    is not one of: HORIZONTAL_SPLIT or VERTICAL_SPLIT
-     */
-    public static UIFSplitPane createStrippedSplitPane(
-             int orientation,
-             Component leftComponent,
-             Component rightComponent) {
-        UIFSplitPane split = new UIFSplitPane(orientation, leftComponent, rightComponent);
-        split.setBorder(EMPTY_BORDER);
-        split.setOneTouchExpandable(false);
-        return split;
-    }
-    
-    
-    // Accessing Properties **************************************************
-    
-    /**
-     * Checks and answers whether the divider border shall be visible 
-     * or invisible. 
-     * Note that this feature is not supported by all look&feels.
-     * Some look&feel implementation will always show a divider border, 
-     * and conversely, others will never show a divider border.
-     * 
-     * @return the desired (but potentially inaccurate) divider border visiblity
-     */
-    public boolean isDividerBorderVisible() {
-        return dividerBorderVisible;
-    }
-    
-    
-    /**
-     * Makes the divider border visible or invisible.
-     * Note that this feature is not supported by all look&feels.
-     * Some look&feel implementation will always show a divider border, 
-     * and conversely, others will never show a divider border.
-     * 
-     * @param newVisibility   true for visible, false for invisible
-     */
-    public void setDividerBorderVisible(boolean newVisibility) {
-        boolean oldVisibility = isDividerBorderVisible();
-        if (oldVisibility == newVisibility)
-            return;
-        dividerBorderVisible = newVisibility;
-        firePropertyChange(PROPERTYNAME_DIVIDER_BORDER_VISIBLE, 
-                           oldVisibility, 
-                           newVisibility);
-    }
-    
-
-    // Changing the Divider Border Visibility *********************************
-    
-    /**
-     * Updates the UI and sets an empty divider border. The divider border
-     * may be restored by a L&F at UI installation time. And so, we
-     * try to reset it each time the UI is changed.
-     */
-    public void updateUI() {
-        super.updateUI();
-        if (!isDividerBorderVisible())
-            setEmptyDividerBorder();
-    }
-    
-
-    /**
-     * Sets an empty divider border if and only if the UI is 
-     * an instance of <code>BasicSplitPaneUI</code>.
-     */
-    private void setEmptyDividerBorder() {
-        SplitPaneUI splitPaneUI = getUI();
-        if (splitPaneUI instanceof BasicSplitPaneUI) {
-            BasicSplitPaneUI basicUI = (BasicSplitPaneUI) splitPaneUI;
-            basicUI.getDivider().setBorder(EMPTY_BORDER);
-        }
-    }
-    
-    
+/*
+ * Copyright (c) 2003, 2004 JGoodies Karsten Lentzsch. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ *  o Redistributions of source code must retain the above copyright notice, 
+ *    this list of conditions and the following disclaimer. 
+ *     
+ *  o Redistributions in binary form must reproduce the above copyright notice, 
+ *    this list of conditions and the following disclaimer in the documentation 
+ *    and/or other materials provided with the distribution. 
+ *     
+ *  o Neither the name of JGoodies Karsten Lentzsch nor the names of 
+ *    its contributors may be used to endorse or promote products derived 
+ *    from this software without specific prior written permission. 
+ *     
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+package com.jgoodies.uif_lite.component;
+
+import java.awt.Component;
+
+import javax.swing.JButton;
+import javax.swing.JSplitPane;
+import javax.swing.UIManager;
+import javax.swing.border.Border;
+import javax.swing.border.EmptyBorder;
+import javax.swing.plaf.SplitPaneUI;
+import javax.swing.plaf.basic.BasicSplitPaneUI;
+
+/**
+ * A <code>JSplitPane</code> subclass that can try to remove the divider border. 
+ * Useful if the splitted components render their own borders.
+ * Note that this feature is not supported by all look&feels.
+ * Some look&feel implementation will always show a divider border, 
+ * and conversely, others will never show a divider border.
+ * 
+ * @author Karsten Lentzsch
+ * @version $Revision$
+ * 
+ * @see javax.swing.plaf.basic.BasicSplitPaneUI
+ */
+
+public final class UIFSplitPane extends JSplitPane {
+    
+    /**
+     * Holds the name of the bound property that tries to show or hide
+     * the split pane's divider border.
+     * 
+     * @see #isDividerBorderVisible()
+     * @see #setDividerBorderVisible(boolean)
+     */
+    public static final String PROPERTYNAME_DIVIDER_BORDER_VISIBLE = 
+        "dividerBorderVisible";
+    
+    /**
+     * Holds an empty border that is reused for the split pane itself
+     * and the divider.
+     */
+    private static final Border EMPTY_BORDER = new EmptyBorder(0, 0, 0, 0);
+    
+    /**
+     * Determines whether the divider border shall be removed when
+     * the UI is updated.
+     * 
+     * @see #isDividerBorderVisible()
+     * @see #setDividerBorderVisible(boolean) 
+     */
+    private boolean dividerBorderVisible;
+
+   
+    // Instance Creation *****************************************************
+    
+    /**
+     * Constructs a <code>UIFSplitPane</code> configured to arrange the child
+     * components side-by-side horizontally with no continuous 
+     * layout, using two buttons for the components.
+     */
+    public UIFSplitPane() {
+        this(JSplitPane.HORIZONTAL_SPLIT, false,
+                new JButton(UIManager.getString("SplitPane.leftButtonText")),
+                new JButton(UIManager.getString("SplitPane.rightButtonText")));
+    }
+
+
+    /**
+     * Constructs a <code>UIFSplitPane</code> configured with the
+     * specified orientation and no continuous layout.
+     *
+     * @param newOrientation  <code>JSplitPane.HORIZONTAL_SPLIT</code> or
+     *                        <code>JSplitPane.VERTICAL_SPLIT</code>
+     * @throws IllegalArgumentException if <code>orientation</code>
+     *		is not one of HORIZONTAL_SPLIT or VERTICAL_SPLIT.
+     */
+    public UIFSplitPane(int newOrientation) {
+        this(newOrientation, false);
+    }
+
+
+    /**
+     * Constructs a <code>UIFSplitPane</code> with the specified
+     * orientation and redrawing style.
+     *
+     * @param newOrientation  <code>JSplitPane.HORIZONTAL_SPLIT</code> or
+     *                        <code>JSplitPane.VERTICAL_SPLIT</code>
+     * @param newContinuousLayout  a boolean, true for the components to 
+     *        redraw continuously as the divider changes position, false
+     *        to wait until the divider position stops changing to redraw
+     * @throws IllegalArgumentException if <code>orientation</code>
+     *		is not one of HORIZONTAL_SPLIT or VERTICAL_SPLIT
+     */
+    public UIFSplitPane(int newOrientation,
+                      boolean newContinuousLayout) {
+        this(newOrientation, newContinuousLayout, null, null);
+    }
+
+
+    /**
+     * Constructs a <code>UIFSplitPane</code> with the specified orientation
+     * and the given componenents.
+     * 
+     * @param orientation  <code>JSplitPane.HORIZONTAL_SPLIT</code> or
+     *                        <code>JSplitPane.VERTICAL_SPLIT</code>
+     * @param leftComponent the <code>Component</code> that will
+     *    appear on the left of a horizontally-split pane, 
+     *    or at the top of a vertically-split pane
+     * @param rightComponent the <code>Component</code> that will
+     *    appear on the right of a horizontally-split pane, 
+     *    or at the bottom of a	vertically-split pane
+     * @throws IllegalArgumentException if <code>orientation</code>
+     *    is not one of: HORIZONTAL_SPLIT or VERTICAL_SPLIT
+     */
+    public UIFSplitPane(int orientation,
+                         Component leftComponent,
+                         Component rightComponent) {
+        this(orientation, false, leftComponent, rightComponent);
+    }
+    
+    
+    /**
+     * Constructs a <code>UIFSplitPane</code> with the specified orientation,
+     * redrawing style, and given components.
+     *
+     * @param orientation  <code>JSplitPane.HORIZONTAL_SPLIT</code> or
+     *                        <code>JSplitPane.VERTICAL_SPLIT</code>
+     * @param continuousLayout  a boolean, true for the components to 
+     *        redraw continuously as the divider changes position, false
+     *        to wait until the divider position stops changing to redraw
+     * @param leftComponent the <code>Component</code> that will
+     *		appear on the left
+     *        	of a horizontally-split pane, or at the top of a
+     *        	vertically-split pane
+     * @param rightComponent the <code>Component</code> that will
+     *		appear on the right
+     *        	of a horizontally-split pane, or at the bottom of a
+     *        	vertically-split pane
+     * @throws IllegalArgumentException if <code>orientation</code>
+     *		is not one of HORIZONTAL_SPLIT or VERTICAL_SPLIT
+     */
+    public UIFSplitPane(int orientation,
+                      boolean continuousLayout,
+                      Component leftComponent,
+                      Component rightComponent){
+        super(orientation, continuousLayout, leftComponent, rightComponent);
+        dividerBorderVisible = false;
+    }
+    
+    
+    /**
+     * Constructs a <code>UIFSplitPane</code>, 
+     * i.e. a <code>JSplitPane</code> that has no borders.
+     * Also disabled the one touch exandable property.
+     * 
+     * @param orientation  <code>JSplitPane.HORIZONTAL_SPLIT</code> or
+     *                        <code>JSplitPane.VERTICAL_SPLIT</code>
+     * @param leftComponent the <code>Component</code> that will
+     *    appear on the left of a horizontally-split pane, 
+     *    or at the top of a vertically-split pane
+     * @param rightComponent the <code>Component</code> that will
+     *    appear on the right of a horizontally-split pane, 
+     *    or at the bottom of a	vertically-split pane
+     * @throws IllegalArgumentException if <code>orientation</code>
+     *    is not one of: HORIZONTAL_SPLIT or VERTICAL_SPLIT
+     */
+    public static UIFSplitPane createStrippedSplitPane(
+             int orientation,
+             Component leftComponent,
+             Component rightComponent) {
+        UIFSplitPane split = new UIFSplitPane(orientation, leftComponent, rightComponent);
+        split.setBorder(EMPTY_BORDER);
+        split.setOneTouchExpandable(false);
+        return split;
+    }
+    
+    
+    // Accessing Properties **************************************************
+    
+    /**
+     * Checks and answers whether the divider border shall be visible 
+     * or invisible. 
+     * Note that this feature is not supported by all look&feels.
+     * Some look&feel implementation will always show a divider border, 
+     * and conversely, others will never show a divider border.
+     * 
+     * @return the desired (but potentially inaccurate) divider border visiblity
+     */
+    public boolean isDividerBorderVisible() {
+        return dividerBorderVisible;
+    }
+    
+    
+    /**
+     * Makes the divider border visible or invisible.
+     * Note that this feature is not supported by all look&feels.
+     * Some look&feel implementation will always show a divider border, 
+     * and conversely, others will never show a divider border.
+     * 
+     * @param newVisibility   true for visible, false for invisible
+     */
+    public void setDividerBorderVisible(boolean newVisibility) {
+        boolean oldVisibility = isDividerBorderVisible();
+        if (oldVisibility == newVisibility)
+            return;
+        dividerBorderVisible = newVisibility;
+        firePropertyChange(PROPERTYNAME_DIVIDER_BORDER_VISIBLE, 
+                           oldVisibility, 
+                           newVisibility);
+    }
+    
+
+    // Changing the Divider Border Visibility *********************************
+    
+    /**
+     * Updates the UI and sets an empty divider border. The divider border
+     * may be restored by a L&F at UI installation time. And so, we
+     * try to reset it each time the UI is changed.
+     */
+    public void updateUI() {
+        super.updateUI();
+        if (!isDividerBorderVisible())
+            setEmptyDividerBorder();
+    }
+    
+
+    /**
+     * Sets an empty divider border if and only if the UI is 
+     * an instance of <code>BasicSplitPaneUI</code>.
+     */
+    private void setEmptyDividerBorder() {
+        SplitPaneUI splitPaneUI = getUI();
+        if (splitPaneUI instanceof BasicSplitPaneUI) {
+            BasicSplitPaneUI basicUI = (BasicSplitPaneUI) splitPaneUI;
+            basicUI.getDivider().setBorder(EMPTY_BORDER);
+        }
+    }
+    
+    
 }
\ No newline at end of file
diff --git a/src/java/com/jgoodies/uif_lite/panel/SimpleInternalFrame.java b/src/java/com/jgoodies/uif_lite/panel/SimpleInternalFrame.java
index f9ac22f..8074dd4 100644
--- a/src/java/com/jgoodies/uif_lite/panel/SimpleInternalFrame.java
+++ b/src/java/com/jgoodies/uif_lite/panel/SimpleInternalFrame.java
@@ -1,475 +1,475 @@
-/*
- * Copyright (c) 2003 JGoodies Karsten Lentzsch. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions are met:
- * 
- *  o Redistributions of source code must retain the above copyright notice, 
- *    this list of conditions and the following disclaimer. 
- *     
- *  o Redistributions in binary form must reproduce the above copyright notice, 
- *    this list of conditions and the following disclaimer in the documentation 
- *    and/or other materials provided with the distribution. 
- *     
- *  o Neither the name of JGoodies Karsten Lentzsch nor the names of 
- *    its contributors may be used to endorse or promote products derived 
- *    from this software without specific prior written permission. 
- *     
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-package com.jgoodies.uif_lite.panel;
-
-import com.jgoodies.looks.LookUtils;
-
-import java.awt.*;
-
-import javax.swing.*;
-import javax.swing.border.AbstractBorder;
-
-
-/** 
- * A <code>JPanel</code> subclass that has a drop shadow border and 
- * that provides a header with icon, title and tool bar.<p>
- * 
- * This class can be used to replace the <code>JInternalFrame</code>,
- * for use outside of a <code>JDesktopPane</code>. 
- * The <code>SimpleInternalFrame</code> is less flexible but often
- * more usable; it avoids overlapping windows and scales well 
- * up to IDE size.
- * Several customers have reported that they and their clients feel 
- * much better with both the appearance and the UI feel.<p>
- * 
- * The SimpleInternalFrame provides the following bound properties:
- * <i>frameIcon, title, toolBar, content, selected.</i><p>
- * 
- * By default the SimpleInternalFrame is in <i>selected</i> state.
- * If you don't do anything, multiple simple internal frames will
- * be displayed as selected.
- * 
- * @author Karsten Lentzsch
- * @version $Revision$
- * 
- * @see    javax.swing.JInternalFrame
- * @see    javax.swing.JDesktopPane
- */
-
-public class SimpleInternalFrame extends JPanel {
-
-    private JLabel          titleLabel;
-    private GradientPanel   gradientPanel;
-    private JPanel          headerPanel;
-    private boolean        isSelected;
-    
-    
-    // Instance Creation ****************************************************
-
-    /**
-     * Constructs a <code>SimpleInternalFrame</code> with the specified title.
-     * 
-     * @param title       the initial title
-     */
-    public SimpleInternalFrame(String title) {
-        this(null, title, null, null);
-    }
-    
-    
-    /**
-     * Constructs a <code>SimpleInternalFrame</code> with the specified 
-     * icon, and title.
-     * 
-     * @param icon        the initial icon
-     * @param title       the initial title
-     */
-    public SimpleInternalFrame(Icon icon, String title) {
-        this(icon, title, null, null);
-    }
-
-    
-    /**
-     * Constructs a <code>SimpleInternalFrame</code> with the specified 
-     * title, tool bar, and content panel.
-     * 
-     * @param title       the initial title
-     * @param bar         the initial tool bar
-     * @param content     the initial content pane
-     */
-    public SimpleInternalFrame(String title, JToolBar bar, JComponent content) {
-        this(null, title, bar, content);
-    }
-    
-
-    /**
-     * Constructs a <code>SimpleInternalFrame</code> with the specified 
-     * icon, title, tool bar, and content panel.
-     * 
-     * @param icon        the initial icon
-     * @param title       the initial title
-     * @param bar         the initial tool bar
-     * @param content     the initial content pane
-     */
-    public SimpleInternalFrame(
-        Icon icon,
-        String title,
-        JToolBar bar,
-        JComponent content) {
-        super(new BorderLayout());
-        this.isSelected = false;
-        this.titleLabel = new JLabel(title, icon, SwingConstants.LEADING);
-        JPanel top = buildHeader(titleLabel, bar);
-
-        add(top, BorderLayout.NORTH);
-        if (content != null) {
-            setContent(content);
-        }
-        setBorder(new ShadowBorder());
-        setSelected(true);
-        updateHeader();
-    }
-
-    
-    // Public API ***********************************************************
-
-    /**
-     * Returns the frame's icon.
-     * 
-     * @return the frame's icon
-     */
-    public Icon getFrameIcon() {
-        return titleLabel.getIcon();
-    }
-    
-
-    /**
-     * Sets a new frame icon.
-     * 
-     * @param newIcon   the icon to be set
-     */
-    public void setFrameIcon(Icon newIcon) {
-        Icon oldIcon = getFrameIcon();
-        titleLabel.setIcon(newIcon);
-        firePropertyChange("frameIcon", oldIcon, newIcon);
-    }
-    
-
-    /**
-     * Returns the frame's title text.
-     * 
-     * @return String   the current title text
-     */
-    public String getTitle() {
-        return titleLabel.getText();
-    }
-    
-    
-    /**
-     * Sets a new title text.
-     * 
-     * @param newText  the title text tp be set
-     */
-    public void setTitle(String newText) {
-        String oldText = getTitle();
-        titleLabel.setText(newText);
-        firePropertyChange("title", oldText, newText);
-    }
-    
-    
-    /**
-     * Returns the current toolbar, null if none has been set before.
-     * 
-     * @return the current toolbar - if any
-     */
-    public JToolBar getToolBar() {
-        return headerPanel.getComponentCount() > 1
-            ? (JToolBar) headerPanel.getComponent(1)
-            : null;
-    }
-    
-
-    /**
-     * Sets a new tool bar in the header.
-     * 
-     * @param newToolBar the tool bar to be set in the header
-     */
-    public void setToolBar(JToolBar newToolBar) {
-        JToolBar oldToolBar = getToolBar();
-        if (oldToolBar == newToolBar) {
-            return;
-        }
-        if (oldToolBar != null) {
-            headerPanel.remove(oldToolBar);
-        }
-        if (newToolBar != null) {
-            newToolBar.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
-            headerPanel.add(newToolBar, BorderLayout.EAST);
-        }
-        updateHeader();
-        firePropertyChange("toolBar", oldToolBar, newToolBar);
-    }
-
-    
-    /**
-     * Returns the content - null, if none has been set.
-     * 
-     * @return the current content
-     */
-    public Component getContent() {
-        return hasContent() ? getComponent(1) : null;
-    }
-    
-    
-    /**
-     * Sets a new panel content; replaces any existing content, if existing.
-     * 
-     * @param newContent   the panel's new content
-     */
-    public void setContent(Component newContent) {
-        Component oldContent = getContent();
-        if (hasContent()) {
-            remove(oldContent);
-        }
-        add(newContent, BorderLayout.CENTER);
-        firePropertyChange("content", oldContent, newContent);
-    }
-    
-
-    /**
-     * Answers if the panel is currently selected (or in other words active)
-     * or not. In the selected state, the header background will be
-     * rendered differently.
-     * 
-     * @return boolean  a boolean, where true means the frame is selected 
-     *                  (currently active) and false means it is not  
-     */
-    public boolean isSelected() {
-        return isSelected;
-    }
-    
-    
-    /**
-     * This panel draws its title bar differently if it is selected,
-     * which may be used to indicate to the user that this panel
-     * has the focus, or should get more attention than other
-     * simple internal frames.
-     *
-     * @param newValue  a boolean, where true means the frame is selected 
-     *                  (currently active) and false means it is not
-     */
-    public void setSelected(boolean newValue) {
-        boolean oldValue = isSelected();
-        isSelected = newValue;
-        updateHeader();
-        firePropertyChange("selected", oldValue, newValue);
-    }
-    
-
-    // Building *************************************************************
-
-    /**
-     * Creates and answers the header panel, that consists of:
-     * an icon, a title label, a tool bar, and a gradient background.
-     * 
-     * @param label   the label to paint the icon and text
-     * @param bar     the panel's tool bar
-     * @return the panel's built header area
-     */
-    private JPanel buildHeader(JLabel label, JToolBar bar) {
-        gradientPanel =
-            new GradientPanel(new BorderLayout(), getHeaderBackground());
-        label.setOpaque(false);
-
-        gradientPanel.add(label, BorderLayout.WEST);
-        gradientPanel.setBorder(BorderFactory.createEmptyBorder(3, 4, 3, 1));
-
-        headerPanel = new JPanel(new BorderLayout());
-        headerPanel.add(gradientPanel, BorderLayout.CENTER);
-        setToolBar(bar);
-        headerPanel.setBorder(new RaisedHeaderBorder());
-        headerPanel.setOpaque(false);
-        return headerPanel;
-    }
-
-    /**
-     * Updates the header.
-     */
-    private void updateHeader() {
-        gradientPanel.setBackground(getHeaderBackground());
-        gradientPanel.setOpaque(isSelected());
-        titleLabel.setForeground(getTextForeground(isSelected()));
-        headerPanel.repaint();
-    }
-    
-
-    /**
-     * Updates the UI. In addition to the superclass behavior, we need
-     * to update the header component.
-     */
-    public void updateUI() {
-        super.updateUI();
-        if (titleLabel != null) {
-            updateHeader();
-        }
-    }
-
-
-    // Helper Code **********************************************************
-
-    /**
-     * Checks and answers if the panel has a content component set.
-     * 
-     * @return true if the panel has a content, false if it's empty
-     */
-    private boolean hasContent() {
-        return getComponentCount() > 1;
-    }
-    
-    /**
-     * Determines and answers the header's text foreground color.
-     * Tries to lookup a special color from the L&F.
-     * In case it is absent, it uses the standard internal frame forground.
-     * 
-     * @param selected   true to lookup the active color, false for the inactive
-     * @return the color of the foreground text
-     */
-    protected Color getTextForeground(boolean selected) {
-        Color c =
-            UIManager.getColor(
-                selected
-                    ? "SimpleInternalFrame.activeTitleForeground"
-                    : "SimpleInternalFrame.inactiveTitleForeground");
-        if (c != null) {
-            return c;
-        }
-        return UIManager.getColor(
-            selected 
-                ? "InternalFrame.activeTitleForeground" 
-                : "Label.foreground");
-
-    }
-
-    /**
-     * Determines and answers the header's background color.
-     * Tries to lookup a special color from the L&F.
-     * In case it is absent, it uses the standard internal frame background.
-     * 
-     * @return the color of the header's background
-     */
-    protected Color getHeaderBackground() {
-        
-        Color c =
-            UIManager.getColor("SimpleInternalFrame.activeTitleBackground");
-        if (c != null)
-            return c;
-        if (LookUtils.IS_OS_WINDOWS_MODERN)
-            c = UIManager.getColor("InternalFrame.activeTitleGradient");
-        return c != null
-            ? c
-            : UIManager.getColor("InternalFrame.activeTitleBackground");
-    }
-
-
-    // Helper Classes *******************************************************
-
-    // A custom border for the raised header pseudo 3D effect.
-    private static class RaisedHeaderBorder extends AbstractBorder {
-
-        private static final Insets INSETS = new Insets(1, 1, 1, 0);
-
-        public Insets getBorderInsets(Component c) { return INSETS; }
-
-        public void paintBorder(Component c, Graphics g,
-            int x, int y, int w, int h) {
-                
-            g.translate(x, y);
-            g.setColor(UIManager.getColor("controlLtHighlight"));
-            g.fillRect(0, 0,   w, 1);
-            g.fillRect(0, 1,   1, h-1);
-            g.setColor(UIManager.getColor("controlShadow"));
-            g.fillRect(0, h-1, w, 1);
-            g.translate(-x, -y);
-        }
-    }
-
-    // A custom border that has a shadow on the right and lower sides.
-    private static class ShadowBorder extends AbstractBorder {
-
-        private static final Insets INSETS = new Insets(1, 1, 3, 3);
-
-        public Insets getBorderInsets(Component c) { return INSETS; }
-
-        public void paintBorder(Component c, Graphics g,
-            int x, int y, int w, int h) {
-                
-            Color shadow        = UIManager.getColor("controlShadow");
-            if (shadow == null) {
-                shadow = Color.GRAY;
-            }
-            Color lightShadow   = new Color(shadow.getRed(), 
-                                            shadow.getGreen(), 
-                                            shadow.getBlue(), 
-                                            170);
-            Color lighterShadow = new Color(shadow.getRed(),
-                                            shadow.getGreen(),
-                                            shadow.getBlue(),
-                                            70);
-            g.translate(x, y);
-            
-            g.setColor(shadow);
-            g.fillRect(0, 0, w - 3, 1);
-            g.fillRect(0, 0, 1, h - 3);
-            g.fillRect(w - 3, 1, 1, h - 3);
-            g.fillRect(1, h - 3, w - 3, 1);
-            // Shadow line 1
-            g.setColor(lightShadow);
-            g.fillRect(w - 3, 0, 1, 1);
-            g.fillRect(0, h - 3, 1, 1);
-            g.fillRect(w - 2, 1, 1, h - 3);
-            g.fillRect(1, h - 2, w - 3, 1);
-            // Shadow line2
-            g.setColor(lighterShadow);
-            g.fillRect(w - 2, 0, 1, 1);
-            g.fillRect(0, h - 2, 1, 1);
-            g.fillRect(w-2, h-2, 1, 1);
-            g.fillRect(w - 1, 1, 1, h - 2);
-            g.fillRect(1, h - 1, w - 2, 1);
-            g.translate(-x, -y);
-        }
-    }
-
-    // A panel with a horizontal gradient background.
-    private static class GradientPanel extends JPanel {
-        
-        private GradientPanel(LayoutManager lm, Color background) {
-            super(lm);
-            setBackground(background);
-        }
-
-        public void paintComponent(Graphics g) {
-            super.paintComponent(g);
-            if (!isOpaque()) {
-                return;
-            }
-            Color control = UIManager.getColor("control");
-            int width  = getWidth();
-            int height = getHeight();
-
-            Graphics2D g2 = (Graphics2D) g;
-            Paint storedPaint = g2.getPaint();
-            g2.setPaint(
-                new GradientPaint(0, 0, getBackground(), width, 0, control));
-            g2.fillRect(0, 0, width, height);
-            g2.setPaint(storedPaint);
-        }
-    }
-
+/*
+ * Copyright (c) 2003 JGoodies Karsten Lentzsch. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ *  o Redistributions of source code must retain the above copyright notice, 
+ *    this list of conditions and the following disclaimer. 
+ *     
+ *  o Redistributions in binary form must reproduce the above copyright notice, 
+ *    this list of conditions and the following disclaimer in the documentation 
+ *    and/or other materials provided with the distribution. 
+ *     
+ *  o Neither the name of JGoodies Karsten Lentzsch nor the names of 
+ *    its contributors may be used to endorse or promote products derived 
+ *    from this software without specific prior written permission. 
+ *     
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+package com.jgoodies.uif_lite.panel;
+
+import com.jgoodies.looks.LookUtils;
+
+import java.awt.*;
+
+import javax.swing.*;
+import javax.swing.border.AbstractBorder;
+
+
+/** 
+ * A <code>JPanel</code> subclass that has a drop shadow border and 
+ * that provides a header with icon, title and tool bar.<p>
+ * 
+ * This class can be used to replace the <code>JInternalFrame</code>,
+ * for use outside of a <code>JDesktopPane</code>. 
+ * The <code>SimpleInternalFrame</code> is less flexible but often
+ * more usable; it avoids overlapping windows and scales well 
+ * up to IDE size.
+ * Several customers have reported that they and their clients feel 
+ * much better with both the appearance and the UI feel.<p>
+ * 
+ * The SimpleInternalFrame provides the following bound properties:
+ * <i>frameIcon, title, toolBar, content, selected.</i><p>
+ * 
+ * By default the SimpleInternalFrame is in <i>selected</i> state.
+ * If you don't do anything, multiple simple internal frames will
+ * be displayed as selected.
+ * 
+ * @author Karsten Lentzsch
+ * @version $Revision$
+ * 
+ * @see    javax.swing.JInternalFrame
+ * @see    javax.swing.JDesktopPane
+ */
+
+public class SimpleInternalFrame extends JPanel {
+
+    private JLabel          titleLabel;
+    private GradientPanel   gradientPanel;
+    private JPanel          headerPanel;
+    private boolean        isSelected;
+    
+    
+    // Instance Creation ****************************************************
+
+    /**
+     * Constructs a <code>SimpleInternalFrame</code> with the specified title.
+     * 
+     * @param title       the initial title
+     */
+    public SimpleInternalFrame(String title) {
+        this(null, title, null, null);
+    }
+    
+    
+    /**
+     * Constructs a <code>SimpleInternalFrame</code> with the specified 
+     * icon, and title.
+     * 
+     * @param icon        the initial icon
+     * @param title       the initial title
+     */
+    public SimpleInternalFrame(Icon icon, String title) {
+        this(icon, title, null, null);
+    }
+
+    
+    /**
+     * Constructs a <code>SimpleInternalFrame</code> with the specified 
+     * title, tool bar, and content panel.
+     * 
+     * @param title       the initial title
+     * @param bar         the initial tool bar
+     * @param content     the initial content pane
+     */
+    public SimpleInternalFrame(String title, JToolBar bar, JComponent content) {
+        this(null, title, bar, content);
+    }
+    
+
+    /**
+     * Constructs a <code>SimpleInternalFrame</code> with the specified 
+     * icon, title, tool bar, and content panel.
+     * 
+     * @param icon        the initial icon
+     * @param title       the initial title
+     * @param bar         the initial tool bar
+     * @param content     the initial content pane
+     */
+    public SimpleInternalFrame(
+        Icon icon,
+        String title,
+        JToolBar bar,
+        JComponent content) {
+        super(new BorderLayout());
+        this.isSelected = false;
+        this.titleLabel = new JLabel(title, icon, SwingConstants.LEADING);
+        JPanel top = buildHeader(titleLabel, bar);
+
+        add(top, BorderLayout.NORTH);
+        if (content != null) {
+            setContent(content);
+        }
+        setBorder(new ShadowBorder());
+        setSelected(true);
+        updateHeader();
+    }
+
+    
+    // Public API ***********************************************************
+
+    /**
+     * Returns the frame's icon.
+     * 
+     * @return the frame's icon
+     */
+    public Icon getFrameIcon() {
+        return titleLabel.getIcon();
+    }
+    
+
+    /**
+     * Sets a new frame icon.
+     * 
+     * @param newIcon   the icon to be set
+     */
+    public void setFrameIcon(Icon newIcon) {
+        Icon oldIcon = getFrameIcon();
+        titleLabel.setIcon(newIcon);
+        firePropertyChange("frameIcon", oldIcon, newIcon);
+    }
+    
+
+    /**
+     * Returns the frame's title text.
+     * 
+     * @return String   the current title text
+     */
+    public String getTitle() {
+        return titleLabel.getText();
+    }
+    
+    
+    /**
+     * Sets a new title text.
+     * 
+     * @param newText  the title text tp be set
+     */
+    public void setTitle(String newText) {
+        String oldText = getTitle();
+        titleLabel.setText(newText);
+        firePropertyChange("title", oldText, newText);
+    }
+    
+    
+    /**
+     * Returns the current toolbar, null if none has been set before.
+     * 
+     * @return the current toolbar - if any
+     */
+    public JToolBar getToolBar() {
+        return headerPanel.getComponentCount() > 1
+            ? (JToolBar) headerPanel.getComponent(1)
+            : null;
+    }
+    
+
+    /**
+     * Sets a new tool bar in the header.
+     * 
+     * @param newToolBar the tool bar to be set in the header
+     */
+    public void setToolBar(JToolBar newToolBar) {
+        JToolBar oldToolBar = getToolBar();
+        if (oldToolBar == newToolBar) {
+            return;
+        }
+        if (oldToolBar != null) {
+            headerPanel.remove(oldToolBar);
+        }
+        if (newToolBar != null) {
+            newToolBar.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
+            headerPanel.add(newToolBar, BorderLayout.EAST);
+        }
+        updateHeader();
+        firePropertyChange("toolBar", oldToolBar, newToolBar);
+    }
+
+    
+    /**
+     * Returns the content - null, if none has been set.
+     * 
+     * @return the current content
+     */
+    public Component getContent() {
+        return hasContent() ? getComponent(1) : null;
+    }
+    
+    
+    /**
+     * Sets a new panel content; replaces any existing content, if existing.
+     * 
+     * @param newContent   the panel's new content
+     */
+    public void setContent(Component newContent) {
+        Component oldContent = getContent();
+        if (hasContent()) {
+            remove(oldContent);
+        }
+        add(newContent, BorderLayout.CENTER);
+        firePropertyChange("content", oldContent, newContent);
+    }
+    
+
+    /**
+     * Answers if the panel is currently selected (or in other words active)
+     * or not. In the selected state, the header background will be
+     * rendered differently.
+     * 
+     * @return boolean  a boolean, where true means the frame is selected 
+     *                  (currently active) and false means it is not  
+     */
+    public boolean isSelected() {
+        return isSelected;
+    }
+    
+    
+    /**
+     * This panel draws its title bar differently if it is selected,
+     * which may be used to indicate to the user that this panel
+     * has the focus, or should get more attention than other
+     * simple internal frames.
+     *
+     * @param newValue  a boolean, where true means the frame is selected 
+     *                  (currently active) and false means it is not
+     */
+    public void setSelected(boolean newValue) {
+        boolean oldValue = isSelected();
+        isSelected = newValue;
+        updateHeader();
+        firePropertyChange("selected", oldValue, newValue);
+    }
+    
+
+    // Building *************************************************************
+
+    /**
+     * Creates and answers the header panel, that consists of:
+     * an icon, a title label, a tool bar, and a gradient background.
+     * 
+     * @param label   the label to paint the icon and text
+     * @param bar     the panel's tool bar
+     * @return the panel's built header area
+     */
+    private JPanel buildHeader(JLabel label, JToolBar bar) {
+        gradientPanel =
+            new GradientPanel(new BorderLayout(), getHeaderBackground());
+        label.setOpaque(false);
+
+        gradientPanel.add(label, BorderLayout.WEST);
+        gradientPanel.setBorder(BorderFactory.createEmptyBorder(3, 4, 3, 1));
+
+        headerPanel = new JPanel(new BorderLayout());
+        headerPanel.add(gradientPanel, BorderLayout.CENTER);
+        setToolBar(bar);
+        headerPanel.setBorder(new RaisedHeaderBorder());
+        headerPanel.setOpaque(false);
+        return headerPanel;
+    }
+
+    /**
+     * Updates the header.
+     */
+    private void updateHeader() {
+        gradientPanel.setBackground(getHeaderBackground());
+        gradientPanel.setOpaque(isSelected());
+        titleLabel.setForeground(getTextForeground(isSelected()));
+        headerPanel.repaint();
+    }
+    
+
+    /**
+     * Updates the UI. In addition to the superclass behavior, we need
+     * to update the header component.
+     */
+    public void updateUI() {
+        super.updateUI();
+        if (titleLabel != null) {
+            updateHeader();
+        }
+    }
+
+
+    // Helper Code **********************************************************
+
+    /**
+     * Checks and answers if the panel has a content component set.
+     * 
+     * @return true if the panel has a content, false if it's empty
+     */
+    private boolean hasContent() {
+        return getComponentCount() > 1;
+    }
+    
+    /**
+     * Determines and answers the header's text foreground color.
+     * Tries to lookup a special color from the L&F.
+     * In case it is absent, it uses the standard internal frame forground.
+     * 
+     * @param selected   true to lookup the active color, false for the inactive
+     * @return the color of the foreground text
+     */
+    protected Color getTextForeground(boolean selected) {
+        Color c =
+            UIManager.getColor(
+                selected
+                    ? "SimpleInternalFrame.activeTitleForeground"
+                    : "SimpleInternalFrame.inactiveTitleForeground");
+        if (c != null) {
+            return c;
+        }
+        return UIManager.getColor(
+            selected 
+                ? "InternalFrame.activeTitleForeground" 
+                : "Label.foreground");
+
+    }
+
+    /**
+     * Determines and answers the header's background color.
+     * Tries to lookup a special color from the L&F.
+     * In case it is absent, it uses the standard internal frame background.
+     * 
+     * @return the color of the header's background
+     */
+    protected Color getHeaderBackground() {
+        
+        Color c =
+            UIManager.getColor("SimpleInternalFrame.activeTitleBackground");
+        if (c != null)
+            return c;
+        if (LookUtils.IS_OS_WINDOWS_MODERN)
+            c = UIManager.getColor("InternalFrame.activeTitleGradient");
+        return c != null
+            ? c
+            : UIManager.getColor("InternalFrame.activeTitleBackground");
+    }
+
+
+    // Helper Classes *******************************************************
+
+    // A custom border for the raised header pseudo 3D effect.
+    private static class RaisedHeaderBorder extends AbstractBorder {
+
+        private static final Insets INSETS = new Insets(1, 1, 1, 0);
+
+        public Insets getBorderInsets(Component c) { return INSETS; }
+
+        public void paintBorder(Component c, Graphics g,
+            int x, int y, int w, int h) {
+                
+            g.translate(x, y);
+            g.setColor(UIManager.getColor("controlLtHighlight"));
+            g.fillRect(0, 0,   w, 1);
+            g.fillRect(0, 1,   1, h-1);
+            g.setColor(UIManager.getColor("controlShadow"));
+            g.fillRect(0, h-1, w, 1);
+            g.translate(-x, -y);
+        }
+    }
+
+    // A custom border that has a shadow on the right and lower sides.
+    private static class ShadowBorder extends AbstractBorder {
+
+        private static final Insets INSETS = new Insets(1, 1, 3, 3);
+
+        public Insets getBorderInsets(Component c) { return INSETS; }
+
+        public void paintBorder(Component c, Graphics g,
+            int x, int y, int w, int h) {
+                
+            Color shadow        = UIManager.getColor("controlShadow");
+            if (shadow == null) {
+                shadow = Color.GRAY;
+            }
+            Color lightShadow   = new Color(shadow.getRed(), 
+                                            shadow.getGreen(), 
+                                            shadow.getBlue(), 
+                                            170);
+            Color lighterShadow = new Color(shadow.getRed(),
+                                            shadow.getGreen(),
+                                            shadow.getBlue(),
+                                            70);
+            g.translate(x, y);
+            
+            g.setColor(shadow);
+            g.fillRect(0, 0, w - 3, 1);
+            g.fillRect(0, 0, 1, h - 3);
+            g.fillRect(w - 3, 1, 1, h - 3);
+            g.fillRect(1, h - 3, w - 3, 1);
+            // Shadow line 1
+            g.setColor(lightShadow);
+            g.fillRect(w - 3, 0, 1, 1);
+            g.fillRect(0, h - 3, 1, 1);
+            g.fillRect(w - 2, 1, 1, h - 3);
+            g.fillRect(1, h - 2, w - 3, 1);
+            // Shadow line2
+            g.setColor(lighterShadow);
+            g.fillRect(w - 2, 0, 1, 1);
+            g.fillRect(0, h - 2, 1, 1);
+            g.fillRect(w-2, h-2, 1, 1);
+            g.fillRect(w - 1, 1, 1, h - 2);
+            g.fillRect(1, h - 1, w - 2, 1);
+            g.translate(-x, -y);
+        }
+    }
+
+    // A panel with a horizontal gradient background.
+    private static class GradientPanel extends JPanel {
+        
+        private GradientPanel(LayoutManager lm, Color background) {
+            super(lm);
+            setBackground(background);
+        }
+
+        public void paintComponent(Graphics g) {
+            super.paintComponent(g);
+            if (!isOpaque()) {
+                return;
+            }
+            Color control = UIManager.getColor("control");
+            int width  = getWidth();
+            int height = getHeight();
+
+            Graphics2D g2 = (Graphics2D) g;
+            Paint storedPaint = g2.getPaint();
+            g2.setPaint(
+                new GradientPaint(0, 0, getBackground(), width, 0, control));
+            g2.fillRect(0, 0, width, height);
+            g2.setPaint(storedPaint);
+        }
+    }
+
 }
\ No newline at end of file
diff --git a/src/java/gnu/dtools/ritopt/ArrayOption.java b/src/java/gnu/dtools/ritopt/ArrayOption.java
index 1b4016f..864404d 100644
--- a/src/java/gnu/dtools/ritopt/ArrayOption.java
+++ b/src/java/gnu/dtools/ritopt/ArrayOption.java
@@ -1,85 +1,85 @@
-package gnu.dtools.ritopt;
-
-import java.util.List;
-
-/**
- * ArrayOption.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * The principal base class used to register option variables that represent
- * arrays or Collections. Array options are useful for options which represent
- * path lists or file specifications.
- * <p>
- * 
- * The preferred derived sub-class implementation is to provide a constructor
- * with a single array parameter to allow for simple registration. For example,
- * an ArrayOption derived class for int arrays should implement the following
- * constructor and accessor.
- * 
- * <pre>
- *   MyIntArrayOption( int array[] );
- *   int[] getValue();
- * </pre>
- * 
- * Although this has no affect on option processing, following this philosophy
- * for the public interfaces make it easier for the programmer to use your
- * source code.
- * 
- * <hr>
- * 
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- * 
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * 
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- * 
- * @author Damian Ryan Eads
- */
-
-public abstract class ArrayOption extends Option implements OptionArrayable {
-
-	/**
-	 * Builds and initializes ArrayOption class members, and invokes the Option
-	 * constructor.
-	 */
-
-	public ArrayOption() {
-		super();
-	}
-
-	/**
-	 * Get an ArrayOption in array form. If the option value is an array of
-	 * primitive values, references to wrapper objects are returned.
-	 * 
-	 * @return An array of objects representing the option's value.
-	 */
-
-	public abstract Object[] getObjectArray();
-
-	/**
-	 * Get a list of objects representing the elements of this array option.
-	 * 
-	 * @return A list of objects representing the option's value.
-	 */
-
-	public List<Object> getObjectList() {
-		return java.util.Arrays.asList(getObjectArray());
-	}
-
-}
+package gnu.dtools.ritopt;
+
+import java.util.List;
+
+/**
+ * ArrayOption.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * The principal base class used to register option variables that represent
+ * arrays or Collections. Array options are useful for options which represent
+ * path lists or file specifications.
+ * <p>
+ * 
+ * The preferred derived sub-class implementation is to provide a constructor
+ * with a single array parameter to allow for simple registration. For example,
+ * an ArrayOption derived class for int arrays should implement the following
+ * constructor and accessor.
+ * 
+ * <pre>
+ *   MyIntArrayOption( int array[] );
+ *   int[] getValue();
+ * </pre>
+ * 
+ * Although this has no affect on option processing, following this philosophy
+ * for the public interfaces make it easier for the programmer to use your
+ * source code.
+ * 
+ * <hr>
+ * 
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ * 
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ * 
+ * @author Damian Ryan Eads
+ */
+
+public abstract class ArrayOption extends Option implements OptionArrayable {
+
+	/**
+	 * Builds and initializes ArrayOption class members, and invokes the Option
+	 * constructor.
+	 */
+
+	public ArrayOption() {
+		super();
+	}
+
+	/**
+	 * Get an ArrayOption in array form. If the option value is an array of
+	 * primitive values, references to wrapper objects are returned.
+	 * 
+	 * @return An array of objects representing the option's value.
+	 */
+
+	public abstract Object[] getObjectArray();
+
+	/**
+	 * Get a list of objects representing the elements of this array option.
+	 * 
+	 * @return A list of objects representing the option's value.
+	 */
+
+	public List<Object> getObjectList() {
+		return java.util.Arrays.asList(getObjectArray());
+	}
+
+}
diff --git a/src/java/gnu/dtools/ritopt/BooleanOption.java b/src/java/gnu/dtools/ritopt/BooleanOption.java
index 50b3274..1ade427 100644
--- a/src/java/gnu/dtools/ritopt/BooleanOption.java
+++ b/src/java/gnu/dtools/ritopt/BooleanOption.java
@@ -1,245 +1,245 @@
-package gnu.dtools.ritopt;
-
-/**
- * BooleanOption.java
- *
- * Version:
- *     $Id$
- */
-
-/**
- * This class is used for options with boolean values. There are several
- * ways to invoke a boolean option at the command line.<p>
- *
- * For example, a plus (true) or minus (false) sign directly after the short
- * or long option may be used.<p>
- * <pre>
- *  myprogram -a+ -b- --longa+ --longb-
- * </pre>
- * The following keywords may be used to invoke an option using the assignment
- * form.
- * <ul>
- *  <li>+
- *  <li>-
- *  <li>true
- *  <li>false
- *  <li>yes
- *  <li>no
- *  <li>on
- *  <li>off
- *  <li>activated
- *  <li>not activated
- *  <li>active
- *  <li>inactive
- * </ul>
- * To invoke an option using assignment form where <value> is the <value> of
- * the option, use the following syntax.<p>
- * <pre>
- *  myprogram -a=<keyword> -b <keyword> --longa=<keyword> --longb=<keyword>
- * </pre>
- * Invoking a boolean option without using any of the aforementioned
- * keywords and forms will set the option to true by default.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class BooleanOption extends Option {
-
-    /**
-     * The value of the boolean option.
-     */
-
-    private boolean value;
-
-    /**
-     * Constructs a boolean option that is initially false.
-     */
-
-    public BooleanOption() {
-	this( false );
-    }
-
-    /**
-     * Constructs a boolean option by copying the boolean option passed.
-     *
-     * @param op     The boolean option to copy.
-     */
-
-    public BooleanOption( BooleanOption op ) {
-	super( op );
-	op.value = op.getValue();
-    }
-
-    /**
-     * Constructs a boolean option initialized with the value passed.
-     *
-     * @param value    The initial value of this boolean option.
-     */
-
-    public BooleanOption( boolean value ) {
-	this( value, null );
-    }
-
-    /**
-     * Constructs a boolean option initialized with the value and
-     * long option passed.
-     *
-     * @param value      The initial value of this boolean option.
-     * @param longOption The long option associated with this option.
-     */
-
-    public BooleanOption( boolean value, String longOption ) {
-	this( value, longOption, '\0' );
-    }
-
-    /**
-     * Constructs a boolean option initialized with the value and short
-     * option passed.
-     *
-     * @param value       The initial value of this boolean option.
-     * @param shortOption The short option associated with this option.
-     */
-
-    public BooleanOption( boolean value, char shortOption ) {
-	this( value, null, shortOption );
-    }
-
-    /**
-     * Constructs a boolean option initialized with the value, short
-     * and long option passed.
-     *
-     * @param shortOption The short option associated with this option.
-     * @param longOption  The long option associated with this option.
-     * @param value       The initial value of this boolean option.
-     */
-
-    public BooleanOption( boolean value, String longOption, char shortOption ) {
-	super( longOption, shortOption );
-	this.value = value;
-    }
-
-    /**
-     * Return the value as an object.
-     *
-     * @return This value as an option.
-     */
-
-    public Object getObject() {
-	return Boolean.valueOf(value);
-    }
-
-    /**
-     * Modify this option based on a string representation. Acceptable values
-     * are +, -, true, false, yes, no, on, off, activated, not activated,
-     * active, and inactive.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void modify( String value ) throws OptionModificationException {
-	String val = value.toUpperCase();
-	this.value = false;
-	if ( val.equals( "+" ) || val.equals( "TRUE" ) ||
-	     val.equals( "YES" ) || val.equals( "ON" ) ||
-	     val.equals( "ACTIVATED" ) || val.equals( "ACTIVE" ) ) {
-	    this.value = true;
-	}
-	else if ( val.equals( "-" ) || val.equals( "FALSE" ) ||
-		  val.equals( "NO" ) || val.equals( "OFF" ) ||
-		  val.equals( "NOT ACTIVATED" ) ||
-		  val.equals( "INACTIVE" ) ) {
-	    this.value = false;
-	}
-	else {
-	    throw new OptionModificationException( "Error. A boolean value of\n+/-/true/false/yes/no/on/off/activated/not activated/active/inactive must be\nspecified, not '" + value + "'." );
-	}
-    }
-
-    /**
-     * Modify this option based on a string representation. Acceptable values
-     * are +, -, true, false, yes, no, on, off, activated, not activated,
-     * active, inactive.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void setValue( String value ) throws OptionModificationException {
-	modify( value );
-    }
-
-    /**
-     * Modify this option using a boolean value.
-     *
-     * @param     value A boolean value.
-     */
-
-    public void setValue( boolean value ) {
-	this.value = value;
-    }
-
-    /**
-     * Return this option as a boolean.
-     *
-     * @return This option as a boolean.
-     */
-
-    public boolean getValue() {
-	return value;
-    }
-
-    /**
-     * Return this option as a string.
-     *
-     * @return This option as a string.
-     */
-
-    public String getStringValue() {
-	return ( value ) ? "TRUE" : "FALSE";
-    }
-
-    /**
-     * Returns the type name of this option. For a BooleanOption, "BOOLEAN"
-     * is returned.
-     *
-     * @return The type name of this option.
-     */
-
-    public String getTypeName() {
-	return "BOOLEAN";
-    }
-
-    /**
-     * Returns a string representation of this object.
-     *
-     * @return A string representation of this object.
-     */
-
-    public String toString() {
-	return getStringValue();
-    }
-
-} /** BooleanOption */
+package gnu.dtools.ritopt;
+
+/**
+ * BooleanOption.java
+ *
+ * Version:
+ *     $Id$
+ */
+
+/**
+ * This class is used for options with boolean values. There are several
+ * ways to invoke a boolean option at the command line.<p>
+ *
+ * For example, a plus (true) or minus (false) sign directly after the short
+ * or long option may be used.<p>
+ * <pre>
+ *  myprogram -a+ -b- --longa+ --longb-
+ * </pre>
+ * The following keywords may be used to invoke an option using the assignment
+ * form.
+ * <ul>
+ *  <li>+
+ *  <li>-
+ *  <li>true
+ *  <li>false
+ *  <li>yes
+ *  <li>no
+ *  <li>on
+ *  <li>off
+ *  <li>activated
+ *  <li>not activated
+ *  <li>active
+ *  <li>inactive
+ * </ul>
+ * To invoke an option using assignment form where <value> is the <value> of
+ * the option, use the following syntax.<p>
+ * <pre>
+ *  myprogram -a=<keyword> -b <keyword> --longa=<keyword> --longb=<keyword>
+ * </pre>
+ * Invoking a boolean option without using any of the aforementioned
+ * keywords and forms will set the option to true by default.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class BooleanOption extends Option {
+
+    /**
+     * The value of the boolean option.
+     */
+
+    private boolean value;
+
+    /**
+     * Constructs a boolean option that is initially false.
+     */
+
+    public BooleanOption() {
+	this( false );
+    }
+
+    /**
+     * Constructs a boolean option by copying the boolean option passed.
+     *
+     * @param op     The boolean option to copy.
+     */
+
+    public BooleanOption( BooleanOption op ) {
+	super( op );
+	op.value = op.getValue();
+    }
+
+    /**
+     * Constructs a boolean option initialized with the value passed.
+     *
+     * @param value    The initial value of this boolean option.
+     */
+
+    public BooleanOption( boolean value ) {
+	this( value, null );
+    }
+
+    /**
+     * Constructs a boolean option initialized with the value and
+     * long option passed.
+     *
+     * @param value      The initial value of this boolean option.
+     * @param longOption The long option associated with this option.
+     */
+
+    public BooleanOption( boolean value, String longOption ) {
+	this( value, longOption, '\0' );
+    }
+
+    /**
+     * Constructs a boolean option initialized with the value and short
+     * option passed.
+     *
+     * @param value       The initial value of this boolean option.
+     * @param shortOption The short option associated with this option.
+     */
+
+    public BooleanOption( boolean value, char shortOption ) {
+	this( value, null, shortOption );
+    }
+
+    /**
+     * Constructs a boolean option initialized with the value, short
+     * and long option passed.
+     *
+     * @param shortOption The short option associated with this option.
+     * @param longOption  The long option associated with this option.
+     * @param value       The initial value of this boolean option.
+     */
+
+    public BooleanOption( boolean value, String longOption, char shortOption ) {
+	super( longOption, shortOption );
+	this.value = value;
+    }
+
+    /**
+     * Return the value as an object.
+     *
+     * @return This value as an option.
+     */
+
+    public Object getObject() {
+	return Boolean.valueOf(value);
+    }
+
+    /**
+     * Modify this option based on a string representation. Acceptable values
+     * are +, -, true, false, yes, no, on, off, activated, not activated,
+     * active, and inactive.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void modify( String value ) throws OptionModificationException {
+	String val = value.toUpperCase();
+	this.value = false;
+	if ( val.equals( "+" ) || val.equals( "TRUE" ) ||
+	     val.equals( "YES" ) || val.equals( "ON" ) ||
+	     val.equals( "ACTIVATED" ) || val.equals( "ACTIVE" ) ) {
+	    this.value = true;
+	}
+	else if ( val.equals( "-" ) || val.equals( "FALSE" ) ||
+		  val.equals( "NO" ) || val.equals( "OFF" ) ||
+		  val.equals( "NOT ACTIVATED" ) ||
+		  val.equals( "INACTIVE" ) ) {
+	    this.value = false;
+	}
+	else {
+	    throw new OptionModificationException( "Error. A boolean value of\n+/-/true/false/yes/no/on/off/activated/not activated/active/inactive must be\nspecified, not '" + value + "'." );
+	}
+    }
+
+    /**
+     * Modify this option based on a string representation. Acceptable values
+     * are +, -, true, false, yes, no, on, off, activated, not activated,
+     * active, inactive.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void setValue( String value ) throws OptionModificationException {
+	modify( value );
+    }
+
+    /**
+     * Modify this option using a boolean value.
+     *
+     * @param     value A boolean value.
+     */
+
+    public void setValue( boolean value ) {
+	this.value = value;
+    }
+
+    /**
+     * Return this option as a boolean.
+     *
+     * @return This option as a boolean.
+     */
+
+    public boolean getValue() {
+	return value;
+    }
+
+    /**
+     * Return this option as a string.
+     *
+     * @return This option as a string.
+     */
+
+    public String getStringValue() {
+	return ( value ) ? "TRUE" : "FALSE";
+    }
+
+    /**
+     * Returns the type name of this option. For a BooleanOption, "BOOLEAN"
+     * is returned.
+     *
+     * @return The type name of this option.
+     */
+
+    public String getTypeName() {
+	return "BOOLEAN";
+    }
+
+    /**
+     * Returns a string representation of this object.
+     *
+     * @return A string representation of this object.
+     */
+
+    public String toString() {
+	return getStringValue();
+    }
+
+} /** BooleanOption */
diff --git a/src/java/gnu/dtools/ritopt/ByteOption.java b/src/java/gnu/dtools/ritopt/ByteOption.java
index 1022f96..de44fa6 100644
--- a/src/java/gnu/dtools/ritopt/ByteOption.java
+++ b/src/java/gnu/dtools/ritopt/ByteOption.java
@@ -1,203 +1,203 @@
-package gnu.dtools.ritopt;
-
-/**
- * ByteOption.java
- *
- * Version:
- *     $Id$
- */
-
-/**
- * This class is used for options with byte values.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class ByteOption extends Option {
-
-    /**
-     * The value of this byte option.
-     */
-
-    private byte value;
-
-    /**
-     * Constructs a byte option that is set to the null character.
-     */
-
-    public ByteOption() {
-	this( (byte)0 );
-    }
-
-    /**
-     * Constructs a byte option by copying the byte option passed.
-     *
-     * @param op     The byte option to copy.
-     */
-
-    public ByteOption( ByteOption op ) {
-	super( op );
-	op.value = op.getValue();
-    }
-
-    /**
-     * Constructs a byte option initialized with the value passed.
-     *
-     * @param value    The initial value of this byte option.
-     */
-
-    public ByteOption( byte value ) {
-	this( value, null );
-    }
-
-    /**
-     * Constructs a byte option initialized with the value and
-     * long option passed.
-     *
-     * @param value      The initial value of this byte option.
-     * @param longOption The long option associated with this option.
-     */
-
-    public ByteOption( byte value, String longOption ) {
-	this( value, longOption, '\0' );
-    }
-
-    /**
-     * Constructs a byte option initialized with the value and short
-     * option passed.
-     *
-     * @param shortOption The short option associated with this option.
-     * @param value       The initial value of this byte option.
-     */
-
-    public ByteOption( byte value, char shortOption ) {
-	this( value, null, shortOption );
-    }
-
-    /**
-     * Constructs a byte option initialized with the value, short
-     * and long option passed.
-     *
-     * @param shortOption The short option associated with this option.
-     * @param longOption  The long option associated with this option.
-     * @param value       The initial value of this byte option.
-     */
-
-    public ByteOption( byte value, String longOption, char shortOption ) {
-	super( longOption, shortOption );
-	this.value = value;
-    }
-
-    /**
-     * Return the value as an object.
-     *
-     * @return This value as an option.
-     */
-
-    public Object getObject() {
-	return new Byte( value );
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void modify( String value ) throws OptionModificationException {
-	try {
-	    this.value = Byte.parseByte( value );
-	}
-	catch ( NumberFormatException e ) {
-	    throw new OptionModificationException( "Error. A byte must be"
-						   + " specified, not '"
-						   + value + "'." );
-	}
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void setValue( String value ) throws OptionModificationException {
-	modify( value );
-    }
-
-    /**
-     * Modify this option using a byte value.
-     *
-     * @param     value A byte value.
-     */
-
-    public void setValue( byte value ) {
-	this.value = value;
-    }
-
-    /**
-     * Return this option as a boolean.
-     *
-     * @return This option as a boolean.
-     */
-
-    public byte getValue() {
-	return value;
-    }
-
-    /**
-     * Return this option as a string.
-     *
-     * @return This option as a string.
-     */
-
-    public String getStringValue() {
-	return Byte.toString( value );
-    }
-
-    /**
-     * Returns the type name of this option. For a ByteOption, "BYTE"
-     * is returned.
-     *
-     * @return The type name of this option.
-     */
-
-    public String getTypeName() {
-	return "BYTE";
-    }
-
-    /**
-     * Returns a string representation of this object.
-     *
-     * @return A string representation of this object.
-     */
-
-    public String toString() {
-	return getStringValue();
-    }
-
-} /** ByteOption */
+package gnu.dtools.ritopt;
+
+/**
+ * ByteOption.java
+ *
+ * Version:
+ *     $Id$
+ */
+
+/**
+ * This class is used for options with byte values.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class ByteOption extends Option {
+
+    /**
+     * The value of this byte option.
+     */
+
+    private byte value;
+
+    /**
+     * Constructs a byte option that is set to the null character.
+     */
+
+    public ByteOption() {
+	this( (byte)0 );
+    }
+
+    /**
+     * Constructs a byte option by copying the byte option passed.
+     *
+     * @param op     The byte option to copy.
+     */
+
+    public ByteOption( ByteOption op ) {
+	super( op );
+	op.value = op.getValue();
+    }
+
+    /**
+     * Constructs a byte option initialized with the value passed.
+     *
+     * @param value    The initial value of this byte option.
+     */
+
+    public ByteOption( byte value ) {
+	this( value, null );
+    }
+
+    /**
+     * Constructs a byte option initialized with the value and
+     * long option passed.
+     *
+     * @param value      The initial value of this byte option.
+     * @param longOption The long option associated with this option.
+     */
+
+    public ByteOption( byte value, String longOption ) {
+	this( value, longOption, '\0' );
+    }
+
+    /**
+     * Constructs a byte option initialized with the value and short
+     * option passed.
+     *
+     * @param shortOption The short option associated with this option.
+     * @param value       The initial value of this byte option.
+     */
+
+    public ByteOption( byte value, char shortOption ) {
+	this( value, null, shortOption );
+    }
+
+    /**
+     * Constructs a byte option initialized with the value, short
+     * and long option passed.
+     *
+     * @param shortOption The short option associated with this option.
+     * @param longOption  The long option associated with this option.
+     * @param value       The initial value of this byte option.
+     */
+
+    public ByteOption( byte value, String longOption, char shortOption ) {
+	super( longOption, shortOption );
+	this.value = value;
+    }
+
+    /**
+     * Return the value as an object.
+     *
+     * @return This value as an option.
+     */
+
+    public Object getObject() {
+	return new Byte( value );
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void modify( String value ) throws OptionModificationException {
+	try {
+	    this.value = Byte.parseByte( value );
+	}
+	catch ( NumberFormatException e ) {
+	    throw new OptionModificationException( "Error. A byte must be"
+						   + " specified, not '"
+						   + value + "'." );
+	}
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void setValue( String value ) throws OptionModificationException {
+	modify( value );
+    }
+
+    /**
+     * Modify this option using a byte value.
+     *
+     * @param     value A byte value.
+     */
+
+    public void setValue( byte value ) {
+	this.value = value;
+    }
+
+    /**
+     * Return this option as a boolean.
+     *
+     * @return This option as a boolean.
+     */
+
+    public byte getValue() {
+	return value;
+    }
+
+    /**
+     * Return this option as a string.
+     *
+     * @return This option as a string.
+     */
+
+    public String getStringValue() {
+	return Byte.toString( value );
+    }
+
+    /**
+     * Returns the type name of this option. For a ByteOption, "BYTE"
+     * is returned.
+     *
+     * @return The type name of this option.
+     */
+
+    public String getTypeName() {
+	return "BYTE";
+    }
+
+    /**
+     * Returns a string representation of this object.
+     *
+     * @return A string representation of this object.
+     */
+
+    public String toString() {
+	return getStringValue();
+    }
+
+} /** ByteOption */
diff --git a/src/java/gnu/dtools/ritopt/CharOption.java b/src/java/gnu/dtools/ritopt/CharOption.java
index 981fb2e..b2077de 100644
--- a/src/java/gnu/dtools/ritopt/CharOption.java
+++ b/src/java/gnu/dtools/ritopt/CharOption.java
@@ -1,196 +1,196 @@
-package gnu.dtools.ritopt;
-
-/**
- * CharOption.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * This class is used for options with character values.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class CharOption extends Option {
-
-    /**
-     * The value of this character option.
-     */
-
-    private char value;
-
-    /**
-     * Constructs a character option that is set to the space character.
-     */
-
-    public CharOption() {
-	this( ' ' );
-    }
-
-    /**
-     * Constructs a character option by copying the character option passed.
-     *
-     * @param op     The character option to copy.
-     */
-
-    public CharOption( CharOption op ) {
-	super( op );
-	op.value = op.getValue();
-    }
-
-    /**
-     * Constructs a character option initialized with the value passed.
-     *
-     * @param value    The initial value of this character option.
-     */
-
-    public CharOption( char value ) {
-	this( value, null );
-    }
-
-    /**
-     * Constructs a character option initialized with the value and
-     * long option passed.
-     *
-     * @param value      The initial value of this character option.
-     * @param longOption The long option associated with character option.
-     */
-
-    public CharOption( char value, String longOption ) {
-	this( value, longOption, '\0' );
-    }
-
-    /**
-     * Constructs a character option initialized with the value and
-     * short option passed.
-     *
-     * @param value       The initial value of this character option.
-     * @param shortOption The short option associated with this option.
-     */
-
-    public CharOption( char value, char shortOption ) {
-	this( value, null, shortOption );
-    }
-
-    /**
-     * Constructs a character option initialized with the value, short
-     * and long option passed.
-     *
-     * @param shortOption The short option associated with this option.
-     * @param longOption  The long option associated with this option.
-     * @param value       The initial value of this character option.
-     */
-
-    public CharOption( char value, String longOption, char shortOption ) {
-	super( longOption, shortOption );
-	this.value = value;
-    }
-
-    /**
-     * Return the value as an object.
-     *
-     * @return This value as an option.
-     */
-
-    public Object getObject() {
-	return new Character( value );
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void modify( String value ) throws OptionModificationException {
-	this.value = ( value.length() > 0 ) ? value.charAt( 0 ) : ' ';
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void setValue( String value ) throws OptionModificationException {
-	modify( value );
-    }
-
-    /**
-     * Modify this option using a character value.
-     *
-     * @param     value A character value.
-     */
-
-    public void setValue( char value ) {
-	this.value = value;
-    }
-
-    /**
-     * Return this option as a character.
-     *
-     * @return This option as a character.
-     */
-
-    public char getValue() {
-	return value;
-    }
-
-    /**
-     * Return this option as a string.
-     *
-     * @return This option as a string.
-     */
-
-    public String getStringValue() {
-	return "" + value;
-    }
-
-    /**
-     * Returns the type name of this option. For a ByteOption, "BYTE"
-     * is returned.
-     *
-     * @return The type name of this option.
-     */
-
-    public String getTypeName() {
-	return "CHAR";
-    }
-
-    /**
-     * Returns a string representation of this object.
-     *
-     * @return A string representation of this object.
-     */
-
-    public String toString() {
-	return getStringValue();
-    }
-
-} /** CharOption */
+package gnu.dtools.ritopt;
+
+/**
+ * CharOption.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * This class is used for options with character values.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class CharOption extends Option {
+
+    /**
+     * The value of this character option.
+     */
+
+    private char value;
+
+    /**
+     * Constructs a character option that is set to the space character.
+     */
+
+    public CharOption() {
+	this( ' ' );
+    }
+
+    /**
+     * Constructs a character option by copying the character option passed.
+     *
+     * @param op     The character option to copy.
+     */
+
+    public CharOption( CharOption op ) {
+	super( op );
+	op.value = op.getValue();
+    }
+
+    /**
+     * Constructs a character option initialized with the value passed.
+     *
+     * @param value    The initial value of this character option.
+     */
+
+    public CharOption( char value ) {
+	this( value, null );
+    }
+
+    /**
+     * Constructs a character option initialized with the value and
+     * long option passed.
+     *
+     * @param value      The initial value of this character option.
+     * @param longOption The long option associated with character option.
+     */
+
+    public CharOption( char value, String longOption ) {
+	this( value, longOption, '\0' );
+    }
+
+    /**
+     * Constructs a character option initialized with the value and
+     * short option passed.
+     *
+     * @param value       The initial value of this character option.
+     * @param shortOption The short option associated with this option.
+     */
+
+    public CharOption( char value, char shortOption ) {
+	this( value, null, shortOption );
+    }
+
+    /**
+     * Constructs a character option initialized with the value, short
+     * and long option passed.
+     *
+     * @param shortOption The short option associated with this option.
+     * @param longOption  The long option associated with this option.
+     * @param value       The initial value of this character option.
+     */
+
+    public CharOption( char value, String longOption, char shortOption ) {
+	super( longOption, shortOption );
+	this.value = value;
+    }
+
+    /**
+     * Return the value as an object.
+     *
+     * @return This value as an option.
+     */
+
+    public Object getObject() {
+	return new Character( value );
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void modify( String value ) throws OptionModificationException {
+	this.value = ( value.length() > 0 ) ? value.charAt( 0 ) : ' ';
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void setValue( String value ) throws OptionModificationException {
+	modify( value );
+    }
+
+    /**
+     * Modify this option using a character value.
+     *
+     * @param     value A character value.
+     */
+
+    public void setValue( char value ) {
+	this.value = value;
+    }
+
+    /**
+     * Return this option as a character.
+     *
+     * @return This option as a character.
+     */
+
+    public char getValue() {
+	return value;
+    }
+
+    /**
+     * Return this option as a string.
+     *
+     * @return This option as a string.
+     */
+
+    public String getStringValue() {
+	return "" + value;
+    }
+
+    /**
+     * Returns the type name of this option. For a ByteOption, "BYTE"
+     * is returned.
+     *
+     * @return The type name of this option.
+     */
+
+    public String getTypeName() {
+	return "CHAR";
+    }
+
+    /**
+     * Returns a string representation of this object.
+     *
+     * @return A string representation of this object.
+     */
+
+    public String toString() {
+	return getStringValue();
+    }
+
+} /** CharOption */
diff --git a/src/java/gnu/dtools/ritopt/DoubleOption.java b/src/java/gnu/dtools/ritopt/DoubleOption.java
index ebd721b..d6bd3db 100644
--- a/src/java/gnu/dtools/ritopt/DoubleOption.java
+++ b/src/java/gnu/dtools/ritopt/DoubleOption.java
@@ -1,203 +1,203 @@
-package gnu.dtools.ritopt;
-
-/**
- * DoubleOption.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * This class is used for options with double values.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class DoubleOption extends Option {
-
-    /**
-     * The value of this double option.
-     */
-
-    private double value;
-
-    /**
-     * Constructs a double option that is initially set to zero.
-     */
-
-    public DoubleOption() {
-	this( 0.0 );
-    }
-
-    /**
-     * Constructs a double option by copying the double option passed.
-     *
-     * @param op     The character option to copy.
-     */
-
-    public DoubleOption( DoubleOption op ) {
-	super( op );
-	op.value = op.getValue();
-    }
-
-    /**
-     * Constructs a double option initialized with the value passed.
-     *
-     * @param value    The initial value of this double option.
-     */
-
-    public DoubleOption( double value ) {
-	this( value, null );
-    }
-
-    /**
-     * Constructs a double option initialized with the value and
-     * long option passed.
-     *
-     * @param value      The initial value of this double option.
-     * @param longOption The long option associated with double option.
-     */
-
-    public DoubleOption( double value, String longOption ) {
-	this( value, longOption, '\0' );
-    }
-
-    /**
-     * Constructs a character option initialized with the value and
-     * short option passed.
-     *
-     * @param value       The initial value of this double option.
-     * @param shortOption The short option associated with this option.
-     */
-
-    public DoubleOption( double value, char shortOption ) {
-	this( value, null, shortOption );
-    }
-
-    /**
-     * Constructs a double option initialized with the value, short
-     * and long option passed.
-     *
-     * @param shortOption The short option associated with this option.
-     * @param longOption  The long option associated with this option.
-     * @param value       The initial value of this double option.
-     */
-
-    public DoubleOption( double value, String longOption, char shortOption ) {
-	super( longOption, shortOption );
-	this.value = value;
-    }
-
-    /**
-     * Return the value as an object.
-     *
-     * @return This value as an option.
-     */
-
-    public Object getObject() {
-	return new Double( value );
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void modify( String value ) throws OptionModificationException {
-	try {
-	    this.value = Double.parseDouble( value );
-	}
-	catch ( NumberFormatException e ) {
-	    throw new OptionModificationException( "Error. A double must be"
-						   + " specified, not '"
-						   + value + "'." );
-	}
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void setValue( String value ) throws OptionModificationException {
-	modify( value );
-    }
-
-    /**
-     * Modify this option using a double value.
-     *
-     * @param     value A double value.
-     */
-
-    public void setValue( double value ) {
-	this.value = value;
-    }
-
-    /**
-     * Return this option as a double.
-     *
-     * @return This option as a double.
-     */
-
-    public double getValue() {
-	return value;
-    }
-
-    /**
-     * Return this option as a string.
-     *
-     * @return This option as a string.
-     */
-
-    public String getStringValue() {
-	return Double.toString( value );
-    }
-
-    /**
-     * Returns the type name of this option. For a DoubleOption, "DOUBLE"
-     * is returned.
-     *
-     * @return The type name of this option.
-     */
-
-    public String getTypeName() {
-	return "DOUBLE";
-    }
-
-    /**
-     * Returns a string representation of this object.
-     *
-     * @return A string representation of this object.
-     */
-
-    public String toString() {
-	return getStringValue();
-    }
-
-} /** DoubleOption */
+package gnu.dtools.ritopt;
+
+/**
+ * DoubleOption.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * This class is used for options with double values.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class DoubleOption extends Option {
+
+    /**
+     * The value of this double option.
+     */
+
+    private double value;
+
+    /**
+     * Constructs a double option that is initially set to zero.
+     */
+
+    public DoubleOption() {
+	this( 0.0 );
+    }
+
+    /**
+     * Constructs a double option by copying the double option passed.
+     *
+     * @param op     The character option to copy.
+     */
+
+    public DoubleOption( DoubleOption op ) {
+	super( op );
+	op.value = op.getValue();
+    }
+
+    /**
+     * Constructs a double option initialized with the value passed.
+     *
+     * @param value    The initial value of this double option.
+     */
+
+    public DoubleOption( double value ) {
+	this( value, null );
+    }
+
+    /**
+     * Constructs a double option initialized with the value and
+     * long option passed.
+     *
+     * @param value      The initial value of this double option.
+     * @param longOption The long option associated with double option.
+     */
+
+    public DoubleOption( double value, String longOption ) {
+	this( value, longOption, '\0' );
+    }
+
+    /**
+     * Constructs a character option initialized with the value and
+     * short option passed.
+     *
+     * @param value       The initial value of this double option.
+     * @param shortOption The short option associated with this option.
+     */
+
+    public DoubleOption( double value, char shortOption ) {
+	this( value, null, shortOption );
+    }
+
+    /**
+     * Constructs a double option initialized with the value, short
+     * and long option passed.
+     *
+     * @param shortOption The short option associated with this option.
+     * @param longOption  The long option associated with this option.
+     * @param value       The initial value of this double option.
+     */
+
+    public DoubleOption( double value, String longOption, char shortOption ) {
+	super( longOption, shortOption );
+	this.value = value;
+    }
+
+    /**
+     * Return the value as an object.
+     *
+     * @return This value as an option.
+     */
+
+    public Object getObject() {
+	return new Double( value );
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void modify( String value ) throws OptionModificationException {
+	try {
+	    this.value = Double.parseDouble( value );
+	}
+	catch ( NumberFormatException e ) {
+	    throw new OptionModificationException( "Error. A double must be"
+						   + " specified, not '"
+						   + value + "'." );
+	}
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void setValue( String value ) throws OptionModificationException {
+	modify( value );
+    }
+
+    /**
+     * Modify this option using a double value.
+     *
+     * @param     value A double value.
+     */
+
+    public void setValue( double value ) {
+	this.value = value;
+    }
+
+    /**
+     * Return this option as a double.
+     *
+     * @return This option as a double.
+     */
+
+    public double getValue() {
+	return value;
+    }
+
+    /**
+     * Return this option as a string.
+     *
+     * @return This option as a string.
+     */
+
+    public String getStringValue() {
+	return Double.toString( value );
+    }
+
+    /**
+     * Returns the type name of this option. For a DoubleOption, "DOUBLE"
+     * is returned.
+     *
+     * @return The type name of this option.
+     */
+
+    public String getTypeName() {
+	return "DOUBLE";
+    }
+
+    /**
+     * Returns a string representation of this object.
+     *
+     * @return A string representation of this object.
+     */
+
+    public String toString() {
+	return getStringValue();
+    }
+
+} /** DoubleOption */
diff --git a/src/java/gnu/dtools/ritopt/FloatOption.java b/src/java/gnu/dtools/ritopt/FloatOption.java
index 9dccb73..50fa88d 100644
--- a/src/java/gnu/dtools/ritopt/FloatOption.java
+++ b/src/java/gnu/dtools/ritopt/FloatOption.java
@@ -1,203 +1,203 @@
-package gnu.dtools.ritopt;
-
-/**
- * FloatOption.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * This class is used for options with float values.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class FloatOption extends Option {
-
-    /**
-     * The value of this float option.
-     */
-
-    private float value;
-
-    /**
-     * Constructs a float option that is initially set to zero.
-     */
-
-    public FloatOption() {
-	this( 0.0f );
-    }
-
-    /**
-     * Constructs a float option by copying the float option passed.
-     *
-     * @param op     The character option to copy.
-     */
-
-    public FloatOption( FloatOption op ) {
-	super( op );
-	op.value = op.getValue();
-    }
-
-    /**
-     * Constructs a float option initialized with the value passed.
-     *
-     * @param value    The initial value of this float option.
-     */
-
-    public FloatOption( float value ) {
-	this( value, null );
-    }
-
-    /**
-     * Constructs a float option initialized with the value and
-     * long option passed.
-     *
-     * @param value      The initial value of this float option.
-     * @param longOption The long option associated with float option.
-     */
-
-    public FloatOption( float value, String longOption ) {
-	this( value, longOption, '\0' );
-    }
-
-    /**
-     * Constructs a character option initialized with the value and
-     * short option passed.
-     *
-     * @param value       The initial value of this float option.
-     * @param shortOption The short option associated with this option.
-     */
-
-    public FloatOption( float value, char shortOption ) {
-	this( value, null, shortOption );
-    }
-
-    /**
-     * Constructs a float option initialized with the value, short
-     * and long option passed.
-     *
-     * @param shortOption The short option associated with this option.
-     * @param longOption  The long option associated with this option.
-     * @param value       The initial value of this float option.
-     */
-
-    public FloatOption( float value, String longOption, char shortOption ) {
-	super( longOption, shortOption );
-	this.value = value;
-    }
-
-    /**
-     * Return the value as an object.
-     *
-     * @return This value as an option.
-     */
-
-    public Object getObject() {
-	return new Float( value );
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void modify( String value ) throws OptionModificationException {
-	try {
-	    this.value = Float.parseFloat( value );
-	}
-	catch ( NumberFormatException e ) {
-	    throw new OptionModificationException( "Error. A float must be"
-						   + " specified, not '"
-						   + value + "'." );
-	}
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void setValue( String value ) throws OptionModificationException {
-	modify( value );
-    }
-
-    /**
-     * Modify this option using a float value.
-     *
-     * @param     value A float value.
-     */
-
-    public void setValue( float value ) {
-	this.value = value;
-    }
-
-    /**
-     * Return this option as a float.
-     *
-     * @return This option as a float.
-     */
-
-    public float getValue() {
-	return value;
-    }
-
-    /**
-     * Return this option as a string.
-     *
-     * @return This option as a string.
-     */
-
-    public String getStringValue() {
-	return Float.toString( value );
-    }
-
-    /**
-     * Returns the type name of this option. For a FloatOption, "FLOAT"
-     * is returned.
-     *
-     * @return The type name of this option.
-     */
-
-    public String getTypeName() {
-	return "FLOAT";
-    }
-
-    /**
-     * Returns a string representation of this object.
-     *
-     * @return A string representation of this object.
-     */
-
-    public String toString() {
-	return getStringValue();
-    }
-
-}
+package gnu.dtools.ritopt;
+
+/**
+ * FloatOption.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * This class is used for options with float values.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class FloatOption extends Option {
+
+    /**
+     * The value of this float option.
+     */
+
+    private float value;
+
+    /**
+     * Constructs a float option that is initially set to zero.
+     */
+
+    public FloatOption() {
+	this( 0.0f );
+    }
+
+    /**
+     * Constructs a float option by copying the float option passed.
+     *
+     * @param op     The character option to copy.
+     */
+
+    public FloatOption( FloatOption op ) {
+	super( op );
+	op.value = op.getValue();
+    }
+
+    /**
+     * Constructs a float option initialized with the value passed.
+     *
+     * @param value    The initial value of this float option.
+     */
+
+    public FloatOption( float value ) {
+	this( value, null );
+    }
+
+    /**
+     * Constructs a float option initialized with the value and
+     * long option passed.
+     *
+     * @param value      The initial value of this float option.
+     * @param longOption The long option associated with float option.
+     */
+
+    public FloatOption( float value, String longOption ) {
+	this( value, longOption, '\0' );
+    }
+
+    /**
+     * Constructs a character option initialized with the value and
+     * short option passed.
+     *
+     * @param value       The initial value of this float option.
+     * @param shortOption The short option associated with this option.
+     */
+
+    public FloatOption( float value, char shortOption ) {
+	this( value, null, shortOption );
+    }
+
+    /**
+     * Constructs a float option initialized with the value, short
+     * and long option passed.
+     *
+     * @param shortOption The short option associated with this option.
+     * @param longOption  The long option associated with this option.
+     * @param value       The initial value of this float option.
+     */
+
+    public FloatOption( float value, String longOption, char shortOption ) {
+	super( longOption, shortOption );
+	this.value = value;
+    }
+
+    /**
+     * Return the value as an object.
+     *
+     * @return This value as an option.
+     */
+
+    public Object getObject() {
+	return new Float( value );
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void modify( String value ) throws OptionModificationException {
+	try {
+	    this.value = Float.parseFloat( value );
+	}
+	catch ( NumberFormatException e ) {
+	    throw new OptionModificationException( "Error. A float must be"
+						   + " specified, not '"
+						   + value + "'." );
+	}
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void setValue( String value ) throws OptionModificationException {
+	modify( value );
+    }
+
+    /**
+     * Modify this option using a float value.
+     *
+     * @param     value A float value.
+     */
+
+    public void setValue( float value ) {
+	this.value = value;
+    }
+
+    /**
+     * Return this option as a float.
+     *
+     * @return This option as a float.
+     */
+
+    public float getValue() {
+	return value;
+    }
+
+    /**
+     * Return this option as a string.
+     *
+     * @return This option as a string.
+     */
+
+    public String getStringValue() {
+	return Float.toString( value );
+    }
+
+    /**
+     * Returns the type name of this option. For a FloatOption, "FLOAT"
+     * is returned.
+     *
+     * @return The type name of this option.
+     */
+
+    public String getTypeName() {
+	return "FLOAT";
+    }
+
+    /**
+     * Returns a string representation of this object.
+     *
+     * @return A string representation of this object.
+     */
+
+    public String toString() {
+	return getStringValue();
+    }
+
+}
diff --git a/src/java/gnu/dtools/ritopt/IntOption.java b/src/java/gnu/dtools/ritopt/IntOption.java
index 7048f90..b435fb0 100644
--- a/src/java/gnu/dtools/ritopt/IntOption.java
+++ b/src/java/gnu/dtools/ritopt/IntOption.java
@@ -1,204 +1,204 @@
-package gnu.dtools.ritopt;
-
-/**
- * IntOption.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * This class is used for options with integer values.
- *
- * <pre>
- *
- * <hr>
- *
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class IntOption extends Option {
-
-    /**
-     * The value of this integer option.
-     */
-
-    private int value;
-
-    /**
-     * Constructs an integer option that is initially set to zero.
-     */
-
-    public IntOption() {
-	this( 0 );
-    }
-
-    /**
-     * Constructs an integer option by copying the integer option passed.
-     *
-     * @param op     The character option to copy.
-     */
-
-    public IntOption( IntOption op ) {
-	super( op );
-	op.value = op.getValue();
-    }
-
-    /**
-     * Constructs an integer option initialized with the value passed.
-     *
-     * @param value    The initial value of this integer option.
-     */
-
-    public IntOption( int value ) {
-	this( value, null );
-    }
-
-    /**
-     * Constructs an integer option initialized with the value and
-     * long option passed.
-     *
-     * @param value      The initial value of this integer option.
-     * @param longOption The long option associated with integer option.
-     */
-
-    public IntOption( int value, String longOption ) {
-	this( value, longOption, '\0' );
-    }
-
-    /**
-     * Constructs a character option initialized with the value and
-     * short option passed.
-     *
-     * @param value       The initial value of this integer option.
-     * @param shortOption The short option associated with this option.
-     */
-
-    public IntOption( int value, char shortOption ) {
-	this( value, null, shortOption );
-    }
-
-    /**
-     * Constructs an integer option initialized with the value, short
-     * and long option passed.
-     *
-     * @param shortOption The short option associated with this option.
-     * @param longOption  The long option associated with this option.
-     * @param value       The initial value of this integer option.
-     */
-
-    public IntOption( int value, String longOption, char shortOption ) {
-	super( longOption, shortOption );
-	this.value = value;
-    }
-
-    /**
-     * Return the value as an object.
-     *
-     * @return This value as an option.
-     */
-
-    public Object getObject() {
-	return new Integer( value );
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void modify( String value ) throws OptionModificationException {
-	try {
-	    this.value = Integer.parseInt( value );
-	}
-	catch ( NumberFormatException e ) {
-	    throw new OptionModificationException( "Error. An integer must be"
-						   + " specified, not '"
-						   + value + "'." );
-	}
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void setValue( String value ) throws OptionModificationException {
-	modify( value );
-    }
-
-    /**
-     * Modify this option using an integer value.
-     *
-     * @param     value an integer value.
-     */
-
-    public void setValue( int value ) {
-	this.value = value;
-    }
-
-    /**
-     * Return this option as an integer.
-     *
-     * @return This option as an integer.
-     */
-
-    public int getValue() {
-	return value;
-    }
-
-    /**
-     * Return this option as a string.
-     *
-     * @return This option as a string.
-     */
-
-    public String getStringValue() {
-	return Integer.toString( value );
-    }
-
-    /**
-     * Returns the type name of this option. For an IntegerOption, "INTEGER"
-     * is returned.
-     *
-     * @return The type name of this option.
-     */
-
-    public String getTypeName() {
-	return "INTEGER";
-    }
-
-    /**
-     * Returns a string representation of this object.
-     *
-     * @return A string representation of this object.
-     */
-
-    public String toString() {
-	return getStringValue();
-    }
-
-}
+package gnu.dtools.ritopt;
+
+/**
+ * IntOption.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * This class is used for options with integer values.
+ *
+ * <pre>
+ *
+ * <hr>
+ *
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class IntOption extends Option {
+
+    /**
+     * The value of this integer option.
+     */
+
+    private int value;
+
+    /**
+     * Constructs an integer option that is initially set to zero.
+     */
+
+    public IntOption() {
+	this( 0 );
+    }
+
+    /**
+     * Constructs an integer option by copying the integer option passed.
+     *
+     * @param op     The character option to copy.
+     */
+
+    public IntOption( IntOption op ) {
+	super( op );
+	op.value = op.getValue();
+    }
+
+    /**
+     * Constructs an integer option initialized with the value passed.
+     *
+     * @param value    The initial value of this integer option.
+     */
+
+    public IntOption( int value ) {
+	this( value, null );
+    }
+
+    /**
+     * Constructs an integer option initialized with the value and
+     * long option passed.
+     *
+     * @param value      The initial value of this integer option.
+     * @param longOption The long option associated with integer option.
+     */
+
+    public IntOption( int value, String longOption ) {
+	this( value, longOption, '\0' );
+    }
+
+    /**
+     * Constructs a character option initialized with the value and
+     * short option passed.
+     *
+     * @param value       The initial value of this integer option.
+     * @param shortOption The short option associated with this option.
+     */
+
+    public IntOption( int value, char shortOption ) {
+	this( value, null, shortOption );
+    }
+
+    /**
+     * Constructs an integer option initialized with the value, short
+     * and long option passed.
+     *
+     * @param shortOption The short option associated with this option.
+     * @param longOption  The long option associated with this option.
+     * @param value       The initial value of this integer option.
+     */
+
+    public IntOption( int value, String longOption, char shortOption ) {
+	super( longOption, shortOption );
+	this.value = value;
+    }
+
+    /**
+     * Return the value as an object.
+     *
+     * @return This value as an option.
+     */
+
+    public Object getObject() {
+	return new Integer( value );
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void modify( String value ) throws OptionModificationException {
+	try {
+	    this.value = Integer.parseInt( value );
+	}
+	catch ( NumberFormatException e ) {
+	    throw new OptionModificationException( "Error. An integer must be"
+						   + " specified, not '"
+						   + value + "'." );
+	}
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void setValue( String value ) throws OptionModificationException {
+	modify( value );
+    }
+
+    /**
+     * Modify this option using an integer value.
+     *
+     * @param     value an integer value.
+     */
+
+    public void setValue( int value ) {
+	this.value = value;
+    }
+
+    /**
+     * Return this option as an integer.
+     *
+     * @return This option as an integer.
+     */
+
+    public int getValue() {
+	return value;
+    }
+
+    /**
+     * Return this option as a string.
+     *
+     * @return This option as a string.
+     */
+
+    public String getStringValue() {
+	return Integer.toString( value );
+    }
+
+    /**
+     * Returns the type name of this option. For an IntegerOption, "INTEGER"
+     * is returned.
+     *
+     * @return The type name of this option.
+     */
+
+    public String getTypeName() {
+	return "INTEGER";
+    }
+
+    /**
+     * Returns a string representation of this object.
+     *
+     * @return A string representation of this object.
+     */
+
+    public String toString() {
+	return getStringValue();
+    }
+
+}
diff --git a/src/java/gnu/dtools/ritopt/LongOption.java b/src/java/gnu/dtools/ritopt/LongOption.java
index b3dc8ce..5e5f3c3 100644
--- a/src/java/gnu/dtools/ritopt/LongOption.java
+++ b/src/java/gnu/dtools/ritopt/LongOption.java
@@ -1,203 +1,203 @@
-package gnu.dtools.ritopt;
-
-/**
- * LongOption.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * This class is used for options with long values.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class LongOption extends Option {
-
-    /**
-     * The value of this long option.
-     */
-
-    private long value;
-
-    /**
-     * Constructs a long option that is initially set to zero.
-     */
-
-    public LongOption() {
-	this( 0 );
-    }
-
-    /**
-     * Constructs a long option by copying the long option passed.
-     *
-     * @param op     The character option to copy.
-     */
-
-    public LongOption( LongOption op ) {
-	super( op );
-	op.value = op.getValue();
-    }
-
-    /**
-     * Constructs a long option initialized with the value passed.
-     *
-     * @param value    The initial value of this long option.
-     */
-
-    public LongOption( long value ) {
-	this( value, null );
-    }
-
-    /**
-     * Constructs a long option initialized with the value and
-     * long option passed.
-     *
-     * @param value      The initial value of this long option.
-     * @param longOption The long option associated with long option.
-     */
-
-    public LongOption( long value, String longOption ) {
-	this( value, longOption, '\0' );
-    }
-
-    /**
-     * Constructs a character option initialized with the value and
-     * short option passed.
-     *
-     * @param value       The initial value of this long option.
-     * @param shortOption The short option associated with this option.
-     */
-
-    public LongOption( long value, char shortOption ) {
-	this( value, null, shortOption );
-    }
-
-    /**
-     * Constructs a long option initialized with the value, short
-     * and long option passed.
-     *
-     * @param shortOption The short option associated with this option.
-     * @param longOption  The long option associated with this option.
-     * @param value       The initial value of this long option.
-     */
-
-    public LongOption( long value, String longOption, char shortOption ) {
-	super( longOption, shortOption );
-	this.value = value;
-    }
-
-    /**
-     * Return the value as an object.
-     *
-     * @return This value as an option.
-     */
-
-    public Object getObject() {
-	return new Long( value );
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void modify( String value ) throws OptionModificationException {
-	try {
-	    this.value = Long.parseLong( value );
-	}
-	catch ( NumberFormatException e ) {
-	    throw new OptionModificationException( "Error. A long must be"
-						   + " specified, not '"
-						   + value + "'." );
-	}
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void setValue( String value ) throws OptionModificationException {
-	modify( value );
-    }
-
-    /**
-     * Modify this option using a long value.
-     *
-     * @param     value A long value.
-     */
-
-    public void setValue( long value ) {
-	this.value = value;
-    }
-
-    /**
-     * Return this option as a long.
-     *
-     * @return This option as a long.
-     */
-
-    public long getValue() {
-	return value;
-    }
-
-    /**
-     * Return this option as a string.
-     *
-     * @return This option as a string.
-     */
-
-    public String getStringValue() {
-	return Long.toString( value );
-    }
-
-    /**
-     * Returns the type name of this option. For a LongOption, "LONG"
-     * is returned.
-     *
-     * @return The type name of this option.
-     */
-
-    public String getTypeName() {
-	return "LONG";
-    }
-
-    /**
-     * Returns a string representation of this object.
-     *
-     * @return A string representation of this object.
-     */
-
-    public String toString() {
-	return getStringValue();
-    }
-
-} /** LongOption */
+package gnu.dtools.ritopt;
+
+/**
+ * LongOption.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * This class is used for options with long values.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class LongOption extends Option {
+
+    /**
+     * The value of this long option.
+     */
+
+    private long value;
+
+    /**
+     * Constructs a long option that is initially set to zero.
+     */
+
+    public LongOption() {
+	this( 0 );
+    }
+
+    /**
+     * Constructs a long option by copying the long option passed.
+     *
+     * @param op     The character option to copy.
+     */
+
+    public LongOption( LongOption op ) {
+	super( op );
+	op.value = op.getValue();
+    }
+
+    /**
+     * Constructs a long option initialized with the value passed.
+     *
+     * @param value    The initial value of this long option.
+     */
+
+    public LongOption( long value ) {
+	this( value, null );
+    }
+
+    /**
+     * Constructs a long option initialized with the value and
+     * long option passed.
+     *
+     * @param value      The initial value of this long option.
+     * @param longOption The long option associated with long option.
+     */
+
+    public LongOption( long value, String longOption ) {
+	this( value, longOption, '\0' );
+    }
+
+    /**
+     * Constructs a character option initialized with the value and
+     * short option passed.
+     *
+     * @param value       The initial value of this long option.
+     * @param shortOption The short option associated with this option.
+     */
+
+    public LongOption( long value, char shortOption ) {
+	this( value, null, shortOption );
+    }
+
+    /**
+     * Constructs a long option initialized with the value, short
+     * and long option passed.
+     *
+     * @param shortOption The short option associated with this option.
+     * @param longOption  The long option associated with this option.
+     * @param value       The initial value of this long option.
+     */
+
+    public LongOption( long value, String longOption, char shortOption ) {
+	super( longOption, shortOption );
+	this.value = value;
+    }
+
+    /**
+     * Return the value as an object.
+     *
+     * @return This value as an option.
+     */
+
+    public Object getObject() {
+	return new Long( value );
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void modify( String value ) throws OptionModificationException {
+	try {
+	    this.value = Long.parseLong( value );
+	}
+	catch ( NumberFormatException e ) {
+	    throw new OptionModificationException( "Error. A long must be"
+						   + " specified, not '"
+						   + value + "'." );
+	}
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void setValue( String value ) throws OptionModificationException {
+	modify( value );
+    }
+
+    /**
+     * Modify this option using a long value.
+     *
+     * @param     value A long value.
+     */
+
+    public void setValue( long value ) {
+	this.value = value;
+    }
+
+    /**
+     * Return this option as a long.
+     *
+     * @return This option as a long.
+     */
+
+    public long getValue() {
+	return value;
+    }
+
+    /**
+     * Return this option as a string.
+     *
+     * @return This option as a string.
+     */
+
+    public String getStringValue() {
+	return Long.toString( value );
+    }
+
+    /**
+     * Returns the type name of this option. For a LongOption, "LONG"
+     * is returned.
+     *
+     * @return The type name of this option.
+     */
+
+    public String getTypeName() {
+	return "LONG";
+    }
+
+    /**
+     * Returns a string representation of this object.
+     *
+     * @return A string representation of this object.
+     */
+
+    public String toString() {
+	return getStringValue();
+    }
+
+} /** LongOption */
diff --git a/src/java/gnu/dtools/ritopt/NotifyOption.java b/src/java/gnu/dtools/ritopt/NotifyOption.java
index e16f58c..ad76918 100644
--- a/src/java/gnu/dtools/ritopt/NotifyOption.java
+++ b/src/java/gnu/dtools/ritopt/NotifyOption.java
@@ -1,318 +1,318 @@
-package gnu.dtools.ritopt;
-
-/**
- * The NotifyOption class is used to register options that when invoked
- * notify a listener. This provides an interface for event-driven
- * options processing. In order for a class to be notified, it must implement
- * the OptionListener interface.<p>
- *
- * When the option is invoked, the corresponding short, long, and option
- * values are put in an OptionEvent object, and passed to all registered
- * listeners.<p>
- *
- * A class must implement the OptionListener interface in order to receive
- * notification of option events.<p>
- *
- * For a more detailed explanation please refer to the tutorial. The following
- * is a simple example of how a NotifyOption is used.
- * <pre>
- *
- * import gnu.dtools.ritopt.*;
- *
- * public class TellMe implements OptionListener {
- *
- *    public static void main( String args[] ) {
- *       TellMe m = new TellMe();
- *       Options processor = new Options();
- *       NotifyOption say = new NotifyOption( m );
- *       processor.register( "say", 's', say );
- *       processor.process();
- *    }
- *
- *    public void optionInvoked( OptionEvent e ) {
- *       if ( e.getCommand().equals( "say" ) ) {
- *           String say = e.getValue();
- *           if ( Utility.trim( say ).length() == 0 ) say = "nothing";
- *           System.err.println( "You told me to say " + nothing + "." );
- *       }
- *    }
- * }
- *
- * cookies at crazymonster$ javac TellMe.java
- * cookies at crazymonster$ java TellMe
- * cookies at crazymonster$ java TellMe
- * cookies at crazymonster$ java TellMe --say -s
- * You told me to say nothing.
- * You told me to say nothing.
- * cookies at crazymonster$ java TellMe --say hello
- * You told me to say hello.
- * cookies at crazymonster$ java TellMe --say "I'm sorry"
- * You told me to say I'm sorry.
- * cookies at crazymonster$ java TellMe --say="not until tomorrow" -s "I'm crazy"
- * You told me to say not until tomorrow.
- * You told me to say I'm crazy.
- * </pre>
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class NotifyOption extends Option implements OptionNotifier {
-
-    /**
-     * The current value of the notify option.
-     */
-
-    private String value = "";
-
-    /**
-     * The default command if a command is not specified.
-     */
-
-    private String command = "Default";
-
-    /**
-     * A list of listeners to notify whenever a modification event occurs.
-     */
-
-    private java.util.List<OptionListener> listeners;
-
-    /**
-     * Construct a NotifyOption with an empty list of listeners. Set the
-     * initial value to null.
-     */
-
-    public NotifyOption() {
-	this( "" );
-    }
-
-    /**
-     * Construct a NotifyOption and register the passed listener.
-     *
-     * @param listener    The listener to register.
-     */
-
-    public NotifyOption( OptionListener listener ) {
-	this( listener, "Default" );
-    }
-
-    /**
-     * Construct a NotifyOption and register the passed listener. Initialize
-     * the command to the value passed.
-     *
-     * @param listener    The listener to register.
-     * @param command     The value of the command.
-     */
-
-    public NotifyOption( OptionListener listener, String command ) {
-	this( listener, command, "" );
-    }
-
-    /**
-     * Construct a NotifyOption and register the passed listener. Initialize
-     * the command to the value passed.
-     *
-     * @param listener    The listener to register.
-     * @param command     The value of the command.
-     * @param value       The default value of the option.
-     */
-
-    public NotifyOption( OptionListener listener, String command,
-			 String value ) {
-	this( value );
-	this.command = command;
-	listeners.add( listener );
-    }
-
-    /**
-     * Construct a NotifyOption by copying the NotifyOption passed.
-     *
-     * @param op   The notify option to copy.
-     */
-
-    public NotifyOption( NotifyOption op ) {
-	super( op );
-	op.value = op.getValue();
-	listeners = new java.util.ArrayList<OptionListener>( op.listeners );
-    }
-
-    /**
-     * Construct a NotifyOption, and initialize its default value to the
-     * value passed.
-     *
-     * @param value   The default value of this option.
-     */
-
-    public NotifyOption( String value ) {
-	this( value, null );
-    }
-
-    /**
-     * Constructs a NotifyOption option initialized with the value and
-     * long option passed.
-     *
-     * @param value      The initial value of this notify option.
-     * @param longOption The long option associated with this notify option.
-     */
-
-    public NotifyOption( String value, String longOption ) {
-	this( value, longOption, '\0' );
-    }
-
-    /**
-     * Constructs a character option initialized with the value and
-     * short option passed.
-     *
-     * @param value       The initial value of this NotifyOption option.
-     * @param shortOption The short option associated with this option.
-     */
-
-    public NotifyOption( String value, char shortOption ) {
-	this( value, null, shortOption );
-    }
-
-    /**
-     * Constructs an NotifyOption option initialized with the value, short
-     * and long option passed.
-     *
-     * @param shortOption The short option associated with this option.
-     * @param longOption  The long option associated with this option.
-     * @param value       The initial value of this NotifyOption option.
-     */
-
-    public NotifyOption( String value, String longOption, char shortOption ) {
-	super( longOption, shortOption );
-	this.value = value;
-	listeners = new java.util.ArrayList<OptionListener>();
-    }
-
-    /**
-     * Return the value as an object.
-     *
-     * @return This value as an option.
-     */
-
-    public Object getObject() {
-	return value;
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void modify( String value ) throws OptionModificationException {
-	this.value = value;
-	java.util.Iterator<OptionListener> iterator = listeners.iterator();
-	OptionEvent event = new OptionEvent( command, value, this );
-	while ( iterator.hasNext() ) {
-	    OptionListener listener = iterator.next();
-	    listener.optionInvoked( event );
-	}
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void setValue( String value ) throws OptionModificationException {
-	modify( value );
-    }
-
-    /**
-     * Return this option as a string.
-     *
-     * @return This option as a string.
-     */
-
-    public String getValue() {
-	return value;
-    }
-
-    /**
-     * Return this option as a string.
-     *
-     * @return This option as a string.
-     */
-
-    public String getStringValue() {
-	return value;
-    }
-
-    /**
-     * Returns the type name of this option. For an NotifyOption, "NOTIFY"
-     * is returned.
-     *
-     * @return The type name of this option.
-     */
-
-    public String getTypeName() {
-	return "NOTIFY";
-    }
-
-    /**
-     * Adds an OptionListener to the notification list.
-     *
-     * @param listener The OptionListener to add.
-     */
-
-    public void addOptionListener( OptionListener listener ) {
-	listeners.add( listener );
-    }
-
-    /**
-     * Removes an OptionListener from the notification list.
-     *
-     * @param listener The OptionListener to remove.
-     */
-
-    public void removeOptionListener( OptionListener listener ) {
-	listeners.remove( listener );
-    }
-
-    /**
-     * Sets the command sent when an option is invoked.
-     *
-     * @param command  The command to send.
-     */
-
-    public void setOptionCommand( String command ) {
-	this.command = command;
-    }
-
-    /**
-     * Returns a string representation of this object.
-     *
-     * @return A string representation of this object.
-     */
-
-    public String toString() {
-	return value;
-    }
-} /** NotifyOption */
+package gnu.dtools.ritopt;
+
+/**
+ * The NotifyOption class is used to register options that when invoked
+ * notify a listener. This provides an interface for event-driven
+ * options processing. In order for a class to be notified, it must implement
+ * the OptionListener interface.<p>
+ *
+ * When the option is invoked, the corresponding short, long, and option
+ * values are put in an OptionEvent object, and passed to all registered
+ * listeners.<p>
+ *
+ * A class must implement the OptionListener interface in order to receive
+ * notification of option events.<p>
+ *
+ * For a more detailed explanation please refer to the tutorial. The following
+ * is a simple example of how a NotifyOption is used.
+ * <pre>
+ *
+ * import gnu.dtools.ritopt.*;
+ *
+ * public class TellMe implements OptionListener {
+ *
+ *    public static void main( String args[] ) {
+ *       TellMe m = new TellMe();
+ *       Options processor = new Options();
+ *       NotifyOption say = new NotifyOption( m );
+ *       processor.register( "say", 's', say );
+ *       processor.process();
+ *    }
+ *
+ *    public void optionInvoked( OptionEvent e ) {
+ *       if ( e.getCommand().equals( "say" ) ) {
+ *           String say = e.getValue();
+ *           if ( Utility.trim( say ).length() == 0 ) say = "nothing";
+ *           System.err.println( "You told me to say " + nothing + "." );
+ *       }
+ *    }
+ * }
+ *
+ * cookies at crazymonster$ javac TellMe.java
+ * cookies at crazymonster$ java TellMe
+ * cookies at crazymonster$ java TellMe
+ * cookies at crazymonster$ java TellMe --say -s
+ * You told me to say nothing.
+ * You told me to say nothing.
+ * cookies at crazymonster$ java TellMe --say hello
+ * You told me to say hello.
+ * cookies at crazymonster$ java TellMe --say "I'm sorry"
+ * You told me to say I'm sorry.
+ * cookies at crazymonster$ java TellMe --say="not until tomorrow" -s "I'm crazy"
+ * You told me to say not until tomorrow.
+ * You told me to say I'm crazy.
+ * </pre>
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class NotifyOption extends Option implements OptionNotifier {
+
+    /**
+     * The current value of the notify option.
+     */
+
+    private String value = "";
+
+    /**
+     * The default command if a command is not specified.
+     */
+
+    private String command = "Default";
+
+    /**
+     * A list of listeners to notify whenever a modification event occurs.
+     */
+
+    private java.util.List<OptionListener> listeners;
+
+    /**
+     * Construct a NotifyOption with an empty list of listeners. Set the
+     * initial value to null.
+     */
+
+    public NotifyOption() {
+	this( "" );
+    }
+
+    /**
+     * Construct a NotifyOption and register the passed listener.
+     *
+     * @param listener    The listener to register.
+     */
+
+    public NotifyOption( OptionListener listener ) {
+	this( listener, "Default" );
+    }
+
+    /**
+     * Construct a NotifyOption and register the passed listener. Initialize
+     * the command to the value passed.
+     *
+     * @param listener    The listener to register.
+     * @param command     The value of the command.
+     */
+
+    public NotifyOption( OptionListener listener, String command ) {
+	this( listener, command, "" );
+    }
+
+    /**
+     * Construct a NotifyOption and register the passed listener. Initialize
+     * the command to the value passed.
+     *
+     * @param listener    The listener to register.
+     * @param command     The value of the command.
+     * @param value       The default value of the option.
+     */
+
+    public NotifyOption( OptionListener listener, String command,
+			 String value ) {
+	this( value );
+	this.command = command;
+	listeners.add( listener );
+    }
+
+    /**
+     * Construct a NotifyOption by copying the NotifyOption passed.
+     *
+     * @param op   The notify option to copy.
+     */
+
+    public NotifyOption( NotifyOption op ) {
+	super( op );
+	op.value = op.getValue();
+	listeners = new java.util.ArrayList<OptionListener>( op.listeners );
+    }
+
+    /**
+     * Construct a NotifyOption, and initialize its default value to the
+     * value passed.
+     *
+     * @param value   The default value of this option.
+     */
+
+    public NotifyOption( String value ) {
+	this( value, null );
+    }
+
+    /**
+     * Constructs a NotifyOption option initialized with the value and
+     * long option passed.
+     *
+     * @param value      The initial value of this notify option.
+     * @param longOption The long option associated with this notify option.
+     */
+
+    public NotifyOption( String value, String longOption ) {
+	this( value, longOption, '\0' );
+    }
+
+    /**
+     * Constructs a character option initialized with the value and
+     * short option passed.
+     *
+     * @param value       The initial value of this NotifyOption option.
+     * @param shortOption The short option associated with this option.
+     */
+
+    public NotifyOption( String value, char shortOption ) {
+	this( value, null, shortOption );
+    }
+
+    /**
+     * Constructs an NotifyOption option initialized with the value, short
+     * and long option passed.
+     *
+     * @param shortOption The short option associated with this option.
+     * @param longOption  The long option associated with this option.
+     * @param value       The initial value of this NotifyOption option.
+     */
+
+    public NotifyOption( String value, String longOption, char shortOption ) {
+	super( longOption, shortOption );
+	this.value = value;
+	listeners = new java.util.ArrayList<OptionListener>();
+    }
+
+    /**
+     * Return the value as an object.
+     *
+     * @return This value as an option.
+     */
+
+    public Object getObject() {
+	return value;
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void modify( String value ) throws OptionModificationException {
+	this.value = value;
+	java.util.Iterator<OptionListener> iterator = listeners.iterator();
+	OptionEvent event = new OptionEvent( command, value, this );
+	while ( iterator.hasNext() ) {
+	    OptionListener listener = iterator.next();
+	    listener.optionInvoked( event );
+	}
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void setValue( String value ) throws OptionModificationException {
+	modify( value );
+    }
+
+    /**
+     * Return this option as a string.
+     *
+     * @return This option as a string.
+     */
+
+    public String getValue() {
+	return value;
+    }
+
+    /**
+     * Return this option as a string.
+     *
+     * @return This option as a string.
+     */
+
+    public String getStringValue() {
+	return value;
+    }
+
+    /**
+     * Returns the type name of this option. For an NotifyOption, "NOTIFY"
+     * is returned.
+     *
+     * @return The type name of this option.
+     */
+
+    public String getTypeName() {
+	return "NOTIFY";
+    }
+
+    /**
+     * Adds an OptionListener to the notification list.
+     *
+     * @param listener The OptionListener to add.
+     */
+
+    public void addOptionListener( OptionListener listener ) {
+	listeners.add( listener );
+    }
+
+    /**
+     * Removes an OptionListener from the notification list.
+     *
+     * @param listener The OptionListener to remove.
+     */
+
+    public void removeOptionListener( OptionListener listener ) {
+	listeners.remove( listener );
+    }
+
+    /**
+     * Sets the command sent when an option is invoked.
+     *
+     * @param command  The command to send.
+     */
+
+    public void setOptionCommand( String command ) {
+	this.command = command;
+    }
+
+    /**
+     * Returns a string representation of this object.
+     *
+     * @return A string representation of this object.
+     */
+
+    public String toString() {
+	return value;
+    }
+} /** NotifyOption */
diff --git a/src/java/gnu/dtools/ritopt/Option.java b/src/java/gnu/dtools/ritopt/Option.java
index 4007c8a..d69bbf0 100644
--- a/src/java/gnu/dtools/ritopt/Option.java
+++ b/src/java/gnu/dtools/ritopt/Option.java
@@ -1,912 +1,912 @@
-package gnu.dtools.ritopt;
-
-/**
- * Option.java
- *
- * Version
- *    $Id$
- */
-
-
-/**
- * This is the principal base class for all Option classes. It contains
- * constructors for short and long option initialization, utility members
- * for help reporting and file writing, and deprecation facilities.<p>
- *
- * Options that provide array support should inherit from the ArrayOption
- * class, and follow the guidelines defined both in the Option and
- * ArrayOption class descriptions.<p>
- *
- * Non-abstract subclasses should implement the modify method. When an option
- * is invoked, the value of the option is passed to the modify method.<p>
- *
- * Subclasses should provide several constructors so that registration is
- * simple and uniform. Recommended constructors include a default constructor,
- * an interface for initialization of short and long options,
- * and one that allows both short and long option fields to be
- * initialized. If the subclass implementation provides constructors which
- * initialize its members then the member parameters must be before
- * the short and long option initialization parameters.<p>
- *
- * Event driven option processing is provided in the NotifyOption class. In
- * order to use a NotifyOption, the recipient object must implement the
- * OptionListener class. Although it is not required, subclass implementations
- * of NotifyOption should implement the OptionNotifier interface.<p>
- *
- * By default, the Option class considers the width of an output device
- * to be eighty characters. It initializes the width of the help fields
- * based on this figure. If a field exceeds its field width, it is
- * truncated. The width constraints can be changed by invoking the appropriate
- * static mutators.<p>
- *
- * Similar to the help reporting facilities, the same constraints are placed
- * on the listing of options provided by the built-in menu interface. These
- * constraints can be modified by executing the appropriate static mutators.
- * <p>
- *
- * The Option class provides a facility for writing options files.
- * For option file writing, there are only two field width constraints; the
- * assignment and the comment.
- * <pre>
- * Assignment:                           Comment:
- * --longOrShortOption=optionValue       ;description goes here [d]
- * </pre>
- * As shown above, an assignment includes the long or short option text,
- * an equal sign, and the option's value. The comment includes the
- * description, and "[d]" if the option is deprecated.<p>
- *
- * If the assignment exceeds its field width, the comment is placed before
- * the assignment on a separate line. The comment is truncated if it
- * exceeds eighty characters when it is placed before the assignment.
- * However, if the assignment does not exceeds its field width and the comment
- * does, the comment is truncated, and continued on the next line at the
- * columnar position defined by the assignment's field width. Field widths
- * may be modified by invoking the appropriate static mutator.<p>
- *
- * This class also provides a facility for deprecating options. An option is
- * deprecated to discourage its use without removing the functionality it
- * provides. An option is deprecated by invoking the deprecate method.
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public abstract class Option implements OptionModifiable {
-
-    /**
-     * The default width of the option field when the help usage is displayed.
-     */
-
-    public static final int DEFAULT_HELP_OPTION_SIZE = 22;
-
-    /**
-     * The default width of the type name field when the help usage is
-     * display.
-     */
-
-    public static final int DEFAULT_HELP_TYPENAME_SIZE = 10;
-
-    /**
-     * The default width of the description when the help usage is displayed.
-     */
-
-    public static final int DEFAULT_HELP_DESCRIPTION_SIZE = 48;
-
-    /**
-     * The default width of the deprecated field when the help usage is
-     * displayed.
-     */
-
-    public static final int DEFAULT_HELP_DEPRECATED_SIZE = 3;
-
-    /**
-     * The default width of the option field when the menu usage is displayed.
-     */
-
-    public static final int DEFAULT_MENU_OPTION_SIZE = 15;
-
-    /**
-     * The default width of the type name field when the menu usage is
-     * displayed.
-     */
-
-    public static final int DEFAULT_MENU_TYPENAME_SIZE = 10;
-
-    /**
-     * The default width of the description field when the menu usage is
-     * displayed.
-     */
-
-    public static final int DEFAULT_MENU_DESCRIPTION_SIZE = 48;
-
-    /**
-     * The default width of the deprecated field when the menu usage is
-     * displayed.
-     */
-
-    public static final int DEFAULT_MENU_DEPRECATED_SIZE = 3;
-
-    /**
-     * The default width of the option assignment in an option file.
-     */
-
-    public static final int DEFAULT_FILE_COMPLETE_OPTION_SIZE = 60;
-
-    /**
-     * The default width of the comment in an option file. If the option
-     * and the comment exceeds the width of the device, the comment is
-     * truncated to the next line at the same columnar position of the
-     * previous comment line. If the option assignment line is longer than
-     * the width, the comment line is put before the option assignment it
-     * refers.
-     */
-
-    public static final int DEFAULT_FILE_COMMENT_SIZE = 16;
-
-    /**
-     * The String holding the value of the long option. If there is no
-     * long option, this value is set to null.
-     */
-
-    private String longOption;
-
-    /**
-     * The character holding the value of the short option. If there is no
-     * short option,t his value is set to '\0'.
-     */
-
-    private char shortOption;
-
-    /**
-     * The String holding the description of this option.
-     */
-
-    private String description;
-
-    /**
-     * A flag identifying whether this option is deprecated.
-     */
-
-    private boolean deprecated;
-
-    /**
-     * The field width for the option specification that is reporter for
-     * help.
-     */
-
-    private static int helpOptionSpecificationSize = DEFAULT_HELP_OPTION_SIZE;
-
-    /**
-     * The field width for the type name that is reported for help.
-     */
-
-    private static int helpTypenameSize = DEFAULT_HELP_TYPENAME_SIZE;
-
-    /**
-     * The field width for the description that is reported during help.
-     */
-
-    private static int helpDescriptionSize = DEFAULT_HELP_DESCRIPTION_SIZE;
-
-    /**
-     * The field width for the deprecated flag that is reported during
-     * help.
-     */
-
-    private static int helpDeprecatedSize = DEFAULT_HELP_DEPRECATED_SIZE;
-
-    /**
-     * The field width for the option specification that is reported when
-     * the options are listed in the built-in menu.
-     */
-
-    private static int menuOptionSpecificationSize = DEFAULT_MENU_OPTION_SIZE;
-
-    /**
-     * The field width for the type name that is reported when the options
-     * are listed in the built-in menu.
-     */
-
-    private static int menuTypenameSize = DEFAULT_MENU_TYPENAME_SIZE;
-
-    /**
-     * The field width for the description that is reported when the options
-     * are listed in the built-in menu.
-     */
-
-    private static int menuDescriptionSize = DEFAULT_MENU_DESCRIPTION_SIZE;
-
-    /**
-     * The field width for the deprecated flag that is reported when the
-     * options are listed in the build-in menu.
-     */
-
-    private static int menuDeprecatedSize = DEFAULT_MENU_DEPRECATED_SIZE;
-
-    /**
-     * The field width for the assignment portion of an option that is 
-     * written to a file.
-     */
-
-    private static int fileCompleteOptionSize =
-                                            DEFAULT_FILE_COMPLETE_OPTION_SIZE;
-
-    /**
-     * The field width for the comment portion of an option that is written
-     * to a file.
-     */
-
-    private static int fileCommentSize = DEFAULT_FILE_COMMENT_SIZE;
-
-    /**
-     * A field indicating whether an option has been invoked.
-     */
-
-    protected boolean invoked;
-
-    /**
-     * Returns this option's value as an Object.
-     *
-     * @return An object representation of this option.
-     */
-
-    public abstract Object getObject();
-
-    /**
-     * Returns the option's value as a String. This String should conform
-     * to the formatting requirements prescribed by a modify method.
-     *
-     * @return The option's value as a String conforming to formatting
-     *         requirements.
-     */
-
-    public abstract String getStringValue();
-
-    /**
-     * Constructs an option with no initial short or long option value,
-     * and is by default uninvoked and undeprecated, and has a description
-     * initialized to the empty string.
-     */
-
-    public Option() {
-	super();
-	description = "";
-    }
-
-    /**
-     * Constructs an option by copying the option passed.
-     *
-     * @param option  The option to copy for this object's construction.
-     */
-
-    public Option( Option option ) {
-	longOption = option.getLongOption();
-	shortOption = option.getShortOption();
-	description = option.getDescription();
-	deprecated = option.isDeprecated();
-    }
-
-    /**
-     * Constructs an option by initializing its long option with the
-     * value passed. The short option is equal to the null character,
-     * and the description is equal to the empty string.
-     *
-     * @param longOption The value of the long option
-     */
-
-    public Option( String longOption ) {
-	this.longOption = longOption;
-	this.shortOption = '\0';
-	description = "";
-    }
-
-    /**
-     * Constructs an option by initializing its short option with the
-     * value passed. The long option is equal to null, and the description
-     * is equal to the empty string.
-     *
-     * @param shortOption The value of the short option.
-     */
-
-    public Option( char shortOption ) {
-	this.shortOption = shortOption;
-	this.longOption = null;
-	description = "";
-    }
-
-    /**
-     * Constructs an option by initializing its short and long options
-     * with the values passed. The description is set to the empty string.
-     *
-     * @param longOption The value of the long option.
-     * @param shortOption The value of the short option.
-     */
-
-    public Option( String longOption, char shortOption ) {
-	this.longOption = longOption;
-	this.shortOption = shortOption;
-	description = "";
-    }
-
-    /**
-     * Sets the long option.
-     *
-     * @param longOption The value to set the long option.
-     */
-
-    public void setKey( String longOption ) {
-	this.longOption = longOption;
-    }
-
-    /**
-     * Sets the short option.
-     *
-     * @param shortOption The value to set the short option.
-     */
-
-    public void setKey( char shortOption ) {
-	this.shortOption = shortOption;
-    }
-
-    /**
-     * Sets the short option.
-     *
-     * @param shortOption The value to set the short option.
-     */
-
-    public void setShortOption( char shortOption ) {
-	setKey( shortOption );
-    }
-
-    /**
-     * Sets the long option.
-     *
-     * @param longOption The value to set the long option.
-     */
-
-    public void setLongOption( String longOption ) {
-	setKey( longOption );
-    }
-
-    /**
-     * Sets the description of this option.
-     *
-     * @param description The description of this option.
-     */
-
-    public void setDescription( String description ) {
-	this.description = description;
-    }
-
-    /**
-     * Sets the deprecated flag to the value passed.
-     *
-     * @param deprecated A flag indicating whether the option is deprecated.
-     */
-
-    public void setDeprecated( boolean deprecated ) {
-	this.deprecated = deprecated;
-    }
-
-    /**
-     * Sets the field width for the option specification displayed
-     * in the help report.
-     *
-     * @param newSize The size to set the field width.
-     */
-
-    public static void setHelpOptionSpecificationSize( int newSize ) {
-	helpOptionSpecificationSize = newSize;
-    }
-
-    /**
-     * Sets the field width for the type name displayed in the help report.
-     *
-     * @param newSize The size to set the field width.
-     */
-
-    public static void setHelpTypenameSize( int newSize ) {
-	helpTypenameSize = newSize;
-    }
-
-    /**
-     * Sets the field width for the description displayed in the help report.
-     *
-     * @param newSize The size to set the field width.
-     */
-
-    public static void setHelpDescriptionSize( int newSize ) {
-	helpDescriptionSize = newSize;
-    }
-
-    /**
-     * Sets the field width for the deprecated flag displayed in the
-     * help report.
-     *
-     * @param newSize The size to set the field width.
-     */
-
-    public static void setHelpDeprecatedSize( int newSize ) {
-	helpDeprecatedSize = newSize;
-    }
-
-    /**
-     * Sets the field width for the option specification displayed
-     * in the menu listing of options.
-     *
-     * @param newSize The size to set the field width.
-     */
-
-    public static void setMenuOptionSpecificationSize( int newSize ) {
-	menuOptionSpecificationSize = newSize;
-    }
-
-    /**
-     * Sets the field width for the type name displayed in the menu
-     * listing of options.
-     *
-     * @param newSize The size to set the field width.
-     */
-
-    public static void setMenuTypenameSize( int newSize ) {
-	menuTypenameSize = newSize;
-    }
-
-    /**
-     * Sets the field width for the option description displayed
-     * in the menu listing of options.
-     *
-     * @param newSize The size to set the field width.
-     */
-
-    public static void setMenuDescriptionSize( int newSize ) {
-	menuDescriptionSize = newSize;
-    }
-
-    /**
-     * Sets the field width for the deprecated flag displayed
-     * in the menu listing of options.
-     *
-     * @param newSize The size to set the field width.
-     */
-
-    public static void setMenuDeprecatedSize( int newSize ) {
-	menuDeprecatedSize = newSize;
-    }
-
-    /**
-     * Sets the assignment field width used when options files are written.
-     *
-     * @param newSize The size to set the field width.
-     */
-
-    public static void setFileCompleteOptionSize( int newSize ) {
-	fileCompleteOptionSize = newSize;
-    }
-
-    /**
-     * Sets the assignment field width used when options files are written.
-     *
-     * @param newSize The size to set the field width.
-     */
-
-    public static void setFileCommentSize( int newSize ) {
-	fileCommentSize = newSize;
-    }
-
-    /**
-     * Sets whether this option has been invoked.
-     *
-     * @param A boolean indicating whether this option has been invoked.
-     */
-
-    public void setInvoked( boolean b ) {
-	invoked = b;
-    }
-
-    /**
-     * Deprecates this option.
-     */
-
-    public void deprecate() {
-	setDeprecated( true );
-    }
-
-    /**
-     * Return the name of this option. This method returns the same value as
-     * the getLongOption accessor.
-     *
-     * @return The name of this otpion.
-     */
-
-    public String getName() {
-	return longOption;
-    }
-
-    /**
-     * Return the short option key. There is no short option when this
-     * character is the null character.
-     *
-     * @return The short option key of this option.
-     */
-
-    public char getShortOption() {
-	return shortOption;
-    }
-
-    /**
-     * Return the long option key. There is no long option when this value
-     * is null.
-     *
-     * @return The long option key of this option.
-     */
-
-    public String getLongOption() {
-	return longOption;
-    }
-
-
-    /**
-     * Return a line used for help reporting.
-     *
-     * @return A line used for help reporting.
-     */
-
-    public String getHelp() {
-	return getHelpOptionSpecification() + " " + getHelpTypeName() + " "
-	    + getHelpDescription() + " " + getHelpDeprecated();
-    }
-
-    /**
-     * Return the option specification field used during help reporting.
-     *
-     * @return The option specification field.
-     */
-
-    public String getHelpOptionSpecification() {
-	return Utility.expandString(
-	    ( ( ( shortOption != '\0' ) ? ( "-" + getShortOption() ) : "  " )
-	    + ( ( longOption != null && shortOption != '\0' ) ? ", " : "  " )
-	    + ( ( longOption != null ) ? "--" + getLongOption(): "" ) ),
-			     helpOptionSpecificationSize );
-    }
-
-    /**
-     * Return the type name field used during help reporting.
-     *
-     * @return The type name field.
-     */
-
-    public String getHelpTypeName() {
-	return Utility.expandString( "<" + getTypeName() + ">",
-				     helpTypenameSize );
-    }
-
-    /**
-     * Return the description field used during help reporting.
-     *
-     * @return The description field.
-     */
-
-    public String getHelpDescription() {
-	return Utility.expandString( getDescription(),
-			     helpDescriptionSize );
-    }
-
-    /**
-     * Return the deprecated field used during help reporting.
-     *
-     * @return The deprecated field.
-     */
-
-    public String getHelpDeprecated() {
-	return Utility.expandString( isDeprecated() ? "[d]" : "",
-			     helpDeprecatedSize );
-    }
-
-    /**
-     * Return the header displayed at the top of the help report.
-     *
-     * @return The header displayed at the top of the help report.
-     */
-
-    public static String getHelpHeader() {
-	return Utility.expandString( "Option Name",
-				     helpOptionSpecificationSize ) + " "
-	    + Utility.expandString( "Type", helpTypenameSize ) + " "
-	    + Utility.expandString( "Description", helpDescriptionSize );
-    }
-
-    /**
-     * The description explaining the meaning of this option.
-     *
-     * @return This options description.
-     */
-
-    public String getDescription() {
-	return description;
-    }
-
-    /**
-     * The hash key of this option. This is used by classes that implement
-     * the option registrar class. This method should <b>not</b> be overrided.
-     *
-     * @return The hash key of this option.
-     */
-
-    public String getHashKey() {
-	return Option.getHashKey( longOption, shortOption );
-    }
-
-    /**
-     * The hash key of an option if there is no short option. This method
-     * should <b>not</b> be overrided.
-     *
-     * @param longOption The long option.
-     *
-     * @return The hash key of this option based on the long option.
-     */
-
-    public static String getHashKey( String longOption ) {
-	return "," + ( ( longOption != null ) ? longOption : "" );
-    }
-
-    /**
-     * The hash key of an option if there is no long option. This method
-     * should <b>not</b> be overrided.
-     *
-     * @param shortOption The short option.
-     *
-     * @return The hash key of this option based on the short option.
-     */
-
-    public static String getHashKey( char shortOption ) {
-	return "" + ( shortOption != '\0' ) + ",";
-    }
-
-    /**
-     * The hash key of an option if there both short and long options are
-     * defined.
-     *
-     * @param shortOption The short option.
-     * @param longOption  The long option.
-     *
-     * @return The hash key of this option based on both the short and long
-     *         options.
-     */
-
-    public static String getHashKey( String longOption, char shortOption ) {
-	return ( ( shortOption == '\0' ) ? "" : "" + shortOption ) +
-	    ( ( longOption == null ) ? "," : "," + longOption );
-    }
-
-    /**
-     * Returns whether this option is deprecated.
-     *
-     * @return A boolean indicating whether this option is deprecated.
-     */
-
-    public boolean isDeprecated() {
-	return deprecated;
-    }
-
-    /**
-     * Returns whether this option has been invoked.
-     *
-     * @return A boolean indicating whether this option has been invoked.
-     */
-
-    public boolean isInvoked() {
-	return invoked;
-    }
-
-    /**
-     * Returns (a) line(s) representing this option. This line is usually
-     * later written to an options file.
-     *
-     * @return Line(s) representing this option.
-     */
-
-    public String getOptionFileLine() {
-	boolean descriptionPrinted = false;
-	String retval = "";
-	String optionText = "";
-	String strval = getStringValue();
-	if ( longOption != null ) {
-	    optionText += "--" + longOption;
-	}
-	else if ( shortOption != '\0' ) {
-	    optionText += "-" + shortOption;
-	}
-	if ( optionText.length() > 0
-	     && Utility.trim( strval ).length() >= 0 ) {
-	    optionText += "=" + strval;
-	}
-	if ( optionText.length() <= fileCompleteOptionSize ) {
-	    retval += Utility.expandString( optionText,
-					    fileCompleteOptionSize );
-	}
-	else {
-	    retval += "; " + description + "\n";
-	    retval += optionText;
-	    descriptionPrinted = true;
-	}
-	if ( !descriptionPrinted ) { 
-	    StringBuffer descsplit = new StringBuffer( description );
-	    boolean tmp = false;
-	    while ( descsplit.length() > 0 ) {
-		String st = "";
-		int size = 0;
-		if ( tmp ) {
-		    st += Utility.getSpaces( fileCompleteOptionSize );
-		}
-		size = ( descsplit.length() >= fileCommentSize )
-		    ? fileCommentSize : descsplit.length();
-		st += "; " + descsplit.substring( 0, size );
-		descsplit.delete( 0, size );
-		retval += st + "\n";
-		tmp = true;
-	    }
-	    descriptionPrinted = true;
-	}
-	return retval;
-    }
-
-    /**
-     * Returns the field width for the option specification displayed in the
-     * help report.
-     *
-     * @return The field width.
-     */
-
-    public static int getHelpOptionSpecificationSize() {
-	return helpOptionSpecificationSize;
-    }
-
-    /**
-     * Returns the field width for the type name displayed in the help report.
-     *
-     * @return The field width.
-     */
-
-    public static int getHelpTypenameSize() {
-	return helpTypenameSize;
-    }
-
-    /**
-     * Returns the field width for the description displayed in the help
-     * report.
-     *
-     * @return The field width.
-     */
-
-    public static int getHelpDescriptionSize() {
-	return helpDescriptionSize;
-    }
-
-    /**
-     * Returns the field width for the deprecated flag displayed in the
-     * help report.
-     *
-     * @return The field width.
-     */
-
-    public static int getHelpDeprecatedSize() {
-	return helpDeprecatedSize;
-    }
-
-    /**
-     * Returns the field width for the option specification displayed in the
-     * menu listing of options.
-     *
-     * @return The field width.
-     */
-
-    public static int getMenuOptionSpecificationSize() {
-	return menuOptionSpecificationSize;
-    }
-
-    /**
-     * Returns the field width for the type name displayed in the
-     * menu listing of options.
-     *
-     * @return The field width.
-     */
-
-    public static int getMenuTypenameSize() {
-	return menuTypenameSize;
-    }
-
-    /**
-     * Returns the field width for the description displayed in the
-     * menu listing of options.
-     *
-     * @return The field width.
-     */
-
-    public static int getMenuDescriptionSize() {
-	return menuDescriptionSize;
-    }
-
-    /**
-     * Returns the field width for the deprecated flag displayed in the
-     * menu listing of options.
-     *
-     * @return The field width.
-     */
-
-    public static int getMenuDeprecatedSize() {
-	return menuDeprecatedSize;
-    }
-
-    /**
-     * Returns the field width for assignment portion of a option file line.
-     *
-     * @return The field width.
-     */
-
-    public static int getFileCompleteOptionSize() {
-	return fileCompleteOptionSize;
-    }
-
-    /**
-     * Returns the field width for assignment portion of a option file line.
-     *
-     * @return The field width.
-     */
-
-    public static int getFileCommentSize() {
-	return fileCommentSize;
-    }
-
-    /**
-     * Returns the type name of this option.
-     *
-     * @return The type name of this option.
-     */
-
-    public abstract String getTypeName();
-
-    /**
-     * Prepares the option for modification.
-     */
-
-    public void action() {
-	if ( deprecated ) {
-	    System.err.print( "Warning: " );
-	    if ( longOption != null ) {
-		System.err.print( "--" + longOption );
-	    }
-	    if ( shortOption != '\0' && longOption != null ) {
-		System.err.print( " or " );
-	    }
-	    if ( shortOption != '\0' ) {
-		System.err.println( "-" + shortOption + " is deprecated." );
-	    }
-	}
-    }
-
-} /** Option */
-
-
-
-
-
+package gnu.dtools.ritopt;
+
+/**
+ * Option.java
+ *
+ * Version
+ *    $Id$
+ */
+
+
+/**
+ * This is the principal base class for all Option classes. It contains
+ * constructors for short and long option initialization, utility members
+ * for help reporting and file writing, and deprecation facilities.<p>
+ *
+ * Options that provide array support should inherit from the ArrayOption
+ * class, and follow the guidelines defined both in the Option and
+ * ArrayOption class descriptions.<p>
+ *
+ * Non-abstract subclasses should implement the modify method. When an option
+ * is invoked, the value of the option is passed to the modify method.<p>
+ *
+ * Subclasses should provide several constructors so that registration is
+ * simple and uniform. Recommended constructors include a default constructor,
+ * an interface for initialization of short and long options,
+ * and one that allows both short and long option fields to be
+ * initialized. If the subclass implementation provides constructors which
+ * initialize its members then the member parameters must be before
+ * the short and long option initialization parameters.<p>
+ *
+ * Event driven option processing is provided in the NotifyOption class. In
+ * order to use a NotifyOption, the recipient object must implement the
+ * OptionListener class. Although it is not required, subclass implementations
+ * of NotifyOption should implement the OptionNotifier interface.<p>
+ *
+ * By default, the Option class considers the width of an output device
+ * to be eighty characters. It initializes the width of the help fields
+ * based on this figure. If a field exceeds its field width, it is
+ * truncated. The width constraints can be changed by invoking the appropriate
+ * static mutators.<p>
+ *
+ * Similar to the help reporting facilities, the same constraints are placed
+ * on the listing of options provided by the built-in menu interface. These
+ * constraints can be modified by executing the appropriate static mutators.
+ * <p>
+ *
+ * The Option class provides a facility for writing options files.
+ * For option file writing, there are only two field width constraints; the
+ * assignment and the comment.
+ * <pre>
+ * Assignment:                           Comment:
+ * --longOrShortOption=optionValue       ;description goes here [d]
+ * </pre>
+ * As shown above, an assignment includes the long or short option text,
+ * an equal sign, and the option's value. The comment includes the
+ * description, and "[d]" if the option is deprecated.<p>
+ *
+ * If the assignment exceeds its field width, the comment is placed before
+ * the assignment on a separate line. The comment is truncated if it
+ * exceeds eighty characters when it is placed before the assignment.
+ * However, if the assignment does not exceeds its field width and the comment
+ * does, the comment is truncated, and continued on the next line at the
+ * columnar position defined by the assignment's field width. Field widths
+ * may be modified by invoking the appropriate static mutator.<p>
+ *
+ * This class also provides a facility for deprecating options. An option is
+ * deprecated to discourage its use without removing the functionality it
+ * provides. An option is deprecated by invoking the deprecate method.
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public abstract class Option implements OptionModifiable {
+
+    /**
+     * The default width of the option field when the help usage is displayed.
+     */
+
+    public static final int DEFAULT_HELP_OPTION_SIZE = 22;
+
+    /**
+     * The default width of the type name field when the help usage is
+     * display.
+     */
+
+    public static final int DEFAULT_HELP_TYPENAME_SIZE = 10;
+
+    /**
+     * The default width of the description when the help usage is displayed.
+     */
+
+    public static final int DEFAULT_HELP_DESCRIPTION_SIZE = 48;
+
+    /**
+     * The default width of the deprecated field when the help usage is
+     * displayed.
+     */
+
+    public static final int DEFAULT_HELP_DEPRECATED_SIZE = 3;
+
+    /**
+     * The default width of the option field when the menu usage is displayed.
+     */
+
+    public static final int DEFAULT_MENU_OPTION_SIZE = 15;
+
+    /**
+     * The default width of the type name field when the menu usage is
+     * displayed.
+     */
+
+    public static final int DEFAULT_MENU_TYPENAME_SIZE = 10;
+
+    /**
+     * The default width of the description field when the menu usage is
+     * displayed.
+     */
+
+    public static final int DEFAULT_MENU_DESCRIPTION_SIZE = 48;
+
+    /**
+     * The default width of the deprecated field when the menu usage is
+     * displayed.
+     */
+
+    public static final int DEFAULT_MENU_DEPRECATED_SIZE = 3;
+
+    /**
+     * The default width of the option assignment in an option file.
+     */
+
+    public static final int DEFAULT_FILE_COMPLETE_OPTION_SIZE = 60;
+
+    /**
+     * The default width of the comment in an option file. If the option
+     * and the comment exceeds the width of the device, the comment is
+     * truncated to the next line at the same columnar position of the
+     * previous comment line. If the option assignment line is longer than
+     * the width, the comment line is put before the option assignment it
+     * refers.
+     */
+
+    public static final int DEFAULT_FILE_COMMENT_SIZE = 16;
+
+    /**
+     * The String holding the value of the long option. If there is no
+     * long option, this value is set to null.
+     */
+
+    private String longOption;
+
+    /**
+     * The character holding the value of the short option. If there is no
+     * short option,t his value is set to '\0'.
+     */
+
+    private char shortOption;
+
+    /**
+     * The String holding the description of this option.
+     */
+
+    private String description;
+
+    /**
+     * A flag identifying whether this option is deprecated.
+     */
+
+    private boolean deprecated;
+
+    /**
+     * The field width for the option specification that is reporter for
+     * help.
+     */
+
+    private static int helpOptionSpecificationSize = DEFAULT_HELP_OPTION_SIZE;
+
+    /**
+     * The field width for the type name that is reported for help.
+     */
+
+    private static int helpTypenameSize = DEFAULT_HELP_TYPENAME_SIZE;
+
+    /**
+     * The field width for the description that is reported during help.
+     */
+
+    private static int helpDescriptionSize = DEFAULT_HELP_DESCRIPTION_SIZE;
+
+    /**
+     * The field width for the deprecated flag that is reported during
+     * help.
+     */
+
+    private static int helpDeprecatedSize = DEFAULT_HELP_DEPRECATED_SIZE;
+
+    /**
+     * The field width for the option specification that is reported when
+     * the options are listed in the built-in menu.
+     */
+
+    private static int menuOptionSpecificationSize = DEFAULT_MENU_OPTION_SIZE;
+
+    /**
+     * The field width for the type name that is reported when the options
+     * are listed in the built-in menu.
+     */
+
+    private static int menuTypenameSize = DEFAULT_MENU_TYPENAME_SIZE;
+
+    /**
+     * The field width for the description that is reported when the options
+     * are listed in the built-in menu.
+     */
+
+    private static int menuDescriptionSize = DEFAULT_MENU_DESCRIPTION_SIZE;
+
+    /**
+     * The field width for the deprecated flag that is reported when the
+     * options are listed in the build-in menu.
+     */
+
+    private static int menuDeprecatedSize = DEFAULT_MENU_DEPRECATED_SIZE;
+
+    /**
+     * The field width for the assignment portion of an option that is 
+     * written to a file.
+     */
+
+    private static int fileCompleteOptionSize =
+                                            DEFAULT_FILE_COMPLETE_OPTION_SIZE;
+
+    /**
+     * The field width for the comment portion of an option that is written
+     * to a file.
+     */
+
+    private static int fileCommentSize = DEFAULT_FILE_COMMENT_SIZE;
+
+    /**
+     * A field indicating whether an option has been invoked.
+     */
+
+    protected boolean invoked;
+
+    /**
+     * Returns this option's value as an Object.
+     *
+     * @return An object representation of this option.
+     */
+
+    public abstract Object getObject();
+
+    /**
+     * Returns the option's value as a String. This String should conform
+     * to the formatting requirements prescribed by a modify method.
+     *
+     * @return The option's value as a String conforming to formatting
+     *         requirements.
+     */
+
+    public abstract String getStringValue();
+
+    /**
+     * Constructs an option with no initial short or long option value,
+     * and is by default uninvoked and undeprecated, and has a description
+     * initialized to the empty string.
+     */
+
+    public Option() {
+	super();
+	description = "";
+    }
+
+    /**
+     * Constructs an option by copying the option passed.
+     *
+     * @param option  The option to copy for this object's construction.
+     */
+
+    public Option( Option option ) {
+	longOption = option.getLongOption();
+	shortOption = option.getShortOption();
+	description = option.getDescription();
+	deprecated = option.isDeprecated();
+    }
+
+    /**
+     * Constructs an option by initializing its long option with the
+     * value passed. The short option is equal to the null character,
+     * and the description is equal to the empty string.
+     *
+     * @param longOption The value of the long option
+     */
+
+    public Option( String longOption ) {
+	this.longOption = longOption;
+	this.shortOption = '\0';
+	description = "";
+    }
+
+    /**
+     * Constructs an option by initializing its short option with the
+     * value passed. The long option is equal to null, and the description
+     * is equal to the empty string.
+     *
+     * @param shortOption The value of the short option.
+     */
+
+    public Option( char shortOption ) {
+	this.shortOption = shortOption;
+	this.longOption = null;
+	description = "";
+    }
+
+    /**
+     * Constructs an option by initializing its short and long options
+     * with the values passed. The description is set to the empty string.
+     *
+     * @param longOption The value of the long option.
+     * @param shortOption The value of the short option.
+     */
+
+    public Option( String longOption, char shortOption ) {
+	this.longOption = longOption;
+	this.shortOption = shortOption;
+	description = "";
+    }
+
+    /**
+     * Sets the long option.
+     *
+     * @param longOption The value to set the long option.
+     */
+
+    public void setKey( String longOption ) {
+	this.longOption = longOption;
+    }
+
+    /**
+     * Sets the short option.
+     *
+     * @param shortOption The value to set the short option.
+     */
+
+    public void setKey( char shortOption ) {
+	this.shortOption = shortOption;
+    }
+
+    /**
+     * Sets the short option.
+     *
+     * @param shortOption The value to set the short option.
+     */
+
+    public void setShortOption( char shortOption ) {
+	setKey( shortOption );
+    }
+
+    /**
+     * Sets the long option.
+     *
+     * @param longOption The value to set the long option.
+     */
+
+    public void setLongOption( String longOption ) {
+	setKey( longOption );
+    }
+
+    /**
+     * Sets the description of this option.
+     *
+     * @param description The description of this option.
+     */
+
+    public void setDescription( String description ) {
+	this.description = description;
+    }
+
+    /**
+     * Sets the deprecated flag to the value passed.
+     *
+     * @param deprecated A flag indicating whether the option is deprecated.
+     */
+
+    public void setDeprecated( boolean deprecated ) {
+	this.deprecated = deprecated;
+    }
+
+    /**
+     * Sets the field width for the option specification displayed
+     * in the help report.
+     *
+     * @param newSize The size to set the field width.
+     */
+
+    public static void setHelpOptionSpecificationSize( int newSize ) {
+	helpOptionSpecificationSize = newSize;
+    }
+
+    /**
+     * Sets the field width for the type name displayed in the help report.
+     *
+     * @param newSize The size to set the field width.
+     */
+
+    public static void setHelpTypenameSize( int newSize ) {
+	helpTypenameSize = newSize;
+    }
+
+    /**
+     * Sets the field width for the description displayed in the help report.
+     *
+     * @param newSize The size to set the field width.
+     */
+
+    public static void setHelpDescriptionSize( int newSize ) {
+	helpDescriptionSize = newSize;
+    }
+
+    /**
+     * Sets the field width for the deprecated flag displayed in the
+     * help report.
+     *
+     * @param newSize The size to set the field width.
+     */
+
+    public static void setHelpDeprecatedSize( int newSize ) {
+	helpDeprecatedSize = newSize;
+    }
+
+    /**
+     * Sets the field width for the option specification displayed
+     * in the menu listing of options.
+     *
+     * @param newSize The size to set the field width.
+     */
+
+    public static void setMenuOptionSpecificationSize( int newSize ) {
+	menuOptionSpecificationSize = newSize;
+    }
+
+    /**
+     * Sets the field width for the type name displayed in the menu
+     * listing of options.
+     *
+     * @param newSize The size to set the field width.
+     */
+
+    public static void setMenuTypenameSize( int newSize ) {
+	menuTypenameSize = newSize;
+    }
+
+    /**
+     * Sets the field width for the option description displayed
+     * in the menu listing of options.
+     *
+     * @param newSize The size to set the field width.
+     */
+
+    public static void setMenuDescriptionSize( int newSize ) {
+	menuDescriptionSize = newSize;
+    }
+
+    /**
+     * Sets the field width for the deprecated flag displayed
+     * in the menu listing of options.
+     *
+     * @param newSize The size to set the field width.
+     */
+
+    public static void setMenuDeprecatedSize( int newSize ) {
+	menuDeprecatedSize = newSize;
+    }
+
+    /**
+     * Sets the assignment field width used when options files are written.
+     *
+     * @param newSize The size to set the field width.
+     */
+
+    public static void setFileCompleteOptionSize( int newSize ) {
+	fileCompleteOptionSize = newSize;
+    }
+
+    /**
+     * Sets the assignment field width used when options files are written.
+     *
+     * @param newSize The size to set the field width.
+     */
+
+    public static void setFileCommentSize( int newSize ) {
+	fileCommentSize = newSize;
+    }
+
+    /**
+     * Sets whether this option has been invoked.
+     *
+     * @param A boolean indicating whether this option has been invoked.
+     */
+
+    public void setInvoked( boolean b ) {
+	invoked = b;
+    }
+
+    /**
+     * Deprecates this option.
+     */
+
+    public void deprecate() {
+	setDeprecated( true );
+    }
+
+    /**
+     * Return the name of this option. This method returns the same value as
+     * the getLongOption accessor.
+     *
+     * @return The name of this otpion.
+     */
+
+    public String getName() {
+	return longOption;
+    }
+
+    /**
+     * Return the short option key. There is no short option when this
+     * character is the null character.
+     *
+     * @return The short option key of this option.
+     */
+
+    public char getShortOption() {
+	return shortOption;
+    }
+
+    /**
+     * Return the long option key. There is no long option when this value
+     * is null.
+     *
+     * @return The long option key of this option.
+     */
+
+    public String getLongOption() {
+	return longOption;
+    }
+
+
+    /**
+     * Return a line used for help reporting.
+     *
+     * @return A line used for help reporting.
+     */
+
+    public String getHelp() {
+	return getHelpOptionSpecification() + " " + getHelpTypeName() + " "
+	    + getHelpDescription() + " " + getHelpDeprecated();
+    }
+
+    /**
+     * Return the option specification field used during help reporting.
+     *
+     * @return The option specification field.
+     */
+
+    public String getHelpOptionSpecification() {
+	return Utility.expandString(
+	    ( ( ( shortOption != '\0' ) ? ( "-" + getShortOption() ) : "  " )
+	    + ( ( longOption != null && shortOption != '\0' ) ? ", " : "  " )
+	    + ( ( longOption != null ) ? "--" + getLongOption(): "" ) ),
+			     helpOptionSpecificationSize );
+    }
+
+    /**
+     * Return the type name field used during help reporting.
+     *
+     * @return The type name field.
+     */
+
+    public String getHelpTypeName() {
+	return Utility.expandString( "<" + getTypeName() + ">",
+				     helpTypenameSize );
+    }
+
+    /**
+     * Return the description field used during help reporting.
+     *
+     * @return The description field.
+     */
+
+    public String getHelpDescription() {
+	return Utility.expandString( getDescription(),
+			     helpDescriptionSize );
+    }
+
+    /**
+     * Return the deprecated field used during help reporting.
+     *
+     * @return The deprecated field.
+     */
+
+    public String getHelpDeprecated() {
+	return Utility.expandString( isDeprecated() ? "[d]" : "",
+			     helpDeprecatedSize );
+    }
+
+    /**
+     * Return the header displayed at the top of the help report.
+     *
+     * @return The header displayed at the top of the help report.
+     */
+
+    public static String getHelpHeader() {
+	return Utility.expandString( "Option Name",
+				     helpOptionSpecificationSize ) + " "
+	    + Utility.expandString( "Type", helpTypenameSize ) + " "
+	    + Utility.expandString( "Description", helpDescriptionSize );
+    }
+
+    /**
+     * The description explaining the meaning of this option.
+     *
+     * @return This options description.
+     */
+
+    public String getDescription() {
+	return description;
+    }
+
+    /**
+     * The hash key of this option. This is used by classes that implement
+     * the option registrar class. This method should <b>not</b> be overrided.
+     *
+     * @return The hash key of this option.
+     */
+
+    public String getHashKey() {
+	return Option.getHashKey( longOption, shortOption );
+    }
+
+    /**
+     * The hash key of an option if there is no short option. This method
+     * should <b>not</b> be overrided.
+     *
+     * @param longOption The long option.
+     *
+     * @return The hash key of this option based on the long option.
+     */
+
+    public static String getHashKey( String longOption ) {
+	return "," + ( ( longOption != null ) ? longOption : "" );
+    }
+
+    /**
+     * The hash key of an option if there is no long option. This method
+     * should <b>not</b> be overrided.
+     *
+     * @param shortOption The short option.
+     *
+     * @return The hash key of this option based on the short option.
+     */
+
+    public static String getHashKey( char shortOption ) {
+	return "" + ( shortOption != '\0' ) + ",";
+    }
+
+    /**
+     * The hash key of an option if there both short and long options are
+     * defined.
+     *
+     * @param shortOption The short option.
+     * @param longOption  The long option.
+     *
+     * @return The hash key of this option based on both the short and long
+     *         options.
+     */
+
+    public static String getHashKey( String longOption, char shortOption ) {
+	return ( ( shortOption == '\0' ) ? "" : "" + shortOption ) +
+	    ( ( longOption == null ) ? "," : "," + longOption );
+    }
+
+    /**
+     * Returns whether this option is deprecated.
+     *
+     * @return A boolean indicating whether this option is deprecated.
+     */
+
+    public boolean isDeprecated() {
+	return deprecated;
+    }
+
+    /**
+     * Returns whether this option has been invoked.
+     *
+     * @return A boolean indicating whether this option has been invoked.
+     */
+
+    public boolean isInvoked() {
+	return invoked;
+    }
+
+    /**
+     * Returns (a) line(s) representing this option. This line is usually
+     * later written to an options file.
+     *
+     * @return Line(s) representing this option.
+     */
+
+    public String getOptionFileLine() {
+	boolean descriptionPrinted = false;
+	String retval = "";
+	String optionText = "";
+	String strval = getStringValue();
+	if ( longOption != null ) {
+	    optionText += "--" + longOption;
+	}
+	else if ( shortOption != '\0' ) {
+	    optionText += "-" + shortOption;
+	}
+	if ( optionText.length() > 0
+	     && Utility.trim( strval ).length() >= 0 ) {
+	    optionText += "=" + strval;
+	}
+	if ( optionText.length() <= fileCompleteOptionSize ) {
+	    retval += Utility.expandString( optionText,
+					    fileCompleteOptionSize );
+	}
+	else {
+	    retval += "; " + description + "\n";
+	    retval += optionText;
+	    descriptionPrinted = true;
+	}
+	if ( !descriptionPrinted ) { 
+	    StringBuffer descsplit = new StringBuffer( description );
+	    boolean tmp = false;
+	    while ( descsplit.length() > 0 ) {
+		String st = "";
+		int size = 0;
+		if ( tmp ) {
+		    st += Utility.getSpaces( fileCompleteOptionSize );
+		}
+		size = ( descsplit.length() >= fileCommentSize )
+		    ? fileCommentSize : descsplit.length();
+		st += "; " + descsplit.substring( 0, size );
+		descsplit.delete( 0, size );
+		retval += st + "\n";
+		tmp = true;
+	    }
+	    descriptionPrinted = true;
+	}
+	return retval;
+    }
+
+    /**
+     * Returns the field width for the option specification displayed in the
+     * help report.
+     *
+     * @return The field width.
+     */
+
+    public static int getHelpOptionSpecificationSize() {
+	return helpOptionSpecificationSize;
+    }
+
+    /**
+     * Returns the field width for the type name displayed in the help report.
+     *
+     * @return The field width.
+     */
+
+    public static int getHelpTypenameSize() {
+	return helpTypenameSize;
+    }
+
+    /**
+     * Returns the field width for the description displayed in the help
+     * report.
+     *
+     * @return The field width.
+     */
+
+    public static int getHelpDescriptionSize() {
+	return helpDescriptionSize;
+    }
+
+    /**
+     * Returns the field width for the deprecated flag displayed in the
+     * help report.
+     *
+     * @return The field width.
+     */
+
+    public static int getHelpDeprecatedSize() {
+	return helpDeprecatedSize;
+    }
+
+    /**
+     * Returns the field width for the option specification displayed in the
+     * menu listing of options.
+     *
+     * @return The field width.
+     */
+
+    public static int getMenuOptionSpecificationSize() {
+	return menuOptionSpecificationSize;
+    }
+
+    /**
+     * Returns the field width for the type name displayed in the
+     * menu listing of options.
+     *
+     * @return The field width.
+     */
+
+    public static int getMenuTypenameSize() {
+	return menuTypenameSize;
+    }
+
+    /**
+     * Returns the field width for the description displayed in the
+     * menu listing of options.
+     *
+     * @return The field width.
+     */
+
+    public static int getMenuDescriptionSize() {
+	return menuDescriptionSize;
+    }
+
+    /**
+     * Returns the field width for the deprecated flag displayed in the
+     * menu listing of options.
+     *
+     * @return The field width.
+     */
+
+    public static int getMenuDeprecatedSize() {
+	return menuDeprecatedSize;
+    }
+
+    /**
+     * Returns the field width for assignment portion of a option file line.
+     *
+     * @return The field width.
+     */
+
+    public static int getFileCompleteOptionSize() {
+	return fileCompleteOptionSize;
+    }
+
+    /**
+     * Returns the field width for assignment portion of a option file line.
+     *
+     * @return The field width.
+     */
+
+    public static int getFileCommentSize() {
+	return fileCommentSize;
+    }
+
+    /**
+     * Returns the type name of this option.
+     *
+     * @return The type name of this option.
+     */
+
+    public abstract String getTypeName();
+
+    /**
+     * Prepares the option for modification.
+     */
+
+    public void action() {
+	if ( deprecated ) {
+	    System.err.print( "Warning: " );
+	    if ( longOption != null ) {
+		System.err.print( "--" + longOption );
+	    }
+	    if ( shortOption != '\0' && longOption != null ) {
+		System.err.print( " or " );
+	    }
+	    if ( shortOption != '\0' ) {
+		System.err.println( "-" + shortOption + " is deprecated." );
+	    }
+	}
+    }
+
+} /** Option */
+
+
+
+
+
diff --git a/src/java/gnu/dtools/ritopt/OptionArrayable.java b/src/java/gnu/dtools/ritopt/OptionArrayable.java
index e72f528..17b311d 100644
--- a/src/java/gnu/dtools/ritopt/OptionArrayable.java
+++ b/src/java/gnu/dtools/ritopt/OptionArrayable.java
@@ -1,65 +1,65 @@
-package gnu.dtools.ritopt;
-
-/**
- * If an option supports array registration and processing then it
- * should implement this interface.<p>
- *
- * For example, let's say we are implementing an integer array option class.
- *
- * <pre>
- * public class MyIntArray extends ArrayOption implements OptionArrayable,
- *                                                        OptionModifiable {
- *    int values[];
- *
- *    // rest of implementation goes here.
- *
- *    public void modify(java.lang.String[] value) {
- *       try {
- *          int newValues[] = new int[ value.length ];
- *          for int( n = 0; n < value.length; n++ ) {
- *             newValues[ n ] = Integer.parseInt( value[ n ] );
- *          }
- *          values[ n ] = newValues;
- *       }
- *       catch ( NumberFormatException e ) {
- *          throw new OptionModificationException( "Not a number." );
- *       }
- *    }
- * }
- * </pre>
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public interface OptionArrayable extends OptionModifiable {
-
-   /**
-     * Modify an option based on several string representations.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    void modify( String value[] ) throws OptionModificationException;
-}
+package gnu.dtools.ritopt;
+
+/**
+ * If an option supports array registration and processing then it
+ * should implement this interface.<p>
+ *
+ * For example, let's say we are implementing an integer array option class.
+ *
+ * <pre>
+ * public class MyIntArray extends ArrayOption implements OptionArrayable,
+ *                                                        OptionModifiable {
+ *    int values[];
+ *
+ *    // rest of implementation goes here.
+ *
+ *    public void modify(java.lang.String[] value) {
+ *       try {
+ *          int newValues[] = new int[ value.length ];
+ *          for int( n = 0; n < value.length; n++ ) {
+ *             newValues[ n ] = Integer.parseInt( value[ n ] );
+ *          }
+ *          values[ n ] = newValues;
+ *       }
+ *       catch ( NumberFormatException e ) {
+ *          throw new OptionModificationException( "Not a number." );
+ *       }
+ *    }
+ * }
+ * </pre>
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public interface OptionArrayable extends OptionModifiable {
+
+   /**
+     * Modify an option based on several string representations.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    void modify( String value[] ) throws OptionModificationException;
+}
diff --git a/src/java/gnu/dtools/ritopt/OptionEvent.java b/src/java/gnu/dtools/ritopt/OptionEvent.java
index 06b1149..c8a9ca2 100644
--- a/src/java/gnu/dtools/ritopt/OptionEvent.java
+++ b/src/java/gnu/dtools/ritopt/OptionEvent.java
@@ -1,195 +1,195 @@
-package gnu.dtools.ritopt;
-/**
- * OptionEvent.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * An event indicating that an option has been invoked.
- * When an OptionListener is notified by a NotifyOption, it passes
- * an OptionEvent object to all registered listeners. This includes
- * the target NotifyOption, a command (NotifyOption passes the long
- * option by default), and the option value.<p>
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class OptionEvent {
-
-    /**
-     * The command string associated with this option processing event.
-     */
-
-    private String command;
-
-    /**
-     * The value of the option processing event.
-     */
-
-    private String value;
-
-    /**
-     * The target Option in which the option processing event occurred.
-     */
-
-    private Option target;
-
-    /**
-     * Constructs an option event with the command set to "Default", the
-     * value set to the empty string, and the target set to null.
-     */
-
-    public OptionEvent() {
-	this( "Default", "", null );
-    }
-
-    /**
-     * Constructs an option event with the command set to the value passed,
-     * the value set to the empty string, and the target set to null.
-     *
-     * @param command The value to set the command string.
-     */
-
-    public OptionEvent( String command ) {
-	this( command, "", null );
-    }
-
-    /**
-     * Constructs an option event with the command and value set to the
-     * values passed, and the target set to null.
-     *
-     * @param command The value to set the command string.
-     * @param value   The value to set the option value.
-     */
-
-    public OptionEvent( String command, String value ) {
-	this( command, value, null );
-    }
-
-    /**
-     * Constructs an option event with the command set to the long or short
-     * option (whichever exists), the value set to the current value of
-     * the option, and the target option set to the option passed. If
-     * neither the short or long option exist, a value of "Default" is
-     * assigned.
-     *
-     * @param option The option to initialize this OptionEvent.
-     */
-
-    public OptionEvent( Option option ) {
-	this.target = option;
-	this.value = option.getStringValue();
-	String longOption = option.getLongOption();
-	char shortOption = option.getShortOption();
-						      
-        if ( longOption != null ) {
-	    command = longOption;
-	}
-	else if ( shortOption != '\0' ) {
-	    command = new Character( shortOption ).toString();
-	}
-	else {
-	    command = "Default";
-	}
-    }
-
-    /**
-     * Constructs an option event with the command, value, and target
-     * set to the values passed.
-     *
-     * @param command The value to set the command string.
-     * @param value   The value to set the option value.
-     * @param target  The target option in which the option processing
-     *                event occurred.
-     */
-
-    public OptionEvent( String command, String value, Option target ) {
-	this.command = command;
-	this.value = value;
-	this.target = target;
-    }
-
-    /**
-     * Returns the command string associated with the option.
-     *
-     * @return The command string associated with the option.
-     */
-
-    public String getCommand() {
-	return command;
-    }
-
-    /**
-     * Returns the value associated with the target option.
-     *
-     * @return The value associated with the target option.
-     */
-
-    public String getValue() {
-	return value;
-    }
-
-    /**
-     * Returns the target option of the option processing event.
-     *
-     * @return The target option.
-     */
-
-    public Option getTarget() {
-	return target;
-    }
-
-    /**
-     * Sets the command string to the value passed.
-     *
-     * @param command The value to set the command string.
-     */
-
-    public void setCommand( String command ) {
-	this.command = command;
-    }
-
-    /**
-     * Sets the value of this option event. This value generally should be
-     * equal to the value of the target option.
-     *
-     * @param value   The value of the option event.
-     */
-
-    public void setValue( String value ) {
-	this.value = value;
-    }
-
-    /**
-     * Sets the target option of the option processing event.
-     *
-     * @param target   The target option.
-     */
-
-    public void setTarget( Option target ) {
-	this.target = target;
-    }
-
-}
+package gnu.dtools.ritopt;
+/**
+ * OptionEvent.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * An event indicating that an option has been invoked.
+ * When an OptionListener is notified by a NotifyOption, it passes
+ * an OptionEvent object to all registered listeners. This includes
+ * the target NotifyOption, a command (NotifyOption passes the long
+ * option by default), and the option value.<p>
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class OptionEvent {
+
+    /**
+     * The command string associated with this option processing event.
+     */
+
+    private String command;
+
+    /**
+     * The value of the option processing event.
+     */
+
+    private String value;
+
+    /**
+     * The target Option in which the option processing event occurred.
+     */
+
+    private Option target;
+
+    /**
+     * Constructs an option event with the command set to "Default", the
+     * value set to the empty string, and the target set to null.
+     */
+
+    public OptionEvent() {
+	this( "Default", "", null );
+    }
+
+    /**
+     * Constructs an option event with the command set to the value passed,
+     * the value set to the empty string, and the target set to null.
+     *
+     * @param command The value to set the command string.
+     */
+
+    public OptionEvent( String command ) {
+	this( command, "", null );
+    }
+
+    /**
+     * Constructs an option event with the command and value set to the
+     * values passed, and the target set to null.
+     *
+     * @param command The value to set the command string.
+     * @param value   The value to set the option value.
+     */
+
+    public OptionEvent( String command, String value ) {
+	this( command, value, null );
+    }
+
+    /**
+     * Constructs an option event with the command set to the long or short
+     * option (whichever exists), the value set to the current value of
+     * the option, and the target option set to the option passed. If
+     * neither the short or long option exist, a value of "Default" is
+     * assigned.
+     *
+     * @param option The option to initialize this OptionEvent.
+     */
+
+    public OptionEvent( Option option ) {
+	this.target = option;
+	this.value = option.getStringValue();
+	String longOption = option.getLongOption();
+	char shortOption = option.getShortOption();
+						      
+        if ( longOption != null ) {
+	    command = longOption;
+	}
+	else if ( shortOption != '\0' ) {
+	    command = new Character( shortOption ).toString();
+	}
+	else {
+	    command = "Default";
+	}
+    }
+
+    /**
+     * Constructs an option event with the command, value, and target
+     * set to the values passed.
+     *
+     * @param command The value to set the command string.
+     * @param value   The value to set the option value.
+     * @param target  The target option in which the option processing
+     *                event occurred.
+     */
+
+    public OptionEvent( String command, String value, Option target ) {
+	this.command = command;
+	this.value = value;
+	this.target = target;
+    }
+
+    /**
+     * Returns the command string associated with the option.
+     *
+     * @return The command string associated with the option.
+     */
+
+    public String getCommand() {
+	return command;
+    }
+
+    /**
+     * Returns the value associated with the target option.
+     *
+     * @return The value associated with the target option.
+     */
+
+    public String getValue() {
+	return value;
+    }
+
+    /**
+     * Returns the target option of the option processing event.
+     *
+     * @return The target option.
+     */
+
+    public Option getTarget() {
+	return target;
+    }
+
+    /**
+     * Sets the command string to the value passed.
+     *
+     * @param command The value to set the command string.
+     */
+
+    public void setCommand( String command ) {
+	this.command = command;
+    }
+
+    /**
+     * Sets the value of this option event. This value generally should be
+     * equal to the value of the target option.
+     *
+     * @param value   The value of the option event.
+     */
+
+    public void setValue( String value ) {
+	this.value = value;
+    }
+
+    /**
+     * Sets the target option of the option processing event.
+     *
+     * @param target   The target option.
+     */
+
+    public void setTarget( Option target ) {
+	this.target = target;
+    }
+
+}
diff --git a/src/java/gnu/dtools/ritopt/OptionException.java b/src/java/gnu/dtools/ritopt/OptionException.java
index 3154e38..70b9950 100644
--- a/src/java/gnu/dtools/ritopt/OptionException.java
+++ b/src/java/gnu/dtools/ritopt/OptionException.java
@@ -1,48 +1,48 @@
-package gnu.dtools.ritopt;
-
-/**
- * OptionException.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * An OptionException is thrown when an error occurs during option processing,
- * modification, or registration. This class is the base class for all
- * run-time based option processing exceptions. A class must throw an instance
- * of one of the derived classes as this implementation is abstract.
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public abstract class OptionException extends RuntimeException {
-
-    /**
-     * Constructs an OptionException.
-     *
-     * @param msg The exception message.
-     */
-
-    OptionException( String msg ) {
-	super( msg );
-    }
-}
+package gnu.dtools.ritopt;
+
+/**
+ * OptionException.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * An OptionException is thrown when an error occurs during option processing,
+ * modification, or registration. This class is the base class for all
+ * run-time based option processing exceptions. A class must throw an instance
+ * of one of the derived classes as this implementation is abstract.
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public abstract class OptionException extends RuntimeException {
+
+    /**
+     * Constructs an OptionException.
+     *
+     * @param msg The exception message.
+     */
+
+    OptionException( String msg ) {
+	super( msg );
+    }
+}
diff --git a/src/java/gnu/dtools/ritopt/OptionListener.java b/src/java/gnu/dtools/ritopt/OptionListener.java
index 863aa3a..bd9d170 100644
--- a/src/java/gnu/dtools/ritopt/OptionListener.java
+++ b/src/java/gnu/dtools/ritopt/OptionListener.java
@@ -1,54 +1,54 @@
-package gnu.dtools.ritopt;
-
-/**
- * OptionListener.java
- *
- * Version:
- *   $Id$
- */
-
-/**
- * This interface is used to receive notification of option processing
- * events. Implementors are registered by being passed to an OptionNotifier's
- * addOptionListener method.
- *
- * Option processing events occur when an option is invoked at the command
- * line, menu, or is present in an options file.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public interface OptionListener {
-
-    /**
-     * Invoked when an option processing event occurs. Option processing
-     * events occur when an option is invoked at the command line, menu,
-     * or is present in an options file.
-     *
-     * @param e   An object containing information about the option processing
-     *            and invocation event.
-     */
-
-    public void optionInvoked( OptionEvent e );
-
-} /** OptionListener **/
+package gnu.dtools.ritopt;
+
+/**
+ * OptionListener.java
+ *
+ * Version:
+ *   $Id$
+ */
+
+/**
+ * This interface is used to receive notification of option processing
+ * events. Implementors are registered by being passed to an OptionNotifier's
+ * addOptionListener method.
+ *
+ * Option processing events occur when an option is invoked at the command
+ * line, menu, or is present in an options file.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public interface OptionListener {
+
+    /**
+     * Invoked when an option processing event occurs. Option processing
+     * events occur when an option is invoked at the command line, menu,
+     * or is present in an options file.
+     *
+     * @param e   An object containing information about the option processing
+     *            and invocation event.
+     */
+
+    public void optionInvoked( OptionEvent e );
+
+} /** OptionListener **/
diff --git a/src/java/gnu/dtools/ritopt/OptionMenu.java b/src/java/gnu/dtools/ritopt/OptionMenu.java
index b0fc908..b133bac 100644
--- a/src/java/gnu/dtools/ritopt/OptionMenu.java
+++ b/src/java/gnu/dtools/ritopt/OptionMenu.java
@@ -1,273 +1,273 @@
-package gnu.dtools.ritopt;
-
-/**
- * OptionMenu.java
- *
- * Version:
- *    $Id$
- */
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-
-/**
- * This class facilitates the built-in menu feature for ritopt. When the
- * --menu long option is invoked, an instance of this class is notified,
- * and the menu system starts.
- *
- * Here is an example run of the built-in menu.
- * <pre>
- * -> ?
- *         - Options Delimiter
- *         ? Help
- *         = Run program and return to menu
- *         ! Shell to Operating System
- *         $ Exit menu
- *         + Additional options
- *         @<filename> Get options from file [default.opt]
- *         @@ Get options from file [default.opt]
- *         %<filename> Put options in file
- *         %% Put options in file [default.opt]
- *         . Quit
- * -> =ls
- * -> =uname
- * CYGWIN_ME-4.90
- * Exit status: 0
- * Press enter to continue...
- *
- * -> =ls
- * CVS
- * Makefile
- * Makefile.am
- * Makefile.in
- * edu
- * gnu
- * ritopt.jar
- * Exit status: 0
- * Press enter to continue..
- *
- * -> --help
- * java FavoriteFood @optionfile [module] OPTIONS ... [module] OPTIONS
- *
- * Use --menu to invoke the interactive built-in menu.
- *
- * Option Name     Type       Description
- *
- * -h, --help      <NOTIFY>   Displays help for each option.
- * -m, --menu      <NOTIFY>   Displays the built-in interactive menu.
- *     --fatfree   <BOOLEAN>  No description given
- * -v, --version   <NOTIFY>   Displays version information.
- *     --name      <STRING>   No description given
- * -g, --grub      <STRING>   Favorite Food
- * -f, --food      <STRING>   Favorite Food
- * -c, --food-coun <STRING>   No description given
- *
- * -> --grub=tacos
- * Warning: --grub or -g is deprecated.
- * -> --grubb
- * Error: Option --grubb does not exist in module 'General'.
- * -> .
- *
- * </pre>
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class OptionMenu implements OptionListener {
-
-    /**
-     * Commands starting with this substring are option invocations.
-     */
-
-    public static final String OPTION_COMMAND_CHAR = "-";
-
-    /**
-     * This command without any arguments displays the command summary.
-     * Otherwise, specific help information is provided based on the
-     * argument.
-     */
-
-    public static final String HELP_COMMAND_CHAR = "?";
-
-    /**
-     * This command must have an argument. When invoked, it executes
-     * the argument at the command shell.
-     */
-
-    public static final String RUN_COMMAND_CHAR = "=";
-
-    /**
-     * This command spawns a shell.
-     */
-
-    public static final String SHELL_COMMAND_CHAR = "!";
-
-    /**
-     * This command exits the built-in menu system.
-     */
-
-    public static final String EXIT_MENU_COMMAND_CHAR = "$";
-
-    /**
-     * This command lists registered option modules.
-     */
-
-    public static final String LIST_MODULES_COMMAND_CHAR = "+";
-
-    /**
-     * This command without any arguments loads the default option file.
-     * Otherwise, the file as the argument is loaded.
-     */
-
-    public static final String FILE_READ_COMMAND_CHAR = "@";
-
-    /**
-     * This command without any arguments writes to the default option file.
-     * Otherwise, the file as the argument is written.
-     */
-
-    public static final String FILE_WRITE_COMMAND_CHAR = "%";
-
-    /**
-     * Loads an option module. Invoking this command without any arguments,
-     * the default option module is loaded.
-     */
-
-    public static final String FILE_MODULE_COMMAND_CHAR = ":";
-
-    /**
-     * The menu prompt used for the built-in menu system.
-     */
-
-    public static final String MENU_PROMPT = "-> ";
-
-    /**
-     * The options registrar associated with this option menu.
-     */
-
-    private Options options;
-
-    /**
-     * A reader which is connected to standard input.
-     */
-
-    private BufferedReader reader;
-
-    /**
-     * Constructs a new built-in menu attaching it to the options registrar
-     * passed.
-     *
-     * @param options The option registrar associated with this built-in
-     *                menu.
-     */
-
-    public OptionMenu( Options options ) {
-	this.options = options;
-	reader = new BufferedReader( new InputStreamReader( System.in ) );
-    }
-
-    /**
-     * Starts the built-in menu system.
-     */
-
-    public void startMenu() {
-	String command = "";
-	while ( !command.equals( "$" ) ) {
-	    System.out.print( MENU_PROMPT );
-	    try {
-		command = reader.readLine();
-	    }
-	    catch ( IOException e ) {
-		return;
-	    }
-	    boolean commandEntered = command != null && command.length() > 0;
-	    if (commandEntered && command.equals( "?" ) ) {
-		System.err.println( "\t- Options Delimiter" );
-		System.err.println( "\t? Help" );
-		System.err.println( "\t= Run program and return to menu" );
-		System.err.println( "\t! Shell to Operating System" );
-		System.err.println( "\t$ Exit menu" );
-		System.err.println( "\t+ Additional options" );
-		System.err.println( "\t@<filename> Get options from file ["
-				    + options.getDefaultOptionFilename()
-				    + "]" );
-		System.err.println( "\t@@ Get options from file ["
-				    + options.getDefaultOptionFilename()
-				    + "]" );
-                System.err.println( "\t%<filename> Put options in file" );
-		System.err.println( "\t%% Put options in file ["
-				    + options.getDefaultOptionFilename()
-				    + "]" );
-                System.err.println( "\t. Quit" );
-	    }
-	    else if ( commandEntered &&
-		      ( command.substring( 0, 1 ).equals(
-					    FILE_READ_COMMAND_CHAR )
-		      || command.substring( 0, 1 ).equals(
-					    FILE_WRITE_COMMAND_CHAR )
-		      || command.substring( 0, 1 ).equals(
-                                            OPTION_COMMAND_CHAR )
-		      || command.substring( 0, 1 ).equals(
-                                            FILE_MODULE_COMMAND_CHAR ) ) ) {
-		options.process( command );
-	    }
-	    else if ( commandEntered &&
-		      command.substring( 0, 1 ).equals( SHELL_COMMAND_CHAR ) ) {
-
-	    }
-	    else if ( commandEntered &&
-		      command.substring( 0, 1 ).equals( RUN_COMMAND_CHAR ) ) {
-		try {
-		    SimpleProcess p
-			= new SimpleProcess( Runtime.getRuntime().exec( command.substring( 1 ) ) );
-		    System.err.println( "Exit status: " + p.waitFor() );
-		}
-		catch ( Exception e ) {
-		    System.err.println( "ritopt: An Error Occurred During Process Execution" );
-		    e.printStackTrace();
-		}
-		finally {
-		    System.out.println( "Press enter to continue..." );
-		    try {
-			reader.readLine();
-		    } catch ( IOException e ) { }
-		}
-	    }
-	    else {
-		System.err.println( "(Type ? for Help)" );
-	    }
-	}
-    }
-
-    /**
-     * This method is notified when the --menu option is specified.
-     *
-     * @param event    The event associated.
-     */
-
-    public void optionInvoked( OptionEvent event ) {
-	if ( event.getCommand().equals( "menu" ) ) {
-	    startMenu();
-	}
-    }
-} /** OptionMenu **/
+package gnu.dtools.ritopt;
+
+/**
+ * OptionMenu.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+/**
+ * This class facilitates the built-in menu feature for ritopt. When the
+ * --menu long option is invoked, an instance of this class is notified,
+ * and the menu system starts.
+ *
+ * Here is an example run of the built-in menu.
+ * <pre>
+ * -> ?
+ *         - Options Delimiter
+ *         ? Help
+ *         = Run program and return to menu
+ *         ! Shell to Operating System
+ *         $ Exit menu
+ *         + Additional options
+ *         @<filename> Get options from file [default.opt]
+ *         @@ Get options from file [default.opt]
+ *         %<filename> Put options in file
+ *         %% Put options in file [default.opt]
+ *         . Quit
+ * -> =ls
+ * -> =uname
+ * CYGWIN_ME-4.90
+ * Exit status: 0
+ * Press enter to continue...
+ *
+ * -> =ls
+ * CVS
+ * Makefile
+ * Makefile.am
+ * Makefile.in
+ * edu
+ * gnu
+ * ritopt.jar
+ * Exit status: 0
+ * Press enter to continue..
+ *
+ * -> --help
+ * java FavoriteFood @optionfile [module] OPTIONS ... [module] OPTIONS
+ *
+ * Use --menu to invoke the interactive built-in menu.
+ *
+ * Option Name     Type       Description
+ *
+ * -h, --help      <NOTIFY>   Displays help for each option.
+ * -m, --menu      <NOTIFY>   Displays the built-in interactive menu.
+ *     --fatfree   <BOOLEAN>  No description given
+ * -v, --version   <NOTIFY>   Displays version information.
+ *     --name      <STRING>   No description given
+ * -g, --grub      <STRING>   Favorite Food
+ * -f, --food      <STRING>   Favorite Food
+ * -c, --food-coun <STRING>   No description given
+ *
+ * -> --grub=tacos
+ * Warning: --grub or -g is deprecated.
+ * -> --grubb
+ * Error: Option --grubb does not exist in module 'General'.
+ * -> .
+ *
+ * </pre>
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class OptionMenu implements OptionListener {
+
+    /**
+     * Commands starting with this substring are option invocations.
+     */
+
+    public static final String OPTION_COMMAND_CHAR = "-";
+
+    /**
+     * This command without any arguments displays the command summary.
+     * Otherwise, specific help information is provided based on the
+     * argument.
+     */
+
+    public static final String HELP_COMMAND_CHAR = "?";
+
+    /**
+     * This command must have an argument. When invoked, it executes
+     * the argument at the command shell.
+     */
+
+    public static final String RUN_COMMAND_CHAR = "=";
+
+    /**
+     * This command spawns a shell.
+     */
+
+    public static final String SHELL_COMMAND_CHAR = "!";
+
+    /**
+     * This command exits the built-in menu system.
+     */
+
+    public static final String EXIT_MENU_COMMAND_CHAR = "$";
+
+    /**
+     * This command lists registered option modules.
+     */
+
+    public static final String LIST_MODULES_COMMAND_CHAR = "+";
+
+    /**
+     * This command without any arguments loads the default option file.
+     * Otherwise, the file as the argument is loaded.
+     */
+
+    public static final String FILE_READ_COMMAND_CHAR = "@";
+
+    /**
+     * This command without any arguments writes to the default option file.
+     * Otherwise, the file as the argument is written.
+     */
+
+    public static final String FILE_WRITE_COMMAND_CHAR = "%";
+
+    /**
+     * Loads an option module. Invoking this command without any arguments,
+     * the default option module is loaded.
+     */
+
+    public static final String FILE_MODULE_COMMAND_CHAR = ":";
+
+    /**
+     * The menu prompt used for the built-in menu system.
+     */
+
+    public static final String MENU_PROMPT = "-> ";
+
+    /**
+     * The options registrar associated with this option menu.
+     */
+
+    private Options options;
+
+    /**
+     * A reader which is connected to standard input.
+     */
+
+    private BufferedReader reader;
+
+    /**
+     * Constructs a new built-in menu attaching it to the options registrar
+     * passed.
+     *
+     * @param options The option registrar associated with this built-in
+     *                menu.
+     */
+
+    public OptionMenu( Options options ) {
+	this.options = options;
+	reader = new BufferedReader( new InputStreamReader( System.in ) );
+    }
+
+    /**
+     * Starts the built-in menu system.
+     */
+
+    public void startMenu() {
+	String command = "";
+	while ( !command.equals( "$" ) ) {
+	    System.out.print( MENU_PROMPT );
+	    try {
+		command = reader.readLine();
+	    }
+	    catch ( IOException e ) {
+		return;
+	    }
+	    boolean commandEntered = command != null && command.length() > 0;
+	    if (commandEntered && command.equals( "?" ) ) {
+		System.err.println( "\t- Options Delimiter" );
+		System.err.println( "\t? Help" );
+		System.err.println( "\t= Run program and return to menu" );
+		System.err.println( "\t! Shell to Operating System" );
+		System.err.println( "\t$ Exit menu" );
+		System.err.println( "\t+ Additional options" );
+		System.err.println( "\t@<filename> Get options from file ["
+				    + options.getDefaultOptionFilename()
+				    + "]" );
+		System.err.println( "\t@@ Get options from file ["
+				    + options.getDefaultOptionFilename()
+				    + "]" );
+                System.err.println( "\t%<filename> Put options in file" );
+		System.err.println( "\t%% Put options in file ["
+				    + options.getDefaultOptionFilename()
+				    + "]" );
+                System.err.println( "\t. Quit" );
+	    }
+	    else if ( commandEntered &&
+		      ( command.substring( 0, 1 ).equals(
+					    FILE_READ_COMMAND_CHAR )
+		      || command.substring( 0, 1 ).equals(
+					    FILE_WRITE_COMMAND_CHAR )
+		      || command.substring( 0, 1 ).equals(
+                                            OPTION_COMMAND_CHAR )
+		      || command.substring( 0, 1 ).equals(
+                                            FILE_MODULE_COMMAND_CHAR ) ) ) {
+		options.process( command );
+	    }
+	    else if ( commandEntered &&
+		      command.substring( 0, 1 ).equals( SHELL_COMMAND_CHAR ) ) {
+
+	    }
+	    else if ( commandEntered &&
+		      command.substring( 0, 1 ).equals( RUN_COMMAND_CHAR ) ) {
+		try {
+		    SimpleProcess p
+			= new SimpleProcess( Runtime.getRuntime().exec( command.substring( 1 ) ) );
+		    System.err.println( "Exit status: " + p.waitFor() );
+		}
+		catch ( Exception e ) {
+		    System.err.println( "ritopt: An Error Occurred During Process Execution" );
+		    e.printStackTrace();
+		}
+		finally {
+		    System.out.println( "Press enter to continue..." );
+		    try {
+			reader.readLine();
+		    } catch ( IOException e ) { }
+		}
+	    }
+	    else {
+		System.err.println( "(Type ? for Help)" );
+	    }
+	}
+    }
+
+    /**
+     * This method is notified when the --menu option is specified.
+     *
+     * @param event    The event associated.
+     */
+
+    public void optionInvoked( OptionEvent event ) {
+	if ( event.getCommand().equals( "menu" ) ) {
+	    startMenu();
+	}
+    }
+} /** OptionMenu **/
diff --git a/src/java/gnu/dtools/ritopt/OptionModifiable.java b/src/java/gnu/dtools/ritopt/OptionModifiable.java
index 59885b2..c8ef1fc 100644
--- a/src/java/gnu/dtools/ritopt/OptionModifiable.java
+++ b/src/java/gnu/dtools/ritopt/OptionModifiable.java
@@ -1,48 +1,48 @@
-package gnu.dtools.ritopt;
-
-/**
- * OptionModifiable.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * Implementors of this interface are capable of being registered and
- * processed. When an option is specified, its modify method is invoked.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public interface OptionModifiable {
-
-   /**
-    * Modify an option based on a string representation.
-    *
-    * @param     value String representation of the object.
-    * @exception OptionModificationException Thrown if an error occurs
-    *                                  during modification of an option.
-    */
-
-    void modify( String value ) throws OptionModificationException;
-} /** OptionModifiable **/
+package gnu.dtools.ritopt;
+
+/**
+ * OptionModifiable.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * Implementors of this interface are capable of being registered and
+ * processed. When an option is specified, its modify method is invoked.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public interface OptionModifiable {
+
+   /**
+    * Modify an option based on a string representation.
+    *
+    * @param     value String representation of the object.
+    * @exception OptionModificationException Thrown if an error occurs
+    *                                  during modification of an option.
+    */
+
+    void modify( String value ) throws OptionModificationException;
+} /** OptionModifiable **/
diff --git a/src/java/gnu/dtools/ritopt/OptionModificationException.java b/src/java/gnu/dtools/ritopt/OptionModificationException.java
index a92b640..17295bc 100644
--- a/src/java/gnu/dtools/ritopt/OptionModificationException.java
+++ b/src/java/gnu/dtools/ritopt/OptionModificationException.java
@@ -1,49 +1,49 @@
-package gnu.dtools.ritopt;
-
-/**
- * OptionModificationException.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * Instances of this class are thrown if there is an error during modification
- * of an option's value.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class OptionModificationException extends OptionException {
-
-    /**
-     * Construct an OptionModificationException.
-     *
-     * @param msg The exception message.
-     */
-
-    OptionModificationException( String msg ) {
-	super( msg );
-    }
-
-}
+package gnu.dtools.ritopt;
+
+/**
+ * OptionModificationException.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * Instances of this class are thrown if there is an error during modification
+ * of an option's value.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class OptionModificationException extends OptionException {
+
+    /**
+     * Construct an OptionModificationException.
+     *
+     * @param msg The exception message.
+     */
+
+    OptionModificationException( String msg ) {
+	super( msg );
+    }
+
+}
diff --git a/src/java/gnu/dtools/ritopt/OptionModule.java b/src/java/gnu/dtools/ritopt/OptionModule.java
index f863260..acfde90 100644
--- a/src/java/gnu/dtools/ritopt/OptionModule.java
+++ b/src/java/gnu/dtools/ritopt/OptionModule.java
@@ -1,438 +1,438 @@
-package gnu.dtools.ritopt;
-
-/**
- * OptionModule.java
- *
- * Version:
- *    $Id$
- */
-
-import java.io.PrintStream;
-import java.util.HashMap;
-import java.util.Iterator;
-
-/**
- * This class is used as a repository for options. The Options class maintains
- * an OptionModule repository for general options. The user may create option
- * modules so that their options can overlap and be categorized. Option
- * modules are invoked by specifying the option name delimited with square
- * brackets.<p>
- *
- * For example, suppose we are writing a program called ServerManager
- * that manages both an ftp and http server. One option that both a ftp
- * and http kernel might have in common is the number of seconds before
- * a request times out. Option modules are used to process two different
- * values with the same option name. The shell command below demonstrates
- * how two different modules are invoked.<p>
- * <pre>
- *  java ServerManager :http: --timeout=15 :ftp: --timeout=25
- * </pre>
- *
- * Refer to the tutorial for more information on how to use option modules.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class OptionModule implements OptionRegistrar {
-
-    /**
-     * A repository of options registered with this module.
-     */
-
-    private HashMap<String, Option> options;
-
-    /**
-     * The name of this module.
-     */
-
-    private String name;
-
-    /**
-     * Returns whether this module is deprecated.
-     */
-
-    private boolean deprecated;
-
-    /**
-     * The default short option.
-     */
-
-    public static final char DEFAULT_SHORT_OPTION = '\0';
-
-    /**
-     * The default long option.
-     */
-
-    public static final String DEFAULT_LONG_OPTION = null;
-
-    /**
-     * The default description.
-     */
-
-    public static final String DEFAULT_DESCRIPTION = "No description given";
-
-    /**
-     * The default deprecation status.
-     */
-
-    public static final boolean DEFAULT_DEPRECATED = false;
-
-    /**
-     * The default module name.
-     */
-
-    public static final String DEFAULT_MODULE_NAME = "Special";
-
-    /**
-     * Constructs an OptionModule with the default name.
-     */
-
-    public OptionModule() {
-	this( DEFAULT_MODULE_NAME );
-    }
-
-    /**
-     * Constructs an OptionModule with the name passed.
-     *
-     * @param name  The name of the module.
-     */
-
-    public OptionModule( String name ) {
-	options = new HashMap<String, Option>();
-	this.name = name;
-	deprecated = false;
-    }
-
-    /**
-     * Register an option into the repository as a long option.
-     *
-     * @param longOption  The long option name.
-     * @param option      The option to register.
-     */
-
-    public void register( String longOption, Option option ) {
-	register( longOption, DEFAULT_SHORT_OPTION, option );
-    }
-
-    /**
-     * Register an option into the repository as a short option.
-     *
-     * @param shortOption The short option name.
-     * @param option      The option to register.
-     */
-
-    public void register( char shortOption, Option option ) {
-	register( DEFAULT_LONG_OPTION, shortOption, option );
-
-    }
-
-    /**
-     * Register an option into the repository both as a short and long option.
-     *
-     * @param longOption  The long option name.
-     * @param shortOption The short option name.
-     * @param option      The option to register.
-     */
-
-    public void register( String longOption, char shortOption,
-			  Option option ) {
-	register( longOption, shortOption, DEFAULT_DESCRIPTION, option );
-    }
-
-    /**
-     * Register an option into the repository both as a short and long option.
-     * Initialize its description with the description passed.
-     *
-     * @param longOption  The long option name.
-     * @param shortOption The short option name.
-     * @param description The description of the option.
-     * @param option      The option to register.
-     */
-
-    public void register( String longOption, char shortOption,
-			  String description, Option option ) {
-	register( longOption, shortOption, description, option,
-	      DEFAULT_DEPRECATED );
-    }
-
-    /**
-     * Register an option into the repository both as a short and long option.
-     * Initialize its description with the description passed.
-     *
-     * @param longOption  The long option name.
-     * @param shortOption The short option name.
-     * @param description The description of the option.
-     * @param option      The option to register.
-     * @param deprecated  A boolean indicating whether an option should
-     *                    be deprecated.
-     */
-
-    public void register( String longOption, char shortOption,
-			  String description, Option option,
-			  boolean deprecated ) {
-	if ( optionExists( option ) ) {
-	    throw new OptionRegistrationException( "Option Already Registered",
-						   option );
-	}
-	option.setLongOption( longOption );
-	option.setShortOption( shortOption );
-	option.setDeprecated( deprecated );
-	option.setDescription( description );
-	options.put( option.getHashKey(), option );
-    }
-
-    /**
-     * Returns whether the option exists in this module.
-     *
-     * @param option   The option to check for existance.
-     *
-     * @return A boolean value indicating whether the option passed exists.
-     */
-
-    public boolean optionExists( Option option ) {
-	return optionExists( option.getShortOption() ) ||
-	       optionExists( option.getLongOption() );
-    }
-
-    /**
-     * Returns whether the option referred by a short option exists in this
-     * module.
-     *
-     * @param shortOption   The option to check for existance.
-     *
-     * @return A boolean value indicating whether the option passed exists.
-     */
-	public boolean optionExists(char shortOption) {
-		for (Option next : options.values()) {
-			char c = next.getShortOption();
-			if (c != 0 && c == shortOption)
-				return true;
-		}
-		return false;
-	}
-
-    /**
-     * Returns whether the option referred by a long option exists in this
-     * module.
-     *
-     * @param longOption   The option to check for existance.
-     *
-     * @return A boolean value indicating whether the option passed exists.
-     */
-	public boolean optionExists(String longOption) {
-		for (Option next : options.values()) {
-			String s = next.getLongOption();
-			if (s != null && s.equals(longOption))
-				return true;
-		}
-		return false;
-	}
-
-    /**
-	 * Return an iterator over the option repository contained in this module.
-	 * 
-	 * @return An iterator over the repository.
-	 */
-
-	public Iterator<Option> getOptionIterator() {
-		return options.values().iterator();
-	}
-
-    /**
-	 * Returns the option referred by the long option passed.
-	 * 
-	 * @param shortOption
-	 *            The option to retrieve.
-	 * 
-	 * @return An option referred to by this module. null is returned if it does
-	 *         not exist.
-	 */
-
-    public Option getOption(char shortOption) {
-		Option retval = null;
-
-		for (Option next : options.values()) {
-			char c = next.getShortOption();
-			if (c != '\0' && c == shortOption)
-				retval = next;
-		}
-		return retval;
-	}
-
-    /**
-     * Returns the option referred by the long option passed.
-     *
-     * @param longOption The option to retrieve.
-     *
-     * @return An option referred to by this module. null is returned
-     *         if it does not exist.
-     */
-
-    public Option getOption(String longOption) {
-		Option retval = null;
-		for (Option next : options.values()) {
-			String s = next.getLongOption();
-			if (s != null && s.equals(longOption))
-				retval = next;
-		}
-		return retval;
-	}
-
-    /**
-     * Returns the help information as a String.
-     *
-     * @return The help information as a String.
-     */
-
-    public String getHelp() {
-		String retval = "";
-		for (Option next : options.values()) {
-			retval += next.getHelp() + "\n";
-		}
-		return retval;
-	}
-
-    /**
-	 * Writes the help information to a print stream.
-	 * 
-	 * @param ps
-	 *            The print stream to write to.
-	 */
-
-	public void writeFileToPrintStream(PrintStream ps) {
-		ps.println(":" + name + ":");
-		for (Option next : options.values()) {
-			ps.println(next.getOptionFileLine());
-		}
-	}
-
-    /**
-	 * Returns whether this module is deprecated.
-	 * 
-	 * @return A boolean value indicating whether this module is deprecated.
-	 */
-
-    public boolean isDeprecated() {
-	return deprecated;
-    }
-
-    /**
-     * Sets whether this module is deprecated.
-     *
-     * @param deprecated The new status.
-     */
-
-    public void setDeprecated( boolean deprecated ) {
-	this.deprecated = deprecated;
-    }
-
-    /**
-     * Called by the OptionsProcessor when an option in the target module
-     * is invoked.
-     *
-     * @param shortOption The option to invoke.
-     * @param text        The text to pass to the modifier.
-     */
-
-    public void action( char shortOption, char text ) {
-	action( shortOption, "" + text );
-    }
-
-    /**
-     * Called by the OptionsProcessor when an option in the target module
-     * is invoked.
-     *
-     * @param longOption The option to invoke.
-     * @param text       The text to pass to the modifier.
-     */
-
-    public void action( String longOption, char text ) {
-	action( longOption, "" + text );
-    }
-
-    /**
-     * Called by the OptionsProcessor when an option in the target module
-     * is invoked.
-     *
-     * @param shortOption The option to invoke.
-     * @param text        The text to pass to the modifier.
-     */
-
-    public void action( char shortOption, String text ) {
-	Option op = getOption( shortOption );
-	if ( op == null )
-	    throw new OptionProcessingException( "Option -" + shortOption +
-						 " does not"
-						 + " exist in module '"
-						 + name + "'." );
-	op.setInvoked( true );
-	op.action();
-	op.modify( text );
-    }
-
-    /**
-     * Called by the OptionsProcessor when an option in the target module
-     * is invoked.
-     *
-     * @param longOption The option to invoke.
-     * @param text       The text to pass to the modifier.
-     */
-
-
-    public void action( String longOption, String text ) {
-	Option op = getOption( longOption );
-	if ( op == null )
-	    throw new OptionProcessingException( "Option --" + longOption +
-						 " does not"
-						 + " exist in module '"
-						 + name + "'." );
-	op.setInvoked( true );
-	op.action();
-	op.modify( text );
-    }
-
-    /**
-     * Set the name of this module.
-     *
-     * @param name   The new name.
-     */
-
-    public void setName( String name ) {
-	this.name = name;
-    }
-
-    /**
-     * Returns the name of this module.
-     *
-     * @return The name of this module.
-     */
-
-    public String getName() {
-	return name;
-    }
-
-} /** OptionModule **/
-
-
-
-
+package gnu.dtools.ritopt;
+
+/**
+ * OptionModule.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+import java.io.PrintStream;
+import java.util.HashMap;
+import java.util.Iterator;
+
+/**
+ * This class is used as a repository for options. The Options class maintains
+ * an OptionModule repository for general options. The user may create option
+ * modules so that their options can overlap and be categorized. Option
+ * modules are invoked by specifying the option name delimited with square
+ * brackets.<p>
+ *
+ * For example, suppose we are writing a program called ServerManager
+ * that manages both an ftp and http server. One option that both a ftp
+ * and http kernel might have in common is the number of seconds before
+ * a request times out. Option modules are used to process two different
+ * values with the same option name. The shell command below demonstrates
+ * how two different modules are invoked.<p>
+ * <pre>
+ *  java ServerManager :http: --timeout=15 :ftp: --timeout=25
+ * </pre>
+ *
+ * Refer to the tutorial for more information on how to use option modules.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class OptionModule implements OptionRegistrar {
+
+    /**
+     * A repository of options registered with this module.
+     */
+
+    private HashMap<String, Option> options;
+
+    /**
+     * The name of this module.
+     */
+
+    private String name;
+
+    /**
+     * Returns whether this module is deprecated.
+     */
+
+    private boolean deprecated;
+
+    /**
+     * The default short option.
+     */
+
+    public static final char DEFAULT_SHORT_OPTION = '\0';
+
+    /**
+     * The default long option.
+     */
+
+    public static final String DEFAULT_LONG_OPTION = null;
+
+    /**
+     * The default description.
+     */
+
+    public static final String DEFAULT_DESCRIPTION = "No description given";
+
+    /**
+     * The default deprecation status.
+     */
+
+    public static final boolean DEFAULT_DEPRECATED = false;
+
+    /**
+     * The default module name.
+     */
+
+    public static final String DEFAULT_MODULE_NAME = "Special";
+
+    /**
+     * Constructs an OptionModule with the default name.
+     */
+
+    public OptionModule() {
+	this( DEFAULT_MODULE_NAME );
+    }
+
+    /**
+     * Constructs an OptionModule with the name passed.
+     *
+     * @param name  The name of the module.
+     */
+
+    public OptionModule( String name ) {
+	options = new HashMap<String, Option>();
+	this.name = name;
+	deprecated = false;
+    }
+
+    /**
+     * Register an option into the repository as a long option.
+     *
+     * @param longOption  The long option name.
+     * @param option      The option to register.
+     */
+
+    public void register( String longOption, Option option ) {
+	register( longOption, DEFAULT_SHORT_OPTION, option );
+    }
+
+    /**
+     * Register an option into the repository as a short option.
+     *
+     * @param shortOption The short option name.
+     * @param option      The option to register.
+     */
+
+    public void register( char shortOption, Option option ) {
+	register( DEFAULT_LONG_OPTION, shortOption, option );
+
+    }
+
+    /**
+     * Register an option into the repository both as a short and long option.
+     *
+     * @param longOption  The long option name.
+     * @param shortOption The short option name.
+     * @param option      The option to register.
+     */
+
+    public void register( String longOption, char shortOption,
+			  Option option ) {
+	register( longOption, shortOption, DEFAULT_DESCRIPTION, option );
+    }
+
+    /**
+     * Register an option into the repository both as a short and long option.
+     * Initialize its description with the description passed.
+     *
+     * @param longOption  The long option name.
+     * @param shortOption The short option name.
+     * @param description The description of the option.
+     * @param option      The option to register.
+     */
+
+    public void register( String longOption, char shortOption,
+			  String description, Option option ) {
+	register( longOption, shortOption, description, option,
+	      DEFAULT_DEPRECATED );
+    }
+
+    /**
+     * Register an option into the repository both as a short and long option.
+     * Initialize its description with the description passed.
+     *
+     * @param longOption  The long option name.
+     * @param shortOption The short option name.
+     * @param description The description of the option.
+     * @param option      The option to register.
+     * @param deprecated  A boolean indicating whether an option should
+     *                    be deprecated.
+     */
+
+    public void register( String longOption, char shortOption,
+			  String description, Option option,
+			  boolean deprecated ) {
+	if ( optionExists( option ) ) {
+	    throw new OptionRegistrationException( "Option Already Registered",
+						   option );
+	}
+	option.setLongOption( longOption );
+	option.setShortOption( shortOption );
+	option.setDeprecated( deprecated );
+	option.setDescription( description );
+	options.put( option.getHashKey(), option );
+    }
+
+    /**
+     * Returns whether the option exists in this module.
+     *
+     * @param option   The option to check for existance.
+     *
+     * @return A boolean value indicating whether the option passed exists.
+     */
+
+    public boolean optionExists( Option option ) {
+	return optionExists( option.getShortOption() ) ||
+	       optionExists( option.getLongOption() );
+    }
+
+    /**
+     * Returns whether the option referred by a short option exists in this
+     * module.
+     *
+     * @param shortOption   The option to check for existance.
+     *
+     * @return A boolean value indicating whether the option passed exists.
+     */
+	public boolean optionExists(char shortOption) {
+		for (Option next : options.values()) {
+			char c = next.getShortOption();
+			if (c != 0 && c == shortOption)
+				return true;
+		}
+		return false;
+	}
+
+    /**
+     * Returns whether the option referred by a long option exists in this
+     * module.
+     *
+     * @param longOption   The option to check for existance.
+     *
+     * @return A boolean value indicating whether the option passed exists.
+     */
+	public boolean optionExists(String longOption) {
+		for (Option next : options.values()) {
+			String s = next.getLongOption();
+			if (s != null && s.equals(longOption))
+				return true;
+		}
+		return false;
+	}
+
+    /**
+	 * Return an iterator over the option repository contained in this module.
+	 * 
+	 * @return An iterator over the repository.
+	 */
+
+	public Iterator<Option> getOptionIterator() {
+		return options.values().iterator();
+	}
+
+    /**
+	 * Returns the option referred by the long option passed.
+	 * 
+	 * @param shortOption
+	 *            The option to retrieve.
+	 * 
+	 * @return An option referred to by this module. null is returned if it does
+	 *         not exist.
+	 */
+
+    public Option getOption(char shortOption) {
+		Option retval = null;
+
+		for (Option next : options.values()) {
+			char c = next.getShortOption();
+			if (c != '\0' && c == shortOption)
+				retval = next;
+		}
+		return retval;
+	}
+
+    /**
+     * Returns the option referred by the long option passed.
+     *
+     * @param longOption The option to retrieve.
+     *
+     * @return An option referred to by this module. null is returned
+     *         if it does not exist.
+     */
+
+    public Option getOption(String longOption) {
+		Option retval = null;
+		for (Option next : options.values()) {
+			String s = next.getLongOption();
+			if (s != null && s.equals(longOption))
+				retval = next;
+		}
+		return retval;
+	}
+
+    /**
+     * Returns the help information as a String.
+     *
+     * @return The help information as a String.
+     */
+
+    public String getHelp() {
+		String retval = "";
+		for (Option next : options.values()) {
+			retval += next.getHelp() + "\n";
+		}
+		return retval;
+	}
+
+    /**
+	 * Writes the help information to a print stream.
+	 * 
+	 * @param ps
+	 *            The print stream to write to.
+	 */
+
+	public void writeFileToPrintStream(PrintStream ps) {
+		ps.println(":" + name + ":");
+		for (Option next : options.values()) {
+			ps.println(next.getOptionFileLine());
+		}
+	}
+
+    /**
+	 * Returns whether this module is deprecated.
+	 * 
+	 * @return A boolean value indicating whether this module is deprecated.
+	 */
+
+    public boolean isDeprecated() {
+	return deprecated;
+    }
+
+    /**
+     * Sets whether this module is deprecated.
+     *
+     * @param deprecated The new status.
+     */
+
+    public void setDeprecated( boolean deprecated ) {
+	this.deprecated = deprecated;
+    }
+
+    /**
+     * Called by the OptionsProcessor when an option in the target module
+     * is invoked.
+     *
+     * @param shortOption The option to invoke.
+     * @param text        The text to pass to the modifier.
+     */
+
+    public void action( char shortOption, char text ) {
+	action( shortOption, "" + text );
+    }
+
+    /**
+     * Called by the OptionsProcessor when an option in the target module
+     * is invoked.
+     *
+     * @param longOption The option to invoke.
+     * @param text       The text to pass to the modifier.
+     */
+
+    public void action( String longOption, char text ) {
+	action( longOption, "" + text );
+    }
+
+    /**
+     * Called by the OptionsProcessor when an option in the target module
+     * is invoked.
+     *
+     * @param shortOption The option to invoke.
+     * @param text        The text to pass to the modifier.
+     */
+
+    public void action( char shortOption, String text ) {
+	Option op = getOption( shortOption );
+	if ( op == null )
+	    throw new OptionProcessingException( "Option -" + shortOption +
+						 " does not"
+						 + " exist in module '"
+						 + name + "'." );
+	op.setInvoked( true );
+	op.action();
+	op.modify( text );
+    }
+
+    /**
+     * Called by the OptionsProcessor when an option in the target module
+     * is invoked.
+     *
+     * @param longOption The option to invoke.
+     * @param text       The text to pass to the modifier.
+     */
+
+
+    public void action( String longOption, String text ) {
+	Option op = getOption( longOption );
+	if ( op == null )
+	    throw new OptionProcessingException( "Option --" + longOption +
+						 " does not"
+						 + " exist in module '"
+						 + name + "'." );
+	op.setInvoked( true );
+	op.action();
+	op.modify( text );
+    }
+
+    /**
+     * Set the name of this module.
+     *
+     * @param name   The new name.
+     */
+
+    public void setName( String name ) {
+	this.name = name;
+    }
+
+    /**
+     * Returns the name of this module.
+     *
+     * @return The name of this module.
+     */
+
+    public String getName() {
+	return name;
+    }
+
+} /** OptionModule **/
+
+
+
+
diff --git a/src/java/gnu/dtools/ritopt/OptionModuleRegistrar.java b/src/java/gnu/dtools/ritopt/OptionModuleRegistrar.java
index 8acb86f..10da26d 100644
--- a/src/java/gnu/dtools/ritopt/OptionModuleRegistrar.java
+++ b/src/java/gnu/dtools/ritopt/OptionModuleRegistrar.java
@@ -1,62 +1,62 @@
-package gnu.dtools.ritopt;
-
-/**
- * OptionModuleRegistrar.java
- *
- * Version:
- *   $Id$
- */
-
-/**
- * Implementors are capable of registering option modules and storing them in a
- * repository. A parent object may pass its child a reference to an
- * OptionModuleRegistrar to preserve abstraction and constrain access to
- * registration. This may be preferred so that children may only
- * register their OptionModules without performing any administrating the
- * repository.<p>
- *
- * The Options class implements this interface. It is not necessary to refer
- * to instances as an OptionModuleRegistrar.<p>
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public interface OptionModuleRegistrar {
-
-    /**
-     * Register an option module based on its name.
-     *
-     * @param module The option module to register.
-     */
-
-    public void register( OptionModule module );
-
-    /**
-     * Register an option module and associate it with the name passed.
-     *
-     * @param name   The name associated with the option module.
-     * @param module The option module to register.
-     */
-
-    public void register( String name, OptionModule module );
-}
+package gnu.dtools.ritopt;
+
+/**
+ * OptionModuleRegistrar.java
+ *
+ * Version:
+ *   $Id$
+ */
+
+/**
+ * Implementors are capable of registering option modules and storing them in a
+ * repository. A parent object may pass its child a reference to an
+ * OptionModuleRegistrar to preserve abstraction and constrain access to
+ * registration. This may be preferred so that children may only
+ * register their OptionModules without performing any administrating the
+ * repository.<p>
+ *
+ * The Options class implements this interface. It is not necessary to refer
+ * to instances as an OptionModuleRegistrar.<p>
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public interface OptionModuleRegistrar {
+
+    /**
+     * Register an option module based on its name.
+     *
+     * @param module The option module to register.
+     */
+
+    public void register( OptionModule module );
+
+    /**
+     * Register an option module and associate it with the name passed.
+     *
+     * @param name   The name associated with the option module.
+     * @param module The option module to register.
+     */
+
+    public void register( String name, OptionModule module );
+}
diff --git a/src/java/gnu/dtools/ritopt/OptionNotifier.java b/src/java/gnu/dtools/ritopt/OptionNotifier.java
index da9d457..27e241c 100644
--- a/src/java/gnu/dtools/ritopt/OptionNotifier.java
+++ b/src/java/gnu/dtools/ritopt/OptionNotifier.java
@@ -1,57 +1,57 @@
-package gnu.dtools.ritopt;
-
-/**
- * If an object is able notify and maintain a repository of listeners, it
- * should implement this interface even though it is not required. This
- * interface expects listener registration and event configuration behavior.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public interface OptionNotifier {
-
-    /**
-     * Adds an OptionListener to the notification list.
-     *
-     * @param listener The OptionListener to add.
-     */
-
-    public void addOptionListener( OptionListener listener );
-
-    /**
-     * Removes an OptionListener from the notification list.
-     *
-     * @param listener The OptionListener to remove.
-     */
-
-    public void removeOptionListener( OptionListener listener );
-
-    /**
-     * Sets the command sent when an option is invoked.
-     *
-     * @param command  The command to send.
-     */
-
-    public void setOptionCommand( String command );
-
-}
+package gnu.dtools.ritopt;
+
+/**
+ * If an object is able notify and maintain a repository of listeners, it
+ * should implement this interface even though it is not required. This
+ * interface expects listener registration and event configuration behavior.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public interface OptionNotifier {
+
+    /**
+     * Adds an OptionListener to the notification list.
+     *
+     * @param listener The OptionListener to add.
+     */
+
+    public void addOptionListener( OptionListener listener );
+
+    /**
+     * Removes an OptionListener from the notification list.
+     *
+     * @param listener The OptionListener to remove.
+     */
+
+    public void removeOptionListener( OptionListener listener );
+
+    /**
+     * Sets the command sent when an option is invoked.
+     *
+     * @param command  The command to send.
+     */
+
+    public void setOptionCommand( String command );
+
+}
diff --git a/src/java/gnu/dtools/ritopt/OptionProcessingException.java b/src/java/gnu/dtools/ritopt/OptionProcessingException.java
index 9c96bad..4925f4f 100644
--- a/src/java/gnu/dtools/ritopt/OptionProcessingException.java
+++ b/src/java/gnu/dtools/ritopt/OptionProcessingException.java
@@ -1,49 +1,49 @@
-package gnu.dtools.ritopt;
-
-/**
- * OptionProcessingException.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * Instances of this exception are thrown when an error occurs when processing
- * the command line.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class OptionProcessingException extends OptionException {
-
-    /**
-     * Construct an OptionProcessingException.
-     *
-     * @param msg The exception message.
-     */
-
-
-    OptionProcessingException( String msg ) {
-	super( msg );
-    }
-}
+package gnu.dtools.ritopt;
+
+/**
+ * OptionProcessingException.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * Instances of this exception are thrown when an error occurs when processing
+ * the command line.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class OptionProcessingException extends OptionException {
+
+    /**
+     * Construct an OptionProcessingException.
+     *
+     * @param msg The exception message.
+     */
+
+
+    OptionProcessingException( String msg ) {
+	super( msg );
+    }
+}
diff --git a/src/java/gnu/dtools/ritopt/OptionRegistrar.java b/src/java/gnu/dtools/ritopt/OptionRegistrar.java
index 6eda1ff..f9be341 100644
--- a/src/java/gnu/dtools/ritopt/OptionRegistrar.java
+++ b/src/java/gnu/dtools/ritopt/OptionRegistrar.java
@@ -1,98 +1,98 @@
-package gnu.dtools.ritopt;
-
-/**
- * Implementors are capable of registering options and storing them in a
- * repository. A parent object may pass its child a reference to an
- * OptionRegistrar to preserve abstraction and restrict access to
- * registration. This may be preferred so that children may only
- * register their options without performing any administrating the
- * repository.
- * <p>
- *
- * The Options and OptionModule classes implement this interface. It is not
- * necessary to refer to instances as an OptionRegistrar.<p>
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public interface OptionRegistrar {
-
-    /**
-     * Register an option into the repository as a long option.
-     *
-     * @param longName   The long option name.
-     * @param option     The option to register.
-     */
-
-    public void register( String longName, Option option );
-
-    /**
-     * Register an option into the repository as a short option.
-     *
-     * @param shortName  The short option name.
-     * @param option     The option to register.
-     */
-
-    public void register( char shortName, Option option );
-
-
-    /**
-     * Register an option into the repository both as a short and long option.
-     *
-     * @param longOption  The long option name.
-     * @param shortOption The short option name.
-     * @param option      The option to register.
-     */
-
-    public void register( String longOption, char shortOption,
-			  Option option );
-
-    /**
-     * Register an option into the repository both as a short and long option.
-     * Initialize its description with the description passed.
-     *
-     * @param longOption  The long option name.
-     * @param shortOption The short option name.
-     * @param description The description of the option.
-     * @param option      The option to register.
-     */
-
-    public void register( String longOption, char shortOption,
-			  String description, Option option );
-
-    /**
-     * Register an option into the repository both as a short and long option.
-     * Initialize its description with the description passed.
-     *
-     * @param longOption  The long option name.
-     * @param shortOption The short option name.
-     * @param description The description of the option.
-     * @param option      The option to register.
-     * @param deprecated  A boolean indicating whether an option should
-     *                    be deprecated.
-     */
-
-    public void register( String longOption, char shortOption,
-			  String description, Option option,
-			  boolean deprecated );
-}
+package gnu.dtools.ritopt;
+
+/**
+ * Implementors are capable of registering options and storing them in a
+ * repository. A parent object may pass its child a reference to an
+ * OptionRegistrar to preserve abstraction and restrict access to
+ * registration. This may be preferred so that children may only
+ * register their options without performing any administrating the
+ * repository.
+ * <p>
+ *
+ * The Options and OptionModule classes implement this interface. It is not
+ * necessary to refer to instances as an OptionRegistrar.<p>
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public interface OptionRegistrar {
+
+    /**
+     * Register an option into the repository as a long option.
+     *
+     * @param longName   The long option name.
+     * @param option     The option to register.
+     */
+
+    public void register( String longName, Option option );
+
+    /**
+     * Register an option into the repository as a short option.
+     *
+     * @param shortName  The short option name.
+     * @param option     The option to register.
+     */
+
+    public void register( char shortName, Option option );
+
+
+    /**
+     * Register an option into the repository both as a short and long option.
+     *
+     * @param longOption  The long option name.
+     * @param shortOption The short option name.
+     * @param option      The option to register.
+     */
+
+    public void register( String longOption, char shortOption,
+			  Option option );
+
+    /**
+     * Register an option into the repository both as a short and long option.
+     * Initialize its description with the description passed.
+     *
+     * @param longOption  The long option name.
+     * @param shortOption The short option name.
+     * @param description The description of the option.
+     * @param option      The option to register.
+     */
+
+    public void register( String longOption, char shortOption,
+			  String description, Option option );
+
+    /**
+     * Register an option into the repository both as a short and long option.
+     * Initialize its description with the description passed.
+     *
+     * @param longOption  The long option name.
+     * @param shortOption The short option name.
+     * @param description The description of the option.
+     * @param option      The option to register.
+     * @param deprecated  A boolean indicating whether an option should
+     *                    be deprecated.
+     */
+
+    public void register( String longOption, char shortOption,
+			  String description, Option option,
+			  boolean deprecated );
+}
diff --git a/src/java/gnu/dtools/ritopt/OptionRegistrationException.java b/src/java/gnu/dtools/ritopt/OptionRegistrationException.java
index 4f20bce..8d76c06 100644
--- a/src/java/gnu/dtools/ritopt/OptionRegistrationException.java
+++ b/src/java/gnu/dtools/ritopt/OptionRegistrationException.java
@@ -1,78 +1,78 @@
-package gnu.dtools.ritopt;
-
-/**
- * OptionRegistrationException.java
- *
- * Version:
- *   $Id$
- */
-
-/**
- * This exception indicates that an error has occurred during registration
- * of an option, registrar, or module.
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class OptionRegistrationException extends OptionException {
-
-    /**
-     * The target option associated with the registration failure.
-     */
-
-    private Option target;
-
-    /**
-     * Construct an OptionRegistrationException.
-     *
-     * @param msg The exception message.
-     */
-
-
-    public OptionRegistrationException( String msg ) {
-	super( msg );
-    }
-
-    /**
-     * Construct an OptionRegisrationException and initialize its members
-     * with the message and target passed.
-     *
-     * @param msg     An exception message.
-     * @param target  The target option that caused the registration failure.
-     */
-
-    public OptionRegistrationException( String msg, Option target ) {
-	super( msg );
-	this.target = target;
-    }
-
-    /**
-     * Returns the target option associated with the registration failure.
-     *
-     * @return The target option.
-     */
-
-    public Option getTarget() {
-	return target;
-    }
-
-
-}
+package gnu.dtools.ritopt;
+
+/**
+ * OptionRegistrationException.java
+ *
+ * Version:
+ *   $Id$
+ */
+
+/**
+ * This exception indicates that an error has occurred during registration
+ * of an option, registrar, or module.
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class OptionRegistrationException extends OptionException {
+
+    /**
+     * The target option associated with the registration failure.
+     */
+
+    private Option target;
+
+    /**
+     * Construct an OptionRegistrationException.
+     *
+     * @param msg The exception message.
+     */
+
+
+    public OptionRegistrationException( String msg ) {
+	super( msg );
+    }
+
+    /**
+     * Construct an OptionRegisrationException and initialize its members
+     * with the message and target passed.
+     *
+     * @param msg     An exception message.
+     * @param target  The target option that caused the registration failure.
+     */
+
+    public OptionRegistrationException( String msg, Option target ) {
+	super( msg );
+	this.target = target;
+    }
+
+    /**
+     * Returns the target option associated with the registration failure.
+     *
+     * @return The target option.
+     */
+
+    public Option getTarget() {
+	return target;
+    }
+
+
+}
diff --git a/src/java/gnu/dtools/ritopt/Options.java b/src/java/gnu/dtools/ritopt/Options.java
index 8a27725..df910d3 100644
--- a/src/java/gnu/dtools/ritopt/Options.java
+++ b/src/java/gnu/dtools/ritopt/Options.java
@@ -1,833 +1,833 @@
-package gnu.dtools.ritopt;
-
-/**
- * Options.java
- *
- * Version:
- *    $Id$
-
- */
-
-import java.io.*;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import net.sf.jabref.Globals;
-
-/**
- * This class functions as a repository for options and their modules. It
- * facilitates registration of options and modules, as well as processing of
- * arguments.<p>
- *
- * Information such as help, usage, and versions are displayed
- * when the respective --help and --version options are specified.
- * The --menu option will invoke the built-in menu.<p>
- *
- * In the example below, the program processes three simple options.
- *
- * <pre>
- * public class AboutMe {
- *
- *    private static StringOption name = new StringOption( "Ryan" );
- *    private static IntOption age = new IntOption( 19 );
- *    private static DoubleOption bankBalance = new DoubleOption( 15.15 );
- *
- *    public static void main( String args[] ) {
- *       Options repo = new Options( "java AboutMe" );
- *       repo.register( "name", 'n', name, "The person's name." );
- *       repo.register( "age", 'a', age, "The person's age." );
- *       repo.register( "balance", 'b', "The person's bank balance.",
- *                       bankBalance );
- *       repo.process( args );
-g *       System.err.println( "" + name + ", age " + age + " has a " +
- *                           " bank balance of " + bankBalance + "." );
- *    }
- * }
- * </pre>
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class Options implements OptionRegistrar, OptionModuleRegistrar,
-                                OptionListener {
-
-    /**
-     * The default verbosity.
-     */
-
-    public static final int DEFAULT_VERBOSITY = 3;
-
-    /**
-     * This boolean defines whether options are deprecated by default.
-     */
-
-    public static final boolean DEFAULT_DEPRECATED = false;
-
-    /**
-     * The default reason for deprecation.
-     */
-
-    public static final String DEFAULT_REASON = "No reason given.";
-
-    /**
-     * The default general module name.
-     */
-
-    public static final String DEFAULT_GENERAL_MODULE_NAME = "General";
-
-    /**
-     * This boolean defines whether usage should be displayed.
-     */
-
-    public static final boolean DEFAULT_DISPLAY_USAGE = false; // Mod. Morten A.
-
-    /**
-     * This boolean defines whether the menu should be used.
-     */
-
-    public static final boolean DEFAULT_USE_MENU = false; // Mod. Morten A.
-
-    /**
-     * The default program name that is display in the usage.
-     */
-
-    public static final String DEFAULT_PROGRAM_NAME = "java program";
-
-    /**
-     * The default option file.
-     */
-
-    public static final String DEFAULT_OPTION_FILENAME = "default.opt";
-
-    /**
-     * The program to display in the usage.
-     */
-
-    private String usageProgram;
-
-    /**
-     * The version to display in the usage.
-     */
-
-    private String version;
-
-    /**
-     * The default option filename if an option file is not specified.
-     */
-
-    private String defaultOptionFilename;
-
-    /**
-     * This flag defines whether to display usage when help is displayed.
-     */
-
-    private boolean displayUsage;
-
-    /**
-     * This boolean defines whether the menu should be used.
-     */
-
-    private boolean useMenu;
-
-    /**
-     * When this flag is true, debugging information is displayed.
-     */
-
-    private boolean debugFlag;
-
-    /**
-     * The current module being processed.
-     */
-
-    private OptionModule currentModule;
-
-    /**
-     * The general option module.
-     */
-
-    private OptionModule generalModule;
-
-    /**
-     * A map of option modules.
-     */
-
-    private java.util.HashMap<String, OptionModule> modules;
-
-    /**
-     * Version information is displayed when this option is specified.
-     */
-
-    private NotifyOption versionOption;
-
-    /**
-     * Create an option repository.
-     */
-
-    public Options() {
-        this( DEFAULT_PROGRAM_NAME );
-    }
-
-    /**
-     * Create an option repository and associated it with a program name.
-     *
-     * @param programName A program name like "java Balloons".
-     */
-
-    public Options( String programName ) {
-        displayUsage = DEFAULT_DISPLAY_USAGE;
-        useMenu = DEFAULT_USE_MENU;
-        defaultOptionFilename = DEFAULT_OPTION_FILENAME;
-        usageProgram = programName;
-        modules = new HashMap<String, OptionModule>();
-        versionOption = new NotifyOption( this, "version", "" );
-        version = "Version 1.0";
-        generalModule = new OptionModule( DEFAULT_GENERAL_MODULE_NAME );
-        currentModule = generalModule;
-
-        // Mod. Morten A. ------------------------------------------------
-        register( "version", 'v',
-                  "Displays version information.", versionOption );
-        /*register( "help", 'h', "Displays help for each option.", helpOption );
-        register( "menu", 'm', "Displays the built-in interactive menu.",
-                  menuOption );*/
-        // End mod. Morten A. ------------------------------------------------
-    }
-
-    /**
-     * Returns the help information as a string.
-     *
-     * @return The help information.
-     */
-
-    public String getHelp() {
-        String retval = (displayUsage ? getUsage() + "\n\n" : "" ) +
-            // Mod. Morten A.
-            //"Use --menu to invoke the interactive built-in menu.\n\n" +
-            Option.getHelpHeader() + "\n\n" + generalModule.getHelp();
-        Iterator<OptionModule> it = modules.values().iterator();
-        while ( it.hasNext() ) {
-            OptionModule module = it.next();
-            retval += "\n\nOption Listing for " + module.getName() + "\n";
-            retval += module.getHelp() + "\n";
-        }
-        return retval;
-    }
-
-    /**
-     * Returns usage information of this program.
-     *
-     * @return The usage information.
-     */
-
-    public String getUsage() {
-        return getUsageProgram()
-            + " @optionfile :module: OPTIONS ... :module: OPTIONS";
-    }
-
-    /**
-     * Returns the program name displayed in the usage.
-     *
-     * @returns The program name.
-     */
-
-    public String getUsageProgram() {
-        return usageProgram;
-    }
-
-    /**
-     * Returns the version of the program.
-     *
-     * @returns The version.
-     */
-
-    public String getVersion() {
-        return version;
-    }
-
-    /**
-     * Returns the option filename to load or write to if one is not
-     * specified.
-     *
-     * @return The default option filename.
-     */
-
-    public String getDefaultOptionFilename() {
-        return defaultOptionFilename;
-    }
-
-    /**
-     * Returns whether debugging information should be displayed.
-     *
-     * @return A boolean indicating whether to display help information.
-     */
-
-    public boolean getDebugFlag() {
-        return debugFlag;
-    }
-
-    /**
-     * Returns whether the help information should display usage.
-     *
-     * @return A boolean indicating whether help should display usage.
-     */
-
-    public boolean shouldDisplayUsage() {
-        return displayUsage;
-    }
-
-    /**
-     * Returns whether the built-in menu system can be invoked.
-     *
-     * @return A boolean indicating whether the build-in menu system
-     *         can be invoked.
-     */
-
-    public boolean shouldUseMenu() {
-        return useMenu;
-    }
-
-    /**
-     * Sets whether usage can be displayed.
-     *
-     * @param b     A boolean value indicating that usage can be displayed.
-     */
-
-    public void setDisplayUsage( boolean b ) {
-        displayUsage = b;
-    }
-
-    /**
-     * Sets whether the built-in menu system can be used.
-     *
-     * @param b      A boolean value indicating whether the built-in menu
-     *               system can be used.
-     */
-
-    public void setUseMenu( boolean b ) {
-        useMenu = b;
-    }
-
-    /**
-     * Sets the program to display when the usage is displayed.
-     *
-     * @param program The program displayed during usage.
-     */
-
-    public void setUsageProgram( String program ) {
-        usageProgram = program;
-    }
-
-    /**
-     * Sets the version of the program.
-     *
-     * @param version The version.
-     */
-
-    public void setVersion( String version ) {
-        this.version = version;
-    }
-
-    /**
-     * Sets the option file to use when an option file is not specified.
-     *
-     * @param fn      The filename of the default option file.
-     */
-
-    public void setDefaultOptionFilename( String fn ) {
-        defaultOptionFilename = fn;
-    }
-
-
-    /**
-     * Displays the program's help which includes a description of each
-     * option. The usage is display if the usage flag is set to true.
-     */
-
-    public void displayHelp() {
-        System.err.println( getHelp() );
-    }
-
-    /**
-     * Displays the version of the program.
-     */
-
-    public void displayVersion() {
-        System.err.println( getVersion() +" (build " +Globals.BUILD +")");
-    }
-
-    /**
-     * Register an option into the repository as a long option.
-     *
-     * @param longOption  The long option name.
-     * @param option      The option to register.
-     */
-
-    public void register( String longOption, Option option ) {
-        generalModule.register( longOption, option );
-    }
-
-    /**
-     * Register an option into the repository as a short option.
-     *
-     * @param shortOption The short option name.
-     * @param option      The option to register.
-     */
-
-    public void register( char shortOption, Option option ) {
-        generalModule.register( shortOption, option );
-    }
-
-    /**
-     * Register an option into the repository both as a short and long option.
-     *
-     * @param longOption  The long option name.
-     * @param shortOption The short option name.
-     * @param option      The option to register.
-     */
-
-    public void register( String longOption, char shortOption,
-                          Option option ) {
-        generalModule.register( longOption, shortOption, option );
-    }
-
-    /**
-     * Register an option into the repository both as a short and long option.
-     * Initialize its description with the description passed.
-     *
-     * @param longOption  The long option name.
-     * @param shortOption The short option name.
-     * @param description The description of the option.
-     * @param option      The option to register.
-     */
-
-    public void register( String longOption, char shortOption,
-                          String description, Option option ) {
-        generalModule.register( longOption, shortOption, description, option );
-    }
-
-    /**
-     * Register an option into the repository both as a short and long option.
-     * Initialize its description with the description passed.
-     *
-     * @param longOption  The long option name.
-     * @param shortOption The short option name.
-     * @param description The description of the option.
-     * @param option      The option to register.
-     * @param deprecated  A boolean indicating whether an option should
-     *                    be deprecated.
-     */
-
-    public void register( String longOption, char shortOption,
-                          String description, Option option,
-                          boolean deprecated ) {
-        generalModule.register( longOption, shortOption, description, option,
-                                deprecated );
-    }
-
-    /**
-     * Register an option module based on its name.
-     *
-     * @param module The option module to register.
-     */
-
-    public void register( OptionModule module ) {
-        register( module.getName(), module );
-    }
-
-    /**
-     * Register an option module and associate it with the name passed.
-     *
-     * @param name   The name associated with the option module.
-     * @param module The option module to register.
-     */
-
-    public void register( String name, OptionModule module ) {
-        modules.put( name.toLowerCase(), module );
-    }
-
-    /**
-     * Process a string of values representing the invoked options. After
-     * all the options are processed, any leftover arguments are returned.
-     *
-     * @param args The arguments to process.
-     *
-     * @return The leftover arguments.
-     */
-
-    public String[] process( String args[] )
-    {
-        String []retval = new String[0];
-        try {
-            retval = processOptions( args );
-        }
-        catch ( OptionException e ) {
-            System.err.println( "Error: " + e.getMessage() );
-        }
-        /**
-        catch ( Exception e ) {
-            System.err.println( "Error: Unexpected Error in ritopt Processing." +
-                                "Check syntax." );
-                                }**/
-        return retval;
-    }
-
-    /**
-     * Retrieves an option module based on the name passed.
-     *
-     * @param name The name referring to the option module.
-     *
-     * @return The option module. Null is returned if the module does not
-     *         exist.
-     */
-
-    public OptionModule getModule( String name ) {
-        return modules.get( name.toLowerCase() );
-    }
-
-    /**
-     * Returns a boolean indicating whether an option module exists.
-     *
-     * @param name The name referring to the option module.
-     *
-     * @return A boolean value indicating whether the module exists.
-     */
-
-    public boolean moduleExists( String name ) {
-        return getModule( name ) != null;
-    }
-
-    /**
-     * Receives NotifyOption events. If the event command equals "help"
-     * or "version", the appropriate display methods are invoked.
-     *
-     * @param event         The event object containing information about the
-     *                      invocation.
-     */
-
-    public void optionInvoked( OptionEvent event ) {
-        if ( event.getCommand().equals( "help" ) ) {
-            displayHelp();
-        }
-        else if ( event.getCommand().equals( "version" ) ) {
-            displayVersion();
-        }
-    }
-
-    /**
-     * Process a string representing the invoked options. This string
-     * gets split according to how they would be split when passed to
-     * a main method. The split array of options gets passed to a
-     * private method for processing. After all the options are processed,
-     * any leftover arguments are returned.
-     *
-     * @param str The arguments to process.
-     *
-     * @return The leftover arguments.
-     */
-
-    public String[] process( String str ) {
-        return process( split( str ) );
-    }
-
-    /**
-     * Splits a string representing command line arguments into several
-     * strings.
-     *
-     * @param str   The string to split.
-     *
-     * @return  The splitted string.
-     */
-
-    public String[] split( String str ) {
-        StringBuffer buf = new StringBuffer( str.length() );
-        java.util.List<String> l = new java.util.ArrayList<String>();
-        int scnt = Utility.count( str, '"' );
-        boolean q = false;
-        if ( (scnt) / 2.0 != (scnt / 2) ) {
-            throw new OptionProcessingException( "Expecting an end quote." );
-        }
-        for ( int n = 0; n < str.length(); n++ ) {
-            if ( str.charAt( n ) == '"' ) {
-                q = !q;
-            }
-            else if ( str.charAt( n ) == ' ' && !q ) {
-                l.add( buf.toString() );
-                buf = new StringBuffer( str.length() );
-            }
-            else {
-                buf.append( str.charAt( n ) );
-            }
-        }
-        if ( buf.length() != 0 ) {
-            l.add( buf.toString() );
-        }
-        Iterator<String> it = l.iterator();
-        String retval[] = new String[ l.size() ];
-        int n = 0;
-        while ( it.hasNext() ) {
-            retval[ n++ ] = it.next();
-        }
-        return retval;
-    }
-
-    /**
-     * Writes all options and their modules out to an options file.
-     *
-     * @param filename  The options filename to write.
-     */
-
-    public void writeOptionFile( String filename ) {
-        BufferedOutputStream writer = null;
-        Iterator<OptionModule> it = null;
-        currentModule = generalModule;
-        try {
-            writer =
-                new BufferedOutputStream( new FileOutputStream( filename ) );
-            PrintStream ps = new PrintStream( writer );
-            generalModule.writeFileToPrintStream( ps );
-            it = modules.values().iterator();
-            while ( it.hasNext() ) {
-                OptionModule module = it.next();
-                module.writeFileToPrintStream( ps );
-            }
-        }
-        catch ( IOException e ) {
-            throw new OptionProcessingException( e.getMessage() );
-        }
-        finally {
-            try {
-                if ( writer != null )
-                    writer.close();
-            }
-            catch( IOException e ) {
-                throw new OptionProcessingException( e.getMessage() );
-            }
-        }
-    }
-
-    /**
-     * Loads all options and their modules from an options file.
-     *
-     * @param filename  The options filename to write.
-     */
-
-    public void loadOptionFile( String filename ) {
-        BufferedReader reader = null;
-        String line = null;
-        currentModule = generalModule;
-        try {
-            reader = new BufferedReader( new FileReader( filename ) );
-            while ( ( line = reader.readLine() ) != null ) {
-                line = Utility.stripComments( line, '\"', ';' );
-                process( line );
-            }
-        }
-        catch ( IOException e ) {
-            throw new OptionProcessingException( e.getMessage() );
-        }
-        finally {
-            try {
-                if ( reader != null )
-                    reader.close();
-            }
-            catch( IOException e ) {
-                throw new OptionProcessingException( e.getMessage() );
-            }
-        }
-    }
-
-    /**
-     * Processes an array of strings representing command line arguments.
-     *
-     * @param args arguments to process.
-     *
-     * @return The leftover arguments.
-     */
-
-    private String[] processOptions( String args[] ) {
-        String retval[] = null;
-        String moduleName = "general";
-        String optionFile = "";
-        char shortOption = '\0';
-        String longOption = "";
-        for ( int n = 0; n < args.length && retval == null; n++ ) {
-            boolean moduleInvoked = false;
-            boolean shortOptionInvoked = false;
-            boolean longOptionInvoked = false;
-            boolean readOptionFileInvoked = false;
-            boolean writeOptionFileInvoked = false;
-            if ( args[ n ].length() >= 1 ) {
-                char fc = args[ n ].charAt( 0 );
-                moduleInvoked = fc == ':';
-                readOptionFileInvoked = fc == '@';
-                writeOptionFileInvoked = fc == '%';
-            }
-            if ( args[ n ].length() >= 2 ) {
-                String s = args[ n ].substring( 0, 2 );
-                shortOptionInvoked = ( !s.equals( "--" ) &&
-                           s.charAt( 0 ) == '-' );
-                longOptionInvoked = ( s.equals( "--" ) );
-            }
-            if ( debugFlag ) {
-                System.err.println( "Short Option: " + shortOptionInvoked );
-                System.err.println( "Long Option: " + longOptionInvoked );
-                System.err.println( "Module: " + moduleInvoked );
-                System.err.println( "Load Option File: " +
-                                    readOptionFileInvoked );
-                System.err.println( "Write Option File: "
-                                    + writeOptionFileInvoked );
-            }
-            if ( moduleInvoked ) {
-                if (  args[ n ].charAt( args[ n ].length() - 1 ) != ':' ) {
-                    System.err.println( args[ n ] );
-                    throw new
-                        OptionProcessingException(
-                                                  "Module arguments must start"
-                                                  + " with : and end with :."
-                                                  );
-                }
-                else {
-                    moduleName = args[n].substring( 1,
-                                                    args[n].length() - 1
-                                                    ).toLowerCase();
-                    if ( moduleName.length() == 0
-                         || moduleName.equals( "general" ) ) {
-                        moduleName = "general";
-                        currentModule = generalModule;
-                    }
-                    else {
-                        currentModule = getModule( moduleName );
-                    }
-                    if ( currentModule == null )
-                        throw new OptionProcessingException( "Module '" +
-                                                             moduleName +
-                                                         "' does not exist." );
-                    if ( debugFlag ) {
-                        System.err.println( "Module: " + moduleName );
-                    }
-                }
-                moduleInvoked = false;
-            }
-            else if ( readOptionFileInvoked ) {
-                optionFile = Utility.trim( args[ n ].substring( 1 ) );
-                if ( optionFile.equals( "@" )
-                     || optionFile.length() == 0 )
-                    optionFile = defaultOptionFilename;
-                if ( debugFlag ) {
-                    System.err.println( "Option file: '" + optionFile + "'." );
-                }
-                loadOptionFile( optionFile );
-            }
-            else if ( shortOptionInvoked ) {
-                shortOption = args[ n ].charAt( 1 );
-                if ( !Utility.isAlphaNumeric( shortOption ) ) {
-                    throw new OptionProcessingException(
-                      "A short option must be alphanumeric. -" + shortOption
-                      + " is not acceptable." );
-                }
-                if ( debugFlag ) {
-                    System.err.println( "Short option text: " + shortOption );
-                }
-                char delim = ( args[ n ].length() >= 3 ) ?
-                    args[ n ].charAt( 2 ) : '\0';
-                if ( delim == '+' || delim == '-' ) {
-                    currentModule.action( shortOption, delim );
-                }
-                else if ( delim == '=' ) {
-                    currentModule.action( shortOption,
-                                          args[ n ].substring( 3 ) );
-                }
-                else if ( delim == '\0' ) {
-                    String dtext = "+";
-                    if ( n < args.length - 1 ) {
-                        if ( !Utility.contains( args[ n + 1 ].charAt( 0 ),
-                                                "-[@" ) ) {
-                            dtext = args[ n + 1 ];
-                            n++;
-                        }
-                    }
-                    currentModule.action( shortOption, dtext );
-                }
-                else if ( Utility.isAlphaNumeric( delim ) ) {
-                    for ( int j = 1; j < args[ n ].length(); j++ ) {
-                        if ( Utility.isAlphaNumeric( args[ n ].charAt( j ) ) ) {
-                            currentModule.action( shortOption, "+" );
-                        }
-                        else {
-                            throw new OptionProcessingException(
-                              "A short option must be alphanumeric. -"
-                              + shortOption + " is not acceptable." );
-                        }
-                    }
-                }
-            }
-            else if ( longOptionInvoked ) {
-                char lastchar = args[ n ].charAt( args[ n ].length() - 1 );
-                int eqindex = args[ n ].indexOf( "=" );
-                if ( eqindex != -1 ) {
-                    longOption = args[ n ].substring( 2, eqindex );
-                    String value = args[ n ].substring( eqindex + 1 );
-                    currentModule.action( longOption, value );
-                }
-                else if ( Utility.contains( lastchar, "+-" ) ) {
-                    longOption = args[ n ].substring( 2,
-                                                      args[ n ].length() - 1 );
-                    currentModule.action( longOption, lastchar );
-                }
-                else {
-                    longOption = args[ n ].substring( 2 );
-                    String dtext = "+";
-                    if ( n < args.length - 1 && args[ n + 1 ].length() > 0 ) {
-                        if ( !Utility.contains( args[ n + 1 ].charAt( 0 ),
-                                                "-[@" ) ) {
-                            dtext = args[ n + 1 ];
-                            n++;
-                        }
-                    }
-                    currentModule.action( longOption, dtext );
-                }
-                if ( debugFlag ) {
-                    System.err.println( "long option: " + longOption );
-                }
-            }
-            else if ( writeOptionFileInvoked ) {
-                optionFile = Utility.trim( args[ n ].substring( 1 ) );
-                if ( optionFile.equals( "%" )
-                     || optionFile.length() == 0 )
-                    optionFile = defaultOptionFilename;
-                if ( debugFlag ) {
-                    System.err.println( "Option file: '" + optionFile + "'." );
-                }
-                writeOptionFile( optionFile );
-            }
-            else {
-                retval = new String[ args.length - n ];
-                for ( int j = n; j < args.length; j++ ) {
-                    retval[ j - n ] = args[ j ];
-                }
-            }
-        }
-        if ( retval == null ) retval = new String[ 0 ];
-        return retval;
-    }
-}
+package gnu.dtools.ritopt;
+
+/**
+ * Options.java
+ *
+ * Version:
+ *    $Id$
+
+ */
+
+import java.io.*;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import net.sf.jabref.Globals;
+
+/**
+ * This class functions as a repository for options and their modules. It
+ * facilitates registration of options and modules, as well as processing of
+ * arguments.<p>
+ *
+ * Information such as help, usage, and versions are displayed
+ * when the respective --help and --version options are specified.
+ * The --menu option will invoke the built-in menu.<p>
+ *
+ * In the example below, the program processes three simple options.
+ *
+ * <pre>
+ * public class AboutMe {
+ *
+ *    private static StringOption name = new StringOption( "Ryan" );
+ *    private static IntOption age = new IntOption( 19 );
+ *    private static DoubleOption bankBalance = new DoubleOption( 15.15 );
+ *
+ *    public static void main( String args[] ) {
+ *       Options repo = new Options( "java AboutMe" );
+ *       repo.register( "name", 'n', name, "The person's name." );
+ *       repo.register( "age", 'a', age, "The person's age." );
+ *       repo.register( "balance", 'b', "The person's bank balance.",
+ *                       bankBalance );
+ *       repo.process( args );
+g *       System.err.println( "" + name + ", age " + age + " has a " +
+ *                           " bank balance of " + bankBalance + "." );
+ *    }
+ * }
+ * </pre>
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class Options implements OptionRegistrar, OptionModuleRegistrar,
+                                OptionListener {
+
+    /**
+     * The default verbosity.
+     */
+
+    public static final int DEFAULT_VERBOSITY = 3;
+
+    /**
+     * This boolean defines whether options are deprecated by default.
+     */
+
+    public static final boolean DEFAULT_DEPRECATED = false;
+
+    /**
+     * The default reason for deprecation.
+     */
+
+    public static final String DEFAULT_REASON = "No reason given.";
+
+    /**
+     * The default general module name.
+     */
+
+    public static final String DEFAULT_GENERAL_MODULE_NAME = "General";
+
+    /**
+     * This boolean defines whether usage should be displayed.
+     */
+
+    public static final boolean DEFAULT_DISPLAY_USAGE = false; // Mod. Morten A.
+
+    /**
+     * This boolean defines whether the menu should be used.
+     */
+
+    public static final boolean DEFAULT_USE_MENU = false; // Mod. Morten A.
+
+    /**
+     * The default program name that is display in the usage.
+     */
+
+    public static final String DEFAULT_PROGRAM_NAME = "java program";
+
+    /**
+     * The default option file.
+     */
+
+    public static final String DEFAULT_OPTION_FILENAME = "default.opt";
+
+    /**
+     * The program to display in the usage.
+     */
+
+    private String usageProgram;
+
+    /**
+     * The version to display in the usage.
+     */
+
+    private String version;
+
+    /**
+     * The default option filename if an option file is not specified.
+     */
+
+    private String defaultOptionFilename;
+
+    /**
+     * This flag defines whether to display usage when help is displayed.
+     */
+
+    private boolean displayUsage;
+
+    /**
+     * This boolean defines whether the menu should be used.
+     */
+
+    private boolean useMenu;
+
+    /**
+     * When this flag is true, debugging information is displayed.
+     */
+
+    private boolean debugFlag;
+
+    /**
+     * The current module being processed.
+     */
+
+    private OptionModule currentModule;
+
+    /**
+     * The general option module.
+     */
+
+    private OptionModule generalModule;
+
+    /**
+     * A map of option modules.
+     */
+
+    private java.util.HashMap<String, OptionModule> modules;
+
+    /**
+     * Version information is displayed when this option is specified.
+     */
+
+    private NotifyOption versionOption;
+
+    /**
+     * Create an option repository.
+     */
+
+    public Options() {
+        this( DEFAULT_PROGRAM_NAME );
+    }
+
+    /**
+     * Create an option repository and associated it with a program name.
+     *
+     * @param programName A program name like "java Balloons".
+     */
+
+    public Options( String programName ) {
+        displayUsage = DEFAULT_DISPLAY_USAGE;
+        useMenu = DEFAULT_USE_MENU;
+        defaultOptionFilename = DEFAULT_OPTION_FILENAME;
+        usageProgram = programName;
+        modules = new HashMap<String, OptionModule>();
+        versionOption = new NotifyOption( this, "version", "" );
+        version = "Version 1.0";
+        generalModule = new OptionModule( DEFAULT_GENERAL_MODULE_NAME );
+        currentModule = generalModule;
+
+        // Mod. Morten A. ------------------------------------------------
+        register( "version", 'v',
+                  "Displays version information.", versionOption );
+        /*register( "help", 'h', "Displays help for each option.", helpOption );
+        register( "menu", 'm', "Displays the built-in interactive menu.",
+                  menuOption );*/
+        // End mod. Morten A. ------------------------------------------------
+    }
+
+    /**
+     * Returns the help information as a string.
+     *
+     * @return The help information.
+     */
+
+    public String getHelp() {
+        String retval = (displayUsage ? getUsage() + "\n\n" : "" ) +
+            // Mod. Morten A.
+            //"Use --menu to invoke the interactive built-in menu.\n\n" +
+            Option.getHelpHeader() + "\n\n" + generalModule.getHelp();
+        Iterator<OptionModule> it = modules.values().iterator();
+        while ( it.hasNext() ) {
+            OptionModule module = it.next();
+            retval += "\n\nOption Listing for " + module.getName() + "\n";
+            retval += module.getHelp() + "\n";
+        }
+        return retval;
+    }
+
+    /**
+     * Returns usage information of this program.
+     *
+     * @return The usage information.
+     */
+
+    public String getUsage() {
+        return getUsageProgram()
+            + " @optionfile :module: OPTIONS ... :module: OPTIONS";
+    }
+
+    /**
+     * Returns the program name displayed in the usage.
+     *
+     * @returns The program name.
+     */
+
+    public String getUsageProgram() {
+        return usageProgram;
+    }
+
+    /**
+     * Returns the version of the program.
+     *
+     * @returns The version.
+     */
+
+    public String getVersion() {
+        return version;
+    }
+
+    /**
+     * Returns the option filename to load or write to if one is not
+     * specified.
+     *
+     * @return The default option filename.
+     */
+
+    public String getDefaultOptionFilename() {
+        return defaultOptionFilename;
+    }
+
+    /**
+     * Returns whether debugging information should be displayed.
+     *
+     * @return A boolean indicating whether to display help information.
+     */
+
+    public boolean getDebugFlag() {
+        return debugFlag;
+    }
+
+    /**
+     * Returns whether the help information should display usage.
+     *
+     * @return A boolean indicating whether help should display usage.
+     */
+
+    public boolean shouldDisplayUsage() {
+        return displayUsage;
+    }
+
+    /**
+     * Returns whether the built-in menu system can be invoked.
+     *
+     * @return A boolean indicating whether the build-in menu system
+     *         can be invoked.
+     */
+
+    public boolean shouldUseMenu() {
+        return useMenu;
+    }
+
+    /**
+     * Sets whether usage can be displayed.
+     *
+     * @param b     A boolean value indicating that usage can be displayed.
+     */
+
+    public void setDisplayUsage( boolean b ) {
+        displayUsage = b;
+    }
+
+    /**
+     * Sets whether the built-in menu system can be used.
+     *
+     * @param b      A boolean value indicating whether the built-in menu
+     *               system can be used.
+     */
+
+    public void setUseMenu( boolean b ) {
+        useMenu = b;
+    }
+
+    /**
+     * Sets the program to display when the usage is displayed.
+     *
+     * @param program The program displayed during usage.
+     */
+
+    public void setUsageProgram( String program ) {
+        usageProgram = program;
+    }
+
+    /**
+     * Sets the version of the program.
+     *
+     * @param version The version.
+     */
+
+    public void setVersion( String version ) {
+        this.version = version;
+    }
+
+    /**
+     * Sets the option file to use when an option file is not specified.
+     *
+     * @param fn      The filename of the default option file.
+     */
+
+    public void setDefaultOptionFilename( String fn ) {
+        defaultOptionFilename = fn;
+    }
+
+
+    /**
+     * Displays the program's help which includes a description of each
+     * option. The usage is display if the usage flag is set to true.
+     */
+
+    public void displayHelp() {
+        System.err.println( getHelp() );
+    }
+
+    /**
+     * Displays the version of the program.
+     */
+
+    public void displayVersion() {
+        System.err.println( getVersion() +" (build " +Globals.BUILD +")");
+    }
+
+    /**
+     * Register an option into the repository as a long option.
+     *
+     * @param longOption  The long option name.
+     * @param option      The option to register.
+     */
+
+    public void register( String longOption, Option option ) {
+        generalModule.register( longOption, option );
+    }
+
+    /**
+     * Register an option into the repository as a short option.
+     *
+     * @param shortOption The short option name.
+     * @param option      The option to register.
+     */
+
+    public void register( char shortOption, Option option ) {
+        generalModule.register( shortOption, option );
+    }
+
+    /**
+     * Register an option into the repository both as a short and long option.
+     *
+     * @param longOption  The long option name.
+     * @param shortOption The short option name.
+     * @param option      The option to register.
+     */
+
+    public void register( String longOption, char shortOption,
+                          Option option ) {
+        generalModule.register( longOption, shortOption, option );
+    }
+
+    /**
+     * Register an option into the repository both as a short and long option.
+     * Initialize its description with the description passed.
+     *
+     * @param longOption  The long option name.
+     * @param shortOption The short option name.
+     * @param description The description of the option.
+     * @param option      The option to register.
+     */
+
+    public void register( String longOption, char shortOption,
+                          String description, Option option ) {
+        generalModule.register( longOption, shortOption, description, option );
+    }
+
+    /**
+     * Register an option into the repository both as a short and long option.
+     * Initialize its description with the description passed.
+     *
+     * @param longOption  The long option name.
+     * @param shortOption The short option name.
+     * @param description The description of the option.
+     * @param option      The option to register.
+     * @param deprecated  A boolean indicating whether an option should
+     *                    be deprecated.
+     */
+
+    public void register( String longOption, char shortOption,
+                          String description, Option option,
+                          boolean deprecated ) {
+        generalModule.register( longOption, shortOption, description, option,
+                                deprecated );
+    }
+
+    /**
+     * Register an option module based on its name.
+     *
+     * @param module The option module to register.
+     */
+
+    public void register( OptionModule module ) {
+        register( module.getName(), module );
+    }
+
+    /**
+     * Register an option module and associate it with the name passed.
+     *
+     * @param name   The name associated with the option module.
+     * @param module The option module to register.
+     */
+
+    public void register( String name, OptionModule module ) {
+        modules.put( name.toLowerCase(), module );
+    }
+
+    /**
+     * Process a string of values representing the invoked options. After
+     * all the options are processed, any leftover arguments are returned.
+     *
+     * @param args The arguments to process.
+     *
+     * @return The leftover arguments.
+     */
+
+    public String[] process( String args[] )
+    {
+        String []retval = new String[0];
+        try {
+            retval = processOptions( args );
+        }
+        catch ( OptionException e ) {
+            System.err.println( "Error: " + e.getMessage() );
+        }
+        /**
+        catch ( Exception e ) {
+            System.err.println( "Error: Unexpected Error in ritopt Processing." +
+                                "Check syntax." );
+                                }**/
+        return retval;
+    }
+
+    /**
+     * Retrieves an option module based on the name passed.
+     *
+     * @param name The name referring to the option module.
+     *
+     * @return The option module. Null is returned if the module does not
+     *         exist.
+     */
+
+    public OptionModule getModule( String name ) {
+        return modules.get( name.toLowerCase() );
+    }
+
+    /**
+     * Returns a boolean indicating whether an option module exists.
+     *
+     * @param name The name referring to the option module.
+     *
+     * @return A boolean value indicating whether the module exists.
+     */
+
+    public boolean moduleExists( String name ) {
+        return getModule( name ) != null;
+    }
+
+    /**
+     * Receives NotifyOption events. If the event command equals "help"
+     * or "version", the appropriate display methods are invoked.
+     *
+     * @param event         The event object containing information about the
+     *                      invocation.
+     */
+
+    public void optionInvoked( OptionEvent event ) {
+        if ( event.getCommand().equals( "help" ) ) {
+            displayHelp();
+        }
+        else if ( event.getCommand().equals( "version" ) ) {
+            displayVersion();
+        }
+    }
+
+    /**
+     * Process a string representing the invoked options. This string
+     * gets split according to how they would be split when passed to
+     * a main method. The split array of options gets passed to a
+     * private method for processing. After all the options are processed,
+     * any leftover arguments are returned.
+     *
+     * @param str The arguments to process.
+     *
+     * @return The leftover arguments.
+     */
+
+    public String[] process( String str ) {
+        return process( split( str ) );
+    }
+
+    /**
+     * Splits a string representing command line arguments into several
+     * strings.
+     *
+     * @param str   The string to split.
+     *
+     * @return  The splitted string.
+     */
+
+    public String[] split( String str ) {
+        StringBuffer buf = new StringBuffer( str.length() );
+        java.util.List<String> l = new java.util.ArrayList<String>();
+        int scnt = Utility.count( str, '"' );
+        boolean q = false;
+        if ( (scnt) / 2.0 != (scnt / 2) ) {
+            throw new OptionProcessingException( "Expecting an end quote." );
+        }
+        for ( int n = 0; n < str.length(); n++ ) {
+            if ( str.charAt( n ) == '"' ) {
+                q = !q;
+            }
+            else if ( str.charAt( n ) == ' ' && !q ) {
+                l.add( buf.toString() );
+                buf = new StringBuffer( str.length() );
+            }
+            else {
+                buf.append( str.charAt( n ) );
+            }
+        }
+        if ( buf.length() != 0 ) {
+            l.add( buf.toString() );
+        }
+        Iterator<String> it = l.iterator();
+        String retval[] = new String[ l.size() ];
+        int n = 0;
+        while ( it.hasNext() ) {
+            retval[ n++ ] = it.next();
+        }
+        return retval;
+    }
+
+    /**
+     * Writes all options and their modules out to an options file.
+     *
+     * @param filename  The options filename to write.
+     */
+
+    public void writeOptionFile( String filename ) {
+        BufferedOutputStream writer = null;
+        Iterator<OptionModule> it = null;
+        currentModule = generalModule;
+        try {
+            writer =
+                new BufferedOutputStream( new FileOutputStream( filename ) );
+            PrintStream ps = new PrintStream( writer );
+            generalModule.writeFileToPrintStream( ps );
+            it = modules.values().iterator();
+            while ( it.hasNext() ) {
+                OptionModule module = it.next();
+                module.writeFileToPrintStream( ps );
+            }
+        }
+        catch ( IOException e ) {
+            throw new OptionProcessingException( e.getMessage() );
+        }
+        finally {
+            try {
+                if ( writer != null )
+                    writer.close();
+            }
+            catch( IOException e ) {
+                throw new OptionProcessingException( e.getMessage() );
+            }
+        }
+    }
+
+    /**
+     * Loads all options and their modules from an options file.
+     *
+     * @param filename  The options filename to write.
+     */
+
+    public void loadOptionFile( String filename ) {
+        BufferedReader reader = null;
+        String line = null;
+        currentModule = generalModule;
+        try {
+            reader = new BufferedReader( new FileReader( filename ) );
+            while ( ( line = reader.readLine() ) != null ) {
+                line = Utility.stripComments( line, '\"', ';' );
+                process( line );
+            }
+        }
+        catch ( IOException e ) {
+            throw new OptionProcessingException( e.getMessage() );
+        }
+        finally {
+            try {
+                if ( reader != null )
+                    reader.close();
+            }
+            catch( IOException e ) {
+                throw new OptionProcessingException( e.getMessage() );
+            }
+        }
+    }
+
+    /**
+     * Processes an array of strings representing command line arguments.
+     *
+     * @param args arguments to process.
+     *
+     * @return The leftover arguments.
+     */
+
+    private String[] processOptions( String args[] ) {
+        String retval[] = null;
+        String moduleName = "general";
+        String optionFile = "";
+        char shortOption = '\0';
+        String longOption = "";
+        for ( int n = 0; n < args.length && retval == null; n++ ) {
+            boolean moduleInvoked = false;
+            boolean shortOptionInvoked = false;
+            boolean longOptionInvoked = false;
+            boolean readOptionFileInvoked = false;
+            boolean writeOptionFileInvoked = false;
+            if ( args[ n ].length() >= 1 ) {
+                char fc = args[ n ].charAt( 0 );
+                moduleInvoked = fc == ':';
+                readOptionFileInvoked = fc == '@';
+                writeOptionFileInvoked = fc == '%';
+            }
+            if ( args[ n ].length() >= 2 ) {
+                String s = args[ n ].substring( 0, 2 );
+                shortOptionInvoked = ( !s.equals( "--" ) &&
+                           s.charAt( 0 ) == '-' );
+                longOptionInvoked = ( s.equals( "--" ) );
+            }
+            if ( debugFlag ) {
+                System.err.println( "Short Option: " + shortOptionInvoked );
+                System.err.println( "Long Option: " + longOptionInvoked );
+                System.err.println( "Module: " + moduleInvoked );
+                System.err.println( "Load Option File: " +
+                                    readOptionFileInvoked );
+                System.err.println( "Write Option File: "
+                                    + writeOptionFileInvoked );
+            }
+            if ( moduleInvoked ) {
+                if (  args[ n ].charAt( args[ n ].length() - 1 ) != ':' ) {
+                    System.err.println( args[ n ] );
+                    throw new
+                        OptionProcessingException(
+                                                  "Module arguments must start"
+                                                  + " with : and end with :."
+                                                  );
+                }
+                else {
+                    moduleName = args[n].substring( 1,
+                                                    args[n].length() - 1
+                                                    ).toLowerCase();
+                    if ( moduleName.length() == 0
+                         || moduleName.equals( "general" ) ) {
+                        moduleName = "general";
+                        currentModule = generalModule;
+                    }
+                    else {
+                        currentModule = getModule( moduleName );
+                    }
+                    if ( currentModule == null )
+                        throw new OptionProcessingException( "Module '" +
+                                                             moduleName +
+                                                         "' does not exist." );
+                    if ( debugFlag ) {
+                        System.err.println( "Module: " + moduleName );
+                    }
+                }
+                moduleInvoked = false;
+            }
+            else if ( readOptionFileInvoked ) {
+                optionFile = Utility.trim( args[ n ].substring( 1 ) );
+                if ( optionFile.equals( "@" )
+                     || optionFile.length() == 0 )
+                    optionFile = defaultOptionFilename;
+                if ( debugFlag ) {
+                    System.err.println( "Option file: '" + optionFile + "'." );
+                }
+                loadOptionFile( optionFile );
+            }
+            else if ( shortOptionInvoked ) {
+                shortOption = args[ n ].charAt( 1 );
+                if ( !Utility.isAlphaNumeric( shortOption ) ) {
+                    throw new OptionProcessingException(
+                      "A short option must be alphanumeric. -" + shortOption
+                      + " is not acceptable." );
+                }
+                if ( debugFlag ) {
+                    System.err.println( "Short option text: " + shortOption );
+                }
+                char delim = ( args[ n ].length() >= 3 ) ?
+                    args[ n ].charAt( 2 ) : '\0';
+                if ( delim == '+' || delim == '-' ) {
+                    currentModule.action( shortOption, delim );
+                }
+                else if ( delim == '=' ) {
+                    currentModule.action( shortOption,
+                                          args[ n ].substring( 3 ) );
+                }
+                else if ( delim == '\0' ) {
+                    String dtext = "+";
+                    if ( n < args.length - 1 ) {
+                        if ( !Utility.contains( args[ n + 1 ].charAt( 0 ),
+                                                "-[@" ) ) {
+                            dtext = args[ n + 1 ];
+                            n++;
+                        }
+                    }
+                    currentModule.action( shortOption, dtext );
+                }
+                else if ( Utility.isAlphaNumeric( delim ) ) {
+                    for ( int j = 1; j < args[ n ].length(); j++ ) {
+                        if ( Utility.isAlphaNumeric( args[ n ].charAt( j ) ) ) {
+                            currentModule.action( shortOption, "+" );
+                        }
+                        else {
+                            throw new OptionProcessingException(
+                              "A short option must be alphanumeric. -"
+                              + shortOption + " is not acceptable." );
+                        }
+                    }
+                }
+            }
+            else if ( longOptionInvoked ) {
+                char lastchar = args[ n ].charAt( args[ n ].length() - 1 );
+                int eqindex = args[ n ].indexOf( "=" );
+                if ( eqindex != -1 ) {
+                    longOption = args[ n ].substring( 2, eqindex );
+                    String value = args[ n ].substring( eqindex + 1 );
+                    currentModule.action( longOption, value );
+                }
+                else if ( Utility.contains( lastchar, "+-" ) ) {
+                    longOption = args[ n ].substring( 2,
+                                                      args[ n ].length() - 1 );
+                    currentModule.action( longOption, lastchar );
+                }
+                else {
+                    longOption = args[ n ].substring( 2 );
+                    String dtext = "+";
+                    if ( n < args.length - 1 && args[ n + 1 ].length() > 0 ) {
+                        if ( !Utility.contains( args[ n + 1 ].charAt( 0 ),
+                                                "-[@" ) ) {
+                            dtext = args[ n + 1 ];
+                            n++;
+                        }
+                    }
+                    currentModule.action( longOption, dtext );
+                }
+                if ( debugFlag ) {
+                    System.err.println( "long option: " + longOption );
+                }
+            }
+            else if ( writeOptionFileInvoked ) {
+                optionFile = Utility.trim( args[ n ].substring( 1 ) );
+                if ( optionFile.equals( "%" )
+                     || optionFile.length() == 0 )
+                    optionFile = defaultOptionFilename;
+                if ( debugFlag ) {
+                    System.err.println( "Option file: '" + optionFile + "'." );
+                }
+                writeOptionFile( optionFile );
+            }
+            else {
+                retval = new String[ args.length - n ];
+                for ( int j = n; j < args.length; j++ ) {
+                    retval[ j - n ] = args[ j ];
+                }
+            }
+        }
+        if ( retval == null ) retval = new String[ 0 ];
+        return retval;
+    }
+}
diff --git a/src/java/gnu/dtools/ritopt/ShortOption.java b/src/java/gnu/dtools/ritopt/ShortOption.java
index c757ac9..e7a5f70 100644
--- a/src/java/gnu/dtools/ritopt/ShortOption.java
+++ b/src/java/gnu/dtools/ritopt/ShortOption.java
@@ -1,202 +1,202 @@
-package gnu.dtools.ritopt;
-
-/**
- * ShortOption.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * This class is used for options with short values.
- *
- * <hr>
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class ShortOption extends Option {
-
-    /**
-     * The value of this short option.
-     */
-
-    private short value;
-
-    /**
-     * Constructs a short option that is initially set to zero.
-     */
-
-    public ShortOption() {
-	this( (short)0 );
-    }
-
-    /**
-     * Constructs a short option by copying the short option passed.
-     *
-     * @param op     The character option to copy.
-     */
-
-    public ShortOption( ShortOption op ) {
-	super( op );
-	op.value = op.getValue();
-    }
-
-    /**
-     * Constructs a short option initialized with the value passed.
-     *
-     * @param value    The initial value of this short option.
-     */
-
-    public ShortOption( short value ) {
-	this( value, null );
-    }
-
-    /**
-     * Constructs a short option initialized with the value and
-     * long option passed.
-     *
-     * @param value      The initial value of this short option.
-     * @param longOption The long option associated with short option.
-     */
-
-    public ShortOption( short value, String longOption ) {
-	this( value, longOption, '\0' );
-    }
-
-    /**
-     * Constructs a character option initialized with the value and
-     * short option passed.
-     *
-     * @param value       The initial value of this short option.
-     * @param shortOption The short option associated with this option.
-     */
-
-    public ShortOption( short value, char shortOption ) {
-	this( value, null, shortOption );
-    }
-
-    /**
-     * Constructs a short option initialized with the value, short
-     * and long option passed.
-     *
-     * @param shortOption The short option associated with this option.
-     * @param longOption  The long option associated with this option.
-     * @param value       The initial value of this short option.
-     */
-
-    public ShortOption( short value, String longOption, char shortOption ) {
-	super( longOption, shortOption );
-	this.value = value;
-    }
-
-    /**
-     * Return the value as an object.
-     *
-     * @return This value as an option.
-     */
-
-    public Object getObject() {
-	return new Short( value );
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void modify( String value ) throws OptionModificationException {
-	try {
-	    this.value = Short.parseShort( value );
-	}
-	catch ( NumberFormatException e ) {
-	    throw new OptionModificationException( "Error. A short must be"
-						   + " specified, not '"
-						   + value + "'." );
-	}
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void setValue( String value ) throws OptionModificationException {
-	modify( value );
-    }
-
-    /**
-     * Modify this option using a short value.
-     *
-     * @param     value A short value.
-     */
-
-    public void setValue( short value ) {
-	this.value = value;
-    }
-
-    /**
-     * Return this option as a short.
-     *
-     * @return This option as a short.
-     */
-
-    public short getValue() {
-	return value;
-    }
-
-    /**
-     * Return this option as a string.
-     *
-     * @return This option as a string.
-     */
-
-    public String getStringValue() {
-	return Short.toString( value );
-    }
-
-    /**
-     * Returns the type name of this option. For a ShortOption, "SHORT"
-     * is returned.
-     *
-     * @return The type name of this option.
-     */
-
-    public String getTypeName() {
-	return "SHORT";
-    }
-
-    /**
-     * Returns a string representation of this object.
-     *
-     * @return A string representation of this object.
-     */
-
-    public String toString() {
-	return getStringValue();
-    }
-
-} /** ShortOption */
+package gnu.dtools.ritopt;
+
+/**
+ * ShortOption.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * This class is used for options with short values.
+ *
+ * <hr>
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class ShortOption extends Option {
+
+    /**
+     * The value of this short option.
+     */
+
+    private short value;
+
+    /**
+     * Constructs a short option that is initially set to zero.
+     */
+
+    public ShortOption() {
+	this( (short)0 );
+    }
+
+    /**
+     * Constructs a short option by copying the short option passed.
+     *
+     * @param op     The character option to copy.
+     */
+
+    public ShortOption( ShortOption op ) {
+	super( op );
+	op.value = op.getValue();
+    }
+
+    /**
+     * Constructs a short option initialized with the value passed.
+     *
+     * @param value    The initial value of this short option.
+     */
+
+    public ShortOption( short value ) {
+	this( value, null );
+    }
+
+    /**
+     * Constructs a short option initialized with the value and
+     * long option passed.
+     *
+     * @param value      The initial value of this short option.
+     * @param longOption The long option associated with short option.
+     */
+
+    public ShortOption( short value, String longOption ) {
+	this( value, longOption, '\0' );
+    }
+
+    /**
+     * Constructs a character option initialized with the value and
+     * short option passed.
+     *
+     * @param value       The initial value of this short option.
+     * @param shortOption The short option associated with this option.
+     */
+
+    public ShortOption( short value, char shortOption ) {
+	this( value, null, shortOption );
+    }
+
+    /**
+     * Constructs a short option initialized with the value, short
+     * and long option passed.
+     *
+     * @param shortOption The short option associated with this option.
+     * @param longOption  The long option associated with this option.
+     * @param value       The initial value of this short option.
+     */
+
+    public ShortOption( short value, String longOption, char shortOption ) {
+	super( longOption, shortOption );
+	this.value = value;
+    }
+
+    /**
+     * Return the value as an object.
+     *
+     * @return This value as an option.
+     */
+
+    public Object getObject() {
+	return new Short( value );
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void modify( String value ) throws OptionModificationException {
+	try {
+	    this.value = Short.parseShort( value );
+	}
+	catch ( NumberFormatException e ) {
+	    throw new OptionModificationException( "Error. A short must be"
+						   + " specified, not '"
+						   + value + "'." );
+	}
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void setValue( String value ) throws OptionModificationException {
+	modify( value );
+    }
+
+    /**
+     * Modify this option using a short value.
+     *
+     * @param     value A short value.
+     */
+
+    public void setValue( short value ) {
+	this.value = value;
+    }
+
+    /**
+     * Return this option as a short.
+     *
+     * @return This option as a short.
+     */
+
+    public short getValue() {
+	return value;
+    }
+
+    /**
+     * Return this option as a string.
+     *
+     * @return This option as a string.
+     */
+
+    public String getStringValue() {
+	return Short.toString( value );
+    }
+
+    /**
+     * Returns the type name of this option. For a ShortOption, "SHORT"
+     * is returned.
+     *
+     * @return The type name of this option.
+     */
+
+    public String getTypeName() {
+	return "SHORT";
+    }
+
+    /**
+     * Returns a string representation of this object.
+     *
+     * @return A string representation of this object.
+     */
+
+    public String toString() {
+	return getStringValue();
+    }
+
+} /** ShortOption */
diff --git a/src/java/gnu/dtools/ritopt/SimpleProcess.java b/src/java/gnu/dtools/ritopt/SimpleProcess.java
index 26b23cc..f1edb2b 100644
--- a/src/java/gnu/dtools/ritopt/SimpleProcess.java
+++ b/src/java/gnu/dtools/ritopt/SimpleProcess.java
@@ -1,219 +1,219 @@
-package gnu.dtools.ritopt;
-
-/**
- * SimpleProcess.java
- *
- * Version:
- *   $Id$
- */
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-
-/**
- * A SimpleProcess is used to execute a shell process, and redirect an
- * input stream to the processes' standard input, as well as redirect
- * the processes' standard output/error to an output stream. The processes
- * is multithreaded to prevent deadlock.<p>
- *
- * The example below demonstrates the use of this class.
- * <pre>
- *  class ExecuteProcess {
- *       public static void main( String args[] ) {
- *           if ( args.length > 0 ) {
- *               String processName = args[ 0 ];
- *               try {
- *                   SimpleProcess process
- *                      = new SimpleProcess( Runtime.getRuntime.exec(
- *                                                            processName ) );
- *                                          );
- *                   int exitStatus = process.waitFor();
- *                   System.out.println( "The process ran successfully" 
- *                                       + " with an exit status of "
- *                                       + exitStatus + "." );
- *               }
- *               catch ( Exception e ) {
- *                   System.out.println( "The process was not successful. "
- *                                       + " Reason: " + e.getMessage() );
- *               }
- *           }
- *           else {
- *               System.err.println( "Please specify a command" );
- *           }
- *       }
- *  }
- * </pre>
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class SimpleProcess extends Process {
-
-    /**
-     * The target process.
-     */
-
-    private Process process;
-
-    /**
-     * The input stream that the processes' standard input will use.
-     */
-
-    private InputStream processInput;
-
-    /**
-     * The print stream to redirect to.
-     */
-
-    private PrintStream yourOutput;
-
-    /**
-     * The print stream to redirect to.
-     */
-
-    private PrintStream yourError;
-
-    /**
-     * The StreamPrinters.
-     */
-
-    private StreamPrinter in, out, error;
-
-    /**
-     * Constructs a SimpleProcess, redirecting System.in to the its standard
-     * input, System.out to its standard output, and System.err to its standard
-     * error.
-     */
-
-    public SimpleProcess( Process process ) throws IOException {
-	this( process, System.in, System.out, System.err );
-    }
-
-    /**
-     * Constructs a SimpleProcess, initializing it with the streams passed.
-     *
-     * @param process       The target process.
-     * @param processInput  The stream that is redirected to the
-     *                      processes' standard input.
-     * @param processOutput The stream to redirect the processes's
-     *                      standard output.
-     * @param processError  The stream to redirect the processes's
-     *                      standard input.
-     */
-
-    public SimpleProcess( Process process, InputStream processInput,
-			  PrintStream yourOutput, PrintStream yourError )
-                         throws IOException {
-	super();
-	this.process = process;
-	this.processInput = processInput;
-	this.yourOutput = yourOutput;
-	this.yourError = yourError;
-    }
-
-    /**
-     * Returns the standard input of this process.
-     *
-     * @return The standard input of this process.
-     */
-
-    public OutputStream getOutputStream() {
-	return process.getOutputStream();
-    }
-
-    /**
-     * Returns the standard output of this process.
-     *
-     * @return The standard output of this process.
-     */
-
-    public InputStream getInputStream() {
-	return process.getInputStream();
-    }
-
-    /**
-     * Returns the standard error of this process.
-     *
-     * @return The standard error of this process.
-     */
-
-    public InputStream getErrorStream() {
-	return process.getErrorStream();
-    }
-
-    /**
-     * Begin redirecting the streams passed. This method should be invoked
-     * immediately after execution of a simple process to prevent thread
-     * deadlock.
-     *
-     * @return The exit status of the target process.
-     */
-
-    public int waitFor() throws InterruptedException {
-	int retval = waitForImpl();
-	if ( in != null ) {
-	    in.stop();
-	}
-	return retval;
-    }
-
-    /**
-     * Contains the implementation of wait for.
-     *
-     * @return The exit status of the target process.
-     */
-
-    private int waitForImpl() throws InterruptedException {
-		in = new StreamPrinter( processInput,
-					new PrintStream( process.getOutputStream() ) );
-		in.setFlush( true );
-		out = new StreamPrinter( process.getInputStream(), yourOutput );
-		error = new StreamPrinter( process.getErrorStream(), yourError );
-		in.start();
-		out.start();
-		error.start();
-		out.join();
-		error.join();
-		return process.waitFor();
-    }
-
-    /**
-     * Returns the target processes' exit value.
-     *
-     * @return This processes' exit value.
-     */
-
-    public int exitValue() {
-	return process.exitValue();
-    }
-
-    /**
-     * Destroys the target process.
-     */
-
-    public void destroy() throws IllegalThreadStateException {
-	process.destroy();
-    }
-} /** SimpleProcess **/
+package gnu.dtools.ritopt;
+
+/**
+ * SimpleProcess.java
+ *
+ * Version:
+ *   $Id$
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+
+/**
+ * A SimpleProcess is used to execute a shell process, and redirect an
+ * input stream to the processes' standard input, as well as redirect
+ * the processes' standard output/error to an output stream. The processes
+ * is multithreaded to prevent deadlock.<p>
+ *
+ * The example below demonstrates the use of this class.
+ * <pre>
+ *  class ExecuteProcess {
+ *       public static void main( String args[] ) {
+ *           if ( args.length > 0 ) {
+ *               String processName = args[ 0 ];
+ *               try {
+ *                   SimpleProcess process
+ *                      = new SimpleProcess( Runtime.getRuntime.exec(
+ *                                                            processName ) );
+ *                                          );
+ *                   int exitStatus = process.waitFor();
+ *                   System.out.println( "The process ran successfully" 
+ *                                       + " with an exit status of "
+ *                                       + exitStatus + "." );
+ *               }
+ *               catch ( Exception e ) {
+ *                   System.out.println( "The process was not successful. "
+ *                                       + " Reason: " + e.getMessage() );
+ *               }
+ *           }
+ *           else {
+ *               System.err.println( "Please specify a command" );
+ *           }
+ *       }
+ *  }
+ * </pre>
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class SimpleProcess extends Process {
+
+    /**
+     * The target process.
+     */
+
+    private Process process;
+
+    /**
+     * The input stream that the processes' standard input will use.
+     */
+
+    private InputStream processInput;
+
+    /**
+     * The print stream to redirect to.
+     */
+
+    private PrintStream yourOutput;
+
+    /**
+     * The print stream to redirect to.
+     */
+
+    private PrintStream yourError;
+
+    /**
+     * The StreamPrinters.
+     */
+
+    private StreamPrinter in, out, error;
+
+    /**
+     * Constructs a SimpleProcess, redirecting System.in to the its standard
+     * input, System.out to its standard output, and System.err to its standard
+     * error.
+     */
+
+    public SimpleProcess( Process process ) throws IOException {
+	this( process, System.in, System.out, System.err );
+    }
+
+    /**
+     * Constructs a SimpleProcess, initializing it with the streams passed.
+     *
+     * @param process       The target process.
+     * @param processInput  The stream that is redirected to the
+     *                      processes' standard input.
+     * @param processOutput The stream to redirect the processes's
+     *                      standard output.
+     * @param processError  The stream to redirect the processes's
+     *                      standard input.
+     */
+
+    public SimpleProcess( Process process, InputStream processInput,
+			  PrintStream yourOutput, PrintStream yourError )
+                         throws IOException {
+	super();
+	this.process = process;
+	this.processInput = processInput;
+	this.yourOutput = yourOutput;
+	this.yourError = yourError;
+    }
+
+    /**
+     * Returns the standard input of this process.
+     *
+     * @return The standard input of this process.
+     */
+
+    public OutputStream getOutputStream() {
+	return process.getOutputStream();
+    }
+
+    /**
+     * Returns the standard output of this process.
+     *
+     * @return The standard output of this process.
+     */
+
+    public InputStream getInputStream() {
+	return process.getInputStream();
+    }
+
+    /**
+     * Returns the standard error of this process.
+     *
+     * @return The standard error of this process.
+     */
+
+    public InputStream getErrorStream() {
+	return process.getErrorStream();
+    }
+
+    /**
+     * Begin redirecting the streams passed. This method should be invoked
+     * immediately after execution of a simple process to prevent thread
+     * deadlock.
+     *
+     * @return The exit status of the target process.
+     */
+
+    public int waitFor() throws InterruptedException {
+	int retval = waitForImpl();
+	if ( in != null ) {
+	    in.stop();
+	}
+	return retval;
+    }
+
+    /**
+     * Contains the implementation of wait for.
+     *
+     * @return The exit status of the target process.
+     */
+
+    private int waitForImpl() throws InterruptedException {
+		in = new StreamPrinter( processInput,
+					new PrintStream( process.getOutputStream() ) );
+		in.setFlush( true );
+		out = new StreamPrinter( process.getInputStream(), yourOutput );
+		error = new StreamPrinter( process.getErrorStream(), yourError );
+		in.start();
+		out.start();
+		error.start();
+		out.join();
+		error.join();
+		return process.waitFor();
+    }
+
+    /**
+     * Returns the target processes' exit value.
+     *
+     * @return This processes' exit value.
+     */
+
+    public int exitValue() {
+	return process.exitValue();
+    }
+
+    /**
+     * Destroys the target process.
+     */
+
+    public void destroy() throws IllegalThreadStateException {
+	process.destroy();
+    }
+} /** SimpleProcess **/
diff --git a/src/java/gnu/dtools/ritopt/Stoppable.java b/src/java/gnu/dtools/ritopt/Stoppable.java
index bd24eef..89ba9ea 100644
--- a/src/java/gnu/dtools/ritopt/Stoppable.java
+++ b/src/java/gnu/dtools/ritopt/Stoppable.java
@@ -1,46 +1,46 @@
-package gnu.dtools.ritopt;
-
-/**
- * Implementors are capable of being stopped. This interface is used
- * by the StreamPrinters in the SimpleProcess class so that it if an
- * error has occurred.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public interface Stoppable {
-
-    /**
-     * Stop the implemetor from performing some sort of processing.
-     */
-
-    public void stop();
-
-    /**
-     * Returns whether the implementor has stopped.
-     *
-     * @return A boolean value.
-     */
-
-    public boolean isStopped();
-}
+package gnu.dtools.ritopt;
+
+/**
+ * Implementors are capable of being stopped. This interface is used
+ * by the StreamPrinters in the SimpleProcess class so that it if an
+ * error has occurred.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public interface Stoppable {
+
+    /**
+     * Stop the implemetor from performing some sort of processing.
+     */
+
+    public void stop();
+
+    /**
+     * Returns whether the implementor has stopped.
+     *
+     * @return A boolean value.
+     */
+
+    public boolean isStopped();
+}
diff --git a/src/java/gnu/dtools/ritopt/StreamPrinter.java b/src/java/gnu/dtools/ritopt/StreamPrinter.java
index 7399c83..311feb8 100644
--- a/src/java/gnu/dtools/ritopt/StreamPrinter.java
+++ b/src/java/gnu/dtools/ritopt/StreamPrinter.java
@@ -1,193 +1,193 @@
-package gnu.dtools.ritopt;
-
-/**
- * StreamPrinter.java
- *
- * Version:
- *   $Id$
- */
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintStream;
-
-/**
- * Reads data from an input stream and outputs to a print stream. This class
- * is used by the OptionMenu class to read from both standard output and
- * standard error simultaneously when a shell command is executed. Since the
- * StreamPrinter processes streams on a separate thread, deadlock is
- * prevented.<p>
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class StreamPrinter implements Runnable, Stoppable {
-
-    /**
-     * The input stream to read from.
-     */
-
-    private InputStream stream;
-
-    /**
-     * The print stream to redirect to.
-     */
-
-    private PrintStream out;
-
-    /**
-     * The object to stop.
-     */
-
-    private Stoppable stop;
-
-    /**
-     * Whether this StreamPrinter has stopped processing.
-     */
-
-    private boolean stopped;
-
-    /**
-     * Whether the buffer should be flushed.
-     */
-
-    private boolean flush;
-
-    /**
-     * The thread associated with this StreamPrinter.
-     */
-
-    private Thread thread;
-
-    /**
-     * Constructs a new StreamPrinter.
-     *
-     * @param s The stream to read from.
-     * @param p The stream to output to.
-     */
-
-    public StreamPrinter( InputStream s, PrintStream p ) {
-	stream = s;
-	out = p;
-	thread = new Thread( this );
-    }
-
-    /**
-     * Starts the thread associated with this StreamPrinter.
-     */
-
-    public void start() throws InterruptedException {
-	thread.start();
-    }
-
-    /**
-     * Sets the object to stop when this object is finished.
-     *
-     * @param tostop The object to stop.
-     */
-
-    public void setStop( Stoppable tostop ) {
-	synchronized( this ) {
-	    stop = tostop;
-	}
-    }
-
-    /**
-     * Returns whether this StreamPrinter has stopped processing.
-     *
-     * @returns A boolean value.
-     */
-
-    public boolean isStopped() {
-	return stopped;
-    }
-
-    /**
-     * Sets whether the output stream should be flushed after each output
-     * step.
-     *
-     * @param b A boolean value.
-     */
-
-    public void setFlush( boolean flush ) {
-	synchronized ( this ) {
-	    this.flush = flush;
-	}
-    }
-
-    /**
-     * Stops this StreamPrinter's processing. 
-     */
-
-    public void stop() {
-	synchronized( this ) {
-	    stopped = true;
-	}
-	if ( stop != null ) {
-	    synchronized( stop ) {
-		if ( !stop.isStopped() ) {
-		    stop.stop();
-		}
-	    }
-	}
-    }
-
-    /**
-     * Joins this StreamPrinter's thread with the other threads.
-     */
-
-    public void join() throws InterruptedException {
-	thread.join();
-    }
-
-    /**
-     * Start the StreamPrinter thread. This is done automatically during
-     * construction.
-     */
-
-    // This implementation is lousy; buffering is needed.
-    public void run() {
-	int buf;
-	try {
-	    boolean me;
-	    while ( !stopped && ( buf = stream.read() ) != -1 ) {
-		synchronized( this ) {
-		    me = flush;
-		}
-		synchronized( out ) {
-		    out.print( (char)buf );
-		    if ( me ) out.flush();
-		}
-	    }
-	}
-	catch ( IOException e ) {
-	    out.println( "I/O error" );
-	}
-	finally {
-	    synchronized( out ) {
-		out.flush();
-	    }
-	    stop();
-	}
-    }
-}
+package gnu.dtools.ritopt;
+
+/**
+ * StreamPrinter.java
+ *
+ * Version:
+ *   $Id$
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintStream;
+
+/**
+ * Reads data from an input stream and outputs to a print stream. This class
+ * is used by the OptionMenu class to read from both standard output and
+ * standard error simultaneously when a shell command is executed. Since the
+ * StreamPrinter processes streams on a separate thread, deadlock is
+ * prevented.<p>
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class StreamPrinter implements Runnable, Stoppable {
+
+    /**
+     * The input stream to read from.
+     */
+
+    private InputStream stream;
+
+    /**
+     * The print stream to redirect to.
+     */
+
+    private PrintStream out;
+
+    /**
+     * The object to stop.
+     */
+
+    private Stoppable stop;
+
+    /**
+     * Whether this StreamPrinter has stopped processing.
+     */
+
+    private boolean stopped;
+
+    /**
+     * Whether the buffer should be flushed.
+     */
+
+    private boolean flush;
+
+    /**
+     * The thread associated with this StreamPrinter.
+     */
+
+    private Thread thread;
+
+    /**
+     * Constructs a new StreamPrinter.
+     *
+     * @param s The stream to read from.
+     * @param p The stream to output to.
+     */
+
+    public StreamPrinter( InputStream s, PrintStream p ) {
+	stream = s;
+	out = p;
+	thread = new Thread( this );
+    }
+
+    /**
+     * Starts the thread associated with this StreamPrinter.
+     */
+
+    public void start() throws InterruptedException {
+	thread.start();
+    }
+
+    /**
+     * Sets the object to stop when this object is finished.
+     *
+     * @param tostop The object to stop.
+     */
+
+    public void setStop( Stoppable tostop ) {
+	synchronized( this ) {
+	    stop = tostop;
+	}
+    }
+
+    /**
+     * Returns whether this StreamPrinter has stopped processing.
+     *
+     * @returns A boolean value.
+     */
+
+    public boolean isStopped() {
+	return stopped;
+    }
+
+    /**
+     * Sets whether the output stream should be flushed after each output
+     * step.
+     *
+     * @param b A boolean value.
+     */
+
+    public void setFlush( boolean flush ) {
+	synchronized ( this ) {
+	    this.flush = flush;
+	}
+    }
+
+    /**
+     * Stops this StreamPrinter's processing. 
+     */
+
+    public void stop() {
+	synchronized( this ) {
+	    stopped = true;
+	}
+	if ( stop != null ) {
+	    synchronized( stop ) {
+		if ( !stop.isStopped() ) {
+		    stop.stop();
+		}
+	    }
+	}
+    }
+
+    /**
+     * Joins this StreamPrinter's thread with the other threads.
+     */
+
+    public void join() throws InterruptedException {
+	thread.join();
+    }
+
+    /**
+     * Start the StreamPrinter thread. This is done automatically during
+     * construction.
+     */
+
+    // This implementation is lousy; buffering is needed.
+    public void run() {
+	int buf;
+	try {
+	    boolean me;
+	    while ( !stopped && ( buf = stream.read() ) != -1 ) {
+		synchronized( this ) {
+		    me = flush;
+		}
+		synchronized( out ) {
+		    out.print( (char)buf );
+		    if ( me ) out.flush();
+		}
+	    }
+	}
+	catch ( IOException e ) {
+	    out.println( "I/O error" );
+	}
+	finally {
+	    synchronized( out ) {
+		out.flush();
+	    }
+	    stop();
+	}
+    }
+}
diff --git a/src/java/gnu/dtools/ritopt/StringOption.java b/src/java/gnu/dtools/ritopt/StringOption.java
index a9d1dbb..9c93f43 100644
--- a/src/java/gnu/dtools/ritopt/StringOption.java
+++ b/src/java/gnu/dtools/ritopt/StringOption.java
@@ -1,184 +1,184 @@
-package gnu.dtools.ritopt;
-
-/**
- * StringOption.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * This class is used for options with String values. 
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class StringOption extends Option {
-
-    /**
-     * The value of this string option.
-     */
-
-    private String value = "";
-
-    /**
-     * Constructs a string option that is initially set to zero.
-     */
-
-    public StringOption() {
-	this( "" );
-    }
-
-    /**
-     * Constructs a string option by copying the string option passed.
-     *
-     * @param op     The character option to copy.
-     */
-
-    public StringOption( StringOption op ) {
-	super( op );
-	op.value = op.getValue();
-    }
-
-    /**
-     * Constructs a string option initialized with the value passed.
-     *
-     * @param value    The initial value of this string option.
-     */
-
-    public StringOption( String value ) {
-	this( value, null );
-    }
-
-    /**
-     * Constructs a string option initialized with the value and
-     * long option passed.
-     *
-     * @param value      The initial value of this string option.
-     * @param longOption The long option associated with string option.
-     */
-
-    public StringOption( String value, String longOption ) {
-	this( value, longOption, '\0' );
-    }
-
-    /**
-     * Constructs a character option initialized with the value and
-     * short option passed.
-     *
-     * @param value       The initial value of this string option.
-     * @param shortOption The short option associated with this option.
-     */
-
-    public StringOption( String value, char shortOption ) {
-	this( value, null, shortOption );
-    }
-
-    /**
-     * Constructs a string option initialized with the value, short
-     * and long option passed.
-     *
-     * @param shortOption The short option associated with this option.
-     * @param longOption  The long option associated with this option.
-     * @param value       The initial value of this string option.
-     */
-
-    public StringOption( String value, String longOption, char shortOption ) {
-	super( longOption, shortOption );
-	this.value = value;
-    }
-
-    /**
-     * Return the value as an object.
-     *
-     * @return This value as an option.
-     */
-
-    public Object getObject() {
-	return value;
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void modify( String value ) throws OptionModificationException {
-	this.value = value;
-    }
-
-    /**
-     * Modify this option based on a string representation.
-     *
-     * @param     value String representation of the object.
-     * @exception OptionModificationException Thrown if an error occurs
-     *                                  during modification of an option.
-     */
-
-    public void setValue( String value ) throws OptionModificationException {
-	modify( value );
-    }
-
-    /**
-     * Modify this option using a string value.
-     *
-     * @param     value A string value.
-     */
-
-    public String getValue() {
-	return value;
-    }
-
-    /**
-     * Return this option as a string.
-     *
-     * @return This option as a string.
-     */
-
-    public String getStringValue() {
-	return value;
-    }
-
-    /**
-     * Returns the type name of this option. For an StringOption, "STRING"
-     * is returned.
-     *
-     * @return The type name of this option.
-     */
-
-    public String getTypeName() {
-	return "STRING";
-    }
-
-    /**
-     * Returns a string representation of this object.
-     *
-     * @return A string representation of this object.
-     */
-
-    public String toString() {
-	return value;
-    }
-
-}
+package gnu.dtools.ritopt;
+
+/**
+ * StringOption.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * This class is used for options with String values. 
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class StringOption extends Option {
+
+    /**
+     * The value of this string option.
+     */
+
+    private String value = "";
+
+    /**
+     * Constructs a string option that is initially set to zero.
+     */
+
+    public StringOption() {
+	this( "" );
+    }
+
+    /**
+     * Constructs a string option by copying the string option passed.
+     *
+     * @param op     The character option to copy.
+     */
+
+    public StringOption( StringOption op ) {
+	super( op );
+	op.value = op.getValue();
+    }
+
+    /**
+     * Constructs a string option initialized with the value passed.
+     *
+     * @param value    The initial value of this string option.
+     */
+
+    public StringOption( String value ) {
+	this( value, null );
+    }
+
+    /**
+     * Constructs a string option initialized with the value and
+     * long option passed.
+     *
+     * @param value      The initial value of this string option.
+     * @param longOption The long option associated with string option.
+     */
+
+    public StringOption( String value, String longOption ) {
+	this( value, longOption, '\0' );
+    }
+
+    /**
+     * Constructs a character option initialized with the value and
+     * short option passed.
+     *
+     * @param value       The initial value of this string option.
+     * @param shortOption The short option associated with this option.
+     */
+
+    public StringOption( String value, char shortOption ) {
+	this( value, null, shortOption );
+    }
+
+    /**
+     * Constructs a string option initialized with the value, short
+     * and long option passed.
+     *
+     * @param shortOption The short option associated with this option.
+     * @param longOption  The long option associated with this option.
+     * @param value       The initial value of this string option.
+     */
+
+    public StringOption( String value, String longOption, char shortOption ) {
+	super( longOption, shortOption );
+	this.value = value;
+    }
+
+    /**
+     * Return the value as an object.
+     *
+     * @return This value as an option.
+     */
+
+    public Object getObject() {
+	return value;
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void modify( String value ) throws OptionModificationException {
+	this.value = value;
+    }
+
+    /**
+     * Modify this option based on a string representation.
+     *
+     * @param     value String representation of the object.
+     * @exception OptionModificationException Thrown if an error occurs
+     *                                  during modification of an option.
+     */
+
+    public void setValue( String value ) throws OptionModificationException {
+	modify( value );
+    }
+
+    /**
+     * Modify this option using a string value.
+     *
+     * @param     value A string value.
+     */
+
+    public String getValue() {
+	return value;
+    }
+
+    /**
+     * Return this option as a string.
+     *
+     * @return This option as a string.
+     */
+
+    public String getStringValue() {
+	return value;
+    }
+
+    /**
+     * Returns the type name of this option. For an StringOption, "STRING"
+     * is returned.
+     *
+     * @return The type name of this option.
+     */
+
+    public String getTypeName() {
+	return "STRING";
+    }
+
+    /**
+     * Returns a string representation of this object.
+     *
+     * @return A string representation of this object.
+     */
+
+    public String toString() {
+	return value;
+    }
+
+}
diff --git a/src/java/gnu/dtools/ritopt/Utility.java b/src/java/gnu/dtools/ritopt/Utility.java
index f58cd6d..efc9c81 100644
--- a/src/java/gnu/dtools/ritopt/Utility.java
+++ b/src/java/gnu/dtools/ritopt/Utility.java
@@ -1,339 +1,339 @@
-package gnu.dtools.ritopt;
-
-/**
- * Utility.java
- *
- * Version:
- *    $Id$
- */
-
-/**
- * This class provides static utility members for some basic string operations.
- *
- * <hr>
- *
- * <pre>
- * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
- *
- * ritopt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
-
- * ritopt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with ritopt; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * </pre>
- *
- * @author Damian Eads
- */
-
-public class Utility {
-
-    /**
-     * Returns true if any of the characters in the list appear in the
-     * check string passed.
-     *
-     * @param check The string to check.
-     * @param list  The list of valid characters.
-     *
-     * @return true if the criteria of this method is satisfied.
-     */
-
-    public static boolean contains( String check, String list ) {
-	for ( int n = 0; n < list.length(); n++ ) {
-	    if ( check.indexOf( list.substring( n, n + 1 ) ) != -1 )
-		return true;
-	}
-	return false;
-    }
-
-    /**
-     * Returns the number of occurances the character specification
-     * appears in the check string passed.
-     *
-     * @param check The string to check.
-     * @param spec  The character specification.
-     *
-     * @return the number of occurances of the character specification.
-     */
-
-    public static int count( String check, char spec ) {
-        int sum = 0;
-	for ( int n = 0; n < check.length(); n++ ) {
-	    if ( check.charAt( 0 ) == spec ) sum++;
-	}
-	return sum;
-    }
-
-    /**
-     * Returns true if any of the characters in the list are equal to
-     * the check character.
-     *
-     * @param check The character to check.
-     * @param list  The list of valid characters.
-     *
-     * @return true if any of the characters in the list equal the check
-     *              character. 
-     */
-
-    public static boolean contains( char check, String list ) {
-	return contains( "" + check, list );
-    }
-
-    /**
-     * Returns true if the string only contains letters in the phonetic
-     * alphabet.
-     *
-     * @param check The string to check.
-     *
-     * @return If this method's criteria is matched.
-     */
-
-    public static boolean isAlpha( String check ) {
-	boolean retval = false;
-	for ( int n = 0; n < check.length(); n++ ) {
-	    retval = isAlphaLower( check.charAt( n ) ) ||
-		isAlphaUpper( check.charAt( n ) );
-	}
-	return retval;
-    }
-
-    /**
-     * Returns true if the string only contains lower case letters in the
-     * phonetic alphabet.
-     *
-     * @param check The string to check.
-     *
-     * @return If this method's criteria is matched.
-     */
-
-    public static boolean isAlphaLower( String check ) {
-	boolean retval = false;
-	for ( int n = 0; n < check.length(); n++ ) {
-	    retval = isAlphaLower( check.charAt( n ) );
-	}
-	return retval;
-    }
-
-    /**
-     * Returns true if the string only contains upper case letters in the
-     * phonetic alphabet.
-     *
-     * @param check The string to check.
-     *
-     * @return If this method's criteria is matched.
-     */
-
-    public static boolean isAlphaUpper( String check ) {
-	boolean retval = false;
-	for ( int n = 0; n < check.length(); n++ ) {
-	    retval = isAlphaUpper( check.charAt( n ) );
-	}
-	return retval;
-    }
-
-    /**
-     * Returns true if the character is a letter in the phonetic alphabetic.
-     *
-     * @param check The character to check.
-     *
-     * @return true if this method's criteria is matched.
-     */
-
-    public static boolean isAlpha( char check ) {
-	return isAlphaLower( check ) || isAlphaUpper( check );
-    }
-
-    /**
-     * Returns true if the character is a lower case letter in the
-     * phonetic alphabetic.
-     *
-     * @param check The character to check.
-     *
-     * @return true if this method's criteria is matched.
-     */
-
-    public static boolean isAlphaLower( char check ) {
-	return check >= 'a' && check <= 'z';
-    }
-
-    /**
-     * Returns true if the character is a upper case letter in the
-     * phonetic alphabetic.
-     *
-     * @param check The character to check.
-     *
-     * @return true if this method's criteria is matched.
-     */
-
-    public static boolean isAlphaUpper( char check ) {
-	return check >= 'A' && check <= 'Z';
-    }
-
-    /**
-     * Returns true if the character is a letter in the phonetic alphabetic
-     * or is a decimal number.
-     *
-     * @param check The character to check.
-     *
-     * @return true if this method's criteria is matched.
-     */
-
-    public static boolean isAlphaNumeric( char check ) {
-	return isAlpha( check ) || isNumeric( check );
-    }
-
-    /**
-     * Returns true if the character is a decimal number.
-     *
-     * @param check The character to check.
-     *
-     * @return true if this method's criteria is matched.
-     */
-
-    public static boolean isNumeric( char check ) {
-	return check >= '0' && check <= '9'; 
-    }
-
-    /**
-     * Returns a string with no more and no less than <em>n</em> characters
-     * where n is the length. If the string passed is less than this length,
-     * an appropriate number of spaces is concatenated. If the string is
-     * longer than the length passed, a substring of the length passed
-     * is returned.
-     *
-     * @param s       The string to expand.
-     * @param length  The required length.
-     *
-     * @return The expanded string.
-     */
-
-    public static String expandString( String s, int length ) {
-	if ( s.length() > length ) s = s.substring( 0, length );
-	return s + getSpaces( length - s.length() );
-    }
-
-    /**
-     * Returns a string containing the number of spaces passed as an
-     * argument.
-     *
-     * @param count The number of spaces in the string returned.
-     *
-     * @return a string containing the number of spaces passed.
-     */
-
-    public static String getSpaces( int count ) {
-	return repeat( ' ', count );
-    }
-
-    /**
-     * Returns a string with a character repeated based on a count passed.
-     *
-     * @param c     The character to repeat.
-     * @param count The number of times to repeat the character.
-     */
-
-    public static String repeat( char c, int count ) {
-	StringBuffer retval = new StringBuffer( count );
-	for ( int n = 0; n < count; n++ ) {
-	    retval.append( c );
-	}
-	return retval.toString();
-    }
-
-    /**
-     * Trim spaces off the left side of this string.
-     *
-     * @param s The string to trim.
-     *
-     * @return  The trimmed string.
-     */
-
-    public static String ltrim( String s ) {
-	StringBuffer buf = new StringBuffer( s );
-	for ( int n = 0; n < buf.length() && buf.charAt( n ) == ' '; ) {
-	    buf.delete( 0, 1 );
-	}
-	return buf.toString();
-    }
-
-    /**
-     * Trim spaces off the right side of this string.
-     *
-     * @param s The string to trim.
-     *
-     * @return  The trimmed string.
-     */
-
-    public static String rtrim( String s ) {
-	StringBuffer buf = new StringBuffer( s );
-	for ( int k = buf.length() - 1; k >= 0 && buf.charAt( k ) == ' ';
-	      k = buf.length() - 1 ) {
-	    buf.delete( buf.length() - 1, buf.length() );
-	}
-	return buf.toString();
-    }
-
-    /**
-     * Trim spaces off both sides of this string.
-     *
-     * @param s The string to trim.
-     *
-     * @return  The trimmed string.
-     */
-
-    public static String trim( String s ) {
-	return ltrim( rtrim( s ) );
-    }
-
-    /**
-     * Takes a line (presumably from a file) and removes a comment if
-     * one exists. If the comment character is enclosed within a literal
-     * string defined by the delimiter passed, then the character is
-     * ignored.
-     *
-     * @param s         The string to strip comments off.
-     * @param delim     The string delimiter.
-     * @param comment   The comment character.
-     *
-     * @return A string stripped of comments.
-     */
-
-    public static String stripComments( String s, char delim, char comment ) {
-	String retval = s;
-	boolean q = false;
-	for ( int n = 0; n < s.length(); n++ ) {
-	    if ( s.charAt( n ) == delim ) {
-		q = !q;
-	    }
-	    else if ( !q && s.charAt( n ) == comment ) {
-		retval = s.substring( 0, n );
-	    }
-	}
-	return retval;
-    }
-
-    /**
-     * Returns a string with the passed string repeated based on the 
-     * integer count passed.
-     *
-     * @param s     The string to repeat.
-     * @param count The number of times to repeat the string.
-     *
-     * @return      The repeated string.
-     */
-
-    public static String repeat( String s, int count ) {
-	StringBuffer retval = new StringBuffer( s.length() * count );
-	for ( int n = 0; n < count; n++ ) {
-	    retval.append( s );
-	}
-	return retval.toString();
-    }
-}
+package gnu.dtools.ritopt;
+
+/**
+ * Utility.java
+ *
+ * Version:
+ *    $Id$
+ */
+
+/**
+ * This class provides static utility members for some basic string operations.
+ *
+ * <hr>
+ *
+ * <pre>
+ * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
+ *
+ * ritopt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * ritopt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ritopt; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * </pre>
+ *
+ * @author Damian Eads
+ */
+
+public class Utility {
+
+    /**
+     * Returns true if any of the characters in the list appear in the
+     * check string passed.
+     *
+     * @param check The string to check.
+     * @param list  The list of valid characters.
+     *
+     * @return true if the criteria of this method is satisfied.
+     */
+
+    public static boolean contains( String check, String list ) {
+	for ( int n = 0; n < list.length(); n++ ) {
+	    if ( check.indexOf( list.substring( n, n + 1 ) ) != -1 )
+		return true;
+	}
+	return false;
+    }
+
+    /**
+     * Returns the number of occurances the character specification
+     * appears in the check string passed.
+     *
+     * @param check The string to check.
+     * @param spec  The character specification.
+     *
+     * @return the number of occurances of the character specification.
+     */
+
+    public static int count( String check, char spec ) {
+        int sum = 0;
+	for ( int n = 0; n < check.length(); n++ ) {
+	    if ( check.charAt( 0 ) == spec ) sum++;
+	}
+	return sum;
+    }
+
+    /**
+     * Returns true if any of the characters in the list are equal to
+     * the check character.
+     *
+     * @param check The character to check.
+     * @param list  The list of valid characters.
+     *
+     * @return true if any of the characters in the list equal the check
+     *              character. 
+     */
+
+    public static boolean contains( char check, String list ) {
+	return contains( "" + check, list );
+    }
+
+    /**
+     * Returns true if the string only contains letters in the phonetic
+     * alphabet.
+     *
+     * @param check The string to check.
+     *
+     * @return If this method's criteria is matched.
+     */
+
+    public static boolean isAlpha( String check ) {
+	boolean retval = false;
+	for ( int n = 0; n < check.length(); n++ ) {
+	    retval = isAlphaLower( check.charAt( n ) ) ||
+		isAlphaUpper( check.charAt( n ) );
+	}
+	return retval;
+    }
+
+    /**
+     * Returns true if the string only contains lower case letters in the
+     * phonetic alphabet.
+     *
+     * @param check The string to check.
+     *
+     * @return If this method's criteria is matched.
+     */
+
+    public static boolean isAlphaLower( String check ) {
+	boolean retval = false;
+	for ( int n = 0; n < check.length(); n++ ) {
+	    retval = isAlphaLower( check.charAt( n ) );
+	}
+	return retval;
+    }
+
+    /**
+     * Returns true if the string only contains upper case letters in the
+     * phonetic alphabet.
+     *
+     * @param check The string to check.
+     *
+     * @return If this method's criteria is matched.
+     */
+
+    public static boolean isAlphaUpper( String check ) {
+	boolean retval = false;
+	for ( int n = 0; n < check.length(); n++ ) {
+	    retval = isAlphaUpper( check.charAt( n ) );
+	}
+	return retval;
+    }
+
+    /**
+     * Returns true if the character is a letter in the phonetic alphabetic.
+     *
+     * @param check The character to check.
+     *
+     * @return true if this method's criteria is matched.
+     */
+
+    public static boolean isAlpha( char check ) {
+	return isAlphaLower( check ) || isAlphaUpper( check );
+    }
+
+    /**
+     * Returns true if the character is a lower case letter in the
+     * phonetic alphabetic.
+     *
+     * @param check The character to check.
+     *
+     * @return true if this method's criteria is matched.
+     */
+
+    public static boolean isAlphaLower( char check ) {
+	return check >= 'a' && check <= 'z';
+    }
+
+    /**
+     * Returns true if the character is a upper case letter in the
+     * phonetic alphabetic.
+     *
+     * @param check The character to check.
+     *
+     * @return true if this method's criteria is matched.
+     */
+
+    public static boolean isAlphaUpper( char check ) {
+	return check >= 'A' && check <= 'Z';
+    }
+
+    /**
+     * Returns true if the character is a letter in the phonetic alphabetic
+     * or is a decimal number.
+     *
+     * @param check The character to check.
+     *
+     * @return true if this method's criteria is matched.
+     */
+
+    public static boolean isAlphaNumeric( char check ) {
+	return isAlpha( check ) || isNumeric( check );
+    }
+
+    /**
+     * Returns true if the character is a decimal number.
+     *
+     * @param check The character to check.
+     *
+     * @return true if this method's criteria is matched.
+     */
+
+    public static boolean isNumeric( char check ) {
+	return check >= '0' && check <= '9'; 
+    }
+
+    /**
+     * Returns a string with no more and no less than <em>n</em> characters
+     * where n is the length. If the string passed is less than this length,
+     * an appropriate number of spaces is concatenated. If the string is
+     * longer than the length passed, a substring of the length passed
+     * is returned.
+     *
+     * @param s       The string to expand.
+     * @param length  The required length.
+     *
+     * @return The expanded string.
+     */
+
+    public static String expandString( String s, int length ) {
+	if ( s.length() > length ) s = s.substring( 0, length );
+	return s + getSpaces( length - s.length() );
+    }
+
+    /**
+     * Returns a string containing the number of spaces passed as an
+     * argument.
+     *
+     * @param count The number of spaces in the string returned.
+     *
+     * @return a string containing the number of spaces passed.
+     */
+
+    public static String getSpaces( int count ) {
+	return repeat( ' ', count );
+    }
+
+    /**
+     * Returns a string with a character repeated based on a count passed.
+     *
+     * @param c     The character to repeat.
+     * @param count The number of times to repeat the character.
+     */
+
+    public static String repeat( char c, int count ) {
+	StringBuffer retval = new StringBuffer( count );
+	for ( int n = 0; n < count; n++ ) {
+	    retval.append( c );
+	}
+	return retval.toString();
+    }
+
+    /**
+     * Trim spaces off the left side of this string.
+     *
+     * @param s The string to trim.
+     *
+     * @return  The trimmed string.
+     */
+
+    public static String ltrim( String s ) {
+	StringBuffer buf = new StringBuffer( s );
+	for ( int n = 0; n < buf.length() && buf.charAt( n ) == ' '; ) {
+	    buf.delete( 0, 1 );
+	}
+	return buf.toString();
+    }
+
+    /**
+     * Trim spaces off the right side of this string.
+     *
+     * @param s The string to trim.
+     *
+     * @return  The trimmed string.
+     */
+
+    public static String rtrim( String s ) {
+	StringBuffer buf = new StringBuffer( s );
+	for ( int k = buf.length() - 1; k >= 0 && buf.charAt( k ) == ' ';
+	      k = buf.length() - 1 ) {
+	    buf.delete( buf.length() - 1, buf.length() );
+	}
+	return buf.toString();
+    }
+
+    /**
+     * Trim spaces off both sides of this string.
+     *
+     * @param s The string to trim.
+     *
+     * @return  The trimmed string.
+     */
+
+    public static String trim( String s ) {
+	return ltrim( rtrim( s ) );
+    }
+
+    /**
+     * Takes a line (presumably from a file) and removes a comment if
+     * one exists. If the comment character is enclosed within a literal
+     * string defined by the delimiter passed, then the character is
+     * ignored.
+     *
+     * @param s         The string to strip comments off.
+     * @param delim     The string delimiter.
+     * @param comment   The comment character.
+     *
+     * @return A string stripped of comments.
+     */
+
+    public static String stripComments( String s, char delim, char comment ) {
+	String retval = s;
+	boolean q = false;
+	for ( int n = 0; n < s.length(); n++ ) {
+	    if ( s.charAt( n ) == delim ) {
+		q = !q;
+	    }
+	    else if ( !q && s.charAt( n ) == comment ) {
+		retval = s.substring( 0, n );
+	    }
+	}
+	return retval;
+    }
+
+    /**
+     * Returns a string with the passed string repeated based on the 
+     * integer count passed.
+     *
+     * @param s     The string to repeat.
+     * @param count The number of times to repeat the string.
+     *
+     * @return      The repeated string.
+     */
+
+    public static String repeat( String s, int count ) {
+	StringBuffer retval = new StringBuffer( s.length() * count );
+	for ( int n = 0; n < count; n++ ) {
+	    retval.append( s );
+	}
+	return retval.toString();
+    }
+}
diff --git a/src/java/jalopy.format.convention.xml b/src/java/jalopy.format.convention.xml
old mode 100755
new mode 100644
index 11a5b47..78d411e
--- a/src/java/jalopy.format.convention.xml
+++ b/src/java/jalopy.format.convention.xml
@@ -1,406 +1,406 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<jalopy>
-    <general>
-        <compliance>
-            <version>1</version>
-        </compliance>
-        <style>
-            <description>Jalopy convention definitions for the JabRef project</description>
-            <name>JabRef convention</name>
-        </style>
-    </general>
-    <inspector>
-        <enable>false</enable>
-        <naming>
-            <classes>
-                <abstract>[A-Z][a-zA-Z0-9]+</abstract>
-                <general>[A-Z][a-zA-Z0-9]+</general>
-            </classes>
-            <fields>
-                <default>[a-z][\w]+</default>
-                <defaultStatic>[a-z][\w]+</defaultStatic>
-                <defaultStaticFinal>[a-zA-Z][\w]+</defaultStaticFinal>
-                <private>[a-z][\w]+</private>
-                <privateStatic>[a-z][\w]+</privateStatic>
-                <privateStaticFinal>[a-zA-Z][\w]+</privateStaticFinal>
-                <protected>[a-z][\w]+</protected>
-                <protectedStatic>[a-z][\w]+</protectedStatic>
-                <protectedStaticFinal>[a-zA-Z][\w]+</protectedStaticFinal>
-                <public>[a-z][\w]+</public>
-                <publicStatic>[a-z][\w]+</publicStatic>
-                <publicStaticFinal>[a-zA-Z][\w]+</publicStaticFinal>
-            </fields>
-            <interfaces>[A-Z][a-zA-Z0-9]+</interfaces>
-            <labels>\w+</labels>
-            <methods>
-                <default>[a-z][\w]+</default>
-                <defaultStatic>[a-z][\w]+</defaultStatic>
-                <defaultStaticFinal>[a-z][\w]+</defaultStaticFinal>
-                <private>[a-z][\w]+</private>
-                <privateStatic>[a-z][\w]+</privateStatic>
-                <privateStaticFinal>[a-z][\w]+</privateStaticFinal>
-                <protected>[a-z][\w]+</protected>
-                <protectedStatic>[a-z][\w]+</protectedStatic>
-                <protectedStaticFinal>[a-z][\w]+</protectedStaticFinal>
-                <public>[a-z][\w]+</public>
-                <publicStatic>[a-z][\w]+</publicStatic>
-                <publicStaticFinal>[a-z][\w]+</publicStaticFinal>
-            </methods>
-            <packages>[a-z]+(?:\.[a-z]+)*</packages>
-            <parameters>
-                <default>[a-z][\w]+</default>
-                <final>[a-z][\w]+</final>
-            </parameters>
-            <variables>[a-z][\w]*</variables>
-        </naming>
-        <tips>
-            <adhereToNamingConvention>false</adhereToNamingConvention>
-            <alwaysOverrideEquals>false</alwaysOverrideEquals>
-            <alwaysOverrideHashCode>false</alwaysOverrideHashCode>
-            <avoidThreadGroups>false</avoidThreadGroups>
-            <declareCollectionComment>false</declareCollectionComment>
-            <dontIgnoreExceptions>false</dontIgnoreExceptions>
-            <dontSubstituteObjectEquals>false</dontSubstituteObjectEquals>
-            <neverDeclareException>false</neverDeclareException>
-            <neverDeclareThrowable>false</neverDeclareThrowable>
-            <neverInvokeWaitOutsideLoop>false</neverInvokeWaitOutsideLoop>
-            <neverReturnZeroArrays>false</neverReturnZeroArrays>
-            <neverUseEmptyFinally>false</neverUseEmptyFinally>
-            <obeyContractEquals>false</obeyContractEquals>
-            <overrideToString>false</overrideToString>
-            <referToObjectsByInterface>false</referToObjectsByInterface>
-            <replaceStructureWithClass>false</replaceStructureWithClass>
-            <stringLiterallI18n>false</stringLiterallI18n>
-            <useInterfaceOnlyForTypes>false</useInterfaceOnlyForTypes>
-            <wrongCollectionComment>false</wrongCollectionComment>
-        </tips>
-    </inspector>
-    <internal>
-        <version>6</version>
-    </internal>
-    <messages>
-        <priority>
-            <general>30000</general>
-            <parser>30000</parser>
-            <parserJavadoc>30000</parserJavadoc>
-            <printer>30000</printer>
-            <printerJavadoc>30000</printerJavadoc>
-            <transform>30000</transform>
-        </priority>
-        <showErrorStackTrace>true</showErrorStackTrace>
-    </messages>
-    <misc>
-        <threadCount>1</threadCount>
-    </misc>
-    <printer>
-        <alignment>
-            <methodCallChain>true</methodCallChain>
-            <parameterMethodDeclaration>false</parameterMethodDeclaration>
-            <ternaryOperator>true</ternaryOperator>
-            <variableAssignment>false</variableAssignment>
-            <variableIdentifier>false</variableIdentifier>
-        </alignment>
-        <backup>
-            <directory>bak</directory>
-            <level>0</level>
-        </backup>
-        <blanklines>
-            <after>
-                <block>1</block>
-                <braceLeft>0</braceLeft>
-                <class>1</class>
-                <declaration>0</declaration>
-                <footer>1</footer>
-                <header>0</header>
-                <interface>1</interface>
-                <lastImport>2</lastImport>
-                <method>1</method>
-                <package>1</package>
-            </after>
-            <before>
-                <block>1</block>
-                <braceRight>0</braceRight>
-                <caseBlock>1</caseBlock>
-                <comment>
-                    <javadoc>1</javadoc>
-                    <multiline>1</multiline>
-                    <singleline>1</singleline>
-                </comment>
-                <controlStatement>1</controlStatement>
-                <declaration>1</declaration>
-                <footer>0</footer>
-                <header>0</header>
-            </before>
-            <keepUpTo>1</keepUpTo>
-        </blanklines>
-        <braces>
-            <empty>
-                <cuddle>false</cuddle>
-                <insertStatement>false</insertStatement>
-            </empty>
-            <insert>
-                <dowhile>true</dowhile>
-                <for>true</for>
-                <ifelse>true</ifelse>
-                <while>true</while>
-            </insert>
-            <remove>
-                <block>true</block>
-                <dowhile>false</dowhile>
-                <for>false</for>
-                <ifelse>false</ifelse>
-                <while>false</while>
-            </remove>
-            <treatDifferent>
-                <methodClass>false</methodClass>
-                <methodClassIfWrapped>false</methodClassIfWrapped>
-            </treatDifferent>
-        </braces>
-        <chunks>
-            <blanklines>true</blanklines>
-            <comments>true</comments>
-        </chunks>
-        <comments>
-            <format>
-                <multiline>false</multiline>
-            </format>
-            <javadoc>
-                <check>
-                    <innerclass>false</innerclass>
-                    <tags>false</tags>
-                    <throwsTags>false</throwsTags>
-                </check>
-                <fieldsShort>true</fieldsShort>
-                <generate>
-                    <class>1</class>
-                    <constructor>0</constructor>
-                    <field>0</field>
-                    <method>0</method>
-                </generate>
-                <parseComments>false</parseComments>
-                <tags>
-                    <in-line />
-                    <standard />
-                </tags>
-                <templates>
-                    <method>
-                        <bottom> */</bottom>
-                        <exception> * @throws $exceptionType$ DOCUMENT ME!</exception>
-                        <param> * @param $paramType$ DOCUMENT ME!</param>
-                        <return> * @return DOCUMENT ME!</return>
-                        <top>/**| * DOCUMENT ME!</top>
-                    </method>
-                </templates>
-            </javadoc>
-            <remove>
-                <javadoc>false</javadoc>
-                <multiline>false</multiline>
-                <singleline>false</singleline>
-            </remove>
-            <separator>
-                <fillCharacter>/</fillCharacter>
-                <insert>true</insert>
-                <insertRecursive>false</insertRecursive>
-                <text>
-                    <class>Inner Classes</class>
-                    <constructor>Constructors</constructor>
-                    <field>Instance fields</field>
-                    <initializer>Instance initializers</initializer>
-                    <interface>Inner Interfaces</interface>
-                    <method>Methods</method>
-                    <static>Static fields/initializers</static>
-                </text>
-            </separator>
-        </comments>
-        <environment />
-        <footer>
-            <keys />
-            <smartMode>5</smartMode>
-            <text>///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////</text>
-            <use>true</use>
-        </footer>
-
-        <!-- header should not used, because there are some LGPL sources and other authors -->
-        <header>
-            <keys>JOELib header</keys>
-            <smartMode>5</smartMode>
-			<text>///////////////////////////////////////////////////////////////////////////////
-//  Filename: $RCSfile$
-//  Language: Java
-//  Compiler: JDK 1.4
-//  Version:  $Revision$
-//            $Date$
-//            $Author$
-//
-//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
-//
-//  This program is free software; 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.
-///////////////////////////////////////////////////////////////////////////////</text>
-            <use>false</use>
-        </header>
-        <history>
-            <policy>disabled</policy>
-        </history>
-        <imports>
-            <grouping>
-                <defaultDepth>3</defaultDepth>
-                <packages>*:0|gnu:2|java:2|javax:2|org:2|com:2|net:2</packages>
-            </grouping>
-            <policy>disabled</policy>
-            <sort>true</sort>
-        </imports>
-
-        <indentation>
-            <caseFromSwitch>false</caseFromSwitch>
-            <continuation>
-                <block>true</block>
-                <operator>false</operator>
-            </continuation>
-            <firstColumnComments>true</firstColumnComments>
-            <label>false</label>
-            <policy>
-                <deep>false</deep>
-            </policy>
-            <sizes>
-                <braceCuddled>1</braceCuddled>
-                <braceLeft>0</braceLeft>
-                <braceRight>0</braceRight>
-                <braceRightAfter>1</braceRightAfter>
-                <continuation>4</continuation>
-                <deep>55</deep>
-                <extends>-1</extends>
-                <general>4</general>
-                <implements>-1</implements>
-                <leading>0</leading>
-                <tabs>8</tabs>
-                <throws>-1</throws>
-                <trailingComment>1</trailingComment>
-            </sizes>
-            <tabs>
-                <enable>false</enable>
-                <onlyLeading>false</onlyLeading>
-            </tabs>
-        </indentation>
-        <misc>
-            <arrayBracketsAfterIdent>false</arrayBracketsAfterIdent>
-            <forceFormatting>false</forceFormatting>
-            <insertExpressionParentheses>true</insertExpressionParentheses>
-            <insertLoggingConditional>true</insertLoggingConditional>
-            <insertTrailingNewline>true</insertTrailingNewline>
-            <insertUID>false</insertUID>
-        </misc>
-        <sorting>
-            <declaration>
-                <class>true</class>
-                <constructor>true</constructor>
-                <enable>true</enable>
-                <interface>true</interface>
-                <method>true</method>
-                <order>static|field|initializer|constructor|method|interface|class</order>
-                <variable>true</variable>
-            </declaration>
-            <modifier>
-                <enable>false</enable>
-                <order>public|protected|private|abstract|static|final|synchronized|transient|volatile|native|strictfp</order>
-            </modifier>
-        </sorting>
-
-        <whitespace>
-            <after>
-                <comma>true</comma>
-                <semicolon>true</semicolon>
-                <typeCast>true</typeCast>
-            </after>
-            <before>
-                <braces>false</braces>
-                <brackets>false</brackets>
-                <bracketsTypes>false</bracketsTypes>
-                <caseColon>false</caseColon>
-                <operator>
-                    <not>false</not>
-                </operator>
-                <parentheses>
-                    <methodCall>false</methodCall>
-                    <methodDeclaration>false</methodDeclaration>
-                    <statement>true</statement>
-                </parentheses>
-            </before>
-            <padding>
-                <braces>false</braces>
-                <brackets>false</brackets>
-                <operator>
-                    <assignment>true</assignment>
-                    <bitwise>true</bitwise>
-                    <logical>true</logical>
-                    <mathematical>true</mathematical>
-                    <relational>true</relational>
-                    <shift>true</shift>
-                </operator>
-                <parenthesis>false</parenthesis>
-                <typeCast>false</typeCast>
-            </padding>
-        </whitespace>
-        <wrapping>
-            <always>
-                <after>
-                    <arrayElement>0</arrayElement>
-                    <braceRight>true</braceRight>
-                    <extendsTypes>false</extendsTypes>
-                    <implementsTypes>false</implementsTypes>
-                    <label>true</label>
-                    <methodCallChained>false</methodCallChained>
-                    <ternaryOperator>
-                        <first>false</first>
-                        <second>false</second>
-                    </ternaryOperator>
-                    <throwsTypes>false</throwsTypes>
-                </after>
-                <before>
-                    <braceLeft>true</braceLeft>
-                    <extends>false</extends>
-                    <implements>false</implements>
-                    <throws>false</throws>
-                </before>
-                <parameter>
-                    <methodCall>false</methodCall>
-                    <methodCallNested>false</methodCallNested>
-                    <methodDeclaration>false</methodDeclaration>
-                </parameter>
-            </always>
-            <general>
-                <beforeOperator>false</beforeOperator>
-                <enable>true</enable>
-                <lineLength>80</lineLength>
-            </general>
-            <ondemand>
-                <after>
-                    <assignment>false</assignment>
-                    <leftParenthesis>false</leftParenthesis>
-                    <parameter>false</parameter>
-                    <types>
-                        <extends>false</extends>
-                        <implements>false</implements>
-                        <throws>false</throws>
-                    </types>
-                </after>
-                <before>
-                    <rightParenthesis>false</rightParenthesis>
-                </before>
-                <groupingParentheses>false</groupingParentheses>
-            </ondemand>
-        </wrapping>
-    </printer>
-</jalopy>
-
-<!--+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-   END OF FILE
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
+<?xml version="1.0" encoding="UTF-8"?>
+<jalopy>
+    <general>
+        <compliance>
+            <version>1</version>
+        </compliance>
+        <style>
+            <description>Jalopy convention definitions for the JabRef project</description>
+            <name>JabRef convention</name>
+        </style>
+    </general>
+    <inspector>
+        <enable>false</enable>
+        <naming>
+            <classes>
+                <abstract>[A-Z][a-zA-Z0-9]+</abstract>
+                <general>[A-Z][a-zA-Z0-9]+</general>
+            </classes>
+            <fields>
+                <default>[a-z][\w]+</default>
+                <defaultStatic>[a-z][\w]+</defaultStatic>
+                <defaultStaticFinal>[a-zA-Z][\w]+</defaultStaticFinal>
+                <private>[a-z][\w]+</private>
+                <privateStatic>[a-z][\w]+</privateStatic>
+                <privateStaticFinal>[a-zA-Z][\w]+</privateStaticFinal>
+                <protected>[a-z][\w]+</protected>
+                <protectedStatic>[a-z][\w]+</protectedStatic>
+                <protectedStaticFinal>[a-zA-Z][\w]+</protectedStaticFinal>
+                <public>[a-z][\w]+</public>
+                <publicStatic>[a-z][\w]+</publicStatic>
+                <publicStaticFinal>[a-zA-Z][\w]+</publicStaticFinal>
+            </fields>
+            <interfaces>[A-Z][a-zA-Z0-9]+</interfaces>
+            <labels>\w+</labels>
+            <methods>
+                <default>[a-z][\w]+</default>
+                <defaultStatic>[a-z][\w]+</defaultStatic>
+                <defaultStaticFinal>[a-z][\w]+</defaultStaticFinal>
+                <private>[a-z][\w]+</private>
+                <privateStatic>[a-z][\w]+</privateStatic>
+                <privateStaticFinal>[a-z][\w]+</privateStaticFinal>
+                <protected>[a-z][\w]+</protected>
+                <protectedStatic>[a-z][\w]+</protectedStatic>
+                <protectedStaticFinal>[a-z][\w]+</protectedStaticFinal>
+                <public>[a-z][\w]+</public>
+                <publicStatic>[a-z][\w]+</publicStatic>
+                <publicStaticFinal>[a-z][\w]+</publicStaticFinal>
+            </methods>
+            <packages>[a-z]+(?:\.[a-z]+)*</packages>
+            <parameters>
+                <default>[a-z][\w]+</default>
+                <final>[a-z][\w]+</final>
+            </parameters>
+            <variables>[a-z][\w]*</variables>
+        </naming>
+        <tips>
+            <adhereToNamingConvention>false</adhereToNamingConvention>
+            <alwaysOverrideEquals>false</alwaysOverrideEquals>
+            <alwaysOverrideHashCode>false</alwaysOverrideHashCode>
+            <avoidThreadGroups>false</avoidThreadGroups>
+            <declareCollectionComment>false</declareCollectionComment>
+            <dontIgnoreExceptions>false</dontIgnoreExceptions>
+            <dontSubstituteObjectEquals>false</dontSubstituteObjectEquals>
+            <neverDeclareException>false</neverDeclareException>
+            <neverDeclareThrowable>false</neverDeclareThrowable>
+            <neverInvokeWaitOutsideLoop>false</neverInvokeWaitOutsideLoop>
+            <neverReturnZeroArrays>false</neverReturnZeroArrays>
+            <neverUseEmptyFinally>false</neverUseEmptyFinally>
+            <obeyContractEquals>false</obeyContractEquals>
+            <overrideToString>false</overrideToString>
+            <referToObjectsByInterface>false</referToObjectsByInterface>
+            <replaceStructureWithClass>false</replaceStructureWithClass>
+            <stringLiterallI18n>false</stringLiterallI18n>
+            <useInterfaceOnlyForTypes>false</useInterfaceOnlyForTypes>
+            <wrongCollectionComment>false</wrongCollectionComment>
+        </tips>
+    </inspector>
+    <internal>
+        <version>6</version>
+    </internal>
+    <messages>
+        <priority>
+            <general>30000</general>
+            <parser>30000</parser>
+            <parserJavadoc>30000</parserJavadoc>
+            <printer>30000</printer>
+            <printerJavadoc>30000</printerJavadoc>
+            <transform>30000</transform>
+        </priority>
+        <showErrorStackTrace>true</showErrorStackTrace>
+    </messages>
+    <misc>
+        <threadCount>1</threadCount>
+    </misc>
+    <printer>
+        <alignment>
+            <methodCallChain>true</methodCallChain>
+            <parameterMethodDeclaration>false</parameterMethodDeclaration>
+            <ternaryOperator>true</ternaryOperator>
+            <variableAssignment>false</variableAssignment>
+            <variableIdentifier>false</variableIdentifier>
+        </alignment>
+        <backup>
+            <directory>bak</directory>
+            <level>0</level>
+        </backup>
+        <blanklines>
+            <after>
+                <block>1</block>
+                <braceLeft>0</braceLeft>
+                <class>1</class>
+                <declaration>0</declaration>
+                <footer>1</footer>
+                <header>0</header>
+                <interface>1</interface>
+                <lastImport>2</lastImport>
+                <method>1</method>
+                <package>1</package>
+            </after>
+            <before>
+                <block>1</block>
+                <braceRight>0</braceRight>
+                <caseBlock>1</caseBlock>
+                <comment>
+                    <javadoc>1</javadoc>
+                    <multiline>1</multiline>
+                    <singleline>1</singleline>
+                </comment>
+                <controlStatement>1</controlStatement>
+                <declaration>1</declaration>
+                <footer>0</footer>
+                <header>0</header>
+            </before>
+            <keepUpTo>1</keepUpTo>
+        </blanklines>
+        <braces>
+            <empty>
+                <cuddle>false</cuddle>
+                <insertStatement>false</insertStatement>
+            </empty>
+            <insert>
+                <dowhile>true</dowhile>
+                <for>true</for>
+                <ifelse>true</ifelse>
+                <while>true</while>
+            </insert>
+            <remove>
+                <block>true</block>
+                <dowhile>false</dowhile>
+                <for>false</for>
+                <ifelse>false</ifelse>
+                <while>false</while>
+            </remove>
+            <treatDifferent>
+                <methodClass>false</methodClass>
+                <methodClassIfWrapped>false</methodClassIfWrapped>
+            </treatDifferent>
+        </braces>
+        <chunks>
+            <blanklines>true</blanklines>
+            <comments>true</comments>
+        </chunks>
+        <comments>
+            <format>
+                <multiline>false</multiline>
+            </format>
+            <javadoc>
+                <check>
+                    <innerclass>false</innerclass>
+                    <tags>false</tags>
+                    <throwsTags>false</throwsTags>
+                </check>
+                <fieldsShort>true</fieldsShort>
+                <generate>
+                    <class>1</class>
+                    <constructor>0</constructor>
+                    <field>0</field>
+                    <method>0</method>
+                </generate>
+                <parseComments>false</parseComments>
+                <tags>
+                    <in-line />
+                    <standard />
+                </tags>
+                <templates>
+                    <method>
+                        <bottom> */</bottom>
+                        <exception> * @throws $exceptionType$ DOCUMENT ME!</exception>
+                        <param> * @param $paramType$ DOCUMENT ME!</param>
+                        <return> * @return DOCUMENT ME!</return>
+                        <top>/**| * DOCUMENT ME!</top>
+                    </method>
+                </templates>
+            </javadoc>
+            <remove>
+                <javadoc>false</javadoc>
+                <multiline>false</multiline>
+                <singleline>false</singleline>
+            </remove>
+            <separator>
+                <fillCharacter>/</fillCharacter>
+                <insert>true</insert>
+                <insertRecursive>false</insertRecursive>
+                <text>
+                    <class>Inner Classes</class>
+                    <constructor>Constructors</constructor>
+                    <field>Instance fields</field>
+                    <initializer>Instance initializers</initializer>
+                    <interface>Inner Interfaces</interface>
+                    <method>Methods</method>
+                    <static>Static fields/initializers</static>
+                </text>
+            </separator>
+        </comments>
+        <environment />
+        <footer>
+            <keys />
+            <smartMode>5</smartMode>
+            <text>///////////////////////////////////////////////////////////////////////////////
+//  END OF FILE.
+///////////////////////////////////////////////////////////////////////////////</text>
+            <use>true</use>
+        </footer>
+
+        <!-- header should not used, because there are some LGPL sources and other authors -->
+        <header>
+            <keys>JOELib header</keys>
+            <smartMode>5</smartMode>
+			<text>///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile$
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Version:  $Revision$
+//            $Date$
+//            $Author$
+//
+//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
+//
+//  This program is free software; 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.
+///////////////////////////////////////////////////////////////////////////////</text>
+            <use>false</use>
+        </header>
+        <history>
+            <policy>disabled</policy>
+        </history>
+        <imports>
+            <grouping>
+                <defaultDepth>3</defaultDepth>
+                <packages>*:0|gnu:2|java:2|javax:2|org:2|com:2|net:2</packages>
+            </grouping>
+            <policy>disabled</policy>
+            <sort>true</sort>
+        </imports>
+
+        <indentation>
+            <caseFromSwitch>false</caseFromSwitch>
+            <continuation>
+                <block>true</block>
+                <operator>false</operator>
+            </continuation>
+            <firstColumnComments>true</firstColumnComments>
+            <label>false</label>
+            <policy>
+                <deep>false</deep>
+            </policy>
+            <sizes>
+                <braceCuddled>1</braceCuddled>
+                <braceLeft>0</braceLeft>
+                <braceRight>0</braceRight>
+                <braceRightAfter>1</braceRightAfter>
+                <continuation>4</continuation>
+                <deep>55</deep>
+                <extends>-1</extends>
+                <general>4</general>
+                <implements>-1</implements>
+                <leading>0</leading>
+                <tabs>8</tabs>
+                <throws>-1</throws>
+                <trailingComment>1</trailingComment>
+            </sizes>
+            <tabs>
+                <enable>false</enable>
+                <onlyLeading>false</onlyLeading>
+            </tabs>
+        </indentation>
+        <misc>
+            <arrayBracketsAfterIdent>false</arrayBracketsAfterIdent>
+            <forceFormatting>false</forceFormatting>
+            <insertExpressionParentheses>true</insertExpressionParentheses>
+            <insertLoggingConditional>true</insertLoggingConditional>
+            <insertTrailingNewline>true</insertTrailingNewline>
+            <insertUID>false</insertUID>
+        </misc>
+        <sorting>
+            <declaration>
+                <class>true</class>
+                <constructor>true</constructor>
+                <enable>true</enable>
+                <interface>true</interface>
+                <method>true</method>
+                <order>static|field|initializer|constructor|method|interface|class</order>
+                <variable>true</variable>
+            </declaration>
+            <modifier>
+                <enable>false</enable>
+                <order>public|protected|private|abstract|static|final|synchronized|transient|volatile|native|strictfp</order>
+            </modifier>
+        </sorting>
+
+        <whitespace>
+            <after>
+                <comma>true</comma>
+                <semicolon>true</semicolon>
+                <typeCast>true</typeCast>
+            </after>
+            <before>
+                <braces>false</braces>
+                <brackets>false</brackets>
+                <bracketsTypes>false</bracketsTypes>
+                <caseColon>false</caseColon>
+                <operator>
+                    <not>false</not>
+                </operator>
+                <parentheses>
+                    <methodCall>false</methodCall>
+                    <methodDeclaration>false</methodDeclaration>
+                    <statement>true</statement>
+                </parentheses>
+            </before>
+            <padding>
+                <braces>false</braces>
+                <brackets>false</brackets>
+                <operator>
+                    <assignment>true</assignment>
+                    <bitwise>true</bitwise>
+                    <logical>true</logical>
+                    <mathematical>true</mathematical>
+                    <relational>true</relational>
+                    <shift>true</shift>
+                </operator>
+                <parenthesis>false</parenthesis>
+                <typeCast>false</typeCast>
+            </padding>
+        </whitespace>
+        <wrapping>
+            <always>
+                <after>
+                    <arrayElement>0</arrayElement>
+                    <braceRight>true</braceRight>
+                    <extendsTypes>false</extendsTypes>
+                    <implementsTypes>false</implementsTypes>
+                    <label>true</label>
+                    <methodCallChained>false</methodCallChained>
+                    <ternaryOperator>
+                        <first>false</first>
+                        <second>false</second>
+                    </ternaryOperator>
+                    <throwsTypes>false</throwsTypes>
+                </after>
+                <before>
+                    <braceLeft>true</braceLeft>
+                    <extends>false</extends>
+                    <implements>false</implements>
+                    <throws>false</throws>
+                </before>
+                <parameter>
+                    <methodCall>false</methodCall>
+                    <methodCallNested>false</methodCallNested>
+                    <methodDeclaration>false</methodDeclaration>
+                </parameter>
+            </always>
+            <general>
+                <beforeOperator>false</beforeOperator>
+                <enable>true</enable>
+                <lineLength>80</lineLength>
+            </general>
+            <ondemand>
+                <after>
+                    <assignment>false</assignment>
+                    <leftParenthesis>false</leftParenthesis>
+                    <parameter>false</parameter>
+                    <types>
+                        <extends>false</extends>
+                        <implements>false</implements>
+                        <throws>false</throws>
+                    </types>
+                </after>
+                <before>
+                    <rightParenthesis>false</rightParenthesis>
+                </before>
+                <groupingParentheses>false</groupingParentheses>
+            </ondemand>
+        </wrapping>
+    </printer>
+</jalopy>
+
+<!--+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   END OF FILE
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
diff --git a/src/java/net/sf/jabref/AbstractWorker.java b/src/java/net/sf/jabref/AbstractWorker.java
index 103c183..2492c5b 100644
--- a/src/java/net/sf/jabref/AbstractWorker.java
+++ b/src/java/net/sf/jabref/AbstractWorker.java
@@ -1,66 +1,66 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import spin.Spin;
-
-/**
- * Convenience class for creating an object used for performing a time-
- * consuming action off the Swing thread, and optionally performing GUI
- * work afterwards. This class is supported by runCommand() in BasePanel,
- * which, if the action called is an AbstractWorker, will run its run()
- * method through the Worker interface, and then its update() method through
- * the CallBack interface. This procedure ensures that run() cannot freeze
- * the GUI, and that update() can safely update GUI components.
- */
-public abstract class AbstractWorker implements Worker, CallBack {
-
-    private Worker worker;
-    private CallBack callBack;
-
-    public AbstractWorker() {
-	worker = (Worker)Spin.off(this);
-	callBack = (CallBack)Spin.over(this);
-
-    }
-
-    public void init() throws Throwable {
-
-    }
-
-    /**
-     * This method returns a wrapped Worker instance of this AbstractWorker.
-     * whose methods will automatically be run off the EDT (Swing) thread.
-     */
-    public Worker getWorker() {
-	return worker;
-    }
-
-    /**
-     * This method returns a wrapped CallBack instance of this AbstractWorker
-     * whose methods will automatically be run on the EDT (Swing) thread.
-     */
-    public CallBack getCallBack() {
-	return callBack;
-    }
-
-    /**
-     * Empty implementation of the update() method. Override this method
-     * if a callback is needed.
-     */
-    public void update() {
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import spin.Spin;
+
+/**
+ * Convenience class for creating an object used for performing a time-
+ * consuming action off the Swing thread, and optionally performing GUI
+ * work afterwards. This class is supported by runCommand() in BasePanel,
+ * which, if the action called is an AbstractWorker, will run its run()
+ * method through the Worker interface, and then its update() method through
+ * the CallBack interface. This procedure ensures that run() cannot freeze
+ * the GUI, and that update() can safely update GUI components.
+ */
+public abstract class AbstractWorker implements Worker, CallBack {
+
+    private Worker worker;
+    private CallBack callBack;
+
+    public AbstractWorker() {
+	worker = (Worker)Spin.off(this);
+	callBack = (CallBack)Spin.over(this);
+
+    }
+
+    public void init() throws Throwable {
+
+    }
+
+    /**
+     * This method returns a wrapped Worker instance of this AbstractWorker.
+     * whose methods will automatically be run off the EDT (Swing) thread.
+     */
+    public Worker getWorker() {
+	return worker;
+    }
+
+    /**
+     * This method returns a wrapped CallBack instance of this AbstractWorker
+     * whose methods will automatically be run on the EDT (Swing) thread.
+     */
+    public CallBack getCallBack() {
+	return callBack;
+    }
+
+    /**
+     * Empty implementation of the update() method. Override this method
+     * if a callback is needed.
+     */
+    public void update() {
+    }
+}
diff --git a/src/java/net/sf/jabref/AdvancedTab.java b/src/java/net/sf/jabref/AdvancedTab.java
index fb8f332..6886130 100644
--- a/src/java/net/sf/jabref/AdvancedTab.java
+++ b/src/java/net/sf/jabref/AdvancedTab.java
@@ -1,271 +1,273 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-
-import javax.swing.*;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import net.sf.jabref.journals.JournalAbbreviations;
-import net.sf.jabref.remote.RemoteListener;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-public class AdvancedTab extends JPanel implements PrefsTab {
-
-    JabRefPreferences _prefs;
-    JabRefFrame _frame;
-    HelpDialog helpDiag;
-    HelpAction remoteHelp;
-    JPanel pan = new JPanel(),
-        lnf = new JPanel();
-    JLabel lab;
-    JCheckBox useDefault, useRemoteServer, useNativeFileDialogOnMac, filechooserDisableRename,
-            useIEEEAbrv, biblatexMode;
-    JTextField className, remoteServerPort;
-    JButton def1 = new JButton(Globals.lang("Default")),
-        def2 = new JButton(Globals.lang("Default"));
-    JPanel p1 = new JPanel(),
-        p2 = new JPanel();
-    String oldLnf = "";
-    boolean oldUseDef, oldBiblMode=false, oldConvertToEquation, oldCaseKeeperOnSearch;
-    int oldPort = -1;
-    
-    public final static String PREF_IMPORT_CONVERT_TO_EQUATION = "importFileConvertToEquation"; 
-    public final static String PREF_IMPORT_FILENAMEPATTERN = "importFileNamePattern"; 
-	
-    private JCheckBox useConvertToEquation;
-    private JCheckBox useCaseKeeperOnSearch;
-	
-
-    public AdvancedTab(JabRefPreferences prefs, HelpDialog diag) {
-        _prefs = prefs;
-
-
-    remoteHelp = new HelpAction(diag, GUIGlobals.remoteHelp, "Help",
-                GUIGlobals.getIconUrl("helpSmall"));
-    useDefault = new JCheckBox(Globals.lang("Use other look and feel"));
-    useRemoteServer = new JCheckBox(Globals.lang("Listen for remote operation on port")+":");
-    useNativeFileDialogOnMac = new JCheckBox(Globals.lang("Use native file dialog"));
-    filechooserDisableRename = new JCheckBox(Globals.lang("Disable file renaming in non-native file dialog"));
-    useIEEEAbrv = new JCheckBox(Globals.lang("Use IEEE LaTeX abbreviations"));
-    biblatexMode = new JCheckBox(Globals.lang("BibLaTeX mode"));
-    remoteServerPort = new JTextField();
-    className = new JTextField(50);
-    final JTextField clName = className;
-    useDefault.addChangeListener(new ChangeListener() {
-        public void stateChanged(ChangeEvent e) {
-            clName.setEnabled(((JCheckBox)e.getSource()).isSelected());
-        }
-        });
-    useConvertToEquation = new JCheckBox(Globals.lang("Prefer converting subscripts and superscripts to equations rather than text"));
-    useCaseKeeperOnSearch = new JCheckBox(Globals.lang("Add {} to specified title words on search to keep the correct case"));
-	
-    FormLayout layout = new FormLayout
-        ("1dlu, 8dlu, left:pref, 4dlu, fill:3dlu",//, 4dlu, fill:pref",// 4dlu, left:pref, 4dlu",
-         "");
-    DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-    JPanel pan = new JPanel();
-
-    if (!Globals.ON_MAC) {
-        builder.appendSeparator(Globals.lang("Look and feel"));
-        JLabel lab = new JLabel(Globals.lang("Default look and feel")+": "+UIManager.getSystemLookAndFeelClassName());
-        builder.nextLine();
-        builder.append(pan);
-        builder.append(lab);
-        builder.nextLine();
-        builder.append(pan);
-        builder.append(useDefault);
-        builder.nextLine();
-        builder.append(pan);
-        JPanel pan2 = new JPanel();
-        lab = new JLabel(Globals.lang("Class name")+":");
-        pan2.add(lab);
-        pan2.add(className);
-        builder.append(pan2);
-        builder.nextLine();
-        builder.append(pan);
-        lab = new JLabel(Globals.lang("Note that you must specify the fully qualified class name for the look and feel,"));
-        builder.append(lab);
-        builder.nextLine();
-        builder.append(pan);
-        lab = new JLabel(Globals.lang("and the class must be available in your classpath next time you start JabRef."));
-        builder.append(lab);
-        builder.nextLine();
-    }
-    builder.appendSeparator(Globals.lang("Remote operation"));
-    builder.nextLine();
-    builder.append(new JPanel());    
-    builder.append(new JLabel("<html>"+Globals.lang("This feature lets new files be opened or imported into an "
-        +"already running instance of JabRef<BR>instead of opening a new instance. For instance, this "
-        +"is useful when you open a file in JabRef<br>from your web browser."
-        +"<BR>Note that this will prevent you from running more than one instance of JabRef at a time.")+"</html>"));
-    builder.nextLine();
-    builder.append(new JPanel());
-
-    JPanel p = new JPanel();
-    p.add(useRemoteServer);
-    p.add(remoteServerPort);
-    p.add(remoteHelp.getIconButton());
-    builder.append(p);
-
-    //if (Globals.ON_MAC) {
-    builder.nextLine();
-    builder.appendSeparator(Globals.lang("File dialog"));
-    builder.nextLine();
-    builder.append(new JPanel());
-    builder.append(useNativeFileDialogOnMac);
-    builder.nextLine();
-    builder.append(new JPanel());
-    builder.append(filechooserDisableRename);
-    //}
-	// IEEE
-    builder.nextLine();
-    builder.appendSeparator(Globals.lang("Search IEEEXplore"));
-    builder.nextLine();
-    builder.append(new JPanel());
-    builder.append(useIEEEAbrv);
-
-    builder.nextLine();
-    builder.appendSeparator(Globals.lang("BibLaTeX mode"));
-    builder.append(new JPanel());
-    builder.append(biblatexMode);
-    
-    builder.nextLine();    
-    builder.appendSeparator(Globals.lang("Import conversions"));
-    builder.nextLine();
-    builder.append(new JPanel());
-    builder.append(useConvertToEquation);
-    builder.nextLine();
-    builder.append(pan);
-    builder.append(useCaseKeeperOnSearch);
-        
-    pan = builder.getPanel();
-    pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-    setLayout(new BorderLayout());
-    add(pan, BorderLayout.CENTER);
-
-    }
-
-    public void setValues() {
-        oldUseDef = _prefs.getBoolean("useDefaultLookAndFeel");
-        oldLnf = _prefs.get("lookAndFeel");
-        useDefault.setSelected(!oldUseDef);
-        className.setText(oldLnf);
-        className.setEnabled(!oldUseDef);
-        useRemoteServer.setSelected(_prefs.getBoolean("useRemoteServer"));
-        oldPort = _prefs.getInt("remoteServerPort");
-        remoteServerPort.setText(String.valueOf(oldPort));
-        useNativeFileDialogOnMac.setSelected(Globals.prefs.getBoolean("useNativeFileDialogOnMac"));
-        filechooserDisableRename.setSelected(Globals.prefs.getBoolean("filechooserDisableRename"));
-        useIEEEAbrv.setSelected(Globals.prefs.getBoolean("useIEEEAbrv"));
-        oldBiblMode = Globals.prefs.getBoolean("biblatexMode");
-        biblatexMode.setSelected(oldBiblMode);
-        oldConvertToEquation = Globals.prefs.getBoolean("useConvertToEquation");
-        useConvertToEquation.setSelected(oldConvertToEquation);
-        oldCaseKeeperOnSearch = Globals.prefs.getBoolean("useCaseKeeperOnSearch");
-        useCaseKeeperOnSearch.setSelected(oldCaseKeeperOnSearch);
-    }
-
-    public void storeSettings() {
-        _prefs.putBoolean("useDefaultLookAndFeel", !useDefault.isSelected());
-        _prefs.put("lookAndFeel", className.getText());
-        _prefs.putBoolean("useNativeFileDialogOnMac", useNativeFileDialogOnMac.isSelected());
-        _prefs.putBoolean("filechooserDisableRename", filechooserDisableRename.isSelected());
-        UIManager.put("FileChooser.readOnly", filechooserDisableRename.isSelected());
-        _prefs.putBoolean("useIEEEAbrv", useIEEEAbrv.isSelected());
-        if (useIEEEAbrv.isSelected())
-        	Globals.journalAbbrev = new JournalAbbreviations("/resource/IEEEJournalList.txt");
-        try {
-            int port = Integer.parseInt(remoteServerPort.getText());
-            if (port != oldPort) {
-                _prefs.putInt("remoteServerPort", port);
-                /*JOptionPane.showMessageDialog(null, Glbals.lang("You have changed the menu and label font size. "
-                        + "You must restart JabRef for this to come into effect."), Globals.lang("Changed font settings"),
-                        JOptionPane.WARNING_MESSAGE);*/
-            }
-
-        } catch (NumberFormatException ex) {
-            ex.printStackTrace();
-        }
-        _prefs.putBoolean("useRemoteServer", useRemoteServer.isSelected());
-        if (useRemoteServer.isSelected() && (JabRef.remoteListener == null)) {
-            // Start the listener now.
-
-            JabRef.remoteListener = RemoteListener.openRemoteListener(JabRef.singleton);
-            if (JabRef.remoteListener != null) {
-                JabRef.remoteListener.start();
-            }
-        } else if (!useRemoteServer.isSelected() && (JabRef.remoteListener != null)) {
-            JabRef.remoteListener.disable();
-            JabRef.remoteListener = null;
-        }
-
-        _prefs.putBoolean("biblatexMode", biblatexMode.isSelected());
-
-        if ((useDefault.isSelected() == oldUseDef) ||
-            !oldLnf.equals(className.getText())) {
-            JOptionPane.showMessageDialog(null, 
-            		Globals.lang("You have changed the look and feel setting.")
-            		.concat(" ")
-            		.concat(Globals.lang("You must restart JabRef for this to come into effect.")),
-            		Globals.lang("Changed look and feel settings"),
-            		JOptionPane.WARNING_MESSAGE);
-        }
-
-        if (biblatexMode.isSelected() != oldBiblMode) {
-            JOptionPane.showMessageDialog(null, 
-            		Globals.lang("You have toggled the BibLaTeX mode.")
-            		.concat(" ")
-            		.concat("You must restart JabRef for this change to come into effect."),
-                    Globals.lang("BibLaTeX mode"), JOptionPane.WARNING_MESSAGE);
-        }
-        
-        _prefs.putBoolean("useConvertToEquation", useConvertToEquation.isSelected());
-        _prefs.putBoolean("useCaseKeeperOnSearch", useCaseKeeperOnSearch.isSelected());
-    }
-
-    public boolean readyToClose() {
-	   
-        try {
-            int portNumber = Integer.parseInt(remoteServerPort.getText());
-            if (portNumber > 1024 && portNumber <= 65535)
-                return true; // Ok, the number was legal.
-            else {
-                JOptionPane.showMessageDialog
-                    (null, Globals.lang("You must enter an integer value in the interval 1025-65535 in the text field for") + " '" +
-                    Globals.lang("Remote server port") + "'", Globals.lang("Remote server port"),
-                            JOptionPane.ERROR_MESSAGE);
-                return false;
-            }
-        } catch (NumberFormatException ex) {
-            JOptionPane.showMessageDialog
-                    (null, Globals.lang("You must enter an integer value in the interval 1025-65535 in the text field for") + " '" +
-                    Globals.lang("Remote server port") + "'", Globals.lang("Remote server port"),
-                            JOptionPane.ERROR_MESSAGE);
-            return false;
-        }
-
-    }
-
-	public String getTabName() {
-		return Globals.lang("Advanced");
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.sf.jabref.help.HelpAction;
+import net.sf.jabref.help.HelpDialog;
+import net.sf.jabref.journals.JournalAbbreviations;
+import net.sf.jabref.remote.RemoteListener;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+public class AdvancedTab extends JPanel implements PrefsTab {
+
+    JabRefPreferences _prefs;
+    JabRefFrame _frame;
+    HelpDialog helpDiag;
+    HelpAction remoteHelp;
+    JPanel pan = new JPanel(),
+        lnf = new JPanel();
+    JLabel lab;
+    JCheckBox useDefault, useRemoteServer, useNativeFileDialogOnMac, filechooserDisableRename,
+            useIEEEAbrv, biblatexMode;
+    JTextField className, remoteServerPort;
+    JButton def1 = new JButton(Globals.lang("Default")),
+        def2 = new JButton(Globals.lang("Default"));
+    JPanel p1 = new JPanel(),
+        p2 = new JPanel();
+    String oldLnf = "";
+    boolean oldUseDef, oldBiblMode=false, oldConvertToEquation, oldCaseKeeperOnSearch;
+    int oldPort = -1;
+    
+    public final static String PREF_IMPORT_CONVERT_TO_EQUATION = "importFileConvertToEquation"; 
+    public final static String PREF_IMPORT_FILENAMEPATTERN = "importFileNamePattern"; 
+	
+    private JCheckBox useConvertToEquation;
+    private JCheckBox useCaseKeeperOnSearch;
+	
+
+    public AdvancedTab(JabRefPreferences prefs, HelpDialog diag) {
+        _prefs = prefs;
+
+
+    remoteHelp = new HelpAction(diag, GUIGlobals.remoteHelp, "Help",
+                GUIGlobals.getIconUrl("helpSmall"));
+    useDefault = new JCheckBox(Globals.lang("Use other look and feel"));
+    useRemoteServer = new JCheckBox(Globals.lang("Listen for remote operation on port")+":");
+    useNativeFileDialogOnMac = new JCheckBox(Globals.lang("Use native file dialog"));
+    filechooserDisableRename = new JCheckBox(Globals.lang("Disable file renaming in non-native file dialog"));
+    useIEEEAbrv = new JCheckBox(Globals.lang("Use IEEE LaTeX abbreviations"));
+    biblatexMode = new JCheckBox(Globals.lang("BibLaTeX mode"));
+    remoteServerPort = new JTextField();
+    className = new JTextField(50);
+    final JTextField clName = className;
+    useDefault.addChangeListener(new ChangeListener() {
+        public void stateChanged(ChangeEvent e) {
+            clName.setEnabled(((JCheckBox)e.getSource()).isSelected());
+        }
+        });
+    useConvertToEquation = new JCheckBox(Globals.lang("Prefer converting subscripts and superscripts to equations rather than text"));
+    useCaseKeeperOnSearch = new JCheckBox(Globals.lang("Add {} to specified title words on search to keep the correct case"));
+	
+    FormLayout layout = new FormLayout
+        ("1dlu, 8dlu, left:pref, 4dlu, fill:3dlu",//, 4dlu, fill:pref",// 4dlu, left:pref, 4dlu",
+         "");
+    DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+    JPanel pan = new JPanel();
+
+    if (!Globals.ON_MAC) {
+        builder.appendSeparator(Globals.lang("Look and feel"));
+        JLabel lab = new JLabel(Globals.lang("Default look and feel")+": "+UIManager.getSystemLookAndFeelClassName());
+        builder.nextLine();
+        builder.append(pan);
+        builder.append(lab);
+        builder.nextLine();
+        builder.append(pan);
+        builder.append(useDefault);
+        builder.nextLine();
+        builder.append(pan);
+        JPanel pan2 = new JPanel();
+        lab = new JLabel(Globals.lang("Class name")+":");
+        pan2.add(lab);
+        pan2.add(className);
+        builder.append(pan2);
+        builder.nextLine();
+        builder.append(pan);
+        lab = new JLabel(Globals.lang("Note that you must specify the fully qualified class name for the look and feel,"));
+        builder.append(lab);
+        builder.nextLine();
+        builder.append(pan);
+        lab = new JLabel(Globals.lang("and the class must be available in your classpath next time you start JabRef."));
+        builder.append(lab);
+        builder.nextLine();
+    }
+    builder.appendSeparator(Globals.lang("Remote operation"));
+    builder.nextLine();
+    builder.append(new JPanel());    
+    builder.append(new JLabel("<html>"+Globals.lang("This feature lets new files be opened or imported into an "
+        +"already running instance of JabRef<BR>instead of opening a new instance. For instance, this "
+        +"is useful when you open a file in JabRef<br>from your web browser."
+        +"<BR>Note that this will prevent you from running more than one instance of JabRef at a time.")+"</html>"));
+    builder.nextLine();
+    builder.append(new JPanel());
+
+    JPanel p = new JPanel();
+    p.add(useRemoteServer);
+    p.add(remoteServerPort);
+    p.add(remoteHelp.getIconButton());
+    builder.append(p);
+
+    //if (Globals.ON_MAC) {
+    builder.nextLine();
+    builder.appendSeparator(Globals.lang("File dialog"));
+    builder.nextLine();
+    builder.append(new JPanel());
+    builder.append(useNativeFileDialogOnMac);
+    builder.nextLine();
+    builder.append(new JPanel());
+    builder.append(filechooserDisableRename);
+    //}
+	// IEEE
+    builder.nextLine();
+    builder.appendSeparator(Globals.lang("Search IEEEXplore"));
+    builder.nextLine();
+    builder.append(new JPanel());
+    builder.append(useIEEEAbrv);
+
+    builder.nextLine();
+    builder.appendSeparator(Globals.lang("BibLaTeX mode"));
+    builder.append(new JPanel());
+    builder.append(biblatexMode);
+    
+    builder.nextLine();    
+    builder.appendSeparator(Globals.lang("Import conversions"));
+    builder.nextLine();
+    builder.append(new JPanel());
+    builder.append(useConvertToEquation);
+    builder.nextLine();
+    builder.append(pan);
+    builder.append(useCaseKeeperOnSearch);
+        
+    pan = builder.getPanel();
+    pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+    setLayout(new BorderLayout());
+    add(pan, BorderLayout.CENTER);
+
+    }
+
+    public void setValues() {
+        oldUseDef = _prefs.getBoolean("useDefaultLookAndFeel");
+        oldLnf = _prefs.get("lookAndFeel");
+        useDefault.setSelected(!oldUseDef);
+        className.setText(oldLnf);
+        className.setEnabled(!oldUseDef);
+        useRemoteServer.setSelected(_prefs.getBoolean("useRemoteServer"));
+        oldPort = _prefs.getInt("remoteServerPort");
+        remoteServerPort.setText(String.valueOf(oldPort));
+        useNativeFileDialogOnMac.setSelected(Globals.prefs.getBoolean("useNativeFileDialogOnMac"));
+        filechooserDisableRename.setSelected(Globals.prefs.getBoolean("filechooserDisableRename"));
+        useIEEEAbrv.setSelected(Globals.prefs.getBoolean("useIEEEAbrv"));
+        oldBiblMode = Globals.prefs.getBoolean("biblatexMode");
+        biblatexMode.setSelected(oldBiblMode);
+        oldConvertToEquation = Globals.prefs.getBoolean("useConvertToEquation");
+        useConvertToEquation.setSelected(oldConvertToEquation);
+        oldCaseKeeperOnSearch = Globals.prefs.getBoolean("useCaseKeeperOnSearch");
+        useCaseKeeperOnSearch.setSelected(oldCaseKeeperOnSearch);
+    }
+
+    public void storeSettings() {
+        _prefs.putBoolean("useDefaultLookAndFeel", !useDefault.isSelected());
+        _prefs.put("lookAndFeel", className.getText());
+        _prefs.putBoolean("useNativeFileDialogOnMac", useNativeFileDialogOnMac.isSelected());
+        _prefs.putBoolean("filechooserDisableRename", filechooserDisableRename.isSelected());
+        UIManager.put("FileChooser.readOnly", filechooserDisableRename.isSelected());
+        _prefs.putBoolean("useIEEEAbrv", useIEEEAbrv.isSelected());
+        if (useIEEEAbrv.isSelected())
+        	Globals.journalAbbrev = new JournalAbbreviations("/resource/IEEEJournalList.txt");
+        try {
+            int port = Integer.parseInt(remoteServerPort.getText());
+            if (port != oldPort) {
+                _prefs.putInt("remoteServerPort", port);
+                /*JOptionPane.showMessageDialog(null, Glbals.lang("You have changed the menu and label font size. "
+                        + "You must restart JabRef for this to come into effect."), Globals.lang("Changed font settings"),
+                        JOptionPane.WARNING_MESSAGE);*/
+            }
+
+        } catch (NumberFormatException ex) {
+            ex.printStackTrace();
+        }
+        _prefs.putBoolean("useRemoteServer", useRemoteServer.isSelected());
+        if (useRemoteServer.isSelected() && (JabRef.remoteListener == null)) {
+            // Start the listener now.
+
+            JabRef.remoteListener = RemoteListener.openRemoteListener(JabRef.singleton);
+            if (JabRef.remoteListener != null) {
+                JabRef.remoteListener.start();
+            }
+        } else if (!useRemoteServer.isSelected() && (JabRef.remoteListener != null)) {
+            JabRef.remoteListener.disable();
+            JabRef.remoteListener = null;
+        }
+
+        _prefs.putBoolean("biblatexMode", biblatexMode.isSelected());
+
+        if ((useDefault.isSelected() == oldUseDef) ||
+            !oldLnf.equals(className.getText())) {
+            JOptionPane.showMessageDialog(null, 
+            		Globals.lang("You have changed the look and feel setting.")
+            		.concat(" ")
+            		.concat(Globals.lang("You must restart JabRef for this to come into effect.")),
+            		Globals.lang("Changed look and feel settings"),
+            		JOptionPane.WARNING_MESSAGE);
+        }
+
+        if (biblatexMode.isSelected() != oldBiblMode) {
+            JOptionPane.showMessageDialog(null, 
+            		Globals.lang("You have toggled the BibLaTeX mode.")
+            		.concat(" ")
+            		.concat("You must restart JabRef for this change to come into effect."),
+                    Globals.lang("BibLaTeX mode"), JOptionPane.WARNING_MESSAGE);
+        }
+        
+        _prefs.putBoolean("useConvertToEquation", useConvertToEquation.isSelected());
+        _prefs.putBoolean("useCaseKeeperOnSearch", useCaseKeeperOnSearch.isSelected());
+    }
+
+    public boolean readyToClose() {
+	   
+        try {
+            int portNumber = Integer.parseInt(remoteServerPort.getText());
+            if (portNumber > 1024 && portNumber <= 65535)
+                return true; // Ok, the number was legal.
+            else {
+                JOptionPane.showMessageDialog
+                    (null, Globals.lang("You must enter an integer value in the interval 1025-65535 in the text field for") + " '" +
+                    Globals.lang("Remote server port") + "'", Globals.lang("Remote server port"),
+                            JOptionPane.ERROR_MESSAGE);
+                return false;
+            }
+        } catch (NumberFormatException ex) {
+            JOptionPane.showMessageDialog
+                    (null, Globals.lang("You must enter an integer value in the interval 1025-65535 in the text field for") + " '" +
+                    Globals.lang("Remote server port") + "'", Globals.lang("Remote server port"),
+                            JOptionPane.ERROR_MESSAGE);
+            return false;
+        }
+
+    }
+
+	public String getTabName() {
+		return Globals.lang("Advanced");
+	}
+
+}
diff --git a/src/java/net/sf/jabref/AppearancePrefsTab.java b/src/java/net/sf/jabref/AppearancePrefsTab.java
index 695d569..4afbdd0 100644
--- a/src/java/net/sf/jabref/AppearancePrefsTab.java
+++ b/src/java/net/sf/jabref/AppearancePrefsTab.java
@@ -1,208 +1,208 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.Font;
-import java.awt.GridBagLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.*;
-
-import net.sf.jabref.gui.ColorSetupPanel;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-class AppearancePrefsTab extends JPanel implements PrefsTab {
-
-    JabRefPreferences _prefs;
-    private JCheckBox colorCodes, overrideFonts;//, useCustomIconTheme;
-    private GridBagLayout gbl = new GridBagLayout();
-    private JButton fontButton = new JButton(Globals.lang("Set table font"));
-    private ColorSetupPanel colorPanel = new ColorSetupPanel();
-    private Font font = GUIGlobals.CURRENTFONT;
-    private int oldMenuFontSize;
-    private boolean oldOverrideFontSize;
-    private JTextField fontSize;//, customIconThemeFile;
-
-    /**
-     * Customization of appearance parameters.
-     *
-     * @param prefs a <code>JabRefPreferences</code> value
-     */
-    public AppearancePrefsTab(JabRefPreferences prefs) {
-        _prefs = prefs;
-         setLayout(new BorderLayout());
-
-        // Font sizes:
-        fontSize = new JTextField(5);
-
-
-        colorCodes = new JCheckBox(Globals.lang
-                   ("Color codes for required and optional fields"));
-        /*antialias = new JCheckBox(Globals.lang
-                  ("Use antialiasing font"));*/
-        overrideFonts = new JCheckBox(Globals.lang("Override default font settings"));
-
-        //useCustomIconTheme = new JCheckBox(Globals.lang("Use custom icon theme"));
-        //customIconThemeFile = new JTextField();
-        FormLayout layout = new FormLayout
-                ("1dlu, 8dlu, left:pref, 4dlu, fill:pref, 4dlu, fill:60dlu, 4dlu, fill:pref",
-                        "");
-        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-        builder.setLeadingColumnOffset(2);
-        JLabel lab;
-        builder.appendSeparator(Globals.lang("General"));
-        JPanel p1 = new JPanel();
-        lab = new JLabel(Globals.lang("Menu and label font size") + ":");
-        p1.add(lab);
-        p1.add(fontSize);
-        builder.append(p1);
-        builder.nextLine();
-        builder.append(overrideFonts);
-        builder.nextLine();
-        builder.appendSeparator(Globals.lang("Table appearance"));
-        //builder.append(antialias);
-        //builder.nextLine();
-        builder.append(colorCodes);
-        builder.nextLine();
-        builder.append(fontButton);
-        builder.nextLine();
-        builder.appendSeparator(Globals.lang("Table and entry editor colors"));
-        builder.append(colorPanel);
-        /*builder.appendSeparator(Globals.lang("Custom icon theme"));
-        builder.append(useCustomIconTheme);
-        builder.nextLine();
-        JPanel p2 = new JPanel();
-        lab = new JLabel(Globals.lang("Custom icon theme file")+":");
-        p2.add(lab);
-        p2.add(customIconThemeFile);
-        BrowseAction browse = new BrowseAction(null, customIconThemeFile, false);
-        JButton browseBut = new JButton(Globals.lang("Browse"));
-        browseBut.addActionListener(browse);
-        p2.add(browseBut);
-        builder.append(p2);
-          */
-
-    JPanel upper = new JPanel(),
-        sort = new JPanel(),
-        namesp = new JPanel(),
-            iconCol = new JPanel();
-    upper.setLayout(gbl);
-    sort.setLayout(gbl);
-        namesp.setLayout(gbl);
-        iconCol.setLayout(gbl);
-
-
-    overrideFonts.addActionListener(new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-            fontSize.setEnabled(overrideFonts.isSelected());
-        }
-    });
-
-    fontButton.addActionListener(new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-            Font f=new FontSelectorDialog
-                (null, GUIGlobals.CURRENTFONT).getSelectedFont();
-            if(f==null)
-                return;
-            else
-                font = f;
-        }
-        });
-    /*menuFontButton.addActionListener(new ActionListener() {
-         public void actionPerformed(ActionEvent e) {
-             Font f=new FontSelectorDialog
-                 (null, menuFont).getSelectedFont();
-             if(f==null)
-                 return;
-             else
-                 menuFont = f;
-         }
-         });*/
-
-    JPanel pan = builder.getPanel();
-    pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-    add(pan, BorderLayout.CENTER);
-    }
-
-    public void setValues() {
-        colorCodes.setSelected(_prefs.getBoolean("tableColorCodesOn"));
-        //antialias.setSelected(_prefs.getBoolean("antialias"));
-        fontSize.setText("" + _prefs.getInt("menuFontSize"));
-        oldMenuFontSize = _prefs.getInt("menuFontSize");
-        overrideFonts.setSelected(_prefs.getBoolean("overrideDefaultFonts"));
-        oldOverrideFontSize = overrideFonts.isSelected();
-        fontSize.setEnabled(overrideFonts.isSelected());
-        //useCustomIconTheme.setSelected(_prefs.getBoolean("useCustomIconTheme"));
-        //customIconThemeFile.setText(_prefs.get("customIconThemeFile"));
-        colorPanel.setValues();
-    }
-
-    /**
-     * Store changes to table preferences. This method is called when
-     * the user clicks Ok.
-     *
-     */
-    public void storeSettings() {
-
-        _prefs.putBoolean("tableColorCodesOn", colorCodes.isSelected());
-        //_prefs.putBoolean("antialias", antialias.isSelected());
-        _prefs.put("fontFamily", font.getFamily());
-        _prefs.putInt("fontStyle", font.getStyle());
-        _prefs.putInt("fontSize", font.getSize());
-        _prefs.putBoolean("overrideDefaultFonts", overrideFonts.isSelected());
-        GUIGlobals.CURRENTFONT = font;
-        colorPanel.storeSettings();
-        try {
-            int size = Integer.parseInt(fontSize.getText());
-            if ((overrideFonts.isSelected() != oldOverrideFontSize) ||
-                    (size != oldMenuFontSize)) {
-                _prefs.putInt("menuFontSize", size);
-                JOptionPane.showMessageDialog(null, 
-                		Globals.lang("You have changed the menu and label font size.")
-                		.concat(" ")
-                        .concat(Globals.lang("You must restart JabRef for this to come into effect.")), 
-                        Globals.lang("Changed font settings"),
-                        JOptionPane.WARNING_MESSAGE);
-            }
-
-        } catch (NumberFormatException ex) {
-            ex.printStackTrace();
-        }
-    }
-
-    public boolean readyToClose() {
-        try {
-            // Test if font size is a number:
-            Integer.parseInt(fontSize.getText());
-        } catch (NumberFormatException ex) {
-            JOptionPane.showMessageDialog
-                    (null, Globals.lang("You must enter an integer value in the text field for") + " '" +
-                            Globals.lang("Menu and label font size") + "'", Globals.lang("Changed font settings"),
-                            JOptionPane.ERROR_MESSAGE);
-            return false;
-        }
-        return true;
-
-    }
-
-	public String getTabName() {
-	    return Globals.lang("Appearance");
-	}  
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.Font;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.*;
+
+import net.sf.jabref.gui.ColorSetupPanel;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+class AppearancePrefsTab extends JPanel implements PrefsTab {
+
+    JabRefPreferences _prefs;
+    private JCheckBox colorCodes, overrideFonts;//, useCustomIconTheme;
+    private GridBagLayout gbl = new GridBagLayout();
+    private JButton fontButton = new JButton(Globals.lang("Set table font"));
+    private ColorSetupPanel colorPanel = new ColorSetupPanel();
+    private Font font = GUIGlobals.CURRENTFONT;
+    private int oldMenuFontSize;
+    private boolean oldOverrideFontSize;
+    private JTextField fontSize;//, customIconThemeFile;
+
+    /**
+     * Customization of appearance parameters.
+     *
+     * @param prefs a <code>JabRefPreferences</code> value
+     */
+    public AppearancePrefsTab(JabRefPreferences prefs) {
+        _prefs = prefs;
+         setLayout(new BorderLayout());
+
+        // Font sizes:
+        fontSize = new JTextField(5);
+
+
+        colorCodes = new JCheckBox(Globals.lang
+                   ("Color codes for required and optional fields"));
+        /*antialias = new JCheckBox(Globals.lang
+                  ("Use antialiasing font"));*/
+        overrideFonts = new JCheckBox(Globals.lang("Override default font settings"));
+
+        //useCustomIconTheme = new JCheckBox(Globals.lang("Use custom icon theme"));
+        //customIconThemeFile = new JTextField();
+        FormLayout layout = new FormLayout
+                ("1dlu, 8dlu, left:pref, 4dlu, fill:pref, 4dlu, fill:60dlu, 4dlu, fill:pref",
+                        "");
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+        builder.setLeadingColumnOffset(2);
+        JLabel lab;
+        builder.appendSeparator(Globals.lang("General"));
+        JPanel p1 = new JPanel();
+        lab = new JLabel(Globals.lang("Menu and label font size") + ":");
+        p1.add(lab);
+        p1.add(fontSize);
+        builder.append(p1);
+        builder.nextLine();
+        builder.append(overrideFonts);
+        builder.nextLine();
+        builder.appendSeparator(Globals.lang("Table appearance"));
+        //builder.append(antialias);
+        //builder.nextLine();
+        builder.append(colorCodes);
+        builder.nextLine();
+        builder.append(fontButton);
+        builder.nextLine();
+        builder.appendSeparator(Globals.lang("Table and entry editor colors"));
+        builder.append(colorPanel);
+        /*builder.appendSeparator(Globals.lang("Custom icon theme"));
+        builder.append(useCustomIconTheme);
+        builder.nextLine();
+        JPanel p2 = new JPanel();
+        lab = new JLabel(Globals.lang("Custom icon theme file")+":");
+        p2.add(lab);
+        p2.add(customIconThemeFile);
+        BrowseAction browse = new BrowseAction(null, customIconThemeFile, false);
+        JButton browseBut = new JButton(Globals.lang("Browse"));
+        browseBut.addActionListener(browse);
+        p2.add(browseBut);
+        builder.append(p2);
+          */
+
+    JPanel upper = new JPanel(),
+        sort = new JPanel(),
+        namesp = new JPanel(),
+            iconCol = new JPanel();
+    upper.setLayout(gbl);
+    sort.setLayout(gbl);
+        namesp.setLayout(gbl);
+        iconCol.setLayout(gbl);
+
+
+    overrideFonts.addActionListener(new ActionListener() {
+        public void actionPerformed(ActionEvent e) {
+            fontSize.setEnabled(overrideFonts.isSelected());
+        }
+    });
+
+    fontButton.addActionListener(new ActionListener() {
+        public void actionPerformed(ActionEvent e) {
+            Font f=new FontSelectorDialog
+                (null, GUIGlobals.CURRENTFONT).getSelectedFont();
+            if(f==null)
+                return;
+            else
+                font = f;
+        }
+        });
+    /*menuFontButton.addActionListener(new ActionListener() {
+         public void actionPerformed(ActionEvent e) {
+             Font f=new FontSelectorDialog
+                 (null, menuFont).getSelectedFont();
+             if(f==null)
+                 return;
+             else
+                 menuFont = f;
+         }
+         });*/
+
+    JPanel pan = builder.getPanel();
+    pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+    add(pan, BorderLayout.CENTER);
+    }
+
+    public void setValues() {
+        colorCodes.setSelected(_prefs.getBoolean("tableColorCodesOn"));
+        //antialias.setSelected(_prefs.getBoolean("antialias"));
+        fontSize.setText("" + _prefs.getInt("menuFontSize"));
+        oldMenuFontSize = _prefs.getInt("menuFontSize");
+        overrideFonts.setSelected(_prefs.getBoolean("overrideDefaultFonts"));
+        oldOverrideFontSize = overrideFonts.isSelected();
+        fontSize.setEnabled(overrideFonts.isSelected());
+        //useCustomIconTheme.setSelected(_prefs.getBoolean("useCustomIconTheme"));
+        //customIconThemeFile.setText(_prefs.get("customIconThemeFile"));
+        colorPanel.setValues();
+    }
+
+    /**
+     * Store changes to table preferences. This method is called when
+     * the user clicks Ok.
+     *
+     */
+    public void storeSettings() {
+
+        _prefs.putBoolean("tableColorCodesOn", colorCodes.isSelected());
+        //_prefs.putBoolean("antialias", antialias.isSelected());
+        _prefs.put("fontFamily", font.getFamily());
+        _prefs.putInt("fontStyle", font.getStyle());
+        _prefs.putInt("fontSize", font.getSize());
+        _prefs.putBoolean("overrideDefaultFonts", overrideFonts.isSelected());
+        GUIGlobals.CURRENTFONT = font;
+        colorPanel.storeSettings();
+        try {
+            int size = Integer.parseInt(fontSize.getText());
+            if ((overrideFonts.isSelected() != oldOverrideFontSize) ||
+                    (size != oldMenuFontSize)) {
+                _prefs.putInt("menuFontSize", size);
+                JOptionPane.showMessageDialog(null, 
+                		Globals.lang("You have changed the menu and label font size.")
+                		.concat(" ")
+                        .concat(Globals.lang("You must restart JabRef for this to come into effect.")), 
+                        Globals.lang("Changed font settings"),
+                        JOptionPane.WARNING_MESSAGE);
+            }
+
+        } catch (NumberFormatException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    public boolean readyToClose() {
+        try {
+            // Test if font size is a number:
+            Integer.parseInt(fontSize.getText());
+        } catch (NumberFormatException ex) {
+            JOptionPane.showMessageDialog
+                    (null, Globals.lang("You must enter an integer value in the text field for") + " '" +
+                            Globals.lang("Menu and label font size") + "'", Globals.lang("Changed font settings"),
+                            JOptionPane.ERROR_MESSAGE);
+            return false;
+        }
+        return true;
+
+    }
+
+	public String getTabName() {
+	    return Globals.lang("Appearance");
+	}  
+}
diff --git a/src/java/net/sf/jabref/AuthorList.java b/src/java/net/sf/jabref/AuthorList.java
index cf97f83..f8dbc5a 100644
--- a/src/java/net/sf/jabref/AuthorList.java
+++ b/src/java/net/sf/jabref/AuthorList.java
@@ -1,1279 +1,1279 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import net.sf.jabref.export.layout.format.CreateDocBookAuthors;
-
-import java.util.Vector;
-import java.util.WeakHashMap;
-
-/**
- * This is an immutable class representing information of either <CODE>author</CODE>
- * or <CODE>editor</CODE> field in bibtex record.
- * <p>
- * Constructor performs parsing of raw field text and stores preformatted data.
- * Various accessor methods return author/editor field in different formats.
- * <p>
- * Parsing algorithm is designed to satisfy two requirements: (a) when author's
- * name is typed correctly, the result should coincide with the one of BiBTeX;
- * (b) for erroneous names, output should be reasonable (but may differ from
- * BiBTeX output). The following rules are used:
- * <ol>
- * <li> 'author field' is a sequence of tokens;
- * <ul>
- * <li> tokens are separated by sequences of whitespaces (<CODE>Character.isWhitespace(c)==true</CODE>),
- * commas (,), dashes (-), and tildas (~);
- * <li> every comma separates tokens, while sequences of other separators are
- * equivalent to a single separator; for example: "a - b" consists of 2 tokens
- * ("a" and "b"), while "a,-,b" consists of 3 tokens ("a", "", and "b")
- * <li> anything enclosed in braces belonges to a single token; for example:
- * "abc x{a,b,-~ c}x" consists of 2 tokens, while "abc xa,b,-~ cx" consists of 4
- * tokens ("abc", "xa","b", and "cx");
- * <li> a token followed immediately by a dash is "dash-terminated" token, and
- * all other tokens are "space-terminated" tokens; for example: in "a-b- c - d"
- * tokens "a" and "b" are dash-terminated and "c" and "d" are space-terminated;
- * <li> for the purposes of splitting of 'author name' into parts and
- * construction of abbreviation of first name, one needs definitions of first
- * latter of a token, case of a token, and abbreviation of a token:
- * <ul>
- * <li> 'first letter' of a token is the first letter character (<CODE>Character.isLetter(c)==true</CODE>)
- * that does not belong to a sequence of letters that immediately follows "\"
- * character, with one exception: if "\" is followed by "aa", "AA", "ae", "AE",
- * "l", "L", "o", "O", "oe", "OE", "i", or "j" followed by non-letter, the
- * 'first letter' of a token is a letter that follows "\"; for example: in
- * "a{x}b" 'first letter' is "a", in "{\"{U}}bel" 'first letter' is "U", in
- * "{\noopsort{\"o}}xyz" 'first letter' is "o", in "{\AE}x" 'first letter' is
- * "A", in "\aex\ijk\Oe\j" 'first letter' is "j"; if there is no letter
- * satisfying the above rule, 'first letter' is undefined;
- * <li> token is "lower-case" token, if its first letter id defined and is
- * lower-case (<CODE>Character.isLowerCase(c)==true</CODE>), and token is
- * "upper-case" token otherwise;
- * <li> 'abbreviation' of a token is the shortest prefix of the token that (a)
- * contains 'first letter' and (b) is braces-balanced; if 'first letter' is
- * undefined, 'abbreviation' is the token itself; in the above examples,
- * 'abbreviation's are "a", "{\"{U}}", "{\noopsort{\"o}}", "{\AE}",
- * "\aex\ijk\Oe\j";
- * </ul>
- * <li> the behavior based on the above definitions will be erroneous only in
- * one case: if the first-name-token is "{\noopsort{A}}john", we abbreviate it
- * as "{\noopsort{A}}.", while BiBTeX produces "j."; fixing this problem,
- * however, requires processing of the preabmle;
- * </ul>
- * <li> 'author name's in 'author field' are subsequences of tokens separated by
- * token "and" ("and" is case-insensitive); if 'author name' is an empty
- * sequence of tokens, it is ignored; for examle, both "John Smith and Peter
- * Black" and "and and John Smith and and Peter Black" consists of 2 'author
- * name's "Johm Smith" and "Peter Black" (in erroneous situations, this is a bit
- * different from BiBTeX behavior);
- * <li> 'author name' consists of 'first-part', 'von-part', 'last-part', and
- * 'junior-part', each of which is a sequence of tokens; how a sequence of
- * tokens has to be splitted into these parts, depends the number of commas:
- * <ul>
- * <li> no commas, all tokens are upper-case: 'junior-part' and 'von-part' are
- * empty, 'last-part' consist of the last token, 'first-part' consists of all
- * other tokens ('first-part' is empty, if 'author name' consists of a single
- * token); for example, in "John James Smith", 'last-part'="Smith" and
- * 'first-part'="John James";
- * <li> no commas, there exists lower-case token: 'junior-part' is empty,
- * 'first-part' consists of all upper-case tokens before the first lower-case
- * token, 'von-part' consists of lower-case tokens starting the first lower-case
- * token and ending the lower-case token that is followed by upper-case token,
- * 'last-part' consists of the rest of tokens; note that both 'first-part' and
- * 'latst-part' may be empty and 'last-part' may contain lower-case tokens; for
- * example: in "von der", 'first-part'='last-part'="", 'von-part'="von der"; in
- * "Charles Louis Xavier Joseph de la Vall{\'e}e la Poussin",
- * 'first-part'="Charles Louis Xavier Joseph", 'von-part'="de la",
- * 'last-part'="Vall{\'e}e la Poussin";
- * <li> one comma: 'junior-part' is empty, 'first-part' consists of all tokens
- * after comma, 'von-part' consists of the longest sequence of lower-case tokens
- * in the very beginning, 'last-part' consists of all tokens after 'von-part'
- * and before comma; note that any part can be empty; for example: in "de la
- * Vall{\'e}e la Poussin, Charles Louis Xavier Joseph", 'first-part'="Charles
- * Louis Xavier Joseph", 'von-part'="de la", 'last-part'="Vall{\'e}e la
- * Poussin"; in "Joseph de la Vall{\'e}e la Poussin, Charles Louis Xavier",
- * 'first-part'="Charles Louis Xavier", 'von-part'="", 'last-part'="Joseph de la
- * Vall{\'e}e la Poussin";
- * <li> two or more commas (any comma after the second one is ignored; it merely
- * separates tokens): 'junior-part' consists of all tokens between first and
- * second commas, 'first-part' consists of all tokens after the second comma,
- * tokens before the first comma are splitted into 'von-part' and 'last-part'
- * similarly to the case of one comma; for example: in "de la Vall{\'e}e
- * Poussin, Jr., Charles Louis Xavier Joseph", 'first-part'="Charles Louis
- * Xavier Joseph", 'von-part'="de la", 'last-part'="Vall{\'e}e la Poussin", and
- * 'junior-part'="Jr.";
- * </ul>
- * <li> when 'first-part', 'last-part', 'von-part', or 'junior-part' is
- * reconstructed from tokens, tokens in a part are separated either by space or
- * by dash, depending on whether the token before the separator was
- * space-terminated or dash-terminated; for the last token in a part it does not
- * matter whether it was dash- or space-terminated;
- * <li> when 'first-part' is abbreviated, each token is replaced by its
- * abbreviation followed by a period; separators are the same as in the case of
- * non-abbreviated name; for example: in "Heinrich-{\"{U}}bel Kurt von Minich",
- * 'first-part'="Heinrich-{\"{U}}bel Kurt", and its abbreviation is "H.-{\"{U}}.
- * K."
- * </ol>
- * 
- * @see tests.net.sf.jabref.AuthorListTest Testcases for this class.
- */
-public class AuthorList {
-
-	private Vector<Author> authors; 
-
-	// Variables for storing computed strings, so they only need be created
-	// once:
-	private String authorsNatbib = null, authorsFirstFirstAnds = null,
-		authorsAlph = null;
-
-	private String[] authorsFirstFirst = new String[4], authorsLastOnly = new String[2],
-	authorLastFirstAnds = new String[2], 
-	authorsLastFirst = new String[4],
-    authorsLastFirstFirstLast = new String[2];
-
-
-	// The following variables are used only during parsing
-
-	private String orig; // the raw bibtex author/editor field
-
-	// the following variables are updated by getToken procedure
-	private int token_start; // index in orig
-
-	private int token_end; // to point 'abc' in ' abc xyz', start=2 and end=5
-
-	// the following variables are valid only if getToken returns TOKEN_WORD
-	private int token_abbr; // end of token abbreviation (always: token_start <
-
-	// token_abbr <= token_end)
-
-	private char token_term; // either space or dash
-
-	private boolean token_case; // true if upper-case token, false if lower-case
-
-	// token
-
-	// Tokens of one author name.
-	// Each token occupies TGL consecutive entries in this vector (as described
-	// below)
-	private Vector<Object> tokens;
-
-	private static final int TOKEN_GROUP_LENGTH = 4; // number of entries for
-
-	// a token
-
-	// the following are offsets of an entry in a group of entries for one token
-	private static final int OFFSET_TOKEN = 0; // String -- token itself;
-
-	private static final int OFFSET_TOKEN_ABBR = 1; // String -- token
-
-	// abbreviation;
-
-	private static final int OFFSET_TOKEN_TERM = 2; // Character -- token
-
-	// terminator (either " " or
-	// "-")
-
-	// private static final int OFFSET_TOKEN_CASE = 3; // Boolean --
-	// true=uppercase, false=lowercase
-	// the following are indices in 'tokens' vector created during parsing of
-	// author name
-	// and later used to properly split author name into parts
-	int von_start, // first lower-case token (-1 if all tokens upper-case)
-		last_start, // first upper-case token after first lower-case token (-1
-		// if does not exist)
-		comma_first, // token after first comma (-1 if no commas)
-		comma_second; // token after second comma (-1 if no commas or only one
-
-	// comma)
-
-	// Token types (returned by getToken procedure)
-	private static final int TOKEN_EOF = 0;
-
-	private static final int TOKEN_AND = 1;
-
-	private static final int TOKEN_COMMA = 2;
-
-	private static final int TOKEN_WORD = 3;
-
-	// Constant Hashtable containing names of TeX special characters
-	private static final java.util.HashSet<String> tex_names = new java.util.HashSet<String>();
-	// and static constructor to initialize it
-	static {
-		tex_names.add("aa");
-		tex_names.add("ae");
-		tex_names.add("l");
-		tex_names.add("o");
-		tex_names.add("oe");
-		tex_names.add("i");
-		tex_names.add("AA");
-		tex_names.add("AE");
-		tex_names.add("L");
-		tex_names.add("O");
-		tex_names.add("OE");
-		tex_names.add("j");
-	}
-
-	static WeakHashMap<String, AuthorList> authorCache = new WeakHashMap<String, AuthorList>();
-
-	/**
-	 * Parses the parameter strings and stores preformatted author information.
-	 * 
-	 * Don't call this constructor directly but rather use the getAuthorList()
-	 * method which caches its results.
-	 * 
-	 * @param bibtex_authors
-	 *            contents of either <CODE>author</CODE> or <CODE>editor</CODE>
-	 *            bibtex field.
-	 */
-	protected AuthorList(String bibtex_authors) {
-		authors = new Vector<Author>(5); // 5 seems to be reasonable initial size
-		orig = bibtex_authors; // initialization
-		token_start = 0;
-		token_end = 0; // of parser
-		while (token_start < orig.length()) {
-			Author author = getAuthor();
-			if (author != null)
-				authors.add(author);
-		}
-		// clean-up
-		orig = null;
-		tokens = null;
-
-	}
-
-	/**
-	 * Retrieve an AuthorList for the given string of authors or editors.
-	 * 
-	 * This function tries to cache AuthorLists by string passed in.
-	 * 
-	 * @param authors
-	 *            The string of authors or editors in bibtex format to parse.
-	 * @return An AuthorList object representing the given authors.
-	 */
-	public static AuthorList getAuthorList(String authors) {
-		AuthorList authorList = authorCache.get(authors);
-		if (authorList == null) {
-			authorList = new AuthorList(authors);
-			authorCache.put(authors, authorList);
-		}
-		return authorList;
-	}
-
-	/**
-	 * This is a convenience method for getAuthorsFirstFirst()
-	 * 
-	 * @see net.sf.jabref.AuthorList#getAuthorsFirstFirst
-	 */
-	public static String fixAuthor_firstNameFirstCommas(String authors, boolean abbr,
-		boolean oxfordComma) {
-		return getAuthorList(authors).getAuthorsFirstFirst(abbr, oxfordComma);
-	}
-
-	/**
-	 * This is a convenience method for getAuthorsFirstFirstAnds()
-	 * 
-	 * @see net.sf.jabref.AuthorList#getAuthorsFirstFirstAnds
-	 */
-	public static String fixAuthor_firstNameFirst(String authors) {
-		return getAuthorList(authors).getAuthorsFirstFirstAnds();
-	}
-
-	/**
-	 * This is a convenience method for getAuthorsLastFirst()
-	 * 
-	 * @see net.sf.jabref.AuthorList#getAuthorsLastFirst
-	 */
-	public static String fixAuthor_lastNameFirstCommas(String authors, boolean abbr,
-		boolean oxfordComma) {
-		return getAuthorList(authors).getAuthorsLastFirst(abbr, oxfordComma);
-	}
-
-	/**
-	 * This is a convenience method for getAuthorsLastFirstAnds(true)
-	 * 
-	 * @see net.sf.jabref.AuthorList#getAuthorsLastFirstAnds
-	 */
-	public static String fixAuthor_lastNameFirst(String authors) {
-		return getAuthorList(authors).getAuthorsLastFirstAnds(false);
-	}
-	
-	/**
-	 * This is a convenience method for getAuthorsLastFirstAnds()
-	 * 
-	 * @see net.sf.jabref.AuthorList#getAuthorsLastFirstAnds
-	 */
-	public static String fixAuthor_lastNameFirst(String authors, boolean abbreviate) {
-		return getAuthorList(authors).getAuthorsLastFirstAnds(abbreviate);
-	}
-
-	/**
-	 * This is a convenience method for getAuthorsLastOnly()
-	 * 
-	 * @see net.sf.jabref.AuthorList#getAuthorsLastOnly
-	 */
-	public static String fixAuthor_lastNameOnlyCommas(String authors, boolean oxfordComma) {
-		return getAuthorList(authors).getAuthorsLastOnly(oxfordComma);
-	}
-
-	/**
-	 * This is a convenience method for getAuthorsForAlphabetization()
-	 * 
-	 * @see net.sf.jabref.AuthorList#getAuthorsForAlphabetization
-	 */
-	public static String fixAuthorForAlphabetization(String authors) {
-		return getAuthorList(authors).getAuthorsForAlphabetization();
-	}
-
-	/**
-	 * This is a convenience method for getAuthorsNatbib()
-	 * 
-	 * @see net.sf.jabref.AuthorList#getAuthorsNatbib
-	 */
-	public static String fixAuthor_Natbib(String authors) {
-		return AuthorList.getAuthorList(authors).getAuthorsNatbib();
-	}
-
-	/**
-	 * Parses one author name and returns preformatted information.
-	 * 
-	 * @return Preformatted author name; <CODE>null</CODE> if author name is
-	 *         empty.
-	 */
-	private Author getAuthor() {
-
-		tokens = new Vector<Object>(); // initialization
-		von_start = -1;
-		last_start = -1;
-		comma_first = -1;
-		comma_second = -1;
-
-		// First step: collect tokens in 'tokens' Vector and calculate indices
-		token_loop: while (true) {
-			int token = getToken();
-			cases: switch (token) {
-			case TOKEN_EOF:
-			case TOKEN_AND:
-				break token_loop;
-			case TOKEN_COMMA:
-				if (comma_first < 0)
-					comma_first = tokens.size();
-				else if (comma_second < 0)
-					comma_second = tokens.size();
-				break cases;
-			case TOKEN_WORD:
-				tokens.add(orig.substring(token_start, token_end));
-				tokens.add(orig.substring(token_start, token_abbr));
-				tokens.add(new Character(token_term));
-				tokens.add(Boolean.valueOf(token_case));
-				if (comma_first >= 0)
-					break cases;
-				if (last_start >= 0)
-					break cases;
-				if (von_start < 0) {
-					if (!token_case) {
-						von_start = tokens.size() - TOKEN_GROUP_LENGTH;
-						break cases;
-					}
-				} else if (last_start < 0 && token_case) {
-					last_start = tokens.size() - TOKEN_GROUP_LENGTH;
-					break cases;
-				}
-			}
-		}// end token_loop
-
-        // Second step: split name into parts (here: calculate indices
-		// of parts in 'tokens' Vector)
-		if (tokens.size() == 0)
-			return null; // no author information
-
-
-		// the following negatives indicate absence of the corresponding part
-		int first_part_start = -1, von_part_start = -1, last_part_start = -1, jr_part_start = -1;
-		int first_part_end = 0, von_part_end = 0, last_part_end = 0, jr_part_end = 0;
-        boolean jrAsFirstname = false;
-		if (comma_first < 0) { // no commas
-			if (von_start < 0) { // no 'von part'
-				last_part_end = tokens.size();
-				last_part_start = tokens.size() - TOKEN_GROUP_LENGTH;
-				int index = tokens.size() - 2 * TOKEN_GROUP_LENGTH + OFFSET_TOKEN_TERM;
-				if (index > 0) {
-					Character ch = (Character)tokens.elementAt(index);
-					if (ch.charValue() == '-')
-						last_part_start -= TOKEN_GROUP_LENGTH;
-				}
-				first_part_end = last_part_start;
-				if (first_part_end > 0) {
-					first_part_start = 0;
-				}
-			} else { // 'von part' is present
-				if (last_start >= 0) {
-					last_part_end = tokens.size();
-					last_part_start = last_start;
-					von_part_end = last_part_start;
-				} else {
-					von_part_end = tokens.size();
-				}
-				von_part_start = von_start;
-				first_part_end = von_part_start;
-				if (first_part_end > 0)
-					first_part_start = 0;
-			}
-		} else { // commas are present: it affects only 'first part' and
-			// 'junior part'
-			first_part_end = tokens.size();
-			if (comma_second < 0) { // one comma
-				if (comma_first < first_part_end) {
-                    first_part_start = comma_first;
-                    //if (((String)tokens.get(first_part_start)).toLowerCase().startsWith("jr."))
-                    //    jrAsFirstname = true;
-                }
-			} else { // two or more commas
-				if (comma_second < first_part_end)
-					first_part_start = comma_second;
-				jr_part_end = comma_second;
-				if (comma_first < jr_part_end)
-					jr_part_start = comma_first;
-			}
-			if (von_start != 0) { // no 'von part'
-				last_part_end = comma_first;
-				if (last_part_end > 0)
-					last_part_start = 0;
-			} else { // 'von part' is present
-				if (last_start < 0) {
-					von_part_end = comma_first;
-				} else {
-					last_part_end = comma_first;
-					last_part_start = last_start;
-					von_part_end = last_part_start;
-				}
-				von_part_start = 0;
-			}
-		}
-
-        if ((first_part_start == -1) && (last_part_start == -1) && (von_part_start != -1)) {
-            // There is no first or last name, but we have a von part. This is likely
-            // to indicate a single-entry name without an initial capital letter, such
-            // as "unknown".
-            // We make the von part the last name, to facilitate handling by last-name formatters:
-            last_part_start = von_part_start;
-            last_part_end = von_part_end;
-            von_part_start = -1;
-            von_part_end = -1;
-        }
-        if (jrAsFirstname) {
-            // This variable, if set, indicates that the first name starts with "jr.", which
-            // is an indication that we may have a name formatted as "Firstname Lastname, Jr."
-            // which is an acceptable format for BibTeX.
-        }
-
-		// Third step: do actual splitting, construct Author object
-		return new Author((first_part_start < 0 ? null : concatTokens(first_part_start,
-			first_part_end, OFFSET_TOKEN, false)), (first_part_start < 0 ? null : concatTokens(
-			first_part_start, first_part_end, OFFSET_TOKEN_ABBR, true)), (von_part_start < 0 ? null
-			: concatTokens(von_part_start, von_part_end, OFFSET_TOKEN, false)),
-			(last_part_start < 0 ? null : concatTokens(last_part_start, last_part_end,
-				OFFSET_TOKEN, false)), (jr_part_start < 0 ? null : concatTokens(jr_part_start,
-				jr_part_end, OFFSET_TOKEN, false)));
-	}
-
-	/**
-	 * Concatenates list of tokens from 'tokens' Vector. Tokens are separated by
-	 * spaces or dashes, dependeing on stored in 'tokens'. Callers always ensure
-	 * that start < end; thus, there exists at least one token to be
-	 * concatenated.
-	 * 
-	 * @param start
-	 *            index of the first token to be concatenated in 'tokens' Vector
-	 *            (always divisible by TOKEN_GROUP_LENGTH).
-	 * @param end
-	 *            index of the first token not to be concatenated in 'tokens'
-	 *            Vector (always divisible by TOKEN_GROUP_LENGTH).
-	 * @param offset
-	 *            offset within token group (used to request concatenation of
-	 *            either full tokens or abbreviation).
-	 * @param dot_after
-	 *            <CODE>true</CODE> -- add period after each token, <CODE>false</CODE> --
-	 *            do not add.
-	 * @return the result of concatenation.
-	 */
-	private String concatTokens(int start, int end, int offset, boolean dot_after) {
-		StringBuffer res = new StringBuffer();
-		// Here we always have start < end
-		res.append((String) tokens.get(start + offset));
-		if (dot_after)
-			res.append('.');
-		start += TOKEN_GROUP_LENGTH;
-		while (start < end) {
-			res.append(tokens.get(start - TOKEN_GROUP_LENGTH + OFFSET_TOKEN_TERM));
-			res.append((String) tokens.get(start + offset));
-			if (dot_after)
-				res.append('.');
-			start += TOKEN_GROUP_LENGTH;
-		}
-		return res.toString();
-	}
-
-	/**
-	 * Parses the next token.
-	 * <p>
-	 * The string being parsed is stored in global variable <CODE>orig</CODE>,
-	 * and position which parsing has to start from is stored in global variable
-	 * <CODE>token_end</CODE>; thus, <CODE>token_end</CODE> has to be set
-	 * to 0 before the first invocation. Procedure updates <CODE>token_end</CODE>;
-	 * thus, subsequent invocations do not require any additional variable
-	 * settings.
-	 * <p>
-	 * The type of the token is returned; if it is <CODE>TOKEN_WORD</CODE>,
-	 * additional information is given in global variables <CODE>token_start</CODE>,
-	 * <CODE>token_end</CODE>, <CODE>token_abbr</CODE>, <CODE>token_term</CODE>,
-	 * and <CODE>token_case</CODE>; namely: <CODE>orig.substring(token_start,token_end)</CODE>
-	 * is the thext of the token, <CODE>orig.substring(token_start,token_abbr)</CODE>
-	 * is the token abbreviation, <CODE>token_term</CODE> contains token
-	 * terminator (space or dash), and <CODE>token_case</CODE> is <CODE>true</CODE>,
-	 * if token is upper-case and <CODE>false</CODE> if token is lower-case.
-	 * 
-	 * @return <CODE>TOKEN_EOF</CODE> -- no more tokens, <CODE>TOKEN_COMMA</CODE> --
-	 *         token is comma, <CODE>TOKEN_AND</CODE> -- token is the word
-	 *         "and" (or "And", or "aND", etc.), <CODE>TOKEN_WORD</CODE> --
-	 *         token is a word; additional information is given in global
-	 *         variables <CODE>token_start</CODE>, <CODE>token_end</CODE>,
-	 *         <CODE>token_abbr</CODE>, <CODE>token_term</CODE>, and
-	 *         <CODE>token_case</CODE>.
-	 */
-	private int getToken() {
-		token_start = token_end;
-		while (token_start < orig.length()) {
-			char c = orig.charAt(token_start);
-			if (!(c == '~' || c == '-' || Character.isWhitespace(c)))
-				break;
-			token_start++;
-		}
-		token_end = token_start;
-		if (token_start >= orig.length())
-			return TOKEN_EOF;
-		if (orig.charAt(token_start) == ',') {
-			token_end++;
-			return TOKEN_COMMA;
-		}
-		token_abbr = -1;
-		token_term = ' ';
-		token_case = true;
-		int braces_level = 0;
-		int current_backslash = -1;
-		boolean first_letter_is_found = false;
-		while (token_end < orig.length()) {
-			char c = orig.charAt(token_end);
-			if (c == '{') {
-				braces_level++;
-			}
-			if (braces_level > 0)
-				if (c == '}')
-					braces_level--;
-			if (first_letter_is_found && token_abbr < 0 && braces_level == 0)
-				token_abbr = token_end;
-			if (!first_letter_is_found && current_backslash < 0 && Character.isLetter(c)) {
-                if (braces_level == 0)
-				    token_case = Character.isUpperCase(c);
-                else
-                    // If this is a particle in braces, always treat it as if it starts with
-                    // an upper case letter. Otherwise a name such as "{van den Bergen}, Hans"
-                    // will not yield a proper last name:
-                    token_case = true;
-				first_letter_is_found = true;
-			}
-			if (current_backslash >= 0 && !Character.isLetter(c)) {
-				if (!first_letter_is_found) {
-					String tex_cmd_name = orig.substring(current_backslash + 1, token_end);
-					if (tex_names.contains(tex_cmd_name)) {
-						token_case = Character.isUpperCase(tex_cmd_name.charAt(0));
-						first_letter_is_found = true;
-					}
-				}
-				current_backslash = -1;
-			}
-			if (c == '\\')
-				current_backslash = token_end;
-			if (braces_level == 0)
-				if (c == ',' || c == '~' || c=='-' || Character.isWhitespace(c))
-					break;
-			// Morten Alver 18 Apr 2006: Removed check for hyphen '-' above to
-			// prevent
-			// problems with names like Bailey-Jones getting broken up and
-			// sorted wrong.
-			// Aaron Chen 14 Sep 2008: Enable hyphen check for first names like Chang-Chin
-			token_end++;
-		}
-		if (token_abbr < 0)
-			token_abbr = token_end;
-		if (token_end < orig.length() && orig.charAt(token_end) == '-')
-			token_term = '-';
-		if (orig.substring(token_start, token_end).equalsIgnoreCase("and"))
-			return TOKEN_AND;
-		else
-			return TOKEN_WORD;
-	}
-
-	/**
-	 * Returns the number of author names in this object.
-	 * 
-	 * @return the number of author names in this object.
-	 */
-	public int size() {
-		return authors.size();
-	}
-
-	/**
-	 * Returns the <CODE>Author</CODE> object for the i-th author.
-	 * 
-	 * @param i
-	 *            Index of the author (from 0 to <CODE>size()-1</CODE>).
-	 * @return the <CODE>Author</CODE> object.
-	 */
-	public Author getAuthor(int i) {
-		return authors.get(i);
-	}
-
-	/**
-	 * Returns the list of authors in "natbib" format.
-	 * <p>
-	 * <ul>
-	 * <li>"John Smith" -> "Smith"</li>
-	 * <li>"John Smith and Black Brown, Peter" ==> "Smith and Black Brown"</li>
-	 * <li>"John von Neumann and John Smith and Black Brown, Peter" ==> "von
-	 * Neumann et al." </li>
-	 * </ul>
-	 * 
-	 * @return formatted list of authors.
-	 */
-	public String getAuthorsNatbib() {
-		// Check if we've computed this before:
-		if (authorsNatbib != null)
-			return authorsNatbib;
-
-		StringBuffer res = new StringBuffer();
-		if (size() > 0) {
-			res.append(getAuthor(0).getLastOnly());
-			if (size() == 2) {
-				res.append(" and ");
-				res.append(getAuthor(1).getLastOnly());
-			} else if (size() > 2) {
-				res.append(" et al.");
-			}
-		}
-		authorsNatbib = res.toString();
-		return authorsNatbib;
-	}
-
-	/**
-	 * Returns the list of authors separated by commas with last name only; If
-	 * the list consists of three or more authors, "and" is inserted before the
-	 * last author's name.
-	 * <p>
-	 * 
-	 * <ul>
-	 * <li> "John Smith" ==> "Smith"</li>
-	 * <li> "John Smith and Black Brown, Peter" ==> "Smith and Black Brown"</li>
-	 * <li> "John von Neumann and John Smith and Black Brown, Peter" ==> "von
-	 * Neumann, Smith and Black Brown".</li>
-	 * </ul>
-	 * 
-	 * @param oxfordComma
-	 *            Whether to put a comma before the and at the end.
-	 * 
-	 * @see http://en.wikipedia.org/wiki/Serial_comma For an detailed
-	 *      explaination about the Oxford comma.
-	 * 
-	 * @return formatted list of authors.
-	 */
-	public String getAuthorsLastOnly(boolean oxfordComma) {
-		int abbrInt = (oxfordComma ? 0 : 1);
-
-		// Check if we've computed this before:
-		if (authorsLastOnly[abbrInt] != null)
-			return authorsLastOnly[abbrInt];
-
-		StringBuffer res = new StringBuffer();
-		if (size() > 0) {
-			res.append(getAuthor(0).getLastOnly());
-			int i = 1;
-			while (i < size() - 1) {
-				res.append(", ");
-				res.append(getAuthor(i).getLastOnly());
-				i++;
-			}
-			if (size() > 2 && oxfordComma)
-				res.append(",");
-			if (size() > 1) {
-				res.append(" and ");
-				res.append(getAuthor(i).getLastOnly());
-			}
-		}
-		authorsLastOnly[abbrInt] = res.toString();
-		return authorsLastOnly[abbrInt];
-	}
-
-	/**
-	 * Returns the list of authors separated by commas with first names after
-	 * last name; first names are abbreviated or not depending on parameter. If
-	 * the list consists of three or more authors, "and" is inserted before the
-	 * last author's name.
-	 * <p>
-	 * 
-	 * <ul>
-	 * <li> "John Smith" ==> "Smith, John" or "Smith, J."</li>
-	 * <li> "John Smith and Black Brown, Peter" ==> "Smith, John and Black
-	 * Brown, Peter" or "Smith, J. and Black Brown, P."</li>
-	 * <li> "John von Neumann and John Smith and Black Brown, Peter" ==> "von
-	 * Neumann, John, Smith, John and Black Brown, Peter" or "von Neumann, J.,
-	 * Smith, J. and Black Brown, P.".</li>
-	 * </ul>
-	 * 
-	 * @param abbreviate
-	 *            whether to abbreivate first names.
-	 * 
-	 * @param oxfordComma
-	 *            Whether to put a comma before the and at the end.
-	 * 
-	 * @see http://en.wikipedia.org/wiki/Serial_comma For an detailed
-	 *      explaination about the Oxford comma.
-	 * 
-	 * @return formatted list of authors.
-	 */
-	public String getAuthorsLastFirst(boolean abbreviate, boolean oxfordComma) {
-		int abbrInt = (abbreviate ? 0 : 1);
-		abbrInt += (oxfordComma ? 0 : 2);
-
-		// Check if we've computed this before:
-		if (authorsLastFirst[abbrInt] != null)
-			return authorsLastFirst[abbrInt];
-
-		StringBuffer res = new StringBuffer();
-		if (size() > 0) {
-			res.append(getAuthor(0).getLastFirst(abbreviate));
-			int i = 1;
-			while (i < size() - 1) {
-				res.append(", ");
-				res.append(getAuthor(i).getLastFirst(abbreviate));
-				i++;
-			}
-			if (size() > 2 && oxfordComma)
-				res.append(",");
-			if (size() > 1) {
-				res.append(" and ");
-				res.append(getAuthor(i).getLastFirst(abbreviate));
-			}
-		}
-		authorsLastFirst[abbrInt] = res.toString();
-		return authorsLastFirst[abbrInt];
-	}
-	
-	public String toString(){
-		return getAuthorsLastFirstAnds(false);
-	}
-
-	/**
-	 * Returns the list of authors separated by "and"s with first names after
-	 * last name; first names are not abbreviated.
-	 * <p>
-	 * <ul>
-	 * <li>"John Smith" ==> "Smith, John"</li>
-	 * <li>"John Smith and Black Brown, Peter" ==> "Smith, John and Black
-	 * Brown, Peter"</li>
-	 * <li>"John von Neumann and John Smith and Black Brown, Peter" ==> "von
-	 * Neumann, John and Smith, John and Black Brown, Peter".</li>
-	 * </ul>
-	 * 
-	 * @return formatted list of authors.
-	 */
-	public String getAuthorsLastFirstAnds(boolean abbreviate) {
-		int abbrInt = (abbreviate ? 0 : 1);
-		// Check if we've computed this before:
-		if (authorLastFirstAnds[abbrInt] != null)
-			return authorLastFirstAnds[abbrInt];
-
-		StringBuffer res = new StringBuffer();
-		if (size() > 0) {
-			res.append(getAuthor(0).getLastFirst(abbreviate));
-			for (int i = 1; i < size(); i++) {
-				res.append(" and ");
-				res.append(getAuthor(i).getLastFirst(abbreviate));
-			}
-		}
-
-		authorLastFirstAnds[abbrInt] = res.toString();
-		return authorLastFirstAnds[abbrInt];
-	}
-
-	public String getAuthorsLastFirstFirstLastAnds(boolean abbreviate) {
-		int abbrInt = (abbreviate ? 0 : 1);
-		// Check if we've computed this before:
-		if (authorsLastFirstFirstLast[abbrInt] != null)
-			return authorsLastFirstFirstLast[abbrInt];
-
-		StringBuffer res = new StringBuffer();
-		if (size() > 0) {
-            res.append(getAuthor(0).getLastFirst(abbreviate));
-			for (int i = 1; i < size(); i++) {
-				res.append(" and ");
-				res.append(getAuthor(i).getFirstLast(abbreviate));
-			}
-		}
-
-		authorsLastFirstFirstLast[abbrInt] = res.toString();
-		return authorsLastFirstFirstLast[abbrInt];
-	}    
-
-	/**
-	 * Returns the list of authors separated by commas with first names before
-	 * last name; first names are abbreviated or not depending on parameter. If
-	 * the list consists of three or more authors, "and" is inserted before the
-	 * last author's name.
-	 * <p>
-	 * <ul>
-	 * <li>"John Smith" ==> "John Smith" or "J. Smith"</li>
-	 * <li>"John Smith and Black Brown, Peter" ==> "John Smith and Peter Black
-	 * Brown" or "J. Smith and P. Black Brown"</li>
-	 * <li> "John von Neumann and John Smith and Black Brown, Peter" ==> "John
-	 * von Neumann, John Smith and Peter Black Brown" or "J. von Neumann, J.
-	 * Smith and P. Black Brown" </li>
-	 * </ul>
-	 * 
-	 * @param abbr
-	 *            whether to abbreivate first names.
-	 * 
-	 * @param oxfordComma
-	 *            Whether to put a comma before the and at the end.
-	 * 
-	 * @see http://en.wikipedia.org/wiki/Serial_comma For an detailed
-	 *      explaination about the Oxford comma.
-	 * 
-	 * @return formatted list of authors.
-	 */
-	public String getAuthorsFirstFirst(boolean abbr, boolean oxfordComma) {
-
-		int abbrInt = (abbr ? 0 : 1);
-		abbrInt += (oxfordComma ? 0 : 2);
-
-		// Check if we've computed this before:
-		if (authorsFirstFirst[abbrInt] != null)
-			return authorsFirstFirst[abbrInt];
-
-		StringBuffer res = new StringBuffer();
-		if (size() > 0) {
-			res.append(getAuthor(0).getFirstLast(abbr));
-			int i = 1;
-			while (i < size() - 1) {
-				res.append(", ");
-				res.append(getAuthor(i).getFirstLast(abbr));
-				i++;
-			}
-			if (size() > 2 && oxfordComma)
-				res.append(",");
-			if (size() > 1) {
-				res.append(" and ");
-				res.append(getAuthor(i).getFirstLast(abbr));
-			}
-		}
-		authorsFirstFirst[abbrInt] = res.toString();
-		return authorsFirstFirst[abbrInt];
-	}
-	
-	/**
-	 * Compare this object with the given one. 
-	 * 
-	 * Will return true iff the other object is an Author and all fields are identical on a string comparison.
-	 */
-	public boolean equals(Object o) {
-		if (!(o instanceof AuthorList)) {
-			return false;
-		}
-		AuthorList a = (AuthorList) o;
-		
-		return this.authors.equals(a.authors);
-	}
-	
-	/**
-	 * Returns the list of authors separated by "and"s with first names before
-	 * last name; first names are not abbreviated.
-	 * <p>
-	 * <ul>
-	 * <li>"John Smith" ==> "John Smith"</li>
-	 * <li>"John Smith and Black Brown, Peter" ==> "John Smith and Peter Black
-	 * Brown"</li>
-	 * <li>"John von Neumann and John Smith and Black Brown, Peter" ==> "John
-	 * von Neumann and John Smith and Peter Black Brown" </li>
-	 * </li>
-	 * 
-	 * @return formatted list of authors.
-	 */
-	public String getAuthorsFirstFirstAnds() {
-		// Check if we've computed this before:
-		if (authorsFirstFirstAnds != null)
-			return authorsFirstFirstAnds;
-
-		StringBuffer res = new StringBuffer();
-		if (size() > 0) {
-			res.append(getAuthor(0).getFirstLast(false));
-			for (int i = 1; i < size(); i++) {
-				res.append(" and ");
-				res.append(getAuthor(i).getFirstLast(false));
-			}
-		}
-		authorsFirstFirstAnds = res.toString();
-		return authorsFirstFirstAnds;
-	}
-
-	/**
-	 * Returns the list of authors in a form suitable for alphabetization. This
-	 * means that last names come first, never preceded by "von" particles, and
-	 * that any braces are removed. First names are abbreviated so the same name
-	 * is treated similarly if abbreviated in one case and not in another. This
-	 * form is not intended to be suitable for presentation, only for sorting.
-	 * 
-	 * <p>
-	 * <ul>
-	 * <li>"John Smith" ==> "Smith, J.";</li>
-	 * 
-	 * 
-	 * @return formatted list of authors
-	 */
-	public String getAuthorsForAlphabetization() {
-		if (authorsAlph != null)
-			return authorsAlph;
-
-		StringBuffer res = new StringBuffer();
-		if (size() > 0) {
-			res.append(getAuthor(0).getNameForAlphabetization());
-			for (int i = 1; i < size(); i++) {
-				res.append(" and ");
-				res.append(getAuthor(i).getNameForAlphabetization());
-			}
-		}
-		authorsAlph = res.toString();
-		return authorsAlph;
-	}
-
-	/**
-	 * This is an immutable class that keeps information regarding single
-	 * author. It is just a container for the information, with very simple
-	 * methods to access it.
-	 * <p>
-	 * Current usage: only methods <code>getLastOnly</code>,
-	 * <code>getFirstLast</code>, and <code>getLastFirst</code> are used;
-	 * all other methods are provided for completeness.
-	 */
-	public static class Author {
-		
-		private final String first_part;
-
-		private final String first_abbr;
-
-		private final String von_part;
-
-		private final String last_part;
-
-		private final String jr_part;
-
-		/**
-		 * Compare this object with the given one. 
-		 * 
-		 * Will return true iff the other object is an Author and all fields are identical on a string comparison.
-		 */
-		public boolean equals(Object o) {
-			if (!(o instanceof Author)) {
-				return false;
-			}
-			Author a = (Author) o;
-			return Util.equals(first_part, a.first_part)
-					&& Util.equals(first_abbr, a.first_abbr)
-					&& Util.equals(von_part, a.von_part)
-					&& Util.equals(last_part, a.last_part)
-					&& Util.equals(jr_part, a.jr_part);
-		}
-		
-		/**
-		 * Creates the Author object. If any part of the name is absent, <CODE>null</CODE>
-		 * must be passes; otherwise other methods may return erroneous results.
-		 * 
-		 * @param first
-		 *            the first name of the author (may consist of several
-		 *            tokens, like "Charles Louis Xavier Joseph" in "Charles
-		 *            Louis Xavier Joseph de la Vall{\'e}e Poussin")
-		 * @param firstabbr
-		 *            the abbreviated first name of the author (may consist of
-		 *            several tokens, like "C. L. X. J." in "Charles Louis
-		 *            Xavier Joseph de la Vall{\'e}e Poussin"). It is a
-		 *            responsibility of the caller to create a reasonable
-		 *            abbreviation of the first name.
-		 * @param von
-		 *            the von part of the author's name (may consist of several
-		 *            tokens, like "de la" in "Charles Louis Xavier Joseph de la
-		 *            Vall{\'e}e Poussin")
-		 * @param last
-		 *            the lats name of the author (may consist of several
-		 *            tokens, like "Vall{\'e}e Poussin" in "Charles Louis Xavier
-		 *            Joseph de la Vall{\'e}e Poussin")
-		 * @param jr
-		 *            the junior part of the author's name (may consist of
-		 *            several tokens, like "Jr. III" in "Smith, Jr. III, John")
-		 */
-		public Author(String first, String firstabbr, String von, String last, String jr) {
-			first_part = removeStartAndEndBraces(first);
-			first_abbr = removeStartAndEndBraces(firstabbr);
-			von_part = removeStartAndEndBraces(von);
-			last_part = removeStartAndEndBraces(last);
-			jr_part = removeStartAndEndBraces(jr);
-		}
-		
-		/**
-		 * 
-		 * @return true if the brackets in s are properly paired
-		 */
-		private boolean properBrackets(String s) {
-			// nested construct is there, check for "proper" nesting
-			int i = 1;
-			int level = 0;
-			loop: do {
-				char c = s.charAt(i);
-				switch (c) {
-				case '{':
-					level++;
-					break;
-				case '}':
-					level--;
-					if (level==-1) {
-						// the improper nesting
-						break loop;
-					}
-					break;
-				}
-				i++;
-			} while (i<s.length()-1);
-			return (level == 0);
-		}
-		
-		/**
-		 * Removes start and end brace at a string
-		 * 
-		 * E.g., 
-		 *   * {Vall{\'e}e Poussin} -> Vall{\'e}e Poussin
-		 *   * {Vall{\'e}e} {Poussin} -> Vall{\'e}e Poussin
-		 *   * Vall{\'e}e Poussin -> Vall{\'e}e Poussin
-		 */
-		private String removeStartAndEndBraces(String name) {
-			if (name == null)
-				return null;
-			if (!name.contains("{"))
-				return name;
-			
-			String[] split = name.split(" ");
-			StringBuilder b = new StringBuilder();
-			for (String s: split) {
-				if (s.length()>2) {
-					if (s.startsWith("{") && s.endsWith("}")) {
-						// quick solution (which we don't do: just remove first "{" and last "}"
-						// however, it might be that s is like {A}bbb{c}, where braces may not be removed
-						
-						// inner 
-						String inner = s.substring(1, s.length()-1);
-						
-						if (inner.contains("}")) {
-							if (properBrackets(inner)) {
-								s = inner;
-							} else {
-								// no proper brackets if inner string: s is left untouched
-							}
-						} else {
-							//  no inner curly brackets found, no check needed, inner can just be used as s
-							s = inner;
-						}
-					}
-				}
-				b.append(s);
-				b.append(" ");
-			}
-			// delete last
-			b.deleteCharAt(b.length()-1);
-			
-			// now, all inner words are cleared
-			// case {word word word} remains
-			// as above, we have to be aware of {w}ord word wor{d} and {{w}ord word word}
-			
-			name = b.toString();
-			
-			if (name.startsWith("{") && name.endsWith("}")) {
-				String inner = name.substring(1, name.length()-1);
-				if (properBrackets(inner)) {
-					return inner;
-				} else {
-					return name;
-				}
-			} else {
-				return name;
-			}
-		}
-
-		/**
-		 * Returns the first name of the author stored in this object ("First").
-		 * 
-		 * @return first name of the author (may consist of several tokens)
-		 */
-		public String getFirst() {
-			return first_part;
-		}
-
-		/**
-		 * Returns the abbreviated first name of the author stored in this
-		 * object ("F.").
-		 * 
-		 * @return abbreviated first name of the author (may consist of several
-		 *         tokens)
-		 */
-		public String getFirstAbbr() {
-			return first_abbr;
-		}
-
-		/**
-		 * Returns the von part of the author's name stored in this object
-		 * ("von").
-		 * 
-		 * @return von part of the author's name (may consist of several tokens)
-		 */
-		public String getVon() {
-			return von_part;
-		}
-
-		/**
-		 * Returns the last name of the author stored in this object ("Last").
-		 * 
-		 * @return last name of the author (may consist of several tokens)
-		 */
-		public String getLast() {
-            return last_part;
-		}
-
-		/**
-		 * Returns the junior part of the author's name stored in this object
-		 * ("Jr").
-		 * 
-		 * @return junior part of the author's name (may consist of several
-		 *         tokens) or null if the author does not have a Jr. Part
-		 */
-		public String getJr() {
-			return jr_part;
-		}
-
-		/**
-		 * Returns von-part followed by last name ("von Last"). If both fields
-		 * were specified as <CODE>null</CODE>, the empty string <CODE>""</CODE>
-		 * is returned.
-		 * 
-		 * @return 'von Last'
-		 */
-		public String getLastOnly() {
-			if (von_part == null) {
-				return (last_part == null ? "" : last_part);
-			} else {
-				return (last_part == null ? von_part : von_part + " " + last_part);
-			}
-		}
-
-		/**
-		 * Returns the author's name in form 'von Last, Jr., First' with the
-		 * first name full or abbreviated depending on parameter.
-		 * 
-		 * @param abbr
-		 *            <CODE>true</CODE> - abbreviate first name, <CODE>false</CODE> -
-		 *            do not abbreviate
-		 * @return 'von Last, Jr., First' (if <CODE>abbr==false</CODE>) or
-		 *         'von Last, Jr., F.' (if <CODE>abbr==true</CODE>)
-		 */
-		public String getLastFirst(boolean abbr) {
-			String res = getLastOnly();
-			if (jr_part != null)
-				res += ", " + jr_part;
-			if (abbr) {
-				if (first_abbr != null)
-					res += ", " + first_abbr;
-			} else {
-				if (first_part != null)
-					res += ", " + first_part;
-			}
-			return res;
-		}
-
-		/**
-		 * Returns the author's name in form 'First von Last, Jr.' with the
-		 * first name full or abbreviated depending on parameter.
-		 * 
-		 * @param abbr
-		 *            <CODE>true</CODE> - abbreviate first name, <CODE>false</CODE> -
-		 *            do not abbreviate
-		 * @return 'First von Last, Jr.' (if <CODE>abbr==false</CODE>) or 'F.
-		 *         von Last, Jr.' (if <CODE>abbr==true</CODE>)
-		 */
-		public String getFirstLast(boolean abbr) {
-			String res = getLastOnly();
-			if (abbr) {
-				res = (first_abbr == null ? "" : first_abbr + " ") + res;
-			} else {
-				res = (first_part == null ? "" : first_part + " ") + res;
-			}
-			if (jr_part != null)
-				res += ", " + jr_part;
-			return res;
-		}
-
-		/**
-		 * Returns the name as "Last, Jr, F." omitting the von-part and removing
-		 * starting braces.
-		 * 
-		 * @return "Last, Jr, F." as described above or "" if all these parts
-		 *         are empty.
-		 */
-		public String getNameForAlphabetization() {
-			StringBuffer res = new StringBuffer();
-			if (last_part != null)
-				res.append(last_part);
-			if (jr_part != null) {
-				res.append(", ");
-				res.append(jr_part);
-			}
-			if (first_abbr != null) {
-				res.append(", ");
-				res.append(first_abbr);
-			}
-			while ((res.length() > 0) && (res.charAt(0) == '{'))
-				res.deleteCharAt(0);
-			return res.toString();
-		}
-	}// end Author
-
-
-    public static void main(String[] args) {
-        //String s = "Ford, Jr., Henry and Guy L. {Steele Jr.} and Olaf Nilsen, Jr.";
-        String s = "Olaf von Nilsen, Jr.";
-        AuthorList al = AuthorList.getAuthorList(s);
-        for (int i=0; i<al.size(); i++) {
-            Author a = al.getAuthor(i);
-            System.out.println((i+1)+": first = '"+a.getFirst()+"'");
-            System.out.println((i+1)+": last = '"+a.getLast()+"'");
-            System.out.println((i+1)+": jr = '"+a.getJr()+"'");
-            System.out.println((i+1)+": von = '"+a.getVon()+"'");
-        }
-
-        System.out.println((new CreateDocBookAuthors()).format(s));
-    }
-}// end AuthorList
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import net.sf.jabref.export.layout.format.CreateDocBookAuthors;
+
+import java.util.Vector;
+import java.util.WeakHashMap;
+
+/**
+ * This is an immutable class representing information of either <CODE>author</CODE>
+ * or <CODE>editor</CODE> field in bibtex record.
+ * <p>
+ * Constructor performs parsing of raw field text and stores preformatted data.
+ * Various accessor methods return author/editor field in different formats.
+ * <p>
+ * Parsing algorithm is designed to satisfy two requirements: (a) when author's
+ * name is typed correctly, the result should coincide with the one of BiBTeX;
+ * (b) for erroneous names, output should be reasonable (but may differ from
+ * BiBTeX output). The following rules are used:
+ * <ol>
+ * <li> 'author field' is a sequence of tokens;
+ * <ul>
+ * <li> tokens are separated by sequences of whitespaces (<CODE>Character.isWhitespace(c)==true</CODE>),
+ * commas (,), dashes (-), and tildas (~);
+ * <li> every comma separates tokens, while sequences of other separators are
+ * equivalent to a single separator; for example: "a - b" consists of 2 tokens
+ * ("a" and "b"), while "a,-,b" consists of 3 tokens ("a", "", and "b")
+ * <li> anything enclosed in braces belonges to a single token; for example:
+ * "abc x{a,b,-~ c}x" consists of 2 tokens, while "abc xa,b,-~ cx" consists of 4
+ * tokens ("abc", "xa","b", and "cx");
+ * <li> a token followed immediately by a dash is "dash-terminated" token, and
+ * all other tokens are "space-terminated" tokens; for example: in "a-b- c - d"
+ * tokens "a" and "b" are dash-terminated and "c" and "d" are space-terminated;
+ * <li> for the purposes of splitting of 'author name' into parts and
+ * construction of abbreviation of first name, one needs definitions of first
+ * latter of a token, case of a token, and abbreviation of a token:
+ * <ul>
+ * <li> 'first letter' of a token is the first letter character (<CODE>Character.isLetter(c)==true</CODE>)
+ * that does not belong to a sequence of letters that immediately follows "\"
+ * character, with one exception: if "\" is followed by "aa", "AA", "ae", "AE",
+ * "l", "L", "o", "O", "oe", "OE", "i", or "j" followed by non-letter, the
+ * 'first letter' of a token is a letter that follows "\"; for example: in
+ * "a{x}b" 'first letter' is "a", in "{\"{U}}bel" 'first letter' is "U", in
+ * "{\noopsort{\"o}}xyz" 'first letter' is "o", in "{\AE}x" 'first letter' is
+ * "A", in "\aex\ijk\Oe\j" 'first letter' is "j"; if there is no letter
+ * satisfying the above rule, 'first letter' is undefined;
+ * <li> token is "lower-case" token, if its first letter id defined and is
+ * lower-case (<CODE>Character.isLowerCase(c)==true</CODE>), and token is
+ * "upper-case" token otherwise;
+ * <li> 'abbreviation' of a token is the shortest prefix of the token that (a)
+ * contains 'first letter' and (b) is braces-balanced; if 'first letter' is
+ * undefined, 'abbreviation' is the token itself; in the above examples,
+ * 'abbreviation's are "a", "{\"{U}}", "{\noopsort{\"o}}", "{\AE}",
+ * "\aex\ijk\Oe\j";
+ * </ul>
+ * <li> the behavior based on the above definitions will be erroneous only in
+ * one case: if the first-name-token is "{\noopsort{A}}john", we abbreviate it
+ * as "{\noopsort{A}}.", while BiBTeX produces "j."; fixing this problem,
+ * however, requires processing of the preabmle;
+ * </ul>
+ * <li> 'author name's in 'author field' are subsequences of tokens separated by
+ * token "and" ("and" is case-insensitive); if 'author name' is an empty
+ * sequence of tokens, it is ignored; for examle, both "John Smith and Peter
+ * Black" and "and and John Smith and and Peter Black" consists of 2 'author
+ * name's "Johm Smith" and "Peter Black" (in erroneous situations, this is a bit
+ * different from BiBTeX behavior);
+ * <li> 'author name' consists of 'first-part', 'von-part', 'last-part', and
+ * 'junior-part', each of which is a sequence of tokens; how a sequence of
+ * tokens has to be splitted into these parts, depends the number of commas:
+ * <ul>
+ * <li> no commas, all tokens are upper-case: 'junior-part' and 'von-part' are
+ * empty, 'last-part' consist of the last token, 'first-part' consists of all
+ * other tokens ('first-part' is empty, if 'author name' consists of a single
+ * token); for example, in "John James Smith", 'last-part'="Smith" and
+ * 'first-part'="John James";
+ * <li> no commas, there exists lower-case token: 'junior-part' is empty,
+ * 'first-part' consists of all upper-case tokens before the first lower-case
+ * token, 'von-part' consists of lower-case tokens starting the first lower-case
+ * token and ending the lower-case token that is followed by upper-case token,
+ * 'last-part' consists of the rest of tokens; note that both 'first-part' and
+ * 'latst-part' may be empty and 'last-part' may contain lower-case tokens; for
+ * example: in "von der", 'first-part'='last-part'="", 'von-part'="von der"; in
+ * "Charles Louis Xavier Joseph de la Vall{\'e}e la Poussin",
+ * 'first-part'="Charles Louis Xavier Joseph", 'von-part'="de la",
+ * 'last-part'="Vall{\'e}e la Poussin";
+ * <li> one comma: 'junior-part' is empty, 'first-part' consists of all tokens
+ * after comma, 'von-part' consists of the longest sequence of lower-case tokens
+ * in the very beginning, 'last-part' consists of all tokens after 'von-part'
+ * and before comma; note that any part can be empty; for example: in "de la
+ * Vall{\'e}e la Poussin, Charles Louis Xavier Joseph", 'first-part'="Charles
+ * Louis Xavier Joseph", 'von-part'="de la", 'last-part'="Vall{\'e}e la
+ * Poussin"; in "Joseph de la Vall{\'e}e la Poussin, Charles Louis Xavier",
+ * 'first-part'="Charles Louis Xavier", 'von-part'="", 'last-part'="Joseph de la
+ * Vall{\'e}e la Poussin";
+ * <li> two or more commas (any comma after the second one is ignored; it merely
+ * separates tokens): 'junior-part' consists of all tokens between first and
+ * second commas, 'first-part' consists of all tokens after the second comma,
+ * tokens before the first comma are splitted into 'von-part' and 'last-part'
+ * similarly to the case of one comma; for example: in "de la Vall{\'e}e
+ * Poussin, Jr., Charles Louis Xavier Joseph", 'first-part'="Charles Louis
+ * Xavier Joseph", 'von-part'="de la", 'last-part'="Vall{\'e}e la Poussin", and
+ * 'junior-part'="Jr.";
+ * </ul>
+ * <li> when 'first-part', 'last-part', 'von-part', or 'junior-part' is
+ * reconstructed from tokens, tokens in a part are separated either by space or
+ * by dash, depending on whether the token before the separator was
+ * space-terminated or dash-terminated; for the last token in a part it does not
+ * matter whether it was dash- or space-terminated;
+ * <li> when 'first-part' is abbreviated, each token is replaced by its
+ * abbreviation followed by a period; separators are the same as in the case of
+ * non-abbreviated name; for example: in "Heinrich-{\"{U}}bel Kurt von Minich",
+ * 'first-part'="Heinrich-{\"{U}}bel Kurt", and its abbreviation is "H.-{\"{U}}.
+ * K."
+ * </ol>
+ * 
+ * @see tests.net.sf.jabref.AuthorListTest Testcases for this class.
+ */
+public class AuthorList {
+
+	private Vector<Author> authors; 
+
+	// Variables for storing computed strings, so they only need be created
+	// once:
+	private String authorsNatbib = null, authorsFirstFirstAnds = null,
+		authorsAlph = null;
+
+	private String[] authorsFirstFirst = new String[4], authorsLastOnly = new String[2],
+	authorLastFirstAnds = new String[2], 
+	authorsLastFirst = new String[4],
+    authorsLastFirstFirstLast = new String[2];
+
+
+	// The following variables are used only during parsing
+
+	private String orig; // the raw bibtex author/editor field
+
+	// the following variables are updated by getToken procedure
+	private int token_start; // index in orig
+
+	private int token_end; // to point 'abc' in ' abc xyz', start=2 and end=5
+
+	// the following variables are valid only if getToken returns TOKEN_WORD
+	private int token_abbr; // end of token abbreviation (always: token_start <
+
+	// token_abbr <= token_end)
+
+	private char token_term; // either space or dash
+
+	private boolean token_case; // true if upper-case token, false if lower-case
+
+	// token
+
+	// Tokens of one author name.
+	// Each token occupies TGL consecutive entries in this vector (as described
+	// below)
+	private Vector<Object> tokens;
+
+	private static final int TOKEN_GROUP_LENGTH = 4; // number of entries for
+
+	// a token
+
+	// the following are offsets of an entry in a group of entries for one token
+	private static final int OFFSET_TOKEN = 0; // String -- token itself;
+
+	private static final int OFFSET_TOKEN_ABBR = 1; // String -- token
+
+	// abbreviation;
+
+	private static final int OFFSET_TOKEN_TERM = 2; // Character -- token
+
+	// terminator (either " " or
+	// "-")
+
+	// private static final int OFFSET_TOKEN_CASE = 3; // Boolean --
+	// true=uppercase, false=lowercase
+	// the following are indices in 'tokens' vector created during parsing of
+	// author name
+	// and later used to properly split author name into parts
+	int von_start, // first lower-case token (-1 if all tokens upper-case)
+		last_start, // first upper-case token after first lower-case token (-1
+		// if does not exist)
+		comma_first, // token after first comma (-1 if no commas)
+		comma_second; // token after second comma (-1 if no commas or only one
+
+	// comma)
+
+	// Token types (returned by getToken procedure)
+	private static final int TOKEN_EOF = 0;
+
+	private static final int TOKEN_AND = 1;
+
+	private static final int TOKEN_COMMA = 2;
+
+	private static final int TOKEN_WORD = 3;
+
+	// Constant Hashtable containing names of TeX special characters
+	private static final java.util.HashSet<String> tex_names = new java.util.HashSet<String>();
+	// and static constructor to initialize it
+	static {
+		tex_names.add("aa");
+		tex_names.add("ae");
+		tex_names.add("l");
+		tex_names.add("o");
+		tex_names.add("oe");
+		tex_names.add("i");
+		tex_names.add("AA");
+		tex_names.add("AE");
+		tex_names.add("L");
+		tex_names.add("O");
+		tex_names.add("OE");
+		tex_names.add("j");
+	}
+
+	static WeakHashMap<String, AuthorList> authorCache = new WeakHashMap<String, AuthorList>();
+
+	/**
+	 * Parses the parameter strings and stores preformatted author information.
+	 * 
+	 * Don't call this constructor directly but rather use the getAuthorList()
+	 * method which caches its results.
+	 * 
+	 * @param bibtex_authors
+	 *            contents of either <CODE>author</CODE> or <CODE>editor</CODE>
+	 *            bibtex field.
+	 */
+	protected AuthorList(String bibtex_authors) {
+		authors = new Vector<Author>(5); // 5 seems to be reasonable initial size
+		orig = bibtex_authors; // initialization
+		token_start = 0;
+		token_end = 0; // of parser
+		while (token_start < orig.length()) {
+			Author author = getAuthor();
+			if (author != null)
+				authors.add(author);
+		}
+		// clean-up
+		orig = null;
+		tokens = null;
+
+	}
+
+	/**
+	 * Retrieve an AuthorList for the given string of authors or editors.
+	 * 
+	 * This function tries to cache AuthorLists by string passed in.
+	 * 
+	 * @param authors
+	 *            The string of authors or editors in bibtex format to parse.
+	 * @return An AuthorList object representing the given authors.
+	 */
+	public static AuthorList getAuthorList(String authors) {
+		AuthorList authorList = authorCache.get(authors);
+		if (authorList == null) {
+			authorList = new AuthorList(authors);
+			authorCache.put(authors, authorList);
+		}
+		return authorList;
+	}
+
+	/**
+	 * This is a convenience method for getAuthorsFirstFirst()
+	 * 
+	 * @see net.sf.jabref.AuthorList#getAuthorsFirstFirst
+	 */
+	public static String fixAuthor_firstNameFirstCommas(String authors, boolean abbr,
+		boolean oxfordComma) {
+		return getAuthorList(authors).getAuthorsFirstFirst(abbr, oxfordComma);
+	}
+
+	/**
+	 * This is a convenience method for getAuthorsFirstFirstAnds()
+	 * 
+	 * @see net.sf.jabref.AuthorList#getAuthorsFirstFirstAnds
+	 */
+	public static String fixAuthor_firstNameFirst(String authors) {
+		return getAuthorList(authors).getAuthorsFirstFirstAnds();
+	}
+
+	/**
+	 * This is a convenience method for getAuthorsLastFirst()
+	 * 
+	 * @see net.sf.jabref.AuthorList#getAuthorsLastFirst
+	 */
+	public static String fixAuthor_lastNameFirstCommas(String authors, boolean abbr,
+		boolean oxfordComma) {
+		return getAuthorList(authors).getAuthorsLastFirst(abbr, oxfordComma);
+	}
+
+	/**
+	 * This is a convenience method for getAuthorsLastFirstAnds(true)
+	 * 
+	 * @see net.sf.jabref.AuthorList#getAuthorsLastFirstAnds
+	 */
+	public static String fixAuthor_lastNameFirst(String authors) {
+		return getAuthorList(authors).getAuthorsLastFirstAnds(false);
+	}
+	
+	/**
+	 * This is a convenience method for getAuthorsLastFirstAnds()
+	 * 
+	 * @see net.sf.jabref.AuthorList#getAuthorsLastFirstAnds
+	 */
+	public static String fixAuthor_lastNameFirst(String authors, boolean abbreviate) {
+		return getAuthorList(authors).getAuthorsLastFirstAnds(abbreviate);
+	}
+
+	/**
+	 * This is a convenience method for getAuthorsLastOnly()
+	 * 
+	 * @see net.sf.jabref.AuthorList#getAuthorsLastOnly
+	 */
+	public static String fixAuthor_lastNameOnlyCommas(String authors, boolean oxfordComma) {
+		return getAuthorList(authors).getAuthorsLastOnly(oxfordComma);
+	}
+
+	/**
+	 * This is a convenience method for getAuthorsForAlphabetization()
+	 * 
+	 * @see net.sf.jabref.AuthorList#getAuthorsForAlphabetization
+	 */
+	public static String fixAuthorForAlphabetization(String authors) {
+		return getAuthorList(authors).getAuthorsForAlphabetization();
+	}
+
+	/**
+	 * This is a convenience method for getAuthorsNatbib()
+	 * 
+	 * @see net.sf.jabref.AuthorList#getAuthorsNatbib
+	 */
+	public static String fixAuthor_Natbib(String authors) {
+		return AuthorList.getAuthorList(authors).getAuthorsNatbib();
+	}
+
+	/**
+	 * Parses one author name and returns preformatted information.
+	 * 
+	 * @return Preformatted author name; <CODE>null</CODE> if author name is
+	 *         empty.
+	 */
+	private Author getAuthor() {
+
+		tokens = new Vector<Object>(); // initialization
+		von_start = -1;
+		last_start = -1;
+		comma_first = -1;
+		comma_second = -1;
+
+		// First step: collect tokens in 'tokens' Vector and calculate indices
+		token_loop: while (true) {
+			int token = getToken();
+			cases: switch (token) {
+			case TOKEN_EOF:
+			case TOKEN_AND:
+				break token_loop;
+			case TOKEN_COMMA:
+				if (comma_first < 0)
+					comma_first = tokens.size();
+				else if (comma_second < 0)
+					comma_second = tokens.size();
+				break cases;
+			case TOKEN_WORD:
+				tokens.add(orig.substring(token_start, token_end));
+				tokens.add(orig.substring(token_start, token_abbr));
+				tokens.add(new Character(token_term));
+				tokens.add(Boolean.valueOf(token_case));
+				if (comma_first >= 0)
+					break cases;
+				if (last_start >= 0)
+					break cases;
+				if (von_start < 0) {
+					if (!token_case) {
+						von_start = tokens.size() - TOKEN_GROUP_LENGTH;
+						break cases;
+					}
+				} else if (last_start < 0 && token_case) {
+					last_start = tokens.size() - TOKEN_GROUP_LENGTH;
+					break cases;
+				}
+			}
+		}// end token_loop
+
+        // Second step: split name into parts (here: calculate indices
+		// of parts in 'tokens' Vector)
+		if (tokens.size() == 0)
+			return null; // no author information
+
+
+		// the following negatives indicate absence of the corresponding part
+		int first_part_start = -1, von_part_start = -1, last_part_start = -1, jr_part_start = -1;
+		int first_part_end = 0, von_part_end = 0, last_part_end = 0, jr_part_end = 0;
+        boolean jrAsFirstname = false;
+		if (comma_first < 0) { // no commas
+			if (von_start < 0) { // no 'von part'
+				last_part_end = tokens.size();
+				last_part_start = tokens.size() - TOKEN_GROUP_LENGTH;
+				int index = tokens.size() - 2 * TOKEN_GROUP_LENGTH + OFFSET_TOKEN_TERM;
+				if (index > 0) {
+					Character ch = (Character)tokens.elementAt(index);
+					if (ch.charValue() == '-')
+						last_part_start -= TOKEN_GROUP_LENGTH;
+				}
+				first_part_end = last_part_start;
+				if (first_part_end > 0) {
+					first_part_start = 0;
+				}
+			} else { // 'von part' is present
+				if (last_start >= 0) {
+					last_part_end = tokens.size();
+					last_part_start = last_start;
+					von_part_end = last_part_start;
+				} else {
+					von_part_end = tokens.size();
+				}
+				von_part_start = von_start;
+				first_part_end = von_part_start;
+				if (first_part_end > 0)
+					first_part_start = 0;
+			}
+		} else { // commas are present: it affects only 'first part' and
+			// 'junior part'
+			first_part_end = tokens.size();
+			if (comma_second < 0) { // one comma
+				if (comma_first < first_part_end) {
+                    first_part_start = comma_first;
+                    //if (((String)tokens.get(first_part_start)).toLowerCase().startsWith("jr."))
+                    //    jrAsFirstname = true;
+                }
+			} else { // two or more commas
+				if (comma_second < first_part_end)
+					first_part_start = comma_second;
+				jr_part_end = comma_second;
+				if (comma_first < jr_part_end)
+					jr_part_start = comma_first;
+			}
+			if (von_start != 0) { // no 'von part'
+				last_part_end = comma_first;
+				if (last_part_end > 0)
+					last_part_start = 0;
+			} else { // 'von part' is present
+				if (last_start < 0) {
+					von_part_end = comma_first;
+				} else {
+					last_part_end = comma_first;
+					last_part_start = last_start;
+					von_part_end = last_part_start;
+				}
+				von_part_start = 0;
+			}
+		}
+
+        if ((first_part_start == -1) && (last_part_start == -1) && (von_part_start != -1)) {
+            // There is no first or last name, but we have a von part. This is likely
+            // to indicate a single-entry name without an initial capital letter, such
+            // as "unknown".
+            // We make the von part the last name, to facilitate handling by last-name formatters:
+            last_part_start = von_part_start;
+            last_part_end = von_part_end;
+            von_part_start = -1;
+            von_part_end = -1;
+        }
+        if (jrAsFirstname) {
+            // This variable, if set, indicates that the first name starts with "jr.", which
+            // is an indication that we may have a name formatted as "Firstname Lastname, Jr."
+            // which is an acceptable format for BibTeX.
+        }
+
+		// Third step: do actual splitting, construct Author object
+		return new Author((first_part_start < 0 ? null : concatTokens(first_part_start,
+			first_part_end, OFFSET_TOKEN, false)), (first_part_start < 0 ? null : concatTokens(
+			first_part_start, first_part_end, OFFSET_TOKEN_ABBR, true)), (von_part_start < 0 ? null
+			: concatTokens(von_part_start, von_part_end, OFFSET_TOKEN, false)),
+			(last_part_start < 0 ? null : concatTokens(last_part_start, last_part_end,
+				OFFSET_TOKEN, false)), (jr_part_start < 0 ? null : concatTokens(jr_part_start,
+				jr_part_end, OFFSET_TOKEN, false)));
+	}
+
+	/**
+	 * Concatenates list of tokens from 'tokens' Vector. Tokens are separated by
+	 * spaces or dashes, dependeing on stored in 'tokens'. Callers always ensure
+	 * that start < end; thus, there exists at least one token to be
+	 * concatenated.
+	 * 
+	 * @param start
+	 *            index of the first token to be concatenated in 'tokens' Vector
+	 *            (always divisible by TOKEN_GROUP_LENGTH).
+	 * @param end
+	 *            index of the first token not to be concatenated in 'tokens'
+	 *            Vector (always divisible by TOKEN_GROUP_LENGTH).
+	 * @param offset
+	 *            offset within token group (used to request concatenation of
+	 *            either full tokens or abbreviation).
+	 * @param dot_after
+	 *            <CODE>true</CODE> -- add period after each token, <CODE>false</CODE> --
+	 *            do not add.
+	 * @return the result of concatenation.
+	 */
+	private String concatTokens(int start, int end, int offset, boolean dot_after) {
+		StringBuffer res = new StringBuffer();
+		// Here we always have start < end
+		res.append((String) tokens.get(start + offset));
+		if (dot_after)
+			res.append('.');
+		start += TOKEN_GROUP_LENGTH;
+		while (start < end) {
+			res.append(tokens.get(start - TOKEN_GROUP_LENGTH + OFFSET_TOKEN_TERM));
+			res.append((String) tokens.get(start + offset));
+			if (dot_after)
+				res.append('.');
+			start += TOKEN_GROUP_LENGTH;
+		}
+		return res.toString();
+	}
+
+	/**
+	 * Parses the next token.
+	 * <p>
+	 * The string being parsed is stored in global variable <CODE>orig</CODE>,
+	 * and position which parsing has to start from is stored in global variable
+	 * <CODE>token_end</CODE>; thus, <CODE>token_end</CODE> has to be set
+	 * to 0 before the first invocation. Procedure updates <CODE>token_end</CODE>;
+	 * thus, subsequent invocations do not require any additional variable
+	 * settings.
+	 * <p>
+	 * The type of the token is returned; if it is <CODE>TOKEN_WORD</CODE>,
+	 * additional information is given in global variables <CODE>token_start</CODE>,
+	 * <CODE>token_end</CODE>, <CODE>token_abbr</CODE>, <CODE>token_term</CODE>,
+	 * and <CODE>token_case</CODE>; namely: <CODE>orig.substring(token_start,token_end)</CODE>
+	 * is the thext of the token, <CODE>orig.substring(token_start,token_abbr)</CODE>
+	 * is the token abbreviation, <CODE>token_term</CODE> contains token
+	 * terminator (space or dash), and <CODE>token_case</CODE> is <CODE>true</CODE>,
+	 * if token is upper-case and <CODE>false</CODE> if token is lower-case.
+	 * 
+	 * @return <CODE>TOKEN_EOF</CODE> -- no more tokens, <CODE>TOKEN_COMMA</CODE> --
+	 *         token is comma, <CODE>TOKEN_AND</CODE> -- token is the word
+	 *         "and" (or "And", or "aND", etc.), <CODE>TOKEN_WORD</CODE> --
+	 *         token is a word; additional information is given in global
+	 *         variables <CODE>token_start</CODE>, <CODE>token_end</CODE>,
+	 *         <CODE>token_abbr</CODE>, <CODE>token_term</CODE>, and
+	 *         <CODE>token_case</CODE>.
+	 */
+	private int getToken() {
+		token_start = token_end;
+		while (token_start < orig.length()) {
+			char c = orig.charAt(token_start);
+			if (!(c == '~' || c == '-' || Character.isWhitespace(c)))
+				break;
+			token_start++;
+		}
+		token_end = token_start;
+		if (token_start >= orig.length())
+			return TOKEN_EOF;
+		if (orig.charAt(token_start) == ',') {
+			token_end++;
+			return TOKEN_COMMA;
+		}
+		token_abbr = -1;
+		token_term = ' ';
+		token_case = true;
+		int braces_level = 0;
+		int current_backslash = -1;
+		boolean first_letter_is_found = false;
+		while (token_end < orig.length()) {
+			char c = orig.charAt(token_end);
+			if (c == '{') {
+				braces_level++;
+			}
+			if (braces_level > 0)
+				if (c == '}')
+					braces_level--;
+			if (first_letter_is_found && token_abbr < 0 && braces_level == 0)
+				token_abbr = token_end;
+			if (!first_letter_is_found && current_backslash < 0 && Character.isLetter(c)) {
+                if (braces_level == 0)
+				    token_case = Character.isUpperCase(c);
+                else
+                    // If this is a particle in braces, always treat it as if it starts with
+                    // an upper case letter. Otherwise a name such as "{van den Bergen}, Hans"
+                    // will not yield a proper last name:
+                    token_case = true;
+				first_letter_is_found = true;
+			}
+			if (current_backslash >= 0 && !Character.isLetter(c)) {
+				if (!first_letter_is_found) {
+					String tex_cmd_name = orig.substring(current_backslash + 1, token_end);
+					if (tex_names.contains(tex_cmd_name)) {
+						token_case = Character.isUpperCase(tex_cmd_name.charAt(0));
+						first_letter_is_found = true;
+					}
+				}
+				current_backslash = -1;
+			}
+			if (c == '\\')
+				current_backslash = token_end;
+			if (braces_level == 0)
+				if (c == ',' || c == '~' || c=='-' || Character.isWhitespace(c))
+					break;
+			// Morten Alver 18 Apr 2006: Removed check for hyphen '-' above to
+			// prevent
+			// problems with names like Bailey-Jones getting broken up and
+			// sorted wrong.
+			// Aaron Chen 14 Sep 2008: Enable hyphen check for first names like Chang-Chin
+			token_end++;
+		}
+		if (token_abbr < 0)
+			token_abbr = token_end;
+		if (token_end < orig.length() && orig.charAt(token_end) == '-')
+			token_term = '-';
+		if (orig.substring(token_start, token_end).equalsIgnoreCase("and"))
+			return TOKEN_AND;
+		else
+			return TOKEN_WORD;
+	}
+
+	/**
+	 * Returns the number of author names in this object.
+	 * 
+	 * @return the number of author names in this object.
+	 */
+	public int size() {
+		return authors.size();
+	}
+
+	/**
+	 * Returns the <CODE>Author</CODE> object for the i-th author.
+	 * 
+	 * @param i
+	 *            Index of the author (from 0 to <CODE>size()-1</CODE>).
+	 * @return the <CODE>Author</CODE> object.
+	 */
+	public Author getAuthor(int i) {
+		return authors.get(i);
+	}
+
+	/**
+	 * Returns the list of authors in "natbib" format.
+	 * <p>
+	 * <ul>
+	 * <li>"John Smith" -> "Smith"</li>
+	 * <li>"John Smith and Black Brown, Peter" ==> "Smith and Black Brown"</li>
+	 * <li>"John von Neumann and John Smith and Black Brown, Peter" ==> "von
+	 * Neumann et al." </li>
+	 * </ul>
+	 * 
+	 * @return formatted list of authors.
+	 */
+	public String getAuthorsNatbib() {
+		// Check if we've computed this before:
+		if (authorsNatbib != null)
+			return authorsNatbib;
+
+		StringBuffer res = new StringBuffer();
+		if (size() > 0) {
+			res.append(getAuthor(0).getLastOnly());
+			if (size() == 2) {
+				res.append(" and ");
+				res.append(getAuthor(1).getLastOnly());
+			} else if (size() > 2) {
+				res.append(" et al.");
+			}
+		}
+		authorsNatbib = res.toString();
+		return authorsNatbib;
+	}
+
+	/**
+	 * Returns the list of authors separated by commas with last name only; If
+	 * the list consists of three or more authors, "and" is inserted before the
+	 * last author's name.
+	 * <p>
+	 * 
+	 * <ul>
+	 * <li> "John Smith" ==> "Smith"</li>
+	 * <li> "John Smith and Black Brown, Peter" ==> "Smith and Black Brown"</li>
+	 * <li> "John von Neumann and John Smith and Black Brown, Peter" ==> "von
+	 * Neumann, Smith and Black Brown".</li>
+	 * </ul>
+	 * 
+	 * @param oxfordComma
+	 *            Whether to put a comma before the and at the end.
+	 * 
+	 * @see http://en.wikipedia.org/wiki/Serial_comma For an detailed
+	 *      explaination about the Oxford comma.
+	 * 
+	 * @return formatted list of authors.
+	 */
+	public String getAuthorsLastOnly(boolean oxfordComma) {
+		int abbrInt = (oxfordComma ? 0 : 1);
+
+		// Check if we've computed this before:
+		if (authorsLastOnly[abbrInt] != null)
+			return authorsLastOnly[abbrInt];
+
+		StringBuffer res = new StringBuffer();
+		if (size() > 0) {
+			res.append(getAuthor(0).getLastOnly());
+			int i = 1;
+			while (i < size() - 1) {
+				res.append(", ");
+				res.append(getAuthor(i).getLastOnly());
+				i++;
+			}
+			if (size() > 2 && oxfordComma)
+				res.append(",");
+			if (size() > 1) {
+				res.append(" and ");
+				res.append(getAuthor(i).getLastOnly());
+			}
+		}
+		authorsLastOnly[abbrInt] = res.toString();
+		return authorsLastOnly[abbrInt];
+	}
+
+	/**
+	 * Returns the list of authors separated by commas with first names after
+	 * last name; first names are abbreviated or not depending on parameter. If
+	 * the list consists of three or more authors, "and" is inserted before the
+	 * last author's name.
+	 * <p>
+	 * 
+	 * <ul>
+	 * <li> "John Smith" ==> "Smith, John" or "Smith, J."</li>
+	 * <li> "John Smith and Black Brown, Peter" ==> "Smith, John and Black
+	 * Brown, Peter" or "Smith, J. and Black Brown, P."</li>
+	 * <li> "John von Neumann and John Smith and Black Brown, Peter" ==> "von
+	 * Neumann, John, Smith, John and Black Brown, Peter" or "von Neumann, J.,
+	 * Smith, J. and Black Brown, P.".</li>
+	 * </ul>
+	 * 
+	 * @param abbreviate
+	 *            whether to abbreivate first names.
+	 * 
+	 * @param oxfordComma
+	 *            Whether to put a comma before the and at the end.
+	 * 
+	 * @see http://en.wikipedia.org/wiki/Serial_comma For an detailed
+	 *      explaination about the Oxford comma.
+	 * 
+	 * @return formatted list of authors.
+	 */
+	public String getAuthorsLastFirst(boolean abbreviate, boolean oxfordComma) {
+		int abbrInt = (abbreviate ? 0 : 1);
+		abbrInt += (oxfordComma ? 0 : 2);
+
+		// Check if we've computed this before:
+		if (authorsLastFirst[abbrInt] != null)
+			return authorsLastFirst[abbrInt];
+
+		StringBuffer res = new StringBuffer();
+		if (size() > 0) {
+			res.append(getAuthor(0).getLastFirst(abbreviate));
+			int i = 1;
+			while (i < size() - 1) {
+				res.append(", ");
+				res.append(getAuthor(i).getLastFirst(abbreviate));
+				i++;
+			}
+			if (size() > 2 && oxfordComma)
+				res.append(",");
+			if (size() > 1) {
+				res.append(" and ");
+				res.append(getAuthor(i).getLastFirst(abbreviate));
+			}
+		}
+		authorsLastFirst[abbrInt] = res.toString();
+		return authorsLastFirst[abbrInt];
+	}
+	
+	public String toString(){
+		return getAuthorsLastFirstAnds(false);
+	}
+
+	/**
+	 * Returns the list of authors separated by "and"s with first names after
+	 * last name; first names are not abbreviated.
+	 * <p>
+	 * <ul>
+	 * <li>"John Smith" ==> "Smith, John"</li>
+	 * <li>"John Smith and Black Brown, Peter" ==> "Smith, John and Black
+	 * Brown, Peter"</li>
+	 * <li>"John von Neumann and John Smith and Black Brown, Peter" ==> "von
+	 * Neumann, John and Smith, John and Black Brown, Peter".</li>
+	 * </ul>
+	 * 
+	 * @return formatted list of authors.
+	 */
+	public String getAuthorsLastFirstAnds(boolean abbreviate) {
+		int abbrInt = (abbreviate ? 0 : 1);
+		// Check if we've computed this before:
+		if (authorLastFirstAnds[abbrInt] != null)
+			return authorLastFirstAnds[abbrInt];
+
+		StringBuffer res = new StringBuffer();
+		if (size() > 0) {
+			res.append(getAuthor(0).getLastFirst(abbreviate));
+			for (int i = 1; i < size(); i++) {
+				res.append(" and ");
+				res.append(getAuthor(i).getLastFirst(abbreviate));
+			}
+		}
+
+		authorLastFirstAnds[abbrInt] = res.toString();
+		return authorLastFirstAnds[abbrInt];
+	}
+
+	public String getAuthorsLastFirstFirstLastAnds(boolean abbreviate) {
+		int abbrInt = (abbreviate ? 0 : 1);
+		// Check if we've computed this before:
+		if (authorsLastFirstFirstLast[abbrInt] != null)
+			return authorsLastFirstFirstLast[abbrInt];
+
+		StringBuffer res = new StringBuffer();
+		if (size() > 0) {
+            res.append(getAuthor(0).getLastFirst(abbreviate));
+			for (int i = 1; i < size(); i++) {
+				res.append(" and ");
+				res.append(getAuthor(i).getFirstLast(abbreviate));
+			}
+		}
+
+		authorsLastFirstFirstLast[abbrInt] = res.toString();
+		return authorsLastFirstFirstLast[abbrInt];
+	}    
+
+	/**
+	 * Returns the list of authors separated by commas with first names before
+	 * last name; first names are abbreviated or not depending on parameter. If
+	 * the list consists of three or more authors, "and" is inserted before the
+	 * last author's name.
+	 * <p>
+	 * <ul>
+	 * <li>"John Smith" ==> "John Smith" or "J. Smith"</li>
+	 * <li>"John Smith and Black Brown, Peter" ==> "John Smith and Peter Black
+	 * Brown" or "J. Smith and P. Black Brown"</li>
+	 * <li> "John von Neumann and John Smith and Black Brown, Peter" ==> "John
+	 * von Neumann, John Smith and Peter Black Brown" or "J. von Neumann, J.
+	 * Smith and P. Black Brown" </li>
+	 * </ul>
+	 * 
+	 * @param abbr
+	 *            whether to abbreivate first names.
+	 * 
+	 * @param oxfordComma
+	 *            Whether to put a comma before the and at the end.
+	 * 
+	 * @see http://en.wikipedia.org/wiki/Serial_comma For an detailed
+	 *      explaination about the Oxford comma.
+	 * 
+	 * @return formatted list of authors.
+	 */
+	public String getAuthorsFirstFirst(boolean abbr, boolean oxfordComma) {
+
+		int abbrInt = (abbr ? 0 : 1);
+		abbrInt += (oxfordComma ? 0 : 2);
+
+		// Check if we've computed this before:
+		if (authorsFirstFirst[abbrInt] != null)
+			return authorsFirstFirst[abbrInt];
+
+		StringBuffer res = new StringBuffer();
+		if (size() > 0) {
+			res.append(getAuthor(0).getFirstLast(abbr));
+			int i = 1;
+			while (i < size() - 1) {
+				res.append(", ");
+				res.append(getAuthor(i).getFirstLast(abbr));
+				i++;
+			}
+			if (size() > 2 && oxfordComma)
+				res.append(",");
+			if (size() > 1) {
+				res.append(" and ");
+				res.append(getAuthor(i).getFirstLast(abbr));
+			}
+		}
+		authorsFirstFirst[abbrInt] = res.toString();
+		return authorsFirstFirst[abbrInt];
+	}
+	
+	/**
+	 * Compare this object with the given one. 
+	 * 
+	 * Will return true iff the other object is an Author and all fields are identical on a string comparison.
+	 */
+	public boolean equals(Object o) {
+		if (!(o instanceof AuthorList)) {
+			return false;
+		}
+		AuthorList a = (AuthorList) o;
+		
+		return this.authors.equals(a.authors);
+	}
+	
+	/**
+	 * Returns the list of authors separated by "and"s with first names before
+	 * last name; first names are not abbreviated.
+	 * <p>
+	 * <ul>
+	 * <li>"John Smith" ==> "John Smith"</li>
+	 * <li>"John Smith and Black Brown, Peter" ==> "John Smith and Peter Black
+	 * Brown"</li>
+	 * <li>"John von Neumann and John Smith and Black Brown, Peter" ==> "John
+	 * von Neumann and John Smith and Peter Black Brown" </li>
+	 * </li>
+	 * 
+	 * @return formatted list of authors.
+	 */
+	public String getAuthorsFirstFirstAnds() {
+		// Check if we've computed this before:
+		if (authorsFirstFirstAnds != null)
+			return authorsFirstFirstAnds;
+
+		StringBuffer res = new StringBuffer();
+		if (size() > 0) {
+			res.append(getAuthor(0).getFirstLast(false));
+			for (int i = 1; i < size(); i++) {
+				res.append(" and ");
+				res.append(getAuthor(i).getFirstLast(false));
+			}
+		}
+		authorsFirstFirstAnds = res.toString();
+		return authorsFirstFirstAnds;
+	}
+
+	/**
+	 * Returns the list of authors in a form suitable for alphabetization. This
+	 * means that last names come first, never preceded by "von" particles, and
+	 * that any braces are removed. First names are abbreviated so the same name
+	 * is treated similarly if abbreviated in one case and not in another. This
+	 * form is not intended to be suitable for presentation, only for sorting.
+	 * 
+	 * <p>
+	 * <ul>
+	 * <li>"John Smith" ==> "Smith, J.";</li>
+	 * 
+	 * 
+	 * @return formatted list of authors
+	 */
+	public String getAuthorsForAlphabetization() {
+		if (authorsAlph != null)
+			return authorsAlph;
+
+		StringBuffer res = new StringBuffer();
+		if (size() > 0) {
+			res.append(getAuthor(0).getNameForAlphabetization());
+			for (int i = 1; i < size(); i++) {
+				res.append(" and ");
+				res.append(getAuthor(i).getNameForAlphabetization());
+			}
+		}
+		authorsAlph = res.toString();
+		return authorsAlph;
+	}
+
+	/**
+	 * This is an immutable class that keeps information regarding single
+	 * author. It is just a container for the information, with very simple
+	 * methods to access it.
+	 * <p>
+	 * Current usage: only methods <code>getLastOnly</code>,
+	 * <code>getFirstLast</code>, and <code>getLastFirst</code> are used;
+	 * all other methods are provided for completeness.
+	 */
+	public static class Author {
+		
+		private final String first_part;
+
+		private final String first_abbr;
+
+		private final String von_part;
+
+		private final String last_part;
+
+		private final String jr_part;
+
+		/**
+		 * Compare this object with the given one. 
+		 * 
+		 * Will return true iff the other object is an Author and all fields are identical on a string comparison.
+		 */
+		public boolean equals(Object o) {
+			if (!(o instanceof Author)) {
+				return false;
+			}
+			Author a = (Author) o;
+			return Util.equals(first_part, a.first_part)
+					&& Util.equals(first_abbr, a.first_abbr)
+					&& Util.equals(von_part, a.von_part)
+					&& Util.equals(last_part, a.last_part)
+					&& Util.equals(jr_part, a.jr_part);
+		}
+		
+		/**
+		 * Creates the Author object. If any part of the name is absent, <CODE>null</CODE>
+		 * must be passes; otherwise other methods may return erroneous results.
+		 * 
+		 * @param first
+		 *            the first name of the author (may consist of several
+		 *            tokens, like "Charles Louis Xavier Joseph" in "Charles
+		 *            Louis Xavier Joseph de la Vall{\'e}e Poussin")
+		 * @param firstabbr
+		 *            the abbreviated first name of the author (may consist of
+		 *            several tokens, like "C. L. X. J." in "Charles Louis
+		 *            Xavier Joseph de la Vall{\'e}e Poussin"). It is a
+		 *            responsibility of the caller to create a reasonable
+		 *            abbreviation of the first name.
+		 * @param von
+		 *            the von part of the author's name (may consist of several
+		 *            tokens, like "de la" in "Charles Louis Xavier Joseph de la
+		 *            Vall{\'e}e Poussin")
+		 * @param last
+		 *            the lats name of the author (may consist of several
+		 *            tokens, like "Vall{\'e}e Poussin" in "Charles Louis Xavier
+		 *            Joseph de la Vall{\'e}e Poussin")
+		 * @param jr
+		 *            the junior part of the author's name (may consist of
+		 *            several tokens, like "Jr. III" in "Smith, Jr. III, John")
+		 */
+		public Author(String first, String firstabbr, String von, String last, String jr) {
+			first_part = removeStartAndEndBraces(first);
+			first_abbr = removeStartAndEndBraces(firstabbr);
+			von_part = removeStartAndEndBraces(von);
+			last_part = removeStartAndEndBraces(last);
+			jr_part = removeStartAndEndBraces(jr);
+		}
+		
+		/**
+		 * 
+		 * @return true if the brackets in s are properly paired
+		 */
+		private boolean properBrackets(String s) {
+			// nested construct is there, check for "proper" nesting
+			int i = 1;
+			int level = 0;
+			loop: do {
+				char c = s.charAt(i);
+				switch (c) {
+				case '{':
+					level++;
+					break;
+				case '}':
+					level--;
+					if (level==-1) {
+						// the improper nesting
+						break loop;
+					}
+					break;
+				}
+				i++;
+			} while (i<s.length()-1);
+			return (level == 0);
+		}
+		
+		/**
+		 * Removes start and end brace at a string
+		 * 
+		 * E.g., 
+		 *   * {Vall{\'e}e Poussin} -> Vall{\'e}e Poussin
+		 *   * {Vall{\'e}e} {Poussin} -> Vall{\'e}e Poussin
+		 *   * Vall{\'e}e Poussin -> Vall{\'e}e Poussin
+		 */
+		private String removeStartAndEndBraces(String name) {
+			if (name == null)
+				return null;
+			if (!name.contains("{"))
+				return name;
+			
+			String[] split = name.split(" ");
+			StringBuilder b = new StringBuilder();
+			for (String s: split) {
+				if (s.length()>2) {
+					if (s.startsWith("{") && s.endsWith("}")) {
+						// quick solution (which we don't do: just remove first "{" and last "}"
+						// however, it might be that s is like {A}bbb{c}, where braces may not be removed
+						
+						// inner 
+						String inner = s.substring(1, s.length()-1);
+						
+						if (inner.contains("}")) {
+							if (properBrackets(inner)) {
+								s = inner;
+							} else {
+								// no proper brackets if inner string: s is left untouched
+							}
+						} else {
+							//  no inner curly brackets found, no check needed, inner can just be used as s
+							s = inner;
+						}
+					}
+				}
+				b.append(s);
+				b.append(" ");
+			}
+			// delete last
+			b.deleteCharAt(b.length()-1);
+			
+			// now, all inner words are cleared
+			// case {word word word} remains
+			// as above, we have to be aware of {w}ord word wor{d} and {{w}ord word word}
+			
+			name = b.toString();
+			
+			if (name.startsWith("{") && name.endsWith("}")) {
+				String inner = name.substring(1, name.length()-1);
+				if (properBrackets(inner)) {
+					return inner;
+				} else {
+					return name;
+				}
+			} else {
+				return name;
+			}
+		}
+
+		/**
+		 * Returns the first name of the author stored in this object ("First").
+		 * 
+		 * @return first name of the author (may consist of several tokens)
+		 */
+		public String getFirst() {
+			return first_part;
+		}
+
+		/**
+		 * Returns the abbreviated first name of the author stored in this
+		 * object ("F.").
+		 * 
+		 * @return abbreviated first name of the author (may consist of several
+		 *         tokens)
+		 */
+		public String getFirstAbbr() {
+			return first_abbr;
+		}
+
+		/**
+		 * Returns the von part of the author's name stored in this object
+		 * ("von").
+		 * 
+		 * @return von part of the author's name (may consist of several tokens)
+		 */
+		public String getVon() {
+			return von_part;
+		}
+
+		/**
+		 * Returns the last name of the author stored in this object ("Last").
+		 * 
+		 * @return last name of the author (may consist of several tokens)
+		 */
+		public String getLast() {
+            return last_part;
+		}
+
+		/**
+		 * Returns the junior part of the author's name stored in this object
+		 * ("Jr").
+		 * 
+		 * @return junior part of the author's name (may consist of several
+		 *         tokens) or null if the author does not have a Jr. Part
+		 */
+		public String getJr() {
+			return jr_part;
+		}
+
+		/**
+		 * Returns von-part followed by last name ("von Last"). If both fields
+		 * were specified as <CODE>null</CODE>, the empty string <CODE>""</CODE>
+		 * is returned.
+		 * 
+		 * @return 'von Last'
+		 */
+		public String getLastOnly() {
+			if (von_part == null) {
+				return (last_part == null ? "" : last_part);
+			} else {
+				return (last_part == null ? von_part : von_part + " " + last_part);
+			}
+		}
+
+		/**
+		 * Returns the author's name in form 'von Last, Jr., First' with the
+		 * first name full or abbreviated depending on parameter.
+		 * 
+		 * @param abbr
+		 *            <CODE>true</CODE> - abbreviate first name, <CODE>false</CODE> -
+		 *            do not abbreviate
+		 * @return 'von Last, Jr., First' (if <CODE>abbr==false</CODE>) or
+		 *         'von Last, Jr., F.' (if <CODE>abbr==true</CODE>)
+		 */
+		public String getLastFirst(boolean abbr) {
+			String res = getLastOnly();
+			if (jr_part != null)
+				res += ", " + jr_part;
+			if (abbr) {
+				if (first_abbr != null)
+					res += ", " + first_abbr;
+			} else {
+				if (first_part != null)
+					res += ", " + first_part;
+			}
+			return res;
+		}
+
+		/**
+		 * Returns the author's name in form 'First von Last, Jr.' with the
+		 * first name full or abbreviated depending on parameter.
+		 * 
+		 * @param abbr
+		 *            <CODE>true</CODE> - abbreviate first name, <CODE>false</CODE> -
+		 *            do not abbreviate
+		 * @return 'First von Last, Jr.' (if <CODE>abbr==false</CODE>) or 'F.
+		 *         von Last, Jr.' (if <CODE>abbr==true</CODE>)
+		 */
+		public String getFirstLast(boolean abbr) {
+			String res = getLastOnly();
+			if (abbr) {
+				res = (first_abbr == null ? "" : first_abbr + " ") + res;
+			} else {
+				res = (first_part == null ? "" : first_part + " ") + res;
+			}
+			if (jr_part != null)
+				res += ", " + jr_part;
+			return res;
+		}
+
+		/**
+		 * Returns the name as "Last, Jr, F." omitting the von-part and removing
+		 * starting braces.
+		 * 
+		 * @return "Last, Jr, F." as described above or "" if all these parts
+		 *         are empty.
+		 */
+		public String getNameForAlphabetization() {
+			StringBuffer res = new StringBuffer();
+			if (last_part != null)
+				res.append(last_part);
+			if (jr_part != null) {
+				res.append(", ");
+				res.append(jr_part);
+			}
+			if (first_abbr != null) {
+				res.append(", ");
+				res.append(first_abbr);
+			}
+			while ((res.length() > 0) && (res.charAt(0) == '{'))
+				res.deleteCharAt(0);
+			return res.toString();
+		}
+	}// end Author
+
+
+    public static void main(String[] args) {
+        //String s = "Ford, Jr., Henry and Guy L. {Steele Jr.} and Olaf Nilsen, Jr.";
+        String s = "Olaf von Nilsen, Jr.";
+        AuthorList al = AuthorList.getAuthorList(s);
+        for (int i=0; i<al.size(); i++) {
+            Author a = al.getAuthor(i);
+            System.out.println((i+1)+": first = '"+a.getFirst()+"'");
+            System.out.println((i+1)+": last = '"+a.getLast()+"'");
+            System.out.println((i+1)+": jr = '"+a.getJr()+"'");
+            System.out.println((i+1)+": von = '"+a.getVon()+"'");
+        }
+
+        System.out.println((new CreateDocBookAuthors()).format(s));
+    }
+}// end AuthorList
diff --git a/src/java/net/sf/jabref/BaseAction.java b/src/java/net/sf/jabref/BaseAction.java
index 1c47b8c..f20a3b5 100644
--- a/src/java/net/sf/jabref/BaseAction.java
+++ b/src/java/net/sf/jabref/BaseAction.java
@@ -1,25 +1,25 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-/**
- * BaseAction is used to define actions that are called from the
- * base frame through runCommand(). runCommand() finds the
- * appropriate BaseAction object, and runs its action() method.
- */
-public abstract class BaseAction {//implements Runnable {
-    public abstract void action() throws Throwable;
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+/**
+ * BaseAction is used to define actions that are called from the
+ * base frame through runCommand(). runCommand() finds the
+ * appropriate BaseAction object, and runs its action() method.
+ */
+public abstract class BaseAction {//implements Runnable {
+    public abstract void action() throws Throwable;
+}
diff --git a/src/java/net/sf/jabref/BasePanel.java b/src/java/net/sf/jabref/BasePanel.java
index e6a2c41..4a5bfcf 100644
--- a/src/java/net/sf/jabref/BasePanel.java
+++ b/src/java/net/sf/jabref/BasePanel.java
@@ -1,3022 +1,3029 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Toolkit;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.ClipboardOwner;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.StringSelection;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.nio.charset.UnsupportedCharsetException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Vector;
-import java.util.regex.Pattern;
-
-import javax.swing.AbstractAction;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JFileChooser;
-import javax.swing.JFrame;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JSplitPane;
-import javax.swing.JTextArea;
-import javax.swing.SwingUtilities;
-import javax.swing.tree.TreePath;
-import javax.swing.undo.CannotRedoException;
-import javax.swing.undo.CannotUndoException;
-
-import net.sf.jabref.autocompleter.AbstractAutoCompleter;
-import net.sf.jabref.autocompleter.AutoCompleterFactory;
-import net.sf.jabref.autocompleter.NameFieldAutoCompleter;
-import net.sf.jabref.collab.ChangeScanner;
-import net.sf.jabref.collab.FileUpdateListener;
-import net.sf.jabref.collab.FileUpdatePanel;
-import net.sf.jabref.export.ExportToClipboardAction;
-import net.sf.jabref.export.FileActions;
-import net.sf.jabref.export.SaveDatabaseAction;
-import net.sf.jabref.export.SaveException;
-import net.sf.jabref.export.SaveSession;
-import net.sf.jabref.export.layout.Layout;
-import net.sf.jabref.export.layout.LayoutHelper;
-import net.sf.jabref.external.*;
-import net.sf.jabref.groups.AddToGroupAction;
-import net.sf.jabref.groups.GroupSelector;
-import net.sf.jabref.groups.GroupTreeNode;
-import net.sf.jabref.gui.*;
-import net.sf.jabref.imports.AppendDatabaseAction;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.imports.SPIRESFetcher;
-import net.sf.jabref.imports.INSPIREFetcher;
-import net.sf.jabref.journals.AbbreviateAction;
-import net.sf.jabref.journals.UnabbreviateAction;
-import net.sf.jabref.labelPattern.LabelPatternUtil;
-import net.sf.jabref.labelPattern.SearchFixDuplicateLabels;
-import net.sf.jabref.search.NoSearchMatcher;
-import net.sf.jabref.search.SearchMatcher;
-import net.sf.jabref.specialfields.SpecialFieldAction;
-import net.sf.jabref.specialfields.Priority;
-import net.sf.jabref.specialfields.Quality;
-import net.sf.jabref.specialfields.Rank;
-import net.sf.jabref.specialfields.Relevance;
-import net.sf.jabref.specialfields.SpecialFieldDatabaseChangeListener;
-import net.sf.jabref.specialfields.SpecialFieldValue;
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-import net.sf.jabref.sql.DBConnectDialog;
-import net.sf.jabref.sql.DBStrings;
-import net.sf.jabref.sql.DbConnectAction;
-import net.sf.jabref.sql.DBExporterAndImporterFactory;
-import net.sf.jabref.sql.SQLUtil;
-import net.sf.jabref.sql.exporter.DBExporter;
-import net.sf.jabref.undo.CountingUndoManager;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableChangeType;
-import net.sf.jabref.undo.UndoableFieldChange;
-import net.sf.jabref.undo.UndoableInsertEntry;
-import net.sf.jabref.undo.UndoableKeyChange;
-import net.sf.jabref.undo.UndoableRemoveEntry;
-import net.sf.jabref.wizard.text.gui.TextInputDialog;
-import ca.odell.glazedlists.FilterList;
-import ca.odell.glazedlists.event.ListEvent;
-import ca.odell.glazedlists.event.ListEventListener;
-import ca.odell.glazedlists.matchers.Matcher;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import com.jgoodies.uif_lite.component.UIFSplitPane;
-
-public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListener {
-
-    public final static int SHOWING_NOTHING=0, SHOWING_PREVIEW=1, SHOWING_EDITOR=2, WILL_SHOW_EDITOR=3;
-    
-    /* 
-     * The database shown in this panel.
-     */
-    BibtexDatabase database;
-    
-    private int mode=0;
-    private EntryEditor currentEditor = null;
-    private PreviewPanel currentPreview = null;
-
-    boolean tmp = true;
-
-    private MainTableSelectionListener selectionListener = null;
-    private ListEventListener<BibtexEntry> groupsHighlightListener;
-    UIFSplitPane contentPane = new UIFSplitPane();
-
-    JSplitPane splitPane;
-
-    JabRefFrame frame;
-    
-    String fileMonitorHandle = null;
-    boolean saving = false, updatedExternally = false;
-    private String encoding;
-
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-
-    HashMap<String, AbstractAutoCompleter> autoCompleters = new HashMap<String, AbstractAutoCompleter>();
-    // Hashtable that holds as keys the names of the fields where
-    // autocomplete is active, and references to the autocompleter objects.
-
-    NameFieldAutoCompleter searchCompleter = null;
-    AutoCompleteListener searchCompleteListener = null;
-
-    // The undo manager.
-    public CountingUndoManager undoManager = new CountingUndoManager(this);
-    UndoAction undoAction = new UndoAction();
-    RedoAction redoAction = new RedoAction();
-    
-    private List<BibtexEntry> previousEntries = new ArrayList<BibtexEntry>(),
-        nextEntries = new ArrayList<BibtexEntry>();
-
-    //ExampleFileFilter fileFilter;
-    // File filter for .bib files.
-
-    boolean baseChanged = false, nonUndoableChange = false;
-    // Used to track whether the base has changed since last save.
-
-    //EntryTableModel tableModel = null;
-    //public EntryTable entryTable = null;
-    public MainTable mainTable = null;
-    public MainTableFormat tableFormat = null;
-    public FilterList<BibtexEntry> searchFilterList = null, groupFilterList = null;
-
-    public RightClickMenu rcm;
-
-    BibtexEntry showing = null;
-
-    // Variable to prevent erroneous update of back/forward histories at the time
-    // when a Back or Forward operation is being processed:
-    private boolean backOrForwardInProgress = false;
-
-    // To indicate which entry is currently shown.
-    public HashMap<String, EntryEditor> entryEditors = new HashMap<String, EntryEditor>();
-    // To contain instantiated entry editors. This is to save time
-    // in switching between entries.
-
-    //HashMap entryTypeForms = new HashMap();
-    // Hashmap to keep track of which entries currently have open
-    // EntryTypeForm dialogs.
-
-    PreambleEditor preambleEditor = null;
-    // Keeps track of the preamble dialog if it is open.
-
-    StringDialog stringDialog = null;
-    // Keeps track of the string dialog if it is open.
-
-    SaveDatabaseAction saveAction;
-    CleanUpAction cleanUpAction;
-    
-    /**
-     * The group selector component for this database. Instantiated by the
-     * SidePaneManager if necessary, or from this class if merging groups from a
-     * different database.
-     */
-    //GroupSelector groupSelector;
-
-    public boolean
-            showingSearch = false,
-            showingGroup = false,
-            sortingBySearchResults = false,
-            coloringBySearchResults = false,
-            hidingNonHits = false,
-            sortingByGroup = false,
-            sortingByCiteSeerResults = false,
-            coloringByGroup = false;
-
-    int lastSearchHits = -1; // The number of hits in the latest search.
-    // Potential use in hiding non-hits completely.
-
-    // MetaData parses, keeps and writes meta data.
-    MetaData metaData;
-
-    private boolean suppressOutput = false;
-
-    private HashMap<String, Object> actions = new HashMap<String, Object>();
-    private SidePaneManager sidePaneManager;
-
-    /**
-     * Create a new BasePanel with an empty database.
-     * @param frame The application window.
-     */
-    public BasePanel(JabRefFrame frame) {
-      this.sidePaneManager = Globals.sidePaneManager;
-      database = new BibtexDatabase();
-      metaData = new MetaData();
-        metaData.initializeNewDatabase();
-      this.frame = frame;
-      setupActions();
-      setupMainPanel();
-        encoding = Globals.prefs.get("defaultEncoding");
-        //System.out.println("Default: "+encoding);
-    }
-
-    public BasePanel(JabRefFrame frame, BibtexDatabase db, File file,
-                     MetaData metaData, String encoding) {
-        init(frame, db, file, metaData, encoding);
-    }
-
-    private void init(JabRefFrame frame, BibtexDatabase db, File file,
-                      MetaData metaData, String encoding) {
-        this.encoding = encoding;
-        this.metaData = metaData;
-        // System.out.println(encoding);
-        //super(JSplitPane.HORIZONTAL_SPLIT, true);
-        this.sidePaneManager = Globals.sidePaneManager;
-        this.frame = frame;
-        database = db;
-
-        setupActions();
-        setupMainPanel();
-
-        metaData.setFile(file);
-
-        // Register so we get notifications about outside changes to the file.
-        if (file != null)
-            try {
-                fileMonitorHandle = Globals.fileUpdateMonitor.addUpdateListener(this,
-                        file);
-            } catch (IOException ex) {
-            }
-        
-    }
-
-    public boolean isBaseChanged(){
-    	return baseChanged;
-    }
-    
-    public int getMode() {
-        return mode;
-    }
-
-    //Done by MrDlib
-    public void setMode(int mode) {
-        this.mode = mode;
-    }
-    //Done by MrDlib
-
-    public BibtexDatabase database() {
-		return database;
-	}
-
-	public MetaData metaData() {
-		return metaData;
-	}
-
-	public JabRefFrame frame() {
-		return frame;
-	}
-
-	public JabRefPreferences prefs() {
-		return Globals.prefs;
-	}
-
-	public String getEncoding() {
-		return encoding;
-	}
-
-	public void setEncoding(String encoding) {
-		this.encoding = encoding;
-	}
-
-    public void output(String s) {
-        if (!suppressOutput)
-            frame.output(s);
-    }
-
-    private void setupActions() {
-        saveAction = new SaveDatabaseAction(this);
-        cleanUpAction = new CleanUpAction(this);
-        
-        actions.put("undo", undoAction);
-        actions.put("redo", redoAction);
-
-        actions.put("focusTable", new BaseAction() {
-            public void action() throws Throwable {
-                new FocusRequester(mainTable);
-            }
-        });
-        
-        // The action for opening an entry editor.
-        actions.put("edit", new BaseAction() {
-            public void action() {
-                /*System.out.println(Globals.focusListener.getFocused().getClass().getName());
-                if (Globals.focusListener.getFocused() instanceof FieldEditor)
-                    new FocusRequester(mainTable);
-                else*/
-                    selectionListener.editSignalled();
-            }
-                /*
-                  if (isShowingEditor()) {
-                      new FocusRequester(splitPane.getBottomComponent());
-                      return;
-                  }
-
-                  frame.block();
-                //(new Thread() {
-                //public void run() {
-                int clickedOn = -1;
-                // We demand that one and only one row is selected.
-                if (entryTable.getSelectedRowCount() == 1) {
-                  clickedOn = entryTable.getSelectedRow();
-                }
-                if (clickedOn >= 0) {
-                  String id = tableModel.getIdForRow(clickedOn);
-                  BibtexEntry be = database.getEntryById(id);
-                  showEntry(be);
-
-                  if (splitPane.getBottomComponent() != null) {
-                      new FocusRequester(splitPane.getBottomComponent());
-                  }
-
-                }
-        frame.unblock();
-              }
-                */
-            });
-
-
-        actions.put("test",// new AccessLinksForEntries.SaveWithLinkedFiles(this));
-                new FindFullTextAction(this));
-
-
-        // The action for saving a database.
-        actions.put("save", saveAction);
-
-        actions.put("saveAs", new BaseAction() {
-            public void action() throws Throwable {
-                saveAction.saveAs();
-            }
-        });
-
-        actions.put("saveSelectedAs", new BaseAction () {
-                public void action() throws Throwable {
-
-                  String chosenFile = FileDialogs.getNewFile(frame, new File(Globals.prefs.get("workingDirectory")), ".bib",
-                                                         JFileChooser.SAVE_DIALOG, false);
-                  if (chosenFile != null) {
-                    File expFile = new File(chosenFile);
-                    if (!expFile.exists() ||
-                        (JOptionPane.showConfirmDialog
-                         (frame, "'"+expFile.getName()+"' "+
-                          Globals.lang("exists. Overwrite file?"),
-                          Globals.lang("Save database"), JOptionPane.OK_CANCEL_OPTION)
-                         == JOptionPane.OK_OPTION)) {
-
-                      saveDatabase(expFile, true, Globals.prefs.get("defaultEncoding"));
-                      //runCommand("save");
-                      frame.getFileHistory().newFile(expFile.getPath());
-                      frame.output(Globals.lang("Saved selected to")+" '"
-                                   +expFile.getPath()+"'.");
-                        }
-                    }
-                }
-            });
-    
-        // The action for copying selected entries.
-        actions.put("copy", new BaseAction() {
-                public void action() {
-                    BibtexEntry[] bes = mainTable.getSelectedEntries();
-
-                    if ((bes != null) && (bes.length > 0)) {
-                        TransferableBibtexEntry trbe
-                            = new TransferableBibtexEntry(bes);
-                        // ! look at ClipBoardManager
-                        Toolkit.getDefaultToolkit().getSystemClipboard()
-                            .setContents(trbe, BasePanel.this);
-                        output(Globals.lang("Copied")+" "+(bes.length>1 ? bes.length+" "
-                                                           +Globals.lang("entries")
-                                                           : "1 "+Globals.lang("entry")+"."));
-                    } else {
-                        // The user maybe selected a single cell.
-                        int[] rows = mainTable.getSelectedRows(),
-                            cols = mainTable.getSelectedColumns();
-                        if ((cols.length == 1) && (rows.length == 1)) {
-                            // Copy single value.
-                            Object o = mainTable.getValueAt(rows[0], cols[0]);
-                            if (o != null) {
-                                StringSelection ss = new StringSelection(o.toString());
-                                Toolkit.getDefaultToolkit().getSystemClipboard()
-                                    .setContents(ss, BasePanel.this);
-
-                                output(Globals.lang("Copied cell contents")+".");
-                            }
-                        }
-                    }
-                }
-            });
-
-        actions.put("cut", new BaseAction() {
-                public void action() throws Throwable {
-                    runCommand("copy");
-                    BibtexEntry[] bes = mainTable.getSelectedEntries();
-                    //int row0 = mainTable.getSelectedRow();
-                    if ((bes != null) && (bes.length > 0)) {
-                        // Create a CompoundEdit to make the action undoable.
-                        NamedCompound ce = new NamedCompound
-                        (Globals.lang(bes.length > 1 ? "cut entries" : "cut entry"));
-                        // Loop through the array of entries, and delete them.
-                        for (int i=0; i<bes.length; i++) {
-                            database.removeEntry(bes[i].getId());
-                            ensureNotShowing(bes[i]);
-                            ce.addEdit(new UndoableRemoveEntry
-                                       (database, bes[i], BasePanel.this));
-                        }
-                        //entryTable.clearSelection();
-                        frame.output(Globals.lang("Cut_pr")+" "+
-                                     (bes.length>1 ? bes.length
-                                      +" "+ Globals.lang("entries")
-                                      : Globals.lang("entry"))+".");
-                        ce.end();
-                        undoManager.addEdit(ce);
-                        markBaseChanged();
-
-                        // Reselect the entry in the first prev. selected position:
-                        /*if (row0 >= entryTable.getRowCount())
-                            row0 = entryTable.getRowCount()-1;
-                        if (row0 >= 0)
-                            entryTable.addRowSelectionInterval(row0, row0);*/
-                    }
-                }
-            });
-
-        actions.put("delete", new BaseAction() {
-                public void action() {
-                  BibtexEntry[] bes = mainTable.getSelectedEntries();
-                  if ((bes != null) && (bes.length > 0)) {
-
-                      boolean goOn = showDeleteConfirmationDialog(bes.length);
-                      if (!goOn) {
-                          return;
-                      }
-                      else {
-                          // Create a CompoundEdit to make the action undoable.
-                          NamedCompound ce = new NamedCompound
-                              (Globals.lang(bes.length > 1 ? "delete entries" : "delete entry"));
-                          // Loop through the array of entries, and delete them.
-                          for (int i = 0; i < bes.length; i++) {
-                              database.removeEntry(bes[i].getId());
-                              ensureNotShowing(bes[i]);
-                              ce.addEdit(new UndoableRemoveEntry(database, bes[i], BasePanel.this));
-                          }
-                          markBaseChanged();
-                          frame.output(Globals.lang("Deleted") + " " +
-                                       (bes.length > 1 ? bes.length
-                                        + " " + Globals.lang("entries")
-                                        : Globals.lang("entry")) + ".");
-                          ce.end();
-                          undoManager.addEdit(ce);
-                          //entryTable.clearSelection();
-                      }
-
-
-                          // Reselect the entry in the first prev. selected position:
-                          /*if (row0 >= entryTable.getRowCount())
-                              row0 = entryTable.getRowCount()-1;
-                          if (row0 >= 0) {
-                             final int toSel = row0;
-                            //
-                              SwingUtilities.invokeLater(new Runnable() {
-                                public void run() {
-                                    entryTable.addRowSelectionInterval(toSel, toSel);
-                                    //entryTable.ensureVisible(toSel);
-                                }
-                              });
-                            */
-                          }
-
-                      }
-
-            });
-
-        // The action for pasting entries or cell contents.
-        // Edited by Seb Wills <saw27 at mrao.cam.ac.uk> on 14-Apr-04:
-        //  - more robust detection of available content flavors (doesn't only look at first one offered)
-        //  - support for parsing string-flavor clipboard contents which are bibtex entries.
-        //    This allows you to (a) paste entire bibtex entries from a text editor, web browser, etc
-        //                       (b) copy and paste entries between multiple instances of JabRef (since
-        //         only the text representation seems to get as far as the X clipboard, at least on my system)
-        actions.put("paste", new BaseAction() {
-                public void action() {
-                    // Get clipboard contents, and see if TransferableBibtexEntry is among the content flavors offered
-                    Transferable content = Toolkit.getDefaultToolkit()
-                        .getSystemClipboard().getContents(null);
-                    if (content != null) {
-                        BibtexEntry[] bes = null;
-                        if (content.isDataFlavorSupported(TransferableBibtexEntry.entryFlavor)) {
-                            // We have determined that the clipboard data is a set of entries.
-                            try {
-                                bes = (BibtexEntry[])(content.getTransferData(TransferableBibtexEntry.entryFlavor));
-
-                            } catch (UnsupportedFlavorException ex) {
-                                ex.printStackTrace();
-                            } catch (IOException ex) {
-                                ex.printStackTrace();
-                            }
-                        } else if (content.isDataFlavorSupported(DataFlavor.stringFlavor)) {
-                           try {
-                                  BibtexParser bp = new BibtexParser
-                                      (new java.io.StringReader( (String) (content.getTransferData(
-                                      DataFlavor.stringFlavor))));
-                                  BibtexDatabase db = bp.parse().getDatabase();
-                                  Util.pr("Parsed " + db.getEntryCount() + " entries from clipboard text");
-                                  if(db.getEntryCount()>0) {
-                                      bes = db.getEntries().toArray(new BibtexEntry[db.getEntryCount()]);
-                                  }
-                              } catch (UnsupportedFlavorException ex) {
-                                  ex.printStackTrace();
-                              } catch (Throwable ex) {
-                                  ex.printStackTrace();
-                              }
-
-                        }
-
-                        // finally we paste in the entries (if any), which either came from TransferableBibtexEntries
-                        // or were parsed from a string
-                        if ((bes != null) && (bes.length > 0)) {
-
-                          NamedCompound ce = new NamedCompound
-                              (Globals.lang(bes.length > 1 ? "paste entries" : "paste entry"));
-                          
-                          // Store the first inserted bibtexentry.
-                          // bes[0] does not work as bes[0] is first clonded,
-                          // then inserted.
-                          // This entry is used to open up an entry editor
-                          // for the first inserted entry.
-                          BibtexEntry firstBE = null;
-                          
-                          for (int i=0; i<bes.length; i++) {
-                            try {
-                              BibtexEntry be = (BibtexEntry)(bes[i].clone());
-                              if (firstBE == null) firstBE = be;
-                                Util.setAutomaticFields(be,
-                                        Globals.prefs.getBoolean("overwriteOwner"),
-                                        Globals.prefs.getBoolean("overwriteTimeStamp"));
-
-                              // We have to clone the
-                              // entries, since the pasted
-                              // entries must exist
-                              // independently of the copied
-                              // ones.
-                              be.setId(Util.createNeutralId());
-                              database.insertEntry(be);
-                              
-                              addToSelectedGroup(be); 
-                              ce.addEdit(new UndoableInsertEntry
-                                         (database, be, BasePanel.this));
-                            } catch (KeyCollisionException ex) {
-                              Util.pr("KeyCollisionException... this shouldn't happen.");
-                            }
-                          }
-                          ce.end();
-                          undoManager.addEdit(ce);
-                          //entryTable.clearSelection();
-                          //entryTable.revalidate();
-                          output(Globals.lang("Pasted") + " " +
-                                  (bes.length > 1 ? bes.length + " " +
-                                          Globals.lang("entries") : "1 " + Globals.lang("entry"))
-                                  + ".");
-                          markBaseChanged();
-                        	  
-                          if (Globals.prefs.getBoolean("autoOpenForm")) {
-                        	  selectionListener.editSignalled(firstBE);
-                          }
-                          highlightEntry(firstBE);
-                        }
-                      }
-
-                    }
-
-});
-
-        actions.put("selectAll", new BaseAction() {
-                public void action() {
-                    mainTable.selectAll();
-                }
-            });
-
-        // The action for opening the preamble editor
-        actions.put("editPreamble", new BaseAction() {
-                public void action() {
-                    if (preambleEditor == null) {
-                        PreambleEditor form = new PreambleEditor
-                            (frame, BasePanel.this, database, Globals.prefs);
-                        Util.placeDialog(form, frame);
-                        form.setVisible(true);
-                        preambleEditor = form;
-                    } else {
-                        preambleEditor.setVisible(true);
-                    }
-
-                }
-            });
-
-        // The action for opening the string editor
-        actions.put("editStrings", new BaseAction() {
-                public void action() {
-                    if (stringDialog == null) {
-                        StringDialog form = new StringDialog
-                            (frame, BasePanel.this, database, Globals.prefs);
-                        Util.placeDialog(form, frame);
-                        form.setVisible(true);
-                        stringDialog = form;
-                    } else {
-                        stringDialog.setVisible(true);
-                    }
-
-                }
-            });
-
-        // The action for toggling the groups interface
-        actions.put("toggleGroups", new BaseAction() {
-            public void action() {
-              sidePaneManager.toggle("groups");
-              frame.groupToggle.setSelected(sidePaneManager.isComponentVisible("groups"));
-            }
-        });
-
-
-        // action for collecting database strings from user
-        actions.put("dbConnect", new DbConnectAction(this));
-
-
-        // action for exporting database to external SQL database
-        actions.put("dbExport", new AbstractWorker () {
-
-            String errorMessage = null;
-            boolean connectToDB = false;
-
-            // run first, in EDT:
-            public void init() {
-
-                DBStrings dbs = metaData.getDBStrings();
-
-                // get DBStrings from user if necessary
-                if (!dbs.isConfigValid()) {
-
-                    // init DB strings if necessary
-                    if (! dbs.isInitialized()) {
-                        dbs.initialize();
-                    }
-
-                    // show connection dialog
-                    DBConnectDialog dbd = new DBConnectDialog(frame(), dbs);
-                    Util.placeDialog(dbd, BasePanel.this );
-                    dbd.setVisible(true);
-
-                    connectToDB = dbd.getConnectToDB();
-
-                    // store database strings
-                    if (connectToDB) {
-                        dbs = dbd.getDBStrings();
-                        metaData.setDBStrings(dbs);
-                        dbd.dispose();
-                    }
-
-                } else {
-
-                    connectToDB  = true;
-
-                }
-
-            }
-
-            // run second, on a different thread:
-            public void run() {
-
-                if (connectToDB) {
-
-                    DBStrings dbs = metaData.getDBStrings();
-
-                    try {
-                    	/*boolean okToExport = null!=metaData.getFile();
-                    	if (!okToExport)
-                    	{
-                    		okToExport = false;
-                    		int response = JOptionPane.showConfirmDialog(null, "You need to save your database in the disk \n" +
-                    				"before saving. Save it now?", "Database is not saved",
-                    		        JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
-                    			if(response == JOptionPane.YES_OPTION)
-                    			{
-                    				try {
-                    					saveAction.saveAs();
-                    					okToExport = (null!=metaData.getFile());
-                    				} catch (Throwable e) {
-                    				e.printStackTrace();
-                    			}
-                    		}
-                    	}
-                    	if (okToExport)
-                    	{*/
-	                        frame.output(Globals.lang("Attempting SQL export..."));
-	                        DBExporterAndImporterFactory factory = new DBExporterAndImporterFactory();
-	                        DBExporter exporter = factory.getExporter(dbs.getServerType());
-	                        exporter.exportDatabaseToDBMS(database, metaData, null, dbs, frame);
-	                        dbs.isConfigValid(true);
-                    	//}
-                    	//else
-                    	//	errorMessage = "Database was not exported. Your database must be saved \nbefore exporting to a SQL database";
-                    } catch (Exception ex) {
-                        String preamble = "Could not export to SQL database for the following reason:";
-                        errorMessage = SQLUtil.getExceptionMessage(ex);
-                        ex.printStackTrace();
-                        dbs.isConfigValid(false);
-                        JOptionPane.showMessageDialog(frame, Globals.lang(preamble)
-                                + "\n" +errorMessage, Globals.lang("Export to SQL database"),
-                                JOptionPane.ERROR_MESSAGE);
-                    }
-
-                    metaData.setDBStrings(dbs);
-
-                }
-
-            }
-
-            // run third, on EDT:
-            public void update() {
-
-                // if no error, report success
-                if (errorMessage == null) {
-                    if (connectToDB) {
-                        frame.output(Globals.lang("%0 export successful"));
-                    }
-                }
-
-                // show an error dialog if an error occurred
-                else {
-
-                    String preamble = "Could not export to SQL database for the following reason:";
-                    frame.output(Globals.lang(preamble)
-                            + "  " + errorMessage);
-
-                    JOptionPane.showMessageDialog(frame, Globals.lang(preamble)
-                        + "\n" + errorMessage, Globals.lang("Export to SQL database"),
-                        JOptionPane.ERROR_MESSAGE);
-
-                    errorMessage = null;
-
-                }
-            }
-
-        });
-        	
-        actions.put(FindUnlinkedFilesDialog.ACTION_COMMAND, new BaseAction() {
-      	  	@Override
-      	  	public void action() throws Throwable {
-					FindUnlinkedFilesDialog dialog = new FindUnlinkedFilesDialog(frame, frame, BasePanel.this);
-					Util.placeDialog(dialog, frame);
-					dialog.setVisible(true);
-				}
-          });
-
-        // The action for auto-generating keys.
-        actions.put("makeKey", new AbstractWorker() {
-        //int[] rows;
-        List<BibtexEntry> entries;
-        int numSelected;
-        boolean cancelled = false;
-
-        // Run first, in EDT:
-        public void init() {
-                    entries = new ArrayList<BibtexEntry>(Arrays.asList(getSelectedEntries()));
-                   //rows = entryTable.getSelectedRows() ;
-                    numSelected = entries.size();
-
-                    if (entries.size() == 0) { // None selected. Inform the user to select entries first.
-                        JOptionPane.showMessageDialog(frame, Globals.lang("First select the entries you want keys to be generated for."),
-                                                      Globals.lang("Autogenerate BibTeX key"), JOptionPane.INFORMATION_MESSAGE);
-                        return ;
-                    }
-            frame.block();
-            output(Globals.lang("Generating BibTeX key for")+" "+
-                           numSelected+" "+(numSelected>1 ? Globals.lang("entries")
-                                            : Globals.lang("entry"))+"...");
-        }
-
-
-        // Run second, on a different thread:
-                public void run() {
-                    BibtexEntry bes = null ;
-                    NamedCompound ce = new NamedCompound(Globals.lang("autogenerate keys"));
-
-                    // First check if any entries have keys set already. If so, possibly remove
-                    // them from consideration, or warn about overwriting keys.
-                    loop: for (Iterator<BibtexEntry> i=entries.iterator(); i.hasNext();) {
-                        bes = i.next();
-                        if (bes.getField(BibtexFields.KEY_FIELD) != null) {
-                            if (Globals.prefs.getBoolean("avoidOverwritingKey"))
-                                // Remove the entry, because its key is already set:
-                                i.remove();
-                            else if (Globals.prefs.getBoolean("warnBeforeOverwritingKey")) {
-                                // Ask if the user wants to cancel the operation:
-                                CheckBoxMessage cbm = new CheckBoxMessage(Globals.lang("One or more keys will be overwritten. Continue?"),
-                                        Globals.lang("Disable this confirmation dialog"), false);
-                                int answer = JOptionPane.showConfirmDialog(frame, cbm, Globals.lang("Overwrite keys"),
-                                        JOptionPane.YES_NO_OPTION);
-                                if (cbm.isSelected())
-                                    Globals.prefs.putBoolean("warnBeforeOverwritingKey", false);
-                                if (answer == JOptionPane.NO_OPTION) {
-                                    // Ok, break off the operation.
-                                    cancelled = true;
-                                    return;
-                                }
-                                // No need to check more entries, because the user has already confirmed
-                                // that it's ok to overwrite keys:
-                                break loop;
-                            }
-                        }
-                    }
-
-                    HashMap<BibtexEntry, Object> oldvals = new HashMap<BibtexEntry, Object>();
-                    // Iterate again, removing already set keys. This is skipped if overwriting
-                    // is disabled, since all entries with keys set will have been removed.
-                    if (!Globals.prefs.getBoolean("avoidOverwritingKey")) for (Iterator<BibtexEntry> i=entries.iterator(); i.hasNext();) {
-                        bes = i.next();
-                        // Store the old value:
-                        oldvals.put(bes, bes.getField(BibtexFields.KEY_FIELD));
-                        database.setCiteKeyForEntry(bes.getId(), null);
-                    }
-
-                    // Finally, set the new keys:
-                    for (Iterator<BibtexEntry> i=entries.iterator(); i.hasNext();) {
-                        bes = i.next();
-                        bes = LabelPatternUtil.makeLabel(metaData, database, bes);
-                        ce.addEdit(new UndoableKeyChange
-                                   (database, bes.getId(), (String)oldvals.get(bes),
-                                    bes.getField(BibtexFields.KEY_FIELD)));
-                    }
-                    ce.end();
-                    undoManager.addEdit(ce);
-        }
-
-        // Run third, on EDT:
-        public void update() {
-            database.setFollowCrossrefs(true);
-            if (cancelled) {
-                frame.unblock();
-                return;
-            }
-            markBaseChanged() ;
-            numSelected = entries.size();
-
-////////////////////////////////////////////////////////////////////////////////
-//          Prevent selection loss for autogenerated BibTeX-Keys
-////////////////////////////////////////////////////////////////////////////////
-            for (Iterator<BibtexEntry> i=entries.iterator(); i.hasNext();) {
-               final BibtexEntry bibEntry = i.next();
-               SwingUtilities.invokeLater(new Runnable() {
-                  public void run() {
-                    final int row = mainTable.findEntry( bibEntry );
-                    if (row >= 0 && mainTable.getSelectedRowCount() < entries.size())
-                      mainTable.addRowSelectionInterval(row, row);
-                  }
-               });
-            }
-////////////////////////////////////////////////////////////////////////////////
-            output(Globals.lang("Generated BibTeX key for")+" "+
-               numSelected+" "+(numSelected!=1 ? Globals.lang("entries")
-                                    : Globals.lang("entry")));
-            frame.unblock();
-        }
-    });
-         
-        
-     // The action for cleaning up entry.
-        actions.put("Cleanup", cleanUpAction);
-
-        actions.put("search", new BaseAction() {
-                public void action() {
-                    //sidePaneManager.togglePanel("search");
-                    sidePaneManager.show("search");
-                    //boolean on = sidePaneManager.isPanelVisible("search");
-                    frame.searchToggle.setSelected(true);
-                    if (true)
-                      frame.getSearchManager().startSearch();
-                }
-            });
-        
-        actions.put("toggleSearch", new BaseAction() {
-                public void action() {
-                    //sidePaneManager.togglePanel("search");
-                    sidePaneManager.toggle("search");
-                    boolean on = sidePaneManager.isComponentVisible("search");
-                    frame.searchToggle.setSelected(on);
-                    if (on)
-                      frame.getSearchManager().startSearch();
-                }
-            });
-
-        actions.put("incSearch", new BaseAction() {
-                public void action() {
-                    sidePaneManager.show("search");
-                    frame.searchToggle.setSelected(true);
-                    frame.getSearchManager().startIncrementalSearch();
-                }
-            });
-
-        // The action for copying the selected entry's key.
-        actions.put("copyKey", new BaseAction() {
-                public void action() {
-                    BibtexEntry[] bes = mainTable.getSelectedEntries();
-                    if ((bes != null) && (bes.length > 0)) {
-                        storeCurrentEdit();
-                        //String[] keys = new String[bes.length];
-                        Vector<Object> keys = new Vector<Object>();
-                        // Collect all non-null keys.
-                        for (int i=0; i<bes.length; i++)
-                            if (bes[i].getField(BibtexFields.KEY_FIELD) != null)
-                                keys.add(bes[i].getField(BibtexFields.KEY_FIELD));
-                        if (keys.size() == 0) {
-                            output("None of the selected entries have BibTeX keys.");
-                            return;
-                        }
-                        StringBuffer sb = new StringBuffer((String)keys.elementAt(0));
-                        for (int i=1; i<keys.size(); i++) {
-                            sb.append(',');
-                            sb.append((String)keys.elementAt(i));
-                        }
-
-                        StringSelection ss = new StringSelection(sb.toString());
-                        Toolkit.getDefaultToolkit().getSystemClipboard()
-                            .setContents(ss, BasePanel.this);
-
-                        if (keys.size() == bes.length)
-                            // All entries had keys.
-                            output(Globals.lang((bes.length > 1) ? "Copied keys"
-                                                : "Copied key")+".");
-                        else
-                            output(Globals.lang("Warning")+": "+(bes.length-keys.size())
-                                   +" "+Globals.lang("out of")+" "+bes.length+" "+
-                                   Globals.lang("entries have undefined BibTeX key")+".");
-                    }
-                }
-            });
-
-        // The action for copying a cite for the selected entry.
-        actions.put("copyCiteKey", new BaseAction() {
-                public void action() {
-                    BibtexEntry[] bes = mainTable.getSelectedEntries();
-                    if ((bes != null) && (bes.length > 0)) {
-                        storeCurrentEdit();
-                        //String[] keys = new String[bes.length];
-                        Vector<Object> keys = new Vector<Object>();
-                        // Collect all non-null keys.
-                        for (int i=0; i<bes.length; i++)
-                            if (bes[i].getField(BibtexFields.KEY_FIELD) != null)
-                                keys.add(bes[i].getField(BibtexFields.KEY_FIELD));
-                        if (keys.size() == 0) {
-                            output("None of the selected entries have BibTeX keys.");
-                            return;
-                        }
-                        StringBuffer sb = new StringBuffer((String)keys.elementAt(0));
-                        for (int i=1; i<keys.size(); i++) {
-                            sb.append(',');
-                            sb.append((String)keys.elementAt(i));
-                        }
-
-                        StringSelection ss = new StringSelection
-                            ("\\cite{"+sb.toString()+"}");
-                        Toolkit.getDefaultToolkit().getSystemClipboard()
-                            .setContents(ss, BasePanel.this);
-
-                        if (keys.size() == bes.length)
-                            // All entries had keys.
-                            output(bes.length > 1 ? Globals.lang("Copied keys")
-                                                  : Globals.lang("Copied key")+".");
-                        else
-                            output(Globals.lang("Warning")+": "+(bes.length-keys.size())
-                                   +" "+Globals.lang("out of")+" "+bes.length+" "+
-                                   Globals.lang("entries have undefined BibTeX key")+".");
-                    }
-                }
-            });
-        
-          // The action for copying the BibTeX key and the title for the first selected entry
-          actions.put("copyKeyAndTitle", new BaseAction() {
-        	  public void action() {
-                  BibtexEntry[] bes = mainTable.getSelectedEntries();
-                  if ((bes != null) && (bes.length > 0)) {
-                      storeCurrentEdit();
-
-                      // OK: in a future version, this string should be configurable to allow arbitrary exports
-              		  StringReader sr = new StringReader("\\bibtexkey - \\begin{title}\\format[RemoveBrackets]{\\title}\\end{title}\n");
-            		  Layout layout;
-					  try {
-						  layout = new LayoutHelper(sr).getLayoutFromText(Globals.FORMATTER_PACKAGE);
-					  } catch (Exception e) {
-						  e.printStackTrace();
-						  return;
-					  }
-					  
-            		  StringBuffer sb = new StringBuffer();
-
-            		  int copied = 0;
-                      // Collect all non-null keys.
-                      for (int i=0; i<bes.length; i++)
-                          if (bes[i].getField(BibtexFields.KEY_FIELD) != null) {
-                        	  copied++;
-                        	  sb.append(layout.doLayout(bes[i], database));
-                          }
-                      
-                      if (copied==0) {
-                          output("None of the selected entries have BibTeX keys.");
-                          return;
-                      }
-
-                      StringSelection ss = new StringSelection(sb.toString());
-                      Toolkit.getDefaultToolkit().getSystemClipboard()
-                          .setContents(ss, BasePanel.this);
-
-                      if (copied == bes.length)
-                          // All entries had keys.
-                          output(Globals.lang((bes.length > 1) ? "Copied keys"
-                                              : "Copied key")+".");
-                      else
-                          output(Globals.lang("Warning")+": "+(copied)
-                                 +" "+Globals.lang("out of")+" "+bes.length+" "+
-                                 Globals.lang("entries have undefined BibTeX key")+".");
-                  }
-        	  }
-          });
-
-          actions.put("mergeDatabase", new AppendDatabaseAction(frame, this));
-
-
-        actions.put("openFile", new BaseAction() {
-            public void action() {
-                (new Thread() {
-                    public void run() {
-                        BibtexEntry[] bes = mainTable.getSelectedEntries();
-                        String field = "ps";
-
-                        if ((bes != null) && (bes.length == 1)) {
-                            FileListEntry entry = null;
-                            FileListTableModel tm = new FileListTableModel();
-                            tm.setContent(bes[0].getField("file"));
-                            for (int i=0; i< tm.getRowCount(); i++) {
-                                FileListEntry flEntry = tm.getEntry(i);
-                                if (flEntry.getType().getName().toLowerCase().equals("pdf")
-                                    || flEntry.getType().getName().toLowerCase().equals("ps")) {
-                                    entry = flEntry;
-                                    break;
-                                }
-                            }
-                            if (entry != null) {
-                                try {
-                                    Util.openExternalFileAnyFormat(metaData, entry.getLink(), entry.getType());
-                                    output(Globals.lang("External viewer called") + ".");
-                                } catch (IOException e) {
-                                    output(Globals.lang("Could not open link"));
-                                    e.printStackTrace();
-                                }
-                                return;
-                            }
-                            // If we didn't find anything in the "file" field, check "ps" and "pdf" fields:
-                            Object link = bes[0].getField("ps");
-                            if (bes[0].getField("pdf") != null) {
-                                link = bes[0].getField("pdf");
-                                field = "pdf";
-                            }
-                            String filepath = null;
-                            if (link != null) {
-                                filepath = link.toString();
-                            } else {
-                                if (Globals.prefs.getBoolean("runAutomaticFileSearch")) {
-
-                                     /*  The search can lead to an unexpected 100% CPU usage which is perceived
-                                         as a bug, if the search incidentally starts at a directory with lots
-                                         of stuff below. It is now disabled by default. */
-
-                                    // see if we can fall back to a filename based on the bibtex key
-                                    final Collection<BibtexEntry> entries = new ArrayList<BibtexEntry>();
-                                    entries.add(bes[0]);
-                                    ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
-                                    ArrayList<File> dirs = new ArrayList<File>();
-                                    if (metaData.getFileDirectory(GUIGlobals.FILE_FIELD).length > 0) {
-                                        String[] mdDirs = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
-                                        for (int i = 0; i < mdDirs.length; i++) {
-                                            dirs.add(new File(mdDirs[i]));
-
-                                        }
-                                    }
-                                    Collection<String> extensions = new ArrayList<String>();
-                                    for (int i = 0; i < types.length; i++) {
-                                        final ExternalFileType type = types[i];
-                                        extensions.add(type.getExtension());
-                                    }
-                                    // Run the search operation:
-                                    Map<BibtexEntry, List<File>> result;
-                                    if (Globals.prefs.getBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY)) {
-                                        String regExp = Globals.prefs.get(JabRefPreferences.REG_EXP_SEARCH_EXPRESSION_KEY);
-                                        result = RegExpFileSearch.findFilesForSet(entries, extensions, dirs, regExp);
-                                    }
-                                    else
-                                        result = Util.findAssociatedFiles(entries, extensions, dirs);
-                                    if (result.get(bes[0]) != null) {
-                                        List<File> res = result.get(bes[0]);
-                                        if (res.size() > 0) {
-                                            filepath = res.get(0).getPath();
-                                            int index = filepath.lastIndexOf('.');
-                                            if ((index >= 0) && (index < filepath.length()-1)) {
-                                                String extension = filepath.substring(index+1);
-                                                ExternalFileType type = Globals.prefs.getExternalFileTypeByExt(extension);
-                                                if (type != null) {
-                                                    try {
-                                                        Util.openExternalFileAnyFormat(metaData, filepath, type);
-                                                        output(Globals.lang("External viewer called") + ".");
-                                                        return;
-                                                    } catch (IOException ex) {
-                                                        output(Globals.lang("Error") + ": " + ex.getMessage());
-                                                    }
-                                                }
-                                            }
-
-                                            // TODO: add code for opening the file
-                                        }
-                                    }
-                                    /*String basefile;
-                                    Object key = bes[0].getField(BibtexFields.KEY_FIELD);
-                                    if (key != null) {
-                                        basefile = key.toString();
-                                        final ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
-                                        final String sep = System.getProperty("file.separator");
-                                        String dir = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
-                                        if ((dir != null) && (dir.length() > 0)) {
-                                            if (dir.endsWith(sep)) {
-                                                dir = dir.substring(0, dir.length() - sep.length());
-                                            }
-                                            for (int i = 0; i < types.length; i++) {
-                                                String found = Util.findPdf(basefile, types[i].getExtension(),
-                                                        dir, new OpenFileFilter("." + types[i].getExtension()));
-                                                if (found != null) {
-                                                    filepath = dir + sep + found;
-                                                    break;
-                                                }
-                                            }
-                                        }
-                                    }*/
-                                }
-                            }
-
-
-                            if (filepath != null) {
-                                //output(Globals.lang("Calling external viewer..."));
-                                try {
-                                    Util.openExternalViewer(metaData(), filepath, field);
-                                    output(Globals.lang("External viewer called") + ".");
-                                }
-                                catch (IOException ex) {
-                                    output(Globals.lang("Error") + ": " + ex.getMessage());
-                                }
-                            } else
-                                output(Globals.lang(
-                                        "No pdf or ps defined, and no file matching Bibtex key found") +
-                                        ".");
-                        } else
-                            output(Globals.lang("No entries or multiple entries selected."));
-                    }
-                }).start();
-            }
-        });
-
-        actions.put("addFileLink", new AttachFileAction(this));
-
-        actions.put("openExternalFile", new BaseAction() {
-            public void action() {
-                (new Thread() {
-                    public void run() {
-                        BibtexEntry[] bes = mainTable.getSelectedEntries();
-                        String field = GUIGlobals.FILE_FIELD;
-                        if ((bes != null) && (bes.length == 1)) {
-                            Object link = bes[0].getField(field);
-                            if (link == null) {
-                                runCommand("openFile"); // Fall back on PDF/PS fields???
-                                return;
-                            }
-                            FileListTableModel tableModel = new FileListTableModel();
-                            tableModel.setContent((String)link);
-                            if (tableModel.getRowCount() == 0) {
-                                runCommand("openFile"); // Fall back on PDF/PS fields???
-                                return;
-                            }
-                            FileListEntry flEntry = tableModel.getEntry(0);
-                            ExternalFileMenuItem item = new ExternalFileMenuItem
-                                (frame(), bes[0], "",
-                                flEntry.getLink(), flEntry.getType().getIcon(),
-                                metaData(), flEntry.getType());
-                            item.openLink();
-                        } else
-                            output(Globals.lang("No entries or multiple entries selected."));
-                    }
-                }).start();
-            }
-        });
-
-
-        actions.put("openUrl", new BaseAction() {
-            public void action() {
-                BibtexEntry[] bes = mainTable.getSelectedEntries();
-                String field = "doi";
-                if ((bes != null) && (bes.length == 1)) {
-                    Object link = bes[0].getField("doi");
-                    if (bes[0].getField("url") != null) {
-                        link = bes[0].getField("url");
-                        field = "url";
-                    }
-                    if (link != null) {
-                        //output(Globals.lang("Calling external viewer..."));
-                        try {
-                            Util.openExternalViewer(metaData(), link.toString(), field);
-                            output(Globals.lang("External viewer called")+".");
-                        } catch (IOException ex) {
-                            output(Globals.lang("Error") + ": " + ex.getMessage());
-                        }
-                    }
-                    else {
-                        // No URL or DOI found in the "url" and "doi" fields.
-                        // Look for web links in the "file" field as a fallback:
-                        FileListEntry entry = null;
-                        FileListTableModel tm = new FileListTableModel();
-                        tm.setContent(bes[0].getField("file"));
-                        for (int i=0; i< tm.getRowCount(); i++) {
-                            FileListEntry flEntry = tm.getEntry(i);
-                            if (flEntry.getType().getName().toLowerCase().equals("url")
-                                    || flEntry.getType().getName().toLowerCase().equals("ps")) {
-                                entry = flEntry;
-                                break;
-                            }
-                        }
-                        if (entry != null) {
-                            try {
-                                Util.openExternalFileAnyFormat(metaData, entry.getLink(), entry.getType());
-                                output(Globals.lang("External viewer called") + ".");
-                            } catch (IOException e) {
-                                output(Globals.lang("Could not open link"));
-                                e.printStackTrace();
-                            }
-                            return;
-                        } else
-                            output(Globals.lang("No url defined")+".");
-                    }
-                } else
-                    output(Globals.lang("No entries or multiple entries selected."));
-            }
-        });
-
-        actions.put("openSpires", new BaseAction() {
-        	public void action() {
-        		BibtexEntry[] bes = mainTable.getSelectedEntries();
-                if ((bes != null) && (bes.length == 1)) {
-                	Object link = null;
-                    if (bes[0].getField("eprint") != null)
-                      link = SPIRESFetcher.constructUrlFromEprint(bes[0].getField("eprint").toString());
-                    else if (bes[0].getField("slaccitation") != null)
-                        link = SPIRESFetcher.constructUrlFromSlaccitation(bes[0].getField("slaccitation").toString());
-                    if (link != null) {
-                      //output(Globals.lang("Calling external viewer..."));
-                      try {
-                        Util.openExternalViewer(metaData(), link.toString(), "url");
-                        output(Globals.lang("External viewer called")+".");
-                      } catch (IOException ex) {
-                          output(Globals.lang("Error") + ": " + ex.getMessage());
-                      }
-                    }
-                    else
-                        output(Globals.lang("No url defined")+".");
-                } else
-                  output(Globals.lang("No entries or multiple entries selected."));
-            }
-        	});
-
-		/*
-		 *  It looks like this action was not being supported for SPIRES anyway
-		 *  so we don't bother to implement it.
-        actions.put("openInspire", new BaseAction() {
-        	public void action() {
-        		BibtexEntry[] bes = mainTable.getSelectedEntries();
-                if ((bes != null) && (bes.length == 1)) {
-                	Object link = null;
-                    if (bes[0].getField("eprint") != null)
-                      link = INSPIREFetcher.constructUrlFromEprint(bes[0].getField("eprint").toString());
-                    else if (bes[0].getField("slaccitation") != null)
-                        link = INSPIREFetcher.constructUrlFromSlaccitation(bes[0].getField("slaccitation").toString());
-                    if (link != null) {
-                      //output(Globals.lang("Calling external viewer..."));
-                      try {
-                        Util.openExternalViewer(metaData(), link.toString(), "url");
-                        output(Globals.lang("External viewer called")+".");
-                      } catch (IOException ex) {
-                          output(Globals.lang("Error") + ": " + ex.getMessage());
-                      }
-                    }
-                    else
-                        output(Globals.lang("No url defined")+".");
-                } else
-                  output(Globals.lang("No entries or multiple entries selected."));
-            }
-        	});
-			*/
-
-        
-          actions.put("replaceAll", new BaseAction() {
-                    public void action() {
-                      ReplaceStringDialog rsd = new ReplaceStringDialog(frame);
-                      rsd.setVisible(true);
-                      if (!rsd.okPressed())
-                          return;
-                      int counter = 0;
-                      NamedCompound ce = new NamedCompound(Globals.lang("Replace string"));
-                      if (!rsd.selOnly()) {
-                    	  for (BibtexEntry entry : database.getEntries()){
-                              counter += rsd.replace(entry, ce);
-                    	  }
-                      } else {
-                          BibtexEntry[] bes = mainTable.getSelectedEntries();
-                          for (int i=0; i<bes.length; i++)
-                              counter += rsd.replace(bes[i], ce);
-                      }
-
-                      output(Globals.lang("Replaced")+" "+counter+" "+
-                             Globals.lang(counter==1?"occurence":"occurences")+".");
-                      if (counter > 0) {
-                          ce.end();
-                          undoManager.addEdit(ce);
-                          markBaseChanged();
-                      }
-                  }
-              });
-
-              actions.put("dupliCheck", new BaseAction() {
-                public void action() {
-                  DuplicateSearch ds = new DuplicateSearch(BasePanel.this);
-                  ds.start();
-                }
-              });
-
-              /*actions.put("strictDupliCheck", new BaseAction() {
-                public void action() {
-                  StrictDuplicateSearch ds = new StrictDuplicateSearch(BasePanel.this);
-                  ds.start();
-                }
-              });*/
-
-              actions.put("plainTextImport", new BaseAction() {
-                public void action()
-                {
-                  // get Type of new entry
-                  EntryTypeDialog etd = new EntryTypeDialog(frame);
-                  Util.placeDialog(etd, BasePanel.this);
-                  etd.setVisible(true);
-                  BibtexEntryType tp = etd.getChoice();
-                  if (tp == null)
-                    return;
-
-                  String id = Util.createNeutralId();
-                  BibtexEntry bibEntry = new BibtexEntry(id, tp) ;
-                  TextInputDialog tidialog = new TextInputDialog(frame, BasePanel.this,
-                                                                 "import", true,
-                                                                 bibEntry) ;
-                  Util.placeDialog(tidialog, BasePanel.this);
-                  tidialog.setVisible(true);
-
-                  if (tidialog.okPressed())
-                  {
-                      Util.setAutomaticFields(Arrays.asList(new BibtexEntry[] {bibEntry}),
-                              false, false, false);
-                    insertEntry(bibEntry) ;
-                  }
-                }
-              });
-
-              // The action starts the "import from plain text" dialog
-              /*actions.put("importPlainText", new BaseAction() {
-                      public void action()
-                      {
-                        BibtexEntry bibEntry = null ;
-                        // try to get the first marked entry
-                        BibtexEntry[] bes = entryTable.getSelectedEntries();
-                        if ((bes != null) && (bes.length > 0))
-                          bibEntry = bes[0] ;
-
-                        if (bibEntry != null)
-                        {
-                          // Create an UndoableInsertEntry object.
-                          undoManager.addEdit(new UndoableInsertEntry(database, bibEntry, BasePanel.this));
-
-                          TextInputDialog tidialog = new TextInputDialog(frame, BasePanel.this,
-                                                                         "import", true,
-                                                                         bibEntry) ;
-                          Util.placeDialog(tidialog, BasePanel.this);
-                          tidialog.setVisible(true);
-
-                          if (tidialog.okPressed())
-                          {
-                            output(Globals.lang("changed ")+" '"
-                                   +bibEntry.getType().getName().toLowerCase()+"' "
-                                   +Globals.lang("entry")+".");
-                            refreshTable();
-                            int row = tableModel.getNumberFromName(bibEntry.getId());
-
-                            entryTable.clearSelection();
-                            entryTable.scrollTo(row);
-                            markBaseChanged(); // The database just changed.
-                            if (Globals.prefs.getBoolean("autoOpenForm"))
-                            {
-                                  showEntry(bibEntry);
-                            }
-                          }
-                        }
-                      }
-                  });
-                */
-              actions.put("markEntries", new AbstractWorker() {
-                  private int besLength = -1;
-                public void run() {
-
-                  NamedCompound ce = new NamedCompound(Globals.lang("Mark entries"));
-                  BibtexEntry[] bes = mainTable.getSelectedEntries();
-                  besLength = bes.length;
-
-                  for (int i=0; i<bes.length; i++) {
-                      Util.markEntry(bes[i], 1, true, ce);
-                  }
-                  ce.end();
-                  undoManager.addEdit(ce);
-                }
-
-                public void update() {
-                  markBaseChanged();
-                  output(Globals.lang("Marked selected")+" "+Globals.lang(besLength>0?"entry":"entries"));
-
-                }
-              });
-
-              actions.put("unmarkEntries", new BaseAction() {
-                public void action() {
-                    try {
-                  NamedCompound ce = new NamedCompound(Globals.lang("Unmark entries"));
-                  BibtexEntry[] bes = mainTable.getSelectedEntries();
-          if (bes == null)
-              return;
-                  for (int i=0; i<bes.length; i++) {
-                      Util.unmarkEntry(bes[i], false, database, ce);
-                  }
-                  ce.end();
-                  undoManager.addEdit(ce);
-                  markBaseChanged();
-                  output(Globals.lang("Unmarked selected")+" "+Globals.lang(bes.length>0?"entry":"entries"));
-                    } catch (Throwable ex) { ex.printStackTrace(); }
-                }
-              });
-
-              actions.put("unmarkAll", new BaseAction() {
-                public void action() {
-                  NamedCompound ce = new NamedCompound(Globals.lang("Unmark all"));
-                  
-                  for (BibtexEntry be : database.getEntries()){
-                    Util.unmarkEntry(be, false, database, ce);
-                  }
-                  ce.end();
-                  undoManager.addEdit(ce);
-                  markBaseChanged();
-                }
-              });
-              
-              actions.put(Relevance.getInstance().getValues().get(0).getActionName(), 
-                  new SpecialFieldAction(frame, Relevance.getInstance(), Relevance.getInstance().getValues().get(0).getFieldValue(), true, Globals.lang("Marked entries as relevant"), "Marked %0 entries as relevant"));
-              actions.put(Quality.getInstance().getValues().get(0).getActionName(),
-                  new SpecialFieldAction(frame, Quality.getInstance(), Quality.getInstance().getValues().get(0).getFieldValue(), true, Globals.lang("Marked entries' quality as good"), "Set quality of %0 entries to good"));
-              
-              for (SpecialFieldValue prio: Priority.getInstance().getValues()) {
-	              actions.put(prio.getActionName(), prio.getAction(this.frame));
-              }
-              
-              for (SpecialFieldValue prio: Rank.getInstance().getValues()) {
-	              actions.put(prio.getActionName(), prio.getAction(this.frame));
-              }
-              
-              actions.put("togglePreview", new BaseAction() {
-                      public void action() {
-                          boolean enabled = !Globals.prefs.getBoolean("previewEnabled");
-                          Globals.prefs.putBoolean("previewEnabled", enabled);
-                          frame.setPreviewActive(enabled);
-                          frame.previewToggle.setSelected(enabled);
-                      }
-                  });
-
-              actions.put("toggleHighlightGroupsMatchingAny", new BaseAction() {
-                public void action() {
-                    boolean enabled = !Globals.prefs.getBoolean("highlightGroupsMatchingAny");
-                    Globals.prefs.putBoolean("highlightGroupsMatchingAny", enabled);
-                    frame.highlightAny.setSelected(enabled);
-                    if (enabled) {
-                        frame.highlightAll.setSelected(false);
-                        Globals.prefs.putBoolean("highlightGroupsMatchingAll", false);
-                    }
-                    // ping the listener so it updates:
-                    groupsHighlightListener.listChanged(null);
-                }
-              });
-
-              actions.put("toggleHighlightGroupsMatchingAll", new BaseAction() {
-                  public void action() {
-                      boolean enabled = !Globals.prefs.getBoolean("highlightGroupsMatchingAll");
-                      Globals.prefs.putBoolean("highlightGroupsMatchingAll", enabled);
-                      frame.highlightAll.setSelected(enabled);
-                      if (enabled) {
-                          frame.highlightAny.setSelected(false);
-                          Globals.prefs.putBoolean("highlightGroupsMatchingAny", false);
-                      }
-                      // ping the listener so it updates:
-                      groupsHighlightListener.listChanged(null);
-                  }
-                });
-
-              actions.put("switchPreview", new BaseAction() {
-                      public void action() {
-                          selectionListener.switchPreview();
-                      }
-                  });
-
-              actions.put("manageSelectors", new BaseAction() {
-                      public void action() {
-                          ContentSelectorDialog2 csd = new ContentSelectorDialog2
-                              (frame, frame, BasePanel.this, false, metaData, null);
-                          Util.placeDialog(csd, frame);
-                          csd.setVisible(true);
-                      }
-                  });
-
-        actions.put("exportToClipboard", new ExportToClipboardAction(frame, database()));
-        actions.put("sendAsEmail", new SendAsEMailAction(frame));
-        
-          
-        actions.put("writeXMP", new WriteXMPAction(this));
-        
-        actions.put("abbreviateIso", new AbbreviateAction(this, true));
-        actions.put("abbreviateMedline", new AbbreviateAction(this, false));
-        actions.put("unabbreviate", new UnabbreviateAction(this));
-        actions.put("autoSetPdf", new AutoSetExternalFileForEntries(this, "pdf"));
-        actions.put("autoSetPs", new AutoSetExternalFileForEntries(this, "ps"));
-        actions.put("autoSetFile", new SynchronizeFileField(this));
-
-        actions.put("back", new BaseAction() {
-            public void action() throws Throwable {
-                back();
-            }
-        });
-        actions.put("forward", new BaseAction() {
-            public void action() throws Throwable {
-                forward();
-            }
-        });
-
-        actions.put("resolveDuplicateKeys", new SearchFixDuplicateLabels(this));
-
-        //actions.put("downloadFullText", new FindFullTextAction(this));
-    }
-
-    /**
-     * This method is called from JabRefFrame is a database specific
-     * action is requested by the user. Runs the command if it is
-     * defined, or prints an error message to the standard error
-     * stream.
-     *
-     * @param _command The name of the command to run.
-    */
-    public void runCommand(String _command) {
-      final String command = _command;
-      //(new Thread() {
-      //  public void run() {
-          if (actions.get(command) == null)
-            Util.pr("No action defined for'" + command + "'");
-            else {
-        Object o = actions.get(command);
-        try {
-            if (o instanceof BaseAction)
-            ((BaseAction)o).action();
-            else {
-            // This part uses Spin's features:
-            Worker wrk = ((AbstractWorker)o).getWorker();
-            // The Worker returned by getWorker() has been wrapped
-            // by Spin.off(), which makes its methods be run in
-            // a different thread from the EDT.
-            CallBack clb = ((AbstractWorker)o).getCallBack();
-
-            ((AbstractWorker)o).init(); // This method runs in this same thread, the EDT.
-            // Useful for initial GUI actions, like printing a message.
-
-            // The CallBack returned by getCallBack() has been wrapped
-            // by Spin.over(), which makes its methods be run on
-            // the EDT.
-            wrk.run(); // Runs the potentially time-consuming action
-            // without freezing the GUI. The magic is that THIS line
-            // of execution will not continue until run() is finished.
-            clb.update(); // Runs the update() method on the EDT.
-            }
-        } catch (Throwable ex) {
-            // If the action has blocked the JabRefFrame before crashing, we need to unblock it.
-            // The call to unblock will simply hide the glasspane, so there is no harm in calling
-            // it even if the frame hasn't been blocked.
-            frame.unblock();
-            ex.printStackTrace();
-        }
-        }
-      //  }
-      //}).start();
-    }
-
-    private boolean saveDatabase(File file, boolean selectedOnly, String encoding) throws SaveException {
-        SaveSession session;
-        frame.block();
-        try {
-            if (!selectedOnly)
-                session = FileActions.saveDatabase(database, metaData, file,
-                                           Globals.prefs, false, false, encoding, false);
-            else
-                session = FileActions.savePartOfDatabase(database, metaData, file,
-                                               Globals.prefs, mainTable.getSelectedEntries(), encoding);
-
-        } catch (UnsupportedCharsetException ex2) {
-            JOptionPane.showMessageDialog(frame, Globals.lang("Could not save file. "
-                +"Character encoding '%0' is not supported.", encoding),
-                    Globals.lang("Save database"), JOptionPane.ERROR_MESSAGE);
-            throw new SaveException("rt");
-        } catch (SaveException ex) {
-            if (ex.specificEntry()) {
-                // Error occured during processing of
-                // be. Highlight it:
-                int row = mainTable.findEntry(ex.getEntry()),
-                    topShow = Math.max(0, row-3);
-                mainTable.setRowSelectionInterval(row, row);
-                mainTable.scrollTo(topShow);
-                showEntry(ex.getEntry());
-            }
-            else ex.printStackTrace();
-
-            JOptionPane.showMessageDialog
-                (frame, Globals.lang("Could not save file")
-                 +".\n"+ex.getMessage(),
-                 Globals.lang("Save database"),
-                 JOptionPane.ERROR_MESSAGE);
-            throw new SaveException("rt");
-
-        } finally {
-            frame.unblock();
-        }
-
-        boolean commit = true;
-        if (!session.getWriter().couldEncodeAll()) {
-            DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("left:pref, 4dlu, fill:pref", ""));
-            JTextArea ta = new JTextArea(session.getWriter().getProblemCharacters());
-            ta.setEditable(false);
-            builder.append(Globals.lang("The chosen encoding '%0' could not encode the following characters: ",
-                      session.getEncoding()));
-            builder.append(ta);
-            builder.append(Globals.lang("What do you want to do?"));
-            String tryDiff = Globals.lang("Try different encoding");
-            int answer = JOptionPane.showOptionDialog(frame, builder.getPanel(), Globals.lang("Save database"),
-                    JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null,
-                    new String[] {Globals.lang("Save"), tryDiff, Globals.lang("Cancel")}, tryDiff);
-
-            if (answer == JOptionPane.NO_OPTION) {
-                // The user wants to use another encoding.
-                Object choice = JOptionPane.showInputDialog(frame, Globals.lang("Select encoding"), Globals.lang("Save database"),
-                        JOptionPane.QUESTION_MESSAGE, null, Globals.ENCODINGS, encoding);
-                if (choice != null) {
-                    String newEncoding = (String)choice;
-                    return saveDatabase(file, selectedOnly, newEncoding);
-                } else
-                    commit = false;
-            } else if (answer == JOptionPane.CANCEL_OPTION)
-                    commit = false;
-
-
-          }
-
-        try {
-            if (commit) {
-                session.commit();
-                this.encoding = encoding; // Make sure to remember which encoding we used.
-            }
-            else
-                session.cancel();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-
-        return commit;
-    }
-
-
-    /**
-     * This method is called from JabRefFrame when the user wants to
-     * create a new entry. If the argument is null, the user is
-     * prompted for an entry type.
-     *
-     * @param type The type of the entry to create.
-     * @return The newly created BibtexEntry or null the operation was canceled by the user.
-     */
-    public BibtexEntry newEntry(BibtexEntryType type) {
-        if (type == null) {
-            // Find out what type is wanted.
-            EntryTypeDialog etd = new EntryTypeDialog(frame);
-            // We want to center the dialog, to make it look nicer.
-            Util.placeDialog(etd, frame);
-            etd.setVisible(true);
-            type = etd.getChoice();
-        }
-        if (type != null) { // Only if the dialog was not cancelled.
-            String id = Util.createNeutralId();            
-            final BibtexEntry be = new BibtexEntry(id, type);
-            try {
-                database.insertEntry(be);
-                // Set owner/timestamp if options are enabled:
-                ArrayList<BibtexEntry> list = new ArrayList<BibtexEntry>();
-                list.add(be);                
-                Util.setAutomaticFields(list, true, true, false);
-
-                // Create an UndoableInsertEntry object.
-                undoManager.addEdit(new UndoableInsertEntry(database, be, BasePanel.this));
-                output(Globals.lang("Added new")+" '"+type.getName().toLowerCase()+"' "
-                       +Globals.lang("entry")+".");
-
-                // We are going to select the new entry. Before that, make sure that we are in
-                // show-entry mode. If we aren't already in that mode, enter the WILL_SHOW_EDITOR
-                // mode which makes sure the selection will trigger display of the entry editor
-                // and adjustment of the splitter.
-                if (mode != SHOWING_EDITOR) {
-                    mode = WILL_SHOW_EDITOR;
-                }
-
-                int row = mainTable.findEntry(be);
-                if (row >= 0)
-                    highlightEntry(be);  // Selects the entry. The selection listener will open the editor.
-                else {
-                    // The entry is not visible in the table, perhaps due to a filtering search
-                    // or group selection. Show the entry editor anyway:
-                    showEntry(be);
-                }
-
-                markBaseChanged(); // The database just changed.
-                new FocusRequester(getEntryEditor(be));              
-
-                //Add the new entry to the group(s) selected in the Group Panel
-                addToSelectedGroup(be);
-
-                // Set Self-Created entries to have a high quality
-                be.setField("quality", "1");
-                
-                return be;
-            } catch (KeyCollisionException ex) {
-                Util.pr(ex.getMessage());
-            }
-        }
-        return null;
-    }
-
-    /**
-     * This method is called to add a new entry to a group (or a set of groups)
-     * in case the Group View is selected and one or more groups are marked
-     * @param bibEntry The new entry.
-     */    
-	private void addToSelectedGroup(final BibtexEntry bibEntry) {
-		if (Globals.prefs.getBoolean("autoAssignGroup")){
-			if (frame.groupToggle.isSelected()){
-				BibtexEntry[] entries = {bibEntry};
-				TreePath[] selection = frame.groupSelector.getGroupsTree().getSelectionPaths();
-				if (selection != null) {
-					// it is possible that the user selected nothing. Therefore, checked for "!= null"
-					for (TreePath tree : selection){
-						((GroupTreeNode)(tree.getLastPathComponent())).addToGroup(entries);
-					}
-				}
-				this.updateEntryEditorIfShowing();
-				this.getGroupSelector().valueChanged(null);
-			}
-		}
-	}
-
-    /**
-     * This method is called from JabRefFrame when the user wants to
-     * create a new entry.
-     * @param bibEntry The new entry.
-     */
-    public void insertEntry(BibtexEntry bibEntry)
-    {
-      if (bibEntry != null)
-      {
-        try
-        {
-          database.insertEntry(bibEntry) ;
-          if (Globals.prefs.getBoolean("useOwner"))
-            // Set owner field to default value
-        	Util.setAutomaticFields(bibEntry, true, true);
-            // Create an UndoableInsertEntry object.
-            undoManager.addEdit(new UndoableInsertEntry(database, bibEntry, BasePanel.this));
-            output(Globals.lang("Added new")+" '"
-                   +bibEntry.getType().getName().toLowerCase()+"' "
-                   +Globals.lang("entry")+".");
-
-            markBaseChanged(); // The database just changed.
-            if (Globals.prefs.getBoolean("autoOpenForm"))
-            {
-                  selectionListener.editSignalled(bibEntry);
-            }
-            highlightEntry(bibEntry);
-        } catch (KeyCollisionException ex) { Util.pr(ex.getMessage()); }
-      }
-    }
-
-    public void updateTableFont() {
-        mainTable.updateFont();
-    }
-
-    public void createMainTable() {
-        //Comparator comp = new FieldComparator("author");
-
-        GlazedEntrySorter eventList = new GlazedEntrySorter(database.getEntryMap());
-        // Must initialize sort columns somehow:
-
-        database.addDatabaseChangeListener(eventList);
-        database.addDatabaseChangeListener(SpecialFieldDatabaseChangeListener.getInstance());
-        groupFilterList = new FilterList<BibtexEntry>(eventList.getTheList(), NoSearchMatcher.INSTANCE);
-        searchFilterList = new FilterList<BibtexEntry>(groupFilterList, NoSearchMatcher.INSTANCE);
-        //final SortedList sortedList = new SortedList(searchFilterList, null);
-        tableFormat = new MainTableFormat(this);
-        tableFormat.updateTableFormat();
-        //EventTableModel tableModel = new EventTableModel(sortedList, tableFormat);
-        mainTable = new MainTable(tableFormat, searchFilterList, frame, this);
-        
-        selectionListener = new MainTableSelectionListener(this, mainTable);
-        mainTable.updateFont();
-        mainTable.addSelectionListener(selectionListener);
-        mainTable.addMouseListener(selectionListener);
-        mainTable.addKeyListener(selectionListener);
-        mainTable.addFocusListener(selectionListener);
-        
-        // Add the listener that will take care of highlighting groups as the selection changes:
-        groupsHighlightListener = new ListEventListener<BibtexEntry>() {
-            public void listChanged(ListEvent<BibtexEntry> listEvent) {
-                if (Globals.prefs.getBoolean("highlightGroupsMatchingAny"))
-                    getGroupSelector().showMatchingGroups(
-                            mainTable.getSelectedEntries(), false);
-                else if (Globals.prefs.getBoolean("highlightGroupsMatchingAll"))
-                    getGroupSelector().showMatchingGroups(
-                            mainTable.getSelectedEntries(), true);
-                else // no highlight
-                    getGroupSelector().showMatchingGroups(null, true);
-            }
-        };
-        mainTable.addSelectionListener(groupsHighlightListener);
-
-        mainTable.getActionMap().put("cut", new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    try { runCommand("cut");
-                    } catch (Throwable ex) {
-                        ex.printStackTrace();
-                    }
-                }
-            });
-        mainTable.getActionMap().put("copy", new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    try { runCommand("copy");
-                    } catch (Throwable ex) {
-                        ex.printStackTrace();
-                    }
-                }
-            });
-        mainTable.getActionMap().put("paste", new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    try { runCommand("paste");
-                    } catch (Throwable ex) {
-                        ex.printStackTrace();
-                    }
-                }
-            });
-
-        mainTable.addKeyListener(new KeyAdapter() {
-
-                public void keyPressed(KeyEvent e) {
-                    final int keyCode = e.getKeyCode();
-                    final TreePath path = frame.groupSelector.getSelectionPath();
-                    final GroupTreeNode node = path == null ? null : (GroupTreeNode) path.getLastPathComponent();
-
-                    if (e.isControlDown()) {
-                        switch (keyCode) {
-                        // The up/down/left/rightkeystrokes are displayed in the
-                        // GroupSelector's popup menu, so if they are to be changed,
-                        // edit GroupSelector.java accordingly!
-                        case KeyEvent.VK_UP:
-                            e.consume();
-                            if (node != null)
-                                frame.groupSelector.moveNodeUp(node, true);
-                            break;
-                        case KeyEvent.VK_DOWN:
-                            e.consume();
-                            if (node != null)
-                                frame.groupSelector.moveNodeDown(node, true);
-                            break;
-                        case KeyEvent.VK_LEFT:
-                            e.consume();
-                            if (node != null)
-                                frame.groupSelector.moveNodeLeft(node, true);
-                            break;
-                        case KeyEvent.VK_RIGHT:
-                            e.consume();
-                            if (node != null)
-                                frame.groupSelector.moveNodeRight(node, true);
-                            break;
-                        case KeyEvent.VK_PAGE_DOWN:
-                            frame.nextTab.actionPerformed(null);
-                            e.consume();
-                            break;
-                        case KeyEvent.VK_PAGE_UP:
-                            frame.prevTab.actionPerformed(null);
-                            e.consume();
-                            break;
-                        }
-                    } else if (keyCode == KeyEvent.VK_ENTER){
-                        e.consume();
-                        try { runCommand("edit");
-                        } catch (Throwable ex) {
-                            ex.printStackTrace();
-                        }
-                    }
-                }
-        });
-    }
-
-    public void setupMainPanel() {
-        //System.out.println("setupMainPanel");
-        //splitPane = new com.jgoodies.uif_lite.component.UIFSplitPane(JSplitPane.VERTICAL_SPLIT);
-        splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
-        splitPane.setDividerSize(GUIGlobals.SPLIT_PANE_DIVIDER_SIZE);
-        // We replace the default FocusTraversalPolicy with a subclass
-        // that only allows FieldEditor components to gain keyboard focus,
-        // if there is an entry editor open.
-        /*splitPane.setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {
-                protected boolean accept(Component c) {
-                    Util.pr("jaa");
-                    if (showing == null)
-                        return super.accept(c);
-                    else
-                        return (super.accept(c) &&
-                                (c instanceof FieldEditor));
-                }
-                });*/
-
-        createMainTable();
-
-        for (EntryEditor ee : entryEditors.values()) {
-            ee.validateAllFields();
-        }
-
-
-
-        splitPane.setTopComponent(mainTable.getPane());
-
-        //setupTable();
-        // If an entry is currently being shown, make sure it stays shown,
-        // otherwise set the bottom component to null.
-        if (mode == SHOWING_PREVIEW) {
-            mode = SHOWING_NOTHING;
-            int row = mainTable.findEntry(currentPreview.entry);
-            if (row >= 0)
-                mainTable.setRowSelectionInterval(row, row);
-
-        }
-        else if (mode == SHOWING_EDITOR) {
-            mode = SHOWING_NOTHING;
-            /*int row = mainTable.findEntry(currentEditor.entry);
-            if (row >= 0)
-                mainTable.setRowSelectionInterval(row, row);
-            */
-            //showEntryEditor(currentEditor);
-        } else
-            splitPane.setBottomComponent(null);
-
-
-        setLayout(new BorderLayout());
-        removeAll();
-        add(splitPane, BorderLayout.CENTER);
-
-        // Set up name autocompleter for search:
-        instantiateSearchAutoCompleter();
-
-        // Set up AutoCompleters for this panel:
-        if (Globals.prefs.getBoolean("autoComplete")) {
-            instantiateAutoCompleters();
-        }
-
-        splitPane.revalidate();
-        revalidate();
-        repaint();
-    }
-
-    public void updateSearchManager() {
-        frame.getSearchManager().setAutoCompleteListener(searchCompleteListener);
-    }
-
-    public HashMap<String, AbstractAutoCompleter> getAutoCompleters() {
-        return autoCompleters;
-    }
-    
-    public AbstractAutoCompleter getAutoCompleter(String fieldName) {
-        return autoCompleters.get(fieldName);
-    }
-
-    private void instantiateSearchAutoCompleter() {
-        //if (!Globals.prefs.getBoolean("searchAutoComplete"))
-        //    return;
-        searchCompleter = new NameFieldAutoCompleter(new String[] {"author", "editor"}, true);
-        HashMap<String, AbstractAutoCompleter> hm = new HashMap<String, AbstractAutoCompleter>();
-        hm.put("x", searchCompleter);
-        for (BibtexEntry entry : database.getEntries()){
-            Util.updateCompletersForEntry(hm, entry);
-        }
-        searchCompleteListener = new AutoCompleteListener(searchCompleter);
-        searchCompleteListener.setConsumeEnterKey(false); // So you don't have to press Enter twice
-    }
-
-    private void instantiateAutoCompleters() {
-        autoCompleters.clear();
-        String[] completeFields = Globals.prefs.getStringArray("autoCompleteFields");
-        for (int i = 0; i < completeFields.length; i++) {
-            String field = completeFields[i];
-            AbstractAutoCompleter autoCompleter = AutoCompleterFactory.getFor(field);
-			autoCompleters.put(field, autoCompleter );
-        }
-        for (BibtexEntry entry : database.getEntries()){
-            Util.updateCompletersForEntry(autoCompleters, entry);
-        }
-
-        addJournalListToAutoCompleter();
-        addContentSelectorValuesToAutoCompleters();
-    }
-
-    /**
-     * For all fields with both autocompletion and content selector, add content selector
-     * values to the autocompleter list:
-     */
-    public void addContentSelectorValuesToAutoCompleters() {
-        for (String field : autoCompleters.keySet()) {
-            AbstractAutoCompleter ac = autoCompleters.get(field);
-            if (metaData.getData(Globals.SELECTOR_META_PREFIX + field) != null) {
-                Vector<String> items = metaData.getData(Globals.SELECTOR_META_PREFIX + field);
-                if (items != null) {
-                    Iterator<String> i = items.iterator();
-                    while (i.hasNext())
-                        ac.addWordToIndex(i.next());
-                }
-            }
-        }
-    }
-
-    /**
-     * If an autocompleter exists for the "journal" field, add all
-     * journal names in the journal abbreviation list to this autocompleter.
-     */
-    public void addJournalListToAutoCompleter() {
-        if (autoCompleters.containsKey("journal")) {
-            AbstractAutoCompleter ac = autoCompleters.get("journal");
-            Set<String> journals = Globals.journalAbbrev.getJournals().keySet();
-            for (String journal : journals)
-                ac.addWordToIndex(journal);
-        }
-
-
-    }
-
-
-    /*
-    public void refreshTable() {
-        //System.out.println("hiding="+hidingNonHits+"\tlastHits="+lastSearchHits);
-        // This method is called by EntryTypeForm when a field value is
-        // stored. The table is scheduled for repaint.
-        entryTable.assureNotEditing();
-        //entryTable.invalidate();
-        BibtexEntry[] bes = entryTable.getSelectedEntries();
-    if (hidingNonHits)
-        tableModel.update(lastSearchHits);
-    else
-        tableModel.update();
-    //tableModel.remap();
-        if ((bes != null) && (bes.length > 0))
-            selectEntries(bes, 0);
-
-    //long toc = System.currentTimeMillis();
-    //	Util.pr("Refresh took: "+(toc-tic)+" ms");
-    } */
-
-    public void updatePreamble() {
-        if (preambleEditor != null)
-            preambleEditor.updatePreamble();
-    }
-
-    public void assureStringDialogNotEditing() {
-        if (stringDialog != null)
-            stringDialog.assureNotEditing();
-    }
-
-    public void updateStringDialog() {
-        if (stringDialog != null)
-            stringDialog.refreshTable();
-    }
-
-    public void updateEntryPreviewToRow(BibtexEntry e) {
-
-    }
-
-    public void adjustSplitter() {
-        int mode = getMode();
-        if (mode == SHOWING_PREVIEW) {
-            splitPane.setDividerLocation(splitPane.getHeight()-Globals.prefs.getInt("previewPanelHeight"));
-        } else {
-            splitPane.setDividerLocation(splitPane.getHeight()-Globals.prefs.getInt("entryEditorHeight"));
-
-        }
-    }
-
-
-
-    /**
-     * Stores the source view in the entry editor, if one is open, has the source view
-     * selected and the source has been edited.
-     * @return boolean false if there is a validation error in the source panel, true otherwise.
-     */
-    public boolean entryEditorAllowsChange() {
-      Component c = splitPane.getBottomComponent();
-      if ((c != null) && (c instanceof EntryEditor)) {
-        return ((EntryEditor)c).lastSourceAccepted();
-      }
-      else
-        return true;
-    }
-
-    public void moveFocusToEntryEditor() {
-      Component c = splitPane.getBottomComponent();
-      if ((c != null) && (c instanceof EntryEditor)) {
-        new FocusRequester(c);
-      }
-    }
-
-    public boolean isShowingEditor() {
-      return ((splitPane.getBottomComponent() != null)
-              && (splitPane.getBottomComponent() instanceof EntryEditor));
-    }
-
-    public void showEntry(final BibtexEntry be) {
-
-        if (getShowing() == be) {
-            if (splitPane.getBottomComponent() == null) {
-                // This is the special occasion when showing is set to an
-                // entry, but no entry editor is in fact shown. This happens
-                // after Preferences dialog is closed, and it means that we
-                // must make sure the same entry is shown again. We do this by
-                // setting showing to null, and recursively calling this method.
-                newEntryShowing(null);
-                showEntry(be);
-            } else {
-              // The correct entry is already being shown. Make sure the editor
-              // is updated.
-              ((EntryEditor)splitPane.getBottomComponent()).updateAllFields();
-
-            }
-            return;
-
-        }
-
-        EntryEditor form;
-        int divLoc = -1;
-        String visName = null;
-        if (getShowing() != null) {
-        	if (isShowingEditor()) {
-        		visName = ((EntryEditor) splitPane.getBottomComponent()).getVisiblePanelName();
-        	}
-        }
-        if (getShowing() != null)
-            divLoc = splitPane.getDividerLocation();
-
-        if (entryEditors.containsKey(be.getType().getName())) {
-            // We already have an editor for this entry type.
-            form = entryEditors.get
-                ((be.getType().getName()));
-            form.switchTo(be);
-            if (visName != null)
-                form.setVisiblePanel(visName);
-            splitPane.setBottomComponent(form);
-            //highlightEntry(be);
-        } else {
-            // We must instantiate a new editor for this type.
-            form = new EntryEditor(frame, BasePanel.this, be);
-            if (visName != null)
-                form.setVisiblePanel(visName);
-            splitPane.setBottomComponent(form);
-
-            //highlightEntry(be);
-            entryEditors.put(be.getType().getName(), form);
-
-        }
-        if (divLoc > 0) {
-          splitPane.setDividerLocation(divLoc);
-        }
-        else
-            splitPane.setDividerLocation
-                (splitPane.getHeight()-Globals.prefs.getInt("entryEditorHeight"));
-        //new FocusRequester(form);
-        //form.requestFocus();
-
-        newEntryShowing(be);
-        setEntryEditorEnabled(true); // Make sure it is enabled.
-    }
-
-    /**
-     * Get an entry editor ready to edit the given entry. If an appropriate editor is already
-     * cached, it will be updated and returned.
-     * @param entry The entry to be edited.
-     * @return A suitable entry editor.
-     */
-    public EntryEditor getEntryEditor(BibtexEntry entry) {
-        EntryEditor form;
-        if (entryEditors.containsKey(entry.getType().getName())) {
-            EntryEditor visibleNow = currentEditor;
-            
-            // We already have an editor for this entry type.
-            form = entryEditors.get
-                ((entry.getType().getName()));
-
-            // If the cached editor is not the same as the currently shown one,
-            // make sure the current one stores its current edit:
-            if ((visibleNow != null) && (form != visibleNow)) {
-                visibleNow.storeCurrentEdit();
-            }
-            
-            form.switchTo(entry);
-            //if (visName != null)
-            //    form.setVisiblePanel(visName);
-        } else {
-            // We must instantiate a new editor for this type. First make sure the old one
-            // stores its last edit:
-            storeCurrentEdit();
-            // Then start the new one:
-            form = new EntryEditor(frame, BasePanel.this, entry);
-            //if (visName != null)
-            //    form.setVisiblePanel(visName);
-
-            entryEditors.put(entry.getType().getName(), form);
-        }
-        return form;
-    }
-
-    public EntryEditor getCurrentEditor() {
-        return currentEditor;
-    }
-
-    /**
-     * Sets the given entry editor as the bottom component in the split pane. If an entry editor already
-     * was shown, makes sure that the divider doesn't move.
-     * Updates the mode to SHOWING_EDITOR.
-     * @param editor The entry editor to add.
-     */
-    public void showEntryEditor(EntryEditor editor) {
-        int oldSplitterLocation = -1;
-        if (mode == SHOWING_EDITOR)
-            Globals.prefs.putInt("entryEditorHeight", splitPane.getHeight() - splitPane.getDividerLocation());
-        else if (mode == SHOWING_PREVIEW)
-            Globals.prefs.putInt("previewPanelHeight", splitPane.getHeight()-splitPane.getDividerLocation());
-        mode = SHOWING_EDITOR;
-        currentEditor = editor;
-        splitPane.setBottomComponent(editor);
-        if (editor.getEntry() != getShowing())
-            newEntryShowing(editor.getEntry());
-        adjustSplitter();
-
-    }
-
-    /**
-     * Sets the given preview panel as the bottom component in the split panel.
-     * Updates the mode to SHOWING_PREVIEW.
-     * @param preview The preview to show.
-     */
-    public void showPreview(PreviewPanel preview) {
-        mode = SHOWING_PREVIEW;
-        currentPreview = preview;
-        splitPane.setBottomComponent(preview);
-    }
-
-    /**
-     * Removes the bottom component.
-     */
-    public void hideBottomComponent() {
-        mode = SHOWING_NOTHING;
-        splitPane.setBottomComponent(null);
-    }
-
-    /**
-     * This method selects the given entry, and scrolls it into view in the table.
-     * If an entryEditor is shown, it is given focus afterwards.
-     */
-    public void highlightEntry(final BibtexEntry be) {
-        //SwingUtilities.invokeLater(new Thread() {
-        //     public void run() {
-                 final int row = mainTable.findEntry(be);
-                 if (row >= 0) {
-                    mainTable.setRowSelectionInterval(row, row);
-                    //entryTable.setActiveRow(row);
-                    mainTable.ensureVisible(row);
-                 }
-        //     }
-        //});
-    }
-
-
-    /**
-     * This method is called from an EntryEditor when it should be closed. We relay
-     * to the selection listener, which takes care of the rest.
-     * @param editor The entry editor to close.
-     */
-    public void entryEditorClosing(EntryEditor editor) {
-        // Store divider location for next time:
-        Globals.prefs.putInt("entryEditorHeight", splitPane.getHeight()-splitPane.getDividerLocation());
-        selectionListener.entryEditorClosing(editor);
-    }
-
-    /**
-     * This method selects the given enties.
-     * If an entryEditor is shown, it is given focus afterwards.
-     */
-    /*public void selectEntries(final BibtexEntry[] bes, final int toScrollTo) {
-
-        SwingUtilities.invokeLater(new Thread() {
-             public void run() {
-                 int rowToScrollTo = 0;
-                 entryTable.revalidate();
-                 entryTable.clearSelection();
-                 loop: for (int i=0; i<bes.length; i++) {
-                    if (bes[i] == null)
-                        continue loop;
-                    int row = tableModel.getNumberFromName(bes[i].getId());
-                    if (i==toScrollTo)
-                    rowToScrollTo = row;
-                    if (row >= 0)
-                        entryTable.addRowSelectionIntervalQuietly(row, row);
-                 }
-                 entryTable.ensureVisible(rowToScrollTo);
-                 Component comp = splitPane.getBottomComponent();
-                 //if (comp instanceof EntryEditor)
-                 //    comp.requestFocus();
-             }
-        });
-    } */
-
-    /**
-     * Closes the entry editor if it is showing the given entry.
-     *
-     * @param be a <code>BibtexEntry</code> value
-     */
-    public void ensureNotShowing(BibtexEntry be) {
-        if ((mode == SHOWING_EDITOR) && (currentEditor.getEntry() == be)) {
-            selectionListener.entryEditorClosing(currentEditor);
-        }
-    }
-
-    public void updateEntryEditorIfShowing() {
-        if (mode == SHOWING_EDITOR) {
-            if (currentEditor.getType() != currentEditor.getEntry().getType()) {
-                // The entry has changed type, so we must get a new editor.
-                newEntryShowing(null);
-                EntryEditor newEditor = getEntryEditor(currentEditor.getEntry());
-                showEntryEditor(newEditor);
-            } else {
-                currentEditor.updateAllFields();
-                currentEditor.updateSource();
-            }
-        }
-    }
-
-    /**
-     * If an entry editor is showing, make sure its currently focused field
-     * stores its changes, if any.
-     */
-    public void storeCurrentEdit() {
-        if (isShowingEditor()) {
-            EntryEditor editor = (EntryEditor)splitPane.getBottomComponent();
-            editor.storeCurrentEdit();
-        }
-
-    }
-
-    /**
-     * This method iterates through all existing entry editors in this
-     * BasePanel, telling each to update all its instances of
-     * FieldContentSelector. This is done to ensure that the list of words
-     * in each selector is up-to-date after the user has made changes in
-     * the Manage dialog.
-     */
-    public void updateAllContentSelectors() {
-        for (Iterator<String> i=entryEditors.keySet().iterator(); i.hasNext();) {
-            EntryEditor ed = entryEditors.get(i.next());
-            ed.updateAllContentSelectors();
-        }
-    }
-
-    public void rebuildAllEntryEditors() {
-        for (Iterator<String> i=entryEditors.keySet().iterator(); i.hasNext();) {
-            EntryEditor ed = entryEditors.get(i.next());
-            ed.rebuildPanels();
-        }
-
-    }
-
-    public void markBaseChanged() {
-        baseChanged = true;
-
-        // Put an asterix behind the file name to indicate the
-        // database has changed.
-        String oldTitle = frame.getTabTitle(this);
-        if (!oldTitle.endsWith("*")) {
-            frame.setTabTitle(this, oldTitle+"*", frame.getTabTooltip(this));
-            frame.setWindowTitle();
-        }
-        // If the status line states that the base has been saved, we
-        // remove this message, since it is no longer relevant. If a
-        // different message is shown, we leave it.
-        if (frame.statusLine.getText().startsWith(Globals.lang("Saved database")));
-            frame.output(" ");
-    }
-
-    public void markNonUndoableBaseChanged() {
-        nonUndoableChange = true;
-        markBaseChanged();
-    }
-
-    public synchronized void markChangedOrUnChanged() {
-        if (undoManager.hasChanged()) {
-            if (!baseChanged) {
-                markBaseChanged();
-            }
-        }
-        else if (baseChanged && !nonUndoableChange) {
-            baseChanged = false;
-            if (getFile() != null)
-                frame.setTabTitle(BasePanel.this, getFile().getName(),
-                        getFile().getAbsolutePath());
-            else
-                frame.setTabTitle(BasePanel.this, Globals.lang("untitled"), null);
-        }
-        frame.setWindowTitle();
-    }
-
-    /**
-     * Selects a single entry, and scrolls the table to center it.
-     *
-     * @param pos Current position of entry to select.
-     *
-     */
-    public void selectSingleEntry(int pos) {
-        mainTable.clearSelection();
-        mainTable.addRowSelectionInterval(pos, pos);
-        mainTable.scrollToCenter(pos, 0);
-    }
-
-    /* *
-     * Selects all entries with a non-zero value in the field
-     * @param field <code>String</code> field name.
-     */
-/*    public void selectResults(String field) {
-      LinkedList intervals = new LinkedList();
-      int prevStart = -1, prevToSel = 0;
-      // First we build a list of intervals to select, without touching the table.
-      for (int i = 0; i < entryTable.getRowCount(); i++) {
-        String value = (String) (database.getEntryById
-                                 (tableModel.getIdForRow(i)))
-            .getField(field);
-        if ( (value != null) && !value.equals("0")) {
-          if (prevStart < 0)
-            prevStart = i;
-          prevToSel = i;
-        }
-        else if (prevStart >= 0) {
-          intervals.add(new int[] {prevStart, prevToSel});
-          prevStart = -1;
-        }
-      }
-      // Then select those intervals, if any.
-      if (intervals.size() > 0) {
-        entryTable.setSelectionListenerEnabled(false);
-        entryTable.clearSelection();
-        for (Iterator i=intervals.iterator(); i.hasNext();) {
-          int[] interval = (int[])i.next();
-          entryTable.addRowSelectionInterval(interval[0], interval[1]);
-        }
-        entryTable.setSelectionListenerEnabled(true);
-      }
-  */
-
-    public void setSearchMatcher(SearchMatcher matcher) {
-        searchFilterList.setMatcher(matcher);
-        showingSearch = true;
-    }
-
-    public void setGroupMatcher(Matcher<BibtexEntry> matcher) {
-        groupFilterList.setMatcher(matcher);
-        showingGroup = true;
-    }
-
-    public void stopShowingSearchResults() {
-        searchFilterList.setMatcher(NoSearchMatcher.INSTANCE);
-        showingSearch = false;
-    }
-
-    public void stopShowingGroup() {
-        groupFilterList.setMatcher(NoSearchMatcher.INSTANCE);
-        showingGroup = false;
-     }
-
-    /**
-     * Query whether this BasePanel is in the mode where a float search result is shown.
-     * @return true if showing float search, false otherwise.
-     */
-    public boolean isShowingFloatSearch() {
-        return mainTable.isShowingFloatSearch();
-    }
-
-    /**
-     * Query whether this BasePanel is in the mode where a filter search result is shown.
-     * @return true if showing filter search, false otherwise.
-     */
-    public boolean isShowingFilterSearch() {
-        return showingSearch;
-    }
-
-     public BibtexDatabase getDatabase(){
-        return database ;
-    }
-
-    public void preambleEditorClosing() {
-        preambleEditor = null;
-    }
-
-    public void stringsClosing() {
-        stringDialog = null;
-    }
-
-    public void changeType(BibtexEntry entry, BibtexEntryType type) {
-      changeType(new BibtexEntry[] {entry}, type);
-    }
-
-    public void changeType(BibtexEntryType type) {
-      BibtexEntry[] bes = mainTable.getSelectedEntries();
-      changeType(bes, type);
-    }
-
-    public void changeType(BibtexEntry[] bes, BibtexEntryType type) {
-
-        if ((bes == null) || (bes.length == 0)) {
-            output("First select the entries you wish to change type "+
-                   "for.");
-            return;
-        }
-        if (bes.length > 1) {
-            int choice = JOptionPane.showConfirmDialog
-                (this, "Multiple entries selected. Do you want to change"
-                 +"\nthe type of all these to '"+type.getName()+"'?",
-                 "Change type", JOptionPane.YES_NO_OPTION,
-                 JOptionPane.WARNING_MESSAGE);
-            if (choice == JOptionPane.NO_OPTION)
-                return;
-        }
-
-        NamedCompound ce = new NamedCompound(Globals.lang("change type"));
-        for (int i=0; i<bes.length; i++) {
-            ce.addEdit(new UndoableChangeType(bes[i],
-                                              bes[i].getType(),
-                                              type));
-            bes[i].setType(type);
-        }
-
-        output(Globals.lang("Changed type to")+" '"+type.getName()+"' "
-               +Globals.lang("for")+" "+bes.length
-               +" "+Globals.lang("entries")+".");
-        ce.end();
-        undoManager.addEdit(ce);
-        markBaseChanged();
-        updateEntryEditorIfShowing();
-    }
-
-    public boolean showDeleteConfirmationDialog(int numberOfEntries) {
-        if (Globals.prefs.getBoolean("confirmDelete")) {
-            String msg = Globals.lang("Really delete the selected")
-                + " " + Globals.lang("entry") + "?",
-                title = Globals.lang("Delete entry");
-            if (numberOfEntries > 1) {
-                msg = Globals.lang("Really delete the selected")
-                    + " " + numberOfEntries + " " + Globals.lang("entries") + "?";
-                title = Globals.lang("Delete multiple entries");
-            }
-
-            CheckBoxMessage cb = new CheckBoxMessage
-                (msg, Globals.lang("Disable this confirmation dialog"), false);
-
-            int answer = JOptionPane.showConfirmDialog(frame, cb, title,
-                                                       JOptionPane.YES_NO_OPTION,
-                                                       JOptionPane.QUESTION_MESSAGE);
-            if (cb.isSelected())
-                Globals.prefs.putBoolean("confirmDelete", false);
-            return (answer == JOptionPane.YES_OPTION);
-        } else return true;
-
-    }
-    
-    /**
-     * If the relevant option is set, autogenerate keys for all entries that are
-     * lacking keys.
-     */
-    public void autoGenerateKeysBeforeSaving() {
-        if (Globals.prefs.getBoolean("generateKeysBeforeSaving")) {
-            NamedCompound ce = new NamedCompound(Globals.lang("autogenerate keys"));
-            boolean any = false;
-            
-            for (BibtexEntry bes : database.getEntries()){
-                String oldKey = bes.getCiteKey();
-                if ((oldKey == null) || (oldKey.equals(""))) {
-                    LabelPatternUtil.makeLabel(metaData, database, bes);
-                    ce.addEdit(new UndoableKeyChange(database, bes.getId(), null,
-                        bes.getField(BibtexFields.KEY_FIELD)));
-                    any = true;
-                }
-            }
-            // Store undo information, if any:
-            if (any) {
-                ce.end();
-                undoManager.addEdit(ce);
-            }
-        }
-    }
-    
-    /**
-     * Activates or deactivates the entry preview, depending on the argument.
-     * When deactivating, makes sure that any visible preview is hidden.
-     * @param enabled
-     */
-    public void setPreviewActive(boolean enabled) {
-        selectionListener.setPreviewActive(enabled);
-    }
-
-    public void setSelectionListenerEnabled(boolean enabled) {
-        selectionListener.setEnabled(enabled);
-    }
-
-    /**
-     * Depending on whether a preview or an entry editor is showing, save the current
-     * divider location in the correct preference setting.
-     */
-    public void saveDividerLocation() {
-        if (mode == SHOWING_PREVIEW)
-            Globals.prefs.putInt("previewPanelHeight", splitPane.getHeight()-splitPane.getDividerLocation());
-        else if (mode == SHOWING_EDITOR)
-            Globals.prefs.putInt("entryEditorHeight", splitPane.getHeight()-splitPane.getDividerLocation());
-    }
-
-	class UndoAction extends BaseAction {
-        public void action() {
-            try {
-                JComponent focused = Globals.focusListener.getFocused();
-                if ((focused != null) && (focused instanceof FieldEditor) && (focused.hasFocus())) {
-                    // User is currently editing a field:
-                    // Check if it is the preamble:
-                    if ((preambleEditor != null) && (focused == preambleEditor.getFieldEditor())) {
-                        preambleEditor.storeCurrentEdit();
-                    }
-                    else
-                        storeCurrentEdit();
-                }
-                String name = undoManager.getUndoPresentationName();
-                undoManager.undo();
-                markBaseChanged();
-                frame.output(name);
-            } catch (CannotUndoException ex) {
-                ex.printStackTrace();
-                frame.output(Globals.lang("Nothing to undo")+".");
-            }
-            // After everything, enable/disable the undo/redo actions
-            // appropriately.
-            //updateUndoState();
-            //redoAction.updateRedoState();
-            markChangedOrUnChanged();
-        }
-    }
-
-    class RedoAction extends BaseAction {
-
-        public void action() {
-            try {
-
-                JComponent focused = Globals.focusListener.getFocused();
-                if ((focused != null) && (focused instanceof FieldEditor) && (focused.hasFocus())) {
-                    // User is currently editing a field:
-                    storeCurrentEdit();
-                }
-
-                String name = undoManager.getRedoPresentationName();
-                undoManager.redo();
-                markBaseChanged();
-                frame.output(name);
-            } catch (CannotRedoException ex) {
-                frame.output(Globals.lang("Nothing to redo")+".");
-            }
-            // After everything, enable/disable the undo/redo actions
-            // appropriately.
-            //updateRedoState();
-            //undoAction.updateUndoState();
-            markChangedOrUnChanged();
-        }
-    }
-
-    // Method pertaining to the ClipboardOwner interface.
-    public void lostOwnership(Clipboard clipboard, Transferable contents) {}
-
-
-  public void setEntryEditorEnabled(boolean enabled) {
-    if ((getShowing() != null) && (splitPane.getBottomComponent() instanceof EntryEditor)) {
-          EntryEditor ed = (EntryEditor)splitPane.getBottomComponent();
-          if (ed.isEnabled() != enabled)
-            ed.setEnabled(enabled);
-    }
-  }
-
-  public String fileMonitorHandle() { return fileMonitorHandle; }
-
-    public void fileUpdated() {
-      if (saving)
-        return; // We are just saving the file, so this message is most likely due
-      //if (updatedExternally) {
-      //  return;
-      //}
-      // to bad timing. If not, we'll handle it on the next polling.
-      //Util.pr("File '"+file.getPath()+"' has been modified.");
-      updatedExternally = true;
-
-      final ChangeScanner scanner = new ChangeScanner(frame, BasePanel.this);
-
-      // Adding the sidepane component is Swing work, so we must do this in the Swing
-      // thread:
-      Thread t = new Thread() {
-	      public void run() {
-		  
-		  // Check if there is already a notification about external
-		  // changes:
-		  boolean hasAlready = sidePaneManager.hasComponent(FileUpdatePanel.NAME);
-		  if (hasAlready) {
-		      sidePaneManager.hideComponent(FileUpdatePanel.NAME);
-		      sidePaneManager.unregisterComponent(FileUpdatePanel.NAME);
-		  }
-		  FileUpdatePanel pan = new FileUpdatePanel(frame, BasePanel.this,
-							    sidePaneManager, getFile(), scanner);
-		  sidePaneManager.register(FileUpdatePanel.NAME, pan);
-		  sidePaneManager.show(FileUpdatePanel.NAME);
-		  //setUpdatedExternally(false);
-		  //scanner.displayResult();
-	      }
-	  };
-
-      // Test: running scan automatically in background
-      if ((BasePanel.this.getFile() != null) &&
-              !Util.waitForFileLock(BasePanel.this.getFile(), 10)) {
-          // The file is locked even after the maximum wait. Do nothing.
-          System.err.println("File updated externally, but change scan failed because the file is locked.");
-          // Perturb the stored timestamp so successive checks are made:
-          Globals.fileUpdateMonitor.perturbTimestamp(getFileMonitorHandle());
-          return;
-      }
-
-      scanner.changeScan(BasePanel.this.getFile());
-      try {
-	  scanner.join();
-      } catch (InterruptedException e) {
-	  e.printStackTrace();
-      }
-
-      if (scanner.changesFound()) {
-	  SwingUtilities.invokeLater(t);
-      } else {
-	  setUpdatedExternally(false);
-	  //System.out.println("No changes found.");
-      }
-    }
-
-      public void fileRemoved() {
-        Util.pr("File '"+getFile().getPath()+"' has been deleted.");
-      }
-
-
-    /**
-     * Perform necessary cleanup when this BasePanel is closed.
-     */
-    public void cleanUp() {
-        if (fileMonitorHandle != null)
-            Globals.fileUpdateMonitor.removeUpdateListener(fileMonitorHandle);
-        // Check if there is a FileUpdatePanel for this BasePanel being shown. If so,
-        // remove it:
-        if (sidePaneManager.hasComponent("fileUpdate")) {
-            FileUpdatePanel fup = (FileUpdatePanel)sidePaneManager.getComponent("fileUpdate");
-            if (fup.getPanel() == this) {
-                sidePaneManager.hideComponent("fileUpdate");
-            }
-        }
-    }
-
-  public void setUpdatedExternally(boolean b) {
-    updatedExternally = b;
-  }
-
-    /**
-     * Get an array containing the currently selected entries.
-     *
-     * @return An array containing the selected entries.
-     */
-    public BibtexEntry[] getSelectedEntries() {
-        return mainTable.getSelectedEntries();
-    }
-
-    /**
-     * Get the file where this database was last saved to or loaded from, if any.
-     *
-     * @return The relevant File, or null if none is defined.
-     */
-    public File getFile() {
-        return metaData.getFile();
-    }
-    
-    /**
-     * Get a String containing a comma-separated list of the bibtex keys
-     * of the selected entries.
-     *
-     * @return A comma-separated list of the keys of the selected entries.
-     */
-    public String getKeysForSelection() {
-        StringBuffer result = new StringBuffer();
-        String citeKey = "";//, message = "";
-        boolean first = true;
-        for (BibtexEntry bes : mainTable.getSelected()){
-            citeKey = bes.getField(BibtexFields.KEY_FIELD);
-            // if the key is empty we give a warning and ignore this entry
-            if (citeKey == null || citeKey.equals(""))
-                continue;
-            if (first) {
-                result.append(citeKey);
-                first = false;
-            } else {
-                result.append(",").append(citeKey);
-            }
-        }
-        return result.toString();
-    }
-
-    public GroupSelector getGroupSelector() {
-        return frame.groupSelector;
-    }
-
-
-    public boolean isUpdatedExternally() {
-        return updatedExternally;
-    }
-
-
-    public String getFileMonitorHandle() {
-        return fileMonitorHandle;
-    }
-
-
-    public void setFileMonitorHandle(String fileMonitorHandle) {
-        this.fileMonitorHandle = fileMonitorHandle;
-    }
-
-    public SidePaneManager getSidePaneManager() {
-        return sidePaneManager;
-    }
-
-
-    public void setNonUndoableChange(boolean nonUndoableChange) {
-        this.nonUndoableChange = nonUndoableChange;
-    }
-
-    public void setBaseChanged(boolean baseChanged) {
-        this.baseChanged = baseChanged;
-    }
-
-
-    public void setSaving(boolean saving) {
-        this.saving = saving;
-    }
-
-    public boolean isSaving() {
-        return saving;
-    }
-
-    public BibtexEntry getShowing() {
-        return showing;
-    }
-
-    /**
-     * Update the pointer to the currently shown entry in all cases where the user has
-     * moved to a new entry, except when using Back and Forward commands. Also updates
-     * history for Back command, and clears history for Forward command.
-     * @param entry The entry that is now to be shown.
-     */
-    public void newEntryShowing(BibtexEntry entry) {
-        // If this call is the result of a Back or Forward operation, we must take
-        // care not to make any history changes, since the necessary changes will
-        // already have been done in the back() or forward() method:
-        if (backOrForwardInProgress) {
-            showing = entry;
-            backOrForwardInProgress = false;
-            setBackAndForwardEnabledState();
-            return;
-        }
-        nextEntries.clear();
-        if (entry != showing) {
-            // Add the entry we are leaving to the history:
-            if (showing != null) {
-                previousEntries.add(showing);
-                if (previousEntries.size() > GUIGlobals.MAX_BACK_HISTORY_SIZE)
-                    previousEntries.remove(0);
-            }
-            showing = entry;
-            setBackAndForwardEnabledState();
-        }
-        
-    }
-
-    /**
-     * Go back (if there is any recorded history) and update the histories for
-     * the Back and Forward commands.
-     */
-    private void back() {
-        if (previousEntries.size() > 0) {
-            BibtexEntry toShow = previousEntries.get(previousEntries.size()-1);
-            previousEntries.remove(previousEntries.size()-1);
-            // Add the entry we are going back from to the Forward history:
-            if (showing != null)
-                nextEntries.add(showing);
-            backOrForwardInProgress = true; // to avoid the history getting updated erroneously
-            //showEntry(toShow);
-            highlightEntry(toShow);
-        }
-    }
-
-    private void forward() {
-        if (nextEntries.size() > 0) {
-            BibtexEntry toShow = nextEntries.get(nextEntries.size()-1);
-            nextEntries.remove(nextEntries.size()-1);
-            // Add the entry we are going forward from to the Back history:
-            if (showing != null)
-                previousEntries.add(showing);
-            backOrForwardInProgress = true; // to avoid the history getting updated erroneously
-            //showEntry(toShow);
-            highlightEntry(toShow);
-        }
-    }
-
-    public void setBackAndForwardEnabledState() {
-        frame.back.setEnabled(previousEntries.size() > 0);
-        frame.forward.setEnabled(nextEntries.size() > 0);
-    }
-
-
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.ClipboardOwner;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.nio.charset.UnsupportedCharsetException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
+import javax.swing.AbstractAction;
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+import javax.swing.tree.TreePath;
+import javax.swing.undo.CannotRedoException;
+import javax.swing.undo.CannotUndoException;
+
+import net.sf.jabref.autocompleter.AbstractAutoCompleter;
+import net.sf.jabref.autocompleter.AutoCompleterFactory;
+import net.sf.jabref.autocompleter.NameFieldAutoCompleter;
+import net.sf.jabref.collab.ChangeScanner;
+import net.sf.jabref.collab.FileUpdateListener;
+import net.sf.jabref.collab.FileUpdatePanel;
+import net.sf.jabref.export.ExportToClipboardAction;
+import net.sf.jabref.export.FileActions;
+import net.sf.jabref.export.SaveDatabaseAction;
+import net.sf.jabref.export.SaveException;
+import net.sf.jabref.export.SaveSession;
+import net.sf.jabref.export.layout.Layout;
+import net.sf.jabref.export.layout.LayoutHelper;
+import net.sf.jabref.external.*;
+import net.sf.jabref.groups.GroupSelector;
+import net.sf.jabref.groups.GroupTreeNode;
+import net.sf.jabref.gui.*;
+import net.sf.jabref.imports.AppendDatabaseAction;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.imports.SPIRESFetcher;
+import net.sf.jabref.journals.AbbreviateAction;
+import net.sf.jabref.journals.UnabbreviateAction;
+import net.sf.jabref.labelPattern.LabelPatternUtil;
+import net.sf.jabref.labelPattern.SearchFixDuplicateLabels;
+import net.sf.jabref.search.NoSearchMatcher;
+import net.sf.jabref.search.SearchMatcher;
+import net.sf.jabref.specialfields.SpecialFieldAction;
+import net.sf.jabref.specialfields.Priority;
+import net.sf.jabref.specialfields.Quality;
+import net.sf.jabref.specialfields.Rank;
+import net.sf.jabref.specialfields.Relevance;
+import net.sf.jabref.specialfields.SpecialFieldDatabaseChangeListener;
+import net.sf.jabref.specialfields.SpecialFieldValue;
+import net.sf.jabref.sql.DBConnectDialog;
+import net.sf.jabref.sql.DBStrings;
+import net.sf.jabref.sql.DbConnectAction;
+import net.sf.jabref.sql.DBExporterAndImporterFactory;
+import net.sf.jabref.sql.SQLUtil;
+import net.sf.jabref.sql.exporter.DBExporter;
+import net.sf.jabref.undo.CountingUndoManager;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableChangeType;
+import net.sf.jabref.undo.UndoableInsertEntry;
+import net.sf.jabref.undo.UndoableKeyChange;
+import net.sf.jabref.undo.UndoableRemoveEntry;
+import net.sf.jabref.wizard.text.gui.TextInputDialog;
+import ca.odell.glazedlists.FilterList;
+import ca.odell.glazedlists.event.ListEvent;
+import ca.odell.glazedlists.event.ListEventListener;
+import ca.odell.glazedlists.matchers.Matcher;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.uif_lite.component.UIFSplitPane;
+
+public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListener {
+
+    public final static int SHOWING_NOTHING=0, SHOWING_PREVIEW=1, SHOWING_EDITOR=2, WILL_SHOW_EDITOR=3;
+    
+    /* 
+     * The database shown in this panel.
+     */
+    BibtexDatabase database;
+    
+    private int mode=0;
+    private EntryEditor currentEditor = null;
+    private PreviewPanel currentPreview = null;
+
+    boolean tmp = true;
+
+    private MainTableSelectionListener selectionListener = null;
+    private ListEventListener<BibtexEntry> groupsHighlightListener;
+    UIFSplitPane contentPane = new UIFSplitPane();
+
+    JSplitPane splitPane;
+
+    JabRefFrame frame;
+    
+    String fileMonitorHandle = null;
+    boolean saving = false, updatedExternally = false;
+    private String encoding;
+
+    GridBagLayout gbl = new GridBagLayout();
+    GridBagConstraints con = new GridBagConstraints();
+
+    HashMap<String, AbstractAutoCompleter> autoCompleters = new HashMap<String, AbstractAutoCompleter>();
+    // Hashtable that holds as keys the names of the fields where
+    // autocomplete is active, and references to the autocompleter objects.
+
+    NameFieldAutoCompleter searchCompleter = null;
+    AutoCompleteListener searchCompleteListener = null;
+
+    // The undo manager.
+    public CountingUndoManager undoManager = new CountingUndoManager(this);
+    UndoAction undoAction = new UndoAction();
+    RedoAction redoAction = new RedoAction();
+    
+    private List<BibtexEntry> previousEntries = new ArrayList<BibtexEntry>(),
+        nextEntries = new ArrayList<BibtexEntry>();
+
+    //ExampleFileFilter fileFilter;
+    // File filter for .bib files.
+
+    private boolean baseChanged = false;
+    private boolean nonUndoableChange = false;
+    // Used to track whether the base has changed since last save.
+
+    //EntryTableModel tableModel = null;
+    //public EntryTable entryTable = null;
+    public MainTable mainTable = null;
+    public MainTableFormat tableFormat = null;
+    public FilterList<BibtexEntry> searchFilterList = null, groupFilterList = null;
+
+    public RightClickMenu rcm;
+
+    BibtexEntry showing = null;
+
+    // Variable to prevent erroneous update of back/forward histories at the time
+    // when a Back or Forward operation is being processed:
+    private boolean backOrForwardInProgress = false;
+
+    // To indicate which entry is currently shown.
+    public HashMap<String, EntryEditor> entryEditors = new HashMap<String, EntryEditor>();
+    // To contain instantiated entry editors. This is to save time
+    // in switching between entries.
+
+    //HashMap entryTypeForms = new HashMap();
+    // Hashmap to keep track of which entries currently have open
+    // EntryTypeForm dialogs.
+
+    PreambleEditor preambleEditor = null;
+    // Keeps track of the preamble dialog if it is open.
+
+    StringDialog stringDialog = null;
+    // Keeps track of the string dialog if it is open.
+
+    SaveDatabaseAction saveAction;
+    CleanUpAction cleanUpAction;
+    
+    /**
+     * The group selector component for this database. Instantiated by the
+     * SidePaneManager if necessary, or from this class if merging groups from a
+     * different database.
+     */
+    //GroupSelector groupSelector;
+
+    public boolean
+            showingSearch = false,
+            showingGroup = false,
+            sortingBySearchResults = false,
+            coloringBySearchResults = false,
+            hidingNonHits = false,
+            sortingByGroup = false,
+            sortingByCiteSeerResults = false,
+            coloringByGroup = false;
+
+    int lastSearchHits = -1; // The number of hits in the latest search.
+    // Potential use in hiding non-hits completely.
+
+    // MetaData parses, keeps and writes meta data.
+    MetaData metaData;
+
+    private boolean suppressOutput = false;
+
+    private HashMap<String, Object> actions = new HashMap<String, Object>();
+    private SidePaneManager sidePaneManager;
+
+    /**
+     * Create a new BasePanel with an empty database.
+     * @param frame The application window.
+     */
+    public BasePanel(JabRefFrame frame) {
+      this.sidePaneManager = Globals.sidePaneManager;
+      database = new BibtexDatabase();
+      metaData = new MetaData();
+        metaData.initializeNewDatabase();
+      this.frame = frame;
+      setupActions();
+      setupMainPanel();
+        encoding = Globals.prefs.get("defaultEncoding");
+        //System.out.println("Default: "+encoding);
+    }
+
+    public BasePanel(JabRefFrame frame, BibtexDatabase db, File file,
+                     MetaData metaData, String encoding) {
+        init(frame, db, file, metaData, encoding);
+    }
+
+    private void init(JabRefFrame frame, BibtexDatabase db, File file,
+                      MetaData metaData, String encoding) {
+        assert(frame != null);
+        assert(db != null);
+        //file may be null
+        assert(encoding != null);
+        assert(metaData != null);
+
+        this.encoding = encoding;
+        this.metaData = metaData;
+        // System.out.println(encoding);
+        //super(JSplitPane.HORIZONTAL_SPLIT, true);
+        this.sidePaneManager = Globals.sidePaneManager;
+        this.frame = frame;
+        database = db;
+
+        setupActions();
+        setupMainPanel();
+
+        metaData.setFile(file);
+
+        if (file == null) {
+            if (!database.getEntries().isEmpty()) {
+                // if the database is not empty and no file is assigned,
+                // the database came from an import and has to be treated somehow
+                // -> mark as changed
+                this.baseChanged = true;
+            }
+        } else {
+            // Register so we get notifications about outside changes to the file.
+            try {
+                fileMonitorHandle = Globals.fileUpdateMonitor.addUpdateListener(this,
+                        file);
+            } catch (IOException ex) {
+                System.err.println(ex);
+            }
+        }
+        
+    }
+
+    public boolean isBaseChanged(){
+    	return baseChanged;
+    }
+    
+    public int getMode() {
+        return mode;
+    }
+
+    //Done by MrDlib
+    public void setMode(int mode) {
+        this.mode = mode;
+    }
+    //Done by MrDlib
+
+    public BibtexDatabase database() {
+		return database;
+	}
+
+	public MetaData metaData() {
+		return metaData;
+	}
+
+	public JabRefFrame frame() {
+		return frame;
+	}
+
+	public JabRefPreferences prefs() {
+		return Globals.prefs;
+	}
+
+	public String getEncoding() {
+		return encoding;
+	}
+
+	public void setEncoding(String encoding) {
+		this.encoding = encoding;
+	}
+
+    public void output(String s) {
+        if (!suppressOutput)
+            frame.output(s);
+    }
+
+    private void setupActions() {
+        saveAction = new SaveDatabaseAction(this);
+        cleanUpAction = new CleanUpAction(this);
+        
+        actions.put("undo", undoAction);
+        actions.put("redo", redoAction);
+
+        actions.put("focusTable", new BaseAction() {
+            public void action() throws Throwable {
+                new FocusRequester(mainTable);
+            }
+        });
+        
+        // The action for opening an entry editor.
+        actions.put("edit", new BaseAction() {
+            public void action() {
+                /*System.out.println(Globals.focusListener.getFocused().getClass().getName());
+                if (Globals.focusListener.getFocused() instanceof FieldEditor)
+                    new FocusRequester(mainTable);
+                else*/
+                    selectionListener.editSignalled();
+            }
+                /*
+                  if (isShowingEditor()) {
+                      new FocusRequester(splitPane.getBottomComponent());
+                      return;
+                  }
+
+                  frame.block();
+                //(new Thread() {
+                //public void run() {
+                int clickedOn = -1;
+                // We demand that one and only one row is selected.
+                if (entryTable.getSelectedRowCount() == 1) {
+                  clickedOn = entryTable.getSelectedRow();
+                }
+                if (clickedOn >= 0) {
+                  String id = tableModel.getIdForRow(clickedOn);
+                  BibtexEntry be = database.getEntryById(id);
+                  showEntry(be);
+
+                  if (splitPane.getBottomComponent() != null) {
+                      new FocusRequester(splitPane.getBottomComponent());
+                  }
+
+                }
+        frame.unblock();
+              }
+                */
+            });
+
+
+        actions.put("test",// new AccessLinksForEntries.SaveWithLinkedFiles(this));
+                new FindFullTextAction(this));
+
+
+        // The action for saving a database.
+        actions.put("save", saveAction);
+
+        actions.put("saveAs", new BaseAction() {
+            public void action() throws Throwable {
+                saveAction.saveAs();
+            }
+        });
+
+        actions.put("saveSelectedAs", new BaseAction () {
+                public void action() throws Throwable {
+
+                  String chosenFile = FileDialogs.getNewFile(frame, new File(Globals.prefs.get("workingDirectory")), ".bib",
+                                                         JFileChooser.SAVE_DIALOG, false);
+                  if (chosenFile != null) {
+                    File expFile = new File(chosenFile);
+                    if (!expFile.exists() ||
+                        (JOptionPane.showConfirmDialog
+                         (frame, "'"+expFile.getName()+"' "+
+                          Globals.lang("exists. Overwrite file?"),
+                          Globals.lang("Save database"), JOptionPane.OK_CANCEL_OPTION)
+                         == JOptionPane.OK_OPTION)) {
+
+                      saveDatabase(expFile, true, Globals.prefs.get("defaultEncoding"));
+                      //runCommand("save");
+                      frame.getFileHistory().newFile(expFile.getPath());
+                      frame.output(Globals.lang("Saved selected to")+" '"
+                                   +expFile.getPath()+"'.");
+                        }
+                    }
+                }
+            });
+    
+        // The action for copying selected entries.
+        actions.put("copy", new BaseAction() {
+                public void action() {
+                    BibtexEntry[] bes = mainTable.getSelectedEntries();
+
+                    if ((bes != null) && (bes.length > 0)) {
+                        TransferableBibtexEntry trbe
+                            = new TransferableBibtexEntry(bes);
+                        // ! look at ClipBoardManager
+                        Toolkit.getDefaultToolkit().getSystemClipboard()
+                            .setContents(trbe, BasePanel.this);
+                        output(Globals.lang("Copied")+" "+(bes.length>1 ? bes.length+" "
+                                                           +Globals.lang("entries")
+                                                           : "1 "+Globals.lang("entry")+"."));
+                    } else {
+                        // The user maybe selected a single cell.
+                        int[] rows = mainTable.getSelectedRows(),
+                            cols = mainTable.getSelectedColumns();
+                        if ((cols.length == 1) && (rows.length == 1)) {
+                            // Copy single value.
+                            Object o = mainTable.getValueAt(rows[0], cols[0]);
+                            if (o != null) {
+                                StringSelection ss = new StringSelection(o.toString());
+                                Toolkit.getDefaultToolkit().getSystemClipboard()
+                                    .setContents(ss, BasePanel.this);
+
+                                output(Globals.lang("Copied cell contents")+".");
+                            }
+                        }
+                    }
+                }
+            });
+
+        actions.put("cut", new BaseAction() {
+                public void action() throws Throwable {
+                    runCommand("copy");
+                    BibtexEntry[] bes = mainTable.getSelectedEntries();
+                    //int row0 = mainTable.getSelectedRow();
+                    if ((bes != null) && (bes.length > 0)) {
+                        // Create a CompoundEdit to make the action undoable.
+                        NamedCompound ce = new NamedCompound
+                        (Globals.lang(bes.length > 1 ? "cut entries" : "cut entry"));
+                        // Loop through the array of entries, and delete them.
+                        for (int i=0; i<bes.length; i++) {
+                            database.removeEntry(bes[i].getId());
+                            ensureNotShowing(bes[i]);
+                            ce.addEdit(new UndoableRemoveEntry
+                                       (database, bes[i], BasePanel.this));
+                        }
+                        //entryTable.clearSelection();
+                        frame.output(Globals.lang("Cut_pr")+" "+
+                                     (bes.length>1 ? bes.length
+                                      +" "+ Globals.lang("entries")
+                                      : Globals.lang("entry"))+".");
+                        ce.end();
+                        undoManager.addEdit(ce);
+                        markBaseChanged();
+
+                        // Reselect the entry in the first prev. selected position:
+                        /*if (row0 >= entryTable.getRowCount())
+                            row0 = entryTable.getRowCount()-1;
+                        if (row0 >= 0)
+                            entryTable.addRowSelectionInterval(row0, row0);*/
+                    }
+                }
+            });
+
+        actions.put("delete", new BaseAction() {
+                public void action() {
+                  BibtexEntry[] bes = mainTable.getSelectedEntries();
+                  if ((bes != null) && (bes.length > 0)) {
+
+                      boolean goOn = showDeleteConfirmationDialog(bes.length);
+                      if (!goOn) {
+                          return;
+                      }
+                      else {
+                          // Create a CompoundEdit to make the action undoable.
+                          NamedCompound ce = new NamedCompound
+                              (Globals.lang(bes.length > 1 ? "delete entries" : "delete entry"));
+                          // Loop through the array of entries, and delete them.
+                          for (int i = 0; i < bes.length; i++) {
+                              database.removeEntry(bes[i].getId());
+                              ensureNotShowing(bes[i]);
+                              ce.addEdit(new UndoableRemoveEntry(database, bes[i], BasePanel.this));
+                          }
+                          markBaseChanged();
+                          frame.output(Globals.lang("Deleted") + " " +
+                                       (bes.length > 1 ? bes.length
+                                        + " " + Globals.lang("entries")
+                                        : Globals.lang("entry")) + ".");
+                          ce.end();
+                          undoManager.addEdit(ce);
+                          //entryTable.clearSelection();
+                      }
+
+
+                          // Reselect the entry in the first prev. selected position:
+                          /*if (row0 >= entryTable.getRowCount())
+                              row0 = entryTable.getRowCount()-1;
+                          if (row0 >= 0) {
+                             final int toSel = row0;
+                            //
+                              SwingUtilities.invokeLater(new Runnable() {
+                                public void run() {
+                                    entryTable.addRowSelectionInterval(toSel, toSel);
+                                    //entryTable.ensureVisible(toSel);
+                                }
+                              });
+                            */
+                          }
+
+                      }
+
+            });
+
+        // The action for pasting entries or cell contents.
+        // Edited by Seb Wills <saw27 at mrao.cam.ac.uk> on 14-Apr-04:
+        //  - more robust detection of available content flavors (doesn't only look at first one offered)
+        //  - support for parsing string-flavor clipboard contents which are bibtex entries.
+        //    This allows you to (a) paste entire bibtex entries from a text editor, web browser, etc
+        //                       (b) copy and paste entries between multiple instances of JabRef (since
+        //         only the text representation seems to get as far as the X clipboard, at least on my system)
+        actions.put("paste", new BaseAction() {
+                public void action() {
+                    // Get clipboard contents, and see if TransferableBibtexEntry is among the content flavors offered
+                    Transferable content = Toolkit.getDefaultToolkit()
+                        .getSystemClipboard().getContents(null);
+                    if (content != null) {
+                        BibtexEntry[] bes = null;
+                        if (content.isDataFlavorSupported(TransferableBibtexEntry.entryFlavor)) {
+                            // We have determined that the clipboard data is a set of entries.
+                            try {
+                                bes = (BibtexEntry[])(content.getTransferData(TransferableBibtexEntry.entryFlavor));
+
+                            } catch (UnsupportedFlavorException ex) {
+                                ex.printStackTrace();
+                            } catch (IOException ex) {
+                                ex.printStackTrace();
+                            }
+                        } else if (content.isDataFlavorSupported(DataFlavor.stringFlavor)) {
+                           try {
+                                  BibtexParser bp = new BibtexParser
+                                      (new java.io.StringReader( (String) (content.getTransferData(
+                                      DataFlavor.stringFlavor))));
+                                  BibtexDatabase db = bp.parse().getDatabase();
+                                  Util.pr("Parsed " + db.getEntryCount() + " entries from clipboard text");
+                                  if(db.getEntryCount()>0) {
+                                      bes = db.getEntries().toArray(new BibtexEntry[db.getEntryCount()]);
+                                  }
+                              } catch (UnsupportedFlavorException ex) {
+                                  ex.printStackTrace();
+                              } catch (Throwable ex) {
+                                  ex.printStackTrace();
+                              }
+
+                        }
+
+                        // finally we paste in the entries (if any), which either came from TransferableBibtexEntries
+                        // or were parsed from a string
+                        if ((bes != null) && (bes.length > 0)) {
+
+                          NamedCompound ce = new NamedCompound
+                              (Globals.lang(bes.length > 1 ? "paste entries" : "paste entry"));
+                          
+                          // Store the first inserted bibtexentry.
+                          // bes[0] does not work as bes[0] is first clonded,
+                          // then inserted.
+                          // This entry is used to open up an entry editor
+                          // for the first inserted entry.
+                          BibtexEntry firstBE = null;
+                          
+                          for (int i=0; i<bes.length; i++) {
+                            try {
+                              BibtexEntry be = (BibtexEntry)(bes[i].clone());
+                              if (firstBE == null) firstBE = be;
+                                Util.setAutomaticFields(be,
+                                        Globals.prefs.getBoolean("overwriteOwner"),
+                                        Globals.prefs.getBoolean("overwriteTimeStamp"));
+
+                              // We have to clone the
+                              // entries, since the pasted
+                              // entries must exist
+                              // independently of the copied
+                              // ones.
+                              be.setId(Util.createNeutralId());
+                              database.insertEntry(be);
+                              
+                              addToSelectedGroup(be); 
+                              ce.addEdit(new UndoableInsertEntry
+                                         (database, be, BasePanel.this));
+                            } catch (KeyCollisionException ex) {
+                              Util.pr("KeyCollisionException... this shouldn't happen.");
+                            }
+                          }
+                          ce.end();
+                          undoManager.addEdit(ce);
+                          //entryTable.clearSelection();
+                          //entryTable.revalidate();
+                          output(Globals.lang("Pasted") + " " +
+                                  (bes.length > 1 ? bes.length + " " +
+                                          Globals.lang("entries") : "1 " + Globals.lang("entry"))
+                                  + ".");
+                          markBaseChanged();
+                        	  
+                          if (Globals.prefs.getBoolean("autoOpenForm")) {
+                        	  selectionListener.editSignalled(firstBE);
+                          }
+                          highlightEntry(firstBE);
+                        }
+                      }
+
+                    }
+
+});
+
+        actions.put("selectAll", new BaseAction() {
+                public void action() {
+                    mainTable.selectAll();
+                }
+            });
+
+        // The action for opening the preamble editor
+        actions.put("editPreamble", new BaseAction() {
+                public void action() {
+                    if (preambleEditor == null) {
+                        PreambleEditor form = new PreambleEditor
+                            (frame, BasePanel.this, database, Globals.prefs);
+                        Util.placeDialog(form, frame);
+                        form.setVisible(true);
+                        preambleEditor = form;
+                    } else {
+                        preambleEditor.setVisible(true);
+                    }
+
+                }
+            });
+
+        // The action for opening the string editor
+        actions.put("editStrings", new BaseAction() {
+                public void action() {
+                    if (stringDialog == null) {
+                        StringDialog form = new StringDialog
+                            (frame, BasePanel.this, database, Globals.prefs);
+                        Util.placeDialog(form, frame);
+                        form.setVisible(true);
+                        stringDialog = form;
+                    } else {
+                        stringDialog.setVisible(true);
+                    }
+
+                }
+            });
+
+        // The action for toggling the groups interface
+        actions.put("toggleGroups", new BaseAction() {
+            public void action() {
+              sidePaneManager.toggle("groups");
+              frame.groupToggle.setSelected(sidePaneManager.isComponentVisible("groups"));
+            }
+        });
+
+
+        // action for collecting database strings from user
+        actions.put("dbConnect", new DbConnectAction(this));
+
+
+        // action for exporting database to external SQL database
+        actions.put("dbExport", new AbstractWorker () {
+
+            String errorMessage = null;
+            boolean connectToDB = false;
+
+            // run first, in EDT:
+            public void init() {
+
+                DBStrings dbs = metaData.getDBStrings();
+
+                // get DBStrings from user if necessary
+                if (!dbs.isConfigValid()) {
+
+                    // init DB strings if necessary
+                    if (! dbs.isInitialized()) {
+                        dbs.initialize();
+                    }
+
+                    // show connection dialog
+                    DBConnectDialog dbd = new DBConnectDialog(frame(), dbs);
+                    Util.placeDialog(dbd, BasePanel.this );
+                    dbd.setVisible(true);
+
+                    connectToDB = dbd.getConnectToDB();
+
+                    // store database strings
+                    if (connectToDB) {
+                        dbs = dbd.getDBStrings();
+                        metaData.setDBStrings(dbs);
+                        dbd.dispose();
+                    }
+
+                } else {
+
+                    connectToDB  = true;
+
+                }
+
+            }
+
+            // run second, on a different thread:
+            public void run() {
+
+                if (connectToDB) {
+
+                    DBStrings dbs = metaData.getDBStrings();
+
+                    try {
+                    	/*boolean okToExport = null!=metaData.getFile();
+                    	if (!okToExport)
+                    	{
+                    		okToExport = false;
+                    		int response = JOptionPane.showConfirmDialog(null, "You need to save your database in the disk \n" +
+                    				"before saving. Save it now?", "Database is not saved",
+                    		        JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
+                    			if(response == JOptionPane.YES_OPTION)
+                    			{
+                    				try {
+                    					saveAction.saveAs();
+                    					okToExport = (null!=metaData.getFile());
+                    				} catch (Throwable e) {
+                    				e.printStackTrace();
+                    			}
+                    		}
+                    	}
+                    	if (okToExport)
+                    	{*/
+	                        frame.output(Globals.lang("Attempting SQL export..."));
+	                        DBExporterAndImporterFactory factory = new DBExporterAndImporterFactory();
+	                        DBExporter exporter = factory.getExporter(dbs.getServerType());
+	                        exporter.exportDatabaseToDBMS(database, metaData, null, dbs, frame);
+	                        dbs.isConfigValid(true);
+                    	//}
+                    	//else
+                    	//	errorMessage = "Database was not exported. Your database must be saved \nbefore exporting to a SQL database";
+                    } catch (Exception ex) {
+                        String preamble = "Could not export to SQL database for the following reason:";
+                        errorMessage = SQLUtil.getExceptionMessage(ex);
+                        ex.printStackTrace();
+                        dbs.isConfigValid(false);
+                        JOptionPane.showMessageDialog(frame, Globals.lang(preamble)
+                                + "\n" +errorMessage, Globals.lang("Export to SQL database"),
+                                JOptionPane.ERROR_MESSAGE);
+                    }
+
+                    metaData.setDBStrings(dbs);
+
+                }
+
+            }
+
+            // run third, on EDT:
+            public void update() {
+
+                // if no error, report success
+                if (errorMessage == null) {
+                    if (connectToDB) {
+                        frame.output(Globals.lang("%0 export successful"));
+                    }
+                }
+
+                // show an error dialog if an error occurred
+                else {
+
+                    String preamble = "Could not export to SQL database for the following reason:";
+                    frame.output(Globals.lang(preamble)
+                            + "  " + errorMessage);
+
+                    JOptionPane.showMessageDialog(frame, Globals.lang(preamble)
+                        + "\n" + errorMessage, Globals.lang("Export to SQL database"),
+                        JOptionPane.ERROR_MESSAGE);
+
+                    errorMessage = null;
+
+                }
+            }
+
+        });
+        	
+        actions.put(FindUnlinkedFilesDialog.ACTION_COMMAND, new BaseAction() {
+      	  	@Override
+      	  	public void action() throws Throwable {
+					FindUnlinkedFilesDialog dialog = new FindUnlinkedFilesDialog(frame, frame, BasePanel.this);
+					Util.placeDialog(dialog, frame);
+					dialog.setVisible(true);
+				}
+          });
+
+        // The action for auto-generating keys.
+        actions.put("makeKey", new AbstractWorker() {
+        //int[] rows;
+        List<BibtexEntry> entries;
+        int numSelected;
+        boolean cancelled = false;
+
+        // Run first, in EDT:
+        public void init() {
+                    entries = new ArrayList<BibtexEntry>(Arrays.asList(getSelectedEntries()));
+                   //rows = entryTable.getSelectedRows() ;
+                    numSelected = entries.size();
+
+                    if (entries.size() == 0) { // None selected. Inform the user to select entries first.
+                        JOptionPane.showMessageDialog(frame, Globals.lang("First select the entries you want keys to be generated for."),
+                                                      Globals.lang("Autogenerate BibTeX key"), JOptionPane.INFORMATION_MESSAGE);
+                        return ;
+                    }
+            frame.block();
+            output(Globals.lang("Generating BibTeX key for")+" "+
+                           numSelected+" "+(numSelected>1 ? Globals.lang("entries")
+                                            : Globals.lang("entry"))+"...");
+        }
+
+
+        // Run second, on a different thread:
+                public void run() {
+                    BibtexEntry bes = null ;
+                    NamedCompound ce = new NamedCompound(Globals.lang("autogenerate keys"));
+
+                    // First check if any entries have keys set already. If so, possibly remove
+                    // them from consideration, or warn about overwriting keys.
+                    loop: for (Iterator<BibtexEntry> i=entries.iterator(); i.hasNext();) {
+                        bes = i.next();
+                        if (bes.getField(BibtexFields.KEY_FIELD) != null) {
+                            if (Globals.prefs.getBoolean("avoidOverwritingKey"))
+                                // Remove the entry, because its key is already set:
+                                i.remove();
+                            else if (Globals.prefs.getBoolean("warnBeforeOverwritingKey")) {
+                                // Ask if the user wants to cancel the operation:
+                                CheckBoxMessage cbm = new CheckBoxMessage(Globals.lang("One or more keys will be overwritten. Continue?"),
+                                        Globals.lang("Disable this confirmation dialog"), false);
+                                int answer = JOptionPane.showConfirmDialog(frame, cbm, Globals.lang("Overwrite keys"),
+                                        JOptionPane.YES_NO_OPTION);
+                                if (cbm.isSelected())
+                                    Globals.prefs.putBoolean("warnBeforeOverwritingKey", false);
+                                if (answer == JOptionPane.NO_OPTION) {
+                                    // Ok, break off the operation.
+                                    cancelled = true;
+                                    return;
+                                }
+                                // No need to check more entries, because the user has already confirmed
+                                // that it's ok to overwrite keys:
+                                break loop;
+                            }
+                        }
+                    }
+
+                    HashMap<BibtexEntry, Object> oldvals = new HashMap<BibtexEntry, Object>();
+                    // Iterate again, removing already set keys. This is skipped if overwriting
+                    // is disabled, since all entries with keys set will have been removed.
+                    if (!Globals.prefs.getBoolean("avoidOverwritingKey")) for (Iterator<BibtexEntry> i=entries.iterator(); i.hasNext();) {
+                        bes = i.next();
+                        // Store the old value:
+                        oldvals.put(bes, bes.getField(BibtexFields.KEY_FIELD));
+                        database.setCiteKeyForEntry(bes.getId(), null);
+                    }
+
+                    // Finally, set the new keys:
+                    for (Iterator<BibtexEntry> i=entries.iterator(); i.hasNext();) {
+                        bes = i.next();
+                        bes = LabelPatternUtil.makeLabel(metaData, database, bes);
+                        ce.addEdit(new UndoableKeyChange
+                                   (database, bes.getId(), (String)oldvals.get(bes),
+                                    bes.getField(BibtexFields.KEY_FIELD)));
+                    }
+                    ce.end();
+                    undoManager.addEdit(ce);
+        }
+
+        // Run third, on EDT:
+        public void update() {
+            database.setFollowCrossrefs(true);
+            if (cancelled) {
+                frame.unblock();
+                return;
+            }
+            markBaseChanged() ;
+            numSelected = entries.size();
+
+////////////////////////////////////////////////////////////////////////////////
+//          Prevent selection loss for autogenerated BibTeX-Keys
+////////////////////////////////////////////////////////////////////////////////
+            for (Iterator<BibtexEntry> i=entries.iterator(); i.hasNext();) {
+               final BibtexEntry bibEntry = i.next();
+               SwingUtilities.invokeLater(new Runnable() {
+                  public void run() {
+                    final int row = mainTable.findEntry( bibEntry );
+                    if (row >= 0 && mainTable.getSelectedRowCount() < entries.size())
+                      mainTable.addRowSelectionInterval(row, row);
+                  }
+               });
+            }
+////////////////////////////////////////////////////////////////////////////////
+            output(Globals.lang("Generated BibTeX key for")+" "+
+               numSelected+" "+(numSelected!=1 ? Globals.lang("entries")
+                                    : Globals.lang("entry")));
+            frame.unblock();
+        }
+    });
+         
+        
+     // The action for cleaning up entry.
+        actions.put("Cleanup", cleanUpAction);
+
+        actions.put("search", new BaseAction() {
+                public void action() {
+                    //sidePaneManager.togglePanel("search");
+                    sidePaneManager.show("search");
+                    //boolean on = sidePaneManager.isPanelVisible("search");
+                    frame.searchToggle.setSelected(true);
+                    if (true)
+                      frame.getSearchManager().startSearch();
+                }
+            });
+        
+        actions.put("toggleSearch", new BaseAction() {
+                public void action() {
+                    //sidePaneManager.togglePanel("search");
+                    sidePaneManager.toggle("search");
+                    boolean on = sidePaneManager.isComponentVisible("search");
+                    frame.searchToggle.setSelected(on);
+                    if (on)
+                      frame.getSearchManager().startSearch();
+                }
+            });
+
+        actions.put("incSearch", new BaseAction() {
+                public void action() {
+                    sidePaneManager.show("search");
+                    frame.searchToggle.setSelected(true);
+                    frame.getSearchManager().startIncrementalSearch();
+                }
+            });
+
+        // The action for copying the selected entry's key.
+        actions.put("copyKey", new BaseAction() {
+                public void action() {
+                    BibtexEntry[] bes = mainTable.getSelectedEntries();
+                    if ((bes != null) && (bes.length > 0)) {
+                        storeCurrentEdit();
+                        //String[] keys = new String[bes.length];
+                        Vector<Object> keys = new Vector<Object>();
+                        // Collect all non-null keys.
+                        for (int i=0; i<bes.length; i++)
+                            if (bes[i].getField(BibtexFields.KEY_FIELD) != null)
+                                keys.add(bes[i].getField(BibtexFields.KEY_FIELD));
+                        if (keys.size() == 0) {
+                            output("None of the selected entries have BibTeX keys.");
+                            return;
+                        }
+                        StringBuffer sb = new StringBuffer((String)keys.elementAt(0));
+                        for (int i=1; i<keys.size(); i++) {
+                            sb.append(',');
+                            sb.append((String)keys.elementAt(i));
+                        }
+
+                        StringSelection ss = new StringSelection(sb.toString());
+                        Toolkit.getDefaultToolkit().getSystemClipboard()
+                            .setContents(ss, BasePanel.this);
+
+                        if (keys.size() == bes.length)
+                            // All entries had keys.
+                            output(Globals.lang((bes.length > 1) ? "Copied keys"
+                                                : "Copied key")+".");
+                        else
+                            output(Globals.lang("Warning")+": "+(bes.length-keys.size())
+                                   +" "+Globals.lang("out of")+" "+bes.length+" "+
+                                   Globals.lang("entries have undefined BibTeX key")+".");
+                    }
+                }
+            });
+
+        // The action for copying a cite for the selected entry.
+        actions.put("copyCiteKey", new BaseAction() {
+                public void action() {
+                    BibtexEntry[] bes = mainTable.getSelectedEntries();
+                    if ((bes != null) && (bes.length > 0)) {
+                        storeCurrentEdit();
+                        //String[] keys = new String[bes.length];
+                        Vector<Object> keys = new Vector<Object>();
+                        // Collect all non-null keys.
+                        for (int i=0; i<bes.length; i++)
+                            if (bes[i].getField(BibtexFields.KEY_FIELD) != null)
+                                keys.add(bes[i].getField(BibtexFields.KEY_FIELD));
+                        if (keys.size() == 0) {
+                            output("None of the selected entries have BibTeX keys.");
+                            return;
+                        }
+                        StringBuffer sb = new StringBuffer((String)keys.elementAt(0));
+                        for (int i=1; i<keys.size(); i++) {
+                            sb.append(',');
+                            sb.append((String)keys.elementAt(i));
+                        }
+
+                        StringSelection ss = new StringSelection
+                            ("\\cite{"+sb.toString()+"}");
+                        Toolkit.getDefaultToolkit().getSystemClipboard()
+                            .setContents(ss, BasePanel.this);
+
+                        if (keys.size() == bes.length)
+                            // All entries had keys.
+                            output(bes.length > 1 ? Globals.lang("Copied keys")
+                                                  : Globals.lang("Copied key")+".");
+                        else
+                            output(Globals.lang("Warning")+": "+(bes.length-keys.size())
+                                   +" "+Globals.lang("out of")+" "+bes.length+" "+
+                                   Globals.lang("entries have undefined BibTeX key")+".");
+                    }
+                }
+            });
+        
+          // The action for copying the BibTeX key and the title for the first selected entry
+          actions.put("copyKeyAndTitle", new BaseAction() {
+        	  public void action() {
+                  BibtexEntry[] bes = mainTable.getSelectedEntries();
+                  if ((bes != null) && (bes.length > 0)) {
+                      storeCurrentEdit();
+
+                      // OK: in a future version, this string should be configurable to allow arbitrary exports
+              		  StringReader sr = new StringReader("\\bibtexkey - \\begin{title}\\format[RemoveBrackets]{\\title}\\end{title}\n");
+            		  Layout layout;
+					  try {
+						  layout = new LayoutHelper(sr).getLayoutFromText(Globals.FORMATTER_PACKAGE);
+					  } catch (Exception e) {
+						  e.printStackTrace();
+						  return;
+					  }
+					  
+            		  StringBuffer sb = new StringBuffer();
+
+            		  int copied = 0;
+                      // Collect all non-null keys.
+                      for (int i=0; i<bes.length; i++)
+                          if (bes[i].getField(BibtexFields.KEY_FIELD) != null) {
+                        	  copied++;
+                        	  sb.append(layout.doLayout(bes[i], database));
+                          }
+                      
+                      if (copied==0) {
+                          output("None of the selected entries have BibTeX keys.");
+                          return;
+                      }
+
+                      StringSelection ss = new StringSelection(sb.toString());
+                      Toolkit.getDefaultToolkit().getSystemClipboard()
+                          .setContents(ss, BasePanel.this);
+
+                      if (copied == bes.length)
+                          // All entries had keys.
+                          output(Globals.lang((bes.length > 1) ? "Copied keys"
+                                              : "Copied key")+".");
+                      else
+                          output(Globals.lang("Warning")+": "+(copied)
+                                 +" "+Globals.lang("out of")+" "+bes.length+" "+
+                                 Globals.lang("entries have undefined BibTeX key")+".");
+                  }
+        	  }
+          });
+
+          actions.put("mergeDatabase", new AppendDatabaseAction(frame, this));
+
+
+        actions.put("openFile", new BaseAction() {
+            public void action() {
+                (new Thread() {
+                    public void run() {
+                        BibtexEntry[] bes = mainTable.getSelectedEntries();
+                        String field = "ps";
+
+                        if ((bes != null) && (bes.length == 1)) {
+                            FileListEntry entry = null;
+                            FileListTableModel tm = new FileListTableModel();
+                            tm.setContent(bes[0].getField("file"));
+                            for (int i=0; i< tm.getRowCount(); i++) {
+                                FileListEntry flEntry = tm.getEntry(i);
+                                if (flEntry.getType().getName().toLowerCase().equals("pdf")
+                                    || flEntry.getType().getName().toLowerCase().equals("ps")) {
+                                    entry = flEntry;
+                                    break;
+                                }
+                            }
+                            if (entry != null) {
+                                try {
+                                    Util.openExternalFileAnyFormat(metaData, entry.getLink(), entry.getType());
+                                    output(Globals.lang("External viewer called") + ".");
+                                } catch (IOException e) {
+                                    output(Globals.lang("Could not open link"));
+                                    e.printStackTrace();
+                                }
+                                return;
+                            }
+                            // If we didn't find anything in the "file" field, check "ps" and "pdf" fields:
+                            Object link = bes[0].getField("ps");
+                            if (bes[0].getField("pdf") != null) {
+                                link = bes[0].getField("pdf");
+                                field = "pdf";
+                            }
+                            String filepath = null;
+                            if (link != null) {
+                                filepath = link.toString();
+                            } else {
+                                if (Globals.prefs.getBoolean("runAutomaticFileSearch")) {
+
+                                     /*  The search can lead to an unexpected 100% CPU usage which is perceived
+                                         as a bug, if the search incidentally starts at a directory with lots
+                                         of stuff below. It is now disabled by default. */
+
+                                    // see if we can fall back to a filename based on the bibtex key
+                                    final Collection<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+                                    entries.add(bes[0]);
+                                    ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
+                                    ArrayList<File> dirs = new ArrayList<File>();
+                                    if (metaData.getFileDirectory(GUIGlobals.FILE_FIELD).length > 0) {
+                                        String[] mdDirs = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+                                        for (int i = 0; i < mdDirs.length; i++) {
+                                            dirs.add(new File(mdDirs[i]));
+
+                                        }
+                                    }
+                                    Collection<String> extensions = new ArrayList<String>();
+                                    for (int i = 0; i < types.length; i++) {
+                                        final ExternalFileType type = types[i];
+                                        extensions.add(type.getExtension());
+                                    }
+                                    // Run the search operation:
+                                    Map<BibtexEntry, List<File>> result;
+                                    if (Globals.prefs.getBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY)) {
+                                        String regExp = Globals.prefs.get(JabRefPreferences.REG_EXP_SEARCH_EXPRESSION_KEY);
+                                        result = RegExpFileSearch.findFilesForSet(entries, extensions, dirs, regExp);
+                                    }
+                                    else
+                                        result = Util.findAssociatedFiles(entries, extensions, dirs);
+                                    if (result.get(bes[0]) != null) {
+                                        List<File> res = result.get(bes[0]);
+                                        if (res.size() > 0) {
+                                            filepath = res.get(0).getPath();
+                                            int index = filepath.lastIndexOf('.');
+                                            if ((index >= 0) && (index < filepath.length()-1)) {
+                                                String extension = filepath.substring(index+1);
+                                                ExternalFileType type = Globals.prefs.getExternalFileTypeByExt(extension);
+                                                if (type != null) {
+                                                    try {
+                                                        Util.openExternalFileAnyFormat(metaData, filepath, type);
+                                                        output(Globals.lang("External viewer called") + ".");
+                                                        return;
+                                                    } catch (IOException ex) {
+                                                        output(Globals.lang("Error") + ": " + ex.getMessage());
+                                                    }
+                                                }
+                                            }
+
+                                            // TODO: add code for opening the file
+                                        }
+                                    }
+                                    /*String basefile;
+                                    Object key = bes[0].getField(BibtexFields.KEY_FIELD);
+                                    if (key != null) {
+                                        basefile = key.toString();
+                                        final ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
+                                        final String sep = System.getProperty("file.separator");
+                                        String dir = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+                                        if ((dir != null) && (dir.length() > 0)) {
+                                            if (dir.endsWith(sep)) {
+                                                dir = dir.substring(0, dir.length() - sep.length());
+                                            }
+                                            for (int i = 0; i < types.length; i++) {
+                                                String found = Util.findPdf(basefile, types[i].getExtension(),
+                                                        dir, new OpenFileFilter("." + types[i].getExtension()));
+                                                if (found != null) {
+                                                    filepath = dir + sep + found;
+                                                    break;
+                                                }
+                                            }
+                                        }
+                                    }*/
+                                }
+                            }
+
+
+                            if (filepath != null) {
+                                //output(Globals.lang("Calling external viewer..."));
+                                try {
+                                    Util.openExternalViewer(metaData(), filepath, field);
+                                    output(Globals.lang("External viewer called") + ".");
+                                }
+                                catch (IOException ex) {
+                                    output(Globals.lang("Error") + ": " + ex.getMessage());
+                                }
+                            } else
+                                output(Globals.lang(
+                                        "No pdf or ps defined, and no file matching Bibtex key found") +
+                                        ".");
+                        } else
+                            output(Globals.lang("No entries or multiple entries selected."));
+                    }
+                }).start();
+            }
+        });
+
+        actions.put("addFileLink", new AttachFileAction(this));
+
+        actions.put("openExternalFile", new BaseAction() {
+            public void action() {
+                (new Thread() {
+                    public void run() {
+                        BibtexEntry[] bes = mainTable.getSelectedEntries();
+                        String field = GUIGlobals.FILE_FIELD;
+                        if ((bes != null) && (bes.length == 1)) {
+                            Object link = bes[0].getField(field);
+                            if (link == null) {
+                                runCommand("openFile"); // Fall back on PDF/PS fields???
+                                return;
+                            }
+                            FileListTableModel tableModel = new FileListTableModel();
+                            tableModel.setContent((String)link);
+                            if (tableModel.getRowCount() == 0) {
+                                runCommand("openFile"); // Fall back on PDF/PS fields???
+                                return;
+                            }
+                            FileListEntry flEntry = tableModel.getEntry(0);
+                            ExternalFileMenuItem item = new ExternalFileMenuItem
+                                (frame(), bes[0], "",
+                                flEntry.getLink(), flEntry.getType().getIcon(),
+                                metaData(), flEntry.getType());
+                            item.openLink();
+                        } else
+                            output(Globals.lang("No entries or multiple entries selected."));
+                    }
+                }).start();
+            }
+        });
+
+
+        actions.put("openUrl", new BaseAction() {
+            public void action() {
+                BibtexEntry[] bes = mainTable.getSelectedEntries();
+                String field = "doi";
+                if ((bes != null) && (bes.length == 1)) {
+                    Object link = bes[0].getField("doi");
+                    if (bes[0].getField("url") != null) {
+                        link = bes[0].getField("url");
+                        field = "url";
+                    }
+                    if (link != null) {
+                        //output(Globals.lang("Calling external viewer..."));
+                        try {
+                            Util.openExternalViewer(metaData(), link.toString(), field);
+                            output(Globals.lang("External viewer called")+".");
+                        } catch (IOException ex) {
+                            output(Globals.lang("Error") + ": " + ex.getMessage());
+                        }
+                    }
+                    else {
+                        // No URL or DOI found in the "url" and "doi" fields.
+                        // Look for web links in the "file" field as a fallback:
+                        FileListEntry entry = null;
+                        FileListTableModel tm = new FileListTableModel();
+                        tm.setContent(bes[0].getField("file"));
+                        for (int i=0; i< tm.getRowCount(); i++) {
+                            FileListEntry flEntry = tm.getEntry(i);
+                            if (flEntry.getType().getName().toLowerCase().equals("url")
+                                    || flEntry.getType().getName().toLowerCase().equals("ps")) {
+                                entry = flEntry;
+                                break;
+                            }
+                        }
+                        if (entry != null) {
+                            try {
+                                Util.openExternalFileAnyFormat(metaData, entry.getLink(), entry.getType());
+                                output(Globals.lang("External viewer called") + ".");
+                            } catch (IOException e) {
+                                output(Globals.lang("Could not open link"));
+                                e.printStackTrace();
+                            }
+                            return;
+                        } else
+                            output(Globals.lang("No url defined")+".");
+                    }
+                } else
+                    output(Globals.lang("No entries or multiple entries selected."));
+            }
+        });
+
+        actions.put("openSpires", new BaseAction() {
+        	public void action() {
+        		BibtexEntry[] bes = mainTable.getSelectedEntries();
+                if ((bes != null) && (bes.length == 1)) {
+                	Object link = null;
+                    if (bes[0].getField("eprint") != null)
+                      link = SPIRESFetcher.constructUrlFromEprint(bes[0].getField("eprint").toString());
+                    else if (bes[0].getField("slaccitation") != null)
+                        link = SPIRESFetcher.constructUrlFromSlaccitation(bes[0].getField("slaccitation").toString());
+                    if (link != null) {
+                      //output(Globals.lang("Calling external viewer..."));
+                      try {
+                        Util.openExternalViewer(metaData(), link.toString(), "url");
+                        output(Globals.lang("External viewer called")+".");
+                      } catch (IOException ex) {
+                          output(Globals.lang("Error") + ": " + ex.getMessage());
+                      }
+                    }
+                    else
+                        output(Globals.lang("No url defined")+".");
+                } else
+                  output(Globals.lang("No entries or multiple entries selected."));
+            }
+        	});
+
+		/*
+		 *  It looks like this action was not being supported for SPIRES anyway
+		 *  so we don't bother to implement it.
+        actions.put("openInspire", new BaseAction() {
+        	public void action() {
+        		BibtexEntry[] bes = mainTable.getSelectedEntries();
+                if ((bes != null) && (bes.length == 1)) {
+                	Object link = null;
+                    if (bes[0].getField("eprint") != null)
+                      link = INSPIREFetcher.constructUrlFromEprint(bes[0].getField("eprint").toString());
+                    else if (bes[0].getField("slaccitation") != null)
+                        link = INSPIREFetcher.constructUrlFromSlaccitation(bes[0].getField("slaccitation").toString());
+                    if (link != null) {
+                      //output(Globals.lang("Calling external viewer..."));
+                      try {
+                        Util.openExternalViewer(metaData(), link.toString(), "url");
+                        output(Globals.lang("External viewer called")+".");
+                      } catch (IOException ex) {
+                          output(Globals.lang("Error") + ": " + ex.getMessage());
+                      }
+                    }
+                    else
+                        output(Globals.lang("No url defined")+".");
+                } else
+                  output(Globals.lang("No entries or multiple entries selected."));
+            }
+        	});
+			*/
+
+        
+          actions.put("replaceAll", new BaseAction() {
+                    public void action() {
+                      ReplaceStringDialog rsd = new ReplaceStringDialog(frame);
+                      rsd.setVisible(true);
+                      if (!rsd.okPressed())
+                          return;
+                      int counter = 0;
+                      NamedCompound ce = new NamedCompound(Globals.lang("Replace string"));
+                      if (!rsd.selOnly()) {
+                    	  for (BibtexEntry entry : database.getEntries()){
+                              counter += rsd.replace(entry, ce);
+                    	  }
+                      } else {
+                          BibtexEntry[] bes = mainTable.getSelectedEntries();
+                          for (int i=0; i<bes.length; i++)
+                              counter += rsd.replace(bes[i], ce);
+                      }
+
+                      output(Globals.lang("Replaced")+" "+counter+" "+
+                             Globals.lang(counter==1?"occurence":"occurences")+".");
+                      if (counter > 0) {
+                          ce.end();
+                          undoManager.addEdit(ce);
+                          markBaseChanged();
+                      }
+                  }
+              });
+
+              actions.put("dupliCheck", new BaseAction() {
+                public void action() {
+                  DuplicateSearch ds = new DuplicateSearch(BasePanel.this);
+                  ds.start();
+                }
+              });
+
+              /*actions.put("strictDupliCheck", new BaseAction() {
+                public void action() {
+                  StrictDuplicateSearch ds = new StrictDuplicateSearch(BasePanel.this);
+                  ds.start();
+                }
+              });*/
+
+              actions.put("plainTextImport", new BaseAction() {
+                public void action()
+                {
+                  // get Type of new entry
+                  EntryTypeDialog etd = new EntryTypeDialog(frame);
+                  Util.placeDialog(etd, BasePanel.this);
+                  etd.setVisible(true);
+                  BibtexEntryType tp = etd.getChoice();
+                  if (tp == null)
+                    return;
+
+                  String id = Util.createNeutralId();
+                  BibtexEntry bibEntry = new BibtexEntry(id, tp) ;
+                  TextInputDialog tidialog = new TextInputDialog(frame, BasePanel.this,
+                                                                 "import", true,
+                                                                 bibEntry) ;
+                  Util.placeDialog(tidialog, BasePanel.this);
+                  tidialog.setVisible(true);
+
+                  if (tidialog.okPressed())
+                  {
+                      Util.setAutomaticFields(Arrays.asList(new BibtexEntry[] {bibEntry}),
+                              false, false, false);
+                    insertEntry(bibEntry) ;
+                  }
+                }
+              });
+
+              // The action starts the "import from plain text" dialog
+              /*actions.put("importPlainText", new BaseAction() {
+                      public void action()
+                      {
+                        BibtexEntry bibEntry = null ;
+                        // try to get the first marked entry
+                        BibtexEntry[] bes = entryTable.getSelectedEntries();
+                        if ((bes != null) && (bes.length > 0))
+                          bibEntry = bes[0] ;
+
+                        if (bibEntry != null)
+                        {
+                          // Create an UndoableInsertEntry object.
+                          undoManager.addEdit(new UndoableInsertEntry(database, bibEntry, BasePanel.this));
+
+                          TextInputDialog tidialog = new TextInputDialog(frame, BasePanel.this,
+                                                                         "import", true,
+                                                                         bibEntry) ;
+                          Util.placeDialog(tidialog, BasePanel.this);
+                          tidialog.setVisible(true);
+
+                          if (tidialog.okPressed())
+                          {
+                            output(Globals.lang("changed ")+" '"
+                                   +bibEntry.getType().getName().toLowerCase()+"' "
+                                   +Globals.lang("entry")+".");
+                            refreshTable();
+                            int row = tableModel.getNumberFromName(bibEntry.getId());
+
+                            entryTable.clearSelection();
+                            entryTable.scrollTo(row);
+                            markBaseChanged(); // The database just changed.
+                            if (Globals.prefs.getBoolean("autoOpenForm"))
+                            {
+                                  showEntry(bibEntry);
+                            }
+                          }
+                        }
+                      }
+                  });
+                */
+              actions.put("markEntries", new AbstractWorker() {
+                  private int besLength = -1;
+                public void run() {
+
+                  NamedCompound ce = new NamedCompound(Globals.lang("Mark entries"));
+                  BibtexEntry[] bes = mainTable.getSelectedEntries();
+                  besLength = bes.length;
+
+                  for (int i=0; i<bes.length; i++) {
+                      Util.markEntry(bes[i], 1, true, ce);
+                  }
+                  ce.end();
+                  undoManager.addEdit(ce);
+                }
+
+                public void update() {
+                  markBaseChanged();
+                  output(Globals.lang("Marked selected")+" "+Globals.lang(besLength>0?"entry":"entries"));
+
+                }
+              });
+
+              actions.put("unmarkEntries", new BaseAction() {
+                public void action() {
+                    try {
+                  NamedCompound ce = new NamedCompound(Globals.lang("Unmark entries"));
+                  BibtexEntry[] bes = mainTable.getSelectedEntries();
+          if (bes == null)
+              return;
+                  for (int i=0; i<bes.length; i++) {
+                      Util.unmarkEntry(bes[i], false, database, ce);
+                  }
+                  ce.end();
+                  undoManager.addEdit(ce);
+                  markBaseChanged();
+                  output(Globals.lang("Unmarked selected")+" "+Globals.lang(bes.length>0?"entry":"entries"));
+                    } catch (Throwable ex) { ex.printStackTrace(); }
+                }
+              });
+
+              actions.put("unmarkAll", new BaseAction() {
+                public void action() {
+                  NamedCompound ce = new NamedCompound(Globals.lang("Unmark all"));
+                  
+                  for (BibtexEntry be : database.getEntries()){
+                    Util.unmarkEntry(be, false, database, ce);
+                  }
+                  ce.end();
+                  undoManager.addEdit(ce);
+                  markBaseChanged();
+                }
+              });
+              
+              actions.put(Relevance.getInstance().getValues().get(0).getActionName(), 
+                  new SpecialFieldAction(frame, Relevance.getInstance(), Relevance.getInstance().getValues().get(0).getFieldValue(), true, Globals.lang("Marked entries as relevant"), "Marked %0 entries as relevant"));
+              actions.put(Quality.getInstance().getValues().get(0).getActionName(),
+                  new SpecialFieldAction(frame, Quality.getInstance(), Quality.getInstance().getValues().get(0).getFieldValue(), true, Globals.lang("Marked entries' quality as good"), "Set quality of %0 entries to good"));
+              
+              for (SpecialFieldValue prio: Priority.getInstance().getValues()) {
+	              actions.put(prio.getActionName(), prio.getAction(this.frame));
+              }
+              
+              for (SpecialFieldValue prio: Rank.getInstance().getValues()) {
+	              actions.put(prio.getActionName(), prio.getAction(this.frame));
+              }
+              
+              actions.put("togglePreview", new BaseAction() {
+                      public void action() {
+                          boolean enabled = !Globals.prefs.getBoolean("previewEnabled");
+                          Globals.prefs.putBoolean("previewEnabled", enabled);
+                          frame.setPreviewActive(enabled);
+                          frame.previewToggle.setSelected(enabled);
+                      }
+                  });
+
+              actions.put("toggleHighlightGroupsMatchingAny", new BaseAction() {
+                public void action() {
+                    boolean enabled = !Globals.prefs.getBoolean("highlightGroupsMatchingAny");
+                    Globals.prefs.putBoolean("highlightGroupsMatchingAny", enabled);
+                    frame.highlightAny.setSelected(enabled);
+                    if (enabled) {
+                        frame.highlightAll.setSelected(false);
+                        Globals.prefs.putBoolean("highlightGroupsMatchingAll", false);
+                    }
+                    // ping the listener so it updates:
+                    groupsHighlightListener.listChanged(null);
+                }
+              });
+
+              actions.put("toggleHighlightGroupsMatchingAll", new BaseAction() {
+                  public void action() {
+                      boolean enabled = !Globals.prefs.getBoolean("highlightGroupsMatchingAll");
+                      Globals.prefs.putBoolean("highlightGroupsMatchingAll", enabled);
+                      frame.highlightAll.setSelected(enabled);
+                      if (enabled) {
+                          frame.highlightAny.setSelected(false);
+                          Globals.prefs.putBoolean("highlightGroupsMatchingAny", false);
+                      }
+                      // ping the listener so it updates:
+                      groupsHighlightListener.listChanged(null);
+                  }
+                });
+
+              actions.put("switchPreview", new BaseAction() {
+                      public void action() {
+                          selectionListener.switchPreview();
+                      }
+                  });
+
+              actions.put("manageSelectors", new BaseAction() {
+                      public void action() {
+                          ContentSelectorDialog2 csd = new ContentSelectorDialog2
+                              (frame, frame, BasePanel.this, false, metaData, null);
+                          Util.placeDialog(csd, frame);
+                          csd.setVisible(true);
+                      }
+                  });
+
+        actions.put("exportToClipboard", new ExportToClipboardAction(frame, database()));
+        actions.put("sendAsEmail", new SendAsEMailAction(frame));
+        
+          
+        actions.put("writeXMP", new WriteXMPAction(this));
+        
+        actions.put("abbreviateIso", new AbbreviateAction(this, true));
+        actions.put("abbreviateMedline", new AbbreviateAction(this, false));
+        actions.put("unabbreviate", new UnabbreviateAction(this));
+        actions.put("autoSetPdf", new AutoSetExternalFileForEntries(this, "pdf"));
+        actions.put("autoSetPs", new AutoSetExternalFileForEntries(this, "ps"));
+        actions.put("autoSetFile", new SynchronizeFileField(this));
+
+        actions.put("back", new BaseAction() {
+            public void action() throws Throwable {
+                back();
+            }
+        });
+        actions.put("forward", new BaseAction() {
+            public void action() throws Throwable {
+                forward();
+            }
+        });
+
+        actions.put("resolveDuplicateKeys", new SearchFixDuplicateLabels(this));
+
+        //actions.put("downloadFullText", new FindFullTextAction(this));
+    }
+
+    /**
+     * This method is called from JabRefFrame is a database specific
+     * action is requested by the user. Runs the command if it is
+     * defined, or prints an error message to the standard error
+     * stream.
+     *
+     * @param _command The name of the command to run.
+    */
+    public void runCommand(String _command) {
+      final String command = _command;
+      //(new Thread() {
+      //  public void run() {
+          if (actions.get(command) == null)
+            Util.pr("No action defined for'" + command + "'");
+            else {
+        Object o = actions.get(command);
+        try {
+            if (o instanceof BaseAction)
+            ((BaseAction)o).action();
+            else {
+            // This part uses Spin's features:
+            Worker wrk = ((AbstractWorker)o).getWorker();
+            // The Worker returned by getWorker() has been wrapped
+            // by Spin.off(), which makes its methods be run in
+            // a different thread from the EDT.
+            CallBack clb = ((AbstractWorker)o).getCallBack();
+
+            ((AbstractWorker)o).init(); // This method runs in this same thread, the EDT.
+            // Useful for initial GUI actions, like printing a message.
+
+            // The CallBack returned by getCallBack() has been wrapped
+            // by Spin.over(), which makes its methods be run on
+            // the EDT.
+            wrk.run(); // Runs the potentially time-consuming action
+            // without freezing the GUI. The magic is that THIS line
+            // of execution will not continue until run() is finished.
+            clb.update(); // Runs the update() method on the EDT.
+            }
+        } catch (Throwable ex) {
+            // If the action has blocked the JabRefFrame before crashing, we need to unblock it.
+            // The call to unblock will simply hide the glasspane, so there is no harm in calling
+            // it even if the frame hasn't been blocked.
+            frame.unblock();
+            ex.printStackTrace();
+        }
+        }
+      //  }
+      //}).start();
+    }
+
+    private boolean saveDatabase(File file, boolean selectedOnly, String encoding) throws SaveException {
+        SaveSession session;
+        frame.block();
+        try {
+            if (!selectedOnly)
+                session = FileActions.saveDatabase(database, metaData, file,
+                                           Globals.prefs, false, false, encoding, false);
+            else
+                session = FileActions.savePartOfDatabase(database, metaData, file,
+                                               Globals.prefs, mainTable.getSelectedEntries(), encoding);
+
+        } catch (UnsupportedCharsetException ex2) {
+            JOptionPane.showMessageDialog(frame, Globals.lang("Could not save file. "
+                +"Character encoding '%0' is not supported.", encoding),
+                    Globals.lang("Save database"), JOptionPane.ERROR_MESSAGE);
+            throw new SaveException("rt");
+        } catch (SaveException ex) {
+            if (ex.specificEntry()) {
+                // Error occured during processing of
+                // be. Highlight it:
+                int row = mainTable.findEntry(ex.getEntry()),
+                    topShow = Math.max(0, row-3);
+                mainTable.setRowSelectionInterval(row, row);
+                mainTable.scrollTo(topShow);
+                showEntry(ex.getEntry());
+            }
+            else ex.printStackTrace();
+
+            JOptionPane.showMessageDialog
+                (frame, Globals.lang("Could not save file")
+                 +".\n"+ex.getMessage(),
+                 Globals.lang("Save database"),
+                 JOptionPane.ERROR_MESSAGE);
+            throw new SaveException("rt");
+
+        } finally {
+            frame.unblock();
+        }
+
+        boolean commit = true;
+        if (!session.getWriter().couldEncodeAll()) {
+            DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("left:pref, 4dlu, fill:pref", ""));
+            JTextArea ta = new JTextArea(session.getWriter().getProblemCharacters());
+            ta.setEditable(false);
+            builder.append(Globals.lang("The chosen encoding '%0' could not encode the following characters: ",
+                      session.getEncoding()));
+            builder.append(ta);
+            builder.append(Globals.lang("What do you want to do?"));
+            String tryDiff = Globals.lang("Try different encoding");
+            int answer = JOptionPane.showOptionDialog(frame, builder.getPanel(), Globals.lang("Save database"),
+                    JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null,
+                    new String[] {Globals.lang("Save"), tryDiff, Globals.lang("Cancel")}, tryDiff);
+
+            if (answer == JOptionPane.NO_OPTION) {
+                // The user wants to use another encoding.
+                Object choice = JOptionPane.showInputDialog(frame, Globals.lang("Select encoding"), Globals.lang("Save database"),
+                        JOptionPane.QUESTION_MESSAGE, null, Globals.ENCODINGS, encoding);
+                if (choice != null) {
+                    String newEncoding = (String)choice;
+                    return saveDatabase(file, selectedOnly, newEncoding);
+                } else
+                    commit = false;
+            } else if (answer == JOptionPane.CANCEL_OPTION)
+                    commit = false;
+
+
+          }
+
+        try {
+            if (commit) {
+                session.commit();
+                this.encoding = encoding; // Make sure to remember which encoding we used.
+            }
+            else
+                session.cancel();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return commit;
+    }
+
+
+    /**
+     * This method is called from JabRefFrame when the user wants to
+     * create a new entry. If the argument is null, the user is
+     * prompted for an entry type.
+     *
+     * @param type The type of the entry to create.
+     * @return The newly created BibtexEntry or null the operation was canceled by the user.
+     */
+    public BibtexEntry newEntry(BibtexEntryType type) {
+        if (type == null) {
+            // Find out what type is wanted.
+            EntryTypeDialog etd = new EntryTypeDialog(frame);
+            // We want to center the dialog, to make it look nicer.
+            Util.placeDialog(etd, frame);
+            etd.setVisible(true);
+            type = etd.getChoice();
+        }
+        if (type != null) { // Only if the dialog was not cancelled.
+            String id = Util.createNeutralId();            
+            final BibtexEntry be = new BibtexEntry(id, type);
+            try {
+                database.insertEntry(be);
+                // Set owner/timestamp if options are enabled:
+                ArrayList<BibtexEntry> list = new ArrayList<BibtexEntry>();
+                list.add(be);                
+                Util.setAutomaticFields(list, true, true, false);
+
+                // Create an UndoableInsertEntry object.
+                undoManager.addEdit(new UndoableInsertEntry(database, be, BasePanel.this));
+                output(Globals.lang("Added new")+" '"+type.getName().toLowerCase()+"' "
+                       +Globals.lang("entry")+".");
+
+                // We are going to select the new entry. Before that, make sure that we are in
+                // show-entry mode. If we aren't already in that mode, enter the WILL_SHOW_EDITOR
+                // mode which makes sure the selection will trigger display of the entry editor
+                // and adjustment of the splitter.
+                if (mode != SHOWING_EDITOR) {
+                    mode = WILL_SHOW_EDITOR;
+                }
+
+                int row = mainTable.findEntry(be);
+                if (row >= 0)
+                    highlightEntry(be);  // Selects the entry. The selection listener will open the editor.
+                else {
+                    // The entry is not visible in the table, perhaps due to a filtering search
+                    // or group selection. Show the entry editor anyway:
+                    showEntry(be);
+                }
+
+                markBaseChanged(); // The database just changed.
+                new FocusRequester(getEntryEditor(be));              
+
+                //Add the new entry to the group(s) selected in the Group Panel
+                addToSelectedGroup(be);
+
+                // Set Self-Created entries to have a high quality
+                be.setField("quality", "1");
+                
+                return be;
+            } catch (KeyCollisionException ex) {
+                Util.pr(ex.getMessage());
+            }
+        }
+        return null;
+    }
+
+    /**
+     * This method is called to add a new entry to a group (or a set of groups)
+     * in case the Group View is selected and one or more groups are marked
+     * @param bibEntry The new entry.
+     */    
+	private void addToSelectedGroup(final BibtexEntry bibEntry) {
+		if (Globals.prefs.getBoolean("autoAssignGroup")){
+			if (frame.groupToggle.isSelected()){
+				BibtexEntry[] entries = {bibEntry};
+				TreePath[] selection = frame.groupSelector.getGroupsTree().getSelectionPaths();
+				if (selection != null) {
+					// it is possible that the user selected nothing. Therefore, checked for "!= null"
+					for (TreePath tree : selection){
+						((GroupTreeNode)(tree.getLastPathComponent())).addToGroup(entries);
+					}
+				}
+				this.updateEntryEditorIfShowing();
+				this.getGroupSelector().valueChanged(null);
+			}
+		}
+	}
+
+    /**
+     * This method is called from JabRefFrame when the user wants to
+     * create a new entry.
+     * @param bibEntry The new entry.
+     */
+    public void insertEntry(BibtexEntry bibEntry)
+    {
+      if (bibEntry != null)
+      {
+        try
+        {
+          database.insertEntry(bibEntry) ;
+          if (Globals.prefs.getBoolean("useOwner"))
+            // Set owner field to default value
+        	Util.setAutomaticFields(bibEntry, true, true);
+            // Create an UndoableInsertEntry object.
+            undoManager.addEdit(new UndoableInsertEntry(database, bibEntry, BasePanel.this));
+            output(Globals.lang("Added new")+" '"
+                   +bibEntry.getType().getName().toLowerCase()+"' "
+                   +Globals.lang("entry")+".");
+
+            markBaseChanged(); // The database just changed.
+            if (Globals.prefs.getBoolean("autoOpenForm"))
+            {
+                  selectionListener.editSignalled(bibEntry);
+            }
+            highlightEntry(bibEntry);
+        } catch (KeyCollisionException ex) { Util.pr(ex.getMessage()); }
+      }
+    }
+
+    public void updateTableFont() {
+        mainTable.updateFont();
+    }
+
+    public void createMainTable() {
+        //Comparator comp = new FieldComparator("author");
+
+        GlazedEntrySorter eventList = new GlazedEntrySorter(database.getEntryMap());
+        // Must initialize sort columns somehow:
+
+        database.addDatabaseChangeListener(eventList);
+        database.addDatabaseChangeListener(SpecialFieldDatabaseChangeListener.getInstance());
+        groupFilterList = new FilterList<BibtexEntry>(eventList.getTheList(), NoSearchMatcher.INSTANCE);
+        searchFilterList = new FilterList<BibtexEntry>(groupFilterList, NoSearchMatcher.INSTANCE);
+        //final SortedList sortedList = new SortedList(searchFilterList, null);
+        tableFormat = new MainTableFormat(this);
+        tableFormat.updateTableFormat();
+        //EventTableModel tableModel = new EventTableModel(sortedList, tableFormat);
+        mainTable = new MainTable(tableFormat, searchFilterList, frame, this);
+        
+        selectionListener = new MainTableSelectionListener(this, mainTable);
+        mainTable.updateFont();
+        mainTable.addSelectionListener(selectionListener);
+        mainTable.addMouseListener(selectionListener);
+        mainTable.addKeyListener(selectionListener);
+        mainTable.addFocusListener(selectionListener);
+        
+        // Add the listener that will take care of highlighting groups as the selection changes:
+        groupsHighlightListener = new ListEventListener<BibtexEntry>() {
+            public void listChanged(ListEvent<BibtexEntry> listEvent) {
+                if (Globals.prefs.getBoolean("highlightGroupsMatchingAny"))
+                    getGroupSelector().showMatchingGroups(
+                            mainTable.getSelectedEntries(), false);
+                else if (Globals.prefs.getBoolean("highlightGroupsMatchingAll"))
+                    getGroupSelector().showMatchingGroups(
+                            mainTable.getSelectedEntries(), true);
+                else // no highlight
+                    getGroupSelector().showMatchingGroups(null, true);
+            }
+        };
+        mainTable.addSelectionListener(groupsHighlightListener);
+
+        mainTable.getActionMap().put("cut", new AbstractAction() {
+                public void actionPerformed(ActionEvent e) {
+                    try { runCommand("cut");
+                    } catch (Throwable ex) {
+                        ex.printStackTrace();
+                    }
+                }
+            });
+        mainTable.getActionMap().put("copy", new AbstractAction() {
+                public void actionPerformed(ActionEvent e) {
+                    try { runCommand("copy");
+                    } catch (Throwable ex) {
+                        ex.printStackTrace();
+                    }
+                }
+            });
+        mainTable.getActionMap().put("paste", new AbstractAction() {
+                public void actionPerformed(ActionEvent e) {
+                    try { runCommand("paste");
+                    } catch (Throwable ex) {
+                        ex.printStackTrace();
+                    }
+                }
+            });
+
+        mainTable.addKeyListener(new KeyAdapter() {
+
+                public void keyPressed(KeyEvent e) {
+                    final int keyCode = e.getKeyCode();
+                    final TreePath path = frame.groupSelector.getSelectionPath();
+                    final GroupTreeNode node = path == null ? null : (GroupTreeNode) path.getLastPathComponent();
+
+                    if (e.isControlDown()) {
+                        switch (keyCode) {
+                        // The up/down/left/rightkeystrokes are displayed in the
+                        // GroupSelector's popup menu, so if they are to be changed,
+                        // edit GroupSelector.java accordingly!
+                        case KeyEvent.VK_UP:
+                            e.consume();
+                            if (node != null)
+                                frame.groupSelector.moveNodeUp(node, true);
+                            break;
+                        case KeyEvent.VK_DOWN:
+                            e.consume();
+                            if (node != null)
+                                frame.groupSelector.moveNodeDown(node, true);
+                            break;
+                        case KeyEvent.VK_LEFT:
+                            e.consume();
+                            if (node != null)
+                                frame.groupSelector.moveNodeLeft(node, true);
+                            break;
+                        case KeyEvent.VK_RIGHT:
+                            e.consume();
+                            if (node != null)
+                                frame.groupSelector.moveNodeRight(node, true);
+                            break;
+                        case KeyEvent.VK_PAGE_DOWN:
+                            frame.nextTab.actionPerformed(null);
+                            e.consume();
+                            break;
+                        case KeyEvent.VK_PAGE_UP:
+                            frame.prevTab.actionPerformed(null);
+                            e.consume();
+                            break;
+                        }
+                    } else if (keyCode == KeyEvent.VK_ENTER){
+                        e.consume();
+                        try { runCommand("edit");
+                        } catch (Throwable ex) {
+                            ex.printStackTrace();
+                        }
+                    }
+                }
+        });
+    }
+
+    public void setupMainPanel() {
+        //System.out.println("setupMainPanel");
+        //splitPane = new com.jgoodies.uif_lite.component.UIFSplitPane(JSplitPane.VERTICAL_SPLIT);
+        splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+        splitPane.setDividerSize(GUIGlobals.SPLIT_PANE_DIVIDER_SIZE);
+        // We replace the default FocusTraversalPolicy with a subclass
+        // that only allows FieldEditor components to gain keyboard focus,
+        // if there is an entry editor open.
+        /*splitPane.setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {
+                protected boolean accept(Component c) {
+                    Util.pr("jaa");
+                    if (showing == null)
+                        return super.accept(c);
+                    else
+                        return (super.accept(c) &&
+                                (c instanceof FieldEditor));
+                }
+                });*/
+
+        createMainTable();
+
+        for (EntryEditor ee : entryEditors.values()) {
+            ee.validateAllFields();
+        }
+
+
+
+        splitPane.setTopComponent(mainTable.getPane());
+
+        //setupTable();
+        // If an entry is currently being shown, make sure it stays shown,
+        // otherwise set the bottom component to null.
+        if (mode == SHOWING_PREVIEW) {
+            mode = SHOWING_NOTHING;
+            int row = mainTable.findEntry(currentPreview.entry);
+            if (row >= 0)
+                mainTable.setRowSelectionInterval(row, row);
+
+        }
+        else if (mode == SHOWING_EDITOR) {
+            mode = SHOWING_NOTHING;
+            /*int row = mainTable.findEntry(currentEditor.entry);
+            if (row >= 0)
+                mainTable.setRowSelectionInterval(row, row);
+            */
+            //showEntryEditor(currentEditor);
+        } else
+            splitPane.setBottomComponent(null);
+
+
+        setLayout(new BorderLayout());
+        removeAll();
+        add(splitPane, BorderLayout.CENTER);
+
+        // Set up name autocompleter for search:
+        instantiateSearchAutoCompleter();
+
+        // Set up AutoCompleters for this panel:
+        if (Globals.prefs.getBoolean("autoComplete")) {
+            instantiateAutoCompleters();
+        }
+
+        splitPane.revalidate();
+        revalidate();
+        repaint();
+    }
+
+    public void updateSearchManager() {
+        frame.getSearchManager().setAutoCompleteListener(searchCompleteListener);
+    }
+
+    public HashMap<String, AbstractAutoCompleter> getAutoCompleters() {
+        return autoCompleters;
+    }
+    
+    public AbstractAutoCompleter getAutoCompleter(String fieldName) {
+        return autoCompleters.get(fieldName);
+    }
+
+    private void instantiateSearchAutoCompleter() {
+        //if (!Globals.prefs.getBoolean("searchAutoComplete"))
+        //    return;
+        searchCompleter = new NameFieldAutoCompleter(new String[] {"author", "editor"}, true);
+        HashMap<String, AbstractAutoCompleter> hm = new HashMap<String, AbstractAutoCompleter>();
+        hm.put("x", searchCompleter);
+        for (BibtexEntry entry : database.getEntries()){
+            Util.updateCompletersForEntry(hm, entry);
+        }
+        searchCompleteListener = new AutoCompleteListener(searchCompleter);
+        searchCompleteListener.setConsumeEnterKey(false); // So you don't have to press Enter twice
+    }
+
+    private void instantiateAutoCompleters() {
+        autoCompleters.clear();
+        String[] completeFields = Globals.prefs.getStringArray("autoCompleteFields");
+        for (int i = 0; i < completeFields.length; i++) {
+            String field = completeFields[i];
+            AbstractAutoCompleter autoCompleter = AutoCompleterFactory.getFor(field);
+			autoCompleters.put(field, autoCompleter );
+        }
+        for (BibtexEntry entry : database.getEntries()){
+            Util.updateCompletersForEntry(autoCompleters, entry);
+        }
+
+        addJournalListToAutoCompleter();
+        addContentSelectorValuesToAutoCompleters();
+    }
+
+    /**
+     * For all fields with both autocompletion and content selector, add content selector
+     * values to the autocompleter list:
+     */
+    public void addContentSelectorValuesToAutoCompleters() {
+        for (String field : autoCompleters.keySet()) {
+            AbstractAutoCompleter ac = autoCompleters.get(field);
+            if (metaData.getData(Globals.SELECTOR_META_PREFIX + field) != null) {
+                Vector<String> items = metaData.getData(Globals.SELECTOR_META_PREFIX + field);
+                if (items != null) {
+                    Iterator<String> i = items.iterator();
+                    while (i.hasNext())
+                        ac.addWordToIndex(i.next());
+                }
+            }
+        }
+    }
+
+    /**
+     * If an autocompleter exists for the "journal" field, add all
+     * journal names in the journal abbreviation list to this autocompleter.
+     */
+    public void addJournalListToAutoCompleter() {
+        if (autoCompleters.containsKey("journal")) {
+            AbstractAutoCompleter ac = autoCompleters.get("journal");
+            Set<String> journals = Globals.journalAbbrev.getJournals().keySet();
+            for (String journal : journals)
+                ac.addWordToIndex(journal);
+        }
+
+
+    }
+
+
+    /*
+    public void refreshTable() {
+        //System.out.println("hiding="+hidingNonHits+"\tlastHits="+lastSearchHits);
+        // This method is called by EntryTypeForm when a field value is
+        // stored. The table is scheduled for repaint.
+        entryTable.assureNotEditing();
+        //entryTable.invalidate();
+        BibtexEntry[] bes = entryTable.getSelectedEntries();
+    if (hidingNonHits)
+        tableModel.update(lastSearchHits);
+    else
+        tableModel.update();
+    //tableModel.remap();
+        if ((bes != null) && (bes.length > 0))
+            selectEntries(bes, 0);
+
+    //long toc = System.currentTimeMillis();
+    //	Util.pr("Refresh took: "+(toc-tic)+" ms");
+    } */
+
+    public void updatePreamble() {
+        if (preambleEditor != null)
+            preambleEditor.updatePreamble();
+    }
+
+    public void assureStringDialogNotEditing() {
+        if (stringDialog != null)
+            stringDialog.assureNotEditing();
+    }
+
+    public void updateStringDialog() {
+        if (stringDialog != null)
+            stringDialog.refreshTable();
+    }
+
+    public void updateEntryPreviewToRow(BibtexEntry e) {
+
+    }
+
+    public void adjustSplitter() {
+        int mode = getMode();
+        if (mode == SHOWING_PREVIEW) {
+            splitPane.setDividerLocation(splitPane.getHeight()-Globals.prefs.getInt("previewPanelHeight"));
+        } else {
+            splitPane.setDividerLocation(splitPane.getHeight()-Globals.prefs.getInt("entryEditorHeight"));
+
+        }
+    }
+
+
+
+    /**
+     * Stores the source view in the entry editor, if one is open, has the source view
+     * selected and the source has been edited.
+     * @return boolean false if there is a validation error in the source panel, true otherwise.
+     */
+    public boolean entryEditorAllowsChange() {
+      Component c = splitPane.getBottomComponent();
+      if ((c != null) && (c instanceof EntryEditor)) {
+        return ((EntryEditor)c).lastSourceAccepted();
+      }
+      else
+        return true;
+    }
+
+    public void moveFocusToEntryEditor() {
+      Component c = splitPane.getBottomComponent();
+      if ((c != null) && (c instanceof EntryEditor)) {
+        new FocusRequester(c);
+      }
+    }
+
+    public boolean isShowingEditor() {
+      return ((splitPane.getBottomComponent() != null)
+              && (splitPane.getBottomComponent() instanceof EntryEditor));
+    }
+
+    public void showEntry(final BibtexEntry be) {
+
+        if (getShowing() == be) {
+            if (splitPane.getBottomComponent() == null) {
+                // This is the special occasion when showing is set to an
+                // entry, but no entry editor is in fact shown. This happens
+                // after Preferences dialog is closed, and it means that we
+                // must make sure the same entry is shown again. We do this by
+                // setting showing to null, and recursively calling this method.
+                newEntryShowing(null);
+                showEntry(be);
+            } else {
+              // The correct entry is already being shown. Make sure the editor
+              // is updated.
+              ((EntryEditor)splitPane.getBottomComponent()).updateAllFields();
+
+            }
+            return;
+
+        }
+
+        EntryEditor form;
+        int divLoc = -1;
+        String visName = null;
+        if (getShowing() != null) {
+        	if (isShowingEditor()) {
+        		visName = ((EntryEditor) splitPane.getBottomComponent()).getVisiblePanelName();
+        	}
+        }
+        if (getShowing() != null)
+            divLoc = splitPane.getDividerLocation();
+
+        if (entryEditors.containsKey(be.getType().getName())) {
+            // We already have an editor for this entry type.
+            form = entryEditors.get
+                ((be.getType().getName()));
+            form.switchTo(be);
+            if (visName != null)
+                form.setVisiblePanel(visName);
+            splitPane.setBottomComponent(form);
+            //highlightEntry(be);
+        } else {
+            // We must instantiate a new editor for this type.
+            form = new EntryEditor(frame, BasePanel.this, be);
+            if (visName != null)
+                form.setVisiblePanel(visName);
+            splitPane.setBottomComponent(form);
+
+            //highlightEntry(be);
+            entryEditors.put(be.getType().getName(), form);
+
+        }
+        if (divLoc > 0) {
+          splitPane.setDividerLocation(divLoc);
+        }
+        else
+            splitPane.setDividerLocation
+                (splitPane.getHeight()-Globals.prefs.getInt("entryEditorHeight"));
+        //new FocusRequester(form);
+        //form.requestFocus();
+
+        newEntryShowing(be);
+        setEntryEditorEnabled(true); // Make sure it is enabled.
+    }
+
+    /**
+     * Get an entry editor ready to edit the given entry. If an appropriate editor is already
+     * cached, it will be updated and returned.
+     * @param entry The entry to be edited.
+     * @return A suitable entry editor.
+     */
+    public EntryEditor getEntryEditor(BibtexEntry entry) {
+        EntryEditor form;
+        if (entryEditors.containsKey(entry.getType().getName())) {
+            EntryEditor visibleNow = currentEditor;
+            
+            // We already have an editor for this entry type.
+            form = entryEditors.get
+                ((entry.getType().getName()));
+
+            // If the cached editor is not the same as the currently shown one,
+            // make sure the current one stores its current edit:
+            if ((visibleNow != null) && (form != visibleNow)) {
+                visibleNow.storeCurrentEdit();
+            }
+            
+            form.switchTo(entry);
+            //if (visName != null)
+            //    form.setVisiblePanel(visName);
+        } else {
+            // We must instantiate a new editor for this type. First make sure the old one
+            // stores its last edit:
+            storeCurrentEdit();
+            // Then start the new one:
+            form = new EntryEditor(frame, BasePanel.this, entry);
+            //if (visName != null)
+            //    form.setVisiblePanel(visName);
+
+            entryEditors.put(entry.getType().getName(), form);
+        }
+        return form;
+    }
+
+    public EntryEditor getCurrentEditor() {
+        return currentEditor;
+    }
+
+    /**
+     * Sets the given entry editor as the bottom component in the split pane. If an entry editor already
+     * was shown, makes sure that the divider doesn't move.
+     * Updates the mode to SHOWING_EDITOR.
+     * @param editor The entry editor to add.
+     */
+    public void showEntryEditor(EntryEditor editor) {
+        int oldSplitterLocation = -1;
+        if (mode == SHOWING_EDITOR)
+            Globals.prefs.putInt("entryEditorHeight", splitPane.getHeight() - splitPane.getDividerLocation());
+        else if (mode == SHOWING_PREVIEW)
+            Globals.prefs.putInt("previewPanelHeight", splitPane.getHeight()-splitPane.getDividerLocation());
+        mode = SHOWING_EDITOR;
+        currentEditor = editor;
+        splitPane.setBottomComponent(editor);
+        if (editor.getEntry() != getShowing())
+            newEntryShowing(editor.getEntry());
+        adjustSplitter();
+
+    }
+
+    /**
+     * Sets the given preview panel as the bottom component in the split panel.
+     * Updates the mode to SHOWING_PREVIEW.
+     * @param preview The preview to show.
+     */
+    public void showPreview(PreviewPanel preview) {
+        mode = SHOWING_PREVIEW;
+        currentPreview = preview;
+        splitPane.setBottomComponent(preview);
+    }
+
+    /**
+     * Removes the bottom component.
+     */
+    public void hideBottomComponent() {
+        mode = SHOWING_NOTHING;
+        splitPane.setBottomComponent(null);
+    }
+
+    /**
+     * This method selects the given entry, and scrolls it into view in the table.
+     * If an entryEditor is shown, it is given focus afterwards.
+     */
+    public void highlightEntry(final BibtexEntry be) {
+        //SwingUtilities.invokeLater(new Thread() {
+        //     public void run() {
+                 final int row = mainTable.findEntry(be);
+                 if (row >= 0) {
+                    mainTable.setRowSelectionInterval(row, row);
+                    //entryTable.setActiveRow(row);
+                    mainTable.ensureVisible(row);
+                 }
+        //     }
+        //});
+    }
+
+
+    /**
+     * This method is called from an EntryEditor when it should be closed. We relay
+     * to the selection listener, which takes care of the rest.
+     * @param editor The entry editor to close.
+     */
+    public void entryEditorClosing(EntryEditor editor) {
+        // Store divider location for next time:
+        Globals.prefs.putInt("entryEditorHeight", splitPane.getHeight()-splitPane.getDividerLocation());
+        selectionListener.entryEditorClosing(editor);
+    }
+
+    /**
+     * This method selects the given enties.
+     * If an entryEditor is shown, it is given focus afterwards.
+     */
+    /*public void selectEntries(final BibtexEntry[] bes, final int toScrollTo) {
+
+        SwingUtilities.invokeLater(new Thread() {
+             public void run() {
+                 int rowToScrollTo = 0;
+                 entryTable.revalidate();
+                 entryTable.clearSelection();
+                 loop: for (int i=0; i<bes.length; i++) {
+                    if (bes[i] == null)
+                        continue loop;
+                    int row = tableModel.getNumberFromName(bes[i].getId());
+                    if (i==toScrollTo)
+                    rowToScrollTo = row;
+                    if (row >= 0)
+                        entryTable.addRowSelectionIntervalQuietly(row, row);
+                 }
+                 entryTable.ensureVisible(rowToScrollTo);
+                 Component comp = splitPane.getBottomComponent();
+                 //if (comp instanceof EntryEditor)
+                 //    comp.requestFocus();
+             }
+        });
+    } */
+
+    /**
+     * Closes the entry editor if it is showing the given entry.
+     *
+     * @param be a <code>BibtexEntry</code> value
+     */
+    public void ensureNotShowing(BibtexEntry be) {
+        if ((mode == SHOWING_EDITOR) && (currentEditor.getEntry() == be)) {
+            selectionListener.entryEditorClosing(currentEditor);
+        }
+    }
+
+    public void updateEntryEditorIfShowing() {
+        if (mode == SHOWING_EDITOR) {
+            if (currentEditor.getType() != currentEditor.getEntry().getType()) {
+                // The entry has changed type, so we must get a new editor.
+                newEntryShowing(null);
+                EntryEditor newEditor = getEntryEditor(currentEditor.getEntry());
+                showEntryEditor(newEditor);
+            } else {
+                currentEditor.updateAllFields();
+                currentEditor.updateSource();
+            }
+        }
+    }
+
+    /**
+     * If an entry editor is showing, make sure its currently focused field
+     * stores its changes, if any.
+     */
+    public void storeCurrentEdit() {
+        if (isShowingEditor()) {
+            EntryEditor editor = (EntryEditor)splitPane.getBottomComponent();
+            editor.storeCurrentEdit();
+        }
+
+    }
+
+    /**
+     * This method iterates through all existing entry editors in this
+     * BasePanel, telling each to update all its instances of
+     * FieldContentSelector. This is done to ensure that the list of words
+     * in each selector is up-to-date after the user has made changes in
+     * the Manage dialog.
+     */
+    public void updateAllContentSelectors() {
+        for (Iterator<String> i=entryEditors.keySet().iterator(); i.hasNext();) {
+            EntryEditor ed = entryEditors.get(i.next());
+            ed.updateAllContentSelectors();
+        }
+    }
+
+    public void rebuildAllEntryEditors() {
+        for (Iterator<String> i=entryEditors.keySet().iterator(); i.hasNext();) {
+            EntryEditor ed = entryEditors.get(i.next());
+            ed.rebuildPanels();
+        }
+
+    }
+
+    public void markBaseChanged() {
+        baseChanged = true;
+
+        // Put an asterix behind the file name to indicate the
+        // database has changed.
+        String oldTitle = frame.getTabTitle(this);
+        if (!oldTitle.endsWith("*")) {
+            frame.setTabTitle(this, oldTitle+"*", frame.getTabTooltip(this));
+            frame.setWindowTitle();
+        }
+        // If the status line states that the base has been saved, we
+        // remove this message, since it is no longer relevant. If a
+        // different message is shown, we leave it.
+        if (frame.statusLine.getText().startsWith(Globals.lang("Saved database")));
+            frame.output(" ");
+    }
+
+    public void markNonUndoableBaseChanged() {
+        nonUndoableChange = true;
+        markBaseChanged();
+    }
+
+    public synchronized void markChangedOrUnChanged() {
+        if (undoManager.hasChanged()) {
+            if (!baseChanged) {
+                markBaseChanged();
+            }
+        }
+        else if (baseChanged && !nonUndoableChange) {
+            baseChanged = false;
+            if (getFile() != null)
+                frame.setTabTitle(BasePanel.this, getFile().getName(),
+                        getFile().getAbsolutePath());
+            else
+                frame.setTabTitle(BasePanel.this, Globals.lang("untitled"), null);
+        }
+        frame.setWindowTitle();
+    }
+
+    /**
+     * Selects a single entry, and scrolls the table to center it.
+     *
+     * @param pos Current position of entry to select.
+     *
+     */
+    public void selectSingleEntry(int pos) {
+        mainTable.clearSelection();
+        mainTable.addRowSelectionInterval(pos, pos);
+        mainTable.scrollToCenter(pos, 0);
+    }
+
+    /* *
+     * Selects all entries with a non-zero value in the field
+     * @param field <code>String</code> field name.
+     */
+/*    public void selectResults(String field) {
+      LinkedList intervals = new LinkedList();
+      int prevStart = -1, prevToSel = 0;
+      // First we build a list of intervals to select, without touching the table.
+      for (int i = 0; i < entryTable.getRowCount(); i++) {
+        String value = (String) (database.getEntryById
+                                 (tableModel.getIdForRow(i)))
+            .getField(field);
+        if ( (value != null) && !value.equals("0")) {
+          if (prevStart < 0)
+            prevStart = i;
+          prevToSel = i;
+        }
+        else if (prevStart >= 0) {
+          intervals.add(new int[] {prevStart, prevToSel});
+          prevStart = -1;
+        }
+      }
+      // Then select those intervals, if any.
+      if (intervals.size() > 0) {
+        entryTable.setSelectionListenerEnabled(false);
+        entryTable.clearSelection();
+        for (Iterator i=intervals.iterator(); i.hasNext();) {
+          int[] interval = (int[])i.next();
+          entryTable.addRowSelectionInterval(interval[0], interval[1]);
+        }
+        entryTable.setSelectionListenerEnabled(true);
+      }
+  */
+
+    public void setSearchMatcher(SearchMatcher matcher) {
+        searchFilterList.setMatcher(matcher);
+        showingSearch = true;
+    }
+
+    public void setGroupMatcher(Matcher<BibtexEntry> matcher) {
+        groupFilterList.setMatcher(matcher);
+        showingGroup = true;
+    }
+
+    public void stopShowingSearchResults() {
+        searchFilterList.setMatcher(NoSearchMatcher.INSTANCE);
+        showingSearch = false;
+    }
+
+    public void stopShowingGroup() {
+        groupFilterList.setMatcher(NoSearchMatcher.INSTANCE);
+        showingGroup = false;
+     }
+
+    /**
+     * Query whether this BasePanel is in the mode where a float search result is shown.
+     * @return true if showing float search, false otherwise.
+     */
+    public boolean isShowingFloatSearch() {
+        return mainTable.isShowingFloatSearch();
+    }
+
+    /**
+     * Query whether this BasePanel is in the mode where a filter search result is shown.
+     * @return true if showing filter search, false otherwise.
+     */
+    public boolean isShowingFilterSearch() {
+        return showingSearch;
+    }
+
+     public BibtexDatabase getDatabase(){
+        return database ;
+    }
+
+    public void preambleEditorClosing() {
+        preambleEditor = null;
+    }
+
+    public void stringsClosing() {
+        stringDialog = null;
+    }
+
+    public void changeType(BibtexEntry entry, BibtexEntryType type) {
+      changeType(new BibtexEntry[] {entry}, type);
+    }
+
+    public void changeType(BibtexEntryType type) {
+      BibtexEntry[] bes = mainTable.getSelectedEntries();
+      changeType(bes, type);
+    }
+
+    public void changeType(BibtexEntry[] bes, BibtexEntryType type) {
+
+        if ((bes == null) || (bes.length == 0)) {
+            output("First select the entries you wish to change type "+
+                   "for.");
+            return;
+        }
+        if (bes.length > 1) {
+            int choice = JOptionPane.showConfirmDialog
+                (this, "Multiple entries selected. Do you want to change"
+                 +"\nthe type of all these to '"+type.getName()+"'?",
+                 "Change type", JOptionPane.YES_NO_OPTION,
+                 JOptionPane.WARNING_MESSAGE);
+            if (choice == JOptionPane.NO_OPTION)
+                return;
+        }
+
+        NamedCompound ce = new NamedCompound(Globals.lang("change type"));
+        for (int i=0; i<bes.length; i++) {
+            ce.addEdit(new UndoableChangeType(bes[i],
+                                              bes[i].getType(),
+                                              type));
+            bes[i].setType(type);
+        }
+
+        output(Globals.lang("Changed type to")+" '"+type.getName()+"' "
+               +Globals.lang("for")+" "+bes.length
+               +" "+Globals.lang("entries")+".");
+        ce.end();
+        undoManager.addEdit(ce);
+        markBaseChanged();
+        updateEntryEditorIfShowing();
+    }
+
+    public boolean showDeleteConfirmationDialog(int numberOfEntries) {
+        if (Globals.prefs.getBoolean("confirmDelete")) {
+            String msg = Globals.lang("Really delete the selected")
+                + " " + Globals.lang("entry") + "?",
+                title = Globals.lang("Delete entry");
+            if (numberOfEntries > 1) {
+                msg = Globals.lang("Really delete the selected")
+                    + " " + numberOfEntries + " " + Globals.lang("entries") + "?";
+                title = Globals.lang("Delete multiple entries");
+            }
+
+            CheckBoxMessage cb = new CheckBoxMessage
+                (msg, Globals.lang("Disable this confirmation dialog"), false);
+
+            int answer = JOptionPane.showConfirmDialog(frame, cb, title,
+                                                       JOptionPane.YES_NO_OPTION,
+                                                       JOptionPane.QUESTION_MESSAGE);
+            if (cb.isSelected())
+                Globals.prefs.putBoolean("confirmDelete", false);
+            return (answer == JOptionPane.YES_OPTION);
+        } else return true;
+
+    }
+    
+    /**
+     * If the relevant option is set, autogenerate keys for all entries that are
+     * lacking keys.
+     */
+    public void autoGenerateKeysBeforeSaving() {
+        if (Globals.prefs.getBoolean("generateKeysBeforeSaving")) {
+            NamedCompound ce = new NamedCompound(Globals.lang("autogenerate keys"));
+            boolean any = false;
+            
+            for (BibtexEntry bes : database.getEntries()){
+                String oldKey = bes.getCiteKey();
+                if ((oldKey == null) || (oldKey.equals(""))) {
+                    LabelPatternUtil.makeLabel(metaData, database, bes);
+                    ce.addEdit(new UndoableKeyChange(database, bes.getId(), null,
+                        bes.getField(BibtexFields.KEY_FIELD)));
+                    any = true;
+                }
+            }
+            // Store undo information, if any:
+            if (any) {
+                ce.end();
+                undoManager.addEdit(ce);
+            }
+        }
+    }
+    
+    /**
+     * Activates or deactivates the entry preview, depending on the argument.
+     * When deactivating, makes sure that any visible preview is hidden.
+     * @param enabled
+     */
+    public void setPreviewActive(boolean enabled) {
+        selectionListener.setPreviewActive(enabled);
+    }
+
+    public void setSelectionListenerEnabled(boolean enabled) {
+        selectionListener.setEnabled(enabled);
+    }
+
+    /**
+     * Depending on whether a preview or an entry editor is showing, save the current
+     * divider location in the correct preference setting.
+     */
+    public void saveDividerLocation() {
+        if (mode == SHOWING_PREVIEW)
+            Globals.prefs.putInt("previewPanelHeight", splitPane.getHeight()-splitPane.getDividerLocation());
+        else if (mode == SHOWING_EDITOR)
+            Globals.prefs.putInt("entryEditorHeight", splitPane.getHeight()-splitPane.getDividerLocation());
+    }
+
+	class UndoAction extends BaseAction {
+        public void action() {
+            try {
+                JComponent focused = Globals.focusListener.getFocused();
+                if ((focused != null) && (focused instanceof FieldEditor) && (focused.hasFocus())) {
+                    // User is currently editing a field:
+                    // Check if it is the preamble:
+                    if ((preambleEditor != null) && (focused == preambleEditor.getFieldEditor())) {
+                        preambleEditor.storeCurrentEdit();
+                    }
+                    else
+                        storeCurrentEdit();
+                }
+                String name = undoManager.getUndoPresentationName();
+                undoManager.undo();
+                markBaseChanged();
+                frame.output(name);
+            } catch (CannotUndoException ex) {
+                ex.printStackTrace();
+                frame.output(Globals.lang("Nothing to undo")+".");
+            }
+            // After everything, enable/disable the undo/redo actions
+            // appropriately.
+            //updateUndoState();
+            //redoAction.updateRedoState();
+            markChangedOrUnChanged();
+        }
+    }
+
+    class RedoAction extends BaseAction {
+
+        public void action() {
+            try {
+
+                JComponent focused = Globals.focusListener.getFocused();
+                if ((focused != null) && (focused instanceof FieldEditor) && (focused.hasFocus())) {
+                    // User is currently editing a field:
+                    storeCurrentEdit();
+                }
+
+                String name = undoManager.getRedoPresentationName();
+                undoManager.redo();
+                markBaseChanged();
+                frame.output(name);
+            } catch (CannotRedoException ex) {
+                frame.output(Globals.lang("Nothing to redo")+".");
+            }
+            // After everything, enable/disable the undo/redo actions
+            // appropriately.
+            //updateRedoState();
+            //undoAction.updateUndoState();
+            markChangedOrUnChanged();
+        }
+    }
+
+    // Method pertaining to the ClipboardOwner interface.
+    public void lostOwnership(Clipboard clipboard, Transferable contents) {}
+
+
+  public void setEntryEditorEnabled(boolean enabled) {
+    if ((getShowing() != null) && (splitPane.getBottomComponent() instanceof EntryEditor)) {
+          EntryEditor ed = (EntryEditor)splitPane.getBottomComponent();
+          if (ed.isEnabled() != enabled)
+            ed.setEnabled(enabled);
+    }
+  }
+
+  public String fileMonitorHandle() { return fileMonitorHandle; }
+
+    public void fileUpdated() {
+      if (saving)
+        return; // We are just saving the file, so this message is most likely due
+      //if (updatedExternally) {
+      //  return;
+      //}
+      // to bad timing. If not, we'll handle it on the next polling.
+      //Util.pr("File '"+file.getPath()+"' has been modified.");
+      updatedExternally = true;
+
+      final ChangeScanner scanner = new ChangeScanner(frame, BasePanel.this);
+
+      // Adding the sidepane component is Swing work, so we must do this in the Swing
+      // thread:
+      Thread t = new Thread() {
+	      public void run() {
+		  
+		  // Check if there is already a notification about external
+		  // changes:
+		  boolean hasAlready = sidePaneManager.hasComponent(FileUpdatePanel.NAME);
+		  if (hasAlready) {
+		      sidePaneManager.hideComponent(FileUpdatePanel.NAME);
+		      sidePaneManager.unregisterComponent(FileUpdatePanel.NAME);
+		  }
+		  FileUpdatePanel pan = new FileUpdatePanel(frame, BasePanel.this,
+							    sidePaneManager, getFile(), scanner);
+		  sidePaneManager.register(FileUpdatePanel.NAME, pan);
+		  sidePaneManager.show(FileUpdatePanel.NAME);
+		  //setUpdatedExternally(false);
+		  //scanner.displayResult();
+	      }
+	  };
+
+      // Test: running scan automatically in background
+      if ((BasePanel.this.getFile() != null) &&
+              !Util.waitForFileLock(BasePanel.this.getFile(), 10)) {
+          // The file is locked even after the maximum wait. Do nothing.
+          System.err.println("File updated externally, but change scan failed because the file is locked.");
+          // Perturb the stored timestamp so successive checks are made:
+          Globals.fileUpdateMonitor.perturbTimestamp(getFileMonitorHandle());
+          return;
+      }
+
+      scanner.changeScan(BasePanel.this.getFile());
+      try {
+	  scanner.join();
+      } catch (InterruptedException e) {
+	  e.printStackTrace();
+      }
+
+      if (scanner.changesFound()) {
+	  SwingUtilities.invokeLater(t);
+      } else {
+	  setUpdatedExternally(false);
+	  //System.out.println("No changes found.");
+      }
+    }
+
+      public void fileRemoved() {
+        Util.pr("File '"+getFile().getPath()+"' has been deleted.");
+      }
+
+
+    /**
+     * Perform necessary cleanup when this BasePanel is closed.
+     */
+    public void cleanUp() {
+        if (fileMonitorHandle != null)
+            Globals.fileUpdateMonitor.removeUpdateListener(fileMonitorHandle);
+        // Check if there is a FileUpdatePanel for this BasePanel being shown. If so,
+        // remove it:
+        if (sidePaneManager.hasComponent("fileUpdate")) {
+            FileUpdatePanel fup = (FileUpdatePanel)sidePaneManager.getComponent("fileUpdate");
+            if (fup.getPanel() == this) {
+                sidePaneManager.hideComponent("fileUpdate");
+            }
+        }
+    }
+
+  public void setUpdatedExternally(boolean b) {
+    updatedExternally = b;
+  }
+
+    /**
+     * Get an array containing the currently selected entries.
+     *
+     * @return An array containing the selected entries.
+     */
+    public BibtexEntry[] getSelectedEntries() {
+        return mainTable.getSelectedEntries();
+    }
+
+    /**
+     * Get the file where this database was last saved to or loaded from, if any.
+     *
+     * @return The relevant File, or null if none is defined.
+     */
+    public File getFile() {
+        return metaData.getFile();
+    }
+    
+    /**
+     * Get a String containing a comma-separated list of the bibtex keys
+     * of the selected entries.
+     *
+     * @return A comma-separated list of the keys of the selected entries.
+     */
+    public String getKeysForSelection() {
+        StringBuffer result = new StringBuffer();
+        String citeKey = "";//, message = "";
+        boolean first = true;
+        for (BibtexEntry bes : mainTable.getSelected()){
+            citeKey = bes.getField(BibtexFields.KEY_FIELD);
+            // if the key is empty we give a warning and ignore this entry
+            if (citeKey == null || citeKey.equals(""))
+                continue;
+            if (first) {
+                result.append(citeKey);
+                first = false;
+            } else {
+                result.append(",").append(citeKey);
+            }
+        }
+        return result.toString();
+    }
+
+    public GroupSelector getGroupSelector() {
+        return frame.groupSelector;
+    }
+
+
+    public boolean isUpdatedExternally() {
+        return updatedExternally;
+    }
+
+
+    public String getFileMonitorHandle() {
+        return fileMonitorHandle;
+    }
+
+
+    public void setFileMonitorHandle(String fileMonitorHandle) {
+        this.fileMonitorHandle = fileMonitorHandle;
+    }
+
+    public SidePaneManager getSidePaneManager() {
+        return sidePaneManager;
+    }
+
+
+    public void setNonUndoableChange(boolean nonUndoableChange) {
+        this.nonUndoableChange = nonUndoableChange;
+    }
+
+    public void setBaseChanged(boolean baseChanged) {
+        this.baseChanged = baseChanged;
+    }
+
+
+    public void setSaving(boolean saving) {
+        this.saving = saving;
+    }
+
+    public boolean isSaving() {
+        return saving;
+    }
+
+    public BibtexEntry getShowing() {
+        return showing;
+    }
+
+    /**
+     * Update the pointer to the currently shown entry in all cases where the user has
+     * moved to a new entry, except when using Back and Forward commands. Also updates
+     * history for Back command, and clears history for Forward command.
+     * @param entry The entry that is now to be shown.
+     */
+    public void newEntryShowing(BibtexEntry entry) {
+        // If this call is the result of a Back or Forward operation, we must take
+        // care not to make any history changes, since the necessary changes will
+        // already have been done in the back() or forward() method:
+        if (backOrForwardInProgress) {
+            showing = entry;
+            backOrForwardInProgress = false;
+            setBackAndForwardEnabledState();
+            return;
+        }
+        nextEntries.clear();
+        if (entry != showing) {
+            // Add the entry we are leaving to the history:
+            if (showing != null) {
+                previousEntries.add(showing);
+                if (previousEntries.size() > GUIGlobals.MAX_BACK_HISTORY_SIZE)
+                    previousEntries.remove(0);
+            }
+            showing = entry;
+            setBackAndForwardEnabledState();
+        }
+        
+    }
+
+    /**
+     * Go back (if there is any recorded history) and update the histories for
+     * the Back and Forward commands.
+     */
+    private void back() {
+        if (previousEntries.size() > 0) {
+            BibtexEntry toShow = previousEntries.get(previousEntries.size()-1);
+            previousEntries.remove(previousEntries.size()-1);
+            // Add the entry we are going back from to the Forward history:
+            if (showing != null)
+                nextEntries.add(showing);
+            backOrForwardInProgress = true; // to avoid the history getting updated erroneously
+            //showEntry(toShow);
+            highlightEntry(toShow);
+        }
+    }
+
+    private void forward() {
+        if (nextEntries.size() > 0) {
+            BibtexEntry toShow = nextEntries.get(nextEntries.size()-1);
+            nextEntries.remove(nextEntries.size()-1);
+            // Add the entry we are going forward from to the Back history:
+            if (showing != null)
+                previousEntries.add(showing);
+            backOrForwardInProgress = true; // to avoid the history getting updated erroneously
+            //showEntry(toShow);
+            highlightEntry(toShow);
+        }
+    }
+
+    public void setBackAndForwardEnabledState() {
+        frame.back.setEnabled(previousEntries.size() > 0);
+        frame.forward.setEnabled(nextEntries.size() > 0);
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/BibLatexEntryTypes.java b/src/java/net/sf/jabref/BibLatexEntryTypes.java
index 6710da0..ec05d60 100644
--- a/src/java/net/sf/jabref/BibLatexEntryTypes.java
+++ b/src/java/net/sf/jabref/BibLatexEntryTypes.java
@@ -1,860 +1,860 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-/**
- * This class defines entry types for BibLatex support.
- */
-public class BibLatexEntryTypes {
-
-    /*
-        "rare" fields?
-            "annotator", "commentator", "titleaddon", "editora", "editorb", "editorc",
-            "issuetitle", "issuesubtitle", "origlanguage", "version", "addendum"
-
-     */
-
-    public static final BibtexEntryType ARTICLE = new BibtexEntryType() {
-        public String getName() {
-            return "Article";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"author", "title", "journaltitle", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"translator", "annotator", "commentator", "subtitle", "titleaddon",
-				 "editor", "editora", "editorb", "editorc", "journalsubtitle", "issuetitle",
-				 "issuesubtitle", "language", "origlanguage", "series", "volume", "number",
-				 "eid", "issue", "date", "month", "year", "pages", "version", "note", "issn",
-				 "addendum", "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url",
-				 "urldate"};
-        }
-
-        // TODO: number vs issue?
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "editor", "series", "volume", "number",
-				 "eid", "issue", "date", "month", "year", "pages", "note", "issn",
-				 "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
-        }
-
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType BOOK = new BibtexEntryType() {
-        public String getName() {
-            return "Book";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"author", "title", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"editor", "editora", "editorb", "editorc", "translator",
-				 "annotator", "commentator", "introduction",
-				 "foreword", "afterword", "subtitle", "titleaddon", "maintitle", "mainsubtitle",
-				 "maintitleaddon", "language", "origlanguage", "volume", "part",
-				 "edition", "volumes", "series", "number", "note", "publisher",
-				 "location", "isbn", "chapter", "pages", "pagetotal", "addendum", "pubstate",
-				 "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
-        }
-
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"editor", "subtitle", "titleaddon", "maintitle", "mainsubtitle",
-				 "maintitleaddon", "volume", "edition", "publisher", "isbn", "chapter", "pages",
-				 "pagetotal", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
-        }
-
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType INBOOK = new BibtexEntryType() {
-        public String getName() {
-            return "Inbook";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"author", "title", "booktitle", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"bookauthor", "editor", "editora", "editorb", "editorc",
-				 "translator", "annotator", "commentator", "introduction", "foreword", "afterword",
-				 "subtitle", "titleaddon", "maintitle", "mainsubtitle", "maintitleaddon",
-				 "booksubtitle", "booktitleaddon", "language", "origlanguage", "volume", "part",
-				 "edition", "volumes", "series", "number", "note", "publisher", "location", "isbn",
-				 "chapter", "pages", "addendum", "pubstate", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-        }
-
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"bookauthor", "editor", "subtitle", "titleaddon", "maintitle",
-				 "mainsubtitle", "maintitleaddon", "booksubtitle", "booktitleaddon", "volume",
-				 "edition", "publisher", "isbn", "chapter", "pages", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-        }
-
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType BOOKINBOOK = new BibtexEntryType() {
-        public String getName() {
-            return "Bookinbook";
-        }
-	// Same fields as "INBOOK" according to Biblatex 1.0: 
-        public String[] getRequiredFields() {
-	    return BibLatexEntryTypes.INBOOK.getRequiredFields();
-        }
-        public String[] getOptionalFields() {
-	    return BibLatexEntryTypes.INBOOK.getOptionalFields();
-        }
-
-        public String[] getPrimaryOptionalFields() {
-	    return BibLatexEntryTypes.INBOOK.getPrimaryOptionalFields();
-        }
-
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType SUPPBOOK = new BibtexEntryType() {
-        public String getName() {
-            return "Suppbook";
-        }
-	// Same fields as "INBOOK" according to Biblatex 1.0: 
-        public String[] getRequiredFields() {
-	    return BibLatexEntryTypes.INBOOK.getRequiredFields();
-        }
-        public String[] getOptionalFields() {
-	    return BibLatexEntryTypes.INBOOK.getOptionalFields();
-        }
-
-        public String[] getPrimaryOptionalFields() {
-	    return BibLatexEntryTypes.INBOOK.getPrimaryOptionalFields();
-        }
-
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType BOOKLET = new BibtexEntryType() {
-        public String getName() {
-            return "Booklet";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"author", "editor", "title", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "language", "howpublished", "type", "note",
-				 "location", "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint",
-				 "eprintclass", "eprinttype", "url", "urldate"};
-        }
-
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "howpublished", "chapter", "pages", "doi", "eprint",
-				 "eprintclass", "eprinttype", "url", "urldate"};
-        }
-
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType COLLECTION = new BibtexEntryType() {
-	public String getName() {
-	    return "Collection";
-	}
-	public String[] getRequiredFields() {
-	    return new String[] {"editor", "title", "year", "date"};
-	}
-	public String[] getOptionalFields() {
-	    return new String[] {"editora", "editorb", "editorc", "translator", "annotator", 
-				 "commentator", "introduction", "foreword", "afterword", "subtitle", "titleaddon",
-				 "maintitle", "mainsubtitle", "maintitleaddon", "language", "origlanguage", "volume",
-				 "part", "edition", "volumes", "series", "number", "note", "publisher", "location", "isbn",
-				 "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-	}
-     
-	public String[] getPrimaryOptionalFields() {
-	    return new String[] {"translator", "subtitle", "titleaddon", "maintitle",
-				 "mainsubtitle", "maintitleaddon", "volume",
-				 "edition", "publisher", "isbn", "chapter", "pages", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-	}
-     
-	public String describeRequiredFields() {
-	    return "";
-	}
-	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-	    return entry.allFieldsPresent(getRequiredFields(), database);
-	}
-    };
-
-    public static final BibtexEntryType INCOLLECTION = new BibtexEntryType() {
-	public String getName() {
-	    return "Incollection";
-	}
-	public String[] getRequiredFields() {
-	    return new String[] {"author", "editor", "title", "booktitle", "year", "date"};
-	}
-	public String[] getOptionalFields() {
-	    return new String[] {"editora", "editorb", "editorc", "translator", "annotator",
-				 "commentator", "introduction", "foreword", "afterword", "subtitle", "titleaddon",
-				 "maintitle", "mainsubtitle", "maintitleaddon", "booksubtitle", "booktitleaddon",
-				 "language", "origlanguage", "volume", "part", "edition", "volumes", "series", "number",
-				 "note", "publisher", "location", "isbn", "chapter", "pages", "addendum", "pubstate", "doi",
-				 "eprint", "eprintclass", "eprinttype", "url", "urldate"};
-	}
-     
-	public String[] getPrimaryOptionalFields() {
-	    return new String[] {"translator", "subtitle", "titleaddon", "maintitle",
-				 "mainsubtitle", "maintitleaddon", "booksubtitle", "booktitleaddon", "volume",
-				 "edition", "publisher", "isbn", "chapter", "pages", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-	}
-     
-	public String describeRequiredFields() {
-	    return "";
-	}
-	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-	    return entry.allFieldsPresent(getRequiredFields(), database);
-	}
-    };
-
-    public static final BibtexEntryType SUPPCOLLECTION = new BibtexEntryType() {
-	public String getName() {
-	    return "Suppcollection";
-	}
-	// Treated as alias of "INCOLLECTION" according to Biblatex 1.0: 
-        public String[] getRequiredFields() {
-	    return BibLatexEntryTypes.INCOLLECTION.getRequiredFields();
-        }
-        public String[] getOptionalFields() {
-	    return BibLatexEntryTypes.INCOLLECTION.getOptionalFields();
-        }
-
-        public String[] getPrimaryOptionalFields() {
-	    return BibLatexEntryTypes.INCOLLECTION.getPrimaryOptionalFields();
-        }
-     
-	public String describeRequiredFields() {
-	    return "";
-	}
-	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-	    return entry.allFieldsPresent(getRequiredFields(), database);
-	}
-    };
-
-    public static final BibtexEntryType MANUAL = new BibtexEntryType() {
-        public String getName() {
-            return "Manual";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"author", "editor", "title", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "language", "edition", "type", "series",
-				 "number", "version", "note", "organization", "publisher", "location", "isbn", "chapter",
-				 "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "edition", "publisher", "isbn", "chapter",
-				 "pages", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType MISC = new BibtexEntryType() {
-        public String getName() {
-            return "Misc";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"author", "editor", "title", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "language", "howpublished", "type",
-				 "version", "note", "organization", "location", "date", "month", "year", "addendum",
-				 "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "howpublished", "location", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType ONLINE = new BibtexEntryType() {
-        public String getName() {
-            return "Online";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"author", "editor", "title", "year", "date", "url"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "language", "version", "note",
-				 "organization", "date", "month", "year", "addendum", "pubstate", "urldate"};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "note", "organization", "urldate"};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType PATENT = new BibtexEntryType() {
-        public String getName() {
-            return "Patent";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"author", "title", "number", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"holder", "subtitle", "titleaddon", "type", "version", "location", "note",
-				 "date", "month", "year", "addendum", "pubstate", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"holder", "subtitle", "titleaddon", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType PERIODICAL = new BibtexEntryType() {
-        public String getName() {
-            return "Periodical";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"editor", "title", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"editora", "editorb", "editorc", "subtitle", "issuetitle",
-				 "issuesubtitle", "language", "series", "volume", "number", "issue", "date", "month", "year",
-				 "note", "issn", "addendum", "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url",
-				 "urldate"};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "issuetitle", "issuesubtitle", "issn", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType SUPPPERIODICAL = new BibtexEntryType() {
-	public String getName() {
-	    return "Suppperiodical";
-	}
-	// Treated as alias of "ARTICLE" according to Biblatex 1.0: 
-        public String[] getRequiredFields() {
-	    return BibLatexEntryTypes.ARTICLE.getRequiredFields();
-        }
-        public String[] getOptionalFields() {
-	    return BibLatexEntryTypes.ARTICLE.getOptionalFields();
-        }
-
-        public String[] getPrimaryOptionalFields() {	
-	    return BibLatexEntryTypes.ARTICLE.getPrimaryOptionalFields();
-        }
-     
-	public String describeRequiredFields() {
-	    return "";
-	}
-	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-	    return entry.allFieldsPresent(getRequiredFields(), database);
-	}
-    };
-
-    public static final BibtexEntryType PROCEEDINGS = new BibtexEntryType() {
-        public String getName() {
-            return "Proceedings";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"editor", "title", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "maintitle", "mainsubtitle",
-				 "maintitleaddon", "eventtitle", "eventdate", "venue", "language", "volume", "part",
-				 "volumes", "series", "number", "note", "organization", "publisher", "location", "month",
-				 "isbn", "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint",
-				 "eprintclass", "eprinttype", "url", "urldate"};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "maintitle", "mainsubtitle",
-				 "maintitleaddon", "eventtitle", "volume", "publisher", "isbn", "chapter", "pages",
-				 "pagetotal", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType INPROCEEDINGS = new BibtexEntryType() {
-        public String getName() {
-            return "Inproceedings";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"author", "editor", "title", "booktitle", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "maintitle", "mainsubtitle",
-				 "maintitleaddon", "booksubtitle", "booktitleaddon", "eventtitle", "eventdate", "venue",
-				 "language", "volume", "part", "volumes", "series", "number", "note", "organization",
-				 "publisher", "location", "month", "isbn", "chapter", "pages", "addendum",
-				 "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "maintitle", "mainsubtitle",
-				 "maintitleaddon", "booksubtitle", "booktitleaddon", "eventtitle", "volume",
-				 "publisher", "isbn", "chapter", "pages",
-				 "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType REFERENCE = new BibtexEntryType() {
-	public String getName() {
-	    return "Reference";
-	}
-	// Treated as alias of "COLLECTION" according to Biblatex 1.0: 
-        public String[] getRequiredFields() {
-	    return BibLatexEntryTypes.COLLECTION.getRequiredFields();
-        }
-        public String[] getOptionalFields() {
-	    return BibLatexEntryTypes.COLLECTION.getOptionalFields();
-        }
-
-        public String[] getPrimaryOptionalFields() {	
-	    return BibLatexEntryTypes.COLLECTION.getPrimaryOptionalFields();
-        }
-     
-	public String describeRequiredFields() {
-	    return "";
-	}
-	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-	    return entry.allFieldsPresent(getRequiredFields(), database);
-	}
-    };
-
-    public static final BibtexEntryType INREFERENCE = new BibtexEntryType() {
-	public String getName() {
-	    return "Inreference";
-	}
-	// Treated as alias of "INCOLLECTION" according to Biblatex 1.0: 
-        public String[] getRequiredFields() {
-	    return BibLatexEntryTypes.INCOLLECTION.getRequiredFields();
-        }
-        public String[] getOptionalFields() {
-	    return BibLatexEntryTypes.INCOLLECTION.getOptionalFields();
-        }
-
-        public String[] getPrimaryOptionalFields() {	
-	    return BibLatexEntryTypes.INCOLLECTION.getPrimaryOptionalFields();
-        }
-     
-	public String describeRequiredFields() {
-	    return "";
-	}
-	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-	    return entry.allFieldsPresent(getRequiredFields(), database);
-	}
-    };
-
-    public static final BibtexEntryType REPORT = new BibtexEntryType() {
-        public String getName() {
-            return "Report";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"author", "title", "type", "institution", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "language", "number", "version", "note",
-				 "location", "month", "isrn", "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi",
-				 "eprint", "eprintclass", "eprinttype", "url", "urldate"};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "number", "isrn", "chapter", "pages", "pagetotal", "doi",
-				 "eprint", "eprintclass", "eprinttype", "url", "urldate"};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType SET = new BibtexEntryType() {
-        public String getName() {
-            return "Set";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"entryset", "crossref"};
-        }
-	// These are all the standard entry fields, custom fields and field aliases not included:
-	/* Optional fields left out since they take up too much space - I think the set type is mainly supposed
-	   to fall back on content from the entries contained in the set, so only the required fields are included.*/
-        public String[] getOptionalFields() {
-	    return null;
-            /*return new String[] {"abstract", "addendum", "afterword", "annotation", "annotator", "author", "authortype",
-				 "bookauthor", "bookpagination", "booksubtitle", "booktitle", "booktitleaddon",
-				 "chapter", "commentator", "date", "doi", "edition", "editor", "editora", "editorb",
-				 "editorc", "editortype", "editoratype", "editorbtype", "editorctype", "eid", "eprint",
-				 "eprintclass", "eprinttype", "eventdate", "eventtitle", "file", "foreword", "holder",
-				 "howpublished", "indextitle", "insitution", "introduction", "isan", "isbn", "ismn",
-				 "isrn", "issn", "issue", "issuesubtitle", "issuetitle", "iswc", "journalsubtitle",
-				 "journaltitle", "label", "language", "library", "location", "mainsubtitle",
-				 "maintitle", "maintitleaddon", "month", "nameaddon", "note", "number", "organization",
-				 "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "pages",
-				 "pagetotal", "pagination", "part", "publisher", "pubstate", "reprinttitle", "series",
-				 "shortauthor", "shorteditor", "shorthand", "shorthandintro", "shortjournal",
-				 "shortseries", "shorttitle", "subtitle", "title", "titleaddon", "translator", "type",
-				 "url", "urldate", "venue", "version", "volume", "volumes", "year", "crossref",
-				 "entryset", "entrysubtype", "execute", "gender", "hyphenation", "indexsorttitle",
-				 "keywords", "options", "presort", "sortkey", "sortname", "sorttitle", "sortyear",
-				 "xref"};*/
-        }
-	// These are just appr. the first half of the above fields:
-        public String[] getPrimaryOptionalFields() {
-	    return null;
-            /*return new String[] {"abstract", "addendum", "afterword", "annotation", "annotator", "author", "authortype",
-				 "bookauthor", "bookpagination", "booksubtitle", "booktitle", "booktitleaddon",
-				 "chapter", "commentator", "date", "doi", "edition", "editor", "editora", "editorb",
-				 "editorc", "editortype", "editoratype", "editorbtype", "editorctype", "eid", "eprint",
-				 "eprintclass", "eprinttype", "eventdate", "eventtitle", "file", "foreword", "holder",
-				 "howpublished", "indextitle", "insitution", "introduction", "isan", "isbn", "ismn",
-				 "isrn", "issn", "issue", "issuesubtitle", "issuetitle", "iswc", "journalsubtitle",
-				 "journaltitle", "label", "language", "library", "location", "mainsubtitle",
-				 "maintitle", "maintitleaddon", "month", "nameaddon"};*/
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType THESIS = new BibtexEntryType() {
-        public String getName() {
-            return "Thesis";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"author", "title", "type", "institution", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "language", "note", "location", "month",
-				 "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "chapter", "pages", "pagetotal", "doi", "eprint",
-				 "eprintclass", "eprinttype", "url", "urldate"};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType UNPUBLISHED = new BibtexEntryType() {
-        public String getName() {
-            return "Unpublished";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {"author", "title", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "language", "howpublished", "note",
-				 "location", "date", "month", "year", "addendum", "pubstate", "url", "urldate"};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "howpublished", "pubstate", "url", "urldate"};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    // === Type aliases: ===
-
-    public static final BibtexEntryType CONFERENCE = new BibtexEntryType() {
-	public String getName() {
-	    return "Conference";
-	}
-	// Treated as alias of "INPROCEEDINGS" according to Biblatex 1.0: 
-        public String[] getRequiredFields() {
-	    return BibLatexEntryTypes.INPROCEEDINGS.getRequiredFields();
-        }
-        public String[] getOptionalFields() {
-	    return BibLatexEntryTypes.INPROCEEDINGS.getOptionalFields();
-        }
-
-        public String[] getPrimaryOptionalFields() {	
-	    return BibLatexEntryTypes.INPROCEEDINGS.getPrimaryOptionalFields();
-        }
-     
-	public String describeRequiredFields() {
-	    return "";
-	}
-	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-	    return entry.allFieldsPresent(getRequiredFields(), database);
-	}
-    };
-
-    public static final BibtexEntryType ELECTRONIC = new BibtexEntryType() {
-	public String getName() {
-	    return "Electronic";
-	}
-	// Treated as alias of "ONLINE" according to Biblatex 1.0: 
-        public String[] getRequiredFields() {
-	    return BibLatexEntryTypes.ONLINE.getRequiredFields();
-        }
-        public String[] getOptionalFields() {
-	    return BibLatexEntryTypes.ONLINE.getOptionalFields();
-        }
-
-        public String[] getPrimaryOptionalFields() {	
-	    return BibLatexEntryTypes.ONLINE.getPrimaryOptionalFields();
-        }
-     
-	public String describeRequiredFields() {
-	    return "";
-	}
-	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-	    return entry.allFieldsPresent(getRequiredFields(), database);
-	}
-    };
-
-    public static final BibtexEntryType MASTERSTHESIS = new BibtexEntryType() {
-        public String getName() {
-            return "Mastersthesis";
-        }
-	// Treated as alias of "THESIS", except "type" field is optional
-        public String[] getRequiredFields() {
-            return new String[] {"author", "title", "institution", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "type", "language", "note", "location", "month",
-				 "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "type", "chapter", "pages", "pagetotal", "doi", "eprint",
-				 "eprintclass", "eprinttype", "url", "urldate"};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType PHDTHESIS = new BibtexEntryType() {
-        public String getName() {
-            return "Phdthesis";
-        }
-	// Treated as alias of "THESIS", except "type" field is optional
-        public String[] getRequiredFields() {
-            return new String[] {"author", "title", "institution", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "type", "language", "note", "location", "month",
-				 "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass",
-				 "eprinttype", "url", "urldate"};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "type", "chapter", "pages", "pagetotal", "doi", "eprint",
-				 "eprintclass", "eprinttype", "url", "urldate"};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType TECHREPORT = new BibtexEntryType() {
-        public String getName() {
-            return "Techreport";
-        }
-	// Treated as alias of "REPORT", except "type" field is optional
-        public String[] getRequiredFields() {
-            return new String[] {"author", "title", "institution", "year", "date"};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "type", "language", "number", "version", "note",
-				 "location", "month", "isrn", "chapter", "pages", "pagetotal", "addendum", "pubstate",
-				 "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {"subtitle", "titleaddon", "type", "number", "isrn", "chapter", "pages", "pagetotal",
-				 "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };
-
-    public static final BibtexEntryType WWW = new BibtexEntryType() {
-	public String getName() {
-	    return "Www";
-	}
-	// Treated as alias of "ONLINE" according to Biblatex 1.0: 
-        public String[] getRequiredFields() {
-	    return BibLatexEntryTypes.ONLINE.getRequiredFields();
-        }
-        public String[] getOptionalFields() {
-	    return BibLatexEntryTypes.ONLINE.getOptionalFields();
-        }
-
-        public String[] getPrimaryOptionalFields() {	
-	    return BibLatexEntryTypes.ONLINE.getPrimaryOptionalFields();
-        }
-     
-	public String describeRequiredFields() {
-	    return "";
-	}
-	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-	    return entry.allFieldsPresent(getRequiredFields(), database);
-	}
-    };
-
-       /**
-     * This type is used for IEEEtran.bst to control various 
-     * be repeated or not. Not a very elegant solution, but it works...
-     */
-    public static final BibtexEntryType IEEETRANBSTCTL = new BibtexEntryType() {
-            public String getName()
-            {
-                return "IEEEtranBSTCTL";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[] {
-                "ctluse_article_number", "ctluse_paper", "ctluse_forced_etal",
-                "ctlmax_names_forced_etal", "ctlnames_show_etal", "ctluse_alt_spacing",
-                "ctlalt_stretch_factor", "ctldash_repeated_names", "ctlname_format_string",
-                "ctlname_latex_cmd", "ctlname_url_prefix"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return null;
-            }
-
-            public String describeRequiredFields()
-            {
-                return "None";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-		return true;
-           }
-        };
-
-    // Unsupported types and custom types left out
-
-    /*public static final BibtexEntryType ARTICLE = new BibtexEntryType() {
-        public String getName() {
-            return "Article";
-        }
-        public String[] getRequiredFields() {
-            return new String[] {};
-        }
-        public String[] getOptionalFields() {
-            return new String[] {};
-        }
-        public String[] getPrimaryOptionalFields() {
-            return new String[] {};
-        }
-        public String describeRequiredFields() {
-            return "";
-        }
-        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-            return entry.allFieldsPresent(getRequiredFields(), database);
-        }
-    };*/
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+/**
+ * This class defines entry types for BibLatex support.
+ */
+public class BibLatexEntryTypes {
+
+    /*
+        "rare" fields?
+            "annotator", "commentator", "titleaddon", "editora", "editorb", "editorc",
+            "issuetitle", "issuesubtitle", "origlanguage", "version", "addendum"
+
+     */
+
+    public static final BibtexEntryType ARTICLE = new BibtexEntryType() {
+        public String getName() {
+            return "Article";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"author", "title", "journaltitle", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"translator", "annotator", "commentator", "subtitle", "titleaddon",
+				 "editor", "editora", "editorb", "editorc", "journalsubtitle", "issuetitle",
+				 "issuesubtitle", "language", "origlanguage", "series", "volume", "number",
+				 "eid", "issue", "date", "month", "year", "pages", "version", "note", "issn",
+				 "addendum", "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url",
+				 "urldate"};
+        }
+
+        // TODO: number vs issue?
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "editor", "series", "volume", "number",
+				 "eid", "issue", "date", "month", "year", "pages", "note", "issn",
+				 "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
+        }
+
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType BOOK = new BibtexEntryType() {
+        public String getName() {
+            return "Book";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"author", "title", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"editor", "editora", "editorb", "editorc", "translator",
+				 "annotator", "commentator", "introduction",
+				 "foreword", "afterword", "subtitle", "titleaddon", "maintitle", "mainsubtitle",
+				 "maintitleaddon", "language", "origlanguage", "volume", "part",
+				 "edition", "volumes", "series", "number", "note", "publisher",
+				 "location", "isbn", "chapter", "pages", "pagetotal", "addendum", "pubstate",
+				 "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
+        }
+
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"editor", "subtitle", "titleaddon", "maintitle", "mainsubtitle",
+				 "maintitleaddon", "volume", "edition", "publisher", "isbn", "chapter", "pages",
+				 "pagetotal", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
+        }
+
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType INBOOK = new BibtexEntryType() {
+        public String getName() {
+            return "Inbook";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"author", "title", "booktitle", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"bookauthor", "editor", "editora", "editorb", "editorc",
+				 "translator", "annotator", "commentator", "introduction", "foreword", "afterword",
+				 "subtitle", "titleaddon", "maintitle", "mainsubtitle", "maintitleaddon",
+				 "booksubtitle", "booktitleaddon", "language", "origlanguage", "volume", "part",
+				 "edition", "volumes", "series", "number", "note", "publisher", "location", "isbn",
+				 "chapter", "pages", "addendum", "pubstate", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+        }
+
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"bookauthor", "editor", "subtitle", "titleaddon", "maintitle",
+				 "mainsubtitle", "maintitleaddon", "booksubtitle", "booktitleaddon", "volume",
+				 "edition", "publisher", "isbn", "chapter", "pages", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+        }
+
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType BOOKINBOOK = new BibtexEntryType() {
+        public String getName() {
+            return "Bookinbook";
+        }
+	// Same fields as "INBOOK" according to Biblatex 1.0: 
+        public String[] getRequiredFields() {
+	    return BibLatexEntryTypes.INBOOK.getRequiredFields();
+        }
+        public String[] getOptionalFields() {
+	    return BibLatexEntryTypes.INBOOK.getOptionalFields();
+        }
+
+        public String[] getPrimaryOptionalFields() {
+	    return BibLatexEntryTypes.INBOOK.getPrimaryOptionalFields();
+        }
+
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType SUPPBOOK = new BibtexEntryType() {
+        public String getName() {
+            return "Suppbook";
+        }
+	// Same fields as "INBOOK" according to Biblatex 1.0: 
+        public String[] getRequiredFields() {
+	    return BibLatexEntryTypes.INBOOK.getRequiredFields();
+        }
+        public String[] getOptionalFields() {
+	    return BibLatexEntryTypes.INBOOK.getOptionalFields();
+        }
+
+        public String[] getPrimaryOptionalFields() {
+	    return BibLatexEntryTypes.INBOOK.getPrimaryOptionalFields();
+        }
+
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType BOOKLET = new BibtexEntryType() {
+        public String getName() {
+            return "Booklet";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"author", "editor", "title", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "language", "howpublished", "type", "note",
+				 "location", "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint",
+				 "eprintclass", "eprinttype", "url", "urldate"};
+        }
+
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "howpublished", "chapter", "pages", "doi", "eprint",
+				 "eprintclass", "eprinttype", "url", "urldate"};
+        }
+
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType COLLECTION = new BibtexEntryType() {
+	public String getName() {
+	    return "Collection";
+	}
+	public String[] getRequiredFields() {
+	    return new String[] {"editor", "title", "year", "date"};
+	}
+	public String[] getOptionalFields() {
+	    return new String[] {"editora", "editorb", "editorc", "translator", "annotator", 
+				 "commentator", "introduction", "foreword", "afterword", "subtitle", "titleaddon",
+				 "maintitle", "mainsubtitle", "maintitleaddon", "language", "origlanguage", "volume",
+				 "part", "edition", "volumes", "series", "number", "note", "publisher", "location", "isbn",
+				 "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+	}
+     
+	public String[] getPrimaryOptionalFields() {
+	    return new String[] {"translator", "subtitle", "titleaddon", "maintitle",
+				 "mainsubtitle", "maintitleaddon", "volume",
+				 "edition", "publisher", "isbn", "chapter", "pages", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+	}
+     
+	public String describeRequiredFields() {
+	    return "";
+	}
+	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+	    return entry.allFieldsPresent(getRequiredFields(), database);
+	}
+    };
+
+    public static final BibtexEntryType INCOLLECTION = new BibtexEntryType() {
+	public String getName() {
+	    return "Incollection";
+	}
+	public String[] getRequiredFields() {
+	    return new String[] {"author", "editor", "title", "booktitle", "year", "date"};
+	}
+	public String[] getOptionalFields() {
+	    return new String[] {"editora", "editorb", "editorc", "translator", "annotator",
+				 "commentator", "introduction", "foreword", "afterword", "subtitle", "titleaddon",
+				 "maintitle", "mainsubtitle", "maintitleaddon", "booksubtitle", "booktitleaddon",
+				 "language", "origlanguage", "volume", "part", "edition", "volumes", "series", "number",
+				 "note", "publisher", "location", "isbn", "chapter", "pages", "addendum", "pubstate", "doi",
+				 "eprint", "eprintclass", "eprinttype", "url", "urldate"};
+	}
+     
+	public String[] getPrimaryOptionalFields() {
+	    return new String[] {"translator", "subtitle", "titleaddon", "maintitle",
+				 "mainsubtitle", "maintitleaddon", "booksubtitle", "booktitleaddon", "volume",
+				 "edition", "publisher", "isbn", "chapter", "pages", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+	}
+     
+	public String describeRequiredFields() {
+	    return "";
+	}
+	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+	    return entry.allFieldsPresent(getRequiredFields(), database);
+	}
+    };
+
+    public static final BibtexEntryType SUPPCOLLECTION = new BibtexEntryType() {
+	public String getName() {
+	    return "Suppcollection";
+	}
+	// Treated as alias of "INCOLLECTION" according to Biblatex 1.0: 
+        public String[] getRequiredFields() {
+	    return BibLatexEntryTypes.INCOLLECTION.getRequiredFields();
+        }
+        public String[] getOptionalFields() {
+	    return BibLatexEntryTypes.INCOLLECTION.getOptionalFields();
+        }
+
+        public String[] getPrimaryOptionalFields() {
+	    return BibLatexEntryTypes.INCOLLECTION.getPrimaryOptionalFields();
+        }
+     
+	public String describeRequiredFields() {
+	    return "";
+	}
+	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+	    return entry.allFieldsPresent(getRequiredFields(), database);
+	}
+    };
+
+    public static final BibtexEntryType MANUAL = new BibtexEntryType() {
+        public String getName() {
+            return "Manual";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"author", "editor", "title", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "language", "edition", "type", "series",
+				 "number", "version", "note", "organization", "publisher", "location", "isbn", "chapter",
+				 "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "edition", "publisher", "isbn", "chapter",
+				 "pages", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType MISC = new BibtexEntryType() {
+        public String getName() {
+            return "Misc";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"author", "editor", "title", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "language", "howpublished", "type",
+				 "version", "note", "organization", "location", "date", "month", "year", "addendum",
+				 "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "howpublished", "location", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType ONLINE = new BibtexEntryType() {
+        public String getName() {
+            return "Online";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"author", "editor", "title", "year", "date", "url"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "language", "version", "note",
+				 "organization", "date", "month", "year", "addendum", "pubstate", "urldate"};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "note", "organization", "urldate"};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType PATENT = new BibtexEntryType() {
+        public String getName() {
+            return "Patent";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"author", "title", "number", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"holder", "subtitle", "titleaddon", "type", "version", "location", "note",
+				 "date", "month", "year", "addendum", "pubstate", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"holder", "subtitle", "titleaddon", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType PERIODICAL = new BibtexEntryType() {
+        public String getName() {
+            return "Periodical";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"editor", "title", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"editora", "editorb", "editorc", "subtitle", "issuetitle",
+				 "issuesubtitle", "language", "series", "volume", "number", "issue", "date", "month", "year",
+				 "note", "issn", "addendum", "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url",
+				 "urldate"};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "issuetitle", "issuesubtitle", "issn", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType SUPPPERIODICAL = new BibtexEntryType() {
+	public String getName() {
+	    return "Suppperiodical";
+	}
+	// Treated as alias of "ARTICLE" according to Biblatex 1.0: 
+        public String[] getRequiredFields() {
+	    return BibLatexEntryTypes.ARTICLE.getRequiredFields();
+        }
+        public String[] getOptionalFields() {
+	    return BibLatexEntryTypes.ARTICLE.getOptionalFields();
+        }
+
+        public String[] getPrimaryOptionalFields() {	
+	    return BibLatexEntryTypes.ARTICLE.getPrimaryOptionalFields();
+        }
+     
+	public String describeRequiredFields() {
+	    return "";
+	}
+	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+	    return entry.allFieldsPresent(getRequiredFields(), database);
+	}
+    };
+
+    public static final BibtexEntryType PROCEEDINGS = new BibtexEntryType() {
+        public String getName() {
+            return "Proceedings";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"editor", "title", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "maintitle", "mainsubtitle",
+				 "maintitleaddon", "eventtitle", "eventdate", "venue", "language", "volume", "part",
+				 "volumes", "series", "number", "note", "organization", "publisher", "location", "month",
+				 "isbn", "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint",
+				 "eprintclass", "eprinttype", "url", "urldate"};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "maintitle", "mainsubtitle",
+				 "maintitleaddon", "eventtitle", "volume", "publisher", "isbn", "chapter", "pages",
+				 "pagetotal", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType INPROCEEDINGS = new BibtexEntryType() {
+        public String getName() {
+            return "Inproceedings";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"author", "editor", "title", "booktitle", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "maintitle", "mainsubtitle",
+				 "maintitleaddon", "booksubtitle", "booktitleaddon", "eventtitle", "eventdate", "venue",
+				 "language", "volume", "part", "volumes", "series", "number", "note", "organization",
+				 "publisher", "location", "month", "isbn", "chapter", "pages", "addendum",
+				 "pubstate", "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "maintitle", "mainsubtitle",
+				 "maintitleaddon", "booksubtitle", "booktitleaddon", "eventtitle", "volume",
+				 "publisher", "isbn", "chapter", "pages",
+				 "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType REFERENCE = new BibtexEntryType() {
+	public String getName() {
+	    return "Reference";
+	}
+	// Treated as alias of "COLLECTION" according to Biblatex 1.0: 
+        public String[] getRequiredFields() {
+	    return BibLatexEntryTypes.COLLECTION.getRequiredFields();
+        }
+        public String[] getOptionalFields() {
+	    return BibLatexEntryTypes.COLLECTION.getOptionalFields();
+        }
+
+        public String[] getPrimaryOptionalFields() {	
+	    return BibLatexEntryTypes.COLLECTION.getPrimaryOptionalFields();
+        }
+     
+	public String describeRequiredFields() {
+	    return "";
+	}
+	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+	    return entry.allFieldsPresent(getRequiredFields(), database);
+	}
+    };
+
+    public static final BibtexEntryType INREFERENCE = new BibtexEntryType() {
+	public String getName() {
+	    return "Inreference";
+	}
+	// Treated as alias of "INCOLLECTION" according to Biblatex 1.0: 
+        public String[] getRequiredFields() {
+	    return BibLatexEntryTypes.INCOLLECTION.getRequiredFields();
+        }
+        public String[] getOptionalFields() {
+	    return BibLatexEntryTypes.INCOLLECTION.getOptionalFields();
+        }
+
+        public String[] getPrimaryOptionalFields() {	
+	    return BibLatexEntryTypes.INCOLLECTION.getPrimaryOptionalFields();
+        }
+     
+	public String describeRequiredFields() {
+	    return "";
+	}
+	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+	    return entry.allFieldsPresent(getRequiredFields(), database);
+	}
+    };
+
+    public static final BibtexEntryType REPORT = new BibtexEntryType() {
+        public String getName() {
+            return "Report";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"author", "title", "type", "institution", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "language", "number", "version", "note",
+				 "location", "month", "isrn", "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi",
+				 "eprint", "eprintclass", "eprinttype", "url", "urldate"};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "number", "isrn", "chapter", "pages", "pagetotal", "doi",
+				 "eprint", "eprintclass", "eprinttype", "url", "urldate"};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType SET = new BibtexEntryType() {
+        public String getName() {
+            return "Set";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"entryset", "crossref"};
+        }
+	// These are all the standard entry fields, custom fields and field aliases not included:
+	/* Optional fields left out since they take up too much space - I think the set type is mainly supposed
+	   to fall back on content from the entries contained in the set, so only the required fields are included.*/
+        public String[] getOptionalFields() {
+	    return null;
+            /*return new String[] {"abstract", "addendum", "afterword", "annotation", "annotator", "author", "authortype",
+				 "bookauthor", "bookpagination", "booksubtitle", "booktitle", "booktitleaddon",
+				 "chapter", "commentator", "date", "doi", "edition", "editor", "editora", "editorb",
+				 "editorc", "editortype", "editoratype", "editorbtype", "editorctype", "eid", "eprint",
+				 "eprintclass", "eprinttype", "eventdate", "eventtitle", "file", "foreword", "holder",
+				 "howpublished", "indextitle", "insitution", "introduction", "isan", "isbn", "ismn",
+				 "isrn", "issn", "issue", "issuesubtitle", "issuetitle", "iswc", "journalsubtitle",
+				 "journaltitle", "label", "language", "library", "location", "mainsubtitle",
+				 "maintitle", "maintitleaddon", "month", "nameaddon", "note", "number", "organization",
+				 "origdate", "origlanguage", "origlocation", "origpublisher", "origtitle", "pages",
+				 "pagetotal", "pagination", "part", "publisher", "pubstate", "reprinttitle", "series",
+				 "shortauthor", "shorteditor", "shorthand", "shorthandintro", "shortjournal",
+				 "shortseries", "shorttitle", "subtitle", "title", "titleaddon", "translator", "type",
+				 "url", "urldate", "venue", "version", "volume", "volumes", "year", "crossref",
+				 "entryset", "entrysubtype", "execute", "gender", "hyphenation", "indexsorttitle",
+				 "keywords", "options", "presort", "sortkey", "sortname", "sorttitle", "sortyear",
+				 "xref"};*/
+        }
+	// These are just appr. the first half of the above fields:
+        public String[] getPrimaryOptionalFields() {
+	    return null;
+            /*return new String[] {"abstract", "addendum", "afterword", "annotation", "annotator", "author", "authortype",
+				 "bookauthor", "bookpagination", "booksubtitle", "booktitle", "booktitleaddon",
+				 "chapter", "commentator", "date", "doi", "edition", "editor", "editora", "editorb",
+				 "editorc", "editortype", "editoratype", "editorbtype", "editorctype", "eid", "eprint",
+				 "eprintclass", "eprinttype", "eventdate", "eventtitle", "file", "foreword", "holder",
+				 "howpublished", "indextitle", "insitution", "introduction", "isan", "isbn", "ismn",
+				 "isrn", "issn", "issue", "issuesubtitle", "issuetitle", "iswc", "journalsubtitle",
+				 "journaltitle", "label", "language", "library", "location", "mainsubtitle",
+				 "maintitle", "maintitleaddon", "month", "nameaddon"};*/
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType THESIS = new BibtexEntryType() {
+        public String getName() {
+            return "Thesis";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"author", "title", "type", "institution", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "language", "note", "location", "month",
+				 "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "chapter", "pages", "pagetotal", "doi", "eprint",
+				 "eprintclass", "eprinttype", "url", "urldate"};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType UNPUBLISHED = new BibtexEntryType() {
+        public String getName() {
+            return "Unpublished";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {"author", "title", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "language", "howpublished", "note",
+				 "location", "date", "month", "year", "addendum", "pubstate", "url", "urldate"};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "howpublished", "pubstate", "url", "urldate"};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    // === Type aliases: ===
+
+    public static final BibtexEntryType CONFERENCE = new BibtexEntryType() {
+	public String getName() {
+	    return "Conference";
+	}
+	// Treated as alias of "INPROCEEDINGS" according to Biblatex 1.0: 
+        public String[] getRequiredFields() {
+	    return BibLatexEntryTypes.INPROCEEDINGS.getRequiredFields();
+        }
+        public String[] getOptionalFields() {
+	    return BibLatexEntryTypes.INPROCEEDINGS.getOptionalFields();
+        }
+
+        public String[] getPrimaryOptionalFields() {	
+	    return BibLatexEntryTypes.INPROCEEDINGS.getPrimaryOptionalFields();
+        }
+     
+	public String describeRequiredFields() {
+	    return "";
+	}
+	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+	    return entry.allFieldsPresent(getRequiredFields(), database);
+	}
+    };
+
+    public static final BibtexEntryType ELECTRONIC = new BibtexEntryType() {
+	public String getName() {
+	    return "Electronic";
+	}
+	// Treated as alias of "ONLINE" according to Biblatex 1.0: 
+        public String[] getRequiredFields() {
+	    return BibLatexEntryTypes.ONLINE.getRequiredFields();
+        }
+        public String[] getOptionalFields() {
+	    return BibLatexEntryTypes.ONLINE.getOptionalFields();
+        }
+
+        public String[] getPrimaryOptionalFields() {	
+	    return BibLatexEntryTypes.ONLINE.getPrimaryOptionalFields();
+        }
+     
+	public String describeRequiredFields() {
+	    return "";
+	}
+	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+	    return entry.allFieldsPresent(getRequiredFields(), database);
+	}
+    };
+
+    public static final BibtexEntryType MASTERSTHESIS = new BibtexEntryType() {
+        public String getName() {
+            return "Mastersthesis";
+        }
+	// Treated as alias of "THESIS", except "type" field is optional
+        public String[] getRequiredFields() {
+            return new String[] {"author", "title", "institution", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "type", "language", "note", "location", "month",
+				 "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "type", "chapter", "pages", "pagetotal", "doi", "eprint",
+				 "eprintclass", "eprinttype", "url", "urldate"};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType PHDTHESIS = new BibtexEntryType() {
+        public String getName() {
+            return "Phdthesis";
+        }
+	// Treated as alias of "THESIS", except "type" field is optional
+        public String[] getRequiredFields() {
+            return new String[] {"author", "title", "institution", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "type", "language", "note", "location", "month",
+				 "chapter", "pages", "pagetotal", "addendum", "pubstate", "doi", "eprint", "eprintclass",
+				 "eprinttype", "url", "urldate"};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "type", "chapter", "pages", "pagetotal", "doi", "eprint",
+				 "eprintclass", "eprinttype", "url", "urldate"};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType TECHREPORT = new BibtexEntryType() {
+        public String getName() {
+            return "Techreport";
+        }
+	// Treated as alias of "REPORT", except "type" field is optional
+        public String[] getRequiredFields() {
+            return new String[] {"author", "title", "institution", "year", "date"};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "type", "language", "number", "version", "note",
+				 "location", "month", "isrn", "chapter", "pages", "pagetotal", "addendum", "pubstate",
+				 "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {"subtitle", "titleaddon", "type", "number", "isrn", "chapter", "pages", "pagetotal",
+				 "doi", "eprint", "eprintclass", "eprinttype", "url", "urldate"};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };
+
+    public static final BibtexEntryType WWW = new BibtexEntryType() {
+	public String getName() {
+	    return "Www";
+	}
+	// Treated as alias of "ONLINE" according to Biblatex 1.0: 
+        public String[] getRequiredFields() {
+	    return BibLatexEntryTypes.ONLINE.getRequiredFields();
+        }
+        public String[] getOptionalFields() {
+	    return BibLatexEntryTypes.ONLINE.getOptionalFields();
+        }
+
+        public String[] getPrimaryOptionalFields() {	
+	    return BibLatexEntryTypes.ONLINE.getPrimaryOptionalFields();
+        }
+     
+	public String describeRequiredFields() {
+	    return "";
+	}
+	public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+	    return entry.allFieldsPresent(getRequiredFields(), database);
+	}
+    };
+
+       /**
+     * This type is used for IEEEtran.bst to control various 
+     * be repeated or not. Not a very elegant solution, but it works...
+     */
+    public static final BibtexEntryType IEEETRANBSTCTL = new BibtexEntryType() {
+            public String getName()
+            {
+                return "IEEEtranBSTCTL";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[] {
+                "ctluse_article_number", "ctluse_paper", "ctluse_forced_etal",
+                "ctlmax_names_forced_etal", "ctlnames_show_etal", "ctluse_alt_spacing",
+                "ctlalt_stretch_factor", "ctldash_repeated_names", "ctlname_format_string",
+                "ctlname_latex_cmd", "ctlname_url_prefix"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return null;
+            }
+
+            public String describeRequiredFields()
+            {
+                return "None";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+		return true;
+           }
+        };
+
+    // Unsupported types and custom types left out
+
+    /*public static final BibtexEntryType ARTICLE = new BibtexEntryType() {
+        public String getName() {
+            return "Article";
+        }
+        public String[] getRequiredFields() {
+            return new String[] {};
+        }
+        public String[] getOptionalFields() {
+            return new String[] {};
+        }
+        public String[] getPrimaryOptionalFields() {
+            return new String[] {};
+        }
+        public String describeRequiredFields() {
+            return "";
+        }
+        public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+            return entry.allFieldsPresent(getRequiredFields(), database);
+        }
+    };*/
+}
diff --git a/src/java/net/sf/jabref/BibtexDatabase.java b/src/java/net/sf/jabref/BibtexDatabase.java
index c16d57e..99e15c5 100644
--- a/src/java/net/sf/jabref/BibtexDatabase.java
+++ b/src/java/net/sf/jabref/BibtexDatabase.java
@@ -1,664 +1,664 @@
-/*
-Copyright (C) 2003 David Weitzman, Morten O. Alver
-
-All programs in this directory and
-subdirectories are published under the GNU General Public License as
-described below.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA
-
-Further information about the GNU GPL is available at:
-http://www.gnu.org/copyleft/gpl.ja.html
-
-Note:
-Modified for use in JabRef
-
-*/
-
-
-// created by : ?
-//
-// modified : r.nagel 23.08.2004
-//                - insert getEntryByKey() methode needed by AuxSubGenerator
-
-package net.sf.jabref;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyVetoException;
-import java.beans.VetoableChangeListener;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Vector;
-
-import javax.swing.JOptionPane;
-
-public class BibtexDatabase {
-    
-	Map<String, BibtexEntry> _entries = new Hashtable<String, BibtexEntry>();
-
-	String _preamble = null;
-
-	HashMap<String, BibtexString> _strings = new HashMap<String, BibtexString>();
-
-	Vector<String> _strings_ = new Vector<String>();
-
-	Set<DatabaseChangeListener> changeListeners = new HashSet<DatabaseChangeListener>();
-
-    private boolean followCrossrefs = true;
-
-	/**
-	 * use a map instead of a set since i need to know how many of each key is
-	 * inthere
-	 */
-	private HashMap<String, Integer> allKeys = new HashMap<String, Integer>();
-
-    /*
-	 * Entries are stored in a HashMap with the ID as key. What happens if
-	 * someone changes a BibtexEntry's ID after it has been added to this
-	 * BibtexDatabase? The key of that entry would be the old ID, not the new
-	 * one. Use a PropertyChangeListener to identify an ID change and update the
-	 * Map.
-	 */
-    private final VetoableChangeListener listener =
-        new VetoableChangeListener()
-        {
-            public void vetoableChange(PropertyChangeEvent pce)
-                throws PropertyVetoException
-            {
-                if (pce.getPropertyName() == null)
-                    fireDatabaseChanged (new DatabaseChangeEvent(BibtexDatabase.this, DatabaseChangeEvent.ChangeType.CHANGING_ENTRY, (BibtexEntry)pce.getSource()));
-                else if ("id".equals(pce.getPropertyName()))
-                {
-                    // locate the entry under its old key
-                    BibtexEntry oldEntry =
-                        _entries.remove(pce.getOldValue());
-
-                    if (oldEntry != pce.getSource())
-                    {
-                        // Something is very wrong!
-                        // The entry under the old key isn't
-                        // the one that sent this event.
-                        // Restore the old state.
-                        _entries.put((String)pce.getOldValue(), oldEntry);
-                        throw new PropertyVetoException("Wrong old ID", pce);
-                    }
-
-                    if (_entries.get(pce.getNewValue()) != null)
-                    {
-                        _entries.put((String)pce.getOldValue(), oldEntry);
-                        throw new PropertyVetoException
-                            ("New ID already in use, please choose another",
-                            pce);
-                    }
-
-                    // and re-file this entry
-                    _entries.put((String) pce.getNewValue(),
-                        (BibtexEntry) pce.getSource());
-                } else {
-                    fireDatabaseChanged (new DatabaseChangeEvent(BibtexDatabase.this, DatabaseChangeEvent.ChangeType.CHANGED_ENTRY, (BibtexEntry)pce.getSource()));
-                    //Util.pr(pce.getSource().toString()+"\n"+pce.getPropertyName()
-                    //    +"\n"+pce.getNewValue());
-                }
-            }
-        };
-
-    /**
-     * Returns the number of entries.
-     */
-    public synchronized int getEntryCount()
-    {
-        return _entries.size();
-    }
-
-    /**
-     * Returns a Set containing the keys to all entries.
-     * Use getKeySet().iterator() to iterate over all entries.
-     */
-    public synchronized Set<String> getKeySet()
-    {
-        return _entries.keySet();
-    }
-
-    /**
-     * Returns an EntrySorter with the sorted entries from this base,
-     * sorted by the given Comparator.
-     */
-    public synchronized EntrySorter getSorter(Comparator<BibtexEntry> comp) {
-        EntrySorter sorter = new EntrySorter(_entries, comp);
-        addDatabaseChangeListener(sorter);
-        return sorter;
-    }
-
-    /**
-     * Just temporary, for testing purposes....
-     * @return
-     */
-    public Map<String, BibtexEntry> getEntryMap() { return _entries; }
-
-    /**
-     * Returns the entry with the given ID (-> entry_type + hashcode).
-     */
-    public synchronized BibtexEntry getEntryById(String id)
-    {
-        return _entries.get(id);
-    }
-
-    public synchronized Collection<BibtexEntry> getEntries() {
-            return _entries.values();
-    }
-
-    /**
-     * Returns the entry with the given bibtex key.
-     */
-    public synchronized BibtexEntry getEntryByKey(String key)
-    {
-      BibtexEntry back = null ;
-
-      int keyHash = key.hashCode() ; // key hash for better performance
-
-      Set<String> keySet = _entries.keySet();
-      if (keySet != null)
-      {
-          Iterator<String> it = keySet.iterator();
-          while(it.hasNext())
-          {
-            String entrieID = it.next() ;
-            BibtexEntry entry = getEntryById(entrieID) ;
-            if ((entry != null) && (entry.getCiteKey() != null))
-            {
-              String citeKey = entry.getCiteKey() ;
-              if (citeKey != null)
-              {
-                if (keyHash == citeKey.hashCode() )
-                {
-                  back = entry ;
-                }
-              }
-            }
-          }
-      }
-      return back ;
-    }
-
-    public synchronized BibtexEntry[] getEntriesByKey(String key) {
-        
-    	ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>();
-        
-        for (BibtexEntry entry : _entries.values()){
-            if (key.equals(entry.getCiteKey()))
-                entries.add(entry);
-        }
-        
-        return entries.toArray(new BibtexEntry[entries.size()]);
-    }
-
-    /**
-     * Inserts the entry, given that its ID is not already in use.
-     * use Util.createId(...) to make up a unique ID for an entry.
-     */
-    public synchronized boolean insertEntry(BibtexEntry entry)
-        throws KeyCollisionException
-    {
-        String id = entry.getId();
-        if (getEntryById(id) != null)
-        {
-          throw new KeyCollisionException(
-                "ID is already in use, please choose another");
-        }
-
-        entry.addPropertyChangeListener(listener);
-
-        _entries.put(id, entry);
-
-        fireDatabaseChanged(new DatabaseChangeEvent(this, DatabaseChangeEvent.ChangeType.ADDED_ENTRY, entry));
-
-        return checkForDuplicateKeyAndAdd(null, entry.getCiteKey(), false);
-    }
-
-    /**
-     * Removes the entry with the given string.
-     * 
-     * Returns null if not found.
-     */
-    public synchronized BibtexEntry removeEntry(String id)
-    {
-        BibtexEntry oldValue = _entries.remove(id);
-        
-        if (oldValue == null)
-            return null;
-        
-        removeKeyFromSet(oldValue.getCiteKey());
-        oldValue.removePropertyChangeListener(listener);
-        fireDatabaseChanged(new DatabaseChangeEvent(this, DatabaseChangeEvent.ChangeType.REMOVED_ENTRY, oldValue));
-
-        return oldValue;
-    }
-
-    public synchronized boolean setCiteKeyForEntry(String id, String key) {
-        if (!_entries.containsKey(id)) return false; // Entry doesn't exist!
-        BibtexEntry entry = getEntryById(id);
-        String oldKey = entry.getCiteKey();
-        if (key != null)
-          entry.setField(BibtexFields.KEY_FIELD, key);
-        else
-          entry.clearField(BibtexFields.KEY_FIELD);
-        return checkForDuplicateKeyAndAdd(oldKey, entry.getCiteKey(), false);
-    }
-
-    /**
-     * Sets the database's preamble.
-     */
-    public synchronized void setPreamble(String preamble)
-    {
-        _preamble = preamble;
-    }
-
-    /**
-     * Returns the database's preamble.
-     */
-    public synchronized String getPreamble()
-    {
-        return _preamble;
-    }
-
-    /**
-     * Inserts a Bibtex String at the given index.
-     */
-    public synchronized void addString(BibtexString string)
-        throws KeyCollisionException
-    {
-    	if (hasStringLabel(string.getName())){
-    		throw new KeyCollisionException("A string with this label already exists,");
-        }
-
-        if (_strings.containsKey(string.getId()))
-            throw new KeyCollisionException("Duplicate BibtexString id.");
-
-        _strings.put(string.getId(), string);
-    }
-
-    /**
-     * Removes the string at the given index.
-     */
-    public synchronized void removeString(String id) {
-        _strings.remove(id);
-    }
-
-    /**
-     * Returns a Set of keys to all BibtexString objects in the database.
-     * These are in no sorted order.
-     */
-    public Set<String> getStringKeySet() {
-        return _strings.keySet();
-    }
-    
-    /**
-     * Returns a Collection of all BibtexString objects in the database.
-     * These are in no particular order.
-     */
-    public Collection<BibtexString> getStringValues() {
-        return _strings.values();
-    }
-
-    /**
-     * Returns the string at the given index.
-     */
-    public synchronized BibtexString getString(String o) {
-        return _strings.get(o);
-    }
-
-    /**
-     * Returns the number of strings.
-     */
-    public synchronized int getStringCount() {
-        return _strings.size();
-    }
-
-    /**
-     * Returns true if a string with the given label already exists.
-     */
-    public synchronized boolean hasStringLabel(String label) {
-    	for (BibtexString value : _strings.values()){
-             if (value.getName().equals(label))
-                return true;
-        }
-        return false;
-    }
-
-    /**
-     * Resolves any references to strings contained in this field content,
-     * if possible.
-     */
-    public String resolveForStrings(String content) {
-    	if (content == null){
-    		throw new IllegalArgumentException("Content for resolveForStrings must not be null.");
-    	}
-        return resolveContent(content, new HashSet<String>());
-    }
-    
-    /**
-	 * Take the given collection of BibtexEntry and resolve any string
-	 * references.
-	 * 
-	 * @param entries
-	 *            A collection of BibtexEntries in which all strings of the form
-	 *            #xxx# will be resolved against the hash map of string
-	 *            references stored in the databasee.
-	 *            
-	 * @param inPlace If inPlace is true then the given BibtexEntries will be modified, if false then copies of the BibtexEntries are made before resolving the strings.
-	 * 
-	 * @return a list of bibtexentries, with all strings resolved. It is dependent on the value of inPlace whether copies are made or the given BibtexEntries are modified. 
-	 */
-    public List<BibtexEntry> resolveForStrings(Collection<BibtexEntry> entries, boolean inPlace){
-    	
-    	if (entries == null)
-    		throw new NullPointerException();
-    	
-    	List<BibtexEntry> results = new ArrayList<BibtexEntry>(entries.size());
-    	
-    	for (BibtexEntry entry : entries){
-    		results.add(this.resolveForStrings(entry, inPlace));
-    	}
-    	return results;
-    }
-    
-    /**
-	 * Take the given BibtexEntry and resolve any string references.
-	 * 
-	 * @param entry
-	 *            A BibtexEntry in which all strings of the form #xxx# will be
-	 *            resolved against the hash map of string references stored in
-	 *            the databasee.
-	 * 
-	 * @param inPlace
-	 *            If inPlace is true then the given BibtexEntry will be
-	 *            modified, if false then a copy is made using close made before
-	 *            resolving the strings.
-	 * 
-	 * @return a BibtexEntry with all string references resolved. It is
-	 *         dependent on the value of inPlace whether a copy is made or the
-	 *         given BibtexEntries is modified.
-	 */
-    public BibtexEntry resolveForStrings(BibtexEntry entry, boolean inPlace) {
-		
-    	if (!inPlace){
-    		entry = (BibtexEntry)entry.clone();
-    	}
-    	
-    	for (Object field : entry.getAllFields()){
-    		entry.setField(field.toString(), this.resolveForStrings(entry.getField(field.toString()).toString()));
-    	}
-    	
-    	return entry;
-	}
-
-	/**
-    * If the label represents a string contained in this database, returns
-    * that string's content. Resolves references to other strings, taking
-    * care not to follow a circular reference pattern.
-    * If the string is undefined, returns null.
-    */
-    private String resolveString(String label, HashSet<String> usedIds) {
-    	for (BibtexString string : _strings.values()){
-
-                //Util.pr(label+" : "+string.getName());
-            if (string.getName().toLowerCase().equals(label.toLowerCase())) {
-
-                // First check if this string label has been resolved
-                // earlier in this recursion. If so, we have a
-                // circular reference, and have to stop to avoid
-                // infinite recursion.
-                if (usedIds.contains(string.getId())) {
-                    Util.pr("Stopped due to circular reference in strings: "+label);
-                    return label;
-                }
-                // If not, log this string's ID now.
-                usedIds.add(string.getId());
-
-                // Ok, we found the string. Now we must make sure we
-                // resolve any references to other strings in this one.
-                String res = string.getContent();
-                res = resolveContent(res, usedIds);
-
-                // Finished with recursing this branch, so we remove our
-                // ID again:
-                usedIds.remove(string.getId());
-
-                return res;
-            }
-        }
-
-        // If we get to this point, the string has obviously not been defined locally.
-        // Check if one of the standard BibTeX month strings has been used:
-        Object o;
-        if ((o = Globals.MONTH_STRINGS.get(label.toLowerCase())) != null) {
-            return (String)o;
-        }
-
-        return null;
-    }
-
-    private String resolveContent(String res, HashSet<String> usedIds) {
-        //if (res.matches(".*#[-\\^\\:\\w]+#.*")) {
-    if (res.matches(".*#[^#]+#.*")) {
-            StringBuffer newRes = new StringBuffer();
-            int piv = 0, next = 0;
-            while ((next=res.indexOf("#", piv)) >= 0) {
-
-                // We found the next string ref. Append the text
-                // up to it.
-                if (next > 0)
-                    newRes.append(res.substring(piv, next));
-                int stringEnd = res.indexOf("#", next+1);
-                if (stringEnd >= 0) {
-                    // We found the boundaries of the string ref,
-                    // now resolve that one.
-                    String refLabel = res.substring(next+1, stringEnd);
-                    String resolved = resolveString(refLabel, usedIds);
-                    
-                    if (resolved == null) {
-                        // Could not resolve string. Display the #
-                        // characters rather than removing them:
-                        newRes.append(res.substring(next, stringEnd+1));
-                    } else
-                        // The string was resolved, so we display its meaning only,
-                        // stripping the # characters signifying the string label:
-                        newRes.append(resolved);
-                    piv = stringEnd+1;
-                } else {
-                    // We didn't find the boundaries of the string ref. This
-                    // makes it impossible to interpret it as a string label.
-                    // So we should just append the rest of the text and finish.
-                    newRes.append(res.substring(next));
-                    piv = res.length();
-                    break;
-                }
-
-            }
-            if (piv < res.length()-1)
-                newRes.append(res.substring(piv));
-            res = newRes.toString();
-        }
-        return res;
-    }
-
-    //##########################################
-    //  usage:
-    //  isDuplicate=checkForDuplicateKeyAndAdd( null, b.getKey() , issueDuplicateWarning);
-    //############################################
-        // if the newkey already exists and is not the same as oldkey it will give a warning
-    // else it will add the newkey to the to set and remove the oldkey
-    public boolean checkForDuplicateKeyAndAdd(String oldKey, String newKey, boolean issueWarning){
-                // Globals.logger(" checkForDuplicateKeyAndAdd [oldKey = " + oldKey + "] [newKey = " + newKey + "]");
-
-        boolean duplicate=false;
-        if(oldKey==null){// this is a new entry so don't bother removing oldKey
-            duplicate= addKeyToSet( newKey);
-        }else{
-            if(oldKey.equals(newKey)){// were OK because the user did not change keys
-                duplicate=false;
-            }else{// user changed the key
-
-                // removed the oldkey
-                // But what if more than two have the same key?
-                // this means that user can add another key and would not get a warning!
-                // consider this: i add a key xxx, then i add another key xxx . I get a warning. I delete the key xxx. JBM
-                // removes this key from the allKey. then I add another key xxx. I don't get a warning!
-                // i need a way to count the number of keys of each type
-                // hashmap=>int (increment each time)
-
-                removeKeyFromSet( oldKey);
-                duplicate = addKeyToSet( newKey );
-            }
-        }
-        if(duplicate==true && issueWarning==true){
-            JOptionPane.showMessageDialog(null,  Globals.lang("Warning there is a duplicate key")+":" + newKey ,
-                                          Globals.lang("Duplicate Key Warning"),
-                                          JOptionPane.WARNING_MESSAGE);//, options);
-
-        }
-        return duplicate;
-    }
-
-    /**
-     * Returns the number of occurences of the given key in this database.
-     */
-    public int getNumberOfKeyOccurences(String key) {
-        Object o = allKeys.get(key);
-        if (o == null)
-            return 0;
-        else
-            return ((Integer)o).intValue();
-
-    }
-
-    //========================================================
-    // keep track of all the keys to warn if there are duplicates
-    //========================================================
-    private boolean addKeyToSet(String key){
-                boolean exists=false;
-                if((key == null) || key.equals(""))
-                        return false;//don't put empty key
-                if(allKeys.containsKey(key)){
-                        // warning
-                        exists=true;
-                        allKeys.put( key, new Integer( allKeys.get(key).intValue() + 1));// incrementInteger( allKeys.get(key)));
-                }else
-                        allKeys.put( key, new Integer(1));
-                return exists;
-    }
-    
-    //========================================================
-    // reduce the number of keys by 1. if this number goes to zero then remove from the set
-    // note: there is a good reason why we should not use a hashset but use hashmap instead
-    //========================================================
-    private void removeKeyFromSet(String key){
-                if((key == null) || key.equals("")) return;
-                if(allKeys.containsKey(key)){
-                        Integer tI = allKeys.get(key); // if(allKeys.get(key) instanceof Integer)
-                        if(tI.intValue()==1)
-                                allKeys.remove( key);
-                        else
-                                allKeys.put( key, new Integer( (tI).intValue() - 1));//decrementInteger( tI ));
-                }
-    }
-
-
-
-    public void fireDatabaseChanged(DatabaseChangeEvent e) {
-    	for (DatabaseChangeListener listener : changeListeners){
-    		listener.databaseChanged(e);
-        }
-    }
-
-    public void addDatabaseChangeListener(DatabaseChangeListener l) {
-        changeListeners.add(l);
-    }
-
-    public void removeDatabaseChangeListener(DatabaseChangeListener l) {
-        changeListeners.remove(l);
-    }
-
-	/**
-	 * Returns the text stored in the given field of the given bibtex entry
-	 * which belongs to the given database.
-	 * 
-	 * If a database is given, this function will try to resolve any string
-	 * references in the field-value.
-     * Also, if a database is given, this function will try to find values for
-     * unset fields in the entry linked by the "crossref" field, if any.
-	 * 
-	 * @param field
-	 *            The field to return the value of.
-	 * @param bibtex maybenull
-	 *            The bibtex entry which contains the field.
-	 * @param database maybenull
-	 *            The database of the bibtex entry.
-	 * @return The resolved field value or null if not found.
-	 */
-	public static String getResolvedField(String field, BibtexEntry bibtex,
-			BibtexDatabase database) {
-	
-		if (field.equals("bibtextype"))
-			return bibtex.getType().getName();
-
-        Object o = bibtex.getField(field);
-
-        // If this field is not set, and the entry has a crossref, try to look up the
-        // field in the referred entry: Do not do this for the bibtex key.
-        if ((o == null) && (database != null) && database.followCrossrefs &&
-                !field.equals(BibtexFields.KEY_FIELD) && (database != null)) {
-            Object crossRef = bibtex.getField("crossref");
-            if (crossRef != null) {
-                BibtexEntry referred = database.getEntryByKey((String)crossRef);
-                if (referred != null) {
-                    // Ok, we found the referred entry. Get the field value from that
-                    // entry. If it is unset there, too, stop looking:
-                    o = referred.getField(field);
-                }
-            }
-        } 
-
-        return getText((String)o, database);
-	}
-
-	/**
-	 * Returns a text with references resolved according to an optionally given
-	 * database.
-	
-	 * @param toResolve maybenull The text to resolve.
-	 * @param database maybenull The database to use for resolving the text.
-	 * @return The resolved text or the original text if either the text or the database are null
-	 */
-	public static String getText(String toResolve, BibtexDatabase database) {
-		if (toResolve != null && database != null)
-			return database.resolveForStrings(toResolve);
-		
-		return toResolve;
-	}
-
-    public void setFollowCrossrefs(boolean followCrossrefs) {
-        this.followCrossrefs = followCrossrefs;
-    }
-}
+/*
+Copyright (C) 2003 David Weitzman, Morten O. Alver
+
+All programs in this directory and
+subdirectories are published under the GNU General Public License as
+described below.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
+
+Further information about the GNU GPL is available at:
+http://www.gnu.org/copyleft/gpl.ja.html
+
+Note:
+Modified for use in JabRef
+
+*/
+
+
+// created by : ?
+//
+// modified : r.nagel 23.08.2004
+//                - insert getEntryByKey() methode needed by AuxSubGenerator
+
+package net.sf.jabref;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyVetoException;
+import java.beans.VetoableChangeListener;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
+
+import javax.swing.JOptionPane;
+
+public class BibtexDatabase {
+    
+	Map<String, BibtexEntry> _entries = new Hashtable<String, BibtexEntry>();
+
+	String _preamble = null;
+
+	HashMap<String, BibtexString> _strings = new HashMap<String, BibtexString>();
+
+	Vector<String> _strings_ = new Vector<String>();
+
+	Set<DatabaseChangeListener> changeListeners = new HashSet<DatabaseChangeListener>();
+
+    private boolean followCrossrefs = true;
+
+	/**
+	 * use a map instead of a set since i need to know how many of each key is
+	 * inthere
+	 */
+	private HashMap<String, Integer> allKeys = new HashMap<String, Integer>();
+
+    /*
+	 * Entries are stored in a HashMap with the ID as key. What happens if
+	 * someone changes a BibtexEntry's ID after it has been added to this
+	 * BibtexDatabase? The key of that entry would be the old ID, not the new
+	 * one. Use a PropertyChangeListener to identify an ID change and update the
+	 * Map.
+	 */
+    private final VetoableChangeListener listener =
+        new VetoableChangeListener()
+        {
+            public void vetoableChange(PropertyChangeEvent pce)
+                throws PropertyVetoException
+            {
+                if (pce.getPropertyName() == null)
+                    fireDatabaseChanged (new DatabaseChangeEvent(BibtexDatabase.this, DatabaseChangeEvent.ChangeType.CHANGING_ENTRY, (BibtexEntry)pce.getSource()));
+                else if ("id".equals(pce.getPropertyName()))
+                {
+                    // locate the entry under its old key
+                    BibtexEntry oldEntry =
+                        _entries.remove(pce.getOldValue());
+
+                    if (oldEntry != pce.getSource())
+                    {
+                        // Something is very wrong!
+                        // The entry under the old key isn't
+                        // the one that sent this event.
+                        // Restore the old state.
+                        _entries.put((String)pce.getOldValue(), oldEntry);
+                        throw new PropertyVetoException("Wrong old ID", pce);
+                    }
+
+                    if (_entries.get(pce.getNewValue()) != null)
+                    {
+                        _entries.put((String)pce.getOldValue(), oldEntry);
+                        throw new PropertyVetoException
+                            ("New ID already in use, please choose another",
+                            pce);
+                    }
+
+                    // and re-file this entry
+                    _entries.put((String) pce.getNewValue(),
+                        (BibtexEntry) pce.getSource());
+                } else {
+                    fireDatabaseChanged (new DatabaseChangeEvent(BibtexDatabase.this, DatabaseChangeEvent.ChangeType.CHANGED_ENTRY, (BibtexEntry)pce.getSource()));
+                    //Util.pr(pce.getSource().toString()+"\n"+pce.getPropertyName()
+                    //    +"\n"+pce.getNewValue());
+                }
+            }
+        };
+
+    /**
+     * Returns the number of entries.
+     */
+    public synchronized int getEntryCount()
+    {
+        return _entries.size();
+    }
+
+    /**
+     * Returns a Set containing the keys to all entries.
+     * Use getKeySet().iterator() to iterate over all entries.
+     */
+    public synchronized Set<String> getKeySet()
+    {
+        return _entries.keySet();
+    }
+
+    /**
+     * Returns an EntrySorter with the sorted entries from this base,
+     * sorted by the given Comparator.
+     */
+    public synchronized EntrySorter getSorter(Comparator<BibtexEntry> comp) {
+        EntrySorter sorter = new EntrySorter(_entries, comp);
+        addDatabaseChangeListener(sorter);
+        return sorter;
+    }
+
+    /**
+     * Just temporary, for testing purposes....
+     * @return
+     */
+    public Map<String, BibtexEntry> getEntryMap() { return _entries; }
+
+    /**
+     * Returns the entry with the given ID (-> entry_type + hashcode).
+     */
+    public synchronized BibtexEntry getEntryById(String id)
+    {
+        return _entries.get(id);
+    }
+
+    public synchronized Collection<BibtexEntry> getEntries() {
+            return _entries.values();
+    }
+
+    /**
+     * Returns the entry with the given bibtex key.
+     */
+    public synchronized BibtexEntry getEntryByKey(String key)
+    {
+      BibtexEntry back = null ;
+
+      int keyHash = key.hashCode() ; // key hash for better performance
+
+      Set<String> keySet = _entries.keySet();
+      if (keySet != null)
+      {
+          Iterator<String> it = keySet.iterator();
+          while(it.hasNext())
+          {
+            String entrieID = it.next() ;
+            BibtexEntry entry = getEntryById(entrieID) ;
+            if ((entry != null) && (entry.getCiteKey() != null))
+            {
+              String citeKey = entry.getCiteKey() ;
+              if (citeKey != null)
+              {
+                if (keyHash == citeKey.hashCode() )
+                {
+                  back = entry ;
+                }
+              }
+            }
+          }
+      }
+      return back ;
+    }
+
+    public synchronized BibtexEntry[] getEntriesByKey(String key) {
+        
+    	ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+        
+        for (BibtexEntry entry : _entries.values()){
+            if (key.equals(entry.getCiteKey()))
+                entries.add(entry);
+        }
+        
+        return entries.toArray(new BibtexEntry[entries.size()]);
+    }
+
+    /**
+     * Inserts the entry, given that its ID is not already in use.
+     * use Util.createId(...) to make up a unique ID for an entry.
+     */
+    public synchronized boolean insertEntry(BibtexEntry entry)
+        throws KeyCollisionException
+    {
+        String id = entry.getId();
+        if (getEntryById(id) != null)
+        {
+          throw new KeyCollisionException(
+                "ID is already in use, please choose another");
+        }
+
+        entry.addPropertyChangeListener(listener);
+
+        _entries.put(id, entry);
+
+        fireDatabaseChanged(new DatabaseChangeEvent(this, DatabaseChangeEvent.ChangeType.ADDED_ENTRY, entry));
+
+        return checkForDuplicateKeyAndAdd(null, entry.getCiteKey(), false);
+    }
+
+    /**
+     * Removes the entry with the given string.
+     * 
+     * Returns null if not found.
+     */
+    public synchronized BibtexEntry removeEntry(String id)
+    {
+        BibtexEntry oldValue = _entries.remove(id);
+        
+        if (oldValue == null)
+            return null;
+        
+        removeKeyFromSet(oldValue.getCiteKey());
+        oldValue.removePropertyChangeListener(listener);
+        fireDatabaseChanged(new DatabaseChangeEvent(this, DatabaseChangeEvent.ChangeType.REMOVED_ENTRY, oldValue));
+
+        return oldValue;
+    }
+
+    public synchronized boolean setCiteKeyForEntry(String id, String key) {
+        if (!_entries.containsKey(id)) return false; // Entry doesn't exist!
+        BibtexEntry entry = getEntryById(id);
+        String oldKey = entry.getCiteKey();
+        if (key != null)
+          entry.setField(BibtexFields.KEY_FIELD, key);
+        else
+          entry.clearField(BibtexFields.KEY_FIELD);
+        return checkForDuplicateKeyAndAdd(oldKey, entry.getCiteKey(), false);
+    }
+
+    /**
+     * Sets the database's preamble.
+     */
+    public synchronized void setPreamble(String preamble)
+    {
+        _preamble = preamble;
+    }
+
+    /**
+     * Returns the database's preamble.
+     */
+    public synchronized String getPreamble()
+    {
+        return _preamble;
+    }
+
+    /**
+     * Inserts a Bibtex String at the given index.
+     */
+    public synchronized void addString(BibtexString string)
+        throws KeyCollisionException
+    {
+    	if (hasStringLabel(string.getName())){
+    		throw new KeyCollisionException("A string with this label already exists,");
+        }
+
+        if (_strings.containsKey(string.getId()))
+            throw new KeyCollisionException("Duplicate BibtexString id.");
+
+        _strings.put(string.getId(), string);
+    }
+
+    /**
+     * Removes the string at the given index.
+     */
+    public synchronized void removeString(String id) {
+        _strings.remove(id);
+    }
+
+    /**
+     * Returns a Set of keys to all BibtexString objects in the database.
+     * These are in no sorted order.
+     */
+    public Set<String> getStringKeySet() {
+        return _strings.keySet();
+    }
+    
+    /**
+     * Returns a Collection of all BibtexString objects in the database.
+     * These are in no particular order.
+     */
+    public Collection<BibtexString> getStringValues() {
+        return _strings.values();
+    }
+
+    /**
+     * Returns the string at the given index.
+     */
+    public synchronized BibtexString getString(String o) {
+        return _strings.get(o);
+    }
+
+    /**
+     * Returns the number of strings.
+     */
+    public synchronized int getStringCount() {
+        return _strings.size();
+    }
+
+    /**
+     * Returns true if a string with the given label already exists.
+     */
+    public synchronized boolean hasStringLabel(String label) {
+    	for (BibtexString value : _strings.values()){
+             if (value.getName().equals(label))
+                return true;
+        }
+        return false;
+    }
+
+    /**
+     * Resolves any references to strings contained in this field content,
+     * if possible.
+     */
+    public String resolveForStrings(String content) {
+    	if (content == null){
+    		throw new IllegalArgumentException("Content for resolveForStrings must not be null.");
+    	}
+        return resolveContent(content, new HashSet<String>());
+    }
+    
+    /**
+	 * Take the given collection of BibtexEntry and resolve any string
+	 * references.
+	 * 
+	 * @param entries
+	 *            A collection of BibtexEntries in which all strings of the form
+	 *            #xxx# will be resolved against the hash map of string
+	 *            references stored in the databasee.
+	 *            
+	 * @param inPlace If inPlace is true then the given BibtexEntries will be modified, if false then copies of the BibtexEntries are made before resolving the strings.
+	 * 
+	 * @return a list of bibtexentries, with all strings resolved. It is dependent on the value of inPlace whether copies are made or the given BibtexEntries are modified. 
+	 */
+    public List<BibtexEntry> resolveForStrings(Collection<BibtexEntry> entries, boolean inPlace){
+    	
+    	if (entries == null)
+    		throw new NullPointerException();
+    	
+    	List<BibtexEntry> results = new ArrayList<BibtexEntry>(entries.size());
+    	
+    	for (BibtexEntry entry : entries){
+    		results.add(this.resolveForStrings(entry, inPlace));
+    	}
+    	return results;
+    }
+    
+    /**
+	 * Take the given BibtexEntry and resolve any string references.
+	 * 
+	 * @param entry
+	 *            A BibtexEntry in which all strings of the form #xxx# will be
+	 *            resolved against the hash map of string references stored in
+	 *            the databasee.
+	 * 
+	 * @param inPlace
+	 *            If inPlace is true then the given BibtexEntry will be
+	 *            modified, if false then a copy is made using close made before
+	 *            resolving the strings.
+	 * 
+	 * @return a BibtexEntry with all string references resolved. It is
+	 *         dependent on the value of inPlace whether a copy is made or the
+	 *         given BibtexEntries is modified.
+	 */
+    public BibtexEntry resolveForStrings(BibtexEntry entry, boolean inPlace) {
+		
+    	if (!inPlace){
+    		entry = (BibtexEntry)entry.clone();
+    	}
+    	
+    	for (Object field : entry.getAllFields()){
+    		entry.setField(field.toString(), this.resolveForStrings(entry.getField(field.toString()).toString()));
+    	}
+    	
+    	return entry;
+	}
+
+	/**
+    * If the label represents a string contained in this database, returns
+    * that string's content. Resolves references to other strings, taking
+    * care not to follow a circular reference pattern.
+    * If the string is undefined, returns null.
+    */
+    private String resolveString(String label, HashSet<String> usedIds) {
+    	for (BibtexString string : _strings.values()){
+
+                //Util.pr(label+" : "+string.getName());
+            if (string.getName().toLowerCase().equals(label.toLowerCase())) {
+
+                // First check if this string label has been resolved
+                // earlier in this recursion. If so, we have a
+                // circular reference, and have to stop to avoid
+                // infinite recursion.
+                if (usedIds.contains(string.getId())) {
+                    Util.pr("Stopped due to circular reference in strings: "+label);
+                    return label;
+                }
+                // If not, log this string's ID now.
+                usedIds.add(string.getId());
+
+                // Ok, we found the string. Now we must make sure we
+                // resolve any references to other strings in this one.
+                String res = string.getContent();
+                res = resolveContent(res, usedIds);
+
+                // Finished with recursing this branch, so we remove our
+                // ID again:
+                usedIds.remove(string.getId());
+
+                return res;
+            }
+        }
+
+        // If we get to this point, the string has obviously not been defined locally.
+        // Check if one of the standard BibTeX month strings has been used:
+        Object o;
+        if ((o = Globals.MONTH_STRINGS.get(label.toLowerCase())) != null) {
+            return (String)o;
+        }
+
+        return null;
+    }
+
+    private String resolveContent(String res, HashSet<String> usedIds) {
+        //if (res.matches(".*#[-\\^\\:\\w]+#.*")) {
+    if (res.matches(".*#[^#]+#.*")) {
+            StringBuffer newRes = new StringBuffer();
+            int piv = 0, next = 0;
+            while ((next=res.indexOf("#", piv)) >= 0) {
+
+                // We found the next string ref. Append the text
+                // up to it.
+                if (next > 0)
+                    newRes.append(res.substring(piv, next));
+                int stringEnd = res.indexOf("#", next+1);
+                if (stringEnd >= 0) {
+                    // We found the boundaries of the string ref,
+                    // now resolve that one.
+                    String refLabel = res.substring(next+1, stringEnd);
+                    String resolved = resolveString(refLabel, usedIds);
+                    
+                    if (resolved == null) {
+                        // Could not resolve string. Display the #
+                        // characters rather than removing them:
+                        newRes.append(res.substring(next, stringEnd+1));
+                    } else
+                        // The string was resolved, so we display its meaning only,
+                        // stripping the # characters signifying the string label:
+                        newRes.append(resolved);
+                    piv = stringEnd+1;
+                } else {
+                    // We didn't find the boundaries of the string ref. This
+                    // makes it impossible to interpret it as a string label.
+                    // So we should just append the rest of the text and finish.
+                    newRes.append(res.substring(next));
+                    piv = res.length();
+                    break;
+                }
+
+            }
+            if (piv < res.length()-1)
+                newRes.append(res.substring(piv));
+            res = newRes.toString();
+        }
+        return res;
+    }
+
+    //##########################################
+    //  usage:
+    //  isDuplicate=checkForDuplicateKeyAndAdd( null, b.getKey() , issueDuplicateWarning);
+    //############################################
+        // if the newkey already exists and is not the same as oldkey it will give a warning
+    // else it will add the newkey to the to set and remove the oldkey
+    public boolean checkForDuplicateKeyAndAdd(String oldKey, String newKey, boolean issueWarning){
+                // Globals.logger(" checkForDuplicateKeyAndAdd [oldKey = " + oldKey + "] [newKey = " + newKey + "]");
+
+        boolean duplicate=false;
+        if(oldKey==null){// this is a new entry so don't bother removing oldKey
+            duplicate= addKeyToSet( newKey);
+        }else{
+            if(oldKey.equals(newKey)){// were OK because the user did not change keys
+                duplicate=false;
+            }else{// user changed the key
+
+                // removed the oldkey
+                // But what if more than two have the same key?
+                // this means that user can add another key and would not get a warning!
+                // consider this: i add a key xxx, then i add another key xxx . I get a warning. I delete the key xxx. JBM
+                // removes this key from the allKey. then I add another key xxx. I don't get a warning!
+                // i need a way to count the number of keys of each type
+                // hashmap=>int (increment each time)
+
+                removeKeyFromSet( oldKey);
+                duplicate = addKeyToSet( newKey );
+            }
+        }
+        if(duplicate==true && issueWarning==true){
+            JOptionPane.showMessageDialog(null,  Globals.lang("Warning there is a duplicate key")+":" + newKey ,
+                                          Globals.lang("Duplicate Key Warning"),
+                                          JOptionPane.WARNING_MESSAGE);//, options);
+
+        }
+        return duplicate;
+    }
+
+    /**
+     * Returns the number of occurences of the given key in this database.
+     */
+    public int getNumberOfKeyOccurences(String key) {
+        Object o = allKeys.get(key);
+        if (o == null)
+            return 0;
+        else
+            return ((Integer)o).intValue();
+
+    }
+
+    //========================================================
+    // keep track of all the keys to warn if there are duplicates
+    //========================================================
+    private boolean addKeyToSet(String key){
+                boolean exists=false;
+                if((key == null) || key.equals(""))
+                        return false;//don't put empty key
+                if(allKeys.containsKey(key)){
+                        // warning
+                        exists=true;
+                        allKeys.put( key, new Integer( allKeys.get(key).intValue() + 1));// incrementInteger( allKeys.get(key)));
+                }else
+                        allKeys.put( key, new Integer(1));
+                return exists;
+    }
+    
+    //========================================================
+    // reduce the number of keys by 1. if this number goes to zero then remove from the set
+    // note: there is a good reason why we should not use a hashset but use hashmap instead
+    //========================================================
+    private void removeKeyFromSet(String key){
+                if((key == null) || key.equals("")) return;
+                if(allKeys.containsKey(key)){
+                        Integer tI = allKeys.get(key); // if(allKeys.get(key) instanceof Integer)
+                        if(tI.intValue()==1)
+                                allKeys.remove( key);
+                        else
+                                allKeys.put( key, new Integer( (tI).intValue() - 1));//decrementInteger( tI ));
+                }
+    }
+
+
+
+    public void fireDatabaseChanged(DatabaseChangeEvent e) {
+    	for (DatabaseChangeListener listener : changeListeners){
+    		listener.databaseChanged(e);
+        }
+    }
+
+    public void addDatabaseChangeListener(DatabaseChangeListener l) {
+        changeListeners.add(l);
+    }
+
+    public void removeDatabaseChangeListener(DatabaseChangeListener l) {
+        changeListeners.remove(l);
+    }
+
+	/**
+	 * Returns the text stored in the given field of the given bibtex entry
+	 * which belongs to the given database.
+	 * 
+	 * If a database is given, this function will try to resolve any string
+	 * references in the field-value.
+     * Also, if a database is given, this function will try to find values for
+     * unset fields in the entry linked by the "crossref" field, if any.
+	 * 
+	 * @param field
+	 *            The field to return the value of.
+	 * @param bibtex maybenull
+	 *            The bibtex entry which contains the field.
+	 * @param database maybenull
+	 *            The database of the bibtex entry.
+	 * @return The resolved field value or null if not found.
+	 */
+	public static String getResolvedField(String field, BibtexEntry bibtex,
+			BibtexDatabase database) {
+	
+		if (field.equals("bibtextype"))
+			return bibtex.getType().getName();
+
+        Object o = bibtex.getField(field);
+
+        // If this field is not set, and the entry has a crossref, try to look up the
+        // field in the referred entry: Do not do this for the bibtex key.
+        if ((o == null) && (database != null) && database.followCrossrefs &&
+                !field.equals(BibtexFields.KEY_FIELD) && (database != null)) {
+            Object crossRef = bibtex.getField("crossref");
+            if (crossRef != null) {
+                BibtexEntry referred = database.getEntryByKey((String)crossRef);
+                if (referred != null) {
+                    // Ok, we found the referred entry. Get the field value from that
+                    // entry. If it is unset there, too, stop looking:
+                    o = referred.getField(field);
+                }
+            }
+        } 
+
+        return getText((String)o, database);
+	}
+
+	/**
+	 * Returns a text with references resolved according to an optionally given
+	 * database.
+	
+	 * @param toResolve maybenull The text to resolve.
+	 * @param database maybenull The database to use for resolving the text.
+	 * @return The resolved text or the original text if either the text or the database are null
+	 */
+	public static String getText(String toResolve, BibtexDatabase database) {
+		if (toResolve != null && database != null)
+			return database.resolveForStrings(toResolve);
+		
+		return toResolve;
+	}
+
+    public void setFollowCrossrefs(boolean followCrossrefs) {
+        this.followCrossrefs = followCrossrefs;
+    }
+}
diff --git a/src/java/net/sf/jabref/BibtexEntry.java b/src/java/net/sf/jabref/BibtexEntry.java
index c2e6a5e..8466778 100644
--- a/src/java/net/sf/jabref/BibtexEntry.java
+++ b/src/java/net/sf/jabref/BibtexEntry.java
@@ -1,448 +1,448 @@
-/*
-Copyright (C) 2003 David Weitzman, Morten O. Alver
-
-All programs in this directory and
-subdirectories are published under the GNU General Public License as
-described below.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA
-
-Further information about the GNU GPL is available at:
-http://www.gnu.org/copyleft/gpl.ja.html
-
-Note:
-Modified for use in JabRef.
-
-*/
-
-package net.sf.jabref;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyVetoException;
-import java.beans.VetoableChangeListener;
-import java.beans.VetoableChangeSupport;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.*;
-
-import net.sf.jabref.export.FieldFormatter;
-
-
-public class BibtexEntry
-{
-    public final static String ID_FIELD = "id";
-    private String _id;
-    private BibtexEntryType _type;
-    private Map<String, String> _fields = new HashMap<String, String>();
-    VetoableChangeSupport _changeSupport = new VetoableChangeSupport(this);
-
-    // Search and grouping status is stored in boolean fields for quick reference:
-    private boolean searchHit, groupHit;
-
-    public BibtexEntry(){
-    	this(Util.createNeutralId());
-    }
-    
-    public BibtexEntry(String id)
-    {
-        this(id, BibtexEntryType.OTHER);
-    }
-
-    public BibtexEntry(String id, BibtexEntryType type)
-    {
-        if (id == null)
-        {
-            throw new NullPointerException("Every BibtexEntry must have an ID");
-        }
-
-        _id = id;
-        setType(type);
-    }
-
-    /**
-     * Returns an array describing the optional fields for this entry.
-     */
-    public String[] getOptionalFields()
-    {
-        return _type.getOptionalFields();
-    }
-
-    /**
-     * Returns an array describing the required fields for this entry.
-     */
-    public String[] getRequiredFields()
-    {
-        return _type.getRequiredFields();
-    }
-
-    /**
-     * Returns an set containing the names of all fields that are
-     * set for this particular entry.
-     */
-    public Set<String> getAllFields() {
-        return new TreeSet<String>(_fields.keySet());
-    }
-
-    /**
-     * Returns a string describing the required fields for this entry.
-     */
-    public String describeRequiredFields()
-    {
-        return _type.describeRequiredFields();
-    }
-
-    /**
-     * Returns true if this entry contains the fields it needs to be
-     * complete.
-     */
-    public boolean hasAllRequiredFields(BibtexDatabase database)
-    {
-        return _type.hasAllRequiredFields(this, database);
-    }
-
-    /**
-     * Returns this entry's type.
-     */
-    public BibtexEntryType getType()
-    {
-        return _type;
-    }
-
-    /**
-     * Sets this entry's type.
-     */
-    public void setType(BibtexEntryType type)
-    {
-        if (type == null)
-        {
-            throw new NullPointerException(
-                "Every BibtexEntry must have a type.  Instead of null, use type OTHER");
-        }
-
-        BibtexEntryType oldType = _type;
-
-        try {
-            // We set the type before throwing the changeEvent, to enable
-            // the change listener to access the new value if the change
-            // sets off a change in database sorting etc.
-            _type = type;
-            firePropertyChangedEvent(GUIGlobals.TYPE_HEADER,
-                    oldType != null ? oldType.getName() : null,
-                    type.getName());
-        } catch (PropertyVetoException pve) {
-            pve.printStackTrace();
-        }
-
-
-    }
-
-    /**
-     * Prompts the entry to call BibtexEntryType.getType(String) with
-     * its current type name as argument, and sets its type according
-     * to what is returned. This method is called when a user changes
-     * the type customization, to make sure all entries are set with
-     * current types.
-     * @return true if the entry could find a type, false if not (in
-     * this case the type will have been set to
-     * BibtexEntryType.TYPELESS).
-     */
-    public boolean updateType() {
-        BibtexEntryType newType = BibtexEntryType.getType(_type.getName());
-        if (newType != null) {
-            _type = newType;
-            return true;
-        }
-        _type = BibtexEntryType.TYPELESS;
-        return false;
-    }
-
-    /**
-     * Sets this entry's ID, provided the database containing it
-     * doesn't veto the change.
-     */
-    public void setId(String id) throws KeyCollisionException {
-
-        if (id == null) {
-            throw new
-                NullPointerException("Every BibtexEntry must have an ID");
-        }
-
-        try
-        {
-            firePropertyChangedEvent(ID_FIELD, _id, id);
-        }
-        catch (PropertyVetoException pv)
-        {
-            throw new KeyCollisionException("Couldn't change ID: " + pv);
-        }
-
-        _id = id;
-    }
-
-    /**
-     * Returns this entry's ID.
-     */
-    public String getId()
-    {
-        return _id;
-    }
-
-    /**
-     * Returns the contents of the given field, or null if it is not set.
-     */
-    public String getField(String name) {
-        return _fields.get(name);
-    }
-
-    public String getCiteKey() {
-        return (_fields.containsKey(BibtexFields.KEY_FIELD) ?
-                _fields.get(BibtexFields.KEY_FIELD) : null);
-    }
-
-    /**
-     * Sets a number of fields simultaneously. The given HashMap contains field
-     * names as keys, each mapped to the value to set.
-     * WARNING: this method does not notify change listeners, so it should *NOT*
-     * be used for entries that are being displayed in the GUI. Furthermore, it
-     * does not check values for content, so e.g. empty strings will be set as such.
-     */
-    public void setField(Map<String, String> fields){
-        _fields.putAll(fields);
-    }
-
-    /**
-     * Set a field, and notify listeners about the change.
-     *
-     * @param name The field to set.
-     * @param value The value to set.
-     */
-    public void setField(String name, String value) {
-
-        if (ID_FIELD.equals(name)) {
-            throw new IllegalArgumentException("The field name '" + name +
-                                               "' is reserved");
-        }
-
-        String oldValue = _fields.get(name);
-        try {
-            // We set the field before throwing the changeEvent, to enable
-            // the change listener to access the new value if the change
-            // sets off a change in database sorting etc.
-            _fields.put(name, value);
-            firePropertyChangedEvent(name, oldValue, value);
-        } catch (PropertyVetoException pve) {
-            // Since we have already made the change, we must undo it since
-            // the change was rejected:
-            _fields.put(name, oldValue);
-            throw new IllegalArgumentException("Change rejected: " + pve);
-        }
-
-    }
-
-    /**
-     * Remove the mapping for the field name, and notify listeners about
-     * the change.
-     *
-     * @param name The field to clear.
-     */
-    public void clearField(String name) {
-
-      if (ID_FIELD.equals(name)) {
-           throw new IllegalArgumentException("The field name '" + name +
-                                              "' is reserved");
-       }
-       Object oldValue = _fields.get(name);
-       _fields.remove(name);
-       try {
-           firePropertyChangedEvent(name, oldValue, null);
-       } catch (PropertyVetoException pve) {
-           throw new IllegalArgumentException("Change rejected: " + pve);
-       }
-
-
-    }
-
-    /**
-     * Determines whether this entry has all the given fields present. If a non-null
-     * database argument is given, this method will try to look up missing fields in
-     * entries linked by the "crossref" field, if any.
-     *
-     * @param fields An array of field names to be checked.
-     * @param database The database in which to look up crossref'd entries, if any. This
-     *  argument can be null, meaning that no attempt will be made to follow crossrefs.
-     * @return true if all fields are set or could be resolved, false otherwise.
-     */
-    protected boolean allFieldsPresent(String[] fields, BibtexDatabase database) {
-        for (int i = 0; i < fields.length; i++) {
-            if (BibtexDatabase.getResolvedField(fields[i], this, database) == null) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    private void firePropertyChangedEvent(String fieldName, Object oldValue,
-        Object newValue) throws PropertyVetoException
-    {
-        _changeSupport.fireVetoableChange(new PropertyChangeEvent(this,
-                fieldName, oldValue, newValue));
-    }
-
-    /**
-     * Adds a VetoableChangeListener, which is notified of field
-     * changes. This is useful for an object that needs to update
-     * itself each time a field changes.
-     */
-    public void addPropertyChangeListener(VetoableChangeListener listener)
-    {
-        _changeSupport.addVetoableChangeListener(listener);
-    }
-
-    /**
-     * Removes a property listener.
-     */
-    public void removePropertyChangeListener(VetoableChangeListener listener)
-    {
-        _changeSupport.removeVetoableChangeListener(listener);
-    }
-
-    /**
-     * Write this entry to the given Writer, with the given FieldFormatter.
-     * @param write True if this is a write, false if it is a display. The write will
-     * not include non-writeable fields if it is a write, otherwise non-displayable fields
-     * will be ignored. Refer to GUIGlobals for isWriteableField(String) and
-     * isDisplayableField(String).
-     */
-    public void write(Writer out, FieldFormatter ff, boolean write) throws IOException {
-        // Write header with type and bibtex-key.
-        out.write("@"+_type.getName().toUpperCase(Locale.US)+"{");
-
-        String str = Util.shaveString(getField(BibtexFields.KEY_FIELD));
-        out.write(((str == null) ? "" : str)+","+Globals.NEWLINE);
-        HashMap<String, String> written = new HashMap<String, String>();
-        written.put(BibtexFields.KEY_FIELD, null);
-        boolean hasWritten = false;
-        // Write required fields first.
-        String[] s = getRequiredFields();
-        if (s != null) for (int i=0; i<s.length; i++) {
-            hasWritten = hasWritten | writeField(s[i], out, ff, hasWritten);
-            written.put(s[i], null);
-        }
-        // Then optional fields.
-        s = getOptionalFields();
-        if (s != null) for (int i=0; i<s.length; i++) {
-            if (!written.containsKey(s[i])) { // If field appears both in req. and opt. don't repeat.
-                //writeField(s[i], out, ff);
-                hasWritten = hasWritten | writeField(s[i], out, ff, hasWritten);
-                written.put(s[i], null);
-            }
-        }
-        // Then write remaining fields in alphabetic order.
-        TreeSet<String> remainingFields = new TreeSet<String>();
-        for (String key : _fields.keySet()){
-            boolean writeIt = (write ? BibtexFields.isWriteableField(key) :
-                               BibtexFields.isDisplayableField(key));
-            if (!written.containsKey(key) && writeIt)
-                       remainingFields.add(key);
-        }
-        for (String field: remainingFields)
-            hasWritten = hasWritten | writeField(field, out, ff, hasWritten);
-
-        // Finally, end the entry.
-        out.write((hasWritten ? Globals.NEWLINE : "")+"}"+Globals.NEWLINE);
-    }
-
-    /**
-     * Write a single field, if it has any content.
-     * @param name The field name
-     * @param out The Writer to send it to
-     * @param ff A formatter to filter field contents before writing
-     * @param isFirst Indicates whether this is the first field written for
-     *    this entry - if not, start by writing a comma and newline
-     * @return true if this field was written, false if it was skipped because
-     *    it was not set
-     * @throws IOException In case of an IO error
-     */
-    private boolean writeField(String name, Writer out,
-                            FieldFormatter ff, boolean isFirst) throws IOException {
-        String o = getField(name);
-        if (o != null) {
-            if (isFirst)
-                out.write(","+Globals.NEWLINE);
-            out.write("  "+name+" = ");
-
-            try {
-                out.write(ff.format(o.toString(), name));
-            } catch (Throwable ex) {
-                throw new IOException
-                    (Globals.lang("Error in field")+" '"+name+"': "+ex.getMessage());
-            }
-            return true;
-        } else
-            return false;
-    }
-
-    /**
-     * Returns a clone of this entry. Useful for copying.
-     */
-    public Object clone() {
-        BibtexEntry clone = new BibtexEntry(_id, _type);
-        clone._fields = new HashMap<String, String>(_fields); 
-        return clone;
-    }
-
-    public String toString() {
-        return getType().getName()+":"+getField(BibtexFields.KEY_FIELD);
-    }
-
-    public boolean isSearchHit() {
-        return searchHit;
-    }
-
-    public void setSearchHit(boolean searchHit) {
-        this.searchHit = searchHit;
-    }
-
-    public boolean isGroupHit() {
-        return groupHit;
-    }
-
-    public void setGroupHit(boolean groupHit) {
-        this.groupHit = groupHit;
-    }
-
-    /**
-     * @param maxCharacters The maximum number of characters (additional
-     * characters are replaced with "..."). Set to 0 to disable truncation.
-     * @return A short textual description of the entry in the format:
-     * Author1, Author2: Title (Year)
-     */
-    public String getAuthorTitleYear(int maxCharacters) {
-        String[] s = new String[] {
-                getField("author"),
-                getField("title"),
-                getField("year")};
-        for (int i = 0; i < s.length; ++i)
-            if (s[i] == null)
-                s[i] = "N/A";
-        String text = s[0] + ": \"" + s[1] + "\" (" + s[2] + ")";
-        if (maxCharacters <= 0 || text.length() <= maxCharacters)
-            return text;
-        return text.substring(0, maxCharacters + 1) + "...";
-    }
-    
-}
+/*
+Copyright (C) 2003 David Weitzman, Morten O. Alver
+
+All programs in this directory and
+subdirectories are published under the GNU General Public License as
+described below.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
+
+Further information about the GNU GPL is available at:
+http://www.gnu.org/copyleft/gpl.ja.html
+
+Note:
+Modified for use in JabRef.
+
+*/
+
+package net.sf.jabref;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyVetoException;
+import java.beans.VetoableChangeListener;
+import java.beans.VetoableChangeSupport;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.*;
+
+import net.sf.jabref.export.FieldFormatter;
+
+
+public class BibtexEntry
+{
+    public final static String ID_FIELD = "id";
+    private String _id;
+    private BibtexEntryType _type;
+    private Map<String, String> _fields = new HashMap<String, String>();
+    VetoableChangeSupport _changeSupport = new VetoableChangeSupport(this);
+
+    // Search and grouping status is stored in boolean fields for quick reference:
+    private boolean searchHit, groupHit;
+
+    public BibtexEntry(){
+    	this(Util.createNeutralId());
+    }
+    
+    public BibtexEntry(String id)
+    {
+        this(id, BibtexEntryType.OTHER);
+    }
+
+    public BibtexEntry(String id, BibtexEntryType type)
+    {
+        if (id == null)
+        {
+            throw new NullPointerException("Every BibtexEntry must have an ID");
+        }
+
+        _id = id;
+        setType(type);
+    }
+
+    /**
+     * Returns an array describing the optional fields for this entry.
+     */
+    public String[] getOptionalFields()
+    {
+        return _type.getOptionalFields();
+    }
+
+    /**
+     * Returns an array describing the required fields for this entry.
+     */
+    public String[] getRequiredFields()
+    {
+        return _type.getRequiredFields();
+    }
+
+    /**
+     * Returns an set containing the names of all fields that are
+     * set for this particular entry.
+     */
+    public Set<String> getAllFields() {
+        return new TreeSet<String>(_fields.keySet());
+    }
+
+    /**
+     * Returns a string describing the required fields for this entry.
+     */
+    public String describeRequiredFields()
+    {
+        return _type.describeRequiredFields();
+    }
+
+    /**
+     * Returns true if this entry contains the fields it needs to be
+     * complete.
+     */
+    public boolean hasAllRequiredFields(BibtexDatabase database)
+    {
+        return _type.hasAllRequiredFields(this, database);
+    }
+
+    /**
+     * Returns this entry's type.
+     */
+    public BibtexEntryType getType()
+    {
+        return _type;
+    }
+
+    /**
+     * Sets this entry's type.
+     */
+    public void setType(BibtexEntryType type)
+    {
+        if (type == null)
+        {
+            throw new NullPointerException(
+                "Every BibtexEntry must have a type.  Instead of null, use type OTHER");
+        }
+
+        BibtexEntryType oldType = _type;
+
+        try {
+            // We set the type before throwing the changeEvent, to enable
+            // the change listener to access the new value if the change
+            // sets off a change in database sorting etc.
+            _type = type;
+            firePropertyChangedEvent(GUIGlobals.TYPE_HEADER,
+                    oldType != null ? oldType.getName() : null,
+                    type.getName());
+        } catch (PropertyVetoException pve) {
+            pve.printStackTrace();
+        }
+
+
+    }
+
+    /**
+     * Prompts the entry to call BibtexEntryType.getType(String) with
+     * its current type name as argument, and sets its type according
+     * to what is returned. This method is called when a user changes
+     * the type customization, to make sure all entries are set with
+     * current types.
+     * @return true if the entry could find a type, false if not (in
+     * this case the type will have been set to
+     * BibtexEntryType.TYPELESS).
+     */
+    public boolean updateType() {
+        BibtexEntryType newType = BibtexEntryType.getType(_type.getName());
+        if (newType != null) {
+            _type = newType;
+            return true;
+        }
+        _type = BibtexEntryType.TYPELESS;
+        return false;
+    }
+
+    /**
+     * Sets this entry's ID, provided the database containing it
+     * doesn't veto the change.
+     */
+    public void setId(String id) throws KeyCollisionException {
+
+        if (id == null) {
+            throw new
+                NullPointerException("Every BibtexEntry must have an ID");
+        }
+
+        try
+        {
+            firePropertyChangedEvent(ID_FIELD, _id, id);
+        }
+        catch (PropertyVetoException pv)
+        {
+            throw new KeyCollisionException("Couldn't change ID: " + pv);
+        }
+
+        _id = id;
+    }
+
+    /**
+     * Returns this entry's ID.
+     */
+    public String getId()
+    {
+        return _id;
+    }
+
+    /**
+     * Returns the contents of the given field, or null if it is not set.
+     */
+    public String getField(String name) {
+        return _fields.get(name);
+    }
+
+    public String getCiteKey() {
+        return (_fields.containsKey(BibtexFields.KEY_FIELD) ?
+                _fields.get(BibtexFields.KEY_FIELD) : null);
+    }
+
+    /**
+     * Sets a number of fields simultaneously. The given HashMap contains field
+     * names as keys, each mapped to the value to set.
+     * WARNING: this method does not notify change listeners, so it should *NOT*
+     * be used for entries that are being displayed in the GUI. Furthermore, it
+     * does not check values for content, so e.g. empty strings will be set as such.
+     */
+    public void setField(Map<String, String> fields){
+        _fields.putAll(fields);
+    }
+
+    /**
+     * Set a field, and notify listeners about the change.
+     *
+     * @param name The field to set.
+     * @param value The value to set.
+     */
+    public void setField(String name, String value) {
+
+        if (ID_FIELD.equals(name)) {
+            throw new IllegalArgumentException("The field name '" + name +
+                                               "' is reserved");
+        }
+
+        String oldValue = _fields.get(name);
+        try {
+            // We set the field before throwing the changeEvent, to enable
+            // the change listener to access the new value if the change
+            // sets off a change in database sorting etc.
+            _fields.put(name, value);
+            firePropertyChangedEvent(name, oldValue, value);
+        } catch (PropertyVetoException pve) {
+            // Since we have already made the change, we must undo it since
+            // the change was rejected:
+            _fields.put(name, oldValue);
+            throw new IllegalArgumentException("Change rejected: " + pve);
+        }
+
+    }
+
+    /**
+     * Remove the mapping for the field name, and notify listeners about
+     * the change.
+     *
+     * @param name The field to clear.
+     */
+    public void clearField(String name) {
+
+      if (ID_FIELD.equals(name)) {
+           throw new IllegalArgumentException("The field name '" + name +
+                                              "' is reserved");
+       }
+       Object oldValue = _fields.get(name);
+       _fields.remove(name);
+       try {
+           firePropertyChangedEvent(name, oldValue, null);
+       } catch (PropertyVetoException pve) {
+           throw new IllegalArgumentException("Change rejected: " + pve);
+       }
+
+
+    }
+
+    /**
+     * Determines whether this entry has all the given fields present. If a non-null
+     * database argument is given, this method will try to look up missing fields in
+     * entries linked by the "crossref" field, if any.
+     *
+     * @param fields An array of field names to be checked.
+     * @param database The database in which to look up crossref'd entries, if any. This
+     *  argument can be null, meaning that no attempt will be made to follow crossrefs.
+     * @return true if all fields are set or could be resolved, false otherwise.
+     */
+    protected boolean allFieldsPresent(String[] fields, BibtexDatabase database) {
+        for (int i = 0; i < fields.length; i++) {
+            if (BibtexDatabase.getResolvedField(fields[i], this, database) == null) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    private void firePropertyChangedEvent(String fieldName, Object oldValue,
+        Object newValue) throws PropertyVetoException
+    {
+        _changeSupport.fireVetoableChange(new PropertyChangeEvent(this,
+                fieldName, oldValue, newValue));
+    }
+
+    /**
+     * Adds a VetoableChangeListener, which is notified of field
+     * changes. This is useful for an object that needs to update
+     * itself each time a field changes.
+     */
+    public void addPropertyChangeListener(VetoableChangeListener listener)
+    {
+        _changeSupport.addVetoableChangeListener(listener);
+    }
+
+    /**
+     * Removes a property listener.
+     */
+    public void removePropertyChangeListener(VetoableChangeListener listener)
+    {
+        _changeSupport.removeVetoableChangeListener(listener);
+    }
+
+    /**
+     * Write this entry to the given Writer, with the given FieldFormatter.
+     * @param write True if this is a write, false if it is a display. The write will
+     * not include non-writeable fields if it is a write, otherwise non-displayable fields
+     * will be ignored. Refer to GUIGlobals for isWriteableField(String) and
+     * isDisplayableField(String).
+     */
+    public void write(Writer out, FieldFormatter ff, boolean write) throws IOException {
+        // Write header with type and bibtex-key.
+        out.write("@"+_type.getName().toUpperCase(Locale.US)+"{");
+
+        String str = Util.shaveString(getField(BibtexFields.KEY_FIELD));
+        out.write(((str == null) ? "" : str)+","+Globals.NEWLINE);
+        HashMap<String, String> written = new HashMap<String, String>();
+        written.put(BibtexFields.KEY_FIELD, null);
+        boolean hasWritten = false;
+        // Write required fields first.
+        String[] s = getRequiredFields();
+        if (s != null) for (int i=0; i<s.length; i++) {
+            hasWritten = hasWritten | writeField(s[i], out, ff, hasWritten);
+            written.put(s[i], null);
+        }
+        // Then optional fields.
+        s = getOptionalFields();
+        if (s != null) for (int i=0; i<s.length; i++) {
+            if (!written.containsKey(s[i])) { // If field appears both in req. and opt. don't repeat.
+                //writeField(s[i], out, ff);
+                hasWritten = hasWritten | writeField(s[i], out, ff, hasWritten);
+                written.put(s[i], null);
+            }
+        }
+        // Then write remaining fields in alphabetic order.
+        TreeSet<String> remainingFields = new TreeSet<String>();
+        for (String key : _fields.keySet()){
+            boolean writeIt = (write ? BibtexFields.isWriteableField(key) :
+                               BibtexFields.isDisplayableField(key));
+            if (!written.containsKey(key) && writeIt)
+                       remainingFields.add(key);
+        }
+        for (String field: remainingFields)
+            hasWritten = hasWritten | writeField(field, out, ff, hasWritten);
+
+        // Finally, end the entry.
+        out.write((hasWritten ? Globals.NEWLINE : "")+"}"+Globals.NEWLINE);
+    }
+
+    /**
+     * Write a single field, if it has any content.
+     * @param name The field name
+     * @param out The Writer to send it to
+     * @param ff A formatter to filter field contents before writing
+     * @param isFirst Indicates whether this is the first field written for
+     *    this entry - if not, start by writing a comma and newline
+     * @return true if this field was written, false if it was skipped because
+     *    it was not set
+     * @throws IOException In case of an IO error
+     */
+    private boolean writeField(String name, Writer out,
+                            FieldFormatter ff, boolean isFirst) throws IOException {
+        String o = getField(name);
+        if (o != null) {
+            if (isFirst)
+                out.write(","+Globals.NEWLINE);
+            out.write("  "+name+" = ");
+
+            try {
+                out.write(ff.format(o.toString(), name));
+            } catch (Throwable ex) {
+                throw new IOException
+                    (Globals.lang("Error in field")+" '"+name+"': "+ex.getMessage());
+            }
+            return true;
+        } else
+            return false;
+    }
+
+    /**
+     * Returns a clone of this entry. Useful for copying.
+     */
+    public Object clone() {
+        BibtexEntry clone = new BibtexEntry(_id, _type);
+        clone._fields = new HashMap<String, String>(_fields); 
+        return clone;
+    }
+
+    public String toString() {
+        return getType().getName()+":"+getField(BibtexFields.KEY_FIELD);
+    }
+
+    public boolean isSearchHit() {
+        return searchHit;
+    }
+
+    public void setSearchHit(boolean searchHit) {
+        this.searchHit = searchHit;
+    }
+
+    public boolean isGroupHit() {
+        return groupHit;
+    }
+
+    public void setGroupHit(boolean groupHit) {
+        this.groupHit = groupHit;
+    }
+
+    /**
+     * @param maxCharacters The maximum number of characters (additional
+     * characters are replaced with "..."). Set to 0 to disable truncation.
+     * @return A short textual description of the entry in the format:
+     * Author1, Author2: Title (Year)
+     */
+    public String getAuthorTitleYear(int maxCharacters) {
+        String[] s = new String[] {
+                getField("author"),
+                getField("title"),
+                getField("year")};
+        for (int i = 0; i < s.length; ++i)
+            if (s[i] == null)
+                s[i] = "N/A";
+        String text = s[0] + ": \"" + s[1] + "\" (" + s[2] + ")";
+        if (maxCharacters <= 0 || text.length() <= maxCharacters)
+            return text;
+        return text.substring(0, maxCharacters + 1) + "...";
+    }
+    
+}
diff --git a/src/java/net/sf/jabref/BibtexEntryType.java b/src/java/net/sf/jabref/BibtexEntryType.java
index f60c269..6247980 100644
--- a/src/java/net/sf/jabref/BibtexEntryType.java
+++ b/src/java/net/sf/jabref/BibtexEntryType.java
@@ -1,1065 +1,1065 @@
-/*
-Copyright (C) 2003 David Weitzman, Morten O. Alver
-
-All programs in this directory and
-subdirectories are published under the GNU General Public License as
-described below.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA
-
-Further information about the GNU GPL is available at:
-http://www.gnu.org/copyleft/gpl.ja.html
-
-Note:
-Modified for use in JabRef.
-
-*/
-package net.sf.jabref;
-
-import java.util.Iterator;
-import java.util.TreeMap;
-import java.util.Locale;
-
-public abstract class BibtexEntryType implements Comparable<BibtexEntryType>
-{
-
-    public static final BibtexEntryType OTHER =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Other";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[0];
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[0];
-            }
-
-
-            public String describeRequiredFields()
-            {
-                return "";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return true;
-            }
-        };
-
-
-    public static final BibtexEntryType ARTICLE =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Article";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "number", "month", "part", "eid", "note"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "author", "title", "journal", "year", "volume", "pages"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "AUTHOR, TITLE, JOURNAL and YEAR";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-                        "author", "title", "journal", "year", "bibtexkey", "volume", "pages"
-                    }, database);
-            }
-        };
-
-    public static final BibtexEntryType BOOKLET =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Booklet";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "author", "howpublished", "lastchecked", "address", "month", "year", "note"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "title"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "TITLE";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-                        "title", "bibtexkey"
-                    }, database);
-            }
-        };
-
-
-   public static final BibtexEntryType INBOOK =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Inbook";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "volume", "number", "pages", "series", "type", "address", "edition",
-		    "month", "note"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "chapter", "pages", "title", "publisher", "year", "editor",
-		    "author"
-                };
-            }
-
-            @Override
-            public String[] getRequiredFieldsForCustomization() {
-                return new String[] {"author/editor", "title", "chapter/pages", "year", "publisher"};
-            }
-
-            public String describeRequiredFields()
-            {
-                return "TITLE, CHAPTER and/or PAGES, PUBLISHER, YEAR, and an "
-		    +"EDITOR and/or AUTHOR";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-                        "title", "publisher", "year", "bibtexkey"
-                    }, database) &&
-		    (((entry.getField("author") != null) ||
-		      (entry.getField("editor") != null)) &&
-		     ((entry.getField("chapter") != null) ||
-		      (entry.getField("pages") != null)));
-            }
-        };
-
-    public static final BibtexEntryType BOOK =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Book";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "volume", "number", "pages", "series", "address", "edition", "month",
-                    "note"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "title", "publisher", "year", "editor", "author"
-                };
-            }
-
-            public String[] getRequiredFieldsForCustomization()
-            {
-                return new String[]
-                {
-                    "title", "publisher", "year", "author/editor"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "TITLE, PUBLISHER, YEAR, and an EDITOR and/or AUTHOR";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-                        "title", "publisher", "year", "bibtexkey"
-                    }, database) &&
-                ((entry.getField("author") != null) ||
-                (entry.getField("editor") != null));
-            }
-        };
-
-
-    public static final BibtexEntryType INCOLLECTION =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Incollection";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "editor", "volume", "number", "series", "type", "chapter",
-		    "pages", "address", "edition", "month", "note"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "author", "title", "booktitle", "publisher", "year"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "AUTHOR, TITLE, BOOKTITLE, PUBLISHER and YEAR";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-			"author", "title", "booktitle", "publisher", "year",
-			"bibtexkey"
-
-                    }, database);
-            }
-        };
-
-    public static final BibtexEntryType CONFERENCE =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Conference";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "editor", "volume", "number", "series", "pages",
-		    "address", "month", "organization", "publisher", "note"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "author", "title", "booktitle", "year"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "AUTHOR, TITLE, BOOKTITLE and YEAR";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-			"author", "title", "booktitle", "year" , "bibtexkey"
-                    }, database);
-            }
-        };
-
-    public static final BibtexEntryType INPROCEEDINGS =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Inproceedings";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "editor", "volume", "number", "series", "pages",
-		    "address", "month", "organization", "publisher", "note"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "author", "title", "booktitle", "year"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "AUTHOR, TITLE, BOOKTITLE and YEAR";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-			"author", "title", "booktitle", "year" , "bibtexkey"
-                    }, database);
-            }
-        };
-
-    public static final BibtexEntryType PROCEEDINGS =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Proceedings";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "editor", "volume", "number", "series", "address",
-		    "publisher", "note", "month", "organization"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "title", "year"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "TITLE and YEAR";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-			"title", "year", "bibtexkey"
-                    }, database);
-            }
-        };
-
-
-    public static final BibtexEntryType MANUAL =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Manual";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "author", "organization", "address", "edition",
-		    "month", "year", "note"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "title"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "TITLE";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-                        "title", "bibtexkey"
-                    }, database);
-            }
-        };
-
-    public static final BibtexEntryType TECHREPORT =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Techreport";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "type", "number", "address", "month", "note"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "author", "title", "institution", "year"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "AUTHOR, TITLE, INSTITUTION and YEAR";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-			"author", "title", "institution", "year",
-			"bibtexkey"
-                    }, database);
-            }
-        };
-
-
-    public static final BibtexEntryType MASTERSTHESIS =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Mastersthesis";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "type", "address", "month", "note"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "author", "title", "school", "year"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "AUTHOR, TITLE, SCHOOL and YEAR";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-                        "author", "title", "school", "year", "bibtexkey"
-                    }, database);
-            }
-        };
-
-
-    public static final BibtexEntryType PHDTHESIS =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Phdthesis";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "type", "address", "month", "note"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "author", "title", "school", "year"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "AUTHOR, TITLE, SCHOOL and YEAR";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-                        "author", "title", "school", "year", "bibtexkey"
-                    }, database);
-            }
-        };
-
-    public static final BibtexEntryType UNPUBLISHED =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Unpublished";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "month", "year"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "author", "title", "note"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "AUTHOR, TITLE and NOTE";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-			"author", "title", "note", "bibtexkey"
-                    }, database);
-            }
-        };
-
-     public static final BibtexEntryType PERIODICAL =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Periodical";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "editor", "language", "series", "volume", "number", "organization", "month", "note", "url"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "title", "year"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "TITLE and YEAR";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-                        "title", "year", "bibtexkey"
-                    }, database);
-            }
-        };
-
-     public static final BibtexEntryType PATENT =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Patent";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "author", "title", "language", "assignee", "address", "type", "number", "day", "dayfiled", "month", "monthfiled", "note", "url"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "nationality", "number", "year", "yearfiled"
-                };
-            }
-
-            public String describeRequiredFields()
-            {
-                return "NATIONALITY, NUMBER, YEAR or YEARFILED";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-                        "number", "bibtexkey"
-                    }, database) &&
-                ((entry.getField("year") != null) ||
-                (entry.getField("yearfiled") != null));
-            }
-        };
-
-   public static final BibtexEntryType STANDARD =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Standard";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "author", "language", "howpublished", "type", "number", "revision", "address", "month", "year", "note", "url"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return new String[]
-                {
-                    "title", "organization", "institution"
-                };
-            }
-
-            @Override
-            public String[] getRequiredFieldsForCustomization() {
-                return new String[] {"title", "organization/institution"};
-            }
-
-            public String describeRequiredFields()
-            {
-                return "TITLE, ORGANIZATION or INSTITUTION";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-                        "title", "bibtexkey"
-                    }, database) &&
-                ((entry.getField("organization") != null) ||
-                (entry.getField("institution") != null));
-            }
-        };
-
-    public static final BibtexEntryType ELECTRONIC =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Electronic";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "author", "month", "year", "title", "language", "howpublished", "organization", "address", "note", "url"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return null;
-            }
-
-            public String describeRequiredFields()
-            {
-                return "None";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-                return entry.allFieldsPresent(new String[]
-                    {
-                        "bibtexkey"
-                    }, database);
-            }
-        };
-
-    public static final BibtexEntryType MISC =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Misc";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[]
-                {
-                    "author", "title", "howpublished", "month", "year", "note"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return null;
-            }
-
-            public String describeRequiredFields()
-            {
-                return "None";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-		return entry.allFieldsPresent(new String[]
-                    {
-			"bibtexkey"
-                    }, database);
-            }
-        };
-
-    /**
-     * This type is used for IEEEtran.bst to control various 
-     * be repeated or not. Not a very elegant solution, but it works...
-     */
-    public static final BibtexEntryType IEEETRANBSTCTL =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "IEEEtranBSTCTL";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return new String[] {
-                "ctluse_article_number", "ctluse_paper", "ctluse_forced_etal",
-                "ctlmax_names_forced_etal", "ctlnames_show_etal", "ctluse_alt_spacing",
-                "ctlalt_stretch_factor", "ctldash_repeated_names", "ctlname_format_string",
-                "ctlname_latex_cmd", "ctlname_url_prefix"
-                };
-            }
-
-            public String[] getRequiredFields()
-            {
-                return null;
-            }
-
-            public String describeRequiredFields()
-            {
-                return "None";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-		return true;
-           }
-
-            public boolean isVisibleAtNewEntryDialog() {
-            	return false;
-            }
-};
-
-    /**
-     * This type is provided as an emergency choice if the user makes
-     * customization changes that remove the type of an entry.
-     */
-    public static final BibtexEntryType TYPELESS =
-        new BibtexEntryType()
-        {
-            public String getName()
-            {
-                return "Typeless";
-            }
-
-            public String[] getOptionalFields()
-            {
-                return null;
-            }
-
-            public String[] getRequiredFields()
-            {
-                return null;
-            }
-
-            public String describeRequiredFields()
-            {
-                return "None";
-            }
-
-            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
-            {
-		return false;
-           }
-        };
-
-
-    public abstract String getName();
-
-    public int compareTo(BibtexEntryType o) {
-	return getName().compareTo(o.getName());
-    }
-
-    public abstract String[] getOptionalFields();
-
-    public abstract String[] getRequiredFields();
-
-    public String[] getPrimaryOptionalFields() {
-        return new String[0];
-    }
-
-    public abstract String describeRequiredFields();
-
-    public abstract boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database);
-
-
-    public String[] getUtilityFields(){
-        return new String[] {"search" } ;
-    }
-
-
-    public boolean isRequired(String field) {
-	String[] req = getRequiredFields();
-	if (req == null) return false;
-	for (int i=0; i<req.length; i++)
-	    if (req[i].equals(field)) return true;
-	return false;
-    }
-
-    public boolean isOptional(String field) {
-	String[] opt = getOptionalFields();
-	if (opt == null) return false;
-	for (int i=0; i<opt.length; i++)
-	    if (opt[i].equals(field)) return true;
-	return false;
-    }
-    
-    public boolean isVisibleAtNewEntryDialog() {
-    	return true;
-    }
-
-    public static TreeMap<String, BibtexEntryType> ALL_TYPES = new TreeMap<String, BibtexEntryType>();
-    public static TreeMap<String, BibtexEntryType> STANDARD_TYPES = new TreeMap<String, BibtexEntryType>();
-    static {
-        // Put the standard entry types into the type map.
-        if (!Globals.prefs.getBoolean("biblatexMode")) {
-            ALL_TYPES.put("article", ARTICLE);
-            ALL_TYPES.put("inbook", INBOOK);
-            ALL_TYPES.put("book", BOOK);
-            ALL_TYPES.put("booklet", BOOKLET);
-            ALL_TYPES.put("incollection", INCOLLECTION);
-            ALL_TYPES.put("conference", CONFERENCE);
-            ALL_TYPES.put("inproceedings", INPROCEEDINGS);
-            ALL_TYPES.put("proceedings", PROCEEDINGS);
-            ALL_TYPES.put("manual", MANUAL);
-            ALL_TYPES.put("mastersthesis", MASTERSTHESIS);
-            ALL_TYPES.put("phdthesis", PHDTHESIS);
-            ALL_TYPES.put("techreport", TECHREPORT);
-            ALL_TYPES.put("unpublished", UNPUBLISHED);
-            ALL_TYPES.put("patent", PATENT);
-            ALL_TYPES.put("standard", STANDARD);
-            ALL_TYPES.put("electronic", ELECTRONIC);
-            ALL_TYPES.put("periodical", PERIODICAL);
-            ALL_TYPES.put("misc", MISC);
-            ALL_TYPES.put("other", OTHER);
-            ALL_TYPES.put("ieeetranbstctl", IEEETRANBSTCTL);
-        }
-        else {
-            ALL_TYPES.put("article", BibLatexEntryTypes.ARTICLE);
-	    ALL_TYPES.put("book", BibLatexEntryTypes.BOOK);
-	    ALL_TYPES.put("inbook", BibLatexEntryTypes.INBOOK);
-	    ALL_TYPES.put("bookinbook", BibLatexEntryTypes.BOOKINBOOK);
-	    ALL_TYPES.put("suppbook", BibLatexEntryTypes.SUPPBOOK);
-	    ALL_TYPES.put("booklet", BibLatexEntryTypes.BOOKLET);
-	    ALL_TYPES.put("collection", BibLatexEntryTypes.COLLECTION);
-	    ALL_TYPES.put("incollection", BibLatexEntryTypes.INCOLLECTION);
-	    ALL_TYPES.put("suppcollection", BibLatexEntryTypes.SUPPCOLLECTION);
-	    ALL_TYPES.put("manual", BibLatexEntryTypes.MANUAL);
-	    ALL_TYPES.put("misc", BibLatexEntryTypes.MISC);
-	    ALL_TYPES.put("online", BibLatexEntryTypes.ONLINE);
-	    ALL_TYPES.put("patent", BibLatexEntryTypes.PATENT);
-	    ALL_TYPES.put("periodical", BibLatexEntryTypes.PERIODICAL);
-	    ALL_TYPES.put("suppperiodical", BibLatexEntryTypes.SUPPPERIODICAL);
-	    ALL_TYPES.put("proceedings", BibLatexEntryTypes.PROCEEDINGS);
-	    ALL_TYPES.put("inproceedings", BibLatexEntryTypes.INPROCEEDINGS);
-	    ALL_TYPES.put("reference", BibLatexEntryTypes.REFERENCE);
-	    ALL_TYPES.put("inreference", BibLatexEntryTypes.INREFERENCE);
-	    ALL_TYPES.put("report", BibLatexEntryTypes.REPORT);
-	    ALL_TYPES.put("set", BibLatexEntryTypes.SET);
-	    ALL_TYPES.put("thesis", BibLatexEntryTypes.THESIS);
-	    ALL_TYPES.put("unpublished", BibLatexEntryTypes.UNPUBLISHED);
-	    ALL_TYPES.put("conference", BibLatexEntryTypes.CONFERENCE);
-	    ALL_TYPES.put("electronic", BibLatexEntryTypes.ELECTRONIC);
-	    ALL_TYPES.put("mastersthesis", BibLatexEntryTypes.MASTERSTHESIS);
-	    ALL_TYPES.put("phdthesis", BibLatexEntryTypes.PHDTHESIS);
-	    ALL_TYPES.put("techreport", BibLatexEntryTypes.TECHREPORT);
-	    ALL_TYPES.put("www", BibLatexEntryTypes.WWW);
-            ALL_TYPES.put("ieeetranbstctl", BibLatexEntryTypes.IEEETRANBSTCTL);
-        }
-
-        // We need a record of the standard types, in case the user wants
-        // to remove a customized version. Therefore we clone the map.
-        STANDARD_TYPES = new TreeMap<String, BibtexEntryType>(ALL_TYPES);
-    }
-
-    /**
-     * This method returns the BibtexEntryType for the name of a type,
-     * or null if it does not exist.
-     */
-    public static BibtexEntryType getType(String name) {
-	//Util.pr("'"+name+"'");
-	Object o = ALL_TYPES.get(name.toLowerCase(Locale.US));
-	if (o == null)
-	    return null;
-	else return (BibtexEntryType)o;
-    }
-
-    /**
-     * This method returns the standard BibtexEntryType for the
-     * name of a type, or null if it does not exist.
-     */
-    public static BibtexEntryType getStandardType(String name) {
-	//Util.pr("'"+name+"'");
-	Object o = STANDARD_TYPES.get(name.toLowerCase());
-	if (o == null)
-	    return null;
-	else return (BibtexEntryType)o;
-    }
-
-    /**
-     * Removes a customized entry type from the type map. If this type
-     * overrode a standard type, we reinstate the standard one.
-     *
-     * @param name The customized entry type to remove.
-     */
-    public static void removeType(String name) {
-	//BibtexEntryType type = getType(name);
-	String nm = name.toLowerCase();
-        //System.out.println(ALL_TYPES.size());
-	ALL_TYPES.remove(nm);
-        //System.out.println(ALL_TYPES.size());
-	if (STANDARD_TYPES.get(nm) != null) {
-	    // In this case the user has removed a customized version
-	    // of a standard type. We reinstate the standard type.
-	    ALL_TYPES.put(nm, STANDARD_TYPES.get(nm));
-	}
-
-    }
-
-    /**
-     * Load all custom entry types from preferences. This method is
-     * called from JabRef when the program starts.
-     */
-    public static void loadCustomEntryTypes(JabRefPreferences prefs) {
-	int number = 0;
-	CustomEntryType type;
-	while ((type = prefs.getCustomEntryType(number)) != null) {
-	    ALL_TYPES.put(type.getName().toLowerCase(), type);
-	    number++;
-	}
-    }
-
-    /**
-     * Iterate through all entry types, and store those that are
-     * custom defined to preferences. This method is called from
-     * JabRefFrame when the program closes.
-     */
-    public static void saveCustomEntryTypes(JabRefPreferences prefs) {
-	Iterator<String> i=ALL_TYPES.keySet().iterator();
-	int number = 0;
-	//Vector customTypes = new Vector(10, 10);
-	while (i.hasNext()) {
-	    Object o=ALL_TYPES.get(i.next());
-	    if (o instanceof CustomEntryType) {
-		// Store this entry type.
-		prefs.storeCustomEntryType((CustomEntryType)o, number);
-		number++;
-	    }
-	}
-	// Then, if there are more 'old' custom types defined, remove these
-	// from preferences. This is necessary if the number of custom types
-	// has decreased.
-	prefs.purgeCustomEntryTypes(number);
-    }
-
-    /**
-     * Get an array of the required fields in a form appropriate for the entry customization
-     * dialog - that is, thie either-or fields together and separated by slashes.
-     * @return Array of the required fields in a form appropriate for the entry customization dialog.
-     */
-    public String[] getRequiredFieldsForCustomization() {
-        return getRequiredFields();
-    }
-}
+/*
+Copyright (C) 2003 David Weitzman, Morten O. Alver
+
+All programs in this directory and
+subdirectories are published under the GNU General Public License as
+described below.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
+
+Further information about the GNU GPL is available at:
+http://www.gnu.org/copyleft/gpl.ja.html
+
+Note:
+Modified for use in JabRef.
+
+*/
+package net.sf.jabref;
+
+import java.util.Iterator;
+import java.util.TreeMap;
+import java.util.Locale;
+
+public abstract class BibtexEntryType implements Comparable<BibtexEntryType>
+{
+
+    public static final BibtexEntryType OTHER =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Other";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[0];
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[0];
+            }
+
+
+            public String describeRequiredFields()
+            {
+                return "";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return true;
+            }
+        };
+
+
+    public static final BibtexEntryType ARTICLE =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Article";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "number", "month", "part", "eid", "note"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "author", "title", "journal", "year", "volume", "pages"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "AUTHOR, TITLE, JOURNAL and YEAR";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+                        "author", "title", "journal", "year", "bibtexkey", "volume", "pages"
+                    }, database);
+            }
+        };
+
+    public static final BibtexEntryType BOOKLET =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Booklet";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "author", "howpublished", "lastchecked", "address", "month", "year", "note"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "title"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "TITLE";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+                        "title", "bibtexkey"
+                    }, database);
+            }
+        };
+
+
+   public static final BibtexEntryType INBOOK =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Inbook";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "volume", "number", "pages", "series", "type", "address", "edition",
+		    "month", "note"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "chapter", "pages", "title", "publisher", "year", "editor",
+		    "author"
+                };
+            }
+
+            @Override
+            public String[] getRequiredFieldsForCustomization() {
+                return new String[] {"author/editor", "title", "chapter/pages", "year", "publisher"};
+            }
+
+            public String describeRequiredFields()
+            {
+                return "TITLE, CHAPTER and/or PAGES, PUBLISHER, YEAR, and an "
+		    +"EDITOR and/or AUTHOR";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+                        "title", "publisher", "year", "bibtexkey"
+                    }, database) &&
+		    (((entry.getField("author") != null) ||
+		      (entry.getField("editor") != null)) &&
+		     ((entry.getField("chapter") != null) ||
+		      (entry.getField("pages") != null)));
+            }
+        };
+
+    public static final BibtexEntryType BOOK =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Book";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "volume", "number", "pages", "series", "address", "edition", "month",
+                    "note"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "title", "publisher", "year", "editor", "author"
+                };
+            }
+
+            public String[] getRequiredFieldsForCustomization()
+            {
+                return new String[]
+                {
+                    "title", "publisher", "year", "author/editor"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "TITLE, PUBLISHER, YEAR, and an EDITOR and/or AUTHOR";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+                        "title", "publisher", "year", "bibtexkey"
+                    }, database) &&
+                ((entry.getField("author") != null) ||
+                (entry.getField("editor") != null));
+            }
+        };
+
+
+    public static final BibtexEntryType INCOLLECTION =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Incollection";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "editor", "volume", "number", "series", "type", "chapter",
+		    "pages", "address", "edition", "month", "note"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "author", "title", "booktitle", "publisher", "year"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "AUTHOR, TITLE, BOOKTITLE, PUBLISHER and YEAR";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+			"author", "title", "booktitle", "publisher", "year",
+			"bibtexkey"
+
+                    }, database);
+            }
+        };
+
+    public static final BibtexEntryType CONFERENCE =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Conference";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "editor", "volume", "number", "series", "pages",
+		    "address", "month", "organization", "publisher", "note"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "author", "title", "booktitle", "year"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "AUTHOR, TITLE, BOOKTITLE and YEAR";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+			"author", "title", "booktitle", "year" , "bibtexkey"
+                    }, database);
+            }
+        };
+
+    public static final BibtexEntryType INPROCEEDINGS =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Inproceedings";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "editor", "volume", "number", "series", "pages",
+		    "address", "month", "organization", "publisher", "note"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "author", "title", "booktitle", "year"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "AUTHOR, TITLE, BOOKTITLE and YEAR";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+			"author", "title", "booktitle", "year" , "bibtexkey"
+                    }, database);
+            }
+        };
+
+    public static final BibtexEntryType PROCEEDINGS =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Proceedings";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "editor", "volume", "number", "series", "address",
+		    "publisher", "note", "month", "organization"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "title", "year"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "TITLE and YEAR";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+			"title", "year", "bibtexkey"
+                    }, database);
+            }
+        };
+
+
+    public static final BibtexEntryType MANUAL =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Manual";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "author", "organization", "address", "edition",
+		    "month", "year", "note"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "title"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "TITLE";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+                        "title", "bibtexkey"
+                    }, database);
+            }
+        };
+
+    public static final BibtexEntryType TECHREPORT =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Techreport";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "type", "number", "address", "month", "note"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "author", "title", "institution", "year"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "AUTHOR, TITLE, INSTITUTION and YEAR";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+			"author", "title", "institution", "year",
+			"bibtexkey"
+                    }, database);
+            }
+        };
+
+
+    public static final BibtexEntryType MASTERSTHESIS =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Mastersthesis";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "type", "address", "month", "note"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "author", "title", "school", "year"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "AUTHOR, TITLE, SCHOOL and YEAR";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+                        "author", "title", "school", "year", "bibtexkey"
+                    }, database);
+            }
+        };
+
+
+    public static final BibtexEntryType PHDTHESIS =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Phdthesis";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "type", "address", "month", "note"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "author", "title", "school", "year"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "AUTHOR, TITLE, SCHOOL and YEAR";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+                        "author", "title", "school", "year", "bibtexkey"
+                    }, database);
+            }
+        };
+
+    public static final BibtexEntryType UNPUBLISHED =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Unpublished";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "month", "year"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "author", "title", "note"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "AUTHOR, TITLE and NOTE";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+			"author", "title", "note", "bibtexkey"
+                    }, database);
+            }
+        };
+
+     public static final BibtexEntryType PERIODICAL =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Periodical";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "editor", "language", "series", "volume", "number", "organization", "month", "note", "url"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "title", "year"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "TITLE and YEAR";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+                        "title", "year", "bibtexkey"
+                    }, database);
+            }
+        };
+
+     public static final BibtexEntryType PATENT =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Patent";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "author", "title", "language", "assignee", "address", "type", "number", "day", "dayfiled", "month", "monthfiled", "note", "url"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "nationality", "number", "year", "yearfiled"
+                };
+            }
+
+            public String describeRequiredFields()
+            {
+                return "NATIONALITY, NUMBER, YEAR or YEARFILED";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+                        "number", "bibtexkey"
+                    }, database) &&
+                ((entry.getField("year") != null) ||
+                (entry.getField("yearfiled") != null));
+            }
+        };
+
+   public static final BibtexEntryType STANDARD =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Standard";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "author", "language", "howpublished", "type", "number", "revision", "address", "month", "year", "note", "url"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return new String[]
+                {
+                    "title", "organization", "institution"
+                };
+            }
+
+            @Override
+            public String[] getRequiredFieldsForCustomization() {
+                return new String[] {"title", "organization/institution"};
+            }
+
+            public String describeRequiredFields()
+            {
+                return "TITLE, ORGANIZATION or INSTITUTION";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+                        "title", "bibtexkey"
+                    }, database) &&
+                ((entry.getField("organization") != null) ||
+                (entry.getField("institution") != null));
+            }
+        };
+
+    public static final BibtexEntryType ELECTRONIC =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Electronic";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "author", "month", "year", "title", "language", "howpublished", "organization", "address", "note", "url"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return null;
+            }
+
+            public String describeRequiredFields()
+            {
+                return "None";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+                return entry.allFieldsPresent(new String[]
+                    {
+                        "bibtexkey"
+                    }, database);
+            }
+        };
+
+    public static final BibtexEntryType MISC =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Misc";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[]
+                {
+                    "author", "title", "howpublished", "month", "year", "note"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return null;
+            }
+
+            public String describeRequiredFields()
+            {
+                return "None";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+		return entry.allFieldsPresent(new String[]
+                    {
+			"bibtexkey"
+                    }, database);
+            }
+        };
+
+    /**
+     * This type is used for IEEEtran.bst to control various 
+     * be repeated or not. Not a very elegant solution, but it works...
+     */
+    public static final BibtexEntryType IEEETRANBSTCTL =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "IEEEtranBSTCTL";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return new String[] {
+                "ctluse_article_number", "ctluse_paper", "ctluse_forced_etal",
+                "ctlmax_names_forced_etal", "ctlnames_show_etal", "ctluse_alt_spacing",
+                "ctlalt_stretch_factor", "ctldash_repeated_names", "ctlname_format_string",
+                "ctlname_latex_cmd", "ctlname_url_prefix"
+                };
+            }
+
+            public String[] getRequiredFields()
+            {
+                return null;
+            }
+
+            public String describeRequiredFields()
+            {
+                return "None";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+		return true;
+           }
+
+            public boolean isVisibleAtNewEntryDialog() {
+            	return false;
+            }
+};
+
+    /**
+     * This type is provided as an emergency choice if the user makes
+     * customization changes that remove the type of an entry.
+     */
+    public static final BibtexEntryType TYPELESS =
+        new BibtexEntryType()
+        {
+            public String getName()
+            {
+                return "Typeless";
+            }
+
+            public String[] getOptionalFields()
+            {
+                return null;
+            }
+
+            public String[] getRequiredFields()
+            {
+                return null;
+            }
+
+            public String describeRequiredFields()
+            {
+                return "None";
+            }
+
+            public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
+            {
+		return false;
+           }
+        };
+
+
+    public abstract String getName();
+
+    public int compareTo(BibtexEntryType o) {
+	return getName().compareTo(o.getName());
+    }
+
+    public abstract String[] getOptionalFields();
+
+    public abstract String[] getRequiredFields();
+
+    public String[] getPrimaryOptionalFields() {
+        return new String[0];
+    }
+
+    public abstract String describeRequiredFields();
+
+    public abstract boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database);
+
+
+    public String[] getUtilityFields(){
+        return new String[] {"search" } ;
+    }
+
+
+    public boolean isRequired(String field) {
+	String[] req = getRequiredFields();
+	if (req == null) return false;
+	for (int i=0; i<req.length; i++)
+	    if (req[i].equals(field)) return true;
+	return false;
+    }
+
+    public boolean isOptional(String field) {
+	String[] opt = getOptionalFields();
+	if (opt == null) return false;
+	for (int i=0; i<opt.length; i++)
+	    if (opt[i].equals(field)) return true;
+	return false;
+    }
+    
+    public boolean isVisibleAtNewEntryDialog() {
+    	return true;
+    }
+
+    public static TreeMap<String, BibtexEntryType> ALL_TYPES = new TreeMap<String, BibtexEntryType>();
+    public static TreeMap<String, BibtexEntryType> STANDARD_TYPES = new TreeMap<String, BibtexEntryType>();
+    static {
+        // Put the standard entry types into the type map.
+        if (!Globals.prefs.getBoolean("biblatexMode")) {
+            ALL_TYPES.put("article", ARTICLE);
+            ALL_TYPES.put("inbook", INBOOK);
+            ALL_TYPES.put("book", BOOK);
+            ALL_TYPES.put("booklet", BOOKLET);
+            ALL_TYPES.put("incollection", INCOLLECTION);
+            ALL_TYPES.put("conference", CONFERENCE);
+            ALL_TYPES.put("inproceedings", INPROCEEDINGS);
+            ALL_TYPES.put("proceedings", PROCEEDINGS);
+            ALL_TYPES.put("manual", MANUAL);
+            ALL_TYPES.put("mastersthesis", MASTERSTHESIS);
+            ALL_TYPES.put("phdthesis", PHDTHESIS);
+            ALL_TYPES.put("techreport", TECHREPORT);
+            ALL_TYPES.put("unpublished", UNPUBLISHED);
+            ALL_TYPES.put("patent", PATENT);
+            ALL_TYPES.put("standard", STANDARD);
+            ALL_TYPES.put("electronic", ELECTRONIC);
+            ALL_TYPES.put("periodical", PERIODICAL);
+            ALL_TYPES.put("misc", MISC);
+            ALL_TYPES.put("other", OTHER);
+            ALL_TYPES.put("ieeetranbstctl", IEEETRANBSTCTL);
+        }
+        else {
+            ALL_TYPES.put("article", BibLatexEntryTypes.ARTICLE);
+	    ALL_TYPES.put("book", BibLatexEntryTypes.BOOK);
+	    ALL_TYPES.put("inbook", BibLatexEntryTypes.INBOOK);
+	    ALL_TYPES.put("bookinbook", BibLatexEntryTypes.BOOKINBOOK);
+	    ALL_TYPES.put("suppbook", BibLatexEntryTypes.SUPPBOOK);
+	    ALL_TYPES.put("booklet", BibLatexEntryTypes.BOOKLET);
+	    ALL_TYPES.put("collection", BibLatexEntryTypes.COLLECTION);
+	    ALL_TYPES.put("incollection", BibLatexEntryTypes.INCOLLECTION);
+	    ALL_TYPES.put("suppcollection", BibLatexEntryTypes.SUPPCOLLECTION);
+	    ALL_TYPES.put("manual", BibLatexEntryTypes.MANUAL);
+	    ALL_TYPES.put("misc", BibLatexEntryTypes.MISC);
+	    ALL_TYPES.put("online", BibLatexEntryTypes.ONLINE);
+	    ALL_TYPES.put("patent", BibLatexEntryTypes.PATENT);
+	    ALL_TYPES.put("periodical", BibLatexEntryTypes.PERIODICAL);
+	    ALL_TYPES.put("suppperiodical", BibLatexEntryTypes.SUPPPERIODICAL);
+	    ALL_TYPES.put("proceedings", BibLatexEntryTypes.PROCEEDINGS);
+	    ALL_TYPES.put("inproceedings", BibLatexEntryTypes.INPROCEEDINGS);
+	    ALL_TYPES.put("reference", BibLatexEntryTypes.REFERENCE);
+	    ALL_TYPES.put("inreference", BibLatexEntryTypes.INREFERENCE);
+	    ALL_TYPES.put("report", BibLatexEntryTypes.REPORT);
+	    ALL_TYPES.put("set", BibLatexEntryTypes.SET);
+	    ALL_TYPES.put("thesis", BibLatexEntryTypes.THESIS);
+	    ALL_TYPES.put("unpublished", BibLatexEntryTypes.UNPUBLISHED);
+	    ALL_TYPES.put("conference", BibLatexEntryTypes.CONFERENCE);
+	    ALL_TYPES.put("electronic", BibLatexEntryTypes.ELECTRONIC);
+	    ALL_TYPES.put("mastersthesis", BibLatexEntryTypes.MASTERSTHESIS);
+	    ALL_TYPES.put("phdthesis", BibLatexEntryTypes.PHDTHESIS);
+	    ALL_TYPES.put("techreport", BibLatexEntryTypes.TECHREPORT);
+	    ALL_TYPES.put("www", BibLatexEntryTypes.WWW);
+            ALL_TYPES.put("ieeetranbstctl", BibLatexEntryTypes.IEEETRANBSTCTL);
+        }
+
+        // We need a record of the standard types, in case the user wants
+        // to remove a customized version. Therefore we clone the map.
+        STANDARD_TYPES = new TreeMap<String, BibtexEntryType>(ALL_TYPES);
+    }
+
+    /**
+     * This method returns the BibtexEntryType for the name of a type,
+     * or null if it does not exist.
+     */
+    public static BibtexEntryType getType(String name) {
+	//Util.pr("'"+name+"'");
+	Object o = ALL_TYPES.get(name.toLowerCase(Locale.US));
+	if (o == null)
+	    return null;
+	else return (BibtexEntryType)o;
+    }
+
+    /**
+     * This method returns the standard BibtexEntryType for the
+     * name of a type, or null if it does not exist.
+     */
+    public static BibtexEntryType getStandardType(String name) {
+	//Util.pr("'"+name+"'");
+	Object o = STANDARD_TYPES.get(name.toLowerCase());
+	if (o == null)
+	    return null;
+	else return (BibtexEntryType)o;
+    }
+
+    /**
+     * Removes a customized entry type from the type map. If this type
+     * overrode a standard type, we reinstate the standard one.
+     *
+     * @param name The customized entry type to remove.
+     */
+    public static void removeType(String name) {
+	//BibtexEntryType type = getType(name);
+	String nm = name.toLowerCase();
+        //System.out.println(ALL_TYPES.size());
+	ALL_TYPES.remove(nm);
+        //System.out.println(ALL_TYPES.size());
+	if (STANDARD_TYPES.get(nm) != null) {
+	    // In this case the user has removed a customized version
+	    // of a standard type. We reinstate the standard type.
+	    ALL_TYPES.put(nm, STANDARD_TYPES.get(nm));
+	}
+
+    }
+
+    /**
+     * Load all custom entry types from preferences. This method is
+     * called from JabRef when the program starts.
+     */
+    public static void loadCustomEntryTypes(JabRefPreferences prefs) {
+	int number = 0;
+	CustomEntryType type;
+	while ((type = prefs.getCustomEntryType(number)) != null) {
+	    ALL_TYPES.put(type.getName().toLowerCase(), type);
+	    number++;
+	}
+    }
+
+    /**
+     * Iterate through all entry types, and store those that are
+     * custom defined to preferences. This method is called from
+     * JabRefFrame when the program closes.
+     */
+    public static void saveCustomEntryTypes(JabRefPreferences prefs) {
+	Iterator<String> i=ALL_TYPES.keySet().iterator();
+	int number = 0;
+	//Vector customTypes = new Vector(10, 10);
+	while (i.hasNext()) {
+	    Object o=ALL_TYPES.get(i.next());
+	    if (o instanceof CustomEntryType) {
+		// Store this entry type.
+		prefs.storeCustomEntryType((CustomEntryType)o, number);
+		number++;
+	    }
+	}
+	// Then, if there are more 'old' custom types defined, remove these
+	// from preferences. This is necessary if the number of custom types
+	// has decreased.
+	prefs.purgeCustomEntryTypes(number);
+    }
+
+    /**
+     * Get an array of the required fields in a form appropriate for the entry customization
+     * dialog - that is, thie either-or fields together and separated by slashes.
+     * @return Array of the required fields in a form appropriate for the entry customization dialog.
+     */
+    public String[] getRequiredFieldsForCustomization() {
+        return getRequiredFields();
+    }
+}
diff --git a/src/java/net/sf/jabref/BibtexFields.java b/src/java/net/sf/jabref/BibtexFields.java
index cc128b9..b9f5099 100644
--- a/src/java/net/sf/jabref/BibtexFields.java
+++ b/src/java/net/sf/jabref/BibtexFields.java
@@ -1,731 +1,731 @@
-/*  Copyright (C) 2003-2011 Raik Nagel and JabRef contributors
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-//
-// function : Handling of bibtex fields.
-//            All bibtex-field related stuff should be placed here!
-//            Because we can export these informations into additional
-//            config files -> simple extension and definition of new fields....
-//
-// todo     : - handling of identically fields with different names
-//              e.g. LCCN = lib-congress
-//            - group id for each fields, e.g. standard, jurabib, bio....
-//            - add a additional properties functionality into the
-//              BibtexSingleField class
-//
-// modified : r.nagel 25.04.2006
-//            export/import of some definition from/to a xml file
-
-package net.sf.jabref ;
-
-import java.util.HashMap;
-import java.util.Vector;
-import java.util.HashSet;
-
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-import net.sf.jabref.util.TXMLReader;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-public class BibtexFields
-{
-  public static final String KEY_FIELD = "bibtexkey" ;
-
-  // some internal fields
-  public static final String
-      SEARCH = "__search",
-      GROUPSEARCH = "__groupsearch",
-      MARKED = "__markedentry",
-      OWNER = "owner",
-      TIMESTAMP = "timestamp", // it's also definied at the JabRefPreferences class
-      ENTRYTYPE = "entrytype",
-
-      // Using this when I have no database open or when I read
-      // non bibtex file formats (used by the ImportFormatReader.java)
-      DEFAULT_BIBTEXENTRY_ID = "__ID" ;
-
-  public static final String[] DEFAULT_INSPECTION_FIELDS = new String[]
-          {"author", "title", "year", KEY_FIELD};
-
-
-  // singleton instance
-  private static final BibtexFields runtime = new BibtexFields() ;
-
-  // contains all bibtex-field objects (BibtexSingleField)
-  private HashMap<String, BibtexSingleField> fieldSet;
-
-  // contains all known (and public) bibtex fieldnames
-  private String[] PUBLIC_FIELDS = null ;
-
-  private BibtexFields()
-  {
-    fieldSet = new HashMap<String, BibtexSingleField>();
-    BibtexSingleField dummy = null ;
-
-    // FIRST: all standard fields
-    // These are the fields that BibTex might want to treat, so these
-    // must conform to BibTex rules.
-    add( new BibtexSingleField( "address", true, GUIGlobals.SMALL_W  ) ) ;
-    // An annotation. It is not used by the standard bibliography styles,
-    // but may be used by others that produce an annotated bibliography.
-    // http://www.ecst.csuchico.edu/~jacobsd/bib/formats/bibtex.html
-    add( new BibtexSingleField( "annote", true, GUIGlobals.LARGE_W  ) ) ;
-    add( new BibtexSingleField( "author", true, GUIGlobals.MEDIUM_W, 280 ) ) ;
-    add( new BibtexSingleField( "booktitle", true, 175 ) ) ;
-    add( new BibtexSingleField( "chapter", true, GUIGlobals.SMALL_W  ) ) ;
-    add( new BibtexSingleField( "crossref", true, GUIGlobals.SMALL_W ) ) ;
-    add( new BibtexSingleField( "edition", true, GUIGlobals.SMALL_W  ) ) ;
-    add( new BibtexSingleField( "editor", true, GUIGlobals.MEDIUM_W, 280  ) ) ;
-    add( new BibtexSingleField( "howpublished", true, GUIGlobals.MEDIUM_W  ) ) ;
-    add( new BibtexSingleField( "institution", true, GUIGlobals.MEDIUM_W  ) ) ;
-
-    dummy = new BibtexSingleField( "journal", true, GUIGlobals.SMALL_W ) ;
-    dummy.setExtras("journalNames");
-    add(dummy) ;
-    add( new BibtexSingleField( "key", true ) ) ;
-    add( new BibtexSingleField( "month", true, GUIGlobals.SMALL_W ) ) ;
-    add( new BibtexSingleField( "note", true, GUIGlobals.MEDIUM_W  ) ) ;
-    add( new BibtexSingleField( "number", true, GUIGlobals.SMALL_W, 60  ).setNumeric(true) ) ;
-    add( new BibtexSingleField( "organization", true, GUIGlobals.MEDIUM_W  ) ) ;
-    add( new BibtexSingleField( "pages", true, GUIGlobals.SMALL_W ) ) ;
-    add( new BibtexSingleField( "publisher", true, GUIGlobals.MEDIUM_W  ) ) ;
-    add( new BibtexSingleField( "school", true, GUIGlobals.MEDIUM_W  ) ) ;
-    add( new BibtexSingleField( "series", true, GUIGlobals.SMALL_W  ) ) ;
-    add( new BibtexSingleField( "title", true, 400 ) ) ;
-    add( new BibtexSingleField( "type", true, GUIGlobals.SMALL_W  ) ) ;
-    add( new BibtexSingleField( "language", true, GUIGlobals.SMALL_W  ) ) ;
-    add( new BibtexSingleField( "volume", true, GUIGlobals.SMALL_W, 60  ).setNumeric(true) ) ;
-    add( new BibtexSingleField( "year", true, GUIGlobals.SMALL_W, 60 ).setNumeric(true) ) ;
-
-    // custom fields not displayed at editor, but as columns in the UI
-    dummy =  new BibtexSingleField( SpecialFieldsUtils.FIELDNAME_RANKING , false) ;
-    if (!Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS)) {
-    	dummy.setPrivate();
-    	dummy.setWriteable(false);
-    	dummy.setDisplayable(false);
-    }
-    add(dummy) ;
-    dummy =  new BibtexSingleField( SpecialFieldsUtils.FIELDNAME_PRIORITY , false) ;
-    if (!Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS)) {
-    	dummy.setPrivate();
-    	dummy.setWriteable(false);
-    	dummy.setDisplayable(false);
-    }
-    add(dummy) ;
-    dummy =  new BibtexSingleField( SpecialFieldsUtils.FIELDNAME_RELEVANCE , false) ;
-    if (!Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS)) {
-    	dummy.setPrivate();
-    	dummy.setWriteable(false);
-    	dummy.setDisplayable(false);
-    }
-    add(dummy) ;
-    dummy =  new BibtexSingleField( SpecialFieldsUtils.FIELDNAME_QUALITY , false) ;
-    if (!Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS)) {
-    	dummy.setPrivate();
-    	dummy.setWriteable(false);
-    	dummy.setDisplayable(false);
-    }
-    add(dummy) ;
-    
-    // some semi-standard fields
-    dummy = new BibtexSingleField( KEY_FIELD, true ) ;
-    dummy.setPrivate();
-    add( dummy ) ;
-
-    dummy = new BibtexSingleField( "doi", true, GUIGlobals.SMALL_W ) ;
-    dummy.setExtras("external");
-    add(dummy) ;
-    add( new BibtexSingleField( "eid", true, GUIGlobals.SMALL_W  ) ) ;
-
-    dummy = new BibtexSingleField( "date", true ) ;
-    dummy.setPrivate();
-    add( dummy ) ;
-
-    add(new BibtexSingleField("pmid", false, GUIGlobals.SMALL_W, 60).setNumeric(true));
-
-    // additional fields ------------------------------------------------------ 
-    add( new BibtexSingleField( "location", false ) ) ;
-    add( new BibtexSingleField( "abstract", false, GUIGlobals.LARGE_W, 400  ) ) ;
-
-    dummy =  new BibtexSingleField( "url", false, GUIGlobals.SMALL_W) ;
-    dummy.setExtras("external");
-    add(dummy) ;
-
-    dummy = new BibtexSingleField( "pdf", false, GUIGlobals.SMALL_W ) ;
-    dummy.setExtras("browseDoc");
-    add(dummy) ;
-
-    dummy = new BibtexSingleField( "ps", false, GUIGlobals.SMALL_W ) ;
-    dummy.setExtras("browseDocZip");
-    add(dummy) ;
-    add( new BibtexSingleField( "comment", false, GUIGlobals.MEDIUM_W  ) ) ;
-    add( new BibtexSingleField( "keywords", false, GUIGlobals.SMALL_W  ) ) ;
-    //FIELD_EXTRAS.put("keywords", "selector");
-
-
-    dummy = new BibtexSingleField(GUIGlobals.FILE_FIELD, false);
-    dummy.setEditorType(GUIGlobals.FILE_LIST_EDITOR);
-    add(dummy);
-
-
-    add( new BibtexSingleField( "search", false, 75 ) ) ;
-
-
-    // some internal fields ----------------------------------------------
-    dummy = new BibtexSingleField( GUIGlobals.NUMBER_COL, false, 32  ) ;
-    dummy.setPrivate() ;
-    dummy.setWriteable(false);
-    dummy.setDisplayable(false);
-    add( dummy ) ;
-
-    dummy = new BibtexSingleField( OWNER, false, GUIGlobals.SMALL_W ) ;
-    dummy.setExtras("setOwner");
-    dummy.setPrivate();
-    add(dummy) ;
-
-    dummy = new BibtexSingleField( TIMESTAMP, false, GUIGlobals.SMALL_W ) ;
-    dummy.setExtras("datepicker");
-    dummy.setPrivate();
-    add(dummy) ;
-
-    dummy =  new BibtexSingleField( ENTRYTYPE, false, 75 ) ;
-    dummy.setPrivate();
-    add(dummy) ;
-
-    dummy =  new BibtexSingleField( SEARCH, false) ;
-    dummy.setPrivate();
-    dummy.setWriteable(false);
-    dummy.setDisplayable(false);
-    add(dummy) ;
-
-    dummy =  new BibtexSingleField( GROUPSEARCH, false) ;
-    dummy.setPrivate();
-    dummy.setWriteable(false);
-    dummy.setDisplayable(false);
-    add(dummy) ;
-
-    dummy =  new BibtexSingleField( MARKED, false) ;
-    dummy.setPrivate();
-    dummy.setWriteable(true); // This field must be written to file!
-    dummy.setDisplayable(false);
-    add(dummy) ;
-
-     // read external field definitions
-    readXML( Globals.additionalFields ) ;
-
-    // collect all public fields for the PUBLIC_FIELDS array
-    Vector<String> pFields = new Vector<String>( fieldSet.size()) ;
-    for (BibtexSingleField sField : fieldSet.values()){
-      if (sField.isPublic() )
-      {
-        pFields.add( sField.getFieldName() );
-        // or export the complet BibtexSingleField ?
-        // BibtexSingleField.toString() { return fieldname ; }
-      }
-    }
-
-    PUBLIC_FIELDS = pFields.toArray(new String[pFields.size()]);
-    // sort the entries
-    java.util.Arrays.sort( PUBLIC_FIELDS );
-
-  }
-
-    /**
-     * Read the "numericFields" string array from preferences, and activate numeric
-     * sorting for all fields listed in the array. If an unknown field name is included,
-     * add a field descriptor for the new field.
-     */
-    public static void setNumericFieldsFromPrefs() {
-        String[] numFields = Globals.prefs.getStringArray("numericFields");
-        if (numFields == null)
-            return;
-        // Build a Set of field names for the fields that should be sorted numerically:
-        HashSet<String> nF = new HashSet<String>();
-        for (int i = 0; i < numFields.length; i++) {
-            nF.add(numFields[i]);
-        }
-        // Look through all registered fields, and activate numeric sorting if necessary:
-        for (String fieldName : runtime.fieldSet.keySet()) {
-            BibtexSingleField field = runtime.fieldSet.get(fieldName);
-            if (!field.isNumeric() && nF.contains(fieldName)) {
-                field.setNumeric(nF.contains(fieldName));
-            }
-            nF.remove(fieldName); // remove, so we clear the set of all standard fields.
-        }
-        // If there are fields left in nF, these must be non-standard fields. Add descriptors for them:
-        for (String fieldName : nF) {
-            BibtexSingleField field = new BibtexSingleField(fieldName, false);
-            field.setNumeric(true);
-            runtime.fieldSet.put(fieldName, field);
-        }
-
-    }
-
-
-  /** insert a field into the internal list */
-  private void add( BibtexSingleField field )
-  {
-    // field == null check
-    String key = field.name ;
-    fieldSet.put( key, field ) ;
-  }
-
-  /** read a xml definiton file and put only NEW fields into the field list */
-  private void readXML( String resName )
-  {
-    TXMLReader reader = new TXMLReader(resName) ;
-    if (reader.isReady() )
-    {
-      // get a list of all fields
-      NodeList fieldNodes = reader.getNodes("field") ;
-
-      int tagsCount = fieldNodes.getLength() ;
-      for (int t = 0 ; t < tagsCount ; t++)
-      {
-        Element entry = (Element) fieldNodes.item(t) ;
-        String fName = reader.readStringAttribute(entry, "name", null) ;
-        if (fName != null)  // something found ?
-        {
-          fName = fName.toLowerCase() ;
-          BibtexSingleField dummy = fieldSet.get( fName ) ;
-          if (dummy == null)  // unknown field
-          {
-            dummy = new BibtexSingleField(reader, entry) ;
-            fieldSet.put(fName, dummy) ;
-          }
-        }
-      }
-    }
-  }
-
-  // --------------------------------------------------------------------------
-  //  the "static area"
-  // --------------------------------------------------------------------------
-  private static final BibtexSingleField getField( String name )
-  {
-    if (name != null)
-    {
-      return runtime.fieldSet.get(name.toLowerCase()) ;
-    }
-
-    return null ;
-  }
-
-  public static String getFieldExtras( String name )
-  {
-    BibtexSingleField sField = getField( name ) ;
-    if (sField != null)
-    {
-      return sField.getExtras() ;
-    }
-    return null ;
-  }
-
-
-  public static int getEditorType(String name) {
-    BibtexSingleField sField = getField( name ) ;
-    if (sField != null)
-    {
-      return sField.getEditorType();
-    }
-    return GUIGlobals.STANDARD_EDITOR;      
-  }
-
-  public static double getFieldWeight( String name )
-  {
-    BibtexSingleField sField = getField( name ) ;
-    if (sField != null)
-    {
-      return sField.getWeight() ;
-    }
-    return GUIGlobals.DEFAULT_FIELD_WEIGHT ;
-  }
-
-  public static void setFieldWeight( String fieldName, double weight )
-  {
-    BibtexSingleField sField = getField( fieldName ) ;
-    if (sField != null)
-    {
-      sField.setWeight( weight ) ;
-    }
-  }
-
-  public static int getFieldLength( String name )
-  {
-    BibtexSingleField sField = getField( name ) ;
-    if (sField != null)
-    {
-      return sField.getLength() ;
-    }
-    return GUIGlobals.DEFAULT_FIELD_LENGTH ;
-  }
-
-  // returns an alternative name for the given fieldname
-  public static String getFieldDisplayName( String fieldName )
-  {
-    BibtexSingleField sField = getField( fieldName ) ;
-    if (sField != null)
-    {
-      return sField.getAlternativeDisplayName() ;
-    }
-    return null ;
-  }
-
-  public static boolean isWriteableField( String field )
-  {
-    BibtexSingleField sField = getField( field ) ;
-    if (sField != null)
-    {
-      return sField.isWriteable() ;
-    }
-    return true ;
-  }
-
-  public static boolean isDisplayableField( String field )
-  {
-    BibtexSingleField sField = getField( field ) ;
-    if (sField != null)
-    {
-      return sField.isDisplayable() ;
-    }
-    return true ;
-  }
-
-  /**
-   * Returns true if the given field is a standard Bibtex field.
-   *
-   * @param field a <code>String</code> value
-   * @return a <code>boolean</code> value
-   */
-  public static boolean isStandardField( String field )
-  {
-    BibtexSingleField sField = getField( field ) ;
-    if (sField != null)
-    {
-      return sField.isStandard() ;
-    }
-    return false ;
-  }
-
-    public static boolean isNumeric( String field ) {
-        BibtexSingleField sField = getField( field ) ;
-        if (sField != null)
-        {
-            return sField.isNumeric() ;
-        }
-        return false ;
-    }
-
-  /** returns an string-array with all fieldnames */
-  public static String[] getAllFieldNames()
-  {
-    return runtime.PUBLIC_FIELDS ;
-  }
-
-  /** returns the fieldname of the entry at index t */
-  public static String getFieldName( int t )
-  {
-    return  runtime.PUBLIC_FIELDS[t] ;
-  }
-
-  /** returns the number of available fields */
-  public static int numberOfPublicFields()
-  {
-    return runtime.PUBLIC_FIELDS.length ;
-  }
-
-  /*
-     public static int getPreferredFieldLength(String name) {
-     int l = DEFAULT_FIELD_LENGTH;
-     Object o = fieldLength.get(name.toLowerCase());
-     if (o != null)
-     l = ((Integer)o).intValue();
-     return l;
-     }*/
-
-
-  // --------------------------------------------------------------------------
-  // a container class for all properties of a bibtex-field
-  // --------------------------------------------------------------------------
-  private static class BibtexSingleField
-  {
-    private static final int
-        STANDARD       = 0x01,  // it is a standard bibtex-field
-        PRIVATE        = 0x02,  // internal use, e.g. owner, timestamp
-        DISPLAYABLE    = 0x04,  // These fields cannot be shown inside the source editor panel
-        WRITEABLE      = 0x08 ; // These fields will not be saved to the .bib file.
-
-    // the fieldname
-    private String name ;
-
-    // contains the standard, privat, displayable, writable infos
-    // default is: not standard, public, displayable and writable
-    private int flag = DISPLAYABLE | WRITEABLE ;
-
-    private int length = GUIGlobals.DEFAULT_FIELD_LENGTH ;
-    private double weight = GUIGlobals.DEFAULT_FIELD_WEIGHT ;
-
-    private int editorType = GUIGlobals.STANDARD_EDITOR;
-
-    // a alternative displayname, e.g. used for
-    // "citeseercitationcount"="Popularity"
-    private String alternativeDisplayName = null ;
-
-    // the extras data
-    // fieldExtras contains mappings to tell the EntryEditor to add a specific
-    // function to this field, for instance a "browse" button for the "pdf" field.
-    private String extras = null ;
-
-    // This value defines whether contents of this field are expected to be
-    // numeric values. This can be used to sort e.g. volume numbers correctly:
-    private boolean numeric = false;
-
-      // a comma separated list of alternative bibtex-fieldnames, e.g.
-    // "LCCN" is the same like "lib-congress"
-    // private String otherNames = null ;
-
-    // a Hashmap for a lot of additional "not standard" properties
-    // todo: add the handling in a key=value manner
-    // private HashMap props = new HashMap() ;
-
-    // some constructors ;-)
-    public BibtexSingleField( String fieldName )
-    {
-      name = fieldName ;
-    }
-
-    public BibtexSingleField( String fieldName, boolean pStandard )
-    {
-      name = fieldName ;
-      setFlag( pStandard, STANDARD) ;
-    }
-
-    public BibtexSingleField( String fieldName, boolean pStandard, double pWeight)
-    {
-      name = fieldName ;
-      setFlag( pStandard, STANDARD) ;
-      weight = pWeight ;
-    }
-
-    public BibtexSingleField( String fieldName, boolean pStandard, int pLength)
-    {
-      name = fieldName ;
-      setFlag( pStandard, STANDARD) ;
-      length = pLength ;
-    }
-
-    public BibtexSingleField( String fieldName, boolean pStandard,
-                              double pWeight, int pLength)
-    {
-      name = fieldName ;
-      setFlag( pStandard, STANDARD) ;
-      weight = pWeight ;
-      length = pLength ;
-    }
-
-    /** the constructor reads all neccessary data from the xml file */
-    public BibtexSingleField( TXMLReader reader, Element node)
-    {
-      // default is: not standard, public, displayable and writable
-      flag = DISPLAYABLE | WRITEABLE ;
-
-      name = reader.readStringAttribute(node, "name", "field") ;
-      name = name.toLowerCase() ;
-
-      // read the weight
-      String wStr = reader.readStringAttribute(node, "weight", null) ;
-      if (wStr != null)
-      {
-        int hCode = wStr.toLowerCase().hashCode() ;
-        if (hCode == "small".hashCode())
-        {
-          weight = GUIGlobals.SMALL_W ;
-        }
-        else if (hCode == "medium".hashCode())
-        {
-          weight = GUIGlobals.MEDIUM_W ;
-        }
-        else if (hCode == "large".hashCode())
-        {
-          weight = GUIGlobals.LARGE_W ;
-        }
-        else // try to convert to a double value
-        {
-          try
-          {
-            weight = Double.parseDouble(wStr) ;
-            if ((weight < 0.0) || (weight > GUIGlobals.MAX_FIELD_WEIGHT))
-            {
-              weight = GUIGlobals.DEFAULT_FIELD_WEIGHT ;
-            }
-          }
-          catch (Exception e)
-          {
-            weight = GUIGlobals.DEFAULT_FIELD_WEIGHT ;
-          }
-        }
-      }
-      length = reader.readIntegerAttribute( node, "length", GUIGlobals.DEFAULT_FIELD_LENGTH ) ;
-
-      extras = reader.readStringAttribute(node, "extras", null) ;
-    }
-
-    // -----------------------------------------------------------------------
-    // -----------------------------------------------------------------------
-
-
-
-    private void setFlag( boolean onOff, int flagID)
-    {
-      if (onOff)  // set the flag
-      {
-        flag = flag | flagID ;
-      }
-      else // unset the flag,
-      {
-        flag = flag & ( 0xff ^ flagID ) ;
-      }
-    }
-
-    private boolean isSet( int flagID )
-    {
-      if ( (flag & flagID) == flagID)
-        return true ;
-
-      return false ;
-    }
-
-    // -----------------------------------------------------------------------
-    public boolean isStandard()
-    {
-      return isSet( STANDARD ) ;
-    }
-
-    public void setPrivate()
-    {
-      flag = flag | PRIVATE ;
-    }
-
-    public boolean isPrivate()
-    {
-      return isSet( PRIVATE ) ;
-    }
-
-    public void setPublic()
-    {
-      setFlag( false, PRIVATE ) ;
-    }
-
-    public boolean isPublic()
-    {
-      return !isSet( PRIVATE ) ;
-    }
-
-    public void setDisplayable(boolean value)
-    {
-      setFlag( value, DISPLAYABLE ) ;
-    }
-
-    public boolean isDisplayable()
-    {
-      return isSet(DISPLAYABLE) ;
-    }
-
-
-    public void setWriteable(boolean value)
-    {
-      setFlag( value, WRITEABLE ) ;
-    }
-
-    public boolean isWriteable()
-    {
-      return isSet( WRITEABLE ) ;
-    }
-
-    // -----------------------------------------------------------------------
-    public void setAlternativeDisplayName( String aName)
-    {
-      alternativeDisplayName = aName ;
-    }
-
-    public String getAlternativeDisplayName()
-    {
-      return alternativeDisplayName ;
-    }
-    // -----------------------------------------------------------------------
-
-    public void setExtras( String pExtras)
-    {
-      extras = pExtras ;
-    }
-
-    // fieldExtras contains mappings to tell the EntryEditor to add a specific
-    // function to this field, for instance a "browse" button for the "pdf" field.
-    public String getExtras()
-    {
-      return extras ;
-    }
-
-    public void setEditorType(int type) {
-        editorType = type;
-    }
-
-    public int getEditorType() {
-        return editorType;
-    }
-    // -----------------------------------------------------------------------
-
-    public void setWeight( double value )
-    {
-      this.weight = value ;
-    }
-
-    public double getWeight()
-    {
-      return this.weight ;
-    }
-
-    // -----------------------------------------------------------------------
-    public int getLength()
-    {
-      return this.length ;
-    }
-
-    // -----------------------------------------------------------------------
-
-    public String getFieldName()
-    {
-      return name ;
-    }
-
-
-      /**
-       * Set this field's numeric propery
-       * @param numeric true to indicate that this is a numeric field.
-       * @return this BibtexSingleField instance. Makes it easier to call this
-       *   method on the fly while initializing without using a local variable.
-       */
-      public BibtexSingleField setNumeric(boolean numeric) {
-          this.numeric = numeric;
-          return this;
-      }
-
-      public boolean isNumeric() {
-          return numeric;
-      }
-
-  }
-}
+/*  Copyright (C) 2003-2011 Raik Nagel and JabRef contributors
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+//
+// function : Handling of bibtex fields.
+//            All bibtex-field related stuff should be placed here!
+//            Because we can export these informations into additional
+//            config files -> simple extension and definition of new fields....
+//
+// todo     : - handling of identically fields with different names
+//              e.g. LCCN = lib-congress
+//            - group id for each fields, e.g. standard, jurabib, bio....
+//            - add a additional properties functionality into the
+//              BibtexSingleField class
+//
+// modified : r.nagel 25.04.2006
+//            export/import of some definition from/to a xml file
+
+package net.sf.jabref ;
+
+import java.util.HashMap;
+import java.util.Vector;
+import java.util.HashSet;
+
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+import net.sf.jabref.util.TXMLReader;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+public class BibtexFields
+{
+  public static final String KEY_FIELD = "bibtexkey" ;
+
+  // some internal fields
+  public static final String
+      SEARCH = "__search",
+      GROUPSEARCH = "__groupsearch",
+      MARKED = "__markedentry",
+      OWNER = "owner",
+      TIMESTAMP = "timestamp", // it's also definied at the JabRefPreferences class
+      ENTRYTYPE = "entrytype",
+
+      // Using this when I have no database open or when I read
+      // non bibtex file formats (used by the ImportFormatReader.java)
+      DEFAULT_BIBTEXENTRY_ID = "__ID" ;
+
+  public static final String[] DEFAULT_INSPECTION_FIELDS = new String[]
+          {"author", "title", "year", KEY_FIELD};
+
+
+  // singleton instance
+  private static final BibtexFields runtime = new BibtexFields() ;
+
+  // contains all bibtex-field objects (BibtexSingleField)
+  private HashMap<String, BibtexSingleField> fieldSet;
+
+  // contains all known (and public) bibtex fieldnames
+  private String[] PUBLIC_FIELDS = null ;
+
+  private BibtexFields()
+  {
+    fieldSet = new HashMap<String, BibtexSingleField>();
+    BibtexSingleField dummy = null ;
+
+    // FIRST: all standard fields
+    // These are the fields that BibTex might want to treat, so these
+    // must conform to BibTex rules.
+    add( new BibtexSingleField( "address", true, GUIGlobals.SMALL_W  ) ) ;
+    // An annotation. It is not used by the standard bibliography styles,
+    // but may be used by others that produce an annotated bibliography.
+    // http://www.ecst.csuchico.edu/~jacobsd/bib/formats/bibtex.html
+    add( new BibtexSingleField( "annote", true, GUIGlobals.LARGE_W  ) ) ;
+    add( new BibtexSingleField( "author", true, GUIGlobals.MEDIUM_W, 280 ) ) ;
+    add( new BibtexSingleField( "booktitle", true, 175 ) ) ;
+    add( new BibtexSingleField( "chapter", true, GUIGlobals.SMALL_W  ) ) ;
+    add( new BibtexSingleField( "crossref", true, GUIGlobals.SMALL_W ) ) ;
+    add( new BibtexSingleField( "edition", true, GUIGlobals.SMALL_W  ) ) ;
+    add( new BibtexSingleField( "editor", true, GUIGlobals.MEDIUM_W, 280  ) ) ;
+    add( new BibtexSingleField( "howpublished", true, GUIGlobals.MEDIUM_W  ) ) ;
+    add( new BibtexSingleField( "institution", true, GUIGlobals.MEDIUM_W  ) ) ;
+
+    dummy = new BibtexSingleField( "journal", true, GUIGlobals.SMALL_W ) ;
+    dummy.setExtras("journalNames");
+    add(dummy) ;
+    add( new BibtexSingleField( "key", true ) ) ;
+    add( new BibtexSingleField( "month", true, GUIGlobals.SMALL_W ) ) ;
+    add( new BibtexSingleField( "note", true, GUIGlobals.MEDIUM_W  ) ) ;
+    add( new BibtexSingleField( "number", true, GUIGlobals.SMALL_W, 60  ).setNumeric(true) ) ;
+    add( new BibtexSingleField( "organization", true, GUIGlobals.MEDIUM_W  ) ) ;
+    add( new BibtexSingleField( "pages", true, GUIGlobals.SMALL_W ) ) ;
+    add( new BibtexSingleField( "publisher", true, GUIGlobals.MEDIUM_W  ) ) ;
+    add( new BibtexSingleField( "school", true, GUIGlobals.MEDIUM_W  ) ) ;
+    add( new BibtexSingleField( "series", true, GUIGlobals.SMALL_W  ) ) ;
+    add( new BibtexSingleField( "title", true, 400 ) ) ;
+    add( new BibtexSingleField( "type", true, GUIGlobals.SMALL_W  ) ) ;
+    add( new BibtexSingleField( "language", true, GUIGlobals.SMALL_W  ) ) ;
+    add( new BibtexSingleField( "volume", true, GUIGlobals.SMALL_W, 60  ).setNumeric(true) ) ;
+    add( new BibtexSingleField( "year", true, GUIGlobals.SMALL_W, 60 ).setNumeric(true) ) ;
+
+    // custom fields not displayed at editor, but as columns in the UI
+    dummy =  new BibtexSingleField( SpecialFieldsUtils.FIELDNAME_RANKING , false) ;
+    if (!Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS)) {
+    	dummy.setPrivate();
+    	dummy.setWriteable(false);
+    	dummy.setDisplayable(false);
+    }
+    add(dummy) ;
+    dummy =  new BibtexSingleField( SpecialFieldsUtils.FIELDNAME_PRIORITY , false) ;
+    if (!Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS)) {
+    	dummy.setPrivate();
+    	dummy.setWriteable(false);
+    	dummy.setDisplayable(false);
+    }
+    add(dummy) ;
+    dummy =  new BibtexSingleField( SpecialFieldsUtils.FIELDNAME_RELEVANCE , false) ;
+    if (!Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS)) {
+    	dummy.setPrivate();
+    	dummy.setWriteable(false);
+    	dummy.setDisplayable(false);
+    }
+    add(dummy) ;
+    dummy =  new BibtexSingleField( SpecialFieldsUtils.FIELDNAME_QUALITY , false) ;
+    if (!Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS)) {
+    	dummy.setPrivate();
+    	dummy.setWriteable(false);
+    	dummy.setDisplayable(false);
+    }
+    add(dummy) ;
+    
+    // some semi-standard fields
+    dummy = new BibtexSingleField( KEY_FIELD, true ) ;
+    dummy.setPrivate();
+    add( dummy ) ;
+
+    dummy = new BibtexSingleField( "doi", true, GUIGlobals.SMALL_W ) ;
+    dummy.setExtras("external");
+    add(dummy) ;
+    add( new BibtexSingleField( "eid", true, GUIGlobals.SMALL_W  ) ) ;
+
+    dummy = new BibtexSingleField( "date", true ) ;
+    dummy.setPrivate();
+    add( dummy ) ;
+
+    add(new BibtexSingleField("pmid", false, GUIGlobals.SMALL_W, 60).setNumeric(true));
+
+    // additional fields ------------------------------------------------------ 
+    add( new BibtexSingleField( "location", false ) ) ;
+    add( new BibtexSingleField( "abstract", false, GUIGlobals.LARGE_W, 400  ) ) ;
+
+    dummy =  new BibtexSingleField( "url", false, GUIGlobals.SMALL_W) ;
+    dummy.setExtras("external");
+    add(dummy) ;
+
+    dummy = new BibtexSingleField( "pdf", false, GUIGlobals.SMALL_W ) ;
+    dummy.setExtras("browseDoc");
+    add(dummy) ;
+
+    dummy = new BibtexSingleField( "ps", false, GUIGlobals.SMALL_W ) ;
+    dummy.setExtras("browseDocZip");
+    add(dummy) ;
+    add( new BibtexSingleField( "comment", false, GUIGlobals.MEDIUM_W  ) ) ;
+    add( new BibtexSingleField( "keywords", false, GUIGlobals.SMALL_W  ) ) ;
+    //FIELD_EXTRAS.put("keywords", "selector");
+
+
+    dummy = new BibtexSingleField(GUIGlobals.FILE_FIELD, false);
+    dummy.setEditorType(GUIGlobals.FILE_LIST_EDITOR);
+    add(dummy);
+
+
+    add( new BibtexSingleField( "search", false, 75 ) ) ;
+
+
+    // some internal fields ----------------------------------------------
+    dummy = new BibtexSingleField( GUIGlobals.NUMBER_COL, false, 32  ) ;
+    dummy.setPrivate() ;
+    dummy.setWriteable(false);
+    dummy.setDisplayable(false);
+    add( dummy ) ;
+
+    dummy = new BibtexSingleField( OWNER, false, GUIGlobals.SMALL_W ) ;
+    dummy.setExtras("setOwner");
+    dummy.setPrivate();
+    add(dummy) ;
+
+    dummy = new BibtexSingleField( TIMESTAMP, false, GUIGlobals.SMALL_W ) ;
+    dummy.setExtras("datepicker");
+    dummy.setPrivate();
+    add(dummy) ;
+
+    dummy =  new BibtexSingleField( ENTRYTYPE, false, 75 ) ;
+    dummy.setPrivate();
+    add(dummy) ;
+
+    dummy =  new BibtexSingleField( SEARCH, false) ;
+    dummy.setPrivate();
+    dummy.setWriteable(false);
+    dummy.setDisplayable(false);
+    add(dummy) ;
+
+    dummy =  new BibtexSingleField( GROUPSEARCH, false) ;
+    dummy.setPrivate();
+    dummy.setWriteable(false);
+    dummy.setDisplayable(false);
+    add(dummy) ;
+
+    dummy =  new BibtexSingleField( MARKED, false) ;
+    dummy.setPrivate();
+    dummy.setWriteable(true); // This field must be written to file!
+    dummy.setDisplayable(false);
+    add(dummy) ;
+
+     // read external field definitions
+    readXML( Globals.additionalFields ) ;
+
+    // collect all public fields for the PUBLIC_FIELDS array
+    Vector<String> pFields = new Vector<String>( fieldSet.size()) ;
+    for (BibtexSingleField sField : fieldSet.values()){
+      if (sField.isPublic() )
+      {
+        pFields.add( sField.getFieldName() );
+        // or export the complet BibtexSingleField ?
+        // BibtexSingleField.toString() { return fieldname ; }
+      }
+    }
+
+    PUBLIC_FIELDS = pFields.toArray(new String[pFields.size()]);
+    // sort the entries
+    java.util.Arrays.sort( PUBLIC_FIELDS );
+
+  }
+
+    /**
+     * Read the "numericFields" string array from preferences, and activate numeric
+     * sorting for all fields listed in the array. If an unknown field name is included,
+     * add a field descriptor for the new field.
+     */
+    public static void setNumericFieldsFromPrefs() {
+        String[] numFields = Globals.prefs.getStringArray("numericFields");
+        if (numFields == null)
+            return;
+        // Build a Set of field names for the fields that should be sorted numerically:
+        HashSet<String> nF = new HashSet<String>();
+        for (int i = 0; i < numFields.length; i++) {
+            nF.add(numFields[i]);
+        }
+        // Look through all registered fields, and activate numeric sorting if necessary:
+        for (String fieldName : runtime.fieldSet.keySet()) {
+            BibtexSingleField field = runtime.fieldSet.get(fieldName);
+            if (!field.isNumeric() && nF.contains(fieldName)) {
+                field.setNumeric(nF.contains(fieldName));
+            }
+            nF.remove(fieldName); // remove, so we clear the set of all standard fields.
+        }
+        // If there are fields left in nF, these must be non-standard fields. Add descriptors for them:
+        for (String fieldName : nF) {
+            BibtexSingleField field = new BibtexSingleField(fieldName, false);
+            field.setNumeric(true);
+            runtime.fieldSet.put(fieldName, field);
+        }
+
+    }
+
+
+  /** insert a field into the internal list */
+  private void add( BibtexSingleField field )
+  {
+    // field == null check
+    String key = field.name ;
+    fieldSet.put( key, field ) ;
+  }
+
+  /** read a xml definiton file and put only NEW fields into the field list */
+  private void readXML( String resName )
+  {
+    TXMLReader reader = new TXMLReader(resName) ;
+    if (reader.isReady() )
+    {
+      // get a list of all fields
+      NodeList fieldNodes = reader.getNodes("field") ;
+
+      int tagsCount = fieldNodes.getLength() ;
+      for (int t = 0 ; t < tagsCount ; t++)
+      {
+        Element entry = (Element) fieldNodes.item(t) ;
+        String fName = reader.readStringAttribute(entry, "name", null) ;
+        if (fName != null)  // something found ?
+        {
+          fName = fName.toLowerCase() ;
+          BibtexSingleField dummy = fieldSet.get( fName ) ;
+          if (dummy == null)  // unknown field
+          {
+            dummy = new BibtexSingleField(reader, entry) ;
+            fieldSet.put(fName, dummy) ;
+          }
+        }
+      }
+    }
+  }
+
+  // --------------------------------------------------------------------------
+  //  the "static area"
+  // --------------------------------------------------------------------------
+  private static final BibtexSingleField getField( String name )
+  {
+    if (name != null)
+    {
+      return runtime.fieldSet.get(name.toLowerCase()) ;
+    }
+
+    return null ;
+  }
+
+  public static String getFieldExtras( String name )
+  {
+    BibtexSingleField sField = getField( name ) ;
+    if (sField != null)
+    {
+      return sField.getExtras() ;
+    }
+    return null ;
+  }
+
+
+  public static int getEditorType(String name) {
+    BibtexSingleField sField = getField( name ) ;
+    if (sField != null)
+    {
+      return sField.getEditorType();
+    }
+    return GUIGlobals.STANDARD_EDITOR;      
+  }
+
+  public static double getFieldWeight( String name )
+  {
+    BibtexSingleField sField = getField( name ) ;
+    if (sField != null)
+    {
+      return sField.getWeight() ;
+    }
+    return GUIGlobals.DEFAULT_FIELD_WEIGHT ;
+  }
+
+  public static void setFieldWeight( String fieldName, double weight )
+  {
+    BibtexSingleField sField = getField( fieldName ) ;
+    if (sField != null)
+    {
+      sField.setWeight( weight ) ;
+    }
+  }
+
+  public static int getFieldLength( String name )
+  {
+    BibtexSingleField sField = getField( name ) ;
+    if (sField != null)
+    {
+      return sField.getLength() ;
+    }
+    return GUIGlobals.DEFAULT_FIELD_LENGTH ;
+  }
+
+  // returns an alternative name for the given fieldname
+  public static String getFieldDisplayName( String fieldName )
+  {
+    BibtexSingleField sField = getField( fieldName ) ;
+    if (sField != null)
+    {
+      return sField.getAlternativeDisplayName() ;
+    }
+    return null ;
+  }
+
+  public static boolean isWriteableField( String field )
+  {
+    BibtexSingleField sField = getField( field ) ;
+    if (sField != null)
+    {
+      return sField.isWriteable() ;
+    }
+    return true ;
+  }
+
+  public static boolean isDisplayableField( String field )
+  {
+    BibtexSingleField sField = getField( field ) ;
+    if (sField != null)
+    {
+      return sField.isDisplayable() ;
+    }
+    return true ;
+  }
+
+  /**
+   * Returns true if the given field is a standard Bibtex field.
+   *
+   * @param field a <code>String</code> value
+   * @return a <code>boolean</code> value
+   */
+  public static boolean isStandardField( String field )
+  {
+    BibtexSingleField sField = getField( field ) ;
+    if (sField != null)
+    {
+      return sField.isStandard() ;
+    }
+    return false ;
+  }
+
+    public static boolean isNumeric( String field ) {
+        BibtexSingleField sField = getField( field ) ;
+        if (sField != null)
+        {
+            return sField.isNumeric() ;
+        }
+        return false ;
+    }
+
+  /** returns an string-array with all fieldnames */
+  public static String[] getAllFieldNames()
+  {
+    return runtime.PUBLIC_FIELDS ;
+  }
+
+  /** returns the fieldname of the entry at index t */
+  public static String getFieldName( int t )
+  {
+    return  runtime.PUBLIC_FIELDS[t] ;
+  }
+
+  /** returns the number of available fields */
+  public static int numberOfPublicFields()
+  {
+    return runtime.PUBLIC_FIELDS.length ;
+  }
+
+  /*
+     public static int getPreferredFieldLength(String name) {
+     int l = DEFAULT_FIELD_LENGTH;
+     Object o = fieldLength.get(name.toLowerCase());
+     if (o != null)
+     l = ((Integer)o).intValue();
+     return l;
+     }*/
+
+
+  // --------------------------------------------------------------------------
+  // a container class for all properties of a bibtex-field
+  // --------------------------------------------------------------------------
+  private static class BibtexSingleField
+  {
+    private static final int
+        STANDARD       = 0x01,  // it is a standard bibtex-field
+        PRIVATE        = 0x02,  // internal use, e.g. owner, timestamp
+        DISPLAYABLE    = 0x04,  // These fields cannot be shown inside the source editor panel
+        WRITEABLE      = 0x08 ; // These fields will not be saved to the .bib file.
+
+    // the fieldname
+    private String name ;
+
+    // contains the standard, privat, displayable, writable infos
+    // default is: not standard, public, displayable and writable
+    private int flag = DISPLAYABLE | WRITEABLE ;
+
+    private int length = GUIGlobals.DEFAULT_FIELD_LENGTH ;
+    private double weight = GUIGlobals.DEFAULT_FIELD_WEIGHT ;
+
+    private int editorType = GUIGlobals.STANDARD_EDITOR;
+
+    // a alternative displayname, e.g. used for
+    // "citeseercitationcount"="Popularity"
+    private String alternativeDisplayName = null ;
+
+    // the extras data
+    // fieldExtras contains mappings to tell the EntryEditor to add a specific
+    // function to this field, for instance a "browse" button for the "pdf" field.
+    private String extras = null ;
+
+    // This value defines whether contents of this field are expected to be
+    // numeric values. This can be used to sort e.g. volume numbers correctly:
+    private boolean numeric = false;
+
+      // a comma separated list of alternative bibtex-fieldnames, e.g.
+    // "LCCN" is the same like "lib-congress"
+    // private String otherNames = null ;
+
+    // a Hashmap for a lot of additional "not standard" properties
+    // todo: add the handling in a key=value manner
+    // private HashMap props = new HashMap() ;
+
+    // some constructors ;-)
+    public BibtexSingleField( String fieldName )
+    {
+      name = fieldName ;
+    }
+
+    public BibtexSingleField( String fieldName, boolean pStandard )
+    {
+      name = fieldName ;
+      setFlag( pStandard, STANDARD) ;
+    }
+
+    public BibtexSingleField( String fieldName, boolean pStandard, double pWeight)
+    {
+      name = fieldName ;
+      setFlag( pStandard, STANDARD) ;
+      weight = pWeight ;
+    }
+
+    public BibtexSingleField( String fieldName, boolean pStandard, int pLength)
+    {
+      name = fieldName ;
+      setFlag( pStandard, STANDARD) ;
+      length = pLength ;
+    }
+
+    public BibtexSingleField( String fieldName, boolean pStandard,
+                              double pWeight, int pLength)
+    {
+      name = fieldName ;
+      setFlag( pStandard, STANDARD) ;
+      weight = pWeight ;
+      length = pLength ;
+    }
+
+    /** the constructor reads all neccessary data from the xml file */
+    public BibtexSingleField( TXMLReader reader, Element node)
+    {
+      // default is: not standard, public, displayable and writable
+      flag = DISPLAYABLE | WRITEABLE ;
+
+      name = reader.readStringAttribute(node, "name", "field") ;
+      name = name.toLowerCase() ;
+
+      // read the weight
+      String wStr = reader.readStringAttribute(node, "weight", null) ;
+      if (wStr != null)
+      {
+        int hCode = wStr.toLowerCase().hashCode() ;
+        if (hCode == "small".hashCode())
+        {
+          weight = GUIGlobals.SMALL_W ;
+        }
+        else if (hCode == "medium".hashCode())
+        {
+          weight = GUIGlobals.MEDIUM_W ;
+        }
+        else if (hCode == "large".hashCode())
+        {
+          weight = GUIGlobals.LARGE_W ;
+        }
+        else // try to convert to a double value
+        {
+          try
+          {
+            weight = Double.parseDouble(wStr) ;
+            if ((weight < 0.0) || (weight > GUIGlobals.MAX_FIELD_WEIGHT))
+            {
+              weight = GUIGlobals.DEFAULT_FIELD_WEIGHT ;
+            }
+          }
+          catch (Exception e)
+          {
+            weight = GUIGlobals.DEFAULT_FIELD_WEIGHT ;
+          }
+        }
+      }
+      length = reader.readIntegerAttribute( node, "length", GUIGlobals.DEFAULT_FIELD_LENGTH ) ;
+
+      extras = reader.readStringAttribute(node, "extras", null) ;
+    }
+
+    // -----------------------------------------------------------------------
+    // -----------------------------------------------------------------------
+
+
+
+    private void setFlag( boolean onOff, int flagID)
+    {
+      if (onOff)  // set the flag
+      {
+        flag = flag | flagID ;
+      }
+      else // unset the flag,
+      {
+        flag = flag & ( 0xff ^ flagID ) ;
+      }
+    }
+
+    private boolean isSet( int flagID )
+    {
+      if ( (flag & flagID) == flagID)
+        return true ;
+
+      return false ;
+    }
+
+    // -----------------------------------------------------------------------
+    public boolean isStandard()
+    {
+      return isSet( STANDARD ) ;
+    }
+
+    public void setPrivate()
+    {
+      flag = flag | PRIVATE ;
+    }
+
+    public boolean isPrivate()
+    {
+      return isSet( PRIVATE ) ;
+    }
+
+    public void setPublic()
+    {
+      setFlag( false, PRIVATE ) ;
+    }
+
+    public boolean isPublic()
+    {
+      return !isSet( PRIVATE ) ;
+    }
+
+    public void setDisplayable(boolean value)
+    {
+      setFlag( value, DISPLAYABLE ) ;
+    }
+
+    public boolean isDisplayable()
+    {
+      return isSet(DISPLAYABLE) ;
+    }
+
+
+    public void setWriteable(boolean value)
+    {
+      setFlag( value, WRITEABLE ) ;
+    }
+
+    public boolean isWriteable()
+    {
+      return isSet( WRITEABLE ) ;
+    }
+
+    // -----------------------------------------------------------------------
+    public void setAlternativeDisplayName( String aName)
+    {
+      alternativeDisplayName = aName ;
+    }
+
+    public String getAlternativeDisplayName()
+    {
+      return alternativeDisplayName ;
+    }
+    // -----------------------------------------------------------------------
+
+    public void setExtras( String pExtras)
+    {
+      extras = pExtras ;
+    }
+
+    // fieldExtras contains mappings to tell the EntryEditor to add a specific
+    // function to this field, for instance a "browse" button for the "pdf" field.
+    public String getExtras()
+    {
+      return extras ;
+    }
+
+    public void setEditorType(int type) {
+        editorType = type;
+    }
+
+    public int getEditorType() {
+        return editorType;
+    }
+    // -----------------------------------------------------------------------
+
+    public void setWeight( double value )
+    {
+      this.weight = value ;
+    }
+
+    public double getWeight()
+    {
+      return this.weight ;
+    }
+
+    // -----------------------------------------------------------------------
+    public int getLength()
+    {
+      return this.length ;
+    }
+
+    // -----------------------------------------------------------------------
+
+    public String getFieldName()
+    {
+      return name ;
+    }
+
+
+      /**
+       * Set this field's numeric propery
+       * @param numeric true to indicate that this is a numeric field.
+       * @return this BibtexSingleField instance. Makes it easier to call this
+       *   method on the fly while initializing without using a local variable.
+       */
+      public BibtexSingleField setNumeric(boolean numeric) {
+          this.numeric = numeric;
+          return this;
+      }
+
+      public boolean isNumeric() {
+          return numeric;
+      }
+
+  }
+}
diff --git a/src/java/net/sf/jabref/BibtexString.java b/src/java/net/sf/jabref/BibtexString.java
index 523bcbd..08745c5 100644
--- a/src/java/net/sf/jabref/BibtexString.java
+++ b/src/java/net/sf/jabref/BibtexString.java
@@ -1,56 +1,56 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-public class BibtexString {
-
-    String _name, _content, _id;
-
-    public BibtexString(String id, String name, String content) {
-	_id = id;
-	_name = name;
-	_content = content;
-    }
-
-    public String getId() {
-	return _id;
-    }
-
-    public void setId(String id) {
-	_id = id;
-    }
-
-    public String getName() {
-	return _name;
-    }
-
-    public void setName(String name) {
-	_name = name;
-    }
-
-    public String getContent() {
-	return ((_content == null) ? "" : _content);
-    }
-
-    public void setContent(String content) {
-	_content = content;
-    }
-
-    public Object clone() {
-      return new BibtexString(_id, _name, _content);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+public class BibtexString {
+
+    String _name, _content, _id;
+
+    public BibtexString(String id, String name, String content) {
+	_id = id;
+	_name = name;
+	_content = content;
+    }
+
+    public String getId() {
+	return _id;
+    }
+
+    public void setId(String id) {
+	_id = id;
+    }
+
+    public String getName() {
+	return _name;
+    }
+
+    public void setName(String name) {
+	_name = name;
+    }
+
+    public String getContent() {
+	return ((_content == null) ? "" : _content);
+    }
+
+    public void setContent(String content) {
+	_content = content;
+    }
+
+    public Object clone() {
+      return new BibtexString(_id, _name, _content);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/BibtexStringComparator.java b/src/java/net/sf/jabref/BibtexStringComparator.java
index 9199a5c..7784100 100644
--- a/src/java/net/sf/jabref/BibtexStringComparator.java
+++ b/src/java/net/sf/jabref/BibtexStringComparator.java
@@ -1,76 +1,76 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.util.Comparator;
-import java.util.regex.Pattern;
-
-public class BibtexStringComparator implements Comparator<BibtexString> {
-
-    protected boolean considerRefs;
-
-    /**
-     * @param considerRefs Indicates whether the strings should be
-     *                     sorted according to internal references in addition to
-     *                     alphabetical sorting.
-     */
-    public BibtexStringComparator(boolean considerRefs) {
-        this.considerRefs = considerRefs;
-    }
-
-    public int compare(BibtexString s1, BibtexString s2) {
-
-        int res = 0;
-
-        // First check their names:
-        String name1 = s1.getName().toLowerCase(),
-                name2 = s2.getName().toLowerCase();
-
-        res = name1.compareTo(name2);
-
-        if (res == 0)
-            return res;
-
-        // Then, if we are supposed to, see if the ordering needs
-        // to be changed because of one string referring to the other.x
-        if (considerRefs) {
-
-            // First order them:
-            BibtexString pre, post;
-            if (res < 0) {
-                pre = s1;
-                post = s2;
-            } else {
-                pre = s2;
-                post = s1;
-            }
-
-            // Then see if "pre" refers to "post", which is the only
-            // situation when we must change the ordering:
-            String namePost = post.getName().toLowerCase(),
-                    textPre = pre.getContent().toLowerCase();
-
-            // If that is the case, reverse the order found:
-            if (textPre.indexOf("#" + namePost + "#") >= 0) {
-                res = -res;
-            }
-
-        }
-
-        return res;
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.util.Comparator;
+import java.util.regex.Pattern;
+
+public class BibtexStringComparator implements Comparator<BibtexString> {
+
+    protected boolean considerRefs;
+
+    /**
+     * @param considerRefs Indicates whether the strings should be
+     *                     sorted according to internal references in addition to
+     *                     alphabetical sorting.
+     */
+    public BibtexStringComparator(boolean considerRefs) {
+        this.considerRefs = considerRefs;
+    }
+
+    public int compare(BibtexString s1, BibtexString s2) {
+
+        int res = 0;
+
+        // First check their names:
+        String name1 = s1.getName().toLowerCase(),
+                name2 = s2.getName().toLowerCase();
+
+        res = name1.compareTo(name2);
+
+        if (res == 0)
+            return res;
+
+        // Then, if we are supposed to, see if the ordering needs
+        // to be changed because of one string referring to the other.x
+        if (considerRefs) {
+
+            // First order them:
+            BibtexString pre, post;
+            if (res < 0) {
+                pre = s1;
+                post = s2;
+            } else {
+                pre = s2;
+                post = s1;
+            }
+
+            // Then see if "pre" refers to "post", which is the only
+            // situation when we must change the ordering:
+            String namePost = post.getName().toLowerCase(),
+                    textPre = pre.getContent().toLowerCase();
+
+            // If that is the case, reverse the order found:
+            if (textPre.indexOf("#" + namePost + "#") >= 0) {
+                res = -res;
+            }
+
+        }
+
+        return res;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/BrowseAction.java b/src/java/net/sf/jabref/BrowseAction.java
index 19d5a4f..c1d22cb 100644
--- a/src/java/net/sf/jabref/BrowseAction.java
+++ b/src/java/net/sf/jabref/BrowseAction.java
@@ -1,75 +1,75 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import net.sf.jabref.gui.FileDialogs;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-
-import javax.swing.*;
-
-/**
- * Action used to produce a "Browse" button for one of the text fields.
- */
-public class BrowseAction extends AbstractAction implements ActionListener {
-
-	private static final long serialVersionUID = 3007593430933681310L;
-
-    JComponent focusTarget = null;
-	JFrame frame=null;
-    //JDialog dialog=null;
-    JTextField comp;
-    boolean dir;
-
-    public BrowseAction(JFrame frame, JTextField tc, boolean dir) {
-        super(Globals.lang("Browse"));
-        this.frame = frame;
-        this.dir = dir;
-        comp = tc;
-
-    }
-
-    /*public BrowseAction(JDialog dialog, JTextField tc, boolean dir) {
-        super(Globals.lang("Browse"));
-        this.dialog = dialog;
-        this.dir = dir;
-        comp = tc;
-
-    } */
-
-    public void setFocusTarget(JComponent focusTarget) {
-        this.focusTarget = focusTarget;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        String chosen = null;
-        if (dir)
-            chosen = FileDialogs.getNewDir(frame, new File(comp.getText()), Globals.NONE,
-                    JFileChooser.OPEN_DIALOG, false);
-        else
-            chosen = FileDialogs.getNewFile(frame, new File(comp.getText()), Globals.NONE,
-                    JFileChooser.OPEN_DIALOG, false);
-        if (chosen != null) {
-            File newFile = new File(chosen);
-            comp.setText(newFile.getPath());
-            if (focusTarget != null)
-                new FocusRequester(focusTarget);
-        }
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import net.sf.jabref.gui.FileDialogs;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+
+import javax.swing.*;
+
+/**
+ * Action used to produce a "Browse" button for one of the text fields.
+ */
+public class BrowseAction extends AbstractAction implements ActionListener {
+
+	private static final long serialVersionUID = 3007593430933681310L;
+
+    JComponent focusTarget = null;
+	JFrame frame=null;
+    //JDialog dialog=null;
+    JTextField comp;
+    boolean dir;
+
+    public BrowseAction(JFrame frame, JTextField tc, boolean dir) {
+        super(Globals.lang("Browse"));
+        this.frame = frame;
+        this.dir = dir;
+        comp = tc;
+
+    }
+
+    /*public BrowseAction(JDialog dialog, JTextField tc, boolean dir) {
+        super(Globals.lang("Browse"));
+        this.dialog = dialog;
+        this.dir = dir;
+        comp = tc;
+
+    } */
+
+    public void setFocusTarget(JComponent focusTarget) {
+        this.focusTarget = focusTarget;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        String chosen = null;
+        if (dir)
+            chosen = FileDialogs.getNewDir(frame, new File(comp.getText()), Globals.NONE,
+                    JFileChooser.OPEN_DIALOG, false);
+        else
+            chosen = FileDialogs.getNewFile(frame, new File(comp.getText()), Globals.NONE,
+                    JFileChooser.OPEN_DIALOG, false);
+        if (chosen != null) {
+            File newFile = new File(chosen);
+            comp.setText(newFile.getPath());
+            if (focusTarget != null)
+                new FocusRequester(focusTarget);
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/CallBack.java b/src/java/net/sf/jabref/CallBack.java
index 64792e2..d6466e1 100644
--- a/src/java/net/sf/jabref/CallBack.java
+++ b/src/java/net/sf/jabref/CallBack.java
@@ -1,23 +1,23 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-
-public interface CallBack {
-
-    public void update();
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+
+public interface CallBack {
+
+    public void update();
+
+}
diff --git a/src/java/net/sf/jabref/CheckBoxMessage.java b/src/java/net/sf/jabref/CheckBoxMessage.java
index a5675fc..c94c3df 100644
--- a/src/java/net/sf/jabref/CheckBoxMessage.java
+++ b/src/java/net/sf/jabref/CheckBoxMessage.java
@@ -1,51 +1,51 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import javax.swing.JPanel;
-import javax.swing.JLabel;
-import javax.swing.JCheckBox;
-import java.awt.BorderLayout;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-
-
-public class CheckBoxMessage extends JPanel {
-  BorderLayout borderLayout1 = new BorderLayout();
-  GridBagLayout gbl = new GridBagLayout();
-  GridBagConstraints con = new GridBagConstraints();
-  JCheckBox cb;
-
-  public CheckBoxMessage(String message, String cbText, boolean defaultValue) {
-    cb = new JCheckBox(cbText, defaultValue);
-    setLayout(gbl);
-    con.gridwidth = GridBagConstraints.REMAINDER;
-
-    JLabel lab = new JLabel(message+"\n");
-    cb.setHorizontalAlignment(JLabel.LEFT);
-    gbl.setConstraints(lab, con);
-    add(lab);
-    con.anchor = GridBagConstraints.WEST;
-    con.insets = new Insets(10, 0, 0, 0);
-    gbl.setConstraints(cb, con);
-    add(cb);
-  }
-
-  public boolean isSelected() {
-    return cb.isSelected();
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import javax.swing.JPanel;
+import javax.swing.JLabel;
+import javax.swing.JCheckBox;
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+
+public class CheckBoxMessage extends JPanel {
+  BorderLayout borderLayout1 = new BorderLayout();
+  GridBagLayout gbl = new GridBagLayout();
+  GridBagConstraints con = new GridBagConstraints();
+  JCheckBox cb;
+
+  public CheckBoxMessage(String message, String cbText, boolean defaultValue) {
+    cb = new JCheckBox(cbText, defaultValue);
+    setLayout(gbl);
+    con.gridwidth = GridBagConstraints.REMAINDER;
+
+    JLabel lab = new JLabel(message+"\n");
+    cb.setHorizontalAlignment(JLabel.LEFT);
+    gbl.setConstraints(lab, con);
+    add(lab);
+    con.anchor = GridBagConstraints.WEST;
+    con.insets = new Insets(10, 0, 0, 0);
+    gbl.setConstraints(cb, con);
+    add(cb);
+  }
+
+  public boolean isSelected() {
+    return cb.isSelected();
+  }
+}
diff --git a/src/java/net/sf/jabref/ClipBoardManager.java b/src/java/net/sf/jabref/ClipBoardManager.java
index 0e99857..10eb155 100644
--- a/src/java/net/sf/jabref/ClipBoardManager.java
+++ b/src/java/net/sf/jabref/ClipBoardManager.java
@@ -1,88 +1,88 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// created by : r.nagel 14.09.2004
-//
-// function : handle all clipboard action
-//
-// modified :
-
-
-package net.sf.jabref ;
-
-import java.awt.Toolkit;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.ClipboardOwner;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.StringSelection;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.io.IOException;
-
-public class ClipBoardManager implements ClipboardOwner
-{
-  public static ClipBoardManager clipBoard = new ClipBoardManager() ;
-
-  /**
-   * Empty implementation of the ClipboardOwner interface.
-   */
-  public void lostOwnership( Clipboard aClipboard, Transferable aContents )
-  {
-    //do nothing
-  }
-
-  /**
-   * Place a String on the clipboard, and make this class the
-   * owner of the Clipboard's contents.
-   */
-  public void setClipboardContents( String aString )
-  {
-    StringSelection stringSelection = new StringSelection( aString ) ;
-    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard() ;
-    clipboard.setContents( stringSelection, this ) ;
-  }
-
-  /**
-   * Get the String residing on the clipboard.
-   *
-   * @return any text found on the Clipboard; if none found, return an
-   * empty String.
-   */
-  public String getClipboardContents()
-  {
-    String result = "" ;
-    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard() ;
-    //odd: the Object param of getContents is not currently used
-    Transferable contents = clipboard.getContents( null ) ;
-    if ( ( contents != null ) &&
-        contents.isDataFlavorSupported( DataFlavor.stringFlavor ) )
-    {
-      try
-      {
-        result = ( String ) contents.getTransferData( DataFlavor.stringFlavor ) ;
-      }
-      catch ( UnsupportedFlavorException ex )
-      {
-        //highly unlikely since we are using a standard DataFlavor
-        System.out.println( ex ) ;
-      }
-      catch ( IOException ex )
-      {
-        System.out.println( ex ) ;
-      }
-    }
-    return result ;
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// created by : r.nagel 14.09.2004
+//
+// function : handle all clipboard action
+//
+// modified :
+
+
+package net.sf.jabref ;
+
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.ClipboardOwner;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
+
+public class ClipBoardManager implements ClipboardOwner
+{
+  public static ClipBoardManager clipBoard = new ClipBoardManager() ;
+
+  /**
+   * Empty implementation of the ClipboardOwner interface.
+   */
+  public void lostOwnership( Clipboard aClipboard, Transferable aContents )
+  {
+    //do nothing
+  }
+
+  /**
+   * Place a String on the clipboard, and make this class the
+   * owner of the Clipboard's contents.
+   */
+  public void setClipboardContents( String aString )
+  {
+    StringSelection stringSelection = new StringSelection( aString ) ;
+    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard() ;
+    clipboard.setContents( stringSelection, this ) ;
+  }
+
+  /**
+   * Get the String residing on the clipboard.
+   *
+   * @return any text found on the Clipboard; if none found, return an
+   * empty String.
+   */
+  public String getClipboardContents()
+  {
+    String result = "" ;
+    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard() ;
+    //odd: the Object param of getContents is not currently used
+    Transferable contents = clipboard.getContents( null ) ;
+    if ( ( contents != null ) &&
+        contents.isDataFlavorSupported( DataFlavor.stringFlavor ) )
+    {
+      try
+      {
+        result = ( String ) contents.getTransferData( DataFlavor.stringFlavor ) ;
+      }
+      catch ( UnsupportedFlavorException ex )
+      {
+        //highly unlikely since we are using a standard DataFlavor
+        System.out.println( ex ) ;
+      }
+      catch ( IOException ex )
+      {
+        System.out.println( ex ) ;
+      }
+    }
+    return result ;
+  }
+}
diff --git a/src/java/net/sf/jabref/CompressedEntryEditorTab.java b/src/java/net/sf/jabref/CompressedEntryEditorTab.java
index 8279d73..085644d 100644
--- a/src/java/net/sf/jabref/CompressedEntryEditorTab.java
+++ b/src/java/net/sf/jabref/CompressedEntryEditorTab.java
@@ -1,454 +1,454 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import net.sf.jabref.autocompleter.AbstractAutoCompleter;
-import net.sf.jabref.gui.AutoCompleteListener;
-import net.sf.jabref.gui.FileListEditor;
-
-import javax.swing.*;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.text.JTextComponent;
-import java.awt.*;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * A single tab displayed in the EntryEditor holding several FieldEditors.
- *
- * @author $Author$
- * @version $Revision$ ($Date$)
- *
- */
-public class CompressedEntryEditorTab extends EntryEditorTab {
-
-	private JPanel panel = new JPanel();
-
-    private JScrollPane scrollPane = new JScrollPane(panel,
-            JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-
-	private String[] fields;
-
-	private EntryEditor parent;
-
-	private HashMap<String, FieldEditor> editors = new HashMap<String, FieldEditor>();
-
-	private FieldEditor activeField = null;
-
-	public CompressedEntryEditorTab(JabRefFrame frame, BasePanel panel, List<String> fields, EntryEditor parent,
-                          boolean addKeyField, String name) {
-		if (fields != null)
-			this.fields = fields.toArray(new String[0]);
-		else
-			this.fields = new String[] {};
-
-		this.parent = parent;
-
-		setupPanel(frame, panel, addKeyField, name);
-
-		/*
-		 * The following line makes sure focus cycles inside tab instead of
-		 * being lost to other parts of the frame:
-		 */
-		scrollPane.setFocusCycleRoot(true);
-	}
-
-
-    void setupPanel(JabRefFrame frame, BasePanel bPanel, boolean addKeyField, String title) {
-
-    	InputMap im = panel.getInputMap(JComponent.WHEN_FOCUSED);
-		ActionMap am = panel.getActionMap();
-
-		im.put(Globals.prefs.getKey("Entry editor, previous entry"), "prev");
-		am.put("prev", parent.prevEntryAction);
-		im.put(Globals.prefs.getKey("Entry editor, next entry"), "next");
-		am.put("next", parent.nextEntryAction);
-
-		im.put(Globals.prefs.getKey("Entry editor, store field"), "store");
-		am.put("store", parent.storeFieldAction);
-		im.put(Globals.prefs.getKey("Entry editor, next panel"), "right");
-		im.put(Globals.prefs.getKey("Entry editor, next panel 2"), "right");
-		am.put("left", parent.switchLeftAction);
-		im.put(Globals.prefs.getKey("Entry editor, previous panel"), "left");
-		im.put(Globals.prefs.getKey("Entry editor, previous panel 2"), "left");
-		am.put("right", parent.switchRightAction);
-		im.put(Globals.prefs.getKey("Help"), "help");
-		am.put("help", parent.helpAction);
-		im.put(Globals.prefs.getKey("Save database"), "save");
-		am.put("save", parent.saveDatabaseAction);
-		im.put(Globals.prefs.getKey("Next tab"), "nexttab");
-		am.put("nexttab", parent.frame.nextTab);
-		im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
-		am.put("prevtab", parent.frame.prevTab);
-
-
-        panel.setName(title);
-        //String rowSpec = "left:pref, 4dlu, fill:pref:grow, 4dlu, fill:pref";
-        String colSpec = "fill:pref, 1dlu, fill:10dlu:grow, 1dlu, fill:pref, "
-                +"8dlu, fill:pref, 1dlu, fill:10dlu:grow, 1dlu, fill:pref";
-        StringBuffer sb = new StringBuffer();
-        int rows = (int)Math.ceil((double)fields.length/2.0);
-        for (int i = 0; i < rows; i++) {
-            sb.append("fill:pref:grow, ");
-        }
-        if (addKeyField)
-            sb.append("4dlu, fill:pref");
-        else
-            if (sb.length() >= 2)
-                sb.delete(sb.length() - 2, sb.length());
-        String rowSpec = sb.toString();
-
-        DefaultFormBuilder builder = new DefaultFormBuilder
-                (new FormLayout(colSpec, rowSpec), panel);
-
-        for (int i = 0; i < fields.length; i++) {
-            // Create the text area:
-            int editorType = BibtexFields.getEditorType(fields[i]);
-
-            final FieldEditor ta;
-            if (editorType == GUIGlobals.FILE_LIST_EDITOR)
-                ta = new FileListEditor(frame, bPanel.metaData(), fields[i], null, parent);
-            else{
-                ta = new FieldTextArea(fields[i], null);
-                //inform the fieldtextarea of search events to highlight searchstrings
-                frame.getSearchManager().addSearchListener((FieldTextArea)ta);                
-            }
-            //ta.addUndoableEditListener(bPanel.undoListener);
-
-            JComponent ex = parent.getExtra(fields[i], ta);
-
-            // Add autocompleter listener, if required for this field:
-            AbstractAutoCompleter autoComp = bPanel.getAutoCompleter(fields[i]);
-            AutoCompleteListener acl = null;
-            if (autoComp != null) {
-                acl = new AutoCompleteListener(autoComp);
-            }
-            setupJTextComponent(ta.getTextComponent(), acl);
-            ta.setAutoCompleteListener(acl);
-
-            // Store the editor for later reference:
-            editors.put(fields[i], ta);
-            if (i == 0)
-                activeField = ta;
-            //System.out.println(fields[i]+": "+BibtexFields.getFieldWeight(fields[i]));
-            //ta.getPane().setPreferredSize(new Dimension(100,
-            //        (int)(50.0*BibtexFields.getFieldWeight(fields[i]))));
-            builder.append(ta.getLabel());
-            if (ex == null)
-                builder.append(ta.getPane(), 3);
-            else {
-                builder.append(ta.getPane());
-                JPanel pan = new JPanel();
-                pan.setLayout(new BorderLayout());
-                pan.add(ex, BorderLayout.NORTH);
-                builder.append(pan);
-            }
-            if (i%2 == 1) builder.nextLine();
-        }
-
-        // Add the edit field for Bibtex-key.
-		if (addKeyField) {
-			final FieldTextField tf = new FieldTextField(BibtexFields.KEY_FIELD, parent
-				.getEntry().getField(BibtexFields.KEY_FIELD), true);
-            //tf.addUndoableEditListener(bPanel.undoListener);
-			setupJTextComponent(tf, null);
-
-			editors.put("bibtexkey", tf);
-			/*
-			 * If the key field is the only field, we should have only one
-			 * editor, and this one should be set as active initially:
-			 */
-			if (editors.size() == 1)
-				activeField = tf;
-            builder.nextLine();
-			builder.append(tf.getLabel());
-			builder.append(tf, 3);
-		}
-    }
-
-
-	BibtexEntry entry;
-
-	public BibtexEntry getEntry() {
-		return entry;
-	}
-
-	boolean isFieldModified(FieldEditor f) {
-		String text = f.getText().trim();
-
-		if (text.length() == 0) {
-			return getEntry().getField(f.getFieldName()) != null;
-		} else {
-			Object entryValue = getEntry().getField(f.getFieldName());
-			return entryValue == null || !entryValue.toString().equals(text);
-		}
-	}
-
-	public void markIfModified(FieldEditor f) {
-		// Only mark as changed if not already is and the field was indeed
-		// modified
-		if (!updating && !parent.panel.isBaseChanged() && isFieldModified(f)) {
-			markBaseChanged();
-		}
-	}
-
-	void markBaseChanged() {
-		parent.panel.markBaseChanged();
-	}
-
-	/**
-	 * Only sets the activeField variable but does not focus it.
-	 *
-	 * Call activate afterwards.
-	 *
-	 * @param c
-	 */
-	public void setActive(FieldEditor c) {
-		activeField = c;
-	}
-
-	public FieldEditor getActive() {
-		return activeField;
-	}
-
-	public List<String> getFields() {
-		return java.util.Arrays.asList(fields);
-	}
-
-	public void activate() {
-		if (activeField != null){
-			/**
-			 * Corrected to fix [ 1594169 ] Entry editor: navigation between panels
-			 */
-			new FocusRequester(activeField.getTextComponent());
-		}
-	}
-
-	/**
-	 * Reset all fields from the data in the BibtexEntry.
-	 *
-	 */
-	public void updateAll() {
-		setEntry(getEntry());
-	}
-
-	protected boolean updating = false;
-
-	public void setEntry(BibtexEntry entry) {
-		try {
-			updating = true;
-			Iterator<FieldEditor> i = editors.values().iterator();
-			while (i.hasNext()) {
-				FieldEditor editor = i.next();
-				Object content = entry.getField(editor.getFieldName());
-                String toSet = (content == null) ? "" : content.toString();
-                if (!toSet.equals(editor.getText()))
-				    editor.setText(toSet);
-			}
-			this.entry = entry;
-		} finally {
-			updating = false;
-		}
-	}
-
-	public boolean updateField(String field, String content) {
-		if (!editors.containsKey(field))
-			return false;
-		FieldEditor ed = editors.get(field);
-		ed.setText(content);
-		return true;
-	}
-
-	public void validateAllFields() {
-		for (Iterator<String> i = editors.keySet().iterator(); i.hasNext();) {
-			String field = i.next();
-			FieldEditor ed = editors.get(field);
-			ed.setEnabled(true);
-			if (((Component) ed).hasFocus())
-				ed.setActiveBackgroundColor();
-			else
-				ed.setValidBackgroundColor();
-		}
-	}
-
-	public void setEnabled(boolean enabled) {
-		Iterator<FieldEditor> i = editors.values().iterator();
-		while (i.hasNext()) {
-			FieldEditor editor = i.next();
-			editor.setEnabled(enabled);
-		}
-	}
-
-	public Component getPane() {
-		return scrollPane;
-	}
-
-	/**
-	 * Set up key bindings and focus listener for the FieldEditor.
-	 *
-	 * @param component
-	 */
-	public void setupJTextComponent(final JComponent component, final AutoCompleteListener acl) {
-
-        // Here we add focus listeners to the component. The funny code is because we need
-        // to guarantee that the AutoCompleteListener - if used - is called before fieldListener
-        // on a focus lost event. The AutoCompleteListener is responsible for removing any
-        // current suggestion when focus is lost, and this must be done before fieldListener
-        // stores the current edit. Swing doesn't guarantee the order of execution of event
-        // listeners, so we handle this by only adding the AutoCompleteListener and telling
-        // it to call fieldListener afterwards. If no AutoCompleteListener is used, we
-        // add the fieldListener normally.
-        if (acl != null) {
-            component.addKeyListener(acl);
-            component.addFocusListener(acl);
-            acl.setNextFocusListener(fieldListener);
-        }
-        else
-		    component.addFocusListener(fieldListener);
-
-		InputMap im = component.getInputMap(JComponent.WHEN_FOCUSED);
-		ActionMap am = component.getActionMap();
-
-		im.put(Globals.prefs.getKey("Entry editor, previous entry"), "prev");
-		am.put("prev", parent.prevEntryAction);
-		im.put(Globals.prefs.getKey("Entry editor, next entry"), "next");
-		am.put("next", parent.nextEntryAction);
-
-		im.put(Globals.prefs.getKey("Entry editor, store field"), "store");
-		am.put("store", parent.storeFieldAction);
-		im.put(Globals.prefs.getKey("Entry editor, next panel"), "right");
-		im.put(Globals.prefs.getKey("Entry editor, next panel 2"), "right");
-		am.put("left", parent.switchLeftAction);
-		im.put(Globals.prefs.getKey("Entry editor, previous panel"), "left");
-		im.put(Globals.prefs.getKey("Entry editor, previous panel 2"), "left");
-		am.put("right", parent.switchRightAction);
-		im.put(Globals.prefs.getKey("Help"), "help");
-		am.put("help", parent.helpAction);
-		im.put(Globals.prefs.getKey("Save database"), "save");
-		am.put("save", parent.saveDatabaseAction);
-		im.put(Globals.prefs.getKey("Next tab"), "nexttab");
-		am.put("nexttab", parent.frame.nextTab);
-		im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
-		am.put("prevtab", parent.frame.prevTab);
-
-		try {
-			HashSet<AWTKeyStroke> keys = new HashSet<AWTKeyStroke>(component
-				.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
-			keys.clear();
-			keys.add(AWTKeyStroke.getAWTKeyStroke("pressed TAB"));
-			component.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, keys);
-			keys = new HashSet<AWTKeyStroke>(component
-				.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
-			keys.clear();
-			keys.add(KeyStroke.getKeyStroke("shift pressed TAB"));
-			component.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, keys);
-		} catch (Throwable t) {
-			System.err.println(t);
-		}
-
-    }
-
-	/*
-	 * Focus listener that fires the storeFieldAction when a FieldTextArea loses
-	 * focus.
-	 *
-	 * TODO: It would be nice to test this thoroughly.
-	 */
-	FocusListener fieldListener = new FocusListener() {
-
-		JTextComponent c;
-
-		DocumentListener d;
-
-		public void focusGained(FocusEvent e) {
-
-			synchronized (this){
-				if (c != null) {
-					c.getDocument().removeDocumentListener(d);
-					c = null;
-					d = null;
-				}
-
-				if (e.getSource() instanceof JTextComponent) {
-
-					c = (JTextComponent) e.getSource();
-					/**
-					 * [ 1553552 ] Not properly detecting changes to flag as
-					 * changed
-					 */
-					d = new DocumentListener() {
-
-						void fire(DocumentEvent e) {
-							if (c.isFocusOwner()) {
-								markIfModified((FieldEditor) c);
-							}
-						}
-
-						public void changedUpdate(DocumentEvent e) {
-							fire(e);
-						}
-
-						public void insertUpdate(DocumentEvent e) {
-							fire(e);
-						}
-
-						public void removeUpdate(DocumentEvent e) {
-							fire(e);
-						}
-					};
-					c.getDocument().addDocumentListener(d);
-
-                    /**
-                     * Makes the vertical scroll panel view follow the focus
-                     */
-                    Component cScrollPane = c.getParent().getParent();
-                    if (cScrollPane instanceof JScrollPane) {
-                        JScrollPane componentPane = (JScrollPane) cScrollPane;
-                        Component cPane = componentPane.getParent();
-                        if (cPane instanceof JPanel) {
-                            JPanel panel = (JPanel) cPane;
-                            Rectangle bounds = componentPane.getBounds();
-                            panel.scrollRectToVisible(bounds);
-                        }
-                    }
-				
-				}
-			}
-
-			setActive((FieldEditor) e.getSource());
-
-		}
-
-		public void focusLost(FocusEvent e) {
-            synchronized (this) {
-				if (c != null) {
-					c.getDocument().removeDocumentListener(d);
-					c = null;
-					d = null;
-				}
-			}
-			if (!e.isTemporary())
-				parent.updateField(e.getSource());
-		}
-	};
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import net.sf.jabref.autocompleter.AbstractAutoCompleter;
+import net.sf.jabref.gui.AutoCompleteListener;
+import net.sf.jabref.gui.FileListEditor;
+
+import javax.swing.*;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.text.JTextComponent;
+import java.awt.*;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * A single tab displayed in the EntryEditor holding several FieldEditors.
+ *
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ *
+ */
+public class CompressedEntryEditorTab extends EntryEditorTab {
+
+	private JPanel panel = new JPanel();
+
+    private JScrollPane scrollPane = new JScrollPane(panel,
+            JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+
+	private String[] fields;
+
+	private EntryEditor parent;
+
+	private HashMap<String, FieldEditor> editors = new HashMap<String, FieldEditor>();
+
+	private FieldEditor activeField = null;
+
+	public CompressedEntryEditorTab(JabRefFrame frame, BasePanel panel, List<String> fields, EntryEditor parent,
+                          boolean addKeyField, String name) {
+		if (fields != null)
+			this.fields = fields.toArray(new String[0]);
+		else
+			this.fields = new String[] {};
+
+		this.parent = parent;
+
+		setupPanel(frame, panel, addKeyField, name);
+
+		/*
+		 * The following line makes sure focus cycles inside tab instead of
+		 * being lost to other parts of the frame:
+		 */
+		scrollPane.setFocusCycleRoot(true);
+	}
+
+
+    void setupPanel(JabRefFrame frame, BasePanel bPanel, boolean addKeyField, String title) {
+
+    	InputMap im = panel.getInputMap(JComponent.WHEN_FOCUSED);
+		ActionMap am = panel.getActionMap();
+
+		im.put(Globals.prefs.getKey("Entry editor, previous entry"), "prev");
+		am.put("prev", parent.prevEntryAction);
+		im.put(Globals.prefs.getKey("Entry editor, next entry"), "next");
+		am.put("next", parent.nextEntryAction);
+
+		im.put(Globals.prefs.getKey("Entry editor, store field"), "store");
+		am.put("store", parent.storeFieldAction);
+		im.put(Globals.prefs.getKey("Entry editor, next panel"), "right");
+		im.put(Globals.prefs.getKey("Entry editor, next panel 2"), "right");
+		am.put("left", parent.switchLeftAction);
+		im.put(Globals.prefs.getKey("Entry editor, previous panel"), "left");
+		im.put(Globals.prefs.getKey("Entry editor, previous panel 2"), "left");
+		am.put("right", parent.switchRightAction);
+		im.put(Globals.prefs.getKey("Help"), "help");
+		am.put("help", parent.helpAction);
+		im.put(Globals.prefs.getKey("Save database"), "save");
+		am.put("save", parent.saveDatabaseAction);
+		im.put(Globals.prefs.getKey("Next tab"), "nexttab");
+		am.put("nexttab", parent.frame.nextTab);
+		im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
+		am.put("prevtab", parent.frame.prevTab);
+
+
+        panel.setName(title);
+        //String rowSpec = "left:pref, 4dlu, fill:pref:grow, 4dlu, fill:pref";
+        String colSpec = "fill:pref, 1dlu, fill:10dlu:grow, 1dlu, fill:pref, "
+                +"8dlu, fill:pref, 1dlu, fill:10dlu:grow, 1dlu, fill:pref";
+        StringBuffer sb = new StringBuffer();
+        int rows = (int)Math.ceil((double)fields.length/2.0);
+        for (int i = 0; i < rows; i++) {
+            sb.append("fill:pref:grow, ");
+        }
+        if (addKeyField)
+            sb.append("4dlu, fill:pref");
+        else
+            if (sb.length() >= 2)
+                sb.delete(sb.length() - 2, sb.length());
+        String rowSpec = sb.toString();
+
+        DefaultFormBuilder builder = new DefaultFormBuilder
+                (new FormLayout(colSpec, rowSpec), panel);
+
+        for (int i = 0; i < fields.length; i++) {
+            // Create the text area:
+            int editorType = BibtexFields.getEditorType(fields[i]);
+
+            final FieldEditor ta;
+            if (editorType == GUIGlobals.FILE_LIST_EDITOR)
+                ta = new FileListEditor(frame, bPanel.metaData(), fields[i], null, parent);
+            else{
+                ta = new FieldTextArea(fields[i], null);
+                //inform the fieldtextarea of search events to highlight searchstrings
+                frame.getSearchManager().addSearchListener((FieldTextArea)ta);                
+            }
+            //ta.addUndoableEditListener(bPanel.undoListener);
+
+            JComponent ex = parent.getExtra(fields[i], ta);
+
+            // Add autocompleter listener, if required for this field:
+            AbstractAutoCompleter autoComp = bPanel.getAutoCompleter(fields[i]);
+            AutoCompleteListener acl = null;
+            if (autoComp != null) {
+                acl = new AutoCompleteListener(autoComp);
+            }
+            setupJTextComponent(ta.getTextComponent(), acl);
+            ta.setAutoCompleteListener(acl);
+
+            // Store the editor for later reference:
+            editors.put(fields[i], ta);
+            if (i == 0)
+                activeField = ta;
+            //System.out.println(fields[i]+": "+BibtexFields.getFieldWeight(fields[i]));
+            //ta.getPane().setPreferredSize(new Dimension(100,
+            //        (int)(50.0*BibtexFields.getFieldWeight(fields[i]))));
+            builder.append(ta.getLabel());
+            if (ex == null)
+                builder.append(ta.getPane(), 3);
+            else {
+                builder.append(ta.getPane());
+                JPanel pan = new JPanel();
+                pan.setLayout(new BorderLayout());
+                pan.add(ex, BorderLayout.NORTH);
+                builder.append(pan);
+            }
+            if (i%2 == 1) builder.nextLine();
+        }
+
+        // Add the edit field for Bibtex-key.
+		if (addKeyField) {
+			final FieldTextField tf = new FieldTextField(BibtexFields.KEY_FIELD, parent
+				.getEntry().getField(BibtexFields.KEY_FIELD), true);
+            //tf.addUndoableEditListener(bPanel.undoListener);
+			setupJTextComponent(tf, null);
+
+			editors.put("bibtexkey", tf);
+			/*
+			 * If the key field is the only field, we should have only one
+			 * editor, and this one should be set as active initially:
+			 */
+			if (editors.size() == 1)
+				activeField = tf;
+            builder.nextLine();
+			builder.append(tf.getLabel());
+			builder.append(tf, 3);
+		}
+    }
+
+
+	BibtexEntry entry;
+
+	public BibtexEntry getEntry() {
+		return entry;
+	}
+
+	boolean isFieldModified(FieldEditor f) {
+		String text = f.getText().trim();
+
+		if (text.length() == 0) {
+			return getEntry().getField(f.getFieldName()) != null;
+		} else {
+			Object entryValue = getEntry().getField(f.getFieldName());
+			return entryValue == null || !entryValue.toString().equals(text);
+		}
+	}
+
+	public void markIfModified(FieldEditor f) {
+		// Only mark as changed if not already is and the field was indeed
+		// modified
+		if (!updating && !parent.panel.isBaseChanged() && isFieldModified(f)) {
+			markBaseChanged();
+		}
+	}
+
+	void markBaseChanged() {
+		parent.panel.markBaseChanged();
+	}
+
+	/**
+	 * Only sets the activeField variable but does not focus it.
+	 *
+	 * Call activate afterwards.
+	 *
+	 * @param c
+	 */
+	public void setActive(FieldEditor c) {
+		activeField = c;
+	}
+
+	public FieldEditor getActive() {
+		return activeField;
+	}
+
+	public List<String> getFields() {
+		return java.util.Arrays.asList(fields);
+	}
+
+	public void activate() {
+		if (activeField != null){
+			/**
+			 * Corrected to fix [ 1594169 ] Entry editor: navigation between panels
+			 */
+			new FocusRequester(activeField.getTextComponent());
+		}
+	}
+
+	/**
+	 * Reset all fields from the data in the BibtexEntry.
+	 *
+	 */
+	public void updateAll() {
+		setEntry(getEntry());
+	}
+
+	protected boolean updating = false;
+
+	public void setEntry(BibtexEntry entry) {
+		try {
+			updating = true;
+			Iterator<FieldEditor> i = editors.values().iterator();
+			while (i.hasNext()) {
+				FieldEditor editor = i.next();
+				Object content = entry.getField(editor.getFieldName());
+                String toSet = (content == null) ? "" : content.toString();
+                if (!toSet.equals(editor.getText()))
+				    editor.setText(toSet);
+			}
+			this.entry = entry;
+		} finally {
+			updating = false;
+		}
+	}
+
+	public boolean updateField(String field, String content) {
+		if (!editors.containsKey(field))
+			return false;
+		FieldEditor ed = editors.get(field);
+		ed.setText(content);
+		return true;
+	}
+
+	public void validateAllFields() {
+		for (Iterator<String> i = editors.keySet().iterator(); i.hasNext();) {
+			String field = i.next();
+			FieldEditor ed = editors.get(field);
+			ed.setEnabled(true);
+			if (((Component) ed).hasFocus())
+				ed.setActiveBackgroundColor();
+			else
+				ed.setValidBackgroundColor();
+		}
+	}
+
+	public void setEnabled(boolean enabled) {
+		Iterator<FieldEditor> i = editors.values().iterator();
+		while (i.hasNext()) {
+			FieldEditor editor = i.next();
+			editor.setEnabled(enabled);
+		}
+	}
+
+	public Component getPane() {
+		return scrollPane;
+	}
+
+	/**
+	 * Set up key bindings and focus listener for the FieldEditor.
+	 *
+	 * @param component
+	 */
+	public void setupJTextComponent(final JComponent component, final AutoCompleteListener acl) {
+
+        // Here we add focus listeners to the component. The funny code is because we need
+        // to guarantee that the AutoCompleteListener - if used - is called before fieldListener
+        // on a focus lost event. The AutoCompleteListener is responsible for removing any
+        // current suggestion when focus is lost, and this must be done before fieldListener
+        // stores the current edit. Swing doesn't guarantee the order of execution of event
+        // listeners, so we handle this by only adding the AutoCompleteListener and telling
+        // it to call fieldListener afterwards. If no AutoCompleteListener is used, we
+        // add the fieldListener normally.
+        if (acl != null) {
+            component.addKeyListener(acl);
+            component.addFocusListener(acl);
+            acl.setNextFocusListener(fieldListener);
+        }
+        else
+		    component.addFocusListener(fieldListener);
+
+		InputMap im = component.getInputMap(JComponent.WHEN_FOCUSED);
+		ActionMap am = component.getActionMap();
+
+		im.put(Globals.prefs.getKey("Entry editor, previous entry"), "prev");
+		am.put("prev", parent.prevEntryAction);
+		im.put(Globals.prefs.getKey("Entry editor, next entry"), "next");
+		am.put("next", parent.nextEntryAction);
+
+		im.put(Globals.prefs.getKey("Entry editor, store field"), "store");
+		am.put("store", parent.storeFieldAction);
+		im.put(Globals.prefs.getKey("Entry editor, next panel"), "right");
+		im.put(Globals.prefs.getKey("Entry editor, next panel 2"), "right");
+		am.put("left", parent.switchLeftAction);
+		im.put(Globals.prefs.getKey("Entry editor, previous panel"), "left");
+		im.put(Globals.prefs.getKey("Entry editor, previous panel 2"), "left");
+		am.put("right", parent.switchRightAction);
+		im.put(Globals.prefs.getKey("Help"), "help");
+		am.put("help", parent.helpAction);
+		im.put(Globals.prefs.getKey("Save database"), "save");
+		am.put("save", parent.saveDatabaseAction);
+		im.put(Globals.prefs.getKey("Next tab"), "nexttab");
+		am.put("nexttab", parent.frame.nextTab);
+		im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
+		am.put("prevtab", parent.frame.prevTab);
+
+		try {
+			HashSet<AWTKeyStroke> keys = new HashSet<AWTKeyStroke>(component
+				.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
+			keys.clear();
+			keys.add(AWTKeyStroke.getAWTKeyStroke("pressed TAB"));
+			component.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, keys);
+			keys = new HashSet<AWTKeyStroke>(component
+				.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
+			keys.clear();
+			keys.add(KeyStroke.getKeyStroke("shift pressed TAB"));
+			component.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, keys);
+		} catch (Throwable t) {
+			System.err.println(t);
+		}
+
+    }
+
+	/*
+	 * Focus listener that fires the storeFieldAction when a FieldTextArea loses
+	 * focus.
+	 *
+	 * TODO: It would be nice to test this thoroughly.
+	 */
+	FocusListener fieldListener = new FocusListener() {
+
+		JTextComponent c;
+
+		DocumentListener d;
+
+		public void focusGained(FocusEvent e) {
+
+			synchronized (this){
+				if (c != null) {
+					c.getDocument().removeDocumentListener(d);
+					c = null;
+					d = null;
+				}
+
+				if (e.getSource() instanceof JTextComponent) {
+
+					c = (JTextComponent) e.getSource();
+					/**
+					 * [ 1553552 ] Not properly detecting changes to flag as
+					 * changed
+					 */
+					d = new DocumentListener() {
+
+						void fire(DocumentEvent e) {
+							if (c.isFocusOwner()) {
+								markIfModified((FieldEditor) c);
+							}
+						}
+
+						public void changedUpdate(DocumentEvent e) {
+							fire(e);
+						}
+
+						public void insertUpdate(DocumentEvent e) {
+							fire(e);
+						}
+
+						public void removeUpdate(DocumentEvent e) {
+							fire(e);
+						}
+					};
+					c.getDocument().addDocumentListener(d);
+
+                    /**
+                     * Makes the vertical scroll panel view follow the focus
+                     */
+                    Component cScrollPane = c.getParent().getParent();
+                    if (cScrollPane instanceof JScrollPane) {
+                        JScrollPane componentPane = (JScrollPane) cScrollPane;
+                        Component cPane = componentPane.getParent();
+                        if (cPane instanceof JPanel) {
+                            JPanel panel = (JPanel) cPane;
+                            Rectangle bounds = componentPane.getBounds();
+                            panel.scrollRectToVisible(bounds);
+                        }
+                    }
+				
+				}
+			}
+
+			setActive((FieldEditor) e.getSource());
+
+		}
+
+		public void focusLost(FocusEvent e) {
+            synchronized (this) {
+				if (c != null) {
+					c.getDocument().removeDocumentListener(d);
+					c = null;
+					d = null;
+				}
+			}
+			if (!e.isTemporary())
+				parent.updateField(e.getSource());
+		}
+	};
+}
diff --git a/src/java/net/sf/jabref/ContentSelectorDialog2.java b/src/java/net/sf/jabref/ContentSelectorDialog2.java
index 81ea895..96d2a9b 100644
--- a/src/java/net/sf/jabref/ContentSelectorDialog2.java
+++ b/src/java/net/sf/jabref/ContentSelectorDialog2.java
@@ -1,510 +1,510 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.FocusAdapter;
-import java.awt.event.FocusEvent;
-import java.util.*;
-
-import javax.swing.*;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-public class ContentSelectorDialog2 extends JDialog {
-
-    ActionListener wordEditFieldListener = null;
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-    JPanel fieldPan = new JPanel(),
-	wordPan = new JPanel(),
-	buttonPan = new JPanel(),
-	fieldNamePan = new JPanel(),
-	wordEditPan = new JPanel();
-
-    final String
-	WORD_EMPTY_TEXT = Globals.lang("<no field>"),
-	WORD_FIRSTLINE_TEXT = Globals.lang("<select word>"),
-	FIELD_FIRST_LINE = Globals.lang("<field name>");
-    MetaData metaData;
-    String currentField = null;
-    TreeSet<String> fieldSet, wordSet;
-    JabRefFrame frame;
-    BasePanel panel;
-    JButton help = new JButton(Globals.lang("Help")),
-	newField = new JButton(Globals.lang("New")),
-	removeField = new JButton(Globals.lang("Remove")),
-	newWord = new JButton(Globals.lang("New")),
-	removeWord = new JButton(Globals.lang("Remove")),
-	ok = new JButton(Globals.lang("Ok")),
-	cancel = new JButton(),
-	apply = new JButton(Globals.lang("Apply"));
-    DefaultListModel fieldListModel = new DefaultListModel(),
-	wordListModel = new DefaultListModel();
-    JList fieldList = new JList(fieldListModel),
-	wordList = new JList(wordListModel);
-    JTextField fieldNameField = new JTextField("", 20),
-	wordEditField = new JTextField("", 20);
-    JScrollPane fPane = new JScrollPane(fieldList),
-	wPane = new JScrollPane(wordList);
-
-    HashMap<String, DefaultListModel> wordListModels = new HashMap<String, DefaultListModel>();
-    ArrayList<String> removedFields = new ArrayList<String>();
-
-    /**
-     * 
-     * @param owner the parent Window (Dialog or Frame)
-     * @param frame the JabRef Frame
-     * @param panel the currently selected BasePanel
-     * @param modal should this dialog be modal?
-     * @param metaData The metadata of the current database
-     * @param fieldName the field this selector is initialized for. May be null.
-     */
-    public ContentSelectorDialog2(Window owner, JabRefFrame frame, BasePanel panel, boolean modal, MetaData metaData,
-              String fieldName) {
-        super(owner, Globals.lang("Setup selectors"));
-        this.setModal(modal);
-        this.metaData = metaData;
-        this.frame = frame;
-        this.panel = panel;
-        this.currentField = fieldName;
-
-        //help = new JButton(Globals.lang("Help"));
-        //help.addActionListener(new HelpAction(frame.helpDiag, GUIGlobals.contentSelectorHelp, "Help"));
-        //help = new HelpAction(frame.helpDiag, GUIGlobals.contentSelectorHelp, "Help");
-        initLayout();
-        //  wordSelector.addItem(WORD_EMPTY_TEXT);
-    
-        setupFieldSelector();
-        setupWordSelector();
-        setupActions();
-        Util.bindCloseDialogKeyToCancelAction(this.rootPane, cancel.getAction());
-        int fieldInd = fieldListModel.indexOf(currentField);
-        if (fieldInd >= 0)
-            fieldList.setSelectedIndex(fieldInd);
-    
-        pack();
-    }
-
-
-    private void setupActions() {
-
-	wordList.addListSelectionListener(new ListSelectionListener() {
-		public void valueChanged(ListSelectionEvent e) {
-		    wordEditField.setText((String)wordList.getSelectedValue());
-		    wordEditField.selectAll();
-		    new FocusRequester(wordEditField);
-		}
-	    });
-
-	newWord.addActionListener(new ActionListener() {
-		public void actionPerformed(ActionEvent e) {
-		    newWordAction();
-		}
-	    });
-                
-        wordEditFieldListener = new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                int index = wordList.getSelectedIndex();
-                String old = (String)wordList.getSelectedValue(),
-            	newVal = wordEditField.getText();
-                if (newVal.equals("") || newVal.equals(old)) {
-                    return; // Empty string or no change.
-                }
-                if (wordListModel.contains(newVal)) {
-                	// ensure that word already in list is visible
-                	index = wordListModel.indexOf(newVal);
-                	wordList.ensureIndexIsVisible(index);
-                	return;
-                }
-
-                int newIndex = findPos(wordListModel, newVal);
-                if (index >= 0) {
-                	// initiate replacement of selected word
-                    wordListModel.remove(index);
-                    if (newIndex > index) {
-                    	// newIndex has to be adjusted after removal of previous entry
-                    	newIndex--;
-                    }
-                }
-                wordListModel.add(newIndex, newVal);
-                wordList.ensureIndexIsVisible(newIndex);
-                wordEditField.selectAll();
-            }
-	};
-        wordEditField.addActionListener(wordEditFieldListener);
-        
-	removeWord.addActionListener(new ActionListener() {
-		public void actionPerformed(ActionEvent e) {
-		    int index = wordList.getSelectedIndex();
-		    if (index == -1)
-			return;
-		    wordListModel.remove(index);
-		    wordEditField.setText("");
-		    if (wordListModel.size() > 0)
-			wordList.setSelectedIndex(Math.min(index, wordListModel.size()-1));
-		}
-	    });
-
-
-	fieldList.addListSelectionListener(new ListSelectionListener() {
-		public void valueChanged(ListSelectionEvent e) {
-		    currentField = (String)fieldList.getSelectedValue();
-		    fieldNameField.setText("");
-		    setupWordSelector();
-		}
-	    });
-
-	newField.addActionListener(new ActionListener() {
-		public void actionPerformed(ActionEvent e) {
-			if (!fieldListModel.get(0).equals(FIELD_FIRST_LINE)) {
-				// only add <field name> once
-				fieldListModel.add(0, FIELD_FIRST_LINE);
-			}
-		    fieldList.setSelectedIndex(0);
-		    fPane.getVerticalScrollBar().setValue(0);
-		    fieldNameField.setEnabled(true);
-		    fieldNameField.setText(currentField);
-		    fieldNameField.selectAll();
-
-		    new FocusRequester(fieldNameField);
-		}
-	    });
-
-	fieldNameField.addActionListener(new ActionListener() {
-		public void actionPerformed(ActionEvent e) {
-		    fieldNameField.transferFocus();
-		}
-	    });
-
-	fieldNameField.addFocusListener(new FocusAdapter() {
-		
-		/**
-		 * Adds the text value to the list
-		 */
-		public void focusLost(FocusEvent e) {
-		    String s = fieldNameField.getText();
-		    fieldNameField.setText("");
-		    fieldNameField.setEnabled(false);
-		    if (!FIELD_FIRST_LINE.equals(s) && !"".equals(s)) {
-		    	// user has typed something
-		    	
-			    // remove "<first name>" from list
-				fieldListModel.remove(0);
-				
-				int pos;
-				if (fieldListModel.contains(s)) {
-					// field already exists, scroll to that field (below)
-					pos = fieldListModel.indexOf(s);
-				} else {
-					// Add new field.
-					pos = findPos(fieldListModel, s);
-					fieldListModel.add(Math.max(0, pos), s);
-				}
-				fieldList.setSelectedIndex(pos);
-				fieldList.ensureIndexIsVisible(pos);
-				currentField = s;
-				setupWordSelector();
-				newWordAction();
-				//new FocusRequester(wordEditField);
-		    }
-		}
-	    });
-
-	removeField.addActionListener(new ActionListener() {
-		public void actionPerformed(ActionEvent e) {
-		    int index = fieldList.getSelectedIndex();
-		    if (index == -1)
-			return;
-		    String fieldName = (String)fieldListModel.get(index);
-		    removedFields.add(fieldName);
-		    fieldListModel.remove(index);
-		    wordListModels.remove(fieldName);
-		    fieldNameField.setText("");
-		    if (fieldListModel.size() > 0)
-			fieldList.setSelectedIndex(Math.min(index, wordListModel.size()-1));
-		}
-	    });
-
-	help.addActionListener(new ActionListener() {
-		public void actionPerformed(ActionEvent e) {
-		    frame.helpDiag.showPage(GUIGlobals.contentSelectorHelp);
-		}
-	    });
-
-	ok.addActionListener(new ActionListener() {
-		public void actionPerformed(ActionEvent e) {
-		    applyChanges();
-		    dispose();
-		}
-	    });
-
-	apply.addActionListener(new ActionListener() {
-		public void actionPerformed(ActionEvent e) {
-            // Store if an entry is currently being edited:
-            if (!wordEditField.getText().equals("")) {
-                wordEditFieldListener.actionPerformed(null);
-            }
-		    applyChanges();
-		}
-	    });
-	
-	@SuppressWarnings("serial")
-    Action cancelAction = new AbstractAction() {
-		public void actionPerformed(ActionEvent e) {
-		    dispose();
-		}
-	};
-	cancelAction.putValue(Action.NAME, Globals.lang("Cancel"));
-	cancel.setAction(cancelAction);
-    }
-
-    private void newWordAction() {
-	if ((wordListModel.size() == 0) || 
-	    !wordListModel.get(0).equals(WORD_FIRSTLINE_TEXT))
-	    wordListModel.add(0, WORD_FIRSTLINE_TEXT);
-	wordList.setSelectedIndex(0);
-	wPane.getVerticalScrollBar().setValue(0);
-    }
-
-
-    private void applyChanges() {
-	boolean changedFieldSet = false; // Watch if we need to rebuild entry editors
-
-	// First remove the mappings for fields that have been deleted.
-	// If these were re-added, they will be added below, so it doesn't
-	// cause any harm to remove them here.
-	for (Iterator<String> i=removedFields.iterator(); i.hasNext();) {
-	    String fieldName = i.next();
-	    metaData.remove(Globals.SELECTOR_META_PREFIX+fieldName);
-	    changedFieldSet = true;
-	}
-
-	// Cycle through all fields that we have created listmodels for:
-	loop: for (Iterator<String> i=wordListModels.keySet().iterator(); i.hasNext();) {
-	    // For each field name, store the values:
-	    String fieldName = i.next();
-	    if ((fieldName == null) || FIELD_FIRST_LINE.equals(fieldName))
-		continue loop;
-	    DefaultListModel lm = wordListModels.get(fieldName);
-	    int start = 0;
-	    // Avoid storing the <new word> marker if it is there:
-	    if (lm.size() > 0)
-		while ((start<lm.size()) && (lm.get(start)).equals(WORD_FIRSTLINE_TEXT))
-		    start++;
-	    Vector<String> data = metaData.getData(Globals.SELECTOR_META_PREFIX+fieldName);
-	    boolean newField = false;
-	    if (data == null) {
-		newField = true;
-		data = new Vector<String>();
-		changedFieldSet = true;
-
-	    } else
-		data.clear();
-	    for (int wrd=start; wrd<lm.size(); wrd++) {
-		String word = (String)lm.get(wrd);
-		data.add(word);
-	    }
-	    if (newField)
-		metaData.putData(Globals.SELECTOR_META_PREFIX+fieldName, data);
-	}
-
-	// System.out.println("TODO: remove metadata for removed selector field.");
-	panel.markNonUndoableBaseChanged();
-
-	// Update all selectors in the current BasePanel.
-	if (changedFieldSet) {
-	    panel.rebuildAllEntryEditors();
-    } else {
-	    panel.updateAllContentSelectors();
-	}
-    panel.addContentSelectorValuesToAutoCompleters();
-        
-    }
-
-    /**
-     * Set the contents of the field selector list.
-     *
-     */
-    private void setupFieldSelector() {
-		fieldListModel.clear();
-		SortedSet<String> contents = new TreeSet<String>();
-		for (String s : metaData) {
-		    if (s.startsWith(Globals.SELECTOR_META_PREFIX)) {
-		    	contents.add(s.substring(Globals.SELECTOR_META_PREFIX.length()));
-		    }
-		}
-		if (contents.size() == 0) {
-			// if nothing was added, put the default fields (as described in the help)
-			fieldListModel.addElement("author");
-			fieldListModel.addElement("journal");
-			fieldListModel.addElement("keywords");
-			fieldListModel.addElement("publisher");
-		} else {
-			for (String s : contents) {
-				fieldListModel.addElement(s);
-			}
-		}
-		
-		if (currentField == null) {
-			// if dialog is created for the whole database,
-			// select the first field to avoid confusions in GUI usage
-			fieldList.setSelectedIndex(0); 
-		} else {
-			// a specific field has been chosen at the constructur
-			// select this field
-			int i = fieldListModel.indexOf(currentField);
-			if (i != -1) {
-				// field has been found in list, select it
-				fieldList.setSelectedIndex(i);
-			}
-		}
-    }
-
-
-    private void setupWordSelector() {
-
-		// Have we already created a listmodel for this field?
-    	wordListModel = wordListModels.get(currentField);
-		if (wordListModel != null) {
-			wordList.setModel(wordListModel);
-		} else {
-			wordListModel = new DefaultListModel();
-			wordList.setModel(wordListModel);
-			wordListModels.put(currentField, wordListModel);
-			// wordListModel.addElement(WORD_FIRSTLINE_TEXT);
-			Vector<String> items = metaData.getData(Globals.SELECTOR_META_PREFIX + currentField);
-			if (items != null) {
-				wordSet = new TreeSet<String>(items);
-				int index = 0;
-				for (String s : wordSet){
-					wordListModel.add(index, s);
-					index++;
-				}
-			}
-		}
-	}
-
-    private int findPos(DefaultListModel lm, String item) {
-	for (int i=0; i<lm.size(); i++) {
-	    String s = (String)lm.get(i);
-	    if (item.compareToIgnoreCase(s) < 0) { // item precedes s
-		return i;
-	    }
-	}
-	return lm.size();
-    }
-
-    private void initLayout() {
-	fieldNameField.setEnabled(false);
-	fieldList.setVisibleRowCount(4);
-	wordList.setVisibleRowCount(10);
-	final String VAL = "Uren luren himmelturen, ja Besseggen.";
-	fieldList.setPrototypeCellValue(VAL);
-	wordList.setPrototypeCellValue(VAL);
-
-	fieldPan.setBorder(BorderFactory.createTitledBorder
-			       (BorderFactory.createEtchedBorder(),
-				Globals.lang("Field name")));
-	wordPan.setBorder(BorderFactory.createTitledBorder
-			       (BorderFactory.createEtchedBorder(),
-				Globals.lang("Keyword")));
-	fieldPan.setLayout(gbl);
-	wordPan.setLayout(gbl);
-	con.insets = new Insets(2, 2, 2, 2);
-	con.fill = GridBagConstraints.BOTH;
-	con.gridwidth = 2;
-	con.weightx = 1;
-	con.weighty = 1;
-	con.gridx = 0;
-	con.gridy = 0;
-	gbl.setConstraints(fPane, con);
-	fieldPan.add(fPane);
-	gbl.setConstraints(wPane, con);
-	wordPan.add(wPane);
-	con.gridwidth = 1;
-	con.gridx = 2;
-	//con.weightx = 0.7;
-	con.gridheight = 2;
-	gbl.setConstraints(fieldNamePan, con);
-	fieldPan.add(fieldNamePan);
-	gbl.setConstraints(wordEditPan, con);
-	wordPan.add(wordEditPan);
-	con.gridx = 0;
-	con.gridy = 1;
-	con.weightx = 0;
-	con.weighty = 0;
-	con.gridwidth = 1;
-	con.gridheight = 1;
-	con.fill = GridBagConstraints.NONE;
-	con.anchor = GridBagConstraints.WEST;
-    gbl.setConstraints(newField, con);
-	fieldPan.add(newField);
-	gbl.setConstraints(newWord, con);
-	wordPan.add(newWord);
-	con.gridx = 1;
-	//con.anchor = GridBagConstraints.EAST;
-	gbl.setConstraints(removeField, con);
-	fieldPan.add(removeField);
-	gbl.setConstraints(removeWord, con);
-	wordPan.add(removeWord);
-	con.anchor = GridBagConstraints.WEST;
-	con.gridx = 0;
-	con.gridy = 0;
-	gbl.setConstraints(fieldNameField, con);
-	fieldNamePan.add(fieldNameField);
-	gbl.setConstraints(wordEditField, con);
-	wordEditPan.add(wordEditField);
-
-	// Add buttons:
-        ButtonBarBuilder bsb = new ButtonBarBuilder(buttonPan);
-        bsb.addGlue();
-        bsb.addButton(ok);
-	    bsb.addButton(apply);
-        bsb.addButton(cancel);
-        bsb.addRelatedGap();
-        bsb.addButton(help);
-        bsb.addGlue();
-
-    // Add panels to dialog:
-	con.fill = GridBagConstraints.BOTH;
-	getContentPane().setLayout(gbl);
-	con.weightx = 1;
-	con.weighty = 0.5;
-	con.gridwidth = 1;
-	con.gridheight = 1;
-	con.gridx = 0;
-	con.gridy = 0;
-	gbl.setConstraints(fieldPan, con);
-	getContentPane().add(fieldPan);
-	con.gridy = 1;
-	gbl.setConstraints(wordPan, con);
-	getContentPane().add(wordPan);
-	con.weighty = 0;
-	con.gridy = 2;
-	con.insets = new Insets(12, 2, 2, 2);
-	gbl.setConstraints(buttonPan, con);
-	getContentPane().add(buttonPan);
-
-
-    }
-
-
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusAdapter;
+import java.awt.event.FocusEvent;
+import java.util.*;
+
+import javax.swing.*;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+public class ContentSelectorDialog2 extends JDialog {
+
+    ActionListener wordEditFieldListener = null;
+    GridBagLayout gbl = new GridBagLayout();
+    GridBagConstraints con = new GridBagConstraints();
+    JPanel fieldPan = new JPanel(),
+	wordPan = new JPanel(),
+	buttonPan = new JPanel(),
+	fieldNamePan = new JPanel(),
+	wordEditPan = new JPanel();
+
+    final String
+	WORD_EMPTY_TEXT = Globals.lang("<no field>"),
+	WORD_FIRSTLINE_TEXT = Globals.lang("<select word>"),
+	FIELD_FIRST_LINE = Globals.lang("<field name>");
+    MetaData metaData;
+    String currentField = null;
+    TreeSet<String> fieldSet, wordSet;
+    JabRefFrame frame;
+    BasePanel panel;
+    JButton help = new JButton(Globals.lang("Help")),
+	newField = new JButton(Globals.lang("New")),
+	removeField = new JButton(Globals.lang("Remove")),
+	newWord = new JButton(Globals.lang("New")),
+	removeWord = new JButton(Globals.lang("Remove")),
+	ok = new JButton(Globals.lang("Ok")),
+	cancel = new JButton(),
+	apply = new JButton(Globals.lang("Apply"));
+    DefaultListModel fieldListModel = new DefaultListModel(),
+	wordListModel = new DefaultListModel();
+    JList fieldList = new JList(fieldListModel),
+	wordList = new JList(wordListModel);
+    JTextField fieldNameField = new JTextField("", 20),
+	wordEditField = new JTextField("", 20);
+    JScrollPane fPane = new JScrollPane(fieldList),
+	wPane = new JScrollPane(wordList);
+
+    HashMap<String, DefaultListModel> wordListModels = new HashMap<String, DefaultListModel>();
+    ArrayList<String> removedFields = new ArrayList<String>();
+
+    /**
+     * 
+     * @param owner the parent Window (Dialog or Frame)
+     * @param frame the JabRef Frame
+     * @param panel the currently selected BasePanel
+     * @param modal should this dialog be modal?
+     * @param metaData The metadata of the current database
+     * @param fieldName the field this selector is initialized for. May be null.
+     */
+    public ContentSelectorDialog2(Window owner, JabRefFrame frame, BasePanel panel, boolean modal, MetaData metaData,
+              String fieldName) {
+        super(owner, Globals.lang("Setup selectors"));
+        this.setModal(modal);
+        this.metaData = metaData;
+        this.frame = frame;
+        this.panel = panel;
+        this.currentField = fieldName;
+
+        //help = new JButton(Globals.lang("Help"));
+        //help.addActionListener(new HelpAction(frame.helpDiag, GUIGlobals.contentSelectorHelp, "Help"));
+        //help = new HelpAction(frame.helpDiag, GUIGlobals.contentSelectorHelp, "Help");
+        initLayout();
+        //  wordSelector.addItem(WORD_EMPTY_TEXT);
+    
+        setupFieldSelector();
+        setupWordSelector();
+        setupActions();
+        Util.bindCloseDialogKeyToCancelAction(this.rootPane, cancel.getAction());
+        int fieldInd = fieldListModel.indexOf(currentField);
+        if (fieldInd >= 0)
+            fieldList.setSelectedIndex(fieldInd);
+    
+        pack();
+    }
+
+
+    private void setupActions() {
+
+	wordList.addListSelectionListener(new ListSelectionListener() {
+		public void valueChanged(ListSelectionEvent e) {
+		    wordEditField.setText((String)wordList.getSelectedValue());
+		    wordEditField.selectAll();
+		    new FocusRequester(wordEditField);
+		}
+	    });
+
+	newWord.addActionListener(new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+		    newWordAction();
+		}
+	    });
+                
+        wordEditFieldListener = new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                int index = wordList.getSelectedIndex();
+                String old = (String)wordList.getSelectedValue(),
+            	newVal = wordEditField.getText();
+                if (newVal.equals("") || newVal.equals(old)) {
+                    return; // Empty string or no change.
+                }
+                if (wordListModel.contains(newVal)) {
+                	// ensure that word already in list is visible
+                	index = wordListModel.indexOf(newVal);
+                	wordList.ensureIndexIsVisible(index);
+                	return;
+                }
+
+                int newIndex = findPos(wordListModel, newVal);
+                if (index >= 0) {
+                	// initiate replacement of selected word
+                    wordListModel.remove(index);
+                    if (newIndex > index) {
+                    	// newIndex has to be adjusted after removal of previous entry
+                    	newIndex--;
+                    }
+                }
+                wordListModel.add(newIndex, newVal);
+                wordList.ensureIndexIsVisible(newIndex);
+                wordEditField.selectAll();
+            }
+	};
+        wordEditField.addActionListener(wordEditFieldListener);
+        
+	removeWord.addActionListener(new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+		    int index = wordList.getSelectedIndex();
+		    if (index == -1)
+			return;
+		    wordListModel.remove(index);
+		    wordEditField.setText("");
+		    if (wordListModel.size() > 0)
+			wordList.setSelectedIndex(Math.min(index, wordListModel.size()-1));
+		}
+	    });
+
+
+	fieldList.addListSelectionListener(new ListSelectionListener() {
+		public void valueChanged(ListSelectionEvent e) {
+		    currentField = (String)fieldList.getSelectedValue();
+		    fieldNameField.setText("");
+		    setupWordSelector();
+		}
+	    });
+
+	newField.addActionListener(new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+			if (!fieldListModel.get(0).equals(FIELD_FIRST_LINE)) {
+				// only add <field name> once
+				fieldListModel.add(0, FIELD_FIRST_LINE);
+			}
+		    fieldList.setSelectedIndex(0);
+		    fPane.getVerticalScrollBar().setValue(0);
+		    fieldNameField.setEnabled(true);
+		    fieldNameField.setText(currentField);
+		    fieldNameField.selectAll();
+
+		    new FocusRequester(fieldNameField);
+		}
+	    });
+
+	fieldNameField.addActionListener(new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+		    fieldNameField.transferFocus();
+		}
+	    });
+
+	fieldNameField.addFocusListener(new FocusAdapter() {
+		
+		/**
+		 * Adds the text value to the list
+		 */
+		public void focusLost(FocusEvent e) {
+		    String s = fieldNameField.getText();
+		    fieldNameField.setText("");
+		    fieldNameField.setEnabled(false);
+		    if (!FIELD_FIRST_LINE.equals(s) && !"".equals(s)) {
+		    	// user has typed something
+		    	
+			    // remove "<first name>" from list
+				fieldListModel.remove(0);
+				
+				int pos;
+				if (fieldListModel.contains(s)) {
+					// field already exists, scroll to that field (below)
+					pos = fieldListModel.indexOf(s);
+				} else {
+					// Add new field.
+					pos = findPos(fieldListModel, s);
+					fieldListModel.add(Math.max(0, pos), s);
+				}
+				fieldList.setSelectedIndex(pos);
+				fieldList.ensureIndexIsVisible(pos);
+				currentField = s;
+				setupWordSelector();
+				newWordAction();
+				//new FocusRequester(wordEditField);
+		    }
+		}
+	    });
+
+	removeField.addActionListener(new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+		    int index = fieldList.getSelectedIndex();
+		    if (index == -1)
+			return;
+		    String fieldName = (String)fieldListModel.get(index);
+		    removedFields.add(fieldName);
+		    fieldListModel.remove(index);
+		    wordListModels.remove(fieldName);
+		    fieldNameField.setText("");
+		    if (fieldListModel.size() > 0)
+			fieldList.setSelectedIndex(Math.min(index, wordListModel.size()-1));
+		}
+	    });
+
+	help.addActionListener(new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+		    frame.helpDiag.showPage(GUIGlobals.contentSelectorHelp);
+		}
+	    });
+
+	ok.addActionListener(new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+		    applyChanges();
+		    dispose();
+		}
+	    });
+
+	apply.addActionListener(new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+            // Store if an entry is currently being edited:
+            if (!wordEditField.getText().equals("")) {
+                wordEditFieldListener.actionPerformed(null);
+            }
+		    applyChanges();
+		}
+	    });
+	
+	@SuppressWarnings("serial")
+    Action cancelAction = new AbstractAction() {
+		public void actionPerformed(ActionEvent e) {
+		    dispose();
+		}
+	};
+	cancelAction.putValue(Action.NAME, Globals.lang("Cancel"));
+	cancel.setAction(cancelAction);
+    }
+
+    private void newWordAction() {
+	if ((wordListModel.size() == 0) || 
+	    !wordListModel.get(0).equals(WORD_FIRSTLINE_TEXT))
+	    wordListModel.add(0, WORD_FIRSTLINE_TEXT);
+	wordList.setSelectedIndex(0);
+	wPane.getVerticalScrollBar().setValue(0);
+    }
+
+
+    private void applyChanges() {
+	boolean changedFieldSet = false; // Watch if we need to rebuild entry editors
+
+	// First remove the mappings for fields that have been deleted.
+	// If these were re-added, they will be added below, so it doesn't
+	// cause any harm to remove them here.
+	for (Iterator<String> i=removedFields.iterator(); i.hasNext();) {
+	    String fieldName = i.next();
+	    metaData.remove(Globals.SELECTOR_META_PREFIX+fieldName);
+	    changedFieldSet = true;
+	}
+
+	// Cycle through all fields that we have created listmodels for:
+	loop: for (Iterator<String> i=wordListModels.keySet().iterator(); i.hasNext();) {
+	    // For each field name, store the values:
+	    String fieldName = i.next();
+	    if ((fieldName == null) || FIELD_FIRST_LINE.equals(fieldName))
+		continue loop;
+	    DefaultListModel lm = wordListModels.get(fieldName);
+	    int start = 0;
+	    // Avoid storing the <new word> marker if it is there:
+	    if (lm.size() > 0)
+		while ((start<lm.size()) && (lm.get(start)).equals(WORD_FIRSTLINE_TEXT))
+		    start++;
+	    Vector<String> data = metaData.getData(Globals.SELECTOR_META_PREFIX+fieldName);
+	    boolean newField = false;
+	    if (data == null) {
+		newField = true;
+		data = new Vector<String>();
+		changedFieldSet = true;
+
+	    } else
+		data.clear();
+	    for (int wrd=start; wrd<lm.size(); wrd++) {
+		String word = (String)lm.get(wrd);
+		data.add(word);
+	    }
+	    if (newField)
+		metaData.putData(Globals.SELECTOR_META_PREFIX+fieldName, data);
+	}
+
+	// System.out.println("TODO: remove metadata for removed selector field.");
+	panel.markNonUndoableBaseChanged();
+
+	// Update all selectors in the current BasePanel.
+	if (changedFieldSet) {
+	    panel.rebuildAllEntryEditors();
+    } else {
+	    panel.updateAllContentSelectors();
+	}
+    panel.addContentSelectorValuesToAutoCompleters();
+        
+    }
+
+    /**
+     * Set the contents of the field selector list.
+     *
+     */
+    private void setupFieldSelector() {
+		fieldListModel.clear();
+		SortedSet<String> contents = new TreeSet<String>();
+		for (String s : metaData) {
+		    if (s.startsWith(Globals.SELECTOR_META_PREFIX)) {
+		    	contents.add(s.substring(Globals.SELECTOR_META_PREFIX.length()));
+		    }
+		}
+		if (contents.size() == 0) {
+			// if nothing was added, put the default fields (as described in the help)
+			fieldListModel.addElement("author");
+			fieldListModel.addElement("journal");
+			fieldListModel.addElement("keywords");
+			fieldListModel.addElement("publisher");
+		} else {
+			for (String s : contents) {
+				fieldListModel.addElement(s);
+			}
+		}
+		
+		if (currentField == null) {
+			// if dialog is created for the whole database,
+			// select the first field to avoid confusions in GUI usage
+			fieldList.setSelectedIndex(0); 
+		} else {
+			// a specific field has been chosen at the constructur
+			// select this field
+			int i = fieldListModel.indexOf(currentField);
+			if (i != -1) {
+				// field has been found in list, select it
+				fieldList.setSelectedIndex(i);
+			}
+		}
+    }
+
+
+    private void setupWordSelector() {
+
+		// Have we already created a listmodel for this field?
+    	wordListModel = wordListModels.get(currentField);
+		if (wordListModel != null) {
+			wordList.setModel(wordListModel);
+		} else {
+			wordListModel = new DefaultListModel();
+			wordList.setModel(wordListModel);
+			wordListModels.put(currentField, wordListModel);
+			// wordListModel.addElement(WORD_FIRSTLINE_TEXT);
+			Vector<String> items = metaData.getData(Globals.SELECTOR_META_PREFIX + currentField);
+			if (items != null) {
+				wordSet = new TreeSet<String>(items);
+				int index = 0;
+				for (String s : wordSet){
+					wordListModel.add(index, s);
+					index++;
+				}
+			}
+		}
+	}
+
+    private int findPos(DefaultListModel lm, String item) {
+	for (int i=0; i<lm.size(); i++) {
+	    String s = (String)lm.get(i);
+	    if (item.compareToIgnoreCase(s) < 0) { // item precedes s
+		return i;
+	    }
+	}
+	return lm.size();
+    }
+
+    private void initLayout() {
+	fieldNameField.setEnabled(false);
+	fieldList.setVisibleRowCount(4);
+	wordList.setVisibleRowCount(10);
+	final String VAL = "Uren luren himmelturen, ja Besseggen.";
+	fieldList.setPrototypeCellValue(VAL);
+	wordList.setPrototypeCellValue(VAL);
+
+	fieldPan.setBorder(BorderFactory.createTitledBorder
+			       (BorderFactory.createEtchedBorder(),
+				Globals.lang("Field name")));
+	wordPan.setBorder(BorderFactory.createTitledBorder
+			       (BorderFactory.createEtchedBorder(),
+				Globals.lang("Keyword")));
+	fieldPan.setLayout(gbl);
+	wordPan.setLayout(gbl);
+	con.insets = new Insets(2, 2, 2, 2);
+	con.fill = GridBagConstraints.BOTH;
+	con.gridwidth = 2;
+	con.weightx = 1;
+	con.weighty = 1;
+	con.gridx = 0;
+	con.gridy = 0;
+	gbl.setConstraints(fPane, con);
+	fieldPan.add(fPane);
+	gbl.setConstraints(wPane, con);
+	wordPan.add(wPane);
+	con.gridwidth = 1;
+	con.gridx = 2;
+	//con.weightx = 0.7;
+	con.gridheight = 2;
+	gbl.setConstraints(fieldNamePan, con);
+	fieldPan.add(fieldNamePan);
+	gbl.setConstraints(wordEditPan, con);
+	wordPan.add(wordEditPan);
+	con.gridx = 0;
+	con.gridy = 1;
+	con.weightx = 0;
+	con.weighty = 0;
+	con.gridwidth = 1;
+	con.gridheight = 1;
+	con.fill = GridBagConstraints.NONE;
+	con.anchor = GridBagConstraints.WEST;
+    gbl.setConstraints(newField, con);
+	fieldPan.add(newField);
+	gbl.setConstraints(newWord, con);
+	wordPan.add(newWord);
+	con.gridx = 1;
+	//con.anchor = GridBagConstraints.EAST;
+	gbl.setConstraints(removeField, con);
+	fieldPan.add(removeField);
+	gbl.setConstraints(removeWord, con);
+	wordPan.add(removeWord);
+	con.anchor = GridBagConstraints.WEST;
+	con.gridx = 0;
+	con.gridy = 0;
+	gbl.setConstraints(fieldNameField, con);
+	fieldNamePan.add(fieldNameField);
+	gbl.setConstraints(wordEditField, con);
+	wordEditPan.add(wordEditField);
+
+	// Add buttons:
+        ButtonBarBuilder bsb = new ButtonBarBuilder(buttonPan);
+        bsb.addGlue();
+        bsb.addButton(ok);
+	    bsb.addButton(apply);
+        bsb.addButton(cancel);
+        bsb.addRelatedGap();
+        bsb.addButton(help);
+        bsb.addGlue();
+
+    // Add panels to dialog:
+	con.fill = GridBagConstraints.BOTH;
+	getContentPane().setLayout(gbl);
+	con.weightx = 1;
+	con.weighty = 0.5;
+	con.gridwidth = 1;
+	con.gridheight = 1;
+	con.gridx = 0;
+	con.gridy = 0;
+	gbl.setConstraints(fieldPan, con);
+	getContentPane().add(fieldPan);
+	con.gridy = 1;
+	gbl.setConstraints(wordPan, con);
+	getContentPane().add(wordPan);
+	con.weighty = 0;
+	con.gridy = 2;
+	con.insets = new Insets(12, 2, 2, 2);
+	gbl.setConstraints(buttonPan, con);
+	getContentPane().add(buttonPan);
+
+
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/CrossRefEntryComparator.java b/src/java/net/sf/jabref/CrossRefEntryComparator.java
index 84abe53..68ee240 100644
--- a/src/java/net/sf/jabref/CrossRefEntryComparator.java
+++ b/src/java/net/sf/jabref/CrossRefEntryComparator.java
@@ -1,45 +1,45 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.util.Comparator;
-
-/**
- * Compares Bibtex entries based on their 'crossref' fields. Entries including
- * this field are deemed smaller than entries without this field. This serves
- * the purpose of always placing referenced entries after referring entries in
- * the .bib file. After this criterion comes comparisons of individual fields.
- */
-public class CrossRefEntryComparator implements Comparator<BibtexEntry> {
-
-	private String crossRefField = "crossref";
-
-	public int compare(BibtexEntry e1, BibtexEntry e2)
-		throws ClassCastException {
-
-		Object f1 = e1.getField(crossRefField), f2 = e2.getField(crossRefField);
-
-		if ((f1 == null) && (f2 == null))
-			return 0; // secComparator.compare(e1, e2);
-		if ((f1 != null) && (f2 != null))
-			return 0; // secComparator.compare(e1, e2);
-		if (f1 != null)
-			return -1;
-		else
-			return 1;
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.util.Comparator;
+
+/**
+ * Compares Bibtex entries based on their 'crossref' fields. Entries including
+ * this field are deemed smaller than entries without this field. This serves
+ * the purpose of always placing referenced entries after referring entries in
+ * the .bib file. After this criterion comes comparisons of individual fields.
+ */
+public class CrossRefEntryComparator implements Comparator<BibtexEntry> {
+
+	private String crossRefField = "crossref";
+
+	public int compare(BibtexEntry e1, BibtexEntry e2)
+		throws ClassCastException {
+
+		Object f1 = e1.getField(crossRefField), f2 = e2.getField(crossRefField);
+
+		if ((f1 == null) && (f2 == null))
+			return 0; // secComparator.compare(e1, e2);
+		if ((f1 != null) && (f2 != null))
+			return 0; // secComparator.compare(e1, e2);
+		if (f1 != null)
+			return -1;
+		else
+			return 1;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/CustomEntryType.java b/src/java/net/sf/jabref/CustomEntryType.java
index 70e6c05..be428cc 100644
--- a/src/java/net/sf/jabref/CustomEntryType.java
+++ b/src/java/net/sf/jabref/CustomEntryType.java
@@ -1,255 +1,255 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-
-/**
- * This class is used to represent customized entry types.
- *
- */
-public class CustomEntryType extends BibtexEntryType {
-
-    private String name;
-    private String[] req, opt, priOpt;
-    private String[][] reqSets = null; // Sets of either-or required fields, if any
-
-    public CustomEntryType(String name_, String[] req_, String[] opt_, String[] opt2_) {
-        name = name_;
-        parseRequiredFields(req_);
-        ArrayList<String> allOpt = new ArrayList<String>();
-        for (int i = 0; i < opt_.length; i++)
-            allOpt.add(opt_[i]);
-        for (int i=0; i<opt2_.length; i++)
-            allOpt.add(opt2_[i]);
-        opt = allOpt.toArray(new String[allOpt.size()]);
-        priOpt = opt_;
-    }
-
-    public CustomEntryType(String name_, String[] req_, String[] opt_) {
-        this(name_, req_, opt_, new String[0]);
-    }
-
-    public CustomEntryType(String name_, String reqStr, String optStr) {
-        name = name_;
-        if (reqStr.length() == 0)
-            req = new String[0];
-        else {
-            parseRequiredFields(reqStr);
-
-        }
-        if (optStr.length() == 0)
-            opt = new String[0];
-        else
-            opt = optStr.split(";");
-    }
-
-    protected void parseRequiredFields(String reqStr) {
-        String[] parts = reqStr.split(";");
-        parseRequiredFields(parts);
-    }
-
-    protected void parseRequiredFields(String[] parts) {
-        ArrayList<String> fields = new ArrayList<String>();
-        ArrayList<String[]> sets = new ArrayList<String[]>();
-        for (int i = 0; i < parts.length; i++) {
-            String[] subParts = parts[i].split("/");
-            for (int j = 0; j < subParts.length; j++) {
-                fields.add(subParts[j]);
-            }
-            // Check if we have either/or fields:
-            if (subParts.length > 1) {
-                sets.add(subParts);
-            }
-        }
-        req = fields.toArray(new String[fields.size()]);
-        if (sets.size() > 0) {
-            reqSets = sets.toArray(new String[sets.size()][]);
-        }
-    }
-
-    public String getName() {
-	return name;
-    }
-
-    public String[] getOptionalFields() {
-	return opt;
-    }
-    public String[] getRequiredFields() {
-	return req;
-    }
-
-    @Override
-    public String[] getPrimaryOptionalFields() {
-        return priOpt;
-    }
-
-    public String[] getRequiredFieldsForCustomization() {
-        return getRequiredFieldsString().split(";");
-    }
-
-    //    public boolean isTemporary
-
-    public String describeRequiredFields() {
-	StringBuffer sb = new StringBuffer();
-	for (int i=0; i<req.length; i++) {
-	    sb.append(req[i]);
-	    sb.append(((i<=req.length-1)&&(req.length>1))?", ":"");
-	}
-	return sb.toString();
-    }
-
-    public String describeOptionalFields() {
-	StringBuffer sb = new StringBuffer();
-	for (int i=0; i<opt.length; i++) {
-	    sb.append(opt[i]);
-	    sb.append(((i<=opt.length-1)&&(opt.length>1))?", ":"");
-	}
-	return sb.toString();
-    }
-
-    /**
-     * Check whether this entry's required fields are set, taking crossreferenced entries and
-     * either-or fields into account:
-     * @param entry The entry to check.
-     * @param database The entry's database.
-     * @return True if required fields are set, false otherwise.
-     */
-    public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-        // First check if the bibtex key is set:
-        if (entry.getField(BibtexFields.KEY_FIELD) == null)
-                return false;
-        // Then check other fields:
-        boolean[] isSet = new boolean[req.length];
-        // First check for all fields, whether they are set here or in a crossref'd entry:
-	    for (int i=0; i<req.length; i++)
-            isSet[i] = BibtexDatabase.getResolvedField(req[i], entry, database) != null;
-        // Then go through all fields. If a field is not set, see if it is part of an either-or
-        // set where another field is set. If not, return false:
-    	for (int i=0; i<req.length; i++) {
-            if (!isSet[i]) {
-                if (!isCoupledFieldSet(req[i], entry, database))
-                    return false;
-            }
-        }
-        // Passed all fields, so return true:
-        return true;
-    }
-
-    protected boolean isCoupledFieldSet(String field, BibtexEntry entry, BibtexDatabase database) {
-        if (reqSets == null)
-            return false;
-        for (int i=0; i<reqSets.length; i++) {
-            boolean takesPart = false, oneSet = false;
-            for (int j=0; j<reqSets[i].length; j++) {
-                // If this is the field we're looking for, note that the field is part of the set:
-                if (reqSets[i][j].equalsIgnoreCase(field))
-                    takesPart = true;
-                // If it is a different field, check if it is set:
-                else if (BibtexDatabase.getResolvedField(reqSets[i][j], entry, database) != null)
-                    oneSet = true;
-            }
-            // Ths the field is part of the set, and at least one other field is set, return true:
-            if (takesPart && oneSet)
-                return true;
-        }
-        // No hits, so return false:
-        return false;
-    }
-
-    /**
-     * Get a String describing the required field set for this entry type.
-     * @return Description of required field set for storage in preferences or bib file.
-     */
-    public String getRequiredFieldsString() {
-        StringBuilder sb = new StringBuilder();
-        int reqSetsPiv = 0;
-        for (int i=0; i<req.length; i++) {
-            if ((reqSets == null) || (reqSetsPiv == reqSets.length)) {
-                sb.append(req[i]);
-            }
-            else if (req[i].equals(reqSets[reqSetsPiv][0])) {
-                for (int j = 0; j < reqSets[reqSetsPiv].length; j++) {
-                    sb.append(reqSets[reqSetsPiv][j]);
-                    if (j < reqSets[reqSetsPiv].length-1)
-                        sb.append("/");
-                }
-                // Skip next n-1 fields:
-                i += reqSets[reqSetsPiv].length-1;
-                reqSetsPiv++;
-            }
-            else sb.append(req[i]);
-            if (i < req.length-1)
-                sb.append(";");
-
-        }
-        return sb.toString();
-    }
-
-
-    public void save(Writer out) throws IOException {
-	out.write("@comment{");
-	out.write(GUIGlobals.ENTRYTYPE_FLAG);
-	out.write(getName());
-	out.write(": req[");
-    out.write(getRequiredFieldsString());
-	/*StringBuffer sb = new StringBuffer();
-	for (int i=0; i<req.length; i++) {
-	    sb.append(req[i]);
-	    if (i<req.length-1)
-		sb.append(";");
-	}
-	out.write(sb.toString());*/
-	out.write("] opt[");
-	StringBuilder sb = new StringBuilder();
-	for (int i=0; i<opt.length; i++) {
-	    sb.append(opt[i]);
-	    if (i<opt.length-1)
-		sb.append(";");
-	}
-	out.write(sb.toString());
-	out.write("]}"+Globals.NEWLINE);
-    }
-
-    public static CustomEntryType parseEntryType(String comment) { 
-	try {
-	    //if ((comment.length() < 9+GUIGlobals.ENTRYTYPE_FLAG.length())
-	    //	|| comment
-	    //System.out.println(">"+comment+"<");
-	    String rest;
-	    rest = comment.substring(GUIGlobals.ENTRYTYPE_FLAG.length());
-	    int nPos = rest.indexOf(':');
-	    String name = rest.substring(0, nPos);
-	    rest = rest.substring(nPos+2);
-
-	    int rPos = rest.indexOf(']');
-	    if (rPos < 4)
-		throw new IndexOutOfBoundsException();
-	    String reqFields = rest.substring(4, rPos);
-	    //System.out.println(name+"\nr '"+reqFields+"'");
-	    int oPos = rest.indexOf(']', rPos+1);
-	    String optFields = rest.substring(rPos+6, oPos);
-	    //System.out.println("o '"+optFields+"'");
-	    return new CustomEntryType(name, reqFields, optFields);
-	} catch (IndexOutOfBoundsException ex) {
-	    Globals.logger("Ill-formed entrytype comment in BibTeX file.");
-	    return null;
-	}
-
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+
+/**
+ * This class is used to represent customized entry types.
+ *
+ */
+public class CustomEntryType extends BibtexEntryType {
+
+    private String name;
+    private String[] req, opt, priOpt;
+    private String[][] reqSets = null; // Sets of either-or required fields, if any
+
+    public CustomEntryType(String name_, String[] req_, String[] opt_, String[] opt2_) {
+        name = name_;
+        parseRequiredFields(req_);
+        ArrayList<String> allOpt = new ArrayList<String>();
+        for (int i = 0; i < opt_.length; i++)
+            allOpt.add(opt_[i]);
+        for (int i=0; i<opt2_.length; i++)
+            allOpt.add(opt2_[i]);
+        opt = allOpt.toArray(new String[allOpt.size()]);
+        priOpt = opt_;
+    }
+
+    public CustomEntryType(String name_, String[] req_, String[] opt_) {
+        this(name_, req_, opt_, new String[0]);
+    }
+
+    public CustomEntryType(String name_, String reqStr, String optStr) {
+        name = name_;
+        if (reqStr.length() == 0)
+            req = new String[0];
+        else {
+            parseRequiredFields(reqStr);
+
+        }
+        if (optStr.length() == 0)
+            opt = new String[0];
+        else
+            opt = optStr.split(";");
+    }
+
+    protected void parseRequiredFields(String reqStr) {
+        String[] parts = reqStr.split(";");
+        parseRequiredFields(parts);
+    }
+
+    protected void parseRequiredFields(String[] parts) {
+        ArrayList<String> fields = new ArrayList<String>();
+        ArrayList<String[]> sets = new ArrayList<String[]>();
+        for (int i = 0; i < parts.length; i++) {
+            String[] subParts = parts[i].split("/");
+            for (int j = 0; j < subParts.length; j++) {
+                fields.add(subParts[j]);
+            }
+            // Check if we have either/or fields:
+            if (subParts.length > 1) {
+                sets.add(subParts);
+            }
+        }
+        req = fields.toArray(new String[fields.size()]);
+        if (sets.size() > 0) {
+            reqSets = sets.toArray(new String[sets.size()][]);
+        }
+    }
+
+    public String getName() {
+	return name;
+    }
+
+    public String[] getOptionalFields() {
+	return opt;
+    }
+    public String[] getRequiredFields() {
+	return req;
+    }
+
+    @Override
+    public String[] getPrimaryOptionalFields() {
+        return priOpt;
+    }
+
+    public String[] getRequiredFieldsForCustomization() {
+        return getRequiredFieldsString().split(";");
+    }
+
+    //    public boolean isTemporary
+
+    public String describeRequiredFields() {
+	StringBuffer sb = new StringBuffer();
+	for (int i=0; i<req.length; i++) {
+	    sb.append(req[i]);
+	    sb.append(((i<=req.length-1)&&(req.length>1))?", ":"");
+	}
+	return sb.toString();
+    }
+
+    public String describeOptionalFields() {
+	StringBuffer sb = new StringBuffer();
+	for (int i=0; i<opt.length; i++) {
+	    sb.append(opt[i]);
+	    sb.append(((i<=opt.length-1)&&(opt.length>1))?", ":"");
+	}
+	return sb.toString();
+    }
+
+    /**
+     * Check whether this entry's required fields are set, taking crossreferenced entries and
+     * either-or fields into account:
+     * @param entry The entry to check.
+     * @param database The entry's database.
+     * @return True if required fields are set, false otherwise.
+     */
+    public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+        // First check if the bibtex key is set:
+        if (entry.getField(BibtexFields.KEY_FIELD) == null)
+                return false;
+        // Then check other fields:
+        boolean[] isSet = new boolean[req.length];
+        // First check for all fields, whether they are set here or in a crossref'd entry:
+	    for (int i=0; i<req.length; i++)
+            isSet[i] = BibtexDatabase.getResolvedField(req[i], entry, database) != null;
+        // Then go through all fields. If a field is not set, see if it is part of an either-or
+        // set where another field is set. If not, return false:
+    	for (int i=0; i<req.length; i++) {
+            if (!isSet[i]) {
+                if (!isCoupledFieldSet(req[i], entry, database))
+                    return false;
+            }
+        }
+        // Passed all fields, so return true:
+        return true;
+    }
+
+    protected boolean isCoupledFieldSet(String field, BibtexEntry entry, BibtexDatabase database) {
+        if (reqSets == null)
+            return false;
+        for (int i=0; i<reqSets.length; i++) {
+            boolean takesPart = false, oneSet = false;
+            for (int j=0; j<reqSets[i].length; j++) {
+                // If this is the field we're looking for, note that the field is part of the set:
+                if (reqSets[i][j].equalsIgnoreCase(field))
+                    takesPart = true;
+                // If it is a different field, check if it is set:
+                else if (BibtexDatabase.getResolvedField(reqSets[i][j], entry, database) != null)
+                    oneSet = true;
+            }
+            // Ths the field is part of the set, and at least one other field is set, return true:
+            if (takesPart && oneSet)
+                return true;
+        }
+        // No hits, so return false:
+        return false;
+    }
+
+    /**
+     * Get a String describing the required field set for this entry type.
+     * @return Description of required field set for storage in preferences or bib file.
+     */
+    public String getRequiredFieldsString() {
+        StringBuilder sb = new StringBuilder();
+        int reqSetsPiv = 0;
+        for (int i=0; i<req.length; i++) {
+            if ((reqSets == null) || (reqSetsPiv == reqSets.length)) {
+                sb.append(req[i]);
+            }
+            else if (req[i].equals(reqSets[reqSetsPiv][0])) {
+                for (int j = 0; j < reqSets[reqSetsPiv].length; j++) {
+                    sb.append(reqSets[reqSetsPiv][j]);
+                    if (j < reqSets[reqSetsPiv].length-1)
+                        sb.append("/");
+                }
+                // Skip next n-1 fields:
+                i += reqSets[reqSetsPiv].length-1;
+                reqSetsPiv++;
+            }
+            else sb.append(req[i]);
+            if (i < req.length-1)
+                sb.append(";");
+
+        }
+        return sb.toString();
+    }
+
+
+    public void save(Writer out) throws IOException {
+	out.write("@comment{");
+	out.write(GUIGlobals.ENTRYTYPE_FLAG);
+	out.write(getName());
+	out.write(": req[");
+    out.write(getRequiredFieldsString());
+	/*StringBuffer sb = new StringBuffer();
+	for (int i=0; i<req.length; i++) {
+	    sb.append(req[i]);
+	    if (i<req.length-1)
+		sb.append(";");
+	}
+	out.write(sb.toString());*/
+	out.write("] opt[");
+	StringBuilder sb = new StringBuilder();
+	for (int i=0; i<opt.length; i++) {
+	    sb.append(opt[i]);
+	    if (i<opt.length-1)
+		sb.append(";");
+	}
+	out.write(sb.toString());
+	out.write("]}"+Globals.NEWLINE);
+    }
+
+    public static CustomEntryType parseEntryType(String comment) { 
+	try {
+	    //if ((comment.length() < 9+GUIGlobals.ENTRYTYPE_FLAG.length())
+	    //	|| comment
+	    //System.out.println(">"+comment+"<");
+	    String rest;
+	    rest = comment.substring(GUIGlobals.ENTRYTYPE_FLAG.length());
+	    int nPos = rest.indexOf(':');
+	    String name = rest.substring(0, nPos);
+	    rest = rest.substring(nPos+2);
+
+	    int rPos = rest.indexOf(']');
+	    if (rPos < 4)
+		throw new IndexOutOfBoundsException();
+	    String reqFields = rest.substring(4, rPos);
+	    //System.out.println(name+"\nr '"+reqFields+"'");
+	    int oPos = rest.indexOf(']', rPos+1);
+	    String optFields = rest.substring(rPos+6, oPos);
+	    //System.out.println("o '"+optFields+"'");
+	    return new CustomEntryType(name, reqFields, optFields);
+	} catch (IndexOutOfBoundsException ex) {
+	    Globals.logger("Ill-formed entrytype comment in BibTeX file.");
+	    return null;
+	}
+
+    }
+}
diff --git a/src/java/net/sf/jabref/DatabaseChangeEvent.java b/src/java/net/sf/jabref/DatabaseChangeEvent.java
index 4817706..3f3fd15 100644
--- a/src/java/net/sf/jabref/DatabaseChangeEvent.java
+++ b/src/java/net/sf/jabref/DatabaseChangeEvent.java
@@ -1,45 +1,45 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-
-public class DatabaseChangeEvent {
-
-    public enum ChangeType {ADDED_ENTRY, REMOVED_ENTRY, CHANGED_ENTRY, CHANGING_ENTRY};
-
-    private BibtexEntry entry;
-    private ChangeType type;
-    private BibtexDatabase source;
-
-    public DatabaseChangeEvent(BibtexDatabase source, ChangeType type, 
-			       BibtexEntry entry) {
-	this.source = source;
-	this.type = type;
-	this.entry = entry;
-    }
-
-    public BibtexDatabase getSource() {
-	return source;
-    }
-
-    public BibtexEntry getEntry() {
-	return entry;
-    }
-
-    public ChangeType getType() {
-	return type;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+
+public class DatabaseChangeEvent {
+
+    public enum ChangeType {ADDED_ENTRY, REMOVED_ENTRY, CHANGED_ENTRY, CHANGING_ENTRY};
+
+    private BibtexEntry entry;
+    private ChangeType type;
+    private BibtexDatabase source;
+
+    public DatabaseChangeEvent(BibtexDatabase source, ChangeType type, 
+			       BibtexEntry entry) {
+	this.source = source;
+	this.type = type;
+	this.entry = entry;
+    }
+
+    public BibtexDatabase getSource() {
+	return source;
+    }
+
+    public BibtexEntry getEntry() {
+	return entry;
+    }
+
+    public ChangeType getType() {
+	return type;
+    }
+}
diff --git a/src/java/net/sf/jabref/DatabaseChangeListener.java b/src/java/net/sf/jabref/DatabaseChangeListener.java
index 148c3a8..7a38839 100644
--- a/src/java/net/sf/jabref/DatabaseChangeListener.java
+++ b/src/java/net/sf/jabref/DatabaseChangeListener.java
@@ -1,23 +1,23 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-
-public interface DatabaseChangeListener {
-    
-    public void databaseChanged(DatabaseChangeEvent e);
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+
+public interface DatabaseChangeListener {
+    
+    public void databaseChanged(DatabaseChangeEvent e);
+
+}
diff --git a/src/java/net/sf/jabref/DatabaseSearch.java b/src/java/net/sf/jabref/DatabaseSearch.java
index f19ce43..b0e231a 100644
--- a/src/java/net/sf/jabref/DatabaseSearch.java
+++ b/src/java/net/sf/jabref/DatabaseSearch.java
@@ -1,110 +1,110 @@
-/*
- Copyright (C) 2003 Nathan Dunn, Morten O. Alver
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-package net.sf.jabref;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.PatternSyntaxException;
-
-import javax.swing.SwingUtilities;
-
-public class DatabaseSearch extends Thread {
-	BasePanel panel = null;
-	BibtexDatabase thisDatabase = null;
-	SearchRuleSet thisRuleSet = null;
-	Map<String, String> thisSearchOptions = null;
-	String searchValueField = null;
-	boolean reorder, select, grayOut;
-	ErrorMessageDisplay errorDisplay;
-	Set<BibtexEntry> matches = new HashSet<BibtexEntry>();
-	public DatabaseSearch(ErrorMessageDisplay errorDisplay,
-			Map<String, String> searchOptions, SearchRuleSet searchRules,
-			BasePanel panel, String searchValueField, boolean reorder,
-			boolean grayOut, boolean select) {
-		this.panel = panel;
-		this.errorDisplay = errorDisplay;
-		thisDatabase = panel.getDatabase();
-		thisSearchOptions = searchOptions;
-		thisRuleSet = searchRules;
-		this.searchValueField = searchValueField;
-		this.reorder = reorder;
-		this.select = select;
-		this.grayOut = grayOut;
-	}
-
-	public void run() {
-		int searchScore = 0;
-		matches.clear();
-		BibtexEntry bes = null;
-		int hits = 0;
-
-		for (String id : thisDatabase.getKeySet()){
-
-			// 1. search all required fields using searchString
-			bes = thisDatabase.getEntryById(id);
-			if (bes == null)
-				continue;
-			// (thisTableModel.getNameFromNumber(row));
-
-			// 2. add score per each hit
-			try {
-				searchScore = thisRuleSet.applyRule(thisSearchOptions, bes);
-			} catch (PatternSyntaxException ex) {
-				// There is something wrong with the regexp pattern.
-				errorDisplay.reportError("Malformed regular expression", ex);
-				return;
-			}
-			// When using float search, it messes up the sort order if we retain
-			// graded search scores, because the table is sorted by the score.
-			// To prevent this, we let the search score saturate at 1.
-			if (searchScore > 0)
-				searchScore = 1;
-
-			// 2.1 set score to search field
-			bes.setField(searchValueField, String.valueOf(searchScore));
-
-			if (searchScore > 0) {
-				hits++;
-				matches.add(bes);
-			}
-		}
-		final int outputHits = hits;
-		SwingUtilities.invokeLater(new Thread() {
-			public void run() {
-				panel.output(Globals
-                    .lang("Searched database. Global number of hits")
-                    + ": " + outputHits);
-			}
-		});
-	}
-	
-	public Iterator<BibtexEntry> matches() {
-		return matches.iterator();
-	}
-}
+/*
+ Copyright (C) 2003 Nathan Dunn, Morten O. Alver
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+package net.sf.jabref;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.PatternSyntaxException;
+
+import javax.swing.SwingUtilities;
+
+public class DatabaseSearch extends Thread {
+	BasePanel panel = null;
+	BibtexDatabase thisDatabase = null;
+	SearchRuleSet thisRuleSet = null;
+	Map<String, String> thisSearchOptions = null;
+	String searchValueField = null;
+	boolean reorder, select, grayOut;
+	ErrorMessageDisplay errorDisplay;
+	Set<BibtexEntry> matches = new HashSet<BibtexEntry>();
+	public DatabaseSearch(ErrorMessageDisplay errorDisplay,
+			Map<String, String> searchOptions, SearchRuleSet searchRules,
+			BasePanel panel, String searchValueField, boolean reorder,
+			boolean grayOut, boolean select) {
+		this.panel = panel;
+		this.errorDisplay = errorDisplay;
+		thisDatabase = panel.getDatabase();
+		thisSearchOptions = searchOptions;
+		thisRuleSet = searchRules;
+		this.searchValueField = searchValueField;
+		this.reorder = reorder;
+		this.select = select;
+		this.grayOut = grayOut;
+	}
+
+	public void run() {
+		int searchScore = 0;
+		matches.clear();
+		BibtexEntry bes = null;
+		int hits = 0;
+
+		for (String id : thisDatabase.getKeySet()){
+
+			// 1. search all required fields using searchString
+			bes = thisDatabase.getEntryById(id);
+			if (bes == null)
+				continue;
+			// (thisTableModel.getNameFromNumber(row));
+
+			// 2. add score per each hit
+			try {
+				searchScore = thisRuleSet.applyRule(thisSearchOptions, bes);
+			} catch (PatternSyntaxException ex) {
+				// There is something wrong with the regexp pattern.
+				errorDisplay.reportError("Malformed regular expression", ex);
+				return;
+			}
+			// When using float search, it messes up the sort order if we retain
+			// graded search scores, because the table is sorted by the score.
+			// To prevent this, we let the search score saturate at 1.
+			if (searchScore > 0)
+				searchScore = 1;
+
+			// 2.1 set score to search field
+			bes.setField(searchValueField, String.valueOf(searchScore));
+
+			if (searchScore > 0) {
+				hits++;
+				matches.add(bes);
+			}
+		}
+		final int outputHits = hits;
+		SwingUtilities.invokeLater(new Thread() {
+			public void run() {
+				panel.output(Globals
+                    .lang("Searched database. Global number of hits")
+                    + ": " + outputHits);
+			}
+		});
+	}
+	
+	public Iterator<BibtexEntry> matches() {
+		return matches.iterator();
+	}
+}
diff --git a/src/java/net/sf/jabref/DuplicateCheck.java b/src/java/net/sf/jabref/DuplicateCheck.java
index d74bb09..a98c03e 100644
--- a/src/java/net/sf/jabref/DuplicateCheck.java
+++ b/src/java/net/sf/jabref/DuplicateCheck.java
@@ -1,325 +1,325 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-
-/**
- * This class contains utility method for duplicate checking of entries.
- */
-public class DuplicateCheck {
-
-    public static double duplicateThreshold = 0.75; // The overall threshold to signal a duplicate pair
-    // Non-required fields are investigated only if the required fields give a value within
-    // the doubt range of the threshold:
-    public static double doubtRange = 0.05;
-
-    final static double reqWeight = 3; // Weighting of all required fields
-
-    // Extra weighting of those fields that are most likely to provide correct duplicate detection:
-    static HashMap<String,Double> fieldWeights = new HashMap<String, Double>();
-
-    static {
-        fieldWeights.put("author", 2.5);
-        fieldWeights.put("editor", 2.5);
-        fieldWeights.put("title", 3.);
-        fieldWeights.put("journal", 2.);
-    }
-
-    /**
-     * Checks if the two entries represent the same publication.
-     *
-     * @param one BibtexEntry
-     * @param two BibtexEntry
-     * @return boolean
-     */
-    public static boolean isDuplicate(BibtexEntry one, BibtexEntry two) {
-
-        // First check if they are of the same type - a necessary condition:
-        if (one.getType() != two.getType())
-            return false;
-
-        // The check if they have the same required fields:
-        String[] fields = one.getType().getRequiredFields();
-        double[] req;
-        if (fields == null) {
-            req = new double[] {0., 0.};
-        }
-        else
-            req = compareFieldSet(fields, one, two);
-
-        if (Math.abs(req[0] - duplicateThreshold) > doubtRange) {
-            // Far from the threshold value, so we base our decision on the req. fields only
-            return req[0] >= duplicateThreshold;
-        }
-        else {
-            // Close to the threshold value, so we take a look at the optional fields, if any:
-            fields = one.getType().getOptionalFields();
-            if (fields != null) {
-                double[] opt = compareFieldSet(fields, one, two);
-                double totValue = (reqWeight*req[0]*req[1] + opt[0]*opt[1]) / (req[1]*reqWeight+opt[1]);
-                return totValue >= duplicateThreshold;
-            } else {
-                return (req[0] >= duplicateThreshold);
-            }
-        }
-    }
-
-    private static double[] compareFieldSet(String[] fields, BibtexEntry one, BibtexEntry two) {
-        double res = 0;
-        double totWeights = 0.;
-        for (int i = 0; i < fields.length; i++) {
-            // Util.pr(":"+compareSingleField(fields[i], one, two));
-            double weight;
-            if (fieldWeights.containsKey(fields[i]))
-                weight = fieldWeights.get(fields[i]);
-            else
-                weight = 1.0;
-            totWeights += weight;
-            int result = compareSingleField(fields[i], one, two);
-            //System.out.println("Field: "+fields[i]+": "+result);
-            if (result == Util.EQUAL) {
-                res += weight;
-            }
-            else if (result == Util.EMPTY_IN_BOTH)
-                totWeights -= weight;
-        }
-        if (totWeights > 0)
-            return new double[] {res / totWeights, totWeights};
-        else // no fields present. This points to a possible duplicate?
-            return new double[] {0.5, 0.0};
-    }
-
-    private static int compareSingleField(String field, BibtexEntry one, BibtexEntry two) {
-        String s1 = one.getField(field), s2 = two.getField(field);
-        if (s1 == null) {
-            if (s2 == null)
-                return Util.EMPTY_IN_BOTH;
-            else
-                return Util.EMPTY_IN_ONE;
-        } else if (s2 == null)
-            return Util.EMPTY_IN_TWO;
-
-        // Util.pr(field+": '"+s1+"' vs '"+s2+"'");
-        if (field.equals("author") || field.equals("editor")) {
-            // Specific for name fields.
-            // Harmonise case:
-            String auth1 = AuthorList.fixAuthor_lastNameOnlyCommas(s1, false).replaceAll(" and ", " ").toLowerCase(),
-                    auth2 = AuthorList.fixAuthor_lastNameOnlyCommas(s2, false).replaceAll(" and ", " ").toLowerCase();
-            //System.out.println(auth1);
-            //System.out.println(auth2);
-            //System.out.println(correlateByWords(auth1, auth2));
-            double similarity = correlateByWords(auth1, auth2, false);
-            if (similarity > 0.8)
-                return Util.EQUAL;
-            else
-                return Util.NOT_EQUAL;
-
-        } else if (field.equals("pages")) {
-            // Pages can be given with a variety of delimiters, "-", "--", " - ", " -- ".
-            // We do a replace to harmonize these to a simple "-":
-            // After this, a simple test for equality should be enough:
-            s1 = s1.replaceAll("[- ]+","-");
-            s2 = s2.replaceAll("[- ]+","-");
-            if (s1.equals(s2))
-                return Util.EQUAL;
-            else
-                return Util.NOT_EQUAL;
-
-        } else if (field.equals("journal")) {
-            // We do not attempt to harmonize abbreviation state of the journal names,
-            // but we remove periods from the names in case they are abbreviated with
-            // and without dots:
-            s1 = s1.replaceAll("\\.", "").toLowerCase();
-            s2 = s2.replaceAll("\\.", "").toLowerCase();
-            //System.out.println(s1+" :: "+s2);
-            double similarity = correlateByWords(s1, s2, true);
-            if (similarity > 0.8)
-                return Util.EQUAL;
-            else
-                return Util.NOT_EQUAL;
-        } else {
-            s1 = s1.toLowerCase();
-            s2 = s2.toLowerCase();
-            double similarity = correlateByWords(s1, s2, false);
-            if (similarity > 0.8)
-                return Util.EQUAL;
-            else
-                return Util.NOT_EQUAL;
-            /*if (s1.trim().equals(s2.trim()))
-                return Util.EQUAL;
-            else
-                return Util.NOT_EQUAL;*/
-        }
-
-    }
-
-    public static double compareEntriesStrictly(BibtexEntry one, BibtexEntry two) {
-        HashSet<String> allFields = new HashSet<String>();// one.getAllFields());
-        allFields.addAll(one.getAllFields());
-        allFields.addAll(two.getAllFields());
-
-        int score = 0;
-        for (Iterator<String> fld = allFields.iterator(); fld.hasNext();) {
-            String field = fld.next();
-            Object en = one.getField(field), to = two.getField(field);
-            if ((en != null) && (to != null) && (en.equals(to)))
-                score++;
-            else if ((en == null) && (to == null))
-                score++;
-        }
-        if (score == allFields.size())
-            return 1.01; // Just to make sure we can
-            // use score>1 without
-            // trouble.
-        else
-            return ((double) score) / allFields.size();
-    }
-
-    /**
-     * Goes through all entries in the given database, and if at least one of
-     * them is a duplicate of the given entry, as per
-     * Util.isDuplicate(BibtexEntry, BibtexEntry), the duplicate is returned.
-     * The search is terminated when the first duplicate is found.
-     *
-     * @param database The database to search.
-     * @param entry    The entry of which we are looking for duplicates.
-     * @return The first duplicate entry found. null if no duplicates are found.
-     */
-    public static BibtexEntry containsDuplicate(BibtexDatabase database, BibtexEntry entry) {
-        for (BibtexEntry other : database.getEntries()) {
-            if (isDuplicate(entry, other))
-                return other; // Duplicate found.
-        }
-        return null; // No duplicate found.
-	}
-
-    /**
-     * Compare two strings on the basis of word-by-word correlation analysis.
-     * @param s1 The first string
-     * @param s2 The second string
-     * @param truncate if true, always truncate the longer of two words to be compared to
-     *   harmonize their length. If false, use interpolation to harmonize the strings.
-     * @return a value in the interval [0, 1] indicating the degree of match.
-     */
-    public static double correlateByWords(String s1, String s2, boolean truncate) {
-        String[] w1 = s1.split("\\s"),
-                w2 = s2.split("\\s");
-        int n = Math.min(w1.length, w2.length);
-        int misses = 0;
-        for (int i=0; i<n; i++) {
-            /*if (!w1[i].equalsIgnoreCase(w2[i]))
-                misses++;*/
-            double corr = correlateStrings(w1[i], w2[i], truncate);
-            if (corr < 0.75)
-                misses++;
-        }
-        double missRate = ((double)misses)/((double)n);
-        return 1-missRate;
-    }
-
-    public static double correlateStrings(String s1, String s2, boolean truncate) {
-        int minLength = Math.min(s1.length(), s2.length());
-        if (truncate && minLength == 1) {
-            return s1.charAt(0) == s2.charAt(0) ? 1.0 : 0.0;
-        }
-        else if (s1.length() == 1 && s2.length() == 1) {
-            return s1.equals(s2) ? 1.0 : 0.0;
-        }
-        else if (minLength == 0)
-            return s1.length() == 0 && s2.length() == 0 ? 1.0 : 0;
-
-        // Convert strings to numbers and harmonize length in a method dependent on truncate:
-        if (truncate) {
-            // Harmonize length by truncation:
-            if (s1.length() > minLength)
-                s1 = s1.substring(0, minLength);
-            if (s2.length() > minLength)
-                s2 = s2.substring(0, minLength);
-        }
-        double[] n1 = numberizeString(s1),
-                n2 = numberizeString(s2);
-        // If truncation is disabled, harmonize length by interpolation:
-        if (!truncate) {
-            if (n1.length < n2.length)
-                n1 = stretchArray(n1, n2.length);
-            else if (n2.length < n1.length)
-                n2 = stretchArray(n2, n1.length);
-        }
-        return corrCoef(n1, n2);
-    }
-
-    private static double corrCoef(double[] n1, double[] n2) {
-        // Calculate mean values:
-        double mean1 = 0, mean2 = 0;
-        for (int i=0; i<n1.length; i++) {
-            mean1 += n1[i];
-            mean2 += n2[i];
-        }
-        mean1 /= (double)n1.length;
-        mean2 /= (double)n2.length;
-        double sigma1 = 0, sigma2 = 0;
-        // Calculate correlation coefficient:
-        double corr = 0;
-        for (int i=0; i<n1.length; i++) {
-            sigma1 += (n1[i] - mean1)*(n1[i] - mean1);
-            sigma2 += (n2[i] - mean2)*(n2[i] - mean2);
-            corr += (n1[i] - mean1)*(n2[i] - mean2);
-        }
-        sigma1 = Math.sqrt(sigma1);
-        sigma2 = Math.sqrt(sigma2);
-        if (sigma1 > 0 && sigma2 > 0)
-            return corr/(sigma1*sigma2);
-        else
-            return 0;
-    }
-
-
-    private static double[] numberizeString(String s) {
-        double[] res = new double[s.length()];
-        for (int i=0; i<s.length(); i++)
-            res[i] = (double)s.charAt(i);
-        return res;
-    }
-
-    private static double[] stretchArray(double[] array, int length) {
-        if (length <= array.length || array.length == 0)
-            return array;
-        double multip = ((double)array.length)/((double)length);
-        double[] newArray = new double[length];
-        for (int i=0; i<newArray.length; i++) {
-            double index = ((double)i)*multip;
-            int baseInd = (int)Math.floor(index);
-            double dist = index - Math.floor(index);
-            newArray[i] = dist*array[Math.min(array.length-1, baseInd+1)]
-                + (1.0 - dist)*array[baseInd];
-        }
-        return newArray;
-    }
-
-
-    public static void main(String[] args) {
-        String d1 =  "Characterization of Calanus finmarchicus habitat in the North Sea",
-                d2 = "Characterization of Calunus finmarchicus habitat in the North Sea",
-                d3 = "Characterization of Calanus glacialissss habitat in the South Sea";
-        System.out.println(correlateByWords(d1, d2, false));
-        System.out.println(correlateByWords(d1, d3, false));
-        System.out.println(correlateByWords(d2, d3, false));
-
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+
+/**
+ * This class contains utility method for duplicate checking of entries.
+ */
+public class DuplicateCheck {
+
+    public static double duplicateThreshold = 0.75; // The overall threshold to signal a duplicate pair
+    // Non-required fields are investigated only if the required fields give a value within
+    // the doubt range of the threshold:
+    public static double doubtRange = 0.05;
+
+    final static double reqWeight = 3; // Weighting of all required fields
+
+    // Extra weighting of those fields that are most likely to provide correct duplicate detection:
+    static HashMap<String,Double> fieldWeights = new HashMap<String, Double>();
+
+    static {
+        fieldWeights.put("author", 2.5);
+        fieldWeights.put("editor", 2.5);
+        fieldWeights.put("title", 3.);
+        fieldWeights.put("journal", 2.);
+    }
+
+    /**
+     * Checks if the two entries represent the same publication.
+     *
+     * @param one BibtexEntry
+     * @param two BibtexEntry
+     * @return boolean
+     */
+    public static boolean isDuplicate(BibtexEntry one, BibtexEntry two) {
+
+        // First check if they are of the same type - a necessary condition:
+        if (one.getType() != two.getType())
+            return false;
+
+        // The check if they have the same required fields:
+        String[] fields = one.getType().getRequiredFields();
+        double[] req;
+        if (fields == null) {
+            req = new double[] {0., 0.};
+        }
+        else
+            req = compareFieldSet(fields, one, two);
+
+        if (Math.abs(req[0] - duplicateThreshold) > doubtRange) {
+            // Far from the threshold value, so we base our decision on the req. fields only
+            return req[0] >= duplicateThreshold;
+        }
+        else {
+            // Close to the threshold value, so we take a look at the optional fields, if any:
+            fields = one.getType().getOptionalFields();
+            if (fields != null) {
+                double[] opt = compareFieldSet(fields, one, two);
+                double totValue = (reqWeight*req[0]*req[1] + opt[0]*opt[1]) / (req[1]*reqWeight+opt[1]);
+                return totValue >= duplicateThreshold;
+            } else {
+                return (req[0] >= duplicateThreshold);
+            }
+        }
+    }
+
+    private static double[] compareFieldSet(String[] fields, BibtexEntry one, BibtexEntry two) {
+        double res = 0;
+        double totWeights = 0.;
+        for (int i = 0; i < fields.length; i++) {
+            // Util.pr(":"+compareSingleField(fields[i], one, two));
+            double weight;
+            if (fieldWeights.containsKey(fields[i]))
+                weight = fieldWeights.get(fields[i]);
+            else
+                weight = 1.0;
+            totWeights += weight;
+            int result = compareSingleField(fields[i], one, two);
+            //System.out.println("Field: "+fields[i]+": "+result);
+            if (result == Util.EQUAL) {
+                res += weight;
+            }
+            else if (result == Util.EMPTY_IN_BOTH)
+                totWeights -= weight;
+        }
+        if (totWeights > 0)
+            return new double[] {res / totWeights, totWeights};
+        else // no fields present. This points to a possible duplicate?
+            return new double[] {0.5, 0.0};
+    }
+
+    private static int compareSingleField(String field, BibtexEntry one, BibtexEntry two) {
+        String s1 = one.getField(field), s2 = two.getField(field);
+        if (s1 == null) {
+            if (s2 == null)
+                return Util.EMPTY_IN_BOTH;
+            else
+                return Util.EMPTY_IN_ONE;
+        } else if (s2 == null)
+            return Util.EMPTY_IN_TWO;
+
+        // Util.pr(field+": '"+s1+"' vs '"+s2+"'");
+        if (field.equals("author") || field.equals("editor")) {
+            // Specific for name fields.
+            // Harmonise case:
+            String auth1 = AuthorList.fixAuthor_lastNameOnlyCommas(s1, false).replaceAll(" and ", " ").toLowerCase(),
+                    auth2 = AuthorList.fixAuthor_lastNameOnlyCommas(s2, false).replaceAll(" and ", " ").toLowerCase();
+            //System.out.println(auth1);
+            //System.out.println(auth2);
+            //System.out.println(correlateByWords(auth1, auth2));
+            double similarity = correlateByWords(auth1, auth2, false);
+            if (similarity > 0.8)
+                return Util.EQUAL;
+            else
+                return Util.NOT_EQUAL;
+
+        } else if (field.equals("pages")) {
+            // Pages can be given with a variety of delimiters, "-", "--", " - ", " -- ".
+            // We do a replace to harmonize these to a simple "-":
+            // After this, a simple test for equality should be enough:
+            s1 = s1.replaceAll("[- ]+","-");
+            s2 = s2.replaceAll("[- ]+","-");
+            if (s1.equals(s2))
+                return Util.EQUAL;
+            else
+                return Util.NOT_EQUAL;
+
+        } else if (field.equals("journal")) {
+            // We do not attempt to harmonize abbreviation state of the journal names,
+            // but we remove periods from the names in case they are abbreviated with
+            // and without dots:
+            s1 = s1.replaceAll("\\.", "").toLowerCase();
+            s2 = s2.replaceAll("\\.", "").toLowerCase();
+            //System.out.println(s1+" :: "+s2);
+            double similarity = correlateByWords(s1, s2, true);
+            if (similarity > 0.8)
+                return Util.EQUAL;
+            else
+                return Util.NOT_EQUAL;
+        } else {
+            s1 = s1.toLowerCase();
+            s2 = s2.toLowerCase();
+            double similarity = correlateByWords(s1, s2, false);
+            if (similarity > 0.8)
+                return Util.EQUAL;
+            else
+                return Util.NOT_EQUAL;
+            /*if (s1.trim().equals(s2.trim()))
+                return Util.EQUAL;
+            else
+                return Util.NOT_EQUAL;*/
+        }
+
+    }
+
+    public static double compareEntriesStrictly(BibtexEntry one, BibtexEntry two) {
+        HashSet<String> allFields = new HashSet<String>();// one.getAllFields());
+        allFields.addAll(one.getAllFields());
+        allFields.addAll(two.getAllFields());
+
+        int score = 0;
+        for (Iterator<String> fld = allFields.iterator(); fld.hasNext();) {
+            String field = fld.next();
+            Object en = one.getField(field), to = two.getField(field);
+            if ((en != null) && (to != null) && (en.equals(to)))
+                score++;
+            else if ((en == null) && (to == null))
+                score++;
+        }
+        if (score == allFields.size())
+            return 1.01; // Just to make sure we can
+            // use score>1 without
+            // trouble.
+        else
+            return ((double) score) / allFields.size();
+    }
+
+    /**
+     * Goes through all entries in the given database, and if at least one of
+     * them is a duplicate of the given entry, as per
+     * Util.isDuplicate(BibtexEntry, BibtexEntry), the duplicate is returned.
+     * The search is terminated when the first duplicate is found.
+     *
+     * @param database The database to search.
+     * @param entry    The entry of which we are looking for duplicates.
+     * @return The first duplicate entry found. null if no duplicates are found.
+     */
+    public static BibtexEntry containsDuplicate(BibtexDatabase database, BibtexEntry entry) {
+        for (BibtexEntry other : database.getEntries()) {
+            if (isDuplicate(entry, other))
+                return other; // Duplicate found.
+        }
+        return null; // No duplicate found.
+	}
+
+    /**
+     * Compare two strings on the basis of word-by-word correlation analysis.
+     * @param s1 The first string
+     * @param s2 The second string
+     * @param truncate if true, always truncate the longer of two words to be compared to
+     *   harmonize their length. If false, use interpolation to harmonize the strings.
+     * @return a value in the interval [0, 1] indicating the degree of match.
+     */
+    public static double correlateByWords(String s1, String s2, boolean truncate) {
+        String[] w1 = s1.split("\\s"),
+                w2 = s2.split("\\s");
+        int n = Math.min(w1.length, w2.length);
+        int misses = 0;
+        for (int i=0; i<n; i++) {
+            /*if (!w1[i].equalsIgnoreCase(w2[i]))
+                misses++;*/
+            double corr = correlateStrings(w1[i], w2[i], truncate);
+            if (corr < 0.75)
+                misses++;
+        }
+        double missRate = ((double)misses)/((double)n);
+        return 1-missRate;
+    }
+
+    public static double correlateStrings(String s1, String s2, boolean truncate) {
+        int minLength = Math.min(s1.length(), s2.length());
+        if (truncate && minLength == 1) {
+            return s1.charAt(0) == s2.charAt(0) ? 1.0 : 0.0;
+        }
+        else if (s1.length() == 1 && s2.length() == 1) {
+            return s1.equals(s2) ? 1.0 : 0.0;
+        }
+        else if (minLength == 0)
+            return s1.length() == 0 && s2.length() == 0 ? 1.0 : 0;
+
+        // Convert strings to numbers and harmonize length in a method dependent on truncate:
+        if (truncate) {
+            // Harmonize length by truncation:
+            if (s1.length() > minLength)
+                s1 = s1.substring(0, minLength);
+            if (s2.length() > minLength)
+                s2 = s2.substring(0, minLength);
+        }
+        double[] n1 = numberizeString(s1),
+                n2 = numberizeString(s2);
+        // If truncation is disabled, harmonize length by interpolation:
+        if (!truncate) {
+            if (n1.length < n2.length)
+                n1 = stretchArray(n1, n2.length);
+            else if (n2.length < n1.length)
+                n2 = stretchArray(n2, n1.length);
+        }
+        return corrCoef(n1, n2);
+    }
+
+    private static double corrCoef(double[] n1, double[] n2) {
+        // Calculate mean values:
+        double mean1 = 0, mean2 = 0;
+        for (int i=0; i<n1.length; i++) {
+            mean1 += n1[i];
+            mean2 += n2[i];
+        }
+        mean1 /= (double)n1.length;
+        mean2 /= (double)n2.length;
+        double sigma1 = 0, sigma2 = 0;
+        // Calculate correlation coefficient:
+        double corr = 0;
+        for (int i=0; i<n1.length; i++) {
+            sigma1 += (n1[i] - mean1)*(n1[i] - mean1);
+            sigma2 += (n2[i] - mean2)*(n2[i] - mean2);
+            corr += (n1[i] - mean1)*(n2[i] - mean2);
+        }
+        sigma1 = Math.sqrt(sigma1);
+        sigma2 = Math.sqrt(sigma2);
+        if (sigma1 > 0 && sigma2 > 0)
+            return corr/(sigma1*sigma2);
+        else
+            return 0;
+    }
+
+
+    private static double[] numberizeString(String s) {
+        double[] res = new double[s.length()];
+        for (int i=0; i<s.length(); i++)
+            res[i] = (double)s.charAt(i);
+        return res;
+    }
+
+    private static double[] stretchArray(double[] array, int length) {
+        if (length <= array.length || array.length == 0)
+            return array;
+        double multip = ((double)array.length)/((double)length);
+        double[] newArray = new double[length];
+        for (int i=0; i<newArray.length; i++) {
+            double index = ((double)i)*multip;
+            int baseInd = (int)Math.floor(index);
+            double dist = index - Math.floor(index);
+            newArray[i] = dist*array[Math.min(array.length-1, baseInd+1)]
+                + (1.0 - dist)*array[baseInd];
+        }
+        return newArray;
+    }
+
+
+    public static void main(String[] args) {
+        String d1 =  "Characterization of Calanus finmarchicus habitat in the North Sea",
+                d2 = "Characterization of Calunus finmarchicus habitat in the North Sea",
+                d3 = "Characterization of Calanus glacialissss habitat in the South Sea";
+        System.out.println(correlateByWords(d1, d2, false));
+        System.out.println(correlateByWords(d1, d3, false));
+        System.out.println(correlateByWords(d2, d3, false));
+
+    }
+}
diff --git a/src/java/net/sf/jabref/DuplicateResolverDialog.java b/src/java/net/sf/jabref/DuplicateResolverDialog.java
index 34957e2..86fff1a 100644
--- a/src/java/net/sf/jabref/DuplicateResolverDialog.java
+++ b/src/java/net/sf/jabref/DuplicateResolverDialog.java
@@ -1,276 +1,276 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.IOException;
-import java.io.StringWriter;
-
-import javax.swing.*;
-
-import net.sf.jabref.export.LatexFieldFormatter;
-
-
-// created by : ?
-//
-// modified : r.nagel 2.09.2004
-//            - insert close button
-
-public class DuplicateResolverDialog extends JDialog {
-
-    public static final int
-        NOT_CHOSEN = -1,
-        KEEP_BOTH = 0,
-        KEEP_UPPER = 1,
-        KEEP_LOWER = 2,
-        AUTOREMOVE_EXACT = 3,
-        BREAK      = 5,  // close
-        IMPORT_AND_DELETE_OLD = 1,
-        IMPORT_AND_KEEP_OLD = 0,
-        DO_NOT_IMPORT = 2,
-        DUPLICATE_SEARCH = 1,
-        IMPORT_CHECK = 2,
-        INSPECTION = 3,
-        DUPLICATE_SEARCH_WITH_EXACT = 4;
-
-    final Dimension DIM = new Dimension(650, 600);
-
-    PreviewPanel p1, p2;
-    JTextArea ta1, ta2;
-    JTabbedPane tabbed = new JTabbedPane();
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-    JButton first, second, both,
-        cancel = new JButton(Globals.lang("Cancel")),
-        removeExact = null;
-    JPanel options = new JPanel(),
-        main = new JPanel(),
-        source = new JPanel();
-    int status = NOT_CHOSEN;
-    boolean block = true;
-    TitleLabel lab;
-
-  public DuplicateResolverDialog(JFrame frame, BibtexEntry one, BibtexEntry two, int type) {
-      super(frame, Globals.lang("Possible duplicate entries"), true);
-      init(one, two, type);
-      Util.placeDialog(this, frame);
-  }
-
-    public DuplicateResolverDialog(JDialog frame, BibtexEntry one, BibtexEntry two, int type) {
-        super(frame, Globals.lang("Possible duplicate entries"), true);
-        init(one, two, type);
-        Util.placeDialog(this, frame);
-    }
-
-    private void init(BibtexEntry one, BibtexEntry two, int type) {
-      switch (type) {
-          case DUPLICATE_SEARCH:
-              first = new JButton(Globals.lang("Keep upper"));
-              second = new JButton(Globals.lang("Keep lower"));
-              both = new JButton(Globals.lang("Keep both"));
-              break;
-          case INSPECTION:
-              first = new JButton(Globals.lang("Remove old entry"));
-              second = new JButton(Globals.lang("Remove entry from import"));
-              both = new JButton(Globals.lang("Keep both"));
-              break;
-          case DUPLICATE_SEARCH_WITH_EXACT:
-              first = new JButton(Globals.lang("Keep upper"));
-              second = new JButton(Globals.lang("Keep lower"));
-              both = new JButton(Globals.lang("Keep both"));
-              removeExact = new JButton(Globals.lang("Automatically remove exact duplicates"));
-              break;
-          default:
-              first = new JButton(Globals.lang("Import and remove old entry"));
-                  second = new JButton(Globals.lang("Do not import entry"));
-                  both = new JButton(Globals.lang("Import and keep old entry"));
-      }
-
-    String layout = Globals.prefs.get("preview0");
-    p1 = new PreviewPanel(null, one, null, new MetaData(), layout);
-    p2 = new PreviewPanel(null, two, null, new MetaData(), layout);
-    ta1 = new JTextArea();
-    ta2 = new JTextArea();
-    ta1.setEditable(false);
-    ta2.setEditable(false);
-
-    //ta1.setPreferredSize(dim);
-    //ta2.setPreferredSize(dim);
-
-    setSourceView(one, two);
-
-    //getContentPane().setLayout();
-    main.setLayout(gbl);
-    source.setLayout(gbl);
-    con.insets = new Insets(10,10,0,10);
-    con.fill = GridBagConstraints.BOTH;
-    con.gridwidth = GridBagConstraints.REMAINDER;
-    con.weightx = 1;
-    con.weighty = 0;
-    lab = new TitleLabel((type==DUPLICATE_SEARCH) ? "" :
-                                  Globals.lang("Entry in current database"));
-    gbl.setConstraints(lab, con);
-    main.add(lab);
-    con.weighty = 1;
-    con.insets = new Insets(5,10,10,10);
-    JScrollPane sp = new JScrollPane(p1);
-    gbl.setConstraints(sp, con);
-    main.add(sp);
-    con.weighty = 0;
-    con.insets = new Insets(10,10,0,10);
-    lab = new TitleLabel((type==DUPLICATE_SEARCH) ? "" :
-                                  Globals.lang("Entry in import"));
-    gbl.setConstraints(lab, con);
-    main.add(lab);
-    con.weighty = 1;
-    con.insets = new Insets(5,10,10,10);
-    sp = new JScrollPane(ta1);
-    gbl.setConstraints(sp, con);
-    source.add(sp);
-    sp = new JScrollPane(p2);
-    gbl.setConstraints(sp, con);
-    main.add(sp);
-    sp = new JScrollPane(ta2);
-    gbl.setConstraints(sp, con);
-    source.add(sp);
-    tabbed.add(Globals.lang("Short form"), main);
-    tabbed.add(Globals.lang("Complete record"), source);
-    if (removeExact != null)
-        options.add(removeExact);
-    options.add(first);
-    options.add(second);
-    options.add(both);
-    if (type != IMPORT_CHECK) {
-        options.add(Box.createHorizontalStrut(5));
-        options.add(cancel);
-    }
-
-    first.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        status = KEEP_UPPER;
-        block = false;
-        dispose();
-      }
-    });
-
-    second.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        status = KEEP_LOWER;
-        block = false;
-        dispose();
-      }
-    });
-
-    both.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        status = KEEP_BOTH;
-        block = false;
-        dispose();
-      }
-    });
-
-    if (removeExact != null)
-        removeExact.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                status = AUTOREMOVE_EXACT;
-                block = false;
-                dispose();
-            }
-        });
-
-    cancel.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        status = BREAK;
-        block = false;
-        dispose();
-      }
-    });
-
-    getContentPane().add(tabbed, BorderLayout.CENTER);
-    getContentPane().add(options, BorderLayout.SOUTH);
-    pack();
-
-
-    if (getHeight() > DIM.height) {
-        setSize(new Dimension(getWidth(), DIM.height));
-    }
-    if (getWidth() > DIM.width) {
-        setSize(new Dimension(DIM.width, getHeight()));
-    }
-
-
-    both.requestFocus();
-
-  }
-
-  private void setSourceView(BibtexEntry one, BibtexEntry two) {
-    try {
-      StringWriter sw = new StringWriter();
-      one.write(sw, new LatexFieldFormatter(), false);
-      ta1.setText(sw.getBuffer().toString());
-      sw = new StringWriter();
-      two.write(sw, new LatexFieldFormatter(), false);
-      ta2.setText(sw.getBuffer().toString());
-    }
-    catch (IOException ex) {
-    }
-  }
-
-
-
-  public void setEntries(BibtexEntry newOne, BibtexEntry newTwo) {
-    setSourceView(newOne, newTwo);
-    p1.setEntry(newOne);
-    p2.setEntry(newTwo);
-    status = NOT_CHOSEN;
-    p1.revalidate();
-    p1.repaint();
-    block = true;
-  }
-
-public boolean isBlocking() {
-  return block;
-}
-
-  public int getSelected() {
-    return status;
-  }
-
-  public static int resolveDuplicate(JFrame frame, BibtexEntry one, BibtexEntry two) {
-    DuplicateResolverDialog drd = new DuplicateResolverDialog(frame, one, two,
-                                                              DUPLICATE_SEARCH);
-    drd.setVisible(true); // drd.show(); -> deprecated since 1.5
-    return drd.getSelected();
-  }
-
-  public static int resolveDuplicate(JDialog frame, BibtexEntry one, BibtexEntry two) {
-    DuplicateResolverDialog drd = new DuplicateResolverDialog(frame, one, two,
-                                                              DUPLICATE_SEARCH);
-    drd.setVisible(true); // drd.show(); -> deprecated since 1.5
-    return drd.getSelected();
-  }
-
-  public static int resolveDuplicateInImport(JabRefFrame frame, BibtexEntry existing,
-                                           BibtexEntry imported) {
-    DuplicateResolverDialog drd = new DuplicateResolverDialog(frame, existing, imported,
-                                                              IMPORT_CHECK);
-    drd.setVisible(true); // drd.show(); -> deprecated since 1.5
-    return drd.getSelected();
-  }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.io.StringWriter;
+
+import javax.swing.*;
+
+import net.sf.jabref.export.LatexFieldFormatter;
+
+
+// created by : ?
+//
+// modified : r.nagel 2.09.2004
+//            - insert close button
+
+public class DuplicateResolverDialog extends JDialog {
+
+    public static final int
+        NOT_CHOSEN = -1,
+        KEEP_BOTH = 0,
+        KEEP_UPPER = 1,
+        KEEP_LOWER = 2,
+        AUTOREMOVE_EXACT = 3,
+        BREAK      = 5,  // close
+        IMPORT_AND_DELETE_OLD = 1,
+        IMPORT_AND_KEEP_OLD = 0,
+        DO_NOT_IMPORT = 2,
+        DUPLICATE_SEARCH = 1,
+        IMPORT_CHECK = 2,
+        INSPECTION = 3,
+        DUPLICATE_SEARCH_WITH_EXACT = 4;
+
+    final Dimension DIM = new Dimension(650, 600);
+
+    PreviewPanel p1, p2;
+    JTextArea ta1, ta2;
+    JTabbedPane tabbed = new JTabbedPane();
+    GridBagLayout gbl = new GridBagLayout();
+    GridBagConstraints con = new GridBagConstraints();
+    JButton first, second, both,
+        cancel = new JButton(Globals.lang("Cancel")),
+        removeExact = null;
+    JPanel options = new JPanel(),
+        main = new JPanel(),
+        source = new JPanel();
+    int status = NOT_CHOSEN;
+    boolean block = true;
+    TitleLabel lab;
+
+  public DuplicateResolverDialog(JFrame frame, BibtexEntry one, BibtexEntry two, int type) {
+      super(frame, Globals.lang("Possible duplicate entries"), true);
+      init(one, two, type);
+      Util.placeDialog(this, frame);
+  }
+
+    public DuplicateResolverDialog(JDialog frame, BibtexEntry one, BibtexEntry two, int type) {
+        super(frame, Globals.lang("Possible duplicate entries"), true);
+        init(one, two, type);
+        Util.placeDialog(this, frame);
+    }
+
+    private void init(BibtexEntry one, BibtexEntry two, int type) {
+      switch (type) {
+          case DUPLICATE_SEARCH:
+              first = new JButton(Globals.lang("Keep upper"));
+              second = new JButton(Globals.lang("Keep lower"));
+              both = new JButton(Globals.lang("Keep both"));
+              break;
+          case INSPECTION:
+              first = new JButton(Globals.lang("Remove old entry"));
+              second = new JButton(Globals.lang("Remove entry from import"));
+              both = new JButton(Globals.lang("Keep both"));
+              break;
+          case DUPLICATE_SEARCH_WITH_EXACT:
+              first = new JButton(Globals.lang("Keep upper"));
+              second = new JButton(Globals.lang("Keep lower"));
+              both = new JButton(Globals.lang("Keep both"));
+              removeExact = new JButton(Globals.lang("Automatically remove exact duplicates"));
+              break;
+          default:
+              first = new JButton(Globals.lang("Import and remove old entry"));
+                  second = new JButton(Globals.lang("Do not import entry"));
+                  both = new JButton(Globals.lang("Import and keep old entry"));
+      }
+
+    String layout = Globals.prefs.get("preview0");
+    p1 = new PreviewPanel(null, one, null, new MetaData(), layout);
+    p2 = new PreviewPanel(null, two, null, new MetaData(), layout);
+    ta1 = new JTextArea();
+    ta2 = new JTextArea();
+    ta1.setEditable(false);
+    ta2.setEditable(false);
+
+    //ta1.setPreferredSize(dim);
+    //ta2.setPreferredSize(dim);
+
+    setSourceView(one, two);
+
+    //getContentPane().setLayout();
+    main.setLayout(gbl);
+    source.setLayout(gbl);
+    con.insets = new Insets(10,10,0,10);
+    con.fill = GridBagConstraints.BOTH;
+    con.gridwidth = GridBagConstraints.REMAINDER;
+    con.weightx = 1;
+    con.weighty = 0;
+    lab = new TitleLabel((type==DUPLICATE_SEARCH) ? "" :
+                                  Globals.lang("Entry in current database"));
+    gbl.setConstraints(lab, con);
+    main.add(lab);
+    con.weighty = 1;
+    con.insets = new Insets(5,10,10,10);
+    JScrollPane sp = new JScrollPane(p1);
+    gbl.setConstraints(sp, con);
+    main.add(sp);
+    con.weighty = 0;
+    con.insets = new Insets(10,10,0,10);
+    lab = new TitleLabel((type==DUPLICATE_SEARCH) ? "" :
+                                  Globals.lang("Entry in import"));
+    gbl.setConstraints(lab, con);
+    main.add(lab);
+    con.weighty = 1;
+    con.insets = new Insets(5,10,10,10);
+    sp = new JScrollPane(ta1);
+    gbl.setConstraints(sp, con);
+    source.add(sp);
+    sp = new JScrollPane(p2);
+    gbl.setConstraints(sp, con);
+    main.add(sp);
+    sp = new JScrollPane(ta2);
+    gbl.setConstraints(sp, con);
+    source.add(sp);
+    tabbed.add(Globals.lang("Short form"), main);
+    tabbed.add(Globals.lang("Complete record"), source);
+    if (removeExact != null)
+        options.add(removeExact);
+    options.add(first);
+    options.add(second);
+    options.add(both);
+    if (type != IMPORT_CHECK) {
+        options.add(Box.createHorizontalStrut(5));
+        options.add(cancel);
+    }
+
+    first.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        status = KEEP_UPPER;
+        block = false;
+        dispose();
+      }
+    });
+
+    second.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        status = KEEP_LOWER;
+        block = false;
+        dispose();
+      }
+    });
+
+    both.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        status = KEEP_BOTH;
+        block = false;
+        dispose();
+      }
+    });
+
+    if (removeExact != null)
+        removeExact.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                status = AUTOREMOVE_EXACT;
+                block = false;
+                dispose();
+            }
+        });
+
+    cancel.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        status = BREAK;
+        block = false;
+        dispose();
+      }
+    });
+
+    getContentPane().add(tabbed, BorderLayout.CENTER);
+    getContentPane().add(options, BorderLayout.SOUTH);
+    pack();
+
+
+    if (getHeight() > DIM.height) {
+        setSize(new Dimension(getWidth(), DIM.height));
+    }
+    if (getWidth() > DIM.width) {
+        setSize(new Dimension(DIM.width, getHeight()));
+    }
+
+
+    both.requestFocus();
+
+  }
+
+  private void setSourceView(BibtexEntry one, BibtexEntry two) {
+    try {
+      StringWriter sw = new StringWriter();
+      one.write(sw, new LatexFieldFormatter(), false);
+      ta1.setText(sw.getBuffer().toString());
+      sw = new StringWriter();
+      two.write(sw, new LatexFieldFormatter(), false);
+      ta2.setText(sw.getBuffer().toString());
+    }
+    catch (IOException ex) {
+    }
+  }
+
+
+
+  public void setEntries(BibtexEntry newOne, BibtexEntry newTwo) {
+    setSourceView(newOne, newTwo);
+    p1.setEntry(newOne);
+    p2.setEntry(newTwo);
+    status = NOT_CHOSEN;
+    p1.revalidate();
+    p1.repaint();
+    block = true;
+  }
+
+public boolean isBlocking() {
+  return block;
+}
+
+  public int getSelected() {
+    return status;
+  }
+
+  public static int resolveDuplicate(JFrame frame, BibtexEntry one, BibtexEntry two) {
+    DuplicateResolverDialog drd = new DuplicateResolverDialog(frame, one, two,
+                                                              DUPLICATE_SEARCH);
+    drd.setVisible(true); // drd.show(); -> deprecated since 1.5
+    return drd.getSelected();
+  }
+
+  public static int resolveDuplicate(JDialog frame, BibtexEntry one, BibtexEntry two) {
+    DuplicateResolverDialog drd = new DuplicateResolverDialog(frame, one, two,
+                                                              DUPLICATE_SEARCH);
+    drd.setVisible(true); // drd.show(); -> deprecated since 1.5
+    return drd.getSelected();
+  }
+
+  public static int resolveDuplicateInImport(JabRefFrame frame, BibtexEntry existing,
+                                           BibtexEntry imported) {
+    DuplicateResolverDialog drd = new DuplicateResolverDialog(frame, existing, imported,
+                                                              IMPORT_CHECK);
+    drd.setVisible(true); // drd.show(); -> deprecated since 1.5
+    return drd.getSelected();
+  }
+
+}
diff --git a/src/java/net/sf/jabref/DuplicateSearch.java b/src/java/net/sf/jabref/DuplicateSearch.java
index d77e3ab..31170c2 100644
--- a/src/java/net/sf/jabref/DuplicateSearch.java
+++ b/src/java/net/sf/jabref/DuplicateSearch.java
@@ -1,215 +1,215 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// created by : ?
-//
-// modified : r.nagel 2.09.2004
-//            - new SearcherThread.setFinish() method
-//            - replace thread.sleep in run() by wait() and notify() mechanism
-
-package net.sf.jabref;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Vector;
-
-import javax.swing.SwingUtilities;
-
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableRemoveEntry;
-import spin.Spin;
-
-public class DuplicateSearch extends Thread {
-
-  BasePanel panel;
-  BibtexEntry[] bes;
-  final Vector<BibtexEntry[]> duplicates = new Vector<BibtexEntry[]>();
-  boolean autoRemoveExactDuplicates = false;
-  
-  public DuplicateSearch(BasePanel bp) {
-    panel = bp;
-  }
-
-public void run() {
-  final NamedCompound ce = new NamedCompound(Globals.lang("duplicate removal"));
-  int duplicateCounter = 0;
-  
-  autoRemoveExactDuplicates = false;
-  panel.output(Globals.lang("Searching for duplicates..."));
-  Object[] keys = panel.database.getKeySet().toArray();
-  if ((keys == null) || (keys.length < 2))
-    return;
-  bes = new BibtexEntry[keys.length];
-  for (int i=0; i<keys.length; i++)
-    bes[i] = panel.database.getEntryById((String)keys[i]);
-
-  SearcherThread st = new SearcherThread();
-  st.setPriority(Thread.MIN_PRIORITY);
-  st.start();
-  int current = 0;
-
-   final ArrayList<BibtexEntry> toRemove = new ArrayList<BibtexEntry>();
-  while (!st.finished() || (current < duplicates.size()))
-  {
-
-    if (current >= duplicates.size() )
-    {
-      // wait until the search thread puts something into duplicates vector
-      // or finish its work
-      synchronized(duplicates)
-      {
-         try
-         {
-           duplicates.wait();
-         }
-         catch (Exception e) {}
-      }
-    } else  // duplicates found
-    {
-
-
-        BibtexEntry[] be = duplicates.get(current);
-        current++;
-        if (!toRemove.contains(be[0]) && !toRemove.contains(be[1])) {
-            // Check if they are exact duplicates:
-            boolean askAboutExact = false;
-            if (DuplicateCheck.compareEntriesStrictly(be[0], be[1]) > 1) {
-                if (autoRemoveExactDuplicates) {
-                    toRemove.add(be[1]);
-                    duplicateCounter++;
-                    continue;
-                } else {
-                    askAboutExact = true;
-                }
-            }
-
-            DuplicateCallBack cb = new DuplicateCallBack(panel.frame, be[0], be[1],
-                    askAboutExact ? DuplicateResolverDialog.DUPLICATE_SEARCH_WITH_EXACT :
-                            DuplicateResolverDialog.DUPLICATE_SEARCH);
-            ((CallBack)(Spin.over(cb))).update();
-
-            duplicateCounter++;
-            int answer = cb.getSelected();
-            if ((answer == DuplicateResolverDialog.KEEP_UPPER)
-                    || (answer == DuplicateResolverDialog.AUTOREMOVE_EXACT)) {
-                toRemove.add(be[1]);
-                if (answer == DuplicateResolverDialog.AUTOREMOVE_EXACT)
-                    autoRemoveExactDuplicates = true; // Remember choice
-            } else if (answer == DuplicateResolverDialog.KEEP_LOWER) {
-                toRemove.add(be[0]);
-            } else if (answer == DuplicateResolverDialog.BREAK) {
-                st.setFinished(); // thread killing
-                current = Integer.MAX_VALUE;
-                duplicateCounter--; // correct counter
-            }
-        }
-    }
-  }
-
-    final int dupliC = duplicateCounter;
-    SwingUtilities.invokeLater(new Runnable() {
-        public void run() {
-            // Now, do the actual removal:
-            if (toRemove.size() > 0) {
-                for (Iterator<BibtexEntry> iterator = toRemove.iterator(); iterator.hasNext();) {
-                    BibtexEntry entry = iterator.next();
-                    panel.database.removeEntry(entry.getId());
-                    ce.addEdit(new UndoableRemoveEntry(panel.database, entry, panel));
-                }
-                panel.markBaseChanged();
-            }
-            panel.output(Globals.lang("Duplicate pairs found") + ": " + duplicates.size()
-                       +" " +Globals.lang("pairs processed") +": " +dupliC );
-
-
-                ce.end();
-                panel.undoManager.addEdit(ce);
-
-        }
-
-    });
-
-
-}
-
-
-class SearcherThread extends Thread {
-
-  private boolean finished = false;
-
-  public void run() {
-    for (int i = 0; (i < bes.length - 1) && !finished ; i++) {
-      for (int j = i + 1; (j < bes.length) && !finished ; j++) {
-        boolean eq = DuplicateCheck.isDuplicate(bes[i], bes[j]);
-
-        // If (suspected) duplicates, add them to the duplicates vector.
-        if (eq)
-        {
-          synchronized (duplicates)
-          {
-            duplicates.add( new BibtexEntry[] {bes[i], bes[j]} ) ;
-            duplicates.notifyAll(); // send wake up all
-          }
-        }
-      }
-    }
-    finished = true;
-    // if no duplicates found, the graphical thread will never wake up
-    synchronized(duplicates)
-    {
-      duplicates.notifyAll();
-    }
-  }
-
-  public boolean finished() {
-    return finished;
-  }
-
-  // Thread cancel option
-  // no synchronized used because no "realy" critical situations expected
-  public void setFinished()
-  {
-    finished = true ;
-  }
-}
-
-    class DuplicateCallBack implements CallBack {
-        private int reply = -1;
-        DuplicateResolverDialog diag;
-        private JabRefFrame frame;
-        private BibtexEntry one;
-        private BibtexEntry two;
-        private int dialogType;
-
-        public DuplicateCallBack(JabRefFrame frame, BibtexEntry one, BibtexEntry two,
-                                 int dialogType) {
-
-            this.frame = frame;
-            this.one = one;
-            this.two = two;
-            this.dialogType = dialogType;
-        }
-        public int getSelected() {
-            return reply;
-        }
-        public void update() {
-            diag = new DuplicateResolverDialog(frame, one, two, dialogType);
-            diag.setVisible(true);
-            diag.dispose();
-            reply = diag.getSelected();
-        }
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// created by : ?
+//
+// modified : r.nagel 2.09.2004
+//            - new SearcherThread.setFinish() method
+//            - replace thread.sleep in run() by wait() and notify() mechanism
+
+package net.sf.jabref;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Vector;
+
+import javax.swing.SwingUtilities;
+
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableRemoveEntry;
+import spin.Spin;
+
+public class DuplicateSearch extends Thread {
+
+  BasePanel panel;
+  BibtexEntry[] bes;
+  final Vector<BibtexEntry[]> duplicates = new Vector<BibtexEntry[]>();
+  boolean autoRemoveExactDuplicates = false;
+  
+  public DuplicateSearch(BasePanel bp) {
+    panel = bp;
+  }
+
+public void run() {
+  final NamedCompound ce = new NamedCompound(Globals.lang("duplicate removal"));
+  int duplicateCounter = 0;
+  
+  autoRemoveExactDuplicates = false;
+  panel.output(Globals.lang("Searching for duplicates..."));
+  Object[] keys = panel.database.getKeySet().toArray();
+  if ((keys == null) || (keys.length < 2))
+    return;
+  bes = new BibtexEntry[keys.length];
+  for (int i=0; i<keys.length; i++)
+    bes[i] = panel.database.getEntryById((String)keys[i]);
+
+  SearcherThread st = new SearcherThread();
+  st.setPriority(Thread.MIN_PRIORITY);
+  st.start();
+  int current = 0;
+
+   final ArrayList<BibtexEntry> toRemove = new ArrayList<BibtexEntry>();
+  while (!st.finished() || (current < duplicates.size()))
+  {
+
+    if (current >= duplicates.size() )
+    {
+      // wait until the search thread puts something into duplicates vector
+      // or finish its work
+      synchronized(duplicates)
+      {
+         try
+         {
+           duplicates.wait();
+         }
+         catch (Exception e) {}
+      }
+    } else  // duplicates found
+    {
+
+
+        BibtexEntry[] be = duplicates.get(current);
+        current++;
+        if (!toRemove.contains(be[0]) && !toRemove.contains(be[1])) {
+            // Check if they are exact duplicates:
+            boolean askAboutExact = false;
+            if (DuplicateCheck.compareEntriesStrictly(be[0], be[1]) > 1) {
+                if (autoRemoveExactDuplicates) {
+                    toRemove.add(be[1]);
+                    duplicateCounter++;
+                    continue;
+                } else {
+                    askAboutExact = true;
+                }
+            }
+
+            DuplicateCallBack cb = new DuplicateCallBack(panel.frame, be[0], be[1],
+                    askAboutExact ? DuplicateResolverDialog.DUPLICATE_SEARCH_WITH_EXACT :
+                            DuplicateResolverDialog.DUPLICATE_SEARCH);
+            ((CallBack)(Spin.over(cb))).update();
+
+            duplicateCounter++;
+            int answer = cb.getSelected();
+            if ((answer == DuplicateResolverDialog.KEEP_UPPER)
+                    || (answer == DuplicateResolverDialog.AUTOREMOVE_EXACT)) {
+                toRemove.add(be[1]);
+                if (answer == DuplicateResolverDialog.AUTOREMOVE_EXACT)
+                    autoRemoveExactDuplicates = true; // Remember choice
+            } else if (answer == DuplicateResolverDialog.KEEP_LOWER) {
+                toRemove.add(be[0]);
+            } else if (answer == DuplicateResolverDialog.BREAK) {
+                st.setFinished(); // thread killing
+                current = Integer.MAX_VALUE;
+                duplicateCounter--; // correct counter
+            }
+        }
+    }
+  }
+
+    final int dupliC = duplicateCounter;
+    SwingUtilities.invokeLater(new Runnable() {
+        public void run() {
+            // Now, do the actual removal:
+            if (toRemove.size() > 0) {
+                for (Iterator<BibtexEntry> iterator = toRemove.iterator(); iterator.hasNext();) {
+                    BibtexEntry entry = iterator.next();
+                    panel.database.removeEntry(entry.getId());
+                    ce.addEdit(new UndoableRemoveEntry(panel.database, entry, panel));
+                }
+                panel.markBaseChanged();
+            }
+            panel.output(Globals.lang("Duplicate pairs found") + ": " + duplicates.size()
+                       +" " +Globals.lang("pairs processed") +": " +dupliC );
+
+
+                ce.end();
+                panel.undoManager.addEdit(ce);
+
+        }
+
+    });
+
+
+}
+
+
+class SearcherThread extends Thread {
+
+  private boolean finished = false;
+
+  public void run() {
+    for (int i = 0; (i < bes.length - 1) && !finished ; i++) {
+      for (int j = i + 1; (j < bes.length) && !finished ; j++) {
+        boolean eq = DuplicateCheck.isDuplicate(bes[i], bes[j]);
+
+        // If (suspected) duplicates, add them to the duplicates vector.
+        if (eq)
+        {
+          synchronized (duplicates)
+          {
+            duplicates.add( new BibtexEntry[] {bes[i], bes[j]} ) ;
+            duplicates.notifyAll(); // send wake up all
+          }
+        }
+      }
+    }
+    finished = true;
+    // if no duplicates found, the graphical thread will never wake up
+    synchronized(duplicates)
+    {
+      duplicates.notifyAll();
+    }
+  }
+
+  public boolean finished() {
+    return finished;
+  }
+
+  // Thread cancel option
+  // no synchronized used because no "realy" critical situations expected
+  public void setFinished()
+  {
+    finished = true ;
+  }
+}
+
+    class DuplicateCallBack implements CallBack {
+        private int reply = -1;
+        DuplicateResolverDialog diag;
+        private JabRefFrame frame;
+        private BibtexEntry one;
+        private BibtexEntry two;
+        private int dialogType;
+
+        public DuplicateCallBack(JabRefFrame frame, BibtexEntry one, BibtexEntry two,
+                                 int dialogType) {
+
+            this.frame = frame;
+            this.one = one;
+            this.two = two;
+            this.dialogType = dialogType;
+        }
+        public int getSelected() {
+            return reply;
+        }
+        public void update() {
+            diag = new DuplicateResolverDialog(frame, one, two, dialogType);
+            diag.setVisible(true);
+            diag.dispose();
+            reply = diag.getSelected();
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/EntryComparator.java b/src/java/net/sf/jabref/EntryComparator.java
index df0c8e6..d62a157 100644
--- a/src/java/net/sf/jabref/EntryComparator.java
+++ b/src/java/net/sf/jabref/EntryComparator.java
@@ -1,135 +1,135 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.util.Comparator;
-
-/**
- * This implementation of Comparator takes care of most of the details of sorting BibTeX entries in JabRef.
- * It is structured as a node in a linked list of comparators, where each node can contain a link to a
- * new comparator that decides the ordering (by recursion) if this one can't find a difference. The next
- * node, if any, is given at construction time, and an arbitrary number of nodes can be included.
- * If the entries are equal by this comparator, and there is no next entry, the entries' unique IDs will
- * decide the ordering. Consequently, this comparator can never return 0 unless the entries are the same
- * object.
- */
-public class EntryComparator implements Comparator<BibtexEntry> {
-
-    String sortField;
-    boolean descending, binary=false, numeric;
-    Comparator<BibtexEntry> next;
-
-    public EntryComparator(boolean binary, boolean desc, String field, Comparator<BibtexEntry> next) {
-        this.binary = binary;
-        this.sortField = field;
-        this.descending = desc;
-        this.next = next;
-        this.numeric = BibtexFields.isNumeric(sortField);
-    }
-
-    public EntryComparator(boolean binary, boolean desc, String field) {
-        this.binary = binary;
-        this.sortField = field;
-        this.descending = desc;
-        this.next = null;
-        this.numeric = BibtexFields.isNumeric(sortField);
-    }
-
-
-    public int compare(BibtexEntry e1, BibtexEntry e2) throws ClassCastException {
-
-    if (e1 == e2)
-        return 0;
-
-    //Util.pr("EntryComparator: "+e1+" : "+e2);
-    Object f1 = e1.getField(sortField),
-        f2 = e2.getField(sortField);
-
-    if (binary) {
-        // We just separate on set and unset fields:
-        if (f1 != null)
-            return (f2 == null) ? -1 :
-                    (next != null ? next.compare(e1, e2) : idCompare(e1, e2));
-        else
-            return (f2 == null) ? (next != null ? next.compare(e1, e2) : idCompare(e1, e2))
-                    : 1;
-    }
-
-    // If the field is author or editor, we rearrange names so they are
-    // sorted according to last name.
-    if (sortField.equals("author") || sortField.equals("editor")) {
-        if (f1 != null)
-        f1 = AuthorList.fixAuthorForAlphabetization((String)f1).toLowerCase();
-                //ImportFormatReader.fixAuthor_lastNameFirst((String)f1);
-        if (f2 != null)
-        f2 = AuthorList.fixAuthorForAlphabetization((String)f2).toLowerCase();
-                //ImportFormatReader.fixAuthor_lastNameFirst((String)f2);
-
-    } else if (sortField.equals(GUIGlobals.TYPE_HEADER)) {
-          // Sort by type.
-          f1 = e1.getType().getName();
-          f2 = e2.getType().getName();
-        }
-    else if (numeric) {
-        try {
-            Integer i1 = Integer.parseInt((String)f1);
-            Integer i2 = Integer.parseInt((String)f2);
-            // Ok, parsing was successful. Update f1 and f2:
-            f1 = i1;
-            f2 = i2;
-        } catch (NumberFormatException ex) {
-            // Parsing failed. Give up treating these as numbers.
-            // TODO: should we check which of them failed, and sort based on that?
-        }
-    }
-
-    if ((f1 == null) && (f2 == null)) return (next != null ? next.compare(e1, e2) : idCompare(e1, e2));
-	if ((f1 != null) && (f2 == null)) return -1;
-	if ((f1 == null) && (f2 != null)) return 1;
-
-	int result = 0;
-
-	//String ours = ((String)e1.getField(sortField)).toLowerCase(),
-	//    theirs = ((String)e2.getField(sortField)).toLowerCase();
-	if ((f1 instanceof Integer) && (f2 instanceof Integer)) {
-		result = -(((Integer) f1).compareTo((Integer) f2));
-	} else if (f2 instanceof Integer) {
-		Integer f1AsInteger = new Integer(f1.toString());
-		result = -((f1AsInteger).compareTo((Integer) f2));
-	} else if (f1 instanceof Integer) {
-		Integer f2AsInteger = new Integer(f2.toString());
-		result = -(((Integer) f1).compareTo(f2AsInteger));
-	} else {
-        String ours = ((String) f1).toLowerCase(),
-	    	theirs = ((String) f2).toLowerCase();
-        int comp = ours.compareTo(theirs);
-		result = -comp;
-	}
-	if (result != 0)
-	    return (descending ? result : -result); // Primary sort.
-	if (next != null)
-	    return next.compare(e1, e2); // Secondary sort if existent.
-	else {
-
-        return idCompare(e1, e2); // If still equal, we use the unique IDs.
-    }
-    }
-
-    private int idCompare(BibtexEntry b1, BibtexEntry b2) {
-    return ((b1.getId())).compareTo((b2.getId()));
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.util.Comparator;
+
+/**
+ * This implementation of Comparator takes care of most of the details of sorting BibTeX entries in JabRef.
+ * It is structured as a node in a linked list of comparators, where each node can contain a link to a
+ * new comparator that decides the ordering (by recursion) if this one can't find a difference. The next
+ * node, if any, is given at construction time, and an arbitrary number of nodes can be included.
+ * If the entries are equal by this comparator, and there is no next entry, the entries' unique IDs will
+ * decide the ordering. Consequently, this comparator can never return 0 unless the entries are the same
+ * object.
+ */
+public class EntryComparator implements Comparator<BibtexEntry> {
+
+    String sortField;
+    boolean descending, binary=false, numeric;
+    Comparator<BibtexEntry> next;
+
+    public EntryComparator(boolean binary, boolean desc, String field, Comparator<BibtexEntry> next) {
+        this.binary = binary;
+        this.sortField = field;
+        this.descending = desc;
+        this.next = next;
+        this.numeric = BibtexFields.isNumeric(sortField);
+    }
+
+    public EntryComparator(boolean binary, boolean desc, String field) {
+        this.binary = binary;
+        this.sortField = field;
+        this.descending = desc;
+        this.next = null;
+        this.numeric = BibtexFields.isNumeric(sortField);
+    }
+
+
+    public int compare(BibtexEntry e1, BibtexEntry e2) throws ClassCastException {
+
+    if (e1 == e2)
+        return 0;
+
+    //Util.pr("EntryComparator: "+e1+" : "+e2);
+    Object f1 = e1.getField(sortField),
+        f2 = e2.getField(sortField);
+
+    if (binary) {
+        // We just separate on set and unset fields:
+        if (f1 != null)
+            return (f2 == null) ? -1 :
+                    (next != null ? next.compare(e1, e2) : idCompare(e1, e2));
+        else
+            return (f2 == null) ? (next != null ? next.compare(e1, e2) : idCompare(e1, e2))
+                    : 1;
+    }
+
+    // If the field is author or editor, we rearrange names so they are
+    // sorted according to last name.
+    if (sortField.equals("author") || sortField.equals("editor")) {
+        if (f1 != null)
+        f1 = AuthorList.fixAuthorForAlphabetization((String)f1).toLowerCase();
+                //ImportFormatReader.fixAuthor_lastNameFirst((String)f1);
+        if (f2 != null)
+        f2 = AuthorList.fixAuthorForAlphabetization((String)f2).toLowerCase();
+                //ImportFormatReader.fixAuthor_lastNameFirst((String)f2);
+
+    } else if (sortField.equals(GUIGlobals.TYPE_HEADER)) {
+          // Sort by type.
+          f1 = e1.getType().getName();
+          f2 = e2.getType().getName();
+        }
+    else if (numeric) {
+        try {
+            Integer i1 = Integer.parseInt((String)f1);
+            Integer i2 = Integer.parseInt((String)f2);
+            // Ok, parsing was successful. Update f1 and f2:
+            f1 = i1;
+            f2 = i2;
+        } catch (NumberFormatException ex) {
+            // Parsing failed. Give up treating these as numbers.
+            // TODO: should we check which of them failed, and sort based on that?
+        }
+    }
+
+    if ((f1 == null) && (f2 == null)) return (next != null ? next.compare(e1, e2) : idCompare(e1, e2));
+	if ((f1 != null) && (f2 == null)) return -1;
+	if ((f1 == null) && (f2 != null)) return 1;
+
+	int result = 0;
+
+	//String ours = ((String)e1.getField(sortField)).toLowerCase(),
+	//    theirs = ((String)e2.getField(sortField)).toLowerCase();
+	if ((f1 instanceof Integer) && (f2 instanceof Integer)) {
+		result = -(((Integer) f1).compareTo((Integer) f2));
+	} else if (f2 instanceof Integer) {
+		Integer f1AsInteger = new Integer(f1.toString());
+		result = -((f1AsInteger).compareTo((Integer) f2));
+	} else if (f1 instanceof Integer) {
+		Integer f2AsInteger = new Integer(f2.toString());
+		result = -(((Integer) f1).compareTo(f2AsInteger));
+	} else {
+        String ours = ((String) f1).toLowerCase(),
+	    	theirs = ((String) f2).toLowerCase();
+        int comp = ours.compareTo(theirs);
+		result = -comp;
+	}
+	if (result != 0)
+	    return (descending ? result : -result); // Primary sort.
+	if (next != null)
+	    return next.compare(e1, e2); // Secondary sort if existent.
+	else {
+
+        return idCompare(e1, e2); // If still equal, we use the unique IDs.
+    }
+    }
+
+    private int idCompare(BibtexEntry b1, BibtexEntry b2) {
+    return ((b1.getId())).compareTo((b2.getId()));
+    }
+
+}
diff --git a/src/java/net/sf/jabref/EntryContainer.java b/src/java/net/sf/jabref/EntryContainer.java
index edf57d0..2c66cde 100644
--- a/src/java/net/sf/jabref/EntryContainer.java
+++ b/src/java/net/sf/jabref/EntryContainer.java
@@ -1,24 +1,24 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-package net.sf.jabref;
-
-/**
- * Entry containers work on a single entry, which can be asked for 
- */
-public interface EntryContainer {
-    public BibtexEntry getEntry();
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+package net.sf.jabref;
+
+/**
+ * Entry containers work on a single entry, which can be asked for 
+ */
+public interface EntryContainer {
+    public BibtexEntry getEntry();
+}
diff --git a/src/java/net/sf/jabref/EntryEditor.java b/src/java/net/sf/jabref/EntryEditor.java
index 246307c..826784e 100644
--- a/src/java/net/sf/jabref/EntryEditor.java
+++ b/src/java/net/sf/jabref/EntryEditor.java
@@ -1,1585 +1,1586 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.AWTKeyStroke;
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Insets;
-import java.awt.KeyboardFocusManager;
-import java.awt.RenderingHints;
-import java.awt.Toolkit;
-import java.awt.datatransfer.StringSelection;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DropTarget;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.FocusAdapter;
-import java.awt.event.FocusEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.VetoableChangeListener;
-import java.io.File;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.logging.Logger;
-
-import javax.swing.AbstractAction;
-import javax.swing.ActionMap;
-import javax.swing.InputMap;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JFileChooser;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JTabbedPane;
-import javax.swing.JTextArea;
-import javax.swing.JTextField;
-import javax.swing.JToolBar;
-import javax.swing.KeyStroke;
-import javax.swing.SwingUtilities;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.text.JTextComponent;
-
-import net.sf.jabref.autocompleter.AbstractAutoCompleter;
-import net.sf.jabref.export.LatexFieldFormatter;
-import net.sf.jabref.external.ExternalFilePanel;
-import net.sf.jabref.external.WriteXMPEntryEditorAction;
-import net.sf.jabref.gui.FileDialogs;
-import net.sf.jabref.gui.FileListEditor;
-import net.sf.jabref.gui.FileListTableModel;
-import net.sf.jabref.gui.VerticalLabelUI;
-import net.sf.jabref.gui.date.DatePickerButton;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.journals.JournalAbbreviations;
-import net.sf.jabref.labelPattern.LabelPatternUtil;
-import net.sf.jabref.specialfields.SpecialFieldUpdateListener;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableChangeType;
-import net.sf.jabref.undo.UndoableFieldChange;
-import net.sf.jabref.undo.UndoableKeyChange;
-import net.sf.jabref.undo.UndoableRemoveEntry;
-
-/**
- * GUI component that allows editing of the fields of a BibtexEntry (i.e. the
- * one that shows up, when you double click on an entry in the table)
- * 
- * It hosts the tabs (required, general, optional) and the buttons to the left.
- * 
- * EntryEditor also registers itself as a VetoableChangeListener, receiving
- * events whenever a field of the entry changes, enabling the text fields to
- * update themselves if the change is made from somewhere else.
- */
-public class EntryEditor extends JPanel implements VetoableChangeListener, EntryContainer {
-
-    // A reference to the entry this object works on.
-    private BibtexEntry entry;
-
-    BibtexEntryType type;
-
-    // The action concerned with closing the window.
-    CloseAction closeAction;
-
-    // The action that deletes the current entry, and closes the editor.
-    DeleteAction deleteAction = new DeleteAction();
-
-    // The action concerned with copying the BibTeX key to the clipboard.
-    CopyKeyAction copyKeyAction;
-
-    // The action concerned with copying the BibTeX key to the clipboard.
-    AbstractAction nextEntryAction = new NextEntryAction();
-
-    // Actions for switching to next/previous entry.
-    AbstractAction prevEntryAction = new PrevEntryAction();
-
-    // The action concerned with storing a field value.
-    public StoreFieldAction storeFieldAction;
-
-    // The actions concerned with switching the panels.
-    SwitchLeftAction switchLeftAction = new SwitchLeftAction();
-
-    SwitchRightAction switchRightAction = new SwitchRightAction();
-
-    // The action which generates a bibtexkey for this entry.
-    public GenerateKeyAction generateKeyAction;
-
-    public AutoSetFileAction autoLink = new AutoSetFileAction();
-
-    public AbstractAction writeXmp;
-
-    SaveDatabaseAction saveDatabaseAction = new SaveDatabaseAction();
-
-    JPanel mainPanel = new JPanel();
-
-    JPanel srcPanel = new JPanel();
-
-    EntryEditorTab genPan, optPan, reqPan, absPan;
-
-    JTextField bibtexKey;
-
-    FieldTextField tf;
-
-    JTextArea source;
-
-    JToolBar tlb;
-
-    JTabbedPane tabbed = new JTabbedPane(); // JTabbedPane.RIGHT);
-
-    JLabel lab;
-
-    TypeLabel typeLabel;
-
-    JabRefFrame frame;
-
-    BasePanel panel;
-
-    EntryEditor ths = this;
-
-    HashSet<FieldContentSelector> contentSelectors = new HashSet<FieldContentSelector>();
-
-    Logger logger = Logger.getLogger(EntryEditor.class.getName());
-
-    boolean updateSource = true; // This can be set to false to stop the source
-    boolean movingToDifferentEntry = false; // Indicates that we are about to go to the next or previous entry
-
-    List<Object> tabs = new ArrayList<Object>();
-
-    // text area from gettin updated. This is used in cases where the source
-    // couldn't be parsed, and the user is given the option to edit it.
-    boolean lastSourceAccepted = true; // This indicates whether the last
-
-    // attempt
-    // at parsing the source was successful. It is used to determine whether the
-    // dialog should close; it should stay open if the user received an error
-    // message about the source, whatever he or she chose to do about it.
-    String lastSourceStringAccepted = null; // This is used to prevent double
-
-    // fields.
-    // These values can be used to calculate the preferred height for the form.
-    // reqW starts at 1 because it needs room for the bibtex key field.
-    private int sourceIndex = -1; // The index the source panel has in tabbed.
-
-    JabRefPreferences prefs;
-
-    HelpAction helpAction;
-
-    UndoAction undoAction = new UndoAction();
-
-    RedoAction redoAction = new RedoAction();
-
-    TabListener tabListener = new TabListener();
-
-    public EntryEditor(JabRefFrame frame_, BasePanel panel_, BibtexEntry entry_) {
-
-        frame = frame_;
-        panel = panel_;
-        entry = entry_;
-        prefs = Globals.prefs;
-        type = entry.getType();
-
-        entry.addPropertyChangeListener(this);
-        entry.addPropertyChangeListener(SpecialFieldUpdateListener.getInstance());
-
-        helpAction = new HelpAction(frame.helpDiag, GUIGlobals.entryEditorHelp, "Help");
-        closeAction = new CloseAction();
-        copyKeyAction = new CopyKeyAction();
-        generateKeyAction = new GenerateKeyAction(frame);
-        storeFieldAction = new StoreFieldAction();
-        writeXmp = new WriteXMPEntryEditorAction(panel_, this);
-
-        BorderLayout bl = new BorderLayout();
-        setLayout(bl);
-        setupToolBar();
-        setupFieldPanels();
-        setupSourcePanel();
-        add(tabbed, BorderLayout.CENTER);
-        tabbed.addChangeListener(tabListener);
-        if (prefs.getBoolean("showSource") && prefs.getBoolean("defaultShowSource"))
-            tabbed.setSelectedIndex(sourceIndex);
-
-        updateAllFields();
-    }
-
-    private void setupFieldPanels() {
-        tabbed.removeAll();
-        tabs.clear();
-        String[] fields = entry.getRequiredFields();
-
-        List<String> fieldList = null;
-        if (fields != null)
-            fieldList = java.util.Arrays.asList(fields);
-        reqPan = new EntryEditorTab(frame, panel, fieldList, this, true, Globals.lang("Required fields"));
-        tabbed.addTab(Globals.lang("Required fields"), GUIGlobals.getImage("required"), reqPan
-            .getPane(), Globals.lang("Show required fields"));
-        tabs.add(reqPan);
-
-        if ((entry.getOptionalFields() != null) && (entry.getOptionalFields().length >= 1)) {
-            if (!prefs.getBoolean("biblatexMode")) {
-                optPan = new EntryEditorTab(frame, panel, java.util.Arrays.asList(entry.getOptionalFields()), this,
-                    false, Globals.lang("Optional fields"));
-                tabbed.addTab(Globals.lang("Optional fields"), GUIGlobals.getImage("optional"), optPan
-                    .getPane(), Globals.lang("Show optional fields"));
-                tabs.add(optPan);
-            }
-            else {
-                optPan = new CompressedEntryEditorTab(frame, panel,
-                        java.util.Arrays.asList(entry.getType().getPrimaryOptionalFields()), this,
-                    false, Globals.lang("Optional fields"));
-                tabbed.addTab(Globals.lang("Optional fields"), GUIGlobals.getImage("optional"), optPan
-                    .getPane(), Globals.lang("Show optional fields"));
-                tabs.add(optPan);
-                optPan = new CompressedEntryEditorTab(frame, panel,
-                        java.util.Arrays.asList(Util.getRemainder(entry.getOptionalFields(),
-                                entry.getType().getPrimaryOptionalFields())), this,
-                    false, Globals.lang("Optional fields 2"));
-                tabbed.addTab(Globals.lang("Optional fields 2"), GUIGlobals.getImage("optional"), optPan
-                    .getPane(), Globals.lang("Show optional fields"));
-                tabs.add(optPan);
-
-            }
-        }
-
-        EntryEditorTabList tabList = Globals.prefs.getEntryEditorTabList();
-        for (int i = 0; i < tabList.getTabCount(); i++) {
-            EntryEditorTab newTab = new EntryEditorTab(frame, panel, tabList.getTabFields(i), this, false,
-                tabList.getTabName(i));
-            tabbed.addTab(tabList.getTabName(i), GUIGlobals.getImage("general"), newTab.getPane());
-            tabs.add(newTab);
-        }
-
-        srcPanel.setName(Globals.lang("BibTeX source"));
-        if (Globals.prefs.getBoolean("showSource")) {
-            tabbed.addTab(Globals.lang("BibTeX source"), GUIGlobals.getImage("source"), srcPanel,
-                Globals.lang("Show/edit BibTeX source"));
-            tabs.add(srcPanel);
-        }
-        sourceIndex = tabs.size() - 1; // Set the sourceIndex variable.
-        srcPanel.setFocusCycleRoot(true);
-    }
-
-    public BibtexEntryType getType() {
-        return type;
-    }
-
-    public BibtexEntry getEntry() {
-        return entry;
-    }
-    
-    public BibtexDatabase getDatabase(){
-    	return panel.getDatabase();
-    }
-
-    private void setupToolBar() {
-        JPanel leftPan = new JPanel();
-        leftPan.setLayout(new BorderLayout());
-        tlb = new JToolBar(JToolBar.VERTICAL);
-        //tlb.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH);
-        tlb.setBorder(null);
-        tlb.setRollover(true);
-
-        tlb.setMargin(new Insets(0, 0, 0, 2));
-
-        // The toolbar carries all the key bindings that are valid for the whole
-        // window.
-        ActionMap am = tlb.getActionMap();
-        InputMap im = tlb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-
-        im.put(prefs.getKey("Close entry editor"), "close");
-        am.put("close", closeAction);
-        im.put(prefs.getKey("Entry editor, store field"), "store");
-        am.put("store", storeFieldAction);
-        im.put(prefs.getKey("Autogenerate BibTeX keys"), "generateKey");
-        am.put("generateKey", generateKeyAction);
-        im.put(prefs.getKey("Automatically link files"), "autoLink");
-        am.put("autoLink", autoLink);
-        im.put(prefs.getKey("Entry editor, previous entry"), "prev");
-        am.put("prev", prevEntryAction);
-        im.put(prefs.getKey("Entry editor, next entry"), "next");
-        am.put("next", nextEntryAction);
-        im.put(prefs.getKey("Undo"), "undo");
-        am.put("undo", undoAction);
-        im.put(prefs.getKey("Redo"), "redo");
-        am.put("redo", redoAction);
-        im.put(prefs.getKey("Help"), "help");
-        am.put("help", helpAction);
-
-        tlb.setFloatable(false);
-
-        // Add actions (and thus buttons)
-        JButton closeBut = new JButton(closeAction);
-        closeBut.setText(null);
-        closeBut.setBorder(null);
-        leftPan.add(closeBut, BorderLayout.NORTH);
-
-        // Create type-label
-        typeLabel = new TypeLabel(entry.getType().getName());
-        leftPan.add(typeLabel, BorderLayout.CENTER);
-
-        //tlb.add(typeL);
-
-        tlb.addSeparator();
-        
-        tlb.add(generateKeyAction);
-        tlb.add(autoLink);
-
-        tlb.add(writeXmp);
-
-        tlb.addSeparator();
-
-        tlb.add(deleteAction);
-        tlb.add(prevEntryAction);
-        tlb.add(nextEntryAction);
-        
-        tlb.addSeparator();
-        
-        tlb.add(helpAction);
-
-        Component[] comps = tlb.getComponents();
-
-        for (int i = 0; i < comps.length; i++)
-            ((JComponent) comps[i]).setOpaque(false);
-
-        leftPan.add(tlb, BorderLayout.SOUTH);
-        add(leftPan, BorderLayout.WEST);
-    }
-
-    /**
-     * Rebuild the field tabs. This is called e.g. when a new content selector
-     * has been added.
-     */
-    public void rebuildPanels() {
-        // Remove change listener, because the rebuilding causes meaningless
-        // events and trouble:
-        tabbed.removeChangeListener(tabListener);
-        
-        setupFieldPanels();
-        // Add the change listener again:
-        tabbed.addChangeListener(tabListener);
-        revalidate();
-        repaint();
-    }
-
-    /**
-     * getExtra checks the field name against BibtexFields.getFieldExtras(name).
-     * If the name has an entry, the proper component to be shown is created and
-     * returned. Otherwise, null is returned. In addition, e.g. listeners can be
-     * added to the field editor, even if no component is returned.
-     * 
-     * @param string
-     *            Field name
-     * @return Component to show, or null if none.
-     */
-    public JComponent getExtra(String string, final FieldEditor ed) {
-
-        // fieldName and parameter string identically ????
-        final String fieldName = ed.getFieldName();
-
-        String s = BibtexFields.getFieldExtras(string);
-
-        // timestamp or a other field with datepicker command
-        if ((fieldName.equals(Globals.prefs.get("timeStampField")))
-            || ((s != null) && s.equals("datepicker"))) {
-            // double click AND datefield => insert the current date (today)
-            ((JTextArea) ed).addMouseListener(new MouseAdapter() {
-                public void mouseClicked(MouseEvent e) {
-                    if (e.getClickCount() == 2) // double click
-                    {
-                        String date = Util.easyDateFormat();
-                        ed.setText(date);
-                    }
-                }
-            });
-
-            // insert a datepicker, if the extras field contains this command
-            if ((s != null) && s.equals("datepicker")) {
-                DatePickerButton datePicker = new DatePickerButton(ed);
-                return datePicker.getDatePicker();
-            }
-        }
-
-        if ((s != null) && s.equals("external")) {
-
-            // Add external viewer listener for "pdf" and "url" fields.
-            ((JComponent) ed).addMouseListener(new ExternalViewerListener());
-
-            return null;
-        } else if ((s != null) && s.equals("journalNames")) {
-            // Add controls for switching between abbreviated and full journal
-            // names.
-            // If this field also has a FieldContentSelector, we need to combine
-            // these.
-            JPanel controls = new JPanel();
-            controls.setLayout(new BorderLayout());
-            if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + ed.getFieldName()) != null) {
-                FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, ed,
-                    panel.metaData, storeFieldAction, false, ", ");
-                contentSelectors.add(ws);
-                controls.add(ws, BorderLayout.NORTH);
-            }
-            controls.add(JournalAbbreviations.getNameSwitcher(this, ed, panel.undoManager),
-                BorderLayout.SOUTH);
-            return controls;
-        } else if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + ed.getFieldName()) != null) {
-            FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, ed,
-                panel.metaData, storeFieldAction, false,
-                ((ed.getFieldName().equals("author") || ed.getFieldName().equals("editor")) ? " and " : ", "));
-            contentSelectors.add(ws);
-
-            return ws;
-        } else if ((s != null) && s.equals("browse")) {
-            JButton but = new JButton(Globals.lang("Browse"));
-            ((JComponent) ed).addMouseListener(new ExternalViewerListener());
-
-            // but.setBackground(GUIGlobals.lightGray);
-            but.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    String dir = ed.getText();
-
-                    if (dir.equals(""))
-                        dir = prefs.get(fieldName + Globals.FILETYPE_PREFS_EXT, "");
-
-                    String chosenFile = FileDialogs.getNewFile(frame, new File(dir), "." + fieldName,
-                        JFileChooser.OPEN_DIALOG, false);
-
-                    if (chosenFile != null) {
-                        File newFile = new File(chosenFile); // chooser.getSelectedFile();
-                        ed.setText(newFile.getPath());
-                        prefs.put(fieldName + Globals.FILETYPE_PREFS_EXT, newFile.getPath());
-                        updateField(ed);
-                    }
-                }
-            });
-
-            return but;
-            // } else if ((s != null) && s.equals("browsePdf")) {
-        } else if ((s != null) && (s.equals("browseDoc") || s.equals("browseDocZip"))) {
-
-            final String ext = "." + fieldName.toLowerCase();
-            final OpenFileFilter off;
-            if (s.equals("browseDocZip"))
-                off = new OpenFileFilter(new String[] { ext, ext + ".gz", ext + ".bz2" });
-            else
-                off = new OpenFileFilter(new String[] { ext });
-
-            ExternalFilePanel pan = new ExternalFilePanel(frame, panel.metaData(), this, fieldName,
-                off, ed);
-            return pan;
-        }
-        /*
-         * else if ((s != null) && s.equals("browsePs")) { ExternalFilePanel pan =
-         * new ExternalFilePanel(frame, this, "ps", off, ed); return pan; }
-         */
-        else if ((s != null) && s.equals("url")) {
-            ((JComponent) ed).setDropTarget(new DropTarget((Component) ed,
-                DnDConstants.ACTION_NONE, new SimpleUrlDragDrop(ed, storeFieldAction)));
-
-            return null;
-        }
-
-        else if ((s != null) && (s.equals("setOwner"))) {
-            JButton button = new JButton(Globals.lang("Auto"));
-            button.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent actionEvent) {
-                    ed.setText(Globals.prefs.get("defaultOwner"));
-                    storeFieldAction.actionPerformed(new ActionEvent(ed, 0, ""));
-                }
-            });
-            return button;
-        }
-        else
-            return null;
-    }
-
-    private void setupSourcePanel() {
-        source = new JTextAreaWithHighlighting();
-        frame.getSearchManager().addSearchListener((SearchTextListener)source);
-        
-        /* {
-            private boolean antialias = Globals.prefs.getBoolean("antialias");
-
-            public void paint(Graphics g) {
-                Graphics2D g2 = (Graphics2D) g;
-                if (antialias)
-                    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
-                        RenderingHints.VALUE_ANTIALIAS_ON);
-                super.paint(g2);
-            }
-        };*/
-
-        //DefaultFormBuilder builder = new DefaultFormBuilder
-        //        (srcPanel, new FormLayout( "fill:pref:grow", "fill:pref:grow"));
-        source.setEditable(true); // prefs.getBoolean("enableSourceEditing"));
-        source.setLineWrap(true);
-        source.setTabSize(GUIGlobals.INDENT);
-        source.addFocusListener(new FieldEditorFocusListener());
-        // Add the global focus listener, so a menu item can see if this field
-        // was focused when
-        // an action was called.
-        source.addFocusListener(Globals.focusListener);
-        source.setFont(new Font("Monospaced", Font.PLAIN, Globals.prefs.getInt("fontSize")));
-        setupJTextComponent(source);
-        updateSource();
-
-        JScrollPane sp = new JScrollPane(source, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-            JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-        //builder.append(sp);
-        
-        srcPanel.setLayout(new BorderLayout());
-        srcPanel.add(sp, BorderLayout.CENTER);
-
-    }
-
-    public void updateSource() {
-        if (updateSource) {
-            StringWriter sw = new StringWriter(200);
-
-            try {
-                LatexFieldFormatter formatter = new LatexFieldFormatter();
-                formatter.setNeverFailOnHashes(true);
-                entry.write(sw, formatter, false);
-
-                String srcString = sw.getBuffer().toString();
-                source.setText(srcString);
-                lastSourceStringAccepted = srcString;
-
-                //////////////////////////////////////////////////////////
-                // Set the current Entry to be selected.
-                // Fixes the bug of losing selection after, e.g.
-                // an autogeneration of a BibTeX key.
-                // - ILC (16/02/2010) -
-                //////////////////////////////////////////////////////////
-                SwingUtilities.invokeLater(new Runnable() {
-                  public void run() {
-                    final int row = panel.mainTable.findEntry(entry);
-                    if (row >= 0) {
-                        if (panel.mainTable.getSelectedRowCount() == 0)
-                            panel.mainTable.setRowSelectionInterval(row, row);
-                        //scrollTo(row);
-                        panel.mainTable.ensureVisible(row);
-                    }
-                  }
-                });
-                //////////////////////////////////////////////////////////
-
-            } catch (IOException ex) {
-                source.setText(ex.getMessage() + "\n\n" +
-                                        Globals.lang("Correct the entry, and "
-                    + "reopen editor to display/edit source."));
-                source.setEditable(false);
-            }
-
-
-        }
-    }
-
-    /**
-     * NOTE: This method is only used for the source panel, not for the
-     * other tabs. Look at EntryEditorTab for the setup of text components
-     * in the other tabs.
-     */
-    public void setupJTextComponent(JTextComponent ta) {
-
-
-        // Set up key bindings and focus listener for the FieldEditor.
-        InputMap im = ta.getInputMap(JComponent.WHEN_FOCUSED);
-        ActionMap am = ta.getActionMap();
-
-        // im.put(KeyStroke.getKeyStroke(GUIGlobals.closeKey), "close");
-        // am.put("close", closeAction);
-        im.put(prefs.getKey("Entry editor, store field"), "store");
-        am.put("store", storeFieldAction);
-
-        im.put(prefs.getKey("Entry editor, next panel"), "right");
-        im.put(prefs.getKey("Entry editor, next panel 2"), "right");
-        am.put("right", switchRightAction);
-
-        im.put(prefs.getKey("Entry editor, previous panel"), "left");
-        im.put(prefs.getKey("Entry editor, previous panel 2"), "left");
-        am.put("left", switchLeftAction);
-
-        im.put(prefs.getKey("Help"), "help");
-        am.put("help", helpAction);
-        im.put(prefs.getKey("Save database"), "save");
-        am.put("save", saveDatabaseAction);
-
-        im.put(Globals.prefs.getKey("Next tab"), "nexttab");
-        am.put("nexttab", frame.nextTab);
-        im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
-        am.put("prevtab", frame.prevTab);
-        try {
-            HashSet<AWTKeyStroke> keys = new HashSet<AWTKeyStroke>(ta
-                .getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
-            keys.clear();
-            keys.add(AWTKeyStroke.getAWTKeyStroke("pressed TAB"));
-            ta.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, keys);
-            keys = new HashSet<AWTKeyStroke>(ta
-                .getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
-            keys.clear();
-            keys.add(KeyStroke.getKeyStroke("shift pressed TAB"));
-            ta.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, keys);
-        } catch (Throwable t) {
-            System.err.println(t);
-        }
-
-        ta.addFocusListener(new FieldListener());
-    }
-
-    public void requestFocus() {
-        activateVisible();
-    }
-
-    private void activateVisible() {
-        Object activeTab = tabs.get(tabbed.getSelectedIndex());
-
-        if (activeTab instanceof EntryEditorTab)
-            ((EntryEditorTab) activeTab).activate();
-        else
-            new FocusRequester(source);
-        // ((JComponent)activeTab).requestFocus();
-    }
-
-    /**
-     * Reports the enabled status of the editor, as set by setEnabled()
-     */
-    public boolean isEnabled() {
-        return source.isEnabled();
-    }
-
-    /**
-     * Sets the enabled status of all text fields of the entry editor.
-     */
-    public void setEnabled(boolean enabled) {
-        for (Iterator<Object> i = tabs.iterator(); i.hasNext();) {
-            Object o = i.next();
-            if (o instanceof EntryEditorTab) {
-                ((EntryEditorTab) o).setEnabled(enabled);
-            }
-        }
-        source.setEnabled(enabled);
-
-    }
-
-    /**
-     * Centers the given row, and highlights it.
-     * 
-     * @param row
-     *            an <code>int</code> value
-     */
-    private void scrollTo(int row) {
-        movingToDifferentEntry = true;
-        panel.mainTable.setRowSelectionInterval(row, row);
-        panel.mainTable.ensureVisible(row);
-    }
-
-    /**
-     * Makes sure the current edit is stored.
-     */
-    public void storeCurrentEdit() {
-        Component comp = Globals.focusListener.getFocused();
-        if ((comp == source) || ((comp instanceof FieldEditor) && this.isAncestorOf(comp))) {
-            if (comp instanceof FieldEditor)
-                ((FieldEditor)comp).clearAutoCompleteSuggestion();
-            storeFieldAction.actionPerformed(new ActionEvent(comp, 0, ""));
-        }
-    }
-
-    /**
-     * Returns the index of the active (visible) panel.
-     * 
-     * @return an <code>int</code> value
-     */
-    public int getVisiblePanel() {
-        return tabbed.getSelectedIndex();
-    }
-
-    /** Returns the name of the currently selected component. */
-    public String getVisiblePanelName() {
-        return tabbed.getSelectedComponent().getName();
-    }
-
-    /**
-     * Sets the panel with the given index visible.
-     * 
-     * @param i
-     *            an <code>int</code> value
-     */
-    public void setVisiblePanel(int i) {
-        tabbed.setSelectedIndex(Math.min(i, tabbed.getTabCount() - 1));
-    }
-
-    public void setVisiblePanel(String name) {
-        for (int i = 0; i < tabbed.getTabCount(); ++i) {
-            if (name.equals(tabbed.getComponent(i).getName())) {
-                tabbed.setSelectedIndex(i);
-                return;
-            }
-        }
-        if (tabbed.getTabCount() > 0)
-            tabbed.setSelectedIndex(0);
-    }
-
-    /**
-     * Updates this editor to show the given entry, regardless of type
-     * correspondence.
-     * 
-     * @param be
-     *            a <code>BibtexEntry</code> value
-     */
-    public synchronized void switchTo(BibtexEntry be) {
-        if (entry == be) {
-            /**
-             * Even if the editor is already showing the same entry, update
-             * the source panel. I'm not sure if this is the correct place to
-             * do this, but in some cases the source panel will otherwise not
-             * be up-to-date when an entry is changed while the entry editor
-             * is existing, set to the same entry, but not visible.
-             */
-            updateSource();
-            return;
-        }
-        storeCurrentEdit();
-
-        // Remove this instance as property listener for the entry:
-        entry.removePropertyChangeListener(this);
-
-        // Register as property listener for the new entry:
-        be.addPropertyChangeListener(this);
-
-        entry = be;
-
-        updateAllFields();
-        validateAllFields();
-        updateSource();
-        panel.newEntryShowing(be);
-
-    }
-
-    /**
-     * Returns false if the contents of the source panel has not been validated,
-     * true othervise.
-     */
-    public boolean lastSourceAccepted() {
-        if (tabbed.getSelectedComponent() == srcPanel)
-            storeSource(false);
-
-        return lastSourceAccepted;
-    }
-
-    /*
-     * public boolean storeSourceIfNeeded() { if (tabbed.getSelectedIndex() ==
-     * sourceIndex) return storeSource(); else return true; }
-     */
-    public boolean storeSource(boolean showError) {
-        // Store edited bibtex code.
-        BibtexParser bp = new BibtexParser(new java.io.StringReader(source.getText()));
-
-        try {
-            BibtexDatabase db = bp.parse().getDatabase();
-
-            if (db.getEntryCount() > 1)
-                throw new Exception("More than one entry found.");
-
-            if (db.getEntryCount() < 1)
-                throw new Exception("No entries found.");
-
-            NamedCompound compound = new NamedCompound(Globals.lang("source edit"));
-            BibtexEntry nu = db.getEntryById(db.getKeySet().iterator().next());
-            String id = entry.getId();
-            String
-            // oldKey = entry.getCiteKey(),
-            newKey = nu.getCiteKey();
-            boolean anyChanged = false;
-            boolean changedType = false;
-            boolean duplicateWarning = false;
-            boolean emptyWarning = newKey == null || newKey.equals("");
-
-            if (panel.database.setCiteKeyForEntry(id, newKey)) {
-                duplicateWarning = true;
-
-                // First, remove fields that the user have removed.
-            }
-
-            for (String field : entry.getAllFields()){
-                if (BibtexFields.isDisplayableField(field.toString())) {
-                    if (nu.getField(field.toString()) == null) {
-                        compound.addEdit(new UndoableFieldChange(entry, field.toString(), entry
-                            .getField(field.toString()), null));
-                        entry.clearField(field.toString());
-                        anyChanged = true;
-                    }
-                }
-            }
-
-            // Then set all fields that have been set by the user.
-            for (String field : nu.getAllFields()){
-                if (entry.getField(field.toString()) != nu.getField(field.toString())) {
-                    String toSet = nu.getField(field.toString());
-
-                    // Test if the field is legally set.
-                    (new LatexFieldFormatter()).format(toSet, field.toString());
-
-                    compound.addEdit(new UndoableFieldChange(entry, field.toString(), entry
-                        .getField(field.toString()), toSet));
-                    entry.setField(field.toString(), toSet);
-                    anyChanged = true;
-                }
-            }
-
-            // See if the user has changed the entry type:
-            if (nu.getType() != entry.getType()) {
-                compound.addEdit(new UndoableChangeType(entry,
-                      entry.getType(), nu.getType()));
-                entry.setType(nu.getType());
-                anyChanged = true;
-                changedType = true;
-            }
-            compound.end();
-
-            if (!anyChanged)
-                return true;
-
-            panel.undoManager.addEdit(compound);
-
-            /*
-             * if (((oldKey == null) && (newKey != null)) || ((oldKey != null) &&
-             * (newKey == null)) || ((oldKey != null) && (newKey != null) &&
-             * !oldKey.equals(newKey))) { }
-             */
-            if (duplicateWarning) {
-                warnDuplicateBibtexkey();
-            } else if (emptyWarning && showError) {
-                warnEmptyBibtexkey();
-            } else {
-                panel.output(Globals.lang("Stored entry") + ".");
-            }
-
-            lastSourceStringAccepted = source.getText();
-            if (!changedType) {
-                updateAllFields();
-                lastSourceAccepted = true;
-                updateSource = true;
-            }
-            else {
-                panel.updateEntryEditorIfShowing();
-            }
-            // TODO: does updating work properly after source stored?
-            // panel.tableModel.remap();
-            // panel.entryTable.repaint();
-            // panel.refreshTable();
-            panel.markBaseChanged();
-///////////////////////////////////////////////////////
-            SwingUtilities.invokeLater(new Runnable() {
-                public void run() {
-                    final int row = panel.mainTable.findEntry(entry);
-                    if (row >= 0) {
-                        //if (panel.mainTable.getSelectedRowCount() == 0)
-                        //    panel.mainTable.setRowSelectionInterval(row, row);
-                        //scrollTo(row);
-                        panel.mainTable.ensureVisible(row);
-                    }
-                }
-            });
-            
-            return true;
-        } catch (Throwable ex) {
-            // ex.printStackTrace();
-            // The source couldn't be parsed, so the user is given an
-            // error message, and the choice to keep or revert the contents
-            // of the source text field.
-            updateSource = false;
-            lastSourceAccepted = false;
-            tabbed.setSelectedComponent(srcPanel);
-
-            if (showError) {
-                Object[] options = { Globals.lang("Edit"),
-                    Globals.lang("Revert to original source") };
-
-                int answer = JOptionPane.showOptionDialog(frame, Globals.lang("Error") + ": " + ex.getMessage(),
-                    Globals.lang("Problem with parsing entry"), JOptionPane.YES_NO_OPTION,
-                    JOptionPane.ERROR_MESSAGE, null, options, options[0]);
-
-                if (answer != 0) {
-                    updateSource = true;
-                    updateSource();
-                }
-            }
-
-            return false;
-        }
-    }
-
-    public void setField(String fieldName, String newFieldData) {
-
-        for (Iterator<Object> i = tabs.iterator(); i.hasNext();) {
-            Object o = i.next();
-            if (o instanceof EntryEditorTab) {
-                ((EntryEditorTab) o).updateField(fieldName, newFieldData);
-            }
-        }
-
-    }
-
-    /**
-     * Sets all the text areas according to the shown entry.
-     */
-    public void updateAllFields() {
-        for (Iterator<Object> i = tabs.iterator(); i.hasNext();) {
-            Object o = i.next();
-            if (o instanceof EntryEditorTab) {
-                ((EntryEditorTab) o).setEntry(entry);
-            }
-        }
-    }
-
-    /**
-     * Removes the "invalid field" color from all text areas.
-     */
-    public void validateAllFields() {
-        for (Iterator<Object> i = tabs.iterator(); i.hasNext();) {
-            Object o = i.next();
-            if (o instanceof EntryEditorTab) {
-                ((EntryEditorTab) o).validateAllFields();
-            }
-        }
-    }
-
-    public void updateAllContentSelectors() {
-        if (contentSelectors.size() > 0) {
-            for (Iterator<FieldContentSelector> i = contentSelectors.iterator(); i.hasNext();)
-                i.next().rebuildComboBox();
-        }
-    }
-
-    /**
-     * Update the JTextArea when a field has changed.
-     * 
-     * @see java.beans.VetoableChangeListener#vetoableChange(java.beans.PropertyChangeEvent)
-     */
-    public void vetoableChange(PropertyChangeEvent e) {
-        String newValue = ((e.getNewValue() != null) ? e.getNewValue().toString() : "");
-        setField(e.getPropertyName(), newValue);
-    }
-
-    public void updateField(final Object source) {
-        storeFieldAction.actionPerformed(new ActionEvent(source, 0, ""));
-    }
-
-
-    public void setMovingToDifferentEntry() {
-        movingToDifferentEntry = true;
-    }
-
-    private class TypeLabel extends JLabel {
-        public TypeLabel(String type) {
-            super(type+" ");
-            setUI(new VerticalLabelUI(false));
-            setForeground(GUIGlobals.entryEditorLabelColor);
-            setHorizontalAlignment(RIGHT);
-            setFont(GUIGlobals.typeNameFont);
-            addMouseListener(new MouseAdapter() {
-                public void mouseClicked(MouseEvent e) {
-                    boolean ctrlClick = prefs.getBoolean("ctrlClick");
-
-                    if ((e.getButton() == MouseEvent.BUTTON3)
-                        || (ctrlClick && (e.getButton() == MouseEvent.BUTTON1) && e.isControlDown())) {
-                        JPopupMenu typeMenu = new JPopupMenu();
-
-                        // typeMenu.addSeparator();
-                        for (String s: BibtexEntryType.ALL_TYPES.keySet())
-                            typeMenu.add(new ChangeTypeAction(BibtexEntryType.getType(s), panel));
-
-                        typeMenu.show(ths, e.getX(), e.getY());
-                    }
-                }
-            });
-        }
-
-        public void paintComponent(Graphics g) {
-            Graphics2D g2 = (Graphics2D) g;
-            //g2.setColor(GUIGlobals.entryEditorLabelColor);
-            //g2.setFont(GUIGlobals.typeNameFont);
-            //FontMetrics fm = g2.getFontMetrics();
-            //int width = fm.stringWidth(label);
-            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-            super.paintComponent(g2);
-            //g2.rotate(-Math.PI / 2, 0, 0);
-            //g2.drawString(label, -width - 7, 28);
-        }
-    }
-
-    class FieldListener extends FocusAdapter {
-        /*
-         * Focus listener that fires the storeFieldAction when a FieldTextArea
-         * loses focus.
-         */
-        public void focusGained(FocusEvent e) {
-        }
-
-        public void focusLost(FocusEvent e) {
-            // Util.pr("Lost focus "+e.getSource().toString().substring(0,30));
-            if (!e.isTemporary())
-                updateField(e.getSource());
-        }
-    }
-
-    class TabListener implements ChangeListener {
-        public void stateChanged(ChangeEvent e) {
-
-            SwingUtilities.invokeLater(new Runnable() {
-                public void run() {
-                    activateVisible();
-                }
-            });
-
-            // After the initial event train has finished, we tell the editor
-            // tab to update all
-            // its fields. This makes sure they are updated even if the tab we
-            // just left contained one
-            // or more of the same fields as this one:
-            SwingUtilities.invokeLater(new Runnable() {
-                public void run() {
-                    Object activeTab = tabs.get(tabbed.getSelectedIndex());
-                    if (activeTab instanceof EntryEditorTab)
-                        ((EntryEditorTab) activeTab).updateAll();
-                }
-            });
-
-        }
-    }
-
-    class DeleteAction extends AbstractAction {
-        public DeleteAction() {
-            super(Globals.lang("Delete"), GUIGlobals.getImage("delete"));
-            putValue(SHORT_DESCRIPTION, Globals.lang("Delete entry"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            // Show confirmation dialog if not disabled:
-            boolean goOn = panel.showDeleteConfirmationDialog(1);
-
-            if (!goOn)
-                return;
-
-            panel.entryEditorClosing(EntryEditor.this);
-            panel.database.removeEntry(entry.getId());
-            panel.markBaseChanged();
-            panel.undoManager.addEdit(new UndoableRemoveEntry(panel.database, entry, panel));
-            panel.output(Globals.lang("Deleted") + " " + Globals.lang("entry"));
-        }
-    }
-
-    class CloseAction extends AbstractAction {
-        public CloseAction() {
-            super(Globals.lang("Close window"), GUIGlobals.getImage("close"));
-            putValue(SHORT_DESCRIPTION, Globals.lang("Close window"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            if (tabbed.getSelectedComponent() == srcPanel) {
-                updateField(source);
-                if (lastSourceAccepted)
-                    panel.entryEditorClosing(EntryEditor.this);
-            } else
-                panel.entryEditorClosing(EntryEditor.this);
-        }
-    }
-
-    class CopyKeyAction extends AbstractAction {
-        public CopyKeyAction() {
-            super("Copy BibTeX key to clipboard");
-            putValue(SHORT_DESCRIPTION, "Copy BibTeX key to clipboard (Ctrl-K)");
-            // putValue(MNEMONIC_KEY, GUIGlobals.copyKeyCode);
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            String s = (entry.getField(BibtexFields.KEY_FIELD));
-            StringSelection ss = new StringSelection(s);
-
-            if (s != null)
-                Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, ss);
-        }
-    }
-
-    public class StoreFieldAction extends AbstractAction {
-        public StoreFieldAction() {
-            super("Store field value");
-            putValue(SHORT_DESCRIPTION, "Store field value");
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            boolean movingAway = movingToDifferentEntry;
-            movingToDifferentEntry = false;
-
-            if (e.getSource() instanceof FieldTextField) {
-                // Storage from bibtex key field.
-                FieldTextField fe = (FieldTextField) e.getSource();
-                String oldValue = entry.getCiteKey();
-                String newValue = fe.getText();
-
-                if (newValue.equals(""))
-                    newValue = null;
-
-                if (((oldValue == null) && (newValue == null))
-                    || ((oldValue != null) && (newValue != null) && oldValue.equals(newValue)))
-                    return; // No change.
-
-                // Make sure the key is legal:
-                String cleaned = Util.checkLegalKey(newValue);
-                if ((cleaned != null) && !cleaned.equals(newValue)) {
-                    JOptionPane.showMessageDialog(frame, Globals.lang("Invalid BibTeX key"),
-                        Globals.lang("Error setting field"), JOptionPane.ERROR_MESSAGE);
-                    fe.setInvalidBackgroundColor();
-                    return;
-                } else {
-                    fe.setValidBackgroundColor();
-                }
-
-                boolean isDuplicate = panel.database.setCiteKeyForEntry(entry.getId(), newValue);
-
-                if (newValue != null) {
-                    if (isDuplicate)
-                        warnDuplicateBibtexkey();
-                    else
-                        panel.output(Globals.lang("BibTeX key is unique."));
-                } else { // key is null/empty
-                    warnEmptyBibtexkey();
-                }
-
-                // Add an UndoableKeyChange to the baseframe's undoManager.
-                panel.undoManager.addEdit(new UndoableKeyChange(panel.database, entry.getId(),
-                    oldValue, newValue));
-
-                if ((newValue != null) && (newValue.length() > 0))
-                    // fe.setLabelColor(GUIGlobals.entryEditorLabelColor);
-                    fe.setValidBackgroundColor();
-                else
-                    // fe.setLabelColor(GUIGlobals.nullFieldColor);
-                    fe.setValidBackgroundColor();
-
-                if (fe.getTextComponent().hasFocus())
-                    fe.setActiveBackgroundColor();
-                updateSource();
-                panel.markBaseChanged();
-            }
-            else if (e.getSource() instanceof FieldEditor) {
-                String toSet = null;
-                FieldEditor fe = (FieldEditor) e.getSource();
-                boolean set;
-                // Trim the whitespace off this value
-                String currentText = fe.getText();
-                String trim = currentText.trim();
-                if (trim.length() > 0) {
-                    toSet = trim;
-                }
-
-                // We check if the field has changed, since we don't want to
-                // mark the base as changed unless we have a real change.
-                if (toSet == null) {
-                    if (entry.getField(fe.getFieldName()) == null)
-                        set = false;
-                    else
-                        set = true;
-                } else {
-                    if ((entry.getField(fe.getFieldName()) != null)
-                        && toSet.equals(entry.getField(fe.getFieldName()).toString()))
-                        set = false;
-                    else
-                        set = true;
-                }
-
-                if (set) {
-                    try {
-                        // The following statement attempts to write the
-                        // new contents into a StringWriter, and this will
-                        // cause an IOException if the field is not
-                        // properly formatted. If that happens, the field
-                        // is not stored and the textarea turns red.
-                        if (toSet != null)
-                            (new LatexFieldFormatter()).format(toSet, fe.getFieldName());
-
-                        String oldValue = entry.getField(fe.getFieldName());
-
-                        if (toSet != null)
-                            entry.setField(fe.getFieldName(), toSet);
-                        else
-                            entry.clearField(fe.getFieldName());
-
-                        if ((toSet != null) && (toSet.length() > 0))
-                            // fe.setLabelColor(GUIGlobals.entryEditorLabelColor);
-                            fe.setValidBackgroundColor();
-                        else
-                            // fe.setLabelColor(GUIGlobals.nullFieldColor);
-                            fe.setValidBackgroundColor();
-
-                        // See if we need to update an AutoCompleter instance:
-                        AbstractAutoCompleter aComp = panel.getAutoCompleter(fe.getFieldName());
-                        if (aComp != null)
-                            aComp.addBibtexEntry(entry);
-
-                        // Add an UndoableFieldChange to the baseframe's
-                        // undoManager.
-                        panel.undoManager.addEdit(new UndoableFieldChange(entry, fe.getFieldName(),
-                            oldValue, toSet));
-                        updateSource();
-                        panel.markBaseChanged();
-
-                    } catch (IllegalArgumentException ex) {
-                        JOptionPane.showMessageDialog(frame, Globals.lang("Error") + ": " + ex.getMessage(), Globals
-                            .lang("Error setting field"), JOptionPane.ERROR_MESSAGE);
-                        fe.setInvalidBackgroundColor();
-                    }
-                } else {
-                    // set == false
-                    // We set the field and label color.
-                    fe.setValidBackgroundColor();
-                }
-                if (fe.getTextComponent().hasFocus())
-                    fe.setBackground(GUIGlobals.activeEditor);
-            } else if ((source.isEditable())
-                && (!source.getText().equals(lastSourceStringAccepted))) {
-                boolean accepted = storeSource(true);
-
-                if (accepted) {
-                }
-            }
-////////////////////////////////////
-            // Make sure we scroll to the entry if it moved in the table.
-            // Should only be done if this editor is currently showing:
-            //System.out.println(getType().getName()+": movingAway="+movingAway+", isShowing="+isShowing());
-            if (!movingAway && isShowing()) {
-                SwingUtilities.invokeLater(new Runnable() {
-                    public void run() {
-                        final int row = panel.mainTable.findEntry(entry);
-                        if (row >= 0) {
-                            //if (panel.mainTable.getSelectedRowCount() == 0)
-                            //    panel.mainTable.setRowSelectionInterval(row, row);
-                            //scrollTo(row);
-                            panel.mainTable.ensureVisible(row);
-                        }
-                    }
-                });
-            }
-        }
-    }
-
-    class SwitchLeftAction extends AbstractAction {
-        public SwitchLeftAction() {
-            super("Switch to the panel to the left");
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            // System.out.println("switch left");
-            int i = tabbed.getSelectedIndex();
-            tabbed.setSelectedIndex(((i > 0) ? (i - 1) : (tabbed.getTabCount() - 1)));
-
-            activateVisible();
-        }
-    }
-
-    class SwitchRightAction extends AbstractAction {
-        public SwitchRightAction() {
-            super("Switch to the panel to the right");
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            // System.out.println("switch right");
-            int i = tabbed.getSelectedIndex();
-            tabbed.setSelectedIndex((i < (tabbed.getTabCount() - 1)) ? (i + 1) : 0);
-            activateVisible();
-
-        }
-    }
-
-    class NextEntryAction extends AbstractAction {
-        public NextEntryAction() {
-            super(Globals.lang("Next entry"), GUIGlobals.getImage("down"));
-
-            putValue(SHORT_DESCRIPTION, Globals.lang("Next entry"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-
-            int thisRow = panel.mainTable.findEntry(entry);
-            int newRow = -1;
-
-            if ((thisRow + 1) < panel.database.getEntryCount())
-                newRow = thisRow + 1;
-            else if (thisRow > 0)
-                newRow = 0;
-            else
-                return; // newRow is still -1, so we can assume the database has
-                        // only one entry.
-
-            scrollTo(newRow);
-            panel.mainTable.setRowSelectionInterval(newRow, newRow);
-
-        }
-    }
-
-    class PrevEntryAction extends AbstractAction {
-        public PrevEntryAction() {
-            super(Globals.lang("Previous entry"), GUIGlobals.getImage("up"));
-
-            putValue(SHORT_DESCRIPTION, Globals.lang("Previous entry"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            int thisRow = panel.mainTable.findEntry(entry);
-            int newRow = -1;
-
-            if ((thisRow - 1) >= 0)
-                newRow = thisRow - 1;
-            else if (thisRow != (panel.database.getEntryCount() - 1))
-                newRow = panel.database.getEntryCount() - 1;
-            else
-                return; // newRow is still -1, so we can assume the database has
-                        // only one entry.
-            // id = panel.tableModel.getIdForRow(newRow);
-            // switchTo(id);
-
-            scrollTo(newRow);
-            panel.mainTable.setRowSelectionInterval(newRow, newRow);
-
-        }
-    }
-
-    class GenerateKeyAction extends AbstractAction {
-        JabRefFrame parent;
-
-        BibtexEntry selectedEntry;
-
-        public GenerateKeyAction(JabRefFrame parentFrame) {
-            super(Globals.lang("Generate BibTeX key"), GUIGlobals.getImage("makeKey"));
-            parent = parentFrame;
-
-            // selectedEntry = newEntry ;
-            putValue(SHORT_DESCRIPTION, Globals.lang("Generate BibTeX key"));
-
-            // putValue(MNEMONIC_KEY, GUIGlobals.showGenKeyCode);
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            // 1. get Bitexentry for selected index (already have)
-            // 2. run the LabelMaker by it
-            try {
-                // Store the current edit in case this action is called during the
-                // editing of a field:
-                storeCurrentEdit();
-
-                // this updates the table automatically, on close, but not
-                // within the tab
-                Object oldValue = entry.getField(BibtexFields.KEY_FIELD);
-
-                if (oldValue != null) {
-                   if (Globals.prefs.getBoolean("avoidOverwritingKey")) {
-                       panel.output(Globals.lang("Not overwriting existing key. To change this setting, open Options -> Prefererences -> BibTeX key generator"));
-                       return;
-                   }
-                   else if (Globals.prefs.getBoolean("warnBeforeOverwritingKey")) {
-                       CheckBoxMessage cbm = new CheckBoxMessage(Globals.lang("The current BibTeX key will be overwritten. Continue?"),
-                               Globals.lang("Disable this confirmation dialog"), false);
-                       int answer = JOptionPane.showConfirmDialog(frame, cbm, Globals.lang("Overwrite key"),
-                               JOptionPane.YES_NO_OPTION);
-                       if (cbm.isSelected())
-                           Globals.prefs.putBoolean("warnBeforeOverwritingKey", false);
-                       if (answer == JOptionPane.NO_OPTION) {
-                           // Ok, break off the operation.
-                           return;
-                       }
-                   }
-                }
-
-                // entry = frame.labelMaker.applyRule(entry, panel.database) ;
-                LabelPatternUtil.makeLabel(panel.metaData, panel.database, entry);
-
-                // Store undo information:
-                panel.undoManager.addEdit(new UndoableKeyChange(panel.database, entry.getId(),
-                    (String) oldValue, entry.getField(BibtexFields.KEY_FIELD)));
-
-                // here we update the field
-                String bibtexKeyData = entry.getField(BibtexFields.KEY_FIELD);
-
-                // set the field named for "bibtexkey"
-                setField(BibtexFields.KEY_FIELD, bibtexKeyData);
-                updateSource();
-                panel.markBaseChanged();
-            } catch (Throwable t) {
-                System.err.println("error setting key: " + t);
-            }
-        }
-    }
-
-    class UndoAction extends AbstractAction {
-        public UndoAction() {
-            super("Undo", GUIGlobals.getImage("undo"));
-            putValue(SHORT_DESCRIPTION, "Undo");
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            try {
-                panel.runCommand("undo");
-            } catch (Throwable ex) {
-            }
-        }
-    }
-
-    class RedoAction extends AbstractAction {
-        public RedoAction() {
-            super("Undo", GUIGlobals.getImage("redo"));
-            putValue(SHORT_DESCRIPTION, "Redo");
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            try {
-                panel.runCommand("redo");
-            } catch (Throwable ex) {
-            }
-        }
-    }
-
-    class SaveDatabaseAction extends AbstractAction {
-        public SaveDatabaseAction() {
-            super("Save database");
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            Object activeTab = tabs.get(tabbed.getSelectedIndex());
-            if (activeTab instanceof EntryEditorTab) {
-                // Normal panel.
-                EntryEditorTab fp = (EntryEditorTab) activeTab;
-                FieldEditor fe = fp.getActive();
-                fe.clearAutoCompleteSuggestion();
-                updateField(fe);
-            } else
-                // Source panel.
-                updateField(activeTab);
-
-            try {
-                panel.runCommand("save");
-            } catch (Throwable ex) {
-            }
-        }
-    }
-
-    class ExternalViewerListener extends MouseAdapter {
-        public void mouseClicked(MouseEvent evt) {
-            if (evt.getClickCount() == 2) {
-                FieldTextArea tf = (FieldTextArea) evt.getSource();
-
-                if (tf.getText().equals(""))
-                    return;
-
-                tf.selectAll();
-
-                String link = tf.getText(); // get selected ? String
-
-                // getSelectedText()
-                try {
-                    Util.openExternalViewer(panel.metaData(), link, tf.getFieldName());
-                } catch (IOException ex) {
-                    System.err.println("Error opening file.");
-                }
-            }
-        }
-    }
-
-    class ChangeTypeAction extends AbstractAction {
-        BibtexEntryType type;
-
-        BasePanel panel;
-
-        public ChangeTypeAction(BibtexEntryType type, BasePanel bp) {
-            super(type.getName());
-            this.type = type;
-            panel = bp;
-        }
-
-        public void actionPerformed(ActionEvent evt) {
-            panel.changeType(entry, type);
-        }
-    }
-
-    private void warnDuplicateBibtexkey() {
-        panel.output(Globals.lang("Duplicate BibTeX key. Grouping may not work for this entry."));
-
-        /*if (prefs.getBoolean("dialogWarningForDuplicateKey")) {
-            // JZTODO lyrics
-            CheckBoxMessage jcb = new CheckBoxMessage(Globals.lang("Warning") + ": "
-                + Globals.lang("Duplicate BibTeX key. Grouping may not work for this entry."),
-                Globals.lang("Disable this warning dialog"), false);
-            JOptionPane.showMessageDialog(frame, jcb, Globals.lang("Warning"),
-                JOptionPane.WARNING_MESSAGE);
-
-            if (jcb.isSelected())
-                prefs.putBoolean("dialogWarningForDuplicateKey", false);
-        }*/
-    }
-
-    private void warnEmptyBibtexkey() {
-        // JZTODO lyrics
-        panel.output(Globals.lang("Empty BibTeX key. Grouping may not work for this entry."));
-
-        /*if (prefs.getBoolean("dialogWarningForEmptyKey")) {
-            // JZTODO lyrics
-            CheckBoxMessage jcb = new CheckBoxMessage(Globals.lang("Warning") + ": "
-                + Globals.lang("Empty BibTeX key. Grouping may not work for this entry."), Globals
-                .lang("Disable this warning dialog"), false);
-            JOptionPane.showMessageDialog(frame, jcb, Globals.lang("Warning"),
-                JOptionPane.WARNING_MESSAGE);
-
-            if (jcb.isSelected())
-                prefs.putBoolean("dialogWarningForEmptyKey", false);
-        }*/
-    }
-
-
-    class AutoSetFileAction extends AbstractAction {
-        public AutoSetFileAction() {
-            putValue(SMALL_ICON, GUIGlobals.getImage("autoGroup"));
-            putValue(SHORT_DESCRIPTION, Globals.lang("Automatically set file links for this entry")
-                    +" (Alt-F)");
-        }
-
-        public void actionPerformed(ActionEvent event) {
-            JDialog diag = new JDialog(frame, true);
-            final FileListTableModel tableModel = new FileListTableModel();
-            tableModel.setContent(entry.getField(GUIGlobals.FILE_FIELD));
-            FileListEditor.autoSetLinks(entry, tableModel, panel.metaData(), new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    if (e.getID() > 0) {
-                        entry.setField(GUIGlobals.FILE_FIELD, tableModel.getStringRepresentation());
-                        frame.output(Globals.lang("Finished autosetting external links."));
-                    }
-                    else frame.output(Globals.lang("Finished autosetting external links.")
-                        +" "+Globals.lang("No files found."));
-                }
-            }, diag);
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.AWTKeyStroke;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Insets;
+import java.awt.KeyboardFocusManager;
+import java.awt.RenderingHints;
+import java.awt.Toolkit;
+import java.awt.datatransfer.StringSelection;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTarget;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusAdapter;
+import java.awt.event.FocusEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.VetoableChangeListener;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Logger;
+
+import javax.swing.AbstractAction;
+import javax.swing.ActionMap;
+import javax.swing.InputMap;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.JToolBar;
+import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.text.JTextComponent;
+
+import net.sf.jabref.autocompleter.AbstractAutoCompleter;
+import net.sf.jabref.export.LatexFieldFormatter;
+import net.sf.jabref.external.ExternalFilePanel;
+import net.sf.jabref.external.WriteXMPEntryEditorAction;
+import net.sf.jabref.gui.FileDialogs;
+import net.sf.jabref.gui.FileListEditor;
+import net.sf.jabref.gui.FileListTableModel;
+import net.sf.jabref.gui.VerticalLabelUI;
+import net.sf.jabref.gui.date.DatePickerButton;
+import net.sf.jabref.help.HelpAction;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.journals.JournalAbbreviations;
+import net.sf.jabref.labelPattern.LabelPatternUtil;
+import net.sf.jabref.specialfields.SpecialFieldUpdateListener;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableChangeType;
+import net.sf.jabref.undo.UndoableFieldChange;
+import net.sf.jabref.undo.UndoableKeyChange;
+import net.sf.jabref.undo.UndoableRemoveEntry;
+
+/**
+ * GUI component that allows editing of the fields of a BibtexEntry (i.e. the
+ * one that shows up, when you double click on an entry in the table)
+ * 
+ * It hosts the tabs (required, general, optional) and the buttons to the left.
+ * 
+ * EntryEditor also registers itself as a VetoableChangeListener, receiving
+ * events whenever a field of the entry changes, enabling the text fields to
+ * update themselves if the change is made from somewhere else.
+ */
+public class EntryEditor extends JPanel implements VetoableChangeListener, EntryContainer {
+
+    // A reference to the entry this object works on.
+    private BibtexEntry entry;
+
+    BibtexEntryType type;
+
+    // The action concerned with closing the window.
+    CloseAction closeAction;
+
+    // The action that deletes the current entry, and closes the editor.
+    DeleteAction deleteAction = new DeleteAction();
+
+    // The action concerned with copying the BibTeX key to the clipboard.
+    CopyKeyAction copyKeyAction;
+
+    // The action concerned with copying the BibTeX key to the clipboard.
+    AbstractAction nextEntryAction = new NextEntryAction();
+
+    // Actions for switching to next/previous entry.
+    AbstractAction prevEntryAction = new PrevEntryAction();
+
+    // The action concerned with storing a field value.
+    public StoreFieldAction storeFieldAction;
+
+    // The actions concerned with switching the panels.
+    SwitchLeftAction switchLeftAction = new SwitchLeftAction();
+
+    SwitchRightAction switchRightAction = new SwitchRightAction();
+
+    // The action which generates a bibtexkey for this entry.
+    public GenerateKeyAction generateKeyAction;
+
+    public AutoSetFileAction autoLink = new AutoSetFileAction();
+
+    public AbstractAction writeXmp;
+
+    SaveDatabaseAction saveDatabaseAction = new SaveDatabaseAction();
+
+    JPanel mainPanel = new JPanel();
+
+    JPanel srcPanel = new JPanel();
+
+    EntryEditorTab genPan, optPan, reqPan, absPan;
+
+    JTextField bibtexKey;
+
+    FieldTextField tf;
+
+    JTextArea source;
+
+    JToolBar tlb;
+
+    JTabbedPane tabbed = new JTabbedPane(); // JTabbedPane.RIGHT);
+
+    JLabel lab;
+
+    TypeLabel typeLabel;
+
+    JabRefFrame frame;
+
+    BasePanel panel;
+
+    EntryEditor ths = this;
+
+    HashSet<FieldContentSelector> contentSelectors = new HashSet<FieldContentSelector>();
+
+    Logger logger = Logger.getLogger(EntryEditor.class.getName());
+
+    boolean updateSource = true; // This can be set to false to stop the source
+    boolean movingToDifferentEntry = false; // Indicates that we are about to go to the next or previous entry
+
+    List<Object> tabs = new ArrayList<Object>();
+
+    // text area from gettin updated. This is used in cases where the source
+    // couldn't be parsed, and the user is given the option to edit it.
+    boolean lastSourceAccepted = true; // This indicates whether the last
+
+    // attempt
+    // at parsing the source was successful. It is used to determine whether the
+    // dialog should close; it should stay open if the user received an error
+    // message about the source, whatever he or she chose to do about it.
+    String lastSourceStringAccepted = null; // This is used to prevent double
+
+    // fields.
+    // These values can be used to calculate the preferred height for the form.
+    // reqW starts at 1 because it needs room for the bibtex key field.
+    private int sourceIndex = -1; // The index the source panel has in tabbed.
+
+    JabRefPreferences prefs;
+
+    HelpAction helpAction;
+
+    UndoAction undoAction = new UndoAction();
+
+    RedoAction redoAction = new RedoAction();
+
+    TabListener tabListener = new TabListener();
+
+    public EntryEditor(JabRefFrame frame_, BasePanel panel_, BibtexEntry entry_) {
+
+        frame = frame_;
+        panel = panel_;
+        entry = entry_;
+        prefs = Globals.prefs;
+        type = entry.getType();
+
+        entry.addPropertyChangeListener(this);
+        entry.addPropertyChangeListener(SpecialFieldUpdateListener.getInstance());
+
+        helpAction = new HelpAction(frame.helpDiag, GUIGlobals.entryEditorHelp, "Help");
+        closeAction = new CloseAction();
+        copyKeyAction = new CopyKeyAction();
+        generateKeyAction = new GenerateKeyAction(frame);
+        storeFieldAction = new StoreFieldAction();
+        writeXmp = new WriteXMPEntryEditorAction(panel_, this);
+
+        BorderLayout bl = new BorderLayout();
+        setLayout(bl);
+        setupToolBar();
+        setupFieldPanels();
+        setupSourcePanel();
+        add(tabbed, BorderLayout.CENTER);
+        tabbed.addChangeListener(tabListener);
+        if (prefs.getBoolean("showSource") && prefs.getBoolean("defaultShowSource"))
+            tabbed.setSelectedIndex(sourceIndex);
+
+        updateAllFields();
+    }
+
+    private void setupFieldPanels() {
+        tabbed.removeAll();
+        tabs.clear();
+        String[] fields = entry.getRequiredFields();
+
+        List<String> fieldList = null;
+        if (fields != null)
+            fieldList = java.util.Arrays.asList(fields);
+        reqPan = new EntryEditorTab(frame, panel, fieldList, this, true, Globals.lang("Required fields"));
+        tabbed.addTab(Globals.lang("Required fields"), GUIGlobals.getImage("required"), reqPan
+            .getPane(), Globals.lang("Show required fields"));
+        tabs.add(reqPan);
+
+        if ((entry.getOptionalFields() != null) && (entry.getOptionalFields().length >= 1)) {
+            if (!prefs.getBoolean("biblatexMode")) {
+                optPan = new EntryEditorTab(frame, panel, java.util.Arrays.asList(entry.getOptionalFields()), this,
+                    false, Globals.lang("Optional fields"));
+                tabbed.addTab(Globals.lang("Optional fields"), GUIGlobals.getImage("optional"), optPan
+                    .getPane(), Globals.lang("Show optional fields"));
+                tabs.add(optPan);
+            }
+            else {
+                optPan = new CompressedEntryEditorTab(frame, panel,
+                        java.util.Arrays.asList(entry.getType().getPrimaryOptionalFields()), this,
+                    false, Globals.lang("Optional fields"));
+                tabbed.addTab(Globals.lang("Optional fields"), GUIGlobals.getImage("optional"), optPan
+                    .getPane(), Globals.lang("Show optional fields"));
+                tabs.add(optPan);
+                optPan = new CompressedEntryEditorTab(frame, panel,
+                        java.util.Arrays.asList(Util.getRemainder(entry.getOptionalFields(),
+                                entry.getType().getPrimaryOptionalFields())), this,
+                    false, Globals.lang("Optional fields 2"));
+                tabbed.addTab(Globals.lang("Optional fields 2"), GUIGlobals.getImage("optional"), optPan
+                    .getPane(), Globals.lang("Show optional fields"));
+                tabs.add(optPan);
+
+            }
+        }
+
+        EntryEditorTabList tabList = Globals.prefs.getEntryEditorTabList();
+        for (int i = 0; i < tabList.getTabCount(); i++) {
+            EntryEditorTab newTab = new EntryEditorTab(frame, panel, tabList.getTabFields(i), this, false,
+                tabList.getTabName(i));
+            tabbed.addTab(tabList.getTabName(i), GUIGlobals.getImage("general"), newTab.getPane());
+            tabs.add(newTab);
+        }
+
+        srcPanel.setName(Globals.lang("BibTeX source"));
+        if (Globals.prefs.getBoolean("showSource")) {
+            tabbed.addTab(Globals.lang("BibTeX source"), GUIGlobals.getImage("source"), srcPanel,
+                Globals.lang("Show/edit BibTeX source"));
+            tabs.add(srcPanel);
+        }
+        sourceIndex = tabs.size() - 1; // Set the sourceIndex variable.
+        srcPanel.setFocusCycleRoot(true);
+    }
+
+    public BibtexEntryType getType() {
+        return type;
+    }
+
+    public BibtexEntry getEntry() {
+        return entry;
+    }
+    
+    public BibtexDatabase getDatabase(){
+    	return panel.getDatabase();
+    }
+
+    private void setupToolBar() {
+        JPanel leftPan = new JPanel();
+        leftPan.setLayout(new BorderLayout());
+        tlb = new JToolBar(JToolBar.VERTICAL);
+        //tlb.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH);
+        tlb.setBorder(null);
+        tlb.setRollover(true);
+
+        tlb.setMargin(new Insets(0, 0, 0, 2));
+
+        // The toolbar carries all the key bindings that are valid for the whole
+        // window.
+        ActionMap am = tlb.getActionMap();
+        InputMap im = tlb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+
+        im.put(prefs.getKey("Close entry editor"), "close");
+        am.put("close", closeAction);
+        im.put(prefs.getKey("Entry editor, store field"), "store");
+        am.put("store", storeFieldAction);
+        im.put(prefs.getKey("Autogenerate BibTeX keys"), "generateKey");
+        am.put("generateKey", generateKeyAction);
+        im.put(prefs.getKey("Automatically link files"), "autoLink");
+        am.put("autoLink", autoLink);
+        im.put(prefs.getKey("Entry editor, previous entry"), "prev");
+        am.put("prev", prevEntryAction);
+        im.put(prefs.getKey("Entry editor, next entry"), "next");
+        am.put("next", nextEntryAction);
+        im.put(prefs.getKey("Undo"), "undo");
+        am.put("undo", undoAction);
+        im.put(prefs.getKey("Redo"), "redo");
+        am.put("redo", redoAction);
+        im.put(prefs.getKey("Help"), "help");
+        am.put("help", helpAction);
+
+        tlb.setFloatable(false);
+
+        // Add actions (and thus buttons)
+        JButton closeBut = new JButton(closeAction);
+        closeBut.setText(null);
+        closeBut.setBorder(null);
+        leftPan.add(closeBut, BorderLayout.NORTH);
+
+        // Create type-label
+        typeLabel = new TypeLabel(entry.getType().getName());
+        leftPan.add(typeLabel, BorderLayout.CENTER);
+
+        //tlb.add(typeL);
+
+        tlb.addSeparator();
+        
+        tlb.add(generateKeyAction);
+        tlb.add(autoLink);
+
+        tlb.add(writeXmp);
+
+        tlb.addSeparator();
+
+        tlb.add(deleteAction);
+        tlb.add(prevEntryAction);
+        tlb.add(nextEntryAction);
+        
+        tlb.addSeparator();
+        
+        tlb.add(helpAction);
+
+        Component[] comps = tlb.getComponents();
+
+        for (int i = 0; i < comps.length; i++)
+            ((JComponent) comps[i]).setOpaque(false);
+
+        leftPan.add(tlb, BorderLayout.SOUTH);
+        add(leftPan, BorderLayout.WEST);
+    }
+
+    /**
+     * Rebuild the field tabs. This is called e.g. when a new content selector
+     * has been added.
+     */
+    public void rebuildPanels() {
+        // Remove change listener, because the rebuilding causes meaningless
+        // events and trouble:
+        tabbed.removeChangeListener(tabListener);
+        
+        setupFieldPanels();
+        // Add the change listener again:
+        tabbed.addChangeListener(tabListener);
+        revalidate();
+        repaint();
+    }
+
+    /**
+     * getExtra checks the field name against BibtexFields.getFieldExtras(name).
+     * If the name has an entry, the proper component to be shown is created and
+     * returned. Otherwise, null is returned. In addition, e.g. listeners can be
+     * added to the field editor, even if no component is returned.
+     * 
+     * @param string
+     *            Field name
+     * @return Component to show, or null if none.
+     */
+    public JComponent getExtra(String string, final FieldEditor ed) {
+
+        // fieldName and parameter string identically ????
+        final String fieldName = ed.getFieldName();
+
+        String s = BibtexFields.getFieldExtras(string);
+
+        // timestamp or a other field with datepicker command
+        if ((fieldName.equals(Globals.prefs.get("timeStampField")))
+            || ((s != null) && s.equals("datepicker"))) {
+            // double click AND datefield => insert the current date (today)
+            ((JTextArea) ed).addMouseListener(new MouseAdapter() {
+                public void mouseClicked(MouseEvent e) {
+                    if (e.getClickCount() == 2) // double click
+                    {
+                        String date = Util.easyDateFormat();
+                        ed.setText(date);
+                    }
+                }
+            });
+
+            // insert a datepicker, if the extras field contains this command
+            if ((s != null) && s.equals("datepicker")) {
+                DatePickerButton datePicker = new DatePickerButton(ed);
+                return datePicker.getDatePicker();
+            }
+        }
+
+        if ((s != null) && s.equals("external")) {
+
+            // Add external viewer listener for "pdf" and "url" fields.
+            ((JComponent) ed).addMouseListener(new ExternalViewerListener());
+
+            return null;
+        } else if ((s != null) && s.equals("journalNames")) {
+            // Add controls for switching between abbreviated and full journal
+            // names.
+            // If this field also has a FieldContentSelector, we need to combine
+            // these.
+            JPanel controls = new JPanel();
+            controls.setLayout(new BorderLayout());
+            if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + ed.getFieldName()) != null) {
+                FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, ed,
+                    panel.metaData, storeFieldAction, false, ", ");
+                contentSelectors.add(ws);
+                controls.add(ws, BorderLayout.NORTH);
+            }
+            controls.add(JournalAbbreviations.getNameSwitcher(this, ed, panel.undoManager),
+                BorderLayout.SOUTH);
+            return controls;
+        } else if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + ed.getFieldName()) != null) {
+            FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, ed,
+                panel.metaData, storeFieldAction, false,
+                ((ed.getFieldName().equals("author") || ed.getFieldName().equals("editor")) ? " and " : ", "));
+            contentSelectors.add(ws);
+
+            return ws;
+        } else if ((s != null) && s.equals("browse")) {
+            JButton but = new JButton(Globals.lang("Browse"));
+            ((JComponent) ed).addMouseListener(new ExternalViewerListener());
+
+            // but.setBackground(GUIGlobals.lightGray);
+            but.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    String dir = ed.getText();
+
+                    if (dir.equals(""))
+                        dir = prefs.get(fieldName + Globals.FILETYPE_PREFS_EXT, "");
+
+                    String chosenFile = FileDialogs.getNewFile(frame, new File(dir), "." + fieldName,
+                        JFileChooser.OPEN_DIALOG, false);
+
+                    if (chosenFile != null) {
+                        File newFile = new File(chosenFile); // chooser.getSelectedFile();
+                        ed.setText(newFile.getPath());
+                        prefs.put(fieldName + Globals.FILETYPE_PREFS_EXT, newFile.getPath());
+                        updateField(ed);
+                    }
+                }
+            });
+
+            return but;
+            // } else if ((s != null) && s.equals("browsePdf")) {
+        } else if ((s != null) && (s.equals("browseDoc") || s.equals("browseDocZip"))) {
+
+            final String ext = "." + fieldName.toLowerCase();
+            final OpenFileFilter off;
+            if (s.equals("browseDocZip"))
+                off = new OpenFileFilter(new String[] { ext, ext + ".gz", ext + ".bz2" });
+            else
+                off = new OpenFileFilter(new String[] { ext });
+
+            ExternalFilePanel pan = new ExternalFilePanel(frame, panel.metaData(), this, fieldName,
+                off, ed);
+            return pan;
+        }
+        /*
+         * else if ((s != null) && s.equals("browsePs")) { ExternalFilePanel pan =
+         * new ExternalFilePanel(frame, this, "ps", off, ed); return pan; }
+         */
+        else if ((s != null) && s.equals("url")) {
+            ((JComponent) ed).setDropTarget(new DropTarget((Component) ed,
+                DnDConstants.ACTION_NONE, new SimpleUrlDragDrop(ed, storeFieldAction)));
+
+            return null;
+        }
+
+        else if ((s != null) && (s.equals("setOwner"))) {
+            JButton button = new JButton(Globals.lang("Auto"));
+            button.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent actionEvent) {
+                    ed.setText(Globals.prefs.get("defaultOwner"));
+                    storeFieldAction.actionPerformed(new ActionEvent(ed, 0, ""));
+                }
+            });
+            return button;
+        }
+        else
+            return null;
+    }
+
+    private void setupSourcePanel() {
+        source = new JTextAreaWithHighlighting();
+        frame.getSearchManager().addSearchListener((SearchTextListener)source);
+        
+        /* {
+            private boolean antialias = Globals.prefs.getBoolean("antialias");
+
+            public void paint(Graphics g) {
+                Graphics2D g2 = (Graphics2D) g;
+                if (antialias)
+                    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+                        RenderingHints.VALUE_ANTIALIAS_ON);
+                super.paint(g2);
+            }
+        };*/
+
+        //DefaultFormBuilder builder = new DefaultFormBuilder
+        //        (srcPanel, new FormLayout( "fill:pref:grow", "fill:pref:grow"));
+        source.setEditable(true); // prefs.getBoolean("enableSourceEditing"));
+        source.setLineWrap(true);
+        source.setTabSize(GUIGlobals.INDENT);
+        source.addFocusListener(new FieldEditorFocusListener());
+        // Add the global focus listener, so a menu item can see if this field
+        // was focused when
+        // an action was called.
+        source.addFocusListener(Globals.focusListener);
+        source.setFont(new Font("Monospaced", Font.PLAIN, Globals.prefs.getInt("fontSize")));
+        setupJTextComponent(source);
+        updateSource();
+
+        JScrollPane sp = new JScrollPane(source, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+            JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+        //builder.append(sp);
+        
+        srcPanel.setLayout(new BorderLayout());
+        srcPanel.add(sp, BorderLayout.CENTER);
+
+    }
+
+    public void updateSource() {
+        if (updateSource) {
+            StringWriter sw = new StringWriter(200);
+
+            try {
+                LatexFieldFormatter formatter = new LatexFieldFormatter();
+                formatter.setNeverFailOnHashes(true);
+                entry.write(sw, formatter, false);
+
+                String srcString = sw.getBuffer().toString();
+                source.setText(srcString);
+                lastSourceStringAccepted = srcString;
+
+                //////////////////////////////////////////////////////////
+                // Set the current Entry to be selected.
+                // Fixes the bug of losing selection after, e.g.
+                // an autogeneration of a BibTeX key.
+                // - ILC (16/02/2010) -
+                //////////////////////////////////////////////////////////
+                SwingUtilities.invokeLater(new Runnable() {
+                  public void run() {
+                    final int row = panel.mainTable.findEntry(entry);
+                    if (row >= 0) {
+                        if (panel.mainTable.getSelectedRowCount() == 0)
+                            panel.mainTable.setRowSelectionInterval(row, row);
+                        //scrollTo(row);
+                        panel.mainTable.ensureVisible(row);
+                    }
+                  }
+                });
+                //////////////////////////////////////////////////////////
+
+            } catch (IOException ex) {
+                source.setText(ex.getMessage() + "\n\n" +
+                                        Globals.lang("Correct the entry, and "
+                    + "reopen editor to display/edit source."));
+                source.setEditable(false);
+            }
+
+
+        }
+    }
+
+    /**
+     * NOTE: This method is only used for the source panel, not for the
+     * other tabs. Look at EntryEditorTab for the setup of text components
+     * in the other tabs.
+     */
+    public void setupJTextComponent(JTextComponent ta) {
+
+
+        // Set up key bindings and focus listener for the FieldEditor.
+        InputMap im = ta.getInputMap(JComponent.WHEN_FOCUSED);
+        ActionMap am = ta.getActionMap();
+
+        // im.put(KeyStroke.getKeyStroke(GUIGlobals.closeKey), "close");
+        // am.put("close", closeAction);
+        im.put(prefs.getKey("Entry editor, store field"), "store");
+        am.put("store", storeFieldAction);
+
+        im.put(prefs.getKey("Entry editor, next panel"), "right");
+        im.put(prefs.getKey("Entry editor, next panel 2"), "right");
+        am.put("right", switchRightAction);
+
+        im.put(prefs.getKey("Entry editor, previous panel"), "left");
+        im.put(prefs.getKey("Entry editor, previous panel 2"), "left");
+        am.put("left", switchLeftAction);
+
+        im.put(prefs.getKey("Help"), "help");
+        am.put("help", helpAction);
+        im.put(prefs.getKey("Save database"), "save");
+        am.put("save", saveDatabaseAction);
+
+        im.put(Globals.prefs.getKey("Next tab"), "nexttab");
+        am.put("nexttab", frame.nextTab);
+        im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
+        am.put("prevtab", frame.prevTab);
+        try {
+            HashSet<AWTKeyStroke> keys = new HashSet<AWTKeyStroke>(ta
+                .getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
+            keys.clear();
+            keys.add(AWTKeyStroke.getAWTKeyStroke("pressed TAB"));
+            ta.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, keys);
+            keys = new HashSet<AWTKeyStroke>(ta
+                .getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
+            keys.clear();
+            keys.add(KeyStroke.getKeyStroke("shift pressed TAB"));
+            ta.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, keys);
+        } catch (Throwable t) {
+            System.err.println(t);
+        }
+
+        ta.addFocusListener(new FieldListener());
+    }
+
+    public void requestFocus() {
+        activateVisible();
+    }
+
+    private void activateVisible() {
+        Object activeTab = tabs.get(tabbed.getSelectedIndex());
+
+        if (activeTab instanceof EntryEditorTab)
+            ((EntryEditorTab) activeTab).activate();
+        else
+            new FocusRequester(source);
+        // ((JComponent)activeTab).requestFocus();
+    }
+
+    /**
+     * Reports the enabled status of the editor, as set by setEnabled()
+     */
+    public boolean isEnabled() {
+        return source.isEnabled();
+    }
+
+    /**
+     * Sets the enabled status of all text fields of the entry editor.
+     */
+    public void setEnabled(boolean enabled) {
+        for (Iterator<Object> i = tabs.iterator(); i.hasNext();) {
+            Object o = i.next();
+            if (o instanceof EntryEditorTab) {
+                ((EntryEditorTab) o).setEnabled(enabled);
+            }
+        }
+        source.setEnabled(enabled);
+
+    }
+
+    /**
+     * Centers the given row, and highlights it.
+     * 
+     * @param row
+     *            an <code>int</code> value
+     */
+    private void scrollTo(int row) {
+        movingToDifferentEntry = true;
+        panel.mainTable.setRowSelectionInterval(row, row);
+        panel.mainTable.ensureVisible(row);
+    }
+
+    /**
+     * Makes sure the current edit is stored.
+     */
+    public void storeCurrentEdit() {
+        Component comp = Globals.focusListener.getFocused();
+        if ((comp == source) || ((comp instanceof FieldEditor) && this.isAncestorOf(comp))) {
+            if (comp instanceof FieldEditor)
+                ((FieldEditor)comp).clearAutoCompleteSuggestion();
+            storeFieldAction.actionPerformed(new ActionEvent(comp, 0, ""));
+        }
+    }
+
+    /**
+     * Returns the index of the active (visible) panel.
+     * 
+     * @return an <code>int</code> value
+     */
+    public int getVisiblePanel() {
+        return tabbed.getSelectedIndex();
+    }
+
+    /** Returns the name of the currently selected component. */
+    public String getVisiblePanelName() {
+        return tabbed.getSelectedComponent().getName();
+    }
+
+    /**
+     * Sets the panel with the given index visible.
+     * 
+     * @param i
+     *            an <code>int</code> value
+     */
+    public void setVisiblePanel(int i) {
+        tabbed.setSelectedIndex(Math.min(i, tabbed.getTabCount() - 1));
+    }
+
+    public void setVisiblePanel(String name) {
+        for (int i = 0; i < tabbed.getTabCount(); ++i) {
+            if (name.equals(tabbed.getComponent(i).getName())) {
+                tabbed.setSelectedIndex(i);
+                return;
+            }
+        }
+        if (tabbed.getTabCount() > 0)
+            tabbed.setSelectedIndex(0);
+    }
+
+    /**
+     * Updates this editor to show the given entry, regardless of type
+     * correspondence.
+     * 
+     * @param be
+     *            a <code>BibtexEntry</code> value
+     */
+    public synchronized void switchTo(BibtexEntry be) {
+        if (entry == be) {
+            /**
+             * Even if the editor is already showing the same entry, update
+             * the source panel. I'm not sure if this is the correct place to
+             * do this, but in some cases the source panel will otherwise not
+             * be up-to-date when an entry is changed while the entry editor
+             * is existing, set to the same entry, but not visible.
+             */
+            updateSource();
+            return;
+        }
+        storeCurrentEdit();
+
+        // Remove this instance as property listener for the entry:
+        entry.removePropertyChangeListener(this);
+
+        // Register as property listener for the new entry:
+        be.addPropertyChangeListener(this);
+
+        entry = be;
+
+        updateAllFields();
+        validateAllFields();
+        updateSource();
+        panel.newEntryShowing(be);
+
+    }
+
+    /**
+     * Returns false if the contents of the source panel has not been validated,
+     * true othervise.
+     */
+    public boolean lastSourceAccepted() {
+        if (tabbed.getSelectedComponent() == srcPanel)
+            storeSource(false);
+
+        return lastSourceAccepted;
+    }
+
+    /*
+     * public boolean storeSourceIfNeeded() { if (tabbed.getSelectedIndex() ==
+     * sourceIndex) return storeSource(); else return true; }
+     */
+    public boolean storeSource(boolean showError) {
+        // Store edited bibtex code.
+        BibtexParser bp = new BibtexParser(new java.io.StringReader(source.getText()));
+
+        try {
+            BibtexDatabase db = bp.parse().getDatabase();
+
+            if (db.getEntryCount() > 1)
+                throw new Exception("More than one entry found.");
+
+            if (db.getEntryCount() < 1)
+                throw new Exception("No entries found.");
+
+            NamedCompound compound = new NamedCompound(Globals.lang("source edit"));
+            BibtexEntry nu = db.getEntryById(db.getKeySet().iterator().next());
+            String id = entry.getId();
+            String
+            // oldKey = entry.getCiteKey(),
+            newKey = nu.getCiteKey();
+            boolean anyChanged = false;
+            boolean changedType = false;
+            boolean duplicateWarning = false;
+            boolean emptyWarning = newKey == null || newKey.equals("");
+
+            if (panel.database.setCiteKeyForEntry(id, newKey)) {
+                duplicateWarning = true;
+
+                // First, remove fields that the user have removed.
+            }
+
+            for (String field : entry.getAllFields()){
+                if (BibtexFields.isDisplayableField(field.toString())) {
+                    if (nu.getField(field.toString()) == null) {
+                        compound.addEdit(new UndoableFieldChange(entry, field.toString(), entry
+                            .getField(field.toString()), null));
+                        entry.clearField(field.toString());
+                        anyChanged = true;
+                    }
+                }
+            }
+
+            // Then set all fields that have been set by the user.
+            for (String field : nu.getAllFields()){
+                if (entry.getField(field.toString()) != nu.getField(field.toString())) {
+                    String toSet = nu.getField(field.toString());
+
+                    // Test if the field is legally set.
+                    (new LatexFieldFormatter()).format(toSet, field.toString());
+
+                    compound.addEdit(new UndoableFieldChange(entry, field.toString(), entry
+                        .getField(field.toString()), toSet));
+                    entry.setField(field.toString(), toSet);
+                    anyChanged = true;
+                }
+            }
+
+            // See if the user has changed the entry type:
+            if (nu.getType() != entry.getType()) {
+                compound.addEdit(new UndoableChangeType(entry,
+                      entry.getType(), nu.getType()));
+                entry.setType(nu.getType());
+                anyChanged = true;
+                changedType = true;
+            }
+            compound.end();
+
+            if (!anyChanged)
+                return true;
+
+            panel.undoManager.addEdit(compound);
+
+            /*
+             * if (((oldKey == null) && (newKey != null)) || ((oldKey != null) &&
+             * (newKey == null)) || ((oldKey != null) && (newKey != null) &&
+             * !oldKey.equals(newKey))) { }
+             */
+            if (duplicateWarning) {
+                warnDuplicateBibtexkey();
+            } else if (emptyWarning && showError) {
+                warnEmptyBibtexkey();
+            } else {
+                panel.output(Globals.lang("Stored entry") + ".");
+            }
+
+            lastSourceStringAccepted = source.getText();
+            if (!changedType) {
+                updateAllFields();
+                lastSourceAccepted = true;
+                updateSource = true;
+            }
+            else {
+                panel.updateEntryEditorIfShowing();
+            }
+            // TODO: does updating work properly after source stored?
+            // panel.tableModel.remap();
+            // panel.entryTable.repaint();
+            // panel.refreshTable();
+            panel.markBaseChanged();
+///////////////////////////////////////////////////////
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    final int row = panel.mainTable.findEntry(entry);
+                    if (row >= 0) {
+                        //if (panel.mainTable.getSelectedRowCount() == 0)
+                        //    panel.mainTable.setRowSelectionInterval(row, row);
+                        //scrollTo(row);
+                        panel.mainTable.ensureVisible(row);
+                    }
+                }
+            });
+            
+            return true;
+        } catch (Throwable ex) {
+            // ex.printStackTrace();
+            // The source couldn't be parsed, so the user is given an
+            // error message, and the choice to keep or revert the contents
+            // of the source text field.
+            updateSource = false;
+            lastSourceAccepted = false;
+            tabbed.setSelectedComponent(srcPanel);
+
+            if (showError) {
+                Object[] options = { Globals.lang("Edit"),
+                    Globals.lang("Revert to original source") };
+
+                int answer = JOptionPane.showOptionDialog(frame, Globals.lang("Error") + ": " + ex.getMessage(),
+                    Globals.lang("Problem with parsing entry"), JOptionPane.YES_NO_OPTION,
+                    JOptionPane.ERROR_MESSAGE, null, options, options[0]);
+
+                if (answer != 0) {
+                    updateSource = true;
+                    updateSource();
+                }
+            }
+
+            return false;
+        }
+    }
+
+    public void setField(String fieldName, String newFieldData) {
+
+        for (Iterator<Object> i = tabs.iterator(); i.hasNext();) {
+            Object o = i.next();
+            if (o instanceof EntryEditorTab) {
+                ((EntryEditorTab) o).updateField(fieldName, newFieldData);
+            }
+        }
+
+    }
+
+    /**
+     * Sets all the text areas according to the shown entry.
+     */
+    public void updateAllFields() {
+        for (Iterator<Object> i = tabs.iterator(); i.hasNext();) {
+            Object o = i.next();
+            if (o instanceof EntryEditorTab) {
+                ((EntryEditorTab) o).setEntry(entry);
+            }
+        }
+    }
+
+    /**
+     * Removes the "invalid field" color from all text areas.
+     */
+    public void validateAllFields() {
+        for (Iterator<Object> i = tabs.iterator(); i.hasNext();) {
+            Object o = i.next();
+            if (o instanceof EntryEditorTab) {
+                ((EntryEditorTab) o).validateAllFields();
+            }
+        }
+    }
+
+    public void updateAllContentSelectors() {
+        if (contentSelectors.size() > 0) {
+            for (Iterator<FieldContentSelector> i = contentSelectors.iterator(); i.hasNext();)
+                i.next().rebuildComboBox();
+        }
+    }
+
+    /**
+     * Update the JTextArea when a field has changed.
+     * 
+     * @see java.beans.VetoableChangeListener#vetoableChange(java.beans.PropertyChangeEvent)
+     */
+    public void vetoableChange(PropertyChangeEvent e) {
+        String newValue = ((e.getNewValue() != null) ? e.getNewValue().toString() : "");
+        setField(e.getPropertyName(), newValue);
+    }
+
+    public void updateField(final Object source) {
+        storeFieldAction.actionPerformed(new ActionEvent(source, 0, ""));
+    }
+
+
+    public void setMovingToDifferentEntry() {
+        movingToDifferentEntry = true;
+    }
+
+    private class TypeLabel extends JLabel {
+        public TypeLabel(String type) {
+            super(type+" ");
+            setUI(new VerticalLabelUI(false));
+            setForeground(GUIGlobals.entryEditorLabelColor);
+            setHorizontalAlignment(RIGHT);
+            setFont(GUIGlobals.typeNameFont);
+            addMouseListener(new MouseAdapter() {
+                public void mouseClicked(MouseEvent e) {
+                    boolean ctrlClick = prefs.getBoolean("ctrlClick");
+
+                    if ((e.getButton() == MouseEvent.BUTTON3)
+                        || (ctrlClick && (e.getButton() == MouseEvent.BUTTON1) && e.isControlDown())) {
+                        JPopupMenu typeMenu = new JPopupMenu();
+
+                        // typeMenu.addSeparator();
+                        for (String s: BibtexEntryType.ALL_TYPES.keySet())
+                            typeMenu.add(new ChangeTypeAction(BibtexEntryType.getType(s), panel));
+
+                        typeMenu.show(ths, e.getX(), e.getY());
+                    }
+                }
+            });
+        }
+
+        public void paintComponent(Graphics g) {
+            Graphics2D g2 = (Graphics2D) g;
+            //g2.setColor(GUIGlobals.entryEditorLabelColor);
+            //g2.setFont(GUIGlobals.typeNameFont);
+            //FontMetrics fm = g2.getFontMetrics();
+            //int width = fm.stringWidth(label);
+            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+            super.paintComponent(g2);
+            //g2.rotate(-Math.PI / 2, 0, 0);
+            //g2.drawString(label, -width - 7, 28);
+        }
+    }
+
+    class FieldListener extends FocusAdapter {
+        /*
+         * Focus listener that fires the storeFieldAction when a FieldTextArea
+         * loses focus.
+         */
+        public void focusGained(FocusEvent e) {
+        }
+
+        public void focusLost(FocusEvent e) {
+            // Util.pr("Lost focus "+e.getSource().toString().substring(0,30));
+            if (!e.isTemporary())
+                updateField(e.getSource());
+        }
+    }
+
+    class TabListener implements ChangeListener {
+        public void stateChanged(ChangeEvent e) {
+
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    activateVisible();
+                }
+            });
+
+            // After the initial event train has finished, we tell the editor
+            // tab to update all
+            // its fields. This makes sure they are updated even if the tab we
+            // just left contained one
+            // or more of the same fields as this one:
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    Object activeTab = tabs.get(tabbed.getSelectedIndex());
+                    if (activeTab instanceof EntryEditorTab)
+                        ((EntryEditorTab) activeTab).updateAll();
+                }
+            });
+
+        }
+    }
+
+    class DeleteAction extends AbstractAction {
+        public DeleteAction() {
+            super(Globals.lang("Delete"), GUIGlobals.getImage("delete"));
+            putValue(SHORT_DESCRIPTION, Globals.lang("Delete entry"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            // Show confirmation dialog if not disabled:
+            boolean goOn = panel.showDeleteConfirmationDialog(1);
+
+            if (!goOn)
+                return;
+
+            panel.entryEditorClosing(EntryEditor.this);
+            panel.database.removeEntry(entry.getId());
+            panel.markBaseChanged();
+            panel.undoManager.addEdit(new UndoableRemoveEntry(panel.database, entry, panel));
+            panel.output(Globals.lang("Deleted") + " " + Globals.lang("entry"));
+        }
+    }
+
+    class CloseAction extends AbstractAction {
+        public CloseAction() {
+            super(Globals.lang("Close window"), GUIGlobals.getImage("close"));
+            putValue(SHORT_DESCRIPTION, Globals.lang("Close window"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            if (tabbed.getSelectedComponent() == srcPanel) {
+                updateField(source);
+                if (lastSourceAccepted)
+                    panel.entryEditorClosing(EntryEditor.this);
+            } else
+                panel.entryEditorClosing(EntryEditor.this);
+        }
+    }
+
+    class CopyKeyAction extends AbstractAction {
+        public CopyKeyAction() {
+            super("Copy BibTeX key to clipboard");
+            putValue(SHORT_DESCRIPTION, "Copy BibTeX key to clipboard (Ctrl-K)");
+            // putValue(MNEMONIC_KEY, GUIGlobals.copyKeyCode);
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            String s = (entry.getField(BibtexFields.KEY_FIELD));
+            StringSelection ss = new StringSelection(s);
+
+            if (s != null)
+                Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, ss);
+        }
+    }
+
+    public class StoreFieldAction extends AbstractAction {
+        public StoreFieldAction() {
+            super("Store field value");
+            putValue(SHORT_DESCRIPTION, "Store field value");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            boolean movingAway = movingToDifferentEntry;
+            movingToDifferentEntry = false;
+
+            if (e.getSource() instanceof FieldTextField) {
+                // Storage from bibtex key field.
+                FieldTextField fe = (FieldTextField) e.getSource();
+                String oldValue = entry.getCiteKey();
+                String newValue = fe.getText();
+
+                if (newValue.equals(""))
+                    newValue = null;
+
+                if (((oldValue == null) && (newValue == null))
+                    || ((oldValue != null) && (newValue != null) && oldValue.equals(newValue)))
+                    return; // No change.
+
+                // Make sure the key is legal:
+                String cleaned = Util.checkLegalKey(newValue);
+                if ((cleaned != null) && !cleaned.equals(newValue)) {
+                    JOptionPane.showMessageDialog(frame, Globals.lang("Invalid BibTeX key"),
+                        Globals.lang("Error setting field"), JOptionPane.ERROR_MESSAGE);
+                    fe.setInvalidBackgroundColor();
+                    return;
+                } else {
+                    fe.setValidBackgroundColor();
+                }
+
+                boolean isDuplicate = panel.database.setCiteKeyForEntry(entry.getId(), newValue);
+
+                if (newValue != null) {
+                    if (isDuplicate)
+                        warnDuplicateBibtexkey();
+                    else
+                        panel.output(Globals.lang("BibTeX key is unique."));
+                } else { // key is null/empty
+                    warnEmptyBibtexkey();
+                }
+
+                // Add an UndoableKeyChange to the baseframe's undoManager.
+                panel.undoManager.addEdit(new UndoableKeyChange(panel.database, entry.getId(),
+                    oldValue, newValue));
+
+                if ((newValue != null) && (newValue.length() > 0))
+                    // fe.setLabelColor(GUIGlobals.entryEditorLabelColor);
+                    fe.setValidBackgroundColor();
+                else
+                    // fe.setLabelColor(GUIGlobals.nullFieldColor);
+                    fe.setValidBackgroundColor();
+
+                if (fe.getTextComponent().hasFocus())
+                    fe.setActiveBackgroundColor();
+                updateSource();
+                panel.markBaseChanged();
+            }
+            else if (e.getSource() instanceof FieldEditor) {
+                String toSet = null;
+                FieldEditor fe = (FieldEditor) e.getSource();
+                boolean set;
+                // Trim the whitespace off this value
+                String currentText = fe.getText();
+                String trim = currentText.trim();
+                if (trim.length() > 0) {
+                    toSet = trim;
+                }
+
+                // We check if the field has changed, since we don't want to
+                // mark the base as changed unless we have a real change.
+                if (toSet == null) {
+                    if (entry.getField(fe.getFieldName()) == null)
+                        set = false;
+                    else
+                        set = true;
+                } else {
+                    if ((entry.getField(fe.getFieldName()) != null)
+                        && toSet.equals(entry.getField(fe.getFieldName()).toString()))
+                        set = false;
+                    else
+                        set = true;
+                }
+
+                if (set) {
+                    try {
+                        // The following statement attempts to write the
+                        // new contents into a StringWriter, and this will
+                        // cause an IOException if the field is not
+                        // properly formatted. If that happens, the field
+                        // is not stored and the textarea turns red.
+                        if (toSet != null)
+                            (new LatexFieldFormatter()).format(toSet, fe.getFieldName());
+
+                        String oldValue = entry.getField(fe.getFieldName());
+
+                        if (toSet != null)
+                            entry.setField(fe.getFieldName(), toSet);
+                        else
+                            entry.clearField(fe.getFieldName());
+
+                        if ((toSet != null) && (toSet.length() > 0))
+                            // fe.setLabelColor(GUIGlobals.entryEditorLabelColor);
+                            fe.setValidBackgroundColor();
+                        else
+                            // fe.setLabelColor(GUIGlobals.nullFieldColor);
+                            fe.setValidBackgroundColor();
+
+                        // See if we need to update an AutoCompleter instance:
+                        AbstractAutoCompleter aComp = panel.getAutoCompleter(fe.getFieldName());
+                        if (aComp != null)
+                            aComp.addBibtexEntry(entry);
+
+                        // Add an UndoableFieldChange to the baseframe's
+                        // undoManager.
+                        panel.undoManager.addEdit(new UndoableFieldChange(entry, fe.getFieldName(),
+                            oldValue, toSet));
+                        updateSource();
+                        panel.markBaseChanged();
+
+                    } catch (IllegalArgumentException ex) {
+                        JOptionPane.showMessageDialog(frame, Globals.lang("Error") + ": " + ex.getMessage(), Globals
+                            .lang("Error setting field"), JOptionPane.ERROR_MESSAGE);
+                        fe.setInvalidBackgroundColor();
+                    }
+                } else {
+                    // set == false
+                    // We set the field and label color.
+                    fe.setValidBackgroundColor();
+                }
+                if (fe.getTextComponent().hasFocus())
+                    fe.setBackground(GUIGlobals.activeEditor);
+            } else if ((source.isEditable())
+                && (!source.getText().equals(lastSourceStringAccepted))) {
+                boolean accepted = storeSource(true);
+
+                if (accepted) {
+                }
+            }
+////////////////////////////////////
+            // Make sure we scroll to the entry if it moved in the table.
+            // Should only be done if this editor is currently showing:
+            //System.out.println(getType().getName()+": movingAway="+movingAway+", isShowing="+isShowing());
+            if (!movingAway && isShowing()) {
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                        final int row = panel.mainTable.findEntry(entry);
+                        if (row >= 0) {
+                            //if (panel.mainTable.getSelectedRowCount() == 0)
+                            //    panel.mainTable.setRowSelectionInterval(row, row);
+                            //scrollTo(row);
+                            panel.mainTable.ensureVisible(row);
+                        }
+                    }
+                });
+            }
+        }
+    }
+
+    class SwitchLeftAction extends AbstractAction {
+        public SwitchLeftAction() {
+            super("Switch to the panel to the left");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            // System.out.println("switch left");
+            int i = tabbed.getSelectedIndex();
+            tabbed.setSelectedIndex(((i > 0) ? (i - 1) : (tabbed.getTabCount() - 1)));
+
+            activateVisible();
+        }
+    }
+
+    class SwitchRightAction extends AbstractAction {
+        public SwitchRightAction() {
+            super("Switch to the panel to the right");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            // System.out.println("switch right");
+            int i = tabbed.getSelectedIndex();
+            tabbed.setSelectedIndex((i < (tabbed.getTabCount() - 1)) ? (i + 1) : 0);
+            activateVisible();
+
+        }
+    }
+
+    class NextEntryAction extends AbstractAction {
+        public NextEntryAction() {
+            super(Globals.lang("Next entry"), GUIGlobals.getImage("down"));
+
+            putValue(SHORT_DESCRIPTION, Globals.lang("Next entry"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+
+            int thisRow = panel.mainTable.findEntry(entry);
+            int newRow = -1;
+
+            if ((thisRow + 1) < panel.database.getEntryCount())
+                newRow = thisRow + 1;
+            else if (thisRow > 0)
+                newRow = 0;
+            else
+                return; // newRow is still -1, so we can assume the database has
+                        // only one entry.
+
+            scrollTo(newRow);
+            panel.mainTable.setRowSelectionInterval(newRow, newRow);
+
+        }
+    }
+
+    class PrevEntryAction extends AbstractAction {
+        public PrevEntryAction() {
+            super(Globals.lang("Previous entry"), GUIGlobals.getImage("up"));
+
+            putValue(SHORT_DESCRIPTION, Globals.lang("Previous entry"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            int thisRow = panel.mainTable.findEntry(entry);
+            int newRow = -1;
+
+            if ((thisRow - 1) >= 0)
+                newRow = thisRow - 1;
+            else if (thisRow != (panel.database.getEntryCount() - 1))
+                newRow = panel.database.getEntryCount() - 1;
+            else
+                return; // newRow is still -1, so we can assume the database has
+                        // only one entry.
+            // id = panel.tableModel.getIdForRow(newRow);
+            // switchTo(id);
+
+            scrollTo(newRow);
+            panel.mainTable.setRowSelectionInterval(newRow, newRow);
+
+        }
+    }
+
+    class GenerateKeyAction extends AbstractAction {
+        JabRefFrame parent;
+
+        BibtexEntry selectedEntry;
+
+        public GenerateKeyAction(JabRefFrame parentFrame) {
+            super(Globals.lang("Generate BibTeX key"), GUIGlobals.getImage("makeKey"));
+            parent = parentFrame;
+
+            // selectedEntry = newEntry ;
+            putValue(SHORT_DESCRIPTION, Globals.lang("Generate BibTeX key"));
+
+            // putValue(MNEMONIC_KEY, GUIGlobals.showGenKeyCode);
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            // 1. get Bitexentry for selected index (already have)
+            // 2. run the LabelMaker by it
+            try {
+                // Store the current edit in case this action is called during the
+                // editing of a field:
+                storeCurrentEdit();
+
+                // this updates the table automatically, on close, but not
+                // within the tab
+                Object oldValue = entry.getField(BibtexFields.KEY_FIELD);
+
+                if (oldValue != null) {
+                   if (Globals.prefs.getBoolean("avoidOverwritingKey")) {
+                       panel.output(Globals.lang("Not overwriting existing key. To change this setting, open Options -> Prefererences -> BibTeX key generator"));
+                       return;
+                   }
+                   else if (Globals.prefs.getBoolean("warnBeforeOverwritingKey")) {
+                       CheckBoxMessage cbm = new CheckBoxMessage(Globals.lang("The current BibTeX key will be overwritten. Continue?"),
+                               Globals.lang("Disable this confirmation dialog"), false);
+                       int answer = JOptionPane.showConfirmDialog(frame, cbm, Globals.lang("Overwrite key"),
+                               JOptionPane.YES_NO_OPTION);
+                       if (cbm.isSelected())
+                           Globals.prefs.putBoolean("warnBeforeOverwritingKey", false);
+                       if (answer == JOptionPane.NO_OPTION) {
+                           // Ok, break off the operation.
+                           return;
+                       }
+                   }
+                }
+
+                // entry = frame.labelMaker.applyRule(entry, panel.database) ;
+                LabelPatternUtil.makeLabel(panel.metaData, panel.database, entry);
+
+                // Store undo information:
+                panel.undoManager.addEdit(new UndoableKeyChange(panel.database, entry.getId(),
+                    (String) oldValue, entry.getField(BibtexFields.KEY_FIELD)));
+
+                // here we update the field
+                String bibtexKeyData = entry.getField(BibtexFields.KEY_FIELD);
+
+                // set the field named for "bibtexkey"
+                setField(BibtexFields.KEY_FIELD, bibtexKeyData);
+                updateSource();
+                panel.markBaseChanged();
+            } catch (Throwable t) {
+                System.err.println("error setting key: " + t);
+            }
+        }
+    }
+
+    class UndoAction extends AbstractAction {
+        public UndoAction() {
+            super("Undo", GUIGlobals.getImage("undo"));
+            putValue(SHORT_DESCRIPTION, "Undo");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            try {
+                panel.runCommand("undo");
+            } catch (Throwable ex) {
+            }
+        }
+    }
+
+    class RedoAction extends AbstractAction {
+        public RedoAction() {
+            super("Undo", GUIGlobals.getImage("redo"));
+            putValue(SHORT_DESCRIPTION, "Redo");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            try {
+                panel.runCommand("redo");
+            } catch (Throwable ex) {
+            }
+        }
+    }
+
+    class SaveDatabaseAction extends AbstractAction {
+        public SaveDatabaseAction() {
+            super("Save database");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            Object activeTab = tabs.get(tabbed.getSelectedIndex());
+            if (activeTab instanceof EntryEditorTab) {
+                // Normal panel.
+                EntryEditorTab fp = (EntryEditorTab) activeTab;
+                FieldEditor fe = fp.getActive();
+                fe.clearAutoCompleteSuggestion();
+                updateField(fe);
+            } else
+                // Source panel.
+                updateField(activeTab);
+
+            try {
+                panel.runCommand("save");
+            } catch (Throwable ex) {
+            }
+        }
+    }
+
+    class ExternalViewerListener extends MouseAdapter {
+        public void mouseClicked(MouseEvent evt) {
+            if (evt.getClickCount() == 2) {
+                FieldTextArea tf = (FieldTextArea) evt.getSource();
+
+                if (tf.getText().equals(""))
+                    return;
+
+                tf.selectAll();
+
+                String link = tf.getText(); // get selected ? String
+
+                // getSelectedText()
+                try {
+                    Util.openExternalViewer(panel.metaData(), link, tf.getFieldName());
+                } catch (IOException ex) {
+                    System.err.println("Error opening file.");
+                }
+            }
+        }
+    }
+
+    class ChangeTypeAction extends AbstractAction {
+        BibtexEntryType type;
+
+        BasePanel panel;
+
+        public ChangeTypeAction(BibtexEntryType type, BasePanel bp) {
+            super(type.getName());
+            this.type = type;
+            panel = bp;
+        }
+
+        public void actionPerformed(ActionEvent evt) {
+            panel.changeType(entry, type);
+        }
+    }
+
+    private void warnDuplicateBibtexkey() {
+        panel.output(Globals.lang("Duplicate BibTeX key. Grouping may not work for this entry."));
+
+        /*if (prefs.getBoolean("dialogWarningForDuplicateKey")) {
+            // JZTODO lyrics
+            CheckBoxMessage jcb = new CheckBoxMessage(Globals.lang("Warning") + ": "
+                + Globals.lang("Duplicate BibTeX key. Grouping may not work for this entry."),
+                Globals.lang("Disable this warning dialog"), false);
+            JOptionPane.showMessageDialog(frame, jcb, Globals.lang("Warning"),
+                JOptionPane.WARNING_MESSAGE);
+
+            if (jcb.isSelected())
+                prefs.putBoolean("dialogWarningForDuplicateKey", false);
+        }*/
+    }
+
+    private void warnEmptyBibtexkey() {
+        // JZTODO lyrics
+        panel.output(Globals.lang("Empty BibTeX key. Grouping may not work for this entry."));
+
+        /*if (prefs.getBoolean("dialogWarningForEmptyKey")) {
+            // JZTODO lyrics
+            CheckBoxMessage jcb = new CheckBoxMessage(Globals.lang("Warning") + ": "
+                + Globals.lang("Empty BibTeX key. Grouping may not work for this entry."), Globals
+                .lang("Disable this warning dialog"), false);
+            JOptionPane.showMessageDialog(frame, jcb, Globals.lang("Warning"),
+                JOptionPane.WARNING_MESSAGE);
+
+            if (jcb.isSelected())
+                prefs.putBoolean("dialogWarningForEmptyKey", false);
+        }*/
+    }
+
+
+    class AutoSetFileAction extends AbstractAction {
+        public AutoSetFileAction() {
+            putValue(SMALL_ICON, GUIGlobals.getImage("autoGroup"));
+            putValue(SHORT_DESCRIPTION, Globals.lang("Automatically set file links for this entry")
+                    +" (Alt-F)");
+        }
+
+        public void actionPerformed(ActionEvent event) {
+            JDialog diag = new JDialog(frame, true);
+            final FileListTableModel tableModel = new FileListTableModel();
+            tableModel.setContent(entry.getField(GUIGlobals.FILE_FIELD));
+            FileListEditor.autoSetLinks(entry, tableModel, panel.metaData(), new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    if (e.getID() > 0) {
+                        entry.setField(GUIGlobals.FILE_FIELD, tableModel.getStringRepresentation());
+                        frame.output(Globals.lang("Finished autosetting external links."));
+                    }
+                    else frame.output(Globals.lang("Finished autosetting external links.")
+                        +" "+Globals.lang("No files found."));
+                }
+            }, diag);
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/EntryEditorPrefsTab.java b/src/java/net/sf/jabref/EntryEditorPrefsTab.java
index 1ff0589..63811db 100644
--- a/src/java/net/sf/jabref/EntryEditorPrefsTab.java
+++ b/src/java/net/sf/jabref/EntryEditorPrefsTab.java
@@ -1,244 +1,244 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.Insets;
-
-import javax.swing.*;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import net.sf.jabref.autocompleter.AbstractAutoCompleter;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.CellConstraints;
-import com.jgoodies.forms.layout.FormLayout;
-
-public class EntryEditorPrefsTab extends JPanel implements PrefsTab {
-
-    private JCheckBox autoOpenForm, showSource,
-        defSource, editSource, disableOnMultiple, autoComplete;
-    private JRadioButton autoCompBoth, autoCompFF, autoCompLF, 
-    	autoCompFirstNameMode_Full, autoCompFirstNameMode_Abbr, autoCompFirstNameMode_Both;
-    boolean oldAutoCompFF, oldAutoCompLF,
-    	oldAutoCompFModeAbbr, oldAutoCompFModeFull;
-    private JSpinner shortestToComplete;
-
-    private JTextField autoCompFields;
-    JabRefPreferences _prefs;
-    JabRefFrame _frame;
-    
-    private void setAutoCompleteElementsEnabled(boolean enabled) {
-        autoCompFields.setEnabled(enabled);
-        autoCompLF.setEnabled(enabled);
-        autoCompFF.setEnabled(enabled);
-        autoCompBoth.setEnabled(enabled);
-        autoCompFirstNameMode_Abbr.setEnabled(enabled);
-        autoCompFirstNameMode_Full.setEnabled(enabled);
-        autoCompFirstNameMode_Both.setEnabled(enabled);
-        shortestToComplete.setEnabled(enabled);
-    }
-
-    public EntryEditorPrefsTab(JabRefFrame frame, JabRefPreferences prefs) {
-        _prefs = prefs;
-        _frame = frame;
-        setLayout(new BorderLayout());
-
-
-        autoOpenForm = new JCheckBox(Globals.lang("Open editor when a new entry is created"));
-        defSource = new JCheckBox(Globals.lang("Show BibTeX source by default"));
-        showSource = new JCheckBox(Globals.lang("Show BibTeX source panel"));
-        editSource = new JCheckBox(Globals.lang("Enable source editing"));
-        disableOnMultiple = new JCheckBox(Globals.lang("Disable entry editor when multiple entries are selected"));
-        autoComplete = new JCheckBox(Globals.lang("Enable word/name autocompletion"));
-        
-        shortestToComplete = new JSpinner(new SpinnerNumberModel(prefs.getInt(JabRefPreferences.SHORTEST_TO_COMPLETE), 1, 5, 1));
-        
-        // allowed name formats
-        autoCompFF = new JRadioButton(Globals.lang("Autocomplete names in 'Firstname Lastname' format only"));
-        autoCompLF = new JRadioButton(Globals.lang("Autocomplete names in 'Lastname, Firstname' format only"));
-        autoCompBoth = new JRadioButton(Globals.lang("Autocomplete names in both formats"));
-        ButtonGroup bg = new ButtonGroup();
-        bg.add(autoCompLF);
-        bg.add(autoCompFF);
-        bg.add(autoCompBoth);
-        
-        // treatment of first name
-        autoCompFirstNameMode_Full = new JRadioButton(Globals.lang("Use full firstname whenever possible"));
-        autoCompFirstNameMode_Abbr = new JRadioButton(Globals.lang("Use abbreviated firstname whenever possible"));
-        autoCompFirstNameMode_Both = new JRadioButton(Globals.lang("Use abbreviated and full firstname"));
-        ButtonGroup bg_firstNameMode = new ButtonGroup();
-        bg_firstNameMode.add(autoCompFirstNameMode_Full);
-        bg_firstNameMode.add(autoCompFirstNameMode_Abbr);
-        bg_firstNameMode.add(autoCompFirstNameMode_Both);
-        
-        autoCompFields = new JTextField(40);
-        Insets marg = new Insets(0,12,3,0);
-        editSource.setMargin(marg);
-        defSource.setMargin(marg);
-        // We need a listener on showSource to enable and disable the source panel-related choices:
-        showSource.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent event) {
-                defSource.setEnabled(showSource.isSelected());
-                editSource.setEnabled(showSource.isSelected());
-            }
-        }
-        );
-        // We need a listener on autoComplete to enable and disable the
-        // autoCompFields text field:
-        autoComplete.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent event) {
-            	setAutoCompleteElementsEnabled(autoComplete.isSelected());
-            }
-        }
-        );
-
-        FormLayout layout = new FormLayout
-                ("8dlu, left:pref, 8dlu, fill:150dlu, 4dlu, fill:pref", // 4dlu, left:pref, 4dlu",
-                 // rows  1 to 10
-                 "pref, 6dlu, pref, 6dlu, pref, 6dlu, pref, 6dlu, pref, 6dlu, " +
-                 // rows 11 to 20
-                 "pref, 6dlu, pref, 6dlu, pref, 6dlu, pref, pref, pref, pref, " +
-                 // rows 21 to 26
-                 "6dlu, pref, pref, pref, pref");
-        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-        CellConstraints cc = new CellConstraints();
-        builder.addSeparator(Globals.lang("Editor options"), cc.xyw(1, 1, 5));
-        builder.add(autoOpenForm, cc.xy(2, 3));
-        builder.add(disableOnMultiple, cc.xy(2, 5));
-        builder.add(showSource, cc.xy(2, 7));
-        builder.add(defSource, cc.xy(2, 9));
-        
-        builder.addSeparator(Globals.lang("Autocompletion options"), cc.xyw(1, 11, 5));
-        builder.add(autoComplete, cc.xy(2, 13));
-        
-        DefaultFormBuilder builder3 = new DefaultFormBuilder(new FormLayout("left:pref, 4dlu, fill:150dlu",""));
-        JLabel label = new JLabel(Globals.lang("Use autocompletion for the following fields")+":");
-        builder3.append(label);
-        builder3.append(autoCompFields);
-        JLabel label2 = new JLabel(Globals.lang("Autocomplete after following number of characters")+":");
-        builder3.append(label2);
-        builder3.append(shortestToComplete);
-        builder.add(builder3.getPanel(), cc.xyw(2, 15, 3));
-
-        builder.addSeparator(Globals.lang("Name format used for autocompletion"), cc.xyw(2, 17, 4));
-        builder.add(autoCompFF, cc.xy(2,18));
-        builder.add(autoCompLF, cc.xy(2,19));
-        builder.add(autoCompBoth, cc.xy(2,20));
-        
-        builder.addSeparator(Globals.lang("Treatment of first names"), cc.xyw(2, 22, 4));
-        builder.add(autoCompFirstNameMode_Abbr, cc.xy(2,23));
-        builder.add(autoCompFirstNameMode_Full, cc.xy(2,24));
-        builder.add(autoCompFirstNameMode_Both, cc.xy(2,25));
-        
-        JPanel pan = builder.getPanel();
-        pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-        add(pan, BorderLayout.CENTER);
-    }
-
-    public void setValues() {
-        autoOpenForm.setSelected(_prefs.getBoolean("autoOpenForm"));
-        defSource.setSelected(_prefs.getBoolean("defaultShowSource"));
-        showSource.setSelected(_prefs.getBoolean("showSource"));
-        editSource.setSelected(_prefs.getBoolean("enableSourceEditing"));
-        disableOnMultiple.setSelected(_prefs.getBoolean("disableOnMultipleSelection"));
-        autoComplete.setSelected(_prefs.getBoolean("autoComplete"));
-        autoCompFields.setText(_prefs.get("autoCompleteFields"));
-        shortestToComplete.setValue(_prefs.getInt(JabRefPreferences.SHORTEST_TO_COMPLETE));
-        
-        if (_prefs.getBoolean("autoCompFF"))
-            autoCompFF.setSelected(true);
-        else if (_prefs.getBoolean("autoCompLF"))
-            autoCompLF.setSelected(true);
-        else
-            autoCompBoth.setSelected(true);
-        oldAutoCompFF = autoCompFF.isSelected();
-        oldAutoCompLF = autoCompLF.isSelected();
-
-        if (_prefs.get(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE).equals(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_ABBR))
-        	autoCompFirstNameMode_Abbr.setSelected(true);
-        else if (_prefs.get(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE).equals(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_FULL))
-        	autoCompFirstNameMode_Full.setSelected(true);
-        else
-        	autoCompFirstNameMode_Both.setSelected(true);
-        // one field less than the option is enough. If one filed changes, another one also changes.
-        oldAutoCompFModeAbbr = autoCompFirstNameMode_Abbr.isSelected();
-        oldAutoCompFModeFull = autoCompFirstNameMode_Full.isSelected();
-
-        // Two choices only make sense when the source panel is visible:
-        defSource.setEnabled(showSource.isSelected());
-        editSource.setEnabled(showSource.isSelected());
-        // Autocomplete fields is only enabled when autocompletion is:
-        setAutoCompleteElementsEnabled(autoComplete.isSelected());
-    }
-
-    public void storeSettings() {
-        _prefs.putBoolean("autoOpenForm", autoOpenForm.isSelected());
-        _prefs.putBoolean("defaultShowSource", defSource.isSelected());
-        _prefs.putBoolean("enableSourceEditing", editSource.isSelected());
-        _prefs.putBoolean("disableOnMultipleSelection", disableOnMultiple.isSelected());
-        // We want to know if the following settings have been modified:
-        boolean oldAutoComplete = _prefs.getBoolean("autoComplete");
-        boolean oldShowSource = _prefs.getBoolean("showSource");
-        String oldAutoCompFields = _prefs.get("autoCompleteFields");
-        _prefs.putInt(JabRefPreferences.SHORTEST_TO_COMPLETE, (Integer)shortestToComplete.getValue());
-        _prefs.putBoolean("autoComplete", autoComplete.isSelected());
-        _prefs.put("autoCompleteFields", autoCompFields.getText());
-        _prefs.putBoolean("showSource", showSource.isSelected());
-        if (autoCompBoth.isSelected()) {
-            _prefs.putBoolean("autoCompFF", false);
-            _prefs.putBoolean("autoCompLF", false);
-        }
-        else if (autoCompFF.isSelected()) {
-            _prefs.putBoolean("autoCompFF", true);
-            _prefs.putBoolean("autoCompLF", false);
-        }
-        else {
-            _prefs.putBoolean("autoCompFF", false);
-            _prefs.putBoolean("autoCompLF", true);
-        }
-        if (autoCompFirstNameMode_Abbr.isSelected())
-        	_prefs.put(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE, JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_ABBR);
-        else if (autoCompFirstNameMode_Full.isSelected())
-        	_prefs.put(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE, JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_FULL);
-        else
-        	_prefs.put(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE, JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_BOTH);
-        
-        // We need to remove all entry editors from cache if the source panel setting
-        // or the autocompletion settings have been changed:
-        if ((oldShowSource != showSource.isSelected()) || (oldAutoComplete != autoComplete.isSelected())
-                || (!oldAutoCompFields.equals(autoCompFields.getText())) ||
-                (oldAutoCompFF != autoCompFF.isSelected()) || (oldAutoCompLF != autoCompLF.isSelected()) ||
-                (oldAutoCompFModeAbbr != autoCompFirstNameMode_Abbr.isSelected()) ||
-                (oldAutoCompFModeFull != autoCompFirstNameMode_Full.isSelected())) {
-            for (int j=0; j<_frame.getTabbedPane().getTabCount(); j++) {
-	            BasePanel bp = (BasePanel)_frame.getTabbedPane().getComponentAt(j);
-	            bp.entryEditors.clear();
-            }
-        }
-        // the autocompleter has to be updated to the new min length to complete 
-        AbstractAutoCompleter.SHORTEST_TO_COMPLETE = (Integer)shortestToComplete.getValue();
-    }
-
-    public boolean readyToClose() {
-        return true;
-    }
-
-	public String getTabName() {
-		return Globals.lang("Entry editor");
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.Insets;
+
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.sf.jabref.autocompleter.AbstractAutoCompleter;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+public class EntryEditorPrefsTab extends JPanel implements PrefsTab {
+
+    private JCheckBox autoOpenForm, showSource,
+        defSource, editSource, disableOnMultiple, autoComplete;
+    private JRadioButton autoCompBoth, autoCompFF, autoCompLF, 
+    	autoCompFirstNameMode_Full, autoCompFirstNameMode_Abbr, autoCompFirstNameMode_Both;
+    boolean oldAutoCompFF, oldAutoCompLF,
+    	oldAutoCompFModeAbbr, oldAutoCompFModeFull;
+    private JSpinner shortestToComplete;
+
+    private JTextField autoCompFields;
+    JabRefPreferences _prefs;
+    JabRefFrame _frame;
+    
+    private void setAutoCompleteElementsEnabled(boolean enabled) {
+        autoCompFields.setEnabled(enabled);
+        autoCompLF.setEnabled(enabled);
+        autoCompFF.setEnabled(enabled);
+        autoCompBoth.setEnabled(enabled);
+        autoCompFirstNameMode_Abbr.setEnabled(enabled);
+        autoCompFirstNameMode_Full.setEnabled(enabled);
+        autoCompFirstNameMode_Both.setEnabled(enabled);
+        shortestToComplete.setEnabled(enabled);
+    }
+
+    public EntryEditorPrefsTab(JabRefFrame frame, JabRefPreferences prefs) {
+        _prefs = prefs;
+        _frame = frame;
+        setLayout(new BorderLayout());
+
+
+        autoOpenForm = new JCheckBox(Globals.lang("Open editor when a new entry is created"));
+        defSource = new JCheckBox(Globals.lang("Show BibTeX source by default"));
+        showSource = new JCheckBox(Globals.lang("Show BibTeX source panel"));
+        editSource = new JCheckBox(Globals.lang("Enable source editing"));
+        disableOnMultiple = new JCheckBox(Globals.lang("Disable entry editor when multiple entries are selected"));
+        autoComplete = new JCheckBox(Globals.lang("Enable word/name autocompletion"));
+        
+        shortestToComplete = new JSpinner(new SpinnerNumberModel(prefs.getInt(JabRefPreferences.SHORTEST_TO_COMPLETE), 1, 5, 1));
+        
+        // allowed name formats
+        autoCompFF = new JRadioButton(Globals.lang("Autocomplete names in 'Firstname Lastname' format only"));
+        autoCompLF = new JRadioButton(Globals.lang("Autocomplete names in 'Lastname, Firstname' format only"));
+        autoCompBoth = new JRadioButton(Globals.lang("Autocomplete names in both formats"));
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(autoCompLF);
+        bg.add(autoCompFF);
+        bg.add(autoCompBoth);
+        
+        // treatment of first name
+        autoCompFirstNameMode_Full = new JRadioButton(Globals.lang("Use full firstname whenever possible"));
+        autoCompFirstNameMode_Abbr = new JRadioButton(Globals.lang("Use abbreviated firstname whenever possible"));
+        autoCompFirstNameMode_Both = new JRadioButton(Globals.lang("Use abbreviated and full firstname"));
+        ButtonGroup bg_firstNameMode = new ButtonGroup();
+        bg_firstNameMode.add(autoCompFirstNameMode_Full);
+        bg_firstNameMode.add(autoCompFirstNameMode_Abbr);
+        bg_firstNameMode.add(autoCompFirstNameMode_Both);
+        
+        autoCompFields = new JTextField(40);
+        Insets marg = new Insets(0,12,3,0);
+        editSource.setMargin(marg);
+        defSource.setMargin(marg);
+        // We need a listener on showSource to enable and disable the source panel-related choices:
+        showSource.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent event) {
+                defSource.setEnabled(showSource.isSelected());
+                editSource.setEnabled(showSource.isSelected());
+            }
+        }
+        );
+        // We need a listener on autoComplete to enable and disable the
+        // autoCompFields text field:
+        autoComplete.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent event) {
+            	setAutoCompleteElementsEnabled(autoComplete.isSelected());
+            }
+        }
+        );
+
+        FormLayout layout = new FormLayout
+                ("8dlu, left:pref, 8dlu, fill:150dlu, 4dlu, fill:pref", // 4dlu, left:pref, 4dlu",
+                 // rows  1 to 10
+                 "pref, 6dlu, pref, 6dlu, pref, 6dlu, pref, 6dlu, pref, 6dlu, " +
+                 // rows 11 to 20
+                 "pref, 6dlu, pref, 6dlu, pref, 6dlu, pref, pref, pref, pref, " +
+                 // rows 21 to 26
+                 "6dlu, pref, pref, pref, pref");
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+        CellConstraints cc = new CellConstraints();
+        builder.addSeparator(Globals.lang("Editor options"), cc.xyw(1, 1, 5));
+        builder.add(autoOpenForm, cc.xy(2, 3));
+        builder.add(disableOnMultiple, cc.xy(2, 5));
+        builder.add(showSource, cc.xy(2, 7));
+        builder.add(defSource, cc.xy(2, 9));
+        
+        builder.addSeparator(Globals.lang("Autocompletion options"), cc.xyw(1, 11, 5));
+        builder.add(autoComplete, cc.xy(2, 13));
+        
+        DefaultFormBuilder builder3 = new DefaultFormBuilder(new FormLayout("left:pref, 4dlu, fill:150dlu",""));
+        JLabel label = new JLabel(Globals.lang("Use autocompletion for the following fields")+":");
+        builder3.append(label);
+        builder3.append(autoCompFields);
+        JLabel label2 = new JLabel(Globals.lang("Autocomplete after following number of characters")+":");
+        builder3.append(label2);
+        builder3.append(shortestToComplete);
+        builder.add(builder3.getPanel(), cc.xyw(2, 15, 3));
+
+        builder.addSeparator(Globals.lang("Name format used for autocompletion"), cc.xyw(2, 17, 4));
+        builder.add(autoCompFF, cc.xy(2,18));
+        builder.add(autoCompLF, cc.xy(2,19));
+        builder.add(autoCompBoth, cc.xy(2,20));
+        
+        builder.addSeparator(Globals.lang("Treatment of first names"), cc.xyw(2, 22, 4));
+        builder.add(autoCompFirstNameMode_Abbr, cc.xy(2,23));
+        builder.add(autoCompFirstNameMode_Full, cc.xy(2,24));
+        builder.add(autoCompFirstNameMode_Both, cc.xy(2,25));
+        
+        JPanel pan = builder.getPanel();
+        pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        add(pan, BorderLayout.CENTER);
+    }
+
+    public void setValues() {
+        autoOpenForm.setSelected(_prefs.getBoolean("autoOpenForm"));
+        defSource.setSelected(_prefs.getBoolean("defaultShowSource"));
+        showSource.setSelected(_prefs.getBoolean("showSource"));
+        editSource.setSelected(_prefs.getBoolean("enableSourceEditing"));
+        disableOnMultiple.setSelected(_prefs.getBoolean("disableOnMultipleSelection"));
+        autoComplete.setSelected(_prefs.getBoolean("autoComplete"));
+        autoCompFields.setText(_prefs.get("autoCompleteFields"));
+        shortestToComplete.setValue(_prefs.getInt(JabRefPreferences.SHORTEST_TO_COMPLETE));
+        
+        if (_prefs.getBoolean("autoCompFF"))
+            autoCompFF.setSelected(true);
+        else if (_prefs.getBoolean("autoCompLF"))
+            autoCompLF.setSelected(true);
+        else
+            autoCompBoth.setSelected(true);
+        oldAutoCompFF = autoCompFF.isSelected();
+        oldAutoCompLF = autoCompLF.isSelected();
+
+        if (_prefs.get(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE).equals(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_ABBR))
+        	autoCompFirstNameMode_Abbr.setSelected(true);
+        else if (_prefs.get(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE).equals(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_FULL))
+        	autoCompFirstNameMode_Full.setSelected(true);
+        else
+        	autoCompFirstNameMode_Both.setSelected(true);
+        // one field less than the option is enough. If one filed changes, another one also changes.
+        oldAutoCompFModeAbbr = autoCompFirstNameMode_Abbr.isSelected();
+        oldAutoCompFModeFull = autoCompFirstNameMode_Full.isSelected();
+
+        // Two choices only make sense when the source panel is visible:
+        defSource.setEnabled(showSource.isSelected());
+        editSource.setEnabled(showSource.isSelected());
+        // Autocomplete fields is only enabled when autocompletion is:
+        setAutoCompleteElementsEnabled(autoComplete.isSelected());
+    }
+
+    public void storeSettings() {
+        _prefs.putBoolean("autoOpenForm", autoOpenForm.isSelected());
+        _prefs.putBoolean("defaultShowSource", defSource.isSelected());
+        _prefs.putBoolean("enableSourceEditing", editSource.isSelected());
+        _prefs.putBoolean("disableOnMultipleSelection", disableOnMultiple.isSelected());
+        // We want to know if the following settings have been modified:
+        boolean oldAutoComplete = _prefs.getBoolean("autoComplete");
+        boolean oldShowSource = _prefs.getBoolean("showSource");
+        String oldAutoCompFields = _prefs.get("autoCompleteFields");
+        _prefs.putInt(JabRefPreferences.SHORTEST_TO_COMPLETE, (Integer)shortestToComplete.getValue());
+        _prefs.putBoolean("autoComplete", autoComplete.isSelected());
+        _prefs.put("autoCompleteFields", autoCompFields.getText());
+        _prefs.putBoolean("showSource", showSource.isSelected());
+        if (autoCompBoth.isSelected()) {
+            _prefs.putBoolean("autoCompFF", false);
+            _prefs.putBoolean("autoCompLF", false);
+        }
+        else if (autoCompFF.isSelected()) {
+            _prefs.putBoolean("autoCompFF", true);
+            _prefs.putBoolean("autoCompLF", false);
+        }
+        else {
+            _prefs.putBoolean("autoCompFF", false);
+            _prefs.putBoolean("autoCompLF", true);
+        }
+        if (autoCompFirstNameMode_Abbr.isSelected())
+        	_prefs.put(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE, JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_ABBR);
+        else if (autoCompFirstNameMode_Full.isSelected())
+        	_prefs.put(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE, JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_FULL);
+        else
+        	_prefs.put(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE, JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_BOTH);
+        
+        // We need to remove all entry editors from cache if the source panel setting
+        // or the autocompletion settings have been changed:
+        if ((oldShowSource != showSource.isSelected()) || (oldAutoComplete != autoComplete.isSelected())
+                || (!oldAutoCompFields.equals(autoCompFields.getText())) ||
+                (oldAutoCompFF != autoCompFF.isSelected()) || (oldAutoCompLF != autoCompLF.isSelected()) ||
+                (oldAutoCompFModeAbbr != autoCompFirstNameMode_Abbr.isSelected()) ||
+                (oldAutoCompFModeFull != autoCompFirstNameMode_Full.isSelected())) {
+            for (int j=0; j<_frame.getTabbedPane().getTabCount(); j++) {
+	            BasePanel bp = (BasePanel)_frame.getTabbedPane().getComponentAt(j);
+	            bp.entryEditors.clear();
+            }
+        }
+        // the autocompleter has to be updated to the new min length to complete 
+        AbstractAutoCompleter.SHORTEST_TO_COMPLETE = (Integer)shortestToComplete.getValue();
+    }
+
+    public boolean readyToClose() {
+        return true;
+    }
+
+	public String getTabName() {
+		return Globals.lang("Entry editor");
+	}
+}
diff --git a/src/java/net/sf/jabref/EntryEditorTab.java b/src/java/net/sf/jabref/EntryEditorTab.java
index ba25473..b7fc91b 100644
--- a/src/java/net/sf/jabref/EntryEditorTab.java
+++ b/src/java/net/sf/jabref/EntryEditorTab.java
@@ -1,467 +1,467 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.AWTKeyStroke;
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.KeyboardFocusManager;
-import java.awt.Rectangle;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.swing.ActionMap;
-import javax.swing.InputMap;
-import javax.swing.JComponent;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.KeyStroke;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.text.JTextComponent;
-
-import net.sf.jabref.autocompleter.AbstractAutoCompleter;
-import net.sf.jabref.gui.AutoCompleteListener;
-import net.sf.jabref.gui.FileListEditor;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * A single tab displayed in the EntryEditor holding several FieldEditors.
- */
-public class EntryEditorTab {
-
-	private JPanel panel = new JPanel();
-
-	private JScrollPane scrollPane = new JScrollPane(panel,
-			JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-
-	private String[] fields;
-
-	private EntryEditor parent;
-
-	private HashMap<String, FieldEditor> editors = new HashMap<String, FieldEditor>();
-
-	private FieldEditor activeField = null;
-
-    protected EntryEditorTab() {
-
-    }
-
-	public EntryEditorTab(JabRefFrame frame, BasePanel panel, List<String> fields, EntryEditor parent,
-                          boolean addKeyField, String name) {
-		if (fields != null)
-			this.fields = fields.toArray(new String[0]);
-		else
-			this.fields = new String[] {};
-
-		this.parent = parent;
-
-		setupPanel(frame, panel, addKeyField, name);
-
-		/*
-		 * The following line makes sure focus cycles inside tab instead of
-		 * being lost to other parts of the frame:
-		 */
-		scrollPane.setFocusCycleRoot(true);
-	}
-
-
-    void setupPanel(JabRefFrame frame, BasePanel bPanel, boolean addKeyField, String title) {
-    	
-    	InputMap im = panel.getInputMap(JComponent.WHEN_FOCUSED);
-		ActionMap am = panel.getActionMap();
-
-		im.put(Globals.prefs.getKey("Entry editor, previous entry"), "prev");
-		am.put("prev", parent.prevEntryAction);
-		im.put(Globals.prefs.getKey("Entry editor, next entry"), "next");
-		am.put("next", parent.nextEntryAction);
-
-		im.put(Globals.prefs.getKey("Entry editor, store field"), "store");
-		am.put("store", parent.storeFieldAction);
-		im.put(Globals.prefs.getKey("Entry editor, next panel"), "right");
-		im.put(Globals.prefs.getKey("Entry editor, next panel 2"), "right");
-		am.put("left", parent.switchLeftAction);
-		im.put(Globals.prefs.getKey("Entry editor, previous panel"), "left");
-		im.put(Globals.prefs.getKey("Entry editor, previous panel 2"), "left");
-		am.put("right", parent.switchRightAction);
-		im.put(Globals.prefs.getKey("Help"), "help");
-		am.put("help", parent.helpAction);
-		im.put(Globals.prefs.getKey("Save database"), "save");
-		am.put("save", parent.saveDatabaseAction);
-		im.put(Globals.prefs.getKey("Next tab"), "nexttab");
-		am.put("nexttab", parent.frame.nextTab);
-		im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
-		am.put("prevtab", parent.frame.prevTab);
-    	
-    	  	
-        panel.setName(title);
-        //String rowSpec = "left:pref, 4dlu, fill:pref:grow, 4dlu, fill:pref";
-        String colSpec = "fill:pref, 1dlu, fill:pref:grow, 1dlu, fill:pref";
-        StringBuffer sb = new StringBuffer();
-        for (int i = 0; i < fields.length; i++) {
-            sb.append("fill:pref:grow, ");
-        }
-        if (addKeyField)
-            sb.append("4dlu, fill:pref");
-        else
-            sb.delete(sb.length()-2, sb.length());
-        String rowSpec = sb.toString();
-
-        DefaultFormBuilder builder = new DefaultFormBuilder
-                (new FormLayout(colSpec, rowSpec), panel);
-
-        for (int i = 0; i < fields.length; i++) {
-            // Create the text area:
-            int editorType = BibtexFields.getEditorType(fields[i]);
-
-            final FieldEditor ta;
-            int defaultHeight;
-            int wHeight = (int) (50.0 * BibtexFields.getFieldWeight(fields[i]));
-            if (editorType == GUIGlobals.FILE_LIST_EDITOR) {
-                ta = new FileListEditor(frame, bPanel.metaData(), fields[i], null, parent);
-                defaultHeight = 0;
-            }
-            else {
-                ta = new FieldTextArea(fields[i], null);
-                frame.getSearchManager().addSearchListener((FieldTextArea)ta);
-                defaultHeight = ta.getPane().getPreferredSize().height;
-            }
-            //ta.addUndoableEditListener(bPanel.undoListener);
-            
-            JComponent ex = parent.getExtra(fields[i], ta);
-
-            // Add autocompleter listener, if required for this field:
-            AbstractAutoCompleter autoComp = bPanel.getAutoCompleter(fields[i]);
-            AutoCompleteListener acl = null;
-            if (autoComp != null) {
-                acl = new AutoCompleteListener(autoComp);
-            }
-            setupJTextComponent(ta.getTextComponent(), acl);
-            ta.setAutoCompleteListener(acl);
-
-            // Store the editor for later reference:
-            editors.put(fields[i], ta);
-            if (i == 0)
-                activeField = ta;
-            //System.out.println(fields[i]+": "+BibtexFields.getFieldWeight(fields[i]));
-            ta.getPane().setPreferredSize(new Dimension(100, Math.max(defaultHeight, wHeight)));
-            builder.append(ta.getLabel());
-            if (ex == null)
-                builder.append(ta.getPane(), 3);
-            else {
-                builder.append(ta.getPane());
-                JPanel pan = new JPanel();
-                pan.setLayout(new BorderLayout());
-                pan.add(ex, BorderLayout.NORTH);
-                builder.append(pan);
-            }
-            builder.nextLine();
-        }
-
-        // Add the edit field for Bibtex-key.
-		if (addKeyField) {
-			final FieldTextField tf = new FieldTextField(BibtexFields.KEY_FIELD, parent
-				.getEntry().getField(BibtexFields.KEY_FIELD), true);
-            //tf.addUndoableEditListener(bPanel.undoListener);
-			setupJTextComponent(tf, null);
-            
-			editors.put("bibtexkey", tf);
-			/*
-			 * If the key field is the only field, we should have only one
-			 * editor, and this one should be set as active initially:
-			 */
-			if (editors.size() == 1)
-				activeField = tf;
-            builder.nextLine();
-			builder.append(tf.getLabel());
-			builder.append(tf, 3);
-		}
-    }
-
-
-	BibtexEntry entry;
-
-	public BibtexEntry getEntry() {
-		return entry;
-	}
-
-	boolean isFieldModified(FieldEditor f) {
-		String text = f.getText().trim();
-
-		if (text.length() == 0) {
-			return getEntry().getField(f.getFieldName()) != null;
-		} else {
-			Object entryValue = getEntry().getField(f.getFieldName());
-			return entryValue == null || !entryValue.toString().equals(text);
-		}
-	}
-
-	public void markIfModified(FieldEditor f) {
-		// Only mark as changed if not already is and the field was indeed
-		// modified
-		if (!updating && !parent.panel.isBaseChanged() && isFieldModified(f)) {
-			markBaseChanged();
-		}
-	}
-
-	void markBaseChanged() {
-		parent.panel.markBaseChanged();
-	}
-
-	/**
-	 * Only sets the activeField variable but does not focus it.
-	 * 
-	 * Call activate afterwards.
-	 * 
-	 * @param c
-	 */
-	public void setActive(FieldEditor c) {
-		activeField = c;
-	}
-
-	public FieldEditor getActive() {
-		return activeField;
-	}
-
-	public List<String> getFields() {
-		return java.util.Arrays.asList(fields);
-	}
-
-	public void activate() {
-		if (activeField != null){
-			/**
-			 * Corrected to fix [ 1594169 ] Entry editor: navigation between panels
-			 */
-			new FocusRequester(activeField.getTextComponent());
-		}
-	}
-
-	/**
-	 * Reset all fields from the data in the BibtexEntry.
-	 * 
-	 */
-	public void updateAll() {
-    	setEntry(getEntry());
-	}
-
-	protected boolean updating = false;
-
-	public void setEntry(BibtexEntry entry) {
-		try {
-			updating = true;
-			Iterator<FieldEditor> i = editors.values().iterator();
-			while (i.hasNext()) {
-				FieldEditor editor = i.next();
-				Object content = entry.getField(editor.getFieldName());
-                String toSet = (content == null) ? "" : content.toString();
-                if (!toSet.equals(editor.getText()))
-				    editor.setText(toSet);
-			}
-			this.entry = entry;
-		} finally {
-			updating = false;
-		}
-	}
-
-	public boolean updateField(String field, String content) {
-		if (!editors.containsKey(field))
-			return false;
-		FieldEditor ed = editors.get(field);
-		ed.setText(content);
-		return true;
-	}
-
-	public void validateAllFields() {
-		for (Iterator<String> i = editors.keySet().iterator(); i.hasNext();) {
-			String field = i.next();
-			FieldEditor ed = editors.get(field);
-            ed.updateFontColor();
-			ed.setEnabled(true);
-			if (((Component) ed).hasFocus())
-				ed.setActiveBackgroundColor();
-			else
-				ed.setValidBackgroundColor();
-		}
-	}
-
-	public void setEnabled(boolean enabled) {
-		Iterator<FieldEditor> i = editors.values().iterator();
-		while (i.hasNext()) {
-			FieldEditor editor = i.next();
-			editor.setEnabled(enabled);
-		}
-	}
-
-	public Component getPane() {
-		return scrollPane;
-	}
-
-	/**
-	 * Set up key bindings and focus listener for the FieldEditor.
-	 * 
-	 * @param component
-	 */
-	public void setupJTextComponent(final JComponent component, final AutoCompleteListener acl) {
-
-        // Here we add focus listeners to the component. The funny code is because we need
-        // to guarantee that the AutoCompleteListener - if used - is called before fieldListener
-        // on a focus lost event. The AutoCompleteListener is responsible for removing any
-        // current suggestion when focus is lost, and this must be done before fieldListener
-        // stores the current edit. Swing doesn't guarantee the order of execution of event
-        // listeners, so we handle this by only adding the AutoCompleteListener and telling
-        // it to call fieldListener afterwards. If no AutoCompleteListener is used, we
-        // add the fieldListener normally.
-        if (acl != null) {
-            component.addKeyListener(acl);
-            component.addFocusListener(acl);
-            acl.setNextFocusListener(fieldListener);
-        }
-        else
-		    component.addFocusListener(fieldListener);
-
-		InputMap im = component.getInputMap(JComponent.WHEN_FOCUSED);
-		ActionMap am = component.getActionMap();
-
-		im.put(Globals.prefs.getKey("Entry editor, previous entry"), "prev");
-		am.put("prev", parent.prevEntryAction);
-		im.put(Globals.prefs.getKey("Entry editor, next entry"), "next");
-		am.put("next", parent.nextEntryAction);
-
-		im.put(Globals.prefs.getKey("Entry editor, store field"), "store");
-		am.put("store", parent.storeFieldAction);
-		im.put(Globals.prefs.getKey("Entry editor, next panel"), "right");
-		im.put(Globals.prefs.getKey("Entry editor, next panel 2"), "right");
-		am.put("left", parent.switchLeftAction);
-		im.put(Globals.prefs.getKey("Entry editor, previous panel"), "left");
-		im.put(Globals.prefs.getKey("Entry editor, previous panel 2"), "left");
-		am.put("right", parent.switchRightAction);
-		im.put(Globals.prefs.getKey("Help"), "help");
-		am.put("help", parent.helpAction);
-		im.put(Globals.prefs.getKey("Save database"), "save");
-		am.put("save", parent.saveDatabaseAction);
-		im.put(Globals.prefs.getKey("Next tab"), "nexttab");
-		am.put("nexttab", parent.frame.nextTab);
-		im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
-		am.put("prevtab", parent.frame.prevTab);
-
-		try {
-			HashSet<AWTKeyStroke> keys = new HashSet<AWTKeyStroke>(component
-				.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
-			keys.clear();
-			keys.add(AWTKeyStroke.getAWTKeyStroke("pressed TAB"));
-			component.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, keys);
-			keys = new HashSet<AWTKeyStroke>(component
-				.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
-			keys.clear();
-			keys.add(KeyStroke.getKeyStroke("shift pressed TAB"));
-			component.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, keys);
-		} catch (Throwable t) {
-			System.err.println(t);
-		}
-
-    }
-
-	/*
-	 * Focus listener that fires the storeFieldAction when a FieldTextArea loses
-	 * focus, and makes the vertical scroll view follow up.
-	 * 
-	 * TODO: It would be nice to test this thoroughly.
-	 */
-	FocusListener fieldListener = new FocusListener() {
-	
-		JTextComponent c;
-
-		DocumentListener d;
-
-		public void focusGained(FocusEvent e) {
-
-			synchronized (this){
-				if (c != null) {
-					c.getDocument().removeDocumentListener(d);
-					c = null;
-					d = null;
-				}
-
-				if (e.getSource() instanceof JTextComponent) {
-
-					c = (JTextComponent) e.getSource();
-					/**
-					 * [ 1553552 ] Not properly detecting changes to flag as
-					 * changed
-					 */
-					d = new DocumentListener() {
-
-						void fire(DocumentEvent e) {
-							if (c.isFocusOwner()) {
-								markIfModified((FieldEditor) c);
-							}
-						}
-
-						public void changedUpdate(DocumentEvent e) {
-							fire(e);
-						}
-
-						public void insertUpdate(DocumentEvent e) {
-							fire(e);
-						}
-
-						public void removeUpdate(DocumentEvent e) {
-							fire(e);
-						}
-					};
-					c.getDocument().addDocumentListener(d);
-
-					/**
-					 * Makes the vertical scroll panel view follow the focus
-					 */
-					Component cScrollPane = c.getParent().getParent();
-					if (cScrollPane instanceof JScrollPane) {
-    					JScrollPane componentPane = (JScrollPane) cScrollPane;
-    					Component cPane = componentPane.getParent();
-    					if (cPane instanceof JPanel) {
-        					JPanel panel = (JPanel) cPane;
-        					Rectangle bounds = componentPane.getBounds();
-        					panel.scrollRectToVisible(bounds);
-    					}
-					}
-
-				}
-			}
-
-			setActive((FieldEditor) e.getSource());
-
-		}
-
-		public void focusLost(FocusEvent e) {
-            synchronized (this) {
-				if (c != null) {
-					c.getDocument().removeDocumentListener(d);
-					c = null;
-					d = null;
-				}
-			}
-			if (!e.isTemporary())
-				parent.updateField(e.getSource());
-		}
-	};
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.AWTKeyStroke;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.KeyboardFocusManager;
+import java.awt.Rectangle;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.ActionMap;
+import javax.swing.InputMap;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.KeyStroke;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.text.JTextComponent;
+
+import net.sf.jabref.autocompleter.AbstractAutoCompleter;
+import net.sf.jabref.gui.AutoCompleteListener;
+import net.sf.jabref.gui.FileListEditor;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * A single tab displayed in the EntryEditor holding several FieldEditors.
+ */
+public class EntryEditorTab {
+
+	private JPanel panel = new JPanel();
+
+	private JScrollPane scrollPane = new JScrollPane(panel,
+			JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+
+	private String[] fields;
+
+	private EntryEditor parent;
+
+	private HashMap<String, FieldEditor> editors = new HashMap<String, FieldEditor>();
+
+	private FieldEditor activeField = null;
+
+    protected EntryEditorTab() {
+
+    }
+
+	public EntryEditorTab(JabRefFrame frame, BasePanel panel, List<String> fields, EntryEditor parent,
+                          boolean addKeyField, String name) {
+		if (fields != null)
+			this.fields = fields.toArray(new String[0]);
+		else
+			this.fields = new String[] {};
+
+		this.parent = parent;
+
+		setupPanel(frame, panel, addKeyField, name);
+
+		/*
+		 * The following line makes sure focus cycles inside tab instead of
+		 * being lost to other parts of the frame:
+		 */
+		scrollPane.setFocusCycleRoot(true);
+	}
+
+
+    void setupPanel(JabRefFrame frame, BasePanel bPanel, boolean addKeyField, String title) {
+    	
+    	InputMap im = panel.getInputMap(JComponent.WHEN_FOCUSED);
+		ActionMap am = panel.getActionMap();
+
+		im.put(Globals.prefs.getKey("Entry editor, previous entry"), "prev");
+		am.put("prev", parent.prevEntryAction);
+		im.put(Globals.prefs.getKey("Entry editor, next entry"), "next");
+		am.put("next", parent.nextEntryAction);
+
+		im.put(Globals.prefs.getKey("Entry editor, store field"), "store");
+		am.put("store", parent.storeFieldAction);
+		im.put(Globals.prefs.getKey("Entry editor, next panel"), "right");
+		im.put(Globals.prefs.getKey("Entry editor, next panel 2"), "right");
+		am.put("left", parent.switchLeftAction);
+		im.put(Globals.prefs.getKey("Entry editor, previous panel"), "left");
+		im.put(Globals.prefs.getKey("Entry editor, previous panel 2"), "left");
+		am.put("right", parent.switchRightAction);
+		im.put(Globals.prefs.getKey("Help"), "help");
+		am.put("help", parent.helpAction);
+		im.put(Globals.prefs.getKey("Save database"), "save");
+		am.put("save", parent.saveDatabaseAction);
+		im.put(Globals.prefs.getKey("Next tab"), "nexttab");
+		am.put("nexttab", parent.frame.nextTab);
+		im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
+		am.put("prevtab", parent.frame.prevTab);
+    	
+    	  	
+        panel.setName(title);
+        //String rowSpec = "left:pref, 4dlu, fill:pref:grow, 4dlu, fill:pref";
+        String colSpec = "fill:pref, 1dlu, fill:pref:grow, 1dlu, fill:pref";
+        StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < fields.length; i++) {
+            sb.append("fill:pref:grow, ");
+        }
+        if (addKeyField)
+            sb.append("4dlu, fill:pref");
+        else
+            sb.delete(sb.length()-2, sb.length());
+        String rowSpec = sb.toString();
+
+        DefaultFormBuilder builder = new DefaultFormBuilder
+                (new FormLayout(colSpec, rowSpec), panel);
+
+        for (int i = 0; i < fields.length; i++) {
+            // Create the text area:
+            int editorType = BibtexFields.getEditorType(fields[i]);
+
+            final FieldEditor ta;
+            int defaultHeight;
+            int wHeight = (int) (50.0 * BibtexFields.getFieldWeight(fields[i]));
+            if (editorType == GUIGlobals.FILE_LIST_EDITOR) {
+                ta = new FileListEditor(frame, bPanel.metaData(), fields[i], null, parent);
+                defaultHeight = 0;
+            }
+            else {
+                ta = new FieldTextArea(fields[i], null);
+                frame.getSearchManager().addSearchListener((FieldTextArea)ta);
+                defaultHeight = ta.getPane().getPreferredSize().height;
+            }
+            //ta.addUndoableEditListener(bPanel.undoListener);
+            
+            JComponent ex = parent.getExtra(fields[i], ta);
+
+            // Add autocompleter listener, if required for this field:
+            AbstractAutoCompleter autoComp = bPanel.getAutoCompleter(fields[i]);
+            AutoCompleteListener acl = null;
+            if (autoComp != null) {
+                acl = new AutoCompleteListener(autoComp);
+            }
+            setupJTextComponent(ta.getTextComponent(), acl);
+            ta.setAutoCompleteListener(acl);
+
+            // Store the editor for later reference:
+            editors.put(fields[i], ta);
+            if (i == 0)
+                activeField = ta;
+            //System.out.println(fields[i]+": "+BibtexFields.getFieldWeight(fields[i]));
+            ta.getPane().setPreferredSize(new Dimension(100, Math.max(defaultHeight, wHeight)));
+            builder.append(ta.getLabel());
+            if (ex == null)
+                builder.append(ta.getPane(), 3);
+            else {
+                builder.append(ta.getPane());
+                JPanel pan = new JPanel();
+                pan.setLayout(new BorderLayout());
+                pan.add(ex, BorderLayout.NORTH);
+                builder.append(pan);
+            }
+            builder.nextLine();
+        }
+
+        // Add the edit field for Bibtex-key.
+		if (addKeyField) {
+			final FieldTextField tf = new FieldTextField(BibtexFields.KEY_FIELD, parent
+				.getEntry().getField(BibtexFields.KEY_FIELD), true);
+            //tf.addUndoableEditListener(bPanel.undoListener);
+			setupJTextComponent(tf, null);
+            
+			editors.put("bibtexkey", tf);
+			/*
+			 * If the key field is the only field, we should have only one
+			 * editor, and this one should be set as active initially:
+			 */
+			if (editors.size() == 1)
+				activeField = tf;
+            builder.nextLine();
+			builder.append(tf.getLabel());
+			builder.append(tf, 3);
+		}
+    }
+
+
+	BibtexEntry entry;
+
+	public BibtexEntry getEntry() {
+		return entry;
+	}
+
+	boolean isFieldModified(FieldEditor f) {
+		String text = f.getText().trim();
+
+		if (text.length() == 0) {
+			return getEntry().getField(f.getFieldName()) != null;
+		} else {
+			Object entryValue = getEntry().getField(f.getFieldName());
+			return entryValue == null || !entryValue.toString().equals(text);
+		}
+	}
+
+	public void markIfModified(FieldEditor f) {
+		// Only mark as changed if not already is and the field was indeed
+		// modified
+		if (!updating && !parent.panel.isBaseChanged() && isFieldModified(f)) {
+			markBaseChanged();
+		}
+	}
+
+	void markBaseChanged() {
+		parent.panel.markBaseChanged();
+	}
+
+	/**
+	 * Only sets the activeField variable but does not focus it.
+	 * 
+	 * Call activate afterwards.
+	 * 
+	 * @param c
+	 */
+	public void setActive(FieldEditor c) {
+		activeField = c;
+	}
+
+	public FieldEditor getActive() {
+		return activeField;
+	}
+
+	public List<String> getFields() {
+		return java.util.Arrays.asList(fields);
+	}
+
+	public void activate() {
+		if (activeField != null){
+			/**
+			 * Corrected to fix [ 1594169 ] Entry editor: navigation between panels
+			 */
+			new FocusRequester(activeField.getTextComponent());
+		}
+	}
+
+	/**
+	 * Reset all fields from the data in the BibtexEntry.
+	 * 
+	 */
+	public void updateAll() {
+    	setEntry(getEntry());
+	}
+
+	protected boolean updating = false;
+
+	public void setEntry(BibtexEntry entry) {
+		try {
+			updating = true;
+			Iterator<FieldEditor> i = editors.values().iterator();
+			while (i.hasNext()) {
+				FieldEditor editor = i.next();
+				Object content = entry.getField(editor.getFieldName());
+                String toSet = (content == null) ? "" : content.toString();
+                if (!toSet.equals(editor.getText()))
+				    editor.setText(toSet);
+			}
+			this.entry = entry;
+		} finally {
+			updating = false;
+		}
+	}
+
+	public boolean updateField(String field, String content) {
+		if (!editors.containsKey(field))
+			return false;
+		FieldEditor ed = editors.get(field);
+		ed.setText(content);
+		return true;
+	}
+
+	public void validateAllFields() {
+		for (Iterator<String> i = editors.keySet().iterator(); i.hasNext();) {
+			String field = i.next();
+			FieldEditor ed = editors.get(field);
+            ed.updateFontColor();
+			ed.setEnabled(true);
+			if (((Component) ed).hasFocus())
+				ed.setActiveBackgroundColor();
+			else
+				ed.setValidBackgroundColor();
+		}
+	}
+
+	public void setEnabled(boolean enabled) {
+		Iterator<FieldEditor> i = editors.values().iterator();
+		while (i.hasNext()) {
+			FieldEditor editor = i.next();
+			editor.setEnabled(enabled);
+		}
+	}
+
+	public Component getPane() {
+		return scrollPane;
+	}
+
+	/**
+	 * Set up key bindings and focus listener for the FieldEditor.
+	 * 
+	 * @param component
+	 */
+	public void setupJTextComponent(final JComponent component, final AutoCompleteListener acl) {
+
+        // Here we add focus listeners to the component. The funny code is because we need
+        // to guarantee that the AutoCompleteListener - if used - is called before fieldListener
+        // on a focus lost event. The AutoCompleteListener is responsible for removing any
+        // current suggestion when focus is lost, and this must be done before fieldListener
+        // stores the current edit. Swing doesn't guarantee the order of execution of event
+        // listeners, so we handle this by only adding the AutoCompleteListener and telling
+        // it to call fieldListener afterwards. If no AutoCompleteListener is used, we
+        // add the fieldListener normally.
+        if (acl != null) {
+            component.addKeyListener(acl);
+            component.addFocusListener(acl);
+            acl.setNextFocusListener(fieldListener);
+        }
+        else
+		    component.addFocusListener(fieldListener);
+
+		InputMap im = component.getInputMap(JComponent.WHEN_FOCUSED);
+		ActionMap am = component.getActionMap();
+
+		im.put(Globals.prefs.getKey("Entry editor, previous entry"), "prev");
+		am.put("prev", parent.prevEntryAction);
+		im.put(Globals.prefs.getKey("Entry editor, next entry"), "next");
+		am.put("next", parent.nextEntryAction);
+
+		im.put(Globals.prefs.getKey("Entry editor, store field"), "store");
+		am.put("store", parent.storeFieldAction);
+		im.put(Globals.prefs.getKey("Entry editor, next panel"), "right");
+		im.put(Globals.prefs.getKey("Entry editor, next panel 2"), "right");
+		am.put("left", parent.switchLeftAction);
+		im.put(Globals.prefs.getKey("Entry editor, previous panel"), "left");
+		im.put(Globals.prefs.getKey("Entry editor, previous panel 2"), "left");
+		am.put("right", parent.switchRightAction);
+		im.put(Globals.prefs.getKey("Help"), "help");
+		am.put("help", parent.helpAction);
+		im.put(Globals.prefs.getKey("Save database"), "save");
+		am.put("save", parent.saveDatabaseAction);
+		im.put(Globals.prefs.getKey("Next tab"), "nexttab");
+		am.put("nexttab", parent.frame.nextTab);
+		im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
+		am.put("prevtab", parent.frame.prevTab);
+
+		try {
+			HashSet<AWTKeyStroke> keys = new HashSet<AWTKeyStroke>(component
+				.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
+			keys.clear();
+			keys.add(AWTKeyStroke.getAWTKeyStroke("pressed TAB"));
+			component.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, keys);
+			keys = new HashSet<AWTKeyStroke>(component
+				.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
+			keys.clear();
+			keys.add(KeyStroke.getKeyStroke("shift pressed TAB"));
+			component.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, keys);
+		} catch (Throwable t) {
+			System.err.println(t);
+		}
+
+    }
+
+	/*
+	 * Focus listener that fires the storeFieldAction when a FieldTextArea loses
+	 * focus, and makes the vertical scroll view follow up.
+	 * 
+	 * TODO: It would be nice to test this thoroughly.
+	 */
+	FocusListener fieldListener = new FocusListener() {
+	
+		JTextComponent c;
+
+		DocumentListener d;
+
+		public void focusGained(FocusEvent e) {
+
+			synchronized (this){
+				if (c != null) {
+					c.getDocument().removeDocumentListener(d);
+					c = null;
+					d = null;
+				}
+
+				if (e.getSource() instanceof JTextComponent) {
+
+					c = (JTextComponent) e.getSource();
+					/**
+					 * [ 1553552 ] Not properly detecting changes to flag as
+					 * changed
+					 */
+					d = new DocumentListener() {
+
+						void fire(DocumentEvent e) {
+							if (c.isFocusOwner()) {
+								markIfModified((FieldEditor) c);
+							}
+						}
+
+						public void changedUpdate(DocumentEvent e) {
+							fire(e);
+						}
+
+						public void insertUpdate(DocumentEvent e) {
+							fire(e);
+						}
+
+						public void removeUpdate(DocumentEvent e) {
+							fire(e);
+						}
+					};
+					c.getDocument().addDocumentListener(d);
+
+					/**
+					 * Makes the vertical scroll panel view follow the focus
+					 */
+					Component cScrollPane = c.getParent().getParent();
+					if (cScrollPane instanceof JScrollPane) {
+    					JScrollPane componentPane = (JScrollPane) cScrollPane;
+    					Component cPane = componentPane.getParent();
+    					if (cPane instanceof JPanel) {
+        					JPanel panel = (JPanel) cPane;
+        					Rectangle bounds = componentPane.getBounds();
+        					panel.scrollRectToVisible(bounds);
+    					}
+					}
+
+				}
+			}
+
+			setActive((FieldEditor) e.getSource());
+
+		}
+
+		public void focusLost(FocusEvent e) {
+            synchronized (this) {
+				if (c != null) {
+					c.getDocument().removeDocumentListener(d);
+					c = null;
+					d = null;
+				}
+			}
+			if (!e.isTemporary())
+				parent.updateField(e.getSource());
+		}
+	};
+}
diff --git a/src/java/net/sf/jabref/EntryEditorTabList.java b/src/java/net/sf/jabref/EntryEditorTabList.java
index 3f96a3e..9a36c8f 100644
--- a/src/java/net/sf/jabref/EntryEditorTabList.java
+++ b/src/java/net/sf/jabref/EntryEditorTabList.java
@@ -1,74 +1,74 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Class for holding the information about customizable entry editor tabs.
- */
-public final class EntryEditorTabList {
-
-    private List<List<String>> list = null;
-    private List<String> names = null;
-
-    public EntryEditorTabList() {
-        init();
-    }
-
-    private void init() {
-        list = new ArrayList<List<String>>();
-        names = new ArrayList<String>();
-        int i = 0;
-        String name;
-        String[] fields;
-        if (Globals.prefs.hasKey(Globals.prefs.CUSTOM_TAB_NAME + 0)) {
-            // The user has modified from the default values:
-            while (Globals.prefs.hasKey(Globals.prefs.CUSTOM_TAB_NAME + i)) {
-                name = Globals.prefs.get(Globals.prefs.CUSTOM_TAB_NAME + i);
-                fields = Globals.prefs.get(Globals.prefs.CUSTOM_TAB_FIELDS + i).split(";");
-                List<String> entry = Arrays.asList(fields);
-                names.add(name);
-                list.add(entry);
-                i++;
-            }
-        } else {
-            // Nothing set, so we use the default values:
-            while (Globals.prefs.get(Globals.prefs.CUSTOM_TAB_NAME + "_def"+i) != null) {
-                name = Globals.prefs.get(Globals.prefs.CUSTOM_TAB_NAME + "_def" + i);
-                fields = Globals.prefs.get(Globals.prefs.CUSTOM_TAB_FIELDS + "_def" + i).split(";");
-                List<String> entry = Arrays.asList(fields);
-                names.add(name);
-                list.add(entry);
-                i++;
-            }
-        }
-    }
-
-    public int getTabCount() {
-        return list.size();
-    }
-
-    public String getTabName(int tab) {
-        return names.get(tab);
-    }
-
-    public List<String> getTabFields(int tab) {
-        return list.get(tab);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Class for holding the information about customizable entry editor tabs.
+ */
+public final class EntryEditorTabList {
+
+    private List<List<String>> list = null;
+    private List<String> names = null;
+
+    public EntryEditorTabList() {
+        init();
+    }
+
+    private void init() {
+        list = new ArrayList<List<String>>();
+        names = new ArrayList<String>();
+        int i = 0;
+        String name;
+        String[] fields;
+        if (Globals.prefs.hasKey(Globals.prefs.CUSTOM_TAB_NAME + 0)) {
+            // The user has modified from the default values:
+            while (Globals.prefs.hasKey(Globals.prefs.CUSTOM_TAB_NAME + i)) {
+                name = Globals.prefs.get(Globals.prefs.CUSTOM_TAB_NAME + i);
+                fields = Globals.prefs.get(Globals.prefs.CUSTOM_TAB_FIELDS + i).split(";");
+                List<String> entry = Arrays.asList(fields);
+                names.add(name);
+                list.add(entry);
+                i++;
+            }
+        } else {
+            // Nothing set, so we use the default values:
+            while (Globals.prefs.get(Globals.prefs.CUSTOM_TAB_NAME + "_def"+i) != null) {
+                name = Globals.prefs.get(Globals.prefs.CUSTOM_TAB_NAME + "_def" + i);
+                fields = Globals.prefs.get(Globals.prefs.CUSTOM_TAB_FIELDS + "_def" + i).split(";");
+                List<String> entry = Arrays.asList(fields);
+                names.add(name);
+                list.add(entry);
+                i++;
+            }
+        }
+    }
+
+    public int getTabCount() {
+        return list.size();
+    }
+
+    public String getTabName(int tab) {
+        return names.get(tab);
+    }
+
+    public List<String> getTabFields(int tab) {
+        return list.get(tab);
+    }
+}
diff --git a/src/java/net/sf/jabref/EntrySorter.java b/src/java/net/sf/jabref/EntrySorter.java
index 8c275ea..012b1be 100644
--- a/src/java/net/sf/jabref/EntrySorter.java
+++ b/src/java/net/sf/jabref/EntrySorter.java
@@ -1,144 +1,144 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.util.*;
-
-public class EntrySorter implements DatabaseChangeListener {
-
-    //TreeSet set;
-    final ArrayList<BibtexEntry> set;
-    Comparator<BibtexEntry> comp;
-    String[] idArray;
-    BibtexEntry[] entryArray;
-    //static BibtexEntry[] DUMMY = new BibtexEntry[0];
-    private boolean outdated = false;
-    private boolean changed = false;
-
-    public EntrySorter(Map<String, BibtexEntry> entries, Comparator<BibtexEntry> comp) {
-	    //set = new TreeSet(comp);
-        set = new ArrayList<BibtexEntry>();
-        this.comp = comp;
-        Set<String> keySet = entries.keySet();
-	    if (keySet != null) {
-    	    Iterator<String> i = keySet.iterator();
-    	    while (i.hasNext()) {
-    		    set.add(entries.get(i.next()));
-            }
-            //Collections.sort(set, comp);
-            changed = true;
-            index();
-	    }
-    }
-
-    public void index() {
-
-        /*  Old version, from when set was a TreeSet.
-
-        // The boolean "changing" is true in the situation that an entry is about to change,
-        // and has temporarily been removed from the entry set in this sorter. So, if we index
-        // now, we will cause exceptions other places because one entry has been left out of
-        // the indexed array. Simply waiting foth this to change can lead to deadlocks,
-        // so we have no other choice than to return without indexing.
-        if (changing)
-            return;
-        */
-
-
-        synchronized(set) {
-
-            // Resort if necessary:
-            if (changed) {
-                Collections.sort(set, comp);
-                changed = false;
-            }
-
-            // Create an array of IDs for quick access, since getIdAt() is called by
-            // getValueAt() in EntryTableModel, which *has* to be efficient.
-
-	        int count = set.size();
-            idArray = new String[count];
-            entryArray = new BibtexEntry[count];
-	        int piv = 0;
-	        for (Iterator<BibtexEntry> i=set.iterator(); i.hasNext();) {
-	            //        for (int i=0; i<idArray.length; i++) {
-    	        BibtexEntry entry = i.next();
-    	        idArray[piv] = entry.getId();
-    	        entryArray[piv] = entry;
-    	        piv++;
-            }
-        }
-    }
-
-    public boolean isOutdated() {
-	return outdated;
-    }
-
-    public String getIdAt(int pos) {
-        synchronized(set) {
-            return idArray[pos];
-        }
-	//return ((BibtexEntry)(entryArray[pos])).getId();
-    }
-
-    public BibtexEntry getEntryAt(int pos) {
-        synchronized(set) {
-            return entryArray[pos];
-        }
-    }
-
-    public int getEntryCount() {
-        synchronized(set) {
-	        if (entryArray != null)
-	            return entryArray.length;
-	        else
-	        return 0;
-        }
-    }
-
-    public void databaseChanged(DatabaseChangeEvent e) {
-        synchronized(set) {
-        	int pos;
-        	switch (e.getType()) {
-        	case ADDED_ENTRY:
-                pos = -Collections.binarySearch(set, e.getEntry(), comp) - 1;
-                set.add(pos, e.getEntry());
-                //addEntry(e.getEntry());
-                //set.add(e.getEntry());
-                //changed = true;
-                //Collections.sort(set, comp);
-                break;
-        	case REMOVED_ENTRY:
-	            set.remove(e.getEntry());
-                changed = true;
-                break;
-            case CHANGED_ENTRY:
-                // Entry changed. Resort list:
-                //Collections.sort(set, comp);
-                pos = Collections.binarySearch(set, e.getEntry(), comp);
-                int posOld = set.indexOf(e.getEntry());
-                if (pos < 0) {
-                    set.remove(posOld);
-                    set.add(-pos-1, e.getEntry());
-                }
-                //changed = true;
-                break;
-            }
-
-    	}
-
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.util.*;
+
+public class EntrySorter implements DatabaseChangeListener {
+
+    //TreeSet set;
+    final ArrayList<BibtexEntry> set;
+    Comparator<BibtexEntry> comp;
+    String[] idArray;
+    BibtexEntry[] entryArray;
+    //static BibtexEntry[] DUMMY = new BibtexEntry[0];
+    private boolean outdated = false;
+    private boolean changed = false;
+
+    public EntrySorter(Map<String, BibtexEntry> entries, Comparator<BibtexEntry> comp) {
+	    //set = new TreeSet(comp);
+        set = new ArrayList<BibtexEntry>();
+        this.comp = comp;
+        Set<String> keySet = entries.keySet();
+	    if (keySet != null) {
+    	    Iterator<String> i = keySet.iterator();
+    	    while (i.hasNext()) {
+    		    set.add(entries.get(i.next()));
+            }
+            //Collections.sort(set, comp);
+            changed = true;
+            index();
+	    }
+    }
+
+    public void index() {
+
+        /*  Old version, from when set was a TreeSet.
+
+        // The boolean "changing" is true in the situation that an entry is about to change,
+        // and has temporarily been removed from the entry set in this sorter. So, if we index
+        // now, we will cause exceptions other places because one entry has been left out of
+        // the indexed array. Simply waiting foth this to change can lead to deadlocks,
+        // so we have no other choice than to return without indexing.
+        if (changing)
+            return;
+        */
+
+
+        synchronized(set) {
+
+            // Resort if necessary:
+            if (changed) {
+                Collections.sort(set, comp);
+                changed = false;
+            }
+
+            // Create an array of IDs for quick access, since getIdAt() is called by
+            // getValueAt() in EntryTableModel, which *has* to be efficient.
+
+	        int count = set.size();
+            idArray = new String[count];
+            entryArray = new BibtexEntry[count];
+	        int piv = 0;
+	        for (Iterator<BibtexEntry> i=set.iterator(); i.hasNext();) {
+	            //        for (int i=0; i<idArray.length; i++) {
+    	        BibtexEntry entry = i.next();
+    	        idArray[piv] = entry.getId();
+    	        entryArray[piv] = entry;
+    	        piv++;
+            }
+        }
+    }
+
+    public boolean isOutdated() {
+	return outdated;
+    }
+
+    public String getIdAt(int pos) {
+        synchronized(set) {
+            return idArray[pos];
+        }
+	//return ((BibtexEntry)(entryArray[pos])).getId();
+    }
+
+    public BibtexEntry getEntryAt(int pos) {
+        synchronized(set) {
+            return entryArray[pos];
+        }
+    }
+
+    public int getEntryCount() {
+        synchronized(set) {
+	        if (entryArray != null)
+	            return entryArray.length;
+	        else
+	        return 0;
+        }
+    }
+
+    public void databaseChanged(DatabaseChangeEvent e) {
+        synchronized(set) {
+        	int pos;
+        	switch (e.getType()) {
+        	case ADDED_ENTRY:
+                pos = -Collections.binarySearch(set, e.getEntry(), comp) - 1;
+                set.add(pos, e.getEntry());
+                //addEntry(e.getEntry());
+                //set.add(e.getEntry());
+                //changed = true;
+                //Collections.sort(set, comp);
+                break;
+        	case REMOVED_ENTRY:
+	            set.remove(e.getEntry());
+                changed = true;
+                break;
+            case CHANGED_ENTRY:
+                // Entry changed. Resort list:
+                //Collections.sort(set, comp);
+                pos = Collections.binarySearch(set, e.getEntry(), comp);
+                int posOld = set.indexOf(e.getEntry());
+                if (pos < 0) {
+                    set.remove(posOld);
+                    set.add(-pos-1, e.getEntry());
+                }
+                //changed = true;
+                break;
+            }
+
+    	}
+
+    }
+}
diff --git a/src/java/net/sf/jabref/EntryTypeDialog.java b/src/java/net/sf/jabref/EntryTypeDialog.java
index 4fcb93a..2339110 100644
--- a/src/java/net/sf/jabref/EntryTypeDialog.java
+++ b/src/java/net/sf/jabref/EntryTypeDialog.java
@@ -1,147 +1,147 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-
-import javax.swing.*;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-public class EntryTypeDialog extends JDialog implements ActionListener {
-
-    /*
-     * Dialog that prompts the user to choose a type for an entry.
-     * Returns null if cancelled.
-     */
-
-    BibtexEntryType type = null;
-    CancelAction cancelAction = new CancelAction();
-    private final int COLNUM = 3;
-
-    class TypeButton extends JButton implements Comparable<TypeButton> {
-		BibtexEntryType type;
-
-		public TypeButton(String label, BibtexEntryType type_) {
-			super(label);
-			type = type_;
-		}
-
-		public int compareTo(TypeButton o) {
-			return type.getName().compareTo(o.type.getName());
-		}
-	}
-
-    public EntryTypeDialog(JabRefFrame baseFrame_) {
-	super(baseFrame_, true); // Set modal on.
-
-
-	setTitle(Globals.lang("Select entry type"));
-
-	addWindowListener(new WindowAdapter() {
-		public void windowClosing(WindowEvent e) {
-		    cancelAction.actionPerformed(null);
-		}
-	    });
-
-	getContentPane().setLayout(new BorderLayout());
-	JPanel pan = new JPanel();
-	getContentPane().add(pan, BorderLayout.CENTER);
-	JPanel buttons = new JPanel();
-	JButton // ok = new JButton("Ok"),
-	    cancel = new JButton(Globals.lang("Cancel"));
-	//ok.addActionListener(this);
-	cancel.addActionListener(this);
-
-    // Make ESC close dialog, equivalent to clicking Cancel.
-	cancel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
-	    .put(baseFrame_.prefs.getKey("Close dialog"), "close");
-	cancel.getActionMap().put("close", cancelAction);
-
-	//buttons.add(ok);
-    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
-    //buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
-    bb.addGlue();
-    bb.addButton(cancel);
-    bb.addGlue();
-
-    getContentPane().add(buttons, BorderLayout.SOUTH);
-	GridBagLayout gbl = new GridBagLayout();
-	pan.setLayout(gbl);
-	GridBagConstraints con = new GridBagConstraints();
-	con.anchor = GridBagConstraints.WEST;
-	con.fill = GridBagConstraints.HORIZONTAL;
-	con.insets = new Insets(4, 4, 4, 4);
-	int col = 0;
-
-	for (BibtexEntryType tp : BibtexEntryType.ALL_TYPES.values()) {
-		if (tp.isVisibleAtNewEntryDialog()) {
-			TypeButton b = new TypeButton(Util.nCase(tp.getName()), tp);
-			b.addActionListener(this);
-			// Check if we should finish the row.
-			col++;
-			if (col == COLNUM) {
-				col = 0;
-				con.gridwidth = GridBagConstraints.REMAINDER;
-			} else {
-				con.gridwidth = 1;
-			}
-			gbl.setConstraints(b, con);
-			pan.add(b);
-		}
-	}
-	pan.setBorder(BorderFactory.createTitledBorder
-		      (BorderFactory.createEtchedBorder(),
-		       Globals.lang("Entry types")));
-	//pan.setBackground(Color.white);
-	//buttons.setBackground(Color.white);
-	pack();
-	setResizable(false);
-    }
-
-    public void actionPerformed(ActionEvent e) {
-	if (e.getSource() instanceof TypeButton) {
-	    type = ((TypeButton)e.getSource()).type;
-	}
-	dispose();
-    }
-
-    public BibtexEntryType getChoice() {
-	//return type;
-	return type;
-    }
-
-    class CancelAction extends AbstractAction {
-	public CancelAction() {
-	    super("Cancel");
-	    //  new ImageIcon(GUIGlobals.imagepath+GUIGlobals.closeIconFile));
-	    //putValue(SHORT_DESCRIPTION, "Cancel");
-	    //putValue(MNEMONIC_KEY, GUIGlobals.closeKeyCode);
-	}
-	public void actionPerformed(ActionEvent e) {
-	    dispose();
-	}
-    }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.*;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+public class EntryTypeDialog extends JDialog implements ActionListener {
+
+    /*
+     * Dialog that prompts the user to choose a type for an entry.
+     * Returns null if cancelled.
+     */
+
+    BibtexEntryType type = null;
+    CancelAction cancelAction = new CancelAction();
+    private final int COLNUM = 3;
+
+    class TypeButton extends JButton implements Comparable<TypeButton> {
+		BibtexEntryType type;
+
+		public TypeButton(String label, BibtexEntryType type_) {
+			super(label);
+			type = type_;
+		}
+
+		public int compareTo(TypeButton o) {
+			return type.getName().compareTo(o.type.getName());
+		}
+	}
+
+    public EntryTypeDialog(JabRefFrame baseFrame_) {
+	super(baseFrame_, true); // Set modal on.
+
+
+	setTitle(Globals.lang("Select entry type"));
+
+	addWindowListener(new WindowAdapter() {
+		public void windowClosing(WindowEvent e) {
+		    cancelAction.actionPerformed(null);
+		}
+	    });
+
+	getContentPane().setLayout(new BorderLayout());
+	JPanel pan = new JPanel();
+	getContentPane().add(pan, BorderLayout.CENTER);
+	JPanel buttons = new JPanel();
+	JButton // ok = new JButton("Ok"),
+	    cancel = new JButton(Globals.lang("Cancel"));
+	//ok.addActionListener(this);
+	cancel.addActionListener(this);
+
+    // Make ESC close dialog, equivalent to clicking Cancel.
+	cancel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
+	    .put(baseFrame_.prefs.getKey("Close dialog"), "close");
+	cancel.getActionMap().put("close", cancelAction);
+
+	//buttons.add(ok);
+    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
+    //buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+    bb.addGlue();
+    bb.addButton(cancel);
+    bb.addGlue();
+
+    getContentPane().add(buttons, BorderLayout.SOUTH);
+	GridBagLayout gbl = new GridBagLayout();
+	pan.setLayout(gbl);
+	GridBagConstraints con = new GridBagConstraints();
+	con.anchor = GridBagConstraints.WEST;
+	con.fill = GridBagConstraints.HORIZONTAL;
+	con.insets = new Insets(4, 4, 4, 4);
+	int col = 0;
+
+	for (BibtexEntryType tp : BibtexEntryType.ALL_TYPES.values()) {
+		if (tp.isVisibleAtNewEntryDialog()) {
+			TypeButton b = new TypeButton(Util.nCase(tp.getName()), tp);
+			b.addActionListener(this);
+			// Check if we should finish the row.
+			col++;
+			if (col == COLNUM) {
+				col = 0;
+				con.gridwidth = GridBagConstraints.REMAINDER;
+			} else {
+				con.gridwidth = 1;
+			}
+			gbl.setConstraints(b, con);
+			pan.add(b);
+		}
+	}
+	pan.setBorder(BorderFactory.createTitledBorder
+		      (BorderFactory.createEtchedBorder(),
+		       Globals.lang("Entry types")));
+	//pan.setBackground(Color.white);
+	//buttons.setBackground(Color.white);
+	pack();
+	setResizable(false);
+    }
+
+    public void actionPerformed(ActionEvent e) {
+	if (e.getSource() instanceof TypeButton) {
+	    type = ((TypeButton)e.getSource()).type;
+	}
+	dispose();
+    }
+
+    public BibtexEntryType getChoice() {
+	//return type;
+	return type;
+    }
+
+    class CancelAction extends AbstractAction {
+	public CancelAction() {
+	    super("Cancel");
+	    //  new ImageIcon(GUIGlobals.imagepath+GUIGlobals.closeIconFile));
+	    //putValue(SHORT_DESCRIPTION, "Cancel");
+	    //putValue(MNEMONIC_KEY, GUIGlobals.closeKeyCode);
+	}
+	public void actionPerformed(ActionEvent e) {
+	    dispose();
+	}
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/ErrorMessageDisplay.java b/src/java/net/sf/jabref/ErrorMessageDisplay.java
index 906e642..225eff9 100644
--- a/src/java/net/sf/jabref/ErrorMessageDisplay.java
+++ b/src/java/net/sf/jabref/ErrorMessageDisplay.java
@@ -1,40 +1,40 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-/**
- * A class implementing this interface can provided as a receiver for error messages originating
- * in a thread that can't return any value or throw any exceptions. E.g. net.sf.jabref.DatabaseSearch.
- *
- * The point is that the worker thread doesn't need to know what interface it is working against,
- * since the ErrorMessageDisplay implementer will be responsible for displaying the error message.
- */
-public interface ErrorMessageDisplay {
-
-    /**
-     * An error has occured.
-     * @param errorMessage Error message.
-     */
-    public void reportError(String errorMessage);
-
-    /**
-     * An error has occured.
-     * @param errorMessage Error message.
-     * @param exception Exception representing the error condition.
-     */
-    public void reportError(String errorMessage, Exception exception);
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+/**
+ * A class implementing this interface can provided as a receiver for error messages originating
+ * in a thread that can't return any value or throw any exceptions. E.g. net.sf.jabref.DatabaseSearch.
+ *
+ * The point is that the worker thread doesn't need to know what interface it is working against,
+ * since the ErrorMessageDisplay implementer will be responsible for displaying the error message.
+ */
+public interface ErrorMessageDisplay {
+
+    /**
+     * An error has occured.
+     * @param errorMessage Error message.
+     */
+    public void reportError(String errorMessage);
+
+    /**
+     * An error has occured.
+     * @param errorMessage Error message.
+     * @param exception Exception representing the error condition.
+     */
+    public void reportError(String errorMessage, Exception exception);
+
+}
diff --git a/src/java/net/sf/jabref/ExternalTab.java b/src/java/net/sf/jabref/ExternalTab.java
index b6b05c3..5cf2dba 100644
--- a/src/java/net/sf/jabref/ExternalTab.java
+++ b/src/java/net/sf/jabref/ExternalTab.java
@@ -1,269 +1,271 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.*;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-
-import javax.swing.*;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import net.sf.jabref.external.*;
-import net.sf.jabref.plugin.core.JabRefPlugin;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-public class ExternalTab extends JPanel implements PrefsTab {
-
-	JabRefPreferences _prefs;
-
-	JabRefFrame _frame;
-
-	JTextField pdfDir, regExpTextField, fileDir, psDir, emailSubject;
-            
-    JCheckBox bibLocationAsFileDir, bibLocAsPrimaryDir, runAutoFileSearch,
-            allowFileAutoOpenBrowse, openFoldersOfAttachedFiles;
-    JButton editFileTypes;
-    ItemListener regExpListener;
-
-	JRadioButton useRegExpComboBox;
-    JRadioButton matchExactKeyOnly = new JRadioButton(Globals.lang("Autolink only files that match the BibTeX key")),
-        matchStartsWithKey = new JRadioButton(Globals.lang("Autolink files with names starting with the BibTeX key"));
-
-    public ExternalTab(JabRefFrame frame, PrefsDialog3 prefsDiag, JabRefPreferences prefs,
-                       HelpDialog helpDialog) {
-		_prefs = prefs;
-		_frame = frame;
-		setLayout(new BorderLayout());
-
-		psDir = new JTextField(25);
-		pdfDir = new JTextField(25);
-        fileDir = new JTextField(25);
-        bibLocationAsFileDir = new JCheckBox(Globals.lang("Allow file links relative to each bib file's location"));
-        bibLocAsPrimaryDir = new JCheckBox(Globals.lang("Use the bib file location as primary file directory"));
-        bibLocAsPrimaryDir.setToolTipText(Globals.lang("When downloading files, or moving linked files to the "
-            +"file directory, prefer the bib file location rather than the file directory set above"));
-        bibLocationAsFileDir.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent changeEvent) {
-                bibLocAsPrimaryDir.setEnabled(bibLocationAsFileDir.isSelected());
-            }
-        });
-        editFileTypes = new JButton(Globals.lang("Manage external file types"));
-        runAutoFileSearch = new JCheckBox(Globals.lang("When opening file link, search for matching file if no link is defined"));
-        allowFileAutoOpenBrowse = new JCheckBox(Globals.lang("Automatically open browse dialog when creating new file link"));
-        regExpTextField = new JTextField(25);
-        useRegExpComboBox = new JRadioButton(Globals.lang("Use Regular Expression Search"));
-		regExpListener = new ItemListener() {
-			public void itemStateChanged(ItemEvent e) {
-				regExpTextField.setEditable(useRegExpComboBox.isSelected());
-			}
-		};
-		useRegExpComboBox.addItemListener(regExpListener);
-
-        editFileTypes.addActionListener(ExternalFileTypeEditor.getAction(prefsDiag));
-
-        ButtonGroup bg = new ButtonGroup();
-        bg.add(matchExactKeyOnly);
-        bg.add(matchStartsWithKey);
-        bg.add(useRegExpComboBox);
-
-        BrowseAction browse;
-
-		FormLayout layout = new FormLayout(
-			"1dlu, 8dlu, left:pref, 4dlu, fill:150dlu, 4dlu, fill:pref","");
-
-		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-
-		builder.appendSeparator(Globals.lang("External file links"));
-		JPanel pan = new JPanel();
-		builder.append(pan);
-		/**
-		 * Fix for [ 1749613 ] About translation
-		 * 
-		 * https://sourceforge.net/tracker/index.php?func=detail&aid=1749613&group_id=92314&atid=600306
-		 * 
-		 * Cannot really use %0 to refer to the file type, since this ruins translation.
-		 */
-		JLabel lab = new JLabel(Globals.lang("Main file directory") + ":");
-		builder.append(lab);
-		builder.append(fileDir);
-		browse = new BrowseAction(_frame, fileDir, true);
-		builder.append(new JButton(browse));
-		builder.nextLine();
-        builder.append(new JPanel());
-        builder.append(bibLocationAsFileDir, 3);
-        builder.nextLine();
-        builder.append(new JPanel());
-        builder.append(bibLocAsPrimaryDir, 3);
-        builder.nextLine();
-		builder.append(new JPanel());
-        builder.append(matchStartsWithKey, 3);
-        builder.nextLine();
-        builder.append(new JPanel());
-        builder.append(matchExactKeyOnly, 3);
-        builder.nextLine();
-        builder.append(new JPanel());
-        builder.append(useRegExpComboBox);
-		builder.append(regExpTextField);
-
-		HelpAction helpAction = new HelpAction(helpDialog, GUIGlobals.regularExpressionSearchHelp,
-			Globals.lang("Help on Regular Expression Search"), GUIGlobals.getIconUrl("helpSmall"));
-		builder.append(helpAction.getIconButton());
-		builder.nextLine();
-        builder.append(new JPanel());
-        builder.append(runAutoFileSearch, 3);
-        builder.nextLine();
-        builder.append(new JPanel());
-        builder.append(allowFileAutoOpenBrowse);
-        builder.nextLine();
-
-		builder.appendSeparator(Globals.lang("Sending of emails"));
-		builder.append(new JPanel());
-		lab = new JLabel(Globals.lang("Subject for sending an email with references").concat(":"));
-		builder.append(lab);
-		emailSubject = new JTextField(25);
-		builder.append(emailSubject);
-		builder.nextLine();
-		builder.append(new JPanel());
-		openFoldersOfAttachedFiles = new JCheckBox(Globals.lang("Automatically open folders of attached files"));
-		builder.append(openFoldersOfAttachedFiles);
-		builder.nextLine();
-
-        builder.appendSeparator(Globals.lang("Legacy file fields"));
-		pan = new JPanel();
-		builder.append(pan);		
-		builder.append(new JLabel("<html>"+Globals.lang("Note that these settings are used for the legacy "
-			+"<b>pdf</b> and <b>ps</b> fields only.<br>For most users, setting the <b>Main file directory</b> "
-			+"above should be sufficient.")+"</html>"), 5);
-		builder.nextLine();
-		pan = new JPanel();
-		builder.append(pan);
-		lab = new JLabel(Globals.lang("Main PDF directory") + ":");
-		builder.append(lab);
-		builder.append(pdfDir);
-		browse = new BrowseAction(_frame, pdfDir, true);
-		builder.append(new JButton(browse));
-		builder.nextLine();
-
-        pan = new JPanel();
-		builder.append(pan);
-		lab = new JLabel(Globals.lang("Main PS directory") + ":");
-		builder.append(lab);
-		builder.append(psDir);
-		browse = new BrowseAction(_frame, psDir, true);
-		builder.append(new JButton(browse));
-		builder.nextLine();
-		builder.appendSeparator(Globals.lang("External programs"));
-
-		builder.nextLine();
-
-        JPanel butpan = new JPanel();
-        butpan.setLayout(new GridLayout(2,3));
-        addSettingsButton(new PushToLyx(), butpan);
-        addSettingsButton(new PushToEmacs(), butpan);
-        addSettingsButton(new PushToWinEdt(), butpan);
-        addSettingsButton(new PushToVim(), butpan);
-        addSettingsButton(new PushToLatexEditor(), butpan);
-        addSettingsButton(new PushToTeXstudio(), butpan);
-        builder.append(new JPanel());
-        builder.append(butpan, 3);
-
-        builder.nextLine();
-        builder.append(pan);
-        builder.append(editFileTypes);
-        
-        pan = builder.getPanel();
-		pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-		add(pan, BorderLayout.CENTER);
-
-    }
-
-    private void addSettingsButton(final PushToApplication pt, JPanel p) {
-        //if (b.getColumn() < 2)
-        //    b.append(new JPanel());
-        //JPanel pan = new JPanel();
-        //pan.setLayout(new BorderLayout());
-        //pan.add(new JLabel(Globals.lang("Settings for %0", pt.getApplicationName())), BorderLayout.CENTER);
-        JButton button = new JButton(Globals.lang("Settings for %0", pt.getApplicationName()),
-                pt.getIcon());
-        button.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                PushToApplicationButton.showSettingsDialog(_frame, pt, pt.getSettingsPanel());
-            }
-        });
-        p.add(button);//, BorderLayout.CENTER);
-        //b.append(button);
-        //b.nextLine();
-        //b.append(pan);
-        //if (b.getColumn() >= 6)
-        //    b.nextLine();
-    }
-
-	public void setValues() {
-		pdfDir.setText(_prefs.get("pdfDirectory"));
-		psDir.setText(_prefs.get("psDirectory"));
-        fileDir.setText(_prefs.get(GUIGlobals.FILE_FIELD+"Directory"));
-        bibLocationAsFileDir.setSelected(_prefs.getBoolean("bibLocationAsFileDir"));
-        bibLocAsPrimaryDir.setSelected(_prefs.getBoolean("bibLocAsPrimaryDir"));
-        bibLocAsPrimaryDir.setEnabled(bibLocationAsFileDir.isSelected());
-        runAutoFileSearch.setSelected(_prefs.getBoolean("runAutomaticFileSearch"));
-		regExpTextField.setText(_prefs.get(JabRefPreferences.REG_EXP_SEARCH_EXPRESSION_KEY));
-        allowFileAutoOpenBrowse.setSelected(_prefs.getBoolean("allowFileAutoOpenBrowse"));
-        
-        emailSubject.setText(_prefs.get(JabRefPreferences.EMAIL_SUBJECT));
-        openFoldersOfAttachedFiles.setSelected(_prefs.getBoolean(JabRefPreferences.OPEN_FOLDERS_OF_ATTACHED_FILES));
-
-        if (_prefs.getBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY))
-            useRegExpComboBox.setSelected(true);
-        else if (_prefs.getBoolean("autolinkExactKeyOnly"))
-            matchExactKeyOnly.setSelected(true);
-        else
-            matchStartsWithKey.setSelected(true);
-    }
-
-	public void storeSettings() {
-
-		_prefs.putBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY, useRegExpComboBox.isSelected());
-		if (useRegExpComboBox.isSelected()) {
-			_prefs.put(JabRefPreferences.REG_EXP_SEARCH_EXPRESSION_KEY, regExpTextField.getText());
-		}
-
-		// We should maybe do some checking on the validity of the contents?
-		_prefs.put("pdfDirectory", pdfDir.getText());
-		_prefs.put("psDirectory", psDir.getText());
-        _prefs.put(GUIGlobals.FILE_FIELD+"Directory", fileDir.getText());
-        _prefs.putBoolean("bibLocationAsFileDir", bibLocationAsFileDir.isSelected());
-        _prefs.putBoolean("bibLocAsPrimaryDir", bibLocAsPrimaryDir.isSelected());
-		_prefs.putBoolean("autolinkExactKeyOnly", matchExactKeyOnly.isSelected());
-        _prefs.putBoolean("runAutomaticFileSearch", runAutoFileSearch.isSelected());
-        _prefs.putBoolean("allowFileAutoOpenBrowse", allowFileAutoOpenBrowse.isSelected());
-        _prefs.put(JabRefPreferences.EMAIL_SUBJECT, emailSubject.getText());
-        _prefs.putBoolean(JabRefPreferences.OPEN_FOLDERS_OF_ATTACHED_FILES, openFoldersOfAttachedFiles.isSelected());
-    }
-
-	public boolean readyToClose() {
-		return true;
-	}
-
-	public String getTabName() {
-		return Globals.lang("External programs");
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.*;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.sf.jabref.external.*;
+import net.sf.jabref.help.HelpAction;
+import net.sf.jabref.help.HelpDialog;
+import net.sf.jabref.plugin.core.JabRefPlugin;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+public class ExternalTab extends JPanel implements PrefsTab {
+
+	JabRefPreferences _prefs;
+
+	JabRefFrame _frame;
+
+	JTextField pdfDir, regExpTextField, fileDir, psDir, emailSubject;
+            
+    JCheckBox bibLocationAsFileDir, bibLocAsPrimaryDir, runAutoFileSearch,
+            allowFileAutoOpenBrowse, openFoldersOfAttachedFiles;
+    JButton editFileTypes;
+    ItemListener regExpListener;
+
+	JRadioButton useRegExpComboBox;
+    JRadioButton matchExactKeyOnly = new JRadioButton(Globals.lang("Autolink only files that match the BibTeX key")),
+        matchStartsWithKey = new JRadioButton(Globals.lang("Autolink files with names starting with the BibTeX key"));
+
+    public ExternalTab(JabRefFrame frame, PrefsDialog3 prefsDiag, JabRefPreferences prefs,
+                       HelpDialog helpDialog) {
+		_prefs = prefs;
+		_frame = frame;
+		setLayout(new BorderLayout());
+
+		psDir = new JTextField(25);
+		pdfDir = new JTextField(25);
+        fileDir = new JTextField(25);
+        bibLocationAsFileDir = new JCheckBox(Globals.lang("Allow file links relative to each bib file's location"));
+        bibLocAsPrimaryDir = new JCheckBox(Globals.lang("Use the bib file location as primary file directory"));
+        bibLocAsPrimaryDir.setToolTipText(Globals.lang("When downloading files, or moving linked files to the "
+            +"file directory, prefer the bib file location rather than the file directory set above"));
+        bibLocationAsFileDir.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent changeEvent) {
+                bibLocAsPrimaryDir.setEnabled(bibLocationAsFileDir.isSelected());
+            }
+        });
+        editFileTypes = new JButton(Globals.lang("Manage external file types"));
+        runAutoFileSearch = new JCheckBox(Globals.lang("When opening file link, search for matching file if no link is defined"));
+        allowFileAutoOpenBrowse = new JCheckBox(Globals.lang("Automatically open browse dialog when creating new file link"));
+        regExpTextField = new JTextField(25);
+        useRegExpComboBox = new JRadioButton(Globals.lang("Use Regular Expression Search"));
+		regExpListener = new ItemListener() {
+			public void itemStateChanged(ItemEvent e) {
+				regExpTextField.setEditable(useRegExpComboBox.isSelected());
+			}
+		};
+		useRegExpComboBox.addItemListener(regExpListener);
+
+        editFileTypes.addActionListener(ExternalFileTypeEditor.getAction(prefsDiag));
+
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(matchExactKeyOnly);
+        bg.add(matchStartsWithKey);
+        bg.add(useRegExpComboBox);
+
+        BrowseAction browse;
+
+		FormLayout layout = new FormLayout(
+			"1dlu, 8dlu, left:pref, 4dlu, fill:150dlu, 4dlu, fill:pref","");
+
+		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+
+		builder.appendSeparator(Globals.lang("External file links"));
+		JPanel pan = new JPanel();
+		builder.append(pan);
+		/**
+		 * Fix for [ 1749613 ] About translation
+		 * 
+		 * https://sourceforge.net/tracker/index.php?func=detail&aid=1749613&group_id=92314&atid=600306
+		 * 
+		 * Cannot really use %0 to refer to the file type, since this ruins translation.
+		 */
+		JLabel lab = new JLabel(Globals.lang("Main file directory") + ":");
+		builder.append(lab);
+		builder.append(fileDir);
+		browse = new BrowseAction(_frame, fileDir, true);
+		builder.append(new JButton(browse));
+		builder.nextLine();
+        builder.append(new JPanel());
+        builder.append(bibLocationAsFileDir, 3);
+        builder.nextLine();
+        builder.append(new JPanel());
+        builder.append(bibLocAsPrimaryDir, 3);
+        builder.nextLine();
+		builder.append(new JPanel());
+        builder.append(matchStartsWithKey, 3);
+        builder.nextLine();
+        builder.append(new JPanel());
+        builder.append(matchExactKeyOnly, 3);
+        builder.nextLine();
+        builder.append(new JPanel());
+        builder.append(useRegExpComboBox);
+		builder.append(regExpTextField);
+
+		HelpAction helpAction = new HelpAction(helpDialog, GUIGlobals.regularExpressionSearchHelp,
+			Globals.lang("Help on Regular Expression Search"), GUIGlobals.getIconUrl("helpSmall"));
+		builder.append(helpAction.getIconButton());
+		builder.nextLine();
+        builder.append(new JPanel());
+        builder.append(runAutoFileSearch, 3);
+        builder.nextLine();
+        builder.append(new JPanel());
+        builder.append(allowFileAutoOpenBrowse);
+        builder.nextLine();
+
+		builder.appendSeparator(Globals.lang("Sending of emails"));
+		builder.append(new JPanel());
+		lab = new JLabel(Globals.lang("Subject for sending an email with references").concat(":"));
+		builder.append(lab);
+		emailSubject = new JTextField(25);
+		builder.append(emailSubject);
+		builder.nextLine();
+		builder.append(new JPanel());
+		openFoldersOfAttachedFiles = new JCheckBox(Globals.lang("Automatically open folders of attached files"));
+		builder.append(openFoldersOfAttachedFiles);
+		builder.nextLine();
+
+        builder.appendSeparator(Globals.lang("Legacy file fields"));
+		pan = new JPanel();
+		builder.append(pan);		
+		builder.append(new JLabel("<html>"+Globals.lang("Note that these settings are used for the legacy "
+			+"<b>pdf</b> and <b>ps</b> fields only.<br>For most users, setting the <b>Main file directory</b> "
+			+"above should be sufficient.")+"</html>"), 5);
+		builder.nextLine();
+		pan = new JPanel();
+		builder.append(pan);
+		lab = new JLabel(Globals.lang("Main PDF directory") + ":");
+		builder.append(lab);
+		builder.append(pdfDir);
+		browse = new BrowseAction(_frame, pdfDir, true);
+		builder.append(new JButton(browse));
+		builder.nextLine();
+
+        pan = new JPanel();
+		builder.append(pan);
+		lab = new JLabel(Globals.lang("Main PS directory") + ":");
+		builder.append(lab);
+		builder.append(psDir);
+		browse = new BrowseAction(_frame, psDir, true);
+		builder.append(new JButton(browse));
+		builder.nextLine();
+		builder.appendSeparator(Globals.lang("External programs"));
+
+		builder.nextLine();
+
+        JPanel butpan = new JPanel();
+        butpan.setLayout(new GridLayout(2,3));
+        addSettingsButton(new PushToLyx(), butpan);
+        addSettingsButton(new PushToEmacs(), butpan);
+        addSettingsButton(new PushToWinEdt(), butpan);
+        addSettingsButton(new PushToVim(), butpan);
+        addSettingsButton(new PushToLatexEditor(), butpan);
+        addSettingsButton(new PushToTeXstudio(), butpan);
+        builder.append(new JPanel());
+        builder.append(butpan, 3);
+
+        builder.nextLine();
+        builder.append(pan);
+        builder.append(editFileTypes);
+        
+        pan = builder.getPanel();
+		pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+		add(pan, BorderLayout.CENTER);
+
+    }
+
+    private void addSettingsButton(final PushToApplication pt, JPanel p) {
+        //if (b.getColumn() < 2)
+        //    b.append(new JPanel());
+        //JPanel pan = new JPanel();
+        //pan.setLayout(new BorderLayout());
+        //pan.add(new JLabel(Globals.lang("Settings for %0", pt.getApplicationName())), BorderLayout.CENTER);
+        JButton button = new JButton(Globals.lang("Settings for %0", pt.getApplicationName()),
+                pt.getIcon());
+        button.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                PushToApplicationButton.showSettingsDialog(_frame, pt, pt.getSettingsPanel());
+            }
+        });
+        p.add(button);//, BorderLayout.CENTER);
+        //b.append(button);
+        //b.nextLine();
+        //b.append(pan);
+        //if (b.getColumn() >= 6)
+        //    b.nextLine();
+    }
+
+	public void setValues() {
+		pdfDir.setText(_prefs.get("pdfDirectory"));
+		psDir.setText(_prefs.get("psDirectory"));
+        fileDir.setText(_prefs.get(GUIGlobals.FILE_FIELD+"Directory"));
+        bibLocationAsFileDir.setSelected(_prefs.getBoolean("bibLocationAsFileDir"));
+        bibLocAsPrimaryDir.setSelected(_prefs.getBoolean("bibLocAsPrimaryDir"));
+        bibLocAsPrimaryDir.setEnabled(bibLocationAsFileDir.isSelected());
+        runAutoFileSearch.setSelected(_prefs.getBoolean("runAutomaticFileSearch"));
+		regExpTextField.setText(_prefs.get(JabRefPreferences.REG_EXP_SEARCH_EXPRESSION_KEY));
+        allowFileAutoOpenBrowse.setSelected(_prefs.getBoolean("allowFileAutoOpenBrowse"));
+        
+        emailSubject.setText(_prefs.get(JabRefPreferences.EMAIL_SUBJECT));
+        openFoldersOfAttachedFiles.setSelected(_prefs.getBoolean(JabRefPreferences.OPEN_FOLDERS_OF_ATTACHED_FILES));
+
+        if (_prefs.getBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY))
+            useRegExpComboBox.setSelected(true);
+        else if (_prefs.getBoolean("autolinkExactKeyOnly"))
+            matchExactKeyOnly.setSelected(true);
+        else
+            matchStartsWithKey.setSelected(true);
+    }
+
+	public void storeSettings() {
+
+		_prefs.putBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY, useRegExpComboBox.isSelected());
+		if (useRegExpComboBox.isSelected()) {
+			_prefs.put(JabRefPreferences.REG_EXP_SEARCH_EXPRESSION_KEY, regExpTextField.getText());
+		}
+
+		// We should maybe do some checking on the validity of the contents?
+		_prefs.put("pdfDirectory", pdfDir.getText());
+		_prefs.put("psDirectory", psDir.getText());
+        _prefs.put(GUIGlobals.FILE_FIELD+"Directory", fileDir.getText());
+        _prefs.putBoolean("bibLocationAsFileDir", bibLocationAsFileDir.isSelected());
+        _prefs.putBoolean("bibLocAsPrimaryDir", bibLocAsPrimaryDir.isSelected());
+		_prefs.putBoolean("autolinkExactKeyOnly", matchExactKeyOnly.isSelected());
+        _prefs.putBoolean("runAutomaticFileSearch", runAutoFileSearch.isSelected());
+        _prefs.putBoolean("allowFileAutoOpenBrowse", allowFileAutoOpenBrowse.isSelected());
+        _prefs.put(JabRefPreferences.EMAIL_SUBJECT, emailSubject.getText());
+        _prefs.putBoolean(JabRefPreferences.OPEN_FOLDERS_OF_ATTACHED_FILES, openFoldersOfAttachedFiles.isSelected());
+    }
+
+	public boolean readyToClose() {
+		return true;
+	}
+
+	public String getTabName() {
+		return Globals.lang("External programs");
+	}
+}
diff --git a/src/java/net/sf/jabref/FieldComparator.java b/src/java/net/sf/jabref/FieldComparator.java
index 2d433a5..b3312b8 100644
--- a/src/java/net/sf/jabref/FieldComparator.java
+++ b/src/java/net/sf/jabref/FieldComparator.java
@@ -1,190 +1,190 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import net.sf.jabref.gui.MainTableFormat;
-
-import java.text.Collator;
-import java.util.Comparator;
-
-/**
- * 
- * A comparator for BibtexEntry fields
- * 
- * Initial Version:
- * 
- * @author alver
- * @version Date: Oct 13, 2005 Time: 10:10:04 PM To
- * 
- * Current Version:
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- * TODO: Testcases
- * 
- */
-public class FieldComparator implements Comparator<BibtexEntry> {
-
-    private static Collator collator;
-
-    static {
-        collator = Collator.getInstance();
-    }
-
-	private String[] field;
-    private String fieldName;
-
-    boolean isNameField, isTypeHeader, isYearField, isMonthField, isNumeric;
-
-	int multiplier;
-
-	public FieldComparator(String field) {
-		this(field, false);
-	}
-
-	public FieldComparator(String field, boolean reversed) {
-        this.fieldName = field;
-        this.field = field.split(MainTableFormat.COL_DEFINITION_FIELD_SEPARATOR);
-		multiplier = reversed ? -1 : 1;
-		isTypeHeader = this.field[0].equals(GUIGlobals.TYPE_HEADER);
-        isNameField = (this.field[0].equals("author")
-                || this.field[0].equals("editor"));
-		isYearField = this.field[0].equals("year");
-		isMonthField = this.field[0].equals("month");
-        isNumeric = BibtexFields.isNumeric(this.field[0]);
-    }
-
-	public int compare(BibtexEntry e1, BibtexEntry e2) {
-		Object f1, f2;
-
-		if (isTypeHeader) {
-			// Sort by type.
-			f1 = e1.getType().getName();
-			f2 = e2.getType().getName();
-		} else {
-
-			// If the field is author or editor, we rearrange names so they are
-			// sorted according to last name.
-			f1 = getField(e1);
-			f2 = getField(e2);
-		}
-
-		/*
-		 * [ 1598777 ] Month sorting
-		 * 
-		 * http://sourceforge.net/tracker/index.php?func=detail&aid=1598777&group_id=92314&atid=600306
-		 */
-		int localMultiplier = multiplier;
-		if (isMonthField)
-			localMultiplier = -localMultiplier;
-		
-		// Catch all cases involving null:
-		if (f1 == null)
-			return f2 == null ? 0 : localMultiplier;
-
-		if (f2 == null)
-			return -localMultiplier;
-
-		// Now we now that both f1 and f2 are != null
-		if (isNameField) {
-			f1 = AuthorList.fixAuthorForAlphabetization((String) f1);
-			f2 = AuthorList.fixAuthorForAlphabetization((String) f2);
-		} else if (isYearField) {
-			/*
-			 * [ 1285977 ] Impossible to properly sort a numeric field
-			 * 
-			 * http://sourceforge.net/tracker/index.php?func=detail&aid=1285977&group_id=92314&atid=600307
-			 */
-			f1 = Util.toFourDigitYear((String) f1);
-			f2 = Util.toFourDigitYear((String) f2);
-		} else if (isMonthField) {
-			/*
-			 * [ 1535044 ] Month sorting
-			 * 
-			 * http://sourceforge.net/tracker/index.php?func=detail&aid=1535044&group_id=92314&atid=600306
-			 */
-			f1 = new Integer(Util.getMonthNumber((String)f1));			
-			f2 = new Integer(Util.getMonthNumber((String)f2));
-		}
-
-        if (isNumeric) {
-            Integer i1 = null, i2 = null;
-            try {
-                i1 = Integer.parseInt((String)f1);
-            } catch (NumberFormatException ex) {
-                // Parsing failed.
-            }
-
-            try {
-                i2 = Integer.parseInt((String)f2);
-            } catch (NumberFormatException ex) {
-                // Parsing failed.
-            }
-
-            if (i2 != null && i1 != null) {
-                // Ok, parsing was successful. Update f1 and f2:
-                f1 = i1;
-                f2 = i2;
-            } else if (i1 != null) {
-                // The first one was parseable, but not the second one.
-                // This means we consider one < two
-                f1 = i1;
-                f2 = new Integer(i1.intValue()+1);
-            } else if (i2 != null) {
-                // The second one was parseable, but not the first one.
-                // This means we consider one > two
-                f2 = i2;
-                f1 = new Integer(i2.intValue()+1);
-            }
-            // Else none of them were parseable, and we can fall back on comparing strings.    
-        }
-
-        int result = 0;
-		if ((f1 instanceof Integer) && (f2 instanceof Integer)) {
-			result = (((Integer) f1).compareTo((Integer) f2));
-		} else if (f2 instanceof Integer) {
-			Integer f1AsInteger = new Integer(f1.toString());
-			result = -((f1AsInteger).compareTo((Integer) f2));
-		} else if (f1 instanceof Integer) {
-			Integer f2AsInteger = new Integer(f2.toString());
-			result = -(((Integer) f1).compareTo(f2AsInteger));
-		} else {
-			String ours = ((String) f1).toLowerCase(), theirs = ((String) f2).toLowerCase();
-            result = collator.compare(ours, theirs);//ours.compareTo(theirs);
-		}
-
-		return result * localMultiplier;
-	}
-
-    private Object getField(BibtexEntry entry) {
-        for (int i = 0; i < field.length; i++) {
-            Object o = entry.getField(field[i]);
-            if (o != null)
-                return o;
-        }
-        return null;
-    }
-
-    /**
-	 * Returns the field this Comparator compares by.
-	 * 
-	 * @return The field name.
-	 */
-	public String getFieldName() {
-		return fieldName;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import net.sf.jabref.gui.MainTableFormat;
+
+import java.text.Collator;
+import java.util.Comparator;
+
+/**
+ * 
+ * A comparator for BibtexEntry fields
+ * 
+ * Initial Version:
+ * 
+ * @author alver
+ * @version Date: Oct 13, 2005 Time: 10:10:04 PM To
+ * 
+ * Current Version:
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ * TODO: Testcases
+ * 
+ */
+public class FieldComparator implements Comparator<BibtexEntry> {
+
+    private static Collator collator;
+
+    static {
+        collator = Collator.getInstance();
+    }
+
+	private String[] field;
+    private String fieldName;
+
+    boolean isNameField, isTypeHeader, isYearField, isMonthField, isNumeric;
+
+	int multiplier;
+
+	public FieldComparator(String field) {
+		this(field, false);
+	}
+
+	public FieldComparator(String field, boolean reversed) {
+        this.fieldName = field;
+        this.field = field.split(MainTableFormat.COL_DEFINITION_FIELD_SEPARATOR);
+		multiplier = reversed ? -1 : 1;
+		isTypeHeader = this.field[0].equals(GUIGlobals.TYPE_HEADER);
+        isNameField = (this.field[0].equals("author")
+                || this.field[0].equals("editor"));
+		isYearField = this.field[0].equals("year");
+		isMonthField = this.field[0].equals("month");
+        isNumeric = BibtexFields.isNumeric(this.field[0]);
+    }
+
+	public int compare(BibtexEntry e1, BibtexEntry e2) {
+		Object f1, f2;
+
+		if (isTypeHeader) {
+			// Sort by type.
+			f1 = e1.getType().getName();
+			f2 = e2.getType().getName();
+		} else {
+
+			// If the field is author or editor, we rearrange names so they are
+			// sorted according to last name.
+			f1 = getField(e1);
+			f2 = getField(e2);
+		}
+
+		/*
+		 * [ 1598777 ] Month sorting
+		 * 
+		 * http://sourceforge.net/tracker/index.php?func=detail&aid=1598777&group_id=92314&atid=600306
+		 */
+		int localMultiplier = multiplier;
+		if (isMonthField)
+			localMultiplier = -localMultiplier;
+		
+		// Catch all cases involving null:
+		if (f1 == null)
+			return f2 == null ? 0 : localMultiplier;
+
+		if (f2 == null)
+			return -localMultiplier;
+
+		// Now we now that both f1 and f2 are != null
+		if (isNameField) {
+			f1 = AuthorList.fixAuthorForAlphabetization((String) f1);
+			f2 = AuthorList.fixAuthorForAlphabetization((String) f2);
+		} else if (isYearField) {
+			/*
+			 * [ 1285977 ] Impossible to properly sort a numeric field
+			 * 
+			 * http://sourceforge.net/tracker/index.php?func=detail&aid=1285977&group_id=92314&atid=600307
+			 */
+			f1 = Util.toFourDigitYear((String) f1);
+			f2 = Util.toFourDigitYear((String) f2);
+		} else if (isMonthField) {
+			/*
+			 * [ 1535044 ] Month sorting
+			 * 
+			 * http://sourceforge.net/tracker/index.php?func=detail&aid=1535044&group_id=92314&atid=600306
+			 */
+			f1 = new Integer(Util.getMonthNumber((String)f1));			
+			f2 = new Integer(Util.getMonthNumber((String)f2));
+		}
+
+        if (isNumeric) {
+            Integer i1 = null, i2 = null;
+            try {
+                i1 = Integer.parseInt((String)f1);
+            } catch (NumberFormatException ex) {
+                // Parsing failed.
+            }
+
+            try {
+                i2 = Integer.parseInt((String)f2);
+            } catch (NumberFormatException ex) {
+                // Parsing failed.
+            }
+
+            if (i2 != null && i1 != null) {
+                // Ok, parsing was successful. Update f1 and f2:
+                f1 = i1;
+                f2 = i2;
+            } else if (i1 != null) {
+                // The first one was parseable, but not the second one.
+                // This means we consider one < two
+                f1 = i1;
+                f2 = new Integer(i1.intValue()+1);
+            } else if (i2 != null) {
+                // The second one was parseable, but not the first one.
+                // This means we consider one > two
+                f2 = i2;
+                f1 = new Integer(i2.intValue()+1);
+            }
+            // Else none of them were parseable, and we can fall back on comparing strings.    
+        }
+
+        int result = 0;
+		if ((f1 instanceof Integer) && (f2 instanceof Integer)) {
+			result = (((Integer) f1).compareTo((Integer) f2));
+		} else if (f2 instanceof Integer) {
+			Integer f1AsInteger = new Integer(f1.toString());
+			result = -((f1AsInteger).compareTo((Integer) f2));
+		} else if (f1 instanceof Integer) {
+			Integer f2AsInteger = new Integer(f2.toString());
+			result = -(((Integer) f1).compareTo(f2AsInteger));
+		} else {
+			String ours = ((String) f1).toLowerCase(), theirs = ((String) f2).toLowerCase();
+            result = collator.compare(ours, theirs);//ours.compareTo(theirs);
+		}
+
+		return result * localMultiplier;
+	}
+
+    private Object getField(BibtexEntry entry) {
+        for (int i = 0; i < field.length; i++) {
+            Object o = entry.getField(field[i]);
+            if (o != null)
+                return o;
+        }
+        return null;
+    }
+
+    /**
+	 * Returns the field this Comparator compares by.
+	 * 
+	 * @return The field name.
+	 */
+	public String getFieldName() {
+		return fieldName;
+	}
+}
diff --git a/src/java/net/sf/jabref/FieldComparatorStack.java b/src/java/net/sf/jabref/FieldComparatorStack.java
index 51bf38f..d41f856 100644
--- a/src/java/net/sf/jabref/FieldComparatorStack.java
+++ b/src/java/net/sf/jabref/FieldComparatorStack.java
@@ -1,42 +1,42 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.util.Comparator;
-import java.util.List;
-
-/**
- * This class represents a list of comparators. The first Comparator takes precedence,
- * and each time a Comparator returns 0, the next one is attempted. If all comparators
- * return 0 the final result will be 0.
- */
-public class FieldComparatorStack<T> implements Comparator<T> {
-
-    List<? extends Comparator<? super T>> comparators;
-
-    public FieldComparatorStack(List<? extends Comparator<? super T>> comparators) {
-        this.comparators = comparators;
-    }
-
-    public int compare(T o1, T o2) {
-    	for (Comparator<? super T> comp : comparators){
-    		int res = comp.compare(o1, o2);
-            if (res != 0)
-                return res;
-        }
-        return 0;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * This class represents a list of comparators. The first Comparator takes precedence,
+ * and each time a Comparator returns 0, the next one is attempted. If all comparators
+ * return 0 the final result will be 0.
+ */
+public class FieldComparatorStack<T> implements Comparator<T> {
+
+    List<? extends Comparator<? super T>> comparators;
+
+    public FieldComparatorStack(List<? extends Comparator<? super T>> comparators) {
+        this.comparators = comparators;
+    }
+
+    public int compare(T o1, T o2) {
+    	for (Comparator<? super T> comp : comparators){
+    		int res = comp.compare(o1, o2);
+            if (res != 0)
+                return res;
+        }
+        return 0;
+    }
+}
diff --git a/src/java/net/sf/jabref/FieldContentSelector.java b/src/java/net/sf/jabref/FieldContentSelector.java
index 6286258..5fc51ec 100644
--- a/src/java/net/sf/jabref/FieldContentSelector.java
+++ b/src/java/net/sf/jabref/FieldContentSelector.java
@@ -1,244 +1,244 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Iterator;
-import java.util.Vector;
-
-import javax.swing.*;
-
-import com.jgoodies.forms.layout.Sizes;
-import com.jgoodies.looks.Options;
-
-/**
- * A combo-box and a manage button that will add selected strings to an
- * associated entry editor.
- * 
- * Used to manage keywords and authors for instance.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class FieldContentSelector extends JComponent {
-
-	JComboBox comboBox;
-
-	FieldEditor editor;
-
-	MetaData metaData;
-
-	JabRefFrame frame;
-
-	Window owner;
-
-	BasePanel panel;
-
-    private AbstractAction action;
-    String delimiter;
-
-	/**
-	 * 
-	 * Create a new FieldContentSelector.
-	 * 
-	 * @param frame
-	 *            The one JabRef-Frame.
-	 * @param panel
-	 *            The basepanel the entry-editor is on.
-	 * @param owner
-	 *            The window/frame/dialog which should be the owner of the
-	 *            content selector dialog.
-	 * @param editor
-	 *            The entry editor which will be appended by the text selected
-	 *            by the user from the combobox.
-	 * @param metaData
-	 *            The metadata that contains the list of items to display in the
-	 *            combobox under the key Globals.SELECTOR_META_PREFIX +
-	 *            editor.getFieldName().
-	 * @param action
-	 *            The action that will be performed to after an item from the
-	 *            combobox has been appended to the text in the entryeditor.
-	 * @param horizontalLayout
-	 *            Whether to put a 2 pixel horizontal strut between combobox and
-	 *            button.
-	 */
-	public FieldContentSelector(JabRefFrame frame, final BasePanel panel,
-		Window owner, final FieldEditor editor, final MetaData metaData,
-		final AbstractAction action, boolean horizontalLayout, String delimiter) {
-
-		this.frame = frame;
-		this.editor = editor;
-		this.metaData = metaData;
-		this.panel = panel;
-		this.owner = owner;
-        this.action = action;
-        this.delimiter = delimiter;
-
-		comboBox = new JComboBox() {
-			public Dimension getPreferredSize() {
-				Dimension parents = super.getPreferredSize();
-				if (parents.width > GUIGlobals.MAX_CONTENT_SELECTOR_WIDTH)
-					parents.width = GUIGlobals.MAX_CONTENT_SELECTOR_WIDTH;
-				return parents;
-			}
-		};
-
-		GridBagLayout gbl = new GridBagLayout();
-		GridBagConstraints con = new GridBagConstraints();
-
-		setLayout(gbl);
-
-		// comboBox.setEditable(true);
-
-		comboBox.setMaximumRowCount(35);
-
-		// Set the width of the popup independent of the size of th box itself:
-		comboBox.putClientProperty(Options.COMBO_POPUP_PROTOTYPE_DISPLAY_VALUE_KEY,
-			"The longest text in the combo popup menu. And even longer.");
-
-		rebuildComboBox();
-
-		con.gridwidth = horizontalLayout ? 3 : GridBagConstraints.REMAINDER;
-		con.fill = GridBagConstraints.HORIZONTAL;
-		con.weightx = 1;
-		gbl.setConstraints(comboBox, con);
-
-		comboBox.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				/*
-				 * These conditions signify arrow key navigation in the dropdown
-				 * list, so we should not react to it. I'm not sure if this is
-				 * well defined enough to be guaranteed to work everywhere.
-				 */
-				if (e.getActionCommand().equals("comboBoxChanged") && (e.getModifiers() == 0))
-					return;
-
-				selectionMade();
-			}
-		});
-        // Add an action for the Enter key that signals a selection:
-        comboBox.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "enter");
-        comboBox.getActionMap().put("enter", new AbstractAction() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                selectionMade();
-                comboBox.setPopupVisible(false);
-            }
-        });
-
-        add(comboBox);
-
-		if (horizontalLayout)
-			add(Box.createHorizontalStrut(Sizes.dialogUnitXAsPixel(2, this)));
-
-		JButton manage = new JButton(Globals.lang("Manage"));
-		gbl.setConstraints(manage, con);
-		add(manage);
-
-		manage.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				ContentSelectorDialog2 csd = new ContentSelectorDialog2(FieldContentSelector.this.owner, FieldContentSelector.this.frame, panel, true, metaData, editor.getFieldName());
-				Util.placeDialog(csd, FieldContentSelector.this.frame);
-
-				// Calling setVisible(true) will open the modal dialog and block
-				// for the dialog to close.
-				csd.setVisible(true);
-
-				// So we need to rebuild the ComboBox afterwards
-				rebuildComboBox();
-			}
-		});
-	}
-
-    private void selectionMade() {
-        // The first element is only for show.
-        // CO: Why?
-        if (comboBox.getSelectedIndex() == 0)
-            return;
-
-        String chosen = (String) comboBox.getSelectedItem();
-        if (chosen == null || chosen.equals(""))
-            return;
-
-        // The following is not possible at the moment since the
-        // combobox cannot be edited!
-
-        // User edited in a new word. Add it.
-        // if (comboBox.getSelectedIndex() == -1)
-        // addWord(chosen);
-
-        // TODO: could improve checking as not do add the same item twice
-        if (!editor.getText().equals(""))
-            editor.append(FieldContentSelector.this.delimiter);
-
-        editor.append(chosen);
-
-        comboBox.setSelectedIndex(0);
-
-        // Fire event that we changed the editor
-        if (action != null)
-            action.actionPerformed(new ActionEvent(editor, 0, ""));
-
-        // Transfer focus to the editor.
-        editor.requestFocus();
-    }
-
-    void rebuildComboBox() {
-		comboBox.removeAllItems();
-
-		// TODO: CO - What for?
-		comboBox.addItem("");
-		Vector<String> items = metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName());
-		if (items != null) {
-			Iterator<String> i = items.iterator();
-			while (i.hasNext())
-				comboBox.addItem(i.next());
-		}
-	}
-
-	// Not used since the comboBox is not editable
-
-	//	/**
-	//	 * Adds a word to the selector (to the JList and to the MetaData), unless it
-	//	 * is already there
-	//	 * 
-	//	 * @param newWord
-	//	 *            String Word to add
-	//	 */
-	//	public void addWord(String newWord) {
-	//
-	//		Vector items = metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName());
-	//		boolean exists = false;
-	//		int pos = -1;
-	//		for (int i = 0; i < items.size(); i++) {
-	//			String s = (String) items.elementAt(i);
-	//			if (s.equals(newWord)) {
-	//				exists = true;
-	//				break;
-	//			}
-	//			if (s.toLowerCase().compareTo(newWord.toLowerCase()) < 0)
-	//				pos = i + 1;
-	//		}
-	//		if (!exists) {
-	//			items.add(Math.max(0, pos), newWord);
-	//			// TODO CO: Why is this non-undoable?
-	//			panel.markNonUndoableBaseChanged();
-	//			panel.updateAllContentSelectors();
-	//		}
-	//	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Iterator;
+import java.util.Vector;
+
+import javax.swing.*;
+
+import com.jgoodies.forms.layout.Sizes;
+import com.jgoodies.looks.Options;
+
+/**
+ * A combo-box and a manage button that will add selected strings to an
+ * associated entry editor.
+ * 
+ * Used to manage keywords and authors for instance.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class FieldContentSelector extends JComponent {
+
+	JComboBox comboBox;
+
+	FieldEditor editor;
+
+	MetaData metaData;
+
+	JabRefFrame frame;
+
+	Window owner;
+
+	BasePanel panel;
+
+    private AbstractAction action;
+    String delimiter;
+
+	/**
+	 * 
+	 * Create a new FieldContentSelector.
+	 * 
+	 * @param frame
+	 *            The one JabRef-Frame.
+	 * @param panel
+	 *            The basepanel the entry-editor is on.
+	 * @param owner
+	 *            The window/frame/dialog which should be the owner of the
+	 *            content selector dialog.
+	 * @param editor
+	 *            The entry editor which will be appended by the text selected
+	 *            by the user from the combobox.
+	 * @param metaData
+	 *            The metadata that contains the list of items to display in the
+	 *            combobox under the key Globals.SELECTOR_META_PREFIX +
+	 *            editor.getFieldName().
+	 * @param action
+	 *            The action that will be performed to after an item from the
+	 *            combobox has been appended to the text in the entryeditor.
+	 * @param horizontalLayout
+	 *            Whether to put a 2 pixel horizontal strut between combobox and
+	 *            button.
+	 */
+	public FieldContentSelector(JabRefFrame frame, final BasePanel panel,
+		Window owner, final FieldEditor editor, final MetaData metaData,
+		final AbstractAction action, boolean horizontalLayout, String delimiter) {
+
+		this.frame = frame;
+		this.editor = editor;
+		this.metaData = metaData;
+		this.panel = panel;
+		this.owner = owner;
+        this.action = action;
+        this.delimiter = delimiter;
+
+		comboBox = new JComboBox() {
+			public Dimension getPreferredSize() {
+				Dimension parents = super.getPreferredSize();
+				if (parents.width > GUIGlobals.MAX_CONTENT_SELECTOR_WIDTH)
+					parents.width = GUIGlobals.MAX_CONTENT_SELECTOR_WIDTH;
+				return parents;
+			}
+		};
+
+		GridBagLayout gbl = new GridBagLayout();
+		GridBagConstraints con = new GridBagConstraints();
+
+		setLayout(gbl);
+
+		// comboBox.setEditable(true);
+
+		comboBox.setMaximumRowCount(35);
+
+		// Set the width of the popup independent of the size of th box itself:
+		comboBox.putClientProperty(Options.COMBO_POPUP_PROTOTYPE_DISPLAY_VALUE_KEY,
+			"The longest text in the combo popup menu. And even longer.");
+
+		rebuildComboBox();
+
+		con.gridwidth = horizontalLayout ? 3 : GridBagConstraints.REMAINDER;
+		con.fill = GridBagConstraints.HORIZONTAL;
+		con.weightx = 1;
+		gbl.setConstraints(comboBox, con);
+
+		comboBox.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				/*
+				 * These conditions signify arrow key navigation in the dropdown
+				 * list, so we should not react to it. I'm not sure if this is
+				 * well defined enough to be guaranteed to work everywhere.
+				 */
+				if (e.getActionCommand().equals("comboBoxChanged") && (e.getModifiers() == 0))
+					return;
+
+				selectionMade();
+			}
+		});
+        // Add an action for the Enter key that signals a selection:
+        comboBox.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "enter");
+        comboBox.getActionMap().put("enter", new AbstractAction() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                selectionMade();
+                comboBox.setPopupVisible(false);
+            }
+        });
+
+        add(comboBox);
+
+		if (horizontalLayout)
+			add(Box.createHorizontalStrut(Sizes.dialogUnitXAsPixel(2, this)));
+
+		JButton manage = new JButton(Globals.lang("Manage"));
+		gbl.setConstraints(manage, con);
+		add(manage);
+
+		manage.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				ContentSelectorDialog2 csd = new ContentSelectorDialog2(FieldContentSelector.this.owner, FieldContentSelector.this.frame, panel, true, metaData, editor.getFieldName());
+				Util.placeDialog(csd, FieldContentSelector.this.frame);
+
+				// Calling setVisible(true) will open the modal dialog and block
+				// for the dialog to close.
+				csd.setVisible(true);
+
+				// So we need to rebuild the ComboBox afterwards
+				rebuildComboBox();
+			}
+		});
+	}
+
+    private void selectionMade() {
+        // The first element is only for show.
+        // CO: Why?
+        if (comboBox.getSelectedIndex() == 0)
+            return;
+
+        String chosen = (String) comboBox.getSelectedItem();
+        if (chosen == null || chosen.equals(""))
+            return;
+
+        // The following is not possible at the moment since the
+        // combobox cannot be edited!
+
+        // User edited in a new word. Add it.
+        // if (comboBox.getSelectedIndex() == -1)
+        // addWord(chosen);
+
+        // TODO: could improve checking as not do add the same item twice
+        if (!editor.getText().equals(""))
+            editor.append(FieldContentSelector.this.delimiter);
+
+        editor.append(chosen);
+
+        comboBox.setSelectedIndex(0);
+
+        // Fire event that we changed the editor
+        if (action != null)
+            action.actionPerformed(new ActionEvent(editor, 0, ""));
+
+        // Transfer focus to the editor.
+        editor.requestFocus();
+    }
+
+    void rebuildComboBox() {
+		comboBox.removeAllItems();
+
+		// TODO: CO - What for?
+		comboBox.addItem("");
+		Vector<String> items = metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName());
+		if (items != null) {
+			Iterator<String> i = items.iterator();
+			while (i.hasNext())
+				comboBox.addItem(i.next());
+		}
+	}
+
+	// Not used since the comboBox is not editable
+
+	//	/**
+	//	 * Adds a word to the selector (to the JList and to the MetaData), unless it
+	//	 * is already there
+	//	 * 
+	//	 * @param newWord
+	//	 *            String Word to add
+	//	 */
+	//	public void addWord(String newWord) {
+	//
+	//		Vector items = metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName());
+	//		boolean exists = false;
+	//		int pos = -1;
+	//		for (int i = 0; i < items.size(); i++) {
+	//			String s = (String) items.elementAt(i);
+	//			if (s.equals(newWord)) {
+	//				exists = true;
+	//				break;
+	//			}
+	//			if (s.toLowerCase().compareTo(newWord.toLowerCase()) < 0)
+	//				pos = i + 1;
+	//		}
+	//		if (!exists) {
+	//			items.add(Math.max(0, pos), newWord);
+	//			// TODO CO: Why is this non-undoable?
+	//			panel.markNonUndoableBaseChanged();
+	//			panel.updateAllContentSelectors();
+	//		}
+	//	}
+}
diff --git a/src/java/net/sf/jabref/FieldEditor.java b/src/java/net/sf/jabref/FieldEditor.java
index e51aaff..7b34ef2 100644
--- a/src/java/net/sf/jabref/FieldEditor.java
+++ b/src/java/net/sf/jabref/FieldEditor.java
@@ -1,106 +1,106 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import net.sf.jabref.gui.AutoCompleteListener;
-
-import java.awt.Color;
-import java.awt.Container;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.event.UndoableEditListener;
-
-
-/**
- * FieldEditors is a common interface between the FieldTextField and FieldTextArea.
- */
-public interface FieldEditor {
-
-	public String getFieldName();
-
-	/*
-	 * Returns the component to be added to a container. Might be a JScrollPane
-	 * or the component itself.
-	 */
-	public JComponent getPane();
-
-	/*
-	 * Returns the text component itself.
-	 */
-	public JComponent getTextComponent();
-
-	public JLabel getLabel();
-
-    public void setActiveBackgroundColor();
-
-    public void setValidBackgroundColor();
-
-    public void setInvalidBackgroundColor();
-
-	public void setLabelColor(Color c);
-
-	public void setBackground(Color c);
-
-    public void updateFontColor();
-
-	public String getText();
-
-	/**
-	 * Sets the given text on the current field editor and marks this text
-	 * editor as modified.
-	 * 
-	 * @param newText
-	 */
-	public void setText(String newText);
-
-	public void append(String text);
-
-	public Container getParent();
-
-	public void requestFocus();
-
-	public void setEnabled(boolean enabled);
-
-    public void updateFont();
-    /**
-	 * paste text into component, it should also take some selected text into
-	 * account
-	 */
-	public void paste(String textToInsert);
-
-	/**
-	 * normally implemented in JTextArea and JTextField
-	 * 
-	 * @return
-	 */
-	public String getSelectedText();
-
-
-    public boolean hasUndoInformation();
-
-    public void undo();
-
-    public boolean hasRedoInformation();
-
-    public void redo();
-
-    public void addUndoableEditListener(UndoableEditListener listener);
-
-    public void setAutoCompleteListener(AutoCompleteListener listener);
-
-    public void clearAutoCompleteSuggestion();
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import net.sf.jabref.gui.AutoCompleteListener;
+
+import java.awt.Color;
+import java.awt.Container;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.event.UndoableEditListener;
+
+
+/**
+ * FieldEditors is a common interface between the FieldTextField and FieldTextArea.
+ */
+public interface FieldEditor {
+
+	public String getFieldName();
+
+	/*
+	 * Returns the component to be added to a container. Might be a JScrollPane
+	 * or the component itself.
+	 */
+	public JComponent getPane();
+
+	/*
+	 * Returns the text component itself.
+	 */
+	public JComponent getTextComponent();
+
+	public JLabel getLabel();
+
+    public void setActiveBackgroundColor();
+
+    public void setValidBackgroundColor();
+
+    public void setInvalidBackgroundColor();
+
+	public void setLabelColor(Color c);
+
+	public void setBackground(Color c);
+
+    public void updateFontColor();
+
+	public String getText();
+
+	/**
+	 * Sets the given text on the current field editor and marks this text
+	 * editor as modified.
+	 * 
+	 * @param newText
+	 */
+	public void setText(String newText);
+
+	public void append(String text);
+
+	public Container getParent();
+
+	public void requestFocus();
+
+	public void setEnabled(boolean enabled);
+
+    public void updateFont();
+    /**
+	 * paste text into component, it should also take some selected text into
+	 * account
+	 */
+	public void paste(String textToInsert);
+
+	/**
+	 * normally implemented in JTextArea and JTextField
+	 * 
+	 * @return
+	 */
+	public String getSelectedText();
+
+
+    public boolean hasUndoInformation();
+
+    public void undo();
+
+    public boolean hasRedoInformation();
+
+    public void redo();
+
+    public void addUndoableEditListener(UndoableEditListener listener);
+
+    public void setAutoCompleteListener(AutoCompleteListener listener);
+
+    public void clearAutoCompleteSuggestion();
+}
diff --git a/src/java/net/sf/jabref/FieldEditorFocusListener.java b/src/java/net/sf/jabref/FieldEditorFocusListener.java
index ed7581f..c94d754 100644
--- a/src/java/net/sf/jabref/FieldEditorFocusListener.java
+++ b/src/java/net/sf/jabref/FieldEditorFocusListener.java
@@ -1,53 +1,53 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import javax.swing.*;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-
-
-/**
- * Focus listener that changes the color of the text area when it has focus.
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: 18.mar.2005
- * Time: 18:20:14
- * To change this template use File | Settings | File Templates.
- */
-public class FieldEditorFocusListener implements FocusListener {
-
-    public FieldEditorFocusListener() {
-    }
-
-    public void focusGained(FocusEvent event) {
-        if (event.getSource() instanceof FieldEditor)
-            ((FieldEditor)event.getSource()).setActiveBackgroundColor();
-        else
-            ((JComponent)event.getSource()).setBackground(GUIGlobals.activeBackground);
-    }
-
-
-    public void focusLost(FocusEvent event) {
-        if (event.getSource() instanceof FieldEditor)
-            ((FieldEditor)event.getSource()).setValidBackgroundColor();
-        else
-            ((JComponent)event.getSource()).setBackground(GUIGlobals.validFieldBackgroundColor);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import javax.swing.*;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+
+
+/**
+ * Focus listener that changes the color of the text area when it has focus.
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: 18.mar.2005
+ * Time: 18:20:14
+ * To change this template use File | Settings | File Templates.
+ */
+public class FieldEditorFocusListener implements FocusListener {
+
+    public FieldEditorFocusListener() {
+    }
+
+    public void focusGained(FocusEvent event) {
+        if (event.getSource() instanceof FieldEditor)
+            ((FieldEditor)event.getSource()).setActiveBackgroundColor();
+        else
+            ((JComponent)event.getSource()).setBackground(GUIGlobals.activeBackground);
+    }
+
+
+    public void focusLost(FocusEvent event) {
+        if (event.getSource() instanceof FieldEditor)
+            ((FieldEditor)event.getSource()).setValidBackgroundColor();
+        else
+            ((JComponent)event.getSource()).setBackground(GUIGlobals.validFieldBackgroundColor);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/FieldNameLabel.java b/src/java/net/sf/jabref/FieldNameLabel.java
index 9ec9c88..93208c9 100644
--- a/src/java/net/sf/jabref/FieldNameLabel.java
+++ b/src/java/net/sf/jabref/FieldNameLabel.java
@@ -1,46 +1,46 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-
-import javax.swing.BorderFactory;
-import javax.swing.JLabel;
-
-public class FieldNameLabel extends JLabel {
-
-  public FieldNameLabel(String name) {
-    super(name, JLabel.LEFT);
-      setVerticalAlignment(TOP);
-    //setFont(GUIGlobals.fieldNameFont);
-    setForeground(GUIGlobals.entryEditorLabelColor);
-      setBorder(BorderFactory.createMatteBorder(1,0,0,0, Color.GRAY));
-    //setBorder(BorderFactory.createEtchedBorder());
-  }
-
-  public void paintComponent(Graphics g) {
-    Graphics2D g2 = (Graphics2D)g;
-    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
-                        RenderingHints.VALUE_ANTIALIAS_ON);
-    g2.setRenderingHint(RenderingHints.KEY_RENDERING,
-                        RenderingHints.VALUE_RENDER_QUALITY);
-    super.paintComponent(g2);
-  }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+
+public class FieldNameLabel extends JLabel {
+
+  public FieldNameLabel(String name) {
+    super(name, JLabel.LEFT);
+      setVerticalAlignment(TOP);
+    //setFont(GUIGlobals.fieldNameFont);
+    setForeground(GUIGlobals.entryEditorLabelColor);
+      setBorder(BorderFactory.createMatteBorder(1,0,0,0, Color.GRAY));
+    //setBorder(BorderFactory.createEtchedBorder());
+  }
+
+  public void paintComponent(Graphics g) {
+    Graphics2D g2 = (Graphics2D)g;
+    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+                        RenderingHints.VALUE_ANTIALIAS_ON);
+    g2.setRenderingHint(RenderingHints.KEY_RENDERING,
+                        RenderingHints.VALUE_RENDER_QUALITY);
+    super.paintComponent(g2);
+  }
+
+}
diff --git a/src/java/net/sf/jabref/FieldTextArea.java b/src/java/net/sf/jabref/FieldTextArea.java
index dd856df..d1630e9 100644
--- a/src/java/net/sf/jabref/FieldTextArea.java
+++ b/src/java/net/sf/jabref/FieldTextArea.java
@@ -1,197 +1,197 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import net.sf.jabref.gui.AutoCompleteListener;
-import net.sf.jabref.SearchTextListener;
-
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.util.regex.Pattern;
-
-import javax.swing.*;
-import javax.swing.event.UndoableEditListener;
-import javax.swing.event.UndoableEditEvent;
-import javax.swing.text.DefaultEditorKit;
-import javax.swing.text.Document;
-import javax.swing.undo.CannotRedoException;
-import javax.swing.undo.UndoManager;
-import javax.swing.undo.CannotUndoException;
-
-/**
- * An implementation of the FieldEditor backed by a JTextArea. Used for
- * multi-line input.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class FieldTextArea extends JTextAreaWithHighlighting implements FieldEditor {
-
-	Dimension PREFERRED_SIZE;
-
-	JScrollPane sp;
-
-	FieldNameLabel label;
-
-	String fieldName;
-
-	final static Pattern bull = Pattern.compile("\\s*[-\\*]+.*");
-
-	final static Pattern indent = Pattern.compile("\\s+.*");
-
-	private AutoCompleteListener autoCompleteListener = null;
-
-    // protected UndoManager undo = new UndoManager();
-
-	public FieldTextArea(String fieldName_, String content) {
-		super(content);
-
-		// Listen for undo and redo events
-		/*
-		 * getDocument().addUndoableEditListener(new UndoableEditListener() {
-		 * public void undoableEditHappened(UndoableEditEvent evt) {
-		 * undo.addEdit(evt.getEdit()); } });
-		 */
-
-		updateFont();
-
-		// Add the global focus listener, so a menu item can see if this field
-		// was focused when an action was called.
-		addFocusListener(Globals.focusListener);
-		addFocusListener(new FieldEditorFocusListener());
-		sp = new JScrollPane(this, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-		sp.setMinimumSize(new Dimension(200, 1));
-
-		setLineWrap(true);
-		setWrapStyleWord(true);
-		fieldName = fieldName_;
-
-		label = new FieldNameLabel(" " + Util.nCase(fieldName) + " ");
-		setBackground(GUIGlobals.validFieldBackgroundColor);
-		setForeground(GUIGlobals.editorTextColor);
-
-		// setFont(new Font("Times", Font.PLAIN, 10));
-
-		FieldTextMenu popMenu = new FieldTextMenu(this);
-		this.addMouseListener(popMenu);
-		label.addMouseListener(popMenu);
-
-    }
-
-	public Dimension getPreferredScrollableViewportSize() {
-		return getPreferredSize();
-	}
-
-	/*
-	 * public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; if
-	 * (antialias) g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
-	 * RenderingHints.VALUE_ANTIALIAS_ON); super.paint(g2); }
-	 */
-
-    public String getFieldName() {
-		return fieldName;
-	}
-
-	public void setFieldName(String newName) {
-		fieldName = newName;
-	}
-
-	public JLabel getLabel() {
-		return label;
-	}
-
-	public void setLabelColor(Color c) {
-		label.setForeground(c);
-	}
-
-	public JComponent getPane() {
-		return sp;
-	}
-
-	public JComponent getTextComponent() {
-		return this;
-	}
-
-	public void setActiveBackgroundColor() {
-		setBackground(GUIGlobals.activeBackground);
-	}
-
-	public void setValidBackgroundColor() {
-		setBackground(GUIGlobals.validFieldBackgroundColor);
-	}
-
-	public void setInvalidBackgroundColor() {
-		setBackground(GUIGlobals.invalidFieldBackgroundColor);
-	}
-
-	public void updateFontColor() {
-		setForeground(GUIGlobals.editorTextColor);
-	}
-
-	public void updateFont() {
-		setFont(GUIGlobals.CURRENTFONT);
-	}
-
-	public void paste(String textToInsert) {
-		int sel = getSelectionEnd() - getSelectionStart();
-		if (sel > 0) // selected text available
-			replaceSelection(textToInsert);
-		else {
-			int cPos = this.getCaretPosition();
-			this.insert(textToInsert, cPos);
-		}
-	}
-
-	public boolean hasUndoInformation() {
-		return false;// undo.canUndo();
-	}
-
-	public void undo() {
-		/*
-		 * try { if (undo.canUndo()) { undo.undo(); } } catch
-		 * (CannotUndoException e) { }
-		 */
-
-	}
-
-	public boolean hasRedoInformation() {
-		return false;// undo.canRedo();
-	}
-
-	public void redo() {
-		/*
-		 * try { if (undo.canRedo()) { undo.redo(); } } catch
-		 * (CannotUndoException e) { }
-		 */
-
-	}
-
-	public void addUndoableEditListener(UndoableEditListener listener) {
-		getDocument().addUndoableEditListener(listener);
-	}
-
-	public void setAutoCompleteListener(AutoCompleteListener listener) {
-		autoCompleteListener = listener;
-	}
-
-	public void clearAutoCompleteSuggestion() {
-		if (autoCompleteListener != null) {
-			autoCompleteListener.clearCurrentSuggestion(this);
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import net.sf.jabref.gui.AutoCompleteListener;
+import net.sf.jabref.SearchTextListener;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.util.regex.Pattern;
+
+import javax.swing.*;
+import javax.swing.event.UndoableEditListener;
+import javax.swing.event.UndoableEditEvent;
+import javax.swing.text.DefaultEditorKit;
+import javax.swing.text.Document;
+import javax.swing.undo.CannotRedoException;
+import javax.swing.undo.UndoManager;
+import javax.swing.undo.CannotUndoException;
+
+/**
+ * An implementation of the FieldEditor backed by a JTextArea. Used for
+ * multi-line input.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class FieldTextArea extends JTextAreaWithHighlighting implements FieldEditor {
+
+	Dimension PREFERRED_SIZE;
+
+	JScrollPane sp;
+
+	FieldNameLabel label;
+
+	String fieldName;
+
+	final static Pattern bull = Pattern.compile("\\s*[-\\*]+.*");
+
+	final static Pattern indent = Pattern.compile("\\s+.*");
+
+	private AutoCompleteListener autoCompleteListener = null;
+
+    // protected UndoManager undo = new UndoManager();
+
+	public FieldTextArea(String fieldName_, String content) {
+		super(content);
+
+		// Listen for undo and redo events
+		/*
+		 * getDocument().addUndoableEditListener(new UndoableEditListener() {
+		 * public void undoableEditHappened(UndoableEditEvent evt) {
+		 * undo.addEdit(evt.getEdit()); } });
+		 */
+
+		updateFont();
+
+		// Add the global focus listener, so a menu item can see if this field
+		// was focused when an action was called.
+		addFocusListener(Globals.focusListener);
+		addFocusListener(new FieldEditorFocusListener());
+		sp = new JScrollPane(this, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+		sp.setMinimumSize(new Dimension(200, 1));
+
+		setLineWrap(true);
+		setWrapStyleWord(true);
+		fieldName = fieldName_;
+
+		label = new FieldNameLabel(" " + Util.nCase(fieldName) + " ");
+		setBackground(GUIGlobals.validFieldBackgroundColor);
+		setForeground(GUIGlobals.editorTextColor);
+
+		// setFont(new Font("Times", Font.PLAIN, 10));
+
+		FieldTextMenu popMenu = new FieldTextMenu(this);
+		this.addMouseListener(popMenu);
+		label.addMouseListener(popMenu);
+
+    }
+
+	public Dimension getPreferredScrollableViewportSize() {
+		return getPreferredSize();
+	}
+
+	/*
+	 * public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; if
+	 * (antialias) g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+	 * RenderingHints.VALUE_ANTIALIAS_ON); super.paint(g2); }
+	 */
+
+    public String getFieldName() {
+		return fieldName;
+	}
+
+	public void setFieldName(String newName) {
+		fieldName = newName;
+	}
+
+	public JLabel getLabel() {
+		return label;
+	}
+
+	public void setLabelColor(Color c) {
+		label.setForeground(c);
+	}
+
+	public JComponent getPane() {
+		return sp;
+	}
+
+	public JComponent getTextComponent() {
+		return this;
+	}
+
+	public void setActiveBackgroundColor() {
+		setBackground(GUIGlobals.activeBackground);
+	}
+
+	public void setValidBackgroundColor() {
+		setBackground(GUIGlobals.validFieldBackgroundColor);
+	}
+
+	public void setInvalidBackgroundColor() {
+		setBackground(GUIGlobals.invalidFieldBackgroundColor);
+	}
+
+	public void updateFontColor() {
+		setForeground(GUIGlobals.editorTextColor);
+	}
+
+	public void updateFont() {
+		setFont(GUIGlobals.CURRENTFONT);
+	}
+
+	public void paste(String textToInsert) {
+		int sel = getSelectionEnd() - getSelectionStart();
+		if (sel > 0) // selected text available
+			replaceSelection(textToInsert);
+		else {
+			int cPos = this.getCaretPosition();
+			this.insert(textToInsert, cPos);
+		}
+	}
+
+	public boolean hasUndoInformation() {
+		return false;// undo.canUndo();
+	}
+
+	public void undo() {
+		/*
+		 * try { if (undo.canUndo()) { undo.undo(); } } catch
+		 * (CannotUndoException e) { }
+		 */
+
+	}
+
+	public boolean hasRedoInformation() {
+		return false;// undo.canRedo();
+	}
+
+	public void redo() {
+		/*
+		 * try { if (undo.canRedo()) { undo.redo(); } } catch
+		 * (CannotUndoException e) { }
+		 */
+
+	}
+
+	public void addUndoableEditListener(UndoableEditListener listener) {
+		getDocument().addUndoableEditListener(listener);
+	}
+
+	public void setAutoCompleteListener(AutoCompleteListener listener) {
+		autoCompleteListener = listener;
+	}
+
+	public void clearAutoCompleteSuggestion() {
+		if (autoCompleteListener != null) {
+			autoCompleteListener.clearCurrentSuggestion(this);
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/FieldTextField.java b/src/java/net/sf/jabref/FieldTextField.java
index 1a2500f..c3c88d2 100644
--- a/src/java/net/sf/jabref/FieldTextField.java
+++ b/src/java/net/sf/jabref/FieldTextField.java
@@ -1,230 +1,230 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import net.sf.jabref.gui.AutoCompleteListener;
-
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-
-import javax.swing.*;
-import javax.swing.event.UndoableEditEvent;
-import javax.swing.event.UndoableEditListener;
-import javax.swing.text.Document;
-import javax.swing.undo.CannotRedoException;
-import javax.swing.undo.CannotUndoException;
-import javax.swing.undo.UndoManager;
-
-public class FieldTextField extends JTextField implements FieldEditor {
-
-	protected String fieldName;
-	protected JLabel label;
-    protected UndoManager undo;
-    private AutoCompleteListener autoCompleteListener = null;
-
-    //protected UndoManager undo = new UndoManager();
-
-
-	public FieldTextField(String fieldName_, String content, boolean changeColorOnFocus) {
-		super(content);
-
-        // Listen for undo and redo events
-        /*getDocument().addUndoableEditListener(new UndoableEditListener() {
-            public void undoableEditHappened(UndoableEditEvent evt) {
-                undo.addEdit(evt.getEdit());
-            }
-        });*/
-        setupUndoRedo();
-
-        updateFont();
-
-        // Add the global focus listener, so a menu item can see if this field
-		// was focused when
-		// an action was called.
-		addFocusListener(Globals.focusListener);
-		if (changeColorOnFocus)
-			addFocusListener(new FieldEditorFocusListener());
-		fieldName = fieldName_;
-		label = new FieldNameLabel(" " + Util.nCase(fieldName) + " ");
-		// label = new JLabel(" "+Util.nCase(fieldName)+" ", JLabel.CENTER);
-		// label.setBorder(BorderFactory.createEtchedBorder());
-        setBackground(GUIGlobals.validFieldBackgroundColor);
-        setForeground(GUIGlobals.editorTextColor);
-
-		// label.setOpaque(true);
-		// if ((content != null) && (content.length() > 0))
-		// label.setForeground(GUIGlobals.entryEditorLabelColor);
-		// At construction time, the field can never have an invalid value.
-		// else label.setForeground(GUIGlobals.nullFieldColor);
-
-		FieldTextMenu popMenu = new FieldTextMenu(this);
-		this.addMouseListener(popMenu);
-		label.addMouseListener(popMenu);
-	}
-
-    protected void setupUndoRedo() {
-        undo = new UndoManager();
-        Document doc = getDocument();
-
-        // Listen for undo and redo events
-        doc.addUndoableEditListener(new UndoableEditListener() {
-            public void undoableEditHappened(UndoableEditEvent evt) {
-                undo.addEdit(evt.getEdit());
-            }
-        });
-
-        // Create an undo action and add it to the text component
-        getActionMap().put("Undo",
-                new AbstractAction("Undo") {
-                    public void actionPerformed(ActionEvent evt) {
-                        try {
-                            if (undo.canUndo()) {
-                                undo.undo();
-                            }
-                        } catch (CannotUndoException e) {
-                        }
-                    }
-                });
-
-        // Bind the undo action to ctl-Z
-        getInputMap().put(Globals.prefs.getKey("Undo"), "Undo");
-
-        // Create a redo action and add it to the text component
-        getActionMap().put("Redo",
-                new AbstractAction("Redo") {
-                    public void actionPerformed(ActionEvent evt) {
-                        try {
-                            if (undo.canRedo()) {
-                                undo.redo();
-                            }
-                        } catch (CannotRedoException e) {
-                        }
-                    }
-                });
-
-        // Bind the redo action to ctl-Y
-        getInputMap().put(Globals.prefs.getKey("Redo"), "Redo");
-    }
-
-    @Override
-    public void setText(String t) {
-        super.setText(t);
-        if (undo != null) undo.discardAllEdits();
-    }
-
-    public void append(String text) {
-		setText(getText() + text);
-	}
-
-	public String getFieldName() {
-		return fieldName;
-	}
-
-	public JLabel getLabel() {
-		return label;
-	}
-
-	public void setLabelColor(Color c) {
-		label.setForeground(c);
-		throw new NullPointerException("ok");
-	}
-
-	public JComponent getPane() {
-		return this;
-	}
-
-	public JComponent getTextComponent() {
-		return this;
-
-    }
-
-    public void setActiveBackgroundColor() {
-        setBackground(GUIGlobals.activeBackground);
-    }
-
-    public void setValidBackgroundColor() {
-        setBackground(GUIGlobals.validFieldBackgroundColor);
-    }
-
-    public void setInvalidBackgroundColor() {
-        setBackground(GUIGlobals.invalidFieldBackgroundColor);
-    }
-
-    public void updateFontColor() {
-        setForeground(GUIGlobals.editorTextColor);
-    }
-    
-    public void updateFont() {
-        setFont(GUIGlobals.CURRENTFONT);
-    }
-
-    /*public void paint(Graphics g) {
-		Graphics2D g2 = (Graphics2D) g;
-		if (antialias)
-			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-		super.paint(g2);
-	}*/
-
-    public void paste(String textToInsert) {
-		int sel = getSelectionEnd() - getSelectionStart();
-		if (sel < 1) {
-			int cPos = getCaretPosition();
-			select(cPos, cPos);
-		}
-		replaceSelection(textToInsert);
-	}
-
-
-    public boolean hasUndoInformation() {
-        return false;//undo.canUndo();
-    }
-
-    public void undo() {
-        /*try {
-            if (undo.canUndo()) {
-                undo.undo();
-            }
-        } catch (CannotUndoException e) {
-        }*/
-    }
-
-    public boolean hasRedoInformation() {
-        return false;//undo.canRedo();
-    }
-
-    public void redo() {
-        /*try {
-            if (undo.canRedo()) {
-                undo.redo();
-            }
-        } catch (CannotUndoException e) {
-        }*/
-
-    }
-
-    public void addUndoableEditListener(UndoableEditListener listener) {
-        getDocument().addUndoableEditListener(listener);
-    }
-
-    public void setAutoCompleteListener(AutoCompleteListener listener) {
-        autoCompleteListener = listener;
-    }
-
-    public void clearAutoCompleteSuggestion() {
-        if (autoCompleteListener != null)
-            autoCompleteListener.clearCurrentSuggestion(this);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import net.sf.jabref.gui.AutoCompleteListener;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+
+import javax.swing.*;
+import javax.swing.event.UndoableEditEvent;
+import javax.swing.event.UndoableEditListener;
+import javax.swing.text.Document;
+import javax.swing.undo.CannotRedoException;
+import javax.swing.undo.CannotUndoException;
+import javax.swing.undo.UndoManager;
+
+public class FieldTextField extends JTextField implements FieldEditor {
+
+	protected String fieldName;
+	protected JLabel label;
+    protected UndoManager undo;
+    private AutoCompleteListener autoCompleteListener = null;
+
+    //protected UndoManager undo = new UndoManager();
+
+
+	public FieldTextField(String fieldName_, String content, boolean changeColorOnFocus) {
+		super(content);
+
+        // Listen for undo and redo events
+        /*getDocument().addUndoableEditListener(new UndoableEditListener() {
+            public void undoableEditHappened(UndoableEditEvent evt) {
+                undo.addEdit(evt.getEdit());
+            }
+        });*/
+        setupUndoRedo();
+
+        updateFont();
+
+        // Add the global focus listener, so a menu item can see if this field
+		// was focused when
+		// an action was called.
+		addFocusListener(Globals.focusListener);
+		if (changeColorOnFocus)
+			addFocusListener(new FieldEditorFocusListener());
+		fieldName = fieldName_;
+		label = new FieldNameLabel(" " + Util.nCase(fieldName) + " ");
+		// label = new JLabel(" "+Util.nCase(fieldName)+" ", JLabel.CENTER);
+		// label.setBorder(BorderFactory.createEtchedBorder());
+        setBackground(GUIGlobals.validFieldBackgroundColor);
+        setForeground(GUIGlobals.editorTextColor);
+
+		// label.setOpaque(true);
+		// if ((content != null) && (content.length() > 0))
+		// label.setForeground(GUIGlobals.entryEditorLabelColor);
+		// At construction time, the field can never have an invalid value.
+		// else label.setForeground(GUIGlobals.nullFieldColor);
+
+		FieldTextMenu popMenu = new FieldTextMenu(this);
+		this.addMouseListener(popMenu);
+		label.addMouseListener(popMenu);
+	}
+
+    protected void setupUndoRedo() {
+        undo = new UndoManager();
+        Document doc = getDocument();
+
+        // Listen for undo and redo events
+        doc.addUndoableEditListener(new UndoableEditListener() {
+            public void undoableEditHappened(UndoableEditEvent evt) {
+                undo.addEdit(evt.getEdit());
+            }
+        });
+
+        // Create an undo action and add it to the text component
+        getActionMap().put("Undo",
+                new AbstractAction("Undo") {
+                    public void actionPerformed(ActionEvent evt) {
+                        try {
+                            if (undo.canUndo()) {
+                                undo.undo();
+                            }
+                        } catch (CannotUndoException e) {
+                        }
+                    }
+                });
+
+        // Bind the undo action to ctl-Z
+        getInputMap().put(Globals.prefs.getKey("Undo"), "Undo");
+
+        // Create a redo action and add it to the text component
+        getActionMap().put("Redo",
+                new AbstractAction("Redo") {
+                    public void actionPerformed(ActionEvent evt) {
+                        try {
+                            if (undo.canRedo()) {
+                                undo.redo();
+                            }
+                        } catch (CannotRedoException e) {
+                        }
+                    }
+                });
+
+        // Bind the redo action to ctl-Y
+        getInputMap().put(Globals.prefs.getKey("Redo"), "Redo");
+    }
+
+    @Override
+    public void setText(String t) {
+        super.setText(t);
+        if (undo != null) undo.discardAllEdits();
+    }
+
+    public void append(String text) {
+		setText(getText() + text);
+	}
+
+	public String getFieldName() {
+		return fieldName;
+	}
+
+	public JLabel getLabel() {
+		return label;
+	}
+
+	public void setLabelColor(Color c) {
+		label.setForeground(c);
+		throw new NullPointerException("ok");
+	}
+
+	public JComponent getPane() {
+		return this;
+	}
+
+	public JComponent getTextComponent() {
+		return this;
+
+    }
+
+    public void setActiveBackgroundColor() {
+        setBackground(GUIGlobals.activeBackground);
+    }
+
+    public void setValidBackgroundColor() {
+        setBackground(GUIGlobals.validFieldBackgroundColor);
+    }
+
+    public void setInvalidBackgroundColor() {
+        setBackground(GUIGlobals.invalidFieldBackgroundColor);
+    }
+
+    public void updateFontColor() {
+        setForeground(GUIGlobals.editorTextColor);
+    }
+    
+    public void updateFont() {
+        setFont(GUIGlobals.CURRENTFONT);
+    }
+
+    /*public void paint(Graphics g) {
+		Graphics2D g2 = (Graphics2D) g;
+		if (antialias)
+			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		super.paint(g2);
+	}*/
+
+    public void paste(String textToInsert) {
+		int sel = getSelectionEnd() - getSelectionStart();
+		if (sel < 1) {
+			int cPos = getCaretPosition();
+			select(cPos, cPos);
+		}
+		replaceSelection(textToInsert);
+	}
+
+
+    public boolean hasUndoInformation() {
+        return false;//undo.canUndo();
+    }
+
+    public void undo() {
+        /*try {
+            if (undo.canUndo()) {
+                undo.undo();
+            }
+        } catch (CannotUndoException e) {
+        }*/
+    }
+
+    public boolean hasRedoInformation() {
+        return false;//undo.canRedo();
+    }
+
+    public void redo() {
+        /*try {
+            if (undo.canRedo()) {
+                undo.redo();
+            }
+        } catch (CannotUndoException e) {
+        }*/
+
+    }
+
+    public void addUndoableEditListener(UndoableEditListener listener) {
+        getDocument().addUndoableEditListener(listener);
+    }
+
+    public void setAutoCompleteListener(AutoCompleteListener listener) {
+        autoCompleteListener = listener;
+    }
+
+    public void clearAutoCompleteSuggestion() {
+        if (autoCompleteListener != null)
+            autoCompleteListener.clearCurrentSuggestion(this);
+    }
+}
diff --git a/src/java/net/sf/jabref/FieldTextMenu.java b/src/java/net/sf/jabref/FieldTextMenu.java
index 918948b..aa38416 100644
--- a/src/java/net/sf/jabref/FieldTextMenu.java
+++ b/src/java/net/sf/jabref/FieldTextMenu.java
@@ -1,223 +1,223 @@
-/*
- Copyright (C) 2004 R. Nagel
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-
-// created by : r.nagel 19.10.2004
-//
-// function : a popupmenu for bibtex fieldtext editors
-//
-//
-// modified :
-
-
-package net.sf.jabref ;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.net.URL;
-
-import javax.swing.AbstractAction;
-import javax.swing.ImageIcon;
-import javax.swing.JPopupMenu;
-import javax.swing.KeyStroke;
-import javax.swing.text.JTextComponent;
-
-import net.sf.jabref.util.CaseChangeMenu;
-import net.sf.jabref.util.NameListNormalizer;
-
-public class FieldTextMenu implements MouseListener
-{
-  private FieldEditor myFieldName ;
-  private JPopupMenu inputMenu = new JPopupMenu() ;
-  private CopyAction copyAct = new CopyAction() ;
-  private PasteAction pasteAct = new PasteAction() ;
-
-  public FieldTextMenu(FieldEditor fieldComponent)
-  {
-    myFieldName = fieldComponent ;
-
-    // copy/paste Menu
-    inputMenu.add( pasteAct ) ;
-    inputMenu.add( copyAct ) ;
-    inputMenu.addSeparator();
-    inputMenu.add(new ReplaceAction());
-    if (myFieldName.getTextComponent() instanceof JTextComponent)
-        inputMenu.add(new CaseChangeMenu((JTextComponent) myFieldName.getTextComponent()));
-  }
-
-  public void mouseClicked(MouseEvent e)
-  {
-  }
-
-  public void mouseEntered(MouseEvent e)
-  {
-  }
-
-  public void mouseExited(MouseEvent e)
-  {
-  }
-
-  public void mousePressed(MouseEvent e)
-  {
-    maybeShowPopup( e ) ;
-  }
-
-  public void mouseReleased(MouseEvent e)
-  {
-    maybeShowPopup( e ) ;
-  }
-
-  private void maybeShowPopup( MouseEvent e )
-  {
-    if ( e.isPopupTrigger() )
-    {
-      if (myFieldName != null)
-      {
-          myFieldName.requestFocus();
-
-        // enable/disable copy to clipboard if selected text available
-        String txt = myFieldName.getSelectedText() ;
-        boolean cStat = false ;
-        if (txt != null)
-          if (txt.length() > 0)
-            cStat = true ;
-
-        copyAct.setEnabled(cStat);
-        inputMenu.show( e.getComponent(), e.getX(), e.getY() ) ;
-      }
-    }
-  }
-
-
-// ---------------------------------------------------------------------------
-  abstract class BasicAction extends AbstractAction
-  {
-    public BasicAction(String text, String description, URL icon)
-    {
-      super(Globals.lang(text), new ImageIcon(icon));
-      putValue(SHORT_DESCRIPTION, Globals.lang(description));
-    }
-
-    public BasicAction(String text, String description, URL icon, KeyStroke key)
-    {
-      super(Globals.lang(text), new ImageIcon(icon));
-      putValue(ACCELERATOR_KEY, key);
-      putValue(SHORT_DESCRIPTION, Globals.lang(description));
-    }
-
-    public BasicAction(String text)
-    {
-      super(Globals.lang(text));
-    }
-
-    public BasicAction(String text, KeyStroke key)
-    {
-      super(Globals.lang(text));
-      putValue(ACCELERATOR_KEY, key);
-    }
-
-    public abstract void actionPerformed(ActionEvent e) ;
-  }
-//---------------------------------------------------------------
-  /*class MenuHeaderAction extends BasicAction
-  {
-    public MenuHeaderAction(String comment)
-    {
-      super("Edit -" +comment);
-      this.setEnabled(false);
-    }
-
-    public void actionPerformed(ActionEvent e) { }
-  }
-    */
-
-// ---------------------------------------------------------------------------
-  class PasteAction extends BasicAction
-  {
-    public PasteAction()
-    {
-      super("Paste from clipboard", "Paste from clipboard",
-              GUIGlobals.getIconUrl("paste"));
-    }
-
-    public void actionPerformed(ActionEvent e)
-    {
-      try
-      {
-        String data = ClipBoardManager.clipBoard.getClipboardContents() ;
-        if (data != null)
-          if (data.length() > 0)
-            if (myFieldName != null)
-              myFieldName.paste(data);
-      }
-      catch (Exception ex) {}
-    }
-  }
-// ---------------------------------------------------------------------------
-  class CopyAction extends BasicAction
-  {
-    public CopyAction()
-    {
-      super("Copy to clipboard", "Copy to clipboard", GUIGlobals.getIconUrl("copy"));
-    }
-
-    public void actionPerformed(ActionEvent e)
-    {
-      try
-      {
-//        String data = ( String ) systemClip.getContents( null ).getTransferData(
-//            DataFlavor.stringFlavor ) ;
-        if (myFieldName != null)
-        {
-          String data = myFieldName.getSelectedText() ;
-          if (data != null)
-            if (data.length() > 0)
-              ClipBoardManager.clipBoard.setClipboardContents(data);
-        }
-      }
-      catch (Exception ex) {}
-    }
-  }
-
-  class ReplaceAction extends BasicAction{
-    public ReplaceAction(){
-        super("Normalize to BibTeX name format");
-        putValue(SHORT_DESCRIPTION, Globals.lang("If possible, normalize this list of names to conform to standard BibTeX name formatting"));
-    }
-    public void actionPerformed(ActionEvent evt){
-        if (myFieldName.getText().equals("")){
-            return;
-        }
-        //myFieldName.selectAll();
-        String input = myFieldName.getText();
-        //myFieldName.setText(input.replaceAll(","," and"));
-        myFieldName.setText(NameListNormalizer.normalizeAuthorList(input));
-    }
-  }
-
-
-}
+/*
+ Copyright (C) 2004 R. Nagel
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+
+// created by : r.nagel 19.10.2004
+//
+// function : a popupmenu for bibtex fieldtext editors
+//
+//
+// modified :
+
+
+package net.sf.jabref ;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.net.URL;
+
+import javax.swing.AbstractAction;
+import javax.swing.ImageIcon;
+import javax.swing.JPopupMenu;
+import javax.swing.KeyStroke;
+import javax.swing.text.JTextComponent;
+
+import net.sf.jabref.util.CaseChangeMenu;
+import net.sf.jabref.util.NameListNormalizer;
+
+public class FieldTextMenu implements MouseListener
+{
+  private FieldEditor myFieldName ;
+  private JPopupMenu inputMenu = new JPopupMenu() ;
+  private CopyAction copyAct = new CopyAction() ;
+  private PasteAction pasteAct = new PasteAction() ;
+
+  public FieldTextMenu(FieldEditor fieldComponent)
+  {
+    myFieldName = fieldComponent ;
+
+    // copy/paste Menu
+    inputMenu.add( pasteAct ) ;
+    inputMenu.add( copyAct ) ;
+    inputMenu.addSeparator();
+    inputMenu.add(new ReplaceAction());
+    if (myFieldName.getTextComponent() instanceof JTextComponent)
+        inputMenu.add(new CaseChangeMenu((JTextComponent) myFieldName.getTextComponent()));
+  }
+
+  public void mouseClicked(MouseEvent e)
+  {
+  }
+
+  public void mouseEntered(MouseEvent e)
+  {
+  }
+
+  public void mouseExited(MouseEvent e)
+  {
+  }
+
+  public void mousePressed(MouseEvent e)
+  {
+    maybeShowPopup( e ) ;
+  }
+
+  public void mouseReleased(MouseEvent e)
+  {
+    maybeShowPopup( e ) ;
+  }
+
+  private void maybeShowPopup( MouseEvent e )
+  {
+    if ( e.isPopupTrigger() )
+    {
+      if (myFieldName != null)
+      {
+          myFieldName.requestFocus();
+
+        // enable/disable copy to clipboard if selected text available
+        String txt = myFieldName.getSelectedText() ;
+        boolean cStat = false ;
+        if (txt != null)
+          if (txt.length() > 0)
+            cStat = true ;
+
+        copyAct.setEnabled(cStat);
+        inputMenu.show( e.getComponent(), e.getX(), e.getY() ) ;
+      }
+    }
+  }
+
+
+// ---------------------------------------------------------------------------
+  abstract class BasicAction extends AbstractAction
+  {
+    public BasicAction(String text, String description, URL icon)
+    {
+      super(Globals.lang(text), new ImageIcon(icon));
+      putValue(SHORT_DESCRIPTION, Globals.lang(description));
+    }
+
+    public BasicAction(String text, String description, URL icon, KeyStroke key)
+    {
+      super(Globals.lang(text), new ImageIcon(icon));
+      putValue(ACCELERATOR_KEY, key);
+      putValue(SHORT_DESCRIPTION, Globals.lang(description));
+    }
+
+    public BasicAction(String text)
+    {
+      super(Globals.lang(text));
+    }
+
+    public BasicAction(String text, KeyStroke key)
+    {
+      super(Globals.lang(text));
+      putValue(ACCELERATOR_KEY, key);
+    }
+
+    public abstract void actionPerformed(ActionEvent e) ;
+  }
+//---------------------------------------------------------------
+  /*class MenuHeaderAction extends BasicAction
+  {
+    public MenuHeaderAction(String comment)
+    {
+      super("Edit -" +comment);
+      this.setEnabled(false);
+    }
+
+    public void actionPerformed(ActionEvent e) { }
+  }
+    */
+
+// ---------------------------------------------------------------------------
+  class PasteAction extends BasicAction
+  {
+    public PasteAction()
+    {
+      super("Paste from clipboard", "Paste from clipboard",
+              GUIGlobals.getIconUrl("paste"));
+    }
+
+    public void actionPerformed(ActionEvent e)
+    {
+      try
+      {
+        String data = ClipBoardManager.clipBoard.getClipboardContents() ;
+        if (data != null)
+          if (data.length() > 0)
+            if (myFieldName != null)
+              myFieldName.paste(data);
+      }
+      catch (Exception ex) {}
+    }
+  }
+// ---------------------------------------------------------------------------
+  class CopyAction extends BasicAction
+  {
+    public CopyAction()
+    {
+      super("Copy to clipboard", "Copy to clipboard", GUIGlobals.getIconUrl("copy"));
+    }
+
+    public void actionPerformed(ActionEvent e)
+    {
+      try
+      {
+//        String data = ( String ) systemClip.getContents( null ).getTransferData(
+//            DataFlavor.stringFlavor ) ;
+        if (myFieldName != null)
+        {
+          String data = myFieldName.getSelectedText() ;
+          if (data != null)
+            if (data.length() > 0)
+              ClipBoardManager.clipBoard.setClipboardContents(data);
+        }
+      }
+      catch (Exception ex) {}
+    }
+  }
+
+  class ReplaceAction extends BasicAction{
+    public ReplaceAction(){
+        super("Normalize to BibTeX name format");
+        putValue(SHORT_DESCRIPTION, Globals.lang("If possible, normalize this list of names to conform to standard BibTeX name formatting"));
+    }
+    public void actionPerformed(ActionEvent evt){
+        if (myFieldName.getText().equals("")){
+            return;
+        }
+        //myFieldName.selectAll();
+        String input = myFieldName.getText();
+        //myFieldName.setText(input.replaceAll(","," and"));
+        myFieldName.setText(NameListNormalizer.normalizeAuthorList(input));
+    }
+  }
+
+
+}
diff --git a/src/java/net/sf/jabref/FileHistory.java b/src/java/net/sf/jabref/FileHistory.java
index e1dbe1c..4cbb241 100644
--- a/src/java/net/sf/jabref/FileHistory.java
+++ b/src/java/net/sf/jabref/FileHistory.java
@@ -1,140 +1,140 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.util.Iterator;
-import java.util.LinkedList;
-
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-
-public class FileHistory extends JMenu implements ActionListener {
-
-    JabRefPreferences prefs;
-    LinkedList<String> history = new LinkedList<String>();
-    JabRefFrame frame;
-
-    public FileHistory(JabRefPreferences prefs, JabRefFrame frame) {
-        String name = Globals.menuTitle("Recent files");
-        int i = name.indexOf('&');
-        if (i >= 0) {
-            setText(name.substring(0, i) + name.substring(i + 1));
-            char mnemonic = Character.toUpperCase(name.charAt(i + 1));
-            setMnemonic((int) mnemonic);
-        } else
-            setText(name);
-
-        this.prefs = prefs;
-        this.frame = frame;
-        String[] old = prefs.getStringArray("recentFiles");
-        if ((old != null) && (old.length > 0)) {
-            for (i = 0; i < old.length; i++) {
-                history.addFirst(old[i]);
-            }
-            setItems();
-        } else
-            setEnabled(false);
-    }
-
-    /**
-     * Adds the file name to the top of the menu. If it already is in
-     * the menu, it is merely moved to the top.
-     *
-     * @param filename a <code>String</code> value
-     */
-    public void newFile(String filename) {
-        int i = 0;
-        while (i < history.size()) {
-            if (history.get(i).equals(filename))
-                history.remove(i--);
-            i++;
-        }
-        history.addFirst(filename);
-        while (history.size() > prefs.getInt("historySize")) {
-            history.removeLast();
-        }
-        setItems();
-        if (!isEnabled())
-            setEnabled(true);
-    }
-
-    private void setItems() {
-        removeAll();
-        Iterator<String> i = history.iterator();
-        int count = 1;
-        while (i.hasNext()) {
-            addItem(i.next(), count++);
-        }
-    }
-
-    private void addItem(String filename, int num) {
-        String number = num + "";
-        JMenuItem item = new JMenuItem(number + ". " + filename);
-        char mnemonic = Character.toUpperCase(number.charAt(0));
-        item.setMnemonic((int) mnemonic);
-        item.addActionListener(this);
-        add(item);
-        //history.addFirst(item);
-    }
-
-    private void removeItem(String filename) {
-        int i=0;
-        while (i < history.size()) {
-            if (history.get(i).equals(filename)) {
-                history.remove(i);
-                setItems();
-                return;
-            }
-            i++;
-        }
-    }
-
-    public void storeHistory() {
-        if (history.size() > 0) {
-            String[] names = new String[history.size()];
-            for (int i = 0; i < names.length; i++)
-                names[i] = history.get(i);
-            prefs.putStringArray("recentFiles", names);
-        }
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        String name = ((JMenuItem) e.getSource()).getText();
-        int pos = name.indexOf(" ");
-        name = name.substring(pos + 1);
-        //Util.pr("'"+name+"'");
-        final File fileToOpen = new File(name);
-
-        if (!fileToOpen.exists()) {
-            JOptionPane.showMessageDialog(frame, Globals.lang("File not found")+": "+fileToOpen.getName(),
-                    "Error", JOptionPane.ERROR_MESSAGE);
-            removeItem(name);
-            return;
-        }
-        (new Thread() {
-            public void run() {
-                frame.open.openIt(fileToOpen, true);
-            }
-        }).start();
-
-    }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+
+public class FileHistory extends JMenu implements ActionListener {
+
+    JabRefPreferences prefs;
+    LinkedList<String> history = new LinkedList<String>();
+    JabRefFrame frame;
+
+    public FileHistory(JabRefPreferences prefs, JabRefFrame frame) {
+        String name = Globals.menuTitle("Recent files");
+        int i = name.indexOf('&');
+        if (i >= 0) {
+            setText(name.substring(0, i) + name.substring(i + 1));
+            char mnemonic = Character.toUpperCase(name.charAt(i + 1));
+            setMnemonic((int) mnemonic);
+        } else
+            setText(name);
+
+        this.prefs = prefs;
+        this.frame = frame;
+        String[] old = prefs.getStringArray("recentFiles");
+        if ((old != null) && (old.length > 0)) {
+            for (i = 0; i < old.length; i++) {
+                history.addFirst(old[i]);
+            }
+            setItems();
+        } else
+            setEnabled(false);
+    }
+
+    /**
+     * Adds the file name to the top of the menu. If it already is in
+     * the menu, it is merely moved to the top.
+     *
+     * @param filename a <code>String</code> value
+     */
+    public void newFile(String filename) {
+        int i = 0;
+        while (i < history.size()) {
+            if (history.get(i).equals(filename))
+                history.remove(i--);
+            i++;
+        }
+        history.addFirst(filename);
+        while (history.size() > prefs.getInt("historySize")) {
+            history.removeLast();
+        }
+        setItems();
+        if (!isEnabled())
+            setEnabled(true);
+    }
+
+    private void setItems() {
+        removeAll();
+        Iterator<String> i = history.iterator();
+        int count = 1;
+        while (i.hasNext()) {
+            addItem(i.next(), count++);
+        }
+    }
+
+    private void addItem(String filename, int num) {
+        String number = num + "";
+        JMenuItem item = new JMenuItem(number + ". " + filename);
+        char mnemonic = Character.toUpperCase(number.charAt(0));
+        item.setMnemonic((int) mnemonic);
+        item.addActionListener(this);
+        add(item);
+        //history.addFirst(item);
+    }
+
+    private void removeItem(String filename) {
+        int i=0;
+        while (i < history.size()) {
+            if (history.get(i).equals(filename)) {
+                history.remove(i);
+                setItems();
+                return;
+            }
+            i++;
+        }
+    }
+
+    public void storeHistory() {
+        if (history.size() > 0) {
+            String[] names = new String[history.size()];
+            for (int i = 0; i < names.length; i++)
+                names[i] = history.get(i);
+            prefs.putStringArray("recentFiles", names);
+        }
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        String name = ((JMenuItem) e.getSource()).getText();
+        int pos = name.indexOf(" ");
+        name = name.substring(pos + 1);
+        //Util.pr("'"+name+"'");
+        final File fileToOpen = new File(name);
+
+        if (!fileToOpen.exists()) {
+            JOptionPane.showMessageDialog(frame, Globals.lang("File not found")+": "+fileToOpen.getName(),
+                    "Error", JOptionPane.ERROR_MESSAGE);
+            removeItem(name);
+            return;
+        }
+        (new Thread() {
+            public void run() {
+                frame.open.openIt(fileToOpen, true);
+            }
+        }).start();
+
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/FileTab.java b/src/java/net/sf/jabref/FileTab.java
index 77b1a14..025fe1d 100644
--- a/src/java/net/sf/jabref/FileTab.java
+++ b/src/java/net/sf/jabref/FileTab.java
@@ -1,224 +1,226 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.*;
-
-import javax.swing.*;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.ChangeEvent;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Preferences tab for file options. These options were moved out from GeneralTab to
- * resolve the space issue.
- */
-public class FileTab extends JPanel implements PrefsTab {
-
-    JabRefPreferences _prefs;
-    JabRefFrame _frame;
-
-    private JCheckBox backup, openLast, autoDoubleBraces, autoSave, promptBeforeUsingAutoSave;
-    private JRadioButton
-        saveOriginalOrder, saveAuthorOrder, saveTableOrder,
-        exportOriginalOrder, exportAuthorOrder, exportTableOrder,
-        resolveStringsStandard, resolveStringsAll;
-    private JTextField bracesAroundCapitalsFields, nonWrappableFields,
-            doNotResolveStringsFor;
-    private JSpinner autoSaveInterval;
-    private boolean origAutoSaveSetting = false;
-    private HelpAction autosaveHelp;
-
-    public FileTab(JabRefFrame frame, JabRefPreferences prefs) {
-        _prefs = prefs;
-        _frame = frame;
-
-        autosaveHelp = new HelpAction(frame.helpDiag, GUIGlobals.autosaveHelp, "Help",
-                GUIGlobals.getIconUrl("helpSmall"));
-        openLast = new JCheckBox(Globals.lang("Open last edited databases at startup"));
-        backup = new JCheckBox(Globals.lang("Backup old file when saving"));
-        saveAuthorOrder = new JRadioButton(Globals.lang("Save ordered by author/editor/year"));
-        exportAuthorOrder = new JRadioButton(Globals.lang("Export ordered by author/editor/year"));
-        saveOriginalOrder = new JRadioButton(Globals.lang("Save entries in their original order"));
-        exportOriginalOrder = new JRadioButton(Globals.lang("Export entries in their original order"));
-        saveTableOrder = new JRadioButton(Globals.lang("Save in current table sort order"));
-        exportTableOrder = new JRadioButton(Globals.lang("Export in current table sort order"));
-        autoSave = new JCheckBox(Globals.lang("Autosave"));
-        promptBeforeUsingAutoSave = new JCheckBox(Globals.lang("Prompt before recovering a database from an autosave file"));
-        autoSaveInterval = new JSpinner(new SpinnerNumberModel(1, 1, 60, 1));
-        ButtonGroup bg = new ButtonGroup();
-        bg.add(saveAuthorOrder);
-        bg.add(saveOriginalOrder);
-        bg.add(saveTableOrder);
-        bg = new ButtonGroup();
-        bg.add(exportAuthorOrder);
-        bg.add(exportOriginalOrder);
-        bg.add(exportTableOrder);
-        resolveStringsAll = new JRadioButton(Globals.lang("Resolve strings for all fields except")+":");
-        resolveStringsStandard = new JRadioButton(Globals.lang("Resolve strings for standard BibTeX fields only"));
-        bg = new ButtonGroup();
-        bg.add(resolveStringsAll);
-        bg.add(resolveStringsStandard);
-
-        bracesAroundCapitalsFields = new JTextField(25);
-        nonWrappableFields = new JTextField(25);
-        doNotResolveStringsFor = new JTextField(30);
-        autoDoubleBraces = new JCheckBox(
-                //+ Globals.lang("Store fields with double braces, and remove extra braces when loading.<BR>"
-                //+ "Double braces signal that BibTeX should preserve character case.") + "</HTML>");
-                Globals.lang("Remove double braces around BibTeX fields when loading."));
-
-        autoSave.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent changeEvent) {
-                autoSaveInterval.setEnabled(autoSave.isSelected());
-                promptBeforeUsingAutoSave.setEnabled(autoSave.isSelected());
-            }
-        });
-
-        FormLayout layout = new FormLayout("left:pref, 4dlu, fill:pref", "");
-        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-
-        builder.appendSeparator(Globals.lang("General"));
-        builder.nextLine();
-        builder.append(openLast, 3);
-        builder.nextLine();
-        builder.append(backup, 3);
-        builder.nextLine();
-        builder.append(autoDoubleBraces, 3);
-        builder.nextLine();
-
-        JLabel label = new JLabel(Globals.lang("Store the following fields with braces around capital letters")+":");
-        builder.append(label);
-        builder.append(bracesAroundCapitalsFields);
-        builder.nextLine();
-        label = new JLabel(Globals.lang("Do not wrap the following fields when saving")+":");
-        builder.append(label);
-        builder.append(nonWrappableFields);
-        builder.nextLine();
-        builder.append(resolveStringsStandard, 3);
-        builder.nextLine();
-        builder.append(resolveStringsAll);
-        builder.append(doNotResolveStringsFor);
-        builder.nextLine();
-        builder.appendSeparator(Globals.lang("Autosave"));
-        builder.append(autoSave, 1);
-        JButton hlp = new JButton(autosaveHelp);
-        hlp.setText(null);
-        hlp.setPreferredSize(new Dimension(24, 24));
-        JPanel hPan = new JPanel();
-        hPan.setLayout(new BorderLayout());
-        hPan.add(hlp, BorderLayout.EAST);
-        builder.append(hPan);
-        builder.nextLine();
-        builder.append(Globals.lang("Autosave interval (minutes)")+":");
-        builder.append(autoSaveInterval);
-        builder.nextLine();
-        builder.append(promptBeforeUsingAutoSave);
-        builder.nextLine();
-        builder.appendSeparator(Globals.lang("Sort order"));
-        builder.append(saveAuthorOrder, 1);
-        builder.append(exportAuthorOrder, 1);
-        builder.nextLine();
-        builder.append(saveTableOrder, 1);
-        builder.append(exportTableOrder, 1);
-        builder.nextLine();
-        builder.append(saveOriginalOrder, 1);
-        builder.append(exportOriginalOrder, 1);
-        builder.nextLine();
-
-        JPanel pan = builder.getPanel();
-        pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-        setLayout(new BorderLayout());
-        add(pan, BorderLayout.CENTER);
-    }
-
-    public void setValues() {
-        openLast.setSelected(_prefs.getBoolean("openLastEdited"));
-        backup.setSelected(_prefs.getBoolean("backup"));
-        if (_prefs.getBoolean("saveInStandardOrder"))
-            saveAuthorOrder.setSelected(true);
-        else if (_prefs.getBoolean("saveInOriginalOrder"))
-            saveOriginalOrder.setSelected(true);
-        else
-            saveTableOrder.setSelected(true);
-        if (_prefs.getBoolean("exportInStandardOrder"))
-            exportAuthorOrder.setSelected(true);
-        else if (_prefs.getBoolean("exportInOriginalOrder"))
-            exportOriginalOrder.setSelected(true);
-        else
-            exportTableOrder.setSelected(true);
-
-        //preserveFormatting.setSelected(_prefs.getBoolean("preserveFieldFormatting"));
-        autoDoubleBraces.setSelected(_prefs.getBoolean("autoDoubleBraces"));
-        resolveStringsAll.setSelected(_prefs.getBoolean("resolveStringsAllFields"));
-        resolveStringsStandard.setSelected(!resolveStringsAll.isSelected());
-        doNotResolveStringsFor.setText(_prefs.get("doNotResolveStringsFor"));
-        bracesAroundCapitalsFields.setText(_prefs.get("putBracesAroundCapitals"));
-        nonWrappableFields.setText(_prefs.get("nonWrappableFields"));
-
-        autoSave.setSelected(_prefs.getBoolean("autoSave"));
-        promptBeforeUsingAutoSave.setSelected(_prefs.getBoolean("promptBeforeUsingAutosave"));
-        autoSaveInterval.setValue(_prefs.getInt("autoSaveInterval"));
-        origAutoSaveSetting = autoSave.isSelected();
-    }
-
-    public void storeSettings() {
-        _prefs.putBoolean("backup", backup.isSelected());
-        _prefs.putBoolean("openLastEdited", openLast.isSelected());
-        _prefs.putBoolean("saveInStandardOrder", saveAuthorOrder.isSelected());
-        _prefs.putBoolean("saveInOriginalOrder", saveOriginalOrder.isSelected());
-        _prefs.putBoolean("exportInStandardOrder", exportAuthorOrder.isSelected());
-        _prefs.putBoolean("exportInOriginalOrder", exportOriginalOrder.isSelected());
-        _prefs.putBoolean("autoDoubleBraces", autoDoubleBraces.isSelected());
-        _prefs.putBoolean("resolveStringsAllFields", resolveStringsAll.isSelected());
-        _prefs.put("doNotResolveStringsFor", doNotResolveStringsFor.getText().trim());
-        _prefs.putBoolean("autoSave", autoSave.isSelected());
-        _prefs.putBoolean("promptBeforeUsingAutosave", promptBeforeUsingAutoSave.isSelected());
-        _prefs.putInt("autoSaveInterval", (Integer)autoSaveInterval.getValue());
-        doNotResolveStringsFor.setText(_prefs.get("doNotResolveStringsFor"));
-        boolean updateSpecialFields = false;
-        if (!bracesAroundCapitalsFields.getText().trim().equals(_prefs.get("putBracesAroundCapitals"))) {
-            _prefs.put("putBracesAroundCapitals", bracesAroundCapitalsFields.getText());
-            updateSpecialFields = true;
-        }
-        if (!nonWrappableFields.getText().trim().equals(_prefs.get("nonWrappableFields"))) {
-            _prefs.put("nonWrappableFields", nonWrappableFields.getText());
-            updateSpecialFields = true;
-        }
-        // If either of the two last entries were changed, run the update for special field handling:
-        if (updateSpecialFields)
-                _prefs.updateSpecialFieldHandling();
-
-        // See if we should start or stop the auto save manager:
-        if (!origAutoSaveSetting && autoSave.isSelected()) {
-            Globals.startAutoSaveManager(_frame);
-        }
-        else if (origAutoSaveSetting && !autoSave.isSelected()) {
-            Globals.stopAutoSaveManager();
-        }
-
-    }
-
-    public boolean readyToClose() {
-        return true;
-    }
-
-	public String getTabName() {
-		return Globals.lang("File");
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.*;
+
+import javax.swing.*;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.ChangeEvent;
+
+import net.sf.jabref.help.HelpAction;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Preferences tab for file options. These options were moved out from GeneralTab to
+ * resolve the space issue.
+ */
+public class FileTab extends JPanel implements PrefsTab {
+
+    JabRefPreferences _prefs;
+    JabRefFrame _frame;
+
+    private JCheckBox backup, openLast, autoDoubleBraces, autoSave, promptBeforeUsingAutoSave;
+    private JRadioButton
+        saveOriginalOrder, saveAuthorOrder, saveTableOrder,
+        exportOriginalOrder, exportAuthorOrder, exportTableOrder,
+        resolveStringsStandard, resolveStringsAll;
+    private JTextField bracesAroundCapitalsFields, nonWrappableFields,
+            doNotResolveStringsFor;
+    private JSpinner autoSaveInterval;
+    private boolean origAutoSaveSetting = false;
+    private HelpAction autosaveHelp;
+
+    public FileTab(JabRefFrame frame, JabRefPreferences prefs) {
+        _prefs = prefs;
+        _frame = frame;
+
+        autosaveHelp = new HelpAction(frame.helpDiag, GUIGlobals.autosaveHelp, "Help",
+                GUIGlobals.getIconUrl("helpSmall"));
+        openLast = new JCheckBox(Globals.lang("Open last edited databases at startup"));
+        backup = new JCheckBox(Globals.lang("Backup old file when saving"));
+        saveAuthorOrder = new JRadioButton(Globals.lang("Save ordered by author/editor/year"));
+        exportAuthorOrder = new JRadioButton(Globals.lang("Export ordered by author/editor/year"));
+        saveOriginalOrder = new JRadioButton(Globals.lang("Save entries in their original order"));
+        exportOriginalOrder = new JRadioButton(Globals.lang("Export entries in their original order"));
+        saveTableOrder = new JRadioButton(Globals.lang("Save in current table sort order"));
+        exportTableOrder = new JRadioButton(Globals.lang("Export in current table sort order"));
+        autoSave = new JCheckBox(Globals.lang("Autosave"));
+        promptBeforeUsingAutoSave = new JCheckBox(Globals.lang("Prompt before recovering a database from an autosave file"));
+        autoSaveInterval = new JSpinner(new SpinnerNumberModel(1, 1, 60, 1));
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(saveAuthorOrder);
+        bg.add(saveOriginalOrder);
+        bg.add(saveTableOrder);
+        bg = new ButtonGroup();
+        bg.add(exportAuthorOrder);
+        bg.add(exportOriginalOrder);
+        bg.add(exportTableOrder);
+        resolveStringsAll = new JRadioButton(Globals.lang("Resolve strings for all fields except")+":");
+        resolveStringsStandard = new JRadioButton(Globals.lang("Resolve strings for standard BibTeX fields only"));
+        bg = new ButtonGroup();
+        bg.add(resolveStringsAll);
+        bg.add(resolveStringsStandard);
+
+        bracesAroundCapitalsFields = new JTextField(25);
+        nonWrappableFields = new JTextField(25);
+        doNotResolveStringsFor = new JTextField(30);
+        autoDoubleBraces = new JCheckBox(
+                //+ Globals.lang("Store fields with double braces, and remove extra braces when loading.<BR>"
+                //+ "Double braces signal that BibTeX should preserve character case.") + "</HTML>");
+                Globals.lang("Remove double braces around BibTeX fields when loading."));
+
+        autoSave.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent changeEvent) {
+                autoSaveInterval.setEnabled(autoSave.isSelected());
+                promptBeforeUsingAutoSave.setEnabled(autoSave.isSelected());
+            }
+        });
+
+        FormLayout layout = new FormLayout("left:pref, 4dlu, fill:pref", "");
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+
+        builder.appendSeparator(Globals.lang("General"));
+        builder.nextLine();
+        builder.append(openLast, 3);
+        builder.nextLine();
+        builder.append(backup, 3);
+        builder.nextLine();
+        builder.append(autoDoubleBraces, 3);
+        builder.nextLine();
+
+        JLabel label = new JLabel(Globals.lang("Store the following fields with braces around capital letters")+":");
+        builder.append(label);
+        builder.append(bracesAroundCapitalsFields);
+        builder.nextLine();
+        label = new JLabel(Globals.lang("Do not wrap the following fields when saving")+":");
+        builder.append(label);
+        builder.append(nonWrappableFields);
+        builder.nextLine();
+        builder.append(resolveStringsStandard, 3);
+        builder.nextLine();
+        builder.append(resolveStringsAll);
+        builder.append(doNotResolveStringsFor);
+        builder.nextLine();
+        builder.appendSeparator(Globals.lang("Autosave"));
+        builder.append(autoSave, 1);
+        JButton hlp = new JButton(autosaveHelp);
+        hlp.setText(null);
+        hlp.setPreferredSize(new Dimension(24, 24));
+        JPanel hPan = new JPanel();
+        hPan.setLayout(new BorderLayout());
+        hPan.add(hlp, BorderLayout.EAST);
+        builder.append(hPan);
+        builder.nextLine();
+        builder.append(Globals.lang("Autosave interval (minutes)")+":");
+        builder.append(autoSaveInterval);
+        builder.nextLine();
+        builder.append(promptBeforeUsingAutoSave);
+        builder.nextLine();
+        builder.appendSeparator(Globals.lang("Sort order"));
+        builder.append(saveAuthorOrder, 1);
+        builder.append(exportAuthorOrder, 1);
+        builder.nextLine();
+        builder.append(saveTableOrder, 1);
+        builder.append(exportTableOrder, 1);
+        builder.nextLine();
+        builder.append(saveOriginalOrder, 1);
+        builder.append(exportOriginalOrder, 1);
+        builder.nextLine();
+
+        JPanel pan = builder.getPanel();
+        pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        setLayout(new BorderLayout());
+        add(pan, BorderLayout.CENTER);
+    }
+
+    public void setValues() {
+        openLast.setSelected(_prefs.getBoolean("openLastEdited"));
+        backup.setSelected(_prefs.getBoolean("backup"));
+        if (_prefs.getBoolean("saveInStandardOrder"))
+            saveAuthorOrder.setSelected(true);
+        else if (_prefs.getBoolean("saveInOriginalOrder"))
+            saveOriginalOrder.setSelected(true);
+        else
+            saveTableOrder.setSelected(true);
+        if (_prefs.getBoolean("exportInStandardOrder"))
+            exportAuthorOrder.setSelected(true);
+        else if (_prefs.getBoolean("exportInOriginalOrder"))
+            exportOriginalOrder.setSelected(true);
+        else
+            exportTableOrder.setSelected(true);
+
+        //preserveFormatting.setSelected(_prefs.getBoolean("preserveFieldFormatting"));
+        autoDoubleBraces.setSelected(_prefs.getBoolean("autoDoubleBraces"));
+        resolveStringsAll.setSelected(_prefs.getBoolean("resolveStringsAllFields"));
+        resolveStringsStandard.setSelected(!resolveStringsAll.isSelected());
+        doNotResolveStringsFor.setText(_prefs.get("doNotResolveStringsFor"));
+        bracesAroundCapitalsFields.setText(_prefs.get("putBracesAroundCapitals"));
+        nonWrappableFields.setText(_prefs.get("nonWrappableFields"));
+
+        autoSave.setSelected(_prefs.getBoolean("autoSave"));
+        promptBeforeUsingAutoSave.setSelected(_prefs.getBoolean("promptBeforeUsingAutosave"));
+        autoSaveInterval.setValue(_prefs.getInt("autoSaveInterval"));
+        origAutoSaveSetting = autoSave.isSelected();
+    }
+
+    public void storeSettings() {
+        _prefs.putBoolean("backup", backup.isSelected());
+        _prefs.putBoolean("openLastEdited", openLast.isSelected());
+        _prefs.putBoolean("saveInStandardOrder", saveAuthorOrder.isSelected());
+        _prefs.putBoolean("saveInOriginalOrder", saveOriginalOrder.isSelected());
+        _prefs.putBoolean("exportInStandardOrder", exportAuthorOrder.isSelected());
+        _prefs.putBoolean("exportInOriginalOrder", exportOriginalOrder.isSelected());
+        _prefs.putBoolean("autoDoubleBraces", autoDoubleBraces.isSelected());
+        _prefs.putBoolean("resolveStringsAllFields", resolveStringsAll.isSelected());
+        _prefs.put("doNotResolveStringsFor", doNotResolveStringsFor.getText().trim());
+        _prefs.putBoolean("autoSave", autoSave.isSelected());
+        _prefs.putBoolean("promptBeforeUsingAutosave", promptBeforeUsingAutoSave.isSelected());
+        _prefs.putInt("autoSaveInterval", (Integer)autoSaveInterval.getValue());
+        doNotResolveStringsFor.setText(_prefs.get("doNotResolveStringsFor"));
+        boolean updateSpecialFields = false;
+        if (!bracesAroundCapitalsFields.getText().trim().equals(_prefs.get("putBracesAroundCapitals"))) {
+            _prefs.put("putBracesAroundCapitals", bracesAroundCapitalsFields.getText());
+            updateSpecialFields = true;
+        }
+        if (!nonWrappableFields.getText().trim().equals(_prefs.get("nonWrappableFields"))) {
+            _prefs.put("nonWrappableFields", nonWrappableFields.getText());
+            updateSpecialFields = true;
+        }
+        // If either of the two last entries were changed, run the update for special field handling:
+        if (updateSpecialFields)
+                _prefs.updateSpecialFieldHandling();
+
+        // See if we should start or stop the auto save manager:
+        if (!origAutoSaveSetting && autoSave.isSelected()) {
+            Globals.startAutoSaveManager(_frame);
+        }
+        else if (origAutoSaveSetting && !autoSave.isSelected()) {
+            Globals.stopAutoSaveManager();
+        }
+
+    }
+
+    public boolean readyToClose() {
+        return true;
+    }
+
+	public String getTabName() {
+		return Globals.lang("File");
+	}
+}
diff --git a/src/java/net/sf/jabref/FindUnlinkedFilesDialog.java b/src/java/net/sf/jabref/FindUnlinkedFilesDialog.java
index 9e518cf..7e4f817 100644
--- a/src/java/net/sf/jabref/FindUnlinkedFilesDialog.java
+++ b/src/java/net/sf/jabref/FindUnlinkedFilesDialog.java
@@ -1,1188 +1,1188 @@
-package net.sf.jabref;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Frame;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-import java.awt.event.ComponentListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.IOException;
-import java.util.*;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.BorderFactory;
-import javax.swing.DefaultListCellRenderer;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JFileChooser;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JProgressBar;
-import javax.swing.JRootPane;
-import javax.swing.JScrollPane;
-import javax.swing.JTextField;
-import javax.swing.JTree;
-import javax.swing.KeyStroke;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.filechooser.FileSystemView;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeCellRenderer;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeModel;
-import javax.swing.tree.TreeNode;
-import javax.swing.tree.TreePath;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-import net.sf.jabref.imports.EntryFromFileCreator;
-import net.sf.jabref.imports.EntryFromFileCreatorManager;
-import net.sf.jabref.imports.UnlinkedFilesCrawler;
-import net.sf.jabref.imports.UnlinkedPDFFileFilter;
-import net.sf.jabref.undo.CountingUndoManager;
-
-/**
- * GUI Dialog for the feature "Find unlinked files".
- * 
- * @author Nosh&Dan
- * @version 25.11.2008 | 23:13:29
- *
- */
-public class FindUnlinkedFilesDialog extends JDialog {
-	private static final long serialVersionUID = -5778378185253640030L;
-	
-	/**
-	 * Keys to be used for referencing this Action.
-	 */
-	public static final String ACTION_COMMAND = "findUnlinkedFiles";
-	public static final String ACTION_TITLE = "Find unlinked Files...";
-	public static final String ACTION_ICON = "toggleSearch";
-	public static final String ACTION_SHORT_DESCRIPTION = "Searches for unlinked PDF files on the file system";
-
-	private static final String GLOBAL_PREFS_WORKING_DIRECTORY_KEY = "findUnlinkedFilesWD";
-	private static final String GLOBAL_PREFS_DIALOG_SIZE_KEY = "findUnlinkedFilesDialogSize";
-
-
-	protected JabRefFrame frame;
-	protected BibtexDatabase database;
-	private EntryFromFileCreatorManager creatorManager;
-	private UnlinkedFilesCrawler crawler;
-	
-	protected File lastSelectedDirectory;
-	private TreeModel treeModel;
-
-	/* PANELS */
-	protected JPanel panelDirectory;
-	protected JPanel panelSearchArea;
-	protected JPanel panelFiles;
-	protected JPanel panelOptions;
-	protected JPanel panelButtons;
-	protected JPanel panelEntryTypesSelection;
-	protected JPanel panelImportArea;
-	protected JPanel mainArea;
-
-	protected JButton buttonBrowse;
-	protected JButton buttonScan;
-	protected JButton buttonApply;
-	protected JButton buttonClose;
-
-	/* Options for the TreeView */
-	protected JButton buttonOptionSelectAll;
-	protected JButton buttonOptionUnselectAll;
-	protected JButton buttonOptionExpandAll;
-	protected JButton buttonOptionCollapseAll;
-	protected JCheckBox checkboxCreateKeywords;
-
-	protected JTextField textfieldDirectoryPath;
-	protected JLabel labelDirectoryDescription;
-	protected JLabel labelFileTypesDescription;
-	protected JLabel labelFilesDescription;
-	protected JLabel labelEntryTypeDescription;
-	protected JLabel labelSearchingDirectoryInfo;
-	protected JLabel labelImportingInfo;
-
-	protected JTree tree;
-	protected JScrollPane scrollpaneTree;
-	protected JComboBox comboBoxFileTypeSelection;
-	protected JComboBox comboBoxEntryTypeSelection;
-	
-	private JProgressBar progressBarSearching;
-	private JProgressBar progressBarImporting;
-	private JFileChooser fileChooser;
-	private MouseListener treeMouseListener;
-	
-	private Action actionSelectAll;
-	private Action actionUnselectAll;
-	private Action actionExpandTree;
-	private Action actionCollapseTree;
-	
-	private ActionListener actionListenerImportEntrys;
-	
-	private ComponentListener dialogPositionListener;
-	
-	private int[] threadState = new int[] {1};
-	private boolean checkBoxWhyIsThereNoGetSelectedStupidSwing = false;
-	
-	/**
-	 * For Unit-testing only. <i>Don't remove!</i> <br>
-	 * Used via reflection in {@link DatabaseFileLookupTest} to construct this
-	 * class.
-	 */
-	@SuppressWarnings("unused")
-	private FindUnlinkedFilesDialog() {
-	}
-
-	public FindUnlinkedFilesDialog(Frame owner, JabRefFrame frame, BasePanel panel) {
-		super(owner, Globals.lang("Find unlinked files"), true);
-		this.frame = frame;
-		
-		restoreSizeOfDialog();
-
-		database = panel.getDatabase();
-		creatorManager = new EntryFromFileCreatorManager();
-		crawler = new UnlinkedFilesCrawler(database);
-
-		lastSelectedDirectory = loadLastSelectedDirectory();
-		
-		initialize();
-        buttonApply.setEnabled(false);
-	}
-	
-	/**
-	 * Close dialog when pressing escape
-	 */
-	protected JRootPane createRootPane() {
-		ActionListener actionListener = new ActionListener() {
-			public void actionPerformed(ActionEvent actionEvent) {
-				setVisible(false);
-			}
-		};
-		JRootPane rootPane = new JRootPane();
-		KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
-		rootPane.registerKeyboardAction(actionListener, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
-		
-		return rootPane;
-	}
-
-
-	
-	/**
-	 * Stores the current size of this dialog persistently.
-	 */
-	private void storeSizeOfDialog() {
-		Dimension dim = getSize();
-		String store = dim.width + ";" + dim.height;
-		Globals.prefs.put(GLOBAL_PREFS_DIALOG_SIZE_KEY, store);
-	}
-	
-	/**
-	 * Restores the location and size of this dialog from the persistent storage.
-	 */
-	private void restoreSizeOfDialog() {
-		
-		String store = Globals.prefs.get(GLOBAL_PREFS_DIALOG_SIZE_KEY);
-		
-		Dimension dimension = null;
-		
-		if (store != null) {
-			try {
-				String[] dim = store.split(";");
-				dimension = new Dimension(new Integer(dim[0]), new Integer(dim[1]));
-			}
-			catch (Exception e) {
-			}
-		}
-		if (dimension != null) {
-			setPreferredSize(dimension);
-		}
-	}
-
-	/**
-	 * Initializes the components, the layout, the data structure and the
-	 * actions in this dialog.
-	 */
-	protected void initialize() {
-
-		initializeActions();
-		
-		initComponents();
-
-		createTree();
-		createFileTypesCombobox();
-		createEntryTypesCombobox();
-		
-		initLayout();
-		setupActions();
-
-		pack();
-	}
-	
-	/**
-	 * Initializes action objects. <br>
-	 * Does not assign actions to components yet!
-	 */
-	protected void initializeActions() {
-		
-		actionSelectAll = new AbstractAction(Globals.lang("Select All")) {
-			private static final long serialVersionUID = 9153126361571985383L;
-			public void actionPerformed(ActionEvent e) {
-				CheckableTreeNode rootNode = (CheckableTreeNode) tree.getModel().getRoot();
-				rootNode.setSelected(true);
-				tree.invalidate();
-				tree.repaint();
-			}
-		};
-		
-		actionUnselectAll = new AbstractAction(Globals.lang("Unselect All")) {
-			private static final long serialVersionUID = -9012913268030356450L;
-			public void actionPerformed(ActionEvent e) {
-				CheckableTreeNode rootNode = (CheckableTreeNode) tree.getModel().getRoot();
-				rootNode.setSelected(false);
-				tree.invalidate();
-				tree.repaint();
-			}
-		};
-		
-		actionExpandTree = new AbstractAction(Globals.lang("Expand All")) {
-			private static final long serialVersionUID = -4794088095435302433L;
-			public void actionPerformed(ActionEvent e) {
-				CheckableTreeNode rootNode = (CheckableTreeNode) tree.getModel().getRoot();
-				expandTree(tree, new TreePath(rootNode), true);
-			}
-		};
-		
-		actionCollapseTree = new AbstractAction(Globals.lang("Collapse All")) {
-			private static final long serialVersionUID = 6007246730370326456L;
-			public void actionPerformed(ActionEvent e) {
-				CheckableTreeNode rootNode = (CheckableTreeNode) tree.getModel().getRoot();
-				expandTree(tree, new TreePath(rootNode), false);
-			}
-		};
-		
-		dialogPositionListener = new ComponentAdapter() {
-			/* (non-Javadoc)
-			 * @see java.awt.event.ComponentAdapter#componentResized(java.awt.event.ComponentEvent)
-			 */
-			@Override
-			public void componentResized(ComponentEvent e) {
-				storeSizeOfDialog();
-			}
-			/* (non-Javadoc)
-			 * @see java.awt.event.ComponentAdapter#componentMoved(java.awt.event.ComponentEvent)
-			 */
-			@Override
-			public void componentMoved(ComponentEvent e) {
-				storeSizeOfDialog();
-			}
-		};
-		
-	}
-
-	/**
-	 * Stores the working directory path for this view in the global
-	 * preferences.
-	 * 
-	 * @param A
-	 *            directory that is used as the working directory in this view.
-	 */
-	private void storeLastSelectedDirectory(File lastSelectedDirectory) {
-		this.lastSelectedDirectory = lastSelectedDirectory;
-		if (lastSelectedDirectory != null) {
-			Globals.prefs.put(GLOBAL_PREFS_WORKING_DIRECTORY_KEY, lastSelectedDirectory.getAbsolutePath());
-		}
-	}
-
-	/**
-	 * Loads the working directory path which is persistantly stored for this
-	 * view and returns it as a {@link File}-Object. <br>
-	 * <br>
-	 * If there is no working directory path stored, the general working
-	 * directory will be consulted.
-	 * 
-	 * @return The persistently stored working directory path for this view.
-	 */
-	private File loadLastSelectedDirectory() {
-		String workingDirectory = Globals.prefs.get(GLOBAL_PREFS_WORKING_DIRECTORY_KEY);
-		if (workingDirectory == null)
-			workingDirectory = Globals.prefs.get("workingDirectory");
-		lastSelectedDirectory = new File(workingDirectory);
-		if (lastSelectedDirectory.isFile())
-			lastSelectedDirectory = lastSelectedDirectory.getParentFile();
-		return lastSelectedDirectory;
-	}
-
-	/**
-	 * Opens a {@link JFileChooser} and receives the user input as a
-	 * {@link File} object, which this method returns. <br>
-	 * <br>
-	 * The "Open file" dialog will start at the path that is set in the
-	 * "directory" textfield, or at the last stored path for this dialog, if the
-	 * textfield is empty. <br>
-	 * <br>
-	 * If the user cancels the "Open file" dialog, this method returns null. <br>
-	 * <br>
-	 * If the user has selected a valid directory in the "Open file" dialog,
-	 * this path will be stored persistently for this dialog, so that it can be
-	 * preset at the next time this dialog is opened.
-	 * 
-	 * @return The selected directory from the user, or <code>null</code>, if
-	 *         the user has aborted the selection.
-	 */
-	private File chooseDirectory() {
-		
-		if (fileChooser == null) {
-			fileChooser = new JFileChooser();
-			fileChooser.setAutoscrolls(true);
-			fileChooser.setDialogTitle(Globals.lang("Select Directory"));
-			fileChooser.setApproveButtonText(Globals.lang("Choose Directory"));
-			fileChooser.setApproveButtonToolTipText(Globals.lang("Use the selected directory to start with the search."));
-			fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
-		}
-
-		String path = textfieldDirectoryPath.getText();
-		if (path == null || path.equals(""))
-			fileChooser.setCurrentDirectory(lastSelectedDirectory);
-		else
-			fileChooser.setCurrentDirectory(new File(path));
-
-		int result = fileChooser.showOpenDialog(frame);
-		if (result == JFileChooser.CANCEL_OPTION) {
-			return null;
-		}
-		File selectedDirectory = fileChooser.getSelectedFile();
-		String filepath = "";
-		if (selectedDirectory != null) {
-			filepath = selectedDirectory.getAbsolutePath();
-		}
-		textfieldDirectoryPath.setText(filepath);
-
-		return selectedDirectory;
-	}
-	
-	/**
-	 * Disables or enables all visible Elements in this Dialog. <br>
-	 * <br>
-	 * This also removes the {@link MouseListener} from the Tree-View to prevent
-	 * it from receiving mouse events when in disabled-state.
-	 * 
-	 * @param enable
-	 *            <code>true</code> when the elements shall get enabled,
-	 *            <code>false</code> when they shall get disabled.
-	 */
-	private void disOrEnableDialog(boolean enable) {
-		
-		if (enable) {
-			tree.addMouseListener(treeMouseListener);
-		}
-		else {
-			tree.removeMouseListener(treeMouseListener);
-		}
-		disOrEnableAllElements(FindUnlinkedFilesDialog.this, enable);
-		
-	}
-	
-	/**
-	 * Recursively disables or enables all swing and awt components in this
-	 * dialog, starting with but not including the container
-	 * <code>startContainer</code>.
-	 * 
-	 * @param startContainer
-	 *            The GUI Element to start with.
-	 * @param enable
-	 *            <code>true</code>, if all elements will get enabled,
-	 *            <code>false</code> if all elements will get disabled.
-	 */
-	private void disOrEnableAllElements(Container startContainer, boolean enable) {
-		Component[] children = startContainer.getComponents();
-		for (int i = 0; i < children.length; i++) {
-			Component child = children[i];
-			if (child instanceof Container) {
-				disOrEnableAllElements((Container) child, enable);
-			}
-			child.setEnabled(enable);
-		}
-	}
-
-	/**
-	 * Expands or collapses the specified tree according to the
-	 * <code>expand</code>-parameter.
-	 */
-	private void expandTree(JTree tree, TreePath parent, boolean expand) {
-		TreeNode node = (TreeNode) parent.getLastPathComponent();
-		if (node.getChildCount() >= 0) {
-			for (Enumeration e = node.children(); e.hasMoreElements();) {
-				TreePath path = parent.pathByAddingChild(e.nextElement());
-				expandTree(tree, path, expand);
-			}
-		}
-		if (expand) {
-			tree.expandPath(parent);
-		} else {
-			tree.collapsePath(parent);
-		}
-	}
-	
-	/**
-	 * Starts the search of unlinked files according to the current dialog
-	 * state. <br>
-	 * <br>
-	 * This state is made of: <br>
-	 * <li>The value of the "directory"-input-textfield and <li>The file type
-	 * selection. <br>
-	 * The search will process in a seperate thread and the progress bar behind
-	 * the "search" button will be displayed. <br>
-	 * <br>
-	 * When the search has completed, the
-	 * {@link #searchFinishedHandler(CheckableTreeNode)} handler method is
-	 * invoked.
-	 */
-	protected void startSearch() {
-		
-		final File directory = new File(textfieldDirectoryPath.getText());
-		
-		if (!directory.exists() || !directory.isDirectory()) {
-			textfieldDirectoryPath.setText("");
-			return;
-		}
-		
-		storeLastSelectedDirectory(directory);
-
-		progressBarSearching.setMinimumSize(new Dimension(buttonScan.getSize().width, progressBarSearching.getMinimumSize().height));
-		progressBarSearching.setVisible(true);
-		progressBarSearching.setString("");
-		
-		labelSearchingDirectoryInfo.setVisible(true);
-		buttonScan.setVisible(false);
-
-		disOrEnableDialog(false);
-		labelSearchingDirectoryInfo.setEnabled(true);
-
-
-		final FileFilter selectedFileFilter = (FileFilter) comboBoxFileTypeSelection.getSelectedItem();
-		
-		threadState = new int[] {1};
-		new Thread(new Runnable() {
-			public void run() {
-			    UnlinkedPDFFileFilter ff = new UnlinkedPDFFileFilter(selectedFileFilter, database);
-				CheckableTreeNode rootNode = crawler.searchDirectory(directory, ff, threadState, new ChangeListener() {
-					int counter = 0;
-					public void stateChanged(ChangeEvent e) {
-						progressBarSearching.setString(++counter + " files found");
-					}
-				});
-				searchFinishedHandler(rootNode);
-			}
-		}).start();
-		
-	}
-	
-	/**
-	 * This will start the import of all file of all selected nodes in this
-	 * dialogs tree view. <br>
-	 * <br>
-	 * The import itself will run in a seperate thread, whilst this dialog will
-	 * be showing a progress bar, until the thread has finished its work. <br>
-	 * <br>
-	 * When the import has finished, the {@link #importFinishedHandler(List)} is
-	 * invoked.
-	 */
-	protected void startImport() {
-		
-		if (treeModel == null) {
-			return;
-		}
-		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
-		
-		CheckableTreeNode root = (CheckableTreeNode) treeModel.getRoot();
-		
-		final List<File> fileList = getFileListFromNode(root);
-		
-		if (fileList == null || fileList.isEmpty()) {
-			return;
-		}
-
-		progressBarImporting.setVisible(true);
-		labelImportingInfo.setVisible(true);
-		buttonApply.setVisible(false);
-		buttonClose.setVisible(false);
-		disOrEnableDialog(false);
-		
-		labelImportingInfo.setEnabled(true);
-
-		progressBarImporting.setMinimum(0);
-		progressBarImporting.setMaximum(fileList.size());
-		progressBarImporting.setValue(0);
-		progressBarImporting.setString("");
-		
-		
-		final BibtexEntryType entryType = ((BibtexEntryTypeWrapper) comboBoxEntryTypeSelection.getSelectedItem()).entryType;
-		
-		threadState = new int[] {1};
-		new Thread(new Runnable() {
-			public void run() {
-                List<String> errors = new LinkedList<String>();
-                int count = creatorManager.addEntrysFromFiles(fileList, database, frame.basePanel(),
-                        entryType,
-                        checkBoxWhyIsThereNoGetSelectedStupidSwing,  new ChangeListener() {
-					int counter = 0;
-					public void stateChanged(ChangeEvent e) {
-						progressBarImporting.setValue(++counter);
-						progressBarImporting.setString(counter + " of " + progressBarImporting.getMaximum());
-					}
-				}, errors);
-				importFinishedHandler(count, errors);
-			}
-		}).start();
-		
-	}
-	
-	/**
-	 * 
-	 * @param errors
-	 */
-	protected void importFinishedHandler(int count, List<String> errors) {
-		
-		if (errors != null && errors.size() > 0) {
-			
-			StringBuffer warningInfo = new StringBuffer();
-			warningInfo.append("The import finished with warnings:\n");
-			warningInfo.append("There ");
-			warningInfo.append(errors.size() > 1 ? "were " : "was ");
-			warningInfo.append(errors.size());
-			warningInfo.append(errors.size() > 1 ? " files" : " file");
-			warningInfo.append(errors.size() > 1 ? " which" : " that");
-			warningInfo.append(" could not be imported.");
-			
-			JOptionPane.showMessageDialog(this, warningInfo.toString(),
-                    Globals.lang("Warning"),
-                    JOptionPane.WARNING_MESSAGE);
-		}
-		
-		progressBarImporting.setVisible(false);
-		labelImportingInfo.setVisible(false);
-		buttonApply.setVisible(true);
-		buttonClose.setVisible(true);
-		disOrEnableDialog(true);
-        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
-        frame.basePanel().markBaseChanged();
-	}
-	
-	/**
-	 * Will be called from the Thread in which the "unlinked files search" is
-	 * processed. As the result of the search, the root node of the determined
-	 * file structure is passed.
-	 * 
-	 * @param rootNode
-	 *            The root of the file structure as the result of the search.
-	 */
-	protected void searchFinishedHandler(CheckableTreeNode rootNode) {
-		
-		treeModel = new DefaultTreeModel(rootNode);
-		tree.setModel(treeModel);
-		tree.setRootVisible(rootNode.getChildCount() > 0);
-
-		tree.invalidate();
-		tree.repaint();
-		
-		progressBarSearching.setVisible(false);
-		labelSearchingDirectoryInfo.setVisible(false);
-		buttonScan.setVisible(true);
-		actionSelectAll.actionPerformed(null);
-		
-		disOrEnableDialog(true);
-        buttonApply.setEnabled(true);
-	}
-
-	/**
-	 * Sets up the actions for the components.
-	 */
-	private void setupActions() {
-
-		/**
-		 * Stores the selected Directory.
-		 */
-		buttonBrowse.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				File selectedDirectory = chooseDirectory();
-				storeLastSelectedDirectory(selectedDirectory);
-			}
-		});
-
-		buttonScan.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				startSearch();
-			}
-		});
-		
-		/**
-		 * Action for the button "Import...". <br>
-		 * <br>
-		 * Actions on this button will start the import of all file of all
-		 * selected nodes in this dialogs tree view. <br>
-		 */
-		actionListenerImportEntrys =  new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				startImport();
-			}
-		};
-		
-		buttonApply.addActionListener(actionListenerImportEntrys);
-		
-		buttonClose.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                dispose();
-            }
-        });
-	}
-
-	/**
-	 * Creates a list of {@link File}s for all leaf nodes in the tree structure
-	 * <code>node</code>, which have been marked as <i>selected</i>. <br>
-	 * <br>
-	 * <code>Selected</code> nodes correspond to those entries in the tree,
-	 * whose checkbox is <code>checked</code>.
-	 * 
-	 * SIDE EFFECT: The checked nodes are removed from the tree.
-	 * 
-	 * @param node
-	 *            The root node representing a tree structure.
-	 * @return A list of files of all checked leaf nodes.
-	 */
-	@SuppressWarnings("unchecked")
-	private List<File> getFileListFromNode(CheckableTreeNode node) {
-		List<File> filesList = new ArrayList<File>();
-		Enumeration<CheckableTreeNode> childs = node.depthFirstEnumeration();
-		ArrayList<CheckableTreeNode> nodesToRemove = new ArrayList<FindUnlinkedFilesDialog.CheckableTreeNode>();
-		while (childs.hasMoreElements()) {
-			CheckableTreeNode child = childs.nextElement();
-			if (child.isLeaf() && child.getSelected()) {
-				File nodeFile = ((FileNodeWrapper) child.getUserObject()).file;
-				if (nodeFile != null && nodeFile.isFile()) {
-					filesList.add(nodeFile);
-					nodesToRemove.add(child);
-				}
-			}
-		}
-
-		// remove imported files from tree
-        DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
-		for (CheckableTreeNode nodeToRemove: nodesToRemove) {
-		    DefaultMutableTreeNode parent = (DefaultMutableTreeNode) nodeToRemove.getParent();
-		    model.removeNodeFromParent(nodeToRemove);
-		    
-		    // remove empty parent node
-		    while (parent != null && parent.isLeaf()) {
-		        DefaultMutableTreeNode pp = (DefaultMutableTreeNode) parent.getParent();
-		        if (pp != null) {
-		            model.removeNodeFromParent(parent);
-		        }
-		        parent = pp;
-		    } 
-            // TODO: update counter / see: getTreeCellRendererComponent for label generation
-		}
-        tree.invalidate();
-		tree.repaint();
-		    
-		return filesList;
-	}
-
-	/**
-	 * Initializes the visible components in this dialog.
-	 */
-	private void initComponents() {
-		
-		this.addComponentListener(dialogPositionListener);
-		/* Interrupts the searchThread by setting the State-Array to 0 */
-		this.addWindowListener(new WindowAdapter() {
-			@Override
-			public void windowClosing(WindowEvent e) {
-				threadState[0] = 0;
-			}
-		});
-
-		panelDirectory = new JPanel();
-		panelSearchArea = new JPanel();
-		panelFiles = new JPanel();
-		panelOptions = new JPanel();
-		panelEntryTypesSelection = new JPanel();
-		panelButtons = new JPanel();
-		panelImportArea = new JPanel();
-		mainArea = new JPanel();
-
-		buttonBrowse = new JButton(Globals.lang("Browse..."));
-		buttonBrowse.setMnemonic('B');
-		buttonBrowse.setToolTipText(Globals.lang("Opens the file browser."));
-		buttonScan = new JButton(Globals.lang("Scan directory"));
-		buttonScan.setMnemonic('S');
-		buttonScan.setToolTipText(Globals.lang("Searches the selected directory for unlinked files."));
-		buttonApply = new JButton(Globals.lang("Apply"));
-		buttonApply.setMnemonic('I');
-		buttonApply.setToolTipText(Globals.lang("Starts the import of bibtex entries."));
-		buttonClose = new JButton(Globals.lang("Close"));
-		buttonClose.setToolTipText(Globals.lang("Leave this dialog."));
-		buttonClose.setMnemonic('C');
-
-		
-		/* Options for the TreeView */
-		buttonOptionSelectAll = new JButton();
-		buttonOptionSelectAll.setMnemonic('A');
-		buttonOptionSelectAll.setAction(actionSelectAll);
-		buttonOptionUnselectAll = new JButton();
-		buttonOptionUnselectAll.setMnemonic('U');
-		buttonOptionUnselectAll.setAction(actionUnselectAll);
-		buttonOptionExpandAll = new JButton();
-		buttonOptionExpandAll.setMnemonic('E');
-		buttonOptionExpandAll.setAction(actionExpandTree);
-		buttonOptionCollapseAll = new JButton();
-		buttonOptionCollapseAll.setMnemonic('L');
-		buttonOptionCollapseAll.setAction(actionCollapseTree);
-
-		checkboxCreateKeywords = new JCheckBox(Globals.lang("Create directory based keywords"));
-		checkboxCreateKeywords.setToolTipText(Globals.lang("Creates keywords in created entrys with directory pathnames"));
-		checkboxCreateKeywords.setSelected(checkBoxWhyIsThereNoGetSelectedStupidSwing);
-		checkboxCreateKeywords.addItemListener(new ItemListener() {
-			public void itemStateChanged(ItemEvent e) {
-				checkBoxWhyIsThereNoGetSelectedStupidSwing = !checkBoxWhyIsThereNoGetSelectedStupidSwing;
-			}
-		});
-
-		textfieldDirectoryPath = new JTextField();
-		textfieldDirectoryPath.setText(lastSelectedDirectory == null ? "" : lastSelectedDirectory.getAbsolutePath());
-
-		labelDirectoryDescription = new JLabel(Globals.lang("Select a directory where the search shall start."));
-		labelFileTypesDescription = new JLabel(Globals.lang("Select file type:"));
-		labelFilesDescription = new JLabel(Globals.lang("These files are not linked in the active database."));
-		labelEntryTypeDescription = new JLabel(Globals.lang("Entry type to be created:"));
-		labelSearchingDirectoryInfo = new JLabel(Globals.lang("Searching file system..."));
-		labelSearchingDirectoryInfo.setHorizontalAlignment(JTextField.CENTER);
-		labelSearchingDirectoryInfo.setVisible(false);
-		labelImportingInfo = new JLabel(Globals.lang("Importing into Database..."));
-		labelImportingInfo.setHorizontalAlignment(JTextField.CENTER);
-		labelImportingInfo.setVisible(false);
-
-		tree = new JTree();
-		scrollpaneTree = new JScrollPane(tree);
-		scrollpaneTree.setWheelScrollingEnabled(true);
-		
-		progressBarSearching = new JProgressBar();
-		progressBarSearching.setIndeterminate(true);
-		progressBarSearching.setVisible(false);
-		progressBarSearching.setStringPainted(true);
-		
-		progressBarImporting = new JProgressBar();
-		progressBarImporting.setIndeterminate(false);
-		progressBarImporting.setVisible(false);
-		progressBarImporting.setStringPainted(true);
-		
-	}
-	
-	/**
-	 * Initializes the layout for the visible components in this menu. A
-	 * {@link GridBagLayout} is used.
-	 */
-	private void initLayout() {
-		
-		GridBagLayout gbl = new GridBagLayout();
-
-		panelDirectory.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Globals.lang("Select directory")));
-		panelFiles.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Globals.lang("Select files")));
-		panelEntryTypesSelection.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Globals.lang("Bibtex entry creation")));
-
-		Insets basicInsets = new Insets(6, 6, 6, 6);
-		Insets smallInsets = new Insets(3, 2, 3, 1);
-		Insets noInsets = new Insets(0, 0, 0, 0);
-
-		// 		x, y, w, h, wx,wy,ix,iy
-		addComponent(gbl, panelSearchArea, buttonScan, GridBagConstraints.HORIZONTAL, GridBagConstraints.EAST, noInsets,
-				0, 1, 1, 1, 1, 1, 40, 10);
-		addComponent(gbl, panelSearchArea, labelSearchingDirectoryInfo, GridBagConstraints.HORIZONTAL, GridBagConstraints.EAST, noInsets,
-				0, 2, 1, 1, 0, 0, 0, 0);
-		addComponent(gbl, panelSearchArea, progressBarSearching, GridBagConstraints.HORIZONTAL, GridBagConstraints.EAST, noInsets,
-				0, 3, 1, 1, 0, 0, 0, 0);
-		
-		addComponent(gbl, panelDirectory, labelDirectoryDescription, null, GridBagConstraints.WEST, new Insets(6, 6, 0, 6),
-				0, 0, 3, 1, 0, 0, 0, 0);
-		addComponent(gbl, panelDirectory, textfieldDirectoryPath, GridBagConstraints.HORIZONTAL, null, basicInsets,
-				0, 1, 2, 1, 1, 1, 0, 0);
-		addComponent(gbl, panelDirectory, buttonBrowse, GridBagConstraints.HORIZONTAL, GridBagConstraints.EAST, basicInsets,
-				2, 1, 1, 1, 0, 0, 0, 0);
-		addComponent(gbl, panelDirectory, labelFileTypesDescription, GridBagConstraints.NONE, GridBagConstraints.WEST, new Insets(18, 6, 18, 3),
-				0, 3, 1, 1, 0, 0, 0, 0);
-		addComponent(gbl, panelDirectory, comboBoxFileTypeSelection, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST, new Insets(18, 3, 18, 6),
-				1, 3, 1, 1, 1, 0, 0, 0);
-		addComponent(gbl, panelDirectory, panelSearchArea, GridBagConstraints.HORIZONTAL, GridBagConstraints.EAST, new Insets(18, 6, 18, 6),
-				2, 3, 1, 1, 0, 0, 0, 0);
-
-		addComponent(gbl, panelFiles, labelFilesDescription, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST, new Insets(6, 6, 0, 6),
-				0, 0, 1, 1, 0, 0, 0, 0);
-		addComponent(gbl, panelFiles, scrollpaneTree, GridBagConstraints.BOTH, GridBagConstraints.CENTER, basicInsets,
-				0, 1, 1, 1, 1, 1, 0, 0);
-		addComponent(gbl, panelFiles, panelOptions, GridBagConstraints.NONE, GridBagConstraints.NORTHEAST, basicInsets,
-				1, 1, 1, 1, 0, 0, 0, 0);
-		addComponent(gbl, panelOptions, buttonOptionSelectAll, GridBagConstraints.HORIZONTAL, GridBagConstraints.NORTH, noInsets,
-				0, 0, 1, 1, 1, 0, 0, 0);
-		addComponent(gbl, panelOptions, buttonOptionUnselectAll, GridBagConstraints.HORIZONTAL, GridBagConstraints.NORTH, noInsets,
-				0, 1, 1, 1, 0, 0, 0, 0);
-		addComponent(gbl, panelOptions, buttonOptionExpandAll, GridBagConstraints.HORIZONTAL, GridBagConstraints.NORTH, new Insets(6, 0, 0, 0),
-				0, 2, 1, 1, 0, 0, 0, 0);
-		addComponent(gbl, panelOptions, buttonOptionCollapseAll, GridBagConstraints.HORIZONTAL, GridBagConstraints.NORTH, noInsets,
-				0, 3, 1, 1, 0, 0, 0, 0);
-		
-		addComponent(gbl, panelEntryTypesSelection, labelEntryTypeDescription, GridBagConstraints.NONE, GridBagConstraints.WEST, basicInsets,
-				0, 0, 1, 1, 0, 0, 0, 0);
-		addComponent(gbl, panelEntryTypesSelection, comboBoxEntryTypeSelection, GridBagConstraints.NONE, GridBagConstraints.WEST, basicInsets,
-				1, 0, 1, 1, 1, 0, 0, 0);
-		addComponent(gbl, panelEntryTypesSelection, checkboxCreateKeywords, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST, basicInsets,
-				0, 1, 2, 1, 0, 0, 0, 0);
-		addComponent(gbl, panelImportArea, labelImportingInfo, GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER, new Insets(6, 6, 0, 6),
-				0, 1, 1, 1, 1, 0, 0, 0);
-		addComponent(gbl, panelImportArea, progressBarImporting, GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER, new Insets(0, 6, 6, 6),
-				0, 2, 1, 1, 1, 0, 0, 0);
-		addComponent(gbl, panelButtons, panelImportArea, GridBagConstraints.NONE, GridBagConstraints.EAST, smallInsets,
-				1, 0, 1, 1, 0, 0, 0, 0);
-		
-		addComponent(gbl, getContentPane(), panelDirectory, GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER, basicInsets,
-				0, 0, 1, 1, 0, 0, 0, 0);
-		addComponent(gbl, getContentPane(), panelFiles, GridBagConstraints.BOTH, GridBagConstraints.NORTHWEST, new Insets(12, 6, 2, 2),
-				0, 1, 1, 1, 1, 1, 0, 0);
-		addComponent(gbl, getContentPane(), panelEntryTypesSelection, GridBagConstraints.HORIZONTAL, GridBagConstraints.SOUTHWEST, new Insets(12, 6, 2, 2),
-				0, 2, 1, 1, 0, 0, 0, 0);
-		addComponent(gbl, getContentPane(), panelButtons, GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER, new Insets(10, 6, 10, 6),
-				0, 3, 1, 1, 0, 0, 0, 0);
-		
-	    ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(buttonApply);
-        bb.addButton(buttonClose);
-        bb.addGlue();
-
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));        
-        panelImportArea.add(bb.getPanel(), GridBagConstraints.NONE);
-        pack();
-        
-	}
-
-	/**
-	 * Adds a component to a container, using the specified gridbag-layout and
-	 * the supplied parameters. <br>
-	 * <br>
-	 * This method is simply used to ged rid of thousands of lines of code,
-	 * which inevitably rise when layouts such as the gridbag-layout is being
-	 * used.
-	 * 
-	 * @param layout
-	 *            The layout to be used.
-	 * @param container
-	 *            The {@link Container}, to which the component will be added.
-	 * @param component
-	 *            An AWT {@link Component}, that will be added to the container.
-	 * @param fill
-	 *            A constant describing the fill behaviour (see
-	 *            {@link GridBagConstraints}). Can be <code>null</code>, if no
-	 *            filling wants to be specified.
-	 * @param anchor
-	 *            A constant describing the anchor of the element in its parent
-	 *            container (see {@link GridBagConstraints}). Can be
-	 *            <code>null</code>, if no specification is needed.
-	 * @param gridX
-	 *            The relative grid-X coordinate.
-	 * @param gridY
-	 *            The relative grid-Y coordinate.
-	 * @param width
-	 *            The relative width of the component.
-	 * @param height
-	 *            The relative height of the component.
-	 * @param weightX
-	 *            A value for the horizontal weight.
-	 * @param weightY
-	 *            A value for the vertical weight.
-	 * @param insets
-	 *            Insets of the component. Can be <code>null</code>.
-	 */
-	private final static void addComponent(GridBagLayout layout, Container container, Component component, Integer fill, Integer anchor,
-			Insets insets, int gridX, int gridY, int width, int height, double weightX, double weightY, int ipadX, int ipadY) {
-		container.setLayout(layout);
-		GridBagConstraints constraints = new GridBagConstraints();
-		constraints.gridx = gridX;
-		constraints.gridy = gridY;
-		constraints.gridwidth = width;
-		constraints.gridheight = height;
-		constraints.weightx = weightX;
-		constraints.weighty = weightY;
-		constraints.ipadx = ipadX;
-		constraints.ipady = ipadY;
-		if (fill != null)
-			constraints.fill = fill;
-		if (insets != null)
-			constraints.insets = insets;
-		if (anchor != null)
-			constraints.anchor = anchor;
-		layout.setConstraints(component, constraints);
-		container.add(component);
-	}
-
-	/**
-	 * Creates the tree view, that holds the data structure. <br>
-	 * <br>
-	 * Initially, the root node is <b>not</b> visible, so that the tree appears empty at the beginning.
-	 */
-	private void createTree() {
-		
-		/**
-		 * Mouse listener to listen for mouse events on the tree. <br>
-		 * This will mark the selected tree entry as "selected" or "unselected",
-		 * which will cause this nodes checkbox to appear as either "checked" or
-		 * "unchecked".
-		 */
-		treeMouseListener = new MouseAdapter() {
-
-			public void mousePressed(MouseEvent e) {
-				int x = e.getX();
-				int y = e.getY();
-
-				int row = tree.getRowForLocation(x, y);
-
-				TreePath path = tree.getPathForRow(row);
-				if (path != null) {
-                    CheckableTreeNode node = (CheckableTreeNode) path.getLastPathComponent();
-				    if (e.getClickCount() == 2) {
-				        Object userObject = node.getUserObject();
-				        if (userObject instanceof FileNodeWrapper && node.isLeaf()) {
-				            FileNodeWrapper fnw = (FileNodeWrapper) userObject;
-				            try {
-                                Util.openExternalViewer(JabRef.jrf.basePanel().metaData(), fnw.file.getAbsolutePath(), "pdf");
-                            } catch (IOException e1) {
-                                Globals.logger("Error opening file");
-                            }
-				        }
-				    } else {
-    					node.check();
-    					tree.invalidate();
-    					tree.repaint();
-				    }
-				}
-			}
-
-		};
-		
-		CheckableTreeNode startNode = new CheckableTreeNode("ROOT");
-		DefaultTreeModel model = new DefaultTreeModel(startNode);
-		
-		tree.setModel(model);
-		tree.setRootVisible(false);
-		
-		DefaultTreeCellRenderer renderer = new CheckboxTreeCellRenderer();
-		tree.setCellRenderer(renderer);
-		
-		tree.addMouseListener(treeMouseListener);
-		
-	}
-	
-	/**
-	 * Initialises the combobox that contains the available file types which
-	 * bibtex entries can be created of.
-	 */
-	private void createFileTypesCombobox() {
-
-		List<FileFilter> fileFilterList = creatorManager.getFileFilterList();
-
-		Vector<FileFilter> vector = new Vector<FileFilter>();
-		for (FileFilter fileFilter : fileFilterList) {
-			vector.add(fileFilter);
-		}
-		comboBoxFileTypeSelection = new JComboBox(vector);
-		
-		comboBoxFileTypeSelection.setRenderer(new DefaultListCellRenderer() {
-			private static final long serialVersionUID = 8503499454763947465L;
-			/* (non-Javadoc)
-			 * @see javax.swing.DefaultListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
-			 */
-			@Override
-			public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
-				JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-				if (value instanceof EntryFromFileCreator) {
-					EntryFromFileCreator creator = (EntryFromFileCreator) value;
-					if (creator.getExternalFileType() != null) {
-						label.setIcon(creator.getExternalFileType().getIcon());
-					}
-				}				
-				return label;
-			}
-		});
-
-	}
-	
-	/**
-	 * Creates the ComboBox-View vor the Listbox that holds the Bibtex entry
-	 * types.
-	 */
-	private void createEntryTypesCombobox() {
-
-		TreeMap<String, BibtexEntryType> entryTypes = BibtexEntryType.ALL_TYPES;
-		Iterator<BibtexEntryType> iterator = entryTypes.values().iterator();
-		Vector<BibtexEntryTypeWrapper> list = new Vector<BibtexEntryTypeWrapper>();
-		list.add(new BibtexEntryTypeWrapper(null));
-		while(iterator.hasNext()) {
-			list.add(new BibtexEntryTypeWrapper(iterator.next()));
-		}
-		comboBoxEntryTypeSelection = new JComboBox(list);
-	}
-	
-	/**
-	 * Wrapper for displaying the Type {@link BibtexEntryType} in a Combobox.
-	 * 
-	 * @author Nosh&Dan
-	 * @version 12.11.2008 | 01:02:30
-	 *
-	 */
-	private static class BibtexEntryTypeWrapper {
-		final BibtexEntryType entryType;
-		BibtexEntryTypeWrapper(BibtexEntryType bibtexType) {
-			this.entryType = bibtexType;
-		}
-		/* (non-Javadoc)
-		 * @see java.lang.Object#toString()
-		 */
-		@Override
-		public String toString() {
-			if (entryType == null)
-				return Globals.lang("<No selection>");
-			return entryType.getName();
-		}
-	}
-	
-
-	public static class CheckableTreeNode extends DefaultMutableTreeNode {
-		private static final long serialVersionUID = -1131241777605570737L;
-		private boolean isSelected;
-		private JCheckBox checkbox;
-
-		public CheckableTreeNode(Object userObject) {
-			super(userObject);
-			checkbox = new JCheckBox();
-		}
-
-		/**
-		 * @return the checkbox
-		 */
-		public JCheckBox getCheckbox() {
-			return checkbox;
-		}
-
-		/**
-		 * @param checkbox
-		 *            the checkbox to set
-		 */
-		public void setCheckbox(JCheckBox checkbox) {
-			this.checkbox = checkbox;
-		}
-
-		public void check() {
-			setSelected(!isSelected);
-		}
-
-		@SuppressWarnings("unchecked")
-		public void setSelected(boolean bSelected) {
-			isSelected = bSelected;
-			Enumeration<CheckableTreeNode> children = this.children();
-			while (children.hasMoreElements()) {
-				CheckableTreeNode child = children.nextElement();
-				child.setSelected(bSelected);
-			}
-
-		}
-
-		public boolean getSelected() {
-			return isSelected;
-		}
-
-	}
-
-	private static class CheckboxTreeCellRenderer extends DefaultTreeCellRenderer {
-		private static final long serialVersionUID = 3737245079578074387L;
-
-	    protected FileSystemView fsv = FileSystemView.getFileSystemView();
-	    
-		public Component getTreeCellRendererComponent(final JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row,
-				boolean hasFocus) {
-			
-			Component nodeComponent = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
-			CheckableTreeNode node = (CheckableTreeNode) value;
-			
-			FileNodeWrapper userObject = (FileNodeWrapper) node.getUserObject();
-			
-			JPanel newPanel = new JPanel();
-			
-			JCheckBox checkbox = node.getCheckbox();
-			checkbox.setSelected(node.getSelected());
-
-            try { setIcon(fsv.getSystemIcon(userObject.file)); }
-            catch (Exception e) {}
-			
-			newPanel.setBackground(nodeComponent.getBackground());
-			checkbox.setBackground(nodeComponent.getBackground());
-			
-			GridBagLayout gbl = new GridBagLayout();
-			addComponent(gbl, newPanel, checkbox, null, null, null, 0, 0, 1, 1, 0, 0, 0, 0);
-			addComponent(gbl, newPanel, nodeComponent, GridBagConstraints.HORIZONTAL, null, new Insets(1, 2, 0, 0), 1, 0, 1, 1, 1, 0, 0, 0);
-			
-			if (userObject.fileCount > 0) {
-				JLabel label = new JLabel("(" + userObject.fileCount + " file" + (userObject.fileCount > 1 ? "s" : "") + ")");
-				addComponent(gbl, newPanel, label, null, null, new Insets(1, 2, 0, 0), 2, 0, 1, 1, 0, 0, 0, 0);
-			}
-			return newPanel;
-		}
-		
-	}
-
-	public static class FileNodeWrapper {
-		public final File file;
-		public final int fileCount;
-
-		public FileNodeWrapper(File aFile) {
-			this(aFile, 0);
-		}
-
-		/**
-		 * @param directory
-		 * @param length
-		 */
-		public FileNodeWrapper(File aDirectory, int fileCount) {
-			this.file = aDirectory;
-			this.fileCount = fileCount;
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see java.lang.Object#toString()
-		 */
-		@Override
-		public String toString() {
-			return file.getName();
-		}
-	}
-
-}
+package net.sf.jabref;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.util.*;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.JRootPane;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.JTree;
+import javax.swing.KeyStroke;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.filechooser.FileSystemView;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+import net.sf.jabref.imports.EntryFromFileCreator;
+import net.sf.jabref.imports.EntryFromFileCreatorManager;
+import net.sf.jabref.imports.UnlinkedFilesCrawler;
+import net.sf.jabref.imports.UnlinkedPDFFileFilter;
+import net.sf.jabref.undo.CountingUndoManager;
+
+/**
+ * GUI Dialog for the feature "Find unlinked files".
+ * 
+ * @author Nosh&Dan
+ * @version 25.11.2008 | 23:13:29
+ *
+ */
+public class FindUnlinkedFilesDialog extends JDialog {
+	private static final long serialVersionUID = -5778378185253640030L;
+	
+	/**
+	 * Keys to be used for referencing this Action.
+	 */
+	public static final String ACTION_COMMAND = "findUnlinkedFiles";
+	public static final String ACTION_TITLE = "Find unlinked Files...";
+	public static final String ACTION_ICON = "toggleSearch";
+	public static final String ACTION_SHORT_DESCRIPTION = "Searches for unlinked PDF files on the file system";
+
+	private static final String GLOBAL_PREFS_WORKING_DIRECTORY_KEY = "findUnlinkedFilesWD";
+	private static final String GLOBAL_PREFS_DIALOG_SIZE_KEY = "findUnlinkedFilesDialogSize";
+
+
+	protected JabRefFrame frame;
+	protected BibtexDatabase database;
+	private EntryFromFileCreatorManager creatorManager;
+	private UnlinkedFilesCrawler crawler;
+	
+	protected File lastSelectedDirectory;
+	private TreeModel treeModel;
+
+	/* PANELS */
+	protected JPanel panelDirectory;
+	protected JPanel panelSearchArea;
+	protected JPanel panelFiles;
+	protected JPanel panelOptions;
+	protected JPanel panelButtons;
+	protected JPanel panelEntryTypesSelection;
+	protected JPanel panelImportArea;
+	protected JPanel mainArea;
+
+	protected JButton buttonBrowse;
+	protected JButton buttonScan;
+	protected JButton buttonApply;
+	protected JButton buttonClose;
+
+	/* Options for the TreeView */
+	protected JButton buttonOptionSelectAll;
+	protected JButton buttonOptionUnselectAll;
+	protected JButton buttonOptionExpandAll;
+	protected JButton buttonOptionCollapseAll;
+	protected JCheckBox checkboxCreateKeywords;
+
+	protected JTextField textfieldDirectoryPath;
+	protected JLabel labelDirectoryDescription;
+	protected JLabel labelFileTypesDescription;
+	protected JLabel labelFilesDescription;
+	protected JLabel labelEntryTypeDescription;
+	protected JLabel labelSearchingDirectoryInfo;
+	protected JLabel labelImportingInfo;
+
+	protected JTree tree;
+	protected JScrollPane scrollpaneTree;
+	protected JComboBox comboBoxFileTypeSelection;
+	protected JComboBox comboBoxEntryTypeSelection;
+	
+	private JProgressBar progressBarSearching;
+	private JProgressBar progressBarImporting;
+	private JFileChooser fileChooser;
+	private MouseListener treeMouseListener;
+	
+	private Action actionSelectAll;
+	private Action actionUnselectAll;
+	private Action actionExpandTree;
+	private Action actionCollapseTree;
+	
+	private ActionListener actionListenerImportEntrys;
+	
+	private ComponentListener dialogPositionListener;
+	
+	private int[] threadState = new int[] {1};
+	private boolean checkBoxWhyIsThereNoGetSelectedStupidSwing = false;
+	
+	/**
+	 * For Unit-testing only. <i>Don't remove!</i> <br>
+	 * Used via reflection in {@link DatabaseFileLookupTest} to construct this
+	 * class.
+	 */
+	@SuppressWarnings("unused")
+	private FindUnlinkedFilesDialog() {
+	}
+
+	public FindUnlinkedFilesDialog(Frame owner, JabRefFrame frame, BasePanel panel) {
+		super(owner, Globals.lang("Find unlinked files"), true);
+		this.frame = frame;
+		
+		restoreSizeOfDialog();
+
+		database = panel.getDatabase();
+		creatorManager = new EntryFromFileCreatorManager();
+		crawler = new UnlinkedFilesCrawler(database);
+
+		lastSelectedDirectory = loadLastSelectedDirectory();
+		
+		initialize();
+        buttonApply.setEnabled(false);
+	}
+	
+	/**
+	 * Close dialog when pressing escape
+	 */
+	protected JRootPane createRootPane() {
+		ActionListener actionListener = new ActionListener() {
+			public void actionPerformed(ActionEvent actionEvent) {
+				setVisible(false);
+			}
+		};
+		JRootPane rootPane = new JRootPane();
+		KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
+		rootPane.registerKeyboardAction(actionListener, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
+		
+		return rootPane;
+	}
+
+
+	
+	/**
+	 * Stores the current size of this dialog persistently.
+	 */
+	private void storeSizeOfDialog() {
+		Dimension dim = getSize();
+		String store = dim.width + ";" + dim.height;
+		Globals.prefs.put(GLOBAL_PREFS_DIALOG_SIZE_KEY, store);
+	}
+	
+	/**
+	 * Restores the location and size of this dialog from the persistent storage.
+	 */
+	private void restoreSizeOfDialog() {
+		
+		String store = Globals.prefs.get(GLOBAL_PREFS_DIALOG_SIZE_KEY);
+		
+		Dimension dimension = null;
+		
+		if (store != null) {
+			try {
+				String[] dim = store.split(";");
+				dimension = new Dimension(new Integer(dim[0]), new Integer(dim[1]));
+			}
+			catch (Exception e) {
+			}
+		}
+		if (dimension != null) {
+			setPreferredSize(dimension);
+		}
+	}
+
+	/**
+	 * Initializes the components, the layout, the data structure and the
+	 * actions in this dialog.
+	 */
+	protected void initialize() {
+
+		initializeActions();
+		
+		initComponents();
+
+		createTree();
+		createFileTypesCombobox();
+		createEntryTypesCombobox();
+		
+		initLayout();
+		setupActions();
+
+		pack();
+	}
+	
+	/**
+	 * Initializes action objects. <br>
+	 * Does not assign actions to components yet!
+	 */
+	protected void initializeActions() {
+		
+		actionSelectAll = new AbstractAction(Globals.lang("Select All")) {
+			private static final long serialVersionUID = 9153126361571985383L;
+			public void actionPerformed(ActionEvent e) {
+				CheckableTreeNode rootNode = (CheckableTreeNode) tree.getModel().getRoot();
+				rootNode.setSelected(true);
+				tree.invalidate();
+				tree.repaint();
+			}
+		};
+		
+		actionUnselectAll = new AbstractAction(Globals.lang("Unselect All")) {
+			private static final long serialVersionUID = -9012913268030356450L;
+			public void actionPerformed(ActionEvent e) {
+				CheckableTreeNode rootNode = (CheckableTreeNode) tree.getModel().getRoot();
+				rootNode.setSelected(false);
+				tree.invalidate();
+				tree.repaint();
+			}
+		};
+		
+		actionExpandTree = new AbstractAction(Globals.lang("Expand All")) {
+			private static final long serialVersionUID = -4794088095435302433L;
+			public void actionPerformed(ActionEvent e) {
+				CheckableTreeNode rootNode = (CheckableTreeNode) tree.getModel().getRoot();
+				expandTree(tree, new TreePath(rootNode), true);
+			}
+		};
+		
+		actionCollapseTree = new AbstractAction(Globals.lang("Collapse All")) {
+			private static final long serialVersionUID = 6007246730370326456L;
+			public void actionPerformed(ActionEvent e) {
+				CheckableTreeNode rootNode = (CheckableTreeNode) tree.getModel().getRoot();
+				expandTree(tree, new TreePath(rootNode), false);
+			}
+		};
+		
+		dialogPositionListener = new ComponentAdapter() {
+			/* (non-Javadoc)
+			 * @see java.awt.event.ComponentAdapter#componentResized(java.awt.event.ComponentEvent)
+			 */
+			@Override
+			public void componentResized(ComponentEvent e) {
+				storeSizeOfDialog();
+			}
+			/* (non-Javadoc)
+			 * @see java.awt.event.ComponentAdapter#componentMoved(java.awt.event.ComponentEvent)
+			 */
+			@Override
+			public void componentMoved(ComponentEvent e) {
+				storeSizeOfDialog();
+			}
+		};
+		
+	}
+
+	/**
+	 * Stores the working directory path for this view in the global
+	 * preferences.
+	 * 
+	 * @param A
+	 *            directory that is used as the working directory in this view.
+	 */
+	private void storeLastSelectedDirectory(File lastSelectedDirectory) {
+		this.lastSelectedDirectory = lastSelectedDirectory;
+		if (lastSelectedDirectory != null) {
+			Globals.prefs.put(GLOBAL_PREFS_WORKING_DIRECTORY_KEY, lastSelectedDirectory.getAbsolutePath());
+		}
+	}
+
+	/**
+	 * Loads the working directory path which is persistantly stored for this
+	 * view and returns it as a {@link File}-Object. <br>
+	 * <br>
+	 * If there is no working directory path stored, the general working
+	 * directory will be consulted.
+	 * 
+	 * @return The persistently stored working directory path for this view.
+	 */
+	private File loadLastSelectedDirectory() {
+		String workingDirectory = Globals.prefs.get(GLOBAL_PREFS_WORKING_DIRECTORY_KEY);
+		if (workingDirectory == null)
+			workingDirectory = Globals.prefs.get("workingDirectory");
+		lastSelectedDirectory = new File(workingDirectory);
+		if (lastSelectedDirectory.isFile())
+			lastSelectedDirectory = lastSelectedDirectory.getParentFile();
+		return lastSelectedDirectory;
+	}
+
+	/**
+	 * Opens a {@link JFileChooser} and receives the user input as a
+	 * {@link File} object, which this method returns. <br>
+	 * <br>
+	 * The "Open file" dialog will start at the path that is set in the
+	 * "directory" textfield, or at the last stored path for this dialog, if the
+	 * textfield is empty. <br>
+	 * <br>
+	 * If the user cancels the "Open file" dialog, this method returns null. <br>
+	 * <br>
+	 * If the user has selected a valid directory in the "Open file" dialog,
+	 * this path will be stored persistently for this dialog, so that it can be
+	 * preset at the next time this dialog is opened.
+	 * 
+	 * @return The selected directory from the user, or <code>null</code>, if
+	 *         the user has aborted the selection.
+	 */
+	private File chooseDirectory() {
+		
+		if (fileChooser == null) {
+			fileChooser = new JFileChooser();
+			fileChooser.setAutoscrolls(true);
+			fileChooser.setDialogTitle(Globals.lang("Select Directory"));
+			fileChooser.setApproveButtonText(Globals.lang("Choose Directory"));
+			fileChooser.setApproveButtonToolTipText(Globals.lang("Use the selected directory to start with the search."));
+			fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+		}
+
+		String path = textfieldDirectoryPath.getText();
+		if (path == null || path.equals(""))
+			fileChooser.setCurrentDirectory(lastSelectedDirectory);
+		else
+			fileChooser.setCurrentDirectory(new File(path));
+
+		int result = fileChooser.showOpenDialog(frame);
+		if (result == JFileChooser.CANCEL_OPTION) {
+			return null;
+		}
+		File selectedDirectory = fileChooser.getSelectedFile();
+		String filepath = "";
+		if (selectedDirectory != null) {
+			filepath = selectedDirectory.getAbsolutePath();
+		}
+		textfieldDirectoryPath.setText(filepath);
+
+		return selectedDirectory;
+	}
+	
+	/**
+	 * Disables or enables all visible Elements in this Dialog. <br>
+	 * <br>
+	 * This also removes the {@link MouseListener} from the Tree-View to prevent
+	 * it from receiving mouse events when in disabled-state.
+	 * 
+	 * @param enable
+	 *            <code>true</code> when the elements shall get enabled,
+	 *            <code>false</code> when they shall get disabled.
+	 */
+	private void disOrEnableDialog(boolean enable) {
+		
+		if (enable) {
+			tree.addMouseListener(treeMouseListener);
+		}
+		else {
+			tree.removeMouseListener(treeMouseListener);
+		}
+		disOrEnableAllElements(FindUnlinkedFilesDialog.this, enable);
+		
+	}
+	
+	/**
+	 * Recursively disables or enables all swing and awt components in this
+	 * dialog, starting with but not including the container
+	 * <code>startContainer</code>.
+	 * 
+	 * @param startContainer
+	 *            The GUI Element to start with.
+	 * @param enable
+	 *            <code>true</code>, if all elements will get enabled,
+	 *            <code>false</code> if all elements will get disabled.
+	 */
+	private void disOrEnableAllElements(Container startContainer, boolean enable) {
+		Component[] children = startContainer.getComponents();
+		for (int i = 0; i < children.length; i++) {
+			Component child = children[i];
+			if (child instanceof Container) {
+				disOrEnableAllElements((Container) child, enable);
+			}
+			child.setEnabled(enable);
+		}
+	}
+
+	/**
+	 * Expands or collapses the specified tree according to the
+	 * <code>expand</code>-parameter.
+	 */
+	private void expandTree(JTree tree, TreePath parent, boolean expand) {
+		TreeNode node = (TreeNode) parent.getLastPathComponent();
+		if (node.getChildCount() >= 0) {
+			for (Enumeration e = node.children(); e.hasMoreElements();) {
+				TreePath path = parent.pathByAddingChild(e.nextElement());
+				expandTree(tree, path, expand);
+			}
+		}
+		if (expand) {
+			tree.expandPath(parent);
+		} else {
+			tree.collapsePath(parent);
+		}
+	}
+	
+	/**
+	 * Starts the search of unlinked files according to the current dialog
+	 * state. <br>
+	 * <br>
+	 * This state is made of: <br>
+	 * <li>The value of the "directory"-input-textfield and <li>The file type
+	 * selection. <br>
+	 * The search will process in a seperate thread and the progress bar behind
+	 * the "search" button will be displayed. <br>
+	 * <br>
+	 * When the search has completed, the
+	 * {@link #searchFinishedHandler(CheckableTreeNode)} handler method is
+	 * invoked.
+	 */
+	protected void startSearch() {
+		
+		final File directory = new File(textfieldDirectoryPath.getText());
+		
+		if (!directory.exists() || !directory.isDirectory()) {
+			textfieldDirectoryPath.setText("");
+			return;
+		}
+		
+		storeLastSelectedDirectory(directory);
+
+		progressBarSearching.setMinimumSize(new Dimension(buttonScan.getSize().width, progressBarSearching.getMinimumSize().height));
+		progressBarSearching.setVisible(true);
+		progressBarSearching.setString("");
+		
+		labelSearchingDirectoryInfo.setVisible(true);
+		buttonScan.setVisible(false);
+
+		disOrEnableDialog(false);
+		labelSearchingDirectoryInfo.setEnabled(true);
+
+
+		final FileFilter selectedFileFilter = (FileFilter) comboBoxFileTypeSelection.getSelectedItem();
+		
+		threadState = new int[] {1};
+		new Thread(new Runnable() {
+			public void run() {
+			    UnlinkedPDFFileFilter ff = new UnlinkedPDFFileFilter(selectedFileFilter, database);
+				CheckableTreeNode rootNode = crawler.searchDirectory(directory, ff, threadState, new ChangeListener() {
+					int counter = 0;
+					public void stateChanged(ChangeEvent e) {
+						progressBarSearching.setString(++counter + " files found");
+					}
+				});
+				searchFinishedHandler(rootNode);
+			}
+		}).start();
+		
+	}
+	
+	/**
+	 * This will start the import of all file of all selected nodes in this
+	 * dialogs tree view. <br>
+	 * <br>
+	 * The import itself will run in a seperate thread, whilst this dialog will
+	 * be showing a progress bar, until the thread has finished its work. <br>
+	 * <br>
+	 * When the import has finished, the {@link #importFinishedHandler(List)} is
+	 * invoked.
+	 */
+	protected void startImport() {
+		
+		if (treeModel == null) {
+			return;
+		}
+		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
+		
+		CheckableTreeNode root = (CheckableTreeNode) treeModel.getRoot();
+		
+		final List<File> fileList = getFileListFromNode(root);
+		
+		if (fileList == null || fileList.isEmpty()) {
+			return;
+		}
+
+		progressBarImporting.setVisible(true);
+		labelImportingInfo.setVisible(true);
+		buttonApply.setVisible(false);
+		buttonClose.setVisible(false);
+		disOrEnableDialog(false);
+		
+		labelImportingInfo.setEnabled(true);
+
+		progressBarImporting.setMinimum(0);
+		progressBarImporting.setMaximum(fileList.size());
+		progressBarImporting.setValue(0);
+		progressBarImporting.setString("");
+		
+		
+		final BibtexEntryType entryType = ((BibtexEntryTypeWrapper) comboBoxEntryTypeSelection.getSelectedItem()).entryType;
+		
+		threadState = new int[] {1};
+		new Thread(new Runnable() {
+			public void run() {
+                List<String> errors = new LinkedList<String>();
+                int count = creatorManager.addEntrysFromFiles(fileList, database, frame.basePanel(),
+                        entryType,
+                        checkBoxWhyIsThereNoGetSelectedStupidSwing,  new ChangeListener() {
+					int counter = 0;
+					public void stateChanged(ChangeEvent e) {
+						progressBarImporting.setValue(++counter);
+						progressBarImporting.setString(counter + " of " + progressBarImporting.getMaximum());
+					}
+				}, errors);
+				importFinishedHandler(count, errors);
+			}
+		}).start();
+		
+	}
+	
+	/**
+	 * 
+	 * @param errors
+	 */
+	protected void importFinishedHandler(int count, List<String> errors) {
+		
+		if (errors != null && errors.size() > 0) {
+			
+			StringBuffer warningInfo = new StringBuffer();
+			warningInfo.append("The import finished with warnings:\n");
+			warningInfo.append("There ");
+			warningInfo.append(errors.size() > 1 ? "were " : "was ");
+			warningInfo.append(errors.size());
+			warningInfo.append(errors.size() > 1 ? " files" : " file");
+			warningInfo.append(errors.size() > 1 ? " which" : " that");
+			warningInfo.append(" could not be imported.");
+			
+			JOptionPane.showMessageDialog(this, warningInfo.toString(),
+                    Globals.lang("Warning"),
+                    JOptionPane.WARNING_MESSAGE);
+		}
+		
+		progressBarImporting.setVisible(false);
+		labelImportingInfo.setVisible(false);
+		buttonApply.setVisible(true);
+		buttonClose.setVisible(true);
+		disOrEnableDialog(true);
+        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+        frame.basePanel().markBaseChanged();
+	}
+	
+	/**
+	 * Will be called from the Thread in which the "unlinked files search" is
+	 * processed. As the result of the search, the root node of the determined
+	 * file structure is passed.
+	 * 
+	 * @param rootNode
+	 *            The root of the file structure as the result of the search.
+	 */
+	protected void searchFinishedHandler(CheckableTreeNode rootNode) {
+		
+		treeModel = new DefaultTreeModel(rootNode);
+		tree.setModel(treeModel);
+		tree.setRootVisible(rootNode.getChildCount() > 0);
+
+		tree.invalidate();
+		tree.repaint();
+		
+		progressBarSearching.setVisible(false);
+		labelSearchingDirectoryInfo.setVisible(false);
+		buttonScan.setVisible(true);
+		actionSelectAll.actionPerformed(null);
+		
+		disOrEnableDialog(true);
+        buttonApply.setEnabled(true);
+	}
+
+	/**
+	 * Sets up the actions for the components.
+	 */
+	private void setupActions() {
+
+		/**
+		 * Stores the selected Directory.
+		 */
+		buttonBrowse.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				File selectedDirectory = chooseDirectory();
+				storeLastSelectedDirectory(selectedDirectory);
+			}
+		});
+
+		buttonScan.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				startSearch();
+			}
+		});
+		
+		/**
+		 * Action for the button "Import...". <br>
+		 * <br>
+		 * Actions on this button will start the import of all file of all
+		 * selected nodes in this dialogs tree view. <br>
+		 */
+		actionListenerImportEntrys =  new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				startImport();
+			}
+		};
+		
+		buttonApply.addActionListener(actionListenerImportEntrys);
+		
+		buttonClose.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                dispose();
+            }
+        });
+	}
+
+	/**
+	 * Creates a list of {@link File}s for all leaf nodes in the tree structure
+	 * <code>node</code>, which have been marked as <i>selected</i>. <br>
+	 * <br>
+	 * <code>Selected</code> nodes correspond to those entries in the tree,
+	 * whose checkbox is <code>checked</code>.
+	 * 
+	 * SIDE EFFECT: The checked nodes are removed from the tree.
+	 * 
+	 * @param node
+	 *            The root node representing a tree structure.
+	 * @return A list of files of all checked leaf nodes.
+	 */
+	@SuppressWarnings("unchecked")
+	private List<File> getFileListFromNode(CheckableTreeNode node) {
+		List<File> filesList = new ArrayList<File>();
+		Enumeration<CheckableTreeNode> childs = node.depthFirstEnumeration();
+		ArrayList<CheckableTreeNode> nodesToRemove = new ArrayList<FindUnlinkedFilesDialog.CheckableTreeNode>();
+		while (childs.hasMoreElements()) {
+			CheckableTreeNode child = childs.nextElement();
+			if (child.isLeaf() && child.getSelected()) {
+				File nodeFile = ((FileNodeWrapper) child.getUserObject()).file;
+				if (nodeFile != null && nodeFile.isFile()) {
+					filesList.add(nodeFile);
+					nodesToRemove.add(child);
+				}
+			}
+		}
+
+		// remove imported files from tree
+        DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
+		for (CheckableTreeNode nodeToRemove: nodesToRemove) {
+		    DefaultMutableTreeNode parent = (DefaultMutableTreeNode) nodeToRemove.getParent();
+		    model.removeNodeFromParent(nodeToRemove);
+		    
+		    // remove empty parent node
+		    while (parent != null && parent.isLeaf()) {
+		        DefaultMutableTreeNode pp = (DefaultMutableTreeNode) parent.getParent();
+		        if (pp != null) {
+		            model.removeNodeFromParent(parent);
+		        }
+		        parent = pp;
+		    } 
+            // TODO: update counter / see: getTreeCellRendererComponent for label generation
+		}
+        tree.invalidate();
+		tree.repaint();
+		    
+		return filesList;
+	}
+
+	/**
+	 * Initializes the visible components in this dialog.
+	 */
+	private void initComponents() {
+		
+		this.addComponentListener(dialogPositionListener);
+		/* Interrupts the searchThread by setting the State-Array to 0 */
+		this.addWindowListener(new WindowAdapter() {
+			@Override
+			public void windowClosing(WindowEvent e) {
+				threadState[0] = 0;
+			}
+		});
+
+		panelDirectory = new JPanel();
+		panelSearchArea = new JPanel();
+		panelFiles = new JPanel();
+		panelOptions = new JPanel();
+		panelEntryTypesSelection = new JPanel();
+		panelButtons = new JPanel();
+		panelImportArea = new JPanel();
+		mainArea = new JPanel();
+
+		buttonBrowse = new JButton(Globals.lang("Browse..."));
+		buttonBrowse.setMnemonic('B');
+		buttonBrowse.setToolTipText(Globals.lang("Opens the file browser."));
+		buttonScan = new JButton(Globals.lang("Scan directory"));
+		buttonScan.setMnemonic('S');
+		buttonScan.setToolTipText(Globals.lang("Searches the selected directory for unlinked files."));
+		buttonApply = new JButton(Globals.lang("Apply"));
+		buttonApply.setMnemonic('I');
+		buttonApply.setToolTipText(Globals.lang("Starts the import of bibtex entries."));
+		buttonClose = new JButton(Globals.lang("Close"));
+		buttonClose.setToolTipText(Globals.lang("Leave this dialog."));
+		buttonClose.setMnemonic('C');
+
+		
+		/* Options for the TreeView */
+		buttonOptionSelectAll = new JButton();
+		buttonOptionSelectAll.setMnemonic('A');
+		buttonOptionSelectAll.setAction(actionSelectAll);
+		buttonOptionUnselectAll = new JButton();
+		buttonOptionUnselectAll.setMnemonic('U');
+		buttonOptionUnselectAll.setAction(actionUnselectAll);
+		buttonOptionExpandAll = new JButton();
+		buttonOptionExpandAll.setMnemonic('E');
+		buttonOptionExpandAll.setAction(actionExpandTree);
+		buttonOptionCollapseAll = new JButton();
+		buttonOptionCollapseAll.setMnemonic('L');
+		buttonOptionCollapseAll.setAction(actionCollapseTree);
+
+		checkboxCreateKeywords = new JCheckBox(Globals.lang("Create directory based keywords"));
+		checkboxCreateKeywords.setToolTipText(Globals.lang("Creates keywords in created entrys with directory pathnames"));
+		checkboxCreateKeywords.setSelected(checkBoxWhyIsThereNoGetSelectedStupidSwing);
+		checkboxCreateKeywords.addItemListener(new ItemListener() {
+			public void itemStateChanged(ItemEvent e) {
+				checkBoxWhyIsThereNoGetSelectedStupidSwing = !checkBoxWhyIsThereNoGetSelectedStupidSwing;
+			}
+		});
+
+		textfieldDirectoryPath = new JTextField();
+		textfieldDirectoryPath.setText(lastSelectedDirectory == null ? "" : lastSelectedDirectory.getAbsolutePath());
+
+		labelDirectoryDescription = new JLabel(Globals.lang("Select a directory where the search shall start."));
+		labelFileTypesDescription = new JLabel(Globals.lang("Select file type:"));
+		labelFilesDescription = new JLabel(Globals.lang("These files are not linked in the active database."));
+		labelEntryTypeDescription = new JLabel(Globals.lang("Entry type to be created:"));
+		labelSearchingDirectoryInfo = new JLabel(Globals.lang("Searching file system..."));
+		labelSearchingDirectoryInfo.setHorizontalAlignment(JTextField.CENTER);
+		labelSearchingDirectoryInfo.setVisible(false);
+		labelImportingInfo = new JLabel(Globals.lang("Importing into Database..."));
+		labelImportingInfo.setHorizontalAlignment(JTextField.CENTER);
+		labelImportingInfo.setVisible(false);
+
+		tree = new JTree();
+		scrollpaneTree = new JScrollPane(tree);
+		scrollpaneTree.setWheelScrollingEnabled(true);
+		
+		progressBarSearching = new JProgressBar();
+		progressBarSearching.setIndeterminate(true);
+		progressBarSearching.setVisible(false);
+		progressBarSearching.setStringPainted(true);
+		
+		progressBarImporting = new JProgressBar();
+		progressBarImporting.setIndeterminate(false);
+		progressBarImporting.setVisible(false);
+		progressBarImporting.setStringPainted(true);
+		
+	}
+	
+	/**
+	 * Initializes the layout for the visible components in this menu. A
+	 * {@link GridBagLayout} is used.
+	 */
+	private void initLayout() {
+		
+		GridBagLayout gbl = new GridBagLayout();
+
+		panelDirectory.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Globals.lang("Select directory")));
+		panelFiles.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Globals.lang("Select files")));
+		panelEntryTypesSelection.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Globals.lang("Bibtex entry creation")));
+
+		Insets basicInsets = new Insets(6, 6, 6, 6);
+		Insets smallInsets = new Insets(3, 2, 3, 1);
+		Insets noInsets = new Insets(0, 0, 0, 0);
+
+		// 		x, y, w, h, wx,wy,ix,iy
+		addComponent(gbl, panelSearchArea, buttonScan, GridBagConstraints.HORIZONTAL, GridBagConstraints.EAST, noInsets,
+				0, 1, 1, 1, 1, 1, 40, 10);
+		addComponent(gbl, panelSearchArea, labelSearchingDirectoryInfo, GridBagConstraints.HORIZONTAL, GridBagConstraints.EAST, noInsets,
+				0, 2, 1, 1, 0, 0, 0, 0);
+		addComponent(gbl, panelSearchArea, progressBarSearching, GridBagConstraints.HORIZONTAL, GridBagConstraints.EAST, noInsets,
+				0, 3, 1, 1, 0, 0, 0, 0);
+		
+		addComponent(gbl, panelDirectory, labelDirectoryDescription, null, GridBagConstraints.WEST, new Insets(6, 6, 0, 6),
+				0, 0, 3, 1, 0, 0, 0, 0);
+		addComponent(gbl, panelDirectory, textfieldDirectoryPath, GridBagConstraints.HORIZONTAL, null, basicInsets,
+				0, 1, 2, 1, 1, 1, 0, 0);
+		addComponent(gbl, panelDirectory, buttonBrowse, GridBagConstraints.HORIZONTAL, GridBagConstraints.EAST, basicInsets,
+				2, 1, 1, 1, 0, 0, 0, 0);
+		addComponent(gbl, panelDirectory, labelFileTypesDescription, GridBagConstraints.NONE, GridBagConstraints.WEST, new Insets(18, 6, 18, 3),
+				0, 3, 1, 1, 0, 0, 0, 0);
+		addComponent(gbl, panelDirectory, comboBoxFileTypeSelection, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST, new Insets(18, 3, 18, 6),
+				1, 3, 1, 1, 1, 0, 0, 0);
+		addComponent(gbl, panelDirectory, panelSearchArea, GridBagConstraints.HORIZONTAL, GridBagConstraints.EAST, new Insets(18, 6, 18, 6),
+				2, 3, 1, 1, 0, 0, 0, 0);
+
+		addComponent(gbl, panelFiles, labelFilesDescription, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST, new Insets(6, 6, 0, 6),
+				0, 0, 1, 1, 0, 0, 0, 0);
+		addComponent(gbl, panelFiles, scrollpaneTree, GridBagConstraints.BOTH, GridBagConstraints.CENTER, basicInsets,
+				0, 1, 1, 1, 1, 1, 0, 0);
+		addComponent(gbl, panelFiles, panelOptions, GridBagConstraints.NONE, GridBagConstraints.NORTHEAST, basicInsets,
+				1, 1, 1, 1, 0, 0, 0, 0);
+		addComponent(gbl, panelOptions, buttonOptionSelectAll, GridBagConstraints.HORIZONTAL, GridBagConstraints.NORTH, noInsets,
+				0, 0, 1, 1, 1, 0, 0, 0);
+		addComponent(gbl, panelOptions, buttonOptionUnselectAll, GridBagConstraints.HORIZONTAL, GridBagConstraints.NORTH, noInsets,
+				0, 1, 1, 1, 0, 0, 0, 0);
+		addComponent(gbl, panelOptions, buttonOptionExpandAll, GridBagConstraints.HORIZONTAL, GridBagConstraints.NORTH, new Insets(6, 0, 0, 0),
+				0, 2, 1, 1, 0, 0, 0, 0);
+		addComponent(gbl, panelOptions, buttonOptionCollapseAll, GridBagConstraints.HORIZONTAL, GridBagConstraints.NORTH, noInsets,
+				0, 3, 1, 1, 0, 0, 0, 0);
+		
+		addComponent(gbl, panelEntryTypesSelection, labelEntryTypeDescription, GridBagConstraints.NONE, GridBagConstraints.WEST, basicInsets,
+				0, 0, 1, 1, 0, 0, 0, 0);
+		addComponent(gbl, panelEntryTypesSelection, comboBoxEntryTypeSelection, GridBagConstraints.NONE, GridBagConstraints.WEST, basicInsets,
+				1, 0, 1, 1, 1, 0, 0, 0);
+		addComponent(gbl, panelEntryTypesSelection, checkboxCreateKeywords, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST, basicInsets,
+				0, 1, 2, 1, 0, 0, 0, 0);
+		addComponent(gbl, panelImportArea, labelImportingInfo, GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER, new Insets(6, 6, 0, 6),
+				0, 1, 1, 1, 1, 0, 0, 0);
+		addComponent(gbl, panelImportArea, progressBarImporting, GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER, new Insets(0, 6, 6, 6),
+				0, 2, 1, 1, 1, 0, 0, 0);
+		addComponent(gbl, panelButtons, panelImportArea, GridBagConstraints.NONE, GridBagConstraints.EAST, smallInsets,
+				1, 0, 1, 1, 0, 0, 0, 0);
+		
+		addComponent(gbl, getContentPane(), panelDirectory, GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER, basicInsets,
+				0, 0, 1, 1, 0, 0, 0, 0);
+		addComponent(gbl, getContentPane(), panelFiles, GridBagConstraints.BOTH, GridBagConstraints.NORTHWEST, new Insets(12, 6, 2, 2),
+				0, 1, 1, 1, 1, 1, 0, 0);
+		addComponent(gbl, getContentPane(), panelEntryTypesSelection, GridBagConstraints.HORIZONTAL, GridBagConstraints.SOUTHWEST, new Insets(12, 6, 2, 2),
+				0, 2, 1, 1, 0, 0, 0, 0);
+		addComponent(gbl, getContentPane(), panelButtons, GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER, new Insets(10, 6, 10, 6),
+				0, 3, 1, 1, 0, 0, 0, 0);
+		
+	    ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(buttonApply);
+        bb.addButton(buttonClose);
+        bb.addGlue();
+
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));        
+        panelImportArea.add(bb.getPanel(), GridBagConstraints.NONE);
+        pack();
+        
+	}
+
+	/**
+	 * Adds a component to a container, using the specified gridbag-layout and
+	 * the supplied parameters. <br>
+	 * <br>
+	 * This method is simply used to ged rid of thousands of lines of code,
+	 * which inevitably rise when layouts such as the gridbag-layout is being
+	 * used.
+	 * 
+	 * @param layout
+	 *            The layout to be used.
+	 * @param container
+	 *            The {@link Container}, to which the component will be added.
+	 * @param component
+	 *            An AWT {@link Component}, that will be added to the container.
+	 * @param fill
+	 *            A constant describing the fill behaviour (see
+	 *            {@link GridBagConstraints}). Can be <code>null</code>, if no
+	 *            filling wants to be specified.
+	 * @param anchor
+	 *            A constant describing the anchor of the element in its parent
+	 *            container (see {@link GridBagConstraints}). Can be
+	 *            <code>null</code>, if no specification is needed.
+	 * @param gridX
+	 *            The relative grid-X coordinate.
+	 * @param gridY
+	 *            The relative grid-Y coordinate.
+	 * @param width
+	 *            The relative width of the component.
+	 * @param height
+	 *            The relative height of the component.
+	 * @param weightX
+	 *            A value for the horizontal weight.
+	 * @param weightY
+	 *            A value for the vertical weight.
+	 * @param insets
+	 *            Insets of the component. Can be <code>null</code>.
+	 */
+	private final static void addComponent(GridBagLayout layout, Container container, Component component, Integer fill, Integer anchor,
+			Insets insets, int gridX, int gridY, int width, int height, double weightX, double weightY, int ipadX, int ipadY) {
+		container.setLayout(layout);
+		GridBagConstraints constraints = new GridBagConstraints();
+		constraints.gridx = gridX;
+		constraints.gridy = gridY;
+		constraints.gridwidth = width;
+		constraints.gridheight = height;
+		constraints.weightx = weightX;
+		constraints.weighty = weightY;
+		constraints.ipadx = ipadX;
+		constraints.ipady = ipadY;
+		if (fill != null)
+			constraints.fill = fill;
+		if (insets != null)
+			constraints.insets = insets;
+		if (anchor != null)
+			constraints.anchor = anchor;
+		layout.setConstraints(component, constraints);
+		container.add(component);
+	}
+
+	/**
+	 * Creates the tree view, that holds the data structure. <br>
+	 * <br>
+	 * Initially, the root node is <b>not</b> visible, so that the tree appears empty at the beginning.
+	 */
+	private void createTree() {
+		
+		/**
+		 * Mouse listener to listen for mouse events on the tree. <br>
+		 * This will mark the selected tree entry as "selected" or "unselected",
+		 * which will cause this nodes checkbox to appear as either "checked" or
+		 * "unchecked".
+		 */
+		treeMouseListener = new MouseAdapter() {
+
+			public void mousePressed(MouseEvent e) {
+				int x = e.getX();
+				int y = e.getY();
+
+				int row = tree.getRowForLocation(x, y);
+
+				TreePath path = tree.getPathForRow(row);
+				if (path != null) {
+                    CheckableTreeNode node = (CheckableTreeNode) path.getLastPathComponent();
+				    if (e.getClickCount() == 2) {
+				        Object userObject = node.getUserObject();
+				        if (userObject instanceof FileNodeWrapper && node.isLeaf()) {
+				            FileNodeWrapper fnw = (FileNodeWrapper) userObject;
+				            try {
+                                Util.openExternalViewer(JabRef.jrf.basePanel().metaData(), fnw.file.getAbsolutePath(), "pdf");
+                            } catch (IOException e1) {
+                                Globals.logger("Error opening file");
+                            }
+				        }
+				    } else {
+    					node.check();
+    					tree.invalidate();
+    					tree.repaint();
+				    }
+				}
+			}
+
+		};
+		
+		CheckableTreeNode startNode = new CheckableTreeNode("ROOT");
+		DefaultTreeModel model = new DefaultTreeModel(startNode);
+		
+		tree.setModel(model);
+		tree.setRootVisible(false);
+		
+		DefaultTreeCellRenderer renderer = new CheckboxTreeCellRenderer();
+		tree.setCellRenderer(renderer);
+		
+		tree.addMouseListener(treeMouseListener);
+		
+	}
+	
+	/**
+	 * Initialises the combobox that contains the available file types which
+	 * bibtex entries can be created of.
+	 */
+	private void createFileTypesCombobox() {
+
+		List<FileFilter> fileFilterList = creatorManager.getFileFilterList();
+
+		Vector<FileFilter> vector = new Vector<FileFilter>();
+		for (FileFilter fileFilter : fileFilterList) {
+			vector.add(fileFilter);
+		}
+		comboBoxFileTypeSelection = new JComboBox(vector);
+		
+		comboBoxFileTypeSelection.setRenderer(new DefaultListCellRenderer() {
+			private static final long serialVersionUID = 8503499454763947465L;
+			/* (non-Javadoc)
+			 * @see javax.swing.DefaultListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
+			 */
+			@Override
+			public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+				JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+				if (value instanceof EntryFromFileCreator) {
+					EntryFromFileCreator creator = (EntryFromFileCreator) value;
+					if (creator.getExternalFileType() != null) {
+						label.setIcon(creator.getExternalFileType().getIcon());
+					}
+				}				
+				return label;
+			}
+		});
+
+	}
+	
+	/**
+	 * Creates the ComboBox-View vor the Listbox that holds the Bibtex entry
+	 * types.
+	 */
+	private void createEntryTypesCombobox() {
+
+		TreeMap<String, BibtexEntryType> entryTypes = BibtexEntryType.ALL_TYPES;
+		Iterator<BibtexEntryType> iterator = entryTypes.values().iterator();
+		Vector<BibtexEntryTypeWrapper> list = new Vector<BibtexEntryTypeWrapper>();
+		list.add(new BibtexEntryTypeWrapper(null));
+		while(iterator.hasNext()) {
+			list.add(new BibtexEntryTypeWrapper(iterator.next()));
+		}
+		comboBoxEntryTypeSelection = new JComboBox(list);
+	}
+	
+	/**
+	 * Wrapper for displaying the Type {@link BibtexEntryType} in a Combobox.
+	 * 
+	 * @author Nosh&Dan
+	 * @version 12.11.2008 | 01:02:30
+	 *
+	 */
+	private static class BibtexEntryTypeWrapper {
+		final BibtexEntryType entryType;
+		BibtexEntryTypeWrapper(BibtexEntryType bibtexType) {
+			this.entryType = bibtexType;
+		}
+		/* (non-Javadoc)
+		 * @see java.lang.Object#toString()
+		 */
+		@Override
+		public String toString() {
+			if (entryType == null)
+				return Globals.lang("<No selection>");
+			return entryType.getName();
+		}
+	}
+	
+
+	public static class CheckableTreeNode extends DefaultMutableTreeNode {
+		private static final long serialVersionUID = -1131241777605570737L;
+		private boolean isSelected;
+		private JCheckBox checkbox;
+
+		public CheckableTreeNode(Object userObject) {
+			super(userObject);
+			checkbox = new JCheckBox();
+		}
+
+		/**
+		 * @return the checkbox
+		 */
+		public JCheckBox getCheckbox() {
+			return checkbox;
+		}
+
+		/**
+		 * @param checkbox
+		 *            the checkbox to set
+		 */
+		public void setCheckbox(JCheckBox checkbox) {
+			this.checkbox = checkbox;
+		}
+
+		public void check() {
+			setSelected(!isSelected);
+		}
+
+		@SuppressWarnings("unchecked")
+		public void setSelected(boolean bSelected) {
+			isSelected = bSelected;
+			Enumeration<CheckableTreeNode> children = this.children();
+			while (children.hasMoreElements()) {
+				CheckableTreeNode child = children.nextElement();
+				child.setSelected(bSelected);
+			}
+
+		}
+
+		public boolean getSelected() {
+			return isSelected;
+		}
+
+	}
+
+	private static class CheckboxTreeCellRenderer extends DefaultTreeCellRenderer {
+		private static final long serialVersionUID = 3737245079578074387L;
+
+	    protected FileSystemView fsv = FileSystemView.getFileSystemView();
+	    
+		public Component getTreeCellRendererComponent(final JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row,
+				boolean hasFocus) {
+			
+			Component nodeComponent = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
+			CheckableTreeNode node = (CheckableTreeNode) value;
+			
+			FileNodeWrapper userObject = (FileNodeWrapper) node.getUserObject();
+			
+			JPanel newPanel = new JPanel();
+			
+			JCheckBox checkbox = node.getCheckbox();
+			checkbox.setSelected(node.getSelected());
+
+            try { setIcon(fsv.getSystemIcon(userObject.file)); }
+            catch (Exception e) {}
+			
+			newPanel.setBackground(nodeComponent.getBackground());
+			checkbox.setBackground(nodeComponent.getBackground());
+			
+			GridBagLayout gbl = new GridBagLayout();
+			addComponent(gbl, newPanel, checkbox, null, null, null, 0, 0, 1, 1, 0, 0, 0, 0);
+			addComponent(gbl, newPanel, nodeComponent, GridBagConstraints.HORIZONTAL, null, new Insets(1, 2, 0, 0), 1, 0, 1, 1, 1, 0, 0, 0);
+			
+			if (userObject.fileCount > 0) {
+				JLabel label = new JLabel("(" + userObject.fileCount + " file" + (userObject.fileCount > 1 ? "s" : "") + ")");
+				addComponent(gbl, newPanel, label, null, null, new Insets(1, 2, 0, 0), 2, 0, 1, 1, 0, 0, 0, 0);
+			}
+			return newPanel;
+		}
+		
+	}
+
+	public static class FileNodeWrapper {
+		public final File file;
+		public final int fileCount;
+
+		public FileNodeWrapper(File aFile) {
+			this(aFile, 0);
+		}
+
+		/**
+		 * @param directory
+		 * @param length
+		 */
+		public FileNodeWrapper(File aDirectory, int fileCount) {
+			this.file = aDirectory;
+			this.fileCount = fileCount;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.lang.Object#toString()
+		 */
+		@Override
+		public String toString() {
+			return file.getName();
+		}
+	}
+
+}
diff --git a/src/java/net/sf/jabref/FocusRequester.java b/src/java/net/sf/jabref/FocusRequester.java
index e6f6083..18a6d23 100644
--- a/src/java/net/sf/jabref/FocusRequester.java
+++ b/src/java/net/sf/jabref/FocusRequester.java
@@ -1,40 +1,40 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import javax.swing.SwingUtilities;
-import java.awt.Component;
-
-public class FocusRequester implements Runnable {
-    private Component comp;
-
-    public FocusRequester(Component comp) {
-       if (comp == null)
-               Thread.dumpStack();
-
-        //System.out.println("FocusRequester: "+comp.toString());
-	this.comp = comp;
-	try {
-	    SwingUtilities.invokeLater(this);
-	} catch(Exception e) {
-	    e.printStackTrace();
-	}
-    }
-    public void run() {
-
-    comp.requestFocus();
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import javax.swing.SwingUtilities;
+import java.awt.Component;
+
+public class FocusRequester implements Runnable {
+    private Component comp;
+
+    public FocusRequester(Component comp) {
+       if (comp == null)
+               Thread.dumpStack();
+
+        //System.out.println("FocusRequester: "+comp.toString());
+	this.comp = comp;
+	try {
+	    SwingUtilities.invokeLater(this);
+	} catch(Exception e) {
+	    e.printStackTrace();
+	}
+    }
+    public void run() {
+
+    comp.requestFocus();
+    }
+}
diff --git a/src/java/net/sf/jabref/FontSelectorDialog.java b/src/java/net/sf/jabref/FontSelectorDialog.java
index 9aeaa26..239d8e8 100644
--- a/src/java/net/sf/jabref/FontSelectorDialog.java
+++ b/src/java/net/sf/jabref/FontSelectorDialog.java
@@ -1,443 +1,443 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-/*
-  Taken from JpicEdt
-modified slightly by nizar batada for JabRef
-
- EepicViewFactory.java - February 11, 2002 - jPicEdt, a picture editor for LaTeX.
- copyright (C) 1999-2002 Sylvain Reynal
- Portions copyright (C) 2000, 2001 Slava Pestov
- Portions copyright (C) 1999 Jason Ginchereau
-
- D\uFFFDpartement de Physique
- Ecole Nationale Sup\uFFFDrieure de l'Electronique et de ses Applications (ENSEA)
- 6, avenue du Ponceau
- F-95014 CERGY CEDEX
-
- Tel : +33 130 736 245
- Fax : +33 130 736 667
- e-mail : reynal at ensea.fr
- jPicEdt web page : http://trashx.ensea.fr/jpicedt/
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Vector;
-
-import javax.swing.*;
-import javax.swing.border.EmptyBorder;
-import javax.swing.border.TitledBorder;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-
-/**
- * A font chooser widget.
- * @author Slava Pestov (jEdit), Sylvain Reynal
- * @since jpicedt 1.3.2.beta-9
- * @version $Id$
- * <p>
- * $Log$
- * Revision 1.8  2007/07/19 01:35:35  coezbek
- * JabRef 2.4b1 Plug-In System established. Yeah!
- *
- * Revision 1.7  2006/04/26 08:46:57  kiar
- * fix dialog.show() deprecation messages, change build.xml
- *
- * Revision 1.6  2004/02/27 23:28:41  mortenalver
- * Some code tidying, no effect on behaviour (hopefully)
- *
- * Revision 1.5  2004/02/24 23:30:18  mortenalver
- * Added more translations, and started work on a Replace string feature
- *
- * Revision 1.4  2004/02/17 09:14:02  mortenalver
- * Similar update in FontSelector preview.
- *
- * Revision 1.3  2004/02/17 07:35:22  mortenalver
- * Experimenting with antialiasing in table.
- *
- * Revision 1.2  2003/12/14 23:48:02  mortenalver
- * .
- *
- * Revision 1.1  2003/11/07 22:18:07  nbatada
- * modified it slightly from initial version
- *
- * Revision 1.1  2003/11/07 22:14:34  nbatada
- * modified it from initial version
- *
- * Revision 1.4  2003/11/02 01:51:06  reynal
- * Cleaned-up i18n labels
- *
- * Revision 1.3  2003/08/31 22:05:40  reynal
- *
- * Enhanced class interface for some widgets.
- *
-
- */
-
-class FontSelector extends JButton {
-
-	private static final long serialVersionUID = 7745223550102664896L;
-
-	static final String PLAIN="plain";
-        static final String BOLD="bold";
-        static final String BOLD_ITALIC="bold-italic";
-        static final String ITALIC="italic";
-
-        /** init with a default font */
-        public FontSelector(){
-                this(new Font("SansSerif", Font.PLAIN, 10));
-        }
-
-        /** init with the given font */
-        public FontSelector(Font font){
-                setFont(font);
-                setRequestFocusEnabled(false);
-                addActionListener(new ActionHandler());
-        }
-
-        public void setFont(Font font){
-                super.setFont(font);
-                updateText();
-        }
-
-        /**
-         * update button's text content from the current button's font.
-         */
-        private void updateText(){
-                Font font = getFont();
-                String styleString;
-                switch(font.getStyle()){
-                case Font.PLAIN:
-                        styleString = PLAIN;
-                        break;
-                case Font.BOLD:
-                        styleString = BOLD;
-                        break;
-                case Font.ITALIC:
-                        styleString = ITALIC;
-                        break;
-                case Font.BOLD | Font.ITALIC:
-                        styleString = BOLD_ITALIC;
-                        break;
-                default:
-                        styleString = "UNKNOWN!!!???";
-                        break;
-                }
-
-                setText(font.getFamily() + " " + font.getSize() + " " + styleString);
-        }
-
-        /**
-         * button's action-listener ; open a FontSelectorDialog
-         */
-        class ActionHandler implements ActionListener {
-                public void actionPerformed(ActionEvent evt) {
-                        Font font = new FontSelectorDialog(FontSelector.this,getFont()).getSelectedFont();
-                        if(font != null){
-                                setFont(font);
-                        }
-                }
-        }
-
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////////
-
-public class FontSelectorDialog extends JDialog {
-
-	private static final long serialVersionUID = -8670346696048738055L;
-
-	static final String PLAIN="plain";
-        static final String BOLD="bold";
-        static final String BOLD_ITALIC="bold-italic";
-        static final String ITALIC="italic";
-
-        public FontSelectorDialog(Component comp, Font font) {
-
-            //super(JOptionPane.getFrameForComponent(comp),jpicedt.Localizer.currentLocalizer().get("widget.FontSelector"),true); //
-            super(JOptionPane.getFrameForComponent(comp),Globals.lang("FontSelector"),true); //
-                JPanel content = new JPanel(new BorderLayout());
-                content.setBorder(new EmptyBorder(12,12,12,12));
-                setContentPane(content);
-
-                JPanel listPanel = new JPanel(new GridLayout(1,3,6,6));
-
-                JPanel familyPanel = createTextFieldAndListPanel(
-                                                                 Globals.lang("Font Family"),
-                                                                 familyField = new JTextField(),
-                                                                 familyList = new JList(getFontList()));
-                listPanel.add(familyPanel);
-
-                String[] sizes = { "9", "10", "12", "14", "16", "18", "24" };
-                JPanel sizePanel = createTextFieldAndListPanel(
-                                                               Globals.lang("Font Size"),
-                                       sizeField = new JTextField(),
-                                       sizeList = new JList(sizes));
-                listPanel.add(sizePanel);
-
-                String[] styles = {PLAIN,BOLD,ITALIC,BOLD_ITALIC};
-
-                JPanel stylePanel = createTextFieldAndListPanel(
-                                                                Globals.lang("Font Style"),
-                                        styleField = new JTextField(),
-                                        styleList = new JList(styles));
-                styleField.setEditable(false);
-                listPanel.add(stylePanel);
-
-                familyList.setSelectedValue(font.getFamily(),true);
-                familyField.setText(font.getFamily());
-                sizeList.setSelectedValue(String.valueOf(font.getSize()),true);
-                sizeField.setText(String.valueOf(font.getSize()));
-                styleList.setSelectedIndex(font.getStyle());
-                styleField.setText((String)styleList.getSelectedValue());
-
-                ListHandler listHandler = new ListHandler();
-                familyList.addListSelectionListener(listHandler);
-                sizeList.addListSelectionListener(listHandler);
-                styleList.addListSelectionListener(listHandler);
-
-                content.add(BorderLayout.NORTH,listPanel);
-
-                //preview = new JLabel("Font Preview");
-
-                /* --------------------------------------------------------
-                   |  Experimental addition by Morten Alver. I want to    |
-                   |  enable antialiasing in the preview field, since I'm |
-                   |  working on introducing this in the table view.      |
-                   -------------------------------------------------------- */
-                preview = new JLabel(Globals.lang("Font Preview")) {
-					private static final long serialVersionUID = -4191591634265068189L;
-						public void paint(Graphics g) {
-                            Graphics2D g2 = (Graphics2D)g;
-                            g2.setRenderingHint
-                                (RenderingHints.KEY_ANTIALIASING,
-                                 RenderingHints.VALUE_ANTIALIAS_ON);
-                            super.paint(g2);
-                        }
-
-                    };
-
-
-
-                preview.setBorder(new TitledBorder(Globals.lang("Font Preview")));
-
-                updatePreview();
-
-                Dimension prefSize = preview.getPreferredSize();
-                prefSize.height = 50;
-                preview.setPreferredSize(prefSize);
-
-                content.add(BorderLayout.CENTER,preview);
-
-                JPanel buttons = new JPanel();
-                buttons.setLayout(new BoxLayout(buttons,BoxLayout.X_AXIS));
-                buttons.setBorder(new EmptyBorder(12,0,0,0));
-                buttons.add(Box.createGlue());
-
-                ok = new JButton(Globals.lang("OK"));
-                ok.addActionListener(new ActionHandler());
-                getRootPane().setDefaultButton(ok);
-                buttons.add(ok);
-
-                buttons.add(Box.createHorizontalStrut(6));
-
-                cancel = new JButton(Globals.lang("Cancel"));
-                cancel.addActionListener(new ActionHandler());
-                buttons.add(cancel);
-
-                buttons.add(Box.createGlue());
-
-                content.add(BorderLayout.SOUTH,buttons);
-
-                pack();
-                setLocationRelativeTo(JOptionPane.getFrameForComponent(comp));
-                setVisible(true); // show(); -> deprecated since 1.5
-        }
-
-        public void ok(){
-                isOK = true;
-                dispose();
-        }
-
-        public void cancel(){
-                dispose();
-        }
-
-        public Font getSelectedFont(){
-                if(!isOK)
-                        return null;
-
-                int size;
-                try{
-                        size = Integer.parseInt(sizeField.getText());
-                }
-                catch(Exception e){
-                        size = 14;
-                }
-
-                return new Font(familyField.getText(),styleList.getSelectedIndex(),size);
-        }
-
-        // private members
-        private boolean isOK;
-        private JTextField familyField;
-        private JList familyList;
-        private JTextField sizeField;
-        private JList sizeList;
-        private JTextField styleField;
-        private JList styleList;
-        private JLabel preview;
-        private JButton ok;
-        private JButton cancel;
-
-        /**
-         * For some reason the default Java fonts show up in the
-         * list with .bold, .bolditalic, and .italic extensions.
-         */
-        private static final String[] HIDEFONTS = {".bold",".italic"};
-
-        // [pending] from GeneralCustomizer :
-        // GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()
-        private String[] getFontList(){
-                try{
-                        Class<?> GEClass = Class.forName("java.awt.GraphicsEnvironment");
-                        Object GEInstance = GEClass.getMethod("getLocalGraphicsEnvironment").invoke(null);
-
-                        String[] nameArray = (String[])GEClass.getMethod("getAvailableFontFamilyNames").invoke(GEInstance);
-                        Vector<String> nameVector = new Vector<String>(nameArray.length);
-
-                        for(int i = 0, j; i < nameArray.length; i++){
-                                for(j = 0; j < HIDEFONTS.length; j++){
-                                        if(nameArray[i].indexOf(HIDEFONTS[j]) >= 0) break;
-                                }
-
-                                if(j == HIDEFONTS.length) nameVector.addElement(nameArray[i]);
-                        }
-
-                        String[] _array = new String[nameVector.size()];
-                        nameVector.copyInto(_array);
-                        return _array;
-                }
-                catch(Exception ex){
-                    return null;//return Toolkit.getDefaultToolkit().getFontList();
-                }
-        }
-
-        private JPanel createTextFieldAndListPanel(String label,JTextField textField, JList list){
-                GridBagLayout layout = new GridBagLayout();
-                JPanel panel = new JPanel(layout);
-
-                GridBagConstraints cons = new GridBagConstraints();
-                cons.gridx = cons.gridy = 0;
-                cons.gridwidth = cons.gridheight = 1;
-                cons.fill = GridBagConstraints.BOTH;
-                cons.weightx = 1.0f;
-
-                JLabel _label = new JLabel(label);
-                layout.setConstraints(_label,cons);
-                panel.add(_label);
-
-                cons.gridy = 1;
-                Component vs = Box.createVerticalStrut(6);
-                layout.setConstraints(vs,cons);
-                panel.add(vs);
-
-                cons.gridy = 2;
-                layout.setConstraints(textField,cons);
-                panel.add(textField);
-
-                cons.gridy = 3;
-                vs = Box.createVerticalStrut(6);
-                layout.setConstraints(vs,cons);
-                panel.add(vs);
-
-                cons.gridy = 4;
-                cons.gridheight = GridBagConstraints.REMAINDER;
-                cons.weighty = 1.0f;
-                JScrollPane scroller = new JScrollPane(list);
-                layout.setConstraints(scroller,cons);
-                panel.add(scroller);
-
-                return panel;
-        }
-
-        private void updatePreview(){
-                String family = familyField.getText();
-                int size;
-                try{
-                        size = Integer.parseInt(sizeField.getText());
-                }
-                catch(Exception e){
-                        size = 14;
-                }
-                int style = styleList.getSelectedIndex();
-                preview.setFont(new Font(family,style,size));
-        }
-
-        class ActionHandler implements ActionListener {
-                public void actionPerformed(ActionEvent evt){
-                        if(evt.getSource() == ok)ok();
-                        else if(evt.getSource() == cancel)cancel();
-                }
-        }
-
-        class ListHandler implements ListSelectionListener {
-                public void valueChanged(ListSelectionEvent evt)
-                {
-                        Object source = evt.getSource();
-                        if(source == familyList) {
-                                String family = (String)familyList.getSelectedValue();
-                                if(family != null)
-                                        familyField.setText(family);
-                        }
-                        else if(source == sizeList) {
-                                String size = (String)sizeList.getSelectedValue();
-                                if(size != null)
-                                        sizeField.setText(size);
-                        }
-                        else if(source == styleList) {
-                                String style = (String)styleList.getSelectedValue();
-                                if(style != null)
-                                        styleField.setText(style);
-                        }
-                        updatePreview();
-                }
-        }
-    /*public static void main(String args[])
-        {
-            Font font = new FontSelectorDialog(null,new Font("Times",Font.PLAIN,12)).getSelectedFont();
-
-        }
-    */
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+/*
+  Taken from JpicEdt
+modified slightly by nizar batada for JabRef
+
+ EepicViewFactory.java - February 11, 2002 - jPicEdt, a picture editor for LaTeX.
+ copyright (C) 1999-2002 Sylvain Reynal
+ Portions copyright (C) 2000, 2001 Slava Pestov
+ Portions copyright (C) 1999 Jason Ginchereau
+
+ D\uFFFDpartement de Physique
+ Ecole Nationale Sup\uFFFDrieure de l'Electronique et de ses Applications (ENSEA)
+ 6, avenue du Ponceau
+ F-95014 CERGY CEDEX
+
+ Tel : +33 130 736 245
+ Fax : +33 130 736 667
+ e-mail : reynal at ensea.fr
+ jPicEdt web page : http://trashx.ensea.fr/jpicedt/
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Vector;
+
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+/**
+ * A font chooser widget.
+ * @author Slava Pestov (jEdit), Sylvain Reynal
+ * @since jpicedt 1.3.2.beta-9
+ * @version $Id$
+ * <p>
+ * $Log$
+ * Revision 1.8  2007/07/19 01:35:35  coezbek
+ * JabRef 2.4b1 Plug-In System established. Yeah!
+ *
+ * Revision 1.7  2006/04/26 08:46:57  kiar
+ * fix dialog.show() deprecation messages, change build.xml
+ *
+ * Revision 1.6  2004/02/27 23:28:41  mortenalver
+ * Some code tidying, no effect on behaviour (hopefully)
+ *
+ * Revision 1.5  2004/02/24 23:30:18  mortenalver
+ * Added more translations, and started work on a Replace string feature
+ *
+ * Revision 1.4  2004/02/17 09:14:02  mortenalver
+ * Similar update in FontSelector preview.
+ *
+ * Revision 1.3  2004/02/17 07:35:22  mortenalver
+ * Experimenting with antialiasing in table.
+ *
+ * Revision 1.2  2003/12/14 23:48:02  mortenalver
+ * .
+ *
+ * Revision 1.1  2003/11/07 22:18:07  nbatada
+ * modified it slightly from initial version
+ *
+ * Revision 1.1  2003/11/07 22:14:34  nbatada
+ * modified it from initial version
+ *
+ * Revision 1.4  2003/11/02 01:51:06  reynal
+ * Cleaned-up i18n labels
+ *
+ * Revision 1.3  2003/08/31 22:05:40  reynal
+ *
+ * Enhanced class interface for some widgets.
+ *
+
+ */
+
+class FontSelector extends JButton {
+
+	private static final long serialVersionUID = 7745223550102664896L;
+
+	static final String PLAIN="plain";
+        static final String BOLD="bold";
+        static final String BOLD_ITALIC="bold-italic";
+        static final String ITALIC="italic";
+
+        /** init with a default font */
+        public FontSelector(){
+                this(new Font("SansSerif", Font.PLAIN, 10));
+        }
+
+        /** init with the given font */
+        public FontSelector(Font font){
+                setFont(font);
+                setRequestFocusEnabled(false);
+                addActionListener(new ActionHandler());
+        }
+
+        public void setFont(Font font){
+                super.setFont(font);
+                updateText();
+        }
+
+        /**
+         * update button's text content from the current button's font.
+         */
+        private void updateText(){
+                Font font = getFont();
+                String styleString;
+                switch(font.getStyle()){
+                case Font.PLAIN:
+                        styleString = PLAIN;
+                        break;
+                case Font.BOLD:
+                        styleString = BOLD;
+                        break;
+                case Font.ITALIC:
+                        styleString = ITALIC;
+                        break;
+                case Font.BOLD | Font.ITALIC:
+                        styleString = BOLD_ITALIC;
+                        break;
+                default:
+                        styleString = "UNKNOWN!!!???";
+                        break;
+                }
+
+                setText(font.getFamily() + " " + font.getSize() + " " + styleString);
+        }
+
+        /**
+         * button's action-listener ; open a FontSelectorDialog
+         */
+        class ActionHandler implements ActionListener {
+                public void actionPerformed(ActionEvent evt) {
+                        Font font = new FontSelectorDialog(FontSelector.this,getFont()).getSelectedFont();
+                        if(font != null){
+                                setFont(font);
+                        }
+                }
+        }
+
+}
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+
+public class FontSelectorDialog extends JDialog {
+
+	private static final long serialVersionUID = -8670346696048738055L;
+
+	static final String PLAIN="plain";
+        static final String BOLD="bold";
+        static final String BOLD_ITALIC="bold-italic";
+        static final String ITALIC="italic";
+
+        public FontSelectorDialog(Component comp, Font font) {
+
+            //super(JOptionPane.getFrameForComponent(comp),jpicedt.Localizer.currentLocalizer().get("widget.FontSelector"),true); //
+            super(JOptionPane.getFrameForComponent(comp),Globals.lang("FontSelector"),true); //
+                JPanel content = new JPanel(new BorderLayout());
+                content.setBorder(new EmptyBorder(12,12,12,12));
+                setContentPane(content);
+
+                JPanel listPanel = new JPanel(new GridLayout(1,3,6,6));
+
+                JPanel familyPanel = createTextFieldAndListPanel(
+                                                                 Globals.lang("Font Family"),
+                                                                 familyField = new JTextField(),
+                                                                 familyList = new JList(getFontList()));
+                listPanel.add(familyPanel);
+
+                String[] sizes = { "9", "10", "12", "14", "16", "18", "24" };
+                JPanel sizePanel = createTextFieldAndListPanel(
+                                                               Globals.lang("Font Size"),
+                                       sizeField = new JTextField(),
+                                       sizeList = new JList(sizes));
+                listPanel.add(sizePanel);
+
+                String[] styles = {PLAIN,BOLD,ITALIC,BOLD_ITALIC};
+
+                JPanel stylePanel = createTextFieldAndListPanel(
+                                                                Globals.lang("Font Style"),
+                                        styleField = new JTextField(),
+                                        styleList = new JList(styles));
+                styleField.setEditable(false);
+                listPanel.add(stylePanel);
+
+                familyList.setSelectedValue(font.getFamily(),true);
+                familyField.setText(font.getFamily());
+                sizeList.setSelectedValue(String.valueOf(font.getSize()),true);
+                sizeField.setText(String.valueOf(font.getSize()));
+                styleList.setSelectedIndex(font.getStyle());
+                styleField.setText((String)styleList.getSelectedValue());
+
+                ListHandler listHandler = new ListHandler();
+                familyList.addListSelectionListener(listHandler);
+                sizeList.addListSelectionListener(listHandler);
+                styleList.addListSelectionListener(listHandler);
+
+                content.add(BorderLayout.NORTH,listPanel);
+
+                //preview = new JLabel("Font Preview");
+
+                /* --------------------------------------------------------
+                   |  Experimental addition by Morten Alver. I want to    |
+                   |  enable antialiasing in the preview field, since I'm |
+                   |  working on introducing this in the table view.      |
+                   -------------------------------------------------------- */
+                preview = new JLabel(Globals.lang("Font Preview")) {
+					private static final long serialVersionUID = -4191591634265068189L;
+						public void paint(Graphics g) {
+                            Graphics2D g2 = (Graphics2D)g;
+                            g2.setRenderingHint
+                                (RenderingHints.KEY_ANTIALIASING,
+                                 RenderingHints.VALUE_ANTIALIAS_ON);
+                            super.paint(g2);
+                        }
+
+                    };
+
+
+
+                preview.setBorder(new TitledBorder(Globals.lang("Font Preview")));
+
+                updatePreview();
+
+                Dimension prefSize = preview.getPreferredSize();
+                prefSize.height = 50;
+                preview.setPreferredSize(prefSize);
+
+                content.add(BorderLayout.CENTER,preview);
+
+                JPanel buttons = new JPanel();
+                buttons.setLayout(new BoxLayout(buttons,BoxLayout.X_AXIS));
+                buttons.setBorder(new EmptyBorder(12,0,0,0));
+                buttons.add(Box.createGlue());
+
+                ok = new JButton(Globals.lang("OK"));
+                ok.addActionListener(new ActionHandler());
+                getRootPane().setDefaultButton(ok);
+                buttons.add(ok);
+
+                buttons.add(Box.createHorizontalStrut(6));
+
+                cancel = new JButton(Globals.lang("Cancel"));
+                cancel.addActionListener(new ActionHandler());
+                buttons.add(cancel);
+
+                buttons.add(Box.createGlue());
+
+                content.add(BorderLayout.SOUTH,buttons);
+
+                pack();
+                setLocationRelativeTo(JOptionPane.getFrameForComponent(comp));
+                setVisible(true); // show(); -> deprecated since 1.5
+        }
+
+        public void ok(){
+                isOK = true;
+                dispose();
+        }
+
+        public void cancel(){
+                dispose();
+        }
+
+        public Font getSelectedFont(){
+                if(!isOK)
+                        return null;
+
+                int size;
+                try{
+                        size = Integer.parseInt(sizeField.getText());
+                }
+                catch(Exception e){
+                        size = 14;
+                }
+
+                return new Font(familyField.getText(),styleList.getSelectedIndex(),size);
+        }
+
+        // private members
+        private boolean isOK;
+        private JTextField familyField;
+        private JList familyList;
+        private JTextField sizeField;
+        private JList sizeList;
+        private JTextField styleField;
+        private JList styleList;
+        private JLabel preview;
+        private JButton ok;
+        private JButton cancel;
+
+        /**
+         * For some reason the default Java fonts show up in the
+         * list with .bold, .bolditalic, and .italic extensions.
+         */
+        private static final String[] HIDEFONTS = {".bold",".italic"};
+
+        // [pending] from GeneralCustomizer :
+        // GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()
+        private String[] getFontList(){
+                try{
+                        Class<?> GEClass = Class.forName("java.awt.GraphicsEnvironment");
+                        Object GEInstance = GEClass.getMethod("getLocalGraphicsEnvironment").invoke(null);
+
+                        String[] nameArray = (String[])GEClass.getMethod("getAvailableFontFamilyNames").invoke(GEInstance);
+                        Vector<String> nameVector = new Vector<String>(nameArray.length);
+
+                        for(int i = 0, j; i < nameArray.length; i++){
+                                for(j = 0; j < HIDEFONTS.length; j++){
+                                        if(nameArray[i].indexOf(HIDEFONTS[j]) >= 0) break;
+                                }
+
+                                if(j == HIDEFONTS.length) nameVector.addElement(nameArray[i]);
+                        }
+
+                        String[] _array = new String[nameVector.size()];
+                        nameVector.copyInto(_array);
+                        return _array;
+                }
+                catch(Exception ex){
+                    return null;//return Toolkit.getDefaultToolkit().getFontList();
+                }
+        }
+
+        private JPanel createTextFieldAndListPanel(String label,JTextField textField, JList list){
+                GridBagLayout layout = new GridBagLayout();
+                JPanel panel = new JPanel(layout);
+
+                GridBagConstraints cons = new GridBagConstraints();
+                cons.gridx = cons.gridy = 0;
+                cons.gridwidth = cons.gridheight = 1;
+                cons.fill = GridBagConstraints.BOTH;
+                cons.weightx = 1.0f;
+
+                JLabel _label = new JLabel(label);
+                layout.setConstraints(_label,cons);
+                panel.add(_label);
+
+                cons.gridy = 1;
+                Component vs = Box.createVerticalStrut(6);
+                layout.setConstraints(vs,cons);
+                panel.add(vs);
+
+                cons.gridy = 2;
+                layout.setConstraints(textField,cons);
+                panel.add(textField);
+
+                cons.gridy = 3;
+                vs = Box.createVerticalStrut(6);
+                layout.setConstraints(vs,cons);
+                panel.add(vs);
+
+                cons.gridy = 4;
+                cons.gridheight = GridBagConstraints.REMAINDER;
+                cons.weighty = 1.0f;
+                JScrollPane scroller = new JScrollPane(list);
+                layout.setConstraints(scroller,cons);
+                panel.add(scroller);
+
+                return panel;
+        }
+
+        private void updatePreview(){
+                String family = familyField.getText();
+                int size;
+                try{
+                        size = Integer.parseInt(sizeField.getText());
+                }
+                catch(Exception e){
+                        size = 14;
+                }
+                int style = styleList.getSelectedIndex();
+                preview.setFont(new Font(family,style,size));
+        }
+
+        class ActionHandler implements ActionListener {
+                public void actionPerformed(ActionEvent evt){
+                        if(evt.getSource() == ok)ok();
+                        else if(evt.getSource() == cancel)cancel();
+                }
+        }
+
+        class ListHandler implements ListSelectionListener {
+                public void valueChanged(ListSelectionEvent evt)
+                {
+                        Object source = evt.getSource();
+                        if(source == familyList) {
+                                String family = (String)familyList.getSelectedValue();
+                                if(family != null)
+                                        familyField.setText(family);
+                        }
+                        else if(source == sizeList) {
+                                String size = (String)sizeList.getSelectedValue();
+                                if(size != null)
+                                        sizeField.setText(size);
+                        }
+                        else if(source == styleList) {
+                                String style = (String)styleList.getSelectedValue();
+                                if(style != null)
+                                        styleField.setText(style);
+                        }
+                        updatePreview();
+                }
+        }
+    /*public static void main(String args[])
+        {
+            Font font = new FontSelectorDialog(null,new Font("Times",Font.PLAIN,12)).getSelectedFont();
+
+        }
+    */
+}
diff --git a/src/java/net/sf/jabref/GUIGlobals.java b/src/java/net/sf/jabref/GUIGlobals.java
index f40c306..9b46a34 100644
--- a/src/java/net/sf/jabref/GUIGlobals.java
+++ b/src/java/net/sf/jabref/GUIGlobals.java
@@ -1,431 +1,432 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.*;
-
-import javax.swing.ImageIcon;
-import javax.swing.JLabel;
-
-import net.sf.jabref.specialfields.Priority;
-import net.sf.jabref.specialfields.Quality;
-import net.sf.jabref.specialfields.Rank;
-import net.sf.jabref.specialfields.Relevance;
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-
-/**
- * Static variables for graphics files and keyboard shortcuts.
- */
-public class GUIGlobals {
-
-	// Frame titles.
-	public static String
-	frameTitle = "JabRef",
-	version = Globals.VERSION,
-	stringsTitle = "Strings for database",
-	//untitledStringsTitle = stringsTitle + Globals.lang("untitled"),
-	untitledTitle = "untitled",
-	helpTitle = "JabRef help",
-	TYPE_HEADER = "entrytype",
-	NUMBER_COL = "#",
-	encPrefix = "Encoding: "; // Part of the signature in written bib files.
-
-	public static Font CURRENTFONT,
-	typeNameFont,
-	jabRefFont,
-	fieldNameFont;
-
-	// Signature written at the top of the .bib file.
-	public static final String SIGNATURE =
-		"This file was created with JabRef";
-
-	// Size of help window.
-	static Dimension
-	helpSize = new Dimension(700, 600),
-	aboutSize = new Dimension(600, 265),
-	searchPaneSize = new Dimension(430, 70),
-	searchFieldSize = new Dimension(215, 25);
-
-	// Divider size for BaseFrame split pane. 0 means non-resizable.
-	public static final int
-	SPLIT_PANE_DIVIDER_SIZE = 4,
-	SPLIT_PANE_DIVIDER_LOCATION = 145 + 15, // + 15 for possible scrollbar.
-	TABLE_ROW_PADDING = 4,
-	KEYBIND_COL_0 = 200,
-	KEYBIND_COL_1 = 80, // Added to the font size when determining table
-	MAX_CONTENT_SELECTOR_WIDTH = 240; // The max width of the combobox for content selectors.
-
-	// File names.
-	public static String //configFile = "preferences.dat",
-	backupExt = ".bak";
-
-	// Image paths.
-	public static String
-	imageSize = "24",
-	extension = ".gif",
-	ex = imageSize + extension,
-	pre = "/images/",
-	helpPre = "/help/",
-	fontPath = "/images/font/";
-	
-	static HashMap<String, JLabel> tableIcons = new HashMap<String, JLabel>(); // Contains table icon mappings. Set up
-	// further below.
-	public static Color activeEditor = new Color(230, 230, 255);
-
-	static HashMap<String, String> iconMap;
-
-	public static JLabel getTableIcon(String fieldType) {
-		Object o = tableIcons.get(fieldType);
-		if (o == null) {
-			Globals.logger("Error: no table icon defined for type '"+fieldType+"'.");
-			return null;
-		} else return (JLabel)o;
-	}
-	
-	//Help files (in HTML format):
-	public static final String
-	baseFrameHelp = "BaseFrameHelp.html",
-	entryEditorHelp = "EntryEditorHelp.html",
-	stringEditorHelp = "StringEditorHelp.html",
-	helpContents = "Contents.html",
-	searchHelp = "SearchHelp.html",
-	groupsHelp = "GroupsHelp.html",
-	customEntriesHelp = "CustomEntriesHelp.html",
-	contentSelectorHelp = "ContentSelectorHelp.html",
-	specialFieldsHelp = "SpecialFieldsHelp.html",
-	labelPatternHelp = "LabelPatterns.html",
-	ownerHelp = "OwnerHelp.html",
-	timeStampHelp = "TimeStampHelp.html",
-	pdfHelp = "ExternalFiles.html",
-	exportCustomizationHelp = "CustomExports.html",
-	importCustomizationHelp = "CustomImports.html",
-	medlineHelp = "MedlineHelp.html",
-	citeSeerHelp = "CiteSeerHelp.html",
-	generalFieldsHelp = "GeneralFields.html",
-	aboutPage = "About.html",
-	shortPlainImport="ShortPlainImport.html",
-	importInspectionHelp = "ImportInspectionDialog.html",
-	shortIntegrityCheck="ShortIntegrityCheck.html",
-	remoteHelp = "RemoteHelp.html",
-	journalAbbrHelp = "JournalAbbreviations.html",
-	regularExpressionSearchHelp = "ExternalFiles.html#RegularExpressionSearch",
-	nameFormatterHelp = "CustomExports.html#NameFormatter",
-	previewHelp = "PreviewHelp.html",
-    pluginHelp = "Plugin.html",
-    autosaveHelp = "Autosave.html";
-
-
-    //	Colors.
-	public static Color
-	lightGray = new Color(230, 30, 30), // Light gray background
-	entryEditorLabelColor = new Color(100, 100, 150), // Empty field, blue.
-	nullFieldColor = new Color(75, 130, 95), // Valid field, green.
-	gradientGray = new Color(112, 121, 165),  // Title bar gradient color, sidepaneheader
-	gradientBlue = new Color(0, 27, 102),  // Title bar gradient color, sidepaneheader
-	//activeTabbed = Color.black,  // active Database (JTabbedPane)
-	//inActiveTabbed = Color.gray.darker(),  // inactive Database
-	activeTabbed = entryEditorLabelColor.darker(),  // active Database (JTabbedPane)
-	inActiveTabbed = Color.black,  // inactive Database
-	infoField = new Color(254, 255, 225) // color for an info field
-	;
-
-    public static Color
-        editorTextColor = null, validFieldBackgroundColor = null,
-        activeBackground = null, invalidFieldBackgroundColor = null;
-
-	public static String META_FLAG = "jabref-meta: ";
-	public static String META_FLAG_OLD = "bibkeeper-meta: ";
-	public static String ENTRYTYPE_FLAG = "jabref-entrytype: ";
-
-	// some fieldname constants
-	public static final double
-	DEFAULT_FIELD_WEIGHT = 1,
-	MAX_FIELD_WEIGHT = 2;
-
-    // constants for editor types:
-    public static final int
-        STANDARD_EDITOR=1,
-        FILE_LIST_EDITOR=2;
-
-    public static final int MAX_BACK_HISTORY_SIZE = 10; // The maximum number of "Back" operations stored.
-
-    public static final String FILE_FIELD = "file";
-
-    public static final double
-	SMALL_W = 0.30,
-	MEDIUM_W = 0.5,
-	LARGE_W = 1.5 ;
-
-	public static final double PE_HEIGHT = 2;
-
-//	Size constants for EntryTypeForm; small, medium and large.
-	public static int[] FORM_WIDTH = new int[] { 500, 650, 820};
-	public static int[] FORM_HEIGHT = new int[] { 90, 110, 130};
-
-//	Constants controlling formatted bibtex output.
-	public static final int
-	INDENT = 4,
-	LINE_LENGTH = 65; // Maximum
-
-	public static int DEFAULT_FIELD_LENGTH = 100,
-	NUMBER_COL_LENGTH = 32,
-	WIDTH_ICON_COL_RANKING = 35,	// Width of Ranking Icon Column
-	WIDTH_ICON_COL = 19;
-
-	// Column widths for export customization dialog table:
-	public static final int
-	EXPORT_DIALOG_COL_0_WIDTH = 50,
-	EXPORT_DIALOG_COL_1_WIDTH = 200,
-	EXPORT_DIALOG_COL_2_WIDTH = 30;
-
-	// Column widths for import customization dialog table:
-	public static final int
-	IMPORT_DIALOG_COL_0_WIDTH = 200,
-	IMPORT_DIALOG_COL_1_WIDTH = 80,
-	IMPORT_DIALOG_COL_2_WIDTH = 200,
-	IMPORT_DIALOG_COL_3_WIDTH = 200;
-
-	public static final Map<String, String> LANGUAGES;
-
-	static {
-		LANGUAGES = new TreeMap<String, String>();
-
-		// LANGUAGES contains mappings for supported languages.
-		LANGUAGES.put("English", "en");
-		LANGUAGES.put("Dansk", "da");
-		LANGUAGES.put("Deutsch", "de");
-		LANGUAGES.put("Fran\u00E7ais", "fr");
-		LANGUAGES.put("Italiano", "it");
-		LANGUAGES.put("Japanese", "ja");
-		LANGUAGES.put("Nederlands", "nl");
-		LANGUAGES.put("Norsk", "no");
-		//LANGUAGES.put("Español", "es"); // Not complete
-		//LANGUAGES.put("Polski", "pl");
-		LANGUAGES.put("Turkish", "tr");
-		LANGUAGES.put("Simplified Chinese", "zh");
-		LANGUAGES.put("Vietnamese", "vi");
-		LANGUAGES.put("Bahasa Indonesia", "in");
-        LANGUAGES.put("Brazilian Portugese", "pt_BR");
-
-
-
-		// Set up entry editor colors, first time:
-		updateEntryEditorColors();
-	}
-
-    public static void updateEntryEditorColors() {
-        activeBackground = JabRefPreferences.getInstance().getColor("activeFieldEditorBackgroundColor");
-        validFieldBackgroundColor = JabRefPreferences.getInstance().getColor("validFieldBackgroundColor");
-        invalidFieldBackgroundColor = JabRefPreferences.getInstance().getColor("invalidFieldBackgroundColor");
-        editorTextColor = JabRefPreferences.getInstance().getColor("fieldEditorTextColor");
-    }
-	/**
-	 * Read either the default icon theme, or a custom one. If loading of the custom theme
-	 * fails, try to fall back on the default theme.
-	 */
-	public static void setUpIconTheme() {
-		String defaultPrefix = "/images/crystal_16/", prefix = defaultPrefix;
-
-		URL defaultResource = GUIGlobals.class.getResource(prefix+"Icons.properties");
-		URL resource = defaultResource;
-
-		if (Globals.prefs.getBoolean("useCustomIconTheme")) {
-			String filename = Globals.prefs.get("customIconThemeFile");
-			if (filename != null)
-				try {
-					File file = new File(filename);
-					String parent = file.getParentFile().getAbsolutePath();
-					prefix = "file://"+parent+System.getProperty("file.separator");
-					resource = new URL("file://"+file.getAbsolutePath());
-				} catch (MalformedURLException e) {
-					e.printStackTrace();
-				}
-		}
-		try {
-			iconMap = readIconThemeFile(resource, prefix);
-		} catch (IOException e) {
-			System.err.println(Globals.lang("Unable to read icon theme file")+" '"+
-				resource.toString()+"'");
-			// If we were trying to load a custom theme, try the default one as a fallback:
-			if (resource != defaultResource)
-				try {
-					iconMap = readIconThemeFile(defaultResource, defaultPrefix);
-				} catch (IOException e2) {
-					System.err.println(Globals.lang("Unable to read default icon theme."));
-				}
-
-		}
-
-
-	}
-
-	/**
-	 * Looks up the URL for the image representing the given function, in the resource
-	 * file listing images.
-	 * @param name The name of the icon, such as "open", "save", "saveAs" etc.
-	 * @return The URL to the actual image to use.
-	 */
-	public static URL getIconUrl(String name) {
-        if (iconMap.containsKey(name)) {
-			String path = iconMap.get(name);
-			URL url = GUIGlobals.class.getResource(path);
-			if (url == null)
-				// This may be a resource outside of the jar file, so we try a general URL:
-				try {
-					url = new URL(path);
-				} catch (MalformedURLException e) {
-				}
-				if (url == null)
-					System.err.println(Globals.lang("Could not find image file")+" '"+path+"'");
-				return url;
-		}
-		else return null;
-	}
-
-	/**
-	 * Constructs an ImageIcon for the given function, using the image specified in
-	 * the resource files resource/Icons_en.properties.
-	 * @param name The name of the icon, such as "open", "save", "saveAs" etc.
-	 * @return The ImageIcon for the function.
-	 */
-	public static ImageIcon getImage(String name) {
-		URL u = getIconUrl(name);
-		return u != null ? new ImageIcon(getIconUrl(name)) : null;
-	}
-
-    /**
-     * Get a Map of all application icons mapped from their keys.
-     * @return A Map containing all icons used in the application.
-     */
-    public static Map<String, String> getAllIcons() {
-        return Collections.unmodifiableMap(iconMap);
-    }
-                       
-    /**
-	 * Read a typical java property file into a HashMap. Currently doesn't support escaping
-	 * of the '=' character - it simply looks for the first '=' to determine where the key ends.
-	 * Both the key and the value is trimmed for whitespace at the ends.
-	 * @param file The URL to read information from.
-	 * @param prefix A String to prefix to all values read. Can represent e.g. the directory
-	 * where icon files are to be found.
-	 * @return A HashMap containing all key-value pairs found.
-	 * @throws IOException
-	 */
-	private static HashMap<String, String> readIconThemeFile(URL file, String prefix) throws IOException {
-		HashMap<String, String> map = new HashMap<String, String>();
-		InputStream in = null;
-		try {
-			in = file.openStream();
-			StringBuffer buffer = new StringBuffer();
-			int c;
-			while ((c = in.read()) != -1)
-				buffer.append((char)c);
-			String[] lines = buffer.toString().split("\n");
-			for (int i=0; i<lines.length; i++) {
-				String line = lines[i].trim();
-				int index = line.indexOf("=");
-				if (index >= 0) {
-					String key = line.substring(0, index).trim();
-					String value = prefix+line.substring(index+1).trim();
-					map.put(key, value);
-				}
-			}
-		} catch (IOException ex) {
-			throw ex;
-		} finally {
-			try {
-				if (in != null) in.close();
-			} catch (IOException ex) {
-				ex.printStackTrace();
-			}
-		}
-		return map;
-	}
-
-	/** returns the path to language independent help files */
-	public static String getLocaleHelpPath()
-	{
-		JabRefPreferences prefs = JabRefPreferences.getInstance() ;
-		String middle = prefs.get("language")+"/";
-		if (middle.equals("en/")) middle = ""; // english in base help dir.
-
-		return (helpPre + middle );
-	}
-
-
-	/**
-	 * Perform initializations that are only used in graphical mode. This is to prevent
-	 * the "Xlib: connection to ":0.0" refused by server" error when access to the X server
-	 * on Un*x is unavailable.
-	 */
-	public static void init() {
-		typeNameFont = new Font("arial", Font.ITALIC+Font.BOLD, 24);
-		fieldNameFont = new Font("arial", Font.ITALIC+Font.BOLD, 14);
-		JLabel lab;
-		lab = new JLabel(getImage("pdfSmall"));
-		lab.setToolTipText(Globals.lang("Open")+" PDF");
-		tableIcons.put("pdf", lab);
-		lab = new JLabel(getImage("wwwSmall"));
-		lab.setToolTipText(Globals.lang("Open")+" URL");
-		tableIcons.put("url", lab);
-		lab = new JLabel(getImage("citeseer"));
-		lab.setToolTipText(Globals.lang("Open")+" CiteSeer URL");
-		tableIcons.put("citeseerurl", lab);
-		lab = new JLabel(getImage("arxiv"));
-		lab.setToolTipText(Globals.lang("Open")+" ArXiv URL");
-		tableIcons.put("eprint", lab);
-		lab = new JLabel(getImage("doiSmall"));
-		lab.setToolTipText(Globals.lang("Open")+" DOI "+Globals.lang("web link"));
-		tableIcons.put("doi", lab);
-		lab = new JLabel(getImage("psSmall"));
-		lab.setToolTipText(Globals.lang("Open")+" PS");
-		tableIcons.put("ps", lab);
-        lab = new JLabel(getImage("psSmall"));
-        lab.setToolTipText(Globals.lang("Open file"));
-        tableIcons.put(GUIGlobals.FILE_FIELD, lab);
-        
-        lab = new JLabel(Relevance.getInstance().getRepresentingIcon());
-        lab.setToolTipText(Relevance.getInstance().getToolTip());
-        tableIcons.put(SpecialFieldsUtils.FIELDNAME_RELEVANCE, lab);
-        
-        lab = new JLabel(Quality.getInstance().getRepresentingIcon());
-        lab.setToolTipText(Quality.getInstance().getToolTip());
-        //tableIcons.put("quality", lab);
-        tableIcons.put(SpecialFieldsUtils.FIELDNAME_QUALITY, lab);
-        
-        // Ranking item in the menu uses one star
-        lab = new JLabel(Rank.getInstance().getRepresentingIcon());
-        lab.setToolTipText(Rank.getInstance().getToolTip());
-//        lab.setName("0");
-        tableIcons.put(SpecialFieldsUtils.FIELDNAME_RANKING, lab);	
-
-        // Priority icon used for the menu
-        lab = new JLabel(Priority.getInstance().getRepresentingIcon());
-        lab.setToolTipText(Rank.getInstance().getToolTip());
-        tableIcons.put(SpecialFieldsUtils.FIELDNAME_PRIORITY, lab);
-        
-        //jabRefFont = new Font("arial", Font.ITALIC/*+Font.BOLD*/, 20); 
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.*;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+
+import net.sf.jabref.specialfields.Priority;
+import net.sf.jabref.specialfields.Quality;
+import net.sf.jabref.specialfields.Rank;
+import net.sf.jabref.specialfields.Relevance;
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+
+/**
+ * Static variables for graphics files and keyboard shortcuts.
+ */
+public class GUIGlobals {
+
+	// Frame titles.
+	public static String
+	frameTitle = "JabRef",
+	version = Globals.VERSION,
+	stringsTitle = "Strings for database",
+	//untitledStringsTitle = stringsTitle + Globals.lang("untitled"),
+	untitledTitle = "untitled",
+	helpTitle = "JabRef help",
+	TYPE_HEADER = "entrytype",
+	NUMBER_COL = "#",
+	encPrefix = "Encoding: "; // Part of the signature in written bib files.
+
+	public static Font CURRENTFONT,
+	typeNameFont,
+	jabRefFont,
+	fieldNameFont;
+
+	// Signature written at the top of the .bib file.
+	public static final String SIGNATURE =
+		"This file was created with JabRef";
+
+	// Size of help window.
+	public static final Dimension
+	helpSize = new Dimension(700, 600),
+	aboutSize = new Dimension(600, 265),
+	searchPaneSize = new Dimension(430, 70),
+	searchFieldSize = new Dimension(215, 25);
+	public static Double zoomLevel = new Double(1.0);
+
+	// Divider size for BaseFrame split pane. 0 means non-resizable.
+	public static final int
+	SPLIT_PANE_DIVIDER_SIZE = 4,
+	SPLIT_PANE_DIVIDER_LOCATION = 145 + 15, // + 15 for possible scrollbar.
+	TABLE_ROW_PADDING = 4,
+	KEYBIND_COL_0 = 200,
+	KEYBIND_COL_1 = 80, // Added to the font size when determining table
+	MAX_CONTENT_SELECTOR_WIDTH = 240; // The max width of the combobox for content selectors.
+
+	// File names.
+	public static String //configFile = "preferences.dat",
+	backupExt = ".bak";
+
+	// Image paths.
+	public static String
+	imageSize = "24",
+	extension = ".gif",
+	ex = imageSize + extension,
+	pre = "/images/",
+	helpPre = "/help/",
+	fontPath = "/images/font/";
+	
+	static HashMap<String, JLabel> tableIcons = new HashMap<String, JLabel>(); // Contains table icon mappings. Set up
+	// further below.
+	public static Color activeEditor = new Color(230, 230, 255);
+
+	static HashMap<String, String> iconMap;
+
+	public static JLabel getTableIcon(String fieldType) {
+		Object o = tableIcons.get(fieldType);
+		if (o == null) {
+			Globals.logger("Error: no table icon defined for type '"+fieldType+"'.");
+			return null;
+		} else return (JLabel)o;
+	}
+	
+	//Help files (in HTML format):
+	public static final String
+	baseFrameHelp = "BaseFrameHelp.html",
+	entryEditorHelp = "EntryEditorHelp.html",
+	stringEditorHelp = "StringEditorHelp.html",
+	helpContents = "Contents.html",
+	searchHelp = "SearchHelp.html",
+	groupsHelp = "GroupsHelp.html",
+	customEntriesHelp = "CustomEntriesHelp.html",
+	contentSelectorHelp = "ContentSelectorHelp.html",
+	specialFieldsHelp = "SpecialFieldsHelp.html",
+	labelPatternHelp = "LabelPatterns.html",
+	ownerHelp = "OwnerHelp.html",
+	timeStampHelp = "TimeStampHelp.html",
+	pdfHelp = "ExternalFiles.html",
+	exportCustomizationHelp = "CustomExports.html",
+	importCustomizationHelp = "CustomImports.html",
+	medlineHelp = "MedlineHelp.html",
+	citeSeerHelp = "CiteSeerHelp.html",
+	generalFieldsHelp = "GeneralFields.html",
+	aboutPage = "About.html",
+	shortPlainImport="ShortPlainImport.html",
+	importInspectionHelp = "ImportInspectionDialog.html",
+	shortIntegrityCheck="ShortIntegrityCheck.html",
+	remoteHelp = "RemoteHelp.html",
+	journalAbbrHelp = "JournalAbbreviations.html",
+	regularExpressionSearchHelp = "ExternalFiles.html#RegularExpressionSearch",
+	nameFormatterHelp = "CustomExports.html#NameFormatter",
+	previewHelp = "PreviewHelp.html",
+    pluginHelp = "Plugin.html",
+    autosaveHelp = "Autosave.html";
+
+
+    //	Colors.
+	public static Color
+	lightGray = new Color(230, 30, 30), // Light gray background
+	entryEditorLabelColor = new Color(100, 100, 150), // Empty field, blue.
+	nullFieldColor = new Color(75, 130, 95), // Valid field, green.
+	gradientGray = new Color(112, 121, 165),  // Title bar gradient color, sidepaneheader
+	gradientBlue = new Color(0, 27, 102),  // Title bar gradient color, sidepaneheader
+	//activeTabbed = Color.black,  // active Database (JTabbedPane)
+	//inActiveTabbed = Color.gray.darker(),  // inactive Database
+	activeTabbed = entryEditorLabelColor.darker(),  // active Database (JTabbedPane)
+	inActiveTabbed = Color.black,  // inactive Database
+	infoField = new Color(254, 255, 225) // color for an info field
+	;
+
+    public static Color
+        editorTextColor = null, validFieldBackgroundColor = null,
+        activeBackground = null, invalidFieldBackgroundColor = null;
+
+	public static String META_FLAG = "jabref-meta: ";
+	public static String META_FLAG_OLD = "bibkeeper-meta: ";
+	public static String ENTRYTYPE_FLAG = "jabref-entrytype: ";
+
+	// some fieldname constants
+	public static final double
+	DEFAULT_FIELD_WEIGHT = 1,
+	MAX_FIELD_WEIGHT = 2;
+
+    // constants for editor types:
+    public static final int
+        STANDARD_EDITOR=1,
+        FILE_LIST_EDITOR=2;
+
+    public static final int MAX_BACK_HISTORY_SIZE = 10; // The maximum number of "Back" operations stored.
+
+    public static final String FILE_FIELD = "file";
+
+    public static final double
+	SMALL_W = 0.30,
+	MEDIUM_W = 0.5,
+	LARGE_W = 1.5 ;
+
+	public static final double PE_HEIGHT = 2;
+
+//	Size constants for EntryTypeForm; small, medium and large.
+	public static int[] FORM_WIDTH = new int[] { 500, 650, 820};
+	public static int[] FORM_HEIGHT = new int[] { 90, 110, 130};
+
+//	Constants controlling formatted bibtex output.
+	public static final int
+	INDENT = 4,
+	LINE_LENGTH = 65; // Maximum
+
+	public static int DEFAULT_FIELD_LENGTH = 100,
+	NUMBER_COL_LENGTH = 32,
+	WIDTH_ICON_COL_RANKING = 35,	// Width of Ranking Icon Column
+	WIDTH_ICON_COL = 19;
+
+	// Column widths for export customization dialog table:
+	public static final int
+	EXPORT_DIALOG_COL_0_WIDTH = 50,
+	EXPORT_DIALOG_COL_1_WIDTH = 200,
+	EXPORT_DIALOG_COL_2_WIDTH = 30;
+
+	// Column widths for import customization dialog table:
+	public static final int
+	IMPORT_DIALOG_COL_0_WIDTH = 200,
+	IMPORT_DIALOG_COL_1_WIDTH = 80,
+	IMPORT_DIALOG_COL_2_WIDTH = 200,
+	IMPORT_DIALOG_COL_3_WIDTH = 200;
+
+	public static final Map<String, String> LANGUAGES;
+
+	static {
+		LANGUAGES = new TreeMap<String, String>();
+
+		// LANGUAGES contains mappings for supported languages.
+		LANGUAGES.put("English", "en");
+		LANGUAGES.put("Dansk", "da");
+		LANGUAGES.put("Deutsch", "de");
+		LANGUAGES.put("Fran\u00E7ais", "fr");
+		LANGUAGES.put("Italiano", "it");
+		LANGUAGES.put("Japanese", "ja");
+		LANGUAGES.put("Nederlands", "nl");
+		LANGUAGES.put("Norsk", "no");
+		//LANGUAGES.put("Español", "es"); // Not complete
+		//LANGUAGES.put("Polski", "pl");
+		LANGUAGES.put("Turkish", "tr");
+		LANGUAGES.put("Simplified Chinese", "zh");
+		LANGUAGES.put("Vietnamese", "vi");
+		LANGUAGES.put("Bahasa Indonesia", "in");
+        LANGUAGES.put("Brazilian Portugese", "pt_BR");
+
+
+
+		// Set up entry editor colors, first time:
+		updateEntryEditorColors();
+	}
+
+    public static void updateEntryEditorColors() {
+        activeBackground = JabRefPreferences.getInstance().getColor("activeFieldEditorBackgroundColor");
+        validFieldBackgroundColor = JabRefPreferences.getInstance().getColor("validFieldBackgroundColor");
+        invalidFieldBackgroundColor = JabRefPreferences.getInstance().getColor("invalidFieldBackgroundColor");
+        editorTextColor = JabRefPreferences.getInstance().getColor("fieldEditorTextColor");
+    }
+	/**
+	 * Read either the default icon theme, or a custom one. If loading of the custom theme
+	 * fails, try to fall back on the default theme.
+	 */
+	public static void setUpIconTheme() {
+		String defaultPrefix = "/images/crystal_16/", prefix = defaultPrefix;
+
+		URL defaultResource = GUIGlobals.class.getResource(prefix+"Icons.properties");
+		URL resource = defaultResource;
+
+		if (Globals.prefs.getBoolean("useCustomIconTheme")) {
+			String filename = Globals.prefs.get("customIconThemeFile");
+			if (filename != null)
+				try {
+					File file = new File(filename);
+					String parent = file.getParentFile().getAbsolutePath();
+					prefix = "file://"+parent+System.getProperty("file.separator");
+					resource = new URL("file://"+file.getAbsolutePath());
+				} catch (MalformedURLException e) {
+					e.printStackTrace();
+				}
+		}
+		try {
+			iconMap = readIconThemeFile(resource, prefix);
+		} catch (IOException e) {
+			System.err.println(Globals.lang("Unable to read icon theme file")+" '"+
+				resource.toString()+"'");
+			// If we were trying to load a custom theme, try the default one as a fallback:
+			if (resource != defaultResource)
+				try {
+					iconMap = readIconThemeFile(defaultResource, defaultPrefix);
+				} catch (IOException e2) {
+					System.err.println(Globals.lang("Unable to read default icon theme."));
+				}
+
+		}
+
+
+	}
+
+	/**
+	 * Looks up the URL for the image representing the given function, in the resource
+	 * file listing images.
+	 * @param name The name of the icon, such as "open", "save", "saveAs" etc.
+	 * @return The URL to the actual image to use.
+	 */
+	public static URL getIconUrl(String name) {
+        if (iconMap.containsKey(name)) {
+			String path = iconMap.get(name);
+			URL url = GUIGlobals.class.getResource(path);
+			if (url == null)
+				// This may be a resource outside of the jar file, so we try a general URL:
+				try {
+					url = new URL(path);
+				} catch (MalformedURLException e) {
+				}
+				if (url == null)
+					System.err.println(Globals.lang("Could not find image file")+" '"+path+"'");
+				return url;
+		}
+		else return null;
+	}
+
+	/**
+	 * Constructs an ImageIcon for the given function, using the image specified in
+	 * the resource files resource/Icons_en.properties.
+	 * @param name The name of the icon, such as "open", "save", "saveAs" etc.
+	 * @return The ImageIcon for the function.
+	 */
+	public static ImageIcon getImage(String name) {
+		URL u = getIconUrl(name);
+		return u != null ? new ImageIcon(getIconUrl(name)) : null;
+	}
+
+    /**
+     * Get a Map of all application icons mapped from their keys.
+     * @return A Map containing all icons used in the application.
+     */
+    public static Map<String, String> getAllIcons() {
+        return Collections.unmodifiableMap(iconMap);
+    }
+                       
+    /**
+	 * Read a typical java property file into a HashMap. Currently doesn't support escaping
+	 * of the '=' character - it simply looks for the first '=' to determine where the key ends.
+	 * Both the key and the value is trimmed for whitespace at the ends.
+	 * @param file The URL to read information from.
+	 * @param prefix A String to prefix to all values read. Can represent e.g. the directory
+	 * where icon files are to be found.
+	 * @return A HashMap containing all key-value pairs found.
+	 * @throws IOException
+	 */
+	private static HashMap<String, String> readIconThemeFile(URL file, String prefix) throws IOException {
+		HashMap<String, String> map = new HashMap<String, String>();
+		InputStream in = null;
+		try {
+			in = file.openStream();
+			StringBuffer buffer = new StringBuffer();
+			int c;
+			while ((c = in.read()) != -1)
+				buffer.append((char)c);
+			String[] lines = buffer.toString().split("\n");
+			for (int i=0; i<lines.length; i++) {
+				String line = lines[i].trim();
+				int index = line.indexOf("=");
+				if (index >= 0) {
+					String key = line.substring(0, index).trim();
+					String value = prefix+line.substring(index+1).trim();
+					map.put(key, value);
+				}
+			}
+		} catch (IOException ex) {
+			throw ex;
+		} finally {
+			try {
+				if (in != null) in.close();
+			} catch (IOException ex) {
+				ex.printStackTrace();
+			}
+		}
+		return map;
+	}
+
+	/** returns the path to language independent help files */
+	public static String getLocaleHelpPath()
+	{
+		JabRefPreferences prefs = JabRefPreferences.getInstance() ;
+		String middle = prefs.get("language")+"/";
+		if (middle.equals("en/")) middle = ""; // english in base help dir.
+
+		return (helpPre + middle );
+	}
+
+
+	/**
+	 * Perform initializations that are only used in graphical mode. This is to prevent
+	 * the "Xlib: connection to ":0.0" refused by server" error when access to the X server
+	 * on Un*x is unavailable.
+	 */
+	public static void init() {
+		typeNameFont = new Font("arial", Font.ITALIC+Font.BOLD, 24);
+		fieldNameFont = new Font("arial", Font.ITALIC+Font.BOLD, 14);
+		JLabel lab;
+		lab = new JLabel(getImage("pdfSmall"));
+		lab.setToolTipText(Globals.lang("Open")+" PDF");
+		tableIcons.put("pdf", lab);
+		lab = new JLabel(getImage("wwwSmall"));
+		lab.setToolTipText(Globals.lang("Open")+" URL");
+		tableIcons.put("url", lab);
+		lab = new JLabel(getImage("citeseer"));
+		lab.setToolTipText(Globals.lang("Open")+" CiteSeer URL");
+		tableIcons.put("citeseerurl", lab);
+		lab = new JLabel(getImage("arxiv"));
+		lab.setToolTipText(Globals.lang("Open")+" ArXiv URL");
+		tableIcons.put("eprint", lab);
+		lab = new JLabel(getImage("doiSmall"));
+		lab.setToolTipText(Globals.lang("Open")+" DOI "+Globals.lang("web link"));
+		tableIcons.put("doi", lab);
+		lab = new JLabel(getImage("psSmall"));
+		lab.setToolTipText(Globals.lang("Open")+" PS");
+		tableIcons.put("ps", lab);
+        lab = new JLabel(getImage("psSmall"));
+        lab.setToolTipText(Globals.lang("Open file"));
+        tableIcons.put(GUIGlobals.FILE_FIELD, lab);
+        
+        lab = new JLabel(Relevance.getInstance().getRepresentingIcon());
+        lab.setToolTipText(Relevance.getInstance().getToolTip());
+        tableIcons.put(SpecialFieldsUtils.FIELDNAME_RELEVANCE, lab);
+        
+        lab = new JLabel(Quality.getInstance().getRepresentingIcon());
+        lab.setToolTipText(Quality.getInstance().getToolTip());
+        //tableIcons.put("quality", lab);
+        tableIcons.put(SpecialFieldsUtils.FIELDNAME_QUALITY, lab);
+        
+        // Ranking item in the menu uses one star
+        lab = new JLabel(Rank.getInstance().getRepresentingIcon());
+        lab.setToolTipText(Rank.getInstance().getToolTip());
+//        lab.setName("0");
+        tableIcons.put(SpecialFieldsUtils.FIELDNAME_RANKING, lab);	
+
+        // Priority icon used for the menu
+        lab = new JLabel(Priority.getInstance().getRepresentingIcon());
+        lab.setToolTipText(Rank.getInstance().getToolTip());
+        tableIcons.put(SpecialFieldsUtils.FIELDNAME_PRIORITY, lab);
+        
+        //jabRefFont = new Font("arial", Font.ITALIC/*+Font.BOLD*/, 20); 
+	}
+
+}
diff --git a/src/java/net/sf/jabref/GeneralRenderer.java b/src/java/net/sf/jabref/GeneralRenderer.java
index be7f1f9..46f780c 100644
--- a/src/java/net/sf/jabref/GeneralRenderer.java
+++ b/src/java/net/sf/jabref/GeneralRenderer.java
@@ -1,120 +1,120 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.*;
-
-import javax.swing.*;
-import javax.swing.table.DefaultTableCellRenderer;
-
-/**
- * Renderer for table cells, which supports both Icons, JLabels and plain text.
- */
-public class GeneralRenderer /*extends JTable implements TableCellRenderer {*/ extends DefaultTableCellRenderer {
-
-    Color background, selBackground = null;
-
-    public GeneralRenderer(Color c) {
-        super();
-        this.background = c;
-        setBackground(c);
-    }
-
-
-    /**
-     * Renderer with specified foreground and background colors, and default selected
-     * background color.
-     * @param c Foreground color
-     * @param fg Background color
-     */
-    public GeneralRenderer(Color c, Color fg) {
-        this(c);
-        this.background = c;
-        setForeground(fg);
-    }
-
-    /**
-     * Renderer with specified foreground, background and selected background colors
-     * @param c Foreground color
-     * @param fg Unselected background color
-     * @param sel Selected background color
-     */
-    public GeneralRenderer(Color c, Color fg, Color sel) {
-        this(c);
-        this.background = c;
-        setForeground(fg);
-        this.selBackground = sel;
-    }
-
-    public Component getTableCellRendererComponent(JTable table, Object o, boolean isSelected,
-                                                   boolean hasFocus, int row, int column) {
-        if (selBackground == null)
-            return super.getTableCellRendererComponent(table, o, isSelected, hasFocus, row, column);
-        else {
-            Component c = super.getTableCellRendererComponent(table, o, isSelected, hasFocus, row, column);
-            if (isSelected)
-                c.setBackground(selBackground);
-            else
-                c.setBackground(background);
-            return c;
-        }
-    }
-
-    public void firePropertyChange(String propertyName, boolean old, boolean newV) {}
-    public void firePropertyChange(String propertyName, Object old, Object newV) {}
-
-    /* For enabling the renderer to handle icons. */
-    protected void setValue(Object value) {
-        //System.out.println(""+value);
-        if (value instanceof Icon) {
-            setIcon((Icon)value);
-            setText(null);
-            //super.setValue(null);
-        } else if (value instanceof JLabel) {
-          JLabel lab = (JLabel)value;
-          setIcon(lab.getIcon());
-          //table.setToolTipText(lab.getToolTipText());
-          setToolTipText(lab.getToolTipText());
-          if (lab.getIcon() != null)
-            setText(null);
-        } else {
-
-            setIcon(null);
-            //table.setToolTipText(null);
-            setToolTipText(null);
-            if (value != null)
-                setText(value.toString());
-            else
-                setText(null);
-        }
-    }
-
-    /*  public void paint(Graphics g) {
-        Graphics2D g2 = (Graphics2D)g;
-        //System.out.println(antialiasing);
-        if (antialiasing) {
-            RenderingHints rh = g2.getRenderingHints();
-            rh.put(RenderingHints.KEY_ANTIALIASING,
-                RenderingHints.VALUE_ANTIALIAS_ON);
-            rh.put(RenderingHints.KEY_RENDERING,
-                RenderingHints.VALUE_RENDER_QUALITY);
-            g2.setRenderingHints(rh);
-        }
-          super.paint(g2);
-
-    }*/
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.*;
+
+import javax.swing.*;
+import javax.swing.table.DefaultTableCellRenderer;
+
+/**
+ * Renderer for table cells, which supports both Icons, JLabels and plain text.
+ */
+public class GeneralRenderer /*extends JTable implements TableCellRenderer {*/ extends DefaultTableCellRenderer {
+
+    Color background, selBackground = null;
+
+    public GeneralRenderer(Color c) {
+        super();
+        this.background = c;
+        setBackground(c);
+    }
+
+
+    /**
+     * Renderer with specified foreground and background colors, and default selected
+     * background color.
+     * @param c Foreground color
+     * @param fg Background color
+     */
+    public GeneralRenderer(Color c, Color fg) {
+        this(c);
+        this.background = c;
+        setForeground(fg);
+    }
+
+    /**
+     * Renderer with specified foreground, background and selected background colors
+     * @param c Foreground color
+     * @param fg Unselected background color
+     * @param sel Selected background color
+     */
+    public GeneralRenderer(Color c, Color fg, Color sel) {
+        this(c);
+        this.background = c;
+        setForeground(fg);
+        this.selBackground = sel;
+    }
+
+    public Component getTableCellRendererComponent(JTable table, Object o, boolean isSelected,
+                                                   boolean hasFocus, int row, int column) {
+        if (selBackground == null)
+            return super.getTableCellRendererComponent(table, o, isSelected, hasFocus, row, column);
+        else {
+            Component c = super.getTableCellRendererComponent(table, o, isSelected, hasFocus, row, column);
+            if (isSelected)
+                c.setBackground(selBackground);
+            else
+                c.setBackground(background);
+            return c;
+        }
+    }
+
+    public void firePropertyChange(String propertyName, boolean old, boolean newV) {}
+    public void firePropertyChange(String propertyName, Object old, Object newV) {}
+
+    /* For enabling the renderer to handle icons. */
+    protected void setValue(Object value) {
+        //System.out.println(""+value);
+        if (value instanceof Icon) {
+            setIcon((Icon)value);
+            setText(null);
+            //super.setValue(null);
+        } else if (value instanceof JLabel) {
+          JLabel lab = (JLabel)value;
+          setIcon(lab.getIcon());
+          //table.setToolTipText(lab.getToolTipText());
+          setToolTipText(lab.getToolTipText());
+          if (lab.getIcon() != null)
+            setText(null);
+        } else {
+
+            setIcon(null);
+            //table.setToolTipText(null);
+            setToolTipText(null);
+            if (value != null)
+                setText(value.toString());
+            else
+                setText(null);
+        }
+    }
+
+    /*  public void paint(Graphics g) {
+        Graphics2D g2 = (Graphics2D)g;
+        //System.out.println(antialiasing);
+        if (antialiasing) {
+            RenderingHints rh = g2.getRenderingHints();
+            rh.put(RenderingHints.KEY_ANTIALIASING,
+                RenderingHints.VALUE_ANTIALIAS_ON);
+            rh.put(RenderingHints.KEY_RENDERING,
+                RenderingHints.VALUE_RENDER_QUALITY);
+            g2.setRenderingHints(rh);
+        }
+          super.paint(g2);
+
+    }*/
+
+}
diff --git a/src/java/net/sf/jabref/GeneralTab.java b/src/java/net/sf/jabref/GeneralTab.java
index c2c8edf..f930b18 100644
--- a/src/java/net/sf/jabref/GeneralTab.java
+++ b/src/java/net/sf/jabref/GeneralTab.java
@@ -1,286 +1,288 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.Insets;
-import java.text.SimpleDateFormat;
-
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-public class GeneralTab extends JPanel implements PrefsTab {
-
-    private JCheckBox
-    defSort, ctrlClick, useOwner, overwriteOwner,
-    keyDuplicateWarningDialog, keyEmptyWarningDialog, enforceLegalKeys,
-    confirmDelete, allowEditing, memoryStick, useImportInspector,
-    useImportInspectorForSingle, inspectionWarnDupli, useTimeStamp, overwriteTimeStamp,
-    markImportedEntries, unmarkAllEntriesBeforeImporting;
-
-    private JTextField defOwnerField, timeStampFormat, timeStampField;
-    JabRefPreferences _prefs;
-    JabRefFrame _frame;
-    private JComboBox language = new JComboBox(GUIGlobals.LANGUAGES.keySet().toArray()),
-    encodings = new JComboBox(Globals.ENCODINGS);
-    private HelpAction ownerHelp, timeStampHelp;
-
-    public GeneralTab(JabRefFrame frame, JabRefPreferences prefs) {
-        _prefs = prefs;
-        _frame = frame;
-        setLayout(new BorderLayout());
-
-
-        allowEditing = new JCheckBox(Globals.lang("Allow editing in table cells"));
-
-        memoryStick = new JCheckBox(Globals.lang("Load and Save preferences from/to jabref.xml on start-up (memory stick mode)"));
-        defSort = new JCheckBox(Globals.lang("Sort Automatically"));
-        ctrlClick = new JCheckBox(Globals.lang("Open right-click menu with Ctrl+left button"));
-        useOwner = new JCheckBox(Globals.lang("Mark new entries with owner name") + ":");
-        useTimeStamp = new JCheckBox(Globals.lang("Mark new entries with addition date") + ". "
-            +Globals.lang("Date format")+ ":");
-        overwriteOwner = new JCheckBox(Globals.lang("Overwrite"));
-        overwriteTimeStamp = new JCheckBox(Globals.lang("Overwrite"));
-        overwriteOwner.setToolTipText(Globals.lang("If a pasted or imported entry already has "
-            +"the field set, overwrite."));
-        overwriteTimeStamp.setToolTipText(Globals.lang("If a pasted or imported entry already has "
-            +"the field set, overwrite."));
-        keyDuplicateWarningDialog = new JCheckBox(Globals.lang("Show warning dialog when a duplicate BibTeX key is entered"));
-        keyEmptyWarningDialog = new JCheckBox(Globals.lang("Show warning dialog when an empty BibTeX key is entered")); // JZTODO lyrics
-        enforceLegalKeys = new JCheckBox(Globals.lang("Enforce legal characters in BibTeX keys"));
-        confirmDelete = new JCheckBox(Globals.lang("Show confirmation dialog when deleting entries"));
-
-        useImportInspector = new JCheckBox(Globals.lang("Display imported entries in an inspection window before they are added."));
-        useImportInspectorForSingle = new JCheckBox(Globals.lang("Use inspection window also when a single entry is imported."));
-        markImportedEntries = new JCheckBox(Globals.lang("Mark entries imported into an existing database"));
-        unmarkAllEntriesBeforeImporting = new JCheckBox(Globals.lang("Unmark all entries before importing new entries into an existing database"));
-        defOwnerField = new JTextField();
-        timeStampFormat = new JTextField();
-        timeStampField = new JTextField();
-        ownerHelp = new HelpAction(frame.helpDiag, GUIGlobals.ownerHelp,
-                "Help", GUIGlobals.getIconUrl("helpSmall"));
-        timeStampHelp = new HelpAction(frame.helpDiag, GUIGlobals.timeStampHelp, "Help",
-                GUIGlobals.getIconUrl("helpSmall"));
-        inspectionWarnDupli = new JCheckBox(Globals.lang("Warn about unresolved duplicates when closing inspection window"));
-
-        Insets marg = new Insets(0,12,3,0);
-        useImportInspectorForSingle.setMargin(marg);
-        inspectionWarnDupli.setMargin(marg);
-
-        
-        // We need a listener on useImportInspector to enable and disable the
-        // import inspector related choices;
-        useImportInspector.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent event) {
-                useImportInspectorForSingle.setEnabled(useImportInspector.isSelected());
-                inspectionWarnDupli.setEnabled(useImportInspector.isSelected());
-            }
-        });
-
-        FormLayout layout = new FormLayout
-                ("8dlu, 1dlu, left:170dlu, 4dlu, fill:pref, 4dlu, fill:pref, 4dlu, left:pref, 4dlu, left:pref, 4dlu, left:pref", "");
-        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-
-
-
-        builder.appendSeparator(Globals.lang("General"));
-        builder.nextLine();
-        builder.append(useImportInspector, 13);
-        builder.nextLine();
-        builder.append(new JPanel());
-        builder.append(useImportInspectorForSingle, 11);
-        builder.nextLine();
-        builder.append(new JPanel());
-        builder.append(inspectionWarnDupli, 11);
-        builder.nextLine();
-        builder.append(ctrlClick, 13);
-        builder.nextLine();
-        builder.append(confirmDelete, 13);
-        builder.nextLine();
-        builder.append(keyDuplicateWarningDialog, 13);
-        builder.nextLine();
-        builder.append(keyEmptyWarningDialog, 13);
-        builder.nextLine();
-        builder.append(enforceLegalKeys, 13);
-        builder.nextLine();
-        builder.append(memoryStick, 13);
-        
-        // Create a new panel with its own FormLayout for the last items:
-        builder.append(useOwner, 3);
-        builder.append(defOwnerField);
-        builder.append(overwriteOwner);
-        builder.append(new JPanel(), 3);
-        
-        JButton hlp = new JButton(ownerHelp);
-        hlp.setText(null);
-        hlp.setPreferredSize(new Dimension(24, 24));
-        builder.append(hlp);
-        builder.nextLine();
-
-        builder.append(useTimeStamp, 3);
-        builder.append(timeStampFormat);
-        builder.append(overwriteTimeStamp);
-        builder.append(Globals.lang("Field name")+":");
-        builder.append(timeStampField);
-
-        hlp = new JButton(timeStampHelp);
-        hlp.setText(null);
-        hlp.setPreferredSize(new Dimension(24, 24));
-        builder.append(hlp);
-        builder.nextLine();
-
-        builder.append(markImportedEntries, 13);
-        builder.nextLine();
-        builder.append(unmarkAllEntriesBeforeImporting, 13);
-        builder.nextLine();
-        JLabel lab;
-        lab = new JLabel(Globals.lang("Language") + ":");
-        builder.append(lab, 3);
-        builder.append(language);
-        builder.nextLine();
-        lab = new JLabel(Globals.lang("Default encoding") + ":");
-        builder.append(lab, 3);
-        builder.append(encodings);
-
-        JPanel pan = builder.getPanel();
-        pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-        add(pan, BorderLayout.CENTER);
-
-    }
-
-    public void setValues() {
-        allowEditing.setSelected(_prefs.getBoolean("allowTableEditing"));
-        defSort.setSelected(_prefs.getBoolean("defaultAutoSort"));
-        ctrlClick.setSelected(_prefs.getBoolean("ctrlClick"));
-        useOwner.setSelected(_prefs.getBoolean("useOwner"));
-        overwriteOwner.setSelected(_prefs.getBoolean("overwriteOwner"));
-        useTimeStamp.setSelected(_prefs.getBoolean("useTimeStamp"));
-        overwriteTimeStamp.setSelected(_prefs.getBoolean("overwriteTimeStamp"));
-        keyDuplicateWarningDialog.setSelected(_prefs.getBoolean("dialogWarningForDuplicateKey"));
-        keyEmptyWarningDialog.setSelected(_prefs.getBoolean("dialogWarningForEmptyKey"));
-        enforceLegalKeys.setSelected(_prefs.getBoolean("enforceLegalBibtexKey"));
-        memoryStick.setSelected(_prefs.getBoolean("memoryStickMode"));
-        confirmDelete.setSelected(_prefs.getBoolean("confirmDelete"));
-        defOwnerField.setText(_prefs.get("defaultOwner"));
-        timeStampFormat.setText(_prefs.get("timeStampFormat"));
-        timeStampField.setText(_prefs.get("timeStampField"));
-        useImportInspector.setSelected(_prefs.getBoolean("useImportInspectionDialog"));
-        useImportInspectorForSingle.setSelected(_prefs.getBoolean("useImportInspectionDialogForSingle"));
-        inspectionWarnDupli.setSelected(_prefs.getBoolean("warnAboutDuplicatesInInspection"));
-        useImportInspectorForSingle.setEnabled(useImportInspector.isSelected());
-        inspectionWarnDupli.setEnabled(useImportInspector.isSelected());
-        markImportedEntries.setSelected(_prefs.getBoolean("markImportedEntries"));
-        unmarkAllEntriesBeforeImporting.setSelected(_prefs.getBoolean("unmarkAllEntriesBeforeImporting"));
-
-        String enc = _prefs.get("defaultEncoding");
-        for (int i = 0; i < Globals.ENCODINGS.length; i++) {
-            if (Globals.ENCODINGS[i].equalsIgnoreCase(enc)) {
-                encodings.setSelectedIndex(i);
-                break;
-            }
-        }
-        String oldLan = _prefs.get("language");
-
-        // Language choice
-        int ilk = 0;
-        for (String lan : GUIGlobals.LANGUAGES.values()){
-            if (lan.equals(oldLan)) {
-                language.setSelectedIndex(ilk);
-            }
-            ilk++;
-        }
-
-    }
-
-    public void storeSettings() {
-        _prefs.putBoolean("useOwner", useOwner.isSelected());
-        _prefs.putBoolean("overwriteOwner", overwriteOwner.isSelected());
-        _prefs.putBoolean("useTimeStamp", useTimeStamp.isSelected());
-        _prefs.putBoolean("overwriteTimeStamp", overwriteTimeStamp.isSelected());
-        _prefs.putBoolean("dialogWarningForDuplicateKey", keyDuplicateWarningDialog.isSelected());
-        _prefs.putBoolean("dialogWarningForEmptyKey", keyEmptyWarningDialog.isSelected());
-        _prefs.putBoolean("enforceLegalBibtexKey", enforceLegalKeys.isSelected());
-        if (_prefs.getBoolean("memoryStickMode") && !memoryStick.isSelected()){
-            JOptionPane.showMessageDialog(null, Globals.lang("To disable the memory stick mode"
-            		+ " rename or remove the jabref.xml file in the same folder as JabRef."),
-            		Globals.lang("Memory Stick Mode"),
-            		JOptionPane.INFORMATION_MESSAGE);
-        }
-        _prefs.putBoolean("memoryStickMode", memoryStick.isSelected());
-        _prefs.putBoolean("confirmDelete", confirmDelete.isSelected());
-        _prefs.putBoolean("allowTableEditing", allowEditing.isSelected());
-        _prefs.putBoolean("ctrlClick", ctrlClick.isSelected());
-        //_prefs.putBoolean("preserveFieldFormatting", preserveFormatting.isSelected());
-        _prefs.putBoolean("useImportInspectionDialog", useImportInspector.isSelected());
-        _prefs.putBoolean("useImportInspectionDialogForSingle", useImportInspectorForSingle.isSelected());
-        _prefs.putBoolean("warnAboutDuplicatesInInspection", inspectionWarnDupli.isSelected());
-        //_prefs.putBoolean("defaultAutoSort", defSorrrt.isSelected());
-        String owner = defOwnerField.getText().trim();
-        _prefs.put("defaultOwner", owner);
-        _prefs.WRAPPED_USERNAME = "["+owner+"]";
-        _prefs.put("timeStampFormat", timeStampFormat.getText().trim());
-        _prefs.put("timeStampField", timeStampField.getText().trim());
-        _prefs.put("defaultEncoding", (String) encodings.getSelectedItem());
-        _prefs.putBoolean("markImportedEntries", markImportedEntries.isSelected());
-        _prefs.putBoolean("unmarkAllEntriesBeforeImporting", unmarkAllEntriesBeforeImporting.isSelected());
-
-
-        if (!GUIGlobals.LANGUAGES.get(language.getSelectedItem()).equals(_prefs.get("language"))) {
-            _prefs.put("language", GUIGlobals.LANGUAGES.get(language.getSelectedItem()).toString());
-            Globals.setLanguage(GUIGlobals.LANGUAGES.get(language.getSelectedItem()).toString(), "");
-            // Update any defaults that might be language dependent:
-            Globals.prefs.setLanguageDependentDefaultValues();
-            // Warn about restart needed:
-            JOptionPane.showMessageDialog(null, 
-            		Globals.lang("You have changed the language setting.")
-            		.concat(" ")
-                    .concat(Globals.lang("You must restart JabRef for this to come into effect.")),
-                    Globals.lang("Changed language settings"),
-                    JOptionPane.WARNING_MESSAGE);
-        }
-    }
-
-    public boolean readyToClose() {
-        try {
-            // Test if date format is legal:
-            new SimpleDateFormat(timeStampFormat.getText());
-
-        } catch (IllegalArgumentException ex2) {
-            JOptionPane.showMessageDialog
-                    (null, Globals.lang("The chosen date format for new entries is not valid"),
-                            Globals.lang("Invalid date format"),
-                            JOptionPane.ERROR_MESSAGE);
-            return false;
-        }
-        return true;
-    }
-
-	public String getTabName() {
-		return Globals.lang("General");
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Insets;
+import java.text.SimpleDateFormat;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.sf.jabref.help.HelpAction;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+public class GeneralTab extends JPanel implements PrefsTab {
+
+    private JCheckBox
+    defSort, ctrlClick, useOwner, overwriteOwner,
+    keyDuplicateWarningDialog, keyEmptyWarningDialog, enforceLegalKeys,
+    confirmDelete, allowEditing, memoryStick, useImportInspector,
+    useImportInspectorForSingle, inspectionWarnDupli, useTimeStamp, overwriteTimeStamp,
+    markImportedEntries, unmarkAllEntriesBeforeImporting;
+
+    private JTextField defOwnerField, timeStampFormat, timeStampField;
+    JabRefPreferences _prefs;
+    JabRefFrame _frame;
+    private JComboBox language = new JComboBox(GUIGlobals.LANGUAGES.keySet().toArray()),
+    encodings = new JComboBox(Globals.ENCODINGS);
+    private HelpAction ownerHelp, timeStampHelp;
+
+    public GeneralTab(JabRefFrame frame, JabRefPreferences prefs) {
+        _prefs = prefs;
+        _frame = frame;
+        setLayout(new BorderLayout());
+
+
+        allowEditing = new JCheckBox(Globals.lang("Allow editing in table cells"));
+
+        memoryStick = new JCheckBox(Globals.lang("Load and Save preferences from/to jabref.xml on start-up (memory stick mode)"));
+        defSort = new JCheckBox(Globals.lang("Sort Automatically"));
+        ctrlClick = new JCheckBox(Globals.lang("Open right-click menu with Ctrl+left button"));
+        useOwner = new JCheckBox(Globals.lang("Mark new entries with owner name") + ":");
+        useTimeStamp = new JCheckBox(Globals.lang("Mark new entries with addition date") + ". "
+            +Globals.lang("Date format")+ ":");
+        overwriteOwner = new JCheckBox(Globals.lang("Overwrite"));
+        overwriteTimeStamp = new JCheckBox(Globals.lang("Overwrite"));
+        overwriteOwner.setToolTipText(Globals.lang("If a pasted or imported entry already has "
+            +"the field set, overwrite."));
+        overwriteTimeStamp.setToolTipText(Globals.lang("If a pasted or imported entry already has "
+            +"the field set, overwrite."));
+        keyDuplicateWarningDialog = new JCheckBox(Globals.lang("Show warning dialog when a duplicate BibTeX key is entered"));
+        keyEmptyWarningDialog = new JCheckBox(Globals.lang("Show warning dialog when an empty BibTeX key is entered")); // JZTODO lyrics
+        enforceLegalKeys = new JCheckBox(Globals.lang("Enforce legal characters in BibTeX keys"));
+        confirmDelete = new JCheckBox(Globals.lang("Show confirmation dialog when deleting entries"));
+
+        useImportInspector = new JCheckBox(Globals.lang("Display imported entries in an inspection window before they are added."));
+        useImportInspectorForSingle = new JCheckBox(Globals.lang("Use inspection window also when a single entry is imported."));
+        markImportedEntries = new JCheckBox(Globals.lang("Mark entries imported into an existing database"));
+        unmarkAllEntriesBeforeImporting = new JCheckBox(Globals.lang("Unmark all entries before importing new entries into an existing database"));
+        defOwnerField = new JTextField();
+        timeStampFormat = new JTextField();
+        timeStampField = new JTextField();
+        ownerHelp = new HelpAction(frame.helpDiag, GUIGlobals.ownerHelp,
+                "Help", GUIGlobals.getIconUrl("helpSmall"));
+        timeStampHelp = new HelpAction(frame.helpDiag, GUIGlobals.timeStampHelp, "Help",
+                GUIGlobals.getIconUrl("helpSmall"));
+        inspectionWarnDupli = new JCheckBox(Globals.lang("Warn about unresolved duplicates when closing inspection window"));
+
+        Insets marg = new Insets(0,12,3,0);
+        useImportInspectorForSingle.setMargin(marg);
+        inspectionWarnDupli.setMargin(marg);
+
+        
+        // We need a listener on useImportInspector to enable and disable the
+        // import inspector related choices;
+        useImportInspector.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent event) {
+                useImportInspectorForSingle.setEnabled(useImportInspector.isSelected());
+                inspectionWarnDupli.setEnabled(useImportInspector.isSelected());
+            }
+        });
+
+        FormLayout layout = new FormLayout
+                ("8dlu, 1dlu, left:170dlu, 4dlu, fill:pref, 4dlu, fill:pref, 4dlu, left:pref, 4dlu, left:pref, 4dlu, left:pref", "");
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+
+
+
+        builder.appendSeparator(Globals.lang("General"));
+        builder.nextLine();
+        builder.append(useImportInspector, 13);
+        builder.nextLine();
+        builder.append(new JPanel());
+        builder.append(useImportInspectorForSingle, 11);
+        builder.nextLine();
+        builder.append(new JPanel());
+        builder.append(inspectionWarnDupli, 11);
+        builder.nextLine();
+        builder.append(ctrlClick, 13);
+        builder.nextLine();
+        builder.append(confirmDelete, 13);
+        builder.nextLine();
+        builder.append(keyDuplicateWarningDialog, 13);
+        builder.nextLine();
+        builder.append(keyEmptyWarningDialog, 13);
+        builder.nextLine();
+        builder.append(enforceLegalKeys, 13);
+        builder.nextLine();
+        builder.append(memoryStick, 13);
+        
+        // Create a new panel with its own FormLayout for the last items:
+        builder.append(useOwner, 3);
+        builder.append(defOwnerField);
+        builder.append(overwriteOwner);
+        builder.append(new JPanel(), 3);
+        
+        JButton hlp = new JButton(ownerHelp);
+        hlp.setText(null);
+        hlp.setPreferredSize(new Dimension(24, 24));
+        builder.append(hlp);
+        builder.nextLine();
+
+        builder.append(useTimeStamp, 3);
+        builder.append(timeStampFormat);
+        builder.append(overwriteTimeStamp);
+        builder.append(Globals.lang("Field name")+":");
+        builder.append(timeStampField);
+
+        hlp = new JButton(timeStampHelp);
+        hlp.setText(null);
+        hlp.setPreferredSize(new Dimension(24, 24));
+        builder.append(hlp);
+        builder.nextLine();
+
+        builder.append(markImportedEntries, 13);
+        builder.nextLine();
+        builder.append(unmarkAllEntriesBeforeImporting, 13);
+        builder.nextLine();
+        JLabel lab;
+        lab = new JLabel(Globals.lang("Language") + ":");
+        builder.append(lab, 3);
+        builder.append(language);
+        builder.nextLine();
+        lab = new JLabel(Globals.lang("Default encoding") + ":");
+        builder.append(lab, 3);
+        builder.append(encodings);
+
+        JPanel pan = builder.getPanel();
+        pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        add(pan, BorderLayout.CENTER);
+
+    }
+
+    public void setValues() {
+        allowEditing.setSelected(_prefs.getBoolean("allowTableEditing"));
+        defSort.setSelected(_prefs.getBoolean("defaultAutoSort"));
+        ctrlClick.setSelected(_prefs.getBoolean("ctrlClick"));
+        useOwner.setSelected(_prefs.getBoolean("useOwner"));
+        overwriteOwner.setSelected(_prefs.getBoolean("overwriteOwner"));
+        useTimeStamp.setSelected(_prefs.getBoolean("useTimeStamp"));
+        overwriteTimeStamp.setSelected(_prefs.getBoolean("overwriteTimeStamp"));
+        keyDuplicateWarningDialog.setSelected(_prefs.getBoolean("dialogWarningForDuplicateKey"));
+        keyEmptyWarningDialog.setSelected(_prefs.getBoolean("dialogWarningForEmptyKey"));
+        enforceLegalKeys.setSelected(_prefs.getBoolean("enforceLegalBibtexKey"));
+        memoryStick.setSelected(_prefs.getBoolean("memoryStickMode"));
+        confirmDelete.setSelected(_prefs.getBoolean("confirmDelete"));
+        defOwnerField.setText(_prefs.get("defaultOwner"));
+        timeStampFormat.setText(_prefs.get("timeStampFormat"));
+        timeStampField.setText(_prefs.get("timeStampField"));
+        useImportInspector.setSelected(_prefs.getBoolean("useImportInspectionDialog"));
+        useImportInspectorForSingle.setSelected(_prefs.getBoolean("useImportInspectionDialogForSingle"));
+        inspectionWarnDupli.setSelected(_prefs.getBoolean("warnAboutDuplicatesInInspection"));
+        useImportInspectorForSingle.setEnabled(useImportInspector.isSelected());
+        inspectionWarnDupli.setEnabled(useImportInspector.isSelected());
+        markImportedEntries.setSelected(_prefs.getBoolean("markImportedEntries"));
+        unmarkAllEntriesBeforeImporting.setSelected(_prefs.getBoolean("unmarkAllEntriesBeforeImporting"));
+
+        String enc = _prefs.get("defaultEncoding");
+        for (int i = 0; i < Globals.ENCODINGS.length; i++) {
+            if (Globals.ENCODINGS[i].equalsIgnoreCase(enc)) {
+                encodings.setSelectedIndex(i);
+                break;
+            }
+        }
+        String oldLan = _prefs.get("language");
+
+        // Language choice
+        int ilk = 0;
+        for (String lan : GUIGlobals.LANGUAGES.values()){
+            if (lan.equals(oldLan)) {
+                language.setSelectedIndex(ilk);
+            }
+            ilk++;
+        }
+
+    }
+
+    public void storeSettings() {
+        _prefs.putBoolean("useOwner", useOwner.isSelected());
+        _prefs.putBoolean("overwriteOwner", overwriteOwner.isSelected());
+        _prefs.putBoolean("useTimeStamp", useTimeStamp.isSelected());
+        _prefs.putBoolean("overwriteTimeStamp", overwriteTimeStamp.isSelected());
+        _prefs.putBoolean("dialogWarningForDuplicateKey", keyDuplicateWarningDialog.isSelected());
+        _prefs.putBoolean("dialogWarningForEmptyKey", keyEmptyWarningDialog.isSelected());
+        _prefs.putBoolean("enforceLegalBibtexKey", enforceLegalKeys.isSelected());
+        if (_prefs.getBoolean("memoryStickMode") && !memoryStick.isSelected()){
+            JOptionPane.showMessageDialog(null, Globals.lang("To disable the memory stick mode"
+            		+ " rename or remove the jabref.xml file in the same folder as JabRef."),
+            		Globals.lang("Memory Stick Mode"),
+            		JOptionPane.INFORMATION_MESSAGE);
+        }
+        _prefs.putBoolean("memoryStickMode", memoryStick.isSelected());
+        _prefs.putBoolean("confirmDelete", confirmDelete.isSelected());
+        _prefs.putBoolean("allowTableEditing", allowEditing.isSelected());
+        _prefs.putBoolean("ctrlClick", ctrlClick.isSelected());
+        //_prefs.putBoolean("preserveFieldFormatting", preserveFormatting.isSelected());
+        _prefs.putBoolean("useImportInspectionDialog", useImportInspector.isSelected());
+        _prefs.putBoolean("useImportInspectionDialogForSingle", useImportInspectorForSingle.isSelected());
+        _prefs.putBoolean("warnAboutDuplicatesInInspection", inspectionWarnDupli.isSelected());
+        //_prefs.putBoolean("defaultAutoSort", defSorrrt.isSelected());
+        String owner = defOwnerField.getText().trim();
+        _prefs.put("defaultOwner", owner);
+        _prefs.WRAPPED_USERNAME = "["+owner+"]";
+        _prefs.put("timeStampFormat", timeStampFormat.getText().trim());
+        _prefs.put("timeStampField", timeStampField.getText().trim());
+        _prefs.put("defaultEncoding", (String) encodings.getSelectedItem());
+        _prefs.putBoolean("markImportedEntries", markImportedEntries.isSelected());
+        _prefs.putBoolean("unmarkAllEntriesBeforeImporting", unmarkAllEntriesBeforeImporting.isSelected());
+
+
+        if (!GUIGlobals.LANGUAGES.get(language.getSelectedItem()).equals(_prefs.get("language"))) {
+            _prefs.put("language", GUIGlobals.LANGUAGES.get(language.getSelectedItem()).toString());
+            Globals.setLanguage(GUIGlobals.LANGUAGES.get(language.getSelectedItem()).toString(), "");
+            // Update any defaults that might be language dependent:
+            Globals.prefs.setLanguageDependentDefaultValues();
+            // Warn about restart needed:
+            JOptionPane.showMessageDialog(null, 
+            		Globals.lang("You have changed the language setting.")
+            		.concat(" ")
+                    .concat(Globals.lang("You must restart JabRef for this to come into effect.")),
+                    Globals.lang("Changed language settings"),
+                    JOptionPane.WARNING_MESSAGE);
+        }
+    }
+
+    public boolean readyToClose() {
+        try {
+            // Test if date format is legal:
+            new SimpleDateFormat(timeStampFormat.getText());
+
+        } catch (IllegalArgumentException ex2) {
+            JOptionPane.showMessageDialog
+                    (null, Globals.lang("The chosen date format for new entries is not valid"),
+                            Globals.lang("Invalid date format"),
+                            JOptionPane.ERROR_MESSAGE);
+            return false;
+        }
+        return true;
+    }
+
+	public String getTabName() {
+		return Globals.lang("General");
+	}
+}
diff --git a/src/java/net/sf/jabref/GlobalFocusListener.java b/src/java/net/sf/jabref/GlobalFocusListener.java
index 0511dde..4d1cc90 100644
--- a/src/java/net/sf/jabref/GlobalFocusListener.java
+++ b/src/java/net/sf/jabref/GlobalFocusListener.java
@@ -1,43 +1,43 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.Component;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-
-import javax.swing.JComponent;
-
-public class GlobalFocusListener implements FocusListener {
-  Component focused = null;
-
-  public GlobalFocusListener() {
-  }
-  public void focusGained(FocusEvent e) {
-    if (!e.isTemporary())
-      focused = (Component)e.getSource();
-  }
-  public void focusLost(FocusEvent e) {
-  }
-
-  public JComponent getFocused() {
-    return (JComponent)focused;
-  }
-
-  public void setFocused(Component c) {
-    focused = c;
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.Component;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+
+import javax.swing.JComponent;
+
+public class GlobalFocusListener implements FocusListener {
+  Component focused = null;
+
+  public GlobalFocusListener() {
+  }
+  public void focusGained(FocusEvent e) {
+    if (!e.isTemporary())
+      focused = (Component)e.getSource();
+  }
+  public void focusLost(FocusEvent e) {
+  }
+
+  public JComponent getFocused() {
+    return (JComponent)focused;
+  }
+
+  public void setFocused(Component c) {
+    focused = c;
+  }
+}
diff --git a/src/java/net/sf/jabref/Globals.java b/src/java/net/sf/jabref/Globals.java
index 583e38d..e771d82 100644
--- a/src/java/net/sf/jabref/Globals.java
+++ b/src/java/net/sf/jabref/Globals.java
@@ -1,1437 +1,1438 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.Toolkit;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.logging.ConsoleHandler;
-import java.util.logging.Filter;
-import java.util.logging.Formatter;
-import java.util.logging.Handler;
-import java.util.logging.LogRecord;
-import java.util.logging.Logger;
-import java.util.logging.SimpleFormatter;
-import java.util.logging.StreamHandler;
-import java.util.regex.Pattern;
-
-import net.sf.jabref.collab.FileUpdateMonitor;
-import net.sf.jabref.imports.ImportFormatReader;
-import net.sf.jabref.journals.JournalAbbreviations;
-import net.sf.jabref.util.ErrorConsole;
-import net.sf.jabref.util.TBuildInfo;
-import net.sf.jabref.export.AutoSaveManager;
-
-
-public class Globals {
-
-	private static int SHORTCUT_MASK = -1;
-    public static int
-		FUTURE_YEAR = 2050, // Needs to give a year definitely in the future.
-		// Used for guessing the
-		// year field when parsing textual data. :-)
-
-		STANDARD_EXPORT_COUNT = 5, // The number of standard export formats.
-		METADATA_LINE_LENGTH = 70; // The line length used to wrap metadata.
-    
-    // used at highlighting in preview area. 
-    // Color chosen similar to JTextComponent.getSelectionColor(), which is
-    // used at highlighting words at the editor 
-    public static final String highlightColor = "#3399FF";
-
-	private static String resourcePrefix = "resource/JabRef", menuResourcePrefix = "resource/Menu",
-		integrityResourcePrefix = "resource/IntegrityMessage";
-
-	private static final String buildInfos = "/resource/build.properties";
-
-    public static String JOURNALS_FILE_BUILTIN = "/resource/journalList.txt";
-	/*
-	 * some extra field definitions
-	 */
-	public static final String additionalFields = "/resource/fields/fields.xml";
-
-	public static ResourceBundle messages, menuTitles, intMessages;
-
-	public static FileUpdateMonitor fileUpdateMonitor;
-
-	public static ImportFormatReader importFormatReader = new ImportFormatReader();
-
-	public static ErrorConsole errorConsole;
-
-	public static String VERSION, BUILD, BUILD_DATE;
-
-	static {
-		TBuildInfo bi = new TBuildInfo(buildInfos);
-		VERSION = bi.getBUILD_VERSION();
-		BUILD = bi.getBUILD_NUMBER();
-		BUILD_DATE = bi.getBUILD_DATE();
-
-	}
-
-	public static Locale locale;
-
-	public static final String FILETYPE_PREFS_EXT = "_dir", SELECTOR_META_PREFIX = "selector_",
-        PROTECTED_FLAG_META = "protectedFlag",
-        LAYOUT_PREFIX = "/resource/layout/", MAC = "Mac OS X",
-		DOI_LOOKUP_PREFIX = "http://dx.doi.org/", NONE = "_non__",
-		ARXIV_LOOKUP_PREFIX = "http://arxiv.org/abs/",
-		FORMATTER_PACKAGE = "net.sf.jabref.export.layout.format.";
-
-    private static Handler consoleHandler;
-
-	public static String[] ENCODINGS, ALL_ENCODINGS = // (String[])
-		// Charset.availableCharsets().keySet().toArray(new
-		// String[]{});
-		new String[] { "ISO8859_1", "UTF8", "UTF-16", "ASCII", "Cp1250", "Cp1251", "Cp1252",
-			"Cp1253", "Cp1254", "Cp1257", "SJIS",
-            "KOI8_R", // Cyrillic
-			"EUC_JP", // Added Japanese encodings.
-			"Big5", "Big5_HKSCS", "GBK", "ISO8859_2", "ISO8859_3", "ISO8859_4", "ISO8859_5",
-			"ISO8859_6", "ISO8859_7", "ISO8859_8", "ISO8859_9", "ISO8859_13", "ISO8859_15" };
-    public static Map<String,String> ENCODING_NAMES_LOOKUP;
-
-    // String array that maps from month number to month string label:
-	public static String[] MONTHS = new String[] { "jan", "feb", "mar", "apr", "may", "jun", "jul",
-		"aug", "sep", "oct", "nov", "dec" };
-	
-	// Map that maps from month string labels to
-	public static Map<String, String> MONTH_STRINGS = new HashMap<String, String>();
-	static {
-		MONTH_STRINGS.put("jan", "January");
-		MONTH_STRINGS.put("feb", "February");
-		MONTH_STRINGS.put("mar", "March");
-		MONTH_STRINGS.put("apr", "April");
-		MONTH_STRINGS.put("may", "May");
-		MONTH_STRINGS.put("jun", "June");
-		MONTH_STRINGS.put("jul", "July");
-		MONTH_STRINGS.put("aug", "August");
-		MONTH_STRINGS.put("sep", "September");
-		MONTH_STRINGS.put("oct", "October");
-		MONTH_STRINGS.put("nov", "November");
-		MONTH_STRINGS.put("dec", "December");
-
-		// Build list of encodings, by filtering out all that are not supported
-		// on this system:
-		List<String> encodings = new ArrayList<String>();
-		for (int i = 0; i < ALL_ENCODINGS.length; i++) {
-			if (Charset.isSupported(ALL_ENCODINGS[i])) {
-				encodings.add(ALL_ENCODINGS[i]);
-			}
-		}
-		ENCODINGS = encodings.toArray(new String[0]);
-        // Build a map for translating Java encoding names into common encoding names:
-        ENCODING_NAMES_LOOKUP = new HashMap<String,String>();
-        ENCODING_NAMES_LOOKUP.put("Cp1250", "windows-1250");
-        ENCODING_NAMES_LOOKUP.put("Cp1251", "windows-1251");
-        ENCODING_NAMES_LOOKUP.put("Cp1252", "windows-1252");
-        ENCODING_NAMES_LOOKUP.put("Cp1253", "windows-1253");
-        ENCODING_NAMES_LOOKUP.put("Cp1254", "windows-1254");
-        ENCODING_NAMES_LOOKUP.put("Cp1257", "windows-1257");
-        ENCODING_NAMES_LOOKUP.put("ISO8859_1", "ISO-8859-1");
-        ENCODING_NAMES_LOOKUP.put("ISO8859_2", "ISO-8859-2");
-        ENCODING_NAMES_LOOKUP.put("ISO8859_3", "ISO-8859-3");
-        ENCODING_NAMES_LOOKUP.put("ISO8859_4", "ISO-8859-4");
-        ENCODING_NAMES_LOOKUP.put("ISO8859_5", "ISO-8859-5");
-        ENCODING_NAMES_LOOKUP.put("ISO8859_6", "ISO-8859-6");
-        ENCODING_NAMES_LOOKUP.put("ISO8859_7", "ISO-8859-7");
-        ENCODING_NAMES_LOOKUP.put("ISO8859_8", "ISO-8859-8");
-        ENCODING_NAMES_LOOKUP.put("ISO8859_9", "ISO-8859-9");
-        ENCODING_NAMES_LOOKUP.put("ISO8859_13", "ISO-8859-13");
-        ENCODING_NAMES_LOOKUP.put("ISO8859_15", "ISO-8859-15");
-        ENCODING_NAMES_LOOKUP.put("KOI8_R", "KOI8-R");
-        ENCODING_NAMES_LOOKUP.put("UTF8", "UTF-8");
-        ENCODING_NAMES_LOOKUP.put("UTF-16", "UTF-16");
-        ENCODING_NAMES_LOOKUP.put("SJIS", "Shift_JIS");
-        ENCODING_NAMES_LOOKUP.put("GBK", "GBK");
-        ENCODING_NAMES_LOOKUP.put("Big5_HKSCS", "Big5-HKSCS");
-        ENCODING_NAMES_LOOKUP.put("Big5", "Big5");
-        ENCODING_NAMES_LOOKUP.put("EUC_JP", "EUC-JP");
-        ENCODING_NAMES_LOOKUP.put("ASCII", "US-ASCII");
-    }
-
-	public static GlobalFocusListener focusListener;
-
-    public static AutoSaveManager autoSaveManager = null;
-
-	public static JabRefPreferences prefs = null;
-
-	public static HelpDialog helpDiag = null;
-
-	public static final String osName = System.getProperty("os.name", "def");
-
-	public static final boolean ON_MAC = (osName.equals(MAC)), ON_WIN = osName.startsWith("Windows");
-
-	public static final String[] SKIP_WORDS = { "a", "an", "the", "for", "on", "of" };
-	
-	public static final String SEPARATING_CHARS         = ";,\n ";
-	public static final String SEPARATING_CHARS_NOSPACE = ";,\n";
-
-	public static SidePaneManager sidePaneManager;
-
-	public static final String NEWLINE = System.getProperty("line.separator");
-    public static final int NEWLINE_LENGTH = System.getProperty("line.separator").length();
-
-    // Instantiate logger:
-    private static Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
-
-    /**
-	 * true if we have unix newlines
-	 */
-	public static final boolean UNIX_NEWLINE = NEWLINE.equals("\n");
-
-	/**
-	 * 	"Fieldname" to indicate that a field should be treated as a bibtex 
-	 * string. Used when writing database to file.
-	 */
-	public static final String BIBTEX_STRING = "__string";
-
-    public static void startBackgroundTasks() {
-
-        focusListener = new GlobalFocusListener();
-
-        // TODO: Error console initialization here. When should it be used?
-		errorConsole = ErrorConsole.getInstance();
-
-        fileUpdateMonitor = new FileUpdateMonitor();
-        fileUpdateMonitor.start();
-
-
-    }
-
-    /**
-     * Initialize and start the autosave manager.
-     * @param frame The main frame.
-     */
-    public static void startAutoSaveManager(JabRefFrame frame) {
-        autoSaveManager = new AutoSaveManager(frame);
-        autoSaveManager.startAutoSaveTimer();        
-    }
-
-    /**
-     * Stop the autosave manager if it has been started.
-     */
-    public static void stopAutoSaveManager() {
-        if (autoSaveManager != null) {
-            autoSaveManager.stopAutoSaveTimer();
-            autoSaveManager.clearAutoSaves();
-            autoSaveManager = null;
-        }
-    }
-
-	public static void logger(String s) {
-		logger.info(s);
-	}
-
-	public static void turnOffLogging() { // only log exceptions
-		logger.setLevel(java.util.logging.Level.SEVERE);
-	}
-
-	/**
-	 * Should be only called once
-	 */
-	public static void turnOnConsoleLogging() {
-        consoleHandler = new java.util.logging.ConsoleHandler();
-		logger.addHandler(consoleHandler);
-	}
-
-	/**
-	 * Should be only called once
-	 */
-	public static void turnOnFileLogging() {
-		logger.setLevel(java.util.logging.Level.ALL);
-		java.util.logging.Handler handler;
-		handler = new ConsoleHandler();
-		logger.addHandler(handler);
-
-		handler.setFilter(new Filter() { // select what gets logged
-				public boolean isLoggable(LogRecord record) {
-					return true;
-				}
-			});
-	}
-
-	public static void setLanguage(String language, String country) {
-        locale = new Locale(language, country);
-		messages = ResourceBundle.getBundle(resourcePrefix, locale);
-		menuTitles = ResourceBundle.getBundle(menuResourcePrefix, locale);
-		intMessages = ResourceBundle.getBundle(integrityResourcePrefix, locale);
-        Locale.setDefault(locale);
-		javax.swing.JComponent.setDefaultLocale(locale);
-	}
-
-	public static JournalAbbreviations journalAbbrev;
-
-	public static String lang(String key, String[] params) {
-		String translation = null;
-		try {
-			if (Globals.messages != null) 
-				translation = Globals.messages.getString(key.replaceAll(" ", "_"));
-		} catch (MissingResourceException ex) {
-			//logger("Warning: could not get translation for \"" + key + "\"");
-		}
-		if (translation == null)
-			translation = key;
-
-		if ((translation != null) && (translation.length() != 0)) {
-			translation = translation.replaceAll("_", " ");
-			StringBuffer sb = new StringBuffer();
-			boolean b = false;
-			char c;
-			for (int i = 0; i < translation.length(); ++i) {
-				c = translation.charAt(i);
-				if (c == '%') {
-					b = true;
-				} else {
-					if (!b) {
-						sb.append(c);
-					} else {
-						b = false;
-						try {
-							int index = Integer.parseInt(String.valueOf(c));
-							if (params != null && index >= 0 && index <= params.length)
-								sb.append(params[index]);
-						} catch (NumberFormatException e) {
-							// append literally (for quoting) or insert special
-							// symbol
-							switch (c) {
-							case 'c': // colon
-								sb.append(':');
-								break;
-							case 'e': // equal
-								sb.append('=');
-								break;
-							default: // anything else, e.g. %
-								sb.append(c);
-							}
-						}
-					}
-				}
-			}
-			return sb.toString();
-		}
-		return key;
-	}
-
-	public static String lang(String key) {
-		return lang(key, (String[]) null);
-	}
-
-	public static String lang(String key, String s1) {
-		return lang(key, new String[] { s1 });
-	}
-
-	public static String lang(String key, String s1, String s2) {
-		return lang(key, new String[] { s1, s2 });
-	}
-
-	public static String lang(String key, String s1, String s2, String s3) {
-		return lang(key, new String[] { s1, s2, s3 });
-	}
-
-	public static String menuTitle(String key) {
-		String translation = null;
-		try {
-			if (Globals.messages != null) {
-				translation = Globals.menuTitles.getString(key.replaceAll(" ", "_"));
-			}
-		} catch (MissingResourceException ex) {
-			translation = key;
-		}
-		if ((translation != null) && (translation.length() != 0)) {
-			return translation.replaceAll("_", " ");
-		} else {
-			return key;
-		}
-	}
-
-	public static String getIntegrityMessage(String key) {
-		String translation = null;
-		try {
-			if (Globals.intMessages != null) {
-				translation = Globals.intMessages.getString(key);
-			}
-		} catch (MissingResourceException ex) {
-			translation = key;
-
-			// System.err.println("Warning: could not get menu item translation
-			// for \""
-			// + key + "\"");
-		}
-		if ((translation != null) && (translation.length() != 0)) {
-			return translation;
-		} else {
-			return key;
-		}
-	}
-
-	// ============================================================
-	// Using the hashmap of entry types found in BibtexEntryType
-	// ============================================================
-	public static BibtexEntryType getEntryType(String type) {
-		// decide which entryType object to return
-		Object o = BibtexEntryType.ALL_TYPES.get(type);
-		if (o != null) {
-			return (BibtexEntryType) o;
-		} else {
-			return BibtexEntryType.OTHER;
-		}
-		/*
-		 * if(type.equals("article")) return BibtexEntryType.ARTICLE; else
-		 * if(type.equals("book")) return BibtexEntryType.BOOK; else
-		 * if(type.equals("inproceedings")) return
-		 * BibtexEntryType.INPROCEEDINGS;
-		 */
-	}
-
-
-    public static String SPECIAL_COMMAND_CHARS = "\"`^~'c=";
-
-	public static HashMap<String, String> HTML_CHARS = new HashMap<String, String>();
-	public static HashMap<String, String> HTMLCHARS = new HashMap<String, String>();
-	public static HashMap<String, String> XML_CHARS = new HashMap<String, String>();
-	public static HashMap<String, String> ASCII2XML_CHARS = new HashMap<String, String>();
-	public static HashMap<String, String> UNICODE_CHARS = new HashMap<String, String>();
-	public static HashMap<String, String> RTFCHARS = new HashMap<String, String>();
-	public static HashMap<String, String> URL_CHARS = new HashMap<String,String>();
-
-    public static int getShortcutMask() {
-        if (SHORTCUT_MASK == -1)
-        try {
-			SHORTCUT_MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
-		} catch (Throwable t) {
-
-		}
-
-        return SHORTCUT_MASK;
-    }
-	static {
-
-
-		// Special characters in URLs need to be replaced to ensure that the URL
-		// opens properly on all platforms:
-		URL_CHARS.put("<", "%3c");
-		URL_CHARS.put(">", "%3e");
-		URL_CHARS.put("(", "%28");
-		URL_CHARS.put(")", "%29");
-		URL_CHARS.put(" ", "%20");
-		URL_CHARS.put("&", "%26");
-		URL_CHARS.put("$", "%24");
-
-		// HTMLCHARS.put("\"a", "ä");
-		// HTMLCHARS.put("\"A", "Ä");
-		// HTMLCHARS.put("\"e", "ë");
-		// HTMLCHARS.put("\"E", "Ë");
-		// HTMLCHARS.put("\"i", "ï");
-		// HTMLCHARS.put("\"I", "Ï");
-		// HTMLCHARS.put("\"o", "ö");
-		// HTMLCHARS.put("\"O", "Ö");
-		// HTMLCHARS.put("\"u", "ü");
-		// HTMLCHARS.put("\"U", "Ü");
-		// HTMLCHARS.put("`a", "à");
-		// HTMLCHARS.put("`A", "À");
-		// HTMLCHARS.put("`e", "è");
-		// HTMLCHARS.put("`E", "È");
-		// HTMLCHARS.put("`i", "ì");
-		// HTMLCHARS.put("`I", "Ì");
-		// HTMLCHARS.put("`o", "ò");
-		// HTMLCHARS.put("`O", "Ò");
-		// HTMLCHARS.put("`u", "ù");
-		// HTMLCHARS.put("`U", "Ù");
-		// HTMLCHARS.put("'e", "é");
-		// HTMLCHARS.put("'E", "É");
-		// HTMLCHARS.put("'i", "í");
-		// HTMLCHARS.put("'I", "Í");
-		// HTMLCHARS.put("'o", "ó");
-		// HTMLCHARS.put("'O", "Ó");
-		// HTMLCHARS.put("'u", "ú");
-		// HTMLCHARS.put("'U", "Ú");
-		// HTMLCHARS.put("'a", "á");
-		// HTMLCHARS.put("'A", "Á");
-		// HTMLCHARS.put("^a", "ô");
-		// HTMLCHARS.put("^A", "Ô");
-		// HTMLCHARS.put("^o", "ô");
-		// HTMLCHARS.put("^O", "Ô");
-		// HTMLCHARS.put("^u", "û");
-		// HTMLCHARS.put("^U", "Û");
-		// HTMLCHARS.put("^e", "ê");
-		// HTMLCHARS.put("^E", "Ê");
-		// HTMLCHARS.put("^i", "î");
-		// HTMLCHARS.put("^I", "Î");
-		// HTMLCHARS.put("~o", "õ");
-		// HTMLCHARS.put("~O", "Õ");
-		// HTMLCHARS.put("~n", "ñ");
-		// HTMLCHARS.put("~N", "Ñ");
-		// HTMLCHARS.put("~a", "ã");
-		// HTMLCHARS.put("~A", "Ã");
-		// HTMLCHARS.put("cc", "ç");
-		// HTMLCHARS.put("cC", "Ç");
-
-		// Following character definitions contributed by Ervin Kolenovic:
-		// HTML named entities from #192 - #255 (UNICODE Latin-1)
-		HTMLCHARS.put("`A", "À"); // #192
-		HTMLCHARS.put("'A", "Á"); // #193
-		HTMLCHARS.put("^A", "Â"); // #194
-		HTMLCHARS.put("~A", "Ã"); // #195
-		HTMLCHARS.put("\"A", "Ä"); // #196
-		HTMLCHARS.put("AA", "Å"); // #197
-		HTMLCHARS.put("AE", "Æ"); // #198
-		HTMLCHARS.put("cC", "Ç"); // #199
-		HTMLCHARS.put("`E", "È"); // #200
-		HTMLCHARS.put("'E", "É"); // #201
-		HTMLCHARS.put("^E", "Ê"); // #202
-		HTMLCHARS.put("\"E", "Ë"); // #203
-		HTMLCHARS.put("`I", "Ì"); // #204
-		HTMLCHARS.put("'I", "Í"); // #205
-		HTMLCHARS.put("^I", "Î"); // #206
-		HTMLCHARS.put("\"I", "Ï"); // #207
-		HTMLCHARS.put("DH", "Ð"); // #208
-		HTMLCHARS.put("~N", "Ñ"); // #209
-		HTMLCHARS.put("`O", "Ò"); // #210
-		HTMLCHARS.put("'O", "Ó"); // #211
-		HTMLCHARS.put("^O", "Ô"); // #212
-		HTMLCHARS.put("~O", "Õ"); // #213
-		HTMLCHARS.put("\"O", "Ö"); // #214
-		// According to ISO 8859-1 the "\times" symbol should be placed here
-		// (#215).
-		// Omitting this, because it is a mathematical symbol.
-		HTMLCHARS.put("O", "Ø"); // #216
-		HTMLCHARS.put("`U", "Ù"); // #217
-		HTMLCHARS.put("'U", "Ú"); // #218
-		HTMLCHARS.put("^U", "Û"); // #219
-		HTMLCHARS.put("\"U", "Ü"); // #220
-		HTMLCHARS.put("'Y", "Ý"); // #221
-		HTMLCHARS.put("TH", "Þ"); // #222
-		HTMLCHARS.put("ss", "ß"); // #223
-		HTMLCHARS.put("`a", "à"); // #224
-		HTMLCHARS.put("'a", "á"); // #225
-		HTMLCHARS.put("^a", "â"); // #226
-		HTMLCHARS.put("~a", "ã"); // #227
-		HTMLCHARS.put("\"a", "ä"); // #228
-		HTMLCHARS.put("aa", "å"); // #229
-		HTMLCHARS.put("ae", "æ"); // #230
-		HTMLCHARS.put("cc", "ç"); // #231
-		HTMLCHARS.put("`e", "è"); // #232
-		HTMLCHARS.put("'e", "é"); // #233
-		HTMLCHARS.put("^e", "ê"); // #234
-		HTMLCHARS.put("\"e", "ë"); // #235
-		HTMLCHARS.put("`i", "ì"); // #236
-		HTMLCHARS.put("'i", "í"); // #237
-		HTMLCHARS.put("^i", "î"); // #238
-		HTMLCHARS.put("\"i", "ï"); // #239
-		HTMLCHARS.put("dh", "ð"); // #240
-		HTMLCHARS.put("~n", "ñ"); // #241
-		HTMLCHARS.put("`o", "ò"); // #242
-		HTMLCHARS.put("'o", "ó"); // #243
-		HTMLCHARS.put("^o", "ô"); // #244
-		HTMLCHARS.put("~o", "õ"); // #245
-		HTMLCHARS.put("\"o", "ö"); // #246
-		// According to ISO 8859-1 the "\div" symbol should be placed here
-		// (#247).
-		// Omitting this, because it is a mathematical symbol.
-		HTMLCHARS.put("o", "ø"); // #248
-		HTMLCHARS.put("`u", "ù"); // #249
-		HTMLCHARS.put("'u", "ú"); // #250
-		HTMLCHARS.put("^u", "û"); // #251
-		HTMLCHARS.put("\"u", "ü"); // #252
-		HTMLCHARS.put("'y", "ý"); // #253
-		HTMLCHARS.put("th", "þ"); // #254
-		HTMLCHARS.put("\"y", "ÿ"); // #255
-
-		// HTML special characters without names (UNICODE Latin Extended-A),
-		// indicated by UNICODE number
-		HTMLCHARS.put("=A", "Ā"); // "Amacr"
-		HTMLCHARS.put("=a", "ā"); // "amacr"
-		HTMLCHARS.put("uA", "Ă"); // "Abreve"
-		HTMLCHARS.put("ua", "ă"); // "abreve"
-		HTMLCHARS.put("kA", "Ą"); // "Aogon"
-		HTMLCHARS.put("ka", "ą"); // "aogon"
-		HTMLCHARS.put("'C", "Ć"); // "Cacute"
-		HTMLCHARS.put("'c", "ć"); // "cacute"
-		HTMLCHARS.put("^C", "Ĉ"); // "Ccirc"
-		HTMLCHARS.put("^c", "ĉ"); // "ccirc"
-		HTMLCHARS.put(".C", "Ċ"); // "Cdot"
-		HTMLCHARS.put(".c", "ċ"); // "cdot"
-		HTMLCHARS.put("vC", "Č"); // "Ccaron"
-		HTMLCHARS.put("vc", "č"); // "ccaron"
-		HTMLCHARS.put("vD", "Ď"); // "Dcaron"
-		// Symbol #271 (d�) has no special Latex command
-		HTMLCHARS.put("DJ", "Đ"); // "Dstrok"
-		HTMLCHARS.put("dj", "đ"); // "dstrok"
-		HTMLCHARS.put("=E", "Ē"); // "Emacr"
-		HTMLCHARS.put("=e", "ē"); // "emacr"
-		HTMLCHARS.put("uE", "Ĕ"); // "Ebreve"
-		HTMLCHARS.put("ue", "ĕ"); // "ebreve"
-		HTMLCHARS.put(".E", "Ė"); // "Edot"
-		HTMLCHARS.put(".e", "ė"); // "edot"
-		HTMLCHARS.put("kE", "Ę"); // "Eogon"
-		HTMLCHARS.put("ke", "ę"); // "eogon"
-		HTMLCHARS.put("vE", "Ě"); // "Ecaron"
-		HTMLCHARS.put("ve", "ě"); // "ecaron"
-		HTMLCHARS.put("^G", "Ĝ"); // "Gcirc"
-		HTMLCHARS.put("^g", "ĝ"); // "gcirc"
-		HTMLCHARS.put("uG", "Ğ"); // "Gbreve"
-		HTMLCHARS.put("ug", "ğ"); // "gbreve"
-		HTMLCHARS.put(".G", "Ġ"); // "Gdot"
-		HTMLCHARS.put(".g", "ġ"); // "gdot"
-		HTMLCHARS.put("cG", "Ģ"); // "Gcedil"
-		HTMLCHARS.put("'g", "ģ"); // "gacute"
-		HTMLCHARS.put("^H", "Ĥ"); // "Hcirc"
-		HTMLCHARS.put("^h", "ĥ"); // "hcirc"
-		HTMLCHARS.put("Hstrok", "Ħ"); // "Hstrok"
-		HTMLCHARS.put("hstrok", "ħ"); // "hstrok"
-		HTMLCHARS.put("~I", "Ĩ"); // "Itilde"
-		HTMLCHARS.put("~i", "ĩ"); // "itilde"
-		HTMLCHARS.put("=I", "Ī"); // "Imacr"
-		HTMLCHARS.put("=i", "ī"); // "imacr"
-		HTMLCHARS.put("uI", "Ĭ"); // "Ibreve"
-		HTMLCHARS.put("ui", "ĭ"); // "ibreve"
-		HTMLCHARS.put("kI", "Į"); // "Iogon"
-		HTMLCHARS.put("ki", "į"); // "iogon"
-		HTMLCHARS.put(".I", "İ"); // "Idot"
-		HTMLCHARS.put("i", "ı"); // "inodot"
-		// Symbol #306 (IJ) has no special Latex command
-		// Symbol #307 (ij) has no special Latex command
-		HTMLCHARS.put("^J", "Ĵ"); // "Jcirc"
-		HTMLCHARS.put("^j", "ĵ"); // "jcirc"
-		HTMLCHARS.put("cK", "Ķ"); // "Kcedil"
-		HTMLCHARS.put("ck", "ķ"); // "kcedil"
-		// Symbol #312 (k) has no special Latex command
-		HTMLCHARS.put("'L", "Ĺ"); // "Lacute"
-		HTMLCHARS.put("'l", "ĺ"); // "lacute"
-		HTMLCHARS.put("cL", "Ļ"); // "Lcedil"
-		HTMLCHARS.put("cl", "ļ"); // "lcedil"
-		// Symbol #317 (L�) has no special Latex command
-		// Symbol #318 (l�) has no special Latex command
-		HTMLCHARS.put("Lmidot", "Ŀ"); // "Lmidot"
-		HTMLCHARS.put("lmidot", "ŀ"); // "lmidot"
-		HTMLCHARS.put("L", "Ł"); // "Lstrok"
-		HTMLCHARS.put("l", "ł"); // "lstrok"
-		HTMLCHARS.put("'N", "Ń"); // "Nacute"
-		HTMLCHARS.put("'n", "ń"); // "nacute"
-		HTMLCHARS.put("cN", "Ņ"); // "Ncedil"
-		HTMLCHARS.put("cn", "ņ"); // "ncedil"
-		HTMLCHARS.put("vN", "Ň"); // "Ncaron"
-		HTMLCHARS.put("vn", "ň"); // "ncaron"
-		// Symbol #329 (�n) has no special Latex command
-		HTMLCHARS.put("NG", "Ŋ"); // "ENG"
-		HTMLCHARS.put("ng", "ŋ"); // "eng"
-		HTMLCHARS.put("=O", "Ō"); // "Omacr"
-		HTMLCHARS.put("=o", "ō"); // "omacr"
-		HTMLCHARS.put("uO", "Ŏ"); // "Obreve"
-		HTMLCHARS.put("uo", "ŏ"); // "obreve"
-		HTMLCHARS.put("HO", "Ő"); // "Odblac"
-		HTMLCHARS.put("Ho", "ő"); // "odblac"
-		HTMLCHARS.put("OE", "Œ"); // "OElig"
-		HTMLCHARS.put("oe", "œ"); // "oelig"
-		HTMLCHARS.put("'R", "Ŕ"); // "Racute"
-		HTMLCHARS.put("'r", "ŕ"); // "racute"
-		HTMLCHARS.put("cR", "Ŗ"); // "Rcedil"
-		HTMLCHARS.put("cr", "ŗ"); // "rcedil"
-		HTMLCHARS.put("vR", "Ř"); // "Rcaron"
-		HTMLCHARS.put("vr", "ř"); // "rcaron"
-		HTMLCHARS.put("'S", "Ś"); // "Sacute"
-		HTMLCHARS.put("'s", "ś"); // "sacute"
-		HTMLCHARS.put("^S", "Ŝ"); // "Scirc"
-		HTMLCHARS.put("^s", "ŝ"); // "scirc"
-		HTMLCHARS.put("cS", "Ş"); // "Scedil"
-		HTMLCHARS.put("cs", "ş"); // "scedil"
-		HTMLCHARS.put("vS", "Š"); // "Scaron"
-		HTMLCHARS.put("vs", "š"); // "scaron"
-		HTMLCHARS.put("cT", "Ţ"); // "Tcedil"
-		HTMLCHARS.put("ct", "ţ"); // "tcedil"
-		HTMLCHARS.put("vT", "Ť"); // "Tcaron"
-		// Symbol #357 (t�) has no special Latex command
-		HTMLCHARS.put("Tstrok", "Ŧ"); // "Tstrok"
-		HTMLCHARS.put("tstrok", "ŧ"); // "tstrok"
-		HTMLCHARS.put("~U", "Ũ"); // "Utilde"
-		HTMLCHARS.put("~u", "ũ"); // "utilde"
-		HTMLCHARS.put("=U", "Ū"); // "Umacr"
-		HTMLCHARS.put("=u", "ū"); // "umacr"
-		HTMLCHARS.put("uU", "Ŭ"); // "Ubreve"
-		HTMLCHARS.put("uu", "ŭ"); // "ubreve"
-		HTMLCHARS.put("rU", "Ů"); // "Uring"
-		HTMLCHARS.put("ru", "ů"); // "uring"
-		HTMLCHARS.put("HU", "Ű"); // "Odblac"
-		HTMLCHARS.put("Hu", "ű"); // "odblac"
-		HTMLCHARS.put("kU", "Ų"); // "Uogon"
-		HTMLCHARS.put("ku", "ų"); // "uogon"
-		HTMLCHARS.put("^W", "Ŵ"); // "Wcirc"
-		HTMLCHARS.put("^w", "ŵ"); // "wcirc"
-		HTMLCHARS.put("^Y", "Ŷ"); // "Ycirc"
-		HTMLCHARS.put("^y", "ŷ"); // "ycirc"
-		HTMLCHARS.put("\"Y", "Ÿ"); // "Yuml"
-		HTMLCHARS.put("'Z", "Ź"); // "Zacute"
-		HTMLCHARS.put("'z", "ź"); // "zacute"
-		HTMLCHARS.put(".Z", "Ż"); // "Zdot"
-		HTMLCHARS.put(".z", "ż"); // "zdot"
-		HTMLCHARS.put("vZ", "Ž"); // "Zcaron"
-		HTMLCHARS.put("vz", "ž"); // "zcaron"
-		// Symbol #383 (f) has no special Latex command
-        HTMLCHARS.put("%", "%"); // percent sign
-
-        XML_CHARS.put("\\{\\\\\\\"\\{a\\}\\}", "&#x00E4;");
-        XML_CHARS.put("\\{\\\\\\\"\\{A\\}\\}", "&#x00C4;");
-        XML_CHARS.put("\\{\\\\\\\"\\{e\\}\\}", "&#x00EB;");
-        XML_CHARS.put("\\{\\\\\\\"\\{E\\}\\}", "&#x00CB;");
-        XML_CHARS.put("\\{\\\\\\\"\\{i\\}\\}", "&#x00EF;");
-        XML_CHARS.put("\\{\\\\\\\"\\{I\\}\\}", "&#x00CF;");
-        XML_CHARS.put("\\{\\\\\\\"\\{o\\}\\}", "&#x00F6;");
-        XML_CHARS.put("\\{\\\\\\\"\\{O\\}\\}", "&#x00D6;");
-        XML_CHARS.put("\\{\\\\\\\"\\{u\\}\\}", "&#x00FC;");
-        XML_CHARS.put("\\{\\\\\\\"\\{U\\}\\}", "&#x00DC;");
-
-        //next 2 rows were missing...
-        XML_CHARS.put("\\{\\\\\\`\\{a\\}\\}", "&#x00E0;");
-        XML_CHARS.put("\\{\\\\\\`\\{A\\}\\}", "&#x00C0;");
-
-        XML_CHARS.put("\\{\\\\\\`\\{e\\}\\}", "&#x00E8;");
-        XML_CHARS.put("\\{\\\\\\`\\{E\\}\\}", "&#x00C8;");
-        XML_CHARS.put("\\{\\\\\\`\\{i\\}\\}", "&#x00EC;");
-        XML_CHARS.put("\\{\\\\\\`\\{I\\}\\}", "&#x00CC;");
-        XML_CHARS.put("\\{\\\\\\`\\{o\\}\\}", "&#x00F2;");
-        XML_CHARS.put("\\{\\\\\\`\\{O\\}\\}", "&#x00D2;");
-        XML_CHARS.put("\\{\\\\\\`\\{u\\}\\}", "&#x00F9;");
-        XML_CHARS.put("\\{\\\\\\`\\{U\\}\\}", "&#x00D9;");
- 
-        //corrected these 10 lines below...
-        XML_CHARS.put("\\{\\\\\\'\\{a\\}\\}", "&#x00E1;");
-        XML_CHARS.put("\\{\\\\\\'\\{A\\}\\}", "&#x00C1;");
-        XML_CHARS.put("\\{\\\\\\'\\{e\\}\\}", "&#x00E9;");
-        XML_CHARS.put("\\{\\\\\\'\\{E\\}\\}", "&#x00C9;");
-        XML_CHARS.put("\\{\\\\\\'\\{i\\}\\}", "&#x00ED;");
-        XML_CHARS.put("\\{\\\\\\'\\{I\\}\\}", "&#x00CD;");
-        XML_CHARS.put("\\{\\\\\\'\\{o\\}\\}", "&#x00F3;");
-        XML_CHARS.put("\\{\\\\\\'\\{O\\}\\}", "&#x00D3;");
-        XML_CHARS.put("\\{\\\\\\'\\{u\\}\\}", "&#x00FA;");
-        XML_CHARS.put("\\{\\\\\\'\\{U\\}\\}", "&#x00DA;");
-        //added next four chars...
-        XML_CHARS.put("\\{\\\\\\'\\{c\\}\\}", "&#x0107;");
-        XML_CHARS.put("\\{\\\\\\'\\{C\\}\\}", "&#x0106;");
-        XML_CHARS.put("\\{\\\\c\\{c\\}\\}", "&#x00E7;");
-        XML_CHARS.put("\\{\\\\c\\{C\\}\\}", "&#x00C7;");
-
-        XML_CHARS.put("\\{\\\\\\\uFFFD\\{E\\}\\}", "&#x00C9;");
-        XML_CHARS.put("\\{\\\\\\\uFFFD\\{i\\}\\}", "&#x00ED;");
-        XML_CHARS.put("\\{\\\\\\\uFFFD\\{I\\}\\}", "&#x00CD;");
-        XML_CHARS.put("\\{\\\\\\\uFFFD\\{o\\}\\}", "&#x00F3;");
-        XML_CHARS.put("\\{\\\\\\\uFFFD\\{O\\}\\}", "&#x00D3;");
-        XML_CHARS.put("\\{\\\\\\\uFFFD\\{u\\}\\}", "&#x00FA;");
-        XML_CHARS.put("\\{\\\\\\\uFFFD\\{U\\}\\}", "&#x00DA;");
-        XML_CHARS.put("\\{\\\\\\\uFFFD\\{a\\}\\}", "&#x00E1;");
-        XML_CHARS.put("\\{\\\\\\\uFFFD\\{A\\}\\}", "&#x00C1;");
-
-        //next 2 rows were missing...
-        XML_CHARS.put("\\{\\\\\\^\\{a\\}\\}", "&#x00E2;");
-        XML_CHARS.put("\\{\\\\\\^\\{A\\}\\}", "&#x00C2;");
-
-        XML_CHARS.put("\\{\\\\\\^\\{o\\}\\}", "&#x00F4;");
-        XML_CHARS.put("\\{\\\\\\^\\{O\\}\\}", "&#x00D4;");
-        XML_CHARS.put("\\{\\\\\\^\\{u\\}\\}", "&#x00F9;");
-        XML_CHARS.put("\\{\\\\\\^\\{U\\}\\}", "&#x00D9;");
-        XML_CHARS.put("\\{\\\\\\^\\{e\\}\\}", "&#x00EA;");
-        XML_CHARS.put("\\{\\\\\\^\\{E\\}\\}", "&#x00CA;");
-        XML_CHARS.put("\\{\\\\\\^\\{i\\}\\}", "&#x00EE;");
-        XML_CHARS.put("\\{\\\\\\^\\{I\\}\\}", "&#x00CE;");
-
-        XML_CHARS.put("\\{\\\\\\~\\{o\\}\\}", "&#x00F5;");
-        XML_CHARS.put("\\{\\\\\\~\\{O\\}\\}", "&#x00D5;");
-        XML_CHARS.put("\\{\\\\\\~\\{n\\}\\}", "&#x00F1;");
-        XML_CHARS.put("\\{\\\\\\~\\{N\\}\\}", "&#x00D1;");
-        XML_CHARS.put("\\{\\\\\\~\\{a\\}\\}", "&#x00E3;");
-        XML_CHARS.put("\\{\\\\\\~\\{A\\}\\}", "&#x00C3;");
-
-        XML_CHARS.put("\\{\\\\\\\"a\\}", "&#x00E4;");
-        XML_CHARS.put("\\{\\\\\\\"A\\}", "&#x00C4;");
-        XML_CHARS.put("\\{\\\\\\\"e\\}", "&#x00EB;");
-        XML_CHARS.put("\\{\\\\\\\"E\\}", "&#x00CB;");
-        XML_CHARS.put("\\{\\\\\\\"i\\}", "&#x00EF;");
-        XML_CHARS.put("\\{\\\\\\\"I\\}", "&#x00CF;");
-        XML_CHARS.put("\\{\\\\\\\"o\\}", "&#x00F6;");
-        XML_CHARS.put("\\{\\\\\\\"O\\}", "&#x00D6;");
-        XML_CHARS.put("\\{\\\\\\\"u\\}", "&#x00FC;");
-        XML_CHARS.put("\\{\\\\\\\"U\\}", "&#x00DC;");
-
-        //next 2 rows were missing...
-        XML_CHARS.put("\\{\\\\\\`a\\}", "&#x00E0;");
-        XML_CHARS.put("\\{\\\\\\`A\\}", "&#x00C0;");
-
-        XML_CHARS.put("\\{\\\\\\`e\\}", "&#x00E8;");
-        XML_CHARS.put("\\{\\\\\\`E\\}", "&#x00C8;");
-        XML_CHARS.put("\\{\\\\\\`i\\}", "&#x00EC;");
-        XML_CHARS.put("\\{\\\\\\`I\\}", "&#x00CC;");
-        XML_CHARS.put("\\{\\\\\\`o\\}", "&#x00F2;");
-        XML_CHARS.put("\\{\\\\\\`O\\}", "&#x00D2;");
-        XML_CHARS.put("\\{\\\\\\`u\\}", "&#x00F9;");
-        XML_CHARS.put("\\{\\\\\\`U\\}", "&#x00D9;");
-        XML_CHARS.put("\\{\\\\\\'e\\}", "&#x00E9;");
-        XML_CHARS.put("\\{\\\\\\'E\\}", "&#x00C9;");
-        XML_CHARS.put("\\{\\\\\\'i\\}", "&#x00ED;");
-        XML_CHARS.put("\\{\\\\\\'I\\}", "&#x00CD;");
-        XML_CHARS.put("\\{\\\\\\'o\\}", "&#x00F3;");
-        XML_CHARS.put("\\{\\\\\\'O\\}", "&#x00D3;");
-        XML_CHARS.put("\\{\\\\\\'u\\}", "&#x00FA;");
-        XML_CHARS.put("\\{\\\\\\'U\\}", "&#x00DA;");
-        XML_CHARS.put("\\{\\\\\\'a\\}", "&#x00E1;");
-        XML_CHARS.put("\\{\\\\\\'A\\}", "&#x00C1;");
-        //added next two chars...
-        XML_CHARS.put("\\{\\\\\\'c\\}", "&#x0107;");
-        XML_CHARS.put("\\{\\\\\\'C\\}", "&#x0106;");
-
-        //next two lines were wrong...
-        XML_CHARS.put("\\{\\\\\\^a\\}", "&#x00E2;");
-        XML_CHARS.put("\\{\\\\\\^A\\}", "&#x00C2;");
-
-        XML_CHARS.put("\\{\\\\\\^o\\}", "&#x00F4;");
-        XML_CHARS.put("\\{\\\\\\^O\\}", "&#x00D4;");
-        XML_CHARS.put("\\{\\\\\\^u\\}", "&#x00F9;");
-        XML_CHARS.put("\\{\\\\\\^U\\}", "&#x00D9;");
-        XML_CHARS.put("\\{\\\\\\^e\\}", "&#x00EA;");
-        XML_CHARS.put("\\{\\\\\\^E\\}", "&#x00CA;");
-        XML_CHARS.put("\\{\\\\\\^i\\}", "&#x00EE;");
-        XML_CHARS.put("\\{\\\\\\^I\\}", "&#x00CE;");
-        XML_CHARS.put("\\{\\\\\\~o\\}", "&#x00F5;");
-        XML_CHARS.put("\\{\\\\\\~O\\}", "&#x00D5;");
-        XML_CHARS.put("\\{\\\\\\~n\\}", "&#x00F1;");
-        XML_CHARS.put("\\{\\\\\\~N\\}", "&#x00D1;");
-        XML_CHARS.put("\\{\\\\\\~a\\}", "&#x00E3;");
-        XML_CHARS.put("\\{\\\\\\~A\\}", "&#x00C3;");
-
-		ASCII2XML_CHARS.put("<", "<");
-		ASCII2XML_CHARS.put("\"", """);
-		ASCII2XML_CHARS.put(">", ">");
-
-		UNICODE_CHARS.put("\u00C0", "A");
-		UNICODE_CHARS.put("\u00C1", "A");
-		UNICODE_CHARS.put("\u00C2", "A");
-		UNICODE_CHARS.put("\u00C3", "A");
-		UNICODE_CHARS.put("\u00C4", "Ae");
-		UNICODE_CHARS.put("\u00C5", "Aa");
-		UNICODE_CHARS.put("\u00C6", "Ae");
-		UNICODE_CHARS.put("\u00C7", "C");
-		UNICODE_CHARS.put("\u00C8", "E");
-		UNICODE_CHARS.put("\u00C9", "E");
-		UNICODE_CHARS.put("\u00CA", "E");
-		UNICODE_CHARS.put("\u00CB", "E");
-		UNICODE_CHARS.put("\u00CC", "I");
-		UNICODE_CHARS.put("\u00CD", "I");
-		UNICODE_CHARS.put("\u00CE", "I");
-		UNICODE_CHARS.put("\u00CF", "I");
-		UNICODE_CHARS.put("\u00D0", "D");
-		UNICODE_CHARS.put("\u00D1", "N");
-		UNICODE_CHARS.put("\u00D2", "O");
-		UNICODE_CHARS.put("\u00D3", "O");
-		UNICODE_CHARS.put("\u00D4", "O");
-		UNICODE_CHARS.put("\u00D5", "O");
-		UNICODE_CHARS.put("\u00D6", "Oe");
-		UNICODE_CHARS.put("\u00D8", "Oe");
-		UNICODE_CHARS.put("\u00D9", "U");
-		UNICODE_CHARS.put("\u00DA", "U");
-		UNICODE_CHARS.put("\u00DB", "U");
-		UNICODE_CHARS.put("\u00DC", "Ue"); // U umlaut ..
-		UNICODE_CHARS.put("\u00DD", "Y");
-		UNICODE_CHARS.put("\u00DF", "ss");
-		UNICODE_CHARS.put("\u00E0", "a");
-		UNICODE_CHARS.put("\u00E1", "a");
-		UNICODE_CHARS.put("\u00E2", "a");
-		UNICODE_CHARS.put("\u00E3", "a");
-		UNICODE_CHARS.put("\u00E4", "ae");
-		UNICODE_CHARS.put("\u00E5", "aa");
-		UNICODE_CHARS.put("\u00E6", "ae");
-		UNICODE_CHARS.put("\u00E7", "c");
-		UNICODE_CHARS.put("\u00E8", "e");
-		UNICODE_CHARS.put("\u00E9", "e");
-		UNICODE_CHARS.put("\u00EA", "e");
-		UNICODE_CHARS.put("\u00EB", "e");
-		UNICODE_CHARS.put("\u00EC", "i");
-		UNICODE_CHARS.put("\u00ED", "i");
-		UNICODE_CHARS.put("\u00EE", "i");
-		UNICODE_CHARS.put("\u00EF", "i");
-		UNICODE_CHARS.put("\u00F0", "o");
-		UNICODE_CHARS.put("\u00F1", "n");
-		UNICODE_CHARS.put("\u00F2", "o");
-		UNICODE_CHARS.put("\u00F3", "o");
-		UNICODE_CHARS.put("\u00F4", "o");
-		UNICODE_CHARS.put("\u00F5", "o");
-		UNICODE_CHARS.put("\u00F6", "oe");
-		UNICODE_CHARS.put("\u00F8", "oe");
-		UNICODE_CHARS.put("\u00F9", "u");
-		UNICODE_CHARS.put("\u00FA", "u");
-		UNICODE_CHARS.put("\u00FB", "u");
-		UNICODE_CHARS.put("\u00FC", "ue"); // u umlaut...
-		UNICODE_CHARS.put("\u00FD", "y");
-		UNICODE_CHARS.put("\u00FF", "y");
-		UNICODE_CHARS.put("\u0100", "A");
-		UNICODE_CHARS.put("\u0101", "a");
-		UNICODE_CHARS.put("\u0102", "A");
-		UNICODE_CHARS.put("\u0103", "a");
-		UNICODE_CHARS.put("\u0104", "A");
-		UNICODE_CHARS.put("\u0105", "a");
-		UNICODE_CHARS.put("\u0106", "C");
-		UNICODE_CHARS.put("\u0107", "c");
-		UNICODE_CHARS.put("\u0108", "C");
-		UNICODE_CHARS.put("\u0109", "c");
-		UNICODE_CHARS.put("\u010A", "C");
-		UNICODE_CHARS.put("\u010B", "c");
-		UNICODE_CHARS.put("\u010C", "C");
-		UNICODE_CHARS.put("\u010D", "c");
-		UNICODE_CHARS.put("\u010E", "D");
-		UNICODE_CHARS.put("\u010F", "d");
-		UNICODE_CHARS.put("\u0110", "D");
-		UNICODE_CHARS.put("\u0111", "d");
-		UNICODE_CHARS.put("\u0112", "E");
-		UNICODE_CHARS.put("\u0113", "e");
-		UNICODE_CHARS.put("\u0114", "E");
-		UNICODE_CHARS.put("\u0115", "e");
-		UNICODE_CHARS.put("\u0116", "E");
-		UNICODE_CHARS.put("\u0117", "e");
-		UNICODE_CHARS.put("\u0118", "E");
-		UNICODE_CHARS.put("\u0119", "e");
-		UNICODE_CHARS.put("\u011A", "E");
-		UNICODE_CHARS.put("\u011B", "e");
-		UNICODE_CHARS.put("\u011C", "G");
-		UNICODE_CHARS.put("\u011D", "g");
-		UNICODE_CHARS.put("\u011E", "G");
-		UNICODE_CHARS.put("\u011F", "g");
-		UNICODE_CHARS.put("\u0120", "G");
-		UNICODE_CHARS.put("\u0121", "g");
-		UNICODE_CHARS.put("\u0122", "G");
-		UNICODE_CHARS.put("\u0123", "g");
-		UNICODE_CHARS.put("\u0124", "H");
-		UNICODE_CHARS.put("\u0125", "h");
-		UNICODE_CHARS.put("\u0127", "h");
-		UNICODE_CHARS.put("\u0128", "I");
-		UNICODE_CHARS.put("\u0129", "i");
-		UNICODE_CHARS.put("\u012A", "I");
-		UNICODE_CHARS.put("\u012B", "i");
-		UNICODE_CHARS.put("\u012C", "I");
-		UNICODE_CHARS.put("\u012D", "i");
-		UNICODE_CHARS.put("\u012E", "I");
-		UNICODE_CHARS.put("\u012F", "i");
-		UNICODE_CHARS.put("\u0130", "I");
-		UNICODE_CHARS.put("\u0131", "i");
-		UNICODE_CHARS.put("\u0132", "IJ");
-		UNICODE_CHARS.put("\u0133", "ij");
-		UNICODE_CHARS.put("\u0134", "J");
-		UNICODE_CHARS.put("\u0135", "j");
-		UNICODE_CHARS.put("\u0136", "K");
-		UNICODE_CHARS.put("\u0137", "k");
-		UNICODE_CHARS.put("\u0138", "k");
-		UNICODE_CHARS.put("\u0139", "L");
-		UNICODE_CHARS.put("\u013A", "l");
-		UNICODE_CHARS.put("\u013B", "L");
-		UNICODE_CHARS.put("\u013C", "l");
-		UNICODE_CHARS.put("\u013D", "L");
-		UNICODE_CHARS.put("\u013E", "l");
-		UNICODE_CHARS.put("\u013F", "L");
-		UNICODE_CHARS.put("\u0140", "l");
-		UNICODE_CHARS.put("\u0141", "L");
-		UNICODE_CHARS.put("\u0142", "l");
-		UNICODE_CHARS.put("\u0143", "N");
-		UNICODE_CHARS.put("\u0144", "n");
-		UNICODE_CHARS.put("\u0145", "N");
-		UNICODE_CHARS.put("\u0146", "n");
-		UNICODE_CHARS.put("\u0147", "N");
-		UNICODE_CHARS.put("\u0148", "n");
-		UNICODE_CHARS.put("\u0149", "n");
-		UNICODE_CHARS.put("\u014A", "N");
-		UNICODE_CHARS.put("\u014B", "n");
-		UNICODE_CHARS.put("\u014C", "O");
-		UNICODE_CHARS.put("\u014D", "o");
-		UNICODE_CHARS.put("\u014E", "O");
-		UNICODE_CHARS.put("\u014F", "o");
-		UNICODE_CHARS.put("\u0150", "Oe");
-		UNICODE_CHARS.put("\u0151", "oe");
-		UNICODE_CHARS.put("\u0152", "OE");
-		UNICODE_CHARS.put("\u0153", "oe");
-		UNICODE_CHARS.put("\u0154", "R");
-		UNICODE_CHARS.put("\u0155", "r");
-		UNICODE_CHARS.put("\u0156", "R");
-		UNICODE_CHARS.put("\u0157", "r");
-		UNICODE_CHARS.put("\u0158", "R");
-		UNICODE_CHARS.put("\u0159", "r");
-		UNICODE_CHARS.put("\u015A", "S");
-		UNICODE_CHARS.put("\u015B", "s");
-		UNICODE_CHARS.put("\u015C", "S");
-		UNICODE_CHARS.put("\u015D", "s");
-		UNICODE_CHARS.put("\u015E", "S");
-		UNICODE_CHARS.put("\u015F", "s");
-		UNICODE_CHARS.put("\u0160", "S");
-		UNICODE_CHARS.put("\u0161", "s");
-		UNICODE_CHARS.put("\u0162", "T");
-		UNICODE_CHARS.put("\u0163", "t");
-		UNICODE_CHARS.put("\u0164", "T");
-		UNICODE_CHARS.put("\u0165", "t");
-		UNICODE_CHARS.put("\u0166", "T");
-		UNICODE_CHARS.put("\u0167", "t");
-		UNICODE_CHARS.put("\u0168", "U");
-		UNICODE_CHARS.put("\u0169", "u");
-		UNICODE_CHARS.put("\u016A", "U");
-		UNICODE_CHARS.put("\u016B", "u");
-		UNICODE_CHARS.put("\u016C", "U");
-		UNICODE_CHARS.put("\u016D", "u");
-		UNICODE_CHARS.put("\u016E", "UU");
-		UNICODE_CHARS.put("\u016F", "uu");
-		UNICODE_CHARS.put("\u0170", "Ue");
-		UNICODE_CHARS.put("\u0171", "ue");
-		UNICODE_CHARS.put("\u0172", "U");
-		UNICODE_CHARS.put("\u0173", "u");
-		UNICODE_CHARS.put("\u0174", "W");
-		UNICODE_CHARS.put("\u0175", "w");
-		UNICODE_CHARS.put("\u0176", "Y");
-		UNICODE_CHARS.put("\u0177", "y");
-		UNICODE_CHARS.put("\u0178", "Y");
-		UNICODE_CHARS.put("\u0179", "Z");
-		UNICODE_CHARS.put("\u017A", "z");
-		UNICODE_CHARS.put("\u017B", "Z");
-		UNICODE_CHARS.put("\u017C", "z");
-		UNICODE_CHARS.put("\u017D", "Z");
-		UNICODE_CHARS.put("\u017E", "z");
-		UNICODE_CHARS.put("\u1EBC", "E");
-		UNICODE_CHARS.put("\u1EBD", "e");
-		UNICODE_CHARS.put("\u1EF8", "Y");
-		UNICODE_CHARS.put("\u1EF9", "y");
-		UNICODE_CHARS.put("\u01CD", "A");
-		UNICODE_CHARS.put("\u01CE", "a");
-		UNICODE_CHARS.put("\u01CF", "I");
-		UNICODE_CHARS.put("\u01D0", "i");
-		UNICODE_CHARS.put("\u01D1", "O");
-		UNICODE_CHARS.put("\u01D2", "o");
-		UNICODE_CHARS.put("\u01D3", "U");
-		UNICODE_CHARS.put("\u01D4", "u");
-		UNICODE_CHARS.put("\u0232", "Y");
-		UNICODE_CHARS.put("\u0233", "y");
-		UNICODE_CHARS.put("\u01EA", "O");
-		UNICODE_CHARS.put("\u01EB", "o");
-		UNICODE_CHARS.put("\u1E0C", "D");
-		UNICODE_CHARS.put("\u1E0D", "d");
-		UNICODE_CHARS.put("\u1E24", "H");
-		UNICODE_CHARS.put("\u1E25", "h");
-		UNICODE_CHARS.put("\u1E36", "L");
-		UNICODE_CHARS.put("\u1E37", "l");
-		UNICODE_CHARS.put("\u1E38", "L");
-		UNICODE_CHARS.put("\u1E39", "l");
-		UNICODE_CHARS.put("\u1E42", "M");
-		UNICODE_CHARS.put("\u1E43", "m");
-		UNICODE_CHARS.put("\u1E46", "N");
-		UNICODE_CHARS.put("\u1E47", "n");
-		UNICODE_CHARS.put("\u1E5A", "R");
-		UNICODE_CHARS.put("\u1E5B", "r");
-		UNICODE_CHARS.put("\u1E5C", "R");
-		UNICODE_CHARS.put("\u1E5D", "r");
-		UNICODE_CHARS.put("\u1E62", "S");
-		UNICODE_CHARS.put("\u1E63", "s");
-		UNICODE_CHARS.put("\u1E6C", "T");
-		UNICODE_CHARS.put("\u1E6D", "t");
-		UNICODE_CHARS.put("\u00CF", "I");
-		
-		
-        UNICODE_CHARS.put("\u008C", "AE"); // doesn't work?
-        UNICODE_CHARS.put("\u016E", "U");
-        UNICODE_CHARS.put("\u016F", "u");
-
-        UNICODE_CHARS.put("\u0178", "Y");
-        UNICODE_CHARS.put("\u00FE", ""); // thorn character
-        
-        // UNICODE_CHARS.put("\u0100", "");
-
-		RTFCHARS.put("`a", "\\'e0");
-		RTFCHARS.put("`e", "\\'e8");
-		RTFCHARS.put("`i", "\\'ec");
-		RTFCHARS.put("`o", "\\'f2");
-		RTFCHARS.put("`u", "\\'f9");
-		RTFCHARS.put("?a", "\\'e1");
-		RTFCHARS.put("?e", "\\'e9");
-		RTFCHARS.put("?i", "\\'ed");
-		RTFCHARS.put("?o", "\\'f3");
-		RTFCHARS.put("?u", "\\'fa");
-		RTFCHARS.put("^a", "\\'e2");
-		RTFCHARS.put("^e", "\\'ea");
-		RTFCHARS.put("^i", "\\'ee");
-		RTFCHARS.put("^o", "\\'f4");
-		RTFCHARS.put("^u", "\\'fa");
-		RTFCHARS.put("\"a", "\\'e4");
-		RTFCHARS.put("\"e", "\\'eb");
-		RTFCHARS.put("\"i", "\\'ef");
-        RTFCHARS.put("\"o", "\\'f6");
-		RTFCHARS.put("\"u", "\\u252u");
-		RTFCHARS.put("~n", "\\'f1");
-		RTFCHARS.put("`A", "\\'c0");
-		RTFCHARS.put("`E", "\\'c8");
-		RTFCHARS.put("`I", "\\'cc");
-		RTFCHARS.put("`O", "\\'d2");
-		RTFCHARS.put("`U", "\\'d9");
-		RTFCHARS.put("?A", "\\'c1");
-		RTFCHARS.put("?E", "\\'c9");
-		RTFCHARS.put("?I", "\\'cd");
-		RTFCHARS.put("?O", "\\'d3");
-		RTFCHARS.put("?U", "\\'da");
-		RTFCHARS.put("^A", "\\'c2");
-		RTFCHARS.put("^E", "\\'ca");
-		RTFCHARS.put("^I", "\\'ce");
-		RTFCHARS.put("^O", "\\'d4");
-		RTFCHARS.put("^U", "\\'db");
-		RTFCHARS.put("\"A", "\\'c4");
-		RTFCHARS.put("\"E", "\\'cb");
-		RTFCHARS.put("\"I", "\\'cf");
-		RTFCHARS.put("\"O", "\\'d6");
-		RTFCHARS.put("\"U", "\\'dc");
-		
-		// Use UNICODE characters for RTF-Chars which can not be found in the
-		// standard codepage
-
-		// RTFCHARS.put("`A", "\\u192"); // "Agrave" exists in standard
-		// codepage
-		RTFCHARS.put("'A", "\\u193A"); // "Aacute"
-		// RTFCHARS.put("^A", "\\u194"); // "Acirc" exists in standard
-		// codepage
-		RTFCHARS.put("~A", "\\u195A"); // "Atilde"
-		// RTFCHARS.put("\"A", "\\u196"); // "Auml" exists in standard
-		// codepage
-		RTFCHARS.put("AA", "\\u197A"); // "Aring"
-		RTFCHARS.put("AE", "{\\uc2\\u198AE}"); // "AElig"
-		RTFCHARS.put("cC", "\\u199C"); // "Ccedil"
-		// RTFCHARS.put("`E", "\\u200"); // "Egrave" exists in standard
-		// codepage
-		RTFCHARS.put("'E", "\\u201E"); // "Eacute"
-		// RTFCHARS.put("^E", "\\u202"); // "Ecirc" exists in standard
-		// codepage
-		// RTFCHARS.put("\"E", "\\u203"); // "Euml" exists in standard
-		// codepage
-		// RTFCHARS.put("`I", "\\u204"); // "Igrave" exists in standard
-		// codepage
-		RTFCHARS.put("'I", "\\u205I"); // "Iacute"
-		// RTFCHARS.put("^I", "\\u206"); // "Icirc" exists in standard
-		// codepage
-		// RTFCHARS.put("\"I", "\\u207"); // "Iuml" exists in standard
-		// codepage
-		RTFCHARS.put("DH", "\\u208D"); // "ETH"
-		RTFCHARS.put("~N", "\\u209N"); // "Ntilde"
-		// RTFCHARS.put("`O", "\\u210"); // "Ograve" exists in standard
-		// codepage
-		RTFCHARS.put("'O", "\\u211O"); // "Oacute"
-		// RTFCHARS.put("^O", "\\u212"); // "Ocirc" exists in standard
-		// codepage
-		RTFCHARS.put("~O", "\\u213O"); // "Otilde"
-		// RTFCHARS.put("\"O", "\\u214"); // "Ouml" exists in standard
-		// codepage
-		// According to ISO 8859-1 the "\times" symbol should be placed here
-		// (#215).
-		// Omitting this, because it is a mathematical symbol.
-		//RTFCHARS.put("O", "\\u216O"); // "Oslash"
-        RTFCHARS.put("O", "\\'d8");
-        RTFCHARS.put("o", "\\'f8");
-		// RTFCHARS.put("`U", "\\u217"); // "Ugrave" exists in standard
-		// codepage
-		RTFCHARS.put("'U", "\\u218U"); // "Uacute"
-		// RTFCHARS.put("^U", "\\u219"); // "Ucirc" exists in standard
-		// codepage
-		// RTFCHARS.put("\"U", "\\u220"); // "Uuml" exists in standard
-		// codepage
-		RTFCHARS.put("'Y", "\\u221Y"); // "Yacute"
-		RTFCHARS.put("TH", "{\\uc2\\u222TH}"); // "THORN"
-		RTFCHARS.put("ss", "{\\uc2\\u223ss}"); // "szlig"
-        //RTFCHARS.put("ss", "AFFEN"); // "szlig"
-        // RTFCHARS.put("`a", "\\u224"); // "agrave" exists in standard
-		// codepage
-		RTFCHARS.put("'a", "\\u225a"); // "aacute"
-		// RTFCHARS.put("^a", "\\u226"); // "acirc" exists in standard
-		// codepage
-		RTFCHARS.put("~a", "\\u227a"); // "atilde"
-		// RTFCHARS.put("\"a", "\\u228"); // "auml" exists in standard
-		// codepage
-		RTFCHARS.put("aa", "\\u229a"); // "aring"
-		RTFCHARS.put("ae", "{\\uc2\\u230ae}"); // "aelig"
-		RTFCHARS.put("cc", "\\u231c"); // "ccedil"
-		// RTFCHARS.put("`e", "\\u232"); // "egrave" exists in standard
-		// codepage
-		RTFCHARS.put("'e", "\\u233e"); // "eacute"
-		// RTFCHARS.put("^e", "\\u234"); // "ecirc" exists in standard
-		// codepage
-		// RTFCHARS.put("\"e", "\\u235"); // "euml" exists in standard
-		// codepage
-		// RTFCHARS.put("`i", "\\u236"); // "igrave" exists in standard
-		// codepage
-		RTFCHARS.put("'i", "\\u237i"); // "iacute"
-		// RTFCHARS.put("^i", "\\u238"); // "icirc" exists in standard
-		// codepage
-		// RTFCHARS.put("\"i", "\\u239"); // "iuml" exists in standard
-		// codepage
-		RTFCHARS.put("dh", "\\u240d"); // "eth"
-		// RTFCHARS.put("~n", "\\u241"); // "ntilde" exists in standard
-		// codepage
-		// RTFCHARS.put("`o", "\\u242"); // "ograve" exists in standard
-		// codepage
-		RTFCHARS.put("'o", "\\u243o"); // "oacute"
-		// RTFCHARS.put("^o", "\\u244"); // "ocirc" exists in standard
-		// codepage
-		RTFCHARS.put("~o", "\\u245o"); // "otilde"
-		// RTFCHARS.put("\"o", "\\u246"); // "ouml" exists in standard
-		// codepage
-		// According to ISO 8859-1 the "\div" symbol should be placed here
-		// (#247).
-		// Omitting this, because it is a mathematical symbol.
-		//RTFCHARS.put("o", "\\u248o"); // "oslash"
-		// RTFCHARS.put("`u", "\\u249"); // "ugrave" exists in standard
-		// codepage
-		RTFCHARS.put("'u", "\\u250u"); // "uacute"
-		// RTFCHARS.put("^u", "\\u251"); // "ucirc" exists in standard
-		// codepage
-		// RTFCHARS.put("\"u", "\\u252"); // "uuml" exists in standard
-		// codepage
-		RTFCHARS.put("'y", "\\u253y"); // "yacute"
-		RTFCHARS.put("th", "{\\uc2\\u254th}"); // "thorn"
-		RTFCHARS.put("\"y", "\\u255y"); // "yuml"
-
-		RTFCHARS.put("=A", "\\u256A"); // "Amacr"
-		RTFCHARS.put("=a", "\\u257a"); // "amacr"
-		RTFCHARS.put("uA", "\\u258A"); // "Abreve"
-		RTFCHARS.put("ua", "\\u259a"); // "abreve"
-		RTFCHARS.put("kA", "\\u260A"); // "Aogon"
-		RTFCHARS.put("ka", "\\u261a"); // "aogon"
-		RTFCHARS.put("'C", "\\u262C"); // "Cacute"
-		RTFCHARS.put("'c", "\\u263c"); // "cacute"
-		RTFCHARS.put("^C", "\\u264C"); // "Ccirc"
-		RTFCHARS.put("^c", "\\u265c"); // "ccirc"
-		RTFCHARS.put(".C", "\\u266C"); // "Cdot"
-		RTFCHARS.put(".c", "\\u267c"); // "cdot"
-		RTFCHARS.put("vC", "\\u268C"); // "Ccaron"
-		RTFCHARS.put("vc", "\\u269c"); // "ccaron"
-		RTFCHARS.put("vD", "\\u270D"); // "Dcaron"
-		// Symbol #271 (d�) has no special Latex command
-		RTFCHARS.put("DJ", "\\u272D"); // "Dstrok"
-		RTFCHARS.put("dj", "\\u273d"); // "dstrok"
-		RTFCHARS.put("=E", "\\u274E"); // "Emacr"
-		RTFCHARS.put("=e", "\\u275e"); // "emacr"
-		RTFCHARS.put("uE", "\\u276E"); // "Ebreve"
-		RTFCHARS.put("ue", "\\u277e"); // "ebreve"
-		RTFCHARS.put(".E", "\\u278E"); // "Edot"
-		RTFCHARS.put(".e", "\\u279e"); // "edot"
-		RTFCHARS.put("kE", "\\u280E"); // "Eogon"
-		RTFCHARS.put("ke", "\\u281e"); // "eogon"
-		RTFCHARS.put("vE", "\\u282E"); // "Ecaron"
-		RTFCHARS.put("ve", "\\u283e"); // "ecaron"
-		RTFCHARS.put("^G", "\\u284G"); // "Gcirc"
-		RTFCHARS.put("^g", "\\u285g"); // "gcirc"
-		RTFCHARS.put("uG", "\\u286G"); // "Gbreve"
-		RTFCHARS.put("ug", "\\u287g"); // "gbreve"
-		RTFCHARS.put(".G", "\\u288G"); // "Gdot"
-		RTFCHARS.put(".g", "\\u289g"); // "gdot"
-		RTFCHARS.put("cG", "\\u290G"); // "Gcedil"
-		RTFCHARS.put("'g", "\\u291g"); // "gacute"
-		RTFCHARS.put("^H", "\\u292H"); // "Hcirc"
-		RTFCHARS.put("^h", "\\u293h"); // "hcirc"
-		RTFCHARS.put("Hstrok", "\\u294H"); // "Hstrok"
-		RTFCHARS.put("hstrok", "\\u295h"); // "hstrok"
-		RTFCHARS.put("~I", "\\u296I"); // "Itilde"
-		RTFCHARS.put("~i", "\\u297i"); // "itilde"
-		RTFCHARS.put("=I", "\\u298I"); // "Imacr"
-		RTFCHARS.put("=i", "\\u299i"); // "imacr"
-		RTFCHARS.put("uI", "\\u300I"); // "Ibreve"
-		RTFCHARS.put("ui", "\\u301i"); // "ibreve"
-		RTFCHARS.put("kI", "\\u302I"); // "Iogon"
-		RTFCHARS.put("ki", "\\u303i"); // "iogon"
-		RTFCHARS.put(".I", "\\u304I"); // "Idot"
-		RTFCHARS.put("i", "\\u305i"); // "inodot"
-		// Symbol #306 (IJ) has no special Latex command
-		// Symbol #307 (ij) has no special Latex command
-		RTFCHARS.put("^J", "\\u308J"); // "Jcirc"
-		RTFCHARS.put("^j", "\\u309j"); // "jcirc"
-		RTFCHARS.put("cK", "\\u310K"); // "Kcedil"
-		RTFCHARS.put("ck", "\\u311k"); // "kcedil"
-		// Symbol #312 (k) has no special Latex command
-		RTFCHARS.put("'L", "\\u313L"); // "Lacute"
-		RTFCHARS.put("'l", "\\u314l"); // "lacute"
-		RTFCHARS.put("cL", "\\u315L"); // "Lcedil"
-		RTFCHARS.put("cl", "\\u316l"); // "lcedil"
-		// Symbol #317 (L�) has no special Latex command
-		// Symbol #318 (l�) has no special Latex command
-		RTFCHARS.put("Lmidot", "\\u319L"); // "Lmidot"
-		RTFCHARS.put("lmidot", "\\u320l"); // "lmidot"
-		RTFCHARS.put("L", "\\u321L"); // "Lstrok"
-		RTFCHARS.put("l", "\\u322l"); // "lstrok"
-		RTFCHARS.put("'N", "\\u323N"); // "Nacute"
-		RTFCHARS.put("'n", "\\u324n"); // "nacute"
-		RTFCHARS.put("cN", "\\u325N"); // "Ncedil"
-		RTFCHARS.put("cn", "\\u326n"); // "ncedil"
-		RTFCHARS.put("vN", "\\u327N"); // "Ncaron"
-		RTFCHARS.put("vn", "\\u328n"); // "ncaron"
-		// Symbol #329 (�n) has no special Latex command
-		RTFCHARS.put("NG", "\\u330G"); // "ENG"
-		RTFCHARS.put("ng", "\\u331g"); // "eng"
-		RTFCHARS.put("=O", "\\u332O"); // "Omacr"
-		RTFCHARS.put("=o", "\\u333o"); // "omacr"
-		RTFCHARS.put("uO", "\\u334O"); // "Obreve"
-		RTFCHARS.put("uo", "\\u335o"); // "obreve"
-		RTFCHARS.put("HO", "\\u336?"); // "Odblac"
-		RTFCHARS.put("Ho", "\\u337?"); // "odblac"
-		RTFCHARS.put("OE", "{\\uc2\\u338OE}"); // "OElig"
-		RTFCHARS.put("oe", "{\\uc2\\u339oe}"); // "oelig"
-		RTFCHARS.put("'R", "\\u340R"); // "Racute"
-		RTFCHARS.put("'r", "\\u341r"); // "racute"
-		RTFCHARS.put("cR", "\\u342R"); // "Rcedil"
-		RTFCHARS.put("cr", "\\u343r"); // "rcedil"
-		RTFCHARS.put("vR", "\\u344R"); // "Rcaron"
-		RTFCHARS.put("vr", "\\u345r"); // "rcaron"
-		RTFCHARS.put("'S", "\\u346S"); // "Sacute"
-		RTFCHARS.put("'s", "\\u347s"); // "sacute"
-		RTFCHARS.put("^S", "\\u348S"); // "Scirc"
-		RTFCHARS.put("^s", "\\u349s"); // "scirc"
-		RTFCHARS.put("cS", "\\u350S"); // "Scedil"
-		RTFCHARS.put("cs", "\\u351s"); // "scedil"
-		RTFCHARS.put("vS", "\\u352S"); // "Scaron"
-		RTFCHARS.put("vs", "\\u353s"); // "scaron"
-		RTFCHARS.put("cT", "\\u354T"); // "Tcedil"
-		RTFCHARS.put("ct", "\\u355t"); // "tcedil"
-		RTFCHARS.put("vT", "\\u356T"); // "Tcaron"
-		// Symbol #357 (t�) has no special Latex command
-		RTFCHARS.put("Tstrok", "\\u358T"); // "Tstrok"
-		RTFCHARS.put("tstrok", "\\u359t"); // "tstrok"
-		RTFCHARS.put("~U", "\\u360U"); // "Utilde"
-		RTFCHARS.put("~u", "\\u361u"); // "utilde"
-		RTFCHARS.put("=U", "\\u362U"); // "Umacr"
-		RTFCHARS.put("=u", "\\u363u"); // "umacr"
-		RTFCHARS.put("uU", "\\u364U"); // "Ubreve"
-		RTFCHARS.put("uu", "\\u365u"); // "ubreve"
-		RTFCHARS.put("rU", "\\u366U"); // "Uring"
-		RTFCHARS.put("ru", "\\u367u"); // "uring"
-		RTFCHARS.put("HU", "\\u368?"); // "Odblac"
-		RTFCHARS.put("Hu", "\\u369?"); // "odblac"
-		RTFCHARS.put("kU", "\\u370U"); // "Uogon"
-		RTFCHARS.put("ku", "\\u371u"); // "uogon"
-		RTFCHARS.put("^W", "\\u372W"); // "Wcirc"
-		RTFCHARS.put("^w", "\\u373w"); // "wcirc"
-		RTFCHARS.put("^Y", "\\u374Y"); // "Ycirc"
-		RTFCHARS.put("^y", "\\u375y"); // "ycirc"
-		RTFCHARS.put("\"Y","\\u376Y"); // "Yuml"
-		RTFCHARS.put("'Z", "\\u377Z"); // "Zacute"
-		RTFCHARS.put("'z", "\\u378z"); // "zacute"
-		RTFCHARS.put(".Z", "\\u379Z"); // "Zdot"
-		RTFCHARS.put(".z", "\\u380z"); // "zdot"
-		RTFCHARS.put("vZ", "\\u381Z"); // "Zcaron"
-		RTFCHARS.put("vz", "\\u382z"); // "zcaron"
-		// Symbol #383 (f) has no special Latex command
-
-		// XML_CHARS.put("\\u00E1", "&#x00E1;");
-	}
-
-	public static void initializeJournalNames() {
-
-        // Read internal lists:
-        journalAbbrev = new JournalAbbreviations(JOURNALS_FILE_BUILTIN);
-		if (prefs.getBoolean("useIEEEAbrv"))
-			journalAbbrev.readJournalList("/resource/IEEEJournalList.txt");
-
-		// Read external lists, if any (in reverse order, so the upper lists
-		// override the lower):
-		String[] lists = prefs.getStringArray("externalJournalLists");
-		if ((lists != null) && (lists.length > 0)) {
-			for (int i = lists.length - 1; i >= 0; i--) {
-				try {
-					journalAbbrev.readJournalList(new File(lists[i]));
-				} catch (FileNotFoundException e) {
-					// The file couldn't be found... should we tell anyone?
-					Globals.logger(e.getMessage());
-				}
-			}
-		}
-
-		// Read personal list, if set up:
-		if (prefs.get("personalJournalList") != null) {
-			try {
-				journalAbbrev.readJournalList(new File(prefs.get("personalJournalList")));
-			} catch (FileNotFoundException e) {
-				Globals.logger("Personal journal list file '" + prefs.get("personalJournalList")
-					+ "' not found.");
-			}
-		}
-
-	}
-
-	/**
-	 * Returns a reg exp pattern in the form (w1)|(w2)| ...
-	 * wi are escaped if no regex search is enabled
-	 */
-	public static Pattern getPatternForWords(ArrayList<String> words) {
-		if ((words == null) || (words.isEmpty()) || (words.get(0).isEmpty()))
-			return Pattern.compile("");
-		
-		boolean regExSearch = Globals.prefs.getBoolean("regExpSearch");
-		
-		// compile the words to a regex in the form (w1) | (w2) | (w3)
-		String searchPattern = "(".concat(regExSearch?words.get(0):Pattern.quote(words.get(0))).concat(")");
-		for (int i = 1; i < words.size(); i++) {
-			searchPattern = searchPattern.concat("|(").concat(regExSearch?words.get(i):Pattern.quote(words.get(i))).concat(")");
-		}
-
-		Pattern pattern;
-		if (Globals.prefs.getBoolean("caseSensitiveSearch")) {
-			pattern = Pattern.compile(searchPattern);
-		} else {
-			pattern = Pattern.compile(searchPattern, Pattern.CASE_INSENSITIVE);
-		}
-		
-		return pattern;
-	}
-
-	/**
-	 * With Java 7, one could directly set a format for the SimpleFormatter
-	 * (http://stackoverflow.com/a/10722260/873282) and use that in a StreamHandler.
-	 * As JabRef is compatible with Java6, we have to write our own Handler
-	 */
-	private static class StdoutConsoleHandler extends Handler {
-
-		@Override
-        public void close() throws SecurityException {
-        }
-
-		@Override
-        public void flush() {
-			System.out.flush();
-        }
-
-		@Override
-        public void publish(LogRecord record) {
-	        System.out.println(record.getMessage());
-	        System.out.flush();
-        }
-	}
-
-	public static void setupLogging() {
-		// get the root logger. It is NOT GLOBAL_LOGGER_NAME
-	    Logger rootLogger = Logger.getLogger("");
-	    
-	    // disable console logging by removing all handlers
-	    Handler[] handlers = rootLogger.getHandlers();
-	    for(Handler handler : handlers) {
-	        rootLogger.removeHandler(handler);
-	    }
-
-	    // add new handler logging to System.out
-		StdoutConsoleHandler h = new StdoutConsoleHandler();
-		rootLogger.addHandler(h);
-
-		rootLogger.addHandler(errorConsole);
-    }
-
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.Toolkit;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Filter;
+import java.util.logging.Formatter;
+import java.util.logging.Handler;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+import java.util.logging.SimpleFormatter;
+import java.util.logging.StreamHandler;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.collab.FileUpdateMonitor;
+import net.sf.jabref.help.HelpDialog;
+import net.sf.jabref.imports.ImportFormatReader;
+import net.sf.jabref.journals.JournalAbbreviations;
+import net.sf.jabref.util.ErrorConsole;
+import net.sf.jabref.util.TBuildInfo;
+import net.sf.jabref.export.AutoSaveManager;
+
+
+public class Globals {
+
+	private static int SHORTCUT_MASK = -1;
+    public static int
+		FUTURE_YEAR = 2050, // Needs to give a year definitely in the future.
+		// Used for guessing the
+		// year field when parsing textual data. :-)
+
+		STANDARD_EXPORT_COUNT = 5, // The number of standard export formats.
+		METADATA_LINE_LENGTH = 70; // The line length used to wrap metadata.
+    
+    // used at highlighting in preview area. 
+    // Color chosen similar to JTextComponent.getSelectionColor(), which is
+    // used at highlighting words at the editor 
+    public static final String highlightColor = "#3399FF";
+
+	private static String resourcePrefix = "resource/JabRef", menuResourcePrefix = "resource/Menu",
+		integrityResourcePrefix = "resource/IntegrityMessage";
+
+	private static final String buildInfos = "/resource/build.properties";
+
+    public static String JOURNALS_FILE_BUILTIN = "/resource/journalList.txt";
+	/*
+	 * some extra field definitions
+	 */
+	public static final String additionalFields = "/resource/fields/fields.xml";
+
+	public static ResourceBundle messages, menuTitles, intMessages;
+
+	public static FileUpdateMonitor fileUpdateMonitor;
+
+	public static ImportFormatReader importFormatReader = new ImportFormatReader();
+
+	public static ErrorConsole errorConsole;
+
+	public static String VERSION, BUILD, BUILD_DATE;
+
+	static {
+		TBuildInfo bi = new TBuildInfo(buildInfos);
+		VERSION = bi.getBUILD_VERSION();
+		BUILD = bi.getBUILD_NUMBER();
+		BUILD_DATE = bi.getBUILD_DATE();
+
+	}
+
+	public static Locale locale;
+
+	public static final String FILETYPE_PREFS_EXT = "_dir", SELECTOR_META_PREFIX = "selector_",
+        PROTECTED_FLAG_META = "protectedFlag",
+        LAYOUT_PREFIX = "/resource/layout/", MAC = "Mac OS X",
+		DOI_LOOKUP_PREFIX = "http://dx.doi.org/", NONE = "_non__",
+		ARXIV_LOOKUP_PREFIX = "http://arxiv.org/abs/",
+		FORMATTER_PACKAGE = "net.sf.jabref.export.layout.format.";
+
+    private static Handler consoleHandler;
+
+	public static String[] ENCODINGS, ALL_ENCODINGS = // (String[])
+		// Charset.availableCharsets().keySet().toArray(new
+		// String[]{});
+		new String[] { "ISO8859_1", "UTF8", "UTF-16", "ASCII", "Cp1250", "Cp1251", "Cp1252",
+			"Cp1253", "Cp1254", "Cp1257", "SJIS",
+            "KOI8_R", // Cyrillic
+			"EUC_JP", // Added Japanese encodings.
+			"Big5", "Big5_HKSCS", "GBK", "ISO8859_2", "ISO8859_3", "ISO8859_4", "ISO8859_5",
+			"ISO8859_6", "ISO8859_7", "ISO8859_8", "ISO8859_9", "ISO8859_13", "ISO8859_15" };
+    public static Map<String,String> ENCODING_NAMES_LOOKUP;
+
+    // String array that maps from month number to month string label:
+	public static String[] MONTHS = new String[] { "jan", "feb", "mar", "apr", "may", "jun", "jul",
+		"aug", "sep", "oct", "nov", "dec" };
+	
+	// Map that maps from month string labels to
+	public static Map<String, String> MONTH_STRINGS = new HashMap<String, String>();
+	static {
+		MONTH_STRINGS.put("jan", "January");
+		MONTH_STRINGS.put("feb", "February");
+		MONTH_STRINGS.put("mar", "March");
+		MONTH_STRINGS.put("apr", "April");
+		MONTH_STRINGS.put("may", "May");
+		MONTH_STRINGS.put("jun", "June");
+		MONTH_STRINGS.put("jul", "July");
+		MONTH_STRINGS.put("aug", "August");
+		MONTH_STRINGS.put("sep", "September");
+		MONTH_STRINGS.put("oct", "October");
+		MONTH_STRINGS.put("nov", "November");
+		MONTH_STRINGS.put("dec", "December");
+
+		// Build list of encodings, by filtering out all that are not supported
+		// on this system:
+		List<String> encodings = new ArrayList<String>();
+		for (int i = 0; i < ALL_ENCODINGS.length; i++) {
+			if (Charset.isSupported(ALL_ENCODINGS[i])) {
+				encodings.add(ALL_ENCODINGS[i]);
+			}
+		}
+		ENCODINGS = encodings.toArray(new String[0]);
+        // Build a map for translating Java encoding names into common encoding names:
+        ENCODING_NAMES_LOOKUP = new HashMap<String,String>();
+        ENCODING_NAMES_LOOKUP.put("Cp1250", "windows-1250");
+        ENCODING_NAMES_LOOKUP.put("Cp1251", "windows-1251");
+        ENCODING_NAMES_LOOKUP.put("Cp1252", "windows-1252");
+        ENCODING_NAMES_LOOKUP.put("Cp1253", "windows-1253");
+        ENCODING_NAMES_LOOKUP.put("Cp1254", "windows-1254");
+        ENCODING_NAMES_LOOKUP.put("Cp1257", "windows-1257");
+        ENCODING_NAMES_LOOKUP.put("ISO8859_1", "ISO-8859-1");
+        ENCODING_NAMES_LOOKUP.put("ISO8859_2", "ISO-8859-2");
+        ENCODING_NAMES_LOOKUP.put("ISO8859_3", "ISO-8859-3");
+        ENCODING_NAMES_LOOKUP.put("ISO8859_4", "ISO-8859-4");
+        ENCODING_NAMES_LOOKUP.put("ISO8859_5", "ISO-8859-5");
+        ENCODING_NAMES_LOOKUP.put("ISO8859_6", "ISO-8859-6");
+        ENCODING_NAMES_LOOKUP.put("ISO8859_7", "ISO-8859-7");
+        ENCODING_NAMES_LOOKUP.put("ISO8859_8", "ISO-8859-8");
+        ENCODING_NAMES_LOOKUP.put("ISO8859_9", "ISO-8859-9");
+        ENCODING_NAMES_LOOKUP.put("ISO8859_13", "ISO-8859-13");
+        ENCODING_NAMES_LOOKUP.put("ISO8859_15", "ISO-8859-15");
+        ENCODING_NAMES_LOOKUP.put("KOI8_R", "KOI8-R");
+        ENCODING_NAMES_LOOKUP.put("UTF8", "UTF-8");
+        ENCODING_NAMES_LOOKUP.put("UTF-16", "UTF-16");
+        ENCODING_NAMES_LOOKUP.put("SJIS", "Shift_JIS");
+        ENCODING_NAMES_LOOKUP.put("GBK", "GBK");
+        ENCODING_NAMES_LOOKUP.put("Big5_HKSCS", "Big5-HKSCS");
+        ENCODING_NAMES_LOOKUP.put("Big5", "Big5");
+        ENCODING_NAMES_LOOKUP.put("EUC_JP", "EUC-JP");
+        ENCODING_NAMES_LOOKUP.put("ASCII", "US-ASCII");
+    }
+
+	public static GlobalFocusListener focusListener;
+
+    public static AutoSaveManager autoSaveManager = null;
+
+	public static JabRefPreferences prefs = null;
+
+	public static HelpDialog helpDiag = null;
+
+	public static final String osName = System.getProperty("os.name", "def");
+
+	public static final boolean ON_MAC = (osName.equals(MAC)), ON_WIN = osName.startsWith("Windows");
+
+	public static final String[] SKIP_WORDS = { "a", "an", "the", "for", "on", "of" };
+	
+	public static final String SEPARATING_CHARS         = ";,\n ";
+	public static final String SEPARATING_CHARS_NOSPACE = ";,\n";
+
+	public static SidePaneManager sidePaneManager;
+
+	public static final String NEWLINE = System.getProperty("line.separator");
+    public static final int NEWLINE_LENGTH = System.getProperty("line.separator").length();
+
+    // Instantiate logger:
+    private static Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
+
+    /**
+	 * true if we have unix newlines
+	 */
+	public static final boolean UNIX_NEWLINE = NEWLINE.equals("\n");
+
+	/**
+	 * 	"Fieldname" to indicate that a field should be treated as a bibtex 
+	 * string. Used when writing database to file.
+	 */
+	public static final String BIBTEX_STRING = "__string";
+
+    public static void startBackgroundTasks() {
+
+        focusListener = new GlobalFocusListener();
+
+        // TODO: Error console initialization here. When should it be used?
+		errorConsole = ErrorConsole.getInstance();
+
+        fileUpdateMonitor = new FileUpdateMonitor();
+        fileUpdateMonitor.start();
+
+
+    }
+
+    /**
+     * Initialize and start the autosave manager.
+     * @param frame The main frame.
+     */
+    public static void startAutoSaveManager(JabRefFrame frame) {
+        autoSaveManager = new AutoSaveManager(frame);
+        autoSaveManager.startAutoSaveTimer();        
+    }
+
+    /**
+     * Stop the autosave manager if it has been started.
+     */
+    public static void stopAutoSaveManager() {
+        if (autoSaveManager != null) {
+            autoSaveManager.stopAutoSaveTimer();
+            autoSaveManager.clearAutoSaves();
+            autoSaveManager = null;
+        }
+    }
+
+	public static void logger(String s) {
+		logger.info(s);
+	}
+
+	public static void turnOffLogging() { // only log exceptions
+		logger.setLevel(java.util.logging.Level.SEVERE);
+	}
+
+	/**
+	 * Should be only called once
+	 */
+	public static void turnOnConsoleLogging() {
+        consoleHandler = new java.util.logging.ConsoleHandler();
+		logger.addHandler(consoleHandler);
+	}
+
+	/**
+	 * Should be only called once
+	 */
+	public static void turnOnFileLogging() {
+		logger.setLevel(java.util.logging.Level.ALL);
+		java.util.logging.Handler handler;
+		handler = new ConsoleHandler();
+		logger.addHandler(handler);
+
+		handler.setFilter(new Filter() { // select what gets logged
+				public boolean isLoggable(LogRecord record) {
+					return true;
+				}
+			});
+	}
+
+	public static void setLanguage(String language, String country) {
+        locale = new Locale(language, country);
+		messages = ResourceBundle.getBundle(resourcePrefix, locale);
+		menuTitles = ResourceBundle.getBundle(menuResourcePrefix, locale);
+		intMessages = ResourceBundle.getBundle(integrityResourcePrefix, locale);
+        Locale.setDefault(locale);
+		javax.swing.JComponent.setDefaultLocale(locale);
+	}
+
+	public static JournalAbbreviations journalAbbrev;
+
+	public static String lang(String key, String[] params) {
+		String translation = null;
+		try {
+			if (Globals.messages != null) 
+				translation = Globals.messages.getString(key.replaceAll(" ", "_"));
+		} catch (MissingResourceException ex) {
+			//logger("Warning: could not get translation for \"" + key + "\"");
+		}
+		if (translation == null)
+			translation = key;
+
+		if ((translation != null) && (translation.length() != 0)) {
+			translation = translation.replaceAll("_", " ");
+			StringBuffer sb = new StringBuffer();
+			boolean b = false;
+			char c;
+			for (int i = 0; i < translation.length(); ++i) {
+				c = translation.charAt(i);
+				if (c == '%') {
+					b = true;
+				} else {
+					if (!b) {
+						sb.append(c);
+					} else {
+						b = false;
+						try {
+							int index = Integer.parseInt(String.valueOf(c));
+							if (params != null && index >= 0 && index <= params.length)
+								sb.append(params[index]);
+						} catch (NumberFormatException e) {
+							// append literally (for quoting) or insert special
+							// symbol
+							switch (c) {
+							case 'c': // colon
+								sb.append(':');
+								break;
+							case 'e': // equal
+								sb.append('=');
+								break;
+							default: // anything else, e.g. %
+								sb.append(c);
+							}
+						}
+					}
+				}
+			}
+			return sb.toString();
+		}
+		return key;
+	}
+
+	public static String lang(String key) {
+		return lang(key, (String[]) null);
+	}
+
+	public static String lang(String key, String s1) {
+		return lang(key, new String[] { s1 });
+	}
+
+	public static String lang(String key, String s1, String s2) {
+		return lang(key, new String[] { s1, s2 });
+	}
+
+	public static String lang(String key, String s1, String s2, String s3) {
+		return lang(key, new String[] { s1, s2, s3 });
+	}
+
+	public static String menuTitle(String key) {
+		String translation = null;
+		try {
+			if (Globals.messages != null) {
+				translation = Globals.menuTitles.getString(key.replaceAll(" ", "_"));
+			}
+		} catch (MissingResourceException ex) {
+			translation = key;
+		}
+		if ((translation != null) && (translation.length() != 0)) {
+			return translation.replaceAll("_", " ");
+		} else {
+			return key;
+		}
+	}
+
+	public static String getIntegrityMessage(String key) {
+		String translation = null;
+		try {
+			if (Globals.intMessages != null) {
+				translation = Globals.intMessages.getString(key);
+			}
+		} catch (MissingResourceException ex) {
+			translation = key;
+
+			// System.err.println("Warning: could not get menu item translation
+			// for \""
+			// + key + "\"");
+		}
+		if ((translation != null) && (translation.length() != 0)) {
+			return translation;
+		} else {
+			return key;
+		}
+	}
+
+	// ============================================================
+	// Using the hashmap of entry types found in BibtexEntryType
+	// ============================================================
+	public static BibtexEntryType getEntryType(String type) {
+		// decide which entryType object to return
+		Object o = BibtexEntryType.ALL_TYPES.get(type);
+		if (o != null) {
+			return (BibtexEntryType) o;
+		} else {
+			return BibtexEntryType.OTHER;
+		}
+		/*
+		 * if(type.equals("article")) return BibtexEntryType.ARTICLE; else
+		 * if(type.equals("book")) return BibtexEntryType.BOOK; else
+		 * if(type.equals("inproceedings")) return
+		 * BibtexEntryType.INPROCEEDINGS;
+		 */
+	}
+
+
+    public static String SPECIAL_COMMAND_CHARS = "\"`^~'c=";
+
+	public static HashMap<String, String> HTML_CHARS = new HashMap<String, String>();
+	public static HashMap<String, String> HTMLCHARS = new HashMap<String, String>();
+	public static HashMap<String, String> XML_CHARS = new HashMap<String, String>();
+	public static HashMap<String, String> ASCII2XML_CHARS = new HashMap<String, String>();
+	public static HashMap<String, String> UNICODE_CHARS = new HashMap<String, String>();
+	public static HashMap<String, String> RTFCHARS = new HashMap<String, String>();
+	public static HashMap<String, String> URL_CHARS = new HashMap<String,String>();
+
+    public static int getShortcutMask() {
+        if (SHORTCUT_MASK == -1)
+        try {
+			SHORTCUT_MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
+		} catch (Throwable t) {
+
+		}
+
+        return SHORTCUT_MASK;
+    }
+	static {
+
+
+		// Special characters in URLs need to be replaced to ensure that the URL
+		// opens properly on all platforms:
+		URL_CHARS.put("<", "%3c");
+		URL_CHARS.put(">", "%3e");
+		URL_CHARS.put("(", "%28");
+		URL_CHARS.put(")", "%29");
+		URL_CHARS.put(" ", "%20");
+		URL_CHARS.put("&", "%26");
+		URL_CHARS.put("$", "%24");
+
+		// HTMLCHARS.put("\"a", "ä");
+		// HTMLCHARS.put("\"A", "Ä");
+		// HTMLCHARS.put("\"e", "ë");
+		// HTMLCHARS.put("\"E", "Ë");
+		// HTMLCHARS.put("\"i", "ï");
+		// HTMLCHARS.put("\"I", "Ï");
+		// HTMLCHARS.put("\"o", "ö");
+		// HTMLCHARS.put("\"O", "Ö");
+		// HTMLCHARS.put("\"u", "ü");
+		// HTMLCHARS.put("\"U", "Ü");
+		// HTMLCHARS.put("`a", "à");
+		// HTMLCHARS.put("`A", "À");
+		// HTMLCHARS.put("`e", "è");
+		// HTMLCHARS.put("`E", "È");
+		// HTMLCHARS.put("`i", "ì");
+		// HTMLCHARS.put("`I", "Ì");
+		// HTMLCHARS.put("`o", "ò");
+		// HTMLCHARS.put("`O", "Ò");
+		// HTMLCHARS.put("`u", "ù");
+		// HTMLCHARS.put("`U", "Ù");
+		// HTMLCHARS.put("'e", "é");
+		// HTMLCHARS.put("'E", "É");
+		// HTMLCHARS.put("'i", "í");
+		// HTMLCHARS.put("'I", "Í");
+		// HTMLCHARS.put("'o", "ó");
+		// HTMLCHARS.put("'O", "Ó");
+		// HTMLCHARS.put("'u", "ú");
+		// HTMLCHARS.put("'U", "Ú");
+		// HTMLCHARS.put("'a", "á");
+		// HTMLCHARS.put("'A", "Á");
+		// HTMLCHARS.put("^a", "ô");
+		// HTMLCHARS.put("^A", "Ô");
+		// HTMLCHARS.put("^o", "ô");
+		// HTMLCHARS.put("^O", "Ô");
+		// HTMLCHARS.put("^u", "û");
+		// HTMLCHARS.put("^U", "Û");
+		// HTMLCHARS.put("^e", "ê");
+		// HTMLCHARS.put("^E", "Ê");
+		// HTMLCHARS.put("^i", "î");
+		// HTMLCHARS.put("^I", "Î");
+		// HTMLCHARS.put("~o", "õ");
+		// HTMLCHARS.put("~O", "Õ");
+		// HTMLCHARS.put("~n", "ñ");
+		// HTMLCHARS.put("~N", "Ñ");
+		// HTMLCHARS.put("~a", "ã");
+		// HTMLCHARS.put("~A", "Ã");
+		// HTMLCHARS.put("cc", "ç");
+		// HTMLCHARS.put("cC", "Ç");
+
+		// Following character definitions contributed by Ervin Kolenovic:
+		// HTML named entities from #192 - #255 (UNICODE Latin-1)
+		HTMLCHARS.put("`A", "À"); // #192
+		HTMLCHARS.put("'A", "Á"); // #193
+		HTMLCHARS.put("^A", "Â"); // #194
+		HTMLCHARS.put("~A", "Ã"); // #195
+		HTMLCHARS.put("\"A", "Ä"); // #196
+		HTMLCHARS.put("AA", "Å"); // #197
+		HTMLCHARS.put("AE", "Æ"); // #198
+		HTMLCHARS.put("cC", "Ç"); // #199
+		HTMLCHARS.put("`E", "È"); // #200
+		HTMLCHARS.put("'E", "É"); // #201
+		HTMLCHARS.put("^E", "Ê"); // #202
+		HTMLCHARS.put("\"E", "Ë"); // #203
+		HTMLCHARS.put("`I", "Ì"); // #204
+		HTMLCHARS.put("'I", "Í"); // #205
+		HTMLCHARS.put("^I", "Î"); // #206
+		HTMLCHARS.put("\"I", "Ï"); // #207
+		HTMLCHARS.put("DH", "Ð"); // #208
+		HTMLCHARS.put("~N", "Ñ"); // #209
+		HTMLCHARS.put("`O", "Ò"); // #210
+		HTMLCHARS.put("'O", "Ó"); // #211
+		HTMLCHARS.put("^O", "Ô"); // #212
+		HTMLCHARS.put("~O", "Õ"); // #213
+		HTMLCHARS.put("\"O", "Ö"); // #214
+		// According to ISO 8859-1 the "\times" symbol should be placed here
+		// (#215).
+		// Omitting this, because it is a mathematical symbol.
+		HTMLCHARS.put("O", "Ø"); // #216
+		HTMLCHARS.put("`U", "Ù"); // #217
+		HTMLCHARS.put("'U", "Ú"); // #218
+		HTMLCHARS.put("^U", "Û"); // #219
+		HTMLCHARS.put("\"U", "Ü"); // #220
+		HTMLCHARS.put("'Y", "Ý"); // #221
+		HTMLCHARS.put("TH", "Þ"); // #222
+		HTMLCHARS.put("ss", "ß"); // #223
+		HTMLCHARS.put("`a", "à"); // #224
+		HTMLCHARS.put("'a", "á"); // #225
+		HTMLCHARS.put("^a", "â"); // #226
+		HTMLCHARS.put("~a", "ã"); // #227
+		HTMLCHARS.put("\"a", "ä"); // #228
+		HTMLCHARS.put("aa", "å"); // #229
+		HTMLCHARS.put("ae", "æ"); // #230
+		HTMLCHARS.put("cc", "ç"); // #231
+		HTMLCHARS.put("`e", "è"); // #232
+		HTMLCHARS.put("'e", "é"); // #233
+		HTMLCHARS.put("^e", "ê"); // #234
+		HTMLCHARS.put("\"e", "ë"); // #235
+		HTMLCHARS.put("`i", "ì"); // #236
+		HTMLCHARS.put("'i", "í"); // #237
+		HTMLCHARS.put("^i", "î"); // #238
+		HTMLCHARS.put("\"i", "ï"); // #239
+		HTMLCHARS.put("dh", "ð"); // #240
+		HTMLCHARS.put("~n", "ñ"); // #241
+		HTMLCHARS.put("`o", "ò"); // #242
+		HTMLCHARS.put("'o", "ó"); // #243
+		HTMLCHARS.put("^o", "ô"); // #244
+		HTMLCHARS.put("~o", "õ"); // #245
+		HTMLCHARS.put("\"o", "ö"); // #246
+		// According to ISO 8859-1 the "\div" symbol should be placed here
+		// (#247).
+		// Omitting this, because it is a mathematical symbol.
+		HTMLCHARS.put("o", "ø"); // #248
+		HTMLCHARS.put("`u", "ù"); // #249
+		HTMLCHARS.put("'u", "ú"); // #250
+		HTMLCHARS.put("^u", "û"); // #251
+		HTMLCHARS.put("\"u", "ü"); // #252
+		HTMLCHARS.put("'y", "ý"); // #253
+		HTMLCHARS.put("th", "þ"); // #254
+		HTMLCHARS.put("\"y", "ÿ"); // #255
+
+		// HTML special characters without names (UNICODE Latin Extended-A),
+		// indicated by UNICODE number
+		HTMLCHARS.put("=A", "Ā"); // "Amacr"
+		HTMLCHARS.put("=a", "ā"); // "amacr"
+		HTMLCHARS.put("uA", "Ă"); // "Abreve"
+		HTMLCHARS.put("ua", "ă"); // "abreve"
+		HTMLCHARS.put("kA", "Ą"); // "Aogon"
+		HTMLCHARS.put("ka", "ą"); // "aogon"
+		HTMLCHARS.put("'C", "Ć"); // "Cacute"
+		HTMLCHARS.put("'c", "ć"); // "cacute"
+		HTMLCHARS.put("^C", "Ĉ"); // "Ccirc"
+		HTMLCHARS.put("^c", "ĉ"); // "ccirc"
+		HTMLCHARS.put(".C", "Ċ"); // "Cdot"
+		HTMLCHARS.put(".c", "ċ"); // "cdot"
+		HTMLCHARS.put("vC", "Č"); // "Ccaron"
+		HTMLCHARS.put("vc", "č"); // "ccaron"
+		HTMLCHARS.put("vD", "Ď"); // "Dcaron"
+		// Symbol #271 (d�) has no special Latex command
+		HTMLCHARS.put("DJ", "Đ"); // "Dstrok"
+		HTMLCHARS.put("dj", "đ"); // "dstrok"
+		HTMLCHARS.put("=E", "Ē"); // "Emacr"
+		HTMLCHARS.put("=e", "ē"); // "emacr"
+		HTMLCHARS.put("uE", "Ĕ"); // "Ebreve"
+		HTMLCHARS.put("ue", "ĕ"); // "ebreve"
+		HTMLCHARS.put(".E", "Ė"); // "Edot"
+		HTMLCHARS.put(".e", "ė"); // "edot"
+		HTMLCHARS.put("kE", "Ę"); // "Eogon"
+		HTMLCHARS.put("ke", "ę"); // "eogon"
+		HTMLCHARS.put("vE", "Ě"); // "Ecaron"
+		HTMLCHARS.put("ve", "ě"); // "ecaron"
+		HTMLCHARS.put("^G", "Ĝ"); // "Gcirc"
+		HTMLCHARS.put("^g", "ĝ"); // "gcirc"
+		HTMLCHARS.put("uG", "Ğ"); // "Gbreve"
+		HTMLCHARS.put("ug", "ğ"); // "gbreve"
+		HTMLCHARS.put(".G", "Ġ"); // "Gdot"
+		HTMLCHARS.put(".g", "ġ"); // "gdot"
+		HTMLCHARS.put("cG", "Ģ"); // "Gcedil"
+		HTMLCHARS.put("'g", "ģ"); // "gacute"
+		HTMLCHARS.put("^H", "Ĥ"); // "Hcirc"
+		HTMLCHARS.put("^h", "ĥ"); // "hcirc"
+		HTMLCHARS.put("Hstrok", "Ħ"); // "Hstrok"
+		HTMLCHARS.put("hstrok", "ħ"); // "hstrok"
+		HTMLCHARS.put("~I", "Ĩ"); // "Itilde"
+		HTMLCHARS.put("~i", "ĩ"); // "itilde"
+		HTMLCHARS.put("=I", "Ī"); // "Imacr"
+		HTMLCHARS.put("=i", "ī"); // "imacr"
+		HTMLCHARS.put("uI", "Ĭ"); // "Ibreve"
+		HTMLCHARS.put("ui", "ĭ"); // "ibreve"
+		HTMLCHARS.put("kI", "Į"); // "Iogon"
+		HTMLCHARS.put("ki", "į"); // "iogon"
+		HTMLCHARS.put(".I", "İ"); // "Idot"
+		HTMLCHARS.put("i", "ı"); // "inodot"
+		// Symbol #306 (IJ) has no special Latex command
+		// Symbol #307 (ij) has no special Latex command
+		HTMLCHARS.put("^J", "Ĵ"); // "Jcirc"
+		HTMLCHARS.put("^j", "ĵ"); // "jcirc"
+		HTMLCHARS.put("cK", "Ķ"); // "Kcedil"
+		HTMLCHARS.put("ck", "ķ"); // "kcedil"
+		// Symbol #312 (k) has no special Latex command
+		HTMLCHARS.put("'L", "Ĺ"); // "Lacute"
+		HTMLCHARS.put("'l", "ĺ"); // "lacute"
+		HTMLCHARS.put("cL", "Ļ"); // "Lcedil"
+		HTMLCHARS.put("cl", "ļ"); // "lcedil"
+		// Symbol #317 (L�) has no special Latex command
+		// Symbol #318 (l�) has no special Latex command
+		HTMLCHARS.put("Lmidot", "Ŀ"); // "Lmidot"
+		HTMLCHARS.put("lmidot", "ŀ"); // "lmidot"
+		HTMLCHARS.put("L", "Ł"); // "Lstrok"
+		HTMLCHARS.put("l", "ł"); // "lstrok"
+		HTMLCHARS.put("'N", "Ń"); // "Nacute"
+		HTMLCHARS.put("'n", "ń"); // "nacute"
+		HTMLCHARS.put("cN", "Ņ"); // "Ncedil"
+		HTMLCHARS.put("cn", "ņ"); // "ncedil"
+		HTMLCHARS.put("vN", "Ň"); // "Ncaron"
+		HTMLCHARS.put("vn", "ň"); // "ncaron"
+		// Symbol #329 (�n) has no special Latex command
+		HTMLCHARS.put("NG", "Ŋ"); // "ENG"
+		HTMLCHARS.put("ng", "ŋ"); // "eng"
+		HTMLCHARS.put("=O", "Ō"); // "Omacr"
+		HTMLCHARS.put("=o", "ō"); // "omacr"
+		HTMLCHARS.put("uO", "Ŏ"); // "Obreve"
+		HTMLCHARS.put("uo", "ŏ"); // "obreve"
+		HTMLCHARS.put("HO", "Ő"); // "Odblac"
+		HTMLCHARS.put("Ho", "ő"); // "odblac"
+		HTMLCHARS.put("OE", "Œ"); // "OElig"
+		HTMLCHARS.put("oe", "œ"); // "oelig"
+		HTMLCHARS.put("'R", "Ŕ"); // "Racute"
+		HTMLCHARS.put("'r", "ŕ"); // "racute"
+		HTMLCHARS.put("cR", "Ŗ"); // "Rcedil"
+		HTMLCHARS.put("cr", "ŗ"); // "rcedil"
+		HTMLCHARS.put("vR", "Ř"); // "Rcaron"
+		HTMLCHARS.put("vr", "ř"); // "rcaron"
+		HTMLCHARS.put("'S", "Ś"); // "Sacute"
+		HTMLCHARS.put("'s", "ś"); // "sacute"
+		HTMLCHARS.put("^S", "Ŝ"); // "Scirc"
+		HTMLCHARS.put("^s", "ŝ"); // "scirc"
+		HTMLCHARS.put("cS", "Ş"); // "Scedil"
+		HTMLCHARS.put("cs", "ş"); // "scedil"
+		HTMLCHARS.put("vS", "Š"); // "Scaron"
+		HTMLCHARS.put("vs", "š"); // "scaron"
+		HTMLCHARS.put("cT", "Ţ"); // "Tcedil"
+		HTMLCHARS.put("ct", "ţ"); // "tcedil"
+		HTMLCHARS.put("vT", "Ť"); // "Tcaron"
+		// Symbol #357 (t�) has no special Latex command
+		HTMLCHARS.put("Tstrok", "Ŧ"); // "Tstrok"
+		HTMLCHARS.put("tstrok", "ŧ"); // "tstrok"
+		HTMLCHARS.put("~U", "Ũ"); // "Utilde"
+		HTMLCHARS.put("~u", "ũ"); // "utilde"
+		HTMLCHARS.put("=U", "Ū"); // "Umacr"
+		HTMLCHARS.put("=u", "ū"); // "umacr"
+		HTMLCHARS.put("uU", "Ŭ"); // "Ubreve"
+		HTMLCHARS.put("uu", "ŭ"); // "ubreve"
+		HTMLCHARS.put("rU", "Ů"); // "Uring"
+		HTMLCHARS.put("ru", "ů"); // "uring"
+		HTMLCHARS.put("HU", "Ű"); // "Odblac"
+		HTMLCHARS.put("Hu", "ű"); // "odblac"
+		HTMLCHARS.put("kU", "Ų"); // "Uogon"
+		HTMLCHARS.put("ku", "ų"); // "uogon"
+		HTMLCHARS.put("^W", "Ŵ"); // "Wcirc"
+		HTMLCHARS.put("^w", "ŵ"); // "wcirc"
+		HTMLCHARS.put("^Y", "Ŷ"); // "Ycirc"
+		HTMLCHARS.put("^y", "ŷ"); // "ycirc"
+		HTMLCHARS.put("\"Y", "Ÿ"); // "Yuml"
+		HTMLCHARS.put("'Z", "Ź"); // "Zacute"
+		HTMLCHARS.put("'z", "ź"); // "zacute"
+		HTMLCHARS.put(".Z", "Ż"); // "Zdot"
+		HTMLCHARS.put(".z", "ż"); // "zdot"
+		HTMLCHARS.put("vZ", "Ž"); // "Zcaron"
+		HTMLCHARS.put("vz", "ž"); // "zcaron"
+		// Symbol #383 (f) has no special Latex command
+        HTMLCHARS.put("%", "%"); // percent sign
+
+        XML_CHARS.put("\\{\\\\\\\"\\{a\\}\\}", "&#x00E4;");
+        XML_CHARS.put("\\{\\\\\\\"\\{A\\}\\}", "&#x00C4;");
+        XML_CHARS.put("\\{\\\\\\\"\\{e\\}\\}", "&#x00EB;");
+        XML_CHARS.put("\\{\\\\\\\"\\{E\\}\\}", "&#x00CB;");
+        XML_CHARS.put("\\{\\\\\\\"\\{i\\}\\}", "&#x00EF;");
+        XML_CHARS.put("\\{\\\\\\\"\\{I\\}\\}", "&#x00CF;");
+        XML_CHARS.put("\\{\\\\\\\"\\{o\\}\\}", "&#x00F6;");
+        XML_CHARS.put("\\{\\\\\\\"\\{O\\}\\}", "&#x00D6;");
+        XML_CHARS.put("\\{\\\\\\\"\\{u\\}\\}", "&#x00FC;");
+        XML_CHARS.put("\\{\\\\\\\"\\{U\\}\\}", "&#x00DC;");
+
+        //next 2 rows were missing...
+        XML_CHARS.put("\\{\\\\\\`\\{a\\}\\}", "&#x00E0;");
+        XML_CHARS.put("\\{\\\\\\`\\{A\\}\\}", "&#x00C0;");
+
+        XML_CHARS.put("\\{\\\\\\`\\{e\\}\\}", "&#x00E8;");
+        XML_CHARS.put("\\{\\\\\\`\\{E\\}\\}", "&#x00C8;");
+        XML_CHARS.put("\\{\\\\\\`\\{i\\}\\}", "&#x00EC;");
+        XML_CHARS.put("\\{\\\\\\`\\{I\\}\\}", "&#x00CC;");
+        XML_CHARS.put("\\{\\\\\\`\\{o\\}\\}", "&#x00F2;");
+        XML_CHARS.put("\\{\\\\\\`\\{O\\}\\}", "&#x00D2;");
+        XML_CHARS.put("\\{\\\\\\`\\{u\\}\\}", "&#x00F9;");
+        XML_CHARS.put("\\{\\\\\\`\\{U\\}\\}", "&#x00D9;");
+ 
+        //corrected these 10 lines below...
+        XML_CHARS.put("\\{\\\\\\'\\{a\\}\\}", "&#x00E1;");
+        XML_CHARS.put("\\{\\\\\\'\\{A\\}\\}", "&#x00C1;");
+        XML_CHARS.put("\\{\\\\\\'\\{e\\}\\}", "&#x00E9;");
+        XML_CHARS.put("\\{\\\\\\'\\{E\\}\\}", "&#x00C9;");
+        XML_CHARS.put("\\{\\\\\\'\\{i\\}\\}", "&#x00ED;");
+        XML_CHARS.put("\\{\\\\\\'\\{I\\}\\}", "&#x00CD;");
+        XML_CHARS.put("\\{\\\\\\'\\{o\\}\\}", "&#x00F3;");
+        XML_CHARS.put("\\{\\\\\\'\\{O\\}\\}", "&#x00D3;");
+        XML_CHARS.put("\\{\\\\\\'\\{u\\}\\}", "&#x00FA;");
+        XML_CHARS.put("\\{\\\\\\'\\{U\\}\\}", "&#x00DA;");
+        //added next four chars...
+        XML_CHARS.put("\\{\\\\\\'\\{c\\}\\}", "&#x0107;");
+        XML_CHARS.put("\\{\\\\\\'\\{C\\}\\}", "&#x0106;");
+        XML_CHARS.put("\\{\\\\c\\{c\\}\\}", "&#x00E7;");
+        XML_CHARS.put("\\{\\\\c\\{C\\}\\}", "&#x00C7;");
+
+        XML_CHARS.put("\\{\\\\\\\uFFFD\\{E\\}\\}", "&#x00C9;");
+        XML_CHARS.put("\\{\\\\\\\uFFFD\\{i\\}\\}", "&#x00ED;");
+        XML_CHARS.put("\\{\\\\\\\uFFFD\\{I\\}\\}", "&#x00CD;");
+        XML_CHARS.put("\\{\\\\\\\uFFFD\\{o\\}\\}", "&#x00F3;");
+        XML_CHARS.put("\\{\\\\\\\uFFFD\\{O\\}\\}", "&#x00D3;");
+        XML_CHARS.put("\\{\\\\\\\uFFFD\\{u\\}\\}", "&#x00FA;");
+        XML_CHARS.put("\\{\\\\\\\uFFFD\\{U\\}\\}", "&#x00DA;");
+        XML_CHARS.put("\\{\\\\\\\uFFFD\\{a\\}\\}", "&#x00E1;");
+        XML_CHARS.put("\\{\\\\\\\uFFFD\\{A\\}\\}", "&#x00C1;");
+
+        //next 2 rows were missing...
+        XML_CHARS.put("\\{\\\\\\^\\{a\\}\\}", "&#x00E2;");
+        XML_CHARS.put("\\{\\\\\\^\\{A\\}\\}", "&#x00C2;");
+
+        XML_CHARS.put("\\{\\\\\\^\\{o\\}\\}", "&#x00F4;");
+        XML_CHARS.put("\\{\\\\\\^\\{O\\}\\}", "&#x00D4;");
+        XML_CHARS.put("\\{\\\\\\^\\{u\\}\\}", "&#x00F9;");
+        XML_CHARS.put("\\{\\\\\\^\\{U\\}\\}", "&#x00D9;");
+        XML_CHARS.put("\\{\\\\\\^\\{e\\}\\}", "&#x00EA;");
+        XML_CHARS.put("\\{\\\\\\^\\{E\\}\\}", "&#x00CA;");
+        XML_CHARS.put("\\{\\\\\\^\\{i\\}\\}", "&#x00EE;");
+        XML_CHARS.put("\\{\\\\\\^\\{I\\}\\}", "&#x00CE;");
+
+        XML_CHARS.put("\\{\\\\\\~\\{o\\}\\}", "&#x00F5;");
+        XML_CHARS.put("\\{\\\\\\~\\{O\\}\\}", "&#x00D5;");
+        XML_CHARS.put("\\{\\\\\\~\\{n\\}\\}", "&#x00F1;");
+        XML_CHARS.put("\\{\\\\\\~\\{N\\}\\}", "&#x00D1;");
+        XML_CHARS.put("\\{\\\\\\~\\{a\\}\\}", "&#x00E3;");
+        XML_CHARS.put("\\{\\\\\\~\\{A\\}\\}", "&#x00C3;");
+
+        XML_CHARS.put("\\{\\\\\\\"a\\}", "&#x00E4;");
+        XML_CHARS.put("\\{\\\\\\\"A\\}", "&#x00C4;");
+        XML_CHARS.put("\\{\\\\\\\"e\\}", "&#x00EB;");
+        XML_CHARS.put("\\{\\\\\\\"E\\}", "&#x00CB;");
+        XML_CHARS.put("\\{\\\\\\\"i\\}", "&#x00EF;");
+        XML_CHARS.put("\\{\\\\\\\"I\\}", "&#x00CF;");
+        XML_CHARS.put("\\{\\\\\\\"o\\}", "&#x00F6;");
+        XML_CHARS.put("\\{\\\\\\\"O\\}", "&#x00D6;");
+        XML_CHARS.put("\\{\\\\\\\"u\\}", "&#x00FC;");
+        XML_CHARS.put("\\{\\\\\\\"U\\}", "&#x00DC;");
+
+        //next 2 rows were missing...
+        XML_CHARS.put("\\{\\\\\\`a\\}", "&#x00E0;");
+        XML_CHARS.put("\\{\\\\\\`A\\}", "&#x00C0;");
+
+        XML_CHARS.put("\\{\\\\\\`e\\}", "&#x00E8;");
+        XML_CHARS.put("\\{\\\\\\`E\\}", "&#x00C8;");
+        XML_CHARS.put("\\{\\\\\\`i\\}", "&#x00EC;");
+        XML_CHARS.put("\\{\\\\\\`I\\}", "&#x00CC;");
+        XML_CHARS.put("\\{\\\\\\`o\\}", "&#x00F2;");
+        XML_CHARS.put("\\{\\\\\\`O\\}", "&#x00D2;");
+        XML_CHARS.put("\\{\\\\\\`u\\}", "&#x00F9;");
+        XML_CHARS.put("\\{\\\\\\`U\\}", "&#x00D9;");
+        XML_CHARS.put("\\{\\\\\\'e\\}", "&#x00E9;");
+        XML_CHARS.put("\\{\\\\\\'E\\}", "&#x00C9;");
+        XML_CHARS.put("\\{\\\\\\'i\\}", "&#x00ED;");
+        XML_CHARS.put("\\{\\\\\\'I\\}", "&#x00CD;");
+        XML_CHARS.put("\\{\\\\\\'o\\}", "&#x00F3;");
+        XML_CHARS.put("\\{\\\\\\'O\\}", "&#x00D3;");
+        XML_CHARS.put("\\{\\\\\\'u\\}", "&#x00FA;");
+        XML_CHARS.put("\\{\\\\\\'U\\}", "&#x00DA;");
+        XML_CHARS.put("\\{\\\\\\'a\\}", "&#x00E1;");
+        XML_CHARS.put("\\{\\\\\\'A\\}", "&#x00C1;");
+        //added next two chars...
+        XML_CHARS.put("\\{\\\\\\'c\\}", "&#x0107;");
+        XML_CHARS.put("\\{\\\\\\'C\\}", "&#x0106;");
+
+        //next two lines were wrong...
+        XML_CHARS.put("\\{\\\\\\^a\\}", "&#x00E2;");
+        XML_CHARS.put("\\{\\\\\\^A\\}", "&#x00C2;");
+
+        XML_CHARS.put("\\{\\\\\\^o\\}", "&#x00F4;");
+        XML_CHARS.put("\\{\\\\\\^O\\}", "&#x00D4;");
+        XML_CHARS.put("\\{\\\\\\^u\\}", "&#x00F9;");
+        XML_CHARS.put("\\{\\\\\\^U\\}", "&#x00D9;");
+        XML_CHARS.put("\\{\\\\\\^e\\}", "&#x00EA;");
+        XML_CHARS.put("\\{\\\\\\^E\\}", "&#x00CA;");
+        XML_CHARS.put("\\{\\\\\\^i\\}", "&#x00EE;");
+        XML_CHARS.put("\\{\\\\\\^I\\}", "&#x00CE;");
+        XML_CHARS.put("\\{\\\\\\~o\\}", "&#x00F5;");
+        XML_CHARS.put("\\{\\\\\\~O\\}", "&#x00D5;");
+        XML_CHARS.put("\\{\\\\\\~n\\}", "&#x00F1;");
+        XML_CHARS.put("\\{\\\\\\~N\\}", "&#x00D1;");
+        XML_CHARS.put("\\{\\\\\\~a\\}", "&#x00E3;");
+        XML_CHARS.put("\\{\\\\\\~A\\}", "&#x00C3;");
+
+		ASCII2XML_CHARS.put("<", "<");
+		ASCII2XML_CHARS.put("\"", """);
+		ASCII2XML_CHARS.put(">", ">");
+
+		UNICODE_CHARS.put("\u00C0", "A");
+		UNICODE_CHARS.put("\u00C1", "A");
+		UNICODE_CHARS.put("\u00C2", "A");
+		UNICODE_CHARS.put("\u00C3", "A");
+		UNICODE_CHARS.put("\u00C4", "Ae");
+		UNICODE_CHARS.put("\u00C5", "Aa");
+		UNICODE_CHARS.put("\u00C6", "Ae");
+		UNICODE_CHARS.put("\u00C7", "C");
+		UNICODE_CHARS.put("\u00C8", "E");
+		UNICODE_CHARS.put("\u00C9", "E");
+		UNICODE_CHARS.put("\u00CA", "E");
+		UNICODE_CHARS.put("\u00CB", "E");
+		UNICODE_CHARS.put("\u00CC", "I");
+		UNICODE_CHARS.put("\u00CD", "I");
+		UNICODE_CHARS.put("\u00CE", "I");
+		UNICODE_CHARS.put("\u00CF", "I");
+		UNICODE_CHARS.put("\u00D0", "D");
+		UNICODE_CHARS.put("\u00D1", "N");
+		UNICODE_CHARS.put("\u00D2", "O");
+		UNICODE_CHARS.put("\u00D3", "O");
+		UNICODE_CHARS.put("\u00D4", "O");
+		UNICODE_CHARS.put("\u00D5", "O");
+		UNICODE_CHARS.put("\u00D6", "Oe");
+		UNICODE_CHARS.put("\u00D8", "Oe");
+		UNICODE_CHARS.put("\u00D9", "U");
+		UNICODE_CHARS.put("\u00DA", "U");
+		UNICODE_CHARS.put("\u00DB", "U");
+		UNICODE_CHARS.put("\u00DC", "Ue"); // U umlaut ..
+		UNICODE_CHARS.put("\u00DD", "Y");
+		UNICODE_CHARS.put("\u00DF", "ss");
+		UNICODE_CHARS.put("\u00E0", "a");
+		UNICODE_CHARS.put("\u00E1", "a");
+		UNICODE_CHARS.put("\u00E2", "a");
+		UNICODE_CHARS.put("\u00E3", "a");
+		UNICODE_CHARS.put("\u00E4", "ae");
+		UNICODE_CHARS.put("\u00E5", "aa");
+		UNICODE_CHARS.put("\u00E6", "ae");
+		UNICODE_CHARS.put("\u00E7", "c");
+		UNICODE_CHARS.put("\u00E8", "e");
+		UNICODE_CHARS.put("\u00E9", "e");
+		UNICODE_CHARS.put("\u00EA", "e");
+		UNICODE_CHARS.put("\u00EB", "e");
+		UNICODE_CHARS.put("\u00EC", "i");
+		UNICODE_CHARS.put("\u00ED", "i");
+		UNICODE_CHARS.put("\u00EE", "i");
+		UNICODE_CHARS.put("\u00EF", "i");
+		UNICODE_CHARS.put("\u00F0", "o");
+		UNICODE_CHARS.put("\u00F1", "n");
+		UNICODE_CHARS.put("\u00F2", "o");
+		UNICODE_CHARS.put("\u00F3", "o");
+		UNICODE_CHARS.put("\u00F4", "o");
+		UNICODE_CHARS.put("\u00F5", "o");
+		UNICODE_CHARS.put("\u00F6", "oe");
+		UNICODE_CHARS.put("\u00F8", "oe");
+		UNICODE_CHARS.put("\u00F9", "u");
+		UNICODE_CHARS.put("\u00FA", "u");
+		UNICODE_CHARS.put("\u00FB", "u");
+		UNICODE_CHARS.put("\u00FC", "ue"); // u umlaut...
+		UNICODE_CHARS.put("\u00FD", "y");
+		UNICODE_CHARS.put("\u00FF", "y");
+		UNICODE_CHARS.put("\u0100", "A");
+		UNICODE_CHARS.put("\u0101", "a");
+		UNICODE_CHARS.put("\u0102", "A");
+		UNICODE_CHARS.put("\u0103", "a");
+		UNICODE_CHARS.put("\u0104", "A");
+		UNICODE_CHARS.put("\u0105", "a");
+		UNICODE_CHARS.put("\u0106", "C");
+		UNICODE_CHARS.put("\u0107", "c");
+		UNICODE_CHARS.put("\u0108", "C");
+		UNICODE_CHARS.put("\u0109", "c");
+		UNICODE_CHARS.put("\u010A", "C");
+		UNICODE_CHARS.put("\u010B", "c");
+		UNICODE_CHARS.put("\u010C", "C");
+		UNICODE_CHARS.put("\u010D", "c");
+		UNICODE_CHARS.put("\u010E", "D");
+		UNICODE_CHARS.put("\u010F", "d");
+		UNICODE_CHARS.put("\u0110", "D");
+		UNICODE_CHARS.put("\u0111", "d");
+		UNICODE_CHARS.put("\u0112", "E");
+		UNICODE_CHARS.put("\u0113", "e");
+		UNICODE_CHARS.put("\u0114", "E");
+		UNICODE_CHARS.put("\u0115", "e");
+		UNICODE_CHARS.put("\u0116", "E");
+		UNICODE_CHARS.put("\u0117", "e");
+		UNICODE_CHARS.put("\u0118", "E");
+		UNICODE_CHARS.put("\u0119", "e");
+		UNICODE_CHARS.put("\u011A", "E");
+		UNICODE_CHARS.put("\u011B", "e");
+		UNICODE_CHARS.put("\u011C", "G");
+		UNICODE_CHARS.put("\u011D", "g");
+		UNICODE_CHARS.put("\u011E", "G");
+		UNICODE_CHARS.put("\u011F", "g");
+		UNICODE_CHARS.put("\u0120", "G");
+		UNICODE_CHARS.put("\u0121", "g");
+		UNICODE_CHARS.put("\u0122", "G");
+		UNICODE_CHARS.put("\u0123", "g");
+		UNICODE_CHARS.put("\u0124", "H");
+		UNICODE_CHARS.put("\u0125", "h");
+		UNICODE_CHARS.put("\u0127", "h");
+		UNICODE_CHARS.put("\u0128", "I");
+		UNICODE_CHARS.put("\u0129", "i");
+		UNICODE_CHARS.put("\u012A", "I");
+		UNICODE_CHARS.put("\u012B", "i");
+		UNICODE_CHARS.put("\u012C", "I");
+		UNICODE_CHARS.put("\u012D", "i");
+		UNICODE_CHARS.put("\u012E", "I");
+		UNICODE_CHARS.put("\u012F", "i");
+		UNICODE_CHARS.put("\u0130", "I");
+		UNICODE_CHARS.put("\u0131", "i");
+		UNICODE_CHARS.put("\u0132", "IJ");
+		UNICODE_CHARS.put("\u0133", "ij");
+		UNICODE_CHARS.put("\u0134", "J");
+		UNICODE_CHARS.put("\u0135", "j");
+		UNICODE_CHARS.put("\u0136", "K");
+		UNICODE_CHARS.put("\u0137", "k");
+		UNICODE_CHARS.put("\u0138", "k");
+		UNICODE_CHARS.put("\u0139", "L");
+		UNICODE_CHARS.put("\u013A", "l");
+		UNICODE_CHARS.put("\u013B", "L");
+		UNICODE_CHARS.put("\u013C", "l");
+		UNICODE_CHARS.put("\u013D", "L");
+		UNICODE_CHARS.put("\u013E", "l");
+		UNICODE_CHARS.put("\u013F", "L");
+		UNICODE_CHARS.put("\u0140", "l");
+		UNICODE_CHARS.put("\u0141", "L");
+		UNICODE_CHARS.put("\u0142", "l");
+		UNICODE_CHARS.put("\u0143", "N");
+		UNICODE_CHARS.put("\u0144", "n");
+		UNICODE_CHARS.put("\u0145", "N");
+		UNICODE_CHARS.put("\u0146", "n");
+		UNICODE_CHARS.put("\u0147", "N");
+		UNICODE_CHARS.put("\u0148", "n");
+		UNICODE_CHARS.put("\u0149", "n");
+		UNICODE_CHARS.put("\u014A", "N");
+		UNICODE_CHARS.put("\u014B", "n");
+		UNICODE_CHARS.put("\u014C", "O");
+		UNICODE_CHARS.put("\u014D", "o");
+		UNICODE_CHARS.put("\u014E", "O");
+		UNICODE_CHARS.put("\u014F", "o");
+		UNICODE_CHARS.put("\u0150", "Oe");
+		UNICODE_CHARS.put("\u0151", "oe");
+		UNICODE_CHARS.put("\u0152", "OE");
+		UNICODE_CHARS.put("\u0153", "oe");
+		UNICODE_CHARS.put("\u0154", "R");
+		UNICODE_CHARS.put("\u0155", "r");
+		UNICODE_CHARS.put("\u0156", "R");
+		UNICODE_CHARS.put("\u0157", "r");
+		UNICODE_CHARS.put("\u0158", "R");
+		UNICODE_CHARS.put("\u0159", "r");
+		UNICODE_CHARS.put("\u015A", "S");
+		UNICODE_CHARS.put("\u015B", "s");
+		UNICODE_CHARS.put("\u015C", "S");
+		UNICODE_CHARS.put("\u015D", "s");
+		UNICODE_CHARS.put("\u015E", "S");
+		UNICODE_CHARS.put("\u015F", "s");
+		UNICODE_CHARS.put("\u0160", "S");
+		UNICODE_CHARS.put("\u0161", "s");
+		UNICODE_CHARS.put("\u0162", "T");
+		UNICODE_CHARS.put("\u0163", "t");
+		UNICODE_CHARS.put("\u0164", "T");
+		UNICODE_CHARS.put("\u0165", "t");
+		UNICODE_CHARS.put("\u0166", "T");
+		UNICODE_CHARS.put("\u0167", "t");
+		UNICODE_CHARS.put("\u0168", "U");
+		UNICODE_CHARS.put("\u0169", "u");
+		UNICODE_CHARS.put("\u016A", "U");
+		UNICODE_CHARS.put("\u016B", "u");
+		UNICODE_CHARS.put("\u016C", "U");
+		UNICODE_CHARS.put("\u016D", "u");
+		UNICODE_CHARS.put("\u016E", "UU");
+		UNICODE_CHARS.put("\u016F", "uu");
+		UNICODE_CHARS.put("\u0170", "Ue");
+		UNICODE_CHARS.put("\u0171", "ue");
+		UNICODE_CHARS.put("\u0172", "U");
+		UNICODE_CHARS.put("\u0173", "u");
+		UNICODE_CHARS.put("\u0174", "W");
+		UNICODE_CHARS.put("\u0175", "w");
+		UNICODE_CHARS.put("\u0176", "Y");
+		UNICODE_CHARS.put("\u0177", "y");
+		UNICODE_CHARS.put("\u0178", "Y");
+		UNICODE_CHARS.put("\u0179", "Z");
+		UNICODE_CHARS.put("\u017A", "z");
+		UNICODE_CHARS.put("\u017B", "Z");
+		UNICODE_CHARS.put("\u017C", "z");
+		UNICODE_CHARS.put("\u017D", "Z");
+		UNICODE_CHARS.put("\u017E", "z");
+		UNICODE_CHARS.put("\u1EBC", "E");
+		UNICODE_CHARS.put("\u1EBD", "e");
+		UNICODE_CHARS.put("\u1EF8", "Y");
+		UNICODE_CHARS.put("\u1EF9", "y");
+		UNICODE_CHARS.put("\u01CD", "A");
+		UNICODE_CHARS.put("\u01CE", "a");
+		UNICODE_CHARS.put("\u01CF", "I");
+		UNICODE_CHARS.put("\u01D0", "i");
+		UNICODE_CHARS.put("\u01D1", "O");
+		UNICODE_CHARS.put("\u01D2", "o");
+		UNICODE_CHARS.put("\u01D3", "U");
+		UNICODE_CHARS.put("\u01D4", "u");
+		UNICODE_CHARS.put("\u0232", "Y");
+		UNICODE_CHARS.put("\u0233", "y");
+		UNICODE_CHARS.put("\u01EA", "O");
+		UNICODE_CHARS.put("\u01EB", "o");
+		UNICODE_CHARS.put("\u1E0C", "D");
+		UNICODE_CHARS.put("\u1E0D", "d");
+		UNICODE_CHARS.put("\u1E24", "H");
+		UNICODE_CHARS.put("\u1E25", "h");
+		UNICODE_CHARS.put("\u1E36", "L");
+		UNICODE_CHARS.put("\u1E37", "l");
+		UNICODE_CHARS.put("\u1E38", "L");
+		UNICODE_CHARS.put("\u1E39", "l");
+		UNICODE_CHARS.put("\u1E42", "M");
+		UNICODE_CHARS.put("\u1E43", "m");
+		UNICODE_CHARS.put("\u1E46", "N");
+		UNICODE_CHARS.put("\u1E47", "n");
+		UNICODE_CHARS.put("\u1E5A", "R");
+		UNICODE_CHARS.put("\u1E5B", "r");
+		UNICODE_CHARS.put("\u1E5C", "R");
+		UNICODE_CHARS.put("\u1E5D", "r");
+		UNICODE_CHARS.put("\u1E62", "S");
+		UNICODE_CHARS.put("\u1E63", "s");
+		UNICODE_CHARS.put("\u1E6C", "T");
+		UNICODE_CHARS.put("\u1E6D", "t");
+		UNICODE_CHARS.put("\u00CF", "I");
+		
+		
+        UNICODE_CHARS.put("\u008C", "AE"); // doesn't work?
+        UNICODE_CHARS.put("\u016E", "U");
+        UNICODE_CHARS.put("\u016F", "u");
+
+        UNICODE_CHARS.put("\u0178", "Y");
+        UNICODE_CHARS.put("\u00FE", ""); // thorn character
+        
+        // UNICODE_CHARS.put("\u0100", "");
+
+		RTFCHARS.put("`a", "\\'e0");
+		RTFCHARS.put("`e", "\\'e8");
+		RTFCHARS.put("`i", "\\'ec");
+		RTFCHARS.put("`o", "\\'f2");
+		RTFCHARS.put("`u", "\\'f9");
+		RTFCHARS.put("?a", "\\'e1");
+		RTFCHARS.put("?e", "\\'e9");
+		RTFCHARS.put("?i", "\\'ed");
+		RTFCHARS.put("?o", "\\'f3");
+		RTFCHARS.put("?u", "\\'fa");
+		RTFCHARS.put("^a", "\\'e2");
+		RTFCHARS.put("^e", "\\'ea");
+		RTFCHARS.put("^i", "\\'ee");
+		RTFCHARS.put("^o", "\\'f4");
+		RTFCHARS.put("^u", "\\'fa");
+		RTFCHARS.put("\"a", "\\'e4");
+		RTFCHARS.put("\"e", "\\'eb");
+		RTFCHARS.put("\"i", "\\'ef");
+        RTFCHARS.put("\"o", "\\'f6");
+		RTFCHARS.put("\"u", "\\u252u");
+		RTFCHARS.put("~n", "\\'f1");
+		RTFCHARS.put("`A", "\\'c0");
+		RTFCHARS.put("`E", "\\'c8");
+		RTFCHARS.put("`I", "\\'cc");
+		RTFCHARS.put("`O", "\\'d2");
+		RTFCHARS.put("`U", "\\'d9");
+		RTFCHARS.put("?A", "\\'c1");
+		RTFCHARS.put("?E", "\\'c9");
+		RTFCHARS.put("?I", "\\'cd");
+		RTFCHARS.put("?O", "\\'d3");
+		RTFCHARS.put("?U", "\\'da");
+		RTFCHARS.put("^A", "\\'c2");
+		RTFCHARS.put("^E", "\\'ca");
+		RTFCHARS.put("^I", "\\'ce");
+		RTFCHARS.put("^O", "\\'d4");
+		RTFCHARS.put("^U", "\\'db");
+		RTFCHARS.put("\"A", "\\'c4");
+		RTFCHARS.put("\"E", "\\'cb");
+		RTFCHARS.put("\"I", "\\'cf");
+		RTFCHARS.put("\"O", "\\'d6");
+		RTFCHARS.put("\"U", "\\'dc");
+		
+		// Use UNICODE characters for RTF-Chars which can not be found in the
+		// standard codepage
+
+		// RTFCHARS.put("`A", "\\u192"); // "Agrave" exists in standard
+		// codepage
+		RTFCHARS.put("'A", "\\u193A"); // "Aacute"
+		// RTFCHARS.put("^A", "\\u194"); // "Acirc" exists in standard
+		// codepage
+		RTFCHARS.put("~A", "\\u195A"); // "Atilde"
+		// RTFCHARS.put("\"A", "\\u196"); // "Auml" exists in standard
+		// codepage
+		RTFCHARS.put("AA", "\\u197A"); // "Aring"
+		RTFCHARS.put("AE", "{\\uc2\\u198AE}"); // "AElig"
+		RTFCHARS.put("cC", "\\u199C"); // "Ccedil"
+		// RTFCHARS.put("`E", "\\u200"); // "Egrave" exists in standard
+		// codepage
+		RTFCHARS.put("'E", "\\u201E"); // "Eacute"
+		// RTFCHARS.put("^E", "\\u202"); // "Ecirc" exists in standard
+		// codepage
+		// RTFCHARS.put("\"E", "\\u203"); // "Euml" exists in standard
+		// codepage
+		// RTFCHARS.put("`I", "\\u204"); // "Igrave" exists in standard
+		// codepage
+		RTFCHARS.put("'I", "\\u205I"); // "Iacute"
+		// RTFCHARS.put("^I", "\\u206"); // "Icirc" exists in standard
+		// codepage
+		// RTFCHARS.put("\"I", "\\u207"); // "Iuml" exists in standard
+		// codepage
+		RTFCHARS.put("DH", "\\u208D"); // "ETH"
+		RTFCHARS.put("~N", "\\u209N"); // "Ntilde"
+		// RTFCHARS.put("`O", "\\u210"); // "Ograve" exists in standard
+		// codepage
+		RTFCHARS.put("'O", "\\u211O"); // "Oacute"
+		// RTFCHARS.put("^O", "\\u212"); // "Ocirc" exists in standard
+		// codepage
+		RTFCHARS.put("~O", "\\u213O"); // "Otilde"
+		// RTFCHARS.put("\"O", "\\u214"); // "Ouml" exists in standard
+		// codepage
+		// According to ISO 8859-1 the "\times" symbol should be placed here
+		// (#215).
+		// Omitting this, because it is a mathematical symbol.
+		//RTFCHARS.put("O", "\\u216O"); // "Oslash"
+        RTFCHARS.put("O", "\\'d8");
+        RTFCHARS.put("o", "\\'f8");
+		// RTFCHARS.put("`U", "\\u217"); // "Ugrave" exists in standard
+		// codepage
+		RTFCHARS.put("'U", "\\u218U"); // "Uacute"
+		// RTFCHARS.put("^U", "\\u219"); // "Ucirc" exists in standard
+		// codepage
+		// RTFCHARS.put("\"U", "\\u220"); // "Uuml" exists in standard
+		// codepage
+		RTFCHARS.put("'Y", "\\u221Y"); // "Yacute"
+		RTFCHARS.put("TH", "{\\uc2\\u222TH}"); // "THORN"
+		RTFCHARS.put("ss", "{\\uc2\\u223ss}"); // "szlig"
+        //RTFCHARS.put("ss", "AFFEN"); // "szlig"
+        // RTFCHARS.put("`a", "\\u224"); // "agrave" exists in standard
+		// codepage
+		RTFCHARS.put("'a", "\\u225a"); // "aacute"
+		// RTFCHARS.put("^a", "\\u226"); // "acirc" exists in standard
+		// codepage
+		RTFCHARS.put("~a", "\\u227a"); // "atilde"
+		// RTFCHARS.put("\"a", "\\u228"); // "auml" exists in standard
+		// codepage
+		RTFCHARS.put("aa", "\\u229a"); // "aring"
+		RTFCHARS.put("ae", "{\\uc2\\u230ae}"); // "aelig"
+		RTFCHARS.put("cc", "\\u231c"); // "ccedil"
+		// RTFCHARS.put("`e", "\\u232"); // "egrave" exists in standard
+		// codepage
+		RTFCHARS.put("'e", "\\u233e"); // "eacute"
+		// RTFCHARS.put("^e", "\\u234"); // "ecirc" exists in standard
+		// codepage
+		// RTFCHARS.put("\"e", "\\u235"); // "euml" exists in standard
+		// codepage
+		// RTFCHARS.put("`i", "\\u236"); // "igrave" exists in standard
+		// codepage
+		RTFCHARS.put("'i", "\\u237i"); // "iacute"
+		// RTFCHARS.put("^i", "\\u238"); // "icirc" exists in standard
+		// codepage
+		// RTFCHARS.put("\"i", "\\u239"); // "iuml" exists in standard
+		// codepage
+		RTFCHARS.put("dh", "\\u240d"); // "eth"
+		// RTFCHARS.put("~n", "\\u241"); // "ntilde" exists in standard
+		// codepage
+		// RTFCHARS.put("`o", "\\u242"); // "ograve" exists in standard
+		// codepage
+		RTFCHARS.put("'o", "\\u243o"); // "oacute"
+		// RTFCHARS.put("^o", "\\u244"); // "ocirc" exists in standard
+		// codepage
+		RTFCHARS.put("~o", "\\u245o"); // "otilde"
+		// RTFCHARS.put("\"o", "\\u246"); // "ouml" exists in standard
+		// codepage
+		// According to ISO 8859-1 the "\div" symbol should be placed here
+		// (#247).
+		// Omitting this, because it is a mathematical symbol.
+		//RTFCHARS.put("o", "\\u248o"); // "oslash"
+		// RTFCHARS.put("`u", "\\u249"); // "ugrave" exists in standard
+		// codepage
+		RTFCHARS.put("'u", "\\u250u"); // "uacute"
+		// RTFCHARS.put("^u", "\\u251"); // "ucirc" exists in standard
+		// codepage
+		// RTFCHARS.put("\"u", "\\u252"); // "uuml" exists in standard
+		// codepage
+		RTFCHARS.put("'y", "\\u253y"); // "yacute"
+		RTFCHARS.put("th", "{\\uc2\\u254th}"); // "thorn"
+		RTFCHARS.put("\"y", "\\u255y"); // "yuml"
+
+		RTFCHARS.put("=A", "\\u256A"); // "Amacr"
+		RTFCHARS.put("=a", "\\u257a"); // "amacr"
+		RTFCHARS.put("uA", "\\u258A"); // "Abreve"
+		RTFCHARS.put("ua", "\\u259a"); // "abreve"
+		RTFCHARS.put("kA", "\\u260A"); // "Aogon"
+		RTFCHARS.put("ka", "\\u261a"); // "aogon"
+		RTFCHARS.put("'C", "\\u262C"); // "Cacute"
+		RTFCHARS.put("'c", "\\u263c"); // "cacute"
+		RTFCHARS.put("^C", "\\u264C"); // "Ccirc"
+		RTFCHARS.put("^c", "\\u265c"); // "ccirc"
+		RTFCHARS.put(".C", "\\u266C"); // "Cdot"
+		RTFCHARS.put(".c", "\\u267c"); // "cdot"
+		RTFCHARS.put("vC", "\\u268C"); // "Ccaron"
+		RTFCHARS.put("vc", "\\u269c"); // "ccaron"
+		RTFCHARS.put("vD", "\\u270D"); // "Dcaron"
+		// Symbol #271 (d�) has no special Latex command
+		RTFCHARS.put("DJ", "\\u272D"); // "Dstrok"
+		RTFCHARS.put("dj", "\\u273d"); // "dstrok"
+		RTFCHARS.put("=E", "\\u274E"); // "Emacr"
+		RTFCHARS.put("=e", "\\u275e"); // "emacr"
+		RTFCHARS.put("uE", "\\u276E"); // "Ebreve"
+		RTFCHARS.put("ue", "\\u277e"); // "ebreve"
+		RTFCHARS.put(".E", "\\u278E"); // "Edot"
+		RTFCHARS.put(".e", "\\u279e"); // "edot"
+		RTFCHARS.put("kE", "\\u280E"); // "Eogon"
+		RTFCHARS.put("ke", "\\u281e"); // "eogon"
+		RTFCHARS.put("vE", "\\u282E"); // "Ecaron"
+		RTFCHARS.put("ve", "\\u283e"); // "ecaron"
+		RTFCHARS.put("^G", "\\u284G"); // "Gcirc"
+		RTFCHARS.put("^g", "\\u285g"); // "gcirc"
+		RTFCHARS.put("uG", "\\u286G"); // "Gbreve"
+		RTFCHARS.put("ug", "\\u287g"); // "gbreve"
+		RTFCHARS.put(".G", "\\u288G"); // "Gdot"
+		RTFCHARS.put(".g", "\\u289g"); // "gdot"
+		RTFCHARS.put("cG", "\\u290G"); // "Gcedil"
+		RTFCHARS.put("'g", "\\u291g"); // "gacute"
+		RTFCHARS.put("^H", "\\u292H"); // "Hcirc"
+		RTFCHARS.put("^h", "\\u293h"); // "hcirc"
+		RTFCHARS.put("Hstrok", "\\u294H"); // "Hstrok"
+		RTFCHARS.put("hstrok", "\\u295h"); // "hstrok"
+		RTFCHARS.put("~I", "\\u296I"); // "Itilde"
+		RTFCHARS.put("~i", "\\u297i"); // "itilde"
+		RTFCHARS.put("=I", "\\u298I"); // "Imacr"
+		RTFCHARS.put("=i", "\\u299i"); // "imacr"
+		RTFCHARS.put("uI", "\\u300I"); // "Ibreve"
+		RTFCHARS.put("ui", "\\u301i"); // "ibreve"
+		RTFCHARS.put("kI", "\\u302I"); // "Iogon"
+		RTFCHARS.put("ki", "\\u303i"); // "iogon"
+		RTFCHARS.put(".I", "\\u304I"); // "Idot"
+		RTFCHARS.put("i", "\\u305i"); // "inodot"
+		// Symbol #306 (IJ) has no special Latex command
+		// Symbol #307 (ij) has no special Latex command
+		RTFCHARS.put("^J", "\\u308J"); // "Jcirc"
+		RTFCHARS.put("^j", "\\u309j"); // "jcirc"
+		RTFCHARS.put("cK", "\\u310K"); // "Kcedil"
+		RTFCHARS.put("ck", "\\u311k"); // "kcedil"
+		// Symbol #312 (k) has no special Latex command
+		RTFCHARS.put("'L", "\\u313L"); // "Lacute"
+		RTFCHARS.put("'l", "\\u314l"); // "lacute"
+		RTFCHARS.put("cL", "\\u315L"); // "Lcedil"
+		RTFCHARS.put("cl", "\\u316l"); // "lcedil"
+		// Symbol #317 (L�) has no special Latex command
+		// Symbol #318 (l�) has no special Latex command
+		RTFCHARS.put("Lmidot", "\\u319L"); // "Lmidot"
+		RTFCHARS.put("lmidot", "\\u320l"); // "lmidot"
+		RTFCHARS.put("L", "\\u321L"); // "Lstrok"
+		RTFCHARS.put("l", "\\u322l"); // "lstrok"
+		RTFCHARS.put("'N", "\\u323N"); // "Nacute"
+		RTFCHARS.put("'n", "\\u324n"); // "nacute"
+		RTFCHARS.put("cN", "\\u325N"); // "Ncedil"
+		RTFCHARS.put("cn", "\\u326n"); // "ncedil"
+		RTFCHARS.put("vN", "\\u327N"); // "Ncaron"
+		RTFCHARS.put("vn", "\\u328n"); // "ncaron"
+		// Symbol #329 (�n) has no special Latex command
+		RTFCHARS.put("NG", "\\u330G"); // "ENG"
+		RTFCHARS.put("ng", "\\u331g"); // "eng"
+		RTFCHARS.put("=O", "\\u332O"); // "Omacr"
+		RTFCHARS.put("=o", "\\u333o"); // "omacr"
+		RTFCHARS.put("uO", "\\u334O"); // "Obreve"
+		RTFCHARS.put("uo", "\\u335o"); // "obreve"
+		RTFCHARS.put("HO", "\\u336?"); // "Odblac"
+		RTFCHARS.put("Ho", "\\u337?"); // "odblac"
+		RTFCHARS.put("OE", "{\\uc2\\u338OE}"); // "OElig"
+		RTFCHARS.put("oe", "{\\uc2\\u339oe}"); // "oelig"
+		RTFCHARS.put("'R", "\\u340R"); // "Racute"
+		RTFCHARS.put("'r", "\\u341r"); // "racute"
+		RTFCHARS.put("cR", "\\u342R"); // "Rcedil"
+		RTFCHARS.put("cr", "\\u343r"); // "rcedil"
+		RTFCHARS.put("vR", "\\u344R"); // "Rcaron"
+		RTFCHARS.put("vr", "\\u345r"); // "rcaron"
+		RTFCHARS.put("'S", "\\u346S"); // "Sacute"
+		RTFCHARS.put("'s", "\\u347s"); // "sacute"
+		RTFCHARS.put("^S", "\\u348S"); // "Scirc"
+		RTFCHARS.put("^s", "\\u349s"); // "scirc"
+		RTFCHARS.put("cS", "\\u350S"); // "Scedil"
+		RTFCHARS.put("cs", "\\u351s"); // "scedil"
+		RTFCHARS.put("vS", "\\u352S"); // "Scaron"
+		RTFCHARS.put("vs", "\\u353s"); // "scaron"
+		RTFCHARS.put("cT", "\\u354T"); // "Tcedil"
+		RTFCHARS.put("ct", "\\u355t"); // "tcedil"
+		RTFCHARS.put("vT", "\\u356T"); // "Tcaron"
+		// Symbol #357 (t�) has no special Latex command
+		RTFCHARS.put("Tstrok", "\\u358T"); // "Tstrok"
+		RTFCHARS.put("tstrok", "\\u359t"); // "tstrok"
+		RTFCHARS.put("~U", "\\u360U"); // "Utilde"
+		RTFCHARS.put("~u", "\\u361u"); // "utilde"
+		RTFCHARS.put("=U", "\\u362U"); // "Umacr"
+		RTFCHARS.put("=u", "\\u363u"); // "umacr"
+		RTFCHARS.put("uU", "\\u364U"); // "Ubreve"
+		RTFCHARS.put("uu", "\\u365u"); // "ubreve"
+		RTFCHARS.put("rU", "\\u366U"); // "Uring"
+		RTFCHARS.put("ru", "\\u367u"); // "uring"
+		RTFCHARS.put("HU", "\\u368?"); // "Odblac"
+		RTFCHARS.put("Hu", "\\u369?"); // "odblac"
+		RTFCHARS.put("kU", "\\u370U"); // "Uogon"
+		RTFCHARS.put("ku", "\\u371u"); // "uogon"
+		RTFCHARS.put("^W", "\\u372W"); // "Wcirc"
+		RTFCHARS.put("^w", "\\u373w"); // "wcirc"
+		RTFCHARS.put("^Y", "\\u374Y"); // "Ycirc"
+		RTFCHARS.put("^y", "\\u375y"); // "ycirc"
+		RTFCHARS.put("\"Y","\\u376Y"); // "Yuml"
+		RTFCHARS.put("'Z", "\\u377Z"); // "Zacute"
+		RTFCHARS.put("'z", "\\u378z"); // "zacute"
+		RTFCHARS.put(".Z", "\\u379Z"); // "Zdot"
+		RTFCHARS.put(".z", "\\u380z"); // "zdot"
+		RTFCHARS.put("vZ", "\\u381Z"); // "Zcaron"
+		RTFCHARS.put("vz", "\\u382z"); // "zcaron"
+		// Symbol #383 (f) has no special Latex command
+
+		// XML_CHARS.put("\\u00E1", "&#x00E1;");
+	}
+
+	public static void initializeJournalNames() {
+
+        // Read internal lists:
+        journalAbbrev = new JournalAbbreviations(JOURNALS_FILE_BUILTIN);
+		if (prefs.getBoolean("useIEEEAbrv"))
+			journalAbbrev.readJournalList("/resource/IEEEJournalList.txt");
+
+		// Read external lists, if any (in reverse order, so the upper lists
+		// override the lower):
+		String[] lists = prefs.getStringArray("externalJournalLists");
+		if ((lists != null) && (lists.length > 0)) {
+			for (int i = lists.length - 1; i >= 0; i--) {
+				try {
+					journalAbbrev.readJournalList(new File(lists[i]));
+				} catch (FileNotFoundException e) {
+					// The file couldn't be found... should we tell anyone?
+					Globals.logger(e.getMessage());
+				}
+			}
+		}
+
+		// Read personal list, if set up:
+		if (prefs.get("personalJournalList") != null) {
+			try {
+				journalAbbrev.readJournalList(new File(prefs.get("personalJournalList")));
+			} catch (FileNotFoundException e) {
+				Globals.logger("Personal journal list file '" + prefs.get("personalJournalList")
+					+ "' not found.");
+			}
+		}
+
+	}
+
+	/**
+	 * Returns a reg exp pattern in the form (w1)|(w2)| ...
+	 * wi are escaped if no regex search is enabled
+	 */
+	public static Pattern getPatternForWords(ArrayList<String> words) {
+		if ((words == null) || (words.isEmpty()) || (words.get(0).isEmpty()))
+			return Pattern.compile("");
+		
+		boolean regExSearch = Globals.prefs.getBoolean("regExpSearch");
+		
+		// compile the words to a regex in the form (w1) | (w2) | (w3)
+		String searchPattern = "(".concat(regExSearch?words.get(0):Pattern.quote(words.get(0))).concat(")");
+		for (int i = 1; i < words.size(); i++) {
+			searchPattern = searchPattern.concat("|(").concat(regExSearch?words.get(i):Pattern.quote(words.get(i))).concat(")");
+		}
+
+		Pattern pattern;
+		if (Globals.prefs.getBoolean("caseSensitiveSearch")) {
+			pattern = Pattern.compile(searchPattern);
+		} else {
+			pattern = Pattern.compile(searchPattern, Pattern.CASE_INSENSITIVE);
+		}
+		
+		return pattern;
+	}
+
+	/**
+	 * With Java 7, one could directly set a format for the SimpleFormatter
+	 * (http://stackoverflow.com/a/10722260/873282) and use that in a StreamHandler.
+	 * As JabRef is compatible with Java6, we have to write our own Handler
+	 */
+	private static class StdoutConsoleHandler extends Handler {
+
+		@Override
+        public void close() throws SecurityException {
+        }
+
+		@Override
+        public void flush() {
+			System.out.flush();
+        }
+
+		@Override
+        public void publish(LogRecord record) {
+	        System.out.println(record.getMessage());
+	        System.out.flush();
+        }
+	}
+
+	public static void setupLogging() {
+		// get the root logger. It is NOT GLOBAL_LOGGER_NAME
+	    Logger rootLogger = Logger.getLogger("");
+	    
+	    // disable console logging by removing all handlers
+	    Handler[] handlers = rootLogger.getHandlers();
+	    for(Handler handler : handlers) {
+	        rootLogger.removeHandler(handler);
+	    }
+
+	    // add new handler logging to System.out
+		StdoutConsoleHandler h = new StdoutConsoleHandler();
+		rootLogger.addHandler(h);
+
+		rootLogger.addHandler(errorConsole);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/IconStringRenderer.java b/src/java/net/sf/jabref/IconStringRenderer.java
index 9fa96f1..8b1e9a2 100644
--- a/src/java/net/sf/jabref/IconStringRenderer.java
+++ b/src/java/net/sf/jabref/IconStringRenderer.java
@@ -1,51 +1,51 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.Component;
-
-import javax.swing.JLabel;
-import javax.swing.JTable;
-import javax.swing.table.DefaultTableCellRenderer;
-
-/**
- * @author sarahspi
- *
- */
-public class IconStringRenderer extends DefaultTableCellRenderer {
-
-    String toolTip;
-
-    public IconStringRenderer(String toolTip) {
-	this.toolTip = toolTip;
-    }
-
-	  /*
-	   * @see TableCellRenderer#getTableCellRendererComponent(JTable, Object, boolean, boolean, int, int)
-	   */
-	  public Component getTableCellRendererComponent(JTable table, Object value,
-	                                                 boolean isSelected, boolean hasFocus, 
-	                                                 int row, int column) {
-	  	JLabel retval = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus,row,column);	  	
-	  	if (value instanceof JLabel) {
-	  		retval.setText(((JLabel)value).getText());
-	  		retval.setIcon(((JLabel)value).getIcon());
-	  		retval.setToolTipText(toolTip);
-	  	}
-	    return retval;
-	  }
-	
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.Component;
+
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
+
+/**
+ * @author sarahspi
+ *
+ */
+public class IconStringRenderer extends DefaultTableCellRenderer {
+
+    String toolTip;
+
+    public IconStringRenderer(String toolTip) {
+	this.toolTip = toolTip;
+    }
+
+	  /*
+	   * @see TableCellRenderer#getTableCellRendererComponent(JTable, Object, boolean, boolean, int, int)
+	   */
+	  public Component getTableCellRendererComponent(JTable table, Object value,
+	                                                 boolean isSelected, boolean hasFocus, 
+	                                                 int row, int column) {
+	  	JLabel retval = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus,row,column);	  	
+	  	if (value instanceof JLabel) {
+	  		retval.setText(((JLabel)value).getText());
+	  		retval.setIcon(((JLabel)value).getIcon());
+	  		retval.setToolTipText(toolTip);
+	  	}
+	    return retval;
+	  }
+	
+}
diff --git a/src/java/net/sf/jabref/IdComparator.java b/src/java/net/sf/jabref/IdComparator.java
index 85ae779..17fdd93 100644
--- a/src/java/net/sf/jabref/IdComparator.java
+++ b/src/java/net/sf/jabref/IdComparator.java
@@ -1,30 +1,30 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.util.Comparator;
-
-/**
- * Comparator for sorting BibtexEntry objects based on their ID. This
- * can be used to sort entries back into the order they were created,
- * provided the IDs given to entries are lexically monotonically increasing.
- */
-public class IdComparator implements Comparator<BibtexEntry> {
-
-    public int compare(BibtexEntry one, BibtexEntry two) {
-        return one.getId().compareTo(two.getId());
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.util.Comparator;
+
+/**
+ * Comparator for sorting BibtexEntry objects based on their ID. This
+ * can be used to sort entries back into the order they were created,
+ * provided the IDs given to entries are lexically monotonically increasing.
+ */
+public class IdComparator implements Comparator<BibtexEntry> {
+
+    public int compare(BibtexEntry one, BibtexEntry two) {
+        return one.getId().compareTo(two.getId());
+    }
+}
diff --git a/src/java/net/sf/jabref/ImportSettingsTab.java b/src/java/net/sf/jabref/ImportSettingsTab.java
index 136d8e3..88b7a67 100644
--- a/src/java/net/sf/jabref/ImportSettingsTab.java
+++ b/src/java/net/sf/jabref/ImportSettingsTab.java
@@ -1,197 +1,197 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.*;
-
-import spl.gui.ImportDialog;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-public class ImportSettingsTab extends JPanel implements PrefsTab {
-
-	public final static String PREF_IMPORT_ALWAYSUSE = "importAlwaysUsePDFImportStyle";
-	public final static String PREF_IMPORT_DEFAULT_PDF_IMPORT_STYLE = "importDefaultPDFimportStyle";
-	public final static int DEFAULT_STYLE = ImportDialog.CONTENT; 
-	
-	public final static String PREF_IMPORT_FILENAMEPATTERN = "importFileNamePattern"; 
-	public final static String[] DEFAULT_FILENAMEPATTERNS_DISPLAY = new String[] {
-            "bibtexkey",
-            "bibtexkey - title",
-    };
-    public final static String[] DEFAULT_FILENAMEPATTERNS = new String[] {
-            "\\bibtexkey",
-            "\\bibtexkey\\begin{title} - \\format[RemoveBrackets]{\\title}\\end{title}"
-    };
-	
-    private JRadioButton radioButtonXmp;
-	private JRadioButton radioButtonPDFcontent;
-    private JRadioButton radioButtonMrDlib;
-    private JRadioButton radioButtonNoMeta;
-	private JRadioButton radioButtononlyAttachPDF;
-	private JRadioButton radioButtonUpdateEmptyFields;
-	private JCheckBox useDefaultPDFImportStyle;
-	
-	private JTextField fileNamePattern;
-	private JButton selectFileNamePattern;
-
-	public ImportSettingsTab() {
-        setLayout(new BorderLayout());
-        FormLayout layout = new FormLayout("1dlu, 8dlu, left:pref, 4dlu, fill:3dlu");
-        radioButtonNoMeta = new JRadioButton(Globals.lang("Create_blank_entry_linking_the_PDF"));
-        radioButtonXmp = new JRadioButton(Globals.lang("Create_entry_based_on_XMP_data"));
-        radioButtonPDFcontent = new JRadioButton(Globals.lang("Create_entry_based_on_content"));
-        radioButtonMrDlib = new JRadioButton(Globals.lang("Create_entry_based_on_data_fetched_from")+" Mr.DLib");
-        radioButtononlyAttachPDF = new JRadioButton(Globals.lang("Only_attach_PDF"));
-        radioButtonUpdateEmptyFields = new JRadioButton(Globals.lang("Update_empty_fields_with_data_fetched_from")
-            +" Mr.DLib");
-        ButtonGroup bg = new ButtonGroup();
-        bg.add(radioButtonNoMeta);
-        bg.add(radioButtonXmp);
-        bg.add(radioButtonPDFcontent);
-        bg.add(radioButtonMrDlib);
-        bg.add(radioButtononlyAttachPDF);
-        bg.add(radioButtonUpdateEmptyFields);
-
-        useDefaultPDFImportStyle = new JCheckBox(Globals.lang("Always use this PDF import style (and do not ask for each import)"));
-		
-        fileNamePattern = new JTextField(50);
-        selectFileNamePattern = new JButton(Globals.lang("Choose pattern"));
-        selectFileNamePattern.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-                openFilePatternMenu();
-			}
-		});
-
-		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-	    JPanel pan = new JPanel();
-
-		builder.appendSeparator(Globals.lang("Default import style for drag&drop of PDFs"));
-        builder.nextLine();
-        builder.append(pan);
-		builder.append(radioButtonNoMeta);
-        builder.nextLine();
-        builder.append(pan);
-		builder.append(radioButtonXmp);
-        builder.nextLine();
-        builder.append(pan);
-		builder.append(radioButtonPDFcontent);
-        builder.nextLine();
-        builder.append(pan);
-		builder.append(radioButtonMrDlib);
-        builder.nextLine();
-        builder.append(pan);
-		builder.append(radioButtononlyAttachPDF);
-        builder.nextLine();
-        builder.append(pan);
-		builder.append(radioButtonUpdateEmptyFields);
-        builder.nextLine();
-        builder.append(pan);
-		builder.append(useDefaultPDFImportStyle);
-        builder.nextLine();
-		
-		builder.appendSeparator(Globals.lang("Default PDF file link action"));
-        builder.nextLine();
-        builder.append(pan);
-        JPanel pan2 = new JPanel();
-        JLabel lab = new JLabel(Globals.lang("File name format pattern").concat(":"));
-        pan2.add(lab);
-        pan2.add(fileNamePattern);
-        pan2.add(selectFileNamePattern);
-        builder.append(pan2);
-
-        pan = builder.getPanel();
-        pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-        add(pan, BorderLayout.CENTER);
-	}
-	
-	public void setValues() {
-		useDefaultPDFImportStyle.setSelected(Globals.prefs.getBoolean(PREF_IMPORT_ALWAYSUSE));
-		int style = Globals.prefs.getInt(PREF_IMPORT_DEFAULT_PDF_IMPORT_STYLE);
-		switch (style) {
-		case ImportDialog.NOMETA:
-			radioButtonNoMeta.setSelected(true);
-			break;
-		case ImportDialog.XMP:
-			radioButtonXmp.setSelected(true);
-			break;
-		case ImportDialog.CONTENT:
-			radioButtonPDFcontent.setSelected(true);
-			break;
-		case ImportDialog.MRDLIB:
-			radioButtonMrDlib.setSelected(true);
-			break;
-		case ImportDialog.ONLYATTACH:
-			radioButtononlyAttachPDF.setSelected(true);
-			break;
-		case ImportDialog.UPDATEEMPTYFIELDS:
-			radioButtonUpdateEmptyFields.setSelected(true);
-			break;
-		default:
-			// fallback
-			radioButtonPDFcontent.setSelected(true);
-			break;
-		}
-		fileNamePattern.setText(Globals.prefs.get(PREF_IMPORT_FILENAMEPATTERN));
-	}
-
-	public void storeSettings() {
-		Globals.prefs.putBoolean(PREF_IMPORT_ALWAYSUSE, useDefaultPDFImportStyle.isSelected());
-		int style = DEFAULT_STYLE;
-		if (radioButtonNoMeta.isSelected())
-			style = ImportDialog.NOMETA;
-		else if (radioButtonXmp.isSelected())
-			style = ImportDialog.XMP;
-		else if (radioButtonPDFcontent.isSelected())
-			style = ImportDialog.CONTENT;
-		else if (radioButtonMrDlib.isSelected())
-			style = ImportDialog.MRDLIB;
-		else if (radioButtononlyAttachPDF.isSelected())
-			style = ImportDialog.ONLYATTACH;
-		else if (radioButtonUpdateEmptyFields.isSelected())
-			style = ImportDialog.UPDATEEMPTYFIELDS;
-		Globals.prefs.putInt(PREF_IMPORT_DEFAULT_PDF_IMPORT_STYLE, style);
-		Globals.prefs.put(PREF_IMPORT_FILENAMEPATTERN, fileNamePattern.getText());
-	}
-
-	public boolean readyToClose() {
-		return true;
-	}
-
-	public String getTabName() {
-		return Globals.lang("Import");
-	}
-
-    private void openFilePatternMenu() {
-        JPopupMenu popup = new JPopupMenu();
-        for (int i = 0; i < DEFAULT_FILENAMEPATTERNS.length; i++) {
-            final JMenuItem item = new JMenuItem(DEFAULT_FILENAMEPATTERNS_DISPLAY[i]);
-            final String toSet = DEFAULT_FILENAMEPATTERNS[i];
-            item.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent actionEvent) {
-                    fileNamePattern.setText(toSet);
-                }
-            });
-            popup.add(item);
-        }
-        popup.show(selectFileNamePattern, 0, selectFileNamePattern.getHeight());
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.*;
+
+import spl.gui.ImportDialog;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+public class ImportSettingsTab extends JPanel implements PrefsTab {
+
+	public final static String PREF_IMPORT_ALWAYSUSE = "importAlwaysUsePDFImportStyle";
+	public final static String PREF_IMPORT_DEFAULT_PDF_IMPORT_STYLE = "importDefaultPDFimportStyle";
+	public final static int DEFAULT_STYLE = ImportDialog.CONTENT; 
+	
+	public final static String PREF_IMPORT_FILENAMEPATTERN = "importFileNamePattern"; 
+	public final static String[] DEFAULT_FILENAMEPATTERNS_DISPLAY = new String[] {
+            "bibtexkey",
+            "bibtexkey - title",
+    };
+    public final static String[] DEFAULT_FILENAMEPATTERNS = new String[] {
+            "\\bibtexkey",
+            "\\bibtexkey\\begin{title} - \\format[RemoveBrackets]{\\title}\\end{title}"
+    };
+	
+    private JRadioButton radioButtonXmp;
+	private JRadioButton radioButtonPDFcontent;
+    private JRadioButton radioButtonMrDlib;
+    private JRadioButton radioButtonNoMeta;
+	private JRadioButton radioButtononlyAttachPDF;
+	private JRadioButton radioButtonUpdateEmptyFields;
+	private JCheckBox useDefaultPDFImportStyle;
+	
+	private JTextField fileNamePattern;
+	private JButton selectFileNamePattern;
+
+	public ImportSettingsTab() {
+        setLayout(new BorderLayout());
+        FormLayout layout = new FormLayout("1dlu, 8dlu, left:pref, 4dlu, fill:3dlu");
+        radioButtonNoMeta = new JRadioButton(Globals.lang("Create_blank_entry_linking_the_PDF"));
+        radioButtonXmp = new JRadioButton(Globals.lang("Create_entry_based_on_XMP_data"));
+        radioButtonPDFcontent = new JRadioButton(Globals.lang("Create_entry_based_on_content"));
+        radioButtonMrDlib = new JRadioButton(Globals.lang("Create_entry_based_on_data_fetched_from")+" Mr.DLib");
+        radioButtononlyAttachPDF = new JRadioButton(Globals.lang("Only_attach_PDF"));
+        radioButtonUpdateEmptyFields = new JRadioButton(Globals.lang("Update_empty_fields_with_data_fetched_from")
+            +" Mr.DLib");
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(radioButtonNoMeta);
+        bg.add(radioButtonXmp);
+        bg.add(radioButtonPDFcontent);
+        bg.add(radioButtonMrDlib);
+        bg.add(radioButtononlyAttachPDF);
+        bg.add(radioButtonUpdateEmptyFields);
+
+        useDefaultPDFImportStyle = new JCheckBox(Globals.lang("Always use this PDF import style (and do not ask for each import)"));
+		
+        fileNamePattern = new JTextField(50);
+        selectFileNamePattern = new JButton(Globals.lang("Choose pattern"));
+        selectFileNamePattern.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+                openFilePatternMenu();
+			}
+		});
+
+		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+	    JPanel pan = new JPanel();
+
+		builder.appendSeparator(Globals.lang("Default import style for drag&drop of PDFs"));
+        builder.nextLine();
+        builder.append(pan);
+		builder.append(radioButtonNoMeta);
+        builder.nextLine();
+        builder.append(pan);
+		builder.append(radioButtonXmp);
+        builder.nextLine();
+        builder.append(pan);
+		builder.append(radioButtonPDFcontent);
+        builder.nextLine();
+        builder.append(pan);
+		builder.append(radioButtonMrDlib);
+        builder.nextLine();
+        builder.append(pan);
+		builder.append(radioButtononlyAttachPDF);
+        builder.nextLine();
+        builder.append(pan);
+		builder.append(radioButtonUpdateEmptyFields);
+        builder.nextLine();
+        builder.append(pan);
+		builder.append(useDefaultPDFImportStyle);
+        builder.nextLine();
+		
+		builder.appendSeparator(Globals.lang("Default PDF file link action"));
+        builder.nextLine();
+        builder.append(pan);
+        JPanel pan2 = new JPanel();
+        JLabel lab = new JLabel(Globals.lang("File name format pattern").concat(":"));
+        pan2.add(lab);
+        pan2.add(fileNamePattern);
+        pan2.add(selectFileNamePattern);
+        builder.append(pan2);
+
+        pan = builder.getPanel();
+        pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        add(pan, BorderLayout.CENTER);
+	}
+	
+	public void setValues() {
+		useDefaultPDFImportStyle.setSelected(Globals.prefs.getBoolean(PREF_IMPORT_ALWAYSUSE));
+		int style = Globals.prefs.getInt(PREF_IMPORT_DEFAULT_PDF_IMPORT_STYLE);
+		switch (style) {
+		case ImportDialog.NOMETA:
+			radioButtonNoMeta.setSelected(true);
+			break;
+		case ImportDialog.XMP:
+			radioButtonXmp.setSelected(true);
+			break;
+		case ImportDialog.CONTENT:
+			radioButtonPDFcontent.setSelected(true);
+			break;
+		case ImportDialog.MRDLIB:
+			radioButtonMrDlib.setSelected(true);
+			break;
+		case ImportDialog.ONLYATTACH:
+			radioButtononlyAttachPDF.setSelected(true);
+			break;
+		case ImportDialog.UPDATEEMPTYFIELDS:
+			radioButtonUpdateEmptyFields.setSelected(true);
+			break;
+		default:
+			// fallback
+			radioButtonPDFcontent.setSelected(true);
+			break;
+		}
+		fileNamePattern.setText(Globals.prefs.get(PREF_IMPORT_FILENAMEPATTERN));
+	}
+
+	public void storeSettings() {
+		Globals.prefs.putBoolean(PREF_IMPORT_ALWAYSUSE, useDefaultPDFImportStyle.isSelected());
+		int style = DEFAULT_STYLE;
+		if (radioButtonNoMeta.isSelected())
+			style = ImportDialog.NOMETA;
+		else if (radioButtonXmp.isSelected())
+			style = ImportDialog.XMP;
+		else if (radioButtonPDFcontent.isSelected())
+			style = ImportDialog.CONTENT;
+		else if (radioButtonMrDlib.isSelected())
+			style = ImportDialog.MRDLIB;
+		else if (radioButtononlyAttachPDF.isSelected())
+			style = ImportDialog.ONLYATTACH;
+		else if (radioButtonUpdateEmptyFields.isSelected())
+			style = ImportDialog.UPDATEEMPTYFIELDS;
+		Globals.prefs.putInt(PREF_IMPORT_DEFAULT_PDF_IMPORT_STYLE, style);
+		Globals.prefs.put(PREF_IMPORT_FILENAMEPATTERN, fileNamePattern.getText());
+	}
+
+	public boolean readyToClose() {
+		return true;
+	}
+
+	public String getTabName() {
+		return Globals.lang("Import");
+	}
+
+    private void openFilePatternMenu() {
+        JPopupMenu popup = new JPopupMenu();
+        for (int i = 0; i < DEFAULT_FILENAMEPATTERNS.length; i++) {
+            final JMenuItem item = new JMenuItem(DEFAULT_FILENAMEPATTERNS_DISPLAY[i]);
+            final String toSet = DEFAULT_FILENAMEPATTERNS[i];
+            item.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent actionEvent) {
+                    fileNamePattern.setText(toSet);
+                }
+            });
+            popup.add(item);
+        }
+        popup.show(selectFileNamePattern, 0, selectFileNamePattern.getHeight());
+    }
+}
diff --git a/src/java/net/sf/jabref/IncrementalSearcher.java b/src/java/net/sf/jabref/IncrementalSearcher.java
index 5d9eec5..448a431 100644
--- a/src/java/net/sf/jabref/IncrementalSearcher.java
+++ b/src/java/net/sf/jabref/IncrementalSearcher.java
@@ -1,74 +1,74 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.util.Set;
-
-
-public class IncrementalSearcher {
-
-    JabRefPreferences prefs;
-    private String hitInField;
-
-    public IncrementalSearcher(JabRefPreferences prefs) {
-	this.prefs = prefs;
-    }
-
-    public String getField() {
-	return hitInField;
-    }
-
-    public boolean search(String pattern, BibtexEntry bibtexEntry) {
-	    hitInField = null;
-	    return searchFields(bibtexEntry.getAllFields(), bibtexEntry, pattern);
-    }
-
-	protected boolean searchFields(Set<String> fields, BibtexEntry bibtexEntry, 
-				       String searchString) {
-	    boolean found = false;
-	    if (fields != null) {
-	    	
-	    	for (String field : fields){
-		    try {
-			/*Globals.logger("Searching field '"+fields[i].toString()
-				       +"' for '"
-				       +pattern.toString()+"'.");*/
-			if (bibtexEntry.getField(field.toString()) != null) {
-			    if (prefs.getBoolean("caseSensitiveSearch")) {
-				if (bibtexEntry.getField(field.toString())
-				    .toString().indexOf(searchString) > -1)
-				    found = true;
-			    } else {
-				if (bibtexEntry.getField(field.toString())
-				    .toString().toLowerCase()
-				    .indexOf(searchString.toLowerCase()) > -1)
-				    found = true;
-			    }
-			    
-			    if (found) {
-				hitInField = field.toString();
-				return true;
-			    }
-			}
-		    }			
-		    catch(Throwable t ){
-			System.err.println("Searching error: "+t) ; 
-		    }
-		}  
-	    }
-	    return false;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.util.Set;
+
+
+public class IncrementalSearcher {
+
+    JabRefPreferences prefs;
+    private String hitInField;
+
+    public IncrementalSearcher(JabRefPreferences prefs) {
+	this.prefs = prefs;
+    }
+
+    public String getField() {
+	return hitInField;
+    }
+
+    public boolean search(String pattern, BibtexEntry bibtexEntry) {
+	    hitInField = null;
+	    return searchFields(bibtexEntry.getAllFields(), bibtexEntry, pattern);
+    }
+
+	protected boolean searchFields(Set<String> fields, BibtexEntry bibtexEntry, 
+				       String searchString) {
+	    boolean found = false;
+	    if (fields != null) {
+	    	
+	    	for (String field : fields){
+		    try {
+			/*Globals.logger("Searching field '"+fields[i].toString()
+				       +"' for '"
+				       +pattern.toString()+"'.");*/
+			if (bibtexEntry.getField(field.toString()) != null) {
+			    if (prefs.getBoolean("caseSensitiveSearch")) {
+				if (bibtexEntry.getField(field.toString())
+				    .toString().indexOf(searchString) > -1)
+				    found = true;
+			    } else {
+				if (bibtexEntry.getField(field.toString())
+				    .toString().toLowerCase()
+				    .indexOf(searchString.toLowerCase()) > -1)
+				    found = true;
+			    }
+			    
+			    if (found) {
+				hitInField = field.toString();
+				return true;
+			    }
+			}
+		    }			
+		    catch(Throwable t ){
+			System.err.println("Searching error: "+t) ; 
+		    }
+		}  
+	    }
+	    return false;
+	}
+}
diff --git a/src/java/net/sf/jabref/JTextAreaWithHighlighting.java b/src/java/net/sf/jabref/JTextAreaWithHighlighting.java
index 3675802..951f06e 100644
--- a/src/java/net/sf/jabref/JTextAreaWithHighlighting.java
+++ b/src/java/net/sf/jabref/JTextAreaWithHighlighting.java
@@ -1,174 +1,174 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.event.ActionEvent;
-import java.util.ArrayList;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.swing.*;
-import javax.swing.event.UndoableEditEvent;
-import javax.swing.event.UndoableEditListener;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.DefaultHighlighter;
-import javax.swing.text.Document;
-import javax.swing.text.Highlighter;
-import javax.swing.undo.CannotRedoException;
-import javax.swing.undo.CannotUndoException;
-import javax.swing.undo.UndoManager;
-
-public class JTextAreaWithHighlighting extends JTextArea implements SearchTextListener {
-
-	private ArrayList<String> wordsToHighlight;
-
-    private UndoManager undo;
-
-
-	public JTextAreaWithHighlighting() {
-		super();
-        setupUndoRedo();
-	}
-
-	public JTextAreaWithHighlighting(String text) {
-		super(text);
-        setupUndoRedo();
-	}
-
-	public JTextAreaWithHighlighting(Document doc) {
-		super(doc);
-        setupUndoRedo();
-	}
-
-	public JTextAreaWithHighlighting(int rows, int columns) {
-		super(rows, columns);
-        setupUndoRedo();
-	}
-
-	public JTextAreaWithHighlighting(String text, int rows, int columns) {
-		super(text, rows, columns);
-        setupUndoRedo();
-	}
-
-	public JTextAreaWithHighlighting(Document doc, String text, int rows,
-			int columns) {
-		super(doc, text, rows, columns);
-        setupUndoRedo();
-	}
-
-    protected void setupUndoRedo() {
-        undo = new UndoManager();
-        Document doc = getDocument();
-
-        // Listen for undo and redo events
-        doc.addUndoableEditListener(new UndoableEditListener() {
-            public void undoableEditHappened(UndoableEditEvent evt) {
-                undo.addEdit(evt.getEdit());
-            }
-        });
-
-        // Create an undo action and add it to the text component
-        getActionMap().put("Undo",
-                new AbstractAction("Undo") {
-                    public void actionPerformed(ActionEvent evt) {
-                        try {
-                            if (undo.canUndo()) {
-                                undo.undo();
-                            }
-                        } catch (CannotUndoException e) {
-                        }
-                    }
-                });
-
-        // Bind the undo action to ctl-Z
-        getInputMap().put(Globals.prefs.getKey("Undo"), "Undo");
-
-        // Create a redo action and add it to the text component
-        getActionMap().put("Redo",
-                new AbstractAction("Redo") {
-                    public void actionPerformed(ActionEvent evt) {
-                        try {
-                            if (undo.canRedo()) {
-                                undo.redo();
-                            }
-                        } catch (CannotRedoException e) {
-                        }
-                    }
-                });
-
-        // Bind the redo action to ctl-Y
-        getInputMap().put(Globals.prefs.getKey("Redo"), "Redo");
-    }
-
-    /**
-	 * Highlight words in the Textarea
-	 * 
-	 * @param words to highlight
-	 */
-	private void highLight(ArrayList<String> words) {
-		// highlight all characters that appear in charsToHighlight
-		Highlighter h = getHighlighter();
-		// myTa.set
-		h.removeAllHighlights();
-
-		if (words == null || words.isEmpty() || words.get(0).isEmpty()) {
-			return;
-		}
-		String content = getText();
-		if (content.isEmpty())
-			return;
-
-		Matcher matcher = Globals.getPatternForWords(words).matcher(content);
-
-		while (matcher.find()) {
-			try {
-				h.addHighlight(matcher.start(), matcher.end(), DefaultHighlighter.DefaultPainter);
-			} catch (BadLocationException ble) {
-				// should not occur if matcher works right
-				System.out.println(ble);
-			}
-		}
-
-	}
-
-	@Override
-	public void setText(String t) {
-		super.setText(t);
-		if (Globals.prefs.getBoolean("highLightWords")) {
-			highLight(wordsToHighlight);
-		}
-        if (undo != null) undo.discardAllEdits();
-	}
-
-	public void searchText(ArrayList<String> words) {
-		// words have to be stored in class variable as 
-		// setText() makes use of them
-		
-		if (Globals.prefs.getBoolean("highLightWords")) {
-			this.wordsToHighlight = words;
-			highLight(words);
-		} else {
-			if (this.wordsToHighlight != null) {
-				// setting of "highLightWords" seems to have changed.
-				// clear all highlights and remember the clearing (by wordsToHighlight = null)
-				this.wordsToHighlight = null;
-				highLight(null);
-			}
-		}
-		
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.*;
+import javax.swing.event.UndoableEditEvent;
+import javax.swing.event.UndoableEditListener;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.DefaultHighlighter;
+import javax.swing.text.Document;
+import javax.swing.text.Highlighter;
+import javax.swing.undo.CannotRedoException;
+import javax.swing.undo.CannotUndoException;
+import javax.swing.undo.UndoManager;
+
+public class JTextAreaWithHighlighting extends JTextArea implements SearchTextListener {
+
+	private ArrayList<String> wordsToHighlight;
+
+    private UndoManager undo;
+
+
+	public JTextAreaWithHighlighting() {
+		super();
+        setupUndoRedo();
+	}
+
+	public JTextAreaWithHighlighting(String text) {
+		super(text);
+        setupUndoRedo();
+	}
+
+	public JTextAreaWithHighlighting(Document doc) {
+		super(doc);
+        setupUndoRedo();
+	}
+
+	public JTextAreaWithHighlighting(int rows, int columns) {
+		super(rows, columns);
+        setupUndoRedo();
+	}
+
+	public JTextAreaWithHighlighting(String text, int rows, int columns) {
+		super(text, rows, columns);
+        setupUndoRedo();
+	}
+
+	public JTextAreaWithHighlighting(Document doc, String text, int rows,
+			int columns) {
+		super(doc, text, rows, columns);
+        setupUndoRedo();
+	}
+
+    protected void setupUndoRedo() {
+        undo = new UndoManager();
+        Document doc = getDocument();
+
+        // Listen for undo and redo events
+        doc.addUndoableEditListener(new UndoableEditListener() {
+            public void undoableEditHappened(UndoableEditEvent evt) {
+                undo.addEdit(evt.getEdit());
+            }
+        });
+
+        // Create an undo action and add it to the text component
+        getActionMap().put("Undo",
+                new AbstractAction("Undo") {
+                    public void actionPerformed(ActionEvent evt) {
+                        try {
+                            if (undo.canUndo()) {
+                                undo.undo();
+                            }
+                        } catch (CannotUndoException e) {
+                        }
+                    }
+                });
+
+        // Bind the undo action to ctl-Z
+        getInputMap().put(Globals.prefs.getKey("Undo"), "Undo");
+
+        // Create a redo action and add it to the text component
+        getActionMap().put("Redo",
+                new AbstractAction("Redo") {
+                    public void actionPerformed(ActionEvent evt) {
+                        try {
+                            if (undo.canRedo()) {
+                                undo.redo();
+                            }
+                        } catch (CannotRedoException e) {
+                        }
+                    }
+                });
+
+        // Bind the redo action to ctl-Y
+        getInputMap().put(Globals.prefs.getKey("Redo"), "Redo");
+    }
+
+    /**
+	 * Highlight words in the Textarea
+	 * 
+	 * @param words to highlight
+	 */
+	private void highLight(ArrayList<String> words) {
+		// highlight all characters that appear in charsToHighlight
+		Highlighter h = getHighlighter();
+		// myTa.set
+		h.removeAllHighlights();
+
+		if (words == null || words.isEmpty() || words.get(0).isEmpty()) {
+			return;
+		}
+		String content = getText();
+		if (content.isEmpty())
+			return;
+
+		Matcher matcher = Globals.getPatternForWords(words).matcher(content);
+
+		while (matcher.find()) {
+			try {
+				h.addHighlight(matcher.start(), matcher.end(), DefaultHighlighter.DefaultPainter);
+			} catch (BadLocationException ble) {
+				// should not occur if matcher works right
+				System.out.println(ble);
+			}
+		}
+
+	}
+
+	@Override
+	public void setText(String t) {
+		super.setText(t);
+		if (Globals.prefs.getBoolean("highLightWords")) {
+			highLight(wordsToHighlight);
+		}
+        if (undo != null) undo.discardAllEdits();
+	}
+
+	public void searchText(ArrayList<String> words) {
+		// words have to be stored in class variable as 
+		// setText() makes use of them
+		
+		if (Globals.prefs.getBoolean("highLightWords")) {
+			this.wordsToHighlight = words;
+			highLight(words);
+		} else {
+			if (this.wordsToHighlight != null) {
+				// setting of "highLightWords" seems to have changed.
+				// clear all highlights and remember the clearing (by wordsToHighlight = null)
+				this.wordsToHighlight = null;
+				highLight(null);
+			}
+		}
+		
+	}
+
+}
diff --git a/src/java/net/sf/jabref/JabRef.java b/src/java/net/sf/jabref/JabRef.java
index ae57a65..ab4de52 100644
--- a/src/java/net/sf/jabref/JabRef.java
+++ b/src/java/net/sf/jabref/JabRef.java
@@ -1,985 +1,1027 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import com.jgoodies.looks.plastic.Plastic3DLookAndFeel;
-import com.jgoodies.looks.plastic.theme.SkyBluer;
-import gnu.dtools.ritopt.BooleanOption;
-import gnu.dtools.ritopt.Options;
-import gnu.dtools.ritopt.StringOption;
-
-import java.awt.Font;
-import java.awt.Frame;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Vector;
-import java.util.prefs.BackingStoreException;
-
-import javax.swing.*;
-
-import net.sf.jabref.export.AutoSaveManager;
-import net.sf.jabref.export.ExportFormats;
-import net.sf.jabref.export.FileActions;
-import net.sf.jabref.export.IExportFormat;
-import net.sf.jabref.export.SaveException;
-import net.sf.jabref.export.SaveSession;
-import net.sf.jabref.imports.AutosaveStartupPrompter;
-import net.sf.jabref.imports.EntryFetcher;
-import net.sf.jabref.imports.ImportInspectionCommandLine;
-import net.sf.jabref.imports.OpenDatabaseAction;
-import net.sf.jabref.imports.ParserResult;
-import net.sf.jabref.plugin.PluginCore;
-import net.sf.jabref.plugin.PluginInstaller;
-import net.sf.jabref.plugin.SidePanePlugin;
-import net.sf.jabref.plugin.core.JabRefPlugin;
-import net.sf.jabref.plugin.core.generated._JabRefPlugin;
-import net.sf.jabref.plugin.core.generated._JabRefPlugin.EntryFetcherExtension;
-import net.sf.jabref.remote.RemoteListener;
-import net.sf.jabref.util.Pair;
-import net.sf.jabref.wizard.auximport.AuxCommandLine;
-
-/**
- * JabRef Main Class - The application gets started here.
- *
- */
-public class JabRef {
-
-	public static JabRef singleton;
-    public static RemoteListener remoteListener = null;
-    public static JabRefFrame jrf;
-    public Options options;
-    public static Frame splashScreen = null;
-
-    boolean graphicFailure = false;
-
-    StringOption importFile, exportFile, exportPrefs, importPrefs, auxImExport, importToOpenBase,
-            fetcherEngine, exportMatches, defPrefs;
-    BooleanOption helpO, disableGui, blank, loadSess, showVersion, disableSplash;
-
-    private final static String exportMatchesSyntax = "[".concat(Globals.lang("field")).concat("]").concat("searchTerm").concat(",").concat("outputFile").concat(": ").concat(Globals.lang("file")).concat("[,").concat(Globals.lang("exportFormat")).concat("]");
-
-    public static final int MAX_DIALOG_WARNINGS = 10;
-
-    public static void main(String[] args) {
-        new JabRef(args);
-    }
-
-    protected JabRef(String[] args) {
-
-		singleton = this;
-
-		// The following two lines signal that the system proxy settings should
-		// be used:
-		System.setProperty("java.net.useSystemProxies", "true");
-		System.getProperties().put("proxySet", "true");
-
-		JabRefPreferences prefs = JabRefPreferences.getInstance();
-
-        // See if there are plugins scheduled for deletion:
-        if (prefs.hasKey("deletePlugins") && (prefs.get("deletePlugins").length() > 0)) {
-            String[] toDelete = prefs.getStringArray("deletePlugins");
-            PluginInstaller.deletePluginsOnStartup(toDelete);
-            prefs.put("deletePlugins", "");
-        }
-
-        Globals.startBackgroundTasks();
-        Globals.setupLogging();
-		Globals.prefs = prefs;
-        String langStr = prefs.get("language");
-        String[] parts = langStr.split("_");
-        String language, country;
-        if (parts.length == 1) {
-            language = langStr;
-            country = "";
-        }
-        else {
-            language = parts[0];
-            country = parts[1];
-        }
-
-		Globals.setLanguage(language, country);
-        Globals.prefs.setLanguageDependentDefaultValues();
-		/*
-		 * The Plug-in System is started automatically on the first call to
-		 * PluginCore.getManager().
-		 * 
-		 * Plug-ins are activated on the first call to their getInstance method.
-		 */
-
-        // Update which fields should be treated as numeric, based on preferences:
-        BibtexFields.setNumericFieldsFromPrefs();
-		
-		/* Build list of Import and Export formats */
-		Globals.importFormatReader.resetImportFormats();
-		BibtexEntryType.loadCustomEntryTypes(prefs);
-		ExportFormats.initAllExports();
-		
-		// Read list(s) of journal names and abbreviations:
-        Globals.initializeJournalNames();
-
-		// Check for running JabRef
-		if (Globals.prefs.getBoolean("useRemoteServer")) {
-			remoteListener = RemoteListener.openRemoteListener(this);
-
-			if (remoteListener == null) {
-				// Unless we are alone, try to contact already running JabRef:
-				if (RemoteListener.sendToActiveJabRefInstance(args)) {
-
-					/*
-					 * We have successfully sent our command line options
-					 * through the socket to another JabRef instance. So we
-					 * assume it's all taken care of, and quit.
-					 */
-					System.out.println(
-                            Globals.lang("Arguments passed on to running JabRef instance. Shutting down."));
-					System.exit(0);
-				}
-			} else {
-				// No listener found, thus we are the first instance to be
-				// started.
-				remoteListener.start();
-			}
-		}
-
-		/*
-		 * See if the user has a personal journal list set up. If so, add these
-		 * journal names and abbreviations to the list:
-		 */
-		String personalJournalList = prefs.get("personalJournalList");
-		if (personalJournalList != null) {
-			try {
-				Globals.journalAbbrev.readJournalList(new File(
-						personalJournalList));
-			} catch (FileNotFoundException e) {
-				e.printStackTrace();
-			}
-		}
-
-		/*
-		 * Make sure of a proper cleanup when quitting (e.g. deleting temporary
-		 * files).
-		 * 
-		 * CO 2007-07-12: Since this is deprecated, commented out:
-		 * 
-		 * System.runFinalizersOnExit(true);
-		 * 
-		 */
-		
-		openWindow(processArguments(args, true));
-	}
-    
-    private void setupOptions() {
-
-        importFile = new StringOption("");
-        exportFile = new StringOption("");
-        helpO = new BooleanOption();
-        disableGui = new BooleanOption();
-        disableSplash = new BooleanOption();
-        blank = new BooleanOption();
-        loadSess = new BooleanOption();
-        showVersion = new BooleanOption();
-        exportPrefs = new StringOption("jabref_prefs.xml");
-        importPrefs = new StringOption("jabref_prefs.xml");
-        defPrefs = new StringOption("");
-        auxImExport = new StringOption("");
-        importToOpenBase = new StringOption("");
-        fetcherEngine = new StringOption("");
-    	exportMatches = new StringOption(""); 
-
-        options = new Options("JabRef "); // Create an options repository.
-        options.setVersion(GUIGlobals.version);
-
-        importFile.setDescription("imopoepuoeu"); //Globals.lang);
-        options.register("version", 'v',
-                Globals.lang("Display version"), showVersion);
-        options.register("nogui", 'n',
-            Globals.lang("No GUI. Only process command line options."), disableGui);
-        options.register("nosplash", 's',
-                Globals.lang("Do not show splash window at startup"), disableSplash);
-        options.register("import", 'i',
-            Globals.lang("Import file") + ": " + Globals.lang("filename")
-            + "[,import format]", importFile);
-        options.register("output", 'o',
-            Globals.lang("Output or export file") + ": " + Globals.lang("filename")
-            + "[,export format]", exportFile);
-        options.register("help", 'h',
-            Globals.lang("Display help on command line options"), helpO);
-        options.register("loads", 'l', Globals.lang("Load session"), loadSess);
-        options.register("prexp", 'x', Globals.lang("Export preferences to file"),
-            exportPrefs);
-        options.register("primp", 'p', Globals.lang("Import preferences from file"),
-            importPrefs);
-        options.register("prdef", 'd', Globals.lang("Reset preferences (key1,key2,... or 'all')"),
-            defPrefs);
-        options.register("aux", 'a',
-            Globals.lang("Subdatabase from aux") + ": " + Globals.lang("file")+"[.aux]" + ","+Globals.lang("new")+"[.bib]",
-            auxImExport);
-        options.register("blank", 'b', Globals.lang("Do not open any files at startup"), blank);
-
-        options.register("importToOpen", '\0', Globals.lang("Import to open tab"), importToOpenBase);
-
-        options.register("fetch", 'f', Globals.lang("Run Fetcher, e.g. \"--fetch=Medline:cancer\""), fetcherEngine);
-
-        options.register("exportMatches", 'm', exportMatchesSyntax, exportMatches); 
-
-        options.setUseMenu(false);
-    }
-
-    public Vector<ParserResult> processArguments(String[] args, boolean initialStartup) {
-
-        setupOptions();
-        String[] leftOver = options.process(args);
-
-        if (initialStartup && showVersion.isInvoked()) {
-            options.displayVersion();
-            disableGui.setInvoked(true);
-        }
-
-        if (initialStartup && helpO.isInvoked()) {
-            System.out.println("jabref [options] [bibtex-file]\n");
-            System.out.println(options.getHelp());
-
-            String importFormats = Globals.importFormatReader.getImportFormatList();
-            System.out.println(Globals.lang("Available import formats") + ":\n"
-                + importFormats);
-
-            String outFormats = ExportFormats.getConsoleExportList(70, 20, "\t");
-            System.out.println(Globals.lang("Available export formats") + ": " + outFormats
-                + ".");
-            System.exit(0);
-        }
-        
-        boolean commandmode = disableGui.isInvoked() || fetcherEngine.isInvoked();
-        
-        // First we quickly scan the command line parameters for any that signal
-        // that the GUI
-        // should not be opened. This is used to decide whether we should show the
-        // splash screen or not.
-        if (initialStartup && !commandmode && !disableSplash.isInvoked()) {
-            try {
-                splashScreen = SplashScreen.splash();
-            } catch (Throwable ex) {
-                graphicFailure = true;
-                System.err.println(Globals.lang("Unable to create graphical interface")
-                    + ".");
-            }
-        }
-
-        // Check if we should reset all preferences to default values:
-        if (defPrefs.isInvoked()) {
-            String value = defPrefs.getStringValue();
-            if (value.trim().equals("all")) {
-                try {
-                    System.out.println(Globals.lang("Setting all preferences to default values."));
-                    Globals.prefs.clear();
-                } catch (BackingStoreException e) {
-                    System.err.println(Globals.lang("Unable to clear preferences."));
-                    e.printStackTrace();
-                }
-            } else {
-                String[] keys = value.split(",");
-                for (int i=0; i<keys.length; i++) {
-                    try {
-                        if (Globals.prefs.hasKey(keys[i].trim())) {
-                            System.out.println(Globals.lang("Resetting preference key '%0'", keys[i].trim()));
-                            Globals.prefs.clear(keys[i].trim());
-                        } else {
-                            System.out.println(Globals.lang("Unknown preference key '%0'", keys[i].trim()));
-                        }
-                    } catch (BackingStoreException e) {
-                        System.err.println(Globals.lang("Unable to clear preferences."));
-                        e.printStackTrace();
-                    }
-                }
-            }
-
-        }
-
-        // Check if we should import preferences from a file:
-        if (importPrefs.isInvoked()) {
-            try {
-                Globals.prefs.importPreferences(importPrefs.getStringValue());
-                BibtexEntryType.loadCustomEntryTypes(Globals.prefs);
-                ExportFormats.initAllExports();
-            }
-            catch (IOException ex) {
-            Util.pr(ex.getMessage());
-            }
-        }
-
-        // Vector to put imported/loaded database(s) in.
-        Vector<ParserResult> loaded = new Vector<ParserResult>();
-        Vector<String> toImport = new Vector<String>();
-        if (!blank.isInvoked() && (leftOver.length > 0))  {
-            for (int i = 0; i < leftOver.length; i++) {
-                // Leftover arguments that have a "bib" extension are interpreted as
-                // bib files to open. Other files, and files that could not be opened
-                // as bib, we try to import instead.
-                boolean bibExtension = leftOver[i].toLowerCase().endsWith("bib");
-                ParserResult pr = null;
-                if (bibExtension)
-                    pr = openBibFile(leftOver[i], false);
-
-                if ((pr == null) || (pr == ParserResult.INVALID_FORMAT)) {
-                    // We will try to import this file. Normally we
-                    // will import it into a new tab, but if this import has
-                    // been initiated by another instance through the remote
-                    // listener, we will instead import it into the current database.
-                    // This will enable easy integration with web browers that can
-                    // open a reference file in JabRef.
-                    if (initialStartup) {
-                        toImport.add(leftOver[i]);
-                    } else {
-                        ParserResult res = importToOpenBase(leftOver[i]);
-                        if (res != null)
-                            loaded.add(res);
-                        else
-                            loaded.add(ParserResult.INVALID_FORMAT);
-                    }
-                }
-                else if (pr != ParserResult.FILE_LOCKED)
-                    loaded.add(pr);
-
-            }
-        }
-
-        if (!blank.isInvoked() && importFile.isInvoked()) {
-            toImport.add(importFile.getStringValue());
-        }
-
-        for (String filenameString : toImport) {
-			ParserResult pr = importFile(filenameString);
-			if (pr != null)
-				loaded.add(pr);
-		}
-
-        if (!blank.isInvoked() && importToOpenBase.isInvoked()) {
-            ParserResult res = importToOpenBase(importToOpenBase.getStringValue());
-            if (res != null)
-                loaded.add(res);
-        }
-
-        if (!blank.isInvoked() && fetcherEngine.isInvoked()) {
-            ParserResult res = fetch(fetcherEngine.getStringValue());
-            if (res != null)
-                loaded.add(res);
-        }
-
-
-        if(exportMatches.isInvoked()) {
-            if (loaded.size() > 0) {
-                String[] data = exportMatches.getStringValue().split(",");
-                String searchTerm = data[0].replace("\\$"," "); //enables blanks within the search term:
-                                                                //? stands for a blank
-                ParserResult pr =
-                    (ParserResult) loaded.elementAt(loaded.size() - 1);
-                BibtexDatabase dataBase = pr.getDatabase();
-                SearchManagerNoGUI smng = new SearchManagerNoGUI(searchTerm, dataBase);
-                BibtexDatabase newBase = smng.getDBfromMatches(); //newBase contains only match entries
-                
-                
-                //export database
-                if (newBase != null && newBase.getEntryCount() > 0) {
-                	String formatName = null;
-	                IExportFormat format = null;
-
-	                //read in the export format, take default format if no format entered
-	                switch (data.length){
-		                case(3):{
-		                	formatName = data[2];
-		                	break;
-		                }
-		                case (2):{
-		                	//default ExportFormat: HTML table (with Abstract & BibTeX)
-		                	formatName = "tablerefsabsbib";
-		                	break;
-		                }
-		                default:{
-		                	System.err.println(Globals.lang("Output file missing").concat(". \n \t ").concat("Usage").concat(": ") + exportMatchesSyntax);
-		                	System.exit(0);
-		                }
-	                } //end switch
-	                
-	                //export new database
-	                format = ExportFormats.getExportFormat(formatName);
-	                if (format != null) {
-	                    // We have an ExportFormat instance:
-	                    try {
-		                System.out.println(Globals.lang("Exporting") + ": " + data[1]);
-	                        format.performExport(newBase, pr.getMetaData(), data[1], pr.getEncoding(), null);
-	                    } catch (Exception ex) {
-	                        System.err.println(Globals.lang("Could not export file")
-	                            + " '" + data[1] + "': " + ex.getMessage());
-	                    }
-	                } else
-	                    System.err.println(Globals.lang("Unknown export format")
-	                            + ": " + formatName);
-                } /*end if newBase != null*/ else {
-                	System.err.println(Globals.lang("No search matches."));
-                }
-            } else {
-            	System.err.println(Globals.lang("The output option depends on a valid input option."));
-            }  //end if(loaded.size > 0)
-        } //end exportMatches invoked 
-
-
-        if (exportFile.isInvoked()) {
-            if (loaded.size() > 0) {
-                String[] data = exportFile.getStringValue().split(",");
-
-                if (data.length == 1) {
-                    // This signals that the latest import should be stored in BibTeX
-                    // format to the given file.
-                    if (loaded.size() > 0) {
-                        ParserResult pr =
-                            loaded.elementAt(loaded.size() - 1);
-                        if (!pr.isInvalid()) {
-                            try {
-                                System.out.println(Globals.lang("Saving") + ": " + data[0]);
-                                SaveSession session = FileActions.saveDatabase(pr.getDatabase(),
-                                    pr.getMetaData(), new File(data[0]), Globals.prefs,
-                                    false, false, Globals.prefs.get("defaultEncoding"), false);
-                                // Show just a warning message if encoding didn't work for all characters:
-                                if (!session.getWriter().couldEncodeAll())
-                                    System.err.println(Globals.lang("Warning")+": "+
-                                        Globals.lang("The chosen encoding '%0' could not encode the following characters: ",
-                                        session.getEncoding())+session.getWriter().getProblemCharacters());
-                                session.commit();
-                            } catch (SaveException ex) {
-                                System.err.println(Globals.lang("Could not save file") + " '"
-                                    + data[0] + "': " + ex.getMessage());
-                            }
-                        }
-                    } else
-                        System.err.println(Globals.lang(
-                                "The output option depends on a valid import option."));
-                } else if (data.length == 2) {
-                    // This signals that the latest import should be stored in the given
-                    // format to the given file.
-                    ParserResult pr = loaded.elementAt(loaded.size() - 1);
-
-                    // Set the global variable for this database's file directory before exporting,
-                    // so formatters can resolve linked files correctly.
-                    // (This is an ugly hack!)
-                    File theFile = pr.getFile();
-                    if (!theFile.isAbsolute())
-                        theFile = theFile.getAbsoluteFile();
-                    MetaData metaData = pr.getMetaData();
-                    metaData.setFile(theFile);
-                    Globals.prefs.fileDirForDatabase = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
-                    Globals.prefs.databaseFile = metaData.getFile();
-                    System.out.println(Globals.lang("Exporting") + ": " + data[0]);
-                    IExportFormat format = ExportFormats.getExportFormat(data[1]);
-                    if (format != null) {
-                        // We have an ExportFormat instance:
-                        try {
-                            format.performExport(pr.getDatabase(), 
-                                    pr.getMetaData(), data[0], pr.getEncoding(), null);
-                        } catch (Exception ex) {
-                            System.err.println(Globals.lang("Could not export file")
-                                + " '" + data[0] + "': " + ex.getMessage());
-                        }
-                    }
-                    else
-                        System.err.println(Globals.lang("Unknown export format")
-                                + ": " + data[1]);
-
-                }
-            } else
-                System.err.println(Globals.lang(
-                        "The output option depends on a valid import option."));
-        }
-
-        //Util.pr(": Finished export");
-
-        if (exportPrefs.isInvoked()) {
-            try {
-                Globals.prefs.exportPreferences(exportPrefs.getStringValue());
-            } catch (IOException ex) {
-                Util.pr(ex.getMessage());
-            }
-        }
-
-
-        if (!blank.isInvoked() && auxImExport.isInvoked()) {
-            boolean usageMsg = false;
-
-            if (loaded.size() > 0) // bibtex file loaded
-             {
-                String[] data = auxImExport.getStringValue().split(",");
-
-                if (data.length == 2) {
-                    ParserResult pr = loaded.firstElement();
-                    AuxCommandLine acl = new AuxCommandLine(data[0], pr.getDatabase());
-                    BibtexDatabase newBase = acl.perform();
-
-                    boolean notSavedMsg = false;
-
-                    // write an output, if something could be resolved
-                    if (newBase != null) {
-                        if (newBase.getEntryCount() > 0) {
-                            String subName = Util.getCorrectFileName(data[1], "bib");
-
-                            try {
-                                System.out.println(Globals.lang("Saving") + ": "
-                                    + subName);
-                                SaveSession session = FileActions.saveDatabase(newBase, new MetaData(), // no Metadata
-                                    new File(subName), Globals.prefs, false, false,
-                                    Globals.prefs.get("defaultEncoding"), false);
-                                // Show just a warning message if encoding didn't work for all characters:
-                                if (!session.getWriter().couldEncodeAll())
-                                    System.err.println(Globals.lang("Warning")+": "+
-                                        Globals.lang("The chosen encoding '%0' could not encode the following characters: ",
-                                        session.getEncoding())+session.getWriter().getProblemCharacters());
-                                session.commit();
-                            } catch (SaveException ex) {
-                                System.err.println(Globals.lang("Could not save file")
-                                    + " '" + subName + "': " + ex.getMessage());
-                            }
-
-                            notSavedMsg = true;
-                        }
-                    }
-
-                    if (!notSavedMsg)
-                        System.out.println(Globals.lang("no database generated"));
-                } else
-                    usageMsg = true;
-            } else
-                usageMsg = true;
-
-            if (usageMsg) {
-                System.out.println(Globals.lang("no base-bibtex-file specified"));
-                System.out.println(Globals.lang("usage") + " :");
-                System.out.println(
-                    "jabref --aux infile[.aux],outfile[.bib] base-bibtex-file");
-            }
-        }
-
-        return loaded;
-    }
-
-    /**
-     * Run an entry fetcher from the command line.
-     * 
-     * Note that this only works headlessly if the EntryFetcher does not show
-     * any GUI.
-     * 
-     * @param fetchCommand
-     *            A string containing both the fetcher to use (id of
-     *            EntryFetcherExtension minus Fetcher) and the search query,
-     *            separated by a :
-     * @return A parser result containing the entries fetched or null if an
-     *         error occurred.
-     */
-    protected ParserResult fetch(String fetchCommand) {
-
-        if (fetchCommand == null || !fetchCommand.contains(":") ||
-            fetchCommand.split(":").length != 2) {
-            System.out.println(Globals.lang("Expected syntax for --fetch='<name of fetcher>:<query>'"));
-            System.out.println(Globals.lang("The following fetchers are available:"));
-            return null;
-        }
-
-        String engine = fetchCommand.split(":")[0];
-        String query = fetchCommand.split(":")[1];
-
-        EntryFetcher fetcher = null;
-        for (EntryFetcherExtension e : JabRefPlugin.getInstance(PluginCore.getManager())
-            .getEntryFetcherExtensions()) {
-            if (engine.toLowerCase().equals(e.getId().replaceAll("Fetcher", "").toLowerCase()))
-                fetcher = e.getEntryFetcher();
-        }
-
-        if (fetcher == null) {
-            System.out.println(Globals.lang("Could not find fetcher '%0'", engine));
-            System.out.println(Globals.lang("The following fetchers are available:"));
-            for (EntryFetcherExtension e : JabRefPlugin.getInstance(PluginCore.getManager())
-                .getEntryFetcherExtensions()) {
-                System.out.println("  " + e.getId().replaceAll("Fetcher", "").toLowerCase());
-            }
-            return null;
-        }
-
-        System.out.println(Globals.lang("Running Query '%0' with fetcher '%1'.", query, engine) +
-            " " + Globals.lang("Please wait!"));
-        Collection<BibtexEntry> result = new ImportInspectionCommandLine().query(query, fetcher);
-
-        if (result == null || result.size() == 0) {
-            System.out.println(Globals.lang(
-                "Query '%0' with fetcher '%1' did not return any results.", query, engine));
-            return null;
-        }
-
-        return new ParserResult(result);
-    }
-    
-    private void setLookAndFeel() {
-        // * Look first into the Preferences
-        // * Fallback to the System Look & Fell
-        try {
-            String systemLnF = UIManager.getSystemLookAndFeelClassName();
-            if (!Globals.prefs.getBoolean("useDefaultLookAndFeel"))
-                systemLnF = Globals.prefs.get("lookAndFeel");
-
-            // At all cost, avoid ending up with the Metal look and feel:
-            if (systemLnF.equals("javax.swing.plaf.metal.MetalLookAndFeel")) {
-                Plastic3DLookAndFeel lnf = new Plastic3DLookAndFeel();
-                Plastic3DLookAndFeel.setCurrentTheme(new SkyBluer());
-                com.jgoodies.looks.Options.setPopupDropShadowEnabled(true);
-                UIManager.setLookAndFeel(lnf);
-            }
-            else {
-                UIManager.setLookAndFeel(systemLnF);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-	public void openWindow(Vector<ParserResult> loaded) {
-        if (!graphicFailure && !disableGui.isInvoked()) {
-            // Call the method performCompatibilityUpdate(), which does any
-            // necessary changes for users with a preference set from an older
-            // Jabref version.
-            Util.performCompatibilityUpdate();
-
-
-            // Set up custom or default icon theme:
-            GUIGlobals.setUpIconTheme();
-
-            // TODO: remove temporary registering of external file types?
-            Globals.prefs.updateExternalFileTypes();
-
-           // This property is set to make the Mac OSX Java VM move the menu bar to
-            // the top
-            // of the screen, where Mac users expect it to be.
-            System.setProperty("apple.laf.useScreenMenuBar", "true");
-
-            // Set antialiasing on everywhere. This only works in JRE >= 1.5.
-            // Or... it doesn't work, period.
-            //System.setProperty("swing.aatext", "true");
-            // TODO test and maybe remove this! I found this commented out with no additional info ( payload at lavabit.com )
-
-            // Set the Look & Feel for Swing.
-            try {
-                setLookAndFeel();
-            } catch (Throwable e) {
-                e.printStackTrace();
-            }
-
-
-            // If the option is enabled, open the last edited databases, if any.
-            if (!blank.isInvoked() && Globals.prefs.getBoolean("openLastEdited") && (Globals.prefs.get("lastEdited") != null)) {
-                // How to handle errors in the databases to open?
-                String[] names = Globals.prefs.getStringArray("lastEdited");
-                lastEdLoop: 
-                for (int i = 0; i < names.length; i++) {
-                    File fileToOpen = new File(names[i]);
-
-                    for (int j = 0; j < loaded.size(); j++) {
-                        ParserResult pr = loaded.elementAt(j);
-
-                        if ((pr.getFile() != null) &&pr.getFile().equals(fileToOpen))
-                            continue lastEdLoop;
-                    }
-
-                    if (fileToOpen.exists()) {
-                        ParserResult pr = openBibFile(names[i], false);
-
-                        if (pr != null) {
-
-                            if (pr == ParserResult.INVALID_FORMAT) {
-                                System.out.println(Globals.lang("Error opening file")+" '"+fileToOpen.getPath()+"'");
-                            }
-                            else if (pr != ParserResult.FILE_LOCKED)
-                                loaded.add(pr);
-
-                        }
-                    }
-                }
-            }
-
-            GUIGlobals.init();
-            GUIGlobals.CURRENTFONT =
-                new Font(Globals.prefs.get("fontFamily"), Globals.prefs.getInt("fontStyle"),
-                    Globals.prefs.getInt("fontSize"));
-
-            //Util.pr(": Initializing frame");
-            jrf = new JabRefFrame();
-
-            // Add all loaded databases to the frame:
-            
-	        boolean first = true;
-            List<File> postponed = new ArrayList<File>();
-            List<ParserResult> failed = new ArrayList<ParserResult>();
-            if (loaded.size() > 0) {
-                for (Iterator<ParserResult> i = loaded.iterator(); i.hasNext();){
-                    ParserResult pr = i.next();
-                    if (pr.isInvalid()) {
-
-                        failed.add(pr);
-                        i.remove();
-                    }
-                    else if (!pr.isPostponedAutosaveFound()) {
-                        jrf.addTab(pr.getDatabase(), pr.getFile(),
-                                pr.getMetaData(), pr.getEncoding(), first);
-                        first = false;
-                    }
-                    else {
-                        i.remove();
-                        postponed.add(pr.getFile());
-
-                    }
-                }
-            }
-
-            if (loadSess.isInvoked())
-                jrf.loadSessionAction.actionPerformed(new java.awt.event.ActionEvent(
-                        jrf, 0, ""));
-
-            if (splashScreen != null) {// do this only if splashscreen was actually created
-                splashScreen.dispose();
-                splashScreen = null;
-            }
-
-            /*JOptionPane.showMessageDialog(null, Globals.lang("Please note that this "
-                +"is an early beta version. Do not use it without backing up your files!"),
-                    Globals.lang("Beta version"), JOptionPane.WARNING_MESSAGE);*/
-
-
-            // Start auto save timer:
-            if (Globals.prefs.getBoolean("autoSave"))
-                Globals.startAutoSaveManager(jrf);
-
-            // If we are set to remember the window location, we also remember the maximised
-            // state. This needs to be set after the window has been made visible, so we
-            // do it here:
-            if (Globals.prefs.getBoolean("windowMaximised")) {
-                jrf.setExtendedState(JFrame.MAXIMIZED_BOTH);
-            }
-
-            jrf.setVisible(true);
-
-            if (Globals.prefs.getBoolean("windowMaximised")) {
-                jrf.setExtendedState(JFrame.MAXIMIZED_BOTH);
-            }
-
-            // TEST TEST TEST TEST TEST TEST
-            startSidePanePlugins(jrf);
-
-            for (ParserResult pr : failed) {
-                String message = "<html>"+Globals.lang("Error opening file '%0'.", pr.getFile().getName())
-                    +"<p>"+pr.getErrorMessage()+"</html>";
-
-                JOptionPane.showMessageDialog(jrf, message, Globals.lang("Error opening file"),
-                    JOptionPane.ERROR_MESSAGE);
-            }
-
-            for (int i = 0; i < loaded.size(); i++) {
-                ParserResult pr = loaded.elementAt(i);
-                if (Globals.prefs.getBoolean("displayKeyWarningDialogAtStartup") && pr.hasWarnings()) {
-                    String[] wrns = pr.warnings();
-                    StringBuilder wrn = new StringBuilder();
-                    for (int j = 0; j<Math.min(MAX_DIALOG_WARNINGS, wrns.length); j++)
-                        wrn.append(j + 1).append(". ").append(wrns[j]).append("\n");
-                    if (wrns.length > MAX_DIALOG_WARNINGS) {
-                        wrn.append("... ");
-                        wrn.append(Globals.lang("%0 warnings", String.valueOf(wrns.length)));
-                    }
-                    else if (wrn.length() > 0)
-                        wrn.deleteCharAt(wrn.length() - 1);
-                    jrf.showBaseAt(i);
-                    JOptionPane.showMessageDialog(jrf, wrn.toString(),
-                        Globals.lang("Warnings")+" ("+pr.getFile().getName()+")",
-                        JOptionPane.WARNING_MESSAGE);
-                }
-            }
-
-            // After adding the databases, go through each and see if
-            // any post open actions need to be done. For instance, checking
-            // if we found new entry types that can be imported, or checking
-            // if the database contents should be modified due to new features
-            // in this version of JabRef:
-            for (int i = 0; i < loaded.size(); i++) {
-                ParserResult pr = loaded.elementAt(i);
-                BasePanel panel = jrf.baseAt(i);
-                OpenDatabaseAction.performPostOpenActions(panel, pr, true);
-            }
-
-            //Util.pr(": Finished adding panels");
-
-            // If any database loading was postponed due to an autosave, schedule them
-            // for handing now:
-            if (postponed.size() > 0) {
-                AutosaveStartupPrompter asp = new AutosaveStartupPrompter(jrf, postponed);
-                SwingUtilities.invokeLater(asp);
-            }
-
-            if (loaded.size() > 0) {
-                jrf.tabbedPane.setSelectedIndex(0);
-                new FocusRequester(((BasePanel) jrf.tabbedPane.getComponentAt(0)).mainTable);
-            }
-        } else
-            System.exit(0);
-    }
-
-    /**
-     * Go through all registered instances of SidePanePlugin, and register them
-     * in the SidePaneManager.
-     *
-     * @param jrf The JabRefFrame.
-     */
-    private void startSidePanePlugins(JabRefFrame jrf) {
-
-        JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
-        List<_JabRefPlugin.SidePanePluginExtension> plugins = jabrefPlugin.getSidePanePluginExtensions();
-        for (_JabRefPlugin.SidePanePluginExtension extension : plugins) {
-            SidePanePlugin plugin = extension.getSidePanePlugin();
-            plugin.init(jrf, jrf.sidePaneManager);
-            SidePaneComponent comp = plugin.getSidePaneComponent();
-            jrf.sidePaneManager.register(comp.getName(), comp);
-            jrf.addPluginMenuItem(plugin.getMenuItem());
-        }
-    }
-
-    public static ParserResult openBibFile(String name, boolean ignoreAutosave) {
-    	Globals.logger(Globals.lang("Opening") + ": " + name);
-        File file = new File(name);
-        if (!file.exists()) {
-            ParserResult pr = new ParserResult(null, null, null);
-            pr.setFile(file);
-            pr.setInvalid(true);
-            System.err.println(Globals.lang("Error")+": "+Globals.lang("File not found"));
-            return pr;
-
-        }
-        try {
-
-            if (!ignoreAutosave) {
-                boolean autoSaveFound = AutoSaveManager.newerAutoSaveExists(file);
-                if (autoSaveFound) {
-                    // We have found a newer autosave. Make a note of this, so it can be
-                    // handled after startup:
-                    ParserResult postp = new ParserResult(null, null, null);
-                    postp.setPostponedAutosaveFound(true);
-                    postp.setFile(file);
-                    return postp;
-                }
-            }
-
-            if (!Util.waitForFileLock(file, 10)) {
-                System.out.println(Globals.lang("Error opening file")+" '"+name+"'. "+
-                    "File is locked by another JabRef instance.");
-                return ParserResult.FILE_LOCKED;
-            }
-
-            String encoding = Globals.prefs.get("defaultEncoding");
-            ParserResult pr = OpenDatabaseAction.loadDatabase(file, encoding);
-            if (pr == null) {
-                pr = new ParserResult(null, null, null);
-                pr.setFile(file);
-                pr.setInvalid(true);
-                return pr;
-
-            }
-            pr.setFile(file);
-            if (pr.hasWarnings()) {
-                String[] warn = pr.warnings();
-                for (int i=0; i<warn.length; i++)
-                    System.out.println(Globals.lang("Warning")+": "+warn[i]);
-
-            }
-            return pr;
-        } catch (Throwable ex) {
-            ParserResult pr = new ParserResult(null, null, null);
-            pr.setFile(file);
-            pr.setInvalid(true);
-            pr.setErrorMessage(ex.getMessage());
-            return pr;
-        }
-
-    }
-
-    public static ParserResult importFile(String argument){
-    	String[] data = argument.split(",");
-        try {
-            if ((data.length > 1) && !"*".equals(data[1])) {
-                System.out.println(Globals.lang("Importing") + ": " + data[0]);
-                try {
-                    List<BibtexEntry> entries;
-                    if (Globals.ON_WIN) {
-                      entries = Globals.importFormatReader.importFromFile(data[1], data[0], jrf);
-                    }
-                    else {
-                      entries = Globals.importFormatReader.importFromFile( data[1],
-                                data[0].replaceAll("~", System.getProperty("user.home")), jrf );
-                    }
-                    return new ParserResult(entries);
-                } catch (IllegalArgumentException ex) {
-                    System.err.println(Globals.lang("Unknown import format")+": "+data[1]);
-                    return null;
-                }
-            } else {
-                // * means "guess the format":
-                System.out.println(Globals.lang("Importing in unknown format")
-                        + ": " + data[0]);
-
-                Pair<String, ParserResult>  importResult;
-                if (Globals.ON_WIN) {
-            	  importResult = Globals.importFormatReader.importUnknownFormat(data[0]);
-                }
-                else {
-                  importResult = Globals.importFormatReader.importUnknownFormat(
-                                 data[0].replaceAll("~", System.getProperty("user.home")));
-                }
-            	
-            	if (importResult != null){
-            		System.out.println(Globals.lang("Format used") + ": "
-                        + importResult.p);
-            		
-            		return importResult.v;
-            	} else {
-            		System.out.println(Globals.lang(
-                                "Could not find a suitable import format."));
-                }
-            }
-        } catch (IOException ex) {
-            System.err.println(Globals.lang("Error opening file") + " '"
-                    + data[0] + "': " + ex.getLocalizedMessage());
-        }
-        return null;
-    }
-
-    /**
-     * Will open a file (like importFile), but will also request JabRef to focus on this database 
-     * @param argument See importFile.
-     * @return ParserResult with setToOpenTab(true)
-     */
-    public static ParserResult importToOpenBase(String argument) {
-    	ParserResult result = importFile(argument);
-    	
-    	if (result != null)
-    		result.setToOpenTab(true);
-    	
-    	return result;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import com.jgoodies.looks.plastic.Plastic3DLookAndFeel;
+import com.jgoodies.looks.plastic.theme.SkyBluer;
+import gnu.dtools.ritopt.BooleanOption;
+import gnu.dtools.ritopt.Options;
+import gnu.dtools.ritopt.StringOption;
+
+import java.awt.Font;
+import java.awt.Frame;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+import java.util.prefs.BackingStoreException;
+
+import javax.swing.*;
+import javax.swing.plaf.FontUIResource;
+
+import net.sf.jabref.export.AutoSaveManager;
+import net.sf.jabref.export.ExportFormats;
+import net.sf.jabref.export.FileActions;
+import net.sf.jabref.export.IExportFormat;
+import net.sf.jabref.export.SaveException;
+import net.sf.jabref.export.SaveSession;
+import net.sf.jabref.imports.AutosaveStartupPrompter;
+import net.sf.jabref.imports.EntryFetcher;
+import net.sf.jabref.imports.ImportInspectionCommandLine;
+import net.sf.jabref.imports.OpenDatabaseAction;
+import net.sf.jabref.imports.ParserResult;
+import net.sf.jabref.plugin.PluginCore;
+import net.sf.jabref.plugin.PluginInstaller;
+import net.sf.jabref.plugin.SidePanePlugin;
+import net.sf.jabref.plugin.core.JabRefPlugin;
+import net.sf.jabref.plugin.core.generated._JabRefPlugin;
+import net.sf.jabref.plugin.core.generated._JabRefPlugin.EntryFetcherExtension;
+import net.sf.jabref.remote.RemoteListener;
+import net.sf.jabref.util.Pair;
+import net.sf.jabref.wizard.auximport.AuxCommandLine;
+
+/**
+ * JabRef Main Class - The application gets started here.
+ *
+ */
+public class JabRef {
+
+	public static JabRef singleton;
+    public static RemoteListener remoteListener = null;
+    public static JabRefFrame jrf;
+    public Options options;
+    public static Frame splashScreen = null;
+
+    boolean graphicFailure = false;
+
+    StringOption importFile, exportFile, exportPrefs, importPrefs, auxImExport, importToOpenBase,
+            fetcherEngine, exportMatches, defPrefs;
+    BooleanOption helpO, disableGui, blank, loadSess, showVersion, disableSplash;
+
+    private final static String exportMatchesSyntax = "[".concat(Globals.lang("field")).concat("]").concat("searchTerm").concat(",").concat("outputFile").concat(": ").concat(Globals.lang("file")).concat("[,").concat(Globals.lang("exportFormat")).concat("]");
+
+    public static final int MAX_DIALOG_WARNINGS = 10;
+
+    public static void main(String[] args) {
+        new JabRef(args);
+    }
+
+    protected JabRef(String[] args) {
+
+		singleton = this;
+
+		// The following two lines signal that the system proxy settings should
+		// be used:
+		System.setProperty("java.net.useSystemProxies", "true");
+		System.getProperties().put("proxySet", "true");
+
+		JabRefPreferences prefs = JabRefPreferences.getInstance();
+
+        // See if there are plugins scheduled for deletion:
+        if (prefs.hasKey("deletePlugins") && (prefs.get("deletePlugins").length() > 0)) {
+            String[] toDelete = prefs.getStringArray("deletePlugins");
+            PluginInstaller.deletePluginsOnStartup(toDelete);
+            prefs.put("deletePlugins", "");
+        }
+
+        Globals.startBackgroundTasks();
+        Globals.setupLogging();
+		Globals.prefs = prefs;
+        String langStr = prefs.get("language");
+        String[] parts = langStr.split("_");
+        String language, country;
+        if (parts.length == 1) {
+            language = langStr;
+            country = "";
+        }
+        else {
+            language = parts[0];
+            country = parts[1];
+        }
+
+		Globals.setLanguage(language, country);
+        Globals.prefs.setLanguageDependentDefaultValues();
+		/*
+		 * The Plug-in System is started automatically on the first call to
+		 * PluginCore.getManager().
+		 * 
+		 * Plug-ins are activated on the first call to their getInstance method.
+		 */
+
+        // Update which fields should be treated as numeric, based on preferences:
+        BibtexFields.setNumericFieldsFromPrefs();
+		
+		/* Build list of Import and Export formats */
+		Globals.importFormatReader.resetImportFormats();
+		BibtexEntryType.loadCustomEntryTypes(prefs);
+		ExportFormats.initAllExports();
+		
+		// Read list(s) of journal names and abbreviations:
+        Globals.initializeJournalNames();
+
+		// Check for running JabRef
+		if (Globals.prefs.getBoolean("useRemoteServer")) {
+			remoteListener = RemoteListener.openRemoteListener(this);
+
+			if (remoteListener == null) {
+				// Unless we are alone, try to contact already running JabRef:
+				if (RemoteListener.sendToActiveJabRefInstance(args)) {
+
+					/*
+					 * We have successfully sent our command line options
+					 * through the socket to another JabRef instance. So we
+					 * assume it's all taken care of, and quit.
+					 */
+					System.out.println(
+                            Globals.lang("Arguments passed on to running JabRef instance. Shutting down."));
+					System.exit(0);
+				}
+			} else {
+				// No listener found, thus we are the first instance to be
+				// started.
+				remoteListener.start();
+			}
+		}
+
+		/*
+		 * See if the user has a personal journal list set up. If so, add these
+		 * journal names and abbreviations to the list:
+		 */
+		String personalJournalList = prefs.get("personalJournalList");
+		if (personalJournalList != null) {
+			try {
+				Globals.journalAbbrev.readJournalList(new File(
+						personalJournalList));
+			} catch (FileNotFoundException e) {
+				e.printStackTrace();
+			}
+		}
+
+		/*
+		 * Make sure of a proper cleanup when quitting (e.g. deleting temporary
+		 * files).
+		 * 
+		 * CO 2007-07-12: Since this is deprecated, commented out:
+		 * 
+		 * System.runFinalizersOnExit(true);
+		 * 
+		 */
+		
+		openWindow(processArguments(args, true));
+	}
+    
+    private void setupOptions() {
+
+        importFile = new StringOption("");
+        exportFile = new StringOption("");
+        helpO = new BooleanOption();
+        disableGui = new BooleanOption();
+        disableSplash = new BooleanOption();
+        blank = new BooleanOption();
+        loadSess = new BooleanOption();
+        showVersion = new BooleanOption();
+        exportPrefs = new StringOption("jabref_prefs.xml");
+        importPrefs = new StringOption("jabref_prefs.xml");
+        defPrefs = new StringOption("");
+        auxImExport = new StringOption("");
+        importToOpenBase = new StringOption("");
+        fetcherEngine = new StringOption("");
+    	exportMatches = new StringOption(""); 
+
+        options = new Options("JabRef "); // Create an options repository.
+        options.setVersion(GUIGlobals.version);
+
+        importFile.setDescription("imopoepuoeu"); //Globals.lang);
+        options.register("version", 'v',
+                Globals.lang("Display version"), showVersion);
+        options.register("nogui", 'n',
+            Globals.lang("No GUI. Only process command line options."), disableGui);
+        options.register("nosplash", 's',
+                Globals.lang("Do not show splash window at startup"), disableSplash);
+        options.register("import", 'i',
+            Globals.lang("Import file") + ": " + Globals.lang("filename")
+            + "[,import format]", importFile);
+        options.register("output", 'o',
+            Globals.lang("Output or export file") + ": " + Globals.lang("filename")
+            + "[,export format]", exportFile);
+        options.register("help", 'h',
+            Globals.lang("Display help on command line options"), helpO);
+        options.register("loads", 'l', Globals.lang("Load session"), loadSess);
+        options.register("prexp", 'x', Globals.lang("Export preferences to file"),
+            exportPrefs);
+        options.register("primp", 'p', Globals.lang("Import preferences from file"),
+            importPrefs);
+        options.register("prdef", 'd', Globals.lang("Reset preferences (key1,key2,... or 'all')"),
+            defPrefs);
+        options.register("aux", 'a',
+            Globals.lang("Subdatabase from aux") + ": " + Globals.lang("file")+"[.aux]" + ","+Globals.lang("new")+"[.bib]",
+            auxImExport);
+        options.register("blank", 'b', Globals.lang("Do not open any files at startup"), blank);
+
+        options.register("importToOpen", '\0', Globals.lang("Import to open tab"), importToOpenBase);
+
+        options.register("fetch", 'f', Globals.lang("Run Fetcher, e.g. \"--fetch=Medline:cancer\""), fetcherEngine);
+
+        options.register("exportMatches", 'm', exportMatchesSyntax, exportMatches); 
+
+        options.setUseMenu(false);
+    }
+
+    public Vector<ParserResult> processArguments(String[] args, boolean initialStartup) {
+
+        setupOptions();
+        String[] leftOver = options.process(args);
+
+        if (initialStartup && showVersion.isInvoked()) {
+            options.displayVersion();
+            disableGui.setInvoked(true);
+        }
+
+        if (initialStartup && helpO.isInvoked()) {
+            System.out.println("jabref [options] [bibtex-file]\n");
+            System.out.println(options.getHelp());
+
+            String importFormats = Globals.importFormatReader.getImportFormatList();
+            System.out.println(Globals.lang("Available import formats") + ":\n"
+                + importFormats);
+
+            String outFormats = ExportFormats.getConsoleExportList(70, 20, "\t");
+            System.out.println(Globals.lang("Available export formats") + ": " + outFormats
+                + ".");
+            System.exit(0);
+        }
+        
+        boolean commandmode = disableGui.isInvoked() || fetcherEngine.isInvoked();
+        
+        // First we quickly scan the command line parameters for any that signal
+        // that the GUI
+        // should not be opened. This is used to decide whether we should show the
+        // splash screen or not.
+        if (initialStartup && !commandmode && !disableSplash.isInvoked()) {
+            try {
+                splashScreen = SplashScreen.splash();
+            } catch (Throwable ex) {
+                graphicFailure = true;
+                System.err.println(Globals.lang("Unable to create graphical interface")
+                    + ".");
+            }
+        }
+
+        // Check if we should reset all preferences to default values:
+        if (defPrefs.isInvoked()) {
+            String value = defPrefs.getStringValue();
+            if (value.trim().equals("all")) {
+                try {
+                    System.out.println(Globals.lang("Setting all preferences to default values."));
+                    Globals.prefs.clear();
+                } catch (BackingStoreException e) {
+                    System.err.println(Globals.lang("Unable to clear preferences."));
+                    e.printStackTrace();
+                }
+            } else {
+                String[] keys = value.split(",");
+                for (int i=0; i<keys.length; i++) {
+                    try {
+                        if (Globals.prefs.hasKey(keys[i].trim())) {
+                            System.out.println(Globals.lang("Resetting preference key '%0'", keys[i].trim()));
+                            Globals.prefs.clear(keys[i].trim());
+                        } else {
+                            System.out.println(Globals.lang("Unknown preference key '%0'", keys[i].trim()));
+                        }
+                    } catch (BackingStoreException e) {
+                        System.err.println(Globals.lang("Unable to clear preferences."));
+                        e.printStackTrace();
+                    }
+                }
+            }
+
+        }
+
+        // Check if we should import preferences from a file:
+        if (importPrefs.isInvoked()) {
+            try {
+                Globals.prefs.importPreferences(importPrefs.getStringValue());
+                BibtexEntryType.loadCustomEntryTypes(Globals.prefs);
+                ExportFormats.initAllExports();
+            }
+            catch (IOException ex) {
+            Util.pr(ex.getMessage());
+            }
+        }
+
+        // Vector to put imported/loaded database(s) in.
+        Vector<ParserResult> loaded = new Vector<ParserResult>();
+        Vector<String> toImport = new Vector<String>();
+        if (!blank.isInvoked() && (leftOver.length > 0))  {
+            for (int i = 0; i < leftOver.length; i++) {
+                // Leftover arguments that have a "bib" extension are interpreted as
+                // bib files to open. Other files, and files that could not be opened
+                // as bib, we try to import instead.
+                boolean bibExtension = leftOver[i].toLowerCase().endsWith("bib");
+                ParserResult pr = null;
+                if (bibExtension)
+                    pr = openBibFile(leftOver[i], false);
+
+                if ((pr == null) || (pr == ParserResult.INVALID_FORMAT)) {
+                    // We will try to import this file. Normally we
+                    // will import it into a new tab, but if this import has
+                    // been initiated by another instance through the remote
+                    // listener, we will instead import it into the current database.
+                    // This will enable easy integration with web browers that can
+                    // open a reference file in JabRef.
+                    if (initialStartup) {
+                        toImport.add(leftOver[i]);
+                    } else {
+                        ParserResult res = importToOpenBase(leftOver[i]);
+                        if (res != null)
+                            loaded.add(res);
+                        else
+                            loaded.add(ParserResult.INVALID_FORMAT);
+                    }
+                }
+                else if (pr != ParserResult.FILE_LOCKED)
+                    loaded.add(pr);
+
+            }
+        }
+
+        if (!blank.isInvoked() && importFile.isInvoked()) {
+            toImport.add(importFile.getStringValue());
+        }
+
+        for (String filenameString : toImport) {
+			ParserResult pr = importFile(filenameString);
+			if (pr != null)
+				loaded.add(pr);
+		}
+
+        if (!blank.isInvoked() && importToOpenBase.isInvoked()) {
+            ParserResult res = importToOpenBase(importToOpenBase.getStringValue());
+            if (res != null)
+                loaded.add(res);
+        }
+
+        if (!blank.isInvoked() && fetcherEngine.isInvoked()) {
+            ParserResult res = fetch(fetcherEngine.getStringValue());
+            if (res != null)
+                loaded.add(res);
+        }
+
+
+        if(exportMatches.isInvoked()) {
+            if (loaded.size() > 0) {
+                String[] data = exportMatches.getStringValue().split(",");
+                String searchTerm = data[0].replace("\\$"," "); //enables blanks within the search term:
+                                                                //? stands for a blank
+                ParserResult pr =
+                    (ParserResult) loaded.elementAt(loaded.size() - 1);
+                BibtexDatabase dataBase = pr.getDatabase();
+                SearchManagerNoGUI smng = new SearchManagerNoGUI(searchTerm, dataBase);
+                BibtexDatabase newBase = smng.getDBfromMatches(); //newBase contains only match entries
+                
+                
+                //export database
+                if (newBase != null && newBase.getEntryCount() > 0) {
+                	String formatName = null;
+	                IExportFormat format = null;
+
+	                //read in the export format, take default format if no format entered
+	                switch (data.length){
+		                case(3):{
+		                	formatName = data[2];
+		                	break;
+		                }
+		                case (2):{
+		                	//default ExportFormat: HTML table (with Abstract & BibTeX)
+		                	formatName = "tablerefsabsbib";
+		                	break;
+		                }
+		                default:{
+		                	System.err.println(Globals.lang("Output file missing").concat(". \n \t ").concat("Usage").concat(": ") + exportMatchesSyntax);
+		                	System.exit(0);
+		                }
+	                } //end switch
+	                
+	                //export new database
+	                format = ExportFormats.getExportFormat(formatName);
+	                if (format != null) {
+	                    // We have an ExportFormat instance:
+	                    try {
+		                System.out.println(Globals.lang("Exporting") + ": " + data[1]);
+	                        format.performExport(newBase, pr.getMetaData(), data[1], pr.getEncoding(), null);
+	                    } catch (Exception ex) {
+	                        System.err.println(Globals.lang("Could not export file")
+	                            + " '" + data[1] + "': " + ex.getMessage());
+	                    }
+	                } else
+	                    System.err.println(Globals.lang("Unknown export format")
+	                            + ": " + formatName);
+                } /*end if newBase != null*/ else {
+                	System.err.println(Globals.lang("No search matches."));
+                }
+            } else {
+            	System.err.println(Globals.lang("The output option depends on a valid input option."));
+            }  //end if(loaded.size > 0)
+        } //end exportMatches invoked 
+
+
+        if (exportFile.isInvoked()) {
+            if (loaded.size() > 0) {
+                String[] data = exportFile.getStringValue().split(",");
+
+                if (data.length == 1) {
+                    // This signals that the latest import should be stored in BibTeX
+                    // format to the given file.
+                    if (loaded.size() > 0) {
+                        ParserResult pr =
+                            loaded.elementAt(loaded.size() - 1);
+                        if (!pr.isInvalid()) {
+                            try {
+                                System.out.println(Globals.lang("Saving") + ": " + data[0]);
+                                SaveSession session = FileActions.saveDatabase(pr.getDatabase(),
+                                    pr.getMetaData(), new File(data[0]), Globals.prefs,
+                                    false, false, Globals.prefs.get("defaultEncoding"), false);
+                                // Show just a warning message if encoding didn't work for all characters:
+                                if (!session.getWriter().couldEncodeAll())
+                                    System.err.println(Globals.lang("Warning")+": "+
+                                        Globals.lang("The chosen encoding '%0' could not encode the following characters: ",
+                                        session.getEncoding())+session.getWriter().getProblemCharacters());
+                                session.commit();
+                            } catch (SaveException ex) {
+                                System.err.println(Globals.lang("Could not save file") + " '"
+                                    + data[0] + "': " + ex.getMessage());
+                            }
+                        }
+                    } else
+                        System.err.println(Globals.lang(
+                                "The output option depends on a valid import option."));
+                } else if (data.length == 2) {
+                    // This signals that the latest import should be stored in the given
+                    // format to the given file.
+                    ParserResult pr = loaded.elementAt(loaded.size() - 1);
+
+                    // Set the global variable for this database's file directory before exporting,
+                    // so formatters can resolve linked files correctly.
+                    // (This is an ugly hack!)
+                    File theFile = pr.getFile();
+                    if (!theFile.isAbsolute())
+                        theFile = theFile.getAbsoluteFile();
+                    MetaData metaData = pr.getMetaData();
+                    metaData.setFile(theFile);
+                    Globals.prefs.fileDirForDatabase = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+                    Globals.prefs.databaseFile = metaData.getFile();
+                    System.out.println(Globals.lang("Exporting") + ": " + data[0]);
+                    IExportFormat format = ExportFormats.getExportFormat(data[1]);
+                    if (format != null) {
+                        // We have an ExportFormat instance:
+                        try {
+                            format.performExport(pr.getDatabase(), 
+                                    pr.getMetaData(), data[0], pr.getEncoding(), null);
+                        } catch (Exception ex) {
+                            System.err.println(Globals.lang("Could not export file")
+                                + " '" + data[0] + "': " + ex.getMessage());
+                        }
+                    }
+                    else
+                        System.err.println(Globals.lang("Unknown export format")
+                                + ": " + data[1]);
+
+                }
+            } else
+                System.err.println(Globals.lang(
+                        "The output option depends on a valid import option."));
+        }
+
+        //Util.pr(": Finished export");
+
+        if (exportPrefs.isInvoked()) {
+            try {
+                Globals.prefs.exportPreferences(exportPrefs.getStringValue());
+            } catch (IOException ex) {
+                Util.pr(ex.getMessage());
+            }
+        }
+
+
+        if (!blank.isInvoked() && auxImExport.isInvoked()) {
+            boolean usageMsg = false;
+
+            if (loaded.size() > 0) // bibtex file loaded
+             {
+                String[] data = auxImExport.getStringValue().split(",");
+
+                if (data.length == 2) {
+                    ParserResult pr = loaded.firstElement();
+                    AuxCommandLine acl = new AuxCommandLine(data[0], pr.getDatabase());
+                    BibtexDatabase newBase = acl.perform();
+
+                    boolean notSavedMsg = false;
+
+                    // write an output, if something could be resolved
+                    if (newBase != null) {
+                        if (newBase.getEntryCount() > 0) {
+                            String subName = Util.getCorrectFileName(data[1], "bib");
+
+                            try {
+                                System.out.println(Globals.lang("Saving") + ": "
+                                    + subName);
+                                SaveSession session = FileActions.saveDatabase(newBase, new MetaData(), // no Metadata
+                                    new File(subName), Globals.prefs, false, false,
+                                    Globals.prefs.get("defaultEncoding"), false);
+                                // Show just a warning message if encoding didn't work for all characters:
+                                if (!session.getWriter().couldEncodeAll())
+                                    System.err.println(Globals.lang("Warning")+": "+
+                                        Globals.lang("The chosen encoding '%0' could not encode the following characters: ",
+                                        session.getEncoding())+session.getWriter().getProblemCharacters());
+                                session.commit();
+                            } catch (SaveException ex) {
+                                System.err.println(Globals.lang("Could not save file")
+                                    + " '" + subName + "': " + ex.getMessage());
+                            }
+
+                            notSavedMsg = true;
+                        }
+                    }
+
+                    if (!notSavedMsg)
+                        System.out.println(Globals.lang("no database generated"));
+                } else
+                    usageMsg = true;
+            } else
+                usageMsg = true;
+
+            if (usageMsg) {
+                System.out.println(Globals.lang("no base-bibtex-file specified"));
+                System.out.println(Globals.lang("usage") + " :");
+                System.out.println(
+                    "jabref --aux infile[.aux],outfile[.bib] base-bibtex-file");
+            }
+        }
+
+        return loaded;
+    }
+
+    /**
+     * Run an entry fetcher from the command line.
+     * 
+     * Note that this only works headlessly if the EntryFetcher does not show
+     * any GUI.
+     * 
+     * @param fetchCommand
+     *            A string containing both the fetcher to use (id of
+     *            EntryFetcherExtension minus Fetcher) and the search query,
+     *            separated by a :
+     * @return A parser result containing the entries fetched or null if an
+     *         error occurred.
+     */
+    protected ParserResult fetch(String fetchCommand) {
+
+        if (fetchCommand == null || !fetchCommand.contains(":") ||
+            fetchCommand.split(":").length != 2) {
+            System.out.println(Globals.lang("Expected syntax for --fetch='<name of fetcher>:<query>'"));
+            System.out.println(Globals.lang("The following fetchers are available:"));
+            return null;
+        }
+
+        String engine = fetchCommand.split(":")[0];
+        String query = fetchCommand.split(":")[1];
+
+        EntryFetcher fetcher = null;
+        for (EntryFetcherExtension e : JabRefPlugin.getInstance(PluginCore.getManager())
+            .getEntryFetcherExtensions()) {
+            if (engine.toLowerCase().equals(e.getId().replaceAll("Fetcher", "").toLowerCase()))
+                fetcher = e.getEntryFetcher();
+        }
+
+        if (fetcher == null) {
+            System.out.println(Globals.lang("Could not find fetcher '%0'", engine));
+            System.out.println(Globals.lang("The following fetchers are available:"));
+            for (EntryFetcherExtension e : JabRefPlugin.getInstance(PluginCore.getManager())
+                .getEntryFetcherExtensions()) {
+                System.out.println("  " + e.getId().replaceAll("Fetcher", "").toLowerCase());
+            }
+            return null;
+        }
+
+        System.out.println(Globals.lang("Running Query '%0' with fetcher '%1'.", query, engine) +
+            " " + Globals.lang("Please wait!"));
+        Collection<BibtexEntry> result = new ImportInspectionCommandLine().query(query, fetcher);
+
+        if (result == null || result.size() == 0) {
+            System.out.println(Globals.lang(
+                "Query '%0' with fetcher '%1' did not return any results.", query, engine));
+            return null;
+        }
+
+        return new ParserResult(result);
+    }
+    
+    private void setLookAndFeel() {
+        try {
+            String systemLnF;
+            // * Look first into the Preferences
+            // * Fallback to the System Look & Fell
+            if (Globals.prefs.getBoolean("useDefaultLookAndFeel")) {
+                systemLnF = UIManager.getSystemLookAndFeelClassName();
+            } else {
+                systemLnF = Globals.prefs.get("lookAndFeel");
+            }
+
+            // At all cost, avoid ending up with the Metal look and feel:
+            if (systemLnF.equals("javax.swing.plaf.metal.MetalLookAndFeel")) {
+                Plastic3DLookAndFeel lnf = new Plastic3DLookAndFeel();
+                Plastic3DLookAndFeel.setCurrentTheme(new SkyBluer());
+                com.jgoodies.looks.Options.setPopupDropShadowEnabled(true);
+                UIManager.setLookAndFeel(lnf);
+            }
+            else {
+                UIManager.setLookAndFeel(systemLnF);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // In JabRef v2.8, we did it only on NON-Mac. Now, we try on all platforms
+        boolean overrideDefaultFonts = Globals.prefs.getBoolean("overrideDefaultFonts");
+        if (overrideDefaultFonts) {
+            int fontSize = Globals.prefs.getInt("menuFontSize");
+            UIDefaults defaults = UIManager.getDefaults();
+            Enumeration<Object> keys = defaults.keys();
+            Double zoomLevel = null;
+            while (keys.hasMoreElements()) {
+                Object key = keys.nextElement();
+                if ((key instanceof String) && (((String) key).endsWith(".font"))) {
+                    FontUIResource font = (FontUIResource) UIManager.get(key);
+                    if (zoomLevel == null) {
+                        // zoomLevel not yet set, calculate it based on the first found font
+                        zoomLevel = new Double(fontSize) / new Double(font.getSize());
+                    }
+                    font = new FontUIResource(font.getName(), font.getStyle(), fontSize);
+                    defaults.put(key, font);
+                }
+            }
+            if (zoomLevel != null) {
+                GUIGlobals.zoomLevel = zoomLevel;
+            }
+        }
+    }
+
+	public void openWindow(Vector<ParserResult> loaded) {
+        if (!graphicFailure && !disableGui.isInvoked()) {
+            // Call the method performCompatibilityUpdate(), which does any
+            // necessary changes for users with a preference set from an older
+            // Jabref version.
+            Util.performCompatibilityUpdate();
+
+
+            // Set up custom or default icon theme:
+            GUIGlobals.setUpIconTheme();
+
+            // TODO: remove temporary registering of external file types?
+            Globals.prefs.updateExternalFileTypes();
+
+           // This property is set to make the Mac OSX Java VM move the menu bar to
+            // the top
+            // of the screen, where Mac users expect it to be.
+            System.setProperty("apple.laf.useScreenMenuBar", "true");
+
+            // Set antialiasing on everywhere. This only works in JRE >= 1.5.
+            // Or... it doesn't work, period.
+            //System.setProperty("swing.aatext", "true");
+            // TODO test and maybe remove this! I found this commented out with no additional info ( payload at lavabit.com )
+
+            // Set the Look & Feel for Swing.
+            try {
+                setLookAndFeel();
+            } catch (Throwable e) {
+                e.printStackTrace();
+            }
+
+
+            // If the option is enabled, open the last edited databases, if any.
+            if (!blank.isInvoked() && Globals.prefs.getBoolean("openLastEdited") && (Globals.prefs.get("lastEdited") != null)) {
+                // How to handle errors in the databases to open?
+                String[] names = Globals.prefs.getStringArray("lastEdited");
+                lastEdLoop: 
+                for (int i = 0; i < names.length; i++) {
+                    File fileToOpen = new File(names[i]);
+
+                    for (int j = 0; j < loaded.size(); j++) {
+                        ParserResult pr = loaded.elementAt(j);
+
+                        if ((pr.getFile() != null) &&pr.getFile().equals(fileToOpen))
+                            continue lastEdLoop;
+                    }
+
+                    if (fileToOpen.exists()) {
+                        ParserResult pr = openBibFile(names[i], false);
+
+                        if (pr != null) {
+
+                            if (pr == ParserResult.INVALID_FORMAT) {
+                                System.out.println(Globals.lang("Error opening file")+" '"+fileToOpen.getPath()+"'");
+                            }
+                            else if (pr != ParserResult.FILE_LOCKED)
+                                loaded.add(pr);
+
+                        }
+                    }
+                }
+            }
+
+            GUIGlobals.init();
+            GUIGlobals.CURRENTFONT =
+                new Font(Globals.prefs.get("fontFamily"), Globals.prefs.getInt("fontStyle"),
+                    Globals.prefs.getInt("fontSize"));
+
+            //Util.pr(": Initializing frame");
+            jrf = new JabRefFrame();
+
+            // Add all loaded databases to the frame:
+            
+	        boolean first = true;
+            List<File> postponed = new ArrayList<File>();
+            List<ParserResult> failed = new ArrayList<ParserResult>();
+            List<ParserResult> toOpenTab = new ArrayList<ParserResult>();
+            if (loaded.size() > 0) {
+                for (Iterator<ParserResult> i = loaded.iterator(); i.hasNext();){
+                    ParserResult pr = i.next();
+                    if (pr.isInvalid()) {
+                        failed.add(pr);
+                        i.remove();
+                    }
+                    else if (!pr.isPostponedAutosaveFound()) {
+                        if (pr.toOpenTab()) {
+                            // things to be appended to an opened tab should be done after opening all tabs
+                            // add them to the list
+                            toOpenTab.add(pr);
+                        } else {
+                            jrf.addParserResult(pr, first);
+                            first = false;
+                        }
+                    }
+                    else {
+                        i.remove();
+                        postponed.add(pr.getFile());
+                    }
+                }
+            }
+
+            // finally add things to the currently opened tab
+            for (ParserResult pr: toOpenTab) {
+                jrf.addParserResult(pr, first);
+                first = false;
+            }
+
+            if (loadSess.isInvoked())
+                jrf.loadSessionAction.actionPerformed(new java.awt.event.ActionEvent(
+                        jrf, 0, ""));
+
+            if (splashScreen != null) {// do this only if splashscreen was actually created
+                splashScreen.dispose();
+                splashScreen = null;
+            }
+
+            /*JOptionPane.showMessageDialog(null, Globals.lang("Please note that this "
+                +"is an early beta version. Do not use it without backing up your files!"),
+                    Globals.lang("Beta version"), JOptionPane.WARNING_MESSAGE);*/
+
+
+            // Start auto save timer:
+            if (Globals.prefs.getBoolean("autoSave"))
+                Globals.startAutoSaveManager(jrf);
+
+            // If we are set to remember the window location, we also remember the maximised
+            // state. This needs to be set after the window has been made visible, so we
+            // do it here:
+            if (Globals.prefs.getBoolean("windowMaximised")) {
+                jrf.setExtendedState(JFrame.MAXIMIZED_BOTH);
+            }
+
+            jrf.setVisible(true);
+
+            if (Globals.prefs.getBoolean("windowMaximised")) {
+                jrf.setExtendedState(JFrame.MAXIMIZED_BOTH);
+            }
+
+            // TEST TEST TEST TEST TEST TEST
+            startSidePanePlugins(jrf);
+
+            for (ParserResult pr : failed) {
+                String message = "<html>"+Globals.lang("Error opening file '%0'.", pr.getFile().getName())
+                    +"<p>"+pr.getErrorMessage()+"</html>";
+
+                JOptionPane.showMessageDialog(jrf, message, Globals.lang("Error opening file"),
+                    JOptionPane.ERROR_MESSAGE);
+            }
+
+            for (int i = 0; i < loaded.size(); i++) {
+                ParserResult pr = loaded.elementAt(i);
+                if (Globals.prefs.getBoolean("displayKeyWarningDialogAtStartup") && pr.hasWarnings()) {
+                    String[] wrns = pr.warnings();
+                    StringBuilder wrn = new StringBuilder();
+                    for (int j = 0; j<Math.min(MAX_DIALOG_WARNINGS, wrns.length); j++)
+                        wrn.append(j + 1).append(". ").append(wrns[j]).append("\n");
+                    if (wrns.length > MAX_DIALOG_WARNINGS) {
+                        wrn.append("... ");
+                        wrn.append(Globals.lang("%0 warnings", String.valueOf(wrns.length)));
+                    }
+                    else if (wrn.length() > 0)
+                        wrn.deleteCharAt(wrn.length() - 1);
+                    jrf.showBaseAt(i);
+                    JOptionPane.showMessageDialog(jrf, wrn.toString(),
+                        Globals.lang("Warnings")+" ("+pr.getFile().getName()+")",
+                        JOptionPane.WARNING_MESSAGE);
+                }
+            }
+
+            // After adding the databases, go through each and see if
+            // any post open actions need to be done. For instance, checking
+            // if we found new entry types that can be imported, or checking
+            // if the database contents should be modified due to new features
+            // in this version of JabRef.
+            // Note that we have to check whether i does not go over baseCount().
+            // This is because importToOpen might have been used, which adds to
+            // loaded, but not to baseCount()
+            for (int i = 0; (i < loaded.size()) && (i < jrf.baseCount()); i++) {
+                ParserResult pr = loaded.elementAt(i);
+                BasePanel panel = jrf.baseAt(i);
+                OpenDatabaseAction.performPostOpenActions(panel, pr, true);
+            }
+
+            //Util.pr(": Finished adding panels");
+
+            // If any database loading was postponed due to an autosave, schedule them
+            // for handing now:
+            if (postponed.size() > 0) {
+                AutosaveStartupPrompter asp = new AutosaveStartupPrompter(jrf, postponed);
+                SwingUtilities.invokeLater(asp);
+            }
+
+            if (loaded.size() > 0) {
+                jrf.tabbedPane.setSelectedIndex(0);
+                new FocusRequester(((BasePanel) jrf.tabbedPane.getComponentAt(0)).mainTable);
+            }
+        } else
+            System.exit(0);
+    }
+
+    /**
+     * Go through all registered instances of SidePanePlugin, and register them
+     * in the SidePaneManager.
+     *
+     * @param jrf The JabRefFrame.
+     */
+    private void startSidePanePlugins(JabRefFrame jrf) {
+
+        JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
+        List<_JabRefPlugin.SidePanePluginExtension> plugins = jabrefPlugin.getSidePanePluginExtensions();
+        for (_JabRefPlugin.SidePanePluginExtension extension : plugins) {
+            SidePanePlugin plugin = extension.getSidePanePlugin();
+            plugin.init(jrf, jrf.sidePaneManager);
+            SidePaneComponent comp = plugin.getSidePaneComponent();
+            jrf.sidePaneManager.register(comp.getName(), comp);
+            jrf.addPluginMenuItem(plugin.getMenuItem());
+        }
+    }
+
+    public static ParserResult openBibFile(String name, boolean ignoreAutosave) {
+    	Globals.logger(Globals.lang("Opening") + ": " + name);
+        File file = new File(name);
+        if (!file.exists()) {
+            ParserResult pr = new ParserResult(null, null, null);
+            pr.setFile(file);
+            pr.setInvalid(true);
+            System.err.println(Globals.lang("Error")+": "+Globals.lang("File not found"));
+            return pr;
+
+        }
+        try {
+
+            if (!ignoreAutosave) {
+                boolean autoSaveFound = AutoSaveManager.newerAutoSaveExists(file);
+                if (autoSaveFound) {
+                    // We have found a newer autosave. Make a note of this, so it can be
+                    // handled after startup:
+                    ParserResult postp = new ParserResult(null, null, null);
+                    postp.setPostponedAutosaveFound(true);
+                    postp.setFile(file);
+                    return postp;
+                }
+            }
+
+            if (!Util.waitForFileLock(file, 10)) {
+                System.out.println(Globals.lang("Error opening file")+" '"+name+"'. "+
+                    "File is locked by another JabRef instance.");
+                return ParserResult.FILE_LOCKED;
+            }
+
+            String encoding = Globals.prefs.get("defaultEncoding");
+            ParserResult pr = OpenDatabaseAction.loadDatabase(file, encoding);
+            if (pr == null) {
+                pr = new ParserResult(null, null, null);
+                pr.setFile(file);
+                pr.setInvalid(true);
+                return pr;
+
+            }
+            pr.setFile(file);
+            if (pr.hasWarnings()) {
+                String[] warn = pr.warnings();
+                for (int i=0; i<warn.length; i++)
+                    System.out.println(Globals.lang("Warning")+": "+warn[i]);
+
+            }
+            return pr;
+        } catch (Throwable ex) {
+            ParserResult pr = new ParserResult(null, null, null);
+            pr.setFile(file);
+            pr.setInvalid(true);
+            pr.setErrorMessage(ex.getMessage());
+            return pr;
+        }
+
+    }
+
+    public static ParserResult importFile(String argument){
+    	String[] data = argument.split(",");
+        try {
+            if ((data.length > 1) && !"*".equals(data[1])) {
+                System.out.println(Globals.lang("Importing") + ": " + data[0]);
+                try {
+                    List<BibtexEntry> entries;
+                    if (Globals.ON_WIN) {
+                      entries = Globals.importFormatReader.importFromFile(data[1], data[0], jrf);
+                    }
+                    else {
+                      entries = Globals.importFormatReader.importFromFile( data[1],
+                                data[0].replaceAll("~", System.getProperty("user.home")), jrf );
+                    }
+                    return new ParserResult(entries);
+                } catch (IllegalArgumentException ex) {
+                    System.err.println(Globals.lang("Unknown import format")+": "+data[1]);
+                    return null;
+                }
+            } else {
+                // * means "guess the format":
+                System.out.println(Globals.lang("Importing in unknown format")
+                        + ": " + data[0]);
+
+                Pair<String, ParserResult>  importResult;
+                if (Globals.ON_WIN) {
+            	  importResult = Globals.importFormatReader.importUnknownFormat(data[0]);
+                }
+                else {
+                  importResult = Globals.importFormatReader.importUnknownFormat(
+                                 data[0].replaceAll("~", System.getProperty("user.home")));
+                }
+            	
+            	if (importResult != null){
+            		System.out.println(Globals.lang("Format used") + ": "
+                        + importResult.p);
+            		
+            		return importResult.v;
+            	} else {
+            		System.out.println(Globals.lang(
+                                "Could not find a suitable import format."));
+                }
+            }
+        } catch (IOException ex) {
+            System.err.println(Globals.lang("Error opening file") + " '"
+                    + data[0] + "': " + ex.getLocalizedMessage());
+        }
+        return null;
+    }
+
+    /**
+     * Will open a file (like importFile), but will also request JabRef to focus on this database 
+     * @param argument See importFile.
+     * @return ParserResult with setToOpenTab(true)
+     */
+    public static ParserResult importToOpenBase(String argument) {
+    	ParserResult result = importFile(argument);
+    	
+    	if (result != null)
+    		result.setToOpenTab(true);
+    	
+    	return result;
+    }
+}
diff --git a/src/java/net/sf/jabref/JabRefFileChooser.java b/src/java/net/sf/jabref/JabRefFileChooser.java
index 4a36887..f537074 100644
--- a/src/java/net/sf/jabref/JabRefFileChooser.java
+++ b/src/java/net/sf/jabref/JabRefFileChooser.java
@@ -1,110 +1,110 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.io.File;
-
-import javax.swing.JFileChooser;
-import javax.swing.JList;
-import javax.swing.plaf.ComponentUI;
-import javax.swing.plaf.basic.BasicFileChooserUI;
-import javax.swing.plaf.metal.MetalFileChooserUI;
-
-//======================================================================
-// this class is a work around for the problem with regular filechooser:
-// single clicking will no longer put into edit mode
-//======================================================================
-public class JabRefFileChooser extends JFileChooser
-{
-
-    public JabRefFileChooser()
-    {
-        super();
-    }
-
-    public JabRefFileChooser(File file){
-        super(file);
-    }
-
-    /*public int showOpenDialog(Component parent) throws HeadlessException {
-        if (lastSize != null) {
-            setSize(lastSize);
-            System.out.println("Setting size: "+lastSize);
-        }
-        int answer = super.showOpenDialog(parent);
-        lastSize = getSize();
-        return answer;
-    }*/
-
-    /*public int showSaveDialog(Component parent) throws HeadlessException {
-        if (lastSize != null) {
-            setSize(lastSize);
-            System.out.println("Setting size: "+lastSize);
-        }
-        int answer = super.showSaveDialog(parent);
-        lastSize = getSize();
-        return answer;
-    }*/
-
-    //========================================================
-    //
-    //========================================================
-
-    protected void setUI(ComponentUI newUI) {
-      if (Globals.osName.equals(Globals.MAC))
-        super.setUI(newUI);
-      else
-        super.setUI(new JabRefUI(this));
-     }
-    //========================================================
-    //
-    //========================================================
-
-    public static void main(String[] args) {
-        JabRefFileChooser fc = new JabRefFileChooser();
-        int returnVal = fc.showOpenDialog(null);
-        if (returnVal == JFileChooser.APPROVE_OPTION) {
-            fc.getSelectedFile();
-        }
-    }
-}
-
-class JabRefUI extends MetalFileChooserUI {
-    public JabRefUI(JFileChooser filechooser) {
-        super(filechooser);
-    }
-    protected class DoubleClickListener extends BasicFileChooserUI.DoubleClickListener {
-        JList list;
-        public DoubleClickListener(JList list) {
-            super(list);
-            this.list = list;
-        }
-        public void mouseEntered(MouseEvent e) {
-            //System.out.println("mouse entered");
-            MouseListener [] l = list.getMouseListeners();
-            for (int i = 0; i < l.length; i++) {
-                if (l[i] instanceof MetalFileChooserUI.SingleClickListener) {
-                    list.removeMouseListener(l[i]);
-                }
-            }
-            super.mouseEntered(e);
-        }
-    }
-    protected MouseListener createDoubleClickListener(JFileChooser fc, JList list) {
-        return new DoubleClickListener(list);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.io.File;
+
+import javax.swing.JFileChooser;
+import javax.swing.JList;
+import javax.swing.plaf.ComponentUI;
+import javax.swing.plaf.basic.BasicFileChooserUI;
+import javax.swing.plaf.metal.MetalFileChooserUI;
+
+//======================================================================
+// this class is a work around for the problem with regular filechooser:
+// single clicking will no longer put into edit mode
+//======================================================================
+public class JabRefFileChooser extends JFileChooser
+{
+
+    public JabRefFileChooser()
+    {
+        super();
+    }
+
+    public JabRefFileChooser(File file){
+        super(file);
+    }
+
+    /*public int showOpenDialog(Component parent) throws HeadlessException {
+        if (lastSize != null) {
+            setSize(lastSize);
+            System.out.println("Setting size: "+lastSize);
+        }
+        int answer = super.showOpenDialog(parent);
+        lastSize = getSize();
+        return answer;
+    }*/
+
+    /*public int showSaveDialog(Component parent) throws HeadlessException {
+        if (lastSize != null) {
+            setSize(lastSize);
+            System.out.println("Setting size: "+lastSize);
+        }
+        int answer = super.showSaveDialog(parent);
+        lastSize = getSize();
+        return answer;
+    }*/
+
+    //========================================================
+    //
+    //========================================================
+
+    protected void setUI(ComponentUI newUI) {
+      if (Globals.osName.equals(Globals.MAC))
+        super.setUI(newUI);
+      else
+        super.setUI(new JabRefUI(this));
+     }
+    //========================================================
+    //
+    //========================================================
+
+    public static void main(String[] args) {
+        JabRefFileChooser fc = new JabRefFileChooser();
+        int returnVal = fc.showOpenDialog(null);
+        if (returnVal == JFileChooser.APPROVE_OPTION) {
+            fc.getSelectedFile();
+        }
+    }
+}
+
+class JabRefUI extends MetalFileChooserUI {
+    public JabRefUI(JFileChooser filechooser) {
+        super(filechooser);
+    }
+    protected class DoubleClickListener extends BasicFileChooserUI.DoubleClickListener {
+        JList list;
+        public DoubleClickListener(JList list) {
+            super(list);
+            this.list = list;
+        }
+        public void mouseEntered(MouseEvent e) {
+            //System.out.println("mouse entered");
+            MouseListener [] l = list.getMouseListeners();
+            for (int i = 0; i < l.length; i++) {
+                if (l[i] instanceof MetalFileChooserUI.SingleClickListener) {
+                    list.removeMouseListener(l[i]);
+                }
+            }
+            super.mouseEntered(e);
+        }
+    }
+    protected MouseListener createDoubleClickListener(JFileChooser fc, JList list) {
+        return new DoubleClickListener(list);
+    }
+}
diff --git a/src/java/net/sf/jabref/JabRefFrame.java b/src/java/net/sf/jabref/JabRefFrame.java
index a5d86f1..9874a09 100644
--- a/src/java/net/sf/jabref/JabRefFrame.java
+++ b/src/java/net/sf/jabref/JabRefFrame.java
@@ -1,2597 +1,2632 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.Vector;
-
-import javax.swing.*;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import org.java.ayatana.ApplicationMenu;
-
-import net.sf.jabref.export.*;
-import net.sf.jabref.external.ExternalFileTypeEditor;
-import net.sf.jabref.external.PushToApplicationButton;
-import net.sf.jabref.groups.EntryTableTransferHandler;
-import net.sf.jabref.groups.GroupSelector;
-import net.sf.jabref.gui.*;
-import net.sf.jabref.imports.EntryFetcher;
-import net.sf.jabref.imports.GeneralFetcher;
-import net.sf.jabref.imports.ImportCustomizationDialog;
-import net.sf.jabref.imports.ImportFormat;
-import net.sf.jabref.imports.ImportFormats;
-import net.sf.jabref.imports.ImportMenuItem;
-import net.sf.jabref.imports.OpenDatabaseAction;
-import net.sf.jabref.journals.ManageJournalsAction;
-import net.sf.jabref.label.ArticleLabelRule;
-import net.sf.jabref.label.BookLabelRule;
-import net.sf.jabref.label.IncollectionLabelRule;
-import net.sf.jabref.label.InproceedingsLabelRule;
-import net.sf.jabref.label.LabelMaker;
-import net.sf.jabref.oo.OpenOfficePanel;
-import net.sf.jabref.plugin.PluginCore;
-import net.sf.jabref.plugin.PluginInstallerAction;
-import net.sf.jabref.plugin.core.JabRefPlugin;
-import net.sf.jabref.plugin.core.generated._JabRefPlugin.EntryFetcherExtension;
-import net.sf.jabref.specialfields.Priority;
-import net.sf.jabref.specialfields.Quality;
-import net.sf.jabref.specialfields.Rank;
-import net.sf.jabref.specialfields.Relevance;
-import net.sf.jabref.specialfields.SpecialFieldAction;
-import net.sf.jabref.specialfields.SpecialFieldValue;
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-import net.sf.jabref.sql.importer.DbImportAction;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableInsertEntry;
-import net.sf.jabref.undo.UndoableRemoveEntry;
-import net.sf.jabref.util.ManageKeywordsAction;
-import net.sf.jabref.util.MassSetFieldAction;
-import net.sf.jabref.wizard.auximport.gui.FromAuxDialog;
-import net.sf.jabref.wizard.integrity.gui.IntegrityWizard;
-
-import com.jgoodies.looks.HeaderStyle;
-import com.jgoodies.looks.Options;
-import com.jgoodies.uif_lite.component.UIFSplitPane;
-
-/**
- * The main window of the application.
- */
-public class JabRefFrame extends JFrame implements OutputPrinter {
-
-    UIFSplitPane contentPane = new UIFSplitPane();
-
-    JabRefPreferences prefs = Globals.prefs; 
-    PrefsDialog3 prefsDialog = null;
-    
-    private int lastTabbedPanelSelectionIndex = -1 ;
-
-    // The sidepane manager takes care of populating the sidepane. 
-    public SidePaneManager sidePaneManager;
-
-    JTabbedPane tabbedPane; // initialized at constructor
-    
-    final Insets marg = new Insets(1,0,2,0);
-
-    class ToolBar extends JToolBar {
-      void addAction(Action a) {
-        JButton b = new JButton(a);
-        b.setText(null);
-        if (!Globals.ON_MAC)
-            b.setMargin(marg);
-        add(b);
-      }
-    }
-    ToolBar tlb = new ToolBar();
-
-    JMenuBar mb = new JMenuBar();
-    JMenu pluginMenu = subMenu("Plugins");
-    boolean addedToPluginMenu = false;
-
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-
-    JLabel statusLine = new JLabel("", SwingConstants.LEFT), statusLabel = new JLabel(Globals
-        .lang("Status")
-        + ":", SwingConstants.LEFT);
-    JProgressBar progressBar = new JProgressBar();
-
-    private FileHistory fileHistory = new FileHistory(prefs, this);
-
-    private SysTray sysTray = null;
-
-    LabelMaker labelMaker;
-
-    // The help window.
-    public HelpDialog helpDiag = new HelpDialog(this);
-
-    // Here we instantiate menu/toolbar actions. Actions regarding
-    // the currently open database are defined as a GeneralAction
-    // with a unique command string. This causes the appropriate
-    // BasePanel's runCommand() method to be called with that command.
-    // Note: GeneralAction's constructor automatically gets translations
-    // for the name and message strings.
-
-  // References to the toggle buttons in the toolbar:
-  public JToggleButton groupToggle, searchToggle, previewToggle, highlightAny,
-      highlightAll;
-  OpenDatabaseAction
-      open = new OpenDatabaseAction(this, true);
-  AbstractAction
-      close = new CloseDatabaseAction(),
-      quit = new CloseAction(),
-      selectKeys = new SelectKeysAction(),
-      newDatabaseAction = new NewDatabaseAction(),
-      newSubDatabaseAction = new NewSubDatabaseAction(),
-      integrityCheckAction = new IntegrityCheckAction(),
-      help = new HelpAction("JabRef help", helpDiag,
-                            GUIGlobals.baseFrameHelp, Globals.lang("JabRef help"),
-                            prefs.getKey("Help")),
-      contents = new HelpAction("Help contents", helpDiag,
-                                GUIGlobals.helpContents, Globals.lang("Help contents"),
-                                GUIGlobals.getIconUrl("helpContents")),
-      about = new HelpAction("About JabRef", helpDiag,
-                             GUIGlobals.aboutPage, Globals.lang("About JabRef"),
-                             GUIGlobals.getIconUrl("about")),
-      editEntry = new GeneralAction("edit", "Edit entry",
-                               Globals.lang("Edit entry"),
-                               prefs.getKey("Edit entry")),
-      focusTable = new GeneralAction("focusTable", "Focus entry table",
-                Globals.lang("Move the keyboard focus to the entry table"),
-                prefs.getKey("Focus entry table")),
-      save = new GeneralAction("save", "Save database",
-                               Globals.lang("Save database"),
-                               prefs.getKey("Save database")),
-      saveAs = new GeneralAction("saveAs", "Save database as ...",
-                                 Globals.lang("Save database as ..."),
-                                 prefs.getKey("Save database as ...")),
-      saveAll = new SaveAllAction(JabRefFrame.this),
-      saveSelectedAs = new GeneralAction("saveSelectedAs",
-                                         "Save selected as ...",
-                                         Globals.lang("Save selected as ..."),
-                                         GUIGlobals.getIconUrl("saveAs")),
-      exportAll = ExportFormats.getExportAction(this, false),
-      exportSelected = ExportFormats.getExportAction(this, true),
-      importCurrent = ImportFormats.getImportAction(this, false),
-      importNew = ImportFormats.getImportAction(this, true),
-      nextTab = new ChangeTabAction(true),
-      prevTab = new ChangeTabAction(false),
-      sortTabs = new SortTabsAction(this),
-      undo = new GeneralAction("undo", "Undo", Globals.lang("Undo"),
-                               prefs.getKey("Undo")),
-      redo = new GeneralAction("redo", "Redo", Globals.lang("Redo"),
-                               prefs.getKey("Redo")),
-      forward = new GeneralAction("forward", "Forward", Globals.lang("Forward"),
-              "right", prefs.getKey("Forward")),
-      back = new GeneralAction("back", "Back", Globals.lang("Back"),
-              "left", prefs.getKey("Back")),
-      /*cut = new GeneralAction("cut", "Cut", Globals.lang("Cut"),
-         GUIGlobals.cutIconFile,
-         prefs.getKey("Cut")),*/
-      delete = new GeneralAction("delete", "Delete", Globals.lang("Delete"),
-                                 prefs.getKey("Delete")),
-      /*copy = new GeneralAction("copy", "Copy", Globals.lang("Copy"),
-                               GUIGlobals.copyIconFile,
-                               prefs.getKey("Copy")),*/
-      copy = new EditAction("copy", GUIGlobals.getIconUrl("copy")),
-      paste = new EditAction("paste", GUIGlobals.getIconUrl("paste")),
-      cut = new EditAction("cut", GUIGlobals.getIconUrl("cut")),
-      mark = new GeneralAction("markEntries", "Mark entries",
-                               Globals.lang("Mark entries"),
-                               prefs.getKey("Mark entries")),
-       unmark = new GeneralAction("unmarkEntries", "Unmark entries",
-                                  Globals.lang("Unmark entries"),
-                                  prefs.getKey("Unmark entries")),
-       unmarkAll = new GeneralAction("unmarkAll", "Unmark all"),
-       toggleRelevance = new GeneralAction(
-    		   Relevance.getInstance().getValues().get(0).getActionName(), 
-    		   Relevance.getInstance().getValues().get(0).getMenuString(),
-    		   Relevance.getInstance().getValues().get(0).getToolTipText()),
-       toggleQualityAssured = new GeneralAction(
-				Quality.getInstance().getValues().get(0).getActionName(),
-				Quality.getInstance().getValues().get(0).getMenuString(),
-				Quality.getInstance().getValues().get(0).getToolTipText()),
-//    	priority = new GeneralAction("setPriority", "Set priority",
-//    			                                            Globals.lang("Set priority")),
-      manageSelectors = new GeneralAction("manageSelectors", "Manage content selectors"),
-      saveSessionAction = new SaveSessionAction(),
-      loadSessionAction = new LoadSessionAction(),
-      incrementalSearch = new GeneralAction("incSearch", "Incremental search",
-                                            Globals.lang("Start incremental search"),
-                                            prefs.getKey("Incremental search")),
-      normalSearch = new GeneralAction("search", "Search", Globals.lang("Search"),
-                                       prefs.getKey("Search")),
-      toggleSearch = new GeneralAction("toggleSearch", "Search", Globals.lang("Toggle search panel")),
-
-      copyKey = new GeneralAction("copyKey", "Copy BibTeX key",
-            prefs.getKey("Copy BibTeX key")),
-      //"Put a BibTeX reference to the selected entries on the clipboard",
-      copyCiteKey = new GeneralAction("copyCiteKey", "Copy \\cite{BibTeX key}",
-                                      //"Put a BibTeX reference to the selected entries on the clipboard",
-                                      prefs.getKey("Copy \\cite{BibTeX key}")),
-      copyKeyAndTitle = new GeneralAction("copyKeyAndTitle", 
-    		  							  "Copy BibTeX key and title",
-    		  							  prefs.getKey("Copy BibTeX key and title")),
-      mergeDatabaseAction = new GeneralAction("mergeDatabase",
-                                              "Append database",
-                                              Globals.lang("Append contents from a BibTeX database into the currently viewed database"),
-                                              GUIGlobals.getIconUrl("open")),
-      //prefs.getKey("Open")),
-      /*remove = new GeneralAction("remove", "Remove", "Remove selected entries",
-        GUIGlobals.removeIconFile),*/
-      selectAll = new GeneralAction("selectAll", "Select all",
-                                    prefs.getKey("Select all")),
-      replaceAll = new GeneralAction("replaceAll", "Replace string",
-                                     prefs.getKey("Replace string")),
-
-      editPreamble = new GeneralAction("editPreamble", "Edit preamble",
-                                       Globals.lang("Edit preamble"),
-                                       prefs.getKey("Edit preamble")),
-      editStrings = new GeneralAction("editStrings", "Edit strings",
-                                      Globals.lang("Edit strings"),
-                                      prefs.getKey("Edit strings")),
-      toggleGroups = new GeneralAction("toggleGroups",
-                                       "Toggle groups interface",
-                                       Globals.lang("Toggle groups interface"),
-                                       prefs.getKey("Toggle groups interface")),
-      togglePreview = new GeneralAction("togglePreview",
-                                        "Toggle entry preview",
-                                        Globals.lang("Toggle entry preview"),
-                                        prefs.getKey("Toggle entry preview")),
-      toggleHighlightAny = new GeneralAction("toggleHighlightGroupsMatchingAny",
-                                        "Highlight groups matching any selected entry",
-                                        Globals.lang("Highlight groups matching any selected entry"),
-                                        GUIGlobals.getIconUrl("groupsHighlightAny")),
-      toggleHighlightAll = new GeneralAction("toggleHighlightGroupsMatchingAll",
-                                        "Highlight groups matching all selected entries",
-                                        Globals.lang("Highlight groups matching all selected entries"),
-                                        GUIGlobals.getIconUrl("groupsHighlightAll")),
-      switchPreview = new GeneralAction("switchPreview",
-                                        "Switch preview layout",
-                                        prefs.getKey("Switch preview layout")),
-       makeKeyAction = new GeneralAction("makeKey", "Autogenerate BibTeX keys",
-                                        Globals.lang("Autogenerate BibTeX keys"),
-                                        prefs.getKey("Autogenerate BibTeX keys")),
-                                        
-      writeXmpAction = new GeneralAction("writeXMP", "Write XMP-metadata to PDFs",
-                                        Globals.lang("Will write XMP-metadata to the PDFs linked from selected entries."),
-                                        prefs.getKey("Write XMP")),
-      openFile = new GeneralAction("openExternalFile", "Open file",
-                                   Globals.lang("Open file"),
-                                   prefs.getKey("Open file")),
-      openPdf = new GeneralAction("openFile", "Open PDF or PS",
-                                   Globals.lang("Open PDF or PS"),
-                                   prefs.getKey("Open PDF or PS")),
-      openUrl = new GeneralAction("openUrl", "Open URL or DOI",
-                                  Globals.lang("Open URL or DOI"),
-                                  prefs.getKey("Open URL or DOI")),
-      openSpires = new GeneralAction("openSpires", "Open SPIRES entry",
-                                          Globals.lang("Open SPIRES entry"),
-                                          prefs.getKey("Open SPIRES entry")),
-      /*
-	   * It looks like this wasn't being implemented for spires anyway so we
-	   * comment it out for now.
-	   *
-	  openInspire = new GeneralAction("openInspire", "Open INSPIRE entry",
-                                          Globals.lang("Open INSPIRE entry"),
-                                          prefs.getKey("Open INSPIRE entry")),
-		*/
-      dupliCheck = new GeneralAction("dupliCheck", "Find duplicates"),
-      //strictDupliCheck = new GeneralAction("strictDupliCheck", "Find and remove exact duplicates"),
-      plainTextImport = new GeneralAction("plainTextImport",
-                                          "New entry from plain text",
-                                          prefs.getKey("New from plain text")),
-
-
-      customExpAction = new CustomizeExportsAction(),
-      customImpAction = new CustomizeImportsAction(),
-      customFileTypesAction = ExternalFileTypeEditor.getAction(this),
-      exportToClipboard = new GeneralAction("exportToClipboard", "Export selected entries to clipboard"),
-      //expandEndnoteZip = new ExpandEndnoteFilters(this),
-        autoSetPdf = new GeneralAction("autoSetPdf", Globals.lang("Synchronize %0 links", "PDF"), Globals.prefs.getKey("Synchronize PDF")),
-        autoSetPs = new GeneralAction("autoSetPs", Globals.lang("Synchronize %0 links", "PS"), Globals.prefs.getKey("Synchronize PS")),
-        autoSetFile = new GeneralAction("autoSetFile", Globals.lang("Synchronize file links"), Globals.prefs.getKey("Synchronize files")),
-
-    abbreviateMedline = new GeneralAction("abbreviateMedline", "Abbreviate journal names (MEDLINE)",
-                Globals.lang("Abbreviate journal names of the selected entries (MEDLINE abbreviation)")),
-  abbreviateIso = new GeneralAction("abbreviateIso", "Abbreviate journal names (ISO)",
-                          Globals.lang("Abbreviate journal names of the selected entries (ISO abbreviation)"),
-                          Globals.prefs.getKey("Abbreviate")),
-
-
-    unabbreviate = new GeneralAction("unabbreviate", "Unabbreviate journal names",
-                    Globals.lang("Unabbreviate journal names of the selected entries"),
-            Globals.prefs.getKey("Unabbreviate")),
-    manageJournals = new ManageJournalsAction(this),
-    databaseProperties = new DatabasePropertiesAction(),
-    bibtexKeyPattern = new BibtexKeyPatternAction(),
-    errorConsole = Globals.errorConsole.getAction(this),
-    test = new GeneralAction("test", "Test"),
-
-    dbConnect = new GeneralAction("dbConnect", "Connect to external SQL database",
-         Globals.lang("Connect to external SQL database"), 
-          GUIGlobals.getIconUrl("dbConnect") ),
-
-    dbExport = new GeneralAction("dbExport", "Export to external SQL database",
-         Globals.lang("Export to external SQL database"), 
-          GUIGlobals.getIconUrl("dbExport") ),
-
-    Cleanup = new GeneralAction("Cleanup", "Cleanup entries", 
-					Globals.lang("Cleanup entries"), 
-					GUIGlobals.getIconUrl("cleanupentries") ),
-					
-    dbImport = new DbImportAction(this).getAction(),
-    //downloadFullText = new GeneralAction("downloadFullText", "Look up full text document",
-    //        Globals.lang("Follow DOI or URL link and try to locate PDF full text document")),
-    increaseFontSize = new IncreaseTableFontSizeAction(),
-    decreseFontSize = new DecreaseTableFontSizeAction(),
-    installPlugin = new PluginInstallerAction(this),
-    resolveDuplicateKeys = new GeneralAction("resolveDuplicateKeys", "Resolve duplicate BibTeX keys",
-              Globals.lang("Find and remove duplicate BibTeX keys"),
-              prefs.getKey("Resolve duplicate BibTeX keys"));
-
-    MassSetFieldAction massSetField = new MassSetFieldAction(this);
-    ManageKeywordsAction manageKeywords = new ManageKeywordsAction(this);
-
-	GeneralAction findUnlinkedFiles = new GeneralAction(
-  			FindUnlinkedFilesDialog.ACTION_COMMAND,
-  			FindUnlinkedFilesDialog.ACTION_TITLE,
-  			FindUnlinkedFilesDialog.ACTION_SHORT_DESCRIPTION,
-  			FindUnlinkedFilesDialog.ACTION_ICON,
-  			prefs.getKey(FindUnlinkedFilesDialog.ACTION_COMMAND)
-  	);
-    
-    PushToApplicationButton pushExternalButton;
-
-    List<EntryFetcher> fetchers = new LinkedList<EntryFetcher>();
-    List<Action> fetcherActions = new LinkedList<Action>();
-
-    private SearchManager2 searchManager;
-
-	public GroupSelector groupSelector;
-
-  // The menus for importing/appending other formats
-  JMenu importMenu = subMenu("Import into current database"),
-      importNewMenu = subMenu("Import into new database"),
-      exportMenu = subMenu("Export"),
-      customExportMenu = subMenu("Custom export"),
-      newDatabaseMenu = subMenu("New database" );
-
-  // Other submenus
-  JMenu checkAndFix = subMenu("Legacy tools...");
-
-
-  // The action for adding a new entry of unspecified type.
-  NewEntryAction newEntryAction = new NewEntryAction(prefs.getKey("New entry"));
-  NewEntryAction[] newSpecificEntryAction = new NewEntryAction[]
-  {
-      new NewEntryAction("article", prefs.getKey("New article")),
-      new NewEntryAction("book", prefs.getKey("New book")),
-      new NewEntryAction("phdthesis", prefs.getKey("New phdthesis")),
-      new NewEntryAction("inbook", prefs.getKey("New inbook")),
-      new NewEntryAction("mastersthesis", prefs.getKey("New mastersthesis")),
-      new NewEntryAction("proceedings", prefs.getKey("New proceedings")),
-      new NewEntryAction("inproceedings"),
-      new NewEntryAction("conference"),
-      new NewEntryAction("incollection"),
-      new NewEntryAction("booklet"),
-      new NewEntryAction("manual"),
-      new NewEntryAction("techreport"),
-      new NewEntryAction("unpublished",
-                         prefs.getKey("New unpublished")),
-      new NewEntryAction("misc"),
-      new NewEntryAction("other")
-  };
-
-  public JabRefFrame() {
-    init();
-    updateEnabledState();
-    
-    
-  }
-
-  private void init() {
-	    tabbedPane = new DragDropPopupPane(manageSelectors, databaseProperties, bibtexKeyPattern);
-
-        macOSXRegistration();
-
-        UIManager.put("FileChooser.readOnly", Globals.prefs.getBoolean("filechooserDisableRename"));
-
-        MyGlassPane glassPane = new MyGlassPane();
-        setGlassPane(glassPane);
-        // glassPane.setVisible(true);
-
-        setTitle(GUIGlobals.frameTitle);
-        //setIconImage(GUIGlobals.getImage("jabrefIcon").getImage());
-        setIconImage(GUIGlobals.getImage("jabrefIcon48").getImage());
-        setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-        addWindowListener(new WindowAdapter() {
-            public void windowClosing(WindowEvent e) {
-                (new CloseAction()).actionPerformed(null);
-            }
-        });
-
-        initLabelMaker();
-
-        initSidePane();
-        
-        initLayout();
-        
-        initActions();
-
-      
-      setBounds(GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds());
-      if ( !prefs.getBoolean("windowMaximised") ) {
-         
-        int sizeX = prefs.getInt("sizeX");
-        int sizeY = prefs.getInt("sizeY");
-        int posX = prefs.getInt("posX");
-        int posY = prefs.getInt("posY");
-
-        /*
-        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
-        GraphicsDevice[] gs = ge.getScreenDevices();
-
-
-        // Get size of each screen
-        for (int i=0; i<gs.length; i++) {
-            DisplayMode dm = gs[i].getDisplayMode();
-            int screenWidth = dm.getWidth();
-            int screenHeight = dm.getHeight();
-            System.out.println(gs[i].getDefaultConfiguration().getBounds());
-        }*/
-
-        //
-        // Fix for [ 1738920 ] Windows Position in Multi-Monitor environment
-        //
-        // Do not put a window outside the screen if the preference values are wrong.
-        //
-        // Useful reference: http://www.exampledepot.com/egs/java.awt/screen_ScreenSize.html?l=rel
-        // googled on forums.java.sun.com graphicsenvironment second screen java
-        //
-        if (GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices().length == 1){
-
-            Rectangle bounds = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0]
-                    .getDefaultConfiguration().getBounds();
-            Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
-
-            // Make sure we are not above or to the left of the screen bounds:
-            if (posX < bounds.x)
-                posX = bounds.x;
-            if (posY < bounds.y)
-                posY = bounds.y;
-
-            int height = (int) dim.getHeight();
-            int width = (int) dim.getWidth();
-
-            //if (posX < )
-
-            if (posX + sizeX > width) {
-                if (sizeX <= width) {
-                    posX = width - sizeX;
-                } else {
-                    posX = prefs.getIntDefault("posX");
-                    sizeX = prefs.getIntDefault("sizeX");
-                }
-            }
-
-            if (posY + sizeY > height) {
-                if (sizeY <= height) {
-                    posY = height - sizeY;
-                } else {
-                    posY = prefs.getIntDefault("posY");
-                    sizeY = prefs.getIntDefault("sizeY");
-                }
-            }
-        }
-        setBounds(posX, posY, sizeX, sizeY);
-      }
-
-        tabbedPane.setBorder(null);
-        tabbedPane.setForeground(GUIGlobals.inActiveTabbed);
-
-        /*
-         * The following state listener makes sure focus is registered with the
-         * correct database when the user switches tabs. Without this,
-         * cut/paste/copy operations would some times occur in the wrong tab.
-         */
-        tabbedPane.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent e) {
-                markActiveBasePanel();
-
-                BasePanel bp = basePanel();
-                if (bp != null) {
-                    groupToggle.setSelected(sidePaneManager.isComponentVisible("groups"));
-                    searchToggle.setSelected(sidePaneManager.isComponentVisible("search"));
-                    previewToggle.setSelected(Globals.prefs.getBoolean("previewEnabled"));
-                    highlightAny
-                        .setSelected(Globals.prefs.getBoolean("highlightGroupsMatchingAny"));
-                    highlightAll
-                        .setSelected(Globals.prefs.getBoolean("highlightGroupsMatchingAll"));
-                    Globals.focusListener.setFocused(bp.mainTable);
-                    setWindowTitle();
-                    // Update search autocompleter with information for the correct database:
-                    bp.updateSearchManager();
-                    // Set correct enabled state for Back and Forward actions:
-                    bp.setBackAndForwardEnabledState();
-                    new FocusRequester(bp.mainTable);
-                }
-            }
-        });
-
-        // The following sets up integration with Unity's global menu, but currently (Nov 18, 2012)
-        // this doesn't work with OpenJDK 6 (leads to crash), only with 7.
-        String javaVersion = System.getProperty("java.version", null);
-        if (javaVersion.compareTo("1.7") >= 0)
-            ApplicationMenu.tryInstall(this);
-
-    }
-
-    public void setWindowTitle() {
-        // Set window title:
-        BasePanel bp = basePanel();
-        if (bp == null) {
-            setTitle(GUIGlobals.frameTitle);
-            return;
-        }
-        String star = bp.baseChanged ? "*" : "";
-        if (bp.getFile() != null) {
-            setTitle(GUIGlobals.frameTitle+" - "+bp.getFile().getPath()+star);
-        } else {
-            setTitle(GUIGlobals.frameTitle+" - "+Globals.lang("untitled")+star);
-        }
-    }
-
-    private void initSidePane() {
-        sidePaneManager = new SidePaneManager(this);
-
-        Globals.sidePaneManager = this.sidePaneManager;
-        Globals.helpDiag = this.helpDiag;
-
-        /*
-         * Load fetchers that are plug-in extensions
-         */
-        JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
-    	if (jabrefPlugin != null){
-                for (EntryFetcherExtension ext : jabrefPlugin.getEntryFetcherExtensions()){
-                    try {
-                            EntryFetcher fetcher = ext.getEntryFetcher();
-                            if (fetcher != null){
-                                    fetchers.add(fetcher);
-                            }
-                    } catch (ClassCastException ex) {
-                        PluginCore.getManager().disablePlugin(ext.getDeclaringPlugin().getDescriptor());
-                        ex.printStackTrace();
-                    }
-                } 
-    	}
-        
-        groupSelector = new GroupSelector(this, sidePaneManager);
-        searchManager = new SearchManager2(this, sidePaneManager);
-
-        sidePaneManager.register("groups", groupSelector);
-        sidePaneManager.register("search", searchManager);
-
-        // Show the search panel if it was visible at last shutdown:
-        if (Globals.prefs.getBoolean("searchPanelVisible"))
-            sidePaneManager.show("search");
-    }
-
-
-AboutAction aboutAction = new AboutAction();
-  class AboutAction
-      extends AbstractAction {
-    public AboutAction() {
-      super(Globals.lang("About JabRef"));
-
-    }
-
-    public void actionPerformed(ActionEvent e) {
-      about();
-    }
-  }
-
-
-  // General info dialog.  The OSXAdapter calls this method when "About OSXAdapter"
-  // is selected from the application menu.
-  public void about() {
-    JDialog about = new JDialog(JabRefFrame.this, Globals.lang("About JabRef"),
-                                true);
-    JEditorPane jp = new JEditorPane();
-    JScrollPane sp = new JScrollPane
-        (jp, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-         JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-    jp.setEditable(false);
-    try {
-      jp.setPage(GUIGlobals.class.getResource("/help/About.html"));//GUIGlobals.aboutPage);
-      // We need a hyperlink listener to be able to switch to the license
-      // terms and back.
-      jp.addHyperlinkListener(new javax.swing.event.HyperlinkListener() {
-        public void hyperlinkUpdate(javax.swing.event.HyperlinkEvent e) {
-          if (e.getEventType()
-              == javax.swing.event.HyperlinkEvent.EventType.ACTIVATED) {
-            try {
-              ( (JEditorPane) e.getSource()).setPage(e.getURL());
-            }
-            catch (IOException ex) {}
-          }
-        }
-      });
-      about.getContentPane().add(sp);
-      about.setSize(GUIGlobals.aboutSize);
-      Util.placeDialog(about, JabRefFrame.this);
-      about.setVisible(true);
-    }
-    catch (IOException ex) {
-      ex.printStackTrace();
-      JOptionPane.showMessageDialog(JabRefFrame.this, "Could not load file 'About.html'",
-                                    "Error", JOptionPane.ERROR_MESSAGE);
-    }
-
-  }
-
-  // General preferences dialog.  The OSXAdapter calls this method when "Preferences..."
-  // is selected from the application menu.
-  public void preferences() {
-    //PrefsDialog.showPrefsDialog(JabRefFrame.this, prefs);
-      AbstractWorker worker = new AbstractWorker() {
-              public void run() {
-                  output(Globals.lang("Opening preferences..."));
-                  if (prefsDialog == null) {
-                      prefsDialog = new PrefsDialog3(JabRefFrame.this);
-                      Util.placeDialog(prefsDialog, JabRefFrame.this);
-                  }
-                  else
-                      prefsDialog.setValues();
-
-              }
-              public void update() {
-                  prefsDialog.setVisible(true);
-                  output("");
-              }
-          };
-      worker.getWorker().run();
-      worker.getCallBack().update();
-  }
-
-public JabRefPreferences prefs() {
-  return prefs;
-}
-
-  // General info dialog.  The OSXAdapter calls this method when "Quit OSXAdapter"
-  // is selected from the application menu, Cmd-Q is pressed, or "Quit" is selected from the Dock.
-  public void quit() {
-    // Ask here if the user really wants to close, if the base
-    // has not been saved since last save.
-    boolean close = true;
-    Vector<String> filenames = new Vector<String>();
-    if (tabbedPane.getTabCount() > 0) {
-      for (int i = 0; i < tabbedPane.getTabCount(); i++) {
-        if (baseAt(i).baseChanged) {
-          tabbedPane.setSelectedIndex(i);
-          int answer = JOptionPane.showConfirmDialog
-              (JabRefFrame.this, Globals.lang
-               ("Database has changed. Do you "
-                + "want to save before closing?"),
-               Globals.lang("Save before closing"),
-               JOptionPane.YES_NO_CANCEL_OPTION);
-
-          if ( (answer == JOptionPane.CANCEL_OPTION) ||
-              (answer == JOptionPane.CLOSED_OPTION)) {
-            close = false; // The user has cancelled.
-              return;
-          }
-          if (answer == JOptionPane.YES_OPTION) {
-            // The user wants to save.
-            try {
-              //basePanel().runCommand("save");
-                SaveDatabaseAction saveAction = new SaveDatabaseAction(basePanel());
-                saveAction.runCommand();
-                if (saveAction.isCancelled() || !saveAction.isSuccess()) {
-                    // The action was either cancelled or unsuccessful.
-                    // Break!
-                    output(Globals.lang("Unable to save database"));
-                    close = false;
-                }
-            }
-            catch (Throwable ex) {
-              // Something prevented the file
-              // from being saved. Break!!!
-              close = false;
-              break;
-            }
-          }
-        }
-
-        if (baseAt(i).getFile() != null) {
-          filenames.add(baseAt(i).getFile().getAbsolutePath());
-        }
-      }
-    }
-
-    if (close) {
-
-      for (int i = 0; i < tabbedPane.getTabCount(); i++) {
-          if (baseAt(i).isSaving()) {
-              // There is a database still being saved, so we need to wait.
-              WaitForSaveOperation w = new WaitForSaveOperation(this);
-              w.show(); // This method won't return until cancelled or the save operation is done.
-              if (w.cancelled())
-                  return; // The user clicked cancel.
-          }
-      }
-
-
-      dispose();
-
-      if (basePanel() != null)
-        basePanel().saveDividerLocation();
-      prefs.putInt("posX", JabRefFrame.this.getLocation().x);
-      prefs.putInt("posY", JabRefFrame.this.getLocation().y);
-      prefs.putInt("sizeX", JabRefFrame.this.getSize().width);
-      prefs.putInt("sizeY", JabRefFrame.this.getSize().height);
-      //prefs.putBoolean("windowMaximised", (getExtendedState()&MAXIMIZED_BOTH)>0);
-      prefs.putBoolean("windowMaximised", (getExtendedState() == Frame.MAXIMIZED_BOTH));
-      
-      prefs.putBoolean("searchPanelVisible", sidePaneManager.isComponentVisible("search"));
-      // Store divider location for side pane:
-      int width = contentPane.getDividerLocation();
-      if (width > 0) 
-          prefs.putInt("sidePaneWidth", width);
-      if (prefs.getBoolean("openLastEdited")) {
-        // Here we store the names of allcurrent filea. If
-        // there is no current file, we remove any
-        // previously stored file name.
-        if (filenames.size() == 0) {
-          prefs.remove("lastEdited");
-        }
-        else {
-          String[] names = new String[filenames.size()];
-          for (int i = 0; i < filenames.size(); i++) {
-            names[i] = filenames.elementAt(i);
-
-          }
-          prefs.putStringArray("lastEdited", names);
-        }
-
-      }
-
-      fileHistory.storeHistory();
-      prefs.customExports.store();
-      prefs.customImports.store();
-      BibtexEntryType.saveCustomEntryTypes(prefs);
-
-      // Clear autosave files:
-      if (Globals.autoSaveManager != null)
-        Globals.autoSaveManager.clearAutoSaves();
-
-      // Let the search interface store changes to prefs.
-      // But which one? Let's use the one that is visible.
-      if (basePanel() != null) {
-        (searchManager).updatePrefs();
-      }
-      
-      prefs.flush();
-      
-      System.exit(0); // End program.
-    }
-  }
-
-    
-
-  private void macOSXRegistration() {
-    if (Globals.osName.equals(Globals.MAC)) {
-      try {
-        Class<?> osxAdapter = Class.forName("osxadapter.OSXAdapter");
-
-        Class<?>[] defArgs = {
-            JabRefFrame.class};
-        Method registerMethod = osxAdapter.getDeclaredMethod(
-            "registerMacOSXApplication", defArgs);
-        if (registerMethod != null) {
-          Object[] args = {
-              this};
-          registerMethod.invoke(osxAdapter, args);
-        }
-        // This is slightly gross.  to reflectively access methods with boolean args,
-        // use "boolean.class", then pass a Boolean object in as the arg, which apparently
-
-        defArgs[0] = boolean.class;
-        Method prefsEnableMethod = osxAdapter.getDeclaredMethod("enablePrefs",
-            defArgs);
-        if (prefsEnableMethod != null) {
-          Object args[] = {
-              Boolean.TRUE};
-          prefsEnableMethod.invoke(osxAdapter, args);
-        }
-      }
-      catch (NoClassDefFoundError e) {
-        // This will be thrown first if the OSXAdapter is loaded on a system without the EAWT
-        // because OSXAdapter extends ApplicationAdapter in its def
-        System.err.println("This version of Mac OS X does not support the Apple EAWT.  Application Menu handling has been disabled (" +
-                           e + ")");
-      }
-      catch (ClassNotFoundException e) {
-        // This shouldn't be reached; if there's a problem with the OSXAdapter we should get the
-        // above NoClassDefFoundError first.
-        System.err.println("This version of Mac OS X does not support the Apple EAWT.  Application Menu handling has been disabled (" +
-                           e + ")");
-      }
-      catch (Exception e) {
-        System.err.println("Exception while loading the OSXAdapter:");
-        e.printStackTrace();
-      }
-    }
-  }
-
-
-  private void initLayout() {
-    tabbedPane.putClientProperty(Options.NO_CONTENT_BORDER_KEY, Boolean.TRUE);
-
-    setProgressBarVisible(false);
-
-      pushExternalButton = new PushToApplicationButton(this,
-              PushToApplicationButton.applications);
-    fillMenu();
-    createToolBar();
-    getContentPane().setLayout(gbl);
-      contentPane.setDividerSize(2);
-      contentPane.setBorder(null);
-    //getContentPane().setBackground(GUIGlobals.lightGray);
-    con.fill = GridBagConstraints.HORIZONTAL;
-    con.anchor = GridBagConstraints.WEST;
-    con.weightx = 1;
-    con.weighty = 0;
-    con.gridwidth = GridBagConstraints.REMAINDER;
-
-    //gbl.setConstraints(mb, con);
-    //getContentPane().add(mb);
-    setJMenuBar(mb);
-    con.anchor = GridBagConstraints.NORTH;
-    //con.gridwidth = 1;//GridBagConstraints.REMAINDER;;
-    gbl.setConstraints(tlb, con);
-    getContentPane().add(tlb);
-
-    Component lim = Box.createGlue();
-    gbl.setConstraints(lim, con);
-    //getContentPane().add(lim);
-    /*
-      JPanel empt = new JPanel();
-      empt.setBackground(GUIGlobals.lightGray);
-      gbl.setConstraints(empt, con);
-           getContentPane().add(empt);
-
-      con.insets = new Insets(1,0,1,1);
-      con.anchor = GridBagConstraints.EAST;
-      con.weightx = 0;
-      gbl.setConstraints(searchManager, con);
-      getContentPane().add(searchManager);*/
-    con.gridwidth = GridBagConstraints.REMAINDER;
-    con.weightx = 1;
-    con.weighty = 0;
-    con.fill = GridBagConstraints.BOTH;
-    con.anchor = GridBagConstraints.WEST;
-    con.insets = new Insets(0, 0, 0, 0);
-    lim = Box.createGlue();
-    gbl.setConstraints(lim, con);
-    getContentPane().add(lim);
-    //tabbedPane.setVisible(false);
-    //tabbedPane.setForeground(GUIGlobals.lightGray);
-    con.weighty = 1;
-    gbl.setConstraints(contentPane, con);
-    getContentPane().add(contentPane);
-    contentPane.setRightComponent(tabbedPane);
-    contentPane.setLeftComponent(sidePaneManager.getPanel());
-    sidePaneManager.updateView();
-
-    JPanel status = new JPanel();
-    status.setLayout(gbl);
-    con.weighty = 0;
-    con.weightx = 0;
-    con.gridwidth = 1;
-    con.insets = new Insets(0, 2, 0, 0);
-    gbl.setConstraints(statusLabel, con);
-    status.add(statusLabel);
-    con.weightx = 1;
-    con.insets = new Insets(0, 4, 0, 0);
-    con.gridwidth = 1;
-    gbl.setConstraints(statusLine, con);
-    status.add(statusLine);
-    con.weightx = 0;
-    con.gridwidth = GridBagConstraints.REMAINDER;
-    con.insets = new Insets(2, 4, 2, 2);
-    gbl.setConstraints(progressBar, con);
-    status.add(progressBar);
-    con.weightx = 1;
-    con.gridwidth = GridBagConstraints.REMAINDER;
-    statusLabel.setForeground(GUIGlobals.entryEditorLabelColor.darker());
-    con.insets = new Insets(0, 0, 0, 0);
-    gbl.setConstraints(status, con);
-    getContentPane().add(status);
-
-
-      // Drag and drop for tabbedPane:
-      TransferHandler xfer = new EntryTableTransferHandler(null, this, null);
-      tabbedPane.setTransferHandler(xfer);
-      tlb.setTransferHandler(xfer);
-      mb.setTransferHandler(xfer);
-      sidePaneManager.getPanel().setTransferHandler(xfer);
-  }
-
-  private void initLabelMaker() {
-    // initialize the labelMaker
-    labelMaker = new LabelMaker();
-    labelMaker.addRule(new ArticleLabelRule(),
-                       BibtexEntryType.ARTICLE);
-    labelMaker.addRule(new BookLabelRule(),
-                       BibtexEntryType.BOOK);
-    labelMaker.addRule(new IncollectionLabelRule(),
-                       BibtexEntryType.INCOLLECTION);
-    labelMaker.addRule(new InproceedingsLabelRule(),
-                       BibtexEntryType.INPROCEEDINGS);
-  }
-
-  /**
-   * Returns the indexed BasePanel.
-   * @param i Index of base
-   */
-  public BasePanel baseAt(int i) {
-    return (BasePanel) tabbedPane.getComponentAt(i);
-  }
-
-  public void showBaseAt(int i) {
-      tabbedPane.setSelectedIndex(i);
-  }
-
-    public void showBasePanel(BasePanel bp) {
-        tabbedPane.setSelectedComponent(bp);
-    }
-
-  /**
-   * Returns the currently viewed BasePanel.
-   */
-  public BasePanel basePanel() {
-    return (BasePanel) tabbedPane.getSelectedComponent();
-  }
-
-    /**
-     * @return the BasePanel count.
-     */
-    public int baseCount() {
-        return tabbedPane.getComponentCount();
-    }
-    
-  /**
-   * handle the color of active and inactive JTabbedPane tabs
-   */
-  private void markActiveBasePanel()
-  {
-    int now = tabbedPane.getSelectedIndex() ;
-    int len = tabbedPane.getTabCount() ;
-    if ((lastTabbedPanelSelectionIndex > -1) && (lastTabbedPanelSelectionIndex < len))
-      tabbedPane.setForegroundAt(lastTabbedPanelSelectionIndex, GUIGlobals.inActiveTabbed);
-    if ( (now > -1) &&  (now < len))
-      tabbedPane.setForegroundAt(now, GUIGlobals.activeTabbed);
-    lastTabbedPanelSelectionIndex = now ;
-  }
-
-  private int getTabIndex(JComponent comp) {
-    for (int i = 0; i < tabbedPane.getTabCount(); i++) {
-      if (tabbedPane.getComponentAt(i) == comp) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  public JTabbedPane getTabbedPane() { return tabbedPane; }
-
-  public String getTabTitle(JComponent comp) {
-    return tabbedPane.getTitleAt(getTabIndex(comp));
-  }
-
-    public String getTabTooltip(JComponent comp) {
-        return tabbedPane.getToolTipTextAt(getTabIndex(comp));
-    }
-
-  public void setTabTitle(JComponent comp, String title, String toolTip) {
-      int index = getTabIndex(comp);
-      tabbedPane.setTitleAt(index, title);
-      tabbedPane.setToolTipTextAt(index, toolTip);
-  }
-
-  class GeneralAction
-      extends MnemonicAwareAction {
-    private String command;
-    public GeneralAction(String command, String text,
-                         String description, URL icon) {
-      super(new ImageIcon(icon));
-      this.command = command;
-      putValue(NAME, text);
-      putValue(SHORT_DESCRIPTION, Globals.lang(description));
-    }
-
-    public GeneralAction(String command, String text,
-                         String description, String imageName,
-                         KeyStroke key) {
-      super(GUIGlobals.getImage(imageName));
-      this.command = command;
-      putValue(NAME, text);
-      putValue(ACCELERATOR_KEY, key);
-      putValue(SHORT_DESCRIPTION, Globals.lang(description));
-    }
-
-      public GeneralAction(String command, String text) {
-          putValue(NAME, text);
-          this.command = command;
-      }
-
-      public GeneralAction(String command, String text, KeyStroke key) {
-          this.command = command;
-          putValue(NAME, text);
-          putValue(ACCELERATOR_KEY, key);
-      }
-
-      public GeneralAction(String command, String text, String description) {
-          this.command = command;
-          ImageIcon icon = GUIGlobals.getImage(command);
-          if (icon != null)
-              putValue(SMALL_ICON, icon);
-          putValue(NAME, text);
-          putValue(SHORT_DESCRIPTION, Globals.lang(description));
-      }
-
-      public GeneralAction(String command, String text, String description, KeyStroke key) {
-          this.command = command;
-          ImageIcon icon = GUIGlobals.getImage(command);
-          if (icon != null)
-              putValue(SMALL_ICON, icon);
-          putValue(NAME, text);
-          putValue(SHORT_DESCRIPTION, Globals.lang(description));
-          putValue(ACCELERATOR_KEY, key);
-      }
-
-  /*    public GeneralAction(String command, String text, String description,
-                           URL imageUrl, KeyStroke key) {
-      this.command = command;
-        ImageIcon icon = GUIGlobals.getImage(command);
-        if (icon != null)
-            putValue(SMALL_ICON, icon);
-      putValue(NAME, text);
-      putValue(SHORT_DESCRIPTION, Globals.lang(description));
-        putValue(ACCELERATOR_KEY, key);
-    }*/
-
-    public void actionPerformed(ActionEvent e) {
-      if (tabbedPane.getTabCount() > 0) {
-        try {
-          ( (BasePanel) (tabbedPane.getSelectedComponent ()))
-              .runCommand(command);
-        }
-        catch (Throwable ex) {
-          ex.printStackTrace();
-        }
-      }
-      else {
-        Util.pr("Action '" + command + "' must be disabled when no "
-                + "database is open.");
-      }
-    }
-  }
-
-  /** This got removed when we introduced SearchManager2.
-       class IncrementalSearchAction extends AbstractAction {
-    public IncrementalSearchAction() {
-   super("Incremental search", new ImageIcon(GUIGlobals.searchIconFile));
-   putValue(SHORT_DESCRIPTION, Globals.lang("Start incremental search"));
-   putValue(ACCELERATOR_KEY, prefs.getKey("Incremental search"));
-    }
-    public void actionPerformed(ActionEvent e) {
-   if (tabbedPane.getTabCount() > 0)
-     searchManager.startIncrementalSearch();
-    }
-       }
-
-       class SearchAction extends AbstractAction {
-    public SearchAction() {
-   super("Search", new ImageIcon(GUIGlobals.searchIconFile));
-   putValue(SHORT_DESCRIPTION, Globals.lang("Start search"));
-   putValue(ACCELERATOR_KEY, prefs.getKey("Search"));
-    }
-    public void actionPerformed(ActionEvent e) {
-   if (tabbedPane.getTabCount() > 0)
-     searchManager.startSearch();
-    }
-       }
-   */
-
-  class NewEntryAction
-      extends MnemonicAwareAction {
-
-    String type = null; // The type of item to create.
-    KeyStroke keyStroke = null; // Used for the specific instances.
-
-    public NewEntryAction(KeyStroke key) {
-      // This action leads to a dialog asking for entry type.
-      super(GUIGlobals.getImage("add"));
-      putValue(NAME, "New entry");
-      putValue(ACCELERATOR_KEY, key);
-      putValue(SHORT_DESCRIPTION, Globals.lang("New BibTeX entry"));
-    }
-
-    public NewEntryAction(String type_) {
-      // This action leads to the creation of a specific entry.
-      putValue(NAME, Util.nCase(type_));
-      type = type_;
-    }
-
-    public NewEntryAction(String type_, KeyStroke key) {
-        // This action leads to the creation of a specific entry.
-        putValue(NAME, Util.nCase(type_));
-        putValue(ACCELERATOR_KEY, key);
-        type = type_;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-      String thisType = type;
-      if (thisType == null) {
-        EntryTypeDialog etd = new EntryTypeDialog(JabRefFrame.this);
-        Util.placeDialog(etd, JabRefFrame.this);
-        etd.setVisible(true);
-        BibtexEntryType tp = etd.getChoice();
-        if (tp == null) {
-          return;
-        }
-        thisType = tp.getName();
-      }
-
-      if (tabbedPane.getTabCount() > 0) {
-        ( (BasePanel) (tabbedPane.getSelectedComponent()))
-            .newEntry(BibtexEntryType.getType(thisType));
-      }
-      else {
-        Util.pr("Action 'New entry' must be disabled when no "
-                + "database is open.");
-      }
-    }
-  }
-
-  /*
-       private void setupDatabaseLayout() {
-    // This method is called whenever this frame has been provided
-    // with a database, and completes the layout.
-
-
-    if (file != null)
-   setTitle(GUIGlobals.baseTitle+file.getName());
-    else
-    setTitle(GUIGlobals.untitledTitle);
-
-    //DragNDropManager dndm = new DragNDropManager(this);
-
-    //setNonEmptyState();
-    Util.pr("JabRefFrame: Must set non-empty state.");
-    }*/
-
-  /**
-   * Refresh import menus.
-   */
-  public void setUpImportMenus() {
-    setUpImportMenu(importMenu, false);
-    setUpImportMenu(importNewMenu, true);
-  }
-
-  private void fillMenu() {
-      //mb.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH);
-      mb.setBorder(null);
-      JMenu file = subMenu("File"),
-              sessions = subMenu("Sessions"),
-              edit = subMenu("Edit"),
-              search = subMenu("Search"),
-              bibtex = subMenu("BibTeX"),
-              view = subMenu("View"),
-              tools = subMenu("Tools"),
-              //web = subMenu("Web search"),
-              options = subMenu("Options"),
-              newSpec = subMenu("New entry..."),
-              helpMenu = subMenu("Help");
-
-      setUpImportMenus();
-
-      newDatabaseMenu.add(newDatabaseAction);
-      newDatabaseMenu.add(newSubDatabaseAction);
-
-      file.add(newDatabaseAction);
-      file.add(open); //opendatabaseaction
-      file.add(mergeDatabaseAction);
-      file.add(save);
-      file.add(saveAs);
-      file.add(saveAll);
-      file.add(saveSelectedAs);
-      file.addSeparator();
-      //file.add(importMenu);
-      //file.add(importNewMenu);
-      file.add(importNew);
-      file.add(importCurrent);
-      file.add(exportAll);
-      file.add(exportSelected);
-      file.add(dbConnect);
-      file.add(dbImport);
-      file.add(dbExport);
-
-      file.addSeparator();
-      file.add(databaseProperties);
-      file.addSeparator();
-
-      sessions.add(loadSessionAction);
-      sessions.add(saveSessionAction);
-      file.add(sessions);
-      file.add(fileHistory);
-      //file.addSeparator();
-
-      file.addSeparator();
-      file.add(close);
-      file.add(new MinimizeToSysTrayAction());
-      file.add(quit);
-      mb.add(file);
-      //edit.add(test);
-      edit.add(undo);
-      edit.add(redo);
-      edit.addSeparator();
-
-      edit.add(cut);
-      edit.add(copy);
-      edit.add(paste);
-      //edit.add(remove);
-      edit.add(delete);
-      edit.add(copyKey);
-      edit.add(copyCiteKey);
-      edit.add(copyKeyAndTitle);
-      //edit.add(exportToClipboard);
-      edit.addSeparator();
-      edit.add(mark);
-      JMenu markSpecific = subMenu("Mark specific color");
-      for (int i=0; i<Util.MAX_MARKING_LEVEL; i++)
-          markSpecific.add(new MarkEntriesAction(this, i).getMenuItem());
-      edit.add(markSpecific);
-      edit.add(unmark);
-      edit.add(unmarkAll); 
-      edit.addSeparator();
-      if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED)) {
-    	  JMenu m;
-    	  if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING)) {
-	    	  m = new JMenu();
-	    	  RightClickMenu.populateSpecialFieldMenu(m, Rank.getInstance(), this);
-	    	  edit.add(m);
-    	  }
-    	  if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE)) {
-    		  edit.add(toggleRelevance);
-    	  }
-    	  if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY)) {
-    		  edit.add(toggleQualityAssured);
-    	  }
-    	  if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY)) {
-    		  m = new JMenu();
-    		  RightClickMenu.populateSpecialFieldMenu(m, Priority.getInstance(), this);
-    		  edit.add(m);
-    	  }
-      }
-      edit.addSeparator();
-      edit.add(manageKeywords);
-      edit.add(selectAll);
-      mb.add(edit);
-
-      search.add(normalSearch);
-      search.add(incrementalSearch);
-      search.add(replaceAll);
-      search.add(massSetField);
-      search.addSeparator();
-      search.add(dupliCheck);
-      search.add(resolveDuplicateKeys);
-      //search.add(strictDupliCheck);
-      search.add(autoSetFile);
-      search.addSeparator();
-      GeneralFetcher generalFetcher = new GeneralFetcher(sidePaneManager, this, fetchers);
-      search.add(generalFetcher.getAction());
-      if (prefs.getBoolean("webSearchVisible")) {
-          sidePaneManager.register(generalFetcher.getTitle(), generalFetcher);
-          sidePaneManager.show(generalFetcher.getTitle());
-      }
-      mb.add(search);
-
-      view.add(back);
-      view.add(forward);
-      view.add(focusTable);
-      view.add(nextTab);
-      view.add(prevTab);
-      view.add(sortTabs);
-      view.addSeparator();
-      view.add(increaseFontSize);
-      view.add(decreseFontSize);
-      view.addSeparator();
-      view.add(toggleGroups);
-      view.add(togglePreview);
-      view.add(switchPreview);
-      view.addSeparator();
-      view.add(toggleHighlightAny);
-      view.add(toggleHighlightAll);
-      mb.add(view);
-
-      bibtex.add(newEntryAction);
-      for (int i = 0; i < newSpecificEntryAction.length; i++) {
-          newSpec.add(newSpecificEntryAction[i]);
-      }
-      bibtex.add(newSpec);
-      bibtex.add(plainTextImport);
-      bibtex.addSeparator();
-      bibtex.add(editEntry);
-      bibtex.add(editPreamble);
-      bibtex.add(editStrings);
-      mb.add(bibtex);
-      
-      tools.add(makeKeyAction);
-      tools.add(Cleanup);
-      //tools.add(downloadFullText);
-      tools.add(newSubDatabaseAction);
-      tools.add(writeXmpAction);
-      OpenOfficePanel otp = OpenOfficePanel.getInstance();
-      otp.init(this, sidePaneManager);
-      tools.add(otp.getMenuItem());
-      tools.add(pushExternalButton.getMenuAction());
-      tools.addSeparator();
-      tools.add(manageSelectors);
-      tools.addSeparator();
-      tools.add(openFile);
-      tools.add(openPdf);
-      tools.add(openUrl);
-      //tools.add(openSpires);
-      tools.add(findUnlinkedFiles);
-      tools.addSeparator();
-      tools.add(abbreviateIso);
-      tools.add(abbreviateMedline);
-      tools.add(unabbreviate);
-      tools.addSeparator();
-      checkAndFix.add(autoSetPdf);
-      checkAndFix.add(autoSetPs);
-      checkAndFix.add(integrityCheckAction);
-      tools.add(checkAndFix);
-
-      mb.add(tools);
-
-
-      options.add(showPrefs);
-      AbstractAction customizeAction = new CustomizeEntryTypeAction();
-      AbstractAction genFieldsCustomization = new GenFieldsCustomizationAction();
-      options.add(customizeAction);
-      options.add(genFieldsCustomization);
-      options.add(customExpAction);
-      options.add(customImpAction);
-      options.add(customFileTypesAction);
-      options.add(manageJournals);
-
-      /*options.add(new AbstractAction("Font") {
-      public void actionPerformed(ActionEvent e) {
-          Font f=new FontSelectorDialog
-        (JabRefFrame.this, GUIGlobals.CURRENTFONT).getSelectedFont();
-       if(f==null)
-        return;
-       else
-        GUIGlobals.CURRENTFONT=f;
-       // updatefont
-       prefs.put("fontFamily", GUIGlobals.CURRENTFONT.getFamily());
-       prefs.putInt("fontStyle", GUIGlobals.CURRENTFONT.getStyle());
-       prefs.putInt("fontSize", GUIGlobals.CURRENTFONT.getSize());
-       if (tabbedPane.getTabCount() > 0) {
-        for (int i=0; i<tabbedPane.getTabCount(); i++) {
-         baseAt(i).entryTable.updateFont();
-         baseAt(i).refreshTable();
-        }
-       }
-      }
-      });*/
-
-      pluginMenu.add(installPlugin);
-
-      //pluginMenu.setEnabled(false);
-      mb.add(pluginMenu);
-
-
-      //options.add(selectKeys);
-      mb.add(options);
-
-      helpMenu.add(help);
-      helpMenu.add(contents);
-      helpMenu.addSeparator();
-      helpMenu.add(errorConsole);
-      helpMenu.addSeparator();
-      helpMenu.add(about);
-      mb.add(helpMenu);
-  }
-
-    public static JMenu subMenu(String name) {
-        name = Globals.menuTitle(name);
-        int i = name.indexOf('&');
-        JMenu res;
-        if (i >= 0) {
-            res = new JMenu(name.substring(0, i)+name.substring(i+1));
-            char mnemonic = Character.toUpperCase(name.charAt(i+1));
-            res.setMnemonic((int)mnemonic);
-        }
-        else res = new JMenu(name);
-
-        return res;
-    }
-
-
-    public void addPluginMenuItem(JMenuItem item) {
-        if (!addedToPluginMenu) {
-            pluginMenu.addSeparator();
-            addedToPluginMenu = true;
-        }
-        pluginMenu.add(item);
-    }
-
-  private void createToolBar() {
-    tlb.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH);
-    tlb.setBorder(null);
-    tlb.setRollover(true);
-
-    //tlb.setBorderPainted(true);
-    //tlb.setBackground(GUIGlobals.lightGray);
-    //tlb.setForeground(GUIGlobals.lightGray);
-    tlb.setFloatable(false);
-    tlb.addAction(newDatabaseAction);
-    tlb.addAction(open);
-    tlb.addAction(save);
-    tlb.addAction(saveAll);
-    //tlb.addAction(dbConnect);
-    //tlb.addAction(dbExport);
-    
-    tlb.addSeparator();
-    tlb.addAction(cut);
-    tlb.addAction(copy);
-    tlb.addAction(paste);
-    tlb.addAction(undo);
-    tlb.addAction(redo);
-
-    tlb.addSeparator();
-    tlb.addAction(back);
-    tlb.addAction(forward);
-    tlb.addSeparator();
-    tlb.addAction(newEntryAction);
-    tlb.addAction(editEntry);
-    tlb.addAction(editPreamble);
-    tlb.addAction(editStrings);
-    tlb.addAction(makeKeyAction);
-    tlb.addAction(Cleanup);
-
-    tlb.addSeparator();
-    tlb.addAction(mark);
-    tlb.addAction(unmark);
-    tlb.addSeparator();
-    if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED)) {
-    	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING)) {
-    		tlb.add(net.sf.jabref.specialfields.SpecialFieldDropDown.generateSpecialFieldButtonWithDropDown(Rank.getInstance(), this));
-    	}
-    	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE)) {
-    		tlb.addAction(toggleRelevance);
-    	}
-    	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY)) {
-    		tlb.addAction(toggleQualityAssured);
-    	}
-    	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY)) {
-    		tlb.add(net.sf.jabref.specialfields.SpecialFieldDropDown.generateSpecialFieldButtonWithDropDown(Priority.getInstance(), this));
-    	}
-    }
-
-    tlb.addSeparator();
-    searchToggle = new JToggleButton(toggleSearch);
-    searchToggle.setText(null);
-    if (!Globals.ON_MAC)
-        searchToggle.setMargin(marg);
-    tlb.add(searchToggle);
-
-    previewToggle = new JToggleButton(togglePreview);
-    previewToggle.setText(null);
-    if (!Globals.ON_MAC)
-        previewToggle.setMargin(marg);
-    tlb.add(previewToggle);
-    tlb.addSeparator();
-
-    groupToggle = new JToggleButton(toggleGroups);
-    groupToggle.setText(null);
-    if (!Globals.ON_MAC)
-        groupToggle.setMargin(marg);
-    tlb.add(groupToggle);
-
-
-    highlightAny = new JToggleButton(toggleHighlightAny);
-    highlightAny.setText(null);
-    if (!Globals.ON_MAC)
-        highlightAny.setMargin(marg);
-    tlb.add(highlightAny);
-    highlightAll = new JToggleButton(toggleHighlightAll);
-    highlightAll.setText(null);
-    if (!Globals.ON_MAC)
-        highlightAll.setMargin(marg);
-    tlb.add(highlightAll);
-
-    tlb.addSeparator();
-
-      // Removing the separate push-to buttons, replacing them by the
-      // multipurpose button:
-      //tlb.addAction(emacsPushAction);
-      //tlb.addAction(lyxPushAction);
-      //tlb.addAction(winEdtPushAction);
-      tlb.add(pushExternalButton.getComponent());
-
-      tlb.addAction(openFile);
-    //tlb.addAction(openPdf);
-    //tlb.addAction(openUrl);
-
-    //tlb.addSeparator();
-    //tlb.addAction(showPrefs);
-    tlb.add(Box.createHorizontalGlue());
-    //tlb.add(new JabRefLabel(GUIGlobals.frameTitle+" "+GUIGlobals.version));
-
-    tlb.addAction(closeDatabaseAction);
-    //Insets margin = new Insets(0, 0, 0, 0);
-    //for (int i=0; i<tlb.getComponentCount(); i++)
-    //  ((JButton)tlb.getComponentAtIndex(i)).setMargin(margin);
-
-  }
-
-  
-
- public void output(final String s) {
-      SwingUtilities.invokeLater(new Runnable() {
-          public void run() {
-              statusLine.setText(s);
-              statusLine.repaint();
-          }
-      });
-  }
-
-  public void stopShowingSearchResults() {
-    for (int i = 0; i < tabbedPane.getTabCount(); i++) {
-      baseAt(i).stopShowingSearchResults();
-    }
-  }
-
-  protected List<Object> openDatabaseOnlyActions = new LinkedList<Object>();
-  protected List<Object> severalDatabasesOnlyActions = new LinkedList<Object>();
-  
-    protected void initActions() {
-        openDatabaseOnlyActions = new LinkedList<Object>();
-        openDatabaseOnlyActions.addAll(Arrays.asList(new Object[] { manageSelectors,
-            mergeDatabaseAction, newSubDatabaseAction, close, save, saveAs, saveSelectedAs, undo,
-            redo, cut, delete, copy, paste, mark, unmark, unmarkAll, editEntry,
-            selectAll, copyKey, copyCiteKey, copyKeyAndTitle, editPreamble, editStrings, toggleGroups, toggleSearch,
-            makeKeyAction, normalSearch,
-            incrementalSearch, replaceAll, importMenu, exportMenu,
-			/* openSpires wasn't being supported so no point in supporting
-			 * openInspire */
-                openPdf, openUrl, openFile, openSpires, /*openInspire,*/ togglePreview, dupliCheck, /*strictDupliCheck,*/ highlightAll,
-            highlightAny, newEntryAction, plainTextImport, massSetField, manageKeywords,
-            closeDatabaseAction, switchPreview, integrityCheckAction, autoSetPdf, autoSetPs,
-            toggleHighlightAny, toggleHighlightAll, databaseProperties, abbreviateIso,
-            abbreviateMedline, unabbreviate, exportAll, exportSelected,
-            importCurrent, saveAll, dbConnect, dbExport, focusTable}));
-        
-        openDatabaseOnlyActions.addAll(fetcherActions);
-
-        openDatabaseOnlyActions.addAll(Arrays.asList(newSpecificEntryAction));
-
-        severalDatabasesOnlyActions = new LinkedList<Object>();
-        severalDatabasesOnlyActions.addAll(Arrays
-            .asList(new Action[] { nextTab, prevTab, sortTabs }));
-
-        tabbedPane.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent event) {
-                updateEnabledState();
-            }
-        });
-        
-        
-
-    }
-
-    /**
-     * Takes a list of Object and calls the method setEnabled on them, depending on whether it is an Action or a Component.
-     * @param list List that should contain Actions and Components.
-     * @param enabled 
-     */
-    public static void setEnabled(List<Object> list, boolean enabled) {
-        for (Object o : list){
-            if (o instanceof Action)
-                ((Action)o).setEnabled(enabled);
-            if (o instanceof Component)
-                ((Component)o).setEnabled(enabled);
-        }
-    }
-
-    protected int previousTabCount = -1;
-    
-    /**
-     * Enable or Disable all actions based on the number of open tabs.
-     * 
-     * The action that are affected are set in initActions.
-     */
-    protected void updateEnabledState() {
-        int tabCount = tabbedPane.getTabCount();
-        if (tabCount != previousTabCount){
-            previousTabCount = tabCount;
-            setEnabled(openDatabaseOnlyActions, tabCount > 0);
-            setEnabled(severalDatabasesOnlyActions, tabCount > 1);
-        }
-        if (tabCount == 0) {
-            back.setEnabled(false);
-            forward.setEnabled(false);
-        }
-    }
-
-  /**
-   * This method causes all open BasePanels to set up their tables
-   * anew. When called from PrefsDialog3, this updates to the new
-   * settings.
-   */
-  public void setupAllTables() {
-    // This action can be invoked without an open database, so
-    // we have to check if we have one before trying to invoke
-    // methods to execute changes in the preferences.
-
-    // We want to notify all tabs about the changes to
-    // avoid problems when changing the column set.
-    for (int i = 0; i < tabbedPane.getTabCount(); i++) {
-      BasePanel bf = baseAt(i);
-
-      // Update tables:
-      if (bf.database != null) {
-        bf.setupMainPanel();
-
-      }
-
-    }
-  }
-
-
-    public BasePanel addTab(BibtexDatabase db, File file, MetaData meta, String encoding, boolean raisePanel) {
-        BasePanel bp = new BasePanel(JabRefFrame.this, db, file, meta, encoding);
-        addTab(bp, file, raisePanel);
-        return bp;
-    }
-
-
-    public void addTab(BasePanel bp, File file, boolean raisePanel) {
-        tabbedPane.add((file != null ? file.getName(): Globals.lang(GUIGlobals.untitledTitle)),
-                       bp);
-        tabbedPane.setToolTipTextAt(tabbedPane.getTabCount()-1,
-                file != null ? file.getAbsolutePath() : null);
-        if (raisePanel) {
-            tabbedPane.setSelectedComponent(bp);
-        }
-    }
-
-    /**
-     * Signal closing of the current tab. Standard warnings will be given if the
-     * database has been changed.
-     */
-    public void closeCurrentTab() {
-        closeDatabaseAction.actionPerformed(null);
-    }
-
-    /**
-     * Close the current tab without giving any warning if the database has been changed.
-     */
-    public void closeCurrentTabNoWarning() {
-        closeDatabaseAction.close();
-    }
-
-  class SelectKeysAction
-      extends AbstractAction {
-    public SelectKeysAction() {
-      super(Globals.lang("Customize key bindings"));
-    }
-
-    public void actionPerformed(ActionEvent e) {
-      KeyBindingsDialog d = new KeyBindingsDialog
-          ( new HashMap<String, String>(prefs.getKeyBindings()),
-           prefs.getDefaultKeys());
-      d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-      d.pack(); //setSize(300,500);
-      Util.placeDialog(d, JabRefFrame.this);
-      d.setVisible(true);
-      if (d.getAction()) {
-        prefs.setNewKeyBindings(d.getNewKeyBindings());
-        JOptionPane.showMessageDialog
-            (JabRefFrame.this,
-             Globals.lang("Your new key bindings have been stored.") + "\n"
-             + Globals.lang("You must restart JabRef for the new key "
-                            + "bindings to work properly."),
-             Globals.lang("Key bindings changed"),
-             JOptionPane.INFORMATION_MESSAGE);
-      }
-    }
-  }
-
-  /**
-   * The action concerned with closing the window.
-   */
-  class CloseAction
-      extends MnemonicAwareAction {
-    public CloseAction() {
-      putValue(NAME, "Quit");
-      putValue(SHORT_DESCRIPTION, Globals.lang("Quit JabRef"));
-      putValue(ACCELERATOR_KEY, prefs.getKey("Quit JabRef"));
-      //putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_Q,
-      //    Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
-
-    }
-
-    public void actionPerformed(ActionEvent e) {
-      quit();
-    }
-  }
-
-  // The action for closing the current database and leaving the window open.
-    CloseDatabaseAction closeDatabaseAction = new CloseDatabaseAction();
-
-    class CloseDatabaseAction extends MnemonicAwareAction {
-        public CloseDatabaseAction() {
-            super(GUIGlobals.getImage("close"));
-            putValue(NAME, "Close database");
-            putValue(SHORT_DESCRIPTION, Globals.lang("Close the current database"));
-            putValue(ACCELERATOR_KEY, prefs.getKey("Close database"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            // Ask here if the user really wants to close, if the base
-            // has not been saved since last save.
-            boolean close = true;
-            if (basePanel() == null) { // when it is initially empty
-                return; // nbatada nov 7
-            }
-
-            if (basePanel().baseChanged) {
-                int answer = JOptionPane.showConfirmDialog(JabRefFrame.this, Globals
-                    .lang("Database has changed. Do you want to save " + "before closing?"),
-                    Globals.lang("Save before closing"), JOptionPane.YES_NO_CANCEL_OPTION);
-                if ((answer == JOptionPane.CANCEL_OPTION) || (answer == JOptionPane.CLOSED_OPTION)) {
-                    close = false; // The user has cancelled.
-                }
-                if (answer == JOptionPane.YES_OPTION) {
-                    // The user wants to save.
-                    try {
-                        SaveDatabaseAction saveAction = new SaveDatabaseAction(basePanel());
-                        saveAction.runCommand();
-                        if (saveAction.isCancelled() || !saveAction.isSuccess())
-                            // The action either not cancelled or unsuccessful.
-                            // Break! 
-                            close = false;
-                        
-                    } catch (Throwable ex) {
-                        // Something prevented the file
-                        // from being saved. Break!!!
-                        close = false;
-                    }
-
-                }
-            }
-
-            if (close) {
-                close();
-            }
-        }
-
-        public void close() {
-            BasePanel pan = basePanel();
-            pan.cleanUp();
-            AutoSaveManager.deleteAutoSaveFile(pan); // Delete autosave
-            tabbedPane.remove(pan);
-            if (tabbedPane.getTabCount() > 0) {
-                markActiveBasePanel();
-            }
-            setWindowTitle();
-            updateEnabledState(); // Man, this is what I call a bug that this is not called.
-            output(Globals.lang("Closed database") + ".");
-            System.gc(); // Test
-        }
-    }
-
-
-  // The action concerned with opening a new database.
-  class NewDatabaseAction
-      extends MnemonicAwareAction {
-    public NewDatabaseAction() {
-        super(GUIGlobals.getImage("new"));
-        putValue(NAME, "New database");
-        putValue(SHORT_DESCRIPTION, Globals.lang("New BibTeX database"));
-        //putValue(MNEMONIC_KEY, GUIGlobals.newKeyCode);
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        // Create a new, empty, database.
-        BibtexDatabase database = new BibtexDatabase();
-        addTab(database, null, new MetaData(), Globals.prefs.get("defaultEncoding"), true);
-        output(Globals.lang("New database created."));
-    }
-  }
-
-    // The action concerned with generate a new (sub-)database from latex aux file.
-    class NewSubDatabaseAction extends MnemonicAwareAction
-    {
-      public NewSubDatabaseAction()
-      {
-        super(GUIGlobals.getImage("new"));
-        putValue(NAME, "New subdatabase based on AUX file" );
-        putValue( SHORT_DESCRIPTION, Globals.lang( "New BibTeX subdatabase" ) ) ;
-            //putValue(MNEMONIC_KEY, GUIGlobals.newKeyCode);
-      }
-
-      public void actionPerformed( ActionEvent e )
-      {
-        // Create a new, empty, database.
-
-        FromAuxDialog dialog = new FromAuxDialog(JabRefFrame.this, "", true, JabRefFrame.this.tabbedPane) ;
-
-        Util.placeDialog(dialog, JabRefFrame.this);
-        dialog.setVisible(true) ;
-
-        if (dialog.okPressed())
-        {
-          BasePanel bp = new BasePanel( JabRefFrame.this,
-                                        dialog.getGenerateDB(),   // database
-                                        null,                     // file
-                                        new MetaData(), Globals.prefs.get("defaultEncoding"));                     // meta data
-          tabbedPane.add( Globals.lang( GUIGlobals.untitledTitle ), bp ) ;
-          tabbedPane.setSelectedComponent( bp ) ;
-          output( Globals.lang( "New database created." ) ) ;
-        }
-      }
-    }
-
-
-    // The action should test the database and report errors/warnings
-    class IntegrityCheckAction extends AbstractAction
-    {
-      public IntegrityCheckAction()
-      {
-        super(Globals.menuTitle("Integrity check"),
-               GUIGlobals.getImage("integrityCheck")) ;
-               //putValue( SHORT_DESCRIPTION, "integrity" ) ;  //Globals.lang( "integrity" ) ) ;
-            //putValue(MNEMONIC_KEY, GUIGlobals.newKeyCode);
-      }
-
-      public void actionPerformed( ActionEvent e )
-      {
-       Object selComp = tabbedPane.getSelectedComponent() ;
-       if (selComp != null)
-       {
-         BasePanel bp = ( BasePanel ) selComp ;
-         BibtexDatabase refBase = bp.getDatabase() ;
-         if (refBase != null)
-         {
-             IntegrityWizard wizard = new IntegrityWizard(JabRefFrame.this, basePanel()) ;
-             Util.placeDialog(wizard, JabRefFrame.this);
-             wizard.setVisible(true) ;
-
-         }
-       }
-      }
-    }
-
-  // The action for opening the preferences dialog.
-  AbstractAction showPrefs = new ShowPrefsAction();
-
-  class ShowPrefsAction
-      extends MnemonicAwareAction {
-    public ShowPrefsAction() {
-      super(GUIGlobals.getImage("preferences"));
-      putValue(NAME, "Preferences");
-      putValue(SHORT_DESCRIPTION, Globals.lang("Preferences"));
-    }
-
-    public void actionPerformed(ActionEvent e) {
-      preferences();
-    }
-  }
-
-  /**
-     * This method does the job of adding imported entries into the active
-     * database, or into a new one. It shows the ImportInspectionDialog if
-     * preferences indicate it should be used. Otherwise it imports directly.
-     * 
-     * @param panel
-     *            The BasePanel to add to.
-     * @param entries
-     *            The entries to add.
-     * @param filename
-     *            Name of the file where the import came from.
-     * @param openInNew
-     *            Should the entries be imported into a new database?
-     */
-    public void addImportedEntries(final BasePanel panel, final List<BibtexEntry> entries,
-        String filename, final boolean openInNew) {
-        /*
-         * Use the import inspection dialog if it is enabled in preferences, and
-         * (there are more than one entry or the inspection dialog is also
-         * enabled for single entries):
-         */
-        if (Globals.prefs.getBoolean("useImportInspectionDialog") &&
-            (Globals.prefs.getBoolean("useImportInspectionDialogForSingle") || (entries.size() > 1))) {
-
-            SwingUtilities.invokeLater(new Runnable() {
-
-                public void run() {
-                    ImportInspectionDialog diag = new ImportInspectionDialog(JabRefFrame.this,
-                        panel, BibtexFields.DEFAULT_INSPECTION_FIELDS, Globals.lang("Import"),
-                        openInNew);
-                    diag.addEntries(entries);
-                    diag.entryListComplete();
-                    Util.placeDialog(diag, JabRefFrame.this);
-                    diag.setVisible(true);
-                    diag.toFront();
-                }
-            });
-
-        } else {
-            JabRefFrame.this.addBibEntries(entries, filename, openInNew);
-            if ((panel != null) && (entries.size() == 1)) {
-                SwingUtilities.invokeLater(new Runnable() {
-                    public void run() {
-                        panel.highlightEntry(entries.get(0));
-                    }
-                });
-            }
-        }
-    }
-
-    /**
-     * Adds the entries to the database, possibly checking for duplicates first.
-     * @param filename If non-null, a message is printed to the status line describing
-     * how many entries were imported, and from which file. If null, the message will not
-     * be printed.
-     * @param intoNew Determines if the entries will be put in a new database or in the current
-     * one.
-     */
-  public int addBibEntries(List<BibtexEntry> bibentries, String filename,
-                           boolean intoNew) {
-          if (bibentries == null || bibentries.size() == 0) {
-
-      // No entries found. We need a message for this.
-      JOptionPane.showMessageDialog(JabRefFrame.this, Globals.lang("No entries found. Please make sure you are "
-                                                      +"using the correct import filter."), Globals.lang("Import failed"),
-                                    JOptionPane.ERROR_MESSAGE);
-      return 0;
-    }
-
-      int addedEntries = 0;
-
-    // Set owner and timestamp fields:
-    Util.setAutomaticFields(bibentries, Globals.prefs.getBoolean("overwriteOwner"),
-            Globals.prefs.getBoolean("overwriteTimeStamp"), Globals.prefs.getBoolean("markImportedEntries"));
-
-    if (intoNew || (tabbedPane.getTabCount() == 0)) {
-      // Import into new database.
-      BibtexDatabase database = new BibtexDatabase();
-      for (BibtexEntry entry : bibentries){
-        try {
-          entry.setId(Util.createNeutralId());
-          database.insertEntry(entry);
-        }
-        catch (KeyCollisionException ex) {
-          //ignore
-          System.err.println("KeyCollisionException [ addBibEntries(...) ]");
-        }
-      }
-      // Metadata are only put in bibtex files, so we will not find it
-      // in imported files. We therefore pass in an empty MetaData:
-      BasePanel bp = new BasePanel(JabRefFrame.this, database, null, new MetaData(), Globals.prefs.get("defaultEncoding"));
-      /*
-            if (prefs.getBoolean("autoComplete")) {
-            db.setCompleters(autoCompleters);
-            }
-       */
-      addedEntries = database.getEntryCount();
-      tabbedPane.add(GUIGlobals.untitledTitle, bp);
-      bp.markBaseChanged();
-      tabbedPane.setSelectedComponent(bp);
-      if (filename != null)
-          output(Globals.lang("Imported database") + " '" + filename + "' " +
-                 Globals.lang("with") + " " +
-                 database.getEntryCount() + " " +
-                 Globals.lang("entries into new database") + ".");
-    }
-    else {
-      // Import into current database.
-      boolean checkForDuplicates = true;
-      BasePanel basePanel = basePanel();
-      BibtexDatabase database = basePanel.database;
-      int oldCount = database.getEntryCount();
-      NamedCompound ce = new NamedCompound(Globals.lang("Import entries"));
-
-      mainLoop: 
-      for (BibtexEntry entry : bibentries){
-        boolean dupli = false;
-        // Check for duplicates among the current entries:
-        if (checkForDuplicates) {
-            loop: for (Iterator<String> i2=database.getKeySet().iterator();
-                       i2.hasNext();) {
-                BibtexEntry existingEntry = database.getEntryById(i2.next());
-                if (DuplicateCheck.isDuplicate(entry, existingEntry
-                )) {
-                    DuplicateResolverDialog drd = new DuplicateResolverDialog
-                        (JabRefFrame.this, existingEntry, entry, DuplicateResolverDialog.IMPORT_CHECK);
-                    drd.setVisible(true);
-                    int res = drd.getSelected();
-                    if (res == DuplicateResolverDialog.KEEP_LOWER)   {
-                        dupli = true;
-                    }
-                    else if (res == DuplicateResolverDialog.KEEP_UPPER) {
-                        database.removeEntry(existingEntry.getId());
-                        ce.addEdit(new UndoableRemoveEntry
-                                   (database, existingEntry, basePanel));
-                    } else if (res == DuplicateResolverDialog.BREAK) {
-                        break mainLoop;
-                    }
-                    break loop;
-                }
-            }
-        }
-
-        if (!dupli) {
-            try {
-                entry.setId(Util.createNeutralId());
-                database.insertEntry(entry);
-                ce.addEdit(new UndoableInsertEntry
-                           (database, entry, basePanel));
-                addedEntries++;
-            }
-            catch (KeyCollisionException ex) {
-                //ignore
-                System.err.println("KeyCollisionException [ addBibEntries(...) ]");
-            }
-        }
-      }
-        if (addedEntries > 0) {
-            ce.end();
-            basePanel.undoManager.addEdit(ce);
-            basePanel.markBaseChanged();
-            if (filename != null)
-                output(Globals.lang("Imported database") + " '" + filename + "' " +
-                     Globals.lang("with") + " " +
-                     (database.getEntryCount() - oldCount) + " " +
-                     Globals.lang("entries into new database") + ".");
-        }
-
-    }
-
-    return addedEntries;
-  }
-
-  private void setUpImportMenu(JMenu importMenu, boolean intoNew_) {
-      final boolean intoNew = intoNew_;
-      importMenu.removeAll();
-
-      // Add a menu item for autodetecting import format:
-      importMenu.add(new ImportMenuItem(JabRefFrame.this, intoNew));
-
-      // Add custom importers
-      importMenu.addSeparator();
-
-      SortedSet<ImportFormat> customImporters = Globals.importFormatReader.getCustomImportFormats();
-      JMenu submenu = new JMenu(Globals.lang("Custom importers"));
-      submenu.setMnemonic(KeyEvent.VK_S);
-      
-      // Put in all formatters registered in ImportFormatReader:
-        for (ImportFormat imFo : customImporters){
-            submenu.add(new ImportMenuItem(JabRefFrame.this, intoNew, imFo));
-        }
-      
-      if (customImporters.size() > 0)
-          submenu.addSeparator();
-      
-      submenu.add(customImpAction);
-
-      importMenu.add(submenu);
-      importMenu.addSeparator();
-
-      // Put in all formatters registered in ImportFormatReader:
-      for (ImportFormat imFo : Globals.importFormatReader.getBuiltInInputFormats()){
-          importMenu.add(new ImportMenuItem(JabRefFrame.this, intoNew, imFo));
-      }
-  }
-
-
-    public FileHistory getFileHistory() {
-        return fileHistory;
-    }
-
-
-    /**
-     * Set the preview active state for all BasePanel instances.
-     * @param enabled
-     */
-    public void setPreviewActive(boolean enabled) {
-        for (int i=0; i<tabbedPane.getTabCount(); i++) {
-            baseAt(i).setPreviewActive(enabled);
-        }
-    }
-
-
-   public void removeCachedEntryEditors() {
-       for (int j=0; j<tabbedPane.getTabCount(); j++) {
-            BasePanel bp = (BasePanel)tabbedPane.getComponentAt(j);
-            bp.entryEditors.clear();
-       }
-   }
-
-    /**
-     * This method shows a wait cursor and blocks all input to the JFrame's contents.
-     */
-    public void block() {
-        getGlassPane().setVisible(true);
-    }
-
-    /**
-     * This method reverts the cursor to normal, and stops blocking input to the JFrame's contents.
-     * There are no adverse effects of calling this method redundantly.
-     */
-    public void unblock() {
-        getGlassPane().setVisible(false);
-    }
-
-    /** Set the visibility of the progress bar in the right end of the
-      * status line at the bottom of the frame.
-      *
-      * If not called on the event dispatch thread, this method uses
-      * SwingUtilities.invokeLater() to do the actual operation on the EDT.
-      */
-    public void setProgressBarVisible(final boolean visible) {
-    if (SwingUtilities.isEventDispatchThread())
-        progressBar.setVisible(visible);
-    else SwingUtilities.invokeLater(new Runnable() {
-        public void run() {
-            progressBar.setVisible(visible);
-        }
-        });
-    }
-
-
-    /**
-     * Sets the current value of the progress bar.
-      *
-      * If not called on the event dispatch thread, this method uses
-      * SwingUtilities.invokeLater() to do the actual operation on the EDT.
-     */
-    public void setProgressBarValue(final int value) {
-    if (SwingUtilities.isEventDispatchThread())
-        progressBar.setValue(value);
-    else SwingUtilities.invokeLater(new Runnable() {
-        public void run() {
-            progressBar.setValue(value);
-        }
-        });
-
-    }
-
-
-    /**
-     * Sets the indeterminate status of the progress bar.
-     *
-     * If not called on the event dispatch thread, this method uses
-     * SwingUtilities.invokeLater() to do the actual operation on the EDT.
-     */
-    public void setProgressBarIndeterminate(final boolean value) {
-        if (SwingUtilities.isEventDispatchThread())
-            progressBar.setIndeterminate(value);
-        else SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                progressBar.setIndeterminate(value);
-            }
-        });
-
-    }
-
-    /**
-     * Sets the maximum value of the progress bar. Always call this method
-     * before using the progress bar, to set a maximum value appropriate to
-     * the task at hand.
-      *
-      * If not called on the event dispatch thread, this method uses
-      * SwingUtilities.invokeLater() to do the actual operation on the EDT.
-     */
-    public void setProgressBarMaximum(final int value) {
-    if (SwingUtilities.isEventDispatchThread())
-        progressBar.setMaximum(value);
-    else SwingUtilities.invokeLater(new Runnable() {
-        public void run() {
-            progressBar.setMaximum(value);
-        }
-        });
-
-
-    }
-
-class SaveSessionAction
-      extends MnemonicAwareAction {
-    public SaveSessionAction() {
-      super(GUIGlobals.getImage("save"));
-      putValue(NAME, "Save session");
-      putValue(ACCELERATOR_KEY, prefs.getKey("Save session"));
-    }
-
-    public void actionPerformed(ActionEvent e) {
-      // Here we store the names of allcurrent filea. If
-      // there is no current file, we remove any
-      // previously stored file name.
-      Vector<String> filenames = new Vector<String>();
-      if (tabbedPane.getTabCount() > 0) {
-        for (int i = 0; i < tabbedPane.getTabCount(); i++) {
-          if (tabbedPane.getTitleAt(i).equals(GUIGlobals.untitledTitle)) {
-            tabbedPane.setSelectedIndex(i);
-            int answer = JOptionPane.showConfirmDialog
-                (JabRefFrame.this, Globals.lang
-                 ("This untitled database must be saved first to be "
-                  + "included in the saved session. Save now?"),
-                 Globals.lang("Save database"),
-                 JOptionPane.YES_NO_OPTION);
-            if (answer == JOptionPane.YES_OPTION) {
-              // The user wants to save.
-              try {
-                basePanel().runCommand("save");
-              }
-              catch (Throwable ex) {}
-            }
-          }
-          if (baseAt(i).getFile() != null) {
-            filenames.add(baseAt(i).getFile().getPath());
-          }
-        }
-      }
-
-      if (filenames.size() == 0) {
-        output(Globals.lang("Not saved (empty session)") + ".");
-        return;
-      }
-      else {
-        String[] names = new String[filenames.size()];
-        for (int i = 0; i < filenames.size(); i++) {
-          names[i] = filenames.elementAt(i);
-        }
-        prefs.putStringArray("savedSession", names);
-        output(Globals.lang("Saved session") + ".");
-      }
-
-    }
-  }
-
-  class LoadSessionAction
-      extends MnemonicAwareAction {
-      boolean running = false;
-    public LoadSessionAction() {
-      super(GUIGlobals.getImage("loadSession"));
-      putValue(NAME, "Load session");
-      putValue(ACCELERATOR_KEY, prefs.getKey("Load session"));
-    }
-
-    public void actionPerformed(ActionEvent e) {
-      if (prefs.get("savedSession") == null) {
-        output(Globals.lang("No saved session found."));
-        return;
-      }
-      if (running)
-          return;
-      else running = true;
-      output(Globals.lang("Loading session..."));
-      (new Thread() {
-        public void run() {
-          HashSet<String> currentFiles = new HashSet<String>();
-          if (tabbedPane.getTabCount() > 0) {
-            for (int i = 0; i < tabbedPane.getTabCount(); i++) {
-                if (baseAt(i).getFile() != null)
-                    currentFiles.add(baseAt(i).getFile().getPath());
-            }
-          }
-          int i0 = tabbedPane.getTabCount();
-          String[] names = prefs.getStringArray("savedSession");
-          for (int i = 0; i < names.length; i++) {
-            if (!currentFiles.contains(names[i])) {
-              File file = new File(names[i]);
-              if (file.exists()) {
-                //Util.pr("Opening last edited file:"
-                //+fileToOpen.getName());
-                open.openIt(file, i == 0);
-              }
-            }
-          }
-          output(Globals.lang("Files opened") + ": " +
-                 (tabbedPane.getTabCount() - i0));
-          running = false;
-        }
-      }).start();
-
-    }
-  }
-
-  class ChangeTabAction
-      extends MnemonicAwareAction {
-    private boolean next;
-    public ChangeTabAction(boolean next) {
-      putValue(NAME, next ? "Next tab" : "Previous tab");
-      this.next = next;
-      //Util.pr(""+prefs.getKey("Next tab"));
-      putValue(ACCELERATOR_KEY,
-               (next ? prefs.getKey("Next tab") : prefs.getKey("Previous tab")));
-    }
-
-    public void actionPerformed(ActionEvent e) {
-      int i = tabbedPane.getSelectedIndex();
-      int newI = (next ? i + 1 : i - 1);
-      if (newI < 0) {
-        newI = tabbedPane.getTabCount() - 1;
-      }
-      if (newI == tabbedPane.getTabCount()) {
-        newI = 0;
-      }
-      tabbedPane.setSelectedIndex(newI);
-    }
-  }
-
-  /**
-   * Class for handling general actions; cut, copy and paste. The focused component is
-   * kept track of by Globals.focusListener, and we call the action stored under the
-   * relevant name in its action map.
-   */
-  class EditAction
-      extends MnemonicAwareAction {
-    private String command;
-    public EditAction(String command, URL icon) {
-      super(new ImageIcon(icon));
-      this.command = command;
-      String nName = Util.nCase(command);
-      putValue(NAME, nName);
-      putValue(ACCELERATOR_KEY, prefs.getKey(nName));
-      putValue(SHORT_DESCRIPTION, Globals.lang(nName));
-      //putValue(ACCELERATOR_KEY,
-      //         (next?prefs.getKey("Next tab"):prefs.getKey("Previous tab")));
-    }
-
-    public void actionPerformed(ActionEvent e) {
-
-      //Util.pr(Globals.focusListener.getFocused().toString());
-      JComponent source = Globals.focusListener.getFocused();
-      try {
-        source.getActionMap().get(command).actionPerformed
-            (new ActionEvent(source, 0, command));
-      } catch (NullPointerException ex) {
-        // No component is focused, so we do nothing.
-      }
-    }
-  }
-
-  class CustomizeExportsAction extends MnemonicAwareAction {
-    public CustomizeExportsAction() {
-      putValue(NAME, "Manage custom exports");
-    }
-
-    public void actionPerformed(ActionEvent e) {
-      ExportCustomizationDialog ecd = new ExportCustomizationDialog(JabRefFrame.this);
-      ecd.setVisible(true);
-    }
-  }
-
-  class CustomizeImportsAction extends MnemonicAwareAction {
-    public CustomizeImportsAction() {
-      putValue(NAME, "Manage custom imports");
-    }
-
-    public void actionPerformed(ActionEvent e) {
-      ImportCustomizationDialog ecd = new ImportCustomizationDialog(JabRefFrame.this);
-      ecd.setVisible(true);
-    }
-  }
-
- 
-    class CustomizeEntryTypeAction extends MnemonicAwareAction {
-        public CustomizeEntryTypeAction() {
-            putValue(NAME, "Customize entry types");
-        }
-        public void actionPerformed(ActionEvent e) {
-            JDialog dl = new EntryCustomizationDialog2(JabRefFrame.this);
-            Util.placeDialog(dl, JabRefFrame.this);
-            dl.setVisible(true);
-        }
-    }
-
-    class GenFieldsCustomizationAction extends MnemonicAwareAction {
-        public GenFieldsCustomizationAction() {
-            putValue(NAME, "Set up general fields");
-        }
-        public void actionPerformed(ActionEvent e) {
-            GenFieldsCustomizer gf = new GenFieldsCustomizer(JabRefFrame.this);
-            Util.placeDialog(gf, JabRefFrame.this);
-            gf.setVisible(true);
-
-        }
-    }
-
-    class DatabasePropertiesAction extends MnemonicAwareAction {
-        DatabasePropertiesDialog propertiesDialog = null;
-        public DatabasePropertiesAction() {
-            putValue(NAME, "Database properties");
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            if (propertiesDialog == null)
-                propertiesDialog = new DatabasePropertiesDialog(JabRefFrame.this);
-            propertiesDialog.setPanel(basePanel());
-            Util.placeDialog(propertiesDialog, JabRefFrame.this);
-            propertiesDialog.setVisible(true);
-        }
-       
-    }
-    
-    class BibtexKeyPatternAction extends MnemonicAwareAction {
-        BibtexKeyPatternDialog bibtexKeyPatternDialog = null;
-        public BibtexKeyPatternAction() {
-            putValue(NAME, "Bibtex key patterns");
-        }
-
-        public void actionPerformed(ActionEvent e) {
-        	final JabRefPreferences prefs = JabRefPreferences.getInstance();
-            if (bibtexKeyPatternDialog == null) {
-                // if no instance of BibtexKeyPatternDialog exists, create new one
-            	bibtexKeyPatternDialog = new BibtexKeyPatternDialog(JabRefFrame.this, basePanel());
-            } else {
-                // BibtexKeyPatternDialog allows for updating content based on currently selected panel
-                bibtexKeyPatternDialog.setPanel(basePanel());
-            }
-            Util.placeDialog(bibtexKeyPatternDialog, JabRefFrame.this);
-            bibtexKeyPatternDialog.setVisible(true);
-        }
-       
-    }
-
-    class IncreaseTableFontSizeAction extends MnemonicAwareAction {
-        public IncreaseTableFontSizeAction() {
-            putValue(NAME, "Increase table font size");
-            putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Increase table font size"));
-        }
-        public void actionPerformed(ActionEvent event) {
-            int currentSize = GUIGlobals.CURRENTFONT.getSize();
-            Font newFont = new Font(GUIGlobals.CURRENTFONT.getFamily(), GUIGlobals.CURRENTFONT.getStyle(),
-                    currentSize+1);
-            GUIGlobals.CURRENTFONT = newFont;
-            Globals.prefs.putInt("fontSize", currentSize+1);
-            for (int i=0; i<baseCount(); i++) {
-                baseAt(i).updateTableFont();
-            }
-        }
-    }
-
-    class DecreaseTableFontSizeAction extends MnemonicAwareAction {
-        public DecreaseTableFontSizeAction() {
-            putValue(NAME, "Decrease table font size");
-            putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Decrease table font size"));
-        }
-        public void actionPerformed(ActionEvent event) {
-            int currentSize = GUIGlobals.CURRENTFONT.getSize();
-            if (currentSize < 2 )
-                return;
-            Font newFont = new Font(GUIGlobals.CURRENTFONT.getFamily(), GUIGlobals.CURRENTFONT.getStyle(),
-                    currentSize-1);
-            GUIGlobals.CURRENTFONT = newFont;
-            Globals.prefs.putInt("fontSize", currentSize-1);
-            for (int i=0; i<baseCount(); i++) {
-                baseAt(i).updateTableFont();
-            }
-        }
-    }
-
-    class MinimizeToSysTrayAction extends MnemonicAwareAction {
-        public MinimizeToSysTrayAction() {
-            putValue(NAME, "Minimize to system tray");
-            putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Minimize to system tray"));
-        }
-        public void actionPerformed(ActionEvent event) {
-            if (sysTray == null)
-                sysTray = new SysTray(JabRefFrame.this);
-            SwingUtilities.invokeLater(new Runnable() {
-                public void run() {
-                    sysTray.setTrayIconVisible(true);
-                    JabRefFrame.this.setVisible(false);
-                }
-            });
-        }
-    }
-
-    public void showIfMinimizedToSysTray() {
-        if (sysTray != null)
-            sysTray.setTrayIconVisible(false);
-        setVisible(true);
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                toFront();
-            }
-        });
-    }
-
-    /*private class ForegroundLabel extends JLabel {
-         public ForegroundLabel(String s) {
-             super(s);
-             setFont(new Font("plain", Font.BOLD, 70));
-             setHorizontalAlignment(JLabel.CENTER);
-         }
-
-        public void paint(Graphics g) {
-            Graphics2D g2 = (Graphics2D)g;
-            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-            super.paint(g2);    //To change body of overridden methods use File | Settings | File Templates.
-        }
-    }       */
-
-  private class MyGlassPane extends JPanel {
-    //ForegroundLabel infoLabel = new ForegroundLabel("Showing search");
-    public MyGlassPane() {
-      addKeyListener(new KeyAdapter() { });
-      addMouseListener(new MouseAdapter() { });
-      /*  infoLabel.setForeground(new Color(255, 100, 100, 124));
-
-        setLayout(new BorderLayout());
-        add(infoLabel, BorderLayout.CENTER);*/
-      super.setCursor(
-        Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-    }
-      // Override isOpaque() to prevent the glasspane from hiding the window contents:
-      public boolean isOpaque() { return false; }
-  }
-
-  public void showMessage(Object message, String title, int msgType){
-      JOptionPane.showMessageDialog(this, message, title, msgType);
-  }
-
-  public void setStatus(String s){
-	  output(s);
-  }
-
-  public void showMessage(String message){
-	  JOptionPane.showMessageDialog(this, message);
-  }
-  
-  public SearchManager2 getSearchManager() {
-		return searchManager;
-	}
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.Vector;
+
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.java.ayatana.ApplicationMenu;
+
+import net.sf.jabref.export.*;
+import net.sf.jabref.external.ExternalFileTypeEditor;
+import net.sf.jabref.external.PushToApplicationButton;
+import net.sf.jabref.groups.EntryTableTransferHandler;
+import net.sf.jabref.groups.GroupSelector;
+import net.sf.jabref.gui.*;
+import net.sf.jabref.help.HelpAction;
+import net.sf.jabref.help.HelpDialog;
+import net.sf.jabref.imports.EntryFetcher;
+import net.sf.jabref.imports.GeneralFetcher;
+import net.sf.jabref.imports.ImportCustomizationDialog;
+import net.sf.jabref.imports.ImportFormat;
+import net.sf.jabref.imports.ImportFormats;
+import net.sf.jabref.imports.ImportMenuItem;
+import net.sf.jabref.imports.OpenDatabaseAction;
+import net.sf.jabref.imports.ParserResult;
+import net.sf.jabref.journals.ManageJournalsAction;
+import net.sf.jabref.label.ArticleLabelRule;
+import net.sf.jabref.label.BookLabelRule;
+import net.sf.jabref.label.IncollectionLabelRule;
+import net.sf.jabref.label.InproceedingsLabelRule;
+import net.sf.jabref.label.LabelMaker;
+import net.sf.jabref.oo.OpenOfficePanel;
+import net.sf.jabref.plugin.PluginCore;
+import net.sf.jabref.plugin.PluginInstallerAction;
+import net.sf.jabref.plugin.core.JabRefPlugin;
+import net.sf.jabref.plugin.core.generated._JabRefPlugin.EntryFetcherExtension;
+import net.sf.jabref.specialfields.Priority;
+import net.sf.jabref.specialfields.Quality;
+import net.sf.jabref.specialfields.Rank;
+import net.sf.jabref.specialfields.Relevance;
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+import net.sf.jabref.sql.importer.DbImportAction;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableInsertEntry;
+import net.sf.jabref.undo.UndoableRemoveEntry;
+import net.sf.jabref.util.ManageKeywordsAction;
+import net.sf.jabref.util.MassSetFieldAction;
+import net.sf.jabref.wizard.auximport.gui.FromAuxDialog;
+import net.sf.jabref.wizard.integrity.gui.IntegrityWizard;
+
+import com.jgoodies.looks.HeaderStyle;
+import com.jgoodies.looks.Options;
+import com.jgoodies.uif_lite.component.UIFSplitPane;
+
+/**
+ * The main window of the application.
+ */
+public class JabRefFrame extends JFrame implements OutputPrinter {
+
+    UIFSplitPane contentPane = new UIFSplitPane();
+
+    JabRefPreferences prefs = Globals.prefs; 
+    PrefsDialog3 prefsDialog = null;
+    
+    private int lastTabbedPanelSelectionIndex = -1 ;
+
+    // The sidepane manager takes care of populating the sidepane. 
+    public SidePaneManager sidePaneManager;
+
+    JTabbedPane tabbedPane; // initialized at constructor
+    
+    final Insets marg = new Insets(1,0,2,0);
+
+    class ToolBar extends JToolBar {
+      void addAction(Action a) {
+        JButton b = new JButton(a);
+        b.setText(null);
+        if (!Globals.ON_MAC)
+            b.setMargin(marg);
+        add(b);
+      }
+    }
+    ToolBar tlb = new ToolBar();
+
+    JMenuBar mb = new JMenuBar();
+    JMenu pluginMenu = subMenu("Plugins");
+    boolean addedToPluginMenu = false;
+
+    GridBagLayout gbl = new GridBagLayout();
+    GridBagConstraints con = new GridBagConstraints();
+
+    JLabel statusLine = new JLabel("", SwingConstants.LEFT), statusLabel = new JLabel(Globals
+        .lang("Status")
+        + ":", SwingConstants.LEFT);
+    JProgressBar progressBar = new JProgressBar();
+
+    private FileHistory fileHistory = new FileHistory(prefs, this);
+
+    private SysTray sysTray = null;
+
+    LabelMaker labelMaker;
+
+    // The help window.
+    public HelpDialog helpDiag = new HelpDialog(this);
+
+    // Here we instantiate menu/toolbar actions. Actions regarding
+    // the currently open database are defined as a GeneralAction
+    // with a unique command string. This causes the appropriate
+    // BasePanel's runCommand() method to be called with that command.
+    // Note: GeneralAction's constructor automatically gets translations
+    // for the name and message strings.
+
+  // References to the toggle buttons in the toolbar:
+  public JToggleButton groupToggle, searchToggle, previewToggle, highlightAny,
+      highlightAll;
+  OpenDatabaseAction
+      open = new OpenDatabaseAction(this, true);
+  AbstractAction
+      close = new CloseDatabaseAction(),
+      quit = new CloseAction(),
+      selectKeys = new SelectKeysAction(),
+      newDatabaseAction = new NewDatabaseAction(),
+      newSubDatabaseAction = new NewSubDatabaseAction(),
+      integrityCheckAction = new IntegrityCheckAction(),
+      help = new HelpAction("JabRef help", helpDiag,
+                            GUIGlobals.baseFrameHelp, Globals.lang("JabRef help"),
+                            prefs.getKey("Help")),
+      contents = new HelpAction("Help contents", helpDiag,
+                                GUIGlobals.helpContents, Globals.lang("Help contents"),
+                                GUIGlobals.getIconUrl("helpContents")),
+      about = new HelpAction("About JabRef", helpDiag,
+                             GUIGlobals.aboutPage, Globals.lang("About JabRef"),
+                             GUIGlobals.getIconUrl("about")),
+      editEntry = new GeneralAction("edit", "Edit entry",
+                               Globals.lang("Edit entry"),
+                               prefs.getKey("Edit entry")),
+      focusTable = new GeneralAction("focusTable", "Focus entry table",
+                Globals.lang("Move the keyboard focus to the entry table"),
+                prefs.getKey("Focus entry table")),
+      save = new GeneralAction("save", "Save database",
+                               Globals.lang("Save database"),
+                               prefs.getKey("Save database")),
+      saveAs = new GeneralAction("saveAs", "Save database as ...",
+                                 Globals.lang("Save database as ..."),
+                                 prefs.getKey("Save database as ...")),
+      saveAll = new SaveAllAction(JabRefFrame.this),
+      saveSelectedAs = new GeneralAction("saveSelectedAs",
+                                         "Save selected as ...",
+                                         Globals.lang("Save selected as ..."),
+                                         GUIGlobals.getIconUrl("saveAs")),
+      exportAll = ExportFormats.getExportAction(this, false),
+      exportSelected = ExportFormats.getExportAction(this, true),
+      importCurrent = ImportFormats.getImportAction(this, false),
+      importNew = ImportFormats.getImportAction(this, true),
+      nextTab = new ChangeTabAction(true),
+      prevTab = new ChangeTabAction(false),
+      sortTabs = new SortTabsAction(this),
+      undo = new GeneralAction("undo", "Undo", Globals.lang("Undo"),
+                               prefs.getKey("Undo")),
+      redo = new GeneralAction("redo", "Redo", Globals.lang("Redo"),
+                               prefs.getKey("Redo")),
+      forward = new GeneralAction("forward", "Forward", Globals.lang("Forward"),
+              "right", prefs.getKey("Forward")),
+      back = new GeneralAction("back", "Back", Globals.lang("Back"),
+              "left", prefs.getKey("Back")),
+      /*cut = new GeneralAction("cut", "Cut", Globals.lang("Cut"),
+         GUIGlobals.cutIconFile,
+         prefs.getKey("Cut")),*/
+      delete = new GeneralAction("delete", "Delete", Globals.lang("Delete"),
+                                 prefs.getKey("Delete")),
+      /*copy = new GeneralAction("copy", "Copy", Globals.lang("Copy"),
+                               GUIGlobals.copyIconFile,
+                               prefs.getKey("Copy")),*/
+      copy = new EditAction("copy", GUIGlobals.getIconUrl("copy")),
+      paste = new EditAction("paste", GUIGlobals.getIconUrl("paste")),
+      cut = new EditAction("cut", GUIGlobals.getIconUrl("cut")),
+      mark = new GeneralAction("markEntries", "Mark entries",
+                               Globals.lang("Mark entries"),
+                               prefs.getKey("Mark entries")),
+       unmark = new GeneralAction("unmarkEntries", "Unmark entries",
+                                  Globals.lang("Unmark entries"),
+                                  prefs.getKey("Unmark entries")),
+       unmarkAll = new GeneralAction("unmarkAll", "Unmark all"),
+       toggleRelevance = new GeneralAction(
+    		   Relevance.getInstance().getValues().get(0).getActionName(), 
+    		   Relevance.getInstance().getValues().get(0).getMenuString(),
+    		   Relevance.getInstance().getValues().get(0).getToolTipText()),
+       toggleQualityAssured = new GeneralAction(
+				Quality.getInstance().getValues().get(0).getActionName(),
+				Quality.getInstance().getValues().get(0).getMenuString(),
+				Quality.getInstance().getValues().get(0).getToolTipText()),
+//    	priority = new GeneralAction("setPriority", "Set priority",
+//    			                                            Globals.lang("Set priority")),
+      manageSelectors = new GeneralAction("manageSelectors", "Manage content selectors"),
+      saveSessionAction = new SaveSessionAction(),
+      loadSessionAction = new LoadSessionAction(),
+      incrementalSearch = new GeneralAction("incSearch", "Incremental search",
+                                            Globals.lang("Start incremental search"),
+                                            prefs.getKey("Incremental search")),
+      normalSearch = new GeneralAction("search", "Search", Globals.lang("Search"),
+                                       prefs.getKey("Search")),
+      toggleSearch = new GeneralAction("toggleSearch", "Search", Globals.lang("Toggle search panel")),
+
+      copyKey = new GeneralAction("copyKey", "Copy BibTeX key",
+            prefs.getKey("Copy BibTeX key")),
+      //"Put a BibTeX reference to the selected entries on the clipboard",
+      copyCiteKey = new GeneralAction("copyCiteKey", "Copy \\cite{BibTeX key}",
+                                      //"Put a BibTeX reference to the selected entries on the clipboard",
+                                      prefs.getKey("Copy \\cite{BibTeX key}")),
+      copyKeyAndTitle = new GeneralAction("copyKeyAndTitle", 
+    		  							  "Copy BibTeX key and title",
+    		  							  prefs.getKey("Copy BibTeX key and title")),
+      mergeDatabaseAction = new GeneralAction("mergeDatabase",
+                                              "Append database",
+                                              Globals.lang("Append contents from a BibTeX database into the currently viewed database"),
+                                              GUIGlobals.getIconUrl("open")),
+      //prefs.getKey("Open")),
+      /*remove = new GeneralAction("remove", "Remove", "Remove selected entries",
+        GUIGlobals.removeIconFile),*/
+      selectAll = new GeneralAction("selectAll", "Select all",
+                                    prefs.getKey("Select all")),
+      replaceAll = new GeneralAction("replaceAll", "Replace string",
+                                     prefs.getKey("Replace string")),
+
+      editPreamble = new GeneralAction("editPreamble", "Edit preamble",
+                                       Globals.lang("Edit preamble"),
+                                       prefs.getKey("Edit preamble")),
+      editStrings = new GeneralAction("editStrings", "Edit strings",
+                                      Globals.lang("Edit strings"),
+                                      prefs.getKey("Edit strings")),
+      toggleGroups = new GeneralAction("toggleGroups",
+                                       "Toggle groups interface",
+                                       Globals.lang("Toggle groups interface"),
+                                       prefs.getKey("Toggle groups interface")),
+      togglePreview = new GeneralAction("togglePreview",
+                                        "Toggle entry preview",
+                                        Globals.lang("Toggle entry preview"),
+                                        prefs.getKey("Toggle entry preview")),
+      toggleHighlightAny = new GeneralAction("toggleHighlightGroupsMatchingAny",
+                                        "Highlight groups matching any selected entry",
+                                        Globals.lang("Highlight groups matching any selected entry"),
+                                        GUIGlobals.getIconUrl("groupsHighlightAny")),
+      toggleHighlightAll = new GeneralAction("toggleHighlightGroupsMatchingAll",
+                                        "Highlight groups matching all selected entries",
+                                        Globals.lang("Highlight groups matching all selected entries"),
+                                        GUIGlobals.getIconUrl("groupsHighlightAll")),
+      switchPreview = new GeneralAction("switchPreview",
+                                        "Switch preview layout",
+                                        prefs.getKey("Switch preview layout")),
+       makeKeyAction = new GeneralAction("makeKey", "Autogenerate BibTeX keys",
+                                        Globals.lang("Autogenerate BibTeX keys"),
+                                        prefs.getKey("Autogenerate BibTeX keys")),
+                                        
+      writeXmpAction = new GeneralAction("writeXMP", "Write XMP-metadata to PDFs",
+                                        Globals.lang("Will write XMP-metadata to the PDFs linked from selected entries."),
+                                        prefs.getKey("Write XMP")),
+      openFile = new GeneralAction("openExternalFile", "Open file",
+                                   Globals.lang("Open file"),
+                                   prefs.getKey("Open file")),
+      openPdf = new GeneralAction("openFile", "Open PDF or PS",
+                                   Globals.lang("Open PDF or PS"),
+                                   prefs.getKey("Open PDF or PS")),
+      openUrl = new GeneralAction("openUrl", "Open URL or DOI",
+                                  Globals.lang("Open URL or DOI"),
+                                  prefs.getKey("Open URL or DOI")),
+      openSpires = new GeneralAction("openSpires", "Open SPIRES entry",
+                                          Globals.lang("Open SPIRES entry"),
+                                          prefs.getKey("Open SPIRES entry")),
+      /*
+	   * It looks like this wasn't being implemented for spires anyway so we
+	   * comment it out for now.
+	   *
+	  openInspire = new GeneralAction("openInspire", "Open INSPIRE entry",
+                                          Globals.lang("Open INSPIRE entry"),
+                                          prefs.getKey("Open INSPIRE entry")),
+		*/
+      dupliCheck = new GeneralAction("dupliCheck", "Find duplicates"),
+      //strictDupliCheck = new GeneralAction("strictDupliCheck", "Find and remove exact duplicates"),
+      plainTextImport = new GeneralAction("plainTextImport",
+                                          "New entry from plain text",
+                                          prefs.getKey("New from plain text")),
+
+
+      customExpAction = new CustomizeExportsAction(),
+      customImpAction = new CustomizeImportsAction(),
+      customFileTypesAction = ExternalFileTypeEditor.getAction(this),
+      exportToClipboard = new GeneralAction("exportToClipboard", "Export selected entries to clipboard"),
+      //expandEndnoteZip = new ExpandEndnoteFilters(this),
+        autoSetPdf = new GeneralAction("autoSetPdf", Globals.lang("Synchronize %0 links", "PDF"), Globals.prefs.getKey("Synchronize PDF")),
+        autoSetPs = new GeneralAction("autoSetPs", Globals.lang("Synchronize %0 links", "PS"), Globals.prefs.getKey("Synchronize PS")),
+        autoSetFile = new GeneralAction("autoSetFile", Globals.lang("Synchronize file links"), Globals.prefs.getKey("Synchronize files")),
+
+    abbreviateMedline = new GeneralAction("abbreviateMedline", "Abbreviate journal names (MEDLINE)",
+                Globals.lang("Abbreviate journal names of the selected entries (MEDLINE abbreviation)")),
+  abbreviateIso = new GeneralAction("abbreviateIso", "Abbreviate journal names (ISO)",
+                          Globals.lang("Abbreviate journal names of the selected entries (ISO abbreviation)"),
+                          Globals.prefs.getKey("Abbreviate")),
+
+
+    unabbreviate = new GeneralAction("unabbreviate", "Unabbreviate journal names",
+                    Globals.lang("Unabbreviate journal names of the selected entries"),
+            Globals.prefs.getKey("Unabbreviate")),
+    manageJournals = new ManageJournalsAction(this),
+    databaseProperties = new DatabasePropertiesAction(),
+    bibtexKeyPattern = new BibtexKeyPatternAction(),
+    errorConsole = Globals.errorConsole.getAction(this),
+    test = new GeneralAction("test", "Test"),
+
+    dbConnect = new GeneralAction("dbConnect", "Connect to external SQL database",
+         Globals.lang("Connect to external SQL database"), 
+          GUIGlobals.getIconUrl("dbConnect") ),
+
+    dbExport = new GeneralAction("dbExport", "Export to external SQL database",
+         Globals.lang("Export to external SQL database"), 
+          GUIGlobals.getIconUrl("dbExport") ),
+
+    Cleanup = new GeneralAction("Cleanup", "Cleanup entries", 
+					Globals.lang("Cleanup entries"), 
+					GUIGlobals.getIconUrl("cleanupentries") ),
+					
+    dbImport = new DbImportAction(this).getAction(),
+    //downloadFullText = new GeneralAction("downloadFullText", "Look up full text document",
+    //        Globals.lang("Follow DOI or URL link and try to locate PDF full text document")),
+    increaseFontSize = new IncreaseTableFontSizeAction(),
+    decreseFontSize = new DecreaseTableFontSizeAction(),
+    installPlugin = new PluginInstallerAction(this),
+    resolveDuplicateKeys = new GeneralAction("resolveDuplicateKeys", "Resolve duplicate BibTeX keys",
+              Globals.lang("Find and remove duplicate BibTeX keys"),
+              prefs.getKey("Resolve duplicate BibTeX keys"));
+
+    MassSetFieldAction massSetField = new MassSetFieldAction(this);
+    ManageKeywordsAction manageKeywords = new ManageKeywordsAction(this);
+
+	GeneralAction findUnlinkedFiles = new GeneralAction(
+  			FindUnlinkedFilesDialog.ACTION_COMMAND,
+  			FindUnlinkedFilesDialog.ACTION_TITLE,
+  			FindUnlinkedFilesDialog.ACTION_SHORT_DESCRIPTION,
+  			FindUnlinkedFilesDialog.ACTION_ICON,
+  			prefs.getKey(FindUnlinkedFilesDialog.ACTION_COMMAND)
+  	);
+    
+    PushToApplicationButton pushExternalButton;
+
+    List<EntryFetcher> fetchers = new LinkedList<EntryFetcher>();
+    List<Action> fetcherActions = new LinkedList<Action>();
+
+    private SearchManager2 searchManager;
+
+	public GroupSelector groupSelector;
+
+  // The menus for importing/appending other formats
+  JMenu importMenu = subMenu("Import into current database"),
+      importNewMenu = subMenu("Import into new database"),
+      exportMenu = subMenu("Export"),
+      customExportMenu = subMenu("Custom export"),
+      newDatabaseMenu = subMenu("New database" );
+
+  // Other submenus
+  JMenu checkAndFix = subMenu("Legacy tools...");
+
+
+  // The action for adding a new entry of unspecified type.
+  NewEntryAction newEntryAction = new NewEntryAction(prefs.getKey("New entry"));
+  NewEntryAction[] newSpecificEntryAction = new NewEntryAction[]
+  {
+      new NewEntryAction("article", prefs.getKey("New article")),
+      new NewEntryAction("book", prefs.getKey("New book")),
+      new NewEntryAction("phdthesis", prefs.getKey("New phdthesis")),
+      new NewEntryAction("inbook", prefs.getKey("New inbook")),
+      new NewEntryAction("mastersthesis", prefs.getKey("New mastersthesis")),
+      new NewEntryAction("proceedings", prefs.getKey("New proceedings")),
+      new NewEntryAction("inproceedings"),
+      new NewEntryAction("conference"),
+      new NewEntryAction("incollection"),
+      new NewEntryAction("booklet"),
+      new NewEntryAction("manual"),
+      new NewEntryAction("techreport"),
+      new NewEntryAction("unpublished",
+                         prefs.getKey("New unpublished")),
+      new NewEntryAction("misc"),
+      new NewEntryAction("other")
+  };
+
+  public JabRefFrame() {
+    init();
+    updateEnabledState();
+    
+    
+  }
+
+  private void init() {
+	    tabbedPane = new DragDropPopupPane(manageSelectors, databaseProperties, bibtexKeyPattern);
+
+        macOSXRegistration();
+
+        UIManager.put("FileChooser.readOnly", Globals.prefs.getBoolean("filechooserDisableRename"));
+
+        MyGlassPane glassPane = new MyGlassPane();
+        setGlassPane(glassPane);
+        // glassPane.setVisible(true);
+
+        setTitle(GUIGlobals.frameTitle);
+        //setIconImage(GUIGlobals.getImage("jabrefIcon").getImage());
+        setIconImage(GUIGlobals.getImage("jabrefIcon48").getImage());
+        setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                (new CloseAction()).actionPerformed(null);
+            }
+        });
+
+        initLabelMaker();
+
+        initSidePane();
+        
+        initLayout();
+        
+        initActions();
+
+      
+      setBounds(GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds());
+      if ( !prefs.getBoolean("windowMaximised") ) {
+         
+        int sizeX = prefs.getInt("sizeX");
+        int sizeY = prefs.getInt("sizeY");
+        int posX = prefs.getInt("posX");
+        int posY = prefs.getInt("posY");
+
+        /*
+        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
+        GraphicsDevice[] gs = ge.getScreenDevices();
+
+
+        // Get size of each screen
+        for (int i=0; i<gs.length; i++) {
+            DisplayMode dm = gs[i].getDisplayMode();
+            int screenWidth = dm.getWidth();
+            int screenHeight = dm.getHeight();
+            System.out.println(gs[i].getDefaultConfiguration().getBounds());
+        }*/
+
+        //
+        // Fix for [ 1738920 ] Windows Position in Multi-Monitor environment
+        //
+        // Do not put a window outside the screen if the preference values are wrong.
+        //
+        // Useful reference: http://www.exampledepot.com/egs/java.awt/screen_ScreenSize.html?l=rel
+        // googled on forums.java.sun.com graphicsenvironment second screen java
+        //
+        if (GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices().length == 1){
+
+            Rectangle bounds = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0]
+                    .getDefaultConfiguration().getBounds();
+            Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
+
+            // Make sure we are not above or to the left of the screen bounds:
+            if (posX < bounds.x)
+                posX = bounds.x;
+            if (posY < bounds.y)
+                posY = bounds.y;
+
+            int height = (int) dim.getHeight();
+            int width = (int) dim.getWidth();
+
+            //if (posX < )
+
+            if (posX + sizeX > width) {
+                if (sizeX <= width) {
+                    posX = width - sizeX;
+                } else {
+                    posX = prefs.getIntDefault("posX");
+                    sizeX = prefs.getIntDefault("sizeX");
+                }
+            }
+
+            if (posY + sizeY > height) {
+                if (sizeY <= height) {
+                    posY = height - sizeY;
+                } else {
+                    posY = prefs.getIntDefault("posY");
+                    sizeY = prefs.getIntDefault("sizeY");
+                }
+            }
+        }
+        setBounds(posX, posY, sizeX, sizeY);
+      }
+
+        tabbedPane.setBorder(null);
+        tabbedPane.setForeground(GUIGlobals.inActiveTabbed);
+
+        /*
+         * The following state listener makes sure focus is registered with the
+         * correct database when the user switches tabs. Without this,
+         * cut/paste/copy operations would some times occur in the wrong tab.
+         */
+        tabbedPane.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent e) {
+                markActiveBasePanel();
+
+                BasePanel bp = basePanel();
+                if (bp != null) {
+                    groupToggle.setSelected(sidePaneManager.isComponentVisible("groups"));
+                    searchToggle.setSelected(sidePaneManager.isComponentVisible("search"));
+                    previewToggle.setSelected(Globals.prefs.getBoolean("previewEnabled"));
+                    highlightAny
+                        .setSelected(Globals.prefs.getBoolean("highlightGroupsMatchingAny"));
+                    highlightAll
+                        .setSelected(Globals.prefs.getBoolean("highlightGroupsMatchingAll"));
+                    Globals.focusListener.setFocused(bp.mainTable);
+                    setWindowTitle();
+                    // Update search autocompleter with information for the correct database:
+                    bp.updateSearchManager();
+                    // Set correct enabled state for Back and Forward actions:
+                    bp.setBackAndForwardEnabledState();
+                    new FocusRequester(bp.mainTable);
+                }
+            }
+        });
+
+        // The following sets up integration with Unity's global menu, but currently (Nov 18, 2012)
+        // this doesn't work with OpenJDK 6 (leads to crash), only with 7.
+        String javaVersion = System.getProperty("java.version", null);
+        if (javaVersion.compareTo("1.7") >= 0)
+            ApplicationMenu.tryInstall(this);
+
+    }
+
+    public void setWindowTitle() {
+        // Set window title:
+        BasePanel bp = basePanel();
+        if (bp == null) {
+            setTitle(GUIGlobals.frameTitle);
+            return;
+        }
+        String star = bp.isBaseChanged() ? "*" : "";
+        if (bp.getFile() != null) {
+            setTitle(GUIGlobals.frameTitle+" - "+bp.getFile().getPath()+star);
+        } else {
+            setTitle(GUIGlobals.frameTitle+" - "+Globals.lang("untitled")+star);
+        }
+    }
+
+    private void initSidePane() {
+        sidePaneManager = new SidePaneManager(this);
+
+        Globals.sidePaneManager = this.sidePaneManager;
+        Globals.helpDiag = this.helpDiag;
+
+        /*
+         * Load fetchers that are plug-in extensions
+         */
+        JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
+    	if (jabrefPlugin != null){
+                for (EntryFetcherExtension ext : jabrefPlugin.getEntryFetcherExtensions()){
+                    try {
+                            EntryFetcher fetcher = ext.getEntryFetcher();
+                            if (fetcher != null){
+                                    fetchers.add(fetcher);
+                            }
+                    } catch (ClassCastException ex) {
+                        PluginCore.getManager().disablePlugin(ext.getDeclaringPlugin().getDescriptor());
+                        ex.printStackTrace();
+                    }
+                } 
+    	}
+        
+        groupSelector = new GroupSelector(this, sidePaneManager);
+        searchManager = new SearchManager2(this, sidePaneManager);
+
+        sidePaneManager.register("groups", groupSelector);
+        sidePaneManager.register("search", searchManager);
+
+        // Show the search panel if it was visible at last shutdown:
+        if (Globals.prefs.getBoolean("searchPanelVisible"))
+            sidePaneManager.show("search");
+    }
+
+
+AboutAction aboutAction = new AboutAction();
+  class AboutAction
+      extends AbstractAction {
+    public AboutAction() {
+      super(Globals.lang("About JabRef"));
+
+    }
+
+    public void actionPerformed(ActionEvent e) {
+      about();
+    }
+  }
+
+
+  // General info dialog.  The OSXAdapter calls this method when "About OSXAdapter"
+  // is selected from the application menu.
+  public void about() {
+    JDialog about = new JDialog(JabRefFrame.this, Globals.lang("About JabRef"),
+                                true);
+    JEditorPane jp = new JEditorPane();
+    JScrollPane sp = new JScrollPane
+        (jp, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+         JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+    jp.setEditable(false);
+    try {
+      jp.setPage(GUIGlobals.class.getResource("/help/About.html"));//GUIGlobals.aboutPage);
+      // We need a hyperlink listener to be able to switch to the license
+      // terms and back.
+      jp.addHyperlinkListener(new javax.swing.event.HyperlinkListener() {
+        public void hyperlinkUpdate(javax.swing.event.HyperlinkEvent e) {
+          if (e.getEventType()
+              == javax.swing.event.HyperlinkEvent.EventType.ACTIVATED) {
+            try {
+              ( (JEditorPane) e.getSource()).setPage(e.getURL());
+            }
+            catch (IOException ex) {}
+          }
+        }
+      });
+      about.getContentPane().add(sp);
+      about.setSize(GUIGlobals.aboutSize);
+      Util.placeDialog(about, JabRefFrame.this);
+      about.setVisible(true);
+    }
+    catch (IOException ex) {
+      ex.printStackTrace();
+      JOptionPane.showMessageDialog(JabRefFrame.this, "Could not load file 'About.html'",
+                                    "Error", JOptionPane.ERROR_MESSAGE);
+    }
+
+  }
+
+  // General preferences dialog.  The OSXAdapter calls this method when "Preferences..."
+  // is selected from the application menu.
+  public void preferences() {
+    //PrefsDialog.showPrefsDialog(JabRefFrame.this, prefs);
+      AbstractWorker worker = new AbstractWorker() {
+              public void run() {
+                  output(Globals.lang("Opening preferences..."));
+                  if (prefsDialog == null) {
+                      prefsDialog = new PrefsDialog3(JabRefFrame.this);
+                      Util.placeDialog(prefsDialog, JabRefFrame.this);
+                  }
+                  else
+                      prefsDialog.setValues();
+
+              }
+              public void update() {
+                  prefsDialog.setVisible(true);
+                  output("");
+              }
+          };
+      worker.getWorker().run();
+      worker.getCallBack().update();
+  }
+
+public JabRefPreferences prefs() {
+  return prefs;
+}
+
+  // General info dialog.  The OSXAdapter calls this method when "Quit OSXAdapter"
+  // is selected from the application menu, Cmd-Q is pressed, or "Quit" is selected from the Dock.
+  public void quit() {
+    // Ask here if the user really wants to close, if the base
+    // has not been saved since last save.
+    boolean close = true;
+    Vector<String> filenames = new Vector<String>();
+    if (tabbedPane.getTabCount() > 0) {
+      for (int i = 0; i < tabbedPane.getTabCount(); i++) {
+        if (baseAt(i).isBaseChanged()) {
+          tabbedPane.setSelectedIndex(i);
+          int answer = JOptionPane.showConfirmDialog
+              (JabRefFrame.this, Globals.lang
+               ("Database has changed. Do you "
+                + "want to save before closing?"),
+               Globals.lang("Save before closing"),
+               JOptionPane.YES_NO_CANCEL_OPTION);
+
+          if ( (answer == JOptionPane.CANCEL_OPTION) ||
+              (answer == JOptionPane.CLOSED_OPTION)) {
+            close = false; // The user has cancelled.
+              return;
+          }
+          if (answer == JOptionPane.YES_OPTION) {
+            // The user wants to save.
+            try {
+              //basePanel().runCommand("save");
+                SaveDatabaseAction saveAction = new SaveDatabaseAction(basePanel());
+                saveAction.runCommand();
+                if (saveAction.isCancelled() || !saveAction.isSuccess()) {
+                    // The action was either cancelled or unsuccessful.
+                    // Break!
+                    output(Globals.lang("Unable to save database"));
+                    close = false;
+                }
+            }
+            catch (Throwable ex) {
+              // Something prevented the file
+              // from being saved. Break!!!
+              close = false;
+              break;
+            }
+          }
+        }
+
+        if (baseAt(i).getFile() != null) {
+          filenames.add(baseAt(i).getFile().getAbsolutePath());
+        }
+      }
+    }
+
+    if (close) {
+
+      for (int i = 0; i < tabbedPane.getTabCount(); i++) {
+          if (baseAt(i).isSaving()) {
+              // There is a database still being saved, so we need to wait.
+              WaitForSaveOperation w = new WaitForSaveOperation(this);
+              w.show(); // This method won't return until cancelled or the save operation is done.
+              if (w.cancelled())
+                  return; // The user clicked cancel.
+          }
+      }
+
+
+      dispose();
+
+      if (basePanel() != null)
+        basePanel().saveDividerLocation();
+      prefs.putInt("posX", JabRefFrame.this.getLocation().x);
+      prefs.putInt("posY", JabRefFrame.this.getLocation().y);
+      prefs.putInt("sizeX", JabRefFrame.this.getSize().width);
+      prefs.putInt("sizeY", JabRefFrame.this.getSize().height);
+      //prefs.putBoolean("windowMaximised", (getExtendedState()&MAXIMIZED_BOTH)>0);
+      prefs.putBoolean("windowMaximised", (getExtendedState() == Frame.MAXIMIZED_BOTH));
+      
+      prefs.putBoolean("searchPanelVisible", sidePaneManager.isComponentVisible("search"));
+      // Store divider location for side pane:
+      int width = contentPane.getDividerLocation();
+      if (width > 0) 
+          prefs.putInt("sidePaneWidth", width);
+      if (prefs.getBoolean("openLastEdited")) {
+        // Here we store the names of allcurrent filea. If
+        // there is no current file, we remove any
+        // previously stored file name.
+        if (filenames.size() == 0) {
+          prefs.remove("lastEdited");
+        }
+        else {
+          String[] names = new String[filenames.size()];
+          for (int i = 0; i < filenames.size(); i++) {
+            names[i] = filenames.elementAt(i);
+
+          }
+          prefs.putStringArray("lastEdited", names);
+        }
+
+      }
+
+      fileHistory.storeHistory();
+      prefs.customExports.store();
+      prefs.customImports.store();
+      BibtexEntryType.saveCustomEntryTypes(prefs);
+
+      // Clear autosave files:
+      if (Globals.autoSaveManager != null)
+        Globals.autoSaveManager.clearAutoSaves();
+
+      // Let the search interface store changes to prefs.
+      // But which one? Let's use the one that is visible.
+      if (basePanel() != null) {
+        (searchManager).updatePrefs();
+      }
+      
+      prefs.flush();
+      
+      System.exit(0); // End program.
+    }
+  }
+
+    
+
+  private void macOSXRegistration() {
+    if (Globals.osName.equals(Globals.MAC)) {
+      try {
+        Class<?> osxAdapter = Class.forName("osxadapter.OSXAdapter");
+
+        Class<?>[] defArgs = {
+            JabRefFrame.class};
+        Method registerMethod = osxAdapter.getDeclaredMethod(
+            "registerMacOSXApplication", defArgs);
+        if (registerMethod != null) {
+          Object[] args = {
+              this};
+          registerMethod.invoke(osxAdapter, args);
+        }
+        // This is slightly gross.  to reflectively access methods with boolean args,
+        // use "boolean.class", then pass a Boolean object in as the arg, which apparently
+
+        defArgs[0] = boolean.class;
+        Method prefsEnableMethod = osxAdapter.getDeclaredMethod("enablePrefs",
+            defArgs);
+        if (prefsEnableMethod != null) {
+          Object args[] = {
+              Boolean.TRUE};
+          prefsEnableMethod.invoke(osxAdapter, args);
+        }
+      }
+      catch (NoClassDefFoundError e) {
+        // This will be thrown first if the OSXAdapter is loaded on a system without the EAWT
+        // because OSXAdapter extends ApplicationAdapter in its def
+        System.err.println("This version of Mac OS X does not support the Apple EAWT.  Application Menu handling has been disabled (" +
+                           e + ")");
+      }
+      catch (ClassNotFoundException e) {
+        // This shouldn't be reached; if there's a problem with the OSXAdapter we should get the
+        // above NoClassDefFoundError first.
+        System.err.println("This version of Mac OS X does not support the Apple EAWT.  Application Menu handling has been disabled (" +
+                           e + ")");
+      }
+      catch (Exception e) {
+        System.err.println("Exception while loading the OSXAdapter:");
+        e.printStackTrace();
+      }
+    }
+  }
+
+
+  private void initLayout() {
+    tabbedPane.putClientProperty(Options.NO_CONTENT_BORDER_KEY, Boolean.TRUE);
+
+    setProgressBarVisible(false);
+
+      pushExternalButton = new PushToApplicationButton(this,
+              PushToApplicationButton.applications);
+    fillMenu();
+    createToolBar();
+    getContentPane().setLayout(gbl);
+      contentPane.setDividerSize(2);
+      contentPane.setBorder(null);
+    //getContentPane().setBackground(GUIGlobals.lightGray);
+    con.fill = GridBagConstraints.HORIZONTAL;
+    con.anchor = GridBagConstraints.WEST;
+    con.weightx = 1;
+    con.weighty = 0;
+    con.gridwidth = GridBagConstraints.REMAINDER;
+
+    //gbl.setConstraints(mb, con);
+    //getContentPane().add(mb);
+    setJMenuBar(mb);
+    con.anchor = GridBagConstraints.NORTH;
+    //con.gridwidth = 1;//GridBagConstraints.REMAINDER;;
+    gbl.setConstraints(tlb, con);
+    getContentPane().add(tlb);
+
+    Component lim = Box.createGlue();
+    gbl.setConstraints(lim, con);
+    //getContentPane().add(lim);
+    /*
+      JPanel empt = new JPanel();
+      empt.setBackground(GUIGlobals.lightGray);
+      gbl.setConstraints(empt, con);
+           getContentPane().add(empt);
+
+      con.insets = new Insets(1,0,1,1);
+      con.anchor = GridBagConstraints.EAST;
+      con.weightx = 0;
+      gbl.setConstraints(searchManager, con);
+      getContentPane().add(searchManager);*/
+    con.gridwidth = GridBagConstraints.REMAINDER;
+    con.weightx = 1;
+    con.weighty = 0;
+    con.fill = GridBagConstraints.BOTH;
+    con.anchor = GridBagConstraints.WEST;
+    con.insets = new Insets(0, 0, 0, 0);
+    lim = Box.createGlue();
+    gbl.setConstraints(lim, con);
+    getContentPane().add(lim);
+    //tabbedPane.setVisible(false);
+    //tabbedPane.setForeground(GUIGlobals.lightGray);
+    con.weighty = 1;
+    gbl.setConstraints(contentPane, con);
+    getContentPane().add(contentPane);
+    contentPane.setRightComponent(tabbedPane);
+    contentPane.setLeftComponent(sidePaneManager.getPanel());
+    sidePaneManager.updateView();
+
+    JPanel status = new JPanel();
+    status.setLayout(gbl);
+    con.weighty = 0;
+    con.weightx = 0;
+    con.gridwidth = 1;
+    con.insets = new Insets(0, 2, 0, 0);
+    gbl.setConstraints(statusLabel, con);
+    status.add(statusLabel);
+    con.weightx = 1;
+    con.insets = new Insets(0, 4, 0, 0);
+    con.gridwidth = 1;
+    gbl.setConstraints(statusLine, con);
+    status.add(statusLine);
+    con.weightx = 0;
+    con.gridwidth = GridBagConstraints.REMAINDER;
+    con.insets = new Insets(2, 4, 2, 2);
+    gbl.setConstraints(progressBar, con);
+    status.add(progressBar);
+    con.weightx = 1;
+    con.gridwidth = GridBagConstraints.REMAINDER;
+    statusLabel.setForeground(GUIGlobals.entryEditorLabelColor.darker());
+    con.insets = new Insets(0, 0, 0, 0);
+    gbl.setConstraints(status, con);
+    getContentPane().add(status);
+
+
+      // Drag and drop for tabbedPane:
+      TransferHandler xfer = new EntryTableTransferHandler(null, this, null);
+      tabbedPane.setTransferHandler(xfer);
+      tlb.setTransferHandler(xfer);
+      mb.setTransferHandler(xfer);
+      sidePaneManager.getPanel().setTransferHandler(xfer);
+  }
+
+  private void initLabelMaker() {
+    // initialize the labelMaker
+    labelMaker = new LabelMaker();
+    labelMaker.addRule(new ArticleLabelRule(),
+                       BibtexEntryType.ARTICLE);
+    labelMaker.addRule(new BookLabelRule(),
+                       BibtexEntryType.BOOK);
+    labelMaker.addRule(new IncollectionLabelRule(),
+                       BibtexEntryType.INCOLLECTION);
+    labelMaker.addRule(new InproceedingsLabelRule(),
+                       BibtexEntryType.INPROCEEDINGS);
+  }
+
+  /**
+   * Returns the indexed BasePanel.
+   * @param i Index of base
+   */
+  public BasePanel baseAt(int i) {
+    return (BasePanel) tabbedPane.getComponentAt(i);
+  }
+
+  public void showBaseAt(int i) {
+      tabbedPane.setSelectedIndex(i);
+  }
+
+    public void showBasePanel(BasePanel bp) {
+        tabbedPane.setSelectedComponent(bp);
+    }
+
+  /**
+   * Returns the currently viewed BasePanel.
+   */
+  public BasePanel basePanel() {
+    return (BasePanel) tabbedPane.getSelectedComponent();
+  }
+
+    /**
+     * @return the BasePanel count.
+     */
+    public int baseCount() {
+        return tabbedPane.getComponentCount();
+    }
+    
+  /**
+   * handle the color of active and inactive JTabbedPane tabs
+   */
+  private void markActiveBasePanel()
+  {
+    int now = tabbedPane.getSelectedIndex() ;
+    int len = tabbedPane.getTabCount() ;
+    if ((lastTabbedPanelSelectionIndex > -1) && (lastTabbedPanelSelectionIndex < len))
+      tabbedPane.setForegroundAt(lastTabbedPanelSelectionIndex, GUIGlobals.inActiveTabbed);
+    if ( (now > -1) &&  (now < len))
+      tabbedPane.setForegroundAt(now, GUIGlobals.activeTabbed);
+    lastTabbedPanelSelectionIndex = now ;
+  }
+
+  private int getTabIndex(JComponent comp) {
+    for (int i = 0; i < tabbedPane.getTabCount(); i++) {
+      if (tabbedPane.getComponentAt(i) == comp) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  public JTabbedPane getTabbedPane() { return tabbedPane; }
+
+  public String getTabTitle(JComponent comp) {
+    return tabbedPane.getTitleAt(getTabIndex(comp));
+  }
+
+    public String getTabTooltip(JComponent comp) {
+        return tabbedPane.getToolTipTextAt(getTabIndex(comp));
+    }
+
+  public void setTabTitle(JComponent comp, String title, String toolTip) {
+      int index = getTabIndex(comp);
+      tabbedPane.setTitleAt(index, title);
+      tabbedPane.setToolTipTextAt(index, toolTip);
+  }
+
+  class GeneralAction
+      extends MnemonicAwareAction {
+    private String command;
+    public GeneralAction(String command, String text,
+                         String description, URL icon) {
+      super(new ImageIcon(icon));
+      this.command = command;
+      putValue(NAME, text);
+      putValue(SHORT_DESCRIPTION, Globals.lang(description));
+    }
+
+    public GeneralAction(String command, String text,
+                         String description, String imageName,
+                         KeyStroke key) {
+      super(GUIGlobals.getImage(imageName));
+      this.command = command;
+      putValue(NAME, text);
+      putValue(ACCELERATOR_KEY, key);
+      putValue(SHORT_DESCRIPTION, Globals.lang(description));
+    }
+
+      public GeneralAction(String command, String text) {
+          putValue(NAME, text);
+          this.command = command;
+      }
+
+      public GeneralAction(String command, String text, KeyStroke key) {
+          this.command = command;
+          putValue(NAME, text);
+          putValue(ACCELERATOR_KEY, key);
+      }
+
+      public GeneralAction(String command, String text, String description) {
+          this.command = command;
+          ImageIcon icon = GUIGlobals.getImage(command);
+          if (icon != null)
+              putValue(SMALL_ICON, icon);
+          putValue(NAME, text);
+          putValue(SHORT_DESCRIPTION, Globals.lang(description));
+      }
+
+      public GeneralAction(String command, String text, String description, KeyStroke key) {
+          this.command = command;
+          ImageIcon icon = GUIGlobals.getImage(command);
+          if (icon != null)
+              putValue(SMALL_ICON, icon);
+          putValue(NAME, text);
+          putValue(SHORT_DESCRIPTION, Globals.lang(description));
+          putValue(ACCELERATOR_KEY, key);
+      }
+
+  /*    public GeneralAction(String command, String text, String description,
+                           URL imageUrl, KeyStroke key) {
+      this.command = command;
+        ImageIcon icon = GUIGlobals.getImage(command);
+        if (icon != null)
+            putValue(SMALL_ICON, icon);
+      putValue(NAME, text);
+      putValue(SHORT_DESCRIPTION, Globals.lang(description));
+        putValue(ACCELERATOR_KEY, key);
+    }*/
+
+    public void actionPerformed(ActionEvent e) {
+      if (tabbedPane.getTabCount() > 0) {
+        try {
+          ( (BasePanel) (tabbedPane.getSelectedComponent ()))
+              .runCommand(command);
+        }
+        catch (Throwable ex) {
+          ex.printStackTrace();
+        }
+      }
+      else {
+        Util.pr("Action '" + command + "' must be disabled when no "
+                + "database is open.");
+      }
+    }
+  }
+
+  /** This got removed when we introduced SearchManager2.
+       class IncrementalSearchAction extends AbstractAction {
+    public IncrementalSearchAction() {
+   super("Incremental search", new ImageIcon(GUIGlobals.searchIconFile));
+   putValue(SHORT_DESCRIPTION, Globals.lang("Start incremental search"));
+   putValue(ACCELERATOR_KEY, prefs.getKey("Incremental search"));
+    }
+    public void actionPerformed(ActionEvent e) {
+   if (tabbedPane.getTabCount() > 0)
+     searchManager.startIncrementalSearch();
+    }
+       }
+
+       class SearchAction extends AbstractAction {
+    public SearchAction() {
+   super("Search", new ImageIcon(GUIGlobals.searchIconFile));
+   putValue(SHORT_DESCRIPTION, Globals.lang("Start search"));
+   putValue(ACCELERATOR_KEY, prefs.getKey("Search"));
+    }
+    public void actionPerformed(ActionEvent e) {
+   if (tabbedPane.getTabCount() > 0)
+     searchManager.startSearch();
+    }
+       }
+   */
+
+  class NewEntryAction
+      extends MnemonicAwareAction {
+
+    String type = null; // The type of item to create.
+    KeyStroke keyStroke = null; // Used for the specific instances.
+
+    public NewEntryAction(KeyStroke key) {
+      // This action leads to a dialog asking for entry type.
+      super(GUIGlobals.getImage("add"));
+      putValue(NAME, "New entry");
+      putValue(ACCELERATOR_KEY, key);
+      putValue(SHORT_DESCRIPTION, Globals.lang("New BibTeX entry"));
+    }
+
+    public NewEntryAction(String type_) {
+      // This action leads to the creation of a specific entry.
+      putValue(NAME, Util.nCase(type_));
+      type = type_;
+    }
+
+    public NewEntryAction(String type_, KeyStroke key) {
+        // This action leads to the creation of a specific entry.
+        putValue(NAME, Util.nCase(type_));
+        putValue(ACCELERATOR_KEY, key);
+        type = type_;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+      String thisType = type;
+      if (thisType == null) {
+        EntryTypeDialog etd = new EntryTypeDialog(JabRefFrame.this);
+        Util.placeDialog(etd, JabRefFrame.this);
+        etd.setVisible(true);
+        BibtexEntryType tp = etd.getChoice();
+        if (tp == null) {
+          return;
+        }
+        thisType = tp.getName();
+      }
+
+      if (tabbedPane.getTabCount() > 0) {
+        ( (BasePanel) (tabbedPane.getSelectedComponent()))
+            .newEntry(BibtexEntryType.getType(thisType));
+      }
+      else {
+        Util.pr("Action 'New entry' must be disabled when no "
+                + "database is open.");
+      }
+    }
+  }
+
+  /*
+       private void setupDatabaseLayout() {
+    // This method is called whenever this frame has been provided
+    // with a database, and completes the layout.
+
+
+    if (file != null)
+   setTitle(GUIGlobals.baseTitle+file.getName());
+    else
+    setTitle(GUIGlobals.untitledTitle);
+
+    //DragNDropManager dndm = new DragNDropManager(this);
+
+    //setNonEmptyState();
+    Util.pr("JabRefFrame: Must set non-empty state.");
+    }*/
+
+  /**
+   * Refresh import menus.
+   */
+  public void setUpImportMenus() {
+    setUpImportMenu(importMenu, false);
+    setUpImportMenu(importNewMenu, true);
+  }
+
+  private void fillMenu() {
+      //mb.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH);
+      mb.setBorder(null);
+      JMenu file = subMenu("File"),
+              sessions = subMenu("Sessions"),
+              edit = subMenu("Edit"),
+              search = subMenu("Search"),
+              bibtex = subMenu("BibTeX"),
+              view = subMenu("View"),
+              tools = subMenu("Tools"),
+              //web = subMenu("Web search"),
+              options = subMenu("Options"),
+              newSpec = subMenu("New entry..."),
+              helpMenu = subMenu("Help");
+
+      setUpImportMenus();
+
+      newDatabaseMenu.add(newDatabaseAction);
+      newDatabaseMenu.add(newSubDatabaseAction);
+
+      file.add(newDatabaseAction);
+      file.add(open); //opendatabaseaction
+      file.add(mergeDatabaseAction);
+      file.add(save);
+      file.add(saveAs);
+      file.add(saveAll);
+      file.add(saveSelectedAs);
+      file.addSeparator();
+      //file.add(importMenu);
+      //file.add(importNewMenu);
+      file.add(importNew);
+      file.add(importCurrent);
+      file.add(exportAll);
+      file.add(exportSelected);
+      file.add(dbConnect);
+      file.add(dbImport);
+      file.add(dbExport);
+
+      file.addSeparator();
+      file.add(databaseProperties);
+      file.addSeparator();
+
+      sessions.add(loadSessionAction);
+      sessions.add(saveSessionAction);
+      file.add(sessions);
+      file.add(fileHistory);
+      //file.addSeparator();
+
+      file.addSeparator();
+      file.add(close);
+      file.add(new MinimizeToSysTrayAction());
+      file.add(quit);
+      mb.add(file);
+      //edit.add(test);
+      edit.add(undo);
+      edit.add(redo);
+      edit.addSeparator();
+
+      edit.add(cut);
+      edit.add(copy);
+      edit.add(paste);
+      //edit.add(remove);
+      edit.add(delete);
+      edit.add(copyKey);
+      edit.add(copyCiteKey);
+      edit.add(copyKeyAndTitle);
+      //edit.add(exportToClipboard);
+      edit.addSeparator();
+      edit.add(mark);
+      JMenu markSpecific = subMenu("Mark specific color");
+      for (int i=0; i<Util.MAX_MARKING_LEVEL; i++)
+          markSpecific.add(new MarkEntriesAction(this, i).getMenuItem());
+      edit.add(markSpecific);
+      edit.add(unmark);
+      edit.add(unmarkAll); 
+      edit.addSeparator();
+      if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED)) {
+    	  JMenu m;
+    	  if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING)) {
+	    	  m = new JMenu();
+	    	  RightClickMenu.populateSpecialFieldMenu(m, Rank.getInstance(), this);
+	    	  edit.add(m);
+    	  }
+    	  if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE)) {
+    		  edit.add(toggleRelevance);
+    	  }
+    	  if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY)) {
+    		  edit.add(toggleQualityAssured);
+    	  }
+    	  if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY)) {
+    		  m = new JMenu();
+    		  RightClickMenu.populateSpecialFieldMenu(m, Priority.getInstance(), this);
+    		  edit.add(m);
+    	  }
+      }
+      edit.addSeparator();
+      edit.add(manageKeywords);
+      edit.add(selectAll);
+      mb.add(edit);
+
+      search.add(normalSearch);
+      search.add(incrementalSearch);
+      search.add(replaceAll);
+      search.add(massSetField);
+      search.addSeparator();
+      search.add(dupliCheck);
+      search.add(resolveDuplicateKeys);
+      //search.add(strictDupliCheck);
+      search.add(autoSetFile);
+      search.addSeparator();
+      GeneralFetcher generalFetcher = new GeneralFetcher(sidePaneManager, this, fetchers);
+      search.add(generalFetcher.getAction());
+      if (prefs.getBoolean("webSearchVisible")) {
+          sidePaneManager.register(generalFetcher.getTitle(), generalFetcher);
+          sidePaneManager.show(generalFetcher.getTitle());
+      }
+      mb.add(search);
+
+      view.add(back);
+      view.add(forward);
+      view.add(focusTable);
+      view.add(nextTab);
+      view.add(prevTab);
+      view.add(sortTabs);
+      view.addSeparator();
+      view.add(increaseFontSize);
+      view.add(decreseFontSize);
+      view.addSeparator();
+      view.add(toggleGroups);
+      view.add(togglePreview);
+      view.add(switchPreview);
+      view.addSeparator();
+      view.add(toggleHighlightAny);
+      view.add(toggleHighlightAll);
+      mb.add(view);
+
+      bibtex.add(newEntryAction);
+      for (int i = 0; i < newSpecificEntryAction.length; i++) {
+          newSpec.add(newSpecificEntryAction[i]);
+      }
+      bibtex.add(newSpec);
+      bibtex.add(plainTextImport);
+      bibtex.addSeparator();
+      bibtex.add(editEntry);
+      bibtex.add(editPreamble);
+      bibtex.add(editStrings);
+      mb.add(bibtex);
+      
+      tools.add(makeKeyAction);
+      tools.add(Cleanup);
+      //tools.add(downloadFullText);
+      tools.add(newSubDatabaseAction);
+      tools.add(writeXmpAction);
+      OpenOfficePanel otp = OpenOfficePanel.getInstance();
+      otp.init(this, sidePaneManager);
+      tools.add(otp.getMenuItem());
+      tools.add(pushExternalButton.getMenuAction());
+      tools.addSeparator();
+      tools.add(manageSelectors);
+      tools.addSeparator();
+      tools.add(openFile);
+      tools.add(openPdf);
+      tools.add(openUrl);
+      //tools.add(openSpires);
+      tools.add(findUnlinkedFiles);
+      tools.addSeparator();
+      tools.add(abbreviateIso);
+      tools.add(abbreviateMedline);
+      tools.add(unabbreviate);
+      tools.addSeparator();
+      checkAndFix.add(autoSetPdf);
+      checkAndFix.add(autoSetPs);
+      checkAndFix.add(integrityCheckAction);
+      tools.add(checkAndFix);
+
+      mb.add(tools);
+
+
+      options.add(showPrefs);
+      AbstractAction customizeAction = new CustomizeEntryTypeAction();
+      AbstractAction genFieldsCustomization = new GenFieldsCustomizationAction();
+      options.add(customizeAction);
+      options.add(genFieldsCustomization);
+      options.add(customExpAction);
+      options.add(customImpAction);
+      options.add(customFileTypesAction);
+      options.add(manageJournals);
+
+      /*options.add(new AbstractAction("Font") {
+      public void actionPerformed(ActionEvent e) {
+          Font f=new FontSelectorDialog
+        (JabRefFrame.this, GUIGlobals.CURRENTFONT).getSelectedFont();
+       if(f==null)
+        return;
+       else
+        GUIGlobals.CURRENTFONT=f;
+       // updatefont
+       prefs.put("fontFamily", GUIGlobals.CURRENTFONT.getFamily());
+       prefs.putInt("fontStyle", GUIGlobals.CURRENTFONT.getStyle());
+       prefs.putInt("fontSize", GUIGlobals.CURRENTFONT.getSize());
+       if (tabbedPane.getTabCount() > 0) {
+        for (int i=0; i<tabbedPane.getTabCount(); i++) {
+         baseAt(i).entryTable.updateFont();
+         baseAt(i).refreshTable();
+        }
+       }
+      }
+      });*/
+
+      pluginMenu.add(installPlugin);
+
+      //pluginMenu.setEnabled(false);
+      mb.add(pluginMenu);
+
+
+      //options.add(selectKeys);
+      mb.add(options);
+
+      helpMenu.add(help);
+      helpMenu.add(contents);
+      helpMenu.addSeparator();
+      helpMenu.add(errorConsole);
+      helpMenu.addSeparator();
+      helpMenu.add(about);
+      mb.add(helpMenu);
+  }
+
+    public static JMenu subMenu(String name) {
+        name = Globals.menuTitle(name);
+        int i = name.indexOf('&');
+        JMenu res;
+        if (i >= 0) {
+            res = new JMenu(name.substring(0, i)+name.substring(i+1));
+            char mnemonic = Character.toUpperCase(name.charAt(i+1));
+            res.setMnemonic((int)mnemonic);
+        }
+        else res = new JMenu(name);
+
+        return res;
+    }
+
+    public void addParserResult(ParserResult pr, boolean raisePanel) {
+        if (pr.toOpenTab()) {
+            // Add the entries to the open tab.
+            BasePanel panel = basePanel();
+            if (panel == null) {
+                // There is no open tab to add to, so we create a new tab:
+                addTab(pr.getDatabase(), pr.getFile(), pr.getMetaData(), pr.getEncoding(), raisePanel);
+            } else {
+                List<BibtexEntry> entries = new ArrayList<BibtexEntry>(pr.getDatabase().getEntries());
+                addImportedEntries(panel, entries, "", false);
+            }
+        } else {
+            addTab(pr.getDatabase(), pr.getFile(), pr.getMetaData(), pr.getEncoding(), raisePanel);
+        }
+    }
+
+    public void addPluginMenuItem(JMenuItem item) {
+        if (!addedToPluginMenu) {
+            pluginMenu.addSeparator();
+            addedToPluginMenu = true;
+        }
+        pluginMenu.add(item);
+    }
+
+  private void createToolBar() {
+    tlb.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH);
+    tlb.setBorder(null);
+    tlb.setRollover(true);
+
+    //tlb.setBorderPainted(true);
+    //tlb.setBackground(GUIGlobals.lightGray);
+    //tlb.setForeground(GUIGlobals.lightGray);
+    tlb.setFloatable(false);
+    tlb.addAction(newDatabaseAction);
+    tlb.addAction(open);
+    tlb.addAction(save);
+    tlb.addAction(saveAll);
+    //tlb.addAction(dbConnect);
+    //tlb.addAction(dbExport);
+    
+    tlb.addSeparator();
+    tlb.addAction(cut);
+    tlb.addAction(copy);
+    tlb.addAction(paste);
+    tlb.addAction(undo);
+    tlb.addAction(redo);
+
+    tlb.addSeparator();
+    tlb.addAction(back);
+    tlb.addAction(forward);
+    tlb.addSeparator();
+    tlb.addAction(newEntryAction);
+    tlb.addAction(editEntry);
+    tlb.addAction(editPreamble);
+    tlb.addAction(editStrings);
+    tlb.addAction(makeKeyAction);
+    tlb.addAction(Cleanup);
+
+    tlb.addSeparator();
+    tlb.addAction(mark);
+    tlb.addAction(unmark);
+    tlb.addSeparator();
+    if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED)) {
+    	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING)) {
+    		tlb.add(net.sf.jabref.specialfields.SpecialFieldDropDown.generateSpecialFieldButtonWithDropDown(Rank.getInstance(), this));
+    	}
+    	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE)) {
+    		tlb.addAction(toggleRelevance);
+    	}
+    	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY)) {
+    		tlb.addAction(toggleQualityAssured);
+    	}
+    	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY)) {
+    		tlb.add(net.sf.jabref.specialfields.SpecialFieldDropDown.generateSpecialFieldButtonWithDropDown(Priority.getInstance(), this));
+    	}
+    }
+
+    tlb.addSeparator();
+    searchToggle = new JToggleButton(toggleSearch);
+    searchToggle.setText(null);
+    if (!Globals.ON_MAC)
+        searchToggle.setMargin(marg);
+    tlb.add(searchToggle);
+
+    previewToggle = new JToggleButton(togglePreview);
+    previewToggle.setText(null);
+    if (!Globals.ON_MAC)
+        previewToggle.setMargin(marg);
+    tlb.add(previewToggle);
+    tlb.addSeparator();
+
+    groupToggle = new JToggleButton(toggleGroups);
+    groupToggle.setText(null);
+    if (!Globals.ON_MAC)
+        groupToggle.setMargin(marg);
+    tlb.add(groupToggle);
+
+
+    highlightAny = new JToggleButton(toggleHighlightAny);
+    highlightAny.setText(null);
+    if (!Globals.ON_MAC)
+        highlightAny.setMargin(marg);
+    tlb.add(highlightAny);
+    highlightAll = new JToggleButton(toggleHighlightAll);
+    highlightAll.setText(null);
+    if (!Globals.ON_MAC)
+        highlightAll.setMargin(marg);
+    tlb.add(highlightAll);
+
+    tlb.addSeparator();
+
+      // Removing the separate push-to buttons, replacing them by the
+      // multipurpose button:
+      //tlb.addAction(emacsPushAction);
+      //tlb.addAction(lyxPushAction);
+      //tlb.addAction(winEdtPushAction);
+      tlb.add(pushExternalButton.getComponent());
+
+      tlb.addAction(openFile);
+    //tlb.addAction(openPdf);
+    //tlb.addAction(openUrl);
+
+    //tlb.addSeparator();
+    //tlb.addAction(showPrefs);
+    tlb.add(Box.createHorizontalGlue());
+    //tlb.add(new JabRefLabel(GUIGlobals.frameTitle+" "+GUIGlobals.version));
+
+    tlb.addAction(closeDatabaseAction);
+    //Insets margin = new Insets(0, 0, 0, 0);
+    //for (int i=0; i<tlb.getComponentCount(); i++)
+    //  ((JButton)tlb.getComponentAtIndex(i)).setMargin(margin);
+
+  }
+
+  
+
+ public void output(final String s) {
+      SwingUtilities.invokeLater(new Runnable() {
+          public void run() {
+              statusLine.setText(s);
+              statusLine.repaint();
+          }
+      });
+  }
+
+  public void stopShowingSearchResults() {
+    for (int i = 0; i < tabbedPane.getTabCount(); i++) {
+      baseAt(i).stopShowingSearchResults();
+    }
+  }
+
+  protected List<Object> openDatabaseOnlyActions = new LinkedList<Object>();
+  protected List<Object> severalDatabasesOnlyActions = new LinkedList<Object>();
+  
+    protected void initActions() {
+        openDatabaseOnlyActions = new LinkedList<Object>();
+        openDatabaseOnlyActions.addAll(Arrays.asList(new Object[] { manageSelectors,
+            mergeDatabaseAction, newSubDatabaseAction, close, save, saveAs, saveSelectedAs, undo,
+            redo, cut, delete, copy, paste, mark, unmark, unmarkAll, editEntry,
+            selectAll, copyKey, copyCiteKey, copyKeyAndTitle, editPreamble, editStrings, toggleGroups, toggleSearch,
+            makeKeyAction, normalSearch,
+            incrementalSearch, replaceAll, importMenu, exportMenu,
+			/* openSpires wasn't being supported so no point in supporting
+			 * openInspire */
+                openPdf, openUrl, openFile, openSpires, /*openInspire,*/ togglePreview, dupliCheck, /*strictDupliCheck,*/ highlightAll,
+            highlightAny, newEntryAction, plainTextImport, massSetField, manageKeywords,
+            closeDatabaseAction, switchPreview, integrityCheckAction, autoSetPdf, autoSetPs,
+            toggleHighlightAny, toggleHighlightAll, databaseProperties, abbreviateIso,
+            abbreviateMedline, unabbreviate, exportAll, exportSelected,
+            importCurrent, saveAll, dbConnect, dbExport, focusTable}));
+        
+        openDatabaseOnlyActions.addAll(fetcherActions);
+
+        openDatabaseOnlyActions.addAll(Arrays.asList(newSpecificEntryAction));
+
+        severalDatabasesOnlyActions = new LinkedList<Object>();
+        severalDatabasesOnlyActions.addAll(Arrays
+            .asList(new Action[] { nextTab, prevTab, sortTabs }));
+
+        tabbedPane.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent event) {
+                updateEnabledState();
+            }
+        });
+        
+        
+
+    }
+
+    /**
+     * Takes a list of Object and calls the method setEnabled on them, depending on whether it is an Action or a Component.
+     * @param list List that should contain Actions and Components.
+     * @param enabled 
+     */
+    public static void setEnabled(List<Object> list, boolean enabled) {
+        for (Object o : list){
+            if (o instanceof Action)
+                ((Action)o).setEnabled(enabled);
+            if (o instanceof Component)
+                ((Component)o).setEnabled(enabled);
+        }
+    }
+
+    protected int previousTabCount = -1;
+    
+    /**
+     * Enable or Disable all actions based on the number of open tabs.
+     * 
+     * The action that are affected are set in initActions.
+     */
+    protected void updateEnabledState() {
+        int tabCount = tabbedPane.getTabCount();
+        if (tabCount != previousTabCount){
+            previousTabCount = tabCount;
+            setEnabled(openDatabaseOnlyActions, tabCount > 0);
+            setEnabled(severalDatabasesOnlyActions, tabCount > 1);
+        }
+        if (tabCount == 0) {
+            back.setEnabled(false);
+            forward.setEnabled(false);
+        }
+    }
+
+  /**
+   * This method causes all open BasePanels to set up their tables
+   * anew. When called from PrefsDialog3, this updates to the new
+   * settings.
+   */
+  public void setupAllTables() {
+    // This action can be invoked without an open database, so
+    // we have to check if we have one before trying to invoke
+    // methods to execute changes in the preferences.
+
+    // We want to notify all tabs about the changes to
+    // avoid problems when changing the column set.
+    for (int i = 0; i < tabbedPane.getTabCount(); i++) {
+      BasePanel bf = baseAt(i);
+
+      // Update tables:
+      if (bf.database != null) {
+        bf.setupMainPanel();
+
+      }
+
+    }
+  }
+
+
+    public BasePanel addTab(BibtexDatabase db, File file, MetaData metaData, String encoding, boolean raisePanel) {
+        // ensure that non-null parameters are really non-null
+        if (metaData == null) metaData = new MetaData();
+        if (encoding == null) encoding = Globals.prefs.get("defaultEncoding");
+
+        BasePanel bp = new BasePanel(JabRefFrame.this, db, file, metaData, encoding);
+        addTab(bp, file, raisePanel);
+        return bp;
+    }
+
+
+    public void addTab(BasePanel bp, File file, boolean raisePanel) {
+        String title;
+        if (file == null ) {
+            title = Globals.lang(GUIGlobals.untitledTitle);
+            if (!bp.database().getEntries().isEmpty()) {
+                // if the database is not empty and no file is assigned,
+                // the database came from an import and has to be treated somehow
+                // -> mark as changed
+                // This also happens internally at basepanel to ensure consistency
+                title = title + "*";
+            }
+        } else {
+            title = file.getName();
+        }
+        tabbedPane.add(title, bp);
+        tabbedPane.setToolTipTextAt(tabbedPane.getTabCount()-1,
+                file != null ? file.getAbsolutePath() : null);
+        if (raisePanel) {
+            tabbedPane.setSelectedComponent(bp);
+        }
+    }
+
+    /**
+     * Signal closing of the current tab. Standard warnings will be given if the
+     * database has been changed.
+     */
+    public void closeCurrentTab() {
+        closeDatabaseAction.actionPerformed(null);
+    }
+
+    /**
+     * Close the current tab without giving any warning if the database has been changed.
+     */
+    public void closeCurrentTabNoWarning() {
+        closeDatabaseAction.close();
+    }
+
+  class SelectKeysAction
+      extends AbstractAction {
+    public SelectKeysAction() {
+      super(Globals.lang("Customize key bindings"));
+    }
+
+    public void actionPerformed(ActionEvent e) {
+      KeyBindingsDialog d = new KeyBindingsDialog
+          ( new HashMap<String, String>(prefs.getKeyBindings()),
+           prefs.getDefaultKeys());
+      d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+      d.pack(); //setSize(300,500);
+      Util.placeDialog(d, JabRefFrame.this);
+      d.setVisible(true);
+      if (d.getAction()) {
+        prefs.setNewKeyBindings(d.getNewKeyBindings());
+        JOptionPane.showMessageDialog
+            (JabRefFrame.this,
+             Globals.lang("Your new key bindings have been stored.") + "\n"
+             + Globals.lang("You must restart JabRef for the new key "
+                            + "bindings to work properly."),
+             Globals.lang("Key bindings changed"),
+             JOptionPane.INFORMATION_MESSAGE);
+      }
+    }
+  }
+
+  /**
+   * The action concerned with closing the window.
+   */
+  class CloseAction
+      extends MnemonicAwareAction {
+    public CloseAction() {
+      putValue(NAME, "Quit");
+      putValue(SHORT_DESCRIPTION, Globals.lang("Quit JabRef"));
+      putValue(ACCELERATOR_KEY, prefs.getKey("Quit JabRef"));
+      //putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_Q,
+      //    Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
+
+    }
+
+    public void actionPerformed(ActionEvent e) {
+      quit();
+    }
+  }
+
+  // The action for closing the current database and leaving the window open.
+    CloseDatabaseAction closeDatabaseAction = new CloseDatabaseAction();
+
+    class CloseDatabaseAction extends MnemonicAwareAction {
+        public CloseDatabaseAction() {
+            super(GUIGlobals.getImage("close"));
+            putValue(NAME, "Close database");
+            putValue(SHORT_DESCRIPTION, Globals.lang("Close the current database"));
+            putValue(ACCELERATOR_KEY, prefs.getKey("Close database"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            // Ask here if the user really wants to close, if the base
+            // has not been saved since last save.
+            boolean close = true;
+            if (basePanel() == null) { // when it is initially empty
+                return; // nbatada nov 7
+            }
+
+            if (basePanel().isBaseChanged()) {
+                int answer = JOptionPane.showConfirmDialog(JabRefFrame.this, Globals
+                    .lang("Database has changed. Do you want to save " + "before closing?"),
+                    Globals.lang("Save before closing"), JOptionPane.YES_NO_CANCEL_OPTION);
+                if ((answer == JOptionPane.CANCEL_OPTION) || (answer == JOptionPane.CLOSED_OPTION)) {
+                    close = false; // The user has cancelled.
+                }
+                if (answer == JOptionPane.YES_OPTION) {
+                    // The user wants to save.
+                    try {
+                        SaveDatabaseAction saveAction = new SaveDatabaseAction(basePanel());
+                        saveAction.runCommand();
+                        if (saveAction.isCancelled() || !saveAction.isSuccess())
+                            // The action either not cancelled or unsuccessful.
+                            // Break! 
+                            close = false;
+                        
+                    } catch (Throwable ex) {
+                        // Something prevented the file
+                        // from being saved. Break!!!
+                        close = false;
+                    }
+
+                }
+            }
+
+            if (close) {
+                close();
+            }
+        }
+
+        public void close() {
+            BasePanel pan = basePanel();
+            pan.cleanUp();
+            AutoSaveManager.deleteAutoSaveFile(pan); // Delete autosave
+            tabbedPane.remove(pan);
+            if (tabbedPane.getTabCount() > 0) {
+                markActiveBasePanel();
+            }
+            setWindowTitle();
+            updateEnabledState(); // Man, this is what I call a bug that this is not called.
+            output(Globals.lang("Closed database") + ".");
+            System.gc(); // Test
+        }
+    }
+
+
+  // The action concerned with opening a new database.
+  class NewDatabaseAction
+      extends MnemonicAwareAction {
+    public NewDatabaseAction() {
+        super(GUIGlobals.getImage("new"));
+        putValue(NAME, "New database");
+        putValue(SHORT_DESCRIPTION, Globals.lang("New BibTeX database"));
+        //putValue(MNEMONIC_KEY, GUIGlobals.newKeyCode);
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        // Create a new, empty, database.
+        BibtexDatabase database = new BibtexDatabase();
+        addTab(database, null, new MetaData(), Globals.prefs.get("defaultEncoding"), true);
+        output(Globals.lang("New database created."));
+    }
+  }
+
+    // The action concerned with generate a new (sub-)database from latex aux file.
+    class NewSubDatabaseAction extends MnemonicAwareAction
+    {
+      public NewSubDatabaseAction()
+      {
+        super(GUIGlobals.getImage("new"));
+        putValue(NAME, "New subdatabase based on AUX file" );
+        putValue( SHORT_DESCRIPTION, Globals.lang( "New BibTeX subdatabase" ) ) ;
+            //putValue(MNEMONIC_KEY, GUIGlobals.newKeyCode);
+      }
+
+      public void actionPerformed( ActionEvent e )
+      {
+        // Create a new, empty, database.
+
+        FromAuxDialog dialog = new FromAuxDialog(JabRefFrame.this, "", true, JabRefFrame.this.tabbedPane) ;
+
+        Util.placeDialog(dialog, JabRefFrame.this);
+        dialog.setVisible(true) ;
+
+        if (dialog.okPressed())
+        {
+          BasePanel bp = new BasePanel( JabRefFrame.this,
+                                        dialog.getGenerateDB(),   // database
+                                        null,                     // file
+                                        new MetaData(), Globals.prefs.get("defaultEncoding"));                     // meta data
+          tabbedPane.add( Globals.lang( GUIGlobals.untitledTitle ), bp ) ;
+          tabbedPane.setSelectedComponent( bp ) ;
+          output( Globals.lang( "New database created." ) ) ;
+        }
+      }
+    }
+
+
+    // The action should test the database and report errors/warnings
+    class IntegrityCheckAction extends AbstractAction
+    {
+      public IntegrityCheckAction()
+      {
+        super(Globals.menuTitle("Integrity check"),
+               GUIGlobals.getImage("integrityCheck")) ;
+               //putValue( SHORT_DESCRIPTION, "integrity" ) ;  //Globals.lang( "integrity" ) ) ;
+            //putValue(MNEMONIC_KEY, GUIGlobals.newKeyCode);
+      }
+
+      public void actionPerformed( ActionEvent e )
+      {
+       Object selComp = tabbedPane.getSelectedComponent() ;
+       if (selComp != null)
+       {
+         BasePanel bp = ( BasePanel ) selComp ;
+         BibtexDatabase refBase = bp.getDatabase() ;
+         if (refBase != null)
+         {
+             IntegrityWizard wizard = new IntegrityWizard(JabRefFrame.this, basePanel()) ;
+             Util.placeDialog(wizard, JabRefFrame.this);
+             wizard.setVisible(true) ;
+
+         }
+       }
+      }
+    }
+
+  // The action for opening the preferences dialog.
+  AbstractAction showPrefs = new ShowPrefsAction();
+
+  class ShowPrefsAction
+      extends MnemonicAwareAction {
+    public ShowPrefsAction() {
+      super(GUIGlobals.getImage("preferences"));
+      putValue(NAME, "Preferences");
+      putValue(SHORT_DESCRIPTION, Globals.lang("Preferences"));
+    }
+
+    public void actionPerformed(ActionEvent e) {
+      preferences();
+    }
+  }
+
+  /**
+     * This method does the job of adding imported entries into the active
+     * database, or into a new one. It shows the ImportInspectionDialog if
+     * preferences indicate it should be used. Otherwise it imports directly.
+     * 
+     * @param panel
+     *            The BasePanel to add to.
+     * @param entries
+     *            The entries to add.
+     * @param filename
+     *            Name of the file where the import came from.
+     * @param openInNew
+     *            Should the entries be imported into a new database?
+     */
+    public void addImportedEntries(final BasePanel panel, final List<BibtexEntry> entries,
+        String filename, final boolean openInNew) {
+        /*
+         * Use the import inspection dialog if it is enabled in preferences, and
+         * (there are more than one entry or the inspection dialog is also
+         * enabled for single entries):
+         */
+        if (Globals.prefs.getBoolean("useImportInspectionDialog") &&
+            (Globals.prefs.getBoolean("useImportInspectionDialogForSingle") || (entries.size() > 1))) {
+            SwingUtilities.invokeLater(new Runnable() {
+
+                public void run() {
+                    ImportInspectionDialog diag = new ImportInspectionDialog(JabRefFrame.this,
+                        panel, BibtexFields.DEFAULT_INSPECTION_FIELDS, Globals.lang("Import"),
+                        openInNew);
+                    diag.addEntries(entries);
+                    diag.entryListComplete();
+                    Util.placeDialog(diag, JabRefFrame.this);
+                    diag.setVisible(true);
+                    diag.toFront();
+                }
+            });
+
+        } else {
+            JabRefFrame.this.addBibEntries(entries, filename, openInNew);
+            if ((panel != null) && (entries.size() == 1)) {
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                        panel.highlightEntry(entries.get(0));
+                    }
+                });
+            }
+        }
+    }
+
+    /**
+     * Adds the entries to the database, possibly checking for duplicates first.
+     * @param filename If non-null, a message is printed to the status line describing
+     * how many entries were imported, and from which file. If null, the message will not
+     * be printed.
+     * @param intoNew Determines if the entries will be put in a new database or in the current
+     * one.
+     */
+  public int addBibEntries(List<BibtexEntry> bibentries, String filename,
+                           boolean intoNew) {
+          if (bibentries == null || bibentries.size() == 0) {
+
+      // No entries found. We need a message for this.
+      JOptionPane.showMessageDialog(JabRefFrame.this, Globals.lang("No entries found. Please make sure you are "
+                                                      +"using the correct import filter."), Globals.lang("Import failed"),
+                                    JOptionPane.ERROR_MESSAGE);
+      return 0;
+    }
+
+      int addedEntries = 0;
+
+    // Set owner and timestamp fields:
+    Util.setAutomaticFields(bibentries, Globals.prefs.getBoolean("overwriteOwner"),
+            Globals.prefs.getBoolean("overwriteTimeStamp"), Globals.prefs.getBoolean("markImportedEntries"));
+
+    if (intoNew || (tabbedPane.getTabCount() == 0)) {
+      // Import into new database.
+      BibtexDatabase database = new BibtexDatabase();
+      for (BibtexEntry entry : bibentries){
+        try {
+          entry.setId(Util.createNeutralId());
+          database.insertEntry(entry);
+        }
+        catch (KeyCollisionException ex) {
+          //ignore
+          System.err.println("KeyCollisionException [ addBibEntries(...) ]");
+        }
+      }
+      // Metadata are only put in bibtex files, so we will not find it
+      // in imported files. We therefore pass in an empty MetaData:
+      BasePanel bp = new BasePanel(JabRefFrame.this, database, null, new MetaData(), Globals.prefs.get("defaultEncoding"));
+      /*
+            if (prefs.getBoolean("autoComplete")) {
+            db.setCompleters(autoCompleters);
+            }
+       */
+      addedEntries = database.getEntryCount();
+      tabbedPane.add(GUIGlobals.untitledTitle, bp);
+      bp.markBaseChanged();
+      tabbedPane.setSelectedComponent(bp);
+      if (filename != null)
+          output(Globals.lang("Imported database") + " '" + filename + "' " +
+                 Globals.lang("with") + " " +
+                 database.getEntryCount() + " " +
+                 Globals.lang("entries into new database") + ".");
+    }
+    else {
+      // Import into current database.
+      boolean checkForDuplicates = true;
+      BasePanel basePanel = basePanel();
+      BibtexDatabase database = basePanel.database;
+      int oldCount = database.getEntryCount();
+      NamedCompound ce = new NamedCompound(Globals.lang("Import entries"));
+
+      mainLoop: 
+      for (BibtexEntry entry : bibentries){
+        boolean dupli = false;
+        // Check for duplicates among the current entries:
+        if (checkForDuplicates) {
+            loop: for (Iterator<String> i2=database.getKeySet().iterator();
+                       i2.hasNext();) {
+                BibtexEntry existingEntry = database.getEntryById(i2.next());
+                if (DuplicateCheck.isDuplicate(entry, existingEntry
+                )) {
+                    DuplicateResolverDialog drd = new DuplicateResolverDialog
+                        (JabRefFrame.this, existingEntry, entry, DuplicateResolverDialog.IMPORT_CHECK);
+                    drd.setVisible(true);
+                    int res = drd.getSelected();
+                    if (res == DuplicateResolverDialog.KEEP_LOWER)   {
+                        dupli = true;
+                    }
+                    else if (res == DuplicateResolverDialog.KEEP_UPPER) {
+                        database.removeEntry(existingEntry.getId());
+                        ce.addEdit(new UndoableRemoveEntry
+                                   (database, existingEntry, basePanel));
+                    } else if (res == DuplicateResolverDialog.BREAK) {
+                        break mainLoop;
+                    }
+                    break loop;
+                }
+            }
+        }
+
+        if (!dupli) {
+            try {
+                entry.setId(Util.createNeutralId());
+                database.insertEntry(entry);
+                ce.addEdit(new UndoableInsertEntry
+                           (database, entry, basePanel));
+                addedEntries++;
+            }
+            catch (KeyCollisionException ex) {
+                //ignore
+                System.err.println("KeyCollisionException [ addBibEntries(...) ]");
+            }
+        }
+      }
+        if (addedEntries > 0) {
+            ce.end();
+            basePanel.undoManager.addEdit(ce);
+            basePanel.markBaseChanged();
+            if (filename != null)
+                output(Globals.lang("Imported database") + " '" + filename + "' " +
+                     Globals.lang("with") + " " +
+                     (database.getEntryCount() - oldCount) + " " +
+                     Globals.lang("entries into new database") + ".");
+        }
+
+    }
+
+    return addedEntries;
+  }
+
+  private void setUpImportMenu(JMenu importMenu, boolean intoNew_) {
+      final boolean intoNew = intoNew_;
+      importMenu.removeAll();
+
+      // Add a menu item for autodetecting import format:
+      importMenu.add(new ImportMenuItem(JabRefFrame.this, intoNew));
+
+      // Add custom importers
+      importMenu.addSeparator();
+
+      SortedSet<ImportFormat> customImporters = Globals.importFormatReader.getCustomImportFormats();
+      JMenu submenu = new JMenu(Globals.lang("Custom importers"));
+      submenu.setMnemonic(KeyEvent.VK_S);
+      
+      // Put in all formatters registered in ImportFormatReader:
+        for (ImportFormat imFo : customImporters){
+            submenu.add(new ImportMenuItem(JabRefFrame.this, intoNew, imFo));
+        }
+      
+      if (customImporters.size() > 0)
+          submenu.addSeparator();
+      
+      submenu.add(customImpAction);
+
+      importMenu.add(submenu);
+      importMenu.addSeparator();
+
+      // Put in all formatters registered in ImportFormatReader:
+      for (ImportFormat imFo : Globals.importFormatReader.getBuiltInInputFormats()){
+          importMenu.add(new ImportMenuItem(JabRefFrame.this, intoNew, imFo));
+      }
+  }
+
+
+    public FileHistory getFileHistory() {
+        return fileHistory;
+    }
+
+
+    /**
+     * Set the preview active state for all BasePanel instances.
+     * @param enabled
+     */
+    public void setPreviewActive(boolean enabled) {
+        for (int i=0; i<tabbedPane.getTabCount(); i++) {
+            baseAt(i).setPreviewActive(enabled);
+        }
+    }
+
+
+   public void removeCachedEntryEditors() {
+       for (int j=0; j<tabbedPane.getTabCount(); j++) {
+            BasePanel bp = (BasePanel)tabbedPane.getComponentAt(j);
+            bp.entryEditors.clear();
+       }
+   }
+
+    /**
+     * This method shows a wait cursor and blocks all input to the JFrame's contents.
+     */
+    public void block() {
+        getGlassPane().setVisible(true);
+    }
+
+    /**
+     * This method reverts the cursor to normal, and stops blocking input to the JFrame's contents.
+     * There are no adverse effects of calling this method redundantly.
+     */
+    public void unblock() {
+        getGlassPane().setVisible(false);
+    }
+
+    /** Set the visibility of the progress bar in the right end of the
+      * status line at the bottom of the frame.
+      *
+      * If not called on the event dispatch thread, this method uses
+      * SwingUtilities.invokeLater() to do the actual operation on the EDT.
+      */
+    public void setProgressBarVisible(final boolean visible) {
+    if (SwingUtilities.isEventDispatchThread())
+        progressBar.setVisible(visible);
+    else SwingUtilities.invokeLater(new Runnable() {
+        public void run() {
+            progressBar.setVisible(visible);
+        }
+        });
+    }
+
+
+    /**
+     * Sets the current value of the progress bar.
+      *
+      * If not called on the event dispatch thread, this method uses
+      * SwingUtilities.invokeLater() to do the actual operation on the EDT.
+     */
+    public void setProgressBarValue(final int value) {
+    if (SwingUtilities.isEventDispatchThread())
+        progressBar.setValue(value);
+    else SwingUtilities.invokeLater(new Runnable() {
+        public void run() {
+            progressBar.setValue(value);
+        }
+        });
+
+    }
+
+
+    /**
+     * Sets the indeterminate status of the progress bar.
+     *
+     * If not called on the event dispatch thread, this method uses
+     * SwingUtilities.invokeLater() to do the actual operation on the EDT.
+     */
+    public void setProgressBarIndeterminate(final boolean value) {
+        if (SwingUtilities.isEventDispatchThread())
+            progressBar.setIndeterminate(value);
+        else SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                progressBar.setIndeterminate(value);
+            }
+        });
+
+    }
+
+    /**
+     * Sets the maximum value of the progress bar. Always call this method
+     * before using the progress bar, to set a maximum value appropriate to
+     * the task at hand.
+      *
+      * If not called on the event dispatch thread, this method uses
+      * SwingUtilities.invokeLater() to do the actual operation on the EDT.
+     */
+    public void setProgressBarMaximum(final int value) {
+    if (SwingUtilities.isEventDispatchThread())
+        progressBar.setMaximum(value);
+    else SwingUtilities.invokeLater(new Runnable() {
+        public void run() {
+            progressBar.setMaximum(value);
+        }
+        });
+
+
+    }
+
+class SaveSessionAction
+      extends MnemonicAwareAction {
+    public SaveSessionAction() {
+      super(GUIGlobals.getImage("save"));
+      putValue(NAME, "Save session");
+      putValue(ACCELERATOR_KEY, prefs.getKey("Save session"));
+    }
+
+    public void actionPerformed(ActionEvent e) {
+      // Here we store the names of allcurrent filea. If
+      // there is no current file, we remove any
+      // previously stored file name.
+      Vector<String> filenames = new Vector<String>();
+      if (tabbedPane.getTabCount() > 0) {
+        for (int i = 0; i < tabbedPane.getTabCount(); i++) {
+          if (tabbedPane.getTitleAt(i).equals(GUIGlobals.untitledTitle)) {
+            tabbedPane.setSelectedIndex(i);
+            int answer = JOptionPane.showConfirmDialog
+                (JabRefFrame.this, Globals.lang
+                 ("This untitled database must be saved first to be "
+                  + "included in the saved session. Save now?"),
+                 Globals.lang("Save database"),
+                 JOptionPane.YES_NO_OPTION);
+            if (answer == JOptionPane.YES_OPTION) {
+              // The user wants to save.
+              try {
+                basePanel().runCommand("save");
+              }
+              catch (Throwable ex) {}
+            }
+          }
+          if (baseAt(i).getFile() != null) {
+            filenames.add(baseAt(i).getFile().getPath());
+          }
+        }
+      }
+
+      if (filenames.size() == 0) {
+        output(Globals.lang("Not saved (empty session)") + ".");
+        return;
+      }
+      else {
+        String[] names = new String[filenames.size()];
+        for (int i = 0; i < filenames.size(); i++) {
+          names[i] = filenames.elementAt(i);
+        }
+        prefs.putStringArray("savedSession", names);
+        output(Globals.lang("Saved session") + ".");
+      }
+
+    }
+  }
+
+  class LoadSessionAction
+      extends MnemonicAwareAction {
+      boolean running = false;
+    public LoadSessionAction() {
+      super(GUIGlobals.getImage("loadSession"));
+      putValue(NAME, "Load session");
+      putValue(ACCELERATOR_KEY, prefs.getKey("Load session"));
+    }
+
+    public void actionPerformed(ActionEvent e) {
+      if (prefs.get("savedSession") == null) {
+        output(Globals.lang("No saved session found."));
+        return;
+      }
+      if (running)
+          return;
+      else running = true;
+      output(Globals.lang("Loading session..."));
+      (new Thread() {
+        public void run() {
+          HashSet<String> currentFiles = new HashSet<String>();
+          if (tabbedPane.getTabCount() > 0) {
+            for (int i = 0; i < tabbedPane.getTabCount(); i++) {
+                if (baseAt(i).getFile() != null)
+                    currentFiles.add(baseAt(i).getFile().getPath());
+            }
+          }
+          int i0 = tabbedPane.getTabCount();
+          String[] names = prefs.getStringArray("savedSession");
+          for (int i = 0; i < names.length; i++) {
+            if (!currentFiles.contains(names[i])) {
+              File file = new File(names[i]);
+              if (file.exists()) {
+                //Util.pr("Opening last edited file:"
+                //+fileToOpen.getName());
+                open.openIt(file, i == 0);
+              }
+            }
+          }
+          output(Globals.lang("Files opened") + ": " +
+                 (tabbedPane.getTabCount() - i0));
+          running = false;
+        }
+      }).start();
+
+    }
+  }
+
+  class ChangeTabAction
+      extends MnemonicAwareAction {
+    private boolean next;
+    public ChangeTabAction(boolean next) {
+      putValue(NAME, next ? "Next tab" : "Previous tab");
+      this.next = next;
+      //Util.pr(""+prefs.getKey("Next tab"));
+      putValue(ACCELERATOR_KEY,
+               (next ? prefs.getKey("Next tab") : prefs.getKey("Previous tab")));
+    }
+
+    public void actionPerformed(ActionEvent e) {
+      int i = tabbedPane.getSelectedIndex();
+      int newI = (next ? i + 1 : i - 1);
+      if (newI < 0) {
+        newI = tabbedPane.getTabCount() - 1;
+      }
+      if (newI == tabbedPane.getTabCount()) {
+        newI = 0;
+      }
+      tabbedPane.setSelectedIndex(newI);
+    }
+  }
+
+  /**
+   * Class for handling general actions; cut, copy and paste. The focused component is
+   * kept track of by Globals.focusListener, and we call the action stored under the
+   * relevant name in its action map.
+   */
+  class EditAction
+      extends MnemonicAwareAction {
+    private String command;
+    public EditAction(String command, URL icon) {
+      super(new ImageIcon(icon));
+      this.command = command;
+      String nName = Util.nCase(command);
+      putValue(NAME, nName);
+      putValue(ACCELERATOR_KEY, prefs.getKey(nName));
+      putValue(SHORT_DESCRIPTION, Globals.lang(nName));
+      //putValue(ACCELERATOR_KEY,
+      //         (next?prefs.getKey("Next tab"):prefs.getKey("Previous tab")));
+    }
+
+    public void actionPerformed(ActionEvent e) {
+
+      //Util.pr(Globals.focusListener.getFocused().toString());
+      JComponent source = Globals.focusListener.getFocused();
+      try {
+        source.getActionMap().get(command).actionPerformed
+            (new ActionEvent(source, 0, command));
+      } catch (NullPointerException ex) {
+        // No component is focused, so we do nothing.
+      }
+    }
+  }
+
+  class CustomizeExportsAction extends MnemonicAwareAction {
+    public CustomizeExportsAction() {
+      putValue(NAME, "Manage custom exports");
+    }
+
+    public void actionPerformed(ActionEvent e) {
+      ExportCustomizationDialog ecd = new ExportCustomizationDialog(JabRefFrame.this);
+      ecd.setVisible(true);
+    }
+  }
+
+  class CustomizeImportsAction extends MnemonicAwareAction {
+    public CustomizeImportsAction() {
+      putValue(NAME, "Manage custom imports");
+    }
+
+    public void actionPerformed(ActionEvent e) {
+      ImportCustomizationDialog ecd = new ImportCustomizationDialog(JabRefFrame.this);
+      ecd.setVisible(true);
+    }
+  }
+
+ 
+    class CustomizeEntryTypeAction extends MnemonicAwareAction {
+        public CustomizeEntryTypeAction() {
+            putValue(NAME, "Customize entry types");
+        }
+        public void actionPerformed(ActionEvent e) {
+            JDialog dl = new EntryCustomizationDialog2(JabRefFrame.this);
+            Util.placeDialog(dl, JabRefFrame.this);
+            dl.setVisible(true);
+        }
+    }
+
+    class GenFieldsCustomizationAction extends MnemonicAwareAction {
+        public GenFieldsCustomizationAction() {
+            putValue(NAME, "Set up general fields");
+        }
+        public void actionPerformed(ActionEvent e) {
+            GenFieldsCustomizer gf = new GenFieldsCustomizer(JabRefFrame.this);
+            Util.placeDialog(gf, JabRefFrame.this);
+            gf.setVisible(true);
+
+        }
+    }
+
+    class DatabasePropertiesAction extends MnemonicAwareAction {
+        DatabasePropertiesDialog propertiesDialog = null;
+        public DatabasePropertiesAction() {
+            putValue(NAME, "Database properties");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            if (propertiesDialog == null)
+                propertiesDialog = new DatabasePropertiesDialog(JabRefFrame.this);
+            propertiesDialog.setPanel(basePanel());
+            Util.placeDialog(propertiesDialog, JabRefFrame.this);
+            propertiesDialog.setVisible(true);
+        }
+       
+    }
+    
+    class BibtexKeyPatternAction extends MnemonicAwareAction {
+        BibtexKeyPatternDialog bibtexKeyPatternDialog = null;
+        public BibtexKeyPatternAction() {
+            putValue(NAME, "Bibtex key patterns");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+        	final JabRefPreferences prefs = JabRefPreferences.getInstance();
+            if (bibtexKeyPatternDialog == null) {
+                // if no instance of BibtexKeyPatternDialog exists, create new one
+            	bibtexKeyPatternDialog = new BibtexKeyPatternDialog(JabRefFrame.this, basePanel());
+            } else {
+                // BibtexKeyPatternDialog allows for updating content based on currently selected panel
+                bibtexKeyPatternDialog.setPanel(basePanel());
+            }
+            Util.placeDialog(bibtexKeyPatternDialog, JabRefFrame.this);
+            bibtexKeyPatternDialog.setVisible(true);
+        }
+       
+    }
+
+    class IncreaseTableFontSizeAction extends MnemonicAwareAction {
+        public IncreaseTableFontSizeAction() {
+            putValue(NAME, "Increase table font size");
+            putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Increase table font size"));
+        }
+        public void actionPerformed(ActionEvent event) {
+            int currentSize = GUIGlobals.CURRENTFONT.getSize();
+            Font newFont = new Font(GUIGlobals.CURRENTFONT.getFamily(), GUIGlobals.CURRENTFONT.getStyle(),
+                    currentSize+1);
+            GUIGlobals.CURRENTFONT = newFont;
+            Globals.prefs.putInt("fontSize", currentSize+1);
+            for (int i=0; i<baseCount(); i++) {
+                baseAt(i).updateTableFont();
+            }
+        }
+    }
+
+    class DecreaseTableFontSizeAction extends MnemonicAwareAction {
+        public DecreaseTableFontSizeAction() {
+            putValue(NAME, "Decrease table font size");
+            putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Decrease table font size"));
+        }
+        public void actionPerformed(ActionEvent event) {
+            int currentSize = GUIGlobals.CURRENTFONT.getSize();
+            if (currentSize < 2 )
+                return;
+            Font newFont = new Font(GUIGlobals.CURRENTFONT.getFamily(), GUIGlobals.CURRENTFONT.getStyle(),
+                    currentSize-1);
+            GUIGlobals.CURRENTFONT = newFont;
+            Globals.prefs.putInt("fontSize", currentSize-1);
+            for (int i=0; i<baseCount(); i++) {
+                baseAt(i).updateTableFont();
+            }
+        }
+    }
+
+    class MinimizeToSysTrayAction extends MnemonicAwareAction {
+        public MinimizeToSysTrayAction() {
+            putValue(NAME, "Minimize to system tray");
+            putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Minimize to system tray"));
+        }
+        public void actionPerformed(ActionEvent event) {
+            if (sysTray == null)
+                sysTray = new SysTray(JabRefFrame.this);
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    sysTray.setTrayIconVisible(true);
+                    JabRefFrame.this.setVisible(false);
+                }
+            });
+        }
+    }
+
+    public void showIfMinimizedToSysTray() {
+        // TODO: does not work correctly when a dialog is shown
+        // Workaround: put into invokeLater queue before a dialog is added to that queue
+        if (!this.isVisible()) {
+            // isVisible() is false if minimized to systray
+            if (sysTray != null) {
+                sysTray.setTrayIconVisible(false);
+            }
+            setVisible(true);
+            this.isActive();
+            toFront();
+        }
+    }
+
+    /*private class ForegroundLabel extends JLabel {
+         public ForegroundLabel(String s) {
+             super(s);
+             setFont(new Font("plain", Font.BOLD, 70));
+             setHorizontalAlignment(JLabel.CENTER);
+         }
+
+        public void paint(Graphics g) {
+            Graphics2D g2 = (Graphics2D)g;
+            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+            super.paint(g2);    //To change body of overridden methods use File | Settings | File Templates.
+        }
+    }       */
+
+  private class MyGlassPane extends JPanel {
+    //ForegroundLabel infoLabel = new ForegroundLabel("Showing search");
+    public MyGlassPane() {
+      addKeyListener(new KeyAdapter() { });
+      addMouseListener(new MouseAdapter() { });
+      /*  infoLabel.setForeground(new Color(255, 100, 100, 124));
+
+        setLayout(new BorderLayout());
+        add(infoLabel, BorderLayout.CENTER);*/
+      super.setCursor(
+        Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+    }
+      // Override isOpaque() to prevent the glasspane from hiding the window contents:
+      public boolean isOpaque() { return false; }
+  }
+
+  public void showMessage(Object message, String title, int msgType){
+      JOptionPane.showMessageDialog(this, message, title, msgType);
+  }
+
+  public void setStatus(String s){
+	  output(s);
+  }
+
+  public void showMessage(String message){
+	  JOptionPane.showMessageDialog(this, message);
+  }
+  
+  public SearchManager2 getSearchManager() {
+		return searchManager;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/JabRefPreferences.java b/src/java/net/sf/jabref/JabRefPreferences.java
index 6c4aebc..5ba3888 100644
--- a/src/java/net/sf/jabref/JabRefPreferences.java
+++ b/src/java/net/sf/jabref/JabRefPreferences.java
@@ -1,1416 +1,1416 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.Color;
-import java.awt.event.KeyEvent;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.TreeSet;
-import java.util.Vector;
-import java.util.prefs.BackingStoreException;
-import java.util.prefs.InvalidPreferencesFormatException;
-import java.util.prefs.Preferences;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-
-import javax.swing.JTable;
-import javax.swing.KeyStroke;
-
-import net.sf.jabref.export.CustomExportList;
-import net.sf.jabref.export.ExportComparator;
-import net.sf.jabref.external.DroppedFileHandler;
-import net.sf.jabref.external.ExternalFileType;
-import net.sf.jabref.external.UnknownExternalFileType;
-import net.sf.jabref.gui.CleanUpAction;
-import net.sf.jabref.gui.PersistenceTableColumnListener;
-import net.sf.jabref.imports.CustomImportList;
-import net.sf.jabref.labelPattern.LabelPattern;
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-
-public class JabRefPreferences {
-
-    public final static String
-        CUSTOM_TYPE_NAME = "customTypeName_",
-        CUSTOM_TYPE_REQ = "customTypeReq_",
-        CUSTOM_TYPE_OPT = "customTypeOpt_",
-        CUSTOM_TYPE_PRIOPT = "customTypePriOpt_",
-        CUSTOM_TAB_NAME = "customTabName_",
-        CUSTOM_TAB_FIELDS = "customTabFields_",
-        EMACS_PATH = "emacsPath",
-        EMACS_ADDITIONAL_PARAMETERS = "emacsParameters",
-        EMACS_23 = "emacsUseV23InsertString",
-        EDIT_GROUP_MEMBERSHIP_MODE = "groupEditGroupMembershipMode",
-        
-        PDF_PREVIEW = "pdfPreview",
-
-        SHOWONELETTERHEADINGFORICONCOLUMNS = "showOneLetterHeadingForIconColumns",
-
-        SHORTEST_TO_COMPLETE = "shortestToComplete",
-        AUTOCOMPLETE_FIRSTNAME_MODE = "autoCompFirstNameMode",
-        // here are the possible values for _MODE:
-        AUTOCOMPLETE_FIRSTNAME_MODE_BOTH = "both",
-        AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_FULL = "fullOnly",
-        AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_ABBR = "abbrOnly";
-
-    // This String is used in the encoded list in prefs of external file type
-    // modifications, in order to indicate a removed default file type:
-    public static final String FILE_TYPE_REMOVED_FLAG = "REMOVED";
-
-    public String WRAPPED_USERNAME, MARKING_WITH_NUMBER_PATTERN;
-
-    Preferences prefs;
-    public HashMap<String, Object> defaults = new HashMap<String, Object>();
-    public HashMap<String, String>
-        keyBinds = new HashMap<String, String>(),
-        defKeyBinds = new HashMap<String, String>();
-    private HashSet<String> putBracesAroundCapitalsFields = new HashSet<String>(4);
-    private HashSet<String> nonWrappableFields = new HashSet<String>(5);
-    private static LabelPattern keyPattern;
-
-    // Object containing custom export formats:
-    public CustomExportList customExports;
-
-    /** Set with all custom {@link net.sf.jabref.imports.ImportFormat}s */
-    public CustomImportList customImports;
-
-    // Object containing info about customized entry editor tabs.
-    private EntryEditorTabList tabList = null;
-
-    // Map containing all registered external file types:
-    private TreeSet<ExternalFileType> externalFileTypes = new TreeSet<ExternalFileType>();
-
-    public final ExternalFileType HTML_FALLBACK_TYPE =
-            new ExternalFileType("URL", "html", "text/html", "", "www");
-
-    // The following field is used as a global variable during the export of a database.
-    // By setting this field to the path of the database's default file directory, formatters
-    // that should resolve external file paths can access this field. This is an ugly hack
-    // to solve the problem of formatters not having access to any context except for the
-    // string to be formatted and possible formatter arguments.
-    public String[] fileDirForDatabase = null;
-
-    // Similarly to the previous variable, this is a global that can be used during
-    // the export of a database if the database filename should be output. If a database
-    // is tied to a file on disk, this variable is set to that file before export starts:
-    public File databaseFile = null;
-
-    // The following field is used as a global variable during the export of a database.
-    // It is used to hold custom name formatters defined by a custom export filter.
-    // It is set before the export starts:
-    public HashMap<String,String> customExportNameFormatters = null;
-
-    // The only instance of this class:
-    private static JabRefPreferences singleton = null;
-
-    public static JabRefPreferences getInstance() {
-		if (singleton == null)
-			singleton = new JabRefPreferences();
-		return singleton;
-	}
-
-    // The constructor is made private to enforce this as a singleton class:
-    private JabRefPreferences() {
-
-        try {
-            if (new File("jabref.xml").exists()){
-                importPreferences("jabref.xml");
-            }
-        } catch (IOException e) {
-            Globals.logger("Could not import preferences from jabref.xml:" + e.getLocalizedMessage());
-        }
-        
-        prefs = Preferences.userNodeForPackage(JabRef.class);
-        
-        if (Globals.osName.equals(Globals.MAC)) {
-			//defaults.put("pdfviewer", "/Applications/Preview.app");
-			//defaults.put("psviewer", "/Applications/Preview.app");
-			//defaults.put("htmlviewer", "/Applications/Safari.app");
-        	defaults.put(EMACS_PATH, "emacsclient");
-        	defaults.put(EMACS_23, true);
-        	defaults.put(EMACS_ADDITIONAL_PARAMETERS, "-n -e");
-            defaults.put("fontFamily", "SansSerif");
-
-		} else if (Globals.osName.toLowerCase().startsWith("windows")) {
-			//defaults.put("pdfviewer", "cmd.exe /c start /b");
-			//defaults.put("psviewer", "cmd.exe /c start /b");
-			//defaults.put("htmlviewer", "cmd.exe /c start /b");
-			defaults.put("lookAndFeel", "com.jgoodies.looks.windows.WindowsLookAndFeel");
-            defaults.put("winEdtPath", "C:\\Program Files\\WinEdt Team\\WinEdt\\WinEdt.exe");
-            defaults.put("latexEditorPath", "C:\\Program Files\\LEd\\LEd.exe");
-        	defaults.put(EMACS_PATH, "emacsclient.exe");
-        	defaults.put(EMACS_23, true);
-        	defaults.put(EMACS_ADDITIONAL_PARAMETERS, "-n -e");
-            defaults.put("fontFamily", "Arial");
-
-        } else {
-			//defaults.put("pdfviewer", "evince");
-			//defaults.put("psviewer", "gv");
-			//defaults.put("htmlviewer", "firefox");
-			defaults.put("lookAndFeel", "com.jgoodies.plaf.plastic.Plastic3DLookAndFeel");
-            defaults.put("fontFamily", "SansSerif");
-            
-        	// linux
-        	defaults.put(EMACS_PATH, "gnuclient");
-        	defaults.put(EMACS_23, false);
-        	defaults.put(EMACS_ADDITIONAL_PARAMETERS, "-batch -eval");
-		}
-        defaults.put(PDF_PREVIEW, Boolean.FALSE);
-        defaults.put("useDefaultLookAndFeel", Boolean.TRUE);
-        defaults.put("lyxpipe", System.getProperty("user.home")+File.separator+".lyx/lyxpipe");
-        defaults.put("vim", "vim");
-        defaults.put("vimServer", "vim");
-        defaults.put("posX", new Integer(0));
-        defaults.put("posY", new Integer(0));
-        defaults.put("sizeX", new Integer(840));
-        defaults.put("sizeY", new Integer(680));
-        defaults.put("windowMaximised", Boolean.FALSE);
-        defaults.put("autoResizeMode", new Integer(JTable.AUTO_RESIZE_ALL_COLUMNS));
-        defaults.put("previewPanelHeight", 200);
-        defaults.put("entryEditorHeight", 400);
-        defaults.put("tableColorCodesOn", Boolean.TRUE);
-        defaults.put("namesAsIs", Boolean.FALSE); // "Show names unchanged"
-        defaults.put("namesFf", Boolean.FALSE); // "Show 'Firstname Lastname'"
-        defaults.put("namesLf", Boolean.FALSE); // "Show 'Lastname, Firstname'"
-        defaults.put("namesNatbib", Boolean.TRUE);  // "Natbib style"
-        defaults.put("abbrAuthorNames", Boolean.TRUE); // "Abbreviate names"
-        defaults.put("namesLastOnly", Boolean.TRUE); // "Show last names only"
-        defaults.put("language", "en");
-        defaults.put("showShort", Boolean.TRUE);
-        defaults.put("priSort", "author");
-        defaults.put("priDescending", Boolean.FALSE);
-        defaults.put("priBinary", Boolean.FALSE);
-        defaults.put("secSort", "year");
-        defaults.put("secDescending", Boolean.TRUE);
-        defaults.put("terSort", "author");
-        defaults.put("terDescending", Boolean.FALSE);
-        defaults.put("columnNames", "entrytype;author;title;year;journal;owner;timestamp;bibtexkey");
-        defaults.put("columnWidths","75;280;400;60;100;100;100;100");
-        defaults.put(PersistenceTableColumnListener.ACTIVATE_PREF_KEY, 
-        		new Boolean(PersistenceTableColumnListener.DEFAULT_ENABLED));
-        defaults.put("xmpPrivacyFilters", "pdf;timestamp;keywords;owner;note;review");
-        defaults.put("useXmpPrivacyFilter", Boolean.FALSE);
-        defaults.put("numberColWidth",new Integer(GUIGlobals.NUMBER_COL_LENGTH));
-        defaults.put("workingDirectory", System.getProperty("user.home"));
-        defaults.put("exportWorkingDirectory", System.getProperty("user.home"));
-        defaults.put("importWorkingDirectory", System.getProperty("user.home"));
-        defaults.put("fileWorkingDirectory", System.getProperty("user.home"));
-        defaults.put("autoOpenForm", Boolean.TRUE);
-        defaults.put("entryTypeFormHeightFactor", new Integer(1));
-        defaults.put("entryTypeFormWidth", new Integer(1));
-        defaults.put("backup", Boolean.TRUE);
-        defaults.put("openLastEdited", Boolean.TRUE);
-        defaults.put("lastEdited", null);
-        defaults.put("stringsPosX", new Integer(0));
-        defaults.put("stringsPosY", new Integer(0));
-        defaults.put("stringsSizeX", new Integer(600));
-        defaults.put("stringsSizeY", new Integer(400));
-        defaults.put("defaultShowSource", Boolean.FALSE);
-        defaults.put("showSource", Boolean.TRUE);
-        defaults.put("defaultAutoSort", Boolean.FALSE);
-        defaults.put("enableSourceEditing", Boolean.TRUE);
-        defaults.put("caseSensitiveSearch", Boolean.FALSE);
-        defaults.put("searchReq", Boolean.TRUE);
-        defaults.put("searchOpt", Boolean.TRUE);
-        defaults.put("searchGen", Boolean.TRUE);
-        defaults.put("searchAll", Boolean.FALSE);
-        defaults.put("incrementS", Boolean.FALSE);
-        defaults.put("searchAutoComplete", Boolean.TRUE);
-        defaults.put("saveInStandardOrder", Boolean.TRUE);
-        defaults.put("saveInOriginalOrder", Boolean.FALSE);
-        defaults.put("exportInStandardOrder", Boolean.TRUE);
-        defaults.put("exportInOriginalOrder", Boolean.FALSE);
-        defaults.put("selectS", Boolean.FALSE);
-        defaults.put("regExpSearch", Boolean.TRUE);
-        defaults.put("highLightWords", Boolean.TRUE);
-        defaults.put("searchPanePosX", new Integer(0));
-        defaults.put("searchPanePosY", new Integer(0));
-        defaults.put("autoComplete", Boolean.TRUE);
-        defaults.put("autoCompleteFields", "author;editor;title;journal;publisher;keywords;crossref");
-        defaults.put("autoCompFF", Boolean.FALSE); // "Autocomplete names in 'Firstname Lastname' format only"
-        defaults.put("autoCompLF", Boolean.FALSE); // "Autocomplete names in 'Lastname, Firstname' format only"
-        defaults.put(SHORTEST_TO_COMPLETE, new Integer(2));
-        defaults.put(AUTOCOMPLETE_FIRSTNAME_MODE, AUTOCOMPLETE_FIRSTNAME_MODE_BOTH);
-        defaults.put("groupSelectorVisible", Boolean.TRUE);
-        defaults.put("groupFloatSelections", Boolean.TRUE);
-        defaults.put("groupIntersectSelections", Boolean.TRUE);
-        defaults.put("groupInvertSelections", Boolean.FALSE);
-        defaults.put("groupShowOverlapping", Boolean.FALSE);
-        defaults.put("groupSelectMatches", Boolean.FALSE);
-        defaults.put("groupsDefaultField", "keywords");
-        defaults.put("groupShowIcons", Boolean.TRUE);
-        defaults.put("groupShowDynamic", Boolean.TRUE);
-        defaults.put("groupExpandTree", Boolean.TRUE);
-        defaults.put("groupAutoShow", Boolean.TRUE);
-        defaults.put("groupAutoHide", Boolean.TRUE);
-        defaults.put("autoAssignGroup", Boolean.TRUE);
-        defaults.put("groupKeywordSeparator", ", ");
-        defaults.put(EDIT_GROUP_MEMBERSHIP_MODE, Boolean.FALSE);
-        defaults.put("highlightGroupsMatchingAny", Boolean.FALSE);
-        defaults.put("highlightGroupsMatchingAll", Boolean.FALSE);
-        defaults.put("searchPanelVisible", Boolean.FALSE);
-        defaults.put("defaultEncoding", System.getProperty("file.encoding"));
-        defaults.put("groupsVisibleRows", new Integer(8));
-        defaults.put("defaultOwner", System.getProperty("user.name"));
-        defaults.put("preserveFieldFormatting", Boolean.FALSE);
-        defaults.put("memoryStickMode", Boolean.FALSE);
-        defaults.put("renameOnMoveFileToFileDir", Boolean.TRUE);
-
-    // The general fields stuff is made obsolete by the CUSTOM_TAB_... entries.
-        defaults.put("generalFields", "crossref;keywords;file;doi;url;urldate;"+
-                     "pdf;comment;owner");
-
-        defaults.put("useCustomIconTheme", Boolean.FALSE);
-        defaults.put("customIconThemeFile", "/home/alver/div/crystaltheme_16/Icons.properties");
-
-        //defaults.put("recentFiles", "/home/alver/Documents/bibk_dok/hovedbase.bib");
-        defaults.put("historySize", new Integer(8));
-        defaults.put("fontStyle", new Integer(java.awt.Font.PLAIN));
-        defaults.put("fontSize", new Integer(12));
-        defaults.put("overrideDefaultFonts", Boolean.FALSE);
-        defaults.put("menuFontFamily", "Times");
-        defaults.put("menuFontStyle", new Integer(java.awt.Font.PLAIN));
-        defaults.put("menuFontSize", new Integer(11));
-        // Main table color settings:
-        defaults.put("tableBackground", "255:255:255");
-        defaults.put("tableReqFieldBackground", "230:235:255");
-        defaults.put("tableOptFieldBackground", "230:255:230");
-        defaults.put("tableText", "0:0:0");
-        defaults.put("gridColor", "210:210:210");
-        defaults.put("grayedOutBackground", "210:210:210");
-        defaults.put("grayedOutText", "40:40:40");
-        defaults.put("veryGrayedOutBackground", "180:180:180");
-        defaults.put("veryGrayedOutText", "40:40:40");
-        defaults.put("markedEntryBackground0", "255:255:180");
-        defaults.put("markedEntryBackground1", "255:220:180");
-        defaults.put("markedEntryBackground2", "255:180:160");
-        defaults.put("markedEntryBackground3", "255:120:120");
-        defaults.put("markedEntryBackground4", "255:75:75");
-        defaults.put("markedEntryBackground5", "220:255:220");
-        defaults.put("validFieldBackgroundColor", "255:255:255");
-        defaults.put("invalidFieldBackgroundColor", "255:0:0");
-        defaults.put("activeFieldEditorBackgroundColor", "220:220:255");
-        defaults.put("fieldEditorTextColor", "0:0:0");
-
-        defaults.put("incompleteEntryBackground", "250:175:175");
-
-        defaults.put("antialias", Boolean.FALSE);
-        defaults.put("ctrlClick", Boolean.FALSE);
-        defaults.put("disableOnMultipleSelection", Boolean.FALSE);
-        defaults.put("pdfColumn", Boolean.FALSE);
-        defaults.put("urlColumn", Boolean.TRUE);
-        defaults.put("fileColumn", Boolean.TRUE);
-        defaults.put("arxivColumn", Boolean.FALSE);
-        
-        defaults.put(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED, SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED_DEFAULT);
-        defaults.put(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY, SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY_DEFAULT);
-        defaults.put(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY, SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY_DEFAULT);
-        defaults.put(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING, SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING_DEFAULT);
-        defaults.put(SpecialFieldsUtils.PREF_RANKING_COMPACT, SpecialFieldsUtils.PREF_RANKING_COMPACT_DEFAULT);
-        defaults.put(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE, SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE_DEFAULT);
-        defaults.put(SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS, SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS_DEFAULT);
-    	defaults.put(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS, SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS_DEFAULT);
-    	
-    	defaults.put(SHOWONELETTERHEADINGFORICONCOLUMNS, Boolean.FALSE);
-        
-        defaults.put("useOwner", Boolean.TRUE);
-        defaults.put("overwriteOwner", Boolean.FALSE);
-        defaults.put("allowTableEditing", Boolean.FALSE);
-        defaults.put("dialogWarningForDuplicateKey", Boolean.TRUE);
-        defaults.put("dialogWarningForEmptyKey", Boolean.TRUE);
-        defaults.put("displayKeyWarningDialogAtStartup", Boolean.TRUE);
-        defaults.put("avoidOverwritingKey", Boolean.FALSE);
-        defaults.put("warnBeforeOverwritingKey", Boolean.TRUE);
-        defaults.put("confirmDelete", Boolean.TRUE);
-        defaults.put("grayOutNonHits", Boolean.TRUE);
-        defaults.put("floatSearch", Boolean.TRUE);
-        defaults.put("showSearchInDialog", Boolean.FALSE);
-        defaults.put("searchAllBases", Boolean.FALSE);
-        defaults.put("defaultLabelPattern", "[auth][year]");
-        defaults.put("previewEnabled", Boolean.TRUE);
-        defaults.put("activePreview", 0);
-        defaults.put("preview0", "<font face=\"arial\">"
-                     +"<b><i>\\bibtextype</i><a name=\"\\bibtexkey\">\\begin{bibtexkey} (\\bibtexkey)</a>"
-                     +"\\end{bibtexkey}</b><br>__NEWLINE__"
-                     +"\\begin{author} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\author}<BR>\\end{author}__NEWLINE__"
-                     +"\\begin{editor} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\editor} "
-                     +"<i>(\\format[IfPlural(Eds.,Ed.)]{\\editor})</i><BR>\\end{editor}__NEWLINE__"
-                     +"\\begin{title} \\format[HTMLChars]{\\title} \\end{title}<BR>__NEWLINE__"
-                     +"\\begin{chapter} \\format[HTMLChars]{\\chapter}<BR>\\end{chapter}__NEWLINE__"
-                     +"\\begin{journal} <em>\\format[HTMLChars]{\\journal}, </em>\\end{journal}__NEWLINE__"
-                     // Include the booktitle field for @inproceedings, @proceedings, etc.
-                     +"\\begin{booktitle} <em>\\format[HTMLChars]{\\booktitle}, </em>\\end{booktitle}__NEWLINE__"
-                     +"\\begin{school} <em>\\format[HTMLChars]{\\school}, </em>\\end{school}__NEWLINE__"
-                     +"\\begin{institution} <em>\\format[HTMLChars]{\\institution}, </em>\\end{institution}__NEWLINE__"
-                     +"\\begin{publisher} <em>\\format[HTMLChars]{\\publisher}, </em>\\end{publisher}__NEWLINE__"
-                     +"\\begin{year}<b>\\year</b>\\end{year}\\begin{volume}<i>, \\volume</i>\\end{volume}"
-                     +"\\begin{pages}, \\format[FormatPagesForHTML]{\\pages} \\end{pages}__NEWLINE__"
-                     +"\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract} \\end{abstract}__NEWLINE__"
-                     +"\\begin{review}<BR><BR><b>Review: </b> \\format[HTMLChars]{\\review} \\end{review}"
-                     +"</dd>__NEWLINE__<p></p></font>");
-        defaults.put("preview1", "<font face=\"arial\">"
-                     +"<b><i>\\bibtextype</i><a name=\"\\bibtexkey\">\\begin{bibtexkey} (\\bibtexkey)</a>"
-                     +"\\end{bibtexkey}</b><br>__NEWLINE__"
-                     +"\\begin{author} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\author}<BR>\\end{author}__NEWLINE__"
-                     +"\\begin{editor} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\editor} "
-                     +"<i>(\\format[IfPlural(Eds.,Ed.)]{\\editor})</i><BR>\\end{editor}__NEWLINE__"
-                     +"\\begin{title} \\format[HTMLChars]{\\title} \\end{title}<BR>__NEWLINE__"
-                     +"\\begin{chapter} \\format[HTMLChars]{\\chapter}<BR>\\end{chapter}__NEWLINE__"
-                     +"\\begin{journal} <em>\\format[HTMLChars]{\\journal}, </em>\\end{journal}__NEWLINE__"
-                     // Include the booktitle field for @inproceedings, @proceedings, etc.
-                     +"\\begin{booktitle} <em>\\format[HTMLChars]{\\booktitle}, </em>\\end{booktitle}__NEWLINE__"
-                     +"\\begin{school} <em>\\format[HTMLChars]{\\school}, </em>\\end{school}__NEWLINE__"
-                     +"\\begin{institution} <em>\\format[HTMLChars]{\\institution}, </em>\\end{institution}__NEWLINE__"
-                     +"\\begin{publisher} <em>\\format[HTMLChars]{\\publisher}, </em>\\end{publisher}__NEWLINE__"
-                     +"\\begin{year}<b>\\year</b>\\end{year}\\begin{volume}<i>, \\volume</i>\\end{volume}"
-                     +"\\begin{pages}, \\format[FormatPagesForHTML]{\\pages} \\end{pages}"
-                     +"</dd>__NEWLINE__<p></p></font>");
-
-
-        // TODO: Currently not possible to edit this setting:
-        defaults.put("previewPrintButton", Boolean.FALSE);
-        defaults.put("autoDoubleBraces", Boolean.FALSE);
-        defaults.put("doNotResolveStringsFor", "url");
-        defaults.put("resolveStringsAllFields", Boolean.FALSE);
-        defaults.put("putBracesAroundCapitals","");//"title;journal;booktitle;review;abstract");
-        defaults.put("nonWrappableFields", "pdf;ps;url;doi;file");
-        defaults.put("useImportInspectionDialog", Boolean.TRUE);
-        defaults.put("useImportInspectionDialogForSingle", Boolean.TRUE);
-        defaults.put("generateKeysAfterInspection", Boolean.TRUE);
-        defaults.put("markImportedEntries", Boolean.TRUE);
-        defaults.put("unmarkAllEntriesBeforeImporting", Boolean.TRUE);
-        defaults.put("warnAboutDuplicatesInInspection", Boolean.TRUE);
-        defaults.put("useTimeStamp", Boolean.TRUE);
-        defaults.put("overwriteTimeStamp", Boolean.FALSE);
-        defaults.put("timeStampFormat", "yyyy.MM.dd");
-//        defaults.put("timeStampField", "timestamp");
-        defaults.put("timeStampField", BibtexFields.TIMESTAMP);
-        defaults.put("generateKeysBeforeSaving", Boolean.FALSE);
-
-        defaults.put("useRemoteServer", Boolean.FALSE);
-        defaults.put("remoteServerPort", new Integer(6050));
-
-        defaults.put("personalJournalList", null);
-        defaults.put("externalJournalLists", null);
-        defaults.put("citeCommand", "cite"); // obsoleted by the app-specific ones
-        defaults.put("citeCommandVim", "\\cite");
-        defaults.put("citeCommandEmacs", "\\cite");
-        defaults.put("citeCommandWinEdt", "\\cite");
-        defaults.put("citeCommandLed", "\\cite");
-        defaults.put("floatMarkedEntries", Boolean.TRUE);
-
-        defaults.put("useNativeFileDialogOnMac", Boolean.FALSE);
-        defaults.put("filechooserDisableRename", Boolean.TRUE);
-
-        defaults.put("lastUsedExport", null);
-        defaults.put("sidePaneWidth", new Integer(-1));
-
-        defaults.put("importInspectionDialogWidth", new Integer(650));
-        defaults.put("importInspectionDialogHeight", new Integer(650));
-        defaults.put("searchDialogWidth", new Integer(650));
-        defaults.put("searchDialogHeight", new Integer(500));
-        defaults.put("showFileLinksUpgradeWarning", Boolean.TRUE);
-        defaults.put("autolinkExactKeyOnly", Boolean.TRUE);
-        defaults.put("numericFields", "mittnum;author");
-        defaults.put("runAutomaticFileSearch", Boolean.FALSE);
-        defaults.put("useLockFiles", Boolean.TRUE);
-        defaults.put("autoSave", Boolean.TRUE);
-        defaults.put("autoSaveInterval", 5);
-        defaults.put("promptBeforeUsingAutosave", Boolean.TRUE);
-        defaults.put("deletePlugins", "");
-        defaults.put("enforceLegalBibtexKey", Boolean.TRUE);
-        defaults.put("biblatexMode", Boolean.FALSE);
-        defaults.put("keyGenFirstLetterA", Boolean.TRUE);
-        defaults.put("keyGenAlwaysAddLetter", Boolean.FALSE);
-        defaults.put(JabRefPreferences.EMAIL_SUBJECT, Globals.lang("References"));
-        defaults.put(JabRefPreferences.OPEN_FOLDERS_OF_ATTACHED_FILES, Boolean.FALSE);
-        defaults.put("allowFileAutoOpenBrowse", Boolean.TRUE);
-        defaults.put("webSearchVisible", Boolean.FALSE);
-        defaults.put("selectedFetcherIndex", 0);
-        defaults.put("bibLocationAsFileDir", Boolean.TRUE);
-        defaults.put("bibLocAsPrimaryDir", Boolean.FALSE);
-        defaults.put("dbConnectServerType", "MySQL");
-        defaults.put("dbConnectHostname", "localhost");
-        defaults.put("dbConnectDatabase", "jabref");
-        defaults.put("dbConnectUsername", "root");
-        CleanUpAction.putDefaults(defaults);
-        
-        // defaults for DroppedFileHandler UI
-    	defaults.put(DroppedFileHandler.DFH_LEAVE, Boolean.FALSE);
-    	defaults.put(DroppedFileHandler.DFH_COPY, Boolean.TRUE);
-    	defaults.put(DroppedFileHandler.DFH_MOVE, Boolean.FALSE);
-    	defaults.put(DroppedFileHandler.DFH_RENAME, Boolean.FALSE);
-        
-        //defaults.put("lastAutodetectedImport", "");
-        
-        //defaults.put("autoRemoveExactDuplicates", Boolean.FALSE);
-        //defaults.put("confirmAutoRemoveExactDuplicates", Boolean.TRUE);
-        
-        //defaults.put("tempDir", System.getProperty("java.io.tmpdir"));
-        //Util.pr(System.getProperty("java.io.tempdir"));
-
-        //defaults.put("keyPattern", new LabelPattern(KEY_PATTERN));
-        
-        defaults.put(ImportSettingsTab.PREF_IMPORT_ALWAYSUSE, Boolean.FALSE);
-        defaults.put(ImportSettingsTab.PREF_IMPORT_DEFAULT_PDF_IMPORT_STYLE, ImportSettingsTab.DEFAULT_STYLE);
-        defaults.put(ImportSettingsTab.PREF_IMPORT_FILENAMEPATTERN, ImportSettingsTab.DEFAULT_FILENAMEPATTERNS[0]);
-        
-        restoreKeyBindings();
-
-        customExports = new CustomExportList(new ExportComparator());
-        customImports = new CustomImportList(this);
-
-        //defaults.put("oooWarning", Boolean.TRUE);
-        updateSpecialFieldHandling();
-        WRAPPED_USERNAME = "["+get("defaultOwner")+"]";
-        MARKING_WITH_NUMBER_PATTERN = "\\["+get("defaultOwner").replaceAll("\\\\","\\\\\\\\")+":(\\d+)\\]";
-
-        String defaultExpression = "**/.*[bibtexkey].*\\\\.[extension]";
-        defaults.put(DEFAULT_REG_EXP_SEARCH_EXPRESSION_KEY, defaultExpression);
-        defaults.put(REG_EXP_SEARCH_EXPRESSION_KEY, defaultExpression);
-        defaults.put(USE_REG_EXP_SEARCH_KEY, Boolean.FALSE);
-        defaults.put("useIEEEAbrv", Boolean.TRUE);
-        defaults.put("useConvertToEquation", Boolean.FALSE);
-        defaults.put("useCaseKeeperOnSearch", Boolean.TRUE);
-
-	defaults.put("userFileDir", GUIGlobals.FILE_FIELD + "Directory");
-	try {
-	    defaults.put("userFileDirIndividual", GUIGlobals.FILE_FIELD + "Directory" + "-" + get("defaultOwner") + "@" + InetAddress.getLocalHost().getHostName());
-	}
-	catch(UnknownHostException ex) {
-	    Globals.logger("Hostname not found.");
-	    defaults.put("userFileDirIndividual", GUIGlobals.FILE_FIELD + "Directory" + "-" + get("defaultOwner"));
-	}
-    }
-
-    public void setLanguageDependentDefaultValues() {
-
-        // Entry editor tab 0:
-        defaults.put(CUSTOM_TAB_NAME+"_def0", Globals.lang("General"));
-            defaults.put(CUSTOM_TAB_FIELDS+"_def0", "crossref;keywords;file;doi;url;"+
-                         "comment;owner;timestamp");
-
-        // Entry editor tab 1:
-            defaults.put(CUSTOM_TAB_FIELDS+"_def1", "abstract");
-        defaults.put(CUSTOM_TAB_NAME+"_def1", Globals.lang("Abstract"));
-
-      // Entry editor tab 2: Review Field - used for research comments, etc.
-            defaults.put(CUSTOM_TAB_FIELDS+"_def2", "review");
-        defaults.put(CUSTOM_TAB_NAME+"_def2", Globals.lang("Review"));
-
-    }
-    
-    public static final String DEFAULT_REG_EXP_SEARCH_EXPRESSION_KEY = "defaultRegExpSearchExpression";
-    public static final String REG_EXP_SEARCH_EXPRESSION_KEY = "regExpSearchExpression";
-    public static final String USE_REG_EXP_SEARCH_KEY = "useRegExpSearch";
-
-	public static final String EMAIL_SUBJECT = "emailSubject";
-	public static final String OPEN_FOLDERS_OF_ATTACHED_FILES = "openFoldersOfAttachedFiles";
-
-
-	public boolean putBracesAroundCapitals(String fieldName) {
-        return putBracesAroundCapitalsFields.contains(fieldName);
-    }
-
-    public void updateSpecialFieldHandling() {
-        putBracesAroundCapitalsFields.clear();
-        String fieldString = get("putBracesAroundCapitals");
-        if (fieldString.length() > 0) {
-            String[] fields = fieldString.split(";");
-            for (int i=0; i<fields.length; i++)
-                putBracesAroundCapitalsFields.add(fields[i].trim());
-        }
-        nonWrappableFields.clear();
-        fieldString = get("nonWrappableFields");
-        if (fieldString.length() > 0) {
-            String[] fields = fieldString.split(";");
-            for (int i=0; i<fields.length; i++)
-                nonWrappableFields.add(fields[i].trim());
-        }
-
-    }
-
-    /**
-     * Check whether a key is set (differently from null).
-     * @param key The key to check.
-     * @return true if the key is set, false otherwise.
-     */
-    public boolean hasKey(String key) {
-        return prefs.get(key, null) != null;
-    }
-
-    public String get(String key) {
-        return prefs.get(key, (String)defaults.get(key));
-    }
-
-    public String get(String key, String def) {
-        return prefs.get(key, def);
-    }
-
-    public boolean getBoolean(String key) {
-        return prefs.getBoolean(key, getBooleanDefault(key));
-    }
-    
-    public boolean getBooleanDefault(String key){
-        return ((Boolean)defaults.get(key)).booleanValue();
-    }
-
-    public double getDouble(String key) {
-        return prefs.getDouble(key, getDoubleDefault(key));
-    }
-    
-    public double getDoubleDefault(String key){
-        return ((Double)defaults.get(key)).doubleValue();
-    }
-
-    public int getInt(String key) {
-        return prefs.getInt(key, getIntDefault(key));
-    }
-
-    public int getIntDefault(String key) {
-        return ((Integer)defaults.get(key)).intValue();
-    }
-    
-    public byte[] getByteArray(String key) {
-        return prefs.getByteArray(key, getByteArrayDefault(key));
-    }
-
-    public byte[] getByteArrayDefault(String key){
-        return (byte[])defaults.get(key);   
-    }
-    
-    public void put(String key, String value) {
-        prefs.put(key, value);
-    }
-
-    public void putBoolean(String key, boolean value) {
-        prefs.putBoolean(key, value);
-    }
-
-    public void putDouble(String key, double value) {
-        prefs.putDouble(key, value);
-    }
-
-    public void putInt(String key, int value) {
-        prefs.putInt(key, value);
-    }
-
-    public void putByteArray(String key, byte[] value) {
-        prefs.putByteArray(key, value);
-    }
-
-    public void remove(String key) {
-        prefs.remove(key);
-    }
-
-    /**
-     * Puts a string array into the Preferences, by linking its elements
-     * with ';' into a single string. Escape characters make the process
-     * transparent even if strings contain ';'.
-     */
-    public void putStringArray(String key, String[] value) {
-        if (value == null) {
-            remove(key);
-            return;
-        }
-
-        if (value.length > 0) {
-            StringBuffer linked = new StringBuffer();
-            for (int i=0; i<value.length-1; i++) {
-                linked.append(makeEscape(value[i]));
-                linked.append(";");
-            }
-            linked.append(makeEscape(value[value.length-1]));
-            put(key, linked.toString());
-        } else {
-            put(key, "");
-        }
-    }
-
-    /**
-     * Returns a String[] containing the chosen columns.
-     */
-    public String[] getStringArray(String key) {
-        String names = get(key);
-        if (names == null)
-            return null;
-
-        StringReader rd = new StringReader(names);
-        Vector<String> arr = new Vector<String>();
-        String rs;
-        try {
-            while ((rs = getNextUnit(rd)) != null) {
-                arr.add(rs);
-            }
-        } catch (IOException ex) {}
-        String[] res = new String[arr.size()];
-        for (int i=0; i<res.length; i++)
-            res[i] = arr.elementAt(i);
-
-        return res;
-    }
-
-    /**
-     * Looks up a color definition in preferences, and returns the Color object.
-     * @param key The key for this setting.
-     * @return The color corresponding to the setting.
-     */
-    public Color getColor(String key) {
-        String value = get(key);
-        int[] rgb = getRgb(value);
-        return new Color(rgb[0], rgb[1], rgb[2]);
-    }
-
-    public Color getDefaultColor(String key) {
-        String value = (String)defaults.get(key);
-        int[] rgb = getRgb(value);
-        return new Color(rgb[0], rgb[1], rgb[2]);
-    }
-
-    /**
-     * Set the default value for a key. This is useful for plugins that need to
-     * add default values for the prefs keys they use.
-     * @param key The preferences key.
-     * @param value The default value.
-     */
-    public void putDefaultValue(String key, Object value) {
-        defaults.put(key, value);
-    }
-
-    /**
-     * Stores a color in preferences.
-     * @param key The key for this setting.
-     * @param color The Color to store.
-     */
-    public void putColor(String key, Color color) {
-        StringBuffer sb = new StringBuffer();
-        sb.append(String.valueOf(color.getRed()));
-        sb.append(':');
-        sb.append(String.valueOf(color.getGreen()));
-        sb.append(':');
-        sb.append(String.valueOf(color.getBlue()));
-        put(key, sb.toString());
-    }
-
-    /**
-     * Looks up a color definition in preferences, and returns an array containing the RGB values.
-     * @param value The key for this setting.
-     * @return The RGB values corresponding to this color setting.
-     */
-    public int[] getRgb(String value) {
-        String[] elements = value.split(":");
-        int[] values = new int[3];
-        values[0] = Integer.parseInt(elements[0]);
-        values[1] = Integer.parseInt(elements[1]);
-        values[2] = Integer.parseInt(elements[2]);
-        return values;
-    }
-
-    /**
-     * Returns the KeyStroke for this binding, as defined by the
-     * defaults, or in the Preferences.
-     */
-    public KeyStroke getKey(String bindName) {
-
-        String s = keyBinds.get(bindName);
-        // If the current key bindings don't contain the one asked for,
-        // we fall back on the default. This should only happen when a
-        // user has his own set in Preferences, and has upgraded to a
-        // new version where new bindings have been introduced.
-        if (s == null) {
-            s = defKeyBinds.get(bindName);
-            // So, if this happens, we add the default value to the current
-            // hashmap, so this doesn't happen again, and so this binding
-            // will appear in the KeyBindingsDialog.
-            keyBinds.put(bindName, s);
-        }
-        if (s == null) {
-          Globals.logger("Could not get key binding for \"" + bindName + "\"");
-        }
-
-        if (Globals.ON_MAC)
-          return getKeyForMac(KeyStroke.getKeyStroke(s));
-        else
-          return KeyStroke.getKeyStroke(s);
-    }
-
-    /**
-     * Returns the KeyStroke for this binding, as defined by the
-     * defaults, or in the Preferences, but adapted for Mac users,
-     * with the Command key preferred instead of Control.
-     */
-    private KeyStroke getKeyForMac(KeyStroke ks) {
-      if (ks == null) return null;
-      int keyCode = ks.getKeyCode();
-      if ((ks.getModifiers() & KeyEvent.CTRL_MASK) == 0) {
-        return ks;
-      }
-      else {
-    	int modifiers = 0;
-        if ((ks.getModifiers() & KeyEvent.SHIFT_MASK) != 0) {
-          modifiers = modifiers | KeyEvent.SHIFT_MASK;
-        }
-        if ((ks.getModifiers() & KeyEvent.ALT_MASK) != 0) {
-            modifiers = modifiers | KeyEvent.ALT_MASK;
-        }
-        
-        return KeyStroke.getKeyStroke(keyCode, Globals.getShortcutMask()+modifiers);
-      }
-    }
-
-    /**
-     * Returns the HashMap containing all key bindings.
-     */
-    public HashMap<String, String> getKeyBindings() {
-        return keyBinds;
-    }
-
-    /**
-     * Returns the HashMap containing default key bindings.
-     */
-    public HashMap<String, String> getDefaultKeys() {
-        return defKeyBinds;
-    }
-
-
-    /**
-     * Clear all preferences.
-     * @throws BackingStoreException
-     */
-    public void clear() throws BackingStoreException {
-        prefs.clear();
-    }
-
-    public void clear(String key) throws BackingStoreException {
-        prefs.remove(key);
-    }
-    /**
-     * Calling this method will write all preferences into the preference store.
-     */
-    public void flush() {
-        if (getBoolean("memoryStickMode")){
-            try {
-                exportPreferences("jabref.xml");
-            } catch (IOException e) {
-                Globals.logger("Could not save preferences for memory stick mode: " + e.getLocalizedMessage());
-            }
-        }
-        try {
-            prefs.flush();
-        } catch (BackingStoreException ex) {
-            ex.printStackTrace();
-        }
-    }
-
-    /**
-     * Stores new key bindings into Preferences, provided they
-     * actually differ from the old ones.
-     */
-    public void setNewKeyBindings(HashMap<String, String> newBindings) {
-        if (!newBindings.equals(keyBinds)) {
-            // This confirms that the bindings have actually changed.
-            String[] bindNames = new String[newBindings.size()],
-                bindings = new String[newBindings.size()];
-            int index = 0;
-            for (Iterator<String> i=newBindings.keySet().iterator();
-                 i.hasNext();) {
-                String nm = i.next();
-                String bnd = newBindings.get(nm);
-                bindNames[index] = nm;
-                bindings[index] = bnd;
-                index++;
-            }
-            putStringArray("bindNames", bindNames);
-            putStringArray("bindings", bindings);
-            keyBinds = newBindings;
-        }
-    }
-
-
-        /**
-         * Fetches key patterns from preferences
-         * Not cached
-         * 
-         * @return LabelPattern containing all keys. Returned LabelPattern has no parent
-         */
-        public LabelPattern getKeyPattern(){
-            keyPattern = new LabelPattern();
-            Preferences pre = Preferences.userNodeForPackage
-                (net.sf.jabref.labelPattern.LabelPattern.class);
-            try {
-                String[] keys = pre.keys();
-            if (keys.length > 0) for (int i=0; i<keys.length; i++)
-                keyPattern.addLabelPattern(keys[i], pre.get(keys[i], null));
-            } catch (BackingStoreException ex) {
-                Globals.logger("BackingStoreException in JabRefPreferences.getKeyPattern");
-            }
-            return keyPattern;
-        }
-
-        /**
-         * Adds the given key pattern to the preferences
-         * 
-         * @param pattern the pattern to store
-         */
-        public void putKeyPattern(LabelPattern pattern){
-            keyPattern = pattern;
-            LabelPattern parent = pattern.getParent();
-
-            // Store overridden definitions to Preferences.
-            Preferences pre = Preferences.userNodeForPackage
-                (net.sf.jabref.labelPattern.LabelPattern.class);
-            try {
-                pre.clear(); // We remove all old entries.
-            } catch (BackingStoreException ex) {
-                Globals.logger("BackingStoreException in JabRefPreferences.putKeyPattern");
-            }
-
-            for (String s: pattern.keySet()) {
-                ArrayList<String> value = pattern.get(s);
-                if (value != null) {
-                    // no default value
-                    // the first entry in the array is the full pattern
-                    // see net.sf.jabref.labelPattern.LabelPatternUtil.split(String)
-                    pre.put(s, value.get(0));
-                }
-            }
-        }
-
-    private void restoreKeyBindings() {
-        // Define default keybindings.
-        defineDefaultKeyBindings();
-
-        // First read the bindings, and their names.
-        String[] bindNames = getStringArray("bindNames"),
-            bindings = getStringArray("bindings");
-
-        // Then set up the key bindings HashMap.
-        if ((bindNames == null) || (bindings == null)
-            || (bindNames.length != bindings.length)) {
-            // Nothing defined in Preferences, or something is wrong.
-            setDefaultKeyBindings();
-            return;
-        }
-
-        for (int i=0; i<bindNames.length; i++)
-            keyBinds.put(bindNames[i], bindings[i]);
-    }
-
-    private void setDefaultKeyBindings() {
-        keyBinds = defKeyBinds;
-    }
- 
-    private void defineDefaultKeyBindings() {
-        defKeyBinds.put("Push to application","ctrl L");
-      defKeyBinds.put("Push to LyX","ctrl L");
-      defKeyBinds.put("Push to WinEdt","ctrl shift W");
-        defKeyBinds.put("Quit JabRef", "ctrl Q");
-        defKeyBinds.put("Open database", "ctrl O");
-        defKeyBinds.put("Save database", "ctrl S");
-        defKeyBinds.put("Save database as ...", "ctrl shift S");
-        defKeyBinds.put("Save all", "ctrl alt S");
-        defKeyBinds.put("Close database", "ctrl W");
-        defKeyBinds.put("New entry", "ctrl N");
-        defKeyBinds.put("Cut", "ctrl X");
-        defKeyBinds.put("Copy", "ctrl C");
-        defKeyBinds.put("Paste", "ctrl V");
-        defKeyBinds.put("Undo", "ctrl Z");
-        defKeyBinds.put("Redo", "ctrl Y");
-        defKeyBinds.put("Help", "F1");
-        defKeyBinds.put("New article", "ctrl shift A");
-        defKeyBinds.put("New book", "ctrl shift B");
-        defKeyBinds.put("New phdthesis", "ctrl shift T");
-        defKeyBinds.put("New inbook", "ctrl shift I");
-        defKeyBinds.put("New mastersthesis", "ctrl shift M");
-        defKeyBinds.put("New proceedings", "ctrl shift P");
-        defKeyBinds.put("New unpublished", "ctrl shift U");
-        defKeyBinds.put("Edit strings", "ctrl T");
-        defKeyBinds.put("Edit preamble", "ctrl P");
-        defKeyBinds.put("Select all", "ctrl A");
-        defKeyBinds.put("Toggle groups interface", "ctrl shift G");
-        defKeyBinds.put("Autogenerate BibTeX keys", "ctrl G");
-        defKeyBinds.put("Search", "ctrl F");
-        defKeyBinds.put("Incremental search", "ctrl shift F");
-        defKeyBinds.put("Repeat incremental search", "ctrl shift F");
-        defKeyBinds.put("Close dialog", "ESCAPE");
-        defKeyBinds.put("Close entry editor", "ESCAPE");
-        defKeyBinds.put("Close preamble editor", "ESCAPE");
-        defKeyBinds.put("Back, help dialog", "LEFT");
-        defKeyBinds.put("Forward, help dialog", "RIGHT");
-        defKeyBinds.put("Preamble editor, store changes", "alt S");
-        defKeyBinds.put("Clear search", "ESCAPE");
-        defKeyBinds.put("Entry editor, next panel", "ctrl TAB");//"ctrl PLUS");//"shift Right");
-        defKeyBinds.put("Entry editor, previous panel", "ctrl shift TAB");//"ctrl MINUS");
-        defKeyBinds.put("Entry editor, next panel 2", "ctrl PLUS");//"ctrl PLUS");//"shift Right");
-        defKeyBinds.put("Entry editor, previous panel 2", "ctrl MINUS");//"ctrl MINUS");
-        defKeyBinds.put("Entry editor, next entry", "ctrl shift DOWN");
-        defKeyBinds.put("Entry editor, previous entry", "ctrl shift UP");
-        defKeyBinds.put("Entry editor, store field", "alt S");
-        defKeyBinds.put("String dialog, add string", "ctrl N");
-        defKeyBinds.put("String dialog, remove string", "shift DELETE");
-        defKeyBinds.put("String dialog, move string up", "ctrl UP");
-        defKeyBinds.put("String dialog, move string down", "ctrl DOWN");
-        defKeyBinds.put("Save session", "F11");
-        defKeyBinds.put("Load session", "F12");
-        defKeyBinds.put("Copy \\cite{BibTeX key}", "ctrl K");
-        defKeyBinds.put("Copy BibTeX key", "ctrl shift K");
-        defKeyBinds.put("Copy BibTeX key and title", "ctrl shift alt K");
-        defKeyBinds.put("Next tab", "ctrl PAGE_DOWN");
-        defKeyBinds.put("Previous tab", "ctrl PAGE_UP");
-        defKeyBinds.put("Replace string", "ctrl R");
-        defKeyBinds.put("Delete", "DELETE");
-        defKeyBinds.put("Open file", "F4");
-        defKeyBinds.put("Open PDF or PS", "shift F5");
-        defKeyBinds.put("Open URL or DOI", "F3");
-        defKeyBinds.put("Open SPIRES entry", "ctrl F3");
-        defKeyBinds.put("Toggle entry preview", "ctrl F9");
-        defKeyBinds.put("Switch preview layout", "F9");
-        defKeyBinds.put("Edit entry", "ctrl E");
-        defKeyBinds.put("Mark entries", "ctrl M");
-        defKeyBinds.put("Unmark entries", "ctrl shift M");
-        defKeyBinds.put("Fetch Medline", "F5");
-        defKeyBinds.put("Search ScienceDirect", "ctrl F5");
-        defKeyBinds.put("Search ADS", "ctrl shift F6");
-        defKeyBinds.put("New from plain text", "ctrl shift N");
-        defKeyBinds.put("Synchronize files", "ctrl F4");
-        defKeyBinds.put("Synchronize PDF", "shift F4");
-        defKeyBinds.put("Synchronize PS", "ctrl shift F4");
-        defKeyBinds.put("Focus entry table", "ctrl shift E");
-
-        defKeyBinds.put("Abbreviate", "ctrl alt A");
-        defKeyBinds.put("Unabbreviate", "ctrl alt shift A");
-        defKeyBinds.put("Search IEEEXplore", "alt F8");
-        defKeyBinds.put("Search ACM Portal", "ctrl shift F8");
-        defKeyBinds.put("Fetch ArXiv.org", "shift F8");
-        defKeyBinds.put("Search JSTOR", "shift F9");
-        defKeyBinds.put("Write XMP", "ctrl F4");
-        defKeyBinds.put("New file link", "ctrl N");
-        defKeyBinds.put("Fetch SPIRES", "ctrl F8");
-        defKeyBinds.put("Fetch INSPIRE", "ctrl F2");
-        defKeyBinds.put("Back", "alt LEFT");
-        defKeyBinds.put("Forward", "alt RIGHT");
-        defKeyBinds.put("Import into current database", "ctrl I");
-        defKeyBinds.put("Import into new database", "ctrl alt I");
-        defKeyBinds.put(FindUnlinkedFilesDialog.ACTION_COMMAND, "");
-        defKeyBinds.put("Increase table font size", "ctrl PLUS");
-        defKeyBinds.put("Decrease table font size", "ctrl MINUS");
-        defKeyBinds.put("Automatically link files", "alt F");
-        defKeyBinds.put("Resolve duplicate BibTeX keys", "ctrl shift D");
-        defKeyBinds.put("Refresh OO", "ctrl alt O");
-        defKeyBinds.put("File list editor, move entry up", "ctrl UP");
-        defKeyBinds.put("File list editor, move entry down", "ctrl DOWN");
-        defKeyBinds.put("Minimize to system tray", "ctrl alt W");
-    }
-
-    private String getNextUnit(Reader data) throws IOException {
-        int c;
-        boolean escape = false, done = false;
-        StringBuffer res = new StringBuffer();
-        while (!done && ((c = data.read()) != -1)) {
-            if (c == '\\') {
-                if (!escape)
-                    escape = true;
-                else {
-                    escape = false;
-                    res.append('\\');
-                }
-            } else {
-                if (c == ';') {
-                    if (!escape)
-                        done = true;
-                    else
-                        res.append(';');
-                } else {
-                    res.append((char)c);
-                }
-                escape = false;
-            }
-        }
-        if (res.length() > 0)
-            return res.toString();
-        else
-            return null;
-    }
-
-    private String makeEscape(String s) {
-        StringBuffer sb = new StringBuffer();
-        int c;
-        for (int i=0; i<s.length(); i++) {
-            c = s.charAt(i);
-            if ((c == '\\') || (c == ';'))
-                sb.append('\\');
-            sb.append((char)c);
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Stores all information about the entry type in preferences, with
-     * the tag given by number.
-     */
-    public void storeCustomEntryType(CustomEntryType tp, int number) {
-        String nr = ""+number;
-        put(CUSTOM_TYPE_NAME+nr, tp.getName());
-        put(CUSTOM_TYPE_REQ+nr, tp.getRequiredFieldsString());//tp.getRequiredFields());
-        putStringArray(CUSTOM_TYPE_OPT+nr, tp.getOptionalFields());
-        putStringArray(CUSTOM_TYPE_PRIOPT+nr, tp.getPrimaryOptionalFields());
-
-    }
-
-    /**
-     * Retrieves all information about the entry type in preferences,
-     * with the tag given by number.
-     */
-    public CustomEntryType getCustomEntryType(int number) {
-        String nr = ""+number;
-        String
-            name = get(CUSTOM_TYPE_NAME+nr);
-        String[]
-            req = getStringArray(CUSTOM_TYPE_REQ+nr),
-            opt = getStringArray(CUSTOM_TYPE_OPT+nr),
-            priOpt = getStringArray(CUSTOM_TYPE_PRIOPT+nr);
-        if (name == null)
-            return null;
-        if (priOpt == null) {
-            return new CustomEntryType(Util.nCase(name), req, opt);
-        }
-        ArrayList<String> secOpt = new ArrayList<String>();
-        for (int i = 0; i < opt.length; i++) {
-            secOpt.add(opt[i]);
-        }
-        for (int i = 0; i < priOpt.length; i++) {
-            secOpt.remove(priOpt[i]);
-        }
-        return new CustomEntryType(Util.nCase(name), req, priOpt,
-                secOpt.toArray(new String[secOpt.size()]));
-
-
-    }
-
-
-
-    public List<ExternalFileType> getDefaultExternalFileTypes() {
-        List<ExternalFileType> list = new ArrayList<ExternalFileType>();
-        list.add(new ExternalFileType("PDF", "pdf", "application/pdf", "evince", "pdfSmall"));
-        list.add(new ExternalFileType("PostScript", "ps", "application/postscript", "evince", "psSmall"));
-        list.add(new ExternalFileType("Word", "doc", "application/msword", "oowriter", "openoffice"));
-        list.add(new ExternalFileType("Word 2007+", "docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "oowriter", "openoffice"));
-        list.add(new ExternalFileType("OpenDocument text", "odt", "application/vnd.oasis.opendocument.text", "oowriter", "openoffice"));
-        list.add(new ExternalFileType("Excel", "xls", "application/excel", "oocalc", "openoffice"));
-        list.add(new ExternalFileType("Excel 2007+", "xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "oocalc", "openoffice"));
-        list.add(new ExternalFileType("OpenDocument spreadsheet", "ods", "application/vnd.oasis.opendocument.spreadsheet", "oocalc", "openoffice"));
-        list.add(new ExternalFileType("PowerPoint", "ppt", "application/vnd.ms-powerpoint", "ooimpress", "openoffice"));
-        list.add(new ExternalFileType("PowerPoint 2007+", "pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "ooimpress", "openoffice"));
-        list.add(new ExternalFileType("OpenDocument presentation", "odp", "application/vnd.oasis.opendocument.presentation", "ooimpress", "openoffice"));
-        list.add(new ExternalFileType("Rich Text Format", "rtf", "application/rtf", "oowriter", "openoffice"));
-        list.add(new ExternalFileType("PNG image", "png", "image/png", "gimp", "picture"));
-        list.add(new ExternalFileType("GIF image", "gif", "image/gif", "gimp", "picture"));
-        list.add(new ExternalFileType("JPG image", "jpg", "image/jpeg", "gimp", "picture"));
-        list.add(new ExternalFileType("Djvu", "djvu", "", "evince", "psSmall"));
-        list.add(new ExternalFileType("Text", "txt", "text/plain", "emacs", "emacs"));
-        list.add(new ExternalFileType("LaTeX", "tex", "application/x-latex", "emacs", "emacs"));
-        list.add(new ExternalFileType("CHM", "chm", "application/mshelp", "gnochm", "www"));
-        list.add(new ExternalFileType("TIFF image", "tiff", "image/tiff", "gimp", "picture"));
-        list.add(new ExternalFileType("URL", "html", "text/html", "firefox", "www"));
-        list.add(new ExternalFileType("MHT", "mht", "multipart/related", "firefox", "www"));
-        list.add(new ExternalFileType("ePUB", "epub", "application/epub+zip", "firefox", "www"));
-
-        // On all OSes there is a generic application available to handle file opening,
-        // so we don't need the default application settings anymore:
-        for (Iterator<ExternalFileType> iterator = list.iterator(); iterator.hasNext();) {
-            ExternalFileType type = iterator.next();
-            type.setOpenWith("");
-        }
-        
-
-        return list;
-    }
-
-    public ExternalFileType[] getExternalFileTypeSelection() {
-        return externalFileTypes.toArray
-                (new ExternalFileType[externalFileTypes.size()]);
-    }
-
-    /**
-     * Look up the external file type registered with this name, if any.
-     * @param name The file type name.
-     * @return The ExternalFileType registered, or null if none.
-     */
-    public ExternalFileType getExternalFileTypeByName(String name) {
-        for (Iterator<ExternalFileType> iterator = externalFileTypes.iterator(); iterator.hasNext();) {
-            ExternalFileType type = iterator.next();
-            if (type.getName().equals(name))
-                return type;
-        }
-        // Return an instance that signifies an unknown file type:
-        return new UnknownExternalFileType(name);
-    }
-
-    /**
-     * Look up the external file type registered for this extension, if any.
-     * @param extension The file extension.
-     * @return The ExternalFileType registered, or null if none.
-     */
-    public ExternalFileType getExternalFileTypeByExt(String extension) {
-        for (Iterator<ExternalFileType> iterator = externalFileTypes.iterator(); iterator.hasNext();) {
-            ExternalFileType type = iterator.next();
-            if ((type.getExtension() != null) && type.getExtension().equalsIgnoreCase(extension))
-                return type;
-        }
-        return null;
-    }
-
-    /**
-     * Look up the external file type registered for this filename, if any.
-     * @param filename The name of the file whose type to look up.
-     * @return The ExternalFileType registered, or null if none.
-     */
-    public ExternalFileType getExternalFileTypeForName(String filename) {
-        int longestFound = -1;
-        ExternalFileType foundType = null;
-        for (Iterator<ExternalFileType> iterator = externalFileTypes.iterator(); iterator.hasNext();) {
-            ExternalFileType type = iterator.next();
-            if ((type.getExtension() != null) && filename.toLowerCase().
-                    endsWith(type.getExtension().toLowerCase())) {
-                if (type.getExtension().length() > longestFound) {
-                    longestFound = type.getExtension().length();
-                    foundType = type;
-                }
-            }
-        }
-        return foundType;
-    }
-
-    /**
-     * Look up the external file type registered for this MIME type, if any.
-     * @param mimeType The MIME type.
-     * @return The ExternalFileType registered, or null if none. For the mime type "text/html",
-     *   a valid file type is guaranteed to be returned.
-     */
-    public ExternalFileType getExternalFileTypeByMimeType(String mimeType) {
-        for (Iterator<ExternalFileType> iterator = externalFileTypes.iterator(); iterator.hasNext();) {
-            ExternalFileType type = iterator.next();
-            if ((type.getMimeType() != null) && type.getMimeType().equals(mimeType))
-                return type;
-        }
-        if (mimeType.equals("text/html"))
-            return HTML_FALLBACK_TYPE;
-        else
-            return null;
-    }
-
-    /**
-     * Reset the List of external file types after user customization.
-     * @param types The new List of external file types. This is the complete list, not
-     *  just new entries.
-     */
-    public void setExternalFileTypes(List<ExternalFileType> types) {
-
-        // First find a list of the default types:
-        List<ExternalFileType> defTypes = getDefaultExternalFileTypes();
-        // Make a list of types that are unchanged:
-        List<ExternalFileType> unchanged = new ArrayList<ExternalFileType>();
-
-        externalFileTypes.clear();
-        for (Iterator<ExternalFileType> iterator = types.iterator(); iterator.hasNext();) {
-            ExternalFileType type = iterator.next();
-            externalFileTypes.add(type);
-
-            // See if we can find a type with matching name in the default type list:
-            ExternalFileType found = null;
-            for (ExternalFileType defType : defTypes) {
-                if (defType.getName().equals(type.getName())) {
-                    found = defType;
-                    break;
-                }
-            }
-            if (found != null) {
-                // Found it! Check if it is an exact match, or if it has been customized:
-                if (found.equals(type))
-                    unchanged.add(type);
-                else {
-                    // It was modified. Remove its entry from the defaults list, since
-                    // the type hasn't been removed:
-                    defTypes.remove(found);
-                }
-            }
-        }
-
-        // Go through unchanged types. Remove them from the ones that should be stored,
-        // and from the list of defaults, since we don't need to mention these in prefs:
-        for (ExternalFileType type : unchanged) {
-            defTypes.remove(type);
-            types.remove(type);
-        }
-
-        // Now set up the array to write to prefs, containing all new types, all modified
-        // types, and a flag denoting each default type that has been removed:
-        String[][] array = new String[types.size()+defTypes.size()][];
-        int i=0;
-        for (ExternalFileType type : types) {
-            array[i] = type.getStringArrayRepresentation();
-            i++;
-        }
-        for (ExternalFileType type : defTypes) {
-            array[i] = new String[] {type.getName(), FILE_TYPE_REMOVED_FLAG};
-            i++;
-        }
-        //System.out.println("Encoded: '"+Util.encodeStringArray(array)+"'");
-        put("externalFileTypes", Util.encodeStringArray(array));
-    }
-
-    
-    /**
-     * Set up the list of external file types, either from default values, or from values
-     * recorded in Preferences.
-     */
-    public void updateExternalFileTypes() {
-        // First get a list of the default file types as a starting point:
-        List<ExternalFileType> types = getDefaultExternalFileTypes();
-        // If no changes have been stored, simply use the defaults:
-        if (prefs.get("externalFileTypes", null) == null) {
-            externalFileTypes.clear();
-            externalFileTypes.addAll(types);
-            return;
-        }
-        // Read the prefs information for file types:
-        String[][] vals = Util.decodeStringDoubleArray(prefs.get("externalFileTypes", ""));
-        for (int i = 0; i < vals.length; i++) {
-            if ((vals[i].length == 2) && (vals[i][1].equals(FILE_TYPE_REMOVED_FLAG))) {
-                // This entry indicates that a default entry type should be removed:
-                ExternalFileType toRemove = null;
-                for (ExternalFileType type : types) {
-                    if (type.getName().equals(vals[i][0])) {
-                        toRemove = type;
-                        break;
-                    }
-                }
-                // If we found it, remove it from the type list:
-                if (toRemove != null)
-                    types.remove(toRemove);
-            }
-            else {
-                // A new or modified entry type. Construct it from the string array:
-                ExternalFileType type = new ExternalFileType(vals[i]);
-                // Check if there is a default type with the same name. If so, this is a
-                // modification of that type, so remove the default one:
-                ExternalFileType toRemove = null;
-                for (ExternalFileType defType : types) {
-                    if (type.getName().equals(defType.getName())) {
-                        toRemove = defType;
-                        break;
-                    }
-                }
-                // If we found it, remove it from the type list:
-                if (toRemove != null) {
-                    types.remove(toRemove);
-                }
-                
-                // Then add the new one:
-                types.add(type);
-            }
-        }
-
-        // Finally, build the list of types based on the modified defaults list:
-        for (ExternalFileType type : types) {
-            externalFileTypes.add(type);
-        }
-    }
-
-
-    /**
-     * Removes all information about custom entry types with tags of
-     * @param number or higher.
-     */
-    public void purgeCustomEntryTypes(int number) {
-        purgeSeries(CUSTOM_TYPE_NAME, number);
-        purgeSeries(CUSTOM_TYPE_REQ, number);
-        purgeSeries(CUSTOM_TYPE_OPT, number);
-        purgeSeries(CUSTOM_TYPE_PRIOPT, number);
-    }
-
-    /**
-     * Removes all entries keyed by prefix+number, where number
-     * is equal to or higher than the given number.
-     * @param number or higher.
-     */
-    public void purgeSeries(String prefix, int number) {
-        while (get(prefix+number) != null) {
-            remove(prefix+number);
-            number++;
-        }
-    }
-
-    public EntryEditorTabList getEntryEditorTabList() {
-    if (tabList == null)
-        updateEntryEditorTabList();
-    return tabList;
-    }
-
-    public void updateEntryEditorTabList() {
-    tabList = new EntryEditorTabList();
-    }
-
-    /**
-     * Exports Preferences to an XML file.
-     *
-     * @param filename String File to export to
-     */
-    public void exportPreferences(String filename) throws IOException {
-      File f = new File(filename);
-      OutputStream os = new FileOutputStream(f);
-      try {
-        prefs.exportSubtree(os);
-      } catch (BackingStoreException ex) {
-        throw new IOException(ex.getMessage());
-      }
-    }
-
-      /**
-       * Imports Preferences from an XML file.
-       *
-       * @param filename String File to import from
-       */
-      public void importPreferences(String filename) throws IOException {
-        File f = new File(filename);
-        InputStream is = new FileInputStream(f);
-        try {
-          Preferences.importPreferences(is);
-        } catch (InvalidPreferencesFormatException ex) {
-          throw new IOException(ex.getMessage());
-        }
-      }
-
-    /**
-     * Determines whether the given field should be written without any sort of wrapping.
-     * @param fieldName The field name.
-     * @return true if the field should not be wrapped.
-     */
-    public boolean isNonWrappableField(String fieldName) {
-        return nonWrappableFields.contains(fieldName);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.Color;
+import java.awt.event.KeyEvent;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.TreeSet;
+import java.util.Vector;
+import java.util.prefs.BackingStoreException;
+import java.util.prefs.InvalidPreferencesFormatException;
+import java.util.prefs.Preferences;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+import javax.swing.JTable;
+import javax.swing.KeyStroke;
+
+import net.sf.jabref.export.CustomExportList;
+import net.sf.jabref.export.ExportComparator;
+import net.sf.jabref.external.DroppedFileHandler;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.external.UnknownExternalFileType;
+import net.sf.jabref.gui.CleanUpAction;
+import net.sf.jabref.gui.PersistenceTableColumnListener;
+import net.sf.jabref.imports.CustomImportList;
+import net.sf.jabref.labelPattern.LabelPattern;
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+
+public class JabRefPreferences {
+
+    public final static String
+        CUSTOM_TYPE_NAME = "customTypeName_",
+        CUSTOM_TYPE_REQ = "customTypeReq_",
+        CUSTOM_TYPE_OPT = "customTypeOpt_",
+        CUSTOM_TYPE_PRIOPT = "customTypePriOpt_",
+        CUSTOM_TAB_NAME = "customTabName_",
+        CUSTOM_TAB_FIELDS = "customTabFields_",
+        EMACS_PATH = "emacsPath",
+        EMACS_ADDITIONAL_PARAMETERS = "emacsParameters",
+        EMACS_23 = "emacsUseV23InsertString",
+        EDIT_GROUP_MEMBERSHIP_MODE = "groupEditGroupMembershipMode",
+        
+        PDF_PREVIEW = "pdfPreview",
+
+        SHOWONELETTERHEADINGFORICONCOLUMNS = "showOneLetterHeadingForIconColumns",
+
+        SHORTEST_TO_COMPLETE = "shortestToComplete",
+        AUTOCOMPLETE_FIRSTNAME_MODE = "autoCompFirstNameMode",
+        // here are the possible values for _MODE:
+        AUTOCOMPLETE_FIRSTNAME_MODE_BOTH = "both",
+        AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_FULL = "fullOnly",
+        AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_ABBR = "abbrOnly";
+
+    // This String is used in the encoded list in prefs of external file type
+    // modifications, in order to indicate a removed default file type:
+    public static final String FILE_TYPE_REMOVED_FLAG = "REMOVED";
+
+    public String WRAPPED_USERNAME, MARKING_WITH_NUMBER_PATTERN;
+
+    Preferences prefs;
+    public HashMap<String, Object> defaults = new HashMap<String, Object>();
+    public HashMap<String, String>
+        keyBinds = new HashMap<String, String>(),
+        defKeyBinds = new HashMap<String, String>();
+    private HashSet<String> putBracesAroundCapitalsFields = new HashSet<String>(4);
+    private HashSet<String> nonWrappableFields = new HashSet<String>(5);
+    private static LabelPattern keyPattern;
+
+    // Object containing custom export formats:
+    public CustomExportList customExports;
+
+    /** Set with all custom {@link net.sf.jabref.imports.ImportFormat}s */
+    public CustomImportList customImports;
+
+    // Object containing info about customized entry editor tabs.
+    private EntryEditorTabList tabList = null;
+
+    // Map containing all registered external file types:
+    private TreeSet<ExternalFileType> externalFileTypes = new TreeSet<ExternalFileType>();
+
+    public final ExternalFileType HTML_FALLBACK_TYPE =
+            new ExternalFileType("URL", "html", "text/html", "", "www");
+
+    // The following field is used as a global variable during the export of a database.
+    // By setting this field to the path of the database's default file directory, formatters
+    // that should resolve external file paths can access this field. This is an ugly hack
+    // to solve the problem of formatters not having access to any context except for the
+    // string to be formatted and possible formatter arguments.
+    public String[] fileDirForDatabase = null;
+
+    // Similarly to the previous variable, this is a global that can be used during
+    // the export of a database if the database filename should be output. If a database
+    // is tied to a file on disk, this variable is set to that file before export starts:
+    public File databaseFile = null;
+
+    // The following field is used as a global variable during the export of a database.
+    // It is used to hold custom name formatters defined by a custom export filter.
+    // It is set before the export starts:
+    public HashMap<String,String> customExportNameFormatters = null;
+
+    // The only instance of this class:
+    private static JabRefPreferences singleton = null;
+
+    public static JabRefPreferences getInstance() {
+		if (singleton == null)
+			singleton = new JabRefPreferences();
+		return singleton;
+	}
+
+    // The constructor is made private to enforce this as a singleton class:
+    private JabRefPreferences() {
+
+        try {
+            if (new File("jabref.xml").exists()){
+                importPreferences("jabref.xml");
+            }
+        } catch (IOException e) {
+            Globals.logger("Could not import preferences from jabref.xml:" + e.getLocalizedMessage());
+        }
+        
+        prefs = Preferences.userNodeForPackage(JabRef.class);
+        
+        if (Globals.osName.equals(Globals.MAC)) {
+			//defaults.put("pdfviewer", "/Applications/Preview.app");
+			//defaults.put("psviewer", "/Applications/Preview.app");
+			//defaults.put("htmlviewer", "/Applications/Safari.app");
+        	defaults.put(EMACS_PATH, "emacsclient");
+        	defaults.put(EMACS_23, true);
+        	defaults.put(EMACS_ADDITIONAL_PARAMETERS, "-n -e");
+            defaults.put("fontFamily", "SansSerif");
+
+		} else if (Globals.osName.toLowerCase().startsWith("windows")) {
+			//defaults.put("pdfviewer", "cmd.exe /c start /b");
+			//defaults.put("psviewer", "cmd.exe /c start /b");
+			//defaults.put("htmlviewer", "cmd.exe /c start /b");
+			defaults.put("lookAndFeel", "com.jgoodies.looks.windows.WindowsLookAndFeel");
+            defaults.put("winEdtPath", "C:\\Program Files\\WinEdt Team\\WinEdt\\WinEdt.exe");
+            defaults.put("latexEditorPath", "C:\\Program Files\\LEd\\LEd.exe");
+        	defaults.put(EMACS_PATH, "emacsclient.exe");
+        	defaults.put(EMACS_23, true);
+        	defaults.put(EMACS_ADDITIONAL_PARAMETERS, "-n -e");
+            defaults.put("fontFamily", "Arial");
+
+        } else {
+			//defaults.put("pdfviewer", "evince");
+			//defaults.put("psviewer", "gv");
+			//defaults.put("htmlviewer", "firefox");
+			defaults.put("lookAndFeel", "com.jgoodies.plaf.plastic.Plastic3DLookAndFeel");
+            defaults.put("fontFamily", "SansSerif");
+            
+        	// linux
+        	defaults.put(EMACS_PATH, "gnuclient");
+        	defaults.put(EMACS_23, false);
+        	defaults.put(EMACS_ADDITIONAL_PARAMETERS, "-batch -eval");
+		}
+        defaults.put(PDF_PREVIEW, Boolean.FALSE);
+        defaults.put("useDefaultLookAndFeel", Boolean.TRUE);
+        defaults.put("lyxpipe", System.getProperty("user.home")+File.separator+".lyx/lyxpipe");
+        defaults.put("vim", "vim");
+        defaults.put("vimServer", "vim");
+        defaults.put("posX", new Integer(0));
+        defaults.put("posY", new Integer(0));
+        defaults.put("sizeX", new Integer(840));
+        defaults.put("sizeY", new Integer(680));
+        defaults.put("windowMaximised", Boolean.FALSE);
+        defaults.put("autoResizeMode", new Integer(JTable.AUTO_RESIZE_ALL_COLUMNS));
+        defaults.put("previewPanelHeight", 200);
+        defaults.put("entryEditorHeight", 400);
+        defaults.put("tableColorCodesOn", Boolean.TRUE);
+        defaults.put("namesAsIs", Boolean.FALSE); // "Show names unchanged"
+        defaults.put("namesFf", Boolean.FALSE); // "Show 'Firstname Lastname'"
+        defaults.put("namesLf", Boolean.FALSE); // "Show 'Lastname, Firstname'"
+        defaults.put("namesNatbib", Boolean.TRUE);  // "Natbib style"
+        defaults.put("abbrAuthorNames", Boolean.TRUE); // "Abbreviate names"
+        defaults.put("namesLastOnly", Boolean.TRUE); // "Show last names only"
+        defaults.put("language", "en");
+        defaults.put("showShort", Boolean.TRUE);
+        defaults.put("priSort", "author");
+        defaults.put("priDescending", Boolean.FALSE);
+        defaults.put("priBinary", Boolean.FALSE);
+        defaults.put("secSort", "year");
+        defaults.put("secDescending", Boolean.TRUE);
+        defaults.put("terSort", "author");
+        defaults.put("terDescending", Boolean.FALSE);
+        defaults.put("columnNames", "entrytype;author;title;year;journal;owner;timestamp;bibtexkey");
+        defaults.put("columnWidths","75;280;400;60;100;100;100;100");
+        defaults.put(PersistenceTableColumnListener.ACTIVATE_PREF_KEY, 
+        		new Boolean(PersistenceTableColumnListener.DEFAULT_ENABLED));
+        defaults.put("xmpPrivacyFilters", "pdf;timestamp;keywords;owner;note;review");
+        defaults.put("useXmpPrivacyFilter", Boolean.FALSE);
+        defaults.put("numberColWidth",new Integer(GUIGlobals.NUMBER_COL_LENGTH));
+        defaults.put("workingDirectory", System.getProperty("user.home"));
+        defaults.put("exportWorkingDirectory", System.getProperty("user.home"));
+        defaults.put("importWorkingDirectory", System.getProperty("user.home"));
+        defaults.put("fileWorkingDirectory", System.getProperty("user.home"));
+        defaults.put("autoOpenForm", Boolean.TRUE);
+        defaults.put("entryTypeFormHeightFactor", new Integer(1));
+        defaults.put("entryTypeFormWidth", new Integer(1));
+        defaults.put("backup", Boolean.TRUE);
+        defaults.put("openLastEdited", Boolean.TRUE);
+        defaults.put("lastEdited", null);
+        defaults.put("stringsPosX", new Integer(0));
+        defaults.put("stringsPosY", new Integer(0));
+        defaults.put("stringsSizeX", new Integer(600));
+        defaults.put("stringsSizeY", new Integer(400));
+        defaults.put("defaultShowSource", Boolean.FALSE);
+        defaults.put("showSource", Boolean.TRUE);
+        defaults.put("defaultAutoSort", Boolean.FALSE);
+        defaults.put("enableSourceEditing", Boolean.TRUE);
+        defaults.put("caseSensitiveSearch", Boolean.FALSE);
+        defaults.put("searchReq", Boolean.TRUE);
+        defaults.put("searchOpt", Boolean.TRUE);
+        defaults.put("searchGen", Boolean.TRUE);
+        defaults.put("searchAll", Boolean.FALSE);
+        defaults.put("incrementS", Boolean.FALSE);
+        defaults.put("searchAutoComplete", Boolean.TRUE);
+        defaults.put("saveInStandardOrder", Boolean.TRUE);
+        defaults.put("saveInOriginalOrder", Boolean.FALSE);
+        defaults.put("exportInStandardOrder", Boolean.TRUE);
+        defaults.put("exportInOriginalOrder", Boolean.FALSE);
+        defaults.put("selectS", Boolean.FALSE);
+        defaults.put("regExpSearch", Boolean.TRUE);
+        defaults.put("highLightWords", Boolean.TRUE);
+        defaults.put("searchPanePosX", new Integer(0));
+        defaults.put("searchPanePosY", new Integer(0));
+        defaults.put("autoComplete", Boolean.TRUE);
+        defaults.put("autoCompleteFields", "author;editor;title;journal;publisher;keywords;crossref");
+        defaults.put("autoCompFF", Boolean.FALSE); // "Autocomplete names in 'Firstname Lastname' format only"
+        defaults.put("autoCompLF", Boolean.FALSE); // "Autocomplete names in 'Lastname, Firstname' format only"
+        defaults.put(SHORTEST_TO_COMPLETE, new Integer(2));
+        defaults.put(AUTOCOMPLETE_FIRSTNAME_MODE, AUTOCOMPLETE_FIRSTNAME_MODE_BOTH);
+        defaults.put("groupSelectorVisible", Boolean.TRUE);
+        defaults.put("groupFloatSelections", Boolean.TRUE);
+        defaults.put("groupIntersectSelections", Boolean.TRUE);
+        defaults.put("groupInvertSelections", Boolean.FALSE);
+        defaults.put("groupShowOverlapping", Boolean.FALSE);
+        defaults.put("groupSelectMatches", Boolean.FALSE);
+        defaults.put("groupsDefaultField", "keywords");
+        defaults.put("groupShowIcons", Boolean.TRUE);
+        defaults.put("groupShowDynamic", Boolean.TRUE);
+        defaults.put("groupExpandTree", Boolean.TRUE);
+        defaults.put("groupAutoShow", Boolean.TRUE);
+        defaults.put("groupAutoHide", Boolean.TRUE);
+        defaults.put("autoAssignGroup", Boolean.TRUE);
+        defaults.put("groupKeywordSeparator", ", ");
+        defaults.put(EDIT_GROUP_MEMBERSHIP_MODE, Boolean.FALSE);
+        defaults.put("highlightGroupsMatchingAny", Boolean.FALSE);
+        defaults.put("highlightGroupsMatchingAll", Boolean.FALSE);
+        defaults.put("searchPanelVisible", Boolean.FALSE);
+        defaults.put("defaultEncoding", System.getProperty("file.encoding"));
+        defaults.put("groupsVisibleRows", new Integer(8));
+        defaults.put("defaultOwner", System.getProperty("user.name"));
+        defaults.put("preserveFieldFormatting", Boolean.FALSE);
+        defaults.put("memoryStickMode", Boolean.FALSE);
+        defaults.put("renameOnMoveFileToFileDir", Boolean.TRUE);
+
+    // The general fields stuff is made obsolete by the CUSTOM_TAB_... entries.
+        defaults.put("generalFields", "crossref;keywords;file;doi;url;urldate;"+
+                     "pdf;comment;owner");
+
+        defaults.put("useCustomIconTheme", Boolean.FALSE);
+        defaults.put("customIconThemeFile", "/home/alver/div/crystaltheme_16/Icons.properties");
+
+        //defaults.put("recentFiles", "/home/alver/Documents/bibk_dok/hovedbase.bib");
+        defaults.put("historySize", new Integer(8));
+        defaults.put("fontStyle", new Integer(java.awt.Font.PLAIN));
+        defaults.put("fontSize", new Integer(12));
+        defaults.put("overrideDefaultFonts", Boolean.FALSE);
+        defaults.put("menuFontFamily", "Times");
+        defaults.put("menuFontStyle", new Integer(java.awt.Font.PLAIN));
+        defaults.put("menuFontSize", new Integer(11));
+        // Main table color settings:
+        defaults.put("tableBackground", "255:255:255");
+        defaults.put("tableReqFieldBackground", "230:235:255");
+        defaults.put("tableOptFieldBackground", "230:255:230");
+        defaults.put("tableText", "0:0:0");
+        defaults.put("gridColor", "210:210:210");
+        defaults.put("grayedOutBackground", "210:210:210");
+        defaults.put("grayedOutText", "40:40:40");
+        defaults.put("veryGrayedOutBackground", "180:180:180");
+        defaults.put("veryGrayedOutText", "40:40:40");
+        defaults.put("markedEntryBackground0", "255:255:180");
+        defaults.put("markedEntryBackground1", "255:220:180");
+        defaults.put("markedEntryBackground2", "255:180:160");
+        defaults.put("markedEntryBackground3", "255:120:120");
+        defaults.put("markedEntryBackground4", "255:75:75");
+        defaults.put("markedEntryBackground5", "220:255:220");
+        defaults.put("validFieldBackgroundColor", "255:255:255");
+        defaults.put("invalidFieldBackgroundColor", "255:0:0");
+        defaults.put("activeFieldEditorBackgroundColor", "220:220:255");
+        defaults.put("fieldEditorTextColor", "0:0:0");
+
+        defaults.put("incompleteEntryBackground", "250:175:175");
+
+        defaults.put("antialias", Boolean.FALSE);
+        defaults.put("ctrlClick", Boolean.FALSE);
+        defaults.put("disableOnMultipleSelection", Boolean.FALSE);
+        defaults.put("pdfColumn", Boolean.FALSE);
+        defaults.put("urlColumn", Boolean.TRUE);
+        defaults.put("fileColumn", Boolean.TRUE);
+        defaults.put("arxivColumn", Boolean.FALSE);
+        
+        defaults.put(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED, SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED_DEFAULT);
+        defaults.put(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY, SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY_DEFAULT);
+        defaults.put(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY, SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY_DEFAULT);
+        defaults.put(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING, SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING_DEFAULT);
+        defaults.put(SpecialFieldsUtils.PREF_RANKING_COMPACT, SpecialFieldsUtils.PREF_RANKING_COMPACT_DEFAULT);
+        defaults.put(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE, SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE_DEFAULT);
+        defaults.put(SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS, SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS_DEFAULT);
+    	defaults.put(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS, SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS_DEFAULT);
+    	
+    	defaults.put(SHOWONELETTERHEADINGFORICONCOLUMNS, Boolean.FALSE);
+        
+        defaults.put("useOwner", Boolean.TRUE);
+        defaults.put("overwriteOwner", Boolean.FALSE);
+        defaults.put("allowTableEditing", Boolean.FALSE);
+        defaults.put("dialogWarningForDuplicateKey", Boolean.TRUE);
+        defaults.put("dialogWarningForEmptyKey", Boolean.TRUE);
+        defaults.put("displayKeyWarningDialogAtStartup", Boolean.TRUE);
+        defaults.put("avoidOverwritingKey", Boolean.FALSE);
+        defaults.put("warnBeforeOverwritingKey", Boolean.TRUE);
+        defaults.put("confirmDelete", Boolean.TRUE);
+        defaults.put("grayOutNonHits", Boolean.TRUE);
+        defaults.put("floatSearch", Boolean.TRUE);
+        defaults.put("showSearchInDialog", Boolean.FALSE);
+        defaults.put("searchAllBases", Boolean.FALSE);
+        defaults.put("defaultLabelPattern", "[auth][year]");
+        defaults.put("previewEnabled", Boolean.TRUE);
+        defaults.put("activePreview", 0);
+        defaults.put("preview0", "<font face=\"arial\">"
+                     +"<b><i>\\bibtextype</i><a name=\"\\bibtexkey\">\\begin{bibtexkey} (\\bibtexkey)</a>"
+                     +"\\end{bibtexkey}</b><br>__NEWLINE__"
+                     +"\\begin{author} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\author}<BR>\\end{author}__NEWLINE__"
+                     +"\\begin{editor} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\editor} "
+                     +"<i>(\\format[IfPlural(Eds.,Ed.)]{\\editor})</i><BR>\\end{editor}__NEWLINE__"
+                     +"\\begin{title} \\format[HTMLChars]{\\title} \\end{title}<BR>__NEWLINE__"
+                     +"\\begin{chapter} \\format[HTMLChars]{\\chapter}<BR>\\end{chapter}__NEWLINE__"
+                     +"\\begin{journal} <em>\\format[HTMLChars]{\\journal}, </em>\\end{journal}__NEWLINE__"
+                     // Include the booktitle field for @inproceedings, @proceedings, etc.
+                     +"\\begin{booktitle} <em>\\format[HTMLChars]{\\booktitle}, </em>\\end{booktitle}__NEWLINE__"
+                     +"\\begin{school} <em>\\format[HTMLChars]{\\school}, </em>\\end{school}__NEWLINE__"
+                     +"\\begin{institution} <em>\\format[HTMLChars]{\\institution}, </em>\\end{institution}__NEWLINE__"
+                     +"\\begin{publisher} <em>\\format[HTMLChars]{\\publisher}, </em>\\end{publisher}__NEWLINE__"
+                     +"\\begin{year}<b>\\year</b>\\end{year}\\begin{volume}<i>, \\volume</i>\\end{volume}"
+                     +"\\begin{pages}, \\format[FormatPagesForHTML]{\\pages} \\end{pages}__NEWLINE__"
+                     +"\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract} \\end{abstract}__NEWLINE__"
+                     +"\\begin{review}<BR><BR><b>Review: </b> \\format[HTMLChars]{\\review} \\end{review}"
+                     +"</dd>__NEWLINE__<p></p></font>");
+        defaults.put("preview1", "<font face=\"arial\">"
+                     +"<b><i>\\bibtextype</i><a name=\"\\bibtexkey\">\\begin{bibtexkey} (\\bibtexkey)</a>"
+                     +"\\end{bibtexkey}</b><br>__NEWLINE__"
+                     +"\\begin{author} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\author}<BR>\\end{author}__NEWLINE__"
+                     +"\\begin{editor} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\editor} "
+                     +"<i>(\\format[IfPlural(Eds.,Ed.)]{\\editor})</i><BR>\\end{editor}__NEWLINE__"
+                     +"\\begin{title} \\format[HTMLChars]{\\title} \\end{title}<BR>__NEWLINE__"
+                     +"\\begin{chapter} \\format[HTMLChars]{\\chapter}<BR>\\end{chapter}__NEWLINE__"
+                     +"\\begin{journal} <em>\\format[HTMLChars]{\\journal}, </em>\\end{journal}__NEWLINE__"
+                     // Include the booktitle field for @inproceedings, @proceedings, etc.
+                     +"\\begin{booktitle} <em>\\format[HTMLChars]{\\booktitle}, </em>\\end{booktitle}__NEWLINE__"
+                     +"\\begin{school} <em>\\format[HTMLChars]{\\school}, </em>\\end{school}__NEWLINE__"
+                     +"\\begin{institution} <em>\\format[HTMLChars]{\\institution}, </em>\\end{institution}__NEWLINE__"
+                     +"\\begin{publisher} <em>\\format[HTMLChars]{\\publisher}, </em>\\end{publisher}__NEWLINE__"
+                     +"\\begin{year}<b>\\year</b>\\end{year}\\begin{volume}<i>, \\volume</i>\\end{volume}"
+                     +"\\begin{pages}, \\format[FormatPagesForHTML]{\\pages} \\end{pages}"
+                     +"</dd>__NEWLINE__<p></p></font>");
+
+
+        // TODO: Currently not possible to edit this setting:
+        defaults.put("previewPrintButton", Boolean.FALSE);
+        defaults.put("autoDoubleBraces", Boolean.FALSE);
+        defaults.put("doNotResolveStringsFor", "url");
+        defaults.put("resolveStringsAllFields", Boolean.FALSE);
+        defaults.put("putBracesAroundCapitals","");//"title;journal;booktitle;review;abstract");
+        defaults.put("nonWrappableFields", "pdf;ps;url;doi;file");
+        defaults.put("useImportInspectionDialog", Boolean.TRUE);
+        defaults.put("useImportInspectionDialogForSingle", Boolean.TRUE);
+        defaults.put("generateKeysAfterInspection", Boolean.TRUE);
+        defaults.put("markImportedEntries", Boolean.TRUE);
+        defaults.put("unmarkAllEntriesBeforeImporting", Boolean.TRUE);
+        defaults.put("warnAboutDuplicatesInInspection", Boolean.TRUE);
+        defaults.put("useTimeStamp", Boolean.TRUE);
+        defaults.put("overwriteTimeStamp", Boolean.FALSE);
+        defaults.put("timeStampFormat", "yyyy.MM.dd");
+//        defaults.put("timeStampField", "timestamp");
+        defaults.put("timeStampField", BibtexFields.TIMESTAMP);
+        defaults.put("generateKeysBeforeSaving", Boolean.FALSE);
+
+        defaults.put("useRemoteServer", Boolean.FALSE);
+        defaults.put("remoteServerPort", new Integer(6050));
+
+        defaults.put("personalJournalList", null);
+        defaults.put("externalJournalLists", null);
+        defaults.put("citeCommand", "cite"); // obsoleted by the app-specific ones
+        defaults.put("citeCommandVim", "\\cite");
+        defaults.put("citeCommandEmacs", "\\cite");
+        defaults.put("citeCommandWinEdt", "\\cite");
+        defaults.put("citeCommandLed", "\\cite");
+        defaults.put("floatMarkedEntries", Boolean.TRUE);
+
+        defaults.put("useNativeFileDialogOnMac", Boolean.FALSE);
+        defaults.put("filechooserDisableRename", Boolean.TRUE);
+
+        defaults.put("lastUsedExport", null);
+        defaults.put("sidePaneWidth", new Integer(-1));
+
+        defaults.put("importInspectionDialogWidth", new Integer(650));
+        defaults.put("importInspectionDialogHeight", new Integer(650));
+        defaults.put("searchDialogWidth", new Integer(650));
+        defaults.put("searchDialogHeight", new Integer(500));
+        defaults.put("showFileLinksUpgradeWarning", Boolean.TRUE);
+        defaults.put("autolinkExactKeyOnly", Boolean.TRUE);
+        defaults.put("numericFields", "mittnum;author");
+        defaults.put("runAutomaticFileSearch", Boolean.FALSE);
+        defaults.put("useLockFiles", Boolean.TRUE);
+        defaults.put("autoSave", Boolean.TRUE);
+        defaults.put("autoSaveInterval", 5);
+        defaults.put("promptBeforeUsingAutosave", Boolean.TRUE);
+        defaults.put("deletePlugins", "");
+        defaults.put("enforceLegalBibtexKey", Boolean.TRUE);
+        defaults.put("biblatexMode", Boolean.FALSE);
+        defaults.put("keyGenFirstLetterA", Boolean.TRUE);
+        defaults.put("keyGenAlwaysAddLetter", Boolean.FALSE);
+        defaults.put(JabRefPreferences.EMAIL_SUBJECT, Globals.lang("References"));
+        defaults.put(JabRefPreferences.OPEN_FOLDERS_OF_ATTACHED_FILES, Boolean.FALSE);
+        defaults.put("allowFileAutoOpenBrowse", Boolean.TRUE);
+        defaults.put("webSearchVisible", Boolean.FALSE);
+        defaults.put("selectedFetcherIndex", 0);
+        defaults.put("bibLocationAsFileDir", Boolean.TRUE);
+        defaults.put("bibLocAsPrimaryDir", Boolean.FALSE);
+        defaults.put("dbConnectServerType", "MySQL");
+        defaults.put("dbConnectHostname", "localhost");
+        defaults.put("dbConnectDatabase", "jabref");
+        defaults.put("dbConnectUsername", "root");
+        CleanUpAction.putDefaults(defaults);
+        
+        // defaults for DroppedFileHandler UI
+    	defaults.put(DroppedFileHandler.DFH_LEAVE, Boolean.FALSE);
+    	defaults.put(DroppedFileHandler.DFH_COPY, Boolean.TRUE);
+    	defaults.put(DroppedFileHandler.DFH_MOVE, Boolean.FALSE);
+    	defaults.put(DroppedFileHandler.DFH_RENAME, Boolean.FALSE);
+        
+        //defaults.put("lastAutodetectedImport", "");
+        
+        //defaults.put("autoRemoveExactDuplicates", Boolean.FALSE);
+        //defaults.put("confirmAutoRemoveExactDuplicates", Boolean.TRUE);
+        
+        //defaults.put("tempDir", System.getProperty("java.io.tmpdir"));
+        //Util.pr(System.getProperty("java.io.tempdir"));
+
+        //defaults.put("keyPattern", new LabelPattern(KEY_PATTERN));
+        
+        defaults.put(ImportSettingsTab.PREF_IMPORT_ALWAYSUSE, Boolean.FALSE);
+        defaults.put(ImportSettingsTab.PREF_IMPORT_DEFAULT_PDF_IMPORT_STYLE, ImportSettingsTab.DEFAULT_STYLE);
+        defaults.put(ImportSettingsTab.PREF_IMPORT_FILENAMEPATTERN, ImportSettingsTab.DEFAULT_FILENAMEPATTERNS[0]);
+        
+        restoreKeyBindings();
+
+        customExports = new CustomExportList(new ExportComparator());
+        customImports = new CustomImportList(this);
+
+        //defaults.put("oooWarning", Boolean.TRUE);
+        updateSpecialFieldHandling();
+        WRAPPED_USERNAME = "["+get("defaultOwner")+"]";
+        MARKING_WITH_NUMBER_PATTERN = "\\["+get("defaultOwner").replaceAll("\\\\","\\\\\\\\")+":(\\d+)\\]";
+
+        String defaultExpression = "**/.*[bibtexkey].*\\\\.[extension]";
+        defaults.put(DEFAULT_REG_EXP_SEARCH_EXPRESSION_KEY, defaultExpression);
+        defaults.put(REG_EXP_SEARCH_EXPRESSION_KEY, defaultExpression);
+        defaults.put(USE_REG_EXP_SEARCH_KEY, Boolean.FALSE);
+        defaults.put("useIEEEAbrv", Boolean.TRUE);
+        defaults.put("useConvertToEquation", Boolean.FALSE);
+        defaults.put("useCaseKeeperOnSearch", Boolean.TRUE);
+
+	defaults.put("userFileDir", GUIGlobals.FILE_FIELD + "Directory");
+	try {
+	    defaults.put("userFileDirIndividual", GUIGlobals.FILE_FIELD + "Directory" + "-" + get("defaultOwner") + "@" + InetAddress.getLocalHost().getHostName());
+	}
+	catch(UnknownHostException ex) {
+	    Globals.logger("Hostname not found.");
+	    defaults.put("userFileDirIndividual", GUIGlobals.FILE_FIELD + "Directory" + "-" + get("defaultOwner"));
+	}
+    }
+
+    public void setLanguageDependentDefaultValues() {
+
+        // Entry editor tab 0:
+        defaults.put(CUSTOM_TAB_NAME+"_def0", Globals.lang("General"));
+            defaults.put(CUSTOM_TAB_FIELDS+"_def0", "crossref;keywords;file;doi;url;"+
+                         "comment;owner;timestamp");
+
+        // Entry editor tab 1:
+            defaults.put(CUSTOM_TAB_FIELDS+"_def1", "abstract");
+        defaults.put(CUSTOM_TAB_NAME+"_def1", Globals.lang("Abstract"));
+
+      // Entry editor tab 2: Review Field - used for research comments, etc.
+            defaults.put(CUSTOM_TAB_FIELDS+"_def2", "review");
+        defaults.put(CUSTOM_TAB_NAME+"_def2", Globals.lang("Review"));
+
+    }
+    
+    public static final String DEFAULT_REG_EXP_SEARCH_EXPRESSION_KEY = "defaultRegExpSearchExpression";
+    public static final String REG_EXP_SEARCH_EXPRESSION_KEY = "regExpSearchExpression";
+    public static final String USE_REG_EXP_SEARCH_KEY = "useRegExpSearch";
+
+	public static final String EMAIL_SUBJECT = "emailSubject";
+	public static final String OPEN_FOLDERS_OF_ATTACHED_FILES = "openFoldersOfAttachedFiles";
+
+
+	public boolean putBracesAroundCapitals(String fieldName) {
+        return putBracesAroundCapitalsFields.contains(fieldName);
+    }
+
+    public void updateSpecialFieldHandling() {
+        putBracesAroundCapitalsFields.clear();
+        String fieldString = get("putBracesAroundCapitals");
+        if (fieldString.length() > 0) {
+            String[] fields = fieldString.split(";");
+            for (int i=0; i<fields.length; i++)
+                putBracesAroundCapitalsFields.add(fields[i].trim());
+        }
+        nonWrappableFields.clear();
+        fieldString = get("nonWrappableFields");
+        if (fieldString.length() > 0) {
+            String[] fields = fieldString.split(";");
+            for (int i=0; i<fields.length; i++)
+                nonWrappableFields.add(fields[i].trim());
+        }
+
+    }
+
+    /**
+     * Check whether a key is set (differently from null).
+     * @param key The key to check.
+     * @return true if the key is set, false otherwise.
+     */
+    public boolean hasKey(String key) {
+        return prefs.get(key, null) != null;
+    }
+
+    public String get(String key) {
+        return prefs.get(key, (String)defaults.get(key));
+    }
+
+    public String get(String key, String def) {
+        return prefs.get(key, def);
+    }
+
+    public boolean getBoolean(String key) {
+        return prefs.getBoolean(key, getBooleanDefault(key));
+    }
+    
+    public boolean getBooleanDefault(String key){
+        return ((Boolean)defaults.get(key)).booleanValue();
+    }
+
+    public double getDouble(String key) {
+        return prefs.getDouble(key, getDoubleDefault(key));
+    }
+    
+    public double getDoubleDefault(String key){
+        return ((Double)defaults.get(key)).doubleValue();
+    }
+
+    public int getInt(String key) {
+        return prefs.getInt(key, getIntDefault(key));
+    }
+
+    public int getIntDefault(String key) {
+        return ((Integer)defaults.get(key)).intValue();
+    }
+    
+    public byte[] getByteArray(String key) {
+        return prefs.getByteArray(key, getByteArrayDefault(key));
+    }
+
+    public byte[] getByteArrayDefault(String key){
+        return (byte[])defaults.get(key);   
+    }
+    
+    public void put(String key, String value) {
+        prefs.put(key, value);
+    }
+
+    public void putBoolean(String key, boolean value) {
+        prefs.putBoolean(key, value);
+    }
+
+    public void putDouble(String key, double value) {
+        prefs.putDouble(key, value);
+    }
+
+    public void putInt(String key, int value) {
+        prefs.putInt(key, value);
+    }
+
+    public void putByteArray(String key, byte[] value) {
+        prefs.putByteArray(key, value);
+    }
+
+    public void remove(String key) {
+        prefs.remove(key);
+    }
+
+    /**
+     * Puts a string array into the Preferences, by linking its elements
+     * with ';' into a single string. Escape characters make the process
+     * transparent even if strings contain ';'.
+     */
+    public void putStringArray(String key, String[] value) {
+        if (value == null) {
+            remove(key);
+            return;
+        }
+
+        if (value.length > 0) {
+            StringBuffer linked = new StringBuffer();
+            for (int i=0; i<value.length-1; i++) {
+                linked.append(makeEscape(value[i]));
+                linked.append(";");
+            }
+            linked.append(makeEscape(value[value.length-1]));
+            put(key, linked.toString());
+        } else {
+            put(key, "");
+        }
+    }
+
+    /**
+     * Returns a String[] containing the chosen columns.
+     */
+    public String[] getStringArray(String key) {
+        String names = get(key);
+        if (names == null)
+            return null;
+
+        StringReader rd = new StringReader(names);
+        Vector<String> arr = new Vector<String>();
+        String rs;
+        try {
+            while ((rs = getNextUnit(rd)) != null) {
+                arr.add(rs);
+            }
+        } catch (IOException ex) {}
+        String[] res = new String[arr.size()];
+        for (int i=0; i<res.length; i++)
+            res[i] = arr.elementAt(i);
+
+        return res;
+    }
+
+    /**
+     * Looks up a color definition in preferences, and returns the Color object.
+     * @param key The key for this setting.
+     * @return The color corresponding to the setting.
+     */
+    public Color getColor(String key) {
+        String value = get(key);
+        int[] rgb = getRgb(value);
+        return new Color(rgb[0], rgb[1], rgb[2]);
+    }
+
+    public Color getDefaultColor(String key) {
+        String value = (String)defaults.get(key);
+        int[] rgb = getRgb(value);
+        return new Color(rgb[0], rgb[1], rgb[2]);
+    }
+
+    /**
+     * Set the default value for a key. This is useful for plugins that need to
+     * add default values for the prefs keys they use.
+     * @param key The preferences key.
+     * @param value The default value.
+     */
+    public void putDefaultValue(String key, Object value) {
+        defaults.put(key, value);
+    }
+
+    /**
+     * Stores a color in preferences.
+     * @param key The key for this setting.
+     * @param color The Color to store.
+     */
+    public void putColor(String key, Color color) {
+        StringBuffer sb = new StringBuffer();
+        sb.append(String.valueOf(color.getRed()));
+        sb.append(':');
+        sb.append(String.valueOf(color.getGreen()));
+        sb.append(':');
+        sb.append(String.valueOf(color.getBlue()));
+        put(key, sb.toString());
+    }
+
+    /**
+     * Looks up a color definition in preferences, and returns an array containing the RGB values.
+     * @param value The key for this setting.
+     * @return The RGB values corresponding to this color setting.
+     */
+    public int[] getRgb(String value) {
+        String[] elements = value.split(":");
+        int[] values = new int[3];
+        values[0] = Integer.parseInt(elements[0]);
+        values[1] = Integer.parseInt(elements[1]);
+        values[2] = Integer.parseInt(elements[2]);
+        return values;
+    }
+
+    /**
+     * Returns the KeyStroke for this binding, as defined by the
+     * defaults, or in the Preferences.
+     */
+    public KeyStroke getKey(String bindName) {
+
+        String s = keyBinds.get(bindName);
+        // If the current key bindings don't contain the one asked for,
+        // we fall back on the default. This should only happen when a
+        // user has his own set in Preferences, and has upgraded to a
+        // new version where new bindings have been introduced.
+        if (s == null) {
+            s = defKeyBinds.get(bindName);
+            // So, if this happens, we add the default value to the current
+            // hashmap, so this doesn't happen again, and so this binding
+            // will appear in the KeyBindingsDialog.
+            keyBinds.put(bindName, s);
+        }
+        if (s == null) {
+          Globals.logger("Could not get key binding for \"" + bindName + "\"");
+        }
+
+        if (Globals.ON_MAC)
+          return getKeyForMac(KeyStroke.getKeyStroke(s));
+        else
+          return KeyStroke.getKeyStroke(s);
+    }
+
+    /**
+     * Returns the KeyStroke for this binding, as defined by the
+     * defaults, or in the Preferences, but adapted for Mac users,
+     * with the Command key preferred instead of Control.
+     */
+    private KeyStroke getKeyForMac(KeyStroke ks) {
+      if (ks == null) return null;
+      int keyCode = ks.getKeyCode();
+      if ((ks.getModifiers() & KeyEvent.CTRL_MASK) == 0) {
+        return ks;
+      }
+      else {
+    	int modifiers = 0;
+        if ((ks.getModifiers() & KeyEvent.SHIFT_MASK) != 0) {
+          modifiers = modifiers | KeyEvent.SHIFT_MASK;
+        }
+        if ((ks.getModifiers() & KeyEvent.ALT_MASK) != 0) {
+            modifiers = modifiers | KeyEvent.ALT_MASK;
+        }
+        
+        return KeyStroke.getKeyStroke(keyCode, Globals.getShortcutMask()+modifiers);
+      }
+    }
+
+    /**
+     * Returns the HashMap containing all key bindings.
+     */
+    public HashMap<String, String> getKeyBindings() {
+        return keyBinds;
+    }
+
+    /**
+     * Returns the HashMap containing default key bindings.
+     */
+    public HashMap<String, String> getDefaultKeys() {
+        return defKeyBinds;
+    }
+
+
+    /**
+     * Clear all preferences.
+     * @throws BackingStoreException
+     */
+    public void clear() throws BackingStoreException {
+        prefs.clear();
+    }
+
+    public void clear(String key) throws BackingStoreException {
+        prefs.remove(key);
+    }
+    /**
+     * Calling this method will write all preferences into the preference store.
+     */
+    public void flush() {
+        if (getBoolean("memoryStickMode")){
+            try {
+                exportPreferences("jabref.xml");
+            } catch (IOException e) {
+                Globals.logger("Could not save preferences for memory stick mode: " + e.getLocalizedMessage());
+            }
+        }
+        try {
+            prefs.flush();
+        } catch (BackingStoreException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    /**
+     * Stores new key bindings into Preferences, provided they
+     * actually differ from the old ones.
+     */
+    public void setNewKeyBindings(HashMap<String, String> newBindings) {
+        if (!newBindings.equals(keyBinds)) {
+            // This confirms that the bindings have actually changed.
+            String[] bindNames = new String[newBindings.size()],
+                bindings = new String[newBindings.size()];
+            int index = 0;
+            for (Iterator<String> i=newBindings.keySet().iterator();
+                 i.hasNext();) {
+                String nm = i.next();
+                String bnd = newBindings.get(nm);
+                bindNames[index] = nm;
+                bindings[index] = bnd;
+                index++;
+            }
+            putStringArray("bindNames", bindNames);
+            putStringArray("bindings", bindings);
+            keyBinds = newBindings;
+        }
+    }
+
+
+        /**
+         * Fetches key patterns from preferences
+         * Not cached
+         * 
+         * @return LabelPattern containing all keys. Returned LabelPattern has no parent
+         */
+        public LabelPattern getKeyPattern(){
+            keyPattern = new LabelPattern();
+            Preferences pre = Preferences.userNodeForPackage
+                (net.sf.jabref.labelPattern.LabelPattern.class);
+            try {
+                String[] keys = pre.keys();
+            if (keys.length > 0) for (int i=0; i<keys.length; i++)
+                keyPattern.addLabelPattern(keys[i], pre.get(keys[i], null));
+            } catch (BackingStoreException ex) {
+                Globals.logger("BackingStoreException in JabRefPreferences.getKeyPattern");
+            }
+            return keyPattern;
+        }
+
+        /**
+         * Adds the given key pattern to the preferences
+         * 
+         * @param pattern the pattern to store
+         */
+        public void putKeyPattern(LabelPattern pattern){
+            keyPattern = pattern;
+            LabelPattern parent = pattern.getParent();
+
+            // Store overridden definitions to Preferences.
+            Preferences pre = Preferences.userNodeForPackage
+                (net.sf.jabref.labelPattern.LabelPattern.class);
+            try {
+                pre.clear(); // We remove all old entries.
+            } catch (BackingStoreException ex) {
+                Globals.logger("BackingStoreException in JabRefPreferences.putKeyPattern");
+            }
+
+            for (String s: pattern.keySet()) {
+                ArrayList<String> value = pattern.get(s);
+                if (value != null) {
+                    // no default value
+                    // the first entry in the array is the full pattern
+                    // see net.sf.jabref.labelPattern.LabelPatternUtil.split(String)
+                    pre.put(s, value.get(0));
+                }
+            }
+        }
+
+    private void restoreKeyBindings() {
+        // Define default keybindings.
+        defineDefaultKeyBindings();
+
+        // First read the bindings, and their names.
+        String[] bindNames = getStringArray("bindNames"),
+            bindings = getStringArray("bindings");
+
+        // Then set up the key bindings HashMap.
+        if ((bindNames == null) || (bindings == null)
+            || (bindNames.length != bindings.length)) {
+            // Nothing defined in Preferences, or something is wrong.
+            setDefaultKeyBindings();
+            return;
+        }
+
+        for (int i=0; i<bindNames.length; i++)
+            keyBinds.put(bindNames[i], bindings[i]);
+    }
+
+    private void setDefaultKeyBindings() {
+        keyBinds = defKeyBinds;
+    }
+ 
+    private void defineDefaultKeyBindings() {
+        defKeyBinds.put("Push to application","ctrl L");
+      defKeyBinds.put("Push to LyX","ctrl L");
+      defKeyBinds.put("Push to WinEdt","ctrl shift W");
+        defKeyBinds.put("Quit JabRef", "ctrl Q");
+        defKeyBinds.put("Open database", "ctrl O");
+        defKeyBinds.put("Save database", "ctrl S");
+        defKeyBinds.put("Save database as ...", "ctrl shift S");
+        defKeyBinds.put("Save all", "ctrl alt S");
+        defKeyBinds.put("Close database", "ctrl W");
+        defKeyBinds.put("New entry", "ctrl N");
+        defKeyBinds.put("Cut", "ctrl X");
+        defKeyBinds.put("Copy", "ctrl C");
+        defKeyBinds.put("Paste", "ctrl V");
+        defKeyBinds.put("Undo", "ctrl Z");
+        defKeyBinds.put("Redo", "ctrl Y");
+        defKeyBinds.put("Help", "F1");
+        defKeyBinds.put("New article", "ctrl shift A");
+        defKeyBinds.put("New book", "ctrl shift B");
+        defKeyBinds.put("New phdthesis", "ctrl shift T");
+        defKeyBinds.put("New inbook", "ctrl shift I");
+        defKeyBinds.put("New mastersthesis", "ctrl shift M");
+        defKeyBinds.put("New proceedings", "ctrl shift P");
+        defKeyBinds.put("New unpublished", "ctrl shift U");
+        defKeyBinds.put("Edit strings", "ctrl T");
+        defKeyBinds.put("Edit preamble", "ctrl P");
+        defKeyBinds.put("Select all", "ctrl A");
+        defKeyBinds.put("Toggle groups interface", "ctrl shift G");
+        defKeyBinds.put("Autogenerate BibTeX keys", "ctrl G");
+        defKeyBinds.put("Search", "ctrl F");
+        defKeyBinds.put("Incremental search", "ctrl shift F");
+        defKeyBinds.put("Repeat incremental search", "ctrl shift F");
+        defKeyBinds.put("Close dialog", "ESCAPE");
+        defKeyBinds.put("Close entry editor", "ESCAPE");
+        defKeyBinds.put("Close preamble editor", "ESCAPE");
+        defKeyBinds.put("Back, help dialog", "LEFT");
+        defKeyBinds.put("Forward, help dialog", "RIGHT");
+        defKeyBinds.put("Preamble editor, store changes", "alt S");
+        defKeyBinds.put("Clear search", "ESCAPE");
+        defKeyBinds.put("Entry editor, next panel", "ctrl TAB");//"ctrl PLUS");//"shift Right");
+        defKeyBinds.put("Entry editor, previous panel", "ctrl shift TAB");//"ctrl MINUS");
+        defKeyBinds.put("Entry editor, next panel 2", "ctrl PLUS");//"ctrl PLUS");//"shift Right");
+        defKeyBinds.put("Entry editor, previous panel 2", "ctrl MINUS");//"ctrl MINUS");
+        defKeyBinds.put("Entry editor, next entry", "ctrl shift DOWN");
+        defKeyBinds.put("Entry editor, previous entry", "ctrl shift UP");
+        defKeyBinds.put("Entry editor, store field", "alt S");
+        defKeyBinds.put("String dialog, add string", "ctrl N");
+        defKeyBinds.put("String dialog, remove string", "shift DELETE");
+        defKeyBinds.put("String dialog, move string up", "ctrl UP");
+        defKeyBinds.put("String dialog, move string down", "ctrl DOWN");
+        defKeyBinds.put("Save session", "F11");
+        defKeyBinds.put("Load session", "F12");
+        defKeyBinds.put("Copy \\cite{BibTeX key}", "ctrl K");
+        defKeyBinds.put("Copy BibTeX key", "ctrl shift K");
+        defKeyBinds.put("Copy BibTeX key and title", "ctrl shift alt K");
+        defKeyBinds.put("Next tab", "ctrl PAGE_DOWN");
+        defKeyBinds.put("Previous tab", "ctrl PAGE_UP");
+        defKeyBinds.put("Replace string", "ctrl R");
+        defKeyBinds.put("Delete", "DELETE");
+        defKeyBinds.put("Open file", "F4");
+        defKeyBinds.put("Open PDF or PS", "shift F5");
+        defKeyBinds.put("Open URL or DOI", "F3");
+        defKeyBinds.put("Open SPIRES entry", "ctrl F3");
+        defKeyBinds.put("Toggle entry preview", "ctrl F9");
+        defKeyBinds.put("Switch preview layout", "F9");
+        defKeyBinds.put("Edit entry", "ctrl E");
+        defKeyBinds.put("Mark entries", "ctrl M");
+        defKeyBinds.put("Unmark entries", "ctrl shift M");
+        defKeyBinds.put("Fetch Medline", "F5");
+        defKeyBinds.put("Search ScienceDirect", "ctrl F5");
+        defKeyBinds.put("Search ADS", "ctrl shift F6");
+        defKeyBinds.put("New from plain text", "ctrl shift N");
+        defKeyBinds.put("Synchronize files", "ctrl F4");
+        defKeyBinds.put("Synchronize PDF", "shift F4");
+        defKeyBinds.put("Synchronize PS", "ctrl shift F4");
+        defKeyBinds.put("Focus entry table", "ctrl shift E");
+
+        defKeyBinds.put("Abbreviate", "ctrl alt A");
+        defKeyBinds.put("Unabbreviate", "ctrl alt shift A");
+        defKeyBinds.put("Search IEEEXplore", "alt F8");
+        defKeyBinds.put("Search ACM Portal", "ctrl shift F8");
+        defKeyBinds.put("Fetch ArXiv.org", "shift F8");
+        defKeyBinds.put("Search JSTOR", "shift F9");
+        defKeyBinds.put("Write XMP", "ctrl F4");
+        defKeyBinds.put("New file link", "ctrl N");
+        defKeyBinds.put("Fetch SPIRES", "ctrl F8");
+        defKeyBinds.put("Fetch INSPIRE", "ctrl F2");
+        defKeyBinds.put("Back", "alt LEFT");
+        defKeyBinds.put("Forward", "alt RIGHT");
+        defKeyBinds.put("Import into current database", "ctrl I");
+        defKeyBinds.put("Import into new database", "ctrl alt I");
+        defKeyBinds.put(FindUnlinkedFilesDialog.ACTION_COMMAND, "");
+        defKeyBinds.put("Increase table font size", "ctrl PLUS");
+        defKeyBinds.put("Decrease table font size", "ctrl MINUS");
+        defKeyBinds.put("Automatically link files", "alt F");
+        defKeyBinds.put("Resolve duplicate BibTeX keys", "ctrl shift D");
+        defKeyBinds.put("Refresh OO", "ctrl alt O");
+        defKeyBinds.put("File list editor, move entry up", "ctrl UP");
+        defKeyBinds.put("File list editor, move entry down", "ctrl DOWN");
+        defKeyBinds.put("Minimize to system tray", "ctrl alt W");
+    }
+
+    private String getNextUnit(Reader data) throws IOException {
+        int c;
+        boolean escape = false, done = false;
+        StringBuffer res = new StringBuffer();
+        while (!done && ((c = data.read()) != -1)) {
+            if (c == '\\') {
+                if (!escape)
+                    escape = true;
+                else {
+                    escape = false;
+                    res.append('\\');
+                }
+            } else {
+                if (c == ';') {
+                    if (!escape)
+                        done = true;
+                    else
+                        res.append(';');
+                } else {
+                    res.append((char)c);
+                }
+                escape = false;
+            }
+        }
+        if (res.length() > 0)
+            return res.toString();
+        else
+            return null;
+    }
+
+    private String makeEscape(String s) {
+        StringBuffer sb = new StringBuffer();
+        int c;
+        for (int i=0; i<s.length(); i++) {
+            c = s.charAt(i);
+            if ((c == '\\') || (c == ';'))
+                sb.append('\\');
+            sb.append((char)c);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Stores all information about the entry type in preferences, with
+     * the tag given by number.
+     */
+    public void storeCustomEntryType(CustomEntryType tp, int number) {
+        String nr = ""+number;
+        put(CUSTOM_TYPE_NAME+nr, tp.getName());
+        put(CUSTOM_TYPE_REQ+nr, tp.getRequiredFieldsString());//tp.getRequiredFields());
+        putStringArray(CUSTOM_TYPE_OPT+nr, tp.getOptionalFields());
+        putStringArray(CUSTOM_TYPE_PRIOPT+nr, tp.getPrimaryOptionalFields());
+
+    }
+
+    /**
+     * Retrieves all information about the entry type in preferences,
+     * with the tag given by number.
+     */
+    public CustomEntryType getCustomEntryType(int number) {
+        String nr = ""+number;
+        String
+            name = get(CUSTOM_TYPE_NAME+nr);
+        String[]
+            req = getStringArray(CUSTOM_TYPE_REQ+nr),
+            opt = getStringArray(CUSTOM_TYPE_OPT+nr),
+            priOpt = getStringArray(CUSTOM_TYPE_PRIOPT+nr);
+        if (name == null)
+            return null;
+        if (priOpt == null) {
+            return new CustomEntryType(Util.nCase(name), req, opt);
+        }
+        ArrayList<String> secOpt = new ArrayList<String>();
+        for (int i = 0; i < opt.length; i++) {
+            secOpt.add(opt[i]);
+        }
+        for (int i = 0; i < priOpt.length; i++) {
+            secOpt.remove(priOpt[i]);
+        }
+        return new CustomEntryType(Util.nCase(name), req, priOpt,
+                secOpt.toArray(new String[secOpt.size()]));
+
+
+    }
+
+
+
+    public List<ExternalFileType> getDefaultExternalFileTypes() {
+        List<ExternalFileType> list = new ArrayList<ExternalFileType>();
+        list.add(new ExternalFileType("PDF", "pdf", "application/pdf", "evince", "pdfSmall"));
+        list.add(new ExternalFileType("PostScript", "ps", "application/postscript", "evince", "psSmall"));
+        list.add(new ExternalFileType("Word", "doc", "application/msword", "oowriter", "openoffice"));
+        list.add(new ExternalFileType("Word 2007+", "docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "oowriter", "openoffice"));
+        list.add(new ExternalFileType("OpenDocument text", "odt", "application/vnd.oasis.opendocument.text", "oowriter", "openoffice"));
+        list.add(new ExternalFileType("Excel", "xls", "application/excel", "oocalc", "openoffice"));
+        list.add(new ExternalFileType("Excel 2007+", "xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "oocalc", "openoffice"));
+        list.add(new ExternalFileType("OpenDocument spreadsheet", "ods", "application/vnd.oasis.opendocument.spreadsheet", "oocalc", "openoffice"));
+        list.add(new ExternalFileType("PowerPoint", "ppt", "application/vnd.ms-powerpoint", "ooimpress", "openoffice"));
+        list.add(new ExternalFileType("PowerPoint 2007+", "pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "ooimpress", "openoffice"));
+        list.add(new ExternalFileType("OpenDocument presentation", "odp", "application/vnd.oasis.opendocument.presentation", "ooimpress", "openoffice"));
+        list.add(new ExternalFileType("Rich Text Format", "rtf", "application/rtf", "oowriter", "openoffice"));
+        list.add(new ExternalFileType("PNG image", "png", "image/png", "gimp", "picture"));
+        list.add(new ExternalFileType("GIF image", "gif", "image/gif", "gimp", "picture"));
+        list.add(new ExternalFileType("JPG image", "jpg", "image/jpeg", "gimp", "picture"));
+        list.add(new ExternalFileType("Djvu", "djvu", "", "evince", "psSmall"));
+        list.add(new ExternalFileType("Text", "txt", "text/plain", "emacs", "emacs"));
+        list.add(new ExternalFileType("LaTeX", "tex", "application/x-latex", "emacs", "emacs"));
+        list.add(new ExternalFileType("CHM", "chm", "application/mshelp", "gnochm", "www"));
+        list.add(new ExternalFileType("TIFF image", "tiff", "image/tiff", "gimp", "picture"));
+        list.add(new ExternalFileType("URL", "html", "text/html", "firefox", "www"));
+        list.add(new ExternalFileType("MHT", "mht", "multipart/related", "firefox", "www"));
+        list.add(new ExternalFileType("ePUB", "epub", "application/epub+zip", "firefox", "www"));
+
+        // On all OSes there is a generic application available to handle file opening,
+        // so we don't need the default application settings anymore:
+        for (Iterator<ExternalFileType> iterator = list.iterator(); iterator.hasNext();) {
+            ExternalFileType type = iterator.next();
+            type.setOpenWith("");
+        }
+        
+
+        return list;
+    }
+
+    public ExternalFileType[] getExternalFileTypeSelection() {
+        return externalFileTypes.toArray
+                (new ExternalFileType[externalFileTypes.size()]);
+    }
+
+    /**
+     * Look up the external file type registered with this name, if any.
+     * @param name The file type name.
+     * @return The ExternalFileType registered, or null if none.
+     */
+    public ExternalFileType getExternalFileTypeByName(String name) {
+        for (Iterator<ExternalFileType> iterator = externalFileTypes.iterator(); iterator.hasNext();) {
+            ExternalFileType type = iterator.next();
+            if (type.getName().equals(name))
+                return type;
+        }
+        // Return an instance that signifies an unknown file type:
+        return new UnknownExternalFileType(name);
+    }
+
+    /**
+     * Look up the external file type registered for this extension, if any.
+     * @param extension The file extension.
+     * @return The ExternalFileType registered, or null if none.
+     */
+    public ExternalFileType getExternalFileTypeByExt(String extension) {
+        for (Iterator<ExternalFileType> iterator = externalFileTypes.iterator(); iterator.hasNext();) {
+            ExternalFileType type = iterator.next();
+            if ((type.getExtension() != null) && type.getExtension().equalsIgnoreCase(extension))
+                return type;
+        }
+        return null;
+    }
+
+    /**
+     * Look up the external file type registered for this filename, if any.
+     * @param filename The name of the file whose type to look up.
+     * @return The ExternalFileType registered, or null if none.
+     */
+    public ExternalFileType getExternalFileTypeForName(String filename) {
+        int longestFound = -1;
+        ExternalFileType foundType = null;
+        for (Iterator<ExternalFileType> iterator = externalFileTypes.iterator(); iterator.hasNext();) {
+            ExternalFileType type = iterator.next();
+            if ((type.getExtension() != null) && filename.toLowerCase().
+                    endsWith(type.getExtension().toLowerCase())) {
+                if (type.getExtension().length() > longestFound) {
+                    longestFound = type.getExtension().length();
+                    foundType = type;
+                }
+            }
+        }
+        return foundType;
+    }
+
+    /**
+     * Look up the external file type registered for this MIME type, if any.
+     * @param mimeType The MIME type.
+     * @return The ExternalFileType registered, or null if none. For the mime type "text/html",
+     *   a valid file type is guaranteed to be returned.
+     */
+    public ExternalFileType getExternalFileTypeByMimeType(String mimeType) {
+        for (Iterator<ExternalFileType> iterator = externalFileTypes.iterator(); iterator.hasNext();) {
+            ExternalFileType type = iterator.next();
+            if ((type.getMimeType() != null) && type.getMimeType().equals(mimeType))
+                return type;
+        }
+        if (mimeType.equals("text/html"))
+            return HTML_FALLBACK_TYPE;
+        else
+            return null;
+    }
+
+    /**
+     * Reset the List of external file types after user customization.
+     * @param types The new List of external file types. This is the complete list, not
+     *  just new entries.
+     */
+    public void setExternalFileTypes(List<ExternalFileType> types) {
+
+        // First find a list of the default types:
+        List<ExternalFileType> defTypes = getDefaultExternalFileTypes();
+        // Make a list of types that are unchanged:
+        List<ExternalFileType> unchanged = new ArrayList<ExternalFileType>();
+
+        externalFileTypes.clear();
+        for (Iterator<ExternalFileType> iterator = types.iterator(); iterator.hasNext();) {
+            ExternalFileType type = iterator.next();
+            externalFileTypes.add(type);
+
+            // See if we can find a type with matching name in the default type list:
+            ExternalFileType found = null;
+            for (ExternalFileType defType : defTypes) {
+                if (defType.getName().equals(type.getName())) {
+                    found = defType;
+                    break;
+                }
+            }
+            if (found != null) {
+                // Found it! Check if it is an exact match, or if it has been customized:
+                if (found.equals(type))
+                    unchanged.add(type);
+                else {
+                    // It was modified. Remove its entry from the defaults list, since
+                    // the type hasn't been removed:
+                    defTypes.remove(found);
+                }
+            }
+        }
+
+        // Go through unchanged types. Remove them from the ones that should be stored,
+        // and from the list of defaults, since we don't need to mention these in prefs:
+        for (ExternalFileType type : unchanged) {
+            defTypes.remove(type);
+            types.remove(type);
+        }
+
+        // Now set up the array to write to prefs, containing all new types, all modified
+        // types, and a flag denoting each default type that has been removed:
+        String[][] array = new String[types.size()+defTypes.size()][];
+        int i=0;
+        for (ExternalFileType type : types) {
+            array[i] = type.getStringArrayRepresentation();
+            i++;
+        }
+        for (ExternalFileType type : defTypes) {
+            array[i] = new String[] {type.getName(), FILE_TYPE_REMOVED_FLAG};
+            i++;
+        }
+        //System.out.println("Encoded: '"+Util.encodeStringArray(array)+"'");
+        put("externalFileTypes", Util.encodeStringArray(array));
+    }
+
+    
+    /**
+     * Set up the list of external file types, either from default values, or from values
+     * recorded in Preferences.
+     */
+    public void updateExternalFileTypes() {
+        // First get a list of the default file types as a starting point:
+        List<ExternalFileType> types = getDefaultExternalFileTypes();
+        // If no changes have been stored, simply use the defaults:
+        if (prefs.get("externalFileTypes", null) == null) {
+            externalFileTypes.clear();
+            externalFileTypes.addAll(types);
+            return;
+        }
+        // Read the prefs information for file types:
+        String[][] vals = Util.decodeStringDoubleArray(prefs.get("externalFileTypes", ""));
+        for (int i = 0; i < vals.length; i++) {
+            if ((vals[i].length == 2) && (vals[i][1].equals(FILE_TYPE_REMOVED_FLAG))) {
+                // This entry indicates that a default entry type should be removed:
+                ExternalFileType toRemove = null;
+                for (ExternalFileType type : types) {
+                    if (type.getName().equals(vals[i][0])) {
+                        toRemove = type;
+                        break;
+                    }
+                }
+                // If we found it, remove it from the type list:
+                if (toRemove != null)
+                    types.remove(toRemove);
+            }
+            else {
+                // A new or modified entry type. Construct it from the string array:
+                ExternalFileType type = new ExternalFileType(vals[i]);
+                // Check if there is a default type with the same name. If so, this is a
+                // modification of that type, so remove the default one:
+                ExternalFileType toRemove = null;
+                for (ExternalFileType defType : types) {
+                    if (type.getName().equals(defType.getName())) {
+                        toRemove = defType;
+                        break;
+                    }
+                }
+                // If we found it, remove it from the type list:
+                if (toRemove != null) {
+                    types.remove(toRemove);
+                }
+                
+                // Then add the new one:
+                types.add(type);
+            }
+        }
+
+        // Finally, build the list of types based on the modified defaults list:
+        for (ExternalFileType type : types) {
+            externalFileTypes.add(type);
+        }
+    }
+
+
+    /**
+     * Removes all information about custom entry types with tags of
+     * @param number or higher.
+     */
+    public void purgeCustomEntryTypes(int number) {
+        purgeSeries(CUSTOM_TYPE_NAME, number);
+        purgeSeries(CUSTOM_TYPE_REQ, number);
+        purgeSeries(CUSTOM_TYPE_OPT, number);
+        purgeSeries(CUSTOM_TYPE_PRIOPT, number);
+    }
+
+    /**
+     * Removes all entries keyed by prefix+number, where number
+     * is equal to or higher than the given number.
+     * @param number or higher.
+     */
+    public void purgeSeries(String prefix, int number) {
+        while (get(prefix+number) != null) {
+            remove(prefix+number);
+            number++;
+        }
+    }
+
+    public EntryEditorTabList getEntryEditorTabList() {
+    if (tabList == null)
+        updateEntryEditorTabList();
+    return tabList;
+    }
+
+    public void updateEntryEditorTabList() {
+    tabList = new EntryEditorTabList();
+    }
+
+    /**
+     * Exports Preferences to an XML file.
+     *
+     * @param filename String File to export to
+     */
+    public void exportPreferences(String filename) throws IOException {
+      File f = new File(filename);
+      OutputStream os = new FileOutputStream(f);
+      try {
+        prefs.exportSubtree(os);
+      } catch (BackingStoreException ex) {
+        throw new IOException(ex.getMessage());
+      }
+    }
+
+      /**
+       * Imports Preferences from an XML file.
+       *
+       * @param filename String File to import from
+       */
+      public void importPreferences(String filename) throws IOException {
+        File f = new File(filename);
+        InputStream is = new FileInputStream(f);
+        try {
+          Preferences.importPreferences(is);
+        } catch (InvalidPreferencesFormatException ex) {
+          throw new IOException(ex.getMessage());
+        }
+      }
+
+    /**
+     * Determines whether the given field should be written without any sort of wrapping.
+     * @param fieldName The field name.
+     * @return true if the field should not be wrapped.
+     */
+    public boolean isNonWrappableField(String fieldName) {
+        return nonWrappableFields.contains(fieldName);
+    }
+}
diff --git a/src/java/net/sf/jabref/KeyBindingsDialog.java b/src/java/net/sf/jabref/KeyBindingsDialog.java
index 2a7960a..e26a44f 100644
--- a/src/java/net/sf/jabref/KeyBindingsDialog.java
+++ b/src/java/net/sf/jabref/KeyBindingsDialog.java
@@ -1,313 +1,313 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.event.*;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.TreeMap;
-
-import javax.swing.*;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableColumnModel;
-
-//
-class KeyBindingsDialog
-    extends JDialog {
-  KeystrokeTable table;
-  KeystrokeTableModel tableModel;
-  //JList list = new JList();
-  JTextField keyTF = new JTextField();
-  JButton ok, cancel, grabB, defB;
-  HashMap<String, String> bindHM, defBinds;
-  boolean clickedSave = false;
-  int selectedRow = -1;
-  boolean getAction() {
-    return clickedSave;
-  }
-
-  HashMap<String, String> getNewKeyBindings() {
-    return bindHM;
-  }
-
-  public KeyBindingsDialog(HashMap<String, String> name2binding, HashMap<String, String> defBinds) {
-    super();
-    this.defBinds = defBinds;
-    setTitle(Globals.lang("Key bindings"));
-    setModal(true); //this needs to be modal so that client knows when ok or cancel was clicked
-    getContentPane().setLayout(new BorderLayout());
-    bindHM = name2binding;
-    setList();
-    //JScrollPane listScroller = new JScrollPane(list);
-    JScrollPane listScroller = new JScrollPane(table);
-    listScroller.setPreferredSize(new Dimension(250, 400));
-    getContentPane().add(listScroller, BorderLayout.CENTER);
-
-    Box buttonBox = new Box(BoxLayout.X_AXIS);
-    ok = new JButton(Globals.lang("Ok"));
-    cancel = new JButton(Globals.lang("Cancel"));
-    grabB = new JButton(Globals.lang("Grab"));
-    defB = new JButton(Globals.lang("Default"));
-    grabB.addKeyListener(new JBM_CustomKeyBindingsListener());
-    /*grabB.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        selectedRow = (table.getSelectedRows())[0];
-        Util.pr(""+selectedRow);
-      }
-    });*/
-    buttonBox.add(grabB);
-    buttonBox.add(defB);
-    buttonBox.add(ok);
-    buttonBox.add(cancel);
-
-    getContentPane().add(buttonBox, BorderLayout.SOUTH);
-    //setTop();
-    setButtons();
-    keyTF.setEditable(false);
-
-    addWindowListener(new WindowAdapter() {
-      public void windowClosing(WindowEvent e) {
-        clickedSave = false;
-        dispose();
-      }
-    });
-  }
-
-  void setTop() {
-    Box topBox = new Box(BoxLayout.X_AXIS);
-
-    topBox.add(new JLabel(Globals.lang("Binding") + ":", JLabel.RIGHT));
-    topBox.add(keyTF);
-    getContentPane().add(topBox, BorderLayout.NORTH);
-
-  }
-
-  //##################################################
-  // respond to grabKey and display the key binding
-  //##################################################
-  public class JBM_CustomKeyBindingsListener
-      extends KeyAdapter {
-    public void keyPressed(KeyEvent evt) {
-      // first check if anything is selected if not the return
-      int selRow = table.getSelectedRow();
-      if (selRow < 0)
-        return;
-      //Util.pr("dei"+selectedRow+" "+table.getSelectedRow());
-      //Object[] selected = list.getSelectedValues();
-      //if (selected.length == 0) {
-      //  return;
-      //}
-
-      String code = KeyEvent.getKeyText(evt.getKeyCode());
-      String mod = KeyEvent.getKeyModifiersText(evt.getModifiers());
-      // all key bindings must have a modifier: ctrl alt etc
-
-      if (mod.equals("")) {
-        int kc = evt.getKeyCode();
-        if ( (kc < KeyEvent.VK_F1) && (kc > KeyEvent.VK_F12) &&
-            (kc != KeyEvent.VK_ESCAPE) && (kc != KeyEvent.VK_DELETE)) {
-          return; // need a modifier except for function keys
-        }
-      }
-      // second key cannot be a modifiers
-      //if ( evt.isActionKey()) {
-      //Util.pr(code);
-      if ( //code.equals("Escape")
-          code.equals("Tab")
-          || code.equals("Backspace")
-          || code.equals("Enter")
-          //|| code.equals("Delete")
-          || code.equals("Space")
-          || code.equals("Ctrl")
-          || code.equals("Shift")
-          || code.equals("Alt")) {
-        return;
-      }
-      //}
-      String newKey;
-      if (!mod.equals("")) {
-        newKey = mod.toLowerCase().replaceAll("\\+"," ") + " " + code;
-      }
-      else {
-        newKey = code;
-      }
-      keyTF.setText(newKey);
-      //find which key is selected and set its value int the bindHM
-      String selectedFunction = table.getOriginalName(selRow);
-      table.setValueAt(newKey, selRow, 1);
-      table.revalidate();
-      table.repaint();
-      //Util.pr(selectedFunction);
-      //String selectedFunction = (String) list.getSelectedValue();
-      // log print
-      // System.out.println("selectedfunction " + selectedFunction + " new key: " + newKey);
-      bindHM.put(selectedFunction, newKey);
-      //table.setValueAt(newKey, );
-    }
-  }
-
-  //##################################################
-  // put the corresponding key binding into keyTF
-  //##################################################
-  class MyListSelectionListener
-      implements ListSelectionListener {
-    // This method is called each time the user changes the set of selected items
-    public void valueChanged(ListSelectionEvent evt) {
-      // When the user release the mouse button and completes the selection,
-      // getValueIsAdjusting() becomes false
-      if (!evt.getValueIsAdjusting()) {
-        JList list = (JList) evt.getSource();
-
-        // Get all selected items
-        Object[] selected = list.getSelectedValues();
-
-        // Iterate all selected items
-        for (int i = 0; i < selected.length; i++) {
-          Object sel = selected[i];
-          keyTF.setText( bindHM.get(sel));
-        }
-      }
-    }
-  }
-
-  
-
-  //setup so that clicking on list will display the current binding
-  void setList() {
-
-    Iterator<String> it = bindHM.keySet().iterator();
-    String[][] tableData = new String[bindHM.size()][3];
-    int i=0;
-    while (it.hasNext()) {
-      String s = it.next();
-      tableData[i][2] = s;
-      tableData[i][1] = bindHM.get(s);
-      tableData[i][0] = Globals.lang(s);
-      i++;
-      //listModel.addElement(s + " (" + bindHM.get(s) + ")");
-   }
-   TreeMap<String, String[]> sorted = new TreeMap<String, String[]>();
-   for (i=0; i<tableData.length; i++)
-     sorted.put(tableData[i][0], tableData[i]);
-
-    tableModel = new KeystrokeTableModel(sorted);
-    table = new KeystrokeTable(tableModel);
-    //table.setCellSelectionEnabled(false);
-    table.setRowSelectionAllowed(true);
-    table.setColumnSelectionAllowed(false);
-    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-
-    //list.setModel(listModel);
-    TableColumnModel cm = table.getColumnModel();
-    cm.getColumn(0).setPreferredWidth(GUIGlobals.KEYBIND_COL_0);
-    cm.getColumn(1).setPreferredWidth(GUIGlobals.KEYBIND_COL_1);
-    table.setRowSelectionInterval(0, 0); //select the first entry
-  }
-
-  class KeystrokeTable extends JTable {
-    public KeystrokeTable(KeystrokeTableModel model) { super(model); }
-     public boolean isCellEditable(int row, int col) { return false; }
-     public String getOriginalName(int row) { return ((KeystrokeTableModel)getModel()).data[row][2]; }
-   }
-
-    class KeystrokeTableModel extends AbstractTableModel {
-      String[][] data;
-      //String[] trData;
-      public KeystrokeTableModel(TreeMap<String, String[]> sorted) {
-        data = new String[sorted.size()][3];
-        Iterator<String> i = sorted.keySet().iterator();
-        int row = 0;
-        while (i.hasNext()) {
-          data[row++] = sorted.get(i.next());
-        }
-        //for (int i=0; i<trData.length; i++)
-        //  trData[i] = Globals.lang(data[i][0]);
-      }
-      public boolean isCellEditable(int row, int col) { return false; }
-      public String getColumnName(int col) {
-        return (col==0 ? Globals.lang("Action") : Globals.lang("Shortcut"));
-      }
-      public int getColumnCount() {
-        return 2;
-      }
-
-      public int getRowCount() {
-        return data.length;
-      }
-      public Object getValueAt(int rowIndex, int columnIndex) {
-        //if (columnIndex == 0)
-        return data[rowIndex][columnIndex];
-        //else
-        //return data[rowIndex][0];
-      }
-      public void setValueAt(Object o, int row, int col) {
-        data[row][col] = (String)o;
-      }
-    }
-
-  // listners
-  void setButtons() {
-    ok.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        // save all the key bindings
-        dispose();
-        clickedSave = true;
-        // message: key bindings will take into effect next time you start JBM
-      }
-    });
-    cancel.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        dispose();
-        clickedSave = false;
-        //System.exit(-1);//get rid of this
-      }
-    });
-    defB.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        /*Object[] selected = list.getSelectedValues();
-        if (selected.length == 0) {
-          return;
-        }
-        keyTF.setText(setToDefault( (String) list.getSelectedValue()));*/
-      }
-    });
-
-  }
-
-  String setToDefault(String name) {
-    String defKey = defBinds.get(name);
-    bindHM.put(name, defKey);
-    return defKey;
-  }
-
-  /*
-       public static void main(String args[])
-       {
-    HashMap h=new HashMap();
-    h.put("new-bibtex","ctrl N");
-    h.put("edit-bibtex","ctrl E");
-    h.put("exit-bibtex","ctrl Q");
-    KeyBindingsDialog d= new KeyBindingsDialog(h);
-    d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-    d.setSize(200,300);
-    d.setVisible(true);
-
-    }*/
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.*;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.TreeMap;
+
+import javax.swing.*;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableColumnModel;
+
+//
+class KeyBindingsDialog
+    extends JDialog {
+  KeystrokeTable table;
+  KeystrokeTableModel tableModel;
+  //JList list = new JList();
+  JTextField keyTF = new JTextField();
+  JButton ok, cancel, grabB, defB;
+  HashMap<String, String> bindHM, defBinds;
+  boolean clickedSave = false;
+  int selectedRow = -1;
+  boolean getAction() {
+    return clickedSave;
+  }
+
+  HashMap<String, String> getNewKeyBindings() {
+    return bindHM;
+  }
+
+  public KeyBindingsDialog(HashMap<String, String> name2binding, HashMap<String, String> defBinds) {
+    super();
+    this.defBinds = defBinds;
+    setTitle(Globals.lang("Key bindings"));
+    setModal(true); //this needs to be modal so that client knows when ok or cancel was clicked
+    getContentPane().setLayout(new BorderLayout());
+    bindHM = name2binding;
+    setList();
+    //JScrollPane listScroller = new JScrollPane(list);
+    JScrollPane listScroller = new JScrollPane(table);
+    listScroller.setPreferredSize(new Dimension(250, 400));
+    getContentPane().add(listScroller, BorderLayout.CENTER);
+
+    Box buttonBox = new Box(BoxLayout.X_AXIS);
+    ok = new JButton(Globals.lang("Ok"));
+    cancel = new JButton(Globals.lang("Cancel"));
+    grabB = new JButton(Globals.lang("Grab"));
+    defB = new JButton(Globals.lang("Default"));
+    grabB.addKeyListener(new JBM_CustomKeyBindingsListener());
+    /*grabB.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        selectedRow = (table.getSelectedRows())[0];
+        Util.pr(""+selectedRow);
+      }
+    });*/
+    buttonBox.add(grabB);
+    buttonBox.add(defB);
+    buttonBox.add(ok);
+    buttonBox.add(cancel);
+
+    getContentPane().add(buttonBox, BorderLayout.SOUTH);
+    //setTop();
+    setButtons();
+    keyTF.setEditable(false);
+
+    addWindowListener(new WindowAdapter() {
+      public void windowClosing(WindowEvent e) {
+        clickedSave = false;
+        dispose();
+      }
+    });
+  }
+
+  void setTop() {
+    Box topBox = new Box(BoxLayout.X_AXIS);
+
+    topBox.add(new JLabel(Globals.lang("Binding") + ":", JLabel.RIGHT));
+    topBox.add(keyTF);
+    getContentPane().add(topBox, BorderLayout.NORTH);
+
+  }
+
+  //##################################################
+  // respond to grabKey and display the key binding
+  //##################################################
+  public class JBM_CustomKeyBindingsListener
+      extends KeyAdapter {
+    public void keyPressed(KeyEvent evt) {
+      // first check if anything is selected if not the return
+      int selRow = table.getSelectedRow();
+      if (selRow < 0)
+        return;
+      //Util.pr("dei"+selectedRow+" "+table.getSelectedRow());
+      //Object[] selected = list.getSelectedValues();
+      //if (selected.length == 0) {
+      //  return;
+      //}
+
+      String code = KeyEvent.getKeyText(evt.getKeyCode());
+      String mod = KeyEvent.getKeyModifiersText(evt.getModifiers());
+      // all key bindings must have a modifier: ctrl alt etc
+
+      if (mod.equals("")) {
+        int kc = evt.getKeyCode();
+        if ( (kc < KeyEvent.VK_F1) && (kc > KeyEvent.VK_F12) &&
+            (kc != KeyEvent.VK_ESCAPE) && (kc != KeyEvent.VK_DELETE)) {
+          return; // need a modifier except for function keys
+        }
+      }
+      // second key cannot be a modifiers
+      //if ( evt.isActionKey()) {
+      //Util.pr(code);
+      if ( //code.equals("Escape")
+          code.equals("Tab")
+          || code.equals("Backspace")
+          || code.equals("Enter")
+          //|| code.equals("Delete")
+          || code.equals("Space")
+          || code.equals("Ctrl")
+          || code.equals("Shift")
+          || code.equals("Alt")) {
+        return;
+      }
+      //}
+      String newKey;
+      if (!mod.equals("")) {
+        newKey = mod.toLowerCase().replaceAll("\\+"," ") + " " + code;
+      }
+      else {
+        newKey = code;
+      }
+      keyTF.setText(newKey);
+      //find which key is selected and set its value int the bindHM
+      String selectedFunction = table.getOriginalName(selRow);
+      table.setValueAt(newKey, selRow, 1);
+      table.revalidate();
+      table.repaint();
+      //Util.pr(selectedFunction);
+      //String selectedFunction = (String) list.getSelectedValue();
+      // log print
+      // System.out.println("selectedfunction " + selectedFunction + " new key: " + newKey);
+      bindHM.put(selectedFunction, newKey);
+      //table.setValueAt(newKey, );
+    }
+  }
+
+  //##################################################
+  // put the corresponding key binding into keyTF
+  //##################################################
+  class MyListSelectionListener
+      implements ListSelectionListener {
+    // This method is called each time the user changes the set of selected items
+    public void valueChanged(ListSelectionEvent evt) {
+      // When the user release the mouse button and completes the selection,
+      // getValueIsAdjusting() becomes false
+      if (!evt.getValueIsAdjusting()) {
+        JList list = (JList) evt.getSource();
+
+        // Get all selected items
+        Object[] selected = list.getSelectedValues();
+
+        // Iterate all selected items
+        for (int i = 0; i < selected.length; i++) {
+          Object sel = selected[i];
+          keyTF.setText( bindHM.get(sel));
+        }
+      }
+    }
+  }
+
+  
+
+  //setup so that clicking on list will display the current binding
+  void setList() {
+
+    Iterator<String> it = bindHM.keySet().iterator();
+    String[][] tableData = new String[bindHM.size()][3];
+    int i=0;
+    while (it.hasNext()) {
+      String s = it.next();
+      tableData[i][2] = s;
+      tableData[i][1] = bindHM.get(s);
+      tableData[i][0] = Globals.lang(s);
+      i++;
+      //listModel.addElement(s + " (" + bindHM.get(s) + ")");
+   }
+   TreeMap<String, String[]> sorted = new TreeMap<String, String[]>();
+   for (i=0; i<tableData.length; i++)
+     sorted.put(tableData[i][0], tableData[i]);
+
+    tableModel = new KeystrokeTableModel(sorted);
+    table = new KeystrokeTable(tableModel);
+    //table.setCellSelectionEnabled(false);
+    table.setRowSelectionAllowed(true);
+    table.setColumnSelectionAllowed(false);
+    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+    //list.setModel(listModel);
+    TableColumnModel cm = table.getColumnModel();
+    cm.getColumn(0).setPreferredWidth(GUIGlobals.KEYBIND_COL_0);
+    cm.getColumn(1).setPreferredWidth(GUIGlobals.KEYBIND_COL_1);
+    table.setRowSelectionInterval(0, 0); //select the first entry
+  }
+
+  class KeystrokeTable extends JTable {
+    public KeystrokeTable(KeystrokeTableModel model) { super(model); }
+     public boolean isCellEditable(int row, int col) { return false; }
+     public String getOriginalName(int row) { return ((KeystrokeTableModel)getModel()).data[row][2]; }
+   }
+
+    class KeystrokeTableModel extends AbstractTableModel {
+      String[][] data;
+      //String[] trData;
+      public KeystrokeTableModel(TreeMap<String, String[]> sorted) {
+        data = new String[sorted.size()][3];
+        Iterator<String> i = sorted.keySet().iterator();
+        int row = 0;
+        while (i.hasNext()) {
+          data[row++] = sorted.get(i.next());
+        }
+        //for (int i=0; i<trData.length; i++)
+        //  trData[i] = Globals.lang(data[i][0]);
+      }
+      public boolean isCellEditable(int row, int col) { return false; }
+      public String getColumnName(int col) {
+        return (col==0 ? Globals.lang("Action") : Globals.lang("Shortcut"));
+      }
+      public int getColumnCount() {
+        return 2;
+      }
+
+      public int getRowCount() {
+        return data.length;
+      }
+      public Object getValueAt(int rowIndex, int columnIndex) {
+        //if (columnIndex == 0)
+        return data[rowIndex][columnIndex];
+        //else
+        //return data[rowIndex][0];
+      }
+      public void setValueAt(Object o, int row, int col) {
+        data[row][col] = (String)o;
+      }
+    }
+
+  // listners
+  void setButtons() {
+    ok.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        // save all the key bindings
+        dispose();
+        clickedSave = true;
+        // message: key bindings will take into effect next time you start JBM
+      }
+    });
+    cancel.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        dispose();
+        clickedSave = false;
+        //System.exit(-1);//get rid of this
+      }
+    });
+    defB.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        /*Object[] selected = list.getSelectedValues();
+        if (selected.length == 0) {
+          return;
+        }
+        keyTF.setText(setToDefault( (String) list.getSelectedValue()));*/
+      }
+    });
+
+  }
+
+  String setToDefault(String name) {
+    String defKey = defBinds.get(name);
+    bindHM.put(name, defKey);
+    return defKey;
+  }
+
+  /*
+       public static void main(String args[])
+       {
+    HashMap h=new HashMap();
+    h.put("new-bibtex","ctrl N");
+    h.put("edit-bibtex","ctrl E");
+    h.put("exit-bibtex","ctrl Q");
+    KeyBindingsDialog d= new KeyBindingsDialog(h);
+    d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+    d.setSize(200,300);
+    d.setVisible(true);
+
+    }*/
+}
diff --git a/src/java/net/sf/jabref/KeyCollisionException.java b/src/java/net/sf/jabref/KeyCollisionException.java
index 0d82844..0af13a2 100644
--- a/src/java/net/sf/jabref/KeyCollisionException.java
+++ b/src/java/net/sf/jabref/KeyCollisionException.java
@@ -1,49 +1,49 @@
-/*
-Copyright (C) 2003 David Weitzman
-
-All programs in this directory and subdirectories are published under
-the GNU General Public License as described below.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA
-
-Further information about the GNU GPL is available at:
-http://www.gnu.org/copyleft/gpl.ja.html
-
-*/
-package net.sf.jabref;
-
-public class KeyCollisionException extends RuntimeException
-{
-    public KeyCollisionException()
-    {
-        super();
-    }
-
-    public KeyCollisionException(String msg)
-    {
-        super(msg);
-    }
-
-    public KeyCollisionException(String msg, Throwable exception)
-    {
-        super(msg, exception);
-    }
-
-    public KeyCollisionException(Throwable exception)
-    {
-        super(exception);
-    }
-}
+/*
+Copyright (C) 2003 David Weitzman
+
+All programs in this directory and subdirectories are published under
+the GNU General Public License as described below.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
+
+Further information about the GNU GPL is available at:
+http://www.gnu.org/copyleft/gpl.ja.html
+
+*/
+package net.sf.jabref;
+
+public class KeyCollisionException extends RuntimeException
+{
+    public KeyCollisionException()
+    {
+        super();
+    }
+
+    public KeyCollisionException(String msg)
+    {
+        super(msg);
+    }
+
+    public KeyCollisionException(String msg, Throwable exception)
+    {
+        super(msg, exception);
+    }
+
+    public KeyCollisionException(Throwable exception)
+    {
+        super(exception);
+    }
+}
diff --git a/src/java/net/sf/jabref/MarkEntriesAction.java b/src/java/net/sf/jabref/MarkEntriesAction.java
index 89feec5..f3fd9b3 100644
--- a/src/java/net/sf/jabref/MarkEntriesAction.java
+++ b/src/java/net/sf/jabref/MarkEntriesAction.java
@@ -1,78 +1,78 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import net.sf.jabref.undo.NamedCompound;
-
-import javax.swing.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-/**
- *
- */
-public class MarkEntriesAction extends AbstractWorker implements ActionListener {
-
-    private JabRefFrame frame;
-    final int level;
-    private JMenuItem menuItem;
-    private int besLength = 0;
-
-    public MarkEntriesAction(JabRefFrame frame, int level) {
-        this.frame = frame;
-        this.level = level;
-
-        //menuItem = new JMenuItem(Globals.menuTitle("Mark entries").replaceAll("&",""));
-        menuItem = new JMenuItem("               ");
-        menuItem.setMnemonic(String.valueOf(level+1).charAt(0));
-        menuItem.setBackground(Globals.prefs.getColor("markedEntryBackground"+this.level));
-        menuItem.setOpaque(true);
-        menuItem.addActionListener(this);
-    }
-
-    public JMenuItem getMenuItem() {
-        return menuItem;
-    }
-
-    public void actionPerformed(ActionEvent actionEvent) {
-        try {
-            this.init();
-            getWorker().run();
-            getCallBack().update();
-        } catch (Throwable t) {
-            t.printStackTrace();
-        }
-    }
-
-    public void run() {
-        BasePanel panel = frame.basePanel();
-        NamedCompound ce = new NamedCompound(Globals.lang("Mark entries"));
-        BibtexEntry[] bes = panel.getSelectedEntries();
-        besLength = bes.length;
-
-        for (int i=0; i<bes.length; i++) {
-            Util.markEntry(bes[i], level+1, false, ce);
-        }
-        ce.end();
-        panel.undoManager.addEdit(ce);
-    }
-
-    @Override
-    public void update() {
-        frame.basePanel().markBaseChanged();
-        frame.output(Globals.lang("Marked selected")+" "+Globals.lang(besLength>0?"entry":"entries"));
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import net.sf.jabref.undo.NamedCompound;
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+/**
+ *
+ */
+public class MarkEntriesAction extends AbstractWorker implements ActionListener {
+
+    private JabRefFrame frame;
+    final int level;
+    private JMenuItem menuItem;
+    private int besLength = 0;
+
+    public MarkEntriesAction(JabRefFrame frame, int level) {
+        this.frame = frame;
+        this.level = level;
+
+        //menuItem = new JMenuItem(Globals.menuTitle("Mark entries").replaceAll("&",""));
+        menuItem = new JMenuItem("               ");
+        menuItem.setMnemonic(String.valueOf(level+1).charAt(0));
+        menuItem.setBackground(Globals.prefs.getColor("markedEntryBackground"+this.level));
+        menuItem.setOpaque(true);
+        menuItem.addActionListener(this);
+    }
+
+    public JMenuItem getMenuItem() {
+        return menuItem;
+    }
+
+    public void actionPerformed(ActionEvent actionEvent) {
+        try {
+            this.init();
+            getWorker().run();
+            getCallBack().update();
+        } catch (Throwable t) {
+            t.printStackTrace();
+        }
+    }
+
+    public void run() {
+        BasePanel panel = frame.basePanel();
+        NamedCompound ce = new NamedCompound(Globals.lang("Mark entries"));
+        BibtexEntry[] bes = panel.getSelectedEntries();
+        besLength = bes.length;
+
+        for (int i=0; i<bes.length; i++) {
+            Util.markEntry(bes[i], level+1, false, ce);
+        }
+        ce.end();
+        panel.undoManager.addEdit(ce);
+    }
+
+    @Override
+    public void update() {
+        frame.basePanel().markBaseChanged();
+        frame.output(Globals.lang("Marked selected")+" "+Globals.lang(besLength>0?"entry":"entries"));
+    }
+}
diff --git a/src/java/net/sf/jabref/MarkedComparator.java b/src/java/net/sf/jabref/MarkedComparator.java
index b478bba..75febed 100644
--- a/src/java/net/sf/jabref/MarkedComparator.java
+++ b/src/java/net/sf/jabref/MarkedComparator.java
@@ -1,52 +1,52 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.util.Comparator;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Sep 1, 2005
- * Time: 11:35:02 PM
- * To change this template use File | Settings | File Templates.
- */
-public class MarkedComparator implements Comparator<BibtexEntry> {
-
-    Comparator<BibtexEntry> next;
-
-    public MarkedComparator(Comparator<BibtexEntry> next) {
-        this.next = next;
-    }
-    public int compare(BibtexEntry e1, BibtexEntry e2) {
-
-        if (e1 == e2)
-            return 0;
-
-        int mrk1 = Util.isMarked(e1),
-                mrk2 = Util.isMarked(e2);
-
-        if (mrk1 == mrk2)
-            return (next != null ? next.compare(e1, e2) : idCompare(e1, e2));
-
-        else return mrk2-mrk1;
-        
-    }
-
-    private int idCompare(BibtexEntry b1, BibtexEntry b2) {
-	    return ((b1.getId())).compareTo((b2.getId()));
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.util.Comparator;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Sep 1, 2005
+ * Time: 11:35:02 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class MarkedComparator implements Comparator<BibtexEntry> {
+
+    Comparator<BibtexEntry> next;
+
+    public MarkedComparator(Comparator<BibtexEntry> next) {
+        this.next = next;
+    }
+    public int compare(BibtexEntry e1, BibtexEntry e2) {
+
+        if (e1 == e2)
+            return 0;
+
+        int mrk1 = Util.isMarked(e1),
+                mrk2 = Util.isMarked(e2);
+
+        if (mrk1 == mrk2)
+            return (next != null ? next.compare(e1, e2) : idCompare(e1, e2));
+
+        else return mrk2-mrk1;
+        
+    }
+
+    private int idCompare(BibtexEntry b1, BibtexEntry b2) {
+	    return ((b1.getId())).compareTo((b2.getId()));
+    }
+}
diff --git a/src/java/net/sf/jabref/MergeDialog.java b/src/java/net/sf/jabref/MergeDialog.java
index 2caa588..f52a217 100644
--- a/src/java/net/sf/jabref/MergeDialog.java
+++ b/src/java/net/sf/jabref/MergeDialog.java
@@ -1,147 +1,147 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-
-import javax.swing.*;
-
-/**
- * <p>Title: MergeDialog</p>
- * <p>Description: Asks for details about merge database operation.</p>
- * <p>Copyright: Copyright (c) 2003</p>
- * @author Morten O. Alver
- */
-
-public class MergeDialog extends JDialog {
-  JPanel panel1 = new JPanel();
-  BorderLayout borderLayout1 = new BorderLayout();
-  JPanel jPanel1 = new JPanel();
-  JPanel jPanel2 = new JPanel();
-  JButton ok = new JButton();
-  JButton Cancel = new JButton();
-  //TitledBorder titledBorder1;
-  JCheckBox entries = new JCheckBox();
-  JCheckBox strings = new JCheckBox();
-  GridBagLayout gridBagLayout1 = new GridBagLayout();
-  JCheckBox groups = new JCheckBox();
-  JCheckBox selector = new JCheckBox();
-
-  boolean okPressed = false;
-
-    public boolean isOkPressed() {
-        return okPressed;
-    }
-
-    public MergeDialog(JabRefFrame frame, String title, boolean modal) {
-    super(frame, title, modal);
-    try {
-      jbInit(frame);
-      pack();
-    }
-    catch(Exception ex) {
-      ex.printStackTrace();
-    }
-  }
-
-  private void jbInit(JabRefFrame parent) {
-    //  titledBorder1 = new TitledBorder(BorderFactory.createLineBorder(new Color(153, 153, 153),2),Globals.lang("Options"));
-    panel1.setLayout(borderLayout1);
-    ok.setText(Globals.lang("Ok"));
-    ok.addActionListener(new MergeDialog_ok_actionAdapter(this));
-    Cancel.setText(Globals.lang("Cancel"));
-    Cancel.addActionListener(new MergeDialog_Cancel_actionAdapter(this));
-    jPanel1.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-    jPanel1.setLayout(gridBagLayout1);
-    entries.setToolTipText("");
-    entries.setSelected(true);
-    entries.setText(Globals.lang("Import entries"));
-    strings.setSelected(true);
-    strings.setText(Globals.lang("Import strings"));
-    groups.setText(Globals.lang("Import group definitions"));
-    selector.setText(Globals.lang("Import word selector definitions"));
-    this.setModal(true);
-    this.setResizable(false);
-    getContentPane().add(panel1);
-    panel1.add(jPanel2, BorderLayout.SOUTH);
-    jPanel2.add(ok, null);
-    jPanel2.add(Cancel, null);
-    panel1.add(jPanel1, BorderLayout.CENTER);
-    jPanel1.add(entries,     new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel1.add(strings,     new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel1.add(groups,  new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel1.add(selector,  new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
-
-    // Key bindings:
-    ActionMap am = jPanel1.getActionMap();
-    InputMap im = jPanel1.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-    im.put(parent.prefs.getKey("Close dialog"), "close");
-    am.put("close", new AbstractAction() {
-      public void actionPerformed(ActionEvent e) {
-        dispose();
-      }
-    });
-
-  }
-
-  void ok_actionPerformed(ActionEvent e) {
-    okPressed = true;
-    dispose();
-  }
-
-  void Cancel_actionPerformed(ActionEvent e) {
-    dispose();
-  }
-
-  public boolean okPressed() {
-    return okPressed;
-  }
-
-  public boolean importEntries() { return entries.isSelected(); }
-  public boolean importGroups() { return groups.isSelected(); }
-  public boolean importStrings() { return strings.isSelected(); }
-  public boolean importSelectorWords() { return selector.isSelected(); }
-}
-
-class MergeDialog_ok_actionAdapter implements java.awt.event.ActionListener {
-  MergeDialog adaptee;
-
-  MergeDialog_ok_actionAdapter(MergeDialog adaptee) {
-    this.adaptee = adaptee;
-  }
-  public void actionPerformed(ActionEvent e) {
-    adaptee.ok_actionPerformed(e);
-  }
-}
-
-class MergeDialog_Cancel_actionAdapter implements java.awt.event.ActionListener {
-  MergeDialog adaptee;
-
-  MergeDialog_Cancel_actionAdapter(MergeDialog adaptee) {
-    this.adaptee = adaptee;
-  }
-  public void actionPerformed(ActionEvent e) {
-    adaptee.Cancel_actionPerformed(e);
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+
+import javax.swing.*;
+
+/**
+ * <p>Title: MergeDialog</p>
+ * <p>Description: Asks for details about merge database operation.</p>
+ * <p>Copyright: Copyright (c) 2003</p>
+ * @author Morten O. Alver
+ */
+
+public class MergeDialog extends JDialog {
+  JPanel panel1 = new JPanel();
+  BorderLayout borderLayout1 = new BorderLayout();
+  JPanel jPanel1 = new JPanel();
+  JPanel jPanel2 = new JPanel();
+  JButton ok = new JButton();
+  JButton Cancel = new JButton();
+  //TitledBorder titledBorder1;
+  JCheckBox entries = new JCheckBox();
+  JCheckBox strings = new JCheckBox();
+  GridBagLayout gridBagLayout1 = new GridBagLayout();
+  JCheckBox groups = new JCheckBox();
+  JCheckBox selector = new JCheckBox();
+
+  boolean okPressed = false;
+
+    public boolean isOkPressed() {
+        return okPressed;
+    }
+
+    public MergeDialog(JabRefFrame frame, String title, boolean modal) {
+    super(frame, title, modal);
+    try {
+      jbInit(frame);
+      pack();
+    }
+    catch(Exception ex) {
+      ex.printStackTrace();
+    }
+  }
+
+  private void jbInit(JabRefFrame parent) {
+    //  titledBorder1 = new TitledBorder(BorderFactory.createLineBorder(new Color(153, 153, 153),2),Globals.lang("Options"));
+    panel1.setLayout(borderLayout1);
+    ok.setText(Globals.lang("Ok"));
+    ok.addActionListener(new MergeDialog_ok_actionAdapter(this));
+    Cancel.setText(Globals.lang("Cancel"));
+    Cancel.addActionListener(new MergeDialog_Cancel_actionAdapter(this));
+    jPanel1.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+    jPanel1.setLayout(gridBagLayout1);
+    entries.setToolTipText("");
+    entries.setSelected(true);
+    entries.setText(Globals.lang("Import entries"));
+    strings.setSelected(true);
+    strings.setText(Globals.lang("Import strings"));
+    groups.setText(Globals.lang("Import group definitions"));
+    selector.setText(Globals.lang("Import word selector definitions"));
+    this.setModal(true);
+    this.setResizable(false);
+    getContentPane().add(panel1);
+    panel1.add(jPanel2, BorderLayout.SOUTH);
+    jPanel2.add(ok, null);
+    jPanel2.add(Cancel, null);
+    panel1.add(jPanel1, BorderLayout.CENTER);
+    jPanel1.add(entries,     new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
+            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
+    jPanel1.add(strings,     new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
+            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
+    jPanel1.add(groups,  new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
+            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
+    jPanel1.add(selector,  new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0
+            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
+
+    // Key bindings:
+    ActionMap am = jPanel1.getActionMap();
+    InputMap im = jPanel1.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+    im.put(parent.prefs.getKey("Close dialog"), "close");
+    am.put("close", new AbstractAction() {
+      public void actionPerformed(ActionEvent e) {
+        dispose();
+      }
+    });
+
+  }
+
+  void ok_actionPerformed(ActionEvent e) {
+    okPressed = true;
+    dispose();
+  }
+
+  void Cancel_actionPerformed(ActionEvent e) {
+    dispose();
+  }
+
+  public boolean okPressed() {
+    return okPressed;
+  }
+
+  public boolean importEntries() { return entries.isSelected(); }
+  public boolean importGroups() { return groups.isSelected(); }
+  public boolean importStrings() { return strings.isSelected(); }
+  public boolean importSelectorWords() { return selector.isSelected(); }
+}
+
+class MergeDialog_ok_actionAdapter implements java.awt.event.ActionListener {
+  MergeDialog adaptee;
+
+  MergeDialog_ok_actionAdapter(MergeDialog adaptee) {
+    this.adaptee = adaptee;
+  }
+  public void actionPerformed(ActionEvent e) {
+    adaptee.ok_actionPerformed(e);
+  }
+}
+
+class MergeDialog_Cancel_actionAdapter implements java.awt.event.ActionListener {
+  MergeDialog adaptee;
+
+  MergeDialog_Cancel_actionAdapter(MergeDialog adaptee) {
+    this.adaptee = adaptee;
+  }
+  public void actionPerformed(ActionEvent e) {
+    adaptee.Cancel_actionPerformed(e);
+  }
+}
diff --git a/src/java/net/sf/jabref/MetaData.java b/src/java/net/sf/jabref/MetaData.java
index ecf8fb3..510f537 100644
--- a/src/java/net/sf/jabref/MetaData.java
+++ b/src/java/net/sf/jabref/MetaData.java
@@ -1,420 +1,420 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.io.*;
-import java.util.*;
-
-import net.sf.jabref.groups.GroupTreeNode;
-import net.sf.jabref.groups.VersionHandling;
-import net.sf.jabref.labelPattern.LabelPattern;
-import net.sf.jabref.labelPattern.LabelPatternUtil;
-
-import net.sf.jabref.sql.DBStrings;
-
-public class MetaData implements Iterable<String> {
-    private static final String PREFIX_KEYPATTERN = "keypattern_";
-    private static final String KEYPATTERNDEFAULT = "keypatterndefault";
-
-    private HashMap<String, Vector<String>> metaData = new HashMap<String, Vector<String>>();
-    private StringReader data;
-    private GroupTreeNode groupsRoot = null;
-    private File file = null; // The File where this base gets saved.
-    private boolean groupTreeValid = true;
-    
-    private LabelPattern labelPattern = null;
-
-    private DBStrings dbStrings = new DBStrings();
-
-    /**
-     * The MetaData object stores all meta data sets in Vectors. To ensure that
-     * the data is written correctly to string, the user of a meta data Vector
-     * must simply make sure the appropriate changes are reflected in the Vector
-     * it has been passed.
-     */
-    public MetaData(HashMap<String, String> inData, BibtexDatabase db) {
-        boolean groupsTreePresent = false;
-        Vector<String> flatGroupsData = null;
-        Vector<String> treeGroupsData = null;
-        // The first version (0) lacked a version specification, 
-        // thus this value defaults to 0.
-        int groupsVersionOnDisk = 0;
-        
-        if (inData != null) 
-        	for (String key : inData.keySet()){
-            data = new StringReader(inData.get(key));
-            String unit;
-            Vector<String> orderedData = new Vector<String>();
-            // We must allow for ; and \ in escape sequences.
-            try {
-                while ((unit = getNextUnit(data)) != null) {
-                    orderedData.add(unit);
-                }
-            } catch (IOException ex) {
-                System.err.println("Weird error while parsing meta data.");
-            }
-            if (key.equals("groupsversion")) {
-                if (orderedData.size() >= 1)
-                    groupsVersionOnDisk = Integer.parseInt(orderedData.firstElement().toString());
-            } else if (key.equals("groupstree")) {
-                groupsTreePresent = true;
-                treeGroupsData = orderedData; // save for later user
-                // actual import operation is handled later because "groupsversion"
-                // tag might not yet have been read
-            } else if (key.equals("groups")) {
-                flatGroupsData = orderedData;
-            } else {
-                putData(key, orderedData);
-            }
-        }
-        
-        // this possibly handles import of a previous groups version
-        if (groupsTreePresent)
-            putGroups(treeGroupsData, db, groupsVersionOnDisk);
-        
-        if (!groupsTreePresent && flatGroupsData != null) {
-            try {
-                groupsRoot = VersionHandling.importFlatGroups(flatGroupsData);
-                groupTreeValid = true;
-            } catch (IllegalArgumentException ex) {
-                groupTreeValid = true;
-            }
-        }
-    }
-
-    /**
-     * The MetaData object can be constructed with no data in it.
-     */
-    public MetaData() {
-
-    }
-
-    /**
-     * Add default metadata for new database:
-     */
-    public void initializeNewDatabase() {
-        metaData.put(Globals.SELECTOR_META_PREFIX + "keywords", new Vector<String>());
-        metaData.put(Globals.SELECTOR_META_PREFIX + "author", new Vector<String>());
-        metaData.put(Globals.SELECTOR_META_PREFIX + "journal", new Vector<String>());
-        metaData.put(Globals.SELECTOR_META_PREFIX + "publisher", new Vector<String>());
-        metaData.put(Globals.SELECTOR_META_PREFIX + "review", new Vector<String>());
-    }
-
-    /**
-     * @return Iterator on all keys stored in the metadata
-     */
-    public Iterator<String> iterator() {
-        return metaData.keySet().iterator();
-    }
-
-    /**
-     * Retrieves the stored meta data.
-     * 
-     * @param key the key to look up
-     * @return null if no data is found
-     */
-    public Vector<String> getData(String key) {
-        return metaData.get(key);
-    }
-
-    /**
-     * Removes the given key from metadata.
-     * Nothing is done if key is not found.
-     * 
-     * @param key the key to remove
-     */
-    public void remove(String key) {
-        metaData.remove(key);
-    }
-
-    /**
-     * Stores the specified data in this object, using the specified key. For
-     * certain keys (e.g. "groupstree"), the objects in orderedData are
-     * reconstructed from their textual (String) representation if they are of
-     * type String, and stored as an actual instance.
-     */
-    public void putData(String key, Vector<String> orderedData) {
-        metaData.put(key, orderedData);
-    }
-
-    /**
-     * Look up the directory set up for the given field type for this database.
-     * If no directory is set up, return that defined in global preferences.
-     * @param fieldName The field type
-     * @return The default directory for this field type.
-     */
-    public String[] getFileDirectory(String fieldName) {
-        // There can be up to three directory definitions for these files - the database's
-        // metadata can specify a general directory and/or a user-specific directory, or
-        // the preferences can specify one. The settings are prioritized in the following
-        // order and the first defined setting is used: metadata user-specific directory,
-        // metadata general directory, preferences directory.
-        String key = Globals.prefs.get("userFileDirIndividual");
-        List<String> dirs = new ArrayList<String>();
-
-        Vector<String> vec = getData(key);
-        if (vec == null) {
-            key = Globals.prefs.get("userFileDir");
-            vec = getData(key);
-        }
-        if ((vec != null) && (vec.size() > 0)) {
-            String dir;
-            dir = vec.get(0);
-            // If this directory is relative, we try to interpret it as relative to
-            // the file path of this bib file:
-            if (!(new File(dir)).isAbsolute() && (file != null)) {
-                String relDir;
-                if (dir.equals(".")) {
-                    // if dir is only "current" directory, just use its parent (== real current directory) as path
-                    relDir = file.getParent().toString(); 
-                } else {
-                    relDir = new StringBuffer(file.getParent()).
-                            append(System.getProperty("file.separator")).
-                            append(dir).toString();
-                }
-                // If this directory actually exists, it is very likely that the
-                // user wants us to use it:
-                if ((new File(relDir)).exists())
-                    dir = relDir;
-            }
-            dirs.add(dir);
-        }
-        else {
-            String dir = Globals.prefs.get(fieldName + "Directory");
-            if (dir != null)
-                dirs.add(dir);
-        }
-
-        // Check if the bib file location should be included, and if so, if it is set:
-        if (Globals.prefs.getBoolean("bibLocationAsFileDir") && getFile() != null) {
-            // Check if we should add it as primary file dir (first in the list) or not:
-            if (Globals.prefs.getBoolean("bibLocAsPrimaryDir"))
-                dirs.add(0, getFile().getParent());
-            else
-                dirs.add(getFile().getParent());
-        }
-
-        return dirs.toArray(new String[dirs.size()]);
-    }
-
-    /**
-     * Parse the groups metadata string
-     * @param orderedData The vector of metadata strings
-     * @param db The BibtexDatabase this metadata belongs to
-     * @param version The group tree version
-     * @return true if parsing was successful, false otherwise
-     */
-    private void putGroups(Vector<String> orderedData, BibtexDatabase db, int version) {
-        try {
-            groupsRoot = VersionHandling.importGroups(orderedData, db, 
-                    version);
-            groupTreeValid = true;
-        } catch (Exception e) {
-            // we cannot really do anything about this here
-            System.err.println(e);
-            groupTreeValid = false;
-        }
-    }
-
-    public GroupTreeNode getGroups() {
-        return groupsRoot;
-    }
-    
-    /**
-     * Sets a new group root node. <b>WARNING </b>: This invalidates everything
-     * returned by getGroups() so far!!!
-     */
-    public void setGroups(GroupTreeNode root) {
-        groupsRoot = root;
-        groupTreeValid = true;
-    }
-
-    /**
-     * Writes all data to the specified writer, using each object's toString()
-     * method.
-     */
-    public void writeMetaData(Writer out) throws IOException {
-        // write all meta data except groups
-        for (Iterator<String> i = metaData.keySet().iterator(); i.hasNext();) {
-            String key = i.next();
-            StringBuffer sb = new StringBuffer();
-            Vector<String> orderedData = metaData.get(key);
-            if (orderedData.size() >= 0) {
-                sb.append("@comment{").append(GUIGlobals.META_FLAG).append(key).append(":");
-                for (int j = 0; j < orderedData.size(); j++) {
-                    sb.append(Util.quote(orderedData.elementAt(j), ";", '\\')).append(";");
-                }
-                sb.append("}");
-            }
-            wrapStringBuffer(sb, Globals.METADATA_LINE_LENGTH);
-            sb.append(Globals.NEWLINE);
-            sb.append(Globals.NEWLINE);
-            
-            out.write(sb.toString());
-        }
-        // write groups if present. skip this if only the root node exists 
-        // (which is always the AllEntriesGroup).
-        if (groupsRoot != null && groupsRoot.getChildCount() > 0) {
-            StringBuffer sb = new StringBuffer();
-            // write version first
-            sb.append("@comment{").append(GUIGlobals.META_FLAG).append("groupsversion:");
-            sb.append(""+VersionHandling.CURRENT_VERSION+";");
-            sb.append("}");
-            sb.append(Globals.NEWLINE);
-            sb.append(Globals.NEWLINE);
-            out.write(sb.toString());
-            
-            // now write actual groups
-            sb = new StringBuffer();
-            sb.append("@comment{").append(GUIGlobals.META_FLAG).append("groupstree:");
-            sb.append(Globals.NEWLINE);
-            // GroupsTreeNode.toString() uses "\n" for separation
-            StringTokenizer tok = new StringTokenizer(groupsRoot.getTreeAsString(),Globals.NEWLINE);
-            while (tok.hasMoreTokens()) {
-                StringBuffer s = 
-                    new StringBuffer(Util.quote(tok.nextToken(), ";", '\\') + ";");
-                wrapStringBuffer(s, Globals.METADATA_LINE_LENGTH);
-                sb.append(s);
-                sb.append(Globals.NEWLINE);
-            }
-            sb.append("}");
-            sb.append(Globals.NEWLINE);
-            sb.append(Globals.NEWLINE);
-            out.write(sb.toString());
-        }
-    }
-
-    private void wrapStringBuffer(StringBuffer sb, int lineLength) {
-        for (int i=lineLength; i<sb.length(); i+=lineLength+Globals.NEWLINE_LENGTH) {
-            sb.insert(i, Globals.NEWLINE);
-        }
-    }
-    
-    /**
-     * Reads the next unit. Units are delimited by ';'. 
-     */
-    private String getNextUnit(Reader reader) throws IOException {
-        int c;
-        boolean escape = false;
-        StringBuffer res = new StringBuffer();
-        while ((c = reader.read()) != -1) {
-            if (escape) {
-                res.append((char)c);
-                escape = false;
-            } else if (c == '\\') {
-                escape = true;
-            } else if (c == ';') {
-                break;
-            } else {
-                res.append((char)c);
-            }
-        }
-        if (res.length() > 0)
-            return res.toString();
-        return null;
-    }
-
-    public File getFile() {
-        return file;
-    }
-
-    public void setFile(File file) {
-        this.file = file;
-    }
-
-    public DBStrings getDBStrings() {
-        return dbStrings;
-    }
-
-    public void setDBStrings(DBStrings dbStrings) {
-        this.dbStrings = dbStrings;
-    }
-
-    public boolean isGroupTreeValid() {
-        return groupTreeValid;
-    }
-    
-    /**
-     * @return the stored label patterns
-     */
-    public LabelPattern getLabelPattern() {
-        if (labelPattern != null) {
-            return labelPattern;
-        }
-        
-        labelPattern = new LabelPattern();
-        
-        // the parent label pattern of a BibTeX data base is the global pattern stored in the preferences
-        labelPattern.setParent(Globals.prefs.getKeyPattern());
-        
-        Iterator<String> iterator = iterator();
-        while (iterator.hasNext()) {
-            String key = iterator.next();
-            if (key.startsWith(PREFIX_KEYPATTERN)) {
-                Vector<String> value = getData(key);
-                String type = key.substring(PREFIX_KEYPATTERN.length());
-                labelPattern.addLabelPattern(type, value.get(0));
-            }
-        }
-        
-        Vector<String> defaultPattern = getData(KEYPATTERNDEFAULT);
-        if (defaultPattern != null) {
-            labelPattern.setDefaultValue(defaultPattern.get(0));
-        }
-        
-        return labelPattern;
-    }
-
-    /**
-     * Updates the stored key patterns to the given key patterns.
-     * 
-     * @param labelPattern the key patterns to update to. <br />
-     * A reference to this object is stored internally and is returned at getLabelPattern();
-     */
-    public void setLabelPattern(LabelPattern labelPattern) {
-        // remove all keypatterns from metadata
-        Iterator<String> iterator = this.iterator();
-        while (iterator.hasNext()) {
-            String key = iterator.next();
-            if (key.startsWith(PREFIX_KEYPATTERN)) {
-                iterator.remove();
-            }
-        }
-
-        // set new value if it is not a default value
-        for (String key : labelPattern.keySet()) {
-            String metaDataKey = PREFIX_KEYPATTERN + key;
-            ArrayList<String> value = labelPattern.get(key);
-            if (value != null) {
-                Vector<String> data = new Vector<String>();
-                data.add(value.get(0));
-                this.putData(metaDataKey, data);
-            }
-        }
-
-        // store default pattern
-        if (labelPattern.getDefaultValue() == null) {
-            this.remove(KEYPATTERNDEFAULT);
-        } else {
-            Vector<String> data = new Vector<String>();
-            data.add(labelPattern.getDefaultValue().get(0));
-            this.putData(KEYPATTERNDEFAULT, data);
-        }
-        
-        this.labelPattern = labelPattern;
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.io.*;
+import java.util.*;
+
+import net.sf.jabref.groups.GroupTreeNode;
+import net.sf.jabref.groups.VersionHandling;
+import net.sf.jabref.labelPattern.LabelPattern;
+import net.sf.jabref.labelPattern.LabelPatternUtil;
+
+import net.sf.jabref.sql.DBStrings;
+
+public class MetaData implements Iterable<String> {
+    private static final String PREFIX_KEYPATTERN = "keypattern_";
+    private static final String KEYPATTERNDEFAULT = "keypatterndefault";
+
+    private HashMap<String, Vector<String>> metaData = new HashMap<String, Vector<String>>();
+    private StringReader data;
+    private GroupTreeNode groupsRoot = null;
+    private File file = null; // The File where this base gets saved.
+    private boolean groupTreeValid = true;
+    
+    private LabelPattern labelPattern = null;
+
+    private DBStrings dbStrings = new DBStrings();
+
+    /**
+     * The MetaData object stores all meta data sets in Vectors. To ensure that
+     * the data is written correctly to string, the user of a meta data Vector
+     * must simply make sure the appropriate changes are reflected in the Vector
+     * it has been passed.
+     */
+    public MetaData(HashMap<String, String> inData, BibtexDatabase db) {
+        boolean groupsTreePresent = false;
+        Vector<String> flatGroupsData = null;
+        Vector<String> treeGroupsData = null;
+        // The first version (0) lacked a version specification, 
+        // thus this value defaults to 0.
+        int groupsVersionOnDisk = 0;
+        
+        if (inData != null) 
+        	for (String key : inData.keySet()){
+            data = new StringReader(inData.get(key));
+            String unit;
+            Vector<String> orderedData = new Vector<String>();
+            // We must allow for ; and \ in escape sequences.
+            try {
+                while ((unit = getNextUnit(data)) != null) {
+                    orderedData.add(unit);
+                }
+            } catch (IOException ex) {
+                System.err.println("Weird error while parsing meta data.");
+            }
+            if (key.equals("groupsversion")) {
+                if (orderedData.size() >= 1)
+                    groupsVersionOnDisk = Integer.parseInt(orderedData.firstElement().toString());
+            } else if (key.equals("groupstree")) {
+                groupsTreePresent = true;
+                treeGroupsData = orderedData; // save for later user
+                // actual import operation is handled later because "groupsversion"
+                // tag might not yet have been read
+            } else if (key.equals("groups")) {
+                flatGroupsData = orderedData;
+            } else {
+                putData(key, orderedData);
+            }
+        }
+        
+        // this possibly handles import of a previous groups version
+        if (groupsTreePresent)
+            putGroups(treeGroupsData, db, groupsVersionOnDisk);
+        
+        if (!groupsTreePresent && flatGroupsData != null) {
+            try {
+                groupsRoot = VersionHandling.importFlatGroups(flatGroupsData);
+                groupTreeValid = true;
+            } catch (IllegalArgumentException ex) {
+                groupTreeValid = true;
+            }
+        }
+    }
+
+    /**
+     * The MetaData object can be constructed with no data in it.
+     */
+    public MetaData() {
+
+    }
+
+    /**
+     * Add default metadata for new database:
+     */
+    public void initializeNewDatabase() {
+        metaData.put(Globals.SELECTOR_META_PREFIX + "keywords", new Vector<String>());
+        metaData.put(Globals.SELECTOR_META_PREFIX + "author", new Vector<String>());
+        metaData.put(Globals.SELECTOR_META_PREFIX + "journal", new Vector<String>());
+        metaData.put(Globals.SELECTOR_META_PREFIX + "publisher", new Vector<String>());
+        metaData.put(Globals.SELECTOR_META_PREFIX + "review", new Vector<String>());
+    }
+
+    /**
+     * @return Iterator on all keys stored in the metadata
+     */
+    public Iterator<String> iterator() {
+        return metaData.keySet().iterator();
+    }
+
+    /**
+     * Retrieves the stored meta data.
+     * 
+     * @param key the key to look up
+     * @return null if no data is found
+     */
+    public Vector<String> getData(String key) {
+        return metaData.get(key);
+    }
+
+    /**
+     * Removes the given key from metadata.
+     * Nothing is done if key is not found.
+     * 
+     * @param key the key to remove
+     */
+    public void remove(String key) {
+        metaData.remove(key);
+    }
+
+    /**
+     * Stores the specified data in this object, using the specified key. For
+     * certain keys (e.g. "groupstree"), the objects in orderedData are
+     * reconstructed from their textual (String) representation if they are of
+     * type String, and stored as an actual instance.
+     */
+    public void putData(String key, Vector<String> orderedData) {
+        metaData.put(key, orderedData);
+    }
+
+    /**
+     * Look up the directory set up for the given field type for this database.
+     * If no directory is set up, return that defined in global preferences.
+     * @param fieldName The field type
+     * @return The default directory for this field type.
+     */
+    public String[] getFileDirectory(String fieldName) {
+        // There can be up to three directory definitions for these files - the database's
+        // metadata can specify a general directory and/or a user-specific directory, or
+        // the preferences can specify one. The settings are prioritized in the following
+        // order and the first defined setting is used: metadata user-specific directory,
+        // metadata general directory, preferences directory.
+        String key = Globals.prefs.get("userFileDirIndividual");
+        List<String> dirs = new ArrayList<String>();
+
+        Vector<String> vec = getData(key);
+        if (vec == null) {
+            key = Globals.prefs.get("userFileDir");
+            vec = getData(key);
+        }
+        if ((vec != null) && (vec.size() > 0)) {
+            String dir;
+            dir = vec.get(0);
+            // If this directory is relative, we try to interpret it as relative to
+            // the file path of this bib file:
+            if (!(new File(dir)).isAbsolute() && (file != null)) {
+                String relDir;
+                if (dir.equals(".")) {
+                    // if dir is only "current" directory, just use its parent (== real current directory) as path
+                    relDir = file.getParent().toString(); 
+                } else {
+                    relDir = new StringBuffer(file.getParent()).
+                            append(System.getProperty("file.separator")).
+                            append(dir).toString();
+                }
+                // If this directory actually exists, it is very likely that the
+                // user wants us to use it:
+                if ((new File(relDir)).exists())
+                    dir = relDir;
+            }
+            dirs.add(dir);
+        }
+        else {
+            String dir = Globals.prefs.get(fieldName + "Directory");
+            if (dir != null)
+                dirs.add(dir);
+        }
+
+        // Check if the bib file location should be included, and if so, if it is set:
+        if (Globals.prefs.getBoolean("bibLocationAsFileDir") && getFile() != null) {
+            // Check if we should add it as primary file dir (first in the list) or not:
+            if (Globals.prefs.getBoolean("bibLocAsPrimaryDir"))
+                dirs.add(0, getFile().getParent());
+            else
+                dirs.add(getFile().getParent());
+        }
+
+        return dirs.toArray(new String[dirs.size()]);
+    }
+
+    /**
+     * Parse the groups metadata string
+     * @param orderedData The vector of metadata strings
+     * @param db The BibtexDatabase this metadata belongs to
+     * @param version The group tree version
+     * @return true if parsing was successful, false otherwise
+     */
+    private void putGroups(Vector<String> orderedData, BibtexDatabase db, int version) {
+        try {
+            groupsRoot = VersionHandling.importGroups(orderedData, db, 
+                    version);
+            groupTreeValid = true;
+        } catch (Exception e) {
+            // we cannot really do anything about this here
+            System.err.println(e);
+            groupTreeValid = false;
+        }
+    }
+
+    public GroupTreeNode getGroups() {
+        return groupsRoot;
+    }
+    
+    /**
+     * Sets a new group root node. <b>WARNING </b>: This invalidates everything
+     * returned by getGroups() so far!!!
+     */
+    public void setGroups(GroupTreeNode root) {
+        groupsRoot = root;
+        groupTreeValid = true;
+    }
+
+    /**
+     * Writes all data to the specified writer, using each object's toString()
+     * method.
+     */
+    public void writeMetaData(Writer out) throws IOException {
+        // write all meta data except groups
+        for (Iterator<String> i = metaData.keySet().iterator(); i.hasNext();) {
+            String key = i.next();
+            StringBuffer sb = new StringBuffer();
+            Vector<String> orderedData = metaData.get(key);
+            if (orderedData.size() >= 0) {
+                sb.append("@comment{").append(GUIGlobals.META_FLAG).append(key).append(":");
+                for (int j = 0; j < orderedData.size(); j++) {
+                    sb.append(Util.quote(orderedData.elementAt(j), ";", '\\')).append(";");
+                }
+                sb.append("}");
+            }
+            wrapStringBuffer(sb, Globals.METADATA_LINE_LENGTH);
+            sb.append(Globals.NEWLINE);
+            sb.append(Globals.NEWLINE);
+            
+            out.write(sb.toString());
+        }
+        // write groups if present. skip this if only the root node exists 
+        // (which is always the AllEntriesGroup).
+        if (groupsRoot != null && groupsRoot.getChildCount() > 0) {
+            StringBuffer sb = new StringBuffer();
+            // write version first
+            sb.append("@comment{").append(GUIGlobals.META_FLAG).append("groupsversion:");
+            sb.append(""+VersionHandling.CURRENT_VERSION+";");
+            sb.append("}");
+            sb.append(Globals.NEWLINE);
+            sb.append(Globals.NEWLINE);
+            out.write(sb.toString());
+            
+            // now write actual groups
+            sb = new StringBuffer();
+            sb.append("@comment{").append(GUIGlobals.META_FLAG).append("groupstree:");
+            sb.append(Globals.NEWLINE);
+            // GroupsTreeNode.toString() uses "\n" for separation
+            StringTokenizer tok = new StringTokenizer(groupsRoot.getTreeAsString(),Globals.NEWLINE);
+            while (tok.hasMoreTokens()) {
+                StringBuffer s = 
+                    new StringBuffer(Util.quote(tok.nextToken(), ";", '\\') + ";");
+                wrapStringBuffer(s, Globals.METADATA_LINE_LENGTH);
+                sb.append(s);
+                sb.append(Globals.NEWLINE);
+            }
+            sb.append("}");
+            sb.append(Globals.NEWLINE);
+            sb.append(Globals.NEWLINE);
+            out.write(sb.toString());
+        }
+    }
+
+    private void wrapStringBuffer(StringBuffer sb, int lineLength) {
+        for (int i=lineLength; i<sb.length(); i+=lineLength+Globals.NEWLINE_LENGTH) {
+            sb.insert(i, Globals.NEWLINE);
+        }
+    }
+    
+    /**
+     * Reads the next unit. Units are delimited by ';'. 
+     */
+    private String getNextUnit(Reader reader) throws IOException {
+        int c;
+        boolean escape = false;
+        StringBuffer res = new StringBuffer();
+        while ((c = reader.read()) != -1) {
+            if (escape) {
+                res.append((char)c);
+                escape = false;
+            } else if (c == '\\') {
+                escape = true;
+            } else if (c == ';') {
+                break;
+            } else {
+                res.append((char)c);
+            }
+        }
+        if (res.length() > 0)
+            return res.toString();
+        return null;
+    }
+
+    public File getFile() {
+        return file;
+    }
+
+    public void setFile(File file) {
+        this.file = file;
+    }
+
+    public DBStrings getDBStrings() {
+        return dbStrings;
+    }
+
+    public void setDBStrings(DBStrings dbStrings) {
+        this.dbStrings = dbStrings;
+    }
+
+    public boolean isGroupTreeValid() {
+        return groupTreeValid;
+    }
+    
+    /**
+     * @return the stored label patterns
+     */
+    public LabelPattern getLabelPattern() {
+        if (labelPattern != null) {
+            return labelPattern;
+        }
+        
+        labelPattern = new LabelPattern();
+        
+        // the parent label pattern of a BibTeX data base is the global pattern stored in the preferences
+        labelPattern.setParent(Globals.prefs.getKeyPattern());
+        
+        Iterator<String> iterator = iterator();
+        while (iterator.hasNext()) {
+            String key = iterator.next();
+            if (key.startsWith(PREFIX_KEYPATTERN)) {
+                Vector<String> value = getData(key);
+                String type = key.substring(PREFIX_KEYPATTERN.length());
+                labelPattern.addLabelPattern(type, value.get(0));
+            }
+        }
+        
+        Vector<String> defaultPattern = getData(KEYPATTERNDEFAULT);
+        if (defaultPattern != null) {
+            labelPattern.setDefaultValue(defaultPattern.get(0));
+        }
+        
+        return labelPattern;
+    }
+
+    /**
+     * Updates the stored key patterns to the given key patterns.
+     * 
+     * @param labelPattern the key patterns to update to. <br />
+     * A reference to this object is stored internally and is returned at getLabelPattern();
+     */
+    public void setLabelPattern(LabelPattern labelPattern) {
+        // remove all keypatterns from metadata
+        Iterator<String> iterator = this.iterator();
+        while (iterator.hasNext()) {
+            String key = iterator.next();
+            if (key.startsWith(PREFIX_KEYPATTERN)) {
+                iterator.remove();
+            }
+        }
+
+        // set new value if it is not a default value
+        for (String key : labelPattern.keySet()) {
+            String metaDataKey = PREFIX_KEYPATTERN + key;
+            ArrayList<String> value = labelPattern.get(key);
+            if (value != null) {
+                Vector<String> data = new Vector<String>();
+                data.add(value.get(0));
+                this.putData(metaDataKey, data);
+            }
+        }
+
+        // store default pattern
+        if (labelPattern.getDefaultValue() == null) {
+            this.remove(KEYPATTERNDEFAULT);
+        } else {
+            Vector<String> data = new Vector<String>();
+            data.add(labelPattern.getDefaultValue().get(0));
+            this.putData(KEYPATTERNDEFAULT, data);
+        }
+        
+        this.labelPattern = labelPattern;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/MnemonicAwareAction.java b/src/java/net/sf/jabref/MnemonicAwareAction.java
index 5e412c4..5b8fdb0 100644
--- a/src/java/net/sf/jabref/MnemonicAwareAction.java
+++ b/src/java/net/sf/jabref/MnemonicAwareAction.java
@@ -1,54 +1,54 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.ImageIcon;
-/**
- * This class extends {@link AbstractAction} with the ability to set
- * the mnemonic key based on a '&' character inserted in front of
- * the desired mnemonic letter. This is done by setting the action's
- * name using putValue(NAME, actionname).
- * This facilitates localized mnemonics.
- */
-public abstract class MnemonicAwareAction extends AbstractAction {
-
-    public MnemonicAwareAction() {
-	//super("");
-    }
-
-    public MnemonicAwareAction(ImageIcon icon) {
-	//super(icon);
-        
-        putValue(SMALL_ICON, icon);
-    }
-
-    public void putValue(String key, Object value) {
-	if (key.equals(Action.NAME)) {
-	    String name = Globals.menuTitle(value.toString());
-	    int i = name.indexOf('&');
-	    if (i >= 0) {
-		char mnemonic = Character.toUpperCase(name.charAt(i+1));
-		putValue(Action.MNEMONIC_KEY, new Integer(mnemonic));
-		value = name.substring(0, i) + name.substring(i+1);
-	    } else
-                value = name;
-	}
-	super.putValue(key, value);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.ImageIcon;
+/**
+ * This class extends {@link AbstractAction} with the ability to set
+ * the mnemonic key based on a '&' character inserted in front of
+ * the desired mnemonic letter. This is done by setting the action's
+ * name using putValue(NAME, actionname).
+ * This facilitates localized mnemonics.
+ */
+public abstract class MnemonicAwareAction extends AbstractAction {
+
+    public MnemonicAwareAction() {
+	//super("");
+    }
+
+    public MnemonicAwareAction(ImageIcon icon) {
+	//super(icon);
+        
+        putValue(SMALL_ICON, icon);
+    }
+
+    public void putValue(String key, Object value) {
+	if (key.equals(Action.NAME)) {
+	    String name = Globals.menuTitle(value.toString());
+	    int i = name.indexOf('&');
+	    if (i >= 0) {
+		char mnemonic = Character.toUpperCase(name.charAt(i+1));
+		putValue(Action.MNEMONIC_KEY, new Integer(mnemonic));
+		value = name.substring(0, i) + name.substring(i+1);
+	    } else
+                value = name;
+	}
+	super.putValue(key, value);
+    }
+}
diff --git a/src/java/net/sf/jabref/NameFormatterTab.java b/src/java/net/sf/jabref/NameFormatterTab.java
index 15ea6fa..dae7de9 100644
--- a/src/java/net/sf/jabref/NameFormatterTab.java
+++ b/src/java/net/sf/jabref/NameFormatterTab.java
@@ -1,320 +1,322 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.swing.*;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableColumnModel;
-import javax.swing.table.TableModel;
-
-import net.sf.jabref.export.layout.format.plugin.NameFormat;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-public class NameFormatterTab extends JPanel implements PrefsTab {
-
-	public static final String NAME_FORMATTER_VALUE = "nameFormatterFormats";
-
-	public static final String NAME_FORMATER_KEY = "nameFormatterNames";
-
-	public static Map<String, String> getNameFormatters(){
-		
-		Map<String, String> result = new HashMap<String, String>();
-
-		String[] names = Globals.prefs.getStringArray(NAME_FORMATER_KEY);
-		String[] formats = Globals.prefs.getStringArray(NAME_FORMATTER_VALUE);
-		
-		if (names == null){
-			names = new String[]{};
-		}
-		if (formats == null){
-			formats = new String[]{};
-		}
-		
-		for (int i = 0; i < names.length; i++) {
-			if (i < formats.length)
-				result.put(names[i], formats[i]);
-			else
-				result.put(names[i], NameFormat.DEFAULT_FORMAT);
-		}
-		
-		return result;
-	}
-	
-	private boolean tableChanged = false;
-
-	private JTable table;
-
-	private int rowCount = -1;
-
-	private Vector<TableRow> tableRows = new Vector<TableRow>(10);
-
-	class TableRow {
-		String name;
-
-		String format;
-
-		public TableRow() {
-			this("");
-		}
-
-		public TableRow(String name) {
-			this(name, NameFormat.DEFAULT_FORMAT);
-		}
-
-		public TableRow(String name, String format) {
-			this.name = name;
-			this.format = format;
-		}
-	}
-
-	/**
-	 * Tab to create custom Name Formatters
-	 * 
-	 */
-	public NameFormatterTab(HelpDialog helpDialog) {
-		setLayout(new BorderLayout());
-
-		TableModel tm = new AbstractTableModel() {
-			public int getRowCount() {
-				return rowCount;
-			}
-
-			public int getColumnCount() {
-				return 2;
-			}
-
-			public Object getValueAt(int row, int column) {
-				if (row >= tableRows.size())
-					return "";
-				TableRow tr = tableRows.elementAt(row);
-				if (tr == null)
-					return "";
-				switch (column) {
-				case 0:
-					return tr.name;
-				case 1:
-					return tr.format;
-				}
-				return null; // Unreachable.
-			}
-
-			public String getColumnName(int col) {
-				return (col == 0 ? Globals.lang("Formatter Name") : Globals.lang("Format String"));
-			}
-
-			public Class<String> getColumnClass(int column) {
-				if (column == 0)
-					return String.class;
-				else
-					return String.class;
-			}
-
-			public boolean isCellEditable(int row, int col) {
-				return true;
-			}
-
-			public void setValueAt(Object value, int row, int col) {
-				tableChanged = true;
-
-				// Make sure the vector is long enough.
-				while (row >= tableRows.size())
-					tableRows.add(new TableRow());
-
-				TableRow rowContent = tableRows.elementAt(row);
-
-				if (col == 0)
-					rowContent.name = value.toString();
-				else
-					rowContent.format = value.toString();
-			}
-		};
-
-		table = new JTable(tm);
-		TableColumnModel cm = table.getColumnModel();
-		cm.getColumn(0).setPreferredWidth(140);
-		cm.getColumn(1).setPreferredWidth(400);
-
-		FormLayout layout = new FormLayout("1dlu, 8dlu, left:pref, 4dlu, fill:pref", "");
-
-		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-
-		JPanel pan = new JPanel();
-
-		JPanel tabPanel = new JPanel();
-		tabPanel.setLayout(new BorderLayout());
-		JScrollPane sp = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-			JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-		table.setPreferredScrollableViewportSize(new Dimension(250, 200));
-		sp.setMinimumSize(new Dimension(250, 300));
-		sp.setPreferredSize(new Dimension(600, 300));
-		tabPanel.add(sp, BorderLayout.CENTER);
-
-		JToolBar tlb = new JToolBar(SwingConstants.VERTICAL);
-		tlb.setFloatable(false);
-		tlb.setBorder(null);
-		tlb.add(new AddRowAction());
-		tlb.add(new DeleteRowAction());
-		tlb.add(new HelpAction(helpDialog, GUIGlobals.nameFormatterHelp,
-			"Help on Name Formatting", GUIGlobals.getIconUrl("helpSmall")));
-
-		tabPanel.add(tlb, BorderLayout.EAST);
-
-		builder.appendSeparator(Globals.lang("Special Name Formatters"));
-		builder.nextLine();
-		builder.append(pan);
-		builder.append(tabPanel);
-		builder.nextLine();
-
-		pan = builder.getPanel();
-		pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-		add(pan, BorderLayout.CENTER);
-	}
-
-	public void setValues() {
-		tableRows.clear();
-		String[] names = Globals.prefs.getStringArray(NAME_FORMATER_KEY);
-		String[] formats = Globals.prefs.getStringArray(NAME_FORMATTER_VALUE);
-		
-		if (names == null){
-			names = new String[]{};
-		}
-		if (formats == null){
-			formats = new String[]{};
-		}
-		
-		for (int i = 0; i < names.length; i++) {
-			if (i < formats.length)
-				tableRows.add(new TableRow(names[i], formats[i]));
-			else
-				tableRows.add(new TableRow(names[i]));
-		}
-		rowCount = tableRows.size() + 5;
-	}
-
-	class DeleteRowAction extends AbstractAction {
-		
-		public DeleteRowAction() {
-			super("Delete row", GUIGlobals.getImage("remove"));
-			putValue(SHORT_DESCRIPTION, Globals.lang("Delete rows"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			tableChanged = true;
-			
-			int[] selectedRows = table.getSelectedRows();
-		
-			int numberDeleted = 0;
-			
-			for (int i = selectedRows.length - 1; i >= 0; i--) {
-				if (selectedRows[i] < tableRows.size()) {
-					tableRows.remove(selectedRows[i]);
-					numberDeleted++;
-				}
-			}
-			
-			rowCount -= numberDeleted;
-			
-			if (selectedRows.length > 1)
-				table.clearSelection();
-			
-			table.revalidate();
-			table.repaint();
-		}
-	}
-
-	class AddRowAction extends AbstractAction {
-		public AddRowAction() {
-			super("Add row", GUIGlobals.getImage("add"));
-			putValue(SHORT_DESCRIPTION, Globals.lang("Insert rows"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			int[] rows = table.getSelectedRows();
-			if (rows.length == 0) {
-				// No rows selected, so we just add one at the end.
-				rowCount++;
-				table.revalidate();
-				table.repaint();
-				return;
-			}
-			for (int i = 0; i < rows.length; i++) {
-				if (rows[i] + i - 1 < tableRows.size())
-					tableRows.add(Math.max(0, rows[i] + i - 1), new TableRow());
-			}
-			rowCount += rows.length;
-			if (rows.length > 1)
-				table.clearSelection();
-			table.revalidate();
-			table.repaint();
-			tableChanged = true;
-		}
-	}
-
-	/**
-	 * Store changes to table preferences. This method is called when the user
-	 * clicks Ok.
-	 * 
-	 */
-	public void storeSettings() {
-
-		if (table.isEditing()) {
-			int col = table.getEditingColumn(), row = table.getEditingRow();
-			table.getCellEditor(row, col).stopCellEditing();
-		}
-
-		// Now we need to make sense of the contents the user has made to the
-		// table setup table.
-		if (tableChanged) {
-			// First we remove all rows with empty names.
-			int i = 0;
-			while (i < tableRows.size()) {
-				if (tableRows.elementAt(i).name.equals(""))
-					tableRows.removeElementAt(i);
-				else
-					i++;
-			}
-			// Then we make arrays
-			String[] names = new String[tableRows.size()], formats = new String[tableRows.size()];
-
-			for (i = 0; i < tableRows.size(); i++) {
-				TableRow tr = tableRows.elementAt(i);
-				names[i] = tr.name;
-				formats[i] = tr.format;
-			}
-
-			// Finally, we store the new preferences.
-			Globals.prefs.putStringArray(NAME_FORMATER_KEY, names);
-			Globals.prefs.putStringArray(NAME_FORMATTER_VALUE, formats);
-		}
-	}
-
-	public boolean readyToClose() {
-		return true;
-	}
-
-	public String getTabName() {
-        return Globals.lang("Name formatter");
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableModel;
+
+import net.sf.jabref.export.layout.format.plugin.NameFormat;
+import net.sf.jabref.help.HelpAction;
+import net.sf.jabref.help.HelpDialog;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+public class NameFormatterTab extends JPanel implements PrefsTab {
+
+	public static final String NAME_FORMATTER_VALUE = "nameFormatterFormats";
+
+	public static final String NAME_FORMATER_KEY = "nameFormatterNames";
+
+	public static Map<String, String> getNameFormatters(){
+		
+		Map<String, String> result = new HashMap<String, String>();
+
+		String[] names = Globals.prefs.getStringArray(NAME_FORMATER_KEY);
+		String[] formats = Globals.prefs.getStringArray(NAME_FORMATTER_VALUE);
+		
+		if (names == null){
+			names = new String[]{};
+		}
+		if (formats == null){
+			formats = new String[]{};
+		}
+		
+		for (int i = 0; i < names.length; i++) {
+			if (i < formats.length)
+				result.put(names[i], formats[i]);
+			else
+				result.put(names[i], NameFormat.DEFAULT_FORMAT);
+		}
+		
+		return result;
+	}
+	
+	private boolean tableChanged = false;
+
+	private JTable table;
+
+	private int rowCount = -1;
+
+	private Vector<TableRow> tableRows = new Vector<TableRow>(10);
+
+	class TableRow {
+		String name;
+
+		String format;
+
+		public TableRow() {
+			this("");
+		}
+
+		public TableRow(String name) {
+			this(name, NameFormat.DEFAULT_FORMAT);
+		}
+
+		public TableRow(String name, String format) {
+			this.name = name;
+			this.format = format;
+		}
+	}
+
+	/**
+	 * Tab to create custom Name Formatters
+	 * 
+	 */
+	public NameFormatterTab(HelpDialog helpDialog) {
+		setLayout(new BorderLayout());
+
+		TableModel tm = new AbstractTableModel() {
+			public int getRowCount() {
+				return rowCount;
+			}
+
+			public int getColumnCount() {
+				return 2;
+			}
+
+			public Object getValueAt(int row, int column) {
+				if (row >= tableRows.size())
+					return "";
+				TableRow tr = tableRows.elementAt(row);
+				if (tr == null)
+					return "";
+				switch (column) {
+				case 0:
+					return tr.name;
+				case 1:
+					return tr.format;
+				}
+				return null; // Unreachable.
+			}
+
+			public String getColumnName(int col) {
+				return (col == 0 ? Globals.lang("Formatter Name") : Globals.lang("Format String"));
+			}
+
+			public Class<String> getColumnClass(int column) {
+				if (column == 0)
+					return String.class;
+				else
+					return String.class;
+			}
+
+			public boolean isCellEditable(int row, int col) {
+				return true;
+			}
+
+			public void setValueAt(Object value, int row, int col) {
+				tableChanged = true;
+
+				// Make sure the vector is long enough.
+				while (row >= tableRows.size())
+					tableRows.add(new TableRow());
+
+				TableRow rowContent = tableRows.elementAt(row);
+
+				if (col == 0)
+					rowContent.name = value.toString();
+				else
+					rowContent.format = value.toString();
+			}
+		};
+
+		table = new JTable(tm);
+		TableColumnModel cm = table.getColumnModel();
+		cm.getColumn(0).setPreferredWidth(140);
+		cm.getColumn(1).setPreferredWidth(400);
+
+		FormLayout layout = new FormLayout("1dlu, 8dlu, left:pref, 4dlu, fill:pref", "");
+
+		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+
+		JPanel pan = new JPanel();
+
+		JPanel tabPanel = new JPanel();
+		tabPanel.setLayout(new BorderLayout());
+		JScrollPane sp = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+			JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+		table.setPreferredScrollableViewportSize(new Dimension(250, 200));
+		sp.setMinimumSize(new Dimension(250, 300));
+		sp.setPreferredSize(new Dimension(600, 300));
+		tabPanel.add(sp, BorderLayout.CENTER);
+
+		JToolBar tlb = new JToolBar(SwingConstants.VERTICAL);
+		tlb.setFloatable(false);
+		tlb.setBorder(null);
+		tlb.add(new AddRowAction());
+		tlb.add(new DeleteRowAction());
+		tlb.add(new HelpAction(helpDialog, GUIGlobals.nameFormatterHelp,
+			"Help on Name Formatting", GUIGlobals.getIconUrl("helpSmall")));
+
+		tabPanel.add(tlb, BorderLayout.EAST);
+
+		builder.appendSeparator(Globals.lang("Special Name Formatters"));
+		builder.nextLine();
+		builder.append(pan);
+		builder.append(tabPanel);
+		builder.nextLine();
+
+		pan = builder.getPanel();
+		pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+		add(pan, BorderLayout.CENTER);
+	}
+
+	public void setValues() {
+		tableRows.clear();
+		String[] names = Globals.prefs.getStringArray(NAME_FORMATER_KEY);
+		String[] formats = Globals.prefs.getStringArray(NAME_FORMATTER_VALUE);
+		
+		if (names == null){
+			names = new String[]{};
+		}
+		if (formats == null){
+			formats = new String[]{};
+		}
+		
+		for (int i = 0; i < names.length; i++) {
+			if (i < formats.length)
+				tableRows.add(new TableRow(names[i], formats[i]));
+			else
+				tableRows.add(new TableRow(names[i]));
+		}
+		rowCount = tableRows.size() + 5;
+	}
+
+	class DeleteRowAction extends AbstractAction {
+		
+		public DeleteRowAction() {
+			super("Delete row", GUIGlobals.getImage("remove"));
+			putValue(SHORT_DESCRIPTION, Globals.lang("Delete rows"));
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			tableChanged = true;
+			
+			int[] selectedRows = table.getSelectedRows();
+		
+			int numberDeleted = 0;
+			
+			for (int i = selectedRows.length - 1; i >= 0; i--) {
+				if (selectedRows[i] < tableRows.size()) {
+					tableRows.remove(selectedRows[i]);
+					numberDeleted++;
+				}
+			}
+			
+			rowCount -= numberDeleted;
+			
+			if (selectedRows.length > 1)
+				table.clearSelection();
+			
+			table.revalidate();
+			table.repaint();
+		}
+	}
+
+	class AddRowAction extends AbstractAction {
+		public AddRowAction() {
+			super("Add row", GUIGlobals.getImage("add"));
+			putValue(SHORT_DESCRIPTION, Globals.lang("Insert rows"));
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			int[] rows = table.getSelectedRows();
+			if (rows.length == 0) {
+				// No rows selected, so we just add one at the end.
+				rowCount++;
+				table.revalidate();
+				table.repaint();
+				return;
+			}
+			for (int i = 0; i < rows.length; i++) {
+				if (rows[i] + i - 1 < tableRows.size())
+					tableRows.add(Math.max(0, rows[i] + i - 1), new TableRow());
+			}
+			rowCount += rows.length;
+			if (rows.length > 1)
+				table.clearSelection();
+			table.revalidate();
+			table.repaint();
+			tableChanged = true;
+		}
+	}
+
+	/**
+	 * Store changes to table preferences. This method is called when the user
+	 * clicks Ok.
+	 * 
+	 */
+	public void storeSettings() {
+
+		if (table.isEditing()) {
+			int col = table.getEditingColumn(), row = table.getEditingRow();
+			table.getCellEditor(row, col).stopCellEditing();
+		}
+
+		// Now we need to make sense of the contents the user has made to the
+		// table setup table.
+		if (tableChanged) {
+			// First we remove all rows with empty names.
+			int i = 0;
+			while (i < tableRows.size()) {
+				if (tableRows.elementAt(i).name.equals(""))
+					tableRows.removeElementAt(i);
+				else
+					i++;
+			}
+			// Then we make arrays
+			String[] names = new String[tableRows.size()], formats = new String[tableRows.size()];
+
+			for (i = 0; i < tableRows.size(); i++) {
+				TableRow tr = tableRows.elementAt(i);
+				names[i] = tr.name;
+				formats[i] = tr.format;
+			}
+
+			// Finally, we store the new preferences.
+			Globals.prefs.putStringArray(NAME_FORMATER_KEY, names);
+			Globals.prefs.putStringArray(NAME_FORMATTER_VALUE, formats);
+		}
+	}
+
+	public boolean readyToClose() {
+		return true;
+	}
+
+	public String getTabName() {
+        return Globals.lang("Name formatter");
+	}
+}
diff --git a/src/java/net/sf/jabref/OpenFileFilter.java b/src/java/net/sf/jabref/OpenFileFilter.java
index d0f0325..3c8a8da 100644
--- a/src/java/net/sf/jabref/OpenFileFilter.java
+++ b/src/java/net/sf/jabref/OpenFileFilter.java
@@ -1,117 +1,117 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.util.HashSet;
-
-public class OpenFileFilter extends javax.swing.filechooser.FileFilter implements FilenameFilter {
-
-  HashSet<String> extSet = new HashSet<String>();
-  String desc;
-
-  public OpenFileFilter(String[] extensions) {
-    StringBuffer buf = new StringBuffer();
-    int numExt = extensions.length;
-
-    if (numExt>0) {
-      buf.append('*');
-      buf.append(extensions[0]);
-
-      extSet.add(extensions[0]);
-    }
-
-    for(int curExt = 1; curExt<numExt; curExt++) {
-      buf.append(", *");
-      buf.append(extensions[curExt]);
-
-      extSet.add(extensions[curExt]);
-    }
-
-    desc = buf.toString();
-  }
-
-  public OpenFileFilter() {
-    this( new String[] {
-      ".bib",
-      ".dat",  // silverplatter ending
-      ".txt",  // windows puts ".txt" extentions and for scifinder
-      ".ris",
-      ".ref",  // refer/endnote format
-      ".fcgi", // default for pubmed
-      ".bibx", // default for BibTeXML
-      ".xml"
-    });
-  }
-
-  public OpenFileFilter(String s) {
-    this(s.split("[, ]+",0));
-  }
-
-  public boolean accept(File file){
-    if (file.isDirectory())
-      return true;
-
-    return accept(file.getName());
-  }
-
-  public boolean accept(String filenm){
-
-    filenm = filenm.toLowerCase();
-    int dotPos = filenm.lastIndexOf(".");
-
-    if (dotPos==-1)
-      return false;
-
-    int dotDotPos = filenm.lastIndexOf(".", dotPos-1); // for dot.dot extensions
-
-    return extSet.contains(filenm.substring(dotPos)) ||
-      (dotDotPos>=0 && extSet.contains(filenm.substring(dotDotPos)));
-  }
-
-  public String getSuffix(String filenm) {
-
-    int dotPos;
-    String suffix;
-    
-    dotPos = filenm.lastIndexOf(".");
-    if (dotPos==-1)
-      return null;
-
-    suffix = filenm.substring(dotPos);
-    if (extSet.contains(suffix))
-      return suffix;
-
-    dotPos = filenm.lastIndexOf(".", dotPos-1); // for dot.dot extensions
-    if (dotPos==-1)
-      return null;
-
-    suffix = filenm.substring(dotPos);
-    if (extSet.contains(suffix))
-      return suffix;
-
-    return null;
-  }
-
-  public String getDescription(){
-    return desc;
-  }
-
-  public boolean accept(File dir, String name) {
-    return accept(new File(dir.getPath()+name));
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.HashSet;
+
+public class OpenFileFilter extends javax.swing.filechooser.FileFilter implements FilenameFilter {
+
+  HashSet<String> extSet = new HashSet<String>();
+  String desc;
+
+  public OpenFileFilter(String[] extensions) {
+    StringBuffer buf = new StringBuffer();
+    int numExt = extensions.length;
+
+    if (numExt>0) {
+      buf.append('*');
+      buf.append(extensions[0]);
+
+      extSet.add(extensions[0]);
+    }
+
+    for(int curExt = 1; curExt<numExt; curExt++) {
+      buf.append(", *");
+      buf.append(extensions[curExt]);
+
+      extSet.add(extensions[curExt]);
+    }
+
+    desc = buf.toString();
+  }
+
+  public OpenFileFilter() {
+    this( new String[] {
+      ".bib",
+      ".dat",  // silverplatter ending
+      ".txt",  // windows puts ".txt" extentions and for scifinder
+      ".ris",
+      ".ref",  // refer/endnote format
+      ".fcgi", // default for pubmed
+      ".bibx", // default for BibTeXML
+      ".xml"
+    });
+  }
+
+  public OpenFileFilter(String s) {
+    this(s.split("[, ]+",0));
+  }
+
+  public boolean accept(File file){
+    if (file.isDirectory())
+      return true;
+
+    return accept(file.getName());
+  }
+
+  public boolean accept(String filenm){
+
+    filenm = filenm.toLowerCase();
+    int dotPos = filenm.lastIndexOf(".");
+
+    if (dotPos==-1)
+      return false;
+
+    int dotDotPos = filenm.lastIndexOf(".", dotPos-1); // for dot.dot extensions
+
+    return extSet.contains(filenm.substring(dotPos)) ||
+      (dotDotPos>=0 && extSet.contains(filenm.substring(dotDotPos)));
+  }
+
+  public String getSuffix(String filenm) {
+
+    int dotPos;
+    String suffix;
+    
+    dotPos = filenm.lastIndexOf(".");
+    if (dotPos==-1)
+      return null;
+
+    suffix = filenm.substring(dotPos);
+    if (extSet.contains(suffix))
+      return suffix;
+
+    dotPos = filenm.lastIndexOf(".", dotPos-1); // for dot.dot extensions
+    if (dotPos==-1)
+      return null;
+
+    suffix = filenm.substring(dotPos);
+    if (extSet.contains(suffix))
+      return suffix;
+
+    return null;
+  }
+
+  public String getDescription(){
+    return desc;
+  }
+
+  public boolean accept(File dir, String name) {
+    return accept(new File(dir.getPath()+name));
+  }
+}
diff --git a/src/java/net/sf/jabref/OutputPrinterToNull.java b/src/java/net/sf/jabref/OutputPrinterToNull.java
index e8d3cce..ba60753 100644
--- a/src/java/net/sf/jabref/OutputPrinterToNull.java
+++ b/src/java/net/sf/jabref/OutputPrinterToNull.java
@@ -1,38 +1,38 @@
-/*  Copyright (C) 2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-/**
- * Outputs nothing
- * 
- * Used where really no output is desired
- * 
- */
-public class OutputPrinterToNull implements OutputPrinter {
-
-	@Override
-	public void setStatus(String s) {
-	}
-
-	@Override
-	public void showMessage(Object message, String title, int msgType) {
-	}
-
-	@Override
-	public void showMessage(String string) {
-	}
-
-}
+/*  Copyright (C) 2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+/**
+ * Outputs nothing
+ * 
+ * Used where really no output is desired
+ * 
+ */
+public class OutputPrinterToNull implements OutputPrinter {
+
+	@Override
+	public void setStatus(String s) {
+	}
+
+	@Override
+	public void showMessage(Object message, String title, int msgType) {
+	}
+
+	@Override
+	public void showMessage(String string) {
+	}
+
+}
diff --git a/src/java/net/sf/jabref/PdfPreviewPanel.java b/src/java/net/sf/jabref/PdfPreviewPanel.java
index ffc0b31..76b7843 100644
--- a/src/java/net/sf/jabref/PdfPreviewPanel.java
+++ b/src/java/net/sf/jabref/PdfPreviewPanel.java
@@ -1,157 +1,157 @@
-/*  Copyright (C) 2012 Meltem Meltem Demirköprü, Ahmad Hammoud, Oliver Kopp
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package net.sf.jabref;
-
-import java.awt.Graphics2D;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-
-import javax.swing.ImageIcon;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.gui.FileListTableModel;
-
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.pdmodel.PDPage;
-
-public class PdfPreviewPanel extends JPanel {
-
-	private PDDocument document = null;
-	private JLabel picLabel;
-    private final MetaData metaData;
-	
-	public PdfPreviewPanel(MetaData metaData) {
-		this.metaData = metaData;
-        picLabel = new JLabel();
-		add(picLabel);
-	}
-
-	private void renderPDFFile(File file) {
-		InputStream input;
-		try {
-			input = new FileInputStream(file);
-		} catch (FileNotFoundException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-			return;
-		}
-		
-		try {
-			document = PDDocument.load(input);
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-			return;
-		}
-		@SuppressWarnings("unchecked")
-		List<PDPage> pages = document.getDocumentCatalog().getAllPages();
-
-		PDPage page = pages.get(0);
-		BufferedImage image = null;
-		try {
-			image = page.convertToImage();
-		} catch (Exception e1) {
-		    // silently ignores all rendering exceptions
-		    image = null;
-		}
-		
-		if (image != null) {
-			int width = this.getParent().getWidth();
-			int height = this.getParent().getHeight();
-			BufferedImage resImage = resizeImage(image, width, height, BufferedImage.TYPE_INT_RGB);
-			ImageIcon icon = new ImageIcon(resImage);
-			picLabel.setText(null);
-			picLabel.setIcon(icon);
-		} else {
-		    clearPreview();
-		}
-		
-		try {
-			document.close();
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
-	
-	private BufferedImage resizeImage(BufferedImage originalImage, int width,
-			int height, int type) {
-		int h = originalImage.getHeight();
-		int w = originalImage.getWidth();
-		if ((height == 0) || (width == 0)) {
-			height = h;
-			width = w;
-		} else {
-			float factorH = (float) height / (float) h;
-			float factorW = (float) width / (float) w;
-
-			if (factorH < factorW) {
-				// use factorH, only width has to be changed as height is
-				// already correct
-				width = Math.round(w * factorH);
-			} else {
-				width = Math.round(h * factorW);
-			}
-		}
-		
-		BufferedImage resizedImage = new BufferedImage(width, height, type);
-		Graphics2D g = resizedImage.createGraphics();
-		g.drawImage(originalImage, 0, 0, width, height, null);
-		return resizedImage;
-	}
-	
-	public void updatePanel (BibtexEntry entry) {	
-		if (entry == null) {
-			clearPreview();
-			return;
-		}
-        picLabel.setText("rendering preview...");
-        picLabel.setIcon(null);
-		FileListTableModel tm = new FileListTableModel();
-        tm.setContent(entry.getField("file"));
-        FileListEntry flEntry = null;
-        for (int i=0; i< tm.getRowCount(); i++) {
-            flEntry = tm.getEntry(i);
-            if (flEntry.getType().getName().toLowerCase().equals("pdf")) {
-                break;
-            }
-        }
-		
-		if (flEntry != null) {
-		    File pdfFile = Util.expandFilename(metaData, flEntry.getLink());
-		    if (pdfFile != null) {
-		        renderPDFFile(pdfFile);
-		    } else {
-		        clearPreview();
-		    }
-		} else {
-			clearPreview();
-		}
-	}
-
-	private void clearPreview() {
-	    this.picLabel.setIcon(null);
-	    this.picLabel.setText(Globals.lang("no preview available"));
-	}
-
-}
+/*  Copyright (C) 2012 Meltem Meltem Demirköprü, Ahmad Hammoud, Oliver Kopp
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package net.sf.jabref;
+
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileListTableModel;
+
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+
+public class PdfPreviewPanel extends JPanel {
+
+	private PDDocument document = null;
+	private JLabel picLabel;
+    private final MetaData metaData;
+	
+	public PdfPreviewPanel(MetaData metaData) {
+		this.metaData = metaData;
+        picLabel = new JLabel();
+		add(picLabel);
+	}
+
+	private void renderPDFFile(File file) {
+		InputStream input;
+		try {
+			input = new FileInputStream(file);
+		} catch (FileNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			return;
+		}
+		
+		try {
+			document = PDDocument.load(input);
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			return;
+		}
+		@SuppressWarnings("unchecked")
+		List<PDPage> pages = document.getDocumentCatalog().getAllPages();
+
+		PDPage page = pages.get(0);
+		BufferedImage image = null;
+		try {
+			image = page.convertToImage();
+		} catch (Exception e1) {
+		    // silently ignores all rendering exceptions
+		    image = null;
+		}
+		
+		if (image != null) {
+			int width = this.getParent().getWidth();
+			int height = this.getParent().getHeight();
+			BufferedImage resImage = resizeImage(image, width, height, BufferedImage.TYPE_INT_RGB);
+			ImageIcon icon = new ImageIcon(resImage);
+			picLabel.setText(null);
+			picLabel.setIcon(icon);
+		} else {
+		    clearPreview();
+		}
+		
+		try {
+			document.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	private BufferedImage resizeImage(BufferedImage originalImage, int width,
+			int height, int type) {
+		int h = originalImage.getHeight();
+		int w = originalImage.getWidth();
+		if ((height == 0) || (width == 0)) {
+			height = h;
+			width = w;
+		} else {
+			float factorH = (float) height / (float) h;
+			float factorW = (float) width / (float) w;
+
+			if (factorH < factorW) {
+				// use factorH, only width has to be changed as height is
+				// already correct
+				width = Math.round(w * factorH);
+			} else {
+				width = Math.round(h * factorW);
+			}
+		}
+		
+		BufferedImage resizedImage = new BufferedImage(width, height, type);
+		Graphics2D g = resizedImage.createGraphics();
+		g.drawImage(originalImage, 0, 0, width, height, null);
+		return resizedImage;
+	}
+	
+	public void updatePanel (BibtexEntry entry) {	
+		if (entry == null) {
+			clearPreview();
+			return;
+		}
+        picLabel.setText("rendering preview...");
+        picLabel.setIcon(null);
+		FileListTableModel tm = new FileListTableModel();
+        tm.setContent(entry.getField("file"));
+        FileListEntry flEntry = null;
+        for (int i=0; i< tm.getRowCount(); i++) {
+            flEntry = tm.getEntry(i);
+            if (flEntry.getType().getName().toLowerCase().equals("pdf")) {
+                break;
+            }
+        }
+		
+		if (flEntry != null) {
+		    File pdfFile = Util.expandFilename(metaData, flEntry.getLink());
+		    if (pdfFile != null) {
+		        renderPDFFile(pdfFile);
+		    } else {
+		        clearPreview();
+		    }
+		} else {
+			clearPreview();
+		}
+	}
+
+	private void clearPreview() {
+	    this.picLabel.setIcon(null);
+	    this.picLabel.setText(Globals.lang("no preview available"));
+	}
+
+}
diff --git a/src/java/net/sf/jabref/PreambleEditor.java b/src/java/net/sf/jabref/PreambleEditor.java
index 508463a..a0a9f37 100644
--- a/src/java/net/sf/jabref/PreambleEditor.java
+++ b/src/java/net/sf/jabref/PreambleEditor.java
@@ -1,232 +1,232 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.event.*;
-import java.awt.*;
-import javax.swing.*;
-
-import net.sf.jabref.undo.UndoablePreambleChange;
-
-public class PreambleEditor extends JDialog {
-
-    // A reference to the entry this object works on.
-    BibtexDatabase base;
-    BasePanel panel;
-    JabRefFrame baseFrame;
-    JabRefPreferences prefs;
-
-    // Layout objects.
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-    JLabel lab;
-    Container conPane = getContentPane();
-    //JToolBar tlb = new JToolBar();
-    JPanel pan = new JPanel();
-    FieldEditor ed;
-
-
-    public PreambleEditor(JabRefFrame baseFrame,
-                          BasePanel panel, BibtexDatabase base,
-                          JabRefPreferences prefs) {
-        super(baseFrame);
-        this.baseFrame = baseFrame;
-        this.panel = panel;
-        this.base = base;
-        this.prefs = prefs;
-
-        addWindowListener(new WindowAdapter() {
-            public void windowClosing(WindowEvent e) {
-                closeAction.actionPerformed(null);
-            }
-
-            public void windowOpened(WindowEvent e) {
-                ed.requestFocus();
-            }
-        });
-        setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {
-            protected boolean accept(Component c) {
-                return (super.accept(c) && (c instanceof FieldEditor));
-            }
-        });
-
-        int prefHeight = (int) (GUIGlobals.PE_HEIGHT * GUIGlobals.FORM_HEIGHT[prefs.getInt("entryTypeFormHeightFactor")]);
-        setSize(GUIGlobals.FORM_WIDTH[prefs.getInt("entryTypeFormWidth")], prefHeight);
-
-        pan.setLayout(gbl);
-        con.fill = GridBagConstraints.BOTH;
-        con.weighty = 1;
-        con.insets = new Insets(10, 5, 10, 5);
-
-        String content = base.getPreamble();
-
-        ed = new FieldTextArea(Globals.lang("Preamble"), ((content != null) ? content : ""));
-        //ed.addUndoableEditListener(panel.undoListener);
-        setupJTextComponent((FieldTextArea) ed);
-
-        gbl.setConstraints(ed.getLabel(), con);
-        pan.add(ed.getLabel());
-
-        con.weightx = 1;
-
-        gbl.setConstraints(ed.getPane(), con);
-        pan.add(ed.getPane());
-
-        //tlb.add(closeAction);
-        //conPane.add(tlb, BorderLayout.NORTH);
-        conPane.add(pan, BorderLayout.CENTER);
-        setTitle(Globals.lang("Edit preamble"));
-    }
-
-    private void setupJTextComponent(javax.swing.text.JTextComponent ta) {
-        // Set up key bindings and focus listener for the FieldEditor.
-        ta.getInputMap().put(prefs.getKey("Close preamble editor"), "close");
-        ta.getActionMap().put("close", closeAction);
-        ta.getInputMap().put(prefs.getKey("Preamble editor, store changes"), "store");
-        ta.getActionMap().put("store", storeFieldAction);
-        ta.getInputMap().put(prefs.getKey("Close preamble editor"), "close");
-        ta.getActionMap().put("close", closeAction);
-
-        ta.getInputMap().put(prefs.getKey("Undo"), "undo");
-        ta.getActionMap().put("undo", undoAction);
-        ta.getInputMap().put(prefs.getKey("Redo"), "redo");
-        ta.getActionMap().put("redo", redoAction);
-
-
-        ta.addFocusListener(new FieldListener());
-    }
-
-    public void updatePreamble() {
-        ed.setText(base.getPreamble());
-    }
-
-    class FieldListener extends FocusAdapter {
-        /*
-       * Focus listener that fires the storeFieldAction when a FieldTextArea
-       * loses focus.
-       */
-        public void focusLost(FocusEvent e) {
-            if (!e.isTemporary())
-                storeFieldAction.actionPerformed(new ActionEvent(e.getSource(), 0, ""));
-        }
-
-    }
-
-    StoreFieldAction storeFieldAction = new StoreFieldAction();
-
-    class StoreFieldAction extends AbstractAction {
-        public StoreFieldAction() {
-            super("Store field value");
-            putValue(SHORT_DESCRIPTION, "Store field value");
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            String toSet = null;
-            boolean set;
-            if (ed.getText().length() > 0)
-                toSet = ed.getText();
-            // We check if the field has changed, since we don't want to mark the
-            // base as changed unless we have a real change.
-            if (toSet == null) {
-                if (base.getPreamble() == null)
-                    set = false;
-                else
-                    set = true;
-            } else {
-                if ((base.getPreamble() != null)
-                        && toSet.equals(base.getPreamble()))
-                    set = false;
-                else
-                    set = true;
-            }
-
-            if (set) {
-                panel.undoManager.addEdit(new UndoablePreambleChange
-                        (base, panel, base.getPreamble(), toSet));
-                base.setPreamble(toSet);
-                if ((toSet != null) && (toSet.length() > 0)) {
-                    ed.setLabelColor(GUIGlobals.entryEditorLabelColor);
-                    ed.setValidBackgroundColor();
-                } else {
-                    ed.setLabelColor(GUIGlobals.nullFieldColor);
-                    ed.setValidBackgroundColor();
-                }
-                if (ed.getTextComponent().hasFocus())
-                    ed.setActiveBackgroundColor();
-                panel.markBaseChanged();
-            }
-
-        }
-    }
-
-    UndoAction undoAction = new UndoAction();
-
-    class UndoAction extends AbstractAction {
-        public UndoAction() {
-            super("Undo", GUIGlobals.getImage("undo"));
-            putValue(SHORT_DESCRIPTION, "Undo");
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            try {
-                panel.runCommand("undo");
-            } catch (Throwable ex) {
-            }
-        }
-    }
-
-    RedoAction redoAction = new RedoAction();
-
-    class RedoAction extends AbstractAction {
-        public RedoAction() {
-            super("Undo", GUIGlobals.getImage("redo"));
-            putValue(SHORT_DESCRIPTION, "Redo");
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            try {
-                panel.runCommand("redo");
-            } catch (Throwable ex) {
-            }
-        }
-    }
-
-    // The action concerned with closing the window.
-    CloseAction closeAction = new CloseAction();
-
-    class CloseAction extends AbstractAction {
-        public CloseAction() {
-            super(Globals.lang("Close window"));
-            //, new ImageIcon(GUIGlobals.closeIconFile));
-            //putValue(SHORT_DESCRIPTION, "Close window (Ctrl-Q)");
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            storeFieldAction.actionPerformed(null);
-            panel.preambleEditorClosing();
-            dispose();
-        }
-    }
-
-    public FieldEditor getFieldEditor() {
-        return ed;
-    }
-
-    public void storeCurrentEdit() {
-        storeFieldAction.actionPerformed(null);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.event.*;
+import java.awt.*;
+import javax.swing.*;
+
+import net.sf.jabref.undo.UndoablePreambleChange;
+
+public class PreambleEditor extends JDialog {
+
+    // A reference to the entry this object works on.
+    BibtexDatabase base;
+    BasePanel panel;
+    JabRefFrame baseFrame;
+    JabRefPreferences prefs;
+
+    // Layout objects.
+    GridBagLayout gbl = new GridBagLayout();
+    GridBagConstraints con = new GridBagConstraints();
+    JLabel lab;
+    Container conPane = getContentPane();
+    //JToolBar tlb = new JToolBar();
+    JPanel pan = new JPanel();
+    FieldEditor ed;
+
+
+    public PreambleEditor(JabRefFrame baseFrame,
+                          BasePanel panel, BibtexDatabase base,
+                          JabRefPreferences prefs) {
+        super(baseFrame);
+        this.baseFrame = baseFrame;
+        this.panel = panel;
+        this.base = base;
+        this.prefs = prefs;
+
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                closeAction.actionPerformed(null);
+            }
+
+            public void windowOpened(WindowEvent e) {
+                ed.requestFocus();
+            }
+        });
+        setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {
+            protected boolean accept(Component c) {
+                return (super.accept(c) && (c instanceof FieldEditor));
+            }
+        });
+
+        int prefHeight = (int) (GUIGlobals.PE_HEIGHT * GUIGlobals.FORM_HEIGHT[prefs.getInt("entryTypeFormHeightFactor")]);
+        setSize(GUIGlobals.FORM_WIDTH[prefs.getInt("entryTypeFormWidth")], prefHeight);
+
+        pan.setLayout(gbl);
+        con.fill = GridBagConstraints.BOTH;
+        con.weighty = 1;
+        con.insets = new Insets(10, 5, 10, 5);
+
+        String content = base.getPreamble();
+
+        ed = new FieldTextArea(Globals.lang("Preamble"), ((content != null) ? content : ""));
+        //ed.addUndoableEditListener(panel.undoListener);
+        setupJTextComponent((FieldTextArea) ed);
+
+        gbl.setConstraints(ed.getLabel(), con);
+        pan.add(ed.getLabel());
+
+        con.weightx = 1;
+
+        gbl.setConstraints(ed.getPane(), con);
+        pan.add(ed.getPane());
+
+        //tlb.add(closeAction);
+        //conPane.add(tlb, BorderLayout.NORTH);
+        conPane.add(pan, BorderLayout.CENTER);
+        setTitle(Globals.lang("Edit preamble"));
+    }
+
+    private void setupJTextComponent(javax.swing.text.JTextComponent ta) {
+        // Set up key bindings and focus listener for the FieldEditor.
+        ta.getInputMap().put(prefs.getKey("Close preamble editor"), "close");
+        ta.getActionMap().put("close", closeAction);
+        ta.getInputMap().put(prefs.getKey("Preamble editor, store changes"), "store");
+        ta.getActionMap().put("store", storeFieldAction);
+        ta.getInputMap().put(prefs.getKey("Close preamble editor"), "close");
+        ta.getActionMap().put("close", closeAction);
+
+        ta.getInputMap().put(prefs.getKey("Undo"), "undo");
+        ta.getActionMap().put("undo", undoAction);
+        ta.getInputMap().put(prefs.getKey("Redo"), "redo");
+        ta.getActionMap().put("redo", redoAction);
+
+
+        ta.addFocusListener(new FieldListener());
+    }
+
+    public void updatePreamble() {
+        ed.setText(base.getPreamble());
+    }
+
+    class FieldListener extends FocusAdapter {
+        /*
+       * Focus listener that fires the storeFieldAction when a FieldTextArea
+       * loses focus.
+       */
+        public void focusLost(FocusEvent e) {
+            if (!e.isTemporary())
+                storeFieldAction.actionPerformed(new ActionEvent(e.getSource(), 0, ""));
+        }
+
+    }
+
+    StoreFieldAction storeFieldAction = new StoreFieldAction();
+
+    class StoreFieldAction extends AbstractAction {
+        public StoreFieldAction() {
+            super("Store field value");
+            putValue(SHORT_DESCRIPTION, "Store field value");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            String toSet = null;
+            boolean set;
+            if (ed.getText().length() > 0)
+                toSet = ed.getText();
+            // We check if the field has changed, since we don't want to mark the
+            // base as changed unless we have a real change.
+            if (toSet == null) {
+                if (base.getPreamble() == null)
+                    set = false;
+                else
+                    set = true;
+            } else {
+                if ((base.getPreamble() != null)
+                        && toSet.equals(base.getPreamble()))
+                    set = false;
+                else
+                    set = true;
+            }
+
+            if (set) {
+                panel.undoManager.addEdit(new UndoablePreambleChange
+                        (base, panel, base.getPreamble(), toSet));
+                base.setPreamble(toSet);
+                if ((toSet != null) && (toSet.length() > 0)) {
+                    ed.setLabelColor(GUIGlobals.entryEditorLabelColor);
+                    ed.setValidBackgroundColor();
+                } else {
+                    ed.setLabelColor(GUIGlobals.nullFieldColor);
+                    ed.setValidBackgroundColor();
+                }
+                if (ed.getTextComponent().hasFocus())
+                    ed.setActiveBackgroundColor();
+                panel.markBaseChanged();
+            }
+
+        }
+    }
+
+    UndoAction undoAction = new UndoAction();
+
+    class UndoAction extends AbstractAction {
+        public UndoAction() {
+            super("Undo", GUIGlobals.getImage("undo"));
+            putValue(SHORT_DESCRIPTION, "Undo");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            try {
+                panel.runCommand("undo");
+            } catch (Throwable ex) {
+            }
+        }
+    }
+
+    RedoAction redoAction = new RedoAction();
+
+    class RedoAction extends AbstractAction {
+        public RedoAction() {
+            super("Undo", GUIGlobals.getImage("redo"));
+            putValue(SHORT_DESCRIPTION, "Redo");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            try {
+                panel.runCommand("redo");
+            } catch (Throwable ex) {
+            }
+        }
+    }
+
+    // The action concerned with closing the window.
+    CloseAction closeAction = new CloseAction();
+
+    class CloseAction extends AbstractAction {
+        public CloseAction() {
+            super(Globals.lang("Close window"));
+            //, new ImageIcon(GUIGlobals.closeIconFile));
+            //putValue(SHORT_DESCRIPTION, "Close window (Ctrl-Q)");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            storeFieldAction.actionPerformed(null);
+            panel.preambleEditorClosing();
+            dispose();
+        }
+    }
+
+    public FieldEditor getFieldEditor() {
+        return ed;
+    }
+
+    public void storeCurrentEdit() {
+        storeFieldAction.actionPerformed(null);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/PrefsDialog3.java b/src/java/net/sf/jabref/PrefsDialog3.java
index 5c5c14c..2c43be4 100644
--- a/src/java/net/sf/jabref/PrefsDialog3.java
+++ b/src/java/net/sf/jabref/PrefsDialog3.java
@@ -1,282 +1,282 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.CardLayout;
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import javax.swing.*;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-
-import net.sf.jabref.export.ExportFormats;
-import net.sf.jabref.groups.GroupsPrefsTab;
-import net.sf.jabref.gui.MainTable;
-import net.sf.jabref.gui.FileDialogs;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-/**
- * Preferences dialog. Contains a TabbedPane, and tabs will be defined in
- * separate classes. Tabs MUST implement the PrefsTab interface, since this
- * dialog will call the storeSettings() method of all tabs when the user presses
- * ok.
- * 
- * With this design, it should be very easy to add new tabs later.
- * 
- */
-public class PrefsDialog3 extends JDialog {
-
-	JPanel main;
-
-	JabRefFrame frame;
-
-	public PrefsDialog3(JabRefFrame parent) {
-		super(parent, Globals.lang("JabRef preferences"), false);
-		final JabRefPreferences prefs = JabRefPreferences.getInstance();
-		frame = parent;
-
-		final JList chooser;
-
-		JButton importPrefs = new JButton(Globals.lang("Import preferences"));
-		JButton exportPrefs = new JButton(Globals.lang("Export preferences"));
-
-		main = new JPanel();
-		JPanel upper = new JPanel();
-		JPanel lower = new JPanel();
-
-		getContentPane().setLayout(new BorderLayout());
-		getContentPane().add(upper, BorderLayout.CENTER);
-		getContentPane().add(lower, BorderLayout.SOUTH);
-
-		final CardLayout cardLayout = new CardLayout();
-		main.setLayout(cardLayout);
-
-		// ----------------------------------------------------------------
-		// Add tabs to tabbed here. Remember, tabs must implement PrefsTab.
-		// ----------------------------------------------------------------
-		ArrayList<PrefsTab> tabs = new ArrayList<PrefsTab>();
-		tabs.add(new GeneralTab(frame, prefs));
-        tabs.add(new FileTab(frame, prefs));
-        tabs.add(new EntryEditorPrefsTab(frame, prefs));
-        tabs.add(new GroupsPrefsTab(prefs));
-		tabs.add(new AppearancePrefsTab(prefs));
-		tabs.add(new ExternalTab(frame, this, prefs, parent.helpDiag));
-		tabs.add(new TablePrefsTab(prefs, parent));
-		tabs.add(new TableColumnsTab(prefs, parent));
-		tabs.add(new TabLabelPattern(prefs, parent.helpDiag));
-		tabs.add(new PreviewPrefsTab(prefs));
-		tabs.add(new NameFormatterTab(parent.helpDiag));
-		tabs.add(new ImportSettingsTab());
-		tabs.add(new XmpPrefsTab());
-        tabs.add(new AdvancedTab(prefs, parent.helpDiag));
-		
-		Iterator<PrefsTab> it = tabs.iterator();
-		String[] names = new String[tabs.size()];
-		int i = 0;
-        //ArrayList<Component> comps = new ArrayList<Component>();
-        while (it.hasNext()) {
-			PrefsTab tab = it.next();
-			names[i++] = tab.getTabName(); 
-			main.add((Component) tab, tab.getTabName());
-        }
-
-		upper.setBorder(BorderFactory.createEtchedBorder());
-
-		chooser = new JList(names);
-		chooser.setBorder(BorderFactory.createEtchedBorder());
-		// Set a prototype value to control the width of the list:
-		chooser.setPrototypeCellValue("This should be wide enough");
-		chooser.setSelectedIndex(0);
-		chooser.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-
-		// Add the selection listener that will show the correct panel when
-		// selection changes:
-		chooser.addListSelectionListener(new ListSelectionListener() {
-			public void valueChanged(ListSelectionEvent e) {
-				if (e.getValueIsAdjusting())
-					return;
-				String o = (String) chooser.getSelectedValue();
-				cardLayout.show(main, o);
-			}
-		});
-
-		JPanel one = new JPanel(), two = new JPanel();
-		one.setLayout(new BorderLayout());
-		two.setLayout(new BorderLayout());
-		one.add(chooser, BorderLayout.CENTER);
-		one.add(importPrefs, BorderLayout.SOUTH);
-		two.add(one, BorderLayout.CENTER);
-		two.add(exportPrefs, BorderLayout.SOUTH);
-		upper.setLayout(new BorderLayout());
-		upper.add(two, BorderLayout.WEST);
-		upper.add(main, BorderLayout.CENTER);
-
-		JButton ok = new JButton(Globals.lang("Ok")), cancel = new JButton(Globals.lang("Cancel"));
-		ok.addActionListener(new OkAction());
-		CancelAction cancelAction = new CancelAction();
-		cancel.addActionListener(cancelAction);
-		lower.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
-		ButtonBarBuilder bb = new ButtonBarBuilder(lower);
-		bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-		//bb.addButton(ok);
-		//bb.addButton(cancel);
-		bb.addGlue();
-		// lower.add(ok);
-		// lower.add(cancel);
-
-		// Key bindings:
-		Util.bindCloseDialogKeyToCancelAction(this.getRootPane(), cancelAction);
-
-		// Import and export actions:
-		exportPrefs.setToolTipText(Globals.lang("Export preferences to file"));
-		importPrefs.setToolTipText(Globals.lang("Import preferences from file"));
-		exportPrefs.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				String filename = FileDialogs.getNewFile(frame, new File(System
-					.getProperty("user.home")), ".xml", JFileChooser.SAVE_DIALOG, false);
-				if (filename == null)
-					return;
-				File file = new File(filename);
-				if (!file.exists()
-					|| (JOptionPane.showConfirmDialog(PrefsDialog3.this, "'" + file.getName()
-						+ "' " + Globals.lang("exists. Overwrite file?"), Globals
-						.lang("Export preferences"), JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION)) {
-
-					try {
-						prefs.exportPreferences(filename);
-					} catch (IOException ex) {
-						JOptionPane.showMessageDialog(PrefsDialog3.this, Globals
-							.lang("Could not export preferences")
-							+ ": " + ex.getMessage(), Globals.lang("Export preferences"),
-							JOptionPane.ERROR_MESSAGE);
-						// ex.printStackTrace();
-					}
-				}
-
-			}
-		});
-
-		importPrefs.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				String filename = FileDialogs.getNewFile(frame, new File(System
-					.getProperty("user.home")), ".xml", JFileChooser.OPEN_DIALOG, false);
-				if (filename == null)
-					return;
-
-				try {
-					prefs.importPreferences(filename);
-					setValues();
-					BibtexEntryType.loadCustomEntryTypes(prefs);
-                    ExportFormats.initAllExports();
-					frame.removeCachedEntryEditors();
-                    Globals.prefs.updateEntryEditorTabList();
-                } catch (IOException ex) {
-					JOptionPane.showMessageDialog(PrefsDialog3.this, Globals
-						.lang("Could not import preferences")
-						+ ": " + ex.getMessage(), Globals.lang("Import preferences"),
-						JOptionPane.ERROR_MESSAGE);
-					// ex.printStackTrace();
-				}
-			}
-
-		});
-
-		setValues();
-
-		pack(); // setSize(440, 500);
-
-        /** Look through component sizes to find which tab is to blame
-         *  when the dialog grows too large:
-        for (Component co : comps) {
-            System.out.println(co.getPreferredSize());
-        }*/
-    }
-
-	class OkAction extends AbstractAction {
-		public OkAction() {
-			super("Ok");
-		}
-
-		public void actionPerformed(ActionEvent e) {
-
-			AbstractWorker worker = new AbstractWorker() {
-				boolean ready = true;
-
-				public void run() {
-					// First check that all tabs are ready to close:
-					int count = main.getComponentCount();
-					Component[] comps = main.getComponents();
-					for (int i = 0; i < count; i++) {
-						if (!((PrefsTab) comps[i]).readyToClose()) {
-							ready = false;
-							return; // If not, break off.
-						}
-					}
-					// Then store settings and close:
-					for (int i = 0; i < count; i++) {
-						((PrefsTab) comps[i]).storeSettings();
-					}
-					Globals.prefs.flush();
-				}
-
-				public void update() {
-					if (!ready)
-						return;
-					setVisible(false);
-					MainTable.updateRenderers();
-                    GUIGlobals.updateEntryEditorColors();
-					frame.setupAllTables();
-					frame.groupSelector.revalidateGroups(); // icons may have
-					// changed
-					frame.output(Globals.lang("Preferences recorded."));
-				}
-			};
-			worker.getWorker().run();
-			worker.getCallBack().update();
-
-		}
-	}
-
-	public void setValues() {
-		// Update all field values in the tabs:
-		int count = main.getComponentCount();
-		Component[] comps = main.getComponents();
-		for (int i = 0; i < count; i++) {
-			((PrefsTab) comps[i]).setValues();
-		}
-	}
-
-	class CancelAction extends AbstractAction {
-		public CancelAction() {
-			super("Cancel");
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			setVisible(false);
-		}
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.*;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import net.sf.jabref.export.ExportFormats;
+import net.sf.jabref.groups.GroupsPrefsTab;
+import net.sf.jabref.gui.MainTable;
+import net.sf.jabref.gui.FileDialogs;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+/**
+ * Preferences dialog. Contains a TabbedPane, and tabs will be defined in
+ * separate classes. Tabs MUST implement the PrefsTab interface, since this
+ * dialog will call the storeSettings() method of all tabs when the user presses
+ * ok.
+ * 
+ * With this design, it should be very easy to add new tabs later.
+ * 
+ */
+public class PrefsDialog3 extends JDialog {
+
+	JPanel main;
+
+	JabRefFrame frame;
+
+	public PrefsDialog3(JabRefFrame parent) {
+		super(parent, Globals.lang("JabRef preferences"), false);
+		final JabRefPreferences prefs = JabRefPreferences.getInstance();
+		frame = parent;
+
+		final JList chooser;
+
+		JButton importPrefs = new JButton(Globals.lang("Import preferences"));
+		JButton exportPrefs = new JButton(Globals.lang("Export preferences"));
+
+		main = new JPanel();
+		JPanel upper = new JPanel();
+		JPanel lower = new JPanel();
+
+		getContentPane().setLayout(new BorderLayout());
+		getContentPane().add(upper, BorderLayout.CENTER);
+		getContentPane().add(lower, BorderLayout.SOUTH);
+
+		final CardLayout cardLayout = new CardLayout();
+		main.setLayout(cardLayout);
+
+		// ----------------------------------------------------------------
+		// Add tabs to tabbed here. Remember, tabs must implement PrefsTab.
+		// ----------------------------------------------------------------
+		ArrayList<PrefsTab> tabs = new ArrayList<PrefsTab>();
+		tabs.add(new GeneralTab(frame, prefs));
+        tabs.add(new FileTab(frame, prefs));
+        tabs.add(new EntryEditorPrefsTab(frame, prefs));
+        tabs.add(new GroupsPrefsTab(prefs));
+		tabs.add(new AppearancePrefsTab(prefs));
+		tabs.add(new ExternalTab(frame, this, prefs, parent.helpDiag));
+		tabs.add(new TablePrefsTab(prefs, parent));
+		tabs.add(new TableColumnsTab(prefs, parent));
+		tabs.add(new TabLabelPattern(prefs, parent.helpDiag));
+		tabs.add(new PreviewPrefsTab(prefs));
+		tabs.add(new NameFormatterTab(parent.helpDiag));
+		tabs.add(new ImportSettingsTab());
+		tabs.add(new XmpPrefsTab());
+        tabs.add(new AdvancedTab(prefs, parent.helpDiag));
+		
+		Iterator<PrefsTab> it = tabs.iterator();
+		String[] names = new String[tabs.size()];
+		int i = 0;
+        //ArrayList<Component> comps = new ArrayList<Component>();
+        while (it.hasNext()) {
+			PrefsTab tab = it.next();
+			names[i++] = tab.getTabName(); 
+			main.add((Component) tab, tab.getTabName());
+        }
+
+		upper.setBorder(BorderFactory.createEtchedBorder());
+
+		chooser = new JList(names);
+		chooser.setBorder(BorderFactory.createEtchedBorder());
+		// Set a prototype value to control the width of the list:
+		chooser.setPrototypeCellValue("This should be wide enough");
+		chooser.setSelectedIndex(0);
+		chooser.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+		// Add the selection listener that will show the correct panel when
+		// selection changes:
+		chooser.addListSelectionListener(new ListSelectionListener() {
+			public void valueChanged(ListSelectionEvent e) {
+				if (e.getValueIsAdjusting())
+					return;
+				String o = (String) chooser.getSelectedValue();
+				cardLayout.show(main, o);
+			}
+		});
+
+		JPanel one = new JPanel(), two = new JPanel();
+		one.setLayout(new BorderLayout());
+		two.setLayout(new BorderLayout());
+		one.add(chooser, BorderLayout.CENTER);
+		one.add(importPrefs, BorderLayout.SOUTH);
+		two.add(one, BorderLayout.CENTER);
+		two.add(exportPrefs, BorderLayout.SOUTH);
+		upper.setLayout(new BorderLayout());
+		upper.add(two, BorderLayout.WEST);
+		upper.add(main, BorderLayout.CENTER);
+
+		JButton ok = new JButton(Globals.lang("Ok")), cancel = new JButton(Globals.lang("Cancel"));
+		ok.addActionListener(new OkAction());
+		CancelAction cancelAction = new CancelAction();
+		cancel.addActionListener(cancelAction);
+		lower.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+		ButtonBarBuilder bb = new ButtonBarBuilder(lower);
+		bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+		//bb.addButton(ok);
+		//bb.addButton(cancel);
+		bb.addGlue();
+		// lower.add(ok);
+		// lower.add(cancel);
+
+		// Key bindings:
+		Util.bindCloseDialogKeyToCancelAction(this.getRootPane(), cancelAction);
+
+		// Import and export actions:
+		exportPrefs.setToolTipText(Globals.lang("Export preferences to file"));
+		importPrefs.setToolTipText(Globals.lang("Import preferences from file"));
+		exportPrefs.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				String filename = FileDialogs.getNewFile(frame, new File(System
+					.getProperty("user.home")), ".xml", JFileChooser.SAVE_DIALOG, false);
+				if (filename == null)
+					return;
+				File file = new File(filename);
+				if (!file.exists()
+					|| (JOptionPane.showConfirmDialog(PrefsDialog3.this, "'" + file.getName()
+						+ "' " + Globals.lang("exists. Overwrite file?"), Globals
+						.lang("Export preferences"), JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION)) {
+
+					try {
+						prefs.exportPreferences(filename);
+					} catch (IOException ex) {
+						JOptionPane.showMessageDialog(PrefsDialog3.this, Globals
+							.lang("Could not export preferences")
+							+ ": " + ex.getMessage(), Globals.lang("Export preferences"),
+							JOptionPane.ERROR_MESSAGE);
+						// ex.printStackTrace();
+					}
+				}
+
+			}
+		});
+
+		importPrefs.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				String filename = FileDialogs.getNewFile(frame, new File(System
+					.getProperty("user.home")), ".xml", JFileChooser.OPEN_DIALOG, false);
+				if (filename == null)
+					return;
+
+				try {
+					prefs.importPreferences(filename);
+					setValues();
+					BibtexEntryType.loadCustomEntryTypes(prefs);
+                    ExportFormats.initAllExports();
+					frame.removeCachedEntryEditors();
+                    Globals.prefs.updateEntryEditorTabList();
+                } catch (IOException ex) {
+					JOptionPane.showMessageDialog(PrefsDialog3.this, Globals
+						.lang("Could not import preferences")
+						+ ": " + ex.getMessage(), Globals.lang("Import preferences"),
+						JOptionPane.ERROR_MESSAGE);
+					// ex.printStackTrace();
+				}
+			}
+
+		});
+
+		setValues();
+
+		pack(); // setSize(440, 500);
+
+        /** Look through component sizes to find which tab is to blame
+         *  when the dialog grows too large:
+        for (Component co : comps) {
+            System.out.println(co.getPreferredSize());
+        }*/
+    }
+
+	class OkAction extends AbstractAction {
+		public OkAction() {
+			super("Ok");
+		}
+
+		public void actionPerformed(ActionEvent e) {
+
+			AbstractWorker worker = new AbstractWorker() {
+				boolean ready = true;
+
+				public void run() {
+					// First check that all tabs are ready to close:
+					int count = main.getComponentCount();
+					Component[] comps = main.getComponents();
+					for (int i = 0; i < count; i++) {
+						if (!((PrefsTab) comps[i]).readyToClose()) {
+							ready = false;
+							return; // If not, break off.
+						}
+					}
+					// Then store settings and close:
+					for (int i = 0; i < count; i++) {
+						((PrefsTab) comps[i]).storeSettings();
+					}
+					Globals.prefs.flush();
+				}
+
+				public void update() {
+					if (!ready)
+						return;
+					setVisible(false);
+					MainTable.updateRenderers();
+                    GUIGlobals.updateEntryEditorColors();
+					frame.setupAllTables();
+					frame.groupSelector.revalidateGroups(); // icons may have
+					// changed
+					frame.output(Globals.lang("Preferences recorded."));
+				}
+			};
+			worker.getWorker().run();
+			worker.getCallBack().update();
+
+		}
+	}
+
+	public void setValues() {
+		// Update all field values in the tabs:
+		int count = main.getComponentCount();
+		Component[] comps = main.getComponents();
+		for (int i = 0; i < count; i++) {
+			((PrefsTab) comps[i]).setValues();
+		}
+	}
+
+	class CancelAction extends AbstractAction {
+		public CancelAction() {
+			super("Cancel");
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			setVisible(false);
+		}
+	}
+
+}
diff --git a/src/java/net/sf/jabref/PrefsTab.java b/src/java/net/sf/jabref/PrefsTab.java
index 0a87bff..1440110 100644
--- a/src/java/net/sf/jabref/PrefsTab.java
+++ b/src/java/net/sf/jabref/PrefsTab.java
@@ -1,62 +1,62 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-/**
- * A prefsTab is a component displayed in the PreferenceDialog.
- * 
- * It needs to extend from Component.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- *
- */
-public interface PrefsTab {
-
-    /**
-     * This method is called when the dialog is opened, or if it is made
-     * visible after being hidden. The tab should update all its values.
-     *
-     * This is the ONLY PLACE to set values for the fields in the tab. It
-     * is ILLEGAL to set values only at construction time, because the dialog
-     * will be reused and updated.
-     */
-    public void setValues();
-
-    /**
-     * This method is called when the user presses OK in the
-     * Preferences dialog. Implementing classes must make sure all
-     * settings presented get stored in JabRefPreferences.
-     *
-     */
-    public void storeSettings();
-
-    /**
-     * This method is called before the {@ling storeSettings()} method, 
-     * to check if there are illegal settings in the tab, or if is ready
-     * to be closed.
-     * If the tab is *not* ready, it should display a message to the user 
-     * informing about the illegal setting.
-     */
-    public boolean readyToClose();
-
-    /**
-     * Should return the localized identifier to use for the tab.
-     * 
-     * @return Identifier for the tab (for instance "General", "Appearance" or "External Files").
-     */
-    public String getTabName();  
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+/**
+ * A prefsTab is a component displayed in the PreferenceDialog.
+ * 
+ * It needs to extend from Component.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ *
+ */
+public interface PrefsTab {
+
+    /**
+     * This method is called when the dialog is opened, or if it is made
+     * visible after being hidden. The tab should update all its values.
+     *
+     * This is the ONLY PLACE to set values for the fields in the tab. It
+     * is ILLEGAL to set values only at construction time, because the dialog
+     * will be reused and updated.
+     */
+    public void setValues();
+
+    /**
+     * This method is called when the user presses OK in the
+     * Preferences dialog. Implementing classes must make sure all
+     * settings presented get stored in JabRefPreferences.
+     *
+     */
+    public void storeSettings();
+
+    /**
+     * This method is called before the {@ling storeSettings()} method, 
+     * to check if there are illegal settings in the tab, or if is ready
+     * to be closed.
+     * If the tab is *not* ready, it should display a message to the user 
+     * informing about the illegal setting.
+     */
+    public boolean readyToClose();
+
+    /**
+     * Should return the localized identifier to use for the tab.
+     * 
+     * @return Identifier for the tab (for instance "General", "Appearance" or "External Files").
+     */
+    public String getTabName();  
+}
diff --git a/src/java/net/sf/jabref/PreviewPanel.java b/src/java/net/sf/jabref/PreviewPanel.java
index 7678c23..cd97d46 100644
--- a/src/java/net/sf/jabref/PreviewPanel.java
+++ b/src/java/net/sf/jabref/PreviewPanel.java
@@ -1,432 +1,432 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.print.PrinterException;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyVetoException;
-import java.beans.VetoableChangeListener;
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.ArrayList;
-
-import javax.print.attribute.HashPrintRequestAttributeSet;
-import javax.print.attribute.PrintRequestAttributeSet;
-import javax.print.attribute.standard.JobName;
-import javax.swing.*;
-import javax.swing.event.HyperlinkEvent;
-import javax.swing.event.HyperlinkListener;
-
-import net.sf.jabref.export.layout.Layout;
-import net.sf.jabref.export.layout.LayoutHelper;
-import net.sf.jabref.export.ExportFormats;
-import net.sf.jabref.gui.PreviewPanelTransferHandler;
-
-/**
- * Displays an BibtexEntry using the given layout format.
- */
-public class PreviewPanel extends JPanel implements VetoableChangeListener, SearchTextListener, EntryContainer {
-
-	/**
-	 * The bibtex entry currently shown
-	 */
-	BibtexEntry entry;
-
-	MetaData metaData;
-
-	/**
-	 * If a database is set, the preview will attempt to resolve strings in the
-	 * previewed entry using that database.
-	 */
-	BibtexDatabase database;
-
-	Layout layout;
-
-	String layoutFile;
-
-	public JEditorPane previewPane;
-
-	JScrollPane scrollPane;
-	PdfPreviewPanel pdfPreviewPanel;
-
-	BasePanel panel;
-
-    /**
-     * @param database
-     *            (may be null) Optionally used to resolve strings.
-     * @param entry
-     *            (may be null) If given this entry is shown otherwise you have
-     *            to call setEntry to make something visible.
-     * @param panel
-     *            (may be null) If not given no toolbar is shown on the right
-     *            hand side.
-     * @param metaData
-     *            (must be given) Used for resolving pdf directories for links.
-     * @param layoutFile
-     *            (must be given) Used for layout
-     */
-    public PreviewPanel(BibtexDatabase database, BibtexEntry entry,
-        BasePanel panel, MetaData metaData, String layoutFile) {
-        this(database, entry, panel, metaData, layoutFile, false);
-    }
-
-    /**
-	 * @param database
-	 *            (may be null) Optionally used to resolve strings.
-	 * @param entry
-	 *            (may be null) If given this entry is shown otherwise you have
-	 *            to call setEntry to make something visible.
-	 * @param panel
-	 *            (may be null) If not given no toolbar is shown on the right
-	 *            hand side.
-	 * @param metaData
-	 *            (must be given) Used for resolving pdf directories for links.
-	 * @param layoutFile
-	 *            (must be given) Used for layout
-	 * @param withPDFPreview if true, a PDF preview is included in the PreviewPanel
-	 */
-	public PreviewPanel(BibtexDatabase database, BibtexEntry entry,
-		BasePanel panel, MetaData metaData, String layoutFile, boolean withPDFPreview) {
-		this(panel, metaData, layoutFile, withPDFPreview);
-		this.database = database;
-		setEntry(entry);
-	}
-	
-    /**
-     * 
-     * @param panel
-     *            (may be null) If not given no toolbar is shown on the right
-     *            hand side.
-     * @param metaData
-     *            (must be given) Used for resolving pdf directories for links.
-     * @param layoutFile
-     *            (must be given) Used for layout
-     */
-    public PreviewPanel(BasePanel panel, MetaData metaData, String layoutFile) {
-        this(panel, metaData, layoutFile, false);
-    }
-
-    /**
-	 * 
-	 * @param panel
-	 *            (may be null) If not given no toolbar is shown on the right
-	 *            hand side.
-	 * @param metaData
-	 *            (must be given) Used for resolving pdf directories for links.
-	 * @param layoutFile
-	 *            (must be given) Used for layout
-     * @param withPDFPreview if true, a PDF preview is included in the PreviewPanel. 
-     * The user can override this setting by setting the config setting JabRefPreferences.PDF_PREVIEW to false.
-     */
-	private PreviewPanel(BasePanel panel, MetaData metaData, String layoutFile, boolean withPDFPreview) {
-		super(new BorderLayout(), true);
-
-		withPDFPreview = withPDFPreview && JabRefPreferences.getInstance().getBoolean(JabRefPreferences.PDF_PREVIEW);
-		
-		this.panel = panel;
-		this.metaData = metaData;
-		this.layoutFile = layoutFile;
-		this.previewPane = createPreviewPane();
-		if (withPDFPreview) {
-			this.pdfPreviewPanel = new PdfPreviewPanel(metaData);
-		} else {
-			this.pdfPreviewPanel = null;
-		}
-		if (panel != null) {
-			// dropped files handler only created for main window
-			// not for Windows as like the search results window
-			this.previewPane.setTransferHandler(new PreviewPanelTransferHandler(panel.frame(), this, this.previewPane.getTransferHandler()));
-		}
-
-		// Set up scroll pane for preview pane
-		scrollPane = new JScrollPane(previewPane,
-			JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-			JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-		scrollPane.setBorder(null);
-		
-		/*
-		 * If we have been given a panel and the preference option
-		 * previewPrintButton is set, show the tool bar
-		 */
-		if (panel != null
-			&& JabRefPreferences.getInstance().getBoolean("previewPrintButton")) {
-			add(createToolBar(), BorderLayout.LINE_START);
-		}
-
-		if (withPDFPreview) {
-			JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
-					scrollPane, pdfPreviewPanel);
-			splitPane.setOneTouchExpandable(true);
-			
-			// int oneThird = panel.getWidth()/3;
-			int oneThird = 400; // arbitrarily set as panel.getWidth() always
-								// returns 0 at this point
-			splitPane.setDividerLocation(oneThird*2);
-
-			// Provide minimum sizes for the two components in the split pane
-//			Dimension minimumSize = new Dimension(oneThird * 2, 50);
-//			scrollPane.setMinimumSize(minimumSize);
-//			minimumSize = new Dimension(oneThird, 50);
-//			pdfScrollPane.setMinimumSize(minimumSize);
-			add(splitPane);
-		} else {
-			add(scrollPane, BorderLayout.CENTER);
-		}
-
-
-
-	}
-	
-	class PrintAction extends AbstractAction {
-
-		public PrintAction() {
-			super(Globals.lang("Print Preview"), GUIGlobals.getImage("psSmall"));
-			putValue(SHORT_DESCRIPTION, Globals.lang("Print Preview"));
-		}
-
-		//DocumentPrinter printerService;
-
-		public void actionPerformed(ActionEvent arg0) {
-
-			// Background this, as it takes a while.
-			new Thread() {
-				public void run() {
-					try {
-						PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
-						pras.add(new JobName(entry.getCiteKey(), null));
-						previewPane.print(null, null, true, null, pras, false);
-
-					} catch (PrinterException e) {
-
-						// Inform the user... we don't know what to do.
-						JOptionPane.showMessageDialog(PreviewPanel.this,
-							Globals.lang("Could not print preview") + ".\n"
-								+ e.getMessage(), Globals
-								.lang("Printing Entry Preview"),
-							JOptionPane.ERROR_MESSAGE);
-					}
-				}
-			}.start();
-		}
-	}
-
-	Action printAction;
-
-	public Action getPrintAction() {
-		if (printAction == null)
-			printAction = new PrintAction();
-		return printAction;
-	}
-
-	class CloseAction extends AbstractAction {
-		public CloseAction() {
-			super(Globals.lang("Close window"), GUIGlobals.getImage("close"));
-			putValue(SHORT_DESCRIPTION, Globals.lang("Close window"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			panel.hideBottomComponent();
-		}
-	}
-
-	Action closeAction;
-
-	private ArrayList<String> wordsToHighlight = null;
-
-	public Action getCloseAction() {
-		if (closeAction == null)
-			closeAction = new CloseAction();
-		return closeAction;
-	}
-
-	JPopupMenu createPopupMenu() {
-		JPopupMenu menu = new JPopupMenu();
-		menu.add(getPrintAction());
-		if (panel != null) {
-			menu.add(panel.frame.switchPreview);
-		}
-		return menu;
-	}
-
-	JToolBar createToolBar() {
-
-		JToolBar tlb = new JToolBar(JToolBar.VERTICAL);
-		JabRefPreferences prefs = JabRefPreferences.getInstance();
-		Action printAction = getPrintAction();
-		Action closeAction = getCloseAction();
-
-		tlb.setMargin(new Insets(0, 0, 0, 2));
-
-		// The toolbar carries all the key bindings that are valid for the whole
-		// window.
-		ActionMap am = tlb.getActionMap();
-		InputMap im = tlb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-
-		im.put(prefs.getKey("Close entry preview"), "close");
-		am.put("close", closeAction);
-
-		im.put(prefs.getKey("Print entry preview"), "print");
-		am.put("print", printAction);
-
-		tlb.setFloatable(false);
-
-		// Add actions (and thus buttons)
-		tlb.add(closeAction);
-
-		tlb.addSeparator();
-
-		tlb.add(printAction);
-
-		Component[] comps = tlb.getComponents();
-
-		for (int i = 0; i < comps.length; i++)
-			((JComponent) comps[i]).setOpaque(false);
-
-		return tlb;
-	}
-
-	JEditorPane createPreviewPane() {
-		JEditorPane previewPane = new JEditorPane() {
-			public Dimension getPreferredScrollableViewportSize() {
-				return getPreferredSize();
-			}
-
-		};
-		previewPane.setMargin(new Insets(3, 3, 3, 3));
-
-		previewPane.setComponentPopupMenu(createPopupMenu());
-		
-		previewPane.setEditable(false);
-		previewPane.setDragEnabled(true); // this has an effect only, if no custom transfer handler is registered. We keep the statement if the transfer handler is removed.
-		previewPane.setContentType("text/html");
-		previewPane.addHyperlinkListener(new HyperlinkListener() {
-			public void hyperlinkUpdate(HyperlinkEvent hyperlinkEvent) {
-				if (hyperlinkEvent.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
-					try {
-						String address = hyperlinkEvent.getURL().toString();
-						Util.openExternalViewer(PreviewPanel.this.metaData,
-							address, "url");
-					} catch (IOException e) {
-						e.printStackTrace();
-					}
-				}
-			}
-		});
-		
-		return previewPane;
-	}
-
-	public void setDatabase(BibtexDatabase db) {
-		database = db;
-	}
-
-    public void setMetaData(MetaData metaData) {
-        this.metaData = metaData;
-    }
-
-    public void readLayout(String layoutFormat) throws Exception {
-		layoutFile = layoutFormat;
-		readLayout();
-	}
-
-	public void readLayout() throws Exception {
-		StringReader sr = new StringReader(layoutFile.replaceAll("__NEWLINE__",
-			"\n"));
-		layout = new LayoutHelper(sr)
-			.getLayoutFromText(Globals.FORMATTER_PACKAGE);
-	}
-
-    public void setLayout(Layout layout) {
-        this.layout = layout;
-    }
-
-    public void setEntry(BibtexEntry newEntry) {
-		if (newEntry != entry) {
-			if (entry != null)
-				entry.removePropertyChangeListener(this);
-			newEntry.addPropertyChangeListener(this);
-		}
-		entry = newEntry;
-		try {
-			readLayout();
-			update();
-		} catch (Exception ex) {
-			ex.printStackTrace();
-		}
-	}
-    
-    public BibtexEntry getEntry() {
-    	return this.entry;
-    }
-
-	public void update() {
-
-		StringBuffer sb = new StringBuffer();
-        ExportFormats.entryNumber = 1; // Set entry number in case that is included in the preview layout.
-		if (entry != null) {
-			sb.append(layout.doLayout(entry, database, wordsToHighlight));
-		}
-		previewPane.setText(sb.toString());
-		previewPane.revalidate();
-
-		// Scroll to top:
-		final JScrollBar bar = scrollPane.getVerticalScrollBar();
-		SwingUtilities.invokeLater(new Runnable() {
-			public void run() {
-				bar.setValue(0);
-			}
-		});
-		
-		// update pdf preview
-		if (pdfPreviewPanel != null) {
-			pdfPreviewPanel.updatePanel(entry);
-		}
-	}
-
-
-	public boolean hasEntry() {
-		return (entry != null);
-	}
-
-	/**
-	 * The PreviewPanel has registered itself as an event listener with the
-	 * currently displayed BibtexEntry. If the entry changes, an event is
-	 * received here, and we can update the preview immediately.
-	 */
-	public void vetoableChange(PropertyChangeEvent evt)
-		throws PropertyVetoException {
-		// TODO updating here is not really necessary isn't it?
-		// Only if we are visible.
-		update();
-	}
-
-	@Override
-	public void searchText(ArrayList<String> words) {
-		if (Globals.prefs.getBoolean("highLightWords")) {
-			this.wordsToHighlight = words;
-			update();
-		} else {
-			if (this.wordsToHighlight != null) {
-				// setting of "highLightWords" seems to have changed.
-				// clear all highlights and remember the clearing (by wordsToHighlight = null)
-				this.wordsToHighlight = null;
-				update();
-			}
-		}
-	}
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.print.PrinterException;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyVetoException;
+import java.beans.VetoableChangeListener;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+
+import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.print.attribute.PrintRequestAttributeSet;
+import javax.print.attribute.standard.JobName;
+import javax.swing.*;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
+
+import net.sf.jabref.export.layout.Layout;
+import net.sf.jabref.export.layout.LayoutHelper;
+import net.sf.jabref.export.ExportFormats;
+import net.sf.jabref.gui.PreviewPanelTransferHandler;
+
+/**
+ * Displays an BibtexEntry using the given layout format.
+ */
+public class PreviewPanel extends JPanel implements VetoableChangeListener, SearchTextListener, EntryContainer {
+
+	/**
+	 * The bibtex entry currently shown
+	 */
+	BibtexEntry entry;
+
+	MetaData metaData;
+
+	/**
+	 * If a database is set, the preview will attempt to resolve strings in the
+	 * previewed entry using that database.
+	 */
+	BibtexDatabase database;
+
+	Layout layout;
+
+	String layoutFile;
+
+	public JEditorPane previewPane;
+
+	JScrollPane scrollPane;
+	PdfPreviewPanel pdfPreviewPanel;
+
+	BasePanel panel;
+
+    /**
+     * @param database
+     *            (may be null) Optionally used to resolve strings.
+     * @param entry
+     *            (may be null) If given this entry is shown otherwise you have
+     *            to call setEntry to make something visible.
+     * @param panel
+     *            (may be null) If not given no toolbar is shown on the right
+     *            hand side.
+     * @param metaData
+     *            (must be given) Used for resolving pdf directories for links.
+     * @param layoutFile
+     *            (must be given) Used for layout
+     */
+    public PreviewPanel(BibtexDatabase database, BibtexEntry entry,
+        BasePanel panel, MetaData metaData, String layoutFile) {
+        this(database, entry, panel, metaData, layoutFile, false);
+    }
+
+    /**
+	 * @param database
+	 *            (may be null) Optionally used to resolve strings.
+	 * @param entry
+	 *            (may be null) If given this entry is shown otherwise you have
+	 *            to call setEntry to make something visible.
+	 * @param panel
+	 *            (may be null) If not given no toolbar is shown on the right
+	 *            hand side.
+	 * @param metaData
+	 *            (must be given) Used for resolving pdf directories for links.
+	 * @param layoutFile
+	 *            (must be given) Used for layout
+	 * @param withPDFPreview if true, a PDF preview is included in the PreviewPanel
+	 */
+	public PreviewPanel(BibtexDatabase database, BibtexEntry entry,
+		BasePanel panel, MetaData metaData, String layoutFile, boolean withPDFPreview) {
+		this(panel, metaData, layoutFile, withPDFPreview);
+		this.database = database;
+		setEntry(entry);
+	}
+	
+    /**
+     * 
+     * @param panel
+     *            (may be null) If not given no toolbar is shown on the right
+     *            hand side.
+     * @param metaData
+     *            (must be given) Used for resolving pdf directories for links.
+     * @param layoutFile
+     *            (must be given) Used for layout
+     */
+    public PreviewPanel(BasePanel panel, MetaData metaData, String layoutFile) {
+        this(panel, metaData, layoutFile, false);
+    }
+
+    /**
+	 * 
+	 * @param panel
+	 *            (may be null) If not given no toolbar is shown on the right
+	 *            hand side.
+	 * @param metaData
+	 *            (must be given) Used for resolving pdf directories for links.
+	 * @param layoutFile
+	 *            (must be given) Used for layout
+     * @param withPDFPreview if true, a PDF preview is included in the PreviewPanel. 
+     * The user can override this setting by setting the config setting JabRefPreferences.PDF_PREVIEW to false.
+     */
+	private PreviewPanel(BasePanel panel, MetaData metaData, String layoutFile, boolean withPDFPreview) {
+		super(new BorderLayout(), true);
+
+		withPDFPreview = withPDFPreview && JabRefPreferences.getInstance().getBoolean(JabRefPreferences.PDF_PREVIEW);
+		
+		this.panel = panel;
+		this.metaData = metaData;
+		this.layoutFile = layoutFile;
+		this.previewPane = createPreviewPane();
+		if (withPDFPreview) {
+			this.pdfPreviewPanel = new PdfPreviewPanel(metaData);
+		} else {
+			this.pdfPreviewPanel = null;
+		}
+		if (panel != null) {
+			// dropped files handler only created for main window
+			// not for Windows as like the search results window
+			this.previewPane.setTransferHandler(new PreviewPanelTransferHandler(panel.frame(), this, this.previewPane.getTransferHandler()));
+		}
+
+		// Set up scroll pane for preview pane
+		scrollPane = new JScrollPane(previewPane,
+			JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+			JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+		scrollPane.setBorder(null);
+		
+		/*
+		 * If we have been given a panel and the preference option
+		 * previewPrintButton is set, show the tool bar
+		 */
+		if (panel != null
+			&& JabRefPreferences.getInstance().getBoolean("previewPrintButton")) {
+			add(createToolBar(), BorderLayout.LINE_START);
+		}
+
+		if (withPDFPreview) {
+			JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
+					scrollPane, pdfPreviewPanel);
+			splitPane.setOneTouchExpandable(true);
+			
+			// int oneThird = panel.getWidth()/3;
+			int oneThird = 400; // arbitrarily set as panel.getWidth() always
+								// returns 0 at this point
+			splitPane.setDividerLocation(oneThird*2);
+
+			// Provide minimum sizes for the two components in the split pane
+//			Dimension minimumSize = new Dimension(oneThird * 2, 50);
+//			scrollPane.setMinimumSize(minimumSize);
+//			minimumSize = new Dimension(oneThird, 50);
+//			pdfScrollPane.setMinimumSize(minimumSize);
+			add(splitPane);
+		} else {
+			add(scrollPane, BorderLayout.CENTER);
+		}
+
+
+
+	}
+	
+	class PrintAction extends AbstractAction {
+
+		public PrintAction() {
+			super(Globals.lang("Print Preview"), GUIGlobals.getImage("psSmall"));
+			putValue(SHORT_DESCRIPTION, Globals.lang("Print Preview"));
+		}
+
+		//DocumentPrinter printerService;
+
+		public void actionPerformed(ActionEvent arg0) {
+
+			// Background this, as it takes a while.
+			new Thread() {
+				public void run() {
+					try {
+						PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
+						pras.add(new JobName(entry.getCiteKey(), null));
+						previewPane.print(null, null, true, null, pras, false);
+
+					} catch (PrinterException e) {
+
+						// Inform the user... we don't know what to do.
+						JOptionPane.showMessageDialog(PreviewPanel.this,
+							Globals.lang("Could not print preview") + ".\n"
+								+ e.getMessage(), Globals
+								.lang("Printing Entry Preview"),
+							JOptionPane.ERROR_MESSAGE);
+					}
+				}
+			}.start();
+		}
+	}
+
+	Action printAction;
+
+	public Action getPrintAction() {
+		if (printAction == null)
+			printAction = new PrintAction();
+		return printAction;
+	}
+
+	class CloseAction extends AbstractAction {
+		public CloseAction() {
+			super(Globals.lang("Close window"), GUIGlobals.getImage("close"));
+			putValue(SHORT_DESCRIPTION, Globals.lang("Close window"));
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			panel.hideBottomComponent();
+		}
+	}
+
+	Action closeAction;
+
+	private ArrayList<String> wordsToHighlight = null;
+
+	public Action getCloseAction() {
+		if (closeAction == null)
+			closeAction = new CloseAction();
+		return closeAction;
+	}
+
+	JPopupMenu createPopupMenu() {
+		JPopupMenu menu = new JPopupMenu();
+		menu.add(getPrintAction());
+		if (panel != null) {
+			menu.add(panel.frame.switchPreview);
+		}
+		return menu;
+	}
+
+	JToolBar createToolBar() {
+
+		JToolBar tlb = new JToolBar(JToolBar.VERTICAL);
+		JabRefPreferences prefs = JabRefPreferences.getInstance();
+		Action printAction = getPrintAction();
+		Action closeAction = getCloseAction();
+
+		tlb.setMargin(new Insets(0, 0, 0, 2));
+
+		// The toolbar carries all the key bindings that are valid for the whole
+		// window.
+		ActionMap am = tlb.getActionMap();
+		InputMap im = tlb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+
+		im.put(prefs.getKey("Close entry preview"), "close");
+		am.put("close", closeAction);
+
+		im.put(prefs.getKey("Print entry preview"), "print");
+		am.put("print", printAction);
+
+		tlb.setFloatable(false);
+
+		// Add actions (and thus buttons)
+		tlb.add(closeAction);
+
+		tlb.addSeparator();
+
+		tlb.add(printAction);
+
+		Component[] comps = tlb.getComponents();
+
+		for (int i = 0; i < comps.length; i++)
+			((JComponent) comps[i]).setOpaque(false);
+
+		return tlb;
+	}
+
+	JEditorPane createPreviewPane() {
+		JEditorPane previewPane = new JEditorPane() {
+			public Dimension getPreferredScrollableViewportSize() {
+				return getPreferredSize();
+			}
+
+		};
+		previewPane.setMargin(new Insets(3, 3, 3, 3));
+
+		previewPane.setComponentPopupMenu(createPopupMenu());
+		
+		previewPane.setEditable(false);
+		previewPane.setDragEnabled(true); // this has an effect only, if no custom transfer handler is registered. We keep the statement if the transfer handler is removed.
+		previewPane.setContentType("text/html");
+		previewPane.addHyperlinkListener(new HyperlinkListener() {
+			public void hyperlinkUpdate(HyperlinkEvent hyperlinkEvent) {
+				if (hyperlinkEvent.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
+					try {
+						String address = hyperlinkEvent.getURL().toString();
+						Util.openExternalViewer(PreviewPanel.this.metaData,
+							address, "url");
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
+				}
+			}
+		});
+		
+		return previewPane;
+	}
+
+	public void setDatabase(BibtexDatabase db) {
+		database = db;
+	}
+
+    public void setMetaData(MetaData metaData) {
+        this.metaData = metaData;
+    }
+
+    public void readLayout(String layoutFormat) throws Exception {
+		layoutFile = layoutFormat;
+		readLayout();
+	}
+
+	public void readLayout() throws Exception {
+		StringReader sr = new StringReader(layoutFile.replaceAll("__NEWLINE__",
+			"\n"));
+		layout = new LayoutHelper(sr)
+			.getLayoutFromText(Globals.FORMATTER_PACKAGE);
+	}
+
+    public void setLayout(Layout layout) {
+        this.layout = layout;
+    }
+
+    public void setEntry(BibtexEntry newEntry) {
+		if (newEntry != entry) {
+			if (entry != null)
+				entry.removePropertyChangeListener(this);
+			newEntry.addPropertyChangeListener(this);
+		}
+		entry = newEntry;
+		try {
+			readLayout();
+			update();
+		} catch (Exception ex) {
+			ex.printStackTrace();
+		}
+	}
+    
+    public BibtexEntry getEntry() {
+    	return this.entry;
+    }
+
+	public void update() {
+
+		StringBuffer sb = new StringBuffer();
+        ExportFormats.entryNumber = 1; // Set entry number in case that is included in the preview layout.
+		if (entry != null) {
+			sb.append(layout.doLayout(entry, database, wordsToHighlight));
+		}
+		previewPane.setText(sb.toString());
+		previewPane.revalidate();
+
+		// Scroll to top:
+		final JScrollBar bar = scrollPane.getVerticalScrollBar();
+		SwingUtilities.invokeLater(new Runnable() {
+			public void run() {
+				bar.setValue(0);
+			}
+		});
+		
+		// update pdf preview
+		if (pdfPreviewPanel != null) {
+			pdfPreviewPanel.updatePanel(entry);
+		}
+	}
+
+
+	public boolean hasEntry() {
+		return (entry != null);
+	}
+
+	/**
+	 * The PreviewPanel has registered itself as an event listener with the
+	 * currently displayed BibtexEntry. If the entry changes, an event is
+	 * received here, and we can update the preview immediately.
+	 */
+	public void vetoableChange(PropertyChangeEvent evt)
+		throws PropertyVetoException {
+		// TODO updating here is not really necessary isn't it?
+		// Only if we are visible.
+		update();
+	}
+
+	@Override
+	public void searchText(ArrayList<String> words) {
+		if (Globals.prefs.getBoolean("highLightWords")) {
+			this.wordsToHighlight = words;
+			update();
+		} else {
+			if (this.wordsToHighlight != null) {
+				// setting of "highLightWords" seems to have changed.
+				// clear all highlights and remember the clearing (by wordsToHighlight = null)
+				this.wordsToHighlight = null;
+				update();
+			}
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/PreviewPrefsTab.java b/src/java/net/sf/jabref/PreviewPrefsTab.java
index 5727b32..3051d26 100644
--- a/src/java/net/sf/jabref/PreviewPrefsTab.java
+++ b/src/java/net/sf/jabref/PreviewPrefsTab.java
@@ -1,252 +1,254 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.GridLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.*;
-
-public class PreviewPrefsTab extends JPanel implements PrefsTab {
-
-	JabRefPreferences _prefs;
-
-	JabRefFrame _frame;
-
-	JPanel pan = new JPanel();
-
-	GridBagLayout gbl = new GridBagLayout();
-
-	GridBagConstraints con = new GridBagConstraints();
-
-	JTextArea layout1 = new JTextArea("", 1, 1), layout2 = new JTextArea("", 1, 1);
-
-	JButton def1 = new JButton(Globals.lang("Default")),
-		def2 = new JButton(Globals.lang("Default")), test1 = new JButton(Globals.lang("Test")),
-		test2 = new JButton(Globals.lang("Test")), help;
-
-	JPanel p1 = new JPanel(), p2 = new JPanel(), p3 = new JPanel(new BorderLayout());
-
-	JScrollPane sp1 = new JScrollPane(layout1), sp2 = new JScrollPane(layout2);
-	
-	JCheckBox pdfPreview = new JCheckBox(Globals.lang("Enable PDF preview"));
-
-	private static BibtexEntry entry;
-
-	public PreviewPrefsTab(JabRefPreferences prefs) {
-		_prefs = prefs;
-
-		p1.setLayout(gbl);
-		p2.setLayout(gbl);
-
-		setLayout(gbl);
-		JLabel lab;
-		lab = new JLabel(Globals.lang("Preview") + " 1");
-		con.anchor = GridBagConstraints.WEST;
-		con.gridwidth = GridBagConstraints.REMAINDER;
-		con.fill = GridBagConstraints.BOTH;
-		con.weightx = 1;
-		con.weighty = 0;
-		con.insets = new Insets(2, 2, 2, 2);
-		gbl.setConstraints(lab, con);
-		// p1.add(lab);
-		con.weighty = 1;
-		gbl.setConstraints(sp1, con);
-		p1.add(sp1);
-		con.weighty = 0;
-		con.gridwidth = 1;
-		con.weightx = 0;
-		con.fill = GridBagConstraints.NONE;
-		con.anchor = GridBagConstraints.WEST;
-		gbl.setConstraints(test1, con);
-		p1.add(test1);
-		gbl.setConstraints(def1, con);
-		p1.add(def1);
-		con.gridwidth = GridBagConstraints.REMAINDER;
-		JPanel pan = new JPanel();
-		con.weightx = 1;
-		gbl.setConstraints(pan, con);
-		p1.add(pan);
-		lab = new JLabel(Globals.lang("Preview") + " 2");
-		gbl.setConstraints(lab, con);
-		// p2.add(lab);
-		con.weighty = 1;
-		con.fill = GridBagConstraints.BOTH;
-		gbl.setConstraints(sp2, con);
-		p2.add(sp2);
-		con.weighty = 0;
-		con.weightx = 0;
-		con.fill = GridBagConstraints.NONE;
-		con.gridwidth = 1;
-		gbl.setConstraints(test2, con);
-		p2.add(test2);
-		gbl.setConstraints(def2, con);
-		p2.add(def2);
-		con.gridwidth = 1;
-		pan = new JPanel();
-		con.weightx = 1;
-		gbl.setConstraints(pan, con);
-		p2.add(pan);
-
-		con.weightx = 1;
-		con.weighty = 0;
-		con.fill = GridBagConstraints.BOTH;
-		con.gridwidth = GridBagConstraints.REMAINDER;
-		lab = new JLabel(Globals.lang("Preview") + " 1");
-		gbl.setConstraints(lab, con);
-		add(lab);
-		con.weighty = 1;
-		gbl.setConstraints(p1, con);
-		add(p1);
-		lab = new JLabel(Globals.lang("Preview") + " 2");
-		con.weighty = 0;
-		JSeparator sep = new JSeparator(JSeparator.HORIZONTAL);
-		gbl.setConstraints(sep, con);
-		add(sep);
-		gbl.setConstraints(lab, con);
-		add(lab);
-		con.weighty = 1;
-		gbl.setConstraints(p2, con);
-		add(p2);
-		
-        // PDF Preview button
-        p3.add(pdfPreview, BorderLayout.WEST);
-
-        { // Help Button
-            HelpAction helpAction = new HelpAction(Globals.helpDiag, GUIGlobals.previewHelp,
-                Globals.lang("Help on Preview Settings"), GUIGlobals.getIconUrl("helpSmall"));
-            JButton help = helpAction.getIconButton();
-            p3.add(help, BorderLayout.EAST);
-        }
-
-        con.weighty = 0;
-        gbl.setConstraints(p3, con);
-        add(p3);
-
-		def1.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				String tmp = layout1.getText().replaceAll("\n", "__NEWLINE__");
-				_prefs.remove("preview0");
-				layout1.setText(_prefs.get("preview0").replaceAll("__NEWLINE__", "\n"));
-				_prefs.put("preview0", tmp);
-			}
-		});
-		def2.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				String tmp = layout2.getText().replaceAll("\n", "__NEWLINE__");
-				_prefs.remove("preview1");
-				layout2.setText(_prefs.get("preview1").replaceAll("__NEWLINE__", "\n"));
-				_prefs.put("preview1", tmp);
-			}
-		});
-
-		test1.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				getTestEntry();
-				PreviewPanel testPanel = new PreviewPanel(null, entry, null , new MetaData(), layout1.getText());
-				testPanel.setPreferredSize(new Dimension(800, 350));
-				JOptionPane.showMessageDialog(null, testPanel, Globals.lang("Preview"),
-					JOptionPane.PLAIN_MESSAGE);
-			}
-		});
-
-		test2.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				getTestEntry();
-				PreviewPanel testPanel = new PreviewPanel(null, entry, null, new MetaData(), layout2.getText());
-				testPanel.setPreferredSize(new Dimension(800, 350));
-				JOptionPane.showMessageDialog(null, new JScrollPane(testPanel), Globals
-					.lang("Preview"), JOptionPane.PLAIN_MESSAGE);
-			}
-		});
-	}
-
-	public static BibtexEntry getTestEntry() {
-		if (entry != null)
-			return entry;
-		entry = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.getType("article"));
-		entry.setField(BibtexFields.KEY_FIELD, "conceicao1997");
-		entry
-			.setField(
-				"author",
-				"Luis E. C. Conceic{\\~a}o and Terje van der Meeren and Johan A. J. Verreth and M S. Evjen and D. F. Houlihan and H. J. Fyhn");
-		entry
-			.setField(
-				"title",
-				"Amino acid metabolism and protein turnover in larval turbot (Scophthalmus maximus) fed natural zooplankton or Artemia");
-		entry.setField("year", "1997");
-		entry.setField("journal", "Marine Biology");
-		entry.setField("month", "January");
-		entry.setField("number", "2");
-		entry.setField("volume", "123");
-		entry.setField("pdf", "conceicao1997.pdf");
-		entry.setField("pages", "255--265");
-		entry.setField("keywords", "energetics, artemia, metabolism, amino acid, turbot");
-		entry.setField("url",
-			"http://ejournals.ebsco.com/direct.asp?ArticleID=TYY4NT82XA9H7R8PFPPV");
-		entry
-			.setField(
-				"abstract",
-				"Abstract The present paper studied the influence of different food regimes "
-					+ "on the free amino acid (FAA) pool, the rate of protein turnover, the flux of amino acids, and "
-					+ "their relation to growth of larval turbot (Scophthalmus maximus L.) from first feeding until "
-					+ "metamorphosis. The amino acid profile of protein was stable during the larval period although "
-					+ "some small, but significant, differences were found. Turbot larvae had proteins which were rich "
-					+ "in leucine and aspartate, and poor in glutamate, suggesting a high leucine requirement. The "
-					+ "profile of the FAA pool was highly variable and quite different from the amino acid profile in "
-					+ "protein. The proportion of essential FAA decreased with development. High contents of free tyrosine "
-					+ "and phenylalanine were found on Day 3, while free taurine was present at high levels throughout "
-					+ "the experimental period. Larval growth rates were positively correlated with taurine levels, "
-					+ "suggesting a dietary dependency for taurine and/or sulphur amino acids.\n\nReduced growth rates in "
-					+ "Artemia-fed larvae were associated with lower levels of free methionine, indicating that this diet "
-					+ "is deficient in methionine for turbot larvae. Leucine might also be limiting turbot growth as the "
-					+ "different diet organisms had lower levels of this amino acid in the free pool than was found in the "
-					+ "larval protein. A previously presented model was used to describe the flux of amino acids in growing "
-					+ "turbot larvae. The FAA pool was found to be small and variable. It was estimated that the daily dietary "
-					+ "amino acid intake might be up to ten times the larval FAA pool. In addition, protein synthesis and "
-					+ "protein degradation might daily remove and return, respectively, the equivalent of up to 20 and 10 "
-					+ "times the size of the FAA pool. In an early phase (Day 11) high growth rates were associated with a "
-					+ "relatively low protein turnover, while at a later stage (Day 17), a much higher turnover was observed.");
-		return entry;
-	}
-
-	public void setValues() {
-		layout1.setText(_prefs.get("preview0").replaceAll("__NEWLINE__", "\n"));
-		layout2.setText(_prefs.get("preview1").replaceAll("__NEWLINE__", "\n"));
-		pdfPreview.setSelected(_prefs.getBoolean(JabRefPreferences.PDF_PREVIEW));
-	}
-
-	public void storeSettings() {
-		_prefs.put("preview0", layout1.getText().replaceAll("\n", "__NEWLINE__"));
-		_prefs.put("preview1", layout2.getText().replaceAll("\n", "__NEWLINE__"));
-		_prefs.putBoolean(JabRefPreferences.PDF_PREVIEW, pdfPreview.isSelected());
-	}
-
-	public boolean readyToClose() {
-		return true;
-	}
-
-	public String getTabName() {
-		return Globals.lang("Entry preview");
-	}
-
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.*;
+
+import net.sf.jabref.help.HelpAction;
+
+public class PreviewPrefsTab extends JPanel implements PrefsTab {
+
+	JabRefPreferences _prefs;
+
+	JabRefFrame _frame;
+
+	JPanel pan = new JPanel();
+
+	GridBagLayout gbl = new GridBagLayout();
+
+	GridBagConstraints con = new GridBagConstraints();
+
+	JTextArea layout1 = new JTextArea("", 1, 1), layout2 = new JTextArea("", 1, 1);
+
+	JButton def1 = new JButton(Globals.lang("Default")),
+		def2 = new JButton(Globals.lang("Default")), test1 = new JButton(Globals.lang("Test")),
+		test2 = new JButton(Globals.lang("Test")), help;
+
+	JPanel p1 = new JPanel(), p2 = new JPanel(), p3 = new JPanel(new BorderLayout());
+
+	JScrollPane sp1 = new JScrollPane(layout1), sp2 = new JScrollPane(layout2);
+	
+	JCheckBox pdfPreview = new JCheckBox(Globals.lang("Enable PDF preview"));
+
+	private static BibtexEntry entry;
+
+	public PreviewPrefsTab(JabRefPreferences prefs) {
+		_prefs = prefs;
+
+		p1.setLayout(gbl);
+		p2.setLayout(gbl);
+
+		setLayout(gbl);
+		JLabel lab;
+		lab = new JLabel(Globals.lang("Preview") + " 1");
+		con.anchor = GridBagConstraints.WEST;
+		con.gridwidth = GridBagConstraints.REMAINDER;
+		con.fill = GridBagConstraints.BOTH;
+		con.weightx = 1;
+		con.weighty = 0;
+		con.insets = new Insets(2, 2, 2, 2);
+		gbl.setConstraints(lab, con);
+		// p1.add(lab);
+		con.weighty = 1;
+		gbl.setConstraints(sp1, con);
+		p1.add(sp1);
+		con.weighty = 0;
+		con.gridwidth = 1;
+		con.weightx = 0;
+		con.fill = GridBagConstraints.NONE;
+		con.anchor = GridBagConstraints.WEST;
+		gbl.setConstraints(test1, con);
+		p1.add(test1);
+		gbl.setConstraints(def1, con);
+		p1.add(def1);
+		con.gridwidth = GridBagConstraints.REMAINDER;
+		JPanel pan = new JPanel();
+		con.weightx = 1;
+		gbl.setConstraints(pan, con);
+		p1.add(pan);
+		lab = new JLabel(Globals.lang("Preview") + " 2");
+		gbl.setConstraints(lab, con);
+		// p2.add(lab);
+		con.weighty = 1;
+		con.fill = GridBagConstraints.BOTH;
+		gbl.setConstraints(sp2, con);
+		p2.add(sp2);
+		con.weighty = 0;
+		con.weightx = 0;
+		con.fill = GridBagConstraints.NONE;
+		con.gridwidth = 1;
+		gbl.setConstraints(test2, con);
+		p2.add(test2);
+		gbl.setConstraints(def2, con);
+		p2.add(def2);
+		con.gridwidth = 1;
+		pan = new JPanel();
+		con.weightx = 1;
+		gbl.setConstraints(pan, con);
+		p2.add(pan);
+
+		con.weightx = 1;
+		con.weighty = 0;
+		con.fill = GridBagConstraints.BOTH;
+		con.gridwidth = GridBagConstraints.REMAINDER;
+		lab = new JLabel(Globals.lang("Preview") + " 1");
+		gbl.setConstraints(lab, con);
+		add(lab);
+		con.weighty = 1;
+		gbl.setConstraints(p1, con);
+		add(p1);
+		lab = new JLabel(Globals.lang("Preview") + " 2");
+		con.weighty = 0;
+		JSeparator sep = new JSeparator(JSeparator.HORIZONTAL);
+		gbl.setConstraints(sep, con);
+		add(sep);
+		gbl.setConstraints(lab, con);
+		add(lab);
+		con.weighty = 1;
+		gbl.setConstraints(p2, con);
+		add(p2);
+		
+        // PDF Preview button
+        p3.add(pdfPreview, BorderLayout.WEST);
+
+        { // Help Button
+            HelpAction helpAction = new HelpAction(Globals.helpDiag, GUIGlobals.previewHelp,
+                Globals.lang("Help on Preview Settings"), GUIGlobals.getIconUrl("helpSmall"));
+            JButton help = helpAction.getIconButton();
+            p3.add(help, BorderLayout.EAST);
+        }
+
+        con.weighty = 0;
+        gbl.setConstraints(p3, con);
+        add(p3);
+
+		def1.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				String tmp = layout1.getText().replaceAll("\n", "__NEWLINE__");
+				_prefs.remove("preview0");
+				layout1.setText(_prefs.get("preview0").replaceAll("__NEWLINE__", "\n"));
+				_prefs.put("preview0", tmp);
+			}
+		});
+		def2.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				String tmp = layout2.getText().replaceAll("\n", "__NEWLINE__");
+				_prefs.remove("preview1");
+				layout2.setText(_prefs.get("preview1").replaceAll("__NEWLINE__", "\n"));
+				_prefs.put("preview1", tmp);
+			}
+		});
+
+		test1.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				getTestEntry();
+				PreviewPanel testPanel = new PreviewPanel(null, entry, null , new MetaData(), layout1.getText());
+				testPanel.setPreferredSize(new Dimension(800, 350));
+				JOptionPane.showMessageDialog(null, testPanel, Globals.lang("Preview"),
+					JOptionPane.PLAIN_MESSAGE);
+			}
+		});
+
+		test2.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				getTestEntry();
+				PreviewPanel testPanel = new PreviewPanel(null, entry, null, new MetaData(), layout2.getText());
+				testPanel.setPreferredSize(new Dimension(800, 350));
+				JOptionPane.showMessageDialog(null, new JScrollPane(testPanel), Globals
+					.lang("Preview"), JOptionPane.PLAIN_MESSAGE);
+			}
+		});
+	}
+
+	public static BibtexEntry getTestEntry() {
+		if (entry != null)
+			return entry;
+		entry = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.getType("article"));
+		entry.setField(BibtexFields.KEY_FIELD, "conceicao1997");
+		entry
+			.setField(
+				"author",
+				"Luis E. C. Conceic{\\~a}o and Terje van der Meeren and Johan A. J. Verreth and M S. Evjen and D. F. Houlihan and H. J. Fyhn");
+		entry
+			.setField(
+				"title",
+				"Amino acid metabolism and protein turnover in larval turbot (Scophthalmus maximus) fed natural zooplankton or Artemia");
+		entry.setField("year", "1997");
+		entry.setField("journal", "Marine Biology");
+		entry.setField("month", "January");
+		entry.setField("number", "2");
+		entry.setField("volume", "123");
+		entry.setField("pdf", "conceicao1997.pdf");
+		entry.setField("pages", "255--265");
+		entry.setField("keywords", "energetics, artemia, metabolism, amino acid, turbot");
+		entry.setField("url",
+			"http://ejournals.ebsco.com/direct.asp?ArticleID=TYY4NT82XA9H7R8PFPPV");
+		entry
+			.setField(
+				"abstract",
+				"Abstract The present paper studied the influence of different food regimes "
+					+ "on the free amino acid (FAA) pool, the rate of protein turnover, the flux of amino acids, and "
+					+ "their relation to growth of larval turbot (Scophthalmus maximus L.) from first feeding until "
+					+ "metamorphosis. The amino acid profile of protein was stable during the larval period although "
+					+ "some small, but significant, differences were found. Turbot larvae had proteins which were rich "
+					+ "in leucine and aspartate, and poor in glutamate, suggesting a high leucine requirement. The "
+					+ "profile of the FAA pool was highly variable and quite different from the amino acid profile in "
+					+ "protein. The proportion of essential FAA decreased with development. High contents of free tyrosine "
+					+ "and phenylalanine were found on Day 3, while free taurine was present at high levels throughout "
+					+ "the experimental period. Larval growth rates were positively correlated with taurine levels, "
+					+ "suggesting a dietary dependency for taurine and/or sulphur amino acids.\n\nReduced growth rates in "
+					+ "Artemia-fed larvae were associated with lower levels of free methionine, indicating that this diet "
+					+ "is deficient in methionine for turbot larvae. Leucine might also be limiting turbot growth as the "
+					+ "different diet organisms had lower levels of this amino acid in the free pool than was found in the "
+					+ "larval protein. A previously presented model was used to describe the flux of amino acids in growing "
+					+ "turbot larvae. The FAA pool was found to be small and variable. It was estimated that the daily dietary "
+					+ "amino acid intake might be up to ten times the larval FAA pool. In addition, protein synthesis and "
+					+ "protein degradation might daily remove and return, respectively, the equivalent of up to 20 and 10 "
+					+ "times the size of the FAA pool. In an early phase (Day 11) high growth rates were associated with a "
+					+ "relatively low protein turnover, while at a later stage (Day 17), a much higher turnover was observed.");
+		return entry;
+	}
+
+	public void setValues() {
+		layout1.setText(_prefs.get("preview0").replaceAll("__NEWLINE__", "\n"));
+		layout2.setText(_prefs.get("preview1").replaceAll("__NEWLINE__", "\n"));
+		pdfPreview.setSelected(_prefs.getBoolean(JabRefPreferences.PDF_PREVIEW));
+	}
+
+	public void storeSettings() {
+		_prefs.put("preview0", layout1.getText().replaceAll("\n", "__NEWLINE__"));
+		_prefs.put("preview1", layout2.getText().replaceAll("\n", "__NEWLINE__"));
+		_prefs.putBoolean(JabRefPreferences.PDF_PREVIEW, pdfPreview.isSelected());
+	}
+
+	public boolean readyToClose() {
+		return true;
+	}
+
+	public String getTabName() {
+		return Globals.lang("Entry preview");
+	}
+
+}
diff --git a/src/java/net/sf/jabref/RegExpRule.java b/src/java/net/sf/jabref/RegExpRule.java
index f391709..cad8a4c 100644
--- a/src/java/net/sf/jabref/RegExpRule.java
+++ b/src/java/net/sf/jabref/RegExpRule.java
@@ -1,100 +1,100 @@
-/*
- Copyright (C) 2003 Nathan Dunn, Morten O. Alver
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-package net.sf.jabref;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import net.sf.jabref.export.layout.format.RemoveLatexCommands;
-
-public class RegExpRule implements SearchRule {
-
-    final boolean m_caseSensitiveSearch;
-    //static RemoveBrackets removeBrackets = new RemoveBrackets();
-    static RemoveLatexCommands removeBrackets = new RemoveLatexCommands();
-
-    public RegExpRule(boolean caseSensitive) {
-        m_caseSensitiveSearch = caseSensitive;
-    }
-
-    public boolean validateSearchStrings(Map<String, String> searchStrings) {
-        int score = 0;
-        String searchString = searchStrings.values().iterator().next();
-
-        int flags = 0;
-        if (!m_caseSensitiveSearch)
-            flags = Pattern.CASE_INSENSITIVE; // testing
-        try {
-            Pattern pattern = Pattern.compile(searchString, flags);
-        } catch (PatternSyntaxException ex) {
-            return false;
-        }
-        return true;
-    }
-
-    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) throws PatternSyntaxException {
-
-        int score = 0;
-        String searchString = searchStrings.values().iterator().next();
-
-        int flags = 0;
-        if (!m_caseSensitiveSearch)
-            flags = Pattern.CASE_INSENSITIVE; // testing
-        //System.out.println(searchString);
-        Pattern pattern = Pattern.compile(searchString, flags);
-
-        score += searchFields(bibtexEntry.getAllFields(), bibtexEntry, pattern);
-
-        return score;
-    }
-
-    protected int searchFields(Set<String> fields, BibtexEntry bibtexEntry,
-                               Pattern pattern) {
-        int score = 0;
-        if (fields != null) {
-        	for (String field : fields){
-                try {
-                    Object value = bibtexEntry.getField(field);
-                    if (value != null) {
-                        Matcher m = pattern.matcher(removeBrackets.format((String)value));
-                        if (m.find())
-                            score++;
-                    }
-                }
-
-                catch (Throwable t) {
-                    System.err.println("Searching error: " + t);
-                }
-            }
-        }
-        return score;
-    }
-
-}
+/*
+ Copyright (C) 2003 Nathan Dunn, Morten O. Alver
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+package net.sf.jabref;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
+
+public class RegExpRule implements SearchRule {
+
+    final boolean m_caseSensitiveSearch;
+    //static RemoveBrackets removeBrackets = new RemoveBrackets();
+    static RemoveLatexCommands removeBrackets = new RemoveLatexCommands();
+
+    public RegExpRule(boolean caseSensitive) {
+        m_caseSensitiveSearch = caseSensitive;
+    }
+
+    public boolean validateSearchStrings(Map<String, String> searchStrings) {
+        int score = 0;
+        String searchString = searchStrings.values().iterator().next();
+
+        int flags = 0;
+        if (!m_caseSensitiveSearch)
+            flags = Pattern.CASE_INSENSITIVE; // testing
+        try {
+            Pattern pattern = Pattern.compile(searchString, flags);
+        } catch (PatternSyntaxException ex) {
+            return false;
+        }
+        return true;
+    }
+
+    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) throws PatternSyntaxException {
+
+        int score = 0;
+        String searchString = searchStrings.values().iterator().next();
+
+        int flags = 0;
+        if (!m_caseSensitiveSearch)
+            flags = Pattern.CASE_INSENSITIVE; // testing
+        //System.out.println(searchString);
+        Pattern pattern = Pattern.compile(searchString, flags);
+
+        score += searchFields(bibtexEntry.getAllFields(), bibtexEntry, pattern);
+
+        return score;
+    }
+
+    protected int searchFields(Set<String> fields, BibtexEntry bibtexEntry,
+                               Pattern pattern) {
+        int score = 0;
+        if (fields != null) {
+        	for (String field : fields){
+                try {
+                    Object value = bibtexEntry.getField(field);
+                    if (value != null) {
+                        Matcher m = pattern.matcher(removeBrackets.format((String)value));
+                        if (m.find())
+                            score++;
+                    }
+                }
+
+                catch (Throwable t) {
+                    System.err.println("Searching error: " + t);
+                }
+            }
+        }
+        return score;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/ReplaceStringDialog.java b/src/java/net/sf/jabref/ReplaceStringDialog.java
index dbb489f..81032b5 100644
--- a/src/java/net/sf/jabref/ReplaceStringDialog.java
+++ b/src/java/net/sf/jabref/ReplaceStringDialog.java
@@ -1,235 +1,235 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.*;
-
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableFieldChange;
-
-/**
- * Dialog for creating or modifying groups. Operates directly on the
- * Vector containing group information.
- */
-class ReplaceStringDialog extends JDialog {
-
-    JTextField
-        fields = new JTextField("", 30),
-        from = new JTextField("", 30),
-        to = new JTextField("", 30);
-    JLabel
-        fl = new JLabel(Globals.lang("Search for")+":"),
-        tl = new JLabel(Globals.lang("Replace with")+":");
-
-    JButton
-        ok = new JButton(Globals.lang("Ok")),
-        cancel = new JButton(Globals.lang("Cancel"));
-    JPanel
-        settings = new JPanel(),
-        main = new JPanel(),
-        opt = new JPanel();
-    JCheckBox
-        selOnly = new JCheckBox(Globals.lang("Limit to selected entries"), false);
-    JRadioButton
-        allFi = new JRadioButton(Globals.lang("All fields"), true),
-        field = new JRadioButton(Globals.lang("Limit to fields")+":", false);
-    ButtonGroup bg = new ButtonGroup();
-    private boolean ok_pressed = false;
-    private JabRefFrame parent;
-    String[] flds = null;
-    String s1, s2;
-
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-
-    public ReplaceStringDialog(JabRefFrame parent_) {
-        super(parent_, Globals.lang("Replace string"), true);
-        parent = parent_;
-
-        bg.add(allFi);
-        bg.add(field);
-        ActionListener okListener = new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    s1 = from.getText();
-                    s2 = to.getText();
-                    if (s1.equals(""))
-                        return;
-                    ok_pressed = true;
-                    flds = Util.delimToStringArray(fields.getText().toLowerCase(), ";");
-                    dispose();
-                }
-            };
-        ok.addActionListener(okListener);
-        to.addActionListener(okListener);
-        fields.addActionListener(okListener);
-        AbstractAction cancelAction = new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    dispose();
-                }
-            };
-        cancel.addActionListener(cancelAction);
-
-        // Key bindings:
-        ActionMap am = settings.getActionMap();
-        InputMap im = settings.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(parent.prefs.getKey("Close dialog"), "close");
-        am.put("close", cancelAction);
-
-        // Layout starts here.
-        settings.setLayout(gbl);
-        opt.setLayout(gbl);
-        main.setLayout(gbl);
-
-        settings.setBorder(BorderFactory.createTitledBorder
-                       (BorderFactory.createEtchedBorder(),
-                        Globals.lang("Replace string")));
-        main.setBorder(BorderFactory.createTitledBorder
-                       (BorderFactory.createEtchedBorder(),
-                        Globals.lang("Strings")));
-          
-
-        // Settings panel:
-        /*
-        con.weightx = 0;
-        con.insets = new Insets(3, 5, 3, 5);
-        con.anchor = GridBagConstraints.EAST;
-        con.fill = GridBagConstraints.NONE;
-        con.gridx = 0;
-        con.gridy = 2;
-        gbl.setConstraints(nf, con);
-        settings.add(nf);*/
-        //con.weightx = 1;
-        con.fill = GridBagConstraints.HORIZONTAL;
-        //JSeparator sep = new JSeparator()
-        con.gridwidth = 2;
-        con.weightx = 0;
-        con.anchor = GridBagConstraints.WEST;
-        con.gridy = 0;
-        con.gridx = 0;
-        con.insets = new Insets(3, 5, 3, 5);
-        gbl.setConstraints(selOnly, con);
-        settings.add(selOnly);
-        con.gridy = 1;
-        con.insets = new Insets(13, 5, 3, 5);
-        gbl.setConstraints(allFi, con);
-        settings.add(allFi);
-        con.gridwidth = 1;
-        con.gridy = 2;
-        con.gridx = 0;
-        con.insets = new Insets(3, 5, 3, 5);
-        gbl.setConstraints(field, con);
-        settings.add(field);
-        con.gridx = 1;
-        con.weightx = 1;
-        //con.insets = new Insets(3, 5, 3, 5);
-        gbl.setConstraints(fields, con);
-        settings.add(fields);
-
-        con.weightx = 0;
-        con.gridx = 0;
-        con.gridy = 0;
-        gbl.setConstraints(fl, con);
-        main.add(fl);
-        con.gridy = 1;
-        gbl.setConstraints(tl, con);
-        main.add(tl);
-        con.weightx = 1;
-        con.gridx = 1;
-        con.gridy = 0;
-        gbl.setConstraints(from, con);
-        main.add(from);
-        con.gridy = 1;
-        gbl.setConstraints(to, con);
-        main.add(to);
-
-               // Option buttons:
-        con.gridx = GridBagConstraints.RELATIVE;
-        con.gridy = GridBagConstraints.RELATIVE;
-        con.weightx = 1;
-        con.gridwidth = 1;
-        con.anchor = GridBagConstraints.EAST;
-        con.fill = GridBagConstraints.NONE;
-        gbl.setConstraints(ok, con);
-        opt.add(ok);
-        con.anchor = GridBagConstraints.WEST;
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        gbl.setConstraints(cancel, con);
-        opt.add(cancel);
-
-        getContentPane().add(main, BorderLayout.NORTH);
-        getContentPane().add(settings, BorderLayout.CENTER);
-        getContentPane().add(opt, BorderLayout.SOUTH);
-
-        pack();
-        //setSize(400, 170);
-
-        Util.placeDialog(this, parent);
-    }
-
-    public boolean okPressed() { return ok_pressed; }
-    public boolean allFields() { return allFi.isSelected(); }
-    public boolean selOnly() { return selOnly.isSelected(); }
-    public String[] fields() { return Util.delimToStringArray(field.getText(), ";"); }
-
-    /**
-     * Does the actual operation on a Bibtex entry based on the
-     * settings specified in this same dialog. Returns the number of
-     * occurences replaced.
-     */
-    public int replace(BibtexEntry be, NamedCompound ce) {
-        int counter = 0;
-        if (allFields()) {
-        	
-        	for (String s : be.getAllFields()){
-                if (!s.equals(BibtexFields.KEY_FIELD))
-                    counter += replaceField(be, s, ce);
-            }
-        } else {
-            for (int i=0; i<flds.length; i++) {
-                if (!flds[i].equals(BibtexFields.KEY_FIELD))
-                    counter += replaceField(be, flds[i], ce);
-            }
-
-        }
-        return counter;
-    }
-
-    public int replaceField(BibtexEntry be, String field, NamedCompound ce) {
-        Object o = be.getField(field);
-        if (o == null) return 0;
-        String txt = o.toString();
-        StringBuffer sb = new StringBuffer();
-        int ind = -1, piv = 0, counter = 0, len1 = s1.length();
-        while ((ind=txt.indexOf(s1, piv)) >= 0) {
-            counter++;
-            sb.append(txt.substring(piv, ind)); // Text leading up to s1
-            sb.append(s2);  // Insert s2
-            piv = ind+len1;
-        }
-        sb.append(txt.substring(piv));
-        String newStr = sb.toString();
-        be.setField(field, newStr);
-        ce.addEdit(new UndoableFieldChange(be, field, txt, newStr));
-        return counter;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.*;
+
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableFieldChange;
+
+/**
+ * Dialog for creating or modifying groups. Operates directly on the
+ * Vector containing group information.
+ */
+class ReplaceStringDialog extends JDialog {
+
+    JTextField
+        fields = new JTextField("", 30),
+        from = new JTextField("", 30),
+        to = new JTextField("", 30);
+    JLabel
+        fl = new JLabel(Globals.lang("Search for")+":"),
+        tl = new JLabel(Globals.lang("Replace with")+":");
+
+    JButton
+        ok = new JButton(Globals.lang("Ok")),
+        cancel = new JButton(Globals.lang("Cancel"));
+    JPanel
+        settings = new JPanel(),
+        main = new JPanel(),
+        opt = new JPanel();
+    JCheckBox
+        selOnly = new JCheckBox(Globals.lang("Limit to selected entries"), false);
+    JRadioButton
+        allFi = new JRadioButton(Globals.lang("All fields"), true),
+        field = new JRadioButton(Globals.lang("Limit to fields")+":", false);
+    ButtonGroup bg = new ButtonGroup();
+    private boolean ok_pressed = false;
+    private JabRefFrame parent;
+    String[] flds = null;
+    String s1, s2;
+
+    GridBagLayout gbl = new GridBagLayout();
+    GridBagConstraints con = new GridBagConstraints();
+
+    public ReplaceStringDialog(JabRefFrame parent_) {
+        super(parent_, Globals.lang("Replace string"), true);
+        parent = parent_;
+
+        bg.add(allFi);
+        bg.add(field);
+        ActionListener okListener = new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    s1 = from.getText();
+                    s2 = to.getText();
+                    if (s1.equals(""))
+                        return;
+                    ok_pressed = true;
+                    flds = Util.delimToStringArray(fields.getText().toLowerCase(), ";");
+                    dispose();
+                }
+            };
+        ok.addActionListener(okListener);
+        to.addActionListener(okListener);
+        fields.addActionListener(okListener);
+        AbstractAction cancelAction = new AbstractAction() {
+                public void actionPerformed(ActionEvent e) {
+                    dispose();
+                }
+            };
+        cancel.addActionListener(cancelAction);
+
+        // Key bindings:
+        ActionMap am = settings.getActionMap();
+        InputMap im = settings.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(parent.prefs.getKey("Close dialog"), "close");
+        am.put("close", cancelAction);
+
+        // Layout starts here.
+        settings.setLayout(gbl);
+        opt.setLayout(gbl);
+        main.setLayout(gbl);
+
+        settings.setBorder(BorderFactory.createTitledBorder
+                       (BorderFactory.createEtchedBorder(),
+                        Globals.lang("Replace string")));
+        main.setBorder(BorderFactory.createTitledBorder
+                       (BorderFactory.createEtchedBorder(),
+                        Globals.lang("Strings")));
+          
+
+        // Settings panel:
+        /*
+        con.weightx = 0;
+        con.insets = new Insets(3, 5, 3, 5);
+        con.anchor = GridBagConstraints.EAST;
+        con.fill = GridBagConstraints.NONE;
+        con.gridx = 0;
+        con.gridy = 2;
+        gbl.setConstraints(nf, con);
+        settings.add(nf);*/
+        //con.weightx = 1;
+        con.fill = GridBagConstraints.HORIZONTAL;
+        //JSeparator sep = new JSeparator()
+        con.gridwidth = 2;
+        con.weightx = 0;
+        con.anchor = GridBagConstraints.WEST;
+        con.gridy = 0;
+        con.gridx = 0;
+        con.insets = new Insets(3, 5, 3, 5);
+        gbl.setConstraints(selOnly, con);
+        settings.add(selOnly);
+        con.gridy = 1;
+        con.insets = new Insets(13, 5, 3, 5);
+        gbl.setConstraints(allFi, con);
+        settings.add(allFi);
+        con.gridwidth = 1;
+        con.gridy = 2;
+        con.gridx = 0;
+        con.insets = new Insets(3, 5, 3, 5);
+        gbl.setConstraints(field, con);
+        settings.add(field);
+        con.gridx = 1;
+        con.weightx = 1;
+        //con.insets = new Insets(3, 5, 3, 5);
+        gbl.setConstraints(fields, con);
+        settings.add(fields);
+
+        con.weightx = 0;
+        con.gridx = 0;
+        con.gridy = 0;
+        gbl.setConstraints(fl, con);
+        main.add(fl);
+        con.gridy = 1;
+        gbl.setConstraints(tl, con);
+        main.add(tl);
+        con.weightx = 1;
+        con.gridx = 1;
+        con.gridy = 0;
+        gbl.setConstraints(from, con);
+        main.add(from);
+        con.gridy = 1;
+        gbl.setConstraints(to, con);
+        main.add(to);
+
+               // Option buttons:
+        con.gridx = GridBagConstraints.RELATIVE;
+        con.gridy = GridBagConstraints.RELATIVE;
+        con.weightx = 1;
+        con.gridwidth = 1;
+        con.anchor = GridBagConstraints.EAST;
+        con.fill = GridBagConstraints.NONE;
+        gbl.setConstraints(ok, con);
+        opt.add(ok);
+        con.anchor = GridBagConstraints.WEST;
+        con.gridwidth = GridBagConstraints.REMAINDER;
+        gbl.setConstraints(cancel, con);
+        opt.add(cancel);
+
+        getContentPane().add(main, BorderLayout.NORTH);
+        getContentPane().add(settings, BorderLayout.CENTER);
+        getContentPane().add(opt, BorderLayout.SOUTH);
+
+        pack();
+        //setSize(400, 170);
+
+        Util.placeDialog(this, parent);
+    }
+
+    public boolean okPressed() { return ok_pressed; }
+    public boolean allFields() { return allFi.isSelected(); }
+    public boolean selOnly() { return selOnly.isSelected(); }
+    public String[] fields() { return Util.delimToStringArray(field.getText(), ";"); }
+
+    /**
+     * Does the actual operation on a Bibtex entry based on the
+     * settings specified in this same dialog. Returns the number of
+     * occurences replaced.
+     */
+    public int replace(BibtexEntry be, NamedCompound ce) {
+        int counter = 0;
+        if (allFields()) {
+        	
+        	for (String s : be.getAllFields()){
+                if (!s.equals(BibtexFields.KEY_FIELD))
+                    counter += replaceField(be, s, ce);
+            }
+        } else {
+            for (int i=0; i<flds.length; i++) {
+                if (!flds[i].equals(BibtexFields.KEY_FIELD))
+                    counter += replaceField(be, flds[i], ce);
+            }
+
+        }
+        return counter;
+    }
+
+    public int replaceField(BibtexEntry be, String field, NamedCompound ce) {
+        Object o = be.getField(field);
+        if (o == null) return 0;
+        String txt = o.toString();
+        StringBuffer sb = new StringBuffer();
+        int ind = -1, piv = 0, counter = 0, len1 = s1.length();
+        while ((ind=txt.indexOf(s1, piv)) >= 0) {
+            counter++;
+            sb.append(txt.substring(piv, ind)); // Text leading up to s1
+            sb.append(s2);  // Insert s2
+            piv = ind+len1;
+        }
+        sb.append(txt.substring(piv));
+        String newStr = sb.toString();
+        be.setField(field, newStr);
+        ce.addEdit(new UndoableFieldChange(be, field, txt, newStr));
+        return counter;
+    }
+}
diff --git a/src/java/net/sf/jabref/RightClickMenu.java b/src/java/net/sf/jabref/RightClickMenu.java
index 05a7e43..ccd3052 100644
--- a/src/java/net/sf/jabref/RightClickMenu.java
+++ b/src/java/net/sf/jabref/RightClickMenu.java
@@ -1,427 +1,427 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.Font;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.*;
-import javax.swing.event.PopupMenuEvent;
-import javax.swing.event.PopupMenuListener;
-
-import net.sf.jabref.groups.*;
-import net.sf.jabref.specialfields.Priority;
-import net.sf.jabref.specialfields.Quality;
-import net.sf.jabref.specialfields.Rank;
-import net.sf.jabref.specialfields.Relevance;
-import net.sf.jabref.specialfields.SpecialField;
-import net.sf.jabref.specialfields.SpecialFieldValue;
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-
-public class RightClickMenu extends JPopupMenu
-        implements PopupMenuListener {
-
-    BasePanel panel;
-    MetaData metaData;
-    JMenu groupAddMenu = new JMenu(Globals.lang("Add to group")),
-            groupRemoveMenu = new JMenu(Globals.lang("Remove from group")),
-            groupMoveMenu = new JMenu(Globals.lang("Assign exclusively to group")), // JZTODO lyrics
-            rankingMenu = new JMenu(),
-            priorityMenu = new JMenu(),
-            typeMenu = new JMenu(Globals.lang("Change entry type"));
-    JCheckBoxMenuItem
-            floatMarked = new JCheckBoxMenuItem(Globals.lang("Float marked entries"),
-            Globals.prefs.getBoolean("floatMarkedEntries"));
-
-    public RightClickMenu(BasePanel panel_, MetaData metaData_) {
-        panel = panel_;
-        metaData = metaData_;
-
-        // Are multiple entries selected? 
-        boolean multiple = (panel.mainTable.getSelectedRowCount() > 1);
-
-        // If only one entry is selected, get a reference to it for adapting the menu.
-        BibtexEntry be = null;
-        if (panel.mainTable.getSelectedRowCount() == 1)
-            be = panel.mainTable.getSelected().get(0);
-
-        addPopupMenuListener(this);
-
-        add(new AbstractAction(Globals.lang("Copy"), GUIGlobals.getImage("copy")) {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    panel.runCommand("copy");
-                } catch (Throwable ex) {}
-            }
-        });
-        add(new AbstractAction(Globals.lang("Paste"), GUIGlobals.getImage("paste")) {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    panel.runCommand("paste");
-                } catch (Throwable ex) {}
-            }
-        });
-        add(new AbstractAction(Globals.lang("Cut"), GUIGlobals.getImage("cut")) {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    panel.runCommand("cut");
-                } catch (Throwable ex) {}
-            }
-        });
-
-        add(new AbstractAction(Globals.lang("Delete"), GUIGlobals.getImage("delete")) {
-            public void actionPerformed(ActionEvent e) {
-                /*SwingUtilities.invokeLater(new Runnable () {
-             public void run() {*/
-                try {
-                    panel.runCommand("delete");
-                } catch (Throwable ex) {}
-                /*}
-               }); */
-
-            }
-        });
-        addSeparator();
-
-        add(new AbstractAction(Globals.lang("Export to clipboard")) {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    panel.runCommand("exportToClipboard");
-                } catch (Throwable ex) {}
-            }
-        });
-        add(new AbstractAction(Globals.lang("Send as email")) {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    panel.runCommand("sendAsEmail");
-                } catch (Throwable ex) {}
-            }
-        });
-        addSeparator();
-
-        JMenu markSpecific = JabRefFrame.subMenu("Mark specific color");
-        JabRefFrame frame = panel.frame;
-        for (int i=0; i<Util.MAX_MARKING_LEVEL; i++)
-            markSpecific.add(new MarkEntriesAction(frame, i).getMenuItem());
-
-        if (multiple) {
-            add(new AbstractAction(Globals.lang("Mark entries"), GUIGlobals.getImage("markEntries")) {
-                public void actionPerformed(ActionEvent e) {
-                    try {
-                        panel.runCommand("markEntries");
-                    } catch (Throwable ex) {}
-                }
-            });
-
-            add(markSpecific);
-
-            add(new AbstractAction(Globals.lang("Unmark entries"), GUIGlobals.getImage("unmarkEntries")) {
-                public void actionPerformed(ActionEvent e) {
-                    try {
-                        panel.runCommand("unmarkEntries");
-                    } catch (Throwable ex) {}
-                }
-            });
-            addSeparator();
-        } else if (be != null) {
-            if (be.getField(BibtexFields.MARKED) == null) {
-
-                add(new AbstractAction(Globals.lang("Mark entry"), GUIGlobals.getImage("markEntries")) {
-                    public void actionPerformed(ActionEvent e) {
-                        try {
-                            panel.runCommand("markEntries");
-                        } catch (Throwable ex) {}
-                    }
-                });
-
-                add(markSpecific);
-            } else {
-                add(markSpecific);
-                add(new AbstractAction(Globals.lang("Unmark entry"), GUIGlobals.getImage("unmarkEntries")) {
-                    public void actionPerformed(ActionEvent e) {
-                        try {
-                            panel.runCommand("unmarkEntries");
-                        } catch (Throwable ex) {}
-                    }
-                });
-            }
-            addSeparator();
-        }
-
-        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED)) {
-        	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING)) {
-        		populateSpecialFieldMenu(this.rankingMenu, Rank.getInstance(), panel.frame);
-    	        add(this.rankingMenu);
-        	}
-	        
-	        // TODO: multiple handling for relevance and quality-assurance
-	        // if multiple values are selected ("if (multiple)"), two options (set / clear) should be offered
-	        // if one value is selected either set or clear should be offered
-        	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE)) {
-        		add(Relevance.getInstance().getValues().get(0).getMenuAction(panel.frame));
-        	}
-        	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY)) {
-        		add(Quality.getInstance().getValues().get(0).getMenuAction(panel.frame));
-        	}
-
-        	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY)) {
-		        populateSpecialFieldMenu(this.priorityMenu, Priority.getInstance(), panel.frame);
-		        add(this.priorityMenu);
-        	}
-	        
-	        addSeparator();
-        }
-        
-        add(new AbstractAction(Globals.lang("Open file"), GUIGlobals.getImage("openExternalFile")) {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    panel.runCommand("openExternalFile");
-                } catch (Throwable ex) {}
-            }
-        });
-
-        add(new AbstractAction(Globals.lang("Attach file"), GUIGlobals.getImage("open")) {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    panel.runCommand("addFileLink");
-                } catch (Throwable ex) {}
-            }
-        });
-        /*add(new AbstractAction(Globals.lang("Open PDF or PS"), GUIGlobals.getImage("openFile")) {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    panel.runCommand("openFile");
-                } catch (Throwable ex) {}
-            }
-        });*/
-
-        add(new AbstractAction(Globals.lang("Open URL or DOI"), GUIGlobals.getImage("www")) {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    panel.runCommand("openUrl");
-                } catch (Throwable ex) {}
-            }
-        });
-
-        add(new AbstractAction(Globals.lang("Copy BibTeX key")) {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    panel.runCommand("copyKey");
-                } catch (Throwable ex) {}
-            }
-        });
-
-        add(new AbstractAction(Globals.lang("Copy")+" \\cite{"+Globals.lang("BibTeX key")+"}") {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    panel.runCommand("copyCiteKey");
-                } catch (Throwable ex) {}
-            }
-        });
-
-        addSeparator();
-        populateTypeMenu();
-
-        add(typeMenu);
-        add(new AbstractAction(Globals.lang("Plain text import"))
-        {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    panel.runCommand("importPlainText");
-                } catch (Throwable ex) {}
-            }
-        });
-        
-        add(JabRef.jrf.massSetField);
-        add(JabRef.jrf.manageKeywords);
-        
-        addSeparator(); // for "add/move/remove to/from group" entries (appended here)
-
-        floatMarked.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                Globals.prefs.putBoolean("floatMarkedEntries", floatMarked.isSelected());
-                panel.mainTable.refreshSorting(); // Bad remote access
-            }
-        });
-    }
-    
-    /**
-     * Remove all types from the menu. Then cycle through all available
-     * types, and add them.
-     */
-    public void populateTypeMenu() {
-        typeMenu.removeAll();
-        for (String key : BibtexEntryType.ALL_TYPES.keySet()){
-            typeMenu.add(new ChangeTypeAction
-                    (BibtexEntryType.getType(key), panel));
-        }
-    }
-    
-    /**
-     * Remove all types from the menu. 
-     * Then cycle through all available values, and add them.
-     */
-    public static void populateSpecialFieldMenu(JMenu menu, SpecialField field, JabRefFrame frame) {
-        //menu.removeAll();
-    	menu.setText(field.getMenuString());
-        menu.setIcon(field.getRepresentingIcon());
-        for (SpecialFieldValue val: field.getValues()) {
-        	menu.add(val.getMenuAction(frame));
-        }
-    }
-    
-    /**
-     * Set the dynamic contents of "Add to group ..." submenu.
-     */
-    public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-        BibtexEntry[] bes = panel.getSelectedEntries();
-        panel.storeCurrentEdit();
-        GroupTreeNode groups = metaData.getGroups();
-        if (groups == null) {
-            groupAddMenu.setEnabled(false);
-            groupMoveMenu.setEnabled(false);
-            groupRemoveMenu.setEnabled(false);
-            return;
-        }
-
-        groupAddMenu.setEnabled(true);
-        groupMoveMenu.setEnabled(true);
-        groupRemoveMenu.setEnabled(true);
-        groupAddMenu.removeAll();
-        groupMoveMenu.removeAll();
-        groupRemoveMenu.removeAll();
-
-        if (bes == null)
-            return;
-        add(groupAddMenu);
-        add(groupMoveMenu);
-        add(groupRemoveMenu);
-
-        groupAddMenu.setEnabled(false);
-        groupMoveMenu.setEnabled(false);
-        groupRemoveMenu.setEnabled(false);
-        insertNodes(groupAddMenu,metaData.getGroups(),bes,true,false);
-        insertNodes(groupMoveMenu,metaData.getGroups(),bes,true,true);
-        insertNodes(groupRemoveMenu,metaData.getGroups(),bes,false,false);
-
-        addSeparator();
-        floatMarked.setSelected(Globals.prefs.getBoolean("floatMarkedEntries"));
-        add(floatMarked);
-    }
-
-    /**
-     * @param move For add: if true, remove from previous groups
-     */
-    public void insertNodes(JMenu menu, GroupTreeNode node, BibtexEntry[] selection,
-                            boolean add, boolean move) {
-        final AbstractAction action = getAction(node,selection,add,move);
-
-        if (node.getChildCount() == 0) {
-            JMenuItem menuItem = new JMenuItem(action);
-            setGroupFontAndIcon(menuItem, node.getGroup());
-            menu.add(menuItem);
-            if (action.isEnabled())
-                menu.setEnabled(true);
-            return;
-        }
-
-        JMenu submenu = null;
-        if (node.getGroup() instanceof AllEntriesGroup) {
-            for (int i = 0; i < node.getChildCount(); ++i) {
-                insertNodes(menu,(GroupTreeNode) node.getChildAt(i), selection, add, move);
-            }
-        } else {
-            submenu = new JMenu("["+node.getGroup().getName()+"]");
-            setGroupFontAndIcon(submenu, node.getGroup());
-            // setEnabled(true) is done above/below if at least one menu
-            // entry (item or submenu) is enabled
-            submenu.setEnabled(action.isEnabled());
-            JMenuItem menuItem = new JMenuItem(action);
-            setGroupFontAndIcon(menuItem, node.getGroup());
-            submenu.add(menuItem);
-            submenu.add(new Separator());
-            for (int i = 0; i < node.getChildCount(); ++i)
-                insertNodes(submenu,(GroupTreeNode) node.getChildAt(i), selection, add, move);
-            menu.add(submenu);
-            if (submenu.isEnabled())
-                menu.setEnabled(true);
-        }
-    }
-
-    /** Sets the font and icon to be used, depending on the group */
-    private void setGroupFontAndIcon(JMenuItem menuItem, AbstractGroup group) {
-        if (Globals.prefs.getBoolean("groupShowDynamic")) {
-            menuItem.setFont(menuItem.getFont().deriveFont(group.isDynamic() ?
-                    Font.ITALIC : Font.PLAIN));
-        }
-        if (Globals.prefs.getBoolean("groupShowIcons")) {
-            switch (group.getHierarchicalContext()) {
-                case AbstractGroup.INCLUDING:
-                    menuItem.setIcon(GUIGlobals.getImage("groupIncluding"));
-                    break;
-                case AbstractGroup.REFINING:
-                    menuItem.setIcon(GUIGlobals.getImage("groupRefining"));
-                    break;
-                default:
-                    menuItem.setIcon(GUIGlobals.getImage("groupRegular"));
-                    break;
-            }
-        }
-    }
-
-    /**
-     * @param move For add: if true, remove from all previous groups
-     */
-    private AbstractAction getAction(GroupTreeNode node, BibtexEntry[] selection,
-                                     boolean add, boolean move) {
-        AbstractAction action = add ? (AbstractAction) new AddToGroupAction(node, move,
-                panel) : (AbstractAction) new RemoveFromGroupAction(node, panel);
-        AbstractGroup group = node.getGroup();
-        if (!move) {
-            action.setEnabled(add ? group.supportsAdd() && !group.containsAll(selection)
-                    : group.supportsRemove() && group.containsAny(selection));
-        } else {
-            action.setEnabled(group.supportsAdd());
-        }
-        return action;
-    }
-
-    public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
-        remove(groupAddMenu);
-        remove(groupMoveMenu);
-        remove(groupRemoveMenu);
-    }
-
-    public void popupMenuCanceled(PopupMenuEvent e) {
-        // nothing to do
-    }
-
-    class ChangeTypeAction extends AbstractAction {
-        BibtexEntryType type;
-        BasePanel panel;
-
-        public ChangeTypeAction(BibtexEntryType type, BasePanel bp) {
-            super(type.getName());
-            this.type = type;
-            panel = bp;
-        }
-        public void actionPerformed(ActionEvent evt) {
-            panel.changeType(type);
-        }
-    }
-    
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.*;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+
+import net.sf.jabref.groups.*;
+import net.sf.jabref.specialfields.Priority;
+import net.sf.jabref.specialfields.Quality;
+import net.sf.jabref.specialfields.Rank;
+import net.sf.jabref.specialfields.Relevance;
+import net.sf.jabref.specialfields.SpecialField;
+import net.sf.jabref.specialfields.SpecialFieldValue;
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+
+public class RightClickMenu extends JPopupMenu
+        implements PopupMenuListener {
+
+    BasePanel panel;
+    MetaData metaData;
+    JMenu groupAddMenu = new JMenu(Globals.lang("Add to group")),
+            groupRemoveMenu = new JMenu(Globals.lang("Remove from group")),
+            groupMoveMenu = new JMenu(Globals.lang("Assign exclusively to group")), // JZTODO lyrics
+            rankingMenu = new JMenu(),
+            priorityMenu = new JMenu(),
+            typeMenu = new JMenu(Globals.lang("Change entry type"));
+    JCheckBoxMenuItem
+            floatMarked = new JCheckBoxMenuItem(Globals.lang("Float marked entries"),
+            Globals.prefs.getBoolean("floatMarkedEntries"));
+
+    public RightClickMenu(BasePanel panel_, MetaData metaData_) {
+        panel = panel_;
+        metaData = metaData_;
+
+        // Are multiple entries selected? 
+        boolean multiple = (panel.mainTable.getSelectedRowCount() > 1);
+
+        // If only one entry is selected, get a reference to it for adapting the menu.
+        BibtexEntry be = null;
+        if (panel.mainTable.getSelectedRowCount() == 1)
+            be = panel.mainTable.getSelected().get(0);
+
+        addPopupMenuListener(this);
+
+        add(new AbstractAction(Globals.lang("Copy"), GUIGlobals.getImage("copy")) {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    panel.runCommand("copy");
+                } catch (Throwable ex) {}
+            }
+        });
+        add(new AbstractAction(Globals.lang("Paste"), GUIGlobals.getImage("paste")) {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    panel.runCommand("paste");
+                } catch (Throwable ex) {}
+            }
+        });
+        add(new AbstractAction(Globals.lang("Cut"), GUIGlobals.getImage("cut")) {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    panel.runCommand("cut");
+                } catch (Throwable ex) {}
+            }
+        });
+
+        add(new AbstractAction(Globals.lang("Delete"), GUIGlobals.getImage("delete")) {
+            public void actionPerformed(ActionEvent e) {
+                /*SwingUtilities.invokeLater(new Runnable () {
+             public void run() {*/
+                try {
+                    panel.runCommand("delete");
+                } catch (Throwable ex) {}
+                /*}
+               }); */
+
+            }
+        });
+        addSeparator();
+
+        add(new AbstractAction(Globals.lang("Export to clipboard")) {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    panel.runCommand("exportToClipboard");
+                } catch (Throwable ex) {}
+            }
+        });
+        add(new AbstractAction(Globals.lang("Send as email")) {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    panel.runCommand("sendAsEmail");
+                } catch (Throwable ex) {}
+            }
+        });
+        addSeparator();
+
+        JMenu markSpecific = JabRefFrame.subMenu("Mark specific color");
+        JabRefFrame frame = panel.frame;
+        for (int i=0; i<Util.MAX_MARKING_LEVEL; i++)
+            markSpecific.add(new MarkEntriesAction(frame, i).getMenuItem());
+
+        if (multiple) {
+            add(new AbstractAction(Globals.lang("Mark entries"), GUIGlobals.getImage("markEntries")) {
+                public void actionPerformed(ActionEvent e) {
+                    try {
+                        panel.runCommand("markEntries");
+                    } catch (Throwable ex) {}
+                }
+            });
+
+            add(markSpecific);
+
+            add(new AbstractAction(Globals.lang("Unmark entries"), GUIGlobals.getImage("unmarkEntries")) {
+                public void actionPerformed(ActionEvent e) {
+                    try {
+                        panel.runCommand("unmarkEntries");
+                    } catch (Throwable ex) {}
+                }
+            });
+            addSeparator();
+        } else if (be != null) {
+            if (be.getField(BibtexFields.MARKED) == null) {
+
+                add(new AbstractAction(Globals.lang("Mark entry"), GUIGlobals.getImage("markEntries")) {
+                    public void actionPerformed(ActionEvent e) {
+                        try {
+                            panel.runCommand("markEntries");
+                        } catch (Throwable ex) {}
+                    }
+                });
+
+                add(markSpecific);
+            } else {
+                add(markSpecific);
+                add(new AbstractAction(Globals.lang("Unmark entry"), GUIGlobals.getImage("unmarkEntries")) {
+                    public void actionPerformed(ActionEvent e) {
+                        try {
+                            panel.runCommand("unmarkEntries");
+                        } catch (Throwable ex) {}
+                    }
+                });
+            }
+            addSeparator();
+        }
+
+        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED)) {
+        	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING)) {
+        		populateSpecialFieldMenu(this.rankingMenu, Rank.getInstance(), panel.frame);
+    	        add(this.rankingMenu);
+        	}
+	        
+	        // TODO: multiple handling for relevance and quality-assurance
+	        // if multiple values are selected ("if (multiple)"), two options (set / clear) should be offered
+	        // if one value is selected either set or clear should be offered
+        	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE)) {
+        		add(Relevance.getInstance().getValues().get(0).getMenuAction(panel.frame));
+        	}
+        	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY)) {
+        		add(Quality.getInstance().getValues().get(0).getMenuAction(panel.frame));
+        	}
+
+        	if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY)) {
+		        populateSpecialFieldMenu(this.priorityMenu, Priority.getInstance(), panel.frame);
+		        add(this.priorityMenu);
+        	}
+	        
+	        addSeparator();
+        }
+        
+        add(new AbstractAction(Globals.lang("Open file"), GUIGlobals.getImage("openExternalFile")) {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    panel.runCommand("openExternalFile");
+                } catch (Throwable ex) {}
+            }
+        });
+
+        add(new AbstractAction(Globals.lang("Attach file"), GUIGlobals.getImage("open")) {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    panel.runCommand("addFileLink");
+                } catch (Throwable ex) {}
+            }
+        });
+        /*add(new AbstractAction(Globals.lang("Open PDF or PS"), GUIGlobals.getImage("openFile")) {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    panel.runCommand("openFile");
+                } catch (Throwable ex) {}
+            }
+        });*/
+
+        add(new AbstractAction(Globals.lang("Open URL or DOI"), GUIGlobals.getImage("www")) {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    panel.runCommand("openUrl");
+                } catch (Throwable ex) {}
+            }
+        });
+
+        add(new AbstractAction(Globals.lang("Copy BibTeX key")) {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    panel.runCommand("copyKey");
+                } catch (Throwable ex) {}
+            }
+        });
+
+        add(new AbstractAction(Globals.lang("Copy")+" \\cite{"+Globals.lang("BibTeX key")+"}") {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    panel.runCommand("copyCiteKey");
+                } catch (Throwable ex) {}
+            }
+        });
+
+        addSeparator();
+        populateTypeMenu();
+
+        add(typeMenu);
+        add(new AbstractAction(Globals.lang("Plain text import"))
+        {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    panel.runCommand("importPlainText");
+                } catch (Throwable ex) {}
+            }
+        });
+        
+        add(JabRef.jrf.massSetField);
+        add(JabRef.jrf.manageKeywords);
+        
+        addSeparator(); // for "add/move/remove to/from group" entries (appended here)
+
+        floatMarked.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                Globals.prefs.putBoolean("floatMarkedEntries", floatMarked.isSelected());
+                panel.mainTable.refreshSorting(); // Bad remote access
+            }
+        });
+    }
+    
+    /**
+     * Remove all types from the menu. Then cycle through all available
+     * types, and add them.
+     */
+    public void populateTypeMenu() {
+        typeMenu.removeAll();
+        for (String key : BibtexEntryType.ALL_TYPES.keySet()){
+            typeMenu.add(new ChangeTypeAction
+                    (BibtexEntryType.getType(key), panel));
+        }
+    }
+    
+    /**
+     * Remove all types from the menu. 
+     * Then cycle through all available values, and add them.
+     */
+    public static void populateSpecialFieldMenu(JMenu menu, SpecialField field, JabRefFrame frame) {
+        //menu.removeAll();
+    	menu.setText(field.getMenuString());
+        menu.setIcon(field.getRepresentingIcon());
+        for (SpecialFieldValue val: field.getValues()) {
+        	menu.add(val.getMenuAction(frame));
+        }
+    }
+    
+    /**
+     * Set the dynamic contents of "Add to group ..." submenu.
+     */
+    public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+        BibtexEntry[] bes = panel.getSelectedEntries();
+        panel.storeCurrentEdit();
+        GroupTreeNode groups = metaData.getGroups();
+        if (groups == null) {
+            groupAddMenu.setEnabled(false);
+            groupMoveMenu.setEnabled(false);
+            groupRemoveMenu.setEnabled(false);
+            return;
+        }
+
+        groupAddMenu.setEnabled(true);
+        groupMoveMenu.setEnabled(true);
+        groupRemoveMenu.setEnabled(true);
+        groupAddMenu.removeAll();
+        groupMoveMenu.removeAll();
+        groupRemoveMenu.removeAll();
+
+        if (bes == null)
+            return;
+        add(groupAddMenu);
+        add(groupMoveMenu);
+        add(groupRemoveMenu);
+
+        groupAddMenu.setEnabled(false);
+        groupMoveMenu.setEnabled(false);
+        groupRemoveMenu.setEnabled(false);
+        insertNodes(groupAddMenu,metaData.getGroups(),bes,true,false);
+        insertNodes(groupMoveMenu,metaData.getGroups(),bes,true,true);
+        insertNodes(groupRemoveMenu,metaData.getGroups(),bes,false,false);
+
+        addSeparator();
+        floatMarked.setSelected(Globals.prefs.getBoolean("floatMarkedEntries"));
+        add(floatMarked);
+    }
+
+    /**
+     * @param move For add: if true, remove from previous groups
+     */
+    public void insertNodes(JMenu menu, GroupTreeNode node, BibtexEntry[] selection,
+                            boolean add, boolean move) {
+        final AbstractAction action = getAction(node,selection,add,move);
+
+        if (node.getChildCount() == 0) {
+            JMenuItem menuItem = new JMenuItem(action);
+            setGroupFontAndIcon(menuItem, node.getGroup());
+            menu.add(menuItem);
+            if (action.isEnabled())
+                menu.setEnabled(true);
+            return;
+        }
+
+        JMenu submenu = null;
+        if (node.getGroup() instanceof AllEntriesGroup) {
+            for (int i = 0; i < node.getChildCount(); ++i) {
+                insertNodes(menu,(GroupTreeNode) node.getChildAt(i), selection, add, move);
+            }
+        } else {
+            submenu = new JMenu("["+node.getGroup().getName()+"]");
+            setGroupFontAndIcon(submenu, node.getGroup());
+            // setEnabled(true) is done above/below if at least one menu
+            // entry (item or submenu) is enabled
+            submenu.setEnabled(action.isEnabled());
+            JMenuItem menuItem = new JMenuItem(action);
+            setGroupFontAndIcon(menuItem, node.getGroup());
+            submenu.add(menuItem);
+            submenu.add(new Separator());
+            for (int i = 0; i < node.getChildCount(); ++i)
+                insertNodes(submenu,(GroupTreeNode) node.getChildAt(i), selection, add, move);
+            menu.add(submenu);
+            if (submenu.isEnabled())
+                menu.setEnabled(true);
+        }
+    }
+
+    /** Sets the font and icon to be used, depending on the group */
+    private void setGroupFontAndIcon(JMenuItem menuItem, AbstractGroup group) {
+        if (Globals.prefs.getBoolean("groupShowDynamic")) {
+            menuItem.setFont(menuItem.getFont().deriveFont(group.isDynamic() ?
+                    Font.ITALIC : Font.PLAIN));
+        }
+        if (Globals.prefs.getBoolean("groupShowIcons")) {
+            switch (group.getHierarchicalContext()) {
+                case AbstractGroup.INCLUDING:
+                    menuItem.setIcon(GUIGlobals.getImage("groupIncluding"));
+                    break;
+                case AbstractGroup.REFINING:
+                    menuItem.setIcon(GUIGlobals.getImage("groupRefining"));
+                    break;
+                default:
+                    menuItem.setIcon(GUIGlobals.getImage("groupRegular"));
+                    break;
+            }
+        }
+    }
+
+    /**
+     * @param move For add: if true, remove from all previous groups
+     */
+    private AbstractAction getAction(GroupTreeNode node, BibtexEntry[] selection,
+                                     boolean add, boolean move) {
+        AbstractAction action = add ? (AbstractAction) new AddToGroupAction(node, move,
+                panel) : (AbstractAction) new RemoveFromGroupAction(node, panel);
+        AbstractGroup group = node.getGroup();
+        if (!move) {
+            action.setEnabled(add ? group.supportsAdd() && !group.containsAll(selection)
+                    : group.supportsRemove() && group.containsAny(selection));
+        } else {
+            action.setEnabled(group.supportsAdd());
+        }
+        return action;
+    }
+
+    public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+        remove(groupAddMenu);
+        remove(groupMoveMenu);
+        remove(groupRemoveMenu);
+    }
+
+    public void popupMenuCanceled(PopupMenuEvent e) {
+        // nothing to do
+    }
+
+    class ChangeTypeAction extends AbstractAction {
+        BibtexEntryType type;
+        BasePanel panel;
+
+        public ChangeTypeAction(BibtexEntryType type, BasePanel bp) {
+            super(type.getName());
+            this.type = type;
+            panel = bp;
+        }
+        public void actionPerformed(ActionEvent evt) {
+            panel.changeType(type);
+        }
+    }
+    
+}
diff --git a/src/java/net/sf/jabref/SearchManager2.java b/src/java/net/sf/jabref/SearchManager2.java
index b9381ff..3e26edf 100644
--- a/src/java/net/sf/jabref/SearchManager2.java
+++ b/src/java/net/sf/jabref/SearchManager2.java
@@ -1,797 +1,798 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.Dimension;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.*;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Vector;
-
-import javax.swing.*;
-import javax.swing.event.CaretEvent;
-import javax.swing.event.CaretListener;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import net.sf.jabref.gui.AutoCompleteListener;
-import net.sf.jabref.search.BasicSearch;
-import net.sf.jabref.search.SearchExpression;
-import net.sf.jabref.search.SearchExpressionParser;
-import net.sf.jabref.search.SearchMatcher;
-import net.sf.jabref.gui.SearchResultsDialog;
-
-public class SearchManager2 extends SidePaneComponent
-    implements ActionListener, KeyListener, ItemListener, CaretListener, ErrorMessageDisplay {
-
-    private JabRefFrame frame;
-
-    GridBagLayout gbl = new GridBagLayout() ;
-    GridBagConstraints con = new GridBagConstraints() ;
-
-    IncrementalSearcher incSearcher;
-    SearchResultsDialog searchDialog = null;
-
-    AutoCompleteListener autoCompleteListener = null;
-    
-	/**
-	 * subscribed Objects
-	 */
-	private Vector<SearchTextListener> listeners = new Vector<SearchTextListener>();
-
-    //private JabRefFrame frame;
-    private JTextField searchField = new JTextField("", 12);
-    private JPopupMenu settings = new JPopupMenu();
-    private JButton openset = new JButton(Globals.lang("Settings"));
-    private JButton escape = new JButton(Globals.lang("Clear"));
-    private JButton help = new JButton(GUIGlobals.getImage("help"));
-    /** This button's text will be set later. */
-    private JButton search = new JButton();
-    private JCheckBoxMenuItem searchReq, searchOpt, searchGen,
-    searchAll, caseSensitive, regExpSearch, highLightWords, searchAutoComplete;
-
-    private JRadioButton increment, floatSearch, hideSearch, showResultsInDialog,
-        searchAllBases;
-    private JCheckBoxMenuItem select;
-    private ButtonGroup types = new ButtonGroup();
-    private boolean incSearch = false, startedFloatSearch=false, startedFilterSearch=false;
-
-    private int incSearchPos = -1; // To keep track of where we are in
-                   // an incremental search. -1 means
-                   // that the search is inactive.
-
-
-    public SearchManager2(JabRefFrame frame, SidePaneManager manager) {
-    super(manager, GUIGlobals.getIconUrl("search"), Globals.lang("Search"));
-
-        this.frame = frame;
-    incSearcher = new IncrementalSearcher(Globals.prefs);
-
-
-
-    //setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.magenta));
-
-        searchReq = new JCheckBoxMenuItem
-        (Globals.lang("Search required fields"),
-         Globals.prefs.getBoolean("searchReq"));
-    searchOpt = new JCheckBoxMenuItem
-        (Globals.lang("Search optional fields"),
-         Globals.prefs.getBoolean("searchOpt"));
-    searchGen = new JCheckBoxMenuItem
-        (Globals.lang("Search general fields"),
-         Globals.prefs.getBoolean("searchGen"));
-        searchAll = new JCheckBoxMenuItem
-        (Globals.lang("Search all fields"),
-         Globals.prefs.getBoolean("searchAll"));
-        regExpSearch = new JCheckBoxMenuItem
-        (Globals.lang("Use regular expressions"),
-         Globals.prefs.getBoolean("regExpSearch"));
-
-    increment = new JRadioButton(Globals.lang("Incremental"), false);
-    floatSearch = new JRadioButton(Globals.lang("Float"), true);
-    hideSearch = new JRadioButton(Globals.lang("Filter"), true);
-    showResultsInDialog = new JRadioButton(Globals.lang("Show results in dialog"), true);
-    searchAllBases = new JRadioButton(Globals.lang("Global search"),
-            Globals.prefs.getBoolean("searchAllBases"));
-    types.add(increment);
-    types.add(floatSearch);
-    types.add(hideSearch);
-    types.add(showResultsInDialog);
-    types.add(searchAllBases);
-
-        select = new JCheckBoxMenuItem(Globals.lang("Select matches"), false);
-        increment.setToolTipText(Globals.lang("Incremental search"));
-        floatSearch.setToolTipText(Globals.lang("Gray out non-matching entries"));
-        hideSearch.setToolTipText(Globals.lang("Hide non-matching entries"));
-        showResultsInDialog.setToolTipText(Globals.lang("Show search results in a window"));
-
-    // Add an item listener that makes sure we only listen for key events
-    // when incremental search is turned on.
-    increment.addItemListener(this);
-    floatSearch.addItemListener(this);
-    hideSearch.addItemListener(this);
-    showResultsInDialog.addItemListener(this);
-        // Add the global focus listener, so a menu item can see if this field was focused when
-        // an action was called.
-        searchField.addFocusListener(Globals.focusListener);
-
-
-    if (searchAll.isSelected()) {
-        searchReq.setEnabled(false);
-        searchOpt.setEnabled(false);
-        searchGen.setEnabled(false);
-    }
-    searchAll.addChangeListener(new ChangeListener() {
-        public void stateChanged(ChangeEvent event) {
-            boolean state = !searchAll.isSelected();
-            searchReq.setEnabled(state);
-            searchOpt.setEnabled(state);
-            searchGen.setEnabled(state);
-        }
-    });
-
-        caseSensitive = new JCheckBoxMenuItem(Globals.lang("Case sensitive"),
-                      Globals.prefs.getBoolean("caseSensitiveSearch"));
-        
-        highLightWords = new JCheckBoxMenuItem(Globals.lang("Highlight Words"),
-        		Globals.prefs.getBoolean("highLightWords"));
-
-        searchAutoComplete = new JCheckBoxMenuItem(Globals.lang("Autocomplete names"),
-                Globals.prefs.getBoolean("searchAutoComplete"));
-    settings.add(select);
-
-    // 2005.03.29, trying to remove field category searches, to simplify
-        // search usability.
-    //settings.addSeparator();
-    //settings.add(searchReq);
-    //settings.add(searchOpt);
-    //settings.add(searchGen);
-    //settings.addSeparator();
-    //settings.add(searchAll);
-    // ---------------------------------------------------------------
-    settings.addSeparator();
-        settings.add(caseSensitive);
-    settings.add(regExpSearch);
-    settings.addSeparator();
-    settings.add(highLightWords);
-    settings.addSeparator();
-    settings.add(searchAutoComplete);
-
-    searchField.addActionListener(this);
-    searchField.addCaretListener(this);
-        search.addActionListener(this);
-    searchField.addFocusListener(new FocusAdapter() {
-          public void focusGained(FocusEvent e) {
-            if (increment.isSelected())
-              searchField.setText("");
-          }
-        public void focusLost(FocusEvent e) {
-            incSearch = false;
-            incSearchPos = -1; // Reset incremental
-                       // search. This makes the
-                       // incremental search reset
-                       // once the user moves focus to
-                       // somewhere else.
-                    if (increment.isSelected()) {
-                      //searchField.setText("");
-                      //System.out.println("focuslistener");
-                    }
-        }
-        });
-    escape.addActionListener(this);
-    escape.setEnabled(false); // enabled after searching
-
-    openset.addActionListener(new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-                  if (settings.isVisible()) {
-                    //System.out.println("oee");
-                    //settings.setVisible(false);
-                  }
-                  else {
-                    JButton src = (JButton) e.getSource();
-                    settings.show(src, 0, openset.getHeight());
-                  }
-        }
-        });
-
-    searchAutoComplete.addActionListener(new ActionListener() {
-        public void actionPerformed(ActionEvent actionEvent) {
-            Globals.prefs.putBoolean("searchAutoComplete", searchAutoComplete.isSelected());
-            if (SearchManager2.this.frame.basePanel() != null) {
-                SearchManager2.this.frame.basePanel().updateSearchManager();
-            }
-
-        }
-    });
-            Insets margin = new Insets(0, 2, 0, 2);
-            //search.setMargin(margin);
-            escape.setMargin(margin);
-            openset.setMargin(margin);
-            int butSize = help.getIcon().getIconHeight() + 5;
-            Dimension butDim = new Dimension(butSize, butSize);
-            help.setPreferredSize(butDim);
-            help.setMinimumSize(butDim);
-            help.setMargin(margin);
-            help.addActionListener(new HelpAction(Globals.helpDiag, GUIGlobals.searchHelp, "Help"));
-
-    // Select the last used mode of search:
-    if (Globals.prefs.getBoolean("incrementS"))
-        increment.setSelected(true);
-    else if (Globals.prefs.getBoolean("floatSearch"))
-        floatSearch.setSelected(true);
-    else if (Globals.prefs.getBoolean("showSearchInDialog"))
-        showResultsInDialog.setSelected(true);
-    else if (Globals.prefs.getBoolean("searchAllBases"))
-        searchAllBases.setSelected(true);
-    else
-        hideSearch.setSelected(true);
-
-    JPanel main = new JPanel();
-    main.setLayout(gbl);
-    con.gridwidth = GridBagConstraints.REMAINDER;
-    con.fill = GridBagConstraints.BOTH;
-        con.weightx = 1;
-
-        gbl.setConstraints(searchField,con);
-        main.add(searchField) ;
-        //con.gridwidth = 1;
-        gbl.setConstraints(search,con);
-        main.add(search) ;
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        gbl.setConstraints(escape,con);
-        main.add(escape) ;
-        con.insets = new Insets(0, 2, 0,  0);
-        gbl.setConstraints(increment, con);
-        main.add(increment);
-        gbl.setConstraints(floatSearch, con);
-        main.add(floatSearch);
-        gbl.setConstraints(hideSearch, con);
-        main.add(hideSearch);
-        gbl.setConstraints(showResultsInDialog, con);
-        main.add(showResultsInDialog);
-        gbl.setConstraints(searchAllBases, con);
-        main.add(searchAllBases);
-    con.insets = new Insets(0, 0, 0,  0);
-        JPanel pan = new JPanel();
-        GridBagLayout gb = new GridBagLayout();
-        gbl.setConstraints(pan, con);
-        pan.setLayout(gb);
-        con.weightx = 1;
-        con.gridwidth = 1;
-        gb.setConstraints(openset, con);
-        pan.add(openset);
-        con.weightx = 0;
-        gb.setConstraints(help, con);
-        pan.add(help);
-        main.add(pan);
-        main.setBorder(BorderFactory.createEmptyBorder(1,1,1,1));
-        
-        setContent(main);
-
-    searchField.getInputMap().put(Globals.prefs.getKey("Repeat incremental search"),
-                      "repeat");
-
-    searchField.getActionMap().put("repeat", new AbstractAction() {
-        public void actionPerformed(ActionEvent e) {
-            if (increment.isSelected())
-            repeatIncremental();
-        }
-        });
-    searchField.getInputMap().put(Globals.prefs.getKey("Clear search"), "escape");
-    searchField.getActionMap().put("escape", new AbstractAction() {
-        public void actionPerformed(ActionEvent e) {
-            hideAway();
-            //SearchManager2.this.actionPerformed(new ActionEvent(escape, 0, ""));
-        }
-        });
-    setSearchButtonSizes();
-    updateSearchButtonText();
-    }
-
-    public void setAutoCompleteListener(AutoCompleteListener listener) {
-        this.autoCompleteListener = listener;
-        updateKeyListeners();
-    }
-
-    /**
-     * Add the correct key listeners to the search text field, depending on whether
-     * and autocomplete listener has been set and whether incremental search
-     * is selected.
-     */
-    protected void updateKeyListeners() {
-        KeyListener[] listeners = searchField.getKeyListeners();
-        for (int i = 0; i < listeners.length; i++) {
-            searchField.removeKeyListener(listeners[i]);
-        }
-        if (increment.isSelected()) {
-            searchField.addKeyListener(this);
-        }
-        else {
-            if (searchAutoComplete.isSelected() && autoCompleteListener != null)
-                searchField.addKeyListener(autoCompleteListener);
-        }
-    }
-
-	/**
-	 * Subscribe to the SearchListener and receive events, if the user searches for some thing. You
-	 * will receive a list of words
-	 * 
-	 * @param l
-	 */
-	public void addSearchListener(SearchTextListener l) {
-		if (listeners.contains(l))
-			return;
-		else
-			listeners.add(l);
-		//fire event for the new subscriber
-		l.searchText(getSearchwords(searchField.getText()));
-	}
-
-	/**
-	 * Remove object from the SearchListener
-	 * @param l
-	 */
-	public void removeSearchListener(SearchTextListener l) {
-		listeners.remove(l);
-	}
-
-	/**
-	 * parse the search string for valid words and return a list of words
-	 * Like "The great Vikinger" will be ["The","great","Vikinger"] 
-	 * 
-	 * @param t
-	 * @return
-	 */
-	private ArrayList<String> getSearchwords(String t) {
-		// for now ... just seperate words by whitespace
-		String[] strings = t.split(" ");
-		ArrayList<String> words = new ArrayList<String>(strings.length);
-		for (int i = 0; i < strings.length; i++) {
-			words.add(strings[i]);
-		}
-		return words;
-	}
-    /**
-     * Fires an event if a search was started / canceled
-     * @param t
-     */
-    private void fireSearchlistenerEvent(String t){
-    	// parse the Search string to words    	
-    	ArrayList<String> words;
-    	if ((t == null) || (t.isEmpty())) {
-    		words = null;
-    	} else { 
-    		words = getSearchwords(t);
-    	}
-    	
-    	//fire an event for every listener
-    	for(SearchTextListener s: listeners)s.searchText(words);
-    }
-    
-    
-    /** force the search button to be large enough for
-     * the longer of the two texts */
-    private void setSearchButtonSizes() {
-        search.setText(Globals.lang("Search Specified Field(s)"));
-        Dimension size1 = search.getPreferredSize();
-        search.setText(Globals.lang("Search All Fields"));
-        Dimension size2 = search.getPreferredSize();
-        size2.width = Math.max(size1.width,size2.width);
-        search.setMinimumSize(size2);
-        search.setPreferredSize(size2);
-    }
-
-    /**
-     * Instantiate the search dialog, unless it has already been instantiated:
-     */
-    protected void instantiateSearchDialog() {
-        if (searchDialog == null)
-            searchDialog = new SearchResultsDialog(frame, Globals.lang("Search results"));
-    }
-
-    public void updatePrefs() {
-        Globals.prefs.putBoolean("searchReq", searchReq.isSelected());
-        Globals.prefs.putBoolean("searchOpt", searchOpt.isSelected());
-        Globals.prefs.putBoolean("searchGen", searchGen.isSelected());
-        Globals.prefs.putBoolean("searchAll", searchAll.isSelected());
-        Globals.prefs.putBoolean("incrementS", increment.isSelected());
-        Globals.prefs.putBoolean("selectS", select.isSelected());
-        Globals.prefs.putBoolean("floatSearch", floatSearch.isSelected());
-        Globals.prefs.putBoolean("caseSensitiveSearch",
-                 caseSensitive.isSelected());
-        Globals.prefs.putBoolean("regExpSearch", regExpSearch.isSelected());
-        Globals.prefs.putBoolean("highLightWords", highLightWords.isSelected());
-        Globals.prefs.putBoolean("showSearchInDialog", showResultsInDialog.isSelected());
-        Globals.prefs.putBoolean("searchAllBases", searchAllBases.isSelected());
-    }
-
-    public void startIncrementalSearch() {
-    increment.setSelected(true);
-    searchField.setText("");
-        //System.out.println("startIncrementalSearch");
-    searchField.requestFocus();
-    }
-
-    /**
-     * Clears and focuses the search field if it is not
-     * focused. Otherwise, cycles to the next search type.
-     */
-    public void startSearch() {
-    if (increment.isSelected() && incSearch) {
-        repeatIncremental();
-        return;
-    }
-    if (!searchField.hasFocus()) {
-        //searchField.setText("");
-            searchField.selectAll();
-        searchField.requestFocus();
-    } else {
-        if (increment.isSelected())
-            floatSearch.setSelected(true);
-        else if (floatSearch.isSelected())
-            hideSearch.setSelected(true);
-        else if (hideSearch.isSelected())
-            showResultsInDialog.setSelected(true);
-        else if (showResultsInDialog.isSelected())
-            searchAllBases.setSelected(true);
-        else {
-            increment.setSelected(true);
-        }
-        increment.revalidate();
-        increment.repaint();
-
-        searchField.requestFocus();
-
-    }
-    }
-    
-    private void clearSearchLater() {
-        if (panel != null) {
-            Thread t = new Thread() {
-                public void run() {
-                    clearSearch();
-                }
-            };
-            // do this after the button action is over
-            SwingUtilities.invokeLater(t);
-        }
-    }
-
-    public void actionPerformed(ActionEvent e) {
-
-    if (e.getSource() == escape) {
-        incSearch = false;
-        clearSearchLater();
-    }
-    else if (((e.getSource() == searchField) || (e.getSource() == search))
-         && !increment.isSelected()
-         && (panel != null)) {
-
-        updatePrefs(); // Make sure the user's choices are recorded.
-        if (searchField.getText().equals("")) {
-            // An empty search field should cause the search to be cleared.
-            clearSearchLater();
-            return;
-        }
-
-        fireSearchlistenerEvent(searchField.getText());
-            
-        // Setup search parameters common to both normal and float.
-        Hashtable<String, String> searchOptions = new Hashtable<String, String>();
-        searchOptions.put("option",searchField.getText()) ;
-        SearchRuleSet searchRules = new SearchRuleSet() ;
-        SearchRule rule1;
-
-        rule1 = new BasicSearch(Globals.prefs.getBoolean("caseSensitiveSearch"),
-                Globals.prefs.getBoolean("regExpSearch"));
-
-        try {
-            // this searches specified fields if specified,
-            // and all fields otherwise
-            rule1 = new SearchExpression(Globals.prefs,searchOptions);
-        } catch (Exception ex) {
-            // we'll do a search in all fields
-        }
-
-        searchRules.addRule(rule1) ;
-
-        if (!searchRules.validateSearchStrings(searchOptions)) {
-            panel.output(Globals.lang("Search failed: illegal search expression"));
-            panel.stopShowingSearchResults();
-            return;
-        }
-        SearchWorker worker = new SearchWorker(searchRules, searchOptions);
-        worker.getWorker().run();
-        worker.getCallBack().update();
-        escape.setEnabled(true);
-        
-    }
-    }
-
-    class SearchWorker extends AbstractWorker {
-        private SearchRuleSet rules;
-        Hashtable<String, String> searchTerm;
-        int hits = 0;
-        public SearchWorker(SearchRuleSet rules, Hashtable<String, String> searchTerm) {
-            this.rules = rules;
-            this.searchTerm = searchTerm;
-        }
-
-        public void run() {
-            if (!searchAllBases.isSelected()) {
-                // Search only the current database:
-                for (BibtexEntry entry : panel.getDatabase().getEntries()){
-
-                    boolean hit = rules.applyRule(searchTerm, entry) > 0;
-                    entry.setSearchHit(hit);
-                    if (hit) hits++;
-                }
-            }
-            else {
-                // Search all databases:
-                for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
-                    BasePanel p = frame.baseAt(i);
-                    for (BibtexEntry entry : p.getDatabase().getEntries()){
-
-                        boolean hit = rules.applyRule(searchTerm, entry) > 0;
-                        entry.setSearchHit(hit);
-                        if (hit) hits++;
-                    }
-                }
-            }
-        }
-
-        public void update() {
-            panel.output(Globals.lang("Searched database. Number of hits")
-                    + ": " + hits);
-
-            // Show the result in the chosen way:
-            if (searchAllBases.isSelected()) {
-                // Search all databases. This means we need to use the search results dialog.
-                // Turn off other search mode, if activated:
-                if (startedFloatSearch) {
-                    panel.mainTable.stopShowingFloatSearch();
-                    startedFloatSearch = false;
-                }
-                if (startedFilterSearch) {
-                    panel.stopShowingSearchResults();
-                    startedFilterSearch = false;
-                }
-                // Make sure the search dialog is instantiated and cleared:
-                instantiateSearchDialog();
-                searchDialog.clear();
-                for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
-                    BasePanel p = frame.baseAt(i);
-                    for (BibtexEntry entry : p.getDatabase().getEntries()){
-                        if (entry.isSearchHit())
-                            searchDialog.addEntry(entry, p);
-                    }
-                }
-                searchDialog.selectFirstEntry();
-                searchDialog.setVisible(true);
-            }
-
-            else if (showResultsInDialog.isSelected()) {
-                // Turn off other search mode, if activated:
-                if (startedFloatSearch) {
-                    panel.mainTable.stopShowingFloatSearch();
-                    startedFloatSearch = false;
-                }
-                if (startedFilterSearch) {
-                    panel.stopShowingSearchResults();
-                    startedFilterSearch = false;
-                }
-                // Make sure the search dialog is instantiated and cleared:
-                instantiateSearchDialog();
-                searchDialog.clear();
-                for (BibtexEntry entry : panel.getDatabase().getEntries()) {
-                    if (entry.isSearchHit())
-                        searchDialog.addEntry(entry, panel);
-                }
-                searchDialog.selectFirstEntry();
-                searchDialog.setVisible(true);
-            }
-            else if (hideSearch.isSelected()) {
-                // Filtering search - removes non-hits from the table:
-                if (startedFloatSearch) {
-                    panel.mainTable.stopShowingFloatSearch();
-                    startedFloatSearch = false;
-                }
-                startedFilterSearch = true;
-                panel.setSearchMatcher(SearchMatcher.INSTANCE);
-
-            } else {
-                // Float search - floats hits to the top of the table:
-                if (startedFilterSearch) {
-                    panel.stopShowingSearchResults();
-                    startedFilterSearch = false;
-                }
-                startedFloatSearch = true;
-                panel.mainTable.showFloatSearch(SearchMatcher.INSTANCE);
-
-            }
-
-            // Afterwards, select all text in the search field.
-            searchField.select(0, searchField.getText().length());
-
-        }
-    }
-
-    public void clearSearch() {
-        
-        if (panel.isShowingFloatSearch()) {
-            startedFloatSearch = false;
-            panel.mainTable.stopShowingFloatSearch();
-        } else if (panel.isShowingFilterSearch()) {
-            startedFilterSearch = false;
-            panel.stopShowingSearchResults();
-        }
-        
-        // clear search means that nothing is searched for
-        // even if a word is written in the text field,
-        // nothing should be highlighted
-        fireSearchlistenerEvent(null);
-        
-        // disable "Cancel" button to signal this to the user
-        escape.setEnabled(false);
-    }
-    public void itemStateChanged(ItemEvent e) {
-    if (e.getSource() == increment) {
-        if (startedFilterSearch || startedFloatSearch) {
-            clearSearch();
-        }
-        updateSearchButtonText();
-
-        // Make sure the correct key listener is activated:
-        updateKeyListeners();
-
-    } else /*if (e.getSource() == normal)*/ {
-        updateSearchButtonText();
-
-        // If this search type is disabled, remove reordering from
-        // all databases.
-        /*if ((panel != null) && increment.isSelected()) {
-            clearSearch();
-        } */
-    }
-    }
-
-    private void repeatIncremental() {
-    incSearchPos++;
-    if (panel != null)
-        goIncremental();
-    }
-
-    /**
-     * Used for incremental search. Only activated when incremental
-     * is selected.
-     *
-     * The variable incSearchPos keeps track of which entry was last
-     * checked.
-     */
-    public void keyTyped(KeyEvent e) {
-    if (e.isControlDown()) {
-        return;
-    }
-    if (panel != null)
-        goIncremental();
-    }
-
-    private void goIncremental() {
-    incSearch = true;
-    escape.setEnabled(true);
-    SwingUtilities.invokeLater(new Thread() {
-        public void run() {
-            String text = searchField.getText();
-
-
-            if (incSearchPos >= panel.getDatabase().getEntryCount()) {
-            panel.output("'"+text+"' : "+Globals.lang
-
-                     ("Incremental search failed. Repeat to search from top.")+".");
-            incSearchPos = -1;
-            return;
-            }
-
-            if (searchField.getText().equals("")) return;
-            if (incSearchPos < 0)
-            incSearchPos = 0;
-            BibtexEntry be = panel.mainTable.getEntryAt(incSearchPos);
-            while (!incSearcher.search(text, be)) {
-                incSearchPos++;
-                if (incSearchPos < panel.getDatabase().getEntryCount())
-                    be = panel.mainTable.getEntryAt(incSearchPos);
-            else {
-                panel.output("'"+text+"' : "+Globals.lang
-                     ("Incremental search failed. Repeat to search from top."));
-                incSearchPos = -1;
-                return;
-            }
-            }
-            if (incSearchPos >= 0) {
-
-            panel.selectSingleEntry(incSearchPos);
-            panel.output("'"+text+"' "+Globals.lang
-
-                     ("found")+".");
-
-            }
-        }
-        });
-    }
-
-    public void componentClosing() {
-    frame.searchToggle.setSelected(false);
-        if (panel != null) {
-            if (startedFilterSearch || startedFloatSearch)
-                clearSearch();
-        }
-    }
-
-
-    public void keyPressed(KeyEvent e) {}
-    public void keyReleased(KeyEvent e) {}
-
-    public void caretUpdate(CaretEvent e) {
-        if (e.getSource() == searchField) {
-            updateSearchButtonText();
-        }
-    }
-
-    /** Updates the text on the search button to reflect
-      * the type of search that will happen on click. */
-    private void updateSearchButtonText() {
-        search.setText(!increment.isSelected()
-                && SearchExpressionParser.checkSyntax(
-                searchField.getText(),
-                caseSensitive.isSelected(),
-                regExpSearch.isSelected()) != null
-                ? Globals.lang("Search Specified Field(s)")
-                : Globals.lang("Search All Fields"));
-    }
-
-    /**
-     * This method is required by the ErrorMessageDisplay interface, and lets this class
-     * serve as a callback for regular expression exceptions happening in DatabaseSearch.
-     * @param errorMessage
-     */
-    public void reportError(String errorMessage) {
-        JOptionPane.showMessageDialog(panel, errorMessage, Globals.lang("Search error"),
-                JOptionPane.ERROR_MESSAGE);
-    }
-
-    /**
-     * This method is required by the ErrorMessageDisplay interface, and lets this class
-     * serve as a callback for regular expression exceptions happening in DatabaseSearch.
-     * @param errorMessage
-     */
-    public void reportError(String errorMessage, Exception exception) {
-        reportError(errorMessage);
-    }
-
-
-    public void setActiveBasePanel(BasePanel panel) {
-        super.setActiveBasePanel(panel);
-        if (panel != null)
-            escape.setEnabled(panel.isShowingFloatSearch()
-                    || panel.isShowingFilterSearch());
-        else
-            escape.setEnabled(false);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.*;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import javax.swing.*;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.sf.jabref.gui.AutoCompleteListener;
+import net.sf.jabref.search.BasicSearch;
+import net.sf.jabref.search.SearchExpression;
+import net.sf.jabref.search.SearchExpressionParser;
+import net.sf.jabref.search.SearchMatcher;
+import net.sf.jabref.gui.SearchResultsDialog;
+import net.sf.jabref.help.HelpAction;
+
+public class SearchManager2 extends SidePaneComponent
+    implements ActionListener, KeyListener, ItemListener, CaretListener, ErrorMessageDisplay {
+
+    private JabRefFrame frame;
+
+    GridBagLayout gbl = new GridBagLayout() ;
+    GridBagConstraints con = new GridBagConstraints() ;
+
+    IncrementalSearcher incSearcher;
+    SearchResultsDialog searchDialog = null;
+
+    AutoCompleteListener autoCompleteListener = null;
+    
+	/**
+	 * subscribed Objects
+	 */
+	private Vector<SearchTextListener> listeners = new Vector<SearchTextListener>();
+
+    //private JabRefFrame frame;
+    private JTextField searchField = new JTextField("", 12);
+    private JPopupMenu settings = new JPopupMenu();
+    private JButton openset = new JButton(Globals.lang("Settings"));
+    private JButton escape = new JButton(Globals.lang("Clear"));
+    private JButton help = new JButton(GUIGlobals.getImage("help"));
+    /** This button's text will be set later. */
+    private JButton search = new JButton();
+    private JCheckBoxMenuItem searchReq, searchOpt, searchGen,
+    searchAll, caseSensitive, regExpSearch, highLightWords, searchAutoComplete;
+
+    private JRadioButton increment, floatSearch, hideSearch, showResultsInDialog,
+        searchAllBases;
+    private JCheckBoxMenuItem select;
+    private ButtonGroup types = new ButtonGroup();
+    private boolean incSearch = false, startedFloatSearch=false, startedFilterSearch=false;
+
+    private int incSearchPos = -1; // To keep track of where we are in
+                   // an incremental search. -1 means
+                   // that the search is inactive.
+
+
+    public SearchManager2(JabRefFrame frame, SidePaneManager manager) {
+    super(manager, GUIGlobals.getIconUrl("search"), Globals.lang("Search"));
+
+        this.frame = frame;
+    incSearcher = new IncrementalSearcher(Globals.prefs);
+
+
+
+    //setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.magenta));
+
+        searchReq = new JCheckBoxMenuItem
+        (Globals.lang("Search required fields"),
+         Globals.prefs.getBoolean("searchReq"));
+    searchOpt = new JCheckBoxMenuItem
+        (Globals.lang("Search optional fields"),
+         Globals.prefs.getBoolean("searchOpt"));
+    searchGen = new JCheckBoxMenuItem
+        (Globals.lang("Search general fields"),
+         Globals.prefs.getBoolean("searchGen"));
+        searchAll = new JCheckBoxMenuItem
+        (Globals.lang("Search all fields"),
+         Globals.prefs.getBoolean("searchAll"));
+        regExpSearch = new JCheckBoxMenuItem
+        (Globals.lang("Use regular expressions"),
+         Globals.prefs.getBoolean("regExpSearch"));
+
+    increment = new JRadioButton(Globals.lang("Incremental"), false);
+    floatSearch = new JRadioButton(Globals.lang("Float"), true);
+    hideSearch = new JRadioButton(Globals.lang("Filter"), true);
+    showResultsInDialog = new JRadioButton(Globals.lang("Show results in dialog"), true);
+    searchAllBases = new JRadioButton(Globals.lang("Global search"),
+            Globals.prefs.getBoolean("searchAllBases"));
+    types.add(increment);
+    types.add(floatSearch);
+    types.add(hideSearch);
+    types.add(showResultsInDialog);
+    types.add(searchAllBases);
+
+        select = new JCheckBoxMenuItem(Globals.lang("Select matches"), false);
+        increment.setToolTipText(Globals.lang("Incremental search"));
+        floatSearch.setToolTipText(Globals.lang("Gray out non-matching entries"));
+        hideSearch.setToolTipText(Globals.lang("Hide non-matching entries"));
+        showResultsInDialog.setToolTipText(Globals.lang("Show search results in a window"));
+
+    // Add an item listener that makes sure we only listen for key events
+    // when incremental search is turned on.
+    increment.addItemListener(this);
+    floatSearch.addItemListener(this);
+    hideSearch.addItemListener(this);
+    showResultsInDialog.addItemListener(this);
+        // Add the global focus listener, so a menu item can see if this field was focused when
+        // an action was called.
+        searchField.addFocusListener(Globals.focusListener);
+
+
+    if (searchAll.isSelected()) {
+        searchReq.setEnabled(false);
+        searchOpt.setEnabled(false);
+        searchGen.setEnabled(false);
+    }
+    searchAll.addChangeListener(new ChangeListener() {
+        public void stateChanged(ChangeEvent event) {
+            boolean state = !searchAll.isSelected();
+            searchReq.setEnabled(state);
+            searchOpt.setEnabled(state);
+            searchGen.setEnabled(state);
+        }
+    });
+
+        caseSensitive = new JCheckBoxMenuItem(Globals.lang("Case sensitive"),
+                      Globals.prefs.getBoolean("caseSensitiveSearch"));
+        
+        highLightWords = new JCheckBoxMenuItem(Globals.lang("Highlight Words"),
+        		Globals.prefs.getBoolean("highLightWords"));
+
+        searchAutoComplete = new JCheckBoxMenuItem(Globals.lang("Autocomplete names"),
+                Globals.prefs.getBoolean("searchAutoComplete"));
+    settings.add(select);
+
+    // 2005.03.29, trying to remove field category searches, to simplify
+        // search usability.
+    //settings.addSeparator();
+    //settings.add(searchReq);
+    //settings.add(searchOpt);
+    //settings.add(searchGen);
+    //settings.addSeparator();
+    //settings.add(searchAll);
+    // ---------------------------------------------------------------
+    settings.addSeparator();
+        settings.add(caseSensitive);
+    settings.add(regExpSearch);
+    settings.addSeparator();
+    settings.add(highLightWords);
+    settings.addSeparator();
+    settings.add(searchAutoComplete);
+
+    searchField.addActionListener(this);
+    searchField.addCaretListener(this);
+        search.addActionListener(this);
+    searchField.addFocusListener(new FocusAdapter() {
+          public void focusGained(FocusEvent e) {
+            if (increment.isSelected())
+              searchField.setText("");
+          }
+        public void focusLost(FocusEvent e) {
+            incSearch = false;
+            incSearchPos = -1; // Reset incremental
+                       // search. This makes the
+                       // incremental search reset
+                       // once the user moves focus to
+                       // somewhere else.
+                    if (increment.isSelected()) {
+                      //searchField.setText("");
+                      //System.out.println("focuslistener");
+                    }
+        }
+        });
+    escape.addActionListener(this);
+    escape.setEnabled(false); // enabled after searching
+
+    openset.addActionListener(new ActionListener() {
+        public void actionPerformed(ActionEvent e) {
+                  if (settings.isVisible()) {
+                    //System.out.println("oee");
+                    //settings.setVisible(false);
+                  }
+                  else {
+                    JButton src = (JButton) e.getSource();
+                    settings.show(src, 0, openset.getHeight());
+                  }
+        }
+        });
+
+    searchAutoComplete.addActionListener(new ActionListener() {
+        public void actionPerformed(ActionEvent actionEvent) {
+            Globals.prefs.putBoolean("searchAutoComplete", searchAutoComplete.isSelected());
+            if (SearchManager2.this.frame.basePanel() != null) {
+                SearchManager2.this.frame.basePanel().updateSearchManager();
+            }
+
+        }
+    });
+            Insets margin = new Insets(0, 2, 0, 2);
+            //search.setMargin(margin);
+            escape.setMargin(margin);
+            openset.setMargin(margin);
+            int butSize = help.getIcon().getIconHeight() + 5;
+            Dimension butDim = new Dimension(butSize, butSize);
+            help.setPreferredSize(butDim);
+            help.setMinimumSize(butDim);
+            help.setMargin(margin);
+            help.addActionListener(new HelpAction(Globals.helpDiag, GUIGlobals.searchHelp, "Help"));
+
+    // Select the last used mode of search:
+    if (Globals.prefs.getBoolean("incrementS"))
+        increment.setSelected(true);
+    else if (Globals.prefs.getBoolean("floatSearch"))
+        floatSearch.setSelected(true);
+    else if (Globals.prefs.getBoolean("showSearchInDialog"))
+        showResultsInDialog.setSelected(true);
+    else if (Globals.prefs.getBoolean("searchAllBases"))
+        searchAllBases.setSelected(true);
+    else
+        hideSearch.setSelected(true);
+
+    JPanel main = new JPanel();
+    main.setLayout(gbl);
+    con.gridwidth = GridBagConstraints.REMAINDER;
+    con.fill = GridBagConstraints.BOTH;
+        con.weightx = 1;
+
+        gbl.setConstraints(searchField,con);
+        main.add(searchField) ;
+        //con.gridwidth = 1;
+        gbl.setConstraints(search,con);
+        main.add(search) ;
+        con.gridwidth = GridBagConstraints.REMAINDER;
+        gbl.setConstraints(escape,con);
+        main.add(escape) ;
+        con.insets = new Insets(0, 2, 0,  0);
+        gbl.setConstraints(increment, con);
+        main.add(increment);
+        gbl.setConstraints(floatSearch, con);
+        main.add(floatSearch);
+        gbl.setConstraints(hideSearch, con);
+        main.add(hideSearch);
+        gbl.setConstraints(showResultsInDialog, con);
+        main.add(showResultsInDialog);
+        gbl.setConstraints(searchAllBases, con);
+        main.add(searchAllBases);
+    con.insets = new Insets(0, 0, 0,  0);
+        JPanel pan = new JPanel();
+        GridBagLayout gb = new GridBagLayout();
+        gbl.setConstraints(pan, con);
+        pan.setLayout(gb);
+        con.weightx = 1;
+        con.gridwidth = 1;
+        gb.setConstraints(openset, con);
+        pan.add(openset);
+        con.weightx = 0;
+        gb.setConstraints(help, con);
+        pan.add(help);
+        main.add(pan);
+        main.setBorder(BorderFactory.createEmptyBorder(1,1,1,1));
+        
+        setContent(main);
+
+    searchField.getInputMap().put(Globals.prefs.getKey("Repeat incremental search"),
+                      "repeat");
+
+    searchField.getActionMap().put("repeat", new AbstractAction() {
+        public void actionPerformed(ActionEvent e) {
+            if (increment.isSelected())
+            repeatIncremental();
+        }
+        });
+    searchField.getInputMap().put(Globals.prefs.getKey("Clear search"), "escape");
+    searchField.getActionMap().put("escape", new AbstractAction() {
+        public void actionPerformed(ActionEvent e) {
+            hideAway();
+            //SearchManager2.this.actionPerformed(new ActionEvent(escape, 0, ""));
+        }
+        });
+    setSearchButtonSizes();
+    updateSearchButtonText();
+    }
+
+    public void setAutoCompleteListener(AutoCompleteListener listener) {
+        this.autoCompleteListener = listener;
+        updateKeyListeners();
+    }
+
+    /**
+     * Add the correct key listeners to the search text field, depending on whether
+     * and autocomplete listener has been set and whether incremental search
+     * is selected.
+     */
+    protected void updateKeyListeners() {
+        KeyListener[] listeners = searchField.getKeyListeners();
+        for (int i = 0; i < listeners.length; i++) {
+            searchField.removeKeyListener(listeners[i]);
+        }
+        if (increment.isSelected()) {
+            searchField.addKeyListener(this);
+        }
+        else {
+            if (searchAutoComplete.isSelected() && autoCompleteListener != null)
+                searchField.addKeyListener(autoCompleteListener);
+        }
+    }
+
+	/**
+	 * Subscribe to the SearchListener and receive events, if the user searches for some thing. You
+	 * will receive a list of words
+	 * 
+	 * @param l
+	 */
+	public void addSearchListener(SearchTextListener l) {
+		if (listeners.contains(l))
+			return;
+		else
+			listeners.add(l);
+		//fire event for the new subscriber
+		l.searchText(getSearchwords(searchField.getText()));
+	}
+
+	/**
+	 * Remove object from the SearchListener
+	 * @param l
+	 */
+	public void removeSearchListener(SearchTextListener l) {
+		listeners.remove(l);
+	}
+
+	/**
+	 * parse the search string for valid words and return a list of words
+	 * Like "The great Vikinger" will be ["The","great","Vikinger"] 
+	 * 
+	 * @param t
+	 * @return
+	 */
+	private ArrayList<String> getSearchwords(String t) {
+		// for now ... just seperate words by whitespace
+		String[] strings = t.split(" ");
+		ArrayList<String> words = new ArrayList<String>(strings.length);
+		for (int i = 0; i < strings.length; i++) {
+			words.add(strings[i]);
+		}
+		return words;
+	}
+    /**
+     * Fires an event if a search was started / canceled
+     * @param t
+     */
+    private void fireSearchlistenerEvent(String t){
+    	// parse the Search string to words    	
+    	ArrayList<String> words;
+    	if ((t == null) || (t.isEmpty())) {
+    		words = null;
+    	} else { 
+    		words = getSearchwords(t);
+    	}
+    	
+    	//fire an event for every listener
+    	for(SearchTextListener s: listeners)s.searchText(words);
+    }
+    
+    
+    /** force the search button to be large enough for
+     * the longer of the two texts */
+    private void setSearchButtonSizes() {
+        search.setText(Globals.lang("Search Specified Field(s)"));
+        Dimension size1 = search.getPreferredSize();
+        search.setText(Globals.lang("Search All Fields"));
+        Dimension size2 = search.getPreferredSize();
+        size2.width = Math.max(size1.width,size2.width);
+        search.setMinimumSize(size2);
+        search.setPreferredSize(size2);
+    }
+
+    /**
+     * Instantiate the search dialog, unless it has already been instantiated:
+     */
+    protected void instantiateSearchDialog() {
+        if (searchDialog == null)
+            searchDialog = new SearchResultsDialog(frame, Globals.lang("Search results"));
+    }
+
+    public void updatePrefs() {
+        Globals.prefs.putBoolean("searchReq", searchReq.isSelected());
+        Globals.prefs.putBoolean("searchOpt", searchOpt.isSelected());
+        Globals.prefs.putBoolean("searchGen", searchGen.isSelected());
+        Globals.prefs.putBoolean("searchAll", searchAll.isSelected());
+        Globals.prefs.putBoolean("incrementS", increment.isSelected());
+        Globals.prefs.putBoolean("selectS", select.isSelected());
+        Globals.prefs.putBoolean("floatSearch", floatSearch.isSelected());
+        Globals.prefs.putBoolean("caseSensitiveSearch",
+                 caseSensitive.isSelected());
+        Globals.prefs.putBoolean("regExpSearch", regExpSearch.isSelected());
+        Globals.prefs.putBoolean("highLightWords", highLightWords.isSelected());
+        Globals.prefs.putBoolean("showSearchInDialog", showResultsInDialog.isSelected());
+        Globals.prefs.putBoolean("searchAllBases", searchAllBases.isSelected());
+    }
+
+    public void startIncrementalSearch() {
+    increment.setSelected(true);
+    searchField.setText("");
+        //System.out.println("startIncrementalSearch");
+    searchField.requestFocus();
+    }
+
+    /**
+     * Clears and focuses the search field if it is not
+     * focused. Otherwise, cycles to the next search type.
+     */
+    public void startSearch() {
+    if (increment.isSelected() && incSearch) {
+        repeatIncremental();
+        return;
+    }
+    if (!searchField.hasFocus()) {
+        //searchField.setText("");
+            searchField.selectAll();
+        searchField.requestFocus();
+    } else {
+        if (increment.isSelected())
+            floatSearch.setSelected(true);
+        else if (floatSearch.isSelected())
+            hideSearch.setSelected(true);
+        else if (hideSearch.isSelected())
+            showResultsInDialog.setSelected(true);
+        else if (showResultsInDialog.isSelected())
+            searchAllBases.setSelected(true);
+        else {
+            increment.setSelected(true);
+        }
+        increment.revalidate();
+        increment.repaint();
+
+        searchField.requestFocus();
+
+    }
+    }
+    
+    private void clearSearchLater() {
+        if (panel != null) {
+            Thread t = new Thread() {
+                public void run() {
+                    clearSearch();
+                }
+            };
+            // do this after the button action is over
+            SwingUtilities.invokeLater(t);
+        }
+    }
+
+    public void actionPerformed(ActionEvent e) {
+
+    if (e.getSource() == escape) {
+        incSearch = false;
+        clearSearchLater();
+    }
+    else if (((e.getSource() == searchField) || (e.getSource() == search))
+         && !increment.isSelected()
+         && (panel != null)) {
+
+        updatePrefs(); // Make sure the user's choices are recorded.
+        if (searchField.getText().equals("")) {
+            // An empty search field should cause the search to be cleared.
+            clearSearchLater();
+            return;
+        }
+
+        fireSearchlistenerEvent(searchField.getText());
+            
+        // Setup search parameters common to both normal and float.
+        Hashtable<String, String> searchOptions = new Hashtable<String, String>();
+        searchOptions.put("option",searchField.getText()) ;
+        SearchRuleSet searchRules = new SearchRuleSet() ;
+        SearchRule rule1;
+
+        rule1 = new BasicSearch(Globals.prefs.getBoolean("caseSensitiveSearch"),
+                Globals.prefs.getBoolean("regExpSearch"));
+
+        try {
+            // this searches specified fields if specified,
+            // and all fields otherwise
+            rule1 = new SearchExpression(Globals.prefs,searchOptions);
+        } catch (Exception ex) {
+            // we'll do a search in all fields
+        }
+
+        searchRules.addRule(rule1) ;
+
+        if (!searchRules.validateSearchStrings(searchOptions)) {
+            panel.output(Globals.lang("Search failed: illegal search expression"));
+            panel.stopShowingSearchResults();
+            return;
+        }
+        SearchWorker worker = new SearchWorker(searchRules, searchOptions);
+        worker.getWorker().run();
+        worker.getCallBack().update();
+        escape.setEnabled(true);
+        
+    }
+    }
+
+    class SearchWorker extends AbstractWorker {
+        private SearchRuleSet rules;
+        Hashtable<String, String> searchTerm;
+        int hits = 0;
+        public SearchWorker(SearchRuleSet rules, Hashtable<String, String> searchTerm) {
+            this.rules = rules;
+            this.searchTerm = searchTerm;
+        }
+
+        public void run() {
+            if (!searchAllBases.isSelected()) {
+                // Search only the current database:
+                for (BibtexEntry entry : panel.getDatabase().getEntries()){
+
+                    boolean hit = rules.applyRule(searchTerm, entry) > 0;
+                    entry.setSearchHit(hit);
+                    if (hit) hits++;
+                }
+            }
+            else {
+                // Search all databases:
+                for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
+                    BasePanel p = frame.baseAt(i);
+                    for (BibtexEntry entry : p.getDatabase().getEntries()){
+
+                        boolean hit = rules.applyRule(searchTerm, entry) > 0;
+                        entry.setSearchHit(hit);
+                        if (hit) hits++;
+                    }
+                }
+            }
+        }
+
+        public void update() {
+            panel.output(Globals.lang("Searched database. Number of hits")
+                    + ": " + hits);
+
+            // Show the result in the chosen way:
+            if (searchAllBases.isSelected()) {
+                // Search all databases. This means we need to use the search results dialog.
+                // Turn off other search mode, if activated:
+                if (startedFloatSearch) {
+                    panel.mainTable.stopShowingFloatSearch();
+                    startedFloatSearch = false;
+                }
+                if (startedFilterSearch) {
+                    panel.stopShowingSearchResults();
+                    startedFilterSearch = false;
+                }
+                // Make sure the search dialog is instantiated and cleared:
+                instantiateSearchDialog();
+                searchDialog.clear();
+                for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
+                    BasePanel p = frame.baseAt(i);
+                    for (BibtexEntry entry : p.getDatabase().getEntries()){
+                        if (entry.isSearchHit())
+                            searchDialog.addEntry(entry, p);
+                    }
+                }
+                searchDialog.selectFirstEntry();
+                searchDialog.setVisible(true);
+            }
+
+            else if (showResultsInDialog.isSelected()) {
+                // Turn off other search mode, if activated:
+                if (startedFloatSearch) {
+                    panel.mainTable.stopShowingFloatSearch();
+                    startedFloatSearch = false;
+                }
+                if (startedFilterSearch) {
+                    panel.stopShowingSearchResults();
+                    startedFilterSearch = false;
+                }
+                // Make sure the search dialog is instantiated and cleared:
+                instantiateSearchDialog();
+                searchDialog.clear();
+                for (BibtexEntry entry : panel.getDatabase().getEntries()) {
+                    if (entry.isSearchHit())
+                        searchDialog.addEntry(entry, panel);
+                }
+                searchDialog.selectFirstEntry();
+                searchDialog.setVisible(true);
+            }
+            else if (hideSearch.isSelected()) {
+                // Filtering search - removes non-hits from the table:
+                if (startedFloatSearch) {
+                    panel.mainTable.stopShowingFloatSearch();
+                    startedFloatSearch = false;
+                }
+                startedFilterSearch = true;
+                panel.setSearchMatcher(SearchMatcher.INSTANCE);
+
+            } else {
+                // Float search - floats hits to the top of the table:
+                if (startedFilterSearch) {
+                    panel.stopShowingSearchResults();
+                    startedFilterSearch = false;
+                }
+                startedFloatSearch = true;
+                panel.mainTable.showFloatSearch(SearchMatcher.INSTANCE);
+
+            }
+
+            // Afterwards, select all text in the search field.
+            searchField.select(0, searchField.getText().length());
+
+        }
+    }
+
+    public void clearSearch() {
+        
+        if (panel.isShowingFloatSearch()) {
+            startedFloatSearch = false;
+            panel.mainTable.stopShowingFloatSearch();
+        } else if (panel.isShowingFilterSearch()) {
+            startedFilterSearch = false;
+            panel.stopShowingSearchResults();
+        }
+        
+        // clear search means that nothing is searched for
+        // even if a word is written in the text field,
+        // nothing should be highlighted
+        fireSearchlistenerEvent(null);
+        
+        // disable "Cancel" button to signal this to the user
+        escape.setEnabled(false);
+    }
+    public void itemStateChanged(ItemEvent e) {
+    if (e.getSource() == increment) {
+        if (startedFilterSearch || startedFloatSearch) {
+            clearSearch();
+        }
+        updateSearchButtonText();
+
+        // Make sure the correct key listener is activated:
+        updateKeyListeners();
+
+    } else /*if (e.getSource() == normal)*/ {
+        updateSearchButtonText();
+
+        // If this search type is disabled, remove reordering from
+        // all databases.
+        /*if ((panel != null) && increment.isSelected()) {
+            clearSearch();
+        } */
+    }
+    }
+
+    private void repeatIncremental() {
+    incSearchPos++;
+    if (panel != null)
+        goIncremental();
+    }
+
+    /**
+     * Used for incremental search. Only activated when incremental
+     * is selected.
+     *
+     * The variable incSearchPos keeps track of which entry was last
+     * checked.
+     */
+    public void keyTyped(KeyEvent e) {
+    if (e.isControlDown()) {
+        return;
+    }
+    if (panel != null)
+        goIncremental();
+    }
+
+    private void goIncremental() {
+    incSearch = true;
+    escape.setEnabled(true);
+    SwingUtilities.invokeLater(new Thread() {
+        public void run() {
+            String text = searchField.getText();
+
+
+            if (incSearchPos >= panel.getDatabase().getEntryCount()) {
+            panel.output("'"+text+"' : "+Globals.lang
+
+                     ("Incremental search failed. Repeat to search from top.")+".");
+            incSearchPos = -1;
+            return;
+            }
+
+            if (searchField.getText().equals("")) return;
+            if (incSearchPos < 0)
+            incSearchPos = 0;
+            BibtexEntry be = panel.mainTable.getEntryAt(incSearchPos);
+            while (!incSearcher.search(text, be)) {
+                incSearchPos++;
+                if (incSearchPos < panel.getDatabase().getEntryCount())
+                    be = panel.mainTable.getEntryAt(incSearchPos);
+            else {
+                panel.output("'"+text+"' : "+Globals.lang
+                     ("Incremental search failed. Repeat to search from top."));
+                incSearchPos = -1;
+                return;
+            }
+            }
+            if (incSearchPos >= 0) {
+
+            panel.selectSingleEntry(incSearchPos);
+            panel.output("'"+text+"' "+Globals.lang
+
+                     ("found")+".");
+
+            }
+        }
+        });
+    }
+
+    public void componentClosing() {
+    frame.searchToggle.setSelected(false);
+        if (panel != null) {
+            if (startedFilterSearch || startedFloatSearch)
+                clearSearch();
+        }
+    }
+
+
+    public void keyPressed(KeyEvent e) {}
+    public void keyReleased(KeyEvent e) {}
+
+    public void caretUpdate(CaretEvent e) {
+        if (e.getSource() == searchField) {
+            updateSearchButtonText();
+        }
+    }
+
+    /** Updates the text on the search button to reflect
+      * the type of search that will happen on click. */
+    private void updateSearchButtonText() {
+        search.setText(!increment.isSelected()
+                && SearchExpressionParser.checkSyntax(
+                searchField.getText(),
+                caseSensitive.isSelected(),
+                regExpSearch.isSelected()) != null
+                ? Globals.lang("Search Specified Field(s)")
+                : Globals.lang("Search All Fields"));
+    }
+
+    /**
+     * This method is required by the ErrorMessageDisplay interface, and lets this class
+     * serve as a callback for regular expression exceptions happening in DatabaseSearch.
+     * @param errorMessage
+     */
+    public void reportError(String errorMessage) {
+        JOptionPane.showMessageDialog(panel, errorMessage, Globals.lang("Search error"),
+                JOptionPane.ERROR_MESSAGE);
+    }
+
+    /**
+     * This method is required by the ErrorMessageDisplay interface, and lets this class
+     * serve as a callback for regular expression exceptions happening in DatabaseSearch.
+     * @param errorMessage
+     */
+    public void reportError(String errorMessage, Exception exception) {
+        reportError(errorMessage);
+    }
+
+
+    public void setActiveBasePanel(BasePanel panel) {
+        super.setActiveBasePanel(panel);
+        if (panel != null)
+            escape.setEnabled(panel.isShowingFloatSearch()
+                    || panel.isShowingFilterSearch());
+        else
+            escape.setEnabled(false);
+    }
+}
diff --git a/src/java/net/sf/jabref/SearchManagerNoGUI.java b/src/java/net/sf/jabref/SearchManagerNoGUI.java
index 0c68b51..817af9d 100644
--- a/src/java/net/sf/jabref/SearchManagerNoGUI.java
+++ b/src/java/net/sf/jabref/SearchManagerNoGUI.java
@@ -1,132 +1,132 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.lang.Integer;
-import java.lang.Math;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Collection;
-import java.util.Vector;
-
-import net.sf.jabref.search.*;
-import net.sf.jabref.imports.*;
-/**
- *
- * @author Silberer, Zirn
- */
-public class SearchManagerNoGUI {
-    private String searchTerm;
-    private BibtexDatabase database, base=null;
-    Hashtable searchOptions = new Hashtable();
-    
-    public SearchManagerNoGUI(String term, BibtexDatabase dataBase) {
-        searchTerm = term;
-        database = dataBase;
-    }
-    
-    public BibtexDatabase getDBfromMatches() {
-        int hits = 0;
-                System.out.println("search term: "+searchTerm);
-        if(specifiedYears()) { 
-            searchTerm = fieldYear(); 
-        }
-
-        searchOptions.put("option", searchTerm); 
-        SearchRuleSet searchRules = new SearchRuleSet();
-        SearchRule rule1;
-        rule1 = new BasicSearch(Globals.prefs.getBoolean("caseSensitiveSearch"),
-                Globals.prefs.getBoolean("regExpSearch"));
-        try {
-            rule1 = new SearchExpression(Globals.prefs, searchOptions);
-        } catch (Exception e) {
-
-        }
-        searchRules.addRule(rule1);
-        
-        if (!searchRules.validateSearchStrings(searchOptions)) {
-            System.out.println(Globals.lang("Search failed: illegal search expression"));
-            return base;
-        }
-        
-        Collection entries = database.getEntries();
-        Vector matchEntries = new Vector();
-        for (Iterator i=entries.iterator(); i.hasNext();) {
-            BibtexEntry entry = (BibtexEntry) i.next();
-            boolean hit = searchRules.applyRule(searchOptions, entry) > 0;
-            entry.setSearchHit(hit);
-            if(hit) {
-                hits++;
-                matchEntries.add(entry);
-            }
-        }
-        
-        if (matchEntries != null) {
-            base = ImportFormatReader.createDatabase(matchEntries);
-        }
-        return base; 
-    }//end getDBfromMatches()
-    
-    private boolean specifiedYears() {
-        if (searchTerm.matches("year=[0-9]{4}-[0-9]{4}"))
-            return true;
-        return false;
-    }
-    
-    private String fieldYear() {
-        String regPt1="",regPt2="";
-        String completeReg=null;
-        boolean reg1Set=false, reg2Set=false; //if beginning of timeframe is BEFORE and end of timeframe is AFTER turn of the century
-        String[] searchTermsToPr = searchTerm.split("=");
-        String field = searchTermsToPr[0];
-        String[] years = searchTermsToPr[1].split("-");
-        int year1 = Integer.parseInt(years[0]);
-        int year2 = Integer.parseInt(years[1]);
-        
-        if (year1 < 2000 && year2>=2000) { //for 199.
-            regPt1 = "199+["+years[0].substring(3,4)+"-9]";
-            reg1Set=true;
-        } else {
-            if (year1<2000) {
-                regPt1 = "199+["+years[0].substring(3,4)+"-"
-                     +Math.min(Integer.parseInt(years[1].substring(3,4)),9)+"]";
-                reg1Set=true;     
-            }
-        }
-        if (Integer.parseInt(years[1]) >=2000 && year1<2000) { //for 200.
-            regPt2 = "200+[0-"+years[1].substring(3,4)+"]";
-            reg2Set = true;
-        } else {
-            if (year2 >=2000) {
-                regPt2 = "200+["+years[0].substring(3,4)+"-"
-                     +Math.min(Integer.parseInt(years[1].substring(3,4)),9)+"]";
-                reg2Set = true;
-            }
-        }
-        if(reg1Set&&reg2Set) {
-            completeReg = field+"="+regPt1+"|"+regPt2;
-        } else {
-            if (reg1Set) {
-                completeReg=field+"="+regPt1;
-            }
-            if (reg2Set) {
-                completeReg=field+"="+regPt2;           
-            }
-        }
-        
-        return completeReg;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.lang.Integer;
+import java.lang.Math;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Collection;
+import java.util.Vector;
+
+import net.sf.jabref.search.*;
+import net.sf.jabref.imports.*;
+/**
+ *
+ * @author Silberer, Zirn
+ */
+public class SearchManagerNoGUI {
+    private String searchTerm;
+    private BibtexDatabase database, base=null;
+    Hashtable searchOptions = new Hashtable();
+    
+    public SearchManagerNoGUI(String term, BibtexDatabase dataBase) {
+        searchTerm = term;
+        database = dataBase;
+    }
+    
+    public BibtexDatabase getDBfromMatches() {
+        int hits = 0;
+                System.out.println("search term: "+searchTerm);
+        if(specifiedYears()) { 
+            searchTerm = fieldYear(); 
+        }
+
+        searchOptions.put("option", searchTerm); 
+        SearchRuleSet searchRules = new SearchRuleSet();
+        SearchRule rule1;
+        rule1 = new BasicSearch(Globals.prefs.getBoolean("caseSensitiveSearch"),
+                Globals.prefs.getBoolean("regExpSearch"));
+        try {
+            rule1 = new SearchExpression(Globals.prefs, searchOptions);
+        } catch (Exception e) {
+
+        }
+        searchRules.addRule(rule1);
+        
+        if (!searchRules.validateSearchStrings(searchOptions)) {
+            System.out.println(Globals.lang("Search failed: illegal search expression"));
+            return base;
+        }
+        
+        Collection entries = database.getEntries();
+        Vector matchEntries = new Vector();
+        for (Iterator i=entries.iterator(); i.hasNext();) {
+            BibtexEntry entry = (BibtexEntry) i.next();
+            boolean hit = searchRules.applyRule(searchOptions, entry) > 0;
+            entry.setSearchHit(hit);
+            if(hit) {
+                hits++;
+                matchEntries.add(entry);
+            }
+        }
+        
+        if (matchEntries != null) {
+            base = ImportFormatReader.createDatabase(matchEntries);
+        }
+        return base; 
+    }//end getDBfromMatches()
+    
+    private boolean specifiedYears() {
+        if (searchTerm.matches("year=[0-9]{4}-[0-9]{4}"))
+            return true;
+        return false;
+    }
+    
+    private String fieldYear() {
+        String regPt1="",regPt2="";
+        String completeReg=null;
+        boolean reg1Set=false, reg2Set=false; //if beginning of timeframe is BEFORE and end of timeframe is AFTER turn of the century
+        String[] searchTermsToPr = searchTerm.split("=");
+        String field = searchTermsToPr[0];
+        String[] years = searchTermsToPr[1].split("-");
+        int year1 = Integer.parseInt(years[0]);
+        int year2 = Integer.parseInt(years[1]);
+        
+        if (year1 < 2000 && year2>=2000) { //for 199.
+            regPt1 = "199+["+years[0].substring(3,4)+"-9]";
+            reg1Set=true;
+        } else {
+            if (year1<2000) {
+                regPt1 = "199+["+years[0].substring(3,4)+"-"
+                     +Math.min(Integer.parseInt(years[1].substring(3,4)),9)+"]";
+                reg1Set=true;     
+            }
+        }
+        if (Integer.parseInt(years[1]) >=2000 && year1<2000) { //for 200.
+            regPt2 = "200+[0-"+years[1].substring(3,4)+"]";
+            reg2Set = true;
+        } else {
+            if (year2 >=2000) {
+                regPt2 = "200+["+years[0].substring(3,4)+"-"
+                     +Math.min(Integer.parseInt(years[1].substring(3,4)),9)+"]";
+                reg2Set = true;
+            }
+        }
+        if(reg1Set&&reg2Set) {
+            completeReg = field+"="+regPt1+"|"+regPt2;
+        } else {
+            if (reg1Set) {
+                completeReg=field+"="+regPt1;
+            }
+            if (reg2Set) {
+                completeReg=field+"="+regPt2;           
+            }
+        }
+        
+        return completeReg;
+    }
+}
diff --git a/src/java/net/sf/jabref/SearchRule.java b/src/java/net/sf/jabref/SearchRule.java
index c291d3c..25ef59c 100644
--- a/src/java/net/sf/jabref/SearchRule.java
+++ b/src/java/net/sf/jabref/SearchRule.java
@@ -1,38 +1,38 @@
-/*
-Copyright (C) 2003  Nathan Dunn
-
-All programs in this directory and
-subdirectories are published under the GNU General Public License as
-described below.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA
-
-Further information about the GNU GPL is available at:
-http://www.gnu.org/copyleft/gpl.ja.html
-
-*/
-package net.sf.jabref;
-
-import java.util.Map;
-
-public interface SearchRule{
-
-    public int applyRule(Map<String, String> searchStrings,BibtexEntry bibtexEntry) ;
-
-    public boolean validateSearchStrings(Map<String, String> searchStrings);
-}
-
-
+/*
+Copyright (C) 2003  Nathan Dunn
+
+All programs in this directory and
+subdirectories are published under the GNU General Public License as
+described below.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
+
+Further information about the GNU GPL is available at:
+http://www.gnu.org/copyleft/gpl.ja.html
+
+*/
+package net.sf.jabref;
+
+import java.util.Map;
+
+public interface SearchRule{
+
+    public int applyRule(Map<String, String> searchStrings,BibtexEntry bibtexEntry) ;
+
+    public boolean validateSearchStrings(Map<String, String> searchStrings);
+}
+
+
diff --git a/src/java/net/sf/jabref/SearchRuleSet.java b/src/java/net/sf/jabref/SearchRuleSet.java
index b374d8f..d65633c 100644
--- a/src/java/net/sf/jabref/SearchRuleSet.java
+++ b/src/java/net/sf/jabref/SearchRuleSet.java
@@ -1,63 +1,63 @@
-/*
- Copyright (C) 2003  Nathan Dunn
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-package net.sf.jabref;
-
-import java.util.Enumeration;
-import java.util.Map;
-import java.util.Vector;
-import java.util.regex.PatternSyntaxException;
-
-public class SearchRuleSet implements SearchRule {
-    protected Vector<SearchRule> ruleSet = new Vector<SearchRule>();
-
-    public void addRule(SearchRule newRule) {
-        ruleSet.add(newRule);
-    }
-
-    public void clearRules() {
-        ruleSet.clear();
-    }
-
-    public int applyRule(Map<String, String> searchString, BibtexEntry bibtexEntry) throws PatternSyntaxException{
-        int score = 0;
-        Enumeration<SearchRule> e = ruleSet.elements();
-        while (e.hasMoreElements()) {
-            score += e.nextElement().applyRule(searchString,
-                    bibtexEntry);
-        }
-        return score;
-    }
-
-    public boolean validateSearchStrings(Map<String, String> searchStrings) {
-        Enumeration<SearchRule> e = ruleSet.elements();
-        while (e.hasMoreElements()) {
-            if (!e.nextElement().validateSearchStrings(searchStrings))
-                return false;
-        }
-        return true;
-    }
-}
+/*
+ Copyright (C) 2003  Nathan Dunn
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+package net.sf.jabref;
+
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.Vector;
+import java.util.regex.PatternSyntaxException;
+
+public class SearchRuleSet implements SearchRule {
+    protected Vector<SearchRule> ruleSet = new Vector<SearchRule>();
+
+    public void addRule(SearchRule newRule) {
+        ruleSet.add(newRule);
+    }
+
+    public void clearRules() {
+        ruleSet.clear();
+    }
+
+    public int applyRule(Map<String, String> searchString, BibtexEntry bibtexEntry) throws PatternSyntaxException{
+        int score = 0;
+        Enumeration<SearchRule> e = ruleSet.elements();
+        while (e.hasMoreElements()) {
+            score += e.nextElement().applyRule(searchString,
+                    bibtexEntry);
+        }
+        return score;
+    }
+
+    public boolean validateSearchStrings(Map<String, String> searchStrings) {
+        Enumeration<SearchRule> e = ruleSet.elements();
+        while (e.hasMoreElements()) {
+            if (!e.nextElement().validateSearchStrings(searchStrings))
+                return false;
+        }
+        return true;
+    }
+}
diff --git a/src/java/net/sf/jabref/SearchTextListener.java b/src/java/net/sf/jabref/SearchTextListener.java
index 9a9cb79..dc44a92 100644
--- a/src/java/net/sf/jabref/SearchTextListener.java
+++ b/src/java/net/sf/jabref/SearchTextListener.java
@@ -1,34 +1,34 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.util.ArrayList;
-
-/**
- * Every Listener that wants to receive events from a search needs to
- * implement this interface
- * 
- * @author Ben
- * 
- */
-interface SearchTextListener {
-	/**
-	 * Array of words that were searched for
-	 * 
-	 * @param words. null if nothing is searched for
-	 */
-	public void searchText(ArrayList<String> words);
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.util.ArrayList;
+
+/**
+ * Every Listener that wants to receive events from a search needs to
+ * implement this interface
+ * 
+ * @author Ben
+ * 
+ */
+interface SearchTextListener {
+	/**
+	 * Array of words that were searched for
+	 * 
+	 * @param words. null if nothing is searched for
+	 */
+	public void searchText(ArrayList<String> words);
+}
diff --git a/src/java/net/sf/jabref/SendAsEMailAction.java b/src/java/net/sf/jabref/SendAsEMailAction.java
old mode 100755
new mode 100644
index f9e49b5..aabdbcb
--- a/src/java/net/sf/jabref/SendAsEMailAction.java
+++ b/src/java/net/sf/jabref/SendAsEMailAction.java
@@ -1,160 +1,160 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.Desktop;
-import java.io.File;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-
-import javax.swing.JOptionPane;
-
-import net.sf.jabref.export.LatexFieldFormatter;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.gui.FileListTableModel;
-
-/**
- * Sends the selected entry as email - by Oliver Kopp
- * 
- * It uses the mailto:-mechanism
- * 
- * Microsoft Outlook does not support attachments via mailto
- * Therefore, the folder(s), where the file(s) belonging to the entry are stored,
- * are opened. This feature is disabled by default and can be switched on at
- * preferences/external programs   
- */
-public class SendAsEMailAction extends AbstractWorker {
-
-	String message = null;
-	private JabRefFrame frame;
-
-	public SendAsEMailAction(JabRefFrame frame) {
-		this.frame = frame;
-	}
-
-	public void run() {
-        if (!Desktop.isDesktopSupported()) {
-        	message = Globals.lang("Error creating email");
-        	return;
-        }
-		
-		BasePanel panel = frame.basePanel();
-		if (panel == null)
-			return;
-		if (panel.getSelectedEntries().length == 0) {
-			message = Globals.lang("No entries selected") + ".";
-			return;
-		}
-
-		StringWriter sw = new StringWriter();
-		BibtexEntry[] bes = panel.getSelectedEntries();
-
-		LatexFieldFormatter ff = new LatexFieldFormatter();
-
-		ArrayList<String> attachments = new ArrayList<String>();
-		HashSet<File> directories = new HashSet<File>();
-		
-		// open folders is needed to indirectly support email programs, which cannot handle
-		//   the unofficial "mailto:attachment" property 
-		boolean openFolders = JabRefPreferences.getInstance().getBoolean("openFoldersOfAttachedFiles");
-		
-		// Quick hack for Windows feature
-		// If OS is windows, then class Desktop is not used, but a direct call to explorer.exe
-		String osName = System.getProperty("os.name");
-		boolean isWindows = osName.startsWith("Windows");
-		
-		for (BibtexEntry entry : bes) {
-			try {
-				entry.write(sw, ff, true);
-                FileListTableModel tm = new FileListTableModel();
-                tm.setContent(entry.getField("file"));
-                for (int i=0; i< tm.getRowCount(); i++) {
-                	FileListEntry flEntry = tm.getEntry(i);
-                	
-                	File f = Util.expandFilename(flEntry.getLink(), frame.basePanel().metaData().getFileDirectory(GUIGlobals.FILE_FIELD));
-                	if (f != null) {
-                		// file exists
-                		attachments.add(f.getPath());
-                		if (openFolders) {
-                			if (isWindows) {
-                				String command = "explorer.exe /select,\"".concat(f.getAbsolutePath().concat("\""));
-                				Runtime.getRuntime().exec(command);
-                			} else {
-                				directories.add(f.getParentFile());
-                			}
-                		}
-                   	}
-                }
-			} catch (Exception e) {
-				e.printStackTrace();
-				message = Globals.lang("Error creating email");
-				return;
-			}
-		}
-		
-		String mailTo = "?Body=".concat(sw.getBuffer().toString());
-        mailTo = mailTo.concat("&Subject=");
-        mailTo = mailTo.concat(JabRefPreferences.getInstance().get(JabRefPreferences.EMAIL_SUBJECT));
-        for (String path: attachments) {
-        	mailTo = mailTo.concat("&Attachment=\"").concat(path);
-        	mailTo = mailTo.concat("\"");
-        }
-        
-        URI uriMailTo = null;
-        try {
-			uriMailTo = new URI("mailto", mailTo, null);
-		} catch (URISyntaxException e1) {
-			e1.printStackTrace();
-			message = Globals.lang("Error creating email");
-			return;
-		}
-
-        Desktop desktop = Desktop.getDesktop();
-        try {
-			desktop.mail(uriMailTo);
-		} catch (IOException e) {
-			e.printStackTrace();
-			message = Globals.lang("Error creating email");
-			return;
-		}
-
-		if (openFolders) {
-			for (File d: directories) {
-				try {
-					desktop.open(d);
-				} catch (IOException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-					message = String.format("%s: %s", Globals.lang("Could not open directory"), d.getAbsolutePath());
-					return;
-				}
-			}
-		}
-
-		message = String.format("%s: %d",
-				Globals.lang("Entries added to an email"), bes.length);
-	}
-
-	public void update() {
-		frame.output(message);
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.Desktop;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+
+import javax.swing.JOptionPane;
+
+import net.sf.jabref.export.LatexFieldFormatter;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileListTableModel;
+
+/**
+ * Sends the selected entry as email - by Oliver Kopp
+ * 
+ * It uses the mailto:-mechanism
+ * 
+ * Microsoft Outlook does not support attachments via mailto
+ * Therefore, the folder(s), where the file(s) belonging to the entry are stored,
+ * are opened. This feature is disabled by default and can be switched on at
+ * preferences/external programs   
+ */
+public class SendAsEMailAction extends AbstractWorker {
+
+	String message = null;
+	private JabRefFrame frame;
+
+	public SendAsEMailAction(JabRefFrame frame) {
+		this.frame = frame;
+	}
+
+	public void run() {
+        if (!Desktop.isDesktopSupported()) {
+        	message = Globals.lang("Error creating email");
+        	return;
+        }
+		
+		BasePanel panel = frame.basePanel();
+		if (panel == null)
+			return;
+		if (panel.getSelectedEntries().length == 0) {
+			message = Globals.lang("No entries selected") + ".";
+			return;
+		}
+
+		StringWriter sw = new StringWriter();
+		BibtexEntry[] bes = panel.getSelectedEntries();
+
+		LatexFieldFormatter ff = new LatexFieldFormatter();
+
+		ArrayList<String> attachments = new ArrayList<String>();
+		HashSet<File> directories = new HashSet<File>();
+		
+		// open folders is needed to indirectly support email programs, which cannot handle
+		//   the unofficial "mailto:attachment" property 
+		boolean openFolders = JabRefPreferences.getInstance().getBoolean("openFoldersOfAttachedFiles");
+		
+		// Quick hack for Windows feature
+		// If OS is windows, then class Desktop is not used, but a direct call to explorer.exe
+		String osName = System.getProperty("os.name");
+		boolean isWindows = osName.startsWith("Windows");
+		
+		for (BibtexEntry entry : bes) {
+			try {
+				entry.write(sw, ff, true);
+                FileListTableModel tm = new FileListTableModel();
+                tm.setContent(entry.getField("file"));
+                for (int i=0; i< tm.getRowCount(); i++) {
+                	FileListEntry flEntry = tm.getEntry(i);
+                	
+                	File f = Util.expandFilename(flEntry.getLink(), frame.basePanel().metaData().getFileDirectory(GUIGlobals.FILE_FIELD));
+                	if (f != null) {
+                		// file exists
+                		attachments.add(f.getPath());
+                		if (openFolders) {
+                			if (isWindows) {
+                				String command = "explorer.exe /select,\"".concat(f.getAbsolutePath().concat("\""));
+                				Runtime.getRuntime().exec(command);
+                			} else {
+                				directories.add(f.getParentFile());
+                			}
+                		}
+                   	}
+                }
+			} catch (Exception e) {
+				e.printStackTrace();
+				message = Globals.lang("Error creating email");
+				return;
+			}
+		}
+		
+		String mailTo = "?Body=".concat(sw.getBuffer().toString());
+        mailTo = mailTo.concat("&Subject=");
+        mailTo = mailTo.concat(JabRefPreferences.getInstance().get(JabRefPreferences.EMAIL_SUBJECT));
+        for (String path: attachments) {
+        	mailTo = mailTo.concat("&Attachment=\"").concat(path);
+        	mailTo = mailTo.concat("\"");
+        }
+        
+        URI uriMailTo = null;
+        try {
+			uriMailTo = new URI("mailto", mailTo, null);
+		} catch (URISyntaxException e1) {
+			e1.printStackTrace();
+			message = Globals.lang("Error creating email");
+			return;
+		}
+
+        Desktop desktop = Desktop.getDesktop();
+        try {
+			desktop.mail(uriMailTo);
+		} catch (IOException e) {
+			e.printStackTrace();
+			message = Globals.lang("Error creating email");
+			return;
+		}
+
+		if (openFolders) {
+			for (File d: directories) {
+				try {
+					desktop.open(d);
+				} catch (IOException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+					message = String.format("%s: %s", Globals.lang("Could not open directory"), d.getAbsolutePath());
+					return;
+				}
+			}
+		}
+
+		message = String.format("%s: %d",
+				Globals.lang("Entries added to an email"), bes.length);
+	}
+
+	public void update() {
+		frame.output(message);
+	}
+
+}
diff --git a/src/java/net/sf/jabref/SidePane.java b/src/java/net/sf/jabref/SidePane.java
index aa22642..c23d006 100644
--- a/src/java/net/sf/jabref/SidePane.java
+++ b/src/java/net/sf/jabref/SidePane.java
@@ -1,98 +1,98 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.*;
-import java.util.Collection;
-
-import javax.swing.Box;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-
-/**
- * The side pane is displayed at the right side of JabRef and shows instances of
- * SidePaneComponents, for instance the GroupSelector, or the SearchManager2.
- * 
- * @version $Revision$ ($Date$)
- * 
- */
-public class SidePane extends JPanel {
-
-	final Dimension PREFERRED_SIZE = new Dimension(GUIGlobals.SPLIT_PANE_DIVIDER_LOCATION, 100);
-
-	GridBagLayout gridBagLayout = new GridBagLayout();
-
-	GridBagConstraints constraint = new GridBagConstraints();
-
-	JPanel mainPanel = new JPanel();
-
-	public SidePane() {
-
-		// For debugging the border:
-		// setBorder(BorderFactory.createLineBorder(Color.BLUE));
-
-		setLayout(new BorderLayout());
-		mainPanel.setLayout(gridBagLayout);
-
-		// Initialize constraint
-		constraint.anchor = GridBagConstraints.NORTH;
-		constraint.fill = GridBagConstraints.BOTH;
-		constraint.gridwidth = GridBagConstraints.REMAINDER;
-		constraint.insets = new Insets(1, 1, 1, 1);
-		constraint.gridheight = 1;
-		constraint.weightx = 1;
-
-		/*
-		 * Added Scrollpane to fix: 
-		 */
-		JScrollPane sp = new JScrollPane(mainPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-			JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-		sp.setBorder(null);
-		
-		// To remove the scroll panel just change sp to mainPanel and comment
-		// the JScrollPane declaration
-		super.add(sp);
-	}
-
-	public void setComponents(Collection<SidePaneComponent> comps) {
-		mainPanel.removeAll();
-
-		constraint.weighty = 0;
-		for (Component c : comps){
-			gridBagLayout.setConstraints(c, constraint);
-			mainPanel.add(c);
-		}
-		constraint.weighty = 1;
-		Component bx = Box.createVerticalGlue();
-		gridBagLayout.setConstraints(bx, constraint);
-		mainPanel.add(bx);
-
-		revalidate();
-		repaint();
-	}
-
-	public void remove(Component c) {
-		mainPanel.remove(c);
-	}
-
-	public Dimension getMaximumSize() {
-		return getPreferredSize();
-	}
-
-	public Dimension getPreferredSize() {
-		return PREFERRED_SIZE;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.*;
+import java.util.Collection;
+
+import javax.swing.Box;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+/**
+ * The side pane is displayed at the right side of JabRef and shows instances of
+ * SidePaneComponents, for instance the GroupSelector, or the SearchManager2.
+ * 
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class SidePane extends JPanel {
+
+	final Dimension PREFERRED_SIZE = new Dimension(GUIGlobals.SPLIT_PANE_DIVIDER_LOCATION, 100);
+
+	GridBagLayout gridBagLayout = new GridBagLayout();
+
+	GridBagConstraints constraint = new GridBagConstraints();
+
+	JPanel mainPanel = new JPanel();
+
+	public SidePane() {
+
+		// For debugging the border:
+		// setBorder(BorderFactory.createLineBorder(Color.BLUE));
+
+		setLayout(new BorderLayout());
+		mainPanel.setLayout(gridBagLayout);
+
+		// Initialize constraint
+		constraint.anchor = GridBagConstraints.NORTH;
+		constraint.fill = GridBagConstraints.BOTH;
+		constraint.gridwidth = GridBagConstraints.REMAINDER;
+		constraint.insets = new Insets(1, 1, 1, 1);
+		constraint.gridheight = 1;
+		constraint.weightx = 1;
+
+		/*
+		 * Added Scrollpane to fix: 
+		 */
+		JScrollPane sp = new JScrollPane(mainPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+			JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+		sp.setBorder(null);
+		
+		// To remove the scroll panel just change sp to mainPanel and comment
+		// the JScrollPane declaration
+		super.add(sp);
+	}
+
+	public void setComponents(Collection<SidePaneComponent> comps) {
+		mainPanel.removeAll();
+
+		constraint.weighty = 0;
+		for (Component c : comps){
+			gridBagLayout.setConstraints(c, constraint);
+			mainPanel.add(c);
+		}
+		constraint.weighty = 1;
+		Component bx = Box.createVerticalGlue();
+		gridBagLayout.setConstraints(bx, constraint);
+		mainPanel.add(bx);
+
+		revalidate();
+		repaint();
+	}
+
+	public void remove(Component c) {
+		mainPanel.remove(c);
+	}
+
+	public Dimension getMaximumSize() {
+		return getPreferredSize();
+	}
+
+	public Dimension getPreferredSize() {
+		return PREFERRED_SIZE;
+	}
+}
diff --git a/src/java/net/sf/jabref/SidePaneComponent.java b/src/java/net/sf/jabref/SidePaneComponent.java
index 3d0053a..dc17fc9 100644
--- a/src/java/net/sf/jabref/SidePaneComponent.java
+++ b/src/java/net/sf/jabref/SidePaneComponent.java
@@ -1,113 +1,113 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.Dimension;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.net.URL;
-
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JToolBar;
-
-import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
-
-public abstract class SidePaneComponent extends SimpleInternalFrame {
-
-	protected JButton close = new JButton(GUIGlobals.getImage("close"));
-
-	protected boolean visible = false;
-
-	protected SidePaneManager manager;
-
-	protected BasePanel panel = null;
-
-	public SidePaneComponent(SidePaneManager manager, URL icon, String title) {
-		super(new ImageIcon(icon), title);
-		this.manager = manager;
-		setSelected(true);
-		JToolBar tlb = new JToolBar();
-		close.setMargin(new Insets(0, 0, 0, 0));
-		// tlb.setOpaque(false);
-		close.setBorder(null);
-        tlb.setFloatable(false);
-		tlb.add(close);
-		close.addActionListener(new CloseButtonListener());
-		setToolBar(tlb);
-		// setBorder(BorderFactory.createEtchedBorder());
-
-		// setBorder(BorderFactory.createMatteBorder(1,1,1,1,java.awt.Color.green));
-		// setPreferredSize(new java.awt.Dimension
-		// (GUIGlobals.SPLIT_PANE_DIVIDER_LOCATION, 200));
-		// Util.pr(""+GUIGlobals.SPLIT_PANE_DIVIDER_LOCATION);
-	}
-
-	public void hideAway() {
-		manager.hideComponent(this);
-	}
-
-	/**
-	 * Used by SidePaneManager only, to keep track of visibility.
-	 * 
-	 */
-	void setVisibility(boolean vis) {
-		visible = vis;
-	}
-
-	/**
-	 * Used by SidePaneManager only, to keep track of visibility.
-	 * 
-	 */
-	boolean hasVisibility() {
-		return visible;
-	}
-
-	public void setActiveBasePanel(BasePanel panel) {
-		this.panel = panel;
-	}
-
-	public BasePanel getActiveBasePanel() {
-		return panel;
-	}
-
-	/**
-	 * Override this method if the component needs to make any changes before it
-	 * can close.
-	 */
-	public void componentClosing() {
-
-	}
-
-	/**
-	 * Override this method if the component needs to do any actions when
-	 * opening.
-	 */
-	public void componentOpening() {
-
-	}
-
-	public Dimension getMinimumSize() {
-		return getPreferredSize();
-	}
-
-	class CloseButtonListener implements ActionListener {
-		public void actionPerformed(ActionEvent e) {
-			hideAway();
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.Dimension;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.URL;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JToolBar;
+
+import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+
+public abstract class SidePaneComponent extends SimpleInternalFrame {
+
+	protected JButton close = new JButton(GUIGlobals.getImage("close"));
+
+	protected boolean visible = false;
+
+	protected SidePaneManager manager;
+
+	protected BasePanel panel = null;
+
+	public SidePaneComponent(SidePaneManager manager, URL icon, String title) {
+		super(new ImageIcon(icon), title);
+		this.manager = manager;
+		setSelected(true);
+		JToolBar tlb = new JToolBar();
+		close.setMargin(new Insets(0, 0, 0, 0));
+		// tlb.setOpaque(false);
+		close.setBorder(null);
+        tlb.setFloatable(false);
+		tlb.add(close);
+		close.addActionListener(new CloseButtonListener());
+		setToolBar(tlb);
+		// setBorder(BorderFactory.createEtchedBorder());
+
+		// setBorder(BorderFactory.createMatteBorder(1,1,1,1,java.awt.Color.green));
+		// setPreferredSize(new java.awt.Dimension
+		// (GUIGlobals.SPLIT_PANE_DIVIDER_LOCATION, 200));
+		// Util.pr(""+GUIGlobals.SPLIT_PANE_DIVIDER_LOCATION);
+	}
+
+	public void hideAway() {
+		manager.hideComponent(this);
+	}
+
+	/**
+	 * Used by SidePaneManager only, to keep track of visibility.
+	 * 
+	 */
+	void setVisibility(boolean vis) {
+		visible = vis;
+	}
+
+	/**
+	 * Used by SidePaneManager only, to keep track of visibility.
+	 * 
+	 */
+	boolean hasVisibility() {
+		return visible;
+	}
+
+	public void setActiveBasePanel(BasePanel panel) {
+		this.panel = panel;
+	}
+
+	public BasePanel getActiveBasePanel() {
+		return panel;
+	}
+
+	/**
+	 * Override this method if the component needs to make any changes before it
+	 * can close.
+	 */
+	public void componentClosing() {
+
+	}
+
+	/**
+	 * Override this method if the component needs to do any actions when
+	 * opening.
+	 */
+	public void componentOpening() {
+
+	}
+
+	public Dimension getMinimumSize() {
+		return getPreferredSize();
+	}
+
+	class CloseButtonListener implements ActionListener {
+		public void actionPerformed(ActionEvent e) {
+			hideAway();
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/SidePaneManager.java b/src/java/net/sf/jabref/SidePaneManager.java
index fa33efa..4762e1d 100644
--- a/src/java/net/sf/jabref/SidePaneManager.java
+++ b/src/java/net/sf/jabref/SidePaneManager.java
@@ -1,189 +1,189 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.util.*;
-
-import javax.swing.SwingUtilities;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-/**
- * Manages visibility of SideShowComponents in a given newly constructed
- * sidePane.
- * 
- * @version $Revision$ ($Date$)
- * 
- */
-public class SidePaneManager {
-
-	JabRefFrame frame;
-
-	BasePanel panel;
-
-	SidePane sidep;
-
-	Map<String, SidePaneComponent> components = new LinkedHashMap<String, SidePaneComponent>();
-
-	List<SidePaneComponent> visible = new LinkedList<SidePaneComponent>();
-
-	public SidePaneManager(JabRefFrame frame) {
-		this.frame = frame;
-		/*
-		 * Change by Morten Alver 2005.12.04: By postponing the updating of the
-		 * side pane components, we get rid of the annoying latency when
-		 * switching tabs:
-		 */
-		frame.tabbedPane.addChangeListener(new ChangeListener() {
-			public void stateChanged(ChangeEvent event) {
-				SwingUtilities.invokeLater(new Runnable() {
-					public void run() {
-						setActiveBasePanel((BasePanel) SidePaneManager.this.frame.tabbedPane
-							.getSelectedComponent());
-					}
-				});
-			}
-		});
-		sidep = new SidePane();
-                sidep.setVisible(false);
-	}
-
-	public SidePane getPanel() {
-		return sidep;
-	}
-
-	public synchronized boolean hasComponent(String name) {
-		return (components.get(name) != null);
-	}
-
-	public boolean isComponentVisible(String name) {
-		Object o = components.get(name);
-		if (o != null) {
-			return visible.contains(o);
-		} else {
-			return false;
-		}
-	}
-
-	public synchronized void toggle(String name) {
-		if (isComponentVisible(name)) {
-			hide(name);
-		} else {
-			show(name);
-		}
-	}
-
-	public void show(String name) {
-		Object o = components.get(name);
-		if (o != null) {
-			show((SidePaneComponent) o);
-		} else
-			System.err.println("Side pane component '" + name + "' unknown.");
-	}
-
-	public void hide(String name) {
-		Object o = components.get(name);
-		if (o != null) {
-			hideComponent((SidePaneComponent) o);
-		} else
-			System.err.println("Side pane component '" + name + "' unknown.");
-	}
-
-	public synchronized void register(String name, SidePaneComponent comp) {
-        components.put(name, comp);
-	}
-
-	public synchronized void registerAndShow(String name, SidePaneComponent comp) {
-		register(name, comp);
-		show(name);
-	}
-
-	private synchronized void show(SidePaneComponent component) {
-		if (!visible.contains(component)) {
-			// Put the new component at the top of the group
-			visible.add(0, component);
-			updateView();
-			component.componentOpening();
-		}
-	}
-
-    public SidePaneComponent getComponent(String name) {
-        return components.get(name);
-    }
-
-    public synchronized void hideComponent(SidePaneComponent comp) {
-		if (visible.contains(comp)) {
-			comp.componentClosing();
-			visible.remove(comp);
-			updateView();
-		}
-	}
-
-    public synchronized void hideComponent(String name) {
-	SidePaneComponent comp = components.get(name);
-	if (comp == null)
-	    return;
-	if (visible.contains(comp)) {
-	    comp.componentClosing();
-	    visible.remove(comp);
-	    updateView();
-	}
-    }
-
-	public synchronized void unregisterComponent(String name) {
-	    components.remove(name);
-	}
-
-
-
-	/**
-	 * Update all side pane components to show information from the given
-	 * BasePanel.
-	 * 
-	 * @param panel
-	 */
-	public void setActiveBasePanel(BasePanel panel) {
-		for (Iterator<String> i = components.keySet().iterator(); i.hasNext();) {
-			Object key = i.next();
-			components.get(key).setActiveBasePanel(panel);
-		}
-	}
-
-	public void updateView() {
-		sidep.setComponents(visible);
-		if (visible.size() > 0) {
-			boolean wasVisible = sidep.isVisible();
-			sidep.setVisible(true);
-			if (!wasVisible) {
-                            int width = Globals.prefs.getInt("sidePaneWidth");
-                            if (width > 0)
-                                frame.contentPane.setDividerLocation(width);
-                            else
-                                frame.contentPane.setDividerLocation(getPanel().getPreferredSize().width);
-                        }
-		} else {
-                    if (sidep.isVisible())
-                        Globals.prefs.putInt("sidePaneWidth", frame.contentPane.getDividerLocation());
-                    sidep.setVisible(false);
-                    
-                }
-	}
-
-	public void revalidate() {
-		sidep.revalidate();
-		sidep.repaint();
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.util.*;
+
+import javax.swing.SwingUtilities;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+/**
+ * Manages visibility of SideShowComponents in a given newly constructed
+ * sidePane.
+ * 
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class SidePaneManager {
+
+	JabRefFrame frame;
+
+	BasePanel panel;
+
+	SidePane sidep;
+
+	Map<String, SidePaneComponent> components = new LinkedHashMap<String, SidePaneComponent>();
+
+	List<SidePaneComponent> visible = new LinkedList<SidePaneComponent>();
+
+	public SidePaneManager(JabRefFrame frame) {
+		this.frame = frame;
+		/*
+		 * Change by Morten Alver 2005.12.04: By postponing the updating of the
+		 * side pane components, we get rid of the annoying latency when
+		 * switching tabs:
+		 */
+		frame.tabbedPane.addChangeListener(new ChangeListener() {
+			public void stateChanged(ChangeEvent event) {
+				SwingUtilities.invokeLater(new Runnable() {
+					public void run() {
+						setActiveBasePanel((BasePanel) SidePaneManager.this.frame.tabbedPane
+							.getSelectedComponent());
+					}
+				});
+			}
+		});
+		sidep = new SidePane();
+                sidep.setVisible(false);
+	}
+
+	public SidePane getPanel() {
+		return sidep;
+	}
+
+	public synchronized boolean hasComponent(String name) {
+		return (components.get(name) != null);
+	}
+
+	public boolean isComponentVisible(String name) {
+		Object o = components.get(name);
+		if (o != null) {
+			return visible.contains(o);
+		} else {
+			return false;
+		}
+	}
+
+	public synchronized void toggle(String name) {
+		if (isComponentVisible(name)) {
+			hide(name);
+		} else {
+			show(name);
+		}
+	}
+
+	public void show(String name) {
+		Object o = components.get(name);
+		if (o != null) {
+			show((SidePaneComponent) o);
+		} else
+			System.err.println("Side pane component '" + name + "' unknown.");
+	}
+
+	public void hide(String name) {
+		Object o = components.get(name);
+		if (o != null) {
+			hideComponent((SidePaneComponent) o);
+		} else
+			System.err.println("Side pane component '" + name + "' unknown.");
+	}
+
+	public synchronized void register(String name, SidePaneComponent comp) {
+        components.put(name, comp);
+	}
+
+	public synchronized void registerAndShow(String name, SidePaneComponent comp) {
+		register(name, comp);
+		show(name);
+	}
+
+	private synchronized void show(SidePaneComponent component) {
+		if (!visible.contains(component)) {
+			// Put the new component at the top of the group
+			visible.add(0, component);
+			updateView();
+			component.componentOpening();
+		}
+	}
+
+    public SidePaneComponent getComponent(String name) {
+        return components.get(name);
+    }
+
+    public synchronized void hideComponent(SidePaneComponent comp) {
+		if (visible.contains(comp)) {
+			comp.componentClosing();
+			visible.remove(comp);
+			updateView();
+		}
+	}
+
+    public synchronized void hideComponent(String name) {
+	SidePaneComponent comp = components.get(name);
+	if (comp == null)
+	    return;
+	if (visible.contains(comp)) {
+	    comp.componentClosing();
+	    visible.remove(comp);
+	    updateView();
+	}
+    }
+
+	public synchronized void unregisterComponent(String name) {
+	    components.remove(name);
+	}
+
+
+
+	/**
+	 * Update all side pane components to show information from the given
+	 * BasePanel.
+	 * 
+	 * @param panel
+	 */
+	public void setActiveBasePanel(BasePanel panel) {
+		for (Iterator<String> i = components.keySet().iterator(); i.hasNext();) {
+			Object key = i.next();
+			components.get(key).setActiveBasePanel(panel);
+		}
+	}
+
+	public void updateView() {
+		sidep.setComponents(visible);
+		if (visible.size() > 0) {
+			boolean wasVisible = sidep.isVisible();
+			sidep.setVisible(true);
+			if (!wasVisible) {
+                            int width = Globals.prefs.getInt("sidePaneWidth");
+                            if (width > 0)
+                                frame.contentPane.setDividerLocation(width);
+                            else
+                                frame.contentPane.setDividerLocation(getPanel().getPreferredSize().width);
+                        }
+		} else {
+                    if (sidep.isVisible())
+                        Globals.prefs.putInt("sidePaneWidth", frame.contentPane.getDividerLocation());
+                    sidep.setVisible(false);
+                    
+                }
+	}
+
+	public void revalidate() {
+		sidep.revalidate();
+		sidep.repaint();
+	}
+}
diff --git a/src/java/net/sf/jabref/SimpleSearchRule.java b/src/java/net/sf/jabref/SimpleSearchRule.java
index 47f4f0e..0101e47 100644
--- a/src/java/net/sf/jabref/SimpleSearchRule.java
+++ b/src/java/net/sf/jabref/SimpleSearchRule.java
@@ -1,76 +1,76 @@
-/*
- Copyright (C) 2003 Nathan Dunn, Morten O. Alver
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-package net.sf.jabref;
-
-import java.util.Map;
-
-import net.sf.jabref.export.layout.format.RemoveLatexCommands;
-
-public class SimpleSearchRule implements SearchRule {
-
-    final boolean m_caseSensitiveSearch;
-    //static RemoveBrackets removeBrackets = new RemoveBrackets();
-    static RemoveLatexCommands removeBrackets = new RemoveLatexCommands();
-
-    public SimpleSearchRule(boolean caseSensitive) {
-        m_caseSensitiveSearch = caseSensitive;
-    }
-
-    public boolean validateSearchStrings(Map<String, String> searchStrings) {
-        return true;
-    }
-
-    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
-        String searchString = searchStrings.values().iterator().next();
-
-        if (!m_caseSensitiveSearch)
-            searchString = searchString.toLowerCase();
-        int score = 0;
-        int counter = 0;
-        Object fieldContentAsObject;
-        String fieldContent;
-        for (String field : bibtexEntry.getAllFields()){
-            fieldContentAsObject = bibtexEntry.getField(field); 
-            if (fieldContentAsObject != null)
-                try {
-                    fieldContent = removeBrackets.format(fieldContentAsObject.toString());
-                    if (!m_caseSensitiveSearch)
-                        fieldContent = fieldContent.toLowerCase();
-                    counter = fieldContent.indexOf(searchString, counter);
-                    while (counter >= 0) {
-                        ++score;
-                        counter = fieldContent.indexOf(searchString, counter + 1);
-                    }
-                } catch (Throwable t) {
-                    System.err.println("sorting error: " + t);
-                }
-            counter = 0;
-        }
-        return score;
-    }
-
-}
+/*
+ Copyright (C) 2003 Nathan Dunn, Morten O. Alver
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+package net.sf.jabref;
+
+import java.util.Map;
+
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
+
+public class SimpleSearchRule implements SearchRule {
+
+    final boolean m_caseSensitiveSearch;
+    //static RemoveBrackets removeBrackets = new RemoveBrackets();
+    static RemoveLatexCommands removeBrackets = new RemoveLatexCommands();
+
+    public SimpleSearchRule(boolean caseSensitive) {
+        m_caseSensitiveSearch = caseSensitive;
+    }
+
+    public boolean validateSearchStrings(Map<String, String> searchStrings) {
+        return true;
+    }
+
+    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
+        String searchString = searchStrings.values().iterator().next();
+
+        if (!m_caseSensitiveSearch)
+            searchString = searchString.toLowerCase();
+        int score = 0;
+        int counter = 0;
+        Object fieldContentAsObject;
+        String fieldContent;
+        for (String field : bibtexEntry.getAllFields()){
+            fieldContentAsObject = bibtexEntry.getField(field); 
+            if (fieldContentAsObject != null)
+                try {
+                    fieldContent = removeBrackets.format(fieldContentAsObject.toString());
+                    if (!m_caseSensitiveSearch)
+                        fieldContent = fieldContent.toLowerCase();
+                    counter = fieldContent.indexOf(searchString, counter);
+                    while (counter >= 0) {
+                        ++score;
+                        counter = fieldContent.indexOf(searchString, counter + 1);
+                    }
+                } catch (Throwable t) {
+                    System.err.println("sorting error: " + t);
+                }
+            counter = 0;
+        }
+        return score;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/SimpleUrlDragDrop.java b/src/java/net/sf/jabref/SimpleUrlDragDrop.java
index e0bfe94..3441987 100644
--- a/src/java/net/sf/jabref/SimpleUrlDragDrop.java
+++ b/src/java/net/sf/jabref/SimpleUrlDragDrop.java
@@ -1,128 +1,128 @@
-/*
-Copyright (C) 2004 E. Putrycz
-
-All programs in this directory and
-subdirectories are published under the GNU General Public License as
-described below.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA
-
-Further information about the GNU GPL is available at:
-http://www.gnu.org/copyleft/gpl.ja.html
-
-*/
-package net.sf.jabref;
-
-import java.awt.Component;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.awt.dnd.*;
-import java.awt.event.ActionEvent;
-import java.io.IOException;
-import java.net.URL;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.swing.JOptionPane;
-
-import net.sf.jabref.EntryEditor.StoreFieldAction;
-
-/**
- * @author Erik Putrycz erik.putrycz-at-nrc-cnrc.gc.ca
- */
-
-public class SimpleUrlDragDrop implements DropTargetListener {
-
-    private static Logger logger = Logger.getLogger(SimpleUrlDragDrop.class
-            .getName());
-
-    private FieldEditor editor;
-
-    private StoreFieldAction storeFieldAction;
-
-    public SimpleUrlDragDrop(FieldEditor _editor,
-            StoreFieldAction _storeFieldAction) {
-        editor = _editor;
-        storeFieldAction = _storeFieldAction;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.awt.dnd.DropTargetListener#dragEnter(java.awt.dnd.DropTargetDragEvent)
-     */
-    public void dragEnter(DropTargetDragEvent dtde) {
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.awt.dnd.DropTargetListener#dragOver(java.awt.dnd.DropTargetDragEvent)
-     */
-    public void dragOver(DropTargetDragEvent dtde) {
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.awt.dnd.DropTargetListener#dropActionChanged(java.awt.dnd.DropTargetDragEvent)
-     */
-    public void dropActionChanged(DropTargetDragEvent dtde) {
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.awt.dnd.DropTargetListener#dragExit(java.awt.dnd.DropTargetEvent)
-     */
-    public void dragExit(DropTargetEvent dte) {
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.awt.dnd.DropTargetListener#drop(java.awt.dnd.DropTargetDropEvent)
-     */
-    public void drop(DropTargetDropEvent dtde) {
-        Transferable tsf = dtde.getTransferable();
-        dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
-        //try with an URL
-        DataFlavor dtURL = null;
-        try{
-            dtURL = new DataFlavor("application/x-java-url; class=java.net.URL");
-        }catch (ClassNotFoundException e){
-            logger.log(Level.WARNING,
-                    "Class not found for DnD... should not happen", e);
-        }
-        try{
-            URL url = (URL) tsf.getTransferData(dtURL);
-            //insert URL
-            editor.setText(url.toString());
-            storeFieldAction.actionPerformed(new ActionEvent(editor, 0, ""));
-            return;
-        }catch (UnsupportedFlavorException nfe){
-            // if not an URL
-            JOptionPane.showMessageDialog((Component) editor, Globals
-                    .lang("Operation not supported"), Globals
-                    .lang("Drag and Drop Error"), JOptionPane.ERROR_MESSAGE);
-            logger.log(Level.WARNING, "Transfer exception", nfe);
-        }catch (IOException ioex){
-            logger.log(Level.WARNING, "!should not happen!", ioex);
-        }
-    }
-
+/*
+Copyright (C) 2004 E. Putrycz
+
+All programs in this directory and
+subdirectories are published under the GNU General Public License as
+described below.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
+
+Further information about the GNU GPL is available at:
+http://www.gnu.org/copyleft/gpl.ja.html
+
+*/
+package net.sf.jabref;
+
+import java.awt.Component;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.dnd.*;
+import java.awt.event.ActionEvent;
+import java.io.IOException;
+import java.net.URL;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.JOptionPane;
+
+import net.sf.jabref.EntryEditor.StoreFieldAction;
+
+/**
+ * @author Erik Putrycz erik.putrycz-at-nrc-cnrc.gc.ca
+ */
+
+public class SimpleUrlDragDrop implements DropTargetListener {
+
+    private static Logger logger = Logger.getLogger(SimpleUrlDragDrop.class
+            .getName());
+
+    private FieldEditor editor;
+
+    private StoreFieldAction storeFieldAction;
+
+    public SimpleUrlDragDrop(FieldEditor _editor,
+            StoreFieldAction _storeFieldAction) {
+        editor = _editor;
+        storeFieldAction = _storeFieldAction;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.awt.dnd.DropTargetListener#dragEnter(java.awt.dnd.DropTargetDragEvent)
+     */
+    public void dragEnter(DropTargetDragEvent dtde) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.awt.dnd.DropTargetListener#dragOver(java.awt.dnd.DropTargetDragEvent)
+     */
+    public void dragOver(DropTargetDragEvent dtde) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.awt.dnd.DropTargetListener#dropActionChanged(java.awt.dnd.DropTargetDragEvent)
+     */
+    public void dropActionChanged(DropTargetDragEvent dtde) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.awt.dnd.DropTargetListener#dragExit(java.awt.dnd.DropTargetEvent)
+     */
+    public void dragExit(DropTargetEvent dte) {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.awt.dnd.DropTargetListener#drop(java.awt.dnd.DropTargetDropEvent)
+     */
+    public void drop(DropTargetDropEvent dtde) {
+        Transferable tsf = dtde.getTransferable();
+        dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
+        //try with an URL
+        DataFlavor dtURL = null;
+        try{
+            dtURL = new DataFlavor("application/x-java-url; class=java.net.URL");
+        }catch (ClassNotFoundException e){
+            logger.log(Level.WARNING,
+                    "Class not found for DnD... should not happen", e);
+        }
+        try{
+            URL url = (URL) tsf.getTransferData(dtURL);
+            //insert URL
+            editor.setText(url.toString());
+            storeFieldAction.actionPerformed(new ActionEvent(editor, 0, ""));
+            return;
+        }catch (UnsupportedFlavorException nfe){
+            // if not an URL
+            JOptionPane.showMessageDialog((Component) editor, Globals
+                    .lang("Operation not supported"), Globals
+                    .lang("Drag and Drop Error"), JOptionPane.ERROR_MESSAGE);
+            logger.log(Level.WARNING, "Transfer exception", nfe);
+        }catch (IOException ioex){
+            logger.log(Level.WARNING, "!should not happen!", ioex);
+        }
+    }
+
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/SplashScreen.java b/src/java/net/sf/jabref/SplashScreen.java
index 23ae32f..08b0dce 100644
--- a/src/java/net/sf/jabref/SplashScreen.java
+++ b/src/java/net/sf/jabref/SplashScreen.java
@@ -1,133 +1,133 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-//import javax.swing.*;
-import java.awt.EventQueue;
-import java.awt.Frame;
-import java.awt.Graphics;
-import java.awt.Image;
-import java.awt.MediaTracker;
-import java.awt.Toolkit;
-import java.awt.Window;
-import java.net.URL;
-
-/**
- * <p>Title: </p>
- * <p>Description: </p>
- * <p>Copyright: Copyright (c) 2003</p>
- * <p>Company: </p>
- * @author not attributable
- * @version 1.0
- */
-
-public class SplashScreen extends Window {
-    private Image splashImage;
-    private boolean paintCalled = false;
-    
-    public SplashScreen(Frame owner) {
-        super(owner);
-        URL imageURL = SplashScreen.class.getResource("/images/splash.png");
-        splashImage = Toolkit.getDefaultToolkit().createImage(imageURL);
-
-        // Load the image
-        MediaTracker mt = new MediaTracker(this);
-        mt.addImage(splashImage,0);
-        try {
-            mt.waitForID(0);
-        } catch(InterruptedException ie) {}
-
-                                                                                
-        // Center the window on the screen.
-        int imgWidth = splashImage.getWidth(this);
-        int imgHeight = splashImage.getHeight(this);  
-
-        setSize(imgWidth, imgHeight);
-        setLocationRelativeTo(null);
-        
-        /* Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
-        setLocation(
-            (screenDim.width - imgWidth) / 2,
-            (screenDim.height - imgHeight) / 2
-        );
-        */
-
-    }
-    
-    
-    /**
-     * Updates the display area of the window.
-     */
-    public void update(Graphics g) {
-        // Note: Since the paint method is going to draw an
-        // image that covers the complete area of the component we
-        // do not fill the component with its background color
-        // here. This avoids flickering.
-
-        g.setColor(getForeground());
-        paint(g);
-    }
-    /**
-     * Paints the image on the window.
-     */
-
-    public void paint(Graphics g) {
-        g.drawImage(splashImage, 0, 0, this);
-
-        // Notify method splash that the window
-        // has been painted.
-        if (! paintCalled) {
-            paintCalled = true;
-            synchronized (this) { notifyAll(); }
-        }
-    }
-    
-      /**
-     * Constructs and displays a SplashWindow.<p>
-     * This method is useful for startup splashs.
-     * Dispose the returned frame to get rid of the splash window.<p>
-     *
-     * @param splashImage The image to be displayed.
-     * @return Returns the frame that owns the SplashWindow.
-     */
-
-    public static Frame splash() {
-        Frame f = new Frame();
-        SplashScreen w = new SplashScreen(f);
-
-        // Show the window.
-        w.setVisible(true);
-        w.toFront();
-
-        // Note: To make sure the user gets a chance to see the
-        // splash window we wait until its paint method has been
-        // called at least once by the AWT event dispatcher thread.
-
-        // sebwills adds: However, just in case the paint method never gets called
-        // (e.g. if the splashscreen is completely obscured by an 'always on top'
-        // window of some other application), we time-out after 5 seconds.
-        if (! EventQueue.isDispatchThread()) {
-            synchronized (w) {
-                if (! w.paintCalled) {
-                    try { 
-                        w.wait(5000);
-                    } catch (InterruptedException e) {}
-                }
-            }
-        }
-        return f;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+//import javax.swing.*;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.MediaTracker;
+import java.awt.Toolkit;
+import java.awt.Window;
+import java.net.URL;
+
+/**
+ * <p>Title: </p>
+ * <p>Description: </p>
+ * <p>Copyright: Copyright (c) 2003</p>
+ * <p>Company: </p>
+ * @author not attributable
+ * @version 1.0
+ */
+
+public class SplashScreen extends Window {
+    private Image splashImage;
+    private boolean paintCalled = false;
+    
+    public SplashScreen(Frame owner) {
+        super(owner);
+        URL imageURL = SplashScreen.class.getResource("/images/splash.png");
+        splashImage = Toolkit.getDefaultToolkit().createImage(imageURL);
+
+        // Load the image
+        MediaTracker mt = new MediaTracker(this);
+        mt.addImage(splashImage,0);
+        try {
+            mt.waitForID(0);
+        } catch(InterruptedException ie) {}
+
+                                                                                
+        // Center the window on the screen.
+        int imgWidth = splashImage.getWidth(this);
+        int imgHeight = splashImage.getHeight(this);  
+
+        setSize(imgWidth, imgHeight);
+        setLocationRelativeTo(null);
+        
+        /* Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
+        setLocation(
+            (screenDim.width - imgWidth) / 2,
+            (screenDim.height - imgHeight) / 2
+        );
+        */
+
+    }
+    
+    
+    /**
+     * Updates the display area of the window.
+     */
+    public void update(Graphics g) {
+        // Note: Since the paint method is going to draw an
+        // image that covers the complete area of the component we
+        // do not fill the component with its background color
+        // here. This avoids flickering.
+
+        g.setColor(getForeground());
+        paint(g);
+    }
+    /**
+     * Paints the image on the window.
+     */
+
+    public void paint(Graphics g) {
+        g.drawImage(splashImage, 0, 0, this);
+
+        // Notify method splash that the window
+        // has been painted.
+        if (! paintCalled) {
+            paintCalled = true;
+            synchronized (this) { notifyAll(); }
+        }
+    }
+    
+      /**
+     * Constructs and displays a SplashWindow.<p>
+     * This method is useful for startup splashs.
+     * Dispose the returned frame to get rid of the splash window.<p>
+     *
+     * @param splashImage The image to be displayed.
+     * @return Returns the frame that owns the SplashWindow.
+     */
+
+    public static Frame splash() {
+        Frame f = new Frame();
+        SplashScreen w = new SplashScreen(f);
+
+        // Show the window.
+        w.setVisible(true);
+        w.toFront();
+
+        // Note: To make sure the user gets a chance to see the
+        // splash window we wait until its paint method has been
+        // called at least once by the AWT event dispatcher thread.
+
+        // sebwills adds: However, just in case the paint method never gets called
+        // (e.g. if the splashscreen is completely obscured by an 'always on top'
+        // window of some other application), we time-out after 5 seconds.
+        if (! EventQueue.isDispatchThread()) {
+            synchronized (w) {
+                if (! w.paintCalled) {
+                    try { 
+                        w.wait(5000);
+                    } catch (InterruptedException e) {}
+                }
+            }
+        }
+        return f;
+    }
+}
diff --git a/src/java/net/sf/jabref/StrictDuplicateSearch.java b/src/java/net/sf/jabref/StrictDuplicateSearch.java
index 57c18e7..d79162d 100644
--- a/src/java/net/sf/jabref/StrictDuplicateSearch.java
+++ b/src/java/net/sf/jabref/StrictDuplicateSearch.java
@@ -1,96 +1,96 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.util.HashSet;
-import java.util.Iterator;
-
-import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
-
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableRemoveEntry;
-
-/**
- *
- * @author  alver
- */
-public class StrictDuplicateSearch extends Thread {
-    
-    BasePanel panel;
-    
-    /** Creates a new instance of StrictDuplicateSearch */
-    public StrictDuplicateSearch(BasePanel bp) {
-        this.panel = bp;
-        
-    }
-    
-    public void run() {
-        HashSet<BibtexEntry> toRemove = new HashSet<BibtexEntry>();
-        NamedCompound ce = new NamedCompound(Globals.lang("Remove duplicates"));
-        panel.output(Globals.lang("Searching for duplicates..."));
-        Object[] keys = panel.database.getKeySet().toArray();
-        if ((keys == null) || (keys.length < 2))
-            return;
-        BibtexEntry[] bes = new BibtexEntry[keys.length];
-        for (int i=0; i<keys.length; i++)
-            bes[i] = panel.database.getEntryById((String)keys[i]);
-        
-        for (int i = 0; i<bes.length-1; i++) {
-            for (int j = i + 1; j<bes.length; j++) {
-                // We only check the entries if none of the two are already marked for removal.
-                if (!toRemove.contains(bes[i]) && !toRemove.contains(bes[j]) && 
-                    DuplicateCheck.compareEntriesStrictly(bes[i], bes[j]) > 1) {
-                    // These two entries are exactly the same, so we can remove one.                    
-                    if (!toRemove.contains(bes[i]) && !toRemove.contains(bes[j])) {
-                        toRemove.add(bes[j]);
-                    }
-                }
-            }
-         }
-    
-        if (toRemove.size() == 0) {
-            panel.output(Globals.lang("No duplicates found")+".");
-            return;
-        }
-               
-        // Finished searching. Now, remove all entries scheduled for removal:
-        int answer = JOptionPane.showConfirmDialog(panel.frame(), Globals.lang("Duplicates found")+": "+
-            toRemove.size()+". "+Globals.lang("Remove all?"), Globals.lang("Remove duplicates"),
-            JOptionPane.OK_CANCEL_OPTION);
-        if (answer == JOptionPane.CANCEL_OPTION)
-            return;
-        
-        panel.output(Globals.lang("Duplicates removed")+": "+toRemove.size());
-        
-        for (Iterator<BibtexEntry> i=toRemove.iterator(); i.hasNext();) {
-            BibtexEntry entry = i.next();
-            panel.database.removeEntry(entry.getId());        
-            ce.addEdit(new UndoableRemoveEntry(panel.database, entry, panel));
-        }
-     
-        ce.end();
-        panel.undoManager.addEdit(ce);
-        
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {                
-                panel.markBaseChanged();
-            }
-        });
-
-        
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.util.HashSet;
+import java.util.Iterator;
+
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableRemoveEntry;
+
+/**
+ *
+ * @author  alver
+ */
+public class StrictDuplicateSearch extends Thread {
+    
+    BasePanel panel;
+    
+    /** Creates a new instance of StrictDuplicateSearch */
+    public StrictDuplicateSearch(BasePanel bp) {
+        this.panel = bp;
+        
+    }
+    
+    public void run() {
+        HashSet<BibtexEntry> toRemove = new HashSet<BibtexEntry>();
+        NamedCompound ce = new NamedCompound(Globals.lang("Remove duplicates"));
+        panel.output(Globals.lang("Searching for duplicates..."));
+        Object[] keys = panel.database.getKeySet().toArray();
+        if ((keys == null) || (keys.length < 2))
+            return;
+        BibtexEntry[] bes = new BibtexEntry[keys.length];
+        for (int i=0; i<keys.length; i++)
+            bes[i] = panel.database.getEntryById((String)keys[i]);
+        
+        for (int i = 0; i<bes.length-1; i++) {
+            for (int j = i + 1; j<bes.length; j++) {
+                // We only check the entries if none of the two are already marked for removal.
+                if (!toRemove.contains(bes[i]) && !toRemove.contains(bes[j]) && 
+                    DuplicateCheck.compareEntriesStrictly(bes[i], bes[j]) > 1) {
+                    // These two entries are exactly the same, so we can remove one.                    
+                    if (!toRemove.contains(bes[i]) && !toRemove.contains(bes[j])) {
+                        toRemove.add(bes[j]);
+                    }
+                }
+            }
+         }
+    
+        if (toRemove.size() == 0) {
+            panel.output(Globals.lang("No duplicates found")+".");
+            return;
+        }
+               
+        // Finished searching. Now, remove all entries scheduled for removal:
+        int answer = JOptionPane.showConfirmDialog(panel.frame(), Globals.lang("Duplicates found")+": "+
+            toRemove.size()+". "+Globals.lang("Remove all?"), Globals.lang("Remove duplicates"),
+            JOptionPane.OK_CANCEL_OPTION);
+        if (answer == JOptionPane.CANCEL_OPTION)
+            return;
+        
+        panel.output(Globals.lang("Duplicates removed")+": "+toRemove.size());
+        
+        for (Iterator<BibtexEntry> i=toRemove.iterator(); i.hasNext();) {
+            BibtexEntry entry = i.next();
+            panel.database.removeEntry(entry.getId());        
+            ce.addEdit(new UndoableRemoveEntry(panel.database, entry, panel));
+        }
+     
+        ce.end();
+        panel.undoManager.addEdit(ce);
+        
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {                
+                panel.markBaseChanged();
+            }
+        });
+
+        
+    }
+}
diff --git a/src/java/net/sf/jabref/StringDialog.java b/src/java/net/sf/jabref/StringDialog.java
index 4505c06..e0a7402 100644
--- a/src/java/net/sf/jabref/StringDialog.java
+++ b/src/java/net/sf/jabref/StringDialog.java
@@ -1,563 +1,564 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Point;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.util.TreeSet;
-
-import javax.swing.AbstractAction;
-import javax.swing.ActionMap;
-import javax.swing.DefaultCellEditor;
-import javax.swing.InputMap;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.JTextField;
-import javax.swing.JToolBar;
-import javax.swing.LayoutFocusTraversalPolicy;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableColumnModel;
-import javax.swing.undo.CompoundEdit;
-
-import net.sf.jabref.export.LatexFieldFormatter;
-import net.sf.jabref.undo.UndoableInsertString;
-import net.sf.jabref.undo.UndoableRemoveString;
-import net.sf.jabref.undo.UndoableStringChange;
-
-public class StringDialog extends JDialog {
-
-    // A reference to the entry this object works on.
-    BibtexDatabase base;
-    JabRefFrame frame;
-    BasePanel panel;
-    JabRefPreferences prefs;
-    TreeSet<BibtexString> stringsSet; // Our locally sorted set of strings.
-    Object[] strings;
-
-    // Layout objects.
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-    JLabel lab;
-    Container conPane = getContentPane();
-    JToolBar tlb = new JToolBar();
-    JPanel pan = new JPanel();
-    StringTable table;
-    HelpAction helpAction;
-
-    public StringDialog(JabRefFrame frame, BasePanel panel,
-			BibtexDatabase base, JabRefPreferences prefs) {
-	super(frame);
-	this.frame = frame;
-	this.panel = panel;
-	this.base = base;
-	this.prefs = prefs;
-
-	sortStrings();
-
-	helpAction = new HelpAction
-	    (frame.helpDiag, GUIGlobals.stringEditorHelp, "Help");
-
-
-	addWindowListener(new WindowAdapter() {
-		public void windowClosing(WindowEvent e) {
-		    closeAction.actionPerformed(null);
-		}
-	    });
-
-	// We replace the default FocusTraversalPolicy with a subclass
-	// that only allows the StringTable to gain keyboard focus.
-	setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {
-		protected boolean accept(Component c) {
-		    return (super.accept(c) && (c instanceof StringTable));
-		}
-	    });
-
-	setLocation(prefs.getInt("stringsPosX"), prefs.getInt("stringsPosY"));
-	setSize(prefs.getInt("stringsSizeX"), prefs.getInt("stringsSizeY"));
-
-	pan.setLayout(gbl);
-	con.fill = GridBagConstraints.BOTH;
-	con.weighty = 1;
-	con.weightx = 1;
-
-	StringTableModel stm = new StringTableModel(this, base);
-	table = new StringTable(stm);
-	if (base.getStringCount() > 0)
-	    table.setRowSelectionInterval(0,0);
-
-	gbl.setConstraints(table.getPane(), con);
-	pan.add(table.getPane());
-
-	InputMap im = tlb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-	ActionMap am = tlb.getActionMap();
-	im.put(prefs.getKey("String dialog, add string"), "add");
-	am.put("add", newStringAction);
-	im.put(prefs.getKey("String dialog, remove string"), "remove");
-	am.put("remove", removeStringAction);
-	//im.put(prefs.getKey("String dialog, move string up"), "up");
-	//am.put("up", stringUpAction);
-	//im.put(prefs.getKey("String dialog, move string down"), "down");
-	//am.put("down", stringDownAction);
-	im.put(prefs.getKey("Close dialog"), "close");
-	am.put("close", closeAction);
-	im.put(prefs.getKey("Help"), "help");
-	am.put("help", helpAction);
-	im.put(prefs.getKey("Undo"), "undo");
-	am.put("undo", undoAction);
-	im.put(prefs.getKey("Redo"), "redo");
-	am.put("redo", redoAction);
-
-	//tlb.add(closeAction);
-	//tlb.addSeparator();
-	tlb.add(newStringAction);
-	tlb.add(removeStringAction);
-	tlb.addSeparator();
-	//tlb.add(stringUpAction);
-	//tlb.add(stringDownAction);
-	tlb.addSeparator();
-	tlb.add(helpAction);
-	conPane.add(tlb, BorderLayout.NORTH);
-	conPane.add(pan, BorderLayout.CENTER);
-
-	if (panel.getFile() != null)
-	    setTitle(Globals.lang(GUIGlobals.stringsTitle)+": "+panel.getFile().getName());
-	else
-	    setTitle(Globals.lang(GUIGlobals.stringsTitle)+": "+Globals.lang(GUIGlobals.untitledTitle));
-
-    }
-
-    class StringTable extends JTable {
-	JScrollPane sp = new JScrollPane(this);
-	public StringTable(StringTableModel stm) {
-	    super(stm);
-	    setShowVerticalLines(true);
-	    setShowHorizontalLines(true);
-	    setColumnSelectionAllowed(true);
-	    DefaultCellEditor dce = new DefaultCellEditor(new JTextField());
-	    dce.setClickCountToStart(2);
-	    setDefaultEditor(String.class, dce);
-	    TableColumnModel cm = getColumnModel();
-	    cm.getColumn(0).setPreferredWidth(800);
-	    cm.getColumn(1).setPreferredWidth(2000);
-	    sp.getViewport().setBackground(Globals.prefs.getColor("tableBackground"));
-	    // getInputMap().remove(GUIGlobals.exitDialog);
-	    getInputMap().put(frame.prefs.getKey("Close dialog"), "close");
-	    getActionMap().put("close", closeAction);
-	    getInputMap().put(frame.prefs.getKey("Help"), "help");
-	    getActionMap().put("help", helpAction);
-
-	}
-
-	public JComponent getPane() {
-	    return sp;
-	}
-
-    }
-
-    private void sortStrings() {
-	// Rebuild our sorted set of strings:
-	stringsSet = new TreeSet<BibtexString>(new BibtexStringComparator(false));
-	for (String s : base.getStringKeySet()){
-	    stringsSet.add(base.getString(s));
-	}
-	strings = stringsSet.toArray();
-    }
-
-    public void refreshTable() {
-	sortStrings();
-	table.revalidate();
-	table.clearSelection();
-	table.repaint();
-    }
-
-    class StringTableModel extends AbstractTableModel {
-
-	BibtexDatabase base;
-	StringDialog parent;
-
-	public StringTableModel(StringDialog parent, BibtexDatabase base) {
-	    this.parent = parent;
-	    this.base = base;
-	}
-
-	public Object getValueAt(int row, int col) {
-	    return ((col == 0) ?
-		    ((BibtexString)strings[row]).getName() :
-		    ((BibtexString)strings[row]).getContent());
-	}
-
-	public void setValueAt(Object value, int row, int col) {
-	    //	    if (row >= base.getStringCount())
-	    //	return; // After a Remove operation the program somehow
-	                // thinks the user is still editing an entry,
-	                // which might now be outside
-	    if (col == 0) {
-		// Change name of string.
-		if (!((String)value).equals(((BibtexString)strings[row]).getName())) {
-		    if (base.hasStringLabel((String)value))
-			JOptionPane.showMessageDialog(parent,
-						      Globals.lang("A string with that label "
-								   +"already exists"),
-						      Globals.lang("Label"),
-						      JOptionPane.ERROR_MESSAGE);
-                      else if (((String)value).indexOf(" ") >= 0) {
-                        JOptionPane.showMessageDialog
-                            (parent,
-                             Globals.lang("The label of the string can not contain spaces."),
-                             Globals.lang("Label"),
-                             JOptionPane.ERROR_MESSAGE);
-                      }
-                      else if (((String)value).indexOf("#") >= 0) {
-                        JOptionPane.showMessageDialog
-                            (parent,
-                            Globals.lang("The label of the string can not contain the '#' character."),
-                            Globals.lang("Label"),
-                            JOptionPane.ERROR_MESSAGE);
-                      }   
-                      else if (isNumber((String)value)) {
-                          JOptionPane.showMessageDialog
-                              (parent,
-                               Globals.lang("The label of the string can not be a number."),
-                               Globals.lang("Label"),
-                               JOptionPane.ERROR_MESSAGE);
-		    }
-		    else {
-			// Store undo information.
-			BibtexString subject = (BibtexString)strings[row];
-			panel.undoManager.addEdit
-			    (new UndoableStringChange
-			     (panel, subject, true,
-			      subject.getName(), (String)value));
-			subject.setName((String)value);
-			panel.markBaseChanged();
-			refreshTable();
-		    }
-		}
-	    } else {
-		// Change content of string.
-		BibtexString subject = (BibtexString)strings[row];
-
-		if (!((String)value).equals(subject.getContent())) {
-                    try {
-                        (new LatexFieldFormatter()).format((String)value, "__dummy");
-                    } catch (IllegalArgumentException ex) {
-                        return;
-                    }
-		    // Store undo information.
-		    panel.undoManager.addEdit
-			(new UndoableStringChange
-			 (panel, subject, false,
-			  subject.getContent(), (String)value));
-
-		    subject.setContent((String)value);
-		    panel.markBaseChanged();
-		}
-	    }
-	}
-
-	public int getColumnCount() {
-	    return 2;
-	}
-
-	public int getRowCount() {
-	    return strings.length; //base.getStringCount();
-	}
-
-	public String getColumnName(int col) {
-	    return ((col == 0) ?
-		    Globals.lang("Name") : Globals.lang("Content"));
-	}
-
-	public boolean isCellEditable(int row, int col) {
-	    return true;
-	}
-    }
-
-    protected boolean isNumber(String name) {
-	// A pure integer number can not be used as a string label,
-	// since Bibtex will read it as a number.
-	try {
-	    Integer.parseInt(name);
-	    return true;
-	} catch (NumberFormatException ex) {
-	    return false;
-	}
-
-    }
-
-    protected void assureNotEditing() {
-	if (table.isEditing()) {
-	    int col = table.getEditingColumn(),
-		row = table.getEditingRow();
-	    table.getCellEditor(row, col).stopCellEditing();
-	}
-    }
-
-    // The action concerned with closing the window.
-    CloseAction closeAction = new CloseAction(this);
-    class CloseAction extends AbstractAction {
-	StringDialog parent;
-	public CloseAction(StringDialog parent) {
-	    super("Close window");
-	    //, new ImageIcon(GUIGlobals.closeIconFile));
-	    putValue(SHORT_DESCRIPTION, Globals.lang("Close dialog"));
-	    this.parent = parent;
-	}
-	public void actionPerformed(ActionEvent e) {
-	    panel.stringsClosing();
-	    dispose();
-	    Point p = getLocation();
-	    Dimension d = getSize();
-	    prefs.putInt("stringsPosX", p.x);
-	    prefs.putInt("stringsPosY", p.y);
-	    prefs.putInt("stringsSizeX", d.width);
-	    prefs.putInt("stringsSizeY", d.height);
-	}
-    }
-
-    NewStringAction newStringAction = new NewStringAction(this);
-    class NewStringAction extends AbstractAction {
-	StringDialog parent;
-	public NewStringAction(StringDialog parent) {
-	    super("New string",
-		  GUIGlobals.getImage("add"));
-	    putValue(SHORT_DESCRIPTION, Globals.lang("New string"));
-	    this.parent = parent;
-	}
-	public void actionPerformed(ActionEvent e) {
-	    String name =
-		JOptionPane.showInputDialog(parent,
-					    Globals.lang("Please enter the string's label"));
-	    if (name == null)
-		return;
-	    if (isNumber(name)) {
-		JOptionPane.showMessageDialog
-		    (parent,
-		     Globals.lang("The label of the string can not be a number."),
-		     Globals.lang("Label"),
-		     JOptionPane.ERROR_MESSAGE);
-		return;
-	    }
-            if (name.indexOf("#") >= 0) {
-             JOptionPane.showMessageDialog
-                 (parent,
-                  Globals.lang("The label of the string can not contain the '#' character."),
-                  Globals.lang("Label"),
-                  JOptionPane.ERROR_MESSAGE);
-             return;
-           }           
-           if (name.indexOf(" ") >= 0) {
-             JOptionPane.showMessageDialog
-                 (parent,
-                  Globals.lang("The label of the string can not contain spaces."),
-                  Globals.lang("Label"),
-                  JOptionPane.ERROR_MESSAGE);
-             return;
-           }
-	    try {
-		String newId = Util.createNeutralId();
-		BibtexString bs = new BibtexString(newId, name, "");
-
-		// Store undo information:
-		panel.undoManager.addEdit
-		    (new UndoableInsertString
-		     (panel, panel.database, bs));
-
-		base.addString(bs);
-		refreshTable();
-		//		table.revalidate();
-		panel.markBaseChanged();
-	    } catch (KeyCollisionException ex) {
-		JOptionPane.showMessageDialog(parent,
-					      Globals.lang("A string with that label "
-							   +"already exists"),
-					      Globals.lang("Label"),
-					      JOptionPane.ERROR_MESSAGE);
-	    }
-	}
-    }
-
-    StoreContentAction storeContentAction = new StoreContentAction(this);
-    class StoreContentAction extends AbstractAction {
-	StringDialog parent;
-	public StoreContentAction(StringDialog parent) {
-	    super("Store string",
-		  GUIGlobals.getImage("add"));
-	    putValue(SHORT_DESCRIPTION, Globals.lang("Store string"));
-	    this.parent = parent;
-	}
-	public void actionPerformed(ActionEvent e) {
-	}
-    }
-
-    RemoveStringAction removeStringAction = new RemoveStringAction(this);
-    class RemoveStringAction extends AbstractAction {
-	StringDialog parent;
-	public RemoveStringAction(StringDialog parent) {
-	    super("Remove selected strings",
-		  GUIGlobals.getImage("remove"));
-	    putValue(SHORT_DESCRIPTION, Globals.lang("Remove selected strings"));
-	    this.parent = parent;
-	}
-	public void actionPerformed(ActionEvent e) {
-	    int[] sel = table.getSelectedRows();
-	    if (sel.length > 0) {
-
-		// Make sure no cell is being edited, as caused by the
-		// keystroke. This makes the content hang on the screen.
-		assureNotEditing();
-
-		String msg = Globals.lang("Really delete the selected")+" "+
-		    ((sel.length>1) ? sel.length+" "+Globals.lang("entries")
-		     : Globals.lang("entry"))+"?";
-		int answer = JOptionPane.showConfirmDialog(parent, msg, Globals.lang("Delete strings"),
-							   JOptionPane.YES_NO_OPTION,
-							   JOptionPane.QUESTION_MESSAGE);
-		if (answer == JOptionPane.YES_OPTION) {
-		    CompoundEdit ce = new CompoundEdit();
-		    for (int i=sel.length-1; i>=0; i--) {
-			// Delete the strings backwards to avoid moving indexes.
-
-			BibtexString subject = (BibtexString)strings[sel[i]];
-
-			// Store undo information:
-			ce.addEdit(new UndoableRemoveString
-				   (panel, base,
-				    subject));
-
-			base.removeString(subject.getId());
-		    }
-		    ce.end();
-		    panel.undoManager.addEdit(ce);
-
-		    //table.revalidate();
-		    refreshTable();
-		    if (base.getStringCount() > 0)
-			table.setRowSelectionInterval(0,0);
-		    //table.repaint();
-		    //panel.markBaseChanged();
-		}
-	    }
-	}
-    }
-
-    /*    StringUpAction stringUpAction = new StringUpAction();
-    class StringUpAction extends AbstractAction {
-	public StringUpAction() {
-	    super("Move string up",
-		  new ImageIcon(GUIGlobals.upIconFile));
-	    putValue(SHORT_DESCRIPTION, Globals.lang("Move string up"));
-	}
-	public void actionPerformed(ActionEvent e) {
-	    int[] sel = table.getSelectedRows();
-	    if ((sel.length == 1) && (sel[0] > 0)) {
-
-		// Make sure no cell is being edited, as caused by the
-		// keystroke. This makes the content hang on the screen.
-		assureNotEditing();
-		// Store undo information:
-		panel.undoManager.addEdit(new UndoableMoveString
-					      (panel, base, sel[0], true));
-
-		BibtexString bs = base.getString(sel[0]);
-		base.removeString(sel[0]);
-		try {
-		    base.addString(bs, sel[0]-1);
-		} catch (KeyCollisionException ex) {}
-		table.revalidate();
-		table.setRowSelectionInterval(sel[0]-1, sel[0]-1);
-		table.repaint();
-		panel.markBaseChanged();
-	    }
-	}
-    }
-
-    StringDownAction stringDownAction = new StringDownAction();
-    class StringDownAction extends AbstractAction {
-	public StringDownAction() {
-	    super("Move string down",
-		  new ImageIcon(GUIGlobals.downIconFile));
-	    putValue(SHORT_DESCRIPTION, Globals.lang("Move string down"));
-	}
-	public void actionPerformed(ActionEvent e) {
-	    int[] sel = table.getSelectedRows();
-	    if ((sel.length == 1) && (sel[0]+1 < base.getStringCount())) {
-
-		// Make sure no cell is being edited, as caused by the
-		// keystroke. This makes the content hang on the screen.
-		assureNotEditing();
-
-
-		// Store undo information:
-		panel.undoManager.addEdit(new UndoableMoveString
-					      (panel, base, sel[0], false));
-
-
-		BibtexString bs = base.getString(sel[0]);
-		base.removeString(sel[0]);
-		try {
-		    base.addString(bs, sel[0]+1);
-		} catch (KeyCollisionException ex) {}
-		table.revalidate();
-		table.setRowSelectionInterval(sel[0]+1, sel[0]+1);
-		table.repaint();
-		panel.markBaseChanged();
-	    }
-
-	}
-    }*/
-
-    UndoAction undoAction = new UndoAction();
-    class UndoAction extends AbstractAction {
-	public UndoAction() {
-	    super("Undo", GUIGlobals.getImage("undo"));
-	    putValue(SHORT_DESCRIPTION, Globals.lang("Undo"));
-	}
-	public void actionPerformed(ActionEvent e) {
-	    try {
-		panel.runCommand("undo");
-	    } catch (Throwable ex) {}
-	}
-    }
-
-    RedoAction redoAction = new RedoAction();
-    class RedoAction extends AbstractAction {
-	public RedoAction() {
-	    super("Undo", GUIGlobals.getImage("redo"));
-	    putValue(SHORT_DESCRIPTION, Globals.lang("Redo"));
-	}
-	public void actionPerformed(ActionEvent e) {
-	    try {
-		panel.runCommand("redo");
-	    } catch (Throwable ex) {}
-	}
-    }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.TreeSet;
+
+import javax.swing.AbstractAction;
+import javax.swing.ActionMap;
+import javax.swing.DefaultCellEditor;
+import javax.swing.InputMap;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.JToolBar;
+import javax.swing.LayoutFocusTraversalPolicy;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableColumnModel;
+import javax.swing.undo.CompoundEdit;
+
+import net.sf.jabref.export.LatexFieldFormatter;
+import net.sf.jabref.help.HelpAction;
+import net.sf.jabref.undo.UndoableInsertString;
+import net.sf.jabref.undo.UndoableRemoveString;
+import net.sf.jabref.undo.UndoableStringChange;
+
+public class StringDialog extends JDialog {
+
+    // A reference to the entry this object works on.
+    BibtexDatabase base;
+    JabRefFrame frame;
+    BasePanel panel;
+    JabRefPreferences prefs;
+    TreeSet<BibtexString> stringsSet; // Our locally sorted set of strings.
+    Object[] strings;
+
+    // Layout objects.
+    GridBagLayout gbl = new GridBagLayout();
+    GridBagConstraints con = new GridBagConstraints();
+    JLabel lab;
+    Container conPane = getContentPane();
+    JToolBar tlb = new JToolBar();
+    JPanel pan = new JPanel();
+    StringTable table;
+    HelpAction helpAction;
+
+    public StringDialog(JabRefFrame frame, BasePanel panel,
+			BibtexDatabase base, JabRefPreferences prefs) {
+	super(frame);
+	this.frame = frame;
+	this.panel = panel;
+	this.base = base;
+	this.prefs = prefs;
+
+	sortStrings();
+
+	helpAction = new HelpAction
+	    (frame.helpDiag, GUIGlobals.stringEditorHelp, "Help");
+
+
+	addWindowListener(new WindowAdapter() {
+		public void windowClosing(WindowEvent e) {
+		    closeAction.actionPerformed(null);
+		}
+	    });
+
+	// We replace the default FocusTraversalPolicy with a subclass
+	// that only allows the StringTable to gain keyboard focus.
+	setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {
+		protected boolean accept(Component c) {
+		    return (super.accept(c) && (c instanceof StringTable));
+		}
+	    });
+
+	setLocation(prefs.getInt("stringsPosX"), prefs.getInt("stringsPosY"));
+	setSize(prefs.getInt("stringsSizeX"), prefs.getInt("stringsSizeY"));
+
+	pan.setLayout(gbl);
+	con.fill = GridBagConstraints.BOTH;
+	con.weighty = 1;
+	con.weightx = 1;
+
+	StringTableModel stm = new StringTableModel(this, base);
+	table = new StringTable(stm);
+	if (base.getStringCount() > 0)
+	    table.setRowSelectionInterval(0,0);
+
+	gbl.setConstraints(table.getPane(), con);
+	pan.add(table.getPane());
+
+	InputMap im = tlb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+	ActionMap am = tlb.getActionMap();
+	im.put(prefs.getKey("String dialog, add string"), "add");
+	am.put("add", newStringAction);
+	im.put(prefs.getKey("String dialog, remove string"), "remove");
+	am.put("remove", removeStringAction);
+	//im.put(prefs.getKey("String dialog, move string up"), "up");
+	//am.put("up", stringUpAction);
+	//im.put(prefs.getKey("String dialog, move string down"), "down");
+	//am.put("down", stringDownAction);
+	im.put(prefs.getKey("Close dialog"), "close");
+	am.put("close", closeAction);
+	im.put(prefs.getKey("Help"), "help");
+	am.put("help", helpAction);
+	im.put(prefs.getKey("Undo"), "undo");
+	am.put("undo", undoAction);
+	im.put(prefs.getKey("Redo"), "redo");
+	am.put("redo", redoAction);
+
+	//tlb.add(closeAction);
+	//tlb.addSeparator();
+	tlb.add(newStringAction);
+	tlb.add(removeStringAction);
+	tlb.addSeparator();
+	//tlb.add(stringUpAction);
+	//tlb.add(stringDownAction);
+	tlb.addSeparator();
+	tlb.add(helpAction);
+	conPane.add(tlb, BorderLayout.NORTH);
+	conPane.add(pan, BorderLayout.CENTER);
+
+	if (panel.getFile() != null)
+	    setTitle(Globals.lang(GUIGlobals.stringsTitle)+": "+panel.getFile().getName());
+	else
+	    setTitle(Globals.lang(GUIGlobals.stringsTitle)+": "+Globals.lang(GUIGlobals.untitledTitle));
+
+    }
+
+    class StringTable extends JTable {
+	JScrollPane sp = new JScrollPane(this);
+	public StringTable(StringTableModel stm) {
+	    super(stm);
+	    setShowVerticalLines(true);
+	    setShowHorizontalLines(true);
+	    setColumnSelectionAllowed(true);
+	    DefaultCellEditor dce = new DefaultCellEditor(new JTextField());
+	    dce.setClickCountToStart(2);
+	    setDefaultEditor(String.class, dce);
+	    TableColumnModel cm = getColumnModel();
+	    cm.getColumn(0).setPreferredWidth(800);
+	    cm.getColumn(1).setPreferredWidth(2000);
+	    sp.getViewport().setBackground(Globals.prefs.getColor("tableBackground"));
+	    // getInputMap().remove(GUIGlobals.exitDialog);
+	    getInputMap().put(frame.prefs.getKey("Close dialog"), "close");
+	    getActionMap().put("close", closeAction);
+	    getInputMap().put(frame.prefs.getKey("Help"), "help");
+	    getActionMap().put("help", helpAction);
+
+	}
+
+	public JComponent getPane() {
+	    return sp;
+	}
+
+    }
+
+    private void sortStrings() {
+	// Rebuild our sorted set of strings:
+	stringsSet = new TreeSet<BibtexString>(new BibtexStringComparator(false));
+	for (String s : base.getStringKeySet()){
+	    stringsSet.add(base.getString(s));
+	}
+	strings = stringsSet.toArray();
+    }
+
+    public void refreshTable() {
+	sortStrings();
+	table.revalidate();
+	table.clearSelection();
+	table.repaint();
+    }
+
+    class StringTableModel extends AbstractTableModel {
+
+	BibtexDatabase base;
+	StringDialog parent;
+
+	public StringTableModel(StringDialog parent, BibtexDatabase base) {
+	    this.parent = parent;
+	    this.base = base;
+	}
+
+	public Object getValueAt(int row, int col) {
+	    return ((col == 0) ?
+		    ((BibtexString)strings[row]).getName() :
+		    ((BibtexString)strings[row]).getContent());
+	}
+
+	public void setValueAt(Object value, int row, int col) {
+	    //	    if (row >= base.getStringCount())
+	    //	return; // After a Remove operation the program somehow
+	                // thinks the user is still editing an entry,
+	                // which might now be outside
+	    if (col == 0) {
+		// Change name of string.
+		if (!((String)value).equals(((BibtexString)strings[row]).getName())) {
+		    if (base.hasStringLabel((String)value))
+			JOptionPane.showMessageDialog(parent,
+						      Globals.lang("A string with that label "
+								   +"already exists"),
+						      Globals.lang("Label"),
+						      JOptionPane.ERROR_MESSAGE);
+                      else if (((String)value).indexOf(" ") >= 0) {
+                        JOptionPane.showMessageDialog
+                            (parent,
+                             Globals.lang("The label of the string can not contain spaces."),
+                             Globals.lang("Label"),
+                             JOptionPane.ERROR_MESSAGE);
+                      }
+                      else if (((String)value).indexOf("#") >= 0) {
+                        JOptionPane.showMessageDialog
+                            (parent,
+                            Globals.lang("The label of the string can not contain the '#' character."),
+                            Globals.lang("Label"),
+                            JOptionPane.ERROR_MESSAGE);
+                      }   
+                      else if (isNumber((String)value)) {
+                          JOptionPane.showMessageDialog
+                              (parent,
+                               Globals.lang("The label of the string can not be a number."),
+                               Globals.lang("Label"),
+                               JOptionPane.ERROR_MESSAGE);
+		    }
+		    else {
+			// Store undo information.
+			BibtexString subject = (BibtexString)strings[row];
+			panel.undoManager.addEdit
+			    (new UndoableStringChange
+			     (panel, subject, true,
+			      subject.getName(), (String)value));
+			subject.setName((String)value);
+			panel.markBaseChanged();
+			refreshTable();
+		    }
+		}
+	    } else {
+		// Change content of string.
+		BibtexString subject = (BibtexString)strings[row];
+
+		if (!((String)value).equals(subject.getContent())) {
+                    try {
+                        (new LatexFieldFormatter()).format((String)value, "__dummy");
+                    } catch (IllegalArgumentException ex) {
+                        return;
+                    }
+		    // Store undo information.
+		    panel.undoManager.addEdit
+			(new UndoableStringChange
+			 (panel, subject, false,
+			  subject.getContent(), (String)value));
+
+		    subject.setContent((String)value);
+		    panel.markBaseChanged();
+		}
+	    }
+	}
+
+	public int getColumnCount() {
+	    return 2;
+	}
+
+	public int getRowCount() {
+	    return strings.length; //base.getStringCount();
+	}
+
+	public String getColumnName(int col) {
+	    return ((col == 0) ?
+		    Globals.lang("Name") : Globals.lang("Content"));
+	}
+
+	public boolean isCellEditable(int row, int col) {
+	    return true;
+	}
+    }
+
+    protected boolean isNumber(String name) {
+	// A pure integer number can not be used as a string label,
+	// since Bibtex will read it as a number.
+	try {
+	    Integer.parseInt(name);
+	    return true;
+	} catch (NumberFormatException ex) {
+	    return false;
+	}
+
+    }
+
+    protected void assureNotEditing() {
+	if (table.isEditing()) {
+	    int col = table.getEditingColumn(),
+		row = table.getEditingRow();
+	    table.getCellEditor(row, col).stopCellEditing();
+	}
+    }
+
+    // The action concerned with closing the window.
+    CloseAction closeAction = new CloseAction(this);
+    class CloseAction extends AbstractAction {
+	StringDialog parent;
+	public CloseAction(StringDialog parent) {
+	    super("Close window");
+	    //, new ImageIcon(GUIGlobals.closeIconFile));
+	    putValue(SHORT_DESCRIPTION, Globals.lang("Close dialog"));
+	    this.parent = parent;
+	}
+	public void actionPerformed(ActionEvent e) {
+	    panel.stringsClosing();
+	    dispose();
+	    Point p = getLocation();
+	    Dimension d = getSize();
+	    prefs.putInt("stringsPosX", p.x);
+	    prefs.putInt("stringsPosY", p.y);
+	    prefs.putInt("stringsSizeX", d.width);
+	    prefs.putInt("stringsSizeY", d.height);
+	}
+    }
+
+    NewStringAction newStringAction = new NewStringAction(this);
+    class NewStringAction extends AbstractAction {
+	StringDialog parent;
+	public NewStringAction(StringDialog parent) {
+	    super("New string",
+		  GUIGlobals.getImage("add"));
+	    putValue(SHORT_DESCRIPTION, Globals.lang("New string"));
+	    this.parent = parent;
+	}
+	public void actionPerformed(ActionEvent e) {
+	    String name =
+		JOptionPane.showInputDialog(parent,
+					    Globals.lang("Please enter the string's label"));
+	    if (name == null)
+		return;
+	    if (isNumber(name)) {
+		JOptionPane.showMessageDialog
+		    (parent,
+		     Globals.lang("The label of the string can not be a number."),
+		     Globals.lang("Label"),
+		     JOptionPane.ERROR_MESSAGE);
+		return;
+	    }
+            if (name.indexOf("#") >= 0) {
+             JOptionPane.showMessageDialog
+                 (parent,
+                  Globals.lang("The label of the string can not contain the '#' character."),
+                  Globals.lang("Label"),
+                  JOptionPane.ERROR_MESSAGE);
+             return;
+           }           
+           if (name.indexOf(" ") >= 0) {
+             JOptionPane.showMessageDialog
+                 (parent,
+                  Globals.lang("The label of the string can not contain spaces."),
+                  Globals.lang("Label"),
+                  JOptionPane.ERROR_MESSAGE);
+             return;
+           }
+	    try {
+		String newId = Util.createNeutralId();
+		BibtexString bs = new BibtexString(newId, name, "");
+
+		// Store undo information:
+		panel.undoManager.addEdit
+		    (new UndoableInsertString
+		     (panel, panel.database, bs));
+
+		base.addString(bs);
+		refreshTable();
+		//		table.revalidate();
+		panel.markBaseChanged();
+	    } catch (KeyCollisionException ex) {
+		JOptionPane.showMessageDialog(parent,
+					      Globals.lang("A string with that label "
+							   +"already exists"),
+					      Globals.lang("Label"),
+					      JOptionPane.ERROR_MESSAGE);
+	    }
+	}
+    }
+
+    StoreContentAction storeContentAction = new StoreContentAction(this);
+    class StoreContentAction extends AbstractAction {
+	StringDialog parent;
+	public StoreContentAction(StringDialog parent) {
+	    super("Store string",
+		  GUIGlobals.getImage("add"));
+	    putValue(SHORT_DESCRIPTION, Globals.lang("Store string"));
+	    this.parent = parent;
+	}
+	public void actionPerformed(ActionEvent e) {
+	}
+    }
+
+    RemoveStringAction removeStringAction = new RemoveStringAction(this);
+    class RemoveStringAction extends AbstractAction {
+	StringDialog parent;
+	public RemoveStringAction(StringDialog parent) {
+	    super("Remove selected strings",
+		  GUIGlobals.getImage("remove"));
+	    putValue(SHORT_DESCRIPTION, Globals.lang("Remove selected strings"));
+	    this.parent = parent;
+	}
+	public void actionPerformed(ActionEvent e) {
+	    int[] sel = table.getSelectedRows();
+	    if (sel.length > 0) {
+
+		// Make sure no cell is being edited, as caused by the
+		// keystroke. This makes the content hang on the screen.
+		assureNotEditing();
+
+		String msg = Globals.lang("Really delete the selected")+" "+
+		    ((sel.length>1) ? sel.length+" "+Globals.lang("entries")
+		     : Globals.lang("entry"))+"?";
+		int answer = JOptionPane.showConfirmDialog(parent, msg, Globals.lang("Delete strings"),
+							   JOptionPane.YES_NO_OPTION,
+							   JOptionPane.QUESTION_MESSAGE);
+		if (answer == JOptionPane.YES_OPTION) {
+		    CompoundEdit ce = new CompoundEdit();
+		    for (int i=sel.length-1; i>=0; i--) {
+			// Delete the strings backwards to avoid moving indexes.
+
+			BibtexString subject = (BibtexString)strings[sel[i]];
+
+			// Store undo information:
+			ce.addEdit(new UndoableRemoveString
+				   (panel, base,
+				    subject));
+
+			base.removeString(subject.getId());
+		    }
+		    ce.end();
+		    panel.undoManager.addEdit(ce);
+
+		    //table.revalidate();
+		    refreshTable();
+		    if (base.getStringCount() > 0)
+			table.setRowSelectionInterval(0,0);
+		    //table.repaint();
+		    //panel.markBaseChanged();
+		}
+	    }
+	}
+    }
+
+    /*    StringUpAction stringUpAction = new StringUpAction();
+    class StringUpAction extends AbstractAction {
+	public StringUpAction() {
+	    super("Move string up",
+		  new ImageIcon(GUIGlobals.upIconFile));
+	    putValue(SHORT_DESCRIPTION, Globals.lang("Move string up"));
+	}
+	public void actionPerformed(ActionEvent e) {
+	    int[] sel = table.getSelectedRows();
+	    if ((sel.length == 1) && (sel[0] > 0)) {
+
+		// Make sure no cell is being edited, as caused by the
+		// keystroke. This makes the content hang on the screen.
+		assureNotEditing();
+		// Store undo information:
+		panel.undoManager.addEdit(new UndoableMoveString
+					      (panel, base, sel[0], true));
+
+		BibtexString bs = base.getString(sel[0]);
+		base.removeString(sel[0]);
+		try {
+		    base.addString(bs, sel[0]-1);
+		} catch (KeyCollisionException ex) {}
+		table.revalidate();
+		table.setRowSelectionInterval(sel[0]-1, sel[0]-1);
+		table.repaint();
+		panel.markBaseChanged();
+	    }
+	}
+    }
+
+    StringDownAction stringDownAction = new StringDownAction();
+    class StringDownAction extends AbstractAction {
+	public StringDownAction() {
+	    super("Move string down",
+		  new ImageIcon(GUIGlobals.downIconFile));
+	    putValue(SHORT_DESCRIPTION, Globals.lang("Move string down"));
+	}
+	public void actionPerformed(ActionEvent e) {
+	    int[] sel = table.getSelectedRows();
+	    if ((sel.length == 1) && (sel[0]+1 < base.getStringCount())) {
+
+		// Make sure no cell is being edited, as caused by the
+		// keystroke. This makes the content hang on the screen.
+		assureNotEditing();
+
+
+		// Store undo information:
+		panel.undoManager.addEdit(new UndoableMoveString
+					      (panel, base, sel[0], false));
+
+
+		BibtexString bs = base.getString(sel[0]);
+		base.removeString(sel[0]);
+		try {
+		    base.addString(bs, sel[0]+1);
+		} catch (KeyCollisionException ex) {}
+		table.revalidate();
+		table.setRowSelectionInterval(sel[0]+1, sel[0]+1);
+		table.repaint();
+		panel.markBaseChanged();
+	    }
+
+	}
+    }*/
+
+    UndoAction undoAction = new UndoAction();
+    class UndoAction extends AbstractAction {
+	public UndoAction() {
+	    super("Undo", GUIGlobals.getImage("undo"));
+	    putValue(SHORT_DESCRIPTION, Globals.lang("Undo"));
+	}
+	public void actionPerformed(ActionEvent e) {
+	    try {
+		panel.runCommand("undo");
+	    } catch (Throwable ex) {}
+	}
+    }
+
+    RedoAction redoAction = new RedoAction();
+    class RedoAction extends AbstractAction {
+	public RedoAction() {
+	    super("Undo", GUIGlobals.getImage("redo"));
+	    putValue(SHORT_DESCRIPTION, Globals.lang("Redo"));
+	}
+	public void actionPerformed(ActionEvent e) {
+	    try {
+		panel.runCommand("redo");
+	    } catch (Throwable ex) {}
+	}
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/TabLabelPattern.java b/src/java/net/sf/jabref/TabLabelPattern.java
index 91791ec..04e0dd9 100644
--- a/src/java/net/sf/jabref/TabLabelPattern.java
+++ b/src/java/net/sf/jabref/TabLabelPattern.java
@@ -1,194 +1,195 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.GridBagConstraints;
-
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.JCheckBox;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JTextField;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import net.sf.jabref.labelPattern.LabelPattern;
-import net.sf.jabref.labelPattern.LabelPatternPanel;
-import net.sf.jabref.labelPattern.LabelPatternUtil;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * The Preferences panel for key generation.
- */
-public class TabLabelPattern extends LabelPatternPanel implements PrefsTab {
-	
-	private JabRefPreferences _prefs;
-	
-    private JCheckBox dontOverwrite = new JCheckBox(Globals.lang("Do not overwrite existing keys")),
-        warnBeforeOverwriting = new JCheckBox(Globals.lang("Warn before overwriting existing keys")),
-        generateOnSave = new JCheckBox(Globals.lang("Generate keys before saving (for entries without a key)")),
-        autoGenerateOnImport = new JCheckBox(Globals.lang("Generate keys for imported entries"));
-
-    private JRadioButton
-    letterStartA = new JRadioButton(Globals.lang("Ensure unique keys using letters (a, b, ...)")),
-    letterStartB = new JRadioButton(Globals.lang("Ensure unique keys using letters (b, c, ...)")),
-    alwaysAddLetter = new JRadioButton(Globals.lang("Always add letter (a, b, ...) to generated keys"));
-
-    private JTextField KeyPatternRegex = new JTextField(20);
-    private JTextField KeyPatternReplacement = new JTextField(20);
-
-	public TabLabelPattern(JabRefPreferences prefs, HelpDialog helpDiag) {
-	    super(helpDiag);
-		_prefs = prefs;
-		appendKeyGeneratorSettings();
-	}
-
-	/**
-	 * Store changes to table preferences. This method is called when
-	 * the user clicks Ok.
-	 *
-	 */
-	public void storeSettings() {
-
-         // Set the default value:
-         Globals.prefs.put("defaultLabelPattern", defaultPat.getText());
-
-         Globals.prefs.putBoolean("warnBeforeOverwritingKey", warnBeforeOverwriting.isSelected());
-         Globals.prefs.putBoolean("avoidOverwritingKey", dontOverwrite.isSelected());
-
-         //Globals.prefs.put("basenamePatternRegex", basenamePatternRegex.getText());
-         //Globals.prefs.put("basenamePatternReplacement", basenamePatternReplacement.getText());
-         Globals.prefs.put("KeyPatternRegex", KeyPatternRegex.getText());
-         Globals.prefs.put("KeyPatternReplacement", KeyPatternReplacement.getText());
-         Globals.prefs.putBoolean("generateKeysAfterInspection", autoGenerateOnImport.isSelected());
-         Globals.prefs.putBoolean("generateKeysBeforeSaving", generateOnSave.isSelected());
-
-         if (alwaysAddLetter.isSelected())
-             Globals.prefs.putBoolean("keyGenAlwaysAddLetter", true);
-         else if (letterStartA.isSelected()) {
-             Globals.prefs.putBoolean("keyGenFirstLetterA", true);
-             Globals.prefs.putBoolean("keyGenAlwaysAddLetter", false);
-         }
-         else {
-            Globals.prefs.putBoolean("keyGenFirstLetterA", false);
-            Globals.prefs.putBoolean("keyGenAlwaysAddLetter", false);
-         }
-        
-         LabelPatternUtil.updateDefaultPattern();
-
-        // fetch the old parent from the currently stored patterns
-	    LabelPattern defKeyPattern = _prefs.getKeyPattern().getParent();
-	    // fetch entries from GUI
-	    LabelPattern keypatterns = getLabelPattern();
-	    // restore old parent
-	    keypatterns.setParent(defKeyPattern);
-	    // store new patterns globally
-	    _prefs.putKeyPattern(keypatterns);
-	}
-	
-    private void appendKeyGeneratorSettings() {
-        ButtonGroup bg = new ButtonGroup();
-        bg.add(letterStartA);
-        bg.add(letterStartB);
-        bg.add(alwaysAddLetter);
-
-        // Build a panel for checkbox settings:
-        FormLayout layout = new FormLayout
-	        ("1dlu, 8dlu, left:pref, 8dlu, left:pref", "");//, 8dlu, 20dlu, 8dlu, fill:pref", "");
-        JPanel pan = new JPanel();
-	    DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-        builder.appendSeparator(Globals.lang("Key generator settings"));
-
-        builder.nextLine();
-        builder.append(pan);
-        builder.append(autoGenerateOnImport);
-        builder.append(letterStartA);
-        builder.nextLine();
-        builder.append(pan);
-        builder.append(warnBeforeOverwriting);
-        builder.append(letterStartB);
-        builder.nextLine();
-        builder.append(pan);
-        builder.append(dontOverwrite);
-        builder.append(alwaysAddLetter);
-        builder.nextLine();
-        builder.append(pan);
-        builder.append(generateOnSave);        
-        builder.nextLine();
-        builder.append(pan);
-        builder.append(Globals.lang("Replace (regular expression)")+":");
-        builder.append(Globals.lang("by")+":");
-
-        builder.nextLine();
-        builder.append(pan);
-        builder.append(KeyPatternRegex);
-        builder.append(KeyPatternReplacement);
-
-        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        con.gridx = 1;
-	    con.gridy = 3;
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        con.weightx = 1;
-        con.fill = GridBagConstraints.BOTH;
-        gbl.setConstraints(builder.getPanel(), con);
-        add(builder.getPanel());
-
-        dontOverwrite.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent event) {
-                // Warning before overwriting is only relevant if overwriting can happen:
-                warnBeforeOverwriting.setEnabled(!dontOverwrite.isSelected());
-            }
-        });
-	}
-	
-    public boolean readyToClose() {
-        return true;
-    }
-
-    public void setValues() {
-        super.setValues(_prefs.getKeyPattern());
-        defaultPat.setText(Globals.prefs.get("defaultLabelPattern"));
-        dontOverwrite.setSelected(Globals.prefs.getBoolean("avoidOverwritingKey"));
-        generateOnSave.setSelected(Globals.prefs.getBoolean("generateKeysBeforeSaving"));
-        autoGenerateOnImport.setSelected(Globals.prefs.getBoolean("generateKeysAfterInspection"));
-        warnBeforeOverwriting.setSelected(Globals.prefs.getBoolean("warnBeforeOverwritingKey"));
-
-        boolean alwaysAddLetter = Globals.prefs.getBoolean("keyGenAlwaysAddLetter"),
-                firstLetterA = Globals.prefs.getBoolean("keyGenFirstLetterA");
-        if (alwaysAddLetter)
-            this.alwaysAddLetter.setSelected(true);
-        else if (firstLetterA)
-            this.letterStartA.setSelected(true);
-        else
-            this.letterStartB.setSelected(true);
-
-        // Warning before overwriting is only relevant if overwriting can happen:
-        warnBeforeOverwriting.setEnabled(!dontOverwrite.isSelected());
-
-        KeyPatternRegex.setText(Globals.prefs.get("KeyPatternRegex"));
-        KeyPatternReplacement.setText(Globals.prefs.get("KeyPatternReplacement"));
-
-	    //basenamePatternRegex.setText(Globals.prefs.get("basenamePatternRegex"));
-	    //basenamePatternReplacement.setText(Globals.prefs.get("basenamePatternReplacement"));
-    }
-
-	public String getTabName() {
-	    return Globals.lang("BibTeX key generator");
-	}
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.GridBagConstraints;
+
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.sf.jabref.help.HelpDialog;
+import net.sf.jabref.labelPattern.LabelPattern;
+import net.sf.jabref.labelPattern.LabelPatternPanel;
+import net.sf.jabref.labelPattern.LabelPatternUtil;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * The Preferences panel for key generation.
+ */
+public class TabLabelPattern extends LabelPatternPanel implements PrefsTab {
+	
+	private JabRefPreferences _prefs;
+	
+    private JCheckBox dontOverwrite = new JCheckBox(Globals.lang("Do not overwrite existing keys")),
+        warnBeforeOverwriting = new JCheckBox(Globals.lang("Warn before overwriting existing keys")),
+        generateOnSave = new JCheckBox(Globals.lang("Generate keys before saving (for entries without a key)")),
+        autoGenerateOnImport = new JCheckBox(Globals.lang("Generate keys for imported entries"));
+
+    private JRadioButton
+    letterStartA = new JRadioButton(Globals.lang("Ensure unique keys using letters (a, b, ...)")),
+    letterStartB = new JRadioButton(Globals.lang("Ensure unique keys using letters (b, c, ...)")),
+    alwaysAddLetter = new JRadioButton(Globals.lang("Always add letter (a, b, ...) to generated keys"));
+
+    private JTextField KeyPatternRegex = new JTextField(20);
+    private JTextField KeyPatternReplacement = new JTextField(20);
+
+	public TabLabelPattern(JabRefPreferences prefs, HelpDialog helpDiag) {
+	    super(helpDiag);
+		_prefs = prefs;
+		appendKeyGeneratorSettings();
+	}
+
+	/**
+	 * Store changes to table preferences. This method is called when
+	 * the user clicks Ok.
+	 *
+	 */
+	public void storeSettings() {
+
+         // Set the default value:
+         Globals.prefs.put("defaultLabelPattern", defaultPat.getText());
+
+         Globals.prefs.putBoolean("warnBeforeOverwritingKey", warnBeforeOverwriting.isSelected());
+         Globals.prefs.putBoolean("avoidOverwritingKey", dontOverwrite.isSelected());
+
+         //Globals.prefs.put("basenamePatternRegex", basenamePatternRegex.getText());
+         //Globals.prefs.put("basenamePatternReplacement", basenamePatternReplacement.getText());
+         Globals.prefs.put("KeyPatternRegex", KeyPatternRegex.getText());
+         Globals.prefs.put("KeyPatternReplacement", KeyPatternReplacement.getText());
+         Globals.prefs.putBoolean("generateKeysAfterInspection", autoGenerateOnImport.isSelected());
+         Globals.prefs.putBoolean("generateKeysBeforeSaving", generateOnSave.isSelected());
+
+         if (alwaysAddLetter.isSelected())
+             Globals.prefs.putBoolean("keyGenAlwaysAddLetter", true);
+         else if (letterStartA.isSelected()) {
+             Globals.prefs.putBoolean("keyGenFirstLetterA", true);
+             Globals.prefs.putBoolean("keyGenAlwaysAddLetter", false);
+         }
+         else {
+            Globals.prefs.putBoolean("keyGenFirstLetterA", false);
+            Globals.prefs.putBoolean("keyGenAlwaysAddLetter", false);
+         }
+        
+         LabelPatternUtil.updateDefaultPattern();
+
+        // fetch the old parent from the currently stored patterns
+	    LabelPattern defKeyPattern = _prefs.getKeyPattern().getParent();
+	    // fetch entries from GUI
+	    LabelPattern keypatterns = getLabelPattern();
+	    // restore old parent
+	    keypatterns.setParent(defKeyPattern);
+	    // store new patterns globally
+	    _prefs.putKeyPattern(keypatterns);
+	}
+	
+    private void appendKeyGeneratorSettings() {
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(letterStartA);
+        bg.add(letterStartB);
+        bg.add(alwaysAddLetter);
+
+        // Build a panel for checkbox settings:
+        FormLayout layout = new FormLayout
+	        ("1dlu, 8dlu, left:pref, 8dlu, left:pref", "");//, 8dlu, 20dlu, 8dlu, fill:pref", "");
+        JPanel pan = new JPanel();
+	    DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+        builder.appendSeparator(Globals.lang("Key generator settings"));
+
+        builder.nextLine();
+        builder.append(pan);
+        builder.append(autoGenerateOnImport);
+        builder.append(letterStartA);
+        builder.nextLine();
+        builder.append(pan);
+        builder.append(warnBeforeOverwriting);
+        builder.append(letterStartB);
+        builder.nextLine();
+        builder.append(pan);
+        builder.append(dontOverwrite);
+        builder.append(alwaysAddLetter);
+        builder.nextLine();
+        builder.append(pan);
+        builder.append(generateOnSave);        
+        builder.nextLine();
+        builder.append(pan);
+        builder.append(Globals.lang("Replace (regular expression)")+":");
+        builder.append(Globals.lang("by")+":");
+
+        builder.nextLine();
+        builder.append(pan);
+        builder.append(KeyPatternRegex);
+        builder.append(KeyPatternReplacement);
+
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        con.gridx = 1;
+	    con.gridy = 3;
+        con.gridwidth = GridBagConstraints.REMAINDER;
+        con.weightx = 1;
+        con.fill = GridBagConstraints.BOTH;
+        gbl.setConstraints(builder.getPanel(), con);
+        add(builder.getPanel());
+
+        dontOverwrite.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent event) {
+                // Warning before overwriting is only relevant if overwriting can happen:
+                warnBeforeOverwriting.setEnabled(!dontOverwrite.isSelected());
+            }
+        });
+	}
+	
+    public boolean readyToClose() {
+        return true;
+    }
+
+    public void setValues() {
+        super.setValues(_prefs.getKeyPattern());
+        defaultPat.setText(Globals.prefs.get("defaultLabelPattern"));
+        dontOverwrite.setSelected(Globals.prefs.getBoolean("avoidOverwritingKey"));
+        generateOnSave.setSelected(Globals.prefs.getBoolean("generateKeysBeforeSaving"));
+        autoGenerateOnImport.setSelected(Globals.prefs.getBoolean("generateKeysAfterInspection"));
+        warnBeforeOverwriting.setSelected(Globals.prefs.getBoolean("warnBeforeOverwritingKey"));
+
+        boolean alwaysAddLetter = Globals.prefs.getBoolean("keyGenAlwaysAddLetter"),
+                firstLetterA = Globals.prefs.getBoolean("keyGenFirstLetterA");
+        if (alwaysAddLetter)
+            this.alwaysAddLetter.setSelected(true);
+        else if (firstLetterA)
+            this.letterStartA.setSelected(true);
+        else
+            this.letterStartB.setSelected(true);
+
+        // Warning before overwriting is only relevant if overwriting can happen:
+        warnBeforeOverwriting.setEnabled(!dontOverwrite.isSelected());
+
+        KeyPatternRegex.setText(Globals.prefs.get("KeyPatternRegex"));
+        KeyPatternReplacement.setText(Globals.prefs.get("KeyPatternReplacement"));
+
+	    //basenamePatternRegex.setText(Globals.prefs.get("basenamePatternRegex"));
+	    //basenamePatternReplacement.setText(Globals.prefs.get("basenamePatternReplacement"));
+    }
+
+	public String getTabName() {
+	    return Globals.lang("BibTeX key generator");
+	}
+}
diff --git a/src/java/net/sf/jabref/TableColumnsTab.java b/src/java/net/sf/jabref/TableColumnsTab.java
index c1442b0..d5efd16 100644
--- a/src/java/net/sf/jabref/TableColumnsTab.java
+++ b/src/java/net/sf/jabref/TableColumnsTab.java
@@ -1,646 +1,647 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.util.*;
-
-import javax.swing.*;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableColumnModel;
-import javax.swing.table.TableModel;
-
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.CellConstraints;
-import com.jgoodies.forms.layout.FormLayout;
-
-class TableColumnsTab extends JPanel implements PrefsTab {
-
-    JabRefPreferences _prefs;
-    private boolean tableChanged = false;
-    private JTable colSetup;
-    private int rowCount = -1, ncWidth = -1;
-    private Vector<TableRow> tableRows = new Vector<TableRow>(10);
-    private JabRefFrame frame;
-
-    private JCheckBox pdfColumn, urlColumn, fileColumn, arxivColumn;
-    
-    private JCheckBox showOneLetterHeadingForIconColumns;
-    private boolean oldShowOneLetterHeadingForIconColumns;
-
-	/*** begin: special fields ***/
-	private JCheckBox specialFieldsEnabled, rankingColumn, compactRankingColumn, qualityColumn, priorityColumn, relevanceColumn;
-	private JRadioButton syncKeywords, writeSpecialFields;
-	private boolean oldSpecialFieldsEnabled, oldRankingColumn, oldCompcatRankingColumn, oldQualityColumn, oldPriorityColumn, oldRelevanceColumn, oldSyncKeyWords, oldWriteSpecialFields;
-	private final JButton hlb; 
-	/*** end: special fields ***/
-
-    class TableRow {
-        String name;
-        int length;
-        public TableRow(String name) {
-            this.name = name;
-            length = GUIGlobals.DEFAULT_FIELD_LENGTH;
-        }
-        public TableRow(int length) {
-            this.length = length;
-            name = "";
-        }
-        public TableRow(String name, int length) {
-            this.name = name;
-            this.length = length;
-        }
-    }
-
-
-    /**
-     * Customization of external program paths.
-     *
-     * @param prefs a <code>JabRefPreferences</code> value
-     */
-    public TableColumnsTab(JabRefPreferences prefs, JabRefFrame frame) {
-        _prefs = prefs;
-        this.frame = frame;
-        setLayout(new BorderLayout());
-
-        TableModel tm = new AbstractTableModel() {
-                public int getRowCount() { return rowCount; }
-                public int getColumnCount() { return 2; }
-                public Object getValueAt(int row, int column) {
-                  if (row == 0)
-                    return (column==0 ? GUIGlobals.NUMBER_COL : ""+ncWidth);
-                  row--;
-                  if (row >= tableRows.size())
-                    return "";
-                  Object rowContent = tableRows.elementAt(row);
-                  if (rowContent == null)
-                    return "";
-                  TableRow tr = (TableRow)rowContent;
-                  switch (column) {
-                    case 0:
-                      return tr.name;
-                    case 1:
-                      return ((tr.length > 0) ? Integer.toString(tr.length) : "");
-                  }
-                  return null; // Unreachable.
-                }
-
-                public String getColumnName(int col) {
-                    return (col == 0 ? Globals.lang("Field name") : Globals.lang("Column width"));
-                }
-                public Class<?> getColumnClass(int column) {
-                    if (column == 0)
-                    	return String.class;
-                    else
-                    	return Integer.class;
-                }
-                public boolean isCellEditable(int row, int col) {
-                    return !((row == 0) && (col == 0));
-                }
-                public void setValueAt(Object value, int row, int col) {
-                    tableChanged = true;
-                    // Make sure the vector is long enough.
-                    while (row >= tableRows.size())
-                        tableRows.add(new TableRow("", -1));
-
-                        if ((row == 0) && (col == 1)) {
-                          ncWidth = Integer.parseInt(value.toString());
-                          return;
-                        }
-
-                    TableRow rowContent = tableRows.elementAt(row-1);
-
-                    if (col == 0) {
-                        rowContent.name = value.toString();
-                        if (((String)getValueAt(row, 1)).equals(""))
-                            setValueAt(""+GUIGlobals.DEFAULT_FIELD_LENGTH, row, 1);
-                    }
-                    else {
-                        if (value == null) rowContent.length = -1;
-                        else rowContent.length = Integer.parseInt(value.toString());
-                    }
-                }
-
-            };
-
-        colSetup = new JTable(tm);
-        TableColumnModel cm = colSetup.getColumnModel();
-        cm.getColumn(0).setPreferredWidth(140);
-        cm.getColumn(1).setPreferredWidth(80);
-
-        FormLayout layout = new FormLayout
-            ("1dlu, 8dlu, left:pref, 4dlu, fill:pref",//, 4dlu, fill:60dlu, 4dlu, fill:pref",
-             "");
-        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-        JPanel pan = new JPanel();
-        JPanel tabPanel = new JPanel();
-        tabPanel.setLayout(new BorderLayout());
-        JScrollPane sp = new JScrollPane
-            (colSetup, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-             JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-        colSetup.setPreferredScrollableViewportSize(new Dimension(250,200));
-        sp.setMinimumSize(new Dimension(250,300));
-        tabPanel.add(sp, BorderLayout.CENTER);
-        JToolBar tlb = new JToolBar(SwingConstants.VERTICAL);
-        tlb.setFloatable(false);
-        //tlb.setRollover(true);
-        //tlb.setLayout(gbl);
-        AddRowAction ara = new AddRowAction();
-        DeleteRowAction dra = new DeleteRowAction();
-        MoveRowUpAction moveUp = new MoveRowUpAction();
-        MoveRowDownAction moveDown = new MoveRowDownAction();
-        tlb.setBorder(null);
-        tlb.add(ara);
-        tlb.add(dra);
-        tlb.addSeparator();
-        tlb.add(moveUp);
-        tlb.add(moveDown);
-        //tlb.addSeparator();
-        //tlb.add(new UpdateWidthsAction());
-        tabPanel.add(tlb, BorderLayout.EAST);
-        
-        showOneLetterHeadingForIconColumns = new JCheckBox(Globals.lang("Show one letter heading for icon columns"));
-
-        fileColumn = new JCheckBox(Globals.lang("Show file column"));
-        pdfColumn = new JCheckBox(Globals.lang("Show PDF/PS column"));
-		urlColumn = new JCheckBox(Globals.lang("Show URL/DOI column"));
-		arxivColumn = new JCheckBox(Globals.lang("Show ArXiv column"));
-
-		/*** begin: special table columns and special fields ***/
-
-		HelpAction help = new HelpAction(frame.helpDiag, GUIGlobals.specialFieldsHelp);
-	    hlb = new JButton(GUIGlobals.getImage("helpSmall"));
-	    hlb.setToolTipText(Globals.lang("Help on special fields"));
-	    hlb.addActionListener(help);
-		
-		specialFieldsEnabled = new JCheckBox(Globals.lang("Enable special fields"));
-//		.concat(". ").concat(Globals.lang("You must restart JabRef for this to come into effect.")));
-		specialFieldsEnabled.addChangeListener(new ChangeListener() {
-			public void stateChanged(ChangeEvent event) {
-				boolean isEnabled = specialFieldsEnabled.isSelected();
-				rankingColumn.setEnabled(isEnabled);
-				compactRankingColumn.setEnabled(isEnabled?rankingColumn.isSelected():false);
-				qualityColumn.setEnabled(isEnabled);
-				priorityColumn.setEnabled(isEnabled);
-				relevanceColumn.setEnabled(isEnabled);
-				syncKeywords.setEnabled(isEnabled);
-				writeSpecialFields.setEnabled(isEnabled);
-			}
-		});
-		rankingColumn = new JCheckBox(Globals.lang("Show rank"));
-		rankingColumn.addChangeListener(new ChangeListener() {
-			public void stateChanged(ChangeEvent event) {
-				compactRankingColumn.setEnabled(rankingColumn.isSelected());
-			}
-		});
-		compactRankingColumn = new JCheckBox(Globals.lang("Compact rank"));
-		qualityColumn = new JCheckBox(Globals.lang("Show quality"));
-		priorityColumn = new JCheckBox(Globals.lang("Show priority"));
-		relevanceColumn = new JCheckBox(Globals.lang("Show relevance"));
-		
-		// "sync keywords" and "write special" fields may be configured mutually exclusive only
-		// The implementation supports all combinations (TRUE+TRUE and FALSE+FALSE, even if the latter does not make sense)
-		// To avoid confusion, we opted to make the setting mutually exclusive
-		syncKeywords = new JRadioButton(Globals.lang("Synchronize with keywords"));
-		writeSpecialFields = new JRadioButton(Globals.lang("Write values of special fields as separate fields to BibTeX"));
-		ButtonGroup group = new ButtonGroup();
-		group.add(syncKeywords);
-		group.add(writeSpecialFields);
-		
-		builder.appendSeparator(Globals.lang("Special table columns"));
-		builder.nextLine();
-		builder.append(pan);
-
-		DefaultFormBuilder specialTableColumnsBuilder = new DefaultFormBuilder(new FormLayout(
-				"8dlu, 8dlu, 8cm, 8dlu, left:pref", "pref, pref, pref, pref, pref, pref, pref, pref, pref, pref"));
-        CellConstraints cc = new CellConstraints();
-		
-        specialTableColumnsBuilder.add(specialFieldsEnabled, cc.xyw(1, 1, 3));
-        specialTableColumnsBuilder.add(rankingColumn, cc.xyw(2, 2, 2));
-        specialTableColumnsBuilder.add(compactRankingColumn, cc.xy(3, 3));
-        specialTableColumnsBuilder.add(relevanceColumn, cc.xyw(2, 4, 2));
-        specialTableColumnsBuilder.add(qualityColumn, cc.xyw(2, 5, 2));
-        specialTableColumnsBuilder.add(priorityColumn, cc.xyw(2, 6, 2));
-        specialTableColumnsBuilder.add(syncKeywords, cc.xyw(2, 7, 2));
-        specialTableColumnsBuilder.add(writeSpecialFields, cc.xyw(2, 8, 2));
-        specialTableColumnsBuilder.add(showOneLetterHeadingForIconColumns, cc.xyw(1, 9, 5));
-		specialTableColumnsBuilder.add(hlb, cc.xyw(1, 10, 2));
-
-		specialTableColumnsBuilder.add(fileColumn, cc.xy(5, 1));	
-		specialTableColumnsBuilder.add(pdfColumn, cc.xy(5, 2));	
-		specialTableColumnsBuilder.add(urlColumn, cc.xy(5, 3));	
-		specialTableColumnsBuilder.add(arxivColumn, cc.xy(5, 4));	
-
-		builder.append(specialTableColumnsBuilder.getPanel());
-		builder.nextLine();
-
-		/*** end: special table columns and special fields ***/
-
-        builder.appendSeparator(Globals.lang("Entry table columns"));
-        builder.nextLine();
-        builder.append(pan); builder.append(tabPanel); builder.nextLine();
-//	lab = new JLabel("<HTML>("+Globals.lang("this button will update the column width settings<BR>"
-//						+"to match the current widths in your table")+")</HTML>");
-//        lab = new JLabel("<HTML>("+Globals.lang("this_button_will_update") +")</HTML>") ;
-        builder.append(pan);
-        JButton buttonWidth = new JButton(new UpdateWidthsAction());
-        JButton buttonOrder = new JButton(new UpdateOrderAction());
-        builder.append(buttonWidth);builder.nextLine();
-        builder.append(pan);
-        builder.append(buttonOrder);builder.nextLine();
-        builder.append(pan);
-        //builder.append(lab);
-        builder.nextLine();
-        pan = builder.getPanel();
-        pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        add(pan, BorderLayout.CENTER);
-    }
-
-    public void setValues() {
-		fileColumn.setSelected(_prefs.getBoolean("fileColumn"));
-        pdfColumn.setSelected(_prefs.getBoolean("pdfColumn"));
-		urlColumn.setSelected(_prefs.getBoolean("urlColumn"));
-        fileColumn.setSelected(_prefs.getBoolean("fileColumn"));
-        arxivColumn.setSelected(_prefs.getBoolean("arxivColumn"));
-
-        /*** begin: special fields ***/
-
-        oldRankingColumn = _prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING);
-        rankingColumn.setSelected(oldRankingColumn);
-        
-        oldCompcatRankingColumn = _prefs.getBoolean(SpecialFieldsUtils.PREF_RANKING_COMPACT);
-        compactRankingColumn.setSelected(oldCompcatRankingColumn);
-		
-        oldQualityColumn = _prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY);
-        qualityColumn.setSelected(oldQualityColumn);
-        
-		oldPriorityColumn = _prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY);
-        priorityColumn.setSelected(oldPriorityColumn);
-		
-		oldRelevanceColumn = _prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE);
-        relevanceColumn.setSelected(oldRelevanceColumn);
-		
-		oldSyncKeyWords = _prefs.getBoolean(SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS);
-		syncKeywords.setSelected(oldSyncKeyWords);
-		
-		oldWriteSpecialFields = _prefs.getBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS);
-		writeSpecialFields.setSelected(oldWriteSpecialFields);
-
-		// has to be called as last to correctly enable/disable the other settings
-		oldSpecialFieldsEnabled = _prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED);
-		specialFieldsEnabled.setSelected(!oldSpecialFieldsEnabled);
-		specialFieldsEnabled.setSelected(oldSpecialFieldsEnabled); // Call twice to make sure the ChangeListener is triggered
-		
-        /*** end: special fields ***/
-		
-		oldShowOneLetterHeadingForIconColumns = _prefs.getBoolean(JabRefPreferences.SHOWONELETTERHEADINGFORICONCOLUMNS);
-		showOneLetterHeadingForIconColumns.setSelected(oldShowOneLetterHeadingForIconColumns);
-
-		tableRows.clear();
-	String[] names = _prefs.getStringArray("columnNames"),
-            lengths = _prefs.getStringArray("columnWidths");
-        for (int i=0; i<names.length; i++) {
-            if (i<lengths.length)
-                tableRows.add(new TableRow(names[i], Integer.parseInt(lengths[i])));
-            else
-                tableRows.add(new TableRow(names[i]));
-        }
-        rowCount = tableRows.size()+5;
-        ncWidth = _prefs.getInt("numberColWidth");
-
-    }
-
-
-    class DeleteRowAction extends AbstractAction {
-        public DeleteRowAction() {
-          super("Delete row", GUIGlobals.getImage("remove"));
-          putValue(SHORT_DESCRIPTION, Globals.lang("Delete rows"));
-        }
-        public void actionPerformed(ActionEvent e) {
-          int[] rows = colSetup.getSelectedRows();
-          if (rows.length == 0)
-            return;
-          int offs = 0;
-          for (int i=rows.length-1; i>=0; i--) {
-            if ((rows[i] <= tableRows.size()) && (rows[i] != 0)) {
-                tableRows.remove(rows[i]-1);
-                offs++;
-            }
-          }
-          rowCount -= offs;
-          if (rows.length > 1) colSetup.clearSelection();
-          colSetup.revalidate();
-          colSetup.repaint();
-          tableChanged = true;
-        }
-      }
-
-    class AddRowAction extends AbstractAction {
-        public AddRowAction() {
-          super("Add row", GUIGlobals.getImage("add"));
-          putValue(SHORT_DESCRIPTION, Globals.lang("Insert rows"));
-        }
-        public void actionPerformed(ActionEvent e) {
-            int[] rows = colSetup.getSelectedRows();
-            if (rows.length == 0) {
-                // No rows selected, so we just add one at the end.
-                rowCount++;
-                colSetup.revalidate();
-                colSetup.repaint();
-                return;
-            }
-            for (int i=0; i<rows.length; i++) {
-                if (rows[i]+i-1 < tableRows.size())
-                    tableRows.add(Math.max(0, rows[i]+i-1), new TableRow(GUIGlobals.DEFAULT_FIELD_LENGTH));
-            }
-            rowCount += rows.length;
-            if (rows.length > 1) colSetup.clearSelection();
-            colSetup.revalidate();
-            colSetup.repaint();
-            tableChanged = true;
-        }
-    }
-
-    abstract class AbstractMoveRowAction extends AbstractAction {
-		public AbstractMoveRowAction(String string, ImageIcon image) {
-			super(string, image);
-		}
-
-		protected void swap(int i, int j) {
-			if (i < 0 || i >= tableRows.size())
-				return;
-			if (j < 0 || j >= tableRows.size())
-				return;
-			TableRow tmp = tableRows.get(i);
-			tableRows.set(i, tableRows.get(j));
-			tableRows.set(j, tmp);
-		}
-	}
-
-	class MoveRowUpAction extends AbstractMoveRowAction {
-		public MoveRowUpAction() {
-			super("Up", GUIGlobals.getImage("up"));
-			putValue(SHORT_DESCRIPTION, Globals.lang("Move up"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			int selected[] = colSetup.getSelectedRows();
-			Arrays.sort(selected);
-			// first element (#) not inside tableRows
-			// don't move if a selected element is at bounce
-			if (selected.length > 0 && selected[0] > 1) {
-				boolean newSelected[] = new boolean[colSetup.getRowCount()];
-				for (int i : selected) {
-					swap(i - 1, i - 2);
-					newSelected[i - 1] = true;
-				}
-				// select all and remove unselected
-				colSetup.setRowSelectionInterval(0, colSetup.getRowCount() - 1);
-				for (int i = 0; i < colSetup.getRowCount(); i++) {
-					if (!newSelected[i])
-						colSetup.removeRowSelectionInterval(i, i);
-				}
-				colSetup.revalidate();
-				colSetup.repaint();
-				tableChanged = true;
-			}
-		}
-	}
-
-	class MoveRowDownAction extends AbstractMoveRowAction {
-		public MoveRowDownAction() {
-			super("Down", GUIGlobals.getImage("down"));
-			putValue(SHORT_DESCRIPTION, Globals.lang("Down"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			int selected[] = colSetup.getSelectedRows();
-			Arrays.sort(selected);
-			final int last = selected.length - 1;
-			boolean newSelected[] = new boolean[colSetup.getRowCount()];
-			// don't move if a selected element is at bounce
-			if (selected.length > 0 && selected[last] < tableRows.size()) {
-				for (int i = last; i >= 0; i--) {
-					swap(selected[i] - 1, selected[i]);
-					newSelected[selected[i] + 1] = true;
-				}
-				// select all and remove unselected
-				colSetup.setRowSelectionInterval(0, colSetup.getRowCount() - 1);
-				for (int i = 0; i < colSetup.getRowCount(); i++) {
-					if (!newSelected[i])
-						colSetup.removeRowSelectionInterval(i, i);
-				}
-				colSetup.revalidate();
-				colSetup.repaint();
-				tableChanged = true;
-			}
-		}
-	}
-
-	class UpdateOrderAction extends AbstractAction {
-		public UpdateOrderAction() {
-			super(Globals.lang("Update to current column order"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			BasePanel panel = frame.basePanel();
-			if (panel == null) {
-				return;
-			}
-			// idea: sort elements according to value stored in hash, keep
-			// everything not inside hash/mainTable as it was
-			final HashMap<String, Integer> map = new HashMap<String, Integer>();
-
-			// first element (#) not inside tableRows
-			for (int i = 1; i < panel.mainTable.getColumnCount(); i++) {
-				String name = panel.mainTable.getColumnName(i);
-				if (name != null && name.length() != 0) {
-					map.put(name.toLowerCase(), i);
-				}
-			}
-			Collections.sort(tableRows, new Comparator<TableRow>() {
-				public int compare(TableRow o1, TableRow o2) {
-					Integer n1 = map.get(o1.name);
-					Integer n2 = map.get(o2.name);
-					if (n1 == null || n2 == null) {
-						return 0;
-					}
-					return n1.compareTo(n2);
-				}
-			});
-
-			colSetup.revalidate();
-			colSetup.repaint();
-			tableChanged = true;
-		}
-	}
-
-    class UpdateWidthsAction extends AbstractAction {
-        public UpdateWidthsAction() {
-          //super(Globals.lang("Update to current column widths"));
-          super(Globals.lang("Update to current column widths"));
-          //putValue(SHORT_DESCRIPTION, Globals.lang("Update to current column widths"));
-        }
-        public void actionPerformed(ActionEvent e) {
-            BasePanel panel = frame.basePanel();
-            if (panel == null) return;
-            TableColumnModel colMod = panel.mainTable.getColumnModel();
-            colSetup.setValueAt(""+colMod.getColumn(0).getWidth(), 0, 1);
-            for (int i=1; i<colMod.getColumnCount(); i++) {
-            try {
-                String name = panel.mainTable.getColumnName(i).toLowerCase();
-                int width = colMod.getColumn(i).getWidth();
-                //Util.pr(":"+((String)colSetup.getValueAt(i-1, 0)).toLowerCase());
-                //Util.pr("-"+name);
-                if ((i <= tableRows.size()) && (((String)colSetup.getValueAt(i, 0)).toLowerCase()).equals(name))
-                    colSetup.setValueAt(""+width, i, 1);
-                else { // Doesn't match; search for a matching col in our table
-                    for (int j=0; j<colSetup.getRowCount(); j++) {
-                        if ((j < tableRows.size()) &&
-                            (((String)colSetup.getValueAt(j, 0)).toLowerCase()).equals(name)) {
-                            colSetup.setValueAt(""+width, j, 1);
-                            break;
-                        }
-                    }
-                }
-            } catch (Throwable ex) {
-                ex.printStackTrace();
-            }
-            colSetup.revalidate();
-            colSetup.repaint();
-        }
-
-        }
-    }
-
-
-    /**
-     * Store changes to table preferences. This method is called when
-     * the user clicks Ok.
-     *
-     */
-    public void storeSettings() {
-        _prefs.putBoolean("fileColumn", fileColumn.isSelected());
-        _prefs.putBoolean("pdfColumn", pdfColumn.isSelected());
-		_prefs.putBoolean("urlColumn", urlColumn.isSelected());
-		_prefs.putBoolean("arxivColumn", arxivColumn.isSelected());
-		
-		_prefs.putBoolean(JabRefPreferences.SHOWONELETTERHEADINGFORICONCOLUMNS, showOneLetterHeadingForIconColumns.isSelected());
-
-        /*** begin: special fields ***/
-        
-		boolean 
-		newSpecialFieldsEnabled = specialFieldsEnabled.isSelected(),
-		newRankingColumn = rankingColumn.isSelected(),
-		newCompactRankingColumn = compactRankingColumn.isSelected(),
-		newQualityColumn = qualityColumn.isSelected(), 
-		newPriorityColumn = priorityColumn.isSelected(), 
-		newRelevanceColumn = relevanceColumn.isSelected(), 
-		newSyncKeyWords = syncKeywords.isSelected(), 
-		newWriteSpecialFields = writeSpecialFields.isSelected();
-		
-		boolean restartRequired = false;
-		restartRequired = (oldSpecialFieldsEnabled != newSpecialFieldsEnabled) ||
-				(oldRankingColumn != newRankingColumn) ||
-				(oldCompcatRankingColumn != newCompactRankingColumn) ||
-				(oldQualityColumn != newQualityColumn) ||
-				(oldPriorityColumn != newPriorityColumn) ||
-				(oldRelevanceColumn != newRelevanceColumn) ||
-				(oldSyncKeyWords != newSyncKeyWords) ||
-				(oldWriteSpecialFields != newWriteSpecialFields);
-		if (restartRequired) {
-	        JOptionPane.showMessageDialog(null, 
-	        		Globals.lang("You have changed settings for special fields.")
-	        		.concat(" ")
-	        		.concat(Globals.lang("You must restart JabRef for this to come into effect.")),
-	        		Globals.lang("Changed special field settings"),
-	        		JOptionPane.WARNING_MESSAGE);
-		}
-		
-		// restart required implies that the settings have been changed
-		// the seetings need to be stored
-		if (restartRequired) {
-			_prefs.putBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED, newSpecialFieldsEnabled);
-			_prefs.putBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING, newRankingColumn);
-			_prefs.putBoolean(SpecialFieldsUtils.PREF_RANKING_COMPACT, newCompactRankingColumn);
-			_prefs.putBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY, newPriorityColumn);
-			_prefs.putBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY, newQualityColumn);
-			_prefs.putBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE, newRelevanceColumn);
-			_prefs.putBoolean(SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS, newSyncKeyWords);
-			_prefs.putBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS, newWriteSpecialFields);
-		}
-		
-        /*** end: special fields ***/
-
-		if (colSetup.isEditing()) {
-            int col = colSetup.getEditingColumn(),
-                row = colSetup.getEditingRow();
-            colSetup.getCellEditor(row, col).stopCellEditing();
-        }
-
-
-        //_prefs.putStringArray("columnNames", getChoices());
-        /*String[] cols = tableFields.getText().replaceAll("\\s+","")
-            .replaceAll("\\n+","").toLowerCase().split(";");
-        if (cols.length > 0) for (int i=0; i<cols.length; i++)
-            cols[i] = cols[i].trim();
-            else cols = null;*/
-
-        // Now we need to make sense of the contents the user has made to the
-        // table setup table.
-        if (tableChanged) {
-            // First we remove all rows with empty names.
-            int i=0;
-            while (i < tableRows.size()) {
-                if (tableRows.elementAt(i).name.equals(""))
-                    tableRows.removeElementAt(i);
-                else i++;
-            }
-            // Then we make arrays
-            String[] names = new String[tableRows.size()],
-                widths = new String[tableRows.size()];
-            int[] nWidths = new int[tableRows.size()];
-
-            _prefs.putInt("numberColWidth", ncWidth);
-            for (i=0; i<tableRows.size(); i++) {
-                TableRow tr = tableRows.elementAt(i);
-                names[i] = tr.name.toLowerCase();
-                nWidths[i] = tr.length;
-                widths[i] = ""+tr.length;
-                //Util.pr(names[i]+"   "+widths[i]);
-            }
-
-            // Finally, we store the new preferences.
-            _prefs.putStringArray("columnNames", names);
-            _prefs.putStringArray("columnWidths", widths);
-        }
-
-    }
-
-    public boolean readyToClose() {
-        return true;
-    }
-
-	public String getTabName() {
-	    return Globals.lang("Entry table columns");
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.util.*;
+
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableModel;
+
+import net.sf.jabref.help.HelpAction;
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+class TableColumnsTab extends JPanel implements PrefsTab {
+
+    JabRefPreferences _prefs;
+    private boolean tableChanged = false;
+    private JTable colSetup;
+    private int rowCount = -1, ncWidth = -1;
+    private Vector<TableRow> tableRows = new Vector<TableRow>(10);
+    private JabRefFrame frame;
+
+    private JCheckBox pdfColumn, urlColumn, fileColumn, arxivColumn;
+    
+    private JCheckBox showOneLetterHeadingForIconColumns;
+    private boolean oldShowOneLetterHeadingForIconColumns;
+
+	/*** begin: special fields ***/
+	private JCheckBox specialFieldsEnabled, rankingColumn, compactRankingColumn, qualityColumn, priorityColumn, relevanceColumn;
+	private JRadioButton syncKeywords, writeSpecialFields;
+	private boolean oldSpecialFieldsEnabled, oldRankingColumn, oldCompcatRankingColumn, oldQualityColumn, oldPriorityColumn, oldRelevanceColumn, oldSyncKeyWords, oldWriteSpecialFields;
+	private final JButton hlb; 
+	/*** end: special fields ***/
+
+    class TableRow {
+        String name;
+        int length;
+        public TableRow(String name) {
+            this.name = name;
+            length = GUIGlobals.DEFAULT_FIELD_LENGTH;
+        }
+        public TableRow(int length) {
+            this.length = length;
+            name = "";
+        }
+        public TableRow(String name, int length) {
+            this.name = name;
+            this.length = length;
+        }
+    }
+
+
+    /**
+     * Customization of external program paths.
+     *
+     * @param prefs a <code>JabRefPreferences</code> value
+     */
+    public TableColumnsTab(JabRefPreferences prefs, JabRefFrame frame) {
+        _prefs = prefs;
+        this.frame = frame;
+        setLayout(new BorderLayout());
+
+        TableModel tm = new AbstractTableModel() {
+                public int getRowCount() { return rowCount; }
+                public int getColumnCount() { return 2; }
+                public Object getValueAt(int row, int column) {
+                  if (row == 0)
+                    return (column==0 ? GUIGlobals.NUMBER_COL : ""+ncWidth);
+                  row--;
+                  if (row >= tableRows.size())
+                    return "";
+                  Object rowContent = tableRows.elementAt(row);
+                  if (rowContent == null)
+                    return "";
+                  TableRow tr = (TableRow)rowContent;
+                  switch (column) {
+                    case 0:
+                      return tr.name;
+                    case 1:
+                      return ((tr.length > 0) ? Integer.toString(tr.length) : "");
+                  }
+                  return null; // Unreachable.
+                }
+
+                public String getColumnName(int col) {
+                    return (col == 0 ? Globals.lang("Field name") : Globals.lang("Column width"));
+                }
+                public Class<?> getColumnClass(int column) {
+                    if (column == 0)
+                    	return String.class;
+                    else
+                    	return Integer.class;
+                }
+                public boolean isCellEditable(int row, int col) {
+                    return !((row == 0) && (col == 0));
+                }
+                public void setValueAt(Object value, int row, int col) {
+                    tableChanged = true;
+                    // Make sure the vector is long enough.
+                    while (row >= tableRows.size())
+                        tableRows.add(new TableRow("", -1));
+
+                        if ((row == 0) && (col == 1)) {
+                          ncWidth = Integer.parseInt(value.toString());
+                          return;
+                        }
+
+                    TableRow rowContent = tableRows.elementAt(row-1);
+
+                    if (col == 0) {
+                        rowContent.name = value.toString();
+                        if (((String)getValueAt(row, 1)).equals(""))
+                            setValueAt(""+GUIGlobals.DEFAULT_FIELD_LENGTH, row, 1);
+                    }
+                    else {
+                        if (value == null) rowContent.length = -1;
+                        else rowContent.length = Integer.parseInt(value.toString());
+                    }
+                }
+
+            };
+
+        colSetup = new JTable(tm);
+        TableColumnModel cm = colSetup.getColumnModel();
+        cm.getColumn(0).setPreferredWidth(140);
+        cm.getColumn(1).setPreferredWidth(80);
+
+        FormLayout layout = new FormLayout
+            ("1dlu, 8dlu, left:pref, 4dlu, fill:pref",//, 4dlu, fill:60dlu, 4dlu, fill:pref",
+             "");
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+        JPanel pan = new JPanel();
+        JPanel tabPanel = new JPanel();
+        tabPanel.setLayout(new BorderLayout());
+        JScrollPane sp = new JScrollPane
+            (colSetup, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+             JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+        colSetup.setPreferredScrollableViewportSize(new Dimension(250,200));
+        sp.setMinimumSize(new Dimension(250,300));
+        tabPanel.add(sp, BorderLayout.CENTER);
+        JToolBar tlb = new JToolBar(SwingConstants.VERTICAL);
+        tlb.setFloatable(false);
+        //tlb.setRollover(true);
+        //tlb.setLayout(gbl);
+        AddRowAction ara = new AddRowAction();
+        DeleteRowAction dra = new DeleteRowAction();
+        MoveRowUpAction moveUp = new MoveRowUpAction();
+        MoveRowDownAction moveDown = new MoveRowDownAction();
+        tlb.setBorder(null);
+        tlb.add(ara);
+        tlb.add(dra);
+        tlb.addSeparator();
+        tlb.add(moveUp);
+        tlb.add(moveDown);
+        //tlb.addSeparator();
+        //tlb.add(new UpdateWidthsAction());
+        tabPanel.add(tlb, BorderLayout.EAST);
+        
+        showOneLetterHeadingForIconColumns = new JCheckBox(Globals.lang("Show one letter heading for icon columns"));
+
+        fileColumn = new JCheckBox(Globals.lang("Show file column"));
+        pdfColumn = new JCheckBox(Globals.lang("Show PDF/PS column"));
+		urlColumn = new JCheckBox(Globals.lang("Show URL/DOI column"));
+		arxivColumn = new JCheckBox(Globals.lang("Show ArXiv column"));
+
+		/*** begin: special table columns and special fields ***/
+
+		HelpAction help = new HelpAction(frame.helpDiag, GUIGlobals.specialFieldsHelp);
+	    hlb = new JButton(GUIGlobals.getImage("helpSmall"));
+	    hlb.setToolTipText(Globals.lang("Help on special fields"));
+	    hlb.addActionListener(help);
+		
+		specialFieldsEnabled = new JCheckBox(Globals.lang("Enable special fields"));
+//		.concat(". ").concat(Globals.lang("You must restart JabRef for this to come into effect.")));
+		specialFieldsEnabled.addChangeListener(new ChangeListener() {
+			public void stateChanged(ChangeEvent event) {
+				boolean isEnabled = specialFieldsEnabled.isSelected();
+				rankingColumn.setEnabled(isEnabled);
+				compactRankingColumn.setEnabled(isEnabled?rankingColumn.isSelected():false);
+				qualityColumn.setEnabled(isEnabled);
+				priorityColumn.setEnabled(isEnabled);
+				relevanceColumn.setEnabled(isEnabled);
+				syncKeywords.setEnabled(isEnabled);
+				writeSpecialFields.setEnabled(isEnabled);
+			}
+		});
+		rankingColumn = new JCheckBox(Globals.lang("Show rank"));
+		rankingColumn.addChangeListener(new ChangeListener() {
+			public void stateChanged(ChangeEvent event) {
+				compactRankingColumn.setEnabled(rankingColumn.isSelected());
+			}
+		});
+		compactRankingColumn = new JCheckBox(Globals.lang("Compact rank"));
+		qualityColumn = new JCheckBox(Globals.lang("Show quality"));
+		priorityColumn = new JCheckBox(Globals.lang("Show priority"));
+		relevanceColumn = new JCheckBox(Globals.lang("Show relevance"));
+		
+		// "sync keywords" and "write special" fields may be configured mutually exclusive only
+		// The implementation supports all combinations (TRUE+TRUE and FALSE+FALSE, even if the latter does not make sense)
+		// To avoid confusion, we opted to make the setting mutually exclusive
+		syncKeywords = new JRadioButton(Globals.lang("Synchronize with keywords"));
+		writeSpecialFields = new JRadioButton(Globals.lang("Write values of special fields as separate fields to BibTeX"));
+		ButtonGroup group = new ButtonGroup();
+		group.add(syncKeywords);
+		group.add(writeSpecialFields);
+		
+		builder.appendSeparator(Globals.lang("Special table columns"));
+		builder.nextLine();
+		builder.append(pan);
+
+		DefaultFormBuilder specialTableColumnsBuilder = new DefaultFormBuilder(new FormLayout(
+				"8dlu, 8dlu, 8cm, 8dlu, left:pref", "pref, pref, pref, pref, pref, pref, pref, pref, pref, pref"));
+        CellConstraints cc = new CellConstraints();
+		
+        specialTableColumnsBuilder.add(specialFieldsEnabled, cc.xyw(1, 1, 3));
+        specialTableColumnsBuilder.add(rankingColumn, cc.xyw(2, 2, 2));
+        specialTableColumnsBuilder.add(compactRankingColumn, cc.xy(3, 3));
+        specialTableColumnsBuilder.add(relevanceColumn, cc.xyw(2, 4, 2));
+        specialTableColumnsBuilder.add(qualityColumn, cc.xyw(2, 5, 2));
+        specialTableColumnsBuilder.add(priorityColumn, cc.xyw(2, 6, 2));
+        specialTableColumnsBuilder.add(syncKeywords, cc.xyw(2, 7, 2));
+        specialTableColumnsBuilder.add(writeSpecialFields, cc.xyw(2, 8, 2));
+        specialTableColumnsBuilder.add(showOneLetterHeadingForIconColumns, cc.xyw(1, 9, 5));
+		specialTableColumnsBuilder.add(hlb, cc.xyw(1, 10, 2));
+
+		specialTableColumnsBuilder.add(fileColumn, cc.xy(5, 1));	
+		specialTableColumnsBuilder.add(pdfColumn, cc.xy(5, 2));	
+		specialTableColumnsBuilder.add(urlColumn, cc.xy(5, 3));	
+		specialTableColumnsBuilder.add(arxivColumn, cc.xy(5, 4));	
+
+		builder.append(specialTableColumnsBuilder.getPanel());
+		builder.nextLine();
+
+		/*** end: special table columns and special fields ***/
+
+        builder.appendSeparator(Globals.lang("Entry table columns"));
+        builder.nextLine();
+        builder.append(pan); builder.append(tabPanel); builder.nextLine();
+//	lab = new JLabel("<HTML>("+Globals.lang("this button will update the column width settings<BR>"
+//						+"to match the current widths in your table")+")</HTML>");
+//        lab = new JLabel("<HTML>("+Globals.lang("this_button_will_update") +")</HTML>") ;
+        builder.append(pan);
+        JButton buttonWidth = new JButton(new UpdateWidthsAction());
+        JButton buttonOrder = new JButton(new UpdateOrderAction());
+        builder.append(buttonWidth);builder.nextLine();
+        builder.append(pan);
+        builder.append(buttonOrder);builder.nextLine();
+        builder.append(pan);
+        //builder.append(lab);
+        builder.nextLine();
+        pan = builder.getPanel();
+        pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        add(pan, BorderLayout.CENTER);
+    }
+
+    public void setValues() {
+		fileColumn.setSelected(_prefs.getBoolean("fileColumn"));
+        pdfColumn.setSelected(_prefs.getBoolean("pdfColumn"));
+		urlColumn.setSelected(_prefs.getBoolean("urlColumn"));
+        fileColumn.setSelected(_prefs.getBoolean("fileColumn"));
+        arxivColumn.setSelected(_prefs.getBoolean("arxivColumn"));
+
+        /*** begin: special fields ***/
+
+        oldRankingColumn = _prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING);
+        rankingColumn.setSelected(oldRankingColumn);
+        
+        oldCompcatRankingColumn = _prefs.getBoolean(SpecialFieldsUtils.PREF_RANKING_COMPACT);
+        compactRankingColumn.setSelected(oldCompcatRankingColumn);
+		
+        oldQualityColumn = _prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY);
+        qualityColumn.setSelected(oldQualityColumn);
+        
+		oldPriorityColumn = _prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY);
+        priorityColumn.setSelected(oldPriorityColumn);
+		
+		oldRelevanceColumn = _prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE);
+        relevanceColumn.setSelected(oldRelevanceColumn);
+		
+		oldSyncKeyWords = _prefs.getBoolean(SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS);
+		syncKeywords.setSelected(oldSyncKeyWords);
+		
+		oldWriteSpecialFields = _prefs.getBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS);
+		writeSpecialFields.setSelected(oldWriteSpecialFields);
+
+		// has to be called as last to correctly enable/disable the other settings
+		oldSpecialFieldsEnabled = _prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED);
+		specialFieldsEnabled.setSelected(!oldSpecialFieldsEnabled);
+		specialFieldsEnabled.setSelected(oldSpecialFieldsEnabled); // Call twice to make sure the ChangeListener is triggered
+		
+        /*** end: special fields ***/
+		
+		oldShowOneLetterHeadingForIconColumns = _prefs.getBoolean(JabRefPreferences.SHOWONELETTERHEADINGFORICONCOLUMNS);
+		showOneLetterHeadingForIconColumns.setSelected(oldShowOneLetterHeadingForIconColumns);
+
+		tableRows.clear();
+	String[] names = _prefs.getStringArray("columnNames"),
+            lengths = _prefs.getStringArray("columnWidths");
+        for (int i=0; i<names.length; i++) {
+            if (i<lengths.length)
+                tableRows.add(new TableRow(names[i], Integer.parseInt(lengths[i])));
+            else
+                tableRows.add(new TableRow(names[i]));
+        }
+        rowCount = tableRows.size()+5;
+        ncWidth = _prefs.getInt("numberColWidth");
+
+    }
+
+
+    class DeleteRowAction extends AbstractAction {
+        public DeleteRowAction() {
+          super("Delete row", GUIGlobals.getImage("remove"));
+          putValue(SHORT_DESCRIPTION, Globals.lang("Delete rows"));
+        }
+        public void actionPerformed(ActionEvent e) {
+          int[] rows = colSetup.getSelectedRows();
+          if (rows.length == 0)
+            return;
+          int offs = 0;
+          for (int i=rows.length-1; i>=0; i--) {
+            if ((rows[i] <= tableRows.size()) && (rows[i] != 0)) {
+                tableRows.remove(rows[i]-1);
+                offs++;
+            }
+          }
+          rowCount -= offs;
+          if (rows.length > 1) colSetup.clearSelection();
+          colSetup.revalidate();
+          colSetup.repaint();
+          tableChanged = true;
+        }
+      }
+
+    class AddRowAction extends AbstractAction {
+        public AddRowAction() {
+          super("Add row", GUIGlobals.getImage("add"));
+          putValue(SHORT_DESCRIPTION, Globals.lang("Insert rows"));
+        }
+        public void actionPerformed(ActionEvent e) {
+            int[] rows = colSetup.getSelectedRows();
+            if (rows.length == 0) {
+                // No rows selected, so we just add one at the end.
+                rowCount++;
+                colSetup.revalidate();
+                colSetup.repaint();
+                return;
+            }
+            for (int i=0; i<rows.length; i++) {
+                if (rows[i]+i-1 < tableRows.size())
+                    tableRows.add(Math.max(0, rows[i]+i-1), new TableRow(GUIGlobals.DEFAULT_FIELD_LENGTH));
+            }
+            rowCount += rows.length;
+            if (rows.length > 1) colSetup.clearSelection();
+            colSetup.revalidate();
+            colSetup.repaint();
+            tableChanged = true;
+        }
+    }
+
+    abstract class AbstractMoveRowAction extends AbstractAction {
+		public AbstractMoveRowAction(String string, ImageIcon image) {
+			super(string, image);
+		}
+
+		protected void swap(int i, int j) {
+			if (i < 0 || i >= tableRows.size())
+				return;
+			if (j < 0 || j >= tableRows.size())
+				return;
+			TableRow tmp = tableRows.get(i);
+			tableRows.set(i, tableRows.get(j));
+			tableRows.set(j, tmp);
+		}
+	}
+
+	class MoveRowUpAction extends AbstractMoveRowAction {
+		public MoveRowUpAction() {
+			super("Up", GUIGlobals.getImage("up"));
+			putValue(SHORT_DESCRIPTION, Globals.lang("Move up"));
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			int selected[] = colSetup.getSelectedRows();
+			Arrays.sort(selected);
+			// first element (#) not inside tableRows
+			// don't move if a selected element is at bounce
+			if (selected.length > 0 && selected[0] > 1) {
+				boolean newSelected[] = new boolean[colSetup.getRowCount()];
+				for (int i : selected) {
+					swap(i - 1, i - 2);
+					newSelected[i - 1] = true;
+				}
+				// select all and remove unselected
+				colSetup.setRowSelectionInterval(0, colSetup.getRowCount() - 1);
+				for (int i = 0; i < colSetup.getRowCount(); i++) {
+					if (!newSelected[i])
+						colSetup.removeRowSelectionInterval(i, i);
+				}
+				colSetup.revalidate();
+				colSetup.repaint();
+				tableChanged = true;
+			}
+		}
+	}
+
+	class MoveRowDownAction extends AbstractMoveRowAction {
+		public MoveRowDownAction() {
+			super("Down", GUIGlobals.getImage("down"));
+			putValue(SHORT_DESCRIPTION, Globals.lang("Down"));
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			int selected[] = colSetup.getSelectedRows();
+			Arrays.sort(selected);
+			final int last = selected.length - 1;
+			boolean newSelected[] = new boolean[colSetup.getRowCount()];
+			// don't move if a selected element is at bounce
+			if (selected.length > 0 && selected[last] < tableRows.size()) {
+				for (int i = last; i >= 0; i--) {
+					swap(selected[i] - 1, selected[i]);
+					newSelected[selected[i] + 1] = true;
+				}
+				// select all and remove unselected
+				colSetup.setRowSelectionInterval(0, colSetup.getRowCount() - 1);
+				for (int i = 0; i < colSetup.getRowCount(); i++) {
+					if (!newSelected[i])
+						colSetup.removeRowSelectionInterval(i, i);
+				}
+				colSetup.revalidate();
+				colSetup.repaint();
+				tableChanged = true;
+			}
+		}
+	}
+
+	class UpdateOrderAction extends AbstractAction {
+		public UpdateOrderAction() {
+			super(Globals.lang("Update to current column order"));
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			BasePanel panel = frame.basePanel();
+			if (panel == null) {
+				return;
+			}
+			// idea: sort elements according to value stored in hash, keep
+			// everything not inside hash/mainTable as it was
+			final HashMap<String, Integer> map = new HashMap<String, Integer>();
+
+			// first element (#) not inside tableRows
+			for (int i = 1; i < panel.mainTable.getColumnCount(); i++) {
+				String name = panel.mainTable.getColumnName(i);
+				if (name != null && name.length() != 0) {
+					map.put(name.toLowerCase(), i);
+				}
+			}
+			Collections.sort(tableRows, new Comparator<TableRow>() {
+				public int compare(TableRow o1, TableRow o2) {
+					Integer n1 = map.get(o1.name);
+					Integer n2 = map.get(o2.name);
+					if (n1 == null || n2 == null) {
+						return 0;
+					}
+					return n1.compareTo(n2);
+				}
+			});
+
+			colSetup.revalidate();
+			colSetup.repaint();
+			tableChanged = true;
+		}
+	}
+
+    class UpdateWidthsAction extends AbstractAction {
+        public UpdateWidthsAction() {
+          //super(Globals.lang("Update to current column widths"));
+          super(Globals.lang("Update to current column widths"));
+          //putValue(SHORT_DESCRIPTION, Globals.lang("Update to current column widths"));
+        }
+        public void actionPerformed(ActionEvent e) {
+            BasePanel panel = frame.basePanel();
+            if (panel == null) return;
+            TableColumnModel colMod = panel.mainTable.getColumnModel();
+            colSetup.setValueAt(""+colMod.getColumn(0).getWidth(), 0, 1);
+            for (int i=1; i<colMod.getColumnCount(); i++) {
+            try {
+                String name = panel.mainTable.getColumnName(i).toLowerCase();
+                int width = colMod.getColumn(i).getWidth();
+                //Util.pr(":"+((String)colSetup.getValueAt(i-1, 0)).toLowerCase());
+                //Util.pr("-"+name);
+                if ((i <= tableRows.size()) && (((String)colSetup.getValueAt(i, 0)).toLowerCase()).equals(name))
+                    colSetup.setValueAt(""+width, i, 1);
+                else { // Doesn't match; search for a matching col in our table
+                    for (int j=0; j<colSetup.getRowCount(); j++) {
+                        if ((j < tableRows.size()) &&
+                            (((String)colSetup.getValueAt(j, 0)).toLowerCase()).equals(name)) {
+                            colSetup.setValueAt(""+width, j, 1);
+                            break;
+                        }
+                    }
+                }
+            } catch (Throwable ex) {
+                ex.printStackTrace();
+            }
+            colSetup.revalidate();
+            colSetup.repaint();
+        }
+
+        }
+    }
+
+
+    /**
+     * Store changes to table preferences. This method is called when
+     * the user clicks Ok.
+     *
+     */
+    public void storeSettings() {
+        _prefs.putBoolean("fileColumn", fileColumn.isSelected());
+        _prefs.putBoolean("pdfColumn", pdfColumn.isSelected());
+		_prefs.putBoolean("urlColumn", urlColumn.isSelected());
+		_prefs.putBoolean("arxivColumn", arxivColumn.isSelected());
+		
+		_prefs.putBoolean(JabRefPreferences.SHOWONELETTERHEADINGFORICONCOLUMNS, showOneLetterHeadingForIconColumns.isSelected());
+
+        /*** begin: special fields ***/
+        
+		boolean 
+		newSpecialFieldsEnabled = specialFieldsEnabled.isSelected(),
+		newRankingColumn = rankingColumn.isSelected(),
+		newCompactRankingColumn = compactRankingColumn.isSelected(),
+		newQualityColumn = qualityColumn.isSelected(), 
+		newPriorityColumn = priorityColumn.isSelected(), 
+		newRelevanceColumn = relevanceColumn.isSelected(), 
+		newSyncKeyWords = syncKeywords.isSelected(), 
+		newWriteSpecialFields = writeSpecialFields.isSelected();
+		
+		boolean restartRequired = false;
+		restartRequired = (oldSpecialFieldsEnabled != newSpecialFieldsEnabled) ||
+				(oldRankingColumn != newRankingColumn) ||
+				(oldCompcatRankingColumn != newCompactRankingColumn) ||
+				(oldQualityColumn != newQualityColumn) ||
+				(oldPriorityColumn != newPriorityColumn) ||
+				(oldRelevanceColumn != newRelevanceColumn) ||
+				(oldSyncKeyWords != newSyncKeyWords) ||
+				(oldWriteSpecialFields != newWriteSpecialFields);
+		if (restartRequired) {
+	        JOptionPane.showMessageDialog(null, 
+	        		Globals.lang("You have changed settings for special fields.")
+	        		.concat(" ")
+	        		.concat(Globals.lang("You must restart JabRef for this to come into effect.")),
+	        		Globals.lang("Changed special field settings"),
+	        		JOptionPane.WARNING_MESSAGE);
+		}
+		
+		// restart required implies that the settings have been changed
+		// the seetings need to be stored
+		if (restartRequired) {
+			_prefs.putBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED, newSpecialFieldsEnabled);
+			_prefs.putBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING, newRankingColumn);
+			_prefs.putBoolean(SpecialFieldsUtils.PREF_RANKING_COMPACT, newCompactRankingColumn);
+			_prefs.putBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY, newPriorityColumn);
+			_prefs.putBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY, newQualityColumn);
+			_prefs.putBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE, newRelevanceColumn);
+			_prefs.putBoolean(SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS, newSyncKeyWords);
+			_prefs.putBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS, newWriteSpecialFields);
+		}
+		
+        /*** end: special fields ***/
+
+		if (colSetup.isEditing()) {
+            int col = colSetup.getEditingColumn(),
+                row = colSetup.getEditingRow();
+            colSetup.getCellEditor(row, col).stopCellEditing();
+        }
+
+
+        //_prefs.putStringArray("columnNames", getChoices());
+        /*String[] cols = tableFields.getText().replaceAll("\\s+","")
+            .replaceAll("\\n+","").toLowerCase().split(";");
+        if (cols.length > 0) for (int i=0; i<cols.length; i++)
+            cols[i] = cols[i].trim();
+            else cols = null;*/
+
+        // Now we need to make sense of the contents the user has made to the
+        // table setup table.
+        if (tableChanged) {
+            // First we remove all rows with empty names.
+            int i=0;
+            while (i < tableRows.size()) {
+                if (tableRows.elementAt(i).name.equals(""))
+                    tableRows.removeElementAt(i);
+                else i++;
+            }
+            // Then we make arrays
+            String[] names = new String[tableRows.size()],
+                widths = new String[tableRows.size()];
+            int[] nWidths = new int[tableRows.size()];
+
+            _prefs.putInt("numberColWidth", ncWidth);
+            for (i=0; i<tableRows.size(); i++) {
+                TableRow tr = tableRows.elementAt(i);
+                names[i] = tr.name.toLowerCase();
+                nWidths[i] = tr.length;
+                widths[i] = ""+tr.length;
+                //Util.pr(names[i]+"   "+widths[i]);
+            }
+
+            // Finally, we store the new preferences.
+            _prefs.putStringArray("columnNames", names);
+            _prefs.putStringArray("columnWidths", widths);
+        }
+
+    }
+
+    public boolean readyToClose() {
+        return true;
+    }
+
+	public String getTabName() {
+	    return Globals.lang("Entry table columns");
+	}
+}
diff --git a/src/java/net/sf/jabref/TablePrefsTab.java b/src/java/net/sf/jabref/TablePrefsTab.java
index faaa030..1f92693 100644
--- a/src/java/net/sf/jabref/TablePrefsTab.java
+++ b/src/java/net/sf/jabref/TablePrefsTab.java
@@ -1,305 +1,305 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Vector;
-
-import javax.swing.*;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.CellConstraints;
-import com.jgoodies.forms.layout.FormLayout;
-
-class TablePrefsTab extends JPanel implements PrefsTab {
-
-	JabRefPreferences _prefs;
-
-    private JCheckBox autoResizeMode, priDesc, secDesc, terDesc, floatMarked;
-
-	private JRadioButton namesAsIs, namesFf, namesFl, namesNatbib, abbrNames, noAbbrNames,
-		lastNamesOnly;
-
-	private JTextField priField, secField, terField, numericFields;
-	private JComboBox priSort, secSort, terSort;
-
-	/**
-	 * Customization of external program paths.
-	 * 
-	 * @param prefs
-	 *            a <code>JabRefPreferences</code> value
-	 */
-	public TablePrefsTab(JabRefPreferences prefs, JabRefFrame frame) {
-		_prefs = prefs;
-		setLayout(new BorderLayout());
-
-		/**
-		 * Added Bibtexkey to combobox.
-		 * 
-		 * [ 1540646 ] default sort order: bibtexkey
-		 * 
-		 * http://sourceforge.net/tracker/index.php?func=detail&aid=1540646&group_id=92314&atid=600306
-		 */
-		Vector<String> v = new Vector<String>(Arrays.asList(BibtexFields.getAllFieldNames()));
-		v.add(BibtexFields.KEY_FIELD);
-		Collections.sort(v);
-		Object[] allPlusKey = v.toArray();
-		priSort = new JComboBox(allPlusKey);
-		secSort = new JComboBox(allPlusKey);
-		terSort = new JComboBox(allPlusKey);
-
-		autoResizeMode = new JCheckBox(Globals.lang("Fit table horizontally on screen"));
-
-		namesAsIs = new JRadioButton(Globals.lang("Show names unchanged"));
-		namesFf = new JRadioButton(Globals.lang("Show 'Firstname Lastname'"));
-		namesFl = new JRadioButton(Globals.lang("Show 'Lastname, Firstname'"));
-		namesNatbib = new JRadioButton(Globals.lang("Natbib style"));
-		noAbbrNames = new JRadioButton(Globals.lang("Do not abbreviate names"));
-		abbrNames = new JRadioButton(Globals.lang("Abbreviate names"));
-		lastNamesOnly = new JRadioButton(Globals.lang("Show last names only"));
-
-		floatMarked = new JCheckBox(Globals.lang("Float marked entries"));
-
-		priField = new JTextField(10);
-		secField = new JTextField(10);
-		terField = new JTextField(10);
-
-        numericFields = new JTextField(30);
-
-		priSort.insertItemAt(Globals.lang("<select>"), 0);
-		secSort.insertItemAt(Globals.lang("<select>"), 0);
-		terSort.insertItemAt(Globals.lang("<select>"), 0);
-
-		priSort.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				if (priSort.getSelectedIndex() > 0) {
-                    priField.setText(priSort.getSelectedItem().toString());
-                    priSort.setSelectedIndex(0);
-				}
-			}
-		});
-		secSort.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				if (secSort.getSelectedIndex() > 0) {
-                    secField.setText(secSort.getSelectedItem().toString());
-                    secSort.setSelectedIndex(0);
-				}
-			}
-		});
-		terSort.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				if (terSort.getSelectedIndex() > 0) {
-					terField.setText(terSort.getSelectedItem().toString());
-                    terSort.setSelectedIndex(0);
-				}
-			}
-		});
-
-		ButtonGroup bg = new ButtonGroup();
-		bg.add(namesAsIs);
-		bg.add(namesNatbib);
-		bg.add(namesFf);
-		bg.add(namesFl);
-		ButtonGroup bg2 = new ButtonGroup();
-		bg2.add(lastNamesOnly);
-		bg2.add(abbrNames);
-		bg2.add(noAbbrNames);
-		priDesc = new JCheckBox(Globals.lang("Descending"));
-		secDesc = new JCheckBox(Globals.lang("Descending"));
-		terDesc = new JCheckBox(Globals.lang("Descending"));
-
-		FormLayout layout = new FormLayout(
-			"1dlu, 8dlu, left:pref, 4dlu, fill:pref, 4dlu, fill:60dlu, 4dlu, fill:pref", "");
-		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-		JLabel lab;
-		JPanel pan = new JPanel();
-
-		builder.appendSeparator(Globals.lang("Format of author and editor names"));
-		DefaultFormBuilder nameBuilder = new DefaultFormBuilder(new FormLayout(
-			"left:pref, 8dlu, left:pref", ""));
-
-		nameBuilder.append(namesAsIs);
-		nameBuilder.append(noAbbrNames);
-		nameBuilder.nextLine();
-		nameBuilder.append(namesFf);
-		nameBuilder.append(abbrNames);
-		nameBuilder.nextLine();
-		nameBuilder.append(namesFl);
-		nameBuilder.append(lastNamesOnly);
-		nameBuilder.nextLine();
-		nameBuilder.append(namesNatbib);
-		builder.append(pan);
-		builder.append(nameBuilder.getPanel());
-		builder.nextLine();
-		// builder.append(pan); builder.append(noAbbrNames); builder.nextLine();
-		// builder.append(pan); builder.append(abbrNames); builder.nextLine();
-		// builder.append(pan); builder.append(lastNamesOnly);
-		// builder.nextLine();
-
-		builder.appendSeparator(Globals.lang("Default sort criteria"));
-		// Create a new panel with its own FormLayout for these items:
-		FormLayout layout2 = new FormLayout(
-			"left:pref, 8dlu, fill:pref, 4dlu, fill:60dlu, 4dlu, left:pref", "");
-		DefaultFormBuilder builder2 = new DefaultFormBuilder(layout2);
-		lab = new JLabel(Globals.lang("Primary sort criterion"));
-		builder2.append(lab);
-		builder2.append(priSort);
-		builder2.append(priField);
-		builder2.append(priDesc);
-		builder2.nextLine();
-		lab = new JLabel(Globals.lang("Secondary sort criterion"));
-		builder2.append(lab);
-		builder2.append(secSort);
-		builder2.append(secField);
-		builder2.append(secDesc);
-		builder2.nextLine();
-		lab = new JLabel(Globals.lang("Tertiary sort criterion"));
-		builder2.append(lab);
-		builder2.append(terSort);
-		builder2.append(terField);
-		builder2.append(terDesc);
-		builder.nextLine();
-		builder.append(pan);
-		builder.append(builder2.getPanel());
-		builder.nextLine();
-		builder.append(pan);
-		builder.append(floatMarked);
-		builder.nextLine();
-        builder.append(pan);
-        builder2 = new DefaultFormBuilder(new FormLayout("left:pref, 8dlu, fill:pref",""));
-        builder2.append(Globals.lang("Sort the following fields as numeric fields")+":");
-        builder2.append(numericFields);
-        builder.append(builder2.getPanel(), 5);
-        builder.nextLine();
-		builder.appendSeparator(Globals.lang("General"));
-		builder.append(pan);
-		builder.append(autoResizeMode);
-		builder.nextLine();
-
-		pan = builder.getPanel();
-		pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-		add(pan, BorderLayout.CENTER);
-
-		namesNatbib.addChangeListener(new ChangeListener() {
-			public void stateChanged(ChangeEvent changeEvent) {
-				abbrNames.setEnabled(!namesNatbib.isSelected());
-				lastNamesOnly.setEnabled(!namesNatbib.isSelected());
-				noAbbrNames.setEnabled(!namesNatbib.isSelected());
-			}
-		});
-	}
-
-	public void setValues() {
-		autoResizeMode
-			.setSelected((_prefs.getInt("autoResizeMode") == JTable.AUTO_RESIZE_ALL_COLUMNS));
-
-		priField.setText(_prefs.get("priSort"));
-		secField.setText(_prefs.get("secSort"));
-		terField.setText(_prefs.get("terSort"));
-		priSort.setSelectedIndex(0);
-		secSort.setSelectedIndex(0);
-		terSort.setSelectedIndex(0);
-
-		if (_prefs.getBoolean("namesAsIs"))
-			namesAsIs.setSelected(true);
-		else if (_prefs.getBoolean("namesFf"))
-			namesFf.setSelected(true);
-		else if (_prefs.getBoolean("namesNatbib"))
-			namesNatbib.setSelected(true);
-		else
-			namesFl.setSelected(true);
-		if (_prefs.getBoolean("abbrAuthorNames"))
-			abbrNames.setSelected(true);
-		else if (_prefs.getBoolean("namesLastOnly"))
-			lastNamesOnly.setSelected(true);
-		else
-			noAbbrNames.setSelected(true);
-		priDesc.setSelected(_prefs.getBoolean("priDescending"));
-		secDesc.setSelected(_prefs.getBoolean("secDescending"));
-		terDesc.setSelected(_prefs.getBoolean("terDescending"));
-
-		floatMarked.setSelected(_prefs.getBoolean("floatMarkedEntries"));
-
-		abbrNames.setEnabled(!namesNatbib.isSelected());
-		lastNamesOnly.setEnabled(!namesNatbib.isSelected());
-		noAbbrNames.setEnabled(!namesNatbib.isSelected());
-
-        String numF = _prefs.get("numericFields");
-        if (numF == null)
-            numericFields.setText("");
-        else
-            numericFields.setText(numF);
-
-	}
-
-	/**
-	 * Store changes to table preferences. This method is called when the user
-	 * clicks Ok.
-	 * 
-	 */
-	public void storeSettings() {
-
-		_prefs.putBoolean("namesAsIs", namesAsIs.isSelected());
-		_prefs.putBoolean("namesFf", namesFf.isSelected());
-		_prefs.putBoolean("namesNatbib", namesNatbib.isSelected());
-		_prefs.putBoolean("namesLastOnly", lastNamesOnly.isSelected());
-		_prefs.putBoolean("abbrAuthorNames", abbrNames.isSelected());
-
-		_prefs.putInt("autoResizeMode",
-			autoResizeMode.isSelected() ? JTable.AUTO_RESIZE_ALL_COLUMNS : JTable.AUTO_RESIZE_OFF);
-		_prefs.putBoolean("priDescending", priDesc.isSelected());
-		_prefs.putBoolean("secDescending", secDesc.isSelected());
-		_prefs.putBoolean("terDescending", terDesc.isSelected());
-		// _prefs.put("secSort",
-		// GUIGlobals.ALL_FIELDS[secSort.getSelectedIndex()]);
-		// _prefs.put("terSort",
-		// GUIGlobals.ALL_FIELDS[terSort.getSelectedIndex()]);
-		_prefs.put("priSort", priField.getText().toLowerCase().trim());
-		_prefs.put("secSort", secField.getText().toLowerCase().trim());
-		_prefs.put("terSort", terField.getText().toLowerCase().trim());
-
-		_prefs.putBoolean("floatMarkedEntries", floatMarked.isSelected());
-		// updatefont
-
-        String oldVal = _prefs.get("numericFields");
-        String newVal = numericFields.getText().trim();
-        if (newVal.length() == 0)
-            newVal = null;
-        if (((newVal != null) && (oldVal == null))
-                || ((newVal == null) && (oldVal != null))
-                || ((newVal != null) && !newVal.equals(oldVal))) {
-            _prefs.put("numericFields", newVal);
-            BibtexFields.setNumericFieldsFromPrefs();
-        }
-
-	}
-
-	public boolean readyToClose() {
-		return true;
-	}
-
-	public String getTabName() {
-		return Globals.lang("Entry table");
-	}
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Vector;
+
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+class TablePrefsTab extends JPanel implements PrefsTab {
+
+	JabRefPreferences _prefs;
+
+    private JCheckBox autoResizeMode, priDesc, secDesc, terDesc, floatMarked;
+
+	private JRadioButton namesAsIs, namesFf, namesFl, namesNatbib, abbrNames, noAbbrNames,
+		lastNamesOnly;
+
+	private JTextField priField, secField, terField, numericFields;
+	private JComboBox priSort, secSort, terSort;
+
+	/**
+	 * Customization of external program paths.
+	 * 
+	 * @param prefs
+	 *            a <code>JabRefPreferences</code> value
+	 */
+	public TablePrefsTab(JabRefPreferences prefs, JabRefFrame frame) {
+		_prefs = prefs;
+		setLayout(new BorderLayout());
+
+		/**
+		 * Added Bibtexkey to combobox.
+		 * 
+		 * [ 1540646 ] default sort order: bibtexkey
+		 * 
+		 * http://sourceforge.net/tracker/index.php?func=detail&aid=1540646&group_id=92314&atid=600306
+		 */
+		Vector<String> v = new Vector<String>(Arrays.asList(BibtexFields.getAllFieldNames()));
+		v.add(BibtexFields.KEY_FIELD);
+		Collections.sort(v);
+		Object[] allPlusKey = v.toArray();
+		priSort = new JComboBox(allPlusKey);
+		secSort = new JComboBox(allPlusKey);
+		terSort = new JComboBox(allPlusKey);
+
+		autoResizeMode = new JCheckBox(Globals.lang("Fit table horizontally on screen"));
+
+		namesAsIs = new JRadioButton(Globals.lang("Show names unchanged"));
+		namesFf = new JRadioButton(Globals.lang("Show 'Firstname Lastname'"));
+		namesFl = new JRadioButton(Globals.lang("Show 'Lastname, Firstname'"));
+		namesNatbib = new JRadioButton(Globals.lang("Natbib style"));
+		noAbbrNames = new JRadioButton(Globals.lang("Do not abbreviate names"));
+		abbrNames = new JRadioButton(Globals.lang("Abbreviate names"));
+		lastNamesOnly = new JRadioButton(Globals.lang("Show last names only"));
+
+		floatMarked = new JCheckBox(Globals.lang("Float marked entries"));
+
+		priField = new JTextField(10);
+		secField = new JTextField(10);
+		terField = new JTextField(10);
+
+        numericFields = new JTextField(30);
+
+		priSort.insertItemAt(Globals.lang("<select>"), 0);
+		secSort.insertItemAt(Globals.lang("<select>"), 0);
+		terSort.insertItemAt(Globals.lang("<select>"), 0);
+
+		priSort.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				if (priSort.getSelectedIndex() > 0) {
+                    priField.setText(priSort.getSelectedItem().toString());
+                    priSort.setSelectedIndex(0);
+				}
+			}
+		});
+		secSort.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				if (secSort.getSelectedIndex() > 0) {
+                    secField.setText(secSort.getSelectedItem().toString());
+                    secSort.setSelectedIndex(0);
+				}
+			}
+		});
+		terSort.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				if (terSort.getSelectedIndex() > 0) {
+					terField.setText(terSort.getSelectedItem().toString());
+                    terSort.setSelectedIndex(0);
+				}
+			}
+		});
+
+		ButtonGroup bg = new ButtonGroup();
+		bg.add(namesAsIs);
+		bg.add(namesNatbib);
+		bg.add(namesFf);
+		bg.add(namesFl);
+		ButtonGroup bg2 = new ButtonGroup();
+		bg2.add(lastNamesOnly);
+		bg2.add(abbrNames);
+		bg2.add(noAbbrNames);
+		priDesc = new JCheckBox(Globals.lang("Descending"));
+		secDesc = new JCheckBox(Globals.lang("Descending"));
+		terDesc = new JCheckBox(Globals.lang("Descending"));
+
+		FormLayout layout = new FormLayout(
+			"1dlu, 8dlu, left:pref, 4dlu, fill:pref, 4dlu, fill:60dlu, 4dlu, fill:pref", "");
+		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+		JLabel lab;
+		JPanel pan = new JPanel();
+
+		builder.appendSeparator(Globals.lang("Format of author and editor names"));
+		DefaultFormBuilder nameBuilder = new DefaultFormBuilder(new FormLayout(
+			"left:pref, 8dlu, left:pref", ""));
+
+		nameBuilder.append(namesAsIs);
+		nameBuilder.append(noAbbrNames);
+		nameBuilder.nextLine();
+		nameBuilder.append(namesFf);
+		nameBuilder.append(abbrNames);
+		nameBuilder.nextLine();
+		nameBuilder.append(namesFl);
+		nameBuilder.append(lastNamesOnly);
+		nameBuilder.nextLine();
+		nameBuilder.append(namesNatbib);
+		builder.append(pan);
+		builder.append(nameBuilder.getPanel());
+		builder.nextLine();
+		// builder.append(pan); builder.append(noAbbrNames); builder.nextLine();
+		// builder.append(pan); builder.append(abbrNames); builder.nextLine();
+		// builder.append(pan); builder.append(lastNamesOnly);
+		// builder.nextLine();
+
+		builder.appendSeparator(Globals.lang("Default sort criteria"));
+		// Create a new panel with its own FormLayout for these items:
+		FormLayout layout2 = new FormLayout(
+			"left:pref, 8dlu, fill:pref, 4dlu, fill:60dlu, 4dlu, left:pref", "");
+		DefaultFormBuilder builder2 = new DefaultFormBuilder(layout2);
+		lab = new JLabel(Globals.lang("Primary sort criterion"));
+		builder2.append(lab);
+		builder2.append(priSort);
+		builder2.append(priField);
+		builder2.append(priDesc);
+		builder2.nextLine();
+		lab = new JLabel(Globals.lang("Secondary sort criterion"));
+		builder2.append(lab);
+		builder2.append(secSort);
+		builder2.append(secField);
+		builder2.append(secDesc);
+		builder2.nextLine();
+		lab = new JLabel(Globals.lang("Tertiary sort criterion"));
+		builder2.append(lab);
+		builder2.append(terSort);
+		builder2.append(terField);
+		builder2.append(terDesc);
+		builder.nextLine();
+		builder.append(pan);
+		builder.append(builder2.getPanel());
+		builder.nextLine();
+		builder.append(pan);
+		builder.append(floatMarked);
+		builder.nextLine();
+        builder.append(pan);
+        builder2 = new DefaultFormBuilder(new FormLayout("left:pref, 8dlu, fill:pref",""));
+        builder2.append(Globals.lang("Sort the following fields as numeric fields")+":");
+        builder2.append(numericFields);
+        builder.append(builder2.getPanel(), 5);
+        builder.nextLine();
+		builder.appendSeparator(Globals.lang("General"));
+		builder.append(pan);
+		builder.append(autoResizeMode);
+		builder.nextLine();
+
+		pan = builder.getPanel();
+		pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+		add(pan, BorderLayout.CENTER);
+
+		namesNatbib.addChangeListener(new ChangeListener() {
+			public void stateChanged(ChangeEvent changeEvent) {
+				abbrNames.setEnabled(!namesNatbib.isSelected());
+				lastNamesOnly.setEnabled(!namesNatbib.isSelected());
+				noAbbrNames.setEnabled(!namesNatbib.isSelected());
+			}
+		});
+	}
+
+	public void setValues() {
+		autoResizeMode
+			.setSelected((_prefs.getInt("autoResizeMode") == JTable.AUTO_RESIZE_ALL_COLUMNS));
+
+		priField.setText(_prefs.get("priSort"));
+		secField.setText(_prefs.get("secSort"));
+		terField.setText(_prefs.get("terSort"));
+		priSort.setSelectedIndex(0);
+		secSort.setSelectedIndex(0);
+		terSort.setSelectedIndex(0);
+
+		if (_prefs.getBoolean("namesAsIs"))
+			namesAsIs.setSelected(true);
+		else if (_prefs.getBoolean("namesFf"))
+			namesFf.setSelected(true);
+		else if (_prefs.getBoolean("namesNatbib"))
+			namesNatbib.setSelected(true);
+		else
+			namesFl.setSelected(true);
+		if (_prefs.getBoolean("abbrAuthorNames"))
+			abbrNames.setSelected(true);
+		else if (_prefs.getBoolean("namesLastOnly"))
+			lastNamesOnly.setSelected(true);
+		else
+			noAbbrNames.setSelected(true);
+		priDesc.setSelected(_prefs.getBoolean("priDescending"));
+		secDesc.setSelected(_prefs.getBoolean("secDescending"));
+		terDesc.setSelected(_prefs.getBoolean("terDescending"));
+
+		floatMarked.setSelected(_prefs.getBoolean("floatMarkedEntries"));
+
+		abbrNames.setEnabled(!namesNatbib.isSelected());
+		lastNamesOnly.setEnabled(!namesNatbib.isSelected());
+		noAbbrNames.setEnabled(!namesNatbib.isSelected());
+
+        String numF = _prefs.get("numericFields");
+        if (numF == null)
+            numericFields.setText("");
+        else
+            numericFields.setText(numF);
+
+	}
+
+	/**
+	 * Store changes to table preferences. This method is called when the user
+	 * clicks Ok.
+	 * 
+	 */
+	public void storeSettings() {
+
+		_prefs.putBoolean("namesAsIs", namesAsIs.isSelected());
+		_prefs.putBoolean("namesFf", namesFf.isSelected());
+		_prefs.putBoolean("namesNatbib", namesNatbib.isSelected());
+		_prefs.putBoolean("namesLastOnly", lastNamesOnly.isSelected());
+		_prefs.putBoolean("abbrAuthorNames", abbrNames.isSelected());
+
+		_prefs.putInt("autoResizeMode",
+			autoResizeMode.isSelected() ? JTable.AUTO_RESIZE_ALL_COLUMNS : JTable.AUTO_RESIZE_OFF);
+		_prefs.putBoolean("priDescending", priDesc.isSelected());
+		_prefs.putBoolean("secDescending", secDesc.isSelected());
+		_prefs.putBoolean("terDescending", terDesc.isSelected());
+		// _prefs.put("secSort",
+		// GUIGlobals.ALL_FIELDS[secSort.getSelectedIndex()]);
+		// _prefs.put("terSort",
+		// GUIGlobals.ALL_FIELDS[terSort.getSelectedIndex()]);
+		_prefs.put("priSort", priField.getText().toLowerCase().trim());
+		_prefs.put("secSort", secField.getText().toLowerCase().trim());
+		_prefs.put("terSort", terField.getText().toLowerCase().trim());
+
+		_prefs.putBoolean("floatMarkedEntries", floatMarked.isSelected());
+		// updatefont
+
+        String oldVal = _prefs.get("numericFields");
+        String newVal = numericFields.getText().trim();
+        if (newVal.length() == 0)
+            newVal = null;
+        if (((newVal != null) && (oldVal == null))
+                || ((newVal == null) && (oldVal != null))
+                || ((newVal != null) && !newVal.equals(oldVal))) {
+            _prefs.put("numericFields", newVal);
+            BibtexFields.setNumericFieldsFromPrefs();
+        }
+
+	}
+
+	public boolean readyToClose() {
+		return true;
+	}
+
+	public String getTabName() {
+		return Globals.lang("Entry table");
+	}
+}
diff --git a/src/java/net/sf/jabref/TitleLabel.java b/src/java/net/sf/jabref/TitleLabel.java
index ceee532..5c0ee9e 100644
--- a/src/java/net/sf/jabref/TitleLabel.java
+++ b/src/java/net/sf/jabref/TitleLabel.java
@@ -1,33 +1,33 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import javax.swing.JLabel;
-import javax.swing.SwingConstants;
-import javax.swing.UIManager;
-
-public class TitleLabel extends JLabel {
-
-    public TitleLabel(String txt, int orientation) {
-	super(txt, orientation);
-	setFont((java.awt.Font)UIManager.get("TitledBorder.font"));
-	setForeground((java.awt.Color)UIManager.get("TitledBorder.titleColor"));
-    }
-
-    public TitleLabel(String txt) {
-	this(txt, SwingConstants.CENTER);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import javax.swing.JLabel;
+import javax.swing.SwingConstants;
+import javax.swing.UIManager;
+
+public class TitleLabel extends JLabel {
+
+    public TitleLabel(String txt, int orientation) {
+	super(txt, orientation);
+	setFont((java.awt.Font)UIManager.get("TitledBorder.font"));
+	setForeground((java.awt.Color)UIManager.get("TitledBorder.titleColor"));
+    }
+
+    public TitleLabel(String txt) {
+	this(txt, SwingConstants.CENTER);
+    }
+}
diff --git a/src/java/net/sf/jabref/TransferableBibtexEntry.java b/src/java/net/sf/jabref/TransferableBibtexEntry.java
index da2d7ec..b18b415 100644
--- a/src/java/net/sf/jabref/TransferableBibtexEntry.java
+++ b/src/java/net/sf/jabref/TransferableBibtexEntry.java
@@ -1,71 +1,71 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.io.IOException;
-import java.io.StringWriter;
-
-import javax.swing.JOptionPane;
-
-import net.sf.jabref.export.LatexFieldFormatter;
-
-/*
- * A transferable object containing an array of BibtexEntry objects. Used
- * for copy-paste operations.
- */
-public class TransferableBibtexEntry implements Transferable {
-
-    private BibtexEntry[] data;
-    public static DataFlavor entryFlavor = new DataFlavor(BibtexEntry.class, "JabRef entry");
-
-    public TransferableBibtexEntry(BibtexEntry[] data) {
-	this.data = data;
-    }
-
-    public DataFlavor[] getTransferDataFlavors() {
-	return new DataFlavor[] {TransferableBibtexEntry.entryFlavor,
-	                         DataFlavor.stringFlavor};
-    }
-
-    public boolean isDataFlavorSupported(DataFlavor flavor) {
-	return (flavor.equals(entryFlavor) ||
-		flavor.equals(DataFlavor.stringFlavor));
-    }
-
-    public Object getTransferData(DataFlavor flavor)
-	throws UnsupportedFlavorException {
-	if (flavor.equals(entryFlavor))
-	    return data;
-	else if (flavor.equals(DataFlavor.stringFlavor)) {
-	    try {
-		StringWriter sw = new StringWriter();
-		LatexFieldFormatter ff = new LatexFieldFormatter();
-		for (int i=0; i<data.length; i++)
-		    data[i].write(sw, ff, false);
-		return sw.toString();
-	    } catch (IOException ex) {
-		JOptionPane.showMessageDialog
-		    (null, "Could not paste entry as text:\n"+ex.getMessage(),
-		     "Clipboard", JOptionPane.ERROR_MESSAGE);
-		return "";
-	    }
-	} else
-	    throw new UnsupportedFlavorException(flavor);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
+import java.io.StringWriter;
+
+import javax.swing.JOptionPane;
+
+import net.sf.jabref.export.LatexFieldFormatter;
+
+/*
+ * A transferable object containing an array of BibtexEntry objects. Used
+ * for copy-paste operations.
+ */
+public class TransferableBibtexEntry implements Transferable {
+
+    private BibtexEntry[] data;
+    public static DataFlavor entryFlavor = new DataFlavor(BibtexEntry.class, "JabRef entry");
+
+    public TransferableBibtexEntry(BibtexEntry[] data) {
+	this.data = data;
+    }
+
+    public DataFlavor[] getTransferDataFlavors() {
+	return new DataFlavor[] {TransferableBibtexEntry.entryFlavor,
+	                         DataFlavor.stringFlavor};
+    }
+
+    public boolean isDataFlavorSupported(DataFlavor flavor) {
+	return (flavor.equals(entryFlavor) ||
+		flavor.equals(DataFlavor.stringFlavor));
+    }
+
+    public Object getTransferData(DataFlavor flavor)
+	throws UnsupportedFlavorException {
+	if (flavor.equals(entryFlavor))
+	    return data;
+	else if (flavor.equals(DataFlavor.stringFlavor)) {
+	    try {
+		StringWriter sw = new StringWriter();
+		LatexFieldFormatter ff = new LatexFieldFormatter();
+		for (int i=0; i<data.length; i++)
+		    data[i].write(sw, ff, false);
+		return sw.toString();
+	    } catch (IOException ex) {
+		JOptionPane.showMessageDialog
+		    (null, "Could not paste entry as text:\n"+ex.getMessage(),
+		     "Clipboard", JOptionPane.ERROR_MESSAGE);
+		return "";
+	    }
+	} else
+	    throw new UnsupportedFlavorException(flavor);
+    }
+}
diff --git a/src/java/net/sf/jabref/UnknownEntryType.java b/src/java/net/sf/jabref/UnknownEntryType.java
index f7f3e89..cd5c490 100644
--- a/src/java/net/sf/jabref/UnknownEntryType.java
+++ b/src/java/net/sf/jabref/UnknownEntryType.java
@@ -1,64 +1,64 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.io.Writer;
-
-/**
- * This class is used to represent an unknown entry type, e.g. encountered
- * during bibtex parsing. The only known information is the type name.
- * This is useful if the bibtex file contains type definitions that are used
- * in the file - because the entries will be parsed before the type definitions
- * are found. In the meantime, the entries will be assigned an 
- * UnknownEntryType giving the name.
- */
-public class UnknownEntryType extends BibtexEntryType {
-
-    private String name;
-    private String[] fields = new String[0];
-
-    public UnknownEntryType(String name_) {
-	name = name_;
-    }
-
-    public String getName() {
-	return name;
-    }
-
-    public String[] getOptionalFields() {
-	return fields;
-    }
-    public String[] getRequiredFields() {
-	return fields;
-    }
-
-
-    public String describeRequiredFields() {
-	return "unknown";
-    }
-
-    public String describeOptionalFields() {
-	return "unknown";
-    }
-
-    public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
-	return true;
-    }
-
-    public void save(Writer out) {
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.io.Writer;
+
+/**
+ * This class is used to represent an unknown entry type, e.g. encountered
+ * during bibtex parsing. The only known information is the type name.
+ * This is useful if the bibtex file contains type definitions that are used
+ * in the file - because the entries will be parsed before the type definitions
+ * are found. In the meantime, the entries will be assigned an 
+ * UnknownEntryType giving the name.
+ */
+public class UnknownEntryType extends BibtexEntryType {
+
+    private String name;
+    private String[] fields = new String[0];
+
+    public UnknownEntryType(String name_) {
+	name = name_;
+    }
+
+    public String getName() {
+	return name;
+    }
+
+    public String[] getOptionalFields() {
+	return fields;
+    }
+    public String[] getRequiredFields() {
+	return fields;
+    }
+
+
+    public String describeRequiredFields() {
+	return "unknown";
+    }
+
+    public String describeOptionalFields() {
+	return "unknown";
+    }
+
+    public boolean hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database) {
+	return true;
+    }
+
+    public void save(Writer out) {
+    }
+
+}
diff --git a/src/java/net/sf/jabref/UrlDragDrop.java b/src/java/net/sf/jabref/UrlDragDrop.java
index 5a96e22..44bb508 100644
--- a/src/java/net/sf/jabref/UrlDragDrop.java
+++ b/src/java/net/sf/jabref/UrlDragDrop.java
@@ -1,220 +1,220 @@
-/*
- Copyright (C) 2004 E. Putrycz
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-package net.sf.jabref;
-
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DropTargetDragEvent;
-import java.awt.dnd.DropTargetDropEvent;
-import java.awt.dnd.DropTargetEvent;
-import java.awt.dnd.DropTargetListener;
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.swing.JOptionPane;
-
-import net.sf.jabref.net.URLDownload;
-
-/**
- * @author Erik Putrycz erik.putrycz-at-nrc-cnrc.gc.ca
- */
-
-public class UrlDragDrop implements DropTargetListener {
-
-    private static Logger logger = Logger
-            .getLogger(UrlDragDrop.class.getName());
-
-    private FieldEditor feditor;
-
-    private EntryEditor editor;
-
-    private JabRefFrame frame;
-
-    public UrlDragDrop(EntryEditor _editor, JabRefFrame _frame,
-            FieldEditor _feditor) {
-        editor = _editor;
-        feditor = _feditor;
-        frame = _frame;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.awt.dnd.DropTargetListener#dragEnter(java.awt.dnd.DropTargetDragEvent)
-     */
-    public void dragEnter(DropTargetDragEvent dtde) {
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.awt.dnd.DropTargetListener#dragOver(java.awt.dnd.DropTargetDragEvent)
-     */
-    public void dragOver(DropTargetDragEvent dtde) {
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.awt.dnd.DropTargetListener#dropActionChanged(java.awt.dnd.DropTargetDragEvent)
-     */
-    public void dropActionChanged(DropTargetDragEvent dtde) {
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.awt.dnd.DropTargetListener#dragExit(java.awt.dnd.DropTargetEvent)
-     */
-    public void dragExit(DropTargetEvent dte) {
-    }
-
-    private static class JOptionChoice {
-
-        private String label;
-
-        private int id;
-
-        public JOptionChoice(String _label, int _id) {
-            label = _label;
-            id = _id;
-        }
-
-        public String toString() {
-            return label;
-        }
-
-        public int getId() {
-            return id;
-        }
-
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.awt.dnd.DropTargetListener#drop(java.awt.dnd.DropTargetDropEvent)
-     */
-    
-	public void drop(DropTargetDropEvent dtde) {
-        Transferable tsf = dtde.getTransferable();
-        dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
-        //try with an URL
-        DataFlavor dtURL = null;
-        try{
-            dtURL = new DataFlavor("application/x-java-url; class=java.net.URL");
-        }catch (ClassNotFoundException e){
-            logger.log(Level.WARNING,
-                    "Class not found for DnD... should not happen", e);
-        }
-        try{
-            URL url = (URL) tsf.getTransferData(dtURL);
-            JOptionChoice res = (JOptionChoice) JOptionPane
-                    .showInputDialog(editor, "", Globals
-                            .lang("Select action"),
-                            JOptionPane.QUESTION_MESSAGE, null,
-                            new JOptionChoice[] {
-                                    new JOptionChoice(Globals
-                                            .lang("Insert URL"), 0),
-                                    new JOptionChoice(Globals
-                                            .lang("Download file"), 1) },
-                            new JOptionChoice(Globals.lang("Insert URL"), 0));
-            switch (res.getId()) {
-            //insert URL
-            case 0:
-                feditor.setText(url.toString());
-                editor.updateField(feditor);
-                break;
-            //download file
-            case 1:
-                try{
-                    //auto file name:
-                    File file = new File(new File(Globals.prefs
-                            .get("pdfDirectory")), editor.getEntry()
-                            .getField(BibtexFields.KEY_FIELD)
-                            + ".pdf");
-                    URLDownload udl = new URLDownload(editor, url,
-                            file);
-                    frame.output(Globals.lang("Downloading..."));
-                    udl.download();
-                    frame.output(Globals.lang("Download completed"));
-                    feditor.setText(file.toURI().toURL().toString());
-                    editor.updateField(feditor);
-
-                }catch (IOException ioex){
-                    logger.log(Level.SEVERE, "Error while downloading file",
-                            ioex);
-                    JOptionPane.showMessageDialog(editor, Globals
-                            .lang("File download"), Globals
-                            .lang("Error while downloading file:"
-                                    + ioex.getMessage()),
-                            JOptionPane.ERROR_MESSAGE);
-                }
-                break;
-            }
-            return;
-        }catch (UnsupportedFlavorException nfe){
-            // not an URL then...
-        }catch (IOException ioex){
-            logger.log(Level.WARNING, "!should not happen!", ioex);
-        }
-        
-        try{
-            //try with a File List
-        	@SuppressWarnings("unchecked")
-        	List<File> filelist = (List<File>) tsf
-                    .getTransferData(DataFlavor.javaFileListFlavor);
-            if (filelist.size() > 1){
-                JOptionPane
-                        .showMessageDialog(editor, Globals
-                                .lang("Only one item is supported"), Globals
-                                .lang("Drag and Drop Error"),
-                                JOptionPane.ERROR_MESSAGE);
-                return;
-            }
-            File fl = filelist.get(0);
-            feditor.setText(fl.toURI().toURL().toString());
-            editor.updateField(feditor);
-
-        }catch (UnsupportedFlavorException nfe){
-            JOptionPane.showMessageDialog(editor, Globals
-                    .lang("Operation not supported"), Globals
-                    .lang("Drag and Drop Error"), JOptionPane.ERROR_MESSAGE);
-            logger.log(Level.WARNING, "Transfer exception", nfe);
-        }catch (IOException ioex){
-            logger.log(Level.WARNING, "Transfer exception", ioex);
-        }
-
-    }
-
-}
+/*
+ Copyright (C) 2004 E. Putrycz
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+package net.sf.jabref;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.JOptionPane;
+
+import net.sf.jabref.net.URLDownload;
+
+/**
+ * @author Erik Putrycz erik.putrycz-at-nrc-cnrc.gc.ca
+ */
+
+public class UrlDragDrop implements DropTargetListener {
+
+    private static Logger logger = Logger
+            .getLogger(UrlDragDrop.class.getName());
+
+    private FieldEditor feditor;
+
+    private EntryEditor editor;
+
+    private JabRefFrame frame;
+
+    public UrlDragDrop(EntryEditor _editor, JabRefFrame _frame,
+            FieldEditor _feditor) {
+        editor = _editor;
+        feditor = _feditor;
+        frame = _frame;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.dnd.DropTargetListener#dragEnter(java.awt.dnd.DropTargetDragEvent)
+     */
+    public void dragEnter(DropTargetDragEvent dtde) {
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.dnd.DropTargetListener#dragOver(java.awt.dnd.DropTargetDragEvent)
+     */
+    public void dragOver(DropTargetDragEvent dtde) {
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.dnd.DropTargetListener#dropActionChanged(java.awt.dnd.DropTargetDragEvent)
+     */
+    public void dropActionChanged(DropTargetDragEvent dtde) {
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.dnd.DropTargetListener#dragExit(java.awt.dnd.DropTargetEvent)
+     */
+    public void dragExit(DropTargetEvent dte) {
+    }
+
+    private static class JOptionChoice {
+
+        private String label;
+
+        private int id;
+
+        public JOptionChoice(String _label, int _id) {
+            label = _label;
+            id = _id;
+        }
+
+        public String toString() {
+            return label;
+        }
+
+        public int getId() {
+            return id;
+        }
+
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.dnd.DropTargetListener#drop(java.awt.dnd.DropTargetDropEvent)
+     */
+    
+	public void drop(DropTargetDropEvent dtde) {
+        Transferable tsf = dtde.getTransferable();
+        dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
+        //try with an URL
+        DataFlavor dtURL = null;
+        try{
+            dtURL = new DataFlavor("application/x-java-url; class=java.net.URL");
+        }catch (ClassNotFoundException e){
+            logger.log(Level.WARNING,
+                    "Class not found for DnD... should not happen", e);
+        }
+        try{
+            URL url = (URL) tsf.getTransferData(dtURL);
+            JOptionChoice res = (JOptionChoice) JOptionPane
+                    .showInputDialog(editor, "", Globals
+                            .lang("Select action"),
+                            JOptionPane.QUESTION_MESSAGE, null,
+                            new JOptionChoice[] {
+                                    new JOptionChoice(Globals
+                                            .lang("Insert URL"), 0),
+                                    new JOptionChoice(Globals
+                                            .lang("Download file"), 1) },
+                            new JOptionChoice(Globals.lang("Insert URL"), 0));
+            switch (res.getId()) {
+            //insert URL
+            case 0:
+                feditor.setText(url.toString());
+                editor.updateField(feditor);
+                break;
+            //download file
+            case 1:
+                try{
+                    //auto file name:
+                    File file = new File(new File(Globals.prefs
+                            .get("pdfDirectory")), editor.getEntry()
+                            .getField(BibtexFields.KEY_FIELD)
+                            + ".pdf");
+                    URLDownload udl = new URLDownload(editor, url,
+                            file);
+                    frame.output(Globals.lang("Downloading..."));
+                    udl.download();
+                    frame.output(Globals.lang("Download completed"));
+                    feditor.setText(file.toURI().toURL().toString());
+                    editor.updateField(feditor);
+
+                }catch (IOException ioex){
+                    logger.log(Level.SEVERE, "Error while downloading file",
+                            ioex);
+                    JOptionPane.showMessageDialog(editor, Globals
+                            .lang("File download"), Globals
+                            .lang("Error while downloading file:"
+                                    + ioex.getMessage()),
+                            JOptionPane.ERROR_MESSAGE);
+                }
+                break;
+            }
+            return;
+        }catch (UnsupportedFlavorException nfe){
+            // not an URL then...
+        }catch (IOException ioex){
+            logger.log(Level.WARNING, "!should not happen!", ioex);
+        }
+        
+        try{
+            //try with a File List
+        	@SuppressWarnings("unchecked")
+        	List<File> filelist = (List<File>) tsf
+                    .getTransferData(DataFlavor.javaFileListFlavor);
+            if (filelist.size() > 1){
+                JOptionPane
+                        .showMessageDialog(editor, Globals
+                                .lang("Only one item is supported"), Globals
+                                .lang("Drag and Drop Error"),
+                                JOptionPane.ERROR_MESSAGE);
+                return;
+            }
+            File fl = filelist.get(0);
+            feditor.setText(fl.toURI().toURL().toString());
+            editor.updateField(feditor);
+
+        }catch (UnsupportedFlavorException nfe){
+            JOptionPane.showMessageDialog(editor, Globals
+                    .lang("Operation not supported"), Globals
+                    .lang("Drag and Drop Error"), JOptionPane.ERROR_MESSAGE);
+            logger.log(Level.WARNING, "Transfer exception", nfe);
+        }catch (IOException ioex){
+            logger.log(Level.WARNING, "Transfer exception", ioex);
+        }
+
+    }
+
+}
diff --git a/src/java/net/sf/jabref/Util.java b/src/java/net/sf/jabref/Util.java
index 636d29f..a0b4ca9 100644
--- a/src/java/net/sf/jabref/Util.java
+++ b/src/java/net/sf/jabref/Util.java
@@ -1,3218 +1,3218 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-// created by : Morten O. Alver 2003
-
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.CardLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.*;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLDecoder;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.text.NumberFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.StringTokenizer;
-import java.util.TreeSet;
-import java.util.Vector;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.swing.Action;
-import javax.swing.ActionMap;
-import javax.swing.Box;
-import javax.swing.InputMap;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JRootPane;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
-import javax.swing.SwingUtilities;
-import javax.swing.undo.UndoableEdit;
-
-import net.sf.jabref.autocompleter.AbstractAutoCompleter;
-import net.sf.jabref.export.SaveSession;
-import net.sf.jabref.export.layout.Layout;
-import net.sf.jabref.export.layout.LayoutHelper;
-import net.sf.jabref.external.ExternalFileType;
-import net.sf.jabref.external.ExternalFileTypeEntryEditor;
-import net.sf.jabref.external.UnknownExternalFileType;
-import net.sf.jabref.groups.AbstractGroup;
-import net.sf.jabref.groups.KeywordGroup;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.gui.FileListEntryEditor;
-import net.sf.jabref.gui.FileListTableModel;
-import net.sf.jabref.labelPattern.LabelPatternUtil;
-import net.sf.jabref.net.URLDownload;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableFieldChange;
-import net.sf.jabref.util.FileNameCleaner;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * utility functions
- */
-public class Util {
-
-	/**
-	 * A static Object for date formatting. Please do not create the object
-	 * here, because there are some references from the Globals class.....
-	 * 
-	 */
-	private static SimpleDateFormat dateFormatter = null;
-
-	/*
-	 * Colors are defined here.
-	 *  
-	 */
-	public static Color fieldsCol = new Color(180, 180, 200);
-
-	/*
-	 * Integer values for indicating result of duplicate check (for entries):
-	 * 
-	 */
-	final static int TYPE_MISMATCH = -1, NOT_EQUAL = 0, EQUAL = 1, EMPTY_IN_ONE = 2,
-		EMPTY_IN_TWO = 3, EMPTY_IN_BOTH = 4;
-	
-	final static NumberFormat idFormat;
-
-    public static Pattern remoteLinkPattern = Pattern.compile("[a-z]+://.*");
-
-    public static int MARK_COLOR_LEVELS = 6,
-            MAX_MARKING_LEVEL = MARK_COLOR_LEVELS-1,
-            IMPORT_MARK_LEVEL = MARK_COLOR_LEVELS;
-    public static Pattern markNumberPattern = Pattern.compile(Globals.prefs.MARKING_WITH_NUMBER_PATTERN);
-
-
-    static {
-		idFormat = NumberFormat.getInstance();
-		idFormat.setMinimumIntegerDigits(8);
-		idFormat.setGroupingUsed(false);
-	}
-
-	public static int getMinimumIntegerDigits(){
-		return idFormat.getMinimumIntegerDigits();
-	}
-
-	public static void pr(String s) {
-		Globals.logger(s);
-	}
-
-	public static String nCase(String s) {
-		// Make first character of String uppercase, and the
-		// rest lowercase.
-		if (s.length() > 1)
-			return s.substring(0, 1).toUpperCase() + s.substring(1, s.length()).toLowerCase();
-		else
-			return s.toUpperCase();
-
-	}
-
-	public static String checkName(String s) {
-		// Append '.bib' to the string unless it ends with that.
-		if (s.length() < 4 || !s.substring(s.length() - 4).equalsIgnoreCase(".bib")) {
-			return s + ".bib";
-		}
-		return s;
-	}
-
-	private static int idCounter = 0;
-
-	public synchronized static String createNeutralId() {
-		return idFormat.format(idCounter++);
-	}
-
-	/**
-	 * This method sets the location of a Dialog such that it is centered with
-	 * regard to another window, but not outside the screen on the left and the
-	 * top.
-	 */
-	public static void placeDialog(java.awt.Dialog diag, java.awt.Container win) {
-        diag.setLocationRelativeTo(win);
-	}
-
-	/**
-	 * This method translates a field or string from Bibtex notation, with
-	 * possibly text contained in " " or { }, and string references,
-	 * concatenated by '#' characters, into Bibkeeper notation, where string
-	 * references are enclosed in a pair of '#' characters.
-	 */
-	public static String parseField(String content) {
-		
-		if (content.length() == 0)
-			return content;
-		
-		String[] strings = content.split("#");
-		StringBuffer result = new StringBuffer();
-		for (int i = 0; i < strings.length; i++){
-			String s = strings[i].trim();
-			if (s.length() > 0){
-				char c = s.charAt(0);
-				// String reference or not?
-				if (c == '{' || c == '"'){
-					result.append(shaveString(strings[i]));	
-				} else {
-					// This part should normally be a string reference, but if it's
-					// a pure number, it is not.
-					String s2 = shaveString(s);
-					try {
-						Integer.parseInt(s2);
-						// If there's no exception, it's a number.
-						result.append(s2);
-					} catch (NumberFormatException ex) {
-						// otherwise append with hashes...
-						result.append("#").append(s2).append("#");
-					}
-				}
-			}
-		}
-		return result.toString();
-	}
-
-	/**
-	 * Will return the publication date of the given bibtex entry in conformance
-	 * to ISO 8601, i.e. either YYYY or YYYY-MM.
-	 * 
-	 * @param entry
-	 * @return will return the publication date of the entry or null if no year
-	 *         was found.
-	 */
-	public static String getPublicationDate(BibtexEntry entry) {
-
-		Object o = entry.getField("year");
-		if (o == null)
-			return null;
-
-		String year = toFourDigitYear(o.toString());
-
-		o = entry.getField("month");
-		if (o != null) {
-			int month = Util.getMonthNumber(o.toString());
-			if (month != -1) {
-				return year + "-" + (month + 1 < 10 ? "0" : "") + (month + 1);
-			}
-		}
-		return year;
-	}
-
-	public static String shaveString(String s) {
-		// returns the string, after shaving off whitespace at the beginning
-		// and end, and removing (at most) one pair of braces or " surrounding
-		// it.
-		if (s == null)
-			return null;
-		char ch, ch2;
-		int beg = 0, end = s.length();
-		// We start out assuming nothing will be removed.
-		boolean begok = false, endok = false;
-		while (!begok) {
-			if (beg < s.length()) {
-				ch = s.charAt(beg);
-				if (Character.isWhitespace(ch))
-					beg++;
-				else
-					begok = true;
-			} else
-				begok = true;
-
-		}
-		while (!endok) {
-			if (end > beg + 1) {
-				ch = s.charAt(end - 1);
-				if (Character.isWhitespace(ch))
-					end--;
-				else
-					endok = true;
-			} else
-				endok = true;
-		}
-
-		if (end > beg + 1) {
-			ch = s.charAt(beg);
-			ch2 = s.charAt(end - 1);
-			if (((ch == '{') && (ch2 == '}')) || ((ch == '"') && (ch2 == '"'))) {
-				beg++;
-				end--;
-			}
-		}
-		s = s.substring(beg, end);
-		return s;
-	}
-
-	/**
-	 * This method returns a String similar to the one passed in, except that it
-	 * is molded into a form that is acceptable for bibtex.
-	 * 
-	 * Watch-out that the returned string might be of length 0 afterwards.
-	 * 
-	 * @param key
-	 *            mayBeNull
-	 */
-	public static String checkLegalKey(String key) {
-		if (key == null)
-			return null;
-        if (!Globals.prefs.getBoolean("enforceLegalBibtexKey")) {
-            // User doesn't want us to enforce legal characters. We must still look
-            // for whitespace and some characters such as commas, since these would
-            // interfere with parsing:
-            StringBuilder newKey = new StringBuilder();
-            for (int i = 0; i < key.length(); i++) {
-                char c = key.charAt(i);
-                if (!Character.isWhitespace(c) && (c != '{') && (c != '\\') && (c != '"')
-                    && (c != '}') && (c != ','))
-                    newKey.append(c);
-            }
-            return newKey.toString();
-
-        }
-		StringBuilder newKey = new StringBuilder();
-		for (int i = 0; i < key.length(); i++) {
-			char c = key.charAt(i);
-			if (!Character.isWhitespace(c) && (c != '#') && (c != '{') && (c != '\\') && (c != '"')
-				&& (c != '}') && (c != '~') && (c != ',') && (c != '^') && (c != '\''))
-				newKey.append(c);
-		}
-
-		// Replace non-english characters like umlauts etc. with a sensible
-		// letter or letter combination that bibtex can accept.
-		String newKeyS = replaceSpecialCharacters(newKey.toString());
-
-		return newKeyS;
-	}
-
-	/**
-	 * Replace non-english characters like umlauts etc. with a sensible letter
-	 * or letter combination that bibtex can accept. The basis for replacement
-	 * is the HashMap GLobals.UNICODE_CHARS.
-	 */
-	public static String replaceSpecialCharacters(String s) {
-		for (Map.Entry<String, String> chrAndReplace : Globals.UNICODE_CHARS.entrySet()){
-			s = s.replaceAll(chrAndReplace.getKey(), chrAndReplace.getValue());
-		}
-		return s;
-	}
-
-	static public String _wrap2(String in, int wrapAmount) {
-		// The following line cuts out all whitespace and replaces them with
-		// single
-		// spaces:
-		// in = in.replaceAll("[ ]+"," ").replaceAll("[\\t]+"," ");
-		// StringBuffer out = new StringBuffer(in);
-		StringBuffer out = new StringBuffer(in.replaceAll("[ \\t\\r]+", " "));
-
-		int p = in.length() - wrapAmount;
-		int lastInserted = -1;
-		while (p > 0) {
-			p = out.lastIndexOf(" ", p);
-			if (p <= 0 || p <= 20)
-				break;
-			int lbreak = out.indexOf("\n", p);
-			System.out.println(lbreak + " " + lastInserted);
-			if ((lbreak > p) && ((lastInserted >= 0) && (lbreak < lastInserted))) {
-				p = lbreak - wrapAmount;
-			} else {
-				out.insert(p, "\n\t");
-				lastInserted = p;
-				p -= wrapAmount;
-			}
-		}
-		return out.toString();
-	}
-
-	static public String wrap2(String in, int wrapAmount) {
-		return net.sf.jabref.imports.FieldContentParser.wrap(in, wrapAmount);
-	}
-
-	static public String __wrap2(String in, int wrapAmount) {
-		// The following line cuts out all whitespace except line breaks, and
-		// replaces
-		// with single spaces. Line breaks are padded with a tab character:
-		StringBuffer out = new StringBuffer(in.replaceAll("[ \\t\\r]+", " "));
-
-		int p = 0;
-		// int lastInserted = -1;
-		while (p < out.length()) {
-			int q = out.indexOf(" ", p + wrapAmount);
-			if ((q < 0) || (q >= out.length()))
-				break;
-			int lbreak = out.indexOf("\n", p);
-			// System.out.println(lbreak);
-			if ((lbreak > p) && (lbreak < q)) {
-				p = lbreak + 1;
-				int piv = lbreak + 1;
-				if ((out.length() > piv) && !(out.charAt(piv) == '\t'))
-					out.insert(piv, "\n\t");
-
-			} else {
-				// System.out.println(q+" "+out.length());
-				out.deleteCharAt(q);
-				out.insert(q, "\n\t");
-				p = q + 1;
-			}
-		}
-		return out.toString();// .replaceAll("\n", "\n\t");
-	}
-
-	public static TreeSet<String> findDeliminatedWordsInField(BibtexDatabase db, String field,
-		String deliminator) {
-		TreeSet<String> res = new TreeSet<String>();
-		
-		for (String s : db.getKeySet()){
-			BibtexEntry be = db.getEntryById(s);
-			Object o = be.getField(field);
-			if (o != null) {
-				String fieldValue = o.toString().trim();
-				StringTokenizer tok = new StringTokenizer(fieldValue, deliminator);
-				while (tok.hasMoreTokens())
-					res.add(nCase(tok.nextToken().trim()));
-			}
-		}
-		return res;
-	}
-
-	/**
-	 * Returns a HashMap containing all words used in the database in the given
-	 * field type. Characters in
-	 * 
-	 * @param remove
-	 *            are not included.
-	 * @param db
-	 *            a <code>BibtexDatabase</code> value
-	 * @param field
-	 *            a <code>String</code> value
-	 * @param remove
-	 *            a <code>String</code> value
-	 * @return a <code>HashSet</code> value
-	 */
-	public static TreeSet<String> findAllWordsInField(BibtexDatabase db, String field, String remove) {
-		TreeSet<String> res = new TreeSet<String>();
-		StringTokenizer tok;
-		for (String s : db.getKeySet()){
-			BibtexEntry be = db.getEntryById(s);
-			Object o = be.getField(field);
-			if (o != null) {
-				tok = new StringTokenizer(o.toString(), remove, false);
-				while (tok.hasMoreTokens())
-					res.add(nCase(tok.nextToken().trim()));
-			}
-		}
-		return res;
-	}
-
-
-    /**
-     * Finds all authors' last names in all the given fields for the given database.
-     * @param db The database.
-     * @param fields The fields to look in.
-     * @return a set containing the names.
-     */
-    public static Set<String> findAuthorLastNames(BibtexDatabase db, List<String> fields) {
-		Set<String> res = new TreeSet<String>();
-		for (String s : db.getKeySet()){
-			BibtexEntry be = db.getEntryById(s);
-            for (String field : fields) {
-                String val = be.getField(field);
-                if ((val != null) && (val.length() > 0)) {
-                    AuthorList al = AuthorList.getAuthorList(val);
-                    for (int i=0; i<al.size(); i++) {
-                        AuthorList.Author a = al.getAuthor(i);
-                        String lastName = a.getLast();
-                        if ((lastName != null) && (lastName.length() > 0))
-                            res.add(lastName);
-                    }
-                }
-
-            }
-		}
-
-		return res;
-	}
-    
-
-	/**
-	 * Takes a String array and returns a string with the array's elements
-	 * delimited by a certain String.
-	 * 
-	 * @param strs
-	 *            String array to convert.
-	 * @param delimiter
-	 *            String to use as delimiter.
-	 * @return Delimited String.
-	 */
-	public static String stringArrayToDelimited(String[] strs, String delimiter) {
-		if ((strs == null) || (strs.length == 0))
-			return "";
-		if (strs.length == 1)
-			return strs[0];
-		StringBuffer sb = new StringBuffer();
-		for (int i = 0; i < strs.length - 1; i++) {
-			sb.append(strs[i]);
-			sb.append(delimiter);
-		}
-		sb.append(strs[strs.length - 1]);
-		return sb.toString();
-	}
-
-	/**
-	 * Takes a delimited string, splits it and returns
-	 * 
-	 * @param names
-	 *            a <code>String</code> value
-	 * @return a <code>String[]</code> value
-	 */
-	public static String[] delimToStringArray(String names, String delimiter) {
-		if (names == null)
-			return null;
-		return names.split(delimiter);
-	}
-
-	/**
-	 * Open a http/pdf/ps viewer for the given link string.
-	 */
-	public static void openExternalViewer(MetaData metaData, String link, String fieldName)
-		throws IOException {
-
-        if (fieldName.equals("ps") || fieldName.equals("pdf")) {
-
-            // Find the default directory for this field type:
-			String[] dir = metaData.getFileDirectory(fieldName);
-
-			File file = expandFilename(link, dir);
-
-			// Check that the file exists:
-			if ((file == null) || !file.exists()) {
-				throw new IOException(Globals.lang("File not found") + " (" + fieldName + "): '"
-					+ link + "'.");
-			}
-			link = file.getCanonicalPath();
-
-			// Use the correct viewer even if pdf and ps are mixed up:
-			String[] split = file.getName().split("\\.");
-			if (split.length >= 2) {
-				if (split[split.length - 1].equalsIgnoreCase("pdf"))
-					fieldName = "pdf";
-				else if (split[split.length - 1].equalsIgnoreCase("ps")
-					|| (split.length >= 3 && split[split.length - 2].equalsIgnoreCase("ps")))
-					fieldName = "ps";
-			}
-
-        } else if (fieldName.equals("doi")) {
-            fieldName = "url";
-            
-            // sanitizing is done below at the treatment of "URL"
-            // in sanatizeUrl a doi-link is correctly treated
-
-        } else if (fieldName.equals("eprint")) {
-            fieldName = "url";
-
-            link = sanitizeUrl(link);
-
-            // Check to see if link field already contains a well formated URL
-            if (!link.startsWith("http://")) {
-                link = Globals.ARXIV_LOOKUP_PREFIX + link;
-            }
-        }
-
-		if (fieldName.equals("url")) { // html
-			try {
-                link = sanitizeUrl(link);
-                ExternalFileType fileType = Globals.prefs.getExternalFileTypeByExt("html");
-				if (Globals.ON_MAC) {
-
-                    String[] cmd = ((fileType.getOpenWith() != null) && (fileType.getOpenWith().length() > 0)) ?
-                            new String[] { "/usr/bin/open", "-a", fileType.getOpenWith(), link } :
-                            new String[] { "/usr/bin/open", link };
-					Runtime.getRuntime().exec(cmd);
-				} else if (Globals.ON_WIN) {
-
-                    if ((fileType.getOpenWith() != null) && (fileType.getOpenWith().length() > 0)) {
-                        // Application is specified. Use it:
-                        openFileWithApplicationOnWindows(link, fileType.getOpenWith());
-                    } else
-                        openFileOnWindows(link, true);
-				} else {
-                    // Use the given app if specified, and the universal "xdg-open" otherwise:
-                    String[] openWith;
-                    if ((fileType.getOpenWith() != null) && (fileType.getOpenWith().length() > 0))
-                        openWith = fileType.getOpenWith().split(" ");
-                    else
-                        openWith = new String[] {"xdg-open"};
-
-                    String[] cmd = new String[openWith.length+1];
-                    System.arraycopy(openWith, 0, cmd, 0, openWith.length);
-                    cmd[cmd.length-1] = link;
-                    Runtime.getRuntime().exec(cmd);
-				}
-
-			} catch (IOException e) {
-                System.err.println(Globals.lang("Error_opening_file_'%0'.", link));
-                e.printStackTrace();
-			}
-		} else if (fieldName.equals("ps")) {
-			try {
-				if (Globals.ON_MAC) {
-                    ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("ps");
-                    String viewer = type != null ? type.getOpenWith() : Globals.prefs.get("psviewer");
-                    String[] cmd = { "/usr/bin/open", "-a", viewer, link };
-					Runtime.getRuntime().exec(cmd);
-				} else if (Globals.ON_WIN) {
-					openFileOnWindows(link, true);
-					/*
-					 * cmdArray[0] = Globals.prefs.get("psviewer"); cmdArray[1] =
-					 * link; Process child = Runtime.getRuntime().exec(
-					 * cmdArray[0] + " " + cmdArray[1]);
-					 */
-				} else {
-                    ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("ps");
-                    String viewer = type != null ? type.getOpenWith() : "xdg-open";
-                    String[] cmdArray = new String[2];
-                    cmdArray[0] = viewer;
-					cmdArray[1] = link;
-					Runtime.getRuntime().exec(cmdArray);
-				}
-			} catch (IOException e) {
-				System.err.println("An error occured on the command: "
-					+ Globals.prefs.get("psviewer") + " " + link);
-			}
-		} else if (fieldName.equals("pdf")) {
-			try {
-				if (Globals.ON_MAC) {
-                    ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("pdf");
-                    String viewer = type != null ? type.getOpenWith() : Globals.prefs.get("psviewer");
-                    String[] cmd = { "/usr/bin/open", "-a", viewer, link };
-					Runtime.getRuntime().exec(cmd);
-				} else if (Globals.ON_WIN) {
-					openFileOnWindows(link, true);
-					/*
-					 * String[] spl = link.split("\\\\"); StringBuffer sb = new
-					 * StringBuffer(); for (int i = 0; i < spl.length; i++) { if
-					 * (i > 0) sb.append("\\"); if (spl[i].indexOf(" ") >= 0)
-					 * spl[i] = "\"" + spl[i] + "\""; sb.append(spl[i]); }
-					 * //pr(sb.toString()); link = sb.toString();
-					 * 
-					 * String cmd = "cmd.exe /c start " + link;
-					 * 
-					 * Process child = Runtime.getRuntime().exec(cmd);
-					 */
-				} else {
-                    ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("pdf");
-                    String viewer = type != null ? type.getOpenWith() : Globals.prefs.get("psviewer");
-                    String[] cmdArray = new String[2];
-                    cmdArray[0] = viewer;
-					cmdArray[1] = link;
-					// Process child = Runtime.getRuntime().exec(cmdArray[0]+"
-					// "+cmdArray[1]);
-					Runtime.getRuntime().exec(cmdArray);
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-				System.err.println("An error occured on the command: "
-					+ Globals.prefs.get("pdfviewer") + " #" + link);
-				System.err.println(e.getMessage());
-			}
-		} else {
-			System.err
-				.println("Message: currently only PDF, PS and HTML files can be opened by double clicking");
-		}
-	}
-
-	/**
-	 * Opens a file on a Windows system, using its default viewer.
-	 * 
-	 * @param link
-	 *            The file name.
-	 * @param localFile
-	 *            true if it is a local file, not an URL.
-	 * @throws IOException
-	 */
-	public static void openFileOnWindows(String link, boolean localFile) throws IOException {
-		/*
-		 * if (localFile) { String[] spl = link.split("\\\\"); StringBuffer sb =
-		 * new StringBuffer(); for (int i = 0; i < spl.length; i++) { if (i > 0)
-		 * sb.append("\\"); if (spl[i].indexOf(" ") >= 0) spl[i] = "\"" + spl[i] +
-		 * "\""; sb.append(spl[i]); } link = sb.toString(); }
-		 */
-		link = link.replaceAll("&", "\"&\"").replaceAll(" ", "\" \"");
-
-		// Bug fix for:
-		// http://sourceforge.net/tracker/index.php?func=detail&aid=1489454&group_id=92314&atid=600306
-		String cmd;
-		if (Globals.osName.startsWith("Windows 9")) {
-			cmd = "command.com /c start " + link;
-		} else {
-			cmd = "cmd.exe /c start " + link;
-		}
-
-        Runtime.getRuntime().exec(cmd);
-	}
-
-    /**
-     * Opens a file on a Windows system, using the given application.
-     *
-     * @param link The file name.
-     * @param application Link to the app that opens the file.
-     * @throws IOException
-     */
-    public static void openFileWithApplicationOnWindows(String link, String application)
-        throws IOException {
-
-        link = link.replaceAll("&", "\"&\"").replaceAll(" ", "\" \"");
-
-		Runtime.getRuntime().exec(application + " " + link);
-    }
-
-    /**
-	 * Open an external file, attempting to use the correct viewer for it.
-	 * 
-	 * @param metaData
-	 *            The MetaData for the database this file belongs to.
-	 * @param link
-	 *            The file name.
-     * @return false if the link couldn't be resolved, true otherwise.
-	 */
-	public static boolean openExternalFileAnyFormat(final MetaData metaData, String link,
-                                                 final ExternalFileType fileType) throws IOException {
-
-        boolean httpLink = false;
-
-        if (remoteLinkPattern.matcher(link.toLowerCase()).matches()) {
-            httpLink = true;
-        }
-        /*if (link.toLowerCase().startsWith("file://")) {
-            link = link.substring(7);
-        }
-        final String ln = link;
-        if (remoteLinkPattern.matcher(link.toLowerCase()).matches()) {
-            (new Thread(new Runnable() {
-                public void run() {
-                    openRemoteExternalFile(metaData, ln, fileType);
-                }
-            })).start();
-
-            return true;
-        }*/
-
-        //boolean httpLink = link.toLowerCase().startsWith("http:")
-        //        || link.toLowerCase().startsWith("ftp:");
-
-        
-        // For other platforms we'll try to find the file type:
-		File file = new File(link);
-
-        if (!httpLink) {
-            File tmp = expandFilename(metaData, link);
-            if (tmp != null)
-                file = tmp;
-        }
-
-        // Check if we have arrived at a file type, and either an http link or an existing file:
-		if ((httpLink || file.exists()) && (fileType != null)) {
-            // Open the file:
-			try {
-                String filePath = httpLink ? link : file.getPath();
-                if (Globals.ON_MAC) {
-                    // Use "-a <application>" if the app is specified, and just "open <filename>" otherwise:
-                    String[] cmd = ((fileType.getOpenWith() != null) && (fileType.getOpenWith().length() > 0)) ?
-                            new String[] { "/usr/bin/open", "-a", fileType.getOpenWith(), filePath } :
-                            new String[] { "/usr/bin/open", filePath };
-					Runtime.getRuntime().exec(cmd);
-				} else if (Globals.ON_WIN) {
-                    if ((fileType.getOpenWith() != null) && (fileType.getOpenWith().length() > 0)) {
-                        // Application is specified. Use it:
-                        openFileWithApplicationOnWindows(filePath, fileType.getOpenWith());
-                    } else
-                        openFileOnWindows(filePath, true);
-				} else {
-                    // Use the given app if specified, and the universal "xdg-open" otherwise:
-                    String[] openWith;
-                    if ((fileType.getOpenWith() != null) && (fileType.getOpenWith().length() > 0))
-                        openWith = fileType.getOpenWith().split(" ");
-                    else
-                        openWith = new String[] {"xdg-open"};
-                    
-                    String[] cmdArray = new String[openWith.length+1];
-                    System.arraycopy(openWith, 0, cmdArray, 0, openWith.length);
-                    cmdArray[cmdArray.length-1] = filePath;
-                    Runtime.getRuntime().exec(cmdArray);
-				}
-                return true;
-            } catch (IOException e) {
-                throw e;
-                /*e.printStackTrace();
-				System.err.println("An error occured on the command: " + fileType.getOpenWith()
-					+ " #" + link);
-				System.err.println(e.getMessage());*/
-			}
-
-		} else {
-
-            return false;
-            // No file matched the name, or we didn't know the file type.
-
-		}
-
-
-    }
-
-
-    public static void openRemoteExternalFile(final MetaData metaData,
-                                              final String link, final ExternalFileType fileType) {
-        File temp = null;
-        try {
-            temp = File.createTempFile("jabref-link", "."+fileType.getExtension());
-            temp.deleteOnExit();
-            System.out.println("Downloading to '"+temp.getPath()+"'");
-            URLDownload ud = new URLDownload(null, new URL(link), temp);
-            ud.download();
-            System.out.println("Done");
-        } catch (MalformedURLException ex) {
-            ex.printStackTrace();
-        } catch (IOException ex) {
-            ex.printStackTrace();
-        }
-        final String ln = temp.getPath();
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                try {
-                    openExternalFileAnyFormat(metaData, ln, fileType);
-                } catch (IOException ex) {
-                    ex.printStackTrace();
-                }
-            }
-        });
-    }
-
-public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry, MetaData metaData,
-                                           String link, UnknownExternalFileType fileType) throws IOException {
-
-    String cancelMessage = Globals.lang("Unable to open file.");
-    String[] options = new String[] {Globals.lang("Define '%0'", fileType.getName()),
-            Globals.lang("Change file type"), Globals.lang("Cancel")};
-    String defOption = options[0];
-    int answer = JOptionPane.showOptionDialog(frame, Globals.lang("This external link is of the type '%0', which is undefined. What do you want to do?",
-            fileType.getName()),
-            Globals.lang("Undefined file type"), JOptionPane.YES_NO_CANCEL_OPTION,
-            JOptionPane.QUESTION_MESSAGE, null, options, defOption);
-    if (answer == JOptionPane.CANCEL_OPTION) {
-        frame.output(cancelMessage);
-        return false;
-    }
-    else if (answer == JOptionPane.YES_OPTION) {
-        // User wants to define the new file type. Show the dialog:
-        ExternalFileType newType = new ExternalFileType(fileType.getName(), "", "", "", "new");
-        ExternalFileTypeEntryEditor editor = new ExternalFileTypeEntryEditor(frame, newType);
-        editor.setVisible(true);
-        if (editor.okPressed()) {
-            // Get the old list of types, add this one, and update the list in prefs:
-            List<ExternalFileType> fileTypes = new ArrayList<ExternalFileType>();
-            ExternalFileType[] oldTypes = Globals.prefs.getExternalFileTypeSelection();
-            for (int i = 0; i < oldTypes.length; i++) {
-                fileTypes.add(oldTypes[i]);
-            }
-            fileTypes.add(newType);
-            Collections.sort(fileTypes);
-            Globals.prefs.setExternalFileTypes(fileTypes);
-            // Finally, open the file:
-            return openExternalFileAnyFormat(metaData, link, newType);
-        } else {
-            // Cancelled:
-            frame.output(cancelMessage);
-            return false;
-        }
-    }
-    else {
-        // User wants to change the type of this link.
-        // First get a model of all file links for this entry:
-        FileListTableModel tModel = new FileListTableModel();
-        String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
-        tModel.setContent(oldValue);
-        FileListEntry flEntry = null;
-        // Then find which one we are looking at:
-        for (int i=0; i<tModel.getRowCount(); i++) {
-            FileListEntry iEntry = tModel.getEntry(i);
-            if (iEntry.getLink().equals(link)) {
-                flEntry = iEntry;
-                break;
-            }
-        }
-        if (flEntry == null) {
-            // This shouldn't happen, so I'm not sure what to put in here:
-            throw new RuntimeException("Could not find the file list entry "+link+" in "+entry.toString());
-        }
-
-        FileListEntryEditor editor = new FileListEntryEditor(frame, flEntry, false, true, metaData);
-        editor.setVisible(true, false);
-        if (editor.okPressed()) {
-            // Store the changes and add an undo edit:
-            String newValue = tModel.getStringRepresentation();
-            UndoableFieldChange ce = new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD,
-                    oldValue, newValue);
-            entry.setField(GUIGlobals.FILE_FIELD, newValue);
-            frame.basePanel().undoManager.addEdit(ce);
-            frame.basePanel().markBaseChanged();
-            // Finally, open the link:
-            return openExternalFileAnyFormat(metaData, flEntry.getLink(), flEntry.getType());
-        } else {
-            // Cancelled:
-            frame.output(cancelMessage);
-            return false;
-        }
-    }
-}
-    /**
-	 * Make sure an URL is "portable", in that it doesn't contain bad characters
-	 * that break the open command in some OSes.
-	 * 
-	 * A call to this method will also remove \\url{} enclosings and clean DOI links.
-	 * 
-	 * @param link :the URL to sanitize.
-	 * @return Sanitized URL
-	 */
-	public static String sanitizeUrl(String link) {
-	    link = link.trim();
-
-	    // First check if it is enclosed in \\url{}. If so, remove
-        // the wrapper.
-        if (link.startsWith("\\url{") && link.endsWith("}"))
-            link = link.substring(5, link.length() - 1);
-
-        if (link.matches("^doi:/*.*")){
-            // Remove 'doi:'
-            link = link.replaceFirst("^doi:/*", "");
-            link = Globals.DOI_LOOKUP_PREFIX + link;
-        }
-
-        // converts doi-only link to full http address
-        // Morten Alver 6 Nov 2012: this extracts a nonfunctional DOI from some complete
-        // http addresses (e.g. http://onlinelibrary.wiley.com/doi/10.1002/rra.999/abstract, where
-        // the trailing "/abstract" is included but doesn't lead to a resolvable DOI).
-        // To prevent mangling of working URLs I'm disabling this check if the link is already
-        // a full http link:
-        if (checkForPlainDOI(link) && !link.startsWith("http://")) {
-            link = Globals.DOI_LOOKUP_PREFIX + getDOI(link);
-        }
-
-		link = link.replaceAll("\\+", "%2B");
-
-		try {
-			link = URLDecoder.decode(link, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-		}
-
-		/**
-		 * Fix for: [ 1574773 ] sanitizeUrl() breaks ftp:// and file:///
-		 * 
-		 * http://sourceforge.net/tracker/index.php?func=detail&aid=1574773&group_id=92314&atid=600306
-		 */
-		try {
-			return new URI(null, link, null).toASCIIString();
-		} catch (URISyntaxException e) {
-			return link;
-		}
-	}
-
-	/**
-	 * Searches the given directory and subdirectories for a pdf file with name
-	 * as given + ".pdf"
-	 */
-	public static String findPdf(String key, String extension, String directory, OpenFileFilter off) {
-		// String filename = key + "."+extension;
-
-		/*
-		 * Simon Fischer's patch for replacing a regexp in keys before
-		 * converting to filename:
-		 * 
-		 * String regex = Globals.prefs.get("basenamePatternRegex"); if ((regex !=
-		 * null) && (regex.trim().length() > 0)) { String replacement =
-		 * Globals.prefs.get("basenamePatternReplacement"); key =
-		 * key.replaceAll(regex, replacement); }
-		 */
-		if (!directory.endsWith(System.getProperty("file.separator")))
-			directory += System.getProperty("file.separator");
-		String found = findInDir(key, directory, off, 0);
-		if (found != null)
-			return found.substring(directory.length());
-		else
-			return null;
-	}
-
-	public static Map<BibtexEntry, List<File>> findAssociatedFiles(Collection<BibtexEntry> entries, Collection<String> extensions, Collection<File> directories){
-		HashMap<BibtexEntry, List<File>> result = new HashMap<BibtexEntry, List<File>>();
-	
-		// First scan directories
-		Set<File> filesWithExtension = findFiles(extensions, directories);
-		
-		// Initialize Result-Set
-		for (BibtexEntry entry : entries){
-			result.put(entry, new ArrayList<File>());
-		}
-
-        boolean exactOnly = Globals.prefs.getBoolean("autolinkExactKeyOnly");
-        // Now look for keys
-		nextFile:
-		for (File file : filesWithExtension){
-			
-			String name = file.getName();
-            int dot = name.lastIndexOf('.');
-            // First, look for exact matches:
-            for (BibtexEntry entry : entries){
-                String citeKey = entry.getCiteKey();
-                if ((citeKey != null) && (citeKey.length() > 0)) {
-                    if (dot > 0) {
-                        if (name.substring(0, dot).equals(citeKey)) {
-                            result.get(entry).add(file);
-                            continue nextFile;
-                        }
-                    }
-                }
-            }
-            // If we get here, we didn't find any exact matches. If non-exact
-            // matches are allowed, try to find one:
-            if (!exactOnly) {
-                for (BibtexEntry entry : entries){
-                    String citeKey = entry.getCiteKey();
-                    if ((citeKey != null) && (citeKey.length() > 0)) {
-                        if (name.startsWith(citeKey)){
-                            result.get(entry).add(file);
-                            continue nextFile;
-                        }
-                    }
-                }
-            }
-		}
-		
-		return result;
-	}
-	
-	public static Set<File> findFiles(Collection<String> extensions, Collection<File> directories) {
-		Set<File> result = new HashSet<File>();
-		
-		for (File directory : directories){
-			result.addAll(findFiles(extensions, directory));
-		}
-		
-		return result;
-	}
-
-	private static Collection<? extends File> findFiles(Collection<String> extensions, File directory) {
-		Set<File> result = new HashSet<File>();
-		
-		File[] children = directory.listFiles();
-		if (children == null)
-			return result; // No permission?
-
-		for (File child : children){
-			if (child.isDirectory()) {
-				result.addAll(findFiles(extensions, child));
-			} else {
-				
-				String extension = getFileExtension(child);
-					
-				if (extension != null){
-					if (extensions.contains(extension)){
-						result.add(child);
-					}
-				}
-			}
-		}
-		
-		return result;
-	}
-
-	/**
-	 * Returns the extension of a file or null if the file does not have one (no . in name).
-	 * 
-	 * @param file
-	 * 
-	 * @return The extension, trimmed and in lowercase.
-	 */
-	public static String getFileExtension(File file) {
-		String name = file.getName();
-		int pos = name.lastIndexOf('.');
-		String extension = ((pos >= 0) && (pos < name.length() - 1)) ? name.substring(pos + 1)
-			.trim().toLowerCase() : null;
-		return extension;
-	}
-
-	/**
-	 * New version of findPdf that uses findFiles.
-	 * 
-	 * The search pattern will be read from the preferences.
-	 * 
-	 * The [extension]-tags in this pattern will be replace by the given
-	 * extension parameter.
-	 * 
-	 */
-	public static String findPdf(BibtexEntry entry, String extension, String directory) {
-		return findPdf(entry, extension, new String[] { directory });
-	}
-
-	/**
-	 * Convenience method for findPDF. Can search multiple PDF directories.
-	 */
-	public static String findPdf(BibtexEntry entry, String extension, String[] directories) {
-
-		String regularExpression;
-		if (Globals.prefs.getBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY)) {
-			regularExpression = Globals.prefs.get(JabRefPreferences.REG_EXP_SEARCH_EXPRESSION_KEY);
-		} else {
-			regularExpression = Globals.prefs
-				.get(JabRefPreferences.DEFAULT_REG_EXP_SEARCH_EXPRESSION_KEY);
-		}
-		regularExpression = regularExpression.replaceAll("\\[extension\\]", extension);
-
-		return findFile(entry, null, directories, regularExpression, true);
-	}
-
-    /**
-     * Convenience menthod for findPDF. Searches for a file of the given type.
-     * @param entry The BibtexEntry to search for a link for.
-     * @param fileType The file type to search for.
-     * @return The link to the file found, or null if not found.
-     */
-    public static String findFile(BibtexEntry entry, ExternalFileType fileType, List<String> extraDirs) {
-
-        List<String> dirs = new ArrayList<String>();
-        dirs.addAll(extraDirs);
-        if (Globals.prefs.hasKey(fileType.getExtension()+"Directory")) {
-            dirs.add(Globals.prefs.get(fileType.getExtension()+"Directory"));
-        }
-        String [] directories = dirs.toArray(new String[dirs.size()]);
-        return findPdf(entry, fileType.getExtension(), directories);
-    }
-
-    /**
-	 * Searches the given directory and file name pattern for a file for the
-	 * bibtexentry.
-	 *
-	 * Used to fix:
-	 *
-	 * http://sourceforge.net/tracker/index.php?func=detail&aid=1503410&group_id=92314&atid=600309
-	 *
-	 * Requirements:
-	 *  - Be able to find the associated PDF in a set of given directories.
-	 *  - Be able to return a relative path or absolute path.
-	 *  - Be fast.
-	 *  - Allow for flexible naming schemes in the PDFs.
-	 *
-	 * Syntax scheme for file:
-	 * <ul>
-	 * <li>* Any subDir</li>
-	 * <li>** Any subDir (recursiv)</li>
-	 * <li>[key] Key from bibtex file and database</li>
-	 * <li>.* Anything else is taken to be a Regular expression.</li>
-	 * </ul>
-	 *
-	 * @param entry
-	 *            non-null
-	 * @param database
-	 *            non-null
-	 * @param directory
-	 *            A set of root directories to start the search from. Paths are
-	 *            returned relative to these directories if relative is set to
-	 *            true. These directories will not be expanded or anything. Use
-	 *            the file attribute for this.
-	 * @param file
-	 *            non-null
-	 *
-	 * @param relative
-	 *            whether to return relative file paths or absolute ones
-	 *
-	 * @return Will return the first file found to match the given criteria or
-	 *         null if none was found.
-	 */
-	public static String findFile(BibtexEntry entry, BibtexDatabase database, String[] directory,
-		String file, boolean relative) {
-
-		for (int i = 0; i < directory.length; i++) {
-			String result = findFile(entry, database, directory[i], file, relative);
-			if (result != null) {
-				return result;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Removes optional square brackets from the string s
-	 *
-	 * @param s
-	 * @return
-	 */
-	public static String stripBrackets(String s) {
-		int beginIndex = (s.startsWith("[") ? 1 : 0);
-		int endIndex = (s.endsWith("]") ? s.length() - 1 : s.length());
-		return s.substring(beginIndex, endIndex);
-	}
-
-	public static ArrayList<String[]> parseMethodsCalls(String calls) throws RuntimeException {
-
-		ArrayList<String[]> result = new ArrayList<String[]>();
-
-		char[] c = calls.toCharArray();
-
-		int i = 0;
-
-		while (i < c.length) {
-
-			int start = i;
-			if (Character.isJavaIdentifierStart(c[i])) {
-				i++;
-				while (i < c.length && (Character.isJavaIdentifierPart(c[i]) || c[i] == '.')) {
-					i++;
-				}
-				if (i < c.length && c[i] == '(') {
-
-					String method = calls.substring(start, i);
-
-					// Skip the brace
-					i++;
-
-					if (i < c.length){
-						if (c[i] == '"'){
-							// Parameter is in format "xxx"
-
-							// Skip "
-							i++;
-
-							int startParam = i;
-							i++;
-		                    boolean escaped = false;
-							while (i + 1 < c.length &&
-                                    !(!escaped && c[i] == '"' && c[i + 1] == ')')) {
-                                if (c[i] == '\\') {
-                                    escaped = !escaped;
-                                }
-                                else
-                                    escaped = false;
-                                i++;
-
-                            }
-
-							String param = calls.substring(startParam, i);
-		
-							result.add(new String[] { method, param });
-						} else {
-							// Parameter is in format xxx
-
-							int startParam = i;
-
-							while (i < c.length && c[i] != ')') {
-								i++;
-							}
-
-							String param = calls.substring(startParam, i);
-
-							result.add(new String[] { method, param });
-
-
-						}
-					} else {
-						// Incorrecly terminated open brace
-						result.add(new String[] { method });
-					}
-				} else {
-					String method = calls.substring(start, i);
-					result.add(new String[] { method });
-				}
-			}
-			i++;
-		}
-
-		return result;
-	}
-
-	/**
-	 * Accepts a string like [author:lower] or [title:abbr] or [auth],
-	 * whereas the first part signifies the bibtex-field to get, or the key generator
-     * field marker to use, while the others are the modifiers that will be applied.
-	 *
-	 * @param fieldAndFormat
-	 * @param entry
-	 * @param database
-	 * @return
-	 */
-	public static String getFieldAndFormat(String fieldAndFormat, BibtexEntry entry,
-		BibtexDatabase database) {
-
-		fieldAndFormat = stripBrackets(fieldAndFormat);
-
-		int colon = fieldAndFormat.indexOf(':');
-
-		String beforeColon, afterColon;
-		if (colon == -1) {
-			beforeColon = fieldAndFormat;
-			afterColon = null;
-		} else {
-			beforeColon = fieldAndFormat.substring(0, colon);
-			afterColon = fieldAndFormat.substring(colon + 1);
-		}
-		beforeColon = beforeColon.trim();
-
-		if (beforeColon.length() == 0) {
-			return null;
-		}
-
-		String fieldValue = BibtexDatabase.getResolvedField(beforeColon, entry, database);
-
-        // If no field value was found, try to interpret it as a key generator field marker:
-        if (fieldValue == null)
-            fieldValue =  LabelPatternUtil.makeLabel(entry, beforeColon);
-
-		if (fieldValue == null)
-			return null;
-
-		if (afterColon == null || afterColon.length() == 0)
-			return fieldValue;
-
-        String[] parts = afterColon.split(":");
-        fieldValue = LabelPatternUtil.applyModifiers(fieldValue, parts, 0);
-        
-		return fieldValue;
-	}
-
-	/**
-	 * Convenience function for absolute search.
-	 *
-	 * Uses findFile(BibtexEntry, BibtexDatabase, (String)null, String, false).
-	 */
-	public static String findFile(BibtexEntry entry, BibtexDatabase database, String file) {
-		return findFile(entry, database, (String) null, file, false);
-	}
-
-	/**
-	 * Internal Version of findFile, which also accepts a current directory to
-	 * base the search on.
-	 *
-	 */
-	public static String findFile(BibtexEntry entry, BibtexDatabase database, String directory,
-		String file, boolean relative) {
-
-		File root;
-		if (directory == null) {
-			root = new File(".");
-		} else {
-			root = new File(directory);
-		}
-		if (!root.exists())
-			return null;
-
-		String found = findFile(entry, database, root, file);
-
-		if (directory == null || !relative) {
-			return found;
-		}
-
-		if (found != null) {
-			try {
-				/**
-				 * [ 1601651 ] PDF subdirectory - missing first character
-				 *
-				 * http://sourceforge.net/tracker/index.php?func=detail&aid=1601651&group_id=92314&atid=600306
-				 */
-                // Changed by M. Alver 2007.01.04:
-                // Remove first character if it is a directory separator character:
-                String tmp = found.substring(root.getCanonicalPath().length());
-                if ((tmp.length() > 1) && (tmp.charAt(0) == File.separatorChar))
-                    tmp = tmp.substring(1);
-                return tmp;
-                //return found.substring(root.getCanonicalPath().length());
-			} catch (IOException e) {
-				return null;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * The actual work-horse. Will find absolute filepaths starting from the
-	 * given directory using the given regular expression string for search.
-	 */
-	protected static String findFile(BibtexEntry entry, BibtexDatabase database, File directory,
-		String file) {
-
-		if (file.startsWith("/")) {
-			directory = new File(".");
-			file = file.substring(1);
-		}
-
-		// Escape handling...
-		Matcher m = Pattern.compile("([^\\\\])\\\\([^\\\\])").matcher(file);
-		StringBuffer s = new StringBuffer();
-		while (m.find()) {
-			m.appendReplacement(s, m.group(1) + "/" + m.group(2));
-		}
-		m.appendTail(s);
-		file = s.toString();
-		String[] fileParts = file.split("/");
-
-		if (fileParts.length == 0)
-			return null;
-
-		if (fileParts.length > 1) {
-
-			for (int i = 0; i < fileParts.length - 1; i++) {
-
-				String dirToProcess = fileParts[i];
-
-				dirToProcess = expandBrackets(dirToProcess, entry, database);
-
-				if (dirToProcess.matches("^.:$")) { // Windows Drive Letter
-					directory = new File(dirToProcess + "/");
-					continue;
-				}
-				if (dirToProcess.equals(".")) { // Stay in current directory
-					continue;
-				}
-				if (dirToProcess.equals("..")) {
-					directory = new File(directory.getParent());
-					continue;
-				}
-				if (dirToProcess.equals("*")) { // Do for all direct subdirs
-
-					File[] subDirs = directory.listFiles();
-					if (subDirs == null)
-						return null; // No permission?
-
-					String restOfFileString = join(fileParts, "/", i + 1, fileParts.length);
-
-					for (int sub = 0; sub < subDirs.length; sub++) {
-						if (subDirs[sub].isDirectory()) {
-							String result = findFile(entry, database, subDirs[sub],
-								restOfFileString);
-							if (result != null)
-								return result;
-						}
-					}
-					return null;
-				}
-				// Do for all direct and indirect subdirs
-				if (dirToProcess.equals("**")) {
-					List<File> toDo = new LinkedList<File>();
-					toDo.add(directory);
-
-					String restOfFileString = join(fileParts, "/", i + 1, fileParts.length);
-
-					// Before checking the subdirs, we first check the current
-					// dir
-					String result = findFile(entry, database, directory, restOfFileString);
-					if (result != null)
-						return result;
-
-					while (!toDo.isEmpty()) {
-
-						// Get all subdirs of each of the elements found in toDo
-						File[] subDirs = toDo.remove(0).listFiles();
-						if (subDirs == null) // No permission?
-							continue;
-
-						toDo.addAll(Arrays.asList(subDirs));
-
-						for (int sub = 0; sub < subDirs.length; sub++) {
-							if (!subDirs[sub].isDirectory())
-								continue;
-							result = findFile(entry, database, subDirs[sub], restOfFileString);
-							if (result != null)
-								return result;
-						}
-					}
-					// We already did the currentDirectory
-					return null;
-				}
-
-				final Pattern toMatch = Pattern
-					.compile(dirToProcess.replaceAll("\\\\\\\\", "\\\\"));
-
-				File[] matches = directory.listFiles(new FilenameFilter() {
-					public boolean accept(File arg0, String arg1) {
-						return toMatch.matcher(arg1).matches();
-					}
-				});
-				if (matches == null || matches.length == 0)
-					return null;
-
-				directory = matches[0];
-
-				if (!directory.exists())
-					return null;
-
-			} // End process directory information
-		}
-		// Last step check if the given file can be found in this directory
-		String filenameToLookFor = expandBrackets(fileParts[fileParts.length - 1], entry, database);
-
-		final Pattern toMatch = Pattern.compile("^"
-			+ filenameToLookFor.replaceAll("\\\\\\\\", "\\\\") + "$");
-
-		File[] matches = directory.listFiles(new FilenameFilter() {
-			public boolean accept(File arg0, String arg1) {
-				return toMatch.matcher(arg1).matches();
-			}
-		});
-		if (matches == null || matches.length == 0)
-			return null;
-
-		try {
-			return matches[0].getCanonicalPath();
-		} catch (IOException e) {
-			return null;
-		}
-	}
-
-	static Pattern squareBracketsPattern = Pattern.compile("\\[.*?\\]");
-
-	/**
-	 * Takes a string that contains bracketed expression and expands each of
-	 * these using getFieldAndFormat.
-	 *
-	 * Unknown Bracket expressions are silently dropped.
-	 *
-	 * @param bracketString
-	 * @param entry
-	 * @param database
-	 * @return
-	 */
-	public static String expandBrackets(String bracketString, BibtexEntry entry,
-		BibtexDatabase database) {
-		Matcher m = squareBracketsPattern.matcher(bracketString);
-		StringBuffer s = new StringBuffer();
-		while (m.find()) {
-			String replacement = getFieldAndFormat(m.group(), entry, database);
-			if (replacement == null)
-				replacement = "";
-			m.appendReplacement(s, replacement);
-		}
-		m.appendTail(s);
-
-		return s.toString();
-	}
-
-	/**
-	 * Concatenate all strings in the array from index 'from' to 'to' (excluding
-	 * to) with the given separator.
-	 * 
-	 * Example:
-	 * 
-	 * String[] s = "ab/cd/ed".split("/"); join(s, "\\", 0, s.length) ->
-	 * "ab\\cd\\ed"
-	 * 
-	 * @param strings
-	 * @param separator
-	 * @param from
-	 * @param to
-	 *            Excluding strings[to]
-	 * @return
-	 */
-	public static String join(String[] strings, String separator, int from, int to) {
-		if (strings.length == 0 || from >= to)
-			return "";
-		
-		from = Math.max(from, 0);
-		to = Math.min(strings.length, to);
-
-		StringBuffer sb = new StringBuffer();
-		for (int i = from; i < to - 1; i++) {
-			sb.append(strings[i]).append(separator);
-		}
-		return sb.append(strings[to - 1]).toString();
-	}
-
-   /**
-    * Converts a relative filename to an absolute one, if necessary. Returns
-    * null if the file does not exist.<br/>
-    * 
-    * Uses <ul>
-    * <li>the default directory associated with the extension of the file</li>
-    * <li>the standard file directory</li>
-    * <li>the directory of the bib file</li>
-    * </ul>
-    * 
-    * @param metaData
-    *            The MetaData for the database this file belongs to.
-    * @param name
-    *            The file name, may also be a relative path to the file
-    */
-	public static File expandFilename(final MetaData metaData, String name) {
-        int pos = name.lastIndexOf('.');
-        String extension = ((pos >= 0) && (pos < name.length() - 1)) ? name
-                .substring(pos + 1).trim().toLowerCase() : null;
-        // Find the default directory for this field type, if any:
-        String[] dir = metaData.getFileDirectory(extension);
-        // Include the standard "file" directory:
-        String[] fileDir = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
-        // Include the directory of the bib file:
-        ArrayList<String> al = new ArrayList<String>();
-        for (int i = 0; i < dir.length; i++)
-            if (!al.contains(dir[i]))
-                al.add(dir[i]);
-        for (int i = 0; i < fileDir.length; i++)
-            if (!al.contains(fileDir[i]))
-                al.add(fileDir[i]);
-        String[] dirs = al.toArray(new String[al.size()]);
-        return expandFilename(name, dirs);
-	}
-
-	/**
-	 * Converts a relative filename to an absolute one, if necessary. Returns
-	 * null if the file does not exist.
-	 * 
-	 * Will look in each of the given dirs starting from the beginning and
-	 * returning the first found file to match if any.
-	 */
-	public static File expandFilename(String name, String[] dir) {
-
-		for (int i = 0; i < dir.length; i++) {
-            if (dir[i] != null) {
-                File result = expandFilename(name, dir[i]);
-                if (result != null) {
-                    return result;
-                }
-            }
-        }
-
-		return null;
-	}
-	
-	/**
-	 * Converts a relative filename to an absolute one, if necessary. Returns
-	 * null if the file does not exist.
-	 */
-	public static File expandFilename(String name, String dir) {
-
-		File file = null;
-		if (name == null || name.length() == 0)
-			return null;
-		else {
-			file = new File(name);
-		}
-
-		if (!file.exists() && (dir != null)) {
-            if (dir.endsWith(System.getProperty("file.separator")))
-                name = dir + name;
-            else
-                name = dir + System.getProperty("file.separator") + name;
-
-            // System.out.println("expanded to: "+name);
-            // if (name.startsWith("ftp"))
-
-            file = new File(name);
-
-            if (file.exists())
-                return file;
-            // Ok, try to fix / and \ problems:
-            if (Globals.ON_WIN) {
-                // workaround for catching Java bug in regexp replacer
-                // and, why, why, why ... I don't get it - wegner 2006/01/22
-                try {
-                    name = name.replaceAll("/", "\\\\");
-                } catch (java.lang.StringIndexOutOfBoundsException exc) {
-                    System.err
-                        .println("An internal Java error was caused by the entry " +
-                            "\"" + name + "\"");
-                }
-            } else
-                name = name.replaceAll("\\\\", "/");
-            // System.out.println("expandFilename: "+name);
-            file = new File(name);
-            if (!file.exists())
-                file = null;
-        }
-        return file;
-    }
-	
-	/**
-	 * Converts an absolute filename to a relative one, if necessary.
-	 * Returns the parameter fileName itself if no shortening is possible 
-	 * 
-	 * This method works correctly only if dirs are sorted decent in their length
-	 * i.e. /home/user/literature/important before /home/user/literature 
-	 * 
-	 * @param dirs: directories to check. 
-	 */
-	public static File shortenFileName(File fileName, String[] dirs) {
-		if (fileName == null || fileName.length() == 0)
-			return fileName;
-		if (!fileName.isAbsolute() || (dirs == null)) 
-			return fileName;
-		
-		for (String dir: dirs) {
-			if (dir!=null) {
-				File result = shortenFileName(fileName, dir);
-				if ((result != null) && (!result.equals(fileName)))
-					return result;
-			}
-		}
-		return fileName;
-	}
-
-	public static File shortenFileName(File fileName, String dir) {
-		if (fileName == null || fileName.length() == 0)
-			return fileName;
-		if (!fileName.isAbsolute() || dir == null) 
-			return fileName;
-
-		String longName;
-        if (Globals.ON_WIN) {
-        	// case-insensitive matching on Windows
-        	longName = fileName.toString().toLowerCase();
-        	dir = dir.toLowerCase();
-        } else {
-        	longName = fileName.toString();
-        }
-        
-		if (!dir.endsWith(System.getProperty("file.separator")))
-			dir = dir.concat(System.getProperty("file.separator"));
-
-		if (longName.toString().startsWith(dir)) {
-			// result is based on original name, not on lower-cased name
-			String newName = fileName.toString().substring(dir.length());
-			return new File(newName);
-		} else {
-			return fileName;
-		}
-	}
-
-
-	private static String findInDir(String key, String dir, OpenFileFilter off, int count) {
-        if (count > 20)
-            return null; // Make sure an infinite loop doesn't occur.
-        File f = new File(dir);
-		File[] all = f.listFiles();
-		if (all == null)
-			return null; // An error occured. We may not have
-		// permission to list the files.
-
-		int numFiles = all.length;
-
-		for (int i = 0; i < numFiles; i++) {
-			File curFile = all[i];
-
-			if (curFile.isFile()) {
-				String name = curFile.getName();
-				if (name.startsWith(key + ".") && off.accept(name))
-					return curFile.getPath();
-
-			} else if (curFile.isDirectory()) {
-				String found = findInDir(key, curFile.getPath(), off, count+1);
-				if (found != null)
-					return found;
-			}
-		}
-		return null;
-	}
-
-    /**
-     * This methods assures all words in the given entry are recorded in their
-     * respective Completers, if any.
-     */
-    public static void updateCompletersForEntry(HashMap<String, AbstractAutoCompleter> autoCompleters, BibtexEntry bibtexEntry) {
-    	for (Map.Entry<String, AbstractAutoCompleter> entry : autoCompleters.entrySet()){    		
-            AbstractAutoCompleter comp = entry.getValue();
-            comp.addBibtexEntry(bibtexEntry);
-        }
-    }
-
-
-	/**
-	 * Sets empty or non-existing owner fields of bibtex entries inside a List
-	 * to a specified default value. Timestamp field is also set. Preferences
-	 * are checked to see if these options are enabled.
-	 * 
-	 * @param bibs
-	 *            List of bibtex entries
-	 */
-	public static void setAutomaticFields(Collection<BibtexEntry> bibs,
-             boolean overwriteOwner, boolean overwriteTimestamp, boolean markEntries) {
-
-
-		String timeStampField = Globals.prefs.get("timeStampField");
-
-		String defaultOwner = Globals.prefs.get("defaultOwner");
-		String timestamp = easyDateFormat();
-		boolean globalSetOwner = Globals.prefs.getBoolean("useOwner"),
-                globalSetTimeStamp = Globals.prefs.getBoolean("useTimeStamp");
-
-        // Do not need to do anything if all options are disabled
-		if (!(globalSetOwner || globalSetTimeStamp || markEntries))
-			return;
-
-        // Iterate through all entries
-		for (BibtexEntry curEntry : bibs){
-            boolean setOwner = globalSetOwner &&
-                (overwriteOwner || (curEntry.getField(BibtexFields.OWNER)==null));
-            boolean setTimeStamp = globalSetTimeStamp &&
-                (overwriteTimestamp || (curEntry.getField(timeStampField)==null));
-            setAutomaticFields(curEntry, setOwner, defaultOwner, setTimeStamp, timeStampField,
-				timestamp);
-            if (markEntries)
-                Util.markEntry(curEntry, IMPORT_MARK_LEVEL, false, new NamedCompound(""));
-		}
-
-	}
-
-	/**
-	 * Sets empty or non-existing owner fields of a bibtex entry to a specified
-	 * default value. Timestamp field is also set. Preferences are checked to
-	 * see if these options are enabled.
-	 * 
-	 * @param entry
-	 *            The entry to set fields for.
-     * @param overwriteOwner
-     *              Indicates whether owner should be set if it is already set.
-     * @param overwriteTimestamp
-     *              Indicates whether timestamp should be set if it is already set.
-	 */
-	public static void setAutomaticFields(BibtexEntry entry, boolean overwriteOwner,
-                                          boolean overwriteTimestamp) {
-		String defaultOwner = Globals.prefs.get("defaultOwner");
-		String timestamp = easyDateFormat();
-        String timeStampField = Globals.prefs.get("timeStampField");
-        boolean setOwner = Globals.prefs.getBoolean("useOwner") &&
-            (overwriteOwner || (entry.getField(BibtexFields.OWNER)==null));
-        boolean setTimeStamp = Globals.prefs.getBoolean("useTimeStamp") &&
-            (overwriteTimestamp || (entry.getField(timeStampField)==null));
-
-		setAutomaticFields(entry, setOwner, defaultOwner, setTimeStamp, timeStampField, timestamp);
-	}
-
-	private static void setAutomaticFields(BibtexEntry entry, boolean setOwner, String owner,
-		boolean setTimeStamp, String timeStampField, String timeStamp) {
-
-		// Set owner field if this option is enabled:
-		if (setOwner) {
-			// No or empty owner field?
-			// if (entry.getField(Globals.OWNER) == null
-			// || ((String) entry.getField(Globals.OWNER)).length() == 0) {
-			// Set owner field to default value
-			entry.setField(BibtexFields.OWNER, owner);
-			// }
-		}
-
-		if (setTimeStamp)
-			entry.setField(timeStampField, timeStamp);
-	}
-
-	/**
-	 * Copies a file.
-	 * 
-	 * @param source
-	 *            File Source file
-	 * @param dest
-	 *            File Destination file
-	 * @param deleteIfExists
-	 *            boolean Determines whether the copy goes on even if the file
-	 *            exists.
-	 * @throws IOException
-	 * @return boolean Whether the copy succeeded, or was stopped due to the
-	 *         file already existing.
-	 */
-	public static boolean copyFile(File source, File dest, boolean deleteIfExists)
-		throws IOException {
-
-		BufferedInputStream in = null;
-		BufferedOutputStream out = null;
-		try {
-			// Check if the file already exists.
-			if (dest.exists()) {
-				if (!deleteIfExists)
-					return false;
-				// else dest.delete();
-			}
-
-			in = new BufferedInputStream(new FileInputStream(source));
-			out = new BufferedOutputStream(new FileOutputStream(dest));
-			int el;
-			// int tell = 0;
-			while ((el = in.read()) >= 0) {
-				out.write(el);
-			}
-		} catch (IOException ex) {
-			throw ex;
-		} finally {
-			if (out != null) {
-				out.flush();
-				out.close();
-			}
-			if (in != null)
-				in.close();
-		}
-		return true;
-	}
-
-	/**
-	 * This method is called at startup, and makes necessary adaptations to
-	 * preferences for users from an earlier version of Jabref.
-	 */
-	public static void performCompatibilityUpdate() {
-
-		// Make sure "abstract" is not in General fields, because
-		// Jabref 1.55 moves the abstract to its own tab.
-		String genFields = Globals.prefs.get("generalFields");
-		// pr(genFields+"\t"+genFields.indexOf("abstract"));
-		if (genFields.indexOf("abstract") >= 0) {
-			// pr(genFields+"\t"+genFields.indexOf("abstract"));
-			String newGen;
-			if (genFields.equals("abstract"))
-				newGen = "";
-			else if (genFields.indexOf(";abstract;") >= 0) {
-				newGen = genFields.replaceAll(";abstract;", ";");
-			} else if (genFields.indexOf("abstract;") == 0) {
-				newGen = genFields.replaceAll("abstract;", "");
-			} else if (genFields.indexOf(";abstract") == genFields.length() - 9) {
-				newGen = genFields.replaceAll(";abstract", "");
-			} else
-				newGen = genFields;
-			// pr(newGen);
-			Globals.prefs.put("generalFields", newGen);
-		}
-
-	}
-
-    /**
-     * Collect file links from the given set of fields, and add them to the list contained
-     * in the field GUIGlobals.FILE_FIELD.
-     * @param database The database to modify.
-     * @param fields The fields to find links in.
-     * @return A CompoundEdit specifying the undo operation for the whole operation.
-     */
-    public static NamedCompound upgradePdfPsToFile(BibtexDatabase database, String[] fields) {
-    	return upgradePdfPsToFile(database.getEntryMap().values(), fields);
-    }
-
-    /**
-     * Collect file links from the given set of fields, and add them to the list contained
-     * in the field GUIGlobals.FILE_FIELD.
-     * @param entries The entries to modify.
-     * @param fields The fields to find links in.
-     * @return A CompoundEdit specifying the undo operation for the whole operation.
-     */
-    public static NamedCompound upgradePdfPsToFile(Collection<BibtexEntry> entries, String[] fields) {
-        NamedCompound ce = new NamedCompound(Globals.lang("Move external links to 'file' field"));
-        
-        for (BibtexEntry entry : entries){
-            FileListTableModel tableModel = new FileListTableModel();
-            // If there are already links in the file field, keep those on top:
-            String oldFileContent = entry.getField(GUIGlobals.FILE_FIELD);
-            if (oldFileContent != null) {
-                tableModel.setContent(oldFileContent);
-            }
-            int oldRowCount = tableModel.getRowCount();
-            for (int j = 0; j < fields.length; j++) {
-                String o = entry.getField(fields[j]);
-                if (o != null) {
-                    String s = o;
-                    if (s.trim().length() > 0) {
-                        File f = new File(s);
-                        FileListEntry flEntry = new FileListEntry(f.getName(), s,
-                                Globals.prefs.getExternalFileTypeByExt(fields[j]));
-                        tableModel.addEntry(tableModel.getRowCount(), flEntry);
-                        
-                        entry.clearField(fields[j]);
-                        ce.addEdit(new UndoableFieldChange(entry, fields[j], o, null));
-                    }
-                }
-            }
-            if (tableModel.getRowCount() != oldRowCount) {
-                String newValue = tableModel.getStringRepresentation();
-                entry.setField(GUIGlobals.FILE_FIELD, newValue);
-                ce.addEdit(new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD, oldFileContent, newValue));
-            }
-        }
-        ce.end();
-        return ce;
-    }
-
-    // -------------------------------------------------------------------------------
-
-	/**
-	 * extends the filename with a default Extension, if no Extension '.x' could
-	 * be found
-	 */
-	public static String getCorrectFileName(String orgName, String defaultExtension) {
-		if (orgName == null)
-			return "";
-
-		String back = orgName;
-		int t = orgName.indexOf(".", 1); // hidden files Linux/Unix (?)
-		if (t < 1)
-			back = back + "." + defaultExtension;
-
-		return back;
-	}
-
-	/**
-	 * Quotes each and every character, e.g. '!' as !. Used for verbatim
-	 * display of arbitrary strings that may contain HTML entities.
-	 */
-	public static String quoteForHTML(String s) {
-		StringBuffer sb = new StringBuffer();
-		for (int i = 0; i < s.length(); ++i) {
-			sb.append("&#" + (int) s.charAt(i) + ";");
-		}
-		return sb.toString();
-	}
-
-	public static String quote(String s, String specials, char quoteChar) {
-		return quote(s, specials, quoteChar, 0);
-	}
-
-	/**
-	 * Quote special characters.
-	 * 
-	 * @param s
-	 *            The String which may contain special characters.
-	 * @param specials
-	 *            A String containing all special characters except the quoting
-	 *            character itself, which is automatically quoted.
-	 * @param quoteChar
-	 *            The quoting character.
-	 * @param linewrap
-	 *            The number of characters after which a linebreak is inserted
-	 *            (this linebreak is undone by unquote()). Set to 0 to disable.
-	 * @return A String with every special character (including the quoting
-	 *         character itself) quoted.
-	 */
-	public static String quote(String s, String specials, char quoteChar, int linewrap) {
-		StringBuffer sb = new StringBuffer();
-		char c;
-		int linelength = 0;
-		boolean isSpecial;
-		for (int i = 0; i < s.length(); ++i) {
-			c = s.charAt(i);
-			isSpecial = specials.indexOf(c) >= 0 || c == quoteChar;
-			// linebreak?
-			if (linewrap > 0
-				&& (++linelength >= linewrap || (isSpecial && linelength >= linewrap - 1))) {
-				sb.append(quoteChar);
-				sb.append('\n');
-				linelength = 0;
-			}
-			if (isSpecial) {
-				sb.append(quoteChar);
-				++linelength;
-			}
-			sb.append(c);
-		}
-		return sb.toString();
-	}
-
-	/**
-	 * Unquote special characters.
-	 * 
-	 * @param s
-	 *            The String which may contain quoted special characters.
-	 * @param quoteChar
-	 *            The quoting character.
-	 * @return A String with all quoted characters unquoted.
-	 */
-	public static String unquote(String s, char quoteChar) {
-		StringBuffer sb = new StringBuffer();
-		char c;
-		boolean quoted = false;
-		for (int i = 0; i < s.length(); ++i) {
-			c = s.charAt(i);
-			if (quoted) { // append literally...
-				if (c != '\n') // ...unless newline
-					sb.append(c);
-				quoted = false;
-			} else if (c != quoteChar) {
-				sb.append(c);
-			} else { // quote char
-				quoted = true;
-			}
-		}
-		return sb.toString();
-	}
-
-	/**
-	 * Quote all regular expression meta characters in s, in order to search for
-	 * s literally.
-	 */
-	public static String quoteMeta(String s) {
-		// work around a bug: trailing backslashes have to be quoted
-		// individually
-		int i = s.length() - 1;
-		StringBuffer bs = new StringBuffer("");
-		while ((i >= 0) && (s.charAt(i) == '\\')) {
-			--i;
-			bs.append("\\\\");
-		}
-		s = s.substring(0, i + 1);
-		return "\\Q" + s.replaceAll("\\\\E", "\\\\E\\\\\\\\E\\\\Q") + "\\E" + bs.toString();
-	}
-
-	/**
-	 * This method "tidies" up e.g. a keyword string, by alphabetizing the words
-	 * and removing all duplicates.
-	 *
-	 * Currently not used anywhere
-	 */
-	public static String sortWordsAndRemoveDuplicates(String text) {
-		ArrayList<String> words = getSeparatedKeywords(text);
-		// by adding the words to a set, they are automatically sorted
-		TreeSet<String> set = new TreeSet<String>(words);
-		StringBuffer sb = new StringBuffer();
-		for (Iterator<String> i = set.iterator(); i.hasNext();) {
-			sb.append(i.next());
-			sb.append(", ");
-		}
-		if (sb.length() > 2)
-			sb.delete(sb.length() - 2, sb.length());
-		String result = sb.toString();
-		return result.length() > 2 ? result : "";
-	}
-
-	/**
-	 * Warns the user of undesired side effects of an explicit
-	 * assignment/removal of entries to/from this group. Currently there are
-	 * four types of groups: AllEntriesGroup, SearchGroup - do not support
-	 * explicit assignment. ExplicitGroup - never modifies entries. KeywordGroup -
-	 * only this modifies entries upon assignment/removal. Modifications are
-	 * acceptable unless they affect a standard field (such as "author") besides
-	 * the "keywords" field.
-	 * 
-	 * @param parent
-	 *            The Component used as a parent when displaying a confirmation
-	 *            dialog.
-	 * @return true if the assignment has no undesired side effects, or the user
-	 *         chose to perform it anyway. false otherwise (this indicates that
-	 *         the user has aborted the assignment).
-	 */
-	public static boolean warnAssignmentSideEffects(AbstractGroup[] groups, BibtexEntry[] entries,
-		BibtexDatabase db, Component parent) {
-		Vector<String> affectedFields = new Vector<String>();
-		for (int k = 0; k < groups.length; ++k) {
-			if (groups[k] instanceof KeywordGroup) {
-				KeywordGroup kg = (KeywordGroup) groups[k];
-				String field = kg.getSearchField().toLowerCase();
-				if (field.equals("keywords"))
-					continue; // this is not undesired
-				for (int i = 0, len = BibtexFields.numberOfPublicFields(); i < len; ++i) {
-					if (field.equals(BibtexFields.getFieldName(i))) {
-						affectedFields.add(field);
-						break;
-					}
-				}
-			}
-		}
-		if (affectedFields.size() == 0)
-			return true; // no side effects
-
-		// show a warning, then return
-		StringBuffer message = // JZTODO lyrics...
-		new StringBuffer("This action will modify the following field(s)\n"
-			+ "in at least one entry each:\n");
-		for (int i = 0; i < affectedFields.size(); ++i)
-			message.append(affectedFields.elementAt(i)).append("\n");
-		message.append("This could cause undesired changes to "
-			+ "your entries, so it is\nrecommended that you change the grouping field "
-			+ "in your group\ndefinition to \"keywords\" or a non-standard name."
-			+ "\n\nDo you still want to continue?");
-		int choice = JOptionPane.showConfirmDialog(parent, message, Globals.lang("Warning"),
-			JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
-		return choice != JOptionPane.NO_OPTION;
-
-		// if (groups instanceof KeywordGroup) {
-		// KeywordGroup kg = (KeywordGroup) groups;
-		// String field = kg.getSearchField().toLowerCase();
-		// if (field.equals("keywords"))
-		// return true; // this is not undesired
-		// for (int i = 0; i < GUIGlobals.ALL_FIELDS.length; ++i) {
-		// if (field.equals(GUIGlobals.ALL_FIELDS[i])) {
-		// // show a warning, then return
-		// String message = Globals // JZTODO lyrics...
-		// .lang(
-		// "This action will modify the \"%0\" field "
-		// + "of your entries.\nThis could cause undesired changes to "
-		// + "your entries, so it is\nrecommended that you change the grouping
-		// field "
-		// + "in your group\ndefinition to \"keywords\" or a non-standard name."
-		// + "\n\nDo you still want to continue?",
-		// field);
-		// int choice = JOptionPane.showConfirmDialog(parent, message,
-		// Globals.lang("Warning"), JOptionPane.YES_NO_OPTION,
-		// JOptionPane.WARNING_MESSAGE);
-		// return choice != JOptionPane.NO_OPTION;
-		// }
-		// }
-		// }
-		// return true; // found no side effects
-	}
-
-	// ========================================================
-	// lot of abreviations in medline
-	// PKC etc convert to {PKC} ...
-	// ========================================================
-	static Pattern titleCapitalPattern = Pattern.compile("[A-Z]+");
-
-	/**
-	 * Wrap all uppercase letters, or sequences of uppercase letters, in curly
-	 * braces. Ignore letters within a pair of # character, as these are part of
-	 * a string label that should not be modified.
-	 * 
-	 * @param s
-	 *            The string to modify.
-	 * @return The resulting string after wrapping capitals.
-	 */
-	public static String putBracesAroundCapitals(String s) {
-
-		boolean inString = false, isBracing = false, escaped = false;
-		int inBrace = 0;
-		StringBuffer buf = new StringBuffer();
-		for (int i = 0; i < s.length(); i++) {
-			// Update variables based on special characters:
-			int c = s.charAt(i);
-			if (c == '{')
-				inBrace++;
-			else if (c == '}')
-				inBrace--;
-			else if (!escaped && (c == '#'))
-				inString = !inString;
-
-			// See if we should start bracing:
-			if ((inBrace == 0) && !isBracing && !inString && Character.isLetter((char) c)
-				&& Character.isUpperCase((char) c)) {
-
-				buf.append('{');
-				isBracing = true;
-			}
-
-			// See if we should close a brace set:
-			if (isBracing && !(Character.isLetter((char) c) && Character.isUpperCase((char) c))) {
-
-				buf.append('}');
-				isBracing = false;
-			}
-
-			// Add the current character:
-			buf.append((char) c);
-
-			// Check if we are entering an escape sequence:
-			if ((c == '\\') && !escaped)
-				escaped = true;
-			else
-				escaped = false;
-
-		}
-		// Check if we have an unclosed brace:
-		if (isBracing)
-			buf.append('}');
-
-		return buf.toString();
-
-		/*
-		 * if (s.length() == 0) return s; // Protect against ArrayIndexOutOf....
-		 * StringBuffer buf = new StringBuffer();
-		 * 
-		 * Matcher mcr = titleCapitalPattern.matcher(s.substring(1)); while
-		 * (mcr.find()) { String replaceStr = mcr.group();
-		 * mcr.appendReplacement(buf, "{" + replaceStr + "}"); }
-		 * mcr.appendTail(buf); return s.substring(0, 1) + buf.toString();
-		 */
-	}
-
-	static Pattern bracedTitleCapitalPattern = Pattern.compile("\\{[A-Z]+\\}");
-
-	/**
-	 * This method looks for occurences of capital letters enclosed in an
-	 * arbitrary number of pairs of braces, e.g. "{AB}" or "{{T}}". All of these
-	 * pairs of braces are removed.
-	 * 
-	 * @param s
-	 *            The String to analyze.
-	 * @return A new String with braces removed.
-	 */
-	public static String removeBracesAroundCapitals(String s) {
-		String previous = s;
-		while ((s = removeSingleBracesAroundCapitals(s)).length() < previous.length()) {
-			previous = s;
-		}
-		return s;
-	}
-
-	/**
-	 * This method looks for occurences of capital letters enclosed in one pair
-	 * of braces, e.g. "{AB}". All these are replaced by only the capitals in
-	 * between the braces.
-	 * 
-	 * @param s
-	 *            The String to analyze.
-	 * @return A new String with braces removed.
-	 */
-	public static String removeSingleBracesAroundCapitals(String s) {
-		Matcher mcr = bracedTitleCapitalPattern.matcher(s);
-		StringBuffer buf = new StringBuffer();
-		while (mcr.find()) {
-			String replaceStr = mcr.group();
-			mcr.appendReplacement(buf, replaceStr.substring(1, replaceStr.length() - 1));
-		}
-		mcr.appendTail(buf);
-		return buf.toString();
-	}
-
-	/**
-	 * This method looks up what kind of external binding is used for the given
-	 * field, and constructs on OpenFileFilter suitable for browsing for an
-	 * external file.
-	 * 
-	 * @param fieldName
-	 *            The BibTeX field in question.
-	 * @return The file filter.
-	 */
-	public static OpenFileFilter getFileFilterForField(String fieldName) {
-		String s = BibtexFields.getFieldExtras(fieldName);
-		final String ext = "." + fieldName.toLowerCase();
-		final OpenFileFilter off;
-		if (s.equals("browseDocZip"))
-			off = new OpenFileFilter(new String[] { ext, ext + ".gz", ext + ".bz2" });
-		else
-			off = new OpenFileFilter(new String[] { ext });
-		return off;
-	}
-
-	/**
-	 * This method can be used to display a "rich" error dialog which offers the
-	 * entire stack trace for an exception.
-	 * 
-	 * @param parent
-	 * @param e
-	 */
-	public static void showQuickErrorDialog(JFrame parent, String title, Exception e) {
-		// create and configure a text area - fill it with exception text.
-		final JPanel pan = new JPanel(), details = new JPanel();
-		final CardLayout crd = new CardLayout();
-		pan.setLayout(crd);
-		final JTextArea textArea = new JTextArea();
-		textArea.setFont(new Font("Sans-Serif", Font.PLAIN, 10));
-		textArea.setEditable(false);
-		StringWriter writer = new StringWriter();
-		e.printStackTrace(new PrintWriter(writer));
-		textArea.setText(writer.toString());
-		JLabel lab = new JLabel(e.getMessage());
-		JButton flip = new JButton(Globals.lang("Details"));
-
-		FormLayout layout = new FormLayout("left:pref", "");
-		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-		builder.append(lab);
-		builder.nextLine();
-		builder.append(Box.createVerticalGlue());
-		builder.nextLine();
-		builder.append(flip);
-		final JPanel simple = builder.getPanel();
-
-		// stuff it in a scrollpane with a controlled size.
-		JScrollPane scrollPane = new JScrollPane(textArea);
-		scrollPane.setPreferredSize(new Dimension(350, 150));
-		details.setLayout(new BorderLayout());
-		details.add(scrollPane, BorderLayout.CENTER);
-
-		flip.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent event) {
-				crd.show(pan, "details");
-			}
-		});
-		pan.add(simple, "simple");
-		pan.add(details, "details");
-		// pass the scrollpane to the joptionpane.
-		JOptionPane.showMessageDialog(parent, pan, title, JOptionPane.ERROR_MESSAGE);
-	}
-
-	public static String wrapHTML(String s, final int lineWidth) {
-		StringBuffer sb = new StringBuffer();
-		StringTokenizer tok = new StringTokenizer(s);
-		int charsLeft = lineWidth;
-		while (tok.hasMoreTokens()) {
-			String word = tok.nextToken();
-			if (charsLeft == lineWidth) { // fresh line
-				sb.append(word);
-				charsLeft -= word.length();
-				if (charsLeft <= 0) {
-					sb.append("<br>\n");
-					charsLeft = lineWidth;
-				}
-			} else { // continue previous line
-				if (charsLeft < word.length() + 1) {
-					sb.append("<br>\n");
-					sb.append(word);
-					if (word.length() >= lineWidth - 1) {
-						sb.append("<br>\n");
-						charsLeft = lineWidth;
-					} else {
-						sb.append(" ");
-						charsLeft = lineWidth - word.length() - 1;
-					}
-				} else {
-					sb.append(' ').append(word);
-					charsLeft -= word.length() + 1;
-				}
-			}
-		}
-		return sb.toString();
-	}
-
-	/**
-	 * Creates a String containing the current date (and possibly time),
-	 * formatted according to the format set in preferences under the key
-	 * "timeStampFormat".
-	 * 
-	 * @return The date string.
-	 */
-	public static String easyDateFormat() {
-		// Date today = new Date();
-		return easyDateFormat(new Date());
-	}
-
-	/**
-	 * Creates a readable Date string from the parameter date. The format is set
-	 * in preferences under the key "timeStampFormat".
-	 * 
-	 * @return The formatted date string.
-	 */
-	public static String easyDateFormat(Date date) {
-		// first use, create an instance
-		if (dateFormatter == null) {
-			String format = Globals.prefs.get("timeStampFormat");
-			dateFormatter = new SimpleDateFormat(format);
-		}
-		return dateFormatter.format(date);
-	}
-
-    public static void markEntry(BibtexEntry be, int markIncrement, boolean increment, NamedCompound ce) {
-		Object o = be.getField(BibtexFields.MARKED);
-        int prevMarkLevel = 0;
-        String newValue = null;
-		if (o != null) {
-            String s = o.toString();
-            int index = s.indexOf(Globals.prefs.WRAPPED_USERNAME);
-            if (index >= 0) {
-                // Already marked 1 for this user.
-                prevMarkLevel = 1;
-                newValue = s.substring(0, index)
-                    + s.substring(index+Globals.prefs.WRAPPED_USERNAME.length())
-                    + Globals.prefs.WRAPPED_USERNAME.substring(0,
-                        Globals.prefs.WRAPPED_USERNAME.length()-1)+":"+
-                        (increment ? Math.min(MAX_MARKING_LEVEL, prevMarkLevel+markIncrement)
-                                : markIncrement)+"]";
-            }
-            else {
-                Matcher m = markNumberPattern.matcher(s);
-                if (m.find()) {
-                    try {
-                        prevMarkLevel = Integer.parseInt(m.group(1));
-                        newValue = s.substring(0, m.start(1))+
-                                (increment ? Math.min(MAX_MARKING_LEVEL, prevMarkLevel+markIncrement)
-                                : markIncrement)+
-                                s.substring(m.end(1));
-                    } catch (NumberFormatException ex) {
-                        // Do nothing.
-                    }
-                }
-            }
-        }
-        if (newValue == null)
-            newValue = Globals.prefs.WRAPPED_USERNAME.substring(0,
-                Globals.prefs.WRAPPED_USERNAME.length()-1)+":"+markIncrement+"]";
-
-		ce.addEdit(new UndoableFieldChange(be, BibtexFields.MARKED, be
-			.getField(BibtexFields.MARKED), newValue));
-		be.setField(BibtexFields.MARKED, newValue);
-	}
-
-	public static void unmarkEntry(BibtexEntry be, boolean onlyMaxLevel,
-                                   BibtexDatabase database, NamedCompound ce) {
-		Object o = be.getField(BibtexFields.MARKED);
-		if (o != null) {
-			String s = o.toString();
-			if (s.equals("0")) {
-                if (!onlyMaxLevel) {
-                    unmarkOldStyle(be, database, ce);
-                }
-                return;
-			}
-            String newValue = null;
-            int index = s.indexOf(Globals.prefs.WRAPPED_USERNAME);
-            if (index >= 0) {
-                // Marked 1 for this user.
-                if (!onlyMaxLevel)
-                    newValue = s.substring(0, index)
-                        + s.substring(index+Globals.prefs.WRAPPED_USERNAME.length());
-                else return;
-            }
-            else {
-                Matcher m = markNumberPattern.matcher(s);
-                if (m.find()) {
-                    try {
-                        int prevMarkLevel = Integer.parseInt(m.group(1));
-                        if (!onlyMaxLevel || (prevMarkLevel == MARK_COLOR_LEVELS)) {
-                            if (prevMarkLevel > 1)
-                                newValue = s.substring(0, m.start(1))+
-                                        s.substring(m.end(1));
-                            else {
-                                String toRemove = Globals.prefs.WRAPPED_USERNAME.substring(0,
-                                    Globals.prefs.WRAPPED_USERNAME.length()-1)+":1]";
-                                index = s.indexOf(toRemove);
-                                if (index >= 0) {
-                                    newValue = s.substring(0, index)
-                                        + s.substring(index+toRemove.length());
-                                }
-                            }
-                        }
-                        else return;
-                    } catch (NumberFormatException ex) {
-                        // Do nothing.
-                    }
-                }
-            }
-
-			/*int piv = 0, hit;
-			StringBuffer sb = new StringBuffer();
-			while ((hit = s.indexOf(G047749118118
-			1110lobals.prefs.WRAPPED_USERNAME, piv)) >= 0) {
-				if (hit > 0)
-					sb.append(s.substring(piv, hit));
-				piv = hit + Globals.prefs.WRAPPED_USERNAME.length();
-			}
-			if (piv < s.length() - 1) {
-				sb.append(s.substring(piv));
-			}
-			String newVal = sb.length() > 0 ? sb.toString() : null;*/
-			ce.addEdit(new UndoableFieldChange(be, BibtexFields.MARKED, be
-				.getField(BibtexFields.MARKED), newValue));
-			be.setField(BibtexFields.MARKED, newValue);
-		}
-	}
-
-	/**
-	 * An entry is marked with a "0", not in the new style with user names. We
-	 * want to unmark it as transparently as possible. Since this shouldn't
-	 * happen too often, we do it by scanning the "owner" fields of the entire
-	 * database, collecting all user names. We then mark the entry for all users
-	 * except the current one. Thus only the user who unmarks will see that it
-	 * is unmarked, and we get rid of the old-style marking.
-	 * 
-	 * @param be
-	 * @param ce
-	 */
-	private static void unmarkOldStyle(BibtexEntry be, BibtexDatabase database, NamedCompound ce) {
-		TreeSet<Object> owners = new TreeSet<Object>();
-		for (BibtexEntry entry : database.getEntries()){
-			Object o = entry.getField(BibtexFields.OWNER);
-			if (o != null)
-				owners.add(o);
-			// System.out.println("Owner: "+entry.getField(Globals.OWNER));
-		}
-		owners.remove(Globals.prefs.get("defaultOwner"));
-		StringBuffer sb = new StringBuffer();
-		for (Iterator<Object> i = owners.iterator(); i.hasNext();) {
-			sb.append('[');
-			sb.append(i.next().toString());
-			sb.append(']');
-		}
-		String newVal = sb.toString();
-		if (newVal.length() == 0)
-			newVal = null;
-		ce.addEdit(new UndoableFieldChange(be, BibtexFields.MARKED, be
-			.getField(BibtexFields.MARKED), newVal));
-		be.setField(BibtexFields.MARKED, newVal);
-
-	}
-
-	public static int isMarked(BibtexEntry be) {
-		Object fieldVal = be.getField(BibtexFields.MARKED);
-		if (fieldVal == null)
-			return 0;
-		String s = (String) fieldVal;
-		if (s.equals("0"))
-            return 1;
-        int index = s.indexOf(Globals.prefs.WRAPPED_USERNAME);
-        if (index >= 0)
-            return 1;
-
-        Matcher m = markNumberPattern.matcher(s);
-        if (m.find()) {
-            try {
-                int value = Integer.parseInt(m.group(1));
-                return value;
-            } catch (NumberFormatException ex) {
-                return 1;
-            }
-        }
-        else return 0;
-        
-	}
-
-	/**
-	 * Set a given field to a given value for all entries in a Collection. This
-	 * method DOES NOT update any UndoManager, but returns a relevant
-	 * CompoundEdit that should be registered by the caller.
-	 * 
-	 * @param entries
-	 *            The entries to set the field for.
-	 * @param field
-	 *            The name of the field to set.
-	 * @param text
-	 *            The value to set. This value can be null, indicating that the
-	 *            field should be cleared.
-	 * @param overwriteValues
-	 *            Indicate whether the value should be set even if an entry
-	 *            already has the field set.
-	 * @return A CompoundEdit for the entire operation.
-	 */
-	public static UndoableEdit massSetField(Collection<BibtexEntry> entries, String field, String text,
-		boolean overwriteValues) {
-
-		NamedCompound ce = new NamedCompound(Globals.lang("Set field"));
-		for (BibtexEntry entry : entries){
-			String oldVal = entry.getField(field);
-			// If we are not allowed to overwrite values, check if there is a
-			// nonempty
-			// value already for this entry:
-			if (!overwriteValues && (oldVal != null) && ((oldVal).length() > 0))
-				continue;
-			if (text != null)
-				entry.setField(field, text);
-			else
-				entry.clearField(field);
-			ce.addEdit(new UndoableFieldChange(entry, field, oldVal, text));
-		}
-		ce.end();
-		return ce;
-	}
-
-    /**
-     * Move contents from one field to another for a Collection of entries.
-     * @param entries The entries to do this operation for.
-     * @param field The field to move contents from.
-     * @param newField The field to move contents into.
-     * @param overwriteValues If true, overwrites any existing values in the new field.
-     *          If false, makes no change for entries with existing value in the new field.
-     * @return A CompoundEdit for the entire operation.
-     */
-    public static UndoableEdit massRenameField(Collection<BibtexEntry> entries, String field,
-                String newField, boolean overwriteValues) {
-        NamedCompound ce = new NamedCompound(Globals.lang("Rename field"));
-		for (BibtexEntry entry : entries){
-			String valToMove = entry.getField(field);
-            // If there is no value, do nothing:
-            if ((valToMove == null) || (valToMove.length() == 0))
-                continue;
-            // If we are not allowed to overwrite values, check if there is a
-			// nonempy value already for this entry for the new field:
-            String valInNewField = entry.getField(newField);
-            if (!overwriteValues && (valInNewField != null) && (valInNewField.length() > 0))
-                continue;
-
-			entry.setField(newField, valToMove);
-            ce.addEdit(new UndoableFieldChange(entry, newField, valInNewField,valToMove));
-            entry.clearField(field);
-            ce.addEdit(new UndoableFieldChange(entry, field, valToMove, null));
-		}
-		ce.end();
-		return ce;
-    }
-
-	/**
-	 * Make a list of supported character encodings that can encode all
-	 * characters in the given String.
-	 * 
-	 * @param characters
-	 *            A String of characters that should be supported by the
-	 *            encodings.
-	 * @return A List of character encodings
-	 */
-	public static List<String> findEncodingsForString(String characters) {
-		List<String> encodings = new ArrayList<String>();
-		for (int i = 0; i < Globals.ENCODINGS.length; i++) {
-			CharsetEncoder encoder = Charset.forName(Globals.ENCODINGS[i]).newEncoder();
-			if (encoder.canEncode(characters))
-				encodings.add(Globals.ENCODINGS[i]);
-		}
-		return encodings;
-	}
-
-	/**
-	 * Will convert a two digit year using the following scheme (describe at
-	 * http://www.filemaker.com/help/02-Adding%20and%20view18.html):
-	 * 
-	 * If a two digit year is encountered they are matched against the last 69
-	 * years and future 30 years.
-	 * 
-	 * For instance if it is the year 1992 then entering 23 is taken to be 1923
-	 * but if you enter 23 in 1993 then it will evaluate to 2023.
-	 * 
-	 * @param year
-	 *            The year to convert to 4 digits.
-	 * @return
-	 */
-	public static String toFourDigitYear(String year) {
-		if (thisYear == 0) {
-			thisYear = Calendar.getInstance().get(Calendar.YEAR);
-		}
-		return toFourDigitYear(year, thisYear);
-	}
-
-	public static int thisYear;
-
-	/**
-	 * Will convert a two digit year using the following scheme (describe at
-	 * http://www.filemaker.com/help/02-Adding%20and%20view18.html):
-	 * 
-	 * If a two digit year is encountered they are matched against the last 69
-	 * years and future 30 years.
-	 * 
-	 * For instance if it is the year 1992 then entering 23 is taken to be 1923
-	 * but if you enter 23 in 1993 then it will evaluate to 2023.
-	 * 
-	 * @param year
-	 *            The year to convert to 4 digits.
-	 * @return
-	 */
-	public static String toFourDigitYear(String year, int thisYear) {
-		if (year.length() != 2)
-			return year;
-		try {
-			int thisYearTwoDigits = thisYear % 100;
-			int thisCentury = thisYear - thisYearTwoDigits;
-
-			int yearNumber = Integer.parseInt(year);
-
-			if (yearNumber == thisYearTwoDigits) {
-				return String.valueOf(thisYear);
-			}
-			// 20 , 90
-			// 99 > 30
-			if ((yearNumber + 100 - thisYearTwoDigits) % 100 > 30) {
-				if (yearNumber < thisYearTwoDigits) {
-					return String.valueOf(thisCentury + yearNumber);
-				} else {
-					return String.valueOf(thisCentury - 100 + yearNumber);
-				}
-			} else {
-				if (yearNumber < thisYearTwoDigits) {
-					return String.valueOf(thisCentury + 100 + yearNumber);
-				} else {
-					return String.valueOf(thisCentury + yearNumber);
-				}
-			}
-		} catch (NumberFormatException e) {
-			return year;
-		}
-	}
-
-	/**
-	 * Will return an integer indicating the month of the entry from 0 to 11.
-	 * 
-	 * -1 signals a unknown month string.
-	 * 
-	 * This method accepts three types of months given:
-	 *  - Single and Double Digit months from 1 to 12 (01 to 12)
-	 *  - 3 Digit BibTex strings (jan, feb, mar...)
-	 *  - Full English Month identifiers.
-	 * 
-	 * @param month
-	 * @return
-	 */
-	public static int getMonthNumber(String month) {
-
-		month = month.replaceAll("#", "").toLowerCase();
-
-		for (int i = 0; i < Globals.MONTHS.length; i++) {
-			if (month.startsWith(Globals.MONTHS[i])) {
-				return i;
-			}
-		}
-
-		try {
-			return Integer.parseInt(month) - 1;
-		} catch (NumberFormatException e) {
-		}
-		return -1;
-	}
-
-
-    /**
-     * Encodes a two-dimensional String array into a single string, using ':' and
-     * ';' as separators. The characters ':' and ';' are escaped with '\'.
-     * @param values The String array.
-     * @return The encoded String.
-     */
-    public static String encodeStringArray(String[][] values) {
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0; i < values.length; i++) {
-            sb.append(encodeStringArray(values[i]));
-            if (i < values.length-1)
-                sb.append(';');
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Encodes a String array into a single string, using ':' as separator.
-     * The characters ':' and ';' are escaped with '\'.
-     * @param entry The String array.
-     * @return The encoded String.
-     */
-    public static String encodeStringArray(String[] entry) {
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0; i < entry.length; i++) {
-            sb.append(encodeString(entry[i]));
-            if (i < entry.length-1)
-                sb.append(':');
-
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Decodes an encoded double String array back into array form. The array
-     * is assumed to be square, and delimited by the characters ';' (first dim) and
-     * ':' (second dim).
-     * @param value The encoded String to be decoded.
-     * @return The decoded String array.
-     */
-    public static String[][] decodeStringDoubleArray(String value) {
-        ArrayList<ArrayList<String>> newList = new ArrayList<ArrayList<String>>();
-        StringBuilder sb = new StringBuilder();
-        ArrayList<String> thisEntry = new ArrayList<String>();
-        boolean escaped = false;
-        for (int i=0; i<value.length(); i++) {
-            char c = value.charAt(i);
-            if (!escaped && (c == '\\')) {
-                escaped = true;
-                continue;
-            }
-            else if (!escaped && (c == ':')) {
-                thisEntry.add(sb.toString());
-                sb = new StringBuilder();
-            }
-            else if (!escaped && (c == ';')) {
-                thisEntry.add(sb.toString());
-                sb = new StringBuilder();
-                newList.add(thisEntry);
-                thisEntry = new ArrayList<String>();
-            }
-            else sb.append(c);
-            escaped = false;
-        }
-        if (sb.length() > 0)
-            thisEntry.add(sb.toString());
-        if (thisEntry.size() > 0)
-            newList.add(thisEntry);
-
-        // Convert to String[][]:
-        String[][] res = new String[newList.size()][];
-        for (int i = 0; i < res.length; i++) {
-            res[i] = new String[newList.get(i).size()];
-            for (int j = 0; j < res[i].length; j++) {
-                res[i][j] = newList.get(i).get(j);
-            }
-        }
-        return res;
-    }
-
-    private static String encodeString(String s) {
-        if (s == null)
-            return null;
-        StringBuilder sb = new StringBuilder();
-        for (int i=0; i<s.length(); i++) {
-            char c = s.charAt(i);
-            if ((c == ';') || (c == ':') || (c == '\\'))
-                sb.append('\\');
-            sb.append(c);
-        }
-        return sb.toString();
-    }
-
-    /**
-	 * Static equals that can also return the right result when one of the
-	 * objects is null.
-	 * 
-	 * @param one
-	 *            The object whose equals method is called if the first is not
-	 *            null.
-	 * @param two
-	 *            The object passed to the first one if the first is not null.
-	 * @return <code>one == null ? two == null : one.equals(two);</code>
-	 */
-	public static boolean equals(Object one, Object two) {
-		return one == null ? two == null : one.equals(two);
-	}
-
-	/**
-	 * Returns the given string but with the first character turned into an
-	 * upper case character.
-	 * 
-	 * Example: testTest becomes TestTest
-	 * 
-	 * @param string
-	 *            The string to change the first character to upper case to.
-	 * @return A string has the first character turned to upper case and the
-	 *         rest unchanged from the given one.
-	 */
-	public static String toUpperFirstLetter(String string){
-		if (string == null)
-			throw new IllegalArgumentException();
-		
-		if (string.length() == 0)
-			return string;
-		
-		return Character.toUpperCase(string.charAt(0)) + string.substring(1);
-	}
-
-
-    /**
-     * Run an AbstractWorker's methods using Spin features to put each method
-     * on the correct thread.
-     * @param worker The worker to run.
-     * @throws Throwable 
-     */
-    public static void runAbstractWorker(AbstractWorker worker) throws Throwable {
-        // This part uses Spin's features:
-        Worker wrk = worker.getWorker();
-        // The Worker returned by getWorker() has been wrapped
-        // by Spin.off(), which makes its methods be run in
-        // a different thread from the EDT.
-        CallBack clb = worker.getCallBack();
-
-        worker.init(); // This method runs in this same thread, the EDT.
-        // Useful for initial GUI actions, like printing a message.
-
-        // The CallBack returned by getCallBack() has been wrapped
-        // by Spin.over(), which makes its methods be run on
-        // the EDT.
-        wrk.run(); // Runs the potentially time-consuming action
-        // without freezing the GUI. The magic is that THIS line
-        // of execution will not continue until run() is finished.
-        clb.update(); // Runs the update() method on the EDT.
-    }
-
-    /**
-     * This method checks whether there is a lock file for the given file. If
-     * there is, it waits for 500 ms. This is repeated until the lock is gone
-     * or we have waited the maximum number of times.
-     *
-     * @param file The file to check the lock for.
-     * @param maxWaitCount The maximum number of times to wait.
-     * @return true if the lock file is gone, false if it is still there.
-     */
-    public static boolean waitForFileLock(File file, int maxWaitCount) {
-        // Check if the file is locked by another JabRef user:
-        int lockCheckCount = 0;
-        while (Util.hasLockFile(file)) {
-
-            if (lockCheckCount++ == maxWaitCount) {
-                return false;
-            }
-            try { Thread.sleep(500); } catch (InterruptedException ex) {}
-        }
-        return true;
-    }
-
-    /**
-     * Check whether a lock file exists for this file.
-     * @param file The file to check.
-     * @return true if a lock file exists, false otherwise.
-     */
-    public static boolean hasLockFile(File file) {
-        File lock = new File(file.getPath()+ SaveSession.LOCKFILE_SUFFIX);
-        return lock.exists();
-    }
-
-    /**
-     * Find the lock file's last modified time, if it has a lock file.
-     * @param file The file to check.
-     * @return the last modified time if lock file exists, -1 otherwise.
-     */
-    public static long getLockFileTimeStamp(File file) {
-        File lock = new File(file.getPath()+ SaveSession.LOCKFILE_SUFFIX);
-        return lock.exists() ? lock.lastModified() : -1;
-    }
-
-        /**
-     * Check if a lock file exists, and delete it if it does.
-     * @return true if the lock file existed, false otherwise.
-     * @throws IOException if something goes wrong.
-     */
-    public static boolean deleteLockFile(File file) {
-        File lock = new File(file.getPath()+SaveSession.LOCKFILE_SUFFIX);
-        if (!lock.exists()) {
-            return false;
-        }
-        lock.delete();
-        return true;
-    }
-
-    /**
-     * Build a String array containing all those elements of all that are not
-     * in subset.
-     * @param all The array of all values.
-     * @param subset The subset of values.
-     * @return The remainder that is not part of the subset.
-     */
-    public static String[] getRemainder(String[] all, String[] subset) {
-        ArrayList<String> al = new ArrayList<String>();
-        for (int i = 0; i < all.length; i++) {
-            boolean found = false;
-            inner: for (int j = 0; j < subset.length; j++) {
-                if (subset[j].equals(all[i])) {
-                    found = true;
-                    break inner;
-                }
-            }
-            if (!found) al.add(all[i]);
-        }
-        return al.toArray(new String[al.size()]);
-    }
-
-    public static <T> T[] concat(T[] first, T[] second) {
-	T[] result = Arrays.copyOf(first, first.length + second.length);
-	System.arraycopy(second, 0, result, first.length, second.length);
-	return result;
-    }
-
-
-    /**
-     * Determines filename provided by an entry in a database
-     *
-     * @param database the database, where the entry is located
-     * @param entry the entry to which the file should be linked to
-     * @return a suggested fileName
-     */
-    public static String getLinkedFileName(BibtexDatabase database, BibtexEntry entry) {
-        String targetName = entry.getCiteKey() == null ? "default" : entry.getCiteKey();
-		StringReader sr = new StringReader(Globals.prefs.get(ImportSettingsTab.PREF_IMPORT_FILENAMEPATTERN));
-		Layout layout = null;
-		try {
-			layout = new LayoutHelper(sr).getLayoutFromText(Globals.FORMATTER_PACKAGE);
-		} catch (Exception e) {
-			Globals.logger(Globals.lang("Wrong Format").concat(" ").concat(e.toString()));
-		}
-		if (layout != null) {
-			targetName = layout.doLayout(entry, database);
-		}
-		//Removes illegal characters from filename
-		targetName = FileNameCleaner.cleanFileName(targetName);
-        return targetName;
-    }
-    
-    // DOI-regexp provided by http://stackoverflow.com/a/10324802/873282
-    private static final String REGEXP_PLAINDOI = "\\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?![\"&\\'<>])\\S)+)\\b";
-    private static final String REGEXP_DOI_WITH_HTTP_PREFIX = "http[s]?://[^\\s]*?" + REGEXP_PLAINDOI;
-    private static final Pattern PATTERN_PLAINDOI = Pattern.compile(REGEXP_PLAINDOI);
-
-    /**
-   	 * Check if the String matches a DOI (with http://...)
-   	 */
-    public static boolean checkForDOIwithHTTPprefix(String check) {
-    	if (check == null)
-    		return false;
-    	else
-    		return check.matches(".*" + REGEXP_DOI_WITH_HTTP_PREFIX + ".*");
-	}
-    
-    /**
-     * 
-     * @param check - string to check
-     * @return true if "check" contains a DOI
-     */
-    public static boolean checkForPlainDOI(String check) {
-    	if (check == null)
-    		return false;
-    	else
-    		return check.matches(".*" + REGEXP_PLAINDOI + ".*");
-    }
-       
-    /**
-   	 * Remove the http://... from DOI
-   	 * 
-   	 * @param doi - may not be null
-   	 * @return first DOI in the given String (without http://... prefix). If no DOI exists, the complete string is returned
-   	 */
-   	public static String getDOI(String doi) {
-        Matcher matcher = PATTERN_PLAINDOI.matcher(doi);
-        if (matcher.find()) {
-            return matcher.group();
-        } else {
-            return doi;
-        }
-   	}
-
-	public static void removeDOIfromBibtexEntryField(BibtexEntry bes, String fieldName, NamedCompound ce) {
-		String origValue = bes.getField(fieldName);
-		String value = origValue;
-		value = value.replaceAll(REGEXP_DOI_WITH_HTTP_PREFIX, "");
-		value = value.replaceAll(REGEXP_PLAINDOI, "");
-		value = value.trim(); 
-		if (value.isEmpty()) value = null;
-		if (!origValue.equals(value)) {
-			ce.addEdit(new UndoableFieldChange(bes, fieldName, origValue, value));
-			bes.setField(fieldName, value);
-		}
-	}
-    
-    /**
-     * 
-     * @param fileName
-     * @param fileType
-     * @param destFilename
-     * @param edits
-     * @return
-     */
-    public static boolean renameFile(String fileName, String destFilename)
-    {
-    	// File (or directory) with old name
-    	File fromFile = new File(fileName);
-
-    	// File (or directory) with new name
-    	File toFile = new File(destFilename);
-    	
-    	// Rename file (or directory)
-    	boolean success = fromFile.renameTo(toFile);
-    	return success;
-    }
-
-	public static ArrayList<String> getSeparatedKeywords(String keywords) {
-		ArrayList<String> res = new ArrayList<String>();
-		if (keywords == null) return res;
-		// _NOSPACE is a hack to support keywords such as "choreography transactions"
-		// a more intelligent algorithm would check for the separator chosen (SEPARATING_CHARS_NOSPACE)
-		// if nothing is found, " " is likely to be the separating char.
-		// solution by RisKeywords.java: s.split(",[ ]*")
-		StringTokenizer tok = new StringTokenizer(keywords, Globals.SEPARATING_CHARS_NOSPACE);
-		while (tok.hasMoreTokens()) {
-			String word = tok.nextToken().trim();
-			res.add(word);
-		}
-		return res;
-	}
-	
-	public static ArrayList<String> getSeparatedKeywords(BibtexEntry be) {
-		return getSeparatedKeywords(be.getField("keywords"));
-	}
-	
-	public static void putKeywords(BibtexEntry entry, ArrayList<String> keywords, NamedCompound ce) {
-		// Set Keyword Field
-		String oldValue = entry.getField("keywords");
-		String newValue;
-		if (keywords.size() > 0) {
-			StringBuilder sb = new StringBuilder();
-			for (String keyword: keywords) {
-				sb.append(keyword);
-				sb.append(", ");
-			}
-			sb.delete(sb.length()-2, sb.length());
-			newValue = sb.toString();
-		} else {
-			newValue = null;
-		}
-		if ((oldValue == null) && (newValue == null))
-			return;
-		if ((oldValue == null) || (!oldValue.equals(newValue))) {
-			entry.setField("keywords", newValue);
-			if (ce!=null) ce.addEdit(new UndoableFieldChange(entry, "keywords", oldValue, newValue));
-		}
-	}
-	
-	/**
-	 * @param ce indicates the undo named compound. May be null
-	 */
-	public static void updateField(BibtexEntry be, String field, String newValue, NamedCompound ce) {
-		updateField(be, field, newValue, ce, false);
-	}
-
-	/**
-	 * @param ce indicates the undo named compound. May be null
-	 */
-	public static void updateField(BibtexEntry be, String field, String newValue, NamedCompound ce, Boolean nullFieldIfValueIsTheSame) {
-		String oldValue = be.getField(field);
-		if (nullFieldIfValueIsTheSame && (oldValue != null) && (oldValue.equals(newValue))) {
-			// if oldValue == newValue then reset field if required by parameter
-			newValue = null;
-		}
-		if ((oldValue == null) && (newValue == null))
-			return;
-		if ((oldValue==null) || (!oldValue.equals(newValue))) {
-			be.setField(field, newValue);
-			if (ce!=null) ce.addEdit(new UndoableFieldChange(be, field, oldValue, newValue));
-		}
-	}
-
-	/**
-	 * Binds ESC-Key to cancel button
-	 * @param rootPane the pane to bind the action to. Typically, this variable is retrieved by this.getRootPane();
-	 * @param cancelAction the action to bind
-	 */
-	public static void bindCloseDialogKeyToCancelAction(JRootPane rootPane,
-            Action cancelAction) {
-		InputMap im = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-		ActionMap am = rootPane.getActionMap();
-	    im.put(Globals.prefs.getKey("Close dialog"), "close");
-	    am.put("close", cancelAction);
-    }
-
-	/**
-	 * Download the URL and return contents as a String.
-	 * @param source
-	 * @return
-	 * @throws IOException
-	 */
-	public static String getResults(URLConnection source) throws IOException {
-	    
-	    InputStream in = source.getInputStream();
-	    StringBuffer sb = new StringBuffer();
-	    byte[] buffer = new byte[256];
-	    while(true) {
-	        int bytesRead = in.read(buffer);
-	        if(bytesRead == -1) break;
-	        for (int i=0; i<bytesRead; i++)
-	            sb.append((char)buffer[i]);
-	    }
-	    return sb.toString();
-	}
-}
-
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+// created by : Morten O. Alver 2003
+
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.*;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLDecoder;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.text.NumberFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.StringTokenizer;
+import java.util.TreeSet;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.Action;
+import javax.swing.ActionMap;
+import javax.swing.Box;
+import javax.swing.InputMap;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JRootPane;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+import javax.swing.undo.UndoableEdit;
+
+import net.sf.jabref.autocompleter.AbstractAutoCompleter;
+import net.sf.jabref.export.SaveSession;
+import net.sf.jabref.export.layout.Layout;
+import net.sf.jabref.export.layout.LayoutHelper;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.external.ExternalFileTypeEntryEditor;
+import net.sf.jabref.external.UnknownExternalFileType;
+import net.sf.jabref.groups.AbstractGroup;
+import net.sf.jabref.groups.KeywordGroup;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileListEntryEditor;
+import net.sf.jabref.gui.FileListTableModel;
+import net.sf.jabref.labelPattern.LabelPatternUtil;
+import net.sf.jabref.net.URLDownload;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableFieldChange;
+import net.sf.jabref.util.FileNameCleaner;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * utility functions
+ */
+public class Util {
+
+	/**
+	 * A static Object for date formatting. Please do not create the object
+	 * here, because there are some references from the Globals class.....
+	 * 
+	 */
+	private static SimpleDateFormat dateFormatter = null;
+
+	/*
+	 * Colors are defined here.
+	 *  
+	 */
+	public static Color fieldsCol = new Color(180, 180, 200);
+
+	/*
+	 * Integer values for indicating result of duplicate check (for entries):
+	 * 
+	 */
+	final static int TYPE_MISMATCH = -1, NOT_EQUAL = 0, EQUAL = 1, EMPTY_IN_ONE = 2,
+		EMPTY_IN_TWO = 3, EMPTY_IN_BOTH = 4;
+	
+	final static NumberFormat idFormat;
+
+    public static Pattern remoteLinkPattern = Pattern.compile("[a-z]+://.*");
+
+    public static int MARK_COLOR_LEVELS = 6,
+            MAX_MARKING_LEVEL = MARK_COLOR_LEVELS-1,
+            IMPORT_MARK_LEVEL = MARK_COLOR_LEVELS;
+    public static Pattern markNumberPattern = Pattern.compile(Globals.prefs.MARKING_WITH_NUMBER_PATTERN);
+
+
+    static {
+		idFormat = NumberFormat.getInstance();
+		idFormat.setMinimumIntegerDigits(8);
+		idFormat.setGroupingUsed(false);
+	}
+
+	public static int getMinimumIntegerDigits(){
+		return idFormat.getMinimumIntegerDigits();
+	}
+
+	public static void pr(String s) {
+		Globals.logger(s);
+	}
+
+	public static String nCase(String s) {
+		// Make first character of String uppercase, and the
+		// rest lowercase.
+		if (s.length() > 1)
+			return s.substring(0, 1).toUpperCase() + s.substring(1, s.length()).toLowerCase();
+		else
+			return s.toUpperCase();
+
+	}
+
+	public static String checkName(String s) {
+		// Append '.bib' to the string unless it ends with that.
+		if (s.length() < 4 || !s.substring(s.length() - 4).equalsIgnoreCase(".bib")) {
+			return s + ".bib";
+		}
+		return s;
+	}
+
+	private static int idCounter = 0;
+
+	public synchronized static String createNeutralId() {
+		return idFormat.format(idCounter++);
+	}
+
+	/**
+	 * This method sets the location of a Dialog such that it is centered with
+	 * regard to another window, but not outside the screen on the left and the
+	 * top.
+	 */
+	public static void placeDialog(java.awt.Dialog diag, java.awt.Container win) {
+        diag.setLocationRelativeTo(win);
+	}
+
+	/**
+	 * This method translates a field or string from Bibtex notation, with
+	 * possibly text contained in " " or { }, and string references,
+	 * concatenated by '#' characters, into Bibkeeper notation, where string
+	 * references are enclosed in a pair of '#' characters.
+	 */
+	public static String parseField(String content) {
+		
+		if (content.length() == 0)
+			return content;
+		
+		String[] strings = content.split("#");
+		StringBuffer result = new StringBuffer();
+		for (int i = 0; i < strings.length; i++){
+			String s = strings[i].trim();
+			if (s.length() > 0){
+				char c = s.charAt(0);
+				// String reference or not?
+				if (c == '{' || c == '"'){
+					result.append(shaveString(strings[i]));	
+				} else {
+					// This part should normally be a string reference, but if it's
+					// a pure number, it is not.
+					String s2 = shaveString(s);
+					try {
+						Integer.parseInt(s2);
+						// If there's no exception, it's a number.
+						result.append(s2);
+					} catch (NumberFormatException ex) {
+						// otherwise append with hashes...
+						result.append("#").append(s2).append("#");
+					}
+				}
+			}
+		}
+		return result.toString();
+	}
+
+	/**
+	 * Will return the publication date of the given bibtex entry in conformance
+	 * to ISO 8601, i.e. either YYYY or YYYY-MM.
+	 * 
+	 * @param entry
+	 * @return will return the publication date of the entry or null if no year
+	 *         was found.
+	 */
+	public static String getPublicationDate(BibtexEntry entry) {
+
+		Object o = entry.getField("year");
+		if (o == null)
+			return null;
+
+		String year = toFourDigitYear(o.toString());
+
+		o = entry.getField("month");
+		if (o != null) {
+			int month = Util.getMonthNumber(o.toString());
+			if (month != -1) {
+				return year + "-" + (month + 1 < 10 ? "0" : "") + (month + 1);
+			}
+		}
+		return year;
+	}
+
+	public static String shaveString(String s) {
+		// returns the string, after shaving off whitespace at the beginning
+		// and end, and removing (at most) one pair of braces or " surrounding
+		// it.
+		if (s == null)
+			return null;
+		char ch, ch2;
+		int beg = 0, end = s.length();
+		// We start out assuming nothing will be removed.
+		boolean begok = false, endok = false;
+		while (!begok) {
+			if (beg < s.length()) {
+				ch = s.charAt(beg);
+				if (Character.isWhitespace(ch))
+					beg++;
+				else
+					begok = true;
+			} else
+				begok = true;
+
+		}
+		while (!endok) {
+			if (end > beg + 1) {
+				ch = s.charAt(end - 1);
+				if (Character.isWhitespace(ch))
+					end--;
+				else
+					endok = true;
+			} else
+				endok = true;
+		}
+
+		if (end > beg + 1) {
+			ch = s.charAt(beg);
+			ch2 = s.charAt(end - 1);
+			if (((ch == '{') && (ch2 == '}')) || ((ch == '"') && (ch2 == '"'))) {
+				beg++;
+				end--;
+			}
+		}
+		s = s.substring(beg, end);
+		return s;
+	}
+
+	/**
+	 * This method returns a String similar to the one passed in, except that it
+	 * is molded into a form that is acceptable for bibtex.
+	 * 
+	 * Watch-out that the returned string might be of length 0 afterwards.
+	 * 
+	 * @param key
+	 *            mayBeNull
+	 */
+	public static String checkLegalKey(String key) {
+		if (key == null)
+			return null;
+        if (!Globals.prefs.getBoolean("enforceLegalBibtexKey")) {
+            // User doesn't want us to enforce legal characters. We must still look
+            // for whitespace and some characters such as commas, since these would
+            // interfere with parsing:
+            StringBuilder newKey = new StringBuilder();
+            for (int i = 0; i < key.length(); i++) {
+                char c = key.charAt(i);
+                if (!Character.isWhitespace(c) && (c != '{') && (c != '\\') && (c != '"')
+                    && (c != '}') && (c != ','))
+                    newKey.append(c);
+            }
+            return newKey.toString();
+
+        }
+		StringBuilder newKey = new StringBuilder();
+		for (int i = 0; i < key.length(); i++) {
+			char c = key.charAt(i);
+			if (!Character.isWhitespace(c) && (c != '#') && (c != '{') && (c != '\\') && (c != '"')
+				&& (c != '}') && (c != '~') && (c != ',') && (c != '^') && (c != '\''))
+				newKey.append(c);
+		}
+
+		// Replace non-english characters like umlauts etc. with a sensible
+		// letter or letter combination that bibtex can accept.
+		String newKeyS = replaceSpecialCharacters(newKey.toString());
+
+		return newKeyS;
+	}
+
+	/**
+	 * Replace non-english characters like umlauts etc. with a sensible letter
+	 * or letter combination that bibtex can accept. The basis for replacement
+	 * is the HashMap GLobals.UNICODE_CHARS.
+	 */
+	public static String replaceSpecialCharacters(String s) {
+		for (Map.Entry<String, String> chrAndReplace : Globals.UNICODE_CHARS.entrySet()){
+			s = s.replaceAll(chrAndReplace.getKey(), chrAndReplace.getValue());
+		}
+		return s;
+	}
+
+	static public String _wrap2(String in, int wrapAmount) {
+		// The following line cuts out all whitespace and replaces them with
+		// single
+		// spaces:
+		// in = in.replaceAll("[ ]+"," ").replaceAll("[\\t]+"," ");
+		// StringBuffer out = new StringBuffer(in);
+		StringBuffer out = new StringBuffer(in.replaceAll("[ \\t\\r]+", " "));
+
+		int p = in.length() - wrapAmount;
+		int lastInserted = -1;
+		while (p > 0) {
+			p = out.lastIndexOf(" ", p);
+			if (p <= 0 || p <= 20)
+				break;
+			int lbreak = out.indexOf("\n", p);
+			System.out.println(lbreak + " " + lastInserted);
+			if ((lbreak > p) && ((lastInserted >= 0) && (lbreak < lastInserted))) {
+				p = lbreak - wrapAmount;
+			} else {
+				out.insert(p, "\n\t");
+				lastInserted = p;
+				p -= wrapAmount;
+			}
+		}
+		return out.toString();
+	}
+
+	static public String wrap2(String in, int wrapAmount) {
+		return net.sf.jabref.imports.FieldContentParser.wrap(in, wrapAmount);
+	}
+
+	static public String __wrap2(String in, int wrapAmount) {
+		// The following line cuts out all whitespace except line breaks, and
+		// replaces
+		// with single spaces. Line breaks are padded with a tab character:
+		StringBuffer out = new StringBuffer(in.replaceAll("[ \\t\\r]+", " "));
+
+		int p = 0;
+		// int lastInserted = -1;
+		while (p < out.length()) {
+			int q = out.indexOf(" ", p + wrapAmount);
+			if ((q < 0) || (q >= out.length()))
+				break;
+			int lbreak = out.indexOf("\n", p);
+			// System.out.println(lbreak);
+			if ((lbreak > p) && (lbreak < q)) {
+				p = lbreak + 1;
+				int piv = lbreak + 1;
+				if ((out.length() > piv) && !(out.charAt(piv) == '\t'))
+					out.insert(piv, "\n\t");
+
+			} else {
+				// System.out.println(q+" "+out.length());
+				out.deleteCharAt(q);
+				out.insert(q, "\n\t");
+				p = q + 1;
+			}
+		}
+		return out.toString();// .replaceAll("\n", "\n\t");
+	}
+
+	public static TreeSet<String> findDeliminatedWordsInField(BibtexDatabase db, String field,
+		String deliminator) {
+		TreeSet<String> res = new TreeSet<String>();
+		
+		for (String s : db.getKeySet()){
+			BibtexEntry be = db.getEntryById(s);
+			Object o = be.getField(field);
+			if (o != null) {
+				String fieldValue = o.toString().trim();
+				StringTokenizer tok = new StringTokenizer(fieldValue, deliminator);
+				while (tok.hasMoreTokens())
+					res.add(nCase(tok.nextToken().trim()));
+			}
+		}
+		return res;
+	}
+
+	/**
+	 * Returns a HashMap containing all words used in the database in the given
+	 * field type. Characters in
+	 * 
+	 * @param remove
+	 *            are not included.
+	 * @param db
+	 *            a <code>BibtexDatabase</code> value
+	 * @param field
+	 *            a <code>String</code> value
+	 * @param remove
+	 *            a <code>String</code> value
+	 * @return a <code>HashSet</code> value
+	 */
+	public static TreeSet<String> findAllWordsInField(BibtexDatabase db, String field, String remove) {
+		TreeSet<String> res = new TreeSet<String>();
+		StringTokenizer tok;
+		for (String s : db.getKeySet()){
+			BibtexEntry be = db.getEntryById(s);
+			Object o = be.getField(field);
+			if (o != null) {
+				tok = new StringTokenizer(o.toString(), remove, false);
+				while (tok.hasMoreTokens())
+					res.add(nCase(tok.nextToken().trim()));
+			}
+		}
+		return res;
+	}
+
+
+    /**
+     * Finds all authors' last names in all the given fields for the given database.
+     * @param db The database.
+     * @param fields The fields to look in.
+     * @return a set containing the names.
+     */
+    public static Set<String> findAuthorLastNames(BibtexDatabase db, List<String> fields) {
+		Set<String> res = new TreeSet<String>();
+		for (String s : db.getKeySet()){
+			BibtexEntry be = db.getEntryById(s);
+            for (String field : fields) {
+                String val = be.getField(field);
+                if ((val != null) && (val.length() > 0)) {
+                    AuthorList al = AuthorList.getAuthorList(val);
+                    for (int i=0; i<al.size(); i++) {
+                        AuthorList.Author a = al.getAuthor(i);
+                        String lastName = a.getLast();
+                        if ((lastName != null) && (lastName.length() > 0))
+                            res.add(lastName);
+                    }
+                }
+
+            }
+		}
+
+		return res;
+	}
+    
+
+	/**
+	 * Takes a String array and returns a string with the array's elements
+	 * delimited by a certain String.
+	 * 
+	 * @param strs
+	 *            String array to convert.
+	 * @param delimiter
+	 *            String to use as delimiter.
+	 * @return Delimited String.
+	 */
+	public static String stringArrayToDelimited(String[] strs, String delimiter) {
+		if ((strs == null) || (strs.length == 0))
+			return "";
+		if (strs.length == 1)
+			return strs[0];
+		StringBuffer sb = new StringBuffer();
+		for (int i = 0; i < strs.length - 1; i++) {
+			sb.append(strs[i]);
+			sb.append(delimiter);
+		}
+		sb.append(strs[strs.length - 1]);
+		return sb.toString();
+	}
+
+	/**
+	 * Takes a delimited string, splits it and returns
+	 * 
+	 * @param names
+	 *            a <code>String</code> value
+	 * @return a <code>String[]</code> value
+	 */
+	public static String[] delimToStringArray(String names, String delimiter) {
+		if (names == null)
+			return null;
+		return names.split(delimiter);
+	}
+
+	/**
+	 * Open a http/pdf/ps viewer for the given link string.
+	 */
+	public static void openExternalViewer(MetaData metaData, String link, String fieldName)
+		throws IOException {
+
+        if (fieldName.equals("ps") || fieldName.equals("pdf")) {
+
+            // Find the default directory for this field type:
+			String[] dir = metaData.getFileDirectory(fieldName);
+
+			File file = expandFilename(link, dir);
+
+			// Check that the file exists:
+			if ((file == null) || !file.exists()) {
+				throw new IOException(Globals.lang("File not found") + " (" + fieldName + "): '"
+					+ link + "'.");
+			}
+			link = file.getCanonicalPath();
+
+			// Use the correct viewer even if pdf and ps are mixed up:
+			String[] split = file.getName().split("\\.");
+			if (split.length >= 2) {
+				if (split[split.length - 1].equalsIgnoreCase("pdf"))
+					fieldName = "pdf";
+				else if (split[split.length - 1].equalsIgnoreCase("ps")
+					|| (split.length >= 3 && split[split.length - 2].equalsIgnoreCase("ps")))
+					fieldName = "ps";
+			}
+
+        } else if (fieldName.equals("doi")) {
+            fieldName = "url";
+            
+            // sanitizing is done below at the treatment of "URL"
+            // in sanatizeUrl a doi-link is correctly treated
+
+        } else if (fieldName.equals("eprint")) {
+            fieldName = "url";
+
+            link = sanitizeUrl(link);
+
+            // Check to see if link field already contains a well formated URL
+            if (!link.startsWith("http://")) {
+                link = Globals.ARXIV_LOOKUP_PREFIX + link;
+            }
+        }
+
+		if (fieldName.equals("url")) { // html
+			try {
+                link = sanitizeUrl(link);
+                ExternalFileType fileType = Globals.prefs.getExternalFileTypeByExt("html");
+				if (Globals.ON_MAC) {
+
+                    String[] cmd = ((fileType.getOpenWith() != null) && (fileType.getOpenWith().length() > 0)) ?
+                            new String[] { "/usr/bin/open", "-a", fileType.getOpenWith(), link } :
+                            new String[] { "/usr/bin/open", link };
+					Runtime.getRuntime().exec(cmd);
+				} else if (Globals.ON_WIN) {
+
+                    if ((fileType.getOpenWith() != null) && (fileType.getOpenWith().length() > 0)) {
+                        // Application is specified. Use it:
+                        openFileWithApplicationOnWindows(link, fileType.getOpenWith());
+                    } else
+                        openFileOnWindows(link, true);
+				} else {
+                    // Use the given app if specified, and the universal "xdg-open" otherwise:
+                    String[] openWith;
+                    if ((fileType.getOpenWith() != null) && (fileType.getOpenWith().length() > 0))
+                        openWith = fileType.getOpenWith().split(" ");
+                    else
+                        openWith = new String[] {"xdg-open"};
+
+                    String[] cmd = new String[openWith.length+1];
+                    System.arraycopy(openWith, 0, cmd, 0, openWith.length);
+                    cmd[cmd.length-1] = link;
+                    Runtime.getRuntime().exec(cmd);
+				}
+
+			} catch (IOException e) {
+                System.err.println(Globals.lang("Error_opening_file_'%0'.", link));
+                e.printStackTrace();
+			}
+		} else if (fieldName.equals("ps")) {
+			try {
+				if (Globals.ON_MAC) {
+                    ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("ps");
+                    String viewer = type != null ? type.getOpenWith() : Globals.prefs.get("psviewer");
+                    String[] cmd = { "/usr/bin/open", "-a", viewer, link };
+					Runtime.getRuntime().exec(cmd);
+				} else if (Globals.ON_WIN) {
+					openFileOnWindows(link, true);
+					/*
+					 * cmdArray[0] = Globals.prefs.get("psviewer"); cmdArray[1] =
+					 * link; Process child = Runtime.getRuntime().exec(
+					 * cmdArray[0] + " " + cmdArray[1]);
+					 */
+				} else {
+                    ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("ps");
+                    String viewer = type != null ? type.getOpenWith() : "xdg-open";
+                    String[] cmdArray = new String[2];
+                    cmdArray[0] = viewer;
+					cmdArray[1] = link;
+					Runtime.getRuntime().exec(cmdArray);
+				}
+			} catch (IOException e) {
+				System.err.println("An error occured on the command: "
+					+ Globals.prefs.get("psviewer") + " " + link);
+			}
+		} else if (fieldName.equals("pdf")) {
+			try {
+				if (Globals.ON_MAC) {
+                    ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("pdf");
+                    String viewer = type != null ? type.getOpenWith() : Globals.prefs.get("psviewer");
+                    String[] cmd = { "/usr/bin/open", "-a", viewer, link };
+					Runtime.getRuntime().exec(cmd);
+				} else if (Globals.ON_WIN) {
+					openFileOnWindows(link, true);
+					/*
+					 * String[] spl = link.split("\\\\"); StringBuffer sb = new
+					 * StringBuffer(); for (int i = 0; i < spl.length; i++) { if
+					 * (i > 0) sb.append("\\"); if (spl[i].indexOf(" ") >= 0)
+					 * spl[i] = "\"" + spl[i] + "\""; sb.append(spl[i]); }
+					 * //pr(sb.toString()); link = sb.toString();
+					 * 
+					 * String cmd = "cmd.exe /c start " + link;
+					 * 
+					 * Process child = Runtime.getRuntime().exec(cmd);
+					 */
+				} else {
+                    ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("pdf");
+                    String viewer = type != null ? type.getOpenWith() : Globals.prefs.get("psviewer");
+                    String[] cmdArray = new String[2];
+                    cmdArray[0] = viewer;
+					cmdArray[1] = link;
+					// Process child = Runtime.getRuntime().exec(cmdArray[0]+"
+					// "+cmdArray[1]);
+					Runtime.getRuntime().exec(cmdArray);
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+				System.err.println("An error occured on the command: "
+					+ Globals.prefs.get("pdfviewer") + " #" + link);
+				System.err.println(e.getMessage());
+			}
+		} else {
+			System.err
+				.println("Message: currently only PDF, PS and HTML files can be opened by double clicking");
+		}
+	}
+
+	/**
+	 * Opens a file on a Windows system, using its default viewer.
+	 * 
+	 * @param link
+	 *            The file name.
+	 * @param localFile
+	 *            true if it is a local file, not an URL.
+	 * @throws IOException
+	 */
+	public static void openFileOnWindows(String link, boolean localFile) throws IOException {
+		/*
+		 * if (localFile) { String[] spl = link.split("\\\\"); StringBuffer sb =
+		 * new StringBuffer(); for (int i = 0; i < spl.length; i++) { if (i > 0)
+		 * sb.append("\\"); if (spl[i].indexOf(" ") >= 0) spl[i] = "\"" + spl[i] +
+		 * "\""; sb.append(spl[i]); } link = sb.toString(); }
+		 */
+		link = link.replaceAll("&", "\"&\"").replaceAll(" ", "\" \"");
+
+		// Bug fix for:
+		// http://sourceforge.net/tracker/index.php?func=detail&aid=1489454&group_id=92314&atid=600306
+		String cmd;
+		if (Globals.osName.startsWith("Windows 9")) {
+			cmd = "command.com /c start " + link;
+		} else {
+			cmd = "cmd.exe /c start " + link;
+		}
+
+        Runtime.getRuntime().exec(cmd);
+	}
+
+    /**
+     * Opens a file on a Windows system, using the given application.
+     *
+     * @param link The file name.
+     * @param application Link to the app that opens the file.
+     * @throws IOException
+     */
+    public static void openFileWithApplicationOnWindows(String link, String application)
+        throws IOException {
+
+        link = link.replaceAll("&", "\"&\"").replaceAll(" ", "\" \"");
+
+		Runtime.getRuntime().exec(application + " " + link);
+    }
+
+    /**
+	 * Open an external file, attempting to use the correct viewer for it.
+	 * 
+	 * @param metaData
+	 *            The MetaData for the database this file belongs to.
+	 * @param link
+	 *            The file name.
+     * @return false if the link couldn't be resolved, true otherwise.
+	 */
+	public static boolean openExternalFileAnyFormat(final MetaData metaData, String link,
+                                                 final ExternalFileType fileType) throws IOException {
+
+        boolean httpLink = false;
+
+        if (remoteLinkPattern.matcher(link.toLowerCase()).matches()) {
+            httpLink = true;
+        }
+        /*if (link.toLowerCase().startsWith("file://")) {
+            link = link.substring(7);
+        }
+        final String ln = link;
+        if (remoteLinkPattern.matcher(link.toLowerCase()).matches()) {
+            (new Thread(new Runnable() {
+                public void run() {
+                    openRemoteExternalFile(metaData, ln, fileType);
+                }
+            })).start();
+
+            return true;
+        }*/
+
+        //boolean httpLink = link.toLowerCase().startsWith("http:")
+        //        || link.toLowerCase().startsWith("ftp:");
+
+        
+        // For other platforms we'll try to find the file type:
+		File file = new File(link);
+
+        if (!httpLink) {
+            File tmp = expandFilename(metaData, link);
+            if (tmp != null)
+                file = tmp;
+        }
+
+        // Check if we have arrived at a file type, and either an http link or an existing file:
+		if ((httpLink || file.exists()) && (fileType != null)) {
+            // Open the file:
+			try {
+                String filePath = httpLink ? link : file.getPath();
+                if (Globals.ON_MAC) {
+                    // Use "-a <application>" if the app is specified, and just "open <filename>" otherwise:
+                    String[] cmd = ((fileType.getOpenWith() != null) && (fileType.getOpenWith().length() > 0)) ?
+                            new String[] { "/usr/bin/open", "-a", fileType.getOpenWith(), filePath } :
+                            new String[] { "/usr/bin/open", filePath };
+					Runtime.getRuntime().exec(cmd);
+				} else if (Globals.ON_WIN) {
+                    if ((fileType.getOpenWith() != null) && (fileType.getOpenWith().length() > 0)) {
+                        // Application is specified. Use it:
+                        openFileWithApplicationOnWindows(filePath, fileType.getOpenWith());
+                    } else
+                        openFileOnWindows(filePath, true);
+				} else {
+                    // Use the given app if specified, and the universal "xdg-open" otherwise:
+                    String[] openWith;
+                    if ((fileType.getOpenWith() != null) && (fileType.getOpenWith().length() > 0))
+                        openWith = fileType.getOpenWith().split(" ");
+                    else
+                        openWith = new String[] {"xdg-open"};
+                    
+                    String[] cmdArray = new String[openWith.length+1];
+                    System.arraycopy(openWith, 0, cmdArray, 0, openWith.length);
+                    cmdArray[cmdArray.length-1] = filePath;
+                    Runtime.getRuntime().exec(cmdArray);
+				}
+                return true;
+            } catch (IOException e) {
+                throw e;
+                /*e.printStackTrace();
+				System.err.println("An error occured on the command: " + fileType.getOpenWith()
+					+ " #" + link);
+				System.err.println(e.getMessage());*/
+			}
+
+		} else {
+
+            return false;
+            // No file matched the name, or we didn't know the file type.
+
+		}
+
+
+    }
+
+
+    public static void openRemoteExternalFile(final MetaData metaData,
+                                              final String link, final ExternalFileType fileType) {
+        File temp = null;
+        try {
+            temp = File.createTempFile("jabref-link", "."+fileType.getExtension());
+            temp.deleteOnExit();
+            System.out.println("Downloading to '"+temp.getPath()+"'");
+            URLDownload ud = new URLDownload(null, new URL(link), temp);
+            ud.download();
+            System.out.println("Done");
+        } catch (MalformedURLException ex) {
+            ex.printStackTrace();
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+        final String ln = temp.getPath();
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                try {
+                    openExternalFileAnyFormat(metaData, ln, fileType);
+                } catch (IOException ex) {
+                    ex.printStackTrace();
+                }
+            }
+        });
+    }
+
+public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry, MetaData metaData,
+                                           String link, UnknownExternalFileType fileType) throws IOException {
+
+    String cancelMessage = Globals.lang("Unable to open file.");
+    String[] options = new String[] {Globals.lang("Define '%0'", fileType.getName()),
+            Globals.lang("Change file type"), Globals.lang("Cancel")};
+    String defOption = options[0];
+    int answer = JOptionPane.showOptionDialog(frame, Globals.lang("This external link is of the type '%0', which is undefined. What do you want to do?",
+            fileType.getName()),
+            Globals.lang("Undefined file type"), JOptionPane.YES_NO_CANCEL_OPTION,
+            JOptionPane.QUESTION_MESSAGE, null, options, defOption);
+    if (answer == JOptionPane.CANCEL_OPTION) {
+        frame.output(cancelMessage);
+        return false;
+    }
+    else if (answer == JOptionPane.YES_OPTION) {
+        // User wants to define the new file type. Show the dialog:
+        ExternalFileType newType = new ExternalFileType(fileType.getName(), "", "", "", "new");
+        ExternalFileTypeEntryEditor editor = new ExternalFileTypeEntryEditor(frame, newType);
+        editor.setVisible(true);
+        if (editor.okPressed()) {
+            // Get the old list of types, add this one, and update the list in prefs:
+            List<ExternalFileType> fileTypes = new ArrayList<ExternalFileType>();
+            ExternalFileType[] oldTypes = Globals.prefs.getExternalFileTypeSelection();
+            for (int i = 0; i < oldTypes.length; i++) {
+                fileTypes.add(oldTypes[i]);
+            }
+            fileTypes.add(newType);
+            Collections.sort(fileTypes);
+            Globals.prefs.setExternalFileTypes(fileTypes);
+            // Finally, open the file:
+            return openExternalFileAnyFormat(metaData, link, newType);
+        } else {
+            // Cancelled:
+            frame.output(cancelMessage);
+            return false;
+        }
+    }
+    else {
+        // User wants to change the type of this link.
+        // First get a model of all file links for this entry:
+        FileListTableModel tModel = new FileListTableModel();
+        String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
+        tModel.setContent(oldValue);
+        FileListEntry flEntry = null;
+        // Then find which one we are looking at:
+        for (int i=0; i<tModel.getRowCount(); i++) {
+            FileListEntry iEntry = tModel.getEntry(i);
+            if (iEntry.getLink().equals(link)) {
+                flEntry = iEntry;
+                break;
+            }
+        }
+        if (flEntry == null) {
+            // This shouldn't happen, so I'm not sure what to put in here:
+            throw new RuntimeException("Could not find the file list entry "+link+" in "+entry.toString());
+        }
+
+        FileListEntryEditor editor = new FileListEntryEditor(frame, flEntry, false, true, metaData);
+        editor.setVisible(true, false);
+        if (editor.okPressed()) {
+            // Store the changes and add an undo edit:
+            String newValue = tModel.getStringRepresentation();
+            UndoableFieldChange ce = new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD,
+                    oldValue, newValue);
+            entry.setField(GUIGlobals.FILE_FIELD, newValue);
+            frame.basePanel().undoManager.addEdit(ce);
+            frame.basePanel().markBaseChanged();
+            // Finally, open the link:
+            return openExternalFileAnyFormat(metaData, flEntry.getLink(), flEntry.getType());
+        } else {
+            // Cancelled:
+            frame.output(cancelMessage);
+            return false;
+        }
+    }
+}
+    /**
+	 * Make sure an URL is "portable", in that it doesn't contain bad characters
+	 * that break the open command in some OSes.
+	 * 
+	 * A call to this method will also remove \\url{} enclosings and clean DOI links.
+	 * 
+	 * @param link :the URL to sanitize.
+	 * @return Sanitized URL
+	 */
+	public static String sanitizeUrl(String link) {
+	    link = link.trim();
+
+	    // First check if it is enclosed in \\url{}. If so, remove
+        // the wrapper.
+        if (link.startsWith("\\url{") && link.endsWith("}"))
+            link = link.substring(5, link.length() - 1);
+
+        if (link.matches("^doi:/*.*")){
+            // Remove 'doi:'
+            link = link.replaceFirst("^doi:/*", "");
+            link = Globals.DOI_LOOKUP_PREFIX + link;
+        }
+
+        // converts doi-only link to full http address
+        // Morten Alver 6 Nov 2012: this extracts a nonfunctional DOI from some complete
+        // http addresses (e.g. http://onlinelibrary.wiley.com/doi/10.1002/rra.999/abstract, where
+        // the trailing "/abstract" is included but doesn't lead to a resolvable DOI).
+        // To prevent mangling of working URLs I'm disabling this check if the link is already
+        // a full http link:
+        if (checkForPlainDOI(link) && !link.startsWith("http://")) {
+            link = Globals.DOI_LOOKUP_PREFIX + getDOI(link);
+        }
+
+		link = link.replaceAll("\\+", "%2B");
+
+		try {
+			link = URLDecoder.decode(link, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+		}
+
+		/**
+		 * Fix for: [ 1574773 ] sanitizeUrl() breaks ftp:// and file:///
+		 * 
+		 * http://sourceforge.net/tracker/index.php?func=detail&aid=1574773&group_id=92314&atid=600306
+		 */
+		try {
+			return new URI(null, link, null).toASCIIString();
+		} catch (URISyntaxException e) {
+			return link;
+		}
+	}
+
+	/**
+	 * Searches the given directory and subdirectories for a pdf file with name
+	 * as given + ".pdf"
+	 */
+	public static String findPdf(String key, String extension, String directory, OpenFileFilter off) {
+		// String filename = key + "."+extension;
+
+		/*
+		 * Simon Fischer's patch for replacing a regexp in keys before
+		 * converting to filename:
+		 * 
+		 * String regex = Globals.prefs.get("basenamePatternRegex"); if ((regex !=
+		 * null) && (regex.trim().length() > 0)) { String replacement =
+		 * Globals.prefs.get("basenamePatternReplacement"); key =
+		 * key.replaceAll(regex, replacement); }
+		 */
+		if (!directory.endsWith(System.getProperty("file.separator")))
+			directory += System.getProperty("file.separator");
+		String found = findInDir(key, directory, off, 0);
+		if (found != null)
+			return found.substring(directory.length());
+		else
+			return null;
+	}
+
+	public static Map<BibtexEntry, List<File>> findAssociatedFiles(Collection<BibtexEntry> entries, Collection<String> extensions, Collection<File> directories){
+		HashMap<BibtexEntry, List<File>> result = new HashMap<BibtexEntry, List<File>>();
+	
+		// First scan directories
+		Set<File> filesWithExtension = findFiles(extensions, directories);
+		
+		// Initialize Result-Set
+		for (BibtexEntry entry : entries){
+			result.put(entry, new ArrayList<File>());
+		}
+
+        boolean exactOnly = Globals.prefs.getBoolean("autolinkExactKeyOnly");
+        // Now look for keys
+		nextFile:
+		for (File file : filesWithExtension){
+			
+			String name = file.getName();
+            int dot = name.lastIndexOf('.');
+            // First, look for exact matches:
+            for (BibtexEntry entry : entries){
+                String citeKey = entry.getCiteKey();
+                if ((citeKey != null) && (citeKey.length() > 0)) {
+                    if (dot > 0) {
+                        if (name.substring(0, dot).equals(citeKey)) {
+                            result.get(entry).add(file);
+                            continue nextFile;
+                        }
+                    }
+                }
+            }
+            // If we get here, we didn't find any exact matches. If non-exact
+            // matches are allowed, try to find one:
+            if (!exactOnly) {
+                for (BibtexEntry entry : entries){
+                    String citeKey = entry.getCiteKey();
+                    if ((citeKey != null) && (citeKey.length() > 0)) {
+                        if (name.startsWith(citeKey)){
+                            result.get(entry).add(file);
+                            continue nextFile;
+                        }
+                    }
+                }
+            }
+		}
+		
+		return result;
+	}
+	
+	public static Set<File> findFiles(Collection<String> extensions, Collection<File> directories) {
+		Set<File> result = new HashSet<File>();
+		
+		for (File directory : directories){
+			result.addAll(findFiles(extensions, directory));
+		}
+		
+		return result;
+	}
+
+	private static Collection<? extends File> findFiles(Collection<String> extensions, File directory) {
+		Set<File> result = new HashSet<File>();
+		
+		File[] children = directory.listFiles();
+		if (children == null)
+			return result; // No permission?
+
+		for (File child : children){
+			if (child.isDirectory()) {
+				result.addAll(findFiles(extensions, child));
+			} else {
+				
+				String extension = getFileExtension(child);
+					
+				if (extension != null){
+					if (extensions.contains(extension)){
+						result.add(child);
+					}
+				}
+			}
+		}
+		
+		return result;
+	}
+
+	/**
+	 * Returns the extension of a file or null if the file does not have one (no . in name).
+	 * 
+	 * @param file
+	 * 
+	 * @return The extension, trimmed and in lowercase.
+	 */
+	public static String getFileExtension(File file) {
+		String name = file.getName();
+		int pos = name.lastIndexOf('.');
+		String extension = ((pos >= 0) && (pos < name.length() - 1)) ? name.substring(pos + 1)
+			.trim().toLowerCase() : null;
+		return extension;
+	}
+
+	/**
+	 * New version of findPdf that uses findFiles.
+	 * 
+	 * The search pattern will be read from the preferences.
+	 * 
+	 * The [extension]-tags in this pattern will be replace by the given
+	 * extension parameter.
+	 * 
+	 */
+	public static String findPdf(BibtexEntry entry, String extension, String directory) {
+		return findPdf(entry, extension, new String[] { directory });
+	}
+
+	/**
+	 * Convenience method for findPDF. Can search multiple PDF directories.
+	 */
+	public static String findPdf(BibtexEntry entry, String extension, String[] directories) {
+
+		String regularExpression;
+		if (Globals.prefs.getBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY)) {
+			regularExpression = Globals.prefs.get(JabRefPreferences.REG_EXP_SEARCH_EXPRESSION_KEY);
+		} else {
+			regularExpression = Globals.prefs
+				.get(JabRefPreferences.DEFAULT_REG_EXP_SEARCH_EXPRESSION_KEY);
+		}
+		regularExpression = regularExpression.replaceAll("\\[extension\\]", extension);
+
+		return findFile(entry, null, directories, regularExpression, true);
+	}
+
+    /**
+     * Convenience menthod for findPDF. Searches for a file of the given type.
+     * @param entry The BibtexEntry to search for a link for.
+     * @param fileType The file type to search for.
+     * @return The link to the file found, or null if not found.
+     */
+    public static String findFile(BibtexEntry entry, ExternalFileType fileType, List<String> extraDirs) {
+
+        List<String> dirs = new ArrayList<String>();
+        dirs.addAll(extraDirs);
+        if (Globals.prefs.hasKey(fileType.getExtension()+"Directory")) {
+            dirs.add(Globals.prefs.get(fileType.getExtension()+"Directory"));
+        }
+        String [] directories = dirs.toArray(new String[dirs.size()]);
+        return findPdf(entry, fileType.getExtension(), directories);
+    }
+
+    /**
+	 * Searches the given directory and file name pattern for a file for the
+	 * bibtexentry.
+	 *
+	 * Used to fix:
+	 *
+	 * http://sourceforge.net/tracker/index.php?func=detail&aid=1503410&group_id=92314&atid=600309
+	 *
+	 * Requirements:
+	 *  - Be able to find the associated PDF in a set of given directories.
+	 *  - Be able to return a relative path or absolute path.
+	 *  - Be fast.
+	 *  - Allow for flexible naming schemes in the PDFs.
+	 *
+	 * Syntax scheme for file:
+	 * <ul>
+	 * <li>* Any subDir</li>
+	 * <li>** Any subDir (recursiv)</li>
+	 * <li>[key] Key from bibtex file and database</li>
+	 * <li>.* Anything else is taken to be a Regular expression.</li>
+	 * </ul>
+	 *
+	 * @param entry
+	 *            non-null
+	 * @param database
+	 *            non-null
+	 * @param directory
+	 *            A set of root directories to start the search from. Paths are
+	 *            returned relative to these directories if relative is set to
+	 *            true. These directories will not be expanded or anything. Use
+	 *            the file attribute for this.
+	 * @param file
+	 *            non-null
+	 *
+	 * @param relative
+	 *            whether to return relative file paths or absolute ones
+	 *
+	 * @return Will return the first file found to match the given criteria or
+	 *         null if none was found.
+	 */
+	public static String findFile(BibtexEntry entry, BibtexDatabase database, String[] directory,
+		String file, boolean relative) {
+
+		for (int i = 0; i < directory.length; i++) {
+			String result = findFile(entry, database, directory[i], file, relative);
+			if (result != null) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Removes optional square brackets from the string s
+	 *
+	 * @param s
+	 * @return
+	 */
+	public static String stripBrackets(String s) {
+		int beginIndex = (s.startsWith("[") ? 1 : 0);
+		int endIndex = (s.endsWith("]") ? s.length() - 1 : s.length());
+		return s.substring(beginIndex, endIndex);
+	}
+
+	public static ArrayList<String[]> parseMethodsCalls(String calls) throws RuntimeException {
+
+		ArrayList<String[]> result = new ArrayList<String[]>();
+
+		char[] c = calls.toCharArray();
+
+		int i = 0;
+
+		while (i < c.length) {
+
+			int start = i;
+			if (Character.isJavaIdentifierStart(c[i])) {
+				i++;
+				while (i < c.length && (Character.isJavaIdentifierPart(c[i]) || c[i] == '.')) {
+					i++;
+				}
+				if (i < c.length && c[i] == '(') {
+
+					String method = calls.substring(start, i);
+
+					// Skip the brace
+					i++;
+
+					if (i < c.length){
+						if (c[i] == '"'){
+							// Parameter is in format "xxx"
+
+							// Skip "
+							i++;
+
+							int startParam = i;
+							i++;
+		                    boolean escaped = false;
+							while (i + 1 < c.length &&
+                                    !(!escaped && c[i] == '"' && c[i + 1] == ')')) {
+                                if (c[i] == '\\') {
+                                    escaped = !escaped;
+                                }
+                                else
+                                    escaped = false;
+                                i++;
+
+                            }
+
+							String param = calls.substring(startParam, i);
+		
+							result.add(new String[] { method, param });
+						} else {
+							// Parameter is in format xxx
+
+							int startParam = i;
+
+							while (i < c.length && c[i] != ')') {
+								i++;
+							}
+
+							String param = calls.substring(startParam, i);
+
+							result.add(new String[] { method, param });
+
+
+						}
+					} else {
+						// Incorrecly terminated open brace
+						result.add(new String[] { method });
+					}
+				} else {
+					String method = calls.substring(start, i);
+					result.add(new String[] { method });
+				}
+			}
+			i++;
+		}
+
+		return result;
+	}
+
+	/**
+	 * Accepts a string like [author:lower] or [title:abbr] or [auth],
+	 * whereas the first part signifies the bibtex-field to get, or the key generator
+     * field marker to use, while the others are the modifiers that will be applied.
+	 *
+	 * @param fieldAndFormat
+	 * @param entry
+	 * @param database
+	 * @return
+	 */
+	public static String getFieldAndFormat(String fieldAndFormat, BibtexEntry entry,
+		BibtexDatabase database) {
+
+		fieldAndFormat = stripBrackets(fieldAndFormat);
+
+		int colon = fieldAndFormat.indexOf(':');
+
+		String beforeColon, afterColon;
+		if (colon == -1) {
+			beforeColon = fieldAndFormat;
+			afterColon = null;
+		} else {
+			beforeColon = fieldAndFormat.substring(0, colon);
+			afterColon = fieldAndFormat.substring(colon + 1);
+		}
+		beforeColon = beforeColon.trim();
+
+		if (beforeColon.length() == 0) {
+			return null;
+		}
+
+		String fieldValue = BibtexDatabase.getResolvedField(beforeColon, entry, database);
+
+        // If no field value was found, try to interpret it as a key generator field marker:
+        if (fieldValue == null)
+            fieldValue =  LabelPatternUtil.makeLabel(entry, beforeColon);
+
+		if (fieldValue == null)
+			return null;
+
+		if (afterColon == null || afterColon.length() == 0)
+			return fieldValue;
+
+        String[] parts = afterColon.split(":");
+        fieldValue = LabelPatternUtil.applyModifiers(fieldValue, parts, 0);
+        
+		return fieldValue;
+	}
+
+	/**
+	 * Convenience function for absolute search.
+	 *
+	 * Uses findFile(BibtexEntry, BibtexDatabase, (String)null, String, false).
+	 */
+	public static String findFile(BibtexEntry entry, BibtexDatabase database, String file) {
+		return findFile(entry, database, (String) null, file, false);
+	}
+
+	/**
+	 * Internal Version of findFile, which also accepts a current directory to
+	 * base the search on.
+	 *
+	 */
+	public static String findFile(BibtexEntry entry, BibtexDatabase database, String directory,
+		String file, boolean relative) {
+
+		File root;
+		if (directory == null) {
+			root = new File(".");
+		} else {
+			root = new File(directory);
+		}
+		if (!root.exists())
+			return null;
+
+		String found = findFile(entry, database, root, file);
+
+		if (directory == null || !relative) {
+			return found;
+		}
+
+		if (found != null) {
+			try {
+				/**
+				 * [ 1601651 ] PDF subdirectory - missing first character
+				 *
+				 * http://sourceforge.net/tracker/index.php?func=detail&aid=1601651&group_id=92314&atid=600306
+				 */
+                // Changed by M. Alver 2007.01.04:
+                // Remove first character if it is a directory separator character:
+                String tmp = found.substring(root.getCanonicalPath().length());
+                if ((tmp.length() > 1) && (tmp.charAt(0) == File.separatorChar))
+                    tmp = tmp.substring(1);
+                return tmp;
+                //return found.substring(root.getCanonicalPath().length());
+			} catch (IOException e) {
+				return null;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * The actual work-horse. Will find absolute filepaths starting from the
+	 * given directory using the given regular expression string for search.
+	 */
+	protected static String findFile(BibtexEntry entry, BibtexDatabase database, File directory,
+		String file) {
+
+		if (file.startsWith("/")) {
+			directory = new File(".");
+			file = file.substring(1);
+		}
+
+		// Escape handling...
+		Matcher m = Pattern.compile("([^\\\\])\\\\([^\\\\])").matcher(file);
+		StringBuffer s = new StringBuffer();
+		while (m.find()) {
+			m.appendReplacement(s, m.group(1) + "/" + m.group(2));
+		}
+		m.appendTail(s);
+		file = s.toString();
+		String[] fileParts = file.split("/");
+
+		if (fileParts.length == 0)
+			return null;
+
+		if (fileParts.length > 1) {
+
+			for (int i = 0; i < fileParts.length - 1; i++) {
+
+				String dirToProcess = fileParts[i];
+
+				dirToProcess = expandBrackets(dirToProcess, entry, database);
+
+				if (dirToProcess.matches("^.:$")) { // Windows Drive Letter
+					directory = new File(dirToProcess + "/");
+					continue;
+				}
+				if (dirToProcess.equals(".")) { // Stay in current directory
+					continue;
+				}
+				if (dirToProcess.equals("..")) {
+					directory = new File(directory.getParent());
+					continue;
+				}
+				if (dirToProcess.equals("*")) { // Do for all direct subdirs
+
+					File[] subDirs = directory.listFiles();
+					if (subDirs == null)
+						return null; // No permission?
+
+					String restOfFileString = join(fileParts, "/", i + 1, fileParts.length);
+
+					for (int sub = 0; sub < subDirs.length; sub++) {
+						if (subDirs[sub].isDirectory()) {
+							String result = findFile(entry, database, subDirs[sub],
+								restOfFileString);
+							if (result != null)
+								return result;
+						}
+					}
+					return null;
+				}
+				// Do for all direct and indirect subdirs
+				if (dirToProcess.equals("**")) {
+					List<File> toDo = new LinkedList<File>();
+					toDo.add(directory);
+
+					String restOfFileString = join(fileParts, "/", i + 1, fileParts.length);
+
+					// Before checking the subdirs, we first check the current
+					// dir
+					String result = findFile(entry, database, directory, restOfFileString);
+					if (result != null)
+						return result;
+
+					while (!toDo.isEmpty()) {
+
+						// Get all subdirs of each of the elements found in toDo
+						File[] subDirs = toDo.remove(0).listFiles();
+						if (subDirs == null) // No permission?
+							continue;
+
+						toDo.addAll(Arrays.asList(subDirs));
+
+						for (int sub = 0; sub < subDirs.length; sub++) {
+							if (!subDirs[sub].isDirectory())
+								continue;
+							result = findFile(entry, database, subDirs[sub], restOfFileString);
+							if (result != null)
+								return result;
+						}
+					}
+					// We already did the currentDirectory
+					return null;
+				}
+
+				final Pattern toMatch = Pattern
+					.compile(dirToProcess.replaceAll("\\\\\\\\", "\\\\"));
+
+				File[] matches = directory.listFiles(new FilenameFilter() {
+					public boolean accept(File arg0, String arg1) {
+						return toMatch.matcher(arg1).matches();
+					}
+				});
+				if (matches == null || matches.length == 0)
+					return null;
+
+				directory = matches[0];
+
+				if (!directory.exists())
+					return null;
+
+			} // End process directory information
+		}
+		// Last step check if the given file can be found in this directory
+		String filenameToLookFor = expandBrackets(fileParts[fileParts.length - 1], entry, database);
+
+		final Pattern toMatch = Pattern.compile("^"
+			+ filenameToLookFor.replaceAll("\\\\\\\\", "\\\\") + "$");
+
+		File[] matches = directory.listFiles(new FilenameFilter() {
+			public boolean accept(File arg0, String arg1) {
+				return toMatch.matcher(arg1).matches();
+			}
+		});
+		if (matches == null || matches.length == 0)
+			return null;
+
+		try {
+			return matches[0].getCanonicalPath();
+		} catch (IOException e) {
+			return null;
+		}
+	}
+
+	static Pattern squareBracketsPattern = Pattern.compile("\\[.*?\\]");
+
+	/**
+	 * Takes a string that contains bracketed expression and expands each of
+	 * these using getFieldAndFormat.
+	 *
+	 * Unknown Bracket expressions are silently dropped.
+	 *
+	 * @param bracketString
+	 * @param entry
+	 * @param database
+	 * @return
+	 */
+	public static String expandBrackets(String bracketString, BibtexEntry entry,
+		BibtexDatabase database) {
+		Matcher m = squareBracketsPattern.matcher(bracketString);
+		StringBuffer s = new StringBuffer();
+		while (m.find()) {
+			String replacement = getFieldAndFormat(m.group(), entry, database);
+			if (replacement == null)
+				replacement = "";
+			m.appendReplacement(s, replacement);
+		}
+		m.appendTail(s);
+
+		return s.toString();
+	}
+
+	/**
+	 * Concatenate all strings in the array from index 'from' to 'to' (excluding
+	 * to) with the given separator.
+	 * 
+	 * Example:
+	 * 
+	 * String[] s = "ab/cd/ed".split("/"); join(s, "\\", 0, s.length) ->
+	 * "ab\\cd\\ed"
+	 * 
+	 * @param strings
+	 * @param separator
+	 * @param from
+	 * @param to
+	 *            Excluding strings[to]
+	 * @return
+	 */
+	public static String join(String[] strings, String separator, int from, int to) {
+		if (strings.length == 0 || from >= to)
+			return "";
+		
+		from = Math.max(from, 0);
+		to = Math.min(strings.length, to);
+
+		StringBuffer sb = new StringBuffer();
+		for (int i = from; i < to - 1; i++) {
+			sb.append(strings[i]).append(separator);
+		}
+		return sb.append(strings[to - 1]).toString();
+	}
+
+   /**
+    * Converts a relative filename to an absolute one, if necessary. Returns
+    * null if the file does not exist.<br/>
+    * 
+    * Uses <ul>
+    * <li>the default directory associated with the extension of the file</li>
+    * <li>the standard file directory</li>
+    * <li>the directory of the bib file</li>
+    * </ul>
+    * 
+    * @param metaData
+    *            The MetaData for the database this file belongs to.
+    * @param name
+    *            The file name, may also be a relative path to the file
+    */
+	public static File expandFilename(final MetaData metaData, String name) {
+        int pos = name.lastIndexOf('.');
+        String extension = ((pos >= 0) && (pos < name.length() - 1)) ? name
+                .substring(pos + 1).trim().toLowerCase() : null;
+        // Find the default directory for this field type, if any:
+        String[] dir = metaData.getFileDirectory(extension);
+        // Include the standard "file" directory:
+        String[] fileDir = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+        // Include the directory of the bib file:
+        ArrayList<String> al = new ArrayList<String>();
+        for (int i = 0; i < dir.length; i++)
+            if (!al.contains(dir[i]))
+                al.add(dir[i]);
+        for (int i = 0; i < fileDir.length; i++)
+            if (!al.contains(fileDir[i]))
+                al.add(fileDir[i]);
+        String[] dirs = al.toArray(new String[al.size()]);
+        return expandFilename(name, dirs);
+	}
+
+	/**
+	 * Converts a relative filename to an absolute one, if necessary. Returns
+	 * null if the file does not exist.
+	 * 
+	 * Will look in each of the given dirs starting from the beginning and
+	 * returning the first found file to match if any.
+	 */
+	public static File expandFilename(String name, String[] dir) {
+
+		for (int i = 0; i < dir.length; i++) {
+            if (dir[i] != null) {
+                File result = expandFilename(name, dir[i]);
+                if (result != null) {
+                    return result;
+                }
+            }
+        }
+
+		return null;
+	}
+	
+	/**
+	 * Converts a relative filename to an absolute one, if necessary. Returns
+	 * null if the file does not exist.
+	 */
+	public static File expandFilename(String name, String dir) {
+
+		File file = null;
+		if (name == null || name.length() == 0)
+			return null;
+		else {
+			file = new File(name);
+		}
+
+		if (!file.exists() && (dir != null)) {
+            if (dir.endsWith(System.getProperty("file.separator")))
+                name = dir + name;
+            else
+                name = dir + System.getProperty("file.separator") + name;
+
+            // System.out.println("expanded to: "+name);
+            // if (name.startsWith("ftp"))
+
+            file = new File(name);
+
+            if (file.exists())
+                return file;
+            // Ok, try to fix / and \ problems:
+            if (Globals.ON_WIN) {
+                // workaround for catching Java bug in regexp replacer
+                // and, why, why, why ... I don't get it - wegner 2006/01/22
+                try {
+                    name = name.replaceAll("/", "\\\\");
+                } catch (java.lang.StringIndexOutOfBoundsException exc) {
+                    System.err
+                        .println("An internal Java error was caused by the entry " +
+                            "\"" + name + "\"");
+                }
+            } else
+                name = name.replaceAll("\\\\", "/");
+            // System.out.println("expandFilename: "+name);
+            file = new File(name);
+            if (!file.exists())
+                file = null;
+        }
+        return file;
+    }
+	
+	/**
+	 * Converts an absolute filename to a relative one, if necessary.
+	 * Returns the parameter fileName itself if no shortening is possible 
+	 * 
+	 * This method works correctly only if dirs are sorted decent in their length
+	 * i.e. /home/user/literature/important before /home/user/literature 
+	 * 
+	 * @param dirs: directories to check. 
+	 */
+	public static File shortenFileName(File fileName, String[] dirs) {
+		if (fileName == null || fileName.length() == 0)
+			return fileName;
+		if (!fileName.isAbsolute() || (dirs == null)) 
+			return fileName;
+		
+		for (String dir: dirs) {
+			if (dir!=null) {
+				File result = shortenFileName(fileName, dir);
+				if ((result != null) && (!result.equals(fileName)))
+					return result;
+			}
+		}
+		return fileName;
+	}
+
+	public static File shortenFileName(File fileName, String dir) {
+		if (fileName == null || fileName.length() == 0)
+			return fileName;
+		if (!fileName.isAbsolute() || dir == null) 
+			return fileName;
+
+		String longName;
+        if (Globals.ON_WIN) {
+        	// case-insensitive matching on Windows
+        	longName = fileName.toString().toLowerCase();
+        	dir = dir.toLowerCase();
+        } else {
+        	longName = fileName.toString();
+        }
+        
+		if (!dir.endsWith(System.getProperty("file.separator")))
+			dir = dir.concat(System.getProperty("file.separator"));
+
+		if (longName.toString().startsWith(dir)) {
+			// result is based on original name, not on lower-cased name
+			String newName = fileName.toString().substring(dir.length());
+			return new File(newName);
+		} else {
+			return fileName;
+		}
+	}
+
+
+	private static String findInDir(String key, String dir, OpenFileFilter off, int count) {
+        if (count > 20)
+            return null; // Make sure an infinite loop doesn't occur.
+        File f = new File(dir);
+		File[] all = f.listFiles();
+		if (all == null)
+			return null; // An error occured. We may not have
+		// permission to list the files.
+
+		int numFiles = all.length;
+
+		for (int i = 0; i < numFiles; i++) {
+			File curFile = all[i];
+
+			if (curFile.isFile()) {
+				String name = curFile.getName();
+				if (name.startsWith(key + ".") && off.accept(name))
+					return curFile.getPath();
+
+			} else if (curFile.isDirectory()) {
+				String found = findInDir(key, curFile.getPath(), off, count+1);
+				if (found != null)
+					return found;
+			}
+		}
+		return null;
+	}
+
+    /**
+     * This methods assures all words in the given entry are recorded in their
+     * respective Completers, if any.
+     */
+    public static void updateCompletersForEntry(HashMap<String, AbstractAutoCompleter> autoCompleters, BibtexEntry bibtexEntry) {
+    	for (Map.Entry<String, AbstractAutoCompleter> entry : autoCompleters.entrySet()){    		
+            AbstractAutoCompleter comp = entry.getValue();
+            comp.addBibtexEntry(bibtexEntry);
+        }
+    }
+
+
+	/**
+	 * Sets empty or non-existing owner fields of bibtex entries inside a List
+	 * to a specified default value. Timestamp field is also set. Preferences
+	 * are checked to see if these options are enabled.
+	 * 
+	 * @param bibs
+	 *            List of bibtex entries
+	 */
+	public static void setAutomaticFields(Collection<BibtexEntry> bibs,
+             boolean overwriteOwner, boolean overwriteTimestamp, boolean markEntries) {
+
+
+		String timeStampField = Globals.prefs.get("timeStampField");
+
+		String defaultOwner = Globals.prefs.get("defaultOwner");
+		String timestamp = easyDateFormat();
+		boolean globalSetOwner = Globals.prefs.getBoolean("useOwner"),
+                globalSetTimeStamp = Globals.prefs.getBoolean("useTimeStamp");
+
+        // Do not need to do anything if all options are disabled
+		if (!(globalSetOwner || globalSetTimeStamp || markEntries))
+			return;
+
+        // Iterate through all entries
+		for (BibtexEntry curEntry : bibs){
+            boolean setOwner = globalSetOwner &&
+                (overwriteOwner || (curEntry.getField(BibtexFields.OWNER)==null));
+            boolean setTimeStamp = globalSetTimeStamp &&
+                (overwriteTimestamp || (curEntry.getField(timeStampField)==null));
+            setAutomaticFields(curEntry, setOwner, defaultOwner, setTimeStamp, timeStampField,
+				timestamp);
+            if (markEntries)
+                Util.markEntry(curEntry, IMPORT_MARK_LEVEL, false, new NamedCompound(""));
+		}
+
+	}
+
+	/**
+	 * Sets empty or non-existing owner fields of a bibtex entry to a specified
+	 * default value. Timestamp field is also set. Preferences are checked to
+	 * see if these options are enabled.
+	 * 
+	 * @param entry
+	 *            The entry to set fields for.
+     * @param overwriteOwner
+     *              Indicates whether owner should be set if it is already set.
+     * @param overwriteTimestamp
+     *              Indicates whether timestamp should be set if it is already set.
+	 */
+	public static void setAutomaticFields(BibtexEntry entry, boolean overwriteOwner,
+                                          boolean overwriteTimestamp) {
+		String defaultOwner = Globals.prefs.get("defaultOwner");
+		String timestamp = easyDateFormat();
+        String timeStampField = Globals.prefs.get("timeStampField");
+        boolean setOwner = Globals.prefs.getBoolean("useOwner") &&
+            (overwriteOwner || (entry.getField(BibtexFields.OWNER)==null));
+        boolean setTimeStamp = Globals.prefs.getBoolean("useTimeStamp") &&
+            (overwriteTimestamp || (entry.getField(timeStampField)==null));
+
+		setAutomaticFields(entry, setOwner, defaultOwner, setTimeStamp, timeStampField, timestamp);
+	}
+
+	private static void setAutomaticFields(BibtexEntry entry, boolean setOwner, String owner,
+		boolean setTimeStamp, String timeStampField, String timeStamp) {
+
+		// Set owner field if this option is enabled:
+		if (setOwner) {
+			// No or empty owner field?
+			// if (entry.getField(Globals.OWNER) == null
+			// || ((String) entry.getField(Globals.OWNER)).length() == 0) {
+			// Set owner field to default value
+			entry.setField(BibtexFields.OWNER, owner);
+			// }
+		}
+
+		if (setTimeStamp)
+			entry.setField(timeStampField, timeStamp);
+	}
+
+	/**
+	 * Copies a file.
+	 * 
+	 * @param source
+	 *            File Source file
+	 * @param dest
+	 *            File Destination file
+	 * @param deleteIfExists
+	 *            boolean Determines whether the copy goes on even if the file
+	 *            exists.
+	 * @throws IOException
+	 * @return boolean Whether the copy succeeded, or was stopped due to the
+	 *         file already existing.
+	 */
+	public static boolean copyFile(File source, File dest, boolean deleteIfExists)
+		throws IOException {
+
+		BufferedInputStream in = null;
+		BufferedOutputStream out = null;
+		try {
+			// Check if the file already exists.
+			if (dest.exists()) {
+				if (!deleteIfExists)
+					return false;
+				// else dest.delete();
+			}
+
+			in = new BufferedInputStream(new FileInputStream(source));
+			out = new BufferedOutputStream(new FileOutputStream(dest));
+			int el;
+			// int tell = 0;
+			while ((el = in.read()) >= 0) {
+				out.write(el);
+			}
+		} catch (IOException ex) {
+			throw ex;
+		} finally {
+			if (out != null) {
+				out.flush();
+				out.close();
+			}
+			if (in != null)
+				in.close();
+		}
+		return true;
+	}
+
+	/**
+	 * This method is called at startup, and makes necessary adaptations to
+	 * preferences for users from an earlier version of Jabref.
+	 */
+	public static void performCompatibilityUpdate() {
+
+		// Make sure "abstract" is not in General fields, because
+		// Jabref 1.55 moves the abstract to its own tab.
+		String genFields = Globals.prefs.get("generalFields");
+		// pr(genFields+"\t"+genFields.indexOf("abstract"));
+		if (genFields.indexOf("abstract") >= 0) {
+			// pr(genFields+"\t"+genFields.indexOf("abstract"));
+			String newGen;
+			if (genFields.equals("abstract"))
+				newGen = "";
+			else if (genFields.indexOf(";abstract;") >= 0) {
+				newGen = genFields.replaceAll(";abstract;", ";");
+			} else if (genFields.indexOf("abstract;") == 0) {
+				newGen = genFields.replaceAll("abstract;", "");
+			} else if (genFields.indexOf(";abstract") == genFields.length() - 9) {
+				newGen = genFields.replaceAll(";abstract", "");
+			} else
+				newGen = genFields;
+			// pr(newGen);
+			Globals.prefs.put("generalFields", newGen);
+		}
+
+	}
+
+    /**
+     * Collect file links from the given set of fields, and add them to the list contained
+     * in the field GUIGlobals.FILE_FIELD.
+     * @param database The database to modify.
+     * @param fields The fields to find links in.
+     * @return A CompoundEdit specifying the undo operation for the whole operation.
+     */
+    public static NamedCompound upgradePdfPsToFile(BibtexDatabase database, String[] fields) {
+    	return upgradePdfPsToFile(database.getEntryMap().values(), fields);
+    }
+
+    /**
+     * Collect file links from the given set of fields, and add them to the list contained
+     * in the field GUIGlobals.FILE_FIELD.
+     * @param entries The entries to modify.
+     * @param fields The fields to find links in.
+     * @return A CompoundEdit specifying the undo operation for the whole operation.
+     */
+    public static NamedCompound upgradePdfPsToFile(Collection<BibtexEntry> entries, String[] fields) {
+        NamedCompound ce = new NamedCompound(Globals.lang("Move external links to 'file' field"));
+        
+        for (BibtexEntry entry : entries){
+            FileListTableModel tableModel = new FileListTableModel();
+            // If there are already links in the file field, keep those on top:
+            String oldFileContent = entry.getField(GUIGlobals.FILE_FIELD);
+            if (oldFileContent != null) {
+                tableModel.setContent(oldFileContent);
+            }
+            int oldRowCount = tableModel.getRowCount();
+            for (int j = 0; j < fields.length; j++) {
+                String o = entry.getField(fields[j]);
+                if (o != null) {
+                    String s = o;
+                    if (s.trim().length() > 0) {
+                        File f = new File(s);
+                        FileListEntry flEntry = new FileListEntry(f.getName(), s,
+                                Globals.prefs.getExternalFileTypeByExt(fields[j]));
+                        tableModel.addEntry(tableModel.getRowCount(), flEntry);
+                        
+                        entry.clearField(fields[j]);
+                        ce.addEdit(new UndoableFieldChange(entry, fields[j], o, null));
+                    }
+                }
+            }
+            if (tableModel.getRowCount() != oldRowCount) {
+                String newValue = tableModel.getStringRepresentation();
+                entry.setField(GUIGlobals.FILE_FIELD, newValue);
+                ce.addEdit(new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD, oldFileContent, newValue));
+            }
+        }
+        ce.end();
+        return ce;
+    }
+
+    // -------------------------------------------------------------------------------
+
+	/**
+	 * extends the filename with a default Extension, if no Extension '.x' could
+	 * be found
+	 */
+	public static String getCorrectFileName(String orgName, String defaultExtension) {
+		if (orgName == null)
+			return "";
+
+		String back = orgName;
+		int t = orgName.indexOf(".", 1); // hidden files Linux/Unix (?)
+		if (t < 1)
+			back = back + "." + defaultExtension;
+
+		return back;
+	}
+
+	/**
+	 * Quotes each and every character, e.g. '!' as !. Used for verbatim
+	 * display of arbitrary strings that may contain HTML entities.
+	 */
+	public static String quoteForHTML(String s) {
+		StringBuffer sb = new StringBuffer();
+		for (int i = 0; i < s.length(); ++i) {
+			sb.append("&#" + (int) s.charAt(i) + ";");
+		}
+		return sb.toString();
+	}
+
+	public static String quote(String s, String specials, char quoteChar) {
+		return quote(s, specials, quoteChar, 0);
+	}
+
+	/**
+	 * Quote special characters.
+	 * 
+	 * @param s
+	 *            The String which may contain special characters.
+	 * @param specials
+	 *            A String containing all special characters except the quoting
+	 *            character itself, which is automatically quoted.
+	 * @param quoteChar
+	 *            The quoting character.
+	 * @param linewrap
+	 *            The number of characters after which a linebreak is inserted
+	 *            (this linebreak is undone by unquote()). Set to 0 to disable.
+	 * @return A String with every special character (including the quoting
+	 *         character itself) quoted.
+	 */
+	public static String quote(String s, String specials, char quoteChar, int linewrap) {
+		StringBuffer sb = new StringBuffer();
+		char c;
+		int linelength = 0;
+		boolean isSpecial;
+		for (int i = 0; i < s.length(); ++i) {
+			c = s.charAt(i);
+			isSpecial = specials.indexOf(c) >= 0 || c == quoteChar;
+			// linebreak?
+			if (linewrap > 0
+				&& (++linelength >= linewrap || (isSpecial && linelength >= linewrap - 1))) {
+				sb.append(quoteChar);
+				sb.append('\n');
+				linelength = 0;
+			}
+			if (isSpecial) {
+				sb.append(quoteChar);
+				++linelength;
+			}
+			sb.append(c);
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * Unquote special characters.
+	 * 
+	 * @param s
+	 *            The String which may contain quoted special characters.
+	 * @param quoteChar
+	 *            The quoting character.
+	 * @return A String with all quoted characters unquoted.
+	 */
+	public static String unquote(String s, char quoteChar) {
+		StringBuffer sb = new StringBuffer();
+		char c;
+		boolean quoted = false;
+		for (int i = 0; i < s.length(); ++i) {
+			c = s.charAt(i);
+			if (quoted) { // append literally...
+				if (c != '\n') // ...unless newline
+					sb.append(c);
+				quoted = false;
+			} else if (c != quoteChar) {
+				sb.append(c);
+			} else { // quote char
+				quoted = true;
+			}
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * Quote all regular expression meta characters in s, in order to search for
+	 * s literally.
+	 */
+	public static String quoteMeta(String s) {
+		// work around a bug: trailing backslashes have to be quoted
+		// individually
+		int i = s.length() - 1;
+		StringBuffer bs = new StringBuffer("");
+		while ((i >= 0) && (s.charAt(i) == '\\')) {
+			--i;
+			bs.append("\\\\");
+		}
+		s = s.substring(0, i + 1);
+		return "\\Q" + s.replaceAll("\\\\E", "\\\\E\\\\\\\\E\\\\Q") + "\\E" + bs.toString();
+	}
+
+	/**
+	 * This method "tidies" up e.g. a keyword string, by alphabetizing the words
+	 * and removing all duplicates.
+	 *
+	 * Currently not used anywhere
+	 */
+	public static String sortWordsAndRemoveDuplicates(String text) {
+		ArrayList<String> words = getSeparatedKeywords(text);
+		// by adding the words to a set, they are automatically sorted
+		TreeSet<String> set = new TreeSet<String>(words);
+		StringBuffer sb = new StringBuffer();
+		for (Iterator<String> i = set.iterator(); i.hasNext();) {
+			sb.append(i.next());
+			sb.append(", ");
+		}
+		if (sb.length() > 2)
+			sb.delete(sb.length() - 2, sb.length());
+		String result = sb.toString();
+		return result.length() > 2 ? result : "";
+	}
+
+	/**
+	 * Warns the user of undesired side effects of an explicit
+	 * assignment/removal of entries to/from this group. Currently there are
+	 * four types of groups: AllEntriesGroup, SearchGroup - do not support
+	 * explicit assignment. ExplicitGroup - never modifies entries. KeywordGroup -
+	 * only this modifies entries upon assignment/removal. Modifications are
+	 * acceptable unless they affect a standard field (such as "author") besides
+	 * the "keywords" field.
+	 * 
+	 * @param parent
+	 *            The Component used as a parent when displaying a confirmation
+	 *            dialog.
+	 * @return true if the assignment has no undesired side effects, or the user
+	 *         chose to perform it anyway. false otherwise (this indicates that
+	 *         the user has aborted the assignment).
+	 */
+	public static boolean warnAssignmentSideEffects(AbstractGroup[] groups, BibtexEntry[] entries,
+		BibtexDatabase db, Component parent) {
+		Vector<String> affectedFields = new Vector<String>();
+		for (int k = 0; k < groups.length; ++k) {
+			if (groups[k] instanceof KeywordGroup) {
+				KeywordGroup kg = (KeywordGroup) groups[k];
+				String field = kg.getSearchField().toLowerCase();
+				if (field.equals("keywords"))
+					continue; // this is not undesired
+				for (int i = 0, len = BibtexFields.numberOfPublicFields(); i < len; ++i) {
+					if (field.equals(BibtexFields.getFieldName(i))) {
+						affectedFields.add(field);
+						break;
+					}
+				}
+			}
+		}
+		if (affectedFields.size() == 0)
+			return true; // no side effects
+
+		// show a warning, then return
+		StringBuffer message = // JZTODO lyrics...
+		new StringBuffer("This action will modify the following field(s)\n"
+			+ "in at least one entry each:\n");
+		for (int i = 0; i < affectedFields.size(); ++i)
+			message.append(affectedFields.elementAt(i)).append("\n");
+		message.append("This could cause undesired changes to "
+			+ "your entries, so it is\nrecommended that you change the grouping field "
+			+ "in your group\ndefinition to \"keywords\" or a non-standard name."
+			+ "\n\nDo you still want to continue?");
+		int choice = JOptionPane.showConfirmDialog(parent, message, Globals.lang("Warning"),
+			JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
+		return choice != JOptionPane.NO_OPTION;
+
+		// if (groups instanceof KeywordGroup) {
+		// KeywordGroup kg = (KeywordGroup) groups;
+		// String field = kg.getSearchField().toLowerCase();
+		// if (field.equals("keywords"))
+		// return true; // this is not undesired
+		// for (int i = 0; i < GUIGlobals.ALL_FIELDS.length; ++i) {
+		// if (field.equals(GUIGlobals.ALL_FIELDS[i])) {
+		// // show a warning, then return
+		// String message = Globals // JZTODO lyrics...
+		// .lang(
+		// "This action will modify the \"%0\" field "
+		// + "of your entries.\nThis could cause undesired changes to "
+		// + "your entries, so it is\nrecommended that you change the grouping
+		// field "
+		// + "in your group\ndefinition to \"keywords\" or a non-standard name."
+		// + "\n\nDo you still want to continue?",
+		// field);
+		// int choice = JOptionPane.showConfirmDialog(parent, message,
+		// Globals.lang("Warning"), JOptionPane.YES_NO_OPTION,
+		// JOptionPane.WARNING_MESSAGE);
+		// return choice != JOptionPane.NO_OPTION;
+		// }
+		// }
+		// }
+		// return true; // found no side effects
+	}
+
+	// ========================================================
+	// lot of abreviations in medline
+	// PKC etc convert to {PKC} ...
+	// ========================================================
+	static Pattern titleCapitalPattern = Pattern.compile("[A-Z]+");
+
+	/**
+	 * Wrap all uppercase letters, or sequences of uppercase letters, in curly
+	 * braces. Ignore letters within a pair of # character, as these are part of
+	 * a string label that should not be modified.
+	 * 
+	 * @param s
+	 *            The string to modify.
+	 * @return The resulting string after wrapping capitals.
+	 */
+	public static String putBracesAroundCapitals(String s) {
+
+		boolean inString = false, isBracing = false, escaped = false;
+		int inBrace = 0;
+		StringBuffer buf = new StringBuffer();
+		for (int i = 0; i < s.length(); i++) {
+			// Update variables based on special characters:
+			int c = s.charAt(i);
+			if (c == '{')
+				inBrace++;
+			else if (c == '}')
+				inBrace--;
+			else if (!escaped && (c == '#'))
+				inString = !inString;
+
+			// See if we should start bracing:
+			if ((inBrace == 0) && !isBracing && !inString && Character.isLetter((char) c)
+				&& Character.isUpperCase((char) c)) {
+
+				buf.append('{');
+				isBracing = true;
+			}
+
+			// See if we should close a brace set:
+			if (isBracing && !(Character.isLetter((char) c) && Character.isUpperCase((char) c))) {
+
+				buf.append('}');
+				isBracing = false;
+			}
+
+			// Add the current character:
+			buf.append((char) c);
+
+			// Check if we are entering an escape sequence:
+			if ((c == '\\') && !escaped)
+				escaped = true;
+			else
+				escaped = false;
+
+		}
+		// Check if we have an unclosed brace:
+		if (isBracing)
+			buf.append('}');
+
+		return buf.toString();
+
+		/*
+		 * if (s.length() == 0) return s; // Protect against ArrayIndexOutOf....
+		 * StringBuffer buf = new StringBuffer();
+		 * 
+		 * Matcher mcr = titleCapitalPattern.matcher(s.substring(1)); while
+		 * (mcr.find()) { String replaceStr = mcr.group();
+		 * mcr.appendReplacement(buf, "{" + replaceStr + "}"); }
+		 * mcr.appendTail(buf); return s.substring(0, 1) + buf.toString();
+		 */
+	}
+
+	static Pattern bracedTitleCapitalPattern = Pattern.compile("\\{[A-Z]+\\}");
+
+	/**
+	 * This method looks for occurences of capital letters enclosed in an
+	 * arbitrary number of pairs of braces, e.g. "{AB}" or "{{T}}". All of these
+	 * pairs of braces are removed.
+	 * 
+	 * @param s
+	 *            The String to analyze.
+	 * @return A new String with braces removed.
+	 */
+	public static String removeBracesAroundCapitals(String s) {
+		String previous = s;
+		while ((s = removeSingleBracesAroundCapitals(s)).length() < previous.length()) {
+			previous = s;
+		}
+		return s;
+	}
+
+	/**
+	 * This method looks for occurences of capital letters enclosed in one pair
+	 * of braces, e.g. "{AB}". All these are replaced by only the capitals in
+	 * between the braces.
+	 * 
+	 * @param s
+	 *            The String to analyze.
+	 * @return A new String with braces removed.
+	 */
+	public static String removeSingleBracesAroundCapitals(String s) {
+		Matcher mcr = bracedTitleCapitalPattern.matcher(s);
+		StringBuffer buf = new StringBuffer();
+		while (mcr.find()) {
+			String replaceStr = mcr.group();
+			mcr.appendReplacement(buf, replaceStr.substring(1, replaceStr.length() - 1));
+		}
+		mcr.appendTail(buf);
+		return buf.toString();
+	}
+
+	/**
+	 * This method looks up what kind of external binding is used for the given
+	 * field, and constructs on OpenFileFilter suitable for browsing for an
+	 * external file.
+	 * 
+	 * @param fieldName
+	 *            The BibTeX field in question.
+	 * @return The file filter.
+	 */
+	public static OpenFileFilter getFileFilterForField(String fieldName) {
+		String s = BibtexFields.getFieldExtras(fieldName);
+		final String ext = "." + fieldName.toLowerCase();
+		final OpenFileFilter off;
+		if (s.equals("browseDocZip"))
+			off = new OpenFileFilter(new String[] { ext, ext + ".gz", ext + ".bz2" });
+		else
+			off = new OpenFileFilter(new String[] { ext });
+		return off;
+	}
+
+	/**
+	 * This method can be used to display a "rich" error dialog which offers the
+	 * entire stack trace for an exception.
+	 * 
+	 * @param parent
+	 * @param e
+	 */
+	public static void showQuickErrorDialog(JFrame parent, String title, Exception e) {
+		// create and configure a text area - fill it with exception text.
+		final JPanel pan = new JPanel(), details = new JPanel();
+		final CardLayout crd = new CardLayout();
+		pan.setLayout(crd);
+		final JTextArea textArea = new JTextArea();
+		textArea.setFont(new Font("Sans-Serif", Font.PLAIN, 10));
+		textArea.setEditable(false);
+		StringWriter writer = new StringWriter();
+		e.printStackTrace(new PrintWriter(writer));
+		textArea.setText(writer.toString());
+		JLabel lab = new JLabel(e.getMessage());
+		JButton flip = new JButton(Globals.lang("Details"));
+
+		FormLayout layout = new FormLayout("left:pref", "");
+		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+		builder.append(lab);
+		builder.nextLine();
+		builder.append(Box.createVerticalGlue());
+		builder.nextLine();
+		builder.append(flip);
+		final JPanel simple = builder.getPanel();
+
+		// stuff it in a scrollpane with a controlled size.
+		JScrollPane scrollPane = new JScrollPane(textArea);
+		scrollPane.setPreferredSize(new Dimension(350, 150));
+		details.setLayout(new BorderLayout());
+		details.add(scrollPane, BorderLayout.CENTER);
+
+		flip.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent event) {
+				crd.show(pan, "details");
+			}
+		});
+		pan.add(simple, "simple");
+		pan.add(details, "details");
+		// pass the scrollpane to the joptionpane.
+		JOptionPane.showMessageDialog(parent, pan, title, JOptionPane.ERROR_MESSAGE);
+	}
+
+	public static String wrapHTML(String s, final int lineWidth) {
+		StringBuffer sb = new StringBuffer();
+		StringTokenizer tok = new StringTokenizer(s);
+		int charsLeft = lineWidth;
+		while (tok.hasMoreTokens()) {
+			String word = tok.nextToken();
+			if (charsLeft == lineWidth) { // fresh line
+				sb.append(word);
+				charsLeft -= word.length();
+				if (charsLeft <= 0) {
+					sb.append("<br>\n");
+					charsLeft = lineWidth;
+				}
+			} else { // continue previous line
+				if (charsLeft < word.length() + 1) {
+					sb.append("<br>\n");
+					sb.append(word);
+					if (word.length() >= lineWidth - 1) {
+						sb.append("<br>\n");
+						charsLeft = lineWidth;
+					} else {
+						sb.append(" ");
+						charsLeft = lineWidth - word.length() - 1;
+					}
+				} else {
+					sb.append(' ').append(word);
+					charsLeft -= word.length() + 1;
+				}
+			}
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * Creates a String containing the current date (and possibly time),
+	 * formatted according to the format set in preferences under the key
+	 * "timeStampFormat".
+	 * 
+	 * @return The date string.
+	 */
+	public static String easyDateFormat() {
+		// Date today = new Date();
+		return easyDateFormat(new Date());
+	}
+
+	/**
+	 * Creates a readable Date string from the parameter date. The format is set
+	 * in preferences under the key "timeStampFormat".
+	 * 
+	 * @return The formatted date string.
+	 */
+	public static String easyDateFormat(Date date) {
+		// first use, create an instance
+		if (dateFormatter == null) {
+			String format = Globals.prefs.get("timeStampFormat");
+			dateFormatter = new SimpleDateFormat(format);
+		}
+		return dateFormatter.format(date);
+	}
+
+    public static void markEntry(BibtexEntry be, int markIncrement, boolean increment, NamedCompound ce) {
+		Object o = be.getField(BibtexFields.MARKED);
+        int prevMarkLevel = 0;
+        String newValue = null;
+		if (o != null) {
+            String s = o.toString();
+            int index = s.indexOf(Globals.prefs.WRAPPED_USERNAME);
+            if (index >= 0) {
+                // Already marked 1 for this user.
+                prevMarkLevel = 1;
+                newValue = s.substring(0, index)
+                    + s.substring(index+Globals.prefs.WRAPPED_USERNAME.length())
+                    + Globals.prefs.WRAPPED_USERNAME.substring(0,
+                        Globals.prefs.WRAPPED_USERNAME.length()-1)+":"+
+                        (increment ? Math.min(MAX_MARKING_LEVEL, prevMarkLevel+markIncrement)
+                                : markIncrement)+"]";
+            }
+            else {
+                Matcher m = markNumberPattern.matcher(s);
+                if (m.find()) {
+                    try {
+                        prevMarkLevel = Integer.parseInt(m.group(1));
+                        newValue = s.substring(0, m.start(1))+
+                                (increment ? Math.min(MAX_MARKING_LEVEL, prevMarkLevel+markIncrement)
+                                : markIncrement)+
+                                s.substring(m.end(1));
+                    } catch (NumberFormatException ex) {
+                        // Do nothing.
+                    }
+                }
+            }
+        }
+        if (newValue == null)
+            newValue = Globals.prefs.WRAPPED_USERNAME.substring(0,
+                Globals.prefs.WRAPPED_USERNAME.length()-1)+":"+markIncrement+"]";
+
+		ce.addEdit(new UndoableFieldChange(be, BibtexFields.MARKED, be
+			.getField(BibtexFields.MARKED), newValue));
+		be.setField(BibtexFields.MARKED, newValue);
+	}
+
+	public static void unmarkEntry(BibtexEntry be, boolean onlyMaxLevel,
+                                   BibtexDatabase database, NamedCompound ce) {
+		Object o = be.getField(BibtexFields.MARKED);
+		if (o != null) {
+			String s = o.toString();
+			if (s.equals("0")) {
+                if (!onlyMaxLevel) {
+                    unmarkOldStyle(be, database, ce);
+                }
+                return;
+			}
+            String newValue = null;
+            int index = s.indexOf(Globals.prefs.WRAPPED_USERNAME);
+            if (index >= 0) {
+                // Marked 1 for this user.
+                if (!onlyMaxLevel)
+                    newValue = s.substring(0, index)
+                        + s.substring(index+Globals.prefs.WRAPPED_USERNAME.length());
+                else return;
+            }
+            else {
+                Matcher m = markNumberPattern.matcher(s);
+                if (m.find()) {
+                    try {
+                        int prevMarkLevel = Integer.parseInt(m.group(1));
+                        if (!onlyMaxLevel || (prevMarkLevel == MARK_COLOR_LEVELS)) {
+                            if (prevMarkLevel > 1)
+                                newValue = s.substring(0, m.start(1))+
+                                        s.substring(m.end(1));
+                            else {
+                                String toRemove = Globals.prefs.WRAPPED_USERNAME.substring(0,
+                                    Globals.prefs.WRAPPED_USERNAME.length()-1)+":1]";
+                                index = s.indexOf(toRemove);
+                                if (index >= 0) {
+                                    newValue = s.substring(0, index)
+                                        + s.substring(index+toRemove.length());
+                                }
+                            }
+                        }
+                        else return;
+                    } catch (NumberFormatException ex) {
+                        // Do nothing.
+                    }
+                }
+            }
+
+			/*int piv = 0, hit;
+			StringBuffer sb = new StringBuffer();
+			while ((hit = s.indexOf(G047749118118
+			1110lobals.prefs.WRAPPED_USERNAME, piv)) >= 0) {
+				if (hit > 0)
+					sb.append(s.substring(piv, hit));
+				piv = hit + Globals.prefs.WRAPPED_USERNAME.length();
+			}
+			if (piv < s.length() - 1) {
+				sb.append(s.substring(piv));
+			}
+			String newVal = sb.length() > 0 ? sb.toString() : null;*/
+			ce.addEdit(new UndoableFieldChange(be, BibtexFields.MARKED, be
+				.getField(BibtexFields.MARKED), newValue));
+			be.setField(BibtexFields.MARKED, newValue);
+		}
+	}
+
+	/**
+	 * An entry is marked with a "0", not in the new style with user names. We
+	 * want to unmark it as transparently as possible. Since this shouldn't
+	 * happen too often, we do it by scanning the "owner" fields of the entire
+	 * database, collecting all user names. We then mark the entry for all users
+	 * except the current one. Thus only the user who unmarks will see that it
+	 * is unmarked, and we get rid of the old-style marking.
+	 * 
+	 * @param be
+	 * @param ce
+	 */
+	private static void unmarkOldStyle(BibtexEntry be, BibtexDatabase database, NamedCompound ce) {
+		TreeSet<Object> owners = new TreeSet<Object>();
+		for (BibtexEntry entry : database.getEntries()){
+			Object o = entry.getField(BibtexFields.OWNER);
+			if (o != null)
+				owners.add(o);
+			// System.out.println("Owner: "+entry.getField(Globals.OWNER));
+		}
+		owners.remove(Globals.prefs.get("defaultOwner"));
+		StringBuffer sb = new StringBuffer();
+		for (Iterator<Object> i = owners.iterator(); i.hasNext();) {
+			sb.append('[');
+			sb.append(i.next().toString());
+			sb.append(']');
+		}
+		String newVal = sb.toString();
+		if (newVal.length() == 0)
+			newVal = null;
+		ce.addEdit(new UndoableFieldChange(be, BibtexFields.MARKED, be
+			.getField(BibtexFields.MARKED), newVal));
+		be.setField(BibtexFields.MARKED, newVal);
+
+	}
+
+	public static int isMarked(BibtexEntry be) {
+		Object fieldVal = be.getField(BibtexFields.MARKED);
+		if (fieldVal == null)
+			return 0;
+		String s = (String) fieldVal;
+		if (s.equals("0"))
+            return 1;
+        int index = s.indexOf(Globals.prefs.WRAPPED_USERNAME);
+        if (index >= 0)
+            return 1;
+
+        Matcher m = markNumberPattern.matcher(s);
+        if (m.find()) {
+            try {
+                int value = Integer.parseInt(m.group(1));
+                return value;
+            } catch (NumberFormatException ex) {
+                return 1;
+            }
+        }
+        else return 0;
+        
+	}
+
+	/**
+	 * Set a given field to a given value for all entries in a Collection. This
+	 * method DOES NOT update any UndoManager, but returns a relevant
+	 * CompoundEdit that should be registered by the caller.
+	 * 
+	 * @param entries
+	 *            The entries to set the field for.
+	 * @param field
+	 *            The name of the field to set.
+	 * @param text
+	 *            The value to set. This value can be null, indicating that the
+	 *            field should be cleared.
+	 * @param overwriteValues
+	 *            Indicate whether the value should be set even if an entry
+	 *            already has the field set.
+	 * @return A CompoundEdit for the entire operation.
+	 */
+	public static UndoableEdit massSetField(Collection<BibtexEntry> entries, String field, String text,
+		boolean overwriteValues) {
+
+		NamedCompound ce = new NamedCompound(Globals.lang("Set field"));
+		for (BibtexEntry entry : entries){
+			String oldVal = entry.getField(field);
+			// If we are not allowed to overwrite values, check if there is a
+			// nonempty
+			// value already for this entry:
+			if (!overwriteValues && (oldVal != null) && ((oldVal).length() > 0))
+				continue;
+			if (text != null)
+				entry.setField(field, text);
+			else
+				entry.clearField(field);
+			ce.addEdit(new UndoableFieldChange(entry, field, oldVal, text));
+		}
+		ce.end();
+		return ce;
+	}
+
+    /**
+     * Move contents from one field to another for a Collection of entries.
+     * @param entries The entries to do this operation for.
+     * @param field The field to move contents from.
+     * @param newField The field to move contents into.
+     * @param overwriteValues If true, overwrites any existing values in the new field.
+     *          If false, makes no change for entries with existing value in the new field.
+     * @return A CompoundEdit for the entire operation.
+     */
+    public static UndoableEdit massRenameField(Collection<BibtexEntry> entries, String field,
+                String newField, boolean overwriteValues) {
+        NamedCompound ce = new NamedCompound(Globals.lang("Rename field"));
+		for (BibtexEntry entry : entries){
+			String valToMove = entry.getField(field);
+            // If there is no value, do nothing:
+            if ((valToMove == null) || (valToMove.length() == 0))
+                continue;
+            // If we are not allowed to overwrite values, check if there is a
+			// nonempy value already for this entry for the new field:
+            String valInNewField = entry.getField(newField);
+            if (!overwriteValues && (valInNewField != null) && (valInNewField.length() > 0))
+                continue;
+
+			entry.setField(newField, valToMove);
+            ce.addEdit(new UndoableFieldChange(entry, newField, valInNewField,valToMove));
+            entry.clearField(field);
+            ce.addEdit(new UndoableFieldChange(entry, field, valToMove, null));
+		}
+		ce.end();
+		return ce;
+    }
+
+	/**
+	 * Make a list of supported character encodings that can encode all
+	 * characters in the given String.
+	 * 
+	 * @param characters
+	 *            A String of characters that should be supported by the
+	 *            encodings.
+	 * @return A List of character encodings
+	 */
+	public static List<String> findEncodingsForString(String characters) {
+		List<String> encodings = new ArrayList<String>();
+		for (int i = 0; i < Globals.ENCODINGS.length; i++) {
+			CharsetEncoder encoder = Charset.forName(Globals.ENCODINGS[i]).newEncoder();
+			if (encoder.canEncode(characters))
+				encodings.add(Globals.ENCODINGS[i]);
+		}
+		return encodings;
+	}
+
+	/**
+	 * Will convert a two digit year using the following scheme (describe at
+	 * http://www.filemaker.com/help/02-Adding%20and%20view18.html):
+	 * 
+	 * If a two digit year is encountered they are matched against the last 69
+	 * years and future 30 years.
+	 * 
+	 * For instance if it is the year 1992 then entering 23 is taken to be 1923
+	 * but if you enter 23 in 1993 then it will evaluate to 2023.
+	 * 
+	 * @param year
+	 *            The year to convert to 4 digits.
+	 * @return
+	 */
+	public static String toFourDigitYear(String year) {
+		if (thisYear == 0) {
+			thisYear = Calendar.getInstance().get(Calendar.YEAR);
+		}
+		return toFourDigitYear(year, thisYear);
+	}
+
+	public static int thisYear;
+
+	/**
+	 * Will convert a two digit year using the following scheme (describe at
+	 * http://www.filemaker.com/help/02-Adding%20and%20view18.html):
+	 * 
+	 * If a two digit year is encountered they are matched against the last 69
+	 * years and future 30 years.
+	 * 
+	 * For instance if it is the year 1992 then entering 23 is taken to be 1923
+	 * but if you enter 23 in 1993 then it will evaluate to 2023.
+	 * 
+	 * @param year
+	 *            The year to convert to 4 digits.
+	 * @return
+	 */
+	public static String toFourDigitYear(String year, int thisYear) {
+		if (year.length() != 2)
+			return year;
+		try {
+			int thisYearTwoDigits = thisYear % 100;
+			int thisCentury = thisYear - thisYearTwoDigits;
+
+			int yearNumber = Integer.parseInt(year);
+
+			if (yearNumber == thisYearTwoDigits) {
+				return String.valueOf(thisYear);
+			}
+			// 20 , 90
+			// 99 > 30
+			if ((yearNumber + 100 - thisYearTwoDigits) % 100 > 30) {
+				if (yearNumber < thisYearTwoDigits) {
+					return String.valueOf(thisCentury + yearNumber);
+				} else {
+					return String.valueOf(thisCentury - 100 + yearNumber);
+				}
+			} else {
+				if (yearNumber < thisYearTwoDigits) {
+					return String.valueOf(thisCentury + 100 + yearNumber);
+				} else {
+					return String.valueOf(thisCentury + yearNumber);
+				}
+			}
+		} catch (NumberFormatException e) {
+			return year;
+		}
+	}
+
+	/**
+	 * Will return an integer indicating the month of the entry from 0 to 11.
+	 * 
+	 * -1 signals a unknown month string.
+	 * 
+	 * This method accepts three types of months given:
+	 *  - Single and Double Digit months from 1 to 12 (01 to 12)
+	 *  - 3 Digit BibTex strings (jan, feb, mar...)
+	 *  - Full English Month identifiers.
+	 * 
+	 * @param month
+	 * @return
+	 */
+	public static int getMonthNumber(String month) {
+
+		month = month.replaceAll("#", "").toLowerCase();
+
+		for (int i = 0; i < Globals.MONTHS.length; i++) {
+			if (month.startsWith(Globals.MONTHS[i])) {
+				return i;
+			}
+		}
+
+		try {
+			return Integer.parseInt(month) - 1;
+		} catch (NumberFormatException e) {
+		}
+		return -1;
+	}
+
+
+    /**
+     * Encodes a two-dimensional String array into a single string, using ':' and
+     * ';' as separators. The characters ':' and ';' are escaped with '\'.
+     * @param values The String array.
+     * @return The encoded String.
+     */
+    public static String encodeStringArray(String[][] values) {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < values.length; i++) {
+            sb.append(encodeStringArray(values[i]));
+            if (i < values.length-1)
+                sb.append(';');
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Encodes a String array into a single string, using ':' as separator.
+     * The characters ':' and ';' are escaped with '\'.
+     * @param entry The String array.
+     * @return The encoded String.
+     */
+    public static String encodeStringArray(String[] entry) {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < entry.length; i++) {
+            sb.append(encodeString(entry[i]));
+            if (i < entry.length-1)
+                sb.append(':');
+
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Decodes an encoded double String array back into array form. The array
+     * is assumed to be square, and delimited by the characters ';' (first dim) and
+     * ':' (second dim).
+     * @param value The encoded String to be decoded.
+     * @return The decoded String array.
+     */
+    public static String[][] decodeStringDoubleArray(String value) {
+        ArrayList<ArrayList<String>> newList = new ArrayList<ArrayList<String>>();
+        StringBuilder sb = new StringBuilder();
+        ArrayList<String> thisEntry = new ArrayList<String>();
+        boolean escaped = false;
+        for (int i=0; i<value.length(); i++) {
+            char c = value.charAt(i);
+            if (!escaped && (c == '\\')) {
+                escaped = true;
+                continue;
+            }
+            else if (!escaped && (c == ':')) {
+                thisEntry.add(sb.toString());
+                sb = new StringBuilder();
+            }
+            else if (!escaped && (c == ';')) {
+                thisEntry.add(sb.toString());
+                sb = new StringBuilder();
+                newList.add(thisEntry);
+                thisEntry = new ArrayList<String>();
+            }
+            else sb.append(c);
+            escaped = false;
+        }
+        if (sb.length() > 0)
+            thisEntry.add(sb.toString());
+        if (thisEntry.size() > 0)
+            newList.add(thisEntry);
+
+        // Convert to String[][]:
+        String[][] res = new String[newList.size()][];
+        for (int i = 0; i < res.length; i++) {
+            res[i] = new String[newList.get(i).size()];
+            for (int j = 0; j < res[i].length; j++) {
+                res[i][j] = newList.get(i).get(j);
+            }
+        }
+        return res;
+    }
+
+    private static String encodeString(String s) {
+        if (s == null)
+            return null;
+        StringBuilder sb = new StringBuilder();
+        for (int i=0; i<s.length(); i++) {
+            char c = s.charAt(i);
+            if ((c == ';') || (c == ':') || (c == '\\'))
+                sb.append('\\');
+            sb.append(c);
+        }
+        return sb.toString();
+    }
+
+    /**
+	 * Static equals that can also return the right result when one of the
+	 * objects is null.
+	 * 
+	 * @param one
+	 *            The object whose equals method is called if the first is not
+	 *            null.
+	 * @param two
+	 *            The object passed to the first one if the first is not null.
+	 * @return <code>one == null ? two == null : one.equals(two);</code>
+	 */
+	public static boolean equals(Object one, Object two) {
+		return one == null ? two == null : one.equals(two);
+	}
+
+	/**
+	 * Returns the given string but with the first character turned into an
+	 * upper case character.
+	 * 
+	 * Example: testTest becomes TestTest
+	 * 
+	 * @param string
+	 *            The string to change the first character to upper case to.
+	 * @return A string has the first character turned to upper case and the
+	 *         rest unchanged from the given one.
+	 */
+	public static String toUpperFirstLetter(String string){
+		if (string == null)
+			throw new IllegalArgumentException();
+		
+		if (string.length() == 0)
+			return string;
+		
+		return Character.toUpperCase(string.charAt(0)) + string.substring(1);
+	}
+
+
+    /**
+     * Run an AbstractWorker's methods using Spin features to put each method
+     * on the correct thread.
+     * @param worker The worker to run.
+     * @throws Throwable 
+     */
+    public static void runAbstractWorker(AbstractWorker worker) throws Throwable {
+        // This part uses Spin's features:
+        Worker wrk = worker.getWorker();
+        // The Worker returned by getWorker() has been wrapped
+        // by Spin.off(), which makes its methods be run in
+        // a different thread from the EDT.
+        CallBack clb = worker.getCallBack();
+
+        worker.init(); // This method runs in this same thread, the EDT.
+        // Useful for initial GUI actions, like printing a message.
+
+        // The CallBack returned by getCallBack() has been wrapped
+        // by Spin.over(), which makes its methods be run on
+        // the EDT.
+        wrk.run(); // Runs the potentially time-consuming action
+        // without freezing the GUI. The magic is that THIS line
+        // of execution will not continue until run() is finished.
+        clb.update(); // Runs the update() method on the EDT.
+    }
+
+    /**
+     * This method checks whether there is a lock file for the given file. If
+     * there is, it waits for 500 ms. This is repeated until the lock is gone
+     * or we have waited the maximum number of times.
+     *
+     * @param file The file to check the lock for.
+     * @param maxWaitCount The maximum number of times to wait.
+     * @return true if the lock file is gone, false if it is still there.
+     */
+    public static boolean waitForFileLock(File file, int maxWaitCount) {
+        // Check if the file is locked by another JabRef user:
+        int lockCheckCount = 0;
+        while (Util.hasLockFile(file)) {
+
+            if (lockCheckCount++ == maxWaitCount) {
+                return false;
+            }
+            try { Thread.sleep(500); } catch (InterruptedException ex) {}
+        }
+        return true;
+    }
+
+    /**
+     * Check whether a lock file exists for this file.
+     * @param file The file to check.
+     * @return true if a lock file exists, false otherwise.
+     */
+    public static boolean hasLockFile(File file) {
+        File lock = new File(file.getPath()+ SaveSession.LOCKFILE_SUFFIX);
+        return lock.exists();
+    }
+
+    /**
+     * Find the lock file's last modified time, if it has a lock file.
+     * @param file The file to check.
+     * @return the last modified time if lock file exists, -1 otherwise.
+     */
+    public static long getLockFileTimeStamp(File file) {
+        File lock = new File(file.getPath()+ SaveSession.LOCKFILE_SUFFIX);
+        return lock.exists() ? lock.lastModified() : -1;
+    }
+
+        /**
+     * Check if a lock file exists, and delete it if it does.
+     * @return true if the lock file existed, false otherwise.
+     * @throws IOException if something goes wrong.
+     */
+    public static boolean deleteLockFile(File file) {
+        File lock = new File(file.getPath()+SaveSession.LOCKFILE_SUFFIX);
+        if (!lock.exists()) {
+            return false;
+        }
+        lock.delete();
+        return true;
+    }
+
+    /**
+     * Build a String array containing all those elements of all that are not
+     * in subset.
+     * @param all The array of all values.
+     * @param subset The subset of values.
+     * @return The remainder that is not part of the subset.
+     */
+    public static String[] getRemainder(String[] all, String[] subset) {
+        ArrayList<String> al = new ArrayList<String>();
+        for (int i = 0; i < all.length; i++) {
+            boolean found = false;
+            inner: for (int j = 0; j < subset.length; j++) {
+                if (subset[j].equals(all[i])) {
+                    found = true;
+                    break inner;
+                }
+            }
+            if (!found) al.add(all[i]);
+        }
+        return al.toArray(new String[al.size()]);
+    }
+
+    public static <T> T[] concat(T[] first, T[] second) {
+	T[] result = Arrays.copyOf(first, first.length + second.length);
+	System.arraycopy(second, 0, result, first.length, second.length);
+	return result;
+    }
+
+
+    /**
+     * Determines filename provided by an entry in a database
+     *
+     * @param database the database, where the entry is located
+     * @param entry the entry to which the file should be linked to
+     * @return a suggested fileName
+     */
+    public static String getLinkedFileName(BibtexDatabase database, BibtexEntry entry) {
+        String targetName = entry.getCiteKey() == null ? "default" : entry.getCiteKey();
+		StringReader sr = new StringReader(Globals.prefs.get(ImportSettingsTab.PREF_IMPORT_FILENAMEPATTERN));
+		Layout layout = null;
+		try {
+			layout = new LayoutHelper(sr).getLayoutFromText(Globals.FORMATTER_PACKAGE);
+		} catch (Exception e) {
+			Globals.logger(Globals.lang("Wrong Format").concat(" ").concat(e.toString()));
+		}
+		if (layout != null) {
+			targetName = layout.doLayout(entry, database);
+		}
+		//Removes illegal characters from filename
+		targetName = FileNameCleaner.cleanFileName(targetName);
+        return targetName;
+    }
+    
+    // DOI-regexp provided by http://stackoverflow.com/a/10324802/873282
+    private static final String REGEXP_PLAINDOI = "\\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?![\"&\\'<>])\\S)+)\\b";
+    private static final String REGEXP_DOI_WITH_HTTP_PREFIX = "http[s]?://[^\\s]*?" + REGEXP_PLAINDOI;
+    private static final Pattern PATTERN_PLAINDOI = Pattern.compile(REGEXP_PLAINDOI);
+
+    /**
+   	 * Check if the String matches a DOI (with http://...)
+   	 */
+    public static boolean checkForDOIwithHTTPprefix(String check) {
+    	if (check == null)
+    		return false;
+    	else
+    		return check.matches(".*" + REGEXP_DOI_WITH_HTTP_PREFIX + ".*");
+	}
+    
+    /**
+     * 
+     * @param check - string to check
+     * @return true if "check" contains a DOI
+     */
+    public static boolean checkForPlainDOI(String check) {
+    	if (check == null)
+    		return false;
+    	else
+    		return check.matches(".*" + REGEXP_PLAINDOI + ".*");
+    }
+       
+    /**
+   	 * Remove the http://... from DOI
+   	 * 
+   	 * @param doi - may not be null
+   	 * @return first DOI in the given String (without http://... prefix). If no DOI exists, the complete string is returned
+   	 */
+   	public static String getDOI(String doi) {
+        Matcher matcher = PATTERN_PLAINDOI.matcher(doi);
+        if (matcher.find()) {
+            return matcher.group();
+        } else {
+            return doi;
+        }
+   	}
+
+	public static void removeDOIfromBibtexEntryField(BibtexEntry bes, String fieldName, NamedCompound ce) {
+		String origValue = bes.getField(fieldName);
+		String value = origValue;
+		value = value.replaceAll(REGEXP_DOI_WITH_HTTP_PREFIX, "");
+		value = value.replaceAll(REGEXP_PLAINDOI, "");
+		value = value.trim(); 
+		if (value.isEmpty()) value = null;
+		if (!origValue.equals(value)) {
+			ce.addEdit(new UndoableFieldChange(bes, fieldName, origValue, value));
+			bes.setField(fieldName, value);
+		}
+	}
+    
+    /**
+     * 
+     * @param fileName
+     * @param fileType
+     * @param destFilename
+     * @param edits
+     * @return
+     */
+    public static boolean renameFile(String fileName, String destFilename)
+    {
+    	// File (or directory) with old name
+    	File fromFile = new File(fileName);
+
+    	// File (or directory) with new name
+    	File toFile = new File(destFilename);
+    	
+    	// Rename file (or directory)
+    	boolean success = fromFile.renameTo(toFile);
+    	return success;
+    }
+
+	public static ArrayList<String> getSeparatedKeywords(String keywords) {
+		ArrayList<String> res = new ArrayList<String>();
+		if (keywords == null) return res;
+		// _NOSPACE is a hack to support keywords such as "choreography transactions"
+		// a more intelligent algorithm would check for the separator chosen (SEPARATING_CHARS_NOSPACE)
+		// if nothing is found, " " is likely to be the separating char.
+		// solution by RisKeywords.java: s.split(",[ ]*")
+		StringTokenizer tok = new StringTokenizer(keywords, Globals.SEPARATING_CHARS_NOSPACE);
+		while (tok.hasMoreTokens()) {
+			String word = tok.nextToken().trim();
+			res.add(word);
+		}
+		return res;
+	}
+	
+	public static ArrayList<String> getSeparatedKeywords(BibtexEntry be) {
+		return getSeparatedKeywords(be.getField("keywords"));
+	}
+	
+	public static void putKeywords(BibtexEntry entry, ArrayList<String> keywords, NamedCompound ce) {
+		// Set Keyword Field
+		String oldValue = entry.getField("keywords");
+		String newValue;
+		if (keywords.size() > 0) {
+			StringBuilder sb = new StringBuilder();
+			for (String keyword: keywords) {
+				sb.append(keyword);
+				sb.append(", ");
+			}
+			sb.delete(sb.length()-2, sb.length());
+			newValue = sb.toString();
+		} else {
+			newValue = null;
+		}
+		if ((oldValue == null) && (newValue == null))
+			return;
+		if ((oldValue == null) || (!oldValue.equals(newValue))) {
+			entry.setField("keywords", newValue);
+			if (ce!=null) ce.addEdit(new UndoableFieldChange(entry, "keywords", oldValue, newValue));
+		}
+	}
+	
+	/**
+	 * @param ce indicates the undo named compound. May be null
+	 */
+	public static void updateField(BibtexEntry be, String field, String newValue, NamedCompound ce) {
+		updateField(be, field, newValue, ce, false);
+	}
+
+	/**
+	 * @param ce indicates the undo named compound. May be null
+	 */
+	public static void updateField(BibtexEntry be, String field, String newValue, NamedCompound ce, Boolean nullFieldIfValueIsTheSame) {
+		String oldValue = be.getField(field);
+		if (nullFieldIfValueIsTheSame && (oldValue != null) && (oldValue.equals(newValue))) {
+			// if oldValue == newValue then reset field if required by parameter
+			newValue = null;
+		}
+		if ((oldValue == null) && (newValue == null))
+			return;
+		if ((oldValue==null) || (!oldValue.equals(newValue))) {
+			be.setField(field, newValue);
+			if (ce!=null) ce.addEdit(new UndoableFieldChange(be, field, oldValue, newValue));
+		}
+	}
+
+	/**
+	 * Binds ESC-Key to cancel button
+	 * @param rootPane the pane to bind the action to. Typically, this variable is retrieved by this.getRootPane();
+	 * @param cancelAction the action to bind
+	 */
+	public static void bindCloseDialogKeyToCancelAction(JRootPane rootPane,
+            Action cancelAction) {
+		InputMap im = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+		ActionMap am = rootPane.getActionMap();
+	    im.put(Globals.prefs.getKey("Close dialog"), "close");
+	    am.put("close", cancelAction);
+    }
+
+	/**
+	 * Download the URL and return contents as a String.
+	 * @param source
+	 * @return
+	 * @throws IOException
+	 */
+	public static String getResults(URLConnection source) throws IOException {
+	    
+	    InputStream in = source.getInputStream();
+	    StringBuffer sb = new StringBuffer();
+	    byte[] buffer = new byte[256];
+	    while(true) {
+	        int bytesRead = in.read(buffer);
+	        if(bytesRead == -1) break;
+	        for (int i=0; i<bytesRead; i++)
+	            sb.append((char)buffer[i]);
+	    }
+	    return sb.toString();
+	}
+}
+
diff --git a/src/java/net/sf/jabref/Worker.java b/src/java/net/sf/jabref/Worker.java
index 0ac942c..0304b62 100644
--- a/src/java/net/sf/jabref/Worker.java
+++ b/src/java/net/sf/jabref/Worker.java
@@ -1,26 +1,26 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-
-/**
- * ...
- */
-public interface Worker {
-
-    public void run();
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+
+/**
+ * ...
+ */
+public interface Worker {
+
+    public void run();
+
+}
diff --git a/src/java/net/sf/jabref/XmpPrefsTab.java b/src/java/net/sf/jabref/XmpPrefsTab.java
index 9447fad..03087df 100644
--- a/src/java/net/sf/jabref/XmpPrefsTab.java
+++ b/src/java/net/sf/jabref/XmpPrefsTab.java
@@ -1,250 +1,250 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.util.Vector;
-
-import javax.swing.*;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableColumnModel;
-import javax.swing.table.TableModel;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Preference Tab for XMP.
- * 
- * Allows the user to enable and configure the XMP privacy filter.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-class XmpPrefsTab extends JPanel implements PrefsTab {
-
-	boolean tableChanged = false;
-
-	int rowCount;
-
-	JTable table;
-
-	JCheckBox privacyFilterCheckBox = new JCheckBox(Globals
-		.lang("Do not write the following fields to XMP Metadata:"));
-
-	Vector<Object> tableRows = new Vector<Object>(10);
-
-	/**
-	 * Customization of external program paths.
-	 */
-	public XmpPrefsTab() {
-		setLayout(new BorderLayout());
-
-		TableModel tm = new AbstractTableModel() {
-			public int getRowCount() {
-				return rowCount;
-			}
-
-			public int getColumnCount() {
-				return 1;
-			}
-
-			public Object getValueAt(int row, int column) {
-				if (row >= tableRows.size())
-					return "";
-				Object rowContent = tableRows.elementAt(row);
-				if (rowContent == null)
-					return "";
-				return rowContent;
-			}
-
-			public String getColumnName(int col) {
-				return Globals.lang("Field to filter");
-			}
-
-			public Class<?> getColumnClass(int column) {
-				return String.class;
-			}
-
-			public boolean isCellEditable(int row, int col) {
-				return true;
-			}
-
-			public void setValueAt(Object value, int row, int col) {
-				tableChanged = true;
-
-				if (tableRows.size() <= row) {
-					tableRows.setSize(row + 1);
-				}
-
-				tableRows.setElementAt(value, row);
-			}
-
-		};
-
-		table = new JTable(tm);
-		TableColumnModel cm = table.getColumnModel();
-		cm.getColumn(0).setPreferredWidth(140);
-
-		FormLayout layout = new FormLayout("1dlu, 8dlu, left:pref, 4dlu, fill:pref", "");
-		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-		JPanel pan = new JPanel();
-
-		JPanel tablePanel = new JPanel();
-		tablePanel.setLayout(new BorderLayout());
-		JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-			JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-		table.setPreferredScrollableViewportSize(new Dimension(250, 200));
-		scrollPane.setMinimumSize(new Dimension(250, 300));
-		tablePanel.add(scrollPane, BorderLayout.CENTER);
-
-		JToolBar toolbar = new JToolBar(SwingConstants.VERTICAL);
-		toolbar.setFloatable(false);
-		toolbar.setBorder(null);
-		toolbar.add(new AddRowAction());
-		toolbar.add(new DeleteRowAction());
-
-		tablePanel.add(toolbar, BorderLayout.EAST);
-
-		// Build Prefs Tabs
-		builder.appendSeparator(Globals.lang("XMP Export Privacy Settings"));
-		builder.nextLine();
-
-		builder.append(pan);
-		builder.append(privacyFilterCheckBox);
-		builder.nextLine();
-
-		builder.append(pan);
-		builder.append(tablePanel);
-		builder.nextLine();
-
-		pan = builder.getPanel();
-		pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-		add(pan, BorderLayout.CENTER);
-	}
-
-	class DeleteRowAction extends AbstractAction {
-		public DeleteRowAction() {
-			super("Delete row", GUIGlobals.getImage("remove"));
-			putValue(SHORT_DESCRIPTION, Globals.lang("Delete rows"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			int[] rows = table.getSelectedRows();
-			if (rows.length == 0)
-				return;
-
-			for (int i = rows.length - 1; i >= 0; i--) {
-				if (rows[i] < tableRows.size()) {
-					tableRows.remove(rows[i]);
-				}
-			}
-			rowCount -= rows.length;
-			if (rows.length > 1)
-				table.clearSelection();
-			table.revalidate();
-			table.repaint();
-			tableChanged = true;
-		}
-	}
-
-	class AddRowAction extends AbstractAction {
-		public AddRowAction() {
-			super("Add row", GUIGlobals.getImage("add"));
-			putValue(SHORT_DESCRIPTION, Globals.lang("Insert rows"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			int[] rows = table.getSelectedRows();
-			if (rows.length == 0) {
-				// No rows selected, so we just add one at the end.
-				rowCount++;
-				table.revalidate();
-				table.repaint();
-				return;
-			}
-			for (int i = 0; i < rows.length; i++) {
-				if (rows[i] + i < tableRows.size())
-					tableRows.add(rows[i] + i, "");
-			}
-			rowCount += rows.length;
-			if (rows.length > 1)
-				table.clearSelection();
-			table.revalidate();
-			table.repaint();
-			tableChanged = true;
-		}
-	}
-
-	/**
-	 * Load settings from the preferences and initialize the table.
-	 */
-	public void setValues() {
-		tableRows.clear();
-		String[] names = JabRefPreferences.getInstance().getStringArray("xmpPrivacyFilters");
-		for (int i = 0; i < names.length; i++) {
-			tableRows.add(names[i]);
-		}
-		rowCount = tableRows.size() + 5;
-
-		privacyFilterCheckBox.setSelected(JabRefPreferences.getInstance().getBoolean(
-			"useXmpPrivacyFilter"));
-	}
-
-	/**
-	 * Store changes to table preferences. This method is called when the user
-	 * clicks Ok.
-	 * 
-	 */
-	public void storeSettings() {
-
-		if (table.isEditing()) {
-			int col = table.getEditingColumn();
-			int row = table.getEditingRow();
-			table.getCellEditor(row, col).stopCellEditing();
-		}
-
-		// Now we need to make sense of the contents the user has made to the
-		// table setup table. This needs to be done either if changes were made, or
-        // if the checkbox is checked and no field values have been stored previously: 
-        if (tableChanged ||
-                (privacyFilterCheckBox.isSelected() && !Globals.prefs.hasKey("xmpPrivacyFilters"))) {
-
-			// First we remove all rows with empty names.
-			for (int i = tableRows.size() - 1; i >= 0; i--) {
-				if (tableRows.elementAt(i).equals(""))
-					tableRows.removeElementAt(i);
-			}
-
-			// Finally, we store the new preferences.
-			JabRefPreferences.getInstance().putStringArray("xmpPrivacyFilters",
-				tableRows.toArray(new String[tableRows.size()]));
-		}
-
-		JabRefPreferences.getInstance().putBoolean("useXmpPrivacyFilter", privacyFilterCheckBox.isSelected());
-	}
-
-	public boolean readyToClose() {
-		return true;
-	}
-
-	public String getTabName() {
-		return Globals.lang("XMP metadata");
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.util.Vector;
+
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableModel;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Preference Tab for XMP.
+ * 
+ * Allows the user to enable and configure the XMP privacy filter.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+class XmpPrefsTab extends JPanel implements PrefsTab {
+
+	boolean tableChanged = false;
+
+	int rowCount;
+
+	JTable table;
+
+	JCheckBox privacyFilterCheckBox = new JCheckBox(Globals
+		.lang("Do not write the following fields to XMP Metadata:"));
+
+	Vector<Object> tableRows = new Vector<Object>(10);
+
+	/**
+	 * Customization of external program paths.
+	 */
+	public XmpPrefsTab() {
+		setLayout(new BorderLayout());
+
+		TableModel tm = new AbstractTableModel() {
+			public int getRowCount() {
+				return rowCount;
+			}
+
+			public int getColumnCount() {
+				return 1;
+			}
+
+			public Object getValueAt(int row, int column) {
+				if (row >= tableRows.size())
+					return "";
+				Object rowContent = tableRows.elementAt(row);
+				if (rowContent == null)
+					return "";
+				return rowContent;
+			}
+
+			public String getColumnName(int col) {
+				return Globals.lang("Field to filter");
+			}
+
+			public Class<?> getColumnClass(int column) {
+				return String.class;
+			}
+
+			public boolean isCellEditable(int row, int col) {
+				return true;
+			}
+
+			public void setValueAt(Object value, int row, int col) {
+				tableChanged = true;
+
+				if (tableRows.size() <= row) {
+					tableRows.setSize(row + 1);
+				}
+
+				tableRows.setElementAt(value, row);
+			}
+
+		};
+
+		table = new JTable(tm);
+		TableColumnModel cm = table.getColumnModel();
+		cm.getColumn(0).setPreferredWidth(140);
+
+		FormLayout layout = new FormLayout("1dlu, 8dlu, left:pref, 4dlu, fill:pref", "");
+		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+		JPanel pan = new JPanel();
+
+		JPanel tablePanel = new JPanel();
+		tablePanel.setLayout(new BorderLayout());
+		JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+			JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+		table.setPreferredScrollableViewportSize(new Dimension(250, 200));
+		scrollPane.setMinimumSize(new Dimension(250, 300));
+		tablePanel.add(scrollPane, BorderLayout.CENTER);
+
+		JToolBar toolbar = new JToolBar(SwingConstants.VERTICAL);
+		toolbar.setFloatable(false);
+		toolbar.setBorder(null);
+		toolbar.add(new AddRowAction());
+		toolbar.add(new DeleteRowAction());
+
+		tablePanel.add(toolbar, BorderLayout.EAST);
+
+		// Build Prefs Tabs
+		builder.appendSeparator(Globals.lang("XMP Export Privacy Settings"));
+		builder.nextLine();
+
+		builder.append(pan);
+		builder.append(privacyFilterCheckBox);
+		builder.nextLine();
+
+		builder.append(pan);
+		builder.append(tablePanel);
+		builder.nextLine();
+
+		pan = builder.getPanel();
+		pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+		add(pan, BorderLayout.CENTER);
+	}
+
+	class DeleteRowAction extends AbstractAction {
+		public DeleteRowAction() {
+			super("Delete row", GUIGlobals.getImage("remove"));
+			putValue(SHORT_DESCRIPTION, Globals.lang("Delete rows"));
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			int[] rows = table.getSelectedRows();
+			if (rows.length == 0)
+				return;
+
+			for (int i = rows.length - 1; i >= 0; i--) {
+				if (rows[i] < tableRows.size()) {
+					tableRows.remove(rows[i]);
+				}
+			}
+			rowCount -= rows.length;
+			if (rows.length > 1)
+				table.clearSelection();
+			table.revalidate();
+			table.repaint();
+			tableChanged = true;
+		}
+	}
+
+	class AddRowAction extends AbstractAction {
+		public AddRowAction() {
+			super("Add row", GUIGlobals.getImage("add"));
+			putValue(SHORT_DESCRIPTION, Globals.lang("Insert rows"));
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			int[] rows = table.getSelectedRows();
+			if (rows.length == 0) {
+				// No rows selected, so we just add one at the end.
+				rowCount++;
+				table.revalidate();
+				table.repaint();
+				return;
+			}
+			for (int i = 0; i < rows.length; i++) {
+				if (rows[i] + i < tableRows.size())
+					tableRows.add(rows[i] + i, "");
+			}
+			rowCount += rows.length;
+			if (rows.length > 1)
+				table.clearSelection();
+			table.revalidate();
+			table.repaint();
+			tableChanged = true;
+		}
+	}
+
+	/**
+	 * Load settings from the preferences and initialize the table.
+	 */
+	public void setValues() {
+		tableRows.clear();
+		String[] names = JabRefPreferences.getInstance().getStringArray("xmpPrivacyFilters");
+		for (int i = 0; i < names.length; i++) {
+			tableRows.add(names[i]);
+		}
+		rowCount = tableRows.size() + 5;
+
+		privacyFilterCheckBox.setSelected(JabRefPreferences.getInstance().getBoolean(
+			"useXmpPrivacyFilter"));
+	}
+
+	/**
+	 * Store changes to table preferences. This method is called when the user
+	 * clicks Ok.
+	 * 
+	 */
+	public void storeSettings() {
+
+		if (table.isEditing()) {
+			int col = table.getEditingColumn();
+			int row = table.getEditingRow();
+			table.getCellEditor(row, col).stopCellEditing();
+		}
+
+		// Now we need to make sense of the contents the user has made to the
+		// table setup table. This needs to be done either if changes were made, or
+        // if the checkbox is checked and no field values have been stored previously: 
+        if (tableChanged ||
+                (privacyFilterCheckBox.isSelected() && !Globals.prefs.hasKey("xmpPrivacyFilters"))) {
+
+			// First we remove all rows with empty names.
+			for (int i = tableRows.size() - 1; i >= 0; i--) {
+				if (tableRows.elementAt(i).equals(""))
+					tableRows.removeElementAt(i);
+			}
+
+			// Finally, we store the new preferences.
+			JabRefPreferences.getInstance().putStringArray("xmpPrivacyFilters",
+				tableRows.toArray(new String[tableRows.size()]));
+		}
+
+		JabRefPreferences.getInstance().putBoolean("useXmpPrivacyFilter", privacyFilterCheckBox.isSelected());
+	}
+
+	public boolean readyToClose() {
+		return true;
+	}
+
+	public String getTabName() {
+		return Globals.lang("XMP metadata");
+	}
+}
diff --git a/src/java/net/sf/jabref/about/About2.java b/src/java/net/sf/jabref/about/About2.java
index 5ce9c1a..aafcc1a 100644
--- a/src/java/net/sf/jabref/about/About2.java
+++ b/src/java/net/sf/jabref/about/About2.java
@@ -1,88 +1,88 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// created by : r.nagel 05.05.2005
-//
-// function : new about dialog
-//
-
-package net.sf.jabref.about ;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.WindowEvent;
-
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-
-import net.sf.jabref.Globals;
-
-public class About2 extends JDialog implements ActionListener
-{
-  private static final long serialVersionUID = 1L ;
-
-  // AboutDialog constructor
-  public About2( JFrame parent )
-  {
-    super( parent, Globals.lang("About JabRef"), true ) ;
-
-//    setDefaultCloseOperation( EXIT_ON_CLOSE ) ;
-
-    JPanel contentPanel = new JPanel( new BorderLayout() ) ;
-    contentPanel.setBackground( Color.white);
-//    content.setBorder( new EmptyBorder( 12, 12, 12, 12 ) ) ;
-    setContentPane( contentPanel ) ;
-
-    contentPanel.add( BorderLayout.CENTER, new ExtendedInfoPanel(this) ) ;
-
-    this.setBackground( Color.white);
-
-    pack() ;
-    setResizable( false ) ;
-    setLocationRelativeTo( parent ) ;
-    setVisible( true ) ;
-  }
-
-  protected void processWindowEvent( WindowEvent e )
-  {
-    super.processWindowEvent( e ) ;
-    if ( e.getID() == WindowEvent.WINDOW_CLOSING )
-    {
-      System.exit( 0 ) ;
-    }
-  }
-
-  public void actionPerformed( ActionEvent e )
-  {
-    String cmd = e.getActionCommand() ;
-    if ( cmd.equals( "close" ) )
-    {
-
-      setVisible( false ) ;
-      dispose() ;
-//      System.exit( 0 ) ;
-    }
-    else if ( cmd.equals( "license" ) )
-    {
-//      showLicense() ;
-    }
-  }
-
-// ----------------------------------------------------------------------------
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// created by : r.nagel 05.05.2005
+//
+// function : new about dialog
+//
+
+package net.sf.jabref.about ;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+import net.sf.jabref.Globals;
+
+public class About2 extends JDialog implements ActionListener
+{
+  private static final long serialVersionUID = 1L ;
+
+  // AboutDialog constructor
+  public About2( JFrame parent )
+  {
+    super( parent, Globals.lang("About JabRef"), true ) ;
+
+//    setDefaultCloseOperation( EXIT_ON_CLOSE ) ;
+
+    JPanel contentPanel = new JPanel( new BorderLayout() ) ;
+    contentPanel.setBackground( Color.white);
+//    content.setBorder( new EmptyBorder( 12, 12, 12, 12 ) ) ;
+    setContentPane( contentPanel ) ;
+
+    contentPanel.add( BorderLayout.CENTER, new ExtendedInfoPanel(this) ) ;
+
+    this.setBackground( Color.white);
+
+    pack() ;
+    setResizable( false ) ;
+    setLocationRelativeTo( parent ) ;
+    setVisible( true ) ;
+  }
+
+  protected void processWindowEvent( WindowEvent e )
+  {
+    super.processWindowEvent( e ) ;
+    if ( e.getID() == WindowEvent.WINDOW_CLOSING )
+    {
+      System.exit( 0 ) ;
+    }
+  }
+
+  public void actionPerformed( ActionEvent e )
+  {
+    String cmd = e.getActionCommand() ;
+    if ( cmd.equals( "close" ) )
+    {
+
+      setVisible( false ) ;
+      dispose() ;
+//      System.exit( 0 ) ;
+    }
+    else if ( cmd.equals( "license" ) )
+    {
+//      showLicense() ;
+    }
+  }
+
+// ----------------------------------------------------------------------------
+
+}
diff --git a/src/java/net/sf/jabref/about/AboutPanel.java b/src/java/net/sf/jabref/about/AboutPanel.java
index d5421e0..dd3d819 100644
--- a/src/java/net/sf/jabref/about/AboutPanel.java
+++ b/src/java/net/sf/jabref/about/AboutPanel.java
@@ -1,457 +1,457 @@
-/*  Copyright (C) 2003-2011 Raik Nagel
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-package net.sf.jabref.about ;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
-import java.awt.image.FilteredImageSource;
-import java.awt.image.ImageProducer;
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.Enumeration;
-import java.util.Vector;
-
-import javax.swing.BorderFactory;
-import javax.swing.ImageIcon;
-import javax.swing.JComponent;
-import javax.swing.UIManager;
-import javax.swing.border.BevelBorder;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-
-// AboutPanel class
-public class AboutPanel extends JComponent
-{
-  private Vector<TextBlock> textBlocks ;
-  private String versionStr ;
-  private String buildStr ;
-  private AnimationThread thread;
-  private ImageIcon image;
-
-
-  // animated text positions
-  public int TOP = 300 ; // offset from top - hide
-  public int BOTTOM = 0 ; // show
-
-  public int HEIGHT = 500 ;
-  public int WIDTH = 500 ;
-
-  private int borders[] ;  // Border-Coordinates of paintarea (xLeft, xRight, yTop, yBottom)
-  private int paintWidth ;
-
-  private Font font1 ;
-  private Font font2 ;
-  private Font font3 ;
-
-  private AnimationListener aniListener ;
-  private ImageProducer iProducer ;
-
-  AboutPanel()
-  {
-    Font font = loadFont("ASTROLYT.TTF") ;
-    font1 = font.deriveFont(Font.BOLD, (float) 14.0) ;
-    font2 = font.deriveFont(Font.BOLD, (float) 20.0) ;
-
-    font = loadFont("AUGIE.TTF") ;
-    font3 = font.deriveFont(Font.BOLD, (float) 14.0) ;
-
-    versionStr = "Version " + Globals.VERSION ;
-    buildStr = " build " + Globals.BUILD ;
-
-    image = new ImageIcon(getClass().getResource("/images/autumn.png"));
-
-    HEIGHT = image.getIconHeight() ;
-    WIDTH = image.getIconWidth() ;
-
-    FontMetrics fm = getFontMetrics( font2 ) ;
-    TOP = 2*fm.getHeight() ;
-    fm = getFontMetrics( font1 ) ;
-    BOTTOM = 2*fm.getHeight() ;
-
-    borders = new int[4] ;
-    borders[0] = 0 ;
-    borders[1] = WIDTH ;
-    borders[2] = TOP ;
-    borders[3] = HEIGHT - TOP - BOTTOM ;
-
-
-    paintWidth = borders[1] - borders[0] ;
-
-    setForeground( Color.black) ;
-    setBackground( Color.white) ;
-
-    setBorder ( BorderFactory.createBevelBorder( BevelBorder.RAISED)) ;
-
-    textBlocks = new Vector<TextBlock>( 50 ) ;
-
-    loadAboutText() ;
-
-    this.setDoubleBuffered(true);
-
-    thread = new AnimationThread();
-  }
-// ----------------------------------------------------------------------------
-
-  public void addAnimationListener(AnimationListener listener)
-  {
-    aniListener = listener ;
-  }
-
-// ----------------------------------------------------------------------------
-
-  // returns
-  private int getMiddleX(String text, Font font)
-  {
-    FontMetrics fm = getFontMetrics(font);
-    return ( paintWidth/2 - ((fm.stringWidth(text) + 10) / 2)) ;
-  }
-
-// ----------------------------------------------------------------------------
-
-  private Font loadFont(String fontName)
-  {
-    Font back = UIManager.getFont("Label.font") ;
-    try
-    {
-      InputStream myStream = getClass().getResourceAsStream(GUIGlobals.fontPath + fontName) ;
-      back = Font.createFont(Font.TRUETYPE_FONT, myStream) ;
-    }
-    catch (Exception e) { System.out.println(e) ; }
-
-    return back ;
-  }
-
-// ----------------------------------------------------------------------------
-
-  private final void loadAboutText()
-  {
-    TextBlock block = null ;
-    AboutTextLine aLine = null ;
-
-    int index = -3 ;
-    FontMetrics fm = getFontMetrics(font3);
-    try
-    {
-      InputStream stream = getClass().getResourceAsStream(GUIGlobals.getLocaleHelpPath() + "credits.txt" ) ;
-      if (stream == null)
-      {
-        stream = getClass().getResourceAsStream( GUIGlobals.helpPre +
-                                                 "credits.txt" ) ;
-      }
-      InputStreamReader reader = new InputStreamReader( stream ) ;
-      BufferedReader input = new BufferedReader(reader, 1000) ;
-
-      while ( input.ready() )
-      {
-        String line = input.readLine() ;
-
-        if (line != null)
-        {
-          line = line.trim() ;
-
-          if (line.length() > 0)
-          {
-            if (line.charAt(0) == '#')  // new Block....
-            {
-              if (block != null)  //insert previous block
-              {
-                textBlocks.add(block) ;
-                index+=2 ;
-              }
-
-              aLine = new AboutTextLine( line.substring(1).trim()) ;
-              aLine.setTag(2);
-              aLine.setPos(getMiddleX(aLine.getText(), font2), borders[0] -fm.getHeight()*(index+3)*1.5);
-              aLine.setDirection(0.0, 1.0);
-              aLine.setFont(font2);
-
-              block = new TextBlock() ;
-              block.setHeading(aLine);
-              block.setVisible(true);
-
-            }
-            else  // Blocklines
-            {
-              aLine = new AboutTextLine( line.trim() ) ;
-              aLine.setPos( getMiddleX( line, font3 ),
-                            borders[3] + ( index * fm.getHeight() * 1.5 ) ) ;
-              aLine.setTag( 10 ) ;
-              aLine.setDirection( 0.0, -1.0 ) ;
-              aLine.setFont( font3 ) ;
-
-              block = new TextBlock() ;
-              block.add( aLine ) ;
-              block.setVisible(true);
-              
-              index++ ;
-            }
-          }
-        }
-      }
-      input.close() ;
-    }
-
-    catch ( Exception e )
-    {
-      block = new TextBlock() ;
-      block.setHeading( new AboutTextLine("failure") );
-      String line = "no infos available" ;
-      aLine = new AboutTextLine( line ) ;
-      block.add( aLine ) ;
-    }
-
-    textBlocks.add(block);  // insert last block
-  }
-
-// ----------------------------------------------------------------------------
-
-  public void paintComponent( Graphics g )
-  {
-    if (thread.mode == 0)
-    {
-      thread.start();
-//      thread.setEnabled(true);
-    }
-    else
-    if (thread.mode == 1)
-    {
-      image.paintIcon(this, g, 0, 0);
-
-      FontMetrics fm = g.getFontMetrics( font1 ) ;
-
-      int x1 = ( getWidth() - fm.stringWidth( versionStr ) ) / 2 ;
-      int y1 = getHeight() - fm.getHeight() - 4 ;
-      int y2 = getHeight() - 5 ;
-/*
-      int x1 = ( getWidth() - fm.stringWidth( versionStr ) ) / 2 ;
-      int y1 = 4 ;
-      int y2 = fm.getHeight() +4 ;
-*/
-      g.setFont( font1 ) ;
-
-      g.setColor( Color.black ) ;
-      g.drawString( versionStr, x1, y1 ) ;
-      g.drawString( buildStr, x1, y2 ) ;
-
-      g.setFont( font2) ;
-      fm = g.getFontMetrics( font2 ) ;
-      g.drawString( "JabRef", (getWidth() - fm.stringWidth("JabRef")) /2, fm.getHeight()+10) ;
-
-
-      for ( TextBlock block : textBlocks){
-        if (block.isVisible()) // only if Block is marked as visible
-        {
-          // print Heading
-          AboutTextLine head = block.getHeading() ;
-          drawLine(head, g) ;
-
-          for (AboutTextLine line : block){
-            drawLine(line, g) ;
-          }
-        }
-      }
-    }
-    else
-    {
-      image.paintIcon(this, g, 0, 0);
-    }
-  }
-// ----------------------------------------------------------------------------
-
-  private void drawLine(AboutTextLine line, Graphics g)
-  {
-    int x = line.getPosX() ;
-    int y = line.getPosY() ;
-    if ( ( x > borders[0] - 10 ) && ( x < borders[1] + 10 ) &&
-         ( y > borders[2] - 10 ) && ( y < borders[3] + 10 ) )
-    {
-      if ( line.getVisible() )
-      {
-        g.setFont( line.getFont() ) ;
-        g.setColor( line.getColor() ) ;
-        g.drawString( line.getText(), line.getPosX(), line.getPosY() ) ;
-      }
-    }
-  }
-// ----------------------------------------------------------------------------
-// ----------------------------------------------------------------------------
-
-  public Dimension getPreferredSize()
-  {
-    return new Dimension( WIDTH, HEIGHT ) ;
-  }
-
-  public void removeNotify()
-  {
-    super.removeNotify();
-    thread.kill();
-  }
-
-  public void skipAnimation()
-  {
-    thread.kill() ;
-    if (aniListener != null) aniListener.animationReady();
-  }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-
-  class AnimationThread extends Thread
-  {
-    private boolean running = true ;
-    private double help01 = 1.0 ;
-    private int mode = 0 ;
-    public int sleepTime = 50 ;
-    private int zone2Counter = 0 ;
-    private boolean runMode = true ;
-
-    AnimationThread()
-    {
-      super( "About box animation thread" ) ;
-      setPriority( Thread.MIN_PRIORITY ) ;
-    }
-
-    public void kill()
-    {
-      running = false ;
-    }
-
-    public void setEnabled(boolean onOff) { runMode = onOff ; }
-
-    public synchronized void setMode(int newMode) { mode = newMode ; }
-
-    public void run()
-    {
-      Object mutex = new Object() ;
-
-      mode = 1 ;
-      runMode = true ;
-      while ( running )
-      {
-
-        synchronized(mutex)
-        {
-          try
-          {
-            do
-            {
-              mutex.wait( sleepTime ) ;
-            } while (!runMode) ;
-          }
-          catch ( Exception e )
-          {
-          }
-        }
-        if (mode == 1)  // Textanimation
-        {
-          int counter = 0 ;
-
-          for ( Enumeration<TextBlock> myE = textBlocks.elements() ; myE.hasMoreElements() ; )
-          {
-            TextBlock block = myE.nextElement() ;
-            AboutTextLine head = block.getHeading() ;
-            counter = performStep(head) ;
-
-            for (AboutTextLine line : block){
-            	counter += performStep( line ) ;
-            }
-          }
-          if (counter < 1)
-          {
-            mode = 2 ;
-          }
-          repaint(borders[0]-10, borders[2]-10, borders[1]+10, borders[3]+10) ;
-        }
-        else if (mode == 2)  // Picture animation
-        {
-          if (sleepTime < 2)
-            sleepTime = 5 ;
-          else
-            sleepTime -= sleepTime / 3 ;
-
-          image.setImage( createImage( iProducer) );
-          repaint(0, 0, WIDTH, HEIGHT) ;
-        }
-      }
-    }
-
-    private int performStep(AboutTextLine line)
-    {
-      int back = 0 ;
-
-      line.performTimeStep( 1.0 ) ;
-
-      if ( line.getTag() == 2 )  // Heading
-      {
-        int zone = (int) (HEIGHT / 3.5) ;
-        if ( line.getPosY() > zone )
-        {
-          line.setSpeed( 0.0 ) ;
-          line.setTag( 4 ) ;
-          zone2Counter = 0 ;
-        } else
-        if ( line.getPosY() > ( zone - 10) )
-        {
-          zone2Counter=1 ;
-        }
-        back++ ;
-      }
-      else if ( line.getTag() == 4) // Heading Blender
-      {
-        if (zone2Counter < 1)
-        {
-          Color col = line.getColor() ;
-          int rgb = col.getRGB() + 1023 ;
-          line.setColor( new Color( rgb ) ) ;
-        }
-        else
-        {
-          line.setVisible(false);
-          line.setTag(5);
-        }
-      }
-      else if ( line.getTag() == 10 )  // scrolling text
-      {
-        if ( line.getPosY() < ( HEIGHT / 3 ) )
-        {
-          line.setDirection( help01, 0.0 ) ;
-          line.setAccel( 0.5 ) ;
-          line.setTag( 11 ) ;
-          help01 = help01 * -1.0 ;
-        }
-        back = 1 ;
-      }
-      else if (line.getTag() == 11) // text line out
-      {
-         if ((line.getPosX() < -100) || (line.getPosX() > WIDTH+100))
-         {
-           line.setTag(12);
-           line.setVisible(false);
-         }
-         back = 1 ;
-      }
-
-      return back ;
-    }
-  }
-
-}
+/*  Copyright (C) 2003-2011 Raik Nagel
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+package net.sf.jabref.about ;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.image.FilteredImageSource;
+import java.awt.image.ImageProducer;
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.UIManager;
+import javax.swing.border.BevelBorder;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+
+// AboutPanel class
+public class AboutPanel extends JComponent
+{
+  private Vector<TextBlock> textBlocks ;
+  private String versionStr ;
+  private String buildStr ;
+  private AnimationThread thread;
+  private ImageIcon image;
+
+
+  // animated text positions
+  public int TOP = 300 ; // offset from top - hide
+  public int BOTTOM = 0 ; // show
+
+  public int HEIGHT = 500 ;
+  public int WIDTH = 500 ;
+
+  private int borders[] ;  // Border-Coordinates of paintarea (xLeft, xRight, yTop, yBottom)
+  private int paintWidth ;
+
+  private Font font1 ;
+  private Font font2 ;
+  private Font font3 ;
+
+  private AnimationListener aniListener ;
+  private ImageProducer iProducer ;
+
+  AboutPanel()
+  {
+    Font font = loadFont("ASTROLYT.TTF") ;
+    font1 = font.deriveFont(Font.BOLD, (float) 14.0) ;
+    font2 = font.deriveFont(Font.BOLD, (float) 20.0) ;
+
+    font = loadFont("AUGIE.TTF") ;
+    font3 = font.deriveFont(Font.BOLD, (float) 14.0) ;
+
+    versionStr = "Version " + Globals.VERSION ;
+    buildStr = " build " + Globals.BUILD ;
+
+    image = new ImageIcon(getClass().getResource("/images/autumn.png"));
+
+    HEIGHT = image.getIconHeight() ;
+    WIDTH = image.getIconWidth() ;
+
+    FontMetrics fm = getFontMetrics( font2 ) ;
+    TOP = 2*fm.getHeight() ;
+    fm = getFontMetrics( font1 ) ;
+    BOTTOM = 2*fm.getHeight() ;
+
+    borders = new int[4] ;
+    borders[0] = 0 ;
+    borders[1] = WIDTH ;
+    borders[2] = TOP ;
+    borders[3] = HEIGHT - TOP - BOTTOM ;
+
+
+    paintWidth = borders[1] - borders[0] ;
+
+    setForeground( Color.black) ;
+    setBackground( Color.white) ;
+
+    setBorder ( BorderFactory.createBevelBorder( BevelBorder.RAISED)) ;
+
+    textBlocks = new Vector<TextBlock>( 50 ) ;
+
+    loadAboutText() ;
+
+    this.setDoubleBuffered(true);
+
+    thread = new AnimationThread();
+  }
+// ----------------------------------------------------------------------------
+
+  public void addAnimationListener(AnimationListener listener)
+  {
+    aniListener = listener ;
+  }
+
+// ----------------------------------------------------------------------------
+
+  // returns
+  private int getMiddleX(String text, Font font)
+  {
+    FontMetrics fm = getFontMetrics(font);
+    return ( paintWidth/2 - ((fm.stringWidth(text) + 10) / 2)) ;
+  }
+
+// ----------------------------------------------------------------------------
+
+  private Font loadFont(String fontName)
+  {
+    Font back = UIManager.getFont("Label.font") ;
+    try
+    {
+      InputStream myStream = getClass().getResourceAsStream(GUIGlobals.fontPath + fontName) ;
+      back = Font.createFont(Font.TRUETYPE_FONT, myStream) ;
+    }
+    catch (Exception e) { System.out.println(e) ; }
+
+    return back ;
+  }
+
+// ----------------------------------------------------------------------------
+
+  private final void loadAboutText()
+  {
+    TextBlock block = null ;
+    AboutTextLine aLine = null ;
+
+    int index = -3 ;
+    FontMetrics fm = getFontMetrics(font3);
+    try
+    {
+      InputStream stream = getClass().getResourceAsStream(GUIGlobals.getLocaleHelpPath() + "credits.txt" ) ;
+      if (stream == null)
+      {
+        stream = getClass().getResourceAsStream( GUIGlobals.helpPre +
+                                                 "credits.txt" ) ;
+      }
+      InputStreamReader reader = new InputStreamReader( stream ) ;
+      BufferedReader input = new BufferedReader(reader, 1000) ;
+
+      while ( input.ready() )
+      {
+        String line = input.readLine() ;
+
+        if (line != null)
+        {
+          line = line.trim() ;
+
+          if (line.length() > 0)
+          {
+            if (line.charAt(0) == '#')  // new Block....
+            {
+              if (block != null)  //insert previous block
+              {
+                textBlocks.add(block) ;
+                index+=2 ;
+              }
+
+              aLine = new AboutTextLine( line.substring(1).trim()) ;
+              aLine.setTag(2);
+              aLine.setPos(getMiddleX(aLine.getText(), font2), borders[0] -fm.getHeight()*(index+3)*1.5);
+              aLine.setDirection(0.0, 1.0);
+              aLine.setFont(font2);
+
+              block = new TextBlock() ;
+              block.setHeading(aLine);
+              block.setVisible(true);
+
+            }
+            else  // Blocklines
+            {
+              aLine = new AboutTextLine( line.trim() ) ;
+              aLine.setPos( getMiddleX( line, font3 ),
+                            borders[3] + ( index * fm.getHeight() * 1.5 ) ) ;
+              aLine.setTag( 10 ) ;
+              aLine.setDirection( 0.0, -1.0 ) ;
+              aLine.setFont( font3 ) ;
+
+              block = new TextBlock() ;
+              block.add( aLine ) ;
+              block.setVisible(true);
+              
+              index++ ;
+            }
+          }
+        }
+      }
+      input.close() ;
+    }
+
+    catch ( Exception e )
+    {
+      block = new TextBlock() ;
+      block.setHeading( new AboutTextLine("failure") );
+      String line = "no infos available" ;
+      aLine = new AboutTextLine( line ) ;
+      block.add( aLine ) ;
+    }
+
+    textBlocks.add(block);  // insert last block
+  }
+
+// ----------------------------------------------------------------------------
+
+  public void paintComponent( Graphics g )
+  {
+    if (thread.mode == 0)
+    {
+      thread.start();
+//      thread.setEnabled(true);
+    }
+    else
+    if (thread.mode == 1)
+    {
+      image.paintIcon(this, g, 0, 0);
+
+      FontMetrics fm = g.getFontMetrics( font1 ) ;
+
+      int x1 = ( getWidth() - fm.stringWidth( versionStr ) ) / 2 ;
+      int y1 = getHeight() - fm.getHeight() - 4 ;
+      int y2 = getHeight() - 5 ;
+/*
+      int x1 = ( getWidth() - fm.stringWidth( versionStr ) ) / 2 ;
+      int y1 = 4 ;
+      int y2 = fm.getHeight() +4 ;
+*/
+      g.setFont( font1 ) ;
+
+      g.setColor( Color.black ) ;
+      g.drawString( versionStr, x1, y1 ) ;
+      g.drawString( buildStr, x1, y2 ) ;
+
+      g.setFont( font2) ;
+      fm = g.getFontMetrics( font2 ) ;
+      g.drawString( "JabRef", (getWidth() - fm.stringWidth("JabRef")) /2, fm.getHeight()+10) ;
+
+
+      for ( TextBlock block : textBlocks){
+        if (block.isVisible()) // only if Block is marked as visible
+        {
+          // print Heading
+          AboutTextLine head = block.getHeading() ;
+          drawLine(head, g) ;
+
+          for (AboutTextLine line : block){
+            drawLine(line, g) ;
+          }
+        }
+      }
+    }
+    else
+    {
+      image.paintIcon(this, g, 0, 0);
+    }
+  }
+// ----------------------------------------------------------------------------
+
+  private void drawLine(AboutTextLine line, Graphics g)
+  {
+    int x = line.getPosX() ;
+    int y = line.getPosY() ;
+    if ( ( x > borders[0] - 10 ) && ( x < borders[1] + 10 ) &&
+         ( y > borders[2] - 10 ) && ( y < borders[3] + 10 ) )
+    {
+      if ( line.getVisible() )
+      {
+        g.setFont( line.getFont() ) ;
+        g.setColor( line.getColor() ) ;
+        g.drawString( line.getText(), line.getPosX(), line.getPosY() ) ;
+      }
+    }
+  }
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+
+  public Dimension getPreferredSize()
+  {
+    return new Dimension( WIDTH, HEIGHT ) ;
+  }
+
+  public void removeNotify()
+  {
+    super.removeNotify();
+    thread.kill();
+  }
+
+  public void skipAnimation()
+  {
+    thread.kill() ;
+    if (aniListener != null) aniListener.animationReady();
+  }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+
+  class AnimationThread extends Thread
+  {
+    private boolean running = true ;
+    private double help01 = 1.0 ;
+    private int mode = 0 ;
+    public int sleepTime = 50 ;
+    private int zone2Counter = 0 ;
+    private boolean runMode = true ;
+
+    AnimationThread()
+    {
+      super( "About box animation thread" ) ;
+      setPriority( Thread.MIN_PRIORITY ) ;
+    }
+
+    public void kill()
+    {
+      running = false ;
+    }
+
+    public void setEnabled(boolean onOff) { runMode = onOff ; }
+
+    public synchronized void setMode(int newMode) { mode = newMode ; }
+
+    public void run()
+    {
+      Object mutex = new Object() ;
+
+      mode = 1 ;
+      runMode = true ;
+      while ( running )
+      {
+
+        synchronized(mutex)
+        {
+          try
+          {
+            do
+            {
+              mutex.wait( sleepTime ) ;
+            } while (!runMode) ;
+          }
+          catch ( Exception e )
+          {
+          }
+        }
+        if (mode == 1)  // Textanimation
+        {
+          int counter = 0 ;
+
+          for ( Enumeration<TextBlock> myE = textBlocks.elements() ; myE.hasMoreElements() ; )
+          {
+            TextBlock block = myE.nextElement() ;
+            AboutTextLine head = block.getHeading() ;
+            counter = performStep(head) ;
+
+            for (AboutTextLine line : block){
+            	counter += performStep( line ) ;
+            }
+          }
+          if (counter < 1)
+          {
+            mode = 2 ;
+          }
+          repaint(borders[0]-10, borders[2]-10, borders[1]+10, borders[3]+10) ;
+        }
+        else if (mode == 2)  // Picture animation
+        {
+          if (sleepTime < 2)
+            sleepTime = 5 ;
+          else
+            sleepTime -= sleepTime / 3 ;
+
+          image.setImage( createImage( iProducer) );
+          repaint(0, 0, WIDTH, HEIGHT) ;
+        }
+      }
+    }
+
+    private int performStep(AboutTextLine line)
+    {
+      int back = 0 ;
+
+      line.performTimeStep( 1.0 ) ;
+
+      if ( line.getTag() == 2 )  // Heading
+      {
+        int zone = (int) (HEIGHT / 3.5) ;
+        if ( line.getPosY() > zone )
+        {
+          line.setSpeed( 0.0 ) ;
+          line.setTag( 4 ) ;
+          zone2Counter = 0 ;
+        } else
+        if ( line.getPosY() > ( zone - 10) )
+        {
+          zone2Counter=1 ;
+        }
+        back++ ;
+      }
+      else if ( line.getTag() == 4) // Heading Blender
+      {
+        if (zone2Counter < 1)
+        {
+          Color col = line.getColor() ;
+          int rgb = col.getRGB() + 1023 ;
+          line.setColor( new Color( rgb ) ) ;
+        }
+        else
+        {
+          line.setVisible(false);
+          line.setTag(5);
+        }
+      }
+      else if ( line.getTag() == 10 )  // scrolling text
+      {
+        if ( line.getPosY() < ( HEIGHT / 3 ) )
+        {
+          line.setDirection( help01, 0.0 ) ;
+          line.setAccel( 0.5 ) ;
+          line.setTag( 11 ) ;
+          help01 = help01 * -1.0 ;
+        }
+        back = 1 ;
+      }
+      else if (line.getTag() == 11) // text line out
+      {
+         if ((line.getPosX() < -100) || (line.getPosX() > WIDTH+100))
+         {
+           line.setTag(12);
+           line.setVisible(false);
+         }
+         back = 1 ;
+      }
+
+      return back ;
+    }
+  }
+
+}
diff --git a/src/java/net/sf/jabref/about/AboutTextLine.java b/src/java/net/sf/jabref/about/AboutTextLine.java
index 1a416b5..3443f90 100644
--- a/src/java/net/sf/jabref/about/AboutTextLine.java
+++ b/src/java/net/sf/jabref/about/AboutTextLine.java
@@ -1,210 +1,210 @@
-/*  Copyright (C) 2003-2011 Raik Nagel
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// created by : r.nagel 05.05.2005
-//
-// function : a animated line for about dialog
-//
-
-
-package net.sf.jabref.about ;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.util.Random;
-
-import javax.swing.UIManager;
-
-// a single About Line
-public class AboutTextLine
-{
-  private String text ;
-  private double direction[] ;
-  private double pos[] ;
-  private double speed ;
-  private double accel ;
-  private int tag ;  // additional user information
-  private Font font ;
-  private Color color ;
-
-  private boolean visible ;
-
-  public AboutTextLine(String txt)
-  {
-    Random rand = new Random(System.currentTimeMillis()* this.hashCode()) ;
-
-    text = txt ;
-
-    pos = new double[2] ;
-    pos[0] = rand.nextDouble() *100.0 ;
-    pos[1] = rand.nextDouble() *100.0 ;
-
-    direction = new double [2] ;
-    direction[0] = rand.nextDouble() ;
-    direction[1] = rand.nextDouble() ;
-
-    accel = 0.0 ;
-    speed = 1.0 ;
-
-    tag = 0 ;
-
-    color = Color.black ;
-
-    visible = true ;
-
-    font = UIManager.getFont("Label.font") ;
-  }
-
-// ------------------------------------------------------------------------
-
-  public void performTimeStep(double time)
-  {
-    accel = accel * time ;
-    speed += accel ;
-
-    double move = speed * time ;  //
-
-    pos[0] += (move * direction[0]) ;
-    pos[1] += (move * direction[1]) ;
-  }
-
-// ------------------------------------------------------------------------
-
-  public String toString()
-  {
-    return (text + "<" +pos[0] +", " +pos[1] +">"
-                 + "<" +direction[0] +", " +direction[1] +">" ) ;
-  }
-
-// ------------------------------------------------------------------------
-
-  public int getPosX()
-  {
-    return (int) pos[0] ;
-  }
-
-  public int getPosY()
-  {
-    return (int) pos[1] ;
-  }
-
-  public double[] getPos()
-  {
-    return pos;
-  }
-
-  public void setPos(double posX, double posY)
-  {
-    this.pos[0] = posX ;
-    this.pos[1] = posY ;
-  }
-
- // ------------------------------------------------------------------------
-
-  public String getText()
-  {
-    return text;
-  }
-
-  public void setText(String pText)
-  {
-    this.text = pText;
-  }
-
-// ------------------------------------------------------------------------
-
-  public double[] getDirection()
-  {
-    return direction;
-  }
-
-  public void setDirection(double dirX, double dirY)
-  {
-    this.direction[0] = dirX ;
-    this.direction[1] = dirY ;
-  }
-
-// ------------------------------------------------------------------------
-
-  public double getSpeed()
-  {
-    return speed;
-  }
-
-  public void setSpeed(double pSpeed)
-  {
-    this.speed = pSpeed;
-  }
-
-// ------------------------------------------------------------------------
-
-  public double getAccel()
-  {
-    return accel;
-  }
-
-  public void setAccel(double pAccel)
-  {
-    this.accel = pAccel;
-  }
-
-// ------------------------------------------------------------------------
-
-  public int getTag()
-  {
-    return tag;
-  }
-
-  public void setTag(int pTag)
-  {
-    this.tag = pTag;
-  }
-
-// ------------------------------------------------------------------------
-
-  public Font getFont()
-  {
-    return font;
-  }
-  public void setFont(Font pFont)
-  {
-    this.font = pFont;
-  }
-
-// ------------------------------------------------------------------------
-
-  public Color getColor()
-  {
-    return color;
-  }
-  public void setColor(Color pColor)
-  {
-    this.color = pColor;
-  }
-
-// ------------------------------------------------------------------------
-
-  public boolean getVisible()
-  {
-    return visible;
-  }
-  public void setVisible(boolean pVisible)
-  {
-    this.visible = pVisible;
-  }
-// ------------------------------------------------------------------------
-// ------------------------------------------------------------------------
-
-}
+/*  Copyright (C) 2003-2011 Raik Nagel
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// created by : r.nagel 05.05.2005
+//
+// function : a animated line for about dialog
+//
+
+
+package net.sf.jabref.about ;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.util.Random;
+
+import javax.swing.UIManager;
+
+// a single About Line
+public class AboutTextLine
+{
+  private String text ;
+  private double direction[] ;
+  private double pos[] ;
+  private double speed ;
+  private double accel ;
+  private int tag ;  // additional user information
+  private Font font ;
+  private Color color ;
+
+  private boolean visible ;
+
+  public AboutTextLine(String txt)
+  {
+    Random rand = new Random(System.currentTimeMillis()* this.hashCode()) ;
+
+    text = txt ;
+
+    pos = new double[2] ;
+    pos[0] = rand.nextDouble() *100.0 ;
+    pos[1] = rand.nextDouble() *100.0 ;
+
+    direction = new double [2] ;
+    direction[0] = rand.nextDouble() ;
+    direction[1] = rand.nextDouble() ;
+
+    accel = 0.0 ;
+    speed = 1.0 ;
+
+    tag = 0 ;
+
+    color = Color.black ;
+
+    visible = true ;
+
+    font = UIManager.getFont("Label.font") ;
+  }
+
+// ------------------------------------------------------------------------
+
+  public void performTimeStep(double time)
+  {
+    accel = accel * time ;
+    speed += accel ;
+
+    double move = speed * time ;  //
+
+    pos[0] += (move * direction[0]) ;
+    pos[1] += (move * direction[1]) ;
+  }
+
+// ------------------------------------------------------------------------
+
+  public String toString()
+  {
+    return (text + "<" +pos[0] +", " +pos[1] +">"
+                 + "<" +direction[0] +", " +direction[1] +">" ) ;
+  }
+
+// ------------------------------------------------------------------------
+
+  public int getPosX()
+  {
+    return (int) pos[0] ;
+  }
+
+  public int getPosY()
+  {
+    return (int) pos[1] ;
+  }
+
+  public double[] getPos()
+  {
+    return pos;
+  }
+
+  public void setPos(double posX, double posY)
+  {
+    this.pos[0] = posX ;
+    this.pos[1] = posY ;
+  }
+
+ // ------------------------------------------------------------------------
+
+  public String getText()
+  {
+    return text;
+  }
+
+  public void setText(String pText)
+  {
+    this.text = pText;
+  }
+
+// ------------------------------------------------------------------------
+
+  public double[] getDirection()
+  {
+    return direction;
+  }
+
+  public void setDirection(double dirX, double dirY)
+  {
+    this.direction[0] = dirX ;
+    this.direction[1] = dirY ;
+  }
+
+// ------------------------------------------------------------------------
+
+  public double getSpeed()
+  {
+    return speed;
+  }
+
+  public void setSpeed(double pSpeed)
+  {
+    this.speed = pSpeed;
+  }
+
+// ------------------------------------------------------------------------
+
+  public double getAccel()
+  {
+    return accel;
+  }
+
+  public void setAccel(double pAccel)
+  {
+    this.accel = pAccel;
+  }
+
+// ------------------------------------------------------------------------
+
+  public int getTag()
+  {
+    return tag;
+  }
+
+  public void setTag(int pTag)
+  {
+    this.tag = pTag;
+  }
+
+// ------------------------------------------------------------------------
+
+  public Font getFont()
+  {
+    return font;
+  }
+  public void setFont(Font pFont)
+  {
+    this.font = pFont;
+  }
+
+// ------------------------------------------------------------------------
+
+  public Color getColor()
+  {
+    return color;
+  }
+  public void setColor(Color pColor)
+  {
+    this.color = pColor;
+  }
+
+// ------------------------------------------------------------------------
+
+  public boolean getVisible()
+  {
+    return visible;
+  }
+  public void setVisible(boolean pVisible)
+  {
+    this.visible = pVisible;
+  }
+// ------------------------------------------------------------------------
+// ------------------------------------------------------------------------
+
+}
diff --git a/src/java/net/sf/jabref/about/AnimationListener.java b/src/java/net/sf/jabref/about/AnimationListener.java
index ffc54a6..aba8435 100644
--- a/src/java/net/sf/jabref/about/AnimationListener.java
+++ b/src/java/net/sf/jabref/about/AnimationListener.java
@@ -1,25 +1,25 @@
-/*  Copyright (C) 2003-2011 Raik Nagel
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// function : listener for animation actions
-//
-// modified :
-
-package net.sf.jabref.about ;
-
-public interface AnimationListener
-{
-  public void animationReady() ;
-}
+/*  Copyright (C) 2003-2011 Raik Nagel
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// function : listener for animation actions
+//
+// modified :
+
+package net.sf.jabref.about ;
+
+public interface AnimationListener
+{
+  public void animationReady() ;
+}
diff --git a/src/java/net/sf/jabref/about/ExtendedInfoPanel.java b/src/java/net/sf/jabref/about/ExtendedInfoPanel.java
index f759f7c..f07c1d5 100644
--- a/src/java/net/sf/jabref/about/ExtendedInfoPanel.java
+++ b/src/java/net/sf/jabref/about/ExtendedInfoPanel.java
@@ -1,163 +1,163 @@
-/*  Copyright (C) 2003-2011 Raik Nagel
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// function : content for the about dialog
-//
-// modified :
-//            28.07.2005
-//            - hide license button
-
-package net.sf.jabref.about ;
-
-import java.awt.BorderLayout;
-import java.awt.CardLayout;
-import java.awt.Color;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.IOException;
-import java.net.URL;
-
-import javax.swing.*;
-import javax.swing.border.BevelBorder;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-
-public class ExtendedInfoPanel extends JPanel implements AnimationListener, ActionListener
-{
-  private JEditorPane textPane ;
-  private JScrollPane scroller ;
-  private CardLayout cards ;
-
-  private JButton close ;
-  private JButton license ;
-
-  private AboutPanel about ;
-  private JPanel infoPanel ;
-
-  private boolean animationIsRunning = true ;
-
-  private ActionListener mainListener ;
-
-  public ExtendedInfoPanel(ActionListener mainFrame)
-  {
-    mainListener = mainFrame ;
-
-    // animated area
-    about = new AboutPanel();
-    about.addAnimationListener(this);
-
-    // scrallable html infos
-    textPane = new JEditorPane() ;
-
-    textPane.setEditable( false ) ;
-//    URL helpURL = getClass().getResource( "/help/About.html" ) ;
-    // try to load about.html for the locale language
-    URL helpURL = getClass().getResource( GUIGlobals.getLocaleHelpPath() + GUIGlobals.aboutPage) ;
-    // about.html could not detected => try to load the default version
-    if (helpURL == null)
-    {
-      helpURL = getClass().getResource( GUIGlobals.helpPre + GUIGlobals.aboutPage) ;
-    }
-
-    if ( helpURL != null )
-    {
-      try
-      {
-        textPane.setPage( helpURL ) ;
-      }
-      catch ( IOException e )
-      {
-        System.err.println( "Attempted to read a bad URL: " + helpURL ) ;
-      }
-    }
-    else
-    {
-      System.err.println( "Couldn't find file: About.html" ) ;
-    }
-
-    scroller = new JScrollPane(textPane) ; //, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS) ;
-    scroller.setPreferredSize( about.getSize());
-
-    // overlapped animated/scrollable area
-    infoPanel = new JPanel() ;
-    cards = new CardLayout() ;
-    infoPanel.setLayout( cards);
-
-    infoPanel.add(about, "ani") ;
-    infoPanel.add(scroller, "inf") ;
-
-     // Buttons
-    JPanel buttonPanel = new JPanel() ;
-    buttonPanel.setBackground( Color.white);
-    buttonPanel.setLayout( new GridLayout(1, 2, 10, 20) );
-    buttonPanel.setBorder( BorderFactory.createBevelBorder( BevelBorder.RAISED));
-
-    buttonPanel.add( Box.createGlue() ) ;
-    close = new JButton( Globals.lang("Skip") ) ;
-    close.addActionListener( this ) ;
-    close.setActionCommand( "close" ) ;
-    close.setFocusable( false ) ;
-
-    license = new JButton( Globals.lang("License") ) ;
-    license.addActionListener( this ) ;
-    license.setActionCommand( "license" ) ;
-    license.setFocusable( false ) ;
-
-    buttonPanel.add( close ) ;
-//    buttonPanel.add( license ) ;
-    buttonPanel.add( Box.createGlue() ) ;
-
-
-    // main panel
-    this.setLayout( new BorderLayout(0, 0));
-
-    this.add(infoPanel, BorderLayout.CENTER) ;
-    this.add(buttonPanel, BorderLayout.SOUTH) ;
-
-//    about.startAnimation();
-  }
-
-  public void animationReady()
-  {
-    animationIsRunning = false ;
-    cards.show(infoPanel, "inf");
-    close.setText(Globals.lang("Close"));
-  }
-
-  public void actionPerformed( ActionEvent e )
-  {
-    String cmd = e.getActionCommand() ;
-    if ( cmd.equals( "close" ) )
-    {
-      if (animationIsRunning)
-      {
-         about.skipAnimation(); // implicit call of AnimationListener.animationReady()
-      }
-      else
-      {
-        setVisible( false ) ;
-        mainListener.actionPerformed(e);
-      }
-    }
-    else if ( cmd.equals( "license" ) )
-    {
-//      showLicense() ;
-      mainListener.actionPerformed(e);
-    }
-  }
-
-}
+/*  Copyright (C) 2003-2011 Raik Nagel
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// function : content for the about dialog
+//
+// modified :
+//            28.07.2005
+//            - hide license button
+
+package net.sf.jabref.about ;
+
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.Color;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.net.URL;
+
+import javax.swing.*;
+import javax.swing.border.BevelBorder;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+
+public class ExtendedInfoPanel extends JPanel implements AnimationListener, ActionListener
+{
+  private JEditorPane textPane ;
+  private JScrollPane scroller ;
+  private CardLayout cards ;
+
+  private JButton close ;
+  private JButton license ;
+
+  private AboutPanel about ;
+  private JPanel infoPanel ;
+
+  private boolean animationIsRunning = true ;
+
+  private ActionListener mainListener ;
+
+  public ExtendedInfoPanel(ActionListener mainFrame)
+  {
+    mainListener = mainFrame ;
+
+    // animated area
+    about = new AboutPanel();
+    about.addAnimationListener(this);
+
+    // scrallable html infos
+    textPane = new JEditorPane() ;
+
+    textPane.setEditable( false ) ;
+//    URL helpURL = getClass().getResource( "/help/About.html" ) ;
+    // try to load about.html for the locale language
+    URL helpURL = getClass().getResource( GUIGlobals.getLocaleHelpPath() + GUIGlobals.aboutPage) ;
+    // about.html could not detected => try to load the default version
+    if (helpURL == null)
+    {
+      helpURL = getClass().getResource( GUIGlobals.helpPre + GUIGlobals.aboutPage) ;
+    }
+
+    if ( helpURL != null )
+    {
+      try
+      {
+        textPane.setPage( helpURL ) ;
+      }
+      catch ( IOException e )
+      {
+        System.err.println( "Attempted to read a bad URL: " + helpURL ) ;
+      }
+    }
+    else
+    {
+      System.err.println( "Couldn't find file: About.html" ) ;
+    }
+
+    scroller = new JScrollPane(textPane) ; //, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS) ;
+    scroller.setPreferredSize( about.getSize());
+
+    // overlapped animated/scrollable area
+    infoPanel = new JPanel() ;
+    cards = new CardLayout() ;
+    infoPanel.setLayout( cards);
+
+    infoPanel.add(about, "ani") ;
+    infoPanel.add(scroller, "inf") ;
+
+     // Buttons
+    JPanel buttonPanel = new JPanel() ;
+    buttonPanel.setBackground( Color.white);
+    buttonPanel.setLayout( new GridLayout(1, 2, 10, 20) );
+    buttonPanel.setBorder( BorderFactory.createBevelBorder( BevelBorder.RAISED));
+
+    buttonPanel.add( Box.createGlue() ) ;
+    close = new JButton( Globals.lang("Skip") ) ;
+    close.addActionListener( this ) ;
+    close.setActionCommand( "close" ) ;
+    close.setFocusable( false ) ;
+
+    license = new JButton( Globals.lang("License") ) ;
+    license.addActionListener( this ) ;
+    license.setActionCommand( "license" ) ;
+    license.setFocusable( false ) ;
+
+    buttonPanel.add( close ) ;
+//    buttonPanel.add( license ) ;
+    buttonPanel.add( Box.createGlue() ) ;
+
+
+    // main panel
+    this.setLayout( new BorderLayout(0, 0));
+
+    this.add(infoPanel, BorderLayout.CENTER) ;
+    this.add(buttonPanel, BorderLayout.SOUTH) ;
+
+//    about.startAnimation();
+  }
+
+  public void animationReady()
+  {
+    animationIsRunning = false ;
+    cards.show(infoPanel, "inf");
+    close.setText(Globals.lang("Close"));
+  }
+
+  public void actionPerformed( ActionEvent e )
+  {
+    String cmd = e.getActionCommand() ;
+    if ( cmd.equals( "close" ) )
+    {
+      if (animationIsRunning)
+      {
+         about.skipAnimation(); // implicit call of AnimationListener.animationReady()
+      }
+      else
+      {
+        setVisible( false ) ;
+        mainListener.actionPerformed(e);
+      }
+    }
+    else if ( cmd.equals( "license" ) )
+    {
+//      showLicense() ;
+      mainListener.actionPerformed(e);
+    }
+  }
+
+}
diff --git a/src/java/net/sf/jabref/about/TextBlock.java b/src/java/net/sf/jabref/about/TextBlock.java
index b843de3..aefa846 100644
--- a/src/java/net/sf/jabref/about/TextBlock.java
+++ b/src/java/net/sf/jabref/about/TextBlock.java
@@ -1,68 +1,68 @@
-/*  Copyright (C) 2003-2011 Raik Nagel
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// function : set of animated lines
-//
-// modified :
-
-package net.sf.jabref.about ;
-
-import java.util.Iterator;
-import java.util.Vector;
-
-public class TextBlock implements Iterable<AboutTextLine> {
-
-  private Vector<AboutTextLine> textLines ;
-  private AboutTextLine headLine ;
-  private boolean visible ;
-
-  public TextBlock()
-  {
-    textLines = new Vector<AboutTextLine>() ;
-    visible = false ;
-  }
-
-// ---------------------------------------------------------------------------
-
-  public void add(AboutTextLine line)
-  {
-    textLines.add(line);
-  }
-
-  public Iterator<AboutTextLine> iterator() { 
-	  return textLines.iterator(); 
-  }
-
-// ---------------------------------------------------------------------------
-  public void setHeading(AboutTextLine head)
-  {
-    headLine = head ;
-  }
-
-  public AboutTextLine getHeading() { return headLine ; }
-
-// ---------------------------------------------------------------------------
-  public boolean isVisible()
-  {
-    return visible;
-  }
-
-  public void setVisible(boolean pVisible)
-  {
-    this.visible = pVisible;
-  }
-
-
-}
+/*  Copyright (C) 2003-2011 Raik Nagel
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// function : set of animated lines
+//
+// modified :
+
+package net.sf.jabref.about ;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+public class TextBlock implements Iterable<AboutTextLine> {
+
+  private Vector<AboutTextLine> textLines ;
+  private AboutTextLine headLine ;
+  private boolean visible ;
+
+  public TextBlock()
+  {
+    textLines = new Vector<AboutTextLine>() ;
+    visible = false ;
+  }
+
+// ---------------------------------------------------------------------------
+
+  public void add(AboutTextLine line)
+  {
+    textLines.add(line);
+  }
+
+  public Iterator<AboutTextLine> iterator() { 
+	  return textLines.iterator(); 
+  }
+
+// ---------------------------------------------------------------------------
+  public void setHeading(AboutTextLine head)
+  {
+    headLine = head ;
+  }
+
+  public AboutTextLine getHeading() { return headLine ; }
+
+// ---------------------------------------------------------------------------
+  public boolean isVisible()
+  {
+    return visible;
+  }
+
+  public void setVisible(boolean pVisible)
+  {
+    this.visible = pVisible;
+  }
+
+
+}
diff --git a/src/java/net/sf/jabref/aspects/violations/DetectSwingSingleThreadRuleViolations.aj b/src/java/net/sf/jabref/aspects/violations/DetectSwingSingleThreadRuleViolations.aj
index 17dcdfd..16af20d 100644
--- a/src/java/net/sf/jabref/aspects/violations/DetectSwingSingleThreadRuleViolations.aj
+++ b/src/java/net/sf/jabref/aspects/violations/DetectSwingSingleThreadRuleViolations.aj
@@ -1,41 +1,41 @@
-/*
- * Package package net.sf.jabref.aspects.violations;
- * Created on Nov 6, 2004
- * Author mspiegel
- *
- */
-package net.sf.jabref.aspects.violations;
-
-import java.awt.Component;
-import java.awt.EventQueue;
-
-public aspect DetectSwingSingleThreadRuleViolations {
-
-	pointcut guiUpdates(Component component)
-		:	call(* java..Component+.*(..)) && 
-		    !call(* net..jabref+.*(..)) && target(component);			
-    
-	pointcut safeGuiCalls()
-		: call (* javax..JComponent.repaint(..))
-			|| call(* javax..JComponent.revalidate(..))
-		    || call(* javax..JComponent.invalidate(..))
-		    || call(* javax..*.add*Listener(..))
-		    || call(* javax..*.remove*Listener(..));
-		        
-	pointcut unsafeGuiCalls(Component component)
-		: guiUpdates(component) && !safeGuiCalls();
-    
-    before(Component component) : unsafeGuiCalls(component) 
-    	&& if (!EventQueue.isDispatchThread() && (component != null) &&
-    	        	component.isDisplayable() && !Thread.currentThread().getName().equals("main")) {
-            System.err.println(	
-                    "Violation: Swing component method called from nonAWT thread"
-                    + "\nCalled method: " + thisJoinPointStaticPart.getSignature()
-                    + "\nCaller:" + thisEnclosingJoinPointStaticPart.getSignature()
-                    + "\nSource Location:" + thisJoinPointStaticPart.getSourceLocation()
-                    + "\nThread:" + Thread.currentThread() 
-                    + "\nChange code to use EventQueue.invokeLater() or EventQueue.invokeAndWait()"
-                    + "\n");
-    	}
-    
-}
+/*
+ * Package package net.sf.jabref.aspects.violations;
+ * Created on Nov 6, 2004
+ * Author mspiegel
+ *
+ */
+package net.sf.jabref.aspects.violations;
+
+import java.awt.Component;
+import java.awt.EventQueue;
+
+public aspect DetectSwingSingleThreadRuleViolations {
+
+	pointcut guiUpdates(Component component)
+		:	call(* java..Component+.*(..)) && 
+		    !call(* net..jabref+.*(..)) && target(component);			
+    
+	pointcut safeGuiCalls()
+		: call (* javax..JComponent.repaint(..))
+			|| call(* javax..JComponent.revalidate(..))
+		    || call(* javax..JComponent.invalidate(..))
+		    || call(* javax..*.add*Listener(..))
+		    || call(* javax..*.remove*Listener(..));
+		        
+	pointcut unsafeGuiCalls(Component component)
+		: guiUpdates(component) && !safeGuiCalls();
+    
+    before(Component component) : unsafeGuiCalls(component) 
+    	&& if (!EventQueue.isDispatchThread() && (component != null) &&
+    	        	component.isDisplayable() && !Thread.currentThread().getName().equals("main")) {
+            System.err.println(	
+                    "Violation: Swing component method called from nonAWT thread"
+                    + "\nCalled method: " + thisJoinPointStaticPart.getSignature()
+                    + "\nCaller:" + thisEnclosingJoinPointStaticPart.getSignature()
+                    + "\nSource Location:" + thisJoinPointStaticPart.getSourceLocation()
+                    + "\nThread:" + Thread.currentThread() 
+                    + "\nChange code to use EventQueue.invokeLater() or EventQueue.invokeAndWait()"
+                    + "\n");
+    	}
+    
+}
diff --git a/src/java/net/sf/jabref/autocompleter/AbstractAutoCompleter.java b/src/java/net/sf/jabref/autocompleter/AbstractAutoCompleter.java
index 1175fe5..e4cd9e6 100644
--- a/src/java/net/sf/jabref/autocompleter/AbstractAutoCompleter.java
+++ b/src/java/net/sf/jabref/autocompleter/AbstractAutoCompleter.java
@@ -1,144 +1,144 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.autocompleter;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import javax.swing.text.JTextComponent;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-
-/**
- * An autocompleter delivers possible completions for a given String. There are
- * different types of autocompleters for different use cases.
- * 
- * Example: {@link NameFieldAutoCompleter}, {@link EntireFieldAutoCompleter}
- * 
- * @author kahlert, cordes, olly98
- * @see AutoCompleterFactory
- */
-public abstract class AbstractAutoCompleter {
-
-	public static int SHORTEST_TO_COMPLETE = Globals.prefs.getInt(JabRefPreferences.SHORTEST_TO_COMPLETE);
-	public static final int SHORTEST_WORD = 4;
-
-	// stores the strings as is
-	private TreeSet<String> _index_casesensitive = new TreeSet<String>();
-	
-	// stores strings in lowercase
-	private TreeSet<String> _index_caseinsensitive = new TreeSet<String>();
-	
-	// stores for a lowercase string the possible expanded strings
-	private HashMap<String, TreeSet<String>> _possibleStringsForSearchString = new HashMap<String, TreeSet<String>>();
-
-	/**
-	 * Add a BibtexEntry to this autocompleter. The autocompleter (respectively
-	 * to the concrete implementations of {@link AbstractAutoCompleter}) itself
-	 * decides which information should be stored for later completion.
-	 * 
-	 */
-	abstract public void addBibtexEntry(BibtexEntry entry);
-
-	/**
-	 * States whether the field consists of multiple values (false) or of a single value (true)
-	 * 
-	 * Symptom: if false, {@link net.sf.jabref.gui.AutoCompleteListener#getCurrentWord(JTextComponent comp)} 
-	 * returns current word only, if true, it returns the text beginning from the buffer
-	 */
-	abstract public boolean isSingleUnitField();
-
-	/**
-	 * Returns one or more possible completions for a given String. The returned
-	 * completion depends on which informations were stored while adding
-	 * BibtexEntries by the used implementation of {@link AbstractAutoCompleter}
-	 * .
-	 * 
-	 * @see AbstractAutoCompleter#addBibtexEntry(BibtexEntry)
-	 */
-	public String[] complete(String str) {
-		if (stringMinLength(str))
-			return null;
-		String lstr = str.toLowerCase();
-		
-		if (lstr.equals(str)) {
-			// user typed in lower case word -> we do an case-insenstive search
-			String ender = incrementLastCharacter(lstr);
-			SortedSet<String> subset = _index_caseinsensitive.subSet(lstr, ender);
-		
-			// As subset only contains lower case strings, 
-			// we have to to determine possible strings for each hit
-			ArrayList<String> res = new ArrayList<String>();
-			for (String s: subset) {
-				res.addAll(_possibleStringsForSearchString.get(s));
-			}		
-			return res.toArray(new String[0]);
-		} else {
-			// user typed in a mix of upper case and lower case,
-			// we assume user wants to have exact search
-			String ender = incrementLastCharacter(str);
-			SortedSet<String> subset = _index_casesensitive.subSet(str, ender);
-			return subset.toArray(new String[0]);
-		}
-	}
-
-	/**
-	 * Increments the last character of a string.
-	 * 
-	 * Example: incrementLastCharacter("abc") returns "abd".
-	 */
-	private static String incrementLastCharacter(String str) {
-		char lastChar = str.charAt(str.length() - 1);
-		String ender = str.substring(0, str.length() - 1) + Character.toString((char) (lastChar + 1));
-		return ender;
-	}
-
-	private static boolean stringMinLength(String str) {
-		return str.length() < AbstractAutoCompleter.SHORTEST_TO_COMPLETE;
-	}
-
-	public void addWordToIndex(String word) {
-		if (word.length() >= SHORTEST_WORD) {
-			_index_casesensitive.add(word);
-			
-			// insensitive treatment
-			// first, add the lower cased word to search index
-			// second, add a mapping from the lower cased word to the real word
-			String word_lcase = word.toLowerCase();
-			_index_caseinsensitive.add(word_lcase);
-			TreeSet<String> set = _possibleStringsForSearchString.get(word_lcase);
-			if (set==null) {
-				set = new TreeSet<String>();
-			}
-			set.add(word);
-			_possibleStringsForSearchString.put(word_lcase, set);
-		}
-	}
-
-	public boolean indexContainsWord(String word) {
-		return _index_caseinsensitive.contains(word.toLowerCase());
-	}
-
-    public String getPrefix() {
-        return "";
-    }
-
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.autocompleter;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import javax.swing.text.JTextComponent;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+
+/**
+ * An autocompleter delivers possible completions for a given String. There are
+ * different types of autocompleters for different use cases.
+ * 
+ * Example: {@link NameFieldAutoCompleter}, {@link EntireFieldAutoCompleter}
+ * 
+ * @author kahlert, cordes, olly98
+ * @see AutoCompleterFactory
+ */
+public abstract class AbstractAutoCompleter {
+
+	public static int SHORTEST_TO_COMPLETE = Globals.prefs.getInt(JabRefPreferences.SHORTEST_TO_COMPLETE);
+	public static final int SHORTEST_WORD = 4;
+
+	// stores the strings as is
+	private TreeSet<String> _index_casesensitive = new TreeSet<String>();
+	
+	// stores strings in lowercase
+	private TreeSet<String> _index_caseinsensitive = new TreeSet<String>();
+	
+	// stores for a lowercase string the possible expanded strings
+	private HashMap<String, TreeSet<String>> _possibleStringsForSearchString = new HashMap<String, TreeSet<String>>();
+
+	/**
+	 * Add a BibtexEntry to this autocompleter. The autocompleter (respectively
+	 * to the concrete implementations of {@link AbstractAutoCompleter}) itself
+	 * decides which information should be stored for later completion.
+	 * 
+	 */
+	abstract public void addBibtexEntry(BibtexEntry entry);
+
+	/**
+	 * States whether the field consists of multiple values (false) or of a single value (true)
+	 * 
+	 * Symptom: if false, {@link net.sf.jabref.gui.AutoCompleteListener#getCurrentWord(JTextComponent comp)} 
+	 * returns current word only, if true, it returns the text beginning from the buffer
+	 */
+	abstract public boolean isSingleUnitField();
+
+	/**
+	 * Returns one or more possible completions for a given String. The returned
+	 * completion depends on which informations were stored while adding
+	 * BibtexEntries by the used implementation of {@link AbstractAutoCompleter}
+	 * .
+	 * 
+	 * @see AbstractAutoCompleter#addBibtexEntry(BibtexEntry)
+	 */
+	public String[] complete(String str) {
+		if (stringMinLength(str))
+			return null;
+		String lstr = str.toLowerCase();
+		
+		if (lstr.equals(str)) {
+			// user typed in lower case word -> we do an case-insenstive search
+			String ender = incrementLastCharacter(lstr);
+			SortedSet<String> subset = _index_caseinsensitive.subSet(lstr, ender);
+		
+			// As subset only contains lower case strings, 
+			// we have to to determine possible strings for each hit
+			ArrayList<String> res = new ArrayList<String>();
+			for (String s: subset) {
+				res.addAll(_possibleStringsForSearchString.get(s));
+			}		
+			return res.toArray(new String[0]);
+		} else {
+			// user typed in a mix of upper case and lower case,
+			// we assume user wants to have exact search
+			String ender = incrementLastCharacter(str);
+			SortedSet<String> subset = _index_casesensitive.subSet(str, ender);
+			return subset.toArray(new String[0]);
+		}
+	}
+
+	/**
+	 * Increments the last character of a string.
+	 * 
+	 * Example: incrementLastCharacter("abc") returns "abd".
+	 */
+	private static String incrementLastCharacter(String str) {
+		char lastChar = str.charAt(str.length() - 1);
+		String ender = str.substring(0, str.length() - 1) + Character.toString((char) (lastChar + 1));
+		return ender;
+	}
+
+	private static boolean stringMinLength(String str) {
+		return str.length() < AbstractAutoCompleter.SHORTEST_TO_COMPLETE;
+	}
+
+	public void addWordToIndex(String word) {
+		if (word.length() >= SHORTEST_WORD) {
+			_index_casesensitive.add(word);
+			
+			// insensitive treatment
+			// first, add the lower cased word to search index
+			// second, add a mapping from the lower cased word to the real word
+			String word_lcase = word.toLowerCase();
+			_index_caseinsensitive.add(word_lcase);
+			TreeSet<String> set = _possibleStringsForSearchString.get(word_lcase);
+			if (set==null) {
+				set = new TreeSet<String>();
+			}
+			set.add(word);
+			_possibleStringsForSearchString.put(word_lcase, set);
+		}
+	}
+
+	public boolean indexContainsWord(String word) {
+		return _index_caseinsensitive.contains(word.toLowerCase());
+	}
+
+    public String getPrefix() {
+        return "";
+    }
+
+}
diff --git a/src/java/net/sf/jabref/autocompleter/AutoCompleterFactory.java b/src/java/net/sf/jabref/autocompleter/AutoCompleterFactory.java
index 10346a6..808581d 100644
--- a/src/java/net/sf/jabref/autocompleter/AutoCompleterFactory.java
+++ b/src/java/net/sf/jabref/autocompleter/AutoCompleterFactory.java
@@ -1,39 +1,39 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.autocompleter;
-
-/**
- * Returns an autocompleter to a given fieldname.
- * 
- * @author kahlert, cordes
- */
-public class AutoCompleterFactory {
-
-	public static AbstractAutoCompleter getFor(String fieldName) {
-		AbstractAutoCompleter result;
-		if (fieldName.equals("author") || fieldName.equals("editor")) {
-			result = new NameFieldAutoCompleter(fieldName);
-		} else if (fieldName.equals("crossref")) {
-			result = new CrossrefAutoCompleter(fieldName);
-		} else if (fieldName.equals("journal") || fieldName.equals("publisher")) {
-			result = new EntireFieldAutoCompleter(fieldName);
-		} else {
-			result = new DefaultAutoCompleter(fieldName);
-		}
-		return result;
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.autocompleter;
+
+/**
+ * Returns an autocompleter to a given fieldname.
+ * 
+ * @author kahlert, cordes
+ */
+public class AutoCompleterFactory {
+
+	public static AbstractAutoCompleter getFor(String fieldName) {
+		AbstractAutoCompleter result;
+		if (fieldName.equals("author") || fieldName.equals("editor")) {
+			result = new NameFieldAutoCompleter(fieldName);
+		} else if (fieldName.equals("crossref")) {
+			result = new CrossrefAutoCompleter(fieldName);
+		} else if (fieldName.equals("journal") || fieldName.equals("publisher")) {
+			result = new EntireFieldAutoCompleter(fieldName);
+		} else {
+			result = new DefaultAutoCompleter(fieldName);
+		}
+		return result;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/autocompleter/CrossrefAutoCompleter.java b/src/java/net/sf/jabref/autocompleter/CrossrefAutoCompleter.java
index 49746d1..668d72f 100644
--- a/src/java/net/sf/jabref/autocompleter/CrossrefAutoCompleter.java
+++ b/src/java/net/sf/jabref/autocompleter/CrossrefAutoCompleter.java
@@ -1,53 +1,53 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.autocompleter;
-
-import net.sf.jabref.BibtexEntry;
-
-/**
- * Crossref autocompleter stores info from the key field.
- * 
- * @author kahlert, cordes
- * 
- */
-public class CrossrefAutoCompleter extends AbstractAutoCompleter {
-
-	public String _fieldName;
-
-	/**
-	 * @see AutoCompleterFactory
-	 */
-	protected CrossrefAutoCompleter(String fieldName) {
-		_fieldName = fieldName;
-	}
-
-	public boolean isSingleUnitField() {
-		return false;
-	}
-
-	public String[] complete(String s) {
-		return super.complete(s);
-	}
-
-	@Override
-	public void addBibtexEntry(BibtexEntry entry) {
-		if (entry != null) {
-			String key = entry.getCiteKey();
-			if (key != null)
-				addWordToIndex(key.trim());
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.autocompleter;
+
+import net.sf.jabref.BibtexEntry;
+
+/**
+ * Crossref autocompleter stores info from the key field.
+ * 
+ * @author kahlert, cordes
+ * 
+ */
+public class CrossrefAutoCompleter extends AbstractAutoCompleter {
+
+	public String _fieldName;
+
+	/**
+	 * @see AutoCompleterFactory
+	 */
+	protected CrossrefAutoCompleter(String fieldName) {
+		_fieldName = fieldName;
+	}
+
+	public boolean isSingleUnitField() {
+		return false;
+	}
+
+	public String[] complete(String s) {
+		return super.complete(s);
+	}
+
+	@Override
+	public void addBibtexEntry(BibtexEntry entry) {
+		if (entry != null) {
+			String key = entry.getCiteKey();
+			if (key != null)
+				addWordToIndex(key.trim());
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/autocompleter/DefaultAutoCompleter.java b/src/java/net/sf/jabref/autocompleter/DefaultAutoCompleter.java
index 3d130e5..30fc791 100644
--- a/src/java/net/sf/jabref/autocompleter/DefaultAutoCompleter.java
+++ b/src/java/net/sf/jabref/autocompleter/DefaultAutoCompleter.java
@@ -1,64 +1,64 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.autocompleter;
-
-import java.util.StringTokenizer;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-
-/**
- * Stores all words which are separated by Globals.SEPARATING_CHARS. This
- * autocompleter only processes the field which is given by the fieldname.
- * 
- * @author kahlert, cordes
- * 
- */
-public class DefaultAutoCompleter extends AbstractAutoCompleter {
-
-	public String _fieldName;
-
-	/**
-	 * @see AutoCompleterFactory
-	 */
-	protected DefaultAutoCompleter(String fieldName) {
-		_fieldName = fieldName;
-	}
-
-	public boolean isSingleUnitField() {
-		return false;
-	}
-
-	public String[] complete(String s) {
-		return super.complete(s);
-	}
-
-	@Override
-	public void addBibtexEntry(BibtexEntry entry) {
-		if (entry != null) {
-			String fieldValue = entry.getField(_fieldName);
-			if (fieldValue == null) {
-				return;
-			} else {
-				StringTokenizer tok = new StringTokenizer(fieldValue.toString(), Globals.SEPARATING_CHARS);
-				while (tok.hasMoreTokens()) {
-					String word = tok.nextToken();
-					addWordToIndex(word);
-				}
-			}
-		}
-	}
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.autocompleter;
+
+import java.util.StringTokenizer;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+
+/**
+ * Stores all words which are separated by Globals.SEPARATING_CHARS. This
+ * autocompleter only processes the field which is given by the fieldname.
+ * 
+ * @author kahlert, cordes
+ * 
+ */
+public class DefaultAutoCompleter extends AbstractAutoCompleter {
+
+	public String _fieldName;
+
+	/**
+	 * @see AutoCompleterFactory
+	 */
+	protected DefaultAutoCompleter(String fieldName) {
+		_fieldName = fieldName;
+	}
+
+	public boolean isSingleUnitField() {
+		return false;
+	}
+
+	public String[] complete(String s) {
+		return super.complete(s);
+	}
+
+	@Override
+	public void addBibtexEntry(BibtexEntry entry) {
+		if (entry != null) {
+			String fieldValue = entry.getField(_fieldName);
+			if (fieldValue == null) {
+				return;
+			} else {
+				StringTokenizer tok = new StringTokenizer(fieldValue.toString(), Globals.SEPARATING_CHARS);
+				while (tok.hasMoreTokens()) {
+					String word = tok.nextToken();
+					addWordToIndex(word);
+				}
+			}
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/autocompleter/EntireFieldAutoCompleter.java b/src/java/net/sf/jabref/autocompleter/EntireFieldAutoCompleter.java
index 36cfc5e..a2ba63c 100644
--- a/src/java/net/sf/jabref/autocompleter/EntireFieldAutoCompleter.java
+++ b/src/java/net/sf/jabref/autocompleter/EntireFieldAutoCompleter.java
@@ -1,54 +1,54 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.autocompleter;
-
-import net.sf.jabref.BibtexEntry;
-
-/**
- * Stores the full original value of one field of the given BibtexEntries.
- * 
- * @author kahlert, cordes
- * 
- */
-public class EntireFieldAutoCompleter extends AbstractAutoCompleter {
-
-	public String _fieldName;
-
-	/**
-	 * @see AutoCompleterFactory
-	 */
-	protected EntireFieldAutoCompleter(String fieldName) {
-		_fieldName = fieldName;
-	}
-
-	public boolean isSingleUnitField() {
-		return true;
-	}
-
-	public String[] complete(String s) {
-		return super.complete(s);
-	}
-
-	@Override
-	public void addBibtexEntry(BibtexEntry entry) {
-		if (entry != null) {
-			String fieldValue = entry.getField(_fieldName);
-			if (fieldValue != null) {
-				addWordToIndex(fieldValue.toString().trim());
-			}
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.autocompleter;
+
+import net.sf.jabref.BibtexEntry;
+
+/**
+ * Stores the full original value of one field of the given BibtexEntries.
+ * 
+ * @author kahlert, cordes
+ * 
+ */
+public class EntireFieldAutoCompleter extends AbstractAutoCompleter {
+
+	public String _fieldName;
+
+	/**
+	 * @see AutoCompleterFactory
+	 */
+	protected EntireFieldAutoCompleter(String fieldName) {
+		_fieldName = fieldName;
+	}
+
+	public boolean isSingleUnitField() {
+		return true;
+	}
+
+	public String[] complete(String s) {
+		return super.complete(s);
+	}
+
+	@Override
+	public void addBibtexEntry(BibtexEntry entry) {
+		if (entry != null) {
+			String fieldValue = entry.getField(_fieldName);
+			if (fieldValue != null) {
+				addWordToIndex(fieldValue.toString().trim());
+			}
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/autocompleter/NameFieldAutoCompleter.java b/src/java/net/sf/jabref/autocompleter/NameFieldAutoCompleter.java
index 9986504..e4f7f82 100644
--- a/src/java/net/sf/jabref/autocompleter/NameFieldAutoCompleter.java
+++ b/src/java/net/sf/jabref/autocompleter/NameFieldAutoCompleter.java
@@ -1,171 +1,171 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.autocompleter;
-
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-
-/**
- * Interprets the given values as names and stores them in different
- * permutations so we can complete by beginning with last name or first name.
- * 
- * @author kahlert, cordes
- * 
- */
-public class NameFieldAutoCompleter extends AbstractAutoCompleter {
-
-	private String[] fieldNames;
-    private boolean lastNameOnlyAndSeparationBySpace; // true if only last names should be completed and there is NO separation by " and ", but by " "
-    private String prefix = "";
-    private boolean autoCompFF, autoCompLF, autoCompFullFirstOnly, autoCompShortFirstOnly;
-
-	/**
-	 * @see AutoCompleterFactory
-	 */
-    protected NameFieldAutoCompleter(String fieldName) {
-        this(new String[] {fieldName}, false);
-
-    }
-
-	public NameFieldAutoCompleter(String[] fieldNames, boolean lastNameOnlyAndSeparationBySpace) {
-		this.fieldNames = fieldNames;
-        this.lastNameOnlyAndSeparationBySpace = lastNameOnlyAndSeparationBySpace;
-        if (Globals.prefs.getBoolean("autoCompFF")) {
-            autoCompFF = true;
-            autoCompLF = false;
-        }
-        else if (Globals.prefs.getBoolean("autoCompLF")) {
-            autoCompFF = false;
-            autoCompLF = true;
-        }
-        else {
-            autoCompFF = true;
-            autoCompLF = true;
-        }
-        autoCompShortFirstOnly = Globals.prefs.get(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE).equals(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_ABBR);
-        autoCompFullFirstOnly = Globals.prefs.get(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE).equals(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_FULL);
-	}
-
-	public boolean isSingleUnitField() {
-		// quick hack
-		// when used at entry fields (!this.lastNameOnlyAndSeparationBySpace), this is a single unit field
-		// when used at the search form (this.lastNameOnlyAndSeparationBySpace), this is NOT a single unit field
-		// reason: search keywords are separated by space. 
-		//    This is OK for last names without prefix. "Lastname" works perfectly.
-		//    querying for "van der Lastname" can be interpreted as
-		//      a) "van" "der" "Lastname"
-		//      b) "van der Lastname" (autocompletion lastname)
-		return !this.lastNameOnlyAndSeparationBySpace;
-	}
-
-	public void addBibtexEntry(BibtexEntry entry) {
-        if (entry != null) {
-            for (int i=0; i<fieldNames.length; i++) {
-                String fieldValue = entry.getField(fieldNames[i]);
-                if (fieldValue != null) {
-                    AuthorList authorList = AuthorList.getAuthorList(fieldValue);
-                    for (int j = 0; j < authorList.size(); j++) {
-                        AuthorList.Author author = authorList.getAuthor(j);
-                        if (lastNameOnlyAndSeparationBySpace) {
-                            addWordToIndex(author.getLastOnly());
-                        } else {
-                            if (autoCompLF) {
-                            	if (autoCompShortFirstOnly) {
-                            		addWordToIndex(author.getLastFirst(true));
-                            	} else if (autoCompFullFirstOnly) {
-                            		addWordToIndex(author.getLastFirst(false));
-                            	} else {
-                            		// JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_BOTH
-                            		addWordToIndex(author.getLastFirst(true));
-                            		addWordToIndex(author.getLastFirst(false));
-                            	}
-                            }
-                            if (autoCompFF) {
-                            	if (autoCompShortFirstOnly) {
-                            		addWordToIndex(author.getFirstLast(true));
-                            	} else if (autoCompFullFirstOnly) {
-                            		addWordToIndex(author.getFirstLast(false));
-                            	} else {
-                            		// JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_BOTH
-                                    addWordToIndex(author.getFirstLast(true));
-                                    addWordToIndex(author.getFirstLast(false));
-                            	}
-                            }
-                        }
-                    }
-                }
-            }
-		}
-	}
-	
-	/**
-	 * SIDE EFFECT: sets class variable prefix
-	 * Delimiter: " and "
-	 * 
-	 * @return String without prefix
-	 */
-	private String determinePrefixAndReturnRemainder_AND(String str) {
-        int index = str.toLowerCase().lastIndexOf(" and ");
-        if (index >= 0) {
-            prefix = str.substring(0, index+5);
-            str = str.substring(index+5);
-        } else {
-        	prefix = "";
-        }
-        return str;
-	}
-
-	/**
-	 * SIDE EFFECT: sets class variable prefix
-	 * Delimiter: " "
-	 * 
-	 * @return String without prefix
-	 */
-	private String determinePrefixAndReturnRemainder_SPACE(String str) {
-        int index = str.lastIndexOf(" ");
-        if (index >= 0) {
-            prefix = str.substring(0, index+1);
-            str = str.substring(index+1);
-        } else {
-        	prefix = "";
-        }
-        return str;
-	}
-
-	public String[] complete(String str) {
-		// Normally, one would implement that using 
-		// class inheritance. But this seemed to overengineered
-		if (this.lastNameOnlyAndSeparationBySpace) {
-			str = determinePrefixAndReturnRemainder_SPACE(str);
-		} else {
-			str = determinePrefixAndReturnRemainder_AND(str);
-		}
-        String[] res = super.complete(str);
-        return res;
-	}
-
-	public String getFieldName() {
-		return fieldNames[0];
-	}
-
-    @Override
-    public String getPrefix() {
-        return prefix;
-    }
-
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.autocompleter;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+
+/**
+ * Interprets the given values as names and stores them in different
+ * permutations so we can complete by beginning with last name or first name.
+ * 
+ * @author kahlert, cordes
+ * 
+ */
+public class NameFieldAutoCompleter extends AbstractAutoCompleter {
+
+	private String[] fieldNames;
+    private boolean lastNameOnlyAndSeparationBySpace; // true if only last names should be completed and there is NO separation by " and ", but by " "
+    private String prefix = "";
+    private boolean autoCompFF, autoCompLF, autoCompFullFirstOnly, autoCompShortFirstOnly;
+
+	/**
+	 * @see AutoCompleterFactory
+	 */
+    protected NameFieldAutoCompleter(String fieldName) {
+        this(new String[] {fieldName}, false);
+
+    }
+
+	public NameFieldAutoCompleter(String[] fieldNames, boolean lastNameOnlyAndSeparationBySpace) {
+		this.fieldNames = fieldNames;
+        this.lastNameOnlyAndSeparationBySpace = lastNameOnlyAndSeparationBySpace;
+        if (Globals.prefs.getBoolean("autoCompFF")) {
+            autoCompFF = true;
+            autoCompLF = false;
+        }
+        else if (Globals.prefs.getBoolean("autoCompLF")) {
+            autoCompFF = false;
+            autoCompLF = true;
+        }
+        else {
+            autoCompFF = true;
+            autoCompLF = true;
+        }
+        autoCompShortFirstOnly = Globals.prefs.get(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE).equals(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_ABBR);
+        autoCompFullFirstOnly = Globals.prefs.get(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE).equals(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_ONLY_FULL);
+	}
+
+	public boolean isSingleUnitField() {
+		// quick hack
+		// when used at entry fields (!this.lastNameOnlyAndSeparationBySpace), this is a single unit field
+		// when used at the search form (this.lastNameOnlyAndSeparationBySpace), this is NOT a single unit field
+		// reason: search keywords are separated by space. 
+		//    This is OK for last names without prefix. "Lastname" works perfectly.
+		//    querying for "van der Lastname" can be interpreted as
+		//      a) "van" "der" "Lastname"
+		//      b) "van der Lastname" (autocompletion lastname)
+		return !this.lastNameOnlyAndSeparationBySpace;
+	}
+
+	public void addBibtexEntry(BibtexEntry entry) {
+        if (entry != null) {
+            for (int i=0; i<fieldNames.length; i++) {
+                String fieldValue = entry.getField(fieldNames[i]);
+                if (fieldValue != null) {
+                    AuthorList authorList = AuthorList.getAuthorList(fieldValue);
+                    for (int j = 0; j < authorList.size(); j++) {
+                        AuthorList.Author author = authorList.getAuthor(j);
+                        if (lastNameOnlyAndSeparationBySpace) {
+                            addWordToIndex(author.getLastOnly());
+                        } else {
+                            if (autoCompLF) {
+                            	if (autoCompShortFirstOnly) {
+                            		addWordToIndex(author.getLastFirst(true));
+                            	} else if (autoCompFullFirstOnly) {
+                            		addWordToIndex(author.getLastFirst(false));
+                            	} else {
+                            		// JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_BOTH
+                            		addWordToIndex(author.getLastFirst(true));
+                            		addWordToIndex(author.getLastFirst(false));
+                            	}
+                            }
+                            if (autoCompFF) {
+                            	if (autoCompShortFirstOnly) {
+                            		addWordToIndex(author.getFirstLast(true));
+                            	} else if (autoCompFullFirstOnly) {
+                            		addWordToIndex(author.getFirstLast(false));
+                            	} else {
+                            		// JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_BOTH
+                                    addWordToIndex(author.getFirstLast(true));
+                                    addWordToIndex(author.getFirstLast(false));
+                            	}
+                            }
+                        }
+                    }
+                }
+            }
+		}
+	}
+	
+	/**
+	 * SIDE EFFECT: sets class variable prefix
+	 * Delimiter: " and "
+	 * 
+	 * @return String without prefix
+	 */
+	private String determinePrefixAndReturnRemainder_AND(String str) {
+        int index = str.toLowerCase().lastIndexOf(" and ");
+        if (index >= 0) {
+            prefix = str.substring(0, index+5);
+            str = str.substring(index+5);
+        } else {
+        	prefix = "";
+        }
+        return str;
+	}
+
+	/**
+	 * SIDE EFFECT: sets class variable prefix
+	 * Delimiter: " "
+	 * 
+	 * @return String without prefix
+	 */
+	private String determinePrefixAndReturnRemainder_SPACE(String str) {
+        int index = str.lastIndexOf(" ");
+        if (index >= 0) {
+            prefix = str.substring(0, index+1);
+            str = str.substring(index+1);
+        } else {
+        	prefix = "";
+        }
+        return str;
+	}
+
+	public String[] complete(String str) {
+		// Normally, one would implement that using 
+		// class inheritance. But this seemed to overengineered
+		if (this.lastNameOnlyAndSeparationBySpace) {
+			str = determinePrefixAndReturnRemainder_SPACE(str);
+		} else {
+			str = determinePrefixAndReturnRemainder_AND(str);
+		}
+        String[] res = super.complete(str);
+        return res;
+	}
+
+	public String getFieldName() {
+		return fieldNames[0];
+	}
+
+    @Override
+    public String getPrefix() {
+        return prefix;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/bst/.gitignore b/src/java/net/sf/jabref/bst/.gitignore
deleted file mode 100644
index 5a43c09..0000000
--- a/src/java/net/sf/jabref/bst/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-Bst.tokens
diff --git a/src/java/net/sf/jabref/bst/BibtexCaseChanger.java b/src/java/net/sf/jabref/bst/BibtexCaseChanger.java
index b03c4ce..693d6f7 100644
--- a/src/java/net/sf/jabref/bst/BibtexCaseChanger.java
+++ b/src/java/net/sf/jabref/bst/BibtexCaseChanger.java
@@ -1,264 +1,264 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.bst;
-
-
-public class BibtexCaseChanger {
-
-	String s;
-
-	char format;
-
-	boolean prevColon = true;
-
-	int n;
-	
-	Warn warn;
-
-	BibtexCaseChanger(String s, char format, Warn warn) {
-		this.s = s;
-		this.format = format;
-		this.n = s.length();
-		this.warn = warn;
-	}
-
-	public static String changeCase(String s, char format, Warn warn) {
-		return (new BibtexCaseChanger(s, format, warn)).changeCase();
-	}
-
-	private String changeCase() {
-		char[] c = s.toCharArray();
-
-		StringBuffer sb = new StringBuffer();
-
-		int i = 0;
-
-		while (i < n) {
-			if (c[i] == '{') {
-				braceLevel++;
-				if (braceLevel != 1 || i + 4 > n || c[i + 1] != '\\') {
-					prevColon = false;
-					sb.append(c[i]);
-					i++;
-					continue;
-				}
-				if (format == 't' && (i == 0 || (prevColon && Character.isWhitespace(c[i - 1])))) {
-					sb.append(c[i]);
-					i++;
-					prevColon = false;
-					continue;
-				}
-				i = convertSpecialChar(sb, c, i, format);
-				continue;
-			} 
-			if (c[i] == '}') {
-				sb.append(c[i]);
-				i++;
-				braceLevel = decrBraceLevel(s, braceLevel);
-				prevColon = false;
-				continue;
-			} 
-			if (braceLevel == 0) {
-				i = convertChar0(c, i, sb, format);
-				continue;
-			} 
-			sb.append(c[i]);
-			i++;
-		}
-		checkBrace(s, braceLevel);
-		return sb.toString();
-	}
-
-	int braceLevel = 0;
-
-	int decrBraceLevel(String string, int braceLevel) {
-		if (braceLevel == 0) {
-			complain(string);
-		} else {
-			braceLevel--;
-		}
-		return braceLevel;
-	}
-
-	static void complain(String s) {
-		System.out.println("Warning -- String is not brace-balanced: " + s);
-	}
-
-	static void checkBrace(String s, int braceLevel) {
-		if (braceLevel > 0) {
-			complain(s);
-		}
-	}
-
-	/**
-	 * We're dealing with a special character (usually either an undotted `\i'
-	 * or `\j', or an accent like one in Table~3.1 of the \LaTeX\ manual, or a
-	 * foreign character like one in Table~3.2) if the first character after the
-	 * |left_brace| is a |backslash|; the special character ends with the
-	 * matching |right_brace|. How we handle what's in between depends on the
-	 * special character. In general, this code will do reasonably well if there
-	 * is other stuff, too, between braces, but it doesn't try to do anything
-	 * special with |colon|s.
-	 * 
-	 * @param c
-	 * @param i
-	 * @param format
-	 * @return
-	 */
-	public int convertSpecialChar(StringBuffer sb, char[] c, int i, char format) {
-
-		sb.append(c[i]); i++; // skip over open brace
-
-		while (i < c.length && braceLevel > 0) {
-			sb.append(c[i]); i++;
-			// skip over the |backslash|
-
-			String s = findSpecialChar(c, i);
-			if (s != null) {
-				i = convertAccented(c, i, s, sb, format);
-			}
-
-			while (i < c.length && braceLevel > 0 && c[i] != '\\') {
-				if (c[i] == '}')
-					braceLevel--;
-				else if (c[i] == '{') {
-					braceLevel++;
-				}
-				i = convertNonControl(c, i, sb, format);
-			}
-		}
-		return i;
-	}
-
-	/**
-	 * Convert the given string according to the format character (title, lower,
-	 * up) and append the result to the stringBuffer, return the updated
-	 * position.
-	 * 
-	 * @param c
-	 * @param pos
-	 * @param s
-	 * @param sb
-	 * @param format
-	 * @return
-	 */
-	int convertAccented(char[] c, int pos, String s, StringBuffer sb, char format) {
-		pos += s.length();
-
-		switch (format) {
-		case TITLE_LOWERS:
-		case ALL_LOWERS:
-			if ("L O OE AE AA".indexOf(s) != -1)
-				sb.append(s.toLowerCase());
-			else
-				sb.append(s);
-			break;
-		case ALL_UPPERS:
-			if ("l o oe ae aa".indexOf(s) != -1)
-				sb.append(s.toUpperCase());
-			else if ("i j ss".indexOf(s) != -1) {
-
-				sb.deleteCharAt(sb.length() - 1); // Kill backslash
-				sb.append(s.toUpperCase());
-				while (pos < c.length && Character.isWhitespace(c[pos])) {
-					pos++;
-				}
-			} else {
-				sb.append(s);
-			}
-			break;
-		}
-		return pos;
-	}
-
-	int convertNonControl(char[] c, int pos, StringBuffer sb, char format) {
-		switch (format) {
-		case TITLE_LOWERS:
-		case ALL_LOWERS:
-			sb.append(Character.toLowerCase(c[pos]));
-			pos++;
-			break;
-		case ALL_UPPERS:
-			sb.append(Character.toUpperCase(c[pos]));
-			pos++;
-			break;
-		}
-		return pos;
-	}
-
-	public final static char TITLE_LOWERS = 't';
-
-	public final static char ALL_LOWERS = 'l';
-
-	public final static char ALL_UPPERS = 'u';
-
-	int convertChar0(char[] c, int i, StringBuffer sb, char format) {
-		switch (format) {
-		case TITLE_LOWERS:
-			if (i == 0) {
-				sb.append(c[i]);
-			} else if (prevColon && Character.isWhitespace(c[i - 1])) {
-				sb.append(c[i]);
-			} else {
-				sb.append(Character.toLowerCase(c[i]));
-			}
-			if (c[i] == ':')
-				prevColon = true;
-			else if (!Character.isWhitespace(c[i]))
-				prevColon = false;
-			break;
-		case ALL_LOWERS:
-			sb.append(Character.toLowerCase(c[i]));
-			break;
-		case ALL_UPPERS:
-			sb.append(Character.toUpperCase(c[i]));
-		}
-		i++;
-		return i;
-	}
-
-	static String findSpecialChar(char[] c, int pos) {
-		if (pos + 1 < c.length) {
-			if (c[pos] == 'o' && c[pos + 1] == 'e')
-				return "oe";
-			if (c[pos] == 'O' && c[pos + 1] == 'E')
-				return "OE";
-			if (c[pos] == 'a' && c[pos + 1] == 'e')
-				return "ae";
-			if (c[pos] == 'A' && c[pos + 1] == 'E')
-				return "AE";
-			if (c[pos] == 's' && c[pos + 1] == 's')
-				return "ss";
-			if (c[pos] == 'A' && c[pos + 1] == 'A')
-				return "AA";
-			if (c[pos] == 'a' && c[pos + 1] == 'a')
-				return "aa";
-		}
-		if (c[pos] == 'i')
-			return String.valueOf(c[pos]);
-		if (c[pos] == 'j')
-			return String.valueOf(c[pos]);
-		if (c[pos] == 'o')
-			return String.valueOf(c[pos]);
-		if (c[pos] == 'O')
-			return String.valueOf(c[pos]);
-		if (c[pos] == 'l')
-			return String.valueOf(c[pos]);
-		if (c[pos] == 'L')
-			return String.valueOf(c[pos]);
-		return null;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.bst;
+
+
+public class BibtexCaseChanger {
+
+	String s;
+
+	char format;
+
+	boolean prevColon = true;
+
+	int n;
+	
+	Warn warn;
+
+	BibtexCaseChanger(String s, char format, Warn warn) {
+		this.s = s;
+		this.format = format;
+		this.n = s.length();
+		this.warn = warn;
+	}
+
+	public static String changeCase(String s, char format, Warn warn) {
+		return (new BibtexCaseChanger(s, format, warn)).changeCase();
+	}
+
+	private String changeCase() {
+		char[] c = s.toCharArray();
+
+		StringBuffer sb = new StringBuffer();
+
+		int i = 0;
+
+		while (i < n) {
+			if (c[i] == '{') {
+				braceLevel++;
+				if (braceLevel != 1 || i + 4 > n || c[i + 1] != '\\') {
+					prevColon = false;
+					sb.append(c[i]);
+					i++;
+					continue;
+				}
+				if (format == 't' && (i == 0 || (prevColon && Character.isWhitespace(c[i - 1])))) {
+					sb.append(c[i]);
+					i++;
+					prevColon = false;
+					continue;
+				}
+				i = convertSpecialChar(sb, c, i, format);
+				continue;
+			} 
+			if (c[i] == '}') {
+				sb.append(c[i]);
+				i++;
+				braceLevel = decrBraceLevel(s, braceLevel);
+				prevColon = false;
+				continue;
+			} 
+			if (braceLevel == 0) {
+				i = convertChar0(c, i, sb, format);
+				continue;
+			} 
+			sb.append(c[i]);
+			i++;
+		}
+		checkBrace(s, braceLevel);
+		return sb.toString();
+	}
+
+	int braceLevel = 0;
+
+	int decrBraceLevel(String string, int braceLevel) {
+		if (braceLevel == 0) {
+			complain(string);
+		} else {
+			braceLevel--;
+		}
+		return braceLevel;
+	}
+
+	static void complain(String s) {
+		System.out.println("Warning -- String is not brace-balanced: " + s);
+	}
+
+	static void checkBrace(String s, int braceLevel) {
+		if (braceLevel > 0) {
+			complain(s);
+		}
+	}
+
+	/**
+	 * We're dealing with a special character (usually either an undotted `\i'
+	 * or `\j', or an accent like one in Table~3.1 of the \LaTeX\ manual, or a
+	 * foreign character like one in Table~3.2) if the first character after the
+	 * |left_brace| is a |backslash|; the special character ends with the
+	 * matching |right_brace|. How we handle what's in between depends on the
+	 * special character. In general, this code will do reasonably well if there
+	 * is other stuff, too, between braces, but it doesn't try to do anything
+	 * special with |colon|s.
+	 * 
+	 * @param c
+	 * @param i
+	 * @param format
+	 * @return
+	 */
+	public int convertSpecialChar(StringBuffer sb, char[] c, int i, char format) {
+
+		sb.append(c[i]); i++; // skip over open brace
+
+		while (i < c.length && braceLevel > 0) {
+			sb.append(c[i]); i++;
+			// skip over the |backslash|
+
+			String s = findSpecialChar(c, i);
+			if (s != null) {
+				i = convertAccented(c, i, s, sb, format);
+			}
+
+			while (i < c.length && braceLevel > 0 && c[i] != '\\') {
+				if (c[i] == '}')
+					braceLevel--;
+				else if (c[i] == '{') {
+					braceLevel++;
+				}
+				i = convertNonControl(c, i, sb, format);
+			}
+		}
+		return i;
+	}
+
+	/**
+	 * Convert the given string according to the format character (title, lower,
+	 * up) and append the result to the stringBuffer, return the updated
+	 * position.
+	 * 
+	 * @param c
+	 * @param pos
+	 * @param s
+	 * @param sb
+	 * @param format
+	 * @return
+	 */
+	int convertAccented(char[] c, int pos, String s, StringBuffer sb, char format) {
+		pos += s.length();
+
+		switch (format) {
+		case TITLE_LOWERS:
+		case ALL_LOWERS:
+			if ("L O OE AE AA".indexOf(s) != -1)
+				sb.append(s.toLowerCase());
+			else
+				sb.append(s);
+			break;
+		case ALL_UPPERS:
+			if ("l o oe ae aa".indexOf(s) != -1)
+				sb.append(s.toUpperCase());
+			else if ("i j ss".indexOf(s) != -1) {
+
+				sb.deleteCharAt(sb.length() - 1); // Kill backslash
+				sb.append(s.toUpperCase());
+				while (pos < c.length && Character.isWhitespace(c[pos])) {
+					pos++;
+				}
+			} else {
+				sb.append(s);
+			}
+			break;
+		}
+		return pos;
+	}
+
+	int convertNonControl(char[] c, int pos, StringBuffer sb, char format) {
+		switch (format) {
+		case TITLE_LOWERS:
+		case ALL_LOWERS:
+			sb.append(Character.toLowerCase(c[pos]));
+			pos++;
+			break;
+		case ALL_UPPERS:
+			sb.append(Character.toUpperCase(c[pos]));
+			pos++;
+			break;
+		}
+		return pos;
+	}
+
+	public final static char TITLE_LOWERS = 't';
+
+	public final static char ALL_LOWERS = 'l';
+
+	public final static char ALL_UPPERS = 'u';
+
+	int convertChar0(char[] c, int i, StringBuffer sb, char format) {
+		switch (format) {
+		case TITLE_LOWERS:
+			if (i == 0) {
+				sb.append(c[i]);
+			} else if (prevColon && Character.isWhitespace(c[i - 1])) {
+				sb.append(c[i]);
+			} else {
+				sb.append(Character.toLowerCase(c[i]));
+			}
+			if (c[i] == ':')
+				prevColon = true;
+			else if (!Character.isWhitespace(c[i]))
+				prevColon = false;
+			break;
+		case ALL_LOWERS:
+			sb.append(Character.toLowerCase(c[i]));
+			break;
+		case ALL_UPPERS:
+			sb.append(Character.toUpperCase(c[i]));
+		}
+		i++;
+		return i;
+	}
+
+	static String findSpecialChar(char[] c, int pos) {
+		if (pos + 1 < c.length) {
+			if (c[pos] == 'o' && c[pos + 1] == 'e')
+				return "oe";
+			if (c[pos] == 'O' && c[pos + 1] == 'E')
+				return "OE";
+			if (c[pos] == 'a' && c[pos + 1] == 'e')
+				return "ae";
+			if (c[pos] == 'A' && c[pos + 1] == 'E')
+				return "AE";
+			if (c[pos] == 's' && c[pos + 1] == 's')
+				return "ss";
+			if (c[pos] == 'A' && c[pos + 1] == 'A')
+				return "AA";
+			if (c[pos] == 'a' && c[pos + 1] == 'a')
+				return "aa";
+		}
+		if (c[pos] == 'i')
+			return String.valueOf(c[pos]);
+		if (c[pos] == 'j')
+			return String.valueOf(c[pos]);
+		if (c[pos] == 'o')
+			return String.valueOf(c[pos]);
+		if (c[pos] == 'O')
+			return String.valueOf(c[pos]);
+		if (c[pos] == 'l')
+			return String.valueOf(c[pos]);
+		if (c[pos] == 'L')
+			return String.valueOf(c[pos]);
+		return null;
+	}
+}
diff --git a/src/java/net/sf/jabref/bst/BibtexNameFormatter.java b/src/java/net/sf/jabref/bst/BibtexNameFormatter.java
index 4ae10a4..8c9fc5e 100644
--- a/src/java/net/sf/jabref/bst/BibtexNameFormatter.java
+++ b/src/java/net/sf/jabref/bst/BibtexNameFormatter.java
@@ -1,319 +1,319 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.bst;
-
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.AuthorList.Author;
-
-/**
- * From Bibtex:
- * 
- * "The |built_in| function {\.{format.name\$}} pops the
- * top three literals (they are a string, an integer, and a string
- * literal, in that order). The last string literal represents a
- * name list (each name corresponding to a person), the integer
- * literal specifies which name to pick from this list, and the
- * first string literal specifies how to format this name, as
- * described in the \BibTeX\ documentation. Finally, this function
- * pushes the formatted name. If any of the types is incorrect, it
- * complains and pushes the null string."
- * 
- * Sounds easy - is a nightmare... X-(
- * 
- */
-public class BibtexNameFormatter {
-
-	public static String formatName(String authorsNameList, int whichName, String formatString, Warn warn){
-		AuthorList al = AuthorList.getAuthorList(authorsNameList);
-		
-		if (whichName < 1 && whichName > al.size()){
-			warn.warn("AuthorList " + authorsNameList + " does not contain an author with number " + whichName);
-			return "";
-		}
-		return formatName(al.getAuthor(whichName-1), formatString, warn);
-	}
-	
-	/**
-	 * 
-	 * @param author
-	 * @param format
-	 * @param warn may-be-null
-	 * @return
-	 */
-	public static String formatName(Author author, String format, Warn warn) {
-		
-		StringBuffer sb = new StringBuffer();
-		
-		char[] c = format.toCharArray();
-		int n = c.length;
-		int braceLevel = 0;
-		int group = 0;
-		
-		int i = 0;
-		while (i < n){
-			if (c[i] == '{'){
-				group++;
-				int groupStart = sb.length();
-				i++;
-				braceLevel++;
-				StringBuffer level1Chars = new StringBuffer();
-				StringBuffer wholeChar = new StringBuffer();
-				while (i < n && braceLevel > 0){
-					wholeChar.append(c[i]);
-					if (c[i] == '{'){
-						braceLevel++; i++; continue;
-					}
-					if (c[i] == '}'){
-						braceLevel--; i++; continue;
-					}
-					if (braceLevel == 1){
-						if (Character.isLetter(c[i])){
-							if ("fvlj".indexOf(c[i]) == -1){
-								if (warn != null)
-									warn.warn("Format String in format.name$ may only contain fvlj on brace level 1 in group " + group + ": " + format);
-							} else 
-								level1Chars.append(c[i]);
-						}
-					}
-					i++;
-				}
-				i--; // unskip last brace (for last i++ at the end)
-				String control = level1Chars.toString().toLowerCase();
-				
-				if (control.length() == 0)
-					continue;
-				
-				if (control.length() > 2 && warn != null)
-					warn.warn("Format String in format.name$ may only be one or two character long on brace level 1 in group " + group + ": " + format);
-				
-				char type = control.charAt(0);
-				
-				String tokenS;
-				switch(type){
-					case 'f': tokenS = author.getFirst(); break;
-					case 'v': tokenS = author.getVon(); break;
-					case 'l': tokenS = author.getLast(); break;
-					case 'j': tokenS = author.getJr(); break;
-					default: throw new VMException("Internal error");
-				}
-										
-				if (tokenS == null){
-					i++;
-					continue;
-				}
-				String[] tokens = tokenS.split(" ");
-								
-				boolean abbreviateThatIsSingleLetter = true;
-				
-				if (control.length() == 2){
-					if (control.charAt(1) == control.charAt(0)){
-						abbreviateThatIsSingleLetter = false;
-					} else {
-						if (warn != null)
-							warn.warn("Format String in format.name$ may only contain one type of vlfj on brace level 1 in group " + group + ": " + format);
-					}
-				}
-				
-				// Now we know what to do
-				
-				if (braceLevel == 0 && wholeChar.charAt(wholeChar.length() - 1) == '}'){
-					wholeChar.deleteCharAt(wholeChar.length() - 1);
-				}
-				
-				char[] d = wholeChar.toString().toCharArray();
-				
-				int bLevel = 1;
-				
-				String interToken = null;
-				
-				for (int j = 0; j < d.length; j++){
-					
-					if (Character.isLetter(d[j]) && bLevel == 1){
-						groupStart = sb.length();
-						if (!abbreviateThatIsSingleLetter){
-							j++;
-						}
-						if (j+1 < d.length){
-							if (d[j+1] == '{'){
-								StringBuffer interTokenSb = new StringBuffer();
-								j = consumeToMatchingBrace(interTokenSb, d, j+1);
-								interToken = interTokenSb.substring(1,interTokenSb.length()-1);
-							}
-						}
-						
-						for (int k = 0; k < tokens.length; k++){
-							String token = tokens[k];
-							if (abbreviateThatIsSingleLetter){
-								String[] dashes = token.split("-");
-								
-								StringBuffer abbToken = new StringBuffer();
-								for (int t = 0; t < dashes.length - 1; t++){
-									abbToken.append(getFirstCharOfString(dashes[t])).append(".-");
-								}
-								if (dashes.length > 0)
-									abbToken.append(getFirstCharOfString(dashes[dashes.length - 1]));
-								 
-								token = abbToken.toString();
-							} 
-							
-							// Output token
-							sb.append(token);
-							
-							if (k < tokens.length - 1){
-								// Output Intertoken String
-								if (interToken == null){
-									if (abbreviateThatIsSingleLetter){
-										sb.append(".");
-									}
-									// No clue what this means (What the hell are tokens anyway???
-								    // if (lex_class[name_sep_char[cur_token]] = sep_char) then
-								    //    append_ex_buf_char_and_check (name_sep_char[cur_token])
-								    if (k == tokens.length - 2 || numberOfChars(sb.substring(groupStart, sb.length()), 3) < 3){
-								    	sb.append("~");
-								    } else {
-								    	sb.append(" ");
-								    }
-								} else {
-									sb.append(interToken);
-								}
-							}
-						}
-					} else if (d[j] == '}'){
-						bLevel--;
-						if (bLevel > 0){
-							sb.append('}');
-						}
-					} else if (d[j] == '{'){
-						bLevel++;
-						sb.append('{');
-					} else {
-						sb.append(d[j]);
-					}
-				}
-				if (sb.length() > 0){
-					boolean noDisTie = false;
-					if (sb.charAt(sb.length() - 1) == '~' && 
-						(numberOfChars(sb.substring(groupStart, sb.length()), 4) >= 4 ||
-						(sb.length() > 1 && (noDisTie = sb.charAt(sb.length() - 2) == '~')))){
-						sb.deleteCharAt(sb.length() - 1);
-						if (!noDisTie)
-							sb.append(' ');
-					}
-				}	
-			} else if (c[i] == '}'){
-				if (warn != null)
-					warn.warn("Unmatched brace in format string: " + format);
-			} else {
-				sb.append(c[i]); // verbatim
-			}
-			i++;
-		}
-		if (braceLevel != 0)
-			warn.warn("Unbalanced brace in format string for nameFormat: " + format);
-		
-		return sb.toString();
-	}
-	
-	/**
-	 * Including the matching brace.
-	 * 
-	 * @param sb
-	 * @param c
-	 * @param pos
-	 * @return
-	 * 
-	 * assert c[pos] == '{'
-	 */
-	public static int consumeToMatchingBrace(StringBuffer sb, char[] c, int pos){
-		
-		int braceLevel = 0;
-
-		// assert c[pos] == '{';
-		
-		for (int i = pos; i < c.length; i++){
-			if (c[i] == '}'){
-				braceLevel--;
-				if (braceLevel == 0){
-					sb.append('}');
-					return i;
-				}
-			} else if (c[i] == '{'){
-				braceLevel++;
-			}
-			sb.append(c[i]);
-		}
-		return c.length;
-	}
-	
-	/**
-	 * Takes care of special characters too
-	 * 
-	 * @param s
-	 * @return
-	 */
-	public static String getFirstCharOfString(String s){
-		char[] c = s.toCharArray();
-		for (int i = 0; i < c.length; i++){
-			if (Character.isLetter(c[i])){
-				return String.valueOf(c[i]);
-			}
-			if (c[i] == '{'){
-				if (i+1 < c.length && c[i+1] == '\\'){
-					StringBuffer sb = new StringBuffer();
-					consumeToMatchingBrace(sb, c, i);
-					return sb.toString();
-				}
-			}
-		}
-		return "";
-	}
-	
-	public static int numberOfChars(String token, int stop) {
-		
-		if (stop < 0)
-			stop = Integer.MAX_VALUE;
-		
-		int result = 0;
-		int i = 0;
-		char[] c = token.toCharArray();
-		int n = c.length;
-		
-		int braceLevel = 0;
-		while (i < n && result < stop){
-			i++;
-			if (c[i-1] == '{'){
-				braceLevel++;
-				if (braceLevel == 1 && i < n && c[i] == '\\'){
-					i++;
-					while (i < n && braceLevel > 0){
-						if (c[i] == '}'){
-							braceLevel--;
-						} else if (c[i] == '{'){
-							braceLevel++;
-						}
-						i++;
-					}
-				}
-			} else if (c[i-1] == '}'){
-				braceLevel--;
-			}
-			result++;
-		}
-		return result;
-	}
-	
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.bst;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.AuthorList.Author;
+
+/**
+ * From Bibtex:
+ * 
+ * "The |built_in| function {\.{format.name\$}} pops the
+ * top three literals (they are a string, an integer, and a string
+ * literal, in that order). The last string literal represents a
+ * name list (each name corresponding to a person), the integer
+ * literal specifies which name to pick from this list, and the
+ * first string literal specifies how to format this name, as
+ * described in the \BibTeX\ documentation. Finally, this function
+ * pushes the formatted name. If any of the types is incorrect, it
+ * complains and pushes the null string."
+ * 
+ * Sounds easy - is a nightmare... X-(
+ * 
+ */
+public class BibtexNameFormatter {
+
+	public static String formatName(String authorsNameList, int whichName, String formatString, Warn warn){
+		AuthorList al = AuthorList.getAuthorList(authorsNameList);
+		
+		if (whichName < 1 && whichName > al.size()){
+			warn.warn("AuthorList " + authorsNameList + " does not contain an author with number " + whichName);
+			return "";
+		}
+		return formatName(al.getAuthor(whichName-1), formatString, warn);
+	}
+	
+	/**
+	 * 
+	 * @param author
+	 * @param format
+	 * @param warn may-be-null
+	 * @return
+	 */
+	public static String formatName(Author author, String format, Warn warn) {
+		
+		StringBuffer sb = new StringBuffer();
+		
+		char[] c = format.toCharArray();
+		int n = c.length;
+		int braceLevel = 0;
+		int group = 0;
+		
+		int i = 0;
+		while (i < n){
+			if (c[i] == '{'){
+				group++;
+				int groupStart = sb.length();
+				i++;
+				braceLevel++;
+				StringBuffer level1Chars = new StringBuffer();
+				StringBuffer wholeChar = new StringBuffer();
+				while (i < n && braceLevel > 0){
+					wholeChar.append(c[i]);
+					if (c[i] == '{'){
+						braceLevel++; i++; continue;
+					}
+					if (c[i] == '}'){
+						braceLevel--; i++; continue;
+					}
+					if (braceLevel == 1){
+						if (Character.isLetter(c[i])){
+							if ("fvlj".indexOf(c[i]) == -1){
+								if (warn != null)
+									warn.warn("Format String in format.name$ may only contain fvlj on brace level 1 in group " + group + ": " + format);
+							} else 
+								level1Chars.append(c[i]);
+						}
+					}
+					i++;
+				}
+				i--; // unskip last brace (for last i++ at the end)
+				String control = level1Chars.toString().toLowerCase();
+				
+				if (control.length() == 0)
+					continue;
+				
+				if (control.length() > 2 && warn != null)
+					warn.warn("Format String in format.name$ may only be one or two character long on brace level 1 in group " + group + ": " + format);
+				
+				char type = control.charAt(0);
+				
+				String tokenS;
+				switch(type){
+					case 'f': tokenS = author.getFirst(); break;
+					case 'v': tokenS = author.getVon(); break;
+					case 'l': tokenS = author.getLast(); break;
+					case 'j': tokenS = author.getJr(); break;
+					default: throw new VMException("Internal error");
+				}
+										
+				if (tokenS == null){
+					i++;
+					continue;
+				}
+				String[] tokens = tokenS.split(" ");
+								
+				boolean abbreviateThatIsSingleLetter = true;
+				
+				if (control.length() == 2){
+					if (control.charAt(1) == control.charAt(0)){
+						abbreviateThatIsSingleLetter = false;
+					} else {
+						if (warn != null)
+							warn.warn("Format String in format.name$ may only contain one type of vlfj on brace level 1 in group " + group + ": " + format);
+					}
+				}
+				
+				// Now we know what to do
+				
+				if (braceLevel == 0 && wholeChar.charAt(wholeChar.length() - 1) == '}'){
+					wholeChar.deleteCharAt(wholeChar.length() - 1);
+				}
+				
+				char[] d = wholeChar.toString().toCharArray();
+				
+				int bLevel = 1;
+				
+				String interToken = null;
+				
+				for (int j = 0; j < d.length; j++){
+					
+					if (Character.isLetter(d[j]) && bLevel == 1){
+						groupStart = sb.length();
+						if (!abbreviateThatIsSingleLetter){
+							j++;
+						}
+						if (j+1 < d.length){
+							if (d[j+1] == '{'){
+								StringBuffer interTokenSb = new StringBuffer();
+								j = consumeToMatchingBrace(interTokenSb, d, j+1);
+								interToken = interTokenSb.substring(1,interTokenSb.length()-1);
+							}
+						}
+						
+						for (int k = 0; k < tokens.length; k++){
+							String token = tokens[k];
+							if (abbreviateThatIsSingleLetter){
+								String[] dashes = token.split("-");
+								
+								StringBuffer abbToken = new StringBuffer();
+								for (int t = 0; t < dashes.length - 1; t++){
+									abbToken.append(getFirstCharOfString(dashes[t])).append(".-");
+								}
+								if (dashes.length > 0)
+									abbToken.append(getFirstCharOfString(dashes[dashes.length - 1]));
+								 
+								token = abbToken.toString();
+							} 
+							
+							// Output token
+							sb.append(token);
+							
+							if (k < tokens.length - 1){
+								// Output Intertoken String
+								if (interToken == null){
+									if (abbreviateThatIsSingleLetter){
+										sb.append(".");
+									}
+									// No clue what this means (What the hell are tokens anyway???
+								    // if (lex_class[name_sep_char[cur_token]] = sep_char) then
+								    //    append_ex_buf_char_and_check (name_sep_char[cur_token])
+								    if (k == tokens.length - 2 || numberOfChars(sb.substring(groupStart, sb.length()), 3) < 3){
+								    	sb.append("~");
+								    } else {
+								    	sb.append(" ");
+								    }
+								} else {
+									sb.append(interToken);
+								}
+							}
+						}
+					} else if (d[j] == '}'){
+						bLevel--;
+						if (bLevel > 0){
+							sb.append('}');
+						}
+					} else if (d[j] == '{'){
+						bLevel++;
+						sb.append('{');
+					} else {
+						sb.append(d[j]);
+					}
+				}
+				if (sb.length() > 0){
+					boolean noDisTie = false;
+					if (sb.charAt(sb.length() - 1) == '~' && 
+						(numberOfChars(sb.substring(groupStart, sb.length()), 4) >= 4 ||
+						(sb.length() > 1 && (noDisTie = sb.charAt(sb.length() - 2) == '~')))){
+						sb.deleteCharAt(sb.length() - 1);
+						if (!noDisTie)
+							sb.append(' ');
+					}
+				}	
+			} else if (c[i] == '}'){
+				if (warn != null)
+					warn.warn("Unmatched brace in format string: " + format);
+			} else {
+				sb.append(c[i]); // verbatim
+			}
+			i++;
+		}
+		if (braceLevel != 0)
+			warn.warn("Unbalanced brace in format string for nameFormat: " + format);
+		
+		return sb.toString();
+	}
+	
+	/**
+	 * Including the matching brace.
+	 * 
+	 * @param sb
+	 * @param c
+	 * @param pos
+	 * @return
+	 * 
+	 * assert c[pos] == '{'
+	 */
+	public static int consumeToMatchingBrace(StringBuffer sb, char[] c, int pos){
+		
+		int braceLevel = 0;
+
+		// assert c[pos] == '{';
+		
+		for (int i = pos; i < c.length; i++){
+			if (c[i] == '}'){
+				braceLevel--;
+				if (braceLevel == 0){
+					sb.append('}');
+					return i;
+				}
+			} else if (c[i] == '{'){
+				braceLevel++;
+			}
+			sb.append(c[i]);
+		}
+		return c.length;
+	}
+	
+	/**
+	 * Takes care of special characters too
+	 * 
+	 * @param s
+	 * @return
+	 */
+	public static String getFirstCharOfString(String s){
+		char[] c = s.toCharArray();
+		for (int i = 0; i < c.length; i++){
+			if (Character.isLetter(c[i])){
+				return String.valueOf(c[i]);
+			}
+			if (c[i] == '{'){
+				if (i+1 < c.length && c[i+1] == '\\'){
+					StringBuffer sb = new StringBuffer();
+					consumeToMatchingBrace(sb, c, i);
+					return sb.toString();
+				}
+			}
+		}
+		return "";
+	}
+	
+	public static int numberOfChars(String token, int stop) {
+		
+		if (stop < 0)
+			stop = Integer.MAX_VALUE;
+		
+		int result = 0;
+		int i = 0;
+		char[] c = token.toCharArray();
+		int n = c.length;
+		
+		int braceLevel = 0;
+		while (i < n && result < stop){
+			i++;
+			if (c[i-1] == '{'){
+				braceLevel++;
+				if (braceLevel == 1 && i < n && c[i] == '\\'){
+					i++;
+					while (i < n && braceLevel > 0){
+						if (c[i] == '}'){
+							braceLevel--;
+						} else if (c[i] == '{'){
+							braceLevel++;
+						}
+						i++;
+					}
+				}
+			} else if (c[i-1] == '}'){
+				braceLevel--;
+			}
+			result++;
+		}
+		return result;
+	}
+	
+
+}
diff --git a/src/java/net/sf/jabref/bst/BibtexPurify.java b/src/java/net/sf/jabref/bst/BibtexPurify.java
index fbdbf27..3113b45 100644
--- a/src/java/net/sf/jabref/bst/BibtexPurify.java
+++ b/src/java/net/sf/jabref/bst/BibtexPurify.java
@@ -1,99 +1,99 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// $Id$
-package net.sf.jabref.bst;
-
-
-/**
- * 
- * The |built_in| function {\.{purify\$}} pops the top (string) literal, removes
- * nonalphanumeric characters except for |white_space| and |sep_char| characters
- * (these get converted to a |space|) and removes certain alphabetic characters
- * contained in the control sequences associated with a special character, and
- * pushes the resulting string. If the literal isn't a string, it complains and
- * pushes the null string.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class BibtexPurify {
-
-	/**
-	 * 
-	 * @param toPurify
-	 * @param warn
-	 *            may-be-null
-	 * @return
-	 */
-	public static String purify(String toPurify, Warn warn) {
-
-		StringBuffer sb = new StringBuffer();
-
-		char[] cs = toPurify.toCharArray();
-		int n = cs.length;
-		int i = 0;
-
-		int braceLevel = 0;
-
-		while (i < n) {
-			char c = cs[i];
-			if (Character.isWhitespace(c) || c == '-' || c == '~') {
-				sb.append(' ');
-			} else if (Character.isLetterOrDigit(c)) {
-				sb.append(c);
-			} else if (c == '{') {
-				braceLevel++;
-				if (braceLevel == 1 && i + 1 < n && (cs[i + 1] == '\\')) {
-					i++; // skip brace
-					while (i < n && braceLevel > 0) {
-						i++; // skip backslash
-						String specialStart = BibtexCaseChanger.findSpecialChar(cs, i);
-						if (specialStart != null) {
-							sb.append(specialStart);
-						} 
-						while (i < n && Character.isLetter(cs[i])) {
-							i++;
-						}
-						while (i < n && braceLevel > 0 && (c = cs[i]) != '\\') {
-							if (Character.isLetterOrDigit(c)) {
-								sb.append(c);
-							} else if (c == '}') {
-								braceLevel--;
-							} else if (c == '{') {
-								braceLevel++;
-							}
-							i++;
-						}
-					}
-					continue;
-				}
-			} else if (c == '}') {
-				if (braceLevel > 0) {
-					braceLevel--;
-				} else {
-					if (warn != null)
-						warn.warn("Unbalanced brace in string for purify$: " + toPurify);	
-				}
-			}
-			i++;
-		}
-		if (braceLevel != 0 && warn != null)
-			warn.warn("Unbalanced brace in string for purify$: " + toPurify);
-
-		return sb.toString();
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// $Id$
+package net.sf.jabref.bst;
+
+
+/**
+ * 
+ * The |built_in| function {\.{purify\$}} pops the top (string) literal, removes
+ * nonalphanumeric characters except for |white_space| and |sep_char| characters
+ * (these get converted to a |space|) and removes certain alphabetic characters
+ * contained in the control sequences associated with a special character, and
+ * pushes the resulting string. If the literal isn't a string, it complains and
+ * pushes the null string.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class BibtexPurify {
+
+	/**
+	 * 
+	 * @param toPurify
+	 * @param warn
+	 *            may-be-null
+	 * @return
+	 */
+	public static String purify(String toPurify, Warn warn) {
+
+		StringBuffer sb = new StringBuffer();
+
+		char[] cs = toPurify.toCharArray();
+		int n = cs.length;
+		int i = 0;
+
+		int braceLevel = 0;
+
+		while (i < n) {
+			char c = cs[i];
+			if (Character.isWhitespace(c) || c == '-' || c == '~') {
+				sb.append(' ');
+			} else if (Character.isLetterOrDigit(c)) {
+				sb.append(c);
+			} else if (c == '{') {
+				braceLevel++;
+				if (braceLevel == 1 && i + 1 < n && (cs[i + 1] == '\\')) {
+					i++; // skip brace
+					while (i < n && braceLevel > 0) {
+						i++; // skip backslash
+						String specialStart = BibtexCaseChanger.findSpecialChar(cs, i);
+						if (specialStart != null) {
+							sb.append(specialStart);
+						} 
+						while (i < n && Character.isLetter(cs[i])) {
+							i++;
+						}
+						while (i < n && braceLevel > 0 && (c = cs[i]) != '\\') {
+							if (Character.isLetterOrDigit(c)) {
+								sb.append(c);
+							} else if (c == '}') {
+								braceLevel--;
+							} else if (c == '{') {
+								braceLevel++;
+							}
+							i++;
+						}
+					}
+					continue;
+				}
+			} else if (c == '}') {
+				if (braceLevel > 0) {
+					braceLevel--;
+				} else {
+					if (warn != null)
+						warn.warn("Unbalanced brace in string for purify$: " + toPurify);	
+				}
+			}
+			i++;
+		}
+		if (braceLevel != 0 && warn != null)
+			warn.warn("Unbalanced brace in string for purify$: " + toPurify);
+
+		return sb.toString();
+	}
+}
diff --git a/src/java/net/sf/jabref/bst/BibtexTextPrefix.java b/src/java/net/sf/jabref/bst/BibtexTextPrefix.java
index 53cd2d7..12d5843 100644
--- a/src/java/net/sf/jabref/bst/BibtexTextPrefix.java
+++ b/src/java/net/sf/jabref/bst/BibtexTextPrefix.java
@@ -1,93 +1,93 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// $Id$
-package net.sf.jabref.bst;
-
-
-/**
- * The |built_in| function {\.{text.prefix\$}} pops the top two literals (the
- * integer literal |pop_lit1| and a string literal, in that order). It pushes
- * the substring of the (at most) |pop_lit1| consecutive text characters
- * starting from the beginning of the string. This function is similar to
- * {\.{substring\$}}, but this one considers an accented character (or more
- * precisely, a ``special character''$\!$, even if it's missing its matching
- * |right_brace|) to be a single text character (rather than however many
- * |ASCII_code| characters it actually comprises), and this function doesn't
- * consider braces to be text characters; furthermore, this function appends any
- * needed matching |right_brace|s. If any of the types is incorrect, it
- * complains and pushes the null string.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class BibtexTextPrefix {
-
-	/**
-	 * 
-	 * @param numOfChars
-	 * @param toPrefix
-	 * @param warn may-be-null
-	 * @return
-	 */
-	public static String textPrefix(int numOfChars, String toPrefix, Warn warn) {
-
-		StringBuffer sb = new StringBuffer();
-
-		char[] cs = toPrefix.toCharArray();
-		int n = cs.length;
-		int i = 0;
-
-		int braceLevel = 0;
-
-		while (i < n && numOfChars > 0) {
-			char c = cs[i];
-			i++;
-			if (c == '{') {
-				braceLevel++;
-				if (braceLevel == 1 && i < n && (cs[i] == '\\')) {
-					i++; // skip backslash
-					while (i < n && braceLevel > 0) {
-						if (cs[i] == '}') {
-							braceLevel--;
-						} else if (cs[i] == '{') {
-							braceLevel++;
-						}
-						i++;
-					}
-					numOfChars--;
-				}
-			} else if (c == '}') {
-				if (braceLevel > 0) {
-					braceLevel--;
-				} else {
-					if (warn != null)
-						warn.warn("Unbalanced brace in string for purify$: " + toPrefix);
-				}
-			} else {
-				numOfChars--;
-			}
-			
-		}
-		sb.append(toPrefix.substring(0, i));
-		while (braceLevel > 0){
-			sb.append('}');
-			braceLevel--;
-		}
-
-		return sb.toString();
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// $Id$
+package net.sf.jabref.bst;
+
+
+/**
+ * The |built_in| function {\.{text.prefix\$}} pops the top two literals (the
+ * integer literal |pop_lit1| and a string literal, in that order). It pushes
+ * the substring of the (at most) |pop_lit1| consecutive text characters
+ * starting from the beginning of the string. This function is similar to
+ * {\.{substring\$}}, but this one considers an accented character (or more
+ * precisely, a ``special character''$\!$, even if it's missing its matching
+ * |right_brace|) to be a single text character (rather than however many
+ * |ASCII_code| characters it actually comprises), and this function doesn't
+ * consider braces to be text characters; furthermore, this function appends any
+ * needed matching |right_brace|s. If any of the types is incorrect, it
+ * complains and pushes the null string.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class BibtexTextPrefix {
+
+	/**
+	 * 
+	 * @param numOfChars
+	 * @param toPrefix
+	 * @param warn may-be-null
+	 * @return
+	 */
+	public static String textPrefix(int numOfChars, String toPrefix, Warn warn) {
+
+		StringBuffer sb = new StringBuffer();
+
+		char[] cs = toPrefix.toCharArray();
+		int n = cs.length;
+		int i = 0;
+
+		int braceLevel = 0;
+
+		while (i < n && numOfChars > 0) {
+			char c = cs[i];
+			i++;
+			if (c == '{') {
+				braceLevel++;
+				if (braceLevel == 1 && i < n && (cs[i] == '\\')) {
+					i++; // skip backslash
+					while (i < n && braceLevel > 0) {
+						if (cs[i] == '}') {
+							braceLevel--;
+						} else if (cs[i] == '{') {
+							braceLevel++;
+						}
+						i++;
+					}
+					numOfChars--;
+				}
+			} else if (c == '}') {
+				if (braceLevel > 0) {
+					braceLevel--;
+				} else {
+					if (warn != null)
+						warn.warn("Unbalanced brace in string for purify$: " + toPrefix);
+				}
+			} else {
+				numOfChars--;
+			}
+			
+		}
+		sb.append(toPrefix.substring(0, i));
+		while (braceLevel > 0){
+			sb.append('}');
+			braceLevel--;
+		}
+
+		return sb.toString();
+	}
+}
diff --git a/src/java/net/sf/jabref/bst/BibtexWidth.java b/src/java/net/sf/jabref/bst/BibtexWidth.java
index cd8963c..1dfa3df 100644
--- a/src/java/net/sf/jabref/bst/BibtexWidth.java
+++ b/src/java/net/sf/jabref/bst/BibtexWidth.java
@@ -1,256 +1,256 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// $Id$
-package net.sf.jabref.bst;
-
-
-/**
- * 
- * The |built_in| function {\.{purify\$}} pops the top (string) literal, removes
- * nonalphanumeric characters except for |white_space| and |sep_char| characters
- * (these get converted to a |space|) and removes certain alphabetic characters
- * contained in the control sequences associated with a special character, and
- * pushes the resulting string. If the literal isn't a string, it complains and
- * pushes the null string.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class BibtexWidth {
-
-	/*
-	 * Quoted from Bibtex:
-	 * 
-	 * Now we initialize the system-dependent |char_width| array, for which
-	 * |space| is the only |white_space| character given a nonzero printing
-	 * width. The widths here are taken from Stanford's June~'87 $cmr10$~font
-	 * and represent hundredths of a point (rounded), but since they're used
-	 * only for relative comparisons, the units have no meaning.
-	 */
-
-	static int[] widths;
-
-	static int getSpecialCharWidth(char[] c, int pos) {
-		if (pos + 1 < c.length) {
-			if (c[pos] == 'o' && c[pos + 1] == 'e')
-				return 778;
-			if (c[pos] == 'O' && c[pos + 1] == 'E')
-				return 1014;
-			if (c[pos] == 'a' && c[pos + 1] == 'e')
-				return 722;
-			if (c[pos] == 'A' && c[pos + 1] == 'E')
-				return 903;
-			if (c[pos] == 's' && c[pos + 1] == 's')
-				return 500;
-		}
-		return getCharWidth(c[pos]);
-	}
-
-	public static int getCharWidth(char c) {
-
-		if (widths == null) {
-			// Watch out octals!!
-			widths = new int[0200];
-
-			for (int i = 0; i < 0200; i++) {
-				widths[i] = 0;
-			}
-			// Watch out octals!!
-			widths[040] = 278;
-			widths[041] = 278;
-			widths[042] = 500;
-			widths[043] = 833;
-			widths[044] = 500;
-			widths[045] = 833;
-			widths[046] = 778;
-			widths[047] = 278;
-			widths[050] = 389;
-			widths[051] = 389;
-			widths[052] = 500;
-			widths[053] = 778;
-			widths[054] = 278;
-			widths[055] = 333;
-			widths[056] = 278;
-			widths[057] = 500;
-			widths[060] = 500;
-			widths[061] = 500;
-			widths[062] = 500;
-			widths[063] = 500;
-			widths[064] = 500;
-			widths[065] = 500;
-			widths[066] = 500;
-			widths[067] = 500;
-			widths[070] = 500;
-			widths[071] = 500;
-			widths[072] = 278;
-			widths[073] = 278;
-			widths[074] = 278;
-			widths[075] = 778;
-			widths[076] = 472;
-			widths[077] = 472;
-			widths[0100] = 778;
-			widths[0101] = 750;
-			widths[0102] = 708;
-			widths[0103] = 722;
-			widths[0104] = 764;
-			widths[0105] = 681;
-			widths[0106] = 653;
-			widths[0107] = 785;
-			widths[0110] = 750;
-			widths[0111] = 361;
-			widths[0112] = 514;
-			widths[0113] = 778;
-			widths[0114] = 625;
-			widths[0115] = 917;
-			widths[0116] = 750;
-			widths[0117] = 778;
-			widths[0120] = 681;
-			widths[0121] = 778;
-			widths[0122] = 736;
-			widths[0123] = 556;
-			widths[0124] = 722;
-			widths[0125] = 750;
-			widths[0126] = 750;
-			widths[0127] = 1028;
-			widths[0130] = 750;
-			widths[0131] = 750;
-			widths[0132] = 611;
-			widths[0133] = 278;
-			widths[0134] = 500;
-			widths[0135] = 278;
-			widths[0136] = 500;
-			widths[0137] = 278;
-			widths[0140] = 278;
-			widths[0141] = 500;
-			widths[0142] = 556;
-			widths[0143] = 444;
-			widths[0144] = 556;
-			widths[0145] = 444;
-			widths[0146] = 306;
-			widths[0147] = 500;
-			widths[0150] = 556;
-			widths[0151] = 278;
-			widths[0152] = 306;
-			widths[0153] = 528;
-			widths[0154] = 278;
-			widths[0155] = 833;
-			widths[0156] = 556;
-			widths[0157] = 500;
-			widths[0160] = 556;
-			widths[0161] = 528;
-			widths[0162] = 392;
-			widths[0163] = 394;
-			widths[0164] = 389;
-			widths[0165] = 556;
-			widths[0166] = 528;
-			widths[0167] = 722;
-			widths[0170] = 528;
-			widths[0171] = 528;
-			widths[0172] = 444;
-			widths[0173] = 500;
-			widths[0174] = 1000;
-			widths[0175] = 500;
-			widths[0176] = 500;
-		}
-
-		if (0 <= c && c < 0200) {
-			return widths[c];
-		} else {
-			return 0;
-		}
-	}
-
-	/**
-	 * 
-	 * @param toMeasure
-	 * @param warn
-	 *            may-be-null
-	 * @return
-	 */
-	public static int width(String toMeasure, Warn warn) {
-		
-		/*
-		 * From Bibtex: We use the natural width for all but special characters,
-		 * and we complain if the string isn't brace-balanced.
-		 */
-
-		int i = 0;
-		int n = toMeasure.length();
-		int braceLevel = 0;
-		char[] c = toMeasure.toCharArray();
-		int result = 0;
-
-		
-		/*
-		 * From Bibtex:
-		 * 
-		 * We use the natural widths of all characters except that some
-		 * characters have no width: braces, control sequences (except for the
-		 * usual 13 accented and foreign characters, whose widths are given in
-		 * the next module), and |white_space| following control sequences (even
-		 * a null control sequence).
-		 * 
-		 */
-		while (i < n){
-			if (c[i] == '{'){
-				braceLevel++;
-				if (braceLevel == 1 && i + 1 < n && (c[i+1] == '\\')){
-					i++; // skip brace
-					while (i < n && braceLevel > 0){
-						i++; // skip backslash
-						
-						int afterBackslash = i;
-						while (i < n && Character.isLetter(c[i])){
-							i++;
-						}
-						if (i < n && i == afterBackslash){
-							i++; // Skip non-alpha control seq
-						} else {
-							if (BibtexCaseChanger.findSpecialChar(c, afterBackslash) != null) {
-								result += getSpecialCharWidth(c, afterBackslash);
-							}
-						}
-						while (i < n && Character.isWhitespace(c[i])){
-							i++;
-						}
-						while (i < n && braceLevel > 0 && c[i] != '\\'){
-							if (c[i] == '}'){
-								braceLevel--;
-							} else
-							if (c[i] == '{'){
-								braceLevel++;
-							} else
-								result += getCharWidth(c[i]);
-							i++;
-						}
-					}
-					continue;
-				}
-			} else if (c[i] == '}'){
-				if (braceLevel > 0){
-					braceLevel--;
-				} else {
-					BibtexCaseChanger.complain(toMeasure);
-				}
-			}
-			result += getCharWidth(c[i]);
-			i++;
-		} 
-		BibtexCaseChanger.checkBrace(toMeasure, braceLevel);
-		return result;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// $Id$
+package net.sf.jabref.bst;
+
+
+/**
+ * 
+ * The |built_in| function {\.{purify\$}} pops the top (string) literal, removes
+ * nonalphanumeric characters except for |white_space| and |sep_char| characters
+ * (these get converted to a |space|) and removes certain alphabetic characters
+ * contained in the control sequences associated with a special character, and
+ * pushes the resulting string. If the literal isn't a string, it complains and
+ * pushes the null string.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class BibtexWidth {
+
+	/*
+	 * Quoted from Bibtex:
+	 * 
+	 * Now we initialize the system-dependent |char_width| array, for which
+	 * |space| is the only |white_space| character given a nonzero printing
+	 * width. The widths here are taken from Stanford's June~'87 $cmr10$~font
+	 * and represent hundredths of a point (rounded), but since they're used
+	 * only for relative comparisons, the units have no meaning.
+	 */
+
+	static int[] widths;
+
+	static int getSpecialCharWidth(char[] c, int pos) {
+		if (pos + 1 < c.length) {
+			if (c[pos] == 'o' && c[pos + 1] == 'e')
+				return 778;
+			if (c[pos] == 'O' && c[pos + 1] == 'E')
+				return 1014;
+			if (c[pos] == 'a' && c[pos + 1] == 'e')
+				return 722;
+			if (c[pos] == 'A' && c[pos + 1] == 'E')
+				return 903;
+			if (c[pos] == 's' && c[pos + 1] == 's')
+				return 500;
+		}
+		return getCharWidth(c[pos]);
+	}
+
+	public static int getCharWidth(char c) {
+
+		if (widths == null) {
+			// Watch out octals!!
+			widths = new int[0200];
+
+			for (int i = 0; i < 0200; i++) {
+				widths[i] = 0;
+			}
+			// Watch out octals!!
+			widths[040] = 278;
+			widths[041] = 278;
+			widths[042] = 500;
+			widths[043] = 833;
+			widths[044] = 500;
+			widths[045] = 833;
+			widths[046] = 778;
+			widths[047] = 278;
+			widths[050] = 389;
+			widths[051] = 389;
+			widths[052] = 500;
+			widths[053] = 778;
+			widths[054] = 278;
+			widths[055] = 333;
+			widths[056] = 278;
+			widths[057] = 500;
+			widths[060] = 500;
+			widths[061] = 500;
+			widths[062] = 500;
+			widths[063] = 500;
+			widths[064] = 500;
+			widths[065] = 500;
+			widths[066] = 500;
+			widths[067] = 500;
+			widths[070] = 500;
+			widths[071] = 500;
+			widths[072] = 278;
+			widths[073] = 278;
+			widths[074] = 278;
+			widths[075] = 778;
+			widths[076] = 472;
+			widths[077] = 472;
+			widths[0100] = 778;
+			widths[0101] = 750;
+			widths[0102] = 708;
+			widths[0103] = 722;
+			widths[0104] = 764;
+			widths[0105] = 681;
+			widths[0106] = 653;
+			widths[0107] = 785;
+			widths[0110] = 750;
+			widths[0111] = 361;
+			widths[0112] = 514;
+			widths[0113] = 778;
+			widths[0114] = 625;
+			widths[0115] = 917;
+			widths[0116] = 750;
+			widths[0117] = 778;
+			widths[0120] = 681;
+			widths[0121] = 778;
+			widths[0122] = 736;
+			widths[0123] = 556;
+			widths[0124] = 722;
+			widths[0125] = 750;
+			widths[0126] = 750;
+			widths[0127] = 1028;
+			widths[0130] = 750;
+			widths[0131] = 750;
+			widths[0132] = 611;
+			widths[0133] = 278;
+			widths[0134] = 500;
+			widths[0135] = 278;
+			widths[0136] = 500;
+			widths[0137] = 278;
+			widths[0140] = 278;
+			widths[0141] = 500;
+			widths[0142] = 556;
+			widths[0143] = 444;
+			widths[0144] = 556;
+			widths[0145] = 444;
+			widths[0146] = 306;
+			widths[0147] = 500;
+			widths[0150] = 556;
+			widths[0151] = 278;
+			widths[0152] = 306;
+			widths[0153] = 528;
+			widths[0154] = 278;
+			widths[0155] = 833;
+			widths[0156] = 556;
+			widths[0157] = 500;
+			widths[0160] = 556;
+			widths[0161] = 528;
+			widths[0162] = 392;
+			widths[0163] = 394;
+			widths[0164] = 389;
+			widths[0165] = 556;
+			widths[0166] = 528;
+			widths[0167] = 722;
+			widths[0170] = 528;
+			widths[0171] = 528;
+			widths[0172] = 444;
+			widths[0173] = 500;
+			widths[0174] = 1000;
+			widths[0175] = 500;
+			widths[0176] = 500;
+		}
+
+		if (0 <= c && c < 0200) {
+			return widths[c];
+		} else {
+			return 0;
+		}
+	}
+
+	/**
+	 * 
+	 * @param toMeasure
+	 * @param warn
+	 *            may-be-null
+	 * @return
+	 */
+	public static int width(String toMeasure, Warn warn) {
+		
+		/*
+		 * From Bibtex: We use the natural width for all but special characters,
+		 * and we complain if the string isn't brace-balanced.
+		 */
+
+		int i = 0;
+		int n = toMeasure.length();
+		int braceLevel = 0;
+		char[] c = toMeasure.toCharArray();
+		int result = 0;
+
+		
+		/*
+		 * From Bibtex:
+		 * 
+		 * We use the natural widths of all characters except that some
+		 * characters have no width: braces, control sequences (except for the
+		 * usual 13 accented and foreign characters, whose widths are given in
+		 * the next module), and |white_space| following control sequences (even
+		 * a null control sequence).
+		 * 
+		 */
+		while (i < n){
+			if (c[i] == '{'){
+				braceLevel++;
+				if (braceLevel == 1 && i + 1 < n && (c[i+1] == '\\')){
+					i++; // skip brace
+					while (i < n && braceLevel > 0){
+						i++; // skip backslash
+						
+						int afterBackslash = i;
+						while (i < n && Character.isLetter(c[i])){
+							i++;
+						}
+						if (i < n && i == afterBackslash){
+							i++; // Skip non-alpha control seq
+						} else {
+							if (BibtexCaseChanger.findSpecialChar(c, afterBackslash) != null) {
+								result += getSpecialCharWidth(c, afterBackslash);
+							}
+						}
+						while (i < n && Character.isWhitespace(c[i])){
+							i++;
+						}
+						while (i < n && braceLevel > 0 && c[i] != '\\'){
+							if (c[i] == '}'){
+								braceLevel--;
+							} else
+							if (c[i] == '{'){
+								braceLevel++;
+							} else
+								result += getCharWidth(c[i]);
+							i++;
+						}
+					}
+					continue;
+				}
+			} else if (c[i] == '}'){
+				if (braceLevel > 0){
+					braceLevel--;
+				} else {
+					BibtexCaseChanger.complain(toMeasure);
+				}
+			}
+			result += getCharWidth(c[i]);
+			i++;
+		} 
+		BibtexCaseChanger.checkBrace(toMeasure, braceLevel);
+		return result;
+	}
+}
diff --git a/src/java/net/sf/jabref/bst/Bst.g b/src/java/net/sf/jabref/bst/Bst.g
index 24f4f74..a5ccd52 100644
--- a/src/java/net/sf/jabref/bst/Bst.g
+++ b/src/java/net/sf/jabref/bst/Bst.g
@@ -1,96 +1,96 @@
-grammar Bst;
-
-options {
-    output=AST;
-}
-
-tokens {
-	IDLIST;
-	STACK;
-	ENTRY;
-	COMMANDS;
-}
-
-// applies only to the parser:
- at header {// Generated by ANTLR
-package net.sf.jabref.bst;}
-
-// applies only to the lexer:
- at lexer::header {// Generated by ANTLR
-package net.sf.jabref.bst;}
-
-program : commands+ -> ^(COMMANDS commands+);
-
-commands 
-	: STRINGS^ idList
-	| INTEGERS^ idList
-	| FUNCTION^ id stack
-	| MACRO^ id '{'! STRING '}'!
-	| READ^
-	| EXECUTE^ '{'! function '}'!
-	| ITERATE^ '{'! function '}'!
-	| REVERSE^ '{'! function '}'!
-	| ENTRY^ idList0 idList0 idList0
-	| SORT^;
-
-identifier 
-	: IDENTIFIER;
-
-id 
-	: '{'! identifier '}'!;
-	
-idList 
-	: '{' identifier+ '}' -> ^(IDLIST identifier+);
-	
-idList0 
-	: '{' identifier* '}' -> ^(IDLIST identifier*);
-
-function 
-	: '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier;
-	
-stack 
-	: '{' stackitem+ '}' -> ^(STACK stackitem+);
-	
-stackitem
-	: function
-	| STRING 
-	| INTEGER 
-	| QUOTED
-	| stack;
-
-STRINGS : 'STRINGS';
-INTEGERS : 'INTEGERS';
-FUNCTION : 'FUNCTION';
-EXECUTE : 'EXECUTE';
-SORT : 'SORT';
-ITERATE : 'ITERATE';
-REVERSE : 'REVERSE';
-ENTRY : 'ENTRY';
-READ : 'READ';
-MACRO : 'MACRO';
-
-QUOTED
-	: '\'' IDENTIFIER;
-
-IDENTIFIER
-	: LETTER (LETTER|NUMERAL)* ;
-
-fragment LETTER
-	: ('a'..'z'|'A'..'Z'|'.'|'$');
-
-STRING
-	: '"' (~('"'))* '"';
-	
-INTEGER   
-	: '#' ('+'|'-')? NUMERAL+ ;
-
-fragment NUMERAL
-	: ('0'..'9');
-	
-WS
-	: (' '|'\t'|'\n')+ {_channel=99;} ;
-	
-LINE_COMMENT
-    : '%' ~('\n'|'\r')* '\r'? '\n' {_channel=99;}
-    ;
-	
+grammar Bst;
+
+options {
+    output=AST;
+}
+
+tokens {
+	IDLIST;
+	STACK;
+	ENTRY;
+	COMMANDS;
+}
+
+// applies only to the parser:
+ at header {// Generated by ANTLR
+package net.sf.jabref.bst;}
+
+// applies only to the lexer:
+ at lexer::header {// Generated by ANTLR
+package net.sf.jabref.bst;}
+
+program : commands+ -> ^(COMMANDS commands+);
+
+commands 
+	: STRINGS^ idList
+	| INTEGERS^ idList
+	| FUNCTION^ id stack
+	| MACRO^ id '{'! STRING '}'!
+	| READ^
+	| EXECUTE^ '{'! function '}'!
+	| ITERATE^ '{'! function '}'!
+	| REVERSE^ '{'! function '}'!
+	| ENTRY^ idList0 idList0 idList0
+	| SORT^;
+
+identifier 
+	: IDENTIFIER;
+
+id 
+	: '{'! identifier '}'!;
+	
+idList 
+	: '{' identifier+ '}' -> ^(IDLIST identifier+);
+	
+idList0 
+	: '{' identifier* '}' -> ^(IDLIST identifier*);
+
+function 
+	: '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier;
+	
+stack 
+	: '{' stackitem+ '}' -> ^(STACK stackitem+);
+	
+stackitem
+	: function
+	| STRING 
+	| INTEGER 
+	| QUOTED
+	| stack;
+
+STRINGS : 'STRINGS';
+INTEGERS : 'INTEGERS';
+FUNCTION : 'FUNCTION';
+EXECUTE : 'EXECUTE';
+SORT : 'SORT';
+ITERATE : 'ITERATE';
+REVERSE : 'REVERSE';
+ENTRY : 'ENTRY';
+READ : 'READ';
+MACRO : 'MACRO';
+
+QUOTED
+	: '\'' IDENTIFIER;
+
+IDENTIFIER
+	: LETTER (LETTER|NUMERAL)* ;
+
+fragment LETTER
+	: ('a'..'z'|'A'..'Z'|'.'|'$');
+
+STRING
+	: '"' (~('"'))* '"';
+	
+INTEGER   
+	: '#' ('+'|'-')? NUMERAL+ ;
+
+fragment NUMERAL
+	: ('0'..'9');
+	
+WS
+	: (' '|'\t'|'\n')+ {_channel=99;} ;
+	
+LINE_COMMENT
+    : '%' ~('\n'|'\r')* '\r'? '\n' {_channel=99;}
+    ;
+	
diff --git a/src/java/net/sf/jabref/bst/BstLexer.java b/src/java/net/sf/jabref/bst/BstLexer.java
index fe9ec15..b63721e 100644
--- a/src/java/net/sf/jabref/bst/BstLexer.java
+++ b/src/java/net/sf/jabref/bst/BstLexer.java
@@ -1,1268 +1,1268 @@
-// $ANTLR 3.4 C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g 2012-10-28 23:48:28
-// Generated by ANTLR
-package net.sf.jabref.bst;
-
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
-
- at SuppressWarnings({"all", "warnings", "unchecked"})
-public class BstLexer extends Lexer {
-    public static final int EOF=-1;
-    public static final int T__25=25;
-    public static final int T__26=26;
-    public static final int T__27=27;
-    public static final int T__28=28;
-    public static final int T__29=29;
-    public static final int T__30=30;
-    public static final int T__31=31;
-    public static final int T__32=32;
-    public static final int T__33=33;
-    public static final int COMMANDS=4;
-    public static final int ENTRY=5;
-    public static final int EXECUTE=6;
-    public static final int FUNCTION=7;
-    public static final int IDENTIFIER=8;
-    public static final int IDLIST=9;
-    public static final int INTEGER=10;
-    public static final int INTEGERS=11;
-    public static final int ITERATE=12;
-    public static final int LETTER=13;
-    public static final int LINE_COMMENT=14;
-    public static final int MACRO=15;
-    public static final int NUMERAL=16;
-    public static final int QUOTED=17;
-    public static final int READ=18;
-    public static final int REVERSE=19;
-    public static final int SORT=20;
-    public static final int STACK=21;
-    public static final int STRING=22;
-    public static final int STRINGS=23;
-    public static final int WS=24;
-
-    // delegates
-    // delegators
-    public Lexer[] getDelegates() {
-        return new Lexer[] {};
-    }
-
-    public BstLexer() {} 
-    public BstLexer(CharStream input) {
-        this(input, new RecognizerSharedState());
-    }
-    public BstLexer(CharStream input, RecognizerSharedState state) {
-        super(input,state);
-    }
-    public String getGrammarFileName() { return "C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g"; }
-
-    // $ANTLR start "T__25"
-    public final void mT__25() throws RecognitionException {
-        try {
-            int _type = T__25;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:5:7: ( '*' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:5:9: '*'
-            {
-            match('*'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "T__25"
-
-    // $ANTLR start "T__26"
-    public final void mT__26() throws RecognitionException {
-        try {
-            int _type = T__26;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:6:7: ( '+' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:6:9: '+'
-            {
-            match('+'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "T__26"
-
-    // $ANTLR start "T__27"
-    public final void mT__27() throws RecognitionException {
-        try {
-            int _type = T__27;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:7:7: ( '-' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:7:9: '-'
-            {
-            match('-'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "T__27"
-
-    // $ANTLR start "T__28"
-    public final void mT__28() throws RecognitionException {
-        try {
-            int _type = T__28;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:8:7: ( ':=' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:8:9: ':='
-            {
-            match(":="); 
-
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "T__28"
-
-    // $ANTLR start "T__29"
-    public final void mT__29() throws RecognitionException {
-        try {
-            int _type = T__29;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:9:7: ( '<' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:9:9: '<'
-            {
-            match('<'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "T__29"
-
-    // $ANTLR start "T__30"
-    public final void mT__30() throws RecognitionException {
-        try {
-            int _type = T__30;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:10:7: ( '=' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:10:9: '='
-            {
-            match('='); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "T__30"
-
-    // $ANTLR start "T__31"
-    public final void mT__31() throws RecognitionException {
-        try {
-            int _type = T__31;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:11:7: ( '>' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:11:9: '>'
-            {
-            match('>'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "T__31"
-
-    // $ANTLR start "T__32"
-    public final void mT__32() throws RecognitionException {
-        try {
-            int _type = T__32;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:12:7: ( '{' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:12:9: '{'
-            {
-            match('{'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "T__32"
-
-    // $ANTLR start "T__33"
-    public final void mT__33() throws RecognitionException {
-        try {
-            int _type = T__33;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:13:7: ( '}' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:13:9: '}'
-            {
-            match('}'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "T__33"
-
-    // $ANTLR start "STRINGS"
-    public final void mSTRINGS() throws RecognitionException {
-        try {
-            int _type = STRINGS;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:61:9: ( 'STRINGS' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:61:11: 'STRINGS'
-            {
-            match("STRINGS"); 
-
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "STRINGS"
-
-    // $ANTLR start "INTEGERS"
-    public final void mINTEGERS() throws RecognitionException {
-        try {
-            int _type = INTEGERS;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:62:10: ( 'INTEGERS' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:62:12: 'INTEGERS'
-            {
-            match("INTEGERS"); 
-
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "INTEGERS"
-
-    // $ANTLR start "FUNCTION"
-    public final void mFUNCTION() throws RecognitionException {
-        try {
-            int _type = FUNCTION;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:63:10: ( 'FUNCTION' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:63:12: 'FUNCTION'
-            {
-            match("FUNCTION"); 
-
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "FUNCTION"
-
-    // $ANTLR start "EXECUTE"
-    public final void mEXECUTE() throws RecognitionException {
-        try {
-            int _type = EXECUTE;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:64:9: ( 'EXECUTE' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:64:11: 'EXECUTE'
-            {
-            match("EXECUTE"); 
-
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "EXECUTE"
-
-    // $ANTLR start "SORT"
-    public final void mSORT() throws RecognitionException {
-        try {
-            int _type = SORT;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:65:6: ( 'SORT' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:65:8: 'SORT'
-            {
-            match("SORT"); 
-
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "SORT"
-
-    // $ANTLR start "ITERATE"
-    public final void mITERATE() throws RecognitionException {
-        try {
-            int _type = ITERATE;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:66:9: ( 'ITERATE' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:66:11: 'ITERATE'
-            {
-            match("ITERATE"); 
-
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "ITERATE"
-
-    // $ANTLR start "REVERSE"
-    public final void mREVERSE() throws RecognitionException {
-        try {
-            int _type = REVERSE;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:67:9: ( 'REVERSE' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:67:11: 'REVERSE'
-            {
-            match("REVERSE"); 
-
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "REVERSE"
-
-    // $ANTLR start "ENTRY"
-    public final void mENTRY() throws RecognitionException {
-        try {
-            int _type = ENTRY;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:68:7: ( 'ENTRY' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:68:9: 'ENTRY'
-            {
-            match("ENTRY"); 
-
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "ENTRY"
-
-    // $ANTLR start "READ"
-    public final void mREAD() throws RecognitionException {
-        try {
-            int _type = READ;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:69:6: ( 'READ' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:69:8: 'READ'
-            {
-            match("READ"); 
-
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "READ"
-
-    // $ANTLR start "MACRO"
-    public final void mMACRO() throws RecognitionException {
-        try {
-            int _type = MACRO;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:70:7: ( 'MACRO' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:70:9: 'MACRO'
-            {
-            match("MACRO"); 
-
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "MACRO"
-
-    // $ANTLR start "QUOTED"
-    public final void mQUOTED() throws RecognitionException {
-        try {
-            int _type = QUOTED;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:73:2: ( '\\'' IDENTIFIER )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:73:4: '\\'' IDENTIFIER
-            {
-            match('\''); 
-
-            mIDENTIFIER(); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "QUOTED"
-
-    // $ANTLR start "IDENTIFIER"
-    public final void mIDENTIFIER() throws RecognitionException {
-        try {
-            int _type = IDENTIFIER;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:76:2: ( LETTER ( LETTER | NUMERAL )* )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:76:4: LETTER ( LETTER | NUMERAL )*
-            {
-            mLETTER(); 
-
-
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:76:11: ( LETTER | NUMERAL )*
-            loop1:
-            do {
-                int alt1=2;
-                int LA1_0 = input.LA(1);
-
-                if ( (LA1_0=='$'||LA1_0=='.'||(LA1_0 >= '0' && LA1_0 <= '9')||(LA1_0 >= 'A' && LA1_0 <= 'Z')||(LA1_0 >= 'a' && LA1_0 <= 'z')) ) {
-                    alt1=1;
-                }
-
-
-                switch (alt1) {
-            	case 1 :
-            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
-            	    {
-            	    if ( input.LA(1)=='$'||input.LA(1)=='.'||(input.LA(1) >= '0' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
-            	        input.consume();
-            	    }
-            	    else {
-            	        MismatchedSetException mse = new MismatchedSetException(null,input);
-            	        recover(mse);
-            	        throw mse;
-            	    }
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop1;
-                }
-            } while (true);
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "IDENTIFIER"
-
-    // $ANTLR start "LETTER"
-    public final void mLETTER() throws RecognitionException {
-        try {
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:79:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '.' | '$' ) )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
-            {
-            if ( input.LA(1)=='$'||input.LA(1)=='.'||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
-                input.consume();
-            }
-            else {
-                MismatchedSetException mse = new MismatchedSetException(null,input);
-                recover(mse);
-                throw mse;
-            }
-
-
-            }
-
-
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "LETTER"
-
-    // $ANTLR start "STRING"
-    public final void mSTRING() throws RecognitionException {
-        try {
-            int _type = STRING;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:82:2: ( '\"' (~ ( '\"' ) )* '\"' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:82:4: '\"' (~ ( '\"' ) )* '\"'
-            {
-            match('\"'); 
-
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:82:8: (~ ( '\"' ) )*
-            loop2:
-            do {
-                int alt2=2;
-                int LA2_0 = input.LA(1);
-
-                if ( ((LA2_0 >= '\u0000' && LA2_0 <= '!')||(LA2_0 >= '#' && LA2_0 <= '\uFFFF')) ) {
-                    alt2=1;
-                }
-
-
-                switch (alt2) {
-            	case 1 :
-            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
-            	    {
-            	    if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '!')||(input.LA(1) >= '#' && input.LA(1) <= '\uFFFF') ) {
-            	        input.consume();
-            	    }
-            	    else {
-            	        MismatchedSetException mse = new MismatchedSetException(null,input);
-            	        recover(mse);
-            	        throw mse;
-            	    }
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop2;
-                }
-            } while (true);
-
-
-            match('\"'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "STRING"
-
-    // $ANTLR start "INTEGER"
-    public final void mINTEGER() throws RecognitionException {
-        try {
-            int _type = INTEGER;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:85:2: ( '#' ( '+' | '-' )? ( NUMERAL )+ )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:85:4: '#' ( '+' | '-' )? ( NUMERAL )+
-            {
-            match('#'); 
-
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:85:8: ( '+' | '-' )?
-            int alt3=2;
-            int LA3_0 = input.LA(1);
-
-            if ( (LA3_0=='+'||LA3_0=='-') ) {
-                alt3=1;
-            }
-            switch (alt3) {
-                case 1 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
-                    {
-                    if ( input.LA(1)=='+'||input.LA(1)=='-' ) {
-                        input.consume();
-                    }
-                    else {
-                        MismatchedSetException mse = new MismatchedSetException(null,input);
-                        recover(mse);
-                        throw mse;
-                    }
-
-
-                    }
-                    break;
-
-            }
-
-
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:85:19: ( NUMERAL )+
-            int cnt4=0;
-            loop4:
-            do {
-                int alt4=2;
-                int LA4_0 = input.LA(1);
-
-                if ( ((LA4_0 >= '0' && LA4_0 <= '9')) ) {
-                    alt4=1;
-                }
-
-
-                switch (alt4) {
-            	case 1 :
-            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
-            	    {
-            	    if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
-            	        input.consume();
-            	    }
-            	    else {
-            	        MismatchedSetException mse = new MismatchedSetException(null,input);
-            	        recover(mse);
-            	        throw mse;
-            	    }
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    if ( cnt4 >= 1 ) break loop4;
-                        EarlyExitException eee =
-                            new EarlyExitException(4, input);
-                        throw eee;
-                }
-                cnt4++;
-            } while (true);
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "INTEGER"
-
-    // $ANTLR start "NUMERAL"
-    public final void mNUMERAL() throws RecognitionException {
-        try {
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:88:2: ( ( '0' .. '9' ) )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
-            {
-            if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
-                input.consume();
-            }
-            else {
-                MismatchedSetException mse = new MismatchedSetException(null,input);
-                recover(mse);
-                throw mse;
-            }
-
-
-            }
-
-
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "NUMERAL"
-
-    // $ANTLR start "WS"
-    public final void mWS() throws RecognitionException {
-        try {
-            int _type = WS;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:91:2: ( ( ' ' | '\\t' | '\\n' )+ )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:91:4: ( ' ' | '\\t' | '\\n' )+
-            {
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:91:4: ( ' ' | '\\t' | '\\n' )+
-            int cnt5=0;
-            loop5:
-            do {
-                int alt5=2;
-                int LA5_0 = input.LA(1);
-
-                if ( ((LA5_0 >= '\t' && LA5_0 <= '\n')||LA5_0==' ') ) {
-                    alt5=1;
-                }
-
-
-                switch (alt5) {
-            	case 1 :
-            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
-            	    {
-            	    if ( (input.LA(1) >= '\t' && input.LA(1) <= '\n')||input.LA(1)==' ' ) {
-            	        input.consume();
-            	    }
-            	    else {
-            	        MismatchedSetException mse = new MismatchedSetException(null,input);
-            	        recover(mse);
-            	        throw mse;
-            	    }
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    if ( cnt5 >= 1 ) break loop5;
-                        EarlyExitException eee =
-                            new EarlyExitException(5, input);
-                        throw eee;
-                }
-                cnt5++;
-            } while (true);
-
-
-            _channel=99;
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "WS"
-
-    // $ANTLR start "LINE_COMMENT"
-    public final void mLINE_COMMENT() throws RecognitionException {
-        try {
-            int _type = LINE_COMMENT;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:5: ( '%' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:7: '%' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
-            {
-            match('%'); 
-
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:11: (~ ( '\\n' | '\\r' ) )*
-            loop6:
-            do {
-                int alt6=2;
-                int LA6_0 = input.LA(1);
-
-                if ( ((LA6_0 >= '\u0000' && LA6_0 <= '\t')||(LA6_0 >= '\u000B' && LA6_0 <= '\f')||(LA6_0 >= '\u000E' && LA6_0 <= '\uFFFF')) ) {
-                    alt6=1;
-                }
-
-
-                switch (alt6) {
-            	case 1 :
-            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
-            	    {
-            	    if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '\t')||(input.LA(1) >= '\u000B' && input.LA(1) <= '\f')||(input.LA(1) >= '\u000E' && input.LA(1) <= '\uFFFF') ) {
-            	        input.consume();
-            	    }
-            	    else {
-            	        MismatchedSetException mse = new MismatchedSetException(null,input);
-            	        recover(mse);
-            	        throw mse;
-            	    }
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop6;
-                }
-            } while (true);
-
-
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:25: ( '\\r' )?
-            int alt7=2;
-            int LA7_0 = input.LA(1);
-
-            if ( (LA7_0=='\r') ) {
-                alt7=1;
-            }
-            switch (alt7) {
-                case 1 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:25: '\\r'
-                    {
-                    match('\r'); 
-
-                    }
-                    break;
-
-            }
-
-
-            match('\n'); 
-
-            _channel=99;
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        	// do for sure before leaving
-        }
-    }
-    // $ANTLR end "LINE_COMMENT"
-
-    public void mTokens() throws RecognitionException {
-        // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:8: ( T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | STRINGS | INTEGERS | FUNCTION | EXECUTE | SORT | ITERATE | REVERSE | ENTRY | READ | MACRO | QUOTED | IDENTIFIER | STRING | INTEGER | WS | LINE_COMMENT )
-        int alt8=25;
-        alt8 = dfa8.predict(input);
-        switch (alt8) {
-            case 1 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:10: T__25
-                {
-                mT__25(); 
-
-
-                }
-                break;
-            case 2 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:16: T__26
-                {
-                mT__26(); 
-
-
-                }
-                break;
-            case 3 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:22: T__27
-                {
-                mT__27(); 
-
-
-                }
-                break;
-            case 4 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:28: T__28
-                {
-                mT__28(); 
-
-
-                }
-                break;
-            case 5 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:34: T__29
-                {
-                mT__29(); 
-
-
-                }
-                break;
-            case 6 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:40: T__30
-                {
-                mT__30(); 
-
-
-                }
-                break;
-            case 7 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:46: T__31
-                {
-                mT__31(); 
-
-
-                }
-                break;
-            case 8 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:52: T__32
-                {
-                mT__32(); 
-
-
-                }
-                break;
-            case 9 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:58: T__33
-                {
-                mT__33(); 
-
-
-                }
-                break;
-            case 10 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:64: STRINGS
-                {
-                mSTRINGS(); 
-
-
-                }
-                break;
-            case 11 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:72: INTEGERS
-                {
-                mINTEGERS(); 
-
-
-                }
-                break;
-            case 12 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:81: FUNCTION
-                {
-                mFUNCTION(); 
-
-
-                }
-                break;
-            case 13 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:90: EXECUTE
-                {
-                mEXECUTE(); 
-
-
-                }
-                break;
-            case 14 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:98: SORT
-                {
-                mSORT(); 
-
-
-                }
-                break;
-            case 15 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:103: ITERATE
-                {
-                mITERATE(); 
-
-
-                }
-                break;
-            case 16 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:111: REVERSE
-                {
-                mREVERSE(); 
-
-
-                }
-                break;
-            case 17 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:119: ENTRY
-                {
-                mENTRY(); 
-
-
-                }
-                break;
-            case 18 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:125: READ
-                {
-                mREAD(); 
-
-
-                }
-                break;
-            case 19 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:130: MACRO
-                {
-                mMACRO(); 
-
-
-                }
-                break;
-            case 20 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:136: QUOTED
-                {
-                mQUOTED(); 
-
-
-                }
-                break;
-            case 21 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:143: IDENTIFIER
-                {
-                mIDENTIFIER(); 
-
-
-                }
-                break;
-            case 22 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:154: STRING
-                {
-                mSTRING(); 
-
-
-                }
-                break;
-            case 23 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:161: INTEGER
-                {
-                mINTEGER(); 
-
-
-                }
-                break;
-            case 24 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:169: WS
-                {
-                mWS(); 
-
-
-                }
-                break;
-            case 25 :
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:172: LINE_COMMENT
-                {
-                mLINE_COMMENT(); 
-
-
-                }
-                break;
-
-        }
-
-    }
-
-
-    protected DFA8 dfa8 = new DFA8(this);
-    static final String DFA8_eotS =
-        "\12\uffff\6\21\6\uffff\24\21\1\64\6\21\1\73\2\21\1\uffff\4\21\1"+
-        "\102\1\21\1\uffff\1\104\5\21\1\uffff\1\21\1\uffff\1\113\1\21\1\115"+
-        "\1\21\1\117\1\120\1\uffff\1\121\1\uffff\1\122\4\uffff";
-    static final String DFA8_eofS =
-        "\123\uffff";
-    static final String DFA8_minS =
-        "\1\11\11\uffff\1\117\1\116\1\125\1\116\1\105\1\101\6\uffff\2\122"+
-        "\1\124\1\105\1\116\1\105\1\124\1\101\1\103\1\111\1\124\1\105\1\122"+
-        "\2\103\1\122\1\105\1\104\1\122\1\116\1\44\1\107\1\101\1\124\1\125"+
-        "\1\131\1\122\1\44\1\117\1\107\1\uffff\1\105\1\124\1\111\1\124\1"+
-        "\44\1\123\1\uffff\1\44\1\123\1\122\1\105\1\117\1\105\1\uffff\1\105"+
-        "\1\uffff\1\44\1\123\1\44\1\116\2\44\1\uffff\1\44\1\uffff\1\44\4"+
-        "\uffff";
-    static final String DFA8_maxS =
-        "\1\175\11\uffff\2\124\1\125\1\130\1\105\1\101\6\uffff\2\122\1\124"+
-        "\1\105\1\116\1\105\1\124\1\126\1\103\1\111\1\124\1\105\1\122\2\103"+
-        "\1\122\1\105\1\104\1\122\1\116\1\172\1\107\1\101\1\124\1\125\1\131"+
-        "\1\122\1\172\1\117\1\107\1\uffff\1\105\1\124\1\111\1\124\1\172\1"+
-        "\123\1\uffff\1\172\1\123\1\122\1\105\1\117\1\105\1\uffff\1\105\1"+
-        "\uffff\1\172\1\123\1\172\1\116\2\172\1\uffff\1\172\1\uffff\1\172"+
-        "\4\uffff";
-    static final String DFA8_acceptS =
-        "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\6\uffff\1\24\1\25"+
-        "\1\26\1\27\1\30\1\31\36\uffff\1\16\6\uffff\1\22\6\uffff\1\21\1\uffff"+
-        "\1\23\6\uffff\1\12\1\uffff\1\17\1\uffff\1\15\1\20\1\13\1\14";
-    static final String DFA8_specialS =
-        "\123\uffff}>";
-    static final String[] DFA8_transitionS = {
-            "\2\24\25\uffff\1\24\1\uffff\1\22\1\23\1\21\1\25\1\uffff\1\20"+
-            "\2\uffff\1\1\1\2\1\uffff\1\3\1\21\13\uffff\1\4\1\uffff\1\5\1"+
-            "\6\1\7\2\uffff\4\21\1\15\1\14\2\21\1\13\3\21\1\17\4\21\1\16"+
-            "\1\12\7\21\6\uffff\32\21\1\10\1\uffff\1\11",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\27\4\uffff\1\26",
-            "\1\30\5\uffff\1\31",
-            "\1\32",
-            "\1\34\11\uffff\1\33",
-            "\1\35",
-            "\1\36",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\37",
-            "\1\40",
-            "\1\41",
-            "\1\42",
-            "\1\43",
-            "\1\44",
-            "\1\45",
-            "\1\47\24\uffff\1\46",
-            "\1\50",
-            "\1\51",
-            "\1\52",
-            "\1\53",
-            "\1\54",
-            "\1\55",
-            "\1\56",
-            "\1\57",
-            "\1\60",
-            "\1\61",
-            "\1\62",
-            "\1\63",
-            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
-            "\21",
-            "\1\65",
-            "\1\66",
-            "\1\67",
-            "\1\70",
-            "\1\71",
-            "\1\72",
-            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
-            "\21",
-            "\1\74",
-            "\1\75",
-            "",
-            "\1\76",
-            "\1\77",
-            "\1\100",
-            "\1\101",
-            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
-            "\21",
-            "\1\103",
-            "",
-            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
-            "\21",
-            "\1\105",
-            "\1\106",
-            "\1\107",
-            "\1\110",
-            "\1\111",
-            "",
-            "\1\112",
-            "",
-            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
-            "\21",
-            "\1\114",
-            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
-            "\21",
-            "\1\116",
-            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
-            "\21",
-            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
-            "\21",
-            "",
-            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
-            "\21",
-            "",
-            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
-            "\21",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA8_eot = DFA.unpackEncodedString(DFA8_eotS);
-    static final short[] DFA8_eof = DFA.unpackEncodedString(DFA8_eofS);
-    static final char[] DFA8_min = DFA.unpackEncodedStringToUnsignedChars(DFA8_minS);
-    static final char[] DFA8_max = DFA.unpackEncodedStringToUnsignedChars(DFA8_maxS);
-    static final short[] DFA8_accept = DFA.unpackEncodedString(DFA8_acceptS);
-    static final short[] DFA8_special = DFA.unpackEncodedString(DFA8_specialS);
-    static final short[][] DFA8_transition;
-
-    static {
-        int numStates = DFA8_transitionS.length;
-        DFA8_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA8_transition[i] = DFA.unpackEncodedString(DFA8_transitionS[i]);
-        }
-    }
-
-    class DFA8 extends DFA {
-
-        public DFA8(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 8;
-            this.eot = DFA8_eot;
-            this.eof = DFA8_eof;
-            this.min = DFA8_min;
-            this.max = DFA8_max;
-            this.accept = DFA8_accept;
-            this.special = DFA8_special;
-            this.transition = DFA8_transition;
-        }
-        public String getDescription() {
-            return "1:1: Tokens : ( T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | STRINGS | INTEGERS | FUNCTION | EXECUTE | SORT | ITERATE | REVERSE | ENTRY | READ | MACRO | QUOTED | IDENTIFIER | STRING | INTEGER | WS | LINE_COMMENT );";
-        }
-    }
- 
-
+// $ANTLR 3.4 C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g 2012-10-28 23:48:28
+// Generated by ANTLR
+package net.sf.jabref.bst;
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+ at SuppressWarnings({"all", "warnings", "unchecked"})
+public class BstLexer extends Lexer {
+    public static final int EOF=-1;
+    public static final int T__25=25;
+    public static final int T__26=26;
+    public static final int T__27=27;
+    public static final int T__28=28;
+    public static final int T__29=29;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int T__33=33;
+    public static final int COMMANDS=4;
+    public static final int ENTRY=5;
+    public static final int EXECUTE=6;
+    public static final int FUNCTION=7;
+    public static final int IDENTIFIER=8;
+    public static final int IDLIST=9;
+    public static final int INTEGER=10;
+    public static final int INTEGERS=11;
+    public static final int ITERATE=12;
+    public static final int LETTER=13;
+    public static final int LINE_COMMENT=14;
+    public static final int MACRO=15;
+    public static final int NUMERAL=16;
+    public static final int QUOTED=17;
+    public static final int READ=18;
+    public static final int REVERSE=19;
+    public static final int SORT=20;
+    public static final int STACK=21;
+    public static final int STRING=22;
+    public static final int STRINGS=23;
+    public static final int WS=24;
+
+    // delegates
+    // delegators
+    public Lexer[] getDelegates() {
+        return new Lexer[] {};
+    }
+
+    public BstLexer() {} 
+    public BstLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public BstLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+    }
+    public String getGrammarFileName() { return "C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g"; }
+
+    // $ANTLR start "T__25"
+    public final void mT__25() throws RecognitionException {
+        try {
+            int _type = T__25;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:5:7: ( '*' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:5:9: '*'
+            {
+            match('*'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "T__25"
+
+    // $ANTLR start "T__26"
+    public final void mT__26() throws RecognitionException {
+        try {
+            int _type = T__26;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:6:7: ( '+' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:6:9: '+'
+            {
+            match('+'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "T__26"
+
+    // $ANTLR start "T__27"
+    public final void mT__27() throws RecognitionException {
+        try {
+            int _type = T__27;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:7:7: ( '-' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:7:9: '-'
+            {
+            match('-'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "T__27"
+
+    // $ANTLR start "T__28"
+    public final void mT__28() throws RecognitionException {
+        try {
+            int _type = T__28;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:8:7: ( ':=' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:8:9: ':='
+            {
+            match(":="); 
+
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "T__28"
+
+    // $ANTLR start "T__29"
+    public final void mT__29() throws RecognitionException {
+        try {
+            int _type = T__29;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:9:7: ( '<' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:9:9: '<'
+            {
+            match('<'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "T__29"
+
+    // $ANTLR start "T__30"
+    public final void mT__30() throws RecognitionException {
+        try {
+            int _type = T__30;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:10:7: ( '=' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:10:9: '='
+            {
+            match('='); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "T__30"
+
+    // $ANTLR start "T__31"
+    public final void mT__31() throws RecognitionException {
+        try {
+            int _type = T__31;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:11:7: ( '>' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:11:9: '>'
+            {
+            match('>'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "T__31"
+
+    // $ANTLR start "T__32"
+    public final void mT__32() throws RecognitionException {
+        try {
+            int _type = T__32;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:12:7: ( '{' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:12:9: '{'
+            {
+            match('{'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "T__32"
+
+    // $ANTLR start "T__33"
+    public final void mT__33() throws RecognitionException {
+        try {
+            int _type = T__33;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:13:7: ( '}' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:13:9: '}'
+            {
+            match('}'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "T__33"
+
+    // $ANTLR start "STRINGS"
+    public final void mSTRINGS() throws RecognitionException {
+        try {
+            int _type = STRINGS;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:61:9: ( 'STRINGS' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:61:11: 'STRINGS'
+            {
+            match("STRINGS"); 
+
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "STRINGS"
+
+    // $ANTLR start "INTEGERS"
+    public final void mINTEGERS() throws RecognitionException {
+        try {
+            int _type = INTEGERS;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:62:10: ( 'INTEGERS' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:62:12: 'INTEGERS'
+            {
+            match("INTEGERS"); 
+
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "INTEGERS"
+
+    // $ANTLR start "FUNCTION"
+    public final void mFUNCTION() throws RecognitionException {
+        try {
+            int _type = FUNCTION;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:63:10: ( 'FUNCTION' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:63:12: 'FUNCTION'
+            {
+            match("FUNCTION"); 
+
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "FUNCTION"
+
+    // $ANTLR start "EXECUTE"
+    public final void mEXECUTE() throws RecognitionException {
+        try {
+            int _type = EXECUTE;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:64:9: ( 'EXECUTE' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:64:11: 'EXECUTE'
+            {
+            match("EXECUTE"); 
+
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "EXECUTE"
+
+    // $ANTLR start "SORT"
+    public final void mSORT() throws RecognitionException {
+        try {
+            int _type = SORT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:65:6: ( 'SORT' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:65:8: 'SORT'
+            {
+            match("SORT"); 
+
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "SORT"
+
+    // $ANTLR start "ITERATE"
+    public final void mITERATE() throws RecognitionException {
+        try {
+            int _type = ITERATE;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:66:9: ( 'ITERATE' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:66:11: 'ITERATE'
+            {
+            match("ITERATE"); 
+
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "ITERATE"
+
+    // $ANTLR start "REVERSE"
+    public final void mREVERSE() throws RecognitionException {
+        try {
+            int _type = REVERSE;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:67:9: ( 'REVERSE' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:67:11: 'REVERSE'
+            {
+            match("REVERSE"); 
+
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "REVERSE"
+
+    // $ANTLR start "ENTRY"
+    public final void mENTRY() throws RecognitionException {
+        try {
+            int _type = ENTRY;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:68:7: ( 'ENTRY' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:68:9: 'ENTRY'
+            {
+            match("ENTRY"); 
+
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "ENTRY"
+
+    // $ANTLR start "READ"
+    public final void mREAD() throws RecognitionException {
+        try {
+            int _type = READ;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:69:6: ( 'READ' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:69:8: 'READ'
+            {
+            match("READ"); 
+
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "READ"
+
+    // $ANTLR start "MACRO"
+    public final void mMACRO() throws RecognitionException {
+        try {
+            int _type = MACRO;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:70:7: ( 'MACRO' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:70:9: 'MACRO'
+            {
+            match("MACRO"); 
+
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "MACRO"
+
+    // $ANTLR start "QUOTED"
+    public final void mQUOTED() throws RecognitionException {
+        try {
+            int _type = QUOTED;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:73:2: ( '\\'' IDENTIFIER )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:73:4: '\\'' IDENTIFIER
+            {
+            match('\''); 
+
+            mIDENTIFIER(); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "QUOTED"
+
+    // $ANTLR start "IDENTIFIER"
+    public final void mIDENTIFIER() throws RecognitionException {
+        try {
+            int _type = IDENTIFIER;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:76:2: ( LETTER ( LETTER | NUMERAL )* )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:76:4: LETTER ( LETTER | NUMERAL )*
+            {
+            mLETTER(); 
+
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:76:11: ( LETTER | NUMERAL )*
+            loop1:
+            do {
+                int alt1=2;
+                int LA1_0 = input.LA(1);
+
+                if ( (LA1_0=='$'||LA1_0=='.'||(LA1_0 >= '0' && LA1_0 <= '9')||(LA1_0 >= 'A' && LA1_0 <= 'Z')||(LA1_0 >= 'a' && LA1_0 <= 'z')) ) {
+                    alt1=1;
+                }
+
+
+                switch (alt1) {
+            	case 1 :
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
+            	    {
+            	    if ( input.LA(1)=='$'||input.LA(1)=='.'||(input.LA(1) >= '0' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
+            	        input.consume();
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop1;
+                }
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "IDENTIFIER"
+
+    // $ANTLR start "LETTER"
+    public final void mLETTER() throws RecognitionException {
+        try {
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:79:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '.' | '$' ) )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
+            {
+            if ( input.LA(1)=='$'||input.LA(1)=='.'||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
+                input.consume();
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;
+            }
+
+
+            }
+
+
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "LETTER"
+
+    // $ANTLR start "STRING"
+    public final void mSTRING() throws RecognitionException {
+        try {
+            int _type = STRING;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:82:2: ( '\"' (~ ( '\"' ) )* '\"' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:82:4: '\"' (~ ( '\"' ) )* '\"'
+            {
+            match('\"'); 
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:82:8: (~ ( '\"' ) )*
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( ((LA2_0 >= '\u0000' && LA2_0 <= '!')||(LA2_0 >= '#' && LA2_0 <= '\uFFFF')) ) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
+            	    {
+            	    if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '!')||(input.LA(1) >= '#' && input.LA(1) <= '\uFFFF') ) {
+            	        input.consume();
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop2;
+                }
+            } while (true);
+
+
+            match('\"'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "STRING"
+
+    // $ANTLR start "INTEGER"
+    public final void mINTEGER() throws RecognitionException {
+        try {
+            int _type = INTEGER;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:85:2: ( '#' ( '+' | '-' )? ( NUMERAL )+ )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:85:4: '#' ( '+' | '-' )? ( NUMERAL )+
+            {
+            match('#'); 
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:85:8: ( '+' | '-' )?
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0=='+'||LA3_0=='-') ) {
+                alt3=1;
+            }
+            switch (alt3) {
+                case 1 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
+                    {
+                    if ( input.LA(1)=='+'||input.LA(1)=='-' ) {
+                        input.consume();
+                    }
+                    else {
+                        MismatchedSetException mse = new MismatchedSetException(null,input);
+                        recover(mse);
+                        throw mse;
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:85:19: ( NUMERAL )+
+            int cnt4=0;
+            loop4:
+            do {
+                int alt4=2;
+                int LA4_0 = input.LA(1);
+
+                if ( ((LA4_0 >= '0' && LA4_0 <= '9')) ) {
+                    alt4=1;
+                }
+
+
+                switch (alt4) {
+            	case 1 :
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
+            	    {
+            	    if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
+            	        input.consume();
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt4 >= 1 ) break loop4;
+                        EarlyExitException eee =
+                            new EarlyExitException(4, input);
+                        throw eee;
+                }
+                cnt4++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "INTEGER"
+
+    // $ANTLR start "NUMERAL"
+    public final void mNUMERAL() throws RecognitionException {
+        try {
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:88:2: ( ( '0' .. '9' ) )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
+            {
+            if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
+                input.consume();
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;
+            }
+
+
+            }
+
+
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "NUMERAL"
+
+    // $ANTLR start "WS"
+    public final void mWS() throws RecognitionException {
+        try {
+            int _type = WS;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:91:2: ( ( ' ' | '\\t' | '\\n' )+ )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:91:4: ( ' ' | '\\t' | '\\n' )+
+            {
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:91:4: ( ' ' | '\\t' | '\\n' )+
+            int cnt5=0;
+            loop5:
+            do {
+                int alt5=2;
+                int LA5_0 = input.LA(1);
+
+                if ( ((LA5_0 >= '\t' && LA5_0 <= '\n')||LA5_0==' ') ) {
+                    alt5=1;
+                }
+
+
+                switch (alt5) {
+            	case 1 :
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
+            	    {
+            	    if ( (input.LA(1) >= '\t' && input.LA(1) <= '\n')||input.LA(1)==' ' ) {
+            	        input.consume();
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt5 >= 1 ) break loop5;
+                        EarlyExitException eee =
+                            new EarlyExitException(5, input);
+                        throw eee;
+                }
+                cnt5++;
+            } while (true);
+
+
+            _channel=99;
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "WS"
+
+    // $ANTLR start "LINE_COMMENT"
+    public final void mLINE_COMMENT() throws RecognitionException {
+        try {
+            int _type = LINE_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:5: ( '%' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:7: '%' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
+            {
+            match('%'); 
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:11: (~ ( '\\n' | '\\r' ) )*
+            loop6:
+            do {
+                int alt6=2;
+                int LA6_0 = input.LA(1);
+
+                if ( ((LA6_0 >= '\u0000' && LA6_0 <= '\t')||(LA6_0 >= '\u000B' && LA6_0 <= '\f')||(LA6_0 >= '\u000E' && LA6_0 <= '\uFFFF')) ) {
+                    alt6=1;
+                }
+
+
+                switch (alt6) {
+            	case 1 :
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:
+            	    {
+            	    if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '\t')||(input.LA(1) >= '\u000B' && input.LA(1) <= '\f')||(input.LA(1) >= '\u000E' && input.LA(1) <= '\uFFFF') ) {
+            	        input.consume();
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop6;
+                }
+            } while (true);
+
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:25: ( '\\r' )?
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0=='\r') ) {
+                alt7=1;
+            }
+            switch (alt7) {
+                case 1 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:94:25: '\\r'
+                    {
+                    match('\r'); 
+
+                    }
+                    break;
+
+            }
+
+
+            match('\n'); 
+
+            _channel=99;
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        	// do for sure before leaving
+        }
+    }
+    // $ANTLR end "LINE_COMMENT"
+
+    public void mTokens() throws RecognitionException {
+        // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:8: ( T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | STRINGS | INTEGERS | FUNCTION | EXECUTE | SORT | ITERATE | REVERSE | ENTRY | READ | MACRO | QUOTED | IDENTIFIER | STRING | INTEGER | WS | LINE_COMMENT )
+        int alt8=25;
+        alt8 = dfa8.predict(input);
+        switch (alt8) {
+            case 1 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:10: T__25
+                {
+                mT__25(); 
+
+
+                }
+                break;
+            case 2 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:16: T__26
+                {
+                mT__26(); 
+
+
+                }
+                break;
+            case 3 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:22: T__27
+                {
+                mT__27(); 
+
+
+                }
+                break;
+            case 4 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:28: T__28
+                {
+                mT__28(); 
+
+
+                }
+                break;
+            case 5 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:34: T__29
+                {
+                mT__29(); 
+
+
+                }
+                break;
+            case 6 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:40: T__30
+                {
+                mT__30(); 
+
+
+                }
+                break;
+            case 7 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:46: T__31
+                {
+                mT__31(); 
+
+
+                }
+                break;
+            case 8 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:52: T__32
+                {
+                mT__32(); 
+
+
+                }
+                break;
+            case 9 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:58: T__33
+                {
+                mT__33(); 
+
+
+                }
+                break;
+            case 10 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:64: STRINGS
+                {
+                mSTRINGS(); 
+
+
+                }
+                break;
+            case 11 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:72: INTEGERS
+                {
+                mINTEGERS(); 
+
+
+                }
+                break;
+            case 12 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:81: FUNCTION
+                {
+                mFUNCTION(); 
+
+
+                }
+                break;
+            case 13 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:90: EXECUTE
+                {
+                mEXECUTE(); 
+
+
+                }
+                break;
+            case 14 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:98: SORT
+                {
+                mSORT(); 
+
+
+                }
+                break;
+            case 15 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:103: ITERATE
+                {
+                mITERATE(); 
+
+
+                }
+                break;
+            case 16 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:111: REVERSE
+                {
+                mREVERSE(); 
+
+
+                }
+                break;
+            case 17 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:119: ENTRY
+                {
+                mENTRY(); 
+
+
+                }
+                break;
+            case 18 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:125: READ
+                {
+                mREAD(); 
+
+
+                }
+                break;
+            case 19 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:130: MACRO
+                {
+                mMACRO(); 
+
+
+                }
+                break;
+            case 20 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:136: QUOTED
+                {
+                mQUOTED(); 
+
+
+                }
+                break;
+            case 21 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:143: IDENTIFIER
+                {
+                mIDENTIFIER(); 
+
+
+                }
+                break;
+            case 22 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:154: STRING
+                {
+                mSTRING(); 
+
+
+                }
+                break;
+            case 23 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:161: INTEGER
+                {
+                mINTEGER(); 
+
+
+                }
+                break;
+            case 24 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:169: WS
+                {
+                mWS(); 
+
+
+                }
+                break;
+            case 25 :
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:1:172: LINE_COMMENT
+                {
+                mLINE_COMMENT(); 
+
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA8 dfa8 = new DFA8(this);
+    static final String DFA8_eotS =
+        "\12\uffff\6\21\6\uffff\24\21\1\64\6\21\1\73\2\21\1\uffff\4\21\1"+
+        "\102\1\21\1\uffff\1\104\5\21\1\uffff\1\21\1\uffff\1\113\1\21\1\115"+
+        "\1\21\1\117\1\120\1\uffff\1\121\1\uffff\1\122\4\uffff";
+    static final String DFA8_eofS =
+        "\123\uffff";
+    static final String DFA8_minS =
+        "\1\11\11\uffff\1\117\1\116\1\125\1\116\1\105\1\101\6\uffff\2\122"+
+        "\1\124\1\105\1\116\1\105\1\124\1\101\1\103\1\111\1\124\1\105\1\122"+
+        "\2\103\1\122\1\105\1\104\1\122\1\116\1\44\1\107\1\101\1\124\1\125"+
+        "\1\131\1\122\1\44\1\117\1\107\1\uffff\1\105\1\124\1\111\1\124\1"+
+        "\44\1\123\1\uffff\1\44\1\123\1\122\1\105\1\117\1\105\1\uffff\1\105"+
+        "\1\uffff\1\44\1\123\1\44\1\116\2\44\1\uffff\1\44\1\uffff\1\44\4"+
+        "\uffff";
+    static final String DFA8_maxS =
+        "\1\175\11\uffff\2\124\1\125\1\130\1\105\1\101\6\uffff\2\122\1\124"+
+        "\1\105\1\116\1\105\1\124\1\126\1\103\1\111\1\124\1\105\1\122\2\103"+
+        "\1\122\1\105\1\104\1\122\1\116\1\172\1\107\1\101\1\124\1\125\1\131"+
+        "\1\122\1\172\1\117\1\107\1\uffff\1\105\1\124\1\111\1\124\1\172\1"+
+        "\123\1\uffff\1\172\1\123\1\122\1\105\1\117\1\105\1\uffff\1\105\1"+
+        "\uffff\1\172\1\123\1\172\1\116\2\172\1\uffff\1\172\1\uffff\1\172"+
+        "\4\uffff";
+    static final String DFA8_acceptS =
+        "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\6\uffff\1\24\1\25"+
+        "\1\26\1\27\1\30\1\31\36\uffff\1\16\6\uffff\1\22\6\uffff\1\21\1\uffff"+
+        "\1\23\6\uffff\1\12\1\uffff\1\17\1\uffff\1\15\1\20\1\13\1\14";
+    static final String DFA8_specialS =
+        "\123\uffff}>";
+    static final String[] DFA8_transitionS = {
+            "\2\24\25\uffff\1\24\1\uffff\1\22\1\23\1\21\1\25\1\uffff\1\20"+
+            "\2\uffff\1\1\1\2\1\uffff\1\3\1\21\13\uffff\1\4\1\uffff\1\5\1"+
+            "\6\1\7\2\uffff\4\21\1\15\1\14\2\21\1\13\3\21\1\17\4\21\1\16"+
+            "\1\12\7\21\6\uffff\32\21\1\10\1\uffff\1\11",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\27\4\uffff\1\26",
+            "\1\30\5\uffff\1\31",
+            "\1\32",
+            "\1\34\11\uffff\1\33",
+            "\1\35",
+            "\1\36",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\37",
+            "\1\40",
+            "\1\41",
+            "\1\42",
+            "\1\43",
+            "\1\44",
+            "\1\45",
+            "\1\47\24\uffff\1\46",
+            "\1\50",
+            "\1\51",
+            "\1\52",
+            "\1\53",
+            "\1\54",
+            "\1\55",
+            "\1\56",
+            "\1\57",
+            "\1\60",
+            "\1\61",
+            "\1\62",
+            "\1\63",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\65",
+            "\1\66",
+            "\1\67",
+            "\1\70",
+            "\1\71",
+            "\1\72",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\74",
+            "\1\75",
+            "",
+            "\1\76",
+            "\1\77",
+            "\1\100",
+            "\1\101",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\103",
+            "",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\105",
+            "\1\106",
+            "\1\107",
+            "\1\110",
+            "\1\111",
+            "",
+            "\1\112",
+            "",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\114",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\116",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "",
+            "\1\21\11\uffff\1\21\1\uffff\12\21\7\uffff\32\21\6\uffff\32"+
+            "\21",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA8_eot = DFA.unpackEncodedString(DFA8_eotS);
+    static final short[] DFA8_eof = DFA.unpackEncodedString(DFA8_eofS);
+    static final char[] DFA8_min = DFA.unpackEncodedStringToUnsignedChars(DFA8_minS);
+    static final char[] DFA8_max = DFA.unpackEncodedStringToUnsignedChars(DFA8_maxS);
+    static final short[] DFA8_accept = DFA.unpackEncodedString(DFA8_acceptS);
+    static final short[] DFA8_special = DFA.unpackEncodedString(DFA8_specialS);
+    static final short[][] DFA8_transition;
+
+    static {
+        int numStates = DFA8_transitionS.length;
+        DFA8_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA8_transition[i] = DFA.unpackEncodedString(DFA8_transitionS[i]);
+        }
+    }
+
+    class DFA8 extends DFA {
+
+        public DFA8(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 8;
+            this.eot = DFA8_eot;
+            this.eof = DFA8_eof;
+            this.min = DFA8_min;
+            this.max = DFA8_max;
+            this.accept = DFA8_accept;
+            this.special = DFA8_special;
+            this.transition = DFA8_transition;
+        }
+        public String getDescription() {
+            return "1:1: Tokens : ( T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | STRINGS | INTEGERS | FUNCTION | EXECUTE | SORT | ITERATE | REVERSE | ENTRY | READ | MACRO | QUOTED | IDENTIFIER | STRING | INTEGER | WS | LINE_COMMENT );";
+        }
+    }
+ 
+
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/bst/BstParser.java b/src/java/net/sf/jabref/bst/BstParser.java
index 0a24e22..d4f3052 100644
--- a/src/java/net/sf/jabref/bst/BstParser.java
+++ b/src/java/net/sf/jabref/bst/BstParser.java
@@ -1,1592 +1,1592 @@
-// $ANTLR 3.4 C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g 2012-10-28 23:48:28
-// Generated by ANTLR
-package net.sf.jabref.bst;
-
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
-
-import org.antlr.runtime.tree.*;
-
-
- at SuppressWarnings({"all", "warnings", "unchecked"})
-public class BstParser extends Parser {
-    public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "COMMANDS", "ENTRY", "EXECUTE", "FUNCTION", "IDENTIFIER", "IDLIST", "INTEGER", "INTEGERS", "ITERATE", "LETTER", "LINE_COMMENT", "MACRO", "NUMERAL", "QUOTED", "READ", "REVERSE", "SORT", "STACK", "STRING", "STRINGS", "WS", "'*'", "'+'", "'-'", "':='", "'<'", "'='", "'>'", "'{'", "'}'"
-    };
-
-    public static final int EOF=-1;
-    public static final int T__25=25;
-    public static final int T__26=26;
-    public static final int T__27=27;
-    public static final int T__28=28;
-    public static final int T__29=29;
-    public static final int T__30=30;
-    public static final int T__31=31;
-    public static final int T__32=32;
-    public static final int T__33=33;
-    public static final int COMMANDS=4;
-    public static final int ENTRY=5;
-    public static final int EXECUTE=6;
-    public static final int FUNCTION=7;
-    public static final int IDENTIFIER=8;
-    public static final int IDLIST=9;
-    public static final int INTEGER=10;
-    public static final int INTEGERS=11;
-    public static final int ITERATE=12;
-    public static final int LETTER=13;
-    public static final int LINE_COMMENT=14;
-    public static final int MACRO=15;
-    public static final int NUMERAL=16;
-    public static final int QUOTED=17;
-    public static final int READ=18;
-    public static final int REVERSE=19;
-    public static final int SORT=20;
-    public static final int STACK=21;
-    public static final int STRING=22;
-    public static final int STRINGS=23;
-    public static final int WS=24;
-
-    // delegates
-    public Parser[] getDelegates() {
-        return new Parser[] {};
-    }
-
-    // delegators
-
-
-    public BstParser(TokenStream input) {
-        this(input, new RecognizerSharedState());
-    }
-    public BstParser(TokenStream input, RecognizerSharedState state) {
-        super(input, state);
-    }
-
-protected TreeAdaptor adaptor = new CommonTreeAdaptor();
-
-public void setTreeAdaptor(TreeAdaptor adaptor) {
-    this.adaptor = adaptor;
-}
-public TreeAdaptor getTreeAdaptor() {
-    return adaptor;
-}
-    public String[] getTokenNames() { return BstParser.tokenNames; }
-    public String getGrammarFileName() { return "C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g"; }
-
-
-    public static class program_return extends ParserRuleReturnScope {
-        Object tree;
-        public Object getTree() { return tree; }
-    };
-
-
-    // $ANTLR start "program"
-    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:1: program : ( commands )+ -> ^( COMMANDS ( commands )+ ) ;
-    public final BstParser.program_return program() throws RecognitionException {
-        BstParser.program_return retval = new BstParser.program_return();
-        retval.start = input.LT(1);
-
-
-        Object root_0 = null;
-
-        BstParser.commands_return commands1 =null;
-
-
-        RewriteRuleSubtreeStream stream_commands=new RewriteRuleSubtreeStream(adaptor,"rule commands");
-        try {
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:9: ( ( commands )+ -> ^( COMMANDS ( commands )+ ) )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:11: ( commands )+
-            {
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:11: ( commands )+
-            int cnt1=0;
-            loop1:
-            do {
-                int alt1=2;
-                int LA1_0 = input.LA(1);
-
-                if ( ((LA1_0 >= ENTRY && LA1_0 <= FUNCTION)||(LA1_0 >= INTEGERS && LA1_0 <= ITERATE)||LA1_0==MACRO||(LA1_0 >= READ && LA1_0 <= SORT)||LA1_0==STRINGS) ) {
-                    alt1=1;
-                }
-
-
-                switch (alt1) {
-            	case 1 :
-            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:11: commands
-            	    {
-            	    pushFollow(FOLLOW_commands_in_program62);
-            	    commands1=commands();
-
-            	    state._fsp--;
-
-            	    stream_commands.add(commands1.getTree());
-
-            	    }
-            	    break;
-
-            	default :
-            	    if ( cnt1 >= 1 ) break loop1;
-                        EarlyExitException eee =
-                            new EarlyExitException(1, input);
-                        throw eee;
-                }
-                cnt1++;
-            } while (true);
-
-
-            // AST REWRITE
-            // elements: commands
-            // token labels: 
-            // rule labels: retval
-            // token list labels: 
-            // rule list labels: 
-            // wildcard labels: 
-            retval.tree = root_0;
-            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
-
-            root_0 = (Object)adaptor.nil();
-            // 22:21: -> ^( COMMANDS ( commands )+ )
-            {
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:24: ^( COMMANDS ( commands )+ )
-                {
-                Object root_1 = (Object)adaptor.nil();
-                root_1 = (Object)adaptor.becomeRoot(
-                (Object)adaptor.create(COMMANDS, "COMMANDS")
-                , root_1);
-
-                if ( !(stream_commands.hasNext()) ) {
-                    throw new RewriteEarlyExitException();
-                }
-                while ( stream_commands.hasNext() ) {
-                    adaptor.addChild(root_1, stream_commands.nextTree());
-
-                }
-                stream_commands.reset();
-
-                adaptor.addChild(root_0, root_1);
-                }
-
-            }
-
-
-            retval.tree = root_0;
-
-            }
-
-            retval.stop = input.LT(-1);
-
-
-            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-
-        finally {
-        	// do for sure before leaving
-        }
-        return retval;
-    }
-    // $ANTLR end "program"
-
-
-    public static class commands_return extends ParserRuleReturnScope {
-        Object tree;
-        public Object getTree() { return tree; }
-    };
-
-
-    // $ANTLR start "commands"
-    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:24:1: commands : ( STRINGS ^ idList | INTEGERS ^ idList | FUNCTION ^ id stack | MACRO ^ id '{' ! STRING '}' !| READ ^| EXECUTE ^ '{' ! function '}' !| ITERATE ^ '{' ! function '}' !| REVERSE ^ '{' ! function '}' !| ENTRY ^ idList0 idList0 idList0 | SORT ^);
-    public final BstParser.commands_return commands() throws RecognitionException {
-        BstParser.commands_return retval = new BstParser.commands_return();
-        retval.start = input.LT(1);
-
-
-        Object root_0 = null;
-
-        Token STRINGS2=null;
-        Token INTEGERS4=null;
-        Token FUNCTION6=null;
-        Token MACRO9=null;
-        Token char_literal11=null;
-        Token STRING12=null;
-        Token char_literal13=null;
-        Token READ14=null;
-        Token EXECUTE15=null;
-        Token char_literal16=null;
-        Token char_literal18=null;
-        Token ITERATE19=null;
-        Token char_literal20=null;
-        Token char_literal22=null;
-        Token REVERSE23=null;
-        Token char_literal24=null;
-        Token char_literal26=null;
-        Token ENTRY27=null;
-        Token SORT31=null;
-        BstParser.idList_return idList3 =null;
-
-        BstParser.idList_return idList5 =null;
-
-        BstParser.id_return id7 =null;
-
-        BstParser.stack_return stack8 =null;
-
-        BstParser.id_return id10 =null;
-
-        BstParser.function_return function17 =null;
-
-        BstParser.function_return function21 =null;
-
-        BstParser.function_return function25 =null;
-
-        BstParser.idList0_return idList028 =null;
-
-        BstParser.idList0_return idList029 =null;
-
-        BstParser.idList0_return idList030 =null;
-
-
-        Object STRINGS2_tree=null;
-        Object INTEGERS4_tree=null;
-        Object FUNCTION6_tree=null;
-        Object MACRO9_tree=null;
-        Object char_literal11_tree=null;
-        Object STRING12_tree=null;
-        Object char_literal13_tree=null;
-        Object READ14_tree=null;
-        Object EXECUTE15_tree=null;
-        Object char_literal16_tree=null;
-        Object char_literal18_tree=null;
-        Object ITERATE19_tree=null;
-        Object char_literal20_tree=null;
-        Object char_literal22_tree=null;
-        Object REVERSE23_tree=null;
-        Object char_literal24_tree=null;
-        Object char_literal26_tree=null;
-        Object ENTRY27_tree=null;
-        Object SORT31_tree=null;
-
-        try {
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:25:2: ( STRINGS ^ idList | INTEGERS ^ idList | FUNCTION ^ id stack | MACRO ^ id '{' ! STRING '}' !| READ ^| EXECUTE ^ '{' ! function '}' !| ITERATE ^ '{' ! function '}' !| REVERSE ^ '{' ! function '}' !| ENTRY ^ idList0 idList0 idList0 | SORT ^)
-            int alt2=10;
-            switch ( input.LA(1) ) {
-            case STRINGS:
-                {
-                alt2=1;
-                }
-                break;
-            case INTEGERS:
-                {
-                alt2=2;
-                }
-                break;
-            case FUNCTION:
-                {
-                alt2=3;
-                }
-                break;
-            case MACRO:
-                {
-                alt2=4;
-                }
-                break;
-            case READ:
-                {
-                alt2=5;
-                }
-                break;
-            case EXECUTE:
-                {
-                alt2=6;
-                }
-                break;
-            case ITERATE:
-                {
-                alt2=7;
-                }
-                break;
-            case REVERSE:
-                {
-                alt2=8;
-                }
-                break;
-            case ENTRY:
-                {
-                alt2=9;
-                }
-                break;
-            case SORT:
-                {
-                alt2=10;
-                }
-                break;
-            default:
-                NoViableAltException nvae =
-                    new NoViableAltException("", 2, 0, input);
-
-                throw nvae;
-
-            }
-
-            switch (alt2) {
-                case 1 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:25:4: STRINGS ^ idList
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    STRINGS2=(Token)match(input,STRINGS,FOLLOW_STRINGS_in_commands82); 
-                    STRINGS2_tree = 
-                    (Object)adaptor.create(STRINGS2)
-                    ;
-                    root_0 = (Object)adaptor.becomeRoot(STRINGS2_tree, root_0);
-
-
-                    pushFollow(FOLLOW_idList_in_commands85);
-                    idList3=idList();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, idList3.getTree());
-
-                    }
-                    break;
-                case 2 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:26:4: INTEGERS ^ idList
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    INTEGERS4=(Token)match(input,INTEGERS,FOLLOW_INTEGERS_in_commands90); 
-                    INTEGERS4_tree = 
-                    (Object)adaptor.create(INTEGERS4)
-                    ;
-                    root_0 = (Object)adaptor.becomeRoot(INTEGERS4_tree, root_0);
-
-
-                    pushFollow(FOLLOW_idList_in_commands93);
-                    idList5=idList();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, idList5.getTree());
-
-                    }
-                    break;
-                case 3 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:27:4: FUNCTION ^ id stack
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    FUNCTION6=(Token)match(input,FUNCTION,FOLLOW_FUNCTION_in_commands98); 
-                    FUNCTION6_tree = 
-                    (Object)adaptor.create(FUNCTION6)
-                    ;
-                    root_0 = (Object)adaptor.becomeRoot(FUNCTION6_tree, root_0);
-
-
-                    pushFollow(FOLLOW_id_in_commands101);
-                    id7=id();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, id7.getTree());
-
-                    pushFollow(FOLLOW_stack_in_commands103);
-                    stack8=stack();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, stack8.getTree());
-
-                    }
-                    break;
-                case 4 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:28:4: MACRO ^ id '{' ! STRING '}' !
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    MACRO9=(Token)match(input,MACRO,FOLLOW_MACRO_in_commands108); 
-                    MACRO9_tree = 
-                    (Object)adaptor.create(MACRO9)
-                    ;
-                    root_0 = (Object)adaptor.becomeRoot(MACRO9_tree, root_0);
-
-
-                    pushFollow(FOLLOW_id_in_commands111);
-                    id10=id();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, id10.getTree());
-
-                    char_literal11=(Token)match(input,32,FOLLOW_32_in_commands113); 
-
-                    STRING12=(Token)match(input,STRING,FOLLOW_STRING_in_commands116); 
-                    STRING12_tree = 
-                    (Object)adaptor.create(STRING12)
-                    ;
-                    adaptor.addChild(root_0, STRING12_tree);
-
-
-                    char_literal13=(Token)match(input,33,FOLLOW_33_in_commands118); 
-
-                    }
-                    break;
-                case 5 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:29:4: READ ^
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    READ14=(Token)match(input,READ,FOLLOW_READ_in_commands124); 
-                    READ14_tree = 
-                    (Object)adaptor.create(READ14)
-                    ;
-                    root_0 = (Object)adaptor.becomeRoot(READ14_tree, root_0);
-
-
-                    }
-                    break;
-                case 6 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:30:4: EXECUTE ^ '{' ! function '}' !
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    EXECUTE15=(Token)match(input,EXECUTE,FOLLOW_EXECUTE_in_commands130); 
-                    EXECUTE15_tree = 
-                    (Object)adaptor.create(EXECUTE15)
-                    ;
-                    root_0 = (Object)adaptor.becomeRoot(EXECUTE15_tree, root_0);
-
-
-                    char_literal16=(Token)match(input,32,FOLLOW_32_in_commands133); 
-
-                    pushFollow(FOLLOW_function_in_commands136);
-                    function17=function();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, function17.getTree());
-
-                    char_literal18=(Token)match(input,33,FOLLOW_33_in_commands138); 
-
-                    }
-                    break;
-                case 7 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:31:4: ITERATE ^ '{' ! function '}' !
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    ITERATE19=(Token)match(input,ITERATE,FOLLOW_ITERATE_in_commands144); 
-                    ITERATE19_tree = 
-                    (Object)adaptor.create(ITERATE19)
-                    ;
-                    root_0 = (Object)adaptor.becomeRoot(ITERATE19_tree, root_0);
-
-
-                    char_literal20=(Token)match(input,32,FOLLOW_32_in_commands147); 
-
-                    pushFollow(FOLLOW_function_in_commands150);
-                    function21=function();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, function21.getTree());
-
-                    char_literal22=(Token)match(input,33,FOLLOW_33_in_commands152); 
-
-                    }
-                    break;
-                case 8 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:32:4: REVERSE ^ '{' ! function '}' !
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    REVERSE23=(Token)match(input,REVERSE,FOLLOW_REVERSE_in_commands158); 
-                    REVERSE23_tree = 
-                    (Object)adaptor.create(REVERSE23)
-                    ;
-                    root_0 = (Object)adaptor.becomeRoot(REVERSE23_tree, root_0);
-
-
-                    char_literal24=(Token)match(input,32,FOLLOW_32_in_commands161); 
-
-                    pushFollow(FOLLOW_function_in_commands164);
-                    function25=function();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, function25.getTree());
-
-                    char_literal26=(Token)match(input,33,FOLLOW_33_in_commands166); 
-
-                    }
-                    break;
-                case 9 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:33:4: ENTRY ^ idList0 idList0 idList0
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    ENTRY27=(Token)match(input,ENTRY,FOLLOW_ENTRY_in_commands172); 
-                    ENTRY27_tree = 
-                    (Object)adaptor.create(ENTRY27)
-                    ;
-                    root_0 = (Object)adaptor.becomeRoot(ENTRY27_tree, root_0);
-
-
-                    pushFollow(FOLLOW_idList0_in_commands175);
-                    idList028=idList0();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, idList028.getTree());
-
-                    pushFollow(FOLLOW_idList0_in_commands177);
-                    idList029=idList0();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, idList029.getTree());
-
-                    pushFollow(FOLLOW_idList0_in_commands179);
-                    idList030=idList0();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, idList030.getTree());
-
-                    }
-                    break;
-                case 10 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:34:4: SORT ^
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    SORT31=(Token)match(input,SORT,FOLLOW_SORT_in_commands184); 
-                    SORT31_tree = 
-                    (Object)adaptor.create(SORT31)
-                    ;
-                    root_0 = (Object)adaptor.becomeRoot(SORT31_tree, root_0);
-
-
-                    }
-                    break;
-
-            }
-            retval.stop = input.LT(-1);
-
-
-            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-
-        finally {
-        	// do for sure before leaving
-        }
-        return retval;
-    }
-    // $ANTLR end "commands"
-
-
-    public static class identifier_return extends ParserRuleReturnScope {
-        Object tree;
-        public Object getTree() { return tree; }
-    };
-
-
-    // $ANTLR start "identifier"
-    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:36:1: identifier : IDENTIFIER ;
-    public final BstParser.identifier_return identifier() throws RecognitionException {
-        BstParser.identifier_return retval = new BstParser.identifier_return();
-        retval.start = input.LT(1);
-
-
-        Object root_0 = null;
-
-        Token IDENTIFIER32=null;
-
-        Object IDENTIFIER32_tree=null;
-
-        try {
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:37:2: ( IDENTIFIER )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:37:4: IDENTIFIER
-            {
-            root_0 = (Object)adaptor.nil();
-
-
-            IDENTIFIER32=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_identifier195); 
-            IDENTIFIER32_tree = 
-            (Object)adaptor.create(IDENTIFIER32)
-            ;
-            adaptor.addChild(root_0, IDENTIFIER32_tree);
-
-
-            }
-
-            retval.stop = input.LT(-1);
-
-
-            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-
-        finally {
-        	// do for sure before leaving
-        }
-        return retval;
-    }
-    // $ANTLR end "identifier"
-
-
-    public static class id_return extends ParserRuleReturnScope {
-        Object tree;
-        public Object getTree() { return tree; }
-    };
-
-
-    // $ANTLR start "id"
-    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:39:1: id : '{' ! identifier '}' !;
-    public final BstParser.id_return id() throws RecognitionException {
-        BstParser.id_return retval = new BstParser.id_return();
-        retval.start = input.LT(1);
-
-
-        Object root_0 = null;
-
-        Token char_literal33=null;
-        Token char_literal35=null;
-        BstParser.identifier_return identifier34 =null;
-
-
-        Object char_literal33_tree=null;
-        Object char_literal35_tree=null;
-
-        try {
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:40:2: ( '{' ! identifier '}' !)
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:40:4: '{' ! identifier '}' !
-            {
-            root_0 = (Object)adaptor.nil();
-
-
-            char_literal33=(Token)match(input,32,FOLLOW_32_in_id205); 
-
-            pushFollow(FOLLOW_identifier_in_id208);
-            identifier34=identifier();
-
-            state._fsp--;
-
-            adaptor.addChild(root_0, identifier34.getTree());
-
-            char_literal35=(Token)match(input,33,FOLLOW_33_in_id210); 
-
-            }
-
-            retval.stop = input.LT(-1);
-
-
-            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-
-        finally {
-        	// do for sure before leaving
-        }
-        return retval;
-    }
-    // $ANTLR end "id"
-
-
-    public static class idList_return extends ParserRuleReturnScope {
-        Object tree;
-        public Object getTree() { return tree; }
-    };
-
-
-    // $ANTLR start "idList"
-    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:42:1: idList : '{' ( identifier )+ '}' -> ^( IDLIST ( identifier )+ ) ;
-    public final BstParser.idList_return idList() throws RecognitionException {
-        BstParser.idList_return retval = new BstParser.idList_return();
-        retval.start = input.LT(1);
-
-
-        Object root_0 = null;
-
-        Token char_literal36=null;
-        Token char_literal38=null;
-        BstParser.identifier_return identifier37 =null;
-
-
-        Object char_literal36_tree=null;
-        Object char_literal38_tree=null;
-        RewriteRuleTokenStream stream_32=new RewriteRuleTokenStream(adaptor,"token 32");
-        RewriteRuleTokenStream stream_33=new RewriteRuleTokenStream(adaptor,"token 33");
-        RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier");
-        try {
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:2: ( '{' ( identifier )+ '}' -> ^( IDLIST ( identifier )+ ) )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:4: '{' ( identifier )+ '}'
-            {
-            char_literal36=(Token)match(input,32,FOLLOW_32_in_idList222);  
-            stream_32.add(char_literal36);
-
-
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:8: ( identifier )+
-            int cnt3=0;
-            loop3:
-            do {
-                int alt3=2;
-                int LA3_0 = input.LA(1);
-
-                if ( (LA3_0==IDENTIFIER) ) {
-                    alt3=1;
-                }
-
-
-                switch (alt3) {
-            	case 1 :
-            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:8: identifier
-            	    {
-            	    pushFollow(FOLLOW_identifier_in_idList224);
-            	    identifier37=identifier();
-
-            	    state._fsp--;
-
-            	    stream_identifier.add(identifier37.getTree());
-
-            	    }
-            	    break;
-
-            	default :
-            	    if ( cnt3 >= 1 ) break loop3;
-                        EarlyExitException eee =
-                            new EarlyExitException(3, input);
-                        throw eee;
-                }
-                cnt3++;
-            } while (true);
-
-
-            char_literal38=(Token)match(input,33,FOLLOW_33_in_idList227);  
-            stream_33.add(char_literal38);
-
-
-            // AST REWRITE
-            // elements: identifier
-            // token labels: 
-            // rule labels: retval
-            // token list labels: 
-            // rule list labels: 
-            // wildcard labels: 
-            retval.tree = root_0;
-            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
-
-            root_0 = (Object)adaptor.nil();
-            // 43:24: -> ^( IDLIST ( identifier )+ )
-            {
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:27: ^( IDLIST ( identifier )+ )
-                {
-                Object root_1 = (Object)adaptor.nil();
-                root_1 = (Object)adaptor.becomeRoot(
-                (Object)adaptor.create(IDLIST, "IDLIST")
-                , root_1);
-
-                if ( !(stream_identifier.hasNext()) ) {
-                    throw new RewriteEarlyExitException();
-                }
-                while ( stream_identifier.hasNext() ) {
-                    adaptor.addChild(root_1, stream_identifier.nextTree());
-
-                }
-                stream_identifier.reset();
-
-                adaptor.addChild(root_0, root_1);
-                }
-
-            }
-
-
-            retval.tree = root_0;
-
-            }
-
-            retval.stop = input.LT(-1);
-
-
-            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-
-        finally {
-        	// do for sure before leaving
-        }
-        return retval;
-    }
-    // $ANTLR end "idList"
-
-
-    public static class idList0_return extends ParserRuleReturnScope {
-        Object tree;
-        public Object getTree() { return tree; }
-    };
-
-
-    // $ANTLR start "idList0"
-    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:45:1: idList0 : '{' ( identifier )* '}' -> ^( IDLIST ( identifier )* ) ;
-    public final BstParser.idList0_return idList0() throws RecognitionException {
-        BstParser.idList0_return retval = new BstParser.idList0_return();
-        retval.start = input.LT(1);
-
-
-        Object root_0 = null;
-
-        Token char_literal39=null;
-        Token char_literal41=null;
-        BstParser.identifier_return identifier40 =null;
-
-
-        Object char_literal39_tree=null;
-        Object char_literal41_tree=null;
-        RewriteRuleTokenStream stream_32=new RewriteRuleTokenStream(adaptor,"token 32");
-        RewriteRuleTokenStream stream_33=new RewriteRuleTokenStream(adaptor,"token 33");
-        RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier");
-        try {
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:2: ( '{' ( identifier )* '}' -> ^( IDLIST ( identifier )* ) )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:4: '{' ( identifier )* '}'
-            {
-            char_literal39=(Token)match(input,32,FOLLOW_32_in_idList0247);  
-            stream_32.add(char_literal39);
-
-
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:8: ( identifier )*
-            loop4:
-            do {
-                int alt4=2;
-                int LA4_0 = input.LA(1);
-
-                if ( (LA4_0==IDENTIFIER) ) {
-                    alt4=1;
-                }
-
-
-                switch (alt4) {
-            	case 1 :
-            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:8: identifier
-            	    {
-            	    pushFollow(FOLLOW_identifier_in_idList0249);
-            	    identifier40=identifier();
-
-            	    state._fsp--;
-
-            	    stream_identifier.add(identifier40.getTree());
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop4;
-                }
-            } while (true);
-
-
-            char_literal41=(Token)match(input,33,FOLLOW_33_in_idList0252);  
-            stream_33.add(char_literal41);
-
-
-            // AST REWRITE
-            // elements: identifier
-            // token labels: 
-            // rule labels: retval
-            // token list labels: 
-            // rule list labels: 
-            // wildcard labels: 
-            retval.tree = root_0;
-            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
-
-            root_0 = (Object)adaptor.nil();
-            // 46:24: -> ^( IDLIST ( identifier )* )
-            {
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:27: ^( IDLIST ( identifier )* )
-                {
-                Object root_1 = (Object)adaptor.nil();
-                root_1 = (Object)adaptor.becomeRoot(
-                (Object)adaptor.create(IDLIST, "IDLIST")
-                , root_1);
-
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:36: ( identifier )*
-                while ( stream_identifier.hasNext() ) {
-                    adaptor.addChild(root_1, stream_identifier.nextTree());
-
-                }
-                stream_identifier.reset();
-
-                adaptor.addChild(root_0, root_1);
-                }
-
-            }
-
-
-            retval.tree = root_0;
-
-            }
-
-            retval.stop = input.LT(-1);
-
-
-            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-
-        finally {
-        	// do for sure before leaving
-        }
-        return retval;
-    }
-    // $ANTLR end "idList0"
-
-
-    public static class function_return extends ParserRuleReturnScope {
-        Object tree;
-        public Object getTree() { return tree; }
-    };
-
-
-    // $ANTLR start "function"
-    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:48:1: function : ( '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier );
-    public final BstParser.function_return function() throws RecognitionException {
-        BstParser.function_return retval = new BstParser.function_return();
-        retval.start = input.LT(1);
-
-
-        Object root_0 = null;
-
-        Token char_literal42=null;
-        Token char_literal43=null;
-        Token char_literal44=null;
-        Token char_literal45=null;
-        Token char_literal46=null;
-        Token string_literal47=null;
-        Token char_literal48=null;
-        BstParser.identifier_return identifier49 =null;
-
-
-        Object char_literal42_tree=null;
-        Object char_literal43_tree=null;
-        Object char_literal44_tree=null;
-        Object char_literal45_tree=null;
-        Object char_literal46_tree=null;
-        Object string_literal47_tree=null;
-        Object char_literal48_tree=null;
-
-        try {
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:2: ( '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier )
-            int alt5=8;
-            switch ( input.LA(1) ) {
-            case 29:
-                {
-                alt5=1;
-                }
-                break;
-            case 31:
-                {
-                alt5=2;
-                }
-                break;
-            case 30:
-                {
-                alt5=3;
-                }
-                break;
-            case 26:
-                {
-                alt5=4;
-                }
-                break;
-            case 27:
-                {
-                alt5=5;
-                }
-                break;
-            case 28:
-                {
-                alt5=6;
-                }
-                break;
-            case 25:
-                {
-                alt5=7;
-                }
-                break;
-            case IDENTIFIER:
-                {
-                alt5=8;
-                }
-                break;
-            default:
-                NoViableAltException nvae =
-                    new NoViableAltException("", 5, 0, input);
-
-                throw nvae;
-
-            }
-
-            switch (alt5) {
-                case 1 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:4: '<'
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    char_literal42=(Token)match(input,29,FOLLOW_29_in_function271); 
-                    char_literal42_tree = 
-                    (Object)adaptor.create(char_literal42)
-                    ;
-                    adaptor.addChild(root_0, char_literal42_tree);
-
-
-                    }
-                    break;
-                case 2 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:10: '>'
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    char_literal43=(Token)match(input,31,FOLLOW_31_in_function275); 
-                    char_literal43_tree = 
-                    (Object)adaptor.create(char_literal43)
-                    ;
-                    adaptor.addChild(root_0, char_literal43_tree);
-
-
-                    }
-                    break;
-                case 3 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:16: '='
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    char_literal44=(Token)match(input,30,FOLLOW_30_in_function279); 
-                    char_literal44_tree = 
-                    (Object)adaptor.create(char_literal44)
-                    ;
-                    adaptor.addChild(root_0, char_literal44_tree);
-
-
-                    }
-                    break;
-                case 4 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:22: '+'
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    char_literal45=(Token)match(input,26,FOLLOW_26_in_function283); 
-                    char_literal45_tree = 
-                    (Object)adaptor.create(char_literal45)
-                    ;
-                    adaptor.addChild(root_0, char_literal45_tree);
-
-
-                    }
-                    break;
-                case 5 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:28: '-'
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    char_literal46=(Token)match(input,27,FOLLOW_27_in_function287); 
-                    char_literal46_tree = 
-                    (Object)adaptor.create(char_literal46)
-                    ;
-                    adaptor.addChild(root_0, char_literal46_tree);
-
-
-                    }
-                    break;
-                case 6 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:34: ':='
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    string_literal47=(Token)match(input,28,FOLLOW_28_in_function291); 
-                    string_literal47_tree = 
-                    (Object)adaptor.create(string_literal47)
-                    ;
-                    adaptor.addChild(root_0, string_literal47_tree);
-
-
-                    }
-                    break;
-                case 7 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:41: '*'
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    char_literal48=(Token)match(input,25,FOLLOW_25_in_function295); 
-                    char_literal48_tree = 
-                    (Object)adaptor.create(char_literal48)
-                    ;
-                    adaptor.addChild(root_0, char_literal48_tree);
-
-
-                    }
-                    break;
-                case 8 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:47: identifier
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    pushFollow(FOLLOW_identifier_in_function299);
-                    identifier49=identifier();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, identifier49.getTree());
-
-                    }
-                    break;
-
-            }
-            retval.stop = input.LT(-1);
-
-
-            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-
-        finally {
-        	// do for sure before leaving
-        }
-        return retval;
-    }
-    // $ANTLR end "function"
-
-
-    public static class stack_return extends ParserRuleReturnScope {
-        Object tree;
-        public Object getTree() { return tree; }
-    };
-
-
-    // $ANTLR start "stack"
-    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:51:1: stack : '{' ( stackitem )+ '}' -> ^( STACK ( stackitem )+ ) ;
-    public final BstParser.stack_return stack() throws RecognitionException {
-        BstParser.stack_return retval = new BstParser.stack_return();
-        retval.start = input.LT(1);
-
-
-        Object root_0 = null;
-
-        Token char_literal50=null;
-        Token char_literal52=null;
-        BstParser.stackitem_return stackitem51 =null;
-
-
-        Object char_literal50_tree=null;
-        Object char_literal52_tree=null;
-        RewriteRuleTokenStream stream_32=new RewriteRuleTokenStream(adaptor,"token 32");
-        RewriteRuleTokenStream stream_33=new RewriteRuleTokenStream(adaptor,"token 33");
-        RewriteRuleSubtreeStream stream_stackitem=new RewriteRuleSubtreeStream(adaptor,"rule stackitem");
-        try {
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:2: ( '{' ( stackitem )+ '}' -> ^( STACK ( stackitem )+ ) )
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:4: '{' ( stackitem )+ '}'
-            {
-            char_literal50=(Token)match(input,32,FOLLOW_32_in_stack310);  
-            stream_32.add(char_literal50);
-
-
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:8: ( stackitem )+
-            int cnt6=0;
-            loop6:
-            do {
-                int alt6=2;
-                int LA6_0 = input.LA(1);
-
-                if ( (LA6_0==IDENTIFIER||LA6_0==INTEGER||LA6_0==QUOTED||LA6_0==STRING||(LA6_0 >= 25 && LA6_0 <= 32)) ) {
-                    alt6=1;
-                }
-
-
-                switch (alt6) {
-            	case 1 :
-            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:8: stackitem
-            	    {
-            	    pushFollow(FOLLOW_stackitem_in_stack312);
-            	    stackitem51=stackitem();
-
-            	    state._fsp--;
-
-            	    stream_stackitem.add(stackitem51.getTree());
-
-            	    }
-            	    break;
-
-            	default :
-            	    if ( cnt6 >= 1 ) break loop6;
-                        EarlyExitException eee =
-                            new EarlyExitException(6, input);
-                        throw eee;
-                }
-                cnt6++;
-            } while (true);
-
-
-            char_literal52=(Token)match(input,33,FOLLOW_33_in_stack315);  
-            stream_33.add(char_literal52);
-
-
-            // AST REWRITE
-            // elements: stackitem
-            // token labels: 
-            // rule labels: retval
-            // token list labels: 
-            // rule list labels: 
-            // wildcard labels: 
-            retval.tree = root_0;
-            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
-
-            root_0 = (Object)adaptor.nil();
-            // 52:23: -> ^( STACK ( stackitem )+ )
-            {
-                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:26: ^( STACK ( stackitem )+ )
-                {
-                Object root_1 = (Object)adaptor.nil();
-                root_1 = (Object)adaptor.becomeRoot(
-                (Object)adaptor.create(STACK, "STACK")
-                , root_1);
-
-                if ( !(stream_stackitem.hasNext()) ) {
-                    throw new RewriteEarlyExitException();
-                }
-                while ( stream_stackitem.hasNext() ) {
-                    adaptor.addChild(root_1, stream_stackitem.nextTree());
-
-                }
-                stream_stackitem.reset();
-
-                adaptor.addChild(root_0, root_1);
-                }
-
-            }
-
-
-            retval.tree = root_0;
-
-            }
-
-            retval.stop = input.LT(-1);
-
-
-            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-
-        finally {
-        	// do for sure before leaving
-        }
-        return retval;
-    }
-    // $ANTLR end "stack"
-
-
-    public static class stackitem_return extends ParserRuleReturnScope {
-        Object tree;
-        public Object getTree() { return tree; }
-    };
-
-
-    // $ANTLR start "stackitem"
-    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:54:1: stackitem : ( function | STRING | INTEGER | QUOTED | stack );
-    public final BstParser.stackitem_return stackitem() throws RecognitionException {
-        BstParser.stackitem_return retval = new BstParser.stackitem_return();
-        retval.start = input.LT(1);
-
-
-        Object root_0 = null;
-
-        Token STRING54=null;
-        Token INTEGER55=null;
-        Token QUOTED56=null;
-        BstParser.function_return function53 =null;
-
-        BstParser.stack_return stack57 =null;
-
-
-        Object STRING54_tree=null;
-        Object INTEGER55_tree=null;
-        Object QUOTED56_tree=null;
-
-        try {
-            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:55:2: ( function | STRING | INTEGER | QUOTED | stack )
-            int alt7=5;
-            switch ( input.LA(1) ) {
-            case IDENTIFIER:
-            case 25:
-            case 26:
-            case 27:
-            case 28:
-            case 29:
-            case 30:
-            case 31:
-                {
-                alt7=1;
-                }
-                break;
-            case STRING:
-                {
-                alt7=2;
-                }
-                break;
-            case INTEGER:
-                {
-                alt7=3;
-                }
-                break;
-            case QUOTED:
-                {
-                alt7=4;
-                }
-                break;
-            case 32:
-                {
-                alt7=5;
-                }
-                break;
-            default:
-                NoViableAltException nvae =
-                    new NoViableAltException("", 7, 0, input);
-
-                throw nvae;
-
-            }
-
-            switch (alt7) {
-                case 1 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:55:4: function
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    pushFollow(FOLLOW_function_in_stackitem334);
-                    function53=function();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, function53.getTree());
-
-                    }
-                    break;
-                case 2 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:56:4: STRING
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    STRING54=(Token)match(input,STRING,FOLLOW_STRING_in_stackitem339); 
-                    STRING54_tree = 
-                    (Object)adaptor.create(STRING54)
-                    ;
-                    adaptor.addChild(root_0, STRING54_tree);
-
-
-                    }
-                    break;
-                case 3 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:57:4: INTEGER
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    INTEGER55=(Token)match(input,INTEGER,FOLLOW_INTEGER_in_stackitem345); 
-                    INTEGER55_tree = 
-                    (Object)adaptor.create(INTEGER55)
-                    ;
-                    adaptor.addChild(root_0, INTEGER55_tree);
-
-
-                    }
-                    break;
-                case 4 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:58:4: QUOTED
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    QUOTED56=(Token)match(input,QUOTED,FOLLOW_QUOTED_in_stackitem351); 
-                    QUOTED56_tree = 
-                    (Object)adaptor.create(QUOTED56)
-                    ;
-                    adaptor.addChild(root_0, QUOTED56_tree);
-
-
-                    }
-                    break;
-                case 5 :
-                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:59:4: stack
-                    {
-                    root_0 = (Object)adaptor.nil();
-
-
-                    pushFollow(FOLLOW_stack_in_stackitem356);
-                    stack57=stack();
-
-                    state._fsp--;
-
-                    adaptor.addChild(root_0, stack57.getTree());
-
-                    }
-                    break;
-
-            }
-            retval.stop = input.LT(-1);
-
-
-            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
-            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
-
-        }
-
-        finally {
-        	// do for sure before leaving
-        }
-        return retval;
-    }
-    // $ANTLR end "stackitem"
-
-    // Delegated rules
-
-
- 
-
-    public static final BitSet FOLLOW_commands_in_program62 = new BitSet(new long[]{0x00000000009C98E2L});
-    public static final BitSet FOLLOW_STRINGS_in_commands82 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_idList_in_commands85 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INTEGERS_in_commands90 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_idList_in_commands93 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FUNCTION_in_commands98 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_id_in_commands101 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_stack_in_commands103 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MACRO_in_commands108 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_id_in_commands111 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_32_in_commands113 = new BitSet(new long[]{0x0000000000400000L});
-    public static final BitSet FOLLOW_STRING_in_commands116 = new BitSet(new long[]{0x0000000200000000L});
-    public static final BitSet FOLLOW_33_in_commands118 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_READ_in_commands124 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXECUTE_in_commands130 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_32_in_commands133 = new BitSet(new long[]{0x00000000FE000100L});
-    public static final BitSet FOLLOW_function_in_commands136 = new BitSet(new long[]{0x0000000200000000L});
-    public static final BitSet FOLLOW_33_in_commands138 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ITERATE_in_commands144 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_32_in_commands147 = new BitSet(new long[]{0x00000000FE000100L});
-    public static final BitSet FOLLOW_function_in_commands150 = new BitSet(new long[]{0x0000000200000000L});
-    public static final BitSet FOLLOW_33_in_commands152 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_REVERSE_in_commands158 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_32_in_commands161 = new BitSet(new long[]{0x00000000FE000100L});
-    public static final BitSet FOLLOW_function_in_commands164 = new BitSet(new long[]{0x0000000200000000L});
-    public static final BitSet FOLLOW_33_in_commands166 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ENTRY_in_commands172 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_idList0_in_commands175 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_idList0_in_commands177 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_idList0_in_commands179 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SORT_in_commands184 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IDENTIFIER_in_identifier195 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_32_in_id205 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_identifier_in_id208 = new BitSet(new long[]{0x0000000200000000L});
-    public static final BitSet FOLLOW_33_in_id210 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_32_in_idList222 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_identifier_in_idList224 = new BitSet(new long[]{0x0000000200000100L});
-    public static final BitSet FOLLOW_33_in_idList227 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_32_in_idList0247 = new BitSet(new long[]{0x0000000200000100L});
-    public static final BitSet FOLLOW_identifier_in_idList0249 = new BitSet(new long[]{0x0000000200000100L});
-    public static final BitSet FOLLOW_33_in_idList0252 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_29_in_function271 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_31_in_function275 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_30_in_function279 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_26_in_function283 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_27_in_function287 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_function291 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_25_in_function295 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_function299 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_32_in_stack310 = new BitSet(new long[]{0x00000001FE420500L});
-    public static final BitSet FOLLOW_stackitem_in_stack312 = new BitSet(new long[]{0x00000003FE420500L});
-    public static final BitSet FOLLOW_33_in_stack315 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_in_stackitem334 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_stackitem339 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INTEGER_in_stackitem345 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_QUOTED_in_stackitem351 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_stack_in_stackitem356 = new BitSet(new long[]{0x0000000000000002L});
-
+// $ANTLR 3.4 C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g 2012-10-28 23:48:28
+// Generated by ANTLR
+package net.sf.jabref.bst;
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+import org.antlr.runtime.tree.*;
+
+
+ at SuppressWarnings({"all", "warnings", "unchecked"})
+public class BstParser extends Parser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "COMMANDS", "ENTRY", "EXECUTE", "FUNCTION", "IDENTIFIER", "IDLIST", "INTEGER", "INTEGERS", "ITERATE", "LETTER", "LINE_COMMENT", "MACRO", "NUMERAL", "QUOTED", "READ", "REVERSE", "SORT", "STACK", "STRING", "STRINGS", "WS", "'*'", "'+'", "'-'", "':='", "'<'", "'='", "'>'", "'{'", "'}'"
+    };
+
+    public static final int EOF=-1;
+    public static final int T__25=25;
+    public static final int T__26=26;
+    public static final int T__27=27;
+    public static final int T__28=28;
+    public static final int T__29=29;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int T__33=33;
+    public static final int COMMANDS=4;
+    public static final int ENTRY=5;
+    public static final int EXECUTE=6;
+    public static final int FUNCTION=7;
+    public static final int IDENTIFIER=8;
+    public static final int IDLIST=9;
+    public static final int INTEGER=10;
+    public static final int INTEGERS=11;
+    public static final int ITERATE=12;
+    public static final int LETTER=13;
+    public static final int LINE_COMMENT=14;
+    public static final int MACRO=15;
+    public static final int NUMERAL=16;
+    public static final int QUOTED=17;
+    public static final int READ=18;
+    public static final int REVERSE=19;
+    public static final int SORT=20;
+    public static final int STACK=21;
+    public static final int STRING=22;
+    public static final int STRINGS=23;
+    public static final int WS=24;
+
+    // delegates
+    public Parser[] getDelegates() {
+        return new Parser[] {};
+    }
+
+    // delegators
+
+
+    public BstParser(TokenStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public BstParser(TokenStream input, RecognizerSharedState state) {
+        super(input, state);
+    }
+
+protected TreeAdaptor adaptor = new CommonTreeAdaptor();
+
+public void setTreeAdaptor(TreeAdaptor adaptor) {
+    this.adaptor = adaptor;
+}
+public TreeAdaptor getTreeAdaptor() {
+    return adaptor;
+}
+    public String[] getTokenNames() { return BstParser.tokenNames; }
+    public String getGrammarFileName() { return "C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g"; }
+
+
+    public static class program_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+
+    // $ANTLR start "program"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:1: program : ( commands )+ -> ^( COMMANDS ( commands )+ ) ;
+    public final BstParser.program_return program() throws RecognitionException {
+        BstParser.program_return retval = new BstParser.program_return();
+        retval.start = input.LT(1);
+
+
+        Object root_0 = null;
+
+        BstParser.commands_return commands1 =null;
+
+
+        RewriteRuleSubtreeStream stream_commands=new RewriteRuleSubtreeStream(adaptor,"rule commands");
+        try {
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:9: ( ( commands )+ -> ^( COMMANDS ( commands )+ ) )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:11: ( commands )+
+            {
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:11: ( commands )+
+            int cnt1=0;
+            loop1:
+            do {
+                int alt1=2;
+                int LA1_0 = input.LA(1);
+
+                if ( ((LA1_0 >= ENTRY && LA1_0 <= FUNCTION)||(LA1_0 >= INTEGERS && LA1_0 <= ITERATE)||LA1_0==MACRO||(LA1_0 >= READ && LA1_0 <= SORT)||LA1_0==STRINGS) ) {
+                    alt1=1;
+                }
+
+
+                switch (alt1) {
+            	case 1 :
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:11: commands
+            	    {
+            	    pushFollow(FOLLOW_commands_in_program62);
+            	    commands1=commands();
+
+            	    state._fsp--;
+
+            	    stream_commands.add(commands1.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt1 >= 1 ) break loop1;
+                        EarlyExitException eee =
+                            new EarlyExitException(1, input);
+                        throw eee;
+                }
+                cnt1++;
+            } while (true);
+
+
+            // AST REWRITE
+            // elements: commands
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            // wildcard labels: 
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 22:21: -> ^( COMMANDS ( commands )+ )
+            {
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:22:24: ^( COMMANDS ( commands )+ )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(
+                (Object)adaptor.create(COMMANDS, "COMMANDS")
+                , root_1);
+
+                if ( !(stream_commands.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
+                }
+                while ( stream_commands.hasNext() ) {
+                    adaptor.addChild(root_1, stream_commands.nextTree());
+
+                }
+                stream_commands.reset();
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+
+            retval.tree = root_0;
+
+            }
+
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+        }
+
+        finally {
+        	// do for sure before leaving
+        }
+        return retval;
+    }
+    // $ANTLR end "program"
+
+
+    public static class commands_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+
+    // $ANTLR start "commands"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:24:1: commands : ( STRINGS ^ idList | INTEGERS ^ idList | FUNCTION ^ id stack | MACRO ^ id '{' ! STRING '}' !| READ ^| EXECUTE ^ '{' ! function '}' !| ITERATE ^ '{' ! function '}' !| REVERSE ^ '{' ! function '}' !| ENTRY ^ idList0 idList0 idList0 | SORT ^);
+    public final BstParser.commands_return commands() throws RecognitionException {
+        BstParser.commands_return retval = new BstParser.commands_return();
+        retval.start = input.LT(1);
+
+
+        Object root_0 = null;
+
+        Token STRINGS2=null;
+        Token INTEGERS4=null;
+        Token FUNCTION6=null;
+        Token MACRO9=null;
+        Token char_literal11=null;
+        Token STRING12=null;
+        Token char_literal13=null;
+        Token READ14=null;
+        Token EXECUTE15=null;
+        Token char_literal16=null;
+        Token char_literal18=null;
+        Token ITERATE19=null;
+        Token char_literal20=null;
+        Token char_literal22=null;
+        Token REVERSE23=null;
+        Token char_literal24=null;
+        Token char_literal26=null;
+        Token ENTRY27=null;
+        Token SORT31=null;
+        BstParser.idList_return idList3 =null;
+
+        BstParser.idList_return idList5 =null;
+
+        BstParser.id_return id7 =null;
+
+        BstParser.stack_return stack8 =null;
+
+        BstParser.id_return id10 =null;
+
+        BstParser.function_return function17 =null;
+
+        BstParser.function_return function21 =null;
+
+        BstParser.function_return function25 =null;
+
+        BstParser.idList0_return idList028 =null;
+
+        BstParser.idList0_return idList029 =null;
+
+        BstParser.idList0_return idList030 =null;
+
+
+        Object STRINGS2_tree=null;
+        Object INTEGERS4_tree=null;
+        Object FUNCTION6_tree=null;
+        Object MACRO9_tree=null;
+        Object char_literal11_tree=null;
+        Object STRING12_tree=null;
+        Object char_literal13_tree=null;
+        Object READ14_tree=null;
+        Object EXECUTE15_tree=null;
+        Object char_literal16_tree=null;
+        Object char_literal18_tree=null;
+        Object ITERATE19_tree=null;
+        Object char_literal20_tree=null;
+        Object char_literal22_tree=null;
+        Object REVERSE23_tree=null;
+        Object char_literal24_tree=null;
+        Object char_literal26_tree=null;
+        Object ENTRY27_tree=null;
+        Object SORT31_tree=null;
+
+        try {
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:25:2: ( STRINGS ^ idList | INTEGERS ^ idList | FUNCTION ^ id stack | MACRO ^ id '{' ! STRING '}' !| READ ^| EXECUTE ^ '{' ! function '}' !| ITERATE ^ '{' ! function '}' !| REVERSE ^ '{' ! function '}' !| ENTRY ^ idList0 idList0 idList0 | SORT ^)
+            int alt2=10;
+            switch ( input.LA(1) ) {
+            case STRINGS:
+                {
+                alt2=1;
+                }
+                break;
+            case INTEGERS:
+                {
+                alt2=2;
+                }
+                break;
+            case FUNCTION:
+                {
+                alt2=3;
+                }
+                break;
+            case MACRO:
+                {
+                alt2=4;
+                }
+                break;
+            case READ:
+                {
+                alt2=5;
+                }
+                break;
+            case EXECUTE:
+                {
+                alt2=6;
+                }
+                break;
+            case ITERATE:
+                {
+                alt2=7;
+                }
+                break;
+            case REVERSE:
+                {
+                alt2=8;
+                }
+                break;
+            case ENTRY:
+                {
+                alt2=9;
+                }
+                break;
+            case SORT:
+                {
+                alt2=10;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 2, 0, input);
+
+                throw nvae;
+
+            }
+
+            switch (alt2) {
+                case 1 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:25:4: STRINGS ^ idList
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    STRINGS2=(Token)match(input,STRINGS,FOLLOW_STRINGS_in_commands82); 
+                    STRINGS2_tree = 
+                    (Object)adaptor.create(STRINGS2)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(STRINGS2_tree, root_0);
+
+
+                    pushFollow(FOLLOW_idList_in_commands85);
+                    idList3=idList();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, idList3.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:26:4: INTEGERS ^ idList
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    INTEGERS4=(Token)match(input,INTEGERS,FOLLOW_INTEGERS_in_commands90); 
+                    INTEGERS4_tree = 
+                    (Object)adaptor.create(INTEGERS4)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(INTEGERS4_tree, root_0);
+
+
+                    pushFollow(FOLLOW_idList_in_commands93);
+                    idList5=idList();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, idList5.getTree());
+
+                    }
+                    break;
+                case 3 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:27:4: FUNCTION ^ id stack
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    FUNCTION6=(Token)match(input,FUNCTION,FOLLOW_FUNCTION_in_commands98); 
+                    FUNCTION6_tree = 
+                    (Object)adaptor.create(FUNCTION6)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(FUNCTION6_tree, root_0);
+
+
+                    pushFollow(FOLLOW_id_in_commands101);
+                    id7=id();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, id7.getTree());
+
+                    pushFollow(FOLLOW_stack_in_commands103);
+                    stack8=stack();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, stack8.getTree());
+
+                    }
+                    break;
+                case 4 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:28:4: MACRO ^ id '{' ! STRING '}' !
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    MACRO9=(Token)match(input,MACRO,FOLLOW_MACRO_in_commands108); 
+                    MACRO9_tree = 
+                    (Object)adaptor.create(MACRO9)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(MACRO9_tree, root_0);
+
+
+                    pushFollow(FOLLOW_id_in_commands111);
+                    id10=id();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, id10.getTree());
+
+                    char_literal11=(Token)match(input,32,FOLLOW_32_in_commands113); 
+
+                    STRING12=(Token)match(input,STRING,FOLLOW_STRING_in_commands116); 
+                    STRING12_tree = 
+                    (Object)adaptor.create(STRING12)
+                    ;
+                    adaptor.addChild(root_0, STRING12_tree);
+
+
+                    char_literal13=(Token)match(input,33,FOLLOW_33_in_commands118); 
+
+                    }
+                    break;
+                case 5 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:29:4: READ ^
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    READ14=(Token)match(input,READ,FOLLOW_READ_in_commands124); 
+                    READ14_tree = 
+                    (Object)adaptor.create(READ14)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(READ14_tree, root_0);
+
+
+                    }
+                    break;
+                case 6 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:30:4: EXECUTE ^ '{' ! function '}' !
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    EXECUTE15=(Token)match(input,EXECUTE,FOLLOW_EXECUTE_in_commands130); 
+                    EXECUTE15_tree = 
+                    (Object)adaptor.create(EXECUTE15)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(EXECUTE15_tree, root_0);
+
+
+                    char_literal16=(Token)match(input,32,FOLLOW_32_in_commands133); 
+
+                    pushFollow(FOLLOW_function_in_commands136);
+                    function17=function();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, function17.getTree());
+
+                    char_literal18=(Token)match(input,33,FOLLOW_33_in_commands138); 
+
+                    }
+                    break;
+                case 7 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:31:4: ITERATE ^ '{' ! function '}' !
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    ITERATE19=(Token)match(input,ITERATE,FOLLOW_ITERATE_in_commands144); 
+                    ITERATE19_tree = 
+                    (Object)adaptor.create(ITERATE19)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(ITERATE19_tree, root_0);
+
+
+                    char_literal20=(Token)match(input,32,FOLLOW_32_in_commands147); 
+
+                    pushFollow(FOLLOW_function_in_commands150);
+                    function21=function();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, function21.getTree());
+
+                    char_literal22=(Token)match(input,33,FOLLOW_33_in_commands152); 
+
+                    }
+                    break;
+                case 8 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:32:4: REVERSE ^ '{' ! function '}' !
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    REVERSE23=(Token)match(input,REVERSE,FOLLOW_REVERSE_in_commands158); 
+                    REVERSE23_tree = 
+                    (Object)adaptor.create(REVERSE23)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(REVERSE23_tree, root_0);
+
+
+                    char_literal24=(Token)match(input,32,FOLLOW_32_in_commands161); 
+
+                    pushFollow(FOLLOW_function_in_commands164);
+                    function25=function();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, function25.getTree());
+
+                    char_literal26=(Token)match(input,33,FOLLOW_33_in_commands166); 
+
+                    }
+                    break;
+                case 9 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:33:4: ENTRY ^ idList0 idList0 idList0
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    ENTRY27=(Token)match(input,ENTRY,FOLLOW_ENTRY_in_commands172); 
+                    ENTRY27_tree = 
+                    (Object)adaptor.create(ENTRY27)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(ENTRY27_tree, root_0);
+
+
+                    pushFollow(FOLLOW_idList0_in_commands175);
+                    idList028=idList0();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, idList028.getTree());
+
+                    pushFollow(FOLLOW_idList0_in_commands177);
+                    idList029=idList0();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, idList029.getTree());
+
+                    pushFollow(FOLLOW_idList0_in_commands179);
+                    idList030=idList0();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, idList030.getTree());
+
+                    }
+                    break;
+                case 10 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:34:4: SORT ^
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    SORT31=(Token)match(input,SORT,FOLLOW_SORT_in_commands184); 
+                    SORT31_tree = 
+                    (Object)adaptor.create(SORT31)
+                    ;
+                    root_0 = (Object)adaptor.becomeRoot(SORT31_tree, root_0);
+
+
+                    }
+                    break;
+
+            }
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+        }
+
+        finally {
+        	// do for sure before leaving
+        }
+        return retval;
+    }
+    // $ANTLR end "commands"
+
+
+    public static class identifier_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+
+    // $ANTLR start "identifier"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:36:1: identifier : IDENTIFIER ;
+    public final BstParser.identifier_return identifier() throws RecognitionException {
+        BstParser.identifier_return retval = new BstParser.identifier_return();
+        retval.start = input.LT(1);
+
+
+        Object root_0 = null;
+
+        Token IDENTIFIER32=null;
+
+        Object IDENTIFIER32_tree=null;
+
+        try {
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:37:2: ( IDENTIFIER )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:37:4: IDENTIFIER
+            {
+            root_0 = (Object)adaptor.nil();
+
+
+            IDENTIFIER32=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_identifier195); 
+            IDENTIFIER32_tree = 
+            (Object)adaptor.create(IDENTIFIER32)
+            ;
+            adaptor.addChild(root_0, IDENTIFIER32_tree);
+
+
+            }
+
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+        }
+
+        finally {
+        	// do for sure before leaving
+        }
+        return retval;
+    }
+    // $ANTLR end "identifier"
+
+
+    public static class id_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+
+    // $ANTLR start "id"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:39:1: id : '{' ! identifier '}' !;
+    public final BstParser.id_return id() throws RecognitionException {
+        BstParser.id_return retval = new BstParser.id_return();
+        retval.start = input.LT(1);
+
+
+        Object root_0 = null;
+
+        Token char_literal33=null;
+        Token char_literal35=null;
+        BstParser.identifier_return identifier34 =null;
+
+
+        Object char_literal33_tree=null;
+        Object char_literal35_tree=null;
+
+        try {
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:40:2: ( '{' ! identifier '}' !)
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:40:4: '{' ! identifier '}' !
+            {
+            root_0 = (Object)adaptor.nil();
+
+
+            char_literal33=(Token)match(input,32,FOLLOW_32_in_id205); 
+
+            pushFollow(FOLLOW_identifier_in_id208);
+            identifier34=identifier();
+
+            state._fsp--;
+
+            adaptor.addChild(root_0, identifier34.getTree());
+
+            char_literal35=(Token)match(input,33,FOLLOW_33_in_id210); 
+
+            }
+
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+        }
+
+        finally {
+        	// do for sure before leaving
+        }
+        return retval;
+    }
+    // $ANTLR end "id"
+
+
+    public static class idList_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+
+    // $ANTLR start "idList"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:42:1: idList : '{' ( identifier )+ '}' -> ^( IDLIST ( identifier )+ ) ;
+    public final BstParser.idList_return idList() throws RecognitionException {
+        BstParser.idList_return retval = new BstParser.idList_return();
+        retval.start = input.LT(1);
+
+
+        Object root_0 = null;
+
+        Token char_literal36=null;
+        Token char_literal38=null;
+        BstParser.identifier_return identifier37 =null;
+
+
+        Object char_literal36_tree=null;
+        Object char_literal38_tree=null;
+        RewriteRuleTokenStream stream_32=new RewriteRuleTokenStream(adaptor,"token 32");
+        RewriteRuleTokenStream stream_33=new RewriteRuleTokenStream(adaptor,"token 33");
+        RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier");
+        try {
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:2: ( '{' ( identifier )+ '}' -> ^( IDLIST ( identifier )+ ) )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:4: '{' ( identifier )+ '}'
+            {
+            char_literal36=(Token)match(input,32,FOLLOW_32_in_idList222);  
+            stream_32.add(char_literal36);
+
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:8: ( identifier )+
+            int cnt3=0;
+            loop3:
+            do {
+                int alt3=2;
+                int LA3_0 = input.LA(1);
+
+                if ( (LA3_0==IDENTIFIER) ) {
+                    alt3=1;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:8: identifier
+            	    {
+            	    pushFollow(FOLLOW_identifier_in_idList224);
+            	    identifier37=identifier();
+
+            	    state._fsp--;
+
+            	    stream_identifier.add(identifier37.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt3 >= 1 ) break loop3;
+                        EarlyExitException eee =
+                            new EarlyExitException(3, input);
+                        throw eee;
+                }
+                cnt3++;
+            } while (true);
+
+
+            char_literal38=(Token)match(input,33,FOLLOW_33_in_idList227);  
+            stream_33.add(char_literal38);
+
+
+            // AST REWRITE
+            // elements: identifier
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            // wildcard labels: 
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 43:24: -> ^( IDLIST ( identifier )+ )
+            {
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:43:27: ^( IDLIST ( identifier )+ )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(
+                (Object)adaptor.create(IDLIST, "IDLIST")
+                , root_1);
+
+                if ( !(stream_identifier.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
+                }
+                while ( stream_identifier.hasNext() ) {
+                    adaptor.addChild(root_1, stream_identifier.nextTree());
+
+                }
+                stream_identifier.reset();
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+
+            retval.tree = root_0;
+
+            }
+
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+        }
+
+        finally {
+        	// do for sure before leaving
+        }
+        return retval;
+    }
+    // $ANTLR end "idList"
+
+
+    public static class idList0_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+
+    // $ANTLR start "idList0"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:45:1: idList0 : '{' ( identifier )* '}' -> ^( IDLIST ( identifier )* ) ;
+    public final BstParser.idList0_return idList0() throws RecognitionException {
+        BstParser.idList0_return retval = new BstParser.idList0_return();
+        retval.start = input.LT(1);
+
+
+        Object root_0 = null;
+
+        Token char_literal39=null;
+        Token char_literal41=null;
+        BstParser.identifier_return identifier40 =null;
+
+
+        Object char_literal39_tree=null;
+        Object char_literal41_tree=null;
+        RewriteRuleTokenStream stream_32=new RewriteRuleTokenStream(adaptor,"token 32");
+        RewriteRuleTokenStream stream_33=new RewriteRuleTokenStream(adaptor,"token 33");
+        RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier");
+        try {
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:2: ( '{' ( identifier )* '}' -> ^( IDLIST ( identifier )* ) )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:4: '{' ( identifier )* '}'
+            {
+            char_literal39=(Token)match(input,32,FOLLOW_32_in_idList0247);  
+            stream_32.add(char_literal39);
+
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:8: ( identifier )*
+            loop4:
+            do {
+                int alt4=2;
+                int LA4_0 = input.LA(1);
+
+                if ( (LA4_0==IDENTIFIER) ) {
+                    alt4=1;
+                }
+
+
+                switch (alt4) {
+            	case 1 :
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:8: identifier
+            	    {
+            	    pushFollow(FOLLOW_identifier_in_idList0249);
+            	    identifier40=identifier();
+
+            	    state._fsp--;
+
+            	    stream_identifier.add(identifier40.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop4;
+                }
+            } while (true);
+
+
+            char_literal41=(Token)match(input,33,FOLLOW_33_in_idList0252);  
+            stream_33.add(char_literal41);
+
+
+            // AST REWRITE
+            // elements: identifier
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            // wildcard labels: 
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 46:24: -> ^( IDLIST ( identifier )* )
+            {
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:27: ^( IDLIST ( identifier )* )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(
+                (Object)adaptor.create(IDLIST, "IDLIST")
+                , root_1);
+
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:46:36: ( identifier )*
+                while ( stream_identifier.hasNext() ) {
+                    adaptor.addChild(root_1, stream_identifier.nextTree());
+
+                }
+                stream_identifier.reset();
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+
+            retval.tree = root_0;
+
+            }
+
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+        }
+
+        finally {
+        	// do for sure before leaving
+        }
+        return retval;
+    }
+    // $ANTLR end "idList0"
+
+
+    public static class function_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+
+    // $ANTLR start "function"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:48:1: function : ( '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier );
+    public final BstParser.function_return function() throws RecognitionException {
+        BstParser.function_return retval = new BstParser.function_return();
+        retval.start = input.LT(1);
+
+
+        Object root_0 = null;
+
+        Token char_literal42=null;
+        Token char_literal43=null;
+        Token char_literal44=null;
+        Token char_literal45=null;
+        Token char_literal46=null;
+        Token string_literal47=null;
+        Token char_literal48=null;
+        BstParser.identifier_return identifier49 =null;
+
+
+        Object char_literal42_tree=null;
+        Object char_literal43_tree=null;
+        Object char_literal44_tree=null;
+        Object char_literal45_tree=null;
+        Object char_literal46_tree=null;
+        Object string_literal47_tree=null;
+        Object char_literal48_tree=null;
+
+        try {
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:2: ( '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier )
+            int alt5=8;
+            switch ( input.LA(1) ) {
+            case 29:
+                {
+                alt5=1;
+                }
+                break;
+            case 31:
+                {
+                alt5=2;
+                }
+                break;
+            case 30:
+                {
+                alt5=3;
+                }
+                break;
+            case 26:
+                {
+                alt5=4;
+                }
+                break;
+            case 27:
+                {
+                alt5=5;
+                }
+                break;
+            case 28:
+                {
+                alt5=6;
+                }
+                break;
+            case 25:
+                {
+                alt5=7;
+                }
+                break;
+            case IDENTIFIER:
+                {
+                alt5=8;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 5, 0, input);
+
+                throw nvae;
+
+            }
+
+            switch (alt5) {
+                case 1 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:4: '<'
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    char_literal42=(Token)match(input,29,FOLLOW_29_in_function271); 
+                    char_literal42_tree = 
+                    (Object)adaptor.create(char_literal42)
+                    ;
+                    adaptor.addChild(root_0, char_literal42_tree);
+
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:10: '>'
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    char_literal43=(Token)match(input,31,FOLLOW_31_in_function275); 
+                    char_literal43_tree = 
+                    (Object)adaptor.create(char_literal43)
+                    ;
+                    adaptor.addChild(root_0, char_literal43_tree);
+
+
+                    }
+                    break;
+                case 3 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:16: '='
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    char_literal44=(Token)match(input,30,FOLLOW_30_in_function279); 
+                    char_literal44_tree = 
+                    (Object)adaptor.create(char_literal44)
+                    ;
+                    adaptor.addChild(root_0, char_literal44_tree);
+
+
+                    }
+                    break;
+                case 4 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:22: '+'
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    char_literal45=(Token)match(input,26,FOLLOW_26_in_function283); 
+                    char_literal45_tree = 
+                    (Object)adaptor.create(char_literal45)
+                    ;
+                    adaptor.addChild(root_0, char_literal45_tree);
+
+
+                    }
+                    break;
+                case 5 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:28: '-'
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    char_literal46=(Token)match(input,27,FOLLOW_27_in_function287); 
+                    char_literal46_tree = 
+                    (Object)adaptor.create(char_literal46)
+                    ;
+                    adaptor.addChild(root_0, char_literal46_tree);
+
+
+                    }
+                    break;
+                case 6 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:34: ':='
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    string_literal47=(Token)match(input,28,FOLLOW_28_in_function291); 
+                    string_literal47_tree = 
+                    (Object)adaptor.create(string_literal47)
+                    ;
+                    adaptor.addChild(root_0, string_literal47_tree);
+
+
+                    }
+                    break;
+                case 7 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:41: '*'
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    char_literal48=(Token)match(input,25,FOLLOW_25_in_function295); 
+                    char_literal48_tree = 
+                    (Object)adaptor.create(char_literal48)
+                    ;
+                    adaptor.addChild(root_0, char_literal48_tree);
+
+
+                    }
+                    break;
+                case 8 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:49:47: identifier
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    pushFollow(FOLLOW_identifier_in_function299);
+                    identifier49=identifier();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, identifier49.getTree());
+
+                    }
+                    break;
+
+            }
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+        }
+
+        finally {
+        	// do for sure before leaving
+        }
+        return retval;
+    }
+    // $ANTLR end "function"
+
+
+    public static class stack_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+
+    // $ANTLR start "stack"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:51:1: stack : '{' ( stackitem )+ '}' -> ^( STACK ( stackitem )+ ) ;
+    public final BstParser.stack_return stack() throws RecognitionException {
+        BstParser.stack_return retval = new BstParser.stack_return();
+        retval.start = input.LT(1);
+
+
+        Object root_0 = null;
+
+        Token char_literal50=null;
+        Token char_literal52=null;
+        BstParser.stackitem_return stackitem51 =null;
+
+
+        Object char_literal50_tree=null;
+        Object char_literal52_tree=null;
+        RewriteRuleTokenStream stream_32=new RewriteRuleTokenStream(adaptor,"token 32");
+        RewriteRuleTokenStream stream_33=new RewriteRuleTokenStream(adaptor,"token 33");
+        RewriteRuleSubtreeStream stream_stackitem=new RewriteRuleSubtreeStream(adaptor,"rule stackitem");
+        try {
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:2: ( '{' ( stackitem )+ '}' -> ^( STACK ( stackitem )+ ) )
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:4: '{' ( stackitem )+ '}'
+            {
+            char_literal50=(Token)match(input,32,FOLLOW_32_in_stack310);  
+            stream_32.add(char_literal50);
+
+
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:8: ( stackitem )+
+            int cnt6=0;
+            loop6:
+            do {
+                int alt6=2;
+                int LA6_0 = input.LA(1);
+
+                if ( (LA6_0==IDENTIFIER||LA6_0==INTEGER||LA6_0==QUOTED||LA6_0==STRING||(LA6_0 >= 25 && LA6_0 <= 32)) ) {
+                    alt6=1;
+                }
+
+
+                switch (alt6) {
+            	case 1 :
+            	    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:8: stackitem
+            	    {
+            	    pushFollow(FOLLOW_stackitem_in_stack312);
+            	    stackitem51=stackitem();
+
+            	    state._fsp--;
+
+            	    stream_stackitem.add(stackitem51.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt6 >= 1 ) break loop6;
+                        EarlyExitException eee =
+                            new EarlyExitException(6, input);
+                        throw eee;
+                }
+                cnt6++;
+            } while (true);
+
+
+            char_literal52=(Token)match(input,33,FOLLOW_33_in_stack315);  
+            stream_33.add(char_literal52);
+
+
+            // AST REWRITE
+            // elements: stackitem
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            // wildcard labels: 
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 52:23: -> ^( STACK ( stackitem )+ )
+            {
+                // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:52:26: ^( STACK ( stackitem )+ )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(
+                (Object)adaptor.create(STACK, "STACK")
+                , root_1);
+
+                if ( !(stream_stackitem.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
+                }
+                while ( stream_stackitem.hasNext() ) {
+                    adaptor.addChild(root_1, stream_stackitem.nextTree());
+
+                }
+                stream_stackitem.reset();
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+
+            retval.tree = root_0;
+
+            }
+
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+        }
+
+        finally {
+        	// do for sure before leaving
+        }
+        return retval;
+    }
+    // $ANTLR end "stack"
+
+
+    public static class stackitem_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+
+    // $ANTLR start "stackitem"
+    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:54:1: stackitem : ( function | STRING | INTEGER | QUOTED | stack );
+    public final BstParser.stackitem_return stackitem() throws RecognitionException {
+        BstParser.stackitem_return retval = new BstParser.stackitem_return();
+        retval.start = input.LT(1);
+
+
+        Object root_0 = null;
+
+        Token STRING54=null;
+        Token INTEGER55=null;
+        Token QUOTED56=null;
+        BstParser.function_return function53 =null;
+
+        BstParser.stack_return stack57 =null;
+
+
+        Object STRING54_tree=null;
+        Object INTEGER55_tree=null;
+        Object QUOTED56_tree=null;
+
+        try {
+            // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:55:2: ( function | STRING | INTEGER | QUOTED | stack )
+            int alt7=5;
+            switch ( input.LA(1) ) {
+            case IDENTIFIER:
+            case 25:
+            case 26:
+            case 27:
+            case 28:
+            case 29:
+            case 30:
+            case 31:
+                {
+                alt7=1;
+                }
+                break;
+            case STRING:
+                {
+                alt7=2;
+                }
+                break;
+            case INTEGER:
+                {
+                alt7=3;
+                }
+                break;
+            case QUOTED:
+                {
+                alt7=4;
+                }
+                break;
+            case 32:
+                {
+                alt7=5;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 7, 0, input);
+
+                throw nvae;
+
+            }
+
+            switch (alt7) {
+                case 1 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:55:4: function
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    pushFollow(FOLLOW_function_in_stackitem334);
+                    function53=function();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, function53.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:56:4: STRING
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    STRING54=(Token)match(input,STRING,FOLLOW_STRING_in_stackitem339); 
+                    STRING54_tree = 
+                    (Object)adaptor.create(STRING54)
+                    ;
+                    adaptor.addChild(root_0, STRING54_tree);
+
+
+                    }
+                    break;
+                case 3 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:57:4: INTEGER
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    INTEGER55=(Token)match(input,INTEGER,FOLLOW_INTEGER_in_stackitem345); 
+                    INTEGER55_tree = 
+                    (Object)adaptor.create(INTEGER55)
+                    ;
+                    adaptor.addChild(root_0, INTEGER55_tree);
+
+
+                    }
+                    break;
+                case 4 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:58:4: QUOTED
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    QUOTED56=(Token)match(input,QUOTED,FOLLOW_QUOTED_in_stackitem351); 
+                    QUOTED56_tree = 
+                    (Object)adaptor.create(QUOTED56)
+                    ;
+                    adaptor.addChild(root_0, QUOTED56_tree);
+
+
+                    }
+                    break;
+                case 5 :
+                    // C:\\git-repos\\jabref\\jabref\\src\\java\\net\\sf\\jabref\\bst\\Bst.g:59:4: stack
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+
+                    pushFollow(FOLLOW_stack_in_stackitem356);
+                    stack57=stack();
+
+                    state._fsp--;
+
+                    adaptor.addChild(root_0, stack57.getTree());
+
+                    }
+                    break;
+
+            }
+            retval.stop = input.LT(-1);
+
+
+            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+        }
+
+        finally {
+        	// do for sure before leaving
+        }
+        return retval;
+    }
+    // $ANTLR end "stackitem"
+
+    // Delegated rules
+
+
+ 
+
+    public static final BitSet FOLLOW_commands_in_program62 = new BitSet(new long[]{0x00000000009C98E2L});
+    public static final BitSet FOLLOW_STRINGS_in_commands82 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_idList_in_commands85 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INTEGERS_in_commands90 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_idList_in_commands93 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FUNCTION_in_commands98 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_id_in_commands101 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_stack_in_commands103 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_MACRO_in_commands108 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_id_in_commands111 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_32_in_commands113 = new BitSet(new long[]{0x0000000000400000L});
+    public static final BitSet FOLLOW_STRING_in_commands116 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_commands118 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_READ_in_commands124 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EXECUTE_in_commands130 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_32_in_commands133 = new BitSet(new long[]{0x00000000FE000100L});
+    public static final BitSet FOLLOW_function_in_commands136 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_commands138 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ITERATE_in_commands144 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_32_in_commands147 = new BitSet(new long[]{0x00000000FE000100L});
+    public static final BitSet FOLLOW_function_in_commands150 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_commands152 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_REVERSE_in_commands158 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_32_in_commands161 = new BitSet(new long[]{0x00000000FE000100L});
+    public static final BitSet FOLLOW_function_in_commands164 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_commands166 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ENTRY_in_commands172 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_idList0_in_commands175 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_idList0_in_commands177 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_idList0_in_commands179 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SORT_in_commands184 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IDENTIFIER_in_identifier195 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_id205 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_identifier_in_id208 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_id210 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_idList222 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_identifier_in_idList224 = new BitSet(new long[]{0x0000000200000100L});
+    public static final BitSet FOLLOW_33_in_idList227 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_idList0247 = new BitSet(new long[]{0x0000000200000100L});
+    public static final BitSet FOLLOW_identifier_in_idList0249 = new BitSet(new long[]{0x0000000200000100L});
+    public static final BitSet FOLLOW_33_in_idList0252 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_29_in_function271 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_function275 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_30_in_function279 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_26_in_function283 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_27_in_function287 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_function291 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_25_in_function295 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifier_in_function299 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_stack310 = new BitSet(new long[]{0x00000001FE420500L});
+    public static final BitSet FOLLOW_stackitem_in_stack312 = new BitSet(new long[]{0x00000003FE420500L});
+    public static final BitSet FOLLOW_33_in_stack315 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_in_stackitem334 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_stackitem339 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INTEGER_in_stackitem345 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_QUOTED_in_stackitem351 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_stack_in_stackitem356 = new BitSet(new long[]{0x0000000000000002L});
+
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/bst/ChangeCaseFunction.java b/src/java/net/sf/jabref/bst/ChangeCaseFunction.java
index 2564a14..4f5667e 100644
--- a/src/java/net/sf/jabref/bst/ChangeCaseFunction.java
+++ b/src/java/net/sf/jabref/bst/ChangeCaseFunction.java
@@ -1,80 +1,80 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.bst;
-
-import java.util.Stack;
-
-import net.sf.jabref.bst.VM.BstEntry;
-import net.sf.jabref.bst.VM.BstFunction;
-
-
-
-/**
- * From the Bibtex manual:
- * 
- * Pops the top two (string) literals; it changes the case of the second
- * according to the specifications of the first, as follows. (Note: The word
- * `letters' in the next sentence refers only to those at brace-level 0, the
- * top-most brace level; no other characters are changed, except perhaps for
- * \special characters", described in Section 4.) If the first literal is the
- * string `t', it converts to lower case all letters except the very first
- * character in the string, which it leaves alone, and except the first
- * character following any colon and then nonnull white space, which it also
- * leaves alone; if it's the string `l', it converts all letters to lower case;
- * and if it's the string `u', it converts all letters to upper case. It then
- * pushes this resulting string. If either type is incorrect, it complains and
- * pushes the null string; however, if both types are correct but the
- * specification string (i.e., the first string) isn't one of the legal ones, it
- * merely pushes the second back onto the stack, after complaining. (Another
- * note: It ignores case differences in the specification string; for example,
- * the strings t and T are equivalent for the purposes of this built-in
- * function.)
- * 
- * Christopher: I think this should be another grammar! This parser is horrible.
- * 
- */
-public class ChangeCaseFunction implements BstFunction {
-
-	VM vm;
-
-	public ChangeCaseFunction(VM vm) {
-		this.vm = vm;
-	}
-
-	public void execute(BstEntry context) {
-		Stack<Object> stack = vm.getStack();
-
-		if (stack.size() < 2) {
-			throw new VMException("Not enough operands on stack for operation change.case$");
-		}
-		Object o1 = stack.pop();
-		Object o2 = stack.pop();
-
-		if (!(o1 instanceof String && ((String) o1).length() == 1)) {
-			throw new VMException("A format string of length 1 is needed for change.case$");
-		}
-
-		if (!(o2 instanceof String)) {
-			throw new VMException("A string is needed as second parameter for change.case$");
-		}
-
-		char format = (((String) o1).toLowerCase().charAt(0));
-		String s = (String) o2;
-
-		stack.push(BibtexCaseChanger.changeCase(s, format, vm));
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.bst;
+
+import java.util.Stack;
+
+import net.sf.jabref.bst.VM.BstEntry;
+import net.sf.jabref.bst.VM.BstFunction;
+
+
+
+/**
+ * From the Bibtex manual:
+ * 
+ * Pops the top two (string) literals; it changes the case of the second
+ * according to the specifications of the first, as follows. (Note: The word
+ * `letters' in the next sentence refers only to those at brace-level 0, the
+ * top-most brace level; no other characters are changed, except perhaps for
+ * \special characters", described in Section 4.) If the first literal is the
+ * string `t', it converts to lower case all letters except the very first
+ * character in the string, which it leaves alone, and except the first
+ * character following any colon and then nonnull white space, which it also
+ * leaves alone; if it's the string `l', it converts all letters to lower case;
+ * and if it's the string `u', it converts all letters to upper case. It then
+ * pushes this resulting string. If either type is incorrect, it complains and
+ * pushes the null string; however, if both types are correct but the
+ * specification string (i.e., the first string) isn't one of the legal ones, it
+ * merely pushes the second back onto the stack, after complaining. (Another
+ * note: It ignores case differences in the specification string; for example,
+ * the strings t and T are equivalent for the purposes of this built-in
+ * function.)
+ * 
+ * Christopher: I think this should be another grammar! This parser is horrible.
+ * 
+ */
+public class ChangeCaseFunction implements BstFunction {
+
+	VM vm;
+
+	public ChangeCaseFunction(VM vm) {
+		this.vm = vm;
+	}
+
+	public void execute(BstEntry context) {
+		Stack<Object> stack = vm.getStack();
+
+		if (stack.size() < 2) {
+			throw new VMException("Not enough operands on stack for operation change.case$");
+		}
+		Object o1 = stack.pop();
+		Object o2 = stack.pop();
+
+		if (!(o1 instanceof String && ((String) o1).length() == 1)) {
+			throw new VMException("A format string of length 1 is needed for change.case$");
+		}
+
+		if (!(o2 instanceof String)) {
+			throw new VMException("A string is needed as second parameter for change.case$");
+		}
+
+		char format = (((String) o1).toLowerCase().charAt(0));
+		String s = (String) o2;
+
+		stack.push(BibtexCaseChanger.changeCase(s, format, vm));
+	}
+
+}
diff --git a/src/java/net/sf/jabref/bst/FormatNameFunction.java b/src/java/net/sf/jabref/bst/FormatNameFunction.java
index 7a29d22..68f19e9 100644
--- a/src/java/net/sf/jabref/bst/FormatNameFunction.java
+++ b/src/java/net/sf/jabref/bst/FormatNameFunction.java
@@ -1,82 +1,82 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.bst;
-
-import java.util.Stack;
-
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.AuthorList.Author;
-import net.sf.jabref.bst.VM.BstEntry;
-import net.sf.jabref.bst.VM.BstFunction;
-
-
-/**
- * From Bibtex:
- * 
- * "The |built_in| function {\.{format.name\$}} pops the
- * top three literals (they are a string, an integer, and a string
- * literal, in that order). The last string literal represents a
- * name list (each name corresponding to a person), the integer
- * literal specifies which name to pick from this list, and the
- * first string literal specifies how to format this name, as
- * described in the \BibTeX\ documentation. Finally, this function
- * pushes the formatted name. If any of the types is incorrect, it
- * complains and pushes the null string."
- * 
- * All the pain is encapsulated in BibtexNameFormatter. :-)
- * 
- */
-public class FormatNameFunction implements BstFunction {
-	
-	VM vm;
-
-	public FormatNameFunction(VM vm) {
-		this.vm = vm;
-	}
-	
-	public void execute(BstEntry context) {
-		Stack<Object> stack = vm.getStack();
-
-		if (stack.size() < 3) {
-			throw new VMException("Not enough operands on stack for operation format.name$");
-		}
-		Object o1 = stack.pop();
-		Object o2 = stack.pop();
-		Object o3 = stack.pop();
-
-		if (!(o1 instanceof String) && !(o2 instanceof Integer) && !(o3 instanceof String)) {
-			// warning("A string is needed for change.case$");
-			stack.push("");
-			return;
-		}
-		
-		String format = (String) o1;
-		Integer name = (Integer) o2;
-		String names = (String) o3;
-		
-		if (names != null){
-			AuthorList a = AuthorList.getAuthorList(names);
-			if (name.intValue() > a.size()){
-				throw new VMException("Author Out of Bounds. Number " + name + " invalid for " + names);
-			}
-			Author author = a.getAuthor(name.intValue() - 1);
-			
-			stack.push(BibtexNameFormatter.formatName(author, format, vm));
-		} else {
-			stack.push("");
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.bst;
+
+import java.util.Stack;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.AuthorList.Author;
+import net.sf.jabref.bst.VM.BstEntry;
+import net.sf.jabref.bst.VM.BstFunction;
+
+
+/**
+ * From Bibtex:
+ * 
+ * "The |built_in| function {\.{format.name\$}} pops the
+ * top three literals (they are a string, an integer, and a string
+ * literal, in that order). The last string literal represents a
+ * name list (each name corresponding to a person), the integer
+ * literal specifies which name to pick from this list, and the
+ * first string literal specifies how to format this name, as
+ * described in the \BibTeX\ documentation. Finally, this function
+ * pushes the formatted name. If any of the types is incorrect, it
+ * complains and pushes the null string."
+ * 
+ * All the pain is encapsulated in BibtexNameFormatter. :-)
+ * 
+ */
+public class FormatNameFunction implements BstFunction {
+	
+	VM vm;
+
+	public FormatNameFunction(VM vm) {
+		this.vm = vm;
+	}
+	
+	public void execute(BstEntry context) {
+		Stack<Object> stack = vm.getStack();
+
+		if (stack.size() < 3) {
+			throw new VMException("Not enough operands on stack for operation format.name$");
+		}
+		Object o1 = stack.pop();
+		Object o2 = stack.pop();
+		Object o3 = stack.pop();
+
+		if (!(o1 instanceof String) && !(o2 instanceof Integer) && !(o3 instanceof String)) {
+			// warning("A string is needed for change.case$");
+			stack.push("");
+			return;
+		}
+		
+		String format = (String) o1;
+		Integer name = (Integer) o2;
+		String names = (String) o3;
+		
+		if (names != null){
+			AuthorList a = AuthorList.getAuthorList(names);
+			if (name.intValue() > a.size()){
+				throw new VMException("Author Out of Bounds. Number " + name + " invalid for " + names);
+			}
+			Author author = a.getAuthor(name.intValue() - 1);
+			
+			stack.push(BibtexNameFormatter.formatName(author, format, vm));
+		} else {
+			stack.push("");
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/bst/PurifyFunction.java b/src/java/net/sf/jabref/bst/PurifyFunction.java
index f700c8a..4ab6681 100644
--- a/src/java/net/sf/jabref/bst/PurifyFunction.java
+++ b/src/java/net/sf/jabref/bst/PurifyFunction.java
@@ -1,62 +1,62 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.bst;
-
-import java.util.Stack;
-
-import net.sf.jabref.bst.VM.BstEntry;
-import net.sf.jabref.bst.VM.BstFunction;
-
-
-
-/**
- * 
- * The |built_in| function {\.{purify\$}} pops the top (string) literal, removes
- * nonalphanumeric characters except for |white_space| and |sep_char| characters
- * (these get converted to a |space|) and removes certain alphabetic characters
- * contained in the control sequences associated with a special character, and
- * pushes the resulting string. If the literal isn't a string, it complains and
- * pushes the null string.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class PurifyFunction implements BstFunction {
-
-	VM vm;
-
-	public PurifyFunction(VM vm) {
-		this.vm = vm;
-	}
-
-	public void execute(BstEntry context) {
-		Stack<Object> stack = vm.getStack();
-
-		if (stack.size() < 1) {
-			throw new VMException("Not enough operands on stack for operation purify$");
-		}
-		Object o1 = stack.pop();
-
-		if (!(o1 instanceof String)) {
-			vm.warn("A string is needed for purify$");
-			stack.push("");
-			return;
-		}
-		
-		stack.push(BibtexPurify.purify((String) o1, vm));
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.bst;
+
+import java.util.Stack;
+
+import net.sf.jabref.bst.VM.BstEntry;
+import net.sf.jabref.bst.VM.BstFunction;
+
+
+
+/**
+ * 
+ * The |built_in| function {\.{purify\$}} pops the top (string) literal, removes
+ * nonalphanumeric characters except for |white_space| and |sep_char| characters
+ * (these get converted to a |space|) and removes certain alphabetic characters
+ * contained in the control sequences associated with a special character, and
+ * pushes the resulting string. If the literal isn't a string, it complains and
+ * pushes the null string.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class PurifyFunction implements BstFunction {
+
+	VM vm;
+
+	public PurifyFunction(VM vm) {
+		this.vm = vm;
+	}
+
+	public void execute(BstEntry context) {
+		Stack<Object> stack = vm.getStack();
+
+		if (stack.size() < 1) {
+			throw new VMException("Not enough operands on stack for operation purify$");
+		}
+		Object o1 = stack.pop();
+
+		if (!(o1 instanceof String)) {
+			vm.warn("A string is needed for purify$");
+			stack.push("");
+			return;
+		}
+		
+		stack.push(BibtexPurify.purify((String) o1, vm));
+	}
+}
diff --git a/src/java/net/sf/jabref/bst/TextPrefixFunction.java b/src/java/net/sf/jabref/bst/TextPrefixFunction.java
index 0d903e3..a8cf1d4 100644
--- a/src/java/net/sf/jabref/bst/TextPrefixFunction.java
+++ b/src/java/net/sf/jabref/bst/TextPrefixFunction.java
@@ -1,73 +1,73 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.bst;
-
-import java.util.Stack;
-
-import net.sf.jabref.bst.VM.BstEntry;
-import net.sf.jabref.bst.VM.BstFunction;
-
-
-
-/**
-The |built_in| function {\.{text.prefix\$}} pops the top two literals
-(the integer literal |pop_lit1| and a string literal, in that order).
-It pushes the substring of the (at most) |pop_lit1| consecutive text
-characters starting from the beginning of the string.  This function
-is similar to {\.{substring\$}}, but this one considers an accented
-character (or more precisely, a ``special character''$\!$, even if
-it's missing its matching |right_brace|) to be a single text character
-(rather than however many |ASCII_code| characters it actually
-comprises), and this function doesn't consider braces to be text
-characters; furthermore, this function appends any needed matching
-|right_brace|s.  If any of the types is incorrect, it complains and
-pushes the null string.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class TextPrefixFunction implements BstFunction {
-
-	VM vm;
-
-	public TextPrefixFunction(VM vm) {
-		this.vm = vm;
-	}
-
-	public void execute(BstEntry context) {
-		Stack<Object> stack = vm.getStack();
-
-		if (stack.size() < 2) {
-			throw new VMException("Not enough operands on stack for operation text.prefix$");
-		}
-		Object o1 = stack.pop();
-		Object o2 = stack.pop();
-
-		if (!(o1 instanceof Integer)) {
-			vm.warn("An integer is needed as first parameter to text.prefix$");
-			stack.push("");
-			return;
-		}
-		if (!(o1 instanceof String)) {
-			vm.warn("A string is needed as second parameter to text.prefix$");
-			stack.push("");
-			return;
-		}
-		
-		stack.push(BibtexTextPrefix.textPrefix(((Integer) o1).intValue(), (String) o2, vm));
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.bst;
+
+import java.util.Stack;
+
+import net.sf.jabref.bst.VM.BstEntry;
+import net.sf.jabref.bst.VM.BstFunction;
+
+
+
+/**
+The |built_in| function {\.{text.prefix\$}} pops the top two literals
+(the integer literal |pop_lit1| and a string literal, in that order).
+It pushes the substring of the (at most) |pop_lit1| consecutive text
+characters starting from the beginning of the string.  This function
+is similar to {\.{substring\$}}, but this one considers an accented
+character (or more precisely, a ``special character''$\!$, even if
+it's missing its matching |right_brace|) to be a single text character
+(rather than however many |ASCII_code| characters it actually
+comprises), and this function doesn't consider braces to be text
+characters; furthermore, this function appends any needed matching
+|right_brace|s.  If any of the types is incorrect, it complains and
+pushes the null string.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class TextPrefixFunction implements BstFunction {
+
+	VM vm;
+
+	public TextPrefixFunction(VM vm) {
+		this.vm = vm;
+	}
+
+	public void execute(BstEntry context) {
+		Stack<Object> stack = vm.getStack();
+
+		if (stack.size() < 2) {
+			throw new VMException("Not enough operands on stack for operation text.prefix$");
+		}
+		Object o1 = stack.pop();
+		Object o2 = stack.pop();
+
+		if (!(o1 instanceof Integer)) {
+			vm.warn("An integer is needed as first parameter to text.prefix$");
+			stack.push("");
+			return;
+		}
+		if (!(o1 instanceof String)) {
+			vm.warn("A string is needed as second parameter to text.prefix$");
+			stack.push("");
+			return;
+		}
+		
+		stack.push(BibtexTextPrefix.textPrefix(((Integer) o1).intValue(), (String) o2, vm));
+	}
+}
diff --git a/src/java/net/sf/jabref/bst/VM.java b/src/java/net/sf/jabref/bst/VM.java
index e3feff5..05f9a82 100644
--- a/src/java/net/sf/jabref/bst/VM.java
+++ b/src/java/net/sf/jabref/bst/VM.java
@@ -1,1341 +1,1341 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.bst;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.Stack;
-import java.util.Vector;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-
-import org.antlr.runtime.ANTLRFileStream;
-import org.antlr.runtime.ANTLRStringStream;
-import org.antlr.runtime.CharStream;
-import org.antlr.runtime.CommonTokenStream;
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.tree.CommonTree;
-import org.antlr.runtime.tree.Tree;
-
-/**
- * 
- * A Bibtex Virtual machine that can execute .bst files.
- * 
- * Documentation can be found in the original bibtex distribution:
- * 
- * http://texcatalogue.sarovar.org/entries/bibtex.html#Download
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-
-public class VM implements Warn {
-
-	PrintStream out = System.out;
-
-	public class Identifier {
-		public String name;
-
-		public Identifier(String name) {
-			this.name = name;
-		}
-
-		public String getName() {
-			return name;
-		}
-	}
-
-	public class Variable {
-		public String name;
-
-		public Variable(String name) {
-			this.name = name;
-		}
-
-		public String getName() {
-			return name;
-		}
-	}
-
-	public interface BstFunction {
-		public void execute(BstEntry context);
-	}
-
-	public static final Integer FALSE = new Integer(0);
-
-	public static final Integer TRUE = new Integer(1);
-
-	private HashMap<String,BstFunction> buildInFunctions;
-
-	public File file;
-
-	public VM(File f) throws RecognitionException, IOException {
-		this(new ANTLRFileStream(f.getPath()));
-		this.file = f;
-	}
-
-	public VM(String s) throws RecognitionException {
-		this(new ANTLRStringStream(s));
-	}
-
-	public static CommonTree charStream2CommonTree(CharStream bst) throws RecognitionException {
-		BstLexer lex = new BstLexer(bst);
-		CommonTokenStream tokens = new CommonTokenStream(lex);
-		BstParser parser = new BstParser(tokens);
-		BstParser.program_return r = parser.program();
-		return (CommonTree) r.getTree();
-	}
-
-	public VM(CharStream bst) throws RecognitionException {
-		this(charStream2CommonTree(bst));
-	}
-
-	public VM(CommonTree tree) {
-		this.tree = tree;
-
-		this.buildInFunctions = new HashMap<String, BstFunction>(37);
-
-		buildInFunctions.put(">", new BstFunction() {
-			/**
-			 * Pops the top two (integer) literals, compares them, and pushes
-			 * the integer 1 if the second is greater than the first, 0
-			 * otherwise.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 2) {
-					throw new VMException("Not enough operands on stack for operation >");
-				}
-				Object o2 = stack.pop();
-				Object o1 = stack.pop();
-
-				if (!(o1 instanceof Integer && o2 instanceof Integer)) {
-					throw new VMException("Can only compare two integers with >");
-				}
-
-				if (o1 == o2) {
-					stack.push(VM.FALSE);
-					return;
-				}
-
-				stack.push(((Integer) o1).compareTo((Integer) o2) > 0 ? VM.TRUE : VM.FALSE);
-			}
-		});
-
-		buildInFunctions.put("<", new BstFunction() {
-			/** Analogous. */
-			public void execute(BstEntry context) {
-				if (stack.size() < 2) {
-					throw new VMException("Not enough operands on stack for operation <");
-				}
-				Object o2 = stack.pop();
-				Object o1 = stack.pop();
-
-				if (!(o1 instanceof Integer && o2 instanceof Integer)) {
-					throw new VMException("Can only compare two integers with <");
-				}
-
-				if (o1 == o2) {
-					stack.push(VM.FALSE);
-					return;
-				}
-
-				stack.push(((Integer) o1).compareTo((Integer) o2) < 0 ? VM.TRUE : VM.FALSE);
-
-			}
-		});
-
-		buildInFunctions.put("=", new BstFunction() {
-			/**
-			 * Pops the top two (both integer or both string) literals, compares
-			 * them, and pushes the integer 1 if they're equal, 0 otherwise.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 2) {
-					throw new VMException("Not enough operands on stack for operation =");
-				}
-				Object o1 = stack.pop();
-				Object o2 = stack.pop();
-
-				if (o1 == null ^ o2 == null) {
-					stack.push(VM.FALSE);
-					return;
-				}
-
-				if (o1 == o2) {
-					stack.push(VM.TRUE);
-					return;
-				}
-
-				stack.push(o1.equals(o2) ? VM.TRUE : VM.FALSE);
-			}
-		});
-
-		buildInFunctions.put("+", new BstFunction() {
-			/** Pops the top two (integer) literals and pushes their sum. */
-			public void execute(BstEntry context) {
-				if (stack.size() < 2) {
-					throw new VMException("Not enough operands on stack for operation +");
-				}
-				Object o2 = stack.pop();
-				Object o1 = stack.pop();
-
-				if (!(o1 instanceof Integer && o2 instanceof Integer)) {
-					throw new VMException("Can only compare two integers with +");
-				}
-
-				stack.push(new Integer(((Integer) o1).intValue() + ((Integer) o2).intValue()));
-			}
-		});
-
-		buildInFunctions.put("-", new BstFunction() {
-			/**
-			 * Pops the top two (integer) literals and pushes their difference
-			 * (the first subtracted from the second).
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 2) {
-					throw new VMException("Not enough operands on stack for operation -");
-				}
-				Object o2 = stack.pop();
-				Object o1 = stack.pop();
-
-				if (!(o1 instanceof Integer && o2 instanceof Integer)) {
-					throw new VMException("Can only subtract two integers with -");
-				}
-
-				stack.push(new Integer(((Integer) o1).intValue() - ((Integer) o2).intValue()));
-			}
-		});
-
-		buildInFunctions.put("*", new BstFunction() {
-			/**
-			 * Pops the top two (string) literals, concatenates them (in reverse
-			 * order, that is, the order in which pushed), and pushes the
-			 * resulting string.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 2) {
-					throw new VMException("Not enough operands on stack for operation *");
-				}
-				Object o2 = stack.pop();
-				Object o1 = stack.pop();
-
-				if (!(o1 instanceof String && o2 instanceof String)) {
-					throw new VMException("Can only concatenate two String with *");
-				}
-
-				stack.push(((String) o1) + ((String) o2));
-			}
-		});
-
-		buildInFunctions.put(":=", new BstFunction() {
-			/**
-			 * Pops the top two literals and assigns to the first (which must be
-			 * a global or entry variable) the value of the second.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 2) {
-					throw new VMException("Invalid call to operation :=");
-				}
-				Object o1 = stack.pop();
-				Object o2 = stack.pop();
-				assign(context, o1, o2);
-
-			}
-		});
-
-		buildInFunctions.put("add.period$", new BstFunction() {
-
-			Pattern p = Pattern.compile("([^\\.\\?\\!\\}\\s])(\\}|\\s)*$");
-
-			/**
-			 * Pops the top (string) literal, adds a `.' to it if the last non
-			 * '}' character isn't a `.', `?', or `!', and pushes this resulting
-			 * string.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 1) {
-					throw new VMException("Not enough operands on stack for operation add.period$");
-				}
-				Object o1 = stack.pop();
-
-				if (!(o1 instanceof String)) {
-					throw new VMException("Can only add a period to a string for add.period$");
-				}
-
-				String s = (String) o1;
-				Matcher m = p.matcher(s);
-
-				if (m.find()) {
-					StringBuffer sb = new StringBuffer();
-					m.appendReplacement(sb, m.group(1));
-					sb.append('.');
-					String group2 = m.group(2);
-					if (group2 != null)
-						sb.append(m.group(2));
-					stack.push(sb.toString());
-				} else {
-					stack.push(s);
-				}
-			}
-		});
-
-		buildInFunctions.put("call.type$", new BstFunction() {
-			/**
-			 * Executes the function whose name is the entry type of an entry.
-			 * For example if an entry is of type book, this function executes
-			 * the book function. When given as an argument to the ITERATE
-			 * command, call.type$ actually produces the output for the entries.
-			 * For an entry with an unknown type, it executes the function
-			 * default.type. Thus you should define (before the READ command)
-			 * one function for each standard entry type as well as a
-			 * default.type function.
-			 */
-			public void execute(BstEntry context) {
-
-				if (context == null) {
-					throw new VMException(
-						"Call.type$ can only be called from within a context (ITERATE or REVERSE).");
-				}
-				VM.this.execute(context.entry.getType().getName().toLowerCase(), context);
-			}
-		});
-
-		buildInFunctions.put("change.case$", new ChangeCaseFunction(this));
-
-		buildInFunctions.put("chr.to.int$", new BstFunction() {
-			/**
-			 * Pops the top (string) literal, makes sure it's a single
-			 * character, converts it to the corresponding ASCII integer, and
-			 * pushes this integer.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 1) {
-					throw new VMException("Not enough operands on stack for operation chr.to.int$");
-				}
-				Object o1 = stack.pop();
-
-				if (!(o1 instanceof String && ((String) o1).length() == 1)) {
-					throw new VMException("Can only perform chr.to.int$ on string with length 1");
-				}
-
-				String s = (String) o1;
-
-				stack.push(new Integer(s.charAt(0)));
-			}
-		});
-
-		buildInFunctions.put("cite$", new BstFunction() {
-			/**
-			 * Pushes the string that was the \cite-command argument for this
-			 * entry.
-			 */
-			public void execute(BstEntry context) {
-				stack.push(context.entry.getCiteKey());
-			}
-		});
-
-		buildInFunctions.put("duplicate$", new BstFunction() {
-			/**
-			 * Pops the top literal from the stack and pushes two copies of it.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 1) {
-					throw new VMException("Not enough operands on stack for operation duplicate$");
-				}
-				Object o1 = stack.pop();
-
-				stack.push(o1);
-				stack.push(o1);
-			}
-		});
-
-		buildInFunctions.put("empty$", new BstFunction() {
-			/**
-			 * Pops the top literal and pushes the integer 1 if it's a missing
-			 * field or a string having no non-white-space characters, 0
-			 * otherwise.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 1) {
-					throw new VMException("Not enough operands on stack for operation empty$");
-				}
-				Object o1 = stack.pop();
-
-				if (o1 == null) {
-					stack.push(VM.TRUE);
-					return;
-				}
-
-				if (!(o1 instanceof String)) {
-					throw new VMException("Operand does not match function empty$");
-				}
-
-				String s = (String) o1;
-
-				stack.push(s.trim().equals("") ? VM.TRUE : VM.FALSE);
-			}
-		});
-
-		buildInFunctions.put("format.name$", new FormatNameFunction(this));
-
-		buildInFunctions.put("if$", new BstFunction() {
-			/**
-			 * Pops the top three literals (they are two function literals and
-			 * an integer literal, in that order); if the integer is greater
-			 * than 0, it executes the second literal, else it executes the
-			 * first.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 3) {
-					throw new VMException("Not enough operands on stack for operation =");
-				}
-				Object f1 = stack.pop();
-				Object f2 = stack.pop();
-				Object i = stack.pop();
-
-				if (!(f1 instanceof Identifier || f1 instanceof Tree)
-					&& (f2 instanceof Identifier || f2 instanceof Tree) && (i instanceof Integer)) {
-					throw new VMException("Expecting two functions and an integer for if$.");
-				}
-
-				Object toExe;
-				if (((Integer) i).intValue() > 0) {
-					toExe = f2;
-				} else {
-					toExe = f1;
-				}
-				VM.this.executeInContext(toExe, context);
-			}
-		});
-
-		buildInFunctions.put("int.to.chr$", new BstFunction() {
-			/**
-			 * Pops the top (integer) literal, interpreted as the ASCII integer
-			 * value of a single character, converts it to the corresponding
-			 * single-character string, and pushes this string.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 1) {
-					throw new VMException("Not enough operands on stack for operation int.to.chr$");
-				}
-				Object o1 = stack.pop();
-
-				if (!(o1 instanceof Integer)) {
-					throw new VMException("Can only perform operation int.to.chr$ on an Integer");
-				}
-
-				Integer i = (Integer) o1;
-
-				stack.push(String.valueOf((char) i.intValue()));
-			}
-		});
-
-		buildInFunctions.put("int.to.str$", new BstFunction() {
-			/**
-			 * Pops the top (integer) literal, converts it to its (unique)
-			 * string equivalent, and pushes this string.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 1) {
-					throw new VMException("Not enough operands on stack for operation int.to.str$");
-				}
-				Object o1 = stack.pop();
-
-				if (!(o1 instanceof Integer)) {
-					throw new VMException(
-						"Can only transform an integer to an string using int.to.str$");
-				}
-
-				stack.push(((Integer) o1).toString());
-			}
-		});
-
-		buildInFunctions.put("missing$", new BstFunction() {
-			/**
-			 * Pops the top literal and pushes the integer 1 if it's a missing
-			 * field, 0 otherwise.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 1) {
-					throw new VMException("Not enough operands on stack for operation missing$");
-				}
-				Object o1 = stack.pop();
-
-				if (o1 == null) {
-					stack.push(VM.TRUE);
-					return;
-				}
-
-				if (!(o1 instanceof String)) {
-					warn("Not a string or missing field in operation missing$");
-					stack.push(VM.TRUE);
-					return;
-				}
-
-				stack.push(VM.FALSE);
-			}
-		});
-
-		buildInFunctions.put("newline$", new BstFunction() {
-			/**
-			 * Writes onto the bbl file what's accumulated in the output buffer.
-			 * It writes a blank line if and only if the output buffer is empty.
-			 * Since write$ does reasonable line breaking, you should use this
-			 * function only when you want a blank line or an explicit line
-			 * break.
-			 */
-			public void execute(BstEntry context) {
-				VM.this.bbl.append('\n');
-			}
-		});
-
-		buildInFunctions.put("num.names$", new BstFunction() {
-			/**
-			 * Pops the top (string) literal and pushes the number of names the
-			 * string represents one plus the number of occurrences of the
-			 * substring "and" (ignoring case differences) surrounded by
-			 * non-null white-space at the top brace level.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 1) {
-					throw new VMException("Not enough operands on stack for operation num.names$");
-				}
-				Object o1 = stack.pop();
-
-				if (!(o1 instanceof String)) {
-					throw new VMException("Need a string at the top of the stack for num.names$");
-				}
-				String s = (String) o1;
-
-				stack.push(new Integer(AuthorList.getAuthorList(s).size()));
-			}
-		});
-
-		buildInFunctions.put("pop$", new BstFunction() {
-			/**
-			 * Pops the top of the stack but doesn't print it; this gets rid of
-			 * an unwanted stack literal.
-			 */
-			public void execute(BstEntry context) {
-				stack.pop();
-			}
-		});
-
-		buildInFunctions.put("preamble$", new BstFunction() {
-			/**
-			 * The |built_in| function {\.{preamble\$}} pushes onto the stack
-			 * the concatenation of all the \.{preamble} strings read from the
-			 * database files. (or the empty string if there where none)
-			 * 
-			 * @PREAMBLE strings read from the database files.
-			 */
-			public void execute(BstEntry context) {
-				if (preamble != null) {
-					stack.push(preamble);
-				} else {
-					stack.push("");
-				}
-
-			}
-		});
-
-		/**
-		 * Pops the top (string) literal, removes nonalphanumeric characters
-		 * except for white-space characters and hyphens and ties (these all get
-		 * converted to a space), removes certain alphabetic characters
-		 * contained in the control sequences associated with a \special
-		 * character", and pushes the resulting string.
-		 */
-		buildInFunctions.put("purify$", new PurifyFunction(this));
-
-		buildInFunctions.put("quote$", new BstFunction() {
-			/**
-			 * Pushes the string consisting of the double-quote character.
-			 */
-			public void execute(BstEntry context) {
-				stack.push("\"");
-			}
-		});
-
-		buildInFunctions.put("skip$", new BstFunction() {
-			/**
-			 * Is a no-op.
-			 */
-			public void execute(BstEntry context) {
-				// Nothing to do! Yeah!
-			}
-		});
-
-		buildInFunctions.put("stack$", new BstFunction() {
-			/**
-			 * Pops and prints the whole stack; it's meant to be used for style
-			 * designers while debugging.
-			 */
-			public void execute(BstEntry context) {
-				while (!stack.empty()) {
-					System.out.println(stack.pop());
-				}
-			}
-		});
-
-		buildInFunctions.put("substring$", new BstFunction() {
-			/**
-			 * Pops the top three literals (they are the two integers literals
-			 * len and start, and a string literal, in that order). It pushes
-			 * the substring of the (at most) len consecutive characters
-			 * starting at the startth character (assuming 1-based indexing) if
-			 * start is positive, and ending at the start-th character
-			 * (including) from the end if start is negative (where the first
-			 * character from the end is the last character).
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 3) {
-					throw new VMException("Not enough operands on stack for operation substring$");
-				}
-				Object o1 = stack.pop();
-				Object o2 = stack.pop();
-				Object o3 = stack.pop();
-
-				if (!((o1 instanceof Integer) && (o2 instanceof Integer) && (o3 instanceof String))) {
-					throw new VMException("Expecting two integers and a string for substring$");
-				}
-
-				Integer len = (Integer) o1;
-				Integer start = (Integer) o2;
-
-				int lenI = len.intValue();
-				int startI = start.intValue();
-
-				if (lenI > Integer.MAX_VALUE / 2)
-					lenI = Integer.MAX_VALUE / 2;
-
-				if (startI > Integer.MAX_VALUE / 2)
-					startI = Integer.MAX_VALUE / 2;
-
-				if (startI < Integer.MIN_VALUE / 2)
-					startI = -Integer.MIN_VALUE / 2;
-
-				String s = (String) o3;
-
-				if (startI < 0) {
-					startI += s.length() + 1;
-					startI = Math.max(1, startI + 1 - lenI);
-				}
-				stack.push(s.substring(startI - 1, Math.min(startI - 1 + lenI, s.length())));
-			}
-		});
-
-		buildInFunctions.put("swap$", new BstFunction() {
-			/**
-			 * Swaps the top two literals on the stack. text.length$ Pops the
-			 * top (string) literal, and pushes the number of text char- acters
-			 * it contains, where an accented character (more precisely, a
-			 * \special character", defined in Section 4) counts as a single
-			 * text character, even if it's missing its matching right brace,
-			 * and where braces don't count as text characters.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 2) {
-					throw new VMException("Not enough operands on stack for operation swap$");
-				}
-				Object f1 = stack.pop();
-				Object f2 = stack.pop();
-
-				stack.push(f1);
-				stack.push(f2);
-			}
-		});
-
-		buildInFunctions.put("text.length$", new BstFunction() {
-			/**
-			 * text.length$ Pops the top (string) literal, and pushes the number
-			 * of text characters it contains, where an accented character (more
-			 * precisely, a "special character", defined in Section 4) counts as
-			 * a single text character, even if it's missing its matching right
-			 * brace, and where braces don't count as text characters.
-			 * 
-			 * From BibTeXing: For the purposes of counting letters in labels,
-			 * BibTEX considers everything contained inside the braces as a
-			 * single letter.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 1) {
-					throw new VMException("Not enough operands on stack for operation text.length$");
-				}
-				Object o1 = stack.pop();
-
-				if (!(o1 instanceof String)) {
-					throw new VMException("Can only perform operation on a string text.length$");
-				}
-
-				String s = (String) o1;
-				char[] c = s.toCharArray();
-				int result = 0;
-
-				// Comments from bibtex.web:
-
-				// sp_ptr := str_start[pop_lit1];
-				int i = 0;
-
-				// sp_end := str_start[pop_lit1+1];
-				int n = s.length();
-
-				// sp_brace_level := 0;
-				int braceLevel = 0;
-
-				// while (sp_ptr < sp_end) do begin
-				while (i < n) {
-					// incr(sp_ptr);
-					i++;
-					// if (str_pool[sp_ptr-1] = left_brace) then
-					// begin
-					if (c[i - 1] == '{') {
-						// incr(sp_brace_level);
-						braceLevel++;
-						// if ((sp_brace_level = 1) and (sp_ptr < sp_end)) then
-						if (braceLevel == 1 && i < n)
-							// if (str_pool[sp_ptr] = backslash) then
-							// begin
-							if (c[i] == '\\') {
-								// incr(sp_ptr); {skip over the |backslash|}
-								i++; // skip over backslash
-								// while ((sp_ptr < sp_end) and (sp_brace_level
-								// > 0)) do begin
-								while (i < n && braceLevel > 0) {
-									// if (str_pool[sp_ptr] = right_brace) then
-									if (c[i] == '}')
-										// decr(sp_brace_level)
-										braceLevel--;
-									// else if (str_pool[sp_ptr] = left_brace)
-									// then
-									else if (c[i] == '{')
-
-										// incr(sp_brace_level);
-										braceLevel++;
-									// incr(sp_ptr);
-									i++;
-									// end;
-								}
-								// incr(num_text_chars);
-								result++;
-								// end;
-							}
-						// end
-					}
-					// else if (str_pool[sp_ptr-1] = right_brace) then
-					// begin
-					else if (c[i - 1] == '}') {
-						// if (sp_brace_level > 0) then
-						if (braceLevel > 0)
-							// decr(sp_brace_level);
-							braceLevel--;
-						// end
-					}
-					// else
-					else
-						// incr(num_text_chars);
-						result++;
-				}
-				stack.push(new Integer(result));
-			}
-		});
-
-		/**
-		 * Pops the top two literals (the integer literal len and a string
-		 * literal, in that order). It pushes the substring of the (at most) len
-		 * consecutive text characters starting from the beginning of the
-		 * string. This function is similar to substring$, but this one
-		 * considers a \special character", even if it's missing its matching
-		 * right brace, to be a single text character (rather than however many
-		 * ASCII characters it actually comprises), and this function doesn't
-		 * consider braces to be text characters; furthermore, this function
-		 * appends any needed matching right braces.
-		 */
-		buildInFunctions.put("text.prefix$", new TextPrefixFunction(this));
-
-		buildInFunctions.put("top$", new BstFunction() {
-			/**
-			 * Pops and prints the top of the stack on the terminal and log
-			 * file. It's useful for debugging.
-			 */
-			public void execute(BstEntry context) {
-				System.out.println(stack.pop());
-			}
-		});
-
-		buildInFunctions.put("type$", new BstFunction() {
-			/**
-			 * Pushes the current entry's type (book, article, etc.), but pushes
-			 * the null string if the type is either unknown or undefined.
-			 */
-			public void execute(BstEntry context) {
-				stack.push(context.entry.getType().getName());
-			}
-		});
-
-		buildInFunctions.put("warning$", new BstFunction() {
-			/**
-			 * Pops the top (string) literal and prints it following a warning
-			 * message. This also increments a count of the number of warning
-			 * messages issued.
-			 */
-			int warning = 1;
-
-			public void execute(BstEntry context) {
-				out.println("Warning (#" + (warning++) + "): " + stack.pop());
-			}
-		});
-
-		buildInFunctions.put("while$", new BstFunction() {
-			/**
-			 * Pops the top two (function) literals, and keeps executing the
-			 * second as long as the (integer) literal left on the stack by
-			 * executing the first is greater than 0.
-			 */
-			public void execute(BstEntry context) {
-				if (stack.size() < 2) {
-					throw new VMException("Not enough operands on stack for operation while$");
-				}
-				Object f2 = stack.pop();
-				Object f1 = stack.pop();
-
-				if (!(f1 instanceof Identifier || f1 instanceof Tree)
-					&& (f2 instanceof Identifier || f2 instanceof Tree)) {
-					throw new VMException("Expecting two functions for while$.");
-				}
-
-				do {
-					VM.this.executeInContext(f1, context);
-
-					Object i = stack.pop();
-					if (!(i instanceof Integer)) {
-						throw new VMException(
-							"First parameter to while has to return an integer but was " + i);
-					}
-					if (((Integer) i).intValue() <= 0) {
-						break;
-					}
-					VM.this.executeInContext(f2, context);
-				} while (true);
-			}
-		});
-
-		buildInFunctions.put("width$", new WidthFunction(this));
-
-		buildInFunctions.put("write$", new BstFunction() {
-			/**
-			 * Pops the top (string) literal and writes it on the output buffer
-			 * (which will result in stuff being written onto the bbl file when
-			 * the buffer fills up).
-			 */
-			public void execute(BstEntry context) {
-				String s = (String) stack.pop();
-				System.out.println(s);
-				VM.this.bbl.append(s);
-			}
-		});
-
-	}
-
-	protected boolean assign(BstEntry context, Object o1, Object o2) {
-
-		if (!(o1 instanceof Identifier) || !(o2 instanceof String || o2 instanceof Integer))
-			throw new VMException("Invalid parameters");
-
-		String name = ((Identifier) o1).getName();
-
-		if (o2 instanceof String) {
-
-			if (context != null && context.strings.containsKey(name)) {
-				context.strings.put(name, (String) o2);
-				return true;
-			}
-
-			if (strings.containsKey(name)) {
-				strings.put(name, (String) o2);
-				return true;
-			}
-			return false;
-
-		}
-		if (o2 instanceof Integer) {
-			if (context != null && context.integers.containsKey(name)) {
-				context.integers.put(name, (Integer) o2);
-				return true;
-			}
-
-			if (integers.containsKey(name)) {
-				integers.put(name, (Integer) o2);
-				return true;
-			}
-			return false;
-		}
-		return false;
-	}
-
-	CommonTree tree;
-
-	private StringBuffer bbl;
-
-	String preamble;
-
-	public String run(BibtexDatabase db) {
-		preamble = db.getPreamble();
-		return run(db.getEntries());
-	}
-
-	public String run(Collection<BibtexEntry> bibtex) {
-
-		reset();
-
-		{ // Create entries
-			entries = new Vector<BstEntry>(bibtex.size());
-			ListIterator<BstEntry> i = entries.listIterator();
-			for (BibtexEntry entry : bibtex){
-				i.add(new BstEntry(entry));
-			}
-		}
-
-		// assert tree.getType() == Bst.COMMANDS;
-
-		// Go
-		for (int i = 0; i < tree.getChildCount(); i++) {
-			Tree child = tree.getChild(i);
-			switch (child.getType()) {
-			case BstParser.STRINGS:
-				strings(child);
-				break;
-			case BstParser.INTEGERS:
-				integers(child);
-				break;
-			case BstParser.FUNCTION:
-				function(child);
-				break;
-			case BstParser.EXECUTE:
-				execute(child);
-				break;
-			case BstParser.SORT:
-				sort(child);
-				break;
-			case BstParser.ITERATE:
-				iterate(child);
-				break;
-			case BstParser.REVERSE:
-				reverse(child);
-				break;
-			case BstParser.ENTRY:
-				entry(child);
-				break;
-			case BstParser.READ:
-				read();
-				break;
-			case BstParser.MACRO:
-				macro(child);
-				break;
-			}
-		}
-
-		return bbl.toString();
-	}
-
-	private void reset() {
-		bbl = new StringBuffer();
-
-		entries = null;
-
-		strings = new HashMap<String, String>();
-
-		integers = new HashMap<String, Integer>();
-		integers.put("entry.max$", new Integer(Integer.MAX_VALUE));
-		integers.put("global.max$", new Integer(Integer.MAX_VALUE));
-
-		functions = new HashMap<String, BstFunction>();
-		functions.putAll(buildInFunctions);
-
-		stack = new Stack<Object>();
-	}
-
-	/**
-	 * Dredges up from the database file the field values for each entry in the
-	 * list. It has no arguments. If a database entry doesn't have a value for a
-	 * field (and probably no database entry will have a value for every field),
-	 * that field variable is marked as missing for the entry.
-	 * 
-	 * We use null for the missing entry designator.
-	 * 
-	 * @param child
-	 */
-	private void read() {
-
-		Iterator<BstEntry> i = entries.iterator();
-		while (i.hasNext()) {
-			BstEntry e = i.next();
-
-			for (Map.Entry<String, String> mEntry : e.fields.entrySet()){
-				Object fieldValue = e.entry.getField(mEntry.getKey());
-
-				mEntry.setValue((fieldValue == null ? null : fieldValue.toString()));
-			}
-		}
-
-		i = entries.iterator();
-		while (i.hasNext()) {
-			BstEntry e = i.next();
-			if (!e.fields.containsKey("crossref")) {
-				e.fields.put("crossref", null);
-			}
-		}
-	}
-
-	/**
-	 * Defines a string macro. It has two arguments; the first is the macro's
-	 * name, which is treated like any other variable or function name, and the
-	 * second is its definition, which must be double-quote-delimited. You must
-	 * have one for each three-letter month abbreviation; in addition, you
-	 * should have one for common journal names. The user's database may
-	 * override any definition you define using this command. If you want to
-	 * define a string the user can't touch, use the FUNCTION command, which has
-	 * a compatible syntax.
-	 * 
-	 * @param child
-	 */
-	private void macro(Tree child) {
-		String name = child.getChild(0).getText();
-		String replacement = child.getChild(1).getText();
-		functions.put(name, new MacroFunction(replacement));
-	}
-
-	public class MacroFunction implements BstFunction {
-
-		String replacement;
-
-		public MacroFunction(String replacement) {
-			this.replacement = replacement;
-		}
-
-		public void execute(BstEntry context) {
-			VM.this.push(replacement);
-		}
-	}
-
-	/*
-	 * Declares the fields and entry variables. It has three arguments, each a
-	 * (possibly empty) list of variable names. The three lists are of: fields,
-	 * integer entry variables, and string entry variables. There is an
-	 * additional field that BibTEX automatically declares, crossref, used for
-	 * cross ref- erencing. And there is an additional string entry variable
-	 * automatically declared, sort.key$, used by the SORT command. Each of
-	 * these variables has a value for each entry on the list.
-	 */
-	private void entry(Tree child) {
-
-		{ // Fields first
-			Tree t = child.getChild(0);
-			// assert t.getType() == Bst.IDLIST;
-
-			for (int i = 0; i < t.getChildCount(); i++) {
-				String name = t.getChild(i).getText();
-
-				for (BstEntry entry : entries){
-					entry.fields.put(name, null);
-				}
-			}
-		}
-		{ // Integers
-			Tree t = child.getChild(1);
-			// assert t.getType() == Bst.IDLIST;
-
-			for (int i = 0; i < t.getChildCount(); i++) {
-				String name = t.getChild(i).getText();
-				
-				for (BstEntry entry : entries){
-					entry.integers.put(name, new Integer(0));
-				}
-			}
-		}
-		{ // Strings
-			Tree t = child.getChild(2);
-			// assert t.getType() == Bst.IDLIST;
-
-			for (int i = 0; i < t.getChildCount(); i++) {
-				String name = t.getChild(i).getText();
-				for (BstEntry entry : entries){
-					entry.strings.put(name, null);
-				}
-			}
-			for (BstEntry entry : entries){
-				entry.strings.put("sort.key$", null);
-			}
-		}
-	}
-
-	private void reverse(Tree child) {
-
-		BstFunction f = functions.get(child.getChild(0).getText());
-
-		ListIterator<BstEntry> i = entries.listIterator(entries.size());
-		while (i.hasPrevious()) {
-			f.execute(i.previous());
-		}
-	}
-
-	private void iterate(Tree child) {
-		BstFunction f = functions.get(child.getChild(0).getText());
-
-		Iterator<BstEntry> i = entries.iterator();
-		while (i.hasNext()) {
-			f.execute(i.next());
-		}
-	}
-
-	/**
-	 * Sorts the entry list using the values of the string entry variable
-	 * sort.key$. It has no arguments.
-	 * 
-	 * @param child
-	 */
-	private void sort(Tree child) {
-		Collections.sort(entries, new Comparator<BstEntry>() {
-			public int compare(BstEntry o1, BstEntry o2) {
-				return (o1.strings.get("sort.key$")).compareTo(o2.strings
-					.get("sort.key$"));
-			}
-		});
-	}
-
-	public void executeInContext(Object o, BstEntry context) {
-		if (o instanceof Tree) {
-			Tree t = (Tree) o;
-			new StackFunction(t).execute(context);
-		} else if (o instanceof Identifier) {
-			execute(((Identifier) o).getName(), context);
-		}
-	}
-
-	public void execute(Tree child) {
-		execute(child.getChild(0).getText(), null);
-	}
-
-	public class StackFunction implements BstFunction {
-
-		Tree tree;
-
-		public Tree getTree() {
-			return tree;
-		}
-
-		public StackFunction(Tree stack) {
-			// assert stack.getType() == Bst.STACK;
-			tree = stack;
-		}
-
-		public void execute(BstEntry context) {
-
-			for (int i = 0; i < tree.getChildCount(); i++) {
-
-				Tree c = tree.getChild(i);
-				try {
-
-					switch (c.getType()) {
-					case BstParser.STRING: {
-						String s = c.getText();
-						push(s.substring(1, s.length() - 1));
-					}
-						break;
-					case BstParser.INTEGER:
-						push(new Integer(Integer.parseInt(c.getText().substring(1))));
-						break;
-					case BstParser.QUOTED:
-						push(new Identifier(c.getText().substring(1)));
-						break;
-					case BstParser.STACK:
-						push(c);
-						break;
-					default:
-						VM.this.execute(c.getText(), context);
-					}
-				} catch (VMException e) {
-					if (file != null) {
-						System.err.println("ERROR " + e.getMessage() + " (" + file.getPath() + ":"
-							+ c.getLine() + ")");
-					} else {
-						System.err.println("ERROR " + e.getMessage() + " (" + c.getLine() + ")");
-					}
-					throw e;
-				}
-			}
-
-		}
-	}
-
-	private void push(Tree t) {
-		stack.push(t);
-	}
-
-	public void execute(String name, BstEntry context) {
-
-		if (context != null) {
-
-			if (context.fields.containsKey(name)) {
-				stack.push(context.fields.get(name));
-				return;
-			}
-			if (context.strings.containsKey(name)) {
-				stack.push(context.strings.get(name));
-				return;
-			}
-			if (context.integers.containsKey(name)) {
-				stack.push(context.integers.get(name));
-				return;
-			}
-		}
-		if (strings.containsKey(name)) {
-			stack.push(strings.get(name));
-			return;
-		}
-		if (integers.containsKey(name)) {
-			stack.push(integers.get(name));
-			return;
-		}
-
-		if (functions.containsKey(name)) {
-			functions.get(name).execute(context);
-			return;
-		}
-
-		throw new VMException("No matching identifier found: " + name);
-	}
-
-	private void function(Tree child) {
-		String name = child.getChild(0).getText();
-		Tree stack = child.getChild(1);
-		functions.put(name, new StackFunction(stack));
-
-	}
-
-	/**
-	 * Declares global integer variables. It has one argument, a list of
-	 * variable names. There are two such automatically-declared variables,
-	 * entry.max$ and global.max$, used for limiting the lengths of string vari-
-	 * ables. You may have any number of these commands, but a variable's
-	 * declaration must precede its use.
-	 * 
-	 * @param child
-	 */
-	private void integers(Tree child) {
-		Tree t = child.getChild(0);
-		// assert t.getType() == Bst.IDLIST;
-
-		for (int i = 0; i < t.getChildCount(); i++) {
-			String name = t.getChild(i).getText();
-			integers.put(name, new Integer(0));
-		}
-	}
-
-	/**
-	 * Declares global string variables. It has one argument, a list of variable
-	 * names. You may have any number of these commands, but a variable's
-	 * declaration must precede its use.
-	 * 
-	 * @param child
-	 */
-	private void strings(Tree child) {
-		Tree t = child.getChild(0);
-		// assert t.getType() == Bst.IDLIST;
-
-		for (int i = 0; i < t.getChildCount(); i++) {
-			String name = t.getChild(i).getText();
-			strings.put(name, null);
-		}
-	}
-
-	public class BstEntry {
-
-		public BstEntry(BibtexEntry e) {
-			this.entry = e;
-		}
-
-		BibtexEntry entry;
-
-		Map<String, String> strings = new HashMap<String, String>();
-
-		Map<String, String> fields = new HashMap<String, String>();
-
-		Map<String, Integer> integers = new HashMap<String, Integer>();
-
-		public Map<String, String> getFields() {
-			return fields;
-		}
-
-		public BibtexEntry getBibtexEntry() {
-			return entry;
-		}
-	}
-
-	Vector<BstEntry> entries;
-	
-	Map<String, String> strings = new HashMap<String, String>();
-	
-	Map<String, Integer> integers = new HashMap<String, Integer>();
-	
-	Map<String, BstFunction> functions = new HashMap<String, BstFunction>();
-	
-	Stack<Object> stack = new Stack<Object>();
-	
-	public void push(Integer integer) {
-		stack.push(integer);
-	}
-
-	public void push(String string) {
-		stack.push(string);
-	}
-
-	public void push(Identifier identifier) {
-		stack.push(identifier);
-	}
-
-	
-	  public Map<String, String> getStrings() { return strings; }
-	  
-	  public Map<String, Integer> getIntegers() { return integers; }
-	  
-	  public Vector<BstEntry> getEntries() { return entries; }
-	  
-	 public Map<String, BstFunction> getFunctions() { return functions; }
-
-	public Stack<Object> getStack() {
-		return stack;
-	}
-
-	public void warn(String string) {
-		System.out.println(string);
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.bst;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Stack;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+
+import org.antlr.runtime.ANTLRFileStream;
+import org.antlr.runtime.ANTLRStringStream;
+import org.antlr.runtime.CharStream;
+import org.antlr.runtime.CommonTokenStream;
+import org.antlr.runtime.RecognitionException;
+import org.antlr.runtime.tree.CommonTree;
+import org.antlr.runtime.tree.Tree;
+
+/**
+ * 
+ * A Bibtex Virtual machine that can execute .bst files.
+ * 
+ * Documentation can be found in the original bibtex distribution:
+ * 
+ * http://texcatalogue.sarovar.org/entries/bibtex.html#Download
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+
+public class VM implements Warn {
+
+	PrintStream out = System.out;
+
+	public class Identifier {
+		public String name;
+
+		public Identifier(String name) {
+			this.name = name;
+		}
+
+		public String getName() {
+			return name;
+		}
+	}
+
+	public class Variable {
+		public String name;
+
+		public Variable(String name) {
+			this.name = name;
+		}
+
+		public String getName() {
+			return name;
+		}
+	}
+
+	public interface BstFunction {
+		public void execute(BstEntry context);
+	}
+
+	public static final Integer FALSE = new Integer(0);
+
+	public static final Integer TRUE = new Integer(1);
+
+	private HashMap<String,BstFunction> buildInFunctions;
+
+	public File file;
+
+	public VM(File f) throws RecognitionException, IOException {
+		this(new ANTLRFileStream(f.getPath()));
+		this.file = f;
+	}
+
+	public VM(String s) throws RecognitionException {
+		this(new ANTLRStringStream(s));
+	}
+
+	public static CommonTree charStream2CommonTree(CharStream bst) throws RecognitionException {
+		BstLexer lex = new BstLexer(bst);
+		CommonTokenStream tokens = new CommonTokenStream(lex);
+		BstParser parser = new BstParser(tokens);
+		BstParser.program_return r = parser.program();
+		return (CommonTree) r.getTree();
+	}
+
+	public VM(CharStream bst) throws RecognitionException {
+		this(charStream2CommonTree(bst));
+	}
+
+	public VM(CommonTree tree) {
+		this.tree = tree;
+
+		this.buildInFunctions = new HashMap<String, BstFunction>(37);
+
+		buildInFunctions.put(">", new BstFunction() {
+			/**
+			 * Pops the top two (integer) literals, compares them, and pushes
+			 * the integer 1 if the second is greater than the first, 0
+			 * otherwise.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 2) {
+					throw new VMException("Not enough operands on stack for operation >");
+				}
+				Object o2 = stack.pop();
+				Object o1 = stack.pop();
+
+				if (!(o1 instanceof Integer && o2 instanceof Integer)) {
+					throw new VMException("Can only compare two integers with >");
+				}
+
+				if (o1 == o2) {
+					stack.push(VM.FALSE);
+					return;
+				}
+
+				stack.push(((Integer) o1).compareTo((Integer) o2) > 0 ? VM.TRUE : VM.FALSE);
+			}
+		});
+
+		buildInFunctions.put("<", new BstFunction() {
+			/** Analogous. */
+			public void execute(BstEntry context) {
+				if (stack.size() < 2) {
+					throw new VMException("Not enough operands on stack for operation <");
+				}
+				Object o2 = stack.pop();
+				Object o1 = stack.pop();
+
+				if (!(o1 instanceof Integer && o2 instanceof Integer)) {
+					throw new VMException("Can only compare two integers with <");
+				}
+
+				if (o1 == o2) {
+					stack.push(VM.FALSE);
+					return;
+				}
+
+				stack.push(((Integer) o1).compareTo((Integer) o2) < 0 ? VM.TRUE : VM.FALSE);
+
+			}
+		});
+
+		buildInFunctions.put("=", new BstFunction() {
+			/**
+			 * Pops the top two (both integer or both string) literals, compares
+			 * them, and pushes the integer 1 if they're equal, 0 otherwise.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 2) {
+					throw new VMException("Not enough operands on stack for operation =");
+				}
+				Object o1 = stack.pop();
+				Object o2 = stack.pop();
+
+				if (o1 == null ^ o2 == null) {
+					stack.push(VM.FALSE);
+					return;
+				}
+
+				if (o1 == o2) {
+					stack.push(VM.TRUE);
+					return;
+				}
+
+				stack.push(o1.equals(o2) ? VM.TRUE : VM.FALSE);
+			}
+		});
+
+		buildInFunctions.put("+", new BstFunction() {
+			/** Pops the top two (integer) literals and pushes their sum. */
+			public void execute(BstEntry context) {
+				if (stack.size() < 2) {
+					throw new VMException("Not enough operands on stack for operation +");
+				}
+				Object o2 = stack.pop();
+				Object o1 = stack.pop();
+
+				if (!(o1 instanceof Integer && o2 instanceof Integer)) {
+					throw new VMException("Can only compare two integers with +");
+				}
+
+				stack.push(new Integer(((Integer) o1).intValue() + ((Integer) o2).intValue()));
+			}
+		});
+
+		buildInFunctions.put("-", new BstFunction() {
+			/**
+			 * Pops the top two (integer) literals and pushes their difference
+			 * (the first subtracted from the second).
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 2) {
+					throw new VMException("Not enough operands on stack for operation -");
+				}
+				Object o2 = stack.pop();
+				Object o1 = stack.pop();
+
+				if (!(o1 instanceof Integer && o2 instanceof Integer)) {
+					throw new VMException("Can only subtract two integers with -");
+				}
+
+				stack.push(new Integer(((Integer) o1).intValue() - ((Integer) o2).intValue()));
+			}
+		});
+
+		buildInFunctions.put("*", new BstFunction() {
+			/**
+			 * Pops the top two (string) literals, concatenates them (in reverse
+			 * order, that is, the order in which pushed), and pushes the
+			 * resulting string.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 2) {
+					throw new VMException("Not enough operands on stack for operation *");
+				}
+				Object o2 = stack.pop();
+				Object o1 = stack.pop();
+
+				if (!(o1 instanceof String && o2 instanceof String)) {
+					throw new VMException("Can only concatenate two String with *");
+				}
+
+				stack.push(((String) o1) + ((String) o2));
+			}
+		});
+
+		buildInFunctions.put(":=", new BstFunction() {
+			/**
+			 * Pops the top two literals and assigns to the first (which must be
+			 * a global or entry variable) the value of the second.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 2) {
+					throw new VMException("Invalid call to operation :=");
+				}
+				Object o1 = stack.pop();
+				Object o2 = stack.pop();
+				assign(context, o1, o2);
+
+			}
+		});
+
+		buildInFunctions.put("add.period$", new BstFunction() {
+
+			Pattern p = Pattern.compile("([^\\.\\?\\!\\}\\s])(\\}|\\s)*$");
+
+			/**
+			 * Pops the top (string) literal, adds a `.' to it if the last non
+			 * '}' character isn't a `.', `?', or `!', and pushes this resulting
+			 * string.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 1) {
+					throw new VMException("Not enough operands on stack for operation add.period$");
+				}
+				Object o1 = stack.pop();
+
+				if (!(o1 instanceof String)) {
+					throw new VMException("Can only add a period to a string for add.period$");
+				}
+
+				String s = (String) o1;
+				Matcher m = p.matcher(s);
+
+				if (m.find()) {
+					StringBuffer sb = new StringBuffer();
+					m.appendReplacement(sb, m.group(1));
+					sb.append('.');
+					String group2 = m.group(2);
+					if (group2 != null)
+						sb.append(m.group(2));
+					stack.push(sb.toString());
+				} else {
+					stack.push(s);
+				}
+			}
+		});
+
+		buildInFunctions.put("call.type$", new BstFunction() {
+			/**
+			 * Executes the function whose name is the entry type of an entry.
+			 * For example if an entry is of type book, this function executes
+			 * the book function. When given as an argument to the ITERATE
+			 * command, call.type$ actually produces the output for the entries.
+			 * For an entry with an unknown type, it executes the function
+			 * default.type. Thus you should define (before the READ command)
+			 * one function for each standard entry type as well as a
+			 * default.type function.
+			 */
+			public void execute(BstEntry context) {
+
+				if (context == null) {
+					throw new VMException(
+						"Call.type$ can only be called from within a context (ITERATE or REVERSE).");
+				}
+				VM.this.execute(context.entry.getType().getName().toLowerCase(), context);
+			}
+		});
+
+		buildInFunctions.put("change.case$", new ChangeCaseFunction(this));
+
+		buildInFunctions.put("chr.to.int$", new BstFunction() {
+			/**
+			 * Pops the top (string) literal, makes sure it's a single
+			 * character, converts it to the corresponding ASCII integer, and
+			 * pushes this integer.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 1) {
+					throw new VMException("Not enough operands on stack for operation chr.to.int$");
+				}
+				Object o1 = stack.pop();
+
+				if (!(o1 instanceof String && ((String) o1).length() == 1)) {
+					throw new VMException("Can only perform chr.to.int$ on string with length 1");
+				}
+
+				String s = (String) o1;
+
+				stack.push(new Integer(s.charAt(0)));
+			}
+		});
+
+		buildInFunctions.put("cite$", new BstFunction() {
+			/**
+			 * Pushes the string that was the \cite-command argument for this
+			 * entry.
+			 */
+			public void execute(BstEntry context) {
+				stack.push(context.entry.getCiteKey());
+			}
+		});
+
+		buildInFunctions.put("duplicate$", new BstFunction() {
+			/**
+			 * Pops the top literal from the stack and pushes two copies of it.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 1) {
+					throw new VMException("Not enough operands on stack for operation duplicate$");
+				}
+				Object o1 = stack.pop();
+
+				stack.push(o1);
+				stack.push(o1);
+			}
+		});
+
+		buildInFunctions.put("empty$", new BstFunction() {
+			/**
+			 * Pops the top literal and pushes the integer 1 if it's a missing
+			 * field or a string having no non-white-space characters, 0
+			 * otherwise.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 1) {
+					throw new VMException("Not enough operands on stack for operation empty$");
+				}
+				Object o1 = stack.pop();
+
+				if (o1 == null) {
+					stack.push(VM.TRUE);
+					return;
+				}
+
+				if (!(o1 instanceof String)) {
+					throw new VMException("Operand does not match function empty$");
+				}
+
+				String s = (String) o1;
+
+				stack.push(s.trim().equals("") ? VM.TRUE : VM.FALSE);
+			}
+		});
+
+		buildInFunctions.put("format.name$", new FormatNameFunction(this));
+
+		buildInFunctions.put("if$", new BstFunction() {
+			/**
+			 * Pops the top three literals (they are two function literals and
+			 * an integer literal, in that order); if the integer is greater
+			 * than 0, it executes the second literal, else it executes the
+			 * first.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 3) {
+					throw new VMException("Not enough operands on stack for operation =");
+				}
+				Object f1 = stack.pop();
+				Object f2 = stack.pop();
+				Object i = stack.pop();
+
+				if (!(f1 instanceof Identifier || f1 instanceof Tree)
+					&& (f2 instanceof Identifier || f2 instanceof Tree) && (i instanceof Integer)) {
+					throw new VMException("Expecting two functions and an integer for if$.");
+				}
+
+				Object toExe;
+				if (((Integer) i).intValue() > 0) {
+					toExe = f2;
+				} else {
+					toExe = f1;
+				}
+				VM.this.executeInContext(toExe, context);
+			}
+		});
+
+		buildInFunctions.put("int.to.chr$", new BstFunction() {
+			/**
+			 * Pops the top (integer) literal, interpreted as the ASCII integer
+			 * value of a single character, converts it to the corresponding
+			 * single-character string, and pushes this string.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 1) {
+					throw new VMException("Not enough operands on stack for operation int.to.chr$");
+				}
+				Object o1 = stack.pop();
+
+				if (!(o1 instanceof Integer)) {
+					throw new VMException("Can only perform operation int.to.chr$ on an Integer");
+				}
+
+				Integer i = (Integer) o1;
+
+				stack.push(String.valueOf((char) i.intValue()));
+			}
+		});
+
+		buildInFunctions.put("int.to.str$", new BstFunction() {
+			/**
+			 * Pops the top (integer) literal, converts it to its (unique)
+			 * string equivalent, and pushes this string.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 1) {
+					throw new VMException("Not enough operands on stack for operation int.to.str$");
+				}
+				Object o1 = stack.pop();
+
+				if (!(o1 instanceof Integer)) {
+					throw new VMException(
+						"Can only transform an integer to an string using int.to.str$");
+				}
+
+				stack.push(((Integer) o1).toString());
+			}
+		});
+
+		buildInFunctions.put("missing$", new BstFunction() {
+			/**
+			 * Pops the top literal and pushes the integer 1 if it's a missing
+			 * field, 0 otherwise.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 1) {
+					throw new VMException("Not enough operands on stack for operation missing$");
+				}
+				Object o1 = stack.pop();
+
+				if (o1 == null) {
+					stack.push(VM.TRUE);
+					return;
+				}
+
+				if (!(o1 instanceof String)) {
+					warn("Not a string or missing field in operation missing$");
+					stack.push(VM.TRUE);
+					return;
+				}
+
+				stack.push(VM.FALSE);
+			}
+		});
+
+		buildInFunctions.put("newline$", new BstFunction() {
+			/**
+			 * Writes onto the bbl file what's accumulated in the output buffer.
+			 * It writes a blank line if and only if the output buffer is empty.
+			 * Since write$ does reasonable line breaking, you should use this
+			 * function only when you want a blank line or an explicit line
+			 * break.
+			 */
+			public void execute(BstEntry context) {
+				VM.this.bbl.append('\n');
+			}
+		});
+
+		buildInFunctions.put("num.names$", new BstFunction() {
+			/**
+			 * Pops the top (string) literal and pushes the number of names the
+			 * string represents one plus the number of occurrences of the
+			 * substring "and" (ignoring case differences) surrounded by
+			 * non-null white-space at the top brace level.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 1) {
+					throw new VMException("Not enough operands on stack for operation num.names$");
+				}
+				Object o1 = stack.pop();
+
+				if (!(o1 instanceof String)) {
+					throw new VMException("Need a string at the top of the stack for num.names$");
+				}
+				String s = (String) o1;
+
+				stack.push(new Integer(AuthorList.getAuthorList(s).size()));
+			}
+		});
+
+		buildInFunctions.put("pop$", new BstFunction() {
+			/**
+			 * Pops the top of the stack but doesn't print it; this gets rid of
+			 * an unwanted stack literal.
+			 */
+			public void execute(BstEntry context) {
+				stack.pop();
+			}
+		});
+
+		buildInFunctions.put("preamble$", new BstFunction() {
+			/**
+			 * The |built_in| function {\.{preamble\$}} pushes onto the stack
+			 * the concatenation of all the \.{preamble} strings read from the
+			 * database files. (or the empty string if there where none)
+			 * 
+			 * @PREAMBLE strings read from the database files.
+			 */
+			public void execute(BstEntry context) {
+				if (preamble != null) {
+					stack.push(preamble);
+				} else {
+					stack.push("");
+				}
+
+			}
+		});
+
+		/**
+		 * Pops the top (string) literal, removes nonalphanumeric characters
+		 * except for white-space characters and hyphens and ties (these all get
+		 * converted to a space), removes certain alphabetic characters
+		 * contained in the control sequences associated with a \special
+		 * character", and pushes the resulting string.
+		 */
+		buildInFunctions.put("purify$", new PurifyFunction(this));
+
+		buildInFunctions.put("quote$", new BstFunction() {
+			/**
+			 * Pushes the string consisting of the double-quote character.
+			 */
+			public void execute(BstEntry context) {
+				stack.push("\"");
+			}
+		});
+
+		buildInFunctions.put("skip$", new BstFunction() {
+			/**
+			 * Is a no-op.
+			 */
+			public void execute(BstEntry context) {
+				// Nothing to do! Yeah!
+			}
+		});
+
+		buildInFunctions.put("stack$", new BstFunction() {
+			/**
+			 * Pops and prints the whole stack; it's meant to be used for style
+			 * designers while debugging.
+			 */
+			public void execute(BstEntry context) {
+				while (!stack.empty()) {
+					System.out.println(stack.pop());
+				}
+			}
+		});
+
+		buildInFunctions.put("substring$", new BstFunction() {
+			/**
+			 * Pops the top three literals (they are the two integers literals
+			 * len and start, and a string literal, in that order). It pushes
+			 * the substring of the (at most) len consecutive characters
+			 * starting at the startth character (assuming 1-based indexing) if
+			 * start is positive, and ending at the start-th character
+			 * (including) from the end if start is negative (where the first
+			 * character from the end is the last character).
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 3) {
+					throw new VMException("Not enough operands on stack for operation substring$");
+				}
+				Object o1 = stack.pop();
+				Object o2 = stack.pop();
+				Object o3 = stack.pop();
+
+				if (!((o1 instanceof Integer) && (o2 instanceof Integer) && (o3 instanceof String))) {
+					throw new VMException("Expecting two integers and a string for substring$");
+				}
+
+				Integer len = (Integer) o1;
+				Integer start = (Integer) o2;
+
+				int lenI = len.intValue();
+				int startI = start.intValue();
+
+				if (lenI > Integer.MAX_VALUE / 2)
+					lenI = Integer.MAX_VALUE / 2;
+
+				if (startI > Integer.MAX_VALUE / 2)
+					startI = Integer.MAX_VALUE / 2;
+
+				if (startI < Integer.MIN_VALUE / 2)
+					startI = -Integer.MIN_VALUE / 2;
+
+				String s = (String) o3;
+
+				if (startI < 0) {
+					startI += s.length() + 1;
+					startI = Math.max(1, startI + 1 - lenI);
+				}
+				stack.push(s.substring(startI - 1, Math.min(startI - 1 + lenI, s.length())));
+			}
+		});
+
+		buildInFunctions.put("swap$", new BstFunction() {
+			/**
+			 * Swaps the top two literals on the stack. text.length$ Pops the
+			 * top (string) literal, and pushes the number of text char- acters
+			 * it contains, where an accented character (more precisely, a
+			 * \special character", defined in Section 4) counts as a single
+			 * text character, even if it's missing its matching right brace,
+			 * and where braces don't count as text characters.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 2) {
+					throw new VMException("Not enough operands on stack for operation swap$");
+				}
+				Object f1 = stack.pop();
+				Object f2 = stack.pop();
+
+				stack.push(f1);
+				stack.push(f2);
+			}
+		});
+
+		buildInFunctions.put("text.length$", new BstFunction() {
+			/**
+			 * text.length$ Pops the top (string) literal, and pushes the number
+			 * of text characters it contains, where an accented character (more
+			 * precisely, a "special character", defined in Section 4) counts as
+			 * a single text character, even if it's missing its matching right
+			 * brace, and where braces don't count as text characters.
+			 * 
+			 * From BibTeXing: For the purposes of counting letters in labels,
+			 * BibTEX considers everything contained inside the braces as a
+			 * single letter.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 1) {
+					throw new VMException("Not enough operands on stack for operation text.length$");
+				}
+				Object o1 = stack.pop();
+
+				if (!(o1 instanceof String)) {
+					throw new VMException("Can only perform operation on a string text.length$");
+				}
+
+				String s = (String) o1;
+				char[] c = s.toCharArray();
+				int result = 0;
+
+				// Comments from bibtex.web:
+
+				// sp_ptr := str_start[pop_lit1];
+				int i = 0;
+
+				// sp_end := str_start[pop_lit1+1];
+				int n = s.length();
+
+				// sp_brace_level := 0;
+				int braceLevel = 0;
+
+				// while (sp_ptr < sp_end) do begin
+				while (i < n) {
+					// incr(sp_ptr);
+					i++;
+					// if (str_pool[sp_ptr-1] = left_brace) then
+					// begin
+					if (c[i - 1] == '{') {
+						// incr(sp_brace_level);
+						braceLevel++;
+						// if ((sp_brace_level = 1) and (sp_ptr < sp_end)) then
+						if (braceLevel == 1 && i < n)
+							// if (str_pool[sp_ptr] = backslash) then
+							// begin
+							if (c[i] == '\\') {
+								// incr(sp_ptr); {skip over the |backslash|}
+								i++; // skip over backslash
+								// while ((sp_ptr < sp_end) and (sp_brace_level
+								// > 0)) do begin
+								while (i < n && braceLevel > 0) {
+									// if (str_pool[sp_ptr] = right_brace) then
+									if (c[i] == '}')
+										// decr(sp_brace_level)
+										braceLevel--;
+									// else if (str_pool[sp_ptr] = left_brace)
+									// then
+									else if (c[i] == '{')
+
+										// incr(sp_brace_level);
+										braceLevel++;
+									// incr(sp_ptr);
+									i++;
+									// end;
+								}
+								// incr(num_text_chars);
+								result++;
+								// end;
+							}
+						// end
+					}
+					// else if (str_pool[sp_ptr-1] = right_brace) then
+					// begin
+					else if (c[i - 1] == '}') {
+						// if (sp_brace_level > 0) then
+						if (braceLevel > 0)
+							// decr(sp_brace_level);
+							braceLevel--;
+						// end
+					}
+					// else
+					else
+						// incr(num_text_chars);
+						result++;
+				}
+				stack.push(new Integer(result));
+			}
+		});
+
+		/**
+		 * Pops the top two literals (the integer literal len and a string
+		 * literal, in that order). It pushes the substring of the (at most) len
+		 * consecutive text characters starting from the beginning of the
+		 * string. This function is similar to substring$, but this one
+		 * considers a \special character", even if it's missing its matching
+		 * right brace, to be a single text character (rather than however many
+		 * ASCII characters it actually comprises), and this function doesn't
+		 * consider braces to be text characters; furthermore, this function
+		 * appends any needed matching right braces.
+		 */
+		buildInFunctions.put("text.prefix$", new TextPrefixFunction(this));
+
+		buildInFunctions.put("top$", new BstFunction() {
+			/**
+			 * Pops and prints the top of the stack on the terminal and log
+			 * file. It's useful for debugging.
+			 */
+			public void execute(BstEntry context) {
+				System.out.println(stack.pop());
+			}
+		});
+
+		buildInFunctions.put("type$", new BstFunction() {
+			/**
+			 * Pushes the current entry's type (book, article, etc.), but pushes
+			 * the null string if the type is either unknown or undefined.
+			 */
+			public void execute(BstEntry context) {
+				stack.push(context.entry.getType().getName());
+			}
+		});
+
+		buildInFunctions.put("warning$", new BstFunction() {
+			/**
+			 * Pops the top (string) literal and prints it following a warning
+			 * message. This also increments a count of the number of warning
+			 * messages issued.
+			 */
+			int warning = 1;
+
+			public void execute(BstEntry context) {
+				out.println("Warning (#" + (warning++) + "): " + stack.pop());
+			}
+		});
+
+		buildInFunctions.put("while$", new BstFunction() {
+			/**
+			 * Pops the top two (function) literals, and keeps executing the
+			 * second as long as the (integer) literal left on the stack by
+			 * executing the first is greater than 0.
+			 */
+			public void execute(BstEntry context) {
+				if (stack.size() < 2) {
+					throw new VMException("Not enough operands on stack for operation while$");
+				}
+				Object f2 = stack.pop();
+				Object f1 = stack.pop();
+
+				if (!(f1 instanceof Identifier || f1 instanceof Tree)
+					&& (f2 instanceof Identifier || f2 instanceof Tree)) {
+					throw new VMException("Expecting two functions for while$.");
+				}
+
+				do {
+					VM.this.executeInContext(f1, context);
+
+					Object i = stack.pop();
+					if (!(i instanceof Integer)) {
+						throw new VMException(
+							"First parameter to while has to return an integer but was " + i);
+					}
+					if (((Integer) i).intValue() <= 0) {
+						break;
+					}
+					VM.this.executeInContext(f2, context);
+				} while (true);
+			}
+		});
+
+		buildInFunctions.put("width$", new WidthFunction(this));
+
+		buildInFunctions.put("write$", new BstFunction() {
+			/**
+			 * Pops the top (string) literal and writes it on the output buffer
+			 * (which will result in stuff being written onto the bbl file when
+			 * the buffer fills up).
+			 */
+			public void execute(BstEntry context) {
+				String s = (String) stack.pop();
+				System.out.println(s);
+				VM.this.bbl.append(s);
+			}
+		});
+
+	}
+
+	protected boolean assign(BstEntry context, Object o1, Object o2) {
+
+		if (!(o1 instanceof Identifier) || !(o2 instanceof String || o2 instanceof Integer))
+			throw new VMException("Invalid parameters");
+
+		String name = ((Identifier) o1).getName();
+
+		if (o2 instanceof String) {
+
+			if (context != null && context.strings.containsKey(name)) {
+				context.strings.put(name, (String) o2);
+				return true;
+			}
+
+			if (strings.containsKey(name)) {
+				strings.put(name, (String) o2);
+				return true;
+			}
+			return false;
+
+		}
+		if (o2 instanceof Integer) {
+			if (context != null && context.integers.containsKey(name)) {
+				context.integers.put(name, (Integer) o2);
+				return true;
+			}
+
+			if (integers.containsKey(name)) {
+				integers.put(name, (Integer) o2);
+				return true;
+			}
+			return false;
+		}
+		return false;
+	}
+
+	CommonTree tree;
+
+	private StringBuffer bbl;
+
+	String preamble;
+
+	public String run(BibtexDatabase db) {
+		preamble = db.getPreamble();
+		return run(db.getEntries());
+	}
+
+	public String run(Collection<BibtexEntry> bibtex) {
+
+		reset();
+
+		{ // Create entries
+			entries = new Vector<BstEntry>(bibtex.size());
+			ListIterator<BstEntry> i = entries.listIterator();
+			for (BibtexEntry entry : bibtex){
+				i.add(new BstEntry(entry));
+			}
+		}
+
+		// assert tree.getType() == Bst.COMMANDS;
+
+		// Go
+		for (int i = 0; i < tree.getChildCount(); i++) {
+			Tree child = tree.getChild(i);
+			switch (child.getType()) {
+			case BstParser.STRINGS:
+				strings(child);
+				break;
+			case BstParser.INTEGERS:
+				integers(child);
+				break;
+			case BstParser.FUNCTION:
+				function(child);
+				break;
+			case BstParser.EXECUTE:
+				execute(child);
+				break;
+			case BstParser.SORT:
+				sort(child);
+				break;
+			case BstParser.ITERATE:
+				iterate(child);
+				break;
+			case BstParser.REVERSE:
+				reverse(child);
+				break;
+			case BstParser.ENTRY:
+				entry(child);
+				break;
+			case BstParser.READ:
+				read();
+				break;
+			case BstParser.MACRO:
+				macro(child);
+				break;
+			}
+		}
+
+		return bbl.toString();
+	}
+
+	private void reset() {
+		bbl = new StringBuffer();
+
+		entries = null;
+
+		strings = new HashMap<String, String>();
+
+		integers = new HashMap<String, Integer>();
+		integers.put("entry.max$", new Integer(Integer.MAX_VALUE));
+		integers.put("global.max$", new Integer(Integer.MAX_VALUE));
+
+		functions = new HashMap<String, BstFunction>();
+		functions.putAll(buildInFunctions);
+
+		stack = new Stack<Object>();
+	}
+
+	/**
+	 * Dredges up from the database file the field values for each entry in the
+	 * list. It has no arguments. If a database entry doesn't have a value for a
+	 * field (and probably no database entry will have a value for every field),
+	 * that field variable is marked as missing for the entry.
+	 * 
+	 * We use null for the missing entry designator.
+	 * 
+	 * @param child
+	 */
+	private void read() {
+
+		Iterator<BstEntry> i = entries.iterator();
+		while (i.hasNext()) {
+			BstEntry e = i.next();
+
+			for (Map.Entry<String, String> mEntry : e.fields.entrySet()){
+				Object fieldValue = e.entry.getField(mEntry.getKey());
+
+				mEntry.setValue((fieldValue == null ? null : fieldValue.toString()));
+			}
+		}
+
+		i = entries.iterator();
+		while (i.hasNext()) {
+			BstEntry e = i.next();
+			if (!e.fields.containsKey("crossref")) {
+				e.fields.put("crossref", null);
+			}
+		}
+	}
+
+	/**
+	 * Defines a string macro. It has two arguments; the first is the macro's
+	 * name, which is treated like any other variable or function name, and the
+	 * second is its definition, which must be double-quote-delimited. You must
+	 * have one for each three-letter month abbreviation; in addition, you
+	 * should have one for common journal names. The user's database may
+	 * override any definition you define using this command. If you want to
+	 * define a string the user can't touch, use the FUNCTION command, which has
+	 * a compatible syntax.
+	 * 
+	 * @param child
+	 */
+	private void macro(Tree child) {
+		String name = child.getChild(0).getText();
+		String replacement = child.getChild(1).getText();
+		functions.put(name, new MacroFunction(replacement));
+	}
+
+	public class MacroFunction implements BstFunction {
+
+		String replacement;
+
+		public MacroFunction(String replacement) {
+			this.replacement = replacement;
+		}
+
+		public void execute(BstEntry context) {
+			VM.this.push(replacement);
+		}
+	}
+
+	/*
+	 * Declares the fields and entry variables. It has three arguments, each a
+	 * (possibly empty) list of variable names. The three lists are of: fields,
+	 * integer entry variables, and string entry variables. There is an
+	 * additional field that BibTEX automatically declares, crossref, used for
+	 * cross ref- erencing. And there is an additional string entry variable
+	 * automatically declared, sort.key$, used by the SORT command. Each of
+	 * these variables has a value for each entry on the list.
+	 */
+	private void entry(Tree child) {
+
+		{ // Fields first
+			Tree t = child.getChild(0);
+			// assert t.getType() == Bst.IDLIST;
+
+			for (int i = 0; i < t.getChildCount(); i++) {
+				String name = t.getChild(i).getText();
+
+				for (BstEntry entry : entries){
+					entry.fields.put(name, null);
+				}
+			}
+		}
+		{ // Integers
+			Tree t = child.getChild(1);
+			// assert t.getType() == Bst.IDLIST;
+
+			for (int i = 0; i < t.getChildCount(); i++) {
+				String name = t.getChild(i).getText();
+				
+				for (BstEntry entry : entries){
+					entry.integers.put(name, new Integer(0));
+				}
+			}
+		}
+		{ // Strings
+			Tree t = child.getChild(2);
+			// assert t.getType() == Bst.IDLIST;
+
+			for (int i = 0; i < t.getChildCount(); i++) {
+				String name = t.getChild(i).getText();
+				for (BstEntry entry : entries){
+					entry.strings.put(name, null);
+				}
+			}
+			for (BstEntry entry : entries){
+				entry.strings.put("sort.key$", null);
+			}
+		}
+	}
+
+	private void reverse(Tree child) {
+
+		BstFunction f = functions.get(child.getChild(0).getText());
+
+		ListIterator<BstEntry> i = entries.listIterator(entries.size());
+		while (i.hasPrevious()) {
+			f.execute(i.previous());
+		}
+	}
+
+	private void iterate(Tree child) {
+		BstFunction f = functions.get(child.getChild(0).getText());
+
+		Iterator<BstEntry> i = entries.iterator();
+		while (i.hasNext()) {
+			f.execute(i.next());
+		}
+	}
+
+	/**
+	 * Sorts the entry list using the values of the string entry variable
+	 * sort.key$. It has no arguments.
+	 * 
+	 * @param child
+	 */
+	private void sort(Tree child) {
+		Collections.sort(entries, new Comparator<BstEntry>() {
+			public int compare(BstEntry o1, BstEntry o2) {
+				return (o1.strings.get("sort.key$")).compareTo(o2.strings
+					.get("sort.key$"));
+			}
+		});
+	}
+
+	public void executeInContext(Object o, BstEntry context) {
+		if (o instanceof Tree) {
+			Tree t = (Tree) o;
+			new StackFunction(t).execute(context);
+		} else if (o instanceof Identifier) {
+			execute(((Identifier) o).getName(), context);
+		}
+	}
+
+	public void execute(Tree child) {
+		execute(child.getChild(0).getText(), null);
+	}
+
+	public class StackFunction implements BstFunction {
+
+		Tree tree;
+
+		public Tree getTree() {
+			return tree;
+		}
+
+		public StackFunction(Tree stack) {
+			// assert stack.getType() == Bst.STACK;
+			tree = stack;
+		}
+
+		public void execute(BstEntry context) {
+
+			for (int i = 0; i < tree.getChildCount(); i++) {
+
+				Tree c = tree.getChild(i);
+				try {
+
+					switch (c.getType()) {
+					case BstParser.STRING: {
+						String s = c.getText();
+						push(s.substring(1, s.length() - 1));
+					}
+						break;
+					case BstParser.INTEGER:
+						push(new Integer(Integer.parseInt(c.getText().substring(1))));
+						break;
+					case BstParser.QUOTED:
+						push(new Identifier(c.getText().substring(1)));
+						break;
+					case BstParser.STACK:
+						push(c);
+						break;
+					default:
+						VM.this.execute(c.getText(), context);
+					}
+				} catch (VMException e) {
+					if (file != null) {
+						System.err.println("ERROR " + e.getMessage() + " (" + file.getPath() + ":"
+							+ c.getLine() + ")");
+					} else {
+						System.err.println("ERROR " + e.getMessage() + " (" + c.getLine() + ")");
+					}
+					throw e;
+				}
+			}
+
+		}
+	}
+
+	private void push(Tree t) {
+		stack.push(t);
+	}
+
+	public void execute(String name, BstEntry context) {
+
+		if (context != null) {
+
+			if (context.fields.containsKey(name)) {
+				stack.push(context.fields.get(name));
+				return;
+			}
+			if (context.strings.containsKey(name)) {
+				stack.push(context.strings.get(name));
+				return;
+			}
+			if (context.integers.containsKey(name)) {
+				stack.push(context.integers.get(name));
+				return;
+			}
+		}
+		if (strings.containsKey(name)) {
+			stack.push(strings.get(name));
+			return;
+		}
+		if (integers.containsKey(name)) {
+			stack.push(integers.get(name));
+			return;
+		}
+
+		if (functions.containsKey(name)) {
+			functions.get(name).execute(context);
+			return;
+		}
+
+		throw new VMException("No matching identifier found: " + name);
+	}
+
+	private void function(Tree child) {
+		String name = child.getChild(0).getText();
+		Tree stack = child.getChild(1);
+		functions.put(name, new StackFunction(stack));
+
+	}
+
+	/**
+	 * Declares global integer variables. It has one argument, a list of
+	 * variable names. There are two such automatically-declared variables,
+	 * entry.max$ and global.max$, used for limiting the lengths of string vari-
+	 * ables. You may have any number of these commands, but a variable's
+	 * declaration must precede its use.
+	 * 
+	 * @param child
+	 */
+	private void integers(Tree child) {
+		Tree t = child.getChild(0);
+		// assert t.getType() == Bst.IDLIST;
+
+		for (int i = 0; i < t.getChildCount(); i++) {
+			String name = t.getChild(i).getText();
+			integers.put(name, new Integer(0));
+		}
+	}
+
+	/**
+	 * Declares global string variables. It has one argument, a list of variable
+	 * names. You may have any number of these commands, but a variable's
+	 * declaration must precede its use.
+	 * 
+	 * @param child
+	 */
+	private void strings(Tree child) {
+		Tree t = child.getChild(0);
+		// assert t.getType() == Bst.IDLIST;
+
+		for (int i = 0; i < t.getChildCount(); i++) {
+			String name = t.getChild(i).getText();
+			strings.put(name, null);
+		}
+	}
+
+	public class BstEntry {
+
+		public BstEntry(BibtexEntry e) {
+			this.entry = e;
+		}
+
+		BibtexEntry entry;
+
+		Map<String, String> strings = new HashMap<String, String>();
+
+		Map<String, String> fields = new HashMap<String, String>();
+
+		Map<String, Integer> integers = new HashMap<String, Integer>();
+
+		public Map<String, String> getFields() {
+			return fields;
+		}
+
+		public BibtexEntry getBibtexEntry() {
+			return entry;
+		}
+	}
+
+	Vector<BstEntry> entries;
+	
+	Map<String, String> strings = new HashMap<String, String>();
+	
+	Map<String, Integer> integers = new HashMap<String, Integer>();
+	
+	Map<String, BstFunction> functions = new HashMap<String, BstFunction>();
+	
+	Stack<Object> stack = new Stack<Object>();
+	
+	public void push(Integer integer) {
+		stack.push(integer);
+	}
+
+	public void push(String string) {
+		stack.push(string);
+	}
+
+	public void push(Identifier identifier) {
+		stack.push(identifier);
+	}
+
+	
+	  public Map<String, String> getStrings() { return strings; }
+	  
+	  public Map<String, Integer> getIntegers() { return integers; }
+	  
+	  public Vector<BstEntry> getEntries() { return entries; }
+	  
+	 public Map<String, BstFunction> getFunctions() { return functions; }
+
+	public Stack<Object> getStack() {
+		return stack;
+	}
+
+	public void warn(String string) {
+		System.out.println(string);
+	}
+
+}
diff --git a/src/java/net/sf/jabref/bst/VMException.java b/src/java/net/sf/jabref/bst/VMException.java
index 25afab0..883208e 100644
--- a/src/java/net/sf/jabref/bst/VMException.java
+++ b/src/java/net/sf/jabref/bst/VMException.java
@@ -1,24 +1,24 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.bst;
-
-public class VMException extends RuntimeException {
-
-	public VMException(String string) {
-		super(string);
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.bst;
+
+public class VMException extends RuntimeException {
+
+	public VMException(String string) {
+		super(string);
+	}
+
+}
diff --git a/src/java/net/sf/jabref/bst/Warn.java b/src/java/net/sf/jabref/bst/Warn.java
index a848dc2..b66db29 100644
--- a/src/java/net/sf/jabref/bst/Warn.java
+++ b/src/java/net/sf/jabref/bst/Warn.java
@@ -1,20 +1,20 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.bst;
-
-public interface Warn {
-	public void warn(String s);
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.bst;
+
+public interface Warn {
+	public void warn(String s);
+}
diff --git a/src/java/net/sf/jabref/bst/WidthFunction.java b/src/java/net/sf/jabref/bst/WidthFunction.java
index ba374ec..b839407 100644
--- a/src/java/net/sf/jabref/bst/WidthFunction.java
+++ b/src/java/net/sf/jabref/bst/WidthFunction.java
@@ -1,63 +1,63 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.bst;
-
-import java.util.Stack;
-
-import net.sf.jabref.bst.VM.BstEntry;
-import net.sf.jabref.bst.VM.BstFunction;
-
-
-
-/**
- * The |built_in| function {\.{width\$}} pops the top (string) literal and
- * pushes the integer that represents its width in units specified by the
- * |char_width| array. This function takes the literal literally; that is, it
- * assumes each character in the string is to be printed as is, regardless of
- * whether the character has a special meaning to \TeX, except that special
- * characters (even without their |right_brace|s) are handled specially. If the
- * literal isn't a string, it complains and pushes~0.
- * 
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class WidthFunction implements BstFunction {
-
-	VM vm;
-
-	public WidthFunction(VM vm) {
-		this.vm = vm;
-	}
-
-	public void execute(BstEntry context) {
-		Stack<Object> stack = vm.getStack();
-
-		if (stack.size() < 1) {
-			throw new VMException("Not enough operands on stack for operation width$");
-		}
-		Object o1 = stack.pop();
-
-		if (!(o1 instanceof String)) {
-			vm.warn("A string is needed for change.case$");
-			stack.push(new Integer(0));
-			return;
-		}
-		
-		stack.push(new Integer(BibtexWidth.width((String) o1, vm)));
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.bst;
+
+import java.util.Stack;
+
+import net.sf.jabref.bst.VM.BstEntry;
+import net.sf.jabref.bst.VM.BstFunction;
+
+
+
+/**
+ * The |built_in| function {\.{width\$}} pops the top (string) literal and
+ * pushes the integer that represents its width in units specified by the
+ * |char_width| array. This function takes the literal literally; that is, it
+ * assumes each character in the string is to be printed as is, regardless of
+ * whether the character has a special meaning to \TeX, except that special
+ * characters (even without their |right_brace|s) are handled specially. If the
+ * literal isn't a string, it complains and pushes~0.
+ * 
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class WidthFunction implements BstFunction {
+
+	VM vm;
+
+	public WidthFunction(VM vm) {
+		this.vm = vm;
+	}
+
+	public void execute(BstEntry context) {
+		Stack<Object> stack = vm.getStack();
+
+		if (stack.size() < 1) {
+			throw new VMException("Not enough operands on stack for operation width$");
+		}
+		Object o1 = stack.pop();
+
+		if (!(o1 instanceof String)) {
+			vm.warn("A string is needed for change.case$");
+			stack.push(new Integer(0));
+			return;
+		}
+		
+		stack.push(new Integer(BibtexWidth.width((String) o1, vm)));
+	}
+}
diff --git a/src/java/net/sf/jabref/collab/Change.java b/src/java/net/sf/jabref/collab/Change.java
index fd83df2..56f5a1e 100644
--- a/src/java/net/sf/jabref/collab/Change.java
+++ b/src/java/net/sf/jabref/collab/Change.java
@@ -1,84 +1,84 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexDatabase;
-
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.JComponent;
-import net.sf.jabref.undo.NamedCompound;
-
-public abstract class Change extends DefaultMutableTreeNode {
-
-  String name;
-  boolean accepted = true;
-
-  public Change() {
-    name = "";
-  }
-
-  public Change(String name) {
-    this.name = Globals.lang(name);
-  }
-
-  public String getName() {
-    return name;
-  }
-
-  public String toString() {
-    return getName();
-  }
-
-  public boolean isAccepted() {
-    return accepted;
-  }
-
-  public void setAccepted(boolean a) {
-    accepted = a;
-  }
-
-  /**
-   * This method is used to disable the "accept" box if the parent has been set to "not accepted".
-   * Thus the user can disable e.g. an entry change without having to disable all field changes.
-   * @return boolean false if the parent overrides by not being accepted.
-   */
-  public boolean isAcceptable() {
-    if ((getParent() != null) && (getParent() instanceof Change))
-      return ((Change)getParent()).isAccepted();
-    else
-      return true;
-  }
-
-  /**
-   * This method returns a JComponent detailing the nature of the change.
-   * @return JComponent
-   */
-  abstract JComponent description();
-
-  /**
-  * Perform the change. This method is responsible for adding a proper undo edit to
-  * the NamedCompound, so the change can be undone.
-  * @param panel BasePanel The tab where the database lives.
-  * @param secondary BibtexDatabase The "tmp" database for which the change
-  *   should also be made.
-  * @param undoEdit NamedCompound The compound to hold the undo edits.
-  * @return true if all changes were made, false if not all were accepted.
-  */
-  abstract boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit);
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.JComponent;
+import net.sf.jabref.undo.NamedCompound;
+
+public abstract class Change extends DefaultMutableTreeNode {
+
+  String name;
+  boolean accepted = true;
+
+  public Change() {
+    name = "";
+  }
+
+  public Change(String name) {
+    this.name = Globals.lang(name);
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public String toString() {
+    return getName();
+  }
+
+  public boolean isAccepted() {
+    return accepted;
+  }
+
+  public void setAccepted(boolean a) {
+    accepted = a;
+  }
+
+  /**
+   * This method is used to disable the "accept" box if the parent has been set to "not accepted".
+   * Thus the user can disable e.g. an entry change without having to disable all field changes.
+   * @return boolean false if the parent overrides by not being accepted.
+   */
+  public boolean isAcceptable() {
+    if ((getParent() != null) && (getParent() instanceof Change))
+      return ((Change)getParent()).isAccepted();
+    else
+      return true;
+  }
+
+  /**
+   * This method returns a JComponent detailing the nature of the change.
+   * @return JComponent
+   */
+  abstract JComponent description();
+
+  /**
+  * Perform the change. This method is responsible for adding a proper undo edit to
+  * the NamedCompound, so the change can be undone.
+  * @param panel BasePanel The tab where the database lives.
+  * @param secondary BibtexDatabase The "tmp" database for which the change
+  *   should also be made.
+  * @param undoEdit NamedCompound The compound to hold the undo edits.
+  * @return true if all changes were made, false if not all were accepted.
+  */
+  abstract boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit);
+
+}
diff --git a/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java b/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java
index 1715e19..5d7c260 100644
--- a/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java
+++ b/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java
@@ -1,155 +1,155 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import javax.swing.*;
-import javax.swing.tree.DefaultMutableTreeNode;
-import java.awt.BorderLayout;
-import net.sf.jabref.Globals;
-import java.awt.Insets;
-import javax.swing.event.TreeSelectionListener;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.ChangeEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.util.Enumeration;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.undo.NamedCompound;
-
-public class ChangeDisplayDialog extends JDialog implements TreeSelectionListener {
-
-    private BibtexDatabase secondary;
-    DefaultMutableTreeNode root;
-  JTree tree;
-  JPanel infoPanel = new JPanel(),
-      buttonPanel = new JPanel(),
-      infoBorder = new JPanel();
-  JButton ok = new JButton(Globals.lang("Ok")),
-      cancel = new JButton(Globals.lang("Cancel"));
-  JCheckBox cb = new JCheckBox(Globals.lang("Accept change"));
-  JLabel rootInfo = new JLabel(Globals.lang("Select the tree nodes to view and accept or reject changes")+".");
-  Change selected = null;
-  JComponent infoShown = null;
-    private boolean okPressed = false;
-
-  public ChangeDisplayDialog(JFrame owner, final BasePanel panel,
-                             BibtexDatabase secondary, final DefaultMutableTreeNode root) {
-    super(owner, Globals.lang("External changes"), true);
-      this.secondary = secondary;
-
-      // Just to be sure, put in an empty secondary base if none is given:
-      if (secondary == null) {
-          this.secondary = new BibtexDatabase();
-      }
-      this.root = root;
-    tree = new JTree(root);
-    tree.addTreeSelectionListener(this);
-    JSplitPane pane = new JSplitPane();
-    pane.setLeftComponent(new JScrollPane(tree));
-    pane.setRightComponent(infoBorder);
-
-    cb.setMargin(new Insets(2, 2, 2, 2));
-    cb.setEnabled(false);
-    infoPanel.setLayout(new BorderLayout());
-    infoBorder.setLayout(new BorderLayout());
-    infoBorder.setBorder(BorderFactory.createEtchedBorder());
-    infoBorder.add(infoPanel, BorderLayout.CENTER);
-    setInfo(rootInfo);
-    infoPanel.add(cb, BorderLayout.SOUTH);
-
-    buttonPanel.add(ok);
-    buttonPanel.add(cancel);
-
-    getContentPane().add(pane, BorderLayout.CENTER);
-    getContentPane().add(buttonPanel, BorderLayout.SOUTH);
-
-    cb.addChangeListener(new ChangeListener() {
-      public void stateChanged(ChangeEvent e) {
-        if (selected != null)
-          selected.setAccepted(cb.isSelected());
-      }
-    });
-    cancel.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        dispose();
-      }
-    });
-    ok.addActionListener(new ActionListener() {
-      
-	public void actionPerformed(ActionEvent e) {
-
-        // Perform all accepted changes:
-        // Store all edits in an Undoable object:
-        NamedCompound ce = new NamedCompound(Globals.lang("Merged external changes"));
-        @SuppressWarnings("unchecked")
-        Enumeration enumer = root.children();
-        boolean anyDisabled = false;
-        for (; enumer.hasMoreElements();) {
-            Change c = (Change)enumer.nextElement();
-            boolean allAccepted = false;
-            if (c.isAcceptable() && c.isAccepted())
-                allAccepted = c.makeChange(panel, ChangeDisplayDialog.this.secondary, ce);
-
-            if (!allAccepted)
-                anyDisabled = true;
-        }
-        ce.end();
-        panel.undoManager.addEdit(ce);
-        if (anyDisabled)
-            panel.markBaseChanged();
-        panel.setUpdatedExternally(false);
-        dispose();
-        okPressed = true;
-      }
-    });
-
-    pack();
-  }
-
-    public boolean isOkPressed() {
-        return okPressed;
-    }
-
-    private void setInfo(JComponent comp) {
-    if (infoShown != null)
-      infoPanel.remove(infoShown);
-    infoShown = comp;
-    infoPanel.add(infoShown, BorderLayout.CENTER);
-    infoPanel.revalidate();
-    infoPanel.repaint();
-  }
-
-  /**
-   * valueChanged
-   *
-   * @param e TreeSelectionEvent
-   */
-  public void valueChanged(TreeSelectionEvent e) {
-    Object o = tree.getLastSelectedPathComponent();
-    if (o instanceof Change) {
-      selected = (Change)o;
-      setInfo(selected.description());
-      cb.setSelected(selected.isAccepted());
-      cb.setEnabled(selected.isAcceptable());
-    } else {
-      setInfo(rootInfo);
-      selected = null;
-      cb.setEnabled(false);
-    }
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import javax.swing.*;
+import javax.swing.tree.DefaultMutableTreeNode;
+import java.awt.BorderLayout;
+import net.sf.jabref.Globals;
+import java.awt.Insets;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.ChangeEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+import java.util.Enumeration;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.undo.NamedCompound;
+
+public class ChangeDisplayDialog extends JDialog implements TreeSelectionListener {
+
+    private BibtexDatabase secondary;
+    DefaultMutableTreeNode root;
+  JTree tree;
+  JPanel infoPanel = new JPanel(),
+      buttonPanel = new JPanel(),
+      infoBorder = new JPanel();
+  JButton ok = new JButton(Globals.lang("Ok")),
+      cancel = new JButton(Globals.lang("Cancel"));
+  JCheckBox cb = new JCheckBox(Globals.lang("Accept change"));
+  JLabel rootInfo = new JLabel(Globals.lang("Select the tree nodes to view and accept or reject changes")+".");
+  Change selected = null;
+  JComponent infoShown = null;
+    private boolean okPressed = false;
+
+  public ChangeDisplayDialog(JFrame owner, final BasePanel panel,
+                             BibtexDatabase secondary, final DefaultMutableTreeNode root) {
+    super(owner, Globals.lang("External changes"), true);
+      this.secondary = secondary;
+
+      // Just to be sure, put in an empty secondary base if none is given:
+      if (secondary == null) {
+          this.secondary = new BibtexDatabase();
+      }
+      this.root = root;
+    tree = new JTree(root);
+    tree.addTreeSelectionListener(this);
+    JSplitPane pane = new JSplitPane();
+    pane.setLeftComponent(new JScrollPane(tree));
+    pane.setRightComponent(infoBorder);
+
+    cb.setMargin(new Insets(2, 2, 2, 2));
+    cb.setEnabled(false);
+    infoPanel.setLayout(new BorderLayout());
+    infoBorder.setLayout(new BorderLayout());
+    infoBorder.setBorder(BorderFactory.createEtchedBorder());
+    infoBorder.add(infoPanel, BorderLayout.CENTER);
+    setInfo(rootInfo);
+    infoPanel.add(cb, BorderLayout.SOUTH);
+
+    buttonPanel.add(ok);
+    buttonPanel.add(cancel);
+
+    getContentPane().add(pane, BorderLayout.CENTER);
+    getContentPane().add(buttonPanel, BorderLayout.SOUTH);
+
+    cb.addChangeListener(new ChangeListener() {
+      public void stateChanged(ChangeEvent e) {
+        if (selected != null)
+          selected.setAccepted(cb.isSelected());
+      }
+    });
+    cancel.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        dispose();
+      }
+    });
+    ok.addActionListener(new ActionListener() {
+      
+	public void actionPerformed(ActionEvent e) {
+
+        // Perform all accepted changes:
+        // Store all edits in an Undoable object:
+        NamedCompound ce = new NamedCompound(Globals.lang("Merged external changes"));
+        @SuppressWarnings("unchecked")
+        Enumeration enumer = root.children();
+        boolean anyDisabled = false;
+        for (; enumer.hasMoreElements();) {
+            Change c = (Change)enumer.nextElement();
+            boolean allAccepted = false;
+            if (c.isAcceptable() && c.isAccepted())
+                allAccepted = c.makeChange(panel, ChangeDisplayDialog.this.secondary, ce);
+
+            if (!allAccepted)
+                anyDisabled = true;
+        }
+        ce.end();
+        panel.undoManager.addEdit(ce);
+        if (anyDisabled)
+            panel.markBaseChanged();
+        panel.setUpdatedExternally(false);
+        dispose();
+        okPressed = true;
+      }
+    });
+
+    pack();
+  }
+
+    public boolean isOkPressed() {
+        return okPressed;
+    }
+
+    private void setInfo(JComponent comp) {
+    if (infoShown != null)
+      infoPanel.remove(infoShown);
+    infoShown = comp;
+    infoPanel.add(infoShown, BorderLayout.CENTER);
+    infoPanel.revalidate();
+    infoPanel.repaint();
+  }
+
+  /**
+   * valueChanged
+   *
+   * @param e TreeSelectionEvent
+   */
+  public void valueChanged(TreeSelectionEvent e) {
+    Object o = tree.getLastSelectedPathComponent();
+    if (o instanceof Change) {
+      selected = (Change)o;
+      setInfo(selected.description());
+      cb.setSelected(selected.isAccepted());
+      cb.setEnabled(selected.isAcceptable());
+    } else {
+      setInfo(rootInfo);
+      selected = null;
+      cb.setEnabled(false);
+    }
+  }
+}
diff --git a/src/java/net/sf/jabref/collab/ChangeScanner.java b/src/java/net/sf/jabref/collab/ChangeScanner.java
index c0f74de..f96ca3a 100644
--- a/src/java/net/sf/jabref/collab/ChangeScanner.java
+++ b/src/java/net/sf/jabref/collab/ChangeScanner.java
@@ -1,575 +1,575 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Vector;
-import java.util.ArrayList;
-
-import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import net.sf.jabref.*;
-import net.sf.jabref.export.FileActions;
-import net.sf.jabref.export.SaveException;
-import net.sf.jabref.export.SaveSession;
-import net.sf.jabref.groups.GroupTreeNode;
-import net.sf.jabref.imports.OpenDatabaseAction;
-import net.sf.jabref.imports.ParserResult;
-
-
-public class ChangeScanner extends Thread {
-
-    final double MATCH_THRESHOLD = 0.4;
-    final String[] sortBy = new String[] {"year", "author", "title" };
-    File f;
-    BibtexDatabase inMem, inTemp = null;
-    MetaData mdInMem, mdInTemp;
-    BasePanel panel;
-    JabRefFrame frame;
-
-    /**
-     * We create an ArrayList to hold the changes we find. These will be added in the form
-     * of UndoEdit objects. We instantiate these so that the changes found in the file on disk
-     * can be reproduced in memory by calling redo() on them. REDO, not UNDO!
-     */
-    //ArrayList changes = new ArrayList();
-    DefaultMutableTreeNode changes = new DefaultMutableTreeNode(Globals.lang("External changes"));
-
-    //  NamedCompound edit = new NamedCompound("Merged external changes")
-
-    public ChangeScanner(JabRefFrame frame, BasePanel bp) { //, BibtexDatabase inMem, MetaData mdInMem) {
-        panel = bp;
-        this.frame = frame;
-        this.inMem = bp.database();
-        this.mdInMem = bp.metaData();
-        // Set low priority:
-        setPriority(Thread.MIN_PRIORITY);
-    }
-
-    public void changeScan(File f) {
-        this.f = f;
-        start();
-    }
-
-    public void run() {
-        try {
-            //long startTime = System.currentTimeMillis();
-
-            // Parse the temporary file.
-            File tempFile = Globals.fileUpdateMonitor.getTempFile(panel.fileMonitorHandle());
-            ParserResult pr = OpenDatabaseAction.loadDatabase(tempFile,
-            Globals.prefs.get("defaultEncoding"));
-            inTemp = pr.getDatabase();
-            mdInTemp = pr.getMetaData();
-            // Parse the modified file.
-            pr = OpenDatabaseAction.loadDatabase(f, Globals.prefs.get("defaultEncoding"));
-            BibtexDatabase onDisk = pr.getDatabase();
-            MetaData mdOnDisk = pr.getMetaData();
-
-            // Sort both databases according to a common sort key.
-            EntryComparator comp = new EntryComparator(false, true, sortBy[2]);
-            comp = new EntryComparator(false, true, sortBy[1], comp);
-            comp = new EntryComparator(false, true, sortBy[0], comp);
-            EntrySorter sInTemp = inTemp.getSorter(comp);
-            comp = new EntryComparator(false, true, sortBy[2]);
-            comp = new EntryComparator(false, true, sortBy[1], comp);
-            comp = new EntryComparator(false, true, sortBy[0], comp);
-            EntrySorter sOnDisk = onDisk.getSorter(comp);
-            comp = new EntryComparator(false, true, sortBy[2]);
-            comp = new EntryComparator(false, true, sortBy[1], comp);
-            comp = new EntryComparator(false, true, sortBy[0], comp);
-            EntrySorter sInMem = inMem.getSorter(comp);
-
-            // Start looking at changes.
-            scanMetaData(mdInMem, mdInTemp, mdOnDisk);
-            scanPreamble(inMem, inTemp, onDisk);
-            scanStrings(inMem, inTemp, onDisk);
-
-
-            scanEntries(sInMem, sInTemp, sOnDisk);
-            
-            scanGroups(mdInMem, mdInTemp, mdOnDisk);
-
-
-        } catch (IOException ex) {
-            ex.printStackTrace();
-        }
-    }
-
-
-    public boolean changesFound() {
-        return changes.getChildCount() > 0;
-    }
-
-    public void displayResult(final DisplayResultCallback fup) {
-        if (changes.getChildCount() > 0) {
-            SwingUtilities.invokeLater(new Runnable() {
-                public void run() {
-                    ChangeDisplayDialog dial = new ChangeDisplayDialog(frame, panel, inTemp, changes);
-                    Util.placeDialog(dial, frame);
-                    dial.setVisible(true); // dial.show(); -> deprecated since 1.5
-                    fup.scanResultsResolved(dial.isOkPressed());
-                    if (dial.isOkPressed()) {
-                        // Overwrite the temp database:
-                        storeTempDatabase();
-                    }
-                }
-            });
-
-        } else {
-            JOptionPane.showMessageDialog(frame, Globals.lang("No actual changes found."),
-            Globals.lang("External changes"), JOptionPane.INFORMATION_MESSAGE);
-            fup.scanResultsResolved(true);
-        }
-    }
-
-    private void storeTempDatabase() {
-        new Thread(new Runnable() {
-            public void run() {
-                try {
-                    SaveSession ss = FileActions.saveDatabase(inTemp, mdInTemp,
-                        Globals.fileUpdateMonitor.getTempFile(panel.fileMonitorHandle()), Globals.prefs,
-                        false, false, panel.getEncoding(), true);
-                    ss.commit();
-                } catch (SaveException ex) {
-                    System.out.println("Problem updating tmp file after accepting external changes");
-                }
-
-
-            }
-        }).start();
-    }
-
-    private void scanMetaData(MetaData inMem, MetaData inTemp, MetaData onDisk) {
-        MetaDataChange mdc = new MetaDataChange(inMem, inTemp);
-        ArrayList<String> handledOnDisk = new ArrayList<String>();
-        // Loop through the metadata entries of the "tmp" database, looking for
-        // matches
-        for (Iterator i = inTemp.iterator(); i.hasNext();) {
-            String key = (String)i.next();
-            // See if the key is missing in the disk database:
-            Vector<String> vod = onDisk.getData(key);
-            if (vod == null) {
-                mdc.insertMetaDataRemoval(key);
-            }
-            else {
-                // Both exist. Check if they are different:
-                Vector<String> vit = inTemp.getData(key);
-                if (!vod.equals(vit))
-                    mdc.insertMetaDataChange(key, vod);
-                // Remember that we've handled this one:
-                handledOnDisk.add(key);
-            }
-        }
-
-        // See if there are unhandled keys in the disk database:
-        for (Iterator i = onDisk.iterator(); i.hasNext();) {
-            String key = (String)i.next();
-            if (!handledOnDisk.contains(key)) {
-                mdc.insertMetaDataAddition(key, onDisk.getData(key));
-            }
-        }
-
-        if (mdc.getChangeCount() > 0)
-            changes.add(mdc);
-    }
-
-
-    private void scanEntries(EntrySorter mem, EntrySorter tmp, EntrySorter disk) {
-
-        // Create pointers that are incremented as the entries of each base are used in
-        // successive order from the beginning. Entries "further down" in the "disk" base
-        // can also be matched.
-        int piv1 = 0, piv2 = 0;
-
-        // Create a HashSet where we can put references to entry numbers in the "disk"
-        // database that we have matched. This is to avoid matching them twice.
-        HashSet<String> used = new HashSet<String>(disk.getEntryCount());
-        HashSet<Integer> notMatched = new HashSet<Integer>(tmp.getEntryCount());
-
-        // Loop through the entries of the "tmp" database, looking for exact matches in the "disk" one.
-        // We must finish scanning for exact matches before looking for near matches, to avoid an exact
-        // match being "stolen" from another entry.
-        mainLoop: for (piv1=0; piv1<tmp.getEntryCount(); piv1++) {
-
-            // First check if the similarly placed entry in the other base matches exactly.
-            double comp = -1;
-            // (if there are not any entries left in the "disk" database, comp will stay at -1,
-            // and this entry will be marked as nonmatched).
-            if (!used.contains(""+piv2) && (piv2<disk.getEntryCount())) {
-                comp = DuplicateCheck.compareEntriesStrictly(tmp.getEntryAt(piv1), disk.getEntryAt(piv2));
-            }
-            if (comp > 1) {
-                used.add(""+piv2);
-                piv2++;
-                continue mainLoop;
-            }
-
-            // No? Then check if another entry matches exactly.
-            if (piv2 < disk.getEntryCount()-1) {
-                for (int i = piv2+1; i < disk.getEntryCount(); i++) {
-                    if (!used.contains(""+i))
-                        comp = DuplicateCheck.compareEntriesStrictly(tmp.getEntryAt(piv1), disk.getEntryAt(i));
-                    else
-                        comp = -1;
-
-                    if (comp > 1) {
-                        used.add("" + i);
-                        continue mainLoop;
-                    }
-                }
-            }
-
-            // No? Add this entry to the list of nonmatched entries.
-            notMatched.add(new Integer(piv1));
-        }
-
-
-        // Now we've found all exact matches, look through the remaining entries, looking
-        // for close matches.
-        if (notMatched.size() > 0) {
-
-            for (Iterator<Integer> it=notMatched.iterator(); it.hasNext();) {
-
-                Integer integ = it.next();
-                piv1 = integ.intValue();
-
-
-                // These two variables will keep track of which entry most closely matches the
-                // one we're looking at, in case none matches completely.
-                int bestMatchI = -1;
-                double bestMatch = 0;
-                double comp = -1;
-
-                if (piv2 < disk.getEntryCount()-1) {
-                    for (int i = piv2; i < disk.getEntryCount(); i++) {
-                        if (!used.contains(""+i)) {
-                            comp = DuplicateCheck.compareEntriesStrictly(tmp.getEntryAt(piv1),
-                            disk.getEntryAt(i));
-                        }
-                        else
-                            comp = -1;
-
-                        if (comp > bestMatch) {
-                            bestMatch = comp;
-                            bestMatchI = i;
-                        }
-                    }
-                }
-
-                if (bestMatch > MATCH_THRESHOLD) {
-                    used.add(""+bestMatchI);
-                    it.remove();
-
-                    EntryChange ec = new EntryChange(bestFit(tmp, mem, piv1), tmp.getEntryAt(piv1),
-                    disk.getEntryAt(bestMatchI));
-                    changes.add(ec);
-
-                    // Create an undo edit to represent this change:
-                    //NamedCompound ce = new NamedCompound("Modified entry");
-                    //ce.addEdit(new UndoableRemoveEntry(inMem, disk.getEntryAt(bestMatchI), panel));
-                    //ce.addEdit(new UndoableInsertEntry(inMem, tmp.getEntryAt(piv1), panel));
-                    //ce.end();
-                    //changes.add(ce);
-
-                    //System.out.println("Possible match for entry:");
-                    //System.out.println("----------------------------------------------");
-
-                }
-                else {
-                    EntryDeleteChange ec = new EntryDeleteChange(bestFit(tmp, mem, piv1), tmp.getEntryAt(piv1));
-                    changes.add(ec);
-          /*NamedCompound ce = new NamedCompound("Removed entry");
-          ce.addEdit(new UndoableInsertEntry(inMem, tmp.getEntryAt(piv1), panel));
-          ce.end();
-          changes.add(ce);*/
-
-                }
-
-            }
-
-        }
-
-        // Finally, look if there are still untouched entries in the disk database. These
-        // mayhave been added.
-        if (used.size() < disk.getEntryCount()) {
-            for (int i=0; i<disk.getEntryCount(); i++) {
-                if (!used.contains(""+i)) {
-
-                    // See if there is an identical dupe in the mem database:
-                    boolean hasAlready = false;
-                    for (int j = 0; j < mem.getEntryCount(); j++) {
-                        if (DuplicateCheck.compareEntriesStrictly(mem.getEntryAt(j),
-                            disk.getEntryAt(i)) >= 1) {
-                            hasAlready = true;
-                            break;
-                        }
-                    }
-                    if (!hasAlready) {
-                        EntryAddChange ec = new EntryAddChange(disk.getEntryAt(i));
-                        changes.add(ec);
-                    }
-          /*NamedCompound ce = new NamedCompound("Added entry");
-          ce.addEdit(new UndoableRemoveEntry(inMem, disk.getEntryAt(i), panel));
-          ce.end();
-          changes.add(ce);*/
-                }
-            }
-            //System.out.println("Suspected new entries in file: "+(disk.getEntryCount()-used.size()));
-        }
-    }
-
-    /**
-     * Finds the entry in neu best fitting the specified entry in old. If no entries get a score
-     * above zero, an entry is still returned.
-     * @param old EntrySorter
-     * @param neu EntrySorter
-     * @param index int
-     * @return BibtexEntry
-     */
-    private BibtexEntry bestFit(EntrySorter old, EntrySorter neu, int index) {
-        double comp = -1;
-        int found = 0;
-        loop: for (int i=0; i<neu.getEntryCount(); i++) {
-            double res = DuplicateCheck.compareEntriesStrictly(old.getEntryAt(index),
-            neu.getEntryAt(i));
-            if (res > comp) {
-                comp = res;
-                found = i;
-            }
-            if (comp > 1)
-                break loop;
-        }
-        return neu.getEntryAt(found);
-    }
-
-    private void scanPreamble(BibtexDatabase inMem, BibtexDatabase onTmp, BibtexDatabase onDisk) {
-        String mem = inMem.getPreamble(),
-        tmp = onTmp.getPreamble(),
-        disk = onDisk.getPreamble();
-        if (tmp != null) {
-            if ((disk == null) || !tmp.equals(disk))
-                changes.add(new PreambleChange(tmp, mem, disk));
-        }
-        else if ((disk != null) && !disk.equals("")) {
-            changes.add(new PreambleChange(tmp, mem, disk));
-        }
-    }
-
-    private void scanStrings(BibtexDatabase inMem, BibtexDatabase onTmp, BibtexDatabase onDisk) {
-        int nTmp = onTmp.getStringCount(),
-        nDisk = onDisk.getStringCount();
-        if ((nTmp == 0) && (nDisk == 0))
-            return;
-
-        HashSet<Object> used = new HashSet<Object>();
-        HashSet<Object> usedInMem = new HashSet<Object>();
-        HashSet<String> notMatched = new HashSet<String>(onTmp.getStringCount());
-
-        // First try to match by string names.
-        //int piv2 = -1;
-        mainLoop: for (String key : onTmp.getStringKeySet()){
-            BibtexString tmp = onTmp.getString(key);
-
-            //      for (int j=piv2+1; j<nDisk; j++)
-            for (String diskId : onDisk.getStringKeySet()){
-                if (!used.contains(diskId)) {
-                    BibtexString disk = onDisk.getString(diskId);
-                    if (disk.getName().equals(tmp.getName())) {
-                        // We have found a string with a matching name.
-                        if ((tmp.getContent() != null) && !tmp.getContent().equals(disk.getContent())) {
-                            // But they have nonmatching contents, so we've found a change.
-                            BibtexString mem = findString(inMem, tmp.getName(), usedInMem);
-                            if (mem != null)
-                                changes.add(new StringChange(mem, tmp, tmp.getName(),
-                                mem.getContent(),
-                                tmp.getContent(), disk.getContent()));
-                            else
-                                changes.add(new StringChange(null, tmp, tmp.getName(), null, tmp.getContent(), disk.getContent()));
-                        }
-                        used.add(diskId);
-                        //if (j==piv2)
-                        //  piv2++;
-                        continue mainLoop;
-                    }
-
-                }
-            }
-            // If we get here, there was no match for this string.
-            notMatched.add(tmp.getId());
-        }
-
-        // See if we can detect a name change for those entries that we couldn't match.
-        if (notMatched.size() > 0) {
-            for (Iterator<String> i = notMatched.iterator(); i.hasNext();){
-                BibtexString tmp = onTmp.getString(i.next());
-
-                // If we get to this point, we found no string with matching name. See if we
-                // can find one with matching content.
-                for (String diskId : onDisk.getStringKeySet()){
-
-                	if (!used.contains(diskId)) {
-                        BibtexString disk = onDisk.getString(diskId);
-
-                        if (disk.getContent().equals(tmp.getContent())) {
-                            // We have found a string with the same content. It cannot have the same
-                            // name, or we would have found it above.
-
-                            // Try to find the matching one in memory:
-                            BibtexString bsMem = null;
-                            
-                            for (String memId : inMem.getStringKeySet()){
-                                BibtexString bsMem_cand = inMem.getString(memId);
-                                if (bsMem_cand.getContent().equals(disk.getContent()) &&
-                                !usedInMem.contains(memId)) {
-                                    usedInMem.add(memId);
-                                    bsMem = bsMem_cand;
-                                    break;
-                                }
-                            }
-
-                            changes.add(new StringNameChange(bsMem, tmp, bsMem.getName(),
-                            tmp.getName(), disk.getName(),
-                            tmp.getContent()));
-                            i.remove();
-                            used.add(diskId);
-
-                        }
-                    }
-                }
-            }
-        }
-
-        if (notMatched.size() > 0) {
-            // Still one or more non-matched strings. So they must have been removed.
-            for (Iterator<String> i = notMatched.iterator(); i.hasNext(); ) {
-                String nmId = i.next();
-                BibtexString tmp = onTmp.getString(nmId);
-                BibtexString mem = findString(inMem, tmp.getName(), usedInMem);
-                if (mem != null) { // The removed string is not removed from the mem version.
-                    changes.add(new StringRemoveChange(tmp, tmp, mem));
-                }
-            }
-        }
-
-
-        // Finally, see if there are remaining strings in the disk database. They
-        // must have been added.
-        for (Iterator<String> i=onDisk.getStringKeySet().iterator(); i.hasNext();) {
-            String diskId = i.next();
-            if (!used.contains(diskId)) {
-                BibtexString disk = onDisk.getString(diskId);
-                //System.out.println(disk.getName());
-                used.add(diskId);
-                changes.add(new StringAddChange(disk));
-            }
-        }
-    }
-
-    private BibtexString findString(BibtexDatabase base, String name, HashSet<Object> used) {
-        if (!base.hasStringLabel(name))
-            return null;
-        for (Iterator<String> i=base.getStringKeySet().iterator(); i.hasNext();) {
-            String key = i.next();
-            BibtexString bs = base.getString(key);
-            if (bs.getName().equals(name) && !used.contains(key)) {
-                used.add(key);
-                return bs;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * This method only detects wheter a change took place or not. It does not
-     * determine the type of change. This would be possible, but difficult to do
-     * properly, so I rather only report the change.
-     */
-    public void scanGroups(MetaData inMem, MetaData onTmp, MetaData onDisk) {
-        final GroupTreeNode groupsTmp = onTmp.getGroups();
-        final GroupTreeNode groupsDisk = onDisk.getGroups();
-        if (groupsTmp == null && groupsDisk == null)
-            return;
-        if ((groupsTmp != null && groupsDisk == null)
-                || (groupsTmp == null && groupsDisk != null)) {
-            changes.add(new GroupChange(groupsDisk, groupsTmp));
-            return;
-        }
-        if (groupsTmp.equals(groupsDisk))
-            return;
-        changes.add(new GroupChange(groupsDisk, groupsTmp));
-        return;
-
-//
-//        if (((vOnTmp == null) || (vOnTmp.size()==0)) && ((vOnDisk == null) || (vOnDisk.size()==0))) {
-//            // No groups defined in either the tmp or disk version.
-//            return;
-//        }
-//
-//        // To avoid checking for null all the time, make empty vectors to replace null refs. We clone
-//        // non-null vectors so we can remove the elements as we finish with them.
-//        if (vOnDisk == null)
-//            vOnDisk = new Vector(0);
-//        else
-//            vOnDisk = (Vector)vOnDisk.clone();
-//        if (vOnTmp == null)
-//            vOnTmp = new Vector(0);
-//        else
-//            vOnTmp = (Vector)vOnTmp.clone();
-//        if (vInMem == null)
-//            vInMem = new Vector(0);
-//        else
-//            vInMem = (Vector)vInMem.clone();
-//
-//        // If the tmp version has groups, iterate through these and compare with disk version:
-//        while (vOnTmp.size() >= 1) {
-//            AbstractGroup group = (AbstractGroup)vOnTmp.firstElement();
-//            vOnTmp.removeElementAt(0);
-//            int pos = GroupSelector.findGroupByName(vOnDisk,group.getName());
-//            if (pos == -1) {
-//                // Couldn't find the group.
-//                changes.add(new GroupAddOrRemove(group, false));
-//            } else {
-//                AbstractGroup diskGroup = (AbstractGroup)vOnDisk.elementAt(pos);
-//
-//                if (!diskGroup.equals(group)) {
-//                    // Group has changed.
-//                    changes.add(new GroupChange(inMem, group, diskGroup));
-//                }
-//
-//                // Remove this group, since it's been accounted for.
-//                vOnDisk.remove(pos);
-//            }
-//        }
-//
-//        // If there are entries left in the disk version, these must have been added.
-//        while (vOnDisk.size() >= 1) {
-//            AbstractGroup group = (AbstractGroup)vOnDisk.firstElement();
-//            vOnDisk.removeElementAt(0);
-//            changes.add(new GroupAddOrRemove(group, true));
-//        }
-    }
-
-
-    public static interface DisplayResultCallback {
-        public void scanResultsResolved(boolean resolved);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Vector;
+import java.util.ArrayList;
+
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import net.sf.jabref.*;
+import net.sf.jabref.export.FileActions;
+import net.sf.jabref.export.SaveException;
+import net.sf.jabref.export.SaveSession;
+import net.sf.jabref.groups.GroupTreeNode;
+import net.sf.jabref.imports.OpenDatabaseAction;
+import net.sf.jabref.imports.ParserResult;
+
+
+public class ChangeScanner extends Thread {
+
+    final double MATCH_THRESHOLD = 0.4;
+    final String[] sortBy = new String[] {"year", "author", "title" };
+    File f;
+    BibtexDatabase inMem, inTemp = null;
+    MetaData mdInMem, mdInTemp;
+    BasePanel panel;
+    JabRefFrame frame;
+
+    /**
+     * We create an ArrayList to hold the changes we find. These will be added in the form
+     * of UndoEdit objects. We instantiate these so that the changes found in the file on disk
+     * can be reproduced in memory by calling redo() on them. REDO, not UNDO!
+     */
+    //ArrayList changes = new ArrayList();
+    DefaultMutableTreeNode changes = new DefaultMutableTreeNode(Globals.lang("External changes"));
+
+    //  NamedCompound edit = new NamedCompound("Merged external changes")
+
+    public ChangeScanner(JabRefFrame frame, BasePanel bp) { //, BibtexDatabase inMem, MetaData mdInMem) {
+        panel = bp;
+        this.frame = frame;
+        this.inMem = bp.database();
+        this.mdInMem = bp.metaData();
+        // Set low priority:
+        setPriority(Thread.MIN_PRIORITY);
+    }
+
+    public void changeScan(File f) {
+        this.f = f;
+        start();
+    }
+
+    public void run() {
+        try {
+            //long startTime = System.currentTimeMillis();
+
+            // Parse the temporary file.
+            File tempFile = Globals.fileUpdateMonitor.getTempFile(panel.fileMonitorHandle());
+            ParserResult pr = OpenDatabaseAction.loadDatabase(tempFile,
+            Globals.prefs.get("defaultEncoding"));
+            inTemp = pr.getDatabase();
+            mdInTemp = pr.getMetaData();
+            // Parse the modified file.
+            pr = OpenDatabaseAction.loadDatabase(f, Globals.prefs.get("defaultEncoding"));
+            BibtexDatabase onDisk = pr.getDatabase();
+            MetaData mdOnDisk = pr.getMetaData();
+
+            // Sort both databases according to a common sort key.
+            EntryComparator comp = new EntryComparator(false, true, sortBy[2]);
+            comp = new EntryComparator(false, true, sortBy[1], comp);
+            comp = new EntryComparator(false, true, sortBy[0], comp);
+            EntrySorter sInTemp = inTemp.getSorter(comp);
+            comp = new EntryComparator(false, true, sortBy[2]);
+            comp = new EntryComparator(false, true, sortBy[1], comp);
+            comp = new EntryComparator(false, true, sortBy[0], comp);
+            EntrySorter sOnDisk = onDisk.getSorter(comp);
+            comp = new EntryComparator(false, true, sortBy[2]);
+            comp = new EntryComparator(false, true, sortBy[1], comp);
+            comp = new EntryComparator(false, true, sortBy[0], comp);
+            EntrySorter sInMem = inMem.getSorter(comp);
+
+            // Start looking at changes.
+            scanMetaData(mdInMem, mdInTemp, mdOnDisk);
+            scanPreamble(inMem, inTemp, onDisk);
+            scanStrings(inMem, inTemp, onDisk);
+
+
+            scanEntries(sInMem, sInTemp, sOnDisk);
+            
+            scanGroups(mdInMem, mdInTemp, mdOnDisk);
+
+
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+
+    public boolean changesFound() {
+        return changes.getChildCount() > 0;
+    }
+
+    public void displayResult(final DisplayResultCallback fup) {
+        if (changes.getChildCount() > 0) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    ChangeDisplayDialog dial = new ChangeDisplayDialog(frame, panel, inTemp, changes);
+                    Util.placeDialog(dial, frame);
+                    dial.setVisible(true); // dial.show(); -> deprecated since 1.5
+                    fup.scanResultsResolved(dial.isOkPressed());
+                    if (dial.isOkPressed()) {
+                        // Overwrite the temp database:
+                        storeTempDatabase();
+                    }
+                }
+            });
+
+        } else {
+            JOptionPane.showMessageDialog(frame, Globals.lang("No actual changes found."),
+            Globals.lang("External changes"), JOptionPane.INFORMATION_MESSAGE);
+            fup.scanResultsResolved(true);
+        }
+    }
+
+    private void storeTempDatabase() {
+        new Thread(new Runnable() {
+            public void run() {
+                try {
+                    SaveSession ss = FileActions.saveDatabase(inTemp, mdInTemp,
+                        Globals.fileUpdateMonitor.getTempFile(panel.fileMonitorHandle()), Globals.prefs,
+                        false, false, panel.getEncoding(), true);
+                    ss.commit();
+                } catch (SaveException ex) {
+                    System.out.println("Problem updating tmp file after accepting external changes");
+                }
+
+
+            }
+        }).start();
+    }
+
+    private void scanMetaData(MetaData inMem, MetaData inTemp, MetaData onDisk) {
+        MetaDataChange mdc = new MetaDataChange(inMem, inTemp);
+        ArrayList<String> handledOnDisk = new ArrayList<String>();
+        // Loop through the metadata entries of the "tmp" database, looking for
+        // matches
+        for (Iterator i = inTemp.iterator(); i.hasNext();) {
+            String key = (String)i.next();
+            // See if the key is missing in the disk database:
+            Vector<String> vod = onDisk.getData(key);
+            if (vod == null) {
+                mdc.insertMetaDataRemoval(key);
+            }
+            else {
+                // Both exist. Check if they are different:
+                Vector<String> vit = inTemp.getData(key);
+                if (!vod.equals(vit))
+                    mdc.insertMetaDataChange(key, vod);
+                // Remember that we've handled this one:
+                handledOnDisk.add(key);
+            }
+        }
+
+        // See if there are unhandled keys in the disk database:
+        for (Iterator i = onDisk.iterator(); i.hasNext();) {
+            String key = (String)i.next();
+            if (!handledOnDisk.contains(key)) {
+                mdc.insertMetaDataAddition(key, onDisk.getData(key));
+            }
+        }
+
+        if (mdc.getChangeCount() > 0)
+            changes.add(mdc);
+    }
+
+
+    private void scanEntries(EntrySorter mem, EntrySorter tmp, EntrySorter disk) {
+
+        // Create pointers that are incremented as the entries of each base are used in
+        // successive order from the beginning. Entries "further down" in the "disk" base
+        // can also be matched.
+        int piv1 = 0, piv2 = 0;
+
+        // Create a HashSet where we can put references to entry numbers in the "disk"
+        // database that we have matched. This is to avoid matching them twice.
+        HashSet<String> used = new HashSet<String>(disk.getEntryCount());
+        HashSet<Integer> notMatched = new HashSet<Integer>(tmp.getEntryCount());
+
+        // Loop through the entries of the "tmp" database, looking for exact matches in the "disk" one.
+        // We must finish scanning for exact matches before looking for near matches, to avoid an exact
+        // match being "stolen" from another entry.
+        mainLoop: for (piv1=0; piv1<tmp.getEntryCount(); piv1++) {
+
+            // First check if the similarly placed entry in the other base matches exactly.
+            double comp = -1;
+            // (if there are not any entries left in the "disk" database, comp will stay at -1,
+            // and this entry will be marked as nonmatched).
+            if (!used.contains(""+piv2) && (piv2<disk.getEntryCount())) {
+                comp = DuplicateCheck.compareEntriesStrictly(tmp.getEntryAt(piv1), disk.getEntryAt(piv2));
+            }
+            if (comp > 1) {
+                used.add(""+piv2);
+                piv2++;
+                continue mainLoop;
+            }
+
+            // No? Then check if another entry matches exactly.
+            if (piv2 < disk.getEntryCount()-1) {
+                for (int i = piv2+1; i < disk.getEntryCount(); i++) {
+                    if (!used.contains(""+i))
+                        comp = DuplicateCheck.compareEntriesStrictly(tmp.getEntryAt(piv1), disk.getEntryAt(i));
+                    else
+                        comp = -1;
+
+                    if (comp > 1) {
+                        used.add("" + i);
+                        continue mainLoop;
+                    }
+                }
+            }
+
+            // No? Add this entry to the list of nonmatched entries.
+            notMatched.add(new Integer(piv1));
+        }
+
+
+        // Now we've found all exact matches, look through the remaining entries, looking
+        // for close matches.
+        if (notMatched.size() > 0) {
+
+            for (Iterator<Integer> it=notMatched.iterator(); it.hasNext();) {
+
+                Integer integ = it.next();
+                piv1 = integ.intValue();
+
+
+                // These two variables will keep track of which entry most closely matches the
+                // one we're looking at, in case none matches completely.
+                int bestMatchI = -1;
+                double bestMatch = 0;
+                double comp = -1;
+
+                if (piv2 < disk.getEntryCount()-1) {
+                    for (int i = piv2; i < disk.getEntryCount(); i++) {
+                        if (!used.contains(""+i)) {
+                            comp = DuplicateCheck.compareEntriesStrictly(tmp.getEntryAt(piv1),
+                            disk.getEntryAt(i));
+                        }
+                        else
+                            comp = -1;
+
+                        if (comp > bestMatch) {
+                            bestMatch = comp;
+                            bestMatchI = i;
+                        }
+                    }
+                }
+
+                if (bestMatch > MATCH_THRESHOLD) {
+                    used.add(""+bestMatchI);
+                    it.remove();
+
+                    EntryChange ec = new EntryChange(bestFit(tmp, mem, piv1), tmp.getEntryAt(piv1),
+                    disk.getEntryAt(bestMatchI));
+                    changes.add(ec);
+
+                    // Create an undo edit to represent this change:
+                    //NamedCompound ce = new NamedCompound("Modified entry");
+                    //ce.addEdit(new UndoableRemoveEntry(inMem, disk.getEntryAt(bestMatchI), panel));
+                    //ce.addEdit(new UndoableInsertEntry(inMem, tmp.getEntryAt(piv1), panel));
+                    //ce.end();
+                    //changes.add(ce);
+
+                    //System.out.println("Possible match for entry:");
+                    //System.out.println("----------------------------------------------");
+
+                }
+                else {
+                    EntryDeleteChange ec = new EntryDeleteChange(bestFit(tmp, mem, piv1), tmp.getEntryAt(piv1));
+                    changes.add(ec);
+          /*NamedCompound ce = new NamedCompound("Removed entry");
+          ce.addEdit(new UndoableInsertEntry(inMem, tmp.getEntryAt(piv1), panel));
+          ce.end();
+          changes.add(ce);*/
+
+                }
+
+            }
+
+        }
+
+        // Finally, look if there are still untouched entries in the disk database. These
+        // mayhave been added.
+        if (used.size() < disk.getEntryCount()) {
+            for (int i=0; i<disk.getEntryCount(); i++) {
+                if (!used.contains(""+i)) {
+
+                    // See if there is an identical dupe in the mem database:
+                    boolean hasAlready = false;
+                    for (int j = 0; j < mem.getEntryCount(); j++) {
+                        if (DuplicateCheck.compareEntriesStrictly(mem.getEntryAt(j),
+                            disk.getEntryAt(i)) >= 1) {
+                            hasAlready = true;
+                            break;
+                        }
+                    }
+                    if (!hasAlready) {
+                        EntryAddChange ec = new EntryAddChange(disk.getEntryAt(i));
+                        changes.add(ec);
+                    }
+          /*NamedCompound ce = new NamedCompound("Added entry");
+          ce.addEdit(new UndoableRemoveEntry(inMem, disk.getEntryAt(i), panel));
+          ce.end();
+          changes.add(ce);*/
+                }
+            }
+            //System.out.println("Suspected new entries in file: "+(disk.getEntryCount()-used.size()));
+        }
+    }
+
+    /**
+     * Finds the entry in neu best fitting the specified entry in old. If no entries get a score
+     * above zero, an entry is still returned.
+     * @param old EntrySorter
+     * @param neu EntrySorter
+     * @param index int
+     * @return BibtexEntry
+     */
+    private BibtexEntry bestFit(EntrySorter old, EntrySorter neu, int index) {
+        double comp = -1;
+        int found = 0;
+        loop: for (int i=0; i<neu.getEntryCount(); i++) {
+            double res = DuplicateCheck.compareEntriesStrictly(old.getEntryAt(index),
+            neu.getEntryAt(i));
+            if (res > comp) {
+                comp = res;
+                found = i;
+            }
+            if (comp > 1)
+                break loop;
+        }
+        return neu.getEntryAt(found);
+    }
+
+    private void scanPreamble(BibtexDatabase inMem, BibtexDatabase onTmp, BibtexDatabase onDisk) {
+        String mem = inMem.getPreamble(),
+        tmp = onTmp.getPreamble(),
+        disk = onDisk.getPreamble();
+        if (tmp != null) {
+            if ((disk == null) || !tmp.equals(disk))
+                changes.add(new PreambleChange(tmp, mem, disk));
+        }
+        else if ((disk != null) && !disk.equals("")) {
+            changes.add(new PreambleChange(tmp, mem, disk));
+        }
+    }
+
+    private void scanStrings(BibtexDatabase inMem, BibtexDatabase onTmp, BibtexDatabase onDisk) {
+        int nTmp = onTmp.getStringCount(),
+        nDisk = onDisk.getStringCount();
+        if ((nTmp == 0) && (nDisk == 0))
+            return;
+
+        HashSet<Object> used = new HashSet<Object>();
+        HashSet<Object> usedInMem = new HashSet<Object>();
+        HashSet<String> notMatched = new HashSet<String>(onTmp.getStringCount());
+
+        // First try to match by string names.
+        //int piv2 = -1;
+        mainLoop: for (String key : onTmp.getStringKeySet()){
+            BibtexString tmp = onTmp.getString(key);
+
+            //      for (int j=piv2+1; j<nDisk; j++)
+            for (String diskId : onDisk.getStringKeySet()){
+                if (!used.contains(diskId)) {
+                    BibtexString disk = onDisk.getString(diskId);
+                    if (disk.getName().equals(tmp.getName())) {
+                        // We have found a string with a matching name.
+                        if ((tmp.getContent() != null) && !tmp.getContent().equals(disk.getContent())) {
+                            // But they have nonmatching contents, so we've found a change.
+                            BibtexString mem = findString(inMem, tmp.getName(), usedInMem);
+                            if (mem != null)
+                                changes.add(new StringChange(mem, tmp, tmp.getName(),
+                                mem.getContent(),
+                                tmp.getContent(), disk.getContent()));
+                            else
+                                changes.add(new StringChange(null, tmp, tmp.getName(), null, tmp.getContent(), disk.getContent()));
+                        }
+                        used.add(diskId);
+                        //if (j==piv2)
+                        //  piv2++;
+                        continue mainLoop;
+                    }
+
+                }
+            }
+            // If we get here, there was no match for this string.
+            notMatched.add(tmp.getId());
+        }
+
+        // See if we can detect a name change for those entries that we couldn't match.
+        if (notMatched.size() > 0) {
+            for (Iterator<String> i = notMatched.iterator(); i.hasNext();){
+                BibtexString tmp = onTmp.getString(i.next());
+
+                // If we get to this point, we found no string with matching name. See if we
+                // can find one with matching content.
+                for (String diskId : onDisk.getStringKeySet()){
+
+                	if (!used.contains(diskId)) {
+                        BibtexString disk = onDisk.getString(diskId);
+
+                        if (disk.getContent().equals(tmp.getContent())) {
+                            // We have found a string with the same content. It cannot have the same
+                            // name, or we would have found it above.
+
+                            // Try to find the matching one in memory:
+                            BibtexString bsMem = null;
+                            
+                            for (String memId : inMem.getStringKeySet()){
+                                BibtexString bsMem_cand = inMem.getString(memId);
+                                if (bsMem_cand.getContent().equals(disk.getContent()) &&
+                                !usedInMem.contains(memId)) {
+                                    usedInMem.add(memId);
+                                    bsMem = bsMem_cand;
+                                    break;
+                                }
+                            }
+
+                            changes.add(new StringNameChange(bsMem, tmp, bsMem.getName(),
+                            tmp.getName(), disk.getName(),
+                            tmp.getContent()));
+                            i.remove();
+                            used.add(diskId);
+
+                        }
+                    }
+                }
+            }
+        }
+
+        if (notMatched.size() > 0) {
+            // Still one or more non-matched strings. So they must have been removed.
+            for (Iterator<String> i = notMatched.iterator(); i.hasNext(); ) {
+                String nmId = i.next();
+                BibtexString tmp = onTmp.getString(nmId);
+                BibtexString mem = findString(inMem, tmp.getName(), usedInMem);
+                if (mem != null) { // The removed string is not removed from the mem version.
+                    changes.add(new StringRemoveChange(tmp, tmp, mem));
+                }
+            }
+        }
+
+
+        // Finally, see if there are remaining strings in the disk database. They
+        // must have been added.
+        for (Iterator<String> i=onDisk.getStringKeySet().iterator(); i.hasNext();) {
+            String diskId = i.next();
+            if (!used.contains(diskId)) {
+                BibtexString disk = onDisk.getString(diskId);
+                //System.out.println(disk.getName());
+                used.add(diskId);
+                changes.add(new StringAddChange(disk));
+            }
+        }
+    }
+
+    private BibtexString findString(BibtexDatabase base, String name, HashSet<Object> used) {
+        if (!base.hasStringLabel(name))
+            return null;
+        for (Iterator<String> i=base.getStringKeySet().iterator(); i.hasNext();) {
+            String key = i.next();
+            BibtexString bs = base.getString(key);
+            if (bs.getName().equals(name) && !used.contains(key)) {
+                used.add(key);
+                return bs;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * This method only detects wheter a change took place or not. It does not
+     * determine the type of change. This would be possible, but difficult to do
+     * properly, so I rather only report the change.
+     */
+    public void scanGroups(MetaData inMem, MetaData onTmp, MetaData onDisk) {
+        final GroupTreeNode groupsTmp = onTmp.getGroups();
+        final GroupTreeNode groupsDisk = onDisk.getGroups();
+        if (groupsTmp == null && groupsDisk == null)
+            return;
+        if ((groupsTmp != null && groupsDisk == null)
+                || (groupsTmp == null && groupsDisk != null)) {
+            changes.add(new GroupChange(groupsDisk, groupsTmp));
+            return;
+        }
+        if (groupsTmp.equals(groupsDisk))
+            return;
+        changes.add(new GroupChange(groupsDisk, groupsTmp));
+        return;
+
+//
+//        if (((vOnTmp == null) || (vOnTmp.size()==0)) && ((vOnDisk == null) || (vOnDisk.size()==0))) {
+//            // No groups defined in either the tmp or disk version.
+//            return;
+//        }
+//
+//        // To avoid checking for null all the time, make empty vectors to replace null refs. We clone
+//        // non-null vectors so we can remove the elements as we finish with them.
+//        if (vOnDisk == null)
+//            vOnDisk = new Vector(0);
+//        else
+//            vOnDisk = (Vector)vOnDisk.clone();
+//        if (vOnTmp == null)
+//            vOnTmp = new Vector(0);
+//        else
+//            vOnTmp = (Vector)vOnTmp.clone();
+//        if (vInMem == null)
+//            vInMem = new Vector(0);
+//        else
+//            vInMem = (Vector)vInMem.clone();
+//
+//        // If the tmp version has groups, iterate through these and compare with disk version:
+//        while (vOnTmp.size() >= 1) {
+//            AbstractGroup group = (AbstractGroup)vOnTmp.firstElement();
+//            vOnTmp.removeElementAt(0);
+//            int pos = GroupSelector.findGroupByName(vOnDisk,group.getName());
+//            if (pos == -1) {
+//                // Couldn't find the group.
+//                changes.add(new GroupAddOrRemove(group, false));
+//            } else {
+//                AbstractGroup diskGroup = (AbstractGroup)vOnDisk.elementAt(pos);
+//
+//                if (!diskGroup.equals(group)) {
+//                    // Group has changed.
+//                    changes.add(new GroupChange(inMem, group, diskGroup));
+//                }
+//
+//                // Remove this group, since it's been accounted for.
+//                vOnDisk.remove(pos);
+//            }
+//        }
+//
+//        // If there are entries left in the disk version, these must have been added.
+//        while (vOnDisk.size() >= 1) {
+//            AbstractGroup group = (AbstractGroup)vOnDisk.firstElement();
+//            vOnDisk.removeElementAt(0);
+//            changes.add(new GroupAddOrRemove(group, true));
+//        }
+    }
+
+
+    public static interface DisplayResultCallback {
+        public void scanResultsResolved(boolean resolved);
+    }
+}
diff --git a/src/java/net/sf/jabref/collab/EntryAddChange.java b/src/java/net/sf/jabref/collab/EntryAddChange.java
index 0b1f203..424455b 100644
--- a/src/java/net/sf/jabref/collab/EntryAddChange.java
+++ b/src/java/net/sf/jabref/collab/EntryAddChange.java
@@ -1,51 +1,51 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import javax.swing.JComponent;
-import javax.swing.JScrollPane;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableInsertEntry;
-
-public class EntryAddChange extends Change {
-
-  BibtexEntry diskEntry;
-//  boolean isModifiedLocally, modificationsAgree;[[[[[[
-  PreviewPanel pp;
-  JScrollPane sp;
-
-  public EntryAddChange(BibtexEntry diskEntry) {
-    super("Added entry");
-    this.diskEntry = diskEntry;
-
-    pp = new PreviewPanel(null, diskEntry, null, new MetaData(), Globals.prefs.get("preview0"));
-    sp = new JScrollPane(pp);
-  }
-
-  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
-      diskEntry.setId(Util.createNeutralId());
-      panel.database().insertEntry(diskEntry);
-      secondary.insertEntry(diskEntry);
-      undoEdit.addEdit(new UndoableInsertEntry(panel.database(), diskEntry, panel));
-      return true;
-  }
-
-  JComponent description() {
-    return sp;
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import javax.swing.JComponent;
+import javax.swing.JScrollPane;
+
+import net.sf.jabref.*;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableInsertEntry;
+
+public class EntryAddChange extends Change {
+
+  BibtexEntry diskEntry;
+//  boolean isModifiedLocally, modificationsAgree;[[[[[[
+  PreviewPanel pp;
+  JScrollPane sp;
+
+  public EntryAddChange(BibtexEntry diskEntry) {
+    super("Added entry");
+    this.diskEntry = diskEntry;
+
+    pp = new PreviewPanel(null, diskEntry, null, new MetaData(), Globals.prefs.get("preview0"));
+    sp = new JScrollPane(pp);
+  }
+
+  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
+      diskEntry.setId(Util.createNeutralId());
+      panel.database().insertEntry(diskEntry);
+      secondary.insertEntry(diskEntry);
+      undoEdit.addEdit(new UndoableInsertEntry(panel.database(), diskEntry, panel));
+      return true;
+  }
+
+  JComponent description() {
+    return sp;
+  }
+}
diff --git a/src/java/net/sf/jabref/collab/EntryChange.java b/src/java/net/sf/jabref/collab/EntryChange.java
index 924fd25..7e73c7b 100644
--- a/src/java/net/sf/jabref/collab/EntryChange.java
+++ b/src/java/net/sf/jabref/collab/EntryChange.java
@@ -1,164 +1,164 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import java.util.Enumeration;
-import java.util.TreeSet;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JScrollPane;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableFieldChange;
-
-public class EntryChange extends Change {
-
-  BibtexEntry memEntry, tmpEntry, diskEntry;
-  boolean isModifiedLocally, modificationsAgree;
-
-  public EntryChange(BibtexEntry memEntry, BibtexEntry tmpEntry, BibtexEntry diskEntry) {
-    super();
-    String key = tmpEntry.getCiteKey();
-    if (key == null)
-      name = "Modified entry";
-    else
-      name = "Modified entry: '"+key+"'";
-    this.memEntry = memEntry;
-    this.tmpEntry = tmpEntry;
-    this.diskEntry = diskEntry;
-
-    // We know that tmpEntry is not equal to diskEntry. Check if it has been modified
-    // locally as well, since last tempfile was saved.
-    isModifiedLocally = ! (DuplicateCheck.compareEntriesStrictly(memEntry, tmpEntry) > 1);
-
-    // Another (unlikely?) possibility is that both disk and mem version has been modified
-    // in the same way. Check for this, too.
-    modificationsAgree = (DuplicateCheck.compareEntriesStrictly(memEntry, diskEntry) > 1);
-
-    //Util.pr("Modified entry: "+memEntry.getCiteKey()+"\n Modified locally: "+isModifiedLocally
-    //        +" Modifications agree: "+modificationsAgree);
-
-    TreeSet<String> allFields = new TreeSet<String>();
-    allFields.addAll(memEntry.getAllFields());
-    allFields.addAll(tmpEntry.getAllFields());
-    allFields.addAll(diskEntry.getAllFields());
-  
-    for (String field : allFields){
-      String mem = memEntry.getField(field),
-          tmp = tmpEntry.getField(field),
-          disk = diskEntry.getField(field);
-
-      if ((tmp != null) && (disk != null)) {
-        if (!tmp.equals(disk)) {
-          // Modified externally.
-          add(new FieldChange(field, memEntry, tmpEntry, mem, tmp, disk));
-        }
-      } else if ((tmp == null) && (disk != null) && !disk.equals("")) {
-        // Added externally.
-        add(new FieldChange(field, memEntry, tmpEntry, mem, tmp, disk));
-      } else if ((disk == null) && (tmp != null) && !tmp.equals("")
-                 && (mem != null) && !mem.equals("")) {
-        // Deleted externally and not locally.
-        add(new FieldChange(field, memEntry, tmpEntry, mem, tmp, disk));
-      }
-
-      //Util.pr("Field: "+fld.next());
-    }
-  }
-
-  
-public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
-    @SuppressWarnings("unchecked")
-    boolean allAccepted = true;
-    Enumeration<Change> e = children();
-    for (; e.hasMoreElements();) {
-        Change c = e.nextElement();
-        if (c.isAcceptable() && c.isAccepted())
-            c.makeChange(panel, secondary, undoEdit);
-        else allAccepted = false;
-    }
-
-    /*panel.database().removeEntry(memEntry.getId());
-    try {
-      diskEntry.setId(Util.createNeutralId());
-    } catch (KeyCollisionException ex) {}
-    panel.database().removeEntry(memEntry.getId());*/
-
-    return allAccepted;
-  }
-
-  JComponent description() {
-    return new JLabel(name);
-  }
-
-
-
-
-  class FieldChange extends Change {
-
-    BibtexEntry entry, tmpEntry;
-    String field, inMem, onTmp, onDisk;
-    InfoPane tp = new InfoPane();
-    JScrollPane sp = new JScrollPane(tp);
-
-    public FieldChange(String field, BibtexEntry memEntry, BibtexEntry tmpEntry, String inMem, String onTmp, String onDisk) {
-      entry = memEntry;
-      this.tmpEntry = tmpEntry;
-      name = field;
-      this.field = field;
-      this.inMem = inMem;
-      this.onTmp = onTmp;
-      this.onDisk = onDisk;
-
-      StringBuffer text = new StringBuffer();
-      text.append("<FONT SIZE=10>");
-        text.append("<H2>").append(Globals.lang("Modification of field")).append(" <I>").append(field).append("</I></H2>");
-
-      if ((onDisk != null) && !onDisk.equals(""))
-          text.append("<H3>").append(Globals.lang("Value set externally")).append(":</H3>" + " ").append(onDisk);
-      else
-          text.append("<H3>").append(Globals.lang("Value cleared externally")).append("</H3>");
-
-      if ((inMem != null) && !inMem.equals(""))
-          text.append("<H3>").append(Globals.lang("Current value")).append(":</H3>" + " ").append(inMem);
-      if ((onTmp != null) && !onTmp.equals(""))
-          text.append("<H3>").append(Globals.lang("Current tmp value")).append(":</H3>" + " ").append(onTmp);
-      else {
-        // No value in memory.
-        /*if ((onTmp != null) && !onTmp.equals(inMem))
-          text.append("<H2>"+Globals.lang("You have cleared this field. Original value")+":</H2>"
-                      +" "+onTmp);*/
-      }
-      tp.setContentType("text/html");
-      tp.setText(text.toString());
-    }
-
-    public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
-      //System.out.println(field+" "+onDisk);
-      entry.setField(field, onDisk);
-      undoEdit.addEdit(new UndoableFieldChange(entry, field, inMem, onDisk));
-      tmpEntry.setField(field, onDisk);
-      return true;
-    }
-
-    JComponent description() {
-      return sp;
-    }
-
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import java.util.Enumeration;
+import java.util.TreeSet;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JScrollPane;
+
+import net.sf.jabref.*;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableFieldChange;
+
+public class EntryChange extends Change {
+
+  BibtexEntry memEntry, tmpEntry, diskEntry;
+  boolean isModifiedLocally, modificationsAgree;
+
+  public EntryChange(BibtexEntry memEntry, BibtexEntry tmpEntry, BibtexEntry diskEntry) {
+    super();
+    String key = tmpEntry.getCiteKey();
+    if (key == null)
+      name = "Modified entry";
+    else
+      name = "Modified entry: '"+key+"'";
+    this.memEntry = memEntry;
+    this.tmpEntry = tmpEntry;
+    this.diskEntry = diskEntry;
+
+    // We know that tmpEntry is not equal to diskEntry. Check if it has been modified
+    // locally as well, since last tempfile was saved.
+    isModifiedLocally = ! (DuplicateCheck.compareEntriesStrictly(memEntry, tmpEntry) > 1);
+
+    // Another (unlikely?) possibility is that both disk and mem version has been modified
+    // in the same way. Check for this, too.
+    modificationsAgree = (DuplicateCheck.compareEntriesStrictly(memEntry, diskEntry) > 1);
+
+    //Util.pr("Modified entry: "+memEntry.getCiteKey()+"\n Modified locally: "+isModifiedLocally
+    //        +" Modifications agree: "+modificationsAgree);
+
+    TreeSet<String> allFields = new TreeSet<String>();
+    allFields.addAll(memEntry.getAllFields());
+    allFields.addAll(tmpEntry.getAllFields());
+    allFields.addAll(diskEntry.getAllFields());
+  
+    for (String field : allFields){
+      String mem = memEntry.getField(field),
+          tmp = tmpEntry.getField(field),
+          disk = diskEntry.getField(field);
+
+      if ((tmp != null) && (disk != null)) {
+        if (!tmp.equals(disk)) {
+          // Modified externally.
+          add(new FieldChange(field, memEntry, tmpEntry, mem, tmp, disk));
+        }
+      } else if ((tmp == null) && (disk != null) && !disk.equals("")) {
+        // Added externally.
+        add(new FieldChange(field, memEntry, tmpEntry, mem, tmp, disk));
+      } else if ((disk == null) && (tmp != null) && !tmp.equals("")
+                 && (mem != null) && !mem.equals("")) {
+        // Deleted externally and not locally.
+        add(new FieldChange(field, memEntry, tmpEntry, mem, tmp, disk));
+      }
+
+      //Util.pr("Field: "+fld.next());
+    }
+  }
+
+  
+public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
+    @SuppressWarnings("unchecked")
+    boolean allAccepted = true;
+    Enumeration<Change> e = children();
+    for (; e.hasMoreElements();) {
+        Change c = e.nextElement();
+        if (c.isAcceptable() && c.isAccepted())
+            c.makeChange(panel, secondary, undoEdit);
+        else allAccepted = false;
+    }
+
+    /*panel.database().removeEntry(memEntry.getId());
+    try {
+      diskEntry.setId(Util.createNeutralId());
+    } catch (KeyCollisionException ex) {}
+    panel.database().removeEntry(memEntry.getId());*/
+
+    return allAccepted;
+  }
+
+  JComponent description() {
+    return new JLabel(name);
+  }
+
+
+
+
+  class FieldChange extends Change {
+
+    BibtexEntry entry, tmpEntry;
+    String field, inMem, onTmp, onDisk;
+    InfoPane tp = new InfoPane();
+    JScrollPane sp = new JScrollPane(tp);
+
+    public FieldChange(String field, BibtexEntry memEntry, BibtexEntry tmpEntry, String inMem, String onTmp, String onDisk) {
+      entry = memEntry;
+      this.tmpEntry = tmpEntry;
+      name = field;
+      this.field = field;
+      this.inMem = inMem;
+      this.onTmp = onTmp;
+      this.onDisk = onDisk;
+
+      StringBuffer text = new StringBuffer();
+      text.append("<FONT SIZE=10>");
+        text.append("<H2>").append(Globals.lang("Modification of field")).append(" <I>").append(field).append("</I></H2>");
+
+      if ((onDisk != null) && !onDisk.equals(""))
+          text.append("<H3>").append(Globals.lang("Value set externally")).append(":</H3>" + " ").append(onDisk);
+      else
+          text.append("<H3>").append(Globals.lang("Value cleared externally")).append("</H3>");
+
+      if ((inMem != null) && !inMem.equals(""))
+          text.append("<H3>").append(Globals.lang("Current value")).append(":</H3>" + " ").append(inMem);
+      if ((onTmp != null) && !onTmp.equals(""))
+          text.append("<H3>").append(Globals.lang("Current tmp value")).append(":</H3>" + " ").append(onTmp);
+      else {
+        // No value in memory.
+        /*if ((onTmp != null) && !onTmp.equals(inMem))
+          text.append("<H2>"+Globals.lang("You have cleared this field. Original value")+":</H2>"
+                      +" "+onTmp);*/
+      }
+      tp.setContentType("text/html");
+      tp.setText(text.toString());
+    }
+
+    public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
+      //System.out.println(field+" "+onDisk);
+      entry.setField(field, onDisk);
+      undoEdit.addEdit(new UndoableFieldChange(entry, field, inMem, onDisk));
+      tmpEntry.setField(field, onDisk);
+      return true;
+    }
+
+    JComponent description() {
+      return sp;
+    }
+
+  }
+}
diff --git a/src/java/net/sf/jabref/collab/EntryDeleteChange.java b/src/java/net/sf/jabref/collab/EntryDeleteChange.java
index eb6aba7..f457115 100644
--- a/src/java/net/sf/jabref/collab/EntryDeleteChange.java
+++ b/src/java/net/sf/jabref/collab/EntryDeleteChange.java
@@ -1,62 +1,62 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import javax.swing.JComponent;
-import javax.swing.JScrollPane;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableRemoveEntry;
-
-public class EntryDeleteChange extends Change {
-
-  BibtexEntry memEntry, tmpEntry, diskEntry;
-  boolean isModifiedLocally;
-  double matchWithTmp;
-  PreviewPanel pp;
-  JScrollPane sp;
-
-  public EntryDeleteChange(BibtexEntry memEntry, BibtexEntry tmpEntry) {
-    super("Deleted entry");
-    this.memEntry = memEntry;
-    this.tmpEntry = tmpEntry;
-
-    // Compare the deleted entry in memory with the one in the tmpfile. The
-    // entry could have been removed in memory.
-    matchWithTmp = DuplicateCheck.compareEntriesStrictly(memEntry, tmpEntry);
-
-    // Check if it has been modified locally, since last tempfile was saved.
-    isModifiedLocally = !(matchWithTmp > 1);
-
-    //Util.pr("Modified entry: "+memEntry.getCiteKey()+"\n Modified locally: "+isModifiedLocally
-    //        +" Modifications agree: "+modificationsAgree);
-
-    pp = new PreviewPanel(null, memEntry, null, new MetaData(), Globals.prefs.get("preview0"));
-    sp = new JScrollPane(pp);
-  }
-
-  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
-    panel.database().removeEntry(memEntry.getId());
-    undoEdit.addEdit(new UndoableRemoveEntry(panel.database(), memEntry, panel));
-    secondary.removeEntry(tmpEntry.getId());
-    return true;
-  }
-
-  JComponent description() {
-    return sp;
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import javax.swing.JComponent;
+import javax.swing.JScrollPane;
+
+import net.sf.jabref.*;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableRemoveEntry;
+
+public class EntryDeleteChange extends Change {
+
+  BibtexEntry memEntry, tmpEntry, diskEntry;
+  boolean isModifiedLocally;
+  double matchWithTmp;
+  PreviewPanel pp;
+  JScrollPane sp;
+
+  public EntryDeleteChange(BibtexEntry memEntry, BibtexEntry tmpEntry) {
+    super("Deleted entry");
+    this.memEntry = memEntry;
+    this.tmpEntry = tmpEntry;
+
+    // Compare the deleted entry in memory with the one in the tmpfile. The
+    // entry could have been removed in memory.
+    matchWithTmp = DuplicateCheck.compareEntriesStrictly(memEntry, tmpEntry);
+
+    // Check if it has been modified locally, since last tempfile was saved.
+    isModifiedLocally = !(matchWithTmp > 1);
+
+    //Util.pr("Modified entry: "+memEntry.getCiteKey()+"\n Modified locally: "+isModifiedLocally
+    //        +" Modifications agree: "+modificationsAgree);
+
+    pp = new PreviewPanel(null, memEntry, null, new MetaData(), Globals.prefs.get("preview0"));
+    sp = new JScrollPane(pp);
+  }
+
+  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
+    panel.database().removeEntry(memEntry.getId());
+    undoEdit.addEdit(new UndoableRemoveEntry(panel.database(), memEntry, panel));
+    secondary.removeEntry(tmpEntry.getId());
+    return true;
+  }
+
+  JComponent description() {
+    return sp;
+  }
+}
diff --git a/src/java/net/sf/jabref/collab/FileUpdateListener.java b/src/java/net/sf/jabref/collab/FileUpdateListener.java
index efbd9b3..8f647f9 100644
--- a/src/java/net/sf/jabref/collab/FileUpdateListener.java
+++ b/src/java/net/sf/jabref/collab/FileUpdateListener.java
@@ -1,30 +1,30 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-public interface FileUpdateListener {
-
-  /**
-   * The file has been updated. A new call will not result until the file has been modified again.
-   */
-  public void fileUpdated();
-
-  /**
-   * The file does no longer exist.
-   */
-  public void fileRemoved();
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+public interface FileUpdateListener {
+
+  /**
+   * The file has been updated. A new call will not result until the file has been modified again.
+   */
+  public void fileUpdated();
+
+  /**
+   * The file does no longer exist.
+   */
+  public void fileRemoved();
+
+}
diff --git a/src/java/net/sf/jabref/collab/FileUpdateMonitor.java b/src/java/net/sf/jabref/collab/FileUpdateMonitor.java
index 2f58941..fa4b466 100644
--- a/src/java/net/sf/jabref/collab/FileUpdateMonitor.java
+++ b/src/java/net/sf/jabref/collab/FileUpdateMonitor.java
@@ -1,258 +1,258 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-import java.util.HashMap;
-import java.io.File;
-import java.io.IOException;
-import java.util.Iterator;
-
-/**
- * This thread monitors a set of files, each associated with a FileUpdateListener, for changes
-* in the file's last modification time stamp. The
- */
-public class FileUpdateMonitor extends Thread {
-
-  final int WAIT = 4000;
-  static int tmpNum = 0;
-  int no = 0;
-  HashMap<String, Entry> entries = new HashMap<String, Entry>();
-  boolean running;
-
-  public FileUpdateMonitor() {
-    setPriority(MIN_PRIORITY);
-  }
-
-  public void run() {
-    running = true;
-
-    // The running variable is used to make the thread stop when needed.
-    while (running) {
-      //System.out.println("Polling...");
-      Iterator<String> i = entries.keySet().iterator();
-      for (;i.hasNext();) {
-        Entry e = entries.get(i.next());
-        try {
-          if (e.hasBeenUpdated())
-            e.notifyListener();
-
-          //else
-          //System.out.println("File '"+e.file.getPath()+"' not modified.");
-        } catch (IOException ex) {
-          e.notifyFileRemoved();
-        }
-      }
-
-      // Sleep for a while before starting a new polling round.
-      try {
-        sleep(WAIT);
-      } catch (InterruptedException ex) {
-      }
-    }
-  }
-
-  /**
-   * Cause the thread to stop monitoring. It will finish the current round before stopping.
-   */
-  public void stopMonitoring() {
-    running = false;
-  }
-
-  /**
-   * Add a new file to monitor. Returns a handle for accessing the entry.
-   * @param ul FileUpdateListener The listener to notify when the file changes.
-   * @param file File The file to monitor.
-   * @throws IOException if the file does not exist.
-   */
-  public String addUpdateListener(FileUpdateListener ul, File file) throws IOException {
-     // System.out.println(file.getPath());
-    if (!file.exists())
-      throw new IOException("File not found");
-    no++;
-    String key = ""+no;
-    entries.put(key, new Entry(ul, file));
-    return key;
-  }
-
-    /**
-     * Forces a check on the file, and returns the result. Does not
-     * force a report to all listeners before the next routine check.
-     */
-    public boolean hasBeenModified(String handle) throws IllegalArgumentException {
-	Object o = entries.get(handle);
-	if (o == null)
-            return false;
-        //	    throw new IllegalArgumentException("Entry not found");
-	try {
-	    return ((Entry)o).hasBeenUpdated();
-	} catch (IOException ex) {
-	    // Thrown if file has been removed. We return false.
-	    return false;
-	}
-    }
-
-    /**
-     * Change the stored timestamp for the given file. If the timestamp equals
-     * the file's timestamp on disk, after this call the file will appear to
-     * have been modified. Used if a file has been modified, and the change
-     * scan fails, in order to ensure successive checks.
-     * @param handle the handle to the correct file.
-     */
-    public void perturbTimestamp(String handle) {
-        Object o = entries.get(handle);
-        if (o == null)
-            return;
-        ((Entry)o).timeStamp--;
-    }
-
-  /**
-   * Removes a listener from the monitor.
-   * @param handle String The handle for the listener to remove.
-   */
-  public void removeUpdateListener(String handle) {
-    entries.remove(handle);
-  }
-
-  public void updateTimeStamp(String key) throws IllegalArgumentException {
-    Object o = entries.get(key);
-    if (o == null)
-      throw new IllegalArgumentException("Entry not found");
-    Entry entry = (Entry)o;
-    entry.updateTimeStamp();
-
-  }
-
-  public void changeFile(String key, File file) throws IOException, IllegalArgumentException {
-    if (!file.exists())
-      throw new IOException("File not found");
-    Object o = entries.get(key);
-    if (o == null)
-      throw new IllegalArgumentException("Entry not found");
-    ((Entry)o).file = file;
-  }
-
-  /**
-   * Method for getting the temporary file used for this database. The tempfile
-   * is used for comparison with the changed on-disk version.
-   * @param key String The handle for this monitor.
-   * @throws IllegalArgumentException If the handle doesn't correspond to an entry.
-   * @return File The temporary file.
-   */
-  public File getTempFile(String key) throws IllegalArgumentException {
-    Object o = entries.get(key);
-    if (o == null)
-      throw new IllegalArgumentException("Entry not found");
-    return ((Entry)o).tmpFile;
-  }
-
-  /**
-   * A class containing the File, the FileUpdateListener and the current time stamp for one file.
-   */
-  class Entry {
-    FileUpdateListener listener;
-    File file;
-    File tmpFile;
-    long timeStamp, fileSize;
-
-    public Entry(FileUpdateListener ul, File f) {
-      listener = ul;
-      file = f;
-      timeStamp = file.lastModified();
-      fileSize = file.length();
-      tmpFile = getTempFile();
-      tmpFile.deleteOnExit();
-      copy();
-    }
-
-    /**
-     * Check if time stamp or the file size has changed.
-     * @throws IOException if the file does no longer exist.
-     * @return boolean true if the file has changed.
-     */
-    public boolean hasBeenUpdated() throws IOException {
-      long modified = file.lastModified();
-      long fileSizeNow = file.length();
-      if (modified == 0L)
-        throw new IOException("File deleted");
-      return timeStamp != modified || fileSize != fileSizeNow;
-    }
-
-    public void updateTimeStamp() {
-      timeStamp = file.lastModified();
-      if (timeStamp == 0L)
-        notifyFileRemoved();
-      fileSize = file.length();
-
-      copy();
-    }
-
-    public boolean copy() {
-	
-	//Util.pr("<copy file=\""+tmpFile.getPath()+"\">");
-      boolean res = false;
-      try {
-        res = Util.copyFile(file, tmpFile, true);
-      } catch (IOException ex) {
-        Globals.logger("Cannot copy to temporary file '"+tmpFile.getPath()+"'");
-      }
-      //Util.pr("</copy>");
-      return res;
-	
-      //return true;
-    }
-
-    /**
-     * Call the listener method to signal that the file has changed.
-     */
-    public void notifyListener() {
-      // Update time stamp.
-      timeStamp = file.lastModified();
-      fileSize = file.length();
-      listener.fileUpdated();
-    }
-
-    /**
-     * Call the listener method to signal that the file has been removed.
-     */
-    public void notifyFileRemoved() {
-      listener.fileRemoved();
-    }
-
-    /*public void finalize() {
-      try {
-        tmpFile.delete();
-      } catch (Throwable e) {
-        Globals.logger("Cannot delete temporary file '"+tmpFile.getPath()+"'");
-      }
-    }*/
-  }
-
-  static synchronized File getTempFile() {
-    File f = null;
-    // Globals.prefs.get("tempDir")
-    //while ((f = File.createTempFile("jabref"+(tmpNum++), null)).exists());
-    try {
-	    f = File.createTempFile("jabref", null);
-        f.deleteOnExit();
-	//System.out.println(f.getPath());
-    } catch (IOException ex) {
-	ex.printStackTrace();
-    }
-    return f;
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+import java.util.HashMap;
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+
+/**
+ * This thread monitors a set of files, each associated with a FileUpdateListener, for changes
+* in the file's last modification time stamp. The
+ */
+public class FileUpdateMonitor extends Thread {
+
+  final int WAIT = 4000;
+  static int tmpNum = 0;
+  int no = 0;
+  HashMap<String, Entry> entries = new HashMap<String, Entry>();
+  boolean running;
+
+  public FileUpdateMonitor() {
+    setPriority(MIN_PRIORITY);
+  }
+
+  public void run() {
+    running = true;
+
+    // The running variable is used to make the thread stop when needed.
+    while (running) {
+      //System.out.println("Polling...");
+      Iterator<String> i = entries.keySet().iterator();
+      for (;i.hasNext();) {
+        Entry e = entries.get(i.next());
+        try {
+          if (e.hasBeenUpdated())
+            e.notifyListener();
+
+          //else
+          //System.out.println("File '"+e.file.getPath()+"' not modified.");
+        } catch (IOException ex) {
+          e.notifyFileRemoved();
+        }
+      }
+
+      // Sleep for a while before starting a new polling round.
+      try {
+        sleep(WAIT);
+      } catch (InterruptedException ex) {
+      }
+    }
+  }
+
+  /**
+   * Cause the thread to stop monitoring. It will finish the current round before stopping.
+   */
+  public void stopMonitoring() {
+    running = false;
+  }
+
+  /**
+   * Add a new file to monitor. Returns a handle for accessing the entry.
+   * @param ul FileUpdateListener The listener to notify when the file changes.
+   * @param file File The file to monitor.
+   * @throws IOException if the file does not exist.
+   */
+  public String addUpdateListener(FileUpdateListener ul, File file) throws IOException {
+     // System.out.println(file.getPath());
+    if (!file.exists())
+      throw new IOException("File not found");
+    no++;
+    String key = ""+no;
+    entries.put(key, new Entry(ul, file));
+    return key;
+  }
+
+    /**
+     * Forces a check on the file, and returns the result. Does not
+     * force a report to all listeners before the next routine check.
+     */
+    public boolean hasBeenModified(String handle) throws IllegalArgumentException {
+	Object o = entries.get(handle);
+	if (o == null)
+            return false;
+        //	    throw new IllegalArgumentException("Entry not found");
+	try {
+	    return ((Entry)o).hasBeenUpdated();
+	} catch (IOException ex) {
+	    // Thrown if file has been removed. We return false.
+	    return false;
+	}
+    }
+
+    /**
+     * Change the stored timestamp for the given file. If the timestamp equals
+     * the file's timestamp on disk, after this call the file will appear to
+     * have been modified. Used if a file has been modified, and the change
+     * scan fails, in order to ensure successive checks.
+     * @param handle the handle to the correct file.
+     */
+    public void perturbTimestamp(String handle) {
+        Object o = entries.get(handle);
+        if (o == null)
+            return;
+        ((Entry)o).timeStamp--;
+    }
+
+  /**
+   * Removes a listener from the monitor.
+   * @param handle String The handle for the listener to remove.
+   */
+  public void removeUpdateListener(String handle) {
+    entries.remove(handle);
+  }
+
+  public void updateTimeStamp(String key) throws IllegalArgumentException {
+    Object o = entries.get(key);
+    if (o == null)
+      throw new IllegalArgumentException("Entry not found");
+    Entry entry = (Entry)o;
+    entry.updateTimeStamp();
+
+  }
+
+  public void changeFile(String key, File file) throws IOException, IllegalArgumentException {
+    if (!file.exists())
+      throw new IOException("File not found");
+    Object o = entries.get(key);
+    if (o == null)
+      throw new IllegalArgumentException("Entry not found");
+    ((Entry)o).file = file;
+  }
+
+  /**
+   * Method for getting the temporary file used for this database. The tempfile
+   * is used for comparison with the changed on-disk version.
+   * @param key String The handle for this monitor.
+   * @throws IllegalArgumentException If the handle doesn't correspond to an entry.
+   * @return File The temporary file.
+   */
+  public File getTempFile(String key) throws IllegalArgumentException {
+    Object o = entries.get(key);
+    if (o == null)
+      throw new IllegalArgumentException("Entry not found");
+    return ((Entry)o).tmpFile;
+  }
+
+  /**
+   * A class containing the File, the FileUpdateListener and the current time stamp for one file.
+   */
+  class Entry {
+    FileUpdateListener listener;
+    File file;
+    File tmpFile;
+    long timeStamp, fileSize;
+
+    public Entry(FileUpdateListener ul, File f) {
+      listener = ul;
+      file = f;
+      timeStamp = file.lastModified();
+      fileSize = file.length();
+      tmpFile = getTempFile();
+      tmpFile.deleteOnExit();
+      copy();
+    }
+
+    /**
+     * Check if time stamp or the file size has changed.
+     * @throws IOException if the file does no longer exist.
+     * @return boolean true if the file has changed.
+     */
+    public boolean hasBeenUpdated() throws IOException {
+      long modified = file.lastModified();
+      long fileSizeNow = file.length();
+      if (modified == 0L)
+        throw new IOException("File deleted");
+      return timeStamp != modified || fileSize != fileSizeNow;
+    }
+
+    public void updateTimeStamp() {
+      timeStamp = file.lastModified();
+      if (timeStamp == 0L)
+        notifyFileRemoved();
+      fileSize = file.length();
+
+      copy();
+    }
+
+    public boolean copy() {
+	
+	//Util.pr("<copy file=\""+tmpFile.getPath()+"\">");
+      boolean res = false;
+      try {
+        res = Util.copyFile(file, tmpFile, true);
+      } catch (IOException ex) {
+        Globals.logger("Cannot copy to temporary file '"+tmpFile.getPath()+"'");
+      }
+      //Util.pr("</copy>");
+      return res;
+	
+      //return true;
+    }
+
+    /**
+     * Call the listener method to signal that the file has changed.
+     */
+    public void notifyListener() {
+      // Update time stamp.
+      timeStamp = file.lastModified();
+      fileSize = file.length();
+      listener.fileUpdated();
+    }
+
+    /**
+     * Call the listener method to signal that the file has been removed.
+     */
+    public void notifyFileRemoved() {
+      listener.fileRemoved();
+    }
+
+    /*public void finalize() {
+      try {
+        tmpFile.delete();
+      } catch (Throwable e) {
+        Globals.logger("Cannot delete temporary file '"+tmpFile.getPath()+"'");
+      }
+    }*/
+  }
+
+  static synchronized File getTempFile() {
+    File f = null;
+    // Globals.prefs.get("tempDir")
+    //while ((f = File.createTempFile("jabref"+(tmpNum++), null)).exists());
+    try {
+	    f = File.createTempFile("jabref", null);
+        f.deleteOnExit();
+	//System.out.println(f.getPath());
+    } catch (IOException ex) {
+	ex.printStackTrace();
+    }
+    return f;
+  }
+}
diff --git a/src/java/net/sf/jabref/collab/FileUpdatePanel.java b/src/java/net/sf/jabref/collab/FileUpdatePanel.java
index 39b22b6..48f81f6 100644
--- a/src/java/net/sf/jabref/collab/FileUpdatePanel.java
+++ b/src/java/net/sf/jabref/collab/FileUpdatePanel.java
@@ -1,118 +1,118 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-
-import net.sf.jabref.*;
-
-public class FileUpdatePanel extends SidePaneComponent implements ActionListener,
-        ChangeScanner.DisplayResultCallback {
-
-    public static final String NAME = "fileUpdate";
-
-	JButton test = new JButton(Globals.lang("Review changes"));
-
-	BasePanel panel;
-
-	JabRefFrame frame;
-
-	SidePaneManager manager;
-
-	JLabel message;
-
-	ChangeScanner scanner;
-
-	public FileUpdatePanel(JabRefFrame frame, BasePanel panel, SidePaneManager manager, File file,
-		ChangeScanner scanner) {
-		super(manager, GUIGlobals.getIconUrl("save"), Globals.lang("File changed"));
-        close.setEnabled(false);
-        this.panel = panel;
-		this.frame = frame;
-		this.manager = manager;
-		this.scanner = scanner;
-
-		JPanel main = new JPanel();
-		main.setLayout(new BorderLayout());
-
-		message = new JLabel("<html><center>"
-			+ Globals.lang("The file<BR>'%0'<BR>has been modified<BR>externally!", file.getName())
-			+ "</center></html>", JLabel.CENTER);
-
-		main.add(message, BorderLayout.CENTER);
-		main.add(test, BorderLayout.SOUTH);
-		main.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
-
-		add(main, BorderLayout.CENTER);
-		test.addActionListener(this);
-	}
-
-    /**
-     * We include a getter for the BasePanel this component refers to, because this
-     * component needs to be closed if the BasePanel is closed.
-     * @return the base panel this component refers to.
-     */
-    public BasePanel getPanel() {
-        return panel;
-    }
-
-    /**
-	 * Unregister when this component closes. We need that to avoid showing
-	 * two such external change warnings at the same time, only the latest one.
-	 */
-	public void componentClosing() {
-	    manager.unregisterComponent(NAME);
-    }
-
-	/**
-	 * actionPerformed
-	 * 
-	 * @param e
-	 *            ActionEvent
-	 */
-	public void actionPerformed(ActionEvent e) {
-
-		// ChangeScanner scanner = new ChangeScanner(frame, panel); //,
-		// panel.database(), panel.metaData());
-		// try {
-		scanner.displayResult(this);
-		// scanner.changeScan(panel.file());
-
-		// } catch (IOException ex) {
-		// ex.printStackTrace();
-		// }
-	}
-
-    /**
-     * Callback method for signalling that the change scanner has displayed the
-     * scan results to the user.
-     * @param resolved true if there were no changes, or if the user has resolved them.
-     */
-    public void scanResultsResolved(boolean resolved) {
-        if (resolved) {
-            manager.hideComponent(this);
-            panel.setUpdatedExternally(false);
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import net.sf.jabref.*;
+
+public class FileUpdatePanel extends SidePaneComponent implements ActionListener,
+        ChangeScanner.DisplayResultCallback {
+
+    public static final String NAME = "fileUpdate";
+
+	JButton test = new JButton(Globals.lang("Review changes"));
+
+	BasePanel panel;
+
+	JabRefFrame frame;
+
+	SidePaneManager manager;
+
+	JLabel message;
+
+	ChangeScanner scanner;
+
+	public FileUpdatePanel(JabRefFrame frame, BasePanel panel, SidePaneManager manager, File file,
+		ChangeScanner scanner) {
+		super(manager, GUIGlobals.getIconUrl("save"), Globals.lang("File changed"));
+        close.setEnabled(false);
+        this.panel = panel;
+		this.frame = frame;
+		this.manager = manager;
+		this.scanner = scanner;
+
+		JPanel main = new JPanel();
+		main.setLayout(new BorderLayout());
+
+		message = new JLabel("<html><center>"
+			+ Globals.lang("The file<BR>'%0'<BR>has been modified<BR>externally!", file.getName())
+			+ "</center></html>", JLabel.CENTER);
+
+		main.add(message, BorderLayout.CENTER);
+		main.add(test, BorderLayout.SOUTH);
+		main.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
+
+		add(main, BorderLayout.CENTER);
+		test.addActionListener(this);
+	}
+
+    /**
+     * We include a getter for the BasePanel this component refers to, because this
+     * component needs to be closed if the BasePanel is closed.
+     * @return the base panel this component refers to.
+     */
+    public BasePanel getPanel() {
+        return panel;
+    }
+
+    /**
+	 * Unregister when this component closes. We need that to avoid showing
+	 * two such external change warnings at the same time, only the latest one.
+	 */
+	public void componentClosing() {
+	    manager.unregisterComponent(NAME);
+    }
+
+	/**
+	 * actionPerformed
+	 * 
+	 * @param e
+	 *            ActionEvent
+	 */
+	public void actionPerformed(ActionEvent e) {
+
+		// ChangeScanner scanner = new ChangeScanner(frame, panel); //,
+		// panel.database(), panel.metaData());
+		// try {
+		scanner.displayResult(this);
+		// scanner.changeScan(panel.file());
+
+		// } catch (IOException ex) {
+		// ex.printStackTrace();
+		// }
+	}
+
+    /**
+     * Callback method for signalling that the change scanner has displayed the
+     * scan results to the user.
+     * @param resolved true if there were no changes, or if the user has resolved them.
+     */
+    public void scanResultsResolved(boolean resolved) {
+        if (resolved) {
+            manager.hideComponent(this);
+            panel.setUpdatedExternally(false);
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/collab/GroupChange.java b/src/java/net/sf/jabref/collab/GroupChange.java
index 162b0ce..abef0b0 100644
--- a/src/java/net/sf/jabref/collab/GroupChange.java
+++ b/src/java/net/sf/jabref/collab/GroupChange.java
@@ -1,82 +1,82 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Globals;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.groups.AllEntriesGroup;
-import net.sf.jabref.groups.GroupTreeNode;
-import net.sf.jabref.groups.UndoableModifySubtree;
-import net.sf.jabref.undo.NamedCompound;
-
-public class GroupChange extends Change {
-    private final GroupTreeNode m_changedGroups;
-    private GroupTreeNode tmpGroupRoot;
-
-    public GroupChange(GroupTreeNode changedGroups, GroupTreeNode tmpGroupRoot) {
-        super(changedGroups != null ? 
-                "Modified groups tree"
-                : "Removed all groups"); // JZTODO lyrics
-        m_changedGroups = changedGroups;
-        this.tmpGroupRoot = tmpGroupRoot;
-    }
-
-    public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
-        final GroupTreeNode root = panel.metaData().getGroups();
-        final UndoableModifySubtree undo = new UndoableModifySubtree(
-                panel.getGroupSelector(), panel.metaData().getGroups(),
-                root, Globals.lang("Modified groups")); // JZTODO lyrics
-        root.removeAllChildren();
-        if (m_changedGroups == null) {
-            // I think setting root to null is not possible
-            root.setGroup(new AllEntriesGroup());
-        } else {
-            // change root group, even though it'll be AllEntries anyway
-            root.setGroup(m_changedGroups.getGroup());
-            for (int i = 0; i < m_changedGroups.getChildCount(); ++i)        
-                root.add(((GroupTreeNode) m_changedGroups.getChildAt(i)).deepCopy());
-            // the group tree is now appled to a different BibtexDatabase than it was created
-            // for, which affects groups such as ExplicitGroup (which links to BibtexEntry objects).
-            // We must traverse the tree and refresh all groups:
-            root.refreshGroupsForNewDatabase(panel.database());
-        }
-
-        if (panel.getGroupSelector().getGroupTreeRoot() == root)
-            panel.getGroupSelector().revalidateGroups();
-        undoEdit.addEdit(undo);
-        
-        // Update tmp database:
-        GroupTreeNode copied = m_changedGroups.deepCopy();
-        tmpGroupRoot.removeAllChildren();
-        tmpGroupRoot.setGroup(copied.getGroup());
-        for (int i = 0; i < copied.getChildCount(); ++i)
-            tmpGroupRoot.add(((GroupTreeNode) copied.getChildAt(i)).deepCopy());
-        tmpGroupRoot.refreshGroupsForNewDatabase(secondary);
-        return true;
-    }
-
-    JComponent description() {
-        return new JLabel("<html>" + name + "." + (m_changedGroups != null ? " " 
-                + "Accepting the change replaces the complete " +
-                "groups tree with the externally modified groups tree." : "") 
-                + "</html>"); 
-        // JZTODO lyrics
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Globals;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.groups.AllEntriesGroup;
+import net.sf.jabref.groups.GroupTreeNode;
+import net.sf.jabref.groups.UndoableModifySubtree;
+import net.sf.jabref.undo.NamedCompound;
+
+public class GroupChange extends Change {
+    private final GroupTreeNode m_changedGroups;
+    private GroupTreeNode tmpGroupRoot;
+
+    public GroupChange(GroupTreeNode changedGroups, GroupTreeNode tmpGroupRoot) {
+        super(changedGroups != null ? 
+                "Modified groups tree"
+                : "Removed all groups"); // JZTODO lyrics
+        m_changedGroups = changedGroups;
+        this.tmpGroupRoot = tmpGroupRoot;
+    }
+
+    public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
+        final GroupTreeNode root = panel.metaData().getGroups();
+        final UndoableModifySubtree undo = new UndoableModifySubtree(
+                panel.getGroupSelector(), panel.metaData().getGroups(),
+                root, Globals.lang("Modified groups")); // JZTODO lyrics
+        root.removeAllChildren();
+        if (m_changedGroups == null) {
+            // I think setting root to null is not possible
+            root.setGroup(new AllEntriesGroup());
+        } else {
+            // change root group, even though it'll be AllEntries anyway
+            root.setGroup(m_changedGroups.getGroup());
+            for (int i = 0; i < m_changedGroups.getChildCount(); ++i)        
+                root.add(((GroupTreeNode) m_changedGroups.getChildAt(i)).deepCopy());
+            // the group tree is now appled to a different BibtexDatabase than it was created
+            // for, which affects groups such as ExplicitGroup (which links to BibtexEntry objects).
+            // We must traverse the tree and refresh all groups:
+            root.refreshGroupsForNewDatabase(panel.database());
+        }
+
+        if (panel.getGroupSelector().getGroupTreeRoot() == root)
+            panel.getGroupSelector().revalidateGroups();
+        undoEdit.addEdit(undo);
+        
+        // Update tmp database:
+        GroupTreeNode copied = m_changedGroups.deepCopy();
+        tmpGroupRoot.removeAllChildren();
+        tmpGroupRoot.setGroup(copied.getGroup());
+        for (int i = 0; i < copied.getChildCount(); ++i)
+            tmpGroupRoot.add(((GroupTreeNode) copied.getChildAt(i)).deepCopy());
+        tmpGroupRoot.refreshGroupsForNewDatabase(secondary);
+        return true;
+    }
+
+    JComponent description() {
+        return new JLabel("<html>" + name + "." + (m_changedGroups != null ? " " 
+                + "Accepting the change replaces the complete " +
+                "groups tree with the externally modified groups tree." : "") 
+                + "</html>"); 
+        // JZTODO lyrics
+    }
+}
diff --git a/src/java/net/sf/jabref/collab/InfoPane.java b/src/java/net/sf/jabref/collab/InfoPane.java
index d364003..197cc85 100644
--- a/src/java/net/sf/jabref/collab/InfoPane.java
+++ b/src/java/net/sf/jabref/collab/InfoPane.java
@@ -1,34 +1,34 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import javax.swing.JEditorPane;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-
-public class InfoPane extends JEditorPane {
-  public InfoPane() {
-    setEditable(false);
-    setContentType("text/html");
-  }
-  public void paint(Graphics g) {
-    Graphics2D g2 = (Graphics2D)g;
-    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
-                        RenderingHints.VALUE_ANTIALIAS_ON);
-    super.paint(g2);
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import javax.swing.JEditorPane;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+
+public class InfoPane extends JEditorPane {
+  public InfoPane() {
+    setEditable(false);
+    setContentType("text/html");
+  }
+  public void paint(Graphics g) {
+    Graphics2D g2 = (Graphics2D)g;
+    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+                        RenderingHints.VALUE_ANTIALIAS_ON);
+    super.paint(g2);
+  }
+}
diff --git a/src/java/net/sf/jabref/collab/MetaDataChange.java b/src/java/net/sf/jabref/collab/MetaDataChange.java
index 29a98fe..01d34fa 100644
--- a/src/java/net/sf/jabref/collab/MetaDataChange.java
+++ b/src/java/net/sf/jabref/collab/MetaDataChange.java
@@ -1,124 +1,124 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.Globals;
-import net.sf.jabref.undo.NamedCompound;
-
-import javax.swing.*;
-import java.util.Vector;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * 
- */
-public class MetaDataChange extends Change {
-
-    static final int
-        ADD = 1,
-        REMOVE = 2,
-        MODIFY = 3;
-
-    InfoPane tp = new InfoPane();
-    JScrollPane sp = new JScrollPane(tp);
-    private MetaData md;
-    private MetaData mdSecondary;
-    ArrayList<MetaDataChangeUnit> changes = new ArrayList<MetaDataChangeUnit>();
-
-    public MetaDataChange(MetaData md, MetaData mdSecondary) {
-        super(Globals.lang("Metadata change"));
-        this.md = md;
-        this.mdSecondary = mdSecondary;
-
-        tp.setText("<html>"+Globals.lang("Metadata change")+"</html>");
-    }
-
-    public int getChangeCount() {
-        return changes.size();
-    }
-
-    public void insertMetaDataAddition(String key, Vector<String> value) {
-        changes.add(new MetaDataChangeUnit(ADD, key, value));
-    }
-
-    public void insertMetaDataRemoval(String key) {
-        changes.add(new MetaDataChangeUnit(REMOVE, key, null));
-    }
-
-    public void insertMetaDataChange(String key, Vector<String> value) {
-        changes.add(new MetaDataChangeUnit(MODIFY, key, value));
-    }
-
-    JComponent description() {
-        StringBuilder sb = new StringBuilder("<html>"+Globals.lang("Changes have been made to the following metadata elements")+":<p>");
-        for (Iterator<MetaDataChangeUnit> iterator = changes.iterator(); iterator.hasNext();) {
-            MetaDataChangeUnit unit = iterator.next();
-            sb.append("<br>  ");
-            sb.append(unit.key);
-            /*switch (unit.type) {
-                case ADD:
-                    sb.append("<p>Added: "+unit.key);
-                    break;
-                case REMOVE:
-                    sb.append("<p>Removed: "+unit.key);
-                    break;
-                case MODIFY:
-                    sb.append("<p>Modified: "+unit.key);
-                    break;
-            }*/
-        }
-        sb.append("</html>");
-        tp.setText(sb.toString());
-        return sp;
-    }
-
-    public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
-        for (Iterator<MetaDataChangeUnit> iterator = changes.iterator(); iterator.hasNext();) {
-            MetaDataChangeUnit unit = iterator.next();
-            switch (unit.type) {
-                case ADD:
-                    md.putData(unit.key, unit.value);
-                    mdSecondary.putData(unit.key, unit.value);
-                    break;
-                case REMOVE:
-                    md.remove(unit.key);
-                    mdSecondary.remove(unit.key);
-                    break;
-                case MODIFY:
-                    md.putData(unit.key, unit.value);
-                    mdSecondary.putData(unit.key, unit.value);
-                    break;
-            }
-        }
-        return true;
-    }
-
-    class MetaDataChangeUnit {
-        int type;
-        String key;
-        Vector<String> value;
-
-        public MetaDataChangeUnit(int type, String key, Vector<String> value) {
-            this.type = type;
-            this.key = key;
-            this.value = value;
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.Globals;
+import net.sf.jabref.undo.NamedCompound;
+
+import javax.swing.*;
+import java.util.Vector;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * 
+ */
+public class MetaDataChange extends Change {
+
+    static final int
+        ADD = 1,
+        REMOVE = 2,
+        MODIFY = 3;
+
+    InfoPane tp = new InfoPane();
+    JScrollPane sp = new JScrollPane(tp);
+    private MetaData md;
+    private MetaData mdSecondary;
+    ArrayList<MetaDataChangeUnit> changes = new ArrayList<MetaDataChangeUnit>();
+
+    public MetaDataChange(MetaData md, MetaData mdSecondary) {
+        super(Globals.lang("Metadata change"));
+        this.md = md;
+        this.mdSecondary = mdSecondary;
+
+        tp.setText("<html>"+Globals.lang("Metadata change")+"</html>");
+    }
+
+    public int getChangeCount() {
+        return changes.size();
+    }
+
+    public void insertMetaDataAddition(String key, Vector<String> value) {
+        changes.add(new MetaDataChangeUnit(ADD, key, value));
+    }
+
+    public void insertMetaDataRemoval(String key) {
+        changes.add(new MetaDataChangeUnit(REMOVE, key, null));
+    }
+
+    public void insertMetaDataChange(String key, Vector<String> value) {
+        changes.add(new MetaDataChangeUnit(MODIFY, key, value));
+    }
+
+    JComponent description() {
+        StringBuilder sb = new StringBuilder("<html>"+Globals.lang("Changes have been made to the following metadata elements")+":<p>");
+        for (Iterator<MetaDataChangeUnit> iterator = changes.iterator(); iterator.hasNext();) {
+            MetaDataChangeUnit unit = iterator.next();
+            sb.append("<br>  ");
+            sb.append(unit.key);
+            /*switch (unit.type) {
+                case ADD:
+                    sb.append("<p>Added: "+unit.key);
+                    break;
+                case REMOVE:
+                    sb.append("<p>Removed: "+unit.key);
+                    break;
+                case MODIFY:
+                    sb.append("<p>Modified: "+unit.key);
+                    break;
+            }*/
+        }
+        sb.append("</html>");
+        tp.setText(sb.toString());
+        return sp;
+    }
+
+    public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
+        for (Iterator<MetaDataChangeUnit> iterator = changes.iterator(); iterator.hasNext();) {
+            MetaDataChangeUnit unit = iterator.next();
+            switch (unit.type) {
+                case ADD:
+                    md.putData(unit.key, unit.value);
+                    mdSecondary.putData(unit.key, unit.value);
+                    break;
+                case REMOVE:
+                    md.remove(unit.key);
+                    mdSecondary.remove(unit.key);
+                    break;
+                case MODIFY:
+                    md.putData(unit.key, unit.value);
+                    mdSecondary.putData(unit.key, unit.value);
+                    break;
+            }
+        }
+        return true;
+    }
+
+    class MetaDataChangeUnit {
+        int type;
+        String key;
+        Vector<String> value;
+
+        public MetaDataChangeUnit(int type, String key, Vector<String> value) {
+            this.type = type;
+            this.key = key;
+            this.value = value;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/collab/PreambleChange.java b/src/java/net/sf/jabref/collab/PreambleChange.java
index 6af30f8..89225ae 100644
--- a/src/java/net/sf/jabref/collab/PreambleChange.java
+++ b/src/java/net/sf/jabref/collab/PreambleChange.java
@@ -1,65 +1,65 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import javax.swing.JComponent;
-import javax.swing.JScrollPane;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Globals;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoablePreambleChange;
-
-public class PreambleChange extends Change {
-
-  String tmp, mem, disk;
-  InfoPane tp = new InfoPane();
-  JScrollPane sp = new JScrollPane(tp);
-
-  public PreambleChange(String tmp, String mem, String disk) {
-    super("Changed preamble");
-    this.disk = disk;
-    this.mem = mem;
-    this.tmp = tmp;
-
-    StringBuffer text = new StringBuffer();
-    text.append("<FONT SIZE=3>");
-      text.append("<H2>").append(Globals.lang("Changed preamble")).append("</H2>");
-
-    if ((disk != null) && !disk.equals(""))
-        text.append("<H3>").append(Globals.lang("Value set externally")).append(":</H3>" + "<CODE>").append(disk).append("</CODE>");
-    else
-        text.append("<H3>").append(Globals.lang("Value cleared externally")).append("</H3>");
-
-    if ((mem != null) && !mem.equals(""))
-        text.append("<H3>").append(Globals.lang("Current value")).append(":</H3>" + "<CODE>").append(mem).append("</CODE>");
-
-      //tp.setContentType("text/html");
-      tp.setText(text.toString());
-  }
-
-  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
-      panel.database().setPreamble(disk);
-      undoEdit.addEdit(new UndoablePreambleChange(panel.database(), panel, mem, disk));
-      secondary.setPreamble(disk);
-      return true;
-  }
-
-  JComponent description() {
-    return sp;
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import javax.swing.JComponent;
+import javax.swing.JScrollPane;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Globals;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoablePreambleChange;
+
+public class PreambleChange extends Change {
+
+  String tmp, mem, disk;
+  InfoPane tp = new InfoPane();
+  JScrollPane sp = new JScrollPane(tp);
+
+  public PreambleChange(String tmp, String mem, String disk) {
+    super("Changed preamble");
+    this.disk = disk;
+    this.mem = mem;
+    this.tmp = tmp;
+
+    StringBuffer text = new StringBuffer();
+    text.append("<FONT SIZE=3>");
+      text.append("<H2>").append(Globals.lang("Changed preamble")).append("</H2>");
+
+    if ((disk != null) && !disk.equals(""))
+        text.append("<H3>").append(Globals.lang("Value set externally")).append(":</H3>" + "<CODE>").append(disk).append("</CODE>");
+    else
+        text.append("<H3>").append(Globals.lang("Value cleared externally")).append("</H3>");
+
+    if ((mem != null) && !mem.equals(""))
+        text.append("<H3>").append(Globals.lang("Current value")).append(":</H3>" + "<CODE>").append(mem).append("</CODE>");
+
+      //tp.setContentType("text/html");
+      tp.setText(text.toString());
+  }
+
+  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
+      panel.database().setPreamble(disk);
+      undoEdit.addEdit(new UndoablePreambleChange(panel.database(), panel, mem, disk));
+      secondary.setPreamble(disk);
+      return true;
+  }
+
+  JComponent description() {
+    return sp;
+  }
+}
diff --git a/src/java/net/sf/jabref/collab/StringAddChange.java b/src/java/net/sf/jabref/collab/StringAddChange.java
index 0a1ac27..a794afa 100644
--- a/src/java/net/sf/jabref/collab/StringAddChange.java
+++ b/src/java/net/sf/jabref/collab/StringAddChange.java
@@ -1,79 +1,79 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import javax.swing.JComponent;
-import javax.swing.JScrollPane;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableInsertString;
-
-public class StringAddChange extends Change {
-
-  BibtexString string;
-
-  InfoPane tp = new InfoPane();
-  JScrollPane sp = new JScrollPane(tp);
-
-  public StringAddChange(BibtexString string) {
-    name = Globals.lang("Added string")+": '"+string.getName()+"'";
-    this.string = string;
-
-    StringBuffer sb = new StringBuffer();
-    sb.append("<HTML><H2>");
-    sb.append(Globals.lang("Added string"));
-    sb.append("</H2><H3>");
-      sb.append(Globals.lang("Label")).append(":</H3>");
-    sb.append(string.getName());
-    sb.append("<H3>");
-      sb.append(Globals.lang("Content")).append(":</H3>");
-    sb.append(string.getContent());
-    sb.append("</HTML>");
-    tp.setText(sb.toString());
-
-  }
-
-  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
-
-    if (panel.database().hasStringLabel(string.getName())) {
-      // The name to change to is already in the database, so we can't comply.
-      Globals.logger("Cannot add string '"+string.getName()+"' because the name "
-                     +"is already in use.");
-    }
-
-    try {
-      panel.database().addString(string);
-      undoEdit.addEdit(new UndoableInsertString(panel, panel.database(), string));
-    } catch (KeyCollisionException ex) {
-      Globals.logger("Error: could not add string '"+string.getName()+"': "+ex.getMessage());
-    }
-    try {
-        secondary.addString(new BibtexString(Util.createNeutralId(), string.getName(),
-                string.getContent()));
-    } catch (KeyCollisionException ex) {
-        Globals.logger("Error: could not add string '"+string.getName()+"' to tmp database: "+ex.getMessage());
-    }
-    return true;
-  }
-
-
-  JComponent description() {
-    return sp;
-  }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import javax.swing.JComponent;
+import javax.swing.JScrollPane;
+
+import net.sf.jabref.*;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableInsertString;
+
+public class StringAddChange extends Change {
+
+  BibtexString string;
+
+  InfoPane tp = new InfoPane();
+  JScrollPane sp = new JScrollPane(tp);
+
+  public StringAddChange(BibtexString string) {
+    name = Globals.lang("Added string")+": '"+string.getName()+"'";
+    this.string = string;
+
+    StringBuffer sb = new StringBuffer();
+    sb.append("<HTML><H2>");
+    sb.append(Globals.lang("Added string"));
+    sb.append("</H2><H3>");
+      sb.append(Globals.lang("Label")).append(":</H3>");
+    sb.append(string.getName());
+    sb.append("<H3>");
+      sb.append(Globals.lang("Content")).append(":</H3>");
+    sb.append(string.getContent());
+    sb.append("</HTML>");
+    tp.setText(sb.toString());
+
+  }
+
+  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
+
+    if (panel.database().hasStringLabel(string.getName())) {
+      // The name to change to is already in the database, so we can't comply.
+      Globals.logger("Cannot add string '"+string.getName()+"' because the name "
+                     +"is already in use.");
+    }
+
+    try {
+      panel.database().addString(string);
+      undoEdit.addEdit(new UndoableInsertString(panel, panel.database(), string));
+    } catch (KeyCollisionException ex) {
+      Globals.logger("Error: could not add string '"+string.getName()+"': "+ex.getMessage());
+    }
+    try {
+        secondary.addString(new BibtexString(Util.createNeutralId(), string.getName(),
+                string.getContent()));
+    } catch (KeyCollisionException ex) {
+        Globals.logger("Error: could not add string '"+string.getName()+"' to tmp database: "+ex.getMessage());
+    }
+    return true;
+  }
+
+
+  JComponent description() {
+    return sp;
+  }
+
+
+}
diff --git a/src/java/net/sf/jabref/collab/StringChange.java b/src/java/net/sf/jabref/collab/StringChange.java
index 38139eb..10b9221 100644
--- a/src/java/net/sf/jabref/collab/StringChange.java
+++ b/src/java/net/sf/jabref/collab/StringChange.java
@@ -1,103 +1,103 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import javax.swing.JComponent;
-import javax.swing.JScrollPane;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableInsertString;
-import net.sf.jabref.undo.UndoableStringChange;
-
-public class StringChange extends Change {
-
-  BibtexString string;
-  String mem, tmp, disk, label;
-
-  InfoPane tp = new InfoPane();
-  JScrollPane sp = new JScrollPane(tp);
-    private BibtexString tmpString;
-
-    public StringChange(BibtexString string, BibtexString tmpString, String label,
-                      String mem, String tmp, String disk) {
-        this.tmpString = tmpString;
-        name = Globals.lang("Modified string")+": '"+label+"'";
-    this.string = string;
-    this.label = label;
-    this.mem = mem;
-    this.tmp = tmp;
-    this.disk = disk;
-
-    StringBuffer sb = new StringBuffer();
-    sb.append("<HTML><H2>");
-    sb.append(Globals.lang("Modified string"));
-    sb.append("</H2><H3>");
-      sb.append(Globals.lang("Label")).append(":</H3>");
-    sb.append(label);
-    sb.append("<H3>");
-      sb.append(Globals.lang("New content")).append(":</H3>");
-    sb.append(disk);
-    if (string != null) {
-      sb.append("<H3>");
-        sb.append(Globals.lang("Current content")).append(":</H3>");
-      sb.append(string.getContent());
-    } else {
-      sb.append("<P><I>");
-        sb.append(Globals.lang("Cannot merge this change")).append(": ");
-        sb.append(Globals.lang("The string has been removed locally")).append("</I>");
-    }
-    sb.append("</HTML>");
-    tp.setText(sb.toString());
-  }
-
-  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
-    if (string != null) {
-      string.setContent(disk);
-      undoEdit.addEdit(new UndoableStringChange(panel, string, false, mem, disk));
-        // Update tmp databse:
-
-    } else {
-      // The string was removed or renamed locally. We guess that it was removed.
-	String newId = Util.createNeutralId();
-	BibtexString bs = new BibtexString(newId, label, disk);
-	try {
-	    panel.database().addString(bs);
-	    undoEdit.addEdit(new UndoableInsertString(panel, panel.database(), bs));
-	} catch (KeyCollisionException ex) {
-	    Globals.logger("Error: could not add string '"+string.getName()+"': "+ex.getMessage());
-	}
-    }
-
-      // Update tmp database:
-      if (tmpString != null) {
-          tmpString.setContent(disk);
-      }
-      else {
-          BibtexString bs = new BibtexString(Util.createNeutralId(), label, disk);
-          secondary.addString(bs);
-      }
-
-      return true;
-  }
-
-
-  JComponent description() {
-    return sp;
-  }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import javax.swing.JComponent;
+import javax.swing.JScrollPane;
+
+import net.sf.jabref.*;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableInsertString;
+import net.sf.jabref.undo.UndoableStringChange;
+
+public class StringChange extends Change {
+
+  BibtexString string;
+  String mem, tmp, disk, label;
+
+  InfoPane tp = new InfoPane();
+  JScrollPane sp = new JScrollPane(tp);
+    private BibtexString tmpString;
+
+    public StringChange(BibtexString string, BibtexString tmpString, String label,
+                      String mem, String tmp, String disk) {
+        this.tmpString = tmpString;
+        name = Globals.lang("Modified string")+": '"+label+"'";
+    this.string = string;
+    this.label = label;
+    this.mem = mem;
+    this.tmp = tmp;
+    this.disk = disk;
+
+    StringBuffer sb = new StringBuffer();
+    sb.append("<HTML><H2>");
+    sb.append(Globals.lang("Modified string"));
+    sb.append("</H2><H3>");
+      sb.append(Globals.lang("Label")).append(":</H3>");
+    sb.append(label);
+    sb.append("<H3>");
+      sb.append(Globals.lang("New content")).append(":</H3>");
+    sb.append(disk);
+    if (string != null) {
+      sb.append("<H3>");
+        sb.append(Globals.lang("Current content")).append(":</H3>");
+      sb.append(string.getContent());
+    } else {
+      sb.append("<P><I>");
+        sb.append(Globals.lang("Cannot merge this change")).append(": ");
+        sb.append(Globals.lang("The string has been removed locally")).append("</I>");
+    }
+    sb.append("</HTML>");
+    tp.setText(sb.toString());
+  }
+
+  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
+    if (string != null) {
+      string.setContent(disk);
+      undoEdit.addEdit(new UndoableStringChange(panel, string, false, mem, disk));
+        // Update tmp databse:
+
+    } else {
+      // The string was removed or renamed locally. We guess that it was removed.
+	String newId = Util.createNeutralId();
+	BibtexString bs = new BibtexString(newId, label, disk);
+	try {
+	    panel.database().addString(bs);
+	    undoEdit.addEdit(new UndoableInsertString(panel, panel.database(), bs));
+	} catch (KeyCollisionException ex) {
+	    Globals.logger("Error: could not add string '"+string.getName()+"': "+ex.getMessage());
+	}
+    }
+
+      // Update tmp database:
+      if (tmpString != null) {
+          tmpString.setContent(disk);
+      }
+      else {
+          BibtexString bs = new BibtexString(Util.createNeutralId(), label, disk);
+          secondary.addString(bs);
+      }
+
+      return true;
+  }
+
+
+  JComponent description() {
+    return sp;
+  }
+
+
+}
diff --git a/src/java/net/sf/jabref/collab/StringNameChange.java b/src/java/net/sf/jabref/collab/StringNameChange.java
index 3fd4a25..210b2a5 100644
--- a/src/java/net/sf/jabref/collab/StringNameChange.java
+++ b/src/java/net/sf/jabref/collab/StringNameChange.java
@@ -1,87 +1,87 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableInsertString;
-import net.sf.jabref.undo.UndoableStringChange;
-
-public class StringNameChange extends Change {
-
-  BibtexString string;
-  String mem, tmp, disk, content;
-    private BibtexString tmpString;
-
-    public StringNameChange(BibtexString string, BibtexString tmpString,
-                          String mem, String tmp, String disk, String content) {
-        this.tmpString = tmpString;
-        name = Globals.lang("Renamed string")+": '"+tmp+"'";
-    this.string = string;
-    this.content = content;
-    this.mem = mem;
-    this.tmp = tmp;
-    this.disk = disk;
-
-  }
-
-  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
-
-    if (panel.database().hasStringLabel(disk)) {
-      // The name to change to is already in the database, so we can't comply.
-      Globals.logger("Cannot rename string '"+mem+"' to '"+disk+"' because the name "
-                     +"is already in use.");
-    }
-
-    if (string != null) {
-      string.setName(disk);
-      undoEdit.addEdit(new UndoableStringChange(panel, string, true, mem,
-                                                disk));
-    } else {
-      // The string was removed or renamed locally. We guess that it was removed.
-	String newId = Util.createNeutralId();
-	BibtexString bs = new BibtexString(newId, disk, content);
-      try {
-        panel.database().addString(bs);
-        undoEdit.addEdit(new UndoableInsertString(panel, panel.database(), bs));
-      } catch (KeyCollisionException ex) {
-        Globals.logger("Error: could not add string '"+bs.getName()+"': "+ex.getMessage());
-      }
-    }
-
-      // Update tmp database:
-      if (tmpString != null) {
-          tmpString.setName(disk);
-      }
-      else {
-          String newId = Util.createNeutralId();
-	      BibtexString bs = new BibtexString(newId, disk, content);
-          secondary.addString(bs);
-      }
-
-      return true;
-  }
-
-
-  JComponent description() {
-    return new JLabel(disk+" : "+content);
-  }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+
+import net.sf.jabref.*;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableInsertString;
+import net.sf.jabref.undo.UndoableStringChange;
+
+public class StringNameChange extends Change {
+
+  BibtexString string;
+  String mem, tmp, disk, content;
+    private BibtexString tmpString;
+
+    public StringNameChange(BibtexString string, BibtexString tmpString,
+                          String mem, String tmp, String disk, String content) {
+        this.tmpString = tmpString;
+        name = Globals.lang("Renamed string")+": '"+tmp+"'";
+    this.string = string;
+    this.content = content;
+    this.mem = mem;
+    this.tmp = tmp;
+    this.disk = disk;
+
+  }
+
+  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
+
+    if (panel.database().hasStringLabel(disk)) {
+      // The name to change to is already in the database, so we can't comply.
+      Globals.logger("Cannot rename string '"+mem+"' to '"+disk+"' because the name "
+                     +"is already in use.");
+    }
+
+    if (string != null) {
+      string.setName(disk);
+      undoEdit.addEdit(new UndoableStringChange(panel, string, true, mem,
+                                                disk));
+    } else {
+      // The string was removed or renamed locally. We guess that it was removed.
+	String newId = Util.createNeutralId();
+	BibtexString bs = new BibtexString(newId, disk, content);
+      try {
+        panel.database().addString(bs);
+        undoEdit.addEdit(new UndoableInsertString(panel, panel.database(), bs));
+      } catch (KeyCollisionException ex) {
+        Globals.logger("Error: could not add string '"+bs.getName()+"': "+ex.getMessage());
+      }
+    }
+
+      // Update tmp database:
+      if (tmpString != null) {
+          tmpString.setName(disk);
+      }
+      else {
+          String newId = Util.createNeutralId();
+	      BibtexString bs = new BibtexString(newId, disk, content);
+          secondary.addString(bs);
+      }
+
+      return true;
+  }
+
+
+  JComponent description() {
+    return new JLabel(disk+" : "+content);
+  }
+
+
+}
diff --git a/src/java/net/sf/jabref/collab/StringRemoveChange.java b/src/java/net/sf/jabref/collab/StringRemoveChange.java
index 130b9be..d864092 100644
--- a/src/java/net/sf/jabref/collab/StringRemoveChange.java
+++ b/src/java/net/sf/jabref/collab/StringRemoveChange.java
@@ -1,78 +1,78 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.collab;
-
-import javax.swing.JComponent;
-import javax.swing.JScrollPane;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexString;
-import net.sf.jabref.Globals;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableRemoveString;
-
-public class StringRemoveChange extends Change {
-
-  BibtexString string, inMem;
-
-  InfoPane tp = new InfoPane();
-  JScrollPane sp = new JScrollPane(tp);
-    private BibtexString tmpString;
-
-
-    public StringRemoveChange(BibtexString string, BibtexString tmpString, BibtexString inMem) {
-        this.tmpString = tmpString;
-        name = Globals.lang("Removed string")+": '"+string.getName()+"'";
-    this.string = string;
-    this.inMem = inMem; // Holds the version in memory. Check if it has been modified...?
-
-    StringBuffer sb = new StringBuffer();
-    sb.append("<HTML><H2>");
-    sb.append(Globals.lang("Removed string"));
-    sb.append("</H2><H3>");
-      sb.append(Globals.lang("Label")).append(":</H3>");
-    sb.append(string.getName());
-    sb.append("<H3>");
-      sb.append(Globals.lang("Content")).append(":</H3>");
-    sb.append(string.getContent());
-    sb.append("</HTML>");
-    tp.setText(sb.toString());
-
-  }
-
-  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
-
-    try {
-      panel.database().removeString(inMem.getId());
-      undoEdit.addEdit(new UndoableRemoveString(panel, panel.database(), string));
-    } catch (Exception ex) {
-      Globals.logger("Error: could not add string '"+string.getName()+"': "+ex.getMessage());
-    }
-
-      // Update tmp database:
-      secondary.removeString(tmpString.getId());
-
-      return true;
-  }
-
-
-  JComponent description() {
-    return sp;
-  }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.collab;
+
+import javax.swing.JComponent;
+import javax.swing.JScrollPane;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexString;
+import net.sf.jabref.Globals;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableRemoveString;
+
+public class StringRemoveChange extends Change {
+
+  BibtexString string, inMem;
+
+  InfoPane tp = new InfoPane();
+  JScrollPane sp = new JScrollPane(tp);
+    private BibtexString tmpString;
+
+
+    public StringRemoveChange(BibtexString string, BibtexString tmpString, BibtexString inMem) {
+        this.tmpString = tmpString;
+        name = Globals.lang("Removed string")+": '"+string.getName()+"'";
+    this.string = string;
+    this.inMem = inMem; // Holds the version in memory. Check if it has been modified...?
+
+    StringBuffer sb = new StringBuffer();
+    sb.append("<HTML><H2>");
+    sb.append(Globals.lang("Removed string"));
+    sb.append("</H2><H3>");
+      sb.append(Globals.lang("Label")).append(":</H3>");
+    sb.append(string.getName());
+    sb.append("<H3>");
+      sb.append(Globals.lang("Content")).append(":</H3>");
+    sb.append(string.getContent());
+    sb.append("</HTML>");
+    tp.setText(sb.toString());
+
+  }
+
+  public boolean makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
+
+    try {
+      panel.database().removeString(inMem.getId());
+      undoEdit.addEdit(new UndoableRemoveString(panel, panel.database(), string));
+    } catch (Exception ex) {
+      Globals.logger("Error: could not add string '"+string.getName()+"': "+ex.getMessage());
+    }
+
+      // Update tmp database:
+      secondary.removeString(tmpString.getId());
+
+      return true;
+  }
+
+
+  JComponent description() {
+    return sp;
+  }
+
+
+}
diff --git a/src/java/net/sf/jabref/export/AutoSaveManager.java b/src/java/net/sf/jabref/export/AutoSaveManager.java
index 6c5f75d..c65c030 100644
--- a/src/java/net/sf/jabref/export/AutoSaveManager.java
+++ b/src/java/net/sf/jabref/export/AutoSaveManager.java
@@ -1,145 +1,145 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Globals;
-
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.List;
-import java.util.ArrayList;
-import java.io.File;
-
-/**
- * Background task and utilities for autosave feature.
- */
-public class AutoSaveManager {
-    private JabRefFrame frame;
-    private Timer t = null;
-    private TimerTask task = null;
-
-    public AutoSaveManager(JabRefFrame frame) {
-
-        this.frame = frame;
-    }
-
-    public void startAutoSaveTimer() {
-        task = new AutoSaveTask();
-        t = new Timer();
-        long interval = (long)(60000*Globals.prefs.getInt("autoSaveInterval"));
-        t.scheduleAtFixedRate(task, interval, interval);
-    }
-
-    public void stopAutoSaveTimer() {
-        t.cancel();
-    }
-
-    class AutoSaveTask extends TimerTask {
-        public void run() {
-            // Since this method is running in the background, we must be prepared that
-            // there could be changes done by the user while this method is running.
-
-            List<BasePanel> panels = new ArrayList<BasePanel>();
-            for (int i=0; i<frame.baseCount(); i++)
-                panels.add(frame.baseAt(i));
-
-            int i=0;
-            for (BasePanel panel : panels) {
-                if (panel.isBaseChanged()) {
-                    if (panel.getFile() != null) {
-                        autoSave(panel);
-                    }
-                }
-                else {
-                }
-                i++;
-            }
-        }
-    }
-
-    /**
-     * Get a File object pointing to the autosave file corresponding to the given file.
-     * @param f The database file.
-     * @return its corresponding autosave file.
-     */
-    public static File getAutoSaveFile(File f) {
-        String n = f.getName();
-        return new File(f.getParentFile(), ".$"+n+"$");
-    }
-
-    /**
-     * Perform an autosave.
-     * @param panel The BasePanel to autosave for.
-     * @return true if successful, false otherwise.
-     */
-    public static boolean autoSave(BasePanel panel) {
-        File backupFile = getAutoSaveFile(panel.getFile());
-        try {
-            SaveSession ss = FileActions.saveDatabase(panel.database(), panel.metaData(),
-                    backupFile, Globals.prefs,
-                    false, false, panel.getEncoding(), true);
-            ss.commit();
-        } catch (SaveException e) {
-            e.printStackTrace();
-            return false;
-        } catch (Throwable ex) {
-            ex.printStackTrace();
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Delete this BasePanel's autosave if it exists.
-     * @param panel The BasePanel in question.
-     * @return true if there was no autosave or if the autosave was successfully deleted, false otherwise.
-     */
-    public static boolean deleteAutoSaveFile(BasePanel panel) {
-        if (panel.getFile() == null)
-            return true;
-        File backupFile = getAutoSaveFile(panel.getFile());
-        if (backupFile.exists()) {
-            return backupFile.delete();
-        }
-        else return true;
-    }
-
-    /**
-     * Clean up by deleting the autosave files corresponding to all open files,
-     * if they exist.
-     */
-    public void clearAutoSaves() {
-        List<BasePanel> panels = new ArrayList<BasePanel>();
-        for (int i=0; i<frame.baseCount(); i++)
-            panels.add(frame.baseAt(i));
-        for (BasePanel panel : panels) {
-            deleteAutoSaveFile(panel);
-        }
-    }
-
-    /**
-     * Check if a newer autosave exists for the given file.
-     * @param f The file to check.
-     * @return true if an autosave is found, and if the autosave is newer
-     *   than the given file.
-     */
-    public static boolean newerAutoSaveExists(File f) {
-        File asFile = getAutoSaveFile(f);
-        return asFile.exists() && (asFile.lastModified() > f.lastModified());
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Globals;
+
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.List;
+import java.util.ArrayList;
+import java.io.File;
+
+/**
+ * Background task and utilities for autosave feature.
+ */
+public class AutoSaveManager {
+    private JabRefFrame frame;
+    private Timer t = null;
+    private TimerTask task = null;
+
+    public AutoSaveManager(JabRefFrame frame) {
+
+        this.frame = frame;
+    }
+
+    public void startAutoSaveTimer() {
+        task = new AutoSaveTask();
+        t = new Timer();
+        long interval = (long)(60000*Globals.prefs.getInt("autoSaveInterval"));
+        t.scheduleAtFixedRate(task, interval, interval);
+    }
+
+    public void stopAutoSaveTimer() {
+        t.cancel();
+    }
+
+    class AutoSaveTask extends TimerTask {
+        public void run() {
+            // Since this method is running in the background, we must be prepared that
+            // there could be changes done by the user while this method is running.
+
+            List<BasePanel> panels = new ArrayList<BasePanel>();
+            for (int i=0; i<frame.baseCount(); i++)
+                panels.add(frame.baseAt(i));
+
+            int i=0;
+            for (BasePanel panel : panels) {
+                if (panel.isBaseChanged()) {
+                    if (panel.getFile() != null) {
+                        autoSave(panel);
+                    }
+                }
+                else {
+                }
+                i++;
+            }
+        }
+    }
+
+    /**
+     * Get a File object pointing to the autosave file corresponding to the given file.
+     * @param f The database file.
+     * @return its corresponding autosave file.
+     */
+    public static File getAutoSaveFile(File f) {
+        String n = f.getName();
+        return new File(f.getParentFile(), ".$"+n+"$");
+    }
+
+    /**
+     * Perform an autosave.
+     * @param panel The BasePanel to autosave for.
+     * @return true if successful, false otherwise.
+     */
+    public static boolean autoSave(BasePanel panel) {
+        File backupFile = getAutoSaveFile(panel.getFile());
+        try {
+            SaveSession ss = FileActions.saveDatabase(panel.database(), panel.metaData(),
+                    backupFile, Globals.prefs,
+                    false, false, panel.getEncoding(), true);
+            ss.commit();
+        } catch (SaveException e) {
+            e.printStackTrace();
+            return false;
+        } catch (Throwable ex) {
+            ex.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Delete this BasePanel's autosave if it exists.
+     * @param panel The BasePanel in question.
+     * @return true if there was no autosave or if the autosave was successfully deleted, false otherwise.
+     */
+    public static boolean deleteAutoSaveFile(BasePanel panel) {
+        if (panel.getFile() == null)
+            return true;
+        File backupFile = getAutoSaveFile(panel.getFile());
+        if (backupFile.exists()) {
+            return backupFile.delete();
+        }
+        else return true;
+    }
+
+    /**
+     * Clean up by deleting the autosave files corresponding to all open files,
+     * if they exist.
+     */
+    public void clearAutoSaves() {
+        List<BasePanel> panels = new ArrayList<BasePanel>();
+        for (int i=0; i<frame.baseCount(); i++)
+            panels.add(frame.baseAt(i));
+        for (BasePanel panel : panels) {
+            deleteAutoSaveFile(panel);
+        }
+    }
+
+    /**
+     * Check if a newer autosave exists for the given file.
+     * @param f The file to check.
+     * @return true if an autosave is found, and if the autosave is newer
+     *   than the given file.
+     */
+    public static boolean newerAutoSaveExists(File f) {
+        File asFile = getAutoSaveFile(f);
+        return asFile.exists() && (asFile.lastModified() > f.lastModified());
+    }
+}
diff --git a/src/java/net/sf/jabref/export/CustomExportDialog.java b/src/java/net/sf/jabref/export/CustomExportDialog.java
index 83bbdab..20e990a 100644
--- a/src/java/net/sf/jabref/export/CustomExportDialog.java
+++ b/src/java/net/sf/jabref/export/CustomExportDialog.java
@@ -1,215 +1,215 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.awt.BorderLayout;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-
-import javax.swing.*;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.Util;
-import net.sf.jabref.gui.FileDialogs;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-/**
- * Dialog for creating or modifying custom exports.
- */
-class CustomExportDialog extends JDialog {
-
-    JTextField
-    name = new JTextField(60),
-    layoutFile = new JTextField(60),
-    extension = new JTextField(60);
-    JLabel
-    nl = new JLabel(Globals.lang("Export name")+":"),
-    nr = new JLabel(Globals.lang("Main layout file")+":"),
-    nf = new JLabel(Globals.lang("File extension")+":");
-    JButton
-        ok = new JButton(Globals.lang("Ok")),
-        cancel = new JButton(Globals.lang("Cancel")),
-        browse = new JButton(Globals.lang("Browse"));
-    JPanel
-    main = new JPanel(),
-    buttons = new JPanel();
-    private boolean ok_pressed = false;
-    private int index;
-    private JabRefFrame parent;
-
-    private String oldName, oldRegexp, oldField;
-
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-
-
-    public CustomExportDialog(JabRefFrame parent_, String name_, String layoutFile_, String extension_) {
-      this(parent_);
-      name.setText(name_);
-      layoutFile.setText(layoutFile_);
-      extension.setText(extension_);
-    }
-
-
-    public CustomExportDialog(JabRefFrame parent_) {
-    super(parent_, Globals.lang("Edit custom export"), true);
-    parent = parent_;
-    ActionListener okListener = new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-
-            // Check that there are no empty strings.
-            if ((layoutFile.getText().equals("")) ||
-            (name.getText().equals("")) ||
-            (extension.getText().equals("")) ||
-                        (!layoutFile.getText().endsWith(".layout"))) {
-            //JOptionPane.showMessageDialog
-            //    (parent, Globals.lang("You must provide a name, a search "
-            //			  +"string and a field name for this group."),
-            //			  Globals.lang("Create group"),
-            //     JOptionPane.ERROR_MESSAGE);
-            return;
-            }
-
-            // Handling of : and ; must also be done.
-
-            ok_pressed = true;
-            dispose();
-        }
-        };
-    ok.addActionListener(okListener);
-    name.addActionListener(okListener);
-    layoutFile.addActionListener(okListener);
-    extension.addActionListener(okListener);
-
-    AbstractAction cancelAction = new AbstractAction() {
-          public void actionPerformed(ActionEvent e) {
-              dispose();
-        }
-        };
-
-    cancel.addActionListener(cancelAction);
-
-        browse.addActionListener(new ActionListener() {
-          public void actionPerformed(ActionEvent e) {
-            File directory = new File(Globals.prefs.get("exportWorkingDirectory"));
-            String chosenStr = FileDialogs.getNewFile(parent, directory, ".layout",
-                                             JFileChooser.OPEN_DIALOG, false);
-            if (chosenStr == null) return;
-            File chosen = new File(chosenStr);
-
-            // Update working directory for layout files.
-            Globals.prefs.put("exportWorkingDirectory", chosen.getParent());
-
-            layoutFile.setText(chosen.getPath());
-          }
-        });
-
-        // Key bindings:
-        ActionMap am = main.getActionMap();
-        InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(parent.prefs().getKey("Close dialog"), "close");
-    am.put("close", cancelAction);
-
-
-    // Layout starts here.
-    main.setLayout(gbl);
-    main.setBorder(BorderFactory.createTitledBorder
-               (BorderFactory.createEtchedBorder(),
-            Globals.lang("Export properties")));
-
-    // Main panel:
-    con.weightx = 0;
-    con.gridwidth = 1;
-    con.insets = new Insets(3, 5, 3, 5);
-    con.anchor = GridBagConstraints.EAST;
-    con.fill = GridBagConstraints.NONE;
-    con.gridx = 0;
-    con.gridy = 0;
-    gbl.setConstraints(nl, con);
-    main.add(nl);
-    con.gridy = 1;
-    gbl.setConstraints(nr, con);
-    main.add(nr);
-    con.gridy = 2;
-    gbl.setConstraints(nf, con);
-    main.add(nf);
-
-        con.gridwidth = 2;
-        con.weightx = 1;
-    con.anchor = GridBagConstraints.WEST;
-    con.fill = GridBagConstraints.HORIZONTAL;
-    con.gridy = 0;
-    con.gridx = 1;
-    gbl.setConstraints(name, con);
-    main.add(name);
-    con.gridy = 1;
-        con.gridwidth = 1;
-        gbl.setConstraints(layoutFile, con);
-    main.add(layoutFile);
-        con.gridx = 2;
-        con.weightx = 0;
-        gbl.setConstraints(browse, con);
-        main.add(browse);
-        con.weightx = 1;
-        con.gridwidth = 2;
-        con.gridx = 1;
-    con.gridy = 2;
-    gbl.setConstraints(extension, con);
-    main.add(extension);
-
-    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
-    buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
-    bb.addGlue();
-    bb.addButton(ok);
-    bb.addButton(cancel);
-    bb.addGlue();
-    
-    getContentPane().add(main, BorderLayout.CENTER);
-    getContentPane().add(buttons, BorderLayout.SOUTH);
-
-    //pack();
-    setSize(600, 170);
-
-        Util.placeDialog(this, parent);
-    }
-
-    public boolean okPressed() {
-    return ok_pressed;
-    }
-
-    public int index() { return index; }
-    public String oldField() { return oldField; }
-    public String oldName() { return oldName; }
-    public String oldRegexp() { return oldRegexp; }
-    public String layoutFile() { return layoutFile.getText(); }
-    public String name() { return name.getText(); }
-    public String extension() {
-      String ext = extension.getText();
-      if (ext.startsWith("."))
-        return ext;
-      else if (ext.startsWith("*."))
-        return ext.substring(1);
-      else
-        return "."+ext;
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+
+import javax.swing.*;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.Util;
+import net.sf.jabref.gui.FileDialogs;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+/**
+ * Dialog for creating or modifying custom exports.
+ */
+class CustomExportDialog extends JDialog {
+
+    JTextField
+    name = new JTextField(60),
+    layoutFile = new JTextField(60),
+    extension = new JTextField(60);
+    JLabel
+    nl = new JLabel(Globals.lang("Export name")+":"),
+    nr = new JLabel(Globals.lang("Main layout file")+":"),
+    nf = new JLabel(Globals.lang("File extension")+":");
+    JButton
+        ok = new JButton(Globals.lang("Ok")),
+        cancel = new JButton(Globals.lang("Cancel")),
+        browse = new JButton(Globals.lang("Browse"));
+    JPanel
+    main = new JPanel(),
+    buttons = new JPanel();
+    private boolean ok_pressed = false;
+    private int index;
+    private JabRefFrame parent;
+
+    private String oldName, oldRegexp, oldField;
+
+    GridBagLayout gbl = new GridBagLayout();
+    GridBagConstraints con = new GridBagConstraints();
+
+
+    public CustomExportDialog(JabRefFrame parent_, String name_, String layoutFile_, String extension_) {
+      this(parent_);
+      name.setText(name_);
+      layoutFile.setText(layoutFile_);
+      extension.setText(extension_);
+    }
+
+
+    public CustomExportDialog(JabRefFrame parent_) {
+    super(parent_, Globals.lang("Edit custom export"), true);
+    parent = parent_;
+    ActionListener okListener = new ActionListener() {
+        public void actionPerformed(ActionEvent e) {
+
+            // Check that there are no empty strings.
+            if ((layoutFile.getText().equals("")) ||
+            (name.getText().equals("")) ||
+            (extension.getText().equals("")) ||
+                        (!layoutFile.getText().endsWith(".layout"))) {
+            //JOptionPane.showMessageDialog
+            //    (parent, Globals.lang("You must provide a name, a search "
+            //			  +"string and a field name for this group."),
+            //			  Globals.lang("Create group"),
+            //     JOptionPane.ERROR_MESSAGE);
+            return;
+            }
+
+            // Handling of : and ; must also be done.
+
+            ok_pressed = true;
+            dispose();
+        }
+        };
+    ok.addActionListener(okListener);
+    name.addActionListener(okListener);
+    layoutFile.addActionListener(okListener);
+    extension.addActionListener(okListener);
+
+    AbstractAction cancelAction = new AbstractAction() {
+          public void actionPerformed(ActionEvent e) {
+              dispose();
+        }
+        };
+
+    cancel.addActionListener(cancelAction);
+
+        browse.addActionListener(new ActionListener() {
+          public void actionPerformed(ActionEvent e) {
+            File directory = new File(Globals.prefs.get("exportWorkingDirectory"));
+            String chosenStr = FileDialogs.getNewFile(parent, directory, ".layout",
+                                             JFileChooser.OPEN_DIALOG, false);
+            if (chosenStr == null) return;
+            File chosen = new File(chosenStr);
+
+            // Update working directory for layout files.
+            Globals.prefs.put("exportWorkingDirectory", chosen.getParent());
+
+            layoutFile.setText(chosen.getPath());
+          }
+        });
+
+        // Key bindings:
+        ActionMap am = main.getActionMap();
+        InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(parent.prefs().getKey("Close dialog"), "close");
+    am.put("close", cancelAction);
+
+
+    // Layout starts here.
+    main.setLayout(gbl);
+    main.setBorder(BorderFactory.createTitledBorder
+               (BorderFactory.createEtchedBorder(),
+            Globals.lang("Export properties")));
+
+    // Main panel:
+    con.weightx = 0;
+    con.gridwidth = 1;
+    con.insets = new Insets(3, 5, 3, 5);
+    con.anchor = GridBagConstraints.EAST;
+    con.fill = GridBagConstraints.NONE;
+    con.gridx = 0;
+    con.gridy = 0;
+    gbl.setConstraints(nl, con);
+    main.add(nl);
+    con.gridy = 1;
+    gbl.setConstraints(nr, con);
+    main.add(nr);
+    con.gridy = 2;
+    gbl.setConstraints(nf, con);
+    main.add(nf);
+
+        con.gridwidth = 2;
+        con.weightx = 1;
+    con.anchor = GridBagConstraints.WEST;
+    con.fill = GridBagConstraints.HORIZONTAL;
+    con.gridy = 0;
+    con.gridx = 1;
+    gbl.setConstraints(name, con);
+    main.add(name);
+    con.gridy = 1;
+        con.gridwidth = 1;
+        gbl.setConstraints(layoutFile, con);
+    main.add(layoutFile);
+        con.gridx = 2;
+        con.weightx = 0;
+        gbl.setConstraints(browse, con);
+        main.add(browse);
+        con.weightx = 1;
+        con.gridwidth = 2;
+        con.gridx = 1;
+    con.gridy = 2;
+    gbl.setConstraints(extension, con);
+    main.add(extension);
+
+    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
+    buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+    bb.addGlue();
+    bb.addButton(ok);
+    bb.addButton(cancel);
+    bb.addGlue();
+    
+    getContentPane().add(main, BorderLayout.CENTER);
+    getContentPane().add(buttons, BorderLayout.SOUTH);
+
+    //pack();
+    setSize(600, 170);
+
+        Util.placeDialog(this, parent);
+    }
+
+    public boolean okPressed() {
+    return ok_pressed;
+    }
+
+    public int index() { return index; }
+    public String oldField() { return oldField; }
+    public String oldName() { return oldName; }
+    public String oldRegexp() { return oldRegexp; }
+    public String layoutFile() { return layoutFile.getText(); }
+    public String name() { return name.getText(); }
+    public String extension() {
+      String ext = extension.getText();
+      if (ext.startsWith("."))
+        return ext;
+      else if (ext.startsWith("*."))
+        return ext.substring(1);
+      else
+        return "."+ext;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/export/CustomExportList.java b/src/java/net/sf/jabref/export/CustomExportList.java
index 528774b..8b5efbe 100644
--- a/src/java/net/sf/jabref/export/CustomExportList.java
+++ b/src/java/net/sf/jabref/export/CustomExportList.java
@@ -1,134 +1,134 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.util.TreeSet;
-import java.util.Comparator;
-import java.util.TreeMap;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-import ca.odell.glazedlists.EventList;
-import ca.odell.glazedlists.SortedList;
-import ca.odell.glazedlists.BasicEventList;
-
-/**
- * This class handles user defined custom export formats. They are initially
- * read from Preferences, and kept alphabetically (sorted by name). Formats can
- * be added or removed. When modified, the sort() method must be called to make
- * sure the formats stay properly sorted. When the method store() is called,
- * export formats are written to Preferences.
- */
-
-public class CustomExportList {
-
-    private EventList<String[]> list;
-    private SortedList<String[]> sorted;
-    private TreeMap<String, ExportFormat> formats = new TreeMap<String, ExportFormat>();
-	private Object[] array;
-
-    public CustomExportList(Comparator<String[]> comp) {
-	    list = new BasicEventList<String[]>();
-        sorted = new SortedList<String[]>(list, comp);
-    }
-
-	public TreeMap<String, ExportFormat> getCustomExportFormats() {
-        formats.clear();
-        readPrefs();
-        return formats;
-	}
-
-    public int size() {
-        return list.size();
-    }
-
-    public EventList<String[]> getSortedList() {
-        return sorted;
-    }
-
-	private void readPrefs() {
-        formats.clear();
-        list.clear();
-        int i = 0;
-		String[] s;
-		while ((s = Globals.prefs.getStringArray("customExportFormat" + i)) != null) {
-            ExportFormat format = createFormat(s);
-            if (format != null) {
-                formats.put(format.getConsoleName(), format);
-    			list.add(s);
-            } else {
-            	String customExportFormat = Globals.prefs.get("customExportFormat" + i);
-                System.out.println(Globals.lang("Error initializing custom export format from string '%0'", customExportFormat));
-            }
-			i++;
-		}
-	}
-
-    private ExportFormat createFormat(String[] s) {
-        if (s.length < 3)
-            return null;
-		String lfFileName;
-		if (s[1].endsWith(".layout"))
-			lfFileName = s[1].substring(0, s[1].length() - 7);
-		else
-			lfFileName = s[1];
-		ExportFormat format = new ExportFormat(s[0], s[0], lfFileName, null,
-			s[2]);
-		format.setCustomExport(true);
-		return format;
-	}
-
-	public String[] getElementAt(int pos) {
-		return (String[]) (array[pos]);
-	}
-
-	public void addFormat(String[] s) {
-		list.add(s);
-		ExportFormat format = createFormat(s);
-		formats.put(format.getConsoleName(), format);
-	}
-
-	public void remove(String[] toRemove) {
-
-        ExportFormat format = createFormat(toRemove);
-        formats.remove(format.getConsoleName());
-        list.remove(toRemove);
-        
-	}
-
-	public void store() {
-
-		if (list.size() == 0)
-			purge(0);
-		else {
-			for (int i = 0; i < list.size(); i++) {
-				// System.out.println(i+"..");
-				Globals.prefs.putStringArray("customExportFormat" + i,
-					list.get(i));
-			}
-			purge(list.size());
-		}
-	}
-
-	private void purge(int from) {
-		int i = from;
-		while (Globals.prefs.getStringArray("customExportFormat" + i) != null) {
-			Globals.prefs.remove("customExportFormat" + i);
-			i++;
-		}
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.util.TreeSet;
+import java.util.Comparator;
+import java.util.TreeMap;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+import ca.odell.glazedlists.EventList;
+import ca.odell.glazedlists.SortedList;
+import ca.odell.glazedlists.BasicEventList;
+
+/**
+ * This class handles user defined custom export formats. They are initially
+ * read from Preferences, and kept alphabetically (sorted by name). Formats can
+ * be added or removed. When modified, the sort() method must be called to make
+ * sure the formats stay properly sorted. When the method store() is called,
+ * export formats are written to Preferences.
+ */
+
+public class CustomExportList {
+
+    private EventList<String[]> list;
+    private SortedList<String[]> sorted;
+    private TreeMap<String, ExportFormat> formats = new TreeMap<String, ExportFormat>();
+	private Object[] array;
+
+    public CustomExportList(Comparator<String[]> comp) {
+	    list = new BasicEventList<String[]>();
+        sorted = new SortedList<String[]>(list, comp);
+    }
+
+	public TreeMap<String, ExportFormat> getCustomExportFormats() {
+        formats.clear();
+        readPrefs();
+        return formats;
+	}
+
+    public int size() {
+        return list.size();
+    }
+
+    public EventList<String[]> getSortedList() {
+        return sorted;
+    }
+
+	private void readPrefs() {
+        formats.clear();
+        list.clear();
+        int i = 0;
+		String[] s;
+		while ((s = Globals.prefs.getStringArray("customExportFormat" + i)) != null) {
+            ExportFormat format = createFormat(s);
+            if (format != null) {
+                formats.put(format.getConsoleName(), format);
+    			list.add(s);
+            } else {
+            	String customExportFormat = Globals.prefs.get("customExportFormat" + i);
+                System.out.println(Globals.lang("Error initializing custom export format from string '%0'", customExportFormat));
+            }
+			i++;
+		}
+	}
+
+    private ExportFormat createFormat(String[] s) {
+        if (s.length < 3)
+            return null;
+		String lfFileName;
+		if (s[1].endsWith(".layout"))
+			lfFileName = s[1].substring(0, s[1].length() - 7);
+		else
+			lfFileName = s[1];
+		ExportFormat format = new ExportFormat(s[0], s[0], lfFileName, null,
+			s[2]);
+		format.setCustomExport(true);
+		return format;
+	}
+
+	public String[] getElementAt(int pos) {
+		return (String[]) (array[pos]);
+	}
+
+	public void addFormat(String[] s) {
+		list.add(s);
+		ExportFormat format = createFormat(s);
+		formats.put(format.getConsoleName(), format);
+	}
+
+	public void remove(String[] toRemove) {
+
+        ExportFormat format = createFormat(toRemove);
+        formats.remove(format.getConsoleName());
+        list.remove(toRemove);
+        
+	}
+
+	public void store() {
+
+		if (list.size() == 0)
+			purge(0);
+		else {
+			for (int i = 0; i < list.size(); i++) {
+				// System.out.println(i+"..");
+				Globals.prefs.putStringArray("customExportFormat" + i,
+					list.get(i));
+			}
+			purge(list.size());
+		}
+	}
+
+	private void purge(int from) {
+		int i = from;
+		while (Globals.prefs.getStringArray("customExportFormat" + i) != null) {
+			Globals.prefs.remove("customExportFormat" + i);
+			i++;
+		}
+	}
+
+}
diff --git a/src/java/net/sf/jabref/export/ExpandEndnoteFilters.java b/src/java/net/sf/jabref/export/ExpandEndnoteFilters.java
index b97ebeb..e73a2ca 100644
--- a/src/java/net/sf/jabref/export/ExpandEndnoteFilters.java
+++ b/src/java/net/sf/jabref/export/ExpandEndnoteFilters.java
@@ -1,83 +1,83 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MnemonicAwareAction;
-import net.sf.jabref.Worker;
-import net.sf.jabref.gui.FileDialogs;
-import net.sf.jabref.util.ResourceExtractor;
-import spin.Spin;
-
-/**
- *
- * @author alver
- */
-public class ExpandEndnoteFilters extends MnemonicAwareAction implements Worker {
-    
-    JabRefFrame frame;
-    File file = null;
-    final String FILENAME = "/EndNote.zip";
-    
-    /** Creates a new instance of ExpandEndnoteFilters */
-    public ExpandEndnoteFilters(JabRefFrame frame) {
-        this.frame = frame;
-        putValue(NAME, "Unpack EndNote filter set");
-        putValue(SHORT_DESCRIPTION, Globals.lang("<HTML>Unpack the zip file containing import/export filters for Endnote,<BR>"
-                +"for optimal interoperability with JabRef</HTML>"));
-    }
-    
-    public void actionPerformed(ActionEvent e) {
-        
-        String filename = FileDialogs.getNewFile(frame, new File(System.getProperty("user.home")), ".zip",
-                JFileChooser.SAVE_DIALOG, false); 
-        
-        if (filename == null)
-            return;
-        
-        //if (!filename.substring(4).equalsIgnoreCase(".zip"))
-        //    filename += ".zip";
-        file = new File(filename);
-        if (file.exists()) {
-            int confirm = JOptionPane.showConfirmDialog(frame, "'"+file.getName()+"' "+
-                          Globals.lang("exists. Overwrite file?"),
-                          Globals.lang("Unpack EndNote filter set"), JOptionPane.OK_CANCEL_OPTION);
-            if (confirm != JOptionPane.OK_OPTION)
-                return;
-        }
-        
-        // Spin off the GUI thread, and run the run() method.
-       ((Worker)Spin.off(this)).run(); 
-       
-       file = null;
-    }
-    
-    /**
-     * Worker method.
-     */
-    public void run() {
-        ResourceExtractor re = new ResourceExtractor(frame, FILENAME, file);
-        re.run();
-        frame.output(Globals.lang("Unpacked file."));
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.MnemonicAwareAction;
+import net.sf.jabref.Worker;
+import net.sf.jabref.gui.FileDialogs;
+import net.sf.jabref.util.ResourceExtractor;
+import spin.Spin;
+
+/**
+ *
+ * @author alver
+ */
+public class ExpandEndnoteFilters extends MnemonicAwareAction implements Worker {
+    
+    JabRefFrame frame;
+    File file = null;
+    final String FILENAME = "/EndNote.zip";
+    
+    /** Creates a new instance of ExpandEndnoteFilters */
+    public ExpandEndnoteFilters(JabRefFrame frame) {
+        this.frame = frame;
+        putValue(NAME, "Unpack EndNote filter set");
+        putValue(SHORT_DESCRIPTION, Globals.lang("<HTML>Unpack the zip file containing import/export filters for Endnote,<BR>"
+                +"for optimal interoperability with JabRef</HTML>"));
+    }
+    
+    public void actionPerformed(ActionEvent e) {
+        
+        String filename = FileDialogs.getNewFile(frame, new File(System.getProperty("user.home")), ".zip",
+                JFileChooser.SAVE_DIALOG, false); 
+        
+        if (filename == null)
+            return;
+        
+        //if (!filename.substring(4).equalsIgnoreCase(".zip"))
+        //    filename += ".zip";
+        file = new File(filename);
+        if (file.exists()) {
+            int confirm = JOptionPane.showConfirmDialog(frame, "'"+file.getName()+"' "+
+                          Globals.lang("exists. Overwrite file?"),
+                          Globals.lang("Unpack EndNote filter set"), JOptionPane.OK_CANCEL_OPTION);
+            if (confirm != JOptionPane.OK_OPTION)
+                return;
+        }
+        
+        // Spin off the GUI thread, and run the run() method.
+       ((Worker)Spin.off(this)).run(); 
+       
+       file = null;
+    }
+    
+    /**
+     * Worker method.
+     */
+    public void run() {
+        ResourceExtractor re = new ResourceExtractor(frame, FILENAME, file);
+        re.run();
+        frame.output(Globals.lang("Unpacked file."));
+    }
+}
diff --git a/src/java/net/sf/jabref/export/ExportComparator.java b/src/java/net/sf/jabref/export/ExportComparator.java
index dd9772a..a7c3a62 100644
--- a/src/java/net/sf/jabref/export/ExportComparator.java
+++ b/src/java/net/sf/jabref/export/ExportComparator.java
@@ -1,25 +1,25 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.util.Comparator;
-
-public class ExportComparator implements Comparator<String[]> {
-	public int compare(String[] s1, String[] s2) {
-		return s1[0].compareTo(s2[0]);
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.util.Comparator;
+
+public class ExportComparator implements Comparator<String[]> {
+	public int compare(String[] s1, String[] s2) {
+		return s1[0].compareTo(s2[0]);
+	}
+
+}
diff --git a/src/java/net/sf/jabref/export/ExportCustomizationDialog.java b/src/java/net/sf/jabref/export/ExportCustomizationDialog.java
index 08fd4ae..d8af19a 100644
--- a/src/java/net/sf/jabref/export/ExportCustomizationDialog.java
+++ b/src/java/net/sf/jabref/export/ExportCustomizationDialog.java
@@ -1,181 +1,182 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.HeadlessException;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.*;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableColumnModel;
-
-import net.sf.jabref.*;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import ca.odell.glazedlists.gui.TableFormat;
-import ca.odell.glazedlists.swing.EventTableModel;
-
-/**
- * <p>Title: </p>
- * <p>Description: </p>
- * <p>Copyright: Copyright (c) 2003</p>
- * <p>Company: </p>
- * @author not attributable
- * @version 1.0
- */
-
-public class ExportCustomizationDialog extends JDialog {
-
-  JabRefFrame frame;
-  JButton addExport = new JButton(Globals.lang("Add new")),
-      modify = new JButton(Globals.lang("Modify")),
-      remove = new JButton(Globals.lang("Remove")),
-      close = new JButton(Globals.lang("Close")),
-      help = new JButton(Globals.lang("Help"));
-
-  JPanel buttons = new JPanel(),
-      main = new JPanel();
-  JTable table;
-
-
-  public ExportCustomizationDialog(JabRefFrame frame_) throws HeadlessException {
-
-    super(frame_, Globals.lang("Manage custom exports"), false);
-    frame = frame_;
-    addExport.addActionListener(new ActionListener() {
-     public void actionPerformed(ActionEvent e) {
-       CustomExportDialog ecd = new CustomExportDialog(frame);
-       ecd.setVisible(true); // ecd.show(); -> deprecated since 1.5
-       if (ecd.okPressed()) {
-         String[] newFormat = new String[] {ecd.name(), ecd.layoutFile(), ecd.extension() };
-         Globals.prefs.customExports.addFormat(newFormat);
-         Globals.prefs.customExports.store();
-       }
-     }
-    });
-
-    modify.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        int row = table.getSelectedRow();
-        if (row == -1) return;
-        String[] old = Globals.prefs.customExports.getSortedList().get(row);
-       CustomExportDialog ecd = new CustomExportDialog(frame, old[0], old[1], old[2]);
-       ecd.setVisible(true); // ecd.show(); -> deprecated since 1.5
-       if (ecd.okPressed()) {
-         old[0] = ecd.name();
-         old[1] = ecd.layoutFile();
-         old[2] = ecd.extension();
-         table.revalidate();
-         table.repaint();
-         Globals.prefs.customExports.store();
-       }
-     }
-    });
-
-    remove.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        int[] rows = table.getSelectedRows();
-          if (rows.length == 0) return;
-          String[][] entries = new String[rows.length][];
-          for (int i=0; i<rows.length; i++)
-            entries[i] = Globals.prefs.customExports.getSortedList().get(rows[i]);
-          for (int i=0; i<rows.length; i++)
-            Globals.prefs.customExports.remove(entries[i]);
-          Globals.prefs.customExports.store();
-      }
-    });
-
-    AbstractAction closeAction = new AbstractAction() {
-      public void actionPerformed(ActionEvent e) {
-        dispose();
-      }
-    };
-
-    close.addActionListener(closeAction);
-
-    help.addActionListener(new HelpAction(frame.helpDiag, GUIGlobals.exportCustomizationHelp,
-                                          "Help"));
-
-    EventTableModel tableModel = new EventTableModel(Globals.prefs.customExports.getSortedList(), new ExportTableFormat());
-    table = new JTable(tableModel);
-    TableColumnModel cm = table.getColumnModel();
-    cm.getColumn(0).setPreferredWidth(GUIGlobals.EXPORT_DIALOG_COL_0_WIDTH);
-    cm.getColumn(1).setPreferredWidth(GUIGlobals.EXPORT_DIALOG_COL_1_WIDTH);
-    cm.getColumn(2).setPreferredWidth(GUIGlobals.EXPORT_DIALOG_COL_2_WIDTH);
-    JScrollPane sp = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-                                     JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-    table.setPreferredScrollableViewportSize(
-      new Dimension(500, 150));
-    if (table.getRowCount() > 0)
-      table.setRowSelectionInterval(0, 0);
-
-    // Key bindings:
-    ActionMap am = main.getActionMap();
-    InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-    im.put(frame.prefs().getKey("Close dialog"), "close");
-    am.put("close", closeAction);
-    //am = table.getActionMap();
-    //im = table.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-    //im.put(frame.prefs().getKey("Close dialog"), "close");
-    //am.put("close", closeAction);
-    main.setLayout(new BorderLayout());
-    main.add(sp, BorderLayout.CENTER);
-    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
-    buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
-    bb.addGlue();
-    bb.addButton(addExport);
-    bb.addButton(modify);
-    bb.addButton(remove);
-    bb.addButton(close);
-    bb.addUnrelatedGap();
-    bb.addButton(help);
-    bb.addGlue();
-
-    getContentPane().add(main, BorderLayout.CENTER);
-    getContentPane().add(buttons, BorderLayout.SOUTH);
-    pack();
-    Util.placeDialog(this, frame);
-    new FocusRequester(table);
-  }
-
-  class ExportTableFormat implements TableFormat<String[]> {
-
-      public Object getColumnValue(String[] strings, int i) {
-          return strings[i];
-      }
-
-      public int getColumnCount() {
-      return 3;
-    }
-
-    public String getColumnName(int col) {
-      switch (col) {
-        case 0:
-          return Globals.lang("Export name");
-        case 1:
-          return Globals.lang("Main layout file");
-        default:
-          return Globals.lang("File extension");
-      }
-    }
-
-  }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.HeadlessException;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableColumnModel;
+
+import net.sf.jabref.*;
+import net.sf.jabref.help.HelpAction;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import ca.odell.glazedlists.gui.TableFormat;
+import ca.odell.glazedlists.swing.EventTableModel;
+
+/**
+ * <p>Title: </p>
+ * <p>Description: </p>
+ * <p>Copyright: Copyright (c) 2003</p>
+ * <p>Company: </p>
+ * @author not attributable
+ * @version 1.0
+ */
+
+public class ExportCustomizationDialog extends JDialog {
+
+  JabRefFrame frame;
+  JButton addExport = new JButton(Globals.lang("Add new")),
+      modify = new JButton(Globals.lang("Modify")),
+      remove = new JButton(Globals.lang("Remove")),
+      close = new JButton(Globals.lang("Close")),
+      help = new JButton(Globals.lang("Help"));
+
+  JPanel buttons = new JPanel(),
+      main = new JPanel();
+  JTable table;
+
+
+  public ExportCustomizationDialog(JabRefFrame frame_) throws HeadlessException {
+
+    super(frame_, Globals.lang("Manage custom exports"), false);
+    frame = frame_;
+    addExport.addActionListener(new ActionListener() {
+     public void actionPerformed(ActionEvent e) {
+       CustomExportDialog ecd = new CustomExportDialog(frame);
+       ecd.setVisible(true); // ecd.show(); -> deprecated since 1.5
+       if (ecd.okPressed()) {
+         String[] newFormat = new String[] {ecd.name(), ecd.layoutFile(), ecd.extension() };
+         Globals.prefs.customExports.addFormat(newFormat);
+         Globals.prefs.customExports.store();
+       }
+     }
+    });
+
+    modify.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        int row = table.getSelectedRow();
+        if (row == -1) return;
+        String[] old = Globals.prefs.customExports.getSortedList().get(row);
+       CustomExportDialog ecd = new CustomExportDialog(frame, old[0], old[1], old[2]);
+       ecd.setVisible(true); // ecd.show(); -> deprecated since 1.5
+       if (ecd.okPressed()) {
+         old[0] = ecd.name();
+         old[1] = ecd.layoutFile();
+         old[2] = ecd.extension();
+         table.revalidate();
+         table.repaint();
+         Globals.prefs.customExports.store();
+       }
+     }
+    });
+
+    remove.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        int[] rows = table.getSelectedRows();
+          if (rows.length == 0) return;
+          String[][] entries = new String[rows.length][];
+          for (int i=0; i<rows.length; i++)
+            entries[i] = Globals.prefs.customExports.getSortedList().get(rows[i]);
+          for (int i=0; i<rows.length; i++)
+            Globals.prefs.customExports.remove(entries[i]);
+          Globals.prefs.customExports.store();
+      }
+    });
+
+    AbstractAction closeAction = new AbstractAction() {
+      public void actionPerformed(ActionEvent e) {
+        dispose();
+      }
+    };
+
+    close.addActionListener(closeAction);
+
+    help.addActionListener(new HelpAction(frame.helpDiag, GUIGlobals.exportCustomizationHelp,
+                                          "Help"));
+
+    EventTableModel tableModel = new EventTableModel(Globals.prefs.customExports.getSortedList(), new ExportTableFormat());
+    table = new JTable(tableModel);
+    TableColumnModel cm = table.getColumnModel();
+    cm.getColumn(0).setPreferredWidth(GUIGlobals.EXPORT_DIALOG_COL_0_WIDTH);
+    cm.getColumn(1).setPreferredWidth(GUIGlobals.EXPORT_DIALOG_COL_1_WIDTH);
+    cm.getColumn(2).setPreferredWidth(GUIGlobals.EXPORT_DIALOG_COL_2_WIDTH);
+    JScrollPane sp = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+                                     JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+    table.setPreferredScrollableViewportSize(
+      new Dimension(500, 150));
+    if (table.getRowCount() > 0)
+      table.setRowSelectionInterval(0, 0);
+
+    // Key bindings:
+    ActionMap am = main.getActionMap();
+    InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+    im.put(frame.prefs().getKey("Close dialog"), "close");
+    am.put("close", closeAction);
+    //am = table.getActionMap();
+    //im = table.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+    //im.put(frame.prefs().getKey("Close dialog"), "close");
+    //am.put("close", closeAction);
+    main.setLayout(new BorderLayout());
+    main.add(sp, BorderLayout.CENTER);
+    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
+    buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+    bb.addGlue();
+    bb.addButton(addExport);
+    bb.addButton(modify);
+    bb.addButton(remove);
+    bb.addButton(close);
+    bb.addUnrelatedGap();
+    bb.addButton(help);
+    bb.addGlue();
+
+    getContentPane().add(main, BorderLayout.CENTER);
+    getContentPane().add(buttons, BorderLayout.SOUTH);
+    pack();
+    Util.placeDialog(this, frame);
+    new FocusRequester(table);
+  }
+
+  class ExportTableFormat implements TableFormat<String[]> {
+
+      public Object getColumnValue(String[] strings, int i) {
+          return strings[i];
+      }
+
+      public int getColumnCount() {
+      return 3;
+    }
+
+    public String getColumnName(int col) {
+      switch (col) {
+        case 0:
+          return Globals.lang("Export name");
+        case 1:
+          return Globals.lang("Main layout file");
+        default:
+          return Globals.lang("File extension");
+      }
+    }
+
+  }
+
+}
diff --git a/src/java/net/sf/jabref/export/ExportFileFilter.java b/src/java/net/sf/jabref/export/ExportFileFilter.java
index 997a7f4..31b7286 100644
--- a/src/java/net/sf/jabref/export/ExportFileFilter.java
+++ b/src/java/net/sf/jabref/export/ExportFileFilter.java
@@ -1,58 +1,58 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import javax.swing.filechooser.FileFilter;
-import java.io.File;
-
-/**
- * File filter that lets the user choose export format while choosing file to
- * export to. Contains a reference to the ExportFormat in question.
- */
-public class ExportFileFilter extends FileFilter implements Comparable<ExportFileFilter> {
-    private IExportFormat format;
-    private String extension, name;
-
-    public ExportFileFilter(IExportFormat format, String extension) {
-		this.format = format;
-		this.extension = extension;
-		this.name = format.getDisplayName() + " (*" + extension
-				+ ")";
-	}
-
-    public IExportFormat getExportFormat() {
-        return format;
-    }
-    
-    public String getExtension(){
-    	return extension;
-    }
-
-    public boolean accept(File file) {
-        if (file.isDirectory())
-            return true;
-        else
-            return file.getPath().toLowerCase().endsWith(extension);
-    }
-
-    public String getDescription() {
-        return name;
-    }
-
-    public int compareTo(ExportFileFilter o) {
-        return name.compareTo(o.name);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import javax.swing.filechooser.FileFilter;
+import java.io.File;
+
+/**
+ * File filter that lets the user choose export format while choosing file to
+ * export to. Contains a reference to the ExportFormat in question.
+ */
+public class ExportFileFilter extends FileFilter implements Comparable<ExportFileFilter> {
+    private IExportFormat format;
+    private String extension, name;
+
+    public ExportFileFilter(IExportFormat format, String extension) {
+		this.format = format;
+		this.extension = extension;
+		this.name = format.getDisplayName() + " (*" + extension
+				+ ")";
+	}
+
+    public IExportFormat getExportFormat() {
+        return format;
+    }
+    
+    public String getExtension(){
+    	return extension;
+    }
+
+    public boolean accept(File file) {
+        if (file.isDirectory())
+            return true;
+        else
+            return file.getPath().toLowerCase().endsWith(extension);
+    }
+
+    public String getDescription() {
+        return name;
+    }
+
+    public int compareTo(ExportFileFilter o) {
+        return name.compareTo(o.name);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/ExportFormat.java b/src/java/net/sf/jabref/export/ExportFormat.java
index 77f039d..9576502 100644
--- a/src/java/net/sf/jabref/export/ExportFormat.java
+++ b/src/java/net/sf/jabref/export/ExportFormat.java
@@ -1,382 +1,382 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.export.layout.Layout;
-import net.sf.jabref.export.layout.LayoutHelper;
-
-import javax.swing.filechooser.FileFilter;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.util.*;
-
-/**
- * Base class for export formats based on templates.
- * 
- */
-public class ExportFormat implements IExportFormat {
-
-	String displayName;
-	String consoleName;
-	String lfFileName;
-	String directory;
-	String extension;
-    String encoding = null; // If this value is set, it will be used to override
-      // the default encoding for the basePanel.
-
-	FileFilter fileFilter;
-	boolean customExport = false;
-
-	/**
-	 * Initialize another export format based on templates stored in dir with
-	 * layoutFile lfFilename.
-	 * 
-	 * @param displayName
-	 *            Name to display to the user.
-	 * @param consoleName
-	 *            Name to call this format in the console.
-	 * @param lfFileName
-	 *            Name of the main layout file.
-	 * @param directory
-	 *            Directory in which to find the layout file.
-	 * @param extension
-	 *            Should contain the . (for instance .txt).
-	 */
-	public ExportFormat(String displayName, String consoleName,
-		String lfFileName, String directory, String extension) {
-		this.displayName = displayName;
-		this.consoleName = consoleName;
-		this.lfFileName = lfFileName;
-		this.directory = directory;
-		this.extension = extension;
-	}
-
-	/** Empty default constructor for subclasses */
-	protected ExportFormat() {
-		// intentionally empty
-	}
-
-	/**
-	 * Indicate whether this is a custom export. A custom export looks for its
-	 * layout files using a normal file path, while a built-in export looks in
-	 * the classpath.
-	 * 
-	 * @param custom
-	 *            true to indicate a custom export format.
-	 */
-	public void setCustomExport(boolean custom) {
-		this.customExport = custom;
-	}
-
-	/**
-	 * @see IExportFormat#getConsoleName()
-	 */
-	public String getConsoleName() {
-		return consoleName;
-	}
-
-	/**
-	 * @see IExportFormat#getDisplayName()
-	 */
-	public String getDisplayName() {
-		return displayName;
-	}
-
-    /**
-     * Set an encoding which will be used in preference to the default value
-     * obtained from the basepanel.
-     * @param encoding The name of the encoding to use.
-     */
-    protected void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-
-    /**
-	 * This method should return a reader from which the given layout file can
-	 * be read.
-	 * 
-	 * This standard implementation of this method will use the
-	 * {@link FileActions#getReader(String)} method.
-	 * 
-	 * Subclasses of ExportFormat are free to override and provide their own
-	 * implementation.
-	 * 
-	 * @param filename
-	 *            the file name
-	 * @throws IOException
-	 *             if the reader could not be created
-	 * 
-	 * @return a newly created reader
-	 */
-	protected Reader getReader(String filename) throws IOException {
-		// If this is a custom export, just use the given file name:
-		String dir;
-		if (customExport) {
-			dir = "";
-		} else {
-			dir = Globals.LAYOUT_PREFIX
-				+ (directory == null ? "" : directory + "/");
-		}
-		return FileActions.getReader(dir + filename);
-	}
-
-	/**
-	 * Perform the export of {@code database}.
-	 * 
-	 * @param database
-	 *            The database to export from.
-     * @param metaData
-     *            The database's meta data.
-	 * @param file
-	 *            the file to write the resulting export to
-	 * @param encoding
-	 *            The encoding of the database
-	 * @param entryIds
-	 *            Contains the IDs of all entries that should be exported. If
-	 *            <code>null</code>, all entries will be exported.
-	 * 
-	 * @throws IOException
-	 *             if a problem occurred while trying to write to {@code writer}
-	 *             or read from required resources.
-	 * @throws Exception
-	 *             if any other error occurred during export.
-	 * 
-	 * @see net.sf.jabref.export.IExportFormat#performExport(net.sf.jabref.BibtexDatabase,
-	 *      net.sf.jabref.MetaData, java.lang.String, java.lang.String, java.util.Set)
-	 */
-	public void performExport(final BibtexDatabase database,
-            final MetaData metaData, final String file,
-		final String encoding, Set<String> entryIds) throws Exception {
-
-        File outFile = new File(file);
-        SaveSession ss = null;
-        if (this.encoding != null) {
-            try {
-                ss = getSaveSession(this.encoding, outFile);
-            } catch (IOException ex) {
-                // Perhaps the overriding encoding doesn't work?
-                // We will fall back on the default encoding.
-                ex.printStackTrace();
-
-            }
-        }
-		if (ss == null)
-		    ss = getSaveSession(encoding, outFile);
-        
-		VerifyingWriter ps = ss.getWriter();
-
-        Layout beginLayout = null;
-		Reader reader = null;
-
-        // Check if this export filter has bundled name formatters:
-        HashMap<String,String> customNameFormatters = readFormatterFile(lfFileName);
-        // Set a global field, so all layouts have access to the custom name formatters: 
-        Globals.prefs.customExportNameFormatters = customNameFormatters;
-
-        ArrayList<String> missingFormatters = new ArrayList<String>(1);
-
-        // Print header
-        try {
-			reader = getReader(lfFileName + ".begin.layout");
-			LayoutHelper layoutHelper = new LayoutHelper(reader);
-			beginLayout = layoutHelper
-				.getLayoutFromText(Globals.FORMATTER_PACKAGE);
-            reader.close();
-		} catch (IOException ex) {
-			// If an exception was cast, export filter doesn't have a begin
-			// file.
-		}
-		// Write the header
-		if (beginLayout != null) {
-			ps.write(beginLayout.doLayout(database, encoding));
-            missingFormatters.addAll(beginLayout.getMissingFormatters());
-		}
-
-		/*
-		 * Write database entries; entries will be sorted as they appear on the
-		 * screen, or sorted by author, depending on Preferences. We also supply
-		 * the Set entries - if we are to export only certain entries, it will
-		 * be non-null, and be used to choose entries. Otherwise, it will be
-		 * null, and be ignored.
-		 */
-		List<BibtexEntry> sorted = FileActions.getSortedEntries(database,
-			entryIds, false);
-
-		// Load default layout
-		reader = getReader(lfFileName + ".layout");
-
-		LayoutHelper layoutHelper = new LayoutHelper(reader);
-		Layout defLayout = layoutHelper
-			.getLayoutFromText(Globals.FORMATTER_PACKAGE);
-		reader.close();
-        if (defLayout != null) {
-            missingFormatters.addAll(defLayout.getMissingFormatters());
-            System.out.println(defLayout.getMissingFormatters());
-        }
-		HashMap<String, Layout> layouts = new HashMap<String, Layout>();
-		Layout layout;
-
-        ExportFormats.entryNumber = 0;
-		for (BibtexEntry entry : sorted) {
-            ExportFormats.entryNumber++; // Increment entry counter.
-			// Get the layout
-			String type = entry.getType().getName().toLowerCase();
-			if (layouts.containsKey(type))
-				layout = layouts.get(type);
-			else {
-				try {
-					// We try to get a type-specific layout for this entry.
-					reader = getReader(lfFileName + "." + type + ".layout");
-					layoutHelper = new LayoutHelper(reader);
-					layout = layoutHelper
-						.getLayoutFromText(Globals.FORMATTER_PACKAGE);
-					layouts.put(type, layout);
-					reader.close();
-                    if (layout != null)
-                        missingFormatters.addAll(layout.getMissingFormatters());
-
-				} catch (IOException ex) {
-					// The exception indicates that no type-specific layout
-					// exists, so we
-					// go with the default one.
-					layout = defLayout;
-				}
-			}
-
-			// Write the entry
-			ps.write(layout.doLayout(entry, database));
-		}
-
-		// Print footer
-
-		// changed section - begin (arudert)
-		Layout endLayout = null;
-		try {
-			reader = getReader(lfFileName + ".end.layout");
-			layoutHelper = new LayoutHelper(reader);
-			endLayout = layoutHelper
-				.getLayoutFromText(Globals.FORMATTER_PACKAGE);
-			reader.close();
-		} catch (IOException ex) {
-			// If an exception was thrown, export filter doesn't have an end
-			// file.
-		}
-
-		// Write footer
-		if (endLayout != null) {
-			ps.write(endLayout.doLayout(database, encoding));
-            missingFormatters.addAll(endLayout.getMissingFormatters());
-		}
-
-        // Clear custom name formatters:
-        Globals.prefs.customExportNameFormatters = null;
-
-        if (missingFormatters.size() > 0) {
-            StringBuilder sb = new StringBuilder("The following formatters could not be found").
-                    append(": ");
-            for (Iterator<String> i = missingFormatters.iterator(); i.hasNext();) {
-                sb.append(i.next());
-                if (i.hasNext())
-                    sb.append(", ");
-            }
-            System.err.println(sb.toString());
-        }
-
-        finalizeSaveSession(ss);
-	}
-
-    /**
-     * See if there is a name formatter file bundled with this export format. If so, read
-     * all the name formatters so they can be used by the filter layouts.
-     * @param lfFileName The layout file name.
-     */
-    private HashMap<String, String> readFormatterFile(String lfFileName) {
-        HashMap<String,String> formatters = new HashMap<String, String>();
-        File formatterFile = new File(lfFileName + ".formatters");
-        if (formatterFile.exists()) {
-            Reader in = null;
-            try {
-                in = new FileReader(formatterFile);
-                if (in != null) {
-                    // Ok, we found and opened the file. Read all contents:
-                    StringBuilder sb = new StringBuilder();
-                    int c;
-                    while ((c = in.read()) != -1) {
-                        sb.append((char)c);
-                    }
-                    String[] lines = sb.toString().split("\n");
-                    // Go through each line:
-                    for (int i=0; i<lines.length; i++) {
-                        String line = lines[i].trim();
-                        // Do not deal with empty lines:
-                        if (line.length() == 0)
-                            continue;
-                        int index = line.indexOf(":"); // TODO: any need to accept escaped colons here?
-                        if ((index > 0) && (index+1 < line.length())) {
-                            String formatterName = line.substring(0, index);
-                            String contents = line.substring(index+1);
-                            //System.out.println("Name: '"+formatterName+"'");
-                            //System.out.println("Contents: '"+contents+"'");
-                            formatters.put(formatterName, contents);
-                        }
-                    }
-                }
-
-            } catch (IOException ex) {
-                // TODO: show error message here?
-                ex.printStackTrace();
-            } finally {
-                if (in != null)
-                    try {
-                        in.close();
-                    } catch (IOException ex) {
-                        ex.printStackTrace();
-                    }
-            }
-        }
-        return formatters;
-    }
-
-    protected SaveSession getSaveSession(final String encoding,
-		final File outFile) throws IOException {
-		return new SaveSession(outFile, encoding, false);
-	}
-
-	/**
-	 * @see net.sf.jabref.export.IExportFormat#getFileFilter()
-	 */
-	public FileFilter getFileFilter() {
-		if (fileFilter == null)
-			fileFilter = new ExportFileFilter(this, extension);
-		return fileFilter;
-	}
-
-	public void finalizeSaveSession(final SaveSession ss) throws Exception {
-		ss.getWriter().flush();
-		ss.getWriter().close();
-
-		if (!ss.getWriter().couldEncodeAll()) {
-			System.err.println("Could not encode...");
-		}
-		ss.commit();
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.export.layout.Layout;
+import net.sf.jabref.export.layout.LayoutHelper;
+
+import javax.swing.filechooser.FileFilter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.*;
+
+/**
+ * Base class for export formats based on templates.
+ * 
+ */
+public class ExportFormat implements IExportFormat {
+
+	String displayName;
+	String consoleName;
+	String lfFileName;
+	String directory;
+	String extension;
+    String encoding = null; // If this value is set, it will be used to override
+      // the default encoding for the basePanel.
+
+	FileFilter fileFilter;
+	boolean customExport = false;
+
+	/**
+	 * Initialize another export format based on templates stored in dir with
+	 * layoutFile lfFilename.
+	 * 
+	 * @param displayName
+	 *            Name to display to the user.
+	 * @param consoleName
+	 *            Name to call this format in the console.
+	 * @param lfFileName
+	 *            Name of the main layout file.
+	 * @param directory
+	 *            Directory in which to find the layout file.
+	 * @param extension
+	 *            Should contain the . (for instance .txt).
+	 */
+	public ExportFormat(String displayName, String consoleName,
+		String lfFileName, String directory, String extension) {
+		this.displayName = displayName;
+		this.consoleName = consoleName;
+		this.lfFileName = lfFileName;
+		this.directory = directory;
+		this.extension = extension;
+	}
+
+	/** Empty default constructor for subclasses */
+	protected ExportFormat() {
+		// intentionally empty
+	}
+
+	/**
+	 * Indicate whether this is a custom export. A custom export looks for its
+	 * layout files using a normal file path, while a built-in export looks in
+	 * the classpath.
+	 * 
+	 * @param custom
+	 *            true to indicate a custom export format.
+	 */
+	public void setCustomExport(boolean custom) {
+		this.customExport = custom;
+	}
+
+	/**
+	 * @see IExportFormat#getConsoleName()
+	 */
+	public String getConsoleName() {
+		return consoleName;
+	}
+
+	/**
+	 * @see IExportFormat#getDisplayName()
+	 */
+	public String getDisplayName() {
+		return displayName;
+	}
+
+    /**
+     * Set an encoding which will be used in preference to the default value
+     * obtained from the basepanel.
+     * @param encoding The name of the encoding to use.
+     */
+    protected void setEncoding(String encoding) {
+        this.encoding = encoding;
+    }
+
+    /**
+	 * This method should return a reader from which the given layout file can
+	 * be read.
+	 * 
+	 * This standard implementation of this method will use the
+	 * {@link FileActions#getReader(String)} method.
+	 * 
+	 * Subclasses of ExportFormat are free to override and provide their own
+	 * implementation.
+	 * 
+	 * @param filename
+	 *            the file name
+	 * @throws IOException
+	 *             if the reader could not be created
+	 * 
+	 * @return a newly created reader
+	 */
+	protected Reader getReader(String filename) throws IOException {
+		// If this is a custom export, just use the given file name:
+		String dir;
+		if (customExport) {
+			dir = "";
+		} else {
+			dir = Globals.LAYOUT_PREFIX
+				+ (directory == null ? "" : directory + "/");
+		}
+		return FileActions.getReader(dir + filename);
+	}
+
+	/**
+	 * Perform the export of {@code database}.
+	 * 
+	 * @param database
+	 *            The database to export from.
+     * @param metaData
+     *            The database's meta data.
+	 * @param file
+	 *            the file to write the resulting export to
+	 * @param encoding
+	 *            The encoding of the database
+	 * @param entryIds
+	 *            Contains the IDs of all entries that should be exported. If
+	 *            <code>null</code>, all entries will be exported.
+	 * 
+	 * @throws IOException
+	 *             if a problem occurred while trying to write to {@code writer}
+	 *             or read from required resources.
+	 * @throws Exception
+	 *             if any other error occurred during export.
+	 * 
+	 * @see net.sf.jabref.export.IExportFormat#performExport(net.sf.jabref.BibtexDatabase,
+	 *      net.sf.jabref.MetaData, java.lang.String, java.lang.String, java.util.Set)
+	 */
+	public void performExport(final BibtexDatabase database,
+            final MetaData metaData, final String file,
+		final String encoding, Set<String> entryIds) throws Exception {
+
+        File outFile = new File(file);
+        SaveSession ss = null;
+        if (this.encoding != null) {
+            try {
+                ss = getSaveSession(this.encoding, outFile);
+            } catch (IOException ex) {
+                // Perhaps the overriding encoding doesn't work?
+                // We will fall back on the default encoding.
+                ex.printStackTrace();
+
+            }
+        }
+		if (ss == null)
+		    ss = getSaveSession(encoding, outFile);
+        
+		VerifyingWriter ps = ss.getWriter();
+
+        Layout beginLayout = null;
+		Reader reader = null;
+
+        // Check if this export filter has bundled name formatters:
+        HashMap<String,String> customNameFormatters = readFormatterFile(lfFileName);
+        // Set a global field, so all layouts have access to the custom name formatters: 
+        Globals.prefs.customExportNameFormatters = customNameFormatters;
+
+        ArrayList<String> missingFormatters = new ArrayList<String>(1);
+
+        // Print header
+        try {
+			reader = getReader(lfFileName + ".begin.layout");
+			LayoutHelper layoutHelper = new LayoutHelper(reader);
+			beginLayout = layoutHelper
+				.getLayoutFromText(Globals.FORMATTER_PACKAGE);
+            reader.close();
+		} catch (IOException ex) {
+			// If an exception was cast, export filter doesn't have a begin
+			// file.
+		}
+		// Write the header
+		if (beginLayout != null) {
+			ps.write(beginLayout.doLayout(database, encoding));
+            missingFormatters.addAll(beginLayout.getMissingFormatters());
+		}
+
+		/*
+		 * Write database entries; entries will be sorted as they appear on the
+		 * screen, or sorted by author, depending on Preferences. We also supply
+		 * the Set entries - if we are to export only certain entries, it will
+		 * be non-null, and be used to choose entries. Otherwise, it will be
+		 * null, and be ignored.
+		 */
+		List<BibtexEntry> sorted = FileActions.getSortedEntries(database,
+			entryIds, false);
+
+		// Load default layout
+		reader = getReader(lfFileName + ".layout");
+
+		LayoutHelper layoutHelper = new LayoutHelper(reader);
+		Layout defLayout = layoutHelper
+			.getLayoutFromText(Globals.FORMATTER_PACKAGE);
+		reader.close();
+        if (defLayout != null) {
+            missingFormatters.addAll(defLayout.getMissingFormatters());
+            System.out.println(defLayout.getMissingFormatters());
+        }
+		HashMap<String, Layout> layouts = new HashMap<String, Layout>();
+		Layout layout;
+
+        ExportFormats.entryNumber = 0;
+		for (BibtexEntry entry : sorted) {
+            ExportFormats.entryNumber++; // Increment entry counter.
+			// Get the layout
+			String type = entry.getType().getName().toLowerCase();
+			if (layouts.containsKey(type))
+				layout = layouts.get(type);
+			else {
+				try {
+					// We try to get a type-specific layout for this entry.
+					reader = getReader(lfFileName + "." + type + ".layout");
+					layoutHelper = new LayoutHelper(reader);
+					layout = layoutHelper
+						.getLayoutFromText(Globals.FORMATTER_PACKAGE);
+					layouts.put(type, layout);
+					reader.close();
+                    if (layout != null)
+                        missingFormatters.addAll(layout.getMissingFormatters());
+
+				} catch (IOException ex) {
+					// The exception indicates that no type-specific layout
+					// exists, so we
+					// go with the default one.
+					layout = defLayout;
+				}
+			}
+
+			// Write the entry
+			ps.write(layout.doLayout(entry, database));
+		}
+
+		// Print footer
+
+		// changed section - begin (arudert)
+		Layout endLayout = null;
+		try {
+			reader = getReader(lfFileName + ".end.layout");
+			layoutHelper = new LayoutHelper(reader);
+			endLayout = layoutHelper
+				.getLayoutFromText(Globals.FORMATTER_PACKAGE);
+			reader.close();
+		} catch (IOException ex) {
+			// If an exception was thrown, export filter doesn't have an end
+			// file.
+		}
+
+		// Write footer
+		if (endLayout != null) {
+			ps.write(endLayout.doLayout(database, encoding));
+            missingFormatters.addAll(endLayout.getMissingFormatters());
+		}
+
+        // Clear custom name formatters:
+        Globals.prefs.customExportNameFormatters = null;
+
+        if (missingFormatters.size() > 0) {
+            StringBuilder sb = new StringBuilder("The following formatters could not be found").
+                    append(": ");
+            for (Iterator<String> i = missingFormatters.iterator(); i.hasNext();) {
+                sb.append(i.next());
+                if (i.hasNext())
+                    sb.append(", ");
+            }
+            System.err.println(sb.toString());
+        }
+
+        finalizeSaveSession(ss);
+	}
+
+    /**
+     * See if there is a name formatter file bundled with this export format. If so, read
+     * all the name formatters so they can be used by the filter layouts.
+     * @param lfFileName The layout file name.
+     */
+    private HashMap<String, String> readFormatterFile(String lfFileName) {
+        HashMap<String,String> formatters = new HashMap<String, String>();
+        File formatterFile = new File(lfFileName + ".formatters");
+        if (formatterFile.exists()) {
+            Reader in = null;
+            try {
+                in = new FileReader(formatterFile);
+                if (in != null) {
+                    // Ok, we found and opened the file. Read all contents:
+                    StringBuilder sb = new StringBuilder();
+                    int c;
+                    while ((c = in.read()) != -1) {
+                        sb.append((char)c);
+                    }
+                    String[] lines = sb.toString().split("\n");
+                    // Go through each line:
+                    for (int i=0; i<lines.length; i++) {
+                        String line = lines[i].trim();
+                        // Do not deal with empty lines:
+                        if (line.length() == 0)
+                            continue;
+                        int index = line.indexOf(":"); // TODO: any need to accept escaped colons here?
+                        if ((index > 0) && (index+1 < line.length())) {
+                            String formatterName = line.substring(0, index);
+                            String contents = line.substring(index+1);
+                            //System.out.println("Name: '"+formatterName+"'");
+                            //System.out.println("Contents: '"+contents+"'");
+                            formatters.put(formatterName, contents);
+                        }
+                    }
+                }
+
+            } catch (IOException ex) {
+                // TODO: show error message here?
+                ex.printStackTrace();
+            } finally {
+                if (in != null)
+                    try {
+                        in.close();
+                    } catch (IOException ex) {
+                        ex.printStackTrace();
+                    }
+            }
+        }
+        return formatters;
+    }
+
+    protected SaveSession getSaveSession(final String encoding,
+		final File outFile) throws IOException {
+		return new SaveSession(outFile, encoding, false);
+	}
+
+	/**
+	 * @see net.sf.jabref.export.IExportFormat#getFileFilter()
+	 */
+	public FileFilter getFileFilter() {
+		if (fileFilter == null)
+			fileFilter = new ExportFileFilter(this, extension);
+		return fileFilter;
+	}
+
+	public void finalizeSaveSession(final SaveSession ss) throws Exception {
+		ss.getWriter().flush();
+		ss.getWriter().close();
+
+		if (!ss.getWriter().couldEncodeAll()) {
+			System.err.println("Could not encode...");
+		}
+		ss.commit();
+	}
+}
diff --git a/src/java/net/sf/jabref/export/ExportFormats.java b/src/java/net/sf/jabref/export/ExportFormats.java
index 773cc5e..713372c 100644
--- a/src/java/net/sf/jabref/export/ExportFormats.java
+++ b/src/java/net/sf/jabref/export/ExportFormats.java
@@ -1,337 +1,337 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.util.*;
-
-import javax.swing.AbstractAction;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-import javax.swing.filechooser.FileFilter;
-
-import net.sf.jabref.*;
-import net.sf.jabref.plugin.PluginCore;
-import net.sf.jabref.plugin.core.JabRefPlugin;
-import net.sf.jabref.plugin.core.generated._JabRefPlugin.ExportFormatExtension;
-import net.sf.jabref.plugin.core.generated._JabRefPlugin.ExportFormatProviderExtension;
-import net.sf.jabref.plugin.core.generated._JabRefPlugin.ExportFormatTemplateExtension;
-
-/**
- * User: alver
- * 
- * Date: Oct 18, 2006 
- * 
- * Time: 9:35:08 PM 
- */
-public class ExportFormats {
-
-	private static Map<String,IExportFormat> exportFormats = new TreeMap<String,IExportFormat>();
-
-    // Global variable that is used for counting output entries when exporting:
-    public static int entryNumber = 0;
-
-    public static void initAllExports() {
-
-        exportFormats.clear();
-
-        // Initialize Build-In Export Formats
-        putFormat(new ExportFormat(
-                Globals.lang("HTML"), "html", "html", null, ".html"));
-        putFormat(new ExportFormat(
-                Globals.lang("Simple HTML"), "simplehtml", "simplehtml", null, ".html"));
-        putFormat(new ExportFormat(Globals.lang("DocBook").concat(" 4.4"), "docbook", "docbook", null, ".xml"));
-        putFormat(new ExportFormat(Globals.lang("DIN 1505"), "din1505", "din1505winword", "din1505", ".rtf"));
-        putFormat(new ExportFormat(Globals.lang("BibTeXML"), "bibtexml", "bibtexml", null, ".xml"));
-        putFormat(new ExportFormat(Globals.lang("BibO RDF"), "bibordf", "bibordf", null, ".rdf"));
-        putFormat(new ModsExportFormat());
-        putFormat(new ExportFormat(Globals.lang("HTML table"),
-                "tablerefs", "tablerefs", "tablerefs", ".html"));
-        putFormat(new ExportFormat(Globals.lang("HTML list"),
-                "listrefs", "listrefs", "listrefs", ".html"));	    
-        putFormat(new ExportFormat(Globals.lang("HTML table (with Abstract & BibTeX)"),
-                "tablerefsabsbib", "tablerefsabsbib", "tablerefsabsbib", ".html"));
-        putFormat(new ExportFormat(Globals.lang("Harvard RTF"), "harvard", "harvard",
-                "harvard", ".rtf"));
-        putFormat(new ExportFormat(Globals.lang("Endnote"), "endnote", "EndNote",
-                "endnote", ".txt"));
-        putFormat(new ExportFormat(Globals.lang("OpenOffice CSV"), "oocsv", "openoffice-csv",
-            "openoffice", ".csv"));
-        ExportFormat ef = new ExportFormat(Globals.lang("RIS"), "ris", "ris", "ris", ".ris");
-        ef.encoding = "UTF-8";
-        putFormat(ef);
-        putFormat(new OpenOfficeDocumentCreator());
-        putFormat(new OpenDocumentSpreadsheetCreator());
-        putFormat(new MSBibExportFormat());
-        putFormat(new MySQLExport());
-        putFormat(new PostgreSQLExport());
-    
-        // Add Export Formats contributed by Plugins
-        JabRefPlugin plugin = JabRefPlugin.getInstance(PluginCore.getManager());
-		if (plugin != null){
-			
-			// 1. ExportFormats based on Templates
-			for (ExportFormatTemplateExtension e : plugin.getExportFormatTemplateExtensions()){
-				ExportFormat format = PluginBasedExportFormat.getFormat(e);
-				if (format != null){
-					putFormat(format);
-				}
-			}
-
-			// 2. ExportFormat classed 
-			for (final ExportFormatExtension e : plugin.getExportFormatExtensions()) {
-				putFormat(new IExportFormat(){
-
-					public String getConsoleName() {
-						return e.getConsoleName();
-					}
-
-					public String getDisplayName() {
-						return e.getDisplayName();
-					}
-
-					public FileFilter getFileFilter() {
-						return new ExportFileFilter(this, e.getExtension());
-					}
-
-					IExportFormat wrapped;
-					public void performExport(BibtexDatabase database, MetaData metaData,
-						String file, String encoding, Set<String> entryIds)
-						throws Exception {
-
-						if (wrapped == null)
-							wrapped = e.getExportFormat();
-						wrapped.performExport(database, metaData, file, encoding, entryIds);
-					}
-				});
-			}
-		
-			// 3. Formatters provided by Export Format Providers
-			for (ExportFormatProviderExtension e : plugin.getExportFormatProviderExtensions()) {
-				IExportFormatProvider formatProvider = e.getFormatProvider();
-				for (IExportFormat exportFormat : formatProvider.getExportFormats()) {
-					putFormat(exportFormat);
-				}
-			}
-		}
-		
-        // Now add custom export formats
-        TreeMap<String, ExportFormat> customFormats = Globals.prefs.customExports.getCustomExportFormats();
-        for (IExportFormat format : customFormats.values()){
-            putFormat(format);
-        }
-    }
-
-	/**
-	 * Build a string listing of all available export formats.
-	 * 
-	 * @param maxLineLength
-	 *            The max line length before a line break must be added.
-	 * @param linePrefix
-	 *            If a line break is added, this prefix will be inserted at the
-	 *            beginning of the next line.
-	 * @return The string describing available formats.
-	 */
-	public static String getConsoleExportList(int maxLineLength, int firstLineSubtr,
-		String linePrefix) {
-		StringBuffer sb = new StringBuffer();
-		int lastBreak = -firstLineSubtr;
-
-		for (Iterator<String> i = exportFormats.keySet().iterator(); i.hasNext();) {
-			String name = i.next();
-			if (sb.length() + 2 + name.length() - lastBreak > maxLineLength) {
-				sb.append(",\n");
-				lastBreak = sb.length();
-				sb.append(linePrefix);
-			} else if (sb.length() > 0)
-				sb.append(", ");
-			sb.append(name);
-		}
-
-		return sb.toString();
-	}
-
-    /**
-     * Get a Map of all export formats.
-     * @return A Map containing all export formats, mapped to their console names.
-     */
-    public static Map<String, IExportFormat> getExportFormats() {
-        // It is perhaps overly paranoid to make a defensive copy in this case:
-        return Collections.unmodifiableMap(exportFormats);
-    } 
-
-    /**
-	 * Look up the named export format.
-	 * 
-	 * @param consoleName
-	 *            The export name given in the JabRef console help information.
-	 * @return The ExportFormat, or null if no exportformat with that name is
-	 *         registered.
-	 */
-	public static IExportFormat getExportFormat(String consoleName) {
-		return exportFormats.get(consoleName);
-	}
-
-	/**
-	 * Create an AbstractAction for performing an export operation.
-	 * 
-	 * @param frame
-	 *            The JabRefFrame of this JabRef instance.
-	 * @param selectedOnly
-	 *            true indicates that only selected entries should be exported,
-	 *            false indicates that all entries should be exported.
-	 * @return The action.
-	 */
-	public static AbstractAction getExportAction(JabRefFrame frame, boolean selectedOnly) {
-
-		class ExportAction extends MnemonicAwareAction {
-
-			private static final long serialVersionUID = 639463604530580554L;
-
-			private JabRefFrame frame;
-
-			private boolean selectedOnly;
-
-			public ExportAction(JabRefFrame frame, boolean selectedOnly) {
-				this.frame = frame;
-				this.selectedOnly = selectedOnly;
-				putValue(NAME, selectedOnly ? "Export selected entries" : "Export");
-			}
-
-			public void actionPerformed(ActionEvent e) {
-				ExportFormats.initAllExports();
-				JFileChooser fc = ExportFormats.createExportFileChooser(
-                    Globals.prefs.get("exportWorkingDirectory"));
-				fc.showSaveDialog(frame);
-				File file = fc.getSelectedFile();
-				if (file == null)
-					return;
-				FileFilter ff = fc.getFileFilter();
-				if (ff instanceof ExportFileFilter) {
-
-
-                    ExportFileFilter eff = (ExportFileFilter) ff;
-                    String path = file.getPath();
-                    if (!path.endsWith(eff.getExtension()))
-                        path = path + eff.getExtension();
-                    file = new File(path);
-                    if (file.exists()) {
-                        // Warn that the file exists:
-                        if (JOptionPane.showConfirmDialog(frame, "'" + file.getName() + "' "
-                            + Globals.lang("exists. Overwrite file?"), Globals.lang("Export"),
-                            JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION)
-                            return;
-                    }
-                    final IExportFormat format = eff.getExportFormat();
-                    Set<String> entryIds = null;
-                    if (selectedOnly) {
-                        BibtexEntry[] selected = frame.basePanel().getSelectedEntries();
-                        entryIds = new HashSet<String>();
-                        for (int i = 0; i < selected.length; i++) {
-                            BibtexEntry bibtexEntry = selected[i];
-                            entryIds.add(bibtexEntry.getId());
-                        }
-                    }
-
-                    // Set the global variable for this database's file directory before exporting,
-                    // so formatters can resolve linked files correctly.
-                    // (This is an ugly hack!)
-                    Globals.prefs.fileDirForDatabase = frame.basePanel().metaData()
-                            .getFileDirectory(GUIGlobals.FILE_FIELD);
-                    // Also store the database's file in a global variable:
-                    Globals.prefs.databaseFile = frame.basePanel().metaData().getFile();
-
-                    // Make sure we remember which filter was used, to set
-                    // the default for next time:
-                    Globals.prefs.put("lastUsedExport", format.getConsoleName());
-                    Globals.prefs.put("exportWorkingDirectory", file.getParent());
-                    
-                    final File finFile = file;
-                    final Set<String> finEntryIDs = entryIds;
-                    AbstractWorker exportWorker = new AbstractWorker() {
-                        String errorMessage = null;
-                        public void run() {
-                            try {
-                                format.performExport(frame.basePanel().database(),
-                                        frame.basePanel().metaData(),
-                                        finFile.getPath(), frame
-                                    .basePanel().getEncoding(), finEntryIDs);
-                            } catch (Exception ex) {
-                                ex.printStackTrace();
-                                if (ex.getMessage()==null ) {
-                                    errorMessage = ex.toString();
-                                } else {
-                                    errorMessage = ex.getMessage();
-                                }
-                            }
-                        }
-
-                        public void update() {
-                            // No error message. Report success:
-                            if (errorMessage == null) {
-                                frame.output(Globals.lang("%0 export successful", format.getDisplayName()));
-                            }
-                            // ... or show an error dialog:
-                            else {
-                                frame.output(Globals.lang("Could not save file")
-                                        + " - " + errorMessage);
-                                // Need to warn the user that saving failed!
-                                JOptionPane.showMessageDialog(frame, Globals.lang("Could not save file")
-                                    + ".\n" + errorMessage, Globals.lang("Save database"),
-                                    JOptionPane.ERROR_MESSAGE);
-                            }
-                        }
-                    };
-
-                    // Run the export action in a background thread:
-                    (exportWorker.getWorker()).run();
-                    // Run the update method:
-                    exportWorker.update();
-                }
-			}
-		}
-
-		return new ExportAction(frame, selectedOnly);
-	}
-
-    
-    public static JFileChooser createExportFileChooser(String currentDir) {
-		String lastUsedFormat = Globals.prefs.get("lastUsedExport");
-		FileFilter defaultFilter = null;
-		JFileChooser fc = new JFileChooser(currentDir);
-		TreeSet<FileFilter> filters = new TreeSet<FileFilter>();
-		for (Map.Entry<String, IExportFormat> e : exportFormats.entrySet()) {
-			String formatName = e.getKey() ;
-			IExportFormat format = e.getValue();
-			filters.add(format.getFileFilter());
-			if (formatName.equals(lastUsedFormat))
-				defaultFilter = format.getFileFilter();
-		}
-		for (FileFilter ff : filters) {
-			fc.addChoosableFileFilter(ff);
-		}
-		fc.setAcceptAllFileFilterUsed(false);
-		if (defaultFilter != null)
-			fc.setFileFilter(defaultFilter);
-		return fc;
-	}
-
-	private static void putFormat(IExportFormat format) {
-		exportFormats.put(format.getConsoleName(), format);
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.*;
+
+import javax.swing.AbstractAction;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.filechooser.FileFilter;
+
+import net.sf.jabref.*;
+import net.sf.jabref.plugin.PluginCore;
+import net.sf.jabref.plugin.core.JabRefPlugin;
+import net.sf.jabref.plugin.core.generated._JabRefPlugin.ExportFormatExtension;
+import net.sf.jabref.plugin.core.generated._JabRefPlugin.ExportFormatProviderExtension;
+import net.sf.jabref.plugin.core.generated._JabRefPlugin.ExportFormatTemplateExtension;
+
+/**
+ * User: alver
+ * 
+ * Date: Oct 18, 2006 
+ * 
+ * Time: 9:35:08 PM 
+ */
+public class ExportFormats {
+
+	private static Map<String,IExportFormat> exportFormats = new TreeMap<String,IExportFormat>();
+
+    // Global variable that is used for counting output entries when exporting:
+    public static int entryNumber = 0;
+
+    public static void initAllExports() {
+
+        exportFormats.clear();
+
+        // Initialize Build-In Export Formats
+        putFormat(new ExportFormat(
+                Globals.lang("HTML"), "html", "html", null, ".html"));
+        putFormat(new ExportFormat(
+                Globals.lang("Simple HTML"), "simplehtml", "simplehtml", null, ".html"));
+        putFormat(new ExportFormat(Globals.lang("DocBook").concat(" 4.4"), "docbook", "docbook", null, ".xml"));
+        putFormat(new ExportFormat(Globals.lang("DIN 1505"), "din1505", "din1505winword", "din1505", ".rtf"));
+        putFormat(new ExportFormat(Globals.lang("BibTeXML"), "bibtexml", "bibtexml", null, ".xml"));
+        putFormat(new ExportFormat(Globals.lang("BibO RDF"), "bibordf", "bibordf", null, ".rdf"));
+        putFormat(new ModsExportFormat());
+        putFormat(new ExportFormat(Globals.lang("HTML table"),
+                "tablerefs", "tablerefs", "tablerefs", ".html"));
+        putFormat(new ExportFormat(Globals.lang("HTML list"),
+                "listrefs", "listrefs", "listrefs", ".html"));	    
+        putFormat(new ExportFormat(Globals.lang("HTML table (with Abstract & BibTeX)"),
+                "tablerefsabsbib", "tablerefsabsbib", "tablerefsabsbib", ".html"));
+        putFormat(new ExportFormat(Globals.lang("Harvard RTF"), "harvard", "harvard",
+                "harvard", ".rtf"));
+        putFormat(new ExportFormat(Globals.lang("Endnote"), "endnote", "EndNote",
+                "endnote", ".txt"));
+        putFormat(new ExportFormat(Globals.lang("OpenOffice CSV"), "oocsv", "openoffice-csv",
+            "openoffice", ".csv"));
+        ExportFormat ef = new ExportFormat(Globals.lang("RIS"), "ris", "ris", "ris", ".ris");
+        ef.encoding = "UTF-8";
+        putFormat(ef);
+        putFormat(new OpenOfficeDocumentCreator());
+        putFormat(new OpenDocumentSpreadsheetCreator());
+        putFormat(new MSBibExportFormat());
+        putFormat(new MySQLExport());
+        putFormat(new PostgreSQLExport());
+    
+        // Add Export Formats contributed by Plugins
+        JabRefPlugin plugin = JabRefPlugin.getInstance(PluginCore.getManager());
+		if (plugin != null){
+			
+			// 1. ExportFormats based on Templates
+			for (ExportFormatTemplateExtension e : plugin.getExportFormatTemplateExtensions()){
+				ExportFormat format = PluginBasedExportFormat.getFormat(e);
+				if (format != null){
+					putFormat(format);
+				}
+			}
+
+			// 2. ExportFormat classed 
+			for (final ExportFormatExtension e : plugin.getExportFormatExtensions()) {
+				putFormat(new IExportFormat(){
+
+					public String getConsoleName() {
+						return e.getConsoleName();
+					}
+
+					public String getDisplayName() {
+						return e.getDisplayName();
+					}
+
+					public FileFilter getFileFilter() {
+						return new ExportFileFilter(this, e.getExtension());
+					}
+
+					IExportFormat wrapped;
+					public void performExport(BibtexDatabase database, MetaData metaData,
+						String file, String encoding, Set<String> entryIds)
+						throws Exception {
+
+						if (wrapped == null)
+							wrapped = e.getExportFormat();
+						wrapped.performExport(database, metaData, file, encoding, entryIds);
+					}
+				});
+			}
+		
+			// 3. Formatters provided by Export Format Providers
+			for (ExportFormatProviderExtension e : plugin.getExportFormatProviderExtensions()) {
+				IExportFormatProvider formatProvider = e.getFormatProvider();
+				for (IExportFormat exportFormat : formatProvider.getExportFormats()) {
+					putFormat(exportFormat);
+				}
+			}
+		}
+		
+        // Now add custom export formats
+        TreeMap<String, ExportFormat> customFormats = Globals.prefs.customExports.getCustomExportFormats();
+        for (IExportFormat format : customFormats.values()){
+            putFormat(format);
+        }
+    }
+
+	/**
+	 * Build a string listing of all available export formats.
+	 * 
+	 * @param maxLineLength
+	 *            The max line length before a line break must be added.
+	 * @param linePrefix
+	 *            If a line break is added, this prefix will be inserted at the
+	 *            beginning of the next line.
+	 * @return The string describing available formats.
+	 */
+	public static String getConsoleExportList(int maxLineLength, int firstLineSubtr,
+		String linePrefix) {
+		StringBuffer sb = new StringBuffer();
+		int lastBreak = -firstLineSubtr;
+
+		for (Iterator<String> i = exportFormats.keySet().iterator(); i.hasNext();) {
+			String name = i.next();
+			if (sb.length() + 2 + name.length() - lastBreak > maxLineLength) {
+				sb.append(",\n");
+				lastBreak = sb.length();
+				sb.append(linePrefix);
+			} else if (sb.length() > 0)
+				sb.append(", ");
+			sb.append(name);
+		}
+
+		return sb.toString();
+	}
+
+    /**
+     * Get a Map of all export formats.
+     * @return A Map containing all export formats, mapped to their console names.
+     */
+    public static Map<String, IExportFormat> getExportFormats() {
+        // It is perhaps overly paranoid to make a defensive copy in this case:
+        return Collections.unmodifiableMap(exportFormats);
+    } 
+
+    /**
+	 * Look up the named export format.
+	 * 
+	 * @param consoleName
+	 *            The export name given in the JabRef console help information.
+	 * @return The ExportFormat, or null if no exportformat with that name is
+	 *         registered.
+	 */
+	public static IExportFormat getExportFormat(String consoleName) {
+		return exportFormats.get(consoleName);
+	}
+
+	/**
+	 * Create an AbstractAction for performing an export operation.
+	 * 
+	 * @param frame
+	 *            The JabRefFrame of this JabRef instance.
+	 * @param selectedOnly
+	 *            true indicates that only selected entries should be exported,
+	 *            false indicates that all entries should be exported.
+	 * @return The action.
+	 */
+	public static AbstractAction getExportAction(JabRefFrame frame, boolean selectedOnly) {
+
+		class ExportAction extends MnemonicAwareAction {
+
+			private static final long serialVersionUID = 639463604530580554L;
+
+			private JabRefFrame frame;
+
+			private boolean selectedOnly;
+
+			public ExportAction(JabRefFrame frame, boolean selectedOnly) {
+				this.frame = frame;
+				this.selectedOnly = selectedOnly;
+				putValue(NAME, selectedOnly ? "Export selected entries" : "Export");
+			}
+
+			public void actionPerformed(ActionEvent e) {
+				ExportFormats.initAllExports();
+				JFileChooser fc = ExportFormats.createExportFileChooser(
+                    Globals.prefs.get("exportWorkingDirectory"));
+				fc.showSaveDialog(frame);
+				File file = fc.getSelectedFile();
+				if (file == null)
+					return;
+				FileFilter ff = fc.getFileFilter();
+				if (ff instanceof ExportFileFilter) {
+
+
+                    ExportFileFilter eff = (ExportFileFilter) ff;
+                    String path = file.getPath();
+                    if (!path.endsWith(eff.getExtension()))
+                        path = path + eff.getExtension();
+                    file = new File(path);
+                    if (file.exists()) {
+                        // Warn that the file exists:
+                        if (JOptionPane.showConfirmDialog(frame, "'" + file.getName() + "' "
+                            + Globals.lang("exists. Overwrite file?"), Globals.lang("Export"),
+                            JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION)
+                            return;
+                    }
+                    final IExportFormat format = eff.getExportFormat();
+                    Set<String> entryIds = null;
+                    if (selectedOnly) {
+                        BibtexEntry[] selected = frame.basePanel().getSelectedEntries();
+                        entryIds = new HashSet<String>();
+                        for (int i = 0; i < selected.length; i++) {
+                            BibtexEntry bibtexEntry = selected[i];
+                            entryIds.add(bibtexEntry.getId());
+                        }
+                    }
+
+                    // Set the global variable for this database's file directory before exporting,
+                    // so formatters can resolve linked files correctly.
+                    // (This is an ugly hack!)
+                    Globals.prefs.fileDirForDatabase = frame.basePanel().metaData()
+                            .getFileDirectory(GUIGlobals.FILE_FIELD);
+                    // Also store the database's file in a global variable:
+                    Globals.prefs.databaseFile = frame.basePanel().metaData().getFile();
+
+                    // Make sure we remember which filter was used, to set
+                    // the default for next time:
+                    Globals.prefs.put("lastUsedExport", format.getConsoleName());
+                    Globals.prefs.put("exportWorkingDirectory", file.getParent());
+                    
+                    final File finFile = file;
+                    final Set<String> finEntryIDs = entryIds;
+                    AbstractWorker exportWorker = new AbstractWorker() {
+                        String errorMessage = null;
+                        public void run() {
+                            try {
+                                format.performExport(frame.basePanel().database(),
+                                        frame.basePanel().metaData(),
+                                        finFile.getPath(), frame
+                                    .basePanel().getEncoding(), finEntryIDs);
+                            } catch (Exception ex) {
+                                ex.printStackTrace();
+                                if (ex.getMessage()==null ) {
+                                    errorMessage = ex.toString();
+                                } else {
+                                    errorMessage = ex.getMessage();
+                                }
+                            }
+                        }
+
+                        public void update() {
+                            // No error message. Report success:
+                            if (errorMessage == null) {
+                                frame.output(Globals.lang("%0 export successful", format.getDisplayName()));
+                            }
+                            // ... or show an error dialog:
+                            else {
+                                frame.output(Globals.lang("Could not save file")
+                                        + " - " + errorMessage);
+                                // Need to warn the user that saving failed!
+                                JOptionPane.showMessageDialog(frame, Globals.lang("Could not save file")
+                                    + ".\n" + errorMessage, Globals.lang("Save database"),
+                                    JOptionPane.ERROR_MESSAGE);
+                            }
+                        }
+                    };
+
+                    // Run the export action in a background thread:
+                    (exportWorker.getWorker()).run();
+                    // Run the update method:
+                    exportWorker.update();
+                }
+			}
+		}
+
+		return new ExportAction(frame, selectedOnly);
+	}
+
+    
+    public static JFileChooser createExportFileChooser(String currentDir) {
+		String lastUsedFormat = Globals.prefs.get("lastUsedExport");
+		FileFilter defaultFilter = null;
+		JFileChooser fc = new JFileChooser(currentDir);
+		TreeSet<FileFilter> filters = new TreeSet<FileFilter>();
+		for (Map.Entry<String, IExportFormat> e : exportFormats.entrySet()) {
+			String formatName = e.getKey() ;
+			IExportFormat format = e.getValue();
+			filters.add(format.getFileFilter());
+			if (formatName.equals(lastUsedFormat))
+				defaultFilter = format.getFileFilter();
+		}
+		for (FileFilter ff : filters) {
+			fc.addChoosableFileFilter(ff);
+		}
+		fc.setAcceptAllFileFilterUsed(false);
+		if (defaultFilter != null)
+			fc.setFileFilter(defaultFilter);
+		return fc;
+	}
+
+	private static void putFormat(IExportFormat format) {
+		exportFormats.put(format.getConsoleName(), format);
+	}
+
+}
diff --git a/src/java/net/sf/jabref/export/ExportToClipboardAction.java b/src/java/net/sf/jabref/export/ExportToClipboardAction.java
index f318d12..20e0644 100644
--- a/src/java/net/sf/jabref/export/ExportToClipboardAction.java
+++ b/src/java/net/sf/jabref/export/ExportToClipboardAction.java
@@ -1,158 +1,158 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.awt.Toolkit;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.ClipboardOwner;
-import java.awt.datatransfer.Transferable;
-import java.io.*;
-import java.util.HashSet;
-import java.util.Map;
-
-import javax.swing.BorderFactory;
-import javax.swing.JList;
-import javax.swing.JOptionPane;
-import javax.swing.ListSelectionModel;
-
-import net.sf.jabref.*;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Dec 12, 2006
- * Time: 6:22:25 PM
- * To change this template use File | Settings | File Templates.
- */
-public class ExportToClipboardAction extends AbstractWorker {
-    String message = null;
-    private JabRefFrame frame;
-    private BibtexDatabase database;
-
-    public ExportToClipboardAction(JabRefFrame frame, BibtexDatabase database) {
-        this.frame = frame;
-        this.database = database;
-    }
-    public void run() {
-        BasePanel panel = frame.basePanel();
-        if (panel == null)
-            return;
-        if (panel.getSelectedEntries().length == 0) {
-            message = Globals.lang("No entries selected") + ".";
-            getCallBack().update();
-            return;
-        }
-
-        Map<String, IExportFormat> m = ExportFormats.getExportFormats();
-        IExportFormat[] formats = new ExportFormat[m.size()];
-        String[] array = new String[formats.length];
-        
-        int piv = 0;
-		for (IExportFormat format : m.values()) {
-			formats[piv] = format;
-			array[piv] = format.getDisplayName();
-			piv++;
-		}
-        
-        JList list = new JList(array);
-        list.setBorder(BorderFactory.createEtchedBorder());
-        list.setSelectionInterval(0, 0);
-        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-        int answer = JOptionPane.showOptionDialog(frame, list, Globals.lang("Select format"),
-            JOptionPane.YES_NO_OPTION,
-            JOptionPane.QUESTION_MESSAGE, null,
-            new String[]{Globals.lang("Ok"), Globals.lang("Cancel")},
-            Globals.lang("Ok"));
-
-        if (answer == JOptionPane.NO_OPTION)
-            return;
-
-        IExportFormat format = formats[list.getSelectedIndex()];
-
-        // Set the global variable for this database's file directory before exporting,
-        // so formatters can resolve linked files correctly.
-        // (This is an ugly hack!)
-        Globals.prefs.fileDirForDatabase = frame.basePanel().metaData()
-                .getFileDirectory(GUIGlobals.FILE_FIELD);
-        // Also store the database's file in a global variable:
-        Globals.prefs.databaseFile = frame.basePanel().metaData().getFile();
-
-        
-        /*final boolean custom = (list.getSelectedIndex() >= Globals.STANDARD_EXPORT_COUNT);
-        String dir = null;
-        if (custom) {
-            int index = list.getSelectedIndex() - Globals.STANDARD_EXPORT_COUNT;
-            dir = (String) (Globals.prefs.customExports.getElementAt(index)[1]);
-            File f = new File(dir);
-            lfName = f.getName();
-            lfName = lfName.substring(0, lfName.indexOf("."));
-            // Remove file name - we want the directory only.
-            dir = f.getParent() + System.getProperty("file.separator");
-        }
-        final String format = lfName,
-                directory = dir;
-        */
-        File tmp = null;
-        Reader reader = null;
-        try {
-            // To simplify the exporter API we simply do a normal export to a temporary
-            // file, and read the contents afterwards:
-            tmp = File.createTempFile("jabrefCb", ".tmp");
-            tmp.deleteOnExit();
-            BibtexEntry[] bes = panel.getSelectedEntries();
-            HashSet<String> entries = new HashSet<String>(bes.length);
-            for (BibtexEntry be : bes)
-                entries.add(be.getId());
-            
-            // Write to file:
-            format.performExport(database, panel.metaData(),
-                    tmp.getPath(), panel.getEncoding(), entries);
-            // Read the file and put the contents on the clipboard:
-            StringBuffer sb = new StringBuffer();
-            reader = new InputStreamReader(new FileInputStream(tmp), panel.getEncoding());
-            int s;
-            while ((s = reader.read()) != -1) {
-                sb.append((char)s);
-            }
-            ClipboardOwner owner = new ClipboardOwner() {
-                public void lostOwnership(Clipboard clipboard, Transferable content) {
-                }
-            };
-            //StringSelection ss = new StringSelection(sw.toString());
-            RtfSelection rs = new RtfSelection(sb.toString());
-            Toolkit.getDefaultToolkit().getSystemClipboard()
-                    .setContents(rs, owner);
-            message = Globals.lang("Entries exported to clipboard") + ": " + bes.length;
-
-        } catch (Exception e) {
-            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-            message = Globals.lang("Error exporting to clipboard");
-            return;
-        } finally {
-            // Clean up:
-            if (tmp != null)
-                tmp.delete();
-            if (reader != null)
-                try { reader.close(); } catch (IOException ex) { ex.printStackTrace(); }
-        }
-
-    }
-
-    public void update() {
-        frame.output(message);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.ClipboardOwner;
+import java.awt.datatransfer.Transferable;
+import java.io.*;
+import java.util.HashSet;
+import java.util.Map;
+
+import javax.swing.BorderFactory;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.ListSelectionModel;
+
+import net.sf.jabref.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Dec 12, 2006
+ * Time: 6:22:25 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class ExportToClipboardAction extends AbstractWorker {
+    String message = null;
+    private JabRefFrame frame;
+    private BibtexDatabase database;
+
+    public ExportToClipboardAction(JabRefFrame frame, BibtexDatabase database) {
+        this.frame = frame;
+        this.database = database;
+    }
+    public void run() {
+        BasePanel panel = frame.basePanel();
+        if (panel == null)
+            return;
+        if (panel.getSelectedEntries().length == 0) {
+            message = Globals.lang("No entries selected") + ".";
+            getCallBack().update();
+            return;
+        }
+
+        Map<String, IExportFormat> m = ExportFormats.getExportFormats();
+        IExportFormat[] formats = new ExportFormat[m.size()];
+        String[] array = new String[formats.length];
+        
+        int piv = 0;
+		for (IExportFormat format : m.values()) {
+			formats[piv] = format;
+			array[piv] = format.getDisplayName();
+			piv++;
+		}
+        
+        JList list = new JList(array);
+        list.setBorder(BorderFactory.createEtchedBorder());
+        list.setSelectionInterval(0, 0);
+        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        int answer = JOptionPane.showOptionDialog(frame, list, Globals.lang("Select format"),
+            JOptionPane.YES_NO_OPTION,
+            JOptionPane.QUESTION_MESSAGE, null,
+            new String[]{Globals.lang("Ok"), Globals.lang("Cancel")},
+            Globals.lang("Ok"));
+
+        if (answer == JOptionPane.NO_OPTION)
+            return;
+
+        IExportFormat format = formats[list.getSelectedIndex()];
+
+        // Set the global variable for this database's file directory before exporting,
+        // so formatters can resolve linked files correctly.
+        // (This is an ugly hack!)
+        Globals.prefs.fileDirForDatabase = frame.basePanel().metaData()
+                .getFileDirectory(GUIGlobals.FILE_FIELD);
+        // Also store the database's file in a global variable:
+        Globals.prefs.databaseFile = frame.basePanel().metaData().getFile();
+
+        
+        /*final boolean custom = (list.getSelectedIndex() >= Globals.STANDARD_EXPORT_COUNT);
+        String dir = null;
+        if (custom) {
+            int index = list.getSelectedIndex() - Globals.STANDARD_EXPORT_COUNT;
+            dir = (String) (Globals.prefs.customExports.getElementAt(index)[1]);
+            File f = new File(dir);
+            lfName = f.getName();
+            lfName = lfName.substring(0, lfName.indexOf("."));
+            // Remove file name - we want the directory only.
+            dir = f.getParent() + System.getProperty("file.separator");
+        }
+        final String format = lfName,
+                directory = dir;
+        */
+        File tmp = null;
+        Reader reader = null;
+        try {
+            // To simplify the exporter API we simply do a normal export to a temporary
+            // file, and read the contents afterwards:
+            tmp = File.createTempFile("jabrefCb", ".tmp");
+            tmp.deleteOnExit();
+            BibtexEntry[] bes = panel.getSelectedEntries();
+            HashSet<String> entries = new HashSet<String>(bes.length);
+            for (BibtexEntry be : bes)
+                entries.add(be.getId());
+            
+            // Write to file:
+            format.performExport(database, panel.metaData(),
+                    tmp.getPath(), panel.getEncoding(), entries);
+            // Read the file and put the contents on the clipboard:
+            StringBuffer sb = new StringBuffer();
+            reader = new InputStreamReader(new FileInputStream(tmp), panel.getEncoding());
+            int s;
+            while ((s = reader.read()) != -1) {
+                sb.append((char)s);
+            }
+            ClipboardOwner owner = new ClipboardOwner() {
+                public void lostOwnership(Clipboard clipboard, Transferable content) {
+                }
+            };
+            //StringSelection ss = new StringSelection(sw.toString());
+            RtfSelection rs = new RtfSelection(sb.toString());
+            Toolkit.getDefaultToolkit().getSystemClipboard()
+                    .setContents(rs, owner);
+            message = Globals.lang("Entries exported to clipboard") + ": " + bes.length;
+
+        } catch (Exception e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+            message = Globals.lang("Error exporting to clipboard");
+            return;
+        } finally {
+            // Clean up:
+            if (tmp != null)
+                tmp.delete();
+            if (reader != null)
+                try { reader.close(); } catch (IOException ex) { ex.printStackTrace(); }
+        }
+
+    }
+
+    public void update() {
+        frame.output(message);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/export/FieldFormatter.java b/src/java/net/sf/jabref/export/FieldFormatter.java
index 483f7d7..d2b0c85 100644
--- a/src/java/net/sf/jabref/export/FieldFormatter.java
+++ b/src/java/net/sf/jabref/export/FieldFormatter.java
@@ -1,26 +1,26 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-/**
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public interface FieldFormatter {
-	public String format(String s, String fieldName) throws IllegalArgumentException;
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+/**
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public interface FieldFormatter {
+	public String format(String s, String fieldName) throws IllegalArgumentException;
+}
diff --git a/src/java/net/sf/jabref/export/FileActions.java b/src/java/net/sf/jabref/export/FileActions.java
index 9443875..3a7d2c3 100644
--- a/src/java/net/sf/jabref/export/FileActions.java
+++ b/src/java/net/sf/jabref/export/FileActions.java
@@ -1,527 +1,528 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.Writer;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.BibtexString;
-import net.sf.jabref.BibtexStringComparator;
-import net.sf.jabref.CrossRefEntryComparator;
-import net.sf.jabref.CustomEntryType;
-import net.sf.jabref.FieldComparator;
-import net.sf.jabref.FieldComparatorStack;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.IdComparator;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.MetaData;
-import ca.odell.glazedlists.BasicEventList;
-import ca.odell.glazedlists.SortedList;
-
-public class FileActions
-{
-
-    private static Pattern refPat = Pattern.compile("(#[A-Za-z]+#)"); // Used to detect string references in strings
-
-
-    private static void writePreamble(Writer fw, String preamble) throws IOException {
-    if (preamble != null) {
-        fw.write("@PREAMBLE{");
-        fw.write(preamble);
-        fw.write("}"+Globals.NEWLINE +Globals.NEWLINE);
-    }
-    }
-
-    /**
-     * Write all strings in alphabetical order, modified to produce a safe (for BibTeX) order of the strings
-     * if they reference each other.
-     * @param fw The Writer to send the output to.
-     * @param database The database whose strings we should write.
-     * @throws IOException If anthing goes wrong in writing.
-     */
-    private static void writeStrings(Writer fw, BibtexDatabase database) throws IOException {
-        List<BibtexString> strings = new ArrayList<BibtexString>();
-        for (String s : database.getStringKeySet()) {
-            strings.add(database.getString(s));
-        }
-        Collections.sort(strings, new BibtexStringComparator(true));
-        // First, make a Map of all entries:
-        HashMap<String, BibtexString> remaining = new HashMap<String, BibtexString>();
-        for (Iterator<BibtexString> i=strings.iterator(); i.hasNext();) {
-            BibtexString string = i.next();
-            remaining.put(string.getName(), string);
-        }
-        for (Iterator<BibtexString> i = strings.iterator(); i.hasNext();) {
-            BibtexString bs = i.next();
-            if (remaining.containsKey(bs.getName()))
-                writeString(fw, bs, remaining);
-        }
-    }
-
-    private static void writeString(Writer fw, BibtexString bs, HashMap<String, BibtexString> remaining) throws IOException {
-        // First remove this from the "remaining" list so it can't cause problem with circular refs:
-        remaining.remove(bs.getName());
-
-        // Then we go through the string looking for references to other strings. If we find references
-        // to strings that we will write, but still haven't, we write those before proceeding. This ensures
-        // that the string order will be acceptable for BibTeX.
-        String content = bs.getContent();
-        Matcher m;
-        while ((m = refPat.matcher(content)).find()) {
-            String foundLabel = m.group(1);
-            int restIndex = content.indexOf(foundLabel)+foundLabel.length();
-            content = content.substring(restIndex);
-            Object referred = remaining.get(foundLabel.substring(1, foundLabel.length()-1));
-            // If the label we found exists as a key in the "remaining" Map, we go on and write it now:
-            if (referred != null)
-                writeString(fw, (BibtexString)referred, remaining);
-        }
-
-        fw.write("@STRING{" + bs.getName() + " = ");
-        if (!bs.getContent().equals("")) {
-            try {
-                String formatted = (new LatexFieldFormatter()).format(bs.getContent(), Globals.BIBTEX_STRING);
-                fw.write(formatted);
-            } catch (IllegalArgumentException ex) {
-                throw new IllegalArgumentException(
-                        Globals.lang("The # character is not allowed in BibTeX strings unless escaped as in '\\#'.") + "\n" +
-                        Globals.lang("Before saving, please edit any strings containing the # character."));
-            }
-
-        }
-        else
-            fw.write("{}");
-
-        fw.write("}" + Globals.NEWLINE + Globals.NEWLINE);
-    }
-
-    /**
-     * Writes the JabRef signature and the encoding.
-     *
-     * @param encoding String the name of the encoding, which is part of the header.
-     */
-    private static void writeBibFileHeader(Writer out, String encoding) throws IOException {
-        out.write("% ");
-      out.write(GUIGlobals.SIGNATURE);
-      out.write(" "+GUIGlobals.version+"."+Globals.NEWLINE + "% " + 
-              GUIGlobals.encPrefix+encoding+Globals.NEWLINE +Globals.NEWLINE);
-    }
-
-    /**
-     * Saves the database to file. Two boolean values indicate whether
-     * only entries with a nonzero Globals.SEARCH value and only
-     * entries with a nonzero Globals.GROUPSEARCH value should be
-     * saved. This can be used to let the user save only the results of
-     * a search. False and false means all entries are saved.
-     */
-    public static SaveSession saveDatabase(BibtexDatabase database,
-		MetaData metaData, File file, JabRefPreferences prefs,
-		boolean checkSearch, boolean checkGroup, String encoding, boolean suppressBackup)
-		throws SaveException {
-    	
-		TreeMap<String, BibtexEntryType> types = new TreeMap<String, BibtexEntryType>();
-		
-		boolean backup = prefs.getBoolean("backup");
-        if (suppressBackup)
-            backup = false;
-
-		SaveSession session;
-		BibtexEntry exceptionCause = null;
-		try {
-			session = new SaveSession(file, encoding, backup);
-		} catch (Throwable e) {
-			System.err.println("Error from encoding: '" + encoding + "' Len: "
-				+ encoding.length());
-			// we must catch all exceptions to be able notify users that
-			// saving failed, no matter what the reason was
-			// (and they won't just quit JabRef thinking
-			// everyting worked and loosing data)
-			e.printStackTrace();
-			throw new SaveException(e.getMessage());
-		}
-
-		try {
-
-			// Get our data stream. This stream writes only to a temporary file,
-			// until committed.
-			VerifyingWriter fw = session.getWriter();
-
-			// Write signature.
-			writeBibFileHeader(fw, encoding);
-
-			// Write preamble if there is one.
-			writePreamble(fw, database.getPreamble());
-
-			// Write strings if there are any.
-			writeStrings(fw, database);
-
-			// Write database entries. Take care, using CrossRefEntry-
-			// Comparator, that referred entries occur after referring
-			// ones. Apart from crossref requirements, entries will be
-			// sorted as they appear on the screen.
-			List<BibtexEntry> sorter = getSortedEntries(database, null, true);
-
-			FieldFormatter ff = new LatexFieldFormatter();
-
-			for (BibtexEntry be : sorter) {
-				exceptionCause = be;
-
-				// Check if we must write the type definition for this
-				// entry, as well. Our criterion is that all non-standard
-				// types (*not* customized standard types) must be written.
-				BibtexEntryType tp = be.getType();
-
-				if (BibtexEntryType.getStandardType(tp.getName()) == null) {
-					types.put(tp.getName(), tp);
-				}
-
-				// Check if the entry should be written.
-				boolean write = true;
-
-				if (checkSearch && !nonZeroField(be, BibtexFields.SEARCH)) {
-					write = false;
-				}
-
-				if (checkGroup && !nonZeroField(be, BibtexFields.GROUPSEARCH)) {
-					write = false;
-				}
-
-				if (write) {
-					be.write(fw, ff, true);
-					fw.write(Globals.NEWLINE);
-				}
-			}
-
-			// Write meta data.
-			if (metaData != null) {
-				metaData.writeMetaData(fw);
-			}
-
-			// Write type definitions, if any:
-			if (types.size() > 0) {
-				for (Iterator<String> i = types.keySet().iterator(); i
-					.hasNext();) {
-                    BibtexEntryType type = types.get(i.next());
-                    if (type instanceof CustomEntryType) {
-                        CustomEntryType tp = (CustomEntryType)type;
-                        tp.save(fw);
-                        fw.write(Globals.NEWLINE);
-                    }
-				}
-
-			}
-
-			fw.close();
-		} catch (Throwable ex) {
-			ex.printStackTrace();
-			try {
-				session.cancel();
-				// repairAfterError(file, backup, INIT_OK);
-			} catch (IOException e) {
-				// Argh, another error? Can we do anything?
-				e.printStackTrace();
-                throw new SaveException(ex.getMessage()+"\n"+
-                        Globals.lang("Warning: could not complete file repair; your file may "
-                        +"have been corrupted. Error message")+": "+e.getMessage());
-
-			}
-			throw new SaveException(ex.getMessage(), exceptionCause);
-		}
-
-		return session;
-
-
-	}
-
-    /**
-	 * Saves the database to file, including only the entries included in the
-	 * supplied input array bes.
-	 * 
-	 * @return A List containing warnings, if any.
-	 */
-    @SuppressWarnings("unchecked")
-	public static SaveSession savePartOfDatabase(BibtexDatabase database, MetaData metaData,
-                                                 File file, JabRefPreferences prefs, BibtexEntry[] bes, String encoding) throws SaveException
-    {
-
-    TreeMap<String, BibtexEntryType> types = new TreeMap<String, BibtexEntryType>(); // Map
-																						// to
-																						// collect
-																						// entry
-																						// type
-																						// definitions
-    // that we must save along with entries using them.
-
-        BibtexEntry be = null;
-        boolean backup = prefs.getBoolean("backup");
-
-        SaveSession session;
-        try {
-            session = new SaveSession(file, encoding, backup);
-        } catch (IOException e) {
-            throw new SaveException(e.getMessage());
-        }
-
-        try
-        {
-
-            // Define our data stream.
-            VerifyingWriter fw = session.getWriter();
-
-            // Write signature.
-            writeBibFileHeader(fw, encoding);
-
-            // Write preamble if there is one.
-            writePreamble(fw, database.getPreamble());
-
-            // Write strings if there are any.
-        writeStrings(fw, database);
-
-            // Write database entries. Take care, using CrossRefEntry-
-            // Comparator, that referred entries occur after referring
-            // ones. Apart from crossref requirements, entries will be
-            // sorted as they appear on the screen.
-        String pri, sec, ter;
-
-        boolean priD, secD, terD;
-        if (!prefs.getBoolean("saveInStandardOrder")) {
-        // The setting is to save according to the current table order.
-        pri = prefs.get("priSort");
-        sec = prefs.get("secSort");
-        // sorted as they appear on the screen.
-        ter = prefs.get("terSort");
-        priD = prefs.getBoolean("priDescending");
-        secD = prefs.getBoolean("secDescending");
-        terD = prefs.getBoolean("terDescending");
-        } else {
-        // The setting is to save in standard order: author, editor, year
-        pri = "author";
-        sec = "editor";
-        ter = "year";
-        priD = false;
-        secD = false;
-        terD = true;
-        }
-
-        List<Comparator<BibtexEntry>> comparators = new ArrayList<Comparator<BibtexEntry>>();
-        comparators.add(new CrossRefEntryComparator());
-        comparators.add(new FieldComparator(pri, priD));
-        comparators.add(new FieldComparator(sec, secD));
-        comparators.add(new FieldComparator(ter, terD));
-        comparators.add(new FieldComparator(BibtexFields.KEY_FIELD));
-        // Use glazed lists to get a sorted view of the entries:
-        BasicEventList entryList = new BasicEventList();
-        SortedList sorter = new SortedList(entryList, new FieldComparatorStack<BibtexEntry>(comparators));
-
-        if ((bes != null) && (bes.length > 0))
-        for (int i=0; i<bes.length; i++) {
-            sorter.add(bes[i]);
-        }
-
-            FieldFormatter ff = new LatexFieldFormatter();
-
-            for (Iterator<BibtexEntry> i = sorter.iterator(); i.hasNext();)
-            {
-                be = (i.next());
-
-        // Check if we must write the type definition for this
-        // entry, as well. Our criterion is that all non-standard
-        // types (*not* customized standard types) must be written.
-        BibtexEntryType tp = be.getType();
-        if (BibtexEntryType.getStandardType(tp.getName()) == null) {
-            types.put(tp.getName(), tp);
-        }
-
-        be.write(fw, ff, true);
-        fw.write(Globals.NEWLINE);
-        }
-
-            // Write meta data.
-            if (metaData != null)
-            {
-                metaData.writeMetaData(fw);
-            }
-
-        // Write type definitions, if any:
-        if (types.size() > 0) {
-        for (Iterator<String> i=types.keySet().iterator(); i.hasNext();) {
-            CustomEntryType tp = (CustomEntryType)types.get(i.next());
-            tp.save(fw);
-            fw.write(Globals.NEWLINE);
-        }
-
-        }
-
-            fw.close();
-        }
-         catch (Throwable ex)
-        {
-            try {
-                session.cancel();
-                //repairAfterError(file, backup, status);
-            } catch (IOException e) {
-                // Argh, another error? Can we do anything?
-                e.printStackTrace();
-                throw new SaveException(ex.getMessage()+"\n"+
-                        Globals.lang("Warning: could not complete file repair; your file may "
-                        +"have been corrupted. Error message")+": "+e.getMessage());
-            }
-            throw new SaveException(ex.getMessage(), be);
-    }
-
-        return session;
-
-    }
-
-
-    /**
-     * This method attempts to get a Reader for the file path given, either by
-     * loading it as a resource (from within jar), or as a normal file.
-     * If unsuccessful (e.g. file not found), an IOException is thrown.
-     */
-    public static Reader getReader(String name) throws IOException {
-      Reader reader = null;
-      // Try loading as a resource first. This works for files inside the jar:
-      URL reso = Globals.class.getResource(name);
-
-      // If that didn't work, try loading as a normal file URL:
-      if (reso != null) {
-        try {
-          reader = new InputStreamReader(reso.openStream());
-        } catch (FileNotFoundException ex) {
-          throw new IOException(Globals.lang("Could not find layout file")+": '"+name+"'.");
-        }
-      } else {
-        File f = new File(name);
-        try {
-          reader = new FileReader(f);
-        } catch (FileNotFoundException ex) {
-          throw new IOException(Globals.lang("Could not find layout file")+": '"+name+"'.");
-        }
-      }
-
-      return reader;
-    }
-
-    /*
-    * We have begun to use getSortedEntries() for both database save operations
-    * and non-database save operations.  In a non-database save operation
-    * (such as the exportDatabase call), we do not wish to use the
-    * global preference of saving in standard order.
-    */
-    @SuppressWarnings("unchecked")
-	public static List<BibtexEntry> getSortedEntries(BibtexDatabase database, Set<String> keySet, boolean isSaveOperation) {
-        FieldComparatorStack<BibtexEntry> comparatorStack = null;
-
-        boolean inOriginalOrder = isSaveOperation ? Globals.prefs.getBoolean("saveInOriginalOrder") :
-            Globals.prefs.getBoolean("exportInOriginalOrder");
-        if (inOriginalOrder) {
-            // Sort entries based on their creation order, utilizing the fact
-            // that IDs used for entries are increasing, sortable numbers.
-            List<Comparator<BibtexEntry>> comparators = new ArrayList<Comparator<BibtexEntry>>();
-            comparators.add(new CrossRefEntryComparator());
-            comparators.add(new IdComparator());
-            comparatorStack = new FieldComparatorStack<BibtexEntry>(comparators);
-
-        } else {
-            String pri, sec, ter;
-            boolean priD, secD, terD = false;
-
-            boolean inStandardOrder = isSaveOperation ? Globals.prefs.getBoolean("saveInStandardOrder") :
-                Globals.prefs.getBoolean("exportInStandardOrder");
-            if (!inStandardOrder) {
-                // The setting is to save according to the current table order.
-                pri = Globals.prefs.get("priSort");
-                sec = Globals.prefs.get("secSort");
-                // sorted as they appear on the screen.
-                ter = Globals.prefs.get("terSort");
-                priD = Globals.prefs.getBoolean("priDescending");
-                secD = Globals.prefs.getBoolean("secDescending");
-                terD = Globals.prefs.getBoolean("terDescending");
-
-            } else {
-                // The setting is to save in standard order: author, editor, year
-                pri = "author";
-                sec = "editor";
-                ter = "year";
-                priD = false;
-                secD = false;
-                terD = true;
-            }
-            
-            List<Comparator<BibtexEntry>> comparators = new ArrayList<Comparator<BibtexEntry>>();
-            if (isSaveOperation)
-                comparators.add(new CrossRefEntryComparator());
-            comparators.add(new FieldComparator(pri, priD));
-            comparators.add(new FieldComparator(sec, secD));
-            comparators.add(new FieldComparator(ter, terD));
-            comparators.add(new FieldComparator(BibtexFields.KEY_FIELD));
-
-            comparatorStack = new FieldComparatorStack<BibtexEntry>(comparators);
-        }
-        // Use glazed lists to get a sorted view of the entries:
-        BasicEventList entryList = new BasicEventList();
-        SortedList sorter = new SortedList(entryList, comparatorStack);
-
-        if (keySet == null)
-            keySet = database.getKeySet();
-
-        if (keySet != null) {
-            Iterator<String> i = keySet.iterator();
-
-            for (; i.hasNext();) {
-                sorter.add(database.getEntryById((i.next())));
-            }
-        }
-        return sorter;
-    }
-
-    /** Returns true iff the entry has a nonzero value in its field.
-     */
-    private static boolean nonZeroField(BibtexEntry be, String field)
-    {
-        String o = (be.getField(field));
-
-        return ((o != null) && !o.equals("0"));
-    }
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.Writer;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.BibtexString;
+import net.sf.jabref.BibtexStringComparator;
+import net.sf.jabref.CrossRefEntryComparator;
+import net.sf.jabref.CustomEntryType;
+import net.sf.jabref.FieldComparator;
+import net.sf.jabref.FieldComparatorStack;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.IdComparator;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.MetaData;
+import ca.odell.glazedlists.BasicEventList;
+import ca.odell.glazedlists.SortedList;
+
+public class FileActions
+{
+
+    private static Pattern refPat = Pattern.compile("(#[A-Za-z]+#)"); // Used to detect string references in strings
+
+
+    private static void writePreamble(Writer fw, String preamble) throws IOException {
+    if (preamble != null) {
+        fw.write("@PREAMBLE{");
+        fw.write(preamble);
+        fw.write("}"+Globals.NEWLINE +Globals.NEWLINE);
+    }
+    }
+
+    /**
+     * Write all strings in alphabetical order, modified to produce a safe (for BibTeX) order of the strings
+     * if they reference each other.
+     * @param fw The Writer to send the output to.
+     * @param database The database whose strings we should write.
+     * @throws IOException If anthing goes wrong in writing.
+     */
+    private static void writeStrings(Writer fw, BibtexDatabase database) throws IOException {
+        List<BibtexString> strings = new ArrayList<BibtexString>();
+        for (String s : database.getStringKeySet()) {
+            strings.add(database.getString(s));
+        }
+        Collections.sort(strings, new BibtexStringComparator(true));
+        // First, make a Map of all entries:
+        HashMap<String, BibtexString> remaining = new HashMap<String, BibtexString>();
+        for (Iterator<BibtexString> i=strings.iterator(); i.hasNext();) {
+            BibtexString string = i.next();
+            remaining.put(string.getName(), string);
+        }
+        for (Iterator<BibtexString> i = strings.iterator(); i.hasNext();) {
+            BibtexString bs = i.next();
+            if (remaining.containsKey(bs.getName()))
+                writeString(fw, bs, remaining);
+        }
+    }
+
+    private static void writeString(Writer fw, BibtexString bs, HashMap<String, BibtexString> remaining) throws IOException {
+        // First remove this from the "remaining" list so it can't cause problem with circular refs:
+        remaining.remove(bs.getName());
+
+        // Then we go through the string looking for references to other strings. If we find references
+        // to strings that we will write, but still haven't, we write those before proceeding. This ensures
+        // that the string order will be acceptable for BibTeX.
+        String content = bs.getContent();
+        Matcher m;
+        while ((m = refPat.matcher(content)).find()) {
+            String foundLabel = m.group(1);
+            int restIndex = content.indexOf(foundLabel)+foundLabel.length();
+            content = content.substring(restIndex);
+            Object referred = remaining.get(foundLabel.substring(1, foundLabel.length()-1));
+            // If the label we found exists as a key in the "remaining" Map, we go on and write it now:
+            if (referred != null)
+                writeString(fw, (BibtexString)referred, remaining);
+        }
+
+        fw.write("@STRING{" + bs.getName() + " = ");
+        if (!bs.getContent().equals("")) {
+            try {
+                String formatted = (new LatexFieldFormatter()).format(bs.getContent(), Globals.BIBTEX_STRING);
+                fw.write(formatted);
+            } catch (IllegalArgumentException ex) {
+                throw new IllegalArgumentException(
+                        Globals.lang("The # character is not allowed in BibTeX strings unless escaped as in '\\#'.") + "\n" +
+                        Globals.lang("Before saving, please edit any strings containing the # character."));
+            }
+
+        }
+        else
+            fw.write("{}");
+
+        fw.write("}" + Globals.NEWLINE + Globals.NEWLINE);
+    }
+
+    /**
+     * Writes the JabRef signature and the encoding.
+     *
+     * @param encoding String the name of the encoding, which is part of the header.
+     */
+    private static void writeBibFileHeader(Writer out, String encoding) throws IOException {
+        out.write("% ");
+      out.write(GUIGlobals.SIGNATURE);
+      out.write(" "+GUIGlobals.version+"."+Globals.NEWLINE + "% " + 
+              GUIGlobals.encPrefix+encoding+Globals.NEWLINE +Globals.NEWLINE);
+    }
+
+    /**
+     * Saves the database to file. Two boolean values indicate whether
+     * only entries with a nonzero Globals.SEARCH value and only
+     * entries with a nonzero Globals.GROUPSEARCH value should be
+     * saved. This can be used to let the user save only the results of
+     * a search. False and false means all entries are saved.
+     */
+    public static SaveSession saveDatabase(BibtexDatabase database,
+		MetaData metaData, File file, JabRefPreferences prefs,
+		boolean checkSearch, boolean checkGroup, String encoding, boolean suppressBackup)
+		throws SaveException {
+    	
+		TreeMap<String, BibtexEntryType> types = new TreeMap<String, BibtexEntryType>();
+		
+		boolean backup = prefs.getBoolean("backup");
+        if (suppressBackup)
+            backup = false;
+
+		SaveSession session;
+		BibtexEntry exceptionCause = null;
+		try {
+			session = new SaveSession(file, encoding, backup);
+		} catch (Throwable e) {
+			if (encoding != null) {
+				System.err.println("Error from encoding: '" + encoding + "' Len: " + encoding.length());
+			}
+			// we must catch all exceptions to be able notify users that
+			// saving failed, no matter what the reason was
+			// (and they won't just quit JabRef thinking
+			// everyting worked and loosing data)
+			e.printStackTrace();
+			throw new SaveException(e.getMessage());
+		}
+
+		try {
+
+			// Get our data stream. This stream writes only to a temporary file,
+			// until committed.
+			VerifyingWriter fw = session.getWriter();
+
+			// Write signature.
+			writeBibFileHeader(fw, encoding);
+
+			// Write preamble if there is one.
+			writePreamble(fw, database.getPreamble());
+
+			// Write strings if there are any.
+			writeStrings(fw, database);
+
+			// Write database entries. Take care, using CrossRefEntry-
+			// Comparator, that referred entries occur after referring
+			// ones. Apart from crossref requirements, entries will be
+			// sorted as they appear on the screen.
+			List<BibtexEntry> sorter = getSortedEntries(database, null, true);
+
+			FieldFormatter ff = new LatexFieldFormatter();
+
+			for (BibtexEntry be : sorter) {
+				exceptionCause = be;
+
+				// Check if we must write the type definition for this
+				// entry, as well. Our criterion is that all non-standard
+				// types (*not* customized standard types) must be written.
+				BibtexEntryType tp = be.getType();
+
+				if (BibtexEntryType.getStandardType(tp.getName()) == null) {
+					types.put(tp.getName(), tp);
+				}
+
+				// Check if the entry should be written.
+				boolean write = true;
+
+				if (checkSearch && !nonZeroField(be, BibtexFields.SEARCH)) {
+					write = false;
+				}
+
+				if (checkGroup && !nonZeroField(be, BibtexFields.GROUPSEARCH)) {
+					write = false;
+				}
+
+				if (write) {
+					be.write(fw, ff, true);
+					fw.write(Globals.NEWLINE);
+				}
+			}
+
+			// Write meta data.
+			if (metaData != null) {
+				metaData.writeMetaData(fw);
+			}
+
+			// Write type definitions, if any:
+			if (types.size() > 0) {
+				for (Iterator<String> i = types.keySet().iterator(); i
+					.hasNext();) {
+                    BibtexEntryType type = types.get(i.next());
+                    if (type instanceof CustomEntryType) {
+                        CustomEntryType tp = (CustomEntryType)type;
+                        tp.save(fw);
+                        fw.write(Globals.NEWLINE);
+                    }
+				}
+
+			}
+
+			fw.close();
+		} catch (Throwable ex) {
+			ex.printStackTrace();
+			try {
+				session.cancel();
+				// repairAfterError(file, backup, INIT_OK);
+			} catch (IOException e) {
+				// Argh, another error? Can we do anything?
+				e.printStackTrace();
+                throw new SaveException(ex.getMessage()+"\n"+
+                        Globals.lang("Warning: could not complete file repair; your file may "
+                        +"have been corrupted. Error message")+": "+e.getMessage());
+
+			}
+			throw new SaveException(ex.getMessage(), exceptionCause);
+		}
+
+		return session;
+
+
+	}
+
+    /**
+	 * Saves the database to file, including only the entries included in the
+	 * supplied input array bes.
+	 * 
+	 * @return A List containing warnings, if any.
+	 */
+    @SuppressWarnings("unchecked")
+	public static SaveSession savePartOfDatabase(BibtexDatabase database, MetaData metaData,
+                                                 File file, JabRefPreferences prefs, BibtexEntry[] bes, String encoding) throws SaveException
+    {
+
+    TreeMap<String, BibtexEntryType> types = new TreeMap<String, BibtexEntryType>(); // Map
+																						// to
+																						// collect
+																						// entry
+																						// type
+																						// definitions
+    // that we must save along with entries using them.
+
+        BibtexEntry be = null;
+        boolean backup = prefs.getBoolean("backup");
+
+        SaveSession session;
+        try {
+            session = new SaveSession(file, encoding, backup);
+        } catch (IOException e) {
+            throw new SaveException(e.getMessage());
+        }
+
+        try
+        {
+
+            // Define our data stream.
+            VerifyingWriter fw = session.getWriter();
+
+            // Write signature.
+            writeBibFileHeader(fw, encoding);
+
+            // Write preamble if there is one.
+            writePreamble(fw, database.getPreamble());
+
+            // Write strings if there are any.
+        writeStrings(fw, database);
+
+            // Write database entries. Take care, using CrossRefEntry-
+            // Comparator, that referred entries occur after referring
+            // ones. Apart from crossref requirements, entries will be
+            // sorted as they appear on the screen.
+        String pri, sec, ter;
+
+        boolean priD, secD, terD;
+        if (!prefs.getBoolean("saveInStandardOrder")) {
+        // The setting is to save according to the current table order.
+        pri = prefs.get("priSort");
+        sec = prefs.get("secSort");
+        // sorted as they appear on the screen.
+        ter = prefs.get("terSort");
+        priD = prefs.getBoolean("priDescending");
+        secD = prefs.getBoolean("secDescending");
+        terD = prefs.getBoolean("terDescending");
+        } else {
+        // The setting is to save in standard order: author, editor, year
+        pri = "author";
+        sec = "editor";
+        ter = "year";
+        priD = false;
+        secD = false;
+        terD = true;
+        }
+
+        List<Comparator<BibtexEntry>> comparators = new ArrayList<Comparator<BibtexEntry>>();
+        comparators.add(new CrossRefEntryComparator());
+        comparators.add(new FieldComparator(pri, priD));
+        comparators.add(new FieldComparator(sec, secD));
+        comparators.add(new FieldComparator(ter, terD));
+        comparators.add(new FieldComparator(BibtexFields.KEY_FIELD));
+        // Use glazed lists to get a sorted view of the entries:
+        BasicEventList entryList = new BasicEventList();
+        SortedList sorter = new SortedList(entryList, new FieldComparatorStack<BibtexEntry>(comparators));
+
+        if ((bes != null) && (bes.length > 0))
+        for (int i=0; i<bes.length; i++) {
+            sorter.add(bes[i]);
+        }
+
+            FieldFormatter ff = new LatexFieldFormatter();
+
+            for (Iterator<BibtexEntry> i = sorter.iterator(); i.hasNext();)
+            {
+                be = (i.next());
+
+        // Check if we must write the type definition for this
+        // entry, as well. Our criterion is that all non-standard
+        // types (*not* customized standard types) must be written.
+        BibtexEntryType tp = be.getType();
+        if (BibtexEntryType.getStandardType(tp.getName()) == null) {
+            types.put(tp.getName(), tp);
+        }
+
+        be.write(fw, ff, true);
+        fw.write(Globals.NEWLINE);
+        }
+
+            // Write meta data.
+            if (metaData != null)
+            {
+                metaData.writeMetaData(fw);
+            }
+
+        // Write type definitions, if any:
+        if (types.size() > 0) {
+        for (Iterator<String> i=types.keySet().iterator(); i.hasNext();) {
+            CustomEntryType tp = (CustomEntryType)types.get(i.next());
+            tp.save(fw);
+            fw.write(Globals.NEWLINE);
+        }
+
+        }
+
+            fw.close();
+        }
+         catch (Throwable ex)
+        {
+            try {
+                session.cancel();
+                //repairAfterError(file, backup, status);
+            } catch (IOException e) {
+                // Argh, another error? Can we do anything?
+                e.printStackTrace();
+                throw new SaveException(ex.getMessage()+"\n"+
+                        Globals.lang("Warning: could not complete file repair; your file may "
+                        +"have been corrupted. Error message")+": "+e.getMessage());
+            }
+            throw new SaveException(ex.getMessage(), be);
+    }
+
+        return session;
+
+    }
+
+
+    /**
+     * This method attempts to get a Reader for the file path given, either by
+     * loading it as a resource (from within jar), or as a normal file.
+     * If unsuccessful (e.g. file not found), an IOException is thrown.
+     */
+    public static Reader getReader(String name) throws IOException {
+      Reader reader = null;
+      // Try loading as a resource first. This works for files inside the jar:
+      URL reso = Globals.class.getResource(name);
+
+      // If that didn't work, try loading as a normal file URL:
+      if (reso != null) {
+        try {
+          reader = new InputStreamReader(reso.openStream());
+        } catch (FileNotFoundException ex) {
+          throw new IOException(Globals.lang("Could not find layout file")+": '"+name+"'.");
+        }
+      } else {
+        File f = new File(name);
+        try {
+          reader = new FileReader(f);
+        } catch (FileNotFoundException ex) {
+          throw new IOException(Globals.lang("Could not find layout file")+": '"+name+"'.");
+        }
+      }
+
+      return reader;
+    }
+
+    /*
+    * We have begun to use getSortedEntries() for both database save operations
+    * and non-database save operations.  In a non-database save operation
+    * (such as the exportDatabase call), we do not wish to use the
+    * global preference of saving in standard order.
+    */
+    @SuppressWarnings("unchecked")
+	public static List<BibtexEntry> getSortedEntries(BibtexDatabase database, Set<String> keySet, boolean isSaveOperation) {
+        FieldComparatorStack<BibtexEntry> comparatorStack = null;
+
+        boolean inOriginalOrder = isSaveOperation ? Globals.prefs.getBoolean("saveInOriginalOrder") :
+            Globals.prefs.getBoolean("exportInOriginalOrder");
+        if (inOriginalOrder) {
+            // Sort entries based on their creation order, utilizing the fact
+            // that IDs used for entries are increasing, sortable numbers.
+            List<Comparator<BibtexEntry>> comparators = new ArrayList<Comparator<BibtexEntry>>();
+            comparators.add(new CrossRefEntryComparator());
+            comparators.add(new IdComparator());
+            comparatorStack = new FieldComparatorStack<BibtexEntry>(comparators);
+
+        } else {
+            String pri, sec, ter;
+            boolean priD, secD, terD = false;
+
+            boolean inStandardOrder = isSaveOperation ? Globals.prefs.getBoolean("saveInStandardOrder") :
+                Globals.prefs.getBoolean("exportInStandardOrder");
+            if (!inStandardOrder) {
+                // The setting is to save according to the current table order.
+                pri = Globals.prefs.get("priSort");
+                sec = Globals.prefs.get("secSort");
+                // sorted as they appear on the screen.
+                ter = Globals.prefs.get("terSort");
+                priD = Globals.prefs.getBoolean("priDescending");
+                secD = Globals.prefs.getBoolean("secDescending");
+                terD = Globals.prefs.getBoolean("terDescending");
+
+            } else {
+                // The setting is to save in standard order: author, editor, year
+                pri = "author";
+                sec = "editor";
+                ter = "year";
+                priD = false;
+                secD = false;
+                terD = true;
+            }
+            
+            List<Comparator<BibtexEntry>> comparators = new ArrayList<Comparator<BibtexEntry>>();
+            if (isSaveOperation)
+                comparators.add(new CrossRefEntryComparator());
+            comparators.add(new FieldComparator(pri, priD));
+            comparators.add(new FieldComparator(sec, secD));
+            comparators.add(new FieldComparator(ter, terD));
+            comparators.add(new FieldComparator(BibtexFields.KEY_FIELD));
+
+            comparatorStack = new FieldComparatorStack<BibtexEntry>(comparators);
+        }
+        // Use glazed lists to get a sorted view of the entries:
+        BasicEventList entryList = new BasicEventList();
+        SortedList sorter = new SortedList(entryList, comparatorStack);
+
+        if (keySet == null)
+            keySet = database.getKeySet();
+
+        if (keySet != null) {
+            Iterator<String> i = keySet.iterator();
+
+            for (; i.hasNext();) {
+                sorter.add(database.getEntryById((i.next())));
+            }
+        }
+        return sorter;
+    }
+
+    /** Returns true iff the entry has a nonzero value in its field.
+     */
+    private static boolean nonZeroField(BibtexEntry be, String field)
+    {
+        String o = (be.getField(field));
+
+        return ((o != null) && !o.equals("0"));
+    }
+}
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//  END OF FILE.
+///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/LatexFieldFormatter.java b/src/java/net/sf/jabref/export/LatexFieldFormatter.java
index 3a47ca0..cc6b1df 100644
--- a/src/java/net/sf/jabref/export/LatexFieldFormatter.java
+++ b/src/java/net/sf/jabref/export/LatexFieldFormatter.java
@@ -1,267 +1,267 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.util.Vector;
-
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-
-public class LatexFieldFormatter implements FieldFormatter {
-
-    StringBuffer sb;
-    int col; // First line usually starts about so much further to the right.
-    final int STARTCOL = 4;
-    private boolean neverFailOnHashes = false;
-
-    public void setNeverFailOnHashes(boolean neverFailOnHashes) {
-        this.neverFailOnHashes = neverFailOnHashes;
-    }
-
-    public String format(String text, String fieldName)
-            throws IllegalArgumentException {
-
-        if (Globals.prefs.putBracesAroundCapitals(fieldName) && !Globals.BIBTEX_STRING.equals(fieldName)) {
-            text = Util.putBracesAroundCapitals(text);
-        }
-
-        // If the field is non-standard, we will just append braces,
-        // wrap and write.
-        boolean resolveStrings = true;
-        if (Globals.prefs.getBoolean("resolveStringsAllFields")) {
-            // Resolve strings for all fields except some:
-            String[] exceptions = Globals.prefs.getStringArray("doNotResolveStringsFor");
-            for (int i = 0; i < exceptions.length; i++) {
-                if (exceptions[i].equals(fieldName)) {
-                    resolveStrings = false;
-                    break;
-                }
-            }
-        } else {
-            // Default operation - we only resolve strings for standard fields:
-            resolveStrings = BibtexFields.isStandardField(fieldName)
-                    || Globals.BIBTEX_STRING.equals(fieldName);
-        }
-        if (!resolveStrings) {
-            int brc = 0;
-            boolean ok = true;
-            for (int i = 0; i < text.length(); i++) {
-                char c = text.charAt(i);
-                //Util.pr(""+c);
-                if (c == '{') brc++;
-                if (c == '}') brc--;
-                if (brc < 0) {
-                    ok = false;
-                    break;
-                }
-            }
-            if (brc > 0)
-                ok = false;
-            if (!ok)
-                throw new IllegalArgumentException("Curly braces { and } must be balanced.");
-
-            sb = new StringBuffer("{");
-            // No formatting at all for these fields, to allow custom formatting?
-            //if (Globals.prefs.getBoolean("preserveFieldFormatting"))
-            //  sb.append(text);
-            //else
-            if (!Globals.prefs.isNonWrappableField(fieldName))
-                sb.append(Util.wrap2(text, GUIGlobals.LINE_LENGTH));
-            else
-                sb.append(text);
-
-            sb.append('}');
-
-            return sb.toString();
-        }
-
-        sb = new StringBuffer();
-        int pivot = 0, pos1, pos2;
-        col = STARTCOL;
-        // Here we assume that the user encloses any bibtex strings in #, e.g.:
-        // #jan# - #feb#
-        // ...which will be written to the file like this:
-        // jan # { - } # feb
-        checkBraces(text);
-
-
-        while (pivot < text.length()) {
-            int goFrom = pivot;
-            pos1 = pivot;
-            while (goFrom == pos1) {
-                pos1 = text.indexOf('#', goFrom);
-                if ((pos1 > 0) && (text.charAt(pos1 - 1) == '\\')) {
-                    goFrom = pos1 + 1;
-                    pos1++;
-                } else
-                    goFrom = pos1 - 1; // Ends the loop.
-            }
-
-            if (pos1 == -1) {
-                pos1 = text.length(); // No more occurences found.
-                pos2 = -1;
-            } else {
-                pos2 = text.indexOf('#', pos1 + 1);
-                if (pos2 == -1) {
-                    if (!neverFailOnHashes) {
-                        throw new IllegalArgumentException
-                                (Globals.lang("The # character is not allowed in BibTeX strings unless escaped as in '\\#'.") + "\n" +
-                                        Globals.lang("In JabRef, use pairs of # characters to indicate a string.") + "\n" +
-                                        Globals.lang("Note that the entry causing the problem has been selected."));
-                    } else {
-                        pos1 = text.length(); // just write out the rest of the text, and throw no exception
-                    }
-                }
-            }
-
-            if (pos1 > pivot)
-                writeText(text, pivot, pos1);
-            if ((pos1 < text.length()) && (pos2 - 1 > pos1))
-                // We check that the string label is not empty. That means
-                // an occurence of ## will simply be ignored. Should it instead
-                // cause an error message?
-                writeStringLabel(text, pos1 + 1, pos2, (pos1 == pivot),
-                        (pos2 + 1 == text.length()));
-
-            if (pos2 > -1) pivot = pos2 + 1;
-            else pivot = pos1 + 1;
-            //if (tell++ > 10) System.exit(0);
-        }
-
-        if (!Globals.prefs.isNonWrappableField(fieldName))
-            return Util.wrap2(sb.toString(), GUIGlobals.LINE_LENGTH);
-        else
-            return sb.toString();
-
-
-    }
-
-    private void writeText(String text, int start_pos,
-                           int end_pos) {
-        /*sb.append("{");
-        sb.append(text.substring(start_pos, end_pos));
-        sb.append("}");*/
-        sb.append('{');
-        boolean escape = false, inCommandName = false, inCommand = false,
-                inCommandOption = false;
-        int nestedEnvironments = 0;
-        StringBuffer commandName = new StringBuffer();
-        char c;
-        for (int i = start_pos; i < end_pos; i++) {
-            c = text.charAt(i);
-
-            // Track whether we are in a LaTeX command of some sort.
-            if (Character.isLetter(c) && (escape || inCommandName)) {
-                inCommandName = true;
-                if (!inCommandOption)
-                    commandName.append(c);
-            } else if (Character.isWhitespace(c) && (inCommand || inCommandOption)) {
-                //System.out.println("whitespace here");
-            } else if (inCommandName) {
-                // This means the command name is ended.
-                // Perhaps the beginning of an argument:
-                if (c == '[') {
-                    inCommandOption = true;
-                }
-                // Or the end of an argument:
-                else if (inCommandOption && (c == ']'))
-                    inCommandOption = false;
-                    // Or the beginning of the command body:
-                else if (!inCommandOption && (c == '{')) {
-                    //System.out.println("Read command: '"+commandName.toString()+"'");
-                    inCommandName = false;
-                    inCommand = true;
-                }
-                // Or simply the end of this command altogether:
-                else {
-                    //System.out.println("I think I read command: '"+commandName.toString()+"'");
-
-                    commandName.delete(0, commandName.length());
-                    inCommandName = false;
-                }
-            }
-            // If we are in a command body, see if it has ended:
-            if (inCommand && (c == '}')) {
-                //System.out.println("nestedEnvironments = " + nestedEnvironments);
-                //System.out.println("Done with command: '"+commandName.toString()+"'");
-                if (commandName.toString().equals("begin")) {
-                    nestedEnvironments++;
-                }
-                if (nestedEnvironments > 0 && commandName.toString().equals("end")) {
-                    nestedEnvironments--;
-                }
-                //System.out.println("nestedEnvironments = " + nestedEnvironments);
-
-                commandName.delete(0, commandName.length());
-                inCommand = false;
-            }
-
-            // We add a backslash before any ampersand characters, with one exception: if
-            // we are inside an \\url{...} command, we should write it as it is. Maybe.
-            if ((c == '&') && !escape &&
-                    !(inCommand && commandName.toString().equals("url")) &&
-                    (nestedEnvironments == 0)) {
-                sb.append("\\&");
-            } else
-                sb.append(c);
-            escape = (c == '\\');
-        }
-        sb.append('}');
-    }
-
-    private void writeStringLabel(String text, int start_pos, int end_pos,
-                                  boolean first, boolean last) {
-        //sb.append(Util.wrap2((first ? "" : " # ") + text.substring(start_pos, end_pos)
-        //		     + (last ? "" : " # "), GUIGlobals.LINE_LENGTH));
-        putIn((first ? "" : " # ") + text.substring(start_pos, end_pos)
-                + (last ? "" : " # "));
-    }
-
-    private void putIn(String s) {
-        sb.append(Util.wrap2(s, GUIGlobals.LINE_LENGTH));
-    }
-
-
-    private void checkBraces(String text) throws IllegalArgumentException {
-
-        Vector<Integer>
-                left = new Vector<Integer>(5, 3),
-                right = new Vector<Integer>(5, 3);
-        int current = -1;
-
-        // First we collect all occurences:
-        while ((current = text.indexOf('{', current + 1)) != -1)
-            left.add(new Integer(current));
-        while ((current = text.indexOf('}', current + 1)) != -1)
-            right.add(new Integer(current));
-
-        // Then we throw an exception if the error criteria are met.
-        if ((right.size() > 0) && (left.size() == 0))
-            throw new IllegalArgumentException
-                    ("'}' character ends string prematurely.");
-        if ((right.size() > 0) && ((right.elementAt(0)).intValue()
-                < (left.elementAt(0)).intValue()))
-            throw new IllegalArgumentException
-                    ("'}' character ends string prematurely.");
-        if (left.size() != right.size())
-            throw new IllegalArgumentException
-                    ("Braces don't match.");
-
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.util.Vector;
+
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+
+public class LatexFieldFormatter implements FieldFormatter {
+
+    StringBuffer sb;
+    int col; // First line usually starts about so much further to the right.
+    final int STARTCOL = 4;
+    private boolean neverFailOnHashes = false;
+
+    public void setNeverFailOnHashes(boolean neverFailOnHashes) {
+        this.neverFailOnHashes = neverFailOnHashes;
+    }
+
+    public String format(String text, String fieldName)
+            throws IllegalArgumentException {
+
+        if (Globals.prefs.putBracesAroundCapitals(fieldName) && !Globals.BIBTEX_STRING.equals(fieldName)) {
+            text = Util.putBracesAroundCapitals(text);
+        }
+
+        // If the field is non-standard, we will just append braces,
+        // wrap and write.
+        boolean resolveStrings = true;
+        if (Globals.prefs.getBoolean("resolveStringsAllFields")) {
+            // Resolve strings for all fields except some:
+            String[] exceptions = Globals.prefs.getStringArray("doNotResolveStringsFor");
+            for (int i = 0; i < exceptions.length; i++) {
+                if (exceptions[i].equals(fieldName)) {
+                    resolveStrings = false;
+                    break;
+                }
+            }
+        } else {
+            // Default operation - we only resolve strings for standard fields:
+            resolveStrings = BibtexFields.isStandardField(fieldName)
+                    || Globals.BIBTEX_STRING.equals(fieldName);
+        }
+        if (!resolveStrings) {
+            int brc = 0;
+            boolean ok = true;
+            for (int i = 0; i < text.length(); i++) {
+                char c = text.charAt(i);
+                //Util.pr(""+c);
+                if (c == '{') brc++;
+                if (c == '}') brc--;
+                if (brc < 0) {
+                    ok = false;
+                    break;
+                }
+            }
+            if (brc > 0)
+                ok = false;
+            if (!ok)
+                throw new IllegalArgumentException("Curly braces { and } must be balanced.");
+
+            sb = new StringBuffer("{");
+            // No formatting at all for these fields, to allow custom formatting?
+            //if (Globals.prefs.getBoolean("preserveFieldFormatting"))
+            //  sb.append(text);
+            //else
+            if (!Globals.prefs.isNonWrappableField(fieldName))
+                sb.append(Util.wrap2(text, GUIGlobals.LINE_LENGTH));
+            else
+                sb.append(text);
+
+            sb.append('}');
+
+            return sb.toString();
+        }
+
+        sb = new StringBuffer();
+        int pivot = 0, pos1, pos2;
+        col = STARTCOL;
+        // Here we assume that the user encloses any bibtex strings in #, e.g.:
+        // #jan# - #feb#
+        // ...which will be written to the file like this:
+        // jan # { - } # feb
+        checkBraces(text);
+
+
+        while (pivot < text.length()) {
+            int goFrom = pivot;
+            pos1 = pivot;
+            while (goFrom == pos1) {
+                pos1 = text.indexOf('#', goFrom);
+                if ((pos1 > 0) && (text.charAt(pos1 - 1) == '\\')) {
+                    goFrom = pos1 + 1;
+                    pos1++;
+                } else
+                    goFrom = pos1 - 1; // Ends the loop.
+            }
+
+            if (pos1 == -1) {
+                pos1 = text.length(); // No more occurences found.
+                pos2 = -1;
+            } else {
+                pos2 = text.indexOf('#', pos1 + 1);
+                if (pos2 == -1) {
+                    if (!neverFailOnHashes) {
+                        throw new IllegalArgumentException
+                                (Globals.lang("The # character is not allowed in BibTeX strings unless escaped as in '\\#'.") + "\n" +
+                                        Globals.lang("In JabRef, use pairs of # characters to indicate a string.") + "\n" +
+                                        Globals.lang("Note that the entry causing the problem has been selected."));
+                    } else {
+                        pos1 = text.length(); // just write out the rest of the text, and throw no exception
+                    }
+                }
+            }
+
+            if (pos1 > pivot)
+                writeText(text, pivot, pos1);
+            if ((pos1 < text.length()) && (pos2 - 1 > pos1))
+                // We check that the string label is not empty. That means
+                // an occurence of ## will simply be ignored. Should it instead
+                // cause an error message?
+                writeStringLabel(text, pos1 + 1, pos2, (pos1 == pivot),
+                        (pos2 + 1 == text.length()));
+
+            if (pos2 > -1) pivot = pos2 + 1;
+            else pivot = pos1 + 1;
+            //if (tell++ > 10) System.exit(0);
+        }
+
+        if (!Globals.prefs.isNonWrappableField(fieldName))
+            return Util.wrap2(sb.toString(), GUIGlobals.LINE_LENGTH);
+        else
+            return sb.toString();
+
+
+    }
+
+    private void writeText(String text, int start_pos,
+                           int end_pos) {
+        /*sb.append("{");
+        sb.append(text.substring(start_pos, end_pos));
+        sb.append("}");*/
+        sb.append('{');
+        boolean escape = false, inCommandName = false, inCommand = false,
+                inCommandOption = false;
+        int nestedEnvironments = 0;
+        StringBuffer commandName = new StringBuffer();
+        char c;
+        for (int i = start_pos; i < end_pos; i++) {
+            c = text.charAt(i);
+
+            // Track whether we are in a LaTeX command of some sort.
+            if (Character.isLetter(c) && (escape || inCommandName)) {
+                inCommandName = true;
+                if (!inCommandOption)
+                    commandName.append(c);
+            } else if (Character.isWhitespace(c) && (inCommand || inCommandOption)) {
+                //System.out.println("whitespace here");
+            } else if (inCommandName) {
+                // This means the command name is ended.
+                // Perhaps the beginning of an argument:
+                if (c == '[') {
+                    inCommandOption = true;
+                }
+                // Or the end of an argument:
+                else if (inCommandOption && (c == ']'))
+                    inCommandOption = false;
+                    // Or the beginning of the command body:
+                else if (!inCommandOption && (c == '{')) {
+                    //System.out.println("Read command: '"+commandName.toString()+"'");
+                    inCommandName = false;
+                    inCommand = true;
+                }
+                // Or simply the end of this command altogether:
+                else {
+                    //System.out.println("I think I read command: '"+commandName.toString()+"'");
+
+                    commandName.delete(0, commandName.length());
+                    inCommandName = false;
+                }
+            }
+            // If we are in a command body, see if it has ended:
+            if (inCommand && (c == '}')) {
+                //System.out.println("nestedEnvironments = " + nestedEnvironments);
+                //System.out.println("Done with command: '"+commandName.toString()+"'");
+                if (commandName.toString().equals("begin")) {
+                    nestedEnvironments++;
+                }
+                if (nestedEnvironments > 0 && commandName.toString().equals("end")) {
+                    nestedEnvironments--;
+                }
+                //System.out.println("nestedEnvironments = " + nestedEnvironments);
+
+                commandName.delete(0, commandName.length());
+                inCommand = false;
+            }
+
+            // We add a backslash before any ampersand characters, with one exception: if
+            // we are inside an \\url{...} command, we should write it as it is. Maybe.
+            if ((c == '&') && !escape &&
+                    !(inCommand && commandName.toString().equals("url")) &&
+                    (nestedEnvironments == 0)) {
+                sb.append("\\&");
+            } else
+                sb.append(c);
+            escape = (c == '\\');
+        }
+        sb.append('}');
+    }
+
+    private void writeStringLabel(String text, int start_pos, int end_pos,
+                                  boolean first, boolean last) {
+        //sb.append(Util.wrap2((first ? "" : " # ") + text.substring(start_pos, end_pos)
+        //		     + (last ? "" : " # "), GUIGlobals.LINE_LENGTH));
+        putIn((first ? "" : " # ") + text.substring(start_pos, end_pos)
+                + (last ? "" : " # "));
+    }
+
+    private void putIn(String s) {
+        sb.append(Util.wrap2(s, GUIGlobals.LINE_LENGTH));
+    }
+
+
+    private void checkBraces(String text) throws IllegalArgumentException {
+
+        Vector<Integer>
+                left = new Vector<Integer>(5, 3),
+                right = new Vector<Integer>(5, 3);
+        int current = -1;
+
+        // First we collect all occurences:
+        while ((current = text.indexOf('{', current + 1)) != -1)
+            left.add(new Integer(current));
+        while ((current = text.indexOf('}', current + 1)) != -1)
+            right.add(new Integer(current));
+
+        // Then we throw an exception if the error criteria are met.
+        if ((right.size() > 0) && (left.size() == 0))
+            throw new IllegalArgumentException
+                    ("'}' character ends string prematurely.");
+        if ((right.size() > 0) && ((right.elementAt(0)).intValue()
+                < (left.elementAt(0)).intValue()))
+            throw new IllegalArgumentException
+                    ("'}' character ends string prematurely.");
+        if (left.size() != right.size())
+            throw new IllegalArgumentException
+                    ("Braces don't match.");
+
+    }
+
+}
diff --git a/src/java/net/sf/jabref/export/MSBibExportFormat.java b/src/java/net/sf/jabref/export/MSBibExportFormat.java
index 65444a7..de50b3a 100644
--- a/src/java/net/sf/jabref/export/MSBibExportFormat.java
+++ b/src/java/net/sf/jabref/export/MSBibExportFormat.java
@@ -1,72 +1,72 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Set;
-
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.Globals;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.msbib.MSBibDatabase;
-
-/**
- * ExportFormat for exporting in MSBIB XML format.
- */
-class MSBibExportFormat extends ExportFormat {
-
-	public MSBibExportFormat() {
-        super(Globals.lang("MS Office 2007"), "MSBib", null, null, ".xml");
-    }
-
-    public void performExport(final BibtexDatabase database, final MetaData metaData,
-                              final String file, final String encoding, Set<String> keySet) throws IOException {
-    	// forcing to use UTF8 output format for some problems with
-    	// xml export in other encodings
-        SaveSession ss = getSaveSession("UTF8", new File(file));
-        VerifyingWriter ps = ss.getWriter();
-        MSBibDatabase md = new MSBibDatabase(database, keySet);
-
-        // PS: DOES NOT SUPPORT EXPORTING ONLY A SET OF ENTRIES
-
-        try {
-            DOMSource source = new DOMSource(md.getDOMrepresentation());
-            StreamResult result = new StreamResult(ps);
-            Transformer trans = TransformerFactory.newInstance().newTransformer();
-            trans.setOutputProperty(OutputKeys.INDENT, "yes");
-            trans.transform(source, result);
-        }
-        catch (Exception e) {
-            throw new Error(e);
-        }
-
-        try {
-            finalizeSaveSession(ss);
-        } catch (SaveException ex) {
-            throw new IOException(ex.getMessage());
-        } catch (Exception e) {
-            throw new IOException(e.getMessage());
-        }
-        return;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Set;
+
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.Globals;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.msbib.MSBibDatabase;
+
+/**
+ * ExportFormat for exporting in MSBIB XML format.
+ */
+class MSBibExportFormat extends ExportFormat {
+
+	public MSBibExportFormat() {
+        super(Globals.lang("MS Office 2007"), "MSBib", null, null, ".xml");
+    }
+
+    public void performExport(final BibtexDatabase database, final MetaData metaData,
+                              final String file, final String encoding, Set<String> keySet) throws IOException {
+    	// forcing to use UTF8 output format for some problems with
+    	// xml export in other encodings
+        SaveSession ss = getSaveSession("UTF8", new File(file));
+        VerifyingWriter ps = ss.getWriter();
+        MSBibDatabase md = new MSBibDatabase(database, keySet);
+
+        // PS: DOES NOT SUPPORT EXPORTING ONLY A SET OF ENTRIES
+
+        try {
+            DOMSource source = new DOMSource(md.getDOMrepresentation());
+            StreamResult result = new StreamResult(ps);
+            Transformer trans = TransformerFactory.newInstance().newTransformer();
+            trans.setOutputProperty(OutputKeys.INDENT, "yes");
+            trans.transform(source, result);
+        }
+        catch (Exception e) {
+            throw new Error(e);
+        }
+
+        try {
+            finalizeSaveSession(ss);
+        } catch (SaveException ex) {
+            throw new IOException(ex.getMessage());
+        } catch (Exception e) {
+            throw new IOException(e.getMessage());
+        }
+        return;
+    }
+}
diff --git a/src/java/net/sf/jabref/export/ModsExportFormat.java b/src/java/net/sf/jabref/export/ModsExportFormat.java
index e6efb8f..fee047c 100644
--- a/src/java/net/sf/jabref/export/ModsExportFormat.java
+++ b/src/java/net/sf/jabref/export/ModsExportFormat.java
@@ -1,66 +1,66 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.mods.MODSDatabase;
-
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.OutputKeys;
-import java.util.Set;
-import java.io.IOException;
-import java.io.File;
-
-/**
- * ExportFormat for exporting in MODS XML format.
- */
-class ModsExportFormat extends ExportFormat {
-    public ModsExportFormat() {
-        super(Globals.lang("MODS"), "mods", null, null, ".xml");
-    }
-
-    public void performExport(final BibtexDatabase database, final MetaData metaData,
-                              final String file, final String encoding, Set<String> keySet) throws IOException {
-        SaveSession ss = getSaveSession("UTF8", new File(file));
-        VerifyingWriter ps = ss.getWriter();
-        MODSDatabase md = new MODSDatabase(database, keySet);
-
-        try {
-            DOMSource source = new DOMSource(md.getDOMrepresentation());
-            StreamResult result = new StreamResult(ps);
-            Transformer trans = TransformerFactory.newInstance().newTransformer();
-            trans.setOutputProperty(OutputKeys.INDENT, "yes");
-            trans.transform(source, result);
-        }
-        catch (Exception e) {
-            throw new Error(e);
-        }
-
-        try {
-            finalizeSaveSession(ss);
-        } catch (SaveException ex) {
-            throw new IOException(ex.getMessage());
-        } catch (Exception e) {
-            throw new IOException(e.getMessage());
-        }
-        return;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.mods.MODSDatabase;
+
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.OutputKeys;
+import java.util.Set;
+import java.io.IOException;
+import java.io.File;
+
+/**
+ * ExportFormat for exporting in MODS XML format.
+ */
+class ModsExportFormat extends ExportFormat {
+    public ModsExportFormat() {
+        super(Globals.lang("MODS"), "mods", null, null, ".xml");
+    }
+
+    public void performExport(final BibtexDatabase database, final MetaData metaData,
+                              final String file, final String encoding, Set<String> keySet) throws IOException {
+        SaveSession ss = getSaveSession("UTF8", new File(file));
+        VerifyingWriter ps = ss.getWriter();
+        MODSDatabase md = new MODSDatabase(database, keySet);
+
+        try {
+            DOMSource source = new DOMSource(md.getDOMrepresentation());
+            StreamResult result = new StreamResult(ps);
+            Transformer trans = TransformerFactory.newInstance().newTransformer();
+            trans.setOutputProperty(OutputKeys.INDENT, "yes");
+            trans.transform(source, result);
+        }
+        catch (Exception e) {
+            throw new Error(e);
+        }
+
+        try {
+            finalizeSaveSession(ss);
+        } catch (SaveException ex) {
+            throw new IOException(ex.getMessage());
+        } catch (Exception e) {
+            throw new IOException(e.getMessage());
+        }
+        return;
+    }
+}
diff --git a/src/java/net/sf/jabref/export/MySQLExport.java b/src/java/net/sf/jabref/export/MySQLExport.java
index 8a6b230..cdd0825 100644
--- a/src/java/net/sf/jabref/export/MySQLExport.java
+++ b/src/java/net/sf/jabref/export/MySQLExport.java
@@ -1,58 +1,58 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.util.Set;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.Globals;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.sql.DBExporterAndImporterFactory;
-
-/**
- * MySQLExport contributed by Lee Patton.
- */
-public class MySQLExport extends ExportFormat {
-
-    public MySQLExport() {
-        super(Globals.lang("MySQL database"), "mysql", null, null, ".sql");
-    }
-
-    /**
-     * First method called when user starts the export.
-     * 
-     * @param database
-     *            The bibtex database from which to export.
-     * @param file
-     *            The filename to which the export should be writtten.
-     * @param encoding
-     *            The encoding to use.
-     * @param keySet
-     *            The set of IDs of the entries to export.
-     * @throws java.lang.Exception
-     *             If something goes wrong, feel free to throw an exception. The
-     *             error message is shown to the user.
-     */
-    public void performExport(final BibtexDatabase database,
-        final MetaData metaData, final String file, final String encoding,
-        Set<String> keySet) throws Exception {
-    	
-        new DBExporterAndImporterFactory().getExporter("MYSQL").exportDatabaseAsFile(database, metaData, keySet, file);
-
-    }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.util.Set;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.Globals;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.sql.DBExporterAndImporterFactory;
+
+/**
+ * MySQLExport contributed by Lee Patton.
+ */
+public class MySQLExport extends ExportFormat {
+
+    public MySQLExport() {
+        super(Globals.lang("MySQL database"), "mysql", null, null, ".sql");
+    }
+
+    /**
+     * First method called when user starts the export.
+     * 
+     * @param database
+     *            The bibtex database from which to export.
+     * @param file
+     *            The filename to which the export should be writtten.
+     * @param encoding
+     *            The encoding to use.
+     * @param keySet
+     *            The set of IDs of the entries to export.
+     * @throws java.lang.Exception
+     *             If something goes wrong, feel free to throw an exception. The
+     *             error message is shown to the user.
+     */
+    public void performExport(final BibtexDatabase database,
+        final MetaData metaData, final String file, final String encoding,
+        Set<String> keySet) throws Exception {
+    	
+        new DBExporterAndImporterFactory().getExporter("MYSQL").exportDatabaseAsFile(database, metaData, keySet, file);
+
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/export/OOCalcDatabase.java b/src/java/net/sf/jabref/export/OOCalcDatabase.java
index d0f17bd..5f1e3e5 100644
--- a/src/java/net/sf/jabref/export/OOCalcDatabase.java
+++ b/src/java/net/sf/jabref/export/OOCalcDatabase.java
@@ -1,205 +1,205 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import net.sf.jabref.*;
-import net.sf.jabref.export.layout.format.GetOpenOfficeType;
-import net.sf.jabref.export.layout.format.RemoveBrackets;
-import net.sf.jabref.export.layout.format.RemoveWhitespace;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Text;
-
-import ca.odell.glazedlists.BasicEventList;
-import ca.odell.glazedlists.SortedList;
-
-/**
- * @author Morten O. Alver.
- * Based on net.sf.jabref.MODSDatabase by Michael Wrighton
- *
- */
-public class OOCalcDatabase {
-    protected Collection<BibtexEntry> entries;
-
-    @SuppressWarnings("unchecked")
-	public OOCalcDatabase(BibtexDatabase bibtex, Set<String> keySet) {
-        // Make a list of comparators for sorting the entries:
-        List<FieldComparator> comparators = new ArrayList<FieldComparator>();
-        comparators.add(new FieldComparator("author"));
-        comparators.add(new FieldComparator("year"));
-        comparators.add(new FieldComparator(BibtexFields.KEY_FIELD));
-        // Use glazed lists to get a sorted view of the entries:
-        BasicEventList entryList = new BasicEventList();
-        // Set up a list of all entries, if keySet==null, or the entries whose
-        // ids are in keySet, otherwise:
-        if (keySet == null)
-            entryList.addAll(bibtex.getEntries());
-        else {
-            for (String key : keySet)
-                entryList.add(bibtex.getEntryById(key));
-        }
-        
-        entries = new SortedList(entryList, new FieldComparatorStack(comparators));
-
-    }
-    public Document getDOMrepresentation() {
-        Document result = null;
-        try {
-            DocumentBuilder dbuild = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-            result = dbuild.newDocument();
-            Element collection = result.createElement("office:document-content");
-            //collection.setAttribute("xmlns", "http://openoffice.org/2000/office");
-            collection.setAttribute("xmlns:office", "http://openoffice.org/2000/office");
-            collection.setAttribute("xmlns:style", "http://openoffice.org/2000/style");
-            collection.setAttribute("xmlns:text", "http://openoffice.org/2000/text");
-            collection.setAttribute("xmlns:table", "http://openoffice.org/2000/table");
-            collection.setAttribute("xmlns:office:class", "spreadsheet");
-            collection.setAttribute("xmlns:office:version", "1.0");
-            collection.setAttribute("xmlns:fo", "http://www.w3.org/1999/XSL/Format");
-            Element el = result.createElement("office:script");
-            collection.appendChild(el);
-
-            el = result.createElement("office:automatic-styles");
-            Element el2 = result.createElement("style:style");
-            el2.setAttribute("style:name", "ro1");
-            el2.setAttribute("style:family", "table-row");
-            Element el3 = result.createElement("style.properties");
-            el3.setAttribute("style:row-height", "0.1681inch");
-            el3.setAttribute("fo:break-before", "auto");
-            el3.setAttribute("style:use-optimal-row-height", "true");
-            el2.appendChild(el3);
-            el.appendChild(el2);
-            el2 = result.createElement("style:style");
-            el2.setAttribute("style:name", "ta1");
-            el2.setAttribute("style:family", "table");
-            el2.setAttribute("style:master-page-name", "Default");
-            el3 = result.createElement("style:properties");
-            el3.setAttribute("table:display", "true");
-            el2.appendChild(el3);
-            el.appendChild(el2);
-            collection.appendChild(el);
-
-            Element body = result.createElement("office:body"),
-                    table = result.createElement("table:table");
-            table.setAttribute("table:name", "biblio");
-            table.setAttribute("table.style-name", "ta1");
-
-            Element row = result.createElement("table:table-row");
-            row.setAttribute("table.style-name", "ro1");
-            addTableCell(result, row, "Type");
-            addTableCell(result, row, "ISBN");
-            addTableCell(result, row, "Identifier");
-            addTableCell(result, row, "Author");
-            addTableCell(result, row, "Title");
-            addTableCell(result, row, "Journal");
-            addTableCell(result, row, "Volume");
-            addTableCell(result, row, "Number");
-            addTableCell(result, row, "Month");
-            addTableCell(result, row, "Pages");
-            addTableCell(result, row, "Year");
-            addTableCell(result, row, "Address");
-            addTableCell(result, row, "Note");
-            addTableCell(result, row, "URL");
-            addTableCell(result, row, "Booktitle");
-            addTableCell(result, row, "Chapter");
-            addTableCell(result, row, "Edition");
-            addTableCell(result, row, "Series");
-            addTableCell(result, row, "Editor");
-            addTableCell(result, row, "Publisher");
-            addTableCell(result, row, "ReportType");
-            addTableCell(result, row, "Howpublished");
-            addTableCell(result, row, "Institution");
-            addTableCell(result, row, "Organization");
-            addTableCell(result, row, "School");
-            addTableCell(result, row, "Annote");
-            addTableCell(result, row, "Custom1");
-            addTableCell(result, row, "Custom2");
-            addTableCell(result, row, "Custom3");
-            addTableCell(result, row, "Custom4");
-            addTableCell(result, row, "Custom5");
-            table.appendChild(row);
-
-            for(BibtexEntry e : entries){
-                row = result.createElement("table:table-row");
-                addTableCell(result, row, new GetOpenOfficeType().format(e.getType().getName()));
-                addTableCell(result, row, getField(e, "isbn"));
-                addTableCell(result, row, getField(e, BibtexFields.KEY_FIELD));
-                addTableCell(result, row, getField(e, "author"));//new AuthorLastFirst().format(getField(e, "author")));
-                addTableCell(result, row, new RemoveWhitespace().format(new RemoveBrackets().format(getField(e, "title"))));
-                addTableCell(result, row, getField(e, "journal"));
-                addTableCell(result, row, getField(e, "volume"));
-                addTableCell(result, row, getField(e, "number"));
-                addTableCell(result, row, getField(e, "month"));
-                addTableCell(result, row, getField(e, "pages"));
-                addTableCell(result, row, getField(e, "year"));
-                addTableCell(result, row, getField(e, "address"));
-                addTableCell(result, row, getField(e, "note"));
-                addTableCell(result, row, getField(e, "url"));
-                addTableCell(result, row, getField(e, "booktitle"));
-                addTableCell(result, row, getField(e, "chapter"));
-                addTableCell(result, row, getField(e, "edition"));
-                addTableCell(result, row, getField(e, "series"));
-                addTableCell(result, row, getField(e, "editor"));//new AuthorLastFirst().format(getField(e, "editor")));
-                addTableCell(result, row, getField(e, "publisher"));
-                addTableCell(result, row, getField(e, "reporttype"));
-                addTableCell(result, row, getField(e, "howpublished"));
-                addTableCell(result, row, getField(e, "institution"));
-                addTableCell(result, row, getField(e, "organization"));
-                addTableCell(result, row, getField(e, "school"));
-                addTableCell(result, row, getField(e, "annote"));
-                addTableCell(result, row, "");
-                addTableCell(result, row, "");
-                addTableCell(result, row, "");
-                addTableCell(result, row, "");
-                addTableCell(result, row, "");
-                table.appendChild(row);
-            }
-
-            body.appendChild(table);
-            collection.appendChild(body);
-
-            result.appendChild(collection);
-        } catch (Exception e) {
-            System.out.println("Exception caught..." + e);
-            e.printStackTrace();
-        }
-        return result;
-    }
-
-    protected String getField(BibtexEntry e, String field) {
-        Object o = e.getField(field);
-        return o == null ? "" : o.toString();
-    }
-
-    protected void addTableCell(Document doc, Element parent, String content) {
-        Element cell = doc.createElement("table:table-cell"),
-                text = doc.createElement("text:p");
-    Text textNode = doc.createTextNode(content);
-    text.appendChild(textNode);
-        //text.setTextContent(content);
-        cell.appendChild(text);
-        parent.appendChild(cell);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import net.sf.jabref.*;
+import net.sf.jabref.export.layout.format.GetOpenOfficeType;
+import net.sf.jabref.export.layout.format.RemoveBrackets;
+import net.sf.jabref.export.layout.format.RemoveWhitespace;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+
+import ca.odell.glazedlists.BasicEventList;
+import ca.odell.glazedlists.SortedList;
+
+/**
+ * @author Morten O. Alver.
+ * Based on net.sf.jabref.MODSDatabase by Michael Wrighton
+ *
+ */
+public class OOCalcDatabase {
+    protected Collection<BibtexEntry> entries;
+
+    @SuppressWarnings("unchecked")
+	public OOCalcDatabase(BibtexDatabase bibtex, Set<String> keySet) {
+        // Make a list of comparators for sorting the entries:
+        List<FieldComparator> comparators = new ArrayList<FieldComparator>();
+        comparators.add(new FieldComparator("author"));
+        comparators.add(new FieldComparator("year"));
+        comparators.add(new FieldComparator(BibtexFields.KEY_FIELD));
+        // Use glazed lists to get a sorted view of the entries:
+        BasicEventList entryList = new BasicEventList();
+        // Set up a list of all entries, if keySet==null, or the entries whose
+        // ids are in keySet, otherwise:
+        if (keySet == null)
+            entryList.addAll(bibtex.getEntries());
+        else {
+            for (String key : keySet)
+                entryList.add(bibtex.getEntryById(key));
+        }
+        
+        entries = new SortedList(entryList, new FieldComparatorStack(comparators));
+
+    }
+    public Document getDOMrepresentation() {
+        Document result = null;
+        try {
+            DocumentBuilder dbuild = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+            result = dbuild.newDocument();
+            Element collection = result.createElement("office:document-content");
+            //collection.setAttribute("xmlns", "http://openoffice.org/2000/office");
+            collection.setAttribute("xmlns:office", "http://openoffice.org/2000/office");
+            collection.setAttribute("xmlns:style", "http://openoffice.org/2000/style");
+            collection.setAttribute("xmlns:text", "http://openoffice.org/2000/text");
+            collection.setAttribute("xmlns:table", "http://openoffice.org/2000/table");
+            collection.setAttribute("xmlns:office:class", "spreadsheet");
+            collection.setAttribute("xmlns:office:version", "1.0");
+            collection.setAttribute("xmlns:fo", "http://www.w3.org/1999/XSL/Format");
+            Element el = result.createElement("office:script");
+            collection.appendChild(el);
+
+            el = result.createElement("office:automatic-styles");
+            Element el2 = result.createElement("style:style");
+            el2.setAttribute("style:name", "ro1");
+            el2.setAttribute("style:family", "table-row");
+            Element el3 = result.createElement("style.properties");
+            el3.setAttribute("style:row-height", "0.1681inch");
+            el3.setAttribute("fo:break-before", "auto");
+            el3.setAttribute("style:use-optimal-row-height", "true");
+            el2.appendChild(el3);
+            el.appendChild(el2);
+            el2 = result.createElement("style:style");
+            el2.setAttribute("style:name", "ta1");
+            el2.setAttribute("style:family", "table");
+            el2.setAttribute("style:master-page-name", "Default");
+            el3 = result.createElement("style:properties");
+            el3.setAttribute("table:display", "true");
+            el2.appendChild(el3);
+            el.appendChild(el2);
+            collection.appendChild(el);
+
+            Element body = result.createElement("office:body"),
+                    table = result.createElement("table:table");
+            table.setAttribute("table:name", "biblio");
+            table.setAttribute("table.style-name", "ta1");
+
+            Element row = result.createElement("table:table-row");
+            row.setAttribute("table.style-name", "ro1");
+            addTableCell(result, row, "Type");
+            addTableCell(result, row, "ISBN");
+            addTableCell(result, row, "Identifier");
+            addTableCell(result, row, "Author");
+            addTableCell(result, row, "Title");
+            addTableCell(result, row, "Journal");
+            addTableCell(result, row, "Volume");
+            addTableCell(result, row, "Number");
+            addTableCell(result, row, "Month");
+            addTableCell(result, row, "Pages");
+            addTableCell(result, row, "Year");
+            addTableCell(result, row, "Address");
+            addTableCell(result, row, "Note");
+            addTableCell(result, row, "URL");
+            addTableCell(result, row, "Booktitle");
+            addTableCell(result, row, "Chapter");
+            addTableCell(result, row, "Edition");
+            addTableCell(result, row, "Series");
+            addTableCell(result, row, "Editor");
+            addTableCell(result, row, "Publisher");
+            addTableCell(result, row, "ReportType");
+            addTableCell(result, row, "Howpublished");
+            addTableCell(result, row, "Institution");
+            addTableCell(result, row, "Organization");
+            addTableCell(result, row, "School");
+            addTableCell(result, row, "Annote");
+            addTableCell(result, row, "Custom1");
+            addTableCell(result, row, "Custom2");
+            addTableCell(result, row, "Custom3");
+            addTableCell(result, row, "Custom4");
+            addTableCell(result, row, "Custom5");
+            table.appendChild(row);
+
+            for(BibtexEntry e : entries){
+                row = result.createElement("table:table-row");
+                addTableCell(result, row, new GetOpenOfficeType().format(e.getType().getName()));
+                addTableCell(result, row, getField(e, "isbn"));
+                addTableCell(result, row, getField(e, BibtexFields.KEY_FIELD));
+                addTableCell(result, row, getField(e, "author"));//new AuthorLastFirst().format(getField(e, "author")));
+                addTableCell(result, row, new RemoveWhitespace().format(new RemoveBrackets().format(getField(e, "title"))));
+                addTableCell(result, row, getField(e, "journal"));
+                addTableCell(result, row, getField(e, "volume"));
+                addTableCell(result, row, getField(e, "number"));
+                addTableCell(result, row, getField(e, "month"));
+                addTableCell(result, row, getField(e, "pages"));
+                addTableCell(result, row, getField(e, "year"));
+                addTableCell(result, row, getField(e, "address"));
+                addTableCell(result, row, getField(e, "note"));
+                addTableCell(result, row, getField(e, "url"));
+                addTableCell(result, row, getField(e, "booktitle"));
+                addTableCell(result, row, getField(e, "chapter"));
+                addTableCell(result, row, getField(e, "edition"));
+                addTableCell(result, row, getField(e, "series"));
+                addTableCell(result, row, getField(e, "editor"));//new AuthorLastFirst().format(getField(e, "editor")));
+                addTableCell(result, row, getField(e, "publisher"));
+                addTableCell(result, row, getField(e, "reporttype"));
+                addTableCell(result, row, getField(e, "howpublished"));
+                addTableCell(result, row, getField(e, "institution"));
+                addTableCell(result, row, getField(e, "organization"));
+                addTableCell(result, row, getField(e, "school"));
+                addTableCell(result, row, getField(e, "annote"));
+                addTableCell(result, row, "");
+                addTableCell(result, row, "");
+                addTableCell(result, row, "");
+                addTableCell(result, row, "");
+                addTableCell(result, row, "");
+                table.appendChild(row);
+            }
+
+            body.appendChild(table);
+            collection.appendChild(body);
+
+            result.appendChild(collection);
+        } catch (Exception e) {
+            System.out.println("Exception caught..." + e);
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    protected String getField(BibtexEntry e, String field) {
+        Object o = e.getField(field);
+        return o == null ? "" : o.toString();
+    }
+
+    protected void addTableCell(Document doc, Element parent, String content) {
+        Element cell = doc.createElement("table:table-cell"),
+                text = doc.createElement("text:p");
+    Text textNode = doc.createTextNode(content);
+    text.appendChild(textNode);
+        //text.setTextContent(content);
+        cell.appendChild(text);
+        parent.appendChild(cell);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java b/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
index 61fb5fa..1f6b308 100644
--- a/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
+++ b/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
@@ -1,210 +1,210 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import net.sf.jabref.*;
-import net.sf.jabref.export.layout.format.GetOpenOfficeType;
-import net.sf.jabref.export.layout.format.RemoveBrackets;
-import net.sf.jabref.export.layout.format.RemoveWhitespace;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Text;
-
-import ca.odell.glazedlists.BasicEventList;
-import ca.odell.glazedlists.SortedList;
-
-/**
- * @author Morten O. Alver.
- * Based on net.sf.jabref.MODSDatabase by Michael Wrighton
- *
- */
-public class OpenDocumentRepresentation {
-    protected Collection<BibtexEntry> entries;
-    private BibtexDatabase database;
-
-    @SuppressWarnings("unchecked")
-	public OpenDocumentRepresentation(BibtexDatabase database, Set<String> keySet) {
-        this.database = database;
-        // Make a list of comparators for sorting the entries:
-        List<FieldComparator> comparators = new ArrayList<FieldComparator>();
-        comparators.add(new FieldComparator("author"));
-        comparators.add(new FieldComparator("year"));
-        comparators.add(new FieldComparator(BibtexFields.KEY_FIELD));
-        // Use glazed lists to get a sorted view of the entries:
-        BasicEventList entryList = new BasicEventList();
-
-        // Set up a list of all entries, if keySet==null, or the entries whose
-        // ids are in keySet, otherwise:
-        if (keySet == null)
-            entryList.addAll(database.getEntries());
-        else {
-            for (String key : keySet)
-                entryList.add(database.getEntryById(key));
-        }
-
-        entries = new SortedList(entryList, new FieldComparatorStack(comparators));
-    }
-    public Document getDOMrepresentation() {
-        Document result = null;
-        try {
-            DocumentBuilder dbuild = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-            result = dbuild.newDocument();
-            Element collection = result.createElement("office:document-content");
-            //collection.setAttribute("xmlns", "http://openoffice.org/2000/office");
-            collection.setAttribute("xmlns:office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0");
-            collection.setAttribute("xmlns:style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0");
-            collection.setAttribute("xmlns:text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0");
-            collection.setAttribute("xmlns:table", "urn:oasis:names:tc:opendocument:xmlns:table:1.0");
-            collection.setAttribute("xmlns:meta", "urn:oasis:names:tc:opendocument:xmlns:meta:1.0");
-            collection.setAttribute("office:version", "1.0");
-            collection.setAttribute("xmlns:fo", "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0");
-            collection.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink");
-            Element el = result.createElement("office:scripts");
-            collection.appendChild(el);
-
-            el = result.createElement("office:automatic-styles");
-            Element el2 = result.createElement("style:style");
-            el2.setAttribute("style:name", "ro1");
-            el2.setAttribute("style:family", "table-row");
-            Element el3 = result.createElement("style.table-row-properties");
-            el3.setAttribute("style:row-height", "0.1681inch");
-            el3.setAttribute("fo:break-before", "auto");
-            el3.setAttribute("style:use-optimal-row-height", "true");
-            el2.appendChild(el3);
-            el.appendChild(el2);
-            el2 = result.createElement("style:style");
-            el2.setAttribute("style:name", "ta1");
-            el2.setAttribute("style:family", "table");
-            el2.setAttribute("style:master-page-name", "Default");
-            el3 = result.createElement("style:properties");
-            el3.setAttribute("table:display", "true");
-            el2.appendChild(el3);
-            el.appendChild(el2);
-            collection.appendChild(el);
-
-            Element body = result.createElement("office:body"),
-                    spreadsheet = result.createElement("office:spreadsheet"),
-                    table = result.createElement("table:table");
-            table.setAttribute("table:name", "biblio");
-            table.setAttribute("table.style-name", "ta1");
-
-            Element row = result.createElement("table:table-row");
-            row.setAttribute("table.style-name", "ro1");
-            addTableCell(result, row, "Identifier");
-            addTableCell(result, row, "Type");
-            addTableCell(result, row, "Address");
-            addTableCell(result, row, "Annote");
-            addTableCell(result, row, "Author");
-            addTableCell(result, row, "Booktitle");
-            addTableCell(result, row, "Chapter");
-            addTableCell(result, row, "Edition");
-            addTableCell(result, row, "Editor");
-            addTableCell(result, row, "Howpublish");
-            addTableCell(result, row, "Institutn");
-            addTableCell(result, row, "Journal");
-            addTableCell(result, row, "Month");
-            addTableCell(result, row, "Note");
-            addTableCell(result, row, "Number");
-            addTableCell(result, row, "Organizat");
-            addTableCell(result, row, "Pages");
-            addTableCell(result, row, "Publisher");
-            addTableCell(result, row, "School");
-            addTableCell(result, row, "Series");
-            addTableCell(result, row, "Title");
-            addTableCell(result, row, "RepType");
-            addTableCell(result, row, "Volume");
-            addTableCell(result, row, "Year");
-            addTableCell(result, row, "URL");
-            addTableCell(result, row, "Custom1");
-            addTableCell(result, row, "Custom2");
-            addTableCell(result, row, "Custom3");
-            addTableCell(result, row, "Custom4");
-            addTableCell(result, row, "Custom5");
-            addTableCell(result, row, "ISBN");
-            table.appendChild(row);
-
-            for(BibtexEntry e : entries){
-                row = result.createElement("table:table-row");
-                addTableCell(result, row, getField(e, BibtexFields.KEY_FIELD));
-                addTableCell(result, row, new GetOpenOfficeType().format(e.getType().getName()));
-                addTableCell(result, row, getField(e, "address"));
-                addTableCell(result, row, getField(e, "annote"));
-                addTableCell(result, row, getField(e, "author"));//new AuthorLastFirst().format(getField(e, "author")));
-                addTableCell(result, row, getField(e, "booktitle"));
-                addTableCell(result, row, getField(e, "chapter"));
-                addTableCell(result, row, getField(e, "edition"));
-                addTableCell(result, row, getField(e, "editor"));//new AuthorLastFirst().format(getField(e, "editor")));
-                addTableCell(result, row, getField(e, "howpublished"));
-                addTableCell(result, row, getField(e, "institution"));
-                addTableCell(result, row, getField(e, "journal"));
-                addTableCell(result, row, getField(e, "month"));
-                addTableCell(result, row, getField(e, "note"));
-                addTableCell(result, row, getField(e, "number"));
-                addTableCell(result, row, getField(e, "organization"));
-                addTableCell(result, row, getField(e, "pages"));
-                addTableCell(result, row, getField(e, "publisher"));
-                addTableCell(result, row, getField(e, "school"));
-                addTableCell(result, row, getField(e, "series"));
-                addTableCell(result, row, new RemoveWhitespace().format(new RemoveBrackets().format(getField(e, "title"))));
-                addTableCell(result, row, getField(e, "reporttype"));
-                addTableCell(result, row, getField(e, "volume"));
-                addTableCell(result, row, getField(e, "year"));
-                addTableCell(result, row, getField(e, "url"));
-                addTableCell(result, row, "");
-                addTableCell(result, row, "");
-                addTableCell(result, row, "");
-                addTableCell(result, row, "");
-                addTableCell(result, row, "");
-                addTableCell(result, row, getField(e, "isbn"));
-                table.appendChild(row);
-            }
-
-            spreadsheet.appendChild(table);
-            body.appendChild(spreadsheet);
-            collection.appendChild(body);
-
-            result.appendChild(collection);
-        } catch (Exception e) {
-            System.out.println("Exception caught..." + e);
-            e.printStackTrace();
-        }
-        return result;
-    }
-
-    protected String getField(BibtexEntry e, String field) {
-        String s = BibtexDatabase.getResolvedField(field, e, database);
-        return s == null ? "" : s;
-    }
-
-    protected void addTableCell(Document doc, Element parent, String content) {
-        Element cell = doc.createElement("table:table-cell"),
-                text = doc.createElement("text:p");
-    Text textNode = doc.createTextNode(content);
-    text.appendChild(textNode);
-        //text.setTextContent(content);
-        cell.appendChild(text);
-        parent.appendChild(cell);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import net.sf.jabref.*;
+import net.sf.jabref.export.layout.format.GetOpenOfficeType;
+import net.sf.jabref.export.layout.format.RemoveBrackets;
+import net.sf.jabref.export.layout.format.RemoveWhitespace;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+
+import ca.odell.glazedlists.BasicEventList;
+import ca.odell.glazedlists.SortedList;
+
+/**
+ * @author Morten O. Alver.
+ * Based on net.sf.jabref.MODSDatabase by Michael Wrighton
+ *
+ */
+public class OpenDocumentRepresentation {
+    protected Collection<BibtexEntry> entries;
+    private BibtexDatabase database;
+
+    @SuppressWarnings("unchecked")
+	public OpenDocumentRepresentation(BibtexDatabase database, Set<String> keySet) {
+        this.database = database;
+        // Make a list of comparators for sorting the entries:
+        List<FieldComparator> comparators = new ArrayList<FieldComparator>();
+        comparators.add(new FieldComparator("author"));
+        comparators.add(new FieldComparator("year"));
+        comparators.add(new FieldComparator(BibtexFields.KEY_FIELD));
+        // Use glazed lists to get a sorted view of the entries:
+        BasicEventList entryList = new BasicEventList();
+
+        // Set up a list of all entries, if keySet==null, or the entries whose
+        // ids are in keySet, otherwise:
+        if (keySet == null)
+            entryList.addAll(database.getEntries());
+        else {
+            for (String key : keySet)
+                entryList.add(database.getEntryById(key));
+        }
+
+        entries = new SortedList(entryList, new FieldComparatorStack(comparators));
+    }
+    public Document getDOMrepresentation() {
+        Document result = null;
+        try {
+            DocumentBuilder dbuild = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+            result = dbuild.newDocument();
+            Element collection = result.createElement("office:document-content");
+            //collection.setAttribute("xmlns", "http://openoffice.org/2000/office");
+            collection.setAttribute("xmlns:office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0");
+            collection.setAttribute("xmlns:style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0");
+            collection.setAttribute("xmlns:text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0");
+            collection.setAttribute("xmlns:table", "urn:oasis:names:tc:opendocument:xmlns:table:1.0");
+            collection.setAttribute("xmlns:meta", "urn:oasis:names:tc:opendocument:xmlns:meta:1.0");
+            collection.setAttribute("office:version", "1.0");
+            collection.setAttribute("xmlns:fo", "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0");
+            collection.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink");
+            Element el = result.createElement("office:scripts");
+            collection.appendChild(el);
+
+            el = result.createElement("office:automatic-styles");
+            Element el2 = result.createElement("style:style");
+            el2.setAttribute("style:name", "ro1");
+            el2.setAttribute("style:family", "table-row");
+            Element el3 = result.createElement("style.table-row-properties");
+            el3.setAttribute("style:row-height", "0.1681inch");
+            el3.setAttribute("fo:break-before", "auto");
+            el3.setAttribute("style:use-optimal-row-height", "true");
+            el2.appendChild(el3);
+            el.appendChild(el2);
+            el2 = result.createElement("style:style");
+            el2.setAttribute("style:name", "ta1");
+            el2.setAttribute("style:family", "table");
+            el2.setAttribute("style:master-page-name", "Default");
+            el3 = result.createElement("style:properties");
+            el3.setAttribute("table:display", "true");
+            el2.appendChild(el3);
+            el.appendChild(el2);
+            collection.appendChild(el);
+
+            Element body = result.createElement("office:body"),
+                    spreadsheet = result.createElement("office:spreadsheet"),
+                    table = result.createElement("table:table");
+            table.setAttribute("table:name", "biblio");
+            table.setAttribute("table.style-name", "ta1");
+
+            Element row = result.createElement("table:table-row");
+            row.setAttribute("table.style-name", "ro1");
+            addTableCell(result, row, "Identifier");
+            addTableCell(result, row, "Type");
+            addTableCell(result, row, "Address");
+            addTableCell(result, row, "Annote");
+            addTableCell(result, row, "Author");
+            addTableCell(result, row, "Booktitle");
+            addTableCell(result, row, "Chapter");
+            addTableCell(result, row, "Edition");
+            addTableCell(result, row, "Editor");
+            addTableCell(result, row, "Howpublish");
+            addTableCell(result, row, "Institutn");
+            addTableCell(result, row, "Journal");
+            addTableCell(result, row, "Month");
+            addTableCell(result, row, "Note");
+            addTableCell(result, row, "Number");
+            addTableCell(result, row, "Organizat");
+            addTableCell(result, row, "Pages");
+            addTableCell(result, row, "Publisher");
+            addTableCell(result, row, "School");
+            addTableCell(result, row, "Series");
+            addTableCell(result, row, "Title");
+            addTableCell(result, row, "RepType");
+            addTableCell(result, row, "Volume");
+            addTableCell(result, row, "Year");
+            addTableCell(result, row, "URL");
+            addTableCell(result, row, "Custom1");
+            addTableCell(result, row, "Custom2");
+            addTableCell(result, row, "Custom3");
+            addTableCell(result, row, "Custom4");
+            addTableCell(result, row, "Custom5");
+            addTableCell(result, row, "ISBN");
+            table.appendChild(row);
+
+            for(BibtexEntry e : entries){
+                row = result.createElement("table:table-row");
+                addTableCell(result, row, getField(e, BibtexFields.KEY_FIELD));
+                addTableCell(result, row, new GetOpenOfficeType().format(e.getType().getName()));
+                addTableCell(result, row, getField(e, "address"));
+                addTableCell(result, row, getField(e, "annote"));
+                addTableCell(result, row, getField(e, "author"));//new AuthorLastFirst().format(getField(e, "author")));
+                addTableCell(result, row, getField(e, "booktitle"));
+                addTableCell(result, row, getField(e, "chapter"));
+                addTableCell(result, row, getField(e, "edition"));
+                addTableCell(result, row, getField(e, "editor"));//new AuthorLastFirst().format(getField(e, "editor")));
+                addTableCell(result, row, getField(e, "howpublished"));
+                addTableCell(result, row, getField(e, "institution"));
+                addTableCell(result, row, getField(e, "journal"));
+                addTableCell(result, row, getField(e, "month"));
+                addTableCell(result, row, getField(e, "note"));
+                addTableCell(result, row, getField(e, "number"));
+                addTableCell(result, row, getField(e, "organization"));
+                addTableCell(result, row, getField(e, "pages"));
+                addTableCell(result, row, getField(e, "publisher"));
+                addTableCell(result, row, getField(e, "school"));
+                addTableCell(result, row, getField(e, "series"));
+                addTableCell(result, row, new RemoveWhitespace().format(new RemoveBrackets().format(getField(e, "title"))));
+                addTableCell(result, row, getField(e, "reporttype"));
+                addTableCell(result, row, getField(e, "volume"));
+                addTableCell(result, row, getField(e, "year"));
+                addTableCell(result, row, getField(e, "url"));
+                addTableCell(result, row, "");
+                addTableCell(result, row, "");
+                addTableCell(result, row, "");
+                addTableCell(result, row, "");
+                addTableCell(result, row, "");
+                addTableCell(result, row, getField(e, "isbn"));
+                table.appendChild(row);
+            }
+
+            spreadsheet.appendChild(table);
+            body.appendChild(spreadsheet);
+            collection.appendChild(body);
+
+            result.appendChild(collection);
+        } catch (Exception e) {
+            System.out.println("Exception caught..." + e);
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    protected String getField(BibtexEntry e, String field) {
+        String s = BibtexDatabase.getResolvedField(field, e, database);
+        return s == null ? "" : s;
+    }
+
+    protected void addTableCell(Document doc, Element parent, String content) {
+        Element cell = doc.createElement("table:table-cell"),
+                text = doc.createElement("text:p");
+    Text textNode = doc.createTextNode(content);
+    text.appendChild(textNode);
+        //text.setTextContent(content);
+        cell.appendChild(text);
+        parent.appendChild(cell);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/OpenDocumentSpreadsheetCreator.java b/src/java/net/sf/jabref/export/OpenDocumentSpreadsheetCreator.java
index 73e3ac5..6d525c6 100644
--- a/src/java/net/sf/jabref/export/OpenDocumentSpreadsheetCreator.java
+++ b/src/java/net/sf/jabref/export/OpenDocumentSpreadsheetCreator.java
@@ -1,156 +1,156 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.io.*;
-import java.net.URL;
-import java.util.Set;
-import java.util.zip.CRC32;
-import java.util.zip.Deflater;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.Globals;
-import net.sf.jabref.MetaData;
-
-/**
- * @author alver
- */
-public class OpenDocumentSpreadsheetCreator extends ExportFormat {
-
-    /**
-     * Creates a new instance of OpenOfficeDocumentCreator
-     */
-    public OpenDocumentSpreadsheetCreator() {
-        super(Globals.lang("OpenDocument Spreadsheet"), "ods", null, null, ".ods");
-    }
-
-    public void performExport(final BibtexDatabase database, final MetaData metaData,
-                              final String file, final String encoding, Set<String> keySet) throws Exception {
-        exportOpenDocumentSpreadsheet(new File(file), database, keySet);
-    }
-
-    public static void storeOpenDocumentSpreadsheetFile(File file, InputStream source) throws Exception {
-        ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
-
-        try {
-            
-            //addResourceFile("mimetype", "/resource/ods/mimetype", out);
-            ZipEntry ze = new ZipEntry("mimetype");
-            String mime = "application/vnd.oasis.opendocument.spreadsheet";
-            ze.setMethod(ZipEntry.STORED);
-            ze.setSize(mime.length());
-            CRC32 crc = new CRC32();
-            crc.update(mime.getBytes());
-            ze.setCrc(crc.getValue());
-            out.putNextEntry(ze);
-            for (int i=0; i<mime.length(); i++) {
-                out.write(mime.charAt(i));
-            }
-            out.closeEntry();
-
-            ZipEntry zipEntry = new ZipEntry("content.xml");
-            //zipEntry.setMethod(ZipEntry.DEFLATED);
-            out.putNextEntry(zipEntry);
-            int c = -1;
-            while ((c = source.read()) >= 0) {
-                out.write(c);
-            }
-            out.closeEntry();
-
-            // Add manifest (required for OOo 2.0) and "meta.xml": These are in the
-            // resource/ods directory, and are copied verbatim into the zip file.
-            addResourceFile("meta.xml", "/resource/ods/meta.xml", out);
-
-            addResourceFile("META-INF/manifest.xml", "/resource/ods/manifest.xml", out);
-
-            //zipEntry = new ZipEntry()
-
-        } finally {
-            out.close();
-        }
-    }
-
-    public static void exportOpenDocumentSpreadsheet(File file, BibtexDatabase database, Set<String> keySet) throws Exception {
-
-        // First store the xml formatted content to a temporary file.
-        File tmpFile = File.createTempFile("opendocument", null);
-        exportOpenDocumentSpreadsheetXML(tmpFile, database, keySet);
-
-        // Then add the content to the zip file:
-        BufferedInputStream in = new BufferedInputStream(new FileInputStream(tmpFile));
-        storeOpenDocumentSpreadsheetFile(file, in);
-
-        // Delete the temporary file:
-        tmpFile.delete();
-    }
-
-    public static void exportOpenDocumentSpreadsheetXML(File tmpFile, BibtexDatabase database, Set<String> keySet) {
-        OpenDocumentRepresentation od = new OpenDocumentRepresentation(database, keySet);
-
-        try {
-            Writer ps = new OutputStreamWriter(new FileOutputStream(tmpFile), "UTF8");
-            try {
-
-                //            Writer ps = new FileWriter(tmpFile);
-                DOMSource source = new DOMSource(od.getDOMrepresentation());
-                StreamResult result = new StreamResult(ps);
-                Transformer trans = TransformerFactory.newInstance().newTransformer();
-                trans.setOutputProperty(OutputKeys.INDENT, "yes");
-                trans.transform(source, result);
-            } finally {
-                ps.close();
-            }
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-
-        return;
-    }
-
-    private static void addResourceFile(String name, String resource, ZipOutputStream out) throws IOException {
-        ZipEntry zipEntry = new ZipEntry(name);
-        out.putNextEntry(zipEntry);
-        addFromResource(resource, out);
-        out.closeEntry();
-    }
-
-    private static void addFromResource(String resource, OutputStream out) {
-        URL url = OpenDocumentSpreadsheetCreator.class.getResource(resource);
-        try {
-            InputStream in = url.openStream();
-            byte[] buffer = new byte[256];
-            synchronized (in) {
-                synchronized (out) {
-                    while (true) {
-                        int bytesRead = in.read(buffer);
-                        if (bytesRead == -1) break;
-                        out.write(buffer, 0, bytesRead);
-                    }
-                }
-            }
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.io.*;
+import java.net.URL;
+import java.util.Set;
+import java.util.zip.CRC32;
+import java.util.zip.Deflater;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.Globals;
+import net.sf.jabref.MetaData;
+
+/**
+ * @author alver
+ */
+public class OpenDocumentSpreadsheetCreator extends ExportFormat {
+
+    /**
+     * Creates a new instance of OpenOfficeDocumentCreator
+     */
+    public OpenDocumentSpreadsheetCreator() {
+        super(Globals.lang("OpenDocument Spreadsheet"), "ods", null, null, ".ods");
+    }
+
+    public void performExport(final BibtexDatabase database, final MetaData metaData,
+                              final String file, final String encoding, Set<String> keySet) throws Exception {
+        exportOpenDocumentSpreadsheet(new File(file), database, keySet);
+    }
+
+    public static void storeOpenDocumentSpreadsheetFile(File file, InputStream source) throws Exception {
+        ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
+
+        try {
+            
+            //addResourceFile("mimetype", "/resource/ods/mimetype", out);
+            ZipEntry ze = new ZipEntry("mimetype");
+            String mime = "application/vnd.oasis.opendocument.spreadsheet";
+            ze.setMethod(ZipEntry.STORED);
+            ze.setSize(mime.length());
+            CRC32 crc = new CRC32();
+            crc.update(mime.getBytes());
+            ze.setCrc(crc.getValue());
+            out.putNextEntry(ze);
+            for (int i=0; i<mime.length(); i++) {
+                out.write(mime.charAt(i));
+            }
+            out.closeEntry();
+
+            ZipEntry zipEntry = new ZipEntry("content.xml");
+            //zipEntry.setMethod(ZipEntry.DEFLATED);
+            out.putNextEntry(zipEntry);
+            int c = -1;
+            while ((c = source.read()) >= 0) {
+                out.write(c);
+            }
+            out.closeEntry();
+
+            // Add manifest (required for OOo 2.0) and "meta.xml": These are in the
+            // resource/ods directory, and are copied verbatim into the zip file.
+            addResourceFile("meta.xml", "/resource/ods/meta.xml", out);
+
+            addResourceFile("META-INF/manifest.xml", "/resource/ods/manifest.xml", out);
+
+            //zipEntry = new ZipEntry()
+
+        } finally {
+            out.close();
+        }
+    }
+
+    public static void exportOpenDocumentSpreadsheet(File file, BibtexDatabase database, Set<String> keySet) throws Exception {
+
+        // First store the xml formatted content to a temporary file.
+        File tmpFile = File.createTempFile("opendocument", null);
+        exportOpenDocumentSpreadsheetXML(tmpFile, database, keySet);
+
+        // Then add the content to the zip file:
+        BufferedInputStream in = new BufferedInputStream(new FileInputStream(tmpFile));
+        storeOpenDocumentSpreadsheetFile(file, in);
+
+        // Delete the temporary file:
+        tmpFile.delete();
+    }
+
+    public static void exportOpenDocumentSpreadsheetXML(File tmpFile, BibtexDatabase database, Set<String> keySet) {
+        OpenDocumentRepresentation od = new OpenDocumentRepresentation(database, keySet);
+
+        try {
+            Writer ps = new OutputStreamWriter(new FileOutputStream(tmpFile), "UTF8");
+            try {
+
+                //            Writer ps = new FileWriter(tmpFile);
+                DOMSource source = new DOMSource(od.getDOMrepresentation());
+                StreamResult result = new StreamResult(ps);
+                Transformer trans = TransformerFactory.newInstance().newTransformer();
+                trans.setOutputProperty(OutputKeys.INDENT, "yes");
+                trans.transform(source, result);
+            } finally {
+                ps.close();
+            }
+        } catch (Exception e) {
+            throw new Error(e);
+        }
+
+        return;
+    }
+
+    private static void addResourceFile(String name, String resource, ZipOutputStream out) throws IOException {
+        ZipEntry zipEntry = new ZipEntry(name);
+        out.putNextEntry(zipEntry);
+        addFromResource(resource, out);
+        out.closeEntry();
+    }
+
+    private static void addFromResource(String resource, OutputStream out) {
+        URL url = OpenDocumentSpreadsheetCreator.class.getResource(resource);
+        try {
+            InputStream in = url.openStream();
+            byte[] buffer = new byte[256];
+            synchronized (in) {
+                synchronized (out) {
+                    while (true) {
+                        int bytesRead = in.read(buffer);
+                        if (bytesRead == -1) break;
+                        out.write(buffer, 0, bytesRead);
+                    }
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/export/OpenOfficeDocumentCreator.java b/src/java/net/sf/jabref/export/OpenOfficeDocumentCreator.java
index 3e87d73..630595d 100644
--- a/src/java/net/sf/jabref/export/OpenOfficeDocumentCreator.java
+++ b/src/java/net/sf/jabref/export/OpenOfficeDocumentCreator.java
@@ -1,139 +1,139 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.io.*;
-import java.net.URL;
-import java.util.Set;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.Globals;
-import net.sf.jabref.MetaData;
-
-/**
- * @author alver
- */
-public class OpenOfficeDocumentCreator extends ExportFormat {
-
-    /**
-     * Creates a new instance of OpenOfficeDocumentCreator
-     */
-    public OpenOfficeDocumentCreator() {
-        super(Globals.lang("OpenOffice Calc"), "oocalc", null, null, ".sxc");
-    }
-
-    public void performExport(final BibtexDatabase database, final MetaData metaData,
-                              final String file, final String encoding, Set<String> keySet) throws Exception {
-        exportOpenOfficeCalc(new File(file), database, keySet);
-    }
-
-    public static void storeOpenOfficeFile(File file, InputStream source) throws Exception {
-        ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
-        try {
-            ZipEntry zipEntry = new ZipEntry("content.xml");
-            out.putNextEntry(zipEntry);
-            int c = -1;
-            while ((c = source.read()) >= 0) {
-                out.write(c);
-            }
-            out.closeEntry();
-
-            // Add manifest (required for OOo 2.0), "meta.xml", "mimetype" files. These are in the
-            // resource/openoffice directory, and are copied verbatim into the zip file.
-            addResourceFile("meta.xml", "/resource/openoffice/meta.xml", out);
-            addResourceFile("mimetype", "/resource/openoffice/mimetype", out);
-            addResourceFile("META-INF/manifest.xml", "/resource/openoffice/manifest.xml", out);
-
-            //zipEntry = new ZipEntry()
-
-        } finally {
-            out.close();
-        }
-    }
-
-    public static void exportOpenOfficeCalc(File file, BibtexDatabase database,
-        Set<String> keySet) throws Exception {
-
-
-        // First store the xml formatted content to a temporary file.
-        File tmpFile = File.createTempFile("oocalc", null);
-        exportOpenOfficeCalcXML(tmpFile, database, keySet);
-
-        // Then add the content to the zip file:
-        BufferedInputStream in = new BufferedInputStream(new FileInputStream(tmpFile));
-        storeOpenOfficeFile(file, in);
-
-        // Delete the temporary file:
-        tmpFile.delete();
-    }
-
-    public static void exportOpenOfficeCalcXML(File tmpFile, BibtexDatabase database, Set<String> keySet) {
-        OOCalcDatabase od = new OOCalcDatabase(database, keySet);
-
-        try {
-            Writer ps = new OutputStreamWriter(new FileOutputStream(tmpFile), "UTF8");
-            try {
-
-                //            Writer ps = new FileWriter(tmpFile);
-                DOMSource source = new DOMSource(od.getDOMrepresentation());
-                StreamResult result = new StreamResult(ps);
-                Transformer trans = TransformerFactory.newInstance().newTransformer();
-                trans.setOutputProperty(OutputKeys.INDENT, "yes");
-                trans.transform(source, result);
-            } finally {
-                ps.close();
-            }
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-
-        return;
-    }
-
-    private static void addResourceFile(String name, String resource, ZipOutputStream out) throws IOException {
-        ZipEntry zipEntry = new ZipEntry(name);
-        out.putNextEntry(zipEntry);
-        addFromResource(resource, out);
-        out.closeEntry();
-    }
-
-    private static void addFromResource(String resource, OutputStream out) {
-        URL url = OpenOfficeDocumentCreator.class.getResource(resource);
-        try {
-            InputStream in = url.openStream();
-            byte[] buffer = new byte[256];
-            synchronized (in) {
-                synchronized (out) {
-                    while (true) {
-                        int bytesRead = in.read(buffer);
-                        if (bytesRead == -1) break;
-                        out.write(buffer, 0, bytesRead);
-                    }
-                }
-            }
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.io.*;
+import java.net.URL;
+import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.Globals;
+import net.sf.jabref.MetaData;
+
+/**
+ * @author alver
+ */
+public class OpenOfficeDocumentCreator extends ExportFormat {
+
+    /**
+     * Creates a new instance of OpenOfficeDocumentCreator
+     */
+    public OpenOfficeDocumentCreator() {
+        super(Globals.lang("OpenOffice Calc"), "oocalc", null, null, ".sxc");
+    }
+
+    public void performExport(final BibtexDatabase database, final MetaData metaData,
+                              final String file, final String encoding, Set<String> keySet) throws Exception {
+        exportOpenOfficeCalc(new File(file), database, keySet);
+    }
+
+    public static void storeOpenOfficeFile(File file, InputStream source) throws Exception {
+        ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
+        try {
+            ZipEntry zipEntry = new ZipEntry("content.xml");
+            out.putNextEntry(zipEntry);
+            int c = -1;
+            while ((c = source.read()) >= 0) {
+                out.write(c);
+            }
+            out.closeEntry();
+
+            // Add manifest (required for OOo 2.0), "meta.xml", "mimetype" files. These are in the
+            // resource/openoffice directory, and are copied verbatim into the zip file.
+            addResourceFile("meta.xml", "/resource/openoffice/meta.xml", out);
+            addResourceFile("mimetype", "/resource/openoffice/mimetype", out);
+            addResourceFile("META-INF/manifest.xml", "/resource/openoffice/manifest.xml", out);
+
+            //zipEntry = new ZipEntry()
+
+        } finally {
+            out.close();
+        }
+    }
+
+    public static void exportOpenOfficeCalc(File file, BibtexDatabase database,
+        Set<String> keySet) throws Exception {
+
+
+        // First store the xml formatted content to a temporary file.
+        File tmpFile = File.createTempFile("oocalc", null);
+        exportOpenOfficeCalcXML(tmpFile, database, keySet);
+
+        // Then add the content to the zip file:
+        BufferedInputStream in = new BufferedInputStream(new FileInputStream(tmpFile));
+        storeOpenOfficeFile(file, in);
+
+        // Delete the temporary file:
+        tmpFile.delete();
+    }
+
+    public static void exportOpenOfficeCalcXML(File tmpFile, BibtexDatabase database, Set<String> keySet) {
+        OOCalcDatabase od = new OOCalcDatabase(database, keySet);
+
+        try {
+            Writer ps = new OutputStreamWriter(new FileOutputStream(tmpFile), "UTF8");
+            try {
+
+                //            Writer ps = new FileWriter(tmpFile);
+                DOMSource source = new DOMSource(od.getDOMrepresentation());
+                StreamResult result = new StreamResult(ps);
+                Transformer trans = TransformerFactory.newInstance().newTransformer();
+                trans.setOutputProperty(OutputKeys.INDENT, "yes");
+                trans.transform(source, result);
+            } finally {
+                ps.close();
+            }
+        } catch (Exception e) {
+            throw new Error(e);
+        }
+
+        return;
+    }
+
+    private static void addResourceFile(String name, String resource, ZipOutputStream out) throws IOException {
+        ZipEntry zipEntry = new ZipEntry(name);
+        out.putNextEntry(zipEntry);
+        addFromResource(resource, out);
+        out.closeEntry();
+    }
+
+    private static void addFromResource(String resource, OutputStream out) {
+        URL url = OpenOfficeDocumentCreator.class.getResource(resource);
+        try {
+            InputStream in = url.openStream();
+            byte[] buffer = new byte[256];
+            synchronized (in) {
+                synchronized (out) {
+                    while (true) {
+                        int bytesRead = in.read(buffer);
+                        if (bytesRead == -1) break;
+                        out.write(buffer, 0, bytesRead);
+                    }
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/export/PluginBasedExportFormat.java b/src/java/net/sf/jabref/export/PluginBasedExportFormat.java
index 0eb12e7..7c9f9ee 100644
--- a/src/java/net/sf/jabref/export/PluginBasedExportFormat.java
+++ b/src/java/net/sf/jabref/export/PluginBasedExportFormat.java
@@ -1,89 +1,89 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.io.*;
-import java.net.URL;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.plugin.core.generated._JabRefPlugin.ExportFormatTemplateExtension;
-
-/**
- * Class for export formats defined in plugins.
- * 
- * Needed since resources might be loaded from a plugin-jar.
- * 
- */
-public class PluginBasedExportFormat extends ExportFormat {
-
-	public ExportFormatTemplateExtension extension;
-
-	/**
-	 * Load the plugin from the given extension. Might be null if extension
-	 * could not be loaded.
-	 * 
-	 * @param extension
-	 * @return
-	 */
-	public static PluginBasedExportFormat getFormat(
-		ExportFormatTemplateExtension extension) {
-
-		String consoleName = extension.getConsoleName();
-		String displayName = extension.getDisplayName();
-		String layoutFilename = extension.getLayoutFilename();
-		String fileExtension = extension.getExtension();
-        String encoding = extension.getEncoding();
-		if ("".equals(fileExtension) || "".equals(displayName)
-			|| "".equals(consoleName) || "".equals(layoutFilename)) {
-			Globals.logger("Could not load extension " + extension.getId());
-			return null;
-		}
-
-		return new PluginBasedExportFormat(displayName, consoleName,
-			layoutFilename, fileExtension, encoding, extension);
-	}
-
-	public PluginBasedExportFormat(String displayName, String consoleName,
-		String layoutFileName, String fileExtension, String encoding,
-		ExportFormatTemplateExtension extension) {
-		super(displayName, consoleName, layoutFileName, null, fileExtension);
-        // Set the overriding encoding, if the plugin supplied one:
-        if (encoding != null)
-            setEncoding(encoding);
-		this.extension = extension;
-	}
-
-	@Override
-	public Reader getReader(String filename) throws IOException {
-		URL reso = extension.getDirAsUrl(filename);
-
-		if (reso != null) {
-			try {
-				return new InputStreamReader(reso.openStream());
-			} catch (FileNotFoundException ex) {
-				// If that didn't work, try below
-			}
-		}
-
-		try {
-			return new FileReader(new File(filename));
-		} catch (FileNotFoundException ex) {
-			// If that did not work, throw the IOException below
-		}
-		throw new IOException(Globals.lang("Could not find layout file")
-			+ ": '" + filename + "'.");
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.io.*;
+import java.net.URL;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.plugin.core.generated._JabRefPlugin.ExportFormatTemplateExtension;
+
+/**
+ * Class for export formats defined in plugins.
+ * 
+ * Needed since resources might be loaded from a plugin-jar.
+ * 
+ */
+public class PluginBasedExportFormat extends ExportFormat {
+
+	public ExportFormatTemplateExtension extension;
+
+	/**
+	 * Load the plugin from the given extension. Might be null if extension
+	 * could not be loaded.
+	 * 
+	 * @param extension
+	 * @return
+	 */
+	public static PluginBasedExportFormat getFormat(
+		ExportFormatTemplateExtension extension) {
+
+		String consoleName = extension.getConsoleName();
+		String displayName = extension.getDisplayName();
+		String layoutFilename = extension.getLayoutFilename();
+		String fileExtension = extension.getExtension();
+        String encoding = extension.getEncoding();
+		if ("".equals(fileExtension) || "".equals(displayName)
+			|| "".equals(consoleName) || "".equals(layoutFilename)) {
+			Globals.logger("Could not load extension " + extension.getId());
+			return null;
+		}
+
+		return new PluginBasedExportFormat(displayName, consoleName,
+			layoutFilename, fileExtension, encoding, extension);
+	}
+
+	public PluginBasedExportFormat(String displayName, String consoleName,
+		String layoutFileName, String fileExtension, String encoding,
+		ExportFormatTemplateExtension extension) {
+		super(displayName, consoleName, layoutFileName, null, fileExtension);
+        // Set the overriding encoding, if the plugin supplied one:
+        if (encoding != null)
+            setEncoding(encoding);
+		this.extension = extension;
+	}
+
+	@Override
+	public Reader getReader(String filename) throws IOException {
+		URL reso = extension.getDirAsUrl(filename);
+
+		if (reso != null) {
+			try {
+				return new InputStreamReader(reso.openStream());
+			} catch (FileNotFoundException ex) {
+				// If that didn't work, try below
+			}
+		}
+
+		try {
+			return new FileReader(new File(filename));
+		} catch (FileNotFoundException ex) {
+			// If that did not work, throw the IOException below
+		}
+		throw new IOException(Globals.lang("Could not find layout file")
+			+ ": '" + filename + "'.");
+	}
+}
diff --git a/src/java/net/sf/jabref/export/PostgreSQLExport.java b/src/java/net/sf/jabref/export/PostgreSQLExport.java
index 7cdec4b..408da1c 100644
--- a/src/java/net/sf/jabref/export/PostgreSQLExport.java
+++ b/src/java/net/sf/jabref/export/PostgreSQLExport.java
@@ -1,59 +1,59 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.util.Set;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.Globals;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.sql.DBExporterAndImporterFactory;
-
-/**
- * MySQLExport contributed by Lee Patton.
- * PostgreSQLExport contributed by Fred Stevens.
- */
-public class PostgreSQLExport extends ExportFormat {
-
-    public PostgreSQLExport() {
-        super(Globals.lang("PostgreSQL database"), "postgresql", null, null, ".sql");
-    }
-
-    /**
-     * First method called when user starts the export.
-     * 
-     * @param database
-     *            The bibtex database from which to export.
-     * @param file
-     *            The filename to which the export should be writtten.
-     * @param encoding
-     *            The encoding to use.
-     * @param keySet
-     *            The set of IDs of the entries to export.
-     * @throws java.lang.Exception
-     *             If something goes wrong, feel free to throw an exception. The
-     *             error message is shown to the user.
-     */
-    public void performExport(final BibtexDatabase database,
-        final MetaData metaData, final String file, final String encoding,
-        Set<String> keySet) throws Exception {
-
-    	new DBExporterAndImporterFactory().getExporter("POSTGRESQL").exportDatabaseAsFile(database, metaData, keySet, file);
-
-    }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.util.Set;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.Globals;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.sql.DBExporterAndImporterFactory;
+
+/**
+ * MySQLExport contributed by Lee Patton.
+ * PostgreSQLExport contributed by Fred Stevens.
+ */
+public class PostgreSQLExport extends ExportFormat {
+
+    public PostgreSQLExport() {
+        super(Globals.lang("PostgreSQL database"), "postgresql", null, null, ".sql");
+    }
+
+    /**
+     * First method called when user starts the export.
+     * 
+     * @param database
+     *            The bibtex database from which to export.
+     * @param file
+     *            The filename to which the export should be writtten.
+     * @param encoding
+     *            The encoding to use.
+     * @param keySet
+     *            The set of IDs of the entries to export.
+     * @throws java.lang.Exception
+     *             If something goes wrong, feel free to throw an exception. The
+     *             error message is shown to the user.
+     */
+    public void performExport(final BibtexDatabase database,
+        final MetaData metaData, final String file, final String encoding,
+        Set<String> keySet) throws Exception {
+
+    	new DBExporterAndImporterFactory().getExporter("POSTGRESQL").exportDatabaseAsFile(database, metaData, keySet, file);
+
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/export/RtfSelection.java b/src/java/net/sf/jabref/export/RtfSelection.java
index 58f8cb5..5b7171b 100644
--- a/src/java/net/sf/jabref/export/RtfSelection.java
+++ b/src/java/net/sf/jabref/export/RtfSelection.java
@@ -1,65 +1,65 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-
-
-public class RtfSelection implements Transferable {
-    DataFlavor rtfFlavor;
-    DataFlavor[] supportedFlavors;
-    private String content;
-
-    public RtfSelection(String s) {
-        content = s;
-        try {
-            rtfFlavor = new DataFlavor
-                    ("text/rtf; class=java.io.InputStream");
-            supportedFlavors = new DataFlavor[]
-            {rtfFlavor, DataFlavor.stringFlavor};
-        } catch (ClassNotFoundException ex) {
-            ex.printStackTrace();
-        }
-    }
-
-    public boolean isDataFlavorSupported(DataFlavor flavor) {
-        return flavor.equals(rtfFlavor) ||
-                flavor.equals(DataFlavor.stringFlavor);
-    }
-
-    public java.awt.datatransfer.DataFlavor[] getTransferDataFlavors() {
-        //System.out.println("..");
-        return supportedFlavors;
-    }
-
-    public Object getTransferData(DataFlavor flavor)
-            throws UnsupportedFlavorException, IOException {
-
-        if (flavor.equals(DataFlavor.stringFlavor)) {
-            //System.out.println("Delivering string data.");
-            return content;
-        } else if (flavor.equals(rtfFlavor)) {
-            //System.out.println("Delivering rtf data.");
-            byte[] byteArray = content.getBytes();
-            return new ByteArrayInputStream(byteArray);
-        }
-        throw new UnsupportedFlavorException(flavor);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+
+public class RtfSelection implements Transferable {
+    DataFlavor rtfFlavor;
+    DataFlavor[] supportedFlavors;
+    private String content;
+
+    public RtfSelection(String s) {
+        content = s;
+        try {
+            rtfFlavor = new DataFlavor
+                    ("text/rtf; class=java.io.InputStream");
+            supportedFlavors = new DataFlavor[]
+            {rtfFlavor, DataFlavor.stringFlavor};
+        } catch (ClassNotFoundException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    public boolean isDataFlavorSupported(DataFlavor flavor) {
+        return flavor.equals(rtfFlavor) ||
+                flavor.equals(DataFlavor.stringFlavor);
+    }
+
+    public java.awt.datatransfer.DataFlavor[] getTransferDataFlavors() {
+        //System.out.println("..");
+        return supportedFlavors;
+    }
+
+    public Object getTransferData(DataFlavor flavor)
+            throws UnsupportedFlavorException, IOException {
+
+        if (flavor.equals(DataFlavor.stringFlavor)) {
+            //System.out.println("Delivering string data.");
+            return content;
+        } else if (flavor.equals(rtfFlavor)) {
+            //System.out.println("Delivering rtf data.");
+            byte[] byteArray = content.getBytes();
+            return new ByteArrayInputStream(byteArray);
+        }
+        throw new UnsupportedFlavorException(flavor);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/SaveAllAction.java b/src/java/net/sf/jabref/export/SaveAllAction.java
index 37960b8..169abbf 100644
--- a/src/java/net/sf/jabref/export/SaveAllAction.java
+++ b/src/java/net/sf/jabref/export/SaveAllAction.java
@@ -1,68 +1,68 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.awt.event.ActionEvent;
-
-import net.sf.jabref.*;
-import spin.Spin;
-
-/**
- *
- * @author alver
- */
-public class SaveAllAction extends MnemonicAwareAction implements Worker {
-    
-    private JabRefFrame frame;
-    private int databases=0, saved=0;
-    
-    /** Creates a new instance of SaveAllAction */
-    public SaveAllAction(JabRefFrame frame) {
-        super(GUIGlobals.getImage("saveAll"));
-        this.frame = frame;
-        putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Save all"));
-        putValue(SHORT_DESCRIPTION, Globals.lang("Save all open databases"));
-        putValue(NAME, "Save all");
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        databases = frame.getTabbedPane().getTabCount();
-        saved = 0;
-        frame.output(Globals.lang("Saving all databases..."));
-        Spin.off(this);
-        run();
-        frame.output(Globals.lang("Save all finished."));
-    }
-
-    public void run() {
-        for (int i=0; i<databases; i++) {
-            if (i < frame.getTabbedPane().getTabCount()) {
-                //System.out.println("Base "+i);
-                BasePanel panel = frame.baseAt(i);
-                if (panel.getFile() == null) {
-                    frame.showBaseAt(i);
-                }
-                panel.runCommand("save");
-                // TODO: can we find out whether the save was actually done or not?
-                saved++;
-            }
-        }
-    }
-
-    
-    
-    
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.awt.event.ActionEvent;
+
+import net.sf.jabref.*;
+import spin.Spin;
+
+/**
+ *
+ * @author alver
+ */
+public class SaveAllAction extends MnemonicAwareAction implements Worker {
+    
+    private JabRefFrame frame;
+    private int databases=0, saved=0;
+    
+    /** Creates a new instance of SaveAllAction */
+    public SaveAllAction(JabRefFrame frame) {
+        super(GUIGlobals.getImage("saveAll"));
+        this.frame = frame;
+        putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Save all"));
+        putValue(SHORT_DESCRIPTION, Globals.lang("Save all open databases"));
+        putValue(NAME, "Save all");
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        databases = frame.getTabbedPane().getTabCount();
+        saved = 0;
+        frame.output(Globals.lang("Saving all databases..."));
+        Spin.off(this);
+        run();
+        frame.output(Globals.lang("Save all finished."));
+    }
+
+    public void run() {
+        for (int i=0; i<databases; i++) {
+            if (i < frame.getTabbedPane().getTabCount()) {
+                //System.out.println("Base "+i);
+                BasePanel panel = frame.baseAt(i);
+                if (panel.getFile() == null) {
+                    frame.showBaseAt(i);
+                }
+                panel.runCommand("save");
+                // TODO: can we find out whether the save was actually done or not?
+                saved++;
+            }
+        }
+    }
+
+    
+    
+    
+}
diff --git a/src/java/net/sf/jabref/export/SaveDatabaseAction.java b/src/java/net/sf/jabref/export/SaveDatabaseAction.java
index c9d5879..e192efc 100644
--- a/src/java/net/sf/jabref/export/SaveDatabaseAction.java
+++ b/src/java/net/sf/jabref/export/SaveDatabaseAction.java
@@ -1,397 +1,397 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import net.sf.jabref.*;
-import net.sf.jabref.gui.FileDialogs;
-import net.sf.jabref.collab.ChangeScanner;
-
-import javax.swing.*;
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.UnsupportedCharsetException;
-import java.util.Vector;
-
-/**
- * Action for the "Save" and "Save as" operations called from BasePanel. This class is also used for
- * save operations when closing a database or quitting the applications.
- *
- * The operations run synchronously, but offload the save operation from the event thread using Spin.
- * Callers can query whether the operation was cancelled, or whether it was successful.
- */
-public class SaveDatabaseAction extends AbstractWorker {
-    private BasePanel panel;
-    private JabRefFrame frame;
-    private boolean success = false, cancelled = false, fileLockedError = false;
-
-    public SaveDatabaseAction(BasePanel panel) {
-
-        this.panel = panel;
-        this.frame = panel.frame();
-    }
-
-
-    public void init() throws Throwable {
-        success = false;
-        cancelled = false;
-        fileLockedError = false;
-        if (panel.getFile() == null)
-            saveAs();
-        else {
-
-            // Check for external modifications:
-            if (panel.isUpdatedExternally() || Globals.fileUpdateMonitor.hasBeenModified(panel.getFileMonitorHandle())) {
-
-                String[] opts = new String[]{Globals.lang("Review changes"), Globals.lang("Save"),
-                        Globals.lang("Cancel")};
-                int answer = JOptionPane.showOptionDialog(panel.frame(), Globals.lang("File has been updated externally. "
-                        + "What do you want to do?"), Globals.lang("File updated externally"),
-                        JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
-                        null, opts, opts[0]);
-                /*  int choice = JOptionPane.showConfirmDialog(frame, Globals.lang("File has been updated externally. "
-+"Are you sure you want to save?"), Globals.lang("File updated externally"),
-               JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);*/
-
-                if (answer == JOptionPane.CANCEL_OPTION) {
-                    cancelled = true;
-                    return;
-                }
-                else if (answer == JOptionPane.YES_OPTION) {
-                    //try {
-
-                    cancelled = true;
-
-                    (new Thread(new Runnable() {
-                        public void run() {
-
-                            if (!Util.waitForFileLock(panel.getFile(), 10)) {
-                                // TODO: GUI handling of the situation when the externally modified file keeps being locked.
-                                System.err.println("File locked, this will be trouble.");
-                            }
-
-                            ChangeScanner scanner = new ChangeScanner(panel.frame(), panel);
-                            scanner.changeScan(panel.getFile());
-                            try {
-                                scanner.join();
-                            } catch (InterruptedException e) {
-                                e.printStackTrace();
-                            }
-                            if (scanner.changesFound()) {
-                                scanner.displayResult(new ChangeScanner.DisplayResultCallback() {
-                                    public void scanResultsResolved(boolean resolved) {
-                                        if (!resolved) {
-                                            cancelled = true;
-                                        } else {
-                                            panel.setUpdatedExternally(false);
-                                            SwingUtilities.invokeLater(new Runnable() {
-                                                public void run() {
-                                                    panel.getSidePaneManager().hide("fileUpdate");
-                                                }
-                                            });
-                                        }
-                                    }
-                                });
-                            }
-                        }
-                    })).start();
-
-                    return;
-                }
-                else { // User indicated to store anyway.
-                    // See if the database has the protected flag set:
-                    Vector<String> pd = panel.metaData().getData(Globals.PROTECTED_FLAG_META);
-                    boolean databaseProtectionFlag = (pd != null) && Boolean.parseBoolean(pd.get(0));
-                    if (databaseProtectionFlag) {
-                        JOptionPane.showMessageDialog(frame, Globals.lang("Database is protected. Cannot save until external changes have been reviewed."),
-                                Globals.lang("Protected database"), JOptionPane.ERROR_MESSAGE);
-                        cancelled = true;
-                    }
-                    else {
-                        panel.setUpdatedExternally(false);
-                        panel.getSidePaneManager().hide("fileUpdate");
-                    }
-                }
-            }
-
-            panel.frame().output(Globals.lang("Saving database") + "...");
-            panel.setSaving(true);
-        }
-    }
-
-    public void update() {
-        if (success) {
-            // Reset title of tab
-            frame.setTabTitle(panel, panel.getFile().getName(),
-                    panel.getFile().getAbsolutePath());
-            frame.output(Globals.lang("Saved database") + " '"
-                    + panel.getFile().getPath() + "'.");
-            frame.setWindowTitle();
-        } else if (!cancelled) {
-            if (fileLockedError) {
-                // TODO: user should have the option to override the lock file.
-                frame.output(Globals.lang("Could not save, file locked by another JabRef instance."));
-            } else
-                frame.output(Globals.lang("Save failed"));
-        }
-    }
-
-    public void run() {
-        if (cancelled || (panel.getFile() == null)) {
-            return;
-        }
-
-        try {
-
-            // Make sure the current edit is stored:
-            panel.storeCurrentEdit();
-
-            // If the option is set, autogenerate keys for all entries that are
-            // lacking keys, before saving:
-            panel.autoGenerateKeysBeforeSaving();
-
-            if (!Util.waitForFileLock(panel.getFile(), 10)) {
-                success = false;
-                fileLockedError = true;
-            }
-            else {
-                // Now save the database:
-                success = saveDatabase(panel.getFile(), false, panel.getEncoding());
-
-                //Util.pr("Testing resolve string... BasePanel line 237");
-                //Util.pr("Resolve aq: "+database.resolveString("aq"));
-                //Util.pr("Resolve text: "+database.resolveForStrings("A text which refers to the string #aq# and #billball#, hurra."));
-
-                try {
-                    Globals.fileUpdateMonitor.updateTimeStamp(panel.getFileMonitorHandle());
-                } catch (IllegalArgumentException ex) {
-                    // This means the file has not yet been registered, which is the case
-                    // when doing a "Save as". Maybe we should change the monitor so no
-                    // exception is cast.
-                }
-            }
-            panel.setSaving(false);
-            if (success) {
-                panel.undoManager.markUnchanged();
-
-                if (!AutoSaveManager.deleteAutoSaveFile(panel)) {
-                    //System.out.println("Deletion of autosave file failed");
-                }/* else
-                    System.out.println("Deleted autosave file (if it existed)");*/
-                // (Only) after a successful save the following
-                // statement marks that the base is unchanged
-                // since last save:
-                panel.setNonUndoableChange(false);
-                panel.setBaseChanged(false);
-                panel.setUpdatedExternally(false);
-            }
-        } catch (SaveException ex2) {
-            if (ex2 == SaveException.FILE_LOCKED) {
-                success =false;
-                fileLockedError = true;
-                return;
-            }
-            ex2.printStackTrace();
-        }
-    }
-
-    private boolean saveDatabase(File file, boolean selectedOnly, String encoding) throws SaveException {
-        SaveSession session;
-        frame.block();
-        try {
-            if (!selectedOnly)
-                session = FileActions.saveDatabase(panel.database(), panel.metaData(), file,
-                        Globals.prefs, false, false, encoding, false);
-            else
-                session = FileActions.savePartOfDatabase(panel.database(), panel.metaData(), file,
-                        Globals.prefs, panel.getSelectedEntries(), encoding);
-
-        } catch (UnsupportedCharsetException ex2) {
-            JOptionPane.showMessageDialog(frame, Globals.lang("Could not save file. "
-                    + "Character encoding '%0' is not supported.", encoding),
-                    Globals.lang("Save database"), JOptionPane.ERROR_MESSAGE);
-            throw new SaveException("rt");
-        } catch (SaveException ex) {
-            if (ex == SaveException.FILE_LOCKED) {
-                throw ex;
-            }
-            if (ex.specificEntry()) {
-                // Error occured during processing of
-                // be. Highlight it:
-                int row = panel.mainTable.findEntry(ex.getEntry()),
-                        topShow = Math.max(0, row - 3);
-                panel.mainTable.setRowSelectionInterval(row, row);
-                panel.mainTable.scrollTo(topShow);
-                panel.showEntry(ex.getEntry());
-            } else ex.printStackTrace();
-
-            JOptionPane.showMessageDialog
-                    (frame, Globals.lang("Could not save file")
-                            + ".\n" + ex.getMessage(),
-                            Globals.lang("Save database"),
-                            JOptionPane.ERROR_MESSAGE);
-            throw new SaveException("rt");
-
-        } finally {
-            frame.unblock();
-        }
-
-        boolean commit = true;
-        if (!session.getWriter().couldEncodeAll()) {
-            DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("left:pref, 4dlu, fill:pref", ""));
-            JTextArea ta = new JTextArea(session.getWriter().getProblemCharacters());
-            ta.setEditable(false);
-            builder.append(Globals.lang("The chosen encoding '%0' could not encode the following characters: ",
-                    session.getEncoding()));
-            builder.append(ta);
-            builder.append(Globals.lang("What do you want to do?"));
-            String tryDiff = Globals.lang("Try different encoding");
-            int answer = JOptionPane.showOptionDialog(frame, builder.getPanel(), Globals.lang("Save database"),
-                    JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null,
-                    new String[]{Globals.lang("Save"), tryDiff, Globals.lang("Cancel")}, tryDiff);
-
-            if (answer == JOptionPane.NO_OPTION) {
-                // The user wants to use another encoding.
-                Object choice = JOptionPane.showInputDialog(frame, Globals.lang("Select encoding"), Globals.lang("Save database"),
-                        JOptionPane.QUESTION_MESSAGE, null, Globals.ENCODINGS, encoding);
-                if (choice != null) {
-                    String newEncoding = (String) choice;
-                    return saveDatabase(file, selectedOnly, newEncoding);
-                } else
-                    commit = false;
-            } else if (answer == JOptionPane.CANCEL_OPTION)
-                commit = false;
-
-
-        }
-
-        try {
-            if (commit) {
-                session.commit();
-                panel.setEncoding(encoding); // Make sure to remember which encoding we used.
-            } else
-                session.cancel();
-        } catch (SaveException e) {
-            int ans = JOptionPane.showConfirmDialog(null, Globals.lang("Save failed during backup creation")+". "
-                +Globals.lang("Save without backup?"), Globals.lang("Unable to create backup"),
-                    JOptionPane.YES_NO_OPTION);
-            if (ans == JOptionPane.YES_OPTION) {
-                session.setUseBackup(false);
-                session.commit();
-                panel.setEncoding(encoding);
-            }
-            else commit = false;
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-
-        return commit;
-    }
-
-    /**
-     * Run the "Save" operation. This method offloads the actual save operation to a background thread, but
-     * still runs synchronously using Spin (the method returns only after completing the operation).
-     */
-    public void runCommand() throws Throwable {
-        // This part uses Spin's features:
-        Worker wrk = getWorker();
-        // The Worker returned by getWorker() has been wrapped
-        // by Spin.off(), which makes its methods be run in
-        // a different thread from the EDT.
-        CallBack clb = getCallBack();
-
-        init(); // This method runs in this same thread, the EDT.
-        // Useful for initial GUI actions, like printing a message.
-
-        // The CallBack returned by getCallBack() has been wrapped
-        // by Spin.over(), which makes its methods be run on
-        // the EDT.
-        wrk.run(); // Runs the potentially time-consuming action
-        // without freezing the GUI. The magic is that THIS line
-        // of execution will not continue until run() is finished.
-        clb.update(); // Runs the update() method on the EDT.
-
-    }
-
-    public void save() throws Throwable {
-        runCommand();
-    }
-
-    /**
-     * Run the "Save as" operation. This method offloads the actual save operation to a background thread, but
-     * still runs synchronously using Spin (the method returns only after completing the operation).
-     */
-    public void saveAs() throws Throwable {
-        String chosenFile = null;
-        File f = null;
-        while (f == null) {
-            chosenFile = FileDialogs.getNewFile(frame, new File(Globals.prefs.get("workingDirectory")), ".bib",
-                    JFileChooser.SAVE_DIALOG, false, null);
-            if (chosenFile == null) {
-                cancelled = true;
-                return; // cancelled
-            }
-            f = new File(chosenFile);
-            // Check if the file already exists:
-            if (f.exists() && (JOptionPane.showConfirmDialog
-                    (frame, "'" + f.getName() + "' " + Globals.lang("exists. Overwrite file?"),
-                            Globals.lang("Save database"), JOptionPane.OK_CANCEL_OPTION)
-                    != JOptionPane.OK_OPTION)) {
-                f = null;
-            }
-        }
-
-        if (chosenFile != null) {
-            File oldFile = panel.metaData().getFile();
-            panel.metaData().setFile(f);
-            Globals.prefs.put("workingDirectory", f.getParent());
-            runCommand();
-            // If the operation failed, revert the file field and return:
-            if (!success) {
-                panel.metaData().setFile(oldFile);
-                return;
-            }
-            // Register so we get notifications about outside changes to the file.
-            try {
-                panel.setFileMonitorHandle(Globals.fileUpdateMonitor.addUpdateListener(panel, panel.getFile()));
-            } catch (IOException ex) {
-                ex.printStackTrace();
-            }
-            frame.getFileHistory().newFile(panel.metaData().getFile().getPath());
-        }
-
-    }
-
-    /**
-     * Query whether the last operation was successful.
-     *
-     * @returns true if the last Save/SaveAs operation completed successfully, false otherwise.
-     */
-    public boolean isSuccess() {
-        return success;
-    }
-
-    /**
-     * Query whether the last operation was cancelled.
-     *
-     * @returns true if the last Save/SaveAs operation was cancelled from the file dialog or from another 
-     * query dialog, false otherwise.
-     */
-    public boolean isCancelled() {
-        return cancelled;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import net.sf.jabref.*;
+import net.sf.jabref.gui.FileDialogs;
+import net.sf.jabref.collab.ChangeScanner;
+
+import javax.swing.*;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.UnsupportedCharsetException;
+import java.util.Vector;
+
+/**
+ * Action for the "Save" and "Save as" operations called from BasePanel. This class is also used for
+ * save operations when closing a database or quitting the applications.
+ *
+ * The operations run synchronously, but offload the save operation from the event thread using Spin.
+ * Callers can query whether the operation was cancelled, or whether it was successful.
+ */
+public class SaveDatabaseAction extends AbstractWorker {
+    private BasePanel panel;
+    private JabRefFrame frame;
+    private boolean success = false, cancelled = false, fileLockedError = false;
+
+    public SaveDatabaseAction(BasePanel panel) {
+
+        this.panel = panel;
+        this.frame = panel.frame();
+    }
+
+
+    public void init() throws Throwable {
+        success = false;
+        cancelled = false;
+        fileLockedError = false;
+        if (panel.getFile() == null)
+            saveAs();
+        else {
+
+            // Check for external modifications:
+            if (panel.isUpdatedExternally() || Globals.fileUpdateMonitor.hasBeenModified(panel.getFileMonitorHandle())) {
+
+                String[] opts = new String[]{Globals.lang("Review changes"), Globals.lang("Save"),
+                        Globals.lang("Cancel")};
+                int answer = JOptionPane.showOptionDialog(panel.frame(), Globals.lang("File has been updated externally. "
+                        + "What do you want to do?"), Globals.lang("File updated externally"),
+                        JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
+                        null, opts, opts[0]);
+                /*  int choice = JOptionPane.showConfirmDialog(frame, Globals.lang("File has been updated externally. "
++"Are you sure you want to save?"), Globals.lang("File updated externally"),
+               JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);*/
+
+                if (answer == JOptionPane.CANCEL_OPTION) {
+                    cancelled = true;
+                    return;
+                }
+                else if (answer == JOptionPane.YES_OPTION) {
+                    //try {
+
+                    cancelled = true;
+
+                    (new Thread(new Runnable() {
+                        public void run() {
+
+                            if (!Util.waitForFileLock(panel.getFile(), 10)) {
+                                // TODO: GUI handling of the situation when the externally modified file keeps being locked.
+                                System.err.println("File locked, this will be trouble.");
+                            }
+
+                            ChangeScanner scanner = new ChangeScanner(panel.frame(), panel);
+                            scanner.changeScan(panel.getFile());
+                            try {
+                                scanner.join();
+                            } catch (InterruptedException e) {
+                                e.printStackTrace();
+                            }
+                            if (scanner.changesFound()) {
+                                scanner.displayResult(new ChangeScanner.DisplayResultCallback() {
+                                    public void scanResultsResolved(boolean resolved) {
+                                        if (!resolved) {
+                                            cancelled = true;
+                                        } else {
+                                            panel.setUpdatedExternally(false);
+                                            SwingUtilities.invokeLater(new Runnable() {
+                                                public void run() {
+                                                    panel.getSidePaneManager().hide("fileUpdate");
+                                                }
+                                            });
+                                        }
+                                    }
+                                });
+                            }
+                        }
+                    })).start();
+
+                    return;
+                }
+                else { // User indicated to store anyway.
+                    // See if the database has the protected flag set:
+                    Vector<String> pd = panel.metaData().getData(Globals.PROTECTED_FLAG_META);
+                    boolean databaseProtectionFlag = (pd != null) && Boolean.parseBoolean(pd.get(0));
+                    if (databaseProtectionFlag) {
+                        JOptionPane.showMessageDialog(frame, Globals.lang("Database is protected. Cannot save until external changes have been reviewed."),
+                                Globals.lang("Protected database"), JOptionPane.ERROR_MESSAGE);
+                        cancelled = true;
+                    }
+                    else {
+                        panel.setUpdatedExternally(false);
+                        panel.getSidePaneManager().hide("fileUpdate");
+                    }
+                }
+            }
+
+            panel.frame().output(Globals.lang("Saving database") + "...");
+            panel.setSaving(true);
+        }
+    }
+
+    public void update() {
+        if (success) {
+            // Reset title of tab
+            frame.setTabTitle(panel, panel.getFile().getName(),
+                    panel.getFile().getAbsolutePath());
+            frame.output(Globals.lang("Saved database") + " '"
+                    + panel.getFile().getPath() + "'.");
+            frame.setWindowTitle();
+        } else if (!cancelled) {
+            if (fileLockedError) {
+                // TODO: user should have the option to override the lock file.
+                frame.output(Globals.lang("Could not save, file locked by another JabRef instance."));
+            } else
+                frame.output(Globals.lang("Save failed"));
+        }
+    }
+
+    public void run() {
+        if (cancelled || (panel.getFile() == null)) {
+            return;
+        }
+
+        try {
+
+            // Make sure the current edit is stored:
+            panel.storeCurrentEdit();
+
+            // If the option is set, autogenerate keys for all entries that are
+            // lacking keys, before saving:
+            panel.autoGenerateKeysBeforeSaving();
+
+            if (!Util.waitForFileLock(panel.getFile(), 10)) {
+                success = false;
+                fileLockedError = true;
+            }
+            else {
+                // Now save the database:
+                success = saveDatabase(panel.getFile(), false, panel.getEncoding());
+
+                //Util.pr("Testing resolve string... BasePanel line 237");
+                //Util.pr("Resolve aq: "+database.resolveString("aq"));
+                //Util.pr("Resolve text: "+database.resolveForStrings("A text which refers to the string #aq# and #billball#, hurra."));
+
+                try {
+                    Globals.fileUpdateMonitor.updateTimeStamp(panel.getFileMonitorHandle());
+                } catch (IllegalArgumentException ex) {
+                    // This means the file has not yet been registered, which is the case
+                    // when doing a "Save as". Maybe we should change the monitor so no
+                    // exception is cast.
+                }
+            }
+            panel.setSaving(false);
+            if (success) {
+                panel.undoManager.markUnchanged();
+
+                if (!AutoSaveManager.deleteAutoSaveFile(panel)) {
+                    //System.out.println("Deletion of autosave file failed");
+                }/* else
+                    System.out.println("Deleted autosave file (if it existed)");*/
+                // (Only) after a successful save the following
+                // statement marks that the base is unchanged
+                // since last save:
+                panel.setNonUndoableChange(false);
+                panel.setBaseChanged(false);
+                panel.setUpdatedExternally(false);
+            }
+        } catch (SaveException ex2) {
+            if (ex2 == SaveException.FILE_LOCKED) {
+                success =false;
+                fileLockedError = true;
+                return;
+            }
+            ex2.printStackTrace();
+        }
+    }
+
+    private boolean saveDatabase(File file, boolean selectedOnly, String encoding) throws SaveException {
+        SaveSession session;
+        frame.block();
+        try {
+            if (!selectedOnly)
+                session = FileActions.saveDatabase(panel.database(), panel.metaData(), file,
+                        Globals.prefs, false, false, encoding, false);
+            else
+                session = FileActions.savePartOfDatabase(panel.database(), panel.metaData(), file,
+                        Globals.prefs, panel.getSelectedEntries(), encoding);
+
+        } catch (UnsupportedCharsetException ex2) {
+            JOptionPane.showMessageDialog(frame, Globals.lang("Could not save file. "
+                    + "Character encoding '%0' is not supported.", encoding),
+                    Globals.lang("Save database"), JOptionPane.ERROR_MESSAGE);
+            throw new SaveException("rt");
+        } catch (SaveException ex) {
+            if (ex == SaveException.FILE_LOCKED) {
+                throw ex;
+            }
+            if (ex.specificEntry()) {
+                // Error occured during processing of
+                // be. Highlight it:
+                int row = panel.mainTable.findEntry(ex.getEntry()),
+                        topShow = Math.max(0, row - 3);
+                panel.mainTable.setRowSelectionInterval(row, row);
+                panel.mainTable.scrollTo(topShow);
+                panel.showEntry(ex.getEntry());
+            } else ex.printStackTrace();
+
+            JOptionPane.showMessageDialog
+                    (frame, Globals.lang("Could not save file")
+                            + ".\n" + ex.getMessage(),
+                            Globals.lang("Save database"),
+                            JOptionPane.ERROR_MESSAGE);
+            throw new SaveException("rt");
+
+        } finally {
+            frame.unblock();
+        }
+
+        boolean commit = true;
+        if (!session.getWriter().couldEncodeAll()) {
+            DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("left:pref, 4dlu, fill:pref", ""));
+            JTextArea ta = new JTextArea(session.getWriter().getProblemCharacters());
+            ta.setEditable(false);
+            builder.append(Globals.lang("The chosen encoding '%0' could not encode the following characters: ",
+                    session.getEncoding()));
+            builder.append(ta);
+            builder.append(Globals.lang("What do you want to do?"));
+            String tryDiff = Globals.lang("Try different encoding");
+            int answer = JOptionPane.showOptionDialog(frame, builder.getPanel(), Globals.lang("Save database"),
+                    JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null,
+                    new String[]{Globals.lang("Save"), tryDiff, Globals.lang("Cancel")}, tryDiff);
+
+            if (answer == JOptionPane.NO_OPTION) {
+                // The user wants to use another encoding.
+                Object choice = JOptionPane.showInputDialog(frame, Globals.lang("Select encoding"), Globals.lang("Save database"),
+                        JOptionPane.QUESTION_MESSAGE, null, Globals.ENCODINGS, encoding);
+                if (choice != null) {
+                    String newEncoding = (String) choice;
+                    return saveDatabase(file, selectedOnly, newEncoding);
+                } else
+                    commit = false;
+            } else if (answer == JOptionPane.CANCEL_OPTION)
+                commit = false;
+
+
+        }
+
+        try {
+            if (commit) {
+                session.commit();
+                panel.setEncoding(encoding); // Make sure to remember which encoding we used.
+            } else
+                session.cancel();
+        } catch (SaveException e) {
+            int ans = JOptionPane.showConfirmDialog(null, Globals.lang("Save failed during backup creation")+". "
+                +Globals.lang("Save without backup?"), Globals.lang("Unable to create backup"),
+                    JOptionPane.YES_NO_OPTION);
+            if (ans == JOptionPane.YES_OPTION) {
+                session.setUseBackup(false);
+                session.commit();
+                panel.setEncoding(encoding);
+            }
+            else commit = false;
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return commit;
+    }
+
+    /**
+     * Run the "Save" operation. This method offloads the actual save operation to a background thread, but
+     * still runs synchronously using Spin (the method returns only after completing the operation).
+     */
+    public void runCommand() throws Throwable {
+        // This part uses Spin's features:
+        Worker wrk = getWorker();
+        // The Worker returned by getWorker() has been wrapped
+        // by Spin.off(), which makes its methods be run in
+        // a different thread from the EDT.
+        CallBack clb = getCallBack();
+
+        init(); // This method runs in this same thread, the EDT.
+        // Useful for initial GUI actions, like printing a message.
+
+        // The CallBack returned by getCallBack() has been wrapped
+        // by Spin.over(), which makes its methods be run on
+        // the EDT.
+        wrk.run(); // Runs the potentially time-consuming action
+        // without freezing the GUI. The magic is that THIS line
+        // of execution will not continue until run() is finished.
+        clb.update(); // Runs the update() method on the EDT.
+
+    }
+
+    public void save() throws Throwable {
+        runCommand();
+    }
+
+    /**
+     * Run the "Save as" operation. This method offloads the actual save operation to a background thread, but
+     * still runs synchronously using Spin (the method returns only after completing the operation).
+     */
+    public void saveAs() throws Throwable {
+        String chosenFile = null;
+        File f = null;
+        while (f == null) {
+            chosenFile = FileDialogs.getNewFile(frame, new File(Globals.prefs.get("workingDirectory")), ".bib",
+                    JFileChooser.SAVE_DIALOG, false, null);
+            if (chosenFile == null) {
+                cancelled = true;
+                return; // cancelled
+            }
+            f = new File(chosenFile);
+            // Check if the file already exists:
+            if (f.exists() && (JOptionPane.showConfirmDialog
+                    (frame, "'" + f.getName() + "' " + Globals.lang("exists. Overwrite file?"),
+                            Globals.lang("Save database"), JOptionPane.OK_CANCEL_OPTION)
+                    != JOptionPane.OK_OPTION)) {
+                f = null;
+            }
+        }
+
+        if (chosenFile != null) {
+            File oldFile = panel.metaData().getFile();
+            panel.metaData().setFile(f);
+            Globals.prefs.put("workingDirectory", f.getParent());
+            runCommand();
+            // If the operation failed, revert the file field and return:
+            if (!success) {
+                panel.metaData().setFile(oldFile);
+                return;
+            }
+            // Register so we get notifications about outside changes to the file.
+            try {
+                panel.setFileMonitorHandle(Globals.fileUpdateMonitor.addUpdateListener(panel, panel.getFile()));
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+            frame.getFileHistory().newFile(panel.metaData().getFile().getPath());
+        }
+
+    }
+
+    /**
+     * Query whether the last operation was successful.
+     *
+     * @returns true if the last Save/SaveAs operation completed successfully, false otherwise.
+     */
+    public boolean isSuccess() {
+        return success;
+    }
+
+    /**
+     * Query whether the last operation was cancelled.
+     *
+     * @returns true if the last Save/SaveAs operation was cancelled from the file dialog or from another 
+     * query dialog, false otherwise.
+     */
+    public boolean isCancelled() {
+        return cancelled;
+    }
+}
diff --git a/src/java/net/sf/jabref/export/SaveException.java b/src/java/net/sf/jabref/export/SaveException.java
index a7e76d7..dd74602 100644
--- a/src/java/net/sf/jabref/export/SaveException.java
+++ b/src/java/net/sf/jabref/export/SaveException.java
@@ -1,77 +1,77 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-
-
-/**
- * Exception thrown if saving goes wrong. If caused by a specific
- * entry, keeps track of which entry caused the problem.
- */
-public class SaveException extends Exception
-{
-    //~ Instance fields ////////////////////////////////////////////////////////
-
-    public static final SaveException FILE_LOCKED = new SaveException
-            (Globals.lang("Could not save, file locked by another JabRef instance."));
-    public static final SaveException BACKUP_CREATION = new SaveException
-            (Globals.lang("Unable to create backup"));
-
-    private BibtexEntry entry;
-    private int status = 0;
-    //~ Constructors ///////////////////////////////////////////////////////////
-
-    public SaveException(String message)
-    {
-        super(message);
-        entry = null;
-    }
-
-    public SaveException(String message, int status)
-        {
-            super(message);
-            entry = null;
-            this.status = status;
-        }
-
-
-    public SaveException(String message, BibtexEntry entry)
-    {
-        super(message);
-        this.entry = entry;
-    }
-
-    //~ Methods ////////////////////////////////////////////////////////////////
-
-    public int getStatus() {
-        return status;
-    }
-
-    public BibtexEntry getEntry()
-    {
-        return entry;
-    }
-
-    public boolean specificEntry()
-    {
-        return (entry != null);
-    }
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+
+
+/**
+ * Exception thrown if saving goes wrong. If caused by a specific
+ * entry, keeps track of which entry caused the problem.
+ */
+public class SaveException extends Exception
+{
+    //~ Instance fields ////////////////////////////////////////////////////////
+
+    public static final SaveException FILE_LOCKED = new SaveException
+            (Globals.lang("Could not save, file locked by another JabRef instance."));
+    public static final SaveException BACKUP_CREATION = new SaveException
+            (Globals.lang("Unable to create backup"));
+
+    private BibtexEntry entry;
+    private int status = 0;
+    //~ Constructors ///////////////////////////////////////////////////////////
+
+    public SaveException(String message)
+    {
+        super(message);
+        entry = null;
+    }
+
+    public SaveException(String message, int status)
+        {
+            super(message);
+            entry = null;
+            this.status = status;
+        }
+
+
+    public SaveException(String message, BibtexEntry entry)
+    {
+        super(message);
+        this.entry = entry;
+    }
+
+    //~ Methods ////////////////////////////////////////////////////////////////
+
+    public int getStatus() {
+        return status;
+    }
+
+    public BibtexEntry getEntry()
+    {
+        return entry;
+    }
+
+    public boolean specificEntry()
+    {
+        return (entry != null);
+    }
+}
+///////////////////////////////////////////////////////////////////////////////
+//  END OF FILE.
+///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/SaveSession.java b/src/java/net/sf/jabref/export/SaveSession.java
index 86addff..f476772 100644
--- a/src/java/net/sf/jabref/export/SaveSession.java
+++ b/src/java/net/sf/jabref/export/SaveSession.java
@@ -1,173 +1,173 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-import net.sf.jabref.GUIGlobals;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.FileOutputStream;
-import java.nio.charset.UnsupportedCharsetException;
-
-/**
- * Class used to handle safe storage to disk. 
- * 
- * Usage: create a SaveSession giving the file to save to, the
- * encoding, and whether to make a backup. The SaveSession will provide a Writer to store to, which actually
- * goes to a temporary file. The Writer keeps track of whether all characters could be saved, and if not,
- * which characters were not encodable.
- * 
- * After saving is finished, the client should close the Writer. If the save should be put into effect, call
- * commit(), otherwise call cancel(). When cancelling, the temporary file is simply deleted and the target
- * file remains unchanged. When committing, the temporary file is copied to the target file after making
- * a backup if requested and if the target file already existed, and finally the temporary file is deleted.
- * 
- * If committing fails, the temporary file will not be deleted.
- */
-public class SaveSession {
-
-    public static final String LOCKFILE_SUFFIX = ".lock";
-    // The age in ms of a lockfile before JabRef will offer to "steal" the locked file:
-    public static final long LOCKFILE_CRITICAL_AGE = 60000;
-
-    private static final String TEMP_PREFIX = "jabref";
-    private static final String TEMP_SUFFIX = "save.bib";
-
-    File file, tmp, backupFile;
-    String encoding;
-    boolean backup, useLockFile;
-    VerifyingWriter writer;
-
-    public SaveSession(File file, String encoding, boolean backup) throws IOException,
-        UnsupportedCharsetException {
-        this.file = file;
-        tmp = File.createTempFile(TEMP_PREFIX, TEMP_SUFFIX);
-        useLockFile = Globals.prefs.getBoolean("useLockFiles");
-        this.backup = backup;
-        this.encoding = encoding;
-        writer = new VerifyingWriter(new FileOutputStream(tmp), encoding);
-    }
-
-    public VerifyingWriter getWriter() {
-        return writer;
-    }
-
-    public String getEncoding() {
-        return encoding;
-    }
-
-    public void setUseBackup(boolean useBackup) {
-        this.backup = useBackup;
-    }
-
-    public void commit() throws SaveException {
-        if (file == null)
-            return;
-        if (file.exists() && backup) {
-            String name = file.getName();
-            String path = file.getParent();
-            File backupFile = new File(path, name + GUIGlobals.backupExt);
-            try {
-                Util.copyFile(file, backupFile, true);
-            } catch (IOException ex) {
-                ex.printStackTrace();
-                throw SaveException.BACKUP_CREATION;
-                //throw new SaveException(Globals.lang("Save failed during backup creation")+": "+ex.getMessage());
-            }
-        }
-        try {
-            if (useLockFile) {
-                try {
-                    if (createLockFile()) {
-                        // Oops, the lock file already existed. Try to wait it out:
-                        if (!Util.waitForFileLock(file, 10))
-                            throw SaveException.FILE_LOCKED;
-
-                    }
-                } catch (IOException ex) {
-                    System.err.println("Error when creating lock file");
-                    ex.printStackTrace();
-                }
-            }
-
-            Util.copyFile(tmp, file, true);
-        } catch (IOException ex2) {
-            // If something happens here, what can we do to correct the problem? The file is corrupted, but we still
-            // have a clean copy in tmp. However, we just failed to copy tmp to file, so it's not likely that
-            // repeating the action will have a different result.
-            // On the other hand, our temporary file should still be clean, and won't be deleted.
-            throw new SaveException(Globals.lang("Save failed while committing changes")+": "+ex2.getMessage());
-        } finally {
-            if (useLockFile) {
-                try {
-                    deleteLockFile();
-                } catch (IOException ex) {
-                    System.err.println("Error when deleting lock file");
-                    ex.printStackTrace();
-                }
-            }
-        }
-
-        tmp.delete();
-    }
-
-    public void cancel() throws IOException {
-        tmp.delete();
-    }
-
-
-    /**
-     * Check if a lock file exists, and create it if it doesn't.
-     * @return true if the lock file already existed
-     * @throws IOException if something happens during creation.
-     */
-    private boolean createLockFile() throws IOException {
-        File lock = new File(file.getPath()+LOCKFILE_SUFFIX);
-        if (lock.exists()) {
-            return true;
-        }
-        FileOutputStream out = new FileOutputStream(lock);
-        out.write(0);
-        try {
-            out.close();
-        } catch (IOException ex) {
-            System.err.println("Error when creating lock file");
-            ex.printStackTrace();
-        }
-        lock.deleteOnExit();
-        return false;
-    }
-
-    /**
-     * Check if a lock file exists, and delete it if it does.
-     * @return true if the lock file existed, false otherwise.
-     * @throws IOException if something goes wrong.
-     */
-    private boolean deleteLockFile() throws IOException {
-        File lock = new File(file.getPath()+LOCKFILE_SUFFIX);
-        if (!lock.exists()) {
-            return false;
-        }
-        lock.delete();
-        return true;
-    }
-
-    public File getTemporaryFile() {
-        return tmp;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+import net.sf.jabref.GUIGlobals;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.FileOutputStream;
+import java.nio.charset.UnsupportedCharsetException;
+
+/**
+ * Class used to handle safe storage to disk. 
+ * 
+ * Usage: create a SaveSession giving the file to save to, the
+ * encoding, and whether to make a backup. The SaveSession will provide a Writer to store to, which actually
+ * goes to a temporary file. The Writer keeps track of whether all characters could be saved, and if not,
+ * which characters were not encodable.
+ * 
+ * After saving is finished, the client should close the Writer. If the save should be put into effect, call
+ * commit(), otherwise call cancel(). When cancelling, the temporary file is simply deleted and the target
+ * file remains unchanged. When committing, the temporary file is copied to the target file after making
+ * a backup if requested and if the target file already existed, and finally the temporary file is deleted.
+ * 
+ * If committing fails, the temporary file will not be deleted.
+ */
+public class SaveSession {
+
+    public static final String LOCKFILE_SUFFIX = ".lock";
+    // The age in ms of a lockfile before JabRef will offer to "steal" the locked file:
+    public static final long LOCKFILE_CRITICAL_AGE = 60000;
+
+    private static final String TEMP_PREFIX = "jabref";
+    private static final String TEMP_SUFFIX = "save.bib";
+
+    File file, tmp, backupFile;
+    String encoding;
+    boolean backup, useLockFile;
+    VerifyingWriter writer;
+
+    public SaveSession(File file, String encoding, boolean backup) throws IOException,
+        UnsupportedCharsetException {
+        this.file = file;
+        tmp = File.createTempFile(TEMP_PREFIX, TEMP_SUFFIX);
+        useLockFile = Globals.prefs.getBoolean("useLockFiles");
+        this.backup = backup;
+        this.encoding = encoding;
+        writer = new VerifyingWriter(new FileOutputStream(tmp), encoding);
+    }
+
+    public VerifyingWriter getWriter() {
+        return writer;
+    }
+
+    public String getEncoding() {
+        return encoding;
+    }
+
+    public void setUseBackup(boolean useBackup) {
+        this.backup = useBackup;
+    }
+
+    public void commit() throws SaveException {
+        if (file == null)
+            return;
+        if (file.exists() && backup) {
+            String name = file.getName();
+            String path = file.getParent();
+            File backupFile = new File(path, name + GUIGlobals.backupExt);
+            try {
+                Util.copyFile(file, backupFile, true);
+            } catch (IOException ex) {
+                ex.printStackTrace();
+                throw SaveException.BACKUP_CREATION;
+                //throw new SaveException(Globals.lang("Save failed during backup creation")+": "+ex.getMessage());
+            }
+        }
+        try {
+            if (useLockFile) {
+                try {
+                    if (createLockFile()) {
+                        // Oops, the lock file already existed. Try to wait it out:
+                        if (!Util.waitForFileLock(file, 10))
+                            throw SaveException.FILE_LOCKED;
+
+                    }
+                } catch (IOException ex) {
+                    System.err.println("Error when creating lock file");
+                    ex.printStackTrace();
+                }
+            }
+
+            Util.copyFile(tmp, file, true);
+        } catch (IOException ex2) {
+            // If something happens here, what can we do to correct the problem? The file is corrupted, but we still
+            // have a clean copy in tmp. However, we just failed to copy tmp to file, so it's not likely that
+            // repeating the action will have a different result.
+            // On the other hand, our temporary file should still be clean, and won't be deleted.
+            throw new SaveException(Globals.lang("Save failed while committing changes")+": "+ex2.getMessage());
+        } finally {
+            if (useLockFile) {
+                try {
+                    deleteLockFile();
+                } catch (IOException ex) {
+                    System.err.println("Error when deleting lock file");
+                    ex.printStackTrace();
+                }
+            }
+        }
+
+        tmp.delete();
+    }
+
+    public void cancel() throws IOException {
+        tmp.delete();
+    }
+
+
+    /**
+     * Check if a lock file exists, and create it if it doesn't.
+     * @return true if the lock file already existed
+     * @throws IOException if something happens during creation.
+     */
+    private boolean createLockFile() throws IOException {
+        File lock = new File(file.getPath()+LOCKFILE_SUFFIX);
+        if (lock.exists()) {
+            return true;
+        }
+        FileOutputStream out = new FileOutputStream(lock);
+        out.write(0);
+        try {
+            out.close();
+        } catch (IOException ex) {
+            System.err.println("Error when creating lock file");
+            ex.printStackTrace();
+        }
+        lock.deleteOnExit();
+        return false;
+    }
+
+    /**
+     * Check if a lock file exists, and delete it if it does.
+     * @return true if the lock file existed, false otherwise.
+     * @throws IOException if something goes wrong.
+     */
+    private boolean deleteLockFile() throws IOException {
+        File lock = new File(file.getPath()+LOCKFILE_SUFFIX);
+        if (!lock.exists()) {
+            return false;
+        }
+        lock.delete();
+        return true;
+    }
+
+    public File getTemporaryFile() {
+        return tmp;
+    }
+}
diff --git a/src/java/net/sf/jabref/export/VerifyingWriter.java b/src/java/net/sf/jabref/export/VerifyingWriter.java
index a1d78d3..1eaa1e9 100644
--- a/src/java/net/sf/jabref/export/VerifyingWriter.java
+++ b/src/java/net/sf/jabref/export/VerifyingWriter.java
@@ -1,65 +1,65 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.util.TreeSet;
-
-/**
- * Writer that extends OutputStreamWriter, but also checks if the chosen
- * encoding supports all text that is written. Currently only a boolean value is
- * stored to remember whether everything has gone well or not.
- */
-public class VerifyingWriter extends OutputStreamWriter {
-
-	CharsetEncoder encoder;
-	private boolean couldEncodeAll = true;
-	private TreeSet<Character> problemCharacters = new TreeSet<Character>();
-
-	public VerifyingWriter(OutputStream out, String encoding)
-			throws UnsupportedEncodingException {
-		super(out, encoding);
-		encoder = Charset.forName(encoding).newEncoder();
-	}
-
-	public void write(String str) throws IOException {
-		super.write(str);
-		if (!encoder.canEncode(str)) {
-			for (int i = 0; i < str.length(); i++) {
-				if (!encoder.canEncode(str.charAt(i)))
-					problemCharacters.add(new Character(str.charAt(i)));
-			}
-			couldEncodeAll = false;
-		}
-	}
-
-	public boolean couldEncodeAll() {
-		return couldEncodeAll;
-	}
-
-	public String getProblemCharacters() {
-		StringBuffer chars = new StringBuffer();
-		for (Character ch : problemCharacters) {
-			chars.append(ch.charValue());
-		}
-		return chars.toString();
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.util.TreeSet;
+
+/**
+ * Writer that extends OutputStreamWriter, but also checks if the chosen
+ * encoding supports all text that is written. Currently only a boolean value is
+ * stored to remember whether everything has gone well or not.
+ */
+public class VerifyingWriter extends OutputStreamWriter {
+
+	CharsetEncoder encoder;
+	private boolean couldEncodeAll = true;
+	private TreeSet<Character> problemCharacters = new TreeSet<Character>();
+
+	public VerifyingWriter(OutputStream out, String encoding)
+			throws UnsupportedEncodingException {
+		super(out, encoding);
+		encoder = Charset.forName(encoding).newEncoder();
+	}
+
+	public void write(String str) throws IOException {
+		super.write(str);
+		if (!encoder.canEncode(str)) {
+			for (int i = 0; i < str.length(); i++) {
+				if (!encoder.canEncode(str.charAt(i)))
+					problemCharacters.add(new Character(str.charAt(i)));
+			}
+			couldEncodeAll = false;
+		}
+	}
+
+	public boolean couldEncodeAll() {
+		return couldEncodeAll;
+	}
+
+	public String getProblemCharacters() {
+		StringBuffer chars = new StringBuffer();
+		for (Character ch : problemCharacters) {
+			chars.append(ch.charValue());
+		}
+		return chars.toString();
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/AbstractParamLayoutFormatter.java b/src/java/net/sf/jabref/export/layout/AbstractParamLayoutFormatter.java
index 9e65014..2d9a39b 100644
--- a/src/java/net/sf/jabref/export/layout/AbstractParamLayoutFormatter.java
+++ b/src/java/net/sf/jabref/export/layout/AbstractParamLayoutFormatter.java
@@ -1,68 +1,68 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This is an abstract implementation of ParamLayoutFormatter, which provides some
- * functionality for the handling of argument strings.
- */
-public abstract class AbstractParamLayoutFormatter implements ParamLayoutFormatter {
-
-    private static char SEPARATOR = ',';
-
-    /**
-     * Parse an argument string and return the parts of the argument. The parts are
-     * separated by commas, and escaped commas are reduced to literal commas.
-     * @param arg The argument string.
-     * @return An array of strings representing the parts of the argument.
-     */
-    public static String[] parseArgument(String arg) {
-        List<String> parts = new ArrayList<String>();
-        StringBuilder current = new StringBuilder();
-        boolean escaped = false;
-        for (int i=0; i<arg.length(); i++) {
-            if ((arg.charAt(i) == SEPARATOR) && !escaped) {
-                parts.add(current.toString());
-                current = new StringBuilder();
-            } else if (arg.charAt(i) == '\\') {
-                if (escaped) {
-                    escaped = false;
-                    current.append(arg.charAt(i));
-                } else
-                    escaped = true;
-            } else if (escaped) {
-                // Handle newline and tab:
-                if (arg.charAt(i)=='n')
-                    current.append('\n');
-                else if (arg.charAt(i)=='t')
-                    current.append('\t');
-                else {
-                    if ((arg.charAt(i) != ',') && (arg.charAt(i) != '"'))
-                        current.append('\\');
-                    current.append(arg.charAt(i));
-                }
-                escaped = false;
-            } else
-                current.append(arg.charAt(i));
-        }
-        parts.add(current.toString());
-	    return parts.toArray(new String[parts.size()]);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This is an abstract implementation of ParamLayoutFormatter, which provides some
+ * functionality for the handling of argument strings.
+ */
+public abstract class AbstractParamLayoutFormatter implements ParamLayoutFormatter {
+
+    private static char SEPARATOR = ',';
+
+    /**
+     * Parse an argument string and return the parts of the argument. The parts are
+     * separated by commas, and escaped commas are reduced to literal commas.
+     * @param arg The argument string.
+     * @return An array of strings representing the parts of the argument.
+     */
+    public static String[] parseArgument(String arg) {
+        List<String> parts = new ArrayList<String>();
+        StringBuilder current = new StringBuilder();
+        boolean escaped = false;
+        for (int i=0; i<arg.length(); i++) {
+            if ((arg.charAt(i) == SEPARATOR) && !escaped) {
+                parts.add(current.toString());
+                current = new StringBuilder();
+            } else if (arg.charAt(i) == '\\') {
+                if (escaped) {
+                    escaped = false;
+                    current.append(arg.charAt(i));
+                } else
+                    escaped = true;
+            } else if (escaped) {
+                // Handle newline and tab:
+                if (arg.charAt(i)=='n')
+                    current.append('\n');
+                else if (arg.charAt(i)=='t')
+                    current.append('\t');
+                else {
+                    if ((arg.charAt(i) != ',') && (arg.charAt(i) != '"'))
+                        current.append('\\');
+                    current.append(arg.charAt(i));
+                }
+                escaped = false;
+            } else
+                current.append(arg.charAt(i));
+        }
+        parts.add(current.toString());
+	    return parts.toArray(new String[parts.size()]);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/export/layout/Layout.java b/src/java/net/sf/jabref/export/layout/Layout.java
old mode 100755
new mode 100644
index 2dad9a4..14374de
--- a/src/java/net/sf/jabref/export/layout/Layout.java
+++ b/src/java/net/sf/jabref/export/layout/Layout.java
@@ -1,226 +1,226 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout;
-
-import java.util.Vector;
-import java.util.ArrayList;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-
-
-/**
- * Main class for formatting DOCUMENT ME!
- *
- * @author $author$
- * @version $Revision$
- */
-public class Layout
-{
-    //~ Instance fields ////////////////////////////////////////////////////////
-
-    private LayoutEntry[] layoutEntries;
-
-    private ArrayList<String> missingFormatters = new ArrayList<String>();
-
-    //~ Constructors ///////////////////////////////////////////////////////////
-
-    public Layout(Vector<StringInt> parsedEntries, String classPrefix)  throws Exception
-    {
-        StringInt si;
-        Vector<LayoutEntry> tmpEntries = new Vector<LayoutEntry>(parsedEntries.size());
-
-        Vector<StringInt> blockEntries = null;
-        LayoutEntry le;
-        String blockStart = null;
-
-        for (int i = 0; i < parsedEntries.size(); i++)
-        {
-            si = parsedEntries.get(i);
-
-            if (si.i == LayoutHelper.IS_LAYOUT_TEXT)
-            {
-            }
-            else if (si.i == LayoutHelper.IS_SIMPLE_FIELD)
-            {
-            }
-            else if (si.i == LayoutHelper.IS_FIELD_START)
-            {
-                blockEntries = new Vector<StringInt>();
-                blockStart = si.s;
-            }
-            else if (si.i == LayoutHelper.IS_FIELD_END)
-            {
-                if (blockStart != null && blockEntries != null){
-                    if (blockStart.equals(si.s))
-                    {
-                        blockEntries.add(si);
-                        le = new LayoutEntry(blockEntries, classPrefix, LayoutHelper.IS_FIELD_START);
-                        tmpEntries.add(le);
-                        blockEntries = null;
-                    }
-                    else
-                    {
-                        System.out.println(blockStart+"\n"+si.s);
-                        System.out.println(
-                            "Nested field entries are not implemented !!!");
-                        Thread.dumpStack();
-                    }
-                }
-            }
-            else if (si.i == LayoutHelper.IS_GROUP_START)
-            {
-                blockEntries = new Vector<StringInt>();
-                blockStart = si.s;
-            }
-            else if (si.i == LayoutHelper.IS_GROUP_END)
-            {
-                if (blockStart != null && blockEntries != null) {
-                    if (blockStart.equals(si.s)) {
-                        blockEntries.add(si);
-                        le = new LayoutEntry(blockEntries, classPrefix,
-                            LayoutHelper.IS_GROUP_START);
-                        tmpEntries.add(le);
-                        blockEntries = null;
-                    } else {
-                        System.out
-                            .println("Nested field entries are not implemented !!!");
-                        Thread.dumpStack();
-                    }
-                }
-            }
-            else if (si.i == LayoutHelper.IS_OPTION_FIELD)
-            {
-            }
-            
-            if (blockEntries == null)
-            {
-                tmpEntries.add(new LayoutEntry(si, classPrefix));
-            }
-            else
-            {
-                blockEntries.add(si);
-            }
-        }
-
-        layoutEntries = new LayoutEntry[tmpEntries.size()];
-
-        for (int i = 0; i < tmpEntries.size(); i++)
-        {
-            layoutEntries[i] = tmpEntries.get(i);
-            // Note if one of the entries has an invalid formatter:
-            if (layoutEntries[i].isInvalidFormatter()) {
-                missingFormatters.addAll(layoutEntries[i].getInvalidFormatters());
-            }
-
-            //System.out.println(layoutEntries[i].text);
-        }
-    }
-
-    public void setPostFormatter(LayoutFormatter formatter) {
-        for (int i = 0; i < layoutEntries.length; i++) {
-            LayoutEntry layoutEntry = layoutEntries[i];
-            layoutEntry.setPostFormatter(formatter);
-        }
-    }
-    
-    public String doLayout(BibtexEntry bibtex, BibtexDatabase database) {
-    	return doLayout(bibtex, database, null);
-    }
-
-    /**
-     * Returns the processed bibtex entry. If the database argument is
-     * null, no string references will be resolved. Otherwise all valid
-     * string references will be replaced by the strings' contents. Even
-     * recursive string references are resolved.
-     */
-    public String doLayout(BibtexEntry bibtex, BibtexDatabase database, ArrayList<String> wordsToHighlight)
-    {
-        StringBuffer sb = new StringBuffer(100);
-
-        for (int i = 0; i < layoutEntries.length; i++)
-        {
-            String fieldText = layoutEntries[i].doLayout(bibtex, database, wordsToHighlight);
-
-            // 2005.05.05 M. Alver
-            // The following change means we treat null fields as "". This is to fix the
-            // problem of whitespace disappearing after missing fields. Hoping there are
-            // no side effects.
-            if (fieldText == null)
-                fieldText = "";
-            
-            sb.append(fieldText);
-        }
-
-        return sb.toString();
-    }
-    
-    /**
-     * Returns the processed text. If the database argument is
-     * null, no string references will be resolved. Otherwise all valid
-     * string references will be replaced by the strings' contents. Even
-     * recursive string references are resolved.
-     */
-    public String doLayout(BibtexDatabase database, String encoding)
-    {
-        //System.out.println("LAYOUT: " + bibtex.getId());
-        StringBuffer sb = new StringBuffer(100);
-        String fieldText;
-        boolean previousSkipped = false;
-
-        for (int i = 0; i < layoutEntries.length; i++)
-        {
-            fieldText = layoutEntries[i].doLayout(database, encoding);
-
-            if (fieldText == null) 
-            {
-                fieldText = "";
-                if (previousSkipped)
-                {
-                    int eol = 0;
-
-                    while ((eol < fieldText.length()) &&
-                            ((fieldText.charAt(eol) == '\n') ||
-                            (fieldText.charAt(eol) == '\r')))
-                    {
-                        eol++;
-                    }
-
-                    if (eol < fieldText.length())
-                    {
-                        sb.append(fieldText.substring(eol));
-                    }
-                }
-            }
-            else
-            {
-                sb.append(fieldText);
-            }
-
-            previousSkipped = false;
-        }
-
-        return sb.toString();
-    }
-    // added section - end (arudert)
-
-    public ArrayList<String> getMissingFormatters() {
-        return missingFormatters;
-    }
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout;
+
+import java.util.Vector;
+import java.util.ArrayList;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+
+
+/**
+ * Main class for formatting DOCUMENT ME!
+ *
+ * @author $author$
+ * @version $Revision$
+ */
+public class Layout
+{
+    //~ Instance fields ////////////////////////////////////////////////////////
+
+    private LayoutEntry[] layoutEntries;
+
+    private ArrayList<String> missingFormatters = new ArrayList<String>();
+
+    //~ Constructors ///////////////////////////////////////////////////////////
+
+    public Layout(Vector<StringInt> parsedEntries, String classPrefix)  throws Exception
+    {
+        StringInt si;
+        Vector<LayoutEntry> tmpEntries = new Vector<LayoutEntry>(parsedEntries.size());
+
+        Vector<StringInt> blockEntries = null;
+        LayoutEntry le;
+        String blockStart = null;
+
+        for (int i = 0; i < parsedEntries.size(); i++)
+        {
+            si = parsedEntries.get(i);
+
+            if (si.i == LayoutHelper.IS_LAYOUT_TEXT)
+            {
+            }
+            else if (si.i == LayoutHelper.IS_SIMPLE_FIELD)
+            {
+            }
+            else if (si.i == LayoutHelper.IS_FIELD_START)
+            {
+                blockEntries = new Vector<StringInt>();
+                blockStart = si.s;
+            }
+            else if (si.i == LayoutHelper.IS_FIELD_END)
+            {
+                if (blockStart != null && blockEntries != null){
+                    if (blockStart.equals(si.s))
+                    {
+                        blockEntries.add(si);
+                        le = new LayoutEntry(blockEntries, classPrefix, LayoutHelper.IS_FIELD_START);
+                        tmpEntries.add(le);
+                        blockEntries = null;
+                    }
+                    else
+                    {
+                        System.out.println(blockStart+"\n"+si.s);
+                        System.out.println(
+                            "Nested field entries are not implemented !!!");
+                        Thread.dumpStack();
+                    }
+                }
+            }
+            else if (si.i == LayoutHelper.IS_GROUP_START)
+            {
+                blockEntries = new Vector<StringInt>();
+                blockStart = si.s;
+            }
+            else if (si.i == LayoutHelper.IS_GROUP_END)
+            {
+                if (blockStart != null && blockEntries != null) {
+                    if (blockStart.equals(si.s)) {
+                        blockEntries.add(si);
+                        le = new LayoutEntry(blockEntries, classPrefix,
+                            LayoutHelper.IS_GROUP_START);
+                        tmpEntries.add(le);
+                        blockEntries = null;
+                    } else {
+                        System.out
+                            .println("Nested field entries are not implemented !!!");
+                        Thread.dumpStack();
+                    }
+                }
+            }
+            else if (si.i == LayoutHelper.IS_OPTION_FIELD)
+            {
+            }
+            
+            if (blockEntries == null)
+            {
+                tmpEntries.add(new LayoutEntry(si, classPrefix));
+            }
+            else
+            {
+                blockEntries.add(si);
+            }
+        }
+
+        layoutEntries = new LayoutEntry[tmpEntries.size()];
+
+        for (int i = 0; i < tmpEntries.size(); i++)
+        {
+            layoutEntries[i] = tmpEntries.get(i);
+            // Note if one of the entries has an invalid formatter:
+            if (layoutEntries[i].isInvalidFormatter()) {
+                missingFormatters.addAll(layoutEntries[i].getInvalidFormatters());
+            }
+
+            //System.out.println(layoutEntries[i].text);
+        }
+    }
+
+    public void setPostFormatter(LayoutFormatter formatter) {
+        for (int i = 0; i < layoutEntries.length; i++) {
+            LayoutEntry layoutEntry = layoutEntries[i];
+            layoutEntry.setPostFormatter(formatter);
+        }
+    }
+    
+    public String doLayout(BibtexEntry bibtex, BibtexDatabase database) {
+    	return doLayout(bibtex, database, null);
+    }
+
+    /**
+     * Returns the processed bibtex entry. If the database argument is
+     * null, no string references will be resolved. Otherwise all valid
+     * string references will be replaced by the strings' contents. Even
+     * recursive string references are resolved.
+     */
+    public String doLayout(BibtexEntry bibtex, BibtexDatabase database, ArrayList<String> wordsToHighlight)
+    {
+        StringBuffer sb = new StringBuffer(100);
+
+        for (int i = 0; i < layoutEntries.length; i++)
+        {
+            String fieldText = layoutEntries[i].doLayout(bibtex, database, wordsToHighlight);
+
+            // 2005.05.05 M. Alver
+            // The following change means we treat null fields as "". This is to fix the
+            // problem of whitespace disappearing after missing fields. Hoping there are
+            // no side effects.
+            if (fieldText == null)
+                fieldText = "";
+            
+            sb.append(fieldText);
+        }
+
+        return sb.toString();
+    }
+    
+    /**
+     * Returns the processed text. If the database argument is
+     * null, no string references will be resolved. Otherwise all valid
+     * string references will be replaced by the strings' contents. Even
+     * recursive string references are resolved.
+     */
+    public String doLayout(BibtexDatabase database, String encoding)
+    {
+        //System.out.println("LAYOUT: " + bibtex.getId());
+        StringBuffer sb = new StringBuffer(100);
+        String fieldText;
+        boolean previousSkipped = false;
+
+        for (int i = 0; i < layoutEntries.length; i++)
+        {
+            fieldText = layoutEntries[i].doLayout(database, encoding);
+
+            if (fieldText == null) 
+            {
+                fieldText = "";
+                if (previousSkipped)
+                {
+                    int eol = 0;
+
+                    while ((eol < fieldText.length()) &&
+                            ((fieldText.charAt(eol) == '\n') ||
+                            (fieldText.charAt(eol) == '\r')))
+                    {
+                        eol++;
+                    }
+
+                    if (eol < fieldText.length())
+                    {
+                        sb.append(fieldText.substring(eol));
+                    }
+                }
+            }
+            else
+            {
+                sb.append(fieldText);
+            }
+
+            previousSkipped = false;
+        }
+
+        return sb.toString();
+    }
+    // added section - end (arudert)
+
+    public ArrayList<String> getMissingFormatters() {
+        return missingFormatters;
+    }
+}
+///////////////////////////////////////////////////////////////////////////////
+//  END OF FILE.
+///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/layout/LayoutEntry.java b/src/java/net/sf/jabref/export/layout/LayoutEntry.java
old mode 100755
new mode 100644
index 191b563..6eff33d
--- a/src/java/net/sf/jabref/export/layout/LayoutEntry.java
+++ b/src/java/net/sf/jabref/export/layout/LayoutEntry.java
@@ -1,562 +1,562 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Vector;
-import java.util.regex.Matcher;
-
-import net.sf.jabref.*;
-import net.sf.jabref.export.layout.format.plugin.NameFormat;
-import net.sf.jabref.export.layout.format.NotFoundFormatter;
-import net.sf.jabref.plugin.PluginCore;
-import net.sf.jabref.plugin.core.JabRefPlugin;
-import net.sf.jabref.plugin.core.generated._JabRefPlugin.LayoutFormatterExtension;
-
-/**
- * DOCUMENT ME!
- * 
- * @author $author$
- * @version $Revision$
- */
-public class LayoutEntry {
-	// ~ Instance fields
-	// ////////////////////////////////////////////////////////
-
-	private LayoutFormatter[] option;
-
-    // Formatter to be run after other formatters:
-    private LayoutFormatter postFormatter = null;
-
-	private String text;
-
-	private LayoutEntry[] layoutEntries;
-
-	private int type;
-
-	private String classPrefix;
-
-    private ArrayList<String> invalidFormatter = null;
-    
-	// ~ Constructors
-	// ///////////////////////////////////////////////////////////
-
-	public LayoutEntry(StringInt si, String classPrefix_) throws Exception {
-		type = si.i;
-		classPrefix = classPrefix_;
-
-		if (si.i == LayoutHelper.IS_LAYOUT_TEXT) {
-			text = si.s;
-		} else if (si.i == LayoutHelper.IS_SIMPLE_FIELD) {
-			text = si.s.trim();
-		} else if (si.i == LayoutHelper.IS_FIELD_START) {
-		} else if (si.i == LayoutHelper.IS_FIELD_END) {
-		} else if (si.i == LayoutHelper.IS_OPTION_FIELD) {
-			Vector<String> v = new Vector<String>();
-			WSITools.tokenize(v, si.s, "\n");
-
-			if (v.size() == 1) {
-				text = v.get(0);
-			} else {
-				text = v.get(0).trim();
-
-				option = getOptionalLayout(v.get(1), classPrefix);
-                // See if there was an undefined formatter:
-                for (int i = 0; i < option.length; i++) {
-                    if (option[i] instanceof NotFoundFormatter) {
-                        String notFound = ((NotFoundFormatter)option[i]).getNotFound();
-                        
-                        if (invalidFormatter == null)
-                            invalidFormatter = new ArrayList<String>();
-                        invalidFormatter.add(notFound);
-                    }
-                }
-
-			}
-		}
-	}
-	
-	
-	public LayoutEntry(Vector<StringInt> parsedEntries, String classPrefix_, int layoutType) throws Exception {
-		classPrefix = classPrefix_;
-		String blockStart = null;
-		String blockEnd = null;
-		StringInt si;
-		Vector<StringInt> blockEntries = null;
-		Vector<LayoutEntry> tmpEntries = new Vector<LayoutEntry>();
-		LayoutEntry le;
-		si = parsedEntries.get(0);
-		blockStart = si.s;
-		si = parsedEntries.get(parsedEntries.size() - 1);
-		blockEnd = si.s;
-
-		if (!blockStart.equals(blockEnd)) {
-			System.err.println("Field start and end entry must be equal.");
-		}
-
-		type = layoutType;
-		text = si.s;
-
-		for (int i = 1; i < (parsedEntries.size() - 1); i++) {
-			si = parsedEntries.get(i);
-
-			// System.out.println("PARSED-ENTRY: "+si.s+"="+si.i);
-			if (si.i == LayoutHelper.IS_LAYOUT_TEXT) {
-			} else if (si.i == LayoutHelper.IS_SIMPLE_FIELD) {
-			} else if ((si.i == LayoutHelper.IS_FIELD_START)
-				|| (si.i == LayoutHelper.IS_GROUP_START)) {
-				blockEntries = new Vector<StringInt>();
-				blockStart = si.s;
-			} else if ((si.i == LayoutHelper.IS_FIELD_END) || (si.i == LayoutHelper.IS_GROUP_END)) {
-				if (blockStart.equals(si.s)) {
-					blockEntries.add(si);
-					if (si.i == LayoutHelper.IS_GROUP_END)
-						le = new LayoutEntry(blockEntries, classPrefix, LayoutHelper.IS_GROUP_START);
-					else
-						le = new LayoutEntry(blockEntries, classPrefix, LayoutHelper.IS_FIELD_START);
-					tmpEntries.add(le);
-					blockEntries = null;
-				} else {
-					System.out.println("Nested field entries are not implemented !!!");
-				}
-			} else if (si.i == LayoutHelper.IS_OPTION_FIELD) {
-			}
-
-			// else if (si.i == LayoutHelper.IS_OPTION_FIELD_PARAM)
-			// {
-			// }
-			if (blockEntries == null) {
-				// System.out.println("BLOCK ADD: "+si.s+"="+si.i);
-				tmpEntries.add(new LayoutEntry(si, classPrefix));
-			} else {
-				blockEntries.add(si);
-			}
-		}
-
-		layoutEntries = new LayoutEntry[tmpEntries.size()];
-
-		for (int i = 0; i < tmpEntries.size(); i++) {
-			layoutEntries[i] = tmpEntries.get(i);
-
-            // Note if one of the entries has an invalid formatter:
-            if (layoutEntries[i].isInvalidFormatter()) {
-                if (invalidFormatter == null)
-                    invalidFormatter = new ArrayList<String>(1);
-                invalidFormatter.addAll(layoutEntries[i].getInvalidFormatters());
-            }
-
-        }
-		
-	}
-
-    public void setPostFormatter(LayoutFormatter formatter) {
-        this.postFormatter = formatter;
-    }
-    
-    public String doLayout(BibtexEntry bibtex, BibtexDatabase database) {
-    	return doLayout(bibtex, database, null); 
-    }
-    
-	public String doLayout(BibtexEntry bibtex, BibtexDatabase database, ArrayList<String> wordsToHighlight ) {
-		switch (type) {
-		case LayoutHelper.IS_LAYOUT_TEXT:
-			return text;
-		case LayoutHelper.IS_SIMPLE_FIELD:
-			String value = BibtexDatabase.getResolvedField(text, bibtex, database);
-			
-            if (value == null)
-                value = "";
-            // If a post formatter has been set, call it:
-            if (postFormatter != null)
-                value = postFormatter.format(value);
-            return value;
-		case LayoutHelper.IS_FIELD_START:
-		case LayoutHelper.IS_GROUP_START: {
-            String field;
-            if (type == LayoutHelper.IS_GROUP_START) {
-                field = BibtexDatabase.getResolvedField(text, bibtex, database);
-            } else if(text.matches(".*(;|(\\&+)).*")) {
-		// split the strings along &, && or ; for AND formatter
-                String[] parts = text.split("\\s*(;|(\\&+))\\s*");
-                field = null;
-                for (int i = 0; i < parts.length; i++) {
-                    field = BibtexDatabase.getResolvedField(parts[i], bibtex, database);
-                    if (field == null)
-                        break;
-                    
-                }
-            } else { 
-		// split the strings along |, ||  for OR formatter
-                String[] parts = text.split("\\s*(\\|+)\\s*");
-                field = null;
-                for (int i = 0; i < parts.length; i++) {
-                    field = BibtexDatabase.getResolvedField(parts[i], bibtex, database);
-                    if (field != null)
-                        break;
-                }
-	    }
-            
-			if ((field == null)
-				|| ((type == LayoutHelper.IS_GROUP_START) && (field.equalsIgnoreCase(LayoutHelper
-					.getCurrentGroup())))) {
-				return null;
-			} else {
-				if (type == LayoutHelper.IS_GROUP_START) {
-					LayoutHelper.setCurrentGroup(field);
-				}
-				StringBuffer sb = new StringBuffer(100);
-				String fieldText;
-				boolean previousSkipped = false;
-
-				for (int i = 0; i < layoutEntries.length; i++) {
-					fieldText = layoutEntries[i].doLayout(bibtex, database);
-
-					if (fieldText == null) {
-						if ((i + 1) < layoutEntries.length) {
-							if (layoutEntries[i + 1].doLayout(bibtex, database).trim().length() == 0) {
-								i++;
-								previousSkipped = true;
-								continue;
-							}
-						}
-					} else {
-						
-						// if previous was skipped --> remove leading line
-						// breaks
-						if (previousSkipped) {
-							int eol = 0;
-
-							while ((eol < fieldText.length())
-								&& ((fieldText.charAt(eol) == '\n') || (fieldText.charAt(eol) == '\r'))) {
-								eol++;
-							}
-
-							if (eol < fieldText.length()) {
-								sb.append(fieldText.substring(eol));
-							}
-						} else {
-							//System.out.println("ENTRY-BLOCK: " +
-							//layoutEntries[i].doLayout(bibtex));
-							
-							/*
-							 * if fieldText is not null and the bibtexentry is marked
-							 * as a searchhit, try to highlight the searched words
-							 * 
-							*/
-			                if (bibtex.isSearchHit()) {
-			                    sb.append(highlightWords(fieldText,wordsToHighlight));
-			                }
-			                else{
-			                	sb.append(fieldText);
-			                	
-			                }
-			               
-
-						}
-					}
-
-					previousSkipped = false;
-				}
-				
-				return sb.toString();
-			}
-		}
-		case LayoutHelper.IS_FIELD_END:
-		case LayoutHelper.IS_GROUP_END:
-			return "";
-		case LayoutHelper.IS_OPTION_FIELD: {
-			String fieldEntry;
-
-			if (text.equals("bibtextype")) {
-				fieldEntry = bibtex.getType().getName();
-			} else {
-				// changed section begin - arudert
-				// resolve field (recognized by leading backslash) or text
-				String field = text.startsWith("\\") ? BibtexDatabase.getResolvedField(text.substring(1), bibtex, database)
-					: BibtexDatabase.getText(text, database);
-				// changed section end - arudert
-				if (field == null) {
-					fieldEntry = "";
-				} else {
-					fieldEntry = field;
-				}
-			}
-
-			//System.out.println("OPTION: "+option);
-			if (option != null) {
-				for (int i = 0; i < option.length; i++) {
-					fieldEntry = option[i].format(fieldEntry);
-				}
-			}
-
-            // If a post formatter has been set, call it:
-            if (postFormatter != null)
-                fieldEntry = postFormatter.format(fieldEntry);
-
-			return fieldEntry;
-		}
-        case LayoutHelper.IS_ENCODING_NAME: {
-            // Printing the encoding name is not supported in entry layouts, only
-            // in begin/end layouts. This prevents breakage if some users depend
-            // on a field called "encoding". We simply return this field instead:
-            return BibtexDatabase.getResolvedField("encoding", bibtex, database);
-        }
-        default:
-			return "";
-		}
-	}
-
-	// added section - begin (arudert)
-	/**
-	 * Do layout for general formatters (no bibtex-entry fields).
-	 * 
-	 * @param database
-	 *            Bibtex Database
-	 * @return
-	 */
-	public String doLayout(BibtexDatabase database, String encoding) {
-		if (type == LayoutHelper.IS_LAYOUT_TEXT) {
-			return text;
-		} else if (type == LayoutHelper.IS_SIMPLE_FIELD) {
-			throw new UnsupportedOperationException(
-				"bibtex entry fields not allowed in begin or end layout");
-		} else if ((type == LayoutHelper.IS_FIELD_START) || (type == LayoutHelper.IS_GROUP_START)) {
-			throw new UnsupportedOperationException(
-				"field and group starts not allowed in begin or end layout");
-		} else if ((type == LayoutHelper.IS_FIELD_END) || (type == LayoutHelper.IS_GROUP_END)) {
-			throw new UnsupportedOperationException(
-				"field and group ends not allowed in begin or end layout");
-		} else if (type == LayoutHelper.IS_OPTION_FIELD) {
-			String field = BibtexDatabase.getText(text, database);
-			if (option != null) {
-				for (int i = 0; i < option.length; i++) {
-					field = option[i].format(field);
-				}
-			}
-            // If a post formatter has been set, call it:
-            if (postFormatter != null)
-                field = postFormatter.format(field);
-
-			return field;
-		} else if (type == LayoutHelper.IS_ENCODING_NAME) {
-            // Try to translate from Java encoding name to common name:
-            String commonName = Globals.ENCODING_NAMES_LOOKUP.get(encoding);
-            return commonName != null ? commonName : encoding;
-        }
-        else if (type == LayoutHelper.IS_FILENAME) {
-            File f = Globals.prefs.databaseFile;
-            return f != null ? f.getName() : "";
-        }
-        else if (type == LayoutHelper.IS_FILEPATH) {
-            File f = Globals.prefs.databaseFile;
-            return f != null ? f.getPath() : "";
-        }
-		return "";
-	}
-
-	// added section - end (arudert)
-
-	static Map<String, LayoutFormatter> pluginLayoutFormatter;
-	
-	public static LayoutFormatter getLayoutFormatterFromPlugins(String formatterName){
-		if (pluginLayoutFormatter == null){
-			pluginLayoutFormatter = new HashMap<String, LayoutFormatter>();
-            JabRefPlugin plugin = JabRefPlugin.getInstance(PluginCore.getManager());
-			if (plugin != null){
-				for (LayoutFormatterExtension e : plugin.getLayoutFormatterExtensions()){
-					LayoutFormatter formatter = e.getLayoutFormatter();
-					String name = e.getName();
-					if (name == null)
-						name = e.getId();
-					
-					if (formatter != null){
-						pluginLayoutFormatter.put(name, formatter);
-					}
-				}
-			}
-		}
-        // We need to make a new instance of this LayoutFormatter, in case it is a
-        // parameter-accepting layout formatter:
-        if (pluginLayoutFormatter.containsKey(formatterName)) {
-            Class<? extends LayoutFormatter> c = pluginLayoutFormatter.get(formatterName).getClass();
-            try {
-                return c.getConstructor().newInstance();
-            } catch (Throwable e) {
-                e.printStackTrace();
-            }
-            return pluginLayoutFormatter.get(formatterName);
-        }
-        else return null;
-	}
-	
-	public static LayoutFormatter getLayoutFormatterByClassName(String className, String classPrefix)
-		throws Exception {
-
-		if (className.length() > 0) {
-			try {
-				try {
-					return (LayoutFormatter) Class.forName(classPrefix + className).newInstance();
-				} catch (Throwable ex2) {
-					return (LayoutFormatter) Class.forName(className).newInstance();
-				}
-			} catch (ClassNotFoundException ex) {
-				throw new Exception(Globals.lang("Formatter not found") + ": " + className);
-			} catch (InstantiationException ex) {
-				throw new Exception(className + " can not be instantiated.");
-			} catch (IllegalAccessException ex) {
-				throw new Exception(className + " can't be accessed.");
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Return an array of LayoutFormatters found in the given formatterName
-	 * string (in order of appearance).
-	 * 
-	 */
-	public static LayoutFormatter[] getOptionalLayout(String formatterName,
-			String classPrefix) throws Exception {
-
-		ArrayList<String[]> formatterStrings = Util
-				.parseMethodsCalls(formatterName);
-
-		ArrayList<LayoutFormatter> results = new ArrayList<LayoutFormatter>(
-				formatterStrings.size()); 
-
-		Map<String, String> userNameFormatter = NameFormatterTab.getNameFormatters();
-
-		for (String[] strings : formatterStrings) {
-
-            String className = strings[0].trim();
-                        
-            // Check if this is a name formatter defined by this export filter:
-            if (Globals.prefs.customExportNameFormatters != null) {
-                String contents = Globals.prefs.customExportNameFormatters.get(className);
-                if (contents != null) {
-                    NameFormat nf = new NameFormat();
-                    nf.setParameter(contents);
-                    results.add(nf);
-                    continue;
-                }
-            }
-
-            // Try to load from formatters in formatter folder
-			try {
-				LayoutFormatter f = getLayoutFormatterByClassName(className,
-						classPrefix);
-                // If this formatter accepts an argument, check if we have one, and
-                // set it if so:
-                if (f instanceof ParamLayoutFormatter) {
-                    if (strings.length >= 2)
-                        ((ParamLayoutFormatter)f).setArgument(strings[1]);
-                }
-                results.add(f);
-				continue;
-			} catch (Exception e) {
-			}
-
-			// Then check whether this is a user defined formatter
-			String formatterParameter = userNameFormatter
-					.get(className);
-
-			if (formatterParameter != null) {
-				NameFormat nf = new NameFormat();
-				nf.setParameter(formatterParameter);
-				results.add(nf);
-				continue;
-			}
-
-			// Last load from plug-ins
-			LayoutFormatter f = getLayoutFormatterFromPlugins(className);
-			if (f != null) {
-                // If this formatter accepts an argument, check if we have one, and
-                // set it if so:
-                if (f instanceof ParamLayoutFormatter) {
-                    if (strings.length >= 2) {
-                        ((ParamLayoutFormatter)f).setArgument(strings[1]);
-                    }
-                }
-				results.add(f);
-				continue;
-			}
-
-			// If not found throw exception...
-            //return new LayoutFormatter[] {new NotFoundFormatter(className)};
-            results.add(new NotFoundFormatter(className));
-			//throw new Exception(Globals.lang("Formatter not found") + ": "+ className);
-		}
-
-		return results.toArray(new LayoutFormatter[] {});
-	}
-
-
-    public boolean isInvalidFormatter() {
-        return invalidFormatter != null;
-    }
-
-    public ArrayList<String> getInvalidFormatters() {
-        return invalidFormatter;
-    }
-    
-    /** 
-     * Will return the text that was called by the method with HTML tags 
-     * to highlight each word the user has searched for and will skip
-     * the highlight process if the first Char isn't a letter or a digit.
-     * 
-     * This check is a quick hack to avoid highlighting of HTML tags
-     * It does not always work, but it does its job mostly  
-     * 
-     * @param text This is a String in which we search for different words
-     * @param toHighlight List of all words which must be highlighted
-     * 
-     * @return String that was called by the method, with HTML Tags if a word was found 
-     */
-    private String highlightWords(String text, ArrayList<String> toHighlight){
-    	if (toHighlight == null)
-    		return text;
-    	
-		Matcher matcher = Globals.getPatternForWords(toHighlight).matcher(text);
-
-    	if (Character.isLetterOrDigit(text.charAt(0))) {
-			String hlColor=Globals.highlightColor;
-			StringBuffer sb = new StringBuffer();
-			boolean foundSomething = false;
-
-			String found;
-			while (matcher.find())
-			{
-				matcher.end();
-				found = matcher.group();
-				// color the search keyword	-
-				// put first String Part and then html + word + html to a StringBuffer
-				matcher.appendReplacement(sb, "<span style=\"background-color:"+hlColor+";\">" + found + "</span>");
-				foundSomething = true;
-			}
-			
-			if (foundSomething)
-			{
-				matcher.appendTail(sb);
-				text = sb.toString();
-			}
-
-    	}
-    	return text;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Vector;
+import java.util.regex.Matcher;
+
+import net.sf.jabref.*;
+import net.sf.jabref.export.layout.format.plugin.NameFormat;
+import net.sf.jabref.export.layout.format.NotFoundFormatter;
+import net.sf.jabref.plugin.PluginCore;
+import net.sf.jabref.plugin.core.JabRefPlugin;
+import net.sf.jabref.plugin.core.generated._JabRefPlugin.LayoutFormatterExtension;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author $author$
+ * @version $Revision$
+ */
+public class LayoutEntry {
+	// ~ Instance fields
+	// ////////////////////////////////////////////////////////
+
+	private LayoutFormatter[] option;
+
+    // Formatter to be run after other formatters:
+    private LayoutFormatter postFormatter = null;
+
+	private String text;
+
+	private LayoutEntry[] layoutEntries;
+
+	private int type;
+
+	private String classPrefix;
+
+    private ArrayList<String> invalidFormatter = null;
+    
+	// ~ Constructors
+	// ///////////////////////////////////////////////////////////
+
+	public LayoutEntry(StringInt si, String classPrefix_) throws Exception {
+		type = si.i;
+		classPrefix = classPrefix_;
+
+		if (si.i == LayoutHelper.IS_LAYOUT_TEXT) {
+			text = si.s;
+		} else if (si.i == LayoutHelper.IS_SIMPLE_FIELD) {
+			text = si.s.trim();
+		} else if (si.i == LayoutHelper.IS_FIELD_START) {
+		} else if (si.i == LayoutHelper.IS_FIELD_END) {
+		} else if (si.i == LayoutHelper.IS_OPTION_FIELD) {
+			Vector<String> v = new Vector<String>();
+			WSITools.tokenize(v, si.s, "\n");
+
+			if (v.size() == 1) {
+				text = v.get(0);
+			} else {
+				text = v.get(0).trim();
+
+				option = getOptionalLayout(v.get(1), classPrefix);
+                // See if there was an undefined formatter:
+                for (int i = 0; i < option.length; i++) {
+                    if (option[i] instanceof NotFoundFormatter) {
+                        String notFound = ((NotFoundFormatter)option[i]).getNotFound();
+                        
+                        if (invalidFormatter == null)
+                            invalidFormatter = new ArrayList<String>();
+                        invalidFormatter.add(notFound);
+                    }
+                }
+
+			}
+		}
+	}
+	
+	
+	public LayoutEntry(Vector<StringInt> parsedEntries, String classPrefix_, int layoutType) throws Exception {
+		classPrefix = classPrefix_;
+		String blockStart = null;
+		String blockEnd = null;
+		StringInt si;
+		Vector<StringInt> blockEntries = null;
+		Vector<LayoutEntry> tmpEntries = new Vector<LayoutEntry>();
+		LayoutEntry le;
+		si = parsedEntries.get(0);
+		blockStart = si.s;
+		si = parsedEntries.get(parsedEntries.size() - 1);
+		blockEnd = si.s;
+
+		if (!blockStart.equals(blockEnd)) {
+			System.err.println("Field start and end entry must be equal.");
+		}
+
+		type = layoutType;
+		text = si.s;
+
+		for (int i = 1; i < (parsedEntries.size() - 1); i++) {
+			si = parsedEntries.get(i);
+
+			// System.out.println("PARSED-ENTRY: "+si.s+"="+si.i);
+			if (si.i == LayoutHelper.IS_LAYOUT_TEXT) {
+			} else if (si.i == LayoutHelper.IS_SIMPLE_FIELD) {
+			} else if ((si.i == LayoutHelper.IS_FIELD_START)
+				|| (si.i == LayoutHelper.IS_GROUP_START)) {
+				blockEntries = new Vector<StringInt>();
+				blockStart = si.s;
+			} else if ((si.i == LayoutHelper.IS_FIELD_END) || (si.i == LayoutHelper.IS_GROUP_END)) {
+				if (blockStart.equals(si.s)) {
+					blockEntries.add(si);
+					if (si.i == LayoutHelper.IS_GROUP_END)
+						le = new LayoutEntry(blockEntries, classPrefix, LayoutHelper.IS_GROUP_START);
+					else
+						le = new LayoutEntry(blockEntries, classPrefix, LayoutHelper.IS_FIELD_START);
+					tmpEntries.add(le);
+					blockEntries = null;
+				} else {
+					System.out.println("Nested field entries are not implemented !!!");
+				}
+			} else if (si.i == LayoutHelper.IS_OPTION_FIELD) {
+			}
+
+			// else if (si.i == LayoutHelper.IS_OPTION_FIELD_PARAM)
+			// {
+			// }
+			if (blockEntries == null) {
+				// System.out.println("BLOCK ADD: "+si.s+"="+si.i);
+				tmpEntries.add(new LayoutEntry(si, classPrefix));
+			} else {
+				blockEntries.add(si);
+			}
+		}
+
+		layoutEntries = new LayoutEntry[tmpEntries.size()];
+
+		for (int i = 0; i < tmpEntries.size(); i++) {
+			layoutEntries[i] = tmpEntries.get(i);
+
+            // Note if one of the entries has an invalid formatter:
+            if (layoutEntries[i].isInvalidFormatter()) {
+                if (invalidFormatter == null)
+                    invalidFormatter = new ArrayList<String>(1);
+                invalidFormatter.addAll(layoutEntries[i].getInvalidFormatters());
+            }
+
+        }
+		
+	}
+
+    public void setPostFormatter(LayoutFormatter formatter) {
+        this.postFormatter = formatter;
+    }
+    
+    public String doLayout(BibtexEntry bibtex, BibtexDatabase database) {
+    	return doLayout(bibtex, database, null); 
+    }
+    
+	public String doLayout(BibtexEntry bibtex, BibtexDatabase database, ArrayList<String> wordsToHighlight ) {
+		switch (type) {
+		case LayoutHelper.IS_LAYOUT_TEXT:
+			return text;
+		case LayoutHelper.IS_SIMPLE_FIELD:
+			String value = BibtexDatabase.getResolvedField(text, bibtex, database);
+			
+            if (value == null)
+                value = "";
+            // If a post formatter has been set, call it:
+            if (postFormatter != null)
+                value = postFormatter.format(value);
+            return value;
+		case LayoutHelper.IS_FIELD_START:
+		case LayoutHelper.IS_GROUP_START: {
+            String field;
+            if (type == LayoutHelper.IS_GROUP_START) {
+                field = BibtexDatabase.getResolvedField(text, bibtex, database);
+            } else if(text.matches(".*(;|(\\&+)).*")) {
+		// split the strings along &, && or ; for AND formatter
+                String[] parts = text.split("\\s*(;|(\\&+))\\s*");
+                field = null;
+                for (int i = 0; i < parts.length; i++) {
+                    field = BibtexDatabase.getResolvedField(parts[i], bibtex, database);
+                    if (field == null)
+                        break;
+                    
+                }
+            } else { 
+		// split the strings along |, ||  for OR formatter
+                String[] parts = text.split("\\s*(\\|+)\\s*");
+                field = null;
+                for (int i = 0; i < parts.length; i++) {
+                    field = BibtexDatabase.getResolvedField(parts[i], bibtex, database);
+                    if (field != null)
+                        break;
+                }
+	    }
+            
+			if ((field == null)
+				|| ((type == LayoutHelper.IS_GROUP_START) && (field.equalsIgnoreCase(LayoutHelper
+					.getCurrentGroup())))) {
+				return null;
+			} else {
+				if (type == LayoutHelper.IS_GROUP_START) {
+					LayoutHelper.setCurrentGroup(field);
+				}
+				StringBuffer sb = new StringBuffer(100);
+				String fieldText;
+				boolean previousSkipped = false;
+
+				for (int i = 0; i < layoutEntries.length; i++) {
+					fieldText = layoutEntries[i].doLayout(bibtex, database);
+
+					if (fieldText == null) {
+						if ((i + 1) < layoutEntries.length) {
+							if (layoutEntries[i + 1].doLayout(bibtex, database).trim().length() == 0) {
+								i++;
+								previousSkipped = true;
+								continue;
+							}
+						}
+					} else {
+						
+						// if previous was skipped --> remove leading line
+						// breaks
+						if (previousSkipped) {
+							int eol = 0;
+
+							while ((eol < fieldText.length())
+								&& ((fieldText.charAt(eol) == '\n') || (fieldText.charAt(eol) == '\r'))) {
+								eol++;
+							}
+
+							if (eol < fieldText.length()) {
+								sb.append(fieldText.substring(eol));
+							}
+						} else {
+							//System.out.println("ENTRY-BLOCK: " +
+							//layoutEntries[i].doLayout(bibtex));
+							
+							/*
+							 * if fieldText is not null and the bibtexentry is marked
+							 * as a searchhit, try to highlight the searched words
+							 * 
+							*/
+			                if (bibtex.isSearchHit()) {
+			                    sb.append(highlightWords(fieldText,wordsToHighlight));
+			                }
+			                else{
+			                	sb.append(fieldText);
+			                	
+			                }
+			               
+
+						}
+					}
+
+					previousSkipped = false;
+				}
+				
+				return sb.toString();
+			}
+		}
+		case LayoutHelper.IS_FIELD_END:
+		case LayoutHelper.IS_GROUP_END:
+			return "";
+		case LayoutHelper.IS_OPTION_FIELD: {
+			String fieldEntry;
+
+			if (text.equals("bibtextype")) {
+				fieldEntry = bibtex.getType().getName();
+			} else {
+				// changed section begin - arudert
+				// resolve field (recognized by leading backslash) or text
+				String field = text.startsWith("\\") ? BibtexDatabase.getResolvedField(text.substring(1), bibtex, database)
+					: BibtexDatabase.getText(text, database);
+				// changed section end - arudert
+				if (field == null) {
+					fieldEntry = "";
+				} else {
+					fieldEntry = field;
+				}
+			}
+
+			//System.out.println("OPTION: "+option);
+			if (option != null) {
+				for (int i = 0; i < option.length; i++) {
+					fieldEntry = option[i].format(fieldEntry);
+				}
+			}
+
+            // If a post formatter has been set, call it:
+            if (postFormatter != null)
+                fieldEntry = postFormatter.format(fieldEntry);
+
+			return fieldEntry;
+		}
+        case LayoutHelper.IS_ENCODING_NAME: {
+            // Printing the encoding name is not supported in entry layouts, only
+            // in begin/end layouts. This prevents breakage if some users depend
+            // on a field called "encoding". We simply return this field instead:
+            return BibtexDatabase.getResolvedField("encoding", bibtex, database);
+        }
+        default:
+			return "";
+		}
+	}
+
+	// added section - begin (arudert)
+	/**
+	 * Do layout for general formatters (no bibtex-entry fields).
+	 * 
+	 * @param database
+	 *            Bibtex Database
+	 * @return
+	 */
+	public String doLayout(BibtexDatabase database, String encoding) {
+		if (type == LayoutHelper.IS_LAYOUT_TEXT) {
+			return text;
+		} else if (type == LayoutHelper.IS_SIMPLE_FIELD) {
+			throw new UnsupportedOperationException(
+				"bibtex entry fields not allowed in begin or end layout");
+		} else if ((type == LayoutHelper.IS_FIELD_START) || (type == LayoutHelper.IS_GROUP_START)) {
+			throw new UnsupportedOperationException(
+				"field and group starts not allowed in begin or end layout");
+		} else if ((type == LayoutHelper.IS_FIELD_END) || (type == LayoutHelper.IS_GROUP_END)) {
+			throw new UnsupportedOperationException(
+				"field and group ends not allowed in begin or end layout");
+		} else if (type == LayoutHelper.IS_OPTION_FIELD) {
+			String field = BibtexDatabase.getText(text, database);
+			if (option != null) {
+				for (int i = 0; i < option.length; i++) {
+					field = option[i].format(field);
+				}
+			}
+            // If a post formatter has been set, call it:
+            if (postFormatter != null)
+                field = postFormatter.format(field);
+
+			return field;
+		} else if (type == LayoutHelper.IS_ENCODING_NAME) {
+            // Try to translate from Java encoding name to common name:
+            String commonName = Globals.ENCODING_NAMES_LOOKUP.get(encoding);
+            return commonName != null ? commonName : encoding;
+        }
+        else if (type == LayoutHelper.IS_FILENAME) {
+            File f = Globals.prefs.databaseFile;
+            return f != null ? f.getName() : "";
+        }
+        else if (type == LayoutHelper.IS_FILEPATH) {
+            File f = Globals.prefs.databaseFile;
+            return f != null ? f.getPath() : "";
+        }
+		return "";
+	}
+
+	// added section - end (arudert)
+
+	static Map<String, LayoutFormatter> pluginLayoutFormatter;
+	
+	public static LayoutFormatter getLayoutFormatterFromPlugins(String formatterName){
+		if (pluginLayoutFormatter == null){
+			pluginLayoutFormatter = new HashMap<String, LayoutFormatter>();
+            JabRefPlugin plugin = JabRefPlugin.getInstance(PluginCore.getManager());
+			if (plugin != null){
+				for (LayoutFormatterExtension e : plugin.getLayoutFormatterExtensions()){
+					LayoutFormatter formatter = e.getLayoutFormatter();
+					String name = e.getName();
+					if (name == null)
+						name = e.getId();
+					
+					if (formatter != null){
+						pluginLayoutFormatter.put(name, formatter);
+					}
+				}
+			}
+		}
+        // We need to make a new instance of this LayoutFormatter, in case it is a
+        // parameter-accepting layout formatter:
+        if (pluginLayoutFormatter.containsKey(formatterName)) {
+            Class<? extends LayoutFormatter> c = pluginLayoutFormatter.get(formatterName).getClass();
+            try {
+                return c.getConstructor().newInstance();
+            } catch (Throwable e) {
+                e.printStackTrace();
+            }
+            return pluginLayoutFormatter.get(formatterName);
+        }
+        else return null;
+	}
+	
+	public static LayoutFormatter getLayoutFormatterByClassName(String className, String classPrefix)
+		throws Exception {
+
+		if (className.length() > 0) {
+			try {
+				try {
+					return (LayoutFormatter) Class.forName(classPrefix + className).newInstance();
+				} catch (Throwable ex2) {
+					return (LayoutFormatter) Class.forName(className).newInstance();
+				}
+			} catch (ClassNotFoundException ex) {
+				throw new Exception(Globals.lang("Formatter not found") + ": " + className);
+			} catch (InstantiationException ex) {
+				throw new Exception(className + " can not be instantiated.");
+			} catch (IllegalAccessException ex) {
+				throw new Exception(className + " can't be accessed.");
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Return an array of LayoutFormatters found in the given formatterName
+	 * string (in order of appearance).
+	 * 
+	 */
+	public static LayoutFormatter[] getOptionalLayout(String formatterName,
+			String classPrefix) throws Exception {
+
+		ArrayList<String[]> formatterStrings = Util
+				.parseMethodsCalls(formatterName);
+
+		ArrayList<LayoutFormatter> results = new ArrayList<LayoutFormatter>(
+				formatterStrings.size()); 
+
+		Map<String, String> userNameFormatter = NameFormatterTab.getNameFormatters();
+
+		for (String[] strings : formatterStrings) {
+
+            String className = strings[0].trim();
+                        
+            // Check if this is a name formatter defined by this export filter:
+            if (Globals.prefs.customExportNameFormatters != null) {
+                String contents = Globals.prefs.customExportNameFormatters.get(className);
+                if (contents != null) {
+                    NameFormat nf = new NameFormat();
+                    nf.setParameter(contents);
+                    results.add(nf);
+                    continue;
+                }
+            }
+
+            // Try to load from formatters in formatter folder
+			try {
+				LayoutFormatter f = getLayoutFormatterByClassName(className,
+						classPrefix);
+                // If this formatter accepts an argument, check if we have one, and
+                // set it if so:
+                if (f instanceof ParamLayoutFormatter) {
+                    if (strings.length >= 2)
+                        ((ParamLayoutFormatter)f).setArgument(strings[1]);
+                }
+                results.add(f);
+				continue;
+			} catch (Exception e) {
+			}
+
+			// Then check whether this is a user defined formatter
+			String formatterParameter = userNameFormatter
+					.get(className);
+
+			if (formatterParameter != null) {
+				NameFormat nf = new NameFormat();
+				nf.setParameter(formatterParameter);
+				results.add(nf);
+				continue;
+			}
+
+			// Last load from plug-ins
+			LayoutFormatter f = getLayoutFormatterFromPlugins(className);
+			if (f != null) {
+                // If this formatter accepts an argument, check if we have one, and
+                // set it if so:
+                if (f instanceof ParamLayoutFormatter) {
+                    if (strings.length >= 2) {
+                        ((ParamLayoutFormatter)f).setArgument(strings[1]);
+                    }
+                }
+				results.add(f);
+				continue;
+			}
+
+			// If not found throw exception...
+            //return new LayoutFormatter[] {new NotFoundFormatter(className)};
+            results.add(new NotFoundFormatter(className));
+			//throw new Exception(Globals.lang("Formatter not found") + ": "+ className);
+		}
+
+		return results.toArray(new LayoutFormatter[] {});
+	}
+
+
+    public boolean isInvalidFormatter() {
+        return invalidFormatter != null;
+    }
+
+    public ArrayList<String> getInvalidFormatters() {
+        return invalidFormatter;
+    }
+    
+    /** 
+     * Will return the text that was called by the method with HTML tags 
+     * to highlight each word the user has searched for and will skip
+     * the highlight process if the first Char isn't a letter or a digit.
+     * 
+     * This check is a quick hack to avoid highlighting of HTML tags
+     * It does not always work, but it does its job mostly  
+     * 
+     * @param text This is a String in which we search for different words
+     * @param toHighlight List of all words which must be highlighted
+     * 
+     * @return String that was called by the method, with HTML Tags if a word was found 
+     */
+    private String highlightWords(String text, ArrayList<String> toHighlight){
+    	if (toHighlight == null)
+    		return text;
+    	
+		Matcher matcher = Globals.getPatternForWords(toHighlight).matcher(text);
+
+    	if (Character.isLetterOrDigit(text.charAt(0))) {
+			String hlColor=Globals.highlightColor;
+			StringBuffer sb = new StringBuffer();
+			boolean foundSomething = false;
+
+			String found;
+			while (matcher.find())
+			{
+				matcher.end();
+				found = matcher.group();
+				// color the search keyword	-
+				// put first String Part and then html + word + html to a StringBuffer
+				matcher.appendReplacement(sb, "<span style=\"background-color:"+hlColor+";\">" + found + "</span>");
+				foundSomething = true;
+			}
+			
+			if (foundSomething)
+			{
+				matcher.appendTail(sb);
+				text = sb.toString();
+			}
+
+    	}
+    	return text;
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/LayoutFormatter.java b/src/java/net/sf/jabref/export/layout/LayoutFormatter.java
old mode 100755
new mode 100644
index 356bde9..31a8202
--- a/src/java/net/sf/jabref/export/layout/LayoutFormatter.java
+++ b/src/java/net/sf/jabref/export/layout/LayoutFormatter.java
@@ -1,44 +1,44 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout;
-
-/**
- * The LayoutFormatter is used for a Filter design-pattern.
- * 
- * Implementing classes have to accept a String and returned a formatted version of it.
- * 
- * Example:
- * 
- *   "John von Neumann" => "von Neumann, John"
- *
- * @version 1.2 - Documentation CO
- */
-public interface LayoutFormatter {
-	/**
-	 * Failure Mode:
-	 * <p>
-	 * Formatters should be robust in the sense that they always return some
-	 * relevant string.
-	 * <p>
-	 * If the formatter can detect an invalid input it should return the
-	 * original string otherwise it may simply return a wrong output.
-	 * 
-	 * @param fieldText
-	 *            The text to layout.
-	 * @return The layouted text.
-	 */
-	public String format(String fieldText);
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout;
+
+/**
+ * The LayoutFormatter is used for a Filter design-pattern.
+ * 
+ * Implementing classes have to accept a String and returned a formatted version of it.
+ * 
+ * Example:
+ * 
+ *   "John von Neumann" => "von Neumann, John"
+ *
+ * @version 1.2 - Documentation CO
+ */
+public interface LayoutFormatter {
+	/**
+	 * Failure Mode:
+	 * <p>
+	 * Formatters should be robust in the sense that they always return some
+	 * relevant string.
+	 * <p>
+	 * If the formatter can detect an invalid input it should return the
+	 * original string otherwise it may simply return a wrong output.
+	 * 
+	 * @param fieldText
+	 *            The text to layout.
+	 * @return The layouted text.
+	 */
+	public String format(String fieldText);
+}
diff --git a/src/java/net/sf/jabref/export/layout/LayoutHelper.java b/src/java/net/sf/jabref/export/layout/LayoutHelper.java
old mode 100755
new mode 100644
index 3175181..e56b5b4
--- a/src/java/net/sf/jabref/export/layout/LayoutHelper.java
+++ b/src/java/net/sf/jabref/export/layout/LayoutHelper.java
@@ -1,529 +1,529 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout;
-
-import java.io.IOException;
-import java.io.PushbackReader;
-import java.io.Reader;
-import java.util.Vector;
-
-
-/**
- * Helper class to get a Layout object.
- * 
- * <code>
- * LayoutHelper helper = new LayoutHelper(...a reader...);
- * Layout layout = helper.getLayoutFromText();
- * </code>
- *
- */
-public class LayoutHelper {
-
-    public static final int IS_LAYOUT_TEXT = 1;
-    public static final int IS_SIMPLE_FIELD = 2;
-    public static final int IS_FIELD_START = 3;
-    public static final int IS_FIELD_END = 4;
-    public static final int IS_OPTION_FIELD = 5;
-    public static final int IS_GROUP_START = 6;
-    public static final int IS_GROUP_END = 7;
-    public static final int IS_ENCODING_NAME = 8;
-    public static final int IS_FILENAME = 9;
-    public static final int IS_FILEPATH = 10;
-    
-    private static String currentGroup = null;
-    
-    private PushbackReader _in;
-    private Vector<StringInt> parsedEntries = new Vector<StringInt>();
-
-    private boolean _eof = false;
-    private int line = 1;
-
-    public LayoutHelper(Reader in)
-    {
-        if (in == null)
-        {
-            throw new NullPointerException();
-        }
-
-        _in = new PushbackReader(in);
-    }
-
-    public Layout getLayoutFromText(String classPrefix) throws Exception
-    {
-        parse();
-
-        StringInt si;
-
-        for (int i = 0; i < parsedEntries.size(); i++)
-        {
-            si = parsedEntries.get(i);
-
-            if ((si.i == IS_SIMPLE_FIELD) || (si.i == IS_FIELD_START) ||
-                    (si.i == IS_FIELD_END) || (si.i == IS_GROUP_START) ||
-                    (si.i == IS_GROUP_END))
-            {
-                si.s = si.s.trim().toLowerCase();
-            }
-        }
-
-        Layout layout = new Layout(parsedEntries, classPrefix);
-
-        return layout;
-    }
-
-    
-    public static String getCurrentGroup() {
-        return currentGroup;
-    }
-    
-    public static void setCurrentGroup(String newGroup) {
-        currentGroup = newGroup;
-    }
-    
-    private String getBracketedField(int _field) throws IOException
-    {
-        StringBuffer buffer = null;
-        int c;
-        boolean start = false;
-
-        while (!_eof)
-        {
-            c = read();
-
-            //System.out.println((char)c);
-            if (c == -1)
-            {
-                _eof = true;
-
-                if (buffer != null)
-                {
-                    //myStrings.add(buffer.toString());
-                    parsedEntries.add(new StringInt(buffer.toString(), _field));
-
-                    //System.out.println("\nbracketedEOF: " + buffer.toString());
-                }
-
-                //myStrings.add(buffer.toString());
-                //System.out.println("aha: " + buffer.toString());
-                return null;
-            }
-
-            if ((c == '{') || (c == '}'))
-            {
-                if (c == '}')
-                {
-                    if (buffer != null)
-                    {
-                        //myStrings.add(buffer.toString());
-                        parsedEntries.add(new StringInt(buffer.toString(),
-                                _field));
-
-                        //System.out.println("\nbracketed: " + buffer.toString());
-                        return null;
-                    }
-                }
-                else
-                {
-                    start = true;
-                }
-            }
-            else
-            {
-                if (buffer == null)
-                {
-                    buffer = new StringBuffer(100);
-                }
-
-                if (start)
-                {
-                    if (c == '}')
-                    {
-                    }
-                    else
-                    {
-                        buffer.append((char) c);
-                    }
-                }
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     *
-     */
-    private String getBracketedOptionField(int _field)
-        throws IOException
-    {
-        StringBuffer buffer = null;
-        int c;
-        boolean start = false;
-        boolean inQuotes = false;
-        boolean doneWithOptions = false;
-        String option = null;
-        String tmp;
-
-        while (!_eof)
-        {
-            c = read();
-
-            //System.out.println((char)c);
-            if (c == -1)
-            {
-                _eof = true;
-
-                if (buffer != null)
-                {
-                    //myStrings.add(buffer.toString());
-                    if (option != null)
-                    {
-                        tmp = buffer.toString() + "\n" + option;
-                    }
-                    else
-                    {
-                        tmp = buffer.toString();
-                    }
-
-                    parsedEntries.add(new StringInt(tmp, IS_OPTION_FIELD));
-
-                    //System.out.println("\nbracketedOptionEOF: " + buffer.toString());
-                }
-
-                return null;
-            }
-            if (!inQuotes && ((c == ']') || (c == '[') || (doneWithOptions && ((c == '{') || (c == '}')))))
-            //if ((c == '{') || (c == '}') || (c == ']') || (c == '['))
-            {
-                if ((c == ']') || (doneWithOptions && (c == '}')))
-                {
-                    // changed section start - arudert
-                    // buffer may be null for parameters
-                    //if (buffer != null)
-                    //{
-                        if (c == ']' && buffer != null)
-                        {
-                    // changed section end - arudert
-                            option = buffer.toString();
-                            buffer = null;
-                            start = false;
-                            doneWithOptions = true;
-                        }
-
-                        //myStrings.add(buffer.toString());
-                        //System.out.println("\nbracketedOption: " + buffer.toString());
-                        
-                        // changed section begin - arudert
-                        // bracketed option must be followed by an (optionally empty) parameter
-                        // if empty, the parameter is set to " " (whitespace to avoid that the tokenizer that
-                        // splits the string later on ignores the empty parameter)
-                        //if (buffer != null)
-                        else if (c == '}')
-                        {
-                           String parameter = buffer == null ? " " : buffer.toString();
-                           if (option != null)
-                            {
-                                tmp = parameter + "\n" + option;
-                            }
-                            else
-                            {
-                                tmp = parameter;
-                            }
-
-                            //System.out.println("FORMAT: '"+tmp+"'");
-                            parsedEntries.add(new StringInt(tmp, IS_OPTION_FIELD));
-
-                            return null;
-                        }
-                        // changed section end - arudert
-                     // changed section start - arudert
-                     // }
-                     // changed section end - arudert
-                }
-                else
-                {
-                    start = true;
-                }
-            }
-            else if (c == '"') {
-                if (!inQuotes)
-                    inQuotes = true;
-                else inQuotes = false;
-
-                if (buffer == null)
-                    buffer = new StringBuffer(100);
-                buffer.append('"');
-            }
-            else
-            {
-                if (buffer == null)
-                {
-                    buffer = new StringBuffer(100);
-                }
-
-                if (start)
-                {
-
-                    // changed section begin - arudert
-                    // keep the backslash so we know wether this is a fieldname or an ordinary parameter
-                    //if (c != '\\')
-                    //{
-                    buffer.append((char) c);
-                    //}
-                    // changed section end - arudert
-
-                }
-            }
-        }
-
-        return null;
-    }
-
-    private Object parse() throws IOException {
-		skipWhitespace();
-
-		int c;
-
-		StringBuffer buffer = null;
-		boolean escaped = false;
-
-		while (!_eof) {
-			c = read();
-
-			if (c == -1) {
-				_eof = true;
-
-				/*
-				 * CO 2006-11-11: Added check for null, otherwise a Layout that
-				 * finishs with a curly brace throws a NPE
-				 */
-				if (buffer != null)
-					parsedEntries.add(new StringInt(buffer.toString(), IS_LAYOUT_TEXT));
-
-				return null;
-			}
-
-			if ((c == '\\') && (peek() != '\\') && !escaped) {
-				if (buffer != null) {
-					parsedEntries.add(new StringInt(buffer.toString(), IS_LAYOUT_TEXT));
-
-					buffer = null;
-				}
-
-				parseField();
-
-				// To make sure the next character, if it is a backslash,
-				// doesn't get ignored, since "previous" now holds a backslash:
-				escaped = false;
-			} else {
-				if (buffer == null) {
-					buffer = new StringBuffer(100);
-				}
-
-				if ((c != '\\') || escaped)// (previous == '\\')))
-				{
-					buffer.append((char) c);
-				}
-
-				escaped = (c == '\\') && !escaped;
-			}
-		}
-
-		return null;
-	}
-
-    /**
-	 * 
-	 */
-    private void parseField() throws IOException
-    {
-        int c;
-        StringBuffer buffer = null;
-        String name;
-
-        while (!_eof)
-        {
-            c = read();
-            // System.out.print((char)c);
-            if (c == -1)
-            {
-                _eof = true;
-            }
-
-            if (!Character.isLetter((char) c) && (c != '_') && (c != '-'))
-            {
-                unread(c);
-
-                //System.out.println("\n#" + (char) c);
-                name = buffer != null ? buffer.toString() : "";
-
-                //System.out.println("NAME:" + name);
-                buffer = null;
-
-                if (name.charAt(0) == 'b')
-                {
-                    if (name.equalsIgnoreCase("begin"))
-                    {
-                        // get field name
-                        getBracketedField(IS_FIELD_START);
-
-                        return;
-                    }
-                    else if (name.equalsIgnoreCase("begingroup"))
-                    {
-                        // get field name
-                        getBracketedField(IS_GROUP_START);
-                        return;                    
-                    }
-                }
-                else if (name.charAt(0) == 'f')
-                {
-                    if (name.equalsIgnoreCase("format"))
-                    {
-                        if (c == '[')
-                        {
-                            // get format parameter
-                            // get field name
-                            getBracketedOptionField(IS_OPTION_FIELD);
-
-                            return;
-                        }
-                        else
-                        {
-                            // get field name
-                            getBracketedField(IS_OPTION_FIELD);
-
-                            return;
-                        }
-                    }
-                    else if (name.equalsIgnoreCase("filename"))
-                    {
-                        // Print the name of the database bib file.
-                        // This is only supported in begin/end layouts, not in
-                        // entry layouts.
-                        parsedEntries.add(new StringInt(name, IS_FILENAME));
-                        return;
-                    }
-                    else if (name.equalsIgnoreCase("filepath"))
-                    {
-                        // Print the full path of the database bib file.
-                        // This is only supported in begin/end layouts, not in
-                        // entry layouts.
-                        parsedEntries.add(new StringInt(name, IS_FILEPATH));
-                        return;
-                    }
-                }
-                else if (name.charAt(0) == 'e')
-                {
-                    if (name.equalsIgnoreCase("end"))
-                    {
-                        // get field name
-                        getBracketedField(IS_FIELD_END);
-                        return;
-                    }
-                    else if (name.equalsIgnoreCase("endgroup"))
-                    {
-                        // get field name
-                        getBracketedField(IS_GROUP_END);
-                        return;
-                    }
-                    else if (name.equalsIgnoreCase("encoding"))
-                    {
-                        // Print the name of the current encoding used for export.
-                        // This is only supported in begin/end layouts, not in
-                        // entry layouts.
-                        parsedEntries.add(new StringInt(name, IS_ENCODING_NAME));
-                        return;
-                    }
-                }
-
-                // for all other cases
-                parsedEntries.add(new StringInt(name, IS_SIMPLE_FIELD));
-
-                //System.out.println(name);
-                return;
-            }
-            else
-            {
-                if (buffer == null)
-                {
-                    buffer = new StringBuffer(100);
-                }
-
-                buffer.append((char) c);
-            }
-        }
-    }
-
-    private int peek() throws IOException
-    {
-        int c = read();
-        unread(c);
-
-        return c;
-    }
-
-    private int read() throws IOException
-    {
-        int c = _in.read();
-
-        if (c == '\n')
-        {
-            line++;
-        }
-
-        //System.out.print((char) c);
-        return c;
-    }
-
-    private void skipWhitespace() throws IOException
-    {
-        int c;
-
-        while (true)
-        {
-            c = read();
-
-            if ((c == -1) || (c == 65535))
-            {
-                _eof = true;
-
-                return;
-            }
-
-            if (Character.isWhitespace((char) c))
-            {
-                continue;
-            }
-            else
-            {
-                unread(c);
-            }
-
-            break;
-        }
-    }
-
-    private void unread(int c) throws IOException
-    {
-        if (c == '\n')
-        {
-            line--;
-        }
-
-        _in.unread(c);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout;
+
+import java.io.IOException;
+import java.io.PushbackReader;
+import java.io.Reader;
+import java.util.Vector;
+
+
+/**
+ * Helper class to get a Layout object.
+ * 
+ * <code>
+ * LayoutHelper helper = new LayoutHelper(...a reader...);
+ * Layout layout = helper.getLayoutFromText();
+ * </code>
+ *
+ */
+public class LayoutHelper {
+
+    public static final int IS_LAYOUT_TEXT = 1;
+    public static final int IS_SIMPLE_FIELD = 2;
+    public static final int IS_FIELD_START = 3;
+    public static final int IS_FIELD_END = 4;
+    public static final int IS_OPTION_FIELD = 5;
+    public static final int IS_GROUP_START = 6;
+    public static final int IS_GROUP_END = 7;
+    public static final int IS_ENCODING_NAME = 8;
+    public static final int IS_FILENAME = 9;
+    public static final int IS_FILEPATH = 10;
+    
+    private static String currentGroup = null;
+    
+    private PushbackReader _in;
+    private Vector<StringInt> parsedEntries = new Vector<StringInt>();
+
+    private boolean _eof = false;
+    private int line = 1;
+
+    public LayoutHelper(Reader in)
+    {
+        if (in == null)
+        {
+            throw new NullPointerException();
+        }
+
+        _in = new PushbackReader(in);
+    }
+
+    public Layout getLayoutFromText(String classPrefix) throws Exception
+    {
+        parse();
+
+        StringInt si;
+
+        for (int i = 0; i < parsedEntries.size(); i++)
+        {
+            si = parsedEntries.get(i);
+
+            if ((si.i == IS_SIMPLE_FIELD) || (si.i == IS_FIELD_START) ||
+                    (si.i == IS_FIELD_END) || (si.i == IS_GROUP_START) ||
+                    (si.i == IS_GROUP_END))
+            {
+                si.s = si.s.trim().toLowerCase();
+            }
+        }
+
+        Layout layout = new Layout(parsedEntries, classPrefix);
+
+        return layout;
+    }
+
+    
+    public static String getCurrentGroup() {
+        return currentGroup;
+    }
+    
+    public static void setCurrentGroup(String newGroup) {
+        currentGroup = newGroup;
+    }
+    
+    private String getBracketedField(int _field) throws IOException
+    {
+        StringBuffer buffer = null;
+        int c;
+        boolean start = false;
+
+        while (!_eof)
+        {
+            c = read();
+
+            //System.out.println((char)c);
+            if (c == -1)
+            {
+                _eof = true;
+
+                if (buffer != null)
+                {
+                    //myStrings.add(buffer.toString());
+                    parsedEntries.add(new StringInt(buffer.toString(), _field));
+
+                    //System.out.println("\nbracketedEOF: " + buffer.toString());
+                }
+
+                //myStrings.add(buffer.toString());
+                //System.out.println("aha: " + buffer.toString());
+                return null;
+            }
+
+            if ((c == '{') || (c == '}'))
+            {
+                if (c == '}')
+                {
+                    if (buffer != null)
+                    {
+                        //myStrings.add(buffer.toString());
+                        parsedEntries.add(new StringInt(buffer.toString(),
+                                _field));
+
+                        //System.out.println("\nbracketed: " + buffer.toString());
+                        return null;
+                    }
+                }
+                else
+                {
+                    start = true;
+                }
+            }
+            else
+            {
+                if (buffer == null)
+                {
+                    buffer = new StringBuffer(100);
+                }
+
+                if (start)
+                {
+                    if (c == '}')
+                    {
+                    }
+                    else
+                    {
+                        buffer.append((char) c);
+                    }
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     *
+     */
+    private String getBracketedOptionField(int _field)
+        throws IOException
+    {
+        StringBuffer buffer = null;
+        int c;
+        boolean start = false;
+        boolean inQuotes = false;
+        boolean doneWithOptions = false;
+        String option = null;
+        String tmp;
+
+        while (!_eof)
+        {
+            c = read();
+
+            //System.out.println((char)c);
+            if (c == -1)
+            {
+                _eof = true;
+
+                if (buffer != null)
+                {
+                    //myStrings.add(buffer.toString());
+                    if (option != null)
+                    {
+                        tmp = buffer.toString() + "\n" + option;
+                    }
+                    else
+                    {
+                        tmp = buffer.toString();
+                    }
+
+                    parsedEntries.add(new StringInt(tmp, IS_OPTION_FIELD));
+
+                    //System.out.println("\nbracketedOptionEOF: " + buffer.toString());
+                }
+
+                return null;
+            }
+            if (!inQuotes && ((c == ']') || (c == '[') || (doneWithOptions && ((c == '{') || (c == '}')))))
+            //if ((c == '{') || (c == '}') || (c == ']') || (c == '['))
+            {
+                if ((c == ']') || (doneWithOptions && (c == '}')))
+                {
+                    // changed section start - arudert
+                    // buffer may be null for parameters
+                    //if (buffer != null)
+                    //{
+                        if (c == ']' && buffer != null)
+                        {
+                    // changed section end - arudert
+                            option = buffer.toString();
+                            buffer = null;
+                            start = false;
+                            doneWithOptions = true;
+                        }
+
+                        //myStrings.add(buffer.toString());
+                        //System.out.println("\nbracketedOption: " + buffer.toString());
+                        
+                        // changed section begin - arudert
+                        // bracketed option must be followed by an (optionally empty) parameter
+                        // if empty, the parameter is set to " " (whitespace to avoid that the tokenizer that
+                        // splits the string later on ignores the empty parameter)
+                        //if (buffer != null)
+                        else if (c == '}')
+                        {
+                           String parameter = buffer == null ? " " : buffer.toString();
+                           if (option != null)
+                            {
+                                tmp = parameter + "\n" + option;
+                            }
+                            else
+                            {
+                                tmp = parameter;
+                            }
+
+                            //System.out.println("FORMAT: '"+tmp+"'");
+                            parsedEntries.add(new StringInt(tmp, IS_OPTION_FIELD));
+
+                            return null;
+                        }
+                        // changed section end - arudert
+                     // changed section start - arudert
+                     // }
+                     // changed section end - arudert
+                }
+                else
+                {
+                    start = true;
+                }
+            }
+            else if (c == '"') {
+                if (!inQuotes)
+                    inQuotes = true;
+                else inQuotes = false;
+
+                if (buffer == null)
+                    buffer = new StringBuffer(100);
+                buffer.append('"');
+            }
+            else
+            {
+                if (buffer == null)
+                {
+                    buffer = new StringBuffer(100);
+                }
+
+                if (start)
+                {
+
+                    // changed section begin - arudert
+                    // keep the backslash so we know wether this is a fieldname or an ordinary parameter
+                    //if (c != '\\')
+                    //{
+                    buffer.append((char) c);
+                    //}
+                    // changed section end - arudert
+
+                }
+            }
+        }
+
+        return null;
+    }
+
+    private Object parse() throws IOException {
+		skipWhitespace();
+
+		int c;
+
+		StringBuffer buffer = null;
+		boolean escaped = false;
+
+		while (!_eof) {
+			c = read();
+
+			if (c == -1) {
+				_eof = true;
+
+				/*
+				 * CO 2006-11-11: Added check for null, otherwise a Layout that
+				 * finishs with a curly brace throws a NPE
+				 */
+				if (buffer != null)
+					parsedEntries.add(new StringInt(buffer.toString(), IS_LAYOUT_TEXT));
+
+				return null;
+			}
+
+			if ((c == '\\') && (peek() != '\\') && !escaped) {
+				if (buffer != null) {
+					parsedEntries.add(new StringInt(buffer.toString(), IS_LAYOUT_TEXT));
+
+					buffer = null;
+				}
+
+				parseField();
+
+				// To make sure the next character, if it is a backslash,
+				// doesn't get ignored, since "previous" now holds a backslash:
+				escaped = false;
+			} else {
+				if (buffer == null) {
+					buffer = new StringBuffer(100);
+				}
+
+				if ((c != '\\') || escaped)// (previous == '\\')))
+				{
+					buffer.append((char) c);
+				}
+
+				escaped = (c == '\\') && !escaped;
+			}
+		}
+
+		return null;
+	}
+
+    /**
+	 * 
+	 */
+    private void parseField() throws IOException
+    {
+        int c;
+        StringBuffer buffer = null;
+        String name;
+
+        while (!_eof)
+        {
+            c = read();
+            // System.out.print((char)c);
+            if (c == -1)
+            {
+                _eof = true;
+            }
+
+            if (!Character.isLetter((char) c) && (c != '_') && (c != '-'))
+            {
+                unread(c);
+
+                //System.out.println("\n#" + (char) c);
+                name = buffer != null ? buffer.toString() : "";
+
+                //System.out.println("NAME:" + name);
+                buffer = null;
+
+                if (name.charAt(0) == 'b')
+                {
+                    if (name.equalsIgnoreCase("begin"))
+                    {
+                        // get field name
+                        getBracketedField(IS_FIELD_START);
+
+                        return;
+                    }
+                    else if (name.equalsIgnoreCase("begingroup"))
+                    {
+                        // get field name
+                        getBracketedField(IS_GROUP_START);
+                        return;                    
+                    }
+                }
+                else if (name.charAt(0) == 'f')
+                {
+                    if (name.equalsIgnoreCase("format"))
+                    {
+                        if (c == '[')
+                        {
+                            // get format parameter
+                            // get field name
+                            getBracketedOptionField(IS_OPTION_FIELD);
+
+                            return;
+                        }
+                        else
+                        {
+                            // get field name
+                            getBracketedField(IS_OPTION_FIELD);
+
+                            return;
+                        }
+                    }
+                    else if (name.equalsIgnoreCase("filename"))
+                    {
+                        // Print the name of the database bib file.
+                        // This is only supported in begin/end layouts, not in
+                        // entry layouts.
+                        parsedEntries.add(new StringInt(name, IS_FILENAME));
+                        return;
+                    }
+                    else if (name.equalsIgnoreCase("filepath"))
+                    {
+                        // Print the full path of the database bib file.
+                        // This is only supported in begin/end layouts, not in
+                        // entry layouts.
+                        parsedEntries.add(new StringInt(name, IS_FILEPATH));
+                        return;
+                    }
+                }
+                else if (name.charAt(0) == 'e')
+                {
+                    if (name.equalsIgnoreCase("end"))
+                    {
+                        // get field name
+                        getBracketedField(IS_FIELD_END);
+                        return;
+                    }
+                    else if (name.equalsIgnoreCase("endgroup"))
+                    {
+                        // get field name
+                        getBracketedField(IS_GROUP_END);
+                        return;
+                    }
+                    else if (name.equalsIgnoreCase("encoding"))
+                    {
+                        // Print the name of the current encoding used for export.
+                        // This is only supported in begin/end layouts, not in
+                        // entry layouts.
+                        parsedEntries.add(new StringInt(name, IS_ENCODING_NAME));
+                        return;
+                    }
+                }
+
+                // for all other cases
+                parsedEntries.add(new StringInt(name, IS_SIMPLE_FIELD));
+
+                //System.out.println(name);
+                return;
+            }
+            else
+            {
+                if (buffer == null)
+                {
+                    buffer = new StringBuffer(100);
+                }
+
+                buffer.append((char) c);
+            }
+        }
+    }
+
+    private int peek() throws IOException
+    {
+        int c = read();
+        unread(c);
+
+        return c;
+    }
+
+    private int read() throws IOException
+    {
+        int c = _in.read();
+
+        if (c == '\n')
+        {
+            line++;
+        }
+
+        //System.out.print((char) c);
+        return c;
+    }
+
+    private void skipWhitespace() throws IOException
+    {
+        int c;
+
+        while (true)
+        {
+            c = read();
+
+            if ((c == -1) || (c == 65535))
+            {
+                _eof = true;
+
+                return;
+            }
+
+            if (Character.isWhitespace((char) c))
+            {
+                continue;
+            }
+            else
+            {
+                unread(c);
+            }
+
+            break;
+        }
+    }
+
+    private void unread(int c) throws IOException
+    {
+        if (c == '\n')
+        {
+            line--;
+        }
+
+        _in.unread(c);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/ParamLayoutFormatter.java b/src/java/net/sf/jabref/export/layout/ParamLayoutFormatter.java
index 8d724c2..a7fa5f0 100644
--- a/src/java/net/sf/jabref/export/layout/ParamLayoutFormatter.java
+++ b/src/java/net/sf/jabref/export/layout/ParamLayoutFormatter.java
@@ -1,37 +1,37 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * This interface extends LayoutFormatter, adding the capability of taking
- * and additional parameter. Such a parameter is specified in the layout file
- * by the following construct: \format[MyFormatter(argument){\field}
- * If and only if MyFormatter is a class that implements ParamLayoutFormatter,
- * it will be set up with the argument given in the parenthesis by way of the
- * method setArgument(String). If no argument is given, the formatter will be
- * invoked without the setArgument() method being called first.
- */
-public interface ParamLayoutFormatter extends LayoutFormatter {
-
-    /**
-     * Method for setting the argument of this formatter.
-     * @param arg A String argument.
-     */
-    public void setArgument(String arg);
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * This interface extends LayoutFormatter, adding the capability of taking
+ * and additional parameter. Such a parameter is specified in the layout file
+ * by the following construct: \format[MyFormatter(argument){\field}
+ * If and only if MyFormatter is a class that implements ParamLayoutFormatter,
+ * it will be set up with the argument given in the parenthesis by way of the
+ * method setArgument(String). If no argument is given, the formatter will be
+ * invoked without the setArgument() method being called first.
+ */
+public interface ParamLayoutFormatter extends LayoutFormatter {
+
+    /**
+     * Method for setting the argument of this formatter.
+     * @param arg A String argument.
+     */
+    public void setArgument(String arg);
+
+}
diff --git a/src/java/net/sf/jabref/export/layout/StringInt.java b/src/java/net/sf/jabref/export/layout/StringInt.java
old mode 100755
new mode 100644
index 2d7b305..e80d375
--- a/src/java/net/sf/jabref/export/layout/StringInt.java
+++ b/src/java/net/sf/jabref/export/layout/StringInt.java
@@ -1,92 +1,92 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-///////////////////////////////////////////////////////////////////////////////
-//  Filename: $RCSfile$
-//  Purpose:  Atom representation.
-//  Language: Java
-//  Compiler: JDK 1.4
-//  Authors:  Joerg K. Wegner
-//  Version:  $Revision$
-//            $Date$
-//            $Author$
-//
-//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
-//
-//  This program is free software; 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.
-///////////////////////////////////////////////////////////////////////////////
-package net.sf.jabref.export.layout;
-
-
-/*==========================================================================*
- * IMPORTS
- *========================================================================== */
-/*==========================================================================*
- * CLASS DECLARATION
- *========================================================================== */
-
-/**
- * String and integer value.
- *
- * @author     wegnerj
- * @license GPL
- * @cvsversion    $Revision$, $Date$
- */
-public class StringInt implements java.io.Serializable
-{
-    //~ Instance fields ////////////////////////////////////////////////////////
-
-    /*-------------------------------------------------------------------------*
-     * public member variables
-     *------------------------------------------------------------------------- */
-
-    /**
-     *  Description of the Field
-     */
-    public String s;
-
-    /**
-     *  Description of the Field
-     */
-    public int i;
-
-    //~ Constructors ///////////////////////////////////////////////////////////
-
-    /*-------------------------------------------------------------------------*
-     * constructor
-     *------------------------------------------------------------------------- */
-
-    /**
-     *  Constructor for the StringString object
-     *
-     * @param  _s1  Description of the Parameter
-     * @param  _s2  Description of the Parameter
-     */
-    public StringInt(String _s, int _i)
-    {
-        s = _s;
-        i = _i;
-    }
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile$
+//  Purpose:  Atom representation.
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Authors:  Joerg K. Wegner
+//  Version:  $Revision$
+//            $Date$
+//            $Author$
+//
+//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
+//
+//  This program is free software; 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.
+///////////////////////////////////////////////////////////////////////////////
+package net.sf.jabref.export.layout;
+
+
+/*==========================================================================*
+ * IMPORTS
+ *========================================================================== */
+/*==========================================================================*
+ * CLASS DECLARATION
+ *========================================================================== */
+
+/**
+ * String and integer value.
+ *
+ * @author     wegnerj
+ * @license GPL
+ * @cvsversion    $Revision$, $Date$
+ */
+public class StringInt implements java.io.Serializable
+{
+    //~ Instance fields ////////////////////////////////////////////////////////
+
+    /*-------------------------------------------------------------------------*
+     * public member variables
+     *------------------------------------------------------------------------- */
+
+    /**
+     *  Description of the Field
+     */
+    public String s;
+
+    /**
+     *  Description of the Field
+     */
+    public int i;
+
+    //~ Constructors ///////////////////////////////////////////////////////////
+
+    /*-------------------------------------------------------------------------*
+     * constructor
+     *------------------------------------------------------------------------- */
+
+    /**
+     *  Constructor for the StringString object
+     *
+     * @param  _s1  Description of the Parameter
+     * @param  _s2  Description of the Parameter
+     */
+    public StringInt(String _s, int _i)
+    {
+        s = _s;
+        i = _i;
+    }
+}
+///////////////////////////////////////////////////////////////////////////////
+//  END OF FILE.
+///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/layout/WSITools.java b/src/java/net/sf/jabref/export/layout/WSITools.java
old mode 100755
new mode 100644
index b98b6c1..a52d629
--- a/src/java/net/sf/jabref/export/layout/WSITools.java
+++ b/src/java/net/sf/jabref/export/layout/WSITools.java
@@ -1,139 +1,139 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-///////////////////////////////////////////////////////////////////////////////
-//  Filename: $RCSfile$
-//  Purpose:  Atom representation.
-//  Language: Java
-//  Compiler: JDK 1.4
-//  Authors:  Joerg K. Wegner
-//  Version:  $Revision$
-//            $Date$
-//            $Author$
-//
-//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
-//
-//  This program is free software; 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.
-///////////////////////////////////////////////////////////////////////////////
-package net.sf.jabref.export.layout;
-
-
-/*==========================================================================*
- * IMPORTS
- *========================================================================== */
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-
-/*==========================================================================*
- * CLASS DECLARATION
- *========================================================================== */
-
-/**
- * JabRef helper methods.
- *
- * @author     wegnerj
- * @license GPL
- * @cvsversion    $Revision$, $Date$
- */
-public class WSITools
-{
-    //~ Constructors ///////////////////////////////////////////////////////////
-
-    private WSITools()
-    {
-    }
-
-    //~ Methods ////////////////////////////////////////////////////////////////
-
-    /**
-     * @param  vcr  {@link java.util.Vector} of <tt>String</tt>
-     * @param  buf  Description of the Parameter
-     * @return      Description of the Return Value
-     */
-    public static boolean tokenize(Vector<String> vcr, String buf)
-    {
-        return tokenize(vcr, buf, " \t\n");
-    }
-
-    /**
-     * @param  vcr       {@link java.util.Vector} of <tt>String</tt>
-     * @param  buf       Description of the Parameter
-     * @param  delimstr  Description of the Parameter
-     * @return           Description of the Return Value
-     */
-    public static boolean tokenize(Vector<String> vcr, String buf, String delimstr)
-    {
-        vcr.clear();
-        buf = buf + "\n";
-
-        StringTokenizer st = new StringTokenizer(buf, delimstr);
-
-        while (st.hasMoreTokens())
-        {
-            vcr.add(st.nextToken());
-        }
-
-        return true;
-    }
-
-    /**
-     * @param  vcr       {@link java.util.Vector} of <tt>String</tt>
-     * @param  s         Description of the Parameter
-     * @param  delimstr  Description of the Parameter
-     * @param  limit     Description of the Parameter
-     * @return           Description of the Return Value
-     */
-    public static boolean tokenize(Vector<String> vcr, String s, String delimstr,
-        int limit)
-    {
-        System.out.println("Warning: tokenize \"" + s + "\"");
-        vcr.clear();
-        s = s + "\n";
-
-        int endpos = 0;
-        int matched = 0;
-
-        StringTokenizer st = new StringTokenizer(s, delimstr);
-
-        while (st.hasMoreTokens())
-        {
-            String tmp = st.nextToken();
-            vcr.add(tmp);
-
-            matched++;
-
-            if (matched == limit)
-            {
-                endpos = s.lastIndexOf(tmp);
-                vcr.add(s.substring(endpos + tmp.length()));
-
-                break;
-            }
-        }
-
-        return true;
-    }
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile$
+//  Purpose:  Atom representation.
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Authors:  Joerg K. Wegner
+//  Version:  $Revision$
+//            $Date$
+//            $Author$
+//
+//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
+//
+//  This program is free software; 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.
+///////////////////////////////////////////////////////////////////////////////
+package net.sf.jabref.export.layout;
+
+
+/*==========================================================================*
+ * IMPORTS
+ *========================================================================== */
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+
+/*==========================================================================*
+ * CLASS DECLARATION
+ *========================================================================== */
+
+/**
+ * JabRef helper methods.
+ *
+ * @author     wegnerj
+ * @license GPL
+ * @cvsversion    $Revision$, $Date$
+ */
+public class WSITools
+{
+    //~ Constructors ///////////////////////////////////////////////////////////
+
+    private WSITools()
+    {
+    }
+
+    //~ Methods ////////////////////////////////////////////////////////////////
+
+    /**
+     * @param  vcr  {@link java.util.Vector} of <tt>String</tt>
+     * @param  buf  Description of the Parameter
+     * @return      Description of the Return Value
+     */
+    public static boolean tokenize(Vector<String> vcr, String buf)
+    {
+        return tokenize(vcr, buf, " \t\n");
+    }
+
+    /**
+     * @param  vcr       {@link java.util.Vector} of <tt>String</tt>
+     * @param  buf       Description of the Parameter
+     * @param  delimstr  Description of the Parameter
+     * @return           Description of the Return Value
+     */
+    public static boolean tokenize(Vector<String> vcr, String buf, String delimstr)
+    {
+        vcr.clear();
+        buf = buf + "\n";
+
+        StringTokenizer st = new StringTokenizer(buf, delimstr);
+
+        while (st.hasMoreTokens())
+        {
+            vcr.add(st.nextToken());
+        }
+
+        return true;
+    }
+
+    /**
+     * @param  vcr       {@link java.util.Vector} of <tt>String</tt>
+     * @param  s         Description of the Parameter
+     * @param  delimstr  Description of the Parameter
+     * @param  limit     Description of the Parameter
+     * @return           Description of the Return Value
+     */
+    public static boolean tokenize(Vector<String> vcr, String s, String delimstr,
+        int limit)
+    {
+        System.out.println("Warning: tokenize \"" + s + "\"");
+        vcr.clear();
+        s = s + "\n";
+
+        int endpos = 0;
+        int matched = 0;
+
+        StringTokenizer st = new StringTokenizer(s, delimstr);
+
+        while (st.hasMoreTokens())
+        {
+            String tmp = st.nextToken();
+            vcr.add(tmp);
+
+            matched++;
+
+            if (matched == limit)
+            {
+                endpos = s.lastIndexOf(tmp);
+                vcr.add(s.substring(endpos + tmp.length()));
+
+                break;
+            }
+        }
+
+        return true;
+    }
+}
+///////////////////////////////////////////////////////////////////////////////
+//  END OF FILE.
+///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorAbbreviator.java b/src/java/net/sf/jabref/export/layout/format/AuthorAbbreviator.java
index 8c39a42..483799e 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorAbbreviator.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorAbbreviator.java
@@ -1,40 +1,40 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-/**
- * Duplicate of AuthorLastFirstAbbreviator.
- * 
- * @see AuthorLastFirstAbbreviator
- * 
- * @author Carlos Silla
- */
-public class AuthorAbbreviator implements LayoutFormatter {
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see net.sf.jabref.export.layout.LayoutFormatter#format(java.lang.String)
-	 */
-	public String format(String fieldText) {
-        AuthorList list = AuthorList.getAuthorList(fieldText);
-        return list.getAuthorsLastFirstAnds(true);
-        
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ * Duplicate of AuthorLastFirstAbbreviator.
+ * 
+ * @see AuthorLastFirstAbbreviator
+ * 
+ * @author Carlos Silla
+ */
+public class AuthorAbbreviator implements LayoutFormatter {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see net.sf.jabref.export.layout.LayoutFormatter#format(java.lang.String)
+	 */
+	public String format(String fieldText) {
+        AuthorList list = AuthorList.getAuthorList(fieldText);
+        return list.getAuthorsLastFirstAnds(true);
+        
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorAndsCommaReplacer.java b/src/java/net/sf/jabref/export/layout/format/AuthorAndsCommaReplacer.java
index 21b1d7d..906cdf9 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorAndsCommaReplacer.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorAndsCommaReplacer.java
@@ -1,59 +1,59 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Replaces and's for & (in case of two authors) and , (in case
- * of more than two authors).
- *
- * @author Carlos Silla
- */
-public class AuthorAndsCommaReplacer implements LayoutFormatter {
-
-    /* (non-Javadoc)
-	 * @see net.sf.jabref.export.layout.LayoutFormatter#format(java.lang.String)
-	 */
-	public String format(String fieldText) {
-
-		String[] authors = fieldText.split(" and ");
-		String s;
-
-		switch(authors.length) {
-			case 1:
-				//Does nothing;
-				s = authors[0];
-			break;
-			case 2:
-				s = authors[0] + " & " + authors[1];
-			break;
-			default:
-				int i = 0, x = authors.length;
-				StringBuffer sb = new StringBuffer();
-
-				for(i=0;i<x-2;i++) {
-                    sb.append(authors[i]).append(", ");
-				}
-                sb.append(authors[i]).append(" & ").append(authors[i + 1]);
-				s = new String(sb);
-			break;
-		}
-
-        return s;
-
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Replaces and's for & (in case of two authors) and , (in case
+ * of more than two authors).
+ *
+ * @author Carlos Silla
+ */
+public class AuthorAndsCommaReplacer implements LayoutFormatter {
+
+    /* (non-Javadoc)
+	 * @see net.sf.jabref.export.layout.LayoutFormatter#format(java.lang.String)
+	 */
+	public String format(String fieldText) {
+
+		String[] authors = fieldText.split(" and ");
+		String s;
+
+		switch(authors.length) {
+			case 1:
+				//Does nothing;
+				s = authors[0];
+			break;
+			case 2:
+				s = authors[0] + " & " + authors[1];
+			break;
+			default:
+				int i = 0, x = authors.length;
+				StringBuffer sb = new StringBuffer();
+
+				for(i=0;i<x-2;i++) {
+                    sb.append(authors[i]).append(", ");
+				}
+                sb.append(authors[i]).append(" & ").append(authors[i + 1]);
+				s = new String(sb);
+			break;
+		}
+
+        return s;
+
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorAndsReplacer.java b/src/java/net/sf/jabref/export/layout/format/AuthorAndsReplacer.java
index 5f661d2..5efb831 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorAndsReplacer.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorAndsReplacer.java
@@ -1,61 +1,61 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Replaces and's for & (in case of two authors) and ; (in case
- * of more than two authors).
- * 
- * @author Carlos Silla
- */
-public class AuthorAndsReplacer implements LayoutFormatter {
-
-	/* (non-Javadoc)
-	 * @see net.sf.jabref.export.layout.LayoutFormatter#format(java.lang.String)
-	 */
-	public String format(String fieldText) {
-
-        if (fieldText == null)
-            return null;
-        String[] authors = fieldText.split(" and ");
-		String s;
-	
-		switch(authors.length) {
-			case 1:
-				//Does nothing;
-				s = authors[0];
-			break;
-			case 2:
-				s = authors[0] + " & " + authors[1];
-			break;
-			default:
-				int i = 0, x = authors.length;
-				StringBuffer sb = new StringBuffer();
-				
-				for(i=0;i<x-2;i++) {
-                    sb.append(authors[i]).append("; ");
-				}
-                sb.append(authors[i]).append(" & ").append(authors[i + 1]);
-				s = new String(sb);				
-			break;		
-		}
-		
-		return s;
- 
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Replaces and's for & (in case of two authors) and ; (in case
+ * of more than two authors).
+ * 
+ * @author Carlos Silla
+ */
+public class AuthorAndsReplacer implements LayoutFormatter {
+
+	/* (non-Javadoc)
+	 * @see net.sf.jabref.export.layout.LayoutFormatter#format(java.lang.String)
+	 */
+	public String format(String fieldText) {
+
+        if (fieldText == null)
+            return null;
+        String[] authors = fieldText.split(" and ");
+		String s;
+	
+		switch(authors.length) {
+			case 1:
+				//Does nothing;
+				s = authors[0];
+			break;
+			case 2:
+				s = authors[0] + " & " + authors[1];
+			break;
+			default:
+				int i = 0, x = authors.length;
+				StringBuffer sb = new StringBuffer();
+				
+				for(i=0;i<x-2;i++) {
+                    sb.append(authors[i]).append("; ");
+				}
+                sb.append(authors[i]).append(" & ").append(authors[i + 1]);
+				s = new String(sb);				
+			break;		
+		}
+		
+		return s;
+ 
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastCommas.java b/src/java/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastCommas.java
index a135d1a..b8ac564 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastCommas.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastCommas.java
@@ -1,35 +1,35 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-/**
- * <ul>
- * <li>Names are given as first name, von and last name.</li>
- * <li>First names will be abbreviated.</li>
- * <li>Individual authors separated by comma.</li>
- * <li>There is no command in front the and of a list of three or more authors.</li>
- * </ul>
- * 
- * @author Christopher Oezbek <oezi at oezi.de>
- */
-public class AuthorFirstAbbrLastCommas implements LayoutFormatter {
-	public String format(String fieldText) {
-		return AuthorList.fixAuthor_firstNameFirstCommas(fieldText, true, false);
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ * <ul>
+ * <li>Names are given as first name, von and last name.</li>
+ * <li>First names will be abbreviated.</li>
+ * <li>Individual authors separated by comma.</li>
+ * <li>There is no command in front the and of a list of three or more authors.</li>
+ * </ul>
+ * 
+ * @author Christopher Oezbek <oezi at oezi.de>
+ */
+public class AuthorFirstAbbrLastCommas implements LayoutFormatter {
+	public String format(String fieldText) {
+		return AuthorList.fixAuthor_firstNameFirstCommas(fieldText, true, false);
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastOxfordCommas.java b/src/java/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastOxfordCommas.java
index 7efb483..b8b578a 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastOxfordCommas.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastOxfordCommas.java
@@ -1,40 +1,40 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-/**
- * <ul>
- * <li>Names are given as first name, von and last name.</li>
- * <li>First names will be abbreviated.</li>
- * <li>Individual authors separated by comma.</li>
- * <li>The and of a list of three or more authors is preceeded by a comma
- * (Oxford comma)</li>
- * </ul>
- * 
- * @author mkovtun
- * @author Christopher Oezbek <oezi at oezi.de>
- * 
- */
-public class AuthorFirstAbbrLastOxfordCommas implements LayoutFormatter {
-
-	public String format(String fieldText) {
-		return AuthorList.fixAuthor_firstNameFirstCommas(fieldText, true, true);
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ * <ul>
+ * <li>Names are given as first name, von and last name.</li>
+ * <li>First names will be abbreviated.</li>
+ * <li>Individual authors separated by comma.</li>
+ * <li>The and of a list of three or more authors is preceeded by a comma
+ * (Oxford comma)</li>
+ * </ul>
+ * 
+ * @author mkovtun
+ * @author Christopher Oezbek <oezi at oezi.de>
+ * 
+ */
+public class AuthorFirstAbbrLastOxfordCommas implements LayoutFormatter {
+
+	public String format(String fieldText) {
+		return AuthorList.fixAuthor_firstNameFirstCommas(fieldText, true, true);
+	}
+
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorFirstFirst.java b/src/java/net/sf/jabref/export/layout/format/AuthorFirstFirst.java
index 9a76c18..db11ae8 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorFirstFirst.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorFirstFirst.java
@@ -1,47 +1,47 @@
-/* 
- * Copyright (C) 2006 Jabref-Team
- *               2005 Dept. Computer Architecture, University of Tuebingen, Germany
- *               2005 Joerg K. Wegner
- *               2003 Morten O. Alver, Nizar N. Batada
- *               
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-/**
- * Author First First prints ....
- * 
- * 
- * @author  $Author$
- * @version $Revision$ $Date$
- * 
- */
-public class AuthorFirstFirst implements LayoutFormatter
-{
-    public String format(String fieldText)
-    {
-        return AuthorList.fixAuthor_firstNameFirst(fieldText);
-    }
-}
+/* 
+ * Copyright (C) 2006 Jabref-Team
+ *               2005 Dept. Computer Architecture, University of Tuebingen, Germany
+ *               2005 Joerg K. Wegner
+ *               2003 Morten O. Alver, Nizar N. Batada
+ *               
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ * Author First First prints ....
+ * 
+ * 
+ * @author  $Author$
+ * @version $Revision$ $Date$
+ * 
+ */
+public class AuthorFirstFirst implements LayoutFormatter
+{
+    public String format(String fieldText)
+    {
+        return AuthorList.fixAuthor_firstNameFirst(fieldText);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorFirstFirstCommas.java b/src/java/net/sf/jabref/export/layout/format/AuthorFirstFirstCommas.java
index 94b248b..6992cd2 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorFirstFirstCommas.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorFirstFirstCommas.java
@@ -1,37 +1,37 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * <ul>
- * <li>Names are given in order: first von last, jr.</li>
- * <li>First names will NOT be abbreviated.</li>
- * <li>Individual authors are separated by commas.</li>
- * <li>There is no comma before the 'and' at the end of a list of three or more authors</li>
- * </ul>
- *
- * @author Morten O. Alver / Christopher Oezbek <oezi at oezi.de>
- *
- */
-public class AuthorFirstFirstCommas implements LayoutFormatter {
-
-    public String format(String fieldText) {
-        return AuthorList.fixAuthor_firstNameFirstCommas(fieldText, false, false);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * <ul>
+ * <li>Names are given in order: first von last, jr.</li>
+ * <li>First names will NOT be abbreviated.</li>
+ * <li>Individual authors are separated by commas.</li>
+ * <li>There is no comma before the 'and' at the end of a list of three or more authors</li>
+ * </ul>
+ *
+ * @author Morten O. Alver / Christopher Oezbek <oezi at oezi.de>
+ *
+ */
+public class AuthorFirstFirstCommas implements LayoutFormatter {
+
+    public String format(String fieldText) {
+        return AuthorList.fixAuthor_firstNameFirstCommas(fieldText, false, false);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorFirstLastCommas.java b/src/java/net/sf/jabref/export/layout/format/AuthorFirstLastCommas.java
index 5bd1f29..24ee20d 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorFirstLastCommas.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorFirstLastCommas.java
@@ -1,39 +1,39 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-/**
- * <ul>
- * <li>Names are given as first name, von and last name.</li>
- * <li>First names will not be abbreviated.</li>
- * <li>Individual authors separated by comma.</li>
- * <li>There is no comma before the and of a list of three or more authors.</li>
- * </ul>
- * 
- * @author mkovtun
- * @author Christopher Oezbek <oezi at oezi.de>
- * 
- */
-public class AuthorFirstLastCommas implements LayoutFormatter {
-
-    public String format(String fieldText) {
-        return AuthorList.fixAuthor_firstNameFirstCommas(fieldText, false, false);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ * <ul>
+ * <li>Names are given as first name, von and last name.</li>
+ * <li>First names will not be abbreviated.</li>
+ * <li>Individual authors separated by comma.</li>
+ * <li>There is no comma before the and of a list of three or more authors.</li>
+ * </ul>
+ * 
+ * @author mkovtun
+ * @author Christopher Oezbek <oezi at oezi.de>
+ * 
+ */
+public class AuthorFirstLastCommas implements LayoutFormatter {
+
+    public String format(String fieldText) {
+        return AuthorList.fixAuthor_firstNameFirstCommas(fieldText, false, false);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorFirstLastOxfordCommas.java b/src/java/net/sf/jabref/export/layout/format/AuthorFirstLastOxfordCommas.java
index 150113f..9bf0179 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorFirstLastOxfordCommas.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorFirstLastOxfordCommas.java
@@ -1,39 +1,39 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-/**
- * <ul>
- * <li>Names are given as first name, von and last name.</li>
- * <li>Individual authors separated by comma.</li>
- * <li>The and of a list of three or more authors is preceeded by a comma
- * (Oxford comma)</li>
- * </ul>
- * 
- * @author mkovtun
- * @author Christopher Oezbek <oezi at oezi.de>
- * 
- */
-public class AuthorFirstLastOxfordCommas implements LayoutFormatter {
-
-    public String format(String fieldText) {
-        return AuthorList.fixAuthor_firstNameFirstCommas(fieldText, false, true);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ * <ul>
+ * <li>Names are given as first name, von and last name.</li>
+ * <li>Individual authors separated by comma.</li>
+ * <li>The and of a list of three or more authors is preceeded by a comma
+ * (Oxford comma)</li>
+ * </ul>
+ * 
+ * @author mkovtun
+ * @author Christopher Oezbek <oezi at oezi.de>
+ * 
+ */
+public class AuthorFirstLastOxfordCommas implements LayoutFormatter {
+
+    public String format(String fieldText) {
+        return AuthorList.fixAuthor_firstNameFirstCommas(fieldText, false, true);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorLF_FF.java b/src/java/net/sf/jabref/export/layout/format/AuthorLF_FF.java
index 9bb4159..48b8d25 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorLF_FF.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorLF_FF.java
@@ -1,31 +1,31 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-/**
- *
- */
-public class AuthorLF_FF implements LayoutFormatter {
-
-    public String format(String fieldText) {
-        AuthorList al = AuthorList.getAuthorList(fieldText);
-
-        return al.getAuthorsLastFirstFirstLastAnds(false);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ *
+ */
+public class AuthorLF_FF implements LayoutFormatter {
+
+    public String format(String fieldText) {
+        AuthorList al = AuthorList.getAuthorList(fieldText);
+
+        return al.getAuthorsLastFirstFirstLastAnds(false);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorLF_FFAbbr.java b/src/java/net/sf/jabref/export/layout/format/AuthorLF_FFAbbr.java
index 1ae5d7d..ff6d182 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorLF_FFAbbr.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorLF_FFAbbr.java
@@ -1,31 +1,31 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- *
- */
-public class AuthorLF_FFAbbr implements LayoutFormatter {
-
-    public String format(String fieldText) {
-        AuthorList al = AuthorList.getAuthorList(fieldText);
-
-        return al.getAuthorsLastFirstFirstLastAnds(true);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ *
+ */
+public class AuthorLF_FFAbbr implements LayoutFormatter {
+
+    public String format(String fieldText) {
+        AuthorList al = AuthorList.getAuthorList(fieldText);
+
+        return al.getAuthorsLastFirstFirstLastAnds(true);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorLastFirst.java b/src/java/net/sf/jabref/export/layout/format/AuthorLastFirst.java
index 6e69c74..06f0af4 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorLastFirst.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorLastFirst.java
@@ -1,27 +1,27 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-public class AuthorLastFirst implements LayoutFormatter
-{
-    public String format(String fieldText)
-    {
-        return AuthorList.fixAuthor_lastNameFirst(fieldText);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+public class AuthorLastFirst implements LayoutFormatter
+{
+    public String format(String fieldText)
+    {
+        return AuthorList.fixAuthor_lastNameFirst(fieldText);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrCommas.java b/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrCommas.java
index 124904f..27d32ba 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrCommas.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrCommas.java
@@ -1,39 +1,39 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-/**
- * <ul>
- * <li>Names are given in order: von last, jr, first.</li>
- * <li>First names will be abbreviated.</li>
- * <li>Individual authors are separated by commas.</li>
- * <li>There is no comma before the 'and' at the end of a list of three or more authors</li>
- * </ul>
- * 
- * @author mkovtun
- * @author Christopher Oezbek <oezi at oezi.de>
- * 
- */
-public class AuthorLastFirstAbbrCommas implements LayoutFormatter {
-
-    public String format(String fieldText) {
-        return AuthorList.fixAuthor_lastNameFirstCommas(fieldText, true, false);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ * <ul>
+ * <li>Names are given in order: von last, jr, first.</li>
+ * <li>First names will be abbreviated.</li>
+ * <li>Individual authors are separated by commas.</li>
+ * <li>There is no comma before the 'and' at the end of a list of three or more authors</li>
+ * </ul>
+ * 
+ * @author mkovtun
+ * @author Christopher Oezbek <oezi at oezi.de>
+ * 
+ */
+public class AuthorLastFirstAbbrCommas implements LayoutFormatter {
+
+    public String format(String fieldText) {
+        return AuthorList.fixAuthor_lastNameFirstCommas(fieldText, true, false);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrOxfordCommas.java b/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrOxfordCommas.java
index 755dcc7..9143dd5 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrOxfordCommas.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrOxfordCommas.java
@@ -1,40 +1,40 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-/**
- * <ul>
- * <li>Names are given in order: von last, jr, first.</li>
- * <li>First names will be abbreviated.</li>
- * <li>Individual authors are separated by commas.</li>
- * <li>The 'and' of a list of three or more authors is preceeded by a comma
- * (Oxford comma)</li>
- * </ul>
- * 
- * @author mkovtun
- * @author Christopher Oezbek <oezi at oezi.de>
- * 
- */
-public class AuthorLastFirstAbbrOxfordCommas implements LayoutFormatter {
-
-    public String format(String fieldText) {
-        return AuthorList.fixAuthor_lastNameFirstCommas(fieldText, true, true);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ * <ul>
+ * <li>Names are given in order: von last, jr, first.</li>
+ * <li>First names will be abbreviated.</li>
+ * <li>Individual authors are separated by commas.</li>
+ * <li>The 'and' of a list of three or more authors is preceeded by a comma
+ * (Oxford comma)</li>
+ * </ul>
+ * 
+ * @author mkovtun
+ * @author Christopher Oezbek <oezi at oezi.de>
+ * 
+ */
+public class AuthorLastFirstAbbrOxfordCommas implements LayoutFormatter {
+
+    public String format(String fieldText) {
+        return AuthorList.fixAuthor_lastNameFirstCommas(fieldText, true, true);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbreviator.java b/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbreviator.java
index 4d5c8e4..9e5656d 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbreviator.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbreviator.java
@@ -1,48 +1,48 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Uses as input the fields (author or editor) in the LastFirst format.
- * 
- * This formater enables to abbreviate the authors name in the following way:
- * 
- * Ex: Someone, Van Something will be abbreviated as Someone, V.S.
- * 
- * @author Carlos Silla
- * @author Christopher Oezbek <oezi at oezi.de>
- * 
- * @version 1.0 Created on 12/10/2004
- * @version 1.1 Fixed bug
- *          http://sourceforge.net/tracker/index.php?func=detail&aid=1466924&group_id=92314&atid=600306
- */
-public class AuthorLastFirstAbbreviator implements LayoutFormatter {
-
-	/**
-	 * @see net.sf.jabref.export.layout.LayoutFormatter#format(java.lang.String)
-	 */
-	public String format(String fieldText) {
-
-        /**
-         * This formatter is a duplicate of AuthorAbbreviator, so we simply
-         * call that one.
-         */
-        return (new AuthorAbbreviator()).format(fieldText);
-
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Uses as input the fields (author or editor) in the LastFirst format.
+ * 
+ * This formater enables to abbreviate the authors name in the following way:
+ * 
+ * Ex: Someone, Van Something will be abbreviated as Someone, V.S.
+ * 
+ * @author Carlos Silla
+ * @author Christopher Oezbek <oezi at oezi.de>
+ * 
+ * @version 1.0 Created on 12/10/2004
+ * @version 1.1 Fixed bug
+ *          http://sourceforge.net/tracker/index.php?func=detail&aid=1466924&group_id=92314&atid=600306
+ */
+public class AuthorLastFirstAbbreviator implements LayoutFormatter {
+
+	/**
+	 * @see net.sf.jabref.export.layout.LayoutFormatter#format(java.lang.String)
+	 */
+	public String format(String fieldText) {
+
+        /**
+         * This formatter is a duplicate of AuthorAbbreviator, so we simply
+         * call that one.
+         */
+        return (new AuthorAbbreviator()).format(fieldText);
+
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstCommas.java b/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstCommas.java
index a96fee0..a2fc7f4 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstCommas.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstCommas.java
@@ -1,38 +1,38 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-/**
- * <ul>
- * <li>Names are given in order: von last, jr, first.</li>
- * <li>First names will NOT be abbreviated.</li>
- * <li>Individual authors are separated by commas.</li>
- * <li>There is no comma before the 'and' at the end of a list of three or more authors</li>
- * </ul>
- * 
- * @author mkovtun
- * @author Christopher Oezbek <oezi at oezi.de>
- * 
- */
-public class AuthorLastFirstCommas implements LayoutFormatter {
-
-    public String format(String fieldText) {
-        return AuthorList.fixAuthor_lastNameFirstCommas(fieldText, false, false);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ * <ul>
+ * <li>Names are given in order: von last, jr, first.</li>
+ * <li>First names will NOT be abbreviated.</li>
+ * <li>Individual authors are separated by commas.</li>
+ * <li>There is no comma before the 'and' at the end of a list of three or more authors</li>
+ * </ul>
+ * 
+ * @author mkovtun
+ * @author Christopher Oezbek <oezi at oezi.de>
+ * 
+ */
+public class AuthorLastFirstCommas implements LayoutFormatter {
+
+    public String format(String fieldText) {
+        return AuthorList.fixAuthor_lastNameFirstCommas(fieldText, false, false);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstOxfordCommas.java b/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstOxfordCommas.java
index 32af018..56fcf09 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstOxfordCommas.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorLastFirstOxfordCommas.java
@@ -1,38 +1,38 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-/**
- * <ul>
- * <li>Names are given in order: von last, jr, first.</li>
- * <li>First names will NOT be abbreviated.</li>
- * <li>Individual authors are separated by commas.</li>
- * <li>The 'and' of a list of three or more authors is preceeded by a comma
- * (Oxford comma)</li>
- * 
- * @author mkovtun
- * @author Christopher Oezbek <oezi at oezi.de>
- * 
- */
-public class AuthorLastFirstOxfordCommas implements LayoutFormatter {
-
-	public String format(String fieldText) {
-		return AuthorList.fixAuthor_lastNameFirstCommas(fieldText, false, true);
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ * <ul>
+ * <li>Names are given in order: von last, jr, first.</li>
+ * <li>First names will NOT be abbreviated.</li>
+ * <li>Individual authors are separated by commas.</li>
+ * <li>The 'and' of a list of three or more authors is preceeded by a comma
+ * (Oxford comma)</li>
+ * 
+ * @author mkovtun
+ * @author Christopher Oezbek <oezi at oezi.de>
+ * 
+ */
+public class AuthorLastFirstOxfordCommas implements LayoutFormatter {
+
+	public String format(String fieldText) {
+		return AuthorList.fixAuthor_lastNameFirstCommas(fieldText, false, true);
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorNatBib.java b/src/java/net/sf/jabref/export/layout/format/AuthorNatBib.java
index c3c2861..8f51edb 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorNatBib.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorNatBib.java
@@ -1,33 +1,33 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-/**
- * Natbib style: Last names only. Two authors are separated by "and",
- * three or more authors are given as "Smith et al."
- *
- * @author Morten O. Alver
- */
-public class AuthorNatBib implements LayoutFormatter {
-
-
-    public String format(String fieldText) {
-        return AuthorList.fixAuthor_Natbib(fieldText);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ * Natbib style: Last names only. Two authors are separated by "and",
+ * three or more authors are given as "Smith et al."
+ *
+ * @author Morten O. Alver
+ */
+public class AuthorNatBib implements LayoutFormatter {
+
+
+    public String format(String fieldText) {
+        return AuthorList.fixAuthor_Natbib(fieldText);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorOrgSci.java b/src/java/net/sf/jabref/export/layout/format/AuthorOrgSci.java
index a9a569a..4c22559 100644
--- a/src/java/net/sf/jabref/export/layout/format/AuthorOrgSci.java
+++ b/src/java/net/sf/jabref/export/layout/format/AuthorOrgSci.java
@@ -1,57 +1,57 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.AuthorList.Author;
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Will return the Authors to match the OrgSci format:
- * 
- * <ul>
- * <li>That is the first author is LastFirst, but all others are FirstLast.</li>
- * <li>First names are abbreviated</li>
- * <li>Spaces between abbreviated first names are NOT removed. Use
- * NoSpaceBetweenAbbreviations to achieve this.</li>
- * </ul>
- * <p>
- * See the testcase for examples.
- * </p>
- * <p>
- * Idea from: http://stuermer.ch/blog/bibliography-reference-management-with-jabref.html
- * </p>
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class AuthorOrgSci implements LayoutFormatter {
-
-	public String format(String fieldText) {
-		AuthorList a = AuthorList.getAuthorList(fieldText);
-		if (a.size() == 0) {
-			return fieldText;
-		}
-		Author first = a.getAuthor(0);
-		StringBuffer sb = new StringBuffer();
-		sb.append(first.getLastFirst(true));
-		for (int i = 1; i < a.size(); i++) {
-			sb.append(", ").append(a.getAuthor(i).getFirstLast(true));
-		}
-		return sb.toString();
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.AuthorList.Author;
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Will return the Authors to match the OrgSci format:
+ * 
+ * <ul>
+ * <li>That is the first author is LastFirst, but all others are FirstLast.</li>
+ * <li>First names are abbreviated</li>
+ * <li>Spaces between abbreviated first names are NOT removed. Use
+ * NoSpaceBetweenAbbreviations to achieve this.</li>
+ * </ul>
+ * <p>
+ * See the testcase for examples.
+ * </p>
+ * <p>
+ * Idea from: http://stuermer.ch/blog/bibliography-reference-management-with-jabref.html
+ * </p>
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class AuthorOrgSci implements LayoutFormatter {
+
+	public String format(String fieldText) {
+		AuthorList a = AuthorList.getAuthorList(fieldText);
+		if (a.size() == 0) {
+			return fieldText;
+		}
+		Author first = a.getAuthor(0);
+		StringBuffer sb = new StringBuffer();
+		sb.append(first.getLastFirst(true));
+		for (int i = 1; i < a.size(); i++) {
+			sb.append(", ").append(a.getAuthor(i).getFirstLast(true));
+		}
+		return sb.toString();
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/Authors.java b/src/java/net/sf/jabref/export/layout/format/Authors.java
index ba1358d..a325fca 100644
--- a/src/java/net/sf/jabref/export/layout/format/Authors.java
+++ b/src/java/net/sf/jabref/export/layout/format/Authors.java
@@ -1,336 +1,336 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.export.layout.AbstractParamLayoutFormatter;
-
-import java.util.ArrayList;
-import java.util.regex.Pattern;
-
-/**
- * Versatile author name formatter that takes arguments to control the formatting style.
- */
-public class Authors extends AbstractParamLayoutFormatter {
-
-    /*
-    AuthorSort = [FirstFirst | LastFirst | LastFirstFirstFirst]
-    AuthorAbbr = [FullName | Initials | FirstInitial | MiddleInitial | InitialsNoSpace | LastName]
-    AuthorSep = [Comma | And | Colon | Semicolon | Sep=<string>]
-    AuthorLastSep = [And | Comma | Colon | Semicolon | Amp | Oxford | LastSep=<string>]
-    AuthorPunc = [FullPunc | NoPunc | NoComma | NoPeriod]
-    AuthorNumber = [inf | <number>]
-    AuthorNumberEtAl = [ {1} | <number>]
-    EtAlString = [ et al. | EtAl=<string>]
-    */
-    
-    static ArrayList<String>
-        authorOrder = new ArrayList<String>(),
-        authorAbbr = new ArrayList<String>(),
-        authorPunc = new ArrayList<String>(),
-        separators = new ArrayList<String>(),
-        lastSeparators = new ArrayList<String>();
-
-    static Pattern numberPattern = Pattern.compile("[0-9]+");
-
-    static {
-        authorOrder.add("firstfirst");
-        authorOrder.add("lastfirst");
-        authorOrder.add("lastfirstfirstfirst");
-
-        authorAbbr.add("fullname");
-        authorAbbr.add("initials");
-        authorAbbr.add("firstinitial");
-        authorAbbr.add("middleinitial");
-        authorAbbr.add("lastname");
-        authorAbbr.add("initialsnospace");
-
-        authorPunc.add("fullpunc");
-        authorPunc.add("nopunc");
-        authorPunc.add("nocomma");
-        authorPunc.add("noperiod");
-
-        separators.add("comma");
-        separators.add("and");
-        separators.add("colon");
-        separators.add("semicolon");
-        separators.add("sep");
-        
-        lastSeparators.add("and");
-        lastSeparators.add("colon");
-        lastSeparators.add("semicolon");
-        lastSeparators.add("amp");
-        lastSeparators.add("oxford");
-        lastSeparators.add("lastsep");
-
-    }
-
-    final static int
-        FIRST_FIRST = 0,
-        LAST_FIRST = 1,
-        LF_FF = 2;
-
-    final static String
-        COMMA = ", ",
-        AMP = " & ",
-        COLON = ": ",
-        SEMICOLON = "; ",
-        AND = " and ",
-        OXFORD = ", and ";
-
-    int flMode = FIRST_FIRST;
-
-    boolean
-        abbreviate = true,
-        firstInitialOnly = false,
-        middleInitial = false,
-        lastNameOnly = false,
-        abbrDots = true,
-        abbrSpaces = true;
-
-    boolean setSep = false;
-    boolean setMaxAuthors = false;
-    int maxAuthors = -1;
-    int authorNumberEtAl = 1;
-
-
-    String
-        firstFirstSeparator = " ",
-        lastFirstSeparator = ", ",
-        separator = COMMA,
-        lastSeparator = AND,
-        etAlString = " et al.",
-        jrSeparator = " ";
-
-
-    public void setArgument(String arg) {
-        String[] parts = parseArgument(arg);
-        for (int i = 0; i < parts.length; i++) {
-            int index = parts[i].indexOf("=");
-            if (index > 0) {
-                String key = parts[i].substring(0, index);
-                String value = parts[i].substring(index+1);
-                handleArgument(key, value);
-            }
-            else handleArgument(parts[i], "");
-
-        }
-    }
-
-
-    private void handleArgument(String key, String value) {
-        if (authorOrder.contains(key.trim().toLowerCase())) {
-            if (comp(key, "FirstFirst"))
-                flMode = FIRST_FIRST;
-            else if (comp(key, "LastFirst"))
-                flMode = LAST_FIRST;
-            else if (comp(key, "LastFirstFirstFirst"))
-                flMode = LF_FF;
-        }
-        else if (authorAbbr.contains(key.trim().toLowerCase())) {
-            if (comp(key, "FullName")) {
-                abbreviate = false;
-            }
-            else if (comp(key, "Initials")) {
-                abbreviate = true;
-                firstInitialOnly = false;
-            }
-            else if (comp(key, "FirstInitial")) {
-                abbreviate = true;
-                firstInitialOnly = true;
-            }
-            else if (comp(key, "MiddleInitial")) {
-                abbreviate = true;
-                middleInitial = true;
-            }
-            else if (comp(key, "LastName")) {
-                lastNameOnly = true;
-            }
-            else if (comp(key, "InitialsNoSpace")) {
-                abbreviate = true;
-                abbrSpaces = false;
-            }
-        }
-        else if (authorPunc.contains(key.trim().toLowerCase())) {
-            if (comp(key, "FullPunc")) {
-                abbrDots = true;
-                lastFirstSeparator = ", ";
-            }
-            else if (comp(key, "NoPunc")) {
-                abbrDots = false;
-                lastFirstSeparator = " ";
-            }
-            else if (comp(key, "NoComma")) {
-                abbrDots = true;
-                lastFirstSeparator = " ";
-            }
-            else if (comp(key, "NoPeriod")) {
-                abbrDots = false;
-                lastFirstSeparator = ", ";
-            }
-        }
-
-        // AuthorSep = [Comma | And | Colon | Semicolon | sep=<string>]
-        // AuthorLastSep = [And | Comma | Colon | Semicolon | Amp | Oxford | lastsep=<string>]
-        else if (separators.contains(key.trim().toLowerCase()) || lastSeparators.contains(key.trim().toLowerCase())) {
-            if (comp(key, "Comma")) {
-                if (!setSep) {
-                    separator = COMMA;
-                    setSep = true;
-                } else lastSeparator = COMMA;
-            }
-            else if (comp(key, "And")) {
-                if (!setSep) {
-                    separator = AND;
-                    setSep = true;
-                } else lastSeparator = AND;
-            }
-            else if (comp(key, "Colon")) {
-                if (!setSep) {
-                    separator = COLON;
-                    setSep = true;
-                } else lastSeparator = COLON;
-            }
-            else if (comp(key, "Semicolon")) {
-                if (!setSep) {
-                    separator = SEMICOLON;
-                    setSep = true;
-                } else lastSeparator = SEMICOLON;
-            }
-            else if (comp(key, "Oxford")) {
-                lastSeparator = OXFORD;
-            }
-            else if (comp(key, "Amp")) {
-                lastSeparator = AMP;
-            }
-            else if (comp(key, "Sep") && (value.length() > 0)) {
-                separator = value;
-                setSep = true;
-            }
-            else if (comp(key, "LastSep") && (value.length() > 0)) {
-                lastSeparator = value;
-            }
-        }
-        else if (key.trim().toLowerCase().equals("etal") && (value.length() > 0)) {
-            etAlString = value;
-        }
-        else if (numberPattern.matcher(key.trim()).matches()) {
-            // Just a number:
-            int num = Integer.parseInt(key.trim());
-            if (!setMaxAuthors) {
-                maxAuthors = num;
-                setMaxAuthors = true;
-            }
-            else
-                authorNumberEtAl = num;
-        }
-
-
-    }
-
-    /**
-     * Check for case-insensitive equality between two strings after removing
-     * white space at the beginning and end of the first string.
-     * @param one The first string - whitespace is trimmed
-     * @param two The second string
-     * @return true if the strings are deemed equal
-     */
-    public boolean comp(String one, String two) {
-        return one.trim().equalsIgnoreCase(two);
-    }
-
-    public String format(String fieldText) {
-        StringBuilder sb = new StringBuilder();
-        AuthorList al = AuthorList.getAuthorList(fieldText);
-
-        if ((maxAuthors < 0) || (al.size() <= maxAuthors)) {
-            for (int i=0; i<al.size(); i++) {
-                AuthorList.Author a = al.getAuthor(i);
-
-                addSingleName(sb, a, (flMode == FIRST_FIRST) || ((flMode == LF_FF) && (i > 0)));
-
-                if (i < al.size()-2)
-                    sb.append(separator);
-                else if (i < al.size()-1)
-                    sb.append(lastSeparator);
-            }
-        }
-
-        else {
-            for (int i=0; i<Math.min(al.size() - 1, authorNumberEtAl); i++) {
-                if (i > 0)
-                    sb.append(separator);
-                addSingleName(sb, al.getAuthor(i), flMode == FIRST_FIRST);
-            }
-            sb.append(etAlString);
-        }
-
-        return sb.toString();
-    }
-
-    private void addSingleName(StringBuilder sb, AuthorList.Author a, boolean firstFirst) {
-        String firstNamePart = a.getFirst();
-        String lastNamePart = a.getLast();
-        String von = a.getVon();
-        if ((von != null) && (von.length() > 0))
-            lastNamePart = von+" "+lastNamePart;
-        String jr = a.getJr();
-        if ((jr != null) && (jr.length() > 0))
-            lastNamePart = lastNamePart+jrSeparator+jr;
-
-        if (abbreviate && (firstNamePart != null)) {
-	    firstNamePart = a.getFirstAbbr();
-		
-            if (firstInitialOnly && (firstNamePart.length() > 2))
-                firstNamePart = firstNamePart.substring(0, 2);
-            else if (middleInitial) {
-                String abbr = firstNamePart;
-                firstNamePart = a.getFirst();
-                int index = firstNamePart.indexOf(" ");
-                //System.out.println(firstNamePart);
-                //System.out.println(index);
-                if (index >= 0) {
-                    firstNamePart = firstNamePart.substring(0, index+1);
-                    if (abbr.length() > 3) {
-                        firstNamePart = firstNamePart + abbr.substring(3);
-                    }
-                }
-            }
-            if (!abbrDots)
-                firstNamePart = firstNamePart.replaceAll("\\.", "");
-            if (!abbrSpaces)
-		firstNamePart = firstNamePart.replaceAll(" ", "");
-        }
-
-	if (lastNameOnly || (firstNamePart == null)) {
-            sb.append(lastNamePart);	
-	}
-        else if (firstFirst) {
-            sb.append(firstNamePart).append(firstFirstSeparator);
-            sb.append(lastNamePart);
-        }
-        else {
-            sb.append(lastNamePart).append(lastFirstSeparator).append(firstNamePart);
-        }
-
-    }
-
-    public static void main(String[] args) {
-        Authors format = new Authors();
-        format.setArgument("lastfirstfirstfirst , initials,  Nocomma,Amp,Semicolon,30 ,EtAl = m.fl.");
-        System.out.println(format.format("Alfredsen, Jr, Jo Arve and Morten Omholt Alver and Yngvar von Olsen and Sebastian A. L. M. Kooijman"));
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.export.layout.AbstractParamLayoutFormatter;
+
+import java.util.ArrayList;
+import java.util.regex.Pattern;
+
+/**
+ * Versatile author name formatter that takes arguments to control the formatting style.
+ */
+public class Authors extends AbstractParamLayoutFormatter {
+
+    /*
+    AuthorSort = [FirstFirst | LastFirst | LastFirstFirstFirst]
+    AuthorAbbr = [FullName | Initials | FirstInitial | MiddleInitial | InitialsNoSpace | LastName]
+    AuthorSep = [Comma | And | Colon | Semicolon | Sep=<string>]
+    AuthorLastSep = [And | Comma | Colon | Semicolon | Amp | Oxford | LastSep=<string>]
+    AuthorPunc = [FullPunc | NoPunc | NoComma | NoPeriod]
+    AuthorNumber = [inf | <number>]
+    AuthorNumberEtAl = [ {1} | <number>]
+    EtAlString = [ et al. | EtAl=<string>]
+    */
+    
+    static ArrayList<String>
+        authorOrder = new ArrayList<String>(),
+        authorAbbr = new ArrayList<String>(),
+        authorPunc = new ArrayList<String>(),
+        separators = new ArrayList<String>(),
+        lastSeparators = new ArrayList<String>();
+
+    static Pattern numberPattern = Pattern.compile("[0-9]+");
+
+    static {
+        authorOrder.add("firstfirst");
+        authorOrder.add("lastfirst");
+        authorOrder.add("lastfirstfirstfirst");
+
+        authorAbbr.add("fullname");
+        authorAbbr.add("initials");
+        authorAbbr.add("firstinitial");
+        authorAbbr.add("middleinitial");
+        authorAbbr.add("lastname");
+        authorAbbr.add("initialsnospace");
+
+        authorPunc.add("fullpunc");
+        authorPunc.add("nopunc");
+        authorPunc.add("nocomma");
+        authorPunc.add("noperiod");
+
+        separators.add("comma");
+        separators.add("and");
+        separators.add("colon");
+        separators.add("semicolon");
+        separators.add("sep");
+        
+        lastSeparators.add("and");
+        lastSeparators.add("colon");
+        lastSeparators.add("semicolon");
+        lastSeparators.add("amp");
+        lastSeparators.add("oxford");
+        lastSeparators.add("lastsep");
+
+    }
+
+    final static int
+        FIRST_FIRST = 0,
+        LAST_FIRST = 1,
+        LF_FF = 2;
+
+    final static String
+        COMMA = ", ",
+        AMP = " & ",
+        COLON = ": ",
+        SEMICOLON = "; ",
+        AND = " and ",
+        OXFORD = ", and ";
+
+    int flMode = FIRST_FIRST;
+
+    boolean
+        abbreviate = true,
+        firstInitialOnly = false,
+        middleInitial = false,
+        lastNameOnly = false,
+        abbrDots = true,
+        abbrSpaces = true;
+
+    boolean setSep = false;
+    boolean setMaxAuthors = false;
+    int maxAuthors = -1;
+    int authorNumberEtAl = 1;
+
+
+    String
+        firstFirstSeparator = " ",
+        lastFirstSeparator = ", ",
+        separator = COMMA,
+        lastSeparator = AND,
+        etAlString = " et al.",
+        jrSeparator = " ";
+
+
+    public void setArgument(String arg) {
+        String[] parts = parseArgument(arg);
+        for (int i = 0; i < parts.length; i++) {
+            int index = parts[i].indexOf("=");
+            if (index > 0) {
+                String key = parts[i].substring(0, index);
+                String value = parts[i].substring(index+1);
+                handleArgument(key, value);
+            }
+            else handleArgument(parts[i], "");
+
+        }
+    }
+
+
+    private void handleArgument(String key, String value) {
+        if (authorOrder.contains(key.trim().toLowerCase())) {
+            if (comp(key, "FirstFirst"))
+                flMode = FIRST_FIRST;
+            else if (comp(key, "LastFirst"))
+                flMode = LAST_FIRST;
+            else if (comp(key, "LastFirstFirstFirst"))
+                flMode = LF_FF;
+        }
+        else if (authorAbbr.contains(key.trim().toLowerCase())) {
+            if (comp(key, "FullName")) {
+                abbreviate = false;
+            }
+            else if (comp(key, "Initials")) {
+                abbreviate = true;
+                firstInitialOnly = false;
+            }
+            else if (comp(key, "FirstInitial")) {
+                abbreviate = true;
+                firstInitialOnly = true;
+            }
+            else if (comp(key, "MiddleInitial")) {
+                abbreviate = true;
+                middleInitial = true;
+            }
+            else if (comp(key, "LastName")) {
+                lastNameOnly = true;
+            }
+            else if (comp(key, "InitialsNoSpace")) {
+                abbreviate = true;
+                abbrSpaces = false;
+            }
+        }
+        else if (authorPunc.contains(key.trim().toLowerCase())) {
+            if (comp(key, "FullPunc")) {
+                abbrDots = true;
+                lastFirstSeparator = ", ";
+            }
+            else if (comp(key, "NoPunc")) {
+                abbrDots = false;
+                lastFirstSeparator = " ";
+            }
+            else if (comp(key, "NoComma")) {
+                abbrDots = true;
+                lastFirstSeparator = " ";
+            }
+            else if (comp(key, "NoPeriod")) {
+                abbrDots = false;
+                lastFirstSeparator = ", ";
+            }
+        }
+
+        // AuthorSep = [Comma | And | Colon | Semicolon | sep=<string>]
+        // AuthorLastSep = [And | Comma | Colon | Semicolon | Amp | Oxford | lastsep=<string>]
+        else if (separators.contains(key.trim().toLowerCase()) || lastSeparators.contains(key.trim().toLowerCase())) {
+            if (comp(key, "Comma")) {
+                if (!setSep) {
+                    separator = COMMA;
+                    setSep = true;
+                } else lastSeparator = COMMA;
+            }
+            else if (comp(key, "And")) {
+                if (!setSep) {
+                    separator = AND;
+                    setSep = true;
+                } else lastSeparator = AND;
+            }
+            else if (comp(key, "Colon")) {
+                if (!setSep) {
+                    separator = COLON;
+                    setSep = true;
+                } else lastSeparator = COLON;
+            }
+            else if (comp(key, "Semicolon")) {
+                if (!setSep) {
+                    separator = SEMICOLON;
+                    setSep = true;
+                } else lastSeparator = SEMICOLON;
+            }
+            else if (comp(key, "Oxford")) {
+                lastSeparator = OXFORD;
+            }
+            else if (comp(key, "Amp")) {
+                lastSeparator = AMP;
+            }
+            else if (comp(key, "Sep") && (value.length() > 0)) {
+                separator = value;
+                setSep = true;
+            }
+            else if (comp(key, "LastSep") && (value.length() > 0)) {
+                lastSeparator = value;
+            }
+        }
+        else if (key.trim().toLowerCase().equals("etal") && (value.length() > 0)) {
+            etAlString = value;
+        }
+        else if (numberPattern.matcher(key.trim()).matches()) {
+            // Just a number:
+            int num = Integer.parseInt(key.trim());
+            if (!setMaxAuthors) {
+                maxAuthors = num;
+                setMaxAuthors = true;
+            }
+            else
+                authorNumberEtAl = num;
+        }
+
+
+    }
+
+    /**
+     * Check for case-insensitive equality between two strings after removing
+     * white space at the beginning and end of the first string.
+     * @param one The first string - whitespace is trimmed
+     * @param two The second string
+     * @return true if the strings are deemed equal
+     */
+    public boolean comp(String one, String two) {
+        return one.trim().equalsIgnoreCase(two);
+    }
+
+    public String format(String fieldText) {
+        StringBuilder sb = new StringBuilder();
+        AuthorList al = AuthorList.getAuthorList(fieldText);
+
+        if ((maxAuthors < 0) || (al.size() <= maxAuthors)) {
+            for (int i=0; i<al.size(); i++) {
+                AuthorList.Author a = al.getAuthor(i);
+
+                addSingleName(sb, a, (flMode == FIRST_FIRST) || ((flMode == LF_FF) && (i > 0)));
+
+                if (i < al.size()-2)
+                    sb.append(separator);
+                else if (i < al.size()-1)
+                    sb.append(lastSeparator);
+            }
+        }
+
+        else {
+            for (int i=0; i<Math.min(al.size() - 1, authorNumberEtAl); i++) {
+                if (i > 0)
+                    sb.append(separator);
+                addSingleName(sb, al.getAuthor(i), flMode == FIRST_FIRST);
+            }
+            sb.append(etAlString);
+        }
+
+        return sb.toString();
+    }
+
+    private void addSingleName(StringBuilder sb, AuthorList.Author a, boolean firstFirst) {
+        String firstNamePart = a.getFirst();
+        String lastNamePart = a.getLast();
+        String von = a.getVon();
+        if ((von != null) && (von.length() > 0))
+            lastNamePart = von+" "+lastNamePart;
+        String jr = a.getJr();
+        if ((jr != null) && (jr.length() > 0))
+            lastNamePart = lastNamePart+jrSeparator+jr;
+
+        if (abbreviate && (firstNamePart != null)) {
+	    firstNamePart = a.getFirstAbbr();
+		
+            if (firstInitialOnly && (firstNamePart.length() > 2))
+                firstNamePart = firstNamePart.substring(0, 2);
+            else if (middleInitial) {
+                String abbr = firstNamePart;
+                firstNamePart = a.getFirst();
+                int index = firstNamePart.indexOf(" ");
+                //System.out.println(firstNamePart);
+                //System.out.println(index);
+                if (index >= 0) {
+                    firstNamePart = firstNamePart.substring(0, index+1);
+                    if (abbr.length() > 3) {
+                        firstNamePart = firstNamePart + abbr.substring(3);
+                    }
+                }
+            }
+            if (!abbrDots)
+                firstNamePart = firstNamePart.replaceAll("\\.", "");
+            if (!abbrSpaces)
+		firstNamePart = firstNamePart.replaceAll(" ", "");
+        }
+
+	if (lastNameOnly || (firstNamePart == null)) {
+            sb.append(lastNamePart);	
+	}
+        else if (firstFirst) {
+            sb.append(firstNamePart).append(firstFirstSeparator);
+            sb.append(lastNamePart);
+        }
+        else {
+            sb.append(lastNamePart).append(lastFirstSeparator).append(firstNamePart);
+        }
+
+    }
+
+    public static void main(String[] args) {
+        Authors format = new Authors();
+        format.setArgument("lastfirstfirstfirst , initials,  Nocomma,Amp,Semicolon,30 ,EtAl = m.fl.");
+        System.out.println(format.format("Alfredsen, Jr, Jo Arve and Morten Omholt Alver and Yngvar von Olsen and Sebastian A. L. M. Kooijman"));
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/CompositeFormat.java b/src/java/net/sf/jabref/export/layout/format/CompositeFormat.java
index 3a4d9b3..73c1404 100644
--- a/src/java/net/sf/jabref/export/layout/format/CompositeFormat.java
+++ b/src/java/net/sf/jabref/export/layout/format/CompositeFormat.java
@@ -1,56 +1,56 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * A layout formatter that is the composite of the given Formatters executed in
- * order.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class CompositeFormat implements LayoutFormatter {
-
-	LayoutFormatter[] formatters;
-
-	/**
-	 * If called with this constructor, this formatter does nothing.
-	 */
-	public CompositeFormat() {
-		// Nothing
-	}
-
-	public CompositeFormat(LayoutFormatter first, LayoutFormatter second) {
-		formatters = new LayoutFormatter[] { first, second };
-	}
-
-	public CompositeFormat(LayoutFormatter[] formatters) {
-		this.formatters = formatters;
-	}
-
-	public String format(String fieldText) {
-		if (formatters != null) {
-			for (int i = 0; i < formatters.length; i++) {
-				fieldText = formatters[i].format(fieldText);
-			}
-		}
-		return fieldText;
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * A layout formatter that is the composite of the given Formatters executed in
+ * order.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class CompositeFormat implements LayoutFormatter {
+
+	LayoutFormatter[] formatters;
+
+	/**
+	 * If called with this constructor, this formatter does nothing.
+	 */
+	public CompositeFormat() {
+		// Nothing
+	}
+
+	public CompositeFormat(LayoutFormatter first, LayoutFormatter second) {
+		formatters = new LayoutFormatter[] { first, second };
+	}
+
+	public CompositeFormat(LayoutFormatter[] formatters) {
+		this.formatters = formatters;
+	}
+
+	public String format(String fieldText) {
+		if (formatters != null) {
+			for (int i = 0; i < formatters.length; i++) {
+				fieldText = formatters[i].format(fieldText);
+			}
+		}
+		return fieldText;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/CreateBibORDFAuthors.java b/src/java/net/sf/jabref/export/layout/format/CreateBibORDFAuthors.java
index 2c1a9cc..3711911 100644
--- a/src/java/net/sf/jabref/export/layout/format/CreateBibORDFAuthors.java
+++ b/src/java/net/sf/jabref/export/layout/format/CreateBibORDFAuthors.java
@@ -1,101 +1,101 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-///////////////////////////////////////////////////////////////////////////////
-//  Filename: $RCSfile$
-//  Purpose:  Atom representation.
-//  Language: Java
-//  Compiler: JDK 1.4
-//  Authors:  Joerg K. Wegner
-//  Version:  $Revision: 2268 $
-//            $Date: 2007-08-20 01:37:05 +0200 (Mon, 20 Aug 2007) $
-//            $Author: coezbek $
-//
-//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
-//
-//  This program is free software; 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.
-///////////////////////////////////////////////////////////////////////////////
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-
-/**
- * @author $author$
- * @version $Revision: 2268 $
- */
-public class CreateBibORDFAuthors implements LayoutFormatter
-{
-    //~ Methods ////////////////////////////////////////////////////////////////
-
-    public String format(String fieldText) {
-    	// Yeah, the format is quite verbose... sorry about that :)
-    	
-//      <bibo:contribution>
-//        <bibo:Contribution>
-//          <bibo:role rdf:resource="http://purl.org/ontology/bibo/roles/author" />
-//          <bibo:contributor><foaf:Person foaf:name="Ola Spjuth"/></bibo:contributor>
-//          <bibo:position>1</bibo:position>
-//        </bibo:Contribution>
-//      </bibo:contribution>
-
-        StringBuffer sb = new StringBuffer(100);
-
-        if (fieldText.indexOf(" and ") == -1)
-        {
-          singleAuthor(sb, fieldText, 1);
-        }
-        else
-        {
-            String[] names = fieldText.split(" and ");
-            for (int i=0; i<names.length; i++)
-            {
-              singleAuthor(sb, names[i], (i+1));
-              if (i < names.length -1)
-                sb.append("\n");
-            }
-        }
-
-
-
-        fieldText = sb.toString();
-
-        return fieldText;
-    }
-
-    /**
-     * @param sb
-     * @param fieldText
-     */
-    protected void singleAuthor(StringBuffer sb, String author, int position) {
-        sb.append("<bibo:contribution>\n");
-        sb.append("  <bibo:Contribution>\n");
-        sb.append("    <bibo:role rdf:resource=\"http://purl.org/ontology/bibo/roles/author\" />\n");
-        sb.append("    <bibo:contributor><foaf:Person foaf:name=\"" + author + "\"/></bibo:contributor>\n");
-        sb.append("    <bibo:position>" + position + "</bibo:position>\n");
-        sb.append("  </bibo:Contribution>\n");
-        sb.append("</bibo:contribution>\n");
-    }
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile$
+//  Purpose:  Atom representation.
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Authors:  Joerg K. Wegner
+//  Version:  $Revision: 2268 $
+//            $Date: 2007-08-20 01:37:05 +0200 (Mon, 20 Aug 2007) $
+//            $Author: coezbek $
+//
+//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
+//
+//  This program is free software; 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.
+///////////////////////////////////////////////////////////////////////////////
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+
+/**
+ * @author $author$
+ * @version $Revision: 2268 $
+ */
+public class CreateBibORDFAuthors implements LayoutFormatter
+{
+    //~ Methods ////////////////////////////////////////////////////////////////
+
+    public String format(String fieldText) {
+    	// Yeah, the format is quite verbose... sorry about that :)
+    	
+//      <bibo:contribution>
+//        <bibo:Contribution>
+//          <bibo:role rdf:resource="http://purl.org/ontology/bibo/roles/author" />
+//          <bibo:contributor><foaf:Person foaf:name="Ola Spjuth"/></bibo:contributor>
+//          <bibo:position>1</bibo:position>
+//        </bibo:Contribution>
+//      </bibo:contribution>
+
+        StringBuffer sb = new StringBuffer(100);
+
+        if (fieldText.indexOf(" and ") == -1)
+        {
+          singleAuthor(sb, fieldText, 1);
+        }
+        else
+        {
+            String[] names = fieldText.split(" and ");
+            for (int i=0; i<names.length; i++)
+            {
+              singleAuthor(sb, names[i], (i+1));
+              if (i < names.length -1)
+                sb.append("\n");
+            }
+        }
+
+
+
+        fieldText = sb.toString();
+
+        return fieldText;
+    }
+
+    /**
+     * @param sb
+     * @param fieldText
+     */
+    protected void singleAuthor(StringBuffer sb, String author, int position) {
+        sb.append("<bibo:contribution>\n");
+        sb.append("  <bibo:Contribution>\n");
+        sb.append("    <bibo:role rdf:resource=\"http://purl.org/ontology/bibo/roles/author\" />\n");
+        sb.append("    <bibo:contributor><foaf:Person foaf:name=\"" + author + "\"/></bibo:contributor>\n");
+        sb.append("    <bibo:position>" + position + "</bibo:position>\n");
+        sb.append("  </bibo:Contribution>\n");
+        sb.append("</bibo:contribution>\n");
+    }
+}
+///////////////////////////////////////////////////////////////////////////////
+//  END OF FILE.
+///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/layout/format/CreateDocBookAuthors.java b/src/java/net/sf/jabref/export/layout/format/CreateDocBookAuthors.java
old mode 100755
new mode 100644
index 90ad4da..e61d006
--- a/src/java/net/sf/jabref/export/layout/format/CreateDocBookAuthors.java
+++ b/src/java/net/sf/jabref/export/layout/format/CreateDocBookAuthors.java
@@ -1,186 +1,186 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-///////////////////////////////////////////////////////////////////////////////
-//  Filename: $RCSfile$
-//  Purpose:  Atom representation.
-//  Language: Java
-//  Compiler: JDK 1.4
-//  Authors:  Joerg K. Wegner
-//  Version:  $Revision$
-//            $Date$
-//            $Author$
-//
-//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
-//
-//  This program is free software; 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.
-///////////////////////////////////////////////////////////////////////////////
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.WSITools;
-
-import java.util.Vector;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.AuthorList;
-
-
-/**
- * Create DocBook authors formatter.
- *
- * @author $author$
- * @version $Revision$
- */
-public class CreateDocBookAuthors implements LayoutFormatter
-{
-    //~ Methods ////////////////////////////////////////////////////////////////
-
-    static XMLChars xc = new XMLChars();
-
-    public String format(String fieldText)
-    {
-
-        StringBuilder sb = new StringBuilder(100);
-
-        AuthorList al = AuthorList.getAuthorList(fieldText);
-
-        addBody(sb, al, "author");
-        return sb.toString();
-        
-        //		<author><firstname>L.</firstname><surname>Xue</surname></author>
-        //     <author><firstname>F.</firstname><othername role="mi">L.</othername><surname>Stahura</surname></author>
-        //     <author><firstname>J.</firstname><othername role="mi">W.</othername><surname>Godden</surname></author>
-        //     <author><firstname>J.</firstname><surname>Bajorath</surname></author>
-
-
-        /*
-        if (fieldText.indexOf(" and ") == -1)
-        {
-          sb.append("<author>");
-          singleAuthor(sb, fieldText);
-          sb.append("</author>");
-        }
-        else
-        {
-            String[] names = fieldText.split(" and ");
-            for (int i=0; i<names.length; i++)
-            {
-              sb.append("<author>");
-              singleAuthor(sb, names[i]);
-              sb.append("</author>");
-              if (i < names.length -1)
-                sb.append("\n       ");
-            }
-        }
-
-
-
-        fieldText = sb.toString();
-
-        return fieldText;*/
-    }
-
-    public void addBody(StringBuilder sb, AuthorList al, String tagName) {
-        for (int i=0; i<al.size(); i++) {
-            sb.append("<"+tagName+">");
-            AuthorList.Author a = al.getAuthor(i);
-            if ((a.getFirst() != null) && (a.getFirst().length() > 0)) {
-                sb.append("<firstname>");
-                sb.append(xc.format(a.getFirst()));
-                sb.append("</firstname>");
-            }
-            if ((a.getVon() != null) && (a.getVon().length() > 0)) {
-                sb.append("<othername>");
-                sb.append(xc.format(a.getVon()));
-                sb.append("</othername>");
-            }
-            if ((a.getLast() != null) && (a.getLast().length() > 0)) {
-                sb.append("<surname>");
-                sb.append(xc.format(a.getLast()));
-                if ((a.getJr() != null) && (a.getJr().length() > 0)) {
-                    sb.append(" "+xc.format(a.getJr()));
-                }
-                sb.append("</surname>");
-            }
-
-            if (i < al.size()-1)
-                sb.append("</"+tagName+">\n       ");
-            else
-                sb.append("</"+tagName+">");
-        }
-    }
-
-    /**
-     * @param sb
-     * @param author
-     */
-    protected void singleAuthor(StringBuffer sb, String author)
-    {
-        // TODO: replace special characters
-        Vector<String> v = new Vector<String>();
-
-        String authorMod = AuthorList.fixAuthor_firstNameFirst(author);
-
-        WSITools.tokenize(v, authorMod, " \n\r");
-
-        if (v.size() == 1)
-        {
-            sb.append("<surname>");
-            sb.append(v.get(0));
-            sb.append("</surname>");
-        }
-        else if (v.size() == 2)
-        {
-            sb.append("<firstname>");
-            sb.append(v.get(0));
-            sb.append("</firstname>");
-            sb.append("<surname>");
-            sb.append(v.get(1));
-            sb.append("</surname>");
-        }
-        else
-        {
-            sb.append("<firstname>");
-            sb.append(v.get(0));
-            sb.append("</firstname>");
-            sb.append("<othername role=\"mi\">");
-
-            for (int i = 1; i < (v.size() - 1); i++)
-            {
-                sb.append(v.get(i));
-
-                if (i < (v.size() - 2))
-                {
-                    sb.append(' ');
-                }
-            }
-
-            sb.append("</othername>");
-            sb.append("<surname>");
-            sb.append(v.get(v.size() - 1));
-            sb.append("</surname>");
-        }
-    }
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile$
+//  Purpose:  Atom representation.
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Authors:  Joerg K. Wegner
+//  Version:  $Revision$
+//            $Date$
+//            $Author$
+//
+//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
+//
+//  This program is free software; 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.
+///////////////////////////////////////////////////////////////////////////////
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.WSITools;
+
+import java.util.Vector;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+
+/**
+ * Create DocBook authors formatter.
+ *
+ * @author $author$
+ * @version $Revision$
+ */
+public class CreateDocBookAuthors implements LayoutFormatter
+{
+    //~ Methods ////////////////////////////////////////////////////////////////
+
+    static XMLChars xc = new XMLChars();
+
+    public String format(String fieldText)
+    {
+
+        StringBuilder sb = new StringBuilder(100);
+
+        AuthorList al = AuthorList.getAuthorList(fieldText);
+
+        addBody(sb, al, "author");
+        return sb.toString();
+        
+        //		<author><firstname>L.</firstname><surname>Xue</surname></author>
+        //     <author><firstname>F.</firstname><othername role="mi">L.</othername><surname>Stahura</surname></author>
+        //     <author><firstname>J.</firstname><othername role="mi">W.</othername><surname>Godden</surname></author>
+        //     <author><firstname>J.</firstname><surname>Bajorath</surname></author>
+
+
+        /*
+        if (fieldText.indexOf(" and ") == -1)
+        {
+          sb.append("<author>");
+          singleAuthor(sb, fieldText);
+          sb.append("</author>");
+        }
+        else
+        {
+            String[] names = fieldText.split(" and ");
+            for (int i=0; i<names.length; i++)
+            {
+              sb.append("<author>");
+              singleAuthor(sb, names[i]);
+              sb.append("</author>");
+              if (i < names.length -1)
+                sb.append("\n       ");
+            }
+        }
+
+
+
+        fieldText = sb.toString();
+
+        return fieldText;*/
+    }
+
+    public void addBody(StringBuilder sb, AuthorList al, String tagName) {
+        for (int i=0; i<al.size(); i++) {
+            sb.append("<"+tagName+">");
+            AuthorList.Author a = al.getAuthor(i);
+            if ((a.getFirst() != null) && (a.getFirst().length() > 0)) {
+                sb.append("<firstname>");
+                sb.append(xc.format(a.getFirst()));
+                sb.append("</firstname>");
+            }
+            if ((a.getVon() != null) && (a.getVon().length() > 0)) {
+                sb.append("<othername>");
+                sb.append(xc.format(a.getVon()));
+                sb.append("</othername>");
+            }
+            if ((a.getLast() != null) && (a.getLast().length() > 0)) {
+                sb.append("<surname>");
+                sb.append(xc.format(a.getLast()));
+                if ((a.getJr() != null) && (a.getJr().length() > 0)) {
+                    sb.append(" "+xc.format(a.getJr()));
+                }
+                sb.append("</surname>");
+            }
+
+            if (i < al.size()-1)
+                sb.append("</"+tagName+">\n       ");
+            else
+                sb.append("</"+tagName+">");
+        }
+    }
+
+    /**
+     * @param sb
+     * @param author
+     */
+    protected void singleAuthor(StringBuffer sb, String author)
+    {
+        // TODO: replace special characters
+        Vector<String> v = new Vector<String>();
+
+        String authorMod = AuthorList.fixAuthor_firstNameFirst(author);
+
+        WSITools.tokenize(v, authorMod, " \n\r");
+
+        if (v.size() == 1)
+        {
+            sb.append("<surname>");
+            sb.append(v.get(0));
+            sb.append("</surname>");
+        }
+        else if (v.size() == 2)
+        {
+            sb.append("<firstname>");
+            sb.append(v.get(0));
+            sb.append("</firstname>");
+            sb.append("<surname>");
+            sb.append(v.get(1));
+            sb.append("</surname>");
+        }
+        else
+        {
+            sb.append("<firstname>");
+            sb.append(v.get(0));
+            sb.append("</firstname>");
+            sb.append("<othername role=\"mi\">");
+
+            for (int i = 1; i < (v.size() - 1); i++)
+            {
+                sb.append(v.get(i));
+
+                if (i < (v.size() - 2))
+                {
+                    sb.append(' ');
+                }
+            }
+
+            sb.append("</othername>");
+            sb.append("<surname>");
+            sb.append(v.get(v.size() - 1));
+            sb.append("</surname>");
+        }
+    }
+}
+///////////////////////////////////////////////////////////////////////////////
+//  END OF FILE.
+///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/layout/format/CreateDocBookEditors.java b/src/java/net/sf/jabref/export/layout/format/CreateDocBookEditors.java
old mode 100755
new mode 100644
index 6bfb8db..7c1e367
--- a/src/java/net/sf/jabref/export/layout/format/CreateDocBookEditors.java
+++ b/src/java/net/sf/jabref/export/layout/format/CreateDocBookEditors.java
@@ -1,65 +1,65 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-///////////////////////////////////////////////////////////////////////////////
-//  Filename: $RCSfile$
-//  Purpose:  Atom representation.
-//  Language: Java
-//  Compiler: JDK 1.4
-//  Authors:  Joerg K. Wegner
-//  Version:  $Revision$
-//            $Date$
-//            $Author$
-//
-//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
-//
-//  This program is free software; 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.
-///////////////////////////////////////////////////////////////////////////////
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.AuthorList;
-
-
-/**
- * Create DocBook editors formatter.
- *
- * @author $author$
- * @version $Revision$
- */
-public class CreateDocBookEditors extends CreateDocBookAuthors
-{
-    //~ Methods ////////////////////////////////////////////////////////////////
-
-    public String format(String fieldText)
-    {
-        //		<editor><firstname>L.</firstname><surname>Xue</surname></editor>
-        StringBuilder sb = new StringBuilder(100);
-        AuthorList al = AuthorList.getAuthorList(fieldText);
-        addBody(sb, al, "editor");
-        return sb.toString();
-        
-    }
-
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile$
+//  Purpose:  Atom representation.
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Authors:  Joerg K. Wegner
+//  Version:  $Revision$
+//            $Date$
+//            $Author$
+//
+//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
+//
+//  This program is free software; 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.
+///////////////////////////////////////////////////////////////////////////////
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.AuthorList;
+
+
+/**
+ * Create DocBook editors formatter.
+ *
+ * @author $author$
+ * @version $Revision$
+ */
+public class CreateDocBookEditors extends CreateDocBookAuthors
+{
+    //~ Methods ////////////////////////////////////////////////////////////////
+
+    public String format(String fieldText)
+    {
+        //		<editor><firstname>L.</firstname><surname>Xue</surname></editor>
+        StringBuilder sb = new StringBuilder(100);
+        AuthorList al = AuthorList.getAuthorList(fieldText);
+        addBody(sb, al, "editor");
+        return sb.toString();
+        
+    }
+
+}
+///////////////////////////////////////////////////////////////////////////////
+//  END OF FILE.
+///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/layout/format/CurrentDate.java b/src/java/net/sf/jabref/export/layout/format/CurrentDate.java
index bd444be..aa3473f 100644
--- a/src/java/net/sf/jabref/export/layout/format/CurrentDate.java
+++ b/src/java/net/sf/jabref/export/layout/format/CurrentDate.java
@@ -1,59 +1,59 @@
-/*
- Copyright (C) 2005 Andreas Rudert
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-*/
-package net.sf.jabref.export.layout.format;
-
-import java.util.Date;
-import java.text.SimpleDateFormat;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-
-/**
- * Inserts the current date (the time a database is being exported).
- * 
- * <p>If a fieldText is given, it must be a valid {@link SimpleDateFormat} pattern.
- * If none is given, the format pattern will be <code>yyyy.MM.dd hh:mm:ss z</code></p>
- *
- * @author andreas_sf at rudert-home dot de
- * @version $Revision$
- */
-public class CurrentDate implements LayoutFormatter
-{
-    private static final String defaultFormat = "yyyy.MM.dd hh:mm:ss z";
-    
-    /*
-     *  (non-Javadoc)
-     * @see net.sf.jabref.export.layout.LayoutFormatter#format(java.lang.String)
-     */ 
-    public String format(String fieldText)
-    {
-      String format = defaultFormat;
-      if (fieldText != null && !"".equals(fieldText.trim())) {
-        format = fieldText;
-      }
-      return new SimpleDateFormat(format).format(new Date());
-    }
-}
+/*
+ Copyright (C) 2005 Andreas Rudert
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+*/
+package net.sf.jabref.export.layout.format;
+
+import java.util.Date;
+import java.text.SimpleDateFormat;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+
+/**
+ * Inserts the current date (the time a database is being exported).
+ * 
+ * <p>If a fieldText is given, it must be a valid {@link SimpleDateFormat} pattern.
+ * If none is given, the format pattern will be <code>yyyy.MM.dd hh:mm:ss z</code></p>
+ *
+ * @author andreas_sf at rudert-home dot de
+ * @version $Revision$
+ */
+public class CurrentDate implements LayoutFormatter
+{
+    private static final String defaultFormat = "yyyy.MM.dd hh:mm:ss z";
+    
+    /*
+     *  (non-Javadoc)
+     * @see net.sf.jabref.export.layout.LayoutFormatter#format(java.lang.String)
+     */ 
+    public String format(String fieldText)
+    {
+      String format = defaultFormat;
+      if (fieldText != null && !"".equals(fieldText.trim())) {
+        format = fieldText;
+      }
+      return new SimpleDateFormat(format).format(new Date());
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/DOICheck.java b/src/java/net/sf/jabref/export/layout/format/DOICheck.java
index 23faee3..7c905e2 100644
--- a/src/java/net/sf/jabref/export/layout/format/DOICheck.java
+++ b/src/java/net/sf/jabref/export/layout/format/DOICheck.java
@@ -1,48 +1,48 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-
-/**
- * Used to fix [ 1588028 ] export HTML table doi url.
- * 
- * Will prepend "http://dx.doi.org/" if only doi number and not a URL is given.
- *
- * @author mark-schenk
- * @author olly98
- */
-public class DOICheck implements LayoutFormatter {
-
-	public String format(String fieldText) {
-		
-		if (fieldText == null){
-			return null;
-		}
-		
-		if (fieldText.trim().isEmpty()) {
-		    return "";
-		}
-		
-		if (Util.checkForDOIwithHTTPprefix(fieldText)) {
-		    return fieldText;
-		} else {
-		    return Globals.DOI_LOOKUP_PREFIX.concat(Util.getDOI(fieldText));
-		}
-	}
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+
+/**
+ * Used to fix [ 1588028 ] export HTML table doi url.
+ * 
+ * Will prepend "http://dx.doi.org/" if only doi number and not a URL is given.
+ *
+ * @author mark-schenk
+ * @author olly98
+ */
+public class DOICheck implements LayoutFormatter {
+
+	public String format(String fieldText) {
+		
+		if (fieldText == null){
+			return null;
+		}
+		
+		if (fieldText.trim().isEmpty()) {
+		    return "";
+		}
+		
+		if (Util.checkForDOIwithHTTPprefix(fieldText)) {
+		    return fieldText;
+		} else {
+		    return Globals.DOI_LOOKUP_PREFIX.concat(Util.getDOI(fieldText));
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/DOIStrip.java b/src/java/net/sf/jabref/export/layout/format/DOIStrip.java
index d268491..2b5a7ec 100644
--- a/src/java/net/sf/jabref/export/layout/format/DOIStrip.java
+++ b/src/java/net/sf/jabref/export/layout/format/DOIStrip.java
@@ -1,37 +1,37 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.Util;
-
-/**
- * Will strip any prefixes from the DOI field, in order to output only the DOI number
- * 
- * @author mark-schenk 
- * @author olly98
- *
- */
-public class DOIStrip implements LayoutFormatter {
-
-	public String format(String fieldText) {
-        if (fieldText == null){
-            return null;
-        } else {
-            return Util.getDOI(fieldText);
-        }
-	}
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.Util;
+
+/**
+ * Will strip any prefixes from the DOI field, in order to output only the DOI number
+ * 
+ * @author mark-schenk 
+ * @author olly98
+ *
+ */
+public class DOIStrip implements LayoutFormatter {
+
+	public String format(String fieldText) {
+        if (fieldText == null){
+            return null;
+        } else {
+            return Util.getDOI(fieldText);
+        }
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/Default.java b/src/java/net/sf/jabref/export/layout/format/Default.java
index ddf7feb..d2bee50 100644
--- a/src/java/net/sf/jabref/export/layout/format/Default.java
+++ b/src/java/net/sf/jabref/export/layout/format/Default.java
@@ -1,35 +1,35 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.ParamLayoutFormatter;
-
-/**
- * Layout formatter that puts in a default value (given as argument) if the field is empty.
- * Empty means null or an empty string.
- */
-public class Default implements ParamLayoutFormatter {
-
-    String defValue = "";
-
-    public void setArgument(String arg) {
-        this.defValue = arg;
-    }
-
-    public String format(String fieldText) {
-        return fieldText != null && (fieldText.length() > 0) ? fieldText : defValue;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.ParamLayoutFormatter;
+
+/**
+ * Layout formatter that puts in a default value (given as argument) if the field is empty.
+ * Empty means null or an empty string.
+ */
+public class Default implements ParamLayoutFormatter {
+
+    String defValue = "";
+
+    public void setArgument(String arg) {
+        this.defValue = arg;
+    }
+
+    public String format(String fieldText) {
+        return fieldText != null && (fieldText.length() > 0) ? fieldText : defValue;
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/FileLink.java b/src/java/net/sf/jabref/export/layout/format/FileLink.java
index 34157e8..5cf1c22 100644
--- a/src/java/net/sf/jabref/export/layout/format/FileLink.java
+++ b/src/java/net/sf/jabref/export/layout/format/FileLink.java
@@ -1,102 +1,102 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import java.io.File;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-import net.sf.jabref.export.layout.ParamLayoutFormatter;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.gui.FileListTableModel;
-import java.io.IOException;
-
-/**
- * Export formatter that handles the file link list of JabRef 2.3 and later, by
- * selecting the first file link, if any, specified by the field.
- */
-public class FileLink implements ParamLayoutFormatter {
-
-    String fileType = null;
-
-    public String format(String field) {
-        FileListTableModel tableModel = new FileListTableModel();
-        if (field == null)
-            return "";
-
-        tableModel.setContent(field);
-        String link = null;
-        if (fileType == null) {
-            // No file type specified. Simply take the first link.
-            if (tableModel.getRowCount() > 0)
-                link = tableModel.getEntry(0).getLink();
-        }
-        else {
-            // A file type is specified:
-            for (int i=0; i< tableModel.getRowCount(); i++) {
-                FileListEntry flEntry = tableModel.getEntry(i);
-                if (flEntry.getType().getName().toLowerCase().equals(fileType)) {
-                    link = flEntry.getLink();
-                    break;
-                }
-            }
-        }
-        
-        if (link == null)
-            return "";
-
-
-        String[] dirs;
-        // We need to resolve the file directory from the database's metadata,
-        // but that is not available from a formatter. Therefore, as an
-        // ugly hack, the export routine has set a global variable before
-        // starting the export, which contains the database's file directory:
-        if (Globals.prefs.fileDirForDatabase != null)
-            dirs = Globals.prefs.fileDirForDatabase;
-        else
-            dirs = new String[] {Globals.prefs.get(GUIGlobals.FILE_FIELD + "Directory")};
-        
-		File f = Util.expandFilename(link, dirs);
-
-        /*
-		 * Stumbled over this while investigating
-		 *
-		 * https://sourceforge.net/tracker/index.php?func=detail&aid=1469903&group_id=92314&atid=600306
-		 */
-		if (f != null) {
-            try {
-                return f.getCanonicalPath();//f.toURI().toString();
-            } catch (IOException e) {
-                e.printStackTrace();
-                return f.getPath();
-            }
-        } else {
-			return link;
-		}
-
-
-    }
-
-    /**
-     * This method is called if the layout file specifies an argument for this
-     * formatter. We use it as an indicator of which file type we should look for.
-     * @param arg The file type.
-     */
-    public void setArgument(String arg) {
-        fileType = arg;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import java.io.File;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+import net.sf.jabref.export.layout.ParamLayoutFormatter;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileListTableModel;
+import java.io.IOException;
+
+/**
+ * Export formatter that handles the file link list of JabRef 2.3 and later, by
+ * selecting the first file link, if any, specified by the field.
+ */
+public class FileLink implements ParamLayoutFormatter {
+
+    String fileType = null;
+
+    public String format(String field) {
+        FileListTableModel tableModel = new FileListTableModel();
+        if (field == null)
+            return "";
+
+        tableModel.setContent(field);
+        String link = null;
+        if (fileType == null) {
+            // No file type specified. Simply take the first link.
+            if (tableModel.getRowCount() > 0)
+                link = tableModel.getEntry(0).getLink();
+        }
+        else {
+            // A file type is specified:
+            for (int i=0; i< tableModel.getRowCount(); i++) {
+                FileListEntry flEntry = tableModel.getEntry(i);
+                if (flEntry.getType().getName().toLowerCase().equals(fileType)) {
+                    link = flEntry.getLink();
+                    break;
+                }
+            }
+        }
+        
+        if (link == null)
+            return "";
+
+
+        String[] dirs;
+        // We need to resolve the file directory from the database's metadata,
+        // but that is not available from a formatter. Therefore, as an
+        // ugly hack, the export routine has set a global variable before
+        // starting the export, which contains the database's file directory:
+        if (Globals.prefs.fileDirForDatabase != null)
+            dirs = Globals.prefs.fileDirForDatabase;
+        else
+            dirs = new String[] {Globals.prefs.get(GUIGlobals.FILE_FIELD + "Directory")};
+        
+		File f = Util.expandFilename(link, dirs);
+
+        /*
+		 * Stumbled over this while investigating
+		 *
+		 * https://sourceforge.net/tracker/index.php?func=detail&aid=1469903&group_id=92314&atid=600306
+		 */
+		if (f != null) {
+            try {
+                return f.getCanonicalPath();//f.toURI().toString();
+            } catch (IOException e) {
+                e.printStackTrace();
+                return f.getPath();
+            }
+        } else {
+			return link;
+		}
+
+
+    }
+
+    /**
+     * This method is called if the layout file specifies an argument for this
+     * formatter. We use it as an indicator of which file type we should look for.
+     * @param arg The file type.
+     */
+    public void setArgument(String arg) {
+        fileType = arg;
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/FirstPage.java b/src/java/net/sf/jabref/export/layout/format/FirstPage.java
index 65a7b3b..3e0a6f3 100644
--- a/src/java/net/sf/jabref/export/layout/format/FirstPage.java
+++ b/src/java/net/sf/jabref/export/layout/format/FirstPage.java
@@ -1,37 +1,37 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Formatter that returns the first page from the "pages" field, if set.
- *
- * For instance, if the pages field is set to "345-360" or "345--360",
- * this formatter will return "345".
- */
-public class FirstPage implements LayoutFormatter {
-
-    public String format(String s) {
-        if (s == null)
-			return "";
-		String[] pageParts = s.split("[ \\-]+");
-		if (pageParts.length == 2)
-            return pageParts[0];
-        else return s;
-
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Formatter that returns the first page from the "pages" field, if set.
+ *
+ * For instance, if the pages field is set to "345-360" or "345--360",
+ * this formatter will return "345".
+ */
+public class FirstPage implements LayoutFormatter {
+
+    public String format(String s) {
+        if (s == null)
+			return "";
+		String[] pageParts = s.split("[ \\-]+");
+		if (pageParts.length == 2)
+            return pageParts[0];
+        else return s;
+
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/FormatChars.java b/src/java/net/sf/jabref/export/layout/format/FormatChars.java
index 76d5eaa..25a0ba1 100644
--- a/src/java/net/sf/jabref/export/layout/format/FormatChars.java
+++ b/src/java/net/sf/jabref/export/layout/format/FormatChars.java
@@ -1,433 +1,433 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-import java.util.HashMap;
-
-/**
- * This formatter converts LaTeX character sequences their equicalent unicode characters,
- * and removes other LaTeX commands without handling them.
- */
-public class FormatChars implements LayoutFormatter {
-
-    public static HashMap<String, String> CHARS = new HashMap<String, String>();
-
-    static {
-		CHARS.put("`A", "À"); // #192
-		CHARS.put("'A", "Á"); // #193
-		CHARS.put("^A", "Â"); // #194
-		CHARS.put("~A", "Ã"); // #195
-		CHARS.put("\"A", "Ä"); // #196
-		CHARS.put("AA", "Å"); // #197
-		CHARS.put("AE", "Æ"); // #198
-		CHARS.put("cC", "Ç"); // #199
-        CHARS.put("`E", "È"); // #200
-		CHARS.put("'E", "É"); // #201
-		CHARS.put("^E", "Ê"); // #202
-		CHARS.put("\"E", "Ë"); // #203
-		CHARS.put("`I", "Ì"); // #204
-		CHARS.put("'I", "Í"); // #205
-		CHARS.put("^I", "Î"); // #206
-		CHARS.put("\"I", "Ï"); // #207
-		CHARS.put("DH", "Ð"); // #208
-		CHARS.put("~N", "Ñ"); // #209
-		CHARS.put("`O", "Ò"); // #210
-		CHARS.put("'O", "Ó"); // #211
-		CHARS.put("^O", "Ô"); // #212
-		CHARS.put("~O", "Õ"); // #213
-		CHARS.put("\"O", "Ö"); // #214
-		// According to ISO 8859-1 the "\times" symbol should be placed here
-		// (#215).
-		// Omitting this, because it is a mathematical symbol.
-		CHARS.put("O", "Ø"); // #216
-		CHARS.put("`U", "Ù"); // #217
-		CHARS.put("'U", "Ú"); // #218
-		CHARS.put("^U", "Û"); // #219
-		CHARS.put("\"U", "Ü"); // #220
-		CHARS.put("'Y", "Ý"); // #221
-		CHARS.put("TH", "Þ"); // #222
-		CHARS.put("ss", "ß"); // #223
-		CHARS.put("`a", "à"); // #224
-		CHARS.put("'a", "á"); // #225
-		CHARS.put("^a", "â"); // #226
-		CHARS.put("~a", "ã"); // #227
-		CHARS.put("\"a", "ä"); // #228
-		CHARS.put("aa", "å"); // #229
-		CHARS.put("ae", "æ"); // #230
-		CHARS.put("cc", "ç"); // #231
-		CHARS.put("`e", "è"); // #232
-		CHARS.put("'e", "é"); // #233
-		CHARS.put("^e", "ê"); // #234
-		CHARS.put("\"e", "ë"); // #235
-		CHARS.put("`i", "ì"); // #236
-		CHARS.put("'i", "í"); // #237
-		CHARS.put("^i", "î"); // #238
-		CHARS.put("\"i", "ï"); // #239
-		CHARS.put("dh", "ð"); // #240
-		CHARS.put("~n", "ñ"); // #241
-		CHARS.put("`o", "ò"); // #242
-		CHARS.put("'o", "ó"); // #243
-		CHARS.put("^o", "ô"); // #244
-		CHARS.put("~o", "õ"); // #245
-		CHARS.put("\"o", "ö"); // #246
-		// According to ISO 8859-1 the "\div" symbol should be placed here
-		// (#247).
-		// Omitting this, because it is a mathematical symbol.
-		CHARS.put("o", "ø"); // #248
-		CHARS.put("`u", "ù"); // #249
-		CHARS.put("'u", "ú"); // #250
-		CHARS.put("^u", "û"); // #251
-		CHARS.put("\"u", "ü"); // #252
-		CHARS.put("'y", "ý"); // #253
-		CHARS.put("th", "þ"); // #254
-		CHARS.put("\"y", "ÿ"); // #255
-
-		// HTML special characters without names (UNICODE Latin Extended-A),
-		// indicated by UNICODE number
-		CHARS.put("=A", "Ā"); // "Amacr"
-		CHARS.put("=a", "ā"); // "amacr"
-		CHARS.put("uA", "Ă"); // "Abreve"
-		CHARS.put("ua", "ă"); // "abreve"
-		CHARS.put("kA", "Ą"); // "Aogon"
-		CHARS.put("ka", "ą"); // "aogon"
-		CHARS.put("'C", "Ć"); // "Cacute"
-		CHARS.put("'c", "ć"); // "cacute"
-		CHARS.put("^C", "Ĉ"); // "Ccirc"
-		CHARS.put("^c", "ĉ"); // "ccirc"
-		CHARS.put(".C", "Ċ"); // "Cdot"
-		CHARS.put(".c", "ċ"); // "cdot"
-		CHARS.put("vC", "Č"); // "Ccaron"
-		CHARS.put("vc", "č"); // "ccaron"
-		CHARS.put("vD", "Ď"); // "Dcaron"
-		// Symbol #271 (d�) has no special Latex command
-		CHARS.put("DJ", "Đ"); // "Dstrok"
-		CHARS.put("dj", "đ"); // "dstrok"
-		CHARS.put("=E", "Ē"); // "Emacr"
-		CHARS.put("=e", "ē"); // "emacr"
-		CHARS.put("uE", "Ĕ"); // "Ebreve"
-		CHARS.put("ue", "ĕ"); // "ebreve"
-		CHARS.put(".E", "Ė"); // "Edot"
-		CHARS.put(".e", "ė"); // "edot"
-		CHARS.put("kE", "Ę"); // "Eogon"
-		CHARS.put("ke", "ę"); // "eogon"
-		CHARS.put("vE", "Ě"); // "Ecaron"
-		CHARS.put("ve", "ě"); // "ecaron"
-		CHARS.put("^G", "Ĝ"); // "Gcirc"
-		CHARS.put("^g", "ĝ"); // "gcirc"
-		CHARS.put("uG", "Ğ"); // "Gbreve"
-		CHARS.put("ug", "ğ"); // "gbreve"
-		CHARS.put(".G", "Ġ"); // "Gdot"
-		CHARS.put(".g", "ġ"); // "gdot"
-		CHARS.put("cG", "Ģ"); // "Gcedil"
-		CHARS.put("'g", "ģ"); // "gacute"
-		CHARS.put("^H", "Ĥ"); // "Hcirc"
-		CHARS.put("^h", "ĥ"); // "hcirc"
-		CHARS.put("Hstrok", "Ħ"); // "Hstrok"
-		CHARS.put("hstrok", "ħ"); // "hstrok"
-		CHARS.put("~I", "Ĩ"); // "Itilde"
-		CHARS.put("~i", "ĩ"); // "itilde"
-		CHARS.put("=I", "Ī"); // "Imacr"
-		CHARS.put("=i", "ī"); // "imacr"
-		CHARS.put("uI", "Ĭ"); // "Ibreve"
-		CHARS.put("ui", "ĭ"); // "ibreve"
-		CHARS.put("kI", "Į"); // "Iogon"
-		CHARS.put("ki", "į"); // "iogon"
-		CHARS.put(".I", "İ"); // "Idot"
-		CHARS.put("i", "ı"); // "inodot"
-		// Symbol #306 (IJ) has no special Latex command
-		// Symbol #307 (ij) has no special Latex command
-		CHARS.put("^J", "Ĵ"); // "Jcirc"
-		CHARS.put("^j", "ĵ"); // "jcirc"
-		CHARS.put("cK", "Ķ"); // "Kcedil"
-		CHARS.put("ck", "ķ"); // "kcedil"
-		// Symbol #312 (k) has no special Latex command
-		CHARS.put("'L", "Ĺ"); // "Lacute"
-		CHARS.put("'l", "ĺ"); // "lacute"
-		CHARS.put("cL", "Ļ"); // "Lcedil"
-		CHARS.put("cl", "ļ"); // "lcedil"
-		// Symbol #317 (L�) has no special Latex command
-		// Symbol #318 (l�) has no special Latex command
-		CHARS.put("Lmidot", "Ŀ"); // "Lmidot"
-		CHARS.put("lmidot", "ŀ"); // "lmidot"
-		CHARS.put("L", "Ł"); // "Lstrok"
-		CHARS.put("l", "ł"); // "lstrok"
-		CHARS.put("'N", "Ń"); // "Nacute"
-		CHARS.put("'n", "ń"); // "nacute"
-		CHARS.put("cN", "Ņ"); // "Ncedil"
-		CHARS.put("cn", "ņ"); // "ncedil"
-		CHARS.put("vN", "Ň"); // "Ncaron"
-		CHARS.put("vn", "ň"); // "ncaron"
-		// Symbol #329 (�n) has no special Latex command
-		CHARS.put("NG", "Ŋ"); // "ENG"
-		CHARS.put("ng", "ŋ"); // "eng"
-		CHARS.put("=O", "Ō"); // "Omacr"
-		CHARS.put("=o", "ō"); // "omacr"
-		CHARS.put("uO", "Ŏ"); // "Obreve"
-		CHARS.put("uo", "ŏ"); // "obreve"
-		CHARS.put("HO", "Ő"); // "Odblac"
-		CHARS.put("Ho", "ő"); // "odblac"
-		CHARS.put("OE", "Œ"); // "OElig"
-		CHARS.put("oe", "œ"); // "oelig"
-		CHARS.put("'R", "Ŕ"); // "Racute"
-		CHARS.put("'r", "ŕ"); // "racute"
-		CHARS.put("cR", "Ŗ"); // "Rcedil"
-		CHARS.put("cr", "ŗ"); // "rcedil"
-		CHARS.put("vR", "Ř"); // "Rcaron"
-		CHARS.put("vr", "ř"); // "rcaron"
-		CHARS.put("'S", "Ś"); // "Sacute"
-		CHARS.put("'s", "ś"); // "sacute"
-		CHARS.put("^S", "Ŝ"); // "Scirc"
-		CHARS.put("^s", "ŝ"); // "scirc"
-		CHARS.put("cS", "Ş"); // "Scedil"
-		CHARS.put("cs", "ş"); // "scedil"
-		CHARS.put("vS", "Š"); // "Scaron"
-		CHARS.put("vs", "š"); // "scaron"
-		CHARS.put("cT", "Ţ"); // "Tcedil"
-		CHARS.put("ct", "ţ"); // "tcedil"
-		CHARS.put("vT", "Ť"); // "Tcaron"
-		// Symbol #357 (t�) has no special Latex command
-		CHARS.put("Tstrok", "Ŧ"); // "Tstrok"
-		CHARS.put("tstrok", "ŧ"); // "tstrok"
-		CHARS.put("~U", "Ũ"); // "Utilde"
-		CHARS.put("~u", "ũ"); // "utilde"
-		CHARS.put("=U", "Ū"); // "Umacr"
-		CHARS.put("=u", "ū"); // "umacr"
-		CHARS.put("uU", "Ŭ"); // "Ubreve"
-		CHARS.put("uu", "ŭ"); // "ubreve"
-		CHARS.put("rU", "Ů"); // "Uring"
-		CHARS.put("ru", "ů"); // "uring"
-		CHARS.put("HU", "ů"); // "Odblac"
-		CHARS.put("Hu", "ű"); // "odblac"
-		CHARS.put("kU", "Ų"); // "Uogon"
-		CHARS.put("ku", "ų"); // "uogon"
-		CHARS.put("^W", "Ŵ"); // "Wcirc"
-		CHARS.put("^w", "ŵ"); // "wcirc"
-		CHARS.put("^Y", "Ŷ"); // "Ycirc"
-		CHARS.put("^y", "ŷ"); // "ycirc"
-		CHARS.put("\"Y", "Ÿ"); // "Yuml"
-		CHARS.put("'Z", "Ź"); // "Zacute"
-		CHARS.put("'z", "ź"); // "zacute"
-		CHARS.put(".Z", "Ż"); // "Zdot"
-		CHARS.put(".z", "ż"); // "zdot"
-		CHARS.put("vZ", "Ž"); // "Zcaron"
-		CHARS.put("vz", "ž"); // "zcaron"
-		// Symbol #383 (f) has no special Latex command
-        CHARS.put("%", "%"); // percent sign
-    }
-
-    public String format(String field) {
-		int i;
-		field = field.replaceAll("&|\\\\&", "&").replaceAll("[\\n]{1,}", "<p>");
-
-		StringBuffer sb = new StringBuffer();
-		StringBuffer currentCommand = null;
-		
-		char c;
-		boolean escaped = false, incommand = false;
-		
-		for (i = 0; i < field.length(); i++) {
-			c = field.charAt(i);
-			if (escaped && (c == '\\')) {
-				sb.append('\\');
-				escaped = false;
-			} else if (c == '\\') {
-				if (incommand){
-					/* Close Command */
-					String command = currentCommand.toString();
-					Object result = CHARS.get(command);
-					if (result != null) {
-						sb.append((String) result);
-					} else {
-						sb.append(command);
-					}
-				}
-				escaped = true;
-				incommand = true;
-				currentCommand = new StringBuffer();
-			} else if (!incommand && (c == '{' || c == '}')) {
-				// Swallow the brace.
-			} else if (Character.isLetter(c) || (c == '%')
-				|| (Globals.SPECIAL_COMMAND_CHARS.indexOf(String.valueOf(c)) >= 0)) {
-				escaped = false;
-
-                if (!incommand)
-					sb.append(c);
-					// Else we are in a command, and should not keep the letter.
-				else {
-					currentCommand.append(c);
-                    testCharCom: if ((currentCommand.length() == 1)
-						&& (Globals.SPECIAL_COMMAND_CHARS.indexOf(currentCommand.toString()) >= 0)) {
-						// This indicates that we are in a command of the type
-						// \^o or \~{n}
-						if (i >= field.length() - 1)
-							break testCharCom;
-
-						String command = currentCommand.toString();
-						i++;
-						c = field.charAt(i);
-						// System.out.println("next: "+(char)c);
-						String combody;
-						if (c == '{') {
-							IntAndString part = getPart(field, i, false);
-							i += part.i;
-							combody = part.s;
-						} else {
-							combody = field.substring(i, i + 1);
-							// System.out.println("... "+combody);
-						}
-						Object result = CHARS.get(command + combody);
-
-						if (result != null)
-							sb.append((String) result);
-
-						incommand = false;
-						escaped = false;
-					} else { 
-						//	Are we already at the end of the string?
-						if (i + 1 == field.length()){
-							String command = currentCommand.toString();
-                            Object result = CHARS.get(command);
-							/* If found, then use translated version. If not,
-							 * then keep
-							 * the text of the parameter intact.
-							 */
-							if (result != null) {
-								sb.append((String) result);
-							} else {
-								sb.append(command);
-							}
-							
-						}
-					}
-				}
-			} else {
-				String argument = null;
-
-				if (!incommand) {
-					sb.append(c);
-				} else if (Character.isWhitespace(c) || (c == '{') || (c == '}')) {
-					// First test if we are already at the end of the string.
-					// if (i >= field.length()-1)
-					// break testContent;
-
-					String command = currentCommand.toString();
-                                                
-                    if (c == '{') {
-						IntAndString part = getPart(field, i, true);
-						i += part.i;
-						argument = part.s;
-						if (argument != null) {
-							// handle common case of general latex command
-							Object result = CHARS.get(command + argument);
-							// System.out.print("command: "+command+", arg: "+argument);
-							// System.out.print(", result: ");
-							// If found, then use translated version. If not, then keep
-							// the
-							// text of the parameter intact.
-							if (result != null) {
-								sb.append((String) result);
-							} else {
-								sb.append(argument);
-							}
-						}
-                    } else if (c == '}') {
-                        // This end brace terminates a command. This can be the case in
-                        // constructs like {\aa}. The correct behaviour should be to
-                        // substitute the evaluated command and swallow the brace:
-                        Object result = CHARS.get(command);
-                        if (result != null) {
-                            sb.append((String) result);
-                        } else {
-                            // If the command is unknown, just print it:
-                            sb.append(command);
-                        }
-                    } else {
-						Object result = CHARS.get(command);
-						if (result != null) {
-							sb.append((String) result);
-						} else {
-							sb.append(command);
-						}
-						sb.append(' ');
-					}
-				}/* else if (c == '}') {
-                    System.out.printf("com term by }: '%s'\n", currentCommand.toString());
-
-                    argument = "";
-				}*/ else {
-					/*
-					 * TODO: this point is reached, apparently, if a command is
-					 * terminated in a strange way, such as with "$\omega$".
-					 * Also, the command "\&" causes us to get here. The former
-					 * issue is maybe a little difficult to address, since it
-					 * involves the LaTeX math mode. We don't have a complete
-					 * LaTeX parser, so maybe it's better to ignore these
-					 * commands?
-					 */
-				}
-				
-				incommand = false;
-				escaped = false;
-			}
-		}
-
-		return sb.toString();
-	}
-
-	private IntAndString getPart(String text, int i, boolean terminateOnEndBraceOnly) {
-		char c;
-		int count = 0;
-		
-		StringBuffer part = new StringBuffer();
-		
-		// advance to first char and skip wihitespace
-		i++;
-		while (i < text.length() && Character.isWhitespace(text.charAt(i))){
-			i++;
-		}
-		
-		// then grab whathever is the first token (counting braces)
-		while (i < text.length()){
-			c = text.charAt(i);
-			if (!terminateOnEndBraceOnly && count == 0 && Character.isWhitespace(c)) {
-				i--; // end argument and leave whitespace for further
-					 // processing
-				break;
-			}
-			if (c == '}' && --count < 0)
-				break;
-			else if (c == '{')
-				count++;
-			part.append(c);
-			i++;
-		}
-		return new IntAndString(part.length(), format(part.toString()));
-	}
-
-	private class IntAndString {
-		public int i;
-
-		String s;
-
-		public IntAndString(int i, String s) {
-			this.i = i;
-			this.s = s;
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+import java.util.HashMap;
+
+/**
+ * This formatter converts LaTeX character sequences their equicalent unicode characters,
+ * and removes other LaTeX commands without handling them.
+ */
+public class FormatChars implements LayoutFormatter {
+
+    public static HashMap<String, String> CHARS = new HashMap<String, String>();
+
+    static {
+		CHARS.put("`A", "À"); // #192
+		CHARS.put("'A", "Á"); // #193
+		CHARS.put("^A", "Â"); // #194
+		CHARS.put("~A", "Ã"); // #195
+		CHARS.put("\"A", "Ä"); // #196
+		CHARS.put("AA", "Å"); // #197
+		CHARS.put("AE", "Æ"); // #198
+		CHARS.put("cC", "Ç"); // #199
+        CHARS.put("`E", "È"); // #200
+		CHARS.put("'E", "É"); // #201
+		CHARS.put("^E", "Ê"); // #202
+		CHARS.put("\"E", "Ë"); // #203
+		CHARS.put("`I", "Ì"); // #204
+		CHARS.put("'I", "Í"); // #205
+		CHARS.put("^I", "Î"); // #206
+		CHARS.put("\"I", "Ï"); // #207
+		CHARS.put("DH", "Ð"); // #208
+		CHARS.put("~N", "Ñ"); // #209
+		CHARS.put("`O", "Ò"); // #210
+		CHARS.put("'O", "Ó"); // #211
+		CHARS.put("^O", "Ô"); // #212
+		CHARS.put("~O", "Õ"); // #213
+		CHARS.put("\"O", "Ö"); // #214
+		// According to ISO 8859-1 the "\times" symbol should be placed here
+		// (#215).
+		// Omitting this, because it is a mathematical symbol.
+		CHARS.put("O", "Ø"); // #216
+		CHARS.put("`U", "Ù"); // #217
+		CHARS.put("'U", "Ú"); // #218
+		CHARS.put("^U", "Û"); // #219
+		CHARS.put("\"U", "Ü"); // #220
+		CHARS.put("'Y", "Ý"); // #221
+		CHARS.put("TH", "Þ"); // #222
+		CHARS.put("ss", "ß"); // #223
+		CHARS.put("`a", "à"); // #224
+		CHARS.put("'a", "á"); // #225
+		CHARS.put("^a", "â"); // #226
+		CHARS.put("~a", "ã"); // #227
+		CHARS.put("\"a", "ä"); // #228
+		CHARS.put("aa", "å"); // #229
+		CHARS.put("ae", "æ"); // #230
+		CHARS.put("cc", "ç"); // #231
+		CHARS.put("`e", "è"); // #232
+		CHARS.put("'e", "é"); // #233
+		CHARS.put("^e", "ê"); // #234
+		CHARS.put("\"e", "ë"); // #235
+		CHARS.put("`i", "ì"); // #236
+		CHARS.put("'i", "í"); // #237
+		CHARS.put("^i", "î"); // #238
+		CHARS.put("\"i", "ï"); // #239
+		CHARS.put("dh", "ð"); // #240
+		CHARS.put("~n", "ñ"); // #241
+		CHARS.put("`o", "ò"); // #242
+		CHARS.put("'o", "ó"); // #243
+		CHARS.put("^o", "ô"); // #244
+		CHARS.put("~o", "õ"); // #245
+		CHARS.put("\"o", "ö"); // #246
+		// According to ISO 8859-1 the "\div" symbol should be placed here
+		// (#247).
+		// Omitting this, because it is a mathematical symbol.
+		CHARS.put("o", "ø"); // #248
+		CHARS.put("`u", "ù"); // #249
+		CHARS.put("'u", "ú"); // #250
+		CHARS.put("^u", "û"); // #251
+		CHARS.put("\"u", "ü"); // #252
+		CHARS.put("'y", "ý"); // #253
+		CHARS.put("th", "þ"); // #254
+		CHARS.put("\"y", "ÿ"); // #255
+
+		// HTML special characters without names (UNICODE Latin Extended-A),
+		// indicated by UNICODE number
+		CHARS.put("=A", "Ā"); // "Amacr"
+		CHARS.put("=a", "ā"); // "amacr"
+		CHARS.put("uA", "Ă"); // "Abreve"
+		CHARS.put("ua", "ă"); // "abreve"
+		CHARS.put("kA", "Ą"); // "Aogon"
+		CHARS.put("ka", "ą"); // "aogon"
+		CHARS.put("'C", "Ć"); // "Cacute"
+		CHARS.put("'c", "ć"); // "cacute"
+		CHARS.put("^C", "Ĉ"); // "Ccirc"
+		CHARS.put("^c", "ĉ"); // "ccirc"
+		CHARS.put(".C", "Ċ"); // "Cdot"
+		CHARS.put(".c", "ċ"); // "cdot"
+		CHARS.put("vC", "Č"); // "Ccaron"
+		CHARS.put("vc", "č"); // "ccaron"
+		CHARS.put("vD", "Ď"); // "Dcaron"
+		// Symbol #271 (d�) has no special Latex command
+		CHARS.put("DJ", "Đ"); // "Dstrok"
+		CHARS.put("dj", "đ"); // "dstrok"
+		CHARS.put("=E", "Ē"); // "Emacr"
+		CHARS.put("=e", "ē"); // "emacr"
+		CHARS.put("uE", "Ĕ"); // "Ebreve"
+		CHARS.put("ue", "ĕ"); // "ebreve"
+		CHARS.put(".E", "Ė"); // "Edot"
+		CHARS.put(".e", "ė"); // "edot"
+		CHARS.put("kE", "Ę"); // "Eogon"
+		CHARS.put("ke", "ę"); // "eogon"
+		CHARS.put("vE", "Ě"); // "Ecaron"
+		CHARS.put("ve", "ě"); // "ecaron"
+		CHARS.put("^G", "Ĝ"); // "Gcirc"
+		CHARS.put("^g", "ĝ"); // "gcirc"
+		CHARS.put("uG", "Ğ"); // "Gbreve"
+		CHARS.put("ug", "ğ"); // "gbreve"
+		CHARS.put(".G", "Ġ"); // "Gdot"
+		CHARS.put(".g", "ġ"); // "gdot"
+		CHARS.put("cG", "Ģ"); // "Gcedil"
+		CHARS.put("'g", "ģ"); // "gacute"
+		CHARS.put("^H", "Ĥ"); // "Hcirc"
+		CHARS.put("^h", "ĥ"); // "hcirc"
+		CHARS.put("Hstrok", "Ħ"); // "Hstrok"
+		CHARS.put("hstrok", "ħ"); // "hstrok"
+		CHARS.put("~I", "Ĩ"); // "Itilde"
+		CHARS.put("~i", "ĩ"); // "itilde"
+		CHARS.put("=I", "Ī"); // "Imacr"
+		CHARS.put("=i", "ī"); // "imacr"
+		CHARS.put("uI", "Ĭ"); // "Ibreve"
+		CHARS.put("ui", "ĭ"); // "ibreve"
+		CHARS.put("kI", "Į"); // "Iogon"
+		CHARS.put("ki", "į"); // "iogon"
+		CHARS.put(".I", "İ"); // "Idot"
+		CHARS.put("i", "ı"); // "inodot"
+		// Symbol #306 (IJ) has no special Latex command
+		// Symbol #307 (ij) has no special Latex command
+		CHARS.put("^J", "Ĵ"); // "Jcirc"
+		CHARS.put("^j", "ĵ"); // "jcirc"
+		CHARS.put("cK", "Ķ"); // "Kcedil"
+		CHARS.put("ck", "ķ"); // "kcedil"
+		// Symbol #312 (k) has no special Latex command
+		CHARS.put("'L", "Ĺ"); // "Lacute"
+		CHARS.put("'l", "ĺ"); // "lacute"
+		CHARS.put("cL", "Ļ"); // "Lcedil"
+		CHARS.put("cl", "ļ"); // "lcedil"
+		// Symbol #317 (L�) has no special Latex command
+		// Symbol #318 (l�) has no special Latex command
+		CHARS.put("Lmidot", "Ŀ"); // "Lmidot"
+		CHARS.put("lmidot", "ŀ"); // "lmidot"
+		CHARS.put("L", "Ł"); // "Lstrok"
+		CHARS.put("l", "ł"); // "lstrok"
+		CHARS.put("'N", "Ń"); // "Nacute"
+		CHARS.put("'n", "ń"); // "nacute"
+		CHARS.put("cN", "Ņ"); // "Ncedil"
+		CHARS.put("cn", "ņ"); // "ncedil"
+		CHARS.put("vN", "Ň"); // "Ncaron"
+		CHARS.put("vn", "ň"); // "ncaron"
+		// Symbol #329 (�n) has no special Latex command
+		CHARS.put("NG", "Ŋ"); // "ENG"
+		CHARS.put("ng", "ŋ"); // "eng"
+		CHARS.put("=O", "Ō"); // "Omacr"
+		CHARS.put("=o", "ō"); // "omacr"
+		CHARS.put("uO", "Ŏ"); // "Obreve"
+		CHARS.put("uo", "ŏ"); // "obreve"
+		CHARS.put("HO", "Ő"); // "Odblac"
+		CHARS.put("Ho", "ő"); // "odblac"
+		CHARS.put("OE", "Œ"); // "OElig"
+		CHARS.put("oe", "œ"); // "oelig"
+		CHARS.put("'R", "Ŕ"); // "Racute"
+		CHARS.put("'r", "ŕ"); // "racute"
+		CHARS.put("cR", "Ŗ"); // "Rcedil"
+		CHARS.put("cr", "ŗ"); // "rcedil"
+		CHARS.put("vR", "Ř"); // "Rcaron"
+		CHARS.put("vr", "ř"); // "rcaron"
+		CHARS.put("'S", "Ś"); // "Sacute"
+		CHARS.put("'s", "ś"); // "sacute"
+		CHARS.put("^S", "Ŝ"); // "Scirc"
+		CHARS.put("^s", "ŝ"); // "scirc"
+		CHARS.put("cS", "Ş"); // "Scedil"
+		CHARS.put("cs", "ş"); // "scedil"
+		CHARS.put("vS", "Š"); // "Scaron"
+		CHARS.put("vs", "š"); // "scaron"
+		CHARS.put("cT", "Ţ"); // "Tcedil"
+		CHARS.put("ct", "ţ"); // "tcedil"
+		CHARS.put("vT", "Ť"); // "Tcaron"
+		// Symbol #357 (t�) has no special Latex command
+		CHARS.put("Tstrok", "Ŧ"); // "Tstrok"
+		CHARS.put("tstrok", "ŧ"); // "tstrok"
+		CHARS.put("~U", "Ũ"); // "Utilde"
+		CHARS.put("~u", "ũ"); // "utilde"
+		CHARS.put("=U", "Ū"); // "Umacr"
+		CHARS.put("=u", "ū"); // "umacr"
+		CHARS.put("uU", "Ŭ"); // "Ubreve"
+		CHARS.put("uu", "ŭ"); // "ubreve"
+		CHARS.put("rU", "Ů"); // "Uring"
+		CHARS.put("ru", "ů"); // "uring"
+		CHARS.put("HU", "ů"); // "Odblac"
+		CHARS.put("Hu", "ű"); // "odblac"
+		CHARS.put("kU", "Ų"); // "Uogon"
+		CHARS.put("ku", "ų"); // "uogon"
+		CHARS.put("^W", "Ŵ"); // "Wcirc"
+		CHARS.put("^w", "ŵ"); // "wcirc"
+		CHARS.put("^Y", "Ŷ"); // "Ycirc"
+		CHARS.put("^y", "ŷ"); // "ycirc"
+		CHARS.put("\"Y", "Ÿ"); // "Yuml"
+		CHARS.put("'Z", "Ź"); // "Zacute"
+		CHARS.put("'z", "ź"); // "zacute"
+		CHARS.put(".Z", "Ż"); // "Zdot"
+		CHARS.put(".z", "ż"); // "zdot"
+		CHARS.put("vZ", "Ž"); // "Zcaron"
+		CHARS.put("vz", "ž"); // "zcaron"
+		// Symbol #383 (f) has no special Latex command
+        CHARS.put("%", "%"); // percent sign
+    }
+
+    public String format(String field) {
+		int i;
+		field = field.replaceAll("&|\\\\&", "&").replaceAll("[\\n]{1,}", "<p>");
+
+		StringBuffer sb = new StringBuffer();
+		StringBuffer currentCommand = null;
+		
+		char c;
+		boolean escaped = false, incommand = false;
+		
+		for (i = 0; i < field.length(); i++) {
+			c = field.charAt(i);
+			if (escaped && (c == '\\')) {
+				sb.append('\\');
+				escaped = false;
+			} else if (c == '\\') {
+				if (incommand){
+					/* Close Command */
+					String command = currentCommand.toString();
+					Object result = CHARS.get(command);
+					if (result != null) {
+						sb.append((String) result);
+					} else {
+						sb.append(command);
+					}
+				}
+				escaped = true;
+				incommand = true;
+				currentCommand = new StringBuffer();
+			} else if (!incommand && (c == '{' || c == '}')) {
+				// Swallow the brace.
+			} else if (Character.isLetter(c) || (c == '%')
+				|| (Globals.SPECIAL_COMMAND_CHARS.indexOf(String.valueOf(c)) >= 0)) {
+				escaped = false;
+
+                if (!incommand)
+					sb.append(c);
+					// Else we are in a command, and should not keep the letter.
+				else {
+					currentCommand.append(c);
+                    testCharCom: if ((currentCommand.length() == 1)
+						&& (Globals.SPECIAL_COMMAND_CHARS.indexOf(currentCommand.toString()) >= 0)) {
+						// This indicates that we are in a command of the type
+						// \^o or \~{n}
+						if (i >= field.length() - 1)
+							break testCharCom;
+
+						String command = currentCommand.toString();
+						i++;
+						c = field.charAt(i);
+						// System.out.println("next: "+(char)c);
+						String combody;
+						if (c == '{') {
+							IntAndString part = getPart(field, i, false);
+							i += part.i;
+							combody = part.s;
+						} else {
+							combody = field.substring(i, i + 1);
+							// System.out.println("... "+combody);
+						}
+						Object result = CHARS.get(command + combody);
+
+						if (result != null)
+							sb.append((String) result);
+
+						incommand = false;
+						escaped = false;
+					} else { 
+						//	Are we already at the end of the string?
+						if (i + 1 == field.length()){
+							String command = currentCommand.toString();
+                            Object result = CHARS.get(command);
+							/* If found, then use translated version. If not,
+							 * then keep
+							 * the text of the parameter intact.
+							 */
+							if (result != null) {
+								sb.append((String) result);
+							} else {
+								sb.append(command);
+							}
+							
+						}
+					}
+				}
+			} else {
+				String argument = null;
+
+				if (!incommand) {
+					sb.append(c);
+				} else if (Character.isWhitespace(c) || (c == '{') || (c == '}')) {
+					// First test if we are already at the end of the string.
+					// if (i >= field.length()-1)
+					// break testContent;
+
+					String command = currentCommand.toString();
+                                                
+                    if (c == '{') {
+						IntAndString part = getPart(field, i, true);
+						i += part.i;
+						argument = part.s;
+						if (argument != null) {
+							// handle common case of general latex command
+							Object result = CHARS.get(command + argument);
+							// System.out.print("command: "+command+", arg: "+argument);
+							// System.out.print(", result: ");
+							// If found, then use translated version. If not, then keep
+							// the
+							// text of the parameter intact.
+							if (result != null) {
+								sb.append((String) result);
+							} else {
+								sb.append(argument);
+							}
+						}
+                    } else if (c == '}') {
+                        // This end brace terminates a command. This can be the case in
+                        // constructs like {\aa}. The correct behaviour should be to
+                        // substitute the evaluated command and swallow the brace:
+                        Object result = CHARS.get(command);
+                        if (result != null) {
+                            sb.append((String) result);
+                        } else {
+                            // If the command is unknown, just print it:
+                            sb.append(command);
+                        }
+                    } else {
+						Object result = CHARS.get(command);
+						if (result != null) {
+							sb.append((String) result);
+						} else {
+							sb.append(command);
+						}
+						sb.append(' ');
+					}
+				}/* else if (c == '}') {
+                    System.out.printf("com term by }: '%s'\n", currentCommand.toString());
+
+                    argument = "";
+				}*/ else {
+					/*
+					 * TODO: this point is reached, apparently, if a command is
+					 * terminated in a strange way, such as with "$\omega$".
+					 * Also, the command "\&" causes us to get here. The former
+					 * issue is maybe a little difficult to address, since it
+					 * involves the LaTeX math mode. We don't have a complete
+					 * LaTeX parser, so maybe it's better to ignore these
+					 * commands?
+					 */
+				}
+				
+				incommand = false;
+				escaped = false;
+			}
+		}
+
+		return sb.toString();
+	}
+
+	private IntAndString getPart(String text, int i, boolean terminateOnEndBraceOnly) {
+		char c;
+		int count = 0;
+		
+		StringBuffer part = new StringBuffer();
+		
+		// advance to first char and skip wihitespace
+		i++;
+		while (i < text.length() && Character.isWhitespace(text.charAt(i))){
+			i++;
+		}
+		
+		// then grab whathever is the first token (counting braces)
+		while (i < text.length()){
+			c = text.charAt(i);
+			if (!terminateOnEndBraceOnly && count == 0 && Character.isWhitespace(c)) {
+				i--; // end argument and leave whitespace for further
+					 // processing
+				break;
+			}
+			if (c == '}' && --count < 0)
+				break;
+			else if (c == '{')
+				count++;
+			part.append(c);
+			i++;
+		}
+		return new IntAndString(part.length(), format(part.toString()));
+	}
+
+	private class IntAndString {
+		public int i;
+
+		String s;
+
+		public IntAndString(int i, String s) {
+			this.i = i;
+			this.s = s;
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/FormatPagesForHTML.java b/src/java/net/sf/jabref/export/layout/format/FormatPagesForHTML.java
index f702dd6..f705707 100644
--- a/src/java/net/sf/jabref/export/layout/format/FormatPagesForHTML.java
+++ b/src/java/net/sf/jabref/export/layout/format/FormatPagesForHTML.java
@@ -1,25 +1,25 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-public class FormatPagesForHTML implements LayoutFormatter {
-
-  public String format(String field) {
-    return field.replaceAll("--", "-");
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+public class FormatPagesForHTML implements LayoutFormatter {
+
+  public String format(String field) {
+    return field.replaceAll("--", "-");
+  }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/FormatPagesForXML.java b/src/java/net/sf/jabref/export/layout/format/FormatPagesForXML.java
index 57b9d76..362f82e 100644
--- a/src/java/net/sf/jabref/export/layout/format/FormatPagesForXML.java
+++ b/src/java/net/sf/jabref/export/layout/format/FormatPagesForXML.java
@@ -1,25 +1,25 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-public class FormatPagesForXML implements LayoutFormatter {
-
-  public String format(String field) {
-    return field.replaceAll("--", "&#x2013;");
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+public class FormatPagesForXML implements LayoutFormatter {
+
+  public String format(String field) {
+    return field.replaceAll("--", "&#x2013;");
+  }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/GetOpenOfficeType.java b/src/java/net/sf/jabref/export/layout/format/GetOpenOfficeType.java
old mode 100755
new mode 100644
index 32eda22..ef31309
--- a/src/java/net/sf/jabref/export/layout/format/GetOpenOfficeType.java
+++ b/src/java/net/sf/jabref/export/layout/format/GetOpenOfficeType.java
@@ -1,77 +1,77 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-///////////////////////////////////////////////////////////////////////////////
-//  Filename: $RCSfile$
-//  Purpose:  Atom representation.
-//  Language: Java
-//  Compiler: JDK 1.4
-//  Authors:  Joerg K. Wegner
-//  Version:  $Revision$
-//            $Date$
-//            $Author$
-//
-//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
-//
-//  This program is free software; 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.
-///////////////////////////////////////////////////////////////////////////////
-
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-
-/**
- * Change type of record to match the one used by OpenOffice formatter.
- * 
- * Based on the RemoveBrackets.java class (Revision 1.2) by mortenalver
- * @author $author$
- * @version $Revision$
- */
-public class GetOpenOfficeType implements LayoutFormatter
-{
-    //~ Methods ////////////////////////////////////////////////////////////////
-
-    public String format(String fieldText)
-    {
-        String fieldEntry = fieldText;
-		if (fieldEntry.equalsIgnoreCase("Article")) return "7";
-		if (fieldEntry.equalsIgnoreCase("Book")) return "1";
-		if (fieldEntry.equalsIgnoreCase("Booklet")) return "2";
-		if (fieldEntry.equalsIgnoreCase("Inbook")) return "5";
-		if (fieldEntry.equalsIgnoreCase("Incollection")) return "5";
-		if (fieldEntry.equalsIgnoreCase("Inproceedings")) return "6";
-		if (fieldEntry.equalsIgnoreCase("Manual")) return "8";
-		if (fieldEntry.equalsIgnoreCase("Mastersthesis")) return "9";
-		if (fieldEntry.equalsIgnoreCase("Misc")) return "10";
-		if (fieldEntry.equalsIgnoreCase("Other")) return "10";
-		if (fieldEntry.equalsIgnoreCase("Phdthesis")) return "9";
-		if (fieldEntry.equalsIgnoreCase("Proceedings")) return "3";
-		if (fieldEntry.equalsIgnoreCase("Techreport")) return "13";
-		if (fieldEntry.equalsIgnoreCase("Unpublished")) return "14";
-	// Default, Miscelaneous
-		return "10";
-    }
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile$
+//  Purpose:  Atom representation.
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Authors:  Joerg K. Wegner
+//  Version:  $Revision$
+//            $Date$
+//            $Author$
+//
+//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
+//
+//  This program is free software; 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.
+///////////////////////////////////////////////////////////////////////////////
+
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+
+/**
+ * Change type of record to match the one used by OpenOffice formatter.
+ * 
+ * Based on the RemoveBrackets.java class (Revision 1.2) by mortenalver
+ * @author $author$
+ * @version $Revision$
+ */
+public class GetOpenOfficeType implements LayoutFormatter
+{
+    //~ Methods ////////////////////////////////////////////////////////////////
+
+    public String format(String fieldText)
+    {
+        String fieldEntry = fieldText;
+		if (fieldEntry.equalsIgnoreCase("Article")) return "7";
+		if (fieldEntry.equalsIgnoreCase("Book")) return "1";
+		if (fieldEntry.equalsIgnoreCase("Booklet")) return "2";
+		if (fieldEntry.equalsIgnoreCase("Inbook")) return "5";
+		if (fieldEntry.equalsIgnoreCase("Incollection")) return "5";
+		if (fieldEntry.equalsIgnoreCase("Inproceedings")) return "6";
+		if (fieldEntry.equalsIgnoreCase("Manual")) return "8";
+		if (fieldEntry.equalsIgnoreCase("Mastersthesis")) return "9";
+		if (fieldEntry.equalsIgnoreCase("Misc")) return "10";
+		if (fieldEntry.equalsIgnoreCase("Other")) return "10";
+		if (fieldEntry.equalsIgnoreCase("Phdthesis")) return "9";
+		if (fieldEntry.equalsIgnoreCase("Proceedings")) return "3";
+		if (fieldEntry.equalsIgnoreCase("Techreport")) return "13";
+		if (fieldEntry.equalsIgnoreCase("Unpublished")) return "14";
+	// Default, Miscelaneous
+		return "10";
+    }
+}
+///////////////////////////////////////////////////////////////////////////////
+//  END OF FILE.
+///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/layout/format/HTMLChars.java b/src/java/net/sf/jabref/export/layout/format/HTMLChars.java
index 5554206..e5c30da 100644
--- a/src/java/net/sf/jabref/export/layout/format/HTMLChars.java
+++ b/src/java/net/sf/jabref/export/layout/format/HTMLChars.java
@@ -1,240 +1,240 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * This formatter escapes characters so they are suitable for HTML.
- * 
- * @version $Revision$ ($Date$)
- */
-public class HTMLChars implements LayoutFormatter {
-
-	public String format(String field) {
-		int i;
-		field = field.replaceAll("&|\\\\&", "&").replaceAll("[\\n]{2,}", "<p>")
-                .replaceAll("\\n", "<br>");
-
-		StringBuffer sb = new StringBuffer();
-		StringBuffer currentCommand = null;
-		
-		char c;
-		boolean escaped = false, incommand = false;
-		
-		for (i = 0; i < field.length(); i++) {
-			c = field.charAt(i);
-			if (escaped && (c == '\\')) {
-				sb.append('\\');
-				escaped = false;
-			} else if (c == '\\') {
-				if (incommand){
-					/* Close Command */
-					String command = currentCommand.toString();
-					Object result = Globals.HTMLCHARS.get(command);
-					if (result != null) {
-						sb.append((String) result);
-					} else {
-						sb.append(command);
-					}
-				}
-				escaped = true;
-				incommand = true;
-				currentCommand = new StringBuffer();
-			} else if (!incommand && (c == '{' || c == '}')) {
-				// Swallow the brace.
-			} else if (Character.isLetter(c) || (c == '%')
-				|| (Globals.SPECIAL_COMMAND_CHARS.indexOf(String.valueOf(c)) >= 0)) {
-				escaped = false;
-
-                if (!incommand)
-					sb.append(c);
-					// Else we are in a command, and should not keep the letter.
-				else {
-					currentCommand.append(c);
-                    testCharCom: if ((currentCommand.length() == 1)
-						&& (Globals.SPECIAL_COMMAND_CHARS.indexOf(currentCommand.toString()) >= 0)) {
-						// This indicates that we are in a command of the type
-						// \^o or \~{n}
-						if (i >= field.length() - 1)
-							break testCharCom;
-
-						String command = currentCommand.toString();
-						i++;
-						c = field.charAt(i);
-						// System.out.println("next: "+(char)c);
-						String combody;
-						if (c == '{') {
-							IntAndString part = getPart(field, i, false);
-							i += part.i;
-							combody = part.s;
-						} else {
-							combody = field.substring(i, i + 1);
-							// System.out.println("... "+combody);
-						}
-						Object result = Globals.HTMLCHARS.get(command + combody);
-
-						if (result != null)
-							sb.append((String) result);
-
-						incommand = false;
-						escaped = false;
-					} else { 
-						//	Are we already at the end of the string?
-						if (i + 1 == field.length()){
-							String command = currentCommand.toString();
-                            Object result = Globals.HTMLCHARS.get(command);
-							/* If found, then use translated version. If not,
-							 * then keep
-							 * the text of the parameter intact.
-							 */
-							if (result != null) {
-								sb.append((String) result);
-							} else {
-								sb.append(command);
-							}
-							
-						}
-					}
-				}
-			} else {
-				String argument = null;
-
-				if (!incommand) {
-					sb.append(c);
-				} else if (Character.isWhitespace(c) || (c == '{') || (c == '}')) {
-					// First test if we are already at the end of the string.
-					// if (i >= field.length()-1)
-					// break testContent;
-
-					String command = currentCommand.toString();
-                                                
-                    // Then test if we are dealing with a italics or bold
-					// command.
-					// If so, handle.
-					if (command.equals("em") || command.equals("emph") || command.equals("textit")) {
-						IntAndString part = getPart(field, i, true);
-
-						i += part.i;
-						sb.append("<em>").append(part.s).append("</em>");
-					} else if (command.equals("textbf")) {
-						IntAndString part = getPart(field, i, true);
-						i += part.i;
-						sb.append("<b>").append(part.s).append("</b>");
-					} else if (c == '{') {
-						IntAndString part = getPart(field, i, true);
-						i += part.i;
-						argument = part.s;
-						if (argument != null) {
-							// handle common case of general latex command
-							Object result = Globals.HTMLCHARS.get(command + argument);
-							// System.out.print("command: "+command+", arg: "+argument);
-							// System.out.print(", result: ");
-							// If found, then use translated version. If not, then keep
-							// the
-							// text of the parameter intact.
-							if (result != null) {
-								sb.append((String) result);
-							} else {
-								sb.append(argument);
-							}
-						}
-                    } else if (c == '}') {
-                        // This end brace terminates a command. This can be the case in
-                        // constructs like {\aa}. The correct behaviour should be to
-                        // substitute the evaluated command and swallow the brace:
-                        Object result = Globals.HTMLCHARS.get(command);
-                        if (result != null) {
-                            sb.append((String) result);
-                        } else {
-                            // If the command is unknown, just print it:
-                            sb.append(command);
-                        }
-                    } else {
-						Object result = Globals.HTMLCHARS.get(command);
-						if (result != null) {
-							sb.append((String) result);
-						} else {
-							sb.append(command);
-						}
-						sb.append(' ');
-					}
-				}/* else if (c == '}') {
-                    System.out.printf("com term by }: '%s'\n", currentCommand.toString());
-
-                    argument = "";
-				}*/ else {
-					/*
-					 * TODO: this point is reached, apparently, if a command is
-					 * terminated in a strange way, such as with "$\omega$".
-					 * Also, the command "\&" causes us to get here. The former
-					 * issue is maybe a little difficult to address, since it
-					 * involves the LaTeX math mode. We don't have a complete
-					 * LaTeX parser, so maybe it's better to ignore these
-					 * commands?
-					 */
-				}
-				
-				incommand = false;
-				escaped = false;
-			}
-		}
-
-		return sb.toString();
-	}
-
-	private IntAndString getPart(String text, int i, boolean terminateOnEndBraceOnly) {
-		char c;
-		int count = 0;
-		
-		StringBuffer part = new StringBuffer();
-		
-		// advance to first char and skip wihitespace
-		i++;
-		while (i < text.length() && Character.isWhitespace(text.charAt(i))){
-			i++;
-		}
-		
-		// then grab whathever is the first token (counting braces)
-		while (i < text.length()){
-			c = text.charAt(i);
-			if (!terminateOnEndBraceOnly && count == 0 && Character.isWhitespace(c)) {
-				i--; // end argument and leave whitespace for further
-					 // processing
-				break;
-			}
-			if (c == '}' && --count < 0)
-				break;
-			else if (c == '{')
-				count++;
-			part.append(c);
-			i++;
-		}
-		return new IntAndString(part.length(), format(part.toString()));
-	}
-
-	private class IntAndString {
-		public int i;
-
-		String s;
-
-		public IntAndString(int i, String s) {
-			this.i = i;
-			this.s = s;
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * This formatter escapes characters so they are suitable for HTML.
+ * 
+ * @version $Revision$ ($Date$)
+ */
+public class HTMLChars implements LayoutFormatter {
+
+	public String format(String field) {
+		int i;
+		field = field.replaceAll("&|\\\\&", "&").replaceAll("[\\n]{2,}", "<p>")
+                .replaceAll("\\n", "<br>");
+
+		StringBuffer sb = new StringBuffer();
+		StringBuffer currentCommand = null;
+		
+		char c;
+		boolean escaped = false, incommand = false;
+		
+		for (i = 0; i < field.length(); i++) {
+			c = field.charAt(i);
+			if (escaped && (c == '\\')) {
+				sb.append('\\');
+				escaped = false;
+			} else if (c == '\\') {
+				if (incommand){
+					/* Close Command */
+					String command = currentCommand.toString();
+					Object result = Globals.HTMLCHARS.get(command);
+					if (result != null) {
+						sb.append((String) result);
+					} else {
+						sb.append(command);
+					}
+				}
+				escaped = true;
+				incommand = true;
+				currentCommand = new StringBuffer();
+			} else if (!incommand && (c == '{' || c == '}')) {
+				// Swallow the brace.
+			} else if (Character.isLetter(c) || (c == '%')
+				|| (Globals.SPECIAL_COMMAND_CHARS.indexOf(String.valueOf(c)) >= 0)) {
+				escaped = false;
+
+                if (!incommand)
+					sb.append(c);
+					// Else we are in a command, and should not keep the letter.
+				else {
+					currentCommand.append(c);
+                    testCharCom: if ((currentCommand.length() == 1)
+						&& (Globals.SPECIAL_COMMAND_CHARS.indexOf(currentCommand.toString()) >= 0)) {
+						// This indicates that we are in a command of the type
+						// \^o or \~{n}
+						if (i >= field.length() - 1)
+							break testCharCom;
+
+						String command = currentCommand.toString();
+						i++;
+						c = field.charAt(i);
+						// System.out.println("next: "+(char)c);
+						String combody;
+						if (c == '{') {
+							IntAndString part = getPart(field, i, false);
+							i += part.i;
+							combody = part.s;
+						} else {
+							combody = field.substring(i, i + 1);
+							// System.out.println("... "+combody);
+						}
+						Object result = Globals.HTMLCHARS.get(command + combody);
+
+						if (result != null)
+							sb.append((String) result);
+
+						incommand = false;
+						escaped = false;
+					} else { 
+						//	Are we already at the end of the string?
+						if (i + 1 == field.length()){
+							String command = currentCommand.toString();
+                            Object result = Globals.HTMLCHARS.get(command);
+							/* If found, then use translated version. If not,
+							 * then keep
+							 * the text of the parameter intact.
+							 */
+							if (result != null) {
+								sb.append((String) result);
+							} else {
+								sb.append(command);
+							}
+							
+						}
+					}
+				}
+			} else {
+				String argument = null;
+
+				if (!incommand) {
+					sb.append(c);
+				} else if (Character.isWhitespace(c) || (c == '{') || (c == '}')) {
+					// First test if we are already at the end of the string.
+					// if (i >= field.length()-1)
+					// break testContent;
+
+					String command = currentCommand.toString();
+                                                
+                    // Then test if we are dealing with a italics or bold
+					// command.
+					// If so, handle.
+					if (command.equals("em") || command.equals("emph") || command.equals("textit")) {
+						IntAndString part = getPart(field, i, true);
+
+						i += part.i;
+						sb.append("<em>").append(part.s).append("</em>");
+					} else if (command.equals("textbf")) {
+						IntAndString part = getPart(field, i, true);
+						i += part.i;
+						sb.append("<b>").append(part.s).append("</b>");
+					} else if (c == '{') {
+						IntAndString part = getPart(field, i, true);
+						i += part.i;
+						argument = part.s;
+						if (argument != null) {
+							// handle common case of general latex command
+							Object result = Globals.HTMLCHARS.get(command + argument);
+							// System.out.print("command: "+command+", arg: "+argument);
+							// System.out.print(", result: ");
+							// If found, then use translated version. If not, then keep
+							// the
+							// text of the parameter intact.
+							if (result != null) {
+								sb.append((String) result);
+							} else {
+								sb.append(argument);
+							}
+						}
+                    } else if (c == '}') {
+                        // This end brace terminates a command. This can be the case in
+                        // constructs like {\aa}. The correct behaviour should be to
+                        // substitute the evaluated command and swallow the brace:
+                        Object result = Globals.HTMLCHARS.get(command);
+                        if (result != null) {
+                            sb.append((String) result);
+                        } else {
+                            // If the command is unknown, just print it:
+                            sb.append(command);
+                        }
+                    } else {
+						Object result = Globals.HTMLCHARS.get(command);
+						if (result != null) {
+							sb.append((String) result);
+						} else {
+							sb.append(command);
+						}
+						sb.append(' ');
+					}
+				}/* else if (c == '}') {
+                    System.out.printf("com term by }: '%s'\n", currentCommand.toString());
+
+                    argument = "";
+				}*/ else {
+					/*
+					 * TODO: this point is reached, apparently, if a command is
+					 * terminated in a strange way, such as with "$\omega$".
+					 * Also, the command "\&" causes us to get here. The former
+					 * issue is maybe a little difficult to address, since it
+					 * involves the LaTeX math mode. We don't have a complete
+					 * LaTeX parser, so maybe it's better to ignore these
+					 * commands?
+					 */
+				}
+				
+				incommand = false;
+				escaped = false;
+			}
+		}
+
+		return sb.toString();
+	}
+
+	private IntAndString getPart(String text, int i, boolean terminateOnEndBraceOnly) {
+		char c;
+		int count = 0;
+		
+		StringBuffer part = new StringBuffer();
+		
+		// advance to first char and skip wihitespace
+		i++;
+		while (i < text.length() && Character.isWhitespace(text.charAt(i))){
+			i++;
+		}
+		
+		// then grab whathever is the first token (counting braces)
+		while (i < text.length()){
+			c = text.charAt(i);
+			if (!terminateOnEndBraceOnly && count == 0 && Character.isWhitespace(c)) {
+				i--; // end argument and leave whitespace for further
+					 // processing
+				break;
+			}
+			if (c == '}' && --count < 0)
+				break;
+			else if (c == '{')
+				count++;
+			part.append(c);
+			i++;
+		}
+		return new IntAndString(part.length(), format(part.toString()));
+	}
+
+	private class IntAndString {
+		public int i;
+
+		String s;
+
+		public IntAndString(int i, String s) {
+			this.i = i;
+			this.s = s;
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/HTMLParagraphs.java b/src/java/net/sf/jabref/export/layout/format/HTMLParagraphs.java
index dd9f5de..812d711 100644
--- a/src/java/net/sf/jabref/export/layout/format/HTMLParagraphs.java
+++ b/src/java/net/sf/jabref/export/layout/format/HTMLParagraphs.java
@@ -1,63 +1,63 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Will interpret two consecutive newlines as the start of a new paragraph and thus
- * wrap the paragraph in HTML-p-tags.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class HTMLParagraphs implements LayoutFormatter {
-
-	static Pattern beforeNewLines;
-
-	public String format(String fieldText) {
-
-		fieldText = fieldText.trim();
-		
-		if (fieldText.length() == 0){
-			return fieldText;
-		}
-		
-		if (beforeNewLines == null) {
-			beforeNewLines = Pattern.compile("(.*?)\\n\\s*\\n");
-		}
-
-		Matcher m = beforeNewLines.matcher(fieldText);
-		StringBuffer s = new StringBuffer();
-		while (m.find()) {
-			String middle = m.group(1).trim();
-			if (middle.length() > 0){
-				s.append("<p>\n");
-				m.appendReplacement(s, m.group(1));
-				s.append("\n</p>\n");
-			}
-		}
-		s.append("<p>\n");
-		m.appendTail(s);
-		s.append("\n</p>");
-	
-		return s.toString();
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Will interpret two consecutive newlines as the start of a new paragraph and thus
+ * wrap the paragraph in HTML-p-tags.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class HTMLParagraphs implements LayoutFormatter {
+
+	static Pattern beforeNewLines;
+
+	public String format(String fieldText) {
+
+		fieldText = fieldText.trim();
+		
+		if (fieldText.length() == 0){
+			return fieldText;
+		}
+		
+		if (beforeNewLines == null) {
+			beforeNewLines = Pattern.compile("(.*?)\\n\\s*\\n");
+		}
+
+		Matcher m = beforeNewLines.matcher(fieldText);
+		StringBuffer s = new StringBuffer();
+		while (m.find()) {
+			String middle = m.group(1).trim();
+			if (middle.length() > 0){
+				s.append("<p>\n");
+				m.appendReplacement(s, m.group(1));
+				s.append("\n</p>\n");
+			}
+		}
+		s.append("<p>\n");
+		m.appendTail(s);
+		s.append("\n</p>");
+	
+		return s.toString();
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/IfPlural.java b/src/java/net/sf/jabref/export/layout/format/IfPlural.java
index 73b64c2..13d5fc3 100644
--- a/src/java/net/sf/jabref/export/layout/format/IfPlural.java
+++ b/src/java/net/sf/jabref/export/layout/format/IfPlural.java
@@ -1,59 +1,59 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.AbstractParamLayoutFormatter;
-
-/**
- * @author ralmond
- * 
- * This formatter takes two arguments and examines the field text.  
- * If the field text represents multiple individuals, that is it contains the string "and"
- * then the field text is replaced with the first argument, otherwise it is replaced with the second.
- * For example:
- * 
- * \format[IfPlural(Eds.,Ed.)]{\editor}
- * 
- * Should expand to 'Eds.' if the document has more than one editor and 'Ed.' if it only has one.
- * 
- *
- */
-public class IfPlural extends AbstractParamLayoutFormatter {
-  
-  protected String pluralText, singularText;
-  
-  public void setArgument(String arg) {
-    String[] parts = parseArgument(arg);
-
-    if (parts.length < 2)
-        return; // TODO: too few arguments. Print an error message here?
-    pluralText = parts[0];
-    singularText = parts[1];
-
-}
-
-public String format(String fieldText) {
-    if (pluralText == null)
-        return fieldText; // TODO: argument missing or invalid. Print an error message here?
-    if (fieldText.matches(".*\\sand\\s.*"))
-      return pluralText;
-    else 
-      return singularText;
-
-}
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.AbstractParamLayoutFormatter;
+
+/**
+ * @author ralmond
+ * 
+ * This formatter takes two arguments and examines the field text.  
+ * If the field text represents multiple individuals, that is it contains the string "and"
+ * then the field text is replaced with the first argument, otherwise it is replaced with the second.
+ * For example:
+ * 
+ * \format[IfPlural(Eds.,Ed.)]{\editor}
+ * 
+ * Should expand to 'Eds.' if the document has more than one editor and 'Ed.' if it only has one.
+ * 
+ *
+ */
+public class IfPlural extends AbstractParamLayoutFormatter {
+  
+  protected String pluralText, singularText;
+  
+  public void setArgument(String arg) {
+    String[] parts = parseArgument(arg);
+
+    if (parts.length < 2)
+        return; // TODO: too few arguments. Print an error message here?
+    pluralText = parts[0];
+    singularText = parts[1];
+
+}
+
+public String format(String fieldText) {
+    if (pluralText == null)
+        return fieldText; // TODO: argument missing or invalid. Print an error message here?
+    if (fieldText.matches(".*\\sand\\s.*"))
+      return pluralText;
+    else 
+      return singularText;
+
+}
+
+
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/JournalAbbreviator.java b/src/java/net/sf/jabref/export/layout/format/JournalAbbreviator.java
index 970047e..72ce0ab 100644
--- a/src/java/net/sf/jabref/export/layout/format/JournalAbbreviator.java
+++ b/src/java/net/sf/jabref/export/layout/format/JournalAbbreviator.java
@@ -1,61 +1,61 @@
-/* 
- * Copyright (C) 2006 Jabref-Team
- *               2005 Dept. Computer Architecture, University of Tuebingen, Germany
- *               2005 Joerg K. Wegner
- *               2003 Morten O. Alver, Nizar N. Batada
- *               
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.Globals;
-
-/**
- * JournalAbbreviator formats the given text in an abbreviated form
- * according to the journal abbreviation lists.
- * 
- * The given input text is abbreviated according to the journal abbreviation lists.
- * If no abbreviation for input is found (e.g. not in list or already abbreviated), the input will be returned unmodified.
- * 
- * Usage:
- *    \format[JournalAbbreviator]{\journal}
- * Example result:
- *    "Phys. Rev. Lett." instead of "Physical Review Letters"
- * 
- * @author  Meigel
- * 
- */
-public class JournalAbbreviator implements LayoutFormatter
-{
-    public String format(String fieldText)
-    {
-        String strJournal = Globals.journalAbbrev.getAbbreviatedName(fieldText, true);
-        if (null == strJournal)
-        {
-    	    // no abbreviation found => use unabbreviated journal name
-    	    strJournal = fieldText;
-        }
-        
-	return strJournal;
-    }
-}
+/* 
+ * Copyright (C) 2006 Jabref-Team
+ *               2005 Dept. Computer Architecture, University of Tuebingen, Germany
+ *               2005 Joerg K. Wegner
+ *               2003 Morten O. Alver, Nizar N. Batada
+ *               
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.Globals;
+
+/**
+ * JournalAbbreviator formats the given text in an abbreviated form
+ * according to the journal abbreviation lists.
+ * 
+ * The given input text is abbreviated according to the journal abbreviation lists.
+ * If no abbreviation for input is found (e.g. not in list or already abbreviated), the input will be returned unmodified.
+ * 
+ * Usage:
+ *    \format[JournalAbbreviator]{\journal}
+ * Example result:
+ *    "Phys. Rev. Lett." instead of "Physical Review Letters"
+ * 
+ * @author  Meigel
+ * 
+ */
+public class JournalAbbreviator implements LayoutFormatter
+{
+    public String format(String fieldText)
+    {
+        String strJournal = Globals.journalAbbrev.getAbbreviatedName(fieldText, true);
+        if (null == strJournal)
+        {
+    	    // no abbreviation found => use unabbreviated journal name
+    	    strJournal = fieldText;
+        }
+        
+	return strJournal;
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/LastPage.java b/src/java/net/sf/jabref/export/layout/format/LastPage.java
index 36b541b..92c14ed 100644
--- a/src/java/net/sf/jabref/export/layout/format/LastPage.java
+++ b/src/java/net/sf/jabref/export/layout/format/LastPage.java
@@ -1,41 +1,41 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Formatter that returns the last page from the "pages" field, if set.
- *
- * For instance, if the pages field is set to "345-360" or "345--360",
- * this formatter will return "360".
- */
-public class LastPage implements LayoutFormatter {
-
-    public String format(String s) {
-        if (s == null)
-			return "";
-		String[] pageParts = s.split("[\\-]+");
-        if (pageParts.length == 2)
-            return pageParts[1];
-        // If we didn't get two parts, it may be that only the number of pages is given.
-        // Return the first part:
-        else if (pageParts.length >= 1)
-            return pageParts[0];
-        else return "";
-
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Formatter that returns the last page from the "pages" field, if set.
+ *
+ * For instance, if the pages field is set to "345-360" or "345--360",
+ * this formatter will return "360".
+ */
+public class LastPage implements LayoutFormatter {
+
+    public String format(String s) {
+        if (s == null)
+			return "";
+		String[] pageParts = s.split("[\\-]+");
+        if (pageParts.length == 2)
+            return pageParts[1];
+        // If we didn't get two parts, it may be that only the number of pages is given.
+        // Return the first part:
+        else if (pageParts.length >= 1)
+            return pageParts[0];
+        else return "";
+
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/NoSpaceBetweenAbbreviations.java b/src/java/net/sf/jabref/export/layout/format/NoSpaceBetweenAbbreviations.java
index 26ba927..048acb3 100644
--- a/src/java/net/sf/jabref/export/layout/format/NoSpaceBetweenAbbreviations.java
+++ b/src/java/net/sf/jabref/export/layout/format/NoSpaceBetweenAbbreviations.java
@@ -1,52 +1,52 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * <p>
- * LayoutFormatter that removes the space between abbreviated First names
- * </p>
- * <p>
- * What out that this regular expression might also remove other spaces that fit
- * the pattern.
- * </p>
- * <p>
- * Example: J. R. R. Tolkien becomes J.R.R. Tolkien.
- * </p>
- * <p>
- * See Testcase for more examples.
- * <p>
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class NoSpaceBetweenAbbreviations implements LayoutFormatter {
-
-	/*
-	 * Match '.' followed by spaces followed by uppercase char followed by '.'
-	 * but don't include the last dot into the capturing group.
-	 * 
-	 * Replace the match by removing the spaces.
-	 * 
-	 * @see net.sf.jabref.export.layout.LayoutFormatter#format(java.lang.String)
-	 */
-	public String format(String fieldText) {
-		return fieldText.replaceAll("\\.\\s+(\\p{Lu})(?=\\.)", "\\.$1");
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * <p>
+ * LayoutFormatter that removes the space between abbreviated First names
+ * </p>
+ * <p>
+ * What out that this regular expression might also remove other spaces that fit
+ * the pattern.
+ * </p>
+ * <p>
+ * Example: J. R. R. Tolkien becomes J.R.R. Tolkien.
+ * </p>
+ * <p>
+ * See Testcase for more examples.
+ * <p>
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class NoSpaceBetweenAbbreviations implements LayoutFormatter {
+
+	/*
+	 * Match '.' followed by spaces followed by uppercase char followed by '.'
+	 * but don't include the last dot into the capturing group.
+	 * 
+	 * Replace the match by removing the spaces.
+	 * 
+	 * @see net.sf.jabref.export.layout.LayoutFormatter#format(java.lang.String)
+	 */
+	public String format(String fieldText) {
+		return fieldText.replaceAll("\\.\\s+(\\p{Lu})(?=\\.)", "\\.$1");
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/NotFoundFormatter.java b/src/java/net/sf/jabref/export/layout/format/NotFoundFormatter.java
index af3a647..2efd5c9 100644
--- a/src/java/net/sf/jabref/export/layout/format/NotFoundFormatter.java
+++ b/src/java/net/sf/jabref/export/layout/format/NotFoundFormatter.java
@@ -1,40 +1,40 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.Globals;
-
-/**
- * Formatter used to signal that a formatter hasn't been found. This can be
- * used for graceful degradation if a layout uses an undefined format.
- */
-public class NotFoundFormatter implements LayoutFormatter {
-    private String notFound;
-
-    public NotFoundFormatter(String notFound) {
-
-        this.notFound = notFound;
-    }
-
-    public String getNotFound() {
-        return notFound;
-    }
-
-    public String format(String fieldText) {
-        return "["+Globals.lang("Formatter not found: %0", notFound)+"] "+fieldText;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.Globals;
+
+/**
+ * Formatter used to signal that a formatter hasn't been found. This can be
+ * used for graceful degradation if a layout uses an undefined format.
+ */
+public class NotFoundFormatter implements LayoutFormatter {
+    private String notFound;
+
+    public NotFoundFormatter(String notFound) {
+
+        this.notFound = notFound;
+    }
+
+    public String getNotFound() {
+        return notFound;
+    }
+
+    public String format(String fieldText) {
+        return "["+Globals.lang("Formatter not found: %0", notFound)+"] "+fieldText;
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/Number.java b/src/java/net/sf/jabref/export/layout/format/Number.java
index df97abc..9210b72 100644
--- a/src/java/net/sf/jabref/export/layout/format/Number.java
+++ b/src/java/net/sf/jabref/export/layout/format/Number.java
@@ -1,33 +1,33 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.ParamLayoutFormatter;
-import net.sf.jabref.export.ExportFormats;
-
-/**
- * Formatter that outputs a sequence number for the current entry. The sequence number is
- * tied to the entry's position in the order, not to the number of calls to this formatter.
- */
-public class Number implements ParamLayoutFormatter {
-    public void setArgument(String arg) {
-        // No effect currently.
-    }
-
-    public String format(String fieldText) {
-        return String.valueOf(ExportFormats.entryNumber);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.ParamLayoutFormatter;
+import net.sf.jabref.export.ExportFormats;
+
+/**
+ * Formatter that outputs a sequence number for the current entry. The sequence number is
+ * tied to the entry's position in the order, not to the number of calls to this formatter.
+ */
+public class Number implements ParamLayoutFormatter {
+    public void setArgument(String arg) {
+        // No effect currently.
+    }
+
+    public String format(String fieldText) {
+        return String.valueOf(ExportFormats.entryNumber);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/RTFChars.java b/src/java/net/sf/jabref/export/layout/format/RTFChars.java
index cced6db..750673f 100644
--- a/src/java/net/sf/jabref/export/layout/format/RTFChars.java
+++ b/src/java/net/sf/jabref/export/layout/format/RTFChars.java
@@ -1,200 +1,200 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Transform a LaTeX-String to RTF.
- * 
- * This method will:
- * 
- *   1.) Remove LaTeX-Command sequences.
- *   
- *   2.) Replace LaTeX-Special chars with RTF aquivalents.
- *   
- *   3.) Replace emph and textit and textbf with their RTF replacements.
- *   
- *   4.) Take special care to save all unicode characters correctly.
- *
- *   5.) Replace --- by \emdash and -- by \endash.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- *
- */
-public class RTFChars implements LayoutFormatter {
-
-	public String format(String field) {
-
-		StringBuffer sb = new StringBuffer("");
-		StringBuffer currentCommand = null;
-		boolean escaped = false, incommand = false;
-		for (int i = 0; i < field.length(); i++) {
-
-            /*System.out.println("incommand="+incommand+". escaped="+escaped
-                            +". currentCommand='"+(currentCommand!=null?currentCommand.toString():"")+"'");
-            System.out.println("sb: '"+sb.toString()+"'");*/
-
-            char c = field.charAt(i);
-
-            //System.out.println("Char: '"+((char)c)+"'");
-
-            if (escaped && (c == '\\')) {
-				sb.append('\\');
-				escaped = false;
-			}
-
-			else if (c == '\\') {
-				escaped = true;
-				incommand = true;
-				currentCommand = new StringBuffer();
-			} else if (!incommand && (c == '{' || c == '}')) {
-				// Swallow the brace.
-			} else if (Character.isLetter(c)
-				|| (Globals.SPECIAL_COMMAND_CHARS.indexOf("" + c) >= 0)) {
-				escaped = false;
-				if (!incommand){
-					sb.append(c);
-				} else {
-					// Else we are in a command, and should not keep the letter.
-					currentCommand.append(c);
-                    testCharCom: if ((currentCommand.length() == 1)
-						&& (Globals.SPECIAL_COMMAND_CHARS.indexOf(currentCommand.toString()) >= 0)) {
-						// This indicates that we are in a command of the type
-						// \^o or \~{n}
-						if (i >= field.length() - 1)
-							break testCharCom;
-
-						String command = currentCommand.toString();
-						i++;
-						c = field.charAt(i);
-						String combody;
-						if (c == '{') {
-							IntAndString part = getPart(field, i);
-							i += part.i;
-							combody = part.s;
-						} else {
-							combody = field.substring(i, i + 1);
-						}
-
-                        String result = Globals.RTFCHARS.get(command + combody);
-
-                        if (result != null)
-							sb.append(result);
-
-						incommand = false;
-						escaped = false;
-				
-					}
-
-				}
-
-			} else {
-				// if (!incommand || ((c!='{') && !Character.isWhitespace(c)))
-				testContent: if (!incommand || (!Character.isWhitespace(c) && (c != '{')
-                    && (c != '}')))
-					sb.append(c);
-				else {
-
-                    // First test for braces that may be part of a LaTeX command:
-                    if ((c == '{') && (currentCommand.length() == 0)) {
-                        // We have seen something like \{, which is probably the start
-                        // of a command like \{aa}. Swallow the brace.
-                        continue;
-                    } else if ((c == '}') && (currentCommand.length() > 0)) {
-                        // Seems to be the end of a command like \{aa}. Look it up:
-                        String command = currentCommand.toString();
-                        String result = Globals.RTFCHARS.get(command);
-                        if (result != null) {
-                            sb.append(result);
-                        }
-                        incommand = false;
-				        escaped = false;
-                        continue;
-                    }
-
-                    // Then look for italics etc.,
-                    // but first check if we are already at the end of the string.
-					if (i >= field.length() - 1)
-						break testContent;
-
-					if ((c == '{') && (currentCommand.length() > 0)) {
-                        String command = currentCommand.toString();
-						// Then test if we are dealing with a italics or bold
-						// command. If so, handle.
-						if (command.equals("em") || command.equals("emph") || command.equals("textit")) {
-							IntAndString part = getPart(field, i);
-							i += part.i;
-							sb.append("}{\\i ").append(part.s).append("}{");
-						} else if (command.equals("textbf")) {
-							IntAndString part = getPart(field, i);
-							i += part.i;
-							sb.append("}{\\b ").append(part.s).append("}{");
-						}
-                    } else
-						sb.append(c);
-
-				}
-				incommand = false;
-				escaped = false;
-			}
-		}
-
-		char[] chars = sb.toString().toCharArray();
-		sb = new StringBuffer();
-
-		for (int i = 0; i < chars.length; i++) {
-			char c = chars[i];
-
-			if (c < 128) 
-				sb.append(c);
-			 else
-				sb.append("\\u").append((long) c).append('?');
-		}
-
-		return sb.toString().replaceAll("---", "{\\\\emdash}").replaceAll("--", "{\\\\endash}").replaceAll("``", "{\\\\ldblquote}").replaceAll("''","{\\\\rdblquote}");
-	}
-
-	private IntAndString getPart(String text, int i) {
-		char c;
-		int count = 0;
-		StringBuffer part = new StringBuffer();
-		while ((count >= 0) && (i < text.length())) {
-			i++;
-			c = text.charAt(i);
-			if (c == '}')
-				count--;
-			else if (c == '{')
-				count++;
-
-			part.append(c);
-		}
-		return new IntAndString(part.length(), format(part.toString()));
-	}
-
-	private class IntAndString {
-		public int i;
-
-		String s;
-
-		public IntAndString(int i, String s) {
-			this.i = i;
-			this.s = s;
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Transform a LaTeX-String to RTF.
+ * 
+ * This method will:
+ * 
+ *   1.) Remove LaTeX-Command sequences.
+ *   
+ *   2.) Replace LaTeX-Special chars with RTF aquivalents.
+ *   
+ *   3.) Replace emph and textit and textbf with their RTF replacements.
+ *   
+ *   4.) Take special care to save all unicode characters correctly.
+ *
+ *   5.) Replace --- by \emdash and -- by \endash.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ *
+ */
+public class RTFChars implements LayoutFormatter {
+
+	public String format(String field) {
+
+		StringBuffer sb = new StringBuffer("");
+		StringBuffer currentCommand = null;
+		boolean escaped = false, incommand = false;
+		for (int i = 0; i < field.length(); i++) {
+
+            /*System.out.println("incommand="+incommand+". escaped="+escaped
+                            +". currentCommand='"+(currentCommand!=null?currentCommand.toString():"")+"'");
+            System.out.println("sb: '"+sb.toString()+"'");*/
+
+            char c = field.charAt(i);
+
+            //System.out.println("Char: '"+((char)c)+"'");
+
+            if (escaped && (c == '\\')) {
+				sb.append('\\');
+				escaped = false;
+			}
+
+			else if (c == '\\') {
+				escaped = true;
+				incommand = true;
+				currentCommand = new StringBuffer();
+			} else if (!incommand && (c == '{' || c == '}')) {
+				// Swallow the brace.
+			} else if (Character.isLetter(c)
+				|| (Globals.SPECIAL_COMMAND_CHARS.indexOf("" + c) >= 0)) {
+				escaped = false;
+				if (!incommand){
+					sb.append(c);
+				} else {
+					// Else we are in a command, and should not keep the letter.
+					currentCommand.append(c);
+                    testCharCom: if ((currentCommand.length() == 1)
+						&& (Globals.SPECIAL_COMMAND_CHARS.indexOf(currentCommand.toString()) >= 0)) {
+						// This indicates that we are in a command of the type
+						// \^o or \~{n}
+						if (i >= field.length() - 1)
+							break testCharCom;
+
+						String command = currentCommand.toString();
+						i++;
+						c = field.charAt(i);
+						String combody;
+						if (c == '{') {
+							IntAndString part = getPart(field, i);
+							i += part.i;
+							combody = part.s;
+						} else {
+							combody = field.substring(i, i + 1);
+						}
+
+                        String result = Globals.RTFCHARS.get(command + combody);
+
+                        if (result != null)
+							sb.append(result);
+
+						incommand = false;
+						escaped = false;
+				
+					}
+
+				}
+
+			} else {
+				// if (!incommand || ((c!='{') && !Character.isWhitespace(c)))
+				testContent: if (!incommand || (!Character.isWhitespace(c) && (c != '{')
+                    && (c != '}')))
+					sb.append(c);
+				else {
+
+                    // First test for braces that may be part of a LaTeX command:
+                    if ((c == '{') && (currentCommand.length() == 0)) {
+                        // We have seen something like \{, which is probably the start
+                        // of a command like \{aa}. Swallow the brace.
+                        continue;
+                    } else if ((c == '}') && (currentCommand.length() > 0)) {
+                        // Seems to be the end of a command like \{aa}. Look it up:
+                        String command = currentCommand.toString();
+                        String result = Globals.RTFCHARS.get(command);
+                        if (result != null) {
+                            sb.append(result);
+                        }
+                        incommand = false;
+				        escaped = false;
+                        continue;
+                    }
+
+                    // Then look for italics etc.,
+                    // but first check if we are already at the end of the string.
+					if (i >= field.length() - 1)
+						break testContent;
+
+					if ((c == '{') && (currentCommand.length() > 0)) {
+                        String command = currentCommand.toString();
+						// Then test if we are dealing with a italics or bold
+						// command. If so, handle.
+						if (command.equals("em") || command.equals("emph") || command.equals("textit")) {
+							IntAndString part = getPart(field, i);
+							i += part.i;
+							sb.append("}{\\i ").append(part.s).append("}{");
+						} else if (command.equals("textbf")) {
+							IntAndString part = getPart(field, i);
+							i += part.i;
+							sb.append("}{\\b ").append(part.s).append("}{");
+						}
+                    } else
+						sb.append(c);
+
+				}
+				incommand = false;
+				escaped = false;
+			}
+		}
+
+		char[] chars = sb.toString().toCharArray();
+		sb = new StringBuffer();
+
+		for (int i = 0; i < chars.length; i++) {
+			char c = chars[i];
+
+			if (c < 128) 
+				sb.append(c);
+			 else
+				sb.append("\\u").append((long) c).append('?');
+		}
+
+		return sb.toString().replaceAll("---", "{\\\\emdash}").replaceAll("--", "{\\\\endash}").replaceAll("``", "{\\\\ldblquote}").replaceAll("''","{\\\\rdblquote}");
+	}
+
+	private IntAndString getPart(String text, int i) {
+		char c;
+		int count = 0;
+		StringBuffer part = new StringBuffer();
+		while ((count >= 0) && (i < text.length())) {
+			i++;
+			c = text.charAt(i);
+			if (c == '}')
+				count--;
+			else if (c == '{')
+				count++;
+
+			part.append(c);
+		}
+		return new IntAndString(part.length(), format(part.toString()));
+	}
+
+	private class IntAndString {
+		public int i;
+
+		String s;
+
+		public IntAndString(int i, String s) {
+			this.i = i;
+			this.s = s;
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/RemoveBrackets.java b/src/java/net/sf/jabref/export/layout/format/RemoveBrackets.java
old mode 100755
new mode 100644
index 23bac76..74d4e2f
--- a/src/java/net/sf/jabref/export/layout/format/RemoveBrackets.java
+++ b/src/java/net/sf/jabref/export/layout/format/RemoveBrackets.java
@@ -1,74 +1,74 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-///////////////////////////////////////////////////////////////////////////////
-//  Filename: $RCSfile$
-//  Purpose:  Atom representation.
-//  Language: Java
-//  Compiler: JDK 1.4
-//  Authors:  Joerg K. Wegner
-//  Version:  $Revision$
-//            $Date$
-//            $Author$
-//
-//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
-//
-//  This program is free software; 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.
-///////////////////////////////////////////////////////////////////////////////
-
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-
-/**
- * Remove brackets formatter.
- *
- * @author $author$
- * @version $Revision$
- */
-public class RemoveBrackets implements LayoutFormatter
-{
-    //~ Methods ////////////////////////////////////////////////////////////////
-
-    public String format(String fieldText)
-    {
-        String fieldEntry = fieldText;
-        StringBuffer sb = new StringBuffer(fieldEntry.length());
-
-        for (int i = 0; i < fieldEntry.length(); i++)
-        {
-            //System.out.print(fieldEntry.charAt(i));
-            if ((fieldEntry.charAt(i) != '{') && (fieldEntry.charAt(i) != '}'))
-            {
-                //System.out.print(fieldEntry.charAt(i));
-                sb.append(fieldEntry.charAt(i));
-            }
-        }
-
-        fieldEntry = sb.toString();
-        return fieldEntry;
-    }
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile$
+//  Purpose:  Atom representation.
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Authors:  Joerg K. Wegner
+//  Version:  $Revision$
+//            $Date$
+//            $Author$
+//
+//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
+//
+//  This program is free software; 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.
+///////////////////////////////////////////////////////////////////////////////
+
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+
+/**
+ * Remove brackets formatter.
+ *
+ * @author $author$
+ * @version $Revision$
+ */
+public class RemoveBrackets implements LayoutFormatter
+{
+    //~ Methods ////////////////////////////////////////////////////////////////
+
+    public String format(String fieldText)
+    {
+        String fieldEntry = fieldText;
+        StringBuffer sb = new StringBuffer(fieldEntry.length());
+
+        for (int i = 0; i < fieldEntry.length(); i++)
+        {
+            //System.out.print(fieldEntry.charAt(i));
+            if ((fieldEntry.charAt(i) != '{') && (fieldEntry.charAt(i) != '}'))
+            {
+                //System.out.print(fieldEntry.charAt(i));
+                sb.append(fieldEntry.charAt(i));
+            }
+        }
+
+        fieldEntry = sb.toString();
+        return fieldEntry;
+    }
+}
+///////////////////////////////////////////////////////////////////////////////
+//  END OF FILE.
+///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/layout/format/RemoveBracketsAddComma.java b/src/java/net/sf/jabref/export/layout/format/RemoveBracketsAddComma.java
index 4066cb3..f6b09c3 100644
--- a/src/java/net/sf/jabref/export/layout/format/RemoveBracketsAddComma.java
+++ b/src/java/net/sf/jabref/export/layout/format/RemoveBracketsAddComma.java
@@ -1,78 +1,78 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-///////////////////////////////////////////////////////////////////////////////
-//  Filename: $RCSfile$
-//  Purpose:  Atom representation.
-//  Language: Java
-//  Compiler: JDK 1.4
-//  Authors:  Joerg K. Wegner
-//  Version:  $Revision$
-//            $Date$
-//            $Author$
-//
-//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
-//
-//  This program is free software; 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.
-///////////////////////////////////////////////////////////////////////////////
-
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-
-/**
- * Remove brackets formatter.
- *
- * @author $author$
- * @version $Revision$
- */
-public class RemoveBracketsAddComma implements LayoutFormatter
-{
-    //~ Methods ////////////////////////////////////////////////////////////////
-
-    public String format(String fieldText)
-    {
-        String fieldEntry = fieldText;
-        StringBuffer sb = new StringBuffer(fieldEntry.length());
-
-        for (int i = 0; i < fieldEntry.length(); i++)
-	    {
-		//System.out.print(fieldEntry.charAt(i));
-		if ((fieldEntry.charAt(i) != '{') && (fieldEntry.charAt(i) != '}'))
-		    {
-			//System.out.print(fieldEntry.charAt(i));
-			sb.append(fieldEntry.charAt(i));
-		    }
-		if (fieldEntry.charAt(i) == '}')
-		    {
-			sb.append(",");
-		    }
-	    }
-	
-        fieldEntry = sb.toString();
-        return fieldEntry;
-    }
-}
-///////////////////////////////////////////////////////////////////////////////
-//  END OF FILE.
-///////////////////////////////////////////////////////////////////////////////
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile$
+//  Purpose:  Atom representation.
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Authors:  Joerg K. Wegner
+//  Version:  $Revision$
+//            $Date$
+//            $Author$
+//
+//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
+//
+//  This program is free software; 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.
+///////////////////////////////////////////////////////////////////////////////
+
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+
+/**
+ * Remove brackets formatter.
+ *
+ * @author $author$
+ * @version $Revision$
+ */
+public class RemoveBracketsAddComma implements LayoutFormatter
+{
+    //~ Methods ////////////////////////////////////////////////////////////////
+
+    public String format(String fieldText)
+    {
+        String fieldEntry = fieldText;
+        StringBuffer sb = new StringBuffer(fieldEntry.length());
+
+        for (int i = 0; i < fieldEntry.length(); i++)
+	    {
+		//System.out.print(fieldEntry.charAt(i));
+		if ((fieldEntry.charAt(i) != '{') && (fieldEntry.charAt(i) != '}'))
+		    {
+			//System.out.print(fieldEntry.charAt(i));
+			sb.append(fieldEntry.charAt(i));
+		    }
+		if (fieldEntry.charAt(i) == '}')
+		    {
+			sb.append(",");
+		    }
+	    }
+	
+        fieldEntry = sb.toString();
+        return fieldEntry;
+    }
+}
+///////////////////////////////////////////////////////////////////////////////
+//  END OF FILE.
+///////////////////////////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/layout/format/RemoveLatexCommands.java b/src/java/net/sf/jabref/export/layout/format/RemoveLatexCommands.java
index f93fc0d..838d5f7 100644
--- a/src/java/net/sf/jabref/export/layout/format/RemoveLatexCommands.java
+++ b/src/java/net/sf/jabref/export/layout/format/RemoveLatexCommands.java
@@ -1,109 +1,109 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-public class RemoveLatexCommands implements LayoutFormatter {
-
-  int i;
-
-  public String format(String field) {
-
-    StringBuffer sb = new StringBuffer("");
-    StringBuffer currentCommand = null;
-    char c;
-    boolean escaped = false, incommand = false;
-    for (i=0; i<field.length(); i++) {
-      c = field.charAt(i);
-      if (escaped && (c == '\\')) {
-        sb.append('\\');
-        escaped = false;
-      }
-      else if (c == '\\') {
-        escaped = true;
-        incommand = true;
-        currentCommand = new StringBuffer();
-      }
-      else if (!incommand && (c=='{' || c=='}')) {
-        // Swallow the brace.
-      }
-
-      else if (Character.isLetter(c) ||
-                (Globals.SPECIAL_COMMAND_CHARS.indexOf(""+c) >= 0)) {
-         escaped = false;
-         if (!incommand)
-           sb.append(c);
-           // Else we are in a command, and should not keep the letter.
-         else {
-           currentCommand.append( c);
-           if ((currentCommand.length() == 1)
-               && (Globals.SPECIAL_COMMAND_CHARS.indexOf(currentCommand.toString()) >= 0)) {
-             // This indicates that we are in a command of the type \^o or \~{n}
- /*            if (i >= field.length()-1)
-               break testCharCom;
-
-             String command = currentCommand.toString();
-             i++;
-             c = field.charAt(i);
-             //System.out.println("next: "+(char)c);
-             String combody;
-             if (c == '{') {
-               IntAndString part = getPart(field, i);
-               i += part.i;
-               combody = part.s;
-             }
-             else {
-               combody = field.substring(i,i+1);
-               //System.out.println("... "+combody);
-             }
-             Object result = Globals.HTMLCHARS.get(command+combody);
-             if (result != null)
-               sb.append((String)result);
- */
-             incommand = false;
-             escaped = false;
-
-           }
-
-        }
-      }
-
-      else if (Character.isLetter(c)) {
-        escaped = false;
-        if (!incommand)
-          sb.append(c);
-          // Else we are in a command, and should not keep the letter.
-        else
-          currentCommand.append(c);
-      }
-      else {
-        //if (!incommand || ((c!='{') && !Character.isWhitespace(c)))
-        if (!incommand || (!Character.isWhitespace(c) && (c != '{')))
-          sb.append(c);
-        else {
-          if (c != '{')
-            sb.append(c);
-        }
-        incommand = false;
-        escaped = false;
-      }
-    }
-
-    return sb.toString();
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+public class RemoveLatexCommands implements LayoutFormatter {
+
+  int i;
+
+  public String format(String field) {
+
+    StringBuffer sb = new StringBuffer("");
+    StringBuffer currentCommand = null;
+    char c;
+    boolean escaped = false, incommand = false;
+    for (i=0; i<field.length(); i++) {
+      c = field.charAt(i);
+      if (escaped && (c == '\\')) {
+        sb.append('\\');
+        escaped = false;
+      }
+      else if (c == '\\') {
+        escaped = true;
+        incommand = true;
+        currentCommand = new StringBuffer();
+      }
+      else if (!incommand && (c=='{' || c=='}')) {
+        // Swallow the brace.
+      }
+
+      else if (Character.isLetter(c) ||
+                (Globals.SPECIAL_COMMAND_CHARS.indexOf(""+c) >= 0)) {
+         escaped = false;
+         if (!incommand)
+           sb.append(c);
+           // Else we are in a command, and should not keep the letter.
+         else {
+           currentCommand.append( c);
+           if ((currentCommand.length() == 1)
+               && (Globals.SPECIAL_COMMAND_CHARS.indexOf(currentCommand.toString()) >= 0)) {
+             // This indicates that we are in a command of the type \^o or \~{n}
+ /*            if (i >= field.length()-1)
+               break testCharCom;
+
+             String command = currentCommand.toString();
+             i++;
+             c = field.charAt(i);
+             //System.out.println("next: "+(char)c);
+             String combody;
+             if (c == '{') {
+               IntAndString part = getPart(field, i);
+               i += part.i;
+               combody = part.s;
+             }
+             else {
+               combody = field.substring(i,i+1);
+               //System.out.println("... "+combody);
+             }
+             Object result = Globals.HTMLCHARS.get(command+combody);
+             if (result != null)
+               sb.append((String)result);
+ */
+             incommand = false;
+             escaped = false;
+
+           }
+
+        }
+      }
+
+      else if (Character.isLetter(c)) {
+        escaped = false;
+        if (!incommand)
+          sb.append(c);
+          // Else we are in a command, and should not keep the letter.
+        else
+          currentCommand.append(c);
+      }
+      else {
+        //if (!incommand || ((c!='{') && !Character.isWhitespace(c)))
+        if (!incommand || (!Character.isWhitespace(c) && (c != '{')))
+          sb.append(c);
+        else {
+          if (c != '{')
+            sb.append(c);
+        }
+        incommand = false;
+        escaped = false;
+      }
+    }
+
+    return sb.toString();
+  }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/RemoveTilde.java b/src/java/net/sf/jabref/export/layout/format/RemoveTilde.java
index 5528aa5..030cce4 100644
--- a/src/java/net/sf/jabref/export/layout/format/RemoveTilde.java
+++ b/src/java/net/sf/jabref/export/layout/format/RemoveTilde.java
@@ -1,74 +1,74 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-///////////////////////////////////////////////////////////////////////////////
-//  Filename: $RCSfile$
-//  Purpose:  Atom representation.
-//  Language: Java
-//  Compiler: JDK 1.4
-//  Authors:  Joerg K. Wegner
-//  Version:  $Revision$
-//            $Date$
-//            $Author$
-//
-//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
-//
-//  This program is free software; 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.
-///////////////////////////////////////////////////////////////////////////////
-
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Replace a non-command tilde ~ by a space.
- * 
- * Usefull for formatting Latex code.
- * 
- * @author $author$
- * @version $Revision$
- */
-public class RemoveTilde implements LayoutFormatter {
-
-	public String format(String fieldText) {
-		
-		StringBuffer result = new StringBuffer(fieldText.length());
-
-		char[] c = fieldText.toCharArray();
-		
-		for (int i = 0; i < c.length; i++) {
-
-			if (c[i] != '~'){
-				result.append(c[i]);
-				// Skip the next character if the current one is a backslash
-				if (c[i] == '\\' && i + 1 < c.length){
-					i++;
-					result.append(c[i]);
-				}
-			} else {
-				result.append(' ');
-			}
-		}
-		
-		return result.toString();
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile$
+//  Purpose:  Atom representation.
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Authors:  Joerg K. Wegner
+//  Version:  $Revision$
+//            $Date$
+//            $Author$
+//
+//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
+//
+//  This program is free software; 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.
+///////////////////////////////////////////////////////////////////////////////
+
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Replace a non-command tilde ~ by a space.
+ * 
+ * Usefull for formatting Latex code.
+ * 
+ * @author $author$
+ * @version $Revision$
+ */
+public class RemoveTilde implements LayoutFormatter {
+
+	public String format(String fieldText) {
+		
+		StringBuffer result = new StringBuffer(fieldText.length());
+
+		char[] c = fieldText.toCharArray();
+		
+		for (int i = 0; i < c.length; i++) {
+
+			if (c[i] != '~'){
+				result.append(c[i]);
+				// Skip the next character if the current one is a backslash
+				if (c[i] == '\\' && i + 1 < c.length){
+					i++;
+					result.append(c[i]);
+				}
+			} else {
+				result.append(' ');
+			}
+		}
+		
+		return result.toString();
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/RemoveWhitespace.java b/src/java/net/sf/jabref/export/layout/format/RemoveWhitespace.java
old mode 100755
new mode 100644
index 69b16ca..d291b23
--- a/src/java/net/sf/jabref/export/layout/format/RemoveWhitespace.java
+++ b/src/java/net/sf/jabref/export/layout/format/RemoveWhitespace.java
@@ -1,64 +1,64 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-///////////////////////////////////////////////////////////////////////////////
-//  Filename: $RCSfile$
-//  Purpose:  Atom representation.
-//  Language: Java
-//  Compiler: JDK 1.4
-//  Authors:  Joerg K. Wegner
-//  Version:  $Revision$
-//            $Date$
-//            $Author$
-//
-//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
-//
-//  This program is free software; 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.
-///////////////////////////////////////////////////////////////////////////////
-
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Remove non printable character formatter.
- * 
- * Based on the RemoveBrackets.java class (Revision 1.2) by mortenalver
- * 
- * @author $author$
- * @version $Revision$
- */
-public class RemoveWhitespace implements LayoutFormatter {
-
-    public String format(String fieldEntry) {
-
-        StringBuilder sb = new StringBuilder(fieldEntry.length());
-
-        for (char c : fieldEntry.toCharArray()) {
-            if (!Character.isWhitespace(c) || Character.isSpaceChar(c)) {
-                sb.append(c);
-            }
-        }
-
-        return sb.toString();
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile$
+//  Purpose:  Atom representation.
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Authors:  Joerg K. Wegner
+//  Version:  $Revision$
+//            $Date$
+//            $Author$
+//
+//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
+//
+//  This program is free software; 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.
+///////////////////////////////////////////////////////////////////////////////
+
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Remove non printable character formatter.
+ * 
+ * Based on the RemoveBrackets.java class (Revision 1.2) by mortenalver
+ * 
+ * @author $author$
+ * @version $Revision$
+ */
+public class RemoveWhitespace implements LayoutFormatter {
+
+    public String format(String fieldEntry) {
+
+        StringBuilder sb = new StringBuilder(fieldEntry.length());
+
+        for (char c : fieldEntry.toCharArray()) {
+            if (!Character.isWhitespace(c) || Character.isSpaceChar(c)) {
+                sb.append(c);
+            }
+        }
+
+        return sb.toString();
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/Replace.java b/src/java/net/sf/jabref/export/layout/format/Replace.java
index d789e06..170687e 100644
--- a/src/java/net/sf/jabref/export/layout/format/Replace.java
+++ b/src/java/net/sf/jabref/export/layout/format/Replace.java
@@ -1,69 +1,69 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.AbstractParamLayoutFormatter;
-
-/**
- * Formatter that does regexp replacement.
- *
- * To use this formatter, a two-part argument must be given. The parts are
- * separated by a comma. To indicate the comma character, use an escape
- * sequence: \,
- * For inserting newlines and tabs in arguments, use \n and \t, respectively.
- *
- * The first part is the regular expression to search for. Remember that any commma
- * character must be preceded by a backslash, and consequently a literal backslash must
- * be written as a pair of backslashes. A description of Java regular expressions can be
- * found at:
- *   http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
- *
- * The second part is the text to replace all matches with.
- *
- * For instance:
- *  \format[Replace(and,&)]{\author} :
- *      will output the "author" field after replacing all occurences of "and"
- *      by "&"
- *
- *  \format[Replace(\s,_)]{\author} :
- *      will output the "author" field after replacing all whitespace
- *      by underscores.
- *
- *  \format[Replace(\,,;)]{\author} :
- *      will output the "author" field after replacing all commas by semicolons.
- *
- */
-public class Replace extends AbstractParamLayoutFormatter {
-
-    private String regex = null, replaceWith = null;
-
-
-    public void setArgument(String arg) {
-        String[] parts = parseArgument(arg);
-
-        if (parts.length < 2)
-            return; // TODO: too few arguments. Print an error message here?
-        regex = parts[0];
-        replaceWith = parts[1];
-
-    }
-
-    public String format(String fieldText) {
-        if (regex == null)
-            return fieldText; // TODO: argument missing or invalid. Print an error message here?
-        return fieldText.replaceAll(regex, replaceWith);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.AbstractParamLayoutFormatter;
+
+/**
+ * Formatter that does regexp replacement.
+ *
+ * To use this formatter, a two-part argument must be given. The parts are
+ * separated by a comma. To indicate the comma character, use an escape
+ * sequence: \,
+ * For inserting newlines and tabs in arguments, use \n and \t, respectively.
+ *
+ * The first part is the regular expression to search for. Remember that any commma
+ * character must be preceded by a backslash, and consequently a literal backslash must
+ * be written as a pair of backslashes. A description of Java regular expressions can be
+ * found at:
+ *   http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
+ *
+ * The second part is the text to replace all matches with.
+ *
+ * For instance:
+ *  \format[Replace(and,&)]{\author} :
+ *      will output the "author" field after replacing all occurences of "and"
+ *      by "&"
+ *
+ *  \format[Replace(\s,_)]{\author} :
+ *      will output the "author" field after replacing all whitespace
+ *      by underscores.
+ *
+ *  \format[Replace(\,,;)]{\author} :
+ *      will output the "author" field after replacing all commas by semicolons.
+ *
+ */
+public class Replace extends AbstractParamLayoutFormatter {
+
+    private String regex = null, replaceWith = null;
+
+
+    public void setArgument(String arg) {
+        String[] parts = parseArgument(arg);
+
+        if (parts.length < 2)
+            return; // TODO: too few arguments. Print an error message here?
+        regex = parts[0];
+        replaceWith = parts[1];
+
+    }
+
+    public String format(String fieldText) {
+        if (regex == null)
+            return fieldText; // TODO: argument missing or invalid. Print an error message here?
+        return fieldText.replaceAll(regex, replaceWith);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java b/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
index c5e8969..799ae6f 100644
--- a/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
+++ b/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
@@ -1,56 +1,56 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import java.io.File;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Will expand the relative PDF path and return a URI for the given file (which
- * must exist).
- * 
- * Users should use FileLink (even if that uses f.getCanonicalPath() instead of toURI().toString()
- * 
- * @deprecated
- * @author $Author$
- * @version $Revision$ ($Date$)
- */
-public class ResolvePDF implements LayoutFormatter {
-
-	public String format(String field) {
-
-        // Search in the standard PDF directory:
-        /* Oops, this part is not sufficient. We need access to the
-          database's metadata in order to check if the database overrides
-          the standard file directory */
-        String dir = Globals.prefs.get("pdfDirectory");
-		File f = Util.expandFilename(field, new String[] { dir, "." });
-		
-		/*
-		 * Stumbled over this while investigating
-		 * 
-		 * https://sourceforge.net/tracker/index.php?func=detail&aid=1469903&group_id=92314&atid=600306
-		 */
-		if (f != null) {
-			return f.toURI().toString();
-		} else {
-			return field;
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import java.io.File;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Will expand the relative PDF path and return a URI for the given file (which
+ * must exist).
+ * 
+ * Users should use FileLink (even if that uses f.getCanonicalPath() instead of toURI().toString()
+ * 
+ * @deprecated
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ */
+public class ResolvePDF implements LayoutFormatter {
+
+	public String format(String field) {
+
+        // Search in the standard PDF directory:
+        /* Oops, this part is not sufficient. We need access to the
+          database's metadata in order to check if the database overrides
+          the standard file directory */
+        String dir = Globals.prefs.get("pdfDirectory");
+		File f = Util.expandFilename(field, new String[] { dir, "." });
+		
+		/*
+		 * Stumbled over this while investigating
+		 * 
+		 * https://sourceforge.net/tracker/index.php?func=detail&aid=1469903&group_id=92314&atid=600306
+		 */
+		if (f != null) {
+			return f.toURI().toString();
+		} else {
+			return field;
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/RisAuthors.java b/src/java/net/sf/jabref/export/layout/format/RisAuthors.java
index 3e222bb..80ae46e 100644
--- a/src/java/net/sf/jabref/export/layout/format/RisAuthors.java
+++ b/src/java/net/sf/jabref/export/layout/format/RisAuthors.java
@@ -1,42 +1,42 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.*;
-import net.sf.jabref.export.layout.*;
-
-public class RisAuthors implements ParamLayoutFormatter {
-	private String arg = "";
-
-	public String format(String s) {
-		if (s == null)
-			return "";
-		StringBuilder sb = new StringBuilder();
-		String[] authors = AuthorList.fixAuthor_lastNameFirst(s).split(" and ");
-		for (int i=0; i<authors.length; i++) {
-			sb.append(arg);
-			sb.append("  - ");
-			sb.append(authors[i]);
-			if (i < authors.length-1)
-				sb.append(Globals.NEWLINE);
-		}
-		return sb.toString();
-	}
-
-	public void setArgument(String arg) {
-	    this.arg = arg;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.*;
+import net.sf.jabref.export.layout.*;
+
+public class RisAuthors implements ParamLayoutFormatter {
+	private String arg = "";
+
+	public String format(String s) {
+		if (s == null)
+			return "";
+		StringBuilder sb = new StringBuilder();
+		String[] authors = AuthorList.fixAuthor_lastNameFirst(s).split(" and ");
+		for (int i=0; i<authors.length; i++) {
+			sb.append(arg);
+			sb.append("  - ");
+			sb.append(authors[i]);
+			if (i < authors.length-1)
+				sb.append(Globals.NEWLINE);
+		}
+		return sb.toString();
+	}
+
+	public void setArgument(String arg) {
+	    this.arg = arg;
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/RisKeywords.java b/src/java/net/sf/jabref/export/layout/format/RisKeywords.java
index 17aeaa4..08643a7 100644
--- a/src/java/net/sf/jabref/export/layout/format/RisKeywords.java
+++ b/src/java/net/sf/jabref/export/layout/format/RisKeywords.java
@@ -1,38 +1,38 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import java.util.List;
-
-import net.sf.jabref.*;
-import net.sf.jabref.export.layout.*;
-
-public class RisKeywords implements LayoutFormatter {
-
-	public String format(String s) {
-		if (s == null)
-			return "";
-		StringBuilder sb = new StringBuilder();
-		List<String> keywords = Util.getSeparatedKeywords(s);
-		for (int i=0; i<keywords.size(); i++) {
-			sb.append("KW  - ");
-			sb.append(keywords.get(i));
-			if (i < keywords.size()-1)
-				sb.append(Globals.NEWLINE);
-		}
-		return sb.toString();
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import java.util.List;
+
+import net.sf.jabref.*;
+import net.sf.jabref.export.layout.*;
+
+public class RisKeywords implements LayoutFormatter {
+
+	public String format(String s) {
+		if (s == null)
+			return "";
+		StringBuilder sb = new StringBuilder();
+		List<String> keywords = Util.getSeparatedKeywords(s);
+		for (int i=0; i<keywords.size(); i++) {
+			sb.append("KW  - ");
+			sb.append(keywords.get(i));
+			if (i < keywords.size()-1)
+				sb.append(Globals.NEWLINE);
+		}
+		return sb.toString();
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/RisMonth.java b/src/java/net/sf/jabref/export/layout/format/RisMonth.java
index 3d6609f..b4cf521 100644
--- a/src/java/net/sf/jabref/export/layout/format/RisMonth.java
+++ b/src/java/net/sf/jabref/export/layout/format/RisMonth.java
@@ -1,56 +1,56 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.*;
-import net.sf.jabref.export.layout.*;
-
-public class RisMonth implements LayoutFormatter {
-	
-	public String format(String s) {
-		if (s == null)
-			return "";
-		s = s.toLowerCase();
-		if (Globals.MONTH_STRINGS.get(s) != null)
-		    s = Globals.MONTH_STRINGS.get(s).toLowerCase();
-
-		if (s.equals("january"))
-		    return "01";
-		else if (s.equals("february"))
-		    return "02";
-		else if (s.equals("march"))
-		    return "03";
-		else if (s.equals("april"))
-		    return "04";
-		else if (s.equals("may"))
-		    return "05";
-		else if (s.equals("june"))
-		    return "06";
-		else if (s.equals("july"))
-		    return "07";
-		else if (s.equals("august"))
-		    return "08";
-		else if (s.equals("august"))
-		    return "09";
-		else if (s.equals("september"))
-		    return "10";
-		else if (s.equals("december"))
-		    return "12";
-		else
-		    return s;
-	}
-	
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.*;
+import net.sf.jabref.export.layout.*;
+
+public class RisMonth implements LayoutFormatter {
+	
+	public String format(String s) {
+		if (s == null)
+			return "";
+		s = s.toLowerCase();
+		if (Globals.MONTH_STRINGS.get(s) != null)
+		    s = Globals.MONTH_STRINGS.get(s).toLowerCase();
+
+		if (s.equals("january"))
+		    return "01";
+		else if (s.equals("february"))
+		    return "02";
+		else if (s.equals("march"))
+		    return "03";
+		else if (s.equals("april"))
+		    return "04";
+		else if (s.equals("may"))
+		    return "05";
+		else if (s.equals("june"))
+		    return "06";
+		else if (s.equals("july"))
+		    return "07";
+		else if (s.equals("august"))
+		    return "08";
+		else if (s.equals("august"))
+		    return "09";
+		else if (s.equals("september"))
+		    return "10";
+		else if (s.equals("december"))
+		    return "12";
+		else
+		    return s;
+	}
+	
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/ToLowerCase.java b/src/java/net/sf/jabref/export/layout/format/ToLowerCase.java
old mode 100755
new mode 100644
index f50fe7b..c5a3a5b
--- a/src/java/net/sf/jabref/export/layout/format/ToLowerCase.java
+++ b/src/java/net/sf/jabref/export/layout/format/ToLowerCase.java
@@ -1,53 +1,53 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-///////////////////////////////////////////////////////////////////////////////
-//  Filename: $RCSfile$
-//  Purpose:  Atom representation.
-//  Language: Java
-//  Compiler: JDK 1.4
-//  Authors:  Egon Willighagen
-//  Version:  $Revision$
-//            $Date$
-//            $Author$
-//
-//  Copyright (c) Egon Willighagen
-//
-//  This program is free software; 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.
-///////////////////////////////////////////////////////////////////////////////
-
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Convert the contents to lower case.
- * 
- * @author $author$
- * @version $Revision$
- */
-public class ToLowerCase implements LayoutFormatter {
-
-	public String format(String fieldText) {
-		return fieldText.toLowerCase();
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile$
+//  Purpose:  Atom representation.
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Authors:  Egon Willighagen
+//  Version:  $Revision$
+//            $Date$
+//            $Author$
+//
+//  Copyright (c) Egon Willighagen
+//
+//  This program is free software; 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.
+///////////////////////////////////////////////////////////////////////////////
+
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Convert the contents to lower case.
+ * 
+ * @author $author$
+ * @version $Revision$
+ */
+public class ToLowerCase implements LayoutFormatter {
+
+	public String format(String fieldText) {
+		return fieldText.toLowerCase();
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/ToUpperCase.java b/src/java/net/sf/jabref/export/layout/format/ToUpperCase.java
index 46120dd..29b61ce 100644
--- a/src/java/net/sf/jabref/export/layout/format/ToUpperCase.java
+++ b/src/java/net/sf/jabref/export/layout/format/ToUpperCase.java
@@ -1,29 +1,29 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Convert the contents to upper case.
- */
-public class ToUpperCase implements LayoutFormatter {
-
-    public String format(String fieldText) {
-		return fieldText.toUpperCase();
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Convert the contents to upper case.
+ */
+public class ToUpperCase implements LayoutFormatter {
+
+    public String format(String fieldText) {
+		return fieldText.toUpperCase();
+	}
+
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/WrapContent.java b/src/java/net/sf/jabref/export/layout/format/WrapContent.java
index 1e3f594..b70c1e1 100644
--- a/src/java/net/sf/jabref/export/layout/format/WrapContent.java
+++ b/src/java/net/sf/jabref/export/layout/format/WrapContent.java
@@ -1,51 +1,51 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.AbstractParamLayoutFormatter;
-
-/**
- * This formatter outputs the input value after adding a prefix and a postfix,
- * as long as the input value is non-empty. If the input value is empty, an
- * empty string is output (the prefix and postfix are not output in this case).
- *
- * The formatter requires an argument containing the prefix and postix separated
- * by a comma. To include a the comma character in either, use an escape sequence
- * (\,).
- */
-public class WrapContent extends AbstractParamLayoutFormatter {
-
-    
-    private String before = null, after = null;
-
-
-    public void setArgument(String arg) {
-	String[] parts = parseArgument(arg);
-        if (parts.length < 2)
-	   return;
-        before = parts[0];
-        after = parts[1];
-    }
-
-    public String format(String fieldText) {
-	if (before == null)
-	    return "";
-    	if (fieldText.length() == 0)
-	    return "";
-	else
-	    return new StringBuilder(before).append(fieldText).append(after).toString();    
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.AbstractParamLayoutFormatter;
+
+/**
+ * This formatter outputs the input value after adding a prefix and a postfix,
+ * as long as the input value is non-empty. If the input value is empty, an
+ * empty string is output (the prefix and postfix are not output in this case).
+ *
+ * The formatter requires an argument containing the prefix and postix separated
+ * by a comma. To include a the comma character in either, use an escape sequence
+ * (\,).
+ */
+public class WrapContent extends AbstractParamLayoutFormatter {
+
+    
+    private String before = null, after = null;
+
+
+    public void setArgument(String arg) {
+	String[] parts = parseArgument(arg);
+        if (parts.length < 2)
+	   return;
+        before = parts[0];
+        after = parts[1];
+    }
+
+    public String format(String fieldText) {
+	if (before == null)
+	    return "";
+    	if (fieldText.length() == 0)
+	    return "";
+	else
+	    return new StringBuilder(before).append(fieldText).append(after).toString();    
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/WrapFileLinks.java b/src/java/net/sf/jabref/export/layout/format/WrapFileLinks.java
index c6c3ea5..3367f1e 100644
--- a/src/java/net/sf/jabref/export/layout/format/WrapFileLinks.java
+++ b/src/java/net/sf/jabref/export/layout/format/WrapFileLinks.java
@@ -1,313 +1,313 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format;
-
-import net.sf.jabref.export.layout.AbstractParamLayoutFormatter;
-import net.sf.jabref.gui.FileListTableModel;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Util;
-
-import java.util.*;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * This formatter iterates over all file links, or all file links of a specified
- * type, outputting a format string given as the first argument. The format string
- * can contain a number of escape sequences indicating file link information to
- * be inserted into the string.
- * <p/>
- * This formatter can take an optional second argument specifying the name of a file
- * type. If specified, the iteration will only include those files with a file type
- * matching the given name (case-insensitively). If specified as an empty argument,
- * all file links will be included.
- * <p/>
- * After the second argument, pairs of additional arguments can be added in order to
- * specify regular expression replacements to be done upon the inserted link information
- * before insertion into the output string. A non-paired argument will be ignored.
- * In order to specify replacements without filtering on file types, use an empty second
- * argument.
- * <p/>
- * <p/>
- * <p/>
- * The escape sequences for embedding information are as follows:
- * <p/>
- * \i   : This inserts the iteration index (starting from 1), and can be useful if
- * the output list of files should be enumerated.
- * \p   : This inserts the file path of the file link. Relative links below your file directory
- *        will be expanded to their absolute path.
- * \r   : This inserts the file path without expanding relative links.
- * \f   : This inserts the name of the file link's type.
- * \x   : This inserts the file's extension, if any.
- * \d   : This inserts the file link's description, if any.
- * <p/>
- * For instance, an entry could contain a file link to the file "/home/john/report.pdf"
- * of the "PDF" type with description "John's final report".
- * <p/>
- * Using the WrapFileLinks formatter with the following argument:
- * <p/>
- * \format[WrapFileLinks(\i. \d (\p))]{\file}
- * <p/>
- * would give the following output:
- * 1. John's final report (/home/john/report.pdf)
- * <p/>
- * If the entry contained a second file link to the file "/home/john/draft.txt" of the
- * "Text file" type with description 'An early "draft"', the output would be as follows:
- * 1. John's final report (/home/john/report.pdf)
- * 2. An early "draft" (/home/john/draft.txt)
- * <p/>
- * If the formatter was called with a second argument, the list would be filtered.
- * For instance:
- * \format[WrapFileLinks(\i. \d (\p),text file)]{\file}
- * <p/>
- * would show only the text file:
- * 1. An early "draft" (/home/john/draft.txt)
- * <p/>
- * If we wanted this output to be part of an XML styled output, the quotes in the
- * file description could cause problems. Adding two additional arguments to translate
- * the quotes into XML characters solves this:
- * \format[WrapFileLinks(\i. \d (\p),text file,",")]{\file}
- * <p/>
- * would give the following output:
- * 1. An early "draft" (/home/john/draft.txt)
- *
- * Additional pairs of replacements can be added.
- */
-public class WrapFileLinks extends AbstractParamLayoutFormatter {
-
-
-    private String fileType = null;
-    private List<FormatEntry> format = null;
-    private Map<String, String> replacements = new HashMap<String, String>();
-
-    public void setArgument(String arg) {
-        String[] parts = parseArgument(arg);
-        format = parseFormatString(parts[0]);
-        if ((parts.length > 1) && (parts[1].trim().length() > 0))
-            fileType = parts[1];
-        if (parts.length > 2) {
-            for (int i = 2; i < parts.length-1; i+=2) {
-                replacements.put(parts[i], parts[i+1]);
-            }
-        }
-    }
-
-    public String format(String field) {
-        StringBuilder sb = new StringBuilder();
-
-        // Build the table model containing the links:
-        FileListTableModel tableModel = new FileListTableModel();
-        if (field == null)
-            return "";
-        tableModel.setContent(field);
-
-        int piv = 1; // counter for relevant iterations
-        for (int i = 0; i < tableModel.getRowCount(); i++) {
-            FileListEntry flEntry = tableModel.getEntry(i);
-            // Use this entry if we don't discriminate on types, or if the type fits:
-            if ((fileType == null) || flEntry.getType().getName().toLowerCase().equals(fileType)) {
-
-                for (FormatEntry entry : format) {
-                    switch (entry.getType()) {
-                        case STRING:
-                            sb.append(entry.getString());
-                            break;
-                        case ITERATION_COUNT:
-                            sb.append(String.valueOf(piv));
-                            break;
-                        case FILE_PATH:
-                            if (flEntry.getLink() == null)
-                                break;
-
-                            String[] dirs;
-                            // We need to resolve the file directory from the database's metadata,
-                            // but that is not available from a formatter. Therefore, as an
-                            // ugly hack, the export routine has set a global variable before
-                            // starting the export, which contains the database's file directory:
-                            if (Globals.prefs.fileDirForDatabase != null)
-                                dirs = Globals.prefs.fileDirForDatabase;
-                            else
-                                dirs = new String[] {Globals.prefs.get(GUIGlobals.FILE_FIELD + "Directory")};
-
-                            File f = Util.expandFilename(flEntry.getLink(), dirs);
-
-                            /*
-                             * Stumbled over this while investigating
-                             *
-                             * https://sourceforge.net/tracker/index.php?func=detail&aid=1469903&group_id=92314&atid=600306
-                             */
-                            if (f != null) {
-                                try {
-                                    sb.append(replaceStrings(f.getCanonicalPath()));//f.toURI().toString();
-                                } catch (IOException ex) {
-                                    ex.printStackTrace();
-                                    sb.append(replaceStrings(f.getPath()));
-                                }
-                            } else {
-                                sb.append(replaceStrings(flEntry.getLink()));
-                            }
-
-                            break;
-                        case RELATIVE_FILE_PATH:
-                            if (flEntry.getLink() == null)
-                                break;
-
-                            /*
-                             * Stumbled over this while investigating
-                             *
-                             * https://sourceforge.net/tracker/index.php?func=detail&aid=1469903&group_id=92314&atid=600306
-                             */
-                            sb.append(replaceStrings(flEntry.getLink()));//f.toURI().toString();
-
-                            break;
-                        case FILE_EXTENSION:
-                            if (flEntry.getLink() == null)
-                                break;
-                            int index = flEntry.getLink().lastIndexOf('.');
-                            if ((index >= 0) && (index < flEntry.getLink().length() - 1))
-                                sb.append(replaceStrings(flEntry.getLink().substring(index + 1)));
-                            break;
-                        case FILE_TYPE:
-                            sb.append(replaceStrings(flEntry.getType().getName()));
-                            break;
-                        case FILE_DESCRIPTION:
-                            sb.append(replaceStrings(flEntry.getDescription()));
-                            break;
-                    }
-                }
-
-                piv++; // update counter
-            }
-        }
-
-        return sb.toString();
-    }
-
-
-    protected String replaceStrings(String text) {
-        for (Iterator<String> i=replacements.keySet().iterator(); i.hasNext();) {
-            String from = i.next();
-            String to = replacements.get(from);
-            text = text.replaceAll(from, to);
-        }
-        return text;
-        
-    }
-
-
-    // Define codes for the various escape sequences that can be inserted:
-    public static final int STRING = 0, ITERATION_COUNT = 1, FILE_PATH = 2, FILE_TYPE = 3,
-            FILE_EXTENSION = 4, FILE_DESCRIPTION = 5, RELATIVE_FILE_PATH = 6;
-
-    // Define which escape sequences give what results:
-    final static Map<Character, Integer> ESCAPE_SEQ = new HashMap<Character, Integer>();
-
-    static {
-        ESCAPE_SEQ.put('i', ITERATION_COUNT);
-        ESCAPE_SEQ.put('p', FILE_PATH);
-        ESCAPE_SEQ.put('r', RELATIVE_FILE_PATH);
-        ESCAPE_SEQ.put('f', FILE_TYPE);
-        ESCAPE_SEQ.put('x', FILE_EXTENSION);
-        ESCAPE_SEQ.put('d', FILE_DESCRIPTION);
-    }
-
-    /**
-     * Parse a format string and return a list of FormatEntry objects. The format
-     * string is basically marked up with "\i" marking that the iteration number should
-     * be inserted, and with "\p" marking that the file path of the current iteration
-     * should be inserted, plus additional markers.
-     *
-     * @param format The marked-up string.
-     * @return the resulting format entries.
-     */
-    public List<FormatEntry> parseFormatString(String format) {
-        List<FormatEntry> l = new ArrayList<FormatEntry>();
-        StringBuilder sb = new StringBuilder();
-        boolean escaped = false;
-        for (int i = 0; i < format.length(); i++) {
-            char c = format.charAt(i);
-            if (!escaped) {
-                // Check if we are at the start of an escape sequence:
-                if (c == '\\')
-                    escaped = true;
-                else
-                    sb.append(c);
-            } else {
-                escaped = false; // we know we'll be out of escape mode after this
-                // Check if this escape sequence is meaningful:
-                if (c == '\\') {
-                    // Escaped backslash: means that we add a backslash:
-                    sb.append(c);
-                } else if (ESCAPE_SEQ.containsKey(c)) {
-                    // Ok, we have the code. Add the previous string (if any) and
-                    // the entry indicated by the escape sequence:
-                    if (sb.length() > 0) {
-                        l.add(new FormatEntry(sb.toString()));
-                        // Clear the buffer:
-                        sb = new StringBuilder();
-                    }
-                    l.add(new FormatEntry(ESCAPE_SEQ.get(c)));
-                } else {
-                    // Unknown escape sequence.
-                    sb.append('\\');
-                    sb.append(c);
-                    //System.out.println("Error: unknown escape sequence: \\"+String.valueOf(c));
-                }
-            }
-        }
-        // Finished scanning the string. If we collected text at the end, add an entry for it:
-        if (sb.length() > 0) {
-            l.add(new FormatEntry(sb.toString()));
-        }
-
-        return l;
-    }
-
-
-    /**
-     * This class defines the building blocks of a parsed format strings. Each FormatEntry
-     * represents either a literal string or a piece of information pertaining to the file
-     * link to be exported or to the iteration through a series of file links. For literal
-     * strings this class encapsulates the literal itself, while for other types of information,
-     * only a type code is provided, and the subclass needs to fill in the proper information
-     * based on the file link to be exported or the iteration status.
-     */
-    protected class FormatEntry {
-
-        private int type;
-        private String string = null;
-
-        public FormatEntry(int type) {
-            this.type = type;
-        }
-
-        public FormatEntry(String value) {
-            this.type = STRING;
-            this.string = value;
-        }
-
-        public int getType() {
-            return type;
-        }
-
-        public String getString() {
-            return string;
-        }
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.AbstractParamLayoutFormatter;
+import net.sf.jabref.gui.FileListTableModel;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Util;
+
+import java.util.*;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * This formatter iterates over all file links, or all file links of a specified
+ * type, outputting a format string given as the first argument. The format string
+ * can contain a number of escape sequences indicating file link information to
+ * be inserted into the string.
+ * <p/>
+ * This formatter can take an optional second argument specifying the name of a file
+ * type. If specified, the iteration will only include those files with a file type
+ * matching the given name (case-insensitively). If specified as an empty argument,
+ * all file links will be included.
+ * <p/>
+ * After the second argument, pairs of additional arguments can be added in order to
+ * specify regular expression replacements to be done upon the inserted link information
+ * before insertion into the output string. A non-paired argument will be ignored.
+ * In order to specify replacements without filtering on file types, use an empty second
+ * argument.
+ * <p/>
+ * <p/>
+ * <p/>
+ * The escape sequences for embedding information are as follows:
+ * <p/>
+ * \i   : This inserts the iteration index (starting from 1), and can be useful if
+ * the output list of files should be enumerated.
+ * \p   : This inserts the file path of the file link. Relative links below your file directory
+ *        will be expanded to their absolute path.
+ * \r   : This inserts the file path without expanding relative links.
+ * \f   : This inserts the name of the file link's type.
+ * \x   : This inserts the file's extension, if any.
+ * \d   : This inserts the file link's description, if any.
+ * <p/>
+ * For instance, an entry could contain a file link to the file "/home/john/report.pdf"
+ * of the "PDF" type with description "John's final report".
+ * <p/>
+ * Using the WrapFileLinks formatter with the following argument:
+ * <p/>
+ * \format[WrapFileLinks(\i. \d (\p))]{\file}
+ * <p/>
+ * would give the following output:
+ * 1. John's final report (/home/john/report.pdf)
+ * <p/>
+ * If the entry contained a second file link to the file "/home/john/draft.txt" of the
+ * "Text file" type with description 'An early "draft"', the output would be as follows:
+ * 1. John's final report (/home/john/report.pdf)
+ * 2. An early "draft" (/home/john/draft.txt)
+ * <p/>
+ * If the formatter was called with a second argument, the list would be filtered.
+ * For instance:
+ * \format[WrapFileLinks(\i. \d (\p),text file)]{\file}
+ * <p/>
+ * would show only the text file:
+ * 1. An early "draft" (/home/john/draft.txt)
+ * <p/>
+ * If we wanted this output to be part of an XML styled output, the quotes in the
+ * file description could cause problems. Adding two additional arguments to translate
+ * the quotes into XML characters solves this:
+ * \format[WrapFileLinks(\i. \d (\p),text file,",")]{\file}
+ * <p/>
+ * would give the following output:
+ * 1. An early "draft" (/home/john/draft.txt)
+ *
+ * Additional pairs of replacements can be added.
+ */
+public class WrapFileLinks extends AbstractParamLayoutFormatter {
+
+
+    private String fileType = null;
+    private List<FormatEntry> format = null;
+    private Map<String, String> replacements = new HashMap<String, String>();
+
+    public void setArgument(String arg) {
+        String[] parts = parseArgument(arg);
+        format = parseFormatString(parts[0]);
+        if ((parts.length > 1) && (parts[1].trim().length() > 0))
+            fileType = parts[1];
+        if (parts.length > 2) {
+            for (int i = 2; i < parts.length-1; i+=2) {
+                replacements.put(parts[i], parts[i+1]);
+            }
+        }
+    }
+
+    public String format(String field) {
+        StringBuilder sb = new StringBuilder();
+
+        // Build the table model containing the links:
+        FileListTableModel tableModel = new FileListTableModel();
+        if (field == null)
+            return "";
+        tableModel.setContent(field);
+
+        int piv = 1; // counter for relevant iterations
+        for (int i = 0; i < tableModel.getRowCount(); i++) {
+            FileListEntry flEntry = tableModel.getEntry(i);
+            // Use this entry if we don't discriminate on types, or if the type fits:
+            if ((fileType == null) || flEntry.getType().getName().toLowerCase().equals(fileType)) {
+
+                for (FormatEntry entry : format) {
+                    switch (entry.getType()) {
+                        case STRING:
+                            sb.append(entry.getString());
+                            break;
+                        case ITERATION_COUNT:
+                            sb.append(String.valueOf(piv));
+                            break;
+                        case FILE_PATH:
+                            if (flEntry.getLink() == null)
+                                break;
+
+                            String[] dirs;
+                            // We need to resolve the file directory from the database's metadata,
+                            // but that is not available from a formatter. Therefore, as an
+                            // ugly hack, the export routine has set a global variable before
+                            // starting the export, which contains the database's file directory:
+                            if (Globals.prefs.fileDirForDatabase != null)
+                                dirs = Globals.prefs.fileDirForDatabase;
+                            else
+                                dirs = new String[] {Globals.prefs.get(GUIGlobals.FILE_FIELD + "Directory")};
+
+                            File f = Util.expandFilename(flEntry.getLink(), dirs);
+
+                            /*
+                             * Stumbled over this while investigating
+                             *
+                             * https://sourceforge.net/tracker/index.php?func=detail&aid=1469903&group_id=92314&atid=600306
+                             */
+                            if (f != null) {
+                                try {
+                                    sb.append(replaceStrings(f.getCanonicalPath()));//f.toURI().toString();
+                                } catch (IOException ex) {
+                                    ex.printStackTrace();
+                                    sb.append(replaceStrings(f.getPath()));
+                                }
+                            } else {
+                                sb.append(replaceStrings(flEntry.getLink()));
+                            }
+
+                            break;
+                        case RELATIVE_FILE_PATH:
+                            if (flEntry.getLink() == null)
+                                break;
+
+                            /*
+                             * Stumbled over this while investigating
+                             *
+                             * https://sourceforge.net/tracker/index.php?func=detail&aid=1469903&group_id=92314&atid=600306
+                             */
+                            sb.append(replaceStrings(flEntry.getLink()));//f.toURI().toString();
+
+                            break;
+                        case FILE_EXTENSION:
+                            if (flEntry.getLink() == null)
+                                break;
+                            int index = flEntry.getLink().lastIndexOf('.');
+                            if ((index >= 0) && (index < flEntry.getLink().length() - 1))
+                                sb.append(replaceStrings(flEntry.getLink().substring(index + 1)));
+                            break;
+                        case FILE_TYPE:
+                            sb.append(replaceStrings(flEntry.getType().getName()));
+                            break;
+                        case FILE_DESCRIPTION:
+                            sb.append(replaceStrings(flEntry.getDescription()));
+                            break;
+                    }
+                }
+
+                piv++; // update counter
+            }
+        }
+
+        return sb.toString();
+    }
+
+
+    protected String replaceStrings(String text) {
+        for (Iterator<String> i=replacements.keySet().iterator(); i.hasNext();) {
+            String from = i.next();
+            String to = replacements.get(from);
+            text = text.replaceAll(from, to);
+        }
+        return text;
+        
+    }
+
+
+    // Define codes for the various escape sequences that can be inserted:
+    public static final int STRING = 0, ITERATION_COUNT = 1, FILE_PATH = 2, FILE_TYPE = 3,
+            FILE_EXTENSION = 4, FILE_DESCRIPTION = 5, RELATIVE_FILE_PATH = 6;
+
+    // Define which escape sequences give what results:
+    final static Map<Character, Integer> ESCAPE_SEQ = new HashMap<Character, Integer>();
+
+    static {
+        ESCAPE_SEQ.put('i', ITERATION_COUNT);
+        ESCAPE_SEQ.put('p', FILE_PATH);
+        ESCAPE_SEQ.put('r', RELATIVE_FILE_PATH);
+        ESCAPE_SEQ.put('f', FILE_TYPE);
+        ESCAPE_SEQ.put('x', FILE_EXTENSION);
+        ESCAPE_SEQ.put('d', FILE_DESCRIPTION);
+    }
+
+    /**
+     * Parse a format string and return a list of FormatEntry objects. The format
+     * string is basically marked up with "\i" marking that the iteration number should
+     * be inserted, and with "\p" marking that the file path of the current iteration
+     * should be inserted, plus additional markers.
+     *
+     * @param format The marked-up string.
+     * @return the resulting format entries.
+     */
+    public List<FormatEntry> parseFormatString(String format) {
+        List<FormatEntry> l = new ArrayList<FormatEntry>();
+        StringBuilder sb = new StringBuilder();
+        boolean escaped = false;
+        for (int i = 0; i < format.length(); i++) {
+            char c = format.charAt(i);
+            if (!escaped) {
+                // Check if we are at the start of an escape sequence:
+                if (c == '\\')
+                    escaped = true;
+                else
+                    sb.append(c);
+            } else {
+                escaped = false; // we know we'll be out of escape mode after this
+                // Check if this escape sequence is meaningful:
+                if (c == '\\') {
+                    // Escaped backslash: means that we add a backslash:
+                    sb.append(c);
+                } else if (ESCAPE_SEQ.containsKey(c)) {
+                    // Ok, we have the code. Add the previous string (if any) and
+                    // the entry indicated by the escape sequence:
+                    if (sb.length() > 0) {
+                        l.add(new FormatEntry(sb.toString()));
+                        // Clear the buffer:
+                        sb = new StringBuilder();
+                    }
+                    l.add(new FormatEntry(ESCAPE_SEQ.get(c)));
+                } else {
+                    // Unknown escape sequence.
+                    sb.append('\\');
+                    sb.append(c);
+                    //System.out.println("Error: unknown escape sequence: \\"+String.valueOf(c));
+                }
+            }
+        }
+        // Finished scanning the string. If we collected text at the end, add an entry for it:
+        if (sb.length() > 0) {
+            l.add(new FormatEntry(sb.toString()));
+        }
+
+        return l;
+    }
+
+
+    /**
+     * This class defines the building blocks of a parsed format strings. Each FormatEntry
+     * represents either a literal string or a piece of information pertaining to the file
+     * link to be exported or to the iteration through a series of file links. For literal
+     * strings this class encapsulates the literal itself, while for other types of information,
+     * only a type code is provided, and the subclass needs to fill in the proper information
+     * based on the file link to be exported or the iteration status.
+     */
+    protected class FormatEntry {
+
+        private int type;
+        private String string = null;
+
+        public FormatEntry(int type) {
+            this.type = type;
+        }
+
+        public FormatEntry(String value) {
+            this.type = STRING;
+            this.string = value;
+        }
+
+        public int getType() {
+            return type;
+        }
+
+        public String getString() {
+            return string;
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/XMLChars.java b/src/java/net/sf/jabref/export/layout/format/XMLChars.java
index e109a91..631cf0a 100644
--- a/src/java/net/sf/jabref/export/layout/format/XMLChars.java
+++ b/src/java/net/sf/jabref/export/layout/format/XMLChars.java
@@ -1,127 +1,127 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-///////////////////////////////////////////////////////////////////////////////
-//  Filename: $RCSfile$
-//  Purpose:  Atom representation.
-//  Language: Java
-//  Compiler: JDK 1.4
-//  Authors:  Joerg K. Wegner, Morten O. Alver
-//  Version:  $Revision$
-//            $Date$
-//            $Author$
-//
-//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
-//
-//  This program is free software; 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.
-///////////////////////////////////////////////////////////////////////////////
-
-package net.sf.jabref.export.layout.format;
-
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * Changes {\^o} or {\^{o}} to ?
- * 
- * @author $author$
- * @version $Revision$
- */
-public class XMLChars implements LayoutFormatter {
-	Pattern pattern = Pattern.compile(".*\\{\\\\.*[a-zA-Z]\\}.*");
-
-	public String format(String fieldText) {
-
-		fieldText = firstFormat(fieldText);
-
-		for (Map.Entry<String, String> entry : Globals.XML_CHARS.entrySet()){
-			String s = entry.getKey();
-			String repl = entry.getValue();
-			if (repl != null)
-				fieldText = fieldText.replaceAll(s, repl);
-		}
-		return restFormat(fieldText);
-	}
-
-	private String firstFormat(String s) {
-		return s.replaceAll("&|\\\\&", "&#x0026;").replaceAll("--", "&#x2013;");
-	}
-
-	boolean[] forceReplace;
-	
-	private String restFormat(String toFormat) {
-		
-		String fieldText = toFormat.replaceAll("\\}", "").replaceAll("\\{", "");
-
-		// now some copy-paste problems most often occuring in abstracts when
-		// copied from PDF
-		// AND: this is accepted in the abstract of bibtex files, so are forced
-		// to catch those cases
-
-		if (forceReplace == null){
-			 forceReplace = new boolean[126];
-			 for (int i = 0; i < 40; i++){
-				 forceReplace[i] = true;
-			 }
-			 forceReplace[32] = false;
-			 for (int i : new int[] { 44, 45, 63, 64, 94, 95, 96, 124 }){
-				 forceReplace[i] = true;
-			 }
-		}
-		
-		StringBuffer buffer = new StringBuffer(fieldText.length() * 2);
-		
-		for (int i = 0; i < fieldText.length(); i++) {
-			int code = (fieldText.charAt(i));
-		
-			// Checking the case when the character is already escaped
-			// Just push "&#" to the buffer and keep going from the next char
-			if ((code==38) && (fieldText.charAt(i+1) == 35)){
-				i += 2;
-				buffer.append("&#");
-				code = (fieldText.charAt(i));
-			}
-			
-			// TODO: Check whether > 125 is correct here or whether it should rather be >=  
-			if (code > 125 || forceReplace[code]) {
-				buffer.append("&#" + code + ";");
-			} else {
-				buffer.append((char) code);
-			}
-		}
-		fieldText = buffer.toString();
-
-		// use common abbreviations for <, > instead of code
-		for (Map.Entry<String, String> entry : Globals.ASCII2XML_CHARS.entrySet()){
-			String s = entry.getKey();
-			String repl = entry.getValue();
-		
-			if (repl != null)
-				fieldText = fieldText.replaceAll(s, repl);
-		}
-
-		return fieldText;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+///////////////////////////////////////////////////////////////////////////////
+//  Filename: $RCSfile$
+//  Purpose:  Atom representation.
+//  Language: Java
+//  Compiler: JDK 1.4
+//  Authors:  Joerg K. Wegner, Morten O. Alver
+//  Version:  $Revision$
+//            $Date$
+//            $Author$
+//
+//  Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
+//
+//  This program is free software; 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.
+///////////////////////////////////////////////////////////////////////////////
+
+package net.sf.jabref.export.layout.format;
+
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * Changes {\^o} or {\^{o}} to ?
+ * 
+ * @author $author$
+ * @version $Revision$
+ */
+public class XMLChars implements LayoutFormatter {
+	Pattern pattern = Pattern.compile(".*\\{\\\\.*[a-zA-Z]\\}.*");
+
+	public String format(String fieldText) {
+
+		fieldText = firstFormat(fieldText);
+
+		for (Map.Entry<String, String> entry : Globals.XML_CHARS.entrySet()){
+			String s = entry.getKey();
+			String repl = entry.getValue();
+			if (repl != null)
+				fieldText = fieldText.replaceAll(s, repl);
+		}
+		return restFormat(fieldText);
+	}
+
+	private String firstFormat(String s) {
+		return s.replaceAll("&|\\\\&", "&#x0026;").replaceAll("--", "&#x2013;");
+	}
+
+	boolean[] forceReplace;
+	
+	private String restFormat(String toFormat) {
+		
+		String fieldText = toFormat.replaceAll("\\}", "").replaceAll("\\{", "");
+
+		// now some copy-paste problems most often occuring in abstracts when
+		// copied from PDF
+		// AND: this is accepted in the abstract of bibtex files, so are forced
+		// to catch those cases
+
+		if (forceReplace == null){
+			 forceReplace = new boolean[126];
+			 for (int i = 0; i < 40; i++){
+				 forceReplace[i] = true;
+			 }
+			 forceReplace[32] = false;
+			 for (int i : new int[] { 44, 45, 63, 64, 94, 95, 96, 124 }){
+				 forceReplace[i] = true;
+			 }
+		}
+		
+		StringBuffer buffer = new StringBuffer(fieldText.length() * 2);
+		
+		for (int i = 0; i < fieldText.length(); i++) {
+			int code = (fieldText.charAt(i));
+		
+			// Checking the case when the character is already escaped
+			// Just push "&#" to the buffer and keep going from the next char
+			if ((code==38) && (fieldText.charAt(i+1) == 35)){
+				i += 2;
+				buffer.append("&#");
+				code = (fieldText.charAt(i));
+			}
+			
+			// TODO: Check whether > 125 is correct here or whether it should rather be >=  
+			if (code > 125 || forceReplace[code]) {
+				buffer.append("&#" + code + ";");
+			} else {
+				buffer.append((char) code);
+			}
+		}
+		fieldText = buffer.toString();
+
+		// use common abbreviations for <, > instead of code
+		for (Map.Entry<String, String> entry : Globals.ASCII2XML_CHARS.entrySet()){
+			String s = entry.getKey();
+			String repl = entry.getValue();
+		
+			if (repl != null)
+				fieldText = fieldText.replaceAll(s, repl);
+		}
+
+		return fieldText;
+	}
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/plugin/NameFormat.java b/src/java/net/sf/jabref/export/layout/format/plugin/NameFormat.java
index c8fb208..4000625 100644
--- a/src/java/net/sf/jabref/export/layout/format/plugin/NameFormat.java
+++ b/src/java/net/sf/jabref/export/layout/format/plugin/NameFormat.java
@@ -1,166 +1,166 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.export.layout.format.plugin;
-
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.bst.BibtexNameFormatter;
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-/**
- * This layout formatter uses the Bibtex name.format$ method and provides ultimate flexibility:
- * 
- * The formatter needs a parameter to be passed in that follows the following format:
- * 
- * <case1>@<range11>@"<format>"@<range12>@"<format>"@<range13>...@@
- * 
- * <case2>@<range21>@... and so on.
- *
- * Individual cases are separated by @@ and items in a case by @.
- * 
- * Cases are just integers or the character * and will tell the formatter to apply the following formats if there are 
- * less or equal authors given to it. The cases must be in strict increasing order with the * in the last position. 
- * 
- * For instance:
- * 
- * case1 = 2
- * case2 = 3
- * case3 = *
- * 
- * Ranges are either <integer>..<integer>, <integer> or the character * using a 1 based index for indexing 
- * authors from the given authorlist. Integer indexes can be negative to denote them to start from 
- * the end of the list where -1 is the last author.
- * 
- * For instance with an authorlist of "Joe Doe and Mary Jane and Bruce Bar and Arthur Kay":
- * 
- * 1..3 will affect Joe, Mary and Bruce
- * 
- * 4..4 will affect Arthur
- * 
- * * will affect all of them
- * 
- * 2..-1 will affect Mary, Bruce and Arthur
- * 
- * The <format> uses the Bibtex formatter format:
- * 
- * The four letter v, f, l, j indicate the name parts von, first, last, jr which 
- * are used within curly braces. A single letter v, f, l, j indicates that the name should be abbreviated.
- * To put a quote in the format string quote it using \" (mh. this doesn't work yet)
- * 
- * I give some examples but would rather point you to the bibtex documentation.
- * 
- * "{ll}, {f}." Will turn "Joe Doe" into "Doe, J."
- * 
- * Complete example:
- * 
- * To turn: 
- * 
- * "Joe Doe and Mary Jane and Bruce Bar and Arthur Kay"
- * 
- * into 
- * 
- * "Doe, J., Jane, M., Bar, B. and Kay, A."
- * 
- * you would use
- * 
- * 1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll}, {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll}, {f}.
- * 
- * Yeah this is trouble-some to write, but should work.
- * 
- * For more examples see the test-cases.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- *
- */
-public class NameFormat implements LayoutFormatter {
-
-	public static final String DEFAULT_FORMAT = "1@*@{ff }{vv }{ll}{, jj}@@*@1@{ff }{vv }{ll}{, jj}@*@, {ff }{vv }{ll}{, jj}";
-
-	public String format(String toFormat, AuthorList al, String[] formats){
-		
-		StringBuffer sb = new StringBuffer();
-		
-		int n = al.size();
-		
-		for (int i = 1; i <= al.size(); i++){
-			for (int j = 1; j < formats.length; j+=2){
-				if (formats[j].equals("*")){
-					sb.append(BibtexNameFormatter.formatName(toFormat, i, formats[j+1], null));
-					break;
-				} else {
-					String[] range = formats[j].split("\\.\\.");
-					
-					int s,e;
-					if (range.length == 2){
-						s = Integer.parseInt(range[0]);
-						e = Integer.parseInt(range[1]);
-					} else {
-						s = e = Integer.parseInt(range[0]); 
-					}
-					if (s < 0) s += n + 1;
-					if (e < 0) e += n + 1;
-					if (e < s) { int temp = e; e = s; s = temp; }
-
-					if (s <= i && i <= e){
-						sb.append(BibtexNameFormatter.formatName(toFormat, i, formats[j+1], null));
-						break;
-					}
-				}
-			}
-		}	
-		return sb.toString();
-		
-	}
-	
-	public String format(String toFormat, String parameters, BibtexEntry currentEntry) {
-		
-		AuthorList al = AuthorList.getAuthorList(toFormat);
-		
-		if (parameters == null || parameters.length() == 0){
-			parameters = "*:*:\"{ff}{vv}{ll}{,jj} \"";
-		}
-		
-		String[] cases = parameters.split("@@");
-		for (int i = 0; i < cases.length; i++){
-			String[] formatString = cases[i].split("@");
-			
-			if (formatString.length < 3){
-				// Error
-				return toFormat;
-			}
-			
-			if (formatString[0].equals("*")){
-				return format(toFormat, al, formatString);
-			} else {
-				if (al.size() <= Integer.parseInt(formatString[0])){
-					return format(toFormat, al, formatString);
-				}
-			}
-		}
-		return toFormat;
-	}
-
-	public String format(String fieldText) {
-		return format(fieldText, parameter, null);
-	}
-
-	String parameter = DEFAULT_FORMAT;
-	
-	public void setParameter(String parameter) {
-		this.parameter = parameter;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.export.layout.format.plugin;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.bst.BibtexNameFormatter;
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ * This layout formatter uses the Bibtex name.format$ method and provides ultimate flexibility:
+ * 
+ * The formatter needs a parameter to be passed in that follows the following format:
+ * 
+ * <case1>@<range11>@"<format>"@<range12>@"<format>"@<range13>...@@
+ * 
+ * <case2>@<range21>@... and so on.
+ *
+ * Individual cases are separated by @@ and items in a case by @.
+ * 
+ * Cases are just integers or the character * and will tell the formatter to apply the following formats if there are 
+ * less or equal authors given to it. The cases must be in strict increasing order with the * in the last position. 
+ * 
+ * For instance:
+ * 
+ * case1 = 2
+ * case2 = 3
+ * case3 = *
+ * 
+ * Ranges are either <integer>..<integer>, <integer> or the character * using a 1 based index for indexing 
+ * authors from the given authorlist. Integer indexes can be negative to denote them to start from 
+ * the end of the list where -1 is the last author.
+ * 
+ * For instance with an authorlist of "Joe Doe and Mary Jane and Bruce Bar and Arthur Kay":
+ * 
+ * 1..3 will affect Joe, Mary and Bruce
+ * 
+ * 4..4 will affect Arthur
+ * 
+ * * will affect all of them
+ * 
+ * 2..-1 will affect Mary, Bruce and Arthur
+ * 
+ * The <format> uses the Bibtex formatter format:
+ * 
+ * The four letter v, f, l, j indicate the name parts von, first, last, jr which 
+ * are used within curly braces. A single letter v, f, l, j indicates that the name should be abbreviated.
+ * To put a quote in the format string quote it using \" (mh. this doesn't work yet)
+ * 
+ * I give some examples but would rather point you to the bibtex documentation.
+ * 
+ * "{ll}, {f}." Will turn "Joe Doe" into "Doe, J."
+ * 
+ * Complete example:
+ * 
+ * To turn: 
+ * 
+ * "Joe Doe and Mary Jane and Bruce Bar and Arthur Kay"
+ * 
+ * into 
+ * 
+ * "Doe, J., Jane, M., Bar, B. and Kay, A."
+ * 
+ * you would use
+ * 
+ * 1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll}, {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll}, {f}.
+ * 
+ * Yeah this is trouble-some to write, but should work.
+ * 
+ * For more examples see the test-cases.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ *
+ */
+public class NameFormat implements LayoutFormatter {
+
+	public static final String DEFAULT_FORMAT = "1@*@{ff }{vv }{ll}{, jj}@@*@1@{ff }{vv }{ll}{, jj}@*@, {ff }{vv }{ll}{, jj}";
+
+	public String format(String toFormat, AuthorList al, String[] formats){
+		
+		StringBuffer sb = new StringBuffer();
+		
+		int n = al.size();
+		
+		for (int i = 1; i <= al.size(); i++){
+			for (int j = 1; j < formats.length; j+=2){
+				if (formats[j].equals("*")){
+					sb.append(BibtexNameFormatter.formatName(toFormat, i, formats[j+1], null));
+					break;
+				} else {
+					String[] range = formats[j].split("\\.\\.");
+					
+					int s,e;
+					if (range.length == 2){
+						s = Integer.parseInt(range[0]);
+						e = Integer.parseInt(range[1]);
+					} else {
+						s = e = Integer.parseInt(range[0]); 
+					}
+					if (s < 0) s += n + 1;
+					if (e < 0) e += n + 1;
+					if (e < s) { int temp = e; e = s; s = temp; }
+
+					if (s <= i && i <= e){
+						sb.append(BibtexNameFormatter.formatName(toFormat, i, formats[j+1], null));
+						break;
+					}
+				}
+			}
+		}	
+		return sb.toString();
+		
+	}
+	
+	public String format(String toFormat, String parameters, BibtexEntry currentEntry) {
+		
+		AuthorList al = AuthorList.getAuthorList(toFormat);
+		
+		if (parameters == null || parameters.length() == 0){
+			parameters = "*:*:\"{ff}{vv}{ll}{,jj} \"";
+		}
+		
+		String[] cases = parameters.split("@@");
+		for (int i = 0; i < cases.length; i++){
+			String[] formatString = cases[i].split("@");
+			
+			if (formatString.length < 3){
+				// Error
+				return toFormat;
+			}
+			
+			if (formatString[0].equals("*")){
+				return format(toFormat, al, formatString);
+			} else {
+				if (al.size() <= Integer.parseInt(formatString[0])){
+					return format(toFormat, al, formatString);
+				}
+			}
+		}
+		return toFormat;
+	}
+
+	public String format(String fieldText) {
+		return format(fieldText, parameter, null);
+	}
+
+	String parameter = DEFAULT_FORMAT;
+	
+	public void setParameter(String parameter) {
+		this.parameter = parameter;
+	}
+}
diff --git a/src/java/net/sf/jabref/external/AccessLinksForEntries.java b/src/java/net/sf/jabref/external/AccessLinksForEntries.java
index b36aa65..323fb7b 100644
--- a/src/java/net/sf/jabref/external/AccessLinksForEntries.java
+++ b/src/java/net/sf/jabref/external/AccessLinksForEntries.java
@@ -1,229 +1,229 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import javax.swing.JDialog;
-import javax.swing.JProgressBar;
-import javax.swing.SwingUtilities;
-
-import net.sf.jabref.BaseAction;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.Util;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.gui.FileListTableModel;
-
-
-/**
- * This class handles the task of looking up all external files linked for a set
- * of entries. This is useful for tasks where the user wants e.g. to send a database
- * with external files included.
- */
-public class AccessLinksForEntries {
-
-    /**
-     * Look up all external files linked from (at least) one of the entries in a set.
-     * This method does not verify the links.
-     *
-     * @param entries The set of entries.
-     * @return A list of FileListEntry objects pointing to the external files.
-     */
-    public static List<FileListEntry> getExternalLinksForEntries(List<BibtexEntry> entries) {
-        List<FileListEntry> files = new ArrayList<FileListEntry>();
-        FileListTableModel model = new FileListTableModel();
-        for (Iterator<BibtexEntry> iterator = entries.iterator(); iterator.hasNext();) {
-            BibtexEntry entry = iterator.next();
-            String links = entry.getField(GUIGlobals.FILE_FIELD);
-            if (links == null)
-                continue;
-            model.setContent(links);
-            for (int i=0; i<model.getRowCount(); i++)
-                files.add(model.getEntry(i));
-        }
-        return files;
-    }
-
-    /**
-     * Take a list of external links and copy the referred files to a given directory.
-     * This method should be run off the Event Dispatch Thread. A progress bar, if given,
-     * will be updated on the EDT.
-     *
-     * @param files The list of file links.
-     * @param toDir The directory to copy the files to.
-     * @param metaData The MetaData for the database containing the external links. This is needed
-     *  because the database might have its own file directory.
-     * @param prog A JProgressBar which will be updated to show the progress of the process.
-     *  This argument can be null if no progress bar is needed.
-     * @param deleteOriginalFiles if true, the files in their original locations will be deleted
-     *  after copying, for each file whose source directory is different from the destination
-     *  directory differs.
-     * @param callback An ActionListener which should be notified when the process is finished.
-     *  This parameter can be null if no callback is needed.
-     */
-    public static void copyExternalLinksToDirectory(final List<FileListEntry> files, File toDir,
-                                                    MetaData metaData, final JProgressBar prog,
-                                                    boolean deleteOriginalFiles,
-                                                    final ActionListener callback) {
-
-        if (prog != null) SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                prog.setMaximum(files.size());
-                prog.setValue(0);
-                prog.setIndeterminate(false);
-            }
-        });
-
-        Set<String> fileNames = new HashSet<String>();
-
-        int i=0;
-
-        for (Iterator<FileListEntry> iterator = files.iterator(); iterator.hasNext();) {
-            FileListEntry entry = iterator.next();
-            File file = new File(entry.getLink());
-
-            // We try to check the extension for the file:
-            String name = file.getName();
-            int pos = name.lastIndexOf('.');
-            String extension = ((pos >= 0) && (pos < name.length() - 1)) ? name.substring(pos + 1)
-                .trim().toLowerCase() : null;
-
-            // Find the default directory for this field type, if any:
-            String[] dir = metaData.getFileDirectory(extension);
-            // Include the standard "file" directory:
-            String[] fileDir = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
-            // Include the directory of the bib file:
-            ArrayList<String> al = new ArrayList<String>();
-            for (int i2 = 0; i2 < dir.length; i2++)
-                if (!al.contains(dir[i2])) al.add(dir[i2]);
-            for (int i2 = 0; i2 < fileDir.length; i2++)
-                if (!al.contains(fileDir[i2])) al.add(fileDir[i2]);
-
-            String[] dirs = al.toArray(new String[al.size()]);
-            File tmp = Util.expandFilename(entry.getLink(), dirs);
-            if (tmp != null)
-                file = tmp;
-
-            // Check if we have arrived at an existing file:
-            if (file.exists()) {
-                if (fileNames.contains(name)) {
-                    // Oops, a file of that name already exists....
-                }
-                else {
-                    fileNames.add(name);
-                    File destination = new File(toDir, name);
-
-                    // Check if the source and destination locations differ:
-                    if (!destination.equals(file)) {
-                        try {
-                            // Copy the file:
-                            Util.copyFile(file, destination, false);
-                            // Delete the original file if requested:
-                            if (deleteOriginalFiles)
-                                file.delete();
-                            
-                        } catch (IOException ex) {
-                            ex.printStackTrace();
-                        }
-                    }
-                    else {
-                        // Destination and source is the same. Do nothing.
-                    }
-                    // Update progress bar:
-                    i++;
-                    final int j = i;
-
-                    if (prog != null) SwingUtilities.invokeLater(new Runnable() {
-                        public void run() {
-                            prog.setValue(j);
-                        }
-                    });
-                }
-            }
-            else {
-                // The link could not be resolved to an existing file.
-                
-            }
-        }
-
-        if (callback != null) {
-            callback.actionPerformed(null);
-        }
-    }
-
-
-    public static class SaveWithLinkedFiles extends BaseAction {
-        private BasePanel panel;
-
-        public SaveWithLinkedFiles(BasePanel panel) {
-
-            this.panel = panel;
-        }
-
-        @Override
-        public void action() throws Throwable {
-
-            ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>();
-            BibtexEntry[] sel = panel.getSelectedEntries();
-            for (int i = 0; i < sel.length; i++) {
-                BibtexEntry bibtexEntry = sel[i];
-                entries.add(bibtexEntry);
-            }
-            final List<FileListEntry> links =
-                    AccessLinksForEntries.getExternalLinksForEntries(entries);
-            for (Iterator<FileListEntry> iterator = links.iterator(); iterator.hasNext();) {
-                FileListEntry entry = iterator.next();
-                System.out.println("Link: " + entry.getLink());
-            }
-
-            final JProgressBar prog = new JProgressBar();
-            prog.setIndeterminate(true);
-            final JDialog diag = new JDialog(panel.frame(), false);
-            diag.getContentPane().add(prog, BorderLayout.CENTER);
-            diag.pack();
-            diag.setLocationRelativeTo(panel.frame());
-            diag.setVisible(true);
-            Thread t = new Thread(new Runnable() {
-                public void run() {
-                    AccessLinksForEntries.copyExternalLinksToDirectory(links,
-                            new File("/home/alver/tmp"), panel.metaData(), prog, false,
-                            new ActionListener() {
-                                public void actionPerformed(ActionEvent actionEvent) {
-                                    diag.dispose();
-                                }
-                            });
-                }
-            });
-            t.start();
-
-            
-        }
-    }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.JDialog;
+import javax.swing.JProgressBar;
+import javax.swing.SwingUtilities;
+
+import net.sf.jabref.BaseAction;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.Util;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileListTableModel;
+
+
+/**
+ * This class handles the task of looking up all external files linked for a set
+ * of entries. This is useful for tasks where the user wants e.g. to send a database
+ * with external files included.
+ */
+public class AccessLinksForEntries {
+
+    /**
+     * Look up all external files linked from (at least) one of the entries in a set.
+     * This method does not verify the links.
+     *
+     * @param entries The set of entries.
+     * @return A list of FileListEntry objects pointing to the external files.
+     */
+    public static List<FileListEntry> getExternalLinksForEntries(List<BibtexEntry> entries) {
+        List<FileListEntry> files = new ArrayList<FileListEntry>();
+        FileListTableModel model = new FileListTableModel();
+        for (Iterator<BibtexEntry> iterator = entries.iterator(); iterator.hasNext();) {
+            BibtexEntry entry = iterator.next();
+            String links = entry.getField(GUIGlobals.FILE_FIELD);
+            if (links == null)
+                continue;
+            model.setContent(links);
+            for (int i=0; i<model.getRowCount(); i++)
+                files.add(model.getEntry(i));
+        }
+        return files;
+    }
+
+    /**
+     * Take a list of external links and copy the referred files to a given directory.
+     * This method should be run off the Event Dispatch Thread. A progress bar, if given,
+     * will be updated on the EDT.
+     *
+     * @param files The list of file links.
+     * @param toDir The directory to copy the files to.
+     * @param metaData The MetaData for the database containing the external links. This is needed
+     *  because the database might have its own file directory.
+     * @param prog A JProgressBar which will be updated to show the progress of the process.
+     *  This argument can be null if no progress bar is needed.
+     * @param deleteOriginalFiles if true, the files in their original locations will be deleted
+     *  after copying, for each file whose source directory is different from the destination
+     *  directory differs.
+     * @param callback An ActionListener which should be notified when the process is finished.
+     *  This parameter can be null if no callback is needed.
+     */
+    public static void copyExternalLinksToDirectory(final List<FileListEntry> files, File toDir,
+                                                    MetaData metaData, final JProgressBar prog,
+                                                    boolean deleteOriginalFiles,
+                                                    final ActionListener callback) {
+
+        if (prog != null) SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                prog.setMaximum(files.size());
+                prog.setValue(0);
+                prog.setIndeterminate(false);
+            }
+        });
+
+        Set<String> fileNames = new HashSet<String>();
+
+        int i=0;
+
+        for (Iterator<FileListEntry> iterator = files.iterator(); iterator.hasNext();) {
+            FileListEntry entry = iterator.next();
+            File file = new File(entry.getLink());
+
+            // We try to check the extension for the file:
+            String name = file.getName();
+            int pos = name.lastIndexOf('.');
+            String extension = ((pos >= 0) && (pos < name.length() - 1)) ? name.substring(pos + 1)
+                .trim().toLowerCase() : null;
+
+            // Find the default directory for this field type, if any:
+            String[] dir = metaData.getFileDirectory(extension);
+            // Include the standard "file" directory:
+            String[] fileDir = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+            // Include the directory of the bib file:
+            ArrayList<String> al = new ArrayList<String>();
+            for (int i2 = 0; i2 < dir.length; i2++)
+                if (!al.contains(dir[i2])) al.add(dir[i2]);
+            for (int i2 = 0; i2 < fileDir.length; i2++)
+                if (!al.contains(fileDir[i2])) al.add(fileDir[i2]);
+
+            String[] dirs = al.toArray(new String[al.size()]);
+            File tmp = Util.expandFilename(entry.getLink(), dirs);
+            if (tmp != null)
+                file = tmp;
+
+            // Check if we have arrived at an existing file:
+            if (file.exists()) {
+                if (fileNames.contains(name)) {
+                    // Oops, a file of that name already exists....
+                }
+                else {
+                    fileNames.add(name);
+                    File destination = new File(toDir, name);
+
+                    // Check if the source and destination locations differ:
+                    if (!destination.equals(file)) {
+                        try {
+                            // Copy the file:
+                            Util.copyFile(file, destination, false);
+                            // Delete the original file if requested:
+                            if (deleteOriginalFiles)
+                                file.delete();
+                            
+                        } catch (IOException ex) {
+                            ex.printStackTrace();
+                        }
+                    }
+                    else {
+                        // Destination and source is the same. Do nothing.
+                    }
+                    // Update progress bar:
+                    i++;
+                    final int j = i;
+
+                    if (prog != null) SwingUtilities.invokeLater(new Runnable() {
+                        public void run() {
+                            prog.setValue(j);
+                        }
+                    });
+                }
+            }
+            else {
+                // The link could not be resolved to an existing file.
+                
+            }
+        }
+
+        if (callback != null) {
+            callback.actionPerformed(null);
+        }
+    }
+
+
+    public static class SaveWithLinkedFiles extends BaseAction {
+        private BasePanel panel;
+
+        public SaveWithLinkedFiles(BasePanel panel) {
+
+            this.panel = panel;
+        }
+
+        @Override
+        public void action() throws Throwable {
+
+            ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+            BibtexEntry[] sel = panel.getSelectedEntries();
+            for (int i = 0; i < sel.length; i++) {
+                BibtexEntry bibtexEntry = sel[i];
+                entries.add(bibtexEntry);
+            }
+            final List<FileListEntry> links =
+                    AccessLinksForEntries.getExternalLinksForEntries(entries);
+            for (Iterator<FileListEntry> iterator = links.iterator(); iterator.hasNext();) {
+                FileListEntry entry = iterator.next();
+                System.out.println("Link: " + entry.getLink());
+            }
+
+            final JProgressBar prog = new JProgressBar();
+            prog.setIndeterminate(true);
+            final JDialog diag = new JDialog(panel.frame(), false);
+            diag.getContentPane().add(prog, BorderLayout.CENTER);
+            diag.pack();
+            diag.setLocationRelativeTo(panel.frame());
+            diag.setVisible(true);
+            Thread t = new Thread(new Runnable() {
+                public void run() {
+                    AccessLinksForEntries.copyExternalLinksToDirectory(links,
+                            new File("/home/alver/tmp"), panel.metaData(), prog, false,
+                            new ActionListener() {
+                                public void actionPerformed(ActionEvent actionEvent) {
+                                    diag.dispose();
+                                }
+                            });
+                }
+            });
+            t.start();
+
+            
+        }
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/external/AttachFileAction.java b/src/java/net/sf/jabref/external/AttachFileAction.java
index 67c3e5a..29e1249 100644
--- a/src/java/net/sf/jabref/external/AttachFileAction.java
+++ b/src/java/net/sf/jabref/external/AttachFileAction.java
@@ -1,54 +1,54 @@
-package net.sf.jabref.external;
-
-import net.sf.jabref.*;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.gui.FileListEntryEditor;
-import net.sf.jabref.gui.FileListTableModel;
-import net.sf.jabref.undo.UndoableFieldChange;
-
-import javax.swing.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: 5/24/12
- * Time: 8:48 PM
- * To change this template use File | Settings | File Templates.
- */
-public class AttachFileAction extends BaseAction {
-
-    BibtexEntry entry = null;
-    private BasePanel panel;
-
-    public AttachFileAction(BasePanel panel) {
-        this.panel = panel;
-    }
-
-    public void action() {
-        if (panel.getSelectedEntries().length != 1)
-            return; // TODO: display error message?
-        entry = panel.getSelectedEntries()[0];
-        FileListEntry flEntry = new FileListEntry("", "", null);
-        FileListEntryEditor editor = new FileListEntryEditor(panel.frame(), flEntry, false, true,
-                panel.metaData());
-        editor.setVisible(true, true);
-        if (editor.okPressed()) {
-            FileListTableModel model = new FileListTableModel();
-            String oldVal = entry.getField(GUIGlobals.FILE_FIELD);
-            if (oldVal != null)
-                model.setContent(oldVal);
-            model.addEntry(model.getRowCount(), flEntry);
-            String newVal = model.getStringRepresentation();
-
-            UndoableFieldChange ce = new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD,
-                    oldVal, newVal);
-            entry.setField(GUIGlobals.FILE_FIELD, newVal);
-            panel.undoManager.addEdit(ce);
-            panel.markBaseChanged();
-        }
-    }
-
-
-}
+package net.sf.jabref.external;
+
+import net.sf.jabref.*;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileListEntryEditor;
+import net.sf.jabref.gui.FileListTableModel;
+import net.sf.jabref.undo.UndoableFieldChange;
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: 5/24/12
+ * Time: 8:48 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class AttachFileAction extends BaseAction {
+
+    BibtexEntry entry = null;
+    private BasePanel panel;
+
+    public AttachFileAction(BasePanel panel) {
+        this.panel = panel;
+    }
+
+    public void action() {
+        if (panel.getSelectedEntries().length != 1)
+            return; // TODO: display error message?
+        entry = panel.getSelectedEntries()[0];
+        FileListEntry flEntry = new FileListEntry("", "", null);
+        FileListEntryEditor editor = new FileListEntryEditor(panel.frame(), flEntry, false, true,
+                panel.metaData());
+        editor.setVisible(true, true);
+        if (editor.okPressed()) {
+            FileListTableModel model = new FileListTableModel();
+            String oldVal = entry.getField(GUIGlobals.FILE_FIELD);
+            if (oldVal != null)
+                model.setContent(oldVal);
+            model.addEntry(model.getRowCount(), flEntry);
+            String newVal = model.getStringRepresentation();
+
+            UndoableFieldChange ce = new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD,
+                    oldVal, newVal);
+            entry.setField(GUIGlobals.FILE_FIELD, newVal);
+            panel.undoManager.addEdit(ce);
+            panel.markBaseChanged();
+        }
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java b/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
index 3b3fefc..f765de7 100644
--- a/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
+++ b/src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
@@ -1,321 +1,321 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.util.Collection;
-
-import javax.swing.*;
-
-import net.sf.jabref.*;
-import net.sf.jabref.gui.AttachFileDialog;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableFieldChange;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * This action goes through all selected entries in the BasePanel, and attempts to autoset the
- * given external file (pdf, ps, ...) based on the same algorithm used for the "Auto" button in
- * EntryEditor.
- */
-public class AutoSetExternalFileForEntries extends AbstractWorker {
-
-    private String fieldName;
-    private BasePanel panel;
-    private BibtexEntry[] sel = null;
-    private OptionsDialog optDiag = null;
-
-    Object[] brokenLinkOptions =
-            {Globals.lang("Ignore"), Globals.lang("Assign new file"), Globals.lang("Clear field"),
-                    Globals.lang("Quit synchronization")};
-
-    private boolean goOn = true, autoSet = true, overWriteAllowed = true, checkExisting = true;
-
-    private int entriesChanged = 0, brokenLinks = 0;
-
-
-    public AutoSetExternalFileForEntries(BasePanel panel, String fieldName) {
-        this.fieldName = fieldName;
-        this.panel = panel;
-    }
-
-    public void init() {
-
-    	Collection<BibtexEntry> col = panel.database().getEntries();
-        sel = col.toArray(new BibtexEntry[col.size()]);
-
-        // Ask about rules for the operation:
-        if (optDiag == null)
-            optDiag = new OptionsDialog(panel.frame(), fieldName);
-        Util.placeDialog(optDiag, panel.frame());
-        optDiag.setVisible(true);
-        if (optDiag.canceled()) {
-            goOn = false;
-            return;
-        }
-        autoSet = !optDiag.autoSetNone.isSelected();
-        overWriteAllowed = optDiag.autoSetAll.isSelected();
-        checkExisting = optDiag.checkLinks.isSelected();
-
-        panel.output(Globals.lang("Synchronizing %0 links...", fieldName.toUpperCase()));
-    }
-
-    public void run() {
-        if (!goOn) {
-            panel.output(Globals.lang("No entries selected."));
-            return;
-        }
-        panel.frame().setProgressBarValue(0);
-        panel.frame().setProgressBarVisible(true);
-        int weightAutoSet = 10; // autoSet takes 10 (?) times longer than checkExisting
-        int progressBarMax = (autoSet ? weightAutoSet * sel.length : 0)
-                + (checkExisting ? sel.length : 0);
-        panel.frame().setProgressBarMaximum(progressBarMax);
-        int progress = 0;
-        entriesChanged = 0;
-        brokenLinks = 0;
-        NamedCompound ce = new NamedCompound(Globals.lang("Autoset %0 field", fieldName));
-
-        final OpenFileFilter off = Util.getFileFilterForField(fieldName);
-
-        ExternalFilePanel extPan = new ExternalFilePanel(fieldName, panel.metaData(), null, null, off);
-        FieldTextField editor = new FieldTextField(fieldName, "", false);
-
-        // Find the default directory for this field type:
-        String[] dirs = panel.metaData().getFileDirectory(fieldName);
-
-        // First we try to autoset fields
-        if (autoSet) {
-            for (int i = 0; i < sel.length; i++) {
-                progress += weightAutoSet;
-                panel.frame().setProgressBarValue(progress);
-
-                final String old = sel[i].getField(fieldName);
-                // Check if a extension is already set, and if so, if we are allowed to overwrite it:
-                if ((old != null) && !old.equals("") && !overWriteAllowed)
-                    continue;
-                extPan.setEntry(sel[i], panel.getDatabase());
-                editor.setText((old != null) ? (String) old : "");
-                Thread t = extPan.autoSetFile(fieldName, editor);
-                // Wait for the autoset process to finish:
-                if (t != null)
-                    try {
-                        t.join();
-                    } catch (InterruptedException e) {
-                        e.printStackTrace();
-                    }
-                // If something was found, entriesChanged it:
-                if (!editor.getText().equals("") && !editor.getText().equals(old)) {
-                    // Store an undo edit:
-                    //System.out.println("Setting: "+sel[i].getCiteKey()+" "+editor.getText());
-                    ce.addEdit(new UndoableFieldChange(sel[i], fieldName, old, editor.getText()));
-                    sel[i].setField(fieldName, editor.getText());
-                    entriesChanged++;
-                }
-            }
-        }
-        //System.out.println("Done setting");
-        // The following loop checks all external links that are already set.
-        if (checkExisting) {
-            mainLoop:
-            for (int i = 0; i < sel.length; i++) {
-                panel.frame().setProgressBarValue(progress++);
-                final String old = sel[i].getField(fieldName);
-                // Check if a extension is set:
-                if ((old != null) && !old.equals("")) {
-                    // Get an absolute path representation:
-                    File file = Util.expandFilename(old, dirs);
-
-                    if ((file == null) || !file.exists()) {
-
-                        int answer =
-                                JOptionPane.showOptionDialog(panel.frame(),
-                                        Globals.lang("<HTML>Could not find file '%0'<BR>linked from entry '%1'</HTML>",
-                                                new String[]{old, sel[i].getCiteKey()}),
-                                        Globals.lang("Broken link"),
-                                        JOptionPane.YES_NO_CANCEL_OPTION,
-                                        JOptionPane.QUESTION_MESSAGE, null, brokenLinkOptions, brokenLinkOptions[0]);
-                        switch (answer) {
-                            case 1:
-                                // Assign new file.
-                                AttachFileDialog afd = new AttachFileDialog(panel.frame(),
-                                        panel.metaData(), sel[i], fieldName);
-                                Util.placeDialog(afd, panel.frame());
-                                afd.setVisible(true);
-                                if (!afd.cancelled()) {
-                                    ce.addEdit(new UndoableFieldChange(sel[i], fieldName, old, afd.getValue()));
-                                    sel[i].setField(fieldName, afd.getValue());
-                                    entriesChanged++;
-                                }
-                                break;
-                            case 2:
-                                // Clear field
-                                ce.addEdit(new UndoableFieldChange(sel[i], fieldName, old, null));
-                                sel[i].setField(fieldName, null);
-                                entriesChanged++;
-                                break;
-                            case 3:
-                                // Cancel
-                                break mainLoop;
-                        }
-                        brokenLinks++;
-                    }
-
-                    continue;
-                }
-            }
-        }
-
-        if (entriesChanged > 0) {
-            // Add the undo edit:
-            ce.end();
-            panel.undoManager.addEdit(ce);
-        }
-    }
-
-
-    public void update() {
-        if (!goOn)
-            return;
-
-        panel.output(Globals.lang("Finished synchronizing %0 links. Entries changed%c %1.",
-                new String[]{fieldName.toUpperCase(), String.valueOf(entriesChanged)}));
-        panel.frame().setProgressBarVisible(false);
-        if (entriesChanged > 0) {
-            panel.markBaseChanged();
-        }
-    }
-
-    class OptionsDialog extends JDialog {
-        JRadioButton autoSetUnset, autoSetAll, autoSetNone;
-        JCheckBox checkLinks;
-        JButton ok = new JButton(Globals.lang("Ok")),
-                cancel = new JButton(Globals.lang("Cancel"));
-        JLabel description;
-        private boolean canceled = true;
-        private String fieldName;
-
-        public OptionsDialog(JFrame parent, String fieldName) {
-            super(parent, Globals.lang("Synchronize %0 links", fieldName.toUpperCase()), true);
-            final String fn = fieldName.toUpperCase();
-            this.fieldName = fieldName;
-            ok.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    canceled = false;
-                    dispose();
-                }
-            });
-
-            Action closeAction = new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    dispose();
-                }
-            };
-
-
-            cancel.addActionListener(closeAction);
-
-            InputMap im = cancel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-            ActionMap am = cancel.getActionMap();
-            im.put(Globals.prefs.getKey("Close dialog"), "close");
-            am.put("close", closeAction);
-
-            fieldName = fieldName.toUpperCase();
-            autoSetUnset = new JRadioButton(Globals.lang("Autoset %0 links. Do not overwrite existing links.", fn), true);
-            autoSetAll = new JRadioButton(Globals.lang("Autoset %0 links. Allow overwriting existing links.", fn), false);
-            autoSetNone = new JRadioButton(Globals.lang("Do not autoset"), false);
-            checkLinks = new JCheckBox(Globals.lang("Check existing %0 links", fn), true);
-            ButtonGroup bg = new ButtonGroup();
-            bg.add(autoSetUnset);
-            bg.add(autoSetNone);
-            bg.add(autoSetAll);
-            FormLayout layout = new FormLayout("fill:pref", "");
-            DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-            description = new JLabel("<HTML>" +
-                    Globals.lang(//"This function helps you keep your external %0 links up-to-date." +
-                            "Attempt to autoset %0 links for your entries. Autoset works if "
-                                    + "a %0 file in your %0 directory or a subdirectory<BR>is named identically to an entry's BibTeX key, plus extension.", fn)
-                    + "</HTML>");
-            //            name.setVerticalAlignment(JLabel.TOP);
-            builder.appendSeparator(Globals.lang("Autoset"));
-            builder.append(description);
-            builder.nextLine();
-            builder.append(autoSetUnset);
-            builder.nextLine();
-            builder.append(autoSetAll);
-            builder.nextLine();
-            builder.append(autoSetNone);
-            builder.nextLine();
-            builder.appendSeparator(Globals.lang("Check links"));
-
-            description = new JLabel("<HTML>" +
-                    Globals.lang("This makes JabRef look up each %0 link and check if the file exists. If not, you will be given options<BR>to resolve the problem.", fn)
-                    + "</HTML>");
-            builder.append(description);
-            builder.nextLine();
-            builder.append(checkLinks);
-            builder.nextLine();
-            builder.appendSeparator();
-
-
-            JPanel main = builder.getPanel();
-            main.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-
-            ButtonBarBuilder bb = new ButtonBarBuilder();
-            bb.addGlue();
-            bb.addButton(ok);
-            bb.addButton(cancel);
-            bb.addGlue();
-            getContentPane().add(main, BorderLayout.CENTER);
-            getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-
-            pack();
-        }
-
-        public void setVisible(boolean visible) {
-            if (visible)
-                canceled = true;
-
-            String[] dirs = panel.metaData().getFileDirectory(fieldName);
-
-            if (dirs.length == 0) {
-
-                autoSetNone.setSelected(true);
-                autoSetNone.setEnabled(false);
-                autoSetAll.setEnabled(false);
-                autoSetUnset.setEnabled(false);
-            } else {
-                autoSetNone.setEnabled(true);
-                autoSetAll.setEnabled(true);
-                autoSetUnset.setEnabled(true);
-            }
-
-            new FocusRequester(ok);
-            super.setVisible(visible);
-
-        }
-
-        public boolean canceled() {
-            return canceled;
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.util.Collection;
+
+import javax.swing.*;
+
+import net.sf.jabref.*;
+import net.sf.jabref.gui.AttachFileDialog;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableFieldChange;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * This action goes through all selected entries in the BasePanel, and attempts to autoset the
+ * given external file (pdf, ps, ...) based on the same algorithm used for the "Auto" button in
+ * EntryEditor.
+ */
+public class AutoSetExternalFileForEntries extends AbstractWorker {
+
+    private String fieldName;
+    private BasePanel panel;
+    private BibtexEntry[] sel = null;
+    private OptionsDialog optDiag = null;
+
+    Object[] brokenLinkOptions =
+            {Globals.lang("Ignore"), Globals.lang("Assign new file"), Globals.lang("Clear field"),
+                    Globals.lang("Quit synchronization")};
+
+    private boolean goOn = true, autoSet = true, overWriteAllowed = true, checkExisting = true;
+
+    private int entriesChanged = 0, brokenLinks = 0;
+
+
+    public AutoSetExternalFileForEntries(BasePanel panel, String fieldName) {
+        this.fieldName = fieldName;
+        this.panel = panel;
+    }
+
+    public void init() {
+
+    	Collection<BibtexEntry> col = panel.database().getEntries();
+        sel = col.toArray(new BibtexEntry[col.size()]);
+
+        // Ask about rules for the operation:
+        if (optDiag == null)
+            optDiag = new OptionsDialog(panel.frame(), fieldName);
+        Util.placeDialog(optDiag, panel.frame());
+        optDiag.setVisible(true);
+        if (optDiag.canceled()) {
+            goOn = false;
+            return;
+        }
+        autoSet = !optDiag.autoSetNone.isSelected();
+        overWriteAllowed = optDiag.autoSetAll.isSelected();
+        checkExisting = optDiag.checkLinks.isSelected();
+
+        panel.output(Globals.lang("Synchronizing %0 links...", fieldName.toUpperCase()));
+    }
+
+    public void run() {
+        if (!goOn) {
+            panel.output(Globals.lang("No entries selected."));
+            return;
+        }
+        panel.frame().setProgressBarValue(0);
+        panel.frame().setProgressBarVisible(true);
+        int weightAutoSet = 10; // autoSet takes 10 (?) times longer than checkExisting
+        int progressBarMax = (autoSet ? weightAutoSet * sel.length : 0)
+                + (checkExisting ? sel.length : 0);
+        panel.frame().setProgressBarMaximum(progressBarMax);
+        int progress = 0;
+        entriesChanged = 0;
+        brokenLinks = 0;
+        NamedCompound ce = new NamedCompound(Globals.lang("Autoset %0 field", fieldName));
+
+        final OpenFileFilter off = Util.getFileFilterForField(fieldName);
+
+        ExternalFilePanel extPan = new ExternalFilePanel(fieldName, panel.metaData(), null, null, off);
+        FieldTextField editor = new FieldTextField(fieldName, "", false);
+
+        // Find the default directory for this field type:
+        String[] dirs = panel.metaData().getFileDirectory(fieldName);
+
+        // First we try to autoset fields
+        if (autoSet) {
+            for (int i = 0; i < sel.length; i++) {
+                progress += weightAutoSet;
+                panel.frame().setProgressBarValue(progress);
+
+                final String old = sel[i].getField(fieldName);
+                // Check if a extension is already set, and if so, if we are allowed to overwrite it:
+                if ((old != null) && !old.equals("") && !overWriteAllowed)
+                    continue;
+                extPan.setEntry(sel[i], panel.getDatabase());
+                editor.setText((old != null) ? (String) old : "");
+                Thread t = extPan.autoSetFile(fieldName, editor);
+                // Wait for the autoset process to finish:
+                if (t != null)
+                    try {
+                        t.join();
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
+                // If something was found, entriesChanged it:
+                if (!editor.getText().equals("") && !editor.getText().equals(old)) {
+                    // Store an undo edit:
+                    //System.out.println("Setting: "+sel[i].getCiteKey()+" "+editor.getText());
+                    ce.addEdit(new UndoableFieldChange(sel[i], fieldName, old, editor.getText()));
+                    sel[i].setField(fieldName, editor.getText());
+                    entriesChanged++;
+                }
+            }
+        }
+        //System.out.println("Done setting");
+        // The following loop checks all external links that are already set.
+        if (checkExisting) {
+            mainLoop:
+            for (int i = 0; i < sel.length; i++) {
+                panel.frame().setProgressBarValue(progress++);
+                final String old = sel[i].getField(fieldName);
+                // Check if a extension is set:
+                if ((old != null) && !old.equals("")) {
+                    // Get an absolute path representation:
+                    File file = Util.expandFilename(old, dirs);
+
+                    if ((file == null) || !file.exists()) {
+
+                        int answer =
+                                JOptionPane.showOptionDialog(panel.frame(),
+                                        Globals.lang("<HTML>Could not find file '%0'<BR>linked from entry '%1'</HTML>",
+                                                new String[]{old, sel[i].getCiteKey()}),
+                                        Globals.lang("Broken link"),
+                                        JOptionPane.YES_NO_CANCEL_OPTION,
+                                        JOptionPane.QUESTION_MESSAGE, null, brokenLinkOptions, brokenLinkOptions[0]);
+                        switch (answer) {
+                            case 1:
+                                // Assign new file.
+                                AttachFileDialog afd = new AttachFileDialog(panel.frame(),
+                                        panel.metaData(), sel[i], fieldName);
+                                Util.placeDialog(afd, panel.frame());
+                                afd.setVisible(true);
+                                if (!afd.cancelled()) {
+                                    ce.addEdit(new UndoableFieldChange(sel[i], fieldName, old, afd.getValue()));
+                                    sel[i].setField(fieldName, afd.getValue());
+                                    entriesChanged++;
+                                }
+                                break;
+                            case 2:
+                                // Clear field
+                                ce.addEdit(new UndoableFieldChange(sel[i], fieldName, old, null));
+                                sel[i].setField(fieldName, null);
+                                entriesChanged++;
+                                break;
+                            case 3:
+                                // Cancel
+                                break mainLoop;
+                        }
+                        brokenLinks++;
+                    }
+
+                    continue;
+                }
+            }
+        }
+
+        if (entriesChanged > 0) {
+            // Add the undo edit:
+            ce.end();
+            panel.undoManager.addEdit(ce);
+        }
+    }
+
+
+    public void update() {
+        if (!goOn)
+            return;
+
+        panel.output(Globals.lang("Finished synchronizing %0 links. Entries changed%c %1.",
+                new String[]{fieldName.toUpperCase(), String.valueOf(entriesChanged)}));
+        panel.frame().setProgressBarVisible(false);
+        if (entriesChanged > 0) {
+            panel.markBaseChanged();
+        }
+    }
+
+    class OptionsDialog extends JDialog {
+        JRadioButton autoSetUnset, autoSetAll, autoSetNone;
+        JCheckBox checkLinks;
+        JButton ok = new JButton(Globals.lang("Ok")),
+                cancel = new JButton(Globals.lang("Cancel"));
+        JLabel description;
+        private boolean canceled = true;
+        private String fieldName;
+
+        public OptionsDialog(JFrame parent, String fieldName) {
+            super(parent, Globals.lang("Synchronize %0 links", fieldName.toUpperCase()), true);
+            final String fn = fieldName.toUpperCase();
+            this.fieldName = fieldName;
+            ok.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    canceled = false;
+                    dispose();
+                }
+            });
+
+            Action closeAction = new AbstractAction() {
+                public void actionPerformed(ActionEvent e) {
+                    dispose();
+                }
+            };
+
+
+            cancel.addActionListener(closeAction);
+
+            InputMap im = cancel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+            ActionMap am = cancel.getActionMap();
+            im.put(Globals.prefs.getKey("Close dialog"), "close");
+            am.put("close", closeAction);
+
+            fieldName = fieldName.toUpperCase();
+            autoSetUnset = new JRadioButton(Globals.lang("Autoset %0 links. Do not overwrite existing links.", fn), true);
+            autoSetAll = new JRadioButton(Globals.lang("Autoset %0 links. Allow overwriting existing links.", fn), false);
+            autoSetNone = new JRadioButton(Globals.lang("Do not autoset"), false);
+            checkLinks = new JCheckBox(Globals.lang("Check existing %0 links", fn), true);
+            ButtonGroup bg = new ButtonGroup();
+            bg.add(autoSetUnset);
+            bg.add(autoSetNone);
+            bg.add(autoSetAll);
+            FormLayout layout = new FormLayout("fill:pref", "");
+            DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+            description = new JLabel("<HTML>" +
+                    Globals.lang(//"This function helps you keep your external %0 links up-to-date." +
+                            "Attempt to autoset %0 links for your entries. Autoset works if "
+                                    + "a %0 file in your %0 directory or a subdirectory<BR>is named identically to an entry's BibTeX key, plus extension.", fn)
+                    + "</HTML>");
+            //            name.setVerticalAlignment(JLabel.TOP);
+            builder.appendSeparator(Globals.lang("Autoset"));
+            builder.append(description);
+            builder.nextLine();
+            builder.append(autoSetUnset);
+            builder.nextLine();
+            builder.append(autoSetAll);
+            builder.nextLine();
+            builder.append(autoSetNone);
+            builder.nextLine();
+            builder.appendSeparator(Globals.lang("Check links"));
+
+            description = new JLabel("<HTML>" +
+                    Globals.lang("This makes JabRef look up each %0 link and check if the file exists. If not, you will be given options<BR>to resolve the problem.", fn)
+                    + "</HTML>");
+            builder.append(description);
+            builder.nextLine();
+            builder.append(checkLinks);
+            builder.nextLine();
+            builder.appendSeparator();
+
+
+            JPanel main = builder.getPanel();
+            main.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+            ButtonBarBuilder bb = new ButtonBarBuilder();
+            bb.addGlue();
+            bb.addButton(ok);
+            bb.addButton(cancel);
+            bb.addGlue();
+            getContentPane().add(main, BorderLayout.CENTER);
+            getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+
+            pack();
+        }
+
+        public void setVisible(boolean visible) {
+            if (visible)
+                canceled = true;
+
+            String[] dirs = panel.metaData().getFileDirectory(fieldName);
+
+            if (dirs.length == 0) {
+
+                autoSetNone.setSelected(true);
+                autoSetNone.setEnabled(false);
+                autoSetAll.setEnabled(false);
+                autoSetUnset.setEnabled(false);
+            } else {
+                autoSetNone.setEnabled(true);
+                autoSetAll.setEnabled(true);
+                autoSetUnset.setEnabled(true);
+            }
+
+            new FocusRequester(ok);
+            super.setVisible(visible);
+
+        }
+
+        public boolean canceled() {
+            return canceled;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/external/ConfirmCloseFileListEntryEditor.java b/src/java/net/sf/jabref/external/ConfirmCloseFileListEntryEditor.java
index e099d25..3cd0a52 100644
--- a/src/java/net/sf/jabref/external/ConfirmCloseFileListEntryEditor.java
+++ b/src/java/net/sf/jabref/external/ConfirmCloseFileListEntryEditor.java
@@ -1,28 +1,28 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import net.sf.jabref.gui.FileListEntry;
-
-/**
- * An implementation of this interface is called to confirm whether a FileListEntryEditor
- * is ready to close when Ok is pressed, or whether there is a problem that needs to be
- * resolved first.
- */
-public interface ConfirmCloseFileListEntryEditor {
-
-    public boolean confirmClose(FileListEntry entry);
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import net.sf.jabref.gui.FileListEntry;
+
+/**
+ * An implementation of this interface is called to confirm whether a FileListEntryEditor
+ * is ready to close when Ok is pressed, or whether there is a problem that needs to be
+ * resolved first.
+ */
+public interface ConfirmCloseFileListEntryEditor {
+
+    public boolean confirmClose(FileListEntry entry);
+}
diff --git a/src/java/net/sf/jabref/external/DownloadExternalFile.java b/src/java/net/sf/jabref/external/DownloadExternalFile.java
index ff7982e..e080510 100644
--- a/src/java/net/sf/jabref/external/DownloadExternalFile.java
+++ b/src/java/net/sf/jabref/external/DownloadExternalFile.java
@@ -1,351 +1,351 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
-
-import net.sf.jabref.*;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.gui.FileListEntryEditor;
-import net.sf.jabref.net.URLDownload;
-
-/**
- * This class handles the download of an external file. Typically called when the user clicks
- * the "Download" button in a FileListEditor shown in an EntryEditor.
- * <p/>
- * The FileListEditor constructs the DownloadExternalFile instance, then calls the download()
- * method passing a reference to itself as a callback. The download() method asks for the URL,
- * then starts the download. When the download is completed, it calls the downloadCompleted()
- * method on the callback FileListEditor, which then needs to take care of linking to the file.
- * The local filename is passed as an argument to the downloadCompleted() method.
- * <p/>
- * If the download is cancelled, or failed, the user is informed. The callback is never called.
- */
-public class DownloadExternalFile {
-    private JabRefFrame frame;
-    private MetaData metaData;
-    private String bibtexKey;
-    private FileListEntryEditor editor;
-    private boolean downloadFinished = false;
-    private boolean dontShowDialog = false;
-
-    public DownloadExternalFile(JabRefFrame frame, MetaData metaData, String bibtexKey) {
-
-        this.frame = frame;
-        this.metaData = metaData;
-        this.bibtexKey = bibtexKey;
-    }
-
-    /**
-     * Start a download.
-     *
-     * @param callback The object to which the filename should be reported when download
-     *                 is complete.
-     */
-    public void download(final DownloadCallback callback) throws IOException {
-        dontShowDialog = false;
-        final String res = JOptionPane.showInputDialog(frame,
-                Globals.lang("Enter URL to download"));
-
-        if (res == null || res.trim().length() == 0)
-            return;
-
-        URL url = null;
-        try {
-            url = new URL(res);
-        } catch (MalformedURLException ex1) {
-            JOptionPane.showMessageDialog(frame, Globals.lang("Invalid URL"), Globals
-                .lang("Download file"), JOptionPane.ERROR_MESSAGE);
-            return;
-        }
-
-        download(url, callback);
-    }
-
-
-    /**
-     * Start a download.
-     *
-     * @param callback The object to which the filename should be reported when download
-     *                 is complete.
-     */
-    public void download(URL url, final DownloadCallback callback) throws IOException {
-
-        String res = url.toString();
-        URLDownload udl = null;
-
-        // First of all, start the download itself in the background to a temporary file:
-        final File tmp = File.createTempFile("jabref_download", "tmp");
-        tmp.deleteOnExit();
-        //long time = System.currentTimeMillis();
-        try {
-            udl = new URLDownload(frame, url, tmp);
-            // TODO: what if this takes long time?
-            // TODO: stop editor dialog if this results in an error:
-            udl.openConnectionOnly(); // Read MIME type
-        } catch (IOException ex) {
-            JOptionPane.showMessageDialog(frame, Globals.lang("Invalid URL")+": "
-                    + ex.getMessage(), Globals.lang("Download file"),
-                    JOptionPane.ERROR_MESSAGE);
-            Globals.logger("Error while downloading " + "'" + res + "'");
-            return;
-        }
-        final URL urlF = url;
-        final URLDownload udlF = udl;
-        //System.out.println("Time: "+(System.currentTimeMillis()-time));
-        (new Thread() {
-            public void run() {
-
-                try {
-                    udlF.download();
-                } catch (IOException e2) {
-                    dontShowDialog = true;
-                    if ((editor != null) && (editor.isVisible()))
-                        editor.setVisible(false, false);
-                    JOptionPane.showMessageDialog(frame, Globals.lang("Invalid URL")+": "
-                            + e2.getMessage(), Globals.lang("Download file"),
-                            JOptionPane.ERROR_MESSAGE);
-                    Globals.logger("Error while downloading " + "'" + urlF.toString()+ "'");
-                    return;
-                }
-
-                // Download finished: call the method that stops the progress bar etc.:
-                SwingUtilities.invokeLater(new Runnable() {
-                    public void run() {
-                        downloadFinished();
-                    }
-                });
-            }
-        }).start();
-
-        ExternalFileType suggestedType = null;
-        if (udl.getMimeType() != null) {
-            System.out.println("mimetype:"+udl.getMimeType());
-            suggestedType = Globals.prefs.getExternalFileTypeByMimeType(udl.getMimeType());
-            /*if (suggestedType != null)
-                System.out.println("Found type '"+suggestedType.getName()+"' by MIME type '"+udl.getMimeType()+"'");*/
-        }
-        // Then, while the download is proceeding, let the user choose the details of the file:
-        String suffix;
-        if (suggestedType != null) {
-            suffix = suggestedType.getExtension();   
-        }
-        else {
-            // If we didn't find a file type from the MIME type, try based on extension:
-            suffix = getSuffix(res);
-            suggestedType = Globals.prefs.getExternalFileTypeByExt(suffix);
-        }
-
-        String suggestedName = bibtexKey != null ? getSuggestedFileName(suffix) : "";
-        String[] fDirectory = getFileDirectory(res);
-        final String directory;
-        if (fDirectory.length == 0)
-            directory = null;
-        else
-            directory = fDirectory[0];
-        final String suggestDir = directory != null ? directory : System.getProperty("user.home");
-        File file = new File(new File(suggestDir), suggestedName);
-        FileListEntry entry = new FileListEntry("", bibtexKey != null ? file.getCanonicalPath() : "",
-                suggestedType);
-        editor = new FileListEntryEditor(frame, entry, true, false, metaData);
-        editor.getProgressBar().setIndeterminate(true);
-        editor.setOkEnabled(false);
-        editor.setExternalConfirm(new ConfirmCloseFileListEntryEditor() {
-            public boolean confirmClose(FileListEntry entry) {
-                File f = directory != null ? expandFilename(directory, entry.getLink())
-                        : new File(entry.getLink());
-                if (f.isDirectory()) {
-                    JOptionPane.showMessageDialog(frame,
-                            Globals.lang("Target file cannot be a directory."), Globals.lang("Download file"),
-                            JOptionPane.ERROR_MESSAGE);
-                    return false;
-                }
-                if (f.exists()) {
-                    return JOptionPane.showConfirmDialog
-                        (frame, "'"+f.getName()+"' "+Globals.lang("exists. Overwrite file?"),
-                        Globals.lang("Download file"), JOptionPane.OK_CANCEL_OPTION)
-                            == JOptionPane.OK_OPTION;
-                } else
-                    return true;
-            }
-        });
-        if (!dontShowDialog) // If an error occured with the URL, this flag may have been set
-            editor.setVisible(true, false);
-        else
-            return;
-        // Editor closed. Go on:
-        if (editor.okPressed()) {
-            File toFile = directory != null ? expandFilename(directory, entry.getLink())
-                    : new File(entry.getLink());
-            String dirPrefix;
-            if (directory != null) {
-                if (!directory.endsWith(System.getProperty("file.separator")))
-                    dirPrefix = directory+System.getProperty("file.separator");
-                else
-                    dirPrefix = directory;
-            } else
-                dirPrefix = null;
-
-            try {
-                boolean success = Util.copyFile(tmp, toFile, true);
-                if (!success) {
-                    // OOps, the file exists!
-                    System.out.println("File already exists! DownloadExternalFile.download()");
-                }
-
-                // If the local file is in or below the main file directory, change the
-                // path to relative:
-                if ((directory != null) && entry.getLink().startsWith(directory) &&
-                        (entry.getLink().length() > dirPrefix.length())) {
-                    entry.setLink(entry.getLink().substring(dirPrefix.length()));
-                }
-
-                callback.downloadComplete(entry);
-            } catch (IOException ex) {
-                ex.printStackTrace();
-            }
-
-            tmp.delete();
-        }
-        else {
-            // Cancelled. Just delete the temp file:
-            if (downloadFinished)
-                tmp.delete();
-        }
-
-    }
-
-    /**
-     * Construct a File object pointing to the file linked, whether the link is
-     * absolute or relative to the main directory.
-     * @param directory The main directory.
-     * @param link The absolute or relative link.
-     * @return The expanded File.
-     */
-    private File expandFilename(String directory, String link) {
-        File toFile = new File(link);
-        // If this is a relative link, we should perhaps append the directory:
-        String dirPrefix = directory+System.getProperty("file.separator");
-        if (!toFile.isAbsolute()) {
-            toFile = new File(dirPrefix+link);
-        }
-        return toFile;
-    }
-
-    /**
-     * This is called by the download thread when download is completed.
-     */
-    public void downloadFinished() {
-        downloadFinished = true;
-        editor.getProgressBar().setVisible(false);
-        editor.getProgressBarLabel().setVisible(false);
-        editor.setOkEnabled(true);
-        editor.getProgressBar().setValue(editor.getProgressBar().getMaximum());
-    }
-
-    public String getSuggestedFileName(String suffix) {
-        
-        String plannedName = bibtexKey;
-        if (suffix.length() > 0)
-            plannedName += "." + suffix;
-
-        /*
-        * [ 1548875 ] download pdf produces unsupported filename
-        *
-        * http://sourceforge.net/tracker/index.php?func=detail&aid=1548875&group_id=92314&atid=600306
-        *
-        */
-        if (Globals.ON_WIN) {
-            plannedName = plannedName.replaceAll(
-                    "\\?|\\*|\\<|\\>|\\||\\\"|\\:|\\.$|\\[|\\]", "");
-        } else if (Globals.ON_MAC) {
-            plannedName = plannedName.replaceAll(":", "");
-        }
-
-        return plannedName;
-    }
-
-    /**
-     * Look for the last '.' in the link, and returnthe following characters.
-     * This gives the extension for most reasonably named links.
-     *
-     * @param link The link
-     * @return The suffix, excluding the dot (e.g. "pdf")
-     */
-    public String getSuffix(final String link) {
-        String strippedLink = link;
-        try {
-            // Try to strip the query string, if any, to get the correct suffix:
-            URL url = new URL(link);
-            if ((url.getQuery() != null) && (url.getQuery().length() < link.length()-1)) {
-                strippedLink = link.substring(0, link.length()-url.getQuery().length()-1);
-            }
-        } catch (MalformedURLException e) {
-            // Don't report this error, since this getting the suffix is a non-critical
-            // operation, and this error will be triggered and reported elsewhere.
-        }
-        // First see if the stripped link gives a reasonable suffix:
-        String suffix;
-        int index = strippedLink.lastIndexOf('.');
-        if ((index <= 0) || (index == strippedLink.length() - 1)) // No occurence, or at the end
-            suffix = null;
-        else suffix = strippedLink.substring(index + 1);
-        if (Globals.prefs.getExternalFileTypeByExt(suffix) != null) {
-            return suffix;
-        }
-        else {
-            // If the suffix doesn't seem to give any reasonable file type, try
-            // with the non-stripped link:
-            index = link.lastIndexOf('.');
-            if ((index <= 0) || (index == strippedLink.length() - 1)) {
-                // No occurence, or at the end
-                // Check if there are path separators in the suffix - if so, it is definitely
-                // not a proper suffix, so we should give up:
-                if (suffix.indexOf('/') > 0)
-                    return "";
-                else
-                    return suffix; // return the first one we found, anyway.
-            }
-            else {
-                 // Check if there are path separators in the suffix - if so, it is definitely
-                // not a proper suffix, so we should give up:
-                if (link.substring(index + 1).indexOf('/') > 0)
-                    return "";
-                else
-                    return link.substring(index + 1);
-            }
-        }
-
-    }
-
-    public String[] getFileDirectory(String link) {
-        return metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
-    }
-
-    /**
-     * Callback interface that users of this class must implement in order to receive
-     * notification when download is complete.
-     */
-    public interface DownloadCallback {
-        public void downloadComplete(FileListEntry file);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+
+import net.sf.jabref.*;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileListEntryEditor;
+import net.sf.jabref.net.URLDownload;
+
+/**
+ * This class handles the download of an external file. Typically called when the user clicks
+ * the "Download" button in a FileListEditor shown in an EntryEditor.
+ * <p/>
+ * The FileListEditor constructs the DownloadExternalFile instance, then calls the download()
+ * method passing a reference to itself as a callback. The download() method asks for the URL,
+ * then starts the download. When the download is completed, it calls the downloadCompleted()
+ * method on the callback FileListEditor, which then needs to take care of linking to the file.
+ * The local filename is passed as an argument to the downloadCompleted() method.
+ * <p/>
+ * If the download is cancelled, or failed, the user is informed. The callback is never called.
+ */
+public class DownloadExternalFile {
+    private JabRefFrame frame;
+    private MetaData metaData;
+    private String bibtexKey;
+    private FileListEntryEditor editor;
+    private boolean downloadFinished = false;
+    private boolean dontShowDialog = false;
+
+    public DownloadExternalFile(JabRefFrame frame, MetaData metaData, String bibtexKey) {
+
+        this.frame = frame;
+        this.metaData = metaData;
+        this.bibtexKey = bibtexKey;
+    }
+
+    /**
+     * Start a download.
+     *
+     * @param callback The object to which the filename should be reported when download
+     *                 is complete.
+     */
+    public void download(final DownloadCallback callback) throws IOException {
+        dontShowDialog = false;
+        final String res = JOptionPane.showInputDialog(frame,
+                Globals.lang("Enter URL to download"));
+
+        if (res == null || res.trim().length() == 0)
+            return;
+
+        URL url = null;
+        try {
+            url = new URL(res);
+        } catch (MalformedURLException ex1) {
+            JOptionPane.showMessageDialog(frame, Globals.lang("Invalid URL"), Globals
+                .lang("Download file"), JOptionPane.ERROR_MESSAGE);
+            return;
+        }
+
+        download(url, callback);
+    }
+
+
+    /**
+     * Start a download.
+     *
+     * @param callback The object to which the filename should be reported when download
+     *                 is complete.
+     */
+    public void download(URL url, final DownloadCallback callback) throws IOException {
+
+        String res = url.toString();
+        URLDownload udl = null;
+
+        // First of all, start the download itself in the background to a temporary file:
+        final File tmp = File.createTempFile("jabref_download", "tmp");
+        tmp.deleteOnExit();
+        //long time = System.currentTimeMillis();
+        try {
+            udl = new URLDownload(frame, url, tmp);
+            // TODO: what if this takes long time?
+            // TODO: stop editor dialog if this results in an error:
+            udl.openConnectionOnly(); // Read MIME type
+        } catch (IOException ex) {
+            JOptionPane.showMessageDialog(frame, Globals.lang("Invalid URL")+": "
+                    + ex.getMessage(), Globals.lang("Download file"),
+                    JOptionPane.ERROR_MESSAGE);
+            Globals.logger("Error while downloading " + "'" + res + "'");
+            return;
+        }
+        final URL urlF = url;
+        final URLDownload udlF = udl;
+        //System.out.println("Time: "+(System.currentTimeMillis()-time));
+        (new Thread() {
+            public void run() {
+
+                try {
+                    udlF.download();
+                } catch (IOException e2) {
+                    dontShowDialog = true;
+                    if ((editor != null) && (editor.isVisible()))
+                        editor.setVisible(false, false);
+                    JOptionPane.showMessageDialog(frame, Globals.lang("Invalid URL")+": "
+                            + e2.getMessage(), Globals.lang("Download file"),
+                            JOptionPane.ERROR_MESSAGE);
+                    Globals.logger("Error while downloading " + "'" + urlF.toString()+ "'");
+                    return;
+                }
+
+                // Download finished: call the method that stops the progress bar etc.:
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                        downloadFinished();
+                    }
+                });
+            }
+        }).start();
+
+        ExternalFileType suggestedType = null;
+        if (udl.getMimeType() != null) {
+            System.out.println("mimetype:"+udl.getMimeType());
+            suggestedType = Globals.prefs.getExternalFileTypeByMimeType(udl.getMimeType());
+            /*if (suggestedType != null)
+                System.out.println("Found type '"+suggestedType.getName()+"' by MIME type '"+udl.getMimeType()+"'");*/
+        }
+        // Then, while the download is proceeding, let the user choose the details of the file:
+        String suffix;
+        if (suggestedType != null) {
+            suffix = suggestedType.getExtension();   
+        }
+        else {
+            // If we didn't find a file type from the MIME type, try based on extension:
+            suffix = getSuffix(res);
+            suggestedType = Globals.prefs.getExternalFileTypeByExt(suffix);
+        }
+
+        String suggestedName = bibtexKey != null ? getSuggestedFileName(suffix) : "";
+        String[] fDirectory = getFileDirectory(res);
+        final String directory;
+        if (fDirectory.length == 0)
+            directory = null;
+        else
+            directory = fDirectory[0];
+        final String suggestDir = directory != null ? directory : System.getProperty("user.home");
+        File file = new File(new File(suggestDir), suggestedName);
+        FileListEntry entry = new FileListEntry("", bibtexKey != null ? file.getCanonicalPath() : "",
+                suggestedType);
+        editor = new FileListEntryEditor(frame, entry, true, false, metaData);
+        editor.getProgressBar().setIndeterminate(true);
+        editor.setOkEnabled(false);
+        editor.setExternalConfirm(new ConfirmCloseFileListEntryEditor() {
+            public boolean confirmClose(FileListEntry entry) {
+                File f = directory != null ? expandFilename(directory, entry.getLink())
+                        : new File(entry.getLink());
+                if (f.isDirectory()) {
+                    JOptionPane.showMessageDialog(frame,
+                            Globals.lang("Target file cannot be a directory."), Globals.lang("Download file"),
+                            JOptionPane.ERROR_MESSAGE);
+                    return false;
+                }
+                if (f.exists()) {
+                    return JOptionPane.showConfirmDialog
+                        (frame, "'"+f.getName()+"' "+Globals.lang("exists. Overwrite file?"),
+                        Globals.lang("Download file"), JOptionPane.OK_CANCEL_OPTION)
+                            == JOptionPane.OK_OPTION;
+                } else
+                    return true;
+            }
+        });
+        if (!dontShowDialog) // If an error occured with the URL, this flag may have been set
+            editor.setVisible(true, false);
+        else
+            return;
+        // Editor closed. Go on:
+        if (editor.okPressed()) {
+            File toFile = directory != null ? expandFilename(directory, entry.getLink())
+                    : new File(entry.getLink());
+            String dirPrefix;
+            if (directory != null) {
+                if (!directory.endsWith(System.getProperty("file.separator")))
+                    dirPrefix = directory+System.getProperty("file.separator");
+                else
+                    dirPrefix = directory;
+            } else
+                dirPrefix = null;
+
+            try {
+                boolean success = Util.copyFile(tmp, toFile, true);
+                if (!success) {
+                    // OOps, the file exists!
+                    System.out.println("File already exists! DownloadExternalFile.download()");
+                }
+
+                // If the local file is in or below the main file directory, change the
+                // path to relative:
+                if ((directory != null) && entry.getLink().startsWith(directory) &&
+                        (entry.getLink().length() > dirPrefix.length())) {
+                    entry.setLink(entry.getLink().substring(dirPrefix.length()));
+                }
+
+                callback.downloadComplete(entry);
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+
+            tmp.delete();
+        }
+        else {
+            // Cancelled. Just delete the temp file:
+            if (downloadFinished)
+                tmp.delete();
+        }
+
+    }
+
+    /**
+     * Construct a File object pointing to the file linked, whether the link is
+     * absolute or relative to the main directory.
+     * @param directory The main directory.
+     * @param link The absolute or relative link.
+     * @return The expanded File.
+     */
+    private File expandFilename(String directory, String link) {
+        File toFile = new File(link);
+        // If this is a relative link, we should perhaps append the directory:
+        String dirPrefix = directory+System.getProperty("file.separator");
+        if (!toFile.isAbsolute()) {
+            toFile = new File(dirPrefix+link);
+        }
+        return toFile;
+    }
+
+    /**
+     * This is called by the download thread when download is completed.
+     */
+    public void downloadFinished() {
+        downloadFinished = true;
+        editor.getProgressBar().setVisible(false);
+        editor.getProgressBarLabel().setVisible(false);
+        editor.setOkEnabled(true);
+        editor.getProgressBar().setValue(editor.getProgressBar().getMaximum());
+    }
+
+    public String getSuggestedFileName(String suffix) {
+        
+        String plannedName = bibtexKey;
+        if (suffix.length() > 0)
+            plannedName += "." + suffix;
+
+        /*
+        * [ 1548875 ] download pdf produces unsupported filename
+        *
+        * http://sourceforge.net/tracker/index.php?func=detail&aid=1548875&group_id=92314&atid=600306
+        *
+        */
+        if (Globals.ON_WIN) {
+            plannedName = plannedName.replaceAll(
+                    "\\?|\\*|\\<|\\>|\\||\\\"|\\:|\\.$|\\[|\\]", "");
+        } else if (Globals.ON_MAC) {
+            plannedName = plannedName.replaceAll(":", "");
+        }
+
+        return plannedName;
+    }
+
+    /**
+     * Look for the last '.' in the link, and returnthe following characters.
+     * This gives the extension for most reasonably named links.
+     *
+     * @param link The link
+     * @return The suffix, excluding the dot (e.g. "pdf")
+     */
+    public String getSuffix(final String link) {
+        String strippedLink = link;
+        try {
+            // Try to strip the query string, if any, to get the correct suffix:
+            URL url = new URL(link);
+            if ((url.getQuery() != null) && (url.getQuery().length() < link.length()-1)) {
+                strippedLink = link.substring(0, link.length()-url.getQuery().length()-1);
+            }
+        } catch (MalformedURLException e) {
+            // Don't report this error, since this getting the suffix is a non-critical
+            // operation, and this error will be triggered and reported elsewhere.
+        }
+        // First see if the stripped link gives a reasonable suffix:
+        String suffix;
+        int index = strippedLink.lastIndexOf('.');
+        if ((index <= 0) || (index == strippedLink.length() - 1)) // No occurence, or at the end
+            suffix = null;
+        else suffix = strippedLink.substring(index + 1);
+        if (Globals.prefs.getExternalFileTypeByExt(suffix) != null) {
+            return suffix;
+        }
+        else {
+            // If the suffix doesn't seem to give any reasonable file type, try
+            // with the non-stripped link:
+            index = link.lastIndexOf('.');
+            if ((index <= 0) || (index == strippedLink.length() - 1)) {
+                // No occurence, or at the end
+                // Check if there are path separators in the suffix - if so, it is definitely
+                // not a proper suffix, so we should give up:
+                if (suffix.indexOf('/') > 0)
+                    return "";
+                else
+                    return suffix; // return the first one we found, anyway.
+            }
+            else {
+                 // Check if there are path separators in the suffix - if so, it is definitely
+                // not a proper suffix, so we should give up:
+                if (link.substring(index + 1).indexOf('/') > 0)
+                    return "";
+                else
+                    return link.substring(index + 1);
+            }
+        }
+
+    }
+
+    public String[] getFileDirectory(String link) {
+        return metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+    }
+
+    /**
+     * Callback interface that users of this class must implement in order to receive
+     * notification when download is complete.
+     */
+    public interface DownloadCallback {
+        public void downloadComplete(FileListEntry file);
+    }
+}
diff --git a/src/java/net/sf/jabref/external/DroppedFileHandler.java b/src/java/net/sf/jabref/external/DroppedFileHandler.java
index a700d90..f2598e4 100644
--- a/src/java/net/sf/jabref/external/DroppedFileHandler.java
+++ b/src/java/net/sf/jabref/external/DroppedFileHandler.java
@@ -1,613 +1,613 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.swing.*;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import net.sf.jabref.*;
-import net.sf.jabref.export.layout.Layout;
-import net.sf.jabref.export.layout.LayoutHelper;
-import net.sf.jabref.gui.MainTable;
-import net.sf.jabref.gui.FileListTableModel;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableFieldChange;
-import net.sf.jabref.undo.UndoableInsertEntry;
-import net.sf.jabref.util.XMPUtil;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.debug.FormDebugPanel;
-import com.jgoodies.forms.layout.CellConstraints;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * This class holds the functionality of autolinking to a file that's dropped
- * onto an entry.
- * 
- * Options for handling the files are:
- * 
- * 1) Link to the file in its current position (disabled if the file is remote)
- * 
- * 2) Copy the file to ??? directory, rename after bibtex key, and extension
- * 
- * 3) Move the file to ??? directory, rename after bibtex key, and extension
- */
-public class DroppedFileHandler {
-	public static final String DFH_LEAVE = "DroppedFileHandler_LeaveFileInDir";
-	public static final String DFH_COPY = "DroppedFileHandler_CopyFile";
-	public static final String DFH_MOVE = "DroppedFileHandler_MoveFile";
-	public static final String DFH_RENAME = "DroppedFileHandler_RenameFile";
-	
-    private JabRefFrame frame;
-
-    private BasePanel panel;
-
-    private JRadioButton linkInPlace = new JRadioButton(), copyRadioButton = new JRadioButton(),
-        moveRadioButton = new JRadioButton();
-    
-    private JLabel destDirLabel = new JLabel();
-
-    private JCheckBox renameCheckBox = new JCheckBox();
-
-    private JTextField renameToTextBox = new JTextField(50);
-    
-    private JPanel optionsPanel = new JPanel();
-
-    public DroppedFileHandler(JabRefFrame frame, BasePanel panel) {
-
-        this.frame = frame;
-        this.panel = panel;
-
-        ButtonGroup grp = new ButtonGroup();
-        grp.add(linkInPlace);
-        grp.add(copyRadioButton);
-        grp.add(moveRadioButton);
-
-        FormLayout layout = new FormLayout("left:15dlu,pref,pref,pref","bottom:14pt,pref,pref,pref,pref");
-        layout.setRowGroups(new int[][]{{1, 2, 3, 4, 5}});
-        DefaultFormBuilder builder = new DefaultFormBuilder(layout,	optionsPanel);
-        builder.setDefaultDialogBorder();
-        CellConstraints cc = new CellConstraints();
-        
-        builder.add(linkInPlace, cc.xyw(1, 1, 4));
-        builder.add(destDirLabel, cc.xyw(1, 2, 4));
-        builder.add(copyRadioButton, cc.xyw(2, 3, 3));
-        builder.add(moveRadioButton, cc.xyw(2, 4, 3));
-        builder.add(renameCheckBox, cc.xyw(2, 5, 1));
-        builder.add(renameToTextBox, cc.xyw(4, 5, 1));
-        
-    }
-
-    /**
-     * Offer copy/move/linking options for a dragged external file. Perform the
-     * chosen operation, if any.
-     * 
-     * @param fileName
-     *            The name of the dragged file.
-     * @param fileType
-     *            The FileType associated with the file.
-     * @param localFile
-     *            Indicate whether this is a local file, or a remote file copied
-     *            to a local temporary file.
-     * @param mainTable
-     *            The MainTable the file was dragged to.
-     * @param dropRow
-     *            The row where the file was dropped.
-     */
-    public void handleDroppedfile(String fileName, ExternalFileType fileType, boolean localFile,
-        MainTable mainTable, int dropRow) {
-
-        BibtexEntry entry = mainTable.getEntryAt(dropRow);
-        handleDroppedfile(fileName, fileType, localFile, entry);
-    }
-
-    /**
-     *
-     * @param fileName
-     *        The name of the dragged file.
-     * @param fileType
-     *        The FileType associated with the file.
-     * @param localFile
- *            Indicate whether this is a local file, or a remote file copied
- *            to a local temporary file.
-     * @param entry
-     *        The target entry for the drop.
-     */
-    public void handleDroppedfile(String fileName, ExternalFileType fileType, boolean localFile,
-        BibtexEntry entry) {
-        NamedCompound edits = new NamedCompound(Globals.lang("Drop %0", fileType.extension));
-
-        if (tryXmpImport(fileName, fileType, localFile, edits)) {
-            edits.end();
-            panel.undoManager.addEdit(edits);
-            return;
-        }
-
-        // Show dialog
-        boolean newEntry = false;
-        String citeKey = entry.getCiteKey();
-        if (!showLinkMoveCopyRenameDialog(fileName, fileType, entry, newEntry, false, panel.database()))
-            return;
-
-        /*
-         * Ok, we're ready to go. See first if we need to do a file copy before
-         * linking:
-         */
-        
-        boolean success = true;
-        String destFilename;
-
-        if (linkInPlace.isSelected()) {
-            destFilename = Util.shortenFileName(new File(fileName), panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD)).toString();
-        } else {
-            destFilename = (renameCheckBox.isSelected() ? renameToTextBox.getText() : new File(fileName).getName());
-            if (copyRadioButton.isSelected()) {
-                success = doCopy(fileName, fileType, destFilename, edits);
-            } else if (moveRadioButton.isSelected()) {
-                success = doMove(fileName, fileType, destFilename, edits);
-            }
-        }
-
-        if (success) {
-            doLink(entry, fileType, destFilename, false, edits);
-            panel.markBaseChanged();
-            panel.updateEntryEditorIfShowing();
-        }
-        edits.end();
-        panel.undoManager.addEdit(edits);
-
-    }
-
-    // Done by MrDlib
-    public void linkPdfToEntry(String fileName, MainTable entryTable, int dropRow){
-        BibtexEntry entry = entryTable.getEntryAt(dropRow);
-        linkPdfToEntry(fileName, entryTable, entry);
-    }
-
-    public void linkPdfToEntry(String fileName, MainTable entryTable, BibtexEntry entry){
-        ExternalFileType fileType = Globals.prefs.getExternalFileTypeByExt("pdf");
-        NamedCompound edits = new NamedCompound(Globals.lang("Drop %0", fileType.extension));
-
-        // Show dialog
-        boolean newEntry = false;
-        String citeKey = entry.getCiteKey();
-        if (!showLinkMoveCopyRenameDialog(fileName, fileType, entry, newEntry, false, panel.database()))
-            return;
-
-        /*
-         * Ok, we're ready to go. See first if we need to do a file copy before
-         * linking:
-         */
-
-        boolean success = true;
-        String destFilename;
-
-        if (linkInPlace.isSelected()) {
-            destFilename = Util.shortenFileName(new File(fileName), panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD)).toString();
-        } else {
-            destFilename = (renameCheckBox.isSelected() ? renameToTextBox.getText() : new File(fileName).getName());
-            if (copyRadioButton.isSelected()) {
-                success = doCopy(fileName, fileType, destFilename, edits);
-            } else if (moveRadioButton.isSelected()) {
-                success = doMove(fileName, fileType, destFilename, edits);
-            }
-        }
-
-        if (success) {
-            doLink(entry, fileType, destFilename, false, edits);
-            panel.markBaseChanged();
-        }
-        edits.end();
-        panel.undoManager.addEdit(edits);
-    }
-
-    public void importXmp(List<BibtexEntry> xmpEntriesInFile, String fileName){
-        ExternalFileType fileType = Globals.prefs.getExternalFileTypeByExt("pdf");
-        NamedCompound edits = new NamedCompound(Globals.lang("Drop %0", fileType.extension));
-
-        boolean isSingle = xmpEntriesInFile.size() == 1;
-        BibtexEntry single = (isSingle ? xmpEntriesInFile.get(0) : null);
-
-
-        boolean success = true;
-
-        String destFilename;
-
-        if (linkInPlace.isSelected()) {
-            destFilename = Util.shortenFileName(new File(fileName), panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD)).toString();
-        } else {
-            if (renameCheckBox.isSelected()) {
-                destFilename = fileName;
-            } else {
-                destFilename = single.getCiteKey() + "." + fileType.extension;
-            }
-
-            if (copyRadioButton.isSelected()) {
-                success = doCopy(fileName, fileType, destFilename, edits);
-            } else if (moveRadioButton.isSelected()) {
-                success = doMove(fileName, fileType, destFilename, edits);
-            }
-        }
-        if (success) {
-
-            Iterator<BibtexEntry> it = xmpEntriesInFile.iterator();
-
-            while (it.hasNext()) {
-                try {
-                    BibtexEntry entry = it.next();
-                    entry.setId(Util.createNeutralId());
-                    edits.addEdit(new UndoableInsertEntry(panel.getDatabase(), entry, panel));
-                    panel.getDatabase().insertEntry(entry);
-                    doLink(entry, fileType, destFilename, true, edits);
-                } catch (KeyCollisionException ex) {
-
-                }
-            }
-            panel.markBaseChanged();
-            panel.updateEntryEditorIfShowing();
-        }
-        edits.end();
-        panel.undoManager.addEdit(edits);
-    }
-    // Done by MrDlib
-
-
-    private boolean tryXmpImport(String fileName, ExternalFileType fileType, boolean localFile,
-        NamedCompound edits) {
-
-        if (!fileType.extension.equals("pdf")) {
-            return false;
-        }
-
-        List<BibtexEntry> xmpEntriesInFile = null;
-        try {
-            xmpEntriesInFile = XMPUtil.readXMP(fileName);
-        } catch (Exception e) {
-            return false;
-        }
-
-        if ((xmpEntriesInFile == null) || (xmpEntriesInFile.size() == 0)) {
-            return false;
-        }
-
-        JLabel confirmationMessage = new JLabel(
-            Globals.lang("The PDF contains one or several bibtex-records.\nDo you want to import these as new entries into the current database?"));
-
-        int reply = JOptionPane.showConfirmDialog(frame, confirmationMessage, Globals.lang(
-            "XMP metadata found in PDF: %0", fileName), JOptionPane.YES_NO_CANCEL_OPTION,
-            JOptionPane.QUESTION_MESSAGE);
-
-        if (reply == JOptionPane.CANCEL_OPTION) {
-            return true; // The user canceled thus that we are done.
-        }
-        if (reply == JOptionPane.NO_OPTION) {
-            return false;
-        }
-
-        // reply == JOptionPane.YES_OPTION)
-
-        /*
-         * TODO Extract Import functionality from ImportMenuItem then we could
-         * do:
-         * 
-         * ImportMenuItem importer = new ImportMenuItem(frame, (mainTable ==
-         * null), new PdfXmpImporter());
-         * 
-         * importer.automatedImport(new String[] { fileName });
-         */
-
-        boolean isSingle = xmpEntriesInFile.size() == 1;
-        BibtexEntry single = (isSingle ? xmpEntriesInFile.get(0) : null);
-
-       
-        boolean success = true;
-
-        String destFilename;
-
-        if (linkInPlace.isSelected()) {
-            destFilename = Util.shortenFileName(new File(fileName), panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD)).toString();
-        } else {
-            if (renameCheckBox.isSelected()) {
-                destFilename = fileName;
-            } else {
-                destFilename = single.getCiteKey() + "." + fileType.extension;
-            }
-
-            if (copyRadioButton.isSelected()) {
-                success = doCopy(fileName, fileType, destFilename, edits);
-            } else if (moveRadioButton.isSelected()) {
-                success = doMove(fileName, fileType, destFilename, edits);
-            }
-        }
-        if (success) {
-
-            Iterator<BibtexEntry> it = xmpEntriesInFile.iterator();
-
-            while (it.hasNext()) {
-                try {
-                    BibtexEntry entry = it.next();
-                    entry.setId(Util.createNeutralId());
-                    edits.addEdit(new UndoableInsertEntry(panel.getDatabase(), entry, panel));
-                    panel.getDatabase().insertEntry(entry);
-                    doLink(entry, fileType, destFilename, true, edits);
-                } catch (KeyCollisionException ex) {
-
-                }
-            }
-            panel.markBaseChanged();
-            panel.updateEntryEditorIfShowing();
-        }
-        return true;
-    }
-
-    /**
-     * @return true if user pushed "OK", false otherwise
-     */
-    public boolean showLinkMoveCopyRenameDialog(String linkFileName, ExternalFileType fileType,
-        BibtexEntry entry, boolean newEntry, final boolean multipleEntries, BibtexDatabase database) {
-    	String citeKey = entry.getCiteKey();
-    	
-    	String dialogTitle = Globals.lang("Link to file %0", linkFileName);
-        String[] dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-        int found = -1;
-        for (int i=0; i<dirs.length; i++)
-            if (new File(dirs[i]).exists()) {
-                found = i;
-                break;
-            }
-        if (found < 0) {
-            destDirLabel.setText(Globals.lang("File directory is not set or does not exist."));
-            copyRadioButton.setEnabled(false);
-            moveRadioButton.setEnabled(false);
-            renameToTextBox.setEnabled(false);
-            renameCheckBox.setEnabled(false);
-            linkInPlace.setSelected(true);
-        } else {
-            destDirLabel.setText(Globals.lang("File directory is '%0':", dirs[found]));
-            copyRadioButton.setEnabled(true);
-            moveRadioButton.setEnabled(true);
-            renameToTextBox.setEnabled(true);
-            renameCheckBox.setEnabled(true);
-        }
-        
-        ChangeListener cl = new ChangeListener() {
-			public void stateChanged(ChangeEvent arg0) {
-				renameCheckBox.setEnabled(!linkInPlace.isSelected()
-						&&  (!multipleEntries));
-				renameToTextBox.setEnabled(!linkInPlace.isSelected()
-						&&  (!multipleEntries));
-				if (multipleEntries) { renameToTextBox.setText("Multiple entries"); }
-			}
-		};
-
-		if (multipleEntries) {
-			linkInPlace.setText(Globals
-					.lang("Leave files in their current directory."));
-			copyRadioButton.setText(Globals.lang("Copy files to file directory."));
-
-			moveRadioButton.setText(Globals.lang("Move files to file directory."));
-		} else {
-			linkInPlace.setText(Globals
-					.lang("Leave file in its current directory."));
-			copyRadioButton.setText(Globals.lang("Copy file to file directory."));
-			moveRadioButton.setText(Globals.lang("Move file to file directory."));
-		}
-		
-        renameCheckBox.setText(Globals.lang("Rename file to").concat(": "));
-        
-        // Determine which name to suggest:
-        String targetName = Util.getLinkedFileName(database, entry);
-
-        renameToTextBox.setText(targetName.concat(".").concat(fileType.extension));
-
-        linkInPlace.setSelected(frame.prefs().getBoolean(DFH_LEAVE));
-        copyRadioButton.setSelected(frame.prefs().getBoolean(DFH_COPY));
-        moveRadioButton.setSelected(frame.prefs().getBoolean(DFH_MOVE));
-        renameCheckBox.setSelected(frame.prefs().getBoolean(DFH_RENAME));
-
-        linkInPlace.addChangeListener(cl);
-        cl.stateChanged(new ChangeEvent(linkInPlace));
-
-        try {
-        	Object[] messages = {Globals.lang("How would you like to link to '%0'?", linkFileName),
-                    optionsPanel};
-        	int reply = JOptionPane.showConfirmDialog(frame, messages, dialogTitle,
-                JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
-        	if (reply == JOptionPane.OK_OPTION) {
-        		// store user's choice
-        		frame.prefs().putBoolean(DFH_LEAVE, linkInPlace.isSelected());
-        		frame.prefs().putBoolean(DFH_COPY, copyRadioButton.isSelected());
-        		frame.prefs().putBoolean(DFH_MOVE, moveRadioButton.isSelected());
-        		frame.prefs().putBoolean(DFH_RENAME, renameCheckBox.isSelected());
-        		return true;
-        	} else {
-        		return false;
-        	}
-        } finally {
-            linkInPlace.removeChangeListener(cl);
-        }
-    }
-    
-    /**
-     * Make a extension to the file.
-     * 
-     * @param entry
-     *            The entry to extension from.
-     * @param fileType
-     *            The FileType associated with the file.
-     * @param filename
-     *            The path to the file.
-     * @param edits
-     *            An NamedCompound action this action is to be added to. If none
-     *            is given, the edit is added to the panel's undoManager.
-     */
-    private void doLink(BibtexEntry entry, ExternalFileType fileType, String filename,
-        boolean avoidDuplicate, NamedCompound edits) {
-
-
-        String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
-        FileListTableModel tm = new FileListTableModel();
-        if (oldValue != null)
-            tm.setContent(oldValue);
-
-        // If avoidDuplicate==true, we should check if this file is already linked:
-        if (avoidDuplicate) {
-            // For comparison, find the absolute filename:
-            String[] dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-            String absFilename = (!(new File(filename).isAbsolute()) && (dirs.length > 0)) ?
-                    Util.expandFilename(filename, dirs).getAbsolutePath() : filename;
-
-            for (int i=0; i<tm.getRowCount(); i++) {
-                FileListEntry flEntry = tm.getEntry(i);
-                // Find the absolute filename for this existing link:
-                String absName = (!(new File(flEntry.getLink()).isAbsolute()) && (dirs.length > 0)) ?
-                        Util.expandFilename(flEntry.getLink(), dirs).getAbsolutePath() : flEntry.getLink();
-                System.out.println("absName: "+absName);
-                // If the filenames are equal, we don't need to link, so we simply return:
-                if (absFilename.equals(absName))
-                    return;
-            }
-        }
-
-        tm.addEntry(tm.getRowCount(), new FileListEntry("", filename, fileType));
-        String newValue = tm.getStringRepresentation();
-        UndoableFieldChange edit = new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD,
-                oldValue, newValue);
-        entry.setField(GUIGlobals.FILE_FIELD, newValue);
-
-        if (edits == null) {
-            panel.undoManager.addEdit(edit);
-        } else {
-            edits.addEdit(edit);
-        }
-    }
-
-    /**
-     * Move the given file to the base directory for its file type, and rename
-     * it to the given filename.
-     * 
-     * @param fileName
-     *            The name of the source file.
-     * @param fileType
-     *            The FileType associated with the file.
-     * @param destFilename
-     *            The destination filename.
-     * @param edits
-     *            TODO we should be able to undo this action
-     * @return true if the operation succeeded.
-     */
-    private boolean doMove(String fileName, ExternalFileType fileType, String destFilename,
-        NamedCompound edits) {
-        String[] dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-        int found = -1;
-        for (int i=0; i<dirs.length; i++)
-            if (new File(dirs[i]).exists()) {
-                found = i;
-                break;
-            }
-        if (found < 0) {
-            // OOps, we don't know which directory to put it in, or the given
-            // dir doesn't exist....
-            // This should not happen!!
-            return false;
-        }
-        File fromFile = new File(fileName);
-        File toFile = new File(dirs[found] + System.getProperty("file.separator") + destFilename);
-        if (toFile.exists()) {
-        	int answer = JOptionPane.showConfirmDialog(frame,
-        			toFile.getAbsolutePath() + " exists. Overwrite?", "Overwrite file?", 
-        			JOptionPane.YES_NO_OPTION);
-        	if (answer == JOptionPane.NO_OPTION) {
-        		return false;
-        	}
-        }
- 
-        if (!fromFile.renameTo(toFile)) {
-        	JOptionPane.showMessageDialog(frame,
-        			"There was an error moving the file. Please move the file manually and link in place.",
-        			"Error moving file", JOptionPane.ERROR_MESSAGE);
-        	return false;
-        } else {
-        	return true;
-        }
-
-    }
-
-    /**
-     * Copy the given file to the base directory for its file type, and give it
-     * the given name.
-     * 
-     * @param fileName
-     *            The name of the source file.
-     * @param fileType
-     *            The FileType associated with the file.
-     * @param toFile
-     *            The destination filename. An existing path-component will be removed.
-     * @param edits
-     *            TODO we should be able to undo this!
-     * @return
-     */
-    private boolean doCopy(String fileName, ExternalFileType fileType, String toFile,
-        NamedCompound edits) {
-
-        String[] dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-        int found = -1;
-        for (int i=0; i<dirs.length; i++)
-            if (new File(dirs[i]).exists()) {
-                found = i;
-                break;
-            }
-        if (found < 0) {
-            // OOps, we don't know which directory to put it in, or the given
-            // dir doesn't exist....
-            System.out.println("dir: " + dirs[found] + "\t ext: " + fileType.getExtension());
-            return false;
-        }
-        toFile = new File(toFile).getName();
-        
-        File destFile = new File(new StringBuffer(dirs[found]).append(System.getProperty("file.separator"))
-            .append(toFile).toString());
-        if (destFile.equals(new File(fileName))){
-            // File is already in the correct position. Don't override!
-            return true;
-        }
-        
-        if (destFile.exists()) {
-            int answer = JOptionPane.showConfirmDialog(frame, "'" + destFile.getPath() + "' "
-                + Globals.lang("exists. Overwrite?"), Globals.lang("File exists"),
-                JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
-            if (answer == JOptionPane.NO_OPTION)
-                return false;
-        }
-        try {
-            Util.copyFile(new File(fileName), destFile, true);
-        } catch (IOException e) {
-            e.printStackTrace();
-            return false;
-        }
-
-        return true;
-    }
-
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.sf.jabref.*;
+import net.sf.jabref.export.layout.Layout;
+import net.sf.jabref.export.layout.LayoutHelper;
+import net.sf.jabref.gui.MainTable;
+import net.sf.jabref.gui.FileListTableModel;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableFieldChange;
+import net.sf.jabref.undo.UndoableInsertEntry;
+import net.sf.jabref.util.XMPUtil;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.debug.FormDebugPanel;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * This class holds the functionality of autolinking to a file that's dropped
+ * onto an entry.
+ * 
+ * Options for handling the files are:
+ * 
+ * 1) Link to the file in its current position (disabled if the file is remote)
+ * 
+ * 2) Copy the file to ??? directory, rename after bibtex key, and extension
+ * 
+ * 3) Move the file to ??? directory, rename after bibtex key, and extension
+ */
+public class DroppedFileHandler {
+	public static final String DFH_LEAVE = "DroppedFileHandler_LeaveFileInDir";
+	public static final String DFH_COPY = "DroppedFileHandler_CopyFile";
+	public static final String DFH_MOVE = "DroppedFileHandler_MoveFile";
+	public static final String DFH_RENAME = "DroppedFileHandler_RenameFile";
+	
+    private JabRefFrame frame;
+
+    private BasePanel panel;
+
+    private JRadioButton linkInPlace = new JRadioButton(), copyRadioButton = new JRadioButton(),
+        moveRadioButton = new JRadioButton();
+    
+    private JLabel destDirLabel = new JLabel();
+
+    private JCheckBox renameCheckBox = new JCheckBox();
+
+    private JTextField renameToTextBox = new JTextField(50);
+    
+    private JPanel optionsPanel = new JPanel();
+
+    public DroppedFileHandler(JabRefFrame frame, BasePanel panel) {
+
+        this.frame = frame;
+        this.panel = panel;
+
+        ButtonGroup grp = new ButtonGroup();
+        grp.add(linkInPlace);
+        grp.add(copyRadioButton);
+        grp.add(moveRadioButton);
+
+        FormLayout layout = new FormLayout("left:15dlu,pref,pref,pref","bottom:14pt,pref,pref,pref,pref");
+        layout.setRowGroups(new int[][]{{1, 2, 3, 4, 5}});
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout,	optionsPanel);
+        builder.setDefaultDialogBorder();
+        CellConstraints cc = new CellConstraints();
+        
+        builder.add(linkInPlace, cc.xyw(1, 1, 4));
+        builder.add(destDirLabel, cc.xyw(1, 2, 4));
+        builder.add(copyRadioButton, cc.xyw(2, 3, 3));
+        builder.add(moveRadioButton, cc.xyw(2, 4, 3));
+        builder.add(renameCheckBox, cc.xyw(2, 5, 1));
+        builder.add(renameToTextBox, cc.xyw(4, 5, 1));
+        
+    }
+
+    /**
+     * Offer copy/move/linking options for a dragged external file. Perform the
+     * chosen operation, if any.
+     * 
+     * @param fileName
+     *            The name of the dragged file.
+     * @param fileType
+     *            The FileType associated with the file.
+     * @param localFile
+     *            Indicate whether this is a local file, or a remote file copied
+     *            to a local temporary file.
+     * @param mainTable
+     *            The MainTable the file was dragged to.
+     * @param dropRow
+     *            The row where the file was dropped.
+     */
+    public void handleDroppedfile(String fileName, ExternalFileType fileType, boolean localFile,
+        MainTable mainTable, int dropRow) {
+
+        BibtexEntry entry = mainTable.getEntryAt(dropRow);
+        handleDroppedfile(fileName, fileType, localFile, entry);
+    }
+
+    /**
+     *
+     * @param fileName
+     *        The name of the dragged file.
+     * @param fileType
+     *        The FileType associated with the file.
+     * @param localFile
+ *            Indicate whether this is a local file, or a remote file copied
+ *            to a local temporary file.
+     * @param entry
+     *        The target entry for the drop.
+     */
+    public void handleDroppedfile(String fileName, ExternalFileType fileType, boolean localFile,
+        BibtexEntry entry) {
+        NamedCompound edits = new NamedCompound(Globals.lang("Drop %0", fileType.extension));
+
+        if (tryXmpImport(fileName, fileType, localFile, edits)) {
+            edits.end();
+            panel.undoManager.addEdit(edits);
+            return;
+        }
+
+        // Show dialog
+        boolean newEntry = false;
+        String citeKey = entry.getCiteKey();
+        if (!showLinkMoveCopyRenameDialog(fileName, fileType, entry, newEntry, false, panel.database()))
+            return;
+
+        /*
+         * Ok, we're ready to go. See first if we need to do a file copy before
+         * linking:
+         */
+        
+        boolean success = true;
+        String destFilename;
+
+        if (linkInPlace.isSelected()) {
+            destFilename = Util.shortenFileName(new File(fileName), panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD)).toString();
+        } else {
+            destFilename = (renameCheckBox.isSelected() ? renameToTextBox.getText() : new File(fileName).getName());
+            if (copyRadioButton.isSelected()) {
+                success = doCopy(fileName, fileType, destFilename, edits);
+            } else if (moveRadioButton.isSelected()) {
+                success = doMove(fileName, fileType, destFilename, edits);
+            }
+        }
+
+        if (success) {
+            doLink(entry, fileType, destFilename, false, edits);
+            panel.markBaseChanged();
+            panel.updateEntryEditorIfShowing();
+        }
+        edits.end();
+        panel.undoManager.addEdit(edits);
+
+    }
+
+    // Done by MrDlib
+    public void linkPdfToEntry(String fileName, MainTable entryTable, int dropRow){
+        BibtexEntry entry = entryTable.getEntryAt(dropRow);
+        linkPdfToEntry(fileName, entryTable, entry);
+    }
+
+    public void linkPdfToEntry(String fileName, MainTable entryTable, BibtexEntry entry){
+        ExternalFileType fileType = Globals.prefs.getExternalFileTypeByExt("pdf");
+        NamedCompound edits = new NamedCompound(Globals.lang("Drop %0", fileType.extension));
+
+        // Show dialog
+        boolean newEntry = false;
+        String citeKey = entry.getCiteKey();
+        if (!showLinkMoveCopyRenameDialog(fileName, fileType, entry, newEntry, false, panel.database()))
+            return;
+
+        /*
+         * Ok, we're ready to go. See first if we need to do a file copy before
+         * linking:
+         */
+
+        boolean success = true;
+        String destFilename;
+
+        if (linkInPlace.isSelected()) {
+            destFilename = Util.shortenFileName(new File(fileName), panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD)).toString();
+        } else {
+            destFilename = (renameCheckBox.isSelected() ? renameToTextBox.getText() : new File(fileName).getName());
+            if (copyRadioButton.isSelected()) {
+                success = doCopy(fileName, fileType, destFilename, edits);
+            } else if (moveRadioButton.isSelected()) {
+                success = doMove(fileName, fileType, destFilename, edits);
+            }
+        }
+
+        if (success) {
+            doLink(entry, fileType, destFilename, false, edits);
+            panel.markBaseChanged();
+        }
+        edits.end();
+        panel.undoManager.addEdit(edits);
+    }
+
+    public void importXmp(List<BibtexEntry> xmpEntriesInFile, String fileName){
+        ExternalFileType fileType = Globals.prefs.getExternalFileTypeByExt("pdf");
+        NamedCompound edits = new NamedCompound(Globals.lang("Drop %0", fileType.extension));
+
+        boolean isSingle = xmpEntriesInFile.size() == 1;
+        BibtexEntry single = (isSingle ? xmpEntriesInFile.get(0) : null);
+
+
+        boolean success = true;
+
+        String destFilename;
+
+        if (linkInPlace.isSelected()) {
+            destFilename = Util.shortenFileName(new File(fileName), panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD)).toString();
+        } else {
+            if (renameCheckBox.isSelected()) {
+                destFilename = fileName;
+            } else {
+                destFilename = single.getCiteKey() + "." + fileType.extension;
+            }
+
+            if (copyRadioButton.isSelected()) {
+                success = doCopy(fileName, fileType, destFilename, edits);
+            } else if (moveRadioButton.isSelected()) {
+                success = doMove(fileName, fileType, destFilename, edits);
+            }
+        }
+        if (success) {
+
+            Iterator<BibtexEntry> it = xmpEntriesInFile.iterator();
+
+            while (it.hasNext()) {
+                try {
+                    BibtexEntry entry = it.next();
+                    entry.setId(Util.createNeutralId());
+                    edits.addEdit(new UndoableInsertEntry(panel.getDatabase(), entry, panel));
+                    panel.getDatabase().insertEntry(entry);
+                    doLink(entry, fileType, destFilename, true, edits);
+                } catch (KeyCollisionException ex) {
+
+                }
+            }
+            panel.markBaseChanged();
+            panel.updateEntryEditorIfShowing();
+        }
+        edits.end();
+        panel.undoManager.addEdit(edits);
+    }
+    // Done by MrDlib
+
+
+    private boolean tryXmpImport(String fileName, ExternalFileType fileType, boolean localFile,
+        NamedCompound edits) {
+
+        if (!fileType.extension.equals("pdf")) {
+            return false;
+        }
+
+        List<BibtexEntry> xmpEntriesInFile = null;
+        try {
+            xmpEntriesInFile = XMPUtil.readXMP(fileName);
+        } catch (Exception e) {
+            return false;
+        }
+
+        if ((xmpEntriesInFile == null) || (xmpEntriesInFile.size() == 0)) {
+            return false;
+        }
+
+        JLabel confirmationMessage = new JLabel(
+            Globals.lang("The PDF contains one or several bibtex-records.\nDo you want to import these as new entries into the current database?"));
+
+        int reply = JOptionPane.showConfirmDialog(frame, confirmationMessage, Globals.lang(
+            "XMP metadata found in PDF: %0", fileName), JOptionPane.YES_NO_CANCEL_OPTION,
+            JOptionPane.QUESTION_MESSAGE);
+
+        if (reply == JOptionPane.CANCEL_OPTION) {
+            return true; // The user canceled thus that we are done.
+        }
+        if (reply == JOptionPane.NO_OPTION) {
+            return false;
+        }
+
+        // reply == JOptionPane.YES_OPTION)
+
+        /*
+         * TODO Extract Import functionality from ImportMenuItem then we could
+         * do:
+         * 
+         * ImportMenuItem importer = new ImportMenuItem(frame, (mainTable ==
+         * null), new PdfXmpImporter());
+         * 
+         * importer.automatedImport(new String[] { fileName });
+         */
+
+        boolean isSingle = xmpEntriesInFile.size() == 1;
+        BibtexEntry single = (isSingle ? xmpEntriesInFile.get(0) : null);
+
+       
+        boolean success = true;
+
+        String destFilename;
+
+        if (linkInPlace.isSelected()) {
+            destFilename = Util.shortenFileName(new File(fileName), panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD)).toString();
+        } else {
+            if (renameCheckBox.isSelected()) {
+                destFilename = fileName;
+            } else {
+                destFilename = single.getCiteKey() + "." + fileType.extension;
+            }
+
+            if (copyRadioButton.isSelected()) {
+                success = doCopy(fileName, fileType, destFilename, edits);
+            } else if (moveRadioButton.isSelected()) {
+                success = doMove(fileName, fileType, destFilename, edits);
+            }
+        }
+        if (success) {
+
+            Iterator<BibtexEntry> it = xmpEntriesInFile.iterator();
+
+            while (it.hasNext()) {
+                try {
+                    BibtexEntry entry = it.next();
+                    entry.setId(Util.createNeutralId());
+                    edits.addEdit(new UndoableInsertEntry(panel.getDatabase(), entry, panel));
+                    panel.getDatabase().insertEntry(entry);
+                    doLink(entry, fileType, destFilename, true, edits);
+                } catch (KeyCollisionException ex) {
+
+                }
+            }
+            panel.markBaseChanged();
+            panel.updateEntryEditorIfShowing();
+        }
+        return true;
+    }
+
+    /**
+     * @return true if user pushed "OK", false otherwise
+     */
+    public boolean showLinkMoveCopyRenameDialog(String linkFileName, ExternalFileType fileType,
+        BibtexEntry entry, boolean newEntry, final boolean multipleEntries, BibtexDatabase database) {
+    	String citeKey = entry.getCiteKey();
+    	
+    	String dialogTitle = Globals.lang("Link to file %0", linkFileName);
+        String[] dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+        int found = -1;
+        for (int i=0; i<dirs.length; i++)
+            if (new File(dirs[i]).exists()) {
+                found = i;
+                break;
+            }
+        if (found < 0) {
+            destDirLabel.setText(Globals.lang("File directory is not set or does not exist."));
+            copyRadioButton.setEnabled(false);
+            moveRadioButton.setEnabled(false);
+            renameToTextBox.setEnabled(false);
+            renameCheckBox.setEnabled(false);
+            linkInPlace.setSelected(true);
+        } else {
+            destDirLabel.setText(Globals.lang("File directory is '%0':", dirs[found]));
+            copyRadioButton.setEnabled(true);
+            moveRadioButton.setEnabled(true);
+            renameToTextBox.setEnabled(true);
+            renameCheckBox.setEnabled(true);
+        }
+        
+        ChangeListener cl = new ChangeListener() {
+			public void stateChanged(ChangeEvent arg0) {
+				renameCheckBox.setEnabled(!linkInPlace.isSelected()
+						&&  (!multipleEntries));
+				renameToTextBox.setEnabled(!linkInPlace.isSelected()
+						&&  (!multipleEntries));
+				if (multipleEntries) { renameToTextBox.setText("Multiple entries"); }
+			}
+		};
+
+		if (multipleEntries) {
+			linkInPlace.setText(Globals
+					.lang("Leave files in their current directory."));
+			copyRadioButton.setText(Globals.lang("Copy files to file directory."));
+
+			moveRadioButton.setText(Globals.lang("Move files to file directory."));
+		} else {
+			linkInPlace.setText(Globals
+					.lang("Leave file in its current directory."));
+			copyRadioButton.setText(Globals.lang("Copy file to file directory."));
+			moveRadioButton.setText(Globals.lang("Move file to file directory."));
+		}
+		
+        renameCheckBox.setText(Globals.lang("Rename file to").concat(": "));
+        
+        // Determine which name to suggest:
+        String targetName = Util.getLinkedFileName(database, entry);
+
+        renameToTextBox.setText(targetName.concat(".").concat(fileType.extension));
+
+        linkInPlace.setSelected(frame.prefs().getBoolean(DFH_LEAVE));
+        copyRadioButton.setSelected(frame.prefs().getBoolean(DFH_COPY));
+        moveRadioButton.setSelected(frame.prefs().getBoolean(DFH_MOVE));
+        renameCheckBox.setSelected(frame.prefs().getBoolean(DFH_RENAME));
+
+        linkInPlace.addChangeListener(cl);
+        cl.stateChanged(new ChangeEvent(linkInPlace));
+
+        try {
+        	Object[] messages = {Globals.lang("How would you like to link to '%0'?", linkFileName),
+                    optionsPanel};
+        	int reply = JOptionPane.showConfirmDialog(frame, messages, dialogTitle,
+                JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
+        	if (reply == JOptionPane.OK_OPTION) {
+        		// store user's choice
+        		frame.prefs().putBoolean(DFH_LEAVE, linkInPlace.isSelected());
+        		frame.prefs().putBoolean(DFH_COPY, copyRadioButton.isSelected());
+        		frame.prefs().putBoolean(DFH_MOVE, moveRadioButton.isSelected());
+        		frame.prefs().putBoolean(DFH_RENAME, renameCheckBox.isSelected());
+        		return true;
+        	} else {
+        		return false;
+        	}
+        } finally {
+            linkInPlace.removeChangeListener(cl);
+        }
+    }
+    
+    /**
+     * Make a extension to the file.
+     * 
+     * @param entry
+     *            The entry to extension from.
+     * @param fileType
+     *            The FileType associated with the file.
+     * @param filename
+     *            The path to the file.
+     * @param edits
+     *            An NamedCompound action this action is to be added to. If none
+     *            is given, the edit is added to the panel's undoManager.
+     */
+    private void doLink(BibtexEntry entry, ExternalFileType fileType, String filename,
+        boolean avoidDuplicate, NamedCompound edits) {
+
+
+        String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
+        FileListTableModel tm = new FileListTableModel();
+        if (oldValue != null)
+            tm.setContent(oldValue);
+
+        // If avoidDuplicate==true, we should check if this file is already linked:
+        if (avoidDuplicate) {
+            // For comparison, find the absolute filename:
+            String[] dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            String absFilename = (!(new File(filename).isAbsolute()) && (dirs.length > 0)) ?
+                    Util.expandFilename(filename, dirs).getAbsolutePath() : filename;
+
+            for (int i=0; i<tm.getRowCount(); i++) {
+                FileListEntry flEntry = tm.getEntry(i);
+                // Find the absolute filename for this existing link:
+                String absName = (!(new File(flEntry.getLink()).isAbsolute()) && (dirs.length > 0)) ?
+                        Util.expandFilename(flEntry.getLink(), dirs).getAbsolutePath() : flEntry.getLink();
+                System.out.println("absName: "+absName);
+                // If the filenames are equal, we don't need to link, so we simply return:
+                if (absFilename.equals(absName))
+                    return;
+            }
+        }
+
+        tm.addEntry(tm.getRowCount(), new FileListEntry("", filename, fileType));
+        String newValue = tm.getStringRepresentation();
+        UndoableFieldChange edit = new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD,
+                oldValue, newValue);
+        entry.setField(GUIGlobals.FILE_FIELD, newValue);
+
+        if (edits == null) {
+            panel.undoManager.addEdit(edit);
+        } else {
+            edits.addEdit(edit);
+        }
+    }
+
+    /**
+     * Move the given file to the base directory for its file type, and rename
+     * it to the given filename.
+     * 
+     * @param fileName
+     *            The name of the source file.
+     * @param fileType
+     *            The FileType associated with the file.
+     * @param destFilename
+     *            The destination filename.
+     * @param edits
+     *            TODO we should be able to undo this action
+     * @return true if the operation succeeded.
+     */
+    private boolean doMove(String fileName, ExternalFileType fileType, String destFilename,
+        NamedCompound edits) {
+        String[] dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+        int found = -1;
+        for (int i=0; i<dirs.length; i++)
+            if (new File(dirs[i]).exists()) {
+                found = i;
+                break;
+            }
+        if (found < 0) {
+            // OOps, we don't know which directory to put it in, or the given
+            // dir doesn't exist....
+            // This should not happen!!
+            return false;
+        }
+        File fromFile = new File(fileName);
+        File toFile = new File(dirs[found] + System.getProperty("file.separator") + destFilename);
+        if (toFile.exists()) {
+        	int answer = JOptionPane.showConfirmDialog(frame,
+        			toFile.getAbsolutePath() + " exists. Overwrite?", "Overwrite file?", 
+        			JOptionPane.YES_NO_OPTION);
+        	if (answer == JOptionPane.NO_OPTION) {
+        		return false;
+        	}
+        }
+ 
+        if (!fromFile.renameTo(toFile)) {
+        	JOptionPane.showMessageDialog(frame,
+        			"There was an error moving the file. Please move the file manually and link in place.",
+        			"Error moving file", JOptionPane.ERROR_MESSAGE);
+        	return false;
+        } else {
+        	return true;
+        }
+
+    }
+
+    /**
+     * Copy the given file to the base directory for its file type, and give it
+     * the given name.
+     * 
+     * @param fileName
+     *            The name of the source file.
+     * @param fileType
+     *            The FileType associated with the file.
+     * @param toFile
+     *            The destination filename. An existing path-component will be removed.
+     * @param edits
+     *            TODO we should be able to undo this!
+     * @return
+     */
+    private boolean doCopy(String fileName, ExternalFileType fileType, String toFile,
+        NamedCompound edits) {
+
+        String[] dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+        int found = -1;
+        for (int i=0; i<dirs.length; i++)
+            if (new File(dirs[i]).exists()) {
+                found = i;
+                break;
+            }
+        if (found < 0) {
+            // OOps, we don't know which directory to put it in, or the given
+            // dir doesn't exist....
+            System.out.println("dir: " + dirs[found] + "\t ext: " + fileType.getExtension());
+            return false;
+        }
+        toFile = new File(toFile).getName();
+        
+        File destFile = new File(new StringBuffer(dirs[found]).append(System.getProperty("file.separator"))
+            .append(toFile).toString());
+        if (destFile.equals(new File(fileName))){
+            // File is already in the correct position. Don't override!
+            return true;
+        }
+        
+        if (destFile.exists()) {
+            int answer = JOptionPane.showConfirmDialog(frame, "'" + destFile.getPath() + "' "
+                + Globals.lang("exists. Overwrite?"), Globals.lang("File exists"),
+                JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
+            if (answer == JOptionPane.NO_OPTION)
+                return false;
+        }
+        try {
+            Util.copyFile(new File(fileName), destFile, true);
+        } catch (IOException e) {
+            e.printStackTrace();
+            return false;
+        }
+
+        return true;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/external/ExternalFileMenuItem.java b/src/java/net/sf/jabref/external/ExternalFileMenuItem.java
index e832055..3587ad3 100644
--- a/src/java/net/sf/jabref/external/ExternalFileMenuItem.java
+++ b/src/java/net/sf/jabref/external/ExternalFileMenuItem.java
@@ -1,118 +1,118 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.io.IOException;
-
-import javax.swing.*;
-
-import net.sf.jabref.*;
-
-/**
- * The menu item used in the popup menu for opening external resources associated
- * with an entry. Shows the resource name and icon given, and adds an action listener
- * to process the request if the user clicks this menu item.
- */
-public class ExternalFileMenuItem extends JMenuItem implements ActionListener {
-
-    private BibtexEntry entry;
-    final String link;
-    final MetaData metaData;
-    ExternalFileType fileType;
-    final JabRefFrame frame;
-    private String fieldName = null;
-
-    public ExternalFileMenuItem(JabRefFrame frame, BibtexEntry entry, String name,
-                                String link, Icon icon,
-                                MetaData metaData,
-                                ExternalFileType fileType) {
-        super(name, icon);
-        this.frame = frame;
-        this.entry = entry;
-        this.link = link;
-        this.metaData = metaData;
-        this.fileType = fileType;
-        addActionListener(this);
-    }
-
-    public ExternalFileMenuItem(JabRefFrame frame, BibtexEntry entry, String name,
-                                String link, Icon icon, MetaData metaData, String fieldName) {
-        this(frame, entry, name, link, icon, metaData, (ExternalFileType)null);
-        this.fieldName = fieldName;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        boolean success = openLink();
-        if (!success) {
-            frame.output(Globals.lang("Unable to open link."));
-        }
-    }
-
-    public boolean openLink() {
-        frame.output(Globals.lang("External viewer called") + ".");
-        try {
-            ExternalFileType type = fileType;
-            if (this.fileType == null) {
-                if (this.fieldName != null) {
-                    Util.openExternalViewer(frame.basePanel().metaData(), link, fieldName);
-                    return true;
-                }
-                else {
-                    // We don't already know the file type, so we try to deduce it from the extension:
-                    File file = new File(link);
-                    // We try to check the extension for the file:
-                    String name = file.getName();
-                    int pos = name.indexOf('.');
-                    String extension = ((pos >= 0) && (pos < name.length() - 1)) ? name.substring(pos + 1)
-                        .trim().toLowerCase() : null;
-                    // Now we know the extension, check if it is one we know about:
-                    type = Globals.prefs.getExternalFileTypeByExt(extension);
-                    fileType = type;
-                }
-            }
-
-            if (type instanceof UnknownExternalFileType)
-                return Util.openExternalFileUnknown(frame, entry, metaData, link,
-                        (UnknownExternalFileType)type);
-            else
-                return Util.openExternalFileAnyFormat(metaData, link, type);
-
-
-
-        } catch (IOException e1) {
-            // See if we should show an error message concerning the application to open the
-            // link with. We check if the file type is set, and if the file type has a non-empty
-            // application link. If that link is referred by the error message, we can assume
-            // that the problem is in the open-with-application setting:
-            if ((fileType != null) && (fileType.getOpenWith() != null)
-                && (fileType.getOpenWith().length() > 0) &&
-                    (e1.getMessage().indexOf(fileType.getOpenWith()) >= 0)) {
-
-                JOptionPane.showMessageDialog(frame, Globals.lang("Unable to open link. "
-                    +"The application '%0' associated with the file type '%1' could not be called.",
-                        fileType.getOpenWith(), fileType.getName()),
-                        Globals.lang("Could not open link"), JOptionPane.ERROR_MESSAGE);
-                return false;
-            }
-
-            e1.printStackTrace();
-        }
-        return false;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
+
+import javax.swing.*;
+
+import net.sf.jabref.*;
+
+/**
+ * The menu item used in the popup menu for opening external resources associated
+ * with an entry. Shows the resource name and icon given, and adds an action listener
+ * to process the request if the user clicks this menu item.
+ */
+public class ExternalFileMenuItem extends JMenuItem implements ActionListener {
+
+    private BibtexEntry entry;
+    final String link;
+    final MetaData metaData;
+    ExternalFileType fileType;
+    final JabRefFrame frame;
+    private String fieldName = null;
+
+    public ExternalFileMenuItem(JabRefFrame frame, BibtexEntry entry, String name,
+                                String link, Icon icon,
+                                MetaData metaData,
+                                ExternalFileType fileType) {
+        super(name, icon);
+        this.frame = frame;
+        this.entry = entry;
+        this.link = link;
+        this.metaData = metaData;
+        this.fileType = fileType;
+        addActionListener(this);
+    }
+
+    public ExternalFileMenuItem(JabRefFrame frame, BibtexEntry entry, String name,
+                                String link, Icon icon, MetaData metaData, String fieldName) {
+        this(frame, entry, name, link, icon, metaData, (ExternalFileType)null);
+        this.fieldName = fieldName;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        boolean success = openLink();
+        if (!success) {
+            frame.output(Globals.lang("Unable to open link."));
+        }
+    }
+
+    public boolean openLink() {
+        frame.output(Globals.lang("External viewer called") + ".");
+        try {
+            ExternalFileType type = fileType;
+            if (this.fileType == null) {
+                if (this.fieldName != null) {
+                    Util.openExternalViewer(frame.basePanel().metaData(), link, fieldName);
+                    return true;
+                }
+                else {
+                    // We don't already know the file type, so we try to deduce it from the extension:
+                    File file = new File(link);
+                    // We try to check the extension for the file:
+                    String name = file.getName();
+                    int pos = name.indexOf('.');
+                    String extension = ((pos >= 0) && (pos < name.length() - 1)) ? name.substring(pos + 1)
+                        .trim().toLowerCase() : null;
+                    // Now we know the extension, check if it is one we know about:
+                    type = Globals.prefs.getExternalFileTypeByExt(extension);
+                    fileType = type;
+                }
+            }
+
+            if (type instanceof UnknownExternalFileType)
+                return Util.openExternalFileUnknown(frame, entry, metaData, link,
+                        (UnknownExternalFileType)type);
+            else
+                return Util.openExternalFileAnyFormat(metaData, link, type);
+
+
+
+        } catch (IOException e1) {
+            // See if we should show an error message concerning the application to open the
+            // link with. We check if the file type is set, and if the file type has a non-empty
+            // application link. If that link is referred by the error message, we can assume
+            // that the problem is in the open-with-application setting:
+            if ((fileType != null) && (fileType.getOpenWith() != null)
+                && (fileType.getOpenWith().length() > 0) &&
+                    (e1.getMessage().indexOf(fileType.getOpenWith()) >= 0)) {
+
+                JOptionPane.showMessageDialog(frame, Globals.lang("Unable to open link. "
+                    +"The application '%0' associated with the file type '%1' could not be called.",
+                        fileType.getOpenWith(), fileType.getName()),
+                        Globals.lang("Could not open link"), JOptionPane.ERROR_MESSAGE);
+                return false;
+            }
+
+            e1.printStackTrace();
+        }
+        return false;
+    }
+}
diff --git a/src/java/net/sf/jabref/external/ExternalFilePanel.java b/src/java/net/sf/jabref/external/ExternalFilePanel.java
index 20b591d..ddb8273 100644
--- a/src/java/net/sf/jabref/external/ExternalFilePanel.java
+++ b/src/java/net/sf/jabref/external/ExternalFilePanel.java
@@ -1,477 +1,477 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DropTarget;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.LinkedList;
-
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.SwingUtilities;
-import javax.xml.transform.TransformerException;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.EntryEditor;
-import net.sf.jabref.FieldEditor;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.OpenFileFilter;
-import net.sf.jabref.UrlDragDrop;
-import net.sf.jabref.Util;
-import net.sf.jabref.gui.FileDialogs;
-import net.sf.jabref.net.URLDownload;
-import net.sf.jabref.util.XMPUtil;
-
-/**
- * Initial Version:
- * 
- * @author alver
- * @version Date: May 7, 2005 Time: 7:17:42 PM
- * 
- */
-public class ExternalFilePanel extends JPanel {
-
-	private static final long serialVersionUID = 3653290879640642718L;
-
-	private JButton browseBut, download, auto, xmp;
-
-	private EntryEditor entryEditor;
-
-    private JabRefFrame frame;
-
-	private OpenFileFilter off;
-
-	private BibtexEntry entry;
-	
-	private BibtexDatabase database;
-
-	private MetaData metaData;
-
-	public ExternalFilePanel(final String fieldName, final MetaData metaData,
-		final BibtexEntry entry, final FieldEditor editor, final OpenFileFilter off) {
-		this(null, metaData, null, fieldName, off, editor);
-		this.entry = entry;
-        this.entryEditor = null;
-    }
-
-	public ExternalFilePanel(final JabRefFrame frame, final MetaData metaData,
-		final EntryEditor entryEditor, final String fieldName, final OpenFileFilter off,
-		final FieldEditor editor) {
-
-		this.frame = frame;
-		this.metaData = metaData;
-		this.off = off;
-		this.entryEditor = entryEditor;
-
-        setLayout(new GridLayout(2, 2));
-
-		browseBut = new JButton(Globals.lang("Browse"));
-		download = new JButton(Globals.lang("Download"));
-		auto = new JButton(Globals.lang("Auto"));
-		xmp = new JButton(Globals.lang("Write XMP"));
-		xmp.setToolTipText(Globals.lang("Write BibtexEntry as XMP-metadata to PDF."));
-
-		browseBut.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				browseFile(fieldName, editor);
-				// editor.setText(chosenValue);
-				entryEditor.storeFieldAction.actionPerformed(new ActionEvent(editor, 0, ""));
-			}
-		});
-
-		download.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				downLoadFile(fieldName, editor, frame);
-			}
-		});
-
-		auto.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				autoSetFile(fieldName, editor);
-			}
-		});
-		xmp.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				pushXMP(fieldName, editor);
-			}
-		});
-
-		add(browseBut);
-		add(download);
-		add(auto);
-		add(xmp);
-
-		// Add drag and drop support to the field
-		if (editor != null)
-			((JComponent) editor).setDropTarget(new DropTarget((Component) editor,
-				DnDConstants.ACTION_NONE, new UrlDragDrop(entryEditor, frame, editor)));
-	}
-
-	/**
-	 * Change which entry this panel is operating on. This is used only when
-	 * this panel is not attached to an entry editor.
-	 */
-	public void setEntry(BibtexEntry entry, BibtexDatabase database) {
-		this.entry = entry;
-		this.database = database;
-	}
-	
-	public BibtexDatabase getDatabase(){
-		return (database != null ? database : entryEditor.getDatabase());
-	}
-
-	public BibtexEntry getEntry() {
-		return (entry != null ? entry : entryEditor.getEntry());
-	}
-
-	protected Object getKey() {
-		return getEntry().getField(BibtexFields.KEY_FIELD);
-	}
-
-	protected void output(String s) {
-		if (frame != null)
-			frame.output(s);
-	}
-
-	public void pushXMP(final String fieldName, final FieldEditor editor) {
-
-
-		(new Thread() {
-			public void run() {
-
-				output(Globals.lang("Looking for pdf..."));
-				
-				// Find the default directory for this field type, if any:
-				String[] dirs = metaData.getFileDirectory(fieldName);
-				File file = null;
-				if (dirs.length > 0) {
-					File tmp = Util.expandFilename(editor.getText(), dirs);
-					if (tmp != null)
-						file = tmp;
-				}
-
-				if (file == null) {
-					file = new File(editor.getText());
-				}
-				
-				final File finalFile = file;
-		
-				output(Globals.lang("Writing XMP to '%0'...", finalFile.getName()));
-				try {
-					XMPUtil.writeXMP(finalFile, getEntry(), getDatabase());
-					output(Globals.lang("Wrote XMP to '%0'.", finalFile.getName()));
-				} catch (IOException e) {
-					JOptionPane.showMessageDialog(editor.getParent(), 
-            Globals.lang("Error writing XMP to file: %0", e.getLocalizedMessage()), 
-					  Globals.lang("Writing XMP"), JOptionPane.ERROR_MESSAGE);
-					Globals.logger(Globals.lang("Error writing XMP to file: %0", finalFile
-						.getAbsolutePath()));
-					output(Globals.lang("Error writing XMP to file: %0", finalFile.getName()));
-					
-				} catch (TransformerException e) {
-					JOptionPane.showMessageDialog(editor.getParent(), 
-            Globals.lang("Error converting Bibtex to XMP: %0", e.getLocalizedMessage()), 
-            Globals.lang("Writing XMP"), JOptionPane.ERROR_MESSAGE);
-					  Globals.logger(Globals.lang("Error while converting BibtexEntry to XMP %0",
-						finalFile.getAbsolutePath()));
-					output(Globals.lang("Error converting XMP to '%0'...", finalFile.getName()));
-				}
-			}
-		}).start();
-	}
-
-	public void browseFile(final String fieldName, final FieldEditor editor) {
-
-		String[] dirs = metaData.getFileDirectory(fieldName);
-        String directory = null;
-		if (dirs.length > 0)
-			directory = dirs[0]; // Default to the first directory in the list
-
-		String dir = editor.getText(), retVal = null;
-
-		if ((directory == null) || !(new File(dir)).isAbsolute()) {
-			if (directory != null)
-				dir = directory;
-			else
-				dir = Globals.prefs.get(fieldName + Globals.FILETYPE_PREFS_EXT, "");
-		}
-
-		String chosenFile = FileDialogs.getNewFile(frame, new File(dir), "." + fieldName,
-			JFileChooser.OPEN_DIALOG, false);
-
-		if (chosenFile != null) {
-			File newFile = new File(chosenFile);
-			String position = newFile.getParent();
-
-			if ((directory != null) && position.startsWith(directory)) {
-				// Construct path relative to pdf base dir
-				String relPath = position.substring(directory.length(), position.length())
-					+ File.separator + newFile.getName();
-
-				// Remove leading path separator
-				if (relPath.startsWith(File.separator)) {
-					relPath = relPath.substring(File.separator.length(), relPath.length());
-
-					// Set relative path as field value
-				}
-
-				retVal = relPath;
-			} else
-				retVal = newFile.getPath();
-
-			editor.setText(retVal);
-			Globals.prefs.put(fieldName + Globals.FILETYPE_PREFS_EXT, newFile.getPath());
-		}
-	}
-
-	public void downLoadFile(final String fieldName, final FieldEditor fieldEditor,
-		final Component parent) {
-
-		final String res = JOptionPane.showInputDialog(parent, Globals
-			.lang("Enter URL to download"));
-
-		if (res == null || res.trim().length() == 0)
-			return;
-
-		/*
-		 * If this panel belongs in an entry editor, note which entry is
-		 * currently shown:
-		 */
-		final BibtexEntry targetEntry;
-		if (entryEditor != null)
-			targetEntry = entryEditor.getEntry();
-		else
-			targetEntry = entry;
-
-		(new Thread() {
-
-			public String getPlannedFileName(String res) {
-				String suffix = off.getSuffix(res);
-				if (suffix == null)
-					suffix = "." + fieldName.toLowerCase();
-
-				String plannedName = null;
-				if (getKey() != null)
-					plannedName = getKey() + suffix;
-				else {
-					plannedName = JOptionPane.showInputDialog(parent, Globals
-						.lang("BibTeX key not set. Enter a name for the downloaded file"));
-					if (plannedName != null && !off.accept(plannedName))
-						plannedName += suffix;
-				}
-
-				/*
-				 * [ 1548875 ] download pdf produces unsupported filename
-				 * 
-				 * http://sourceforge.net/tracker/index.php?func=detail&aid=1548875&group_id=92314&atid=600306
-				 * 
-				 */
-				if (Globals.ON_WIN) {
-					plannedName = plannedName.replaceAll(
-						"\\?|\\*|\\<|\\>|\\||\\\"|\\:|\\.$|\\[|\\]", "");
-				} else if (Globals.ON_MAC) {
-					plannedName = plannedName.replaceAll(":", "");
-				}
-
-				return plannedName;
-			}
-
-			public void run() {
-				String originalText = fieldEditor.getText();
-				fieldEditor.setEnabled(false);
-				boolean updateEditor = true;
-
-				try {
-					fieldEditor.setText(Globals.lang("Downloading..."));
-					output(Globals.lang("Downloading..."));
-					String plannedName = getPlannedFileName(res);
-
-					// Find the default directory for this field type:
-					String[] dirs = metaData.getFileDirectory(fieldName);
-                    String directory = null;
-                    // Look for the first one in the list that exists:
-                    for (int i=0; i<dirs.length; i++) {
-                        if (new File(dirs[i]).exists()) {
-                            directory = dirs[i];
-                            break;
-                        }
-                    }
-					if (directory == null) {
-                        if (dirs.length > 0)
-                            JOptionPane.showMessageDialog(parent, Globals.lang("Could not find directory for %0-files: %1", fieldName, dirs[0]),
-                                Globals.lang("Download file"), JOptionPane.ERROR_MESSAGE);
-                        else
-                            JOptionPane.showMessageDialog(parent, Globals.lang("No directory defined for %0-files", fieldName),
-                                Globals.lang("Download file"), JOptionPane.ERROR_MESSAGE);
-						return;
-					}
-					File file = new File(new File(directory), plannedName);
-
-					URL url = new URL(res);
-
-					URLDownload udl = new URLDownload(parent, url, file);
-					try {
-						udl.download();
-					} catch (IOException e2) {
-						JOptionPane.showMessageDialog(parent, Globals.lang("Invalid URL")+": "
-							+ e2.getMessage(), Globals.lang("Download file"),
-							JOptionPane.ERROR_MESSAGE);
-						Globals.logger("Error while downloading " + url.toString());
-						return;
-					}
-					output(Globals.lang("Download completed"));
-
-					String textToSet = file.getPath();
-					if (textToSet.startsWith(directory)) {
-						// Construct path relative to pdf base dir
-						textToSet = textToSet.substring(directory.length(), textToSet.length());
-
-						// Remove leading path separator
-						if (textToSet.startsWith(File.separator)) {
-							textToSet = textToSet.substring(File.separator.length());
-						}
-					}
-
-					/*
-					 * Check if we should update the editor text field, or
-					 * update the target entry directly:
-					 */
-                    if (entryEditor == null || entryEditor.getEntry() != targetEntry) {
-						/*
-						 * Editor has probably changed to show a different
-						 * entry. So we must update the target entry directly
-						 * and not set the text of the editor.
-						 */
-						targetEntry.setField(fieldName, textToSet);
-                        fieldEditor.setText(textToSet);
-                        fieldEditor.setEnabled(true);
-                        updateEditor = false;
-					} else {
-						/*
-						 * Need to set the fieldEditor first before running
-						 * updateField-Action, because otherwise we might get a
-						 * race condition.
-						 * 
-						 * (Hopefully a) Fix for: [ 1545601 ] downloading pdf
-						 * corrupts pdf field text
-						 * 
-						 * http://sourceforge.net/tracker/index.php?func=detail&aid=1545601&group_id=92314&atid=600306
-						 */
-						fieldEditor.setText(textToSet);
-						fieldEditor.setEnabled(true);
-						updateEditor = false;
-						SwingUtilities.invokeLater(new Thread() {
-							public void run() {
-								entryEditor.updateField(fieldEditor);
-							}
-						});
-					}
-
-				} catch (MalformedURLException e1) {
-					JOptionPane.showMessageDialog(parent, Globals.lang("Invalid URL"), Globals
-						.lang("Download file"), JOptionPane.ERROR_MESSAGE);
-				} finally {
-					// If stuff goes wrong along the road, put back original
-					// value
-					if (updateEditor) {
-						fieldEditor.setText(originalText);
-						fieldEditor.setEnabled(true);
-					}
-                }
-			}
-		}).start();
-	}
-
-	/**
-	 * Starts a thread that searches the external file directory for the given
-	 * field name, including subdirectories, and looks for files named after the
-	 * current entry's bibtex key. Returns a reference to the thread for callers
-	 * that may want to wait for the thread to finish (using join()).
-	 * 
-	 * @param fieldName
-	 *            The field to set.
-	 * @param editor
-	 *            An EntryEditor instance where to set the value found.
-	 * @return A reference to the Thread that performs the operation.
-	 */
-	public Thread autoSetFile(final String fieldName, final FieldEditor editor) {
-		Object o = getKey();
-		if ((o == null) || (Globals.prefs.get(fieldName + "Directory") == null)) {
-			output(Globals.lang("You must set both BibTeX key and %0 directory", fieldName
-				.toUpperCase())
-				+ ".");
-			return null;
-		}
-		output(Globals.lang("Searching for %0 file", fieldName.toUpperCase()) + " '" + o + "."
-			+ fieldName + "'...");
-		Thread t = (new Thread() {
-			public void run() {
-				/*
-				 * Find the following directories to look in for:
-				 * 
-				 * default directory for this field type.
-				 * 
-				 * directory of bibtex-file. // NOT POSSIBLE at the moment.
-				 * 
-				 * JabRef-directory.
-				 */
-				LinkedList<String> list = new LinkedList<String>();
-                String[] dirs = metaData.getFileDirectory(fieldName);
-                for (int i = 0; i < dirs.length; i++) {
-                    list.add(dirs[i]);
-                }
-
-				String found = Util.findPdf(getEntry(), fieldName, list
-					.toArray(new String[list.size()]));// , off);
-                                        
-                                
-				// To activate findFile:
-				// String found = Util.findFile(getEntry(), null, dir,
-				// ".*[bibtexkey].*");
-
-				if (found != null) {
-					editor.setText(found);
-					if (entryEditor != null)
-						entryEditor.updateField(editor);
-					output(Globals.lang("%0 field set", fieldName.toUpperCase()) + ".");
-				} else {
-					output(Globals.lang("No %0 found", fieldName.toUpperCase()) + ".");
-				}
-
-			}
-		});
-
-		t.start();
-		return t;
-
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.awt.Component;
+import java.awt.GridLayout;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTarget;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.LinkedList;
+
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.xml.transform.TransformerException;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.EntryEditor;
+import net.sf.jabref.FieldEditor;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.OpenFileFilter;
+import net.sf.jabref.UrlDragDrop;
+import net.sf.jabref.Util;
+import net.sf.jabref.gui.FileDialogs;
+import net.sf.jabref.net.URLDownload;
+import net.sf.jabref.util.XMPUtil;
+
+/**
+ * Initial Version:
+ * 
+ * @author alver
+ * @version Date: May 7, 2005 Time: 7:17:42 PM
+ * 
+ */
+public class ExternalFilePanel extends JPanel {
+
+	private static final long serialVersionUID = 3653290879640642718L;
+
+	private JButton browseBut, download, auto, xmp;
+
+	private EntryEditor entryEditor;
+
+    private JabRefFrame frame;
+
+	private OpenFileFilter off;
+
+	private BibtexEntry entry;
+	
+	private BibtexDatabase database;
+
+	private MetaData metaData;
+
+	public ExternalFilePanel(final String fieldName, final MetaData metaData,
+		final BibtexEntry entry, final FieldEditor editor, final OpenFileFilter off) {
+		this(null, metaData, null, fieldName, off, editor);
+		this.entry = entry;
+        this.entryEditor = null;
+    }
+
+	public ExternalFilePanel(final JabRefFrame frame, final MetaData metaData,
+		final EntryEditor entryEditor, final String fieldName, final OpenFileFilter off,
+		final FieldEditor editor) {
+
+		this.frame = frame;
+		this.metaData = metaData;
+		this.off = off;
+		this.entryEditor = entryEditor;
+
+        setLayout(new GridLayout(2, 2));
+
+		browseBut = new JButton(Globals.lang("Browse"));
+		download = new JButton(Globals.lang("Download"));
+		auto = new JButton(Globals.lang("Auto"));
+		xmp = new JButton(Globals.lang("Write XMP"));
+		xmp.setToolTipText(Globals.lang("Write BibtexEntry as XMP-metadata to PDF."));
+
+		browseBut.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				browseFile(fieldName, editor);
+				// editor.setText(chosenValue);
+				entryEditor.storeFieldAction.actionPerformed(new ActionEvent(editor, 0, ""));
+			}
+		});
+
+		download.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				downLoadFile(fieldName, editor, frame);
+			}
+		});
+
+		auto.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				autoSetFile(fieldName, editor);
+			}
+		});
+		xmp.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				pushXMP(fieldName, editor);
+			}
+		});
+
+		add(browseBut);
+		add(download);
+		add(auto);
+		add(xmp);
+
+		// Add drag and drop support to the field
+		if (editor != null)
+			((JComponent) editor).setDropTarget(new DropTarget((Component) editor,
+				DnDConstants.ACTION_NONE, new UrlDragDrop(entryEditor, frame, editor)));
+	}
+
+	/**
+	 * Change which entry this panel is operating on. This is used only when
+	 * this panel is not attached to an entry editor.
+	 */
+	public void setEntry(BibtexEntry entry, BibtexDatabase database) {
+		this.entry = entry;
+		this.database = database;
+	}
+	
+	public BibtexDatabase getDatabase(){
+		return (database != null ? database : entryEditor.getDatabase());
+	}
+
+	public BibtexEntry getEntry() {
+		return (entry != null ? entry : entryEditor.getEntry());
+	}
+
+	protected Object getKey() {
+		return getEntry().getField(BibtexFields.KEY_FIELD);
+	}
+
+	protected void output(String s) {
+		if (frame != null)
+			frame.output(s);
+	}
+
+	public void pushXMP(final String fieldName, final FieldEditor editor) {
+
+
+		(new Thread() {
+			public void run() {
+
+				output(Globals.lang("Looking for pdf..."));
+				
+				// Find the default directory for this field type, if any:
+				String[] dirs = metaData.getFileDirectory(fieldName);
+				File file = null;
+				if (dirs.length > 0) {
+					File tmp = Util.expandFilename(editor.getText(), dirs);
+					if (tmp != null)
+						file = tmp;
+				}
+
+				if (file == null) {
+					file = new File(editor.getText());
+				}
+				
+				final File finalFile = file;
+		
+				output(Globals.lang("Writing XMP to '%0'...", finalFile.getName()));
+				try {
+					XMPUtil.writeXMP(finalFile, getEntry(), getDatabase());
+					output(Globals.lang("Wrote XMP to '%0'.", finalFile.getName()));
+				} catch (IOException e) {
+					JOptionPane.showMessageDialog(editor.getParent(), 
+            Globals.lang("Error writing XMP to file: %0", e.getLocalizedMessage()), 
+					  Globals.lang("Writing XMP"), JOptionPane.ERROR_MESSAGE);
+					Globals.logger(Globals.lang("Error writing XMP to file: %0", finalFile
+						.getAbsolutePath()));
+					output(Globals.lang("Error writing XMP to file: %0", finalFile.getName()));
+					
+				} catch (TransformerException e) {
+					JOptionPane.showMessageDialog(editor.getParent(), 
+            Globals.lang("Error converting Bibtex to XMP: %0", e.getLocalizedMessage()), 
+            Globals.lang("Writing XMP"), JOptionPane.ERROR_MESSAGE);
+					  Globals.logger(Globals.lang("Error while converting BibtexEntry to XMP %0",
+						finalFile.getAbsolutePath()));
+					output(Globals.lang("Error converting XMP to '%0'...", finalFile.getName()));
+				}
+			}
+		}).start();
+	}
+
+	public void browseFile(final String fieldName, final FieldEditor editor) {
+
+		String[] dirs = metaData.getFileDirectory(fieldName);
+        String directory = null;
+		if (dirs.length > 0)
+			directory = dirs[0]; // Default to the first directory in the list
+
+		String dir = editor.getText(), retVal = null;
+
+		if ((directory == null) || !(new File(dir)).isAbsolute()) {
+			if (directory != null)
+				dir = directory;
+			else
+				dir = Globals.prefs.get(fieldName + Globals.FILETYPE_PREFS_EXT, "");
+		}
+
+		String chosenFile = FileDialogs.getNewFile(frame, new File(dir), "." + fieldName,
+			JFileChooser.OPEN_DIALOG, false);
+
+		if (chosenFile != null) {
+			File newFile = new File(chosenFile);
+			String position = newFile.getParent();
+
+			if ((directory != null) && position.startsWith(directory)) {
+				// Construct path relative to pdf base dir
+				String relPath = position.substring(directory.length(), position.length())
+					+ File.separator + newFile.getName();
+
+				// Remove leading path separator
+				if (relPath.startsWith(File.separator)) {
+					relPath = relPath.substring(File.separator.length(), relPath.length());
+
+					// Set relative path as field value
+				}
+
+				retVal = relPath;
+			} else
+				retVal = newFile.getPath();
+
+			editor.setText(retVal);
+			Globals.prefs.put(fieldName + Globals.FILETYPE_PREFS_EXT, newFile.getPath());
+		}
+	}
+
+	public void downLoadFile(final String fieldName, final FieldEditor fieldEditor,
+		final Component parent) {
+
+		final String res = JOptionPane.showInputDialog(parent, Globals
+			.lang("Enter URL to download"));
+
+		if (res == null || res.trim().length() == 0)
+			return;
+
+		/*
+		 * If this panel belongs in an entry editor, note which entry is
+		 * currently shown:
+		 */
+		final BibtexEntry targetEntry;
+		if (entryEditor != null)
+			targetEntry = entryEditor.getEntry();
+		else
+			targetEntry = entry;
+
+		(new Thread() {
+
+			public String getPlannedFileName(String res) {
+				String suffix = off.getSuffix(res);
+				if (suffix == null)
+					suffix = "." + fieldName.toLowerCase();
+
+				String plannedName = null;
+				if (getKey() != null)
+					plannedName = getKey() + suffix;
+				else {
+					plannedName = JOptionPane.showInputDialog(parent, Globals
+						.lang("BibTeX key not set. Enter a name for the downloaded file"));
+					if (plannedName != null && !off.accept(plannedName))
+						plannedName += suffix;
+				}
+
+				/*
+				 * [ 1548875 ] download pdf produces unsupported filename
+				 * 
+				 * http://sourceforge.net/tracker/index.php?func=detail&aid=1548875&group_id=92314&atid=600306
+				 * 
+				 */
+				if (Globals.ON_WIN) {
+					plannedName = plannedName.replaceAll(
+						"\\?|\\*|\\<|\\>|\\||\\\"|\\:|\\.$|\\[|\\]", "");
+				} else if (Globals.ON_MAC) {
+					plannedName = plannedName.replaceAll(":", "");
+				}
+
+				return plannedName;
+			}
+
+			public void run() {
+				String originalText = fieldEditor.getText();
+				fieldEditor.setEnabled(false);
+				boolean updateEditor = true;
+
+				try {
+					fieldEditor.setText(Globals.lang("Downloading..."));
+					output(Globals.lang("Downloading..."));
+					String plannedName = getPlannedFileName(res);
+
+					// Find the default directory for this field type:
+					String[] dirs = metaData.getFileDirectory(fieldName);
+                    String directory = null;
+                    // Look for the first one in the list that exists:
+                    for (int i=0; i<dirs.length; i++) {
+                        if (new File(dirs[i]).exists()) {
+                            directory = dirs[i];
+                            break;
+                        }
+                    }
+					if (directory == null) {
+                        if (dirs.length > 0)
+                            JOptionPane.showMessageDialog(parent, Globals.lang("Could not find directory for %0-files: %1", fieldName, dirs[0]),
+                                Globals.lang("Download file"), JOptionPane.ERROR_MESSAGE);
+                        else
+                            JOptionPane.showMessageDialog(parent, Globals.lang("No directory defined for %0-files", fieldName),
+                                Globals.lang("Download file"), JOptionPane.ERROR_MESSAGE);
+						return;
+					}
+					File file = new File(new File(directory), plannedName);
+
+					URL url = new URL(res);
+
+					URLDownload udl = new URLDownload(parent, url, file);
+					try {
+						udl.download();
+					} catch (IOException e2) {
+						JOptionPane.showMessageDialog(parent, Globals.lang("Invalid URL")+": "
+							+ e2.getMessage(), Globals.lang("Download file"),
+							JOptionPane.ERROR_MESSAGE);
+						Globals.logger("Error while downloading " + url.toString());
+						return;
+					}
+					output(Globals.lang("Download completed"));
+
+					String textToSet = file.getPath();
+					if (textToSet.startsWith(directory)) {
+						// Construct path relative to pdf base dir
+						textToSet = textToSet.substring(directory.length(), textToSet.length());
+
+						// Remove leading path separator
+						if (textToSet.startsWith(File.separator)) {
+							textToSet = textToSet.substring(File.separator.length());
+						}
+					}
+
+					/*
+					 * Check if we should update the editor text field, or
+					 * update the target entry directly:
+					 */
+                    if (entryEditor == null || entryEditor.getEntry() != targetEntry) {
+						/*
+						 * Editor has probably changed to show a different
+						 * entry. So we must update the target entry directly
+						 * and not set the text of the editor.
+						 */
+						targetEntry.setField(fieldName, textToSet);
+                        fieldEditor.setText(textToSet);
+                        fieldEditor.setEnabled(true);
+                        updateEditor = false;
+					} else {
+						/*
+						 * Need to set the fieldEditor first before running
+						 * updateField-Action, because otherwise we might get a
+						 * race condition.
+						 * 
+						 * (Hopefully a) Fix for: [ 1545601 ] downloading pdf
+						 * corrupts pdf field text
+						 * 
+						 * http://sourceforge.net/tracker/index.php?func=detail&aid=1545601&group_id=92314&atid=600306
+						 */
+						fieldEditor.setText(textToSet);
+						fieldEditor.setEnabled(true);
+						updateEditor = false;
+						SwingUtilities.invokeLater(new Thread() {
+							public void run() {
+								entryEditor.updateField(fieldEditor);
+							}
+						});
+					}
+
+				} catch (MalformedURLException e1) {
+					JOptionPane.showMessageDialog(parent, Globals.lang("Invalid URL"), Globals
+						.lang("Download file"), JOptionPane.ERROR_MESSAGE);
+				} finally {
+					// If stuff goes wrong along the road, put back original
+					// value
+					if (updateEditor) {
+						fieldEditor.setText(originalText);
+						fieldEditor.setEnabled(true);
+					}
+                }
+			}
+		}).start();
+	}
+
+	/**
+	 * Starts a thread that searches the external file directory for the given
+	 * field name, including subdirectories, and looks for files named after the
+	 * current entry's bibtex key. Returns a reference to the thread for callers
+	 * that may want to wait for the thread to finish (using join()).
+	 * 
+	 * @param fieldName
+	 *            The field to set.
+	 * @param editor
+	 *            An EntryEditor instance where to set the value found.
+	 * @return A reference to the Thread that performs the operation.
+	 */
+	public Thread autoSetFile(final String fieldName, final FieldEditor editor) {
+		Object o = getKey();
+		if ((o == null) || (Globals.prefs.get(fieldName + "Directory") == null)) {
+			output(Globals.lang("You must set both BibTeX key and %0 directory", fieldName
+				.toUpperCase())
+				+ ".");
+			return null;
+		}
+		output(Globals.lang("Searching for %0 file", fieldName.toUpperCase()) + " '" + o + "."
+			+ fieldName + "'...");
+		Thread t = (new Thread() {
+			public void run() {
+				/*
+				 * Find the following directories to look in for:
+				 * 
+				 * default directory for this field type.
+				 * 
+				 * directory of bibtex-file. // NOT POSSIBLE at the moment.
+				 * 
+				 * JabRef-directory.
+				 */
+				LinkedList<String> list = new LinkedList<String>();
+                String[] dirs = metaData.getFileDirectory(fieldName);
+                for (int i = 0; i < dirs.length; i++) {
+                    list.add(dirs[i]);
+                }
+
+				String found = Util.findPdf(getEntry(), fieldName, list
+					.toArray(new String[list.size()]));// , off);
+                                        
+                                
+				// To activate findFile:
+				// String found = Util.findFile(getEntry(), null, dir,
+				// ".*[bibtexkey].*");
+
+				if (found != null) {
+					editor.setText(found);
+					if (entryEditor != null)
+						entryEditor.updateField(editor);
+					output(Globals.lang("%0 field set", fieldName.toUpperCase()) + ".");
+				} else {
+					output(Globals.lang("No %0 found", fieldName.toUpperCase()) + ".");
+				}
+
+			}
+		});
+
+		t.start();
+		return t;
+
+	}
+
+}
diff --git a/src/java/net/sf/jabref/external/ExternalFileType.java b/src/java/net/sf/jabref/external/ExternalFileType.java
index f81731e..8d47e42 100644
--- a/src/java/net/sf/jabref/external/ExternalFileType.java
+++ b/src/java/net/sf/jabref/external/ExternalFileType.java
@@ -1,209 +1,209 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import javax.swing.*;
-
-import net.sf.jabref.GUIGlobals;
-
-/**
- * This class defines a type of external files that can be linked to from JabRef.
- * The class contains enough information to provide an icon, a standard extension
- * and a link to which application handles files of this type.
- */
-public class ExternalFileType implements Comparable<ExternalFileType> {
-
-    protected String name, extension, openWith, iconName, mimeType;
-    protected ImageIcon icon;
-    protected JLabel label = new JLabel();
-
-    public ExternalFileType(String name, String extension, String mimeType,
-                            String openWith, String iconName) {
-        label.setText(null);
-        this.name = name;
-        label.setToolTipText(this.name);
-        this.extension = extension;
-        this.mimeType = mimeType;
-        this.openWith = openWith;
-        setIconName(iconName);
-    }
-
-    /**
-     * Construct an ExternalFileType from a String array. This constructor is used when
-     * reading file type definitions from Preferences, where the available data types are
-     * limited. We assume that the array contains the same values as the main constructor,
-     * in the same order.
-     *
-     * TODO: The icon argument needs special treatment. At the moment, we assume that the fourth
-     * element of the array contains the icon keyword to be looked up in the current icon theme.
-     * To support icons found elsewhere on the file system we simply need to prefix the icon name
-     * with a marker. 
-     *
-     * @param val Constructor arguments.
-     */
-    public ExternalFileType(String[] val) {
-        if ((val == null) || (val.length < 4))
-            throw new IllegalArgumentException("Cannot contruct ExternalFileType without four elements in String[] argument.");
-        this.name = val[0];
-        label.setToolTipText(this.name);
-        this.extension = val[1];
-        label.setText(null);
-        // Up to version 2.4b the mime type is not included:
-        if (val.length == 4) {
-            this.openWith = val[2];
-            setIconName(val[3]);
-        }
-        // When mime type is included, the array length should be 5:
-        else if (val.length == 5) {
-            this.mimeType = val[2];
-            this.openWith = val[3];
-            setIconName(val[4]);
-        }
-    }
-
-    /**
-     * Return a String array representing this file type. This is used for storage into
-     * Preferences, and the same array can be used to construct the file type later,
-     * using the String[] constructor.
-     *
-     * @return A String[] containing all information about this file type.
-     */
-    public String[] getStringArrayRepresentation() {
-        return new String[] {name, extension, mimeType, openWith, iconName};
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-        label.setToolTipText(this.name);
-    }
-
-    public String getExtension() {
-        return extension;
-    }
-
-    public void setExtension(String extension) {
-        this.extension = extension;
-    }
-
-    public String getMimeType() {
-        return mimeType;
-    }
-
-    public void setMimeType(String mimeType) {
-        this.mimeType = mimeType;
-    }
-
-    /**
-     * Get the bibtex field name used to extension to this file type.
-     * Currently we assume that field name equals filename extension.
-     * @return The field name.
-     */
-    public String getFieldName() {
-        return extension;
-    }
-
-    public String getOpenWith() {
-        return openWith;
-    }
-
-    public void setOpenWith(String openWith) {
-        this.openWith = openWith;
-    }
-
-    /**
-     * Set the string associated with this file type's icon. The string is used
-     * to get the actual icon by the method GUIGlobals.getIcon(String)
-     * @param name The icon name to use.
-     */
-    public void setIconName(String name) {
-        this.iconName = name;
-        try {
-            this.icon = GUIGlobals.getImage(iconName);
-        } catch (NullPointerException ex) {
-            // Loading the icon failed. This could be because the icons have not been
-            // initialized, which will be the case if we are operating from the command
-            // line and the graphical interface hasn't been initialized. In that case
-            // we will do without the icon:
-            this.icon = null;
-        }
-        label.setIcon(this.icon);
-    }
-
-    /**
-     * Obtain a JLabel instance set with this file type's icon. The same JLabel
-     * is returned from each call of this method.
-     * @return the label.
-     */
-    public JLabel getIconLabel() {
-        return label;
-    }
-
-    /**
-     * Get the string associated with this file type's icon. The string is used
-     * to get the actual icon by the method GUIGlobals.getIcon(String)
-     * @return The icon name.
-     */
-    public String getIconName() {
-        return iconName;
-    }
-
-    public ImageIcon getIcon() {
-        return icon;
-    }
-
-    public void setIcon(ImageIcon icon) {
-        this.icon = icon;
-    }
-
-    public String toString() {
-        return getName();
-    }
-
-    public int compareTo(ExternalFileType o) {
-        return getName().compareTo(o.getName());
-    }
-
-    public ExternalFileType copy() {
-        return new ExternalFileType(name, extension, mimeType, openWith, iconName);
-    }
-
-
-    public int hashCode() {
-        return name.hashCode();
-    }
-
-    /**
-     * We define two file type objects as equal if their name, extension, openWith and
-     * iconName are equal.
-     *
-     * @param object The file type to compare with.
-     * @return true if the file types are equal.
-     */
-    public boolean equals(Object object) {
-        ExternalFileType other = (ExternalFileType)object;
-        if (other == null)
-            return false;
-        return (name == null ? other.name == null : name.equals(other.name))
-                && (extension == null ? other.extension == null : extension.equals(other.extension))
-                && (mimeType == null ? other.mimeType == null : mimeType.equals(other.mimeType))
-                && (openWith== null ? other.openWith == null : openWith.equals(other.openWith))
-                && (iconName== null ? other.iconName == null : iconName.equals(other.iconName));
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import javax.swing.*;
+
+import net.sf.jabref.GUIGlobals;
+
+/**
+ * This class defines a type of external files that can be linked to from JabRef.
+ * The class contains enough information to provide an icon, a standard extension
+ * and a link to which application handles files of this type.
+ */
+public class ExternalFileType implements Comparable<ExternalFileType> {
+
+    protected String name, extension, openWith, iconName, mimeType;
+    protected ImageIcon icon;
+    protected JLabel label = new JLabel();
+
+    public ExternalFileType(String name, String extension, String mimeType,
+                            String openWith, String iconName) {
+        label.setText(null);
+        this.name = name;
+        label.setToolTipText(this.name);
+        this.extension = extension;
+        this.mimeType = mimeType;
+        this.openWith = openWith;
+        setIconName(iconName);
+    }
+
+    /**
+     * Construct an ExternalFileType from a String array. This constructor is used when
+     * reading file type definitions from Preferences, where the available data types are
+     * limited. We assume that the array contains the same values as the main constructor,
+     * in the same order.
+     *
+     * TODO: The icon argument needs special treatment. At the moment, we assume that the fourth
+     * element of the array contains the icon keyword to be looked up in the current icon theme.
+     * To support icons found elsewhere on the file system we simply need to prefix the icon name
+     * with a marker. 
+     *
+     * @param val Constructor arguments.
+     */
+    public ExternalFileType(String[] val) {
+        if ((val == null) || (val.length < 4))
+            throw new IllegalArgumentException("Cannot contruct ExternalFileType without four elements in String[] argument.");
+        this.name = val[0];
+        label.setToolTipText(this.name);
+        this.extension = val[1];
+        label.setText(null);
+        // Up to version 2.4b the mime type is not included:
+        if (val.length == 4) {
+            this.openWith = val[2];
+            setIconName(val[3]);
+        }
+        // When mime type is included, the array length should be 5:
+        else if (val.length == 5) {
+            this.mimeType = val[2];
+            this.openWith = val[3];
+            setIconName(val[4]);
+        }
+    }
+
+    /**
+     * Return a String array representing this file type. This is used for storage into
+     * Preferences, and the same array can be used to construct the file type later,
+     * using the String[] constructor.
+     *
+     * @return A String[] containing all information about this file type.
+     */
+    public String[] getStringArrayRepresentation() {
+        return new String[] {name, extension, mimeType, openWith, iconName};
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+        label.setToolTipText(this.name);
+    }
+
+    public String getExtension() {
+        return extension;
+    }
+
+    public void setExtension(String extension) {
+        this.extension = extension;
+    }
+
+    public String getMimeType() {
+        return mimeType;
+    }
+
+    public void setMimeType(String mimeType) {
+        this.mimeType = mimeType;
+    }
+
+    /**
+     * Get the bibtex field name used to extension to this file type.
+     * Currently we assume that field name equals filename extension.
+     * @return The field name.
+     */
+    public String getFieldName() {
+        return extension;
+    }
+
+    public String getOpenWith() {
+        return openWith;
+    }
+
+    public void setOpenWith(String openWith) {
+        this.openWith = openWith;
+    }
+
+    /**
+     * Set the string associated with this file type's icon. The string is used
+     * to get the actual icon by the method GUIGlobals.getIcon(String)
+     * @param name The icon name to use.
+     */
+    public void setIconName(String name) {
+        this.iconName = name;
+        try {
+            this.icon = GUIGlobals.getImage(iconName);
+        } catch (NullPointerException ex) {
+            // Loading the icon failed. This could be because the icons have not been
+            // initialized, which will be the case if we are operating from the command
+            // line and the graphical interface hasn't been initialized. In that case
+            // we will do without the icon:
+            this.icon = null;
+        }
+        label.setIcon(this.icon);
+    }
+
+    /**
+     * Obtain a JLabel instance set with this file type's icon. The same JLabel
+     * is returned from each call of this method.
+     * @return the label.
+     */
+    public JLabel getIconLabel() {
+        return label;
+    }
+
+    /**
+     * Get the string associated with this file type's icon. The string is used
+     * to get the actual icon by the method GUIGlobals.getIcon(String)
+     * @return The icon name.
+     */
+    public String getIconName() {
+        return iconName;
+    }
+
+    public ImageIcon getIcon() {
+        return icon;
+    }
+
+    public void setIcon(ImageIcon icon) {
+        this.icon = icon;
+    }
+
+    public String toString() {
+        return getName();
+    }
+
+    public int compareTo(ExternalFileType o) {
+        return getName().compareTo(o.getName());
+    }
+
+    public ExternalFileType copy() {
+        return new ExternalFileType(name, extension, mimeType, openWith, iconName);
+    }
+
+
+    public int hashCode() {
+        return name.hashCode();
+    }
+
+    /**
+     * We define two file type objects as equal if their name, extension, openWith and
+     * iconName are equal.
+     *
+     * @param object The file type to compare with.
+     * @return true if the file types are equal.
+     */
+    public boolean equals(Object object) {
+        ExternalFileType other = (ExternalFileType)object;
+        if (other == null)
+            return false;
+        return (name == null ? other.name == null : name.equals(other.name))
+                && (extension == null ? other.extension == null : extension.equals(other.extension))
+                && (mimeType == null ? other.mimeType == null : mimeType.equals(other.mimeType))
+                && (openWith== null ? other.openWith == null : openWith.equals(other.openWith))
+                && (iconName== null ? other.iconName == null : iconName.equals(other.iconName));
+    }
+}
diff --git a/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java b/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java
index f5543ca..747cc70 100644
--- a/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java
+++ b/src/java/net/sf/jabref/external/ExternalFileTypeEditor.java
@@ -1,369 +1,369 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.ArrayList;
-import java.util.Collections;
-
-import javax.swing.*;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableCellRenderer;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MnemonicAwareAction;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.ButtonStackBuilder;
-
-/**
- * Editor for external file types.
- */
-public class ExternalFileTypeEditor extends JDialog {
-
-    private JFrame frame = null;
-    private JDialog dialog = null;
-    private ArrayList<ExternalFileType> fileTypes;
-    private JTable table;
-    private ExternalFileTypeEntryEditor entryEditor = null;
-    private FileTypeTableModel tableModel;
-    private JButton ok = new JButton(Globals.lang("Ok")),
-        cancel = new JButton(Globals.lang("Cancel"));
-    private JButton add = new JButton(GUIGlobals.getImage("add")),
-        remove = new JButton(GUIGlobals.getImage("remove")),
-        edit = new JButton(GUIGlobals.getImage("edit")),
-        toDefaults = new JButton(Globals.lang("Default"));
-    private EditListener editListener = new EditListener();
-
-    public ExternalFileTypeEditor(JFrame frame) {
-        super(frame, Globals.lang("Manage external file types"), true);
-        this.frame = frame;
-        init();
-    }
-
-    public ExternalFileTypeEditor(JDialog dialog) {
-        super(dialog, Globals.lang("Manage external file types"), true);
-        this.dialog = dialog;
-        init();
-    }
-
-    /**
-     * Update the editor to show the current settings in Preferences.
-     */
-    public void setValues() {
-        fileTypes.clear();
-        ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
-        for (int i = 0; i < types.length; i++) {
-
-            fileTypes.add(types[i].copy());
-        }
-        Collections.sort(fileTypes);
-    }
-
-    /**
-     * Store the list of external entry types to Preferences.
-     */
-    public void storeSettings() {
-        Globals.prefs.setExternalFileTypes(fileTypes);
-    }
-
-    private void init() {
-
-        ok.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                storeSettings();
-                dispose();
-            }
-        });
-        AbstractAction cancelAction = new AbstractAction() {
-            public void actionPerformed(ActionEvent e) {
-                dispose();
-            }
-        };
-        cancel.addActionListener(cancelAction);
-        // The toDefaults resets the entire list to its default values.
-        toDefaults.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                /*int reply = JOptionPane.showConfirmDialog(ExternalFileTypeEditor.this,
-                        Globals.lang("All custom file types will be lost. Proceed?"),
-                        Globals.lang("Reset file type definitons"), JOptionPane.YES_NO_OPTION,
-                        JOptionPane.QUESTION_MESSAGE);*/
-                //if (reply == JOptionPane.YES_OPTION) {
-                    java.util.List<ExternalFileType> list = Globals.prefs.getDefaultExternalFileTypes();
-                    fileTypes.clear();
-                    fileTypes.addAll(list);
-                    Collections.sort(fileTypes);
-                    //Globals.prefs.resetExternalFileTypesToDefault();
-                    //setValues();
-                    tableModel.fireTableDataChanged();
-                //}
-            }
-        });
-
-
-        add.addActionListener(new AddListener());
-        remove.addActionListener(new RemoveListener());
-        edit.addActionListener(editListener);
-        fileTypes = new ArrayList<ExternalFileType>();
-        setValues();
-        
-
-        tableModel = new FileTypeTableModel();
-        table = new JTable(tableModel);
-        table.setDefaultRenderer(ImageIcon.class, new IconRenderer());
-        table.addMouseListener(new TableClickListener());
-
-        table.getColumnModel().getColumn(0).setMaxWidth(24);
-        table.getColumnModel().getColumn(0).setMinWidth(24);
-        table.getColumnModel().getColumn(1).setMinWidth(170);
-        table.getColumnModel().getColumn(2).setMinWidth(60);
-        table.getColumnModel().getColumn(3).setMinWidth(100);
-        table.getColumnModel().getColumn(0).setResizable(false);
-        
-        JScrollPane sp = new JScrollPane(table);
-
-        JPanel upper = new JPanel();
-        upper.setLayout(new BorderLayout());
-        upper.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        upper.add(sp, BorderLayout.CENTER);
-        getContentPane().add(upper, BorderLayout.CENTER);
-
-        ButtonStackBuilder bs = new ButtonStackBuilder();
-        bs.addButton(add);
-        bs.addButton(remove);
-        bs.addButton(edit);
-        bs.addRelatedGap();
-        bs.addButton(toDefaults);
-        upper.add(bs.getPanel(), BorderLayout.EAST);
-
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-        pack();
-
-        // Key bindings:
-        ActionMap am = upper.getActionMap();
-        InputMap im = upper.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", cancelAction);
-        am = bb.getPanel().getActionMap();
-        im = bb.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", cancelAction);
-
-        if (frame != null)
-            setLocationRelativeTo(frame);
-        else
-            setLocationRelativeTo(dialog);
-    }
-
-    private ExternalFileTypeEntryEditor getEditor(ExternalFileType type) {
-        if (entryEditor == null)
-            entryEditor = new ExternalFileTypeEntryEditor(ExternalFileTypeEditor.this,  type);
-        else
-            entryEditor.setEntry(type);
-        return entryEditor;
-    }
-
-    /**
-     * Get an AbstractAction for opening the external file types editor.
-     * @param frame The JFrame used as parent window for the dialog.
-     * @return An Action for opening the editor.
-     */
-    public static AbstractAction getAction(JabRefFrame frame) {
-        return new EditExternalFileTypesAction(frame);
-    }
-
-    /**
-     * Get an AbstractAction for opening the external file types editor.
-     * @param dialog The JDialog used as parent window for the dialog.
-     * @return An Action for opening the editor.
-     */
-    public static AbstractAction getAction(JDialog dialog) {
-        return new EditExternalFileTypesAction(dialog);
-    }
-
-    class AddListener implements ActionListener {
-        public void actionPerformed(ActionEvent e) {
-            // Generate a new file type:
-            ExternalFileType type = new ExternalFileType("", "", "", "", "new");
-            // Show the file type editor:
-            getEditor(type).setVisible(true);
-            if (entryEditor.okPressed()) {
-                // Ok was pressed. Add the new file type and update the table:
-                fileTypes.add(type);
-                tableModel.fireTableDataChanged();
-            }
-        }
-    }
-
-    class RemoveListener implements ActionListener {
-
-        public void actionPerformed(ActionEvent e) {
-            int[] rows = table.getSelectedRows();
-            if (rows.length == 0)
-                return;
-            for (int i=rows.length-1; i>=0; i--) {
-                fileTypes.remove(rows[i]);
-            }
-            tableModel.fireTableDataChanged();
-            if (fileTypes.size() > 0) {
-                int row = Math.min(rows[0], fileTypes.size()-1);
-                table.setRowSelectionInterval(row, row);
-            }
-        }
-    }
-
-    class EditListener implements ActionListener {
-
-        public void actionPerformed(ActionEvent e) {
-            int[] rows = table.getSelectedRows();
-            if (rows.length != 1)
-                return;
-            getEditor(fileTypes.get(rows[0])).setVisible(true);
-            if (entryEditor.okPressed())
-                tableModel.fireTableDataChanged();
-        }
-    }
-
-    class IconRenderer implements TableCellRenderer {
-        JLabel lab = new JLabel();
-
-        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
-            lab.setText(null);
-            lab.setIcon((ImageIcon)value);
-            return lab;
-        }
-    }
-
-    class FileTypeTableModel extends AbstractTableModel {
-
-        public int getColumnCount() {
-            return 5;
-        }
-
-        public int getRowCount() {
-            return fileTypes.size();
-        }
-
-        public String getColumnName(int column) {
-            switch (column) {
-                case 0:
-                    return " ";
-                case 1:
-                    return Globals.lang("Name");
-                case 2:
-                    return Globals.lang("Extension");
-                case 3:
-                    return Globals.lang("MIME type");
-                case 4:
-                    return Globals.lang("Application");
-                default:
-                    return null;
-            }
-        }
-
-        public Class<?> getColumnClass(int columnIndex) {
-            if (columnIndex == 0)
-                return ImageIcon.class;
-            else return String.class;
-        }
-
-        public Object getValueAt(int rowIndex, int columnIndex) {
-            ExternalFileType type = fileTypes.get(rowIndex);
-            switch (columnIndex) {
-                case 0:
-                    return type.getIcon();
-                case 1:
-                    return type.getName();
-                case 2:
-                    return type.getExtension();
-                case 3:
-                    return type.getMimeType();
-                case 4:
-                    return type.getOpenWith();
-                default:
-                    return null;
-            }
-        }
-    }
-
-    class TableClickListener extends MouseAdapter {
-
-        private void handleClick(MouseEvent e) {
-            if (e.getClickCount() == 2) {
-                editListener.actionPerformed(null);
-            }
-        }
-
-        public void mouseClicked(MouseEvent e) {
-            handleClick(e);
-        }
-
-        public void mousePressed(MouseEvent e) {
-            handleClick(e);
-        }
-
-        public void mouseReleased(MouseEvent e) {
-            handleClick(e);
-        }
-    }
-
-    public static class EditExternalFileTypesAction extends MnemonicAwareAction {
-        private JabRefFrame frame = null;
-        private JDialog dialog = null;
-        ExternalFileTypeEditor editor = null;
-
-        public EditExternalFileTypesAction(JabRefFrame frame) {
-            super();
-            putValue(NAME, "Manage external file types");
-            this.frame = frame;
-        }
-
-        public EditExternalFileTypesAction(JDialog dialog) {
-            super();
-            putValue(NAME, "Manage external file types");
-            this.dialog = dialog;
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            if (editor == null) {
-                if (frame != null)
-                    editor = new ExternalFileTypeEditor(frame);
-                else
-                    editor = new ExternalFileTypeEditor(dialog);
-            }
-            editor.setValues();
-            editor.setVisible(true);
-            if (frame != null) {
-                if (frame.basePanel() != null)
-                    frame.basePanel().mainTable.repaint();
-            }
-        }
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+import java.util.Collections;
+
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableCellRenderer;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.MnemonicAwareAction;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.ButtonStackBuilder;
+
+/**
+ * Editor for external file types.
+ */
+public class ExternalFileTypeEditor extends JDialog {
+
+    private JFrame frame = null;
+    private JDialog dialog = null;
+    private ArrayList<ExternalFileType> fileTypes;
+    private JTable table;
+    private ExternalFileTypeEntryEditor entryEditor = null;
+    private FileTypeTableModel tableModel;
+    private JButton ok = new JButton(Globals.lang("Ok")),
+        cancel = new JButton(Globals.lang("Cancel"));
+    private JButton add = new JButton(GUIGlobals.getImage("add")),
+        remove = new JButton(GUIGlobals.getImage("remove")),
+        edit = new JButton(GUIGlobals.getImage("edit")),
+        toDefaults = new JButton(Globals.lang("Default"));
+    private EditListener editListener = new EditListener();
+
+    public ExternalFileTypeEditor(JFrame frame) {
+        super(frame, Globals.lang("Manage external file types"), true);
+        this.frame = frame;
+        init();
+    }
+
+    public ExternalFileTypeEditor(JDialog dialog) {
+        super(dialog, Globals.lang("Manage external file types"), true);
+        this.dialog = dialog;
+        init();
+    }
+
+    /**
+     * Update the editor to show the current settings in Preferences.
+     */
+    public void setValues() {
+        fileTypes.clear();
+        ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
+        for (int i = 0; i < types.length; i++) {
+
+            fileTypes.add(types[i].copy());
+        }
+        Collections.sort(fileTypes);
+    }
+
+    /**
+     * Store the list of external entry types to Preferences.
+     */
+    public void storeSettings() {
+        Globals.prefs.setExternalFileTypes(fileTypes);
+    }
+
+    private void init() {
+
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                storeSettings();
+                dispose();
+            }
+        });
+        AbstractAction cancelAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                dispose();
+            }
+        };
+        cancel.addActionListener(cancelAction);
+        // The toDefaults resets the entire list to its default values.
+        toDefaults.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                /*int reply = JOptionPane.showConfirmDialog(ExternalFileTypeEditor.this,
+                        Globals.lang("All custom file types will be lost. Proceed?"),
+                        Globals.lang("Reset file type definitons"), JOptionPane.YES_NO_OPTION,
+                        JOptionPane.QUESTION_MESSAGE);*/
+                //if (reply == JOptionPane.YES_OPTION) {
+                    java.util.List<ExternalFileType> list = Globals.prefs.getDefaultExternalFileTypes();
+                    fileTypes.clear();
+                    fileTypes.addAll(list);
+                    Collections.sort(fileTypes);
+                    //Globals.prefs.resetExternalFileTypesToDefault();
+                    //setValues();
+                    tableModel.fireTableDataChanged();
+                //}
+            }
+        });
+
+
+        add.addActionListener(new AddListener());
+        remove.addActionListener(new RemoveListener());
+        edit.addActionListener(editListener);
+        fileTypes = new ArrayList<ExternalFileType>();
+        setValues();
+        
+
+        tableModel = new FileTypeTableModel();
+        table = new JTable(tableModel);
+        table.setDefaultRenderer(ImageIcon.class, new IconRenderer());
+        table.addMouseListener(new TableClickListener());
+
+        table.getColumnModel().getColumn(0).setMaxWidth(24);
+        table.getColumnModel().getColumn(0).setMinWidth(24);
+        table.getColumnModel().getColumn(1).setMinWidth(170);
+        table.getColumnModel().getColumn(2).setMinWidth(60);
+        table.getColumnModel().getColumn(3).setMinWidth(100);
+        table.getColumnModel().getColumn(0).setResizable(false);
+        
+        JScrollPane sp = new JScrollPane(table);
+
+        JPanel upper = new JPanel();
+        upper.setLayout(new BorderLayout());
+        upper.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        upper.add(sp, BorderLayout.CENTER);
+        getContentPane().add(upper, BorderLayout.CENTER);
+
+        ButtonStackBuilder bs = new ButtonStackBuilder();
+        bs.addButton(add);
+        bs.addButton(remove);
+        bs.addButton(edit);
+        bs.addRelatedGap();
+        bs.addButton(toDefaults);
+        upper.add(bs.getPanel(), BorderLayout.EAST);
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        pack();
+
+        // Key bindings:
+        ActionMap am = upper.getActionMap();
+        InputMap im = upper.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", cancelAction);
+        am = bb.getPanel().getActionMap();
+        im = bb.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", cancelAction);
+
+        if (frame != null)
+            setLocationRelativeTo(frame);
+        else
+            setLocationRelativeTo(dialog);
+    }
+
+    private ExternalFileTypeEntryEditor getEditor(ExternalFileType type) {
+        if (entryEditor == null)
+            entryEditor = new ExternalFileTypeEntryEditor(ExternalFileTypeEditor.this,  type);
+        else
+            entryEditor.setEntry(type);
+        return entryEditor;
+    }
+
+    /**
+     * Get an AbstractAction for opening the external file types editor.
+     * @param frame The JFrame used as parent window for the dialog.
+     * @return An Action for opening the editor.
+     */
+    public static AbstractAction getAction(JabRefFrame frame) {
+        return new EditExternalFileTypesAction(frame);
+    }
+
+    /**
+     * Get an AbstractAction for opening the external file types editor.
+     * @param dialog The JDialog used as parent window for the dialog.
+     * @return An Action for opening the editor.
+     */
+    public static AbstractAction getAction(JDialog dialog) {
+        return new EditExternalFileTypesAction(dialog);
+    }
+
+    class AddListener implements ActionListener {
+        public void actionPerformed(ActionEvent e) {
+            // Generate a new file type:
+            ExternalFileType type = new ExternalFileType("", "", "", "", "new");
+            // Show the file type editor:
+            getEditor(type).setVisible(true);
+            if (entryEditor.okPressed()) {
+                // Ok was pressed. Add the new file type and update the table:
+                fileTypes.add(type);
+                tableModel.fireTableDataChanged();
+            }
+        }
+    }
+
+    class RemoveListener implements ActionListener {
+
+        public void actionPerformed(ActionEvent e) {
+            int[] rows = table.getSelectedRows();
+            if (rows.length == 0)
+                return;
+            for (int i=rows.length-1; i>=0; i--) {
+                fileTypes.remove(rows[i]);
+            }
+            tableModel.fireTableDataChanged();
+            if (fileTypes.size() > 0) {
+                int row = Math.min(rows[0], fileTypes.size()-1);
+                table.setRowSelectionInterval(row, row);
+            }
+        }
+    }
+
+    class EditListener implements ActionListener {
+
+        public void actionPerformed(ActionEvent e) {
+            int[] rows = table.getSelectedRows();
+            if (rows.length != 1)
+                return;
+            getEditor(fileTypes.get(rows[0])).setVisible(true);
+            if (entryEditor.okPressed())
+                tableModel.fireTableDataChanged();
+        }
+    }
+
+    class IconRenderer implements TableCellRenderer {
+        JLabel lab = new JLabel();
+
+        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+            lab.setText(null);
+            lab.setIcon((ImageIcon)value);
+            return lab;
+        }
+    }
+
+    class FileTypeTableModel extends AbstractTableModel {
+
+        public int getColumnCount() {
+            return 5;
+        }
+
+        public int getRowCount() {
+            return fileTypes.size();
+        }
+
+        public String getColumnName(int column) {
+            switch (column) {
+                case 0:
+                    return " ";
+                case 1:
+                    return Globals.lang("Name");
+                case 2:
+                    return Globals.lang("Extension");
+                case 3:
+                    return Globals.lang("MIME type");
+                case 4:
+                    return Globals.lang("Application");
+                default:
+                    return null;
+            }
+        }
+
+        public Class<?> getColumnClass(int columnIndex) {
+            if (columnIndex == 0)
+                return ImageIcon.class;
+            else return String.class;
+        }
+
+        public Object getValueAt(int rowIndex, int columnIndex) {
+            ExternalFileType type = fileTypes.get(rowIndex);
+            switch (columnIndex) {
+                case 0:
+                    return type.getIcon();
+                case 1:
+                    return type.getName();
+                case 2:
+                    return type.getExtension();
+                case 3:
+                    return type.getMimeType();
+                case 4:
+                    return type.getOpenWith();
+                default:
+                    return null;
+            }
+        }
+    }
+
+    class TableClickListener extends MouseAdapter {
+
+        private void handleClick(MouseEvent e) {
+            if (e.getClickCount() == 2) {
+                editListener.actionPerformed(null);
+            }
+        }
+
+        public void mouseClicked(MouseEvent e) {
+            handleClick(e);
+        }
+
+        public void mousePressed(MouseEvent e) {
+            handleClick(e);
+        }
+
+        public void mouseReleased(MouseEvent e) {
+            handleClick(e);
+        }
+    }
+
+    public static class EditExternalFileTypesAction extends MnemonicAwareAction {
+        private JabRefFrame frame = null;
+        private JDialog dialog = null;
+        ExternalFileTypeEditor editor = null;
+
+        public EditExternalFileTypesAction(JabRefFrame frame) {
+            super();
+            putValue(NAME, "Manage external file types");
+            this.frame = frame;
+        }
+
+        public EditExternalFileTypesAction(JDialog dialog) {
+            super();
+            putValue(NAME, "Manage external file types");
+            this.dialog = dialog;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            if (editor == null) {
+                if (frame != null)
+                    editor = new ExternalFileTypeEditor(frame);
+                else
+                    editor = new ExternalFileTypeEditor(dialog);
+            }
+            editor.setValues();
+            editor.setVisible(true);
+            if (frame != null) {
+                if (frame.basePanel() != null)
+                    frame.basePanel().mainTable.repaint();
+            }
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java b/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java
index 519e154..f46df55 100644
--- a/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java
+++ b/src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java
@@ -1,267 +1,267 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-
-import javax.swing.*;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.gui.FileDialogs;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * This class produces a dialog box for editing an external file type.
- */
-public class ExternalFileTypeEntryEditor {
-
-    JFrame fParent = null;
-    JDialog dParent = null;
-    JDialog diag;
-    JTextField extension = new JTextField(),
-        name = new JTextField(),
-        mimeType = new JTextField(),
-        application = new JTextField();
-    String selectedIcon = null;
-    JButton icon = new JButton(GUIGlobals.getImage("picture"));
-    JButton ok = new JButton(Globals.lang("Ok")),
-            cancel = new JButton(Globals.lang("Cancel"));
-    JRadioButton useDefault = new JRadioButton(Globals.lang("Default")),
-        other = new JRadioButton("");
-    final String emptyMessage = "<"+Globals.lang("Use default viewer")+">";
-    boolean applicationFieldEmpty = false;
-
-    private ExternalFileType entry;
-    private boolean okPressed = false;
-
-    public ExternalFileTypeEntryEditor(JFrame parent, ExternalFileType entry) {
-        fParent = parent;
-        init(entry);
-    }
-
-    public ExternalFileTypeEntryEditor(JDialog parent, ExternalFileType entry) {
-        dParent = parent;
-        init(entry);
-    }
-
-    private void init(ExternalFileType entry) {
-        this.entry = entry;
-        icon.setText(null);
-
-        ButtonGroup bg = new ButtonGroup();
-        bg.add(useDefault);
-        bg.add(other);
-
-        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout
-                ("left:pref, 4dlu, fill:150dlu, 4dlu, fill:pref", ""));
-        builder.append(Globals.lang("Icon"));
-        builder.append(icon);
-        builder.nextLine();
-        builder.append(Globals.lang("Name"));
-        builder.append(name);
-        builder.nextLine();
-        builder.append(Globals.lang("Extension"));
-        builder.append(extension);
-        builder.nextLine();
-        builder.append(Globals.lang("MIME type"));
-        builder.append(mimeType);
-        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        builder.nextLine();
-        builder.append(Globals.lang("Application"));
-        JButton browseBut = new JButton(Globals.lang("Browse"));
-        if (Globals.ON_WIN) {
-            builder.append(useDefault);
-            builder.nextLine();
-            JPanel p1 = new JPanel();
-            builder.append(p1);
-            JPanel p2 = new JPanel();
-            application.setPreferredSize(new Dimension(300, application.getPreferredSize().height));
-            BorderLayout bl = new BorderLayout();
-            bl.setHgap(4);
-            p2.setLayout(bl);
-            p2.add(other, BorderLayout.WEST);
-            p2.add(application, BorderLayout.CENTER);
-            builder.append(p2);
-            builder.append(browseBut);
-        } else {
-            builder.append(application);
-            builder.append(browseBut);
-        }
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-
-        ok.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                okPressed = true;
-                storeSettings(ExternalFileTypeEntryEditor.this.entry);
-                diag.dispose();
-                                
-            }
-        });
-        cancel.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                diag.dispose();
-            }
-        });
-
-        icon.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                String initSel = ExternalFileTypeEntryEditor.this.entry.getIconName();
-                if (selectedIcon != null)
-                    initSel = selectedIcon;
-                IconSelection ic = new IconSelection(diag, initSel);
-                ic.setVisible(true);
-                if (ic.isOkPressed()) {
-                    selectedIcon = ic.getSelectedIconKey();
-                    icon.setIcon(GUIGlobals.getImage(selectedIcon));
-                }
-                //JOptionPane.showMessageDialog(null, "Sorry, the icon can unfortunately not be changed in this version of JabRef");
-            }
-        });
-
-        if (Globals.ON_WIN) {
-            application.getDocument().addDocumentListener(new DocumentListener() {
-                private void handle(DocumentEvent e) {
-                    if (application.getText().length() == 0) {
-                        useDefault.setSelected(true);
-                    } else {
-                        other.setSelected(true);
-                    }
-                }
-                public void insertUpdate(DocumentEvent e) {
-                    handle(e);
-                }
-
-                public void removeUpdate(DocumentEvent documentEvent) {
-                    handle(documentEvent);
-                }
-
-                public void changedUpdate(DocumentEvent documentEvent) {
-                    handle(documentEvent);
-                }
-            });
-        }
-
-        if (dParent != null)
-            diag = new JDialog(dParent, Globals.lang("Edit file type"), true);
-        else
-            diag = new JDialog(fParent, Globals.lang("Edit file type"), true);
-        diag.getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
-        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-        diag.pack();
-
-        BrowseListener browse = new BrowseListener(diag, application);
-        browseBut.addActionListener(browse);
-
-        if (dParent != null)
-            diag.setLocationRelativeTo(dParent);
-        else
-            diag.setLocationRelativeTo(fParent);
-        //Util.placeDialog(diag, parent);
-
-        setValues(entry);
-    }
-
-    public void setEntry(ExternalFileType entry) {
-        this.entry = entry;
-        setValues(entry);
-    }
-
-    public void setVisible(boolean visible) {
-        if (visible)
-            okPressed = false;
-        diag.setVisible(visible);
-    }
-
-    public void setValues(ExternalFileType entry) {
-        name.setText(entry.getName());
-        extension.setText(entry.getExtension());
-        mimeType.setText(entry.getMimeType());
-        application.setText(entry.getOpenWith());
-        icon.setIcon(entry.getIcon());
-        if (true && (application.getText().length() == 0))
-            useDefault.setSelected(true);
-        else
-            other.setSelected(true);
-        selectedIcon = null;
-    }
-
-    public void storeSettings(ExternalFileType entry) {
-        entry.setName(name.getText().trim());
-        entry.setMimeType(mimeType.getText().trim());
-        // Set extension, but remove initial dot if user has added that:
-        String ext = extension.getText().trim();
-        if ((ext.length() > 0) && (ext.charAt(0) == '.'))
-            entry.setExtension(ext.substring(1));
-        else
-            entry.setExtension(ext);
-        
-        if (selectedIcon != null)
-            entry.setIconName(selectedIcon);
-        if (!Globals.ON_WIN) {
-            entry.setOpenWith(application.getText().trim());
-        } else {
-            // On Windows, store application as empty if the "Default" option is selected,
-            // or if the application name is empty:
-            if (useDefault.isSelected() || (application.getText().trim().length() == 0))
-                entry.setOpenWith("");
-            else
-                entry.setOpenWith(application.getText().trim());
-        }
-    }
-
-    public boolean okPressed() {
-        return okPressed;
-    }
-
-    class BrowseListener implements ActionListener {
-        private JTextField comp;
-
-        public BrowseListener(JDialog parent, JTextField comp) {
-            this.comp = comp;
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            File initial = new File(comp.getText().trim());
-            if (comp.getText().trim().length() == 0) {
-                // Nothing in the field. Go to the last file dir used:
-                initial = new File(Globals.prefs.get("fileWorkingDirectory"));
-            }
-            String chosen = FileDialogs.getNewFile(/*parent*/null, initial, Globals.NONE,
-                JFileChooser.OPEN_DIALOG, false);
-            if (chosen != null) {
-                File newFile = new File(chosen);
-                // Store the directory for next time:
-                Globals.prefs.put("fileWorkingDirectory", newFile.getParent());
-                comp.setText(newFile.getPath());
-                comp.requestFocus();
-            }
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+
+import javax.swing.*;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.gui.FileDialogs;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * This class produces a dialog box for editing an external file type.
+ */
+public class ExternalFileTypeEntryEditor {
+
+    JFrame fParent = null;
+    JDialog dParent = null;
+    JDialog diag;
+    JTextField extension = new JTextField(),
+        name = new JTextField(),
+        mimeType = new JTextField(),
+        application = new JTextField();
+    String selectedIcon = null;
+    JButton icon = new JButton(GUIGlobals.getImage("picture"));
+    JButton ok = new JButton(Globals.lang("Ok")),
+            cancel = new JButton(Globals.lang("Cancel"));
+    JRadioButton useDefault = new JRadioButton(Globals.lang("Default")),
+        other = new JRadioButton("");
+    final String emptyMessage = "<"+Globals.lang("Use default viewer")+">";
+    boolean applicationFieldEmpty = false;
+
+    private ExternalFileType entry;
+    private boolean okPressed = false;
+
+    public ExternalFileTypeEntryEditor(JFrame parent, ExternalFileType entry) {
+        fParent = parent;
+        init(entry);
+    }
+
+    public ExternalFileTypeEntryEditor(JDialog parent, ExternalFileType entry) {
+        dParent = parent;
+        init(entry);
+    }
+
+    private void init(ExternalFileType entry) {
+        this.entry = entry;
+        icon.setText(null);
+
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(useDefault);
+        bg.add(other);
+
+        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout
+                ("left:pref, 4dlu, fill:150dlu, 4dlu, fill:pref", ""));
+        builder.append(Globals.lang("Icon"));
+        builder.append(icon);
+        builder.nextLine();
+        builder.append(Globals.lang("Name"));
+        builder.append(name);
+        builder.nextLine();
+        builder.append(Globals.lang("Extension"));
+        builder.append(extension);
+        builder.nextLine();
+        builder.append(Globals.lang("MIME type"));
+        builder.append(mimeType);
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        builder.nextLine();
+        builder.append(Globals.lang("Application"));
+        JButton browseBut = new JButton(Globals.lang("Browse"));
+        if (Globals.ON_WIN) {
+            builder.append(useDefault);
+            builder.nextLine();
+            JPanel p1 = new JPanel();
+            builder.append(p1);
+            JPanel p2 = new JPanel();
+            application.setPreferredSize(new Dimension(300, application.getPreferredSize().height));
+            BorderLayout bl = new BorderLayout();
+            bl.setHgap(4);
+            p2.setLayout(bl);
+            p2.add(other, BorderLayout.WEST);
+            p2.add(application, BorderLayout.CENTER);
+            builder.append(p2);
+            builder.append(browseBut);
+        } else {
+            builder.append(application);
+            builder.append(browseBut);
+        }
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                okPressed = true;
+                storeSettings(ExternalFileTypeEntryEditor.this.entry);
+                diag.dispose();
+                                
+            }
+        });
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                diag.dispose();
+            }
+        });
+
+        icon.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                String initSel = ExternalFileTypeEntryEditor.this.entry.getIconName();
+                if (selectedIcon != null)
+                    initSel = selectedIcon;
+                IconSelection ic = new IconSelection(diag, initSel);
+                ic.setVisible(true);
+                if (ic.isOkPressed()) {
+                    selectedIcon = ic.getSelectedIconKey();
+                    icon.setIcon(GUIGlobals.getImage(selectedIcon));
+                }
+                //JOptionPane.showMessageDialog(null, "Sorry, the icon can unfortunately not be changed in this version of JabRef");
+            }
+        });
+
+        if (Globals.ON_WIN) {
+            application.getDocument().addDocumentListener(new DocumentListener() {
+                private void handle(DocumentEvent e) {
+                    if (application.getText().length() == 0) {
+                        useDefault.setSelected(true);
+                    } else {
+                        other.setSelected(true);
+                    }
+                }
+                public void insertUpdate(DocumentEvent e) {
+                    handle(e);
+                }
+
+                public void removeUpdate(DocumentEvent documentEvent) {
+                    handle(documentEvent);
+                }
+
+                public void changedUpdate(DocumentEvent documentEvent) {
+                    handle(documentEvent);
+                }
+            });
+        }
+
+        if (dParent != null)
+            diag = new JDialog(dParent, Globals.lang("Edit file type"), true);
+        else
+            diag = new JDialog(fParent, Globals.lang("Edit file type"), true);
+        diag.getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
+        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        diag.pack();
+
+        BrowseListener browse = new BrowseListener(diag, application);
+        browseBut.addActionListener(browse);
+
+        if (dParent != null)
+            diag.setLocationRelativeTo(dParent);
+        else
+            diag.setLocationRelativeTo(fParent);
+        //Util.placeDialog(diag, parent);
+
+        setValues(entry);
+    }
+
+    public void setEntry(ExternalFileType entry) {
+        this.entry = entry;
+        setValues(entry);
+    }
+
+    public void setVisible(boolean visible) {
+        if (visible)
+            okPressed = false;
+        diag.setVisible(visible);
+    }
+
+    public void setValues(ExternalFileType entry) {
+        name.setText(entry.getName());
+        extension.setText(entry.getExtension());
+        mimeType.setText(entry.getMimeType());
+        application.setText(entry.getOpenWith());
+        icon.setIcon(entry.getIcon());
+        if (true && (application.getText().length() == 0))
+            useDefault.setSelected(true);
+        else
+            other.setSelected(true);
+        selectedIcon = null;
+    }
+
+    public void storeSettings(ExternalFileType entry) {
+        entry.setName(name.getText().trim());
+        entry.setMimeType(mimeType.getText().trim());
+        // Set extension, but remove initial dot if user has added that:
+        String ext = extension.getText().trim();
+        if ((ext.length() > 0) && (ext.charAt(0) == '.'))
+            entry.setExtension(ext.substring(1));
+        else
+            entry.setExtension(ext);
+        
+        if (selectedIcon != null)
+            entry.setIconName(selectedIcon);
+        if (!Globals.ON_WIN) {
+            entry.setOpenWith(application.getText().trim());
+        } else {
+            // On Windows, store application as empty if the "Default" option is selected,
+            // or if the application name is empty:
+            if (useDefault.isSelected() || (application.getText().trim().length() == 0))
+                entry.setOpenWith("");
+            else
+                entry.setOpenWith(application.getText().trim());
+        }
+    }
+
+    public boolean okPressed() {
+        return okPressed;
+    }
+
+    class BrowseListener implements ActionListener {
+        private JTextField comp;
+
+        public BrowseListener(JDialog parent, JTextField comp) {
+            this.comp = comp;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            File initial = new File(comp.getText().trim());
+            if (comp.getText().trim().length() == 0) {
+                // Nothing in the field. Go to the last file dir used:
+                initial = new File(Globals.prefs.get("fileWorkingDirectory"));
+            }
+            String chosen = FileDialogs.getNewFile(/*parent*/null, initial, Globals.NONE,
+                JFileChooser.OPEN_DIALOG, false);
+            if (chosen != null) {
+                File newFile = new File(chosen);
+                // Store the directory for next time:
+                Globals.prefs.put("fileWorkingDirectory", newFile.getParent());
+                comp.setText(newFile.getPath());
+                comp.requestFocus();
+            }
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/external/FileLinksUpgradeWarning.java b/src/java/net/sf/jabref/external/FileLinksUpgradeWarning.java
index d17759f..74f6b01 100644
--- a/src/java/net/sf/jabref/external/FileLinksUpgradeWarning.java
+++ b/src/java/net/sf/jabref/external/FileLinksUpgradeWarning.java
@@ -1,217 +1,217 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.util.Iterator;
-import java.util.List;
-
-import javax.swing.*;
-
-import net.sf.jabref.*;
-import net.sf.jabref.imports.ParserResult;
-import net.sf.jabref.imports.PostOpenAction;
-import net.sf.jabref.undo.NamedCompound;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * This class defines the warning that can be offered when opening a pre-2.3
- * JabRef file into a later version. This warning mentions the new external file
- * link system in this version of JabRef, and offers to:
- *
- * * upgrade old-style PDF/PS links into the "file" field
- * * modify General fields to show "file" instead of "pdf" / "ps"
- * * modify table column settings to show "file" instead of "pdf" / "ps"
- */
-public class FileLinksUpgradeWarning implements PostOpenAction {
-
-    private static final String[] FIELDS_TO_LOOK_FOR = new String[] {"pdf", "ps"};
-
-    /**
-     * This method should be performed if the major/minor versions recorded in the ParserResult
-     * are less than or equal to 2.2.
-     * @param pr
-     * @return true if the file was written by a jabref version <=2.2
-     */
-    public boolean isActionNecessary(ParserResult pr) {
-        // First check if this warning is disabled:
-        if (!Globals.prefs.getBoolean("showFileLinksUpgradeWarning"))
-            return false;
-        if (pr.getJabrefMajorVersion() < 0)
-            return false; // non-JabRef file
-        if (pr.getJabrefMajorVersion() < 2)
-            return true; // old
-        if (pr.getJabrefMajorVersion() > 2)
-            return false; // wow, did we ever reach version 3?
-        return (pr.getJabrefMinorVersion() <= 2);
-    }
-
-    /**
-     * This method presents a dialog box explaining and offering to make the
-     * changes. If the user confirms, the changes are performed.
-     * @param panel
-     * @param pr
-     */
-    public void performAction(BasePanel panel, ParserResult pr) {
-        // Find out which actions should be offered:
-        // Only offer to change Preferences if file column is not already visible:
-        boolean offerChangeSettings = !Globals.prefs.getBoolean("fileColumn") || !showsFileInGenFields();
-        // Only offer to upgrade links if the pdf/ps fields are used:
-        boolean offerChangeDatabase = linksFound(pr.getDatabase(), FIELDS_TO_LOOK_FOR);
-        // If the "file" directory is not set, offer to migrate pdf/ps dir:
-        boolean offerSetFileDir = !Globals.prefs.hasKey(GUIGlobals.FILE_FIELD+"Directory")
-                && (Globals.prefs.hasKey("pdfDirectory") || Globals.prefs.hasKey("psDirectory"));
-
-        if (!offerChangeDatabase && !offerChangeSettings && !offerSetFileDir)
-                    return; // Nothing to do, just return.
-                
-        JCheckBox changeSettings = new JCheckBox(Globals.lang("Change table column and General fields settings to use the new feature"),
-                offerChangeSettings);
-        JCheckBox changeDatabase = new JCheckBox(Globals.lang("Upgrade old external file links to use the new feature"),
-                offerChangeDatabase);
-        JCheckBox setFileDir = new JCheckBox(Globals.lang("Set main external file directory")+":", offerSetFileDir);
-        JTextField fileDir = new JTextField(30);
-        JCheckBox doNotShowDialog = new JCheckBox(Globals.lang("Do not show these options in the future"),
-                false);
-
-        StringBuilder sb = new StringBuilder("<html>");
-        sb.append(Globals.lang("This database was written using an older version of JabRef."));
-        sb.append("<br>");
-        sb.append(Globals.lang("The current version features a new way of handling links to external files.<br>"
-            +"To take advantage of this, your links must be changed into the new format, and<br>"
-            +"JabRef must be configured to show the new links."));
-        sb.append("<p>");
-        sb.append(Globals.lang("Do you want JabRef to do the following operations?"));
-        sb.append("</html>");
-
-        JPanel message = new JPanel();
-        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout("left:pref", ""), message);
-        b.append(new JLabel(sb.toString()));
-        b.nextLine();
-        if (offerChangeSettings) {
-            b.append(changeSettings);
-            b.nextLine();
-        }
-        if (offerChangeDatabase) {
-            b.append(changeDatabase);
-            b.nextLine();
-        }
-        if (offerSetFileDir) {
-            if (Globals.prefs.hasKey("pdfDirectory"))
-                fileDir.setText(Globals.prefs.get("pdfDirectory"));
-            else
-                fileDir.setText(Globals.prefs.get("psDirectory"));
-            JPanel pan = new JPanel();
-            pan.add(setFileDir);
-            pan.add(fileDir);
-            JButton browse = new JButton(Globals.lang("Browse"));
-            browse.addActionListener(new BrowseAction(null, fileDir, true));
-            pan.add(browse);
-            b.append(pan);
-            b.nextLine();
-        }
-        b.append("");
-        b.nextLine();
-        b.append(doNotShowDialog);
-
-        int answer = JOptionPane.showConfirmDialog(panel.frame(),
-                message, Globals.lang("Upgrade file"), JOptionPane.YES_NO_OPTION);
-        if (doNotShowDialog.isSelected())
-            Globals.prefs.putBoolean("showFileLinksUpgradeWarning", false);
-
-        if (answer == JOptionPane.YES_OPTION)
-            makeChanges(panel, pr, changeSettings.isSelected(), changeDatabase.isSelected(),
-                    setFileDir.isSelected() ? fileDir.getText() : null);
-    }
-
-    /**
-     * Check the database to find out whether any of a set of fields are used
-     * for any of the entries.
-     * @param database The bib database.
-     * @param fields The set of fields to look for.
-     * @return true if at least one of the given fields is set in at least one entry,
-     *  false otherwise.
-     */
-    public boolean linksFound(BibtexDatabase database, String[] fields) {
-        for (BibtexEntry entry : database.getEntries()){
-            for (int i = 0; i < fields.length; i++) {
-                if (entry.getField(fields[i]) != null)
-                    return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * This method performs the actual changes.
-     * @param panel
-     * @param pr
-     * @param fileDir The path to the file directory to set, or null if it should not be set.
-     */
-    public void makeChanges(BasePanel panel, ParserResult pr, boolean upgradePrefs,
-                            boolean upgradeDatabase, String fileDir) {
-
-        if (upgradeDatabase) {
-            // Update file links links in the database:
-            NamedCompound ce = Util.upgradePdfPsToFile(pr.getDatabase(), FIELDS_TO_LOOK_FOR);
-            panel.undoManager.addEdit(ce);
-            panel.markBaseChanged();
-        }
-
-        if (fileDir != null) {
-            Globals.prefs.put(GUIGlobals.FILE_FIELD+"Directory", fileDir);
-        }
-
-        if (upgradePrefs) {
-            // Exchange table columns:
-            Globals.prefs.putBoolean("pdfColumn", Boolean.FALSE);
-            Globals.prefs.putBoolean("fileColumn", Boolean.TRUE);
-
-            // Modify General fields if necessary:
-            // If we don't find the file field, insert it at the bottom of the first tab:
-            if (!showsFileInGenFields()) {
-                String gfs = Globals.prefs.get(Globals.prefs.CUSTOM_TAB_FIELDS+"0");
-                //System.out.println(gfs);
-                StringBuffer sb = new StringBuffer(gfs);
-                if (gfs.length() > 0)
-                    sb.append(";");
-                sb.append(GUIGlobals.FILE_FIELD);
-                Globals.prefs.put(Globals.prefs.CUSTOM_TAB_FIELDS+"0", sb.toString());
-                Globals.prefs.updateEntryEditorTabList();
-                panel.frame().removeCachedEntryEditors();
-            }
-            panel.frame().setupAllTables();
-        }
-    }
-
-    private boolean showsFileInGenFields() {
-        boolean found = false;
-        EntryEditorTabList tabList = Globals.prefs.getEntryEditorTabList();
-        outer: for (int i=0; i<tabList.getTabCount(); i++) {
-            List<String> fields = tabList.getTabFields(i);
-            for (Iterator<String> j=fields.iterator(); j.hasNext();) {
-                String field = j.next();
-                if (field.equals(GUIGlobals.FILE_FIELD)) {
-                    found = true;
-                    break outer;
-                }
-            }
-        }
-        return found;
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.*;
+
+import net.sf.jabref.*;
+import net.sf.jabref.imports.ParserResult;
+import net.sf.jabref.imports.PostOpenAction;
+import net.sf.jabref.undo.NamedCompound;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * This class defines the warning that can be offered when opening a pre-2.3
+ * JabRef file into a later version. This warning mentions the new external file
+ * link system in this version of JabRef, and offers to:
+ *
+ * * upgrade old-style PDF/PS links into the "file" field
+ * * modify General fields to show "file" instead of "pdf" / "ps"
+ * * modify table column settings to show "file" instead of "pdf" / "ps"
+ */
+public class FileLinksUpgradeWarning implements PostOpenAction {
+
+    private static final String[] FIELDS_TO_LOOK_FOR = new String[] {"pdf", "ps"};
+
+    /**
+     * This method should be performed if the major/minor versions recorded in the ParserResult
+     * are less than or equal to 2.2.
+     * @param pr
+     * @return true if the file was written by a jabref version <=2.2
+     */
+    public boolean isActionNecessary(ParserResult pr) {
+        // First check if this warning is disabled:
+        if (!Globals.prefs.getBoolean("showFileLinksUpgradeWarning"))
+            return false;
+        if (pr.getJabrefMajorVersion() < 0)
+            return false; // non-JabRef file
+        if (pr.getJabrefMajorVersion() < 2)
+            return true; // old
+        if (pr.getJabrefMajorVersion() > 2)
+            return false; // wow, did we ever reach version 3?
+        return (pr.getJabrefMinorVersion() <= 2);
+    }
+
+    /**
+     * This method presents a dialog box explaining and offering to make the
+     * changes. If the user confirms, the changes are performed.
+     * @param panel
+     * @param pr
+     */
+    public void performAction(BasePanel panel, ParserResult pr) {
+        // Find out which actions should be offered:
+        // Only offer to change Preferences if file column is not already visible:
+        boolean offerChangeSettings = !Globals.prefs.getBoolean("fileColumn") || !showsFileInGenFields();
+        // Only offer to upgrade links if the pdf/ps fields are used:
+        boolean offerChangeDatabase = linksFound(pr.getDatabase(), FIELDS_TO_LOOK_FOR);
+        // If the "file" directory is not set, offer to migrate pdf/ps dir:
+        boolean offerSetFileDir = !Globals.prefs.hasKey(GUIGlobals.FILE_FIELD+"Directory")
+                && (Globals.prefs.hasKey("pdfDirectory") || Globals.prefs.hasKey("psDirectory"));
+
+        if (!offerChangeDatabase && !offerChangeSettings && !offerSetFileDir)
+                    return; // Nothing to do, just return.
+                
+        JCheckBox changeSettings = new JCheckBox(Globals.lang("Change table column and General fields settings to use the new feature"),
+                offerChangeSettings);
+        JCheckBox changeDatabase = new JCheckBox(Globals.lang("Upgrade old external file links to use the new feature"),
+                offerChangeDatabase);
+        JCheckBox setFileDir = new JCheckBox(Globals.lang("Set main external file directory")+":", offerSetFileDir);
+        JTextField fileDir = new JTextField(30);
+        JCheckBox doNotShowDialog = new JCheckBox(Globals.lang("Do not show these options in the future"),
+                false);
+
+        StringBuilder sb = new StringBuilder("<html>");
+        sb.append(Globals.lang("This database was written using an older version of JabRef."));
+        sb.append("<br>");
+        sb.append(Globals.lang("The current version features a new way of handling links to external files.<br>"
+            +"To take advantage of this, your links must be changed into the new format, and<br>"
+            +"JabRef must be configured to show the new links."));
+        sb.append("<p>");
+        sb.append(Globals.lang("Do you want JabRef to do the following operations?"));
+        sb.append("</html>");
+
+        JPanel message = new JPanel();
+        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout("left:pref", ""), message);
+        b.append(new JLabel(sb.toString()));
+        b.nextLine();
+        if (offerChangeSettings) {
+            b.append(changeSettings);
+            b.nextLine();
+        }
+        if (offerChangeDatabase) {
+            b.append(changeDatabase);
+            b.nextLine();
+        }
+        if (offerSetFileDir) {
+            if (Globals.prefs.hasKey("pdfDirectory"))
+                fileDir.setText(Globals.prefs.get("pdfDirectory"));
+            else
+                fileDir.setText(Globals.prefs.get("psDirectory"));
+            JPanel pan = new JPanel();
+            pan.add(setFileDir);
+            pan.add(fileDir);
+            JButton browse = new JButton(Globals.lang("Browse"));
+            browse.addActionListener(new BrowseAction(null, fileDir, true));
+            pan.add(browse);
+            b.append(pan);
+            b.nextLine();
+        }
+        b.append("");
+        b.nextLine();
+        b.append(doNotShowDialog);
+
+        int answer = JOptionPane.showConfirmDialog(panel.frame(),
+                message, Globals.lang("Upgrade file"), JOptionPane.YES_NO_OPTION);
+        if (doNotShowDialog.isSelected())
+            Globals.prefs.putBoolean("showFileLinksUpgradeWarning", false);
+
+        if (answer == JOptionPane.YES_OPTION)
+            makeChanges(panel, pr, changeSettings.isSelected(), changeDatabase.isSelected(),
+                    setFileDir.isSelected() ? fileDir.getText() : null);
+    }
+
+    /**
+     * Check the database to find out whether any of a set of fields are used
+     * for any of the entries.
+     * @param database The bib database.
+     * @param fields The set of fields to look for.
+     * @return true if at least one of the given fields is set in at least one entry,
+     *  false otherwise.
+     */
+    public boolean linksFound(BibtexDatabase database, String[] fields) {
+        for (BibtexEntry entry : database.getEntries()){
+            for (int i = 0; i < fields.length; i++) {
+                if (entry.getField(fields[i]) != null)
+                    return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * This method performs the actual changes.
+     * @param panel
+     * @param pr
+     * @param fileDir The path to the file directory to set, or null if it should not be set.
+     */
+    public void makeChanges(BasePanel panel, ParserResult pr, boolean upgradePrefs,
+                            boolean upgradeDatabase, String fileDir) {
+
+        if (upgradeDatabase) {
+            // Update file links links in the database:
+            NamedCompound ce = Util.upgradePdfPsToFile(pr.getDatabase(), FIELDS_TO_LOOK_FOR);
+            panel.undoManager.addEdit(ce);
+            panel.markBaseChanged();
+        }
+
+        if (fileDir != null) {
+            Globals.prefs.put(GUIGlobals.FILE_FIELD+"Directory", fileDir);
+        }
+
+        if (upgradePrefs) {
+            // Exchange table columns:
+            Globals.prefs.putBoolean("pdfColumn", Boolean.FALSE);
+            Globals.prefs.putBoolean("fileColumn", Boolean.TRUE);
+
+            // Modify General fields if necessary:
+            // If we don't find the file field, insert it at the bottom of the first tab:
+            if (!showsFileInGenFields()) {
+                String gfs = Globals.prefs.get(Globals.prefs.CUSTOM_TAB_FIELDS+"0");
+                //System.out.println(gfs);
+                StringBuffer sb = new StringBuffer(gfs);
+                if (gfs.length() > 0)
+                    sb.append(";");
+                sb.append(GUIGlobals.FILE_FIELD);
+                Globals.prefs.put(Globals.prefs.CUSTOM_TAB_FIELDS+"0", sb.toString());
+                Globals.prefs.updateEntryEditorTabList();
+                panel.frame().removeCachedEntryEditors();
+            }
+            panel.frame().setupAllTables();
+        }
+    }
+
+    private boolean showsFileInGenFields() {
+        boolean found = false;
+        EntryEditorTabList tabList = Globals.prefs.getEntryEditorTabList();
+        outer: for (int i=0; i<tabList.getTabCount(); i++) {
+            List<String> fields = tabList.getTabFields(i);
+            for (Iterator<String> j=fields.iterator(); j.hasNext();) {
+                String field = j.next();
+                if (field.equals(GUIGlobals.FILE_FIELD)) {
+                    found = true;
+                    break outer;
+                }
+            }
+        }
+        return found;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/external/FindFullText.java b/src/java/net/sf/jabref/external/FindFullText.java
index 2ed5025..67ee601 100644
--- a/src/java/net/sf/jabref/external/FindFullText.java
+++ b/src/java/net/sf/jabref/external/FindFullText.java
@@ -1,229 +1,229 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-import net.sf.jabref.net.URLDownload;
-
-/**
- * Utility class for trying to resolve URLs to full-text PDF for articles.
- */
-public class FindFullText {
-
-    public final static int
-        FOUND_PDF = 0,
-        WRONG_MIME_TYPE = 1,
-        UNKNOWN_DOMAIN = 2,
-        LINK_NOT_FOUND = 3,
-        IO_EXCEPTION = 4,
-        NO_URLS_DEFINED = 5;
-
-    List<FullTextFinder> finders = new ArrayList<FullTextFinder>();
-
-
-    public FindFullText() {
-        finders.add(new ScienceDirectPdfDownload());
-        finders.add(new SpringerLinkPdfDownload());
-    }
-
-    public FindResult findFullText(BibtexEntry entry) {
-        String urlText = entry.getField("url");
-        String doiText = entry.getField("doi");
-        // First try the DOI link, if defined:
-        if ((doiText != null) && (doiText.trim().length() > 0)) {
-            doiText = Util.getDOI(doiText);
-            FindResult resDoi = lookForFullTextAtURL(Globals.DOI_LOOKUP_PREFIX+doiText);
-            if (resDoi.status == FOUND_PDF)
-                return resDoi;
-            // The DOI link failed, try falling back on the URL link, if defined:
-            else if ((urlText != null) && (urlText.trim().length() > 0)) {
-                FindResult resUrl = lookForFullTextAtURL(urlText);
-                if (resUrl.status == FOUND_PDF)
-                    return resUrl;
-                else {
-                    return resDoi; // If both URL and DOI fail, we assume that the error code for DOI is
-                                   // probably the most relevant.
-                }
-            }
-            else return resDoi;
-        }
-        // No DOI? Try URL:
-        else if ((urlText != null) && (urlText.trim().length() > 0)) {
-            return lookForFullTextAtURL(urlText);
-        }
-        // No URL either? Return error code.
-        else return new FindResult(NO_URLS_DEFINED, null);
-    }
-
-    private FindResult lookForFullTextAtURL(String urlText) {
-        try {
-            URL url = new URL(urlText);
-            url = resolveRedirects(url, 0);
-            boolean domainKnown = false;
-            for (FullTextFinder finder : finders) {
-                if (finder.supportsSite(url)) {
-                    domainKnown = true;
-                    URL result = finder.findFullTextURL(url);
-                    if (result != null) {
-                        
-                        // Check the MIME type of this URL to see if it is a PDF. If not,
-                        // it could be because the user doesn't have access:
-                        try {
-                            URLDownload udl = new URLDownload(null, result, null);
-                            udl.openConnectionOnly();
-
-                            String mimeType = udl.getMimeType();
-                            if ((mimeType != null) && (mimeType.toLowerCase().equals("application/pdf"))) {
-                                return new FindResult(result, url);
-                            }
-                            else {
-                                udl = new URLDownload(null, result, new File("page.html"));
-                                udl.download();
-                                return new FindResult(WRONG_MIME_TYPE, url);
-                            }
-                        } catch (IOException ex) {
-                            ex.printStackTrace();
-                            return new FindResult(IO_EXCEPTION, url);
-                        }
-                    }
-
-                }
-            }
-            if (!domainKnown)
-                return new FindResult(UNKNOWN_DOMAIN, url);
-            else
-                return new FindResult(LINK_NOT_FOUND, url);
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-
-        } catch (IOException e) {
-          e.printStackTrace();
-        }
-
-        return null;
-    }
-
-    /**
-     * Follow redirects until the final location is reached. This is necessary to handle DOI links, which
-     * redirect to publishers' web sites. We need to know the publisher's domain name in order to choose
-     * which FullTextFinder to use.
-     * @param url The url to start with.
-     * @param redirectCount The number of previous redirects. We will follow a maximum of 5 redirects.
-     * @return the final URL, or the initial one in case there is no redirect.
-     * @throws IOException for connection error
-     */
-    private URL resolveRedirects(URL url, int redirectCount) throws IOException {
-        URLConnection uc = url.openConnection();
-        if (uc instanceof HttpURLConnection) {
-            HttpURLConnection huc = (HttpURLConnection)uc;
-            huc.setInstanceFollowRedirects(false);
-            huc.connect();
-            int responseCode = huc.getResponseCode();
-            String location = huc.getHeaderField("location");
-            huc.disconnect();
-            if ((responseCode == HttpURLConnection.HTTP_MOVED_TEMP) && (redirectCount < 5)) {
-                //System.out.println(responseCode);
-                //System.out.println(location);
-                try {
-                    URL newUrl = new URL(location);
-                    return resolveRedirects(newUrl, redirectCount+1);
-                } catch (MalformedURLException ex) {
-                    return url; // take the previous one, since this one didn't make sense.
-                    // TODO: this could be caused by location being a relative link, but this would just give
-                    // the default page in the case of www.springerlink.com, not the article page. Don't know why.
-                }
-
-            }
-            else return url;
-
-        }
-        else return url;
-    }
-
-    public static String loadPage(URL url) throws IOException {
-        Reader in = null;
-        URLConnection uc;
-        HttpURLConnection huc = null;
-        try {
-            uc = url.openConnection();
-            if (uc instanceof HttpURLConnection) {
-                huc = (HttpURLConnection)uc;
-                huc.setInstanceFollowRedirects(false);
-                huc.connect();
-
-                in = new InputStreamReader(huc.getInputStream());
-                StringBuilder sb = new StringBuilder();
-                int c;
-                while ((c = in.read()) != -1)
-                    sb.append((char)c);
-                return sb.toString();
-            }
-            else
-                return null; // TODO: are other types of connection (https?) relevant?
-        } finally {
-            try {
-                if (in != null) in.close();
-                if (huc != null) huc.disconnect();
-            } catch (IOException ex) { ex.printStackTrace(); }
-        }
-
-    }
-
-    public static class FindResult {
-        public URL url;
-        public String host = null;
-        public int status;
-
-        public FindResult(URL url, URL originalUrl) {
-            this.url = url;
-            this.status = FOUND_PDF;
-            if (originalUrl != null)
-                host = originalUrl.getHost();
-        }
-        public FindResult(int status, URL originalUrl) {
-            this.url = null;
-            this.status = status;
-            if (originalUrl != null)
-                this.host = originalUrl.getHost();
-        }
-    }
-
-
-    public static void dumpToFile(String text, File f) {
-         try {
-             FileWriter fw = new FileWriter(f);
-             fw.write(text);
-             fw.close();
-         } catch (IOException e) {
-             e.printStackTrace();
-
-         }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+import net.sf.jabref.net.URLDownload;
+
+/**
+ * Utility class for trying to resolve URLs to full-text PDF for articles.
+ */
+public class FindFullText {
+
+    public final static int
+        FOUND_PDF = 0,
+        WRONG_MIME_TYPE = 1,
+        UNKNOWN_DOMAIN = 2,
+        LINK_NOT_FOUND = 3,
+        IO_EXCEPTION = 4,
+        NO_URLS_DEFINED = 5;
+
+    List<FullTextFinder> finders = new ArrayList<FullTextFinder>();
+
+
+    public FindFullText() {
+        finders.add(new ScienceDirectPdfDownload());
+        finders.add(new SpringerLinkPdfDownload());
+    }
+
+    public FindResult findFullText(BibtexEntry entry) {
+        String urlText = entry.getField("url");
+        String doiText = entry.getField("doi");
+        // First try the DOI link, if defined:
+        if ((doiText != null) && (doiText.trim().length() > 0)) {
+            doiText = Util.getDOI(doiText);
+            FindResult resDoi = lookForFullTextAtURL(Globals.DOI_LOOKUP_PREFIX+doiText);
+            if (resDoi.status == FOUND_PDF)
+                return resDoi;
+            // The DOI link failed, try falling back on the URL link, if defined:
+            else if ((urlText != null) && (urlText.trim().length() > 0)) {
+                FindResult resUrl = lookForFullTextAtURL(urlText);
+                if (resUrl.status == FOUND_PDF)
+                    return resUrl;
+                else {
+                    return resDoi; // If both URL and DOI fail, we assume that the error code for DOI is
+                                   // probably the most relevant.
+                }
+            }
+            else return resDoi;
+        }
+        // No DOI? Try URL:
+        else if ((urlText != null) && (urlText.trim().length() > 0)) {
+            return lookForFullTextAtURL(urlText);
+        }
+        // No URL either? Return error code.
+        else return new FindResult(NO_URLS_DEFINED, null);
+    }
+
+    private FindResult lookForFullTextAtURL(String urlText) {
+        try {
+            URL url = new URL(urlText);
+            url = resolveRedirects(url, 0);
+            boolean domainKnown = false;
+            for (FullTextFinder finder : finders) {
+                if (finder.supportsSite(url)) {
+                    domainKnown = true;
+                    URL result = finder.findFullTextURL(url);
+                    if (result != null) {
+                        
+                        // Check the MIME type of this URL to see if it is a PDF. If not,
+                        // it could be because the user doesn't have access:
+                        try {
+                            URLDownload udl = new URLDownload(null, result, null);
+                            udl.openConnectionOnly();
+
+                            String mimeType = udl.getMimeType();
+                            if ((mimeType != null) && (mimeType.toLowerCase().equals("application/pdf"))) {
+                                return new FindResult(result, url);
+                            }
+                            else {
+                                udl = new URLDownload(null, result, new File("page.html"));
+                                udl.download();
+                                return new FindResult(WRONG_MIME_TYPE, url);
+                            }
+                        } catch (IOException ex) {
+                            ex.printStackTrace();
+                            return new FindResult(IO_EXCEPTION, url);
+                        }
+                    }
+
+                }
+            }
+            if (!domainKnown)
+                return new FindResult(UNKNOWN_DOMAIN, url);
+            else
+                return new FindResult(LINK_NOT_FOUND, url);
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+
+        } catch (IOException e) {
+          e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    /**
+     * Follow redirects until the final location is reached. This is necessary to handle DOI links, which
+     * redirect to publishers' web sites. We need to know the publisher's domain name in order to choose
+     * which FullTextFinder to use.
+     * @param url The url to start with.
+     * @param redirectCount The number of previous redirects. We will follow a maximum of 5 redirects.
+     * @return the final URL, or the initial one in case there is no redirect.
+     * @throws IOException for connection error
+     */
+    private URL resolveRedirects(URL url, int redirectCount) throws IOException {
+        URLConnection uc = url.openConnection();
+        if (uc instanceof HttpURLConnection) {
+            HttpURLConnection huc = (HttpURLConnection)uc;
+            huc.setInstanceFollowRedirects(false);
+            huc.connect();
+            int responseCode = huc.getResponseCode();
+            String location = huc.getHeaderField("location");
+            huc.disconnect();
+            if ((responseCode == HttpURLConnection.HTTP_MOVED_TEMP) && (redirectCount < 5)) {
+                //System.out.println(responseCode);
+                //System.out.println(location);
+                try {
+                    URL newUrl = new URL(location);
+                    return resolveRedirects(newUrl, redirectCount+1);
+                } catch (MalformedURLException ex) {
+                    return url; // take the previous one, since this one didn't make sense.
+                    // TODO: this could be caused by location being a relative link, but this would just give
+                    // the default page in the case of www.springerlink.com, not the article page. Don't know why.
+                }
+
+            }
+            else return url;
+
+        }
+        else return url;
+    }
+
+    public static String loadPage(URL url) throws IOException {
+        Reader in = null;
+        URLConnection uc;
+        HttpURLConnection huc = null;
+        try {
+            uc = url.openConnection();
+            if (uc instanceof HttpURLConnection) {
+                huc = (HttpURLConnection)uc;
+                huc.setInstanceFollowRedirects(false);
+                huc.connect();
+
+                in = new InputStreamReader(huc.getInputStream());
+                StringBuilder sb = new StringBuilder();
+                int c;
+                while ((c = in.read()) != -1)
+                    sb.append((char)c);
+                return sb.toString();
+            }
+            else
+                return null; // TODO: are other types of connection (https?) relevant?
+        } finally {
+            try {
+                if (in != null) in.close();
+                if (huc != null) huc.disconnect();
+            } catch (IOException ex) { ex.printStackTrace(); }
+        }
+
+    }
+
+    public static class FindResult {
+        public URL url;
+        public String host = null;
+        public int status;
+
+        public FindResult(URL url, URL originalUrl) {
+            this.url = url;
+            this.status = FOUND_PDF;
+            if (originalUrl != null)
+                host = originalUrl.getHost();
+        }
+        public FindResult(int status, URL originalUrl) {
+            this.url = null;
+            this.status = status;
+            if (originalUrl != null)
+                this.host = originalUrl.getHost();
+        }
+    }
+
+
+    public static void dumpToFile(String text, File f) {
+         try {
+             FileWriter fw = new FileWriter(f);
+             fw.write(text);
+             fw.close();
+         } catch (IOException e) {
+             e.printStackTrace();
+
+         }
+    }
+}
diff --git a/src/java/net/sf/jabref/external/FindFullTextAction.java b/src/java/net/sf/jabref/external/FindFullTextAction.java
index 36049d6..f81ddc7 100644
--- a/src/java/net/sf/jabref/external/FindFullTextAction.java
+++ b/src/java/net/sf/jabref/external/FindFullTextAction.java
@@ -1,110 +1,110 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.UndoableFieldChange;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.gui.FileListTableModel;
-
-import javax.swing.*;
-import java.io.IOException;
-
-/**
- * Try to download fulltext PDF for selected entry(ies) by following URL or DOI link.
-*/
-public class FindFullTextAction extends AbstractWorker {
-    private BasePanel basePanel;
-    private BibtexEntry entry = null;
-    private FindFullText.FindResult result = null;
-
-    public FindFullTextAction(BasePanel basePanel) {
-        this.basePanel = basePanel;
-    }
-
-    public void init() throws Throwable {
-        basePanel.output(Globals.lang("Looking for full text document..."));
-    }
-
-    public void run() {
-        entry = basePanel.getSelectedEntries()[0];
-        FindFullText fft = new FindFullText();
-        result = fft.findFullText(entry);
-    }
-
-    public void update() {
-        //pdfURL = new URL("http://geog-www.sbs.ohio-state.edu/faculty/bmark/abbott_etal_ppp03.pdf");
-        if (result.url != null) {
-            //System.out.println("PDF URL: "+result.url);
-            String bibtexKey = entry.getCiteKey();
-            String[] dirs = basePanel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-            if (dirs.length == 0) {
-                // TODO: error message if file dir not defined
-                //JOptionPane.showMessageDialog(frame, Globals.lang);
-                return;
-            }
-            DownloadExternalFile def = new DownloadExternalFile(basePanel.frame(), basePanel.metaData(),
-                    bibtexKey);
-            try {
-                def.download(result.url, new DownloadExternalFile.DownloadCallback() {
-                    public void downloadComplete(FileListEntry file) {
-                        System.out.println("finished");
-                        FileListTableModel tm = new FileListTableModel();
-                        String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
-                        tm.setContent(oldValue);
-                        tm.addEntry(tm.getRowCount(), file);
-                        String newValue = tm.getStringRepresentation();
-                        UndoableFieldChange edit = new UndoableFieldChange(entry,
-                                GUIGlobals.FILE_FIELD, oldValue, newValue);
-                        entry.setField(GUIGlobals.FILE_FIELD, newValue);
-                        basePanel.undoManager.addEdit(edit);
-                        basePanel.markBaseChanged();
-                    }
-                });
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-            basePanel.output(Globals.lang("Finished downloading full text document"));
-        }
-        else {
-            String message = null;
-            switch (result.status) {
-                case FindFullText.UNKNOWN_DOMAIN:
-                    message = Globals.lang("Unable to find full text article. No search algorithm "
-                        +"defined for the '%0' web site.", result.host);
-                    break;
-                case FindFullText.WRONG_MIME_TYPE:
-                    message = Globals.lang("Found pdf link, but received the wrong MIME type. "
-                        +"This could indicate that you don't have access to the fulltext article.");
-                    break;
-                case FindFullText.LINK_NOT_FOUND:
-                    message = Globals.lang("Unable to find full text document in the linked web page.");
-                    break;
-                case FindFullText.IO_EXCEPTION:
-                    message = Globals.lang("Connection error when trying to find full text document.");
-                    break;
-                case FindFullText.NO_URLS_DEFINED:
-                    message = Globals.lang("This entry provides no URL or DOI links.");
-                    break;
-
-            }
-            basePanel.output(Globals.lang("Full text article download failed"));
-            JOptionPane.showMessageDialog(basePanel.frame(), message, Globals.lang("Full text article download failed"),
-                    JOptionPane.ERROR_MESSAGE);
-        }
-
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import net.sf.jabref.*;
+import net.sf.jabref.undo.UndoableFieldChange;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileListTableModel;
+
+import javax.swing.*;
+import java.io.IOException;
+
+/**
+ * Try to download fulltext PDF for selected entry(ies) by following URL or DOI link.
+*/
+public class FindFullTextAction extends AbstractWorker {
+    private BasePanel basePanel;
+    private BibtexEntry entry = null;
+    private FindFullText.FindResult result = null;
+
+    public FindFullTextAction(BasePanel basePanel) {
+        this.basePanel = basePanel;
+    }
+
+    public void init() throws Throwable {
+        basePanel.output(Globals.lang("Looking for full text document..."));
+    }
+
+    public void run() {
+        entry = basePanel.getSelectedEntries()[0];
+        FindFullText fft = new FindFullText();
+        result = fft.findFullText(entry);
+    }
+
+    public void update() {
+        //pdfURL = new URL("http://geog-www.sbs.ohio-state.edu/faculty/bmark/abbott_etal_ppp03.pdf");
+        if (result.url != null) {
+            //System.out.println("PDF URL: "+result.url);
+            String bibtexKey = entry.getCiteKey();
+            String[] dirs = basePanel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            if (dirs.length == 0) {
+                // TODO: error message if file dir not defined
+                //JOptionPane.showMessageDialog(frame, Globals.lang);
+                return;
+            }
+            DownloadExternalFile def = new DownloadExternalFile(basePanel.frame(), basePanel.metaData(),
+                    bibtexKey);
+            try {
+                def.download(result.url, new DownloadExternalFile.DownloadCallback() {
+                    public void downloadComplete(FileListEntry file) {
+                        System.out.println("finished");
+                        FileListTableModel tm = new FileListTableModel();
+                        String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
+                        tm.setContent(oldValue);
+                        tm.addEntry(tm.getRowCount(), file);
+                        String newValue = tm.getStringRepresentation();
+                        UndoableFieldChange edit = new UndoableFieldChange(entry,
+                                GUIGlobals.FILE_FIELD, oldValue, newValue);
+                        entry.setField(GUIGlobals.FILE_FIELD, newValue);
+                        basePanel.undoManager.addEdit(edit);
+                        basePanel.markBaseChanged();
+                    }
+                });
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            basePanel.output(Globals.lang("Finished downloading full text document"));
+        }
+        else {
+            String message = null;
+            switch (result.status) {
+                case FindFullText.UNKNOWN_DOMAIN:
+                    message = Globals.lang("Unable to find full text article. No search algorithm "
+                        +"defined for the '%0' web site.", result.host);
+                    break;
+                case FindFullText.WRONG_MIME_TYPE:
+                    message = Globals.lang("Found pdf link, but received the wrong MIME type. "
+                        +"This could indicate that you don't have access to the fulltext article.");
+                    break;
+                case FindFullText.LINK_NOT_FOUND:
+                    message = Globals.lang("Unable to find full text document in the linked web page.");
+                    break;
+                case FindFullText.IO_EXCEPTION:
+                    message = Globals.lang("Connection error when trying to find full text document.");
+                    break;
+                case FindFullText.NO_URLS_DEFINED:
+                    message = Globals.lang("This entry provides no URL or DOI links.");
+                    break;
+
+            }
+            basePanel.output(Globals.lang("Full text article download failed"));
+            JOptionPane.showMessageDialog(basePanel.frame(), message, Globals.lang("Full text article download failed"),
+                    JOptionPane.ERROR_MESSAGE);
+        }
+
+    }
+}
diff --git a/src/java/net/sf/jabref/external/FullTextFinder.java b/src/java/net/sf/jabref/external/FullTextFinder.java
index c51d94e..c25a487 100644
--- a/src/java/net/sf/jabref/external/FullTextFinder.java
+++ b/src/java/net/sf/jabref/external/FullTextFinder.java
@@ -1,45 +1,45 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.net.URL;
-import java.io.IOException;
-
-/**
- * This interface is used for classes that try to resolve a full-text PDF url from an article
- * web page. Implementing classes should specialize on specific article sites.
- *  */
-public interface FullTextFinder {
-
-    /**
-     * Report whether this FullTextFinder works for the site providing the given URL.
-     *
-     * @param url The url to check.
-     * @return true if the site is supported, false otherwise. If the site might be supported,
-     *   it is best to return true.
-     */
-    public boolean supportsSite(URL url);
-
-       /**
-     * Take the source HTML for an article page, and try to find the URL to the
-     * full text for this article.
-     *
-     * @param url The URL to the article's web page.
-     * @return The fulltext PDF URL, if found, or null if not found.
-     * @throws java.io.IOException
-     */
-    public URL findFullTextURL(URL url) throws IOException;
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.net.URL;
+import java.io.IOException;
+
+/**
+ * This interface is used for classes that try to resolve a full-text PDF url from an article
+ * web page. Implementing classes should specialize on specific article sites.
+ *  */
+public interface FullTextFinder {
+
+    /**
+     * Report whether this FullTextFinder works for the site providing the given URL.
+     *
+     * @param url The url to check.
+     * @return true if the site is supported, false otherwise. If the site might be supported,
+     *   it is best to return true.
+     */
+    public boolean supportsSite(URL url);
+
+       /**
+     * Take the source HTML for an article page, and try to find the URL to the
+     * full text for this article.
+     *
+     * @param url The URL to the article's web page.
+     * @return The fulltext PDF URL, if found, or null if not found.
+     * @throws java.io.IOException
+     */
+    public URL findFullTextURL(URL url) throws IOException;
+}
diff --git a/src/java/net/sf/jabref/external/IconSelection.java b/src/java/net/sf/jabref/external/IconSelection.java
index 945812f..43a3c0f 100644
--- a/src/java/net/sf/jabref/external/IconSelection.java
+++ b/src/java/net/sf/jabref/external/IconSelection.java
@@ -1,166 +1,166 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.*;
-
-import javax.swing.*;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-/**
- * Dialog box for choosing an icon for an external file type.
- */
-public class IconSelection extends JDialog {
-
-    JList icons;
-    List<String> iconKeys;
-    DefaultListModel listModel;
-    JButton ok = new JButton(Globals.lang("Ok")),
-        cancel = new JButton(Globals.lang("Cancel"));
-    private boolean okPressed = false;
-    private int selected = -1;
-    private JDialog parent;
-
-    public IconSelection(JDialog parent, String initialSelection) {
-        super(parent, Globals.lang("Select icon"), true);
-        this.parent = parent;
-        init(initialSelection);
-    }
-
-    public void setVisible(boolean visible) {
-        if (visible) {
-            okPressed = false;
-            selected = -1;
-        }
-        super.setVisible(visible);
-    }
-
-    /**
-     * After dialog has closed, this method reports whether a selection was made
-     * or it was cancelled.
-     * @return true if a selection was made.
-     */
-    public boolean isOkPressed() {
-        return okPressed;
-    }
-
-    public String getSelectedIconKey() {
-        if (selected >= 0)
-            return iconKeys.get(selected);
-        else
-            return null;
-    }
-
-    private void init(String initialSelection) {
-        int initSelIndex = -1;
-        iconKeys = new ArrayList<String>();
-        Map<String, String> icns = GUIGlobals.getAllIcons();
-        HashSet<ImageIcon> iconSet = new LinkedHashSet<ImageIcon>();
-        for (String key : icns.keySet()){
-            ImageIcon icon = GUIGlobals.getImage(key);
-            if (!iconSet.contains(icon)) {
-                iconKeys.add(key);
-                if (key.equals(initialSelection))
-                    initSelIndex = iconKeys.size()-1;
-            }
-            iconSet.add(icon);
-
-        }
-
-        listModel = new DefaultListModel();
-        icons = new JList(listModel);
-        for (Iterator<ImageIcon> iterator = iconSet.iterator(); iterator.hasNext();) {
-            listModel.addElement(new JLabel(iterator.next()));
-        }
-        class MyRenderer implements ListCellRenderer {
-            JLabel comp = new JLabel();
-            public MyRenderer() {
-                comp.setOpaque(true);
-                comp.setIconTextGap(0);
-                comp.setHorizontalAlignment(JLabel.CENTER);
-            }
-
-            public Component getListCellRendererComponent(JList list, Object value, int i,
-                                                          boolean isSelected, 
-                                                          boolean hasFocus) {
-                comp.setText(null);
-                comp.setIcon(((JLabel)value).getIcon());
-                if (isSelected) {
-                    comp.setBackground(list.getSelectionBackground());
-                    comp.setForeground(list.getSelectionForeground());
-                    comp.setBorder(BorderFactory.createEtchedBorder());
-                } else {
-                    comp.setBackground(list.getBackground());
-                    comp.setForeground(list.getForeground());
-                    comp.setBorder(null);
-                }
-
-                return comp;
-            }
-        }
-
-        if (initSelIndex >= 0)
-            icons.setSelectedIndex(initSelIndex);
-        icons.setCellRenderer(new MyRenderer());
-        icons.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-        icons.setLayoutOrientation(JList.HORIZONTAL_WRAP);
-
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-
-        ok.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                okPressed = true;
-                if (icons.getSelectedValue() != null)
-                    selected = icons.getSelectedIndex(); 
-                dispose();
-            }
-        });
-        cancel.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                okPressed = false;
-                dispose();
-            }
-        });
-        icons.addMouseListener(new MouseAdapter() {
-            public void mouseClicked(MouseEvent e) {
-                if (e.getClickCount() == 2) {
-
-                }
-            }
-        });
-
-        getContentPane().add(new JScrollPane(icons), BorderLayout.CENTER);
-        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-
-        pack();
-        setLocationRelativeTo(parent);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.*;
+
+import javax.swing.*;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+/**
+ * Dialog box for choosing an icon for an external file type.
+ */
+public class IconSelection extends JDialog {
+
+    JList icons;
+    List<String> iconKeys;
+    DefaultListModel listModel;
+    JButton ok = new JButton(Globals.lang("Ok")),
+        cancel = new JButton(Globals.lang("Cancel"));
+    private boolean okPressed = false;
+    private int selected = -1;
+    private JDialog parent;
+
+    public IconSelection(JDialog parent, String initialSelection) {
+        super(parent, Globals.lang("Select icon"), true);
+        this.parent = parent;
+        init(initialSelection);
+    }
+
+    public void setVisible(boolean visible) {
+        if (visible) {
+            okPressed = false;
+            selected = -1;
+        }
+        super.setVisible(visible);
+    }
+
+    /**
+     * After dialog has closed, this method reports whether a selection was made
+     * or it was cancelled.
+     * @return true if a selection was made.
+     */
+    public boolean isOkPressed() {
+        return okPressed;
+    }
+
+    public String getSelectedIconKey() {
+        if (selected >= 0)
+            return iconKeys.get(selected);
+        else
+            return null;
+    }
+
+    private void init(String initialSelection) {
+        int initSelIndex = -1;
+        iconKeys = new ArrayList<String>();
+        Map<String, String> icns = GUIGlobals.getAllIcons();
+        HashSet<ImageIcon> iconSet = new LinkedHashSet<ImageIcon>();
+        for (String key : icns.keySet()){
+            ImageIcon icon = GUIGlobals.getImage(key);
+            if (!iconSet.contains(icon)) {
+                iconKeys.add(key);
+                if (key.equals(initialSelection))
+                    initSelIndex = iconKeys.size()-1;
+            }
+            iconSet.add(icon);
+
+        }
+
+        listModel = new DefaultListModel();
+        icons = new JList(listModel);
+        for (Iterator<ImageIcon> iterator = iconSet.iterator(); iterator.hasNext();) {
+            listModel.addElement(new JLabel(iterator.next()));
+        }
+        class MyRenderer implements ListCellRenderer {
+            JLabel comp = new JLabel();
+            public MyRenderer() {
+                comp.setOpaque(true);
+                comp.setIconTextGap(0);
+                comp.setHorizontalAlignment(JLabel.CENTER);
+            }
+
+            public Component getListCellRendererComponent(JList list, Object value, int i,
+                                                          boolean isSelected, 
+                                                          boolean hasFocus) {
+                comp.setText(null);
+                comp.setIcon(((JLabel)value).getIcon());
+                if (isSelected) {
+                    comp.setBackground(list.getSelectionBackground());
+                    comp.setForeground(list.getSelectionForeground());
+                    comp.setBorder(BorderFactory.createEtchedBorder());
+                } else {
+                    comp.setBackground(list.getBackground());
+                    comp.setForeground(list.getForeground());
+                    comp.setBorder(null);
+                }
+
+                return comp;
+            }
+        }
+
+        if (initSelIndex >= 0)
+            icons.setSelectedIndex(initSelIndex);
+        icons.setCellRenderer(new MyRenderer());
+        icons.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        icons.setLayoutOrientation(JList.HORIZONTAL_WRAP);
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                okPressed = true;
+                if (icons.getSelectedValue() != null)
+                    selected = icons.getSelectedIndex(); 
+                dispose();
+            }
+        });
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                okPressed = false;
+                dispose();
+            }
+        });
+        icons.addMouseListener(new MouseAdapter() {
+            public void mouseClicked(MouseEvent e) {
+                if (e.getClickCount() == 2) {
+
+                }
+            }
+        });
+
+        getContentPane().add(new JScrollPane(icons), BorderLayout.CENTER);
+        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+
+        pack();
+        setLocationRelativeTo(parent);
+    }
+}
diff --git a/src/java/net/sf/jabref/external/MoveFileAction.java b/src/java/net/sf/jabref/external/MoveFileAction.java
index e4e7cd5..4010bd9 100644
--- a/src/java/net/sf/jabref/external/MoveFileAction.java
+++ b/src/java/net/sf/jabref/external/MoveFileAction.java
@@ -1,187 +1,187 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import net.sf.jabref.*;
-import net.sf.jabref.gui.FileListEditor;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.gui.FileDialogs;
-
-import javax.swing.*;
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Action for moving or renaming a file that is linked to from an entry in JabRef.
- */
-public class MoveFileAction extends AbstractAction {
-    private JabRefFrame frame;
-    private EntryEditor eEditor;
-    private FileListEditor editor;
-    private boolean toFileDir;
-
-    public MoveFileAction(JabRefFrame frame, EntryEditor eEditor, FileListEditor editor,
-                          boolean toFileDir) {
-        this.frame = frame;
-        this.eEditor = eEditor;
-        this.editor = editor;
-        this.toFileDir = toFileDir;
-    }
-
-    public void actionPerformed(ActionEvent event) {
-        int selected = editor.getSelectedRow();
-        if (selected == -1)
-            return;
-        FileListEntry flEntry = editor.getTableModel().getEntry(selected);
-        // Check if the current file exists:
-        String ln = flEntry.getLink();
-        boolean httpLink = ln.toLowerCase().startsWith("http");
-        if (httpLink) {
-            // TODO: notify that this operation cannot be done on remote links
-
-        }
-
-        // Get an absolute path representation:
-        String[] dirs = frame.basePanel().metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-        int found = -1;
-        for (int i=0; i<dirs.length; i++)
-            if (new File(dirs[i]).exists()) {
-                found = i;
-                break;
-            }
-        if (found < 0) {
-            JOptionPane.showMessageDialog(frame, Globals.lang("File_directory_is_not_set_or_does_not_exist!"),
-                    Globals.lang("Move/Rename file"), JOptionPane.ERROR_MESSAGE);
-            return;
-        }
-        File file = new File(ln);
-        if (!file.isAbsolute()) {
-            file = Util.expandFilename(ln, dirs);
-        }
-        if ((file != null) && file.exists()) {
-            // Ok, we found the file. Now get a new name:
-            String extension = null;
-            if (flEntry.getType() != null)
-                extension = "." + flEntry.getType().getExtension();
-
-            File newFile = null;
-            boolean repeat = true;
-            while (repeat) {
-                repeat = false;
-                String chosenFile;
-                if (toFileDir) {
-                    // Determine which name to suggest:
-                    String suggName = Util.getLinkedFileName(eEditor.getDatabase(), eEditor.getEntry()).
-                            concat(".").concat(flEntry.getType().extension);
-                    CheckBoxMessage cbm = new CheckBoxMessage(Globals.lang("Move file to file directory?"),
-                            Globals.lang("Rename to '%0'",suggName),
-                            Globals.prefs.getBoolean("renameOnMoveFileToFileDir"));
-                    int answer;
-                    // Only ask about renaming file if the file doesn't have the proper name already:
-                    if (!suggName.equals(file.getName()))
-                        answer = JOptionPane.showConfirmDialog(frame, cbm, Globals.lang("Move/Rename file"),
-                                JOptionPane.YES_NO_OPTION);
-                    else
-                        answer = JOptionPane.showConfirmDialog(frame, Globals.lang("Move file to file directory?"),
-                                Globals.lang("Move/Rename file"), JOptionPane.YES_NO_OPTION);
-                    if (answer != JOptionPane.YES_OPTION)
-                        return;
-                    Globals.prefs.putBoolean("renameOnMoveFileToFileDir", cbm.isSelected());
-                    StringBuilder sb = new StringBuilder(dirs[found]);
-                    if (!dirs[found].endsWith(File.separator))
-                        sb.append(File.separator);
-                    if (cbm.isSelected()) {
-                        // Rename:
-                        sb.append(suggName);
-                    }
-                    else {
-                        // Do not rename:
-                        sb.append(file.getName());
-                    }
-                    chosenFile = sb.toString();
-                } else {
-                    chosenFile = FileDialogs.getNewFile(frame, file, extension, JFileChooser.SAVE_DIALOG, false);
-                }
-                if (chosenFile == null) {
-                    return; // cancelled
-                }
-                newFile = new File(chosenFile);
-                // Check if the file already exists:
-                if (newFile.exists() && (JOptionPane.showConfirmDialog
-                        (frame, "'" + newFile.getName() + "' " + Globals.lang("exists. Overwrite file?"),
-                                Globals.lang("Move/Rename file"), JOptionPane.OK_CANCEL_OPTION)
-                        != JOptionPane.OK_OPTION)) {
-                    if (!toFileDir)
-                        repeat = true;
-                    else
-                        return;
-                }
-            }
-
-            if (!newFile.equals(file)) {
-                try {
-                    boolean success = file.renameTo(newFile);
-                    if (!success) {
-                        success = Util.copyFile(file, newFile, true);
-                    }
-                    if (success) {
-                        // Remove the original file:
-                        file.delete();
-                        // Relativise path, if possible.
-                        String canPath = (new File(dirs[found])).getCanonicalPath();
-                        if (newFile.getCanonicalPath().startsWith(canPath)) {
-                            if ((newFile.getCanonicalPath().length() > canPath.length()) &&
-                                    (newFile.getCanonicalPath().charAt(canPath.length()) == File.separatorChar))
-                                flEntry.setLink(newFile.getCanonicalPath().substring(1+canPath.length()));
-                            else
-                                flEntry.setLink(newFile.getCanonicalPath().substring(canPath.length()));
-
-
-                        }
-                        else
-                            flEntry.setLink(newFile.getCanonicalPath());
-                        eEditor.updateField(editor);
-                        //JOptionPane.showMessageDialog(frame, Globals.lang("File moved"),
-                        //        Globals.lang("Move/Rename file"), JOptionPane.INFORMATION_MESSAGE);
-                        frame.output(Globals.lang("File moved"));
-                    } else {
-                        JOptionPane.showMessageDialog(frame, Globals.lang("Move file failed"),
-                                Globals.lang("Move/Rename file"), JOptionPane.ERROR_MESSAGE);
-                    }
-
-                } catch (SecurityException ex) {
-                    ex.printStackTrace();
-                    JOptionPane.showMessageDialog(frame, Globals.lang("Could not move file") + ": " + ex.getMessage(),
-                            Globals.lang("Move/Rename file"), JOptionPane.ERROR_MESSAGE);
-                } catch (IOException ex) {
-                    ex.printStackTrace();
-                    JOptionPane.showMessageDialog(frame, Globals.lang("Could not move file") + ": " + ex.getMessage(),
-                            Globals.lang("Move/Rename file"), JOptionPane.ERROR_MESSAGE);
-                }
-
-            }
-        }
-        else {
-
-            // File doesn't exist, so we can't move it.
-            JOptionPane.showMessageDialog(frame, Globals.lang("Could not find file '%0'.", flEntry.getLink()),
-                    Globals.lang("File not found"), JOptionPane.ERROR_MESSAGE);
-            
-        }
-
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import net.sf.jabref.*;
+import net.sf.jabref.gui.FileListEditor;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileDialogs;
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Action for moving or renaming a file that is linked to from an entry in JabRef.
+ */
+public class MoveFileAction extends AbstractAction {
+    private JabRefFrame frame;
+    private EntryEditor eEditor;
+    private FileListEditor editor;
+    private boolean toFileDir;
+
+    public MoveFileAction(JabRefFrame frame, EntryEditor eEditor, FileListEditor editor,
+                          boolean toFileDir) {
+        this.frame = frame;
+        this.eEditor = eEditor;
+        this.editor = editor;
+        this.toFileDir = toFileDir;
+    }
+
+    public void actionPerformed(ActionEvent event) {
+        int selected = editor.getSelectedRow();
+        if (selected == -1)
+            return;
+        FileListEntry flEntry = editor.getTableModel().getEntry(selected);
+        // Check if the current file exists:
+        String ln = flEntry.getLink();
+        boolean httpLink = ln.toLowerCase().startsWith("http");
+        if (httpLink) {
+            // TODO: notify that this operation cannot be done on remote links
+
+        }
+
+        // Get an absolute path representation:
+        String[] dirs = frame.basePanel().metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+        int found = -1;
+        for (int i=0; i<dirs.length; i++)
+            if (new File(dirs[i]).exists()) {
+                found = i;
+                break;
+            }
+        if (found < 0) {
+            JOptionPane.showMessageDialog(frame, Globals.lang("File_directory_is_not_set_or_does_not_exist!"),
+                    Globals.lang("Move/Rename file"), JOptionPane.ERROR_MESSAGE);
+            return;
+        }
+        File file = new File(ln);
+        if (!file.isAbsolute()) {
+            file = Util.expandFilename(ln, dirs);
+        }
+        if ((file != null) && file.exists()) {
+            // Ok, we found the file. Now get a new name:
+            String extension = null;
+            if (flEntry.getType() != null)
+                extension = "." + flEntry.getType().getExtension();
+
+            File newFile = null;
+            boolean repeat = true;
+            while (repeat) {
+                repeat = false;
+                String chosenFile;
+                if (toFileDir) {
+                    // Determine which name to suggest:
+                    String suggName = Util.getLinkedFileName(eEditor.getDatabase(), eEditor.getEntry()).
+                            concat(".").concat(flEntry.getType().extension);
+                    CheckBoxMessage cbm = new CheckBoxMessage(Globals.lang("Move file to file directory?"),
+                            Globals.lang("Rename to '%0'",suggName),
+                            Globals.prefs.getBoolean("renameOnMoveFileToFileDir"));
+                    int answer;
+                    // Only ask about renaming file if the file doesn't have the proper name already:
+                    if (!suggName.equals(file.getName()))
+                        answer = JOptionPane.showConfirmDialog(frame, cbm, Globals.lang("Move/Rename file"),
+                                JOptionPane.YES_NO_OPTION);
+                    else
+                        answer = JOptionPane.showConfirmDialog(frame, Globals.lang("Move file to file directory?"),
+                                Globals.lang("Move/Rename file"), JOptionPane.YES_NO_OPTION);
+                    if (answer != JOptionPane.YES_OPTION)
+                        return;
+                    Globals.prefs.putBoolean("renameOnMoveFileToFileDir", cbm.isSelected());
+                    StringBuilder sb = new StringBuilder(dirs[found]);
+                    if (!dirs[found].endsWith(File.separator))
+                        sb.append(File.separator);
+                    if (cbm.isSelected()) {
+                        // Rename:
+                        sb.append(suggName);
+                    }
+                    else {
+                        // Do not rename:
+                        sb.append(file.getName());
+                    }
+                    chosenFile = sb.toString();
+                } else {
+                    chosenFile = FileDialogs.getNewFile(frame, file, extension, JFileChooser.SAVE_DIALOG, false);
+                }
+                if (chosenFile == null) {
+                    return; // cancelled
+                }
+                newFile = new File(chosenFile);
+                // Check if the file already exists:
+                if (newFile.exists() && (JOptionPane.showConfirmDialog
+                        (frame, "'" + newFile.getName() + "' " + Globals.lang("exists. Overwrite file?"),
+                                Globals.lang("Move/Rename file"), JOptionPane.OK_CANCEL_OPTION)
+                        != JOptionPane.OK_OPTION)) {
+                    if (!toFileDir)
+                        repeat = true;
+                    else
+                        return;
+                }
+            }
+
+            if (!newFile.equals(file)) {
+                try {
+                    boolean success = file.renameTo(newFile);
+                    if (!success) {
+                        success = Util.copyFile(file, newFile, true);
+                    }
+                    if (success) {
+                        // Remove the original file:
+                        file.delete();
+                        // Relativise path, if possible.
+                        String canPath = (new File(dirs[found])).getCanonicalPath();
+                        if (newFile.getCanonicalPath().startsWith(canPath)) {
+                            if ((newFile.getCanonicalPath().length() > canPath.length()) &&
+                                    (newFile.getCanonicalPath().charAt(canPath.length()) == File.separatorChar))
+                                flEntry.setLink(newFile.getCanonicalPath().substring(1+canPath.length()));
+                            else
+                                flEntry.setLink(newFile.getCanonicalPath().substring(canPath.length()));
+
+
+                        }
+                        else
+                            flEntry.setLink(newFile.getCanonicalPath());
+                        eEditor.updateField(editor);
+                        //JOptionPane.showMessageDialog(frame, Globals.lang("File moved"),
+                        //        Globals.lang("Move/Rename file"), JOptionPane.INFORMATION_MESSAGE);
+                        frame.output(Globals.lang("File moved"));
+                    } else {
+                        JOptionPane.showMessageDialog(frame, Globals.lang("Move file failed"),
+                                Globals.lang("Move/Rename file"), JOptionPane.ERROR_MESSAGE);
+                    }
+
+                } catch (SecurityException ex) {
+                    ex.printStackTrace();
+                    JOptionPane.showMessageDialog(frame, Globals.lang("Could not move file") + ": " + ex.getMessage(),
+                            Globals.lang("Move/Rename file"), JOptionPane.ERROR_MESSAGE);
+                } catch (IOException ex) {
+                    ex.printStackTrace();
+                    JOptionPane.showMessageDialog(frame, Globals.lang("Could not move file") + ": " + ex.getMessage(),
+                            Globals.lang("Move/Rename file"), JOptionPane.ERROR_MESSAGE);
+                }
+
+            }
+        }
+        else {
+
+            // File doesn't exist, so we can't move it.
+            JOptionPane.showMessageDialog(frame, Globals.lang("Could not find file '%0'.", flEntry.getLink()),
+                    Globals.lang("File not found"), JOptionPane.ERROR_MESSAGE);
+            
+        }
+
+    }
+}
diff --git a/src/java/net/sf/jabref/external/PushToApplication.java b/src/java/net/sf/jabref/external/PushToApplication.java
index 92d7b57..4119666 100644
--- a/src/java/net/sf/jabref/external/PushToApplication.java
+++ b/src/java/net/sf/jabref/external/PushToApplication.java
@@ -1,87 +1,87 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.MetaData;
-
-import javax.swing.*;
-
-/**
- * Class that defines interaction with an external application in the form of
- * "pushing" selected entries to it.
- */
-public interface PushToApplication {
-
-    public String getName();
-
-    public String getApplicationName();
-
-    public String getTooltip();
-
-    public Icon getIcon();
-
-    public String getKeyStrokeName();
-
-
-    /**
-     * This method asks the implementing class to return a JPanel populated
-     * with the imlementation's options panel, if necessary. If the JPanel
-     * is shown to the user, and the user indicates that settings should
-     * be stored, the implementation's storeSettings() method will be called.
-     * This method must make sure all widgets in the panel are in the correct
-     * selection states.
-     *
-     * @return a JPanel containing options, or null if options are not needed.
-     */
-    public JPanel getSettingsPanel();
-
-    /**
-     * This method is called to indicate that the settings panel returned from
-     * the getSettingsPanel() method has been shown to the user and that the
-     * user has indicated that the settings should be stored. This method must
-     * store the state of the widgets in the settings panel to Globals.prefs.
-     */
-    public void storeSettings();
-
-    /**
-     * The actual operation. This method will not be called on the event dispatch
-     * thread, so it should not do GUI operations without utilizing invokeLater().
-     * @param database
-     * @param entries
-     * @param metaData
-     */
-    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries,
-                            String keyString, MetaData metaData);
-
-    /**
-     * Reporting etc., this method is called on the event dispatch thread after
-     * pushEntries() returns.
-     */
-    public void operationCompleted(BasePanel panel);
-
-    /**
-     * Check whether this operation requires BibTeX keys to be set for the entries.
-     * If true is returned an error message will be displayed if keys are missing.
-     * @return true if BibTeX keys are required for this operation.
-     */
-    public boolean requiresBibtexKeys();
-
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.MetaData;
+
+import javax.swing.*;
+
+/**
+ * Class that defines interaction with an external application in the form of
+ * "pushing" selected entries to it.
+ */
+public interface PushToApplication {
+
+    public String getName();
+
+    public String getApplicationName();
+
+    public String getTooltip();
+
+    public Icon getIcon();
+
+    public String getKeyStrokeName();
+
+
+    /**
+     * This method asks the implementing class to return a JPanel populated
+     * with the imlementation's options panel, if necessary. If the JPanel
+     * is shown to the user, and the user indicates that settings should
+     * be stored, the implementation's storeSettings() method will be called.
+     * This method must make sure all widgets in the panel are in the correct
+     * selection states.
+     *
+     * @return a JPanel containing options, or null if options are not needed.
+     */
+    public JPanel getSettingsPanel();
+
+    /**
+     * This method is called to indicate that the settings panel returned from
+     * the getSettingsPanel() method has been shown to the user and that the
+     * user has indicated that the settings should be stored. This method must
+     * store the state of the widgets in the settings panel to Globals.prefs.
+     */
+    public void storeSettings();
+
+    /**
+     * The actual operation. This method will not be called on the event dispatch
+     * thread, so it should not do GUI operations without utilizing invokeLater().
+     * @param database
+     * @param entries
+     * @param metaData
+     */
+    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries,
+                            String keyString, MetaData metaData);
+
+    /**
+     * Reporting etc., this method is called on the event dispatch thread after
+     * pushEntries() returns.
+     */
+    public void operationCompleted(BasePanel panel);
+
+    /**
+     * Check whether this operation requires BibTeX keys to be set for the entries.
+     * If true is returned an error message will be displayed if keys are missing.
+     * @return true if BibTeX keys are required for this operation.
+     */
+    public boolean requiresBibtexKeys();
+
+
+
+}
diff --git a/src/java/net/sf/jabref/external/PushToApplicationAction.java b/src/java/net/sf/jabref/external/PushToApplicationAction.java
index 21f477f..2ad3e90 100644
--- a/src/java/net/sf/jabref/external/PushToApplicationAction.java
+++ b/src/java/net/sf/jabref/external/PushToApplicationAction.java
@@ -1,111 +1,111 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.AbstractAction;
-import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-
-/**
- * An Action class representing the process of invoking a PushToApplication operation.
- */
-public class PushToApplicationAction extends AbstractAction implements Runnable {
-    private PushToApplication operation;
-    private JabRefFrame frame;
-    private BasePanel panel;
-    private BibtexEntry[] entries;
-    
-    public PushToApplicationAction(JabRefFrame frame, PushToApplication operation) {
-        this.frame = frame;
-        putValue(SMALL_ICON, operation.getIcon());
-        putValue(NAME, operation.getName());
-        putValue(SHORT_DESCRIPTION, operation.getTooltip());
-        if (operation.getKeyStrokeName() != null)
-            putValue(ACCELERATOR_KEY, Globals.prefs.getKey(operation.getKeyStrokeName()));
-        this.operation = operation;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        panel = frame.basePanel();
-
-        // Check if a BasePanel exists:
-        if (panel == null)
-            return;
-
-        // Check if any entries are selected:
-        entries = panel.getSelectedEntries();
-        if (entries.length == 0) {
-            JOptionPane.showMessageDialog(frame, Globals.lang("This operation requires one or more entries to be selected."),
-                    (String)getValue(NAME), JOptionPane.ERROR_MESSAGE);
-            return;
-        }
-
-        // If required, check that all entries have BibTeX keys defined:
-        if (operation.requiresBibtexKeys())
-            for (int i=0; i<entries.length; i++) {
-                if ((entries[i].getCiteKey() == null) || (entries[i].getCiteKey().trim().length() == 0)) {
-                    JOptionPane.showMessageDialog(frame, Globals.lang("This operation requires all selected entries to have BibTex keys defined."),
-                        (String)getValue(NAME), JOptionPane.ERROR_MESSAGE);
-                    return;
-                }
-        }
-
-        // All set, call the operation in a new thread:
-        Thread t = new Thread(this);
-        t.start();
-
-    }
-
-    public void run() {
-        // Do the operation:
-        operation.pushEntries(panel.database(), entries, getKeyString(entries), panel.metaData());
-
-        // Call the operationCompleted() method on the event dispatch thread:
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                operation.operationCompleted(panel);
-            }
-        });
-    }
-
-    protected String getKeyString(BibtexEntry[] entries) {
-        StringBuffer result = new StringBuffer();
-        String citeKey = "";//, message = "";
-        boolean first = true;
-        for (int i=0; i<entries.length; i++) {
-            BibtexEntry bes = entries[i];
-            citeKey = bes.getField(BibtexFields.KEY_FIELD);
-            // if the key is empty we give a warning and ignore this entry
-            if (citeKey == null || citeKey.equals(""))
-                continue;
-            if (first) {
-                result.append(citeKey);
-                first = false;
-            } else {
-                result.append(",").append(citeKey);
-            }
-        }
-        return result.toString();
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+
+/**
+ * An Action class representing the process of invoking a PushToApplication operation.
+ */
+public class PushToApplicationAction extends AbstractAction implements Runnable {
+    private PushToApplication operation;
+    private JabRefFrame frame;
+    private BasePanel panel;
+    private BibtexEntry[] entries;
+    
+    public PushToApplicationAction(JabRefFrame frame, PushToApplication operation) {
+        this.frame = frame;
+        putValue(SMALL_ICON, operation.getIcon());
+        putValue(NAME, operation.getName());
+        putValue(SHORT_DESCRIPTION, operation.getTooltip());
+        if (operation.getKeyStrokeName() != null)
+            putValue(ACCELERATOR_KEY, Globals.prefs.getKey(operation.getKeyStrokeName()));
+        this.operation = operation;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        panel = frame.basePanel();
+
+        // Check if a BasePanel exists:
+        if (panel == null)
+            return;
+
+        // Check if any entries are selected:
+        entries = panel.getSelectedEntries();
+        if (entries.length == 0) {
+            JOptionPane.showMessageDialog(frame, Globals.lang("This operation requires one or more entries to be selected."),
+                    (String)getValue(NAME), JOptionPane.ERROR_MESSAGE);
+            return;
+        }
+
+        // If required, check that all entries have BibTeX keys defined:
+        if (operation.requiresBibtexKeys())
+            for (int i=0; i<entries.length; i++) {
+                if ((entries[i].getCiteKey() == null) || (entries[i].getCiteKey().trim().length() == 0)) {
+                    JOptionPane.showMessageDialog(frame, Globals.lang("This operation requires all selected entries to have BibTex keys defined."),
+                        (String)getValue(NAME), JOptionPane.ERROR_MESSAGE);
+                    return;
+                }
+        }
+
+        // All set, call the operation in a new thread:
+        Thread t = new Thread(this);
+        t.start();
+
+    }
+
+    public void run() {
+        // Do the operation:
+        operation.pushEntries(panel.database(), entries, getKeyString(entries), panel.metaData());
+
+        // Call the operationCompleted() method on the event dispatch thread:
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                operation.operationCompleted(panel);
+            }
+        });
+    }
+
+    protected String getKeyString(BibtexEntry[] entries) {
+        StringBuffer result = new StringBuffer();
+        String citeKey = "";//, message = "";
+        boolean first = true;
+        for (int i=0; i<entries.length; i++) {
+            BibtexEntry bes = entries[i];
+            citeKey = bes.getField(BibtexFields.KEY_FIELD);
+            // if the key is empty we give a warning and ignore this entry
+            if (citeKey == null || citeKey.equals(""))
+                continue;
+            if (first) {
+                result.append(citeKey);
+                first = false;
+            } else {
+                result.append(",").append(citeKey);
+            }
+        }
+        return result.toString();
+    }
+}
diff --git a/src/java/net/sf/jabref/external/PushToApplicationButton.java b/src/java/net/sf/jabref/external/PushToApplicationButton.java
index f031d0b..0c086cd 100644
--- a/src/java/net/sf/jabref/external/PushToApplicationButton.java
+++ b/src/java/net/sf/jabref/external/PushToApplicationButton.java
@@ -1,341 +1,341 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MnemonicAwareAction;
-import net.sf.jabref.oo.OpenOfficePanel;
-import net.sf.jabref.plugin.PluginCore;
-import net.sf.jabref.plugin.core.JabRefPlugin;
-import net.sf.jabref.plugin.core.generated._JabRefPlugin;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * Customized UI component for pushing to external applications. Has a selection popup
- * menu to change the selected external application.
- * This class implements the ActionListener interface. When actionPerformed() is
- * invoked, the currently selected PushToApplication is activated. The actionPerformed()
- * method can be called with a null argument.
- */
-public class PushToApplicationButton implements ActionListener {
-
-    public static List<PushToApplication> applications;
-
-    private JabRefFrame frame;
-    private List<PushToApplication> pushActions;
-    private JPanel comp;
-    private JButton pushButton, menuButton;
-    private int selected = 0;
-    private JPopupMenu popup = null;
-    private HashMap<PushToApplication, PushToApplicationAction> actions = new HashMap<PushToApplication, PushToApplicationAction>();
-    private final Dimension buttonDim = new Dimension(23, 23);
-    private static final URL ARROW_ICON = GUIGlobals.class.getResource("/images/secondary_sorted_reverse.png");
-    private MenuAction mAction = new MenuAction();
-    private JPopupMenu optPopup = new JPopupMenu();
-    private JMenuItem settings = new JMenuItem(Globals.lang("Settings"));
-
-    /**
-     * Set up the current available choices:
-     */
-    static {
-
-        applications = new ArrayList<PushToApplication>();
-
-        JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
-        if(jabrefPlugin != null){
-		    List<_JabRefPlugin.PushToApplicationExtension> plugins = jabrefPlugin.getPushToApplicationExtensions();
-		    for (_JabRefPlugin.PushToApplicationExtension extension : plugins) {
-		        applications.add(extension.getPushToApp());
-		    }
-		
-		    applications.add(new PushToLyx());
-		    applications.add(new PushToEmacs());
-		    applications.add(new PushToWinEdt());
-		    applications.add(new PushToLatexEditor());
-		    applications.add(new PushToVim());
-            applications.add(OpenOfficePanel.getInstance());
-            applications.add(new PushToTeXstudio());
-		
-		    // Finally, sort the entries:
-		    //Collections.sort(applications, new PushToApplicationComparator());
-        }
-    }
-
-
-    public PushToApplicationButton(JabRefFrame frame, List<PushToApplication> pushActions) {
-        this.frame = frame;
-        this.pushActions = pushActions;
-        init();
-    }
-
-    private void init() {
-        comp = new JPanel();
-        comp.setLayout(new BorderLayout());
-
-        menuButton = new JButton(new ImageIcon(ARROW_ICON));
-        menuButton.setMargin(new Insets(0,0,0,0));
-        menuButton.setPreferredSize(new Dimension(menuButton.getIcon().getIconWidth(),
-                menuButton.getIcon().getIconHeight()));
-        menuButton.addActionListener(new MenuButtonActionListener());
-        menuButton.setToolTipText(Globals.lang("Select external application"));
-        pushButton = new JButton();
-        if (Globals.prefs.hasKey("pushToApplication")) {
-            String appSelected = Globals.prefs.get("pushToApplication");
-            for (int i=0; i<pushActions.size(); i++) {
-                PushToApplication toApp = pushActions.get(i);
-                if (toApp.getName().equals(appSelected)) {
-                    selected = i;
-                    break;
-                }
-            }
-        }
-
-        setSelected(selected);
-        pushButton.addActionListener(this);
-        pushButton.addMouseListener(new PushButtonMouseListener());
-        pushButton.setOpaque(false);
-        menuButton.setOpaque(false);
-        comp.setOpaque(false);
-        comp.add(pushButton, BorderLayout.CENTER);
-        comp.add(menuButton, BorderLayout.EAST);
-        //comp.setBorder(BorderFactory.createLineBorder(Color.gray));
-        comp.setMaximumSize(comp.getPreferredSize());
-
-        optPopup.add(settings);
-        settings.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                PushToApplication toApp = pushActions.get(selected);
-                JPanel options = toApp.getSettingsPanel();
-                if (options != null) {
-                    showSettingsDialog(frame, toApp, options);
-                }
-
-            }
-        });
-
-        buildPopupMenu();
-    }
-
-    /**
-     * Create a selection menu for the available "Push" options.
-     */
-    private void buildPopupMenu() {
-        popup = new JPopupMenu();
-        int j=0;
-        for (PushToApplication application : pushActions){
-            JMenuItem item = new JMenuItem(application.getApplicationName(),
-                    application.getIcon());
-            item.setToolTipText(application.getTooltip());
-            item.addActionListener(new PopupItemActionListener(j));
-            popup.add(item);
-            j++;
-        }
-    }
-
-    /**
-     * Update the PushButton to default to the given application.
-     * @param i The List index of the application to default to.
-     */
-    private void setSelected(int i) {
-        this.selected = i;
-        PushToApplication toApp = pushActions.get(i);
-        pushButton.setIcon(toApp.getIcon());
-        pushButton.setToolTipText(toApp.getTooltip());
-        pushButton.setPreferredSize(buttonDim);
-
-        Globals.prefs.put("pushToApplication", toApp.getName());
-        mAction.setTitle(toApp.getApplicationName());
-    }
-
-    /**
-     * Get the toolbar component for the push button.
-     * @return The component.
-     */
-    public Component getComponent() {
-       return comp;
-    }
-
-    public Action getMenuAction() {
-        return mAction;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        PushToApplication toApp = pushActions.get(selected);
-
-        // Lazy initialization of the push action:
-        PushToApplicationAction action = actions.get(toApp);
-        if (action == null) {
-            action = new PushToApplicationAction(frame, toApp);
-            actions.put(toApp, action);
-        }
-        action.actionPerformed(new ActionEvent(toApp, 0, "push"));
-    }
-
-    static class BooleanHolder {
-        public BooleanHolder(boolean value) {
-            this.value = value;
-        }
-        public boolean value;
-    }
-
-    public static void showSettingsDialog(Object parent, PushToApplication toApp, JPanel options) {
-        
-        final BooleanHolder okPressed = new BooleanHolder(false);
-        JDialog dg;
-        if (parent instanceof JDialog)
-            dg = new JDialog((JDialog)parent, Globals.lang("Settings"), true);
-        else
-            dg = new JDialog((JFrame)parent, Globals.lang("Settings"), true);
-        final JDialog diag = dg;
-        options.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        diag.getContentPane().add(options, BorderLayout.CENTER);
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        JButton ok = new JButton(Globals.lang("Ok"));
-        JButton cancel = new JButton(Globals.lang("Cancel"));
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-        ok.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                okPressed.value = true;
-                diag.dispose();
-            }
-        });
-        cancel.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                diag.dispose();
-            }
-        });
-        // Key bindings:
-        ActionMap am = bb.getPanel().getActionMap();
-        InputMap im = bb.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", new AbstractAction() {
-            public void actionPerformed(ActionEvent e) {
-                diag.dispose();
-            }
-        });
-        diag.pack();
-        if (parent instanceof JDialog)
-            diag.setLocationRelativeTo((JDialog)parent);
-        else
-            diag.setLocationRelativeTo((JFrame)parent);
-        // Show the dialog:
-        diag.setVisible(true);
-        // If the user pressed Ok, ask the PushToApplication implementation
-        // to store its settings:
-        if (okPressed.value) {
-            toApp.storeSettings();
-        }
-    }
-
-    class PopupItemActionListener implements ActionListener {
-        private int index;
-        public PopupItemActionListener(int index) {
-            this.index = index;
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            // Change the selection:
-            setSelected(index);
-            // Invoke the selected operation (is that expected behaviour?):
-            //PushToApplicationButton.this.actionPerformed(null);
-            // It makes sense to transfer focus to the push button after the
-            // menu closes:
-            pushButton.requestFocus();
-        }
-    }
-
-
-    class MenuButtonActionListener implements ActionListener {
-
-        public void actionPerformed(ActionEvent e) {
-            // Lazy initialization of the popup menu:
-            if (popup == null)
-                buildPopupMenu();
-            popup.show(comp, 0, menuButton.getHeight());
-        }
-    }
-
-    class MenuAction extends MnemonicAwareAction {
-
-        public MenuAction() {
-            putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Push to application"));
-        }
-
-        public void setTitle(String appName) {
-            putValue(NAME, Globals.lang("Push entries to external application (%0)",
-                    appName));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            PushToApplicationButton.this.actionPerformed(null);
-        }
-    }
-
-    class PushButtonMouseListener extends MouseAdapter {
-        public void mousePressed(MouseEvent event) {
-            if (event.isPopupTrigger())
-                processPopupTrigger(event);
-        }
-
-        public void mouseClicked(MouseEvent event) {
-            if (event.isPopupTrigger())
-                processPopupTrigger(event);
-        }
-
-        public void mouseReleased(MouseEvent event) {
-            if (event.isPopupTrigger())
-                processPopupTrigger(event);
-        }
-
-        private void processPopupTrigger(MouseEvent e) {
-            // We only want to show the popup if a settings panel exists for the selected
-            // item:
-            PushToApplication toApp = pushActions.get(selected);
-            if (toApp.getSettingsPanel() != null)
-                optPopup.show(pushButton, e.getX(), e.getY());
-
-        }
-    }
-
-    /**
-     * Comparator for sorting the selection according to name.
-     */
-    static class PushToApplicationComparator implements Comparator<PushToApplication> {
-
-        public int compare(PushToApplication one, PushToApplication two) {
-            return one.getName().compareTo(two.getName());
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.MnemonicAwareAction;
+import net.sf.jabref.oo.OpenOfficePanel;
+import net.sf.jabref.plugin.PluginCore;
+import net.sf.jabref.plugin.core.JabRefPlugin;
+import net.sf.jabref.plugin.core.generated._JabRefPlugin;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * Customized UI component for pushing to external applications. Has a selection popup
+ * menu to change the selected external application.
+ * This class implements the ActionListener interface. When actionPerformed() is
+ * invoked, the currently selected PushToApplication is activated. The actionPerformed()
+ * method can be called with a null argument.
+ */
+public class PushToApplicationButton implements ActionListener {
+
+    public static List<PushToApplication> applications;
+
+    private JabRefFrame frame;
+    private List<PushToApplication> pushActions;
+    private JPanel comp;
+    private JButton pushButton, menuButton;
+    private int selected = 0;
+    private JPopupMenu popup = null;
+    private HashMap<PushToApplication, PushToApplicationAction> actions = new HashMap<PushToApplication, PushToApplicationAction>();
+    private final Dimension buttonDim = new Dimension(23, 23);
+    private static final URL ARROW_ICON = GUIGlobals.class.getResource("/images/secondary_sorted_reverse.png");
+    private MenuAction mAction = new MenuAction();
+    private JPopupMenu optPopup = new JPopupMenu();
+    private JMenuItem settings = new JMenuItem(Globals.lang("Settings"));
+
+    /**
+     * Set up the current available choices:
+     */
+    static {
+
+        applications = new ArrayList<PushToApplication>();
+
+        JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
+        if(jabrefPlugin != null){
+		    List<_JabRefPlugin.PushToApplicationExtension> plugins = jabrefPlugin.getPushToApplicationExtensions();
+		    for (_JabRefPlugin.PushToApplicationExtension extension : plugins) {
+		        applications.add(extension.getPushToApp());
+		    }
+		
+		    applications.add(new PushToLyx());
+		    applications.add(new PushToEmacs());
+		    applications.add(new PushToWinEdt());
+		    applications.add(new PushToLatexEditor());
+		    applications.add(new PushToVim());
+            applications.add(OpenOfficePanel.getInstance());
+            applications.add(new PushToTeXstudio());
+		
+		    // Finally, sort the entries:
+		    //Collections.sort(applications, new PushToApplicationComparator());
+        }
+    }
+
+
+    public PushToApplicationButton(JabRefFrame frame, List<PushToApplication> pushActions) {
+        this.frame = frame;
+        this.pushActions = pushActions;
+        init();
+    }
+
+    private void init() {
+        comp = new JPanel();
+        comp.setLayout(new BorderLayout());
+
+        menuButton = new JButton(new ImageIcon(ARROW_ICON));
+        menuButton.setMargin(new Insets(0,0,0,0));
+        menuButton.setPreferredSize(new Dimension(menuButton.getIcon().getIconWidth(),
+                menuButton.getIcon().getIconHeight()));
+        menuButton.addActionListener(new MenuButtonActionListener());
+        menuButton.setToolTipText(Globals.lang("Select external application"));
+        pushButton = new JButton();
+        if (Globals.prefs.hasKey("pushToApplication")) {
+            String appSelected = Globals.prefs.get("pushToApplication");
+            for (int i=0; i<pushActions.size(); i++) {
+                PushToApplication toApp = pushActions.get(i);
+                if (toApp.getName().equals(appSelected)) {
+                    selected = i;
+                    break;
+                }
+            }
+        }
+
+        setSelected(selected);
+        pushButton.addActionListener(this);
+        pushButton.addMouseListener(new PushButtonMouseListener());
+        pushButton.setOpaque(false);
+        menuButton.setOpaque(false);
+        comp.setOpaque(false);
+        comp.add(pushButton, BorderLayout.CENTER);
+        comp.add(menuButton, BorderLayout.EAST);
+        //comp.setBorder(BorderFactory.createLineBorder(Color.gray));
+        comp.setMaximumSize(comp.getPreferredSize());
+
+        optPopup.add(settings);
+        settings.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                PushToApplication toApp = pushActions.get(selected);
+                JPanel options = toApp.getSettingsPanel();
+                if (options != null) {
+                    showSettingsDialog(frame, toApp, options);
+                }
+
+            }
+        });
+
+        buildPopupMenu();
+    }
+
+    /**
+     * Create a selection menu for the available "Push" options.
+     */
+    private void buildPopupMenu() {
+        popup = new JPopupMenu();
+        int j=0;
+        for (PushToApplication application : pushActions){
+            JMenuItem item = new JMenuItem(application.getApplicationName(),
+                    application.getIcon());
+            item.setToolTipText(application.getTooltip());
+            item.addActionListener(new PopupItemActionListener(j));
+            popup.add(item);
+            j++;
+        }
+    }
+
+    /**
+     * Update the PushButton to default to the given application.
+     * @param i The List index of the application to default to.
+     */
+    private void setSelected(int i) {
+        this.selected = i;
+        PushToApplication toApp = pushActions.get(i);
+        pushButton.setIcon(toApp.getIcon());
+        pushButton.setToolTipText(toApp.getTooltip());
+        pushButton.setPreferredSize(buttonDim);
+
+        Globals.prefs.put("pushToApplication", toApp.getName());
+        mAction.setTitle(toApp.getApplicationName());
+    }
+
+    /**
+     * Get the toolbar component for the push button.
+     * @return The component.
+     */
+    public Component getComponent() {
+       return comp;
+    }
+
+    public Action getMenuAction() {
+        return mAction;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        PushToApplication toApp = pushActions.get(selected);
+
+        // Lazy initialization of the push action:
+        PushToApplicationAction action = actions.get(toApp);
+        if (action == null) {
+            action = new PushToApplicationAction(frame, toApp);
+            actions.put(toApp, action);
+        }
+        action.actionPerformed(new ActionEvent(toApp, 0, "push"));
+    }
+
+    static class BooleanHolder {
+        public BooleanHolder(boolean value) {
+            this.value = value;
+        }
+        public boolean value;
+    }
+
+    public static void showSettingsDialog(Object parent, PushToApplication toApp, JPanel options) {
+        
+        final BooleanHolder okPressed = new BooleanHolder(false);
+        JDialog dg;
+        if (parent instanceof JDialog)
+            dg = new JDialog((JDialog)parent, Globals.lang("Settings"), true);
+        else
+            dg = new JDialog((JFrame)parent, Globals.lang("Settings"), true);
+        final JDialog diag = dg;
+        options.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        diag.getContentPane().add(options, BorderLayout.CENTER);
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        JButton ok = new JButton(Globals.lang("Ok"));
+        JButton cancel = new JButton(Globals.lang("Cancel"));
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                okPressed.value = true;
+                diag.dispose();
+            }
+        });
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                diag.dispose();
+            }
+        });
+        // Key bindings:
+        ActionMap am = bb.getPanel().getActionMap();
+        InputMap im = bb.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                diag.dispose();
+            }
+        });
+        diag.pack();
+        if (parent instanceof JDialog)
+            diag.setLocationRelativeTo((JDialog)parent);
+        else
+            diag.setLocationRelativeTo((JFrame)parent);
+        // Show the dialog:
+        diag.setVisible(true);
+        // If the user pressed Ok, ask the PushToApplication implementation
+        // to store its settings:
+        if (okPressed.value) {
+            toApp.storeSettings();
+        }
+    }
+
+    class PopupItemActionListener implements ActionListener {
+        private int index;
+        public PopupItemActionListener(int index) {
+            this.index = index;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            // Change the selection:
+            setSelected(index);
+            // Invoke the selected operation (is that expected behaviour?):
+            //PushToApplicationButton.this.actionPerformed(null);
+            // It makes sense to transfer focus to the push button after the
+            // menu closes:
+            pushButton.requestFocus();
+        }
+    }
+
+
+    class MenuButtonActionListener implements ActionListener {
+
+        public void actionPerformed(ActionEvent e) {
+            // Lazy initialization of the popup menu:
+            if (popup == null)
+                buildPopupMenu();
+            popup.show(comp, 0, menuButton.getHeight());
+        }
+    }
+
+    class MenuAction extends MnemonicAwareAction {
+
+        public MenuAction() {
+            putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Push to application"));
+        }
+
+        public void setTitle(String appName) {
+            putValue(NAME, Globals.lang("Push entries to external application (%0)",
+                    appName));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            PushToApplicationButton.this.actionPerformed(null);
+        }
+    }
+
+    class PushButtonMouseListener extends MouseAdapter {
+        public void mousePressed(MouseEvent event) {
+            if (event.isPopupTrigger())
+                processPopupTrigger(event);
+        }
+
+        public void mouseClicked(MouseEvent event) {
+            if (event.isPopupTrigger())
+                processPopupTrigger(event);
+        }
+
+        public void mouseReleased(MouseEvent event) {
+            if (event.isPopupTrigger())
+                processPopupTrigger(event);
+        }
+
+        private void processPopupTrigger(MouseEvent e) {
+            // We only want to show the popup if a settings panel exists for the selected
+            // item:
+            PushToApplication toApp = pushActions.get(selected);
+            if (toApp.getSettingsPanel() != null)
+                optPopup.show(pushButton, e.getX(), e.getY());
+
+        }
+    }
+
+    /**
+     * Comparator for sorting the selection according to name.
+     */
+    static class PushToApplicationComparator implements Comparator<PushToApplication> {
+
+        public int compare(PushToApplication one, PushToApplication two) {
+            return one.getName().compareTo(two.getName());
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/external/PushToEmacs.java b/src/java/net/sf/jabref/external/PushToEmacs.java
index 7163b20..1a3b4ba 100644
--- a/src/java/net/sf/jabref/external/PushToEmacs.java
+++ b/src/java/net/sf/jabref/external/PushToEmacs.java
@@ -1,202 +1,202 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.swing.*;
-
-import net.sf.jabref.*;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Jan 14, 2006
- * Time: 4:55:23 PM
- */
-public class PushToEmacs implements PushToApplication {
-	
-    private JPanel settings = null;
-    private JTextField citeCommand = new JTextField(30);
-    private JTextField emacsPath = new JTextField(30);
-    private JTextField additionalParams = new JTextField(30);
-    private JCheckBox useEmacs23 = new JCheckBox(); 
-    
-    private boolean couldNotConnect=false, couldNotRunClient=false;
-
-    public String getName() {
-        return Globals.menuTitle("Insert selected citations into Emacs") ;
-    }
-
-    public String getApplicationName() {
-        return "Emacs";
-    }
-
-    public String getTooltip() {
-        return Globals.lang("Push selection to Emacs");
-    }
-
-    public Icon getIcon() {
-        return GUIGlobals.getImage("emacs");
-    }
-
-    public String getKeyStrokeName() {
-        return "Push to Emacs";
-    }
-
-    public JPanel getSettingsPanel() {
-        if (settings == null)
-            initSettingsPanel();
-        citeCommand.setText(Globals.prefs.get("citeCommandEmacs"));
-        emacsPath.setText(Globals.prefs.get(JabRefPreferences.EMACS_PATH));
-        additionalParams.setText(Globals.prefs.get(JabRefPreferences.EMACS_ADDITIONAL_PARAMETERS));
-        useEmacs23.setSelected(Globals.prefs.getBoolean(JabRefPreferences.EMACS_23));
-        return settings;
-    }
-
-    public void storeSettings() {
-        Globals.prefs.put("citeCommandEmacs", citeCommand.getText());
-        Globals.prefs.put(JabRefPreferences.EMACS_PATH, emacsPath.getText());
-        Globals.prefs.put(JabRefPreferences.EMACS_ADDITIONAL_PARAMETERS, additionalParams.getText());
-        Globals.prefs.putBoolean(JabRefPreferences.EMACS_23, useEmacs23.isSelected());
-    }
-
-    private void initSettingsPanel() {
-        DefaultFormBuilder builder = new DefaultFormBuilder(
-                new FormLayout("left:pref, 4dlu, fill:pref, 4dlu, fill:pref", ""));
-        builder.append(new JLabel(Globals.lang("Path to gnuclient or emacsclient").concat(":")));
-        builder.append(emacsPath);
-        BrowseAction action = new BrowseAction(null, emacsPath, false);
-        JButton browse = new JButton(Globals.lang("Browse"));
-        browse.addActionListener(action);
-        builder.append(browse);
-        builder.nextLine();
-        builder.append(Globals.lang("Additional parameters").concat(":"));
-        builder.append(additionalParams);
-        builder.nextLine();
-        builder.append(Globals.lang("Use EMACS 23 insertion string").concat(":"));
-        builder.append(useEmacs23);
-        builder.nextLine();
-        builder.append(Globals.lang("Cite command") + ":");
-        builder.append(citeCommand);
-        settings = builder.getPanel();
-    }
-
-    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries, String keys, MetaData metaData) {
-
-        couldNotConnect=false;
-        couldNotRunClient=false;
-        String command = Globals.prefs.get(JabRefPreferences.EMACS_PATH);
-        String addParams[] = Globals.prefs.get(JabRefPreferences.EMACS_ADDITIONAL_PARAMETERS).split(" ");
-        try {
-        	String[] com = new String[addParams.length+2];
-        	com[0] = command;
-        	for (int i=0; i<addParams.length; i++) {
-        		com[i+1] = addParams[i];
-        	}
-        	String prefix;        	
-        	String suffix;
-        	if (Globals.prefs.getBoolean(JabRefPreferences.EMACS_23)) {
-        		prefix = "(with-current-buffer (window-buffer) (insert ";
-        		suffix = "))";
-        	} else {
-        		prefix = "(insert ";
-        		suffix = ")";
-        	}
-        		
-            com[com.length-1] = Globals.ON_WIN ?
-                // Windows gnuclient escaping:
-                // java string: "(insert \\\"\\\\cite{Blah2001}\\\")";
-                // so cmd receives: (insert \"\\cite{Blah2001}\")
-                // so emacs receives: (insert "\cite{Blah2001}")
-                prefix.concat("\\\"\\" + Globals.prefs.get("citeCommandEmacs").replaceAll("\\\\", "\\\\\\\\") +
-                        "{" + keys + "}\\\"").concat(suffix)
-            :
-                // Linux gnuclient escaping:
-                // java string: "(insert \"\\\\cite{Blah2001}\")"
-                // so sh receives: (insert "\\cite{Blah2001}")
-                // so emacs receives: (insert "\cite{Blah2001}")
-                prefix.concat("\"" + Globals.prefs.get("citeCommandEmacs").replaceAll("\\\\", "\\\\\\\\") +
-                       "{" + keys + "}\"").concat(suffix);
-
-            final Process p = Runtime.getRuntime().exec(com);
-
-            Runnable errorListener = new Runnable() {
-                public void run() {
-                    InputStream out = p.getErrorStream();
-//                    try {
-//                    	if (out.available() <= 0)
-//                    		out = p.getInputStream();
-//                    } catch (Exception e) {
-//                    }
-                    int c;
-                    StringBuffer sb = new StringBuffer();
-                    try {
-                        while ((c = out.read()) != -1)
-                            sb.append((char) c);
-                    } catch (IOException e) {
-                        e.printStackTrace();
-                    }
-                    // Error stream has been closed. See if there were any errors:
-                    if (sb.toString().trim().length() > 0) {
-                    	System.out.println(sb.toString());
-                        couldNotConnect = true;
-                        return;
-                    }
-                }
-            };
-            Thread t = new Thread(errorListener);
-            t.start();
-            t.join();
-        }
-        catch (IOException excep) {
-            couldNotRunClient = true;
-            return;
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-
-    }
-
-    public void operationCompleted(BasePanel panel) {
-        if (couldNotConnect)
-            JOptionPane.showMessageDialog(
-                panel.frame(),
-                "<HTML>"+
-                Globals.lang("Could not connect to a running gnuserv process. Make sure that "
-                +"Emacs or XEmacs is running,<BR>and that the server has been started "
-                +"(by running the command 'server-start'/'gnuserv-start').")
-                +"</HTML>",
-                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-        else if (couldNotRunClient)
-            JOptionPane.showMessageDialog(
-                panel.frame(),
-                Globals.lang("Could not run the gnuclient/emacsclient program. Make sure you have "
-                +"the emacsclient/gnuclient program installed and available in the PATH."),
-                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-        else {
-            panel.output(Globals.lang("Pushed citations to Emacs"));
-        }
-    }
-
-    public boolean requiresBibtexKeys() {
-        return true;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.swing.*;
+
+import net.sf.jabref.*;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Jan 14, 2006
+ * Time: 4:55:23 PM
+ */
+public class PushToEmacs implements PushToApplication {
+	
+    private JPanel settings = null;
+    private JTextField citeCommand = new JTextField(30);
+    private JTextField emacsPath = new JTextField(30);
+    private JTextField additionalParams = new JTextField(30);
+    private JCheckBox useEmacs23 = new JCheckBox(); 
+    
+    private boolean couldNotConnect=false, couldNotRunClient=false;
+
+    public String getName() {
+        return Globals.menuTitle("Insert selected citations into Emacs") ;
+    }
+
+    public String getApplicationName() {
+        return "Emacs";
+    }
+
+    public String getTooltip() {
+        return Globals.lang("Push selection to Emacs");
+    }
+
+    public Icon getIcon() {
+        return GUIGlobals.getImage("emacs");
+    }
+
+    public String getKeyStrokeName() {
+        return "Push to Emacs";
+    }
+
+    public JPanel getSettingsPanel() {
+        if (settings == null)
+            initSettingsPanel();
+        citeCommand.setText(Globals.prefs.get("citeCommandEmacs"));
+        emacsPath.setText(Globals.prefs.get(JabRefPreferences.EMACS_PATH));
+        additionalParams.setText(Globals.prefs.get(JabRefPreferences.EMACS_ADDITIONAL_PARAMETERS));
+        useEmacs23.setSelected(Globals.prefs.getBoolean(JabRefPreferences.EMACS_23));
+        return settings;
+    }
+
+    public void storeSettings() {
+        Globals.prefs.put("citeCommandEmacs", citeCommand.getText());
+        Globals.prefs.put(JabRefPreferences.EMACS_PATH, emacsPath.getText());
+        Globals.prefs.put(JabRefPreferences.EMACS_ADDITIONAL_PARAMETERS, additionalParams.getText());
+        Globals.prefs.putBoolean(JabRefPreferences.EMACS_23, useEmacs23.isSelected());
+    }
+
+    private void initSettingsPanel() {
+        DefaultFormBuilder builder = new DefaultFormBuilder(
+                new FormLayout("left:pref, 4dlu, fill:pref, 4dlu, fill:pref", ""));
+        builder.append(new JLabel(Globals.lang("Path to gnuclient or emacsclient").concat(":")));
+        builder.append(emacsPath);
+        BrowseAction action = new BrowseAction(null, emacsPath, false);
+        JButton browse = new JButton(Globals.lang("Browse"));
+        browse.addActionListener(action);
+        builder.append(browse);
+        builder.nextLine();
+        builder.append(Globals.lang("Additional parameters").concat(":"));
+        builder.append(additionalParams);
+        builder.nextLine();
+        builder.append(Globals.lang("Use EMACS 23 insertion string").concat(":"));
+        builder.append(useEmacs23);
+        builder.nextLine();
+        builder.append(Globals.lang("Cite command") + ":");
+        builder.append(citeCommand);
+        settings = builder.getPanel();
+    }
+
+    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries, String keys, MetaData metaData) {
+
+        couldNotConnect=false;
+        couldNotRunClient=false;
+        String command = Globals.prefs.get(JabRefPreferences.EMACS_PATH);
+        String addParams[] = Globals.prefs.get(JabRefPreferences.EMACS_ADDITIONAL_PARAMETERS).split(" ");
+        try {
+        	String[] com = new String[addParams.length+2];
+        	com[0] = command;
+        	for (int i=0; i<addParams.length; i++) {
+        		com[i+1] = addParams[i];
+        	}
+        	String prefix;        	
+        	String suffix;
+        	if (Globals.prefs.getBoolean(JabRefPreferences.EMACS_23)) {
+        		prefix = "(with-current-buffer (window-buffer) (insert ";
+        		suffix = "))";
+        	} else {
+        		prefix = "(insert ";
+        		suffix = ")";
+        	}
+        		
+            com[com.length-1] = Globals.ON_WIN ?
+                // Windows gnuclient escaping:
+                // java string: "(insert \\\"\\\\cite{Blah2001}\\\")";
+                // so cmd receives: (insert \"\\cite{Blah2001}\")
+                // so emacs receives: (insert "\cite{Blah2001}")
+                prefix.concat("\\\"\\" + Globals.prefs.get("citeCommandEmacs").replaceAll("\\\\", "\\\\\\\\") +
+                        "{" + keys + "}\\\"").concat(suffix)
+            :
+                // Linux gnuclient escaping:
+                // java string: "(insert \"\\\\cite{Blah2001}\")"
+                // so sh receives: (insert "\\cite{Blah2001}")
+                // so emacs receives: (insert "\cite{Blah2001}")
+                prefix.concat("\"" + Globals.prefs.get("citeCommandEmacs").replaceAll("\\\\", "\\\\\\\\") +
+                       "{" + keys + "}\"").concat(suffix);
+
+            final Process p = Runtime.getRuntime().exec(com);
+
+            Runnable errorListener = new Runnable() {
+                public void run() {
+                    InputStream out = p.getErrorStream();
+//                    try {
+//                    	if (out.available() <= 0)
+//                    		out = p.getInputStream();
+//                    } catch (Exception e) {
+//                    }
+                    int c;
+                    StringBuffer sb = new StringBuffer();
+                    try {
+                        while ((c = out.read()) != -1)
+                            sb.append((char) c);
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                    // Error stream has been closed. See if there were any errors:
+                    if (sb.toString().trim().length() > 0) {
+                    	System.out.println(sb.toString());
+                        couldNotConnect = true;
+                        return;
+                    }
+                }
+            };
+            Thread t = new Thread(errorListener);
+            t.start();
+            t.join();
+        }
+        catch (IOException excep) {
+            couldNotRunClient = true;
+            return;
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public void operationCompleted(BasePanel panel) {
+        if (couldNotConnect)
+            JOptionPane.showMessageDialog(
+                panel.frame(),
+                "<HTML>"+
+                Globals.lang("Could not connect to a running gnuserv process. Make sure that "
+                +"Emacs or XEmacs is running,<BR>and that the server has been started "
+                +"(by running the command 'server-start'/'gnuserv-start').")
+                +"</HTML>",
+                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+        else if (couldNotRunClient)
+            JOptionPane.showMessageDialog(
+                panel.frame(),
+                Globals.lang("Could not run the gnuclient/emacsclient program. Make sure you have "
+                +"the emacsclient/gnuclient program installed and available in the PATH."),
+                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+        else {
+            panel.output(Globals.lang("Pushed citations to Emacs"));
+        }
+    }
+
+    public boolean requiresBibtexKeys() {
+        return true;
+    }
+}
diff --git a/src/java/net/sf/jabref/external/PushToLatexEditor.java b/src/java/net/sf/jabref/external/PushToLatexEditor.java
index b9205b8..52377d4 100644
--- a/src/java/net/sf/jabref/external/PushToLatexEditor.java
+++ b/src/java/net/sf/jabref/external/PushToLatexEditor.java
@@ -1,128 +1,128 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.io.IOException;
-
-import javax.swing.*;
-
-import net.sf.jabref.*;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Class for pushing entries into LatexEditor.
- */
-public class PushToLatexEditor implements PushToApplication {
-
-    private boolean couldNotCall=false;
-    private boolean notDefined=false;
-    private JPanel settings = null;
-    private JTextField ledPath = new JTextField(30),
-        citeCommand = new JTextField(30);
-
-    public String getName() {
-        return Globals.menuTitle("Insert selected citations into LatexEditor");
-    }
-
-    public String getApplicationName() {
-        return "LatexEditor";
-    }
-
-    public String getTooltip() {
-        return Globals.lang("Push to LatexEditor");
-    }
-
-    public Icon getIcon() {
-        return GUIGlobals.getImage("edit");
-    }
-
-    public String getKeyStrokeName() {
-        return null;
-    }
-
-    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries, String keyString, MetaData metaData) {
-
-        couldNotCall = false;
-        notDefined = false;
-
-        String led = Globals.prefs.get("latexEditorPath");
-
-        if ((led == null) || (led.trim().length() == 0)) {
-            notDefined = true;
-            return;
-        }
-
-        try {
-            StringBuffer toSend = new StringBuffer("-i ")
-                    .append(Globals.prefs.get("citeCommandLed")).append("{")
-                    .append(keyString)
-                    .append("}");
-            Runtime.getRuntime().exec(led + " " + toSend.toString());
-
-        }
-
-        catch (IOException excep) {
-            couldNotCall = true;
-            excep.printStackTrace();
-        }
-    }
-
-    public void operationCompleted(BasePanel panel) {
-        if (notDefined) {
-            panel.output(Globals.lang("Error") + ": "+
-                    Globals.lang("Path to %0 not defined", getApplicationName())+".");
-        }
-        else if (couldNotCall) {
-            panel.output(Globals.lang("Error") + ": " + Globals.lang("Could not call executable") + " '"
-                    +Globals.prefs.get("latexEditorPath") + "'.");
-        }
-        else
-            Globals.lang("Pushed citations to %0", "LatexEditor");
-    }
-
-    public boolean requiresBibtexKeys() {
-        return true;
-    }
-
-    public JPanel getSettingsPanel() {
-        if (settings == null)
-            initSettingsPanel();
-        ledPath.setText(Globals.prefs.get("latexEditorPath"));
-        citeCommand.setText(Globals.prefs.get("citeCommandLed"));
-        return settings;
-    }
-
-    private void initSettingsPanel() {
-        DefaultFormBuilder builder = new DefaultFormBuilder(
-                new FormLayout("left:pref, 4dlu, fill:pref, 4dlu, fill:pref", ""));
-        builder.append(new JLabel(Globals.lang("Path to LatexEditor (LEd.exe)") + ":"));
-        builder.append(ledPath);
-        BrowseAction action = new BrowseAction(null, ledPath, false);
-        JButton browse = new JButton(Globals.lang("Browse"));
-        browse.addActionListener(action);
-        builder.append(browse);
-        builder.nextLine();
-        builder.append(Globals.lang("Cite command") + ":");
-        builder.append(citeCommand);
-        settings = builder.getPanel();
-    }
-
-    public void storeSettings() {
-        Globals.prefs.put("latexEditorPath", ledPath.getText());
-        Globals.prefs.put("citeCommandLed", citeCommand.getText());
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.io.IOException;
+
+import javax.swing.*;
+
+import net.sf.jabref.*;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Class for pushing entries into LatexEditor.
+ */
+public class PushToLatexEditor implements PushToApplication {
+
+    private boolean couldNotCall=false;
+    private boolean notDefined=false;
+    private JPanel settings = null;
+    private JTextField ledPath = new JTextField(30),
+        citeCommand = new JTextField(30);
+
+    public String getName() {
+        return Globals.menuTitle("Insert selected citations into LatexEditor");
+    }
+
+    public String getApplicationName() {
+        return "LatexEditor";
+    }
+
+    public String getTooltip() {
+        return Globals.lang("Push to LatexEditor");
+    }
+
+    public Icon getIcon() {
+        return GUIGlobals.getImage("edit");
+    }
+
+    public String getKeyStrokeName() {
+        return null;
+    }
+
+    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries, String keyString, MetaData metaData) {
+
+        couldNotCall = false;
+        notDefined = false;
+
+        String led = Globals.prefs.get("latexEditorPath");
+
+        if ((led == null) || (led.trim().length() == 0)) {
+            notDefined = true;
+            return;
+        }
+
+        try {
+            StringBuffer toSend = new StringBuffer("-i ")
+                    .append(Globals.prefs.get("citeCommandLed")).append("{")
+                    .append(keyString)
+                    .append("}");
+            Runtime.getRuntime().exec(led + " " + toSend.toString());
+
+        }
+
+        catch (IOException excep) {
+            couldNotCall = true;
+            excep.printStackTrace();
+        }
+    }
+
+    public void operationCompleted(BasePanel panel) {
+        if (notDefined) {
+            panel.output(Globals.lang("Error") + ": "+
+                    Globals.lang("Path to %0 not defined", getApplicationName())+".");
+        }
+        else if (couldNotCall) {
+            panel.output(Globals.lang("Error") + ": " + Globals.lang("Could not call executable") + " '"
+                    +Globals.prefs.get("latexEditorPath") + "'.");
+        }
+        else
+            Globals.lang("Pushed citations to %0", "LatexEditor");
+    }
+
+    public boolean requiresBibtexKeys() {
+        return true;
+    }
+
+    public JPanel getSettingsPanel() {
+        if (settings == null)
+            initSettingsPanel();
+        ledPath.setText(Globals.prefs.get("latexEditorPath"));
+        citeCommand.setText(Globals.prefs.get("citeCommandLed"));
+        return settings;
+    }
+
+    private void initSettingsPanel() {
+        DefaultFormBuilder builder = new DefaultFormBuilder(
+                new FormLayout("left:pref, 4dlu, fill:pref, 4dlu, fill:pref", ""));
+        builder.append(new JLabel(Globals.lang("Path to LatexEditor (LEd.exe)") + ":"));
+        builder.append(ledPath);
+        BrowseAction action = new BrowseAction(null, ledPath, false);
+        JButton browse = new JButton(Globals.lang("Browse"));
+        browse.addActionListener(action);
+        builder.append(browse);
+        builder.nextLine();
+        builder.append(Globals.lang("Cite command") + ":");
+        builder.append(citeCommand);
+        settings = builder.getPanel();
+    }
+
+    public void storeSettings() {
+        Globals.prefs.put("latexEditorPath", ledPath.getText());
+        Globals.prefs.put("citeCommandLed", citeCommand.getText());
+    }
+}
diff --git a/src/java/net/sf/jabref/external/PushToLyx.java b/src/java/net/sf/jabref/external/PushToLyx.java
index f8724d7..a23d3af 100644
--- a/src/java/net/sf/jabref/external/PushToLyx.java
+++ b/src/java/net/sf/jabref/external/PushToLyx.java
@@ -1,155 +1,155 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-
-import javax.swing.*;
-
-import net.sf.jabref.*;
-
-public class PushToLyx implements PushToApplication {
-
-    private JTextField lyxPipe=new JTextField(30);
-    private JPanel settings = null;
-
-    private boolean couldNotFindPipe=false;
-    private boolean couldNotWrite=false;
-    private String message = "";
-
-    public void pushEntries(BibtexDatabase database, final BibtexEntry[] entries, final String keyString, MetaData metaData) {
-
-        couldNotFindPipe = false;
-        couldNotWrite = false;
-
-        String lyxpipeSetting = Globals.prefs.get("lyxpipe");
-        if (!lyxpipeSetting.endsWith(".in"))
-            lyxpipeSetting = lyxpipeSetting+".in";
-        File lp = new File(lyxpipeSetting); // this needs to fixed because it gives "asdf" when going prefs.get("lyxpipe")
-        if( !lp.exists() || !lp.canWrite()){
-            // See if it helps to append ".in":
-            lp = new File(lyxpipeSetting+".in");
-            if( !lp.exists() || !lp.canWrite()){
-                couldNotFindPipe = true;
-                return;
-            }
-        }
-
-        final File lyxpipe = lp;
-        Thread t = new Thread(new Runnable() {
-            public void run() {
-                try {
-                    FileWriter fw = new FileWriter(lyxpipe);
-                    BufferedWriter lyx_out = new BufferedWriter(fw);
-                    String citeStr = "";
-
-                    citeStr = "LYXCMD:sampleclient:citation-insert:" + keyString;
-                    lyx_out.write(citeStr + "\n");
-
-                    lyx_out.close();
-
-                } catch (IOException excep) {
-                    couldNotWrite = true;
-                    return;
-                }
-            }
-        });
-
-
-	    t.start();
-	    /*new Timeout(2000, t, Globals.lang("Error")+": "+
-            Globals.lang("unable to access LyX-pipe"));*/
-        try {
-            t.join();
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public String getName() {
-        return Globals.lang("Insert selected citations into LyX/Kile");
-    }
-
-    public String getApplicationName() {
-        return "LyX/Kile";
-    }
-
-    public String getTooltip() {
-        return Globals.lang("Push selection to LyX/Kile");
-    }
-
-    public Icon getIcon() {
-        return GUIGlobals.getImage("lyx");
-    }
-
-    public String getKeyStrokeName() {
-        return "Push to LyX";
-    }
-
-
-    public void operationCompleted(BasePanel panel) {
-        if (couldNotFindPipe) {
-            panel.output(Globals.lang("Error") + ": " + Globals.lang("verify that LyX is running and that the lyxpipe is valid")
-                    + ". [" + Globals.prefs.get("lyxpipe") + "]");
-        } else if (couldNotWrite) {
-            panel.output(Globals.lang("Error") + ": " + Globals.lang("unable to write to") + " " + Globals.prefs.get("lyxpipe") +
-                    ".in");
-        } else {
-
-            panel.output(Globals.lang("Pushed the citations for the following rows to") + " Lyx: " +
-                    message);
-        }
-
-    }
-
-    public boolean requiresBibtexKeys() {
-        return true;
-    }
-
-    public JPanel getSettingsPanel() {
-        if (settings == null)
-            initSettingsPanel();
-        lyxPipe.setText(Globals.prefs.get("lyxpipe"));
-        return settings;
-    }
-
-    public void storeSettings() {
-        Globals.prefs.put("lyxpipe", lyxPipe.getText());
-    }
-
-    private void initSettingsPanel() {
-        settings = new JPanel();
-        settings.add(new JLabel(Globals.lang("Path to LyX pipe") + ":"));
-        settings.add(lyxPipe);
-    }
-    /*class Timeout extends javax.swing.Timer
-    {
-      public Timeout(int timeout, final Thread toStop, final String message) {
-        super(timeout, new ActionListener() {
-          public void actionPerformed(ActionEvent e) {
-            toStop.stop();         // !!! <- deprecated
-            // toStop.interrupt(); // better ?, interrupts wait and IO
-            //stop();
-            //output(message);
-          }
-        });
-      }
-    } */
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import javax.swing.*;
+
+import net.sf.jabref.*;
+
+public class PushToLyx implements PushToApplication {
+
+    private JTextField lyxPipe=new JTextField(30);
+    private JPanel settings = null;
+
+    private boolean couldNotFindPipe=false;
+    private boolean couldNotWrite=false;
+    private String message = "";
+
+    public void pushEntries(BibtexDatabase database, final BibtexEntry[] entries, final String keyString, MetaData metaData) {
+
+        couldNotFindPipe = false;
+        couldNotWrite = false;
+
+        String lyxpipeSetting = Globals.prefs.get("lyxpipe");
+        if (!lyxpipeSetting.endsWith(".in"))
+            lyxpipeSetting = lyxpipeSetting+".in";
+        File lp = new File(lyxpipeSetting); // this needs to fixed because it gives "asdf" when going prefs.get("lyxpipe")
+        if( !lp.exists() || !lp.canWrite()){
+            // See if it helps to append ".in":
+            lp = new File(lyxpipeSetting+".in");
+            if( !lp.exists() || !lp.canWrite()){
+                couldNotFindPipe = true;
+                return;
+            }
+        }
+
+        final File lyxpipe = lp;
+        Thread t = new Thread(new Runnable() {
+            public void run() {
+                try {
+                    FileWriter fw = new FileWriter(lyxpipe);
+                    BufferedWriter lyx_out = new BufferedWriter(fw);
+                    String citeStr = "";
+
+                    citeStr = "LYXCMD:sampleclient:citation-insert:" + keyString;
+                    lyx_out.write(citeStr + "\n");
+
+                    lyx_out.close();
+
+                } catch (IOException excep) {
+                    couldNotWrite = true;
+                    return;
+                }
+            }
+        });
+
+
+	    t.start();
+	    /*new Timeout(2000, t, Globals.lang("Error")+": "+
+            Globals.lang("unable to access LyX-pipe"));*/
+        try {
+            t.join();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public String getName() {
+        return Globals.lang("Insert selected citations into LyX/Kile");
+    }
+
+    public String getApplicationName() {
+        return "LyX/Kile";
+    }
+
+    public String getTooltip() {
+        return Globals.lang("Push selection to LyX/Kile");
+    }
+
+    public Icon getIcon() {
+        return GUIGlobals.getImage("lyx");
+    }
+
+    public String getKeyStrokeName() {
+        return "Push to LyX";
+    }
+
+
+    public void operationCompleted(BasePanel panel) {
+        if (couldNotFindPipe) {
+            panel.output(Globals.lang("Error") + ": " + Globals.lang("verify that LyX is running and that the lyxpipe is valid")
+                    + ". [" + Globals.prefs.get("lyxpipe") + "]");
+        } else if (couldNotWrite) {
+            panel.output(Globals.lang("Error") + ": " + Globals.lang("unable to write to") + " " + Globals.prefs.get("lyxpipe") +
+                    ".in");
+        } else {
+
+            panel.output(Globals.lang("Pushed the citations for the following rows to") + " Lyx: " +
+                    message);
+        }
+
+    }
+
+    public boolean requiresBibtexKeys() {
+        return true;
+    }
+
+    public JPanel getSettingsPanel() {
+        if (settings == null)
+            initSettingsPanel();
+        lyxPipe.setText(Globals.prefs.get("lyxpipe"));
+        return settings;
+    }
+
+    public void storeSettings() {
+        Globals.prefs.put("lyxpipe", lyxPipe.getText());
+    }
+
+    private void initSettingsPanel() {
+        settings = new JPanel();
+        settings.add(new JLabel(Globals.lang("Path to LyX pipe") + ":"));
+        settings.add(lyxPipe);
+    }
+    /*class Timeout extends javax.swing.Timer
+    {
+      public Timeout(int timeout, final Thread toStop, final String message) {
+        super(timeout, new ActionListener() {
+          public void actionPerformed(ActionEvent e) {
+            toStop.stop();         // !!! <- deprecated
+            // toStop.interrupt(); // better ?, interrupts wait and IO
+            //stop();
+            //output(message);
+          }
+        });
+      }
+    } */
+
+}
diff --git a/src/java/net/sf/jabref/external/PushToTeXstudio.java b/src/java/net/sf/jabref/external/PushToTeXstudio.java
index 5464e4c..dae8733 100644
--- a/src/java/net/sf/jabref/external/PushToTeXstudio.java
+++ b/src/java/net/sf/jabref/external/PushToTeXstudio.java
@@ -1,167 +1,167 @@
-package net.sf.jabref.external;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.swing.*;
-
-import net.sf.jabref.*;
-import net.sf.jabref.external.PushToApplication;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Jan 14, 2006
- * Time: 4:55:23 PM
- * To change this template use File | Settings | File Templates.
- */
-public class PushToTeXstudio implements PushToApplication {
-
-    private final String defaultCiteCommand = "\\cite";
-    private JPanel settings = null;
-    private JTextField citeCommand = new JTextField(30);
-    private JTextField progPath = new JTextField(30);
-
-    private boolean couldNotConnect=false, couldNotRunClient=false;
-
-    public String getName() {
-        return Globals.lang("Insert selected citations into TeXstudio") ;
-    }
-
-    public String getApplicationName() {
-        return "TeXstudio";
-    }
-
-    public String getTooltip() {
-        return Globals.lang("Push selection to TeXstudio");
-    }
-
-    public Icon getIcon() {
-        return GUIGlobals.getImage("texstudio");
-    }
-
-    public String getKeyStrokeName() {
-        return "Push to TeXstudio";
-    }
-
-    protected String defaultProgramPath() {
-        if (Globals.ON_WIN) {
-            String progFiles = System.getenv("ProgramFiles(x86)");
-            if (progFiles == null)
-                progFiles = System.getenv("ProgramFiles");
-            return progFiles+"\\texstudio\\texstudio.exe";
-        } else {
-            return "texstudio";
-        }
-    }
-
-    public JPanel getSettingsPanel() {
-	    if (settings == null)
-            initSettingsPanel();
-        String citeCom = Globals.prefs.get("citeCommandTeXstudio");
-        if (citeCom == null) citeCom = defaultCiteCommand;
-        citeCommand.setText(citeCom);
-        String programPath = Globals.prefs.get("TeXstudioPath");
-        if (programPath == null) programPath = defaultProgramPath();
-        progPath.setText(programPath);
-        return settings;
-    }
-
-    public void storeSettings() {
-        Globals.prefs.put("citeCommandTeXstudio", citeCommand.getText().trim());
-        Globals.prefs.put("TeXstudioPath", progPath.getText().trim());
-    }
-
-    private void initSettingsPanel() {
-        DefaultFormBuilder builder = new DefaultFormBuilder(
-                new FormLayout("left:pref, 4dlu, fill:pref", ""));
-        builder.append(Globals.lang("Cite command") + ":");
-        builder.append(citeCommand);
-        builder.nextLine();
-        builder.append(Globals.lang("Path to TeXstudio")+":");
-        builder.append(progPath);
-        settings = builder.getPanel();
-    }
-
-
-    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries, String keys, MetaData metaData) {
-
-        couldNotConnect=false;
-        couldNotRunClient=false;
-        String citeCom = Globals.prefs.get("citeCommandTeXstudio");
-        if (citeCom == null) citeCom = defaultCiteCommand;
-        String programPath = Globals.prefs.get("TeXstudioPath");
-        if (programPath == null) programPath = defaultProgramPath();
-        try {
-            String[] com = Globals.ON_WIN ?
-                // No additional escaping is needed for TeXstudio:
-		        new String[] {programPath, "--insert-cite", citeCom + "{" + keys + "}"}
-                : new String[] {programPath, "--insert-cite", citeCom + "{" + keys + "}"};
-
-            /*for (int i = 0; i < com.length; i++) {
-                String s = com[i];
-                System.out.print(s + " ");
-            }
-            System.out.println("");*/
-
-            final Process p = Runtime.getRuntime().exec(com);
-	        System.out.println(keys);
-            Runnable errorListener = new Runnable() {
-                public void run() {
-                    InputStream out = p.getErrorStream();
-                    int c;
-                    StringBuffer sb = new StringBuffer();
-                    try {
-                        while ((c = out.read()) != -1)
-                            sb.append((char) c);
-                    } catch (IOException e) {
-                        e.printStackTrace();
-                    }
-                    // Error stream has been closed. See if there were any errors:
-                    if (sb.toString().trim().length() > 0) {
-			//System.out.println(sb.toString());
-                        couldNotConnect = true;
-                        return;
-                    }
-                }
-            };
-            Thread t = new Thread(errorListener);
-            t.start();
-            t.join();
-        }
-        catch (IOException excep) {
-            couldNotRunClient = true;
-            return;
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-
-    }
-
-    public void operationCompleted(BasePanel panel) {
-        if (couldNotConnect) {
-            JOptionPane.showMessageDialog(
-                panel.frame(),
-                "TeXstudio: could not connect",
-                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-        }
-        else if (couldNotRunClient) {
-            String programPath = Globals.prefs.get("TeXstudioPath");
-            if (programPath == null) programPath = defaultProgramPath();
-            JOptionPane.showMessageDialog(
-                panel.frame(),
-                "TeXstudio: "+Globals.lang("Program '%0' not found", programPath),
-                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-        }
-        else {
-            panel.output(Globals.lang("Pushed citations to TeXstudio"));
-        }
-    }
-
-    public boolean requiresBibtexKeys() {
-        return true;
-    }
-}
-
+package net.sf.jabref.external;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.swing.*;
+
+import net.sf.jabref.*;
+import net.sf.jabref.external.PushToApplication;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Jan 14, 2006
+ * Time: 4:55:23 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class PushToTeXstudio implements PushToApplication {
+
+    private final String defaultCiteCommand = "\\cite";
+    private JPanel settings = null;
+    private JTextField citeCommand = new JTextField(30);
+    private JTextField progPath = new JTextField(30);
+
+    private boolean couldNotConnect=false, couldNotRunClient=false;
+
+    public String getName() {
+        return Globals.lang("Insert selected citations into TeXstudio") ;
+    }
+
+    public String getApplicationName() {
+        return "TeXstudio";
+    }
+
+    public String getTooltip() {
+        return Globals.lang("Push selection to TeXstudio");
+    }
+
+    public Icon getIcon() {
+        return GUIGlobals.getImage("texstudio");
+    }
+
+    public String getKeyStrokeName() {
+        return "Push to TeXstudio";
+    }
+
+    protected String defaultProgramPath() {
+        if (Globals.ON_WIN) {
+            String progFiles = System.getenv("ProgramFiles(x86)");
+            if (progFiles == null)
+                progFiles = System.getenv("ProgramFiles");
+            return progFiles+"\\texstudio\\texstudio.exe";
+        } else {
+            return "texstudio";
+        }
+    }
+
+    public JPanel getSettingsPanel() {
+	    if (settings == null)
+            initSettingsPanel();
+        String citeCom = Globals.prefs.get("citeCommandTeXstudio");
+        if (citeCom == null) citeCom = defaultCiteCommand;
+        citeCommand.setText(citeCom);
+        String programPath = Globals.prefs.get("TeXstudioPath");
+        if (programPath == null) programPath = defaultProgramPath();
+        progPath.setText(programPath);
+        return settings;
+    }
+
+    public void storeSettings() {
+        Globals.prefs.put("citeCommandTeXstudio", citeCommand.getText().trim());
+        Globals.prefs.put("TeXstudioPath", progPath.getText().trim());
+    }
+
+    private void initSettingsPanel() {
+        DefaultFormBuilder builder = new DefaultFormBuilder(
+                new FormLayout("left:pref, 4dlu, fill:pref", ""));
+        builder.append(Globals.lang("Cite command") + ":");
+        builder.append(citeCommand);
+        builder.nextLine();
+        builder.append(Globals.lang("Path to TeXstudio")+":");
+        builder.append(progPath);
+        settings = builder.getPanel();
+    }
+
+
+    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries, String keys, MetaData metaData) {
+
+        couldNotConnect=false;
+        couldNotRunClient=false;
+        String citeCom = Globals.prefs.get("citeCommandTeXstudio");
+        if (citeCom == null) citeCom = defaultCiteCommand;
+        String programPath = Globals.prefs.get("TeXstudioPath");
+        if (programPath == null) programPath = defaultProgramPath();
+        try {
+            String[] com = Globals.ON_WIN ?
+                // No additional escaping is needed for TeXstudio:
+		        new String[] {programPath, "--insert-cite", citeCom + "{" + keys + "}"}
+                : new String[] {programPath, "--insert-cite", citeCom + "{" + keys + "}"};
+
+            /*for (int i = 0; i < com.length; i++) {
+                String s = com[i];
+                System.out.print(s + " ");
+            }
+            System.out.println("");*/
+
+            final Process p = Runtime.getRuntime().exec(com);
+	        System.out.println(keys);
+            Runnable errorListener = new Runnable() {
+                public void run() {
+                    InputStream out = p.getErrorStream();
+                    int c;
+                    StringBuffer sb = new StringBuffer();
+                    try {
+                        while ((c = out.read()) != -1)
+                            sb.append((char) c);
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                    // Error stream has been closed. See if there were any errors:
+                    if (sb.toString().trim().length() > 0) {
+			//System.out.println(sb.toString());
+                        couldNotConnect = true;
+                        return;
+                    }
+                }
+            };
+            Thread t = new Thread(errorListener);
+            t.start();
+            t.join();
+        }
+        catch (IOException excep) {
+            couldNotRunClient = true;
+            return;
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public void operationCompleted(BasePanel panel) {
+        if (couldNotConnect) {
+            JOptionPane.showMessageDialog(
+                panel.frame(),
+                "TeXstudio: could not connect",
+                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+        }
+        else if (couldNotRunClient) {
+            String programPath = Globals.prefs.get("TeXstudioPath");
+            if (programPath == null) programPath = defaultProgramPath();
+            JOptionPane.showMessageDialog(
+                panel.frame(),
+                "TeXstudio: "+Globals.lang("Program '%0' not found", programPath),
+                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+        }
+        else {
+            panel.output(Globals.lang("Pushed citations to TeXstudio"));
+        }
+    }
+
+    public boolean requiresBibtexKeys() {
+        return true;
+    }
+}
+
diff --git a/src/java/net/sf/jabref/external/PushToVim.java b/src/java/net/sf/jabref/external/PushToVim.java
index b4539d1..6772f10 100644
--- a/src/java/net/sf/jabref/external/PushToVim.java
+++ b/src/java/net/sf/jabref/external/PushToVim.java
@@ -1,163 +1,163 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import net.sf.jabref.*;
-
-import javax.swing.*;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Mar 7, 2007
- * Time: 6:55:56 PM
- * To change this template use File | Settings | File Templates.
- */
-public class PushToVim implements PushToApplication {
-
-    private JPanel settings = null;
-    private JTextField vimPath = new JTextField(30),
-        vimServer = new JTextField(30),
-        citeCommand = new JTextField(30);
-
-    private boolean couldNotConnect=false, couldNotRunClient=false;
-
-    public String getName() {
-        return Globals.lang("Insert selected citations into Vim") ;
-    }
-
-    public String getApplicationName() {
-        return "Vim";
-    }
-
-    public String getTooltip() {
-        return Globals.lang("Push selection to Vim");
-    }
-
-    public Icon getIcon() {
-        return GUIGlobals.getImage("vim");
-    }
-
-    public String getKeyStrokeName() {
-        return null;
-    }
-
-    public JPanel getSettingsPanel() {
-        if (settings == null)
-            initSettingsPanel();
-        vimPath.setText(Globals.prefs.get("vim"));
-        vimServer.setText(Globals.prefs.get("vimServer"));
-        citeCommand.setText(Globals.prefs.get("citeCommandVim"));
-        return settings;
-    }
-    
-    public void storeSettings() {
-        Globals.prefs.put("vim", vimPath.getText());
-        Globals.prefs.put("vimServer", vimServer.getText());
-        Globals.prefs.put("citeCommandVim", citeCommand.getText());
-    }
-
-    private void initSettingsPanel() {
-        DefaultFormBuilder builder = new DefaultFormBuilder(
-                new FormLayout("left:pref, 4dlu, fill:pref, 4dlu, fill:pref", ""));
-
-        builder.append(new JLabel(Globals.lang("Path to Vim") + ":"));
-        builder.append(vimPath);
-        BrowseAction action = new BrowseAction(null, vimPath, false);
-        JButton browse = new JButton(Globals.lang("Browse"));
-        browse.addActionListener(action);
-        builder.append(browse);
-        builder.nextLine();
-        builder.append(Globals.lang("Vim Server Name") + ":");
-        builder.append(vimServer);
-        builder.nextLine();
-        builder.append(Globals.lang("Cite command") + ":");
-        builder.append(citeCommand);
-        settings = builder.getPanel();
-    }
-
-    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries, String keys,
-                            MetaData metaData) {
-
-        couldNotConnect=false;
-        couldNotRunClient=false;
-        try {
-                String[] com = new String[] {Globals.prefs.get("vim"), "--servername", Globals.prefs.get("vimServer"), "--remote-send",
-                "<C-\\><C-N>a" + Globals.prefs.get("citeCommandVim") +
-                       "{" + keys + "}"};
-
-            final Process p = Runtime.getRuntime().exec(com);
-
-            Runnable errorListener = new Runnable() {
-                public void run() {
-                    InputStream out = p.getErrorStream();
-                    int c;
-                    StringBuffer sb = new StringBuffer();
-                    try {
-                        while ((c = out.read()) != -1)
-                            sb.append((char) c);
-                    } catch (IOException e) {
-                        e.printStackTrace();
-                    }
-                    // Error stream has been closed. See if there were any errors:
-                    if (sb.toString().trim().length() > 0) {
-			System.out.println(sb.toString());
-                        couldNotConnect = true;
-                        return;
-                    }
-                }
-            };
-            Thread t = new Thread(errorListener);
-            t.start();
-            t.join();
-        }
-        catch (IOException excep) {
-            couldNotRunClient = true;
-            return;
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-
-    }
-
-
-    public void operationCompleted(BasePanel panel) {
-        if (couldNotConnect)
-            JOptionPane.showMessageDialog(
-                panel.frame(),
-                "<HTML>"+
-                Globals.lang("Could not connect to Vim server. Make sure that "
-														 +"Vim is running<BR>with correct server name.")
-                +"</HTML>",
-                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-        else if (couldNotRunClient)
-            JOptionPane.showMessageDialog(
-                panel.frame(),
-                Globals.lang("Could not run the 'vim' program."),
-                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-        else {
-            panel.output(Globals.lang("Pushed citations to Vim"));
-        }
-    }
-
-    public boolean requiresBibtexKeys() {
-        return true;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import net.sf.jabref.*;
+
+import javax.swing.*;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Mar 7, 2007
+ * Time: 6:55:56 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class PushToVim implements PushToApplication {
+
+    private JPanel settings = null;
+    private JTextField vimPath = new JTextField(30),
+        vimServer = new JTextField(30),
+        citeCommand = new JTextField(30);
+
+    private boolean couldNotConnect=false, couldNotRunClient=false;
+
+    public String getName() {
+        return Globals.lang("Insert selected citations into Vim") ;
+    }
+
+    public String getApplicationName() {
+        return "Vim";
+    }
+
+    public String getTooltip() {
+        return Globals.lang("Push selection to Vim");
+    }
+
+    public Icon getIcon() {
+        return GUIGlobals.getImage("vim");
+    }
+
+    public String getKeyStrokeName() {
+        return null;
+    }
+
+    public JPanel getSettingsPanel() {
+        if (settings == null)
+            initSettingsPanel();
+        vimPath.setText(Globals.prefs.get("vim"));
+        vimServer.setText(Globals.prefs.get("vimServer"));
+        citeCommand.setText(Globals.prefs.get("citeCommandVim"));
+        return settings;
+    }
+    
+    public void storeSettings() {
+        Globals.prefs.put("vim", vimPath.getText());
+        Globals.prefs.put("vimServer", vimServer.getText());
+        Globals.prefs.put("citeCommandVim", citeCommand.getText());
+    }
+
+    private void initSettingsPanel() {
+        DefaultFormBuilder builder = new DefaultFormBuilder(
+                new FormLayout("left:pref, 4dlu, fill:pref, 4dlu, fill:pref", ""));
+
+        builder.append(new JLabel(Globals.lang("Path to Vim") + ":"));
+        builder.append(vimPath);
+        BrowseAction action = new BrowseAction(null, vimPath, false);
+        JButton browse = new JButton(Globals.lang("Browse"));
+        browse.addActionListener(action);
+        builder.append(browse);
+        builder.nextLine();
+        builder.append(Globals.lang("Vim Server Name") + ":");
+        builder.append(vimServer);
+        builder.nextLine();
+        builder.append(Globals.lang("Cite command") + ":");
+        builder.append(citeCommand);
+        settings = builder.getPanel();
+    }
+
+    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries, String keys,
+                            MetaData metaData) {
+
+        couldNotConnect=false;
+        couldNotRunClient=false;
+        try {
+                String[] com = new String[] {Globals.prefs.get("vim"), "--servername", Globals.prefs.get("vimServer"), "--remote-send",
+                "<C-\\><C-N>a" + Globals.prefs.get("citeCommandVim") +
+                       "{" + keys + "}"};
+
+            final Process p = Runtime.getRuntime().exec(com);
+
+            Runnable errorListener = new Runnable() {
+                public void run() {
+                    InputStream out = p.getErrorStream();
+                    int c;
+                    StringBuffer sb = new StringBuffer();
+                    try {
+                        while ((c = out.read()) != -1)
+                            sb.append((char) c);
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                    // Error stream has been closed. See if there were any errors:
+                    if (sb.toString().trim().length() > 0) {
+			System.out.println(sb.toString());
+                        couldNotConnect = true;
+                        return;
+                    }
+                }
+            };
+            Thread t = new Thread(errorListener);
+            t.start();
+            t.join();
+        }
+        catch (IOException excep) {
+            couldNotRunClient = true;
+            return;
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+
+    public void operationCompleted(BasePanel panel) {
+        if (couldNotConnect)
+            JOptionPane.showMessageDialog(
+                panel.frame(),
+                "<HTML>"+
+                Globals.lang("Could not connect to Vim server. Make sure that "
+														 +"Vim is running<BR>with correct server name.")
+                +"</HTML>",
+                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+        else if (couldNotRunClient)
+            JOptionPane.showMessageDialog(
+                panel.frame(),
+                Globals.lang("Could not run the 'vim' program."),
+                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+        else {
+            panel.output(Globals.lang("Pushed citations to Vim"));
+        }
+    }
+
+    public boolean requiresBibtexKeys() {
+        return true;
+    }
+}
diff --git a/src/java/net/sf/jabref/external/PushToWinEdt.java b/src/java/net/sf/jabref/external/PushToWinEdt.java
index f1bf725..38672a6 100644
--- a/src/java/net/sf/jabref/external/PushToWinEdt.java
+++ b/src/java/net/sf/jabref/external/PushToWinEdt.java
@@ -1,126 +1,126 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.io.IOException;
-
-import javax.swing.*;
-
-import net.sf.jabref.*;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-public class PushToWinEdt implements PushToApplication {
-
-    private boolean couldNotCall=false;
-    private boolean notDefined=false;
-    private JPanel settings = null;
-    private JTextField winEdtPath = new JTextField(30),
-        citeCommand = new JTextField(30);
-
-    public String getName() {
-        return Globals.lang("Insert selected citations into WinEdt");
-    }
-
-    public String getApplicationName() {
-        return "WinEdt";
-    }
-
-    public String getTooltip() {
-        return Globals.lang("Push selection to WinEdt");
-    }
-
-    public Icon getIcon() {
-        return GUIGlobals.getImage("winedt");
-    }
-
-    public String getKeyStrokeName() {
-        return "Push to WinEdt";
-    }
-
-    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries, String keyString, MetaData metaData) {
-
-        couldNotCall = false;
-        notDefined = false;
-
-        String winEdt = Globals.prefs.get("winEdtPath");
-        if ((winEdt == null) || (winEdt.trim().length() == 0)) {
-            notDefined = true;
-            return;
-        }
-
-        try {
-            StringBuffer toSend = new StringBuffer("\"[InsText('")
-                    .append(Globals.prefs.get("citeCommandWinEdt")).append("{")
-                    .append(keyString.replaceAll("'", "''"))
-                    .append("}');]\"");
-            Runtime.getRuntime().exec(winEdt + " " + toSend.toString());
-
-        }
-
-        catch (IOException excep) {
-            couldNotCall = true;
-            excep.printStackTrace();
-        }
-
-
-    }
-
-    public void operationCompleted(BasePanel panel) {
-        if (notDefined) {
-            panel.output(Globals.lang("Error") + ": "+
-                    Globals.lang("Path to %0 not defined", getApplicationName())+".");
-        }
-        else if (couldNotCall) {
-            panel.output(Globals.lang("Error") + ": " + Globals.lang("Could not call executable") + " '"
-                    +Globals.prefs.get("winEdtPath") + "'.");
-        }
-        else
-            Globals.lang("Pushed citations to WinEdt");
-    }
-
-    public boolean requiresBibtexKeys() {
-        return true;
-    }
-
-    public JPanel getSettingsPanel() {
-        if (settings == null)
-            initSettingsPanel();
-        winEdtPath.setText(Globals.prefs.get("winEdtPath"));
-        citeCommand.setText(Globals.prefs.get("citeCommandWinEdt"));
-        return settings;
-    }
-
-    private void initSettingsPanel() {
-        DefaultFormBuilder builder = new DefaultFormBuilder(
-                new FormLayout("left:pref, 4dlu, fill:pref, 4dlu, fill:pref", ""));
-        builder.append(new JLabel(Globals.lang("Path to WinEdt.exe") + ":"));
-        builder.append(winEdtPath);
-        BrowseAction action = new BrowseAction(null, winEdtPath, false);
-        JButton browse = new JButton(Globals.lang("Browse"));
-        browse.addActionListener(action);
-        builder.append(browse);
-        builder.nextLine();
-        builder.append(Globals.lang("Cite command") + ":");
-        builder.append(citeCommand);
-        settings = builder.getPanel();
-    }
-
-    public void storeSettings() {
-        Globals.prefs.put("winEdtPath", winEdtPath.getText());
-        Globals.prefs.put("citeCommandWinEdt", citeCommand.getText());
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.io.IOException;
+
+import javax.swing.*;
+
+import net.sf.jabref.*;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+public class PushToWinEdt implements PushToApplication {
+
+    private boolean couldNotCall=false;
+    private boolean notDefined=false;
+    private JPanel settings = null;
+    private JTextField winEdtPath = new JTextField(30),
+        citeCommand = new JTextField(30);
+
+    public String getName() {
+        return Globals.lang("Insert selected citations into WinEdt");
+    }
+
+    public String getApplicationName() {
+        return "WinEdt";
+    }
+
+    public String getTooltip() {
+        return Globals.lang("Push selection to WinEdt");
+    }
+
+    public Icon getIcon() {
+        return GUIGlobals.getImage("winedt");
+    }
+
+    public String getKeyStrokeName() {
+        return "Push to WinEdt";
+    }
+
+    public void pushEntries(BibtexDatabase database, BibtexEntry[] entries, String keyString, MetaData metaData) {
+
+        couldNotCall = false;
+        notDefined = false;
+
+        String winEdt = Globals.prefs.get("winEdtPath");
+        if ((winEdt == null) || (winEdt.trim().length() == 0)) {
+            notDefined = true;
+            return;
+        }
+
+        try {
+            StringBuffer toSend = new StringBuffer("\"[InsText('")
+                    .append(Globals.prefs.get("citeCommandWinEdt")).append("{")
+                    .append(keyString.replaceAll("'", "''"))
+                    .append("}');]\"");
+            Runtime.getRuntime().exec(winEdt + " " + toSend.toString());
+
+        }
+
+        catch (IOException excep) {
+            couldNotCall = true;
+            excep.printStackTrace();
+        }
+
+
+    }
+
+    public void operationCompleted(BasePanel panel) {
+        if (notDefined) {
+            panel.output(Globals.lang("Error") + ": "+
+                    Globals.lang("Path to %0 not defined", getApplicationName())+".");
+        }
+        else if (couldNotCall) {
+            panel.output(Globals.lang("Error") + ": " + Globals.lang("Could not call executable") + " '"
+                    +Globals.prefs.get("winEdtPath") + "'.");
+        }
+        else
+            Globals.lang("Pushed citations to WinEdt");
+    }
+
+    public boolean requiresBibtexKeys() {
+        return true;
+    }
+
+    public JPanel getSettingsPanel() {
+        if (settings == null)
+            initSettingsPanel();
+        winEdtPath.setText(Globals.prefs.get("winEdtPath"));
+        citeCommand.setText(Globals.prefs.get("citeCommandWinEdt"));
+        return settings;
+    }
+
+    private void initSettingsPanel() {
+        DefaultFormBuilder builder = new DefaultFormBuilder(
+                new FormLayout("left:pref, 4dlu, fill:pref, 4dlu, fill:pref", ""));
+        builder.append(new JLabel(Globals.lang("Path to WinEdt.exe") + ":"));
+        builder.append(winEdtPath);
+        BrowseAction action = new BrowseAction(null, winEdtPath, false);
+        JButton browse = new JButton(Globals.lang("Browse"));
+        browse.addActionListener(action);
+        builder.append(browse);
+        builder.nextLine();
+        builder.append(Globals.lang("Cite command") + ":");
+        builder.append(citeCommand);
+        settings = builder.getPanel();
+    }
+
+    public void storeSettings() {
+        Globals.prefs.put("winEdtPath", winEdtPath.getText());
+        Globals.prefs.put("citeCommandWinEdt", citeCommand.getText());
+    }
+}
diff --git a/src/java/net/sf/jabref/external/RegExpFileSearch.java b/src/java/net/sf/jabref/external/RegExpFileSearch.java
index 5ccf1e0..54363d6 100644
--- a/src/java/net/sf/jabref/external/RegExpFileSearch.java
+++ b/src/java/net/sf/jabref/external/RegExpFileSearch.java
@@ -1,298 +1,298 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import net.sf.jabref.*;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.FilenameFilter;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.*;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Apr 12, 2008
- * Time: 1:46:44 PM
- * To change this template use File | Settings | File Templates.
- */
-public class RegExpFileSearch {
-
-    final static String EXT_MARKER = "__EXTENSION__";
-
-    public static void main(String[] args) {
-        BibtexEntry entry = new BibtexEntry(Util.createNeutralId());
-        entry.setField(BibtexFields.KEY_FIELD, "raffel01");
-        entry.setField("year", "2001");
-        ArrayList<String> extensions = new ArrayList<String>();
-        extensions.add("pdf");
-        extensions.add("ps");
-        extensions.add("txt");
-        List<File> dirs = new ArrayList<File>();
-        dirs.add(new File("/home/alver/Desktop/Tromso_2008"));
-        System.out.println(findFiles(entry, extensions, dirs,
-                "**/[bibtexkey].*\\\\.[extension]"));
-    }
-
-    /**
-     * Search for file links for a set of entries using regexp. Lists of extensions and directories
-     * are given.
-     * @param entries The entries to search for.
-     * @param extensions The extensions that are acceptable.
-     * @param directories The root directories to search.
-     * @param regExp The expression deciding which names are acceptable.
-     * @return A map linking each given entry to a list of files matching the given criteria.
-     */
-    public static Map<BibtexEntry, java.util.List<File>> findFilesForSet(Collection<BibtexEntry> entries,
-                 Collection<String> extensions, List<File> directories, String regExp) {
-
-        Map<BibtexEntry, java.util.List<File>> res = new HashMap<BibtexEntry, List<File>>();
-        for (BibtexEntry entry : entries) {
-            res.put(entry, findFiles(entry, extensions, directories, regExp));
-        }
-        return res;
-    }
-
-    /**
-     * Method for searching for files using regexp. A list of extensions and directories can be
-     * given.
-     * @param entry The entry to search for.
-     * @param extensions The extensions that are acceptable.
-     * @param directories The root directories to search.
-     * @param regularExpression The expression deciding which names are acceptable.
-     * @return A list of files paths matching the given criteria.
-     */
-    public static List<File> findFiles(BibtexEntry entry, Collection<String> extensions,
-                                       Collection<File> directories, String regularExpression) {
-
-        StringBuilder sb = new StringBuilder();
-        for (Iterator<String> i = extensions.iterator(); i.hasNext();) {
-            sb.append(i.next());
-            if (i.hasNext())
-                    sb.append("|");
-        }
-        String extensionRegExp = "("+sb.toString()+")";
-
-        return findFile(entry, null, directories, regularExpression, extensionRegExp, true);
-    }
-
-        /**
-	 * Searches the given directory and file name pattern for a file for the
-	 * bibtexentry.
-	 *
-	 * Used to fix:
-	 *
-	 * http://sourceforge.net/tracker/index.php?func=detail&aid=1503410&group_id=92314&atid=600309
-	 *
-	 * Requirements:
-	 *  - Be able to find the associated PDF in a set of given directories.
-	 *  - Be able to return a relative path or absolute path.
-	 *  - Be fast.
-	 *  - Allow for flexible naming schemes in the PDFs.
-	 *
-	 * Syntax scheme for file:
-	 * <ul>
-	 * <li>* Any subDir</li>
-	 * <li>** Any subDir (recursiv)</li>
-	 * <li>[key] Key from bibtex file and database</li>
-	 * <li>.* Anything else is taken to be a Regular expression.</li>
-	 * </ul>
-	 *
-	 * @param entry
-	 *            non-null
-	 * @param database
-	 *            non-null
-	 * @param dirs
-	 *            A set of root directories to start the search from. Paths are
-	 *            returned relative to these directories if relative is set to
-	 *            true. These directories will not be expanded or anything. Use
-	 *            the file attribute for this.
-	 * @param file
-	 *            non-null
-	 *
-	 * @param relative
-	 *            whether to return relative file paths or absolute ones
-	 *
-	 * @return Will return the first file found to match the given criteria or
-	 *         null if none was found.
-	 */
-	public static List<File> findFile(BibtexEntry entry, BibtexDatabase database, Collection<File> dirs,
-		String file, String extensionRegExp, boolean relative) {
-        ArrayList<File> res = new ArrayList<File>();
-		for (File directory : dirs) {
-            List<File> tmp = findFile(entry, database, directory.getPath(), file, extensionRegExp, relative);
-            if (tmp != null)
-                res.addAll(tmp);
-		}
-		return res;
-	}
-
-    /**
-     * Internal Version of findFile, which also accepts a current directory to
-     * base the search on.
-     *
-     */
-    public static List<File> findFile(BibtexEntry entry, BibtexDatabase database, String directory,
-        String file, String extensionRegExp, boolean relative) {
-
-        List<File> res;
-        File root;
-        if (directory == null) {
-            root = new File(".");
-        } else {
-            root = new File(directory);
-        }
-        if (!root.exists()) {
-            return null;
-        }
-        res = findFile(entry, database, root, file, extensionRegExp);
-
-
-        if (res.size() > 0) {
-            for (int i=0; i<res.size(); i++)
-                try {
-                    /**
-                     * [ 1601651 ] PDF subdirectory - missing first character
-                     *
-                     * http://sourceforge.net/tracker/index.php?func=detail&aid=1601651&group_id=92314&atid=600306
-                     */
-                    // Changed by M. Alver 2007.01.04:
-                    // Remove first character if it is a directory separator character:
-                    String tmp = res.get(i).getCanonicalPath().substring(root.getCanonicalPath().length());
-                    if ((tmp.length() > 1) && (tmp.charAt(0) == File.separatorChar))
-                        tmp = tmp.substring(1);
-                    res.set(i, new File(tmp));
-                    
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-        }
-        return res;
-    }
-
-    /**
-     * The actual work-horse. Will find absolute filepaths starting from the
-     * given directory using the given regular expression string for search.
-     */
-    protected static List<File> findFile(BibtexEntry entry, BibtexDatabase database, File directory,
-        String file, String extensionRegExp) {
-
-        ArrayList<File> res = new ArrayList<File>();
-
-        if (file.startsWith("/")) {
-            directory = new File(".");
-            file = file.substring(1);
-        }
-
-        // Escape handling...
-        Matcher m = Pattern.compile("([^\\\\])\\\\([^\\\\])").matcher(file);
-        StringBuffer s = new StringBuffer();
-        while (m.find()) {
-            m.appendReplacement(s, m.group(1) + "/" + m.group(2));
-        }
-        m.appendTail(s);
-        file = s.toString();
-        String[] fileParts = file.split("/");
-
-        if (fileParts.length == 0)
-            return res;
-
-        if (fileParts.length > 1) {
-
-            for (int i = 0; i < fileParts.length - 1; i++) {
-
-                String dirToProcess = fileParts[i];
-                dirToProcess = Util.expandBrackets(dirToProcess, entry, database);
-
-                if (dirToProcess.matches("^.:$")) { // Windows Drive Letter
-                    directory = new File(dirToProcess + "/");
-                    continue;
-                }
-                if (dirToProcess.equals(".")) { // Stay in current directory
-                    continue;
-                }
-                if (dirToProcess.equals("..")) {
-                    directory = new File(directory.getParent());
-                    continue;
-                }
-                if (dirToProcess.equals("*")) { // Do for all direct subdirs
-
-                    File[] subDirs = directory.listFiles();
-                    if (subDirs != null) {
-                        String restOfFileString = Util.join(fileParts, "/", i + 1, fileParts.length);
-                        for (int sub = 0; sub < subDirs.length; sub++) {
-                            if (subDirs[sub].isDirectory()) {
-                                res.addAll(findFile(entry, database, subDirs[sub],
-                                    restOfFileString, extensionRegExp));
-                            }
-                        }
-                    }
-                }
-                // Do for all direct and indirect subdirs
-                if (dirToProcess.equals("**")) {
-                    List<File> toDo = new LinkedList<File>();
-                    toDo.add(directory);
-
-                    String restOfFileString = Util.join(fileParts, "/", i + 1, fileParts.length);
-
-                    while (!toDo.isEmpty()) {
-
-                        // Get all subdirs of each of the elements found in toDo
-                        File[] subDirs = toDo.remove(0).listFiles();
-                        if (subDirs == null) // No permission?
-                            continue;
-
-                        toDo.addAll(Arrays.asList(subDirs));
-
-                        for (int sub = 0; sub < subDirs.length; sub++) {
-                            if (!subDirs[sub].isDirectory())
-                                continue;
-                            res.addAll(findFile(entry, database, subDirs[sub], restOfFileString,
-                                    extensionRegExp));
-                        }
-                    }
-
-                }
-
-            } // End process directory information
-        }
-
-        // Last step: check if the given file can be found in this directory
-        String filePart = fileParts[fileParts.length-1].replaceAll("\\[extension\\]", EXT_MARKER);
-        String filenameToLookFor = Util.expandBrackets(filePart, entry, database)
-                .replaceAll(EXT_MARKER, extensionRegExp);
-        final Pattern toMatch = Pattern.compile("^"
-            + filenameToLookFor.replaceAll("\\\\\\\\", "\\\\") + "$", Pattern.CASE_INSENSITIVE);
-
-        File[] matches = directory.listFiles(new FilenameFilter() {
-            public boolean accept(File arg0, String arg1) {
-                return toMatch.matcher(arg1).matches();
-            }
-        });
-        if (matches != null && (matches.length > 0))
-            for (int i = 0; i < matches.length; i++) {
-                File match = matches[i];
-                res.add(match);
-            }
-        return res;
-    }
-
-
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import net.sf.jabref.*;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.FilenameFilter;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Apr 12, 2008
+ * Time: 1:46:44 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class RegExpFileSearch {
+
+    final static String EXT_MARKER = "__EXTENSION__";
+
+    public static void main(String[] args) {
+        BibtexEntry entry = new BibtexEntry(Util.createNeutralId());
+        entry.setField(BibtexFields.KEY_FIELD, "raffel01");
+        entry.setField("year", "2001");
+        ArrayList<String> extensions = new ArrayList<String>();
+        extensions.add("pdf");
+        extensions.add("ps");
+        extensions.add("txt");
+        List<File> dirs = new ArrayList<File>();
+        dirs.add(new File("/home/alver/Desktop/Tromso_2008"));
+        System.out.println(findFiles(entry, extensions, dirs,
+                "**/[bibtexkey].*\\\\.[extension]"));
+    }
+
+    /**
+     * Search for file links for a set of entries using regexp. Lists of extensions and directories
+     * are given.
+     * @param entries The entries to search for.
+     * @param extensions The extensions that are acceptable.
+     * @param directories The root directories to search.
+     * @param regExp The expression deciding which names are acceptable.
+     * @return A map linking each given entry to a list of files matching the given criteria.
+     */
+    public static Map<BibtexEntry, java.util.List<File>> findFilesForSet(Collection<BibtexEntry> entries,
+                 Collection<String> extensions, List<File> directories, String regExp) {
+
+        Map<BibtexEntry, java.util.List<File>> res = new HashMap<BibtexEntry, List<File>>();
+        for (BibtexEntry entry : entries) {
+            res.put(entry, findFiles(entry, extensions, directories, regExp));
+        }
+        return res;
+    }
+
+    /**
+     * Method for searching for files using regexp. A list of extensions and directories can be
+     * given.
+     * @param entry The entry to search for.
+     * @param extensions The extensions that are acceptable.
+     * @param directories The root directories to search.
+     * @param regularExpression The expression deciding which names are acceptable.
+     * @return A list of files paths matching the given criteria.
+     */
+    public static List<File> findFiles(BibtexEntry entry, Collection<String> extensions,
+                                       Collection<File> directories, String regularExpression) {
+
+        StringBuilder sb = new StringBuilder();
+        for (Iterator<String> i = extensions.iterator(); i.hasNext();) {
+            sb.append(i.next());
+            if (i.hasNext())
+                    sb.append("|");
+        }
+        String extensionRegExp = "("+sb.toString()+")";
+
+        return findFile(entry, null, directories, regularExpression, extensionRegExp, true);
+    }
+
+        /**
+	 * Searches the given directory and file name pattern for a file for the
+	 * bibtexentry.
+	 *
+	 * Used to fix:
+	 *
+	 * http://sourceforge.net/tracker/index.php?func=detail&aid=1503410&group_id=92314&atid=600309
+	 *
+	 * Requirements:
+	 *  - Be able to find the associated PDF in a set of given directories.
+	 *  - Be able to return a relative path or absolute path.
+	 *  - Be fast.
+	 *  - Allow for flexible naming schemes in the PDFs.
+	 *
+	 * Syntax scheme for file:
+	 * <ul>
+	 * <li>* Any subDir</li>
+	 * <li>** Any subDir (recursiv)</li>
+	 * <li>[key] Key from bibtex file and database</li>
+	 * <li>.* Anything else is taken to be a Regular expression.</li>
+	 * </ul>
+	 *
+	 * @param entry
+	 *            non-null
+	 * @param database
+	 *            non-null
+	 * @param dirs
+	 *            A set of root directories to start the search from. Paths are
+	 *            returned relative to these directories if relative is set to
+	 *            true. These directories will not be expanded or anything. Use
+	 *            the file attribute for this.
+	 * @param file
+	 *            non-null
+	 *
+	 * @param relative
+	 *            whether to return relative file paths or absolute ones
+	 *
+	 * @return Will return the first file found to match the given criteria or
+	 *         null if none was found.
+	 */
+	public static List<File> findFile(BibtexEntry entry, BibtexDatabase database, Collection<File> dirs,
+		String file, String extensionRegExp, boolean relative) {
+        ArrayList<File> res = new ArrayList<File>();
+		for (File directory : dirs) {
+            List<File> tmp = findFile(entry, database, directory.getPath(), file, extensionRegExp, relative);
+            if (tmp != null)
+                res.addAll(tmp);
+		}
+		return res;
+	}
+
+    /**
+     * Internal Version of findFile, which also accepts a current directory to
+     * base the search on.
+     *
+     */
+    public static List<File> findFile(BibtexEntry entry, BibtexDatabase database, String directory,
+        String file, String extensionRegExp, boolean relative) {
+
+        List<File> res;
+        File root;
+        if (directory == null) {
+            root = new File(".");
+        } else {
+            root = new File(directory);
+        }
+        if (!root.exists()) {
+            return null;
+        }
+        res = findFile(entry, database, root, file, extensionRegExp);
+
+
+        if (res.size() > 0) {
+            for (int i=0; i<res.size(); i++)
+                try {
+                    /**
+                     * [ 1601651 ] PDF subdirectory - missing first character
+                     *
+                     * http://sourceforge.net/tracker/index.php?func=detail&aid=1601651&group_id=92314&atid=600306
+                     */
+                    // Changed by M. Alver 2007.01.04:
+                    // Remove first character if it is a directory separator character:
+                    String tmp = res.get(i).getCanonicalPath().substring(root.getCanonicalPath().length());
+                    if ((tmp.length() > 1) && (tmp.charAt(0) == File.separatorChar))
+                        tmp = tmp.substring(1);
+                    res.set(i, new File(tmp));
+                    
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+        }
+        return res;
+    }
+
+    /**
+     * The actual work-horse. Will find absolute filepaths starting from the
+     * given directory using the given regular expression string for search.
+     */
+    protected static List<File> findFile(BibtexEntry entry, BibtexDatabase database, File directory,
+        String file, String extensionRegExp) {
+
+        ArrayList<File> res = new ArrayList<File>();
+
+        if (file.startsWith("/")) {
+            directory = new File(".");
+            file = file.substring(1);
+        }
+
+        // Escape handling...
+        Matcher m = Pattern.compile("([^\\\\])\\\\([^\\\\])").matcher(file);
+        StringBuffer s = new StringBuffer();
+        while (m.find()) {
+            m.appendReplacement(s, m.group(1) + "/" + m.group(2));
+        }
+        m.appendTail(s);
+        file = s.toString();
+        String[] fileParts = file.split("/");
+
+        if (fileParts.length == 0)
+            return res;
+
+        if (fileParts.length > 1) {
+
+            for (int i = 0; i < fileParts.length - 1; i++) {
+
+                String dirToProcess = fileParts[i];
+                dirToProcess = Util.expandBrackets(dirToProcess, entry, database);
+
+                if (dirToProcess.matches("^.:$")) { // Windows Drive Letter
+                    directory = new File(dirToProcess + "/");
+                    continue;
+                }
+                if (dirToProcess.equals(".")) { // Stay in current directory
+                    continue;
+                }
+                if (dirToProcess.equals("..")) {
+                    directory = new File(directory.getParent());
+                    continue;
+                }
+                if (dirToProcess.equals("*")) { // Do for all direct subdirs
+
+                    File[] subDirs = directory.listFiles();
+                    if (subDirs != null) {
+                        String restOfFileString = Util.join(fileParts, "/", i + 1, fileParts.length);
+                        for (int sub = 0; sub < subDirs.length; sub++) {
+                            if (subDirs[sub].isDirectory()) {
+                                res.addAll(findFile(entry, database, subDirs[sub],
+                                    restOfFileString, extensionRegExp));
+                            }
+                        }
+                    }
+                }
+                // Do for all direct and indirect subdirs
+                if (dirToProcess.equals("**")) {
+                    List<File> toDo = new LinkedList<File>();
+                    toDo.add(directory);
+
+                    String restOfFileString = Util.join(fileParts, "/", i + 1, fileParts.length);
+
+                    while (!toDo.isEmpty()) {
+
+                        // Get all subdirs of each of the elements found in toDo
+                        File[] subDirs = toDo.remove(0).listFiles();
+                        if (subDirs == null) // No permission?
+                            continue;
+
+                        toDo.addAll(Arrays.asList(subDirs));
+
+                        for (int sub = 0; sub < subDirs.length; sub++) {
+                            if (!subDirs[sub].isDirectory())
+                                continue;
+                            res.addAll(findFile(entry, database, subDirs[sub], restOfFileString,
+                                    extensionRegExp));
+                        }
+                    }
+
+                }
+
+            } // End process directory information
+        }
+
+        // Last step: check if the given file can be found in this directory
+        String filePart = fileParts[fileParts.length-1].replaceAll("\\[extension\\]", EXT_MARKER);
+        String filenameToLookFor = Util.expandBrackets(filePart, entry, database)
+                .replaceAll(EXT_MARKER, extensionRegExp);
+        final Pattern toMatch = Pattern.compile("^"
+            + filenameToLookFor.replaceAll("\\\\\\\\", "\\\\") + "$", Pattern.CASE_INSENSITIVE);
+
+        File[] matches = directory.listFiles(new FilenameFilter() {
+            public boolean accept(File arg0, String arg1) {
+                return toMatch.matcher(arg1).matches();
+            }
+        });
+        if (matches != null && (matches.length > 0))
+            for (int i = 0; i < matches.length; i++) {
+                File match = matches[i];
+                res.add(match);
+            }
+        return res;
+    }
+
+
+
+
+}
diff --git a/src/java/net/sf/jabref/external/ScienceDirectPdfDownload.java b/src/java/net/sf/jabref/external/ScienceDirectPdfDownload.java
index c492c97..a354395 100644
--- a/src/java/net/sf/jabref/external/ScienceDirectPdfDownload.java
+++ b/src/java/net/sf/jabref/external/ScienceDirectPdfDownload.java
@@ -1,63 +1,63 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.io.IOException;
-
-/**
- * FullTextFinder implementation that attempts to find PDF url from a Sciencedirect article page.
- */
-public class ScienceDirectPdfDownload implements FullTextFinder {
-
-    //private static final String BASE_URL = "http://www.sciencedirect.com";
-
-    public ScienceDirectPdfDownload() {
-
-    }
-
-    public boolean supportsSite(URL url) {
-        return url.getHost().toLowerCase().indexOf("www.sciencedirect.com") != -1;
-    }
-
-
-
-    public URL findFullTextURL(URL url) throws IOException {
-        String pageSource = FindFullText.loadPage(url);
-        //System.out.println(pageSource);
-        int index = pageSource.indexOf("PDF (");
-        //System.out.println(index);
-        if (index > -1) {
-            String leading = pageSource.substring(0, index);
-            //System.out.println(leading.toLowerCase());
-            index = leading.toLowerCase().lastIndexOf("<a href=");
-            //System.out.println(index);
-            if ((index > -1) && (index+9 < leading.length())) {
-                int endIndex = leading.indexOf("\"", index+9);
-
-                try {
-                    return new URL(/*BASE_URL+*/leading.substring(index+9, endIndex));
-                    
-                } catch (MalformedURLException e) {
-                    return null;
-                }
-            }
-            return null;
-        } else
-            return null;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.io.IOException;
+
+/**
+ * FullTextFinder implementation that attempts to find PDF url from a Sciencedirect article page.
+ */
+public class ScienceDirectPdfDownload implements FullTextFinder {
+
+    //private static final String BASE_URL = "http://www.sciencedirect.com";
+
+    public ScienceDirectPdfDownload() {
+
+    }
+
+    public boolean supportsSite(URL url) {
+        return url.getHost().toLowerCase().indexOf("www.sciencedirect.com") != -1;
+    }
+
+
+
+    public URL findFullTextURL(URL url) throws IOException {
+        String pageSource = FindFullText.loadPage(url);
+        //System.out.println(pageSource);
+        int index = pageSource.indexOf("PDF (");
+        //System.out.println(index);
+        if (index > -1) {
+            String leading = pageSource.substring(0, index);
+            //System.out.println(leading.toLowerCase());
+            index = leading.toLowerCase().lastIndexOf("<a href=");
+            //System.out.println(index);
+            if ((index > -1) && (index+9 < leading.length())) {
+                int endIndex = leading.indexOf("\"", index+9);
+
+                try {
+                    return new URL(/*BASE_URL+*/leading.substring(index+9, endIndex));
+                    
+                } catch (MalformedURLException e) {
+                    return null;
+                }
+            }
+            return null;
+        } else
+            return null;
+    }
+}
diff --git a/src/java/net/sf/jabref/external/SpringerLinkPdfDownload.java b/src/java/net/sf/jabref/external/SpringerLinkPdfDownload.java
index f0cb245..915e2ea 100644
--- a/src/java/net/sf/jabref/external/SpringerLinkPdfDownload.java
+++ b/src/java/net/sf/jabref/external/SpringerLinkPdfDownload.java
@@ -1,69 +1,69 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.io.*;
-
-/**
- * FullTextFinder implementation that attempts to find PDF url from a Sciencedirect article page.
- */
-public class SpringerLinkPdfDownload implements FullTextFinder {
-
-    private static final String BASE_URL = "http://www.springerlink.com";
-    private static final String CONTENT_BASE_URL = "http://www.springerlink.com/content/";
-
-    public SpringerLinkPdfDownload() {
-
-    }
-
-    public boolean supportsSite(URL url) {
-        return url.getHost().toLowerCase().indexOf("www.springerlink.com") != -1;
-    }
-
-
-
-    public URL findFullTextURL(URL url) throws IOException {
-        // If the url contains a 'id=' component, we will try to
-        int idIndex = url.toString().indexOf("id=");
-        if (idIndex > -1) {
-            url = new URL(CONTENT_BASE_URL+url.toString().substring(idIndex+3));
-        }
-        //System.out.println("URL NOW: "+url);
-        String pageSource = FindFullText.loadPage(url);
-        FindFullText.dumpToFile(pageSource, new File("page.html"));
-        int index = pageSource.indexOf("PDF (");
-        if (index > -1) {
-            String leading = pageSource.substring(0, index);
-            String marker = "href=";
-            index = leading.toLowerCase().lastIndexOf(marker);
-            if ((index > -1) && (index+marker.length()+1 < leading.length())) {
-                int endIndex = leading.indexOf("\"", index+marker.length()+1);
-
-                try {
-                    URL pdfUrl = new URL(BASE_URL+leading.substring(index+marker.length()+1, endIndex));
-                    System.out.println(pdfUrl.toString());
-                    return pdfUrl;
-                } catch (MalformedURLException e) {
-                    return null;
-                }
-            }
-            return null;
-        } else
-            return null;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.io.*;
+
+/**
+ * FullTextFinder implementation that attempts to find PDF url from a Sciencedirect article page.
+ */
+public class SpringerLinkPdfDownload implements FullTextFinder {
+
+    private static final String BASE_URL = "http://www.springerlink.com";
+    private static final String CONTENT_BASE_URL = "http://www.springerlink.com/content/";
+
+    public SpringerLinkPdfDownload() {
+
+    }
+
+    public boolean supportsSite(URL url) {
+        return url.getHost().toLowerCase().indexOf("www.springerlink.com") != -1;
+    }
+
+
+
+    public URL findFullTextURL(URL url) throws IOException {
+        // If the url contains a 'id=' component, we will try to
+        int idIndex = url.toString().indexOf("id=");
+        if (idIndex > -1) {
+            url = new URL(CONTENT_BASE_URL+url.toString().substring(idIndex+3));
+        }
+        //System.out.println("URL NOW: "+url);
+        String pageSource = FindFullText.loadPage(url);
+        FindFullText.dumpToFile(pageSource, new File("page.html"));
+        int index = pageSource.indexOf("PDF (");
+        if (index > -1) {
+            String leading = pageSource.substring(0, index);
+            String marker = "href=";
+            index = leading.toLowerCase().lastIndexOf(marker);
+            if ((index > -1) && (index+marker.length()+1 < leading.length())) {
+                int endIndex = leading.indexOf("\"", index+marker.length()+1);
+
+                try {
+                    URL pdfUrl = new URL(BASE_URL+leading.substring(index+marker.length()+1, endIndex));
+                    System.out.println(pdfUrl.toString());
+                    return pdfUrl;
+                } catch (MalformedURLException e) {
+                    return null;
+                }
+            }
+            return null;
+        } else
+            return null;
+    }
+}
diff --git a/src/java/net/sf/jabref/external/SynchronizeFileField.java b/src/java/net/sf/jabref/external/SynchronizeFileField.java
index 4a44488..e7092c8 100644
--- a/src/java/net/sf/jabref/external/SynchronizeFileField.java
+++ b/src/java/net/sf/jabref/external/SynchronizeFileField.java
@@ -1,407 +1,407 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import net.sf.jabref.*;
-import net.sf.jabref.gui.FileListEditor;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.gui.FileListEntryEditor;
-import net.sf.jabref.gui.FileListTableModel;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableFieldChange;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.util.*;
-
-/**
- * This action goes through all selected entries in the BasePanel, and attempts to autoset the
- * given external file (pdf, ps, ...) based on the same algorithm used for the "Auto" button in
- * EntryEditor.
- */
-public class SynchronizeFileField extends AbstractWorker {
-
-    private String fieldName = GUIGlobals.FILE_FIELD;
-    private BasePanel panel;
-    private BibtexEntry[] sel = null;
-    private SynchronizeFileField.OptionsDialog optDiag = null;
-
-    Object[] brokenLinkOptions =
-            {Globals.lang("Ignore"), Globals.lang("Assign new file"), Globals.lang("Remove link"),
-                    Globals.lang("Remove all broken links"),
-                    Globals.lang("Quit synchronization")};
-
-    private boolean goOn = true, autoSet = true, checkExisting = true;
-
-    private int brokenLinks = 0, entriesChangedCount = 0;
-
-    public SynchronizeFileField(BasePanel panel) {
-        this.panel = panel;
-    }
-
-    public void init() {
-        Collection<BibtexEntry> col = panel.database().getEntries();
-        goOn = true;
-        sel = new BibtexEntry[col.size()];
-        sel = col.toArray(sel);
-
-        // Ask about rules for the operation:
-        if (optDiag == null)
-            optDiag = new SynchronizeFileField.OptionsDialog(panel.frame(), panel.metaData(), fieldName);
-        Util.placeDialog(optDiag, panel.frame());
-        optDiag.setVisible(true);
-        if (optDiag.canceled()) {
-            goOn = false;
-            return;
-        }
-        autoSet = !optDiag.autoSetNone.isSelected();
-        checkExisting = optDiag.checkLinks.isSelected();
-        
-        panel.output(Globals.lang("Synchronizing %0 links...", fieldName.toUpperCase()));
-    }
-
-    public void run() {
-        if (!goOn) {
-            panel.output(Globals.lang("No entries selected."));
-            return;
-        }
-        panel.frame().setProgressBarValue(0);
-        panel.frame().setProgressBarVisible(true);
-        int weightAutoSet = 10; // autoSet takes 10 (?) times longer than checkExisting
-        int progressBarMax = (autoSet ? weightAutoSet * sel.length : 0)
-                + (checkExisting ? sel.length : 0);
-        panel.frame().setProgressBarMaximum(progressBarMax);
-        int progress = 0;
-        brokenLinks = 0;
-        final NamedCompound ce = new NamedCompound(Globals.lang("Autoset %0 field", fieldName));
-
-        //final OpenFileFilter off = Util.getFileFilterForField(fieldName);
-
-        //ExternalFilePanel extPan = new ExternalFilePanel(fieldName, panel.metaData(), null, null, off);
-        //FieldTextField editor = new FieldTextField(fieldName, "", false);
-
-        // Find the default directory for this field type:
-        String[] dirsS = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-        Set<BibtexEntry> changedEntries = new HashSet<BibtexEntry>();
-
-        // First we try to autoset fields
-        if (autoSet) {
-            Collection<BibtexEntry> entries = new ArrayList<BibtexEntry>();
-            for (int i = 0; i < sel.length; i++) {
-                entries.add(sel[i]);
-            }
-
-            // We need to specify which directories to search in:
-            ArrayList<File> dirs = new ArrayList<File>();
-            for (int i=0; i<dirsS.length; i++)
-                dirs.add(new File(dirsS[i]));
-
-            // Start the autosetting process:                
-            Thread t = FileListEditor.autoSetLinks(entries, ce, changedEntries, dirs);
-            // Wait for the autosetting to finish:
-            try {
-                t.join();
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
-            /*
-                progress += weightAutoSet;
-                panel.frame().setProgressBarValue(progress);
-
-                Object old = sel[i].getField(fieldName);
-                FileListTableModel tableModel = new FileListTableModel();
-                if (old != null)
-                    tableModel.setContent((String)old);
-                Thread t = FileListEditor.autoSetLinks(sel[i], tableModel, null, null);
-
-                if (!tableModel.getStringRepresentation().equals(old)) {
-                    String toSet = tableModel.getStringRepresentation();
-                    if (toSet.length() == 0)
-                        toSet = null;
-                    ce.addEdit(new UndoableFieldChange(sel[i], fieldName, old, toSet));
-                    sel[i].setField(fieldName, toSet);
-                    entriesChanged++;
-                }
-            }    */
-
-        }
-        progress += sel.length*weightAutoSet;
-        panel.frame().setProgressBarValue(progress);
-        //System.out.println("Done setting");
-        // The following loop checks all external links that are already set.
-        if (checkExisting) {
-            boolean removeAllBroken = false;
-            mainLoop:
-            for (int i = 0; i < sel.length; i++) {
-                panel.frame().setProgressBarValue(progress++);
-                final String old = sel[i].getField(fieldName);
-                // Check if a extension is set:
-                if ((old != null) && !old.equals("")) {
-                    FileListTableModel tableModel = new FileListTableModel();
-                    tableModel.setContentDontGuessTypes(old);
-                    for (int j=0; j<tableModel.getRowCount(); j++) {
-                        FileListEntry flEntry = tableModel.getEntry(j);
-                        // See if the link looks like an URL:
-                        boolean httpLink = flEntry.getLink().toLowerCase().startsWith("http");
-                        if (httpLink)
-                            continue; // Don't check the remote file.
-                        // TODO: should there be an option to check remote links?
-
-                        // A variable to keep track of whether this link gets deleted:
-                        boolean deleted = false;
-
-                        // Get an absolute path representation:
-                        File file = Util.expandFilename(flEntry.getLink(), dirsS);
-                        if ((file == null) || !file.exists()) {
-                            int answer;
-                            if (!removeAllBroken) {
-                                answer = JOptionPane.showOptionDialog(panel.frame(),
-                                    Globals.lang("<HTML>Could not find file '%0'<BR>linked from entry '%1'</HTML>",
-                                            new String[]{flEntry.getLink(), sel[i].getCiteKey()}),
-                                    Globals.lang("Broken link"),
-                                    JOptionPane.YES_NO_CANCEL_OPTION,
-                                    JOptionPane.QUESTION_MESSAGE, null, brokenLinkOptions, brokenLinkOptions[0]);
-                            }
-                            else {
-                                answer = 2; // We should delete this link.
-                            }
-                            switch (answer) {
-                                case 1:
-                                    // Assign new file.
-                                    FileListEntryEditor flEditor = new FileListEntryEditor
-                                            (panel.frame(), flEntry, false, true, panel.metaData());
-                                    flEditor.setVisible(true, true);
-                                    break;
-                                case 2:
-                                    // Clear field:
-                                    tableModel.removeEntry(j);
-                                    deleted = true; // Make sure we don't investigate this link further.
-                                    j--; // Step back in the iteration, because we removed an entry.
-                                    break;
-                                case 3:
-                                    // Clear field:
-                                    tableModel.removeEntry(j);
-                                    deleted = true; // Make sure we don't investigate this link further.
-                                    j--; // Step back in the iteration, because we removed an entry.
-                                    removeAllBroken = true; // Notify for further cases.
-                                    break;
-                                case 4:
-                                    // Cancel
-                                    break mainLoop;
-                            }
-                            brokenLinks++;
-                        }
-
-                        // Unless we deleted this link, see if its file type is recognized:
-                        if (!deleted && (flEntry.getType() instanceof UnknownExternalFileType)) {
-                            String[] options = new String[]
-                                    {Globals.lang("Define '%0'", flEntry.getType().getName()),
-                                    Globals.lang("Change file type"), Globals.lang("Cancel")};
-                            String defOption = options[0];
-                            int answer = JOptionPane.showOptionDialog(panel.frame(), Globals.lang("One or more file links are of the type '%0', which is undefined. What do you want to do?",
-                                    flEntry.getType().getName()),
-                                    Globals.lang("Undefined file type"), JOptionPane.YES_NO_CANCEL_OPTION,
-                                    JOptionPane.QUESTION_MESSAGE, null, options, defOption);
-                            if (answer == JOptionPane.CANCEL_OPTION) {
-                                // User doesn't want to handle this unknown link type.
-                            }
-                            else if (answer == JOptionPane.YES_OPTION) {
-                                // User wants to define the new file type. Show the dialog:
-                                ExternalFileType newType = new ExternalFileType(flEntry.getType().getName(), "", "", "", "new");
-                                ExternalFileTypeEntryEditor editor = new ExternalFileTypeEntryEditor(panel.frame(), newType);
-                                editor.setVisible(true);
-                                if (editor.okPressed()) {
-                                    // Get the old list of types, add this one, and update the list in prefs:
-                                    java.util.List<ExternalFileType> fileTypes = new ArrayList<ExternalFileType>();
-                                    ExternalFileType[] oldTypes = Globals.prefs.getExternalFileTypeSelection();
-                                    for (int k = 0; k < oldTypes.length; k++) {
-                                        fileTypes.add(oldTypes[k]);
-                                    }
-                                    fileTypes.add(newType);
-                                    Collections.sort(fileTypes);
-                                    Globals.prefs.setExternalFileTypes(fileTypes);
-                                    panel.mainTable.repaint();
-                                }
-                            }
-                            else {
-                                // User wants to change the type of this link.
-                                // First get a model of all file links for this entry:
-                                FileListEntryEditor editor = new FileListEntryEditor
-                                        (panel.frame(), flEntry, false, true, panel.metaData());
-                                editor.setVisible(true, false);
-                            }
-                        }
-                    }
-
-                    if (!tableModel.getStringRepresentation().equals(old)) {
-                        // The table has been modified. Store the change:
-                        String toSet = tableModel.getStringRepresentation();
-                        if (toSet.length() == 0)
-                            toSet = null;
-                        ce.addEdit(new UndoableFieldChange(sel[i], fieldName, old,
-                                toSet));
-                        sel[i].setField(fieldName, toSet);
-                        changedEntries.add(sel[i]);
-                        //System.out.println("Changed to: "+tableModel.getStringRepresentation());
-                    }
-
-
-                }
-            }
-        }
-
-        entriesChangedCount = changedEntries.size();
-	//for (BibtexEntry entr : changedEntries)
-	//    System.out.println(entr.getCiteKey());
-        if (entriesChangedCount > 0) {
-            // Add the undo edit:
-            ce.end();
-            panel.undoManager.addEdit(ce);
-            
-        }
-    }
-
-
-    public void update() {
-        if (!goOn)
-            return;
-
-        panel.output(Globals.lang("Finished synchronizing %0 links. Entries changed%c %1.",
-                new String[]{fieldName.toUpperCase(), String.valueOf(entriesChangedCount)}));
-        panel.frame().setProgressBarVisible(false);
-        if (entriesChangedCount > 0) {
-            panel.markBaseChanged();
-        }
-    }
-
-    static class OptionsDialog extends JDialog {
-        JRadioButton autoSetUnset, autoSetAll, autoSetNone;
-        JCheckBox checkLinks;
-        JButton ok = new JButton(Globals.lang("Ok")),
-                cancel = new JButton(Globals.lang("Cancel"));
-        JLabel description;
-        private boolean canceled = true;
-        private MetaData metaData;
-
-        public OptionsDialog(JFrame parent, MetaData metaData, String fieldName) {
-            super(parent, Globals.lang("Synchronize %0 links", fieldName.toUpperCase()), true);
-            this.metaData = metaData;
-            final String fn = Globals.lang("file");
-            ok.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    canceled = false;
-                    dispose();
-                }
-            });
-
-            Action closeAction = new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    dispose();
-                }
-            };
-
-
-            cancel.addActionListener(closeAction);
-
-            InputMap im = cancel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-            ActionMap am = cancel.getActionMap();
-            im.put(Globals.prefs.getKey("Close dialog"), "close");
-            am.put("close", closeAction);
-
-            autoSetUnset = new JRadioButton(Globals.lang("Autoset %0 links. Do not overwrite existing links.", fn), true);
-            autoSetAll = new JRadioButton(Globals.lang("Autoset %0 links. Allow overwriting existing links.", fn), false);
-            autoSetNone = new JRadioButton(Globals.lang("Do not autoset"), false);
-            checkLinks = new JCheckBox(Globals.lang("Check existing %0 links", fn), true);
-            ButtonGroup bg = new ButtonGroup();
-            bg.add(autoSetUnset);
-            bg.add(autoSetNone);
-            bg.add(autoSetAll);
-            FormLayout layout = new FormLayout("fill:pref", "");
-            DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-            description = new JLabel("<HTML>" +
-                    Globals.lang(//"This function helps you keep your external %0 links up-to-date." +
-                            "Attempt to autoset %0 links for your entries. Autoset works if "
-                                    + "a %0 file in your %0 directory or a subdirectory<BR>is named identically to an entry's BibTeX key, plus extension.", fn)
-                    + "</HTML>");
-            //            name.setVerticalAlignment(JLabel.TOP);
-            builder.appendSeparator(Globals.lang("Autoset"));
-            builder.append(description);
-            builder.nextLine();
-            builder.append(autoSetUnset);
-            builder.nextLine();
-            builder.append(autoSetAll);
-            builder.nextLine();
-            builder.append(autoSetNone);
-            builder.nextLine();
-            builder.appendSeparator(Globals.lang("Check links"));
-
-            description = new JLabel("<HTML>" +
-                    Globals.lang("This makes JabRef look up each %0 extension and check if the file exists. If not, you will be given options<BR>to resolve the problem.", fn)
-                    + "</HTML>");
-            builder.append(description);
-            builder.nextLine();
-            builder.append(checkLinks);
-            builder.nextLine();
-            builder.appendSeparator();
-
-
-            JPanel main = builder.getPanel();
-            main.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-
-            ButtonBarBuilder bb = new ButtonBarBuilder();
-            bb.addGlue();
-            bb.addButton(ok);
-            bb.addButton(cancel);
-            bb.addGlue();
-            getContentPane().add(main, BorderLayout.CENTER);
-            getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-
-            pack();
-        }
-
-        public void setVisible(boolean visible) {
-            if (visible)
-                canceled = true;
-
-            String[] dirs = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
-            if (dirs.length == 0) {
-
-                autoSetNone.setSelected(true);
-                autoSetNone.setEnabled(false);
-                autoSetAll.setEnabled(false);
-                autoSetUnset.setEnabled(false);
-            } else {
-                autoSetNone.setEnabled(true);
-                autoSetAll.setEnabled(true);
-                autoSetUnset.setEnabled(true);
-            }
-
-            new FocusRequester(ok);
-            super.setVisible(visible);
-
-        }
-
-        public boolean canceled() {
-            return canceled;
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import net.sf.jabref.*;
+import net.sf.jabref.gui.FileListEditor;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileListEntryEditor;
+import net.sf.jabref.gui.FileListTableModel;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableFieldChange;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.util.*;
+
+/**
+ * This action goes through all selected entries in the BasePanel, and attempts to autoset the
+ * given external file (pdf, ps, ...) based on the same algorithm used for the "Auto" button in
+ * EntryEditor.
+ */
+public class SynchronizeFileField extends AbstractWorker {
+
+    private String fieldName = GUIGlobals.FILE_FIELD;
+    private BasePanel panel;
+    private BibtexEntry[] sel = null;
+    private SynchronizeFileField.OptionsDialog optDiag = null;
+
+    Object[] brokenLinkOptions =
+            {Globals.lang("Ignore"), Globals.lang("Assign new file"), Globals.lang("Remove link"),
+                    Globals.lang("Remove all broken links"),
+                    Globals.lang("Quit synchronization")};
+
+    private boolean goOn = true, autoSet = true, checkExisting = true;
+
+    private int brokenLinks = 0, entriesChangedCount = 0;
+
+    public SynchronizeFileField(BasePanel panel) {
+        this.panel = panel;
+    }
+
+    public void init() {
+        Collection<BibtexEntry> col = panel.database().getEntries();
+        goOn = true;
+        sel = new BibtexEntry[col.size()];
+        sel = col.toArray(sel);
+
+        // Ask about rules for the operation:
+        if (optDiag == null)
+            optDiag = new SynchronizeFileField.OptionsDialog(panel.frame(), panel.metaData(), fieldName);
+        Util.placeDialog(optDiag, panel.frame());
+        optDiag.setVisible(true);
+        if (optDiag.canceled()) {
+            goOn = false;
+            return;
+        }
+        autoSet = !optDiag.autoSetNone.isSelected();
+        checkExisting = optDiag.checkLinks.isSelected();
+        
+        panel.output(Globals.lang("Synchronizing %0 links...", fieldName.toUpperCase()));
+    }
+
+    public void run() {
+        if (!goOn) {
+            panel.output(Globals.lang("No entries selected."));
+            return;
+        }
+        panel.frame().setProgressBarValue(0);
+        panel.frame().setProgressBarVisible(true);
+        int weightAutoSet = 10; // autoSet takes 10 (?) times longer than checkExisting
+        int progressBarMax = (autoSet ? weightAutoSet * sel.length : 0)
+                + (checkExisting ? sel.length : 0);
+        panel.frame().setProgressBarMaximum(progressBarMax);
+        int progress = 0;
+        brokenLinks = 0;
+        final NamedCompound ce = new NamedCompound(Globals.lang("Autoset %0 field", fieldName));
+
+        //final OpenFileFilter off = Util.getFileFilterForField(fieldName);
+
+        //ExternalFilePanel extPan = new ExternalFilePanel(fieldName, panel.metaData(), null, null, off);
+        //FieldTextField editor = new FieldTextField(fieldName, "", false);
+
+        // Find the default directory for this field type:
+        String[] dirsS = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+        Set<BibtexEntry> changedEntries = new HashSet<BibtexEntry>();
+
+        // First we try to autoset fields
+        if (autoSet) {
+            Collection<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+            for (int i = 0; i < sel.length; i++) {
+                entries.add(sel[i]);
+            }
+
+            // We need to specify which directories to search in:
+            ArrayList<File> dirs = new ArrayList<File>();
+            for (int i=0; i<dirsS.length; i++)
+                dirs.add(new File(dirsS[i]));
+
+            // Start the autosetting process:                
+            Thread t = FileListEditor.autoSetLinks(entries, ce, changedEntries, dirs);
+            // Wait for the autosetting to finish:
+            try {
+                t.join();
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            /*
+                progress += weightAutoSet;
+                panel.frame().setProgressBarValue(progress);
+
+                Object old = sel[i].getField(fieldName);
+                FileListTableModel tableModel = new FileListTableModel();
+                if (old != null)
+                    tableModel.setContent((String)old);
+                Thread t = FileListEditor.autoSetLinks(sel[i], tableModel, null, null);
+
+                if (!tableModel.getStringRepresentation().equals(old)) {
+                    String toSet = tableModel.getStringRepresentation();
+                    if (toSet.length() == 0)
+                        toSet = null;
+                    ce.addEdit(new UndoableFieldChange(sel[i], fieldName, old, toSet));
+                    sel[i].setField(fieldName, toSet);
+                    entriesChanged++;
+                }
+            }    */
+
+        }
+        progress += sel.length*weightAutoSet;
+        panel.frame().setProgressBarValue(progress);
+        //System.out.println("Done setting");
+        // The following loop checks all external links that are already set.
+        if (checkExisting) {
+            boolean removeAllBroken = false;
+            mainLoop:
+            for (int i = 0; i < sel.length; i++) {
+                panel.frame().setProgressBarValue(progress++);
+                final String old = sel[i].getField(fieldName);
+                // Check if a extension is set:
+                if ((old != null) && !old.equals("")) {
+                    FileListTableModel tableModel = new FileListTableModel();
+                    tableModel.setContentDontGuessTypes(old);
+                    for (int j=0; j<tableModel.getRowCount(); j++) {
+                        FileListEntry flEntry = tableModel.getEntry(j);
+                        // See if the link looks like an URL:
+                        boolean httpLink = flEntry.getLink().toLowerCase().startsWith("http");
+                        if (httpLink)
+                            continue; // Don't check the remote file.
+                        // TODO: should there be an option to check remote links?
+
+                        // A variable to keep track of whether this link gets deleted:
+                        boolean deleted = false;
+
+                        // Get an absolute path representation:
+                        File file = Util.expandFilename(flEntry.getLink(), dirsS);
+                        if ((file == null) || !file.exists()) {
+                            int answer;
+                            if (!removeAllBroken) {
+                                answer = JOptionPane.showOptionDialog(panel.frame(),
+                                    Globals.lang("<HTML>Could not find file '%0'<BR>linked from entry '%1'</HTML>",
+                                            new String[]{flEntry.getLink(), sel[i].getCiteKey()}),
+                                    Globals.lang("Broken link"),
+                                    JOptionPane.YES_NO_CANCEL_OPTION,
+                                    JOptionPane.QUESTION_MESSAGE, null, brokenLinkOptions, brokenLinkOptions[0]);
+                            }
+                            else {
+                                answer = 2; // We should delete this link.
+                            }
+                            switch (answer) {
+                                case 1:
+                                    // Assign new file.
+                                    FileListEntryEditor flEditor = new FileListEntryEditor
+                                            (panel.frame(), flEntry, false, true, panel.metaData());
+                                    flEditor.setVisible(true, true);
+                                    break;
+                                case 2:
+                                    // Clear field:
+                                    tableModel.removeEntry(j);
+                                    deleted = true; // Make sure we don't investigate this link further.
+                                    j--; // Step back in the iteration, because we removed an entry.
+                                    break;
+                                case 3:
+                                    // Clear field:
+                                    tableModel.removeEntry(j);
+                                    deleted = true; // Make sure we don't investigate this link further.
+                                    j--; // Step back in the iteration, because we removed an entry.
+                                    removeAllBroken = true; // Notify for further cases.
+                                    break;
+                                case 4:
+                                    // Cancel
+                                    break mainLoop;
+                            }
+                            brokenLinks++;
+                        }
+
+                        // Unless we deleted this link, see if its file type is recognized:
+                        if (!deleted && (flEntry.getType() instanceof UnknownExternalFileType)) {
+                            String[] options = new String[]
+                                    {Globals.lang("Define '%0'", flEntry.getType().getName()),
+                                    Globals.lang("Change file type"), Globals.lang("Cancel")};
+                            String defOption = options[0];
+                            int answer = JOptionPane.showOptionDialog(panel.frame(), Globals.lang("One or more file links are of the type '%0', which is undefined. What do you want to do?",
+                                    flEntry.getType().getName()),
+                                    Globals.lang("Undefined file type"), JOptionPane.YES_NO_CANCEL_OPTION,
+                                    JOptionPane.QUESTION_MESSAGE, null, options, defOption);
+                            if (answer == JOptionPane.CANCEL_OPTION) {
+                                // User doesn't want to handle this unknown link type.
+                            }
+                            else if (answer == JOptionPane.YES_OPTION) {
+                                // User wants to define the new file type. Show the dialog:
+                                ExternalFileType newType = new ExternalFileType(flEntry.getType().getName(), "", "", "", "new");
+                                ExternalFileTypeEntryEditor editor = new ExternalFileTypeEntryEditor(panel.frame(), newType);
+                                editor.setVisible(true);
+                                if (editor.okPressed()) {
+                                    // Get the old list of types, add this one, and update the list in prefs:
+                                    java.util.List<ExternalFileType> fileTypes = new ArrayList<ExternalFileType>();
+                                    ExternalFileType[] oldTypes = Globals.prefs.getExternalFileTypeSelection();
+                                    for (int k = 0; k < oldTypes.length; k++) {
+                                        fileTypes.add(oldTypes[k]);
+                                    }
+                                    fileTypes.add(newType);
+                                    Collections.sort(fileTypes);
+                                    Globals.prefs.setExternalFileTypes(fileTypes);
+                                    panel.mainTable.repaint();
+                                }
+                            }
+                            else {
+                                // User wants to change the type of this link.
+                                // First get a model of all file links for this entry:
+                                FileListEntryEditor editor = new FileListEntryEditor
+                                        (panel.frame(), flEntry, false, true, panel.metaData());
+                                editor.setVisible(true, false);
+                            }
+                        }
+                    }
+
+                    if (!tableModel.getStringRepresentation().equals(old)) {
+                        // The table has been modified. Store the change:
+                        String toSet = tableModel.getStringRepresentation();
+                        if (toSet.length() == 0)
+                            toSet = null;
+                        ce.addEdit(new UndoableFieldChange(sel[i], fieldName, old,
+                                toSet));
+                        sel[i].setField(fieldName, toSet);
+                        changedEntries.add(sel[i]);
+                        //System.out.println("Changed to: "+tableModel.getStringRepresentation());
+                    }
+
+
+                }
+            }
+        }
+
+        entriesChangedCount = changedEntries.size();
+	//for (BibtexEntry entr : changedEntries)
+	//    System.out.println(entr.getCiteKey());
+        if (entriesChangedCount > 0) {
+            // Add the undo edit:
+            ce.end();
+            panel.undoManager.addEdit(ce);
+            
+        }
+    }
+
+
+    public void update() {
+        if (!goOn)
+            return;
+
+        panel.output(Globals.lang("Finished synchronizing %0 links. Entries changed%c %1.",
+                new String[]{fieldName.toUpperCase(), String.valueOf(entriesChangedCount)}));
+        panel.frame().setProgressBarVisible(false);
+        if (entriesChangedCount > 0) {
+            panel.markBaseChanged();
+        }
+    }
+
+    static class OptionsDialog extends JDialog {
+        JRadioButton autoSetUnset, autoSetAll, autoSetNone;
+        JCheckBox checkLinks;
+        JButton ok = new JButton(Globals.lang("Ok")),
+                cancel = new JButton(Globals.lang("Cancel"));
+        JLabel description;
+        private boolean canceled = true;
+        private MetaData metaData;
+
+        public OptionsDialog(JFrame parent, MetaData metaData, String fieldName) {
+            super(parent, Globals.lang("Synchronize %0 links", fieldName.toUpperCase()), true);
+            this.metaData = metaData;
+            final String fn = Globals.lang("file");
+            ok.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    canceled = false;
+                    dispose();
+                }
+            });
+
+            Action closeAction = new AbstractAction() {
+                public void actionPerformed(ActionEvent e) {
+                    dispose();
+                }
+            };
+
+
+            cancel.addActionListener(closeAction);
+
+            InputMap im = cancel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+            ActionMap am = cancel.getActionMap();
+            im.put(Globals.prefs.getKey("Close dialog"), "close");
+            am.put("close", closeAction);
+
+            autoSetUnset = new JRadioButton(Globals.lang("Autoset %0 links. Do not overwrite existing links.", fn), true);
+            autoSetAll = new JRadioButton(Globals.lang("Autoset %0 links. Allow overwriting existing links.", fn), false);
+            autoSetNone = new JRadioButton(Globals.lang("Do not autoset"), false);
+            checkLinks = new JCheckBox(Globals.lang("Check existing %0 links", fn), true);
+            ButtonGroup bg = new ButtonGroup();
+            bg.add(autoSetUnset);
+            bg.add(autoSetNone);
+            bg.add(autoSetAll);
+            FormLayout layout = new FormLayout("fill:pref", "");
+            DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+            description = new JLabel("<HTML>" +
+                    Globals.lang(//"This function helps you keep your external %0 links up-to-date." +
+                            "Attempt to autoset %0 links for your entries. Autoset works if "
+                                    + "a %0 file in your %0 directory or a subdirectory<BR>is named identically to an entry's BibTeX key, plus extension.", fn)
+                    + "</HTML>");
+            //            name.setVerticalAlignment(JLabel.TOP);
+            builder.appendSeparator(Globals.lang("Autoset"));
+            builder.append(description);
+            builder.nextLine();
+            builder.append(autoSetUnset);
+            builder.nextLine();
+            builder.append(autoSetAll);
+            builder.nextLine();
+            builder.append(autoSetNone);
+            builder.nextLine();
+            builder.appendSeparator(Globals.lang("Check links"));
+
+            description = new JLabel("<HTML>" +
+                    Globals.lang("This makes JabRef look up each %0 extension and check if the file exists. If not, you will be given options<BR>to resolve the problem.", fn)
+                    + "</HTML>");
+            builder.append(description);
+            builder.nextLine();
+            builder.append(checkLinks);
+            builder.nextLine();
+            builder.appendSeparator();
+
+
+            JPanel main = builder.getPanel();
+            main.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+            ButtonBarBuilder bb = new ButtonBarBuilder();
+            bb.addGlue();
+            bb.addButton(ok);
+            bb.addButton(cancel);
+            bb.addGlue();
+            getContentPane().add(main, BorderLayout.CENTER);
+            getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+
+            pack();
+        }
+
+        public void setVisible(boolean visible) {
+            if (visible)
+                canceled = true;
+
+            String[] dirs = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+            if (dirs.length == 0) {
+
+                autoSetNone.setSelected(true);
+                autoSetNone.setEnabled(false);
+                autoSetAll.setEnabled(false);
+                autoSetUnset.setEnabled(false);
+            } else {
+                autoSetNone.setEnabled(true);
+                autoSetAll.setEnabled(true);
+                autoSetUnset.setEnabled(true);
+            }
+
+            new FocusRequester(ok);
+            super.setVisible(visible);
+
+        }
+
+        public boolean canceled() {
+            return canceled;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/external/TransferableFileLinkSelection.java b/src/java/net/sf/jabref/external/TransferableFileLinkSelection.java
index 3385aed..e714c40 100644
--- a/src/java/net/sf/jabref/external/TransferableFileLinkSelection.java
+++ b/src/java/net/sf/jabref/external/TransferableFileLinkSelection.java
@@ -1,116 +1,116 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Util;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.gui.FileListTableModel;
-
-import java.awt.datatransfer.StringSelection;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * 
- */
-public class TransferableFileLinkSelection implements Transferable {
-
-    List<File> fileList = new ArrayList<File>();
-
-    public TransferableFileLinkSelection(BasePanel panel, BibtexEntry[] selection) {
-        String s = selection[0].getField(GUIGlobals.FILE_FIELD);
-        FileListTableModel tm = new FileListTableModel();
-        if (s != null)
-            tm.setContent(s);
-        if (tm.getRowCount() > 0) {
-            // Find the default directory for this field type, if any:
-            String[] dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-            File expLink = Util.expandFilename(tm.getEntry(0).getLink(), dirs);
-            fileList.add(expLink);
-
-        }
-
-    }
-
-    public DataFlavor[] getTransferDataFlavors() {
-        return new DataFlavor[] {DataFlavor.javaFileListFlavor};//, DataFlavor.stringFlavor};
-    }
-
-    public boolean isDataFlavorSupported(DataFlavor dataFlavor) {
-        System.out.println("Query: "+dataFlavor.getHumanPresentableName()+" , "+
-            dataFlavor.getDefaultRepresentationClass()+" , "+dataFlavor.getMimeType());
-        return dataFlavor.equals(DataFlavor.javaFileListFlavor)
-                || dataFlavor.equals(DataFlavor.stringFlavor);
-    }
-
-    public Object getTransferData(DataFlavor dataFlavor) throws UnsupportedFlavorException, IOException {
-        //if (dataFlavor.equals(DataFlavor.javaFileListFlavor))
-            return fileList;
-        //else
-        //    return "test";
-    }
-    /*
-    private StringSelection ss;
-
-    public TransferableFileLinkSelection(BasePanel panel, BibtexEntry[] selection) {
-        String s = selection[0].getField(GUIGlobals.FILE_FIELD);
-        FileListTableModel tm = new FileListTableModel();
-        if (s != null)
-            tm.setContent(s);
-        if (tm.getRowCount() > 0) {
-            // Find the default directory for this field type, if any:
-            String dir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-            // Include the standard "file" directory:
-            String fileDir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-            // Include the directory of the bib file:
-            String[] dirs;
-            if (panel.metaData().getFile() != null) {
-                String databaseDir = panel.metaData().getFile().getParent();
-                dirs = new String[] { dir, fileDir, databaseDir };
-            }
-            else
-                dirs = new String[] { dir, fileDir };
-            System.out.println(tm.getEntry(0).getLink());
-            for (int i = 0; i < dirs.length; i++) {
-                String dir1 = dirs[i];
-                System.out.println("dir:"+dir1);
-            }
-            File expLink = Util.expandFilename(tm.getEntry(0).getLink(), dirs);
-            try { 
-                System.out.println(expLink.toURI().toURL().toString());
-                ss = new StringSelection(expLink.toURI().toURL().toString());
-                
-            } catch (MalformedURLException ex) {
-                ss = new StringSelection("");
-            }
-        }
-        else
-            ss = new StringSelection("");
-
-    }
-
-    public Transferable getTransferable() {
-        return ss;
-    } */
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Util;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.gui.FileListTableModel;
+
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * 
+ */
+public class TransferableFileLinkSelection implements Transferable {
+
+    List<File> fileList = new ArrayList<File>();
+
+    public TransferableFileLinkSelection(BasePanel panel, BibtexEntry[] selection) {
+        String s = selection[0].getField(GUIGlobals.FILE_FIELD);
+        FileListTableModel tm = new FileListTableModel();
+        if (s != null)
+            tm.setContent(s);
+        if (tm.getRowCount() > 0) {
+            // Find the default directory for this field type, if any:
+            String[] dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            File expLink = Util.expandFilename(tm.getEntry(0).getLink(), dirs);
+            fileList.add(expLink);
+
+        }
+
+    }
+
+    public DataFlavor[] getTransferDataFlavors() {
+        return new DataFlavor[] {DataFlavor.javaFileListFlavor};//, DataFlavor.stringFlavor};
+    }
+
+    public boolean isDataFlavorSupported(DataFlavor dataFlavor) {
+        System.out.println("Query: "+dataFlavor.getHumanPresentableName()+" , "+
+            dataFlavor.getDefaultRepresentationClass()+" , "+dataFlavor.getMimeType());
+        return dataFlavor.equals(DataFlavor.javaFileListFlavor)
+                || dataFlavor.equals(DataFlavor.stringFlavor);
+    }
+
+    public Object getTransferData(DataFlavor dataFlavor) throws UnsupportedFlavorException, IOException {
+        //if (dataFlavor.equals(DataFlavor.javaFileListFlavor))
+            return fileList;
+        //else
+        //    return "test";
+    }
+    /*
+    private StringSelection ss;
+
+    public TransferableFileLinkSelection(BasePanel panel, BibtexEntry[] selection) {
+        String s = selection[0].getField(GUIGlobals.FILE_FIELD);
+        FileListTableModel tm = new FileListTableModel();
+        if (s != null)
+            tm.setContent(s);
+        if (tm.getRowCount() > 0) {
+            // Find the default directory for this field type, if any:
+            String dir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            // Include the standard "file" directory:
+            String fileDir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            // Include the directory of the bib file:
+            String[] dirs;
+            if (panel.metaData().getFile() != null) {
+                String databaseDir = panel.metaData().getFile().getParent();
+                dirs = new String[] { dir, fileDir, databaseDir };
+            }
+            else
+                dirs = new String[] { dir, fileDir };
+            System.out.println(tm.getEntry(0).getLink());
+            for (int i = 0; i < dirs.length; i++) {
+                String dir1 = dirs[i];
+                System.out.println("dir:"+dir1);
+            }
+            File expLink = Util.expandFilename(tm.getEntry(0).getLink(), dirs);
+            try { 
+                System.out.println(expLink.toURI().toURL().toString());
+                ss = new StringSelection(expLink.toURI().toURL().toString());
+                
+            } catch (MalformedURLException ex) {
+                ss = new StringSelection("");
+            }
+        }
+        else
+            ss = new StringSelection("");
+
+    }
+
+    public Transferable getTransferable() {
+        return ss;
+    } */
+}
diff --git a/src/java/net/sf/jabref/external/UnknownExternalFileType.java b/src/java/net/sf/jabref/external/UnknownExternalFileType.java
index e8bc5b0..bf23228 100644
--- a/src/java/net/sf/jabref/external/UnknownExternalFileType.java
+++ b/src/java/net/sf/jabref/external/UnknownExternalFileType.java
@@ -1,30 +1,30 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-
-/**
- * This subclass of ExternalFileType is used to mark types that are unknown.
- * This can be the case when a database is loaded which contains links to files
- * of a type that has not been defined on this JabRef instance.
- */
-public class UnknownExternalFileType extends ExternalFileType {
-
-    public UnknownExternalFileType(String name) {
-        super(name, "", "", "", "unknown");
-    }
-    
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+
+/**
+ * This subclass of ExternalFileType is used to mark types that are unknown.
+ * This can be the case when a database is loaded which contains links to files
+ * of a type that has not been defined on this JabRef instance.
+ */
+public class UnknownExternalFileType extends ExternalFileType {
+
+    public UnknownExternalFileType(String name) {
+        super(name, "", "", "", "unknown");
+    }
+    
+}
diff --git a/src/java/net/sf/jabref/external/WriteXMPAction.java b/src/java/net/sf/jabref/external/WriteXMPAction.java
index 6a460a6..f86cc62 100644
--- a/src/java/net/sf/jabref/external/WriteXMPAction.java
+++ b/src/java/net/sf/jabref/external/WriteXMPAction.java
@@ -1,281 +1,281 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.util.List;
-import java.util.ArrayList;
-
-import javax.swing.*;
-
-import net.sf.jabref.*;
-import net.sf.jabref.gui.FileListTableModel;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.util.XMPUtil;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-/**
- * 
- * This action goes through all selected entries in the BasePanel, and attempts
- * to write the XMP data to the external pdf.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class WriteXMPAction extends AbstractWorker {
-
-	BasePanel panel;
-
-	BibtexEntry[] entries;
-	
-	BibtexDatabase database;
-
-	OptionsDialog optDiag;
-
-	boolean goOn = true;
-
-	int skipped, entriesChanged, errors;
-
-	public WriteXMPAction(BasePanel panel) {
-		this.panel = panel;
-	}
-
-	public void init() {
-
-		// Get entries and check if it makes sense to perform this operation
-		entries = panel.getSelectedEntries();
-
-		if (entries.length == 0) {
-
-			database = panel.getDatabase();
-			entries = database.getEntries().toArray(new BibtexEntry[]{});
-
-			if (entries.length == 0) {
-
-				JOptionPane.showMessageDialog(panel, Globals
-					.lang("This operation requires at least one entry."), Globals
-					.lang("Write XMP-metadata"), JOptionPane.ERROR_MESSAGE);
-				goOn = false;
-				return;
-
-			} else {
-
-				int response = JOptionPane.showConfirmDialog(panel, Globals
-					.lang("Write XMP-metadata for all PDFs in current database?"), Globals
-					.lang("Write XMP-metadata"), JOptionPane.YES_NO_CANCEL_OPTION,
-					JOptionPane.QUESTION_MESSAGE);
-
-				if (response != JOptionPane.YES_OPTION) {
-					goOn = false;
-					return;
-				}
-			}
-		}
-
-		errors = entriesChanged = skipped = 0;
-
-		if (optDiag == null) {
-			optDiag = new OptionsDialog(panel.frame());
-		}
-		optDiag.open();
-
-		panel.output(Globals.lang("Writing XMP metadata..."));
-	}
-
-	public void run() {
-
-		if (!goOn)
-			return;
-
-		for (int i = 0; i < entries.length; i++) {
-
-			BibtexEntry entry = entries[i];
-
-            // Make a list of all PDFs linked from this entry:
-            List<File> files = new ArrayList<File>();
-
-            // First check the (legacy) "pdf" field:
-            String pdf = entry.getField("pdf");
-            String[] dirs = panel.metaData().getFileDirectory("pdf");
-            File f = Util.expandFilename(pdf, dirs);
-            if (f != null)
-                files.add(f);
-
-            // Then check the "file" field:
-            dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-            String field = entry.getField(GUIGlobals.FILE_FIELD);
-            if (field != null) {
-                FileListTableModel tm = new FileListTableModel();
-                tm.setContent(field);
-                for (int j=0; j<tm.getRowCount(); j++) {
-                    FileListEntry flEntry = tm.getEntry(j);
-                    if ((flEntry.getType()!=null) && (flEntry.getType().getName().toLowerCase().equals("pdf"))) {
-                        f = Util.expandFilename(flEntry.getLink(), dirs);
-                        if (f != null)
-                            files.add(f);
-                    }
-                }
-            }
-
-            optDiag.progressArea.append(entry.getCiteKey() + "\n");
-
-			if (files.size() == 0) {
-				skipped++;
-				optDiag.progressArea.append("  " + Globals.lang("Skipped - No PDF linked") + ".\n");
-			}
-            else for (File file : files) {
-                if (!file.exists()) {
-                    skipped++;
-				    optDiag.progressArea.append("  " + Globals.lang("Skipped - PDF does not exist")
-					    + ":\n");
-				    optDiag.progressArea.append("    " + file.getPath() + "\n");
-
-
-                } else {
-                    try {
-                        XMPUtil.writeXMP(file, entry, database);
-                        optDiag.progressArea.append("  " + Globals.lang("Ok") + ".\n");
-                        entriesChanged++;
-                    } catch (Exception e) {
-                        optDiag.progressArea.append("  " + Globals.lang("Error while writing") + " '"
-                            + file.getPath() + "':\n");
-                        optDiag.progressArea.append("    " + e.getLocalizedMessage() + "\n");
-                        errors++;
-                    }
-                }
-            }
-
-            if (optDiag.canceled){
-                optDiag.progressArea.append("\n"
-                    + Globals.lang("Operation canceled.\n"));
-                break;
-            }
-		}
-		optDiag.progressArea.append("\n"
-			+ Globals.lang("Finished writing XMP for %0 file (%1 skipped, %2 errors).", String
-				.valueOf(entriesChanged), String.valueOf(skipped), String.valueOf(errors)));
-		optDiag.done();
-	}
-
-	public void update() {
-		if (!goOn)
-			return;
-
-		panel.output(Globals.lang("Finished writing XMP for %0 file (%1 skipped, %2 errors).",
-			String.valueOf(entriesChanged), String.valueOf(skipped), String.valueOf(errors)));
-	}
-
-	class OptionsDialog extends JDialog {
-
-		private static final long serialVersionUID = 7459164400811785958L;
-
-		JButton okButton = new JButton(Globals.lang("Ok")), cancelButton = new JButton(Globals
-			.lang("Cancel"));
-
-		boolean canceled;
-
-		JTextArea progressArea;
-
-		public OptionsDialog(JFrame parent) {
-			super(parent, Globals.lang("Writing XMP metadata for selected entries..."), false);
-			okButton.setEnabled(false);
-
-			okButton.addActionListener(new ActionListener() {
-				public void actionPerformed(ActionEvent e) {
-					dispose();
-				}
-			});
-
-			AbstractAction cancel = new AbstractAction() {
-				private static final long serialVersionUID = -338601477652815366L;
-
-				public void actionPerformed(ActionEvent e) {
-					canceled = true;
-				}
-			};
-			cancelButton.addActionListener(cancel);
-
-			InputMap im = cancelButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-			ActionMap am = cancelButton.getActionMap();
-			im.put(Globals.prefs.getKey("Close dialog"), "close");
-			am.put("close", cancel);
-
-			progressArea = new JTextArea(15, 60);
-
-			JScrollPane scrollPane = new JScrollPane(progressArea,
-				JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-			Dimension d = progressArea.getPreferredSize();
-			d.height += scrollPane.getHorizontalScrollBar().getHeight() + 15;
-			d.width += scrollPane.getVerticalScrollBar().getWidth() + 15;
-			
-			panel.setSize(d);
-
-			progressArea.setBackground(Color.WHITE);
-			progressArea.setEditable(false);
-			progressArea.setBorder(BorderFactory.createEmptyBorder(3, 3, 3,
-				3));
-			progressArea.setText("");
-
-			JPanel panel = new JPanel();
-			panel.setBorder(BorderFactory.createEmptyBorder(3, 2, 3, 2));
-			panel.add(scrollPane);
-
-			
-
-			// progressArea.setPreferredSize(new Dimension(300, 300));
-
-			ButtonBarBuilder bb = new ButtonBarBuilder();
-			bb.addGlue();
-			bb.addButton(okButton);
-			bb.addRelatedGap();
-			bb.addButton(cancelButton);
-			bb.addGlue();
-			JPanel bbPanel = bb.getPanel();
-			bbPanel.setBorder(BorderFactory.createEmptyBorder(0, 3, 3, 3));
-			getContentPane().add(panel, BorderLayout.CENTER);
-			getContentPane().add(bbPanel, BorderLayout.SOUTH);
-
-			pack();
-			this.setResizable(false);
-
-		}
-
-		public void done() {
-			okButton.setEnabled(true);
-			cancelButton.setEnabled(false);
-		}
-
-		public void open() {
-			progressArea.setText("");
-			canceled = false;
-			Util.placeDialog(optDiag, panel.frame());
-
-			okButton.setEnabled(false);
-			cancelButton.setEnabled(true);
-
-			new FocusRequester(okButton);
-
-			optDiag.setVisible(true);
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.util.List;
+import java.util.ArrayList;
+
+import javax.swing.*;
+
+import net.sf.jabref.*;
+import net.sf.jabref.gui.FileListTableModel;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.util.XMPUtil;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+/**
+ * 
+ * This action goes through all selected entries in the BasePanel, and attempts
+ * to write the XMP data to the external pdf.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class WriteXMPAction extends AbstractWorker {
+
+	BasePanel panel;
+
+	BibtexEntry[] entries;
+	
+	BibtexDatabase database;
+
+	OptionsDialog optDiag;
+
+	boolean goOn = true;
+
+	int skipped, entriesChanged, errors;
+
+	public WriteXMPAction(BasePanel panel) {
+		this.panel = panel;
+	}
+
+	public void init() {
+
+		// Get entries and check if it makes sense to perform this operation
+		entries = panel.getSelectedEntries();
+
+		if (entries.length == 0) {
+
+			database = panel.getDatabase();
+			entries = database.getEntries().toArray(new BibtexEntry[]{});
+
+			if (entries.length == 0) {
+
+				JOptionPane.showMessageDialog(panel, Globals
+					.lang("This operation requires at least one entry."), Globals
+					.lang("Write XMP-metadata"), JOptionPane.ERROR_MESSAGE);
+				goOn = false;
+				return;
+
+			} else {
+
+				int response = JOptionPane.showConfirmDialog(panel, Globals
+					.lang("Write XMP-metadata for all PDFs in current database?"), Globals
+					.lang("Write XMP-metadata"), JOptionPane.YES_NO_CANCEL_OPTION,
+					JOptionPane.QUESTION_MESSAGE);
+
+				if (response != JOptionPane.YES_OPTION) {
+					goOn = false;
+					return;
+				}
+			}
+		}
+
+		errors = entriesChanged = skipped = 0;
+
+		if (optDiag == null) {
+			optDiag = new OptionsDialog(panel.frame());
+		}
+		optDiag.open();
+
+		panel.output(Globals.lang("Writing XMP metadata..."));
+	}
+
+	public void run() {
+
+		if (!goOn)
+			return;
+
+		for (int i = 0; i < entries.length; i++) {
+
+			BibtexEntry entry = entries[i];
+
+            // Make a list of all PDFs linked from this entry:
+            List<File> files = new ArrayList<File>();
+
+            // First check the (legacy) "pdf" field:
+            String pdf = entry.getField("pdf");
+            String[] dirs = panel.metaData().getFileDirectory("pdf");
+            File f = Util.expandFilename(pdf, dirs);
+            if (f != null)
+                files.add(f);
+
+            // Then check the "file" field:
+            dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            String field = entry.getField(GUIGlobals.FILE_FIELD);
+            if (field != null) {
+                FileListTableModel tm = new FileListTableModel();
+                tm.setContent(field);
+                for (int j=0; j<tm.getRowCount(); j++) {
+                    FileListEntry flEntry = tm.getEntry(j);
+                    if ((flEntry.getType()!=null) && (flEntry.getType().getName().toLowerCase().equals("pdf"))) {
+                        f = Util.expandFilename(flEntry.getLink(), dirs);
+                        if (f != null)
+                            files.add(f);
+                    }
+                }
+            }
+
+            optDiag.progressArea.append(entry.getCiteKey() + "\n");
+
+			if (files.size() == 0) {
+				skipped++;
+				optDiag.progressArea.append("  " + Globals.lang("Skipped - No PDF linked") + ".\n");
+			}
+            else for (File file : files) {
+                if (!file.exists()) {
+                    skipped++;
+				    optDiag.progressArea.append("  " + Globals.lang("Skipped - PDF does not exist")
+					    + ":\n");
+				    optDiag.progressArea.append("    " + file.getPath() + "\n");
+
+
+                } else {
+                    try {
+                        XMPUtil.writeXMP(file, entry, database);
+                        optDiag.progressArea.append("  " + Globals.lang("Ok") + ".\n");
+                        entriesChanged++;
+                    } catch (Exception e) {
+                        optDiag.progressArea.append("  " + Globals.lang("Error while writing") + " '"
+                            + file.getPath() + "':\n");
+                        optDiag.progressArea.append("    " + e.getLocalizedMessage() + "\n");
+                        errors++;
+                    }
+                }
+            }
+
+            if (optDiag.canceled){
+                optDiag.progressArea.append("\n"
+                    + Globals.lang("Operation canceled.\n"));
+                break;
+            }
+		}
+		optDiag.progressArea.append("\n"
+			+ Globals.lang("Finished writing XMP for %0 file (%1 skipped, %2 errors).", String
+				.valueOf(entriesChanged), String.valueOf(skipped), String.valueOf(errors)));
+		optDiag.done();
+	}
+
+	public void update() {
+		if (!goOn)
+			return;
+
+		panel.output(Globals.lang("Finished writing XMP for %0 file (%1 skipped, %2 errors).",
+			String.valueOf(entriesChanged), String.valueOf(skipped), String.valueOf(errors)));
+	}
+
+	class OptionsDialog extends JDialog {
+
+		private static final long serialVersionUID = 7459164400811785958L;
+
+		JButton okButton = new JButton(Globals.lang("Ok")), cancelButton = new JButton(Globals
+			.lang("Cancel"));
+
+		boolean canceled;
+
+		JTextArea progressArea;
+
+		public OptionsDialog(JFrame parent) {
+			super(parent, Globals.lang("Writing XMP metadata for selected entries..."), false);
+			okButton.setEnabled(false);
+
+			okButton.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					dispose();
+				}
+			});
+
+			AbstractAction cancel = new AbstractAction() {
+				private static final long serialVersionUID = -338601477652815366L;
+
+				public void actionPerformed(ActionEvent e) {
+					canceled = true;
+				}
+			};
+			cancelButton.addActionListener(cancel);
+
+			InputMap im = cancelButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+			ActionMap am = cancelButton.getActionMap();
+			im.put(Globals.prefs.getKey("Close dialog"), "close");
+			am.put("close", cancel);
+
+			progressArea = new JTextArea(15, 60);
+
+			JScrollPane scrollPane = new JScrollPane(progressArea,
+				JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+			Dimension d = progressArea.getPreferredSize();
+			d.height += scrollPane.getHorizontalScrollBar().getHeight() + 15;
+			d.width += scrollPane.getVerticalScrollBar().getWidth() + 15;
+			
+			panel.setSize(d);
+
+			progressArea.setBackground(Color.WHITE);
+			progressArea.setEditable(false);
+			progressArea.setBorder(BorderFactory.createEmptyBorder(3, 3, 3,
+				3));
+			progressArea.setText("");
+
+			JPanel panel = new JPanel();
+			panel.setBorder(BorderFactory.createEmptyBorder(3, 2, 3, 2));
+			panel.add(scrollPane);
+
+			
+
+			// progressArea.setPreferredSize(new Dimension(300, 300));
+
+			ButtonBarBuilder bb = new ButtonBarBuilder();
+			bb.addGlue();
+			bb.addButton(okButton);
+			bb.addRelatedGap();
+			bb.addButton(cancelButton);
+			bb.addGlue();
+			JPanel bbPanel = bb.getPanel();
+			bbPanel.setBorder(BorderFactory.createEmptyBorder(0, 3, 3, 3));
+			getContentPane().add(panel, BorderLayout.CENTER);
+			getContentPane().add(bbPanel, BorderLayout.SOUTH);
+
+			pack();
+			this.setResizable(false);
+
+		}
+
+		public void done() {
+			okButton.setEnabled(true);
+			cancelButton.setEnabled(false);
+		}
+
+		public void open() {
+			progressArea.setText("");
+			canceled = false;
+			Util.placeDialog(optDiag, panel.frame());
+
+			okButton.setEnabled(false);
+			cancelButton.setEnabled(true);
+
+			new FocusRequester(okButton);
+
+			optDiag.setVisible(true);
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java b/src/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java
index 0b1b9f9..a82d926 100644
--- a/src/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java
+++ b/src/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java
@@ -1,139 +1,139 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.external;
-
-import net.sf.jabref.*;
-import net.sf.jabref.util.XMPUtil;
-import net.sf.jabref.gui.FileListTableModel;
-import net.sf.jabref.gui.FileListEntry;
-
-import javax.swing.*;
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * Write XMP action for EntryEditor toolbar.
- */
-public class WriteXMPEntryEditorAction extends AbstractAction {
-    private BasePanel panel;
-    private EntryEditor editor;
-    private String message = null;
-
-    public WriteXMPEntryEditorAction(BasePanel panel, EntryEditor editor) {
-        this.panel = panel;
-        this.editor = editor;
-        putValue(NAME, Globals.lang("Write XMP"));
-        putValue(SMALL_ICON, GUIGlobals.getImage("pdfSmall"));
-        putValue(SHORT_DESCRIPTION, Globals.lang("Write BibtexEntry as XMP-metadata to PDF."));
-    }
-
-    public void actionPerformed(ActionEvent actionEvent) {
-        setEnabled(false);
-        panel.output(Globals.lang("Writing XMP metadata..."));
-        panel.frame().setProgressBarIndeterminate(true);
-        panel.frame().setProgressBarVisible(true);
-        BibtexEntry entry = editor.getEntry();
-
-        // Make a list of all PDFs linked from this entry:
-        List<File> files = new ArrayList<File>();
-
-        // First check the (legacy) "pdf" field:
-        String pdf = entry.getField("pdf");
-        String[] dirs = panel.metaData().getFileDirectory("pdf");
-        File f = Util.expandFilename(pdf, dirs);
-        if (f != null)
-            files.add(f);
-
-        // Then check the "file" field:
-        dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-        String field = entry.getField(GUIGlobals.FILE_FIELD);
-        if (field != null) {
-            FileListTableModel tm = new FileListTableModel();
-            tm.setContent(field);
-            for (int j = 0; j < tm.getRowCount(); j++) {
-                FileListEntry flEntry = tm.getEntry(j);
-                if ((flEntry.getType() != null) && (flEntry.getType().getName().toLowerCase().equals("pdf"))) {
-                    f = Util.expandFilename(flEntry.getLink(), dirs);
-                    if (f != null)
-                        files.add(f);
-                }
-            }
-        }
-
-        // We want to offload the actual work to a background thread, so we have a worker
-        // thread:
-        AbstractWorker worker = new WriteXMPWorker(files, entry);
-        // Using Spin, we get a thread that gets synchronously offloaded to a new thread,
-        // blocking the execution of this method:
-        worker.getWorker().run();
-        // After the worker thread finishes, we are unblocked and ready to print the
-        // status message:
-        panel.output(message);
-        panel.frame().setProgressBarVisible(false);
-        setEnabled(true);
-    }
-
-
-    class WriteXMPWorker extends AbstractWorker {
-
-        private List<File> files;
-        private BibtexEntry entry;
-
-        public WriteXMPWorker(List<File> files, BibtexEntry entry) {
-
-            this.files = files;
-            this.entry = entry;
-        }
-
-        public void run() {
-            if (files.size() == 0) {
-                message = Globals.lang("No PDF linked") + ".\n";
-            } else {
-                int written = 0, error = 0;
-                for (File file : files) {
-                    if (!file.exists()) {
-                        if (files.size() == 1)
-                            message = Globals.lang("PDF does not exist");
-                        error++;
-
-                    } else {
-                        try {
-                            XMPUtil.writeXMP(file, entry, panel.database());
-                            if (files.size() == 1)
-                                message = Globals.lang("Wrote XMP-metadata");
-                            written++;
-                        } catch (Exception e) {
-                            if (files.size() == 1)
-                                message = Globals.lang("Error while writing") + " '" + file.getPath() + "'";
-                            error++;
-
-                        }
-                    }
-                }
-                if (files.size() > 1) {
-                    StringBuilder sb = new StringBuilder();
-                    sb.append(Globals.lang("Finished writing XMP-metadata. Wrote to %0 file(s).",
-                            String.valueOf(written)));
-                    if (error > 0)
-                        sb.append(" " + Globals.lang("Error writing to %0 file(s).", String.valueOf(error)));
-                    message = sb.toString();
-                }
-            }
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.external;
+
+import net.sf.jabref.*;
+import net.sf.jabref.util.XMPUtil;
+import net.sf.jabref.gui.FileListTableModel;
+import net.sf.jabref.gui.FileListEntry;
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * Write XMP action for EntryEditor toolbar.
+ */
+public class WriteXMPEntryEditorAction extends AbstractAction {
+    private BasePanel panel;
+    private EntryEditor editor;
+    private String message = null;
+
+    public WriteXMPEntryEditorAction(BasePanel panel, EntryEditor editor) {
+        this.panel = panel;
+        this.editor = editor;
+        putValue(NAME, Globals.lang("Write XMP"));
+        putValue(SMALL_ICON, GUIGlobals.getImage("pdfSmall"));
+        putValue(SHORT_DESCRIPTION, Globals.lang("Write BibtexEntry as XMP-metadata to PDF."));
+    }
+
+    public void actionPerformed(ActionEvent actionEvent) {
+        setEnabled(false);
+        panel.output(Globals.lang("Writing XMP metadata..."));
+        panel.frame().setProgressBarIndeterminate(true);
+        panel.frame().setProgressBarVisible(true);
+        BibtexEntry entry = editor.getEntry();
+
+        // Make a list of all PDFs linked from this entry:
+        List<File> files = new ArrayList<File>();
+
+        // First check the (legacy) "pdf" field:
+        String pdf = entry.getField("pdf");
+        String[] dirs = panel.metaData().getFileDirectory("pdf");
+        File f = Util.expandFilename(pdf, dirs);
+        if (f != null)
+            files.add(f);
+
+        // Then check the "file" field:
+        dirs = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+        String field = entry.getField(GUIGlobals.FILE_FIELD);
+        if (field != null) {
+            FileListTableModel tm = new FileListTableModel();
+            tm.setContent(field);
+            for (int j = 0; j < tm.getRowCount(); j++) {
+                FileListEntry flEntry = tm.getEntry(j);
+                if ((flEntry.getType() != null) && (flEntry.getType().getName().toLowerCase().equals("pdf"))) {
+                    f = Util.expandFilename(flEntry.getLink(), dirs);
+                    if (f != null)
+                        files.add(f);
+                }
+            }
+        }
+
+        // We want to offload the actual work to a background thread, so we have a worker
+        // thread:
+        AbstractWorker worker = new WriteXMPWorker(files, entry);
+        // Using Spin, we get a thread that gets synchronously offloaded to a new thread,
+        // blocking the execution of this method:
+        worker.getWorker().run();
+        // After the worker thread finishes, we are unblocked and ready to print the
+        // status message:
+        panel.output(message);
+        panel.frame().setProgressBarVisible(false);
+        setEnabled(true);
+    }
+
+
+    class WriteXMPWorker extends AbstractWorker {
+
+        private List<File> files;
+        private BibtexEntry entry;
+
+        public WriteXMPWorker(List<File> files, BibtexEntry entry) {
+
+            this.files = files;
+            this.entry = entry;
+        }
+
+        public void run() {
+            if (files.size() == 0) {
+                message = Globals.lang("No PDF linked") + ".\n";
+            } else {
+                int written = 0, error = 0;
+                for (File file : files) {
+                    if (!file.exists()) {
+                        if (files.size() == 1)
+                            message = Globals.lang("PDF does not exist");
+                        error++;
+
+                    } else {
+                        try {
+                            XMPUtil.writeXMP(file, entry, panel.database());
+                            if (files.size() == 1)
+                                message = Globals.lang("Wrote XMP-metadata");
+                            written++;
+                        } catch (Exception e) {
+                            if (files.size() == 1)
+                                message = Globals.lang("Error while writing") + " '" + file.getPath() + "'";
+                            error++;
+
+                        }
+                    }
+                }
+                if (files.size() > 1) {
+                    StringBuilder sb = new StringBuilder();
+                    sb.append(Globals.lang("Finished writing XMP-metadata. Wrote to %0 file(s).",
+                            String.valueOf(written)));
+                    if (error > 0)
+                        sb.append(" " + Globals.lang("Error writing to %0 file(s).", String.valueOf(error)));
+                    message = sb.toString();
+                }
+            }
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/AbstractGroup.java b/src/java/net/sf/jabref/groups/AbstractGroup.java
index 9819b9e..fe1a9c4 100644
--- a/src/java/net/sf/jabref/groups/AbstractGroup.java
+++ b/src/java/net/sf/jabref/groups/AbstractGroup.java
@@ -1,223 +1,223 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.util.Map;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.SearchRule;
-
-/**
- * A group of BibtexEntries.
- */
-public abstract class AbstractGroup {
-
-    /** The group's name (every type of group has one). */
-	protected String m_name;
-
-	/**
-	 * The hierarchical context of the group (INDEPENDENT, REFINING, or
-	 * INCLUDING). Defaults to INDEPENDENT, which will be used if and
-	 * only if the context specified in the constructor is invalid.
-	 */
-	protected int m_context = INDEPENDENT;
-
-    public abstract String getTypeId();
-
-    public AbstractGroup(String name, int context) {
-		m_name = name;
-		setHierarchicalContext(context);
-	}
-
-	/** Group's contents are independent of its hierarchical position. */
-	public static final int INDEPENDENT = 0;
-	/**
-	 * Group's content is the intersection of its own content with its
-	 * supergroup's content.
-	 */
-	public static final int REFINING = 1;
-	/**
-	 * Group's content is the union of its own content with its subgroups'
-	 * content.
-	 */
-	public static final int INCLUDING = 2;
-
-	/** Character used for quoting in the string representation. */
-	protected static final char QUOTE_CHAR = '\\';
-
-	/**
-	 * For separating units (e.g. name, which every group has) in the string
-	 * representation
-	 */
-	protected static final String SEPARATOR = ";";
-
-	/**
-	 * @return A search rule that will identify this group's entries.
-	 */
-	public abstract SearchRule getSearchRule();
-
-	/**
-	 * Re-create a group instance from a textual representation.
-	 * 
-	 * @param s
-	 *            The result from the group's toString() method.
-	 * @return New instance of the encoded group.
-	 * @throws Exception
-	 *             If an error occured and a group could not be created, e.g.
-	 *             due to a malformed regular expression.
-	 */
-	public static AbstractGroup fromString(String s, BibtexDatabase db,
-			int version) throws Exception {
-		if (s.startsWith(KeywordGroup.ID))
-			return KeywordGroup.fromString(s, db, version);
-		if (s.startsWith(AllEntriesGroup.ID))
-			return AllEntriesGroup.fromString(s, db, version);
-		if (s.startsWith(SearchGroup.ID))
-			return SearchGroup.fromString(s, db, version);
-		if (s.startsWith(ExplicitGroup.ID))
-			return ExplicitGroup.fromString(s, db, version);
-		return null; // unknown group
-	}
-
-	/** Returns this group's name, e.g. for display in a list/tree. */
-	public final String getName() {
-		return m_name;
-	}
-
-	/** Sets the group's name. */
-	public final void setName(String name) {
-		m_name = name;
-	}
-
-	/**
-	 * @return true if this type of group supports the explicit adding of
-	 *         entries.
-	 */
-	public abstract boolean supportsAdd();
-
-	/**
-	 * @return true if this type of group supports the explicit removal of
-	 *         entries.
-	 */
-	public abstract boolean supportsRemove();
-
-	/**
-	 * Adds the specified entries to this group.
-	 * 
-	 * @return If this group or one or more entries was/were modified as a
-	 *         result of this operation, an object is returned that allows to
-	 *         undo this change. null is returned otherwise.
-	 */
-	public abstract AbstractUndoableEdit add(BibtexEntry[] entries);
-
-	/**
-	 * Removes the specified entries from this group.
-	 * 
-	 * @return If this group or one or more entries was/were modified as a
-	 *         result of this operation, an object is returned that allows to
-	 *         undo this change. null is returned otherwise.
-	 */
-	public abstract AbstractUndoableEdit remove(BibtexEntry[] entries);
-
-	/**
-	 * @param searchOptions
-	 *            The search options to apply.
-	 * @return true if this group contains the specified entry, false otherwise.
-	 */
-	public abstract boolean contains(Map<String, String> searchOptions, BibtexEntry entry);
-
-	/**
-	 * @return true if this group contains the specified entry, false otherwise.
-	 */
-	public abstract boolean contains(BibtexEntry entry);
-
-	/**
-	 * @return true if this group contains any of the specified entries, false
-	 *         otherwise.
-	 */
-	public boolean containsAny(BibtexEntry[] entries) {
-		for (int i = 0; i < entries.length; ++i)
-			if (contains(entries[i]))
-				return true;
-		return false;
-	}
-
-	/**
-	 * @return true if this group contains all of the specified entries, false
-	 *         otherwise.
-	 */
-	public boolean containsAll(BibtexEntry[] entries) {
-		for (int i = 0; i < entries.length; ++i)
-			if (!contains(entries[i]))
-				return false;
-		return true;
-	}
-
-	/**
-	 * Returns true if this group is dynamic, i.e. uses a search definition or
-	 * equiv. that might match new entries, or false if this group contains a
-	 * fixed set of entries and thus will never match a new entry that was not
-	 * explicitly added to it.
-	 */
-	public abstract boolean isDynamic();
-
-	/** Sets the groups's hierarchical context. If context is not a valid
-	 * value, the call is ignored. */
-	public void setHierarchicalContext(int context) {
-		if (context != INDEPENDENT && context != REFINING
-				&& context != INCLUDING)
-			return;
-		m_context = context;
-	}
-	
-	/** Returns the group's hierarchical context. */
-	public int getHierarchicalContext() {
-		return m_context;
-	}
-	
-	/** Returns a lengthy textual description of this instance (for 
-     * the groups editor). The text is formatted in HTML. */
-	public abstract String getDescription();
-
-	/**
-	 * @return A deep copy of this object.
-	 */
-	public abstract AbstractGroup deepCopy();
-
-	/** Returns a short description of the group in HTML (for a tooltip). */
-	public abstract String getShortDescription();
-
-	// by general AbstractGroup contract, toString() must return
-	// something from which this object can be reconstructed
-	// using fromString(String).
-
-	// by general AbstractGroup contract, equals() must be implemented
-        
-        /**
-         * Update the group, if necessary, to handle the situation where the group
-         * is applied to a different BibtexDatabase than it was created for. This
-         * is for instance used when updating the group tree due to an external change.
-         *
-         * @param db The database to refresh for.
-         */
-        public void refreshForNewDatabase(BibtexDatabase db) {
-            // Default is to do nothing. Group types that are affected by a change
-            // of database must override this method.
-        }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.util.Map;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.SearchRule;
+
+/**
+ * A group of BibtexEntries.
+ */
+public abstract class AbstractGroup {
+
+    /** The group's name (every type of group has one). */
+	protected String m_name;
+
+	/**
+	 * The hierarchical context of the group (INDEPENDENT, REFINING, or
+	 * INCLUDING). Defaults to INDEPENDENT, which will be used if and
+	 * only if the context specified in the constructor is invalid.
+	 */
+	protected int m_context = INDEPENDENT;
+
+    public abstract String getTypeId();
+
+    public AbstractGroup(String name, int context) {
+		m_name = name;
+		setHierarchicalContext(context);
+	}
+
+	/** Group's contents are independent of its hierarchical position. */
+	public static final int INDEPENDENT = 0;
+	/**
+	 * Group's content is the intersection of its own content with its
+	 * supergroup's content.
+	 */
+	public static final int REFINING = 1;
+	/**
+	 * Group's content is the union of its own content with its subgroups'
+	 * content.
+	 */
+	public static final int INCLUDING = 2;
+
+	/** Character used for quoting in the string representation. */
+	protected static final char QUOTE_CHAR = '\\';
+
+	/**
+	 * For separating units (e.g. name, which every group has) in the string
+	 * representation
+	 */
+	protected static final String SEPARATOR = ";";
+
+	/**
+	 * @return A search rule that will identify this group's entries.
+	 */
+	public abstract SearchRule getSearchRule();
+
+	/**
+	 * Re-create a group instance from a textual representation.
+	 * 
+	 * @param s
+	 *            The result from the group's toString() method.
+	 * @return New instance of the encoded group.
+	 * @throws Exception
+	 *             If an error occured and a group could not be created, e.g.
+	 *             due to a malformed regular expression.
+	 */
+	public static AbstractGroup fromString(String s, BibtexDatabase db,
+			int version) throws Exception {
+		if (s.startsWith(KeywordGroup.ID))
+			return KeywordGroup.fromString(s, db, version);
+		if (s.startsWith(AllEntriesGroup.ID))
+			return AllEntriesGroup.fromString(s, db, version);
+		if (s.startsWith(SearchGroup.ID))
+			return SearchGroup.fromString(s, db, version);
+		if (s.startsWith(ExplicitGroup.ID))
+			return ExplicitGroup.fromString(s, db, version);
+		return null; // unknown group
+	}
+
+	/** Returns this group's name, e.g. for display in a list/tree. */
+	public final String getName() {
+		return m_name;
+	}
+
+	/** Sets the group's name. */
+	public final void setName(String name) {
+		m_name = name;
+	}
+
+	/**
+	 * @return true if this type of group supports the explicit adding of
+	 *         entries.
+	 */
+	public abstract boolean supportsAdd();
+
+	/**
+	 * @return true if this type of group supports the explicit removal of
+	 *         entries.
+	 */
+	public abstract boolean supportsRemove();
+
+	/**
+	 * Adds the specified entries to this group.
+	 * 
+	 * @return If this group or one or more entries was/were modified as a
+	 *         result of this operation, an object is returned that allows to
+	 *         undo this change. null is returned otherwise.
+	 */
+	public abstract AbstractUndoableEdit add(BibtexEntry[] entries);
+
+	/**
+	 * Removes the specified entries from this group.
+	 * 
+	 * @return If this group or one or more entries was/were modified as a
+	 *         result of this operation, an object is returned that allows to
+	 *         undo this change. null is returned otherwise.
+	 */
+	public abstract AbstractUndoableEdit remove(BibtexEntry[] entries);
+
+	/**
+	 * @param searchOptions
+	 *            The search options to apply.
+	 * @return true if this group contains the specified entry, false otherwise.
+	 */
+	public abstract boolean contains(Map<String, String> searchOptions, BibtexEntry entry);
+
+	/**
+	 * @return true if this group contains the specified entry, false otherwise.
+	 */
+	public abstract boolean contains(BibtexEntry entry);
+
+	/**
+	 * @return true if this group contains any of the specified entries, false
+	 *         otherwise.
+	 */
+	public boolean containsAny(BibtexEntry[] entries) {
+		for (int i = 0; i < entries.length; ++i)
+			if (contains(entries[i]))
+				return true;
+		return false;
+	}
+
+	/**
+	 * @return true if this group contains all of the specified entries, false
+	 *         otherwise.
+	 */
+	public boolean containsAll(BibtexEntry[] entries) {
+		for (int i = 0; i < entries.length; ++i)
+			if (!contains(entries[i]))
+				return false;
+		return true;
+	}
+
+	/**
+	 * Returns true if this group is dynamic, i.e. uses a search definition or
+	 * equiv. that might match new entries, or false if this group contains a
+	 * fixed set of entries and thus will never match a new entry that was not
+	 * explicitly added to it.
+	 */
+	public abstract boolean isDynamic();
+
+	/** Sets the groups's hierarchical context. If context is not a valid
+	 * value, the call is ignored. */
+	public void setHierarchicalContext(int context) {
+		if (context != INDEPENDENT && context != REFINING
+				&& context != INCLUDING)
+			return;
+		m_context = context;
+	}
+	
+	/** Returns the group's hierarchical context. */
+	public int getHierarchicalContext() {
+		return m_context;
+	}
+	
+	/** Returns a lengthy textual description of this instance (for 
+     * the groups editor). The text is formatted in HTML. */
+	public abstract String getDescription();
+
+	/**
+	 * @return A deep copy of this object.
+	 */
+	public abstract AbstractGroup deepCopy();
+
+	/** Returns a short description of the group in HTML (for a tooltip). */
+	public abstract String getShortDescription();
+
+	// by general AbstractGroup contract, toString() must return
+	// something from which this object can be reconstructed
+	// using fromString(String).
+
+	// by general AbstractGroup contract, equals() must be implemented
+        
+        /**
+         * Update the group, if necessary, to handle the situation where the group
+         * is applied to a different BibtexDatabase than it was created for. This
+         * is for instance used when updating the group tree due to an external change.
+         *
+         * @param db The database to refresh for.
+         */
+        public void refreshForNewDatabase(BibtexDatabase db) {
+            // Default is to do nothing. Group types that are affected by a change
+            // of database must override this method.
+        }
+}
diff --git a/src/java/net/sf/jabref/groups/AddToGroupAction.java b/src/java/net/sf/jabref/groups/AddToGroupAction.java
index 30d57c8..3009341 100644
--- a/src/java/net/sf/jabref/groups/AddToGroupAction.java
+++ b/src/java/net/sf/jabref/groups/AddToGroupAction.java
@@ -1,121 +1,121 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.awt.event.ActionEvent;
-import java.util.Enumeration;
-import java.util.Vector;
-
-import javax.swing.AbstractAction;
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-import net.sf.jabref.undo.NamedCompound;
-
-public class AddToGroupAction extends AbstractAction {
-    protected GroupTreeNode m_node;
-    protected final boolean m_move;
-    protected BasePanel m_panel;
-    /**
-     * @param move If true, remove node from all other groups.
-     */
-    public AddToGroupAction(GroupTreeNode node, boolean move,
-            BasePanel panel) {
-        super(node.getGroup().getName());
-        m_node = node;
-        m_move = move;
-        m_panel = panel;
-    }
-    public AddToGroupAction(boolean move) {
-        super(move?Globals.lang("Assign entry selection exclusively to this group")
-                  :Globals.lang("Add entry selection to this group"));
-        m_move = move;
-    }
-    public void setBasePanel(BasePanel panel) {
-        m_panel = panel;
-    }
-    public void setNode(GroupTreeNode node) {
-        m_node = node;
-    }
-    public void actionPerformed(ActionEvent evt) {
-        final BibtexEntry[] entries = m_panel.getSelectedEntries();
-        final Vector<GroupTreeNode> removeGroupsNodes = new Vector<GroupTreeNode>(); // used only when moving
-        
-        if (m_move) {
-            // collect warnings for removal
-            Enumeration<GroupTreeNode> e = ((GroupTreeNode) m_node.getRoot()).preorderEnumeration();
-            GroupTreeNode node;
-            while (e.hasMoreElements()) {
-                node = e.nextElement();
-                if (!node.getGroup().supportsRemove())
-                    continue;
-                for (int i = 0; i < entries.length; ++i) {
-                    if (node.getGroup().contains(entries[i]))
-                        removeGroupsNodes.add(node);
-                }
-            }
-            // warning for all groups from which the entries are removed, and 
-            // for the one to which they are added! hence the magical +1
-            AbstractGroup[] groups = new AbstractGroup[removeGroupsNodes.size()+1];
-            for (int i = 0; i < removeGroupsNodes.size(); ++i)
-                groups[i] = removeGroupsNodes.elementAt(i).getGroup();
-            groups[groups.length-1] = m_node.getGroup();
-            if (!Util.warnAssignmentSideEffects(groups,
-                    entries, m_panel.getDatabase(), m_panel.frame()))
-                return; // user aborted operation
-        } else {
-            // warn if assignment has undesired side effects (modifies a field != keywords)
-            if (!Util.warnAssignmentSideEffects(new AbstractGroup[]{m_node.getGroup()},
-                    entries, m_panel.getDatabase(), m_panel.frame()))
-                return; // user aborted operation
-        }
-        
-        // if an editor is showing, its fields must be updated
-        // after the assignment, and before that, the current
-        // edit has to be stored:
-        m_panel.storeCurrentEdit();
-        
-        NamedCompound undoAll = new NamedCompound(Globals.lang("change assignment of entries")); 
-        
-        if (m_move) {
-            // first remove
-            for (int i = 0; i < removeGroupsNodes.size(); ++i) {
-                GroupTreeNode node = removeGroupsNodes.elementAt(i);
-                if (node.getGroup().containsAny(entries))
-                    undoAll.addEdit(node.removeFromGroup(entries));
-            }
-            // then add
-            AbstractUndoableEdit undoAdd = m_node.addToGroup(entries);
-            if (undoAdd != null)
-                undoAll.addEdit(undoAdd);
-        } else {
-            AbstractUndoableEdit undoAdd = m_node.addToGroup(entries);
-            if (undoAdd == null)
-                return; // no changed made
-            undoAll.addEdit(undoAdd);
-        }
-        
-        undoAll.end();
-        
-        m_panel.undoManager.addEdit(undoAll);
-        m_panel.markBaseChanged();
-        m_panel.updateEntryEditorIfShowing();
-        m_panel.getGroupSelector().valueChanged(null);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.awt.event.ActionEvent;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import javax.swing.AbstractAction;
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+import net.sf.jabref.undo.NamedCompound;
+
+public class AddToGroupAction extends AbstractAction {
+    protected GroupTreeNode m_node;
+    protected final boolean m_move;
+    protected BasePanel m_panel;
+    /**
+     * @param move If true, remove node from all other groups.
+     */
+    public AddToGroupAction(GroupTreeNode node, boolean move,
+            BasePanel panel) {
+        super(node.getGroup().getName());
+        m_node = node;
+        m_move = move;
+        m_panel = panel;
+    }
+    public AddToGroupAction(boolean move) {
+        super(move?Globals.lang("Assign entry selection exclusively to this group")
+                  :Globals.lang("Add entry selection to this group"));
+        m_move = move;
+    }
+    public void setBasePanel(BasePanel panel) {
+        m_panel = panel;
+    }
+    public void setNode(GroupTreeNode node) {
+        m_node = node;
+    }
+    public void actionPerformed(ActionEvent evt) {
+        final BibtexEntry[] entries = m_panel.getSelectedEntries();
+        final Vector<GroupTreeNode> removeGroupsNodes = new Vector<GroupTreeNode>(); // used only when moving
+        
+        if (m_move) {
+            // collect warnings for removal
+            Enumeration<GroupTreeNode> e = ((GroupTreeNode) m_node.getRoot()).preorderEnumeration();
+            GroupTreeNode node;
+            while (e.hasMoreElements()) {
+                node = e.nextElement();
+                if (!node.getGroup().supportsRemove())
+                    continue;
+                for (int i = 0; i < entries.length; ++i) {
+                    if (node.getGroup().contains(entries[i]))
+                        removeGroupsNodes.add(node);
+                }
+            }
+            // warning for all groups from which the entries are removed, and 
+            // for the one to which they are added! hence the magical +1
+            AbstractGroup[] groups = new AbstractGroup[removeGroupsNodes.size()+1];
+            for (int i = 0; i < removeGroupsNodes.size(); ++i)
+                groups[i] = removeGroupsNodes.elementAt(i).getGroup();
+            groups[groups.length-1] = m_node.getGroup();
+            if (!Util.warnAssignmentSideEffects(groups,
+                    entries, m_panel.getDatabase(), m_panel.frame()))
+                return; // user aborted operation
+        } else {
+            // warn if assignment has undesired side effects (modifies a field != keywords)
+            if (!Util.warnAssignmentSideEffects(new AbstractGroup[]{m_node.getGroup()},
+                    entries, m_panel.getDatabase(), m_panel.frame()))
+                return; // user aborted operation
+        }
+        
+        // if an editor is showing, its fields must be updated
+        // after the assignment, and before that, the current
+        // edit has to be stored:
+        m_panel.storeCurrentEdit();
+        
+        NamedCompound undoAll = new NamedCompound(Globals.lang("change assignment of entries")); 
+        
+        if (m_move) {
+            // first remove
+            for (int i = 0; i < removeGroupsNodes.size(); ++i) {
+                GroupTreeNode node = removeGroupsNodes.elementAt(i);
+                if (node.getGroup().containsAny(entries))
+                    undoAll.addEdit(node.removeFromGroup(entries));
+            }
+            // then add
+            AbstractUndoableEdit undoAdd = m_node.addToGroup(entries);
+            if (undoAdd != null)
+                undoAll.addEdit(undoAdd);
+        } else {
+            AbstractUndoableEdit undoAdd = m_node.addToGroup(entries);
+            if (undoAdd == null)
+                return; // no changed made
+            undoAll.addEdit(undoAdd);
+        }
+        
+        undoAll.end();
+        
+        m_panel.undoManager.addEdit(undoAll);
+        m_panel.markBaseChanged();
+        m_panel.updateEntryEditorIfShowing();
+        m_panel.getGroupSelector().valueChanged(null);
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/AllEntriesGroup.java b/src/java/net/sf/jabref/groups/AllEntriesGroup.java
index 3b81d5b..7a96b3a 100644
--- a/src/java/net/sf/jabref/groups/AllEntriesGroup.java
+++ b/src/java/net/sf/jabref/groups/AllEntriesGroup.java
@@ -1,121 +1,121 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.util.Map;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.SearchRule;
-
-/**
- * This group contains all entries.
- */
-public class AllEntriesGroup extends AbstractGroup implements SearchRule {
-    public static final String ID = "AllEntriesGroup:";
-
-    public AllEntriesGroup() {
-        super(Globals.lang("All Entries"), AbstractGroup.INDEPENDENT);
-    }
-    
-    public static AbstractGroup fromString(String s, BibtexDatabase db, int version) throws Exception {
-        if (!s.startsWith(ID))
-            throw new Exception(
-                    "Internal error: AllEntriesGroup cannot be created from \""
-                            + s + "\". "
-                            + "Please report this on www.sf.net/projects/jabref");
-        switch (version) {
-        case 0:
-        case 1:
-        case 2:
-        case 3:
-            return new AllEntriesGroup();
-        default:
-            throw new UnsupportedVersionException("AllEntriesGroup", version); 
-        }
-    }
-
-    public SearchRule getSearchRule() {
-        return this;
-    }
-
-    public boolean supportsAdd() {
-        return false;
-    }
-
-    public boolean supportsRemove() {
-        return false;
-    }
-
-    public AbstractUndoableEdit add(BibtexEntry[] entries) {
-        // not supported -> ignore
-        return null;
-    }
-
-    public AbstractUndoableEdit remove(BibtexEntry[] entries) {
-        // not supported -> ignore
-        return null;
-    }
-
-    public boolean contains(Map<String, String> searchOptions, BibtexEntry entry) {
-        return true; // contains everything
-    }
-
-    public AbstractGroup deepCopy() {
-        return new AllEntriesGroup();
-    }
-
-    public boolean validateSearchStrings(Map<String, String> searchStrings) {
-        return true;
-    }
-
-    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
-        return 1; // contains everything
-    }
-
-    public boolean equals(Object o) {
-        return o instanceof AllEntriesGroup;
-    }
-
-    public String toString() {
-        return ID;
-    }
-
-    public boolean contains(BibtexEntry entry) {
-        return true;
-    }
-    
-    public boolean isDynamic() {
-    	// this is actually a special case; I define it as non-dynamic
-    	return false;
-    }
-
-	public String getDescription() {
-		return "This group contains all entries. It cannot be edited or removed.";
-		// JZTODO lyrics
-	}
-	
-	public String getShortDescription() {
-		return Globals.lang("<b>All Entries</b> (this group cannot be edited or removed)");
-	}
-
-    public String getTypeId() {
-        return ID;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.util.Map;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.SearchRule;
+
+/**
+ * This group contains all entries.
+ */
+public class AllEntriesGroup extends AbstractGroup implements SearchRule {
+    public static final String ID = "AllEntriesGroup:";
+
+    public AllEntriesGroup() {
+        super(Globals.lang("All Entries"), AbstractGroup.INDEPENDENT);
+    }
+    
+    public static AbstractGroup fromString(String s, BibtexDatabase db, int version) throws Exception {
+        if (!s.startsWith(ID))
+            throw new Exception(
+                    "Internal error: AllEntriesGroup cannot be created from \""
+                            + s + "\". "
+                            + "Please report this on www.sf.net/projects/jabref");
+        switch (version) {
+        case 0:
+        case 1:
+        case 2:
+        case 3:
+            return new AllEntriesGroup();
+        default:
+            throw new UnsupportedVersionException("AllEntriesGroup", version); 
+        }
+    }
+
+    public SearchRule getSearchRule() {
+        return this;
+    }
+
+    public boolean supportsAdd() {
+        return false;
+    }
+
+    public boolean supportsRemove() {
+        return false;
+    }
+
+    public AbstractUndoableEdit add(BibtexEntry[] entries) {
+        // not supported -> ignore
+        return null;
+    }
+
+    public AbstractUndoableEdit remove(BibtexEntry[] entries) {
+        // not supported -> ignore
+        return null;
+    }
+
+    public boolean contains(Map<String, String> searchOptions, BibtexEntry entry) {
+        return true; // contains everything
+    }
+
+    public AbstractGroup deepCopy() {
+        return new AllEntriesGroup();
+    }
+
+    public boolean validateSearchStrings(Map<String, String> searchStrings) {
+        return true;
+    }
+
+    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
+        return 1; // contains everything
+    }
+
+    public boolean equals(Object o) {
+        return o instanceof AllEntriesGroup;
+    }
+
+    public String toString() {
+        return ID;
+    }
+
+    public boolean contains(BibtexEntry entry) {
+        return true;
+    }
+    
+    public boolean isDynamic() {
+    	// this is actually a special case; I define it as non-dynamic
+    	return false;
+    }
+
+	public String getDescription() {
+		return "This group contains all entries. It cannot be edited or removed.";
+		// JZTODO lyrics
+	}
+	
+	public String getShortDescription() {
+		return Globals.lang("<b>All Entries</b> (this group cannot be edited or removed)");
+	}
+
+    public String getTypeId() {
+        return ID;
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/AndOrSearchRuleSet.java b/src/java/net/sf/jabref/groups/AndOrSearchRuleSet.java
index bafe0bc..5c3e46e 100644
--- a/src/java/net/sf/jabref/groups/AndOrSearchRuleSet.java
+++ b/src/java/net/sf/jabref/groups/AndOrSearchRuleSet.java
@@ -1,57 +1,57 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.util.Map;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.SearchRule;
-import net.sf.jabref.SearchRuleSet;
-
-/**
- * Subclass of SearchRuleSet that ANDs or ORs between its rules, eturning 0 or
- * 1.
- */
-class AndOrSearchRuleSet extends SearchRuleSet {
-
-    private boolean and, invert;
-
-    public AndOrSearchRuleSet(boolean and, boolean invert) {
-        this.and = and;
-        this.invert = invert;
-    }
-
-    public int applyRule(Map<String, String> searchString, BibtexEntry bibtexEntry) {
-        int score = 0;
-        
-        // We let each rule add a maximum of 1 to the score.
-        for (SearchRule rule : ruleSet) {
-			score += rule.applyRule(searchString, bibtexEntry) > 0 ? 1 : 0;
-		}
-
-        // Then an AND rule demands that score == number of rules, and
-        // an OR rule demands score > 0.
-        boolean res;
-        if (and)
-            res = (score == ruleSet.size());
-        else
-            res = (score > 0);
-
-        if (invert)
-            return (res ? 0 : 1);
-        return (res ? 1 : 0);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.util.Map;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.SearchRule;
+import net.sf.jabref.SearchRuleSet;
+
+/**
+ * Subclass of SearchRuleSet that ANDs or ORs between its rules, eturning 0 or
+ * 1.
+ */
+class AndOrSearchRuleSet extends SearchRuleSet {
+
+    private boolean and, invert;
+
+    public AndOrSearchRuleSet(boolean and, boolean invert) {
+        this.and = and;
+        this.invert = invert;
+    }
+
+    public int applyRule(Map<String, String> searchString, BibtexEntry bibtexEntry) {
+        int score = 0;
+        
+        // We let each rule add a maximum of 1 to the score.
+        for (SearchRule rule : ruleSet) {
+			score += rule.applyRule(searchString, bibtexEntry) > 0 ? 1 : 0;
+		}
+
+        // Then an AND rule demands that score == number of rules, and
+        // an OR rule demands score > 0.
+        boolean res;
+        if (and)
+            res = (score == ruleSet.size());
+        else
+            res = (score > 0);
+
+        if (invert)
+            return (res ? 0 : 1);
+        return (res ? 1 : 0);
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/AutoGroupDialog.java b/src/java/net/sf/jabref/groups/AutoGroupDialog.java
index 7941043..ec78bad 100644
--- a/src/java/net/sf/jabref/groups/AutoGroupDialog.java
+++ b/src/java/net/sf/jabref/groups/AutoGroupDialog.java
@@ -1,276 +1,276 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.awt.BorderLayout;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.HashSet;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Set;
-
-import javax.swing.*;
-import javax.swing.event.CaretEvent;
-import javax.swing.event.CaretListener;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.Util;
-import net.sf.jabref.undo.NamedCompound;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Dialog for creating or modifying groups. Operates directly on the Vector
- * containing group information.
- */
-class AutoGroupDialog extends JDialog implements CaretListener {
-    JTextField remove = new JTextField(60), field = new JTextField(60),
-            deliminator = new JTextField(60);
-    JLabel nf = new JLabel(Globals.lang("Field to group by") + ":"),
-            nr = new JLabel(Globals.lang("Characters to ignore") + ":");
-    JRadioButton
-        keywords = new JRadioButton(Globals.lang("Generate groups from keywords in a BibTeX field")),
-        authors = new JRadioButton(Globals.lang("Generate groups for author last names")),
-        editors = new JRadioButton(Globals.lang("Generate groups for editor last names"));
-    JCheckBox nd = new JCheckBox(Globals.lang("Use the following delimiter character(s):"));
-    JButton ok = new JButton(Globals.lang("Ok")), 
-    		cancel = new JButton(Globals.lang("Cancel"));
-    JPanel main = new JPanel(), opt = new JPanel();
-    private boolean ok_pressed = false;
-    private GroupTreeNode m_groupsRoot;
-    private JabRefFrame frame;
-    private BasePanel panel;
-    private GroupSelector gs;
-    private String oldRemove, oldField;
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-
-    /**
-     * @param groupsRoot
-     *            The original set of groups, which is required as undo
-     *            information when all groups are cleared.
-     */
-    public AutoGroupDialog(JabRefFrame jabrefFrame, BasePanel basePanel,
-            GroupSelector groupSelector, GroupTreeNode groupsRoot,
-            String defaultField, String defaultRemove, String defaultDeliminator) {
-        super(jabrefFrame, Globals.lang("Automatically create groups"), true);
-        frame = jabrefFrame;
-        gs = groupSelector;
-        panel = basePanel;
-        m_groupsRoot = groupsRoot;
-        field.setText(defaultField);
-        remove.setText(defaultRemove);
-        deliminator.setText(defaultDeliminator);
-        nd.setSelected(true);
-        ActionListener okListener = new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                ok_pressed = true;
-                dispose();
-
-                GroupTreeNode autoGroupsRoot = new GroupTreeNode(
-                        new ExplicitGroup(Globals.lang("Automatically created groups"),
-                        		AbstractGroup.INCLUDING));
-                Set<String> hs = null;
-                String field = field();
-                if (keywords.isSelected()) {
-                    if (nd.isSelected()) {
-                        hs = Util
-                                .findDeliminatedWordsInField(panel.getDatabase(),
-                                        field().toLowerCase().trim(), deliminator
-                                                .getText());
-                    } else {
-                        hs = Util.findAllWordsInField(panel.getDatabase(),
-                                field().toLowerCase().trim(), remove());
-
-                    }
-                }
-                else if (authors.isSelected()) {
-                    List<String> fields = new ArrayList<String>(2);
-                    fields.add("author");
-                    hs = Util.findAuthorLastNames(panel.getDatabase(), fields);
-                    field = "author";
-                }
-                else if (editors.isSelected()) {
-                    List<String> fields = new ArrayList<String>(2);
-                    fields.add("editor");
-                    hs = Util.findAuthorLastNames(panel.getDatabase(), fields);
-                    field = "editor";
-                }
-
-                for (String keyword : hs){
-                    KeywordGroup group = new KeywordGroup(keyword, field,
-                            keyword, false, false, AbstractGroup.INDEPENDENT);
-                    autoGroupsRoot.add(new GroupTreeNode(group));
-                }
-
-                m_groupsRoot.add(autoGroupsRoot);
-                NamedCompound ce = new NamedCompound(Globals
-                        .lang("Autogenerate groups"));
-                UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(
-                        gs, m_groupsRoot, autoGroupsRoot,
-                        UndoableAddOrRemoveGroup.ADD_NODE);
-                undo.setRevalidate(true);
-                ce.addEdit(undo);
-
-                panel.markBaseChanged(); // a change always occurs
-                gs.revalidateGroups();
-                frame.output(Globals.lang("Created groups."));
-                ce.end();
-                panel.undoManager.addEdit(ce);
-            }
-        };
-        remove.addActionListener(okListener);
-        field.addActionListener(okListener);
-        field.addCaretListener(this);
-        AbstractAction cancelAction = new AbstractAction() {
-            public void actionPerformed(ActionEvent e) {
-                dispose();
-            }
-        };
-        cancel.addActionListener(cancelAction);
-        ok.addActionListener(okListener);
-        // Key bindings:
-        ActionMap am = main.getActionMap();
-        InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(frame.prefs().getKey("Close dialog"), "close");
-        am.put("close", cancelAction);
-
-        ButtonGroup bg = new ButtonGroup();
-        bg.add(keywords);
-        bg.add(authors);
-        bg.add(editors);
-        keywords.setSelected(true);
-        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout
-                ("left:20dlu, 4dlu, left:pref, 4dlu, fill:60dlu, 4dlu, fill:0dlu", ""), main);
-        b.append(keywords, 5);
-        b.nextLine();
-        b.append(new JPanel());
-        b.append(Globals.lang("Field to group by")+":");
-        b.append(field);
-        b.nextLine();
-        b.append(new JPanel());
-        b.append(Globals.lang("Characters to ignore")+":");
-        b.append(remove);
-        b.nextLine();
-        b.append(new JPanel());
-        b.append(nd);
-        b.append(deliminator);
-        b.nextLine();
-        b.append(authors, 5);
-        b.nextLine();
-        b.append(editors, 5);
-        b.nextLine();
-        
-        ButtonBarBuilder bb = new ButtonBarBuilder(opt);
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-
-
-        // Layout starts here.
-        /*main.setLayout(gbl);
-        opt.setLayout(gbl);
-        main.setBorder(BorderFactory.createTitledBorder(BorderFactory
-                .createEtchedBorder(), Globals.lang("Group properties")));
-        // Main panel:
-        con.weightx = 0;
-        con.gridwidth = 1;
-        con.insets = new Insets(3, 5, 3, 5);
-        con.anchor = GridBagConstraints.EAST;
-        con.fill = GridBagConstraints.NONE;
-        con.gridx = 0;
-        con.gridy = 0;
-        gbl.setConstraints(nf, con);
-        main.add(nf);
-        con.gridy = 1;
-        gbl.setConstraints(nr, con);
-        main.add(nr);
-        con.gridy = 2;
-        gbl.setConstraints(nd, con);
-        main.add(nd);
-        con.weightx = 1;
-        con.anchor = GridBagConstraints.WEST;
-        con.fill = GridBagConstraints.HORIZONTAL;
-        con.gridy = 0;
-        con.gridx = 1;
-        gbl.setConstraints(field, con);
-        main.add(field);
-        con.gridy = 1;
-        gbl.setConstraints(remove, con);
-        main.add(remove);
-        con.gridy = 2;
-        gbl.setConstraints(deliminator, con);
-        main.add(deliminator);
-        // Option buttons:
-        con.gridx = GridBagConstraints.RELATIVE;
-        con.gridy = GridBagConstraints.RELATIVE;
-        con.weightx = 1;
-        con.gridwidth = 1;
-        con.anchor = GridBagConstraints.EAST;
-        con.fill = GridBagConstraints.NONE;
-        gbl.setConstraints(ok, con);
-        opt.add(ok);
-        con.anchor = GridBagConstraints.WEST;
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        gbl.setConstraints(cancel, con);
-        opt.add(cancel);*/
-        main.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        opt.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        getContentPane().add(main, BorderLayout.CENTER);
-        getContentPane().add(opt, BorderLayout.SOUTH);
-        // pack();
-        updateComponents();
-        pack();
-        Util.placeDialog(this, frame);
-    }
-
-    public boolean okPressed() {
-        return ok_pressed;
-    }
-
-    public String oldField() {
-        return oldField;
-    }
-
-    public String oldRemove() {
-        return oldRemove;
-    }
-
-    public String field() {
-        return field.getText();
-    }
-
-    public String remove() {
-        return remove.getText();
-    }
-
-    public void caretUpdate(CaretEvent e) {
-        updateComponents();
-    }
-    
-    protected void updateComponents() {
-        String groupField = field.getText().trim();
-        ok.setEnabled(groupField.matches("\\w+"));
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.HashSet;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
+
+import javax.swing.*;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.Util;
+import net.sf.jabref.undo.NamedCompound;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Dialog for creating or modifying groups. Operates directly on the Vector
+ * containing group information.
+ */
+class AutoGroupDialog extends JDialog implements CaretListener {
+    JTextField remove = new JTextField(60), field = new JTextField(60),
+            deliminator = new JTextField(60);
+    JLabel nf = new JLabel(Globals.lang("Field to group by") + ":"),
+            nr = new JLabel(Globals.lang("Characters to ignore") + ":");
+    JRadioButton
+        keywords = new JRadioButton(Globals.lang("Generate groups from keywords in a BibTeX field")),
+        authors = new JRadioButton(Globals.lang("Generate groups for author last names")),
+        editors = new JRadioButton(Globals.lang("Generate groups for editor last names"));
+    JCheckBox nd = new JCheckBox(Globals.lang("Use the following delimiter character(s):"));
+    JButton ok = new JButton(Globals.lang("Ok")), 
+    		cancel = new JButton(Globals.lang("Cancel"));
+    JPanel main = new JPanel(), opt = new JPanel();
+    private boolean ok_pressed = false;
+    private GroupTreeNode m_groupsRoot;
+    private JabRefFrame frame;
+    private BasePanel panel;
+    private GroupSelector gs;
+    private String oldRemove, oldField;
+    GridBagLayout gbl = new GridBagLayout();
+    GridBagConstraints con = new GridBagConstraints();
+
+    /**
+     * @param groupsRoot
+     *            The original set of groups, which is required as undo
+     *            information when all groups are cleared.
+     */
+    public AutoGroupDialog(JabRefFrame jabrefFrame, BasePanel basePanel,
+            GroupSelector groupSelector, GroupTreeNode groupsRoot,
+            String defaultField, String defaultRemove, String defaultDeliminator) {
+        super(jabrefFrame, Globals.lang("Automatically create groups"), true);
+        frame = jabrefFrame;
+        gs = groupSelector;
+        panel = basePanel;
+        m_groupsRoot = groupsRoot;
+        field.setText(defaultField);
+        remove.setText(defaultRemove);
+        deliminator.setText(defaultDeliminator);
+        nd.setSelected(true);
+        ActionListener okListener = new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                ok_pressed = true;
+                dispose();
+
+                GroupTreeNode autoGroupsRoot = new GroupTreeNode(
+                        new ExplicitGroup(Globals.lang("Automatically created groups"),
+                        		AbstractGroup.INCLUDING));
+                Set<String> hs = null;
+                String field = field();
+                if (keywords.isSelected()) {
+                    if (nd.isSelected()) {
+                        hs = Util
+                                .findDeliminatedWordsInField(panel.getDatabase(),
+                                        field().toLowerCase().trim(), deliminator
+                                                .getText());
+                    } else {
+                        hs = Util.findAllWordsInField(panel.getDatabase(),
+                                field().toLowerCase().trim(), remove());
+
+                    }
+                }
+                else if (authors.isSelected()) {
+                    List<String> fields = new ArrayList<String>(2);
+                    fields.add("author");
+                    hs = Util.findAuthorLastNames(panel.getDatabase(), fields);
+                    field = "author";
+                }
+                else if (editors.isSelected()) {
+                    List<String> fields = new ArrayList<String>(2);
+                    fields.add("editor");
+                    hs = Util.findAuthorLastNames(panel.getDatabase(), fields);
+                    field = "editor";
+                }
+
+                for (String keyword : hs){
+                    KeywordGroup group = new KeywordGroup(keyword, field,
+                            keyword, false, false, AbstractGroup.INDEPENDENT);
+                    autoGroupsRoot.add(new GroupTreeNode(group));
+                }
+
+                m_groupsRoot.add(autoGroupsRoot);
+                NamedCompound ce = new NamedCompound(Globals
+                        .lang("Autogenerate groups"));
+                UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(
+                        gs, m_groupsRoot, autoGroupsRoot,
+                        UndoableAddOrRemoveGroup.ADD_NODE);
+                undo.setRevalidate(true);
+                ce.addEdit(undo);
+
+                panel.markBaseChanged(); // a change always occurs
+                gs.revalidateGroups();
+                frame.output(Globals.lang("Created groups."));
+                ce.end();
+                panel.undoManager.addEdit(ce);
+            }
+        };
+        remove.addActionListener(okListener);
+        field.addActionListener(okListener);
+        field.addCaretListener(this);
+        AbstractAction cancelAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                dispose();
+            }
+        };
+        cancel.addActionListener(cancelAction);
+        ok.addActionListener(okListener);
+        // Key bindings:
+        ActionMap am = main.getActionMap();
+        InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(frame.prefs().getKey("Close dialog"), "close");
+        am.put("close", cancelAction);
+
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(keywords);
+        bg.add(authors);
+        bg.add(editors);
+        keywords.setSelected(true);
+        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout
+                ("left:20dlu, 4dlu, left:pref, 4dlu, fill:60dlu, 4dlu, fill:0dlu", ""), main);
+        b.append(keywords, 5);
+        b.nextLine();
+        b.append(new JPanel());
+        b.append(Globals.lang("Field to group by")+":");
+        b.append(field);
+        b.nextLine();
+        b.append(new JPanel());
+        b.append(Globals.lang("Characters to ignore")+":");
+        b.append(remove);
+        b.nextLine();
+        b.append(new JPanel());
+        b.append(nd);
+        b.append(deliminator);
+        b.nextLine();
+        b.append(authors, 5);
+        b.nextLine();
+        b.append(editors, 5);
+        b.nextLine();
+        
+        ButtonBarBuilder bb = new ButtonBarBuilder(opt);
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+
+
+        // Layout starts here.
+        /*main.setLayout(gbl);
+        opt.setLayout(gbl);
+        main.setBorder(BorderFactory.createTitledBorder(BorderFactory
+                .createEtchedBorder(), Globals.lang("Group properties")));
+        // Main panel:
+        con.weightx = 0;
+        con.gridwidth = 1;
+        con.insets = new Insets(3, 5, 3, 5);
+        con.anchor = GridBagConstraints.EAST;
+        con.fill = GridBagConstraints.NONE;
+        con.gridx = 0;
+        con.gridy = 0;
+        gbl.setConstraints(nf, con);
+        main.add(nf);
+        con.gridy = 1;
+        gbl.setConstraints(nr, con);
+        main.add(nr);
+        con.gridy = 2;
+        gbl.setConstraints(nd, con);
+        main.add(nd);
+        con.weightx = 1;
+        con.anchor = GridBagConstraints.WEST;
+        con.fill = GridBagConstraints.HORIZONTAL;
+        con.gridy = 0;
+        con.gridx = 1;
+        gbl.setConstraints(field, con);
+        main.add(field);
+        con.gridy = 1;
+        gbl.setConstraints(remove, con);
+        main.add(remove);
+        con.gridy = 2;
+        gbl.setConstraints(deliminator, con);
+        main.add(deliminator);
+        // Option buttons:
+        con.gridx = GridBagConstraints.RELATIVE;
+        con.gridy = GridBagConstraints.RELATIVE;
+        con.weightx = 1;
+        con.gridwidth = 1;
+        con.anchor = GridBagConstraints.EAST;
+        con.fill = GridBagConstraints.NONE;
+        gbl.setConstraints(ok, con);
+        opt.add(ok);
+        con.anchor = GridBagConstraints.WEST;
+        con.gridwidth = GridBagConstraints.REMAINDER;
+        gbl.setConstraints(cancel, con);
+        opt.add(cancel);*/
+        main.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        opt.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        getContentPane().add(main, BorderLayout.CENTER);
+        getContentPane().add(opt, BorderLayout.SOUTH);
+        // pack();
+        updateComponents();
+        pack();
+        Util.placeDialog(this, frame);
+    }
+
+    public boolean okPressed() {
+        return ok_pressed;
+    }
+
+    public String oldField() {
+        return oldField;
+    }
+
+    public String oldRemove() {
+        return oldRemove;
+    }
+
+    public String field() {
+        return field.getText();
+    }
+
+    public String remove() {
+        return remove.getText();
+    }
+
+    public void caretUpdate(CaretEvent e) {
+        updateComponents();
+    }
+    
+    protected void updateComponents() {
+        String groupField = field.getText().trim();
+        ok.setEnabled(groupField.matches("\\w+"));
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java b/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
index 3e744e4..e2a871d 100644
--- a/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
+++ b/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
@@ -1,537 +1,537 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.awt.datatransfer.*;
-import java.awt.dnd.DnDConstants;
-import java.awt.event.InputEvent;
-import java.awt.event.MouseEvent;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.swing.JComponent;
-import javax.swing.JTable;
-import javax.swing.TransferHandler;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.external.DroppedFileHandler;
-import net.sf.jabref.external.ExternalFileType;
-import net.sf.jabref.external.TransferableFileLinkSelection;
-import net.sf.jabref.gui.MainTable;
-import net.sf.jabref.gui.MainTableFormat;
-import net.sf.jabref.imports.ImportMenuItem;
-import net.sf.jabref.imports.OpenDatabaseAction;
-import net.sf.jabref.imports.ParserResult;
-import net.sf.jabref.net.URLDownload;
-import spl.PdfImporter;
-import spl.Tools;
-
-public class EntryTableTransferHandler extends TransferHandler {
-
-	protected final MainTable entryTable;
-
-	protected JabRefFrame frame;
-
-	private BasePanel panel;
-
-	protected DataFlavor urlFlavor;
-
-	protected DataFlavor stringFlavor;
-
-	protected static boolean DROP_ALLOWED = true;
-
-	/**
-	 * Construct the transfer handler.
-	 * 
-	 * @param entryTable
-	 *            The table this transfer handler should operate on. This
-	 *            argument is allowed to equal
-	 * @null, in which case the transfer handler can assume that it works for a
-	 *        JabRef instance with no databases open, attached to the empty
-	 *        tabbed pane.
-	 * @param frame
-	 *            The JabRefFrame instance.
-	 * @param panel
-	 *            The BasePanel this transferhandler works for.
-	 */
-	public EntryTableTransferHandler(MainTable entryTable, JabRefFrame frame, BasePanel panel) {
-		this.entryTable = entryTable;
-		this.frame = frame;
-		this.panel = panel;
-		stringFlavor = DataFlavor.stringFlavor;
-		try {
-			urlFlavor = new DataFlavor("application/x-java-url; class=java.net.URL");
-		} catch (ClassNotFoundException e) {
-			Globals.logger("Unable to configure drag and drop for main table");
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * Overriden to indicate which types of drags are supported (only LINK).
-	 * 
-	 * @override
-	 */
-	public int getSourceActions(JComponent c) {
-		return DnDConstants.ACTION_LINK;
-	}
-
-	/**
-	 * This method is called when dragging stuff *from* the table.
-	 */
-	public Transferable createTransferable(JComponent c) {
-        if (!draggingFile) {
-            /* so we can assume it will never be called if entryTable==null: */
-            return new TransferableEntrySelection(entryTable.getSelectedEntries());
-        }
-        else {
-            draggingFile = false;
-            return (new TransferableFileLinkSelection
-                    (panel, entryTable.getSelectedEntries()));//.getTransferable();
-        }
-	}
-
-	/**
-	 * This method is called when stuff is drag to the component.
-	 * 
-	 * Imports the dropped URL or plain text as a new entry in the current
-	 * database.
-	 * 
-	 */
-	public boolean importData(JComponent comp, Transferable t) {
-
-		// If the drop target is the main table, we want to record which
-		// row the item was dropped on, to identify the entry if needed:
-		int dropRow = -1;
-		if (comp instanceof JTable) {
-			dropRow = ((JTable) comp).getSelectedRow();
-		}
-
-		try {
-
-			// This flavor is used for dragged file links in Windows:
-			if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
-				// JOptionPane.showMessageDialog(null, "Received
-				// javaFileListFlavor");
-				@SuppressWarnings("unchecked")
-				List<File> l = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
-				return handleDraggedFiles(l, dropRow);
-			}
-            // Done by MrDlib
-            /*if(t.isDataFlavorSupported(MindMapNodesSelection.mindMapNodesFlavor)){
-                String xml = (String)t.getTransferData(MindMapNodesSelection.mindMapNodesFlavor);
-                URL mindmapURL = null;
-                if(t.isDataFlavorSupported(MindMapNodesSelection.mindmapUrlFlavor)){
-                    mindmapURL = (URL)t.getTransferData(MindMapNodesSelection.mindmapUrlFlavor);
-                }
-                List<File> files = new ArrayList<File>();
-                String[] xmlNodes = xml.split("<nodeseparator>");
-                for(String xmlNode : xmlNodes){
-                    XMLElement element = new XMLElement();
-                    element.parseString(xmlNode);
-                    String link = element.getStringAttribute("Link");
-                    String absoluteLink = Tools.getLink(link, mindmapURL);
-                    if(absoluteLink == null) continue;
-                    File file = new File(absoluteLink);
-                    if(file.exists()){
-                        files.add(file);
-                    }
-                    else{
-                        try {
-                            URL url = new URL(absoluteLink);
-                            file = new File(url.toURI());
-                            if(file.exists()){
-                                files.add(file);
-                            }
-                        } catch (URISyntaxException e) {
-                            // Todo logging
-                        } catch(IllegalArgumentException e){
-                            // Todo logging
-                        } catch(MalformedURLException e){
-                            // Todo logging
-                        }
-                    }
-                }
-                if(files.size() > 0){
-                    return handleDraggedFiles(files, dropRow);
-                }
-                else{
-                    return false;
-                }
-            }*/
-            // Done by MrDlib
-			if (t.isDataFlavorSupported(urlFlavor)) {
-				URL dropLink = (URL) t.getTransferData(urlFlavor);
-				return handleDropTransfer(dropLink, dropRow);
-			}
-
-			if (t.isDataFlavorSupported(stringFlavor)) {
-				// JOptionPane.showMessageDialog(null, "Received stringFlavor:
-				// "+dropStr);
-				String dropStr = (String) t.getTransferData(stringFlavor);
-				return handleDropTransfer(dropStr, dropRow);
-			}
-
-		} catch (IOException ioe) {
-			System.err.println("failed to read dropped data: " + ioe.toString());
-		} catch (UnsupportedFlavorException ufe) {
-			System.err.println("drop type error: " + ufe.toString());
-		}
-
-		// all supported flavors failed
-		System.err.println("can't transfer input: ");
-		DataFlavor inflavs[] = t.getTransferDataFlavors();
-		for (int i = 0; i < inflavs.length; i++) {
-			System.out.println("  " + inflavs[i].toString());
-		}
-
-		return false;
-	}
-
-	/**
-	 * This method is called to query whether the transfer can be imported.
-	 * 
-	 * Will return true for urls, strings, javaFileLists
-	 * 
-	 * @override
-	 */
-	public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
-		if (!DROP_ALLOWED)
-			return false;
-
-		// accept this if any input flavor matches any of our supported flavors
-		for (int i = 0; i < transferFlavors.length; i++) {
-			DataFlavor inflav = transferFlavors[i];
-			if (inflav.match(urlFlavor) || inflav.match(stringFlavor)
-				|| inflav.match(DataFlavor.javaFileListFlavor))
-				return true;
-		}
-
-		// System.out.println("drop type forbidden");
-		// nope, never heard of this type
-		return false;
-	}
-    boolean draggingFile = false;
-
-	public void exportAsDrag(JComponent comp, InputEvent e, int action) {
-		/* TODO: add support for dragging file link from table icon into other apps */
-        if (e instanceof MouseEvent) {
-            MouseEvent me = (MouseEvent)e;
-            int col = entryTable.columnAtPoint(me.getPoint());
-            String[] res = entryTable.getIconTypeForColumn(col);
-            if (res == null) {
-                super.exportAsDrag(comp, e, DnDConstants.ACTION_LINK);
-                return;
-            }
-            // We have an icon column:
-            if (res == MainTableFormat.FILE) {
-                System.out.println("dragging file");
-                draggingFile = true;
-            }
-        }
-        super.exportAsDrag(comp, e, DnDConstants.ACTION_LINK);
-	}
-
-	protected void exportDone(JComponent source, Transferable data, int action) {
-		// default implementation is OK
-		super.exportDone(source, data, action);
-	}
-
-	public void exportToClipboard(JComponent comp, Clipboard clip, int action) {
-		// default implementation is OK
-		super.exportToClipboard(comp, clip, action);
-	}
-
-	// add-ons -----------------------
-
-	protected boolean handleDropTransfer(String dropStr, final int dropRow) throws IOException {
-        if (dropStr.startsWith("file:")) {
-			// This appears to be a dragged file link and not a reference
-			// format. Check if we can map this to a set of files:
-			if (handleDraggedFilenames(dropStr, dropRow))
-				return true;
-			// If not, handle it in the normal way...
-		} else if (dropStr.startsWith("http:")) {
-			// This is the way URL links are received on OS X and KDE (Gnome?):
-			URL url = new URL(dropStr);
-			// JOptionPane.showMessageDialog(null, "Making URL:
-			// "+url.toString());
-			return handleDropTransfer(url, dropRow);
-		}
-		File tmpfile = java.io.File.createTempFile("jabrefimport", "");
-		tmpfile.deleteOnExit();
-		FileWriter fw = new FileWriter(tmpfile);
-		fw.write(dropStr);
-		fw.close();
-
-		// System.out.println("importing from " + tmpfile.getAbsolutePath());
-
-		ImportMenuItem importer = new ImportMenuItem(frame, false);
-		importer.automatedImport(new String[] { tmpfile.getAbsolutePath() });
-
-		return true;
-	}
-
-    /**
-	 * Translate a String describing a set of files or URLs dragged into JabRef
-     * into a List of File objects, taking care of URL special characters.
-	 *
-	 * @param s
-	 *            String describing a set of files or URLs dragged into JabRef
-     * @return a List<File> containing the individual file objects.
-     *
-	 */
-    public static List<File> getFilesFromDraggedFilesString(String s) {
-		// Split into lines:
-		String[] lines = s.replaceAll("\r", "").split("\n");
-		List<File> files = new ArrayList<File>();
-		for (int i = 0; i < lines.length; i++) {
-			String line = lines[i];
-
-            // Try to use url.toURI() to translate URL specific sequences like %20 into
-            // standard characters:
-            File fl = null;
-            try {
-                URL url = new URL(line);
-                fl = new File(url.toURI());
-            } catch(URISyntaxException e) {
-                e.printStackTrace();
-            } catch (MalformedURLException e) {
-                e.printStackTrace();
-            }
-
-            // Unless an exception was thrown, we should have the sanitized path:
-            if (fl != null)
-                line = fl.getPath();
-            else if (line.startsWith("file:"))
-				line = line.substring(5);
-			else
-				continue;
-            // Under Gnome, the link is given as file:///...., so we
-			// need to strip the extra slashes:
-			if (line.startsWith("//"))
-				line = line.substring(2);
-
-            File f = new File(line);
-            if (f.exists()) {
-				files.add(f);
-			}
-		}
-        return files;
-    }
-
-    /**
-	 * Handle a String describing a set of files or URLs dragged into JabRef.
-	 * 
-	 * @param s
-	 *            String describing a set of files or URLs dragged into JabRef
-     * @param dropRow The row in the table where the files were dragged.
-     * @return success status for the operation
-     *
-	 */
-	private boolean handleDraggedFilenames(String s, final int dropRow) {
-
-		return handleDraggedFiles(getFilesFromDraggedFilesString(s), dropRow);
-
-	}
-
-	/**
-	 * Handle a List containing File objects for a set of files to import.
-	 * 
-	 * @param files
-	 *            A List containing File instances pointing to files.
-	 * @param dropRow @param dropRow The row in the table where the files were dragged.
-     * @return success status for the operation
-	 */
-	private boolean handleDraggedFiles(List<File> files, final int dropRow) {
-		final String[] fileNames = new String[files.size()];
-		int i = 0;
-		for (Iterator<File> iterator = files.iterator(); iterator.hasNext();) {
-			File file = iterator.next();
-			fileNames[i] = file.getAbsolutePath();
-			i++;
-		}
-		// Try to load bib files normally, and import the rest into the current
-		// database.
-		// This process must be spun off into a background thread:
-		new Thread(new Runnable() {
-			public void run() {
-				// Done by MrDlib
-                final String[] newfileNames = new PdfImporter(frame, panel, entryTable, dropRow).importPdfFiles(fileNames, frame);
-                if(newfileNames.length > 0){
-                    loadOrImportFiles(newfileNames, dropRow);
-                }
-                //loadOrImportFiles(fileNames, dropRow);
-                // Done by MrDlib
-			}
-		}).start();
-
-		return true;
-	}
-
-	/**
-	 * Take a set of filenames. Those with names indicating bib files are opened
-	 * as such if possible. All other files we will attempt to import into the
-	 * current database.
-	 * 
-	 * @param fileNames
-	 *            The names of the files to open.
-	 * @param dropRow success status for the operation
-	 */
-	private void loadOrImportFiles(String[] fileNames, int dropRow) {
-
-		OpenDatabaseAction openAction = new OpenDatabaseAction(frame, false);
-		ArrayList<String> notBibFiles = new ArrayList<String>();
-		String encoding = Globals.prefs.get("defaultEncoding");
-		for (int i = 0; i < fileNames.length; i++) {
-			// Find the file's extension, if any:
-            String extension = "";
-			ExternalFileType fileType = null;
-			int index = fileNames[i].lastIndexOf('.');
-			if ((index >= 0) && (index < fileNames[i].length())) {
-				extension = fileNames[i].substring(index + 1).toLowerCase();
-				fileType = Globals.prefs.getExternalFileTypeByExt(extension);
-			}
-			if (extension.equals("bib")) {
-				File f = new File(fileNames[i]);
-				try {
-					ParserResult pr = OpenDatabaseAction.loadDatabase(f, encoding);
-					if ((pr == null) || (pr == ParserResult.INVALID_FORMAT)) {
-						notBibFiles.add(fileNames[i]);
-					} else {
-						openAction.addNewDatabase(pr, f, true);
-                        frame.getFileHistory().newFile(fileNames[i]);
-                    }
-				} catch (IOException e) {
-					notBibFiles.add(fileNames[i]);
-					// No error message, since we want to try importing the
-					// file?
-					//
-					// Util.showQuickErrorDialog(frame, Globals.lang("Open database"), e);
-				}
-				continue;
-			}
-
-			/*
-			 * This is a linkable file. If the user dropped it on an entry, we
-			 * should offer options for autolinking to this files:
-			 * 
-			 * TODO we should offer an option to highlight the row the user is on too.
-			 */
-			if (fileType != null && dropRow >= 0) {
-
-				/*
-				 * TODO: need to signal if this is a local or autodownloaded
-				 * file
-				 */
-				boolean local = true;
-
-				/*
-				 * TODO: make this an instance variable?
-				 */
-				DroppedFileHandler dfh = new DroppedFileHandler(frame, panel);
-				dfh.handleDroppedfile(fileNames[i], fileType, local, entryTable, dropRow);
-
-				continue;
-			}
-/*
-			if (extension.equals("pdf")) {
-				Collection c;
-				try {
-					c = XMPUtil.readXMP(fileNames[i]);
-				} catch (IOException e1) {
-					c = null;
-					frame.output(Globals.lang("No XMP metadata found in " + fileNames[i]));
-				}
-
-				if (c != null && c.size() > 0) {
-					Iterator it = c.iterator();
-
-					BasePanel panel = frame.basePanel();
-
-					if (panel == null) {
-						// // Create a new, empty, database.
-						BibtexDatabase database = new BibtexDatabase();
-						frame.addTab(database, null, null, Globals.prefs.get("defaultEncoding"),
-							true);
-						frame.output(Globals.lang("New database created."));
-						panel = frame.basePanel();
-					}
-
-					BibtexDatabase database = frame.basePanel().database();
-
-					NamedCompound ce = new NamedCompound(Glbals.lang("Drop PDF"));
-
-					while (it.hasNext()) {
-						BibtexEntry e = (BibtexEntry) it.next();
-
-						try {
-							e.setId(Util.createNeutralId());
-							database.insertEntry(e);
-							ce.addEdit(new UndoableInsertEntry(database, e, panel));
-						} catch (Exception e2) {
-							// Should not happen?
-						}
-					}
-
-					ce.end();
-					panel.undoManager.addEdit(ce);
-					panel.markBaseChanged();
-					continue;
-				}
-			}
-			*/
-
-			notBibFiles.add(fileNames[i]);
-		}
-
-		if (notBibFiles.size() > 0) {
-			String[] toImport = new String[notBibFiles.size()];
-			notBibFiles.toArray(toImport);
-
-			// Import into new if entryTable==null, otherwise into current
-			// database:
-			ImportMenuItem importer = new ImportMenuItem(frame, (entryTable == null));
-			importer.automatedImport(toImport);
-		}
-	}
-
-	protected boolean handleDropTransfer(URL dropLink, int dropRow) throws IOException {
-		File tmpfile = java.io.File.createTempFile("jabrefimport", "");
-		tmpfile.deleteOnExit();
-
-		// System.out.println("Import url: " + dropLink.toString());
-		// System.out.println("Temp file: "+tmpfile.getAbsolutePath());
-
-		new URLDownload(entryTable, dropLink, tmpfile).download();
-
-		// Import into new if entryTable==null, otherwise into current database:
-		ImportMenuItem importer = new ImportMenuItem(frame, (entryTable == null));
-		importer.automatedImport(new String[] { tmpfile.getAbsolutePath() });
-
-		return true;
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.awt.datatransfer.*;
+import java.awt.dnd.DnDConstants;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JComponent;
+import javax.swing.JTable;
+import javax.swing.TransferHandler;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.external.DroppedFileHandler;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.external.TransferableFileLinkSelection;
+import net.sf.jabref.gui.MainTable;
+import net.sf.jabref.gui.MainTableFormat;
+import net.sf.jabref.imports.ImportMenuItem;
+import net.sf.jabref.imports.OpenDatabaseAction;
+import net.sf.jabref.imports.ParserResult;
+import net.sf.jabref.net.URLDownload;
+import spl.PdfImporter;
+import spl.Tools;
+
+public class EntryTableTransferHandler extends TransferHandler {
+
+	protected final MainTable entryTable;
+
+	protected JabRefFrame frame;
+
+	private BasePanel panel;
+
+	protected DataFlavor urlFlavor;
+
+	protected DataFlavor stringFlavor;
+
+	protected static boolean DROP_ALLOWED = true;
+
+	/**
+	 * Construct the transfer handler.
+	 * 
+	 * @param entryTable
+	 *            The table this transfer handler should operate on. This
+	 *            argument is allowed to equal
+	 * @null, in which case the transfer handler can assume that it works for a
+	 *        JabRef instance with no databases open, attached to the empty
+	 *        tabbed pane.
+	 * @param frame
+	 *            The JabRefFrame instance.
+	 * @param panel
+	 *            The BasePanel this transferhandler works for.
+	 */
+	public EntryTableTransferHandler(MainTable entryTable, JabRefFrame frame, BasePanel panel) {
+		this.entryTable = entryTable;
+		this.frame = frame;
+		this.panel = panel;
+		stringFlavor = DataFlavor.stringFlavor;
+		try {
+			urlFlavor = new DataFlavor("application/x-java-url; class=java.net.URL");
+		} catch (ClassNotFoundException e) {
+			Globals.logger("Unable to configure drag and drop for main table");
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Overriden to indicate which types of drags are supported (only LINK).
+	 * 
+	 * @override
+	 */
+	public int getSourceActions(JComponent c) {
+		return DnDConstants.ACTION_LINK;
+	}
+
+	/**
+	 * This method is called when dragging stuff *from* the table.
+	 */
+	public Transferable createTransferable(JComponent c) {
+        if (!draggingFile) {
+            /* so we can assume it will never be called if entryTable==null: */
+            return new TransferableEntrySelection(entryTable.getSelectedEntries());
+        }
+        else {
+            draggingFile = false;
+            return (new TransferableFileLinkSelection
+                    (panel, entryTable.getSelectedEntries()));//.getTransferable();
+        }
+	}
+
+	/**
+	 * This method is called when stuff is drag to the component.
+	 * 
+	 * Imports the dropped URL or plain text as a new entry in the current
+	 * database.
+	 * 
+	 */
+	public boolean importData(JComponent comp, Transferable t) {
+
+		// If the drop target is the main table, we want to record which
+		// row the item was dropped on, to identify the entry if needed:
+		int dropRow = -1;
+		if (comp instanceof JTable) {
+			dropRow = ((JTable) comp).getSelectedRow();
+		}
+
+		try {
+
+			// This flavor is used for dragged file links in Windows:
+			if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+				// JOptionPane.showMessageDialog(null, "Received
+				// javaFileListFlavor");
+				@SuppressWarnings("unchecked")
+				List<File> l = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
+				return handleDraggedFiles(l, dropRow);
+			}
+            // Done by MrDlib
+            /*if(t.isDataFlavorSupported(MindMapNodesSelection.mindMapNodesFlavor)){
+                String xml = (String)t.getTransferData(MindMapNodesSelection.mindMapNodesFlavor);
+                URL mindmapURL = null;
+                if(t.isDataFlavorSupported(MindMapNodesSelection.mindmapUrlFlavor)){
+                    mindmapURL = (URL)t.getTransferData(MindMapNodesSelection.mindmapUrlFlavor);
+                }
+                List<File> files = new ArrayList<File>();
+                String[] xmlNodes = xml.split("<nodeseparator>");
+                for(String xmlNode : xmlNodes){
+                    XMLElement element = new XMLElement();
+                    element.parseString(xmlNode);
+                    String link = element.getStringAttribute("Link");
+                    String absoluteLink = Tools.getLink(link, mindmapURL);
+                    if(absoluteLink == null) continue;
+                    File file = new File(absoluteLink);
+                    if(file.exists()){
+                        files.add(file);
+                    }
+                    else{
+                        try {
+                            URL url = new URL(absoluteLink);
+                            file = new File(url.toURI());
+                            if(file.exists()){
+                                files.add(file);
+                            }
+                        } catch (URISyntaxException e) {
+                            // Todo logging
+                        } catch(IllegalArgumentException e){
+                            // Todo logging
+                        } catch(MalformedURLException e){
+                            // Todo logging
+                        }
+                    }
+                }
+                if(files.size() > 0){
+                    return handleDraggedFiles(files, dropRow);
+                }
+                else{
+                    return false;
+                }
+            }*/
+            // Done by MrDlib
+			if (t.isDataFlavorSupported(urlFlavor)) {
+				URL dropLink = (URL) t.getTransferData(urlFlavor);
+				return handleDropTransfer(dropLink, dropRow);
+			}
+
+			if (t.isDataFlavorSupported(stringFlavor)) {
+				// JOptionPane.showMessageDialog(null, "Received stringFlavor:
+				// "+dropStr);
+				String dropStr = (String) t.getTransferData(stringFlavor);
+				return handleDropTransfer(dropStr, dropRow);
+			}
+
+		} catch (IOException ioe) {
+			System.err.println("failed to read dropped data: " + ioe.toString());
+		} catch (UnsupportedFlavorException ufe) {
+			System.err.println("drop type error: " + ufe.toString());
+		}
+
+		// all supported flavors failed
+		System.err.println("can't transfer input: ");
+		DataFlavor inflavs[] = t.getTransferDataFlavors();
+		for (int i = 0; i < inflavs.length; i++) {
+			System.out.println("  " + inflavs[i].toString());
+		}
+
+		return false;
+	}
+
+	/**
+	 * This method is called to query whether the transfer can be imported.
+	 * 
+	 * Will return true for urls, strings, javaFileLists
+	 * 
+	 * @override
+	 */
+	public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
+		if (!DROP_ALLOWED)
+			return false;
+
+		// accept this if any input flavor matches any of our supported flavors
+		for (int i = 0; i < transferFlavors.length; i++) {
+			DataFlavor inflav = transferFlavors[i];
+			if (inflav.match(urlFlavor) || inflav.match(stringFlavor)
+				|| inflav.match(DataFlavor.javaFileListFlavor))
+				return true;
+		}
+
+		// System.out.println("drop type forbidden");
+		// nope, never heard of this type
+		return false;
+	}
+    boolean draggingFile = false;
+
+	public void exportAsDrag(JComponent comp, InputEvent e, int action) {
+		/* TODO: add support for dragging file link from table icon into other apps */
+        if (e instanceof MouseEvent) {
+            MouseEvent me = (MouseEvent)e;
+            int col = entryTable.columnAtPoint(me.getPoint());
+            String[] res = entryTable.getIconTypeForColumn(col);
+            if (res == null) {
+                super.exportAsDrag(comp, e, DnDConstants.ACTION_LINK);
+                return;
+            }
+            // We have an icon column:
+            if (res == MainTableFormat.FILE) {
+                System.out.println("dragging file");
+                draggingFile = true;
+            }
+        }
+        super.exportAsDrag(comp, e, DnDConstants.ACTION_LINK);
+	}
+
+	protected void exportDone(JComponent source, Transferable data, int action) {
+		// default implementation is OK
+		super.exportDone(source, data, action);
+	}
+
+	public void exportToClipboard(JComponent comp, Clipboard clip, int action) {
+		// default implementation is OK
+		super.exportToClipboard(comp, clip, action);
+	}
+
+	// add-ons -----------------------
+
+	protected boolean handleDropTransfer(String dropStr, final int dropRow) throws IOException {
+        if (dropStr.startsWith("file:")) {
+			// This appears to be a dragged file link and not a reference
+			// format. Check if we can map this to a set of files:
+			if (handleDraggedFilenames(dropStr, dropRow))
+				return true;
+			// If not, handle it in the normal way...
+		} else if (dropStr.startsWith("http:")) {
+			// This is the way URL links are received on OS X and KDE (Gnome?):
+			URL url = new URL(dropStr);
+			// JOptionPane.showMessageDialog(null, "Making URL:
+			// "+url.toString());
+			return handleDropTransfer(url, dropRow);
+		}
+		File tmpfile = java.io.File.createTempFile("jabrefimport", "");
+		tmpfile.deleteOnExit();
+		FileWriter fw = new FileWriter(tmpfile);
+		fw.write(dropStr);
+		fw.close();
+
+		// System.out.println("importing from " + tmpfile.getAbsolutePath());
+
+		ImportMenuItem importer = new ImportMenuItem(frame, false);
+		importer.automatedImport(new String[] { tmpfile.getAbsolutePath() });
+
+		return true;
+	}
+
+    /**
+	 * Translate a String describing a set of files or URLs dragged into JabRef
+     * into a List of File objects, taking care of URL special characters.
+	 *
+	 * @param s
+	 *            String describing a set of files or URLs dragged into JabRef
+     * @return a List<File> containing the individual file objects.
+     *
+	 */
+    public static List<File> getFilesFromDraggedFilesString(String s) {
+		// Split into lines:
+		String[] lines = s.replaceAll("\r", "").split("\n");
+		List<File> files = new ArrayList<File>();
+		for (int i = 0; i < lines.length; i++) {
+			String line = lines[i];
+
+            // Try to use url.toURI() to translate URL specific sequences like %20 into
+            // standard characters:
+            File fl = null;
+            try {
+                URL url = new URL(line);
+                fl = new File(url.toURI());
+            } catch(URISyntaxException e) {
+                e.printStackTrace();
+            } catch (MalformedURLException e) {
+                e.printStackTrace();
+            }
+
+            // Unless an exception was thrown, we should have the sanitized path:
+            if (fl != null)
+                line = fl.getPath();
+            else if (line.startsWith("file:"))
+				line = line.substring(5);
+			else
+				continue;
+            // Under Gnome, the link is given as file:///...., so we
+			// need to strip the extra slashes:
+			if (line.startsWith("//"))
+				line = line.substring(2);
+
+            File f = new File(line);
+            if (f.exists()) {
+				files.add(f);
+			}
+		}
+        return files;
+    }
+
+    /**
+	 * Handle a String describing a set of files or URLs dragged into JabRef.
+	 * 
+	 * @param s
+	 *            String describing a set of files or URLs dragged into JabRef
+     * @param dropRow The row in the table where the files were dragged.
+     * @return success status for the operation
+     *
+	 */
+	private boolean handleDraggedFilenames(String s, final int dropRow) {
+
+		return handleDraggedFiles(getFilesFromDraggedFilesString(s), dropRow);
+
+	}
+
+	/**
+	 * Handle a List containing File objects for a set of files to import.
+	 * 
+	 * @param files
+	 *            A List containing File instances pointing to files.
+	 * @param dropRow @param dropRow The row in the table where the files were dragged.
+     * @return success status for the operation
+	 */
+	private boolean handleDraggedFiles(List<File> files, final int dropRow) {
+		final String[] fileNames = new String[files.size()];
+		int i = 0;
+		for (Iterator<File> iterator = files.iterator(); iterator.hasNext();) {
+			File file = iterator.next();
+			fileNames[i] = file.getAbsolutePath();
+			i++;
+		}
+		// Try to load bib files normally, and import the rest into the current
+		// database.
+		// This process must be spun off into a background thread:
+		new Thread(new Runnable() {
+			public void run() {
+				// Done by MrDlib
+                final String[] newfileNames = new PdfImporter(frame, panel, entryTable, dropRow).importPdfFiles(fileNames, frame);
+                if(newfileNames.length > 0){
+                    loadOrImportFiles(newfileNames, dropRow);
+                }
+                //loadOrImportFiles(fileNames, dropRow);
+                // Done by MrDlib
+			}
+		}).start();
+
+		return true;
+	}
+
+	/**
+	 * Take a set of filenames. Those with names indicating bib files are opened
+	 * as such if possible. All other files we will attempt to import into the
+	 * current database.
+	 * 
+	 * @param fileNames
+	 *            The names of the files to open.
+	 * @param dropRow success status for the operation
+	 */
+	private void loadOrImportFiles(String[] fileNames, int dropRow) {
+
+		OpenDatabaseAction openAction = new OpenDatabaseAction(frame, false);
+		ArrayList<String> notBibFiles = new ArrayList<String>();
+		String encoding = Globals.prefs.get("defaultEncoding");
+		for (int i = 0; i < fileNames.length; i++) {
+			// Find the file's extension, if any:
+            String extension = "";
+			ExternalFileType fileType = null;
+			int index = fileNames[i].lastIndexOf('.');
+			if ((index >= 0) && (index < fileNames[i].length())) {
+				extension = fileNames[i].substring(index + 1).toLowerCase();
+				fileType = Globals.prefs.getExternalFileTypeByExt(extension);
+			}
+			if (extension.equals("bib")) {
+				File f = new File(fileNames[i]);
+				try {
+					ParserResult pr = OpenDatabaseAction.loadDatabase(f, encoding);
+					if ((pr == null) || (pr == ParserResult.INVALID_FORMAT)) {
+						notBibFiles.add(fileNames[i]);
+					} else {
+						openAction.addNewDatabase(pr, f, true);
+                        frame.getFileHistory().newFile(fileNames[i]);
+                    }
+				} catch (IOException e) {
+					notBibFiles.add(fileNames[i]);
+					// No error message, since we want to try importing the
+					// file?
+					//
+					// Util.showQuickErrorDialog(frame, Globals.lang("Open database"), e);
+				}
+				continue;
+			}
+
+			/*
+			 * This is a linkable file. If the user dropped it on an entry, we
+			 * should offer options for autolinking to this files:
+			 * 
+			 * TODO we should offer an option to highlight the row the user is on too.
+			 */
+			if (fileType != null && dropRow >= 0) {
+
+				/*
+				 * TODO: need to signal if this is a local or autodownloaded
+				 * file
+				 */
+				boolean local = true;
+
+				/*
+				 * TODO: make this an instance variable?
+				 */
+				DroppedFileHandler dfh = new DroppedFileHandler(frame, panel);
+				dfh.handleDroppedfile(fileNames[i], fileType, local, entryTable, dropRow);
+
+				continue;
+			}
+/*
+			if (extension.equals("pdf")) {
+				Collection c;
+				try {
+					c = XMPUtil.readXMP(fileNames[i]);
+				} catch (IOException e1) {
+					c = null;
+					frame.output(Globals.lang("No XMP metadata found in " + fileNames[i]));
+				}
+
+				if (c != null && c.size() > 0) {
+					Iterator it = c.iterator();
+
+					BasePanel panel = frame.basePanel();
+
+					if (panel == null) {
+						// // Create a new, empty, database.
+						BibtexDatabase database = new BibtexDatabase();
+						frame.addTab(database, null, null, Globals.prefs.get("defaultEncoding"),
+							true);
+						frame.output(Globals.lang("New database created."));
+						panel = frame.basePanel();
+					}
+
+					BibtexDatabase database = frame.basePanel().database();
+
+					NamedCompound ce = new NamedCompound(Glbals.lang("Drop PDF"));
+
+					while (it.hasNext()) {
+						BibtexEntry e = (BibtexEntry) it.next();
+
+						try {
+							e.setId(Util.createNeutralId());
+							database.insertEntry(e);
+							ce.addEdit(new UndoableInsertEntry(database, e, panel));
+						} catch (Exception e2) {
+							// Should not happen?
+						}
+					}
+
+					ce.end();
+					panel.undoManager.addEdit(ce);
+					panel.markBaseChanged();
+					continue;
+				}
+			}
+			*/
+
+			notBibFiles.add(fileNames[i]);
+		}
+
+		if (notBibFiles.size() > 0) {
+			String[] toImport = new String[notBibFiles.size()];
+			notBibFiles.toArray(toImport);
+
+			// Import into new if entryTable==null, otherwise into current
+			// database:
+			ImportMenuItem importer = new ImportMenuItem(frame, (entryTable == null));
+			importer.automatedImport(toImport);
+		}
+	}
+
+	protected boolean handleDropTransfer(URL dropLink, int dropRow) throws IOException {
+		File tmpfile = java.io.File.createTempFile("jabrefimport", "");
+		tmpfile.deleteOnExit();
+
+		// System.out.println("Import url: " + dropLink.toString());
+		// System.out.println("Temp file: "+tmpfile.getAbsolutePath());
+
+		new URLDownload(entryTable, dropLink, tmpfile).download();
+
+		// Import into new if entryTable==null, otherwise into current database:
+		ImportMenuItem importer = new ImportMenuItem(frame, (entryTable == null));
+		importer.automatedImport(new String[] { tmpfile.getAbsolutePath() });
+
+		return true;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/groups/ExplicitGroup.java b/src/java/net/sf/jabref/groups/ExplicitGroup.java
index d352eeb..5375728 100644
--- a/src/java/net/sf/jabref/groups/ExplicitGroup.java
+++ b/src/java/net/sf/jabref/groups/ExplicitGroup.java
@@ -1,270 +1,270 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.util.*;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.*;
-import net.sf.jabref.util.QuotedStringTokenizer;
-
-/**
- * @author jzieren
- * 
- */
-public class ExplicitGroup extends AbstractGroup implements SearchRule {
-    public static final String ID = "ExplicitGroup:";
-
-    private final Set<BibtexEntry> m_entries;
-
-    public ExplicitGroup(String name, int context) {
-        super(name, context);
-        m_entries = new HashSet<BibtexEntry>();
-    }
-
-    public static AbstractGroup fromString(String s, BibtexDatabase db,
-            int version) throws Exception {
-        if (!s.startsWith(ID))
-            throw new Exception(
-                    "Internal error: ExplicitGroup cannot be created from \""
-                            + s
-                            + "\". "
-                            + "Please report this on www.sf.net/projects/jabref");
-        QuotedStringTokenizer tok = new QuotedStringTokenizer(s.substring(ID
-                .length()), SEPARATOR, QUOTE_CHAR);
-        switch (version) {
-        case 0:
-        case 1:
-        case 2: {
-            ExplicitGroup newGroup = new ExplicitGroup(tok.nextToken(),
-                    AbstractGroup.INDEPENDENT);
-            newGroup.addEntries(tok, db);
-            return newGroup;
-        }
-        case 3: {
-            String name = tok.nextToken();
-            int context = Integer.parseInt(tok.nextToken());
-            ExplicitGroup newGroup = new ExplicitGroup(name, context);
-            newGroup.addEntries(tok, db);
-            return newGroup;
-        }
-        default:
-            throw new UnsupportedVersionException("ExplicitGroup", version);
-        }
-    }
-
-    /** Called only when created fromString */
-    protected void addEntries(QuotedStringTokenizer tok, BibtexDatabase db) {
-        BibtexEntry[] entries;
-        while (tok.hasMoreTokens()) {
-            entries = db.getEntriesByKey(Util.unquote(tok.nextToken(),
-                    QUOTE_CHAR));
-            for (int i = 0; i < entries.length; ++i)
-                m_entries.add(entries[i]);
-        }
-    }
-
-    public SearchRule getSearchRule() {
-        return this;
-    }
-
-    public boolean supportsAdd() {
-        return true;
-    }
-
-    public boolean supportsRemove() {
-        return true;
-    }
-
-    public AbstractUndoableEdit add(BibtexEntry[] entries) {
-        if (entries.length == 0)
-            return null; // nothing to do
-
-        HashSet<BibtexEntry> entriesBeforeEdit = new HashSet<BibtexEntry>(m_entries);
-        for (int i = 0; i < entries.length; ++i)
-            m_entries.add(entries[i]);
-
-        return new UndoableChangeAssignment(entriesBeforeEdit, m_entries);
-    }
-
-    public boolean addEntry(BibtexEntry entry) {
-        return m_entries.add(entry);
-    }
-
-    public AbstractUndoableEdit remove(BibtexEntry[] entries) {
-        if (entries.length == 0)
-            return null; // nothing to do
-
-        HashSet<BibtexEntry> entriesBeforeEdit = new HashSet<BibtexEntry>(m_entries);
-        for (int i = 0; i < entries.length; ++i)
-            m_entries.remove(entries[i]);
-
-        return new UndoableChangeAssignment(entriesBeforeEdit, m_entries);
-    }
-
-    public boolean removeEntry(BibtexEntry entry) {
-        return m_entries.remove(entry);
-    }
-
-    public boolean contains(BibtexEntry entry) {
-        return m_entries.contains(entry);
-    }
-
-    public boolean contains(Map<String, String> searchOptions, BibtexEntry entry) {
-        return contains(entry);
-    }
-
-    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
-        return contains(searchStrings, bibtexEntry) ? 1 : 0;
-    }
-
-    public boolean validateSearchStrings(Map<String, String> searchStrings) {
-        return true;
-    }
-
-    public AbstractGroup deepCopy() {
-        ExplicitGroup copy = new ExplicitGroup(m_name, m_context);
-        copy.m_entries.addAll(m_entries);
-        return copy;
-    }
-
-    public boolean equals(Object o) {
-        if (!(o instanceof ExplicitGroup))
-            return false;
-        ExplicitGroup other = (ExplicitGroup) o;
-        // compare entries assigned to both groups
-        if (m_entries.size() != other.m_entries.size())
-            return false; // add/remove
-        HashSet<String> keys = new HashSet<String>();
-        BibtexEntry entry;
-        String key;
-        // compare bibtex keys for all entries that have one
-        for (Iterator<BibtexEntry> it = m_entries.iterator(); it.hasNext(); ) {
-            entry = it.next();
-            key = entry.getCiteKey();
-            if (key != null)
-                keys.add(key);
-        }
-        for (Iterator<BibtexEntry> it = other.m_entries.iterator(); it.hasNext(); ) {
-            entry = it.next();
-            key = entry.getCiteKey();
-            if (key != null)
-                if (!keys.remove(key))
-                    return false;
-        }
-        if (!keys.isEmpty())
-            return false;
-        return other.m_name.equals(m_name)
-                && other.getHierarchicalContext() == getHierarchicalContext();
-    }
-
-    /**
-     * Returns a String representation of this group and its entries. Entries
-     * are referenced by their Bibtexkey. Entries that do not have a Bibtexkey
-     * are not included in the representation and will thus not be available
-     * upon recreation.
-     */
-    public String toString() {
-        StringBuffer sb = new StringBuffer();
-        sb.append(ID).append(Util.quote(m_name, SEPARATOR, QUOTE_CHAR)).append(SEPARATOR).append(m_context).append(SEPARATOR);
-        String s;
-        // write entries in well-defined order for CVS compatibility
-        Set<String> sortedKeys = new TreeSet<String>();
-        for (Iterator<BibtexEntry> it = m_entries.iterator(); it.hasNext();) {
-            s = it.next().getCiteKey();
-            if (s != null && !s.equals("")) // entries without a key are lost
-                sortedKeys.add(s);
-        }
-        for (Iterator<String> it = sortedKeys.iterator(); it.hasNext();) {
-            sb.append(Util.quote(it.next(), SEPARATOR, QUOTE_CHAR)).append(SEPARATOR);
-        }
-        return sb.toString();
-    }
-
-    /** Remove all assignments, resulting in an empty group. */
-    public void clearAssignments() {
-        m_entries.clear();
-    }
-
-    public boolean isDynamic() {
-        return false;
-    }
-
-    public String getDescription() {
-        return getDescriptionForPreview();
-    }
-
-    public static String getDescriptionForPreview() {
-        return Globals
-                .lang("This group contains entries based on manual assignment. "
-                        + "Entries can be assigned to this group by selecting them "
-                        + "then using either drag and drop or the context menu. "
-                        + "Entries can be removed from this group by selecting them "
-                        + "then using the context menu. Every entry assigned to this group "
-                        + "must have a unique key. The key may be changed at any time "
-                        + "as long as it remains unique.");
-    }
-
-    public String getShortDescription() {
-        StringBuffer sb = new StringBuffer();
-        sb.append("<b>").append(getName()).append("</b> -").append(Globals.lang("static group"));
-        switch (getHierarchicalContext()) {
-        case AbstractGroup.INCLUDING:
-            sb.append(", ").append(Globals.lang("includes subgroups"));
-            break;
-        case AbstractGroup.REFINING:
-        	sb.append(", ").append(Globals.lang("refines supergroup"));
-            break;
-        default:
-            break;
-        }
-        return sb.toString();
-    }
-    
-    /**
-     * Update the group to handle the situation where the group
-     * is applied to a different BibtexDatabase than it was created for.
-     * This group type contains a Set of BibtexEntry objects, and these will not
-     * be the same objects as in the new database. We must reset the entire Set with
-     * matching entries from the new database.
-     *
-     * @param db The database to refresh for.
-     */
-        public void refreshForNewDatabase(BibtexDatabase db) {
-            Set<BibtexEntry> newSet = new HashSet<BibtexEntry>();
-            for (Iterator<BibtexEntry> i=m_entries.iterator(); i.hasNext();) {
-                BibtexEntry entry = i.next();
-                BibtexEntry sameEntry = db.getEntryByKey(entry.getCiteKey());
-                /*if (sameEntry == null) {
-                    System.out.println("Error: could not find entry '"+entry.getCiteKey()+"'");
-                } else {
-                    System.out.println("'"+entry.getCiteKey()+"' ok");
-                }*/
-                newSet.add(sameEntry);
-            }
-            m_entries.clear();
-            m_entries.addAll(newSet);
-        }
-
-		public Set<BibtexEntry> getEntries(){
-			return m_entries;
-		}
-
-    public String getTypeId() {
-        return ID;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.util.*;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.*;
+import net.sf.jabref.util.QuotedStringTokenizer;
+
+/**
+ * @author jzieren
+ * 
+ */
+public class ExplicitGroup extends AbstractGroup implements SearchRule {
+    public static final String ID = "ExplicitGroup:";
+
+    private final Set<BibtexEntry> m_entries;
+
+    public ExplicitGroup(String name, int context) {
+        super(name, context);
+        m_entries = new HashSet<BibtexEntry>();
+    }
+
+    public static AbstractGroup fromString(String s, BibtexDatabase db,
+            int version) throws Exception {
+        if (!s.startsWith(ID))
+            throw new Exception(
+                    "Internal error: ExplicitGroup cannot be created from \""
+                            + s
+                            + "\". "
+                            + "Please report this on www.sf.net/projects/jabref");
+        QuotedStringTokenizer tok = new QuotedStringTokenizer(s.substring(ID
+                .length()), SEPARATOR, QUOTE_CHAR);
+        switch (version) {
+        case 0:
+        case 1:
+        case 2: {
+            ExplicitGroup newGroup = new ExplicitGroup(tok.nextToken(),
+                    AbstractGroup.INDEPENDENT);
+            newGroup.addEntries(tok, db);
+            return newGroup;
+        }
+        case 3: {
+            String name = tok.nextToken();
+            int context = Integer.parseInt(tok.nextToken());
+            ExplicitGroup newGroup = new ExplicitGroup(name, context);
+            newGroup.addEntries(tok, db);
+            return newGroup;
+        }
+        default:
+            throw new UnsupportedVersionException("ExplicitGroup", version);
+        }
+    }
+
+    /** Called only when created fromString */
+    protected void addEntries(QuotedStringTokenizer tok, BibtexDatabase db) {
+        BibtexEntry[] entries;
+        while (tok.hasMoreTokens()) {
+            entries = db.getEntriesByKey(Util.unquote(tok.nextToken(),
+                    QUOTE_CHAR));
+            for (int i = 0; i < entries.length; ++i)
+                m_entries.add(entries[i]);
+        }
+    }
+
+    public SearchRule getSearchRule() {
+        return this;
+    }
+
+    public boolean supportsAdd() {
+        return true;
+    }
+
+    public boolean supportsRemove() {
+        return true;
+    }
+
+    public AbstractUndoableEdit add(BibtexEntry[] entries) {
+        if (entries.length == 0)
+            return null; // nothing to do
+
+        HashSet<BibtexEntry> entriesBeforeEdit = new HashSet<BibtexEntry>(m_entries);
+        for (int i = 0; i < entries.length; ++i)
+            m_entries.add(entries[i]);
+
+        return new UndoableChangeAssignment(entriesBeforeEdit, m_entries);
+    }
+
+    public boolean addEntry(BibtexEntry entry) {
+        return m_entries.add(entry);
+    }
+
+    public AbstractUndoableEdit remove(BibtexEntry[] entries) {
+        if (entries.length == 0)
+            return null; // nothing to do
+
+        HashSet<BibtexEntry> entriesBeforeEdit = new HashSet<BibtexEntry>(m_entries);
+        for (int i = 0; i < entries.length; ++i)
+            m_entries.remove(entries[i]);
+
+        return new UndoableChangeAssignment(entriesBeforeEdit, m_entries);
+    }
+
+    public boolean removeEntry(BibtexEntry entry) {
+        return m_entries.remove(entry);
+    }
+
+    public boolean contains(BibtexEntry entry) {
+        return m_entries.contains(entry);
+    }
+
+    public boolean contains(Map<String, String> searchOptions, BibtexEntry entry) {
+        return contains(entry);
+    }
+
+    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
+        return contains(searchStrings, bibtexEntry) ? 1 : 0;
+    }
+
+    public boolean validateSearchStrings(Map<String, String> searchStrings) {
+        return true;
+    }
+
+    public AbstractGroup deepCopy() {
+        ExplicitGroup copy = new ExplicitGroup(m_name, m_context);
+        copy.m_entries.addAll(m_entries);
+        return copy;
+    }
+
+    public boolean equals(Object o) {
+        if (!(o instanceof ExplicitGroup))
+            return false;
+        ExplicitGroup other = (ExplicitGroup) o;
+        // compare entries assigned to both groups
+        if (m_entries.size() != other.m_entries.size())
+            return false; // add/remove
+        HashSet<String> keys = new HashSet<String>();
+        BibtexEntry entry;
+        String key;
+        // compare bibtex keys for all entries that have one
+        for (Iterator<BibtexEntry> it = m_entries.iterator(); it.hasNext(); ) {
+            entry = it.next();
+            key = entry.getCiteKey();
+            if (key != null)
+                keys.add(key);
+        }
+        for (Iterator<BibtexEntry> it = other.m_entries.iterator(); it.hasNext(); ) {
+            entry = it.next();
+            key = entry.getCiteKey();
+            if (key != null)
+                if (!keys.remove(key))
+                    return false;
+        }
+        if (!keys.isEmpty())
+            return false;
+        return other.m_name.equals(m_name)
+                && other.getHierarchicalContext() == getHierarchicalContext();
+    }
+
+    /**
+     * Returns a String representation of this group and its entries. Entries
+     * are referenced by their Bibtexkey. Entries that do not have a Bibtexkey
+     * are not included in the representation and will thus not be available
+     * upon recreation.
+     */
+    public String toString() {
+        StringBuffer sb = new StringBuffer();
+        sb.append(ID).append(Util.quote(m_name, SEPARATOR, QUOTE_CHAR)).append(SEPARATOR).append(m_context).append(SEPARATOR);
+        String s;
+        // write entries in well-defined order for CVS compatibility
+        Set<String> sortedKeys = new TreeSet<String>();
+        for (Iterator<BibtexEntry> it = m_entries.iterator(); it.hasNext();) {
+            s = it.next().getCiteKey();
+            if (s != null && !s.equals("")) // entries without a key are lost
+                sortedKeys.add(s);
+        }
+        for (Iterator<String> it = sortedKeys.iterator(); it.hasNext();) {
+            sb.append(Util.quote(it.next(), SEPARATOR, QUOTE_CHAR)).append(SEPARATOR);
+        }
+        return sb.toString();
+    }
+
+    /** Remove all assignments, resulting in an empty group. */
+    public void clearAssignments() {
+        m_entries.clear();
+    }
+
+    public boolean isDynamic() {
+        return false;
+    }
+
+    public String getDescription() {
+        return getDescriptionForPreview();
+    }
+
+    public static String getDescriptionForPreview() {
+        return Globals
+                .lang("This group contains entries based on manual assignment. "
+                        + "Entries can be assigned to this group by selecting them "
+                        + "then using either drag and drop or the context menu. "
+                        + "Entries can be removed from this group by selecting them "
+                        + "then using the context menu. Every entry assigned to this group "
+                        + "must have a unique key. The key may be changed at any time "
+                        + "as long as it remains unique.");
+    }
+
+    public String getShortDescription() {
+        StringBuffer sb = new StringBuffer();
+        sb.append("<b>").append(getName()).append("</b> -").append(Globals.lang("static group"));
+        switch (getHierarchicalContext()) {
+        case AbstractGroup.INCLUDING:
+            sb.append(", ").append(Globals.lang("includes subgroups"));
+            break;
+        case AbstractGroup.REFINING:
+        	sb.append(", ").append(Globals.lang("refines supergroup"));
+            break;
+        default:
+            break;
+        }
+        return sb.toString();
+    }
+    
+    /**
+     * Update the group to handle the situation where the group
+     * is applied to a different BibtexDatabase than it was created for.
+     * This group type contains a Set of BibtexEntry objects, and these will not
+     * be the same objects as in the new database. We must reset the entire Set with
+     * matching entries from the new database.
+     *
+     * @param db The database to refresh for.
+     */
+        public void refreshForNewDatabase(BibtexDatabase db) {
+            Set<BibtexEntry> newSet = new HashSet<BibtexEntry>();
+            for (Iterator<BibtexEntry> i=m_entries.iterator(); i.hasNext();) {
+                BibtexEntry entry = i.next();
+                BibtexEntry sameEntry = db.getEntryByKey(entry.getCiteKey());
+                /*if (sameEntry == null) {
+                    System.out.println("Error: could not find entry '"+entry.getCiteKey()+"'");
+                } else {
+                    System.out.println("'"+entry.getCiteKey()+"' ok");
+                }*/
+                newSet.add(sameEntry);
+            }
+            m_entries.clear();
+            m_entries.addAll(newSet);
+        }
+
+		public Set<BibtexEntry> getEntries(){
+			return m_entries;
+		}
+
+    public String getTypeId() {
+        return ID;
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/GroupDialog.java b/src/java/net/sf/jabref/groups/GroupDialog.java
index d7014f8..9ca4d6a 100644
--- a/src/java/net/sf/jabref/groups/GroupDialog.java
+++ b/src/java/net/sf/jabref/groups/GroupDialog.java
@@ -1,567 +1,567 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.awt.BorderLayout;
-import java.awt.CardLayout;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.util.Vector;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import javax.swing.*;
-import javax.swing.event.CaretEvent;
-import javax.swing.event.CaretListener;
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.FieldContentSelector;
-import net.sf.jabref.FieldTextField;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.Util;
-import net.sf.jabref.search.SearchExpressionParser;
-import antlr.collections.AST;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Dialog for creating or modifying groups. Operates directly on the Vector
- * containing group information.
- */
-class GroupDialog extends JDialog {
-        private static final int INDEX_EXPLICITGROUP = 0;
-        private static final int INDEX_KEYWORDGROUP = 1;
-        private static final int INDEX_SEARCHGROUP = 2;
-        private static final int TEXTFIELD_LENGTH = 30;
-        // for all types
-        private JTextField m_name = new JTextField(TEXTFIELD_LENGTH);
-        private JRadioButton m_explicitRadioButton = new JRadioButton(Globals
-                        .lang("Statically group entries by manual assignment"));
-        private JRadioButton m_keywordsRadioButton = new JRadioButton(
-                        Globals.lang("Dynamically group entries by searching a field for a keyword"));
-        private JRadioButton m_searchRadioButton = new JRadioButton(Globals
-                        .lang("Dynamically group entries by a free-form search expression"));
-        private JRadioButton m_independentButton = new JRadioButton( // JZTODO lyrics
-                        Globals.lang("Independent group: When selected, view only this group's entries"));
-        private JRadioButton m_intersectionButton = new JRadioButton( // JZTODO lyrics
-                        Globals.lang("Refine supergroup: When selected, view entries contained in both this group and its supergroup"));
-        private JRadioButton m_unionButton = new JRadioButton( // JZTODO lyrics
-                        Globals.lang("Include subgroups: When selected, view entries contained in this group or its subgroups"));
-        // for KeywordGroup
-        private JTextField m_kgSearchField = new JTextField(TEXTFIELD_LENGTH);
-        private FieldTextField m_kgSearchTerm = new FieldTextField("keywords", "",
-                        false);
-        private JCheckBox m_kgCaseSensitive = new JCheckBox(Globals
-                        .lang("Case sensitive"));
-        private JCheckBox m_kgRegExp = new JCheckBox(Globals
-                        .lang("Regular Expression"));
-        // for SearchGroup
-        private JTextField m_sgSearchExpression = new JTextField(TEXTFIELD_LENGTH);
-        private JCheckBox m_sgCaseSensitive = new JCheckBox(Globals
-                        .lang("Case sensitive"));
-        private JCheckBox m_sgRegExp = new JCheckBox(Globals
-                        .lang("Regular Expression"));
-        // for all types
-        private JButton m_ok = new JButton(Globals.lang("Ok"));
-        private JButton m_cancel = new JButton(Globals.lang("Cancel"));
-        private JPanel m_optionsPanel = new JPanel();
-        private JLabel m_description = new JLabel() {
-                public Dimension getPreferredSize() {
-                        Dimension d = super.getPreferredSize();
-                        // width must be smaller than width of enclosing JScrollPane
-                        // to prevent a horizontal scroll bar
-                        d.width = 1;
-                        return d;
-                }
-        };
-
-        private boolean m_okPressed = false;
-
-        private final JabRefFrame m_parent;
-
-        private final BasePanel m_basePanel;
-
-        private AbstractGroup m_resultingGroup;
-
-        private AbstractUndoableEdit m_undoAddPreviousEntires = null;
-
-        private final AbstractGroup m_editedGroup;
-
-        private CardLayout m_optionsLayout = new CardLayout();
-
-        /**
-         * Shows a group add/edit dialog.
-         *
-         * @param jabrefFrame
-         *            The parent frame.
-         * @param defaultField
-         *            The default grouping field.
-         * @param editedGroup
-         *            The group being edited, or null if a new group is to be
-         *            created.
-         */
-        public GroupDialog(JabRefFrame jabrefFrame, BasePanel basePanel,
-                        AbstractGroup editedGroup) {
-                super(jabrefFrame, Globals.lang("Edit group"), true);
-                m_basePanel = basePanel;
-                m_parent = jabrefFrame;
-                m_editedGroup = editedGroup;
-
-                // set default values (overwritten if editedGroup != null)
-                m_kgSearchField.setText(jabrefFrame.prefs().get("groupsDefaultField"));
-
-                // configure elements
-                ButtonGroup groupType = new ButtonGroup();
-                groupType.add(m_explicitRadioButton);
-                groupType.add(m_keywordsRadioButton);
-                groupType.add(m_searchRadioButton);
-                ButtonGroup groupHierarchy = new ButtonGroup();
-                groupHierarchy.add(m_independentButton);
-                groupHierarchy.add(m_intersectionButton);
-                groupHierarchy.add(m_unionButton);
-                m_description.setVerticalAlignment(JLabel.TOP);
-                getRootPane().setDefaultButton(m_ok);
-
-                // build individual layout cards for each group
-                m_optionsPanel.setLayout(m_optionsLayout);
-                // ... for explicit group
-                m_optionsPanel.add(new JPanel(), "" + INDEX_EXPLICITGROUP);
-                // ... for keyword group
-                FormLayout layoutKG = new FormLayout(
-                                "right:pref, 4dlu, fill:1dlu:grow, 2dlu, left:pref");
-                DefaultFormBuilder builderKG = new DefaultFormBuilder(layoutKG);
-                builderKG.append(Globals.lang("Field"));
-                builderKG.append(m_kgSearchField, 3);
-                builderKG.nextLine();
-                builderKG.append(Globals.lang("Keyword"));
-                builderKG.append(m_kgSearchTerm);
-                builderKG.append(new FieldContentSelector(m_parent, m_basePanel, this,
-                                m_kgSearchTerm, m_basePanel.metaData(), null, true, ", "));
-                builderKG.nextLine();
-                builderKG.append(m_kgCaseSensitive, 3);
-                builderKG.nextLine();
-                builderKG.append(m_kgRegExp, 3);
-                m_optionsPanel.add(builderKG.getPanel(), "" + INDEX_KEYWORDGROUP);
-                // ... for search group
-                FormLayout layoutSG = new FormLayout("right:pref, 4dlu, fill:1dlu:grow");
-                DefaultFormBuilder builderSG = new DefaultFormBuilder(layoutSG);
-                builderSG.append(Globals.lang("Search expression"));
-                builderSG.append(m_sgSearchExpression);
-                builderSG.nextLine();
-                builderSG.append(m_sgCaseSensitive, 3);
-                builderSG.nextLine();
-                builderSG.append(m_sgRegExp, 3);
-                m_optionsPanel.add(builderSG.getPanel(), "" + INDEX_SEARCHGROUP);
-                // ... for buttons panel
-                FormLayout layoutBP = new FormLayout("pref, 4dlu, pref", "p");
-                layoutBP.setColumnGroups(new int[][] { { 1, 3 } });
-                ButtonBarBuilder builderBP = new ButtonBarBuilder();
-                builderBP.addGlue();
-                builderBP.addButton(m_ok);
-                builderBP.addButton(m_cancel);
-                builderBP.addGlue();
-                builderBP.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-
-                // create layout
-                FormLayout layoutAll = new FormLayout(
-                                "right:pref, 4dlu, fill:600px, 4dlu, fill:pref",
-                                "p, 3dlu, p, 3dlu, p, 0dlu, p, 0dlu, p, 3dlu, p, 3dlu, p, "
-                                                + "0dlu, p, 0dlu, p, 3dlu, p, 3dlu, "
-                                                + "p, 3dlu, p, 3dlu, top:80dlu, 9dlu, p, 9dlu, p");
-
-                DefaultFormBuilder builderAll = new DefaultFormBuilder(layoutAll);
-                builderAll.setDefaultDialogBorder();
-                builderAll.appendSeparator(Globals.lang("General"));
-                builderAll.nextLine();
-                builderAll.nextLine();
-                builderAll.append(Globals.lang("Name"));
-                builderAll.append(m_name);
-                builderAll.nextLine();
-                builderAll.nextLine();
-                builderAll.append(m_explicitRadioButton, 5);
-                builderAll.nextLine();
-                builderAll.nextLine();
-                builderAll.append(m_keywordsRadioButton, 5);
-                builderAll.nextLine();
-                builderAll.nextLine();
-                builderAll.append(m_searchRadioButton, 5);
-                builderAll.nextLine();
-                builderAll.nextLine();
-                builderAll.appendSeparator(Globals.lang("Hierarchical context")); // JZTODO lyrics
-                builderAll.nextLine();
-                builderAll.nextLine();
-                builderAll.append(m_independentButton, 5);
-                builderAll.nextLine();
-                builderAll.nextLine();
-                builderAll.append(m_intersectionButton, 5);
-                builderAll.nextLine();
-                builderAll.nextLine();
-                builderAll.append(m_unionButton, 5);
-                builderAll.nextLine();
-                builderAll.nextLine();
-                builderAll.appendSeparator(Globals.lang("Options"));
-                builderAll.nextLine();
-                builderAll.nextLine();
-                builderAll.append(m_optionsPanel, 5);
-                builderAll.nextLine();
-                builderAll.nextLine();
-                builderAll.appendSeparator(Globals.lang("Description"));
-                builderAll.nextLine();
-                builderAll.nextLine();
-                JScrollPane sp = new JScrollPane(m_description,
-                                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-                                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED) {
-                        public Dimension getPreferredSize() {
-                                return getMaximumSize();
-                        }
-                };
-                builderAll.append(sp, 5);
-                builderAll.nextLine();
-                builderAll.nextLine();
-                builderAll.appendSeparator();
-                builderAll.nextLine();
-                builderAll.nextLine();
-                //CellConstraints cc = new CellConstraints();
-                //builderAll.add(builderBP.getPanel(), cc.xyw(builderAll.getColumn(),
-                //                builderAll.getRow(), 5, "center, fill"));
-
-                Container cp = getContentPane();
-                //cp.setLayout(new BoxLayout(cp, BoxLayout.Y_AXIS));
-                cp.add(builderAll.getPanel(), BorderLayout.CENTER);
-                cp.add(builderBP.getPanel(), BorderLayout.SOUTH);
-                pack();
-                setResizable(false);
-                updateComponents();
-                setLayoutForSelectedGroup();
-                Util.placeDialog(this, m_parent);
-
-                // add listeners
-                ItemListener radioButtonItemListener = new ItemListener() {
-                        public void itemStateChanged(ItemEvent e) {
-                                setLayoutForSelectedGroup();
-                                updateComponents();
-                        }
-                };
-                m_explicitRadioButton.addItemListener(radioButtonItemListener);
-                m_keywordsRadioButton.addItemListener(radioButtonItemListener);
-                m_searchRadioButton.addItemListener(radioButtonItemListener);
-
-                Action cancelAction = new AbstractAction() {
-                    public void actionPerformed(ActionEvent e) {
-                        dispose();
-                    }
-                };
-                m_cancel.addActionListener(cancelAction);
-                builderAll.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
-                        .put(Globals.prefs.getKey("Close dialog"), "close");
-                builderAll.getPanel().getActionMap().put("close", cancelAction);
-
-                m_ok.addActionListener(new ActionListener() {
-                        public void actionPerformed(ActionEvent e) {
-                                m_okPressed = true;
-                                if (m_explicitRadioButton.isSelected()) {
-                                        if (m_editedGroup instanceof ExplicitGroup) {
-                                                // keep assignments from possible previous ExplicitGroup
-                                                m_resultingGroup = m_editedGroup.deepCopy();
-                                                m_resultingGroup.setName(m_name.getText().trim());
-                                                m_resultingGroup.setHierarchicalContext(getContext());
-                                        } else {
-                                                m_resultingGroup = new ExplicitGroup(m_name.getText()
-                                                                .trim(), getContext());
-                                                if (m_editedGroup != null)
-                                                        addPreviousEntries();
-                                        }
-                                } else if (m_keywordsRadioButton.isSelected()) {
-                                        // regex is correct, otherwise OK would have been disabled
-                                        // therefore I don't catch anything here
-                                        m_resultingGroup = new KeywordGroup(
-                                                        m_name.getText().trim(), m_kgSearchField.getText()
-                                                                        .trim(), m_kgSearchTerm.getText().trim(),
-                                                        m_kgCaseSensitive.isSelected(), m_kgRegExp
-                                                                        .isSelected(), getContext());
-                                        if ((m_editedGroup instanceof ExplicitGroup || m_editedGroup instanceof SearchGroup)
-                                                        && m_resultingGroup.supportsAdd()) {
-                                                addPreviousEntries();
-                                        }
-                                } else if (m_searchRadioButton.isSelected()) {
-                                        try {
-                                                // regex is correct, otherwise OK would have been
-                                                // disabled
-                                                // therefore I don't catch anything here
-                                                m_resultingGroup = new SearchGroup(m_name.getText()
-                                                                .trim(), m_sgSearchExpression.getText().trim(),
-                                                                m_sgCaseSensitive.isSelected(), m_sgRegExp
-                                                                                .isSelected(), getContext());
-                                        } catch (Exception e1) {
-                                                // should never happen
-                                        }
-                                }
-                                dispose();
-                        }
-                });
-
-
-                CaretListener caretListener = new CaretListener() {
-                        public void caretUpdate(CaretEvent e) {
-                                updateComponents();
-                        }
-                };
-
-                ItemListener itemListener = new ItemListener() {
-                        public void itemStateChanged(ItemEvent e) {
-                                updateComponents();
-                        }
-                };
-
-                m_name.addCaretListener(caretListener);
-                m_kgSearchField.addCaretListener(caretListener);
-                m_kgSearchTerm.addCaretListener(caretListener);
-                m_kgCaseSensitive.addItemListener(itemListener);
-                m_kgRegExp.addItemListener(itemListener);
-                m_sgSearchExpression.addCaretListener(caretListener);
-                m_sgRegExp.addItemListener(itemListener);
-                m_sgCaseSensitive.addItemListener(itemListener);
-
-                // configure for current type
-                if (editedGroup instanceof KeywordGroup) {
-                        KeywordGroup group = (KeywordGroup) editedGroup;
-                        m_name.setText(group.getName());
-                        m_kgSearchField.setText(group.getSearchField());
-                        m_kgSearchTerm.setText(group.getSearchExpression());
-                        m_kgCaseSensitive.setSelected(group.isCaseSensitive());
-                        m_kgRegExp.setSelected(group.isRegExp());
-                        m_keywordsRadioButton.setSelected(true);
-                        setContext(editedGroup.getHierarchicalContext());
-                } else if (editedGroup instanceof SearchGroup) {
-                        SearchGroup group = (SearchGroup) editedGroup;
-                        m_name.setText(group.getName());
-                        m_sgSearchExpression.setText(group.getSearchExpression());
-                        m_sgCaseSensitive.setSelected(group.isCaseSensitive());
-                        m_sgRegExp.setSelected(group.isRegExp());
-                        m_searchRadioButton.setSelected(true);
-                        setContext(editedGroup.getHierarchicalContext());
-                } else if (editedGroup instanceof ExplicitGroup) {
-                        m_name.setText(editedGroup.getName());
-                        m_explicitRadioButton.setSelected(true);
-                        setContext(editedGroup.getHierarchicalContext());
-                } else { // creating new group -> defaults!
-                        m_explicitRadioButton.setSelected(true);
-                        setContext(AbstractGroup.INDEPENDENT);
-                }
-        }
-
-        public boolean okPressed() {
-                return m_okPressed;
-        }
-
-        public AbstractGroup getResultingGroup() {
-                return m_resultingGroup;
-        }
-
-        private void setLayoutForSelectedGroup() {
-                if (m_explicitRadioButton.isSelected())
-                        m_optionsLayout.show(m_optionsPanel, String
-                                        .valueOf(INDEX_EXPLICITGROUP));
-                else if (m_keywordsRadioButton.isSelected())
-                        m_optionsLayout.show(m_optionsPanel, String
-                                        .valueOf(INDEX_KEYWORDGROUP));
-                else if (m_searchRadioButton.isSelected())
-                        m_optionsLayout.show(m_optionsPanel, String
-                                        .valueOf(INDEX_SEARCHGROUP));
-        }
-
-        private void updateComponents() {
-                // all groups need a name
-                boolean okEnabled = m_name.getText().trim().length() > 0;
-                if (!okEnabled) {
-                        setDescription(Globals.lang("Please enter a name for the group."));
-                        m_ok.setEnabled(false);
-                        return;
-                }
-                String s1, s2;
-                if (m_keywordsRadioButton.isSelected()) {
-                        s1 = m_kgSearchField.getText().trim();
-                        okEnabled = okEnabled && s1.matches("\\w+");
-                        s2 = m_kgSearchTerm.getText().trim();
-                        okEnabled = okEnabled && s2.length() > 0;
-                        if (!okEnabled) {
-                                setDescription(Globals
-                                                .lang("Please enter the field to search (e.g. <b>keywords</b>) and the keyword to search it for (e.g. <b>electrical</b>)."));
-                        } else {
-                                if (m_kgRegExp.isSelected()) {
-                                        try {
-                                                Pattern.compile(s2);
-                                                setDescription(KeywordGroup.getDescriptionForPreview(s1, s2,
-                                                                m_kgCaseSensitive.isSelected(), m_kgRegExp
-                                                                                .isSelected()));
-                                        } catch (Exception e) {
-                                                okEnabled = false;
-                                                setDescription(formatRegExException(s2, e));
-                                        }
-                                } else {
-                                        setDescription(KeywordGroup.getDescriptionForPreview(s1, s2,
-                                                        m_kgCaseSensitive.isSelected(), m_kgRegExp
-                                                                        .isSelected()));
-                                }
-                        }
-                        setNameFontItalic(true);
-                } else if (m_searchRadioButton.isSelected()) {
-                        s1 = m_sgSearchExpression.getText().trim();
-                        okEnabled = okEnabled & s1.length() > 0;
-                        if (!okEnabled) {
-                                setDescription(Globals
-                                                .lang("Please enter a search term. For example, to search all fields for <b>Smith</b>, enter%c<p>"
-                                                                + "<tt>smith</tt><p>"
-                                                                + "To search the field <b>Author</b> for <b>Smith</b> and the field <b>Title</b> for <b>electrical</b>, enter%c<p>"
-                                                                + "<tt>author%esmith and title%eelectrical</tt>"));
-                        } else {
-                                AST ast = SearchExpressionParser
-                                                .checkSyntax(s1, m_sgCaseSensitive.isSelected(),
-                                                                m_sgRegExp.isSelected());
-                                setDescription(SearchGroup.getDescriptionForPreview(s1, ast,
-                                                m_sgCaseSensitive.isSelected(), m_sgRegExp.isSelected()));
-                                if (m_sgRegExp.isSelected()) {
-                                        try {
-                                                Pattern.compile(s1);
-                                        } catch (Exception e) {
-                                                okEnabled = false;
-                                                setDescription(formatRegExException(s1, e));
-                                        }
-                                }
-                        }
-                        setNameFontItalic(true);
-                } else if (m_explicitRadioButton.isSelected()) {
-                        setDescription(ExplicitGroup.getDescriptionForPreview());
-                        setNameFontItalic(false);
-                }
-                m_ok.setEnabled(okEnabled);
-        }
-
-        /**
-         * This is used when a group is converted and the new group supports
-         * explicit adding of entries: All entries that match the previous group are
-         * added to the new group.
-         */
-        private void addPreviousEntries() {
-                // JZTODO lyrics...
-                int i = JOptionPane.showConfirmDialog(m_basePanel.frame(), Globals
-                                .lang("Assign the original group's entries to this group?"),
-                                Globals.lang("Change of Grouping Method"),
-                                JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
-                if (i == JOptionPane.NO_OPTION)
-                        return;
-                Vector<BibtexEntry> vec = new Vector<BibtexEntry>();
-                for (BibtexEntry entry : m_basePanel.database().getEntries()){
-                        if (m_editedGroup.contains(entry))
-                        	vec.add(entry);
-                }
-                if (vec.size() > 0) {
-                        BibtexEntry[] entries = new BibtexEntry[vec.size()];
-                        vec.toArray(entries);
-                        if (!Util.warnAssignmentSideEffects(new AbstractGroup[]{m_resultingGroup},
-                                        entries, m_basePanel.getDatabase(), this))
-                                return;
-                        // the undo information for a conversion to an ExplicitGroup is
-                        // contained completely in the UndoableModifyGroup object.
-                        if (!(m_resultingGroup instanceof ExplicitGroup))
-                                m_undoAddPreviousEntires = m_resultingGroup.add(entries);
-                }
-        }
-
-        protected void setDescription(String description) {
-                m_description.setText("<html>" + description + "</html>");
-        }
-
-        protected String formatRegExException(String regExp, Exception e) {
-        String[] sa = e.getMessage().split("\\n");
-        StringBuffer sb = new StringBuffer();
-        for (int i = 0; i < sa.length; ++i) {
-            if (i > 0)
-                sb.append("<br>");
-            sb.append(Util.quoteForHTML(sa[i]));
-        }
-                String s = Globals.lang(
-                                "The regular expression <b>%0</b> is invalid%c",
-                Util.quoteForHTML(regExp))
-                                + "<p><tt>"
-                                + sb.toString()
-                                + "</tt>";
-                if (!(e instanceof PatternSyntaxException))
-                        return s;
-                int lastNewline = s.lastIndexOf("<br>");
-                int hat = s.lastIndexOf("^");
-                if (lastNewline >= 0 && hat >= 0 && hat > lastNewline)
-                        return s.substring(0, lastNewline + 4)
-                                        + s.substring(lastNewline + 4).replaceAll(" ", " ");
-                return s;
-        }
-
-        /**
-         * Returns an undo object for adding the edited group's entries to the new
-         * group, or null if this did not occur.
-         */
-        public AbstractUndoableEdit getUndoForAddPreviousEntries() {
-                return m_undoAddPreviousEntires;
-        }
-
-        /** Sets the font of the name entry field. */
-        protected void setNameFontItalic(boolean italic) {
-                Font f = m_name.getFont();
-                if (f.isItalic() != italic) {
-                        f = f.deriveFont(italic ? Font.ITALIC : Font.PLAIN);
-                        m_name.setFont(f);
-                }
-        }
-
-        /**
-         * Returns the int representing the selected hierarchical group context.
-         */
-        protected int getContext() {
-                if (m_independentButton.isSelected())
-                        return AbstractGroup.INDEPENDENT;
-                if (m_intersectionButton.isSelected())
-                        return AbstractGroup.REFINING;
-                if (m_unionButton.isSelected())
-                        return AbstractGroup.INCLUDING;
-                return AbstractGroup.INDEPENDENT; // default
-        }
-
-        protected void setContext(int context) {
-                switch (context) {
-                case AbstractGroup.REFINING:
-                        m_intersectionButton.setSelected(true);
-                        return;
-                case AbstractGroup.INCLUDING:
-                        m_unionButton.setSelected(true);
-                        return;
-                case AbstractGroup.INDEPENDENT:
-                default:
-                        m_independentButton.setSelected(true);
-                        return;
-                }
-        }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.Vector;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+import javax.swing.*;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.FieldContentSelector;
+import net.sf.jabref.FieldTextField;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.Util;
+import net.sf.jabref.search.SearchExpressionParser;
+import antlr.collections.AST;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Dialog for creating or modifying groups. Operates directly on the Vector
+ * containing group information.
+ */
+class GroupDialog extends JDialog {
+        private static final int INDEX_EXPLICITGROUP = 0;
+        private static final int INDEX_KEYWORDGROUP = 1;
+        private static final int INDEX_SEARCHGROUP = 2;
+        private static final int TEXTFIELD_LENGTH = 30;
+        // for all types
+        private JTextField m_name = new JTextField(TEXTFIELD_LENGTH);
+        private JRadioButton m_explicitRadioButton = new JRadioButton(Globals
+                        .lang("Statically group entries by manual assignment"));
+        private JRadioButton m_keywordsRadioButton = new JRadioButton(
+                        Globals.lang("Dynamically group entries by searching a field for a keyword"));
+        private JRadioButton m_searchRadioButton = new JRadioButton(Globals
+                        .lang("Dynamically group entries by a free-form search expression"));
+        private JRadioButton m_independentButton = new JRadioButton( // JZTODO lyrics
+                        Globals.lang("Independent group: When selected, view only this group's entries"));
+        private JRadioButton m_intersectionButton = new JRadioButton( // JZTODO lyrics
+                        Globals.lang("Refine supergroup: When selected, view entries contained in both this group and its supergroup"));
+        private JRadioButton m_unionButton = new JRadioButton( // JZTODO lyrics
+                        Globals.lang("Include subgroups: When selected, view entries contained in this group or its subgroups"));
+        // for KeywordGroup
+        private JTextField m_kgSearchField = new JTextField(TEXTFIELD_LENGTH);
+        private FieldTextField m_kgSearchTerm = new FieldTextField("keywords", "",
+                        false);
+        private JCheckBox m_kgCaseSensitive = new JCheckBox(Globals
+                        .lang("Case sensitive"));
+        private JCheckBox m_kgRegExp = new JCheckBox(Globals
+                        .lang("Regular Expression"));
+        // for SearchGroup
+        private JTextField m_sgSearchExpression = new JTextField(TEXTFIELD_LENGTH);
+        private JCheckBox m_sgCaseSensitive = new JCheckBox(Globals
+                        .lang("Case sensitive"));
+        private JCheckBox m_sgRegExp = new JCheckBox(Globals
+                        .lang("Regular Expression"));
+        // for all types
+        private JButton m_ok = new JButton(Globals.lang("Ok"));
+        private JButton m_cancel = new JButton(Globals.lang("Cancel"));
+        private JPanel m_optionsPanel = new JPanel();
+        private JLabel m_description = new JLabel() {
+                public Dimension getPreferredSize() {
+                        Dimension d = super.getPreferredSize();
+                        // width must be smaller than width of enclosing JScrollPane
+                        // to prevent a horizontal scroll bar
+                        d.width = 1;
+                        return d;
+                }
+        };
+
+        private boolean m_okPressed = false;
+
+        private final JabRefFrame m_parent;
+
+        private final BasePanel m_basePanel;
+
+        private AbstractGroup m_resultingGroup;
+
+        private AbstractUndoableEdit m_undoAddPreviousEntires = null;
+
+        private final AbstractGroup m_editedGroup;
+
+        private CardLayout m_optionsLayout = new CardLayout();
+
+        /**
+         * Shows a group add/edit dialog.
+         *
+         * @param jabrefFrame
+         *            The parent frame.
+         * @param defaultField
+         *            The default grouping field.
+         * @param editedGroup
+         *            The group being edited, or null if a new group is to be
+         *            created.
+         */
+        public GroupDialog(JabRefFrame jabrefFrame, BasePanel basePanel,
+                        AbstractGroup editedGroup) {
+                super(jabrefFrame, Globals.lang("Edit group"), true);
+                m_basePanel = basePanel;
+                m_parent = jabrefFrame;
+                m_editedGroup = editedGroup;
+
+                // set default values (overwritten if editedGroup != null)
+                m_kgSearchField.setText(jabrefFrame.prefs().get("groupsDefaultField"));
+
+                // configure elements
+                ButtonGroup groupType = new ButtonGroup();
+                groupType.add(m_explicitRadioButton);
+                groupType.add(m_keywordsRadioButton);
+                groupType.add(m_searchRadioButton);
+                ButtonGroup groupHierarchy = new ButtonGroup();
+                groupHierarchy.add(m_independentButton);
+                groupHierarchy.add(m_intersectionButton);
+                groupHierarchy.add(m_unionButton);
+                m_description.setVerticalAlignment(JLabel.TOP);
+                getRootPane().setDefaultButton(m_ok);
+
+                // build individual layout cards for each group
+                m_optionsPanel.setLayout(m_optionsLayout);
+                // ... for explicit group
+                m_optionsPanel.add(new JPanel(), "" + INDEX_EXPLICITGROUP);
+                // ... for keyword group
+                FormLayout layoutKG = new FormLayout(
+                                "right:pref, 4dlu, fill:1dlu:grow, 2dlu, left:pref");
+                DefaultFormBuilder builderKG = new DefaultFormBuilder(layoutKG);
+                builderKG.append(Globals.lang("Field"));
+                builderKG.append(m_kgSearchField, 3);
+                builderKG.nextLine();
+                builderKG.append(Globals.lang("Keyword"));
+                builderKG.append(m_kgSearchTerm);
+                builderKG.append(new FieldContentSelector(m_parent, m_basePanel, this,
+                                m_kgSearchTerm, m_basePanel.metaData(), null, true, ", "));
+                builderKG.nextLine();
+                builderKG.append(m_kgCaseSensitive, 3);
+                builderKG.nextLine();
+                builderKG.append(m_kgRegExp, 3);
+                m_optionsPanel.add(builderKG.getPanel(), "" + INDEX_KEYWORDGROUP);
+                // ... for search group
+                FormLayout layoutSG = new FormLayout("right:pref, 4dlu, fill:1dlu:grow");
+                DefaultFormBuilder builderSG = new DefaultFormBuilder(layoutSG);
+                builderSG.append(Globals.lang("Search expression"));
+                builderSG.append(m_sgSearchExpression);
+                builderSG.nextLine();
+                builderSG.append(m_sgCaseSensitive, 3);
+                builderSG.nextLine();
+                builderSG.append(m_sgRegExp, 3);
+                m_optionsPanel.add(builderSG.getPanel(), "" + INDEX_SEARCHGROUP);
+                // ... for buttons panel
+                FormLayout layoutBP = new FormLayout("pref, 4dlu, pref", "p");
+                layoutBP.setColumnGroups(new int[][] { { 1, 3 } });
+                ButtonBarBuilder builderBP = new ButtonBarBuilder();
+                builderBP.addGlue();
+                builderBP.addButton(m_ok);
+                builderBP.addButton(m_cancel);
+                builderBP.addGlue();
+                builderBP.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+                // create layout
+                FormLayout layoutAll = new FormLayout(
+                                "right:pref, 4dlu, fill:600px, 4dlu, fill:pref",
+                                "p, 3dlu, p, 3dlu, p, 0dlu, p, 0dlu, p, 3dlu, p, 3dlu, p, "
+                                                + "0dlu, p, 0dlu, p, 3dlu, p, 3dlu, "
+                                                + "p, 3dlu, p, 3dlu, top:80dlu, 9dlu, p, 9dlu, p");
+
+                DefaultFormBuilder builderAll = new DefaultFormBuilder(layoutAll);
+                builderAll.setDefaultDialogBorder();
+                builderAll.appendSeparator(Globals.lang("General"));
+                builderAll.nextLine();
+                builderAll.nextLine();
+                builderAll.append(Globals.lang("Name"));
+                builderAll.append(m_name);
+                builderAll.nextLine();
+                builderAll.nextLine();
+                builderAll.append(m_explicitRadioButton, 5);
+                builderAll.nextLine();
+                builderAll.nextLine();
+                builderAll.append(m_keywordsRadioButton, 5);
+                builderAll.nextLine();
+                builderAll.nextLine();
+                builderAll.append(m_searchRadioButton, 5);
+                builderAll.nextLine();
+                builderAll.nextLine();
+                builderAll.appendSeparator(Globals.lang("Hierarchical context")); // JZTODO lyrics
+                builderAll.nextLine();
+                builderAll.nextLine();
+                builderAll.append(m_independentButton, 5);
+                builderAll.nextLine();
+                builderAll.nextLine();
+                builderAll.append(m_intersectionButton, 5);
+                builderAll.nextLine();
+                builderAll.nextLine();
+                builderAll.append(m_unionButton, 5);
+                builderAll.nextLine();
+                builderAll.nextLine();
+                builderAll.appendSeparator(Globals.lang("Options"));
+                builderAll.nextLine();
+                builderAll.nextLine();
+                builderAll.append(m_optionsPanel, 5);
+                builderAll.nextLine();
+                builderAll.nextLine();
+                builderAll.appendSeparator(Globals.lang("Description"));
+                builderAll.nextLine();
+                builderAll.nextLine();
+                JScrollPane sp = new JScrollPane(m_description,
+                                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+                                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED) {
+                        public Dimension getPreferredSize() {
+                                return getMaximumSize();
+                        }
+                };
+                builderAll.append(sp, 5);
+                builderAll.nextLine();
+                builderAll.nextLine();
+                builderAll.appendSeparator();
+                builderAll.nextLine();
+                builderAll.nextLine();
+                //CellConstraints cc = new CellConstraints();
+                //builderAll.add(builderBP.getPanel(), cc.xyw(builderAll.getColumn(),
+                //                builderAll.getRow(), 5, "center, fill"));
+
+                Container cp = getContentPane();
+                //cp.setLayout(new BoxLayout(cp, BoxLayout.Y_AXIS));
+                cp.add(builderAll.getPanel(), BorderLayout.CENTER);
+                cp.add(builderBP.getPanel(), BorderLayout.SOUTH);
+                pack();
+                setResizable(false);
+                updateComponents();
+                setLayoutForSelectedGroup();
+                Util.placeDialog(this, m_parent);
+
+                // add listeners
+                ItemListener radioButtonItemListener = new ItemListener() {
+                        public void itemStateChanged(ItemEvent e) {
+                                setLayoutForSelectedGroup();
+                                updateComponents();
+                        }
+                };
+                m_explicitRadioButton.addItemListener(radioButtonItemListener);
+                m_keywordsRadioButton.addItemListener(radioButtonItemListener);
+                m_searchRadioButton.addItemListener(radioButtonItemListener);
+
+                Action cancelAction = new AbstractAction() {
+                    public void actionPerformed(ActionEvent e) {
+                        dispose();
+                    }
+                };
+                m_cancel.addActionListener(cancelAction);
+                builderAll.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
+                        .put(Globals.prefs.getKey("Close dialog"), "close");
+                builderAll.getPanel().getActionMap().put("close", cancelAction);
+
+                m_ok.addActionListener(new ActionListener() {
+                        public void actionPerformed(ActionEvent e) {
+                                m_okPressed = true;
+                                if (m_explicitRadioButton.isSelected()) {
+                                        if (m_editedGroup instanceof ExplicitGroup) {
+                                                // keep assignments from possible previous ExplicitGroup
+                                                m_resultingGroup = m_editedGroup.deepCopy();
+                                                m_resultingGroup.setName(m_name.getText().trim());
+                                                m_resultingGroup.setHierarchicalContext(getContext());
+                                        } else {
+                                                m_resultingGroup = new ExplicitGroup(m_name.getText()
+                                                                .trim(), getContext());
+                                                if (m_editedGroup != null)
+                                                        addPreviousEntries();
+                                        }
+                                } else if (m_keywordsRadioButton.isSelected()) {
+                                        // regex is correct, otherwise OK would have been disabled
+                                        // therefore I don't catch anything here
+                                        m_resultingGroup = new KeywordGroup(
+                                                        m_name.getText().trim(), m_kgSearchField.getText()
+                                                                        .trim(), m_kgSearchTerm.getText().trim(),
+                                                        m_kgCaseSensitive.isSelected(), m_kgRegExp
+                                                                        .isSelected(), getContext());
+                                        if ((m_editedGroup instanceof ExplicitGroup || m_editedGroup instanceof SearchGroup)
+                                                        && m_resultingGroup.supportsAdd()) {
+                                                addPreviousEntries();
+                                        }
+                                } else if (m_searchRadioButton.isSelected()) {
+                                        try {
+                                                // regex is correct, otherwise OK would have been
+                                                // disabled
+                                                // therefore I don't catch anything here
+                                                m_resultingGroup = new SearchGroup(m_name.getText()
+                                                                .trim(), m_sgSearchExpression.getText().trim(),
+                                                                m_sgCaseSensitive.isSelected(), m_sgRegExp
+                                                                                .isSelected(), getContext());
+                                        } catch (Exception e1) {
+                                                // should never happen
+                                        }
+                                }
+                                dispose();
+                        }
+                });
+
+
+                CaretListener caretListener = new CaretListener() {
+                        public void caretUpdate(CaretEvent e) {
+                                updateComponents();
+                        }
+                };
+
+                ItemListener itemListener = new ItemListener() {
+                        public void itemStateChanged(ItemEvent e) {
+                                updateComponents();
+                        }
+                };
+
+                m_name.addCaretListener(caretListener);
+                m_kgSearchField.addCaretListener(caretListener);
+                m_kgSearchTerm.addCaretListener(caretListener);
+                m_kgCaseSensitive.addItemListener(itemListener);
+                m_kgRegExp.addItemListener(itemListener);
+                m_sgSearchExpression.addCaretListener(caretListener);
+                m_sgRegExp.addItemListener(itemListener);
+                m_sgCaseSensitive.addItemListener(itemListener);
+
+                // configure for current type
+                if (editedGroup instanceof KeywordGroup) {
+                        KeywordGroup group = (KeywordGroup) editedGroup;
+                        m_name.setText(group.getName());
+                        m_kgSearchField.setText(group.getSearchField());
+                        m_kgSearchTerm.setText(group.getSearchExpression());
+                        m_kgCaseSensitive.setSelected(group.isCaseSensitive());
+                        m_kgRegExp.setSelected(group.isRegExp());
+                        m_keywordsRadioButton.setSelected(true);
+                        setContext(editedGroup.getHierarchicalContext());
+                } else if (editedGroup instanceof SearchGroup) {
+                        SearchGroup group = (SearchGroup) editedGroup;
+                        m_name.setText(group.getName());
+                        m_sgSearchExpression.setText(group.getSearchExpression());
+                        m_sgCaseSensitive.setSelected(group.isCaseSensitive());
+                        m_sgRegExp.setSelected(group.isRegExp());
+                        m_searchRadioButton.setSelected(true);
+                        setContext(editedGroup.getHierarchicalContext());
+                } else if (editedGroup instanceof ExplicitGroup) {
+                        m_name.setText(editedGroup.getName());
+                        m_explicitRadioButton.setSelected(true);
+                        setContext(editedGroup.getHierarchicalContext());
+                } else { // creating new group -> defaults!
+                        m_explicitRadioButton.setSelected(true);
+                        setContext(AbstractGroup.INDEPENDENT);
+                }
+        }
+
+        public boolean okPressed() {
+                return m_okPressed;
+        }
+
+        public AbstractGroup getResultingGroup() {
+                return m_resultingGroup;
+        }
+
+        private void setLayoutForSelectedGroup() {
+                if (m_explicitRadioButton.isSelected())
+                        m_optionsLayout.show(m_optionsPanel, String
+                                        .valueOf(INDEX_EXPLICITGROUP));
+                else if (m_keywordsRadioButton.isSelected())
+                        m_optionsLayout.show(m_optionsPanel, String
+                                        .valueOf(INDEX_KEYWORDGROUP));
+                else if (m_searchRadioButton.isSelected())
+                        m_optionsLayout.show(m_optionsPanel, String
+                                        .valueOf(INDEX_SEARCHGROUP));
+        }
+
+        private void updateComponents() {
+                // all groups need a name
+                boolean okEnabled = m_name.getText().trim().length() > 0;
+                if (!okEnabled) {
+                        setDescription(Globals.lang("Please enter a name for the group."));
+                        m_ok.setEnabled(false);
+                        return;
+                }
+                String s1, s2;
+                if (m_keywordsRadioButton.isSelected()) {
+                        s1 = m_kgSearchField.getText().trim();
+                        okEnabled = okEnabled && s1.matches("\\w+");
+                        s2 = m_kgSearchTerm.getText().trim();
+                        okEnabled = okEnabled && s2.length() > 0;
+                        if (!okEnabled) {
+                                setDescription(Globals
+                                                .lang("Please enter the field to search (e.g. <b>keywords</b>) and the keyword to search it for (e.g. <b>electrical</b>)."));
+                        } else {
+                                if (m_kgRegExp.isSelected()) {
+                                        try {
+                                                Pattern.compile(s2);
+                                                setDescription(KeywordGroup.getDescriptionForPreview(s1, s2,
+                                                                m_kgCaseSensitive.isSelected(), m_kgRegExp
+                                                                                .isSelected()));
+                                        } catch (Exception e) {
+                                                okEnabled = false;
+                                                setDescription(formatRegExException(s2, e));
+                                        }
+                                } else {
+                                        setDescription(KeywordGroup.getDescriptionForPreview(s1, s2,
+                                                        m_kgCaseSensitive.isSelected(), m_kgRegExp
+                                                                        .isSelected()));
+                                }
+                        }
+                        setNameFontItalic(true);
+                } else if (m_searchRadioButton.isSelected()) {
+                        s1 = m_sgSearchExpression.getText().trim();
+                        okEnabled = okEnabled & s1.length() > 0;
+                        if (!okEnabled) {
+                                setDescription(Globals
+                                                .lang("Please enter a search term. For example, to search all fields for <b>Smith</b>, enter%c<p>"
+                                                                + "<tt>smith</tt><p>"
+                                                                + "To search the field <b>Author</b> for <b>Smith</b> and the field <b>Title</b> for <b>electrical</b>, enter%c<p>"
+                                                                + "<tt>author%esmith and title%eelectrical</tt>"));
+                        } else {
+                                AST ast = SearchExpressionParser
+                                                .checkSyntax(s1, m_sgCaseSensitive.isSelected(),
+                                                                m_sgRegExp.isSelected());
+                                setDescription(SearchGroup.getDescriptionForPreview(s1, ast,
+                                                m_sgCaseSensitive.isSelected(), m_sgRegExp.isSelected()));
+                                if (m_sgRegExp.isSelected()) {
+                                        try {
+                                                Pattern.compile(s1);
+                                        } catch (Exception e) {
+                                                okEnabled = false;
+                                                setDescription(formatRegExException(s1, e));
+                                        }
+                                }
+                        }
+                        setNameFontItalic(true);
+                } else if (m_explicitRadioButton.isSelected()) {
+                        setDescription(ExplicitGroup.getDescriptionForPreview());
+                        setNameFontItalic(false);
+                }
+                m_ok.setEnabled(okEnabled);
+        }
+
+        /**
+         * This is used when a group is converted and the new group supports
+         * explicit adding of entries: All entries that match the previous group are
+         * added to the new group.
+         */
+        private void addPreviousEntries() {
+                // JZTODO lyrics...
+                int i = JOptionPane.showConfirmDialog(m_basePanel.frame(), Globals
+                                .lang("Assign the original group's entries to this group?"),
+                                Globals.lang("Change of Grouping Method"),
+                                JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
+                if (i == JOptionPane.NO_OPTION)
+                        return;
+                Vector<BibtexEntry> vec = new Vector<BibtexEntry>();
+                for (BibtexEntry entry : m_basePanel.database().getEntries()){
+                        if (m_editedGroup.contains(entry))
+                        	vec.add(entry);
+                }
+                if (vec.size() > 0) {
+                        BibtexEntry[] entries = new BibtexEntry[vec.size()];
+                        vec.toArray(entries);
+                        if (!Util.warnAssignmentSideEffects(new AbstractGroup[]{m_resultingGroup},
+                                        entries, m_basePanel.getDatabase(), this))
+                                return;
+                        // the undo information for a conversion to an ExplicitGroup is
+                        // contained completely in the UndoableModifyGroup object.
+                        if (!(m_resultingGroup instanceof ExplicitGroup))
+                                m_undoAddPreviousEntires = m_resultingGroup.add(entries);
+                }
+        }
+
+        protected void setDescription(String description) {
+                m_description.setText("<html>" + description + "</html>");
+        }
+
+        protected String formatRegExException(String regExp, Exception e) {
+        String[] sa = e.getMessage().split("\\n");
+        StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < sa.length; ++i) {
+            if (i > 0)
+                sb.append("<br>");
+            sb.append(Util.quoteForHTML(sa[i]));
+        }
+                String s = Globals.lang(
+                                "The regular expression <b>%0</b> is invalid%c",
+                Util.quoteForHTML(regExp))
+                                + "<p><tt>"
+                                + sb.toString()
+                                + "</tt>";
+                if (!(e instanceof PatternSyntaxException))
+                        return s;
+                int lastNewline = s.lastIndexOf("<br>");
+                int hat = s.lastIndexOf("^");
+                if (lastNewline >= 0 && hat >= 0 && hat > lastNewline)
+                        return s.substring(0, lastNewline + 4)
+                                        + s.substring(lastNewline + 4).replaceAll(" ", " ");
+                return s;
+        }
+
+        /**
+         * Returns an undo object for adding the edited group's entries to the new
+         * group, or null if this did not occur.
+         */
+        public AbstractUndoableEdit getUndoForAddPreviousEntries() {
+                return m_undoAddPreviousEntires;
+        }
+
+        /** Sets the font of the name entry field. */
+        protected void setNameFontItalic(boolean italic) {
+                Font f = m_name.getFont();
+                if (f.isItalic() != italic) {
+                        f = f.deriveFont(italic ? Font.ITALIC : Font.PLAIN);
+                        m_name.setFont(f);
+                }
+        }
+
+        /**
+         * Returns the int representing the selected hierarchical group context.
+         */
+        protected int getContext() {
+                if (m_independentButton.isSelected())
+                        return AbstractGroup.INDEPENDENT;
+                if (m_intersectionButton.isSelected())
+                        return AbstractGroup.REFINING;
+                if (m_unionButton.isSelected())
+                        return AbstractGroup.INCLUDING;
+                return AbstractGroup.INDEPENDENT; // default
+        }
+
+        protected void setContext(int context) {
+                switch (context) {
+                case AbstractGroup.REFINING:
+                        m_intersectionButton.setSelected(true);
+                        return;
+                case AbstractGroup.INCLUDING:
+                        m_unionButton.setSelected(true);
+                        return;
+                case AbstractGroup.INDEPENDENT:
+                default:
+                        m_independentButton.setSelected(true);
+                        return;
+                }
+        }
+
+}
diff --git a/src/java/net/sf/jabref/groups/GroupMatcher.java b/src/java/net/sf/jabref/groups/GroupMatcher.java
index e1b81c4..3e09038 100644
--- a/src/java/net/sf/jabref/groups/GroupMatcher.java
+++ b/src/java/net/sf/jabref/groups/GroupMatcher.java
@@ -1,32 +1,32 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import ca.odell.glazedlists.matchers.Matcher;
-import net.sf.jabref.BibtexEntry;
-
-/**
- * Matcher for filtering or sorting the table according to whether entries
- * are tagged as group matches.
- */
-public class GroupMatcher implements Matcher<BibtexEntry> {
-
-    public static GroupMatcher INSTANCE = new GroupMatcher();
-
-    public boolean matches(BibtexEntry entry) {
-        return entry.isGroupHit();
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import ca.odell.glazedlists.matchers.Matcher;
+import net.sf.jabref.BibtexEntry;
+
+/**
+ * Matcher for filtering or sorting the table according to whether entries
+ * are tagged as group matches.
+ */
+public class GroupMatcher implements Matcher<BibtexEntry> {
+
+    public static GroupMatcher INSTANCE = new GroupMatcher();
+
+    public boolean matches(BibtexEntry entry) {
+        return entry.isGroupHit();
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/GroupSelector.java b/src/java/net/sf/jabref/groups/GroupSelector.java
index d375739..d864a1b 100644
--- a/src/java/net/sf/jabref/groups/GroupSelector.java
+++ b/src/java/net/sf/jabref/groups/GroupSelector.java
@@ -1,1539 +1,1539 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JMenu;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JRadioButtonMenuItem;
-import javax.swing.JScrollPane;
-import javax.swing.KeyStroke;
-import javax.swing.border.Border;
-import javax.swing.border.TitledBorder;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.PopupMenuEvent;
-import javax.swing.event.PopupMenuListener;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreePath;
-import javax.swing.undo.AbstractUndoableEdit;
-import javax.swing.undo.CompoundEdit;
-
-import net.sf.jabref.AbstractWorker;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.ErrorMessageDisplay;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.HelpAction;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.SearchRule;
-import net.sf.jabref.SearchRuleSet;
-import net.sf.jabref.SidePaneComponent;
-import net.sf.jabref.SidePaneManager;
-import net.sf.jabref.undo.NamedCompound;
-
-public class GroupSelector extends SidePaneComponent implements
-        TreeSelectionListener, ActionListener, ErrorMessageDisplay {
-
-    JButton newButton = new JButton(GUIGlobals.getImage("new")),
-            helpButton = new JButton(
-                    GUIGlobals.getImage("help")),
-            refresh = new JButton(
-                    GUIGlobals.getImage("refresh")),
-            autoGroup = new JButton(GUIGlobals.getImage("autoGroup")),
-            openset = new JButton(Globals.lang("Settings"));
-    Color bgColor = Color.white;
-    GroupsTree groupsTree;
-    DefaultTreeModel groupsTreeModel;
-    GroupTreeNode groupsRoot;
-    JScrollPane sp;
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-    JabRefFrame frame;
-    String searchField;
-    JPopupMenu groupsContextMenu = new JPopupMenu();
-    JPopupMenu settings = new JPopupMenu();
-    private JRadioButtonMenuItem hideNonHits, grayOut;
-    JRadioButtonMenuItem andCb = new JRadioButtonMenuItem(Globals.lang("Intersection"), true);
-    JRadioButtonMenuItem orCb = new JRadioButtonMenuItem(Globals.lang("Union"),
-            false);
-    JRadioButtonMenuItem floatCb = new JRadioButtonMenuItem(Globals.lang("Float"), true);
-    JRadioButtonMenuItem highlCb = new JRadioButtonMenuItem(Globals.lang("Highlight"), false);
-    JCheckBoxMenuItem invCb = new JCheckBoxMenuItem(Globals.lang("Inverted"),
-            false), select = new JCheckBoxMenuItem(Globals.lang("Select matches"), false);
-    JCheckBoxMenuItem showOverlappingGroups = new JCheckBoxMenuItem(
-                    Globals.lang("Highlight overlapping groups")); // JZTODO lyrics
-	JCheckBoxMenuItem autoAssignGroup = new JCheckBoxMenuItem(
-			Globals.lang("Automatically assign new entry to selected groups")); 
-    ButtonGroup bgr = new ButtonGroup();
-    ButtonGroup visMode = new ButtonGroup();
-    ButtonGroup nonHits = new ButtonGroup();
-    JButton expand = new JButton(GUIGlobals.getImage("down")),
-            reduce = new JButton(GUIGlobals.getImage("up"));
-    JCheckBoxMenuItem editModeCb = new JCheckBoxMenuItem(Globals.lang("Edit Group Membership"), false);
-    Border editModeBorder = BorderFactory.createTitledBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.RED),
-            "Edit mode", TitledBorder.RIGHT, TitledBorder.TOP, Font.getFont("Default"), Color.RED);
-    boolean editModeIndicator;
-    SidePaneManager manager;
-
-     /**
-     * The first element for each group defines which field to use for the
-     * quicksearch. The next two define the name and regexp for the group.
-     *
-     *
-     */
-    public GroupSelector(JabRefFrame frame, SidePaneManager manager) {
-        super(manager, GUIGlobals.getIconUrl("toggleGroups"), Globals.lang("Groups"));
-        this.groupsRoot = new GroupTreeNode(new AllEntriesGroup());
-
-        this.manager = manager;
-        this.frame = frame;
-        hideNonHits = new JRadioButtonMenuItem(Globals.lang("Hide non-hits"),
-                !Globals.prefs.getBoolean("grayOutNonHits"));
-        grayOut = new JRadioButtonMenuItem(Globals.lang("Gray out non-hits"),
-                Globals.prefs.getBoolean("grayOutNonHits"));
-        nonHits.add(hideNonHits);
-        nonHits.add(grayOut);
-        floatCb.addChangeListener(new ChangeListener() {
-
-            public void stateChanged(ChangeEvent event) {
-                Globals.prefs.putBoolean("groupFloatSelections", floatCb.isSelected());
-            }
-        });
-        andCb.addChangeListener(new ChangeListener() {
-
-            public void stateChanged(ChangeEvent event) {
-                Globals.prefs.putBoolean("groupIntersectSelections", andCb.isSelected());
-            }
-        });
-        invCb.addChangeListener(new ChangeListener() {
-
-            public void stateChanged(ChangeEvent event) {
-                Globals.prefs.putBoolean("groupInvertSelections", invCb.isSelected());
-            }
-        });
-        showOverlappingGroups.addChangeListener(new ChangeListener() {
-
-            public void stateChanged(ChangeEvent event) {
-                Globals.prefs.putBoolean("groupShowOverlapping",
-                                showOverlappingGroups.isSelected());
-                if (!showOverlappingGroups.isSelected()) {
-                    groupsTree.setHighlight2Cells(null);
-            }
-            }
-        });
-
-        select.addChangeListener(new ChangeListener() {
-
-            public void stateChanged(ChangeEvent event) {
-                Globals.prefs.putBoolean("groupSelectMatches", select.isSelected());
-            }
-        });
-        grayOut.addChangeListener(new ChangeListener() {
-
-            public void stateChanged(ChangeEvent event) {
-                Globals.prefs.putBoolean("grayOutNonHits", grayOut.isSelected());
-            }
-        });
-
-        if (Globals.prefs.getBoolean("groupFloatSelections")) {
-
-            floatCb.setSelected(true);
-            highlCb.setSelected(false);
-        } else {
-            highlCb.setSelected(true);
-            floatCb.setSelected(false);
-        }
-        if (Globals.prefs.getBoolean("groupIntersectSelections")) {
-            andCb.setSelected(true);
-            orCb.setSelected(false);
-        } else {
-            orCb.setSelected(true);
-            andCb.setSelected(false);
-        }
-
-        
-        autoAssignGroup.addChangeListener(new ChangeListener() {
-        	public void stateChanged(ChangeEvent event) {
-                Globals.prefs.putBoolean("autoAssignGroup", autoAssignGroup.isSelected());
-            }
-        });
-        
-        invCb.setSelected(Globals.prefs.getBoolean("groupInvertSelections"));
-        showOverlappingGroups.setSelected(Globals.prefs.getBoolean("groupShowOverlapping"));
-        select.setSelected(Globals.prefs.getBoolean("groupSelectMatches"));
-        editModeIndicator = Globals.prefs.getBoolean(JabRefPreferences.EDIT_GROUP_MEMBERSHIP_MODE);
-        editModeCb.setSelected(editModeIndicator);
-        autoAssignGroup.setSelected(Globals.prefs.getBoolean("autoAssignGroup"));
-
-        openset.setMargin(new Insets(0, 0, 0, 0));
-        settings.add(andCb);
-        settings.add(orCb);
-        settings.addSeparator();
-        settings.add(invCb);
-        settings.addSeparator();
-        settings.add(select);
-        settings.addSeparator();
-        settings.add(editModeCb);
-        settings.addSeparator();
-        settings.add(grayOut);
-        settings.add(hideNonHits);
-        settings.addSeparator();
-        settings.add(showOverlappingGroups);
-        settings.addSeparator();
-        settings.add(autoAssignGroup);
-        // settings.add(moreRow);
-        // settings.add(lessRow);
-        openset.addActionListener(new ActionListener() {
-
-            public void actionPerformed(ActionEvent e) {
-                if (settings.isVisible()) {
-                    // System.out.println("oee");
-                    // settings.setVisible(false);
-                } else {
-                    JButton src = (JButton) e.getSource();
-                    autoAssignGroup.setSelected(Globals.prefs.getBoolean("autoAssignGroup")); 
-                    settings.show(src, 0, openset.getHeight());
-                }
-            }
-        });
-        expand.addActionListener(new ActionListener() {
-
-            public void actionPerformed(ActionEvent e) {
-                int i = Globals.prefs.getInt("groupsVisibleRows") + 1;
-                groupsTree.setVisibleRowCount(i);
-                groupsTree.revalidate();
-                groupsTree.repaint();
-                GroupSelector.this.revalidate();
-                GroupSelector.this.repaint();
-                Globals.prefs.putInt("groupsVisibleRows", i);
-                Globals.logger(Double.toString(GroupSelector.this.getHeight()));
-                Globals.logger(Double.toString(GroupSelector.this.getPreferredSize().getHeight()));
-                
-            }
-        });
-        reduce.addActionListener(new ActionListener() {
-
-            public void actionPerformed(ActionEvent e) {
-                int i = Globals.prefs.getInt("groupsVisibleRows") - 1;
-                if (i < 1) {
-                    i = 1;
-                }
-                groupsTree.setVisibleRowCount(i);
-                groupsTree.revalidate();
-                groupsTree.repaint();
-                GroupSelector.this.revalidate();
-                // _panel.sidePaneManager.revalidate();
-                GroupSelector.this.repaint();
-                Globals.prefs.putInt("groupsVisibleRows", i);
-            }
-        });
-
-        editModeCb.addActionListener(new ActionListener() {
-
-            public void actionPerformed(ActionEvent e) {
-                editModeIndicator = editModeCb.getState();
-                updateBorder(editModeIndicator);
-                Globals.prefs.putBoolean(JabRefPreferences.EDIT_GROUP_MEMBERSHIP_MODE, editModeIndicator);
-            }
-        });
-
-        int butSize = newButton.getIcon().getIconHeight() + 5;
-        Dimension butDim = new Dimension(butSize, butSize);
-        //Dimension butDimSmall = new Dimension(20, 20);
-
-        newButton.setPreferredSize(butDim);
-        newButton.setMinimumSize(butDim);
-        refresh.setPreferredSize(butDim);
-        refresh.setMinimumSize(butDim);
-        helpButton.setPreferredSize(butDim);
-        helpButton.setMinimumSize(butDim);
-        autoGroup.setPreferredSize(butDim);
-        autoGroup.setMinimumSize(butDim);
-        openset.setPreferredSize(butDim);
-        openset.setMinimumSize(butDim);
-        expand.setPreferredSize(butDim);
-        expand.setMinimumSize(butDim);
-        reduce.setPreferredSize(butDim);
-        reduce.setMinimumSize(butDim);
-        Insets butIns = new Insets(0, 0, 0, 0);
-        helpButton.setMargin(butIns);
-        reduce.setMargin(butIns);
-        expand.setMargin(butIns);
-        openset.setMargin(butIns);
-        newButton.addActionListener(this);
-        refresh.addActionListener(this);
-        andCb.addActionListener(this);
-        orCb.addActionListener(this);
-        invCb.addActionListener(this);
-        showOverlappingGroups.addActionListener(this);
-        autoGroup.addActionListener(this);
-        floatCb.addActionListener(this);
-        highlCb.addActionListener(this);
-        select.addActionListener(this);
-        hideNonHits.addActionListener(this);
-        grayOut.addActionListener(this);
-        newButton.setToolTipText(Globals.lang("New group"));
-        refresh.setToolTipText(Globals.lang("Refresh view"));
-        andCb.setToolTipText(Globals.lang("Display only entries belonging to all selected"
-                        + " groups."));
-        orCb.setToolTipText(Globals.lang("Display all entries belonging to one or more "
-                        + "of the selected groups."));
-        autoGroup.setToolTipText(Globals.lang("Automatically create groups for database."));
-        invCb.setToolTipText(Globals.lang("Show entries *not* in group selection"));
-        showOverlappingGroups.setToolTipText( // JZTODO lyrics
-                        "Highlight groups that contain entries contained in any currently selected group");
-        floatCb.setToolTipText(Globals.lang("Move entries in group selection to the top"));
-        highlCb.setToolTipText(Globals.lang("Gray out entries not in group selection"));
-        select.setToolTipText(Globals.lang("Select entries in group selection"));
-        expand.setToolTipText(Globals.lang("Show one more row"));
-        reduce.setToolTipText(Globals.lang("Show one less rows"));
-        editModeCb.setToolTipText(Globals.lang("Click group to toggle membership of selected entries"));
-        bgr.add(andCb);
-        bgr.add(orCb);
-        visMode.add(floatCb);
-        visMode.add(highlCb);
-
-        JPanel main = new JPanel();
-        main.setLayout(gbl);
-
-        con.fill = GridBagConstraints.BOTH;
-        //con.insets = new Insets(0, 0, 2, 0);
-        con.weightx = 1;
-        con.gridwidth = 1;
-        con.gridx = 0;
-        con.gridy = 0;
-        //con.insets = new Insets(1, 1, 1, 1);
-        gbl.setConstraints(newButton, con);
-        main.add(newButton);
-        con.gridx = 1;
-        gbl.setConstraints(refresh, con);
-        main.add(refresh);
-        con.gridx = 2;
-        gbl.setConstraints(autoGroup, con);
-        main.add(autoGroup);
-        con.gridx = 3;
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        HelpAction helpAction = new HelpAction(frame.helpDiag,
-                GUIGlobals.groupsHelp, "Help on groups");
-        helpButton.addActionListener(helpAction);
-        helpButton.setToolTipText(Globals.lang("Help on groups"));
-        gbl.setConstraints(helpButton, con);
-        main.add(helpButton);
-
-        // header.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
-        // helpButton.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
-        groupsTree = new GroupsTree(this);
-        groupsTree.addTreeSelectionListener(this);
-        groupsTree.setModel(groupsTreeModel = new DefaultTreeModel(groupsRoot));
-        sp = new JScrollPane(groupsTree,
-                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-        revalidateGroups();
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        con.weighty = 1;
-        con.gridx = 0;
-        con.gridwidth = 4;
-        con.gridy = 1;
-        gbl.setConstraints(sp, con);
-        main.add(sp);
-
-        JPanel pan = new JPanel();
-        GridBagLayout gb = new GridBagLayout();
-        con.weighty = 0;
-        gbl.setConstraints(pan, con);
-        pan.setLayout(gb);
-        con.insets = new Insets(0, 0, 0, 0);
-        con.gridx = 0;
-        con.gridy = 0;
-        con.weightx = 1;
-        con.gridwidth = 4;
-        con.fill = GridBagConstraints.HORIZONTAL;
-        gb.setConstraints(openset, con);
-        pan.add(openset);
-
-        con.gridwidth = 1;
-        con.gridx = 4;
-        con.gridy = 0;
-        gb.setConstraints(expand, con);
-        pan.add(expand);
-
-        con.gridx = 5;
-        gb.setConstraints(reduce, con);
-        pan.add(reduce);
-
-        con.gridwidth = 6;
-        con.gridy = 1;
-        con.gridx = 0;
-        con.fill = GridBagConstraints.HORIZONTAL;
-
-        con.gridy = 2;
-        con.gridx = 0;
-        con.gridwidth = 4;
-        gbl.setConstraints(pan, con);
-        main.add(pan);
-        main.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
-        add(main, BorderLayout.CENTER);
-        updateBorder(editModeIndicator);
-        definePopup();
-        moveNodeUpAction.putValue(Action.ACCELERATOR_KEY,
-                KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.CTRL_MASK));
-        moveNodeDownAction.putValue(Action.ACCELERATOR_KEY,
-                KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.CTRL_MASK));
-        moveNodeLeftAction.putValue(Action.ACCELERATOR_KEY,
-                KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.CTRL_MASK));
-        moveNodeRightAction.putValue(Action.ACCELERATOR_KEY,
-                KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.CTRL_MASK));
-}
-
-    private void definePopup() {
-        // These key bindings are just to have the shortcuts displayed
-        // in the popup menu. The actual keystroke processing is in
-        // BasePanel (entryTable.addKeyListener(...)).
-        groupsContextMenu.add(editGroupPopupAction);
-        groupsContextMenu.add(addGroupPopupAction);
-        groupsContextMenu.add(addSubgroupPopupAction);
-        groupsContextMenu.addSeparator();
-        groupsContextMenu.add(removeGroupAndSubgroupsPopupAction);
-        groupsContextMenu.add(removeGroupKeepSubgroupsPopupAction);
-        groupsContextMenu.add(removeSubgroupsPopupAction);
-        groupsContextMenu.addSeparator();
-        groupsContextMenu.add(expandSubtreePopupAction);
-        groupsContextMenu.add(collapseSubtreePopupAction);
-        groupsContextMenu.addSeparator();
-        groupsContextMenu.add(moveSubmenu);
-        sortSubmenu.add(sortDirectSubgroupsPopupAction);
-        sortSubmenu.add(sortAllSubgroupsPopupAction);
-        groupsContextMenu.add(sortSubmenu);
-        moveSubmenu.add(moveNodeUpPopupAction);
-        moveSubmenu.add(moveNodeDownPopupAction);
-        moveSubmenu.add(moveNodeLeftPopupAction);
-        moveSubmenu.add(moveNodeRightPopupAction);
-        groupsContextMenu.addSeparator();
-        groupsContextMenu.add(addToGroup);
-        groupsContextMenu.add(moveToGroup);
-        groupsContextMenu.add(removeFromGroup);
-        groupsTree.addMouseListener(new MouseAdapter() {
-
-            public void mousePressed(MouseEvent e) {
-                if (e.isPopupTrigger()) {
-                    showPopup(e);
-            }
-            }
-
-            public void mouseReleased(MouseEvent e) {
-                if (e.isPopupTrigger()) {
-                    showPopup(e);
-            }
-            }
-
-            public void mouseClicked(MouseEvent e) {
-                TreePath path = groupsTree.getPathForLocation(e.getPoint().x, e.getPoint().y);
-                if (path == null) {
-                    return;
-                }
-                GroupTreeNode node = (GroupTreeNode) path.getLastPathComponent();
-                // the root node is "AllEntries" and cannot be edited
-                if (node.isRoot()) {
-                    return;
-                }
-                if (e.getClickCount() == 2
-                        && e.getButton() == MouseEvent.BUTTON1) { // edit
-                    editGroupAction.actionPerformed(null); // dummy event
-                } else if (e.getClickCount() == 1
-                        && e.getButton() == MouseEvent.BUTTON1) {
-                    annotationEvent(node);
-                }
-            }
-        });
-        // be sure to remove a possible border highlight when the popup menu
-        // disappears
-        groupsContextMenu.addPopupMenuListener(new PopupMenuListener() {
-
-            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-                // nothing to do
-            }
-
-            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
-                groupsTree.setHighlightBorderCell(null);
-            }
-
-            public void popupMenuCanceled(PopupMenuEvent e) {
-                groupsTree.setHighlightBorderCell(null);
-            }
-        });
-    }
-
-    private void showPopup(MouseEvent e) {
-        final TreePath path = groupsTree.getPathForLocation(e.getPoint().x, e.getPoint().y);
-        addGroupPopupAction.setEnabled(true);
-        addSubgroupPopupAction.setEnabled(path != null);
-        editGroupPopupAction.setEnabled(path != null);
-        removeGroupAndSubgroupsPopupAction.setEnabled(path != null);
-        removeGroupKeepSubgroupsPopupAction.setEnabled(path != null);
-        moveSubmenu.setEnabled(path != null);
-        expandSubtreePopupAction.setEnabled(path != null);
-        collapseSubtreePopupAction.setEnabled(path != null);
-        removeSubgroupsPopupAction.setEnabled(path != null);
-        sortSubmenu.setEnabled(path != null);
-        addToGroup.setEnabled(false);
-        moveToGroup.setEnabled(false);
-        removeFromGroup.setEnabled(false);
-        if (path != null) { // some path dependent enabling/disabling
-            GroupTreeNode node = (GroupTreeNode) path.getLastPathComponent();
-            editGroupPopupAction.setNode(node);
-            addSubgroupPopupAction.setNode(node);
-            removeGroupAndSubgroupsPopupAction.setNode(node);
-            removeSubgroupsPopupAction.setNode(node);
-            removeGroupKeepSubgroupsPopupAction.setNode(node);
-            expandSubtreePopupAction.setNode(node);
-            collapseSubtreePopupAction.setNode(node);
-            sortDirectSubgroupsPopupAction.setNode(node);
-            sortAllSubgroupsPopupAction.setNode(node);
-            groupsTree.setHighlightBorderCell(node);
-            AbstractGroup group = node.getGroup();
-            if (group instanceof AllEntriesGroup) {
-                editGroupPopupAction.setEnabled(false);
-                addGroupPopupAction.setEnabled(false);
-                removeGroupAndSubgroupsPopupAction.setEnabled(false);
-                removeGroupKeepSubgroupsPopupAction.setEnabled(false);
-            } else {
-                editGroupPopupAction.setEnabled(true);
-                addGroupPopupAction.setEnabled(true);
-                addGroupPopupAction.setNode(node);
-                removeGroupAndSubgroupsPopupAction.setEnabled(true);
-                removeGroupKeepSubgroupsPopupAction.setEnabled(true);
-            }
-            expandSubtreePopupAction.setEnabled(groupsTree.isCollapsed(path)
-                    || groupsTree.hasCollapsedDescendant(path));
-            collapseSubtreePopupAction.setEnabled(groupsTree.isExpanded(path)
-                    || groupsTree.hasExpandedDescendant(path));
-            sortSubmenu.setEnabled(!node.isLeaf());
-            removeSubgroupsPopupAction.setEnabled(!node.isLeaf());
-            moveNodeUpPopupAction.setEnabled(node.canMoveUp());
-            moveNodeDownPopupAction.setEnabled(node.canMoveDown());
-            moveNodeLeftPopupAction.setEnabled(node.canMoveLeft());
-            moveNodeRightPopupAction.setEnabled(node.canMoveRight());
-            moveSubmenu.setEnabled(moveNodeUpPopupAction.isEnabled()
-                    || moveNodeDownPopupAction.isEnabled()
-                    || moveNodeLeftPopupAction.isEnabled()
-                    || moveNodeRightPopupAction.isEnabled());
-            moveNodeUpPopupAction.setNode(node);
-            moveNodeDownPopupAction.setNode(node);
-            moveNodeLeftPopupAction.setNode(node);
-            moveNodeRightPopupAction.setNode(node);
-            // add/remove entries to/from group
-            BibtexEntry[] selection = frame.basePanel().getSelectedEntries();
-            if (selection.length > 0) {
-                if (node.getGroup().supportsAdd() && !node.getGroup().
-                        containsAll(selection)) {
-                    addToGroup.setNode(node);
-                    addToGroup.setBasePanel(panel);
-                    addToGroup.setEnabled(true);
-                    moveToGroup.setNode(node);
-                    moveToGroup.setBasePanel(panel);
-                    moveToGroup.setEnabled(true);
-                }
-                if (node.getGroup().supportsRemove() && node.getGroup().
-                        containsAny(selection)) {
-                    removeFromGroup.setNode(node);
-                    removeFromGroup.setBasePanel(panel);
-                    removeFromGroup.setEnabled(true);
-                }
-            }
-        } else {
-            editGroupPopupAction.setNode(null);
-            addGroupPopupAction.setNode(null);
-            addSubgroupPopupAction.setNode(null);
-            removeGroupAndSubgroupsPopupAction.setNode(null);
-            removeSubgroupsPopupAction.setNode(null);
-            removeGroupKeepSubgroupsPopupAction.setNode(null);
-            moveNodeUpPopupAction.setNode(null);
-            moveNodeDownPopupAction.setNode(null);
-            moveNodeLeftPopupAction.setNode(null);
-            moveNodeRightPopupAction.setNode(null);
-            expandSubtreePopupAction.setNode(null);
-            collapseSubtreePopupAction.setNode(null);
-            sortDirectSubgroupsPopupAction.setNode(null);
-            sortAllSubgroupsPopupAction.setNode(null);
-        }
-        groupsContextMenu.show(groupsTree, e.getPoint().x, e.getPoint().y);
-    }
-
-    private void updateBorder(boolean editMode) {
-        if (editMode) {
-            groupsTree.setBorder(editModeBorder);
-            this.setTitle("<html><font color='red'>Groups Edit mode</font></html>");
-        } else {
-            groupsTree.setBorder(null);
-            this.setTitle(Globals.lang("Groups"));
-        }
-        groupsTree.revalidate();
-        groupsTree.repaint();
-    }
-    
-    /**
-     * 
-     * @param deletion != addition
-     */
-    private void updateGroupContent(GroupTreeNode node) {
-        BibtexEntry[] entries = panel.getSelectedEntries();
-        AbstractGroup group = node.getGroup();
-        AbstractUndoableEdit undoRemove = null;
-        AbstractUndoableEdit undoAdd = null;
-                
-        // Sort entries into current members and non-members of the group
-        // Current members will be removed
-        // Current non-members will be added
-        ArrayList<BibtexEntry> toRemove = new ArrayList<BibtexEntry>(entries.length);
-        ArrayList<BibtexEntry> toAdd = new ArrayList<BibtexEntry>(entries.length);
-        
-        for (BibtexEntry entry : entries) {
-            // Sort according to current state of the entries
-            if (group.contains(entry)) {
-                Globals.logger("remove " + entry.toString());
-                toRemove.add(entry);
-            }
-            else {
-                Globals.logger("add " + entry.toString());
-                toAdd.add(entry);
-            }
-        }
-        
-        // If there are entries to remove
-        if (!toRemove.isEmpty())
-            undoRemove = node.removeFromGroup(toRemove.toArray(new BibtexEntry[0]));
-        // If there are entries to add
-        if (!toAdd.isEmpty())
-            undoAdd = node.addToGroup(toAdd.toArray(new BibtexEntry[0]));
-        
-        // Remember undo information
-        if (undoRemove != null) {
-            if (undoAdd != null) {
-                // we removed and added entries
-                undoRemove.addEdit(undoAdd);
-            }
-            panel.undoManager.addEdit(undoRemove);
-        } else if (undoAdd != null) {
-            panel.undoManager.addEdit(undoAdd);
-        }
-    }
-
-    /**
-     * 
-     * @param deletion != addition
-     */
-    public void updateGroupContentIfEnabled(boolean deletion) {
-        if ((groupsTree == null) || (groupsTree.getSelectionCount() == 0)) {
-            return;
-        }
-        if (!this.editModeIndicator) {
-            // add button selected
-            return;
-        }
-        GroupTreeNode curNode = (GroupTreeNode) ((groupsTree.getSelectionPaths())[0].getLastPathComponent());
-        updateGroupContent(curNode);
-    }
-
-    private void annotationEvent(GroupTreeNode node) {
-        Globals.logger("annotationEvent");
-        Globals.logger(node.toString());
-        if (editModeIndicator) {
-            updateGroupContent(node);
-            panel.markBaseChanged();
-            panel.updateEntryEditorIfShowing();
-            updateSelections();
-        }
-    }
-
-//    private void annotationEvent() {
-//        this.annotationEvent((GroupTreeNode) ((groupsTree.getSelectionPaths())[0].getLastPathComponent()));
-//    }
-
-    public void valueChanged(TreeSelectionEvent e) {
-        if (panel == null) // sorry, we're closed!
-        {
-            return; // ignore this event
-        }
-        final TreePath[] selection = groupsTree.getSelectionPaths();
-        if (selection == null
-                || selection.length == 0
-                || (selection.length == 1 && ((GroupTreeNode) selection[0].getLastPathComponent()).getGroup() instanceof AllEntriesGroup)) {
-            panel.stopShowingGroup();
-            panel.mainTable.stopShowingFloatGrouping();
-            if (showOverlappingGroups.isSelected()) {
-                groupsTree.setHighlight2Cells(null);
-            }
-            frame.output(Globals.lang("Displaying no groups") + ".");
-            return;
-        }
-
-        if (!editModeIndicator) {
-//            annotationEvent();
-//        } else {
-            updateSelections();
-        }
-
-    }
-
-    private void updateSelections() {
-        final AndOrSearchRuleSet searchRules = new AndOrSearchRuleSet(andCb.isSelected(), invCb.isSelected());
-        TreePath[] selection = groupsTree.getSelectionPaths();
-
-        for (int i = 0; i < selection.length; ++i) {
-            searchRules.addRule(((GroupTreeNode) selection[i].getLastPathComponent()).getSearchRule());
-                }
-        Hashtable<String, String> searchOptions = new Hashtable<String, String>();
-        searchOptions.put("option", "dummy");
-        GroupingWorker worker = new GroupingWorker(searchRules, searchOptions);
-        worker.getWorker().run();
-        worker.getCallBack().update();
-        /*panel.setGroupMatcher(new SearchMatcher(searchRules, searchOptions));
-        DatabaseSearch search = new DatabaseSearch(this, searchOptions, searchRules,
-                panel, Globals.GROUPSEARCH, floatCb.isSelected(), Globals.prefs
-                        .getBoolean("grayOutNonHits"),
-                //true,
-                select.isSelected());
-        search.start();*/
-    }
-
-    class GroupingWorker extends AbstractWorker {
-
-        private SearchRuleSet rules;
-        private Hashtable<String, String> searchTerm;
-        private ArrayList<BibtexEntry> matches = new ArrayList<BibtexEntry>();
-        private boolean showOverlappingGroupsP;
-        int hits = 0;
-
-        public GroupingWorker(SearchRuleSet rules, Hashtable<String, String> searchTerm) {
-            this.rules = rules;
-            this.searchTerm = searchTerm;
-            showOverlappingGroupsP = showOverlappingGroups.isSelected();
-        }
-
-        public void run() {
-            for (BibtexEntry entry : panel.getDatabase().getEntries()) {
-                boolean hit = rules.applyRule(searchTerm, entry) > 0;
-                entry.setGroupHit(hit);
-                if (hit) {
-                    hits++;
-                    if (showOverlappingGroupsP) {
-                        matches.add(entry);
-                }
-            }
-        }
-        }
-
-        public void update() {
-            // Show the result in the chosen way:
-            if (hideNonHits.isSelected()) {
-                panel.mainTable.stopShowingFloatGrouping(); // Turn off shading, if active.
-                panel.setGroupMatcher(GroupMatcher.INSTANCE); // Turn on filtering.
-
-            } else if (grayOut.isSelected()) {
-                panel.stopShowingGroup(); // Turn off filtering, if active.
-                panel.mainTable.showFloatGrouping(GroupMatcher.INSTANCE); // Turn on shading.
-            }
-
-            if (showOverlappingGroupsP) {
-                                showOverlappingGroups(matches);
-        }
-            frame.output(Globals.lang("Updated group selection") + ".");
-        }
-    }
-
-    /**
-     * Revalidate the groups tree (e.g. after the data stored in the model has
-     * been changed) and set the specified selection and expansion state.
-     * @param node If this is non-null, the view is scrolled to make it visible.
-     */
-    public void revalidateGroups(TreePath[] selectionPaths,
-            Enumeration<TreePath> expandedNodes) {
-            revalidateGroups(selectionPaths, expandedNodes, null);
-    }
-
-    /**
-     * Revalidate the groups tree (e.g. after the data stored in the model has
-     * been changed) and set the specified selection and expansion state.
-     * @param node If this is non-null, the view is scrolled to make it visible.
-     */
-    public void revalidateGroups(TreePath[] selectionPaths,
-            Enumeration<TreePath> expandedNodes, GroupTreeNode node) {
-        groupsTreeModel.reload();
-        groupsTree.clearSelection();
-        if (selectionPaths != null) {
-            groupsTree.setSelectionPaths(selectionPaths);
-        }
-        // tree is completely collapsed here
-        if (expandedNodes != null) {
-            while (expandedNodes.hasMoreElements()) {
-                groupsTree.expandPath(expandedNodes.nextElement());
-        }
-        }
-        groupsTree.revalidate();
-        if (node != null) {
-                groupsTree.scrollPathToVisible(new TreePath(node.getPath()));
-        }
-    }
-
-    /**
-     * Revalidate the groups tree (e.g. after the data stored in the model has
-     * been changed) and maintain the current selection and expansion state. */
-    public void revalidateGroups() {
-        revalidateGroups(null);
-    }
-
-    /**
-     * Revalidate the groups tree (e.g. after the data stored in the model has
-     * been changed) and maintain the current selection and expansion state.
-     * @param node If this is non-null, the view is scrolled to make it visible.
-     */
-    public void revalidateGroups(GroupTreeNode node) {
-        revalidateGroups(groupsTree.getSelectionPaths(), getExpandedPaths(), node);
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        if (e.getSource() == refresh) {
-            valueChanged(null);
-        } else if (e.getSource() == newButton) {
-            GroupDialog gd = new GroupDialog(frame, panel, null);
-            gd.setVisible(true); // gd.show(); -> deprecated since 1.5
-            if (gd.okPressed()) {
-                AbstractGroup newGroup = gd.getResultingGroup();
-                GroupTreeNode newNode = new GroupTreeNode(newGroup);
-                groupsRoot.add(newNode);
-                revalidateGroups();
-                UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(
-                        GroupSelector.this, groupsRoot, newNode,
-                        UndoableAddOrRemoveGroup.ADD_NODE);
-                panel.undoManager.addEdit(undo);
-                panel.markBaseChanged();
-                frame.output(Globals.lang("Created_group_\"%0\".",
-                        newGroup.getName()));
-            }
-        } else if (e.getSource() == autoGroup) {
-            AutoGroupDialog gd = new AutoGroupDialog(frame, panel,
-                    GroupSelector.this, groupsRoot, Globals.prefs.get("groupsDefaultField"), " .,", ",");
-            gd.setVisible(true); // gd.show(); -> deprecated since 1.5
-            // gd does the operation itself
-        } else if (e.getSource() instanceof JCheckBox) {
-            valueChanged(null);
-        } else if (e.getSource() instanceof JCheckBoxMenuItem) {
-            valueChanged(null);
-        } else if (e.getSource() instanceof JRadioButtonMenuItem) {
-            valueChanged(null);
-        }
-    }
-
-    @Override
-    public void componentOpening() {
-        valueChanged(null);
-    }
-
-    @Override
-    public void componentClosing() {
-        if (panel != null) {// panel may be null if no file is open any more
-            panel.stopShowingGroup();
-            panel.mainTable.stopShowingFloatGrouping();
-        }
-        frame.groupToggle.setSelected(false);
-    }
-
-    public void setGroups(GroupTreeNode groupsRoot) {
-        groupsTree.setModel(groupsTreeModel = new DefaultTreeModel(groupsRoot));
-        this.groupsRoot = groupsRoot;
-        if (Globals.prefs.getBoolean("groupExpandTree")) {
-                groupsTree.expandSubtree(groupsRoot);
-    }
-    }
-
-    /**
-     * Adds the specified node as a child of the current root. The group
-     * contained in <b>newGroups </b> must not be of type AllEntriesGroup, since
-     * every tree has exactly one AllEntriesGroup (its root). The <b>newGroups
-     * </b> are inserted directly, i.e. they are not deepCopy()'d.
-     */
-    public void addGroups(GroupTreeNode newGroups, CompoundEdit ce) {
-        // paranoia: ensure that there are never two instances of AllEntriesGroup
-        if (newGroups.getGroup() instanceof AllEntriesGroup) {
-            return; // this should be impossible anyway
-        }
-        groupsRoot.add(newGroups);
-        UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(this,
-                groupsRoot, newGroups, UndoableAddOrRemoveGroup.ADD_NODE);
-        ce.addEdit(undo);
-    }
-
-    private abstract class NodeAction extends AbstractAction {
-
-        protected GroupTreeNode m_node = null;
-
-        public NodeAction(String s) {
-            super(s);
-        }
-
-        public GroupTreeNode getNode() {
-            return m_node;
-        }
-
-        public void setNode(GroupTreeNode node) {
-            this.m_node = node;
-        }
-
-        /** Returns the node to use in this action. If a node has been
-         * set explicitly (via setNode), it is returned. Otherwise, the first
-         * node in the current selection is returned. If all this fails, null
-         * is returned. */
-        public GroupTreeNode getNodeToUse() {
-            if (m_node != null) {
-                return m_node;
-            }
-            TreePath path = groupsTree.getSelectionPath();
-            if (path != null) {
-                return (GroupTreeNode) path.getLastPathComponent();
-            }
-            return null;
-        }
-    }
-    final AbstractAction editGroupAction = new EditGroupAction();
-    final NodeAction editGroupPopupAction = new EditGroupAction();
-    final NodeAction addGroupPopupAction = new AddGroupAction();
-    final NodeAction addSubgroupPopupAction = new AddSubgroupAction();
-    final NodeAction removeGroupAndSubgroupsPopupAction = new RemoveGroupAndSubgroupsAction();
-    final NodeAction removeSubgroupsPopupAction = new RemoveSubgroupsAction();
-    final NodeAction removeGroupKeepSubgroupsPopupAction = new RemoveGroupKeepSubgroupsAction();
-    final NodeAction moveNodeUpPopupAction = new MoveNodeUpAction();
-    final NodeAction moveNodeDownPopupAction = new MoveNodeDownAction();
-    final NodeAction moveNodeLeftPopupAction = new MoveNodeLeftAction();
-    final NodeAction moveNodeRightPopupAction = new MoveNodeRightAction();
-    final NodeAction moveNodeUpAction = new MoveNodeUpAction();
-    final NodeAction moveNodeDownAction = new MoveNodeDownAction();
-    final NodeAction moveNodeLeftAction = new MoveNodeLeftAction();
-    final NodeAction moveNodeRightAction = new MoveNodeRightAction();
-    final NodeAction expandSubtreePopupAction = new ExpandSubtreeAction();
-    final NodeAction collapseSubtreePopupAction = new CollapseSubtreeAction();
-    final NodeAction sortDirectSubgroupsPopupAction = new SortDirectSubgroupsAction();
-    final NodeAction sortAllSubgroupsPopupAction = new SortAllSubgroupsAction();
-    final AddToGroupAction addToGroup = new AddToGroupAction(false);
-    final AddToGroupAction moveToGroup = new AddToGroupAction(true);
-    final RemoveFromGroupAction removeFromGroup = new RemoveFromGroupAction();
-
-    private class EditGroupAction extends NodeAction {
-
-        public EditGroupAction() {
-            super(Globals.lang("Edit group"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            final GroupTreeNode node = getNodeToUse();
-            final AbstractGroup oldGroup = node.getGroup();
-            final GroupDialog gd = new GroupDialog(frame, panel, oldGroup);
-            gd.setVisible(true);
-            if (gd.okPressed()) {
-                AbstractGroup newGroup = gd.getResultingGroup();
-                AbstractUndoableEdit undoAddPreviousEntries = gd.getUndoForAddPreviousEntries();
-                UndoableModifyGroup undo = new UndoableModifyGroup(
-                        GroupSelector.this, groupsRoot, node, newGroup);
-                node.setGroup(newGroup);
-                revalidateGroups(node);
-                // Store undo information.
-                if (undoAddPreviousEntries == null) {
-                    panel.undoManager.addEdit(undo);
-                } else {
-                    NamedCompound nc = new NamedCompound("Modify Group"); // JZTODO lyrics
-                    nc.addEdit(undo);
-                    nc.addEdit(undoAddPreviousEntries);
-                    nc.end();
-                    panel.undoManager.addEdit(nc);
-                }
-                panel.markBaseChanged();
-                frame.output(Globals.lang("Modified group \"%0\".",
-                        newGroup.getName()));
-            }
-        }
-    }
-
-    private class AddGroupAction extends NodeAction {
-
-        public AddGroupAction() {
-            super(Globals.lang("Add Group"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            final GroupTreeNode node = getNodeToUse();
-            final GroupDialog gd = new GroupDialog(frame, panel, null);
-            gd.setVisible(true);
-            if (!gd.okPressed()) {
-                return; // ignore
-            }
-            final AbstractGroup newGroup = gd.getResultingGroup();
-            final GroupTreeNode newNode = new GroupTreeNode(newGroup);
-            if (node == null) {
-                groupsRoot.add(newNode);
-            } else {
-                ((GroupTreeNode) node.getParent()).insert(newNode, node.getParent().getIndex(node) + 1);
-            }
-            UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(
-                    GroupSelector.this, groupsRoot, newNode,
-                    UndoableAddOrRemoveGroup.ADD_NODE);
-            revalidateGroups();
-            groupsTree.expandPath(new TreePath(
-                    (node != null ? node : groupsRoot).getPath()));
-            // Store undo information.
-            panel.undoManager.addEdit(undo);
-            panel.markBaseChanged();
-            frame.output(Globals.lang("Added group \"%0\".",
-                    newGroup.getName()));
-        }
-    }
-
-    private class AddSubgroupAction extends NodeAction {
-
-        public AddSubgroupAction() {
-            super(Globals.lang("Add Subgroup"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            final GroupTreeNode node = getNodeToUse();
-            final GroupDialog gd = new GroupDialog(frame, panel, null);
-            gd.setVisible(true);
-            if (!gd.okPressed()) {
-                return; // ignore
-            }
-            final AbstractGroup newGroup = gd.getResultingGroup();
-            final GroupTreeNode newNode = new GroupTreeNode(newGroup);
-            node.add(newNode);
-            UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(
-                    GroupSelector.this, groupsRoot, newNode,
-                    UndoableAddOrRemoveGroup.ADD_NODE);
-            revalidateGroups();
-            groupsTree.expandPath(new TreePath(node.getPath()));
-            // Store undo information.
-            panel.undoManager.addEdit(undo);
-            panel.markBaseChanged();
-            frame.output(Globals.lang("Added group \"%0\".",
-                    newGroup.getName()));
-        }
-    }
-
-    private class RemoveGroupAndSubgroupsAction extends NodeAction {
-
-        public RemoveGroupAndSubgroupsAction() {
-            super(Globals.lang("Remove group and subgroups"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            final GroupTreeNode node = getNodeToUse();
-            final AbstractGroup group = node.getGroup();
-            int conf = JOptionPane.showConfirmDialog(frame, Globals.lang("Remove group \"%0\" and its subgroups?", group.getName()),
-                    Globals.lang("Remove group and subgroups"),
-                    JOptionPane.YES_NO_OPTION);
-            if (conf == JOptionPane.YES_OPTION) {
-                final UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(
-                        GroupSelector.this, groupsRoot, node,
-                        UndoableAddOrRemoveGroup.REMOVE_NODE_AND_CHILDREN);
-                node.removeFromParent();
-                revalidateGroups();
-                // Store undo information.
-                panel.undoManager.addEdit(undo);
-                panel.markBaseChanged();
-                frame.output(Globals.lang("Removed group \"%0\" and its subgroups.",
-                        group.getName()));
-            }
-        }
-    }
-
-    private class RemoveSubgroupsAction extends NodeAction {
-
-        public RemoveSubgroupsAction() {
-            super(Globals.lang("Remove all subgroups"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            final GroupTreeNode node = getNodeToUse();
-            final AbstractGroup group = node.getGroup();
-            int conf = JOptionPane.showConfirmDialog(frame, Globals.lang("Remove all subgroups of \"%0\"?", group.getName()),
-                    Globals.lang("Remove all subgroups"),
-                    JOptionPane.YES_NO_OPTION);
-            if (conf == JOptionPane.YES_OPTION) {
-                final UndoableModifySubtree undo = new UndoableModifySubtree(
-                        GroupSelector.this, getGroupTreeRoot(), node,
-                        "Remove all subgroups");
-                node.removeAllChildren();
-                revalidateGroups();
-                // Store undo information.
-                panel.undoManager.addEdit(undo);
-                panel.markBaseChanged();
-                frame.output(Globals.lang("Removed all subgroups of group \"%0\".",
-                        group.getName()));
-            }
-        }
-    }
-
-    private class RemoveGroupKeepSubgroupsAction extends NodeAction {
-
-        public RemoveGroupKeepSubgroupsAction() {
-            super(Globals.lang("Remove group, keep subgroups"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            final GroupTreeNode node = getNodeToUse();
-            final AbstractGroup group = node.getGroup();
-            int conf = JOptionPane.showConfirmDialog(frame, Globals.lang("Remove group \"%0\"?", group.getName()), Globals.lang("Remove group"), JOptionPane.YES_NO_OPTION);
-            if (conf == JOptionPane.YES_OPTION) {
-                final UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(
-                        GroupSelector.this, groupsRoot, node,
-                        UndoableAddOrRemoveGroup.REMOVE_NODE_KEEP_CHILDREN);
-                final GroupTreeNode parent = (GroupTreeNode) node.getParent();
-                final int childIndex = parent.getIndex(node);
-                node.removeFromParent();
-                while (node.getChildCount() > 0) {
-                    parent.insert((GroupTreeNode) node.getFirstChild(),
-                            childIndex);
-                }
-                revalidateGroups();
-                // Store undo information.
-                panel.undoManager.addEdit(undo);
-                panel.markBaseChanged();
-                frame.output(Globals.lang("Removed group \"%0\".",
-                        group.getName()));
-            }
-        }
-    }
-
-    public TreePath getSelectionPath() {
-        return groupsTree.getSelectionPath();
-    }
-
-    private class SortDirectSubgroupsAction extends NodeAction {
-
-        public SortDirectSubgroupsAction() {
-            super(Globals.lang("Immediate subgroups"));
-        }
-
-        public void actionPerformed(ActionEvent ae) {
-            final GroupTreeNode node = getNodeToUse();
-            final UndoableModifySubtree undo = new UndoableModifySubtree(
-                    GroupSelector.this, getGroupTreeRoot(), node, Globals.lang("sort subgroups"));
-            groupsTree.sort(node, false);
-            panel.undoManager.addEdit(undo);
-            panel.markBaseChanged();
-            frame.output(Globals.lang("Sorted immediate subgroups."));
-        }
-    }
-
-    private class SortAllSubgroupsAction extends NodeAction {
-
-        public SortAllSubgroupsAction() {
-            super(Globals.lang("All subgroups (recursively)"));
-        }
-
-        public void actionPerformed(ActionEvent ae) {
-            final GroupTreeNode node = getNodeToUse();
-            final UndoableModifySubtree undo = new UndoableModifySubtree(
-                    GroupSelector.this, getGroupTreeRoot(), node, Globals.lang("sort subgroups"));
-            groupsTree.sort(node, true);
-            panel.undoManager.addEdit(undo);
-            panel.markBaseChanged(); // JZTODO lyrics
-            frame.output(Globals.lang("Sorted all subgroups recursively."));
-        }
-    }
-    public final AbstractAction clearHighlightAction = new AbstractAction(Globals.lang("Clear highlight")) {
-
-        public void actionPerformed(ActionEvent ae) {
-            groupsTree.setHighlight3Cells(null);
-        }
-    };
-
-    private class ExpandSubtreeAction extends NodeAction {
-
-        public ExpandSubtreeAction() {
-            super(Globals.lang("Expand subtree"));
-        }
-
-        public void actionPerformed(ActionEvent ae) {
-            final GroupTreeNode node = getNodeToUse();
-            TreePath path = new TreePath(node.getPath());
-            groupsTree.expandSubtree((GroupTreeNode) path.getLastPathComponent());
-            revalidateGroups();
-        }
-    }
-
-    private class CollapseSubtreeAction extends NodeAction {
-
-        public CollapseSubtreeAction() {
-            super(Globals.lang("Collapse subtree"));
-        }
-
-        public void actionPerformed(ActionEvent ae) {
-            final GroupTreeNode node = getNodeToUse();
-            TreePath path = new TreePath(node.getPath());
-            groupsTree.collapseSubtree((GroupTreeNode) path.getLastPathComponent());
-            revalidateGroups();
-        }
-    }
-
-    private class MoveNodeUpAction extends NodeAction {
-
-        public MoveNodeUpAction() {
-            super(Globals.lang("Up"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            final GroupTreeNode node = getNodeToUse();
-            moveNodeUp(node, false);
-        }
-    }
-
-    private class MoveNodeDownAction extends NodeAction {
-
-        public MoveNodeDownAction() {
-            super(Globals.lang("Down"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            final GroupTreeNode node = getNodeToUse();
-            moveNodeDown(node, false);
-        }
-    }
-
-    private class MoveNodeLeftAction extends NodeAction {
-
-        public MoveNodeLeftAction() {
-            super(Globals.lang("Left"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            final GroupTreeNode node = getNodeToUse();
-            moveNodeLeft(node, false);
-        }
-    }
-
-    private class MoveNodeRightAction extends NodeAction {
-
-        public MoveNodeRightAction() {
-            super(Globals.lang("Right"));
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            final GroupTreeNode node = getNodeToUse();
-            moveNodeRight(node, false);
-        }
-    }
-
-    /**
-     * @param node The node to move
-     * @return true if move was successful, false if not.
-     */
-    public boolean moveNodeUp(GroupTreeNode node, boolean checkSingleSelection) {
-        if (checkSingleSelection) {
-            if (groupsTree.getSelectionCount() != 1) {
-                frame.output(Globals.lang("Please select exactly one group to move."));
-                return false; // not possible
-            }
-        }
-        AbstractUndoableEdit undo = null;
-        if (!node.canMoveUp() || (undo = node.moveUp(GroupSelector.this)) == null) {
-            frame.output(Globals.lang(
-                    "Cannot move group \"%0\" up.", node.getGroup().getName()));
-            return false; // not possible
-        }
-        // update selection/expansion state (not really needed when
-        // moving among siblings, but I'm paranoid)
-        revalidateGroups(groupsTree.refreshPaths(groupsTree.getSelectionPaths()),
-                groupsTree.refreshPaths(getExpandedPaths()));
-        concludeMoveGroup(undo, node);
-        return true;
-    }
-
-    /**
-     * @param node The node to move
-     * @return true if move was successful, false if not.
-     */
-    public boolean moveNodeDown(GroupTreeNode node, boolean checkSingleSelection) {
-        if (checkSingleSelection) {
-            if (groupsTree.getSelectionCount() != 1) {
-                frame.output(Globals.lang("Please select exactly one group to move."));
-                return false; // not possible
-            }
-        }
-        AbstractUndoableEdit undo = null;
-        if (!node.canMoveDown() || (undo = node.moveDown(GroupSelector.this)) == null) {
-            frame.output(Globals.lang(
-                    "Cannot move group \"%0\" down.", node.getGroup().getName()));
-            return false; // not possible
-        }
-        // update selection/expansion state (not really needed when
-        // moving among siblings, but I'm paranoid)
-        revalidateGroups(groupsTree.refreshPaths(groupsTree.getSelectionPaths()),
-                groupsTree.refreshPaths(getExpandedPaths()));
-        concludeMoveGroup(undo, node);
-        return true;
-    }
-
-    /**
-     * @param node The node to move
-     * @return true if move was successful, false if not.
-     */
-    public boolean moveNodeLeft(GroupTreeNode node, boolean checkSingleSelection) {
-        if (checkSingleSelection) {
-            if (groupsTree.getSelectionCount() != 1) {
-                frame.output(Globals.lang("Please select exactly one group to move."));
-                return false; // not possible
-            }
-        }
-        AbstractUndoableEdit undo = null;
-        if (!node.canMoveLeft() || (undo = node.moveLeft(GroupSelector.this)) == null) {
-            frame.output(Globals.lang(
-                    "Cannot move group \"%0\" left.", node.getGroup().getName()));
-            return false; // not possible
-        }
-        // update selection/expansion state
-        revalidateGroups(groupsTree.refreshPaths(groupsTree.getSelectionPaths()),
-                groupsTree.refreshPaths(getExpandedPaths()));
-        concludeMoveGroup(undo, node);
-        return true;
-    }
-
-    /**
-     * @param node The node to move
-     * @return true if move was successful, false if not.
-     */
-    public boolean moveNodeRight(GroupTreeNode node, boolean checkSingleSelection) {
-        if (checkSingleSelection) {
-            if (groupsTree.getSelectionCount() != 1) {
-                frame.output(Globals.lang("Please select exactly one group to move."));
-                return false; // not possible
-            }
-        }
-        AbstractUndoableEdit undo = null;
-        if (!node.canMoveRight() || (undo = node.moveRight(GroupSelector.this)) == null) {
-            frame.output(Globals.lang(
-                    "Cannot move group \"%0\" right.", node.getGroup().getName()));
-            return false; // not possible
-        }
-        // update selection/expansion state
-        revalidateGroups(groupsTree.refreshPaths(groupsTree.getSelectionPaths()),
-                groupsTree.refreshPaths(getExpandedPaths()));
-        concludeMoveGroup(undo, node);
-        return true;
-    }
-
-    /**
-     * Concludes the moving of a group tree node by storing the specified
-     * undo information, marking the change, and setting the status line.
-     * @param undo Undo information for the move operation.
-     * @param node The node that has been moved.
-     */
-    public void concludeMoveGroup(AbstractUndoableEdit undo, GroupTreeNode node) {
-        panel.undoManager.addEdit(undo);
-        panel.markBaseChanged();
-        frame.output(Globals.lang("Moved group \"%0\".",
-                node.getGroup().getName()));
-    }
-
-    public void concludeAssignment(AbstractUndoableEdit undo, GroupTreeNode node, int assignedEntries) {
-        if (undo == null) {
-            frame.output(Globals.lang("The group \"%0\" already contains the selection.",
-                    new String[]{node.getGroup().getName()}));
-            return;
-        }
-        panel.undoManager.addEdit(undo);
-        panel.markBaseChanged();
-        panel.updateEntryEditorIfShowing();
-        final String groupName = node.getGroup().getName();
-        if (assignedEntries == 1) {
-            frame.output(Globals.lang("Assigned 1 entry to group \"%0\".", groupName));
-        } else {
-            frame.output(Globals.lang("Assigned %0 entries to group \"%1\".",
-                    String.valueOf(assignedEntries), groupName));
-    }
-    }
-    JMenu moveSubmenu = new JMenu(Globals.lang("Move"));
-    JMenu sortSubmenu = new JMenu(Globals.lang("Sort alphabetically")); // JZTODO lyrics
-
-    public GroupTreeNode getGroupTreeRoot() {
-        return groupsRoot;
-    }
-
-    public Enumeration<TreePath> getExpandedPaths() {
-        return groupsTree.getExpandedDescendants(
-                new TreePath(groupsRoot.getPath()));
-    }
-
-    /** panel may be null to indicate that no file is currently open. */
-    public void setActiveBasePanel(BasePanel panel) {
-        super.setActiveBasePanel(panel);
-        if (panel == null) { // hide groups
-            frame.sidePaneManager.hide("groups");
-            return;
-        }
-        MetaData metaData = panel.metaData();
-        if (metaData.getGroups() != null) {
-            setGroups(metaData.getGroups());
-        } else {
-            GroupTreeNode newGroupsRoot = new GroupTreeNode(new AllEntriesGroup());
-            metaData.setGroups(newGroupsRoot);
-            setGroups(newGroupsRoot);
-        }
-
-        // auto show/hide groups interface
-        if (Globals.prefs.getBoolean("groupAutoShow")
-                && !groupsRoot.isLeaf()) { // groups were defined
-            frame.sidePaneManager.show("groups");
-            frame.groupToggle.setSelected(true);
-        } else if (Globals.prefs.getBoolean("groupAutoHide")
-                && groupsRoot.isLeaf()) { // groups were not defined
-            frame.sidePaneManager.hide("groups");
-            frame.groupToggle.setSelected(false);
-        }
-
-        synchronized (getTreeLock()) {
-            validateTree();
-        }
-
-
-    }
-
-    /**
-     * This method is required by the ErrorMessageDisplay interface, and lets this class
-     * serve as a callback for regular expression exceptions happening in DatabaseSearch.
-     * @param errorMessage
-     */
-    public void reportError(String errorMessage) {
-        // this should never happen, since regular expressions are checked for
-        // correctness by the edit group dialog, and no other errors should
-        // occur in a search
-        System.err.println("Error in group search: " + errorMessage
-                + ". Please report this on www.sf.net/projects/jabref");
-    }
-
-    /**
-     * This method is required by the ErrorMessageDisplay interface, and lets this class
-     * serve as a callback for regular expression exceptions happening in DatabaseSearch.
-     * @param errorMessage
-     */
-    public void reportError(String errorMessage, Exception exception) {
-        reportError(errorMessage);
-    }
-
-    /**
-     * Highlight all groups that contain any/all of the specified entries.
-     * If entries is null or has zero length, highlight is cleared.
-     */
-    public void showMatchingGroups(BibtexEntry[] entries, boolean requireAll) {
-        if (entries == null || entries.length == 0) { // nothing selected
-            groupsTree.setHighlight3Cells(null);
-            groupsTree.revalidate();
-            return;
-        }
-        GroupTreeNode node;
-        AbstractGroup group;
-        Vector<GroupTreeNode> vec = new Vector<GroupTreeNode>();
-        for (Enumeration<GroupTreeNode> e = groupsRoot.preorderEnumeration(); e.hasMoreElements();) {
-            node = e.nextElement();
-            group = node.getGroup();
-            int i;
-            for (i = 0; i < entries.length; ++i) {
-                if (requireAll) {
-                    if (!group.contains(entries[i])) {
-                        break;
-                    }
-                } else {
-                    if (group.contains(entries[i])) {
-                        vec.add(node);
-                }
-            }
-            }
-            if (requireAll && i >= entries.length) // did not break from loop
-            {
-                vec.add(node);
-        }
-        }
-        groupsTree.setHighlight3Cells(vec.toArray());
-        // ensure that all highlighted nodes are visible
-        for (int i = 0; i < vec.size(); ++i) {
-            node = (GroupTreeNode) vec.elementAt(i).getParent();
-            if (node != null) {
-                groupsTree.expandPath(new TreePath(node.getPath()));
-        }
-        }
-        groupsTree.revalidate();
-    }
-
-    /** Show groups that, if selected, would show at least one
-     * of the entries found in the specified search. */
-    protected void showOverlappingGroups(List<BibtexEntry> matches) { //DatabaseSearch search) {
-      GroupTreeNode node;
-      SearchRule rule;
-      BibtexEntry entry;
-      Vector<GroupTreeNode> vec = new Vector<GroupTreeNode>();
-      Map<String, String> dummyMap = new HashMap<String, String>(); // just because I don't want to use null...
-        for (Enumeration<GroupTreeNode> e = groupsRoot.depthFirstEnumeration(); e.hasMoreElements();) {
-          node = e.nextElement();
-          rule = node.getSearchRule();
-            for (Iterator<BibtexEntry> it = matches.iterator(); it.hasNext();) {
-              entry = it.next();
-                if (rule.applyRule(dummyMap, entry) == 0) {
-                      continue;
-                }
-              vec.add(node);
-              break;
-          }
-      }
-      groupsTree.setHighlight2Cells(vec.toArray());
-    }
-
-    public GroupsTree getGroupsTree()
-    {
-    	return this.groupsTree;
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JMenu;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JRadioButtonMenuItem;
+import javax.swing.JScrollPane;
+import javax.swing.KeyStroke;
+import javax.swing.border.Border;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
+import javax.swing.undo.AbstractUndoableEdit;
+import javax.swing.undo.CompoundEdit;
+
+import net.sf.jabref.AbstractWorker;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.ErrorMessageDisplay;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.SearchRule;
+import net.sf.jabref.SearchRuleSet;
+import net.sf.jabref.SidePaneComponent;
+import net.sf.jabref.SidePaneManager;
+import net.sf.jabref.help.HelpAction;
+import net.sf.jabref.undo.NamedCompound;
+
+public class GroupSelector extends SidePaneComponent implements
+        TreeSelectionListener, ActionListener, ErrorMessageDisplay {
+
+    JButton newButton = new JButton(GUIGlobals.getImage("new")),
+            helpButton = new JButton(
+                    GUIGlobals.getImage("help")),
+            refresh = new JButton(
+                    GUIGlobals.getImage("refresh")),
+            autoGroup = new JButton(GUIGlobals.getImage("autoGroup")),
+            openset = new JButton(Globals.lang("Settings"));
+    Color bgColor = Color.white;
+    GroupsTree groupsTree;
+    DefaultTreeModel groupsTreeModel;
+    GroupTreeNode groupsRoot;
+    JScrollPane sp;
+    GridBagLayout gbl = new GridBagLayout();
+    GridBagConstraints con = new GridBagConstraints();
+    JabRefFrame frame;
+    String searchField;
+    JPopupMenu groupsContextMenu = new JPopupMenu();
+    JPopupMenu settings = new JPopupMenu();
+    private JRadioButtonMenuItem hideNonHits, grayOut;
+    JRadioButtonMenuItem andCb = new JRadioButtonMenuItem(Globals.lang("Intersection"), true);
+    JRadioButtonMenuItem orCb = new JRadioButtonMenuItem(Globals.lang("Union"),
+            false);
+    JRadioButtonMenuItem floatCb = new JRadioButtonMenuItem(Globals.lang("Float"), true);
+    JRadioButtonMenuItem highlCb = new JRadioButtonMenuItem(Globals.lang("Highlight"), false);
+    JCheckBoxMenuItem invCb = new JCheckBoxMenuItem(Globals.lang("Inverted"),
+            false), select = new JCheckBoxMenuItem(Globals.lang("Select matches"), false);
+    JCheckBoxMenuItem showOverlappingGroups = new JCheckBoxMenuItem(
+                    Globals.lang("Highlight overlapping groups")); // JZTODO lyrics
+	JCheckBoxMenuItem autoAssignGroup = new JCheckBoxMenuItem(
+			Globals.lang("Automatically assign new entry to selected groups")); 
+    ButtonGroup bgr = new ButtonGroup();
+    ButtonGroup visMode = new ButtonGroup();
+    ButtonGroup nonHits = new ButtonGroup();
+    JButton expand = new JButton(GUIGlobals.getImage("down")),
+            reduce = new JButton(GUIGlobals.getImage("up"));
+    JCheckBoxMenuItem editModeCb = new JCheckBoxMenuItem(Globals.lang("Edit Group Membership"), false);
+    Border editModeBorder = BorderFactory.createTitledBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.RED),
+            "Edit mode", TitledBorder.RIGHT, TitledBorder.TOP, Font.getFont("Default"), Color.RED);
+    boolean editModeIndicator;
+    SidePaneManager manager;
+
+     /**
+     * The first element for each group defines which field to use for the
+     * quicksearch. The next two define the name and regexp for the group.
+     *
+     *
+     */
+    public GroupSelector(JabRefFrame frame, SidePaneManager manager) {
+        super(manager, GUIGlobals.getIconUrl("toggleGroups"), Globals.lang("Groups"));
+        this.groupsRoot = new GroupTreeNode(new AllEntriesGroup());
+
+        this.manager = manager;
+        this.frame = frame;
+        hideNonHits = new JRadioButtonMenuItem(Globals.lang("Hide non-hits"),
+                !Globals.prefs.getBoolean("grayOutNonHits"));
+        grayOut = new JRadioButtonMenuItem(Globals.lang("Gray out non-hits"),
+                Globals.prefs.getBoolean("grayOutNonHits"));
+        nonHits.add(hideNonHits);
+        nonHits.add(grayOut);
+        floatCb.addChangeListener(new ChangeListener() {
+
+            public void stateChanged(ChangeEvent event) {
+                Globals.prefs.putBoolean("groupFloatSelections", floatCb.isSelected());
+            }
+        });
+        andCb.addChangeListener(new ChangeListener() {
+
+            public void stateChanged(ChangeEvent event) {
+                Globals.prefs.putBoolean("groupIntersectSelections", andCb.isSelected());
+            }
+        });
+        invCb.addChangeListener(new ChangeListener() {
+
+            public void stateChanged(ChangeEvent event) {
+                Globals.prefs.putBoolean("groupInvertSelections", invCb.isSelected());
+            }
+        });
+        showOverlappingGroups.addChangeListener(new ChangeListener() {
+
+            public void stateChanged(ChangeEvent event) {
+                Globals.prefs.putBoolean("groupShowOverlapping",
+                                showOverlappingGroups.isSelected());
+                if (!showOverlappingGroups.isSelected()) {
+                    groupsTree.setHighlight2Cells(null);
+            }
+            }
+        });
+
+        select.addChangeListener(new ChangeListener() {
+
+            public void stateChanged(ChangeEvent event) {
+                Globals.prefs.putBoolean("groupSelectMatches", select.isSelected());
+            }
+        });
+        grayOut.addChangeListener(new ChangeListener() {
+
+            public void stateChanged(ChangeEvent event) {
+                Globals.prefs.putBoolean("grayOutNonHits", grayOut.isSelected());
+            }
+        });
+
+        if (Globals.prefs.getBoolean("groupFloatSelections")) {
+
+            floatCb.setSelected(true);
+            highlCb.setSelected(false);
+        } else {
+            highlCb.setSelected(true);
+            floatCb.setSelected(false);
+        }
+        if (Globals.prefs.getBoolean("groupIntersectSelections")) {
+            andCb.setSelected(true);
+            orCb.setSelected(false);
+        } else {
+            orCb.setSelected(true);
+            andCb.setSelected(false);
+        }
+
+        
+        autoAssignGroup.addChangeListener(new ChangeListener() {
+        	public void stateChanged(ChangeEvent event) {
+                Globals.prefs.putBoolean("autoAssignGroup", autoAssignGroup.isSelected());
+            }
+        });
+        
+        invCb.setSelected(Globals.prefs.getBoolean("groupInvertSelections"));
+        showOverlappingGroups.setSelected(Globals.prefs.getBoolean("groupShowOverlapping"));
+        select.setSelected(Globals.prefs.getBoolean("groupSelectMatches"));
+        editModeIndicator = Globals.prefs.getBoolean(JabRefPreferences.EDIT_GROUP_MEMBERSHIP_MODE);
+        editModeCb.setSelected(editModeIndicator);
+        autoAssignGroup.setSelected(Globals.prefs.getBoolean("autoAssignGroup"));
+
+        openset.setMargin(new Insets(0, 0, 0, 0));
+        settings.add(andCb);
+        settings.add(orCb);
+        settings.addSeparator();
+        settings.add(invCb);
+        settings.addSeparator();
+        settings.add(select);
+        settings.addSeparator();
+        settings.add(editModeCb);
+        settings.addSeparator();
+        settings.add(grayOut);
+        settings.add(hideNonHits);
+        settings.addSeparator();
+        settings.add(showOverlappingGroups);
+        settings.addSeparator();
+        settings.add(autoAssignGroup);
+        // settings.add(moreRow);
+        // settings.add(lessRow);
+        openset.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                if (settings.isVisible()) {
+                    // System.out.println("oee");
+                    // settings.setVisible(false);
+                } else {
+                    JButton src = (JButton) e.getSource();
+                    autoAssignGroup.setSelected(Globals.prefs.getBoolean("autoAssignGroup")); 
+                    settings.show(src, 0, openset.getHeight());
+                }
+            }
+        });
+        expand.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                int i = Globals.prefs.getInt("groupsVisibleRows") + 1;
+                groupsTree.setVisibleRowCount(i);
+                groupsTree.revalidate();
+                groupsTree.repaint();
+                GroupSelector.this.revalidate();
+                GroupSelector.this.repaint();
+                Globals.prefs.putInt("groupsVisibleRows", i);
+                Globals.logger(Double.toString(GroupSelector.this.getHeight()));
+                Globals.logger(Double.toString(GroupSelector.this.getPreferredSize().getHeight()));
+                
+            }
+        });
+        reduce.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                int i = Globals.prefs.getInt("groupsVisibleRows") - 1;
+                if (i < 1) {
+                    i = 1;
+                }
+                groupsTree.setVisibleRowCount(i);
+                groupsTree.revalidate();
+                groupsTree.repaint();
+                GroupSelector.this.revalidate();
+                // _panel.sidePaneManager.revalidate();
+                GroupSelector.this.repaint();
+                Globals.prefs.putInt("groupsVisibleRows", i);
+            }
+        });
+
+        editModeCb.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                editModeIndicator = editModeCb.getState();
+                updateBorder(editModeIndicator);
+                Globals.prefs.putBoolean(JabRefPreferences.EDIT_GROUP_MEMBERSHIP_MODE, editModeIndicator);
+            }
+        });
+
+        int butSize = newButton.getIcon().getIconHeight() + 5;
+        Dimension butDim = new Dimension(butSize, butSize);
+        //Dimension butDimSmall = new Dimension(20, 20);
+
+        newButton.setPreferredSize(butDim);
+        newButton.setMinimumSize(butDim);
+        refresh.setPreferredSize(butDim);
+        refresh.setMinimumSize(butDim);
+        helpButton.setPreferredSize(butDim);
+        helpButton.setMinimumSize(butDim);
+        autoGroup.setPreferredSize(butDim);
+        autoGroup.setMinimumSize(butDim);
+        openset.setPreferredSize(butDim);
+        openset.setMinimumSize(butDim);
+        expand.setPreferredSize(butDim);
+        expand.setMinimumSize(butDim);
+        reduce.setPreferredSize(butDim);
+        reduce.setMinimumSize(butDim);
+        Insets butIns = new Insets(0, 0, 0, 0);
+        helpButton.setMargin(butIns);
+        reduce.setMargin(butIns);
+        expand.setMargin(butIns);
+        openset.setMargin(butIns);
+        newButton.addActionListener(this);
+        refresh.addActionListener(this);
+        andCb.addActionListener(this);
+        orCb.addActionListener(this);
+        invCb.addActionListener(this);
+        showOverlappingGroups.addActionListener(this);
+        autoGroup.addActionListener(this);
+        floatCb.addActionListener(this);
+        highlCb.addActionListener(this);
+        select.addActionListener(this);
+        hideNonHits.addActionListener(this);
+        grayOut.addActionListener(this);
+        newButton.setToolTipText(Globals.lang("New group"));
+        refresh.setToolTipText(Globals.lang("Refresh view"));
+        andCb.setToolTipText(Globals.lang("Display only entries belonging to all selected"
+                        + " groups."));
+        orCb.setToolTipText(Globals.lang("Display all entries belonging to one or more "
+                        + "of the selected groups."));
+        autoGroup.setToolTipText(Globals.lang("Automatically create groups for database."));
+        invCb.setToolTipText(Globals.lang("Show entries *not* in group selection"));
+        showOverlappingGroups.setToolTipText( // JZTODO lyrics
+                        "Highlight groups that contain entries contained in any currently selected group");
+        floatCb.setToolTipText(Globals.lang("Move entries in group selection to the top"));
+        highlCb.setToolTipText(Globals.lang("Gray out entries not in group selection"));
+        select.setToolTipText(Globals.lang("Select entries in group selection"));
+        expand.setToolTipText(Globals.lang("Show one more row"));
+        reduce.setToolTipText(Globals.lang("Show one less rows"));
+        editModeCb.setToolTipText(Globals.lang("Click group to toggle membership of selected entries"));
+        bgr.add(andCb);
+        bgr.add(orCb);
+        visMode.add(floatCb);
+        visMode.add(highlCb);
+
+        JPanel main = new JPanel();
+        main.setLayout(gbl);
+
+        con.fill = GridBagConstraints.BOTH;
+        //con.insets = new Insets(0, 0, 2, 0);
+        con.weightx = 1;
+        con.gridwidth = 1;
+        con.gridx = 0;
+        con.gridy = 0;
+        //con.insets = new Insets(1, 1, 1, 1);
+        gbl.setConstraints(newButton, con);
+        main.add(newButton);
+        con.gridx = 1;
+        gbl.setConstraints(refresh, con);
+        main.add(refresh);
+        con.gridx = 2;
+        gbl.setConstraints(autoGroup, con);
+        main.add(autoGroup);
+        con.gridx = 3;
+        con.gridwidth = GridBagConstraints.REMAINDER;
+        HelpAction helpAction = new HelpAction(frame.helpDiag,
+                GUIGlobals.groupsHelp, "Help on groups");
+        helpButton.addActionListener(helpAction);
+        helpButton.setToolTipText(Globals.lang("Help on groups"));
+        gbl.setConstraints(helpButton, con);
+        main.add(helpButton);
+
+        // header.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
+        // helpButton.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
+        groupsTree = new GroupsTree(this);
+        groupsTree.addTreeSelectionListener(this);
+        groupsTree.setModel(groupsTreeModel = new DefaultTreeModel(groupsRoot));
+        sp = new JScrollPane(groupsTree,
+                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+        revalidateGroups();
+        con.gridwidth = GridBagConstraints.REMAINDER;
+        con.weighty = 1;
+        con.gridx = 0;
+        con.gridwidth = 4;
+        con.gridy = 1;
+        gbl.setConstraints(sp, con);
+        main.add(sp);
+
+        JPanel pan = new JPanel();
+        GridBagLayout gb = new GridBagLayout();
+        con.weighty = 0;
+        gbl.setConstraints(pan, con);
+        pan.setLayout(gb);
+        con.insets = new Insets(0, 0, 0, 0);
+        con.gridx = 0;
+        con.gridy = 0;
+        con.weightx = 1;
+        con.gridwidth = 4;
+        con.fill = GridBagConstraints.HORIZONTAL;
+        gb.setConstraints(openset, con);
+        pan.add(openset);
+
+        con.gridwidth = 1;
+        con.gridx = 4;
+        con.gridy = 0;
+        gb.setConstraints(expand, con);
+        pan.add(expand);
+
+        con.gridx = 5;
+        gb.setConstraints(reduce, con);
+        pan.add(reduce);
+
+        con.gridwidth = 6;
+        con.gridy = 1;
+        con.gridx = 0;
+        con.fill = GridBagConstraints.HORIZONTAL;
+
+        con.gridy = 2;
+        con.gridx = 0;
+        con.gridwidth = 4;
+        gbl.setConstraints(pan, con);
+        main.add(pan);
+        main.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
+        add(main, BorderLayout.CENTER);
+        updateBorder(editModeIndicator);
+        definePopup();
+        moveNodeUpAction.putValue(Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.CTRL_MASK));
+        moveNodeDownAction.putValue(Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.CTRL_MASK));
+        moveNodeLeftAction.putValue(Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.CTRL_MASK));
+        moveNodeRightAction.putValue(Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.CTRL_MASK));
+}
+
+    private void definePopup() {
+        // These key bindings are just to have the shortcuts displayed
+        // in the popup menu. The actual keystroke processing is in
+        // BasePanel (entryTable.addKeyListener(...)).
+        groupsContextMenu.add(editGroupPopupAction);
+        groupsContextMenu.add(addGroupPopupAction);
+        groupsContextMenu.add(addSubgroupPopupAction);
+        groupsContextMenu.addSeparator();
+        groupsContextMenu.add(removeGroupAndSubgroupsPopupAction);
+        groupsContextMenu.add(removeGroupKeepSubgroupsPopupAction);
+        groupsContextMenu.add(removeSubgroupsPopupAction);
+        groupsContextMenu.addSeparator();
+        groupsContextMenu.add(expandSubtreePopupAction);
+        groupsContextMenu.add(collapseSubtreePopupAction);
+        groupsContextMenu.addSeparator();
+        groupsContextMenu.add(moveSubmenu);
+        sortSubmenu.add(sortDirectSubgroupsPopupAction);
+        sortSubmenu.add(sortAllSubgroupsPopupAction);
+        groupsContextMenu.add(sortSubmenu);
+        moveSubmenu.add(moveNodeUpPopupAction);
+        moveSubmenu.add(moveNodeDownPopupAction);
+        moveSubmenu.add(moveNodeLeftPopupAction);
+        moveSubmenu.add(moveNodeRightPopupAction);
+        groupsContextMenu.addSeparator();
+        groupsContextMenu.add(addToGroup);
+        groupsContextMenu.add(moveToGroup);
+        groupsContextMenu.add(removeFromGroup);
+        groupsTree.addMouseListener(new MouseAdapter() {
+
+            public void mousePressed(MouseEvent e) {
+                if (e.isPopupTrigger()) {
+                    showPopup(e);
+            }
+            }
+
+            public void mouseReleased(MouseEvent e) {
+                if (e.isPopupTrigger()) {
+                    showPopup(e);
+            }
+            }
+
+            public void mouseClicked(MouseEvent e) {
+                TreePath path = groupsTree.getPathForLocation(e.getPoint().x, e.getPoint().y);
+                if (path == null) {
+                    return;
+                }
+                GroupTreeNode node = (GroupTreeNode) path.getLastPathComponent();
+                // the root node is "AllEntries" and cannot be edited
+                if (node.isRoot()) {
+                    return;
+                }
+                if (e.getClickCount() == 2
+                        && e.getButton() == MouseEvent.BUTTON1) { // edit
+                    editGroupAction.actionPerformed(null); // dummy event
+                } else if (e.getClickCount() == 1
+                        && e.getButton() == MouseEvent.BUTTON1) {
+                    annotationEvent(node);
+                }
+            }
+        });
+        // be sure to remove a possible border highlight when the popup menu
+        // disappears
+        groupsContextMenu.addPopupMenuListener(new PopupMenuListener() {
+
+            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+                // nothing to do
+            }
+
+            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+                groupsTree.setHighlightBorderCell(null);
+            }
+
+            public void popupMenuCanceled(PopupMenuEvent e) {
+                groupsTree.setHighlightBorderCell(null);
+            }
+        });
+    }
+
+    private void showPopup(MouseEvent e) {
+        final TreePath path = groupsTree.getPathForLocation(e.getPoint().x, e.getPoint().y);
+        addGroupPopupAction.setEnabled(true);
+        addSubgroupPopupAction.setEnabled(path != null);
+        editGroupPopupAction.setEnabled(path != null);
+        removeGroupAndSubgroupsPopupAction.setEnabled(path != null);
+        removeGroupKeepSubgroupsPopupAction.setEnabled(path != null);
+        moveSubmenu.setEnabled(path != null);
+        expandSubtreePopupAction.setEnabled(path != null);
+        collapseSubtreePopupAction.setEnabled(path != null);
+        removeSubgroupsPopupAction.setEnabled(path != null);
+        sortSubmenu.setEnabled(path != null);
+        addToGroup.setEnabled(false);
+        moveToGroup.setEnabled(false);
+        removeFromGroup.setEnabled(false);
+        if (path != null) { // some path dependent enabling/disabling
+            GroupTreeNode node = (GroupTreeNode) path.getLastPathComponent();
+            editGroupPopupAction.setNode(node);
+            addSubgroupPopupAction.setNode(node);
+            removeGroupAndSubgroupsPopupAction.setNode(node);
+            removeSubgroupsPopupAction.setNode(node);
+            removeGroupKeepSubgroupsPopupAction.setNode(node);
+            expandSubtreePopupAction.setNode(node);
+            collapseSubtreePopupAction.setNode(node);
+            sortDirectSubgroupsPopupAction.setNode(node);
+            sortAllSubgroupsPopupAction.setNode(node);
+            groupsTree.setHighlightBorderCell(node);
+            AbstractGroup group = node.getGroup();
+            if (group instanceof AllEntriesGroup) {
+                editGroupPopupAction.setEnabled(false);
+                addGroupPopupAction.setEnabled(false);
+                removeGroupAndSubgroupsPopupAction.setEnabled(false);
+                removeGroupKeepSubgroupsPopupAction.setEnabled(false);
+            } else {
+                editGroupPopupAction.setEnabled(true);
+                addGroupPopupAction.setEnabled(true);
+                addGroupPopupAction.setNode(node);
+                removeGroupAndSubgroupsPopupAction.setEnabled(true);
+                removeGroupKeepSubgroupsPopupAction.setEnabled(true);
+            }
+            expandSubtreePopupAction.setEnabled(groupsTree.isCollapsed(path)
+                    || groupsTree.hasCollapsedDescendant(path));
+            collapseSubtreePopupAction.setEnabled(groupsTree.isExpanded(path)
+                    || groupsTree.hasExpandedDescendant(path));
+            sortSubmenu.setEnabled(!node.isLeaf());
+            removeSubgroupsPopupAction.setEnabled(!node.isLeaf());
+            moveNodeUpPopupAction.setEnabled(node.canMoveUp());
+            moveNodeDownPopupAction.setEnabled(node.canMoveDown());
+            moveNodeLeftPopupAction.setEnabled(node.canMoveLeft());
+            moveNodeRightPopupAction.setEnabled(node.canMoveRight());
+            moveSubmenu.setEnabled(moveNodeUpPopupAction.isEnabled()
+                    || moveNodeDownPopupAction.isEnabled()
+                    || moveNodeLeftPopupAction.isEnabled()
+                    || moveNodeRightPopupAction.isEnabled());
+            moveNodeUpPopupAction.setNode(node);
+            moveNodeDownPopupAction.setNode(node);
+            moveNodeLeftPopupAction.setNode(node);
+            moveNodeRightPopupAction.setNode(node);
+            // add/remove entries to/from group
+            BibtexEntry[] selection = frame.basePanel().getSelectedEntries();
+            if (selection.length > 0) {
+                if (node.getGroup().supportsAdd() && !node.getGroup().
+                        containsAll(selection)) {
+                    addToGroup.setNode(node);
+                    addToGroup.setBasePanel(panel);
+                    addToGroup.setEnabled(true);
+                    moveToGroup.setNode(node);
+                    moveToGroup.setBasePanel(panel);
+                    moveToGroup.setEnabled(true);
+                }
+                if (node.getGroup().supportsRemove() && node.getGroup().
+                        containsAny(selection)) {
+                    removeFromGroup.setNode(node);
+                    removeFromGroup.setBasePanel(panel);
+                    removeFromGroup.setEnabled(true);
+                }
+            }
+        } else {
+            editGroupPopupAction.setNode(null);
+            addGroupPopupAction.setNode(null);
+            addSubgroupPopupAction.setNode(null);
+            removeGroupAndSubgroupsPopupAction.setNode(null);
+            removeSubgroupsPopupAction.setNode(null);
+            removeGroupKeepSubgroupsPopupAction.setNode(null);
+            moveNodeUpPopupAction.setNode(null);
+            moveNodeDownPopupAction.setNode(null);
+            moveNodeLeftPopupAction.setNode(null);
+            moveNodeRightPopupAction.setNode(null);
+            expandSubtreePopupAction.setNode(null);
+            collapseSubtreePopupAction.setNode(null);
+            sortDirectSubgroupsPopupAction.setNode(null);
+            sortAllSubgroupsPopupAction.setNode(null);
+        }
+        groupsContextMenu.show(groupsTree, e.getPoint().x, e.getPoint().y);
+    }
+
+    private void updateBorder(boolean editMode) {
+        if (editMode) {
+            groupsTree.setBorder(editModeBorder);
+            this.setTitle("<html><font color='red'>Groups Edit mode</font></html>");
+        } else {
+            groupsTree.setBorder(null);
+            this.setTitle(Globals.lang("Groups"));
+        }
+        groupsTree.revalidate();
+        groupsTree.repaint();
+    }
+    
+    /**
+     * 
+     * @param deletion != addition
+     */
+    private void updateGroupContent(GroupTreeNode node) {
+        BibtexEntry[] entries = panel.getSelectedEntries();
+        AbstractGroup group = node.getGroup();
+        AbstractUndoableEdit undoRemove = null;
+        AbstractUndoableEdit undoAdd = null;
+                
+        // Sort entries into current members and non-members of the group
+        // Current members will be removed
+        // Current non-members will be added
+        ArrayList<BibtexEntry> toRemove = new ArrayList<BibtexEntry>(entries.length);
+        ArrayList<BibtexEntry> toAdd = new ArrayList<BibtexEntry>(entries.length);
+        
+        for (BibtexEntry entry : entries) {
+            // Sort according to current state of the entries
+            if (group.contains(entry)) {
+                Globals.logger("remove " + entry.toString());
+                toRemove.add(entry);
+            }
+            else {
+                Globals.logger("add " + entry.toString());
+                toAdd.add(entry);
+            }
+        }
+        
+        // If there are entries to remove
+        if (!toRemove.isEmpty())
+            undoRemove = node.removeFromGroup(toRemove.toArray(new BibtexEntry[0]));
+        // If there are entries to add
+        if (!toAdd.isEmpty())
+            undoAdd = node.addToGroup(toAdd.toArray(new BibtexEntry[0]));
+        
+        // Remember undo information
+        if (undoRemove != null) {
+            if (undoAdd != null) {
+                // we removed and added entries
+                undoRemove.addEdit(undoAdd);
+            }
+            panel.undoManager.addEdit(undoRemove);
+        } else if (undoAdd != null) {
+            panel.undoManager.addEdit(undoAdd);
+        }
+    }
+
+    /**
+     * 
+     * @param deletion != addition
+     */
+    public void updateGroupContentIfEnabled(boolean deletion) {
+        if ((groupsTree == null) || (groupsTree.getSelectionCount() == 0)) {
+            return;
+        }
+        if (!this.editModeIndicator) {
+            // add button selected
+            return;
+        }
+        GroupTreeNode curNode = (GroupTreeNode) ((groupsTree.getSelectionPaths())[0].getLastPathComponent());
+        updateGroupContent(curNode);
+    }
+
+    private void annotationEvent(GroupTreeNode node) {
+        Globals.logger("annotationEvent");
+        Globals.logger(node.toString());
+        if (editModeIndicator) {
+            updateGroupContent(node);
+            panel.markBaseChanged();
+            panel.updateEntryEditorIfShowing();
+            updateSelections();
+        }
+    }
+
+//    private void annotationEvent() {
+//        this.annotationEvent((GroupTreeNode) ((groupsTree.getSelectionPaths())[0].getLastPathComponent()));
+//    }
+
+    public void valueChanged(TreeSelectionEvent e) {
+        if (panel == null) // sorry, we're closed!
+        {
+            return; // ignore this event
+        }
+        final TreePath[] selection = groupsTree.getSelectionPaths();
+        if (selection == null
+                || selection.length == 0
+                || (selection.length == 1 && ((GroupTreeNode) selection[0].getLastPathComponent()).getGroup() instanceof AllEntriesGroup)) {
+            panel.stopShowingGroup();
+            panel.mainTable.stopShowingFloatGrouping();
+            if (showOverlappingGroups.isSelected()) {
+                groupsTree.setHighlight2Cells(null);
+            }
+            frame.output(Globals.lang("Displaying no groups") + ".");
+            return;
+        }
+
+        if (!editModeIndicator) {
+//            annotationEvent();
+//        } else {
+            updateSelections();
+        }
+
+    }
+
+    private void updateSelections() {
+        final AndOrSearchRuleSet searchRules = new AndOrSearchRuleSet(andCb.isSelected(), invCb.isSelected());
+        TreePath[] selection = groupsTree.getSelectionPaths();
+
+        for (int i = 0; i < selection.length; ++i) {
+            searchRules.addRule(((GroupTreeNode) selection[i].getLastPathComponent()).getSearchRule());
+                }
+        Hashtable<String, String> searchOptions = new Hashtable<String, String>();
+        searchOptions.put("option", "dummy");
+        GroupingWorker worker = new GroupingWorker(searchRules, searchOptions);
+        worker.getWorker().run();
+        worker.getCallBack().update();
+        /*panel.setGroupMatcher(new SearchMatcher(searchRules, searchOptions));
+        DatabaseSearch search = new DatabaseSearch(this, searchOptions, searchRules,
+                panel, Globals.GROUPSEARCH, floatCb.isSelected(), Globals.prefs
+                        .getBoolean("grayOutNonHits"),
+                //true,
+                select.isSelected());
+        search.start();*/
+    }
+
+    class GroupingWorker extends AbstractWorker {
+
+        private SearchRuleSet rules;
+        private Hashtable<String, String> searchTerm;
+        private ArrayList<BibtexEntry> matches = new ArrayList<BibtexEntry>();
+        private boolean showOverlappingGroupsP;
+        int hits = 0;
+
+        public GroupingWorker(SearchRuleSet rules, Hashtable<String, String> searchTerm) {
+            this.rules = rules;
+            this.searchTerm = searchTerm;
+            showOverlappingGroupsP = showOverlappingGroups.isSelected();
+        }
+
+        public void run() {
+            for (BibtexEntry entry : panel.getDatabase().getEntries()) {
+                boolean hit = rules.applyRule(searchTerm, entry) > 0;
+                entry.setGroupHit(hit);
+                if (hit) {
+                    hits++;
+                    if (showOverlappingGroupsP) {
+                        matches.add(entry);
+                }
+            }
+        }
+        }
+
+        public void update() {
+            // Show the result in the chosen way:
+            if (hideNonHits.isSelected()) {
+                panel.mainTable.stopShowingFloatGrouping(); // Turn off shading, if active.
+                panel.setGroupMatcher(GroupMatcher.INSTANCE); // Turn on filtering.
+
+            } else if (grayOut.isSelected()) {
+                panel.stopShowingGroup(); // Turn off filtering, if active.
+                panel.mainTable.showFloatGrouping(GroupMatcher.INSTANCE); // Turn on shading.
+            }
+
+            if (showOverlappingGroupsP) {
+                                showOverlappingGroups(matches);
+        }
+            frame.output(Globals.lang("Updated group selection") + ".");
+        }
+    }
+
+    /**
+     * Revalidate the groups tree (e.g. after the data stored in the model has
+     * been changed) and set the specified selection and expansion state.
+     * @param node If this is non-null, the view is scrolled to make it visible.
+     */
+    public void revalidateGroups(TreePath[] selectionPaths,
+            Enumeration<TreePath> expandedNodes) {
+            revalidateGroups(selectionPaths, expandedNodes, null);
+    }
+
+    /**
+     * Revalidate the groups tree (e.g. after the data stored in the model has
+     * been changed) and set the specified selection and expansion state.
+     * @param node If this is non-null, the view is scrolled to make it visible.
+     */
+    public void revalidateGroups(TreePath[] selectionPaths,
+            Enumeration<TreePath> expandedNodes, GroupTreeNode node) {
+        groupsTreeModel.reload();
+        groupsTree.clearSelection();
+        if (selectionPaths != null) {
+            groupsTree.setSelectionPaths(selectionPaths);
+        }
+        // tree is completely collapsed here
+        if (expandedNodes != null) {
+            while (expandedNodes.hasMoreElements()) {
+                groupsTree.expandPath(expandedNodes.nextElement());
+        }
+        }
+        groupsTree.revalidate();
+        if (node != null) {
+                groupsTree.scrollPathToVisible(new TreePath(node.getPath()));
+        }
+    }
+
+    /**
+     * Revalidate the groups tree (e.g. after the data stored in the model has
+     * been changed) and maintain the current selection and expansion state. */
+    public void revalidateGroups() {
+        revalidateGroups(null);
+    }
+
+    /**
+     * Revalidate the groups tree (e.g. after the data stored in the model has
+     * been changed) and maintain the current selection and expansion state.
+     * @param node If this is non-null, the view is scrolled to make it visible.
+     */
+    public void revalidateGroups(GroupTreeNode node) {
+        revalidateGroups(groupsTree.getSelectionPaths(), getExpandedPaths(), node);
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        if (e.getSource() == refresh) {
+            valueChanged(null);
+        } else if (e.getSource() == newButton) {
+            GroupDialog gd = new GroupDialog(frame, panel, null);
+            gd.setVisible(true); // gd.show(); -> deprecated since 1.5
+            if (gd.okPressed()) {
+                AbstractGroup newGroup = gd.getResultingGroup();
+                GroupTreeNode newNode = new GroupTreeNode(newGroup);
+                groupsRoot.add(newNode);
+                revalidateGroups();
+                UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(
+                        GroupSelector.this, groupsRoot, newNode,
+                        UndoableAddOrRemoveGroup.ADD_NODE);
+                panel.undoManager.addEdit(undo);
+                panel.markBaseChanged();
+                frame.output(Globals.lang("Created_group_\"%0\".",
+                        newGroup.getName()));
+            }
+        } else if (e.getSource() == autoGroup) {
+            AutoGroupDialog gd = new AutoGroupDialog(frame, panel,
+                    GroupSelector.this, groupsRoot, Globals.prefs.get("groupsDefaultField"), " .,", ",");
+            gd.setVisible(true); // gd.show(); -> deprecated since 1.5
+            // gd does the operation itself
+        } else if (e.getSource() instanceof JCheckBox) {
+            valueChanged(null);
+        } else if (e.getSource() instanceof JCheckBoxMenuItem) {
+            valueChanged(null);
+        } else if (e.getSource() instanceof JRadioButtonMenuItem) {
+            valueChanged(null);
+        }
+    }
+
+    @Override
+    public void componentOpening() {
+        valueChanged(null);
+    }
+
+    @Override
+    public void componentClosing() {
+        if (panel != null) {// panel may be null if no file is open any more
+            panel.stopShowingGroup();
+            panel.mainTable.stopShowingFloatGrouping();
+        }
+        frame.groupToggle.setSelected(false);
+    }
+
+    public void setGroups(GroupTreeNode groupsRoot) {
+        groupsTree.setModel(groupsTreeModel = new DefaultTreeModel(groupsRoot));
+        this.groupsRoot = groupsRoot;
+        if (Globals.prefs.getBoolean("groupExpandTree")) {
+                groupsTree.expandSubtree(groupsRoot);
+    }
+    }
+
+    /**
+     * Adds the specified node as a child of the current root. The group
+     * contained in <b>newGroups </b> must not be of type AllEntriesGroup, since
+     * every tree has exactly one AllEntriesGroup (its root). The <b>newGroups
+     * </b> are inserted directly, i.e. they are not deepCopy()'d.
+     */
+    public void addGroups(GroupTreeNode newGroups, CompoundEdit ce) {
+        // paranoia: ensure that there are never two instances of AllEntriesGroup
+        if (newGroups.getGroup() instanceof AllEntriesGroup) {
+            return; // this should be impossible anyway
+        }
+        groupsRoot.add(newGroups);
+        UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(this,
+                groupsRoot, newGroups, UndoableAddOrRemoveGroup.ADD_NODE);
+        ce.addEdit(undo);
+    }
+
+    private abstract class NodeAction extends AbstractAction {
+
+        protected GroupTreeNode m_node = null;
+
+        public NodeAction(String s) {
+            super(s);
+        }
+
+        public GroupTreeNode getNode() {
+            return m_node;
+        }
+
+        public void setNode(GroupTreeNode node) {
+            this.m_node = node;
+        }
+
+        /** Returns the node to use in this action. If a node has been
+         * set explicitly (via setNode), it is returned. Otherwise, the first
+         * node in the current selection is returned. If all this fails, null
+         * is returned. */
+        public GroupTreeNode getNodeToUse() {
+            if (m_node != null) {
+                return m_node;
+            }
+            TreePath path = groupsTree.getSelectionPath();
+            if (path != null) {
+                return (GroupTreeNode) path.getLastPathComponent();
+            }
+            return null;
+        }
+    }
+    final AbstractAction editGroupAction = new EditGroupAction();
+    final NodeAction editGroupPopupAction = new EditGroupAction();
+    final NodeAction addGroupPopupAction = new AddGroupAction();
+    final NodeAction addSubgroupPopupAction = new AddSubgroupAction();
+    final NodeAction removeGroupAndSubgroupsPopupAction = new RemoveGroupAndSubgroupsAction();
+    final NodeAction removeSubgroupsPopupAction = new RemoveSubgroupsAction();
+    final NodeAction removeGroupKeepSubgroupsPopupAction = new RemoveGroupKeepSubgroupsAction();
+    final NodeAction moveNodeUpPopupAction = new MoveNodeUpAction();
+    final NodeAction moveNodeDownPopupAction = new MoveNodeDownAction();
+    final NodeAction moveNodeLeftPopupAction = new MoveNodeLeftAction();
+    final NodeAction moveNodeRightPopupAction = new MoveNodeRightAction();
+    final NodeAction moveNodeUpAction = new MoveNodeUpAction();
+    final NodeAction moveNodeDownAction = new MoveNodeDownAction();
+    final NodeAction moveNodeLeftAction = new MoveNodeLeftAction();
+    final NodeAction moveNodeRightAction = new MoveNodeRightAction();
+    final NodeAction expandSubtreePopupAction = new ExpandSubtreeAction();
+    final NodeAction collapseSubtreePopupAction = new CollapseSubtreeAction();
+    final NodeAction sortDirectSubgroupsPopupAction = new SortDirectSubgroupsAction();
+    final NodeAction sortAllSubgroupsPopupAction = new SortAllSubgroupsAction();
+    final AddToGroupAction addToGroup = new AddToGroupAction(false);
+    final AddToGroupAction moveToGroup = new AddToGroupAction(true);
+    final RemoveFromGroupAction removeFromGroup = new RemoveFromGroupAction();
+
+    private class EditGroupAction extends NodeAction {
+
+        public EditGroupAction() {
+            super(Globals.lang("Edit group"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            final GroupTreeNode node = getNodeToUse();
+            final AbstractGroup oldGroup = node.getGroup();
+            final GroupDialog gd = new GroupDialog(frame, panel, oldGroup);
+            gd.setVisible(true);
+            if (gd.okPressed()) {
+                AbstractGroup newGroup = gd.getResultingGroup();
+                AbstractUndoableEdit undoAddPreviousEntries = gd.getUndoForAddPreviousEntries();
+                UndoableModifyGroup undo = new UndoableModifyGroup(
+                        GroupSelector.this, groupsRoot, node, newGroup);
+                node.setGroup(newGroup);
+                revalidateGroups(node);
+                // Store undo information.
+                if (undoAddPreviousEntries == null) {
+                    panel.undoManager.addEdit(undo);
+                } else {
+                    NamedCompound nc = new NamedCompound("Modify Group"); // JZTODO lyrics
+                    nc.addEdit(undo);
+                    nc.addEdit(undoAddPreviousEntries);
+                    nc.end();
+                    panel.undoManager.addEdit(nc);
+                }
+                panel.markBaseChanged();
+                frame.output(Globals.lang("Modified group \"%0\".",
+                        newGroup.getName()));
+            }
+        }
+    }
+
+    private class AddGroupAction extends NodeAction {
+
+        public AddGroupAction() {
+            super(Globals.lang("Add Group"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            final GroupTreeNode node = getNodeToUse();
+            final GroupDialog gd = new GroupDialog(frame, panel, null);
+            gd.setVisible(true);
+            if (!gd.okPressed()) {
+                return; // ignore
+            }
+            final AbstractGroup newGroup = gd.getResultingGroup();
+            final GroupTreeNode newNode = new GroupTreeNode(newGroup);
+            if (node == null) {
+                groupsRoot.add(newNode);
+            } else {
+                ((GroupTreeNode) node.getParent()).insert(newNode, node.getParent().getIndex(node) + 1);
+            }
+            UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(
+                    GroupSelector.this, groupsRoot, newNode,
+                    UndoableAddOrRemoveGroup.ADD_NODE);
+            revalidateGroups();
+            groupsTree.expandPath(new TreePath(
+                    (node != null ? node : groupsRoot).getPath()));
+            // Store undo information.
+            panel.undoManager.addEdit(undo);
+            panel.markBaseChanged();
+            frame.output(Globals.lang("Added group \"%0\".",
+                    newGroup.getName()));
+        }
+    }
+
+    private class AddSubgroupAction extends NodeAction {
+
+        public AddSubgroupAction() {
+            super(Globals.lang("Add Subgroup"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            final GroupTreeNode node = getNodeToUse();
+            final GroupDialog gd = new GroupDialog(frame, panel, null);
+            gd.setVisible(true);
+            if (!gd.okPressed()) {
+                return; // ignore
+            }
+            final AbstractGroup newGroup = gd.getResultingGroup();
+            final GroupTreeNode newNode = new GroupTreeNode(newGroup);
+            node.add(newNode);
+            UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(
+                    GroupSelector.this, groupsRoot, newNode,
+                    UndoableAddOrRemoveGroup.ADD_NODE);
+            revalidateGroups();
+            groupsTree.expandPath(new TreePath(node.getPath()));
+            // Store undo information.
+            panel.undoManager.addEdit(undo);
+            panel.markBaseChanged();
+            frame.output(Globals.lang("Added group \"%0\".",
+                    newGroup.getName()));
+        }
+    }
+
+    private class RemoveGroupAndSubgroupsAction extends NodeAction {
+
+        public RemoveGroupAndSubgroupsAction() {
+            super(Globals.lang("Remove group and subgroups"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            final GroupTreeNode node = getNodeToUse();
+            final AbstractGroup group = node.getGroup();
+            int conf = JOptionPane.showConfirmDialog(frame, Globals.lang("Remove group \"%0\" and its subgroups?", group.getName()),
+                    Globals.lang("Remove group and subgroups"),
+                    JOptionPane.YES_NO_OPTION);
+            if (conf == JOptionPane.YES_OPTION) {
+                final UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(
+                        GroupSelector.this, groupsRoot, node,
+                        UndoableAddOrRemoveGroup.REMOVE_NODE_AND_CHILDREN);
+                node.removeFromParent();
+                revalidateGroups();
+                // Store undo information.
+                panel.undoManager.addEdit(undo);
+                panel.markBaseChanged();
+                frame.output(Globals.lang("Removed group \"%0\" and its subgroups.",
+                        group.getName()));
+            }
+        }
+    }
+
+    private class RemoveSubgroupsAction extends NodeAction {
+
+        public RemoveSubgroupsAction() {
+            super(Globals.lang("Remove all subgroups"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            final GroupTreeNode node = getNodeToUse();
+            final AbstractGroup group = node.getGroup();
+            int conf = JOptionPane.showConfirmDialog(frame, Globals.lang("Remove all subgroups of \"%0\"?", group.getName()),
+                    Globals.lang("Remove all subgroups"),
+                    JOptionPane.YES_NO_OPTION);
+            if (conf == JOptionPane.YES_OPTION) {
+                final UndoableModifySubtree undo = new UndoableModifySubtree(
+                        GroupSelector.this, getGroupTreeRoot(), node,
+                        "Remove all subgroups");
+                node.removeAllChildren();
+                revalidateGroups();
+                // Store undo information.
+                panel.undoManager.addEdit(undo);
+                panel.markBaseChanged();
+                frame.output(Globals.lang("Removed all subgroups of group \"%0\".",
+                        group.getName()));
+            }
+        }
+    }
+
+    private class RemoveGroupKeepSubgroupsAction extends NodeAction {
+
+        public RemoveGroupKeepSubgroupsAction() {
+            super(Globals.lang("Remove group, keep subgroups"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            final GroupTreeNode node = getNodeToUse();
+            final AbstractGroup group = node.getGroup();
+            int conf = JOptionPane.showConfirmDialog(frame, Globals.lang("Remove group \"%0\"?", group.getName()), Globals.lang("Remove group"), JOptionPane.YES_NO_OPTION);
+            if (conf == JOptionPane.YES_OPTION) {
+                final UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(
+                        GroupSelector.this, groupsRoot, node,
+                        UndoableAddOrRemoveGroup.REMOVE_NODE_KEEP_CHILDREN);
+                final GroupTreeNode parent = (GroupTreeNode) node.getParent();
+                final int childIndex = parent.getIndex(node);
+                node.removeFromParent();
+                while (node.getChildCount() > 0) {
+                    parent.insert((GroupTreeNode) node.getFirstChild(),
+                            childIndex);
+                }
+                revalidateGroups();
+                // Store undo information.
+                panel.undoManager.addEdit(undo);
+                panel.markBaseChanged();
+                frame.output(Globals.lang("Removed group \"%0\".",
+                        group.getName()));
+            }
+        }
+    }
+
+    public TreePath getSelectionPath() {
+        return groupsTree.getSelectionPath();
+    }
+
+    private class SortDirectSubgroupsAction extends NodeAction {
+
+        public SortDirectSubgroupsAction() {
+            super(Globals.lang("Immediate subgroups"));
+        }
+
+        public void actionPerformed(ActionEvent ae) {
+            final GroupTreeNode node = getNodeToUse();
+            final UndoableModifySubtree undo = new UndoableModifySubtree(
+                    GroupSelector.this, getGroupTreeRoot(), node, Globals.lang("sort subgroups"));
+            groupsTree.sort(node, false);
+            panel.undoManager.addEdit(undo);
+            panel.markBaseChanged();
+            frame.output(Globals.lang("Sorted immediate subgroups."));
+        }
+    }
+
+    private class SortAllSubgroupsAction extends NodeAction {
+
+        public SortAllSubgroupsAction() {
+            super(Globals.lang("All subgroups (recursively)"));
+        }
+
+        public void actionPerformed(ActionEvent ae) {
+            final GroupTreeNode node = getNodeToUse();
+            final UndoableModifySubtree undo = new UndoableModifySubtree(
+                    GroupSelector.this, getGroupTreeRoot(), node, Globals.lang("sort subgroups"));
+            groupsTree.sort(node, true);
+            panel.undoManager.addEdit(undo);
+            panel.markBaseChanged(); // JZTODO lyrics
+            frame.output(Globals.lang("Sorted all subgroups recursively."));
+        }
+    }
+    public final AbstractAction clearHighlightAction = new AbstractAction(Globals.lang("Clear highlight")) {
+
+        public void actionPerformed(ActionEvent ae) {
+            groupsTree.setHighlight3Cells(null);
+        }
+    };
+
+    private class ExpandSubtreeAction extends NodeAction {
+
+        public ExpandSubtreeAction() {
+            super(Globals.lang("Expand subtree"));
+        }
+
+        public void actionPerformed(ActionEvent ae) {
+            final GroupTreeNode node = getNodeToUse();
+            TreePath path = new TreePath(node.getPath());
+            groupsTree.expandSubtree((GroupTreeNode) path.getLastPathComponent());
+            revalidateGroups();
+        }
+    }
+
+    private class CollapseSubtreeAction extends NodeAction {
+
+        public CollapseSubtreeAction() {
+            super(Globals.lang("Collapse subtree"));
+        }
+
+        public void actionPerformed(ActionEvent ae) {
+            final GroupTreeNode node = getNodeToUse();
+            TreePath path = new TreePath(node.getPath());
+            groupsTree.collapseSubtree((GroupTreeNode) path.getLastPathComponent());
+            revalidateGroups();
+        }
+    }
+
+    private class MoveNodeUpAction extends NodeAction {
+
+        public MoveNodeUpAction() {
+            super(Globals.lang("Up"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            final GroupTreeNode node = getNodeToUse();
+            moveNodeUp(node, false);
+        }
+    }
+
+    private class MoveNodeDownAction extends NodeAction {
+
+        public MoveNodeDownAction() {
+            super(Globals.lang("Down"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            final GroupTreeNode node = getNodeToUse();
+            moveNodeDown(node, false);
+        }
+    }
+
+    private class MoveNodeLeftAction extends NodeAction {
+
+        public MoveNodeLeftAction() {
+            super(Globals.lang("Left"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            final GroupTreeNode node = getNodeToUse();
+            moveNodeLeft(node, false);
+        }
+    }
+
+    private class MoveNodeRightAction extends NodeAction {
+
+        public MoveNodeRightAction() {
+            super(Globals.lang("Right"));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            final GroupTreeNode node = getNodeToUse();
+            moveNodeRight(node, false);
+        }
+    }
+
+    /**
+     * @param node The node to move
+     * @return true if move was successful, false if not.
+     */
+    public boolean moveNodeUp(GroupTreeNode node, boolean checkSingleSelection) {
+        if (checkSingleSelection) {
+            if (groupsTree.getSelectionCount() != 1) {
+                frame.output(Globals.lang("Please select exactly one group to move."));
+                return false; // not possible
+            }
+        }
+        AbstractUndoableEdit undo = null;
+        if (!node.canMoveUp() || (undo = node.moveUp(GroupSelector.this)) == null) {
+            frame.output(Globals.lang(
+                    "Cannot move group \"%0\" up.", node.getGroup().getName()));
+            return false; // not possible
+        }
+        // update selection/expansion state (not really needed when
+        // moving among siblings, but I'm paranoid)
+        revalidateGroups(groupsTree.refreshPaths(groupsTree.getSelectionPaths()),
+                groupsTree.refreshPaths(getExpandedPaths()));
+        concludeMoveGroup(undo, node);
+        return true;
+    }
+
+    /**
+     * @param node The node to move
+     * @return true if move was successful, false if not.
+     */
+    public boolean moveNodeDown(GroupTreeNode node, boolean checkSingleSelection) {
+        if (checkSingleSelection) {
+            if (groupsTree.getSelectionCount() != 1) {
+                frame.output(Globals.lang("Please select exactly one group to move."));
+                return false; // not possible
+            }
+        }
+        AbstractUndoableEdit undo = null;
+        if (!node.canMoveDown() || (undo = node.moveDown(GroupSelector.this)) == null) {
+            frame.output(Globals.lang(
+                    "Cannot move group \"%0\" down.", node.getGroup().getName()));
+            return false; // not possible
+        }
+        // update selection/expansion state (not really needed when
+        // moving among siblings, but I'm paranoid)
+        revalidateGroups(groupsTree.refreshPaths(groupsTree.getSelectionPaths()),
+                groupsTree.refreshPaths(getExpandedPaths()));
+        concludeMoveGroup(undo, node);
+        return true;
+    }
+
+    /**
+     * @param node The node to move
+     * @return true if move was successful, false if not.
+     */
+    public boolean moveNodeLeft(GroupTreeNode node, boolean checkSingleSelection) {
+        if (checkSingleSelection) {
+            if (groupsTree.getSelectionCount() != 1) {
+                frame.output(Globals.lang("Please select exactly one group to move."));
+                return false; // not possible
+            }
+        }
+        AbstractUndoableEdit undo = null;
+        if (!node.canMoveLeft() || (undo = node.moveLeft(GroupSelector.this)) == null) {
+            frame.output(Globals.lang(
+                    "Cannot move group \"%0\" left.", node.getGroup().getName()));
+            return false; // not possible
+        }
+        // update selection/expansion state
+        revalidateGroups(groupsTree.refreshPaths(groupsTree.getSelectionPaths()),
+                groupsTree.refreshPaths(getExpandedPaths()));
+        concludeMoveGroup(undo, node);
+        return true;
+    }
+
+    /**
+     * @param node The node to move
+     * @return true if move was successful, false if not.
+     */
+    public boolean moveNodeRight(GroupTreeNode node, boolean checkSingleSelection) {
+        if (checkSingleSelection) {
+            if (groupsTree.getSelectionCount() != 1) {
+                frame.output(Globals.lang("Please select exactly one group to move."));
+                return false; // not possible
+            }
+        }
+        AbstractUndoableEdit undo = null;
+        if (!node.canMoveRight() || (undo = node.moveRight(GroupSelector.this)) == null) {
+            frame.output(Globals.lang(
+                    "Cannot move group \"%0\" right.", node.getGroup().getName()));
+            return false; // not possible
+        }
+        // update selection/expansion state
+        revalidateGroups(groupsTree.refreshPaths(groupsTree.getSelectionPaths()),
+                groupsTree.refreshPaths(getExpandedPaths()));
+        concludeMoveGroup(undo, node);
+        return true;
+    }
+
+    /**
+     * Concludes the moving of a group tree node by storing the specified
+     * undo information, marking the change, and setting the status line.
+     * @param undo Undo information for the move operation.
+     * @param node The node that has been moved.
+     */
+    public void concludeMoveGroup(AbstractUndoableEdit undo, GroupTreeNode node) {
+        panel.undoManager.addEdit(undo);
+        panel.markBaseChanged();
+        frame.output(Globals.lang("Moved group \"%0\".",
+                node.getGroup().getName()));
+    }
+
+    public void concludeAssignment(AbstractUndoableEdit undo, GroupTreeNode node, int assignedEntries) {
+        if (undo == null) {
+            frame.output(Globals.lang("The group \"%0\" already contains the selection.",
+                    new String[]{node.getGroup().getName()}));
+            return;
+        }
+        panel.undoManager.addEdit(undo);
+        panel.markBaseChanged();
+        panel.updateEntryEditorIfShowing();
+        final String groupName = node.getGroup().getName();
+        if (assignedEntries == 1) {
+            frame.output(Globals.lang("Assigned 1 entry to group \"%0\".", groupName));
+        } else {
+            frame.output(Globals.lang("Assigned %0 entries to group \"%1\".",
+                    String.valueOf(assignedEntries), groupName));
+    }
+    }
+    JMenu moveSubmenu = new JMenu(Globals.lang("Move"));
+    JMenu sortSubmenu = new JMenu(Globals.lang("Sort alphabetically")); // JZTODO lyrics
+
+    public GroupTreeNode getGroupTreeRoot() {
+        return groupsRoot;
+    }
+
+    public Enumeration<TreePath> getExpandedPaths() {
+        return groupsTree.getExpandedDescendants(
+                new TreePath(groupsRoot.getPath()));
+    }
+
+    /** panel may be null to indicate that no file is currently open. */
+    public void setActiveBasePanel(BasePanel panel) {
+        super.setActiveBasePanel(panel);
+        if (panel == null) { // hide groups
+            frame.sidePaneManager.hide("groups");
+            return;
+        }
+        MetaData metaData = panel.metaData();
+        if (metaData.getGroups() != null) {
+            setGroups(metaData.getGroups());
+        } else {
+            GroupTreeNode newGroupsRoot = new GroupTreeNode(new AllEntriesGroup());
+            metaData.setGroups(newGroupsRoot);
+            setGroups(newGroupsRoot);
+        }
+
+        // auto show/hide groups interface
+        if (Globals.prefs.getBoolean("groupAutoShow")
+                && !groupsRoot.isLeaf()) { // groups were defined
+            frame.sidePaneManager.show("groups");
+            frame.groupToggle.setSelected(true);
+        } else if (Globals.prefs.getBoolean("groupAutoHide")
+                && groupsRoot.isLeaf()) { // groups were not defined
+            frame.sidePaneManager.hide("groups");
+            frame.groupToggle.setSelected(false);
+        }
+
+        synchronized (getTreeLock()) {
+            validateTree();
+        }
+
+
+    }
+
+    /**
+     * This method is required by the ErrorMessageDisplay interface, and lets this class
+     * serve as a callback for regular expression exceptions happening in DatabaseSearch.
+     * @param errorMessage
+     */
+    public void reportError(String errorMessage) {
+        // this should never happen, since regular expressions are checked for
+        // correctness by the edit group dialog, and no other errors should
+        // occur in a search
+        System.err.println("Error in group search: " + errorMessage
+                + ". Please report this on www.sf.net/projects/jabref");
+    }
+
+    /**
+     * This method is required by the ErrorMessageDisplay interface, and lets this class
+     * serve as a callback for regular expression exceptions happening in DatabaseSearch.
+     * @param errorMessage
+     */
+    public void reportError(String errorMessage, Exception exception) {
+        reportError(errorMessage);
+    }
+
+    /**
+     * Highlight all groups that contain any/all of the specified entries.
+     * If entries is null or has zero length, highlight is cleared.
+     */
+    public void showMatchingGroups(BibtexEntry[] entries, boolean requireAll) {
+        if (entries == null || entries.length == 0) { // nothing selected
+            groupsTree.setHighlight3Cells(null);
+            groupsTree.revalidate();
+            return;
+        }
+        GroupTreeNode node;
+        AbstractGroup group;
+        Vector<GroupTreeNode> vec = new Vector<GroupTreeNode>();
+        for (Enumeration<GroupTreeNode> e = groupsRoot.preorderEnumeration(); e.hasMoreElements();) {
+            node = e.nextElement();
+            group = node.getGroup();
+            int i;
+            for (i = 0; i < entries.length; ++i) {
+                if (requireAll) {
+                    if (!group.contains(entries[i])) {
+                        break;
+                    }
+                } else {
+                    if (group.contains(entries[i])) {
+                        vec.add(node);
+                }
+            }
+            }
+            if (requireAll && i >= entries.length) // did not break from loop
+            {
+                vec.add(node);
+        }
+        }
+        groupsTree.setHighlight3Cells(vec.toArray());
+        // ensure that all highlighted nodes are visible
+        for (int i = 0; i < vec.size(); ++i) {
+            node = (GroupTreeNode) vec.elementAt(i).getParent();
+            if (node != null) {
+                groupsTree.expandPath(new TreePath(node.getPath()));
+        }
+        }
+        groupsTree.revalidate();
+    }
+
+    /** Show groups that, if selected, would show at least one
+     * of the entries found in the specified search. */
+    protected void showOverlappingGroups(List<BibtexEntry> matches) { //DatabaseSearch search) {
+      GroupTreeNode node;
+      SearchRule rule;
+      BibtexEntry entry;
+      Vector<GroupTreeNode> vec = new Vector<GroupTreeNode>();
+      Map<String, String> dummyMap = new HashMap<String, String>(); // just because I don't want to use null...
+        for (Enumeration<GroupTreeNode> e = groupsRoot.depthFirstEnumeration(); e.hasMoreElements();) {
+          node = e.nextElement();
+          rule = node.getSearchRule();
+            for (Iterator<BibtexEntry> it = matches.iterator(); it.hasNext();) {
+              entry = it.next();
+                if (rule.applyRule(dummyMap, entry) == 0) {
+                      continue;
+                }
+              vec.add(node);
+              break;
+          }
+      }
+      groupsTree.setHighlight2Cells(vec.toArray());
+    }
+
+    public GroupsTree getGroupsTree()
+    {
+    	return this.groupsTree;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java b/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java
index f4a12bf..8cdd87c 100644
--- a/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java
+++ b/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java
@@ -1,171 +1,171 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.awt.*;
-
-import javax.swing.BorderFactory;
-import javax.swing.ImageIcon;
-import javax.swing.JLabel;
-import javax.swing.JTree;
-import javax.swing.tree.DefaultTreeCellRenderer;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-
-/**
- * Renders a GroupTreeNode using its group's getName() method, rather that its
- * toString() method.
- * 
- * @author jzieren
- */
-public class GroupTreeCellRenderer extends DefaultTreeCellRenderer {
-
-    public static final int MAX_DISPLAYED_LETTERS = 35;
-
-    /** The cell over which the user is currently dragging */
-    protected Object highlight1Cell = null;
-    protected Object[] highlight2Cells = null;
-    protected Object[] highlight3Cells = null;
-    protected Object highlightBorderCell = null;
-
-    public static ImageIcon
-      groupRefiningIcon = GUIGlobals.getImage("groupRefining"),
-      groupIncludingIcon = GUIGlobals.getImage("groupIncluding"),
-      groupRegularIcon = null;
-
-
-    public Component getTreeCellRendererComponent(JTree tree, Object value,
-            boolean selected, boolean expanded, boolean leaf, int row,
-            boolean hasFocus) {
-        if (value == highlight1Cell)
-            selected = true; // show as selected
-        Component c = super.getTreeCellRendererComponent(tree, value, selected,
-                expanded, leaf, row, hasFocus);
-        // this is sometimes called from deep within somewhere, with a dummy 
-        // value (probably for layout etc.), so we've got to check here!
-        if (!(value instanceof GroupTreeNode))
-            return c;
-        AbstractGroup group = ((GroupTreeNode) value).getGroup();
-        if (group == null || !(c instanceof JLabel))
-            return c; // sanity check
-        JLabel label = (JLabel) c;
-
-        if (highlightBorderCell != null && highlightBorderCell == value)
-            label.setBorder(BorderFactory.createLineBorder(Color.BLACK));
-        else
-            label.setBorder(BorderFactory.createEmptyBorder());
-        boolean italics = Globals.prefs.getBoolean("groupShowDynamic")
-        && group.isDynamic();
-        boolean red = false;
-        if (highlight2Cells != null) {
-            for (int i = 0; i < highlight2Cells.length; ++i) {
-                if (highlight2Cells[i] == value) {
-                    // label.setForeground(Color.RED);
-                    red = true;
-                    break;
-                }
-            }
-        }
-        boolean underline = false;
-        if (highlight3Cells != null) {
-            for (int i = 0; i < highlight3Cells.length; ++i) {
-                if (highlight3Cells[i] == value) {
-                    underline = true;
-                    break;
-                }
-            }
-        }
-        String name = group.getName();
-        if (name.length() > MAX_DISPLAYED_LETTERS)
-            name = name.substring(0, MAX_DISPLAYED_LETTERS-2)+"...";
-        StringBuffer sb = new StringBuffer();
-        sb.append("<html>");
-        if (red)
-            sb.append("<font color=\"#FF0000\">");
-        if (underline)
-            sb.append("<u>");
-        if (italics)
-            sb.append("<i>");
-        sb.append(Util.quoteForHTML(name));
-        if (italics)
-            sb.append("</i>");
-        if (underline)
-            sb.append("</u>");
-        if (red)
-            sb.append("</font>");
-        sb.append("</html>");
-        final String text = sb.toString();
-
-        if (!label.getText().equals(text))
-            label.setText(text);
-        label.setToolTipText("<html>" + group.getShortDescription() + "</html>");
-        if (Globals.prefs.getBoolean("groupShowIcons")) {
-            switch (group.getHierarchicalContext()) {
-            case AbstractGroup.REFINING:
-                if (label.getIcon() != groupRefiningIcon)
-                    label.setIcon(groupRefiningIcon);
-                break;
-            case AbstractGroup.INCLUDING:
-                if (label.getIcon() != groupIncludingIcon)
-                    label.setIcon(groupIncludingIcon);
-                break;
-            default:
-                if (label.getIcon() != groupRegularIcon)
-                    label.setIcon(groupRegularIcon);
-                break;
-            }
-        } else {
-            label.setIcon(null);
-        }
-        return c;
-    }
-
-    /**
-     * For use when dragging: The sepcified cell is always rendered as selected.
-     * 
-     * @param cell
-     *            The cell over which the user is currently dragging.
-     */
-    void setHighlight1Cell(Object cell) {
-        this.highlight1Cell = cell;
-    }
-
-    /**
-     * Highlights the specified cells (in red), or disables highlight if cells ==
-     * null.
-     */
-    void setHighlight2Cells(Object[] cells) {
-        this.highlight2Cells = cells;
-    }
-
-    /**
-     * Highlights the specified cells (by unterlining), or disables highlight if
-     * cells == null.
-     */
-    void setHighlight3Cells(Object[] cells) {
-        this.highlight3Cells = cells;
-    }
-
-    /**
-     * Highlights the specified cells (by drawing a border around it), 
-     * or disables highlight if highlightBorderCell == null.
-     */
-    void setHighlightBorderCell(Object highlightBorderCell) {
-        this.highlightBorderCell = highlightBorderCell;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.awt.*;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+
+/**
+ * Renders a GroupTreeNode using its group's getName() method, rather that its
+ * toString() method.
+ * 
+ * @author jzieren
+ */
+public class GroupTreeCellRenderer extends DefaultTreeCellRenderer {
+
+    public static final int MAX_DISPLAYED_LETTERS = 35;
+
+    /** The cell over which the user is currently dragging */
+    protected Object highlight1Cell = null;
+    protected Object[] highlight2Cells = null;
+    protected Object[] highlight3Cells = null;
+    protected Object highlightBorderCell = null;
+
+    public static ImageIcon
+      groupRefiningIcon = GUIGlobals.getImage("groupRefining"),
+      groupIncludingIcon = GUIGlobals.getImage("groupIncluding"),
+      groupRegularIcon = null;
+
+
+    public Component getTreeCellRendererComponent(JTree tree, Object value,
+            boolean selected, boolean expanded, boolean leaf, int row,
+            boolean hasFocus) {
+        if (value == highlight1Cell)
+            selected = true; // show as selected
+        Component c = super.getTreeCellRendererComponent(tree, value, selected,
+                expanded, leaf, row, hasFocus);
+        // this is sometimes called from deep within somewhere, with a dummy 
+        // value (probably for layout etc.), so we've got to check here!
+        if (!(value instanceof GroupTreeNode))
+            return c;
+        AbstractGroup group = ((GroupTreeNode) value).getGroup();
+        if (group == null || !(c instanceof JLabel))
+            return c; // sanity check
+        JLabel label = (JLabel) c;
+
+        if (highlightBorderCell != null && highlightBorderCell == value)
+            label.setBorder(BorderFactory.createLineBorder(Color.BLACK));
+        else
+            label.setBorder(BorderFactory.createEmptyBorder());
+        boolean italics = Globals.prefs.getBoolean("groupShowDynamic")
+        && group.isDynamic();
+        boolean red = false;
+        if (highlight2Cells != null) {
+            for (int i = 0; i < highlight2Cells.length; ++i) {
+                if (highlight2Cells[i] == value) {
+                    // label.setForeground(Color.RED);
+                    red = true;
+                    break;
+                }
+            }
+        }
+        boolean underline = false;
+        if (highlight3Cells != null) {
+            for (int i = 0; i < highlight3Cells.length; ++i) {
+                if (highlight3Cells[i] == value) {
+                    underline = true;
+                    break;
+                }
+            }
+        }
+        String name = group.getName();
+        if (name.length() > MAX_DISPLAYED_LETTERS)
+            name = name.substring(0, MAX_DISPLAYED_LETTERS-2)+"...";
+        StringBuffer sb = new StringBuffer();
+        sb.append("<html>");
+        if (red)
+            sb.append("<font color=\"#FF0000\">");
+        if (underline)
+            sb.append("<u>");
+        if (italics)
+            sb.append("<i>");
+        sb.append(Util.quoteForHTML(name));
+        if (italics)
+            sb.append("</i>");
+        if (underline)
+            sb.append("</u>");
+        if (red)
+            sb.append("</font>");
+        sb.append("</html>");
+        final String text = sb.toString();
+
+        if (!label.getText().equals(text))
+            label.setText(text);
+        label.setToolTipText("<html>" + group.getShortDescription() + "</html>");
+        if (Globals.prefs.getBoolean("groupShowIcons")) {
+            switch (group.getHierarchicalContext()) {
+            case AbstractGroup.REFINING:
+                if (label.getIcon() != groupRefiningIcon)
+                    label.setIcon(groupRefiningIcon);
+                break;
+            case AbstractGroup.INCLUDING:
+                if (label.getIcon() != groupIncludingIcon)
+                    label.setIcon(groupIncludingIcon);
+                break;
+            default:
+                if (label.getIcon() != groupRegularIcon)
+                    label.setIcon(groupRegularIcon);
+                break;
+            }
+        } else {
+            label.setIcon(null);
+        }
+        return c;
+    }
+
+    /**
+     * For use when dragging: The sepcified cell is always rendered as selected.
+     * 
+     * @param cell
+     *            The cell over which the user is currently dragging.
+     */
+    void setHighlight1Cell(Object cell) {
+        this.highlight1Cell = cell;
+    }
+
+    /**
+     * Highlights the specified cells (in red), or disables highlight if cells ==
+     * null.
+     */
+    void setHighlight2Cells(Object[] cells) {
+        this.highlight2Cells = cells;
+    }
+
+    /**
+     * Highlights the specified cells (by unterlining), or disables highlight if
+     * cells == null.
+     */
+    void setHighlight3Cells(Object[] cells) {
+        this.highlight3Cells = cells;
+    }
+
+    /**
+     * Highlights the specified cells (by drawing a border around it), 
+     * or disables highlight if highlightBorderCell == null.
+     */
+    void setHighlightBorderCell(Object highlightBorderCell) {
+        this.highlightBorderCell = highlightBorderCell;
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/GroupTreeNode.java b/src/java/net/sf/jabref/groups/GroupTreeNode.java
index 9013af4..2a1df31 100644
--- a/src/java/net/sf/jabref/groups/GroupTreeNode.java
+++ b/src/java/net/sf/jabref/groups/GroupTreeNode.java
@@ -1,385 +1,385 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Vector;
-
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.TreeNode;
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.SearchRule;
-
-/**
- * A node in the groups tree that holds exactly one AbstractGroup.
- * 
- * @author jzieren
- */
-public class GroupTreeNode extends DefaultMutableTreeNode implements
-		Transferable {
-	public static final DataFlavor flavor;
-	public static final DataFlavor[] flavors;
-
-	static {
-		DataFlavor df = null;
-		try {
-			df = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType
-					+ ";class=net.sf.jabref.groups.GroupTreeNode");
-		} catch (ClassNotFoundException e) {
-			// never happens
-		}
-		flavor = df;
-		flavors = new DataFlavor[] { flavor };
-	}
-
-	/**
-	 * Creates this node and associates the specified group with it.
-	 */
-	public GroupTreeNode(AbstractGroup group) {
-		setGroup(group);
-	}
-
-	/**
-	 * @return The group associated with this node.
-	 */
-	public AbstractGroup getGroup() {
-		return (AbstractGroup) getUserObject();
-	}
-
-	/**
-	 * Associates the specified group with this node.
-	 */
-	public void setGroup(AbstractGroup group) {
-		setUserObject(group);
-	}
-
-	/**
-	 * Returns a textual representation of this node and its children. This
-	 * representation contains both the tree structure and the textual
-	 * representations of the group associated with each node. It thus allows a
-	 * complete reconstruction of this object and its children.
-	 */
-	public String getTreeAsString() {
-		StringBuffer sb = new StringBuffer();
-		Enumeration<GroupTreeNode> e = preorderEnumeration();
-		GroupTreeNode cursor;
-		while (e.hasMoreElements()) {
-			cursor = e.nextElement();
-            sb.append(cursor.getLevel()).append(" ").append(cursor.getGroup().toString()).append("\n");
-		}
-		return sb.toString();
-	}
-
-	/**
-	 * Creates a deep copy of this node and all of its children, including all
-	 * groups.
-	 * 
-	 * @return This object's deep copy.
-	 */
-	public GroupTreeNode deepCopy() {
-		GroupTreeNode copy = new GroupTreeNode(getGroup());
-		for (int i = 0; i < getChildCount(); ++i)
-			copy.add(((GroupTreeNode) getChildAt(i)).deepCopy());
-		return copy;
-	}
-        
-        /**
-         * Update all groups, if necessary, to handle the situation where the group
-         * tree is applied to a different BibtexDatabase than it was created for. This
-         * is for instance used when updating the group tree due to an external change.
-         *
-         * @param db The database to refresh for.
-         */
-        public void refreshGroupsForNewDatabase(BibtexDatabase db) {
-            for (int i = 0; i < getChildCount(); ++i) {
-                GroupTreeNode node = (GroupTreeNode)getChildAt(i);
-                node.getGroup().refreshForNewDatabase(db);
-                node.refreshGroupsForNewDatabase(db);
-            }
-        }
-      
-	/**
-	 * @return An indexed path from the root node to this node. The elements in
-	 *         the returned array represent the child index of each node in the
-	 *         path. If this node is the root node, the returned array has zero
-	 *         elements.
-	 */
-	public int[] getIndexedPath() {
-		TreeNode[] path = getPath();
-		int[] indexedPath = new int[path.length - 1];
-		for (int i = 1; i < path.length; ++i)
-			indexedPath[i - 1] = path[i - 1].getIndex(path[i]);
-		return indexedPath;
-	}
-
-	/**
-	 * Returns the node indicated by the specified indexedPath, which contains
-	 * child indices obtained e.g. by getIndexedPath().
-	 */
-	public GroupTreeNode getNode(int[] indexedPath) {
-		GroupTreeNode cursor = this;
-		for (int i = 0; i < indexedPath.length; ++i)
-			cursor = (GroupTreeNode) cursor.getChildAt(indexedPath[i]);
-		return cursor;
-	}
-
-	/**
-	 * @param indexedPath
-	 *            A sequence of child indices that describe a path from this
-	 *            node to one of its desendants. Be aware that if <b>indexedPath
-	 *            </b> was obtained by getIndexedPath(), this node should
-	 *            usually be the root node.
-	 * @return The descendant found by evaluating <b>indexedPath </b>. If the
-	 *         path could not be traversed completely (i.e. one of the child
-	 *         indices did not exist), null will be returned.
-	 */
-	public GroupTreeNode getDescendant(int[] indexedPath) {
-		GroupTreeNode cursor = this;
-		for (int i = 0; i < indexedPath.length && cursor != null; ++i)
-			cursor = (GroupTreeNode) cursor.getChildAt(indexedPath[i]);
-		return cursor;
-	}
-
-	/**
-	 * A GroupTreeNode can create a SearchRule that finds elements contained in
-	 * its own group, or the union of those elements in its own group and its
-	 * children's groups (recursively), or the intersection of the elements in
-	 * its own group and its parent's group. This setting is configured in the
-	 * group contained in this node.
-	 * 
-	 * @return A SearchRule that finds the desired elements.
-	 */
-	public SearchRule getSearchRule() {
-		return getSearchRule(getGroup().getHierarchicalContext());
-	}
-
-	protected SearchRule getSearchRule(int originalContext) {
-		final int context = getGroup().getHierarchicalContext();
-		if (context == AbstractGroup.INDEPENDENT)
-			return getGroup().getSearchRule();
-		AndOrSearchRuleSet searchRule = new AndOrSearchRuleSet(
-				context == AbstractGroup.REFINING, false);
-		searchRule.addRule(getGroup().getSearchRule());
-		if (context == AbstractGroup.INCLUDING
-				&& originalContext != AbstractGroup.REFINING) {
-			for (int i = 0; i < getChildCount(); ++i)
-				searchRule.addRule(((GroupTreeNode) getChildAt(i))
-						.getSearchRule(originalContext));
-		} else if (context == AbstractGroup.REFINING && !isRoot()
-				&& originalContext != AbstractGroup.INCLUDING) {
-			searchRule.addRule(((GroupTreeNode) getParent())
-					.getSearchRule(originalContext));
-		}
-		return searchRule;
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	public Enumeration<GroupTreeNode> preorderEnumeration(){
-		return super.preorderEnumeration();
-	}
-	
-	@Override
-	@SuppressWarnings("unchecked")
-	public Enumeration<GroupTreeNode> depthFirstEnumeration(){
-		return super.depthFirstEnumeration();
-	}
-	
-	@Override
-	@SuppressWarnings("unchecked")
-	public Enumeration<GroupTreeNode> breadthFirstEnumeration(){
-		return super.breadthFirstEnumeration();
-	}
-	
-	@Override
-	@SuppressWarnings("unchecked")
-	public Enumeration<GroupTreeNode> children(){
-		return super.children();
-	}
-	
-	/**
-	 * Scans the subtree rooted at this node.
-	 * 
-	 * @return All groups that contain the specified entry.
-	 */
-	public AbstractGroup[] getMatchingGroups(BibtexEntry entry) {
-		Vector<AbstractGroup> matchingGroups = new Vector<AbstractGroup>();
-		Enumeration<GroupTreeNode> e = preorderEnumeration();
-		AbstractGroup group;
-		while (e.hasMoreElements()) {
-			group = (e.nextElement()).getGroup();
-			if (group.contains(null, entry)) // first argument is never used
-				matchingGroups.add(group);
-		}
-		AbstractGroup[] matchingGroupsArray = new AbstractGroup[matchingGroups
-				.size()];
-		return matchingGroups.toArray(matchingGroupsArray);
-	}
-
-	public boolean canMoveUp() {
-		return getPreviousSibling() != null
-				&& !(getGroup() instanceof AllEntriesGroup);
-	}
-
-	public boolean canMoveDown() {
-		return getNextSibling() != null
-				&& !(getGroup() instanceof AllEntriesGroup);
-	}
-
-	public boolean canMoveLeft() {
-		return !(getGroup() instanceof AllEntriesGroup)
-				&& !(((GroupTreeNode) getParent()).getGroup() instanceof AllEntriesGroup);
-	}
-
-	public boolean canMoveRight() {
-		return getPreviousSibling() != null
-				&& !(getGroup() instanceof AllEntriesGroup);
-	}
-
-	public AbstractUndoableEdit moveUp(GroupSelector groupSelector) {
-		final GroupTreeNode myParent = (GroupTreeNode) getParent();
-		final int index = myParent.getIndex(this);
-		if (index > 0) {
-			UndoableMoveGroup undo = new UndoableMoveGroup(groupSelector,
-					groupSelector.getGroupTreeRoot(), this, myParent, index - 1);
-			myParent.insert(this, index - 1);
-			return undo;
-		}
-		return null;
-	}
-
-	public AbstractUndoableEdit moveDown(GroupSelector groupSelector) {
-		final GroupTreeNode myParent = (GroupTreeNode) getParent();
-		final int index = myParent.getIndex(this);
-		if (index < parent.getChildCount() - 1) {
-			UndoableMoveGroup undo = new UndoableMoveGroup(groupSelector,
-					groupSelector.getGroupTreeRoot(), this, myParent, index + 1);
-			myParent.insert(this, index + 1);
-			return undo;
-		}
-		return null;
-	}
-
-	public AbstractUndoableEdit moveLeft(GroupSelector groupSelector) {
-		final GroupTreeNode myParent = (GroupTreeNode) getParent();
-		final GroupTreeNode myGrandParent = (GroupTreeNode) myParent
-				.getParent();
-		// paranoia
-		if (myGrandParent == null)
-			return null;
-		final int index = myGrandParent.getIndex(myParent);
-		UndoableMoveGroup undo = new UndoableMoveGroup(groupSelector,
-				groupSelector.getGroupTreeRoot(), this, myGrandParent,
-				index + 1);
-		myGrandParent.insert(this, index + 1);
-		return undo;
-	}
-
-	public AbstractUndoableEdit moveRight(GroupSelector groupSelector) {
-		final GroupTreeNode myPreviousSibling = (GroupTreeNode) getPreviousSibling();
-		// paranoia
-		if (myPreviousSibling == null)
-			return null;
-		UndoableMoveGroup undo = new UndoableMoveGroup(groupSelector,
-				groupSelector.getGroupTreeRoot(), this, myPreviousSibling,
-				myPreviousSibling.getChildCount());
-		myPreviousSibling.add(this);
-		return undo;
-	}
-
-	/**
-	 * @param path
-	 *            A sequence of child indices that designate a node relative to
-	 *            this node.
-	 * @return The node designated by the specified path, or null if one or more
-	 *         indices in the path could not be resolved.
-	 */
-	public GroupTreeNode getChildAt(int[] path) {
-		GroupTreeNode cursor = this;
-		for (int i = 0; i < path.length && cursor != null; ++i)
-			cursor = (GroupTreeNode) cursor.getChildAt(path[i]);
-		return cursor;
-	}
-
-	/** Adds the selected entries to this node's group. */
-	public AbstractUndoableEdit addToGroup(BibtexEntry[] entries) {
-		if (getGroup() == null)
-			return null; // paranoia
-		AbstractUndoableEdit undo = getGroup().add(entries);
-		if (undo instanceof UndoableChangeAssignment)
-			((UndoableChangeAssignment) undo).setEditedNode(this);
-		return undo;
-	}
-
-	/** Removes the selected entries from this node's group. */
-	public AbstractUndoableEdit removeFromGroup(BibtexEntry[] entries) {
-		if (getGroup() == null)
-			return null; // paranoia
-		AbstractUndoableEdit undo = getGroup().remove(entries);
-		if (undo instanceof UndoableChangeAssignment)
-			((UndoableChangeAssignment) undo).setEditedNode(this);
-		return undo;
-	}
-
-	public DataFlavor[] getTransferDataFlavors() {
-		return flavors;
-	}
-
-	public boolean isDataFlavorSupported(DataFlavor someFlavor) {
-		return someFlavor.equals(GroupTreeNode.flavor);
-	}
-
-	public Object getTransferData(DataFlavor someFlavor)
-			throws UnsupportedFlavorException, IOException {
-		if (!isDataFlavorSupported(someFlavor))
-			throw new UnsupportedFlavorException(someFlavor);
-		return this;
-	}
-
-	/**
-	 * Recursively compares this node's group and all subgroups.
-	 */
-	public boolean equals(Object other) {
-		if (!(other instanceof GroupTreeNode))
-			return false;
-		final GroupTreeNode otherNode = (GroupTreeNode) other;
-		if (getChildCount() != otherNode.getChildCount())
-			return false;
-		AbstractGroup g1 = getGroup();
-		AbstractGroup g2 = otherNode.getGroup();
-		if ((g1 == null && g2 != null) || (g1 != null && g2 == null))
-			return false;
-		if (g1 != null && g2 != null && !g1.equals(g2))
-			return false;
-		for (int i = 0; i < getChildCount(); ++i) {
-			if (!getChildAt(i).equals(otherNode.getChildAt(i)))
-				return false;
-		}
-		return true;
-	}
-
-    @Override
-    public int hashCode() {
-        return getGroup().getName().hashCode();
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreeNode;
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.SearchRule;
+
+/**
+ * A node in the groups tree that holds exactly one AbstractGroup.
+ * 
+ * @author jzieren
+ */
+public class GroupTreeNode extends DefaultMutableTreeNode implements
+		Transferable {
+	public static final DataFlavor flavor;
+	public static final DataFlavor[] flavors;
+
+	static {
+		DataFlavor df = null;
+		try {
+			df = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType
+					+ ";class=net.sf.jabref.groups.GroupTreeNode");
+		} catch (ClassNotFoundException e) {
+			// never happens
+		}
+		flavor = df;
+		flavors = new DataFlavor[] { flavor };
+	}
+
+	/**
+	 * Creates this node and associates the specified group with it.
+	 */
+	public GroupTreeNode(AbstractGroup group) {
+		setGroup(group);
+	}
+
+	/**
+	 * @return The group associated with this node.
+	 */
+	public AbstractGroup getGroup() {
+		return (AbstractGroup) getUserObject();
+	}
+
+	/**
+	 * Associates the specified group with this node.
+	 */
+	public void setGroup(AbstractGroup group) {
+		setUserObject(group);
+	}
+
+	/**
+	 * Returns a textual representation of this node and its children. This
+	 * representation contains both the tree structure and the textual
+	 * representations of the group associated with each node. It thus allows a
+	 * complete reconstruction of this object and its children.
+	 */
+	public String getTreeAsString() {
+		StringBuffer sb = new StringBuffer();
+		Enumeration<GroupTreeNode> e = preorderEnumeration();
+		GroupTreeNode cursor;
+		while (e.hasMoreElements()) {
+			cursor = e.nextElement();
+            sb.append(cursor.getLevel()).append(" ").append(cursor.getGroup().toString()).append("\n");
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * Creates a deep copy of this node and all of its children, including all
+	 * groups.
+	 * 
+	 * @return This object's deep copy.
+	 */
+	public GroupTreeNode deepCopy() {
+		GroupTreeNode copy = new GroupTreeNode(getGroup());
+		for (int i = 0; i < getChildCount(); ++i)
+			copy.add(((GroupTreeNode) getChildAt(i)).deepCopy());
+		return copy;
+	}
+        
+        /**
+         * Update all groups, if necessary, to handle the situation where the group
+         * tree is applied to a different BibtexDatabase than it was created for. This
+         * is for instance used when updating the group tree due to an external change.
+         *
+         * @param db The database to refresh for.
+         */
+        public void refreshGroupsForNewDatabase(BibtexDatabase db) {
+            for (int i = 0; i < getChildCount(); ++i) {
+                GroupTreeNode node = (GroupTreeNode)getChildAt(i);
+                node.getGroup().refreshForNewDatabase(db);
+                node.refreshGroupsForNewDatabase(db);
+            }
+        }
+      
+	/**
+	 * @return An indexed path from the root node to this node. The elements in
+	 *         the returned array represent the child index of each node in the
+	 *         path. If this node is the root node, the returned array has zero
+	 *         elements.
+	 */
+	public int[] getIndexedPath() {
+		TreeNode[] path = getPath();
+		int[] indexedPath = new int[path.length - 1];
+		for (int i = 1; i < path.length; ++i)
+			indexedPath[i - 1] = path[i - 1].getIndex(path[i]);
+		return indexedPath;
+	}
+
+	/**
+	 * Returns the node indicated by the specified indexedPath, which contains
+	 * child indices obtained e.g. by getIndexedPath().
+	 */
+	public GroupTreeNode getNode(int[] indexedPath) {
+		GroupTreeNode cursor = this;
+		for (int i = 0; i < indexedPath.length; ++i)
+			cursor = (GroupTreeNode) cursor.getChildAt(indexedPath[i]);
+		return cursor;
+	}
+
+	/**
+	 * @param indexedPath
+	 *            A sequence of child indices that describe a path from this
+	 *            node to one of its desendants. Be aware that if <b>indexedPath
+	 *            </b> was obtained by getIndexedPath(), this node should
+	 *            usually be the root node.
+	 * @return The descendant found by evaluating <b>indexedPath </b>. If the
+	 *         path could not be traversed completely (i.e. one of the child
+	 *         indices did not exist), null will be returned.
+	 */
+	public GroupTreeNode getDescendant(int[] indexedPath) {
+		GroupTreeNode cursor = this;
+		for (int i = 0; i < indexedPath.length && cursor != null; ++i)
+			cursor = (GroupTreeNode) cursor.getChildAt(indexedPath[i]);
+		return cursor;
+	}
+
+	/**
+	 * A GroupTreeNode can create a SearchRule that finds elements contained in
+	 * its own group, or the union of those elements in its own group and its
+	 * children's groups (recursively), or the intersection of the elements in
+	 * its own group and its parent's group. This setting is configured in the
+	 * group contained in this node.
+	 * 
+	 * @return A SearchRule that finds the desired elements.
+	 */
+	public SearchRule getSearchRule() {
+		return getSearchRule(getGroup().getHierarchicalContext());
+	}
+
+	protected SearchRule getSearchRule(int originalContext) {
+		final int context = getGroup().getHierarchicalContext();
+		if (context == AbstractGroup.INDEPENDENT)
+			return getGroup().getSearchRule();
+		AndOrSearchRuleSet searchRule = new AndOrSearchRuleSet(
+				context == AbstractGroup.REFINING, false);
+		searchRule.addRule(getGroup().getSearchRule());
+		if (context == AbstractGroup.INCLUDING
+				&& originalContext != AbstractGroup.REFINING) {
+			for (int i = 0; i < getChildCount(); ++i)
+				searchRule.addRule(((GroupTreeNode) getChildAt(i))
+						.getSearchRule(originalContext));
+		} else if (context == AbstractGroup.REFINING && !isRoot()
+				&& originalContext != AbstractGroup.INCLUDING) {
+			searchRule.addRule(((GroupTreeNode) getParent())
+					.getSearchRule(originalContext));
+		}
+		return searchRule;
+	}
+
+	@Override
+	@SuppressWarnings("unchecked")
+	public Enumeration<GroupTreeNode> preorderEnumeration(){
+		return super.preorderEnumeration();
+	}
+	
+	@Override
+	@SuppressWarnings("unchecked")
+	public Enumeration<GroupTreeNode> depthFirstEnumeration(){
+		return super.depthFirstEnumeration();
+	}
+	
+	@Override
+	@SuppressWarnings("unchecked")
+	public Enumeration<GroupTreeNode> breadthFirstEnumeration(){
+		return super.breadthFirstEnumeration();
+	}
+	
+	@Override
+	@SuppressWarnings("unchecked")
+	public Enumeration<GroupTreeNode> children(){
+		return super.children();
+	}
+	
+	/**
+	 * Scans the subtree rooted at this node.
+	 * 
+	 * @return All groups that contain the specified entry.
+	 */
+	public AbstractGroup[] getMatchingGroups(BibtexEntry entry) {
+		Vector<AbstractGroup> matchingGroups = new Vector<AbstractGroup>();
+		Enumeration<GroupTreeNode> e = preorderEnumeration();
+		AbstractGroup group;
+		while (e.hasMoreElements()) {
+			group = (e.nextElement()).getGroup();
+			if (group.contains(null, entry)) // first argument is never used
+				matchingGroups.add(group);
+		}
+		AbstractGroup[] matchingGroupsArray = new AbstractGroup[matchingGroups
+				.size()];
+		return matchingGroups.toArray(matchingGroupsArray);
+	}
+
+	public boolean canMoveUp() {
+		return getPreviousSibling() != null
+				&& !(getGroup() instanceof AllEntriesGroup);
+	}
+
+	public boolean canMoveDown() {
+		return getNextSibling() != null
+				&& !(getGroup() instanceof AllEntriesGroup);
+	}
+
+	public boolean canMoveLeft() {
+		return !(getGroup() instanceof AllEntriesGroup)
+				&& !(((GroupTreeNode) getParent()).getGroup() instanceof AllEntriesGroup);
+	}
+
+	public boolean canMoveRight() {
+		return getPreviousSibling() != null
+				&& !(getGroup() instanceof AllEntriesGroup);
+	}
+
+	public AbstractUndoableEdit moveUp(GroupSelector groupSelector) {
+		final GroupTreeNode myParent = (GroupTreeNode) getParent();
+		final int index = myParent.getIndex(this);
+		if (index > 0) {
+			UndoableMoveGroup undo = new UndoableMoveGroup(groupSelector,
+					groupSelector.getGroupTreeRoot(), this, myParent, index - 1);
+			myParent.insert(this, index - 1);
+			return undo;
+		}
+		return null;
+	}
+
+	public AbstractUndoableEdit moveDown(GroupSelector groupSelector) {
+		final GroupTreeNode myParent = (GroupTreeNode) getParent();
+		final int index = myParent.getIndex(this);
+		if (index < parent.getChildCount() - 1) {
+			UndoableMoveGroup undo = new UndoableMoveGroup(groupSelector,
+					groupSelector.getGroupTreeRoot(), this, myParent, index + 1);
+			myParent.insert(this, index + 1);
+			return undo;
+		}
+		return null;
+	}
+
+	public AbstractUndoableEdit moveLeft(GroupSelector groupSelector) {
+		final GroupTreeNode myParent = (GroupTreeNode) getParent();
+		final GroupTreeNode myGrandParent = (GroupTreeNode) myParent
+				.getParent();
+		// paranoia
+		if (myGrandParent == null)
+			return null;
+		final int index = myGrandParent.getIndex(myParent);
+		UndoableMoveGroup undo = new UndoableMoveGroup(groupSelector,
+				groupSelector.getGroupTreeRoot(), this, myGrandParent,
+				index + 1);
+		myGrandParent.insert(this, index + 1);
+		return undo;
+	}
+
+	public AbstractUndoableEdit moveRight(GroupSelector groupSelector) {
+		final GroupTreeNode myPreviousSibling = (GroupTreeNode) getPreviousSibling();
+		// paranoia
+		if (myPreviousSibling == null)
+			return null;
+		UndoableMoveGroup undo = new UndoableMoveGroup(groupSelector,
+				groupSelector.getGroupTreeRoot(), this, myPreviousSibling,
+				myPreviousSibling.getChildCount());
+		myPreviousSibling.add(this);
+		return undo;
+	}
+
+	/**
+	 * @param path
+	 *            A sequence of child indices that designate a node relative to
+	 *            this node.
+	 * @return The node designated by the specified path, or null if one or more
+	 *         indices in the path could not be resolved.
+	 */
+	public GroupTreeNode getChildAt(int[] path) {
+		GroupTreeNode cursor = this;
+		for (int i = 0; i < path.length && cursor != null; ++i)
+			cursor = (GroupTreeNode) cursor.getChildAt(path[i]);
+		return cursor;
+	}
+
+	/** Adds the selected entries to this node's group. */
+	public AbstractUndoableEdit addToGroup(BibtexEntry[] entries) {
+		if (getGroup() == null)
+			return null; // paranoia
+		AbstractUndoableEdit undo = getGroup().add(entries);
+		if (undo instanceof UndoableChangeAssignment)
+			((UndoableChangeAssignment) undo).setEditedNode(this);
+		return undo;
+	}
+
+	/** Removes the selected entries from this node's group. */
+	public AbstractUndoableEdit removeFromGroup(BibtexEntry[] entries) {
+		if (getGroup() == null)
+			return null; // paranoia
+		AbstractUndoableEdit undo = getGroup().remove(entries);
+		if (undo instanceof UndoableChangeAssignment)
+			((UndoableChangeAssignment) undo).setEditedNode(this);
+		return undo;
+	}
+
+	public DataFlavor[] getTransferDataFlavors() {
+		return flavors;
+	}
+
+	public boolean isDataFlavorSupported(DataFlavor someFlavor) {
+		return someFlavor.equals(GroupTreeNode.flavor);
+	}
+
+	public Object getTransferData(DataFlavor someFlavor)
+			throws UnsupportedFlavorException, IOException {
+		if (!isDataFlavorSupported(someFlavor))
+			throw new UnsupportedFlavorException(someFlavor);
+		return this;
+	}
+
+	/**
+	 * Recursively compares this node's group and all subgroups.
+	 */
+	public boolean equals(Object other) {
+		if (!(other instanceof GroupTreeNode))
+			return false;
+		final GroupTreeNode otherNode = (GroupTreeNode) other;
+		if (getChildCount() != otherNode.getChildCount())
+			return false;
+		AbstractGroup g1 = getGroup();
+		AbstractGroup g2 = otherNode.getGroup();
+		if ((g1 == null && g2 != null) || (g1 != null && g2 == null))
+			return false;
+		if (g1 != null && g2 != null && !g1.equals(g2))
+			return false;
+		for (int i = 0; i < getChildCount(); ++i) {
+			if (!getChildAt(i).equals(otherNode.getChildAt(i)))
+				return false;
+		}
+		return true;
+	}
+
+    @Override
+    public int hashCode() {
+        return getGroup().getName().hashCode();
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/GroupsPrefsTab.java b/src/java/net/sf/jabref/groups/GroupsPrefsTab.java
index 7386ba9..d9471b3 100644
--- a/src/java/net/sf/jabref/groups/GroupsPrefsTab.java
+++ b/src/java/net/sf/jabref/groups/GroupsPrefsTab.java
@@ -1,144 +1,144 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.awt.BorderLayout;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-
-import javax.swing.*;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.PrefsTab;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-// JZTODO lyrics
-public class GroupsPrefsTab extends JPanel implements PrefsTab {
-	private final JCheckBox showIcons = new JCheckBox(Globals.lang("Show icons for groups"));
-	private final JCheckBox showDynamic = new JCheckBox(
-			"<html>"+Globals.lang("Show dynamic groups in <i>italics</i>")+"</html>");
-	private final JCheckBox expandTree = new JCheckBox(
-			Globals.lang("Initially show groups tree expanded"));
-	private final JCheckBox autoShow = new JCheckBox(
-			Globals.lang("Automatically show groups interface when switching to a database that contains groups"));
-	private final JCheckBox autoHide = new JCheckBox(
-			Globals.lang("Automatically hide groups interface when switching to a database that contains no groups"));
-	private final JCheckBox autoAssignGroup = new JCheckBox(
-			Globals.lang("Automatically assign new entry to selected groups"));
-	private JTextField groupingField = new JTextField(20);
-	private JTextField keywordSeparator = new JTextField(2);
-
-	private final JabRefPreferences prefs;
-
-	public GroupsPrefsTab(JabRefPreferences prefs) {
-		this.prefs = prefs;
-		
-		keywordSeparator.addFocusListener(new FocusListener() {
-			public void focusGained(FocusEvent e) {
-				keywordSeparator.selectAll();
-			}
-			public void focusLost(FocusEvent e) {
-				// deselection is automatic
-			}
-		});
-		
-		FormLayout layout = new FormLayout("9dlu, pref", //500px",
-				"p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, " +
-				"p, 3dlu, p");
-		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-		builder.appendSeparator(Globals.lang("View"));
-		builder.nextLine();
-		builder.nextLine();
-		builder.nextColumn();
-		builder.append(showIcons);
-		builder.nextLine();
-		builder.nextLine();
-		builder.nextColumn();
-		builder.append(showDynamic);
-		builder.nextLine();
-		builder.nextLine();
-		builder.nextColumn();
-		builder.append(expandTree);
-		builder.nextLine();
-		builder.nextLine();
-		builder.nextColumn();
-		builder.append(autoShow);
-		builder.nextLine();
-		builder.nextLine();
-		builder.nextColumn();
-		builder.append(autoHide);
-		builder.nextLine();
-		builder.nextLine();
-		builder.nextColumn();
-		builder.append(autoAssignGroup);
-		builder.nextLine();
-		builder.nextLine();
-		builder.appendSeparator(Globals.lang("Dynamic groups"));
-		builder.nextLine();
-		builder.nextLine();
-		builder.nextColumn();
-			// build subcomponent
-			FormLayout layout2 = new FormLayout("left:pref, 2dlu, left:pref", 
-					"p, 3dlu, p");
-			DefaultFormBuilder builder2 = new DefaultFormBuilder(layout2);
-			builder2.append(new JLabel(Globals.lang("Default grouping field") + ":"));
-			builder2.append(groupingField);
-			builder2.nextLine();
-			builder2.nextLine();
-			builder2.append(new JLabel(Globals.lang("When adding/removing keywords, separate them by")+":"));
-			builder2.append(keywordSeparator);
-		builder.append(builder2.getPanel());
-
-		setLayout(new BorderLayout());
-		JPanel panel = builder.getPanel();
-		panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-		add(panel, BorderLayout.CENTER);
-	}
-
-	public void setValues() {
-		showIcons.setSelected(prefs.getBoolean("groupShowIcons"));
-		showDynamic.setSelected(prefs.getBoolean("groupShowDynamic"));
-		expandTree.setSelected(prefs.getBoolean("groupExpandTree"));
-		groupingField.setText(prefs.get("groupsDefaultField"));
-		autoShow.setSelected(prefs.getBoolean("groupAutoShow"));
-		autoHide.setSelected(prefs.getBoolean("groupAutoHide"));
-		keywordSeparator.setText(prefs.get("groupKeywordSeparator"));
-		autoAssignGroup.setSelected(prefs.getBoolean("autoAssignGroup")); 
-	}
-
-	public void storeSettings() {
-		prefs.putBoolean("groupShowIcons", showIcons.isSelected());
-		prefs.putBoolean("groupShowDynamic", showDynamic.isSelected());
-		prefs.putBoolean("groupExpandTree", expandTree.isSelected());
-		prefs.put("groupsDefaultField", groupingField.getText().trim());
-		prefs.putBoolean("groupAutoShow", autoShow.isSelected());
-		prefs.putBoolean("groupAutoHide", autoHide.isSelected());
-		prefs.putBoolean("autoAssignGroup", autoAssignGroup.isSelected());
-		prefs.put("groupKeywordSeparator", keywordSeparator.getText());
-	}
-
-	public boolean readyToClose() {
-		return true;
-	}
-
-	public String getTabName() {
-		return Globals.lang("Groups");
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.awt.BorderLayout;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+
+import javax.swing.*;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.PrefsTab;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+// JZTODO lyrics
+public class GroupsPrefsTab extends JPanel implements PrefsTab {
+	private final JCheckBox showIcons = new JCheckBox(Globals.lang("Show icons for groups"));
+	private final JCheckBox showDynamic = new JCheckBox(
+			"<html>"+Globals.lang("Show dynamic groups in <i>italics</i>")+"</html>");
+	private final JCheckBox expandTree = new JCheckBox(
+			Globals.lang("Initially show groups tree expanded"));
+	private final JCheckBox autoShow = new JCheckBox(
+			Globals.lang("Automatically show groups interface when switching to a database that contains groups"));
+	private final JCheckBox autoHide = new JCheckBox(
+			Globals.lang("Automatically hide groups interface when switching to a database that contains no groups"));
+	private final JCheckBox autoAssignGroup = new JCheckBox(
+			Globals.lang("Automatically assign new entry to selected groups"));
+	private JTextField groupingField = new JTextField(20);
+	private JTextField keywordSeparator = new JTextField(2);
+
+	private final JabRefPreferences prefs;
+
+	public GroupsPrefsTab(JabRefPreferences prefs) {
+		this.prefs = prefs;
+		
+		keywordSeparator.addFocusListener(new FocusListener() {
+			public void focusGained(FocusEvent e) {
+				keywordSeparator.selectAll();
+			}
+			public void focusLost(FocusEvent e) {
+				// deselection is automatic
+			}
+		});
+		
+		FormLayout layout = new FormLayout("9dlu, pref", //500px",
+				"p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, " +
+				"p, 3dlu, p");
+		DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+		builder.appendSeparator(Globals.lang("View"));
+		builder.nextLine();
+		builder.nextLine();
+		builder.nextColumn();
+		builder.append(showIcons);
+		builder.nextLine();
+		builder.nextLine();
+		builder.nextColumn();
+		builder.append(showDynamic);
+		builder.nextLine();
+		builder.nextLine();
+		builder.nextColumn();
+		builder.append(expandTree);
+		builder.nextLine();
+		builder.nextLine();
+		builder.nextColumn();
+		builder.append(autoShow);
+		builder.nextLine();
+		builder.nextLine();
+		builder.nextColumn();
+		builder.append(autoHide);
+		builder.nextLine();
+		builder.nextLine();
+		builder.nextColumn();
+		builder.append(autoAssignGroup);
+		builder.nextLine();
+		builder.nextLine();
+		builder.appendSeparator(Globals.lang("Dynamic groups"));
+		builder.nextLine();
+		builder.nextLine();
+		builder.nextColumn();
+			// build subcomponent
+			FormLayout layout2 = new FormLayout("left:pref, 2dlu, left:pref", 
+					"p, 3dlu, p");
+			DefaultFormBuilder builder2 = new DefaultFormBuilder(layout2);
+			builder2.append(new JLabel(Globals.lang("Default grouping field") + ":"));
+			builder2.append(groupingField);
+			builder2.nextLine();
+			builder2.nextLine();
+			builder2.append(new JLabel(Globals.lang("When adding/removing keywords, separate them by")+":"));
+			builder2.append(keywordSeparator);
+		builder.append(builder2.getPanel());
+
+		setLayout(new BorderLayout());
+		JPanel panel = builder.getPanel();
+		panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+		add(panel, BorderLayout.CENTER);
+	}
+
+	public void setValues() {
+		showIcons.setSelected(prefs.getBoolean("groupShowIcons"));
+		showDynamic.setSelected(prefs.getBoolean("groupShowDynamic"));
+		expandTree.setSelected(prefs.getBoolean("groupExpandTree"));
+		groupingField.setText(prefs.get("groupsDefaultField"));
+		autoShow.setSelected(prefs.getBoolean("groupAutoShow"));
+		autoHide.setSelected(prefs.getBoolean("groupAutoHide"));
+		keywordSeparator.setText(prefs.get("groupKeywordSeparator"));
+		autoAssignGroup.setSelected(prefs.getBoolean("autoAssignGroup")); 
+	}
+
+	public void storeSettings() {
+		prefs.putBoolean("groupShowIcons", showIcons.isSelected());
+		prefs.putBoolean("groupShowDynamic", showDynamic.isSelected());
+		prefs.putBoolean("groupExpandTree", expandTree.isSelected());
+		prefs.put("groupsDefaultField", groupingField.getText().trim());
+		prefs.putBoolean("groupAutoShow", autoShow.isSelected());
+		prefs.putBoolean("groupAutoHide", autoHide.isSelected());
+		prefs.putBoolean("autoAssignGroup", autoAssignGroup.isSelected());
+		prefs.put("groupKeywordSeparator", keywordSeparator.getText());
+	}
+
+	public boolean readyToClose() {
+		return true;
+	}
+
+	public String getTabName() {
+		return Globals.lang("Groups");
+	}
+
+}
diff --git a/src/java/net/sf/jabref/groups/GroupsTree.java b/src/java/net/sf/jabref/groups/GroupsTree.java
index c13d5ed..0d246e7 100644
--- a/src/java/net/sf/jabref/groups/GroupsTree.java
+++ b/src/java/net/sf/jabref/groups/GroupsTree.java
@@ -1,454 +1,459 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.awt.Cursor;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.awt.dnd.*;
-import java.awt.event.InputEvent;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Vector;
-
-import javax.swing.JTree;
-import javax.swing.SwingUtilities;
-import javax.swing.ToolTipManager;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.TreePath;
-import javax.swing.tree.TreeSelectionModel;
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-
-public class GroupsTree extends JTree implements DragSourceListener,
-		DropTargetListener, DragGestureListener {
-	/** distance from component borders from which on autoscrolling starts. */
-	private static final int dragScrollActivationMargin = 10;
-
-	/** number of pixels to scroll each time handler is called. */
-	private static final int dragScrollDistance = 5;
-
-	/** time of last autoscroll event (for limiting speed). */
-	private static long lastDragAutoscroll = 0L;
-
-	/** minimum interval between two autoscroll events (for limiting speed). */
-	private static final long minAutoscrollInterval = 50L;
-
-	/**
-	 * the point on which the cursor is currently idling during a drag
-	 * operation.
-	 */
-	private Point idlePoint;
-
-	/** time since which cursor is idling. */
-	private long idleStartTime = 0L;
-
-	/** max. distance cursor may move in x or y direction while idling. */
-	private static final int idleMargin = 1;
-
-	/** idle time after which the node below is expanded. */
-	private static final long idleTimeToExpandNode = 1000L;
-
-	private GroupSelector groupSelector;
-
-	private GroupTreeNode dragNode = null;
-
-	private final GroupTreeCellRenderer cellRenderer = new GroupTreeCellRenderer();
-
-	public GroupsTree(GroupSelector groupSelector) {
-		this.groupSelector = groupSelector;
-		DragGestureRecognizer dgr = DragSource.getDefaultDragSource()
-				.createDefaultDragGestureRecognizer(this,
-						DnDConstants.ACTION_MOVE, this);
-		// Eliminates right mouse clicks as valid actions
-		dgr.setSourceActions(dgr.getSourceActions() & ~InputEvent.BUTTON3_MASK);
-		new DropTarget(this, this);
-		setCellRenderer(cellRenderer);
-		setFocusable(false);
-		setToggleClickCount(0);
-		ToolTipManager.sharedInstance().registerComponent(this);
-		setShowsRootHandles(false);
-		setVisibleRowCount(Globals.prefs.getInt("groupsVisibleRows"));
-		getSelectionModel().setSelectionMode(
-				TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
-	}
-
-	public void dragEnter(DragSourceDragEvent dsde) {
-		// ignore
-	}
-
-	/** This is for moving of nodes within myself */
-	public void dragOver(DragSourceDragEvent dsde) {
-		final Point p = dsde.getLocation(); // screen coordinates!
-		SwingUtilities.convertPointFromScreen(p, this);
-		final TreePath path = getPathForLocation(p.x, p.y);
-		if (path == null) {
-			dsde.getDragSourceContext().setCursor(DragSource.DefaultMoveNoDrop);
-			return;
-		}
-		final GroupTreeNode target = (GroupTreeNode) path
-				.getLastPathComponent();
-		if (target == null || dragNode.isNodeDescendant(target)
-				|| dragNode == target) {
-			dsde.getDragSourceContext().setCursor(DragSource.DefaultMoveNoDrop);
-			return;
-		}
-		dsde.getDragSourceContext().setCursor(DragSource.DefaultMoveDrop);
-	}
-
-	public void dropActionChanged(DragSourceDragEvent dsde) {
-		// ignore
-	}
-
-	public void dragDropEnd(DragSourceDropEvent dsde) {
-		dragNode = null;
-	}
-
-	public void dragExit(DragSourceEvent dse) {
-		// ignore
-	}
-
-	public void dragEnter(DropTargetDragEvent dtde) {
-		// ignore
-	}
-
-	/** This handles dragging of nodes (from myself) or entries (from the table) */
-	public void dragOver(DropTargetDragEvent dtde) {
-		final Point cursor = dtde.getLocation();
-		final long currentTime = System.currentTimeMillis();
-		if (idlePoint == null)
-			idlePoint = cursor;
-
-		// determine node over which the user is dragging
-		final TreePath path = getPathForLocation(cursor.x, cursor.y);
-		final GroupTreeNode target = path == null ? null : (GroupTreeNode) path
-				.getLastPathComponent();
-		setHighlight1Cell(target);
-
-		// accept or reject
-		if (dtde.isDataFlavorSupported(GroupTreeNode.flavor)) {
-			// accept: move nodes within tree
-			dtde.acceptDrag(DnDConstants.ACTION_MOVE);
-		} else if (dtde
-				.isDataFlavorSupported(TransferableEntrySelection.flavorInternal)) {
-			// check if node accepts explicit assignment
-			if (path == null) {
-				dtde.rejectDrag();
-			} else {
-				// this would be the place to check if the dragging entries
-				// maybe are in this group already, but I think that's not
-				// worth the bother (DropTargetDragEvent does not provide
-				// access to the drag object)...
-				// it might even be irritating to the user.
-				if (target.getGroup().supportsAdd()) {
-					// accept: assignment from EntryTable
-					dtde.acceptDrag(DnDConstants.ACTION_LINK);
-				} else {
-					dtde.rejectDrag();
-				}
-			}
-		} else {
-			dtde.rejectDrag();
-		}
-
-		// auto open
-		if (Math.abs(cursor.x - idlePoint.x) < idleMargin
-				&& Math.abs(cursor.y - idlePoint.y) < idleMargin) {
-			if (currentTime - idleStartTime >= idleTimeToExpandNode) {
-				if (path != null) {
-					expandPath(path);
-				}
-			}
-		} else {
-			idlePoint = cursor;
-			idleStartTime = currentTime;
-		}
-
-		// autoscrolling
-		if (currentTime - lastDragAutoscroll < minAutoscrollInterval)
-			return;
-		final Rectangle r = getVisibleRect();
-		final boolean scrollUp = cursor.y - r.y < dragScrollActivationMargin;
-		final boolean scrollDown = r.y + r.height - cursor.y < dragScrollActivationMargin;
-		final boolean scrollLeft = cursor.x - r.x < dragScrollActivationMargin;
-		final boolean scrollRight = r.x + r.width - cursor.x < dragScrollActivationMargin;
-		if (scrollUp)
-			r.translate(0, -dragScrollDistance);
-		else if (scrollDown)
-			r.translate(0, +dragScrollDistance);
-		if (scrollLeft)
-			r.translate(-dragScrollDistance, 0);
-		else if (scrollRight)
-			r.translate(+dragScrollDistance, 0);
-		scrollRectToVisible(r);
-		lastDragAutoscroll = currentTime;
-	}
-
-	public void dropActionChanged(DropTargetDragEvent dtde) {
-		// ignore
-	}
-
-	public void drop(DropTargetDropEvent dtde) {
-		setHighlight1Cell(null);
-		try {
-			// initializations common to all flavors
-			final Transferable transferable = dtde.getTransferable();
-			final Point p = dtde.getLocation();
-			final TreePath path = getPathForLocation(p.x, p.y);
-			if (path == null) {
-				dtde.rejectDrop();
-				return;
-			}
-			final GroupTreeNode target = (GroupTreeNode) path
-					.getLastPathComponent();
-			// check supported flavors
-			if (transferable.isDataFlavorSupported(GroupTreeNode.flavor)) {
-				GroupTreeNode source = (GroupTreeNode) transferable
-						.getTransferData(GroupTreeNode.flavor);
-				if (source == target) {
-					dtde.rejectDrop(); // ignore this
-					return;
-				}
-				if (source.isNodeDescendant(target)) {
-					dtde.rejectDrop();
-					return;
-				}
-				Enumeration<TreePath> expandedPaths = groupSelector.getExpandedPaths();
-				UndoableMoveGroup undo = new UndoableMoveGroup(groupSelector,
-						groupSelector.getGroupTreeRoot(), source, target,
-						target.getChildCount());
-				target.add(source);
-				dtde.getDropTargetContext().dropComplete(true);
-				// update selection/expansion state
-				groupSelector.revalidateGroups(new TreePath[] { new TreePath(
-						source.getPath()) }, refreshPaths(expandedPaths));
-				groupSelector.concludeMoveGroup(undo, source);
-			} else if (transferable
-					.isDataFlavorSupported(TransferableEntrySelection.flavorInternal)) {
-				final AbstractGroup group = target.getGroup();
-				if (!group.supportsAdd()) {
-					// this should never happen, because the same condition
-					// is checked in dragOver already
-					dtde.rejectDrop();
-					return;
-				}
-				final TransferableEntrySelection selection = (TransferableEntrySelection) transferable
-						.getTransferData(TransferableEntrySelection.flavorInternal);
-				final BibtexEntry[] entries = selection.getSelection();
-				int assignedEntries = 0;
-				for (int i = 0; i < entries.length; ++i) {
-					if (!target.getGroup().contains(entries[i]))
-						++assignedEntries;
-				}
-
-				// warn if assignment has undesired side effects (modifies a
-				// field != keywords)
-				if (!Util.warnAssignmentSideEffects(
-						new AbstractGroup[] { group },
-						selection.getSelection(), groupSelector
-								.getActiveBasePanel().getDatabase(),
-						groupSelector.frame))
-					return; // user aborted operation
-
-				// if an editor is showing, its fields must be updated
-				// after the assignment, and before that, the current
-				// edit has to be stored:
-				groupSelector.getActiveBasePanel().storeCurrentEdit();
-
-				AbstractUndoableEdit undo = group.add(selection.getSelection());
-				if (undo instanceof UndoableChangeAssignment)
-					((UndoableChangeAssignment) undo).setEditedNode(target);
-				dtde.getDropTargetContext().dropComplete(true);
-				groupSelector.revalidateGroups();
-				groupSelector.concludeAssignment(undo, target, assignedEntries);
-			} else {
-				dtde.rejectDrop();
-				return;
-			}
-		} catch (IOException ioe) {
-			// ignore
-		} catch (UnsupportedFlavorException e) {
-			// ignore
-		}
-	}
-
-	public void dragExit(DropTargetEvent dte) {
-		setHighlight1Cell(null);
-	}
-
-	public void dragGestureRecognized(DragGestureEvent dge) {
-		GroupTreeNode selectedNode = getSelectedNode();
-		if (selectedNode == null)
-			return; // nothing to transfer (select manually?)
-		Cursor cursor = DragSource.DefaultMoveDrop;
-		dragNode = selectedNode;
-		dge.getDragSource().startDrag(dge, cursor, selectedNode, this);
-	}
-
-	/** Returns the first selected node, or null if nothing is selected. */
-	public GroupTreeNode getSelectedNode() {
-		TreePath selectionPath = getSelectionPath();
-		return selectionPath != null ? (GroupTreeNode) selectionPath
-				.getLastPathComponent() : null;
-	}
-
-    /**
-     * Refresh paths that may have become invalid due to node movements within
-     * the tree. This method creates new paths to the last path components
-     * (which must still exist) of the specified paths.
-     * 
-     * @param paths
-     *            Paths that may have become invalid.
-     * @return Refreshed paths that are all valid.
-     */
-    public Enumeration<TreePath> refreshPaths(Enumeration<TreePath> paths) {
-        Vector<TreePath> freshPaths = new Vector<TreePath>();
-        while (paths.hasMoreElements()) {
-            freshPaths.add(new TreePath(
-                    ((DefaultMutableTreeNode)paths.nextElement()
-                            .getLastPathComponent()).getPath()));
-        }
-        return freshPaths.elements();
-    }
-
-    /**
-     * Refresh paths that may have become invalid due to node movements within
-     * the tree. This method creates new paths to the last path components
-     * (which must still exist) of the specified paths.
-     * 
-     * @param paths
-     *            Paths that may have become invalid.
-     * @return Refreshed paths that are all valid.
-     */
-    public TreePath[] refreshPaths(TreePath[] paths) {
-        TreePath[] freshPaths = new TreePath[paths.length];
-        for (int i = 0; i < paths.length; ++i) {
-            freshPaths[i] = new TreePath(((DefaultMutableTreeNode) paths[i]
-                            .getLastPathComponent()).getPath());
-        }
-        return freshPaths;
-    }
-
-	/** Highlights the specified cell or disables highlight if cell == null */
-	public void setHighlight1Cell(Object cell) {
-		cellRenderer.setHighlight1Cell(cell);
-		repaint();
-	}
-
-	/** Highlights the specified cells or disables highlight if cells == null */
-	public void setHighlight2Cells(Object[] cells) {
-		cellRenderer.setHighlight2Cells(cells);
-		repaint();
-	}
-
-	/** Highlights the specified cells or disables highlight if cells == null */
-	public void setHighlight3Cells(Object[] cells) {
-		cellRenderer.setHighlight3Cells(cells);
-		repaint();
-	}
-    
-    /** Highlights the specified cell or disables highlight if cell == null */
-    public void setHighlightBorderCell(GroupTreeNode node) {
-        cellRenderer.setHighlightBorderCell(node);
-        repaint();
-    }
-
-	/** Sort immediate children of the specified node alphabetically. */
-	public void sort(GroupTreeNode node, boolean recursive) {
-		sortWithoutRevalidate(node, recursive);
-		groupSelector.revalidateGroups();
-	}
-
-	/** This sorts without revalidation of groups */
-	protected void sortWithoutRevalidate(GroupTreeNode node, boolean recursive) {
-		if (node.isLeaf())
-			return; // nothing to sort
-		GroupTreeNode child1, child2;
-		int j = node.getChildCount() - 1;
-		int lastModified;
-		while (j > 0) {
-			lastModified = j + 1;
-			j = -1;
-			for (int i = 1; i < lastModified; ++i) {
-				child1 = (GroupTreeNode) node.getChildAt(i - 1);
-				child2 = (GroupTreeNode) node.getChildAt(i);
-				if (child2.getGroup().getName().compareToIgnoreCase(
-						child1.getGroup().getName()) < 0) {
-					node.remove(child1);
-					node.insert(child1, i);
-					j = i;
-				}
-			}
-		}
-		if (recursive) {
-			for (int i = 0; i < node.getChildCount(); ++i) {
-				sortWithoutRevalidate((GroupTreeNode) node.getChildAt(i), true);
-			}
-		}
-	}
-
-	/** Expand this node and all its children. */
-	public void expandSubtree(GroupTreeNode node) {
-		for (Enumeration<GroupTreeNode> e = node.depthFirstEnumeration(); e.hasMoreElements();)
-			expandPath(new TreePath(e.nextElement().getPath()));
-	}
-
-	/** Collapse this node and all its children. */
-	public void collapseSubtree(GroupTreeNode node) {
-		for (Enumeration<GroupTreeNode> e = node.depthFirstEnumeration(); e.hasMoreElements();)
-			collapsePath(new TreePath((e.nextElement())
-					.getPath()));
-	}
-
-	/**
-	 * Returns true if the node specified by path has at least one descendant
-	 * that is currently expanded.
-	 */
-	public boolean hasExpandedDescendant(TreePath path) {
-		GroupTreeNode node = (GroupTreeNode) path.getLastPathComponent();
-		for (Enumeration<GroupTreeNode> e = node.children(); e.hasMoreElements();) {
-			GroupTreeNode child = e.nextElement();
-			if (child.isLeaf())
-				continue; // don't care about this case
-			TreePath pathToChild = path.pathByAddingChild(child);
-			if (isExpanded(pathToChild) || hasExpandedDescendant(pathToChild))
-				return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Returns true if the node specified by path has at least one descendant
-	 * that is currently collapsed.
-	 */
-	public boolean hasCollapsedDescendant(TreePath path) {
-		GroupTreeNode node = (GroupTreeNode) path.getLastPathComponent();
-		for (Enumeration<GroupTreeNode> e = node.children(); e.hasMoreElements();) {
-			GroupTreeNode child = e.nextElement();
-			if (child.isLeaf())
-				continue; // don't care about this case
-			TreePath pathToChild = path.pathByAddingChild(child);
-			if (isCollapsed(pathToChild) || hasCollapsedDescendant(pathToChild))
-				return true;
-		}
-		return false;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.awt.Cursor;
+import java.awt.FontMetrics;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.dnd.*;
+import java.awt.event.InputEvent;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import javax.swing.JTree;
+import javax.swing.SwingUtilities;
+import javax.swing.ToolTipManager;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+
+public class GroupsTree extends JTree implements DragSourceListener,
+		DropTargetListener, DragGestureListener {
+	/** distance from component borders from which on autoscrolling starts. */
+	private static final int dragScrollActivationMargin = 10;
+
+	/** number of pixels to scroll each time handler is called. */
+	private static final int dragScrollDistance = 5;
+
+	/** time of last autoscroll event (for limiting speed). */
+	private static long lastDragAutoscroll = 0L;
+
+	/** minimum interval between two autoscroll events (for limiting speed). */
+	private static final long minAutoscrollInterval = 50L;
+
+	/**
+	 * the point on which the cursor is currently idling during a drag
+	 * operation.
+	 */
+	private Point idlePoint;
+
+	/** time since which cursor is idling. */
+	private long idleStartTime = 0L;
+
+	/** max. distance cursor may move in x or y direction while idling. */
+	private static final int idleMargin = 1;
+
+	/** idle time after which the node below is expanded. */
+	private static final long idleTimeToExpandNode = 1000L;
+
+	private GroupSelector groupSelector;
+
+	private GroupTreeNode dragNode = null;
+
+	private final GroupTreeCellRenderer cellRenderer = new GroupTreeCellRenderer();
+
+	public GroupsTree(GroupSelector groupSelector) {
+	    // Adjust hight according to http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4760081
+	    FontMetrics metrics = getFontMetrics(getFont());
+	    setRowHeight(Math.max(getRowHeight(), metrics.getHeight()));
+
+		this.groupSelector = groupSelector;
+		DragGestureRecognizer dgr = DragSource.getDefaultDragSource()
+				.createDefaultDragGestureRecognizer(this,
+						DnDConstants.ACTION_MOVE, this);
+		// Eliminates right mouse clicks as valid actions
+		dgr.setSourceActions(dgr.getSourceActions() & ~InputEvent.BUTTON3_MASK);
+		new DropTarget(this, this);
+		setCellRenderer(cellRenderer);
+		setFocusable(false);
+		setToggleClickCount(0);
+		ToolTipManager.sharedInstance().registerComponent(this);
+		setShowsRootHandles(false);
+		setVisibleRowCount(Globals.prefs.getInt("groupsVisibleRows"));
+		getSelectionModel().setSelectionMode(
+				TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
+	}
+
+	public void dragEnter(DragSourceDragEvent dsde) {
+		// ignore
+	}
+
+	/** This is for moving of nodes within myself */
+	public void dragOver(DragSourceDragEvent dsde) {
+		final Point p = dsde.getLocation(); // screen coordinates!
+		SwingUtilities.convertPointFromScreen(p, this);
+		final TreePath path = getPathForLocation(p.x, p.y);
+		if (path == null) {
+			dsde.getDragSourceContext().setCursor(DragSource.DefaultMoveNoDrop);
+			return;
+		}
+		final GroupTreeNode target = (GroupTreeNode) path
+				.getLastPathComponent();
+		if (target == null || dragNode.isNodeDescendant(target)
+				|| dragNode == target) {
+			dsde.getDragSourceContext().setCursor(DragSource.DefaultMoveNoDrop);
+			return;
+		}
+		dsde.getDragSourceContext().setCursor(DragSource.DefaultMoveDrop);
+	}
+
+	public void dropActionChanged(DragSourceDragEvent dsde) {
+		// ignore
+	}
+
+	public void dragDropEnd(DragSourceDropEvent dsde) {
+		dragNode = null;
+	}
+
+	public void dragExit(DragSourceEvent dse) {
+		// ignore
+	}
+
+	public void dragEnter(DropTargetDragEvent dtde) {
+		// ignore
+	}
+
+	/** This handles dragging of nodes (from myself) or entries (from the table) */
+	public void dragOver(DropTargetDragEvent dtde) {
+		final Point cursor = dtde.getLocation();
+		final long currentTime = System.currentTimeMillis();
+		if (idlePoint == null)
+			idlePoint = cursor;
+
+		// determine node over which the user is dragging
+		final TreePath path = getPathForLocation(cursor.x, cursor.y);
+		final GroupTreeNode target = path == null ? null : (GroupTreeNode) path
+				.getLastPathComponent();
+		setHighlight1Cell(target);
+
+		// accept or reject
+		if (dtde.isDataFlavorSupported(GroupTreeNode.flavor)) {
+			// accept: move nodes within tree
+			dtde.acceptDrag(DnDConstants.ACTION_MOVE);
+		} else if (dtde
+				.isDataFlavorSupported(TransferableEntrySelection.flavorInternal)) {
+			// check if node accepts explicit assignment
+			if (path == null) {
+				dtde.rejectDrag();
+			} else {
+				// this would be the place to check if the dragging entries
+				// maybe are in this group already, but I think that's not
+				// worth the bother (DropTargetDragEvent does not provide
+				// access to the drag object)...
+				// it might even be irritating to the user.
+				if (target.getGroup().supportsAdd()) {
+					// accept: assignment from EntryTable
+					dtde.acceptDrag(DnDConstants.ACTION_LINK);
+				} else {
+					dtde.rejectDrag();
+				}
+			}
+		} else {
+			dtde.rejectDrag();
+		}
+
+		// auto open
+		if (Math.abs(cursor.x - idlePoint.x) < idleMargin
+				&& Math.abs(cursor.y - idlePoint.y) < idleMargin) {
+			if (currentTime - idleStartTime >= idleTimeToExpandNode) {
+				if (path != null) {
+					expandPath(path);
+				}
+			}
+		} else {
+			idlePoint = cursor;
+			idleStartTime = currentTime;
+		}
+
+		// autoscrolling
+		if (currentTime - lastDragAutoscroll < minAutoscrollInterval)
+			return;
+		final Rectangle r = getVisibleRect();
+		final boolean scrollUp = cursor.y - r.y < dragScrollActivationMargin;
+		final boolean scrollDown = r.y + r.height - cursor.y < dragScrollActivationMargin;
+		final boolean scrollLeft = cursor.x - r.x < dragScrollActivationMargin;
+		final boolean scrollRight = r.x + r.width - cursor.x < dragScrollActivationMargin;
+		if (scrollUp)
+			r.translate(0, -dragScrollDistance);
+		else if (scrollDown)
+			r.translate(0, +dragScrollDistance);
+		if (scrollLeft)
+			r.translate(-dragScrollDistance, 0);
+		else if (scrollRight)
+			r.translate(+dragScrollDistance, 0);
+		scrollRectToVisible(r);
+		lastDragAutoscroll = currentTime;
+	}
+
+	public void dropActionChanged(DropTargetDragEvent dtde) {
+		// ignore
+	}
+
+	public void drop(DropTargetDropEvent dtde) {
+		setHighlight1Cell(null);
+		try {
+			// initializations common to all flavors
+			final Transferable transferable = dtde.getTransferable();
+			final Point p = dtde.getLocation();
+			final TreePath path = getPathForLocation(p.x, p.y);
+			if (path == null) {
+				dtde.rejectDrop();
+				return;
+			}
+			final GroupTreeNode target = (GroupTreeNode) path
+					.getLastPathComponent();
+			// check supported flavors
+			if (transferable.isDataFlavorSupported(GroupTreeNode.flavor)) {
+				GroupTreeNode source = (GroupTreeNode) transferable
+						.getTransferData(GroupTreeNode.flavor);
+				if (source == target) {
+					dtde.rejectDrop(); // ignore this
+					return;
+				}
+				if (source.isNodeDescendant(target)) {
+					dtde.rejectDrop();
+					return;
+				}
+				Enumeration<TreePath> expandedPaths = groupSelector.getExpandedPaths();
+				UndoableMoveGroup undo = new UndoableMoveGroup(groupSelector,
+						groupSelector.getGroupTreeRoot(), source, target,
+						target.getChildCount());
+				target.add(source);
+				dtde.getDropTargetContext().dropComplete(true);
+				// update selection/expansion state
+				groupSelector.revalidateGroups(new TreePath[] { new TreePath(
+						source.getPath()) }, refreshPaths(expandedPaths));
+				groupSelector.concludeMoveGroup(undo, source);
+			} else if (transferable
+					.isDataFlavorSupported(TransferableEntrySelection.flavorInternal)) {
+				final AbstractGroup group = target.getGroup();
+				if (!group.supportsAdd()) {
+					// this should never happen, because the same condition
+					// is checked in dragOver already
+					dtde.rejectDrop();
+					return;
+				}
+				final TransferableEntrySelection selection = (TransferableEntrySelection) transferable
+						.getTransferData(TransferableEntrySelection.flavorInternal);
+				final BibtexEntry[] entries = selection.getSelection();
+				int assignedEntries = 0;
+				for (int i = 0; i < entries.length; ++i) {
+					if (!target.getGroup().contains(entries[i]))
+						++assignedEntries;
+				}
+
+				// warn if assignment has undesired side effects (modifies a
+				// field != keywords)
+				if (!Util.warnAssignmentSideEffects(
+						new AbstractGroup[] { group },
+						selection.getSelection(), groupSelector
+								.getActiveBasePanel().getDatabase(),
+						groupSelector.frame))
+					return; // user aborted operation
+
+				// if an editor is showing, its fields must be updated
+				// after the assignment, and before that, the current
+				// edit has to be stored:
+				groupSelector.getActiveBasePanel().storeCurrentEdit();
+
+				AbstractUndoableEdit undo = group.add(selection.getSelection());
+				if (undo instanceof UndoableChangeAssignment)
+					((UndoableChangeAssignment) undo).setEditedNode(target);
+				dtde.getDropTargetContext().dropComplete(true);
+				groupSelector.revalidateGroups();
+				groupSelector.concludeAssignment(undo, target, assignedEntries);
+			} else {
+				dtde.rejectDrop();
+				return;
+			}
+		} catch (IOException ioe) {
+			// ignore
+		} catch (UnsupportedFlavorException e) {
+			// ignore
+		}
+	}
+
+	public void dragExit(DropTargetEvent dte) {
+		setHighlight1Cell(null);
+	}
+
+	public void dragGestureRecognized(DragGestureEvent dge) {
+		GroupTreeNode selectedNode = getSelectedNode();
+		if (selectedNode == null)
+			return; // nothing to transfer (select manually?)
+		Cursor cursor = DragSource.DefaultMoveDrop;
+		dragNode = selectedNode;
+		dge.getDragSource().startDrag(dge, cursor, selectedNode, this);
+	}
+
+	/** Returns the first selected node, or null if nothing is selected. */
+	public GroupTreeNode getSelectedNode() {
+		TreePath selectionPath = getSelectionPath();
+		return selectionPath != null ? (GroupTreeNode) selectionPath
+				.getLastPathComponent() : null;
+	}
+
+    /**
+     * Refresh paths that may have become invalid due to node movements within
+     * the tree. This method creates new paths to the last path components
+     * (which must still exist) of the specified paths.
+     * 
+     * @param paths
+     *            Paths that may have become invalid.
+     * @return Refreshed paths that are all valid.
+     */
+    public Enumeration<TreePath> refreshPaths(Enumeration<TreePath> paths) {
+        Vector<TreePath> freshPaths = new Vector<TreePath>();
+        while (paths.hasMoreElements()) {
+            freshPaths.add(new TreePath(
+                    ((DefaultMutableTreeNode)paths.nextElement()
+                            .getLastPathComponent()).getPath()));
+        }
+        return freshPaths.elements();
+    }
+
+    /**
+     * Refresh paths that may have become invalid due to node movements within
+     * the tree. This method creates new paths to the last path components
+     * (which must still exist) of the specified paths.
+     * 
+     * @param paths
+     *            Paths that may have become invalid.
+     * @return Refreshed paths that are all valid.
+     */
+    public TreePath[] refreshPaths(TreePath[] paths) {
+        TreePath[] freshPaths = new TreePath[paths.length];
+        for (int i = 0; i < paths.length; ++i) {
+            freshPaths[i] = new TreePath(((DefaultMutableTreeNode) paths[i]
+                            .getLastPathComponent()).getPath());
+        }
+        return freshPaths;
+    }
+
+	/** Highlights the specified cell or disables highlight if cell == null */
+	public void setHighlight1Cell(Object cell) {
+		cellRenderer.setHighlight1Cell(cell);
+		repaint();
+	}
+
+	/** Highlights the specified cells or disables highlight if cells == null */
+	public void setHighlight2Cells(Object[] cells) {
+		cellRenderer.setHighlight2Cells(cells);
+		repaint();
+	}
+
+	/** Highlights the specified cells or disables highlight if cells == null */
+	public void setHighlight3Cells(Object[] cells) {
+		cellRenderer.setHighlight3Cells(cells);
+		repaint();
+	}
+    
+    /** Highlights the specified cell or disables highlight if cell == null */
+    public void setHighlightBorderCell(GroupTreeNode node) {
+        cellRenderer.setHighlightBorderCell(node);
+        repaint();
+    }
+
+	/** Sort immediate children of the specified node alphabetically. */
+	public void sort(GroupTreeNode node, boolean recursive) {
+		sortWithoutRevalidate(node, recursive);
+		groupSelector.revalidateGroups();
+	}
+
+	/** This sorts without revalidation of groups */
+	protected void sortWithoutRevalidate(GroupTreeNode node, boolean recursive) {
+		if (node.isLeaf())
+			return; // nothing to sort
+		GroupTreeNode child1, child2;
+		int j = node.getChildCount() - 1;
+		int lastModified;
+		while (j > 0) {
+			lastModified = j + 1;
+			j = -1;
+			for (int i = 1; i < lastModified; ++i) {
+				child1 = (GroupTreeNode) node.getChildAt(i - 1);
+				child2 = (GroupTreeNode) node.getChildAt(i);
+				if (child2.getGroup().getName().compareToIgnoreCase(
+						child1.getGroup().getName()) < 0) {
+					node.remove(child1);
+					node.insert(child1, i);
+					j = i;
+				}
+			}
+		}
+		if (recursive) {
+			for (int i = 0; i < node.getChildCount(); ++i) {
+				sortWithoutRevalidate((GroupTreeNode) node.getChildAt(i), true);
+			}
+		}
+	}
+
+	/** Expand this node and all its children. */
+	public void expandSubtree(GroupTreeNode node) {
+		for (Enumeration<GroupTreeNode> e = node.depthFirstEnumeration(); e.hasMoreElements();)
+			expandPath(new TreePath(e.nextElement().getPath()));
+	}
+
+	/** Collapse this node and all its children. */
+	public void collapseSubtree(GroupTreeNode node) {
+		for (Enumeration<GroupTreeNode> e = node.depthFirstEnumeration(); e.hasMoreElements();)
+			collapsePath(new TreePath((e.nextElement())
+					.getPath()));
+	}
+
+	/**
+	 * Returns true if the node specified by path has at least one descendant
+	 * that is currently expanded.
+	 */
+	public boolean hasExpandedDescendant(TreePath path) {
+		GroupTreeNode node = (GroupTreeNode) path.getLastPathComponent();
+		for (Enumeration<GroupTreeNode> e = node.children(); e.hasMoreElements();) {
+			GroupTreeNode child = e.nextElement();
+			if (child.isLeaf())
+				continue; // don't care about this case
+			TreePath pathToChild = path.pathByAddingChild(child);
+			if (isExpanded(pathToChild) || hasExpandedDescendant(pathToChild))
+				return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Returns true if the node specified by path has at least one descendant
+	 * that is currently collapsed.
+	 */
+	public boolean hasCollapsedDescendant(TreePath path) {
+		GroupTreeNode node = (GroupTreeNode) path.getLastPathComponent();
+		for (Enumeration<GroupTreeNode> e = node.children(); e.hasMoreElements();) {
+			GroupTreeNode child = e.nextElement();
+			if (child.isLeaf())
+				continue; // don't care about this case
+			TreePath pathToChild = path.pathByAddingChild(child);
+			if (isCollapsed(pathToChild) || hasCollapsedDescendant(pathToChild))
+				return true;
+		}
+		return false;
+	}
+}
diff --git a/src/java/net/sf/jabref/groups/KeywordGroup.java b/src/java/net/sf/jabref/groups/KeywordGroup.java
index 786b3f2..108d52a 100644
--- a/src/java/net/sf/jabref/groups/KeywordGroup.java
+++ b/src/java/net/sf/jabref/groups/KeywordGroup.java
@@ -1,401 +1,401 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.util.Map;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableFieldChange;
-import net.sf.jabref.util.QuotedStringTokenizer;
-
-/**
- * @author jzieren
- */
-public class KeywordGroup extends AbstractGroup implements SearchRule {
-	public static final String ID = "KeywordGroup:";
-	private final String m_searchField;
-	private final String m_searchExpression;
-	private final boolean m_caseSensitive;
-	private final boolean m_regExp;
-	private Pattern m_pattern = null;
-
-	/**
-	 * Creates a KeywordGroup with the specified properties.
-	 */
-	public KeywordGroup(String name, String searchField,
-			String searchExpression, boolean caseSensitive, boolean regExp,
-			int context) throws IllegalArgumentException,
-			PatternSyntaxException {
-		super(name, context);
-		m_searchField = searchField;
-		m_searchExpression = searchExpression;
-		m_caseSensitive = caseSensitive;
-		m_regExp = regExp;
-		if (m_regExp)
-			compilePattern();
-	}
-
-	protected void compilePattern() throws IllegalArgumentException,
-			PatternSyntaxException {
-		m_pattern = m_caseSensitive ? Pattern.compile("\\b"+m_searchExpression+"\\b")
-				: Pattern.compile("\\b"+m_searchExpression+"\\b", Pattern.CASE_INSENSITIVE);
-	}
-
-	/**
-	 * Parses s and recreates the KeywordGroup from it.
-	 * 
-	 * @param s
-	 *            The String representation obtained from
-	 *            KeywordGroup.toString()
-	 */
-	public static AbstractGroup fromString(String s, BibtexDatabase db,
-			int version) throws Exception {
-        if (!s.startsWith(ID))
-			throw new Exception(
-					"Internal error: KeywordGroup cannot be created from \""
-							+ s
-							+ "\". "
-							+ "Please report this on www.sf.net/projects/jabref");
-		QuotedStringTokenizer tok = new QuotedStringTokenizer(s.substring(ID
-				.length()), SEPARATOR, QUOTE_CHAR);
-		switch (version) {
-		case 0: {
-			String name = tok.nextToken();
-			String field = tok.nextToken();
-			String expression = tok.nextToken();
-			// assume caseSensitive=false and regExp=true for old groups
-			return new KeywordGroup(Util.unquote(name, QUOTE_CHAR), Util
-					.unquote(field, QUOTE_CHAR), Util.unquote(expression,
-					QUOTE_CHAR), false, true, AbstractGroup.INDEPENDENT);
-		}
-		case 1:
-		case 2: {
-			String name = tok.nextToken();
-			String field = tok.nextToken();
-			String expression = tok.nextToken();
-			boolean caseSensitive = Integer.parseInt(tok.nextToken()) == 1;
-			boolean regExp = Integer.parseInt(tok.nextToken()) == 1;
-			return new KeywordGroup(Util.unquote(name, QUOTE_CHAR), Util
-					.unquote(field, QUOTE_CHAR), Util.unquote(expression,
-					QUOTE_CHAR), caseSensitive, regExp,
-					AbstractGroup.INDEPENDENT);
-		}
-		case 3: {
-            String name = tok.nextToken();
-            int context = Integer.parseInt(tok.nextToken());
-            String field = tok.nextToken();
-            String expression = tok.nextToken();
-            boolean caseSensitive = Integer.parseInt(tok.nextToken()) == 1;
-            boolean regExp = Integer.parseInt(tok.nextToken()) == 1;
-            return new KeywordGroup(Util.unquote(name, QUOTE_CHAR), Util
-                    .unquote(field, QUOTE_CHAR), Util.unquote(expression,
-                    QUOTE_CHAR), caseSensitive, regExp, context);
-		}
-		default:
-			throw new UnsupportedVersionException("KeywordGroup", version);
-		}
-	}
-
-	/**
-	 * @see net.sf.jabref.groups.AbstractGroup#getSearchRule()
-	 */
-	public SearchRule getSearchRule() {
-		return this;
-	}
-
-	/**
-	 * Returns a String representation of this object that can be used to
-	 * reconstruct it.
-	 */
-	public String toString() {
-		return ID + Util.quote(m_name, SEPARATOR, QUOTE_CHAR) + SEPARATOR
-				+ m_context + SEPARATOR
-				+ Util.quote(m_searchField, SEPARATOR, QUOTE_CHAR) + SEPARATOR
-				+ Util.quote(m_searchExpression, SEPARATOR, QUOTE_CHAR)
-				+ SEPARATOR + (m_caseSensitive ? "1" : "0") + SEPARATOR
-				+ (m_regExp ? "1" : "0") + SEPARATOR;
-	}
-
-	public boolean supportsAdd() {
-		return !m_regExp;
-	}
-
-	public boolean supportsRemove() {
-		return !m_regExp;
-	}
-
-	public AbstractUndoableEdit add(BibtexEntry[] entries) {
-		if (!supportsAdd())
-			return null;
-		if ((entries != null) && (entries.length > 0)) {
-			NamedCompound ce = new NamedCompound(Globals
-					.lang("add entries to group"));
-			boolean modified = false;
-			for (int i = 0; i < entries.length; i++) {
-				if (applyRule(null, entries[i]) == 0) {
-					String oldContent = entries[i]
-							.getField(m_searchField), 
-							pre = Globals.prefs.get("groupKeywordSeparator");
-					String newContent = (oldContent == null ? "" : oldContent
-							+ pre)
-							+ m_searchExpression;
-					entries[i].setField(m_searchField, newContent);
-
-					// Store undo information.
-					ce.addEdit(new UndoableFieldChange(entries[i],
-							m_searchField, oldContent, newContent));
-					modified = true;
-				}
-			}
-			if (modified)
-				ce.end();
-
-			return modified ? ce : null;
-		}
-
-		return null;
-	}
-
-	public AbstractUndoableEdit remove(BibtexEntry[] entries) {
-		if (!supportsRemove())
-			return null;
-
-		if ((entries != null) && (entries.length > 0)) {
-			NamedCompound ce = new NamedCompound(Globals
-					.lang("remove from group"));
-			boolean modified = false;
-			for (int i = 0; i < entries.length; ++i) {
-				if (applyRule(null, entries[i]) > 0) {
-					String oldContent = entries[i]
-							.getField(m_searchField);
-					removeMatches(entries[i]);
-					// Store undo information.
-					ce.addEdit(new UndoableFieldChange(entries[i],
-							m_searchField, oldContent, entries[i]
-									.getField(m_searchField)));
-					modified = true;
-				}
-			}
-			if (modified)
-				ce.end();
-
-			return modified ? ce : null;
-		}
-
-		return null;
-	}
-
-	public boolean equals(Object o) {
-		if (!(o instanceof KeywordGroup))
-			return false;
-		KeywordGroup other = (KeywordGroup) o;
-		return m_name.equals(other.m_name)
-				&& m_searchField.equals(other.m_searchField)
-				&& m_searchExpression.equals(other.m_searchExpression)
-				&& m_caseSensitive == other.m_caseSensitive
-				&& m_regExp == other.m_regExp
-                && getHierarchicalContext() == other.getHierarchicalContext();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see net.sf.jabref.groups.AbstractGroup#contains(java.util.Map,
-	 *      net.sf.jabref.BibtexEntry)
-	 */
-	public boolean contains(Map<String, String> searchOptions, BibtexEntry entry) {
-		return contains(entry);
-	}
-
-	public boolean contains(BibtexEntry entry) {
-		String content = entry.getField(m_searchField);
-		if (content == null)
-			return false;
-		if (m_regExp)
-			return m_pattern.matcher(content).find();
-		if (m_caseSensitive)
-			return containsWord(m_searchExpression, content);
-		return containsWord(m_searchExpression.toLowerCase(), content.toLowerCase());
-	}
-
-    /**
-     * Look for the given non-regexp string in another string, but check whether a
-     * match concerns a complete word, not part of a word.
-     * @param word The word to look for.
-     * @param text The string to look in.
-     * @return true if the word was found, false otherwise.
-     */
-    private static boolean containsWord(String word, String text) {
-        int piv = 0;
-        while (piv < text.length()) {
-            int ind = text.indexOf(word, piv);
-            if (ind < 0)
-                return false;
-            // Found a match. See if it is a complete word:
-            if (((ind == 0) || !Character.isLetterOrDigit(text.charAt(ind-1))) &&
-                ((ind+word.length() == text.length()) || !Character.isLetterOrDigit(text.charAt(ind+word.length())))) {
-                return true;
-            }
-            else piv = ind+1;
-        }
-        return false;
-    }
-
-	/**
-	 * Removes matches of searchString in the entry's field. This is only
-	 * possible if the search expression is not a regExp.
-	 */
-	private void removeMatches(BibtexEntry entry) {
-		String content = entry.getField(m_searchField);
-		if (content == null)
-			return; // nothing to modify
-		StringBuffer sbOrig = new StringBuffer(content);
-		StringBuffer sbLower = new StringBuffer(content.toLowerCase());
-		StringBuffer haystack = m_caseSensitive ? sbOrig : sbLower;
-		String needle = m_caseSensitive ? m_searchExpression
-				: m_searchExpression.toLowerCase();
-		int i, j, k;
-		final String separator = Globals.prefs.get("groupKeywordSeparator");
-		while ((i = haystack.indexOf(needle)) >= 0) {
-			sbOrig.replace(i, i + needle.length(), "");
-			sbLower.replace(i, i + needle.length(), "");
-			// reduce spaces at i to 1
-			j = i;
-			k = i;
-			while (j - 1 >= 0 && separator.indexOf(haystack.charAt(j - 1)) >= 0)
-				--j;
-			while (k < haystack.length() && separator.indexOf(haystack.charAt(k)) >= 0)
-				++k;
-			sbOrig.replace(j, k, j >= 0 && k < sbOrig.length() ? separator : "");
-			sbLower.replace(j, k, j >= 0 && k < sbOrig.length() ? separator : "");
-		}
-
-		String result = sbOrig.toString().trim();
-		entry.setField(m_searchField, (result.length() > 0 ? result : null));
-	}
-
-	public int applyRule(Map<String, String> searchOptions, BibtexEntry entry) {
-		return contains(searchOptions, entry) ? 1 : 0;
-	}
-
-    public boolean validateSearchStrings(Map<String, String> searchStrings) {
-        return true;
-    }
-
-    public AbstractGroup deepCopy() {
-		try {
-			return new KeywordGroup(m_name, m_searchField, m_searchExpression,
-					m_caseSensitive, m_regExp, m_context);
-		} catch (Throwable t) {
-			// this should never happen, because the constructor obviously
-			// succeeded in creating _this_ instance!
-			System.err.println("Internal error: Exception " + t
-					+ " in KeywordGroup.deepCopy(). "
-					+ "Please report this on www.sf.net/projects/jabref");
-			return null;
-		}
-	}
-
-	public boolean isCaseSensitive() {
-		return m_caseSensitive;
-	}
-
-	public boolean isRegExp() {
-		return m_regExp;
-	}
-
-	public String getSearchExpression() {
-		return m_searchExpression;
-	}
-
-	public String getSearchField() {
-		return m_searchField;
-	}
-
-	public boolean isDynamic() {
-		return true;
-	}
-	
-	public String getDescription() {
-		return getDescriptionForPreview(m_searchField, m_searchExpression, m_caseSensitive,
-				m_regExp); 
-	}
-	
-	public static String getDescriptionForPreview(String field, String expr,
-            boolean caseSensitive, boolean regExp) {
-        StringBuffer sb = new StringBuffer();
-        sb.append(regExp ? Globals.lang(
-                "This group contains entries whose <b>%0</b> field contains the regular expression <b>%1</b>",
-                field, Util.quoteForHTML(expr))
-                : Globals.lang(
-                        "This group contains entries whose <b>%0</b> field contains the keyword <b>%1</b>",
-                        field, Util.quoteForHTML(expr)));
-        sb.append(" (").append(caseSensitive ? Globals.lang("case sensitive")
-                : Globals.lang("case insensitive")).append("). ");
-        sb.append(regExp ? Globals.lang(
-                "Entries cannot be manually assigned to or removed from this group.")
-                : Globals.lang(
-                        "Additionally, entries whose <b>%0</b> field does not contain "
-                        + "<b>%1</b> can be assigned manually to this group by selecting them "
-                        + "then using either drag and drop or the context menu. "
-                        + "This process adds the term <b>%1</b> to "
-                        + "each entry's <b>%0</b> field. "
-                        + "Entries can be removed manually from this group by selecting them "
-                        + "then using the context menu. "
-                        + "This process removes the term <b>%1</b> from "
-                        + "each entry's <b>%0</b> field.",
-                        field, Util.quoteForHTML(expr)));
-        return sb.toString();
-    }
-
-	public String getShortDescription() {
-		StringBuffer sb = new StringBuffer();
-		sb.append("<b>");
-		if (Globals.prefs.getBoolean("groupShowDynamic"))
-            sb.append("<i>").append(Util.quoteForHTML(getName())).append("</i>");
-		else
-			sb.append(Util.quoteForHTML(getName()));
-			sb.append("</b> - ");
-            sb.append(Globals.lang("dynamic group"));
-            sb.append("<b>");
-            sb.append(m_searchField);
-            sb.append("</b>");
-            sb.append(Globals.lang("contains"));
-            sb.append(" <b>");
-            sb.append(Util.quoteForHTML(m_searchExpression));
-            sb.append("</b>)");
-		switch (getHierarchicalContext()) {
-		case AbstractGroup.INCLUDING:
-            sb.append(", ").append(Globals.lang("includes subgroups"));
-			break;
-		case AbstractGroup.REFINING:
-        	sb.append(", ").append(Globals.lang("refines supergroup"));
-			break;
-		default:
-			break;
-		}
-		return sb.toString();
-	}
-
-    public String getTypeId() {
-        return ID;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.util.Map;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.*;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableFieldChange;
+import net.sf.jabref.util.QuotedStringTokenizer;
+
+/**
+ * @author jzieren
+ */
+public class KeywordGroup extends AbstractGroup implements SearchRule {
+	public static final String ID = "KeywordGroup:";
+	private final String m_searchField;
+	private final String m_searchExpression;
+	private final boolean m_caseSensitive;
+	private final boolean m_regExp;
+	private Pattern m_pattern = null;
+
+	/**
+	 * Creates a KeywordGroup with the specified properties.
+	 */
+	public KeywordGroup(String name, String searchField,
+			String searchExpression, boolean caseSensitive, boolean regExp,
+			int context) throws IllegalArgumentException,
+			PatternSyntaxException {
+		super(name, context);
+		m_searchField = searchField;
+		m_searchExpression = searchExpression;
+		m_caseSensitive = caseSensitive;
+		m_regExp = regExp;
+		if (m_regExp)
+			compilePattern();
+	}
+
+	protected void compilePattern() throws IllegalArgumentException,
+			PatternSyntaxException {
+		m_pattern = m_caseSensitive ? Pattern.compile("\\b"+m_searchExpression+"\\b")
+				: Pattern.compile("\\b"+m_searchExpression+"\\b", Pattern.CASE_INSENSITIVE);
+	}
+
+	/**
+	 * Parses s and recreates the KeywordGroup from it.
+	 * 
+	 * @param s
+	 *            The String representation obtained from
+	 *            KeywordGroup.toString()
+	 */
+	public static AbstractGroup fromString(String s, BibtexDatabase db,
+			int version) throws Exception {
+        if (!s.startsWith(ID))
+			throw new Exception(
+					"Internal error: KeywordGroup cannot be created from \""
+							+ s
+							+ "\". "
+							+ "Please report this on www.sf.net/projects/jabref");
+		QuotedStringTokenizer tok = new QuotedStringTokenizer(s.substring(ID
+				.length()), SEPARATOR, QUOTE_CHAR);
+		switch (version) {
+		case 0: {
+			String name = tok.nextToken();
+			String field = tok.nextToken();
+			String expression = tok.nextToken();
+			// assume caseSensitive=false and regExp=true for old groups
+			return new KeywordGroup(Util.unquote(name, QUOTE_CHAR), Util
+					.unquote(field, QUOTE_CHAR), Util.unquote(expression,
+					QUOTE_CHAR), false, true, AbstractGroup.INDEPENDENT);
+		}
+		case 1:
+		case 2: {
+			String name = tok.nextToken();
+			String field = tok.nextToken();
+			String expression = tok.nextToken();
+			boolean caseSensitive = Integer.parseInt(tok.nextToken()) == 1;
+			boolean regExp = Integer.parseInt(tok.nextToken()) == 1;
+			return new KeywordGroup(Util.unquote(name, QUOTE_CHAR), Util
+					.unquote(field, QUOTE_CHAR), Util.unquote(expression,
+					QUOTE_CHAR), caseSensitive, regExp,
+					AbstractGroup.INDEPENDENT);
+		}
+		case 3: {
+            String name = tok.nextToken();
+            int context = Integer.parseInt(tok.nextToken());
+            String field = tok.nextToken();
+            String expression = tok.nextToken();
+            boolean caseSensitive = Integer.parseInt(tok.nextToken()) == 1;
+            boolean regExp = Integer.parseInt(tok.nextToken()) == 1;
+            return new KeywordGroup(Util.unquote(name, QUOTE_CHAR), Util
+                    .unquote(field, QUOTE_CHAR), Util.unquote(expression,
+                    QUOTE_CHAR), caseSensitive, regExp, context);
+		}
+		default:
+			throw new UnsupportedVersionException("KeywordGroup", version);
+		}
+	}
+
+	/**
+	 * @see net.sf.jabref.groups.AbstractGroup#getSearchRule()
+	 */
+	public SearchRule getSearchRule() {
+		return this;
+	}
+
+	/**
+	 * Returns a String representation of this object that can be used to
+	 * reconstruct it.
+	 */
+	public String toString() {
+		return ID + Util.quote(m_name, SEPARATOR, QUOTE_CHAR) + SEPARATOR
+				+ m_context + SEPARATOR
+				+ Util.quote(m_searchField, SEPARATOR, QUOTE_CHAR) + SEPARATOR
+				+ Util.quote(m_searchExpression, SEPARATOR, QUOTE_CHAR)
+				+ SEPARATOR + (m_caseSensitive ? "1" : "0") + SEPARATOR
+				+ (m_regExp ? "1" : "0") + SEPARATOR;
+	}
+
+	public boolean supportsAdd() {
+		return !m_regExp;
+	}
+
+	public boolean supportsRemove() {
+		return !m_regExp;
+	}
+
+	public AbstractUndoableEdit add(BibtexEntry[] entries) {
+		if (!supportsAdd())
+			return null;
+		if ((entries != null) && (entries.length > 0)) {
+			NamedCompound ce = new NamedCompound(Globals
+					.lang("add entries to group"));
+			boolean modified = false;
+			for (int i = 0; i < entries.length; i++) {
+				if (applyRule(null, entries[i]) == 0) {
+					String oldContent = entries[i]
+							.getField(m_searchField), 
+							pre = Globals.prefs.get("groupKeywordSeparator");
+					String newContent = (oldContent == null ? "" : oldContent
+							+ pre)
+							+ m_searchExpression;
+					entries[i].setField(m_searchField, newContent);
+
+					// Store undo information.
+					ce.addEdit(new UndoableFieldChange(entries[i],
+							m_searchField, oldContent, newContent));
+					modified = true;
+				}
+			}
+			if (modified)
+				ce.end();
+
+			return modified ? ce : null;
+		}
+
+		return null;
+	}
+
+	public AbstractUndoableEdit remove(BibtexEntry[] entries) {
+		if (!supportsRemove())
+			return null;
+
+		if ((entries != null) && (entries.length > 0)) {
+			NamedCompound ce = new NamedCompound(Globals
+					.lang("remove from group"));
+			boolean modified = false;
+			for (int i = 0; i < entries.length; ++i) {
+				if (applyRule(null, entries[i]) > 0) {
+					String oldContent = entries[i]
+							.getField(m_searchField);
+					removeMatches(entries[i]);
+					// Store undo information.
+					ce.addEdit(new UndoableFieldChange(entries[i],
+							m_searchField, oldContent, entries[i]
+									.getField(m_searchField)));
+					modified = true;
+				}
+			}
+			if (modified)
+				ce.end();
+
+			return modified ? ce : null;
+		}
+
+		return null;
+	}
+
+	public boolean equals(Object o) {
+		if (!(o instanceof KeywordGroup))
+			return false;
+		KeywordGroup other = (KeywordGroup) o;
+		return m_name.equals(other.m_name)
+				&& m_searchField.equals(other.m_searchField)
+				&& m_searchExpression.equals(other.m_searchExpression)
+				&& m_caseSensitive == other.m_caseSensitive
+				&& m_regExp == other.m_regExp
+                && getHierarchicalContext() == other.getHierarchicalContext();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see net.sf.jabref.groups.AbstractGroup#contains(java.util.Map,
+	 *      net.sf.jabref.BibtexEntry)
+	 */
+	public boolean contains(Map<String, String> searchOptions, BibtexEntry entry) {
+		return contains(entry);
+	}
+
+	public boolean contains(BibtexEntry entry) {
+		String content = entry.getField(m_searchField);
+		if (content == null)
+			return false;
+		if (m_regExp)
+			return m_pattern.matcher(content).find();
+		if (m_caseSensitive)
+			return containsWord(m_searchExpression, content);
+		return containsWord(m_searchExpression.toLowerCase(), content.toLowerCase());
+	}
+
+    /**
+     * Look for the given non-regexp string in another string, but check whether a
+     * match concerns a complete word, not part of a word.
+     * @param word The word to look for.
+     * @param text The string to look in.
+     * @return true if the word was found, false otherwise.
+     */
+    private static boolean containsWord(String word, String text) {
+        int piv = 0;
+        while (piv < text.length()) {
+            int ind = text.indexOf(word, piv);
+            if (ind < 0)
+                return false;
+            // Found a match. See if it is a complete word:
+            if (((ind == 0) || !Character.isLetterOrDigit(text.charAt(ind-1))) &&
+                ((ind+word.length() == text.length()) || !Character.isLetterOrDigit(text.charAt(ind+word.length())))) {
+                return true;
+            }
+            else piv = ind+1;
+        }
+        return false;
+    }
+
+	/**
+	 * Removes matches of searchString in the entry's field. This is only
+	 * possible if the search expression is not a regExp.
+	 */
+	private void removeMatches(BibtexEntry entry) {
+		String content = entry.getField(m_searchField);
+		if (content == null)
+			return; // nothing to modify
+		StringBuffer sbOrig = new StringBuffer(content);
+		StringBuffer sbLower = new StringBuffer(content.toLowerCase());
+		StringBuffer haystack = m_caseSensitive ? sbOrig : sbLower;
+		String needle = m_caseSensitive ? m_searchExpression
+				: m_searchExpression.toLowerCase();
+		int i, j, k;
+		final String separator = Globals.prefs.get("groupKeywordSeparator");
+		while ((i = haystack.indexOf(needle)) >= 0) {
+			sbOrig.replace(i, i + needle.length(), "");
+			sbLower.replace(i, i + needle.length(), "");
+			// reduce spaces at i to 1
+			j = i;
+			k = i;
+			while (j - 1 >= 0 && separator.indexOf(haystack.charAt(j - 1)) >= 0)
+				--j;
+			while (k < haystack.length() && separator.indexOf(haystack.charAt(k)) >= 0)
+				++k;
+			sbOrig.replace(j, k, j >= 0 && k < sbOrig.length() ? separator : "");
+			sbLower.replace(j, k, j >= 0 && k < sbOrig.length() ? separator : "");
+		}
+
+		String result = sbOrig.toString().trim();
+		entry.setField(m_searchField, (result.length() > 0 ? result : null));
+	}
+
+	public int applyRule(Map<String, String> searchOptions, BibtexEntry entry) {
+		return contains(searchOptions, entry) ? 1 : 0;
+	}
+
+    public boolean validateSearchStrings(Map<String, String> searchStrings) {
+        return true;
+    }
+
+    public AbstractGroup deepCopy() {
+		try {
+			return new KeywordGroup(m_name, m_searchField, m_searchExpression,
+					m_caseSensitive, m_regExp, m_context);
+		} catch (Throwable t) {
+			// this should never happen, because the constructor obviously
+			// succeeded in creating _this_ instance!
+			System.err.println("Internal error: Exception " + t
+					+ " in KeywordGroup.deepCopy(). "
+					+ "Please report this on www.sf.net/projects/jabref");
+			return null;
+		}
+	}
+
+	public boolean isCaseSensitive() {
+		return m_caseSensitive;
+	}
+
+	public boolean isRegExp() {
+		return m_regExp;
+	}
+
+	public String getSearchExpression() {
+		return m_searchExpression;
+	}
+
+	public String getSearchField() {
+		return m_searchField;
+	}
+
+	public boolean isDynamic() {
+		return true;
+	}
+	
+	public String getDescription() {
+		return getDescriptionForPreview(m_searchField, m_searchExpression, m_caseSensitive,
+				m_regExp); 
+	}
+	
+	public static String getDescriptionForPreview(String field, String expr,
+            boolean caseSensitive, boolean regExp) {
+        StringBuffer sb = new StringBuffer();
+        sb.append(regExp ? Globals.lang(
+                "This group contains entries whose <b>%0</b> field contains the regular expression <b>%1</b>",
+                field, Util.quoteForHTML(expr))
+                : Globals.lang(
+                        "This group contains entries whose <b>%0</b> field contains the keyword <b>%1</b>",
+                        field, Util.quoteForHTML(expr)));
+        sb.append(" (").append(caseSensitive ? Globals.lang("case sensitive")
+                : Globals.lang("case insensitive")).append("). ");
+        sb.append(regExp ? Globals.lang(
+                "Entries cannot be manually assigned to or removed from this group.")
+                : Globals.lang(
+                        "Additionally, entries whose <b>%0</b> field does not contain "
+                        + "<b>%1</b> can be assigned manually to this group by selecting them "
+                        + "then using either drag and drop or the context menu. "
+                        + "This process adds the term <b>%1</b> to "
+                        + "each entry's <b>%0</b> field. "
+                        + "Entries can be removed manually from this group by selecting them "
+                        + "then using the context menu. "
+                        + "This process removes the term <b>%1</b> from "
+                        + "each entry's <b>%0</b> field.",
+                        field, Util.quoteForHTML(expr)));
+        return sb.toString();
+    }
+
+	public String getShortDescription() {
+		StringBuffer sb = new StringBuffer();
+		sb.append("<b>");
+		if (Globals.prefs.getBoolean("groupShowDynamic"))
+            sb.append("<i>").append(Util.quoteForHTML(getName())).append("</i>");
+		else
+			sb.append(Util.quoteForHTML(getName()));
+			sb.append("</b> - ");
+            sb.append(Globals.lang("dynamic group"));
+            sb.append("<b>");
+            sb.append(m_searchField);
+            sb.append("</b>");
+            sb.append(Globals.lang("contains"));
+            sb.append(" <b>");
+            sb.append(Util.quoteForHTML(m_searchExpression));
+            sb.append("</b>)");
+		switch (getHierarchicalContext()) {
+		case AbstractGroup.INCLUDING:
+            sb.append(", ").append(Globals.lang("includes subgroups"));
+			break;
+		case AbstractGroup.REFINING:
+        	sb.append(", ").append(Globals.lang("refines supergroup"));
+			break;
+		default:
+			break;
+		}
+		return sb.toString();
+	}
+
+    public String getTypeId() {
+        return ID;
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/RemoveFromGroupAction.java b/src/java/net/sf/jabref/groups/RemoveFromGroupAction.java
index 39098b1..c4ca56f 100644
--- a/src/java/net/sf/jabref/groups/RemoveFromGroupAction.java
+++ b/src/java/net/sf/jabref/groups/RemoveFromGroupAction.java
@@ -1,61 +1,61 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.AbstractAction;
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-
-public class RemoveFromGroupAction extends AbstractAction {
-    protected GroupTreeNode m_node;
-    protected BasePanel m_panel;
-    public RemoveFromGroupAction(GroupTreeNode node, BasePanel panel) {
-        super(node.getGroup().getName());
-        m_node = node;
-        m_panel = panel;
-    }
-    public RemoveFromGroupAction() {
-        super(Globals.lang("Remove entry selection from this group")); // JZTODO lyrics
-    }
-    public void setNode(GroupTreeNode node) {
-        m_node = node;
-    }
-    public void setBasePanel(BasePanel panel) {
-        m_panel = panel;
-    }
-    public void actionPerformed(ActionEvent evt) {
-        // warn if assignment has undesired side effects (modifies a field != keywords)
-        if (!Util.warnAssignmentSideEffects(new AbstractGroup[]{m_node.getGroup()},
-                m_panel.getSelectedEntries(),
-                m_panel.getDatabase(),
-                m_panel.frame()))
-            return; // user aborted operation
-        
-        AbstractUndoableEdit undo = m_node.removeFromGroup(m_panel.getSelectedEntries());
-        if (undo == null)
-            return; // no changed made
-        
-        m_panel.undoManager.addEdit(undo);
-        m_panel.markBaseChanged();
-        m_panel.updateEntryEditorIfShowing();
-        m_panel.getGroupSelector().valueChanged(null);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+
+public class RemoveFromGroupAction extends AbstractAction {
+    protected GroupTreeNode m_node;
+    protected BasePanel m_panel;
+    public RemoveFromGroupAction(GroupTreeNode node, BasePanel panel) {
+        super(node.getGroup().getName());
+        m_node = node;
+        m_panel = panel;
+    }
+    public RemoveFromGroupAction() {
+        super(Globals.lang("Remove entry selection from this group")); // JZTODO lyrics
+    }
+    public void setNode(GroupTreeNode node) {
+        m_node = node;
+    }
+    public void setBasePanel(BasePanel panel) {
+        m_panel = panel;
+    }
+    public void actionPerformed(ActionEvent evt) {
+        // warn if assignment has undesired side effects (modifies a field != keywords)
+        if (!Util.warnAssignmentSideEffects(new AbstractGroup[]{m_node.getGroup()},
+                m_panel.getSelectedEntries(),
+                m_panel.getDatabase(),
+                m_panel.frame()))
+            return; // user aborted operation
+        
+        AbstractUndoableEdit undo = m_node.removeFromGroup(m_panel.getSelectedEntries());
+        if (undo == null)
+            return; // no changed made
+        
+        m_panel.undoManager.addEdit(undo);
+        m_panel.markBaseChanged();
+        m_panel.updateEntryEditorIfShowing();
+        m_panel.getGroupSelector().valueChanged(null);
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/SearchGroup.java b/src/java/net/sf/jabref/groups/SearchGroup.java
index 562df53..e671a68 100644
--- a/src/java/net/sf/jabref/groups/SearchGroup.java
+++ b/src/java/net/sf/jabref/groups/SearchGroup.java
@@ -1,409 +1,409 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.io.StringReader;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.*;
-import net.sf.jabref.search.SearchExpressionLexer;
-import net.sf.jabref.search.SearchExpressionParser;
-import net.sf.jabref.search.SearchExpressionTreeParser;
-import net.sf.jabref.search.SearchExpressionTreeParserTokenTypes;
-import net.sf.jabref.util.QuotedStringTokenizer;
-import antlr.RecognitionException;
-import antlr.collections.AST;
-
-/**
- * @author jzieren
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-public class SearchGroup extends AbstractGroup implements SearchRule {
-	public static final String ID = "SearchGroup:";
-
-	private final String m_searchExpression;
-
-	private final boolean m_caseSensitive;
-
-	private final boolean m_regExp;
-
-	private final AST m_ast;
-
-	private static final SearchExpressionTreeParser m_treeParser = new SearchExpressionTreeParser();
-
-	/**
-	 * If m_searchExpression is in valid syntax for advanced search, <b>this
-	 * </b> will do the search; otherwise, either <b>RegExpRule </b> or
-	 * <b>SimpleSearchRule </b> will be used.
-	 */
-	private final SearchRule m_searchRule;
-
-	/**
-	 * Creates a SearchGroup with the specified properties.
-	 */
-	public SearchGroup(String name, String searchExpression,
-			boolean caseSensitive, boolean regExp, int context) {
-		super(name, context);
-		m_searchExpression = searchExpression;
-		m_caseSensitive = caseSensitive;
-		m_regExp = regExp;
-
-		// create AST
-		AST ast = null;
-		try {
-			SearchExpressionParser parser = new SearchExpressionParser(
-					new SearchExpressionLexer(new StringReader(
-							m_searchExpression)));
-			parser.caseSensitive = m_caseSensitive;
-			parser.regex = m_regExp;
-			parser.searchExpression();
-			ast = parser.getAST();
-		} catch (Exception e) {
-			ast = null;
-			// nothing to do; set m_ast to null -> regular plaintext search
-		}
-		m_ast = ast;
-
-		if (m_ast != null) { // do advanced search
-			m_searchRule = this;
-		} else { // do plaintext search
-			if (m_regExp)
-				m_searchRule = new RegExpRule(m_caseSensitive);
-			else
-				m_searchRule = new SimpleSearchRule(m_caseSensitive);
-		}
-
-	}
-
-	/**
-	 * Parses s and recreates the SearchGroup from it.
-	 * 
-	 * @param s
-	 *            The String representation obtained from
-	 *            SearchGroup.toString(), or null if incompatible
-	 */
-	public static AbstractGroup fromString(String s, BibtexDatabase db,
-			int version) throws Exception {
-		if (!s.startsWith(ID))
-			throw new Exception(
-					"Internal error: SearchGroup cannot be created from \"" + s
-					+ "\". "
-					+ "Please report this on www.sf.net/projects/jabref");
-		QuotedStringTokenizer tok = new QuotedStringTokenizer(s.substring(ID
-				.length()), SEPARATOR, QUOTE_CHAR);
-		switch (version) {
-		case 0:
-		case 1:
-		case 2: {
-			String name = tok.nextToken();
-			String expression = tok.nextToken();
-			boolean caseSensitive = Integer.parseInt(tok.nextToken()) == 1;
-			boolean regExp = Integer.parseInt(tok.nextToken()) == 1;
-			// version 0 contained 4 additional booleans to specify search
-			// fields; these are ignored now, all fields are always searched
-			return new SearchGroup(Util.unquote(name, QUOTE_CHAR), Util
-					.unquote(expression, QUOTE_CHAR), caseSensitive, regExp,
-					AbstractGroup.INDEPENDENT);
-		}
-		case 3: {
-			String name = tok.nextToken();
-			int context = Integer.parseInt(tok.nextToken());
-			String expression = tok.nextToken();
-			boolean caseSensitive = Integer.parseInt(tok.nextToken()) == 1;
-			boolean regExp = Integer.parseInt(tok.nextToken()) == 1;
-			// version 0 contained 4 additional booleans to specify search
-			// fields; these are ignored now, all fields are always searched
-			return new SearchGroup(Util.unquote(name, QUOTE_CHAR), Util
-					.unquote(expression, QUOTE_CHAR), caseSensitive, regExp,
-					context);
-		}
-		default:
-			throw new UnsupportedVersionException("SearchGroup", version);
-		}
-	}
-
-    public String getTypeId() {
-        return ID;
-    }
-
-    /**
-	 * @see net.sf.jabref.groups.AbstractGroup#getSearchRule()
-	 */
-	public SearchRule getSearchRule() {
-		return this;
-	}
-
-	/**
-	 * Returns a String representation of this object that can be used to
-	 * reconstruct it.
-	 */
-	public String toString() {
-		return ID + Util.quote(m_name, SEPARATOR, QUOTE_CHAR) + SEPARATOR
-				+ m_context + SEPARATOR
-				+ Util.quote(m_searchExpression, SEPARATOR, QUOTE_CHAR)
-				+ SEPARATOR + (m_caseSensitive ? "1" : "0") + SEPARATOR
-				+ (m_regExp ? "1" : "0") + SEPARATOR;
-	}
-
-	public String getSearchExpression() {
-		return m_searchExpression;
-	}
-
-	public boolean supportsAdd() {
-		return false;
-	}
-
-	public boolean supportsRemove() {
-		return false;
-	}
-
-	public AbstractUndoableEdit add(BibtexEntry[] entries) {
-		// nothing to do, add is not supported
-		return null;
-	}
-
-	public AbstractUndoableEdit remove(BibtexEntry[] entries) {
-		// nothing to do, remove is not supported
-		return null;
-	}
-
-	public boolean equals(Object o) {
-		if (!(o instanceof SearchGroup))
-			return false;
-		SearchGroup other = (SearchGroup) o;
-		return m_name.equals(other.m_name)
-				&& m_searchExpression.equals(other.m_searchExpression)
-				&& m_caseSensitive == other.m_caseSensitive
-				&& m_regExp == other.m_regExp
-                && getHierarchicalContext() == other.getHierarchicalContext();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see net.sf.jabref.groups.AbstractGroup#contains(java.util.Map,
-	 *      net.sf.jabref.BibtexEntry)
-	 */
-	public boolean contains(Map<String, String> searchOptions, BibtexEntry entry) {
-		return applyRule(searchOptions, entry) == 0 ? false : true;
-	}
-
-	public boolean contains(BibtexEntry entry) {
-		// use dummy map
-		return contains(new HashMap<String, String>(), entry);
-	}
-
-	public int applyRule(Map<String, String> searchOptions, BibtexEntry entry) {
-		if (m_ast == null) {
-			// the searchOptions object is a dummy; we need to insert
-			// the actual search expression.
-			searchOptions.put("option", m_searchExpression);
-			return m_searchRule.applyRule(searchOptions, entry);
-		}
-		try {
-			return m_treeParser.apply(m_ast, entry);
-		} catch (RecognitionException e) {
-			return 0; // this should never occur
-		}
-	}
-
-	public AbstractGroup deepCopy() {
-		try {
-			return new SearchGroup(m_name, m_searchExpression, m_caseSensitive,
-					m_regExp, m_context);
-		} catch (Throwable t) {
-			// this should never happen, because the constructor obviously
-			// succeeded in creating _this_ instance!
-			System.err.println("Internal error: Exception " + t
-					+ " in SearchGroup.deepCopy(). "
-					+ "Please report this on www.sf.net/projects/jabref");
-			return null;
-		}
-	}
-
-	public boolean isCaseSensitive() {
-		return m_caseSensitive;
-	}
-
-	public boolean isRegExp() {
-		return m_regExp;
-	}
-
-	public boolean isDynamic() {
-		return true;
-	}
-	
-	public String getDescription() {
-		return getDescriptionForPreview(m_searchExpression, m_ast, m_caseSensitive,
-				m_regExp);
-	}
-	
-	public static String getDescriptionForPreview(String expr, AST ast,
-			boolean caseSensitive, boolean regExp) {
-		StringBuffer sb = new StringBuffer();
-		if (ast == null) {
-			sb.append(regExp ? Globals.lang(
-			        "This group contains entries in which any field contains the regular expression <b>%0</b>",
-                    Util.quoteForHTML(expr))
-                    : Globals.lang(
-                            "This group contains entries in which any field contains the term <b>%0</b>",
-                            Util.quoteForHTML(expr)));
-            sb.append(" (").append(caseSensitive ? Globals.lang("case sensitive")
-                    : Globals.lang("case insensitive")).append("). ");
-			sb.append(Globals.lang(
-                    "Entries cannot be manually assigned to or removed from this group."));
-            sb.append("<p><br>").append(Globals.lang(
-                    "Hint%c To search specific fields only, enter for example%c<p><tt>author%esmith and title%eelectrical</tt>"));
-			return sb.toString();
-		}
-		// describe advanced search expression
-        sb.append(Globals.lang("This group contains entries in which")).append(" ");
-		sb.append(describeNode(ast, regExp, false, false, false));
-		sb.append(". ");
-		sb.append(caseSensitive ? Globals.lang("The search is case sensitive.")
-				: Globals.lang("The search is case insensitive."));
-		return sb.toString();
-	}
-
-	protected static String describeNode(AST node, boolean regExp,
-			boolean not, boolean and, boolean or) {
-		StringBuffer sb = new StringBuffer();
-		switch (node.getType()) {
-		case SearchExpressionTreeParserTokenTypes.And:
-			if (not)
-                sb.append(Globals.lang("not")).append(" ");
-			// if there was an "or" in this subtree so far, braces may be needed
-			if (or || not)
-				sb.append("(");
-            sb.append(describeNode(node.getFirstChild(), regExp,
-                    false, true, false)).append(" ").append(Globals.lang("and")).append(" ").append(describeNode(node.getFirstChild()
-                    .getNextSibling(), regExp, false, true, false));
-			if (or || not)
-				sb.append(")");
-			return sb.toString();
-		case SearchExpressionTreeParserTokenTypes.Or:
-			if (not)
-                sb.append(Globals.lang("not")).append(" ");
-			// if there was an "and" in this subtree so far, braces may be
-			// needed
-			if (and || not)
-				sb.append("(");
-            sb.append(describeNode(node.getFirstChild(), regExp,
-                    false, false, true)).append(" ").append(Globals.lang("or")).append(" ").append(describeNode(node.getFirstChild()
-                    .getNextSibling(), regExp, false, false, true));
-			if (and || not)
-				sb.append(")");
-			return sb.toString();
-		case SearchExpressionTreeParserTokenTypes.Not:
-			return describeNode(node.getFirstChild(), regExp, !not,
-					and, or);
-		default:
-			node = node.getFirstChild();
-			final String field = node.getText();
-			final boolean regExpFieldSpec = !Pattern.matches("\\w+", field);
-			node = node.getNextSibling();
-			final int type = node.getType();
-			node = node.getNextSibling();
-			final String termQuoted = Util.quoteForHTML(node.getText());
-			final String fieldSpecQuoted = regExpFieldSpec ? Globals.lang(
-					"any field that matches the regular expression <b>%0</b>",
-                    Util.quoteForHTML(field)) : Globals.lang("the field <b>%0</b>", 
-                            Util.quoteForHTML(field));
-			switch (type) {
-			case SearchExpressionTreeParserTokenTypes.LITERAL_contains:
-			case SearchExpressionTreeParserTokenTypes.EQUAL:
-				if (regExp)
-					return not ? Globals.lang(
-					        "%0 doesn't contain the Regular Expression <b>%1</b>",
-                            fieldSpecQuoted, termQuoted)
-							: Globals.lang(
-							        "%0 contains the Regular Expression <b>%1</b>",
-                                    fieldSpecQuoted, termQuoted);
-				return not ? Globals.lang(
-						"%0 doesn't contain the term <b>%1</b>", fieldSpecQuoted,
-                        termQuoted) : Globals.lang("%0 contains the term <b>%1</b>",
-                                fieldSpecQuoted, termQuoted);
-			case SearchExpressionTreeParserTokenTypes.LITERAL_matches:
-			case SearchExpressionTreeParserTokenTypes.EEQUAL:
-				if (regExp)
-					return not ? Globals.lang(
-					        "%0 doesn't match the Regular Expression <b>%1</b>",
-                            fieldSpecQuoted, termQuoted)
-							: Globals.lang(
-                                    "%0 matches the Regular Expression <b>%1</b>",
-                                    fieldSpecQuoted, termQuoted);
-				return not ? Globals.lang(
-						"%0 doesn't match the term <b>%1</b>", 
-                        fieldSpecQuoted, termQuoted)
-						: Globals.lang("%0 matches the term <b>%1</b>",
-                                fieldSpecQuoted, 
-                                termQuoted);
-			case SearchExpressionTreeParserTokenTypes.NEQUAL:
-				if (regExp)
-					return not ? Globals.lang(
-							"%0 contains the Regular Expression <b>%1</b>",
-                            fieldSpecQuoted, termQuoted)
-							: Globals.lang(
-                                    "%0 doesn't contain the Regular Expression <b>%1</b>",
-                                    fieldSpecQuoted, termQuoted);
-				return not ? Globals.lang("%0 contains the term <b>%1</b>",
-                        fieldSpecQuoted, termQuoted) : Globals.lang(
-						"%0 doesn't contain the term <b>%1</b>", fieldSpecQuoted,
-                        termQuoted);
-			default:
-				return "Internal error: Unknown AST node type. "
-						+ "Please report this on www.sf.net/projects/jabref";
-				// this should never happen
-			}
-		}
-	}
-
-	public String getShortDescription() {
-		StringBuffer sb = new StringBuffer();
-		sb.append("<b>");
-		if (Globals.prefs.getBoolean("groupShowDynamic"))
-            sb.append("<i>").append(Util.quoteForHTML(getName())).append("</i>");
-		else
-			sb.append(Util.quoteForHTML(getName()));
-			sb.append("</b> - ");
-			sb.append(Globals.lang("dynamic group"));
-			sb.append(" (");
-			sb.append(Globals.lang("search expression"));
-			sb.append(" <b>").
-            append(Util.quoteForHTML(m_searchExpression)).append("</b>)");
-		switch (getHierarchicalContext()) {
-		case AbstractGroup.INCLUDING:
-            sb.append(", ").append(Globals.lang("includes subgroups"));
-			break;
-		case AbstractGroup.REFINING:
-        	sb.append(", ").append(Globals.lang("refines supergroup"));
-			break;
-		default:
-			break;
-		}
-		return sb.toString();
-	}
-
-    public boolean validateSearchStrings(Map<String, String> searchStrings) {
-        return true;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.*;
+import net.sf.jabref.search.SearchExpressionLexer;
+import net.sf.jabref.search.SearchExpressionParser;
+import net.sf.jabref.search.SearchExpressionTreeParser;
+import net.sf.jabref.search.SearchExpressionTreeParserTokenTypes;
+import net.sf.jabref.util.QuotedStringTokenizer;
+import antlr.RecognitionException;
+import antlr.collections.AST;
+
+/**
+ * @author jzieren
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+public class SearchGroup extends AbstractGroup implements SearchRule {
+	public static final String ID = "SearchGroup:";
+
+	private final String m_searchExpression;
+
+	private final boolean m_caseSensitive;
+
+	private final boolean m_regExp;
+
+	private final AST m_ast;
+
+	private static final SearchExpressionTreeParser m_treeParser = new SearchExpressionTreeParser();
+
+	/**
+	 * If m_searchExpression is in valid syntax for advanced search, <b>this
+	 * </b> will do the search; otherwise, either <b>RegExpRule </b> or
+	 * <b>SimpleSearchRule </b> will be used.
+	 */
+	private final SearchRule m_searchRule;
+
+	/**
+	 * Creates a SearchGroup with the specified properties.
+	 */
+	public SearchGroup(String name, String searchExpression,
+			boolean caseSensitive, boolean regExp, int context) {
+		super(name, context);
+		m_searchExpression = searchExpression;
+		m_caseSensitive = caseSensitive;
+		m_regExp = regExp;
+
+		// create AST
+		AST ast = null;
+		try {
+			SearchExpressionParser parser = new SearchExpressionParser(
+					new SearchExpressionLexer(new StringReader(
+							m_searchExpression)));
+			parser.caseSensitive = m_caseSensitive;
+			parser.regex = m_regExp;
+			parser.searchExpression();
+			ast = parser.getAST();
+		} catch (Exception e) {
+			ast = null;
+			// nothing to do; set m_ast to null -> regular plaintext search
+		}
+		m_ast = ast;
+
+		if (m_ast != null) { // do advanced search
+			m_searchRule = this;
+		} else { // do plaintext search
+			if (m_regExp)
+				m_searchRule = new RegExpRule(m_caseSensitive);
+			else
+				m_searchRule = new SimpleSearchRule(m_caseSensitive);
+		}
+
+	}
+
+	/**
+	 * Parses s and recreates the SearchGroup from it.
+	 * 
+	 * @param s
+	 *            The String representation obtained from
+	 *            SearchGroup.toString(), or null if incompatible
+	 */
+	public static AbstractGroup fromString(String s, BibtexDatabase db,
+			int version) throws Exception {
+		if (!s.startsWith(ID))
+			throw new Exception(
+					"Internal error: SearchGroup cannot be created from \"" + s
+					+ "\". "
+					+ "Please report this on www.sf.net/projects/jabref");
+		QuotedStringTokenizer tok = new QuotedStringTokenizer(s.substring(ID
+				.length()), SEPARATOR, QUOTE_CHAR);
+		switch (version) {
+		case 0:
+		case 1:
+		case 2: {
+			String name = tok.nextToken();
+			String expression = tok.nextToken();
+			boolean caseSensitive = Integer.parseInt(tok.nextToken()) == 1;
+			boolean regExp = Integer.parseInt(tok.nextToken()) == 1;
+			// version 0 contained 4 additional booleans to specify search
+			// fields; these are ignored now, all fields are always searched
+			return new SearchGroup(Util.unquote(name, QUOTE_CHAR), Util
+					.unquote(expression, QUOTE_CHAR), caseSensitive, regExp,
+					AbstractGroup.INDEPENDENT);
+		}
+		case 3: {
+			String name = tok.nextToken();
+			int context = Integer.parseInt(tok.nextToken());
+			String expression = tok.nextToken();
+			boolean caseSensitive = Integer.parseInt(tok.nextToken()) == 1;
+			boolean regExp = Integer.parseInt(tok.nextToken()) == 1;
+			// version 0 contained 4 additional booleans to specify search
+			// fields; these are ignored now, all fields are always searched
+			return new SearchGroup(Util.unquote(name, QUOTE_CHAR), Util
+					.unquote(expression, QUOTE_CHAR), caseSensitive, regExp,
+					context);
+		}
+		default:
+			throw new UnsupportedVersionException("SearchGroup", version);
+		}
+	}
+
+    public String getTypeId() {
+        return ID;
+    }
+
+    /**
+	 * @see net.sf.jabref.groups.AbstractGroup#getSearchRule()
+	 */
+	public SearchRule getSearchRule() {
+		return this;
+	}
+
+	/**
+	 * Returns a String representation of this object that can be used to
+	 * reconstruct it.
+	 */
+	public String toString() {
+		return ID + Util.quote(m_name, SEPARATOR, QUOTE_CHAR) + SEPARATOR
+				+ m_context + SEPARATOR
+				+ Util.quote(m_searchExpression, SEPARATOR, QUOTE_CHAR)
+				+ SEPARATOR + (m_caseSensitive ? "1" : "0") + SEPARATOR
+				+ (m_regExp ? "1" : "0") + SEPARATOR;
+	}
+
+	public String getSearchExpression() {
+		return m_searchExpression;
+	}
+
+	public boolean supportsAdd() {
+		return false;
+	}
+
+	public boolean supportsRemove() {
+		return false;
+	}
+
+	public AbstractUndoableEdit add(BibtexEntry[] entries) {
+		// nothing to do, add is not supported
+		return null;
+	}
+
+	public AbstractUndoableEdit remove(BibtexEntry[] entries) {
+		// nothing to do, remove is not supported
+		return null;
+	}
+
+	public boolean equals(Object o) {
+		if (!(o instanceof SearchGroup))
+			return false;
+		SearchGroup other = (SearchGroup) o;
+		return m_name.equals(other.m_name)
+				&& m_searchExpression.equals(other.m_searchExpression)
+				&& m_caseSensitive == other.m_caseSensitive
+				&& m_regExp == other.m_regExp
+                && getHierarchicalContext() == other.getHierarchicalContext();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see net.sf.jabref.groups.AbstractGroup#contains(java.util.Map,
+	 *      net.sf.jabref.BibtexEntry)
+	 */
+	public boolean contains(Map<String, String> searchOptions, BibtexEntry entry) {
+		return applyRule(searchOptions, entry) == 0 ? false : true;
+	}
+
+	public boolean contains(BibtexEntry entry) {
+		// use dummy map
+		return contains(new HashMap<String, String>(), entry);
+	}
+
+	public int applyRule(Map<String, String> searchOptions, BibtexEntry entry) {
+		if (m_ast == null) {
+			// the searchOptions object is a dummy; we need to insert
+			// the actual search expression.
+			searchOptions.put("option", m_searchExpression);
+			return m_searchRule.applyRule(searchOptions, entry);
+		}
+		try {
+			return m_treeParser.apply(m_ast, entry);
+		} catch (RecognitionException e) {
+			return 0; // this should never occur
+		}
+	}
+
+	public AbstractGroup deepCopy() {
+		try {
+			return new SearchGroup(m_name, m_searchExpression, m_caseSensitive,
+					m_regExp, m_context);
+		} catch (Throwable t) {
+			// this should never happen, because the constructor obviously
+			// succeeded in creating _this_ instance!
+			System.err.println("Internal error: Exception " + t
+					+ " in SearchGroup.deepCopy(). "
+					+ "Please report this on www.sf.net/projects/jabref");
+			return null;
+		}
+	}
+
+	public boolean isCaseSensitive() {
+		return m_caseSensitive;
+	}
+
+	public boolean isRegExp() {
+		return m_regExp;
+	}
+
+	public boolean isDynamic() {
+		return true;
+	}
+	
+	public String getDescription() {
+		return getDescriptionForPreview(m_searchExpression, m_ast, m_caseSensitive,
+				m_regExp);
+	}
+	
+	public static String getDescriptionForPreview(String expr, AST ast,
+			boolean caseSensitive, boolean regExp) {
+		StringBuffer sb = new StringBuffer();
+		if (ast == null) {
+			sb.append(regExp ? Globals.lang(
+			        "This group contains entries in which any field contains the regular expression <b>%0</b>",
+                    Util.quoteForHTML(expr))
+                    : Globals.lang(
+                            "This group contains entries in which any field contains the term <b>%0</b>",
+                            Util.quoteForHTML(expr)));
+            sb.append(" (").append(caseSensitive ? Globals.lang("case sensitive")
+                    : Globals.lang("case insensitive")).append("). ");
+			sb.append(Globals.lang(
+                    "Entries cannot be manually assigned to or removed from this group."));
+            sb.append("<p><br>").append(Globals.lang(
+                    "Hint%c To search specific fields only, enter for example%c<p><tt>author%esmith and title%eelectrical</tt>"));
+			return sb.toString();
+		}
+		// describe advanced search expression
+        sb.append(Globals.lang("This group contains entries in which")).append(" ");
+		sb.append(describeNode(ast, regExp, false, false, false));
+		sb.append(". ");
+		sb.append(caseSensitive ? Globals.lang("The search is case sensitive.")
+				: Globals.lang("The search is case insensitive."));
+		return sb.toString();
+	}
+
+	protected static String describeNode(AST node, boolean regExp,
+			boolean not, boolean and, boolean or) {
+		StringBuffer sb = new StringBuffer();
+		switch (node.getType()) {
+		case SearchExpressionTreeParserTokenTypes.And:
+			if (not)
+                sb.append(Globals.lang("not")).append(" ");
+			// if there was an "or" in this subtree so far, braces may be needed
+			if (or || not)
+				sb.append("(");
+            sb.append(describeNode(node.getFirstChild(), regExp,
+                    false, true, false)).append(" ").append(Globals.lang("and")).append(" ").append(describeNode(node.getFirstChild()
+                    .getNextSibling(), regExp, false, true, false));
+			if (or || not)
+				sb.append(")");
+			return sb.toString();
+		case SearchExpressionTreeParserTokenTypes.Or:
+			if (not)
+                sb.append(Globals.lang("not")).append(" ");
+			// if there was an "and" in this subtree so far, braces may be
+			// needed
+			if (and || not)
+				sb.append("(");
+            sb.append(describeNode(node.getFirstChild(), regExp,
+                    false, false, true)).append(" ").append(Globals.lang("or")).append(" ").append(describeNode(node.getFirstChild()
+                    .getNextSibling(), regExp, false, false, true));
+			if (and || not)
+				sb.append(")");
+			return sb.toString();
+		case SearchExpressionTreeParserTokenTypes.Not:
+			return describeNode(node.getFirstChild(), regExp, !not,
+					and, or);
+		default:
+			node = node.getFirstChild();
+			final String field = node.getText();
+			final boolean regExpFieldSpec = !Pattern.matches("\\w+", field);
+			node = node.getNextSibling();
+			final int type = node.getType();
+			node = node.getNextSibling();
+			final String termQuoted = Util.quoteForHTML(node.getText());
+			final String fieldSpecQuoted = regExpFieldSpec ? Globals.lang(
+					"any field that matches the regular expression <b>%0</b>",
+                    Util.quoteForHTML(field)) : Globals.lang("the field <b>%0</b>", 
+                            Util.quoteForHTML(field));
+			switch (type) {
+			case SearchExpressionTreeParserTokenTypes.LITERAL_contains:
+			case SearchExpressionTreeParserTokenTypes.EQUAL:
+				if (regExp)
+					return not ? Globals.lang(
+					        "%0 doesn't contain the Regular Expression <b>%1</b>",
+                            fieldSpecQuoted, termQuoted)
+							: Globals.lang(
+							        "%0 contains the Regular Expression <b>%1</b>",
+                                    fieldSpecQuoted, termQuoted);
+				return not ? Globals.lang(
+						"%0 doesn't contain the term <b>%1</b>", fieldSpecQuoted,
+                        termQuoted) : Globals.lang("%0 contains the term <b>%1</b>",
+                                fieldSpecQuoted, termQuoted);
+			case SearchExpressionTreeParserTokenTypes.LITERAL_matches:
+			case SearchExpressionTreeParserTokenTypes.EEQUAL:
+				if (regExp)
+					return not ? Globals.lang(
+					        "%0 doesn't match the Regular Expression <b>%1</b>",
+                            fieldSpecQuoted, termQuoted)
+							: Globals.lang(
+                                    "%0 matches the Regular Expression <b>%1</b>",
+                                    fieldSpecQuoted, termQuoted);
+				return not ? Globals.lang(
+						"%0 doesn't match the term <b>%1</b>", 
+                        fieldSpecQuoted, termQuoted)
+						: Globals.lang("%0 matches the term <b>%1</b>",
+                                fieldSpecQuoted, 
+                                termQuoted);
+			case SearchExpressionTreeParserTokenTypes.NEQUAL:
+				if (regExp)
+					return not ? Globals.lang(
+							"%0 contains the Regular Expression <b>%1</b>",
+                            fieldSpecQuoted, termQuoted)
+							: Globals.lang(
+                                    "%0 doesn't contain the Regular Expression <b>%1</b>",
+                                    fieldSpecQuoted, termQuoted);
+				return not ? Globals.lang("%0 contains the term <b>%1</b>",
+                        fieldSpecQuoted, termQuoted) : Globals.lang(
+						"%0 doesn't contain the term <b>%1</b>", fieldSpecQuoted,
+                        termQuoted);
+			default:
+				return "Internal error: Unknown AST node type. "
+						+ "Please report this on www.sf.net/projects/jabref";
+				// this should never happen
+			}
+		}
+	}
+
+	public String getShortDescription() {
+		StringBuffer sb = new StringBuffer();
+		sb.append("<b>");
+		if (Globals.prefs.getBoolean("groupShowDynamic"))
+            sb.append("<i>").append(Util.quoteForHTML(getName())).append("</i>");
+		else
+			sb.append(Util.quoteForHTML(getName()));
+			sb.append("</b> - ");
+			sb.append(Globals.lang("dynamic group"));
+			sb.append(" (");
+			sb.append(Globals.lang("search expression"));
+			sb.append(" <b>").
+            append(Util.quoteForHTML(m_searchExpression)).append("</b>)");
+		switch (getHierarchicalContext()) {
+		case AbstractGroup.INCLUDING:
+            sb.append(", ").append(Globals.lang("includes subgroups"));
+			break;
+		case AbstractGroup.REFINING:
+        	sb.append(", ").append(Globals.lang("refines supergroup"));
+			break;
+		default:
+			break;
+		}
+		return sb.toString();
+	}
+
+    public boolean validateSearchStrings(Map<String, String> searchStrings) {
+        return true;
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/TransferableEntrySelection.java b/src/java/net/sf/jabref/groups/TransferableEntrySelection.java
index 534152f..f5f4135 100644
--- a/src/java/net/sf/jabref/groups/TransferableEntrySelection.java
+++ b/src/java/net/sf/jabref/groups/TransferableEntrySelection.java
@@ -1,92 +1,92 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-
-import net.sf.jabref.BibtexEntry;
-
-public class TransferableEntrySelection implements Transferable {
-    public static final DataFlavor flavorInternal;
-    public static final DataFlavor flavorExternal;
-    public static final DataFlavor[] flavors;
-    public final BibtexEntry[] selectedEntries;
-    public final String selectedEntriesCiteKeys;
-    
-    protected boolean includeCiteKeyword = false;
-
-    static {
-        DataFlavor df1 = null;
-        DataFlavor df2 = null;
-        try {
-            df1 = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType
-                    + ";class=net.sf.jabref.groups.TransferableEntrySelection");
-            df2 = DataFlavor.getTextPlainUnicodeFlavor();
-        } catch (ClassNotFoundException e) {
-            // never happens
-        }
-        flavorInternal = df1;
-        flavorExternal = df2;
-        flavors = new DataFlavor[] { flavorInternal, flavorExternal };
-    }
-
-    public TransferableEntrySelection(BibtexEntry[] selectedEntries) {
-        this.selectedEntries = selectedEntries;
-        StringBuffer keys = new StringBuffer();
-        for (int i = 0; i < selectedEntries.length; ++i) {
-            keys.append(selectedEntries[i].getCiteKey());
-            if (i + 1 < selectedEntries.length)
-                keys.append(",");
-        }
-        selectedEntriesCiteKeys = keys.toString();
-    }
-
-    public DataFlavor[] getTransferDataFlavors() {
-        return flavors;
-    }
-
-    public boolean isDataFlavorSupported(DataFlavor someFlavor) {
-        return someFlavor.equals(flavorInternal)
-                || someFlavor.equals(flavorExternal);
-    }
-
-    public Object getTransferData(DataFlavor someFlavor)
-            throws UnsupportedFlavorException, IOException {
-        if (!isDataFlavorSupported(someFlavor))
-            throw new UnsupportedFlavorException(someFlavor);
-        if (someFlavor.equals(flavorInternal))
-            return this;
-        String s = includeCiteKeyword ?
-                "\\cite{" + selectedEntriesCiteKeys + "}" 
-                : selectedEntriesCiteKeys;
-        return new ByteArrayInputStream(s.getBytes(
-                flavorExternal.getParameter("charset").trim()));
-    }
-
-    public BibtexEntry[] getSelection() {
-        return selectedEntries;
-    }
-
-    public void setIncludeCiteKeyword(boolean includeCiteKeyword) {
-        this.includeCiteKeyword = includeCiteKeyword;
-    }
-    
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+import net.sf.jabref.BibtexEntry;
+
+public class TransferableEntrySelection implements Transferable {
+    public static final DataFlavor flavorInternal;
+    public static final DataFlavor flavorExternal;
+    public static final DataFlavor[] flavors;
+    public final BibtexEntry[] selectedEntries;
+    public final String selectedEntriesCiteKeys;
+    
+    protected boolean includeCiteKeyword = false;
+
+    static {
+        DataFlavor df1 = null;
+        DataFlavor df2 = null;
+        try {
+            df1 = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType
+                    + ";class=net.sf.jabref.groups.TransferableEntrySelection");
+            df2 = DataFlavor.getTextPlainUnicodeFlavor();
+        } catch (ClassNotFoundException e) {
+            // never happens
+        }
+        flavorInternal = df1;
+        flavorExternal = df2;
+        flavors = new DataFlavor[] { flavorInternal, flavorExternal };
+    }
+
+    public TransferableEntrySelection(BibtexEntry[] selectedEntries) {
+        this.selectedEntries = selectedEntries;
+        StringBuffer keys = new StringBuffer();
+        for (int i = 0; i < selectedEntries.length; ++i) {
+            keys.append(selectedEntries[i].getCiteKey());
+            if (i + 1 < selectedEntries.length)
+                keys.append(",");
+        }
+        selectedEntriesCiteKeys = keys.toString();
+    }
+
+    public DataFlavor[] getTransferDataFlavors() {
+        return flavors;
+    }
+
+    public boolean isDataFlavorSupported(DataFlavor someFlavor) {
+        return someFlavor.equals(flavorInternal)
+                || someFlavor.equals(flavorExternal);
+    }
+
+    public Object getTransferData(DataFlavor someFlavor)
+            throws UnsupportedFlavorException, IOException {
+        if (!isDataFlavorSupported(someFlavor))
+            throw new UnsupportedFlavorException(someFlavor);
+        if (someFlavor.equals(flavorInternal))
+            return this;
+        String s = includeCiteKeyword ?
+                "\\cite{" + selectedEntriesCiteKeys + "}" 
+                : selectedEntriesCiteKeys;
+        return new ByteArrayInputStream(s.getBytes(
+                flavorExternal.getParameter("charset").trim()));
+    }
+
+    public BibtexEntry[] getSelection() {
+        return selectedEntries;
+    }
+
+    public void setIncludeCiteKeyword(boolean includeCiteKeyword) {
+        this.includeCiteKeyword = includeCiteKeyword;
+    }
+    
+
+}
diff --git a/src/java/net/sf/jabref/groups/UndoableAddOrRemoveGroup.java b/src/java/net/sf/jabref/groups/UndoableAddOrRemoveGroup.java
index 85fa47c..d87c457 100644
--- a/src/java/net/sf/jabref/groups/UndoableAddOrRemoveGroup.java
+++ b/src/java/net/sf/jabref/groups/UndoableAddOrRemoveGroup.java
@@ -1,166 +1,166 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.Globals;
-
-class UndoableAddOrRemoveGroup extends AbstractUndoableEdit {
-    /** The root of the global groups tree */
-    private final GroupTreeNode m_groupsRootHandle;
-    /** The subtree that was added or removed */
-    private final GroupTreeNode m_subtreeBackup;
-    /**
-     * In case of removing a node but keeping all of its children, the number of
-     * children has to be stored.
-     */
-    private final int m_subtreeRootChildCount;
-    /** The path to the edited subtree's root node */
-    private final int[] m_pathToNode;
-    /**
-     * The type of the editing (ADD_NODE, REMOVE_NODE_KEEP_CHILDREN,
-     * REMOVE_NODE_AND_CHILDREN)
-     */
-    private final int m_editType;
-    private final GroupSelector m_groupSelector;
-    private boolean m_revalidate = true;
-    /** Adding of a single node (group). */
-    public static final int ADD_NODE = 0;
-    /** Removal of a single node. Children, if any, are kept. */
-    public static final int REMOVE_NODE_KEEP_CHILDREN = 1;
-    /** Removal of a node and all of its children. */
-    public static final int REMOVE_NODE_AND_CHILDREN = 2;
-
-    /**
-     * Creates an object that can undo/redo an edit event.
-     * 
-     * @param groupsRoot
-     *            The global groups root.
-     * @param editType
-     *            The type of editing (ADD_NODE, REMOVE_NODE_KEEP_CHILDREN,
-     *            REMOVE_NODE_AND_CHILDREN)
-     * @param editedNode
-     *            The edited node (which was added or will be removed). The node
-     *            must be a descendant of node <b>groupsRoot</b>! This means
-     *            that, in case of adding, you first have to add it to the tree,
-     *            then call this constructor. When removing, you first have to
-     *            call this constructor, then remove the node.
-     */
-    public UndoableAddOrRemoveGroup(GroupSelector gs, GroupTreeNode groupsRoot,
-            GroupTreeNode editedNode, int editType) {
-        m_groupSelector = gs;
-        m_groupsRootHandle = groupsRoot;
-        m_editType = editType;
-        m_subtreeRootChildCount = editedNode.getChildCount();
-        // storing a backup of the whole subtree is not required when children
-        // are kept
-        m_subtreeBackup = editType != REMOVE_NODE_KEEP_CHILDREN ? editedNode
-                .deepCopy() : new GroupTreeNode(editedNode.getGroup().deepCopy());
-        // remember path to edited node. this cannot be stored as a reference,
-        // because the reference itself might change. the method below is more
-        // robust.
-        m_pathToNode = editedNode.getIndexedPath();
-    }
-
-    public String getUndoPresentationName() {
-        return Globals.lang("Undo") + ": " + getName();
-    }
-
-    public String getName() {
-        switch (m_editType) {
-        case ADD_NODE:
-            return Globals.lang("add group");
-        case REMOVE_NODE_KEEP_CHILDREN:
-            return Globals.lang("remove group (keep subgroups)");
-        case REMOVE_NODE_AND_CHILDREN:
-            return Globals.lang("remove group and subgroups");
-        }
-        return "? (" + Globals.lang("unknown edit") + ")";
-    }
-
-    public String getRedoPresentationName() {
-        return Globals.lang("Redo") + ": " + getName();
-    }
-
-    public void undo() {
-        super.undo();
-        doOperation(true);
-    }
-
-    public void redo() {
-        super.redo();
-        doOperation(false);
-    }
-
-    private void doOperation(boolean undo) {
-        GroupTreeNode cursor = m_groupsRootHandle;
-        final int childIndex = m_pathToNode[m_pathToNode.length - 1];
-        // traverse path up to butlast element
-        for (int i = 0; i < m_pathToNode.length - 1; ++i)
-            cursor = (GroupTreeNode) cursor.getChildAt(m_pathToNode[i]);
-        if (undo) {
-            switch (m_editType) {
-            case ADD_NODE:
-                cursor.remove(childIndex);
-                break;
-            case REMOVE_NODE_KEEP_CHILDREN:
-                // move all children to newNode, then add newNode
-                GroupTreeNode newNode = m_subtreeBackup.deepCopy();
-                for (int i = childIndex; i < childIndex
-                        + m_subtreeRootChildCount; ++i) {
-                    newNode.add((GroupTreeNode) cursor.getChildAt(childIndex));
-                }
-                cursor.insert(newNode, childIndex);
-                break;
-            case REMOVE_NODE_AND_CHILDREN:
-                cursor.insert(m_subtreeBackup.deepCopy(), childIndex);
-                break;
-            }
-        } else { // redo
-            switch (m_editType) {
-            case ADD_NODE:
-                cursor.insert(m_subtreeBackup.deepCopy(), childIndex);
-                break;
-            case REMOVE_NODE_KEEP_CHILDREN:
-                // remove node, then insert all children
-                GroupTreeNode removedNode = (GroupTreeNode) cursor
-                        .getChildAt(childIndex);
-                cursor.remove(childIndex);
-                while (removedNode.getChildCount() > 0)
-                    cursor.insert((GroupTreeNode) removedNode.getFirstChild(),
-                            childIndex);
-                break;
-            case REMOVE_NODE_AND_CHILDREN:
-                cursor.remove(childIndex);
-                break;
-            }
-        }
-        if (m_revalidate)
-            m_groupSelector.revalidateGroups();
-    }
-
-    /**
-     * Call this method to decide if the group list should be immediately
-     * revalidated by this operation. Default is true.
-     * 
-     * @param val
-     *            a <code>boolean</code> value
-     */
-    public void setRevalidate(boolean val) {
-        m_revalidate = val;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.Globals;
+
+class UndoableAddOrRemoveGroup extends AbstractUndoableEdit {
+    /** The root of the global groups tree */
+    private final GroupTreeNode m_groupsRootHandle;
+    /** The subtree that was added or removed */
+    private final GroupTreeNode m_subtreeBackup;
+    /**
+     * In case of removing a node but keeping all of its children, the number of
+     * children has to be stored.
+     */
+    private final int m_subtreeRootChildCount;
+    /** The path to the edited subtree's root node */
+    private final int[] m_pathToNode;
+    /**
+     * The type of the editing (ADD_NODE, REMOVE_NODE_KEEP_CHILDREN,
+     * REMOVE_NODE_AND_CHILDREN)
+     */
+    private final int m_editType;
+    private final GroupSelector m_groupSelector;
+    private boolean m_revalidate = true;
+    /** Adding of a single node (group). */
+    public static final int ADD_NODE = 0;
+    /** Removal of a single node. Children, if any, are kept. */
+    public static final int REMOVE_NODE_KEEP_CHILDREN = 1;
+    /** Removal of a node and all of its children. */
+    public static final int REMOVE_NODE_AND_CHILDREN = 2;
+
+    /**
+     * Creates an object that can undo/redo an edit event.
+     * 
+     * @param groupsRoot
+     *            The global groups root.
+     * @param editType
+     *            The type of editing (ADD_NODE, REMOVE_NODE_KEEP_CHILDREN,
+     *            REMOVE_NODE_AND_CHILDREN)
+     * @param editedNode
+     *            The edited node (which was added or will be removed). The node
+     *            must be a descendant of node <b>groupsRoot</b>! This means
+     *            that, in case of adding, you first have to add it to the tree,
+     *            then call this constructor. When removing, you first have to
+     *            call this constructor, then remove the node.
+     */
+    public UndoableAddOrRemoveGroup(GroupSelector gs, GroupTreeNode groupsRoot,
+            GroupTreeNode editedNode, int editType) {
+        m_groupSelector = gs;
+        m_groupsRootHandle = groupsRoot;
+        m_editType = editType;
+        m_subtreeRootChildCount = editedNode.getChildCount();
+        // storing a backup of the whole subtree is not required when children
+        // are kept
+        m_subtreeBackup = editType != REMOVE_NODE_KEEP_CHILDREN ? editedNode
+                .deepCopy() : new GroupTreeNode(editedNode.getGroup().deepCopy());
+        // remember path to edited node. this cannot be stored as a reference,
+        // because the reference itself might change. the method below is more
+        // robust.
+        m_pathToNode = editedNode.getIndexedPath();
+    }
+
+    public String getUndoPresentationName() {
+        return Globals.lang("Undo") + ": " + getName();
+    }
+
+    public String getName() {
+        switch (m_editType) {
+        case ADD_NODE:
+            return Globals.lang("add group");
+        case REMOVE_NODE_KEEP_CHILDREN:
+            return Globals.lang("remove group (keep subgroups)");
+        case REMOVE_NODE_AND_CHILDREN:
+            return Globals.lang("remove group and subgroups");
+        }
+        return "? (" + Globals.lang("unknown edit") + ")";
+    }
+
+    public String getRedoPresentationName() {
+        return Globals.lang("Redo") + ": " + getName();
+    }
+
+    public void undo() {
+        super.undo();
+        doOperation(true);
+    }
+
+    public void redo() {
+        super.redo();
+        doOperation(false);
+    }
+
+    private void doOperation(boolean undo) {
+        GroupTreeNode cursor = m_groupsRootHandle;
+        final int childIndex = m_pathToNode[m_pathToNode.length - 1];
+        // traverse path up to butlast element
+        for (int i = 0; i < m_pathToNode.length - 1; ++i)
+            cursor = (GroupTreeNode) cursor.getChildAt(m_pathToNode[i]);
+        if (undo) {
+            switch (m_editType) {
+            case ADD_NODE:
+                cursor.remove(childIndex);
+                break;
+            case REMOVE_NODE_KEEP_CHILDREN:
+                // move all children to newNode, then add newNode
+                GroupTreeNode newNode = m_subtreeBackup.deepCopy();
+                for (int i = childIndex; i < childIndex
+                        + m_subtreeRootChildCount; ++i) {
+                    newNode.add((GroupTreeNode) cursor.getChildAt(childIndex));
+                }
+                cursor.insert(newNode, childIndex);
+                break;
+            case REMOVE_NODE_AND_CHILDREN:
+                cursor.insert(m_subtreeBackup.deepCopy(), childIndex);
+                break;
+            }
+        } else { // redo
+            switch (m_editType) {
+            case ADD_NODE:
+                cursor.insert(m_subtreeBackup.deepCopy(), childIndex);
+                break;
+            case REMOVE_NODE_KEEP_CHILDREN:
+                // remove node, then insert all children
+                GroupTreeNode removedNode = (GroupTreeNode) cursor
+                        .getChildAt(childIndex);
+                cursor.remove(childIndex);
+                while (removedNode.getChildCount() > 0)
+                    cursor.insert((GroupTreeNode) removedNode.getFirstChild(),
+                            childIndex);
+                break;
+            case REMOVE_NODE_AND_CHILDREN:
+                cursor.remove(childIndex);
+                break;
+            }
+        }
+        if (m_revalidate)
+            m_groupSelector.revalidateGroups();
+    }
+
+    /**
+     * Call this method to decide if the group list should be immediately
+     * revalidated by this operation. Default is true.
+     * 
+     * @param val
+     *            a <code>boolean</code> value
+     */
+    public void setRevalidate(boolean val) {
+        m_revalidate = val;
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/UndoableChangeAssignment.java b/src/java/net/sf/jabref/groups/UndoableChangeAssignment.java
index 98986e2..903b9ac 100644
--- a/src/java/net/sf/jabref/groups/UndoableChangeAssignment.java
+++ b/src/java/net/sf/jabref/groups/UndoableChangeAssignment.java
@@ -1,99 +1,99 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-
-/**
- * @author jzieren
- * 
- */
-public class UndoableChangeAssignment extends AbstractUndoableEdit {
-    private final Set<BibtexEntry> m_previousAssignmentBackup;
-    private final Set<BibtexEntry> m_newAssignmentBackup;
-    /** The path to the edited node */
-    private int[] m_pathToNode = null;
-    /** The root of the global groups tree */
-    private GroupTreeNode m_groupsRootHandle = null;
-
-    /**
-     * Constructor for use in a group itself, where the enclosing node is
-     * unknown. The node must be set using setEditedNode() before this instance
-     * may be used.
-     * 
-     * @param previousAssignment
-     * @param currentAssignment
-     */
-    public UndoableChangeAssignment(Set<BibtexEntry> previousAssignment,
-            Set<BibtexEntry> currentAssignment) {
-        m_previousAssignmentBackup = new HashSet<BibtexEntry>(previousAssignment);
-        m_newAssignmentBackup = new HashSet<BibtexEntry>(currentAssignment);
-    }
-
-    public UndoableChangeAssignment(Set<BibtexEntry> previousAssignment,
-            Set<BibtexEntry> currentAssignment, GroupTreeNode node) {
-        this(previousAssignment, currentAssignment);
-        setEditedNode(node);
-    }
-
-    /**
-     * Sets the node of the group that was edited. If this node was not
-     * specified at construction time, this method has to be called before this
-     * instance may be used.
-     * 
-     * @param node
-     *            The node whose assignments were edited.
-     */
-    public void setEditedNode(GroupTreeNode node) {
-        m_groupsRootHandle = (GroupTreeNode) node.getRoot();
-        m_pathToNode = node.getIndexedPath();
-    }
-
-    public String getUndoPresentationName() {
-        return Globals.lang("Undo") + ": "
-                + Globals.lang("change assignment of entries");
-    }
-
-    public String getRedoPresentationName() {
-        return Globals.lang("Redo") + ": "
-                + Globals.lang("change assignment of entries");
-    }
-
-    public void undo() {
-        super.undo();
-        ExplicitGroup group = (ExplicitGroup) m_groupsRootHandle.getChildAt(
-                m_pathToNode).getGroup();
-        group.clearAssignments();
-        for (Iterator<BibtexEntry> it = m_previousAssignmentBackup.iterator(); it.hasNext();)
-            group.addEntry(it.next());
-    }
-
-    public void redo() {
-        super.redo();
-        ExplicitGroup group = (ExplicitGroup) m_groupsRootHandle.getChildAt(
-                m_pathToNode).getGroup();
-        group.clearAssignments();
-        for (Iterator<BibtexEntry> it = m_newAssignmentBackup.iterator(); it.hasNext();)
-            group.addEntry(it.next());
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+
+/**
+ * @author jzieren
+ * 
+ */
+public class UndoableChangeAssignment extends AbstractUndoableEdit {
+    private final Set<BibtexEntry> m_previousAssignmentBackup;
+    private final Set<BibtexEntry> m_newAssignmentBackup;
+    /** The path to the edited node */
+    private int[] m_pathToNode = null;
+    /** The root of the global groups tree */
+    private GroupTreeNode m_groupsRootHandle = null;
+
+    /**
+     * Constructor for use in a group itself, where the enclosing node is
+     * unknown. The node must be set using setEditedNode() before this instance
+     * may be used.
+     * 
+     * @param previousAssignment
+     * @param currentAssignment
+     */
+    public UndoableChangeAssignment(Set<BibtexEntry> previousAssignment,
+            Set<BibtexEntry> currentAssignment) {
+        m_previousAssignmentBackup = new HashSet<BibtexEntry>(previousAssignment);
+        m_newAssignmentBackup = new HashSet<BibtexEntry>(currentAssignment);
+    }
+
+    public UndoableChangeAssignment(Set<BibtexEntry> previousAssignment,
+            Set<BibtexEntry> currentAssignment, GroupTreeNode node) {
+        this(previousAssignment, currentAssignment);
+        setEditedNode(node);
+    }
+
+    /**
+     * Sets the node of the group that was edited. If this node was not
+     * specified at construction time, this method has to be called before this
+     * instance may be used.
+     * 
+     * @param node
+     *            The node whose assignments were edited.
+     */
+    public void setEditedNode(GroupTreeNode node) {
+        m_groupsRootHandle = (GroupTreeNode) node.getRoot();
+        m_pathToNode = node.getIndexedPath();
+    }
+
+    public String getUndoPresentationName() {
+        return Globals.lang("Undo") + ": "
+                + Globals.lang("change assignment of entries");
+    }
+
+    public String getRedoPresentationName() {
+        return Globals.lang("Redo") + ": "
+                + Globals.lang("change assignment of entries");
+    }
+
+    public void undo() {
+        super.undo();
+        ExplicitGroup group = (ExplicitGroup) m_groupsRootHandle.getChildAt(
+                m_pathToNode).getGroup();
+        group.clearAssignments();
+        for (Iterator<BibtexEntry> it = m_previousAssignmentBackup.iterator(); it.hasNext();)
+            group.addEntry(it.next());
+    }
+
+    public void redo() {
+        super.redo();
+        ExplicitGroup group = (ExplicitGroup) m_groupsRootHandle.getChildAt(
+                m_pathToNode).getGroup();
+        group.clearAssignments();
+        for (Iterator<BibtexEntry> it = m_newAssignmentBackup.iterator(); it.hasNext();)
+            group.addEntry(it.next());
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/UndoableModifyGroup.java b/src/java/net/sf/jabref/groups/UndoableModifyGroup.java
index ed2e412..0ce38d6 100644
--- a/src/java/net/sf/jabref/groups/UndoableModifyGroup.java
+++ b/src/java/net/sf/jabref/groups/UndoableModifyGroup.java
@@ -1,68 +1,68 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.Globals;
-
-public class UndoableModifyGroup extends AbstractUndoableEdit {
-    private final GroupSelector m_groupSelector;
-    private final AbstractGroup m_oldGroupBackup;
-    private final AbstractGroup m_newGroupBackup;
-    private final GroupTreeNode m_groupsRootHandle;
-    private final int[] m_pathToNode;
-
-    /**
-     * @param node
-     *            The node which still contains the old group.
-     * @param newGroup
-     *            The new group to replace the one currently stored in <b>node
-     *            </b>.
-     */
-    public UndoableModifyGroup(GroupSelector gs, GroupTreeNode groupsRoot,
-            GroupTreeNode node, AbstractGroup newGroup) {
-        m_groupSelector = gs;
-        m_oldGroupBackup = node.getGroup().deepCopy();
-        m_newGroupBackup = newGroup.deepCopy();
-        m_pathToNode = node.getIndexedPath();
-        m_groupsRootHandle = groupsRoot;
-    }
-
-    public String getUndoPresentationName() {
-        return Globals.lang("Undo") + ": " 
-            + Globals.lang("modify group");
-    }
-
-    public String getRedoPresentationName() {
-        return Globals.lang("Redo") + ": " 
-            + Globals.lang("modify group");
-    }
-
-    public void undo() {
-        super.undo();
-        m_groupsRootHandle.getDescendant(m_pathToNode).setGroup(
-                m_oldGroupBackup.deepCopy());
-        m_groupSelector.revalidateGroups();
-    }
-
-    public void redo() {
-        super.redo();
-        m_groupsRootHandle.getDescendant(m_pathToNode).setGroup(
-                m_newGroupBackup.deepCopy());
-        m_groupSelector.revalidateGroups();
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.Globals;
+
+public class UndoableModifyGroup extends AbstractUndoableEdit {
+    private final GroupSelector m_groupSelector;
+    private final AbstractGroup m_oldGroupBackup;
+    private final AbstractGroup m_newGroupBackup;
+    private final GroupTreeNode m_groupsRootHandle;
+    private final int[] m_pathToNode;
+
+    /**
+     * @param node
+     *            The node which still contains the old group.
+     * @param newGroup
+     *            The new group to replace the one currently stored in <b>node
+     *            </b>.
+     */
+    public UndoableModifyGroup(GroupSelector gs, GroupTreeNode groupsRoot,
+            GroupTreeNode node, AbstractGroup newGroup) {
+        m_groupSelector = gs;
+        m_oldGroupBackup = node.getGroup().deepCopy();
+        m_newGroupBackup = newGroup.deepCopy();
+        m_pathToNode = node.getIndexedPath();
+        m_groupsRootHandle = groupsRoot;
+    }
+
+    public String getUndoPresentationName() {
+        return Globals.lang("Undo") + ": " 
+            + Globals.lang("modify group");
+    }
+
+    public String getRedoPresentationName() {
+        return Globals.lang("Redo") + ": " 
+            + Globals.lang("modify group");
+    }
+
+    public void undo() {
+        super.undo();
+        m_groupsRootHandle.getDescendant(m_pathToNode).setGroup(
+                m_oldGroupBackup.deepCopy());
+        m_groupSelector.revalidateGroups();
+    }
+
+    public void redo() {
+        super.redo();
+        m_groupsRootHandle.getDescendant(m_pathToNode).setGroup(
+                m_newGroupBackup.deepCopy());
+        m_groupSelector.revalidateGroups();
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/UndoableModifySubtree.java b/src/java/net/sf/jabref/groups/UndoableModifySubtree.java
index 54b6413..d18a26b 100644
--- a/src/java/net/sf/jabref/groups/UndoableModifySubtree.java
+++ b/src/java/net/sf/jabref/groups/UndoableModifySubtree.java
@@ -1,96 +1,96 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.util.Vector;
-
-import javax.swing.tree.TreeNode;
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.Globals;
-
-public class UndoableModifySubtree extends AbstractUndoableEdit {
-    /** A backup of the groups before the modification */
-    private final GroupTreeNode m_groupRoot, m_subtreeBackup;
-    /** The path to the global groups root node */
-    private final int[] m_subtreeRootPath;
-    private final GroupSelector m_groupSelector;
-    /** This holds the new subtree (the root's modified children) to allow redo. */
-    private Vector<TreeNode> m_modifiedSubtree = new Vector<TreeNode>();
-    private boolean m_revalidate = true;
-    private final String m_name;
-
-    /**
-     * 
-     * @param subtree
-     *            The root node of the subtree that was modified (this node may
-     *            not be modified, it is just used as a convenience handle).
-     */
-    public UndoableModifySubtree(GroupSelector groupSelector, GroupTreeNode groupRoot,
-            GroupTreeNode subtree, String name) {
-        m_subtreeBackup = subtree.deepCopy();
-        m_groupRoot = groupRoot;
-        m_subtreeRootPath = subtree.getIndexedPath();
-        m_groupSelector = groupSelector;
-        m_name = name;
-    }
-
-    public String getUndoPresentationName() {
-        return Globals.lang("Undo") + ": " + m_name;
-        // JZTODO lyrics
-    }
-
-    public String getRedoPresentationName() {
-        return Globals.lang("Redo") + ": " + m_name;
-    }
-
-    public void undo() {
-        super.undo();
-        // remember modified children for redo
-        m_modifiedSubtree.clear();
-        // get node to edit
-        final GroupTreeNode subtreeRoot = m_groupRoot
-                .getNode(m_subtreeRootPath);
-        for (int i = 0; i < subtreeRoot.getChildCount(); ++i)
-            m_modifiedSubtree.add(subtreeRoot.getChildAt(i));
-        // keep subtree handle, but restore everything else from backup
-        subtreeRoot.removeAllChildren();
-        for (int i = 0; i < m_subtreeBackup.getChildCount(); ++i)
-            subtreeRoot.add(((GroupTreeNode) m_subtreeBackup.getChildAt(i))
-                    .deepCopy());
-        if (m_revalidate)
-            m_groupSelector.revalidateGroups();
-    }
-
-    public void redo() {
-        super.redo();
-        final GroupTreeNode subtreeRoot = m_groupRoot
-                .getNode(m_subtreeRootPath);
-        subtreeRoot.removeAllChildren();
-        for (int i = 0; i < m_modifiedSubtree.size(); ++i)
-            subtreeRoot.add((GroupTreeNode) m_modifiedSubtree.elementAt(i));
-        if (m_revalidate)
-            m_groupSelector.revalidateGroups();
-    }
-
-    /**
-     * Call this method to decide if the group list should be immediately
-     * revalidated by this operation. Default is true.
-     */
-    public void setRevalidate(boolean revalidate) {
-        m_revalidate = revalidate;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.util.Vector;
+
+import javax.swing.tree.TreeNode;
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.Globals;
+
+public class UndoableModifySubtree extends AbstractUndoableEdit {
+    /** A backup of the groups before the modification */
+    private final GroupTreeNode m_groupRoot, m_subtreeBackup;
+    /** The path to the global groups root node */
+    private final int[] m_subtreeRootPath;
+    private final GroupSelector m_groupSelector;
+    /** This holds the new subtree (the root's modified children) to allow redo. */
+    private Vector<TreeNode> m_modifiedSubtree = new Vector<TreeNode>();
+    private boolean m_revalidate = true;
+    private final String m_name;
+
+    /**
+     * 
+     * @param subtree
+     *            The root node of the subtree that was modified (this node may
+     *            not be modified, it is just used as a convenience handle).
+     */
+    public UndoableModifySubtree(GroupSelector groupSelector, GroupTreeNode groupRoot,
+            GroupTreeNode subtree, String name) {
+        m_subtreeBackup = subtree.deepCopy();
+        m_groupRoot = groupRoot;
+        m_subtreeRootPath = subtree.getIndexedPath();
+        m_groupSelector = groupSelector;
+        m_name = name;
+    }
+
+    public String getUndoPresentationName() {
+        return Globals.lang("Undo") + ": " + m_name;
+        // JZTODO lyrics
+    }
+
+    public String getRedoPresentationName() {
+        return Globals.lang("Redo") + ": " + m_name;
+    }
+
+    public void undo() {
+        super.undo();
+        // remember modified children for redo
+        m_modifiedSubtree.clear();
+        // get node to edit
+        final GroupTreeNode subtreeRoot = m_groupRoot
+                .getNode(m_subtreeRootPath);
+        for (int i = 0; i < subtreeRoot.getChildCount(); ++i)
+            m_modifiedSubtree.add(subtreeRoot.getChildAt(i));
+        // keep subtree handle, but restore everything else from backup
+        subtreeRoot.removeAllChildren();
+        for (int i = 0; i < m_subtreeBackup.getChildCount(); ++i)
+            subtreeRoot.add(((GroupTreeNode) m_subtreeBackup.getChildAt(i))
+                    .deepCopy());
+        if (m_revalidate)
+            m_groupSelector.revalidateGroups();
+    }
+
+    public void redo() {
+        super.redo();
+        final GroupTreeNode subtreeRoot = m_groupRoot
+                .getNode(m_subtreeRootPath);
+        subtreeRoot.removeAllChildren();
+        for (int i = 0; i < m_modifiedSubtree.size(); ++i)
+            subtreeRoot.add((GroupTreeNode) m_modifiedSubtree.elementAt(i));
+        if (m_revalidate)
+            m_groupSelector.revalidateGroups();
+    }
+
+    /**
+     * Call this method to decide if the group list should be immediately
+     * revalidated by this operation. Default is true.
+     */
+    public void setRevalidate(boolean revalidate) {
+        m_revalidate = revalidate;
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/UndoableMoveGroup.java b/src/java/net/sf/jabref/groups/UndoableMoveGroup.java
index 90d34ea..19984d2 100644
--- a/src/java/net/sf/jabref/groups/UndoableMoveGroup.java
+++ b/src/java/net/sf/jabref/groups/UndoableMoveGroup.java
@@ -1,86 +1,86 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.Globals;
-
-/**
- * @author jzieren
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-public class UndoableMoveGroup extends AbstractUndoableEdit {
-    private final GroupSelector m_groupSelector;
-    private final GroupTreeNode m_groupsRootHandle;
-    private final int[] m_pathToNewParent;
-    private final int m_newChildIndex;
-    private final int[] m_pathToOldParent;
-    private final int m_oldChildIndex;
-
-    /**
-     * @param moveNode
-     *            The node which is being moved. At the time of construction of
-     *            this object, it must not have moved yet.
-     * @param newParent
-     *            The new parent node to which <b>moveNode </b> will be moved.
-     * @param newChildIndex
-     *            The child index at <b>newParent </b> to which <b>moveNode </b>
-     *            will be moved.
-     */
-    public UndoableMoveGroup(GroupSelector gs, GroupTreeNode groupsRoot,
-            GroupTreeNode moveNode, GroupTreeNode newParent, int newChildIndex) {
-        m_groupSelector = gs;
-        m_groupsRootHandle = groupsRoot;
-        m_pathToNewParent = newParent.getIndexedPath();
-        m_newChildIndex = newChildIndex;
-        m_pathToOldParent = ((GroupTreeNode) moveNode.getParent())
-                .getIndexedPath();
-        m_oldChildIndex = moveNode.getParent().getIndex(moveNode);
-    }
-
-    public String getUndoPresentationName() {
-        return Globals.lang("Undo") + ": " 
-            + Globals.lang("move group");
-    }
-
-    public String getRedoPresentationName() {
-        return Globals.lang("Redo") + ": " 
-            + Globals.lang("move group");
-    }
-
-    public void undo() {
-        super.undo();
-        GroupTreeNode cursor = m_groupsRootHandle
-                .getDescendant(m_pathToNewParent);
-        cursor = (GroupTreeNode) cursor.getChildAt(m_newChildIndex);
-        m_groupsRootHandle.getDescendant(m_pathToOldParent).insert(cursor,
-                m_oldChildIndex);
-        m_groupSelector.revalidateGroups();
-    }
-
-    public void redo() {
-        super.redo();
-        GroupTreeNode cursor = m_groupsRootHandle
-                .getDescendant(m_pathToOldParent);
-        cursor = (GroupTreeNode) cursor.getChildAt(m_oldChildIndex);
-        m_groupsRootHandle.getDescendant(m_pathToNewParent).insert(cursor,
-                m_newChildIndex);
-        m_groupSelector.revalidateGroups();
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.Globals;
+
+/**
+ * @author jzieren
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+public class UndoableMoveGroup extends AbstractUndoableEdit {
+    private final GroupSelector m_groupSelector;
+    private final GroupTreeNode m_groupsRootHandle;
+    private final int[] m_pathToNewParent;
+    private final int m_newChildIndex;
+    private final int[] m_pathToOldParent;
+    private final int m_oldChildIndex;
+
+    /**
+     * @param moveNode
+     *            The node which is being moved. At the time of construction of
+     *            this object, it must not have moved yet.
+     * @param newParent
+     *            The new parent node to which <b>moveNode </b> will be moved.
+     * @param newChildIndex
+     *            The child index at <b>newParent </b> to which <b>moveNode </b>
+     *            will be moved.
+     */
+    public UndoableMoveGroup(GroupSelector gs, GroupTreeNode groupsRoot,
+            GroupTreeNode moveNode, GroupTreeNode newParent, int newChildIndex) {
+        m_groupSelector = gs;
+        m_groupsRootHandle = groupsRoot;
+        m_pathToNewParent = newParent.getIndexedPath();
+        m_newChildIndex = newChildIndex;
+        m_pathToOldParent = ((GroupTreeNode) moveNode.getParent())
+                .getIndexedPath();
+        m_oldChildIndex = moveNode.getParent().getIndex(moveNode);
+    }
+
+    public String getUndoPresentationName() {
+        return Globals.lang("Undo") + ": " 
+            + Globals.lang("move group");
+    }
+
+    public String getRedoPresentationName() {
+        return Globals.lang("Redo") + ": " 
+            + Globals.lang("move group");
+    }
+
+    public void undo() {
+        super.undo();
+        GroupTreeNode cursor = m_groupsRootHandle
+                .getDescendant(m_pathToNewParent);
+        cursor = (GroupTreeNode) cursor.getChildAt(m_newChildIndex);
+        m_groupsRootHandle.getDescendant(m_pathToOldParent).insert(cursor,
+                m_oldChildIndex);
+        m_groupSelector.revalidateGroups();
+    }
+
+    public void redo() {
+        super.redo();
+        GroupTreeNode cursor = m_groupsRootHandle
+                .getDescendant(m_pathToOldParent);
+        cursor = (GroupTreeNode) cursor.getChildAt(m_oldChildIndex);
+        m_groupsRootHandle.getDescendant(m_pathToNewParent).insert(cursor,
+                m_newChildIndex);
+        m_groupSelector.revalidateGroups();
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/UndoableResetGroups.java b/src/java/net/sf/jabref/groups/UndoableResetGroups.java
index e1c3eb6..031841b 100644
--- a/src/java/net/sf/jabref/groups/UndoableResetGroups.java
+++ b/src/java/net/sf/jabref/groups/UndoableResetGroups.java
@@ -1,74 +1,74 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.Globals;
-
-class UndoableResetGroups extends AbstractUndoableEdit {
-    /** A backup of the groups before the modification */
-    private final GroupTreeNode m_groupsBackup;
-    /** A handle to the global groups root node */
-    private final GroupTreeNode m_groupsRootHandle;
-    private final GroupSelector m_groupSelector;
-    private boolean m_revalidate = true;
-
-    public UndoableResetGroups(GroupSelector groupSelector,
-            GroupTreeNode groupsRoot) {
-        this.m_groupsBackup = groupsRoot.deepCopy();
-        this.m_groupsRootHandle = groupsRoot;
-        this.m_groupSelector = groupSelector;
-    }
-
-    public String getUndoPresentationName() {
-        return Globals.lang("Undo") + ": " 
-            + Globals.lang("clear all groups");
-    }
-
-    public String getRedoPresentationName() {
-        return Globals.lang("Redo") + ": " 
-            + Globals.lang("clear all groups");
-    }
-
-    public void undo() {
-        super.undo();
-        // keep root handle, but restore everything else from backup
-        m_groupsRootHandle.removeAllChildren();
-        m_groupsRootHandle.setGroup(m_groupsBackup.getGroup().deepCopy());
-        for (int i = 0; i < m_groupsBackup.getChildCount(); ++i)
-            m_groupsRootHandle.add(((GroupTreeNode) m_groupsBackup
-                    .getChildAt(i)).deepCopy());
-        if (m_revalidate)
-            m_groupSelector.revalidateGroups();
-    }
-
-    public void redo() {
-        super.redo();
-        m_groupsRootHandle.removeAllChildren();
-        m_groupsRootHandle.setGroup(new AllEntriesGroup());
-        if (m_revalidate)
-            m_groupSelector.revalidateGroups();
-    }
-
-    /**
-     * Call this method to decide if the group list should be immediately
-     * revalidated by this operation. Default is true.
-     */
-    public void setRevalidate(boolean revalidate) {
-        m_revalidate = revalidate;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.Globals;
+
+class UndoableResetGroups extends AbstractUndoableEdit {
+    /** A backup of the groups before the modification */
+    private final GroupTreeNode m_groupsBackup;
+    /** A handle to the global groups root node */
+    private final GroupTreeNode m_groupsRootHandle;
+    private final GroupSelector m_groupSelector;
+    private boolean m_revalidate = true;
+
+    public UndoableResetGroups(GroupSelector groupSelector,
+            GroupTreeNode groupsRoot) {
+        this.m_groupsBackup = groupsRoot.deepCopy();
+        this.m_groupsRootHandle = groupsRoot;
+        this.m_groupSelector = groupSelector;
+    }
+
+    public String getUndoPresentationName() {
+        return Globals.lang("Undo") + ": " 
+            + Globals.lang("clear all groups");
+    }
+
+    public String getRedoPresentationName() {
+        return Globals.lang("Redo") + ": " 
+            + Globals.lang("clear all groups");
+    }
+
+    public void undo() {
+        super.undo();
+        // keep root handle, but restore everything else from backup
+        m_groupsRootHandle.removeAllChildren();
+        m_groupsRootHandle.setGroup(m_groupsBackup.getGroup().deepCopy());
+        for (int i = 0; i < m_groupsBackup.getChildCount(); ++i)
+            m_groupsRootHandle.add(((GroupTreeNode) m_groupsBackup
+                    .getChildAt(i)).deepCopy());
+        if (m_revalidate)
+            m_groupSelector.revalidateGroups();
+    }
+
+    public void redo() {
+        super.redo();
+        m_groupsRootHandle.removeAllChildren();
+        m_groupsRootHandle.setGroup(new AllEntriesGroup());
+        if (m_revalidate)
+            m_groupSelector.revalidateGroups();
+    }
+
+    /**
+     * Call this method to decide if the group list should be immediately
+     * revalidated by this operation. Default is true.
+     */
+    public void setRevalidate(boolean revalidate) {
+        m_revalidate = revalidate;
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/UnsupportedVersionException.java b/src/java/net/sf/jabref/groups/UnsupportedVersionException.java
index f144f00..1b1def5 100644
--- a/src/java/net/sf/jabref/groups/UnsupportedVersionException.java
+++ b/src/java/net/sf/jabref/groups/UnsupportedVersionException.java
@@ -1,24 +1,24 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import net.sf.jabref.Globals;
-
-public class UnsupportedVersionException extends Exception {
-    public UnsupportedVersionException(String groupType, int version) {
-        super(Globals.lang("Unsupported version of class %0: %1", groupType, Integer.toString(version)));
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import net.sf.jabref.Globals;
+
+public class UnsupportedVersionException extends Exception {
+    public UnsupportedVersionException(String groupType, int version) {
+        super(Globals.lang("Unsupported version of class %0: %1", groupType, Integer.toString(version)));
+    }
+}
diff --git a/src/java/net/sf/jabref/groups/VersionHandling.java b/src/java/net/sf/jabref/groups/VersionHandling.java
index b3ec19f..e3b22ae 100644
--- a/src/java/net/sf/jabref/groups/VersionHandling.java
+++ b/src/java/net/sf/jabref/groups/VersionHandling.java
@@ -1,207 +1,207 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.groups;
-
-import java.util.Vector;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-
-/**
- * Handles versioning of groups, e.g. automatic conversion from previous to
- * current versions, or import of flat groups (JabRef <= 1.6) to tree.
- * 
- * @author jzieren (10.04.2005)
- */
-public class VersionHandling {
-    public static final int CURRENT_VERSION = 3;
-
-    /**
-     * Imports old (flat) groups data and converts it to a 2-level tree with an
-     * AllEntriesGroup at the root.
-     * 
-     * @return the root of the generated tree.
-     */
-    public static GroupTreeNode importFlatGroups(Vector<String> groups)
-            throws IllegalArgumentException {
-        GroupTreeNode root = new GroupTreeNode(new AllEntriesGroup());
-        final int number = groups.size() / 3;
-        String name, field, regexp;
-        for (int i = 0; i < number; ++i) {
-            field = groups.get(3 * i + 0);
-            name = groups.get(3 * i + 1);
-            regexp = groups.get(3 * i + 2);
-            root.add(new GroupTreeNode(new KeywordGroup(name, field, regexp,
-                    false, true, AbstractGroup.INDEPENDENT)));
-        }
-        return root;
-    }
-
-    public static GroupTreeNode importGroups(Vector<String> orderedData,
-            BibtexDatabase db, int version) throws Exception {
-        switch (version) {
-        case 0:
-        case 1:
-            return Version0_1.fromString(orderedData.firstElement(),
-                    db, version);
-        case 2:
-        case 3:
-            return Version2_3.fromString(orderedData, db, version);
-        default:
-            throw new IllegalArgumentException(Globals.lang("Failed to read groups data (unsupported version: %0)", Integer.toString(version)));
-        }
-    }
-
-    /** Imports groups version 0 and 1. */
-    private static class Version0_1 {
-        /**
-         * Parses the textual representation obtained from
-         * GroupTreeNode.toString() and recreates that node and all of its
-         * children from it.
-         * 
-         * @throws Exception
-         *             When a group could not be recreated
-         */
-        private static GroupTreeNode fromString(String s, BibtexDatabase db,
-                int version) throws Exception {
-            GroupTreeNode root = null;
-            GroupTreeNode newNode;
-            int i;
-            String g;
-            while (s.length() > 0) {
-                if (s.startsWith("(")) {
-                    String subtree = getSubtree(s);
-                    newNode = fromString(subtree, db, version);
-                    // continue after this subtree by removing it
-                    // and the leading/trailing braces, and
-                    // the comma (that makes 3) that always trails it
-                    // unless it's at the end of s anyway.
-                    i = 3 + subtree.length();
-                    s = i >= s.length() ? "" : s.substring(i);
-                } else {
-                    i = indexOfUnquoted(s, ',');
-                    g = i < 0 ? s : s.substring(0, i);
-                    if (i >= 0)
-                        s = s.substring(i + 1);
-                    else
-                        s = "";
-                    newNode = new GroupTreeNode(AbstractGroup.fromString(Util
-                            .unquote(g, '\\'), db, version));
-                }
-                if (root == null) // first node will be root
-                    root = newNode;
-                else
-                    root.add(newNode);
-            }
-            return root;
-        }
-
-        /**
-         * Returns the substring delimited by a pair of matching braces, with
-         * the first brace at index 0. Quoted characters are skipped.
-         * 
-         * @return the matching substring, or "" if not found.
-         */
-        private static String getSubtree(String s) {
-            int i = 1;
-            int level = 1;
-            while (i < s.length()) {
-                switch (s.charAt(i)) {
-                case '\\':
-                    ++i;
-                    break;
-                case '(':
-                    ++level;
-                    break;
-                case ')':
-                    --level;
-                    if (level == 0)
-                        return s.substring(1, i);
-                    break;
-                }
-                ++i;
-            }
-            return "";
-        }
-
-        /**
-         * Returns the index of the first occurence of c, skipping quoted
-         * special characters (escape character: '\\').
-         * 
-         * @param s
-         *            The String to search in.
-         * @param c
-         *            The character to search
-         * @return The index of the first unescaped occurence of c in s, or -1
-         *         if not found.
-         */
-        private static int indexOfUnquoted(String s, char c) {
-            int i = 0;
-            while (i < s.length()) {
-                if (s.charAt(i) == '\\') {
-                    ++i; // skip quoted special
-                } else {
-                    if (s.charAt(i) == c)
-                        return i;
-                }
-                ++i;
-            }
-            return -1;
-        }
-    }
-    
-    private static class Version2_3 {
-        private static GroupTreeNode fromString(Vector<String> data, BibtexDatabase db,
-                int version) throws Exception {
-            GroupTreeNode cursor = null;
-            GroupTreeNode root = null;
-            GroupTreeNode newNode;
-            AbstractGroup group;
-            int spaceIndex;
-            int level;
-            String s;
-            for (int i = 0; i < data.size(); ++i) {
-                s = data.elementAt(i).toString();
-                
-                // This allows to read databases that have been modified by, e.g., BibDesk
-                s = s.trim();
-                if (s.length() == 0)
-                	continue;
-                
-                spaceIndex = s.indexOf(' ');
-                if (spaceIndex <= 0)
-                    throw new Exception("bad format"); // JZTODO lyrics
-                level = Integer.parseInt(s.substring(0, spaceIndex));
-                group = AbstractGroup.fromString(s.substring(spaceIndex + 1),
-                        db, version);
-                newNode = new GroupTreeNode(group);
-                if (cursor == null) {
-                    // create new root
-                    cursor = newNode;
-                    root = cursor;
-                } else {
-                    // insert at desired location
-                    while (level <= cursor.getLevel())
-                        cursor = (GroupTreeNode) cursor.getParent();
-                    cursor.add(newNode);
-                    cursor = newNode;
-                }
-            }
-            return root;
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.groups;
+
+import java.util.Vector;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+
+/**
+ * Handles versioning of groups, e.g. automatic conversion from previous to
+ * current versions, or import of flat groups (JabRef <= 1.6) to tree.
+ * 
+ * @author jzieren (10.04.2005)
+ */
+public class VersionHandling {
+    public static final int CURRENT_VERSION = 3;
+
+    /**
+     * Imports old (flat) groups data and converts it to a 2-level tree with an
+     * AllEntriesGroup at the root.
+     * 
+     * @return the root of the generated tree.
+     */
+    public static GroupTreeNode importFlatGroups(Vector<String> groups)
+            throws IllegalArgumentException {
+        GroupTreeNode root = new GroupTreeNode(new AllEntriesGroup());
+        final int number = groups.size() / 3;
+        String name, field, regexp;
+        for (int i = 0; i < number; ++i) {
+            field = groups.get(3 * i + 0);
+            name = groups.get(3 * i + 1);
+            regexp = groups.get(3 * i + 2);
+            root.add(new GroupTreeNode(new KeywordGroup(name, field, regexp,
+                    false, true, AbstractGroup.INDEPENDENT)));
+        }
+        return root;
+    }
+
+    public static GroupTreeNode importGroups(Vector<String> orderedData,
+            BibtexDatabase db, int version) throws Exception {
+        switch (version) {
+        case 0:
+        case 1:
+            return Version0_1.fromString(orderedData.firstElement(),
+                    db, version);
+        case 2:
+        case 3:
+            return Version2_3.fromString(orderedData, db, version);
+        default:
+            throw new IllegalArgumentException(Globals.lang("Failed to read groups data (unsupported version: %0)", Integer.toString(version)));
+        }
+    }
+
+    /** Imports groups version 0 and 1. */
+    private static class Version0_1 {
+        /**
+         * Parses the textual representation obtained from
+         * GroupTreeNode.toString() and recreates that node and all of its
+         * children from it.
+         * 
+         * @throws Exception
+         *             When a group could not be recreated
+         */
+        private static GroupTreeNode fromString(String s, BibtexDatabase db,
+                int version) throws Exception {
+            GroupTreeNode root = null;
+            GroupTreeNode newNode;
+            int i;
+            String g;
+            while (s.length() > 0) {
+                if (s.startsWith("(")) {
+                    String subtree = getSubtree(s);
+                    newNode = fromString(subtree, db, version);
+                    // continue after this subtree by removing it
+                    // and the leading/trailing braces, and
+                    // the comma (that makes 3) that always trails it
+                    // unless it's at the end of s anyway.
+                    i = 3 + subtree.length();
+                    s = i >= s.length() ? "" : s.substring(i);
+                } else {
+                    i = indexOfUnquoted(s, ',');
+                    g = i < 0 ? s : s.substring(0, i);
+                    if (i >= 0)
+                        s = s.substring(i + 1);
+                    else
+                        s = "";
+                    newNode = new GroupTreeNode(AbstractGroup.fromString(Util
+                            .unquote(g, '\\'), db, version));
+                }
+                if (root == null) // first node will be root
+                    root = newNode;
+                else
+                    root.add(newNode);
+            }
+            return root;
+        }
+
+        /**
+         * Returns the substring delimited by a pair of matching braces, with
+         * the first brace at index 0. Quoted characters are skipped.
+         * 
+         * @return the matching substring, or "" if not found.
+         */
+        private static String getSubtree(String s) {
+            int i = 1;
+            int level = 1;
+            while (i < s.length()) {
+                switch (s.charAt(i)) {
+                case '\\':
+                    ++i;
+                    break;
+                case '(':
+                    ++level;
+                    break;
+                case ')':
+                    --level;
+                    if (level == 0)
+                        return s.substring(1, i);
+                    break;
+                }
+                ++i;
+            }
+            return "";
+        }
+
+        /**
+         * Returns the index of the first occurence of c, skipping quoted
+         * special characters (escape character: '\\').
+         * 
+         * @param s
+         *            The String to search in.
+         * @param c
+         *            The character to search
+         * @return The index of the first unescaped occurence of c in s, or -1
+         *         if not found.
+         */
+        private static int indexOfUnquoted(String s, char c) {
+            int i = 0;
+            while (i < s.length()) {
+                if (s.charAt(i) == '\\') {
+                    ++i; // skip quoted special
+                } else {
+                    if (s.charAt(i) == c)
+                        return i;
+                }
+                ++i;
+            }
+            return -1;
+        }
+    }
+    
+    private static class Version2_3 {
+        private static GroupTreeNode fromString(Vector<String> data, BibtexDatabase db,
+                int version) throws Exception {
+            GroupTreeNode cursor = null;
+            GroupTreeNode root = null;
+            GroupTreeNode newNode;
+            AbstractGroup group;
+            int spaceIndex;
+            int level;
+            String s;
+            for (int i = 0; i < data.size(); ++i) {
+                s = data.elementAt(i).toString();
+                
+                // This allows to read databases that have been modified by, e.g., BibDesk
+                s = s.trim();
+                if (s.length() == 0)
+                	continue;
+                
+                spaceIndex = s.indexOf(' ');
+                if (spaceIndex <= 0)
+                    throw new Exception("bad format"); // JZTODO lyrics
+                level = Integer.parseInt(s.substring(0, spaceIndex));
+                group = AbstractGroup.fromString(s.substring(spaceIndex + 1),
+                        db, version);
+                newNode = new GroupTreeNode(group);
+                if (cursor == null) {
+                    // create new root
+                    cursor = newNode;
+                    root = cursor;
+                } else {
+                    // insert at desired location
+                    while (level <= cursor.getLevel())
+                        cursor = (GroupTreeNode) cursor.getParent();
+                    cursor.add(newNode);
+                    cursor = newNode;
+                }
+            }
+            return root;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/AttachFileDialog.java b/src/java/net/sf/jabref/gui/AttachFileDialog.java
index 7c7a6d4..6cedf64 100644
--- a/src/java/net/sf/jabref/gui/AttachFileDialog.java
+++ b/src/java/net/sf/jabref/gui/AttachFileDialog.java
@@ -1,158 +1,158 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.BorderLayout;
-import java.awt.Dialog;
-import java.awt.Frame;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.*;
-
-import net.sf.jabref.*;
-import net.sf.jabref.external.ExternalFilePanel;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: May 18, 2005
- * Time: 9:59:52 PM
- * To change this template use File | Settings | File Templates.
- */
-public class AttachFileDialog extends JDialog {
-
-    AttachFileDialog ths = this;
-    FieldEditor editor;
-    String fieldName;
-    JPanel main;
-    JButton browse = new JButton(Globals.lang("Browse")),
-        download = new JButton(Globals.lang("Download")),
-        auto = new JButton(Globals.lang("Auto")),
-        ok = new JButton(Globals.lang("Ok")),
-        cancel = new JButton(Globals.lang("Cancel"));
-    BibtexEntry entry;
-    MetaData metaData;
-    private boolean cancelled = true; // Default to true, so a pure close operation implies Cancel.
-
-    public AttachFileDialog(Frame parent, MetaData metaData, BibtexEntry entry, String fieldName) {
-        super(parent, true);
-        this.metaData = metaData;
-        this.entry = entry;
-        this.fieldName = fieldName;
-        this.editor = new FieldTextField(fieldName, entry.getField(fieldName), false);
-
-        initGui();
-    }
-
-    public AttachFileDialog(Dialog parent, MetaData metaData, BibtexEntry entry, String fieldName) {
-        super(parent, true);
-        this.metaData = metaData;
-        this.entry = entry;
-        this.fieldName = fieldName;
-        this.editor = new FieldTextField(fieldName, entry.getField(fieldName), false);
-
-        initGui();
-    }
-
-    public boolean cancelled() {
-        return cancelled;
-    }
-
-    public String getValue() {
-        return editor.getText();
-    }
-
-    private void initGui() {
-
-        final ExternalFilePanel extPan = new ExternalFilePanel(fieldName, metaData, entry,
-                      editor, Util.getFileFilterForField(fieldName));
-
-        browse.addActionListener(new ActionListener () {
-            public void actionPerformed(ActionEvent event) {
-                extPan.browseFile(fieldName, editor);
-            }
-        });
-
-        download.addActionListener(new ActionListener () {
-            public void actionPerformed(ActionEvent event) {
-                extPan.downLoadFile(fieldName, editor, ths);
-            }
-        });
-
-        auto.addActionListener(new ActionListener () {
-                    public void actionPerformed(ActionEvent event) {
-                        extPan.autoSetFile(fieldName, editor);
-                    }
-                });
-
-
-        ActionListener okListener = new ActionListener () {
-            public void actionPerformed(ActionEvent event) {
-                cancelled = false;
-                dispose();
-            }
-        };
-
-        ok.addActionListener(okListener);
-        ((JTextField)editor.getTextComponent()).addActionListener(okListener);
-
-        AbstractAction cancelListener = new AbstractAction () {
-            public void actionPerformed(ActionEvent event) {
-                cancelled = true;
-                dispose();
-            }
-        };
-
-        cancel.addActionListener(cancelListener);
-        editor.getTextComponent().getInputMap().put(Globals.prefs.getKey("Close dialog"), "close");
-	    editor.getTextComponent().getActionMap().put("close", cancelListener);
-
-        FormLayout layout = new FormLayout("fill:160dlu, 4dlu, fill:pref","");
-	    DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-        //builder.append(Util.nCase(fieldName));//(editor.getLabel());
-        builder.appendSeparator(Util.nCase(fieldName));
-        builder.append(editor.getTextComponent());
-        builder.append(browse);
-
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addButton(download);
-        bb.addButton(auto);
-        builder.nextLine();
-        builder.append(bb.getPanel());
-        builder.nextLine();
-        builder.appendSeparator();
-
-        main = builder.getPanel();
-
-        main.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-
-        bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-
-
-        getContentPane().add(main, BorderLayout.CENTER);
-        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-        pack();
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Dialog;
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.*;
+
+import net.sf.jabref.*;
+import net.sf.jabref.external.ExternalFilePanel;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: May 18, 2005
+ * Time: 9:59:52 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class AttachFileDialog extends JDialog {
+
+    AttachFileDialog ths = this;
+    FieldEditor editor;
+    String fieldName;
+    JPanel main;
+    JButton browse = new JButton(Globals.lang("Browse")),
+        download = new JButton(Globals.lang("Download")),
+        auto = new JButton(Globals.lang("Auto")),
+        ok = new JButton(Globals.lang("Ok")),
+        cancel = new JButton(Globals.lang("Cancel"));
+    BibtexEntry entry;
+    MetaData metaData;
+    private boolean cancelled = true; // Default to true, so a pure close operation implies Cancel.
+
+    public AttachFileDialog(Frame parent, MetaData metaData, BibtexEntry entry, String fieldName) {
+        super(parent, true);
+        this.metaData = metaData;
+        this.entry = entry;
+        this.fieldName = fieldName;
+        this.editor = new FieldTextField(fieldName, entry.getField(fieldName), false);
+
+        initGui();
+    }
+
+    public AttachFileDialog(Dialog parent, MetaData metaData, BibtexEntry entry, String fieldName) {
+        super(parent, true);
+        this.metaData = metaData;
+        this.entry = entry;
+        this.fieldName = fieldName;
+        this.editor = new FieldTextField(fieldName, entry.getField(fieldName), false);
+
+        initGui();
+    }
+
+    public boolean cancelled() {
+        return cancelled;
+    }
+
+    public String getValue() {
+        return editor.getText();
+    }
+
+    private void initGui() {
+
+        final ExternalFilePanel extPan = new ExternalFilePanel(fieldName, metaData, entry,
+                      editor, Util.getFileFilterForField(fieldName));
+
+        browse.addActionListener(new ActionListener () {
+            public void actionPerformed(ActionEvent event) {
+                extPan.browseFile(fieldName, editor);
+            }
+        });
+
+        download.addActionListener(new ActionListener () {
+            public void actionPerformed(ActionEvent event) {
+                extPan.downLoadFile(fieldName, editor, ths);
+            }
+        });
+
+        auto.addActionListener(new ActionListener () {
+                    public void actionPerformed(ActionEvent event) {
+                        extPan.autoSetFile(fieldName, editor);
+                    }
+                });
+
+
+        ActionListener okListener = new ActionListener () {
+            public void actionPerformed(ActionEvent event) {
+                cancelled = false;
+                dispose();
+            }
+        };
+
+        ok.addActionListener(okListener);
+        ((JTextField)editor.getTextComponent()).addActionListener(okListener);
+
+        AbstractAction cancelListener = new AbstractAction () {
+            public void actionPerformed(ActionEvent event) {
+                cancelled = true;
+                dispose();
+            }
+        };
+
+        cancel.addActionListener(cancelListener);
+        editor.getTextComponent().getInputMap().put(Globals.prefs.getKey("Close dialog"), "close");
+	    editor.getTextComponent().getActionMap().put("close", cancelListener);
+
+        FormLayout layout = new FormLayout("fill:160dlu, 4dlu, fill:pref","");
+	    DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+        //builder.append(Util.nCase(fieldName));//(editor.getLabel());
+        builder.appendSeparator(Util.nCase(fieldName));
+        builder.append(editor.getTextComponent());
+        builder.append(browse);
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addButton(download);
+        bb.addButton(auto);
+        builder.nextLine();
+        builder.append(bb.getPanel());
+        builder.nextLine();
+        builder.appendSeparator();
+
+        main = builder.getPanel();
+
+        main.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+        bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+
+
+        getContentPane().add(main, BorderLayout.CENTER);
+        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        pack();
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/AutoCompleteListener.java b/src/java/net/sf/jabref/gui/AutoCompleteListener.java
index d5a1ecc..03479db 100644
--- a/src/java/net/sf/jabref/gui/AutoCompleteListener.java
+++ b/src/java/net/sf/jabref/gui/AutoCompleteListener.java
@@ -1,510 +1,510 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import javax.swing.text.JTextComponent;
-import javax.swing.text.BadLocationException;
-
-import net.sf.jabref.autocompleter.AbstractAutoCompleter;
-
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.FocusListener;
-import java.awt.event.FocusEvent;
-import java.util.logging.ConsoleHandler;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Created by Morten O. Alver, 16 Feb. 2007
- */
-public class AutoCompleteListener extends KeyAdapter implements FocusListener {
-
-	private static Logger logger = Logger.getLogger(AutoCompleteListener.class.getName());
-
-    AbstractAutoCompleter completer;
-
-    // These variables keep track of the situation from time to time.
-    protected String toSetIn = null; // null indicates that there are no completions available
-    protected String lastBeginning = null; // the letters, the user has typed until know
-    protected int lastCaretPosition = -1;
-    protected String[] lastCompletions = null;
-    protected int lastShownCompletion = 0;
-    protected boolean consumeEnterKey = true;
-
-    // This field is set if the focus listener should call another focus listener
-    // after finishing. This is needed because the autocomplete listener must
-    // run before the focus listener responsible for storing the current edit.
-    protected FocusListener nextFocusListener = null;
-
-    public AutoCompleteListener(AbstractAutoCompleter completer) {
-//    	if (logger.getHandlers().length == 0) {
-//	    	logger.setLevel(Level.FINEST);
-//	    	ConsoleHandler ch = new ConsoleHandler();
-//	    	ch.setLevel(Level.FINEST);
-//	    	logger.addHandler(ch);
-//    	}
-        this.completer = completer;
-    }
-
-    /**
-     * This method is used if the focus listener should call another focus listener
-     * after finishing. This is needed because the autocomplete listener must
-     * run before the focus listener responsible for storing the current edit.
-     *
-     * @param listener The listener to call.
-     */
-    public void setNextFocusListener(FocusListener listener) {
-        this.nextFocusListener = listener;
-    }
-
-    /**
-     * This setting determines whether the autocomplete listener should consume the Enter key
-     * stroke when it leads to accepting a completion. If set to false, the JTextComponent will receive
-     * the Enter key press after the completion is done. The default value if true.
-     * @param t true to indicate that the Enter key should be consumed, false that it should be forwarded
-     */
-    public void setConsumeEnterKey(boolean t) {
-        this.consumeEnterKey = t;
-    }
-
-    public void keyPressed(KeyEvent e) {
-    	if ((toSetIn != null) && (e.getKeyCode() == KeyEvent.VK_ENTER)) {
-            JTextComponent comp = (JTextComponent) e.getSource();
-
-            // replace typed characters by characters from completion
-            lastBeginning = lastCompletions[lastShownCompletion];
-
-            int end = comp.getSelectionEnd();
-            comp.select(end, end);
-            toSetIn = null;
-            if (consumeEnterKey)
-                e.consume();
-            return;
-        }
-        // Cycle through alternative completions when user presses PGUP/PGDN:
-        else if ((e.getKeyCode() == KeyEvent.VK_PAGE_DOWN) && (toSetIn != null)) {
-            cycle((JTextComponent) e.getSource(), 1);
-            e.consume();
-        }
-        else if ((e.getKeyCode() == KeyEvent.VK_PAGE_UP) && (toSetIn != null)) {
-            cycle((JTextComponent) e.getSource(), -1);
-            e.consume();
-        }
-//        else if ((e.getKeyCode() == KeyEvent.VK_BACK_SPACE)) {
-//        	StringBuffer currentword = getCurrentWord((JTextComponent) e.getSource());
-//        	// delete last char to obey semantics of back space
-//        	currentword.deleteCharAt(currentword.length()-1);
-//        	doCompletion(currentword, e);
-//        }
-        else if (e.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
-        	if (e.getKeyCode() != KeyEvent.VK_SHIFT) {
-        		// shift is OK, everyhting else leads to a reset
-        		resetAutoCompletion();
-        	} else {
-            	logger.finest("special case: shift pressed. No action.");
-        	}
-        } else {
-        	logger.finest("special case: defined character, but not caught above");
-        }
-    }
-    
-    private void cycle(JTextComponent comp, int increment) {
-    	assert(lastCompletions != null);
-    	assert(lastCompletions.length > 0);
-        lastShownCompletion += increment;
-        if (lastShownCompletion >= lastCompletions.length)
-            lastShownCompletion = 0;
-        else if (lastShownCompletion < 0)
-            lastShownCompletion = lastCompletions.length-1;
-        String sno = lastCompletions[lastShownCompletion];
-        toSetIn = sno.substring(lastBeginning.length()-1);
-        
-        StringBuffer alltext = new StringBuffer(comp.getText());
-        
-        int oldSelectionStart = comp.getSelectionStart();
-        int oldSelectionEnd = comp.getSelectionEnd();
-        
-        // replace prefix with new prefix
-        int startPos = comp.getSelectionStart() - lastBeginning.length();
-        alltext.delete(startPos, oldSelectionStart);
-        alltext.insert(startPos, sno.subSequence(0, lastBeginning.length()));
-        
-        // replace suffix with new suffix
-        int deletedChars = oldSelectionEnd - oldSelectionStart;
-        alltext.delete(oldSelectionStart, oldSelectionEnd);
-        //int cp = oldSelectionEnd - deletedChars;
-        alltext.insert(oldSelectionStart, toSetIn.substring(1));
-        
-        //Util.pr(alltext.toString());
-        comp.setText(alltext.toString());
-        //comp.setCaretPosition(cp+toSetIn.length()-1);
-        comp.select(oldSelectionStart, oldSelectionStart + toSetIn.length()-1);
-        lastCaretPosition = comp.getCaretPosition();
-        //System.out.println("ToSetIn: '"+toSetIn+"'");
-    }
-    
-    /**
-     * If user cancels autocompletion by
-     *   a) entering another letter than the completed word (and there is no other auto completion)
-     *   b) space
-     * the casing of the letters has to be kept
-     * 
-     * Global variable "lastBeginning" keeps track of typed letters.
-     * We rely on this variable to reconstruct the text 
-     * 
-     * @param wordSeperatorTyped indicates whether the user has typed a white space character or a
-     */
-    private void setUnmodifiedTypedLetters(JTextComponent comp, boolean lastBeginningContainsTypedCharacter, boolean wordSeperatorTyped) {
-    	if (lastBeginning == null) {
-    		logger.finest("no last beginning");
-    		// There was no previous input (if the user typed a word, where no autocompletion is available)
-    		// Thus, there is nothing to replace
-    		return;
-    	}
-    	logger.finest("lastBeginning: >" + lastBeginning + "<");
-    	if (comp.getSelectedText() == null) {
-    		// if there is no selection
-    		// the user has typed the complete word, but possibly with a different casing
-    		// we need a replacement
-    		if (wordSeperatorTyped) {
-    			logger.finest("replacing complete word");
-    		} else {
-    			// if user did not press a white space character (space, ...),
-    			// then we do not do anything
-    			return;
-    		}
-    	} else {
-	    	logger.finest("selected text " + comp.getSelectedText()+ " will be removed");
-	        // remove completion suggestion
-	        comp.replaceSelection("");
-    	}
-        
-        lastCaretPosition = comp.getCaretPosition();
-        
-        int endIndex = lastCaretPosition - lastBeginning.length();
-        if (lastBeginningContainsTypedCharacter) {
-            // the current letter is NOT contained in comp.getText(), but in lastBeginning
-        	// thus lastBeginning.length() is one too large
-        	endIndex++;
-        }
-        String text = comp.getText();
-        comp.setText(text.substring(0, endIndex).
-        		concat(lastBeginning).
-                concat(text.substring(lastCaretPosition)));
-        if (lastBeginningContainsTypedCharacter) {
-            // the current letter is NOT contained in comp.getText()
-        	// Thus, cursor position also did not get updated
-        	lastCaretPosition++;
-        }
-        comp.setCaretPosition(lastCaretPosition);
-        lastBeginning = null;
-    }
-    
-    /**
-     * Start a new completion attempt
-     * (instead of treating a continuation of an existing word or an interrupt of the current word)
-     */
-    private void startCompletion(StringBuffer currentword, KeyEvent e) {
-    	JTextComponent comp = (JTextComponent) e.getSource();
-
-    	String[] completed = findCompletions(currentword.toString(), comp);
-        String prefix = completer.getPrefix();
-        String cWord = (prefix != null) && (prefix.length() > 0) ?
-                currentword.toString().substring(prefix.length()) : currentword.toString();
-    	if (logger.isLoggable(Level.FINEST)) {
-    		logger.finest("startCompletion");
-    		logger.finest("currentword: >" + currentword + "<");
-    		logger.finest("prefix: >" + prefix + "<");
-    		logger.finest("cword: >" + cWord + "<");
-    	}
-        int no = 0; // We use the first word in the array of completions.
-        if ((completed != null) && (completed.length > 0)) {
-            lastShownCompletion = 0;
-            lastCompletions = completed;
-            String sno = completed[no];
-            
-            // these two lines obey the user's input
-            //toSetIn = Character.toString(ch);
-            //toSetIn = toSetIn.concat(sno.substring(cWord.length()));
-            // BUT we obey the completion
-            toSetIn = sno.substring(cWord.length() - 1);
-        	if (logger.isLoggable(Level.FINEST)) {
-        		logger.finest("toSetIn: >" + toSetIn + "<");
-        	}
-        	
-            StringBuffer alltext = new StringBuffer(comp.getText());
-            int cp = comp.getCaretPosition();
-            alltext.insert(cp, toSetIn);
-            comp.setText(alltext.toString());
-            comp.setCaretPosition(cp);
-            comp.select(cp + 1, cp + 1 + sno.length() - cWord.length());
-            e.consume();
-            lastCaretPosition = comp.getCaretPosition();
-            char ch = e.getKeyChar();
-            logger.finest("Appending >" + ch + "<");
-            if (cWord.length()<=1) {
-            	lastBeginning = Character.toString(ch);
-            } else {
-            	lastBeginning = cWord.substring(0, cWord.length()-1).concat(Character.toString(ch));
-            }
-            return;
-        }
-
-    }
-
-    public void keyTyped(KeyEvent e) {
-    	logger.finest("key typed event caught");
-        char ch = e.getKeyChar();
-    	if (ch == '\n')
-    		// this case is handled at keyPressed(e)
-    		return;
-    	
-        
-        if ((e.getModifiers() | KeyEvent.SHIFT_MASK) == KeyEvent.SHIFT_MASK) {
-        	// plain key or SHIFT + key is pressed, no handling of CTRL+key,  META+key, ...
-        if (Character.isLetter(ch) || Character.isDigit(ch) || (Character.isWhitespace(ch) && completer.isSingleUnitField())) {
-            JTextComponent comp = (JTextComponent) e.getSource();
-
-            if (logger.isLoggable(Level.FINEST)) {
-            	if (toSetIn == null)
-            		logger.finest("toSetIn: NULL");            	
-            	else
-            		logger.finest("toSetIn: >" + toSetIn + "<");
-        	}
-            
-        	// The case-insensitive system is a bit tricky here
-        	// If keyword is "TODO" and user types "tO", then this is treated as "continue" as the "O" matches the "O"
-        	// If keyword is "TODO" and user types "To", then this is treated as "discont" as the "o" does NOT match the "O".
-
-            if ((toSetIn != null) && (toSetIn.length() > 1) &&
-                    (ch == toSetIn.charAt(1))) {
-                // User continues on the word that was suggested.
-        		logger.finest("cont");
-            	
-                toSetIn = toSetIn.substring(1);
-                if (toSetIn.length() > 0) {
-                    int cp = comp.getCaretPosition();
-                    //comp.setCaretPosition(cp+1-toSetIn.);
-                    //System.out.println(cp-toSetIn.length()+" - "+cp);
-                    comp.select(cp + 1 - toSetIn.length(), cp);
-                    lastBeginning = lastBeginning + ch;
-
-                    e.consume();
-                    lastCaretPosition = comp.getCaretPosition();
-
-                    //System.out.println("Added char: '"+toSetIn+"'");
-                    //System.out.println("LastBeginning: '"+lastBeginning+"'");
-
-                    lastCompletions = findCompletions(lastBeginning, comp);
-                    lastShownCompletion = 0;
-                    for (int i = 0; i < lastCompletions.length; i++) {
-                        String lastCompletion = lastCompletions[i];
-                        //System.out.println("Completion["+i+"] = "+lastCompletion);
-                        if (lastCompletion.endsWith(toSetIn)) {
-                            lastShownCompletion = i;
-                            break;
-                        }
-
-                    }
-                    //System.out.println("Index now: "+lastShownCompletion);
-                    if (toSetIn.length() < 2) {
-                    	// User typed the last character of the autocompleted word
-                    	// We have to replace the automcompletion word by the typed word.
-                    	// This helps if the user presses "space" after the completion
-                    	// "space" indicates that the user does NOT want the autocompletion,
-                    	// but the typed word
-                        String text = comp.getText();
-                        comp.setText(text.substring(0, lastCaretPosition - lastBeginning.length())
-                                + lastBeginning
-                                + text.substring(lastCaretPosition));
-                        // there is no selected text, therefore we are not updating the selection
-                    	toSetIn = null;
-                    }
-                    return;
-                }
-            }
-
-            if ((toSetIn != null) && ((toSetIn.length() <= 1) ||
-                    (ch != toSetIn.charAt(1)))) {
-                // User discontinues the word that was suggested.
-                lastBeginning = lastBeginning + ch;
-            	if (logger.isLoggable(Level.FINEST)) {
-            		logger.finest("discont");
-            		logger.finest("toSetIn: >" + toSetIn + "<");
-            		logger.finest("lastBeginning: >" + lastBeginning +"<");
-            	}
-                String[] completed = findCompletions(lastBeginning, comp);
-                if ((completed != null) && (completed.length > 0)) {
-                    lastShownCompletion = 0;
-                    lastCompletions = completed;
-                    String sno = completed[0];
-                    // toSetIn = string used for autocompletion last time
-                    // this string has to be removed
-                    // lastCaretPosition is the position of the caret after toSetIn.
-                    int lastLen = toSetIn.length() - 1;
-                    toSetIn = sno.substring(lastBeginning.length() - 1);
-                    String text = comp.getText();
-                    //Util.pr(""+lastLen);
-                    //we do not use toSetIn as we want to obey the casing of "sno"
-                    comp.setText(text.substring(0, lastCaretPosition - lastLen - lastBeginning.length()+1)
-                            + sno
-                            + text.substring(lastCaretPosition));
-                    int startSelect = lastCaretPosition + 1 - lastLen;
-                    int endSelect =  lastCaretPosition + toSetIn.length() - lastLen;
-                    comp.select(startSelect, endSelect);
-
-                    lastCaretPosition = comp.getCaretPosition();
-                    e.consume();
-                    return;
-                } else {
-                	setUnmodifiedTypedLetters(comp, true, false);
-                	e.consume();
-                    toSetIn = null;
-                    return;
-                }
-            }
-
-    		logger.finest("case else");
-
-            comp.replaceSelection("");
-
-            StringBuffer currentword = getCurrentWord(comp);
-            if (currentword == null)
-                currentword = new StringBuffer();
-            
-            // only "real characters" end up here
-            assert(!Character.isISOControl(ch));
-            currentword.append(ch);
-            startCompletion(currentword, e);
-            return;
-        } else {
-            if (Character.isWhitespace(ch) ) {
-            	assert(!completer.isSingleUnitField());
-        		logger.finest("whitespace && !singleUnitField");
-            	// start a new search if end-of-field is reached
-
-            	// replace displayed letters with typed letters
-            	setUnmodifiedTypedLetters((JTextComponent) e.getSource(), false, true);
-            	resetAutoCompletion();
-                return;
-            }
-            
-        	logger.finest("No letter/digit/whitespace or CHAR_UNDEFINED");
-        	// replace displayed letters with typed letters 
-        	setUnmodifiedTypedLetters((JTextComponent) e.getSource(), false, !Character.isISOControl(ch));
-        	resetAutoCompletion();
-        	return;
-        }
-        }
-        resetAutoCompletion();
-    }
-
-    /**
-     * Resets the auto completion data in a way that no leftovers are there
-     */
-    private void resetAutoCompletion() {
-    	logger.finest("Resetting autocompletion");
-        toSetIn = null;
-        lastBeginning = null;
-    }
-
-	protected String[] findCompletions(String beginning, JTextComponent comp) {
-        return completer.complete(beginning);
-    }
-
-    protected StringBuffer getCurrentWord(JTextComponent comp) {
-        StringBuffer res = new StringBuffer();
-        String upToCaret;
-
-        try {
-            upToCaret = comp.getText(0, comp.getCaretPosition());
-            // We now have the text from the start of the field up to the caret position.
-            // In most fields, we are only interested in the currently edited word, so we
-            // seek from the caret backward to the closest space:
-            if (!completer.isSingleUnitField()) {
-                if ((comp.getCaretPosition() < comp.getText().length())
-                        && Character.isWhitespace(comp.getText().charAt(comp.getCaretPosition()))) {
-                    // caret is in the middle of the text AND current character is a whitespace
-                	// that means: a new word is started and there is no current word
-                    return null;
-                }
-            	
-                int piv = upToCaret.length() - 1;
-                while ((piv >= 0) && !Character.isWhitespace(upToCaret.charAt(piv))) {
-                    piv--;
-                }
-                // priv points to whitespace char or priv is -1
-                // copy everything from the next char up to the end of "upToCaret" 
-                res.append(upToCaret.substring(piv+1));
-            } else {
-	            // For fields such as "journal" it is more reasonable to try to complete on the entire
-	            // text field content, so we skip the searching and keep the entire part up to the caret:
-	            res.append(upToCaret);
-            }
-            //Util.pr("AutoCompListener: "+res.toString());
-        } catch (BadLocationException ex) {
-        }
-
-        return res;
-    }
-
-    final static int ANY_NAME = 0, FIRST_NAME = 1, LAST_NAME = 2;
-    protected int findNamePositionStatus(JTextComponent comp) {
-        String upToCaret;
-        try {
-            upToCaret = comp.getText(0, comp.getCaretPosition());
-            // Clip off evertyhing up to and including the last " and " before:
-            upToCaret = upToCaret.substring(upToCaret.lastIndexOf(" and ")+1);
-            int commaIndex = upToCaret.indexOf(',');
-            if (commaIndex < 0)
-                return ANY_NAME;
-            else
-                return FIRST_NAME;
-            
-        } catch (BadLocationException ex) {
-            return ANY_NAME;
-        }
-
-    }
-
-    public void focusGained(FocusEvent event) {
-        if (nextFocusListener != null)
-            nextFocusListener.focusGained(event);
-    }
-
-    public void focusLost(FocusEvent event) {
-        if (toSetIn != null) {
-            JTextComponent comp = (JTextComponent)event.getSource();
-            clearCurrentSuggestion(comp);
-        }
-        if (nextFocusListener != null)
-            nextFocusListener.focusLost(event);
-    }
-
-    public void clearCurrentSuggestion(JTextComponent comp) {
-         if (toSetIn != null) {
-            int selStart = comp.getSelectionStart();
-            String text = comp.getText();
-            comp.setText(text.substring(0, selStart) + text.substring(comp.getSelectionEnd()));
-            comp.setCaretPosition(selStart);
-            lastCompletions = null;
-            lastShownCompletion = 0;
-            lastCaretPosition = -1;
-            toSetIn = null;
-        }
-    }
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import javax.swing.text.JTextComponent;
+import javax.swing.text.BadLocationException;
+
+import net.sf.jabref.autocompleter.AbstractAutoCompleter;
+
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.FocusEvent;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Created by Morten O. Alver, 16 Feb. 2007
+ */
+public class AutoCompleteListener extends KeyAdapter implements FocusListener {
+
+	private static Logger logger = Logger.getLogger(AutoCompleteListener.class.getName());
+
+    AbstractAutoCompleter completer;
+
+    // These variables keep track of the situation from time to time.
+    protected String toSetIn = null; // null indicates that there are no completions available
+    protected String lastBeginning = null; // the letters, the user has typed until know
+    protected int lastCaretPosition = -1;
+    protected String[] lastCompletions = null;
+    protected int lastShownCompletion = 0;
+    protected boolean consumeEnterKey = true;
+
+    // This field is set if the focus listener should call another focus listener
+    // after finishing. This is needed because the autocomplete listener must
+    // run before the focus listener responsible for storing the current edit.
+    protected FocusListener nextFocusListener = null;
+
+    public AutoCompleteListener(AbstractAutoCompleter completer) {
+//    	if (logger.getHandlers().length == 0) {
+//	    	logger.setLevel(Level.FINEST);
+//	    	ConsoleHandler ch = new ConsoleHandler();
+//	    	ch.setLevel(Level.FINEST);
+//	    	logger.addHandler(ch);
+//    	}
+        this.completer = completer;
+    }
+
+    /**
+     * This method is used if the focus listener should call another focus listener
+     * after finishing. This is needed because the autocomplete listener must
+     * run before the focus listener responsible for storing the current edit.
+     *
+     * @param listener The listener to call.
+     */
+    public void setNextFocusListener(FocusListener listener) {
+        this.nextFocusListener = listener;
+    }
+
+    /**
+     * This setting determines whether the autocomplete listener should consume the Enter key
+     * stroke when it leads to accepting a completion. If set to false, the JTextComponent will receive
+     * the Enter key press after the completion is done. The default value if true.
+     * @param t true to indicate that the Enter key should be consumed, false that it should be forwarded
+     */
+    public void setConsumeEnterKey(boolean t) {
+        this.consumeEnterKey = t;
+    }
+
+    public void keyPressed(KeyEvent e) {
+    	if ((toSetIn != null) && (e.getKeyCode() == KeyEvent.VK_ENTER)) {
+            JTextComponent comp = (JTextComponent) e.getSource();
+
+            // replace typed characters by characters from completion
+            lastBeginning = lastCompletions[lastShownCompletion];
+
+            int end = comp.getSelectionEnd();
+            comp.select(end, end);
+            toSetIn = null;
+            if (consumeEnterKey)
+                e.consume();
+            return;
+        }
+        // Cycle through alternative completions when user presses PGUP/PGDN:
+        else if ((e.getKeyCode() == KeyEvent.VK_PAGE_DOWN) && (toSetIn != null)) {
+            cycle((JTextComponent) e.getSource(), 1);
+            e.consume();
+        }
+        else if ((e.getKeyCode() == KeyEvent.VK_PAGE_UP) && (toSetIn != null)) {
+            cycle((JTextComponent) e.getSource(), -1);
+            e.consume();
+        }
+//        else if ((e.getKeyCode() == KeyEvent.VK_BACK_SPACE)) {
+//        	StringBuffer currentword = getCurrentWord((JTextComponent) e.getSource());
+//        	// delete last char to obey semantics of back space
+//        	currentword.deleteCharAt(currentword.length()-1);
+//        	doCompletion(currentword, e);
+//        }
+        else if (e.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
+        	if (e.getKeyCode() != KeyEvent.VK_SHIFT) {
+        		// shift is OK, everyhting else leads to a reset
+        		resetAutoCompletion();
+        	} else {
+            	logger.finest("special case: shift pressed. No action.");
+        	}
+        } else {
+        	logger.finest("special case: defined character, but not caught above");
+        }
+    }
+    
+    private void cycle(JTextComponent comp, int increment) {
+    	assert(lastCompletions != null);
+    	assert(lastCompletions.length > 0);
+        lastShownCompletion += increment;
+        if (lastShownCompletion >= lastCompletions.length)
+            lastShownCompletion = 0;
+        else if (lastShownCompletion < 0)
+            lastShownCompletion = lastCompletions.length-1;
+        String sno = lastCompletions[lastShownCompletion];
+        toSetIn = sno.substring(lastBeginning.length()-1);
+        
+        StringBuffer alltext = new StringBuffer(comp.getText());
+        
+        int oldSelectionStart = comp.getSelectionStart();
+        int oldSelectionEnd = comp.getSelectionEnd();
+        
+        // replace prefix with new prefix
+        int startPos = comp.getSelectionStart() - lastBeginning.length();
+        alltext.delete(startPos, oldSelectionStart);
+        alltext.insert(startPos, sno.subSequence(0, lastBeginning.length()));
+        
+        // replace suffix with new suffix
+        int deletedChars = oldSelectionEnd - oldSelectionStart;
+        alltext.delete(oldSelectionStart, oldSelectionEnd);
+        //int cp = oldSelectionEnd - deletedChars;
+        alltext.insert(oldSelectionStart, toSetIn.substring(1));
+        
+        //Util.pr(alltext.toString());
+        comp.setText(alltext.toString());
+        //comp.setCaretPosition(cp+toSetIn.length()-1);
+        comp.select(oldSelectionStart, oldSelectionStart + toSetIn.length()-1);
+        lastCaretPosition = comp.getCaretPosition();
+        //System.out.println("ToSetIn: '"+toSetIn+"'");
+    }
+    
+    /**
+     * If user cancels autocompletion by
+     *   a) entering another letter than the completed word (and there is no other auto completion)
+     *   b) space
+     * the casing of the letters has to be kept
+     * 
+     * Global variable "lastBeginning" keeps track of typed letters.
+     * We rely on this variable to reconstruct the text 
+     * 
+     * @param wordSeperatorTyped indicates whether the user has typed a white space character or a
+     */
+    private void setUnmodifiedTypedLetters(JTextComponent comp, boolean lastBeginningContainsTypedCharacter, boolean wordSeperatorTyped) {
+    	if (lastBeginning == null) {
+    		logger.finest("no last beginning");
+    		// There was no previous input (if the user typed a word, where no autocompletion is available)
+    		// Thus, there is nothing to replace
+    		return;
+    	}
+    	logger.finest("lastBeginning: >" + lastBeginning + "<");
+    	if (comp.getSelectedText() == null) {
+    		// if there is no selection
+    		// the user has typed the complete word, but possibly with a different casing
+    		// we need a replacement
+    		if (wordSeperatorTyped) {
+    			logger.finest("replacing complete word");
+    		} else {
+    			// if user did not press a white space character (space, ...),
+    			// then we do not do anything
+    			return;
+    		}
+    	} else {
+	    	logger.finest("selected text " + comp.getSelectedText()+ " will be removed");
+	        // remove completion suggestion
+	        comp.replaceSelection("");
+    	}
+        
+        lastCaretPosition = comp.getCaretPosition();
+        
+        int endIndex = lastCaretPosition - lastBeginning.length();
+        if (lastBeginningContainsTypedCharacter) {
+            // the current letter is NOT contained in comp.getText(), but in lastBeginning
+        	// thus lastBeginning.length() is one too large
+        	endIndex++;
+        }
+        String text = comp.getText();
+        comp.setText(text.substring(0, endIndex).
+        		concat(lastBeginning).
+                concat(text.substring(lastCaretPosition)));
+        if (lastBeginningContainsTypedCharacter) {
+            // the current letter is NOT contained in comp.getText()
+        	// Thus, cursor position also did not get updated
+        	lastCaretPosition++;
+        }
+        comp.setCaretPosition(lastCaretPosition);
+        lastBeginning = null;
+    }
+    
+    /**
+     * Start a new completion attempt
+     * (instead of treating a continuation of an existing word or an interrupt of the current word)
+     */
+    private void startCompletion(StringBuffer currentword, KeyEvent e) {
+    	JTextComponent comp = (JTextComponent) e.getSource();
+
+    	String[] completed = findCompletions(currentword.toString(), comp);
+        String prefix = completer.getPrefix();
+        String cWord = (prefix != null) && (prefix.length() > 0) ?
+                currentword.toString().substring(prefix.length()) : currentword.toString();
+    	if (logger.isLoggable(Level.FINEST)) {
+    		logger.finest("startCompletion");
+    		logger.finest("currentword: >" + currentword + "<");
+    		logger.finest("prefix: >" + prefix + "<");
+    		logger.finest("cword: >" + cWord + "<");
+    	}
+        int no = 0; // We use the first word in the array of completions.
+        if ((completed != null) && (completed.length > 0)) {
+            lastShownCompletion = 0;
+            lastCompletions = completed;
+            String sno = completed[no];
+            
+            // these two lines obey the user's input
+            //toSetIn = Character.toString(ch);
+            //toSetIn = toSetIn.concat(sno.substring(cWord.length()));
+            // BUT we obey the completion
+            toSetIn = sno.substring(cWord.length() - 1);
+        	if (logger.isLoggable(Level.FINEST)) {
+        		logger.finest("toSetIn: >" + toSetIn + "<");
+        	}
+        	
+            StringBuffer alltext = new StringBuffer(comp.getText());
+            int cp = comp.getCaretPosition();
+            alltext.insert(cp, toSetIn);
+            comp.setText(alltext.toString());
+            comp.setCaretPosition(cp);
+            comp.select(cp + 1, cp + 1 + sno.length() - cWord.length());
+            e.consume();
+            lastCaretPosition = comp.getCaretPosition();
+            char ch = e.getKeyChar();
+            logger.finest("Appending >" + ch + "<");
+            if (cWord.length()<=1) {
+            	lastBeginning = Character.toString(ch);
+            } else {
+            	lastBeginning = cWord.substring(0, cWord.length()-1).concat(Character.toString(ch));
+            }
+            return;
+        }
+
+    }
+
+    public void keyTyped(KeyEvent e) {
+    	logger.finest("key typed event caught");
+        char ch = e.getKeyChar();
+    	if (ch == '\n')
+    		// this case is handled at keyPressed(e)
+    		return;
+    	
+        
+        if ((e.getModifiers() | KeyEvent.SHIFT_MASK) == KeyEvent.SHIFT_MASK) {
+        	// plain key or SHIFT + key is pressed, no handling of CTRL+key,  META+key, ...
+        if (Character.isLetter(ch) || Character.isDigit(ch) || (Character.isWhitespace(ch) && completer.isSingleUnitField())) {
+            JTextComponent comp = (JTextComponent) e.getSource();
+
+            if (logger.isLoggable(Level.FINEST)) {
+            	if (toSetIn == null)
+            		logger.finest("toSetIn: NULL");            	
+            	else
+            		logger.finest("toSetIn: >" + toSetIn + "<");
+        	}
+            
+        	// The case-insensitive system is a bit tricky here
+        	// If keyword is "TODO" and user types "tO", then this is treated as "continue" as the "O" matches the "O"
+        	// If keyword is "TODO" and user types "To", then this is treated as "discont" as the "o" does NOT match the "O".
+
+            if ((toSetIn != null) && (toSetIn.length() > 1) &&
+                    (ch == toSetIn.charAt(1))) {
+                // User continues on the word that was suggested.
+        		logger.finest("cont");
+            	
+                toSetIn = toSetIn.substring(1);
+                if (toSetIn.length() > 0) {
+                    int cp = comp.getCaretPosition();
+                    //comp.setCaretPosition(cp+1-toSetIn.);
+                    //System.out.println(cp-toSetIn.length()+" - "+cp);
+                    comp.select(cp + 1 - toSetIn.length(), cp);
+                    lastBeginning = lastBeginning + ch;
+
+                    e.consume();
+                    lastCaretPosition = comp.getCaretPosition();
+
+                    //System.out.println("Added char: '"+toSetIn+"'");
+                    //System.out.println("LastBeginning: '"+lastBeginning+"'");
+
+                    lastCompletions = findCompletions(lastBeginning, comp);
+                    lastShownCompletion = 0;
+                    for (int i = 0; i < lastCompletions.length; i++) {
+                        String lastCompletion = lastCompletions[i];
+                        //System.out.println("Completion["+i+"] = "+lastCompletion);
+                        if (lastCompletion.endsWith(toSetIn)) {
+                            lastShownCompletion = i;
+                            break;
+                        }
+
+                    }
+                    //System.out.println("Index now: "+lastShownCompletion);
+                    if (toSetIn.length() < 2) {
+                    	// User typed the last character of the autocompleted word
+                    	// We have to replace the automcompletion word by the typed word.
+                    	// This helps if the user presses "space" after the completion
+                    	// "space" indicates that the user does NOT want the autocompletion,
+                    	// but the typed word
+                        String text = comp.getText();
+                        comp.setText(text.substring(0, lastCaretPosition - lastBeginning.length())
+                                + lastBeginning
+                                + text.substring(lastCaretPosition));
+                        // there is no selected text, therefore we are not updating the selection
+                    	toSetIn = null;
+                    }
+                    return;
+                }
+            }
+
+            if ((toSetIn != null) && ((toSetIn.length() <= 1) ||
+                    (ch != toSetIn.charAt(1)))) {
+                // User discontinues the word that was suggested.
+                lastBeginning = lastBeginning + ch;
+            	if (logger.isLoggable(Level.FINEST)) {
+            		logger.finest("discont");
+            		logger.finest("toSetIn: >" + toSetIn + "<");
+            		logger.finest("lastBeginning: >" + lastBeginning +"<");
+            	}
+                String[] completed = findCompletions(lastBeginning, comp);
+                if ((completed != null) && (completed.length > 0)) {
+                    lastShownCompletion = 0;
+                    lastCompletions = completed;
+                    String sno = completed[0];
+                    // toSetIn = string used for autocompletion last time
+                    // this string has to be removed
+                    // lastCaretPosition is the position of the caret after toSetIn.
+                    int lastLen = toSetIn.length() - 1;
+                    toSetIn = sno.substring(lastBeginning.length() - 1);
+                    String text = comp.getText();
+                    //Util.pr(""+lastLen);
+                    //we do not use toSetIn as we want to obey the casing of "sno"
+                    comp.setText(text.substring(0, lastCaretPosition - lastLen - lastBeginning.length()+1)
+                            + sno
+                            + text.substring(lastCaretPosition));
+                    int startSelect = lastCaretPosition + 1 - lastLen;
+                    int endSelect =  lastCaretPosition + toSetIn.length() - lastLen;
+                    comp.select(startSelect, endSelect);
+
+                    lastCaretPosition = comp.getCaretPosition();
+                    e.consume();
+                    return;
+                } else {
+                	setUnmodifiedTypedLetters(comp, true, false);
+                	e.consume();
+                    toSetIn = null;
+                    return;
+                }
+            }
+
+    		logger.finest("case else");
+
+            comp.replaceSelection("");
+
+            StringBuffer currentword = getCurrentWord(comp);
+            if (currentword == null)
+                currentword = new StringBuffer();
+            
+            // only "real characters" end up here
+            assert(!Character.isISOControl(ch));
+            currentword.append(ch);
+            startCompletion(currentword, e);
+            return;
+        } else {
+            if (Character.isWhitespace(ch) ) {
+            	assert(!completer.isSingleUnitField());
+        		logger.finest("whitespace && !singleUnitField");
+            	// start a new search if end-of-field is reached
+
+            	// replace displayed letters with typed letters
+            	setUnmodifiedTypedLetters((JTextComponent) e.getSource(), false, true);
+            	resetAutoCompletion();
+                return;
+            }
+            
+        	logger.finest("No letter/digit/whitespace or CHAR_UNDEFINED");
+        	// replace displayed letters with typed letters 
+        	setUnmodifiedTypedLetters((JTextComponent) e.getSource(), false, !Character.isISOControl(ch));
+        	resetAutoCompletion();
+        	return;
+        }
+        }
+        resetAutoCompletion();
+    }
+
+    /**
+     * Resets the auto completion data in a way that no leftovers are there
+     */
+    private void resetAutoCompletion() {
+    	logger.finest("Resetting autocompletion");
+        toSetIn = null;
+        lastBeginning = null;
+    }
+
+	protected String[] findCompletions(String beginning, JTextComponent comp) {
+        return completer.complete(beginning);
+    }
+
+    protected StringBuffer getCurrentWord(JTextComponent comp) {
+        StringBuffer res = new StringBuffer();
+        String upToCaret;
+
+        try {
+            upToCaret = comp.getText(0, comp.getCaretPosition());
+            // We now have the text from the start of the field up to the caret position.
+            // In most fields, we are only interested in the currently edited word, so we
+            // seek from the caret backward to the closest space:
+            if (!completer.isSingleUnitField()) {
+                if ((comp.getCaretPosition() < comp.getText().length())
+                        && Character.isWhitespace(comp.getText().charAt(comp.getCaretPosition()))) {
+                    // caret is in the middle of the text AND current character is a whitespace
+                	// that means: a new word is started and there is no current word
+                    return null;
+                }
+            	
+                int piv = upToCaret.length() - 1;
+                while ((piv >= 0) && !Character.isWhitespace(upToCaret.charAt(piv))) {
+                    piv--;
+                }
+                // priv points to whitespace char or priv is -1
+                // copy everything from the next char up to the end of "upToCaret" 
+                res.append(upToCaret.substring(piv+1));
+            } else {
+	            // For fields such as "journal" it is more reasonable to try to complete on the entire
+	            // text field content, so we skip the searching and keep the entire part up to the caret:
+	            res.append(upToCaret);
+            }
+            //Util.pr("AutoCompListener: "+res.toString());
+        } catch (BadLocationException ex) {
+        }
+
+        return res;
+    }
+
+    final static int ANY_NAME = 0, FIRST_NAME = 1, LAST_NAME = 2;
+    protected int findNamePositionStatus(JTextComponent comp) {
+        String upToCaret;
+        try {
+            upToCaret = comp.getText(0, comp.getCaretPosition());
+            // Clip off evertyhing up to and including the last " and " before:
+            upToCaret = upToCaret.substring(upToCaret.lastIndexOf(" and ")+1);
+            int commaIndex = upToCaret.indexOf(',');
+            if (commaIndex < 0)
+                return ANY_NAME;
+            else
+                return FIRST_NAME;
+            
+        } catch (BadLocationException ex) {
+            return ANY_NAME;
+        }
+
+    }
+
+    public void focusGained(FocusEvent event) {
+        if (nextFocusListener != null)
+            nextFocusListener.focusGained(event);
+    }
+
+    public void focusLost(FocusEvent event) {
+        if (toSetIn != null) {
+            JTextComponent comp = (JTextComponent)event.getSource();
+            clearCurrentSuggestion(comp);
+        }
+        if (nextFocusListener != null)
+            nextFocusListener.focusLost(event);
+    }
+
+    public void clearCurrentSuggestion(JTextComponent comp) {
+         if (toSetIn != null) {
+            int selStart = comp.getSelectionStart();
+            String text = comp.getText();
+            comp.setText(text.substring(0, selStart) + text.substring(comp.getSelectionEnd()));
+            comp.setCaretPosition(selStart);
+            lastCompletions = null;
+            lastShownCompletion = 0;
+            lastCaretPosition = -1;
+            toSetIn = null;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/BibtexKeyPatternDialog.java b/src/java/net/sf/jabref/gui/BibtexKeyPatternDialog.java
index 0310bd1..199be88 100644
--- a/src/java/net/sf/jabref/gui/BibtexKeyPatternDialog.java
+++ b/src/java/net/sf/jabref/gui/BibtexKeyPatternDialog.java
@@ -1,117 +1,117 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-package net.sf.jabref.gui;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.WindowEvent;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.ActionMap;
-import javax.swing.BorderFactory;
-import javax.swing.InputMap;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JPanel;
-import javax.swing.JRootPane;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.Util;
-import net.sf.jabref.labelPattern.LabelPattern;
-import net.sf.jabref.labelPattern.LabelPatternPanel;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-public class BibtexKeyPatternDialog extends JDialog {
-	private MetaData metaData;
-	private BasePanel panel;
-	private LabelPatternPanel labelPatternPanel;
-
-	public BibtexKeyPatternDialog(JabRefFrame parent, BasePanel panel) {
-		super(parent, Globals.lang("Bibtex key patterns"), true);
-        this.labelPatternPanel= new LabelPatternPanel(parent.helpDiag);
-		setPanel(panel);
-		init();
-	}
-
-	/**
-	 * Used for updating an existing Dialog
-	 * 
-	 * @param panel the panel to read the data from
-	 */
-	public void setPanel(BasePanel panel) {
-		this.panel = panel;
-		this.metaData = panel.metaData();
-        LabelPattern keypatterns = metaData.getLabelPattern();
-        labelPatternPanel.setValues(keypatterns);
-	}
-
-    private final void init() {
-		getContentPane().setLayout(new BorderLayout());
-		getContentPane().add(labelPatternPanel, BorderLayout.CENTER);
-
-		JButton ok = new JButton(Globals.lang("Ok"));
-        JButton cancel = new JButton(); // label of "cancel" is set later as the label is overwritten by assigning an action to the button
-		
-		JPanel lower = new JPanel();
-		lower.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
-		ButtonBarBuilder bb = new ButtonBarBuilder(lower);
-		bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-		bb.addGlue();
-		
-		getContentPane().add(lower, BorderLayout.SOUTH);
-		
-		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
-		getContentPane().setPreferredSize(new Dimension(500, 600));
-		pack();
-
-		ok.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-			    metaData.setLabelPattern(labelPatternPanel.getLabelPattern());
-			    panel.markNonUndoableBaseChanged();
-				dispose();
-			}
-		});
-
-		final JDialog dialog = this;
-		
-        Action cancelAction = new AbstractAction() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                dialog.dispatchEvent(new WindowEvent(dialog, WindowEvent.WINDOW_CLOSING));
-            }
-        };
-        cancel.setAction(cancelAction);
-        cancel.setText(Globals.lang("Cancel"));
-        
-        Util.bindCloseDialogKeyToCancelAction(this.getRootPane(), cancelAction);
-	}
-
-	public void setVisible(boolean visible) {
-		if (visible)
-			super.setVisible(visible);
-	}
-
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+package net.sf.jabref.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.ActionMap;
+import javax.swing.BorderFactory;
+import javax.swing.InputMap;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import javax.swing.JRootPane;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.Util;
+import net.sf.jabref.labelPattern.LabelPattern;
+import net.sf.jabref.labelPattern.LabelPatternPanel;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+public class BibtexKeyPatternDialog extends JDialog {
+	private MetaData metaData;
+	private BasePanel panel;
+	private LabelPatternPanel labelPatternPanel;
+
+	public BibtexKeyPatternDialog(JabRefFrame parent, BasePanel panel) {
+		super(parent, Globals.lang("Bibtex key patterns"), true);
+        this.labelPatternPanel= new LabelPatternPanel(parent.helpDiag);
+		setPanel(panel);
+		init();
+	}
+
+	/**
+	 * Used for updating an existing Dialog
+	 * 
+	 * @param panel the panel to read the data from
+	 */
+	public void setPanel(BasePanel panel) {
+		this.panel = panel;
+		this.metaData = panel.metaData();
+        LabelPattern keypatterns = metaData.getLabelPattern();
+        labelPatternPanel.setValues(keypatterns);
+	}
+
+    private final void init() {
+		getContentPane().setLayout(new BorderLayout());
+		getContentPane().add(labelPatternPanel, BorderLayout.CENTER);
+
+		JButton ok = new JButton(Globals.lang("Ok"));
+        JButton cancel = new JButton(); // label of "cancel" is set later as the label is overwritten by assigning an action to the button
+		
+		JPanel lower = new JPanel();
+		lower.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+		ButtonBarBuilder bb = new ButtonBarBuilder(lower);
+		bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+		bb.addGlue();
+		
+		getContentPane().add(lower, BorderLayout.SOUTH);
+		
+		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+		getContentPane().setPreferredSize(new Dimension(500, 600));
+		pack();
+
+		ok.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+			    metaData.setLabelPattern(labelPatternPanel.getLabelPattern());
+			    panel.markNonUndoableBaseChanged();
+				dispose();
+			}
+		});
+
+		final JDialog dialog = this;
+		
+        Action cancelAction = new AbstractAction() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                dialog.dispatchEvent(new WindowEvent(dialog, WindowEvent.WINDOW_CLOSING));
+            }
+        };
+        cancel.setAction(cancelAction);
+        cancel.setText(Globals.lang("Cancel"));
+        
+        Util.bindCloseDialogKeyToCancelAction(this.getRootPane(), cancelAction);
+	}
+
+	public void setVisible(boolean visible) {
+		if (visible)
+			super.setVisible(visible);
+	}
+
+}
diff --git a/src/java/net/sf/jabref/gui/CleanUpAction.java b/src/java/net/sf/jabref/gui/CleanUpAction.java
index a3ab1eb..754a7fd 100644
--- a/src/java/net/sf/jabref/gui/CleanUpAction.java
+++ b/src/java/net/sf/jabref/gui/CleanUpAction.java
@@ -1,571 +1,571 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.logging.Logger;
-
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import net.sf.jabref.AbstractWorker;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.CheckBoxMessage;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.ImportSettingsTab;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.Util;
-import net.sf.jabref.external.ExternalFileType;
-import net.sf.jabref.imports.HTMLConverter;
-import net.sf.jabref.imports.CaseKeeper;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableFieldChange;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.CellConstraints;
-import com.jgoodies.forms.layout.FormLayout;
-
-public class CleanUpAction extends AbstractWorker {
-	private Logger logger = Logger.getLogger(CleanUpAction.class.getName());
-
-	public final static String 
-		AKS_AUTO_NAMING_PDFS_AGAIN = "AskAutoNamingPDFsAgain",
-		CLEANUP_DOI = "CleanUpDOI",
-		CLEANUP_MONTH = "CleanUpMonth",
-		CLEANUP_PAGENUMBERS = "CleanUpPageNumbers",
-		CLEANUP_MAKEPATHSRELATIVE = "CleanUpMakePathsRelative",
-		CLEANUP_RENAMEPDF = "CleanUpRenamePDF",
-		CLEANUP_RENAMEPDF_ONLYRELATIVE_PATHS = "CleanUpRenamePDFonlyRelativePaths",
-		CLEANUP_UPGRADE_EXTERNAL_LINKS = "CleanUpUpgradeExternalLinks",
-		CLEANUP_SUPERSCRIPTS = "CleanUpSuperscripts",
-	        CLEANUP_HTML = "CleanUpHTML",
-		CLEANUP_CASE = "CleanUpCase",
-                CLEANUP_LATEX = "CleanUpLaTeX";
-	
-	public static void putDefaults(HashMap<String, Object> defaults) {
-		defaults.put(AKS_AUTO_NAMING_PDFS_AGAIN, Boolean.TRUE);
-		defaults.put(CLEANUP_SUPERSCRIPTS, Boolean.TRUE);
-		defaults.put(CLEANUP_DOI, Boolean.TRUE);
-		defaults.put(CLEANUP_MONTH, Boolean.TRUE);
-		defaults.put(CLEANUP_PAGENUMBERS, Boolean.TRUE);
-		defaults.put(CLEANUP_MAKEPATHSRELATIVE, Boolean.TRUE);
-		defaults.put(CLEANUP_RENAMEPDF, Boolean.TRUE);
-		defaults.put(CLEANUP_RENAMEPDF_ONLYRELATIVE_PATHS, Boolean.FALSE);
-		defaults.put(CLEANUP_UPGRADE_EXTERNAL_LINKS, Boolean.FALSE);
-		defaults.put(CLEANUP_MAKEPATHSRELATIVE, Boolean.TRUE);
-                defaults.put(CLEANUP_HTML, Boolean.TRUE);
-                defaults.put(CLEANUP_CASE, Boolean.TRUE);
-                defaults.put(CLEANUP_LATEX, Boolean.TRUE);
-	}
-	
-	private JCheckBox cleanUpSuperscrips;
-	private JCheckBox cleanUpDOI;
-	private JCheckBox cleanUpMonth;
-	private JCheckBox cleanUpPageNumbers;
-	private JCheckBox cleanUpMakePathsRelative;
-	private JCheckBox cleanUpRenamePDF;
-	private JCheckBox cleanUpRenamePDFonlyRelativePaths;
-	private JCheckBox cleanUpUpgradeExternalLinks;
-	private JCheckBox cleanUpHTML;
-	private JCheckBox cleanUpCase;
-        private JCheckBox cleanUpLaTeX;
-	private JPanel optionsPanel = new JPanel();
-	private BasePanel panel;
-	private JabRefFrame frame;
-	
-	// global variable to count unsucessful Renames
-    int unsuccesfullRenames = 0;
-	
-	public CleanUpAction(BasePanel panel) {
-		this.panel = panel;
-		this.frame = panel.frame();
-		initOptionsPanel();
-	}
-	
-	private void initOptionsPanel() {
-	    cleanUpSuperscrips = new JCheckBox(Globals.lang("Convert 1st, 2nd, ... to real superscripts"));
-		cleanUpDOI = new JCheckBox(Globals.lang("Move DOIs from note and URL field to DOI field and remove http prefix"));
-		cleanUpMonth = new JCheckBox(Globals.lang("Format content of month field to #mon#"));
-		cleanUpPageNumbers = new JCheckBox(Globals.lang("Ensure that page ranges are of the form num1--num2"));
-		cleanUpMakePathsRelative = new JCheckBox(Globals.lang("Make paths of linked files relative (if possible)"));
-		cleanUpRenamePDF = new JCheckBox(Globals.lang("Rename PDFs to given file name format pattern"));
-		cleanUpRenamePDF.addChangeListener(new ChangeListener() {
-			@Override
-			public void stateChanged(ChangeEvent arg0) {
-				cleanUpRenamePDFonlyRelativePaths.setEnabled(cleanUpRenamePDF.isSelected());
-			}
-		});
-		cleanUpRenamePDFonlyRelativePaths = new JCheckBox(Globals.lang("Rename only PDFs having a relative path"));
-		cleanUpUpgradeExternalLinks = new JCheckBox(Globals.lang("Upgrade external PDF/PS links to use the '%0' field.", GUIGlobals.FILE_FIELD));
-		cleanUpHTML = new JCheckBox(Globals.lang("Run HTML converter on title"));
-		cleanUpCase = new JCheckBox(Globals.lang("Run filter on title keeping the case of selected words"));
-		cleanUpLaTeX = new JCheckBox(Globals.lang("Remove unneccessary $, {, and }")); // and move adjacent numbers into equations"));
-		optionsPanel = new JPanel();
-		retrieveSettings();
-
-		FormLayout layout = new FormLayout("left:15dlu,pref:grow", "pref, pref, pref, pref, pref, pref, pref, pref, pref, pref, pref, pref");
-        DefaultFormBuilder builder = new DefaultFormBuilder(layout,	optionsPanel);
-        builder.setDefaultDialogBorder();
-        CellConstraints cc = new CellConstraints();
-        builder.add(cleanUpHTML, cc.xyw(1,1,2));
-        builder.add(cleanUpCase, cc.xyw(1,2,2));
-        builder.add(cleanUpLaTeX, cc.xyw(1,3,2));
-        builder.add(cleanUpSuperscrips, cc.xyw(1,4,2));
-        builder.add(cleanUpDOI, cc.xyw(1,5,2));
-        builder.add(cleanUpMonth, cc.xyw(1,6,2));
-        builder.add(cleanUpPageNumbers, cc.xyw(1,7,2));
-        builder.add(cleanUpUpgradeExternalLinks, cc.xyw(1, 8, 2));
-        builder.add(cleanUpMakePathsRelative, cc.xyw(1,9,2));
-        builder.add(cleanUpRenamePDF, cc.xyw(1,10,2));
-        String currentPattern = Globals.lang("File name format pattern").concat(": ").concat(Globals.prefs.get(ImportSettingsTab.PREF_IMPORT_FILENAMEPATTERN));
-        builder.add(new JLabel(currentPattern), cc.xyw(2,11,1));
-        builder.add(cleanUpRenamePDFonlyRelativePaths, cc.xyw(2,12,1));
-	}
-	
-	private void retrieveSettings() {
-	    cleanUpSuperscrips.setSelected(Globals.prefs.getBoolean(CLEANUP_SUPERSCRIPTS));
-		cleanUpDOI.setSelected(Globals.prefs.getBoolean(CLEANUP_DOI));
-		cleanUpMonth.setSelected(Globals.prefs.getBoolean(CLEANUP_MONTH));
-		cleanUpPageNumbers.setSelected(Globals.prefs.getBoolean(CLEANUP_PAGENUMBERS));
-		cleanUpMakePathsRelative.setSelected(Globals.prefs.getBoolean(CLEANUP_MAKEPATHSRELATIVE));
-		cleanUpRenamePDF.setSelected(Globals.prefs.getBoolean(CLEANUP_RENAMEPDF));
-		cleanUpRenamePDFonlyRelativePaths.setSelected(Globals.prefs.getBoolean(CLEANUP_RENAMEPDF_ONLYRELATIVE_PATHS));
-		cleanUpRenamePDFonlyRelativePaths.setEnabled(cleanUpRenamePDF.isSelected());
-		cleanUpUpgradeExternalLinks.setSelected(Globals.prefs.getBoolean(CLEANUP_UPGRADE_EXTERNAL_LINKS));
-                cleanUpHTML.setSelected(Globals.prefs.getBoolean(CLEANUP_HTML));
-                cleanUpCase.setSelected(Globals.prefs.getBoolean(CLEANUP_CASE));
-                cleanUpLaTeX.setSelected(Globals.prefs.getBoolean(CLEANUP_LATEX));
-	}
-	
-	private void storeSettings() {
-	    Globals.prefs.putBoolean(CLEANUP_SUPERSCRIPTS, cleanUpSuperscrips.isSelected());
-		Globals.prefs.putBoolean(CLEANUP_DOI, cleanUpDOI.isSelected());
-		Globals.prefs.putBoolean(CLEANUP_MONTH, cleanUpMonth.isSelected());
-		Globals.prefs.putBoolean(CLEANUP_PAGENUMBERS, cleanUpPageNumbers.isSelected());
-		Globals.prefs.putBoolean(CLEANUP_MAKEPATHSRELATIVE, cleanUpMakePathsRelative.isSelected());
-		Globals.prefs.putBoolean(CLEANUP_RENAMEPDF, cleanUpRenamePDF.isSelected());
-		Globals.prefs.putBoolean(CLEANUP_RENAMEPDF_ONLYRELATIVE_PATHS, cleanUpRenamePDFonlyRelativePaths.isSelected());
-		Globals.prefs.putBoolean(CLEANUP_UPGRADE_EXTERNAL_LINKS, cleanUpUpgradeExternalLinks.isSelected());
-                Globals.prefs.putBoolean(CLEANUP_HTML, cleanUpHTML.isSelected());
-                Globals.prefs.putBoolean(CLEANUP_CASE, cleanUpCase.isSelected());
-                Globals.prefs.putBoolean(CLEANUP_LATEX, cleanUpLaTeX.isSelected());
-	}
-
-	private int showCleanUpDialog() {
-    	String dialogTitle = Globals.lang("Cleanup entries");
-
-    	Object[] messages = {Globals.lang("What would you like to clean up?"), optionsPanel}; 
-        return JOptionPane.showConfirmDialog(frame, messages, dialogTitle,
-            JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
-	}
-	
-	
-    boolean cancelled;
-	int modifiedEntriesCount;
-    int numSelected;
-    
-    public void init() {
-    	cancelled = false;
-    	modifiedEntriesCount = 0;
-    	int numSelected = panel.getSelectedEntries().length;
-        if (numSelected == 0) { // None selected. Inform the user to select entries first.
-            JOptionPane.showMessageDialog(frame, Globals.lang("First select entries to clean up."), 
-                                          Globals.lang("Cleanup entry"), JOptionPane.INFORMATION_MESSAGE);
-            cancelled = true;
-            return;
-        }
-        frame.block();
-        panel.output(Globals.lang("Doing a cleanup for %0 entries...", Integer.toString(numSelected)));
-    }
-    
-    public void run() {
-    	if (cancelled) return;
-    	int choice = showCleanUpDialog();
-    	if (choice != JOptionPane.OK_OPTION) {
-    		cancelled = true;
-    		return;
-    	}
-    	storeSettings();
-    	boolean
-    	    choiceCleanUpSuperscripts = cleanUpSuperscrips.isSelected(),
-    		choiceCleanUpDOI = cleanUpDOI.isSelected(),
-    		choiceCleanUpMonth = cleanUpMonth.isSelected(),
-    		choiceCleanUpPageNumbers = cleanUpPageNumbers.isSelected(),
-    		choiceCleanUpUpgradeExternalLinks = cleanUpUpgradeExternalLinks.isSelected(),
-    		choiceMakePathsRelative = cleanUpMakePathsRelative.isSelected(),
-		choiceRenamePDF = cleanUpRenamePDF.isSelected(),
-	        choiceConvertHTML = cleanUpHTML.isSelected(),
-                choiceConvertCase = cleanUpCase.isSelected(),
-                choiceConvertLaTeX = cleanUpLaTeX.isSelected();
-    	
-    	if (choiceRenamePDF && Globals.prefs.getBoolean(AKS_AUTO_NAMING_PDFS_AGAIN)) { 
-	        CheckBoxMessage cbm = new CheckBoxMessage(Globals.lang("Auto-generating PDF-Names does not support undo. Continue?"),
-        		Globals.lang("Disable this confirmation dialog"), false);
-	        int answer = JOptionPane.showConfirmDialog(frame, cbm, Globals.lang("Autogenerate PDF Names"),
-                JOptionPane.YES_NO_OPTION);
-	        if (cbm.isSelected())
-	        	Globals.prefs.putBoolean(AKS_AUTO_NAMING_PDFS_AGAIN, false);
-	        if (answer == JOptionPane.NO_OPTION) {
-	            cancelled = true;
-	            return;
-	        }
-	    }
-    	
-    	// first upgrade the external links
-    	// we have to use it separately as the Utils function generates a separate Named Compound
-    	if (choiceCleanUpUpgradeExternalLinks) {
-    		NamedCompound ce = Util.upgradePdfPsToFile(Arrays.asList(panel.getSelectedEntries()), new String[] {"pdf", "ps"});
-    		if (ce.hasEdits()) {
-	    		panel.undoManager.addEdit(ce);
-	    		panel.markBaseChanged();
-	    		panel.updateEntryEditorIfShowing();
-	    		panel.output(Globals.lang("Upgraded links."));
-    		}
-    	}
-
-    	for (BibtexEntry entry : panel.getSelectedEntries()) {
-    		// undo granularity is on entry level
-        	NamedCompound ce = new NamedCompound(Globals.lang("Cleanup entry"));
-        	
-        	if (choiceCleanUpSuperscripts) doCleanUpSuperscripts(entry, ce);
-        	if (choiceCleanUpDOI) doCleanUpDOI(entry, ce);
-        	if (choiceCleanUpMonth) doCleanUpMonth(entry, ce);
-        	if (choiceCleanUpPageNumbers) doCleanUpPageNumbers(entry, ce);
-        	fixWrongFileEntries(entry, ce);
-        	if (choiceMakePathsRelative) doMakePathsRelative(entry, ce);
-        	if (choiceRenamePDF) doRenamePDFs(entry, ce);
-		if (choiceConvertHTML) doConvertHTML(entry, ce);
-		if (choiceConvertCase) doConvertCase(entry, ce);
-        	if (choiceConvertLaTeX) doConvertLaTeX(entry, ce);
-        	
-            ce.end();
-            if (ce.hasEdits()) {
-            	modifiedEntriesCount++;
-            	panel.undoManager.addEdit(ce);
-            }
-    	}
-    }
-
-	public void update() {
-        if (cancelled) {
-            frame.unblock();
-            return;
-        }
-	    if(unsuccesfullRenames>0) { //Rename failed for at least one entry
-	        JOptionPane.showMessageDialog(frame, Globals.lang("File rename failed for")+" "
-	        		+ unsuccesfullRenames 
-	        		+ " "+Globals.lang("entries") + ".",
-	                Globals.lang("Autogenerate PDF Names"), JOptionPane.INFORMATION_MESSAGE);
-	    }
-    	if (modifiedEntriesCount>0) {
-        	panel.updateEntryEditorIfShowing();
-        	panel.markBaseChanged() ;
-    	}
-    	String message;
-    	switch (modifiedEntriesCount) {
-    	case 0:
-    		message = Globals.lang("No entry needed a clean up");
-    		break;
-    	case 1:
-    		message = Globals.lang("One entry needed a clean up");
-    		break;
-    	default:
-    		message = Globals.lang("%0 entries needed a clean up", Integer.toString(modifiedEntriesCount));
-    		break;
-    	}
-        panel.output(message);
-        frame.unblock();
-    }
-	
-	/**
-	 * Converts the text in 1st, 2nd, ... to real superscripts by wrapping in \textsuperscript{st}, ...
-	 */
-    private void doCleanUpSuperscripts(BibtexEntry entry, NamedCompound ce) {
-        final String field = "booktitle";
-        String oldValue = entry.getField(field);
-        if (oldValue == null) return;
-        String newValue = oldValue.replaceAll(" (\\d+)(st|nd|rd|th) ", " $1\\\\textsuperscript{$2} ");
-        if (!oldValue.equals(newValue)) {
-            entry.setField(field, newValue);
-            ce.addEdit(new UndoableFieldChange(entry, field, oldValue, newValue));
-        }
-    }
-
-    /**
-     * Removes the http://... for each DOI
-     * Moves DOIs from URL and NOTE filed to DOI field
-     * @param ce 
-     */
-    private void doCleanUpDOI(BibtexEntry bes, NamedCompound ce) {
-        
-        // fields to check
-    	String[] fields = {"note", "url", "ee"};
-
-        // First check if the DOI Field is empty
-        if (bes.getField("doi") != null) {
-        	String doiFieldValue = bes.getField("doi");
-        	if (Util.checkForDOIwithHTTPprefix(doiFieldValue)) {
-        		String newValue = Util.getDOI(doiFieldValue);
-        		ce.addEdit(new UndoableFieldChange(bes, "doi", doiFieldValue, newValue));
-        		bes.setField("doi", newValue);
-        	};
-        	if (Util.checkForPlainDOI(doiFieldValue)) {
-        		// DOI field seems to contain DOI
-        		// cleanup note, url, ee field
-        		// we do NOT copy values to the DOI field as the DOI field contains a DOI!
-            	for (String field: fields) {
-            		if (Util.checkForPlainDOI(bes.getField(field))){
-            			Util.removeDOIfromBibtexEntryField(bes, field, ce);
-            		}
-            	}
-        	}
-        } else {
-        	// As the DOI field is empty we now check if note, url, or ee field contains a DOI
-        	
-        	for (String field: fields) {
-        		if (Util.checkForPlainDOI(bes.getField(field))){
-        			// update DOI
-                	String oldValue = bes.getField("doi");
-                	String newValue = Util.getDOI(bes.getField(field));                                	
-        			ce.addEdit(new UndoableFieldChange(bes, "doi", oldValue, newValue));
-        			bes.setField("doi", newValue);
-        			
-        			Util.removeDOIfromBibtexEntryField(bes, field, ce);
-        		}
-            } 
-        }
-    }
-    
-	private void doCleanUpMonth(BibtexEntry entry, NamedCompound ce) {
-		// implementation based on patch 3470076 by Mathias Walter
-		String oldValue = entry.getField("month");
-		if (oldValue == null) {
-                    return;
-                }
-		String newValue = oldValue;
-		try {
-                    int month = Integer.parseInt(newValue);
-                    newValue = new StringBuffer("#").append(Globals.MONTHS[month - 1]).append('#').toString();
-                } catch (NumberFormatException e) {
-                    // Much more liberal matching covering most known abbreviations etc.
-                    String testString = newValue.substring(0, 3).toLowerCase();
-                    if (Globals.MONTH_STRINGS.containsKey(testString)) {
-                        newValue = new StringBuffer("#").append(testString).append('#').toString();
-        	}
-    	}
-    	if (!oldValue.equals(newValue)) {
-    		entry.setField("month", newValue);
-    		ce.addEdit(new UndoableFieldChange(entry, "month", oldValue, newValue));
-    	}
-	}
-	
-	private void doCleanUpPageNumbers(BibtexEntry entry, NamedCompound ce) {
-		String oldValue = entry.getField("pages");		
-		if (oldValue == null) return;
-		String newValue = oldValue.replaceAll(" *(\\d+) *- *(\\d+) *", "$1--$2");
-		if (!oldValue.equals(newValue)) {
-			entry.setField("pages", newValue);
-			ce.addEdit(new UndoableFieldChange(entry, "pages", oldValue, newValue));
-		}
-	}
-	
-	private void fixWrongFileEntries(BibtexEntry entry, NamedCompound ce) {
-		String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
-		if (oldValue == null) return;
-		FileListTableModel flModel = new FileListTableModel();
-		flModel.setContent(oldValue);
-		if (flModel.getRowCount() == 0) {
-			return;
-		}
-		boolean changed = false;
-		for (int i = 0; i<flModel.getRowCount(); i++) {
-			FileListEntry flEntry = flModel.getEntry(i);
-			String link = flEntry.getLink();
-			String description = flEntry.getDescription();
-	    	if (link.equals("") && (!description.equals(""))) {
-	    		// link and description seem to be switched, quickly fix that
-	    		flEntry.setLink(flEntry.getDescription());
-	    		flEntry.setDescription("");
-	    		changed = true;
-	    	}
-		}
-		if (changed) {
-	        String newValue = flModel.getStringRepresentation();
-			assert(!oldValue.equals(newValue));
-			entry.setField(GUIGlobals.FILE_FIELD, newValue);
-			ce.addEdit(new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD, oldValue, newValue));
-		}
-    }
-
-	private void doMakePathsRelative(BibtexEntry entry, NamedCompound ce) {
-		String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
-		if (oldValue == null) return;
-		FileListTableModel flModel = new FileListTableModel();
-		flModel.setContent(oldValue);
-		if (flModel.getRowCount() == 0) {
-			return;
-		}
-		boolean changed = false;
-		for (int i = 0; i<flModel.getRowCount(); i++) {
-			FileListEntry flEntry = flModel.getEntry(i);
-			String oldFileName = flEntry.getLink();
-			String newFileName = Util.shortenFileName(new File(oldFileName), panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD)).toString();
-			if (!oldFileName.equals(newFileName)) {
-				flEntry.setLink(newFileName);
-				changed = true;
-			}
-		}
-		if (changed) {
-	        String newValue = flModel.getStringRepresentation();
-			assert(!oldValue.equals(newValue));
-			entry.setField(GUIGlobals.FILE_FIELD, newValue);
-			ce.addEdit(new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD, oldValue, newValue));
-		}
-	}
-
-    private void doRenamePDFs(BibtexEntry entry, NamedCompound ce) {
-		//Extract the path
-		String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
-		if (oldValue == null) return;
-		FileListTableModel flModel = new FileListTableModel();
-		flModel.setContent(oldValue);
-		if (flModel.getRowCount() == 0) {
-			return;
-		}
-		boolean changed = false;
-		
-		for (int i=0; i<flModel.getRowCount(); i++) {
-			String realOldFilename = flModel.getEntry(i).getLink();
-			
-			if (cleanUpRenamePDFonlyRelativePaths.isSelected() && (new File(realOldFilename).isAbsolute()))
-				continue;
-	
-			String newFilename = Util.getLinkedFileName(panel.database(), entry);
-			//String oldFilename = bes.getField(GUIGlobals.FILE_FIELD); // would have to be stored for undoing purposes
-			
-			//Add extension to newFilename
-			newFilename = newFilename + "." + flModel.getEntry(i).getType().getExtension();
-			
-			//get new Filename with path
-		    //Create new Path based on old Path and new filename
-		    File expandedOldFile = Util.expandFilename(realOldFilename, panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD));
-		    if (expandedOldFile.getParent() == null) {
-		    	// something went wrong. Just skipt his entry
-		    	continue;
-		    }
-		    String newPath = expandedOldFile.getParent().concat(System.getProperty("file.separator")).concat(newFilename);
-		    
-		    if (new File(newPath).exists())
-		    	// we do not overwrite files
-		    	// TODO: we could check here if the newPath file is linked with the current entry. And if not, we could add a link
-		    	continue;
-		    
-			//do rename
-			boolean renameSuccesfull = Util.renameFile(expandedOldFile.toString(), newPath);
-			
-			if (renameSuccesfull) {
-				changed = true;
-				
-				//Change the path for this entry
-				String description = flModel.getEntry(i).getDescription();
-				ExternalFileType type = flModel.getEntry(i).getType();
-				flModel.removeEntry(i);
-				
-				// we cannot use "newPath" to generate a FileListEntry as newPath is absolute, but we want to keep relative paths whenever possible
-				File parent = (new File(realOldFilename)).getParentFile();
-				String newFileEntryFileName;
-				if (parent == null) {
-					newFileEntryFileName = newFilename;
-				} else {
-					newFileEntryFileName = parent.toString().concat(System.getProperty("file.separator")).concat(newFilename);
-				}
-		        flModel.addEntry(i, new FileListEntry(description, newFileEntryFileName, type));
-			}
-			else {
-				unsuccesfullRenames++;
-			}
-		}
-		
-		if (changed) {
-	        String newValue = flModel.getStringRepresentation();
-			assert(!oldValue.equals(newValue));
-			entry.setField(GUIGlobals.FILE_FIELD, newValue);
-			//we put an undo of the field content here
-			//the file is not being renamed back, which leads to inconsostencies
-			//if we put a null undo object here, the change by "doMakePathsRelative" would overwrite the field value nevertheless.
-			ce.addEdit(new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD, oldValue, newValue));
-		}
-	}
-
-	/**
-	 * Converts HTML code to LaTeX code
-	 */
-    private void doConvertHTML(BibtexEntry entry, NamedCompound ce) {
-        final String field = "title";
-        String oldValue = entry.getField(field);
-        if (oldValue == null) {
-            return;
-        }
-        final HTMLConverter htmlConverter = new HTMLConverter();
-        String newValue = htmlConverter.format(oldValue);
-        if (!oldValue.equals(newValue)) {
-            entry.setField(field, newValue);
-            ce.addEdit(new UndoableFieldChange(entry, field, oldValue, newValue));
-        }
-    }
-
-	/**
-	 * Adds curly brackets {} around keywords
-	 */
-    private void doConvertCase(BibtexEntry entry, NamedCompound ce) {
-        final String field = "title";
-        String oldValue = entry.getField(field);
-        if (oldValue == null) {
-            return;
-        }
-        final CaseKeeper caseKeeper = new CaseKeeper();
-        String newValue = caseKeeper.format(oldValue);
-        if (!oldValue.equals(newValue)) {
-            entry.setField(field, newValue);
-            ce.addEdit(new UndoableFieldChange(entry, field, oldValue, newValue));
-        }
-    }
-
-    private void doConvertLaTeX(BibtexEntry entry, NamedCompound ce) {
-        final String field = "title";
-        String oldValue = entry.getField(field);
-        if (oldValue == null) {
-            return;
-        }
-        String newValue = oldValue;
-        // Remove redundant $, {, and }
-        newValue = newValue.replace("$$","").replaceAll("(?<!\\\\[\\p{Alpha}]{0,100}\\{[^\\}]{0,100})\\}([-/ ]?)\\{","$1");
-        if (!oldValue.equals(newValue)) {
-            entry.setField(field, newValue);
-            ce.addEdit(new UndoableFieldChange(entry, field, oldValue, newValue));
-        }
-    }
-
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.logging.Logger;
+
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.sf.jabref.AbstractWorker;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.CheckBoxMessage;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.ImportSettingsTab;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.Util;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.imports.HTMLConverter;
+import net.sf.jabref.imports.CaseKeeper;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableFieldChange;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+public class CleanUpAction extends AbstractWorker {
+	private Logger logger = Logger.getLogger(CleanUpAction.class.getName());
+
+	public final static String 
+		AKS_AUTO_NAMING_PDFS_AGAIN = "AskAutoNamingPDFsAgain",
+		CLEANUP_DOI = "CleanUpDOI",
+		CLEANUP_MONTH = "CleanUpMonth",
+		CLEANUP_PAGENUMBERS = "CleanUpPageNumbers",
+		CLEANUP_MAKEPATHSRELATIVE = "CleanUpMakePathsRelative",
+		CLEANUP_RENAMEPDF = "CleanUpRenamePDF",
+		CLEANUP_RENAMEPDF_ONLYRELATIVE_PATHS = "CleanUpRenamePDFonlyRelativePaths",
+		CLEANUP_UPGRADE_EXTERNAL_LINKS = "CleanUpUpgradeExternalLinks",
+		CLEANUP_SUPERSCRIPTS = "CleanUpSuperscripts",
+	        CLEANUP_HTML = "CleanUpHTML",
+		CLEANUP_CASE = "CleanUpCase",
+                CLEANUP_LATEX = "CleanUpLaTeX";
+	
+	public static void putDefaults(HashMap<String, Object> defaults) {
+		defaults.put(AKS_AUTO_NAMING_PDFS_AGAIN, Boolean.TRUE);
+		defaults.put(CLEANUP_SUPERSCRIPTS, Boolean.TRUE);
+		defaults.put(CLEANUP_DOI, Boolean.TRUE);
+		defaults.put(CLEANUP_MONTH, Boolean.TRUE);
+		defaults.put(CLEANUP_PAGENUMBERS, Boolean.TRUE);
+		defaults.put(CLEANUP_MAKEPATHSRELATIVE, Boolean.TRUE);
+		defaults.put(CLEANUP_RENAMEPDF, Boolean.TRUE);
+		defaults.put(CLEANUP_RENAMEPDF_ONLYRELATIVE_PATHS, Boolean.FALSE);
+		defaults.put(CLEANUP_UPGRADE_EXTERNAL_LINKS, Boolean.FALSE);
+		defaults.put(CLEANUP_MAKEPATHSRELATIVE, Boolean.TRUE);
+                defaults.put(CLEANUP_HTML, Boolean.TRUE);
+                defaults.put(CLEANUP_CASE, Boolean.TRUE);
+                defaults.put(CLEANUP_LATEX, Boolean.TRUE);
+	}
+	
+	private JCheckBox cleanUpSuperscrips;
+	private JCheckBox cleanUpDOI;
+	private JCheckBox cleanUpMonth;
+	private JCheckBox cleanUpPageNumbers;
+	private JCheckBox cleanUpMakePathsRelative;
+	private JCheckBox cleanUpRenamePDF;
+	private JCheckBox cleanUpRenamePDFonlyRelativePaths;
+	private JCheckBox cleanUpUpgradeExternalLinks;
+	private JCheckBox cleanUpHTML;
+	private JCheckBox cleanUpCase;
+        private JCheckBox cleanUpLaTeX;
+	private JPanel optionsPanel = new JPanel();
+	private BasePanel panel;
+	private JabRefFrame frame;
+	
+	// global variable to count unsucessful Renames
+    int unsuccesfullRenames = 0;
+	
+	public CleanUpAction(BasePanel panel) {
+		this.panel = panel;
+		this.frame = panel.frame();
+		initOptionsPanel();
+	}
+	
+	private void initOptionsPanel() {
+	    cleanUpSuperscrips = new JCheckBox(Globals.lang("Convert 1st, 2nd, ... to real superscripts"));
+		cleanUpDOI = new JCheckBox(Globals.lang("Move DOIs from note and URL field to DOI field and remove http prefix"));
+		cleanUpMonth = new JCheckBox(Globals.lang("Format content of month field to #mon#"));
+		cleanUpPageNumbers = new JCheckBox(Globals.lang("Ensure that page ranges are of the form num1--num2"));
+		cleanUpMakePathsRelative = new JCheckBox(Globals.lang("Make paths of linked files relative (if possible)"));
+		cleanUpRenamePDF = new JCheckBox(Globals.lang("Rename PDFs to given file name format pattern"));
+		cleanUpRenamePDF.addChangeListener(new ChangeListener() {
+			@Override
+			public void stateChanged(ChangeEvent arg0) {
+				cleanUpRenamePDFonlyRelativePaths.setEnabled(cleanUpRenamePDF.isSelected());
+			}
+		});
+		cleanUpRenamePDFonlyRelativePaths = new JCheckBox(Globals.lang("Rename only PDFs having a relative path"));
+		cleanUpUpgradeExternalLinks = new JCheckBox(Globals.lang("Upgrade external PDF/PS links to use the '%0' field.", GUIGlobals.FILE_FIELD));
+		cleanUpHTML = new JCheckBox(Globals.lang("Run HTML converter on title"));
+		cleanUpCase = new JCheckBox(Globals.lang("Run filter on title keeping the case of selected words"));
+		cleanUpLaTeX = new JCheckBox(Globals.lang("Remove unneccessary $, {, and }")); // and move adjacent numbers into equations"));
+		optionsPanel = new JPanel();
+		retrieveSettings();
+
+		FormLayout layout = new FormLayout("left:15dlu,pref:grow", "pref, pref, pref, pref, pref, pref, pref, pref, pref, pref, pref, pref");
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout,	optionsPanel);
+        builder.setDefaultDialogBorder();
+        CellConstraints cc = new CellConstraints();
+        builder.add(cleanUpHTML, cc.xyw(1,1,2));
+        builder.add(cleanUpCase, cc.xyw(1,2,2));
+        builder.add(cleanUpLaTeX, cc.xyw(1,3,2));
+        builder.add(cleanUpSuperscrips, cc.xyw(1,4,2));
+        builder.add(cleanUpDOI, cc.xyw(1,5,2));
+        builder.add(cleanUpMonth, cc.xyw(1,6,2));
+        builder.add(cleanUpPageNumbers, cc.xyw(1,7,2));
+        builder.add(cleanUpUpgradeExternalLinks, cc.xyw(1, 8, 2));
+        builder.add(cleanUpMakePathsRelative, cc.xyw(1,9,2));
+        builder.add(cleanUpRenamePDF, cc.xyw(1,10,2));
+        String currentPattern = Globals.lang("File name format pattern").concat(": ").concat(Globals.prefs.get(ImportSettingsTab.PREF_IMPORT_FILENAMEPATTERN));
+        builder.add(new JLabel(currentPattern), cc.xyw(2,11,1));
+        builder.add(cleanUpRenamePDFonlyRelativePaths, cc.xyw(2,12,1));
+	}
+	
+	private void retrieveSettings() {
+	    cleanUpSuperscrips.setSelected(Globals.prefs.getBoolean(CLEANUP_SUPERSCRIPTS));
+		cleanUpDOI.setSelected(Globals.prefs.getBoolean(CLEANUP_DOI));
+		cleanUpMonth.setSelected(Globals.prefs.getBoolean(CLEANUP_MONTH));
+		cleanUpPageNumbers.setSelected(Globals.prefs.getBoolean(CLEANUP_PAGENUMBERS));
+		cleanUpMakePathsRelative.setSelected(Globals.prefs.getBoolean(CLEANUP_MAKEPATHSRELATIVE));
+		cleanUpRenamePDF.setSelected(Globals.prefs.getBoolean(CLEANUP_RENAMEPDF));
+		cleanUpRenamePDFonlyRelativePaths.setSelected(Globals.prefs.getBoolean(CLEANUP_RENAMEPDF_ONLYRELATIVE_PATHS));
+		cleanUpRenamePDFonlyRelativePaths.setEnabled(cleanUpRenamePDF.isSelected());
+		cleanUpUpgradeExternalLinks.setSelected(Globals.prefs.getBoolean(CLEANUP_UPGRADE_EXTERNAL_LINKS));
+                cleanUpHTML.setSelected(Globals.prefs.getBoolean(CLEANUP_HTML));
+                cleanUpCase.setSelected(Globals.prefs.getBoolean(CLEANUP_CASE));
+                cleanUpLaTeX.setSelected(Globals.prefs.getBoolean(CLEANUP_LATEX));
+	}
+	
+	private void storeSettings() {
+	    Globals.prefs.putBoolean(CLEANUP_SUPERSCRIPTS, cleanUpSuperscrips.isSelected());
+		Globals.prefs.putBoolean(CLEANUP_DOI, cleanUpDOI.isSelected());
+		Globals.prefs.putBoolean(CLEANUP_MONTH, cleanUpMonth.isSelected());
+		Globals.prefs.putBoolean(CLEANUP_PAGENUMBERS, cleanUpPageNumbers.isSelected());
+		Globals.prefs.putBoolean(CLEANUP_MAKEPATHSRELATIVE, cleanUpMakePathsRelative.isSelected());
+		Globals.prefs.putBoolean(CLEANUP_RENAMEPDF, cleanUpRenamePDF.isSelected());
+		Globals.prefs.putBoolean(CLEANUP_RENAMEPDF_ONLYRELATIVE_PATHS, cleanUpRenamePDFonlyRelativePaths.isSelected());
+		Globals.prefs.putBoolean(CLEANUP_UPGRADE_EXTERNAL_LINKS, cleanUpUpgradeExternalLinks.isSelected());
+                Globals.prefs.putBoolean(CLEANUP_HTML, cleanUpHTML.isSelected());
+                Globals.prefs.putBoolean(CLEANUP_CASE, cleanUpCase.isSelected());
+                Globals.prefs.putBoolean(CLEANUP_LATEX, cleanUpLaTeX.isSelected());
+	}
+
+	private int showCleanUpDialog() {
+    	String dialogTitle = Globals.lang("Cleanup entries");
+
+    	Object[] messages = {Globals.lang("What would you like to clean up?"), optionsPanel}; 
+        return JOptionPane.showConfirmDialog(frame, messages, dialogTitle,
+            JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
+	}
+	
+	
+    boolean cancelled;
+	int modifiedEntriesCount;
+    int numSelected;
+    
+    public void init() {
+    	cancelled = false;
+    	modifiedEntriesCount = 0;
+    	int numSelected = panel.getSelectedEntries().length;
+        if (numSelected == 0) { // None selected. Inform the user to select entries first.
+            JOptionPane.showMessageDialog(frame, Globals.lang("First select entries to clean up."), 
+                                          Globals.lang("Cleanup entry"), JOptionPane.INFORMATION_MESSAGE);
+            cancelled = true;
+            return;
+        }
+        frame.block();
+        panel.output(Globals.lang("Doing a cleanup for %0 entries...", Integer.toString(numSelected)));
+    }
+    
+    public void run() {
+    	if (cancelled) return;
+    	int choice = showCleanUpDialog();
+    	if (choice != JOptionPane.OK_OPTION) {
+    		cancelled = true;
+    		return;
+    	}
+    	storeSettings();
+    	boolean
+    	    choiceCleanUpSuperscripts = cleanUpSuperscrips.isSelected(),
+    		choiceCleanUpDOI = cleanUpDOI.isSelected(),
+    		choiceCleanUpMonth = cleanUpMonth.isSelected(),
+    		choiceCleanUpPageNumbers = cleanUpPageNumbers.isSelected(),
+    		choiceCleanUpUpgradeExternalLinks = cleanUpUpgradeExternalLinks.isSelected(),
+    		choiceMakePathsRelative = cleanUpMakePathsRelative.isSelected(),
+		choiceRenamePDF = cleanUpRenamePDF.isSelected(),
+	        choiceConvertHTML = cleanUpHTML.isSelected(),
+                choiceConvertCase = cleanUpCase.isSelected(),
+                choiceConvertLaTeX = cleanUpLaTeX.isSelected();
+    	
+    	if (choiceRenamePDF && Globals.prefs.getBoolean(AKS_AUTO_NAMING_PDFS_AGAIN)) { 
+	        CheckBoxMessage cbm = new CheckBoxMessage(Globals.lang("Auto-generating PDF-Names does not support undo. Continue?"),
+        		Globals.lang("Disable this confirmation dialog"), false);
+	        int answer = JOptionPane.showConfirmDialog(frame, cbm, Globals.lang("Autogenerate PDF Names"),
+                JOptionPane.YES_NO_OPTION);
+	        if (cbm.isSelected())
+	        	Globals.prefs.putBoolean(AKS_AUTO_NAMING_PDFS_AGAIN, false);
+	        if (answer == JOptionPane.NO_OPTION) {
+	            cancelled = true;
+	            return;
+	        }
+	    }
+    	
+    	// first upgrade the external links
+    	// we have to use it separately as the Utils function generates a separate Named Compound
+    	if (choiceCleanUpUpgradeExternalLinks) {
+    		NamedCompound ce = Util.upgradePdfPsToFile(Arrays.asList(panel.getSelectedEntries()), new String[] {"pdf", "ps"});
+    		if (ce.hasEdits()) {
+	    		panel.undoManager.addEdit(ce);
+	    		panel.markBaseChanged();
+	    		panel.updateEntryEditorIfShowing();
+	    		panel.output(Globals.lang("Upgraded links."));
+    		}
+    	}
+
+    	for (BibtexEntry entry : panel.getSelectedEntries()) {
+    		// undo granularity is on entry level
+        	NamedCompound ce = new NamedCompound(Globals.lang("Cleanup entry"));
+        	
+        	if (choiceCleanUpSuperscripts) doCleanUpSuperscripts(entry, ce);
+        	if (choiceCleanUpDOI) doCleanUpDOI(entry, ce);
+        	if (choiceCleanUpMonth) doCleanUpMonth(entry, ce);
+        	if (choiceCleanUpPageNumbers) doCleanUpPageNumbers(entry, ce);
+        	fixWrongFileEntries(entry, ce);
+        	if (choiceMakePathsRelative) doMakePathsRelative(entry, ce);
+        	if (choiceRenamePDF) doRenamePDFs(entry, ce);
+		if (choiceConvertHTML) doConvertHTML(entry, ce);
+		if (choiceConvertCase) doConvertCase(entry, ce);
+        	if (choiceConvertLaTeX) doConvertLaTeX(entry, ce);
+        	
+            ce.end();
+            if (ce.hasEdits()) {
+            	modifiedEntriesCount++;
+            	panel.undoManager.addEdit(ce);
+            }
+    	}
+    }
+
+	public void update() {
+        if (cancelled) {
+            frame.unblock();
+            return;
+        }
+	    if(unsuccesfullRenames>0) { //Rename failed for at least one entry
+	        JOptionPane.showMessageDialog(frame, Globals.lang("File rename failed for")+" "
+	        		+ unsuccesfullRenames 
+	        		+ " "+Globals.lang("entries") + ".",
+	                Globals.lang("Autogenerate PDF Names"), JOptionPane.INFORMATION_MESSAGE);
+	    }
+    	if (modifiedEntriesCount>0) {
+        	panel.updateEntryEditorIfShowing();
+        	panel.markBaseChanged() ;
+    	}
+    	String message;
+    	switch (modifiedEntriesCount) {
+    	case 0:
+    		message = Globals.lang("No entry needed a clean up");
+    		break;
+    	case 1:
+    		message = Globals.lang("One entry needed a clean up");
+    		break;
+    	default:
+    		message = Globals.lang("%0 entries needed a clean up", Integer.toString(modifiedEntriesCount));
+    		break;
+    	}
+        panel.output(message);
+        frame.unblock();
+    }
+	
+	/**
+	 * Converts the text in 1st, 2nd, ... to real superscripts by wrapping in \textsuperscript{st}, ...
+	 */
+    private void doCleanUpSuperscripts(BibtexEntry entry, NamedCompound ce) {
+        final String field = "booktitle";
+        String oldValue = entry.getField(field);
+        if (oldValue == null) return;
+        String newValue = oldValue.replaceAll(" (\\d+)(st|nd|rd|th) ", " $1\\\\textsuperscript{$2} ");
+        if (!oldValue.equals(newValue)) {
+            entry.setField(field, newValue);
+            ce.addEdit(new UndoableFieldChange(entry, field, oldValue, newValue));
+        }
+    }
+
+    /**
+     * Removes the http://... for each DOI
+     * Moves DOIs from URL and NOTE filed to DOI field
+     * @param ce 
+     */
+    private void doCleanUpDOI(BibtexEntry bes, NamedCompound ce) {
+        
+        // fields to check
+    	String[] fields = {"note", "url", "ee"};
+
+        // First check if the DOI Field is empty
+        if (bes.getField("doi") != null) {
+        	String doiFieldValue = bes.getField("doi");
+        	if (Util.checkForDOIwithHTTPprefix(doiFieldValue)) {
+        		String newValue = Util.getDOI(doiFieldValue);
+        		ce.addEdit(new UndoableFieldChange(bes, "doi", doiFieldValue, newValue));
+        		bes.setField("doi", newValue);
+        	};
+        	if (Util.checkForPlainDOI(doiFieldValue)) {
+        		// DOI field seems to contain DOI
+        		// cleanup note, url, ee field
+        		// we do NOT copy values to the DOI field as the DOI field contains a DOI!
+            	for (String field: fields) {
+            		if (Util.checkForPlainDOI(bes.getField(field))){
+            			Util.removeDOIfromBibtexEntryField(bes, field, ce);
+            		}
+            	}
+        	}
+        } else {
+        	// As the DOI field is empty we now check if note, url, or ee field contains a DOI
+        	
+        	for (String field: fields) {
+        		if (Util.checkForPlainDOI(bes.getField(field))){
+        			// update DOI
+                	String oldValue = bes.getField("doi");
+                	String newValue = Util.getDOI(bes.getField(field));                                	
+        			ce.addEdit(new UndoableFieldChange(bes, "doi", oldValue, newValue));
+        			bes.setField("doi", newValue);
+        			
+        			Util.removeDOIfromBibtexEntryField(bes, field, ce);
+        		}
+            } 
+        }
+    }
+    
+	private void doCleanUpMonth(BibtexEntry entry, NamedCompound ce) {
+		// implementation based on patch 3470076 by Mathias Walter
+		String oldValue = entry.getField("month");
+		if (oldValue == null) {
+                    return;
+                }
+		String newValue = oldValue;
+		try {
+                    int month = Integer.parseInt(newValue);
+                    newValue = new StringBuffer("#").append(Globals.MONTHS[month - 1]).append('#').toString();
+                } catch (NumberFormatException e) {
+                    // Much more liberal matching covering most known abbreviations etc.
+                    String testString = newValue.substring(0, 3).toLowerCase();
+                    if (Globals.MONTH_STRINGS.containsKey(testString)) {
+                        newValue = new StringBuffer("#").append(testString).append('#').toString();
+        	}
+    	}
+    	if (!oldValue.equals(newValue)) {
+    		entry.setField("month", newValue);
+    		ce.addEdit(new UndoableFieldChange(entry, "month", oldValue, newValue));
+    	}
+	}
+	
+	private void doCleanUpPageNumbers(BibtexEntry entry, NamedCompound ce) {
+		String oldValue = entry.getField("pages");		
+		if (oldValue == null) return;
+		String newValue = oldValue.replaceAll(" *(\\d+) *- *(\\d+) *", "$1--$2");
+		if (!oldValue.equals(newValue)) {
+			entry.setField("pages", newValue);
+			ce.addEdit(new UndoableFieldChange(entry, "pages", oldValue, newValue));
+		}
+	}
+	
+	private void fixWrongFileEntries(BibtexEntry entry, NamedCompound ce) {
+		String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
+		if (oldValue == null) return;
+		FileListTableModel flModel = new FileListTableModel();
+		flModel.setContent(oldValue);
+		if (flModel.getRowCount() == 0) {
+			return;
+		}
+		boolean changed = false;
+		for (int i = 0; i<flModel.getRowCount(); i++) {
+			FileListEntry flEntry = flModel.getEntry(i);
+			String link = flEntry.getLink();
+			String description = flEntry.getDescription();
+	    	if (link.equals("") && (!description.equals(""))) {
+	    		// link and description seem to be switched, quickly fix that
+	    		flEntry.setLink(flEntry.getDescription());
+	    		flEntry.setDescription("");
+	    		changed = true;
+	    	}
+		}
+		if (changed) {
+	        String newValue = flModel.getStringRepresentation();
+			assert(!oldValue.equals(newValue));
+			entry.setField(GUIGlobals.FILE_FIELD, newValue);
+			ce.addEdit(new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD, oldValue, newValue));
+		}
+    }
+
+	private void doMakePathsRelative(BibtexEntry entry, NamedCompound ce) {
+		String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
+		if (oldValue == null) return;
+		FileListTableModel flModel = new FileListTableModel();
+		flModel.setContent(oldValue);
+		if (flModel.getRowCount() == 0) {
+			return;
+		}
+		boolean changed = false;
+		for (int i = 0; i<flModel.getRowCount(); i++) {
+			FileListEntry flEntry = flModel.getEntry(i);
+			String oldFileName = flEntry.getLink();
+			String newFileName = Util.shortenFileName(new File(oldFileName), panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD)).toString();
+			if (!oldFileName.equals(newFileName)) {
+				flEntry.setLink(newFileName);
+				changed = true;
+			}
+		}
+		if (changed) {
+	        String newValue = flModel.getStringRepresentation();
+			assert(!oldValue.equals(newValue));
+			entry.setField(GUIGlobals.FILE_FIELD, newValue);
+			ce.addEdit(new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD, oldValue, newValue));
+		}
+	}
+
+    private void doRenamePDFs(BibtexEntry entry, NamedCompound ce) {
+		//Extract the path
+		String oldValue = entry.getField(GUIGlobals.FILE_FIELD);
+		if (oldValue == null) return;
+		FileListTableModel flModel = new FileListTableModel();
+		flModel.setContent(oldValue);
+		if (flModel.getRowCount() == 0) {
+			return;
+		}
+		boolean changed = false;
+		
+		for (int i=0; i<flModel.getRowCount(); i++) {
+			String realOldFilename = flModel.getEntry(i).getLink();
+			
+			if (cleanUpRenamePDFonlyRelativePaths.isSelected() && (new File(realOldFilename).isAbsolute()))
+				continue;
+	
+			String newFilename = Util.getLinkedFileName(panel.database(), entry);
+			//String oldFilename = bes.getField(GUIGlobals.FILE_FIELD); // would have to be stored for undoing purposes
+			
+			//Add extension to newFilename
+			newFilename = newFilename + "." + flModel.getEntry(i).getType().getExtension();
+			
+			//get new Filename with path
+		    //Create new Path based on old Path and new filename
+		    File expandedOldFile = Util.expandFilename(realOldFilename, panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD));
+		    if (expandedOldFile.getParent() == null) {
+		    	// something went wrong. Just skipt his entry
+		    	continue;
+		    }
+		    String newPath = expandedOldFile.getParent().concat(System.getProperty("file.separator")).concat(newFilename);
+		    
+		    if (new File(newPath).exists())
+		    	// we do not overwrite files
+		    	// TODO: we could check here if the newPath file is linked with the current entry. And if not, we could add a link
+		    	continue;
+		    
+			//do rename
+			boolean renameSuccesfull = Util.renameFile(expandedOldFile.toString(), newPath);
+			
+			if (renameSuccesfull) {
+				changed = true;
+				
+				//Change the path for this entry
+				String description = flModel.getEntry(i).getDescription();
+				ExternalFileType type = flModel.getEntry(i).getType();
+				flModel.removeEntry(i);
+				
+				// we cannot use "newPath" to generate a FileListEntry as newPath is absolute, but we want to keep relative paths whenever possible
+				File parent = (new File(realOldFilename)).getParentFile();
+				String newFileEntryFileName;
+				if (parent == null) {
+					newFileEntryFileName = newFilename;
+				} else {
+					newFileEntryFileName = parent.toString().concat(System.getProperty("file.separator")).concat(newFilename);
+				}
+		        flModel.addEntry(i, new FileListEntry(description, newFileEntryFileName, type));
+			}
+			else {
+				unsuccesfullRenames++;
+			}
+		}
+		
+		if (changed) {
+	        String newValue = flModel.getStringRepresentation();
+			assert(!oldValue.equals(newValue));
+			entry.setField(GUIGlobals.FILE_FIELD, newValue);
+			//we put an undo of the field content here
+			//the file is not being renamed back, which leads to inconsostencies
+			//if we put a null undo object here, the change by "doMakePathsRelative" would overwrite the field value nevertheless.
+			ce.addEdit(new UndoableFieldChange(entry, GUIGlobals.FILE_FIELD, oldValue, newValue));
+		}
+	}
+
+	/**
+	 * Converts HTML code to LaTeX code
+	 */
+    private void doConvertHTML(BibtexEntry entry, NamedCompound ce) {
+        final String field = "title";
+        String oldValue = entry.getField(field);
+        if (oldValue == null) {
+            return;
+        }
+        final HTMLConverter htmlConverter = new HTMLConverter();
+        String newValue = htmlConverter.format(oldValue);
+        if (!oldValue.equals(newValue)) {
+            entry.setField(field, newValue);
+            ce.addEdit(new UndoableFieldChange(entry, field, oldValue, newValue));
+        }
+    }
+
+	/**
+	 * Adds curly brackets {} around keywords
+	 */
+    private void doConvertCase(BibtexEntry entry, NamedCompound ce) {
+        final String field = "title";
+        String oldValue = entry.getField(field);
+        if (oldValue == null) {
+            return;
+        }
+        final CaseKeeper caseKeeper = new CaseKeeper();
+        String newValue = caseKeeper.format(oldValue);
+        if (!oldValue.equals(newValue)) {
+            entry.setField(field, newValue);
+            ce.addEdit(new UndoableFieldChange(entry, field, oldValue, newValue));
+        }
+    }
+
+    private void doConvertLaTeX(BibtexEntry entry, NamedCompound ce) {
+        final String field = "title";
+        String oldValue = entry.getField(field);
+        if (oldValue == null) {
+            return;
+        }
+        String newValue = oldValue;
+        // Remove redundant $, {, and }
+        newValue = newValue.replace("$$","").replaceAll("(?<!\\\\[\\p{Alpha}]{0,100}\\{[^\\}]{0,100})\\}([-/ ]?)\\{","$1");
+        if (!oldValue.equals(newValue)) {
+            entry.setField(field, newValue);
+            ce.addEdit(new UndoableFieldChange(entry, field, oldValue, newValue));
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/gui/ColorSetupPanel.java b/src/java/net/sf/jabref/gui/ColorSetupPanel.java
index 296d05c..0edb963 100644
--- a/src/java/net/sf/jabref/gui/ColorSetupPanel.java
+++ b/src/java/net/sf/jabref/gui/ColorSetupPanel.java
@@ -1,169 +1,169 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import com.jgoodies.forms.layout.FormLayout;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import net.sf.jabref.Globals;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Oct 10, 2005
- * Time: 4:29:35 PM
- * To change this template use File | Settings | File Templates.
- */
-public class ColorSetupPanel extends JPanel {
-
-    private final static int ICON_WIDTH=30, ICON_HEIGHT=20;
-    private ArrayList<ColorButton> buttons = new ArrayList<ColorButton>();
-
-    public ColorSetupPanel() {
-
-        FormLayout layout = new FormLayout
-                ("30dlu, 4dlu, fill:pref, 4dlu, fill:pref, 8dlu, 30dlu, 4dlu, fill:pref, 4dlu, fill:pref", "");
-        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-
-        buttons.add(new ColorButton("tableText", Globals.lang("Table text color")));
-        buttons.add(new ColorButton("markedEntryBackground0", Globals.lang("Marking color %0", "1")));
-        buttons.add(new ColorButton("tableBackground", Globals.lang("Table background color")));
-        buttons.add(new ColorButton("markedEntryBackground1", Globals.lang("Marking color %0", "2")));
-        buttons.add(new ColorButton("tableReqFieldBackground", Globals.lang("Background color for required fields")));
-        buttons.add(new ColorButton("markedEntryBackground2", Globals.lang("Marking color %0", "3")));
-        buttons.add(new ColorButton("tableOptFieldBackground", Globals.lang("Background color for optional fields")));
-        buttons.add(new ColorButton("markedEntryBackground3", Globals.lang("Marking color %0", "4")));
-        buttons.add(new ColorButton("incompleteEntryBackground", Globals.lang("Color for marking incomplete entries")));
-        buttons.add(new ColorButton("markedEntryBackground4", Globals.lang("Marking color %0", "5")));
-        buttons.add(new ColorButton("gridColor", Globals.lang("Table grid color")));
-        buttons.add(new ColorButton("markedEntryBackground5", Globals.lang("Import marking color")));
-
-        buttons.add(new ColorButton("fieldEditorTextColor", Globals.lang("Entry editor font color")));
-        buttons.add(new ColorButton("validFieldBackgroundColor", Globals.lang("Entry editor background color")));
-        buttons.add(new ColorButton("activeFieldEditorBackgroundColor", Globals.lang("Entry editor active background color")));
-        buttons.add(new ColorButton("invalidFieldBackgroundColor", Globals.lang("Entry editor invalid field color")));
-
-        for (Iterator<ColorButton> i=buttons.iterator(); i.hasNext();) {
-            ColorButton but = i.next();
-            builder.append(but);
-            builder.append(but.getDefaultButton());
-            builder.append(but.getName());
-            but.addActionListener(new ColorButtonListener(but));
-
-        }
-
-        setLayout(new BorderLayout());
-        add(builder.getPanel(), BorderLayout.CENTER);
-
-        setValues();
-
-
-    }
-
-    public void setValues() {
-        for (Iterator<ColorButton> i=buttons.iterator(); i.hasNext();) {
-            ColorButton but = i.next();
-            but.setColor(Globals.prefs.getColor(but.getKey()));
-        }
-
-    }
-
-    public void storeSettings() {
-        for (Iterator<ColorButton> i=buttons.iterator(); i.hasNext();) {
-            ColorButton but = i.next();
-            Globals.prefs.putColor(but.getKey(), but.getColor());
-        }
-    }
-
-    class ColorButtonListener implements ActionListener {
-        private ColorButton button;
-
-        public ColorButtonListener(ColorButton button) {
-            this.button = button;
-        }
-        public void actionPerformed(ActionEvent e) {
-            Color chosen = JColorChooser.showDialog(null, button.getName(), button.getColor());
-            if (chosen != null)
-                button.setColor(chosen);
-        }
-    }
-
-    /**
-     * A button to display the chosen color, and hold key information about a color setting.
-     * Includes a method to produce a Default button for this setting.
-     */
-    class ColorButton extends JButton implements Icon {
-        private Color color = Color.white;
-        private String key, name;
-
-        public ColorButton(String key, String name) {
-            setIcon(this);
-            this.key = key;
-            this.name = name;
-            setBorder(BorderFactory.createRaisedBevelBorder());
-        }
-
-        public JButton getDefaultButton() {
-            JButton toDefault = new JButton(Globals.lang("Default"));
-            toDefault.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    setColor(Globals.prefs.getDefaultColor(key));
-                    repaint();
-                }
-            });
-            return toDefault;
-        }
-
-
-        public String getKey() {
-            return key;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public Color getColor() {
-            return color;
-        }
-
-        public void setColor(Color color) {
-            this.color = color;
-        }
-
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            Rectangle r = g.getClipBounds();
-            g.setColor(color);
-            g.fillRect(r.x, r.y, r.width, r.height);
-        }
-
-        public int getIconWidth() {
-            return ICON_WIDTH;
-        }
-
-        public int getIconHeight() {
-            return ICON_HEIGHT;
-        }
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import net.sf.jabref.Globals;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Oct 10, 2005
+ * Time: 4:29:35 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class ColorSetupPanel extends JPanel {
+
+    private final static int ICON_WIDTH=30, ICON_HEIGHT=20;
+    private ArrayList<ColorButton> buttons = new ArrayList<ColorButton>();
+
+    public ColorSetupPanel() {
+
+        FormLayout layout = new FormLayout
+                ("30dlu, 4dlu, fill:pref, 4dlu, fill:pref, 8dlu, 30dlu, 4dlu, fill:pref, 4dlu, fill:pref", "");
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+
+        buttons.add(new ColorButton("tableText", Globals.lang("Table text color")));
+        buttons.add(new ColorButton("markedEntryBackground0", Globals.lang("Marking color %0", "1")));
+        buttons.add(new ColorButton("tableBackground", Globals.lang("Table background color")));
+        buttons.add(new ColorButton("markedEntryBackground1", Globals.lang("Marking color %0", "2")));
+        buttons.add(new ColorButton("tableReqFieldBackground", Globals.lang("Background color for required fields")));
+        buttons.add(new ColorButton("markedEntryBackground2", Globals.lang("Marking color %0", "3")));
+        buttons.add(new ColorButton("tableOptFieldBackground", Globals.lang("Background color for optional fields")));
+        buttons.add(new ColorButton("markedEntryBackground3", Globals.lang("Marking color %0", "4")));
+        buttons.add(new ColorButton("incompleteEntryBackground", Globals.lang("Color for marking incomplete entries")));
+        buttons.add(new ColorButton("markedEntryBackground4", Globals.lang("Marking color %0", "5")));
+        buttons.add(new ColorButton("gridColor", Globals.lang("Table grid color")));
+        buttons.add(new ColorButton("markedEntryBackground5", Globals.lang("Import marking color")));
+
+        buttons.add(new ColorButton("fieldEditorTextColor", Globals.lang("Entry editor font color")));
+        buttons.add(new ColorButton("validFieldBackgroundColor", Globals.lang("Entry editor background color")));
+        buttons.add(new ColorButton("activeFieldEditorBackgroundColor", Globals.lang("Entry editor active background color")));
+        buttons.add(new ColorButton("invalidFieldBackgroundColor", Globals.lang("Entry editor invalid field color")));
+
+        for (Iterator<ColorButton> i=buttons.iterator(); i.hasNext();) {
+            ColorButton but = i.next();
+            builder.append(but);
+            builder.append(but.getDefaultButton());
+            builder.append(but.getName());
+            but.addActionListener(new ColorButtonListener(but));
+
+        }
+
+        setLayout(new BorderLayout());
+        add(builder.getPanel(), BorderLayout.CENTER);
+
+        setValues();
+
+
+    }
+
+    public void setValues() {
+        for (Iterator<ColorButton> i=buttons.iterator(); i.hasNext();) {
+            ColorButton but = i.next();
+            but.setColor(Globals.prefs.getColor(but.getKey()));
+        }
+
+    }
+
+    public void storeSettings() {
+        for (Iterator<ColorButton> i=buttons.iterator(); i.hasNext();) {
+            ColorButton but = i.next();
+            Globals.prefs.putColor(but.getKey(), but.getColor());
+        }
+    }
+
+    class ColorButtonListener implements ActionListener {
+        private ColorButton button;
+
+        public ColorButtonListener(ColorButton button) {
+            this.button = button;
+        }
+        public void actionPerformed(ActionEvent e) {
+            Color chosen = JColorChooser.showDialog(null, button.getName(), button.getColor());
+            if (chosen != null)
+                button.setColor(chosen);
+        }
+    }
+
+    /**
+     * A button to display the chosen color, and hold key information about a color setting.
+     * Includes a method to produce a Default button for this setting.
+     */
+    class ColorButton extends JButton implements Icon {
+        private Color color = Color.white;
+        private String key, name;
+
+        public ColorButton(String key, String name) {
+            setIcon(this);
+            this.key = key;
+            this.name = name;
+            setBorder(BorderFactory.createRaisedBevelBorder());
+        }
+
+        public JButton getDefaultButton() {
+            JButton toDefault = new JButton(Globals.lang("Default"));
+            toDefault.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    setColor(Globals.prefs.getDefaultColor(key));
+                    repaint();
+                }
+            });
+            return toDefault;
+        }
+
+
+        public String getKey() {
+            return key;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public Color getColor() {
+            return color;
+        }
+
+        public void setColor(Color color) {
+            this.color = color;
+        }
+
+        public void paintIcon(Component c, Graphics g, int x, int y) {
+            Rectangle r = g.getClipBounds();
+            g.setColor(color);
+            g.fillRect(r.x, r.y, r.width, r.height);
+        }
+
+        public int getIconWidth() {
+            return ICON_WIDTH;
+        }
+
+        public int getIconHeight() {
+            return ICON_HEIGHT;
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java b/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
index 16de626..9a6bb01 100644
--- a/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
+++ b/src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
@@ -1,261 +1,261 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Vector;
-
-import javax.swing.*;
-
-import net.sf.jabref.*;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Oct 31, 2005
- * Time: 10:46:03 PM
- * To change this template use File | Settings | File Templates.
- */
-public class DatabasePropertiesDialog extends JDialog {
-
-    MetaData metaData;
-    BasePanel panel = null;
-    JComboBox encoding;
-    JButton ok, cancel;
-    JTextField fileDir = new JTextField(40),
-	fileDirIndv = new JTextField(40),
-	pdfDir = new JTextField(40),
-	psDir = new JTextField(40);
-    String oldFileVal="", oldFileIndvVal="", oldPdfVal="", oldPsVal=""; // Remember old values to see if they are changed.
-    JCheckBox protect = new JCheckBox(Globals.lang("Refuse to save the database before external changes have been reviewed."));
-    boolean oldProtectVal = false;
-
-    public DatabasePropertiesDialog(JFrame parent) {
-        super(parent, Globals.lang("Database properties"), true);
-        encoding = new JComboBox(Globals.ENCODINGS);
-        ok = new JButton(Globals.lang("Ok"));
-        cancel = new JButton(Globals.lang("Cancel"));
-        init(parent);
-    }
-
-    public void setPanel(BasePanel panel) {
-        this.panel = panel;
-        this.metaData = panel.metaData();
-    }
-
-    public final void init(JFrame parent) {
-
-        JButton browseFile = new JButton(Globals.lang("Browse"));
-        JButton browseFileIndv = new JButton(Globals.lang("Browse"));
-        JButton browsePdf = new JButton(Globals.lang("Browse"));
-        JButton browsePs = new JButton(Globals.lang("Browse"));
-        browseFile.addActionListener(new BrowseAction(parent, fileDir, true));
-        browseFileIndv.addActionListener(new BrowseAction(parent, fileDirIndv, true));
-        browsePdf.addActionListener(new BrowseAction(parent, pdfDir, true));
-        browsePs.addActionListener(new BrowseAction(parent, psDir, true));
-
-        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("left:pref, 4dlu, left:pref, 4dlu, fill:pref", ""));
-        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-
-        builder.append(Globals.lang("Database encoding"));
-        builder.append(encoding);
-        builder.nextLine();
-        builder.appendSeparator(Globals.lang("Override default file directories"));
-        builder.nextLine();
-        builder.append(Globals.lang("General file directory"));
-        builder.append(fileDir);
-        builder.append(browseFile);
-        builder.nextLine();
-        builder.append(Globals.lang("User-specific file directory"));
-        builder.append(fileDirIndv);
-        builder.append(browseFileIndv);
-        builder.nextLine();
-        builder.append(Globals.lang("PDF directory"));
-        builder.append(pdfDir);
-        builder.append(browsePdf);
-        builder.nextLine();
-        builder.append(Globals.lang("PS directory"));
-        builder.append(psDir);
-        builder.append(browsePs);
-        builder.nextLine();
-        builder.appendSeparator(Globals.lang("Database protection"));
-        builder.nextLine();
-        builder.append(protect,3);
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-
-        getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
-        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-        pack();
-
-        AbstractAction closeAction = new AbstractAction() {
-          public void actionPerformed(ActionEvent e) {
-            dispose();
-          }
-        };
-        ActionMap am = builder.getPanel().getActionMap();
-        InputMap im = builder.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", closeAction);
-
-        ok.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                storeSettings();
-                dispose();
-            }
-        });
-
-        cancel.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                dispose();
-            }
-        });
-
-    }
-
-    public void setVisible(boolean visible) {
-        if (visible)
-            setValues();
-        super.setVisible(visible);
-    }
-
-    public void setValues() {
-        encoding.setSelectedItem(panel.getEncoding());
-
-        Vector<String> fileD = metaData.getData(Globals.prefs.get("userFileDir"));
-        if (fileD == null)
-            fileDir.setText("");
-        else {
-            // Better be a little careful about how many entries the Vector has:
-            if (fileD.size() >= 1)
-                fileDir.setText((fileD.get(0)).trim());
-        }
-
-        Vector<String> fileDI = metaData.getData(Globals.prefs.get("userFileDirIndividual"));
-        if (fileDI == null)
-            fileDirIndv.setText("");
-        else {
-            // Better be a little careful about how many entries the Vector has:
-            if (fileDI.size() >= 1)
-                fileDirIndv.setText((fileDI.get(0)).trim());
-        }
-
-        Vector<String> pdfD = metaData.getData("pdfDirectory");
-        if (pdfD == null)
-            pdfDir.setText("");
-        else {
-            // Better be a little careful about how many entries the Vector has:
-            if (pdfD.size() >= 1)
-                pdfDir.setText((pdfD.get(0)).trim());
-        }
-
-        Vector<String> psD = metaData.getData("psDirectory");
-        if (psD == null)
-            psDir.setText("");
-        else {
-            // Better be a little careful about how many entries the Vector has:
-            if (psD.size() >= 1)
-                psDir.setText((psD.get(0)).trim());
-        }
-
-        Vector<String> prot = metaData.getData(Globals.PROTECTED_FLAG_META);
-        if (prot == null)
-            protect.setSelected(false);
-        else {
-            if (prot.size() >= 1)
-                protect.setSelected(Boolean.parseBoolean(prot.get(0)));
-        }
-
-        // Store original values to see if they get changed:
-        oldFileVal = fileDir.getText();
-        oldFileIndvVal = fileDir.getText();
-        oldPdfVal = pdfDir.getText();
-        oldPsVal = psDir.getText();
-        oldProtectVal = protect.isSelected();
-    }
-
-    public void storeSettings() {
-        String oldEncoding = panel.getEncoding();
-        String newEncoding = (String)encoding.getSelectedItem();
-        panel.setEncoding(newEncoding);
-
-        Vector<String> dir = new Vector<String>(1);
-        String text = fileDir.getText().trim();
-        if (text.length() > 0) {
-            dir.add(text);
-            metaData.putData(Globals.prefs.get("userFileDir"), dir);
-        }
-        else
-            metaData.remove(Globals.prefs.get("userFileDir"));
-	// Repeat for individual file dir - reuse 'text' and 'dir' vars
-	dir = new Vector<String>(1);
-	text = fileDirIndv.getText().trim();
-        if (text.length() > 0) {
-            dir.add(text);
-            metaData.putData(Globals.prefs.get("userFileDirIndividual"), dir);
-        }
-        else
-            metaData.remove(Globals.prefs.get("userFileDirIndividual"));
-
-        dir = new Vector<String>(1);
-        text = pdfDir.getText().trim();
-        if (text.length() > 0) {
-            dir.add(text);
-            metaData.putData("pdfDirectory", dir);
-        }
-        else
-            metaData.remove("pdfDirectory");
-
-        dir = new Vector<String>(1);
-        text = psDir.getText().trim();
-        if (text.length() > 0) {
-            dir.add(text);
-            metaData.putData("psDirectory", dir);
-        }
-        else
-            metaData.remove("psDirectory");
-
-        if (protect.isSelected()) {
-            dir = new Vector<String>(1);
-            dir.add("true");
-            metaData.putData(Globals.PROTECTED_FLAG_META, dir);
-        }
-        else
-            metaData.remove(Globals.PROTECTED_FLAG_META);
-
-
-        // See if any of the values have been modified:
-        boolean changed = !newEncoding.equals(oldEncoding)
-            || !oldFileVal.equals(fileDir.getText())
-            || !oldFileIndvVal.equals(fileDirIndv.getText())
-            || !oldPdfVal.equals(pdfDir.getText())
-            || !oldPsVal.equals(psDir.getText())
-            || (oldProtectVal != protect.isSelected());
-        // ... if so, mark base changed. Prevent the Undo button from removing
-        // change marking:
-        if (changed)
-            panel.markNonUndoableBaseChanged();
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Vector;
+
+import javax.swing.*;
+
+import net.sf.jabref.*;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Oct 31, 2005
+ * Time: 10:46:03 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class DatabasePropertiesDialog extends JDialog {
+
+    MetaData metaData;
+    BasePanel panel = null;
+    JComboBox encoding;
+    JButton ok, cancel;
+    JTextField fileDir = new JTextField(40),
+	fileDirIndv = new JTextField(40),
+	pdfDir = new JTextField(40),
+	psDir = new JTextField(40);
+    String oldFileVal="", oldFileIndvVal="", oldPdfVal="", oldPsVal=""; // Remember old values to see if they are changed.
+    JCheckBox protect = new JCheckBox(Globals.lang("Refuse to save the database before external changes have been reviewed."));
+    boolean oldProtectVal = false;
+
+    public DatabasePropertiesDialog(JFrame parent) {
+        super(parent, Globals.lang("Database properties"), true);
+        encoding = new JComboBox(Globals.ENCODINGS);
+        ok = new JButton(Globals.lang("Ok"));
+        cancel = new JButton(Globals.lang("Cancel"));
+        init(parent);
+    }
+
+    public void setPanel(BasePanel panel) {
+        this.panel = panel;
+        this.metaData = panel.metaData();
+    }
+
+    public final void init(JFrame parent) {
+
+        JButton browseFile = new JButton(Globals.lang("Browse"));
+        JButton browseFileIndv = new JButton(Globals.lang("Browse"));
+        JButton browsePdf = new JButton(Globals.lang("Browse"));
+        JButton browsePs = new JButton(Globals.lang("Browse"));
+        browseFile.addActionListener(new BrowseAction(parent, fileDir, true));
+        browseFileIndv.addActionListener(new BrowseAction(parent, fileDirIndv, true));
+        browsePdf.addActionListener(new BrowseAction(parent, pdfDir, true));
+        browsePs.addActionListener(new BrowseAction(parent, psDir, true));
+
+        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("left:pref, 4dlu, left:pref, 4dlu, fill:pref", ""));
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+        builder.append(Globals.lang("Database encoding"));
+        builder.append(encoding);
+        builder.nextLine();
+        builder.appendSeparator(Globals.lang("Override default file directories"));
+        builder.nextLine();
+        builder.append(Globals.lang("General file directory"));
+        builder.append(fileDir);
+        builder.append(browseFile);
+        builder.nextLine();
+        builder.append(Globals.lang("User-specific file directory"));
+        builder.append(fileDirIndv);
+        builder.append(browseFileIndv);
+        builder.nextLine();
+        builder.append(Globals.lang("PDF directory"));
+        builder.append(pdfDir);
+        builder.append(browsePdf);
+        builder.nextLine();
+        builder.append(Globals.lang("PS directory"));
+        builder.append(psDir);
+        builder.append(browsePs);
+        builder.nextLine();
+        builder.appendSeparator(Globals.lang("Database protection"));
+        builder.nextLine();
+        builder.append(protect,3);
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+
+        getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
+        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        pack();
+
+        AbstractAction closeAction = new AbstractAction() {
+          public void actionPerformed(ActionEvent e) {
+            dispose();
+          }
+        };
+        ActionMap am = builder.getPanel().getActionMap();
+        InputMap im = builder.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", closeAction);
+
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                storeSettings();
+                dispose();
+            }
+        });
+
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                dispose();
+            }
+        });
+
+    }
+
+    public void setVisible(boolean visible) {
+        if (visible)
+            setValues();
+        super.setVisible(visible);
+    }
+
+    public void setValues() {
+        encoding.setSelectedItem(panel.getEncoding());
+
+        Vector<String> fileD = metaData.getData(Globals.prefs.get("userFileDir"));
+        if (fileD == null)
+            fileDir.setText("");
+        else {
+            // Better be a little careful about how many entries the Vector has:
+            if (fileD.size() >= 1)
+                fileDir.setText((fileD.get(0)).trim());
+        }
+
+        Vector<String> fileDI = metaData.getData(Globals.prefs.get("userFileDirIndividual"));
+        if (fileDI == null)
+            fileDirIndv.setText("");
+        else {
+            // Better be a little careful about how many entries the Vector has:
+            if (fileDI.size() >= 1)
+                fileDirIndv.setText((fileDI.get(0)).trim());
+        }
+
+        Vector<String> pdfD = metaData.getData("pdfDirectory");
+        if (pdfD == null)
+            pdfDir.setText("");
+        else {
+            // Better be a little careful about how many entries the Vector has:
+            if (pdfD.size() >= 1)
+                pdfDir.setText((pdfD.get(0)).trim());
+        }
+
+        Vector<String> psD = metaData.getData("psDirectory");
+        if (psD == null)
+            psDir.setText("");
+        else {
+            // Better be a little careful about how many entries the Vector has:
+            if (psD.size() >= 1)
+                psDir.setText((psD.get(0)).trim());
+        }
+
+        Vector<String> prot = metaData.getData(Globals.PROTECTED_FLAG_META);
+        if (prot == null)
+            protect.setSelected(false);
+        else {
+            if (prot.size() >= 1)
+                protect.setSelected(Boolean.parseBoolean(prot.get(0)));
+        }
+
+        // Store original values to see if they get changed:
+        oldFileVal = fileDir.getText();
+        oldFileIndvVal = fileDir.getText();
+        oldPdfVal = pdfDir.getText();
+        oldPsVal = psDir.getText();
+        oldProtectVal = protect.isSelected();
+    }
+
+    public void storeSettings() {
+        String oldEncoding = panel.getEncoding();
+        String newEncoding = (String)encoding.getSelectedItem();
+        panel.setEncoding(newEncoding);
+
+        Vector<String> dir = new Vector<String>(1);
+        String text = fileDir.getText().trim();
+        if (text.length() > 0) {
+            dir.add(text);
+            metaData.putData(Globals.prefs.get("userFileDir"), dir);
+        }
+        else
+            metaData.remove(Globals.prefs.get("userFileDir"));
+	// Repeat for individual file dir - reuse 'text' and 'dir' vars
+	dir = new Vector<String>(1);
+	text = fileDirIndv.getText().trim();
+        if (text.length() > 0) {
+            dir.add(text);
+            metaData.putData(Globals.prefs.get("userFileDirIndividual"), dir);
+        }
+        else
+            metaData.remove(Globals.prefs.get("userFileDirIndividual"));
+
+        dir = new Vector<String>(1);
+        text = pdfDir.getText().trim();
+        if (text.length() > 0) {
+            dir.add(text);
+            metaData.putData("pdfDirectory", dir);
+        }
+        else
+            metaData.remove("pdfDirectory");
+
+        dir = new Vector<String>(1);
+        text = psDir.getText().trim();
+        if (text.length() > 0) {
+            dir.add(text);
+            metaData.putData("psDirectory", dir);
+        }
+        else
+            metaData.remove("psDirectory");
+
+        if (protect.isSelected()) {
+            dir = new Vector<String>(1);
+            dir.add("true");
+            metaData.putData(Globals.PROTECTED_FLAG_META, dir);
+        }
+        else
+            metaData.remove(Globals.PROTECTED_FLAG_META);
+
+
+        // See if any of the values have been modified:
+        boolean changed = !newEncoding.equals(oldEncoding)
+            || !oldFileVal.equals(fileDir.getText())
+            || !oldFileIndvVal.equals(fileDirIndv.getText())
+            || !oldPdfVal.equals(pdfDir.getText())
+            || !oldPsVal.equals(psDir.getText())
+            || (oldProtectVal != protect.isSelected());
+        // ... if so, mark base changed. Prevent the Undo button from removing
+        // change marking:
+        if (changed)
+            panel.markNonUndoableBaseChanged();
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/DragDropPane.java b/src/java/net/sf/jabref/gui/DragDropPane.java
index 206826d..ff786ec 100644
--- a/src/java/net/sf/jabref/gui/DragDropPane.java
+++ b/src/java/net/sf/jabref/gui/DragDropPane.java
@@ -1,161 +1,161 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-package net.sf.jabref.gui;
-
-import java.awt.AlphaComposite;
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Toolkit;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseMotionAdapter;
-
-import javax.swing.JPanel;
-import javax.swing.JTabbedPane;
-import javax.swing.SwingUtilities;
-
-import net.sf.jabref.GUIGlobals;
-
-/**
- * Extends the JTabbedPane class to support Drag&Drop of Tabs.
- * 
- * @author kleinms, strassfn
- */
-public class DragDropPane extends JTabbedPane {
-	private boolean draggingState = false; // State var if we are at dragging or not
-	private int indexDraggedTab; // The index of the tab we drag at the moment
-	MarkerPane markerPane; // The glass panel for painting the position marker
-
-	public DragDropPane() {
-		super();
-		indexDraggedTab = -1;
-		markerPane = new MarkerPane();
-		markerPane.setVisible(false);
-
-		// -------------------------------------------
-		// Adding listeners for Drag&Drop Actions
-		// -------------------------------------------
-		addMouseMotionListener(new MouseMotionAdapter() {
-			public void mouseDragged(MouseEvent e) { // Mouse is dragging
-											// Calculates the tab index based on the mouse position
-				int indexActTab = getUI().tabForCoordinate(DragDropPane.this,
-						e.getX(), e.getY());
-				if (!draggingState) { // We are not at tab dragging
-					if (indexActTab >= 0) { // Mouse is above a tab, otherwise tabNumber would be -1
-											// -->Now we are at tab tragging
-						draggingState = true; // Mark now we are at dragging
-						indexDraggedTab = indexActTab; // Set draggedTabIndex to the tabNumber where we are now
-						repaint();
-					}
-
-				} else { //We are at tab tragging
-					if (indexDraggedTab >= 0 && indexActTab >= 0) { //Is it a valid scenario?
-						boolean toTheLeft = e.getX() <= getUI().getTabBounds(DragDropPane.this, indexActTab).getCenterX(); //Go to the left or to the right of the actual Tab
-						DragDropPane.this.getRootPane().setGlassPane(markerPane); //Set the MarkerPane as glass Pane
-						Rectangle actTabRect = SwingUtilities.convertRectangle(DragDropPane.this, getBoundsAt(indexActTab),
-								DragDropPane.this.markerPane); //Rectangle with the same dimensions as the tab at the mouse position
-						if (toTheLeft)
-							markerPane.setPicLocation(new Point(actTabRect.x, actTabRect.y
-									+ actTabRect.height)); //Set pic to the left of the tab at the mouse position
-						else
-							markerPane.setPicLocation(new Point(actTabRect.x + actTabRect.width, actTabRect.y
-									+ actTabRect.height)); //Set pic to the right of the tab at the mouse position
-
-						markerPane.setVisible(true);
-						markerPane.repaint();
-						repaint();
-					} else { //We have no valid tab tragging scenario
-						markerPane.setVisible(false);
-						markerPane.repaint();
-					}
-				}
-				super.mouseDragged(e);
-			}
-		});
-
-		addMouseListener(new MouseAdapter() {
-			public void mouseReleased(MouseEvent e) {
-				DragDropPane.this.markerPane.setVisible(false); //Set MarkerPane invisible
-				int indexActTab = getUI().tabForCoordinate(DragDropPane.this,
-						e.getX(), e.getY());
-				if (indexDraggedTab >= 0 && indexActTab >= 0 && indexDraggedTab != indexActTab) { //Is it a valid scenario?
-					if (draggingState) { //We are at tab tragging
-						boolean toTheLeft = e.getX() <= getUI().getTabBounds(DragDropPane.this, indexActTab).getCenterX(); //Go to the left or to the right of the actual Tab
-						DragDropPane.this.markerPane.setVisible(false);
-
-						Component actTab = getComponentAt(indexDraggedTab); //Save dragged tab
-						String actTabTitle = getTitleAt(indexDraggedTab); //Save Title of the dragged tab
-						removeTabAt(indexDraggedTab); //Remove dragged tab
-						int newTabPos;
-						if(indexActTab < indexDraggedTab) { //We are dragging the tab to the left of its the position
-							if(toTheLeft && indexActTab<(DragDropPane.this.getTabCount())) // The mouse is at the left side of a tab except the last one
-								newTabPos = indexActTab;
-							else
-								newTabPos = indexActTab+1;
-						}
-						else { //We are dragging the tab to the right of the old position
-							if(toTheLeft && indexActTab>0) // The mouse is at the left side of a tab except the first one
-								newTabPos = indexActTab-1;
-							else
-								newTabPos = indexActTab;
-						}
-						insertTab(actTabTitle, null, actTab, null, newTabPos); //Insert dragged tab at new position
-						DragDropPane.this.setSelectedIndex(newTabPos); //Set selection back to the tab (at the new tab position
-					}
-				}
-				draggingState = false;
-			}
-		});
-	}
-
-	/**
-	 * A glass panel which sets the marker for Dragging of Tabs.
-	 * 
-	 */
-	class MarkerPane extends JPanel {
-		private Point locationP;
-		private Image markerImg;
-
-		public MarkerPane() {
-			setOpaque(false);
-			markerImg = Toolkit.getDefaultToolkit().getImage(
-					GUIGlobals.getIconUrl("dragNdropArrow")); // Sets the marker image
-		}
-
-		@Override
-		public void paintComponent(Graphics g) {
-			((Graphics2D) g).setComposite(AlphaComposite.getInstance(
-					AlphaComposite.SRC_OVER, 0.9f)); // Set transparency
-			g.drawImage(markerImg, locationP.x - (markerImg.getWidth(null) / 2),
-					locationP.y, null); // draw the image at the middle of the given location
-		}
-
-		/**
-		 * Sets the new location, where the marker should be placed.
-		 * 
-		 * @param pt the point for the marker
-		 */
-		public void setPicLocation(Point pt) {
-			this.locationP = pt;
-		}
-
-	}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+package net.sf.jabref.gui;
+
+import java.awt.AlphaComposite;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionAdapter;
+
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.SwingUtilities;
+
+import net.sf.jabref.GUIGlobals;
+
+/**
+ * Extends the JTabbedPane class to support Drag&Drop of Tabs.
+ * 
+ * @author kleinms, strassfn
+ */
+public class DragDropPane extends JTabbedPane {
+	private boolean draggingState = false; // State var if we are at dragging or not
+	private int indexDraggedTab; // The index of the tab we drag at the moment
+	MarkerPane markerPane; // The glass panel for painting the position marker
+
+	public DragDropPane() {
+		super();
+		indexDraggedTab = -1;
+		markerPane = new MarkerPane();
+		markerPane.setVisible(false);
+
+		// -------------------------------------------
+		// Adding listeners for Drag&Drop Actions
+		// -------------------------------------------
+		addMouseMotionListener(new MouseMotionAdapter() {
+			public void mouseDragged(MouseEvent e) { // Mouse is dragging
+											// Calculates the tab index based on the mouse position
+				int indexActTab = getUI().tabForCoordinate(DragDropPane.this,
+						e.getX(), e.getY());
+				if (!draggingState) { // We are not at tab dragging
+					if (indexActTab >= 0) { // Mouse is above a tab, otherwise tabNumber would be -1
+											// -->Now we are at tab tragging
+						draggingState = true; // Mark now we are at dragging
+						indexDraggedTab = indexActTab; // Set draggedTabIndex to the tabNumber where we are now
+						repaint();
+					}
+
+				} else { //We are at tab tragging
+					if (indexDraggedTab >= 0 && indexActTab >= 0) { //Is it a valid scenario?
+						boolean toTheLeft = e.getX() <= getUI().getTabBounds(DragDropPane.this, indexActTab).getCenterX(); //Go to the left or to the right of the actual Tab
+						DragDropPane.this.getRootPane().setGlassPane(markerPane); //Set the MarkerPane as glass Pane
+						Rectangle actTabRect = SwingUtilities.convertRectangle(DragDropPane.this, getBoundsAt(indexActTab),
+								DragDropPane.this.markerPane); //Rectangle with the same dimensions as the tab at the mouse position
+						if (toTheLeft)
+							markerPane.setPicLocation(new Point(actTabRect.x, actTabRect.y
+									+ actTabRect.height)); //Set pic to the left of the tab at the mouse position
+						else
+							markerPane.setPicLocation(new Point(actTabRect.x + actTabRect.width, actTabRect.y
+									+ actTabRect.height)); //Set pic to the right of the tab at the mouse position
+
+						markerPane.setVisible(true);
+						markerPane.repaint();
+						repaint();
+					} else { //We have no valid tab tragging scenario
+						markerPane.setVisible(false);
+						markerPane.repaint();
+					}
+				}
+				super.mouseDragged(e);
+			}
+		});
+
+		addMouseListener(new MouseAdapter() {
+			public void mouseReleased(MouseEvent e) {
+				DragDropPane.this.markerPane.setVisible(false); //Set MarkerPane invisible
+				int indexActTab = getUI().tabForCoordinate(DragDropPane.this,
+						e.getX(), e.getY());
+				if (indexDraggedTab >= 0 && indexActTab >= 0 && indexDraggedTab != indexActTab) { //Is it a valid scenario?
+					if (draggingState) { //We are at tab tragging
+						boolean toTheLeft = e.getX() <= getUI().getTabBounds(DragDropPane.this, indexActTab).getCenterX(); //Go to the left or to the right of the actual Tab
+						DragDropPane.this.markerPane.setVisible(false);
+
+						Component actTab = getComponentAt(indexDraggedTab); //Save dragged tab
+						String actTabTitle = getTitleAt(indexDraggedTab); //Save Title of the dragged tab
+						removeTabAt(indexDraggedTab); //Remove dragged tab
+						int newTabPos;
+						if(indexActTab < indexDraggedTab) { //We are dragging the tab to the left of its the position
+							if(toTheLeft && indexActTab<(DragDropPane.this.getTabCount())) // The mouse is at the left side of a tab except the last one
+								newTabPos = indexActTab;
+							else
+								newTabPos = indexActTab+1;
+						}
+						else { //We are dragging the tab to the right of the old position
+							if(toTheLeft && indexActTab>0) // The mouse is at the left side of a tab except the first one
+								newTabPos = indexActTab-1;
+							else
+								newTabPos = indexActTab;
+						}
+						insertTab(actTabTitle, null, actTab, null, newTabPos); //Insert dragged tab at new position
+						DragDropPane.this.setSelectedIndex(newTabPos); //Set selection back to the tab (at the new tab position
+					}
+				}
+				draggingState = false;
+			}
+		});
+	}
+
+	/**
+	 * A glass panel which sets the marker for Dragging of Tabs.
+	 * 
+	 */
+	class MarkerPane extends JPanel {
+		private Point locationP;
+		private Image markerImg;
+
+		public MarkerPane() {
+			setOpaque(false);
+			markerImg = Toolkit.getDefaultToolkit().getImage(
+					GUIGlobals.getIconUrl("dragNdropArrow")); // Sets the marker image
+		}
+
+		@Override
+		public void paintComponent(Graphics g) {
+			((Graphics2D) g).setComposite(AlphaComposite.getInstance(
+					AlphaComposite.SRC_OVER, 0.9f)); // Set transparency
+			g.drawImage(markerImg, locationP.x - (markerImg.getWidth(null) / 2),
+					locationP.y, null); // draw the image at the middle of the given location
+		}
+
+		/**
+		 * Sets the new location, where the marker should be placed.
+		 * 
+		 * @param pt the point for the marker
+		 */
+		public void setPicLocation(Point pt) {
+			this.locationP = pt;
+		}
+
+	}
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/gui/DragDropPopupPane.java b/src/java/net/sf/jabref/gui/DragDropPopupPane.java
index b966382..d4151d7 100644
--- a/src/java/net/sf/jabref/gui/DragDropPopupPane.java
+++ b/src/java/net/sf/jabref/gui/DragDropPopupPane.java
@@ -1,95 +1,95 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseEvent;
-
-import javax.swing.AbstractAction;
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-import javax.swing.SwingUtilities;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-
-/**
- * Adds popup functionality to DragDropPane 
- * 
- * Code inspired by http://forums.devx.com/showthread.php?t=151270
- */
-public class DragDropPopupPane extends DragDropPane {
-	
-	private JPopupMenu popupMenu = null;
-
-	public DragDropPopupPane(AbstractAction manageSelectorsAction, AbstractAction databasePropertiesAction, AbstractAction bibtexKeyPatternAction) {
-		super();
-		
-		addMouseListener(new java.awt.event.MouseAdapter() {
-			public void mouseClicked(MouseEvent e) {
-				tabClicked(e);
-			}
-		});
-		
-		initPopupMenu(manageSelectorsAction, databasePropertiesAction, bibtexKeyPatternAction);
-	}
-	
-	private void initPopupMenu(AbstractAction manageSelectorsAction, AbstractAction databasePropertiesAction, AbstractAction bibtexKeyPatternAction) {
-		popupMenu = new JPopupMenu();
-		
-		JMenuItem databasePropertiesBtn = new JMenuItem(Globals.lang("Database properties"));
-		databasePropertiesBtn.addActionListener(databasePropertiesAction);
-		popupMenu.add(databasePropertiesBtn);
-		
-		JMenuItem bibtexKeyPatternBtn = new JMenuItem(Globals.lang("Bibtex key patterns"));
-		bibtexKeyPatternBtn.addActionListener(bibtexKeyPatternAction);
-		popupMenu.add(bibtexKeyPatternBtn);
-
-		JMenuItem manageSelectorsBtn = new JMenuItem(Globals.lang("Manage content selectors"));
-		manageSelectorsBtn.addActionListener(manageSelectorsAction);
-		popupMenu.add(manageSelectorsBtn);
-		
-		JMenuItem closeBtn = new JMenuItem(Globals.lang("Close"), GUIGlobals.getImage("close"));
-		closeBtn.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				SwingUtilities.invokeLater(new Runnable() {
-					public void run() {
-						closeSelectedTab();
-					}
-				});
-			}
-		});		
-		popupMenu.add(closeBtn);
-	}
-	
-	
-	private void tabClicked(MouseEvent e) {
-		if (e.getButton() != MouseEvent.BUTTON1 && e.getClickCount() == 1) {   // if is right-click
-    	  
-			// display popup near location of mouse click
-			popupMenu.show(e.getComponent(), e.getX(), e.getY() - 10);
-		}
-    }
-    
-    private void closeSelectedTab() {
-    	// remove selected tab
-    	remove( getSelectedIndex() );  
-    }
-    
-
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.SwingUtilities;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+
+/**
+ * Adds popup functionality to DragDropPane 
+ * 
+ * Code inspired by http://forums.devx.com/showthread.php?t=151270
+ */
+public class DragDropPopupPane extends DragDropPane {
+	
+	private JPopupMenu popupMenu = null;
+
+	public DragDropPopupPane(AbstractAction manageSelectorsAction, AbstractAction databasePropertiesAction, AbstractAction bibtexKeyPatternAction) {
+		super();
+		
+		addMouseListener(new java.awt.event.MouseAdapter() {
+			public void mouseClicked(MouseEvent e) {
+				tabClicked(e);
+			}
+		});
+		
+		initPopupMenu(manageSelectorsAction, databasePropertiesAction, bibtexKeyPatternAction);
+	}
+	
+	private void initPopupMenu(AbstractAction manageSelectorsAction, AbstractAction databasePropertiesAction, AbstractAction bibtexKeyPatternAction) {
+		popupMenu = new JPopupMenu();
+		
+		JMenuItem databasePropertiesBtn = new JMenuItem(Globals.lang("Database properties"));
+		databasePropertiesBtn.addActionListener(databasePropertiesAction);
+		popupMenu.add(databasePropertiesBtn);
+		
+		JMenuItem bibtexKeyPatternBtn = new JMenuItem(Globals.lang("Bibtex key patterns"));
+		bibtexKeyPatternBtn.addActionListener(bibtexKeyPatternAction);
+		popupMenu.add(bibtexKeyPatternBtn);
+
+		JMenuItem manageSelectorsBtn = new JMenuItem(Globals.lang("Manage content selectors"));
+		manageSelectorsBtn.addActionListener(manageSelectorsAction);
+		popupMenu.add(manageSelectorsBtn);
+		
+		JMenuItem closeBtn = new JMenuItem(Globals.lang("Close"), GUIGlobals.getImage("close"));
+		closeBtn.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				SwingUtilities.invokeLater(new Runnable() {
+					public void run() {
+						closeSelectedTab();
+					}
+				});
+			}
+		});		
+		popupMenu.add(closeBtn);
+	}
+	
+	
+	private void tabClicked(MouseEvent e) {
+		if (e.getButton() != MouseEvent.BUTTON1 && e.getClickCount() == 1) {   // if is right-click
+    	  
+			// display popup near location of mouse click
+			popupMenu.show(e.getComponent(), e.getX(), e.getY() - 10);
+		}
+    }
+    
+    private void closeSelectedTab() {
+    	// remove selected tab
+    	remove( getSelectedIndex() );  
+    }
+    
+
+}
diff --git a/src/java/net/sf/jabref/gui/EntryCustomizationDialog2.java b/src/java/net/sf/jabref/gui/EntryCustomizationDialog2.java
index 5c2897a..c122ce1 100644
--- a/src/java/net/sf/jabref/gui/EntryCustomizationDialog2.java
+++ b/src/java/net/sf/jabref/gui/EntryCustomizationDialog2.java
@@ -1,445 +1,445 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.*;
-import java.util.List;
-
-import javax.swing.*;
-import javax.swing.event.ListDataListener;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-
-import net.sf.jabref.*;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-public class EntryCustomizationDialog2 extends JDialog implements ListSelectionListener, ActionListener {
-
-    protected JabRefFrame frame;
-    protected GridBagLayout gbl = new GridBagLayout();
-    protected GridBagConstraints con = new GridBagConstraints();
-    protected FieldSetComponent reqComp, optComp, optComp2;
-    protected EntryTypeList typeComp;
-    protected JButton ok, cancel, apply, helpButton, delete, importTypes, exportTypes;
-    protected final List<String> preset = java.util.Arrays.asList(BibtexFields.getAllFieldNames());
-    protected String lastSelected = null;
-    protected Map<String, List<String>> reqLists = new HashMap<String, List<String>>(),
-            optLists = new HashMap<String, List<String>>(),
-            opt2Lists = new HashMap<String, List<String>>();
-    protected Set<String> defaulted = new HashSet<String>(), changed = new HashSet<String>();
-
-    boolean biblatexMode;
-
-    /** Creates a new instance of EntryCustomizationDialog2 */
-    public EntryCustomizationDialog2(JabRefFrame frame) {
-        super(frame, Globals.lang("Customize entry types"), false);
-
-        this.frame = frame;
-        initGui();
-    }
-
-    protected final void initGui() {
-        Container pane = getContentPane();
-        pane.setLayout(new BorderLayout());
-
-        biblatexMode = Globals.prefs.getBoolean("biblatexMode");
-
-        JPanel main = new JPanel(), buttons = new JPanel(),
-                right = new JPanel();
-        main.setLayout(new BorderLayout());
-        right.setLayout(new GridLayout(biblatexMode ? 2 : 1, 2));
-
-        java.util.List<String> entryTypes = new ArrayList<String>();
-        for (Iterator<String> i=BibtexEntryType.ALL_TYPES.keySet().iterator(); i.hasNext();) {
-            entryTypes.add(i.next());
-        }
-
-        typeComp = new EntryTypeList(entryTypes);
-        typeComp.addListSelectionListener(this);
-        typeComp.addAdditionActionListener(this);
-        typeComp.addDefaultActionListener(new DefaultListener());
-        typeComp.setListSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-
-        //typeComp.setEnabled(false);
-        reqComp = new FieldSetComponent(Globals.lang("Required fields"), new ArrayList<String>(), preset, true, true);
-        reqComp.setEnabled(false);
-        reqComp.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
-        ListDataListener dataListener = new DataListener();
-        reqComp.addListDataListener(dataListener);
-        optComp = new FieldSetComponent(Globals.lang("Optional fields"), new ArrayList<String>(), preset, true, true);
-        optComp.setEnabled(false);
-        optComp.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
-        optComp.addListDataListener(dataListener);
-        right.add(reqComp);
-        right.add(optComp);
-
-        if (biblatexMode) {
-            optComp2 = new FieldSetComponent(Globals.lang("Optional fields")+" 2", new ArrayList<String>(), preset, true, true);
-            optComp2.setEnabled(false);
-            optComp2.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
-            optComp2.addListDataListener(dataListener);
-            right.add(new JPanel());
-            right.add(optComp2);
-        }
-
-        //right.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Globals.lang("Fields")));
-        right.setBorder(BorderFactory.createEtchedBorder());
-        ok = new JButton("OK");
-        cancel = new JButton(Globals.lang("Cancel"));
-        apply = new JButton(Globals.lang("Apply"));
-        ok.addActionListener(this);
-        apply.addActionListener(this);
-        cancel.addActionListener(this);
-        ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
-        buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(apply);
-        bb.addButton(cancel);
-        bb.addGlue();
-                
-        AbstractAction closeAction = new AbstractAction() {
-          public void actionPerformed(ActionEvent e) {
-            dispose();
-          }
-        };
-        ActionMap am = main.getActionMap();
-        InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", closeAction);
-
-        //con.fill = GridBagConstraints.BOTH;
-        //con.weightx = 0.3;
-        //con.weighty = 1;
-        //gbl.setConstraints(typeComp, con);
-        main.add(typeComp, BorderLayout.WEST);
-        main.add(right, BorderLayout.CENTER);
-        main.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        pane.add(main, BorderLayout.CENTER);
-        pane.add(buttons, BorderLayout.SOUTH);
-        pack();
-    }
-
-    public void valueChanged(ListSelectionEvent e) {
-        if (e.getValueIsAdjusting()) {
-            return;
-        }
-
-
-        if (lastSelected != null) {
-            // The entry type lastSelected is now unselected, so we store the current settings
-            // for that type in our two maps.
-            reqLists.put(lastSelected, reqComp.getFields());
-            optLists.put(lastSelected, optComp.getFields());
-            if (biblatexMode)
-                opt2Lists.put(lastSelected, optComp2.getFields());
-        }
-
-        String s = typeComp.getFirstSelected();
-        if (s == null)
-            return;
-        List<String> rl = reqLists.get(s);
-        if (rl == null) {
-            BibtexEntryType type = BibtexEntryType.getType(s);
-            if (type != null) {
-                String[] rf = type.getRequiredFieldsForCustomization(),
-                        of = type.getOptionalFields();
-                List<String> req, opt;
-                if (rf != null)
-                    req = java.util.Arrays.asList(rf);
-                else
-                    req = new ArrayList<String>();
-
-                if (!biblatexMode) {
-                    if (of != null)
-                        opt = java.util.Arrays.asList(of);
-                    else
-                        opt = new ArrayList<String>();
-                } else {
-                    String[] priOf = type.getPrimaryOptionalFields();
-                    if (priOf != null)
-                        opt = java.util.Arrays.asList(priOf);
-                    else
-                        opt = new ArrayList<String>();
-                    List<String> opt2 = new ArrayList<String>();
-                    if (of != null)
-                        for (int i=0; i<of.length; i++)
-                            if (!opt.contains(of[i]))
-                                opt2.add(of[i]);
-                    optComp2.setFields(opt2);
-                    optComp2.setEnabled(true);
-                }
-
-                reqComp.setFields(req);
-                reqComp.setEnabled(true);
-                optComp.setFields(opt);
-                optComp.setEnabled(true);
-            } else {
-                // New entry, veintle
-                reqComp.setFields(new ArrayList<String>());
-                reqComp.setEnabled(true);
-                optComp.setFields(new ArrayList<String>());
-                optComp.setEnabled(true);
-                new FocusRequester(reqComp);
-            }
-        } else {
-            reqComp.setFields(rl);
-            optComp.setFields(optLists.get(s));
-        }
-
-        lastSelected = s;
-        typeComp.enable(s, changed.contains(lastSelected) && !defaulted.contains(lastSelected));
-    }
-
-    protected void applyChanges() {
-        valueChanged(new ListSelectionEvent(new JList(), 0, 0, false));
-        // Iterate over our map of required fields, and list those types if necessary:
-
-        List<String> types = typeComp.getFields();
-        for (Iterator<String> i=reqLists.keySet().iterator(); i.hasNext();) {
-            String typeName = i.next();
-            if (!types.contains(typeName))
-                continue;
-
-            List<String> reqFields = reqLists.get(typeName);
-            List<String> optFields = optLists.get(typeName);
-            List<String> opt2Fields = opt2Lists.get(typeName);
-            String[] reqStr = new String[reqFields.size()];
-            reqStr = reqFields.toArray(reqStr);
-            String[] optStr = new String[optFields.size()];
-            optStr = optFields.toArray(optStr);
-            String[] opt2Str;
-            if (opt2Fields != null)
-                opt2Str = opt2Fields.toArray(new String[opt2Fields.size()]);
-            else
-                opt2Str = new String[0];
-
-            // If this type is already existing, check if any changes have
-            // been made
-            boolean changesMade = true;
-
-            if (defaulted.contains(typeName)) {
-                // This type should be reverted to its default setup.
-                //System.out.println("Defaulting: "+typeName);
-                String nm = Util.nCase(typeName);
-                BibtexEntryType.removeType(nm);
-
-                updateTypesForEntries(nm);
-                continue;
-            }
-
-            BibtexEntryType oldType = BibtexEntryType.getType(typeName);
-            if (oldType != null) {
-                String[] oldReq = oldType.getRequiredFields(),
-                        oldOpt = oldType.getOptionalFields();
-                if (biblatexMode) {
-                    String[] priOpt = oldType.getPrimaryOptionalFields();
-                    ArrayList<String> secOpt = new ArrayList<String>();
-                    for (int j = 0; j < oldOpt.length; j++) {
-                        boolean inPri = false;
-                        for (int k = 0; k < priOpt.length; k++) {
-                            if (priOpt[k].equals(oldOpt[j])) {
-                                inPri = true;
-                                break;
-                            }
-                        }
-                        if (!inPri)
-                            secOpt.add(oldOpt[j]);
-                    }
-                    String[] secOptArray = secOpt.toArray(new String[secOpt.size()]);
-                    if (equalArrays(oldReq, reqStr) && equalArrays(oldOpt, optStr) &&
-                            equalArrays(secOptArray, opt2Str))
-                        changesMade = false;
-                } else
-                    if (equalArrays(oldReq, reqStr) && equalArrays(oldOpt, optStr))
-                        changesMade = false;
-            }
-
-            if (changesMade) {
-                //System.out.println("Updating: "+typeName);
-                CustomEntryType typ = biblatexMode ?
-                        new CustomEntryType(Util.nCase(typeName), reqStr, optStr, opt2Str) :
-                        new CustomEntryType(Util.nCase(typeName), reqStr, optStr);
-
-                BibtexEntryType.ALL_TYPES.put(typeName.toLowerCase(), typ);
-                updateTypesForEntries(typ.getName());
-            }
-        }
-
-
-        Set<Object> toRemove = new HashSet<Object>();
-        for (Iterator<String> i=BibtexEntryType.ALL_TYPES.keySet().iterator(); i.hasNext();) {
-            Object o = i.next();
-            if (!types.contains(o)) {
-                toRemove.add(o);
-            }
-        }
-
-        // Remove those that should be removed:
-        if (toRemove.size() > 0) {
-            for (Iterator<Object> i=toRemove.iterator(); i.hasNext();)
-                typeDeletion((String)i.next());
-        }
-
-        updateTables();
-    }
-
-    protected void typeDeletion(String name) {
-        BibtexEntryType type = BibtexEntryType.getType(name);
-
-        if (type instanceof CustomEntryType) {
-            if (BibtexEntryType.getStandardType(name) == null) {
-                int reply = JOptionPane.showConfirmDialog
-                        (frame, Globals.lang("All entries of this "
-                        +"type will be declared "
-                        +"typeless. Continue?"),
-                        Globals.lang("Delete custom format")+
-                        " '"+Util.nCase(name)+"'", JOptionPane.YES_NO_OPTION,
-                        JOptionPane.WARNING_MESSAGE);
-                if (reply != JOptionPane.YES_OPTION)
-                    return;
-            }
-            BibtexEntryType.removeType(name);
-            updateTypesForEntries(Util.nCase(name));
-            changed.remove(name);
-            reqLists.remove(name);
-            optLists.remove(name);
-        }
-        //messageLabel.setText("'"+type.getName()+"' "+
-        //        Globals.lang("is a standard type."));
-
-    }
-
-
-protected boolean equalArrays(String[] one, String[] two) {
-    if ((one == null) && (two == null))
-        return true; // Both null.
-    if ((one == null) || (two == null))
-        return false; // One of them null, the other not.
-    if (one.length != two.length)
-        return false; // Different length.
-    // If we get here, we know that both are non-null, and that they have the same length.
-    for (int i=0; i<one.length; i++) {
-        if (!one[i].equals(two[i]))
-            return false;
-    }
-    // If we get here, all entries have matched.
-    return true;
-}
-
-public void actionPerformed(ActionEvent e) {
-    if (e.getSource() == ok) {
-        applyChanges();
-        dispose();
-    } else if (e.getSource() == cancel) {
-        dispose();
-    } else if (e.getSource() == apply) {
-        applyChanges();
-    } else if (e.getSource() == typeComp) {
-        //System.out.println("add: "+e.getActionCommand());
-        typeComp.selectField(e.getActionCommand());
-    }
-}
-
-/**
- * Cycle through all databases, and make sure everything is updated with
- * the new type customization. This includes making sure all entries have
- * a valid type, that no obsolete entry editors are around, and that
- * the right-click menus' change type menu is up-to-date.
- */
-private void updateTypesForEntries(String typeName) {
-    if (frame.getTabbedPane().getTabCount() == 0)
-        return;
-    for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
-        BasePanel bp = (BasePanel)frame.getTabbedPane().getComponentAt(i);
-
-        // Invalidate associated cached entry editor
-        bp.entryEditors.remove(typeName);
-
-        for (BibtexEntry entry : bp.database().getEntries()){
-            entry.updateType();
-        }
-    }
-
-}
-
-private void updateTables() {
-    if (frame.getTabbedPane().getTabCount() == 0)
-        return;
-    for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
-        frame.getTabbedPane().getComponentAt(i);
-    }
-
-}
-
-// DEFAULT button pressed. Remember that this entry should be reset to default,
-// unless changes are made later.
-class DefaultListener implements ActionListener {
-    public void actionPerformed(ActionEvent e) {
-        if (lastSelected == null)
-            return;
-        defaulted.add(lastSelected);
-
-        BibtexEntryType type = BibtexEntryType.getStandardType(lastSelected);
-        if (type != null) {
-            String[] rf = type.getRequiredFieldsForCustomization(),
-                    of = type.getOptionalFields();
-            List<String> req, opt;
-            if (rf != null)
-                req = java.util.Arrays.asList(rf);
-            else
-                req = new ArrayList<String>();
-            if (of != null)
-                opt = java.util.Arrays.asList(of);
-            else
-                opt = new ArrayList<String>();
-
-            reqComp.setFields(req);
-            reqComp.setEnabled(true);
-            optComp.setFields(opt);
-        }
-    }
-}
-
-class DataListener implements ListDataListener {
-
-
-    public void intervalAdded(javax.swing.event.ListDataEvent e) {
-        record();
-    }
-
-    public void intervalRemoved(javax.swing.event.ListDataEvent e) {
-        record();
-    }
-
-    public void contentsChanged(javax.swing.event.ListDataEvent e) {
-        record();
-    }
-
-    private void record() {
-        if (lastSelected == null)
-            return;
-        defaulted.remove(lastSelected);
-        changed.add(lastSelected);
-        typeComp.enable(lastSelected, true);
-    }
-
-}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.*;
+import java.util.List;
+
+import javax.swing.*;
+import javax.swing.event.ListDataListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import net.sf.jabref.*;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+public class EntryCustomizationDialog2 extends JDialog implements ListSelectionListener, ActionListener {
+
+    protected JabRefFrame frame;
+    protected GridBagLayout gbl = new GridBagLayout();
+    protected GridBagConstraints con = new GridBagConstraints();
+    protected FieldSetComponent reqComp, optComp, optComp2;
+    protected EntryTypeList typeComp;
+    protected JButton ok, cancel, apply, helpButton, delete, importTypes, exportTypes;
+    protected final List<String> preset = java.util.Arrays.asList(BibtexFields.getAllFieldNames());
+    protected String lastSelected = null;
+    protected Map<String, List<String>> reqLists = new HashMap<String, List<String>>(),
+            optLists = new HashMap<String, List<String>>(),
+            opt2Lists = new HashMap<String, List<String>>();
+    protected Set<String> defaulted = new HashSet<String>(), changed = new HashSet<String>();
+
+    boolean biblatexMode;
+
+    /** Creates a new instance of EntryCustomizationDialog2 */
+    public EntryCustomizationDialog2(JabRefFrame frame) {
+        super(frame, Globals.lang("Customize entry types"), false);
+
+        this.frame = frame;
+        initGui();
+    }
+
+    protected final void initGui() {
+        Container pane = getContentPane();
+        pane.setLayout(new BorderLayout());
+
+        biblatexMode = Globals.prefs.getBoolean("biblatexMode");
+
+        JPanel main = new JPanel(), buttons = new JPanel(),
+                right = new JPanel();
+        main.setLayout(new BorderLayout());
+        right.setLayout(new GridLayout(biblatexMode ? 2 : 1, 2));
+
+        java.util.List<String> entryTypes = new ArrayList<String>();
+        for (Iterator<String> i=BibtexEntryType.ALL_TYPES.keySet().iterator(); i.hasNext();) {
+            entryTypes.add(i.next());
+        }
+
+        typeComp = new EntryTypeList(entryTypes);
+        typeComp.addListSelectionListener(this);
+        typeComp.addAdditionActionListener(this);
+        typeComp.addDefaultActionListener(new DefaultListener());
+        typeComp.setListSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+        //typeComp.setEnabled(false);
+        reqComp = new FieldSetComponent(Globals.lang("Required fields"), new ArrayList<String>(), preset, true, true);
+        reqComp.setEnabled(false);
+        reqComp.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+        ListDataListener dataListener = new DataListener();
+        reqComp.addListDataListener(dataListener);
+        optComp = new FieldSetComponent(Globals.lang("Optional fields"), new ArrayList<String>(), preset, true, true);
+        optComp.setEnabled(false);
+        optComp.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+        optComp.addListDataListener(dataListener);
+        right.add(reqComp);
+        right.add(optComp);
+
+        if (biblatexMode) {
+            optComp2 = new FieldSetComponent(Globals.lang("Optional fields")+" 2", new ArrayList<String>(), preset, true, true);
+            optComp2.setEnabled(false);
+            optComp2.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+            optComp2.addListDataListener(dataListener);
+            right.add(new JPanel());
+            right.add(optComp2);
+        }
+
+        //right.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Globals.lang("Fields")));
+        right.setBorder(BorderFactory.createEtchedBorder());
+        ok = new JButton("OK");
+        cancel = new JButton(Globals.lang("Cancel"));
+        apply = new JButton(Globals.lang("Apply"));
+        ok.addActionListener(this);
+        apply.addActionListener(this);
+        cancel.addActionListener(this);
+        ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
+        buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(apply);
+        bb.addButton(cancel);
+        bb.addGlue();
+                
+        AbstractAction closeAction = new AbstractAction() {
+          public void actionPerformed(ActionEvent e) {
+            dispose();
+          }
+        };
+        ActionMap am = main.getActionMap();
+        InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", closeAction);
+
+        //con.fill = GridBagConstraints.BOTH;
+        //con.weightx = 0.3;
+        //con.weighty = 1;
+        //gbl.setConstraints(typeComp, con);
+        main.add(typeComp, BorderLayout.WEST);
+        main.add(right, BorderLayout.CENTER);
+        main.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pane.add(main, BorderLayout.CENTER);
+        pane.add(buttons, BorderLayout.SOUTH);
+        pack();
+    }
+
+    public void valueChanged(ListSelectionEvent e) {
+        if (e.getValueIsAdjusting()) {
+            return;
+        }
+
+
+        if (lastSelected != null) {
+            // The entry type lastSelected is now unselected, so we store the current settings
+            // for that type in our two maps.
+            reqLists.put(lastSelected, reqComp.getFields());
+            optLists.put(lastSelected, optComp.getFields());
+            if (biblatexMode)
+                opt2Lists.put(lastSelected, optComp2.getFields());
+        }
+
+        String s = typeComp.getFirstSelected();
+        if (s == null)
+            return;
+        List<String> rl = reqLists.get(s);
+        if (rl == null) {
+            BibtexEntryType type = BibtexEntryType.getType(s);
+            if (type != null) {
+                String[] rf = type.getRequiredFieldsForCustomization(),
+                        of = type.getOptionalFields();
+                List<String> req, opt;
+                if (rf != null)
+                    req = java.util.Arrays.asList(rf);
+                else
+                    req = new ArrayList<String>();
+
+                if (!biblatexMode) {
+                    if (of != null)
+                        opt = java.util.Arrays.asList(of);
+                    else
+                        opt = new ArrayList<String>();
+                } else {
+                    String[] priOf = type.getPrimaryOptionalFields();
+                    if (priOf != null)
+                        opt = java.util.Arrays.asList(priOf);
+                    else
+                        opt = new ArrayList<String>();
+                    List<String> opt2 = new ArrayList<String>();
+                    if (of != null)
+                        for (int i=0; i<of.length; i++)
+                            if (!opt.contains(of[i]))
+                                opt2.add(of[i]);
+                    optComp2.setFields(opt2);
+                    optComp2.setEnabled(true);
+                }
+
+                reqComp.setFields(req);
+                reqComp.setEnabled(true);
+                optComp.setFields(opt);
+                optComp.setEnabled(true);
+            } else {
+                // New entry, veintle
+                reqComp.setFields(new ArrayList<String>());
+                reqComp.setEnabled(true);
+                optComp.setFields(new ArrayList<String>());
+                optComp.setEnabled(true);
+                new FocusRequester(reqComp);
+            }
+        } else {
+            reqComp.setFields(rl);
+            optComp.setFields(optLists.get(s));
+        }
+
+        lastSelected = s;
+        typeComp.enable(s, changed.contains(lastSelected) && !defaulted.contains(lastSelected));
+    }
+
+    protected void applyChanges() {
+        valueChanged(new ListSelectionEvent(new JList(), 0, 0, false));
+        // Iterate over our map of required fields, and list those types if necessary:
+
+        List<String> types = typeComp.getFields();
+        for (Iterator<String> i=reqLists.keySet().iterator(); i.hasNext();) {
+            String typeName = i.next();
+            if (!types.contains(typeName))
+                continue;
+
+            List<String> reqFields = reqLists.get(typeName);
+            List<String> optFields = optLists.get(typeName);
+            List<String> opt2Fields = opt2Lists.get(typeName);
+            String[] reqStr = new String[reqFields.size()];
+            reqStr = reqFields.toArray(reqStr);
+            String[] optStr = new String[optFields.size()];
+            optStr = optFields.toArray(optStr);
+            String[] opt2Str;
+            if (opt2Fields != null)
+                opt2Str = opt2Fields.toArray(new String[opt2Fields.size()]);
+            else
+                opt2Str = new String[0];
+
+            // If this type is already existing, check if any changes have
+            // been made
+            boolean changesMade = true;
+
+            if (defaulted.contains(typeName)) {
+                // This type should be reverted to its default setup.
+                //System.out.println("Defaulting: "+typeName);
+                String nm = Util.nCase(typeName);
+                BibtexEntryType.removeType(nm);
+
+                updateTypesForEntries(nm);
+                continue;
+            }
+
+            BibtexEntryType oldType = BibtexEntryType.getType(typeName);
+            if (oldType != null) {
+                String[] oldReq = oldType.getRequiredFields(),
+                        oldOpt = oldType.getOptionalFields();
+                if (biblatexMode) {
+                    String[] priOpt = oldType.getPrimaryOptionalFields();
+                    ArrayList<String> secOpt = new ArrayList<String>();
+                    for (int j = 0; j < oldOpt.length; j++) {
+                        boolean inPri = false;
+                        for (int k = 0; k < priOpt.length; k++) {
+                            if (priOpt[k].equals(oldOpt[j])) {
+                                inPri = true;
+                                break;
+                            }
+                        }
+                        if (!inPri)
+                            secOpt.add(oldOpt[j]);
+                    }
+                    String[] secOptArray = secOpt.toArray(new String[secOpt.size()]);
+                    if (equalArrays(oldReq, reqStr) && equalArrays(oldOpt, optStr) &&
+                            equalArrays(secOptArray, opt2Str))
+                        changesMade = false;
+                } else
+                    if (equalArrays(oldReq, reqStr) && equalArrays(oldOpt, optStr))
+                        changesMade = false;
+            }
+
+            if (changesMade) {
+                //System.out.println("Updating: "+typeName);
+                CustomEntryType typ = biblatexMode ?
+                        new CustomEntryType(Util.nCase(typeName), reqStr, optStr, opt2Str) :
+                        new CustomEntryType(Util.nCase(typeName), reqStr, optStr);
+
+                BibtexEntryType.ALL_TYPES.put(typeName.toLowerCase(), typ);
+                updateTypesForEntries(typ.getName());
+            }
+        }
+
+
+        Set<Object> toRemove = new HashSet<Object>();
+        for (Iterator<String> i=BibtexEntryType.ALL_TYPES.keySet().iterator(); i.hasNext();) {
+            Object o = i.next();
+            if (!types.contains(o)) {
+                toRemove.add(o);
+            }
+        }
+
+        // Remove those that should be removed:
+        if (toRemove.size() > 0) {
+            for (Iterator<Object> i=toRemove.iterator(); i.hasNext();)
+                typeDeletion((String)i.next());
+        }
+
+        updateTables();
+    }
+
+    protected void typeDeletion(String name) {
+        BibtexEntryType type = BibtexEntryType.getType(name);
+
+        if (type instanceof CustomEntryType) {
+            if (BibtexEntryType.getStandardType(name) == null) {
+                int reply = JOptionPane.showConfirmDialog
+                        (frame, Globals.lang("All entries of this "
+                        +"type will be declared "
+                        +"typeless. Continue?"),
+                        Globals.lang("Delete custom format")+
+                        " '"+Util.nCase(name)+"'", JOptionPane.YES_NO_OPTION,
+                        JOptionPane.WARNING_MESSAGE);
+                if (reply != JOptionPane.YES_OPTION)
+                    return;
+            }
+            BibtexEntryType.removeType(name);
+            updateTypesForEntries(Util.nCase(name));
+            changed.remove(name);
+            reqLists.remove(name);
+            optLists.remove(name);
+        }
+        //messageLabel.setText("'"+type.getName()+"' "+
+        //        Globals.lang("is a standard type."));
+
+    }
+
+
+protected boolean equalArrays(String[] one, String[] two) {
+    if ((one == null) && (two == null))
+        return true; // Both null.
+    if ((one == null) || (two == null))
+        return false; // One of them null, the other not.
+    if (one.length != two.length)
+        return false; // Different length.
+    // If we get here, we know that both are non-null, and that they have the same length.
+    for (int i=0; i<one.length; i++) {
+        if (!one[i].equals(two[i]))
+            return false;
+    }
+    // If we get here, all entries have matched.
+    return true;
+}
+
+public void actionPerformed(ActionEvent e) {
+    if (e.getSource() == ok) {
+        applyChanges();
+        dispose();
+    } else if (e.getSource() == cancel) {
+        dispose();
+    } else if (e.getSource() == apply) {
+        applyChanges();
+    } else if (e.getSource() == typeComp) {
+        //System.out.println("add: "+e.getActionCommand());
+        typeComp.selectField(e.getActionCommand());
+    }
+}
+
+/**
+ * Cycle through all databases, and make sure everything is updated with
+ * the new type customization. This includes making sure all entries have
+ * a valid type, that no obsolete entry editors are around, and that
+ * the right-click menus' change type menu is up-to-date.
+ */
+private void updateTypesForEntries(String typeName) {
+    if (frame.getTabbedPane().getTabCount() == 0)
+        return;
+    for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
+        BasePanel bp = (BasePanel)frame.getTabbedPane().getComponentAt(i);
+
+        // Invalidate associated cached entry editor
+        bp.entryEditors.remove(typeName);
+
+        for (BibtexEntry entry : bp.database().getEntries()){
+            entry.updateType();
+        }
+    }
+
+}
+
+private void updateTables() {
+    if (frame.getTabbedPane().getTabCount() == 0)
+        return;
+    for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
+        frame.getTabbedPane().getComponentAt(i);
+    }
+
+}
+
+// DEFAULT button pressed. Remember that this entry should be reset to default,
+// unless changes are made later.
+class DefaultListener implements ActionListener {
+    public void actionPerformed(ActionEvent e) {
+        if (lastSelected == null)
+            return;
+        defaulted.add(lastSelected);
+
+        BibtexEntryType type = BibtexEntryType.getStandardType(lastSelected);
+        if (type != null) {
+            String[] rf = type.getRequiredFieldsForCustomization(),
+                    of = type.getOptionalFields();
+            List<String> req, opt;
+            if (rf != null)
+                req = java.util.Arrays.asList(rf);
+            else
+                req = new ArrayList<String>();
+            if (of != null)
+                opt = java.util.Arrays.asList(of);
+            else
+                opt = new ArrayList<String>();
+
+            reqComp.setFields(req);
+            reqComp.setEnabled(true);
+            optComp.setFields(opt);
+        }
+    }
+}
+
+class DataListener implements ListDataListener {
+
+
+    public void intervalAdded(javax.swing.event.ListDataEvent e) {
+        record();
+    }
+
+    public void intervalRemoved(javax.swing.event.ListDataEvent e) {
+        record();
+    }
+
+    public void contentsChanged(javax.swing.event.ListDataEvent e) {
+        record();
+    }
+
+    private void record() {
+        if (lastSelected == null)
+            return;
+        defaulted.remove(lastSelected);
+        changed.add(lastSelected);
+        typeComp.enable(lastSelected, true);
+    }
+
+}
+}
diff --git a/src/java/net/sf/jabref/gui/EntryTypeList.java b/src/java/net/sf/jabref/gui/EntryTypeList.java
index 1e82c87..f1a3af4 100644
--- a/src/java/net/sf/jabref/gui/EntryTypeList.java
+++ b/src/java/net/sf/jabref/gui/EntryTypeList.java
@@ -1,146 +1,146 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.GridBagConstraints;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.List;
-
-import javax.swing.JButton;
-import javax.swing.JOptionPane;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.CustomEntryType;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-
-/**
- * This class extends FieldSetComponent to provide some required functionality for the
- * list of entry types in EntryCustomizationDialog2.
- * @author alver
- */
-public class EntryTypeList extends FieldSetComponent implements ListSelectionListener, ActionListener {
-    
-    protected JButton def = new JButton(Globals.lang("Default"));
-    
-    /** Creates a new instance of EntryTypeList */
-    public EntryTypeList(List<String> fields) {
-        super(Globals.lang("Entry types"), fields, false, true);
-        
-        con.gridx = 0;
-        con.gridy = 2;
-        con.fill = GridBagConstraints.VERTICAL;
-        con.anchor = GridBagConstraints.EAST;
-        gbl.setConstraints(def, con);
-        add(def);
-        list.addListSelectionListener(this);
-        def.addActionListener(this);
-        def.setEnabled(false);
-        remove.setEnabled(false);
-    }
-
-    protected void addField(String s) {
-        s = s.trim();
-        if (forceLowerCase)
-            s = s.toLowerCase();
-        if (s.equals("") || listModel.contains(s))
-            return;
-        
-        String testString = Util.checkLegalKey(s);
-        if (!testString.equals(s) || (s.indexOf('&') >= 0)) {
-            // Report error and exit.
-            JOptionPane.showMessageDialog(this, Globals.lang("Entry type names are not allowed to contain white space or the following "
-                    +"characters")+": # { } ~ , ^ &",
-                    Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-            return;
-        }
-        else if (s.equalsIgnoreCase("comment")) {
-            // Report error and exit.
-            JOptionPane.showMessageDialog(this, Globals.lang("The name 'comment' can not be used as an entry type name."),
-                    Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-            return;
-        }
-        addFieldUncritically(s);
-    }
-    
-    protected void removeSelected() {
-        //super.removeSelected();
-        int[] selected = list.getSelectedIndices();
-        if (selected.length > 0)
-            changesMade = true;
-        for (int i=0; i<selected.length; i++) {
-            String typeName = (String)listModel.get(selected[selected.length-1-i]);
-            BibtexEntryType type = BibtexEntryType.getType(typeName);
-            
-            // If it is a custom entry type, we can remove it. If type == null, it means
-            // the user must have added it and not yet applied it, so we can remove it
-            // in this case as well. If it is a standard type it cannot be removed.
-            if ((type != null) && (type instanceof CustomEntryType)) {
-                listModel.removeElementAt(selected[selected.length-1-i]);
-            }
-            else
-                // This shouldn't happen, since the Remove button should be disabled.
-                JOptionPane.showMessageDialog(null, Globals.lang("This entry type cannot be removed."),
-                        Globals.lang("Remove entry type"), JOptionPane.ERROR_MESSAGE);
-        }
-    }
-    
-    public void valueChanged(ListSelectionEvent e) {
-        if (e.getValueIsAdjusting()) {
-            return;
-        }
-        
-        
-        //
-        
-    }
-
-    public void enable(String typeName, boolean isChanged) {
-        //String s = (String)list.getSelectedValue();
-        
-        if (BibtexEntryType.getStandardType(typeName) != null) {
-            
-            if (isChanged || (BibtexEntryType.getType(typeName) instanceof CustomEntryType)) {
-                def.setEnabled(true);
-            } else
-                def.setEnabled(false);
-            
-            remove.setEnabled(false);
-        } else {
-            def.setEnabled(false);
-            remove.setEnabled(true);
-        }
-    }
-    
-    public void addDefaultActionListener(ActionListener l) {
-        def.addActionListener(l);
-    }
-    
-    public void actionPerformed(ActionEvent e) {
-        // Default button pressed.
-        if (e.getSource() == def)
-            def.setEnabled(false);
-        else super.actionPerformed(e);
-    }
-    
-    public void setEnabled(boolean en) {
-        super.setEnabled(en);
-        def.setEnabled(en);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.GridBagConstraints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.List;
+
+import javax.swing.JButton;
+import javax.swing.JOptionPane;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.CustomEntryType;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+
+/**
+ * This class extends FieldSetComponent to provide some required functionality for the
+ * list of entry types in EntryCustomizationDialog2.
+ * @author alver
+ */
+public class EntryTypeList extends FieldSetComponent implements ListSelectionListener, ActionListener {
+    
+    protected JButton def = new JButton(Globals.lang("Default"));
+    
+    /** Creates a new instance of EntryTypeList */
+    public EntryTypeList(List<String> fields) {
+        super(Globals.lang("Entry types"), fields, false, true);
+        
+        con.gridx = 0;
+        con.gridy = 2;
+        con.fill = GridBagConstraints.VERTICAL;
+        con.anchor = GridBagConstraints.EAST;
+        gbl.setConstraints(def, con);
+        add(def);
+        list.addListSelectionListener(this);
+        def.addActionListener(this);
+        def.setEnabled(false);
+        remove.setEnabled(false);
+    }
+
+    protected void addField(String s) {
+        s = s.trim();
+        if (forceLowerCase)
+            s = s.toLowerCase();
+        if (s.equals("") || listModel.contains(s))
+            return;
+        
+        String testString = Util.checkLegalKey(s);
+        if (!testString.equals(s) || (s.indexOf('&') >= 0)) {
+            // Report error and exit.
+            JOptionPane.showMessageDialog(this, Globals.lang("Entry type names are not allowed to contain white space or the following "
+                    +"characters")+": # { } ~ , ^ &",
+                    Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+            return;
+        }
+        else if (s.equalsIgnoreCase("comment")) {
+            // Report error and exit.
+            JOptionPane.showMessageDialog(this, Globals.lang("The name 'comment' can not be used as an entry type name."),
+                    Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+            return;
+        }
+        addFieldUncritically(s);
+    }
+    
+    protected void removeSelected() {
+        //super.removeSelected();
+        int[] selected = list.getSelectedIndices();
+        if (selected.length > 0)
+            changesMade = true;
+        for (int i=0; i<selected.length; i++) {
+            String typeName = (String)listModel.get(selected[selected.length-1-i]);
+            BibtexEntryType type = BibtexEntryType.getType(typeName);
+            
+            // If it is a custom entry type, we can remove it. If type == null, it means
+            // the user must have added it and not yet applied it, so we can remove it
+            // in this case as well. If it is a standard type it cannot be removed.
+            if ((type != null) && (type instanceof CustomEntryType)) {
+                listModel.removeElementAt(selected[selected.length-1-i]);
+            }
+            else
+                // This shouldn't happen, since the Remove button should be disabled.
+                JOptionPane.showMessageDialog(null, Globals.lang("This entry type cannot be removed."),
+                        Globals.lang("Remove entry type"), JOptionPane.ERROR_MESSAGE);
+        }
+    }
+    
+    public void valueChanged(ListSelectionEvent e) {
+        if (e.getValueIsAdjusting()) {
+            return;
+        }
+        
+        
+        //
+        
+    }
+
+    public void enable(String typeName, boolean isChanged) {
+        //String s = (String)list.getSelectedValue();
+        
+        if (BibtexEntryType.getStandardType(typeName) != null) {
+            
+            if (isChanged || (BibtexEntryType.getType(typeName) instanceof CustomEntryType)) {
+                def.setEnabled(true);
+            } else
+                def.setEnabled(false);
+            
+            remove.setEnabled(false);
+        } else {
+            def.setEnabled(false);
+            remove.setEnabled(true);
+        }
+    }
+    
+    public void addDefaultActionListener(ActionListener l) {
+        def.addActionListener(l);
+    }
+    
+    public void actionPerformed(ActionEvent e) {
+        // Default button pressed.
+        if (e.getSource() == def)
+            def.setEnabled(false);
+        else super.actionPerformed(e);
+    }
+    
+    public void setEnabled(boolean en) {
+        super.setEnabled(en);
+        def.setEnabled(en);
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/FetcherPreviewDialog.java b/src/java/net/sf/jabref/gui/FetcherPreviewDialog.java
index 8a3bdb6..598815e 100644
--- a/src/java/net/sf/jabref/gui/FetcherPreviewDialog.java
+++ b/src/java/net/sf/jabref/gui/FetcherPreviewDialog.java
@@ -1,271 +1,271 @@
-package net.sf.jabref.gui;
-
-import ca.odell.glazedlists.BasicEventList;
-import ca.odell.glazedlists.EventList;
-import ca.odell.glazedlists.gui.TableFormat;
-import ca.odell.glazedlists.swing.EventSelectionModel;
-import ca.odell.glazedlists.swing.EventTableModel;
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.ButtonStackBuilder;
-import net.sf.jabref.*;
-
-import javax.swing.*;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableModel;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- *
- */
-public class FetcherPreviewDialog extends JDialog implements OutputPrinter {
-
-    protected EventList<TableEntry> entries = new BasicEventList<TableEntry>();
-    //protected SortedList<TableEntry> sortedList;
-    protected JTable glTable;
-    protected JButton ok = new JButton(Globals.lang("Ok")),
-        cancel = new JButton(Globals.lang("Cancel"));
-    protected JButton selectAll = new JButton(Globals.lang("Select all"));
-    protected JButton deselectAll = new JButton(Globals.lang("Deselect all"));
-    protected boolean okPressed = false;
-    private JabRefFrame frame;
-    private int warningLimit;
-
-
-    public FetcherPreviewDialog(JabRefFrame frame, int warningLimit, int tableRowHeight) {
-        super(frame, Globals.lang("Title"), true);
-        this.frame = frame;
-        this.warningLimit = warningLimit;
-
-        ok.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                if (verifySelection()) {
-                    okPressed = true;
-                    dispose();
-                }
-            }
-        });
-        cancel.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                okPressed = false;
-                dispose();
-            }
-        });
-        selectAll.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                setSelectionAll(true);
-            }
-        });
-        deselectAll.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                setSelectionAll(false);
-            }
-        });
-
-        EventTableModel<TableEntry> tableModelGl = new EventTableModel<TableEntry>(entries,
-                    new EntryTableFormat());
-        glTable = new EntryTable(tableModelGl);
-        glTable.setRowHeight(tableRowHeight);
-        glTable.getColumnModel().getColumn(0).setMaxWidth(45);
-        glTable.setPreferredScrollableViewportSize(new Dimension(1100, 600));
-        EventSelectionModel<TableEntry> selectionModel = new EventSelectionModel<TableEntry>(entries);
-        glTable.setSelectionModel(selectionModel);
-        ButtonStackBuilder builder = new ButtonStackBuilder();
-        builder.addButton(selectAll);
-        builder.addButton(deselectAll);
-        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-
-        JPanel centerPan = new JPanel();
-        centerPan.setLayout(new BorderLayout());
-        centerPan.add(new JScrollPane(glTable), BorderLayout.CENTER);
-        centerPan.add(builder.getPanel(), BorderLayout.WEST);
-
-        getContentPane().add(centerPan, BorderLayout.CENTER);
-        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-
-        // Key bindings:
-        AbstractAction closeAction = new AbstractAction() {
-          public void actionPerformed(ActionEvent e) {
-            dispose();
-          }
-        };
-        ActionMap am = centerPan.getActionMap();
-        InputMap im = centerPan.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", closeAction);
-
-        pack();
-
-    }
-
-    /**
-     * Check whether a large number of entries are selected, and if so, ask the user whether
-     * to go on.
-     * @return true if we should go on
-     */
-    public boolean verifySelection() {
-        int selected = 0;
-        for (TableEntry entry : entries) {
-            if (entry.isWanted())
-                selected++;
-        }
-        if (selected > warningLimit) {
-            int result = JOptionPane.showConfirmDialog(this,
-                    Globals.lang("You have selected more than %0 entries for download. Some web sites "
-                    +"might block you if you make too many rapid downloads. Do you want to continue?",
-                            String.valueOf(warningLimit)),
-                    Globals.lang("Confirm selection"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
-            return result == JOptionPane.YES_OPTION;
-        }
-        else return true;
-    }
-
-    public Map<String,Boolean> getSelection() {
-        LinkedHashMap<String, Boolean> selection = new LinkedHashMap<String,Boolean>();
-        for (TableEntry e : entries)
-            selection.put(e.id, e.isWanted());
-        return selection;
-    }
-
-        /* (non-Javadoc)
-	 * @see net.sf.jabref.gui.ImportInspection#addEntry(net.sf.jabref.BibtexEntry)
-	 */
-    public void addEntry(String entryId, JLabel preview) {
-        TableEntry entry = new TableEntry(entryId, preview);
-        this.entries.getReadWriteLock().writeLock().lock();
-        this.entries.add(entry);
-        this.entries.getReadWriteLock().writeLock().unlock();
-        glTable.repaint();
-    }
-
-    public void setSelectionAll(boolean select) {
-        for (int i = 0; i < glTable.getRowCount(); i++) {
-            glTable.setValueAt(select, i, 0);
-        }
-        glTable.repaint();
-    }
-
-
-    class TableEntry {
-        private String id;
-        private JLabel preview;
-        private boolean wanted = false;
-        public TableEntry(String id, JLabel preview) {
-            this.id = id;
-            this.preview = preview;
-        }
-
-        public boolean isWanted() {
-            return wanted;
-        }
-
-        public void setWanted(boolean wanted) {
-            this.wanted = wanted;
-        }
-
-        public JLabel getPreview() {
-            return preview;
-        }
-
-    }
-
-    class PreviewRenderer implements TableCellRenderer {
-        JLabel label = new JLabel();
-        public Component getTableCellRendererComponent(JTable table, Object value,
-                                                       boolean isSelected, boolean hasFocus,
-                                                       int row, int column) {
-            JLabel label = (JLabel)value;
-            this.label.setText(label.getText());
-            return this.label;
-        }
-    }
-
-    class EntryTable extends JTable {
-
-        PreviewRenderer renderer = new PreviewRenderer();
-
-        public EntryTable(TableModel model) {
-            super(model);
-            getTableHeader().setReorderingAllowed(false);
-        }
-
-        public TableCellRenderer getCellRenderer(int row, int column) {
-            return column == 0 ? getDefaultRenderer(Boolean.class) : renderer;
-        }
-
-        /*
-         * public TableCellEditor getCellEditor() { return
-         * getDefaultEditor(Boolean.class); }
-         */
-
-        public Class<?> getColumnClass(int col) {
-            if (col == 0)
-                return Boolean.class;
-            else
-                return JLabel.class;
-        }
-
-        public boolean isCellEditable(int row, int column) {
-            return column == 0;
-        }
-
-        public void setValueAt(Object value, int row, int column) {
-            // Only column 0, which is controlled by BibtexEntry.searchHit, is
-            // editable:
-            entries.getReadWriteLock().writeLock().lock();
-            TableEntry entry = entries.get(row);
-            entry.setWanted(((Boolean) value).booleanValue());
-            entries.getReadWriteLock().writeLock().unlock();
-        }
-    }
-
-    class EntryTableFormat implements TableFormat<TableEntry> {
-
-        public int getColumnCount() {
-            return 2;
-        }
-
-        public String getColumnName(int i) {
-            if (i == 0)
-                return Globals.lang("Keep");
-            else
-                return Globals.lang("Preview");
-        }
-
-        public Object getColumnValue(TableEntry entry, int i) {
-            if (i == 0)
-                return entry.isWanted() ? Boolean.TRUE : Boolean.FALSE;
-            else return entry.getPreview();
-        }
-
-    }
-
-    public boolean isOkPressed() {
-        return okPressed;
-    }
-
-
-    public void setStatus(String s) {
-        frame.setStatus(s);
-    }
-
-
-    public void showMessage(Object message, String title, int msgType) {
-        JOptionPane.showMessageDialog(this, message, title, msgType);
-    }
-
-    public void showMessage(String message) {
-        JOptionPane.showMessageDialog(this, message);
-    }
-}
+package net.sf.jabref.gui;
+
+import ca.odell.glazedlists.BasicEventList;
+import ca.odell.glazedlists.EventList;
+import ca.odell.glazedlists.gui.TableFormat;
+import ca.odell.glazedlists.swing.EventSelectionModel;
+import ca.odell.glazedlists.swing.EventTableModel;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.ButtonStackBuilder;
+import net.sf.jabref.*;
+
+import javax.swing.*;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableModel;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ *
+ */
+public class FetcherPreviewDialog extends JDialog implements OutputPrinter {
+
+    protected EventList<TableEntry> entries = new BasicEventList<TableEntry>();
+    //protected SortedList<TableEntry> sortedList;
+    protected JTable glTable;
+    protected JButton ok = new JButton(Globals.lang("Ok")),
+        cancel = new JButton(Globals.lang("Cancel"));
+    protected JButton selectAll = new JButton(Globals.lang("Select all"));
+    protected JButton deselectAll = new JButton(Globals.lang("Deselect all"));
+    protected boolean okPressed = false;
+    private JabRefFrame frame;
+    private int warningLimit;
+
+
+    public FetcherPreviewDialog(JabRefFrame frame, int warningLimit, int tableRowHeight) {
+        super(frame, Globals.lang("Title"), true);
+        this.frame = frame;
+        this.warningLimit = warningLimit;
+
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                if (verifySelection()) {
+                    okPressed = true;
+                    dispose();
+                }
+            }
+        });
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                okPressed = false;
+                dispose();
+            }
+        });
+        selectAll.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                setSelectionAll(true);
+            }
+        });
+        deselectAll.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                setSelectionAll(false);
+            }
+        });
+
+        EventTableModel<TableEntry> tableModelGl = new EventTableModel<TableEntry>(entries,
+                    new EntryTableFormat());
+        glTable = new EntryTable(tableModelGl);
+        glTable.setRowHeight(tableRowHeight);
+        glTable.getColumnModel().getColumn(0).setMaxWidth(45);
+        glTable.setPreferredScrollableViewportSize(new Dimension(1100, 600));
+        EventSelectionModel<TableEntry> selectionModel = new EventSelectionModel<TableEntry>(entries);
+        glTable.setSelectionModel(selectionModel);
+        ButtonStackBuilder builder = new ButtonStackBuilder();
+        builder.addButton(selectAll);
+        builder.addButton(deselectAll);
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+        JPanel centerPan = new JPanel();
+        centerPan.setLayout(new BorderLayout());
+        centerPan.add(new JScrollPane(glTable), BorderLayout.CENTER);
+        centerPan.add(builder.getPanel(), BorderLayout.WEST);
+
+        getContentPane().add(centerPan, BorderLayout.CENTER);
+        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+
+        // Key bindings:
+        AbstractAction closeAction = new AbstractAction() {
+          public void actionPerformed(ActionEvent e) {
+            dispose();
+          }
+        };
+        ActionMap am = centerPan.getActionMap();
+        InputMap im = centerPan.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", closeAction);
+
+        pack();
+
+    }
+
+    /**
+     * Check whether a large number of entries are selected, and if so, ask the user whether
+     * to go on.
+     * @return true if we should go on
+     */
+    public boolean verifySelection() {
+        int selected = 0;
+        for (TableEntry entry : entries) {
+            if (entry.isWanted())
+                selected++;
+        }
+        if (selected > warningLimit) {
+            int result = JOptionPane.showConfirmDialog(this,
+                    Globals.lang("You have selected more than %0 entries for download. Some web sites "
+                    +"might block you if you make too many rapid downloads. Do you want to continue?",
+                            String.valueOf(warningLimit)),
+                    Globals.lang("Confirm selection"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
+            return result == JOptionPane.YES_OPTION;
+        }
+        else return true;
+    }
+
+    public Map<String,Boolean> getSelection() {
+        LinkedHashMap<String, Boolean> selection = new LinkedHashMap<String,Boolean>();
+        for (TableEntry e : entries)
+            selection.put(e.id, e.isWanted());
+        return selection;
+    }
+
+        /* (non-Javadoc)
+	 * @see net.sf.jabref.gui.ImportInspection#addEntry(net.sf.jabref.BibtexEntry)
+	 */
+    public void addEntry(String entryId, JLabel preview) {
+        TableEntry entry = new TableEntry(entryId, preview);
+        this.entries.getReadWriteLock().writeLock().lock();
+        this.entries.add(entry);
+        this.entries.getReadWriteLock().writeLock().unlock();
+        glTable.repaint();
+    }
+
+    public void setSelectionAll(boolean select) {
+        for (int i = 0; i < glTable.getRowCount(); i++) {
+            glTable.setValueAt(select, i, 0);
+        }
+        glTable.repaint();
+    }
+
+
+    class TableEntry {
+        private String id;
+        private JLabel preview;
+        private boolean wanted = false;
+        public TableEntry(String id, JLabel preview) {
+            this.id = id;
+            this.preview = preview;
+        }
+
+        public boolean isWanted() {
+            return wanted;
+        }
+
+        public void setWanted(boolean wanted) {
+            this.wanted = wanted;
+        }
+
+        public JLabel getPreview() {
+            return preview;
+        }
+
+    }
+
+    class PreviewRenderer implements TableCellRenderer {
+        JLabel label = new JLabel();
+        public Component getTableCellRendererComponent(JTable table, Object value,
+                                                       boolean isSelected, boolean hasFocus,
+                                                       int row, int column) {
+            JLabel label = (JLabel)value;
+            this.label.setText(label.getText());
+            return this.label;
+        }
+    }
+
+    class EntryTable extends JTable {
+
+        PreviewRenderer renderer = new PreviewRenderer();
+
+        public EntryTable(TableModel model) {
+            super(model);
+            getTableHeader().setReorderingAllowed(false);
+        }
+
+        public TableCellRenderer getCellRenderer(int row, int column) {
+            return column == 0 ? getDefaultRenderer(Boolean.class) : renderer;
+        }
+
+        /*
+         * public TableCellEditor getCellEditor() { return
+         * getDefaultEditor(Boolean.class); }
+         */
+
+        public Class<?> getColumnClass(int col) {
+            if (col == 0)
+                return Boolean.class;
+            else
+                return JLabel.class;
+        }
+
+        public boolean isCellEditable(int row, int column) {
+            return column == 0;
+        }
+
+        public void setValueAt(Object value, int row, int column) {
+            // Only column 0, which is controlled by BibtexEntry.searchHit, is
+            // editable:
+            entries.getReadWriteLock().writeLock().lock();
+            TableEntry entry = entries.get(row);
+            entry.setWanted(((Boolean) value).booleanValue());
+            entries.getReadWriteLock().writeLock().unlock();
+        }
+    }
+
+    class EntryTableFormat implements TableFormat<TableEntry> {
+
+        public int getColumnCount() {
+            return 2;
+        }
+
+        public String getColumnName(int i) {
+            if (i == 0)
+                return Globals.lang("Keep");
+            else
+                return Globals.lang("Preview");
+        }
+
+        public Object getColumnValue(TableEntry entry, int i) {
+            if (i == 0)
+                return entry.isWanted() ? Boolean.TRUE : Boolean.FALSE;
+            else return entry.getPreview();
+        }
+
+    }
+
+    public boolean isOkPressed() {
+        return okPressed;
+    }
+
+
+    public void setStatus(String s) {
+        frame.setStatus(s);
+    }
+
+
+    public void showMessage(Object message, String title, int msgType) {
+        JOptionPane.showMessageDialog(this, message, title, msgType);
+    }
+
+    public void showMessage(String message) {
+        JOptionPane.showMessageDialog(this, message);
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/FieldSetComponent.java b/src/java/net/sf/jabref/gui/FieldSetComponent.java
index 1744482..9bb5800 100644
--- a/src/java/net/sf/jabref/gui/FieldSetComponent.java
+++ b/src/java/net/sf/jabref/gui/FieldSetComponent.java
@@ -1,349 +1,349 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.Component;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import javax.swing.*;
-import javax.swing.event.ListDataListener;
-import javax.swing.event.ListSelectionListener;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-
-/**
- *
- * @author alver
- */
-public class FieldSetComponent extends JPanel implements ActionListener {
-
-    protected Set<ActionListener> additionListeners = new HashSet<ActionListener>();
-    protected JList list;
-    protected JScrollPane sp = null;
-    protected DefaultListModel listModel;
-    protected JComboBox sel;
-    protected JTextField input;
-    protected JLabel title = null;
-    protected JButton add, remove, up=null, down=null;
-    protected GridBagLayout gbl = new GridBagLayout();
-    protected GridBagConstraints con = new GridBagConstraints();
-    protected boolean forceLowerCase, changesMade = false;
-    protected Set<ListDataListener> modelListeners = new HashSet<ListDataListener>();
-    
-    /** 
-     * Creates a new instance of FieldSetComponent, with preset selection
-     * values. These are put into a JComboBox.
-     */
-    public FieldSetComponent(String title, List<String> fields, List<String> preset, boolean arrows, boolean forceLowerCase) {
-        this(title, fields, preset, "Add", "Remove", arrows, forceLowerCase);
-    }
-    
-    /**
-     * Creates a new instance of FieldSetComponent without preset selection
-     * values. Replaces the JComboBox with a JTextField.
-     */
-    public FieldSetComponent(String title, List<String> fields, boolean arrows, boolean forceLowerCase) {
-        this(title, fields, null, "Add", "Remove", arrows, forceLowerCase);
-    }
-    
-    public FieldSetComponent(String title, List<String> fields, List<String> preset, String addText, String removeText, 
-            boolean arrows, boolean forceLowerCase) {
-        this.forceLowerCase = forceLowerCase;                
-        add = new JButton(Globals.lang(addText));
-        remove = new JButton(Globals.lang(removeText));
-        listModel = new DefaultListModel();
-        if (title != null)
-            this.title = new JLabel(title);
-        
-        for (String field : fields)
-            listModel.addElement(field);
-        list = new JList(listModel);
-        list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
-        // Set up GUI:
-        add.addActionListener(this);
-        remove.addActionListener(this);
-        
-        
-        setLayout(gbl);
-        con.insets = new Insets(1,1,1,1);
-        con.fill = GridBagConstraints.BOTH;
-        con.weightx = 1;
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        if (this.title != null) {
-            gbl.setConstraints(this.title, con);
-            add(this.title);
-        }
-        
-        con.weighty = 1;
-        sp = new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-        gbl.setConstraints(sp, con);
-        add(sp);
-        con.weighty = 0;
-        con.gridwidth = 1;
-        if (arrows) {
-            con.weightx = 0;
-            up = new JButton(GUIGlobals.getImage("up"));
-            down = new JButton(GUIGlobals.getImage("down"));
-            up.addActionListener(this);
-            down.addActionListener(this);
-            up.setToolTipText(Globals.lang("Move up"));
-            down.setToolTipText(Globals.lang("Move down"));
-            gbl.setConstraints(up, con);
-            add(up);
-            gbl.setConstraints(down, con);
-            add(down);
-            con.weightx = 0;
-        }
-        
-        Component strut = Box.createHorizontalStrut(5);
-        gbl.setConstraints(strut, con);
-        add(strut);        
-        
-        con.weightx = 1;
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        
-        //Component b = Box.createHorizontalGlue();
-        //gbl.setConstraints(b, con);
-        //add(b);
-        
-        //if (!arrows)
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        gbl.setConstraints(remove, con);
-        add(remove);
-
-        con.gridwidth = 3;
-        con.weightx = 1;
-        if (preset != null) {
-            sel = new JComboBox(preset.toArray());
-            sel.setEditable(true);
-            //sel.addActionListener(this);
-            gbl.setConstraints(sel, con);
-            add(sel);
-        } else {
-            input = new JTextField(20);
-            input.addActionListener(this);
-            gbl.setConstraints(input, con);
-            add(input);
-        }
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        con.weighty = 0;
-        con.weightx = 0.5;
-        con.gridwidth = 1;
-        gbl.setConstraints(add, con);
-        add(add);
-        
-    }
-    
-    public void setListSelectionMode(int mode) {
-        list.setSelectionMode(mode);
-    }
-    
-    public void selectField(String fieldName) {
-        int idx = listModel.indexOf(fieldName);
-        if (idx >= 0)
-            list.setSelectedIndex(idx);
-        
-        // Make sure it is visible:
-        JViewport viewport = sp.getViewport();
-        viewport.scrollRectToVisible(list.getCellBounds(idx, idx));
-        
-    }
-    
-    public String getFirstSelected() {
-        Object o = list.getSelectedValue();
-        if (o == null)
-            return null;
-        return (String)o;
-    }
-    
-    public void setEnabled(boolean en) {
-        if (input != null)
-            input.setEnabled(en);
-        if (sel != null)
-            sel.setEnabled(en);
-        if (up != null) {
-            up.setEnabled(en);
-            down.setEnabled(en);
-        }
-        add.setEnabled(en);
-        remove.setEnabled(en);
-    }
-    
-    public void setFields(List<String> fields) {
-        DefaultListModel newListModel = new DefaultListModel();
-        for (String field : fields)
-            newListModel.addElement(field);
-        this.listModel = newListModel;
-        for (Iterator<ListDataListener> i=modelListeners.iterator(); i.hasNext();)
-            newListModel.addListDataListener(i.next());
-        list.setModel(newListModel);
-    }
-
-    /**
-     * This method is called when a new field should be added to the list. Performs validation of the 
-     * field.
-     */
-    protected void addField(String s) {
-        s = s.trim();
-        if (forceLowerCase)
-            s = s.toLowerCase();
-        if (s.equals("") || listModel.contains(s))
-            return;
-        
-        String testString = Util.checkLegalKey(s);
-        if (!testString.equals(s) || (s.indexOf('&') >= 0)) {
-            // Report error and exit.
-            JOptionPane.showMessageDialog(this, Globals.lang("Field names are not allowed to contain white space or the following "
-                    +"characters")+": # { } ~ , ^ &",
-                    Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-            
-            return;
-        }
-        addFieldUncritically(s);
-    }
-
-    /**
-     * This method adds a new field to the list, without any regard to validation. This method can be
-     * useful for classes that overrides addField(s) to provide different validation.
-     */
-    protected void addFieldUncritically(String s) {
-        listModel.addElement(s);
-        changesMade = true;
-        for (Iterator<ActionListener> i=additionListeners.iterator(); i.hasNext();) {
-            i.next().actionPerformed(new ActionEvent(this, 0, s));
-        }
-        
-    }
-    
-    protected void removeSelected() {
-        int[] selected = list.getSelectedIndices();
-        if (selected.length > 0)
-            changesMade = true;
-        for (int i=0; i<selected.length; i++)
-            listModel.removeElementAt(selected[selected.length-1-i]);
-
-    }
-    
-    public void activate() {
-        sel.requestFocus();
-    }
-    
-    /**
-     * Returns true if there have been changes to the field list. Reports true
-     * if changes have been made, regardless of whether the changes cancel each other.
-     */
-    public boolean changesMade() {
-        return changesMade;
-    }
-    
-    /**
-     * Return the current list.
-     */
-    @SuppressWarnings("unchecked")
-	public List<String> getFields() {
-        Object[] o = listModel.toArray();
-        return (List)java.util.Arrays.asList(o);
-    }
-    
-    /**
-     * Add a ListSelectionListener to the JList component displayed as part of this component.
-     */
-    public void addListSelectionListener(ListSelectionListener l) {
-        list.addListSelectionListener(l);
-    }
-    
-    /**
-     * Adds an ActionListener that will receive events each time a field is added. The ActionEvent
-     * will specify this component as source, and the added field as action command.
-     */
-    public void addAdditionActionListener(ActionListener l) {
-        additionListeners.add(l);
-    }
-    
-    public void removeAdditionActionListener(ActionListener l) {
-        additionListeners.remove(l);
-    }
-    
-    public void addListDataListener(ListDataListener l) {
-        listModel.addListDataListener(l);
-        modelListeners.add(l);
-     }
-    
-    /**
-     * If a field is selected in the list, move it dy positions.
-     */
-    public void move(int dy) {
-        int oldIdx = list.getSelectedIndex();
-        if  (oldIdx < 0)
-            return;
-        Object o = listModel.get(oldIdx);
-        // Compute the new index:
-        int newInd = Math.max(0, Math.min(listModel.size()-1, oldIdx+dy));
-        listModel.remove(oldIdx);
-        listModel.add(newInd, o);
-        list.setSelectedIndex(newInd);
-    }
-    
-    public void actionPerformed(ActionEvent e) {
-        Object src = e.getSource();
-        
-        if (src == add) {
-            // Selection has been made, or add button pressed:
-            if ((sel != null) && (sel.getSelectedItem() != null)) {
-                String s = sel.getSelectedItem().toString();
-                addField(s);
-            } else if ((input != null) && !input.getText().equals("")) {
-                addField(input.getText());
-            }
-        }
-        else if (src == input) {
-            addField(input.getText());
-        }
-        else if (src == remove) {
-            // Remove button pressed:
-            removeSelected();
-        }
-        else if (src == sel) {
-            if (e.getActionCommand().equals("comboBoxChanged") && (e.getModifiers() == 0))
-                // These conditions signify arrow key navigation in the dropdown list, so we should
-                // not react to it. I'm not sure if this is well defined enough to be guaranteed to work
-                // everywhere.
-                return;
-            String s = sel.getSelectedItem().toString();
-            addField(s);
-            sel.getEditor().selectAll();
-        }
-        else if (src == up) {
-            move(-1);
-        }
-        else if (src == down) {
-            move(1);
-        }
-    }
-    
-              
-    
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.Component;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.*;
+import javax.swing.event.ListDataListener;
+import javax.swing.event.ListSelectionListener;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+
+/**
+ *
+ * @author alver
+ */
+public class FieldSetComponent extends JPanel implements ActionListener {
+
+    protected Set<ActionListener> additionListeners = new HashSet<ActionListener>();
+    protected JList list;
+    protected JScrollPane sp = null;
+    protected DefaultListModel listModel;
+    protected JComboBox sel;
+    protected JTextField input;
+    protected JLabel title = null;
+    protected JButton add, remove, up=null, down=null;
+    protected GridBagLayout gbl = new GridBagLayout();
+    protected GridBagConstraints con = new GridBagConstraints();
+    protected boolean forceLowerCase, changesMade = false;
+    protected Set<ListDataListener> modelListeners = new HashSet<ListDataListener>();
+    
+    /** 
+     * Creates a new instance of FieldSetComponent, with preset selection
+     * values. These are put into a JComboBox.
+     */
+    public FieldSetComponent(String title, List<String> fields, List<String> preset, boolean arrows, boolean forceLowerCase) {
+        this(title, fields, preset, "Add", "Remove", arrows, forceLowerCase);
+    }
+    
+    /**
+     * Creates a new instance of FieldSetComponent without preset selection
+     * values. Replaces the JComboBox with a JTextField.
+     */
+    public FieldSetComponent(String title, List<String> fields, boolean arrows, boolean forceLowerCase) {
+        this(title, fields, null, "Add", "Remove", arrows, forceLowerCase);
+    }
+    
+    public FieldSetComponent(String title, List<String> fields, List<String> preset, String addText, String removeText, 
+            boolean arrows, boolean forceLowerCase) {
+        this.forceLowerCase = forceLowerCase;                
+        add = new JButton(Globals.lang(addText));
+        remove = new JButton(Globals.lang(removeText));
+        listModel = new DefaultListModel();
+        if (title != null)
+            this.title = new JLabel(title);
+        
+        for (String field : fields)
+            listModel.addElement(field);
+        list = new JList(listModel);
+        list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+        // Set up GUI:
+        add.addActionListener(this);
+        remove.addActionListener(this);
+        
+        
+        setLayout(gbl);
+        con.insets = new Insets(1,1,1,1);
+        con.fill = GridBagConstraints.BOTH;
+        con.weightx = 1;
+        con.gridwidth = GridBagConstraints.REMAINDER;
+        if (this.title != null) {
+            gbl.setConstraints(this.title, con);
+            add(this.title);
+        }
+        
+        con.weighty = 1;
+        sp = new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+        gbl.setConstraints(sp, con);
+        add(sp);
+        con.weighty = 0;
+        con.gridwidth = 1;
+        if (arrows) {
+            con.weightx = 0;
+            up = new JButton(GUIGlobals.getImage("up"));
+            down = new JButton(GUIGlobals.getImage("down"));
+            up.addActionListener(this);
+            down.addActionListener(this);
+            up.setToolTipText(Globals.lang("Move up"));
+            down.setToolTipText(Globals.lang("Move down"));
+            gbl.setConstraints(up, con);
+            add(up);
+            gbl.setConstraints(down, con);
+            add(down);
+            con.weightx = 0;
+        }
+        
+        Component strut = Box.createHorizontalStrut(5);
+        gbl.setConstraints(strut, con);
+        add(strut);        
+        
+        con.weightx = 1;
+        con.gridwidth = GridBagConstraints.REMAINDER;
+        
+        //Component b = Box.createHorizontalGlue();
+        //gbl.setConstraints(b, con);
+        //add(b);
+        
+        //if (!arrows)
+        con.gridwidth = GridBagConstraints.REMAINDER;
+        gbl.setConstraints(remove, con);
+        add(remove);
+
+        con.gridwidth = 3;
+        con.weightx = 1;
+        if (preset != null) {
+            sel = new JComboBox(preset.toArray());
+            sel.setEditable(true);
+            //sel.addActionListener(this);
+            gbl.setConstraints(sel, con);
+            add(sel);
+        } else {
+            input = new JTextField(20);
+            input.addActionListener(this);
+            gbl.setConstraints(input, con);
+            add(input);
+        }
+        con.gridwidth = GridBagConstraints.REMAINDER;
+        con.weighty = 0;
+        con.weightx = 0.5;
+        con.gridwidth = 1;
+        gbl.setConstraints(add, con);
+        add(add);
+        
+    }
+    
+    public void setListSelectionMode(int mode) {
+        list.setSelectionMode(mode);
+    }
+    
+    public void selectField(String fieldName) {
+        int idx = listModel.indexOf(fieldName);
+        if (idx >= 0)
+            list.setSelectedIndex(idx);
+        
+        // Make sure it is visible:
+        JViewport viewport = sp.getViewport();
+        viewport.scrollRectToVisible(list.getCellBounds(idx, idx));
+        
+    }
+    
+    public String getFirstSelected() {
+        Object o = list.getSelectedValue();
+        if (o == null)
+            return null;
+        return (String)o;
+    }
+    
+    public void setEnabled(boolean en) {
+        if (input != null)
+            input.setEnabled(en);
+        if (sel != null)
+            sel.setEnabled(en);
+        if (up != null) {
+            up.setEnabled(en);
+            down.setEnabled(en);
+        }
+        add.setEnabled(en);
+        remove.setEnabled(en);
+    }
+    
+    public void setFields(List<String> fields) {
+        DefaultListModel newListModel = new DefaultListModel();
+        for (String field : fields)
+            newListModel.addElement(field);
+        this.listModel = newListModel;
+        for (Iterator<ListDataListener> i=modelListeners.iterator(); i.hasNext();)
+            newListModel.addListDataListener(i.next());
+        list.setModel(newListModel);
+    }
+
+    /**
+     * This method is called when a new field should be added to the list. Performs validation of the 
+     * field.
+     */
+    protected void addField(String s) {
+        s = s.trim();
+        if (forceLowerCase)
+            s = s.toLowerCase();
+        if (s.equals("") || listModel.contains(s))
+            return;
+        
+        String testString = Util.checkLegalKey(s);
+        if (!testString.equals(s) || (s.indexOf('&') >= 0)) {
+            // Report error and exit.
+            JOptionPane.showMessageDialog(this, Globals.lang("Field names are not allowed to contain white space or the following "
+                    +"characters")+": # { } ~ , ^ &",
+                    Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+            
+            return;
+        }
+        addFieldUncritically(s);
+    }
+
+    /**
+     * This method adds a new field to the list, without any regard to validation. This method can be
+     * useful for classes that overrides addField(s) to provide different validation.
+     */
+    protected void addFieldUncritically(String s) {
+        listModel.addElement(s);
+        changesMade = true;
+        for (Iterator<ActionListener> i=additionListeners.iterator(); i.hasNext();) {
+            i.next().actionPerformed(new ActionEvent(this, 0, s));
+        }
+        
+    }
+    
+    protected void removeSelected() {
+        int[] selected = list.getSelectedIndices();
+        if (selected.length > 0)
+            changesMade = true;
+        for (int i=0; i<selected.length; i++)
+            listModel.removeElementAt(selected[selected.length-1-i]);
+
+    }
+    
+    public void activate() {
+        sel.requestFocus();
+    }
+    
+    /**
+     * Returns true if there have been changes to the field list. Reports true
+     * if changes have been made, regardless of whether the changes cancel each other.
+     */
+    public boolean changesMade() {
+        return changesMade;
+    }
+    
+    /**
+     * Return the current list.
+     */
+    @SuppressWarnings("unchecked")
+	public List<String> getFields() {
+        Object[] o = listModel.toArray();
+        return (List)java.util.Arrays.asList(o);
+    }
+    
+    /**
+     * Add a ListSelectionListener to the JList component displayed as part of this component.
+     */
+    public void addListSelectionListener(ListSelectionListener l) {
+        list.addListSelectionListener(l);
+    }
+    
+    /**
+     * Adds an ActionListener that will receive events each time a field is added. The ActionEvent
+     * will specify this component as source, and the added field as action command.
+     */
+    public void addAdditionActionListener(ActionListener l) {
+        additionListeners.add(l);
+    }
+    
+    public void removeAdditionActionListener(ActionListener l) {
+        additionListeners.remove(l);
+    }
+    
+    public void addListDataListener(ListDataListener l) {
+        listModel.addListDataListener(l);
+        modelListeners.add(l);
+     }
+    
+    /**
+     * If a field is selected in the list, move it dy positions.
+     */
+    public void move(int dy) {
+        int oldIdx = list.getSelectedIndex();
+        if  (oldIdx < 0)
+            return;
+        Object o = listModel.get(oldIdx);
+        // Compute the new index:
+        int newInd = Math.max(0, Math.min(listModel.size()-1, oldIdx+dy));
+        listModel.remove(oldIdx);
+        listModel.add(newInd, o);
+        list.setSelectedIndex(newInd);
+    }
+    
+    public void actionPerformed(ActionEvent e) {
+        Object src = e.getSource();
+        
+        if (src == add) {
+            // Selection has been made, or add button pressed:
+            if ((sel != null) && (sel.getSelectedItem() != null)) {
+                String s = sel.getSelectedItem().toString();
+                addField(s);
+            } else if ((input != null) && !input.getText().equals("")) {
+                addField(input.getText());
+            }
+        }
+        else if (src == input) {
+            addField(input.getText());
+        }
+        else if (src == remove) {
+            // Remove button pressed:
+            removeSelected();
+        }
+        else if (src == sel) {
+            if (e.getActionCommand().equals("comboBoxChanged") && (e.getModifiers() == 0))
+                // These conditions signify arrow key navigation in the dropdown list, so we should
+                // not react to it. I'm not sure if this is well defined enough to be guaranteed to work
+                // everywhere.
+                return;
+            String s = sel.getSelectedItem().toString();
+            addField(s);
+            sel.getEditor().selectAll();
+        }
+        else if (src == up) {
+            move(-1);
+        }
+        else if (src == down) {
+            move(1);
+        }
+    }
+    
+              
+    
+}
diff --git a/src/java/net/sf/jabref/gui/FieldWeightDialog.java b/src/java/net/sf/jabref/gui/FieldWeightDialog.java
index a8e8985..d4c8f06 100644
--- a/src/java/net/sf/jabref/gui/FieldWeightDialog.java
+++ b/src/java/net/sf/jabref/gui/FieldWeightDialog.java
@@ -1,146 +1,146 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.TreeSet;
-
-import javax.swing.*;
-
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Aug 23, 2005
- * Time: 11:30:48 PM
- * To change this template use File | Settings | File Templates.
- */
-public class FieldWeightDialog extends JDialog {
-
-    JabRefFrame frame;
-    HashMap<JSlider, SliderInfo> sliders = new HashMap<JSlider, SliderInfo>();
-    JButton ok = new JButton(Globals.lang("OK")),
-        cancel = new JButton(Globals.lang("Cancel"));
-
-   public static void main(String[] args) {
-        new FieldWeightDialog(null).setVisible(true);
-    }
-
-    public FieldWeightDialog(JabRefFrame frame) {
-        this.frame = frame;
-        JPanel main = buildMainPanel();
-        main.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        getContentPane().add(main, BorderLayout.CENTER);
-        getContentPane().add(buildButtonPanel(), BorderLayout.SOUTH);
-        pack();
-    }
-
-    public JPanel buildMainPanel() {
-        FormLayout layout = new FormLayout
-            ("right:pref, 4dlu, fill:pref, 8dlu, right:pref, 4dlu, fill:pref", // 4dlu, left:pref, 4dlu",
-             "");
-        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-
-        builder.appendSeparator(Globals.lang("Field sizes"));
-
-        // We use this list to build an alphabetical list of field names:
-        TreeSet<String> fields = new TreeSet<String>();
-        // We use this map to remember which slider represents which field name:
-        sliders.clear();
-        for (int i=0, len=BibtexFields.numberOfPublicFields(); i<len; i++)
-        {
-            fields.add(BibtexFields.getFieldName(i));
-        }
-        fields.remove("bibtexkey"); // bibtex key doesn't need weight.
-        // Here is the place to add other fields:
-
-        // --------------
-
-        for (Iterator<String> i=fields.iterator(); i.hasNext();) {
-            String field = i.next();
-            builder.append(field);
-            int weight = (int)(100*BibtexFields.getFieldWeight(field)/GUIGlobals.MAX_FIELD_WEIGHT) ;
-            //System.out.println(weight);
-            JSlider slider = new JSlider(0, 100, weight);//,);
-            sliders.put(slider, new SliderInfo(field, weight));
-            builder.append(slider);
-        }
-        builder.appendSeparator();
-
-        return builder.getPanel();
-
-    }
-
-    public JPanel buildButtonPanel() {
-
-        ok.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                storeSettings();
-                dispose();
-            }
-        });
-        cancel.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                dispose();
-            }
-        });
-
-        ButtonBarBuilder builder = new ButtonBarBuilder();
-        builder.addGlue();
-        builder.addButton(ok);
-        builder.addButton(cancel);
-        builder.addGlue();
-        return builder.getPanel();
-    }
-
-    public void storeSettings() {
-        for (Iterator<JSlider> i=sliders.keySet().iterator(); i.hasNext();) {
-            JSlider slider = i.next();
-            SliderInfo sInfo = sliders.get(slider);
-            // Only list the value if it has changed:
-            if (sInfo.originalValue != slider.getValue()) {
-                double weight = GUIGlobals.MAX_FIELD_WEIGHT*(slider.getValue())/100d;
-                BibtexFields.setFieldWeight(sInfo.fieldName, weight);
-            }
-        }
-        frame.removeCachedEntryEditors();
-    }
-
-    /**
-     * "Struct" class to hold the necessary info about one of our JSliders:
-     * which field it represents, and what value it started out with.
-     */
-    static class SliderInfo {
-        String fieldName;
-        int originalValue;
-        public SliderInfo(String fieldName, int originalValue) {
-            this.fieldName = fieldName;
-            this.originalValue = originalValue;
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.TreeSet;
+
+import javax.swing.*;
+
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Aug 23, 2005
+ * Time: 11:30:48 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class FieldWeightDialog extends JDialog {
+
+    JabRefFrame frame;
+    HashMap<JSlider, SliderInfo> sliders = new HashMap<JSlider, SliderInfo>();
+    JButton ok = new JButton(Globals.lang("OK")),
+        cancel = new JButton(Globals.lang("Cancel"));
+
+   public static void main(String[] args) {
+        new FieldWeightDialog(null).setVisible(true);
+    }
+
+    public FieldWeightDialog(JabRefFrame frame) {
+        this.frame = frame;
+        JPanel main = buildMainPanel();
+        main.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        getContentPane().add(main, BorderLayout.CENTER);
+        getContentPane().add(buildButtonPanel(), BorderLayout.SOUTH);
+        pack();
+    }
+
+    public JPanel buildMainPanel() {
+        FormLayout layout = new FormLayout
+            ("right:pref, 4dlu, fill:pref, 8dlu, right:pref, 4dlu, fill:pref", // 4dlu, left:pref, 4dlu",
+             "");
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+
+        builder.appendSeparator(Globals.lang("Field sizes"));
+
+        // We use this list to build an alphabetical list of field names:
+        TreeSet<String> fields = new TreeSet<String>();
+        // We use this map to remember which slider represents which field name:
+        sliders.clear();
+        for (int i=0, len=BibtexFields.numberOfPublicFields(); i<len; i++)
+        {
+            fields.add(BibtexFields.getFieldName(i));
+        }
+        fields.remove("bibtexkey"); // bibtex key doesn't need weight.
+        // Here is the place to add other fields:
+
+        // --------------
+
+        for (Iterator<String> i=fields.iterator(); i.hasNext();) {
+            String field = i.next();
+            builder.append(field);
+            int weight = (int)(100*BibtexFields.getFieldWeight(field)/GUIGlobals.MAX_FIELD_WEIGHT) ;
+            //System.out.println(weight);
+            JSlider slider = new JSlider(0, 100, weight);//,);
+            sliders.put(slider, new SliderInfo(field, weight));
+            builder.append(slider);
+        }
+        builder.appendSeparator();
+
+        return builder.getPanel();
+
+    }
+
+    public JPanel buildButtonPanel() {
+
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                storeSettings();
+                dispose();
+            }
+        });
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                dispose();
+            }
+        });
+
+        ButtonBarBuilder builder = new ButtonBarBuilder();
+        builder.addGlue();
+        builder.addButton(ok);
+        builder.addButton(cancel);
+        builder.addGlue();
+        return builder.getPanel();
+    }
+
+    public void storeSettings() {
+        for (Iterator<JSlider> i=sliders.keySet().iterator(); i.hasNext();) {
+            JSlider slider = i.next();
+            SliderInfo sInfo = sliders.get(slider);
+            // Only list the value if it has changed:
+            if (sInfo.originalValue != slider.getValue()) {
+                double weight = GUIGlobals.MAX_FIELD_WEIGHT*(slider.getValue())/100d;
+                BibtexFields.setFieldWeight(sInfo.fieldName, weight);
+            }
+        }
+        frame.removeCachedEntryEditors();
+    }
+
+    /**
+     * "Struct" class to hold the necessary info about one of our JSliders:
+     * which field it represents, and what value it started out with.
+     */
+    static class SliderInfo {
+        String fieldName;
+        int originalValue;
+        public SliderInfo(String fieldName, int originalValue) {
+            this.fieldName = fieldName;
+            this.originalValue = originalValue;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/FileDialogs.java b/src/java/net/sf/jabref/gui/FileDialogs.java
index 765951d..06b1fb2 100644
--- a/src/java/net/sf/jabref/gui/FileDialogs.java
+++ b/src/java/net/sf/jabref/gui/FileDialogs.java
@@ -1,219 +1,219 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import net.sf.jabref.OpenFileFilter;
-import net.sf.jabref.Globals;
-
-import javax.swing.*;
-import java.io.File;
-import java.io.FilenameFilter;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Apr 14, 2009
- * Time: 7:24:07 PM
- * To change this template use File | Settings | File Templates.
- */
-public class FileDialogs {
-
-    /**
-     * Will return the names of multiple files selected in the given directory
-     * and the given extensions.
-     *
-     * Will return an empty String array if no entry is found.
-     *
-     * @param owner
-     * @param directory
-     * @param extension
-     * @param updateWorkingdirectory
-     * @return an array of selected file paths, or an empty array if no selection is made.
-     */
-    public static String[] getMultipleFiles(JFrame owner, File directory, String extension,
-                                            boolean updateWorkingdirectory) {
-
-        OpenFileFilter off = null;
-        if (extension == null)
-            off = new OpenFileFilter();
-        else if (!extension.equals(Globals.NONE))
-            off = new OpenFileFilter(extension);
-
-        Object files = getNewFileImpl(owner, directory, extension, null, off,
-                JFileChooser.OPEN_DIALOG, updateWorkingdirectory, false, true, null);
-
-        if (files instanceof String[]) {
-            return (String[]) files;
-        }
-        // Fix for:
-        // http://sourceforge.net/tracker/index.php?func=detail&aid=1538769&group_id=92314&atid=600306
-        if (files != null) {
-            return new String[] { (String) files };
-        }
-        return new String[0];
-    }
-
-    public static String getNewFile(JFrame owner, File directory, String extension, int dialogType,
-                                    boolean updateWorkingDirectory) {
-        return getNewFile(owner, directory, extension, null, dialogType, updateWorkingDirectory,
-                false, null);
-    }
-
-    public static String getNewFile(JFrame owner, File directory, String extension, int dialogType,
-                                    boolean updateWorkingDirectory, JComponent accessory) {
-        return getNewFile(owner, directory, extension, null, dialogType, updateWorkingDirectory,
-                false, accessory);
-    }
-
-    public static String getNewFile(JFrame owner, File directory, String extension,
-                                    String description, int dialogType, boolean updateWorkingDirectory) {
-        return getNewFile(owner, directory, extension, description, dialogType,
-                updateWorkingDirectory, false, null);
-    }
-
-    public static String getNewDir(JFrame owner, File directory, String extension, int dialogType,
-                                   boolean updateWorkingDirectory) {
-        return getNewFile(owner, directory, extension, null, dialogType, updateWorkingDirectory,
-                true, null);
-    }
-
-    public static String getNewDir(JFrame owner, File directory, String extension,
-                                   String description, int dialogType, boolean updateWorkingDirectory) {
-        return getNewFile(owner, directory, extension, description, dialogType,
-                updateWorkingDirectory, true, null);
-    }
-
-    public static String getNewFile(JFrame owner, File directory, String extension,
-                                    String description, int dialogType, boolean updateWorkingDirectory, boolean dirOnly,
-                                    JComponent accessory) {
-
-        OpenFileFilter off = null;
-
-        if (extension == null)
-            off = new OpenFileFilter();
-        else if (!extension.equals(Globals.NONE))
-            off = new OpenFileFilter(extension);
-
-        return (String) getNewFileImpl(owner, directory, extension, description, off, dialogType,
-                updateWorkingDirectory, dirOnly, false, accessory);
-    }
-
-    public static Object getNewFileImpl(JFrame owner, File directory, String extension,
-                                        String description, OpenFileFilter off, int dialogType, boolean updateWorkingDirectory,
-                                        boolean dirOnly, boolean multipleSelection, JComponent accessory) {
-
-// Added the !dirOnly condition below as a workaround to the native file dialog
-// not supporting directory selection:
-        if (!dirOnly && Globals.prefs.getBoolean("useNativeFileDialogOnMac")) {
-
-            return getNewFileForMac(owner, directory, extension, dialogType,
-                    updateWorkingDirectory, dirOnly, off);
-        }
-
-        JFileChooser fc;
-        try {
-            fc = new JFileChooser(directory);//JabRefFileChooser(directory);
-            if (accessory != null)
-                fc.setAccessory(accessory);
-        } catch (InternalError errl) {
-            // This try/catch clause was added because a user reported an
-            // InternalError getting thrown on WinNT, presumably because of a
-            // bug in JGoodies Windows PLAF. This clause can be removed if the
-            // bug is fixed, but for now we just resort to the native file
-            // dialog, using the same method as is always used on Mac:
-            return getNewFileForMac(owner, directory, extension, dialogType,
-                    updateWorkingDirectory, dirOnly, off);
-        }
-
-        if (dirOnly) {
-            fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
-
-        }
-
-        fc.setMultiSelectionEnabled(multipleSelection);
-
-        fc.addChoosableFileFilter(off);
-        fc.setDialogType(dialogType);
-        int dialogResult;
-        if (dialogType == JFileChooser.OPEN_DIALOG) {
-            dialogResult = fc.showOpenDialog(owner);
-        } else if (dialogType == JFileChooser.SAVE_DIALOG) {
-            dialogResult = fc.showSaveDialog(owner);
-        } else {
-            dialogResult = fc.showDialog(owner, description);
-        }
-
-        // the getSelectedFile method returns a valid fileselection
-        // (if something is selected) indepentently from dialog return status
-        if (dialogResult != JFileChooser.APPROVE_OPTION)
-            return null;
-
-        // okay button
-        File selectedFile = fc.getSelectedFile();
-        if (selectedFile == null) { // cancel
-            return null;
-        }
-
-        // If this is a save dialog, and the user has not chosen "All files" as
-        // filter
-        // we enforce the given extension. But only if extension is not null.
-        if ((extension != null) && (dialogType == JFileChooser.SAVE_DIALOG)
-                && (fc.getFileFilter() == off) && !off.accept(selectedFile)) {
-
-            // add the first extension if there are multiple extensions
-            selectedFile = new File(selectedFile.getPath() + extension.split("[, ]+", 0)[0]);
-        }
-
-        if (updateWorkingDirectory) {
-            Globals.prefs.put("workingDirectory", selectedFile.getPath());
-        }
-
-        if (!multipleSelection)
-            return selectedFile.getAbsolutePath();
-        else {
-            File[] files = fc.getSelectedFiles();
-            String[] filenames = new String[files.length];
-            for (int i = 0; i < files.length; i++)
-                filenames[i] = files[i].getAbsolutePath();
-            return filenames;
-        }
-    }
-
-    public static String getNewFileForMac(JFrame owner, File directory, String extensions,
-                                          int dialogType, boolean updateWorkingDirectory, boolean dirOnly, FilenameFilter filter) {
-
-        java.awt.FileDialog fc = new java.awt.FileDialog(owner);
-
-        // fc.setFilenameFilter(filter);
-        if (directory != null) {
-            fc.setDirectory(directory.getParent());
-        }
-        if (dialogType == JFileChooser.OPEN_DIALOG) {
-            fc.setMode(java.awt.FileDialog.LOAD);
-        } else {
-            fc.setMode(java.awt.FileDialog.SAVE);
-        }
-
-        fc.setVisible(true); // fc.show(); -> deprecated since 1.5
-
-        if (fc.getFile() != null) {
-            Globals.prefs.put("workingDirectory", fc.getDirectory() + fc.getFile());
-            return fc.getDirectory() + fc.getFile();
-        } else {
-            return null;
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import net.sf.jabref.OpenFileFilter;
+import net.sf.jabref.Globals;
+
+import javax.swing.*;
+import java.io.File;
+import java.io.FilenameFilter;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Apr 14, 2009
+ * Time: 7:24:07 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class FileDialogs {
+
+    /**
+     * Will return the names of multiple files selected in the given directory
+     * and the given extensions.
+     *
+     * Will return an empty String array if no entry is found.
+     *
+     * @param owner
+     * @param directory
+     * @param extension
+     * @param updateWorkingdirectory
+     * @return an array of selected file paths, or an empty array if no selection is made.
+     */
+    public static String[] getMultipleFiles(JFrame owner, File directory, String extension,
+                                            boolean updateWorkingdirectory) {
+
+        OpenFileFilter off = null;
+        if (extension == null)
+            off = new OpenFileFilter();
+        else if (!extension.equals(Globals.NONE))
+            off = new OpenFileFilter(extension);
+
+        Object files = getNewFileImpl(owner, directory, extension, null, off,
+                JFileChooser.OPEN_DIALOG, updateWorkingdirectory, false, true, null);
+
+        if (files instanceof String[]) {
+            return (String[]) files;
+        }
+        // Fix for:
+        // http://sourceforge.net/tracker/index.php?func=detail&aid=1538769&group_id=92314&atid=600306
+        if (files != null) {
+            return new String[] { (String) files };
+        }
+        return new String[0];
+    }
+
+    public static String getNewFile(JFrame owner, File directory, String extension, int dialogType,
+                                    boolean updateWorkingDirectory) {
+        return getNewFile(owner, directory, extension, null, dialogType, updateWorkingDirectory,
+                false, null);
+    }
+
+    public static String getNewFile(JFrame owner, File directory, String extension, int dialogType,
+                                    boolean updateWorkingDirectory, JComponent accessory) {
+        return getNewFile(owner, directory, extension, null, dialogType, updateWorkingDirectory,
+                false, accessory);
+    }
+
+    public static String getNewFile(JFrame owner, File directory, String extension,
+                                    String description, int dialogType, boolean updateWorkingDirectory) {
+        return getNewFile(owner, directory, extension, description, dialogType,
+                updateWorkingDirectory, false, null);
+    }
+
+    public static String getNewDir(JFrame owner, File directory, String extension, int dialogType,
+                                   boolean updateWorkingDirectory) {
+        return getNewFile(owner, directory, extension, null, dialogType, updateWorkingDirectory,
+                true, null);
+    }
+
+    public static String getNewDir(JFrame owner, File directory, String extension,
+                                   String description, int dialogType, boolean updateWorkingDirectory) {
+        return getNewFile(owner, directory, extension, description, dialogType,
+                updateWorkingDirectory, true, null);
+    }
+
+    public static String getNewFile(JFrame owner, File directory, String extension,
+                                    String description, int dialogType, boolean updateWorkingDirectory, boolean dirOnly,
+                                    JComponent accessory) {
+
+        OpenFileFilter off = null;
+
+        if (extension == null)
+            off = new OpenFileFilter();
+        else if (!extension.equals(Globals.NONE))
+            off = new OpenFileFilter(extension);
+
+        return (String) getNewFileImpl(owner, directory, extension, description, off, dialogType,
+                updateWorkingDirectory, dirOnly, false, accessory);
+    }
+
+    public static Object getNewFileImpl(JFrame owner, File directory, String extension,
+                                        String description, OpenFileFilter off, int dialogType, boolean updateWorkingDirectory,
+                                        boolean dirOnly, boolean multipleSelection, JComponent accessory) {
+
+// Added the !dirOnly condition below as a workaround to the native file dialog
+// not supporting directory selection:
+        if (!dirOnly && Globals.prefs.getBoolean("useNativeFileDialogOnMac")) {
+
+            return getNewFileForMac(owner, directory, extension, dialogType,
+                    updateWorkingDirectory, dirOnly, off);
+        }
+
+        JFileChooser fc;
+        try {
+            fc = new JFileChooser(directory);//JabRefFileChooser(directory);
+            if (accessory != null)
+                fc.setAccessory(accessory);
+        } catch (InternalError errl) {
+            // This try/catch clause was added because a user reported an
+            // InternalError getting thrown on WinNT, presumably because of a
+            // bug in JGoodies Windows PLAF. This clause can be removed if the
+            // bug is fixed, but for now we just resort to the native file
+            // dialog, using the same method as is always used on Mac:
+            return getNewFileForMac(owner, directory, extension, dialogType,
+                    updateWorkingDirectory, dirOnly, off);
+        }
+
+        if (dirOnly) {
+            fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+
+        }
+
+        fc.setMultiSelectionEnabled(multipleSelection);
+
+        fc.addChoosableFileFilter(off);
+        fc.setDialogType(dialogType);
+        int dialogResult;
+        if (dialogType == JFileChooser.OPEN_DIALOG) {
+            dialogResult = fc.showOpenDialog(owner);
+        } else if (dialogType == JFileChooser.SAVE_DIALOG) {
+            dialogResult = fc.showSaveDialog(owner);
+        } else {
+            dialogResult = fc.showDialog(owner, description);
+        }
+
+        // the getSelectedFile method returns a valid fileselection
+        // (if something is selected) indepentently from dialog return status
+        if (dialogResult != JFileChooser.APPROVE_OPTION)
+            return null;
+
+        // okay button
+        File selectedFile = fc.getSelectedFile();
+        if (selectedFile == null) { // cancel
+            return null;
+        }
+
+        // If this is a save dialog, and the user has not chosen "All files" as
+        // filter
+        // we enforce the given extension. But only if extension is not null.
+        if ((extension != null) && (dialogType == JFileChooser.SAVE_DIALOG)
+                && (fc.getFileFilter() == off) && !off.accept(selectedFile)) {
+
+            // add the first extension if there are multiple extensions
+            selectedFile = new File(selectedFile.getPath() + extension.split("[, ]+", 0)[0]);
+        }
+
+        if (updateWorkingDirectory) {
+            Globals.prefs.put("workingDirectory", selectedFile.getPath());
+        }
+
+        if (!multipleSelection)
+            return selectedFile.getAbsolutePath();
+        else {
+            File[] files = fc.getSelectedFiles();
+            String[] filenames = new String[files.length];
+            for (int i = 0; i < files.length; i++)
+                filenames[i] = files[i].getAbsolutePath();
+            return filenames;
+        }
+    }
+
+    public static String getNewFileForMac(JFrame owner, File directory, String extensions,
+                                          int dialogType, boolean updateWorkingDirectory, boolean dirOnly, FilenameFilter filter) {
+
+        java.awt.FileDialog fc = new java.awt.FileDialog(owner);
+
+        // fc.setFilenameFilter(filter);
+        if (directory != null) {
+            fc.setDirectory(directory.getParent());
+        }
+        if (dialogType == JFileChooser.OPEN_DIALOG) {
+            fc.setMode(java.awt.FileDialog.LOAD);
+        } else {
+            fc.setMode(java.awt.FileDialog.SAVE);
+        }
+
+        fc.setVisible(true); // fc.show(); -> deprecated since 1.5
+
+        if (fc.getFile() != null) {
+            Globals.prefs.put("workingDirectory", fc.getDirectory() + fc.getFile());
+            return fc.getDirectory() + fc.getFile();
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/FileListEditor.java b/src/java/net/sf/jabref/gui/FileListEditor.java
index 5ffac62..b17b39f 100644
--- a/src/java/net/sf/jabref/gui/FileListEditor.java
+++ b/src/java/net/sf/jabref/gui/FileListEditor.java
@@ -1,679 +1,679 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Insets;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.awt.dnd.DnDConstants;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.swing.AbstractAction;
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JProgressBar;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.KeyStroke;
-import javax.swing.SwingUtilities;
-import javax.swing.TransferHandler;
-import javax.swing.event.UndoableEditListener;
-
-import net.sf.jabref.*;
-import net.sf.jabref.external.*;
-import net.sf.jabref.groups.EntryTableTransferHandler;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableFieldChange;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Created by Morten O. Alver 2007.02.22
- */
-public class FileListEditor extends JTable implements FieldEditor,
-        DownloadExternalFile.DownloadCallback {
-
-    FieldNameLabel label;
-    FileListEntryEditor editor = null;
-    private JabRefFrame frame;
-    private MetaData metaData;
-    private String fieldName;
-    private EntryEditor entryEditor;
-    private JPanel panel;
-    private FileListTableModel tableModel;
-    private JScrollPane sPane;
-    private JButton add, remove, up, down, auto, download;
-    private JPopupMenu menu = new JPopupMenu();
-
-    private JMenuItem openLink = new JMenuItem(Globals.lang("Open"));
-    private JMenuItem rename = new JMenuItem(Globals.lang("Move/rename file"));
-    private JMenuItem moveToFileDir = new JMenuItem(Globals.lang("Move to file directory"));
-
-    public FileListEditor(JabRefFrame frame, MetaData metaData, String fieldName, String content,
-                          EntryEditor entryEditor) {
-        this.frame = frame;
-        this.metaData = metaData;
-        this.fieldName = fieldName;
-        this.entryEditor = entryEditor;
-        label = new FieldNameLabel(" " + Util.nCase(fieldName) + " ");
-        tableModel = new FileListTableModel();
-        setText(content);
-        setModel(tableModel);
-        sPane = new JScrollPane(this);
-        setTableHeader(null);
-        addMouseListener(new TableClickListener());
-
-        add = new JButton(GUIGlobals.getImage("add"));
-        add.setToolTipText(Globals.lang("New file link (INSERT)"));
-        remove = new JButton(GUIGlobals.getImage("remove"));
-        remove.setToolTipText(Globals.lang("Remove file link (DELETE)"));
-        up = new JButton(GUIGlobals.getImage("up"));
-
-        down = new JButton(GUIGlobals.getImage("down"));
-        auto = new JButton(Globals.lang("Auto"));
-        download = new JButton(Globals.lang("Download"));
-        add.setMargin(new Insets(0,0,0,0));
-        remove.setMargin(new Insets(0,0,0,0));
-        up.setMargin(new Insets(0,0,0,0));
-        down.setMargin(new Insets(0,0,0,0));
-        add.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                addEntry();
-            }
-        });
-        remove.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                removeEntries();
-            }
-        });
-        up.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                moveEntry(-1);
-            }
-        });
-        down.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                moveEntry(1);
-            }
-        });
-        auto.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                autoSetLinks();
-            }
-        });
-        download.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                downloadFile();
-            }
-        });
-        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout
-                ("fill:pref,1dlu,fill:pref,1dlu,fill:pref", "fill:pref,fill:pref"));
-        builder.append(up);
-        builder.append(add);
-        builder.append(auto);
-        builder.append(down);
-        builder.append(remove);
-        builder.append(download);        
-        panel = new JPanel();
-        panel.setLayout(new BorderLayout());
-        panel.add(sPane, BorderLayout.CENTER);
-        panel.add(builder.getPanel(), BorderLayout.EAST);
-
-        TransferHandler th = new FileListEditorTransferHandler(frame, entryEditor, null);
-        setTransferHandler(th);
-        panel.setTransferHandler(th);
-
-        // Add an input/action pair for deleting entries:
-        getInputMap().put(KeyStroke.getKeyStroke("DELETE"), "delete");
-        getActionMap().put("delete", new AbstractAction() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                int row = getSelectedRow();
-                removeEntries();
-                row = Math.min(row, getRowCount()-1);
-                if (row >= 0)
-                    setRowSelectionInterval(row, row);
-            }
-        });
-
-        // Add an input/action pair for inserting an entry:
-        getInputMap().put(KeyStroke.getKeyStroke("INSERT"), "insert");
-        getActionMap().put("insert", new AbstractAction() {
-
-            public void actionPerformed(ActionEvent actionEvent) {
-                addEntry();
-            }
-        });
-
-        // Add input/action pair for moving an entry up:
-        getInputMap().put(Globals.prefs.getKey("File list editor, move entry up"), "move up");
-        getActionMap().put("move up", new AbstractAction() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                moveEntry(-1);
-            }
-        });
-
-        // Add input/action pair for moving an entry down:
-        getInputMap().put(Globals.prefs.getKey("File list editor, move entry down"), "move down");
-        getActionMap().put("move down", new AbstractAction() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                moveEntry(1);
-            }
-        });
-
-        menu.add(openLink);
-        openLink.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                openSelectedFile();
-            }
-        });
-        menu.add(rename);
-        rename.addActionListener(new MoveFileAction(frame, entryEditor, this, false));
-
-        menu.add(moveToFileDir);
-        moveToFileDir.addActionListener(new MoveFileAction(frame, entryEditor, this, true));
-    }
-
-    private void openSelectedFile() {
-        int row = getSelectedRow();
-        if (row >= 0) {
-            FileListEntry entry = tableModel.getEntry(row);
-            try {
-                ExternalFileType type = Globals.prefs.getExternalFileTypeByName(entry.getType().getName());
-                Util.openExternalFileAnyFormat(metaData, entry.getLink(),
-                        type != null ? type : entry.getType());
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    public FileListTableModel getTableModel() {
-        return tableModel;
-    }
-
-    public String getFieldName() {
-        return fieldName;
-    }
-
-    /*
-      * Returns the component to be added to a container. Might be a JScrollPane
-    * or the component itself.
-    */
-    public JComponent getPane() {
-        return panel;
-    }
-
-    /*
-     * Returns the text component itself.
-    */
-    public JComponent getTextComponent() {
-        return this;
-    }
-
-    public JLabel getLabel() {
-        return label;
-    }
-
-    public void setLabelColor(Color c) {
-        label.setForeground(c);
-    }
-
-    public String getText() {
-        return tableModel.getStringRepresentation();
-    }
-
-    public void setText(String newText) {
-        tableModel.setContent(newText);
-    }
-
-
-    public void append(String text) {
-
-    }
-
-    public void updateFont() {
-
-    }
-
-    public void paste(String textToInsert) {
-
-    }
-
-    public String getSelectedText() {
-        return null;
-    }
-
-    private void addEntry(String initialLink) {
-        int row = getSelectedRow();
-        if (row == -1)
-            row = 0;
-        FileListEntry entry = new FileListEntry("", initialLink, null);
-        if (editListEntry(entry, true))
-            tableModel.addEntry(row, entry);
-        entryEditor.updateField(this);
-    }
-
-    private void addEntry() {
-        addEntry("");
-    }
-
-    private void removeEntries() {
-        int[] rows = getSelectedRows();
-        if (rows != null)
-            for (int i = rows.length-1; i>=0; i--) {
-                tableModel.removeEntry(rows[i]);
-            }
-        entryEditor.updateField(this);
-    }
-
-    private void moveEntry(int i) {
-        int[] sel = getSelectedRows();
-        if ((sel.length != 1) || (tableModel.getRowCount() < 2))
-            return;
-        int toIdx = sel[0]+i;
-        if (toIdx >= tableModel.getRowCount())
-            toIdx -= tableModel.getRowCount();
-        if (toIdx < 0)
-            toIdx += tableModel.getRowCount();
-        FileListEntry entry = tableModel.getEntry(sel[0]);
-        tableModel.removeEntry(sel[0]);
-        tableModel.addEntry(toIdx, entry);
-        entryEditor.updateField(this);
-        setRowSelectionInterval(toIdx, toIdx);
-    }
-
-    /**
-     * Open an editor for this entry.
-     * @param entry The entry to edit.
-     * @param openBrowse True to indicate that a Browse dialog should be immediately opened.
-     * @return true if the edit was accepted, false if it was cancelled.
-     */
-    private boolean editListEntry(FileListEntry entry, boolean openBrowse) {
-        if (editor == null) {
-            editor = new FileListEntryEditor(frame, entry, false, true, metaData);
-        }
-        else
-            editor.setEntry(entry);
-        editor.setVisible(true, openBrowse);
-        if (editor.okPressed())
-            tableModel.fireTableDataChanged();
-        entryEditor.updateField(this);
-        return editor.okPressed();
-    }
-
-    private void autoSetLinks() {
-        auto.setEnabled(false);
-        BibtexEntry entry = entryEditor.getEntry();
-        JDialog diag = new JDialog(frame, true);
-        autoSetLinks(entry, tableModel, metaData, new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                auto.setEnabled(true);
-                if (e.getID() > 0) {
-                    entryEditor.updateField(FileListEditor.this);
-                    frame.output(Globals.lang("Finished autosetting external links."));
-                }
-                else frame.output(Globals.lang("Finished autosetting external links.")
-                    +" "+Globals.lang("No files found."));
-            }
-        }, diag);
-
-    }
-
-    /**
-     * Automatically add links for this set of entries, based on the globally stored list of
-     * external file types. The entries are modified, and corresponding UndoEdit elements
-     * added to the NamedCompound given as argument. Furthermore, all entries which are modified
-     * are added to the Set of entries given as an argument.
-     *
-     * The entries' bibtex keys must have been set - entries lacking key are ignored.
-     * The operation is done in a new thread, which is returned for the caller to wait for
-     * if needed.
-     *
-     * @param entries A collection of BibtexEntry objects to find links for.
-     * @param ce A NamedCompound to add UndoEdit elements to.
-     * @param changedEntries A Set of BibtexEntry objects to which all modified entries is added.
-     * @return the thread performing the autosetting
-     */
-    public static Thread autoSetLinks(final Collection<BibtexEntry> entries, final NamedCompound ce,
-                                      final Set<BibtexEntry> changedEntries,
-                                      final ArrayList<File> dirs) {
-
-        Runnable r = new Runnable() {
-
-            public void run() {
-                ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
-                Collection<String> extensions = new ArrayList<String>();
-                for (int i = 0; i < types.length; i++) {
-                    final ExternalFileType type = types[i];
-                    extensions.add(type.getExtension());
-                }
-                // Run the search operation:
-                Map<BibtexEntry, java.util.List<File>> result;
-                if (Globals.prefs.getBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY)) {
-                    String regExp = Globals.prefs.get(JabRefPreferences.REG_EXP_SEARCH_EXPRESSION_KEY);
-                    result = RegExpFileSearch.findFilesForSet(entries, extensions, dirs, regExp);
-                }
-                else
-                    result = Util.findAssociatedFiles(entries, extensions, dirs);
-
-
-                // Iterate over the entries:
-                for (Iterator<BibtexEntry> i=result.keySet().iterator(); i.hasNext();) {
-                    BibtexEntry anEntry = i.next();
-                    FileListTableModel tableModel = new FileListTableModel();
-                    String oldVal = anEntry.getField(GUIGlobals.FILE_FIELD);
-                    if (oldVal != null)
-                        tableModel.setContent(oldVal);
-                    List<File> files = result.get(anEntry);
-                    for (File f : files) {
-			            f = relativizePath(f, dirs);
-                        boolean alreadyHas = false;
-			            //System.out.println("File: "+f.getPath());
-                        for (int j = 0; j < tableModel.getRowCount(); j++) {
-                            FileListEntry existingEntry = tableModel.getEntry(j);
-                            //System.out.println("Comp: "+existingEntry.getLink());
-                            if (new File(existingEntry.getLink()).equals(f)) {
-                                alreadyHas = true;
-                                break;
-                            }
-                        }
-                        if (!alreadyHas) {
-                            int index = f.getPath().lastIndexOf('.');
-                            if ((index >= 0) && (index < f.getPath().length()-1)) {
-                                ExternalFileType type = Globals.prefs.getExternalFileTypeByExt
-                                    (f.getPath().substring(index+1).toLowerCase());
-                                FileListEntry flEntry = new FileListEntry(f.getName(), f.getPath(), type);
-                                tableModel.addEntry(tableModel.getRowCount(), flEntry);
-                            } else {
-                                FileListEntry flEntry = new FileListEntry(f.getName(), f.getPath(),
-                                        new UnknownExternalFileType(""));
-                                tableModel.addEntry(tableModel.getRowCount(), flEntry);
-                            }
-                            String newVal = tableModel.getStringRepresentation();
-                            if (newVal.length() == 0)
-                                newVal = null;
-                            UndoableFieldChange change = new UndoableFieldChange(anEntry,
-                                    GUIGlobals.FILE_FIELD, oldVal, newVal);
-                            ce.addEdit(change);
-                            anEntry.setField(GUIGlobals.FILE_FIELD, newVal);
-                            changedEntries.add(anEntry);
-                        }
-                    }
-                }
-            }
-        };
-        Thread t = new Thread(r);
-        t.start();
-        return t;
-    }
-
-
-    /**
-     * Automatically add links for this entry to the table model given as an argument, based on
-     * the globally stored list of external file types. The entry itself is not modified. The entry's
-     * bibtex key must have been set.
-     * The operation is done in a new thread, which is returned for the caller to wait for
-     * if needed.
-     *
-     * @param entry The BibtexEntry to find links for.
-     * @param tableModel The table model to insert links into. Already existing links are not duplicated or removed.
-     * @param metaData The MetaData providing the relevant file directory, if any.
-     * @param callback An ActionListener that is notified (on the event dispatch thread) when the search is
-     *  finished. The ActionEvent has id=0 if no new links were added, and id=1 if one or more links were added.
-     *  This parameter can be null, which means that no callback will be notified.
-     * @param diag An instantiated modal JDialog which will be used to display the progress of the autosetting.
-     *      This parameter can be null, which means that no progress update will be shown.
-     * @return the thread performing the autosetting
-     */
-    public static Thread autoSetLinks(final BibtexEntry entry, final FileListTableModel tableModel,
-                                      final MetaData metaData, final ActionListener callback,
-                                      final JDialog diag) {
-
-        final Collection<BibtexEntry> entries = new ArrayList<BibtexEntry>();
-        entries.add(entry);
-        final ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
-        final JProgressBar prog = new JProgressBar(JProgressBar.HORIZONTAL, 0, types.length-1);
-        prog.setIndeterminate(true);
-        prog.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        final JLabel label = new JLabel(Globals.lang("Searching for files"));
-        if (diag != null) {
-            diag.setTitle(Globals.lang("Autosetting links"));
-            diag.getContentPane().add(prog, BorderLayout.CENTER);
-            diag.getContentPane().add(label, BorderLayout.SOUTH);
-
-            diag.pack();
-            diag.setLocationRelativeTo(diag.getParent());
-        }
-        Runnable r = new Runnable() {
-
-            public void run() {
-                boolean foundAny = false;
-                ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
-                ArrayList<File> dirs = new ArrayList<File>();
-                String[] dirsS = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
-                for (int i=0; i<dirsS.length; i++) {
-                    dirs.add(new File(dirsS[i]));
-                }
-                Collection<String> extensions = new ArrayList<String>();
-                for (int i = 0; i < types.length; i++) {
-                    final ExternalFileType type = types[i];
-                    extensions.add(type.getExtension());
-                }
-                // Run the search operation:
-                Map<BibtexEntry, java.util.List<File>> result;
-                if (Globals.prefs.getBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY)) {
-                    String regExp = Globals.prefs.get(JabRefPreferences.REG_EXP_SEARCH_EXPRESSION_KEY);
-                    result = RegExpFileSearch.findFilesForSet(entries, extensions, dirs, regExp);
-                }
-                else
-                    result = Util.findAssociatedFiles(entries, extensions, dirs);
-
-                // Iterate over the entries:
-                for (Iterator<BibtexEntry> i=result.keySet().iterator(); i.hasNext();) {
-                    BibtexEntry anEntry = i.next();
-                    List<File> files = result.get(anEntry);
-                    for (File f : files) {
-    			        f = relativizePath(f, dirs);
-                        boolean alreadyHas = false;
-                        for (int j = 0; j < tableModel.getRowCount(); j++) {
-                            FileListEntry existingEntry = tableModel.getEntry(j);
-                            if (new File(existingEntry.getLink()).equals(f)) {
-                                alreadyHas = true;
-                                break;
-                            }
-                        }
-                        if (!alreadyHas) {
-                            int index = f.getPath().lastIndexOf('.');
-                            if ((index >= 0) && (index < f.getPath().length()-1)) {
-                                ExternalFileType type = Globals.prefs.getExternalFileTypeByExt
-                                    (f.getPath().substring(index+1));
-                                FileListEntry flEntry = new FileListEntry(f.getName(), f.getPath(), type);
-                                tableModel.addEntry(tableModel.getRowCount(), flEntry);
-                                foundAny = true;
-                            } else {
-                                FileListEntry flEntry = new FileListEntry(f.getName(), f.getPath(),
-                                        new UnknownExternalFileType(""));
-                                tableModel.addEntry(tableModel.getRowCount(), flEntry);
-                                foundAny = true;
-                            }
-                        }
-                    }
-                }
-                final int id = foundAny ? 1 : 0;
-                SwingUtilities.invokeLater(new Runnable() {
-                    public void run() {
-                        if (diag != null)
-                            diag.dispose();
-                        if (callback != null)
-                            callback.actionPerformed(new ActionEvent(this, id, ""));
-                    }
-                });
-
-            }
-        };
-        Thread t = new Thread(r);
-        t.start();
-        if (diag != null) {
-            diag.setVisible(true);
-        }
-        return t;
-    }
-
-    /**
-     * If the file is below one of the directories in a list, return a File specifying
-     * a path relative to that directory.
-     */
-    public static File relativizePath(File f, ArrayList<File> dirs) {
-	String pth = f.getPath();
-	for (File dir : dirs) {
-	    if ((dir.getPath().length() > 0) && pth.startsWith(dir.getPath())) {
-            String subs = pth.substring(dir.getPath().length());
-            if ((subs.length() > 0) && ((subs.charAt(0) == '/') || (subs.charAt(0) == '\\')))
-                subs = subs.substring(1);
-            return new File(subs);
-	    }
-	}
-	return f;
-    }
-
-
-    /**
-     * Run a file download operation.
-     */
-    private void downloadFile() {
-        String bibtexKey = entryEditor.getEntry().getCiteKey();
-        if (bibtexKey == null) {
-            int answer = JOptionPane.showConfirmDialog(frame,
-                    Globals.lang("This entry has no BibTeX key. Generate key now?"),
-                    Globals.lang("Download file"), JOptionPane.OK_CANCEL_OPTION,
-                    JOptionPane.QUESTION_MESSAGE);
-            if (answer == JOptionPane.OK_OPTION) {
-                ActionListener l = entryEditor.generateKeyAction;
-                l.actionPerformed(null);
-                bibtexKey = entryEditor.getEntry().getCiteKey();
-            }
-        }
-        DownloadExternalFile def = new DownloadExternalFile(frame,
-                frame.basePanel().metaData(), bibtexKey);
-        try {
-            def.download(this);
-        } catch (IOException ex) {
-            ex.printStackTrace();
-        }
-    }
-
-    /**
-     * This is the callback method that the DownloadExternalFile class uses to report the result
-     * of a download operation. This call may never come, if the user cancelled the operation.
-     * @param file The FileListEntry linking to the resulting local file.
-     */
-    public void downloadComplete(FileListEntry file) {
-        tableModel.addEntry(tableModel.getRowCount(), file);
-        entryEditor.updateField(this);
-    }
-
-    class TableClickListener extends MouseAdapter {
-
-        public void mouseClicked(MouseEvent e) {
-            if ((e.getButton() == MouseEvent.BUTTON1) && (e.getClickCount() == 2)) {
-                int row = rowAtPoint(e.getPoint());
-                if (row >= 0) {
-                    FileListEntry entry = tableModel.getEntry(row);
-                    editListEntry(entry, false);
-                }
-            }
-            else if (e.isPopupTrigger())
-                processPopupTrigger(e);
-        }
-
-
-        public void mousePressed(MouseEvent e) {
-            if (e.isPopupTrigger())
-                processPopupTrigger(e);
-        }
-        public void mouseReleased(MouseEvent e) {
-            if (e.isPopupTrigger())
-                processPopupTrigger(e);
-        }
-
-
-        private void processPopupTrigger(MouseEvent e) {
-            int row = rowAtPoint(e.getPoint());
-            if (row >= 0) {
-                setRowSelectionInterval(row, row);
-                menu.show(FileListEditor.this, e.getX(), e.getY());
-            }
-        }
-    }
-
-    public boolean hasUndoInformation() {
-        return false;
-    }
-
-    public void undo() {
-    }
-
-    public boolean hasRedoInformation() {
-        return false;
-    }
-
-    public void redo() {
-    }
-
-    public void addUndoableEditListener(UndoableEditListener listener) {
-    }
-
-    public void setAutoCompleteListener(AutoCompleteListener listener) {
-    }
-
-    public void clearAutoCompleteSuggestion() {
-    }
-
-    public void setActiveBackgroundColor() {
-    }
-
-    public void setValidBackgroundColor() {
-    }
-
-    public void setInvalidBackgroundColor() {
-    }
-
-    public void updateFontColor() {
-    }
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Insets;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.dnd.DnDConstants;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.swing.AbstractAction;
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JProgressBar;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import javax.swing.TransferHandler;
+import javax.swing.event.UndoableEditListener;
+
+import net.sf.jabref.*;
+import net.sf.jabref.external.*;
+import net.sf.jabref.groups.EntryTableTransferHandler;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableFieldChange;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Created by Morten O. Alver 2007.02.22
+ */
+public class FileListEditor extends JTable implements FieldEditor,
+        DownloadExternalFile.DownloadCallback {
+
+    FieldNameLabel label;
+    FileListEntryEditor editor = null;
+    private JabRefFrame frame;
+    private MetaData metaData;
+    private String fieldName;
+    private EntryEditor entryEditor;
+    private JPanel panel;
+    private FileListTableModel tableModel;
+    private JScrollPane sPane;
+    private JButton add, remove, up, down, auto, download;
+    private JPopupMenu menu = new JPopupMenu();
+
+    private JMenuItem openLink = new JMenuItem(Globals.lang("Open"));
+    private JMenuItem rename = new JMenuItem(Globals.lang("Move/rename file"));
+    private JMenuItem moveToFileDir = new JMenuItem(Globals.lang("Move to file directory"));
+
+    public FileListEditor(JabRefFrame frame, MetaData metaData, String fieldName, String content,
+                          EntryEditor entryEditor) {
+        this.frame = frame;
+        this.metaData = metaData;
+        this.fieldName = fieldName;
+        this.entryEditor = entryEditor;
+        label = new FieldNameLabel(" " + Util.nCase(fieldName) + " ");
+        tableModel = new FileListTableModel();
+        setText(content);
+        setModel(tableModel);
+        sPane = new JScrollPane(this);
+        setTableHeader(null);
+        addMouseListener(new TableClickListener());
+
+        add = new JButton(GUIGlobals.getImage("add"));
+        add.setToolTipText(Globals.lang("New file link (INSERT)"));
+        remove = new JButton(GUIGlobals.getImage("remove"));
+        remove.setToolTipText(Globals.lang("Remove file link (DELETE)"));
+        up = new JButton(GUIGlobals.getImage("up"));
+
+        down = new JButton(GUIGlobals.getImage("down"));
+        auto = new JButton(Globals.lang("Auto"));
+        download = new JButton(Globals.lang("Download"));
+        add.setMargin(new Insets(0,0,0,0));
+        remove.setMargin(new Insets(0,0,0,0));
+        up.setMargin(new Insets(0,0,0,0));
+        down.setMargin(new Insets(0,0,0,0));
+        add.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                addEntry();
+            }
+        });
+        remove.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                removeEntries();
+            }
+        });
+        up.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                moveEntry(-1);
+            }
+        });
+        down.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                moveEntry(1);
+            }
+        });
+        auto.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                autoSetLinks();
+            }
+        });
+        download.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                downloadFile();
+            }
+        });
+        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout
+                ("fill:pref,1dlu,fill:pref,1dlu,fill:pref", "fill:pref,fill:pref"));
+        builder.append(up);
+        builder.append(add);
+        builder.append(auto);
+        builder.append(down);
+        builder.append(remove);
+        builder.append(download);        
+        panel = new JPanel();
+        panel.setLayout(new BorderLayout());
+        panel.add(sPane, BorderLayout.CENTER);
+        panel.add(builder.getPanel(), BorderLayout.EAST);
+
+        TransferHandler th = new FileListEditorTransferHandler(frame, entryEditor, null);
+        setTransferHandler(th);
+        panel.setTransferHandler(th);
+
+        // Add an input/action pair for deleting entries:
+        getInputMap().put(KeyStroke.getKeyStroke("DELETE"), "delete");
+        getActionMap().put("delete", new AbstractAction() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                int row = getSelectedRow();
+                removeEntries();
+                row = Math.min(row, getRowCount()-1);
+                if (row >= 0)
+                    setRowSelectionInterval(row, row);
+            }
+        });
+
+        // Add an input/action pair for inserting an entry:
+        getInputMap().put(KeyStroke.getKeyStroke("INSERT"), "insert");
+        getActionMap().put("insert", new AbstractAction() {
+
+            public void actionPerformed(ActionEvent actionEvent) {
+                addEntry();
+            }
+        });
+
+        // Add input/action pair for moving an entry up:
+        getInputMap().put(Globals.prefs.getKey("File list editor, move entry up"), "move up");
+        getActionMap().put("move up", new AbstractAction() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                moveEntry(-1);
+            }
+        });
+
+        // Add input/action pair for moving an entry down:
+        getInputMap().put(Globals.prefs.getKey("File list editor, move entry down"), "move down");
+        getActionMap().put("move down", new AbstractAction() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                moveEntry(1);
+            }
+        });
+
+        menu.add(openLink);
+        openLink.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                openSelectedFile();
+            }
+        });
+        menu.add(rename);
+        rename.addActionListener(new MoveFileAction(frame, entryEditor, this, false));
+
+        menu.add(moveToFileDir);
+        moveToFileDir.addActionListener(new MoveFileAction(frame, entryEditor, this, true));
+    }
+
+    private void openSelectedFile() {
+        int row = getSelectedRow();
+        if (row >= 0) {
+            FileListEntry entry = tableModel.getEntry(row);
+            try {
+                ExternalFileType type = Globals.prefs.getExternalFileTypeByName(entry.getType().getName());
+                Util.openExternalFileAnyFormat(metaData, entry.getLink(),
+                        type != null ? type : entry.getType());
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public FileListTableModel getTableModel() {
+        return tableModel;
+    }
+
+    public String getFieldName() {
+        return fieldName;
+    }
+
+    /*
+      * Returns the component to be added to a container. Might be a JScrollPane
+    * or the component itself.
+    */
+    public JComponent getPane() {
+        return panel;
+    }
+
+    /*
+     * Returns the text component itself.
+    */
+    public JComponent getTextComponent() {
+        return this;
+    }
+
+    public JLabel getLabel() {
+        return label;
+    }
+
+    public void setLabelColor(Color c) {
+        label.setForeground(c);
+    }
+
+    public String getText() {
+        return tableModel.getStringRepresentation();
+    }
+
+    public void setText(String newText) {
+        tableModel.setContent(newText);
+    }
+
+
+    public void append(String text) {
+
+    }
+
+    public void updateFont() {
+
+    }
+
+    public void paste(String textToInsert) {
+
+    }
+
+    public String getSelectedText() {
+        return null;
+    }
+
+    private void addEntry(String initialLink) {
+        int row = getSelectedRow();
+        if (row == -1)
+            row = 0;
+        FileListEntry entry = new FileListEntry("", initialLink, null);
+        if (editListEntry(entry, true))
+            tableModel.addEntry(row, entry);
+        entryEditor.updateField(this);
+    }
+
+    private void addEntry() {
+        addEntry("");
+    }
+
+    private void removeEntries() {
+        int[] rows = getSelectedRows();
+        if (rows != null)
+            for (int i = rows.length-1; i>=0; i--) {
+                tableModel.removeEntry(rows[i]);
+            }
+        entryEditor.updateField(this);
+    }
+
+    private void moveEntry(int i) {
+        int[] sel = getSelectedRows();
+        if ((sel.length != 1) || (tableModel.getRowCount() < 2))
+            return;
+        int toIdx = sel[0]+i;
+        if (toIdx >= tableModel.getRowCount())
+            toIdx -= tableModel.getRowCount();
+        if (toIdx < 0)
+            toIdx += tableModel.getRowCount();
+        FileListEntry entry = tableModel.getEntry(sel[0]);
+        tableModel.removeEntry(sel[0]);
+        tableModel.addEntry(toIdx, entry);
+        entryEditor.updateField(this);
+        setRowSelectionInterval(toIdx, toIdx);
+    }
+
+    /**
+     * Open an editor for this entry.
+     * @param entry The entry to edit.
+     * @param openBrowse True to indicate that a Browse dialog should be immediately opened.
+     * @return true if the edit was accepted, false if it was cancelled.
+     */
+    private boolean editListEntry(FileListEntry entry, boolean openBrowse) {
+        if (editor == null) {
+            editor = new FileListEntryEditor(frame, entry, false, true, metaData);
+        }
+        else
+            editor.setEntry(entry);
+        editor.setVisible(true, openBrowse);
+        if (editor.okPressed())
+            tableModel.fireTableDataChanged();
+        entryEditor.updateField(this);
+        return editor.okPressed();
+    }
+
+    private void autoSetLinks() {
+        auto.setEnabled(false);
+        BibtexEntry entry = entryEditor.getEntry();
+        JDialog diag = new JDialog(frame, true);
+        autoSetLinks(entry, tableModel, metaData, new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                auto.setEnabled(true);
+                if (e.getID() > 0) {
+                    entryEditor.updateField(FileListEditor.this);
+                    frame.output(Globals.lang("Finished autosetting external links."));
+                }
+                else frame.output(Globals.lang("Finished autosetting external links.")
+                    +" "+Globals.lang("No files found."));
+            }
+        }, diag);
+
+    }
+
+    /**
+     * Automatically add links for this set of entries, based on the globally stored list of
+     * external file types. The entries are modified, and corresponding UndoEdit elements
+     * added to the NamedCompound given as argument. Furthermore, all entries which are modified
+     * are added to the Set of entries given as an argument.
+     *
+     * The entries' bibtex keys must have been set - entries lacking key are ignored.
+     * The operation is done in a new thread, which is returned for the caller to wait for
+     * if needed.
+     *
+     * @param entries A collection of BibtexEntry objects to find links for.
+     * @param ce A NamedCompound to add UndoEdit elements to.
+     * @param changedEntries A Set of BibtexEntry objects to which all modified entries is added.
+     * @return the thread performing the autosetting
+     */
+    public static Thread autoSetLinks(final Collection<BibtexEntry> entries, final NamedCompound ce,
+                                      final Set<BibtexEntry> changedEntries,
+                                      final ArrayList<File> dirs) {
+
+        Runnable r = new Runnable() {
+
+            public void run() {
+                ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
+                Collection<String> extensions = new ArrayList<String>();
+                for (int i = 0; i < types.length; i++) {
+                    final ExternalFileType type = types[i];
+                    extensions.add(type.getExtension());
+                }
+                // Run the search operation:
+                Map<BibtexEntry, java.util.List<File>> result;
+                if (Globals.prefs.getBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY)) {
+                    String regExp = Globals.prefs.get(JabRefPreferences.REG_EXP_SEARCH_EXPRESSION_KEY);
+                    result = RegExpFileSearch.findFilesForSet(entries, extensions, dirs, regExp);
+                }
+                else
+                    result = Util.findAssociatedFiles(entries, extensions, dirs);
+
+
+                // Iterate over the entries:
+                for (Iterator<BibtexEntry> i=result.keySet().iterator(); i.hasNext();) {
+                    BibtexEntry anEntry = i.next();
+                    FileListTableModel tableModel = new FileListTableModel();
+                    String oldVal = anEntry.getField(GUIGlobals.FILE_FIELD);
+                    if (oldVal != null)
+                        tableModel.setContent(oldVal);
+                    List<File> files = result.get(anEntry);
+                    for (File f : files) {
+			            f = relativizePath(f, dirs);
+                        boolean alreadyHas = false;
+			            //System.out.println("File: "+f.getPath());
+                        for (int j = 0; j < tableModel.getRowCount(); j++) {
+                            FileListEntry existingEntry = tableModel.getEntry(j);
+                            //System.out.println("Comp: "+existingEntry.getLink());
+                            if (new File(existingEntry.getLink()).equals(f)) {
+                                alreadyHas = true;
+                                break;
+                            }
+                        }
+                        if (!alreadyHas) {
+                            int index = f.getPath().lastIndexOf('.');
+                            if ((index >= 0) && (index < f.getPath().length()-1)) {
+                                ExternalFileType type = Globals.prefs.getExternalFileTypeByExt
+                                    (f.getPath().substring(index+1).toLowerCase());
+                                FileListEntry flEntry = new FileListEntry(f.getName(), f.getPath(), type);
+                                tableModel.addEntry(tableModel.getRowCount(), flEntry);
+                            } else {
+                                FileListEntry flEntry = new FileListEntry(f.getName(), f.getPath(),
+                                        new UnknownExternalFileType(""));
+                                tableModel.addEntry(tableModel.getRowCount(), flEntry);
+                            }
+                            String newVal = tableModel.getStringRepresentation();
+                            if (newVal.length() == 0)
+                                newVal = null;
+                            UndoableFieldChange change = new UndoableFieldChange(anEntry,
+                                    GUIGlobals.FILE_FIELD, oldVal, newVal);
+                            ce.addEdit(change);
+                            anEntry.setField(GUIGlobals.FILE_FIELD, newVal);
+                            changedEntries.add(anEntry);
+                        }
+                    }
+                }
+            }
+        };
+        Thread t = new Thread(r);
+        t.start();
+        return t;
+    }
+
+
+    /**
+     * Automatically add links for this entry to the table model given as an argument, based on
+     * the globally stored list of external file types. The entry itself is not modified. The entry's
+     * bibtex key must have been set.
+     * The operation is done in a new thread, which is returned for the caller to wait for
+     * if needed.
+     *
+     * @param entry The BibtexEntry to find links for.
+     * @param tableModel The table model to insert links into. Already existing links are not duplicated or removed.
+     * @param metaData The MetaData providing the relevant file directory, if any.
+     * @param callback An ActionListener that is notified (on the event dispatch thread) when the search is
+     *  finished. The ActionEvent has id=0 if no new links were added, and id=1 if one or more links were added.
+     *  This parameter can be null, which means that no callback will be notified.
+     * @param diag An instantiated modal JDialog which will be used to display the progress of the autosetting.
+     *      This parameter can be null, which means that no progress update will be shown.
+     * @return the thread performing the autosetting
+     */
+    public static Thread autoSetLinks(final BibtexEntry entry, final FileListTableModel tableModel,
+                                      final MetaData metaData, final ActionListener callback,
+                                      final JDialog diag) {
+
+        final Collection<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+        entries.add(entry);
+        final ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
+        final JProgressBar prog = new JProgressBar(JProgressBar.HORIZONTAL, 0, types.length-1);
+        prog.setIndeterminate(true);
+        prog.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        final JLabel label = new JLabel(Globals.lang("Searching for files"));
+        if (diag != null) {
+            diag.setTitle(Globals.lang("Autosetting links"));
+            diag.getContentPane().add(prog, BorderLayout.CENTER);
+            diag.getContentPane().add(label, BorderLayout.SOUTH);
+
+            diag.pack();
+            diag.setLocationRelativeTo(diag.getParent());
+        }
+        Runnable r = new Runnable() {
+
+            public void run() {
+                boolean foundAny = false;
+                ExternalFileType[] types = Globals.prefs.getExternalFileTypeSelection();
+                ArrayList<File> dirs = new ArrayList<File>();
+                String[] dirsS = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+                for (int i=0; i<dirsS.length; i++) {
+                    dirs.add(new File(dirsS[i]));
+                }
+                Collection<String> extensions = new ArrayList<String>();
+                for (int i = 0; i < types.length; i++) {
+                    final ExternalFileType type = types[i];
+                    extensions.add(type.getExtension());
+                }
+                // Run the search operation:
+                Map<BibtexEntry, java.util.List<File>> result;
+                if (Globals.prefs.getBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY)) {
+                    String regExp = Globals.prefs.get(JabRefPreferences.REG_EXP_SEARCH_EXPRESSION_KEY);
+                    result = RegExpFileSearch.findFilesForSet(entries, extensions, dirs, regExp);
+                }
+                else
+                    result = Util.findAssociatedFiles(entries, extensions, dirs);
+
+                // Iterate over the entries:
+                for (Iterator<BibtexEntry> i=result.keySet().iterator(); i.hasNext();) {
+                    BibtexEntry anEntry = i.next();
+                    List<File> files = result.get(anEntry);
+                    for (File f : files) {
+    			        f = relativizePath(f, dirs);
+                        boolean alreadyHas = false;
+                        for (int j = 0; j < tableModel.getRowCount(); j++) {
+                            FileListEntry existingEntry = tableModel.getEntry(j);
+                            if (new File(existingEntry.getLink()).equals(f)) {
+                                alreadyHas = true;
+                                break;
+                            }
+                        }
+                        if (!alreadyHas) {
+                            int index = f.getPath().lastIndexOf('.');
+                            if ((index >= 0) && (index < f.getPath().length()-1)) {
+                                ExternalFileType type = Globals.prefs.getExternalFileTypeByExt
+                                    (f.getPath().substring(index+1));
+                                FileListEntry flEntry = new FileListEntry(f.getName(), f.getPath(), type);
+                                tableModel.addEntry(tableModel.getRowCount(), flEntry);
+                                foundAny = true;
+                            } else {
+                                FileListEntry flEntry = new FileListEntry(f.getName(), f.getPath(),
+                                        new UnknownExternalFileType(""));
+                                tableModel.addEntry(tableModel.getRowCount(), flEntry);
+                                foundAny = true;
+                            }
+                        }
+                    }
+                }
+                final int id = foundAny ? 1 : 0;
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                        if (diag != null)
+                            diag.dispose();
+                        if (callback != null)
+                            callback.actionPerformed(new ActionEvent(this, id, ""));
+                    }
+                });
+
+            }
+        };
+        Thread t = new Thread(r);
+        t.start();
+        if (diag != null) {
+            diag.setVisible(true);
+        }
+        return t;
+    }
+
+    /**
+     * If the file is below one of the directories in a list, return a File specifying
+     * a path relative to that directory.
+     */
+    public static File relativizePath(File f, ArrayList<File> dirs) {
+	String pth = f.getPath();
+	for (File dir : dirs) {
+	    if ((dir.getPath().length() > 0) && pth.startsWith(dir.getPath())) {
+            String subs = pth.substring(dir.getPath().length());
+            if ((subs.length() > 0) && ((subs.charAt(0) == '/') || (subs.charAt(0) == '\\')))
+                subs = subs.substring(1);
+            return new File(subs);
+	    }
+	}
+	return f;
+    }
+
+
+    /**
+     * Run a file download operation.
+     */
+    private void downloadFile() {
+        String bibtexKey = entryEditor.getEntry().getCiteKey();
+        if (bibtexKey == null) {
+            int answer = JOptionPane.showConfirmDialog(frame,
+                    Globals.lang("This entry has no BibTeX key. Generate key now?"),
+                    Globals.lang("Download file"), JOptionPane.OK_CANCEL_OPTION,
+                    JOptionPane.QUESTION_MESSAGE);
+            if (answer == JOptionPane.OK_OPTION) {
+                ActionListener l = entryEditor.generateKeyAction;
+                l.actionPerformed(null);
+                bibtexKey = entryEditor.getEntry().getCiteKey();
+            }
+        }
+        DownloadExternalFile def = new DownloadExternalFile(frame,
+                frame.basePanel().metaData(), bibtexKey);
+        try {
+            def.download(this);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    /**
+     * This is the callback method that the DownloadExternalFile class uses to report the result
+     * of a download operation. This call may never come, if the user cancelled the operation.
+     * @param file The FileListEntry linking to the resulting local file.
+     */
+    public void downloadComplete(FileListEntry file) {
+        tableModel.addEntry(tableModel.getRowCount(), file);
+        entryEditor.updateField(this);
+    }
+
+    class TableClickListener extends MouseAdapter {
+
+        public void mouseClicked(MouseEvent e) {
+            if ((e.getButton() == MouseEvent.BUTTON1) && (e.getClickCount() == 2)) {
+                int row = rowAtPoint(e.getPoint());
+                if (row >= 0) {
+                    FileListEntry entry = tableModel.getEntry(row);
+                    editListEntry(entry, false);
+                }
+            }
+            else if (e.isPopupTrigger())
+                processPopupTrigger(e);
+        }
+
+
+        public void mousePressed(MouseEvent e) {
+            if (e.isPopupTrigger())
+                processPopupTrigger(e);
+        }
+        public void mouseReleased(MouseEvent e) {
+            if (e.isPopupTrigger())
+                processPopupTrigger(e);
+        }
+
+
+        private void processPopupTrigger(MouseEvent e) {
+            int row = rowAtPoint(e.getPoint());
+            if (row >= 0) {
+                setRowSelectionInterval(row, row);
+                menu.show(FileListEditor.this, e.getX(), e.getY());
+            }
+        }
+    }
+
+    public boolean hasUndoInformation() {
+        return false;
+    }
+
+    public void undo() {
+    }
+
+    public boolean hasRedoInformation() {
+        return false;
+    }
+
+    public void redo() {
+    }
+
+    public void addUndoableEditListener(UndoableEditListener listener) {
+    }
+
+    public void setAutoCompleteListener(AutoCompleteListener listener) {
+    }
+
+    public void clearAutoCompleteSuggestion() {
+    }
+
+    public void setActiveBackgroundColor() {
+    }
+
+    public void setValidBackgroundColor() {
+    }
+
+    public void setInvalidBackgroundColor() {
+    }
+
+    public void updateFontColor() {
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/FileListEditorTransferHandler.java b/src/java/net/sf/jabref/gui/FileListEditorTransferHandler.java
index 397130d..01dbbad 100644
--- a/src/java/net/sf/jabref/gui/FileListEditorTransferHandler.java
+++ b/src/java/net/sf/jabref/gui/FileListEditorTransferHandler.java
@@ -1,179 +1,179 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-package net.sf.jabref.gui;
-
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.awt.dnd.DnDConstants;
-import java.io.File;
-import java.io.IOException;
-import java.io.Reader;
-import java.net.URL;
-import java.util.List;
-
-import javax.swing.JComponent;
-import javax.swing.SwingUtilities;
-import javax.swing.TransferHandler;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.EntryContainer;
-import net.sf.jabref.EntryEditor;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.external.DroppedFileHandler;
-import net.sf.jabref.external.ExternalFileType;
-import net.sf.jabref.groups.EntryTableTransferHandler;
-
-public class FileListEditorTransferHandler extends TransferHandler {
-
-    protected DataFlavor urlFlavor;
-    protected DataFlavor stringFlavor;
-	protected JabRefFrame frame;
-	protected EntryContainer entryContainer;
-	private TransferHandler textTransferHandler;
-	private DroppedFileHandler dfh = null;
-
-	/**
-	 * 
-	 * @param frame
-	 * @param entryContainer
-	 * @param transferHandler is an instance of javax.swing.plaf.basic.BasicTextUI.TextTransferHandler. That class is not visible. Therefore, we have to "cheat"
-	 */
-    public FileListEditorTransferHandler(JabRefFrame frame, EntryContainer entryContainer, TransferHandler textTransferHandler) {
-    	this.frame = frame;
-    	this.entryContainer = entryContainer;
-    	this.textTransferHandler = textTransferHandler;
-        stringFlavor = DataFlavor.stringFlavor;
-        try {
-            urlFlavor = new DataFlavor("application/x-java-url; class=java.net.URL");
-        } catch (ClassNotFoundException e) {
-            Globals.logger("Unable to configure drag and drop for file link table");
-            e.printStackTrace();
-        }
-    }
-    
-    /**
-     * Overridden to indicate which types of drags are supported (only LINK + COPY).
-     * COPY is supported as no support disables CTRL+C (copy of text)
-     */
-    @Override
-    public int getSourceActions(JComponent c) {
-        return DnDConstants.ACTION_LINK | DnDConstants.ACTION_COPY;
-    }
-    
-    @Override
-    public void exportToClipboard(JComponent comp, Clipboard clip, int action) {
-    	if (this.textTransferHandler != null) {
-    		this.textTransferHandler.exportToClipboard(comp, clip, action);
-    	}
-    }
-
-    @SuppressWarnings("unchecked")
-    public boolean importData(JComponent comp, Transferable t) {
-        // If the drop target is the main table, we want to record which
-        // row the item was dropped on, to identify the entry if needed:
-
-        try {
-	
-            List<File> files = null;
-            // This flavor is used for dragged file links in Windows:
-            if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
-                // JOptionPane.showMessageDialog(null, "Received
-                // javaFileListFlavor");
-                files = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
-            }
-
-            if (t.isDataFlavorSupported(urlFlavor)) {
-                URL dropLink = (URL) t.getTransferData(urlFlavor);
-                System.out.println("URL: "+dropLink);
-                //return handleDropTransfer(dropLink, dropRow);
-            }
-
-            // This is used when one or more files are pasted from the file manager
-            // under Gnome. The data consists of the file paths, one file per line:
-            if (t.isDataFlavorSupported(stringFlavor)) {
-                String dropStr = (String)t.getTransferData(stringFlavor);
-                files = EntryTableTransferHandler.getFilesFromDraggedFilesString(dropStr);
-            }
-
-	        if (files != null) {
-	            final List<File> theFiles = files;
-                SwingUtilities.invokeLater(new Runnable() {
-                    public void run() {
-                        //addAll(files);
-                        for (File f : theFiles){
-                            // Find the file's extension, if any:
-                            String name = f.getAbsolutePath();
-                            String extension = "";
-                            ExternalFileType fileType = null;
-                            int index = name.lastIndexOf('.');
-                            if ((index >= 0) && (index < name.length())) {
-                                extension = name.substring(index + 1).toLowerCase();
-                                fileType = Globals.prefs.getExternalFileTypeByExt(extension);
-                            }
-                            if (fileType != null) {
-                            	if (dfh == null) {
-                            		dfh = new DroppedFileHandler(frame, frame.basePanel());
-                            	}
-                                dfh.handleDroppedfile(name, fileType, true, entryContainer.getEntry());
-                            }
-                        }
-                    }
-                });
-                return true;
-            }
-
-        } catch (IOException ioe) {
-            System.err.println("failed to read dropped data: " + ioe.toString());
-        } catch (UnsupportedFlavorException ufe) {
-            System.err.println("drop type error: " + ufe.toString());
-        }
-
-        // all supported flavors failed
-        System.err.println("can't transfer input: ");
-        DataFlavor inflavs[] = t.getTransferDataFlavors();
-        for (int i = 0; i < inflavs.length; i++) {
-            System.out.println("  " + inflavs[i].toString());
-        }
-
-        return false;
-    }
-
-    /**
-     * This method is called to query whether the transfer can be imported.
-     *
-     * Will return true for urls, strings, javaFileLists
-     *
-     * @override
-     */
-    public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
-
-        // accept this if any input flavor matches any of our supported flavors
-        for (int i = 0; i < transferFlavors.length; i++) {
-            DataFlavor inflav = transferFlavors[i];
-            if (inflav.match(urlFlavor) || inflav.match(stringFlavor)
-                || inflav.match(DataFlavor.javaFileListFlavor))
-                return true;
-        }
-
-        // nope, never heard of this type
-        return false;
-    }
-    
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+package net.sf.jabref.gui;
+
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.dnd.DnDConstants;
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.net.URL;
+import java.util.List;
+
+import javax.swing.JComponent;
+import javax.swing.SwingUtilities;
+import javax.swing.TransferHandler;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.EntryContainer;
+import net.sf.jabref.EntryEditor;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.external.DroppedFileHandler;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.groups.EntryTableTransferHandler;
+
+public class FileListEditorTransferHandler extends TransferHandler {
+
+    protected DataFlavor urlFlavor;
+    protected DataFlavor stringFlavor;
+	protected JabRefFrame frame;
+	protected EntryContainer entryContainer;
+	private TransferHandler textTransferHandler;
+	private DroppedFileHandler dfh = null;
+
+	/**
+	 * 
+	 * @param frame
+	 * @param entryContainer
+	 * @param transferHandler is an instance of javax.swing.plaf.basic.BasicTextUI.TextTransferHandler. That class is not visible. Therefore, we have to "cheat"
+	 */
+    public FileListEditorTransferHandler(JabRefFrame frame, EntryContainer entryContainer, TransferHandler textTransferHandler) {
+    	this.frame = frame;
+    	this.entryContainer = entryContainer;
+    	this.textTransferHandler = textTransferHandler;
+        stringFlavor = DataFlavor.stringFlavor;
+        try {
+            urlFlavor = new DataFlavor("application/x-java-url; class=java.net.URL");
+        } catch (ClassNotFoundException e) {
+            Globals.logger("Unable to configure drag and drop for file link table");
+            e.printStackTrace();
+        }
+    }
+    
+    /**
+     * Overridden to indicate which types of drags are supported (only LINK + COPY).
+     * COPY is supported as no support disables CTRL+C (copy of text)
+     */
+    @Override
+    public int getSourceActions(JComponent c) {
+        return DnDConstants.ACTION_LINK | DnDConstants.ACTION_COPY;
+    }
+    
+    @Override
+    public void exportToClipboard(JComponent comp, Clipboard clip, int action) {
+    	if (this.textTransferHandler != null) {
+    		this.textTransferHandler.exportToClipboard(comp, clip, action);
+    	}
+    }
+
+    @SuppressWarnings("unchecked")
+    public boolean importData(JComponent comp, Transferable t) {
+        // If the drop target is the main table, we want to record which
+        // row the item was dropped on, to identify the entry if needed:
+
+        try {
+	
+            List<File> files = null;
+            // This flavor is used for dragged file links in Windows:
+            if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+                // JOptionPane.showMessageDialog(null, "Received
+                // javaFileListFlavor");
+                files = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
+            }
+
+            if (t.isDataFlavorSupported(urlFlavor)) {
+                URL dropLink = (URL) t.getTransferData(urlFlavor);
+                System.out.println("URL: "+dropLink);
+                //return handleDropTransfer(dropLink, dropRow);
+            }
+
+            // This is used when one or more files are pasted from the file manager
+            // under Gnome. The data consists of the file paths, one file per line:
+            if (t.isDataFlavorSupported(stringFlavor)) {
+                String dropStr = (String)t.getTransferData(stringFlavor);
+                files = EntryTableTransferHandler.getFilesFromDraggedFilesString(dropStr);
+            }
+
+	        if (files != null) {
+	            final List<File> theFiles = files;
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                        //addAll(files);
+                        for (File f : theFiles){
+                            // Find the file's extension, if any:
+                            String name = f.getAbsolutePath();
+                            String extension = "";
+                            ExternalFileType fileType = null;
+                            int index = name.lastIndexOf('.');
+                            if ((index >= 0) && (index < name.length())) {
+                                extension = name.substring(index + 1).toLowerCase();
+                                fileType = Globals.prefs.getExternalFileTypeByExt(extension);
+                            }
+                            if (fileType != null) {
+                            	if (dfh == null) {
+                            		dfh = new DroppedFileHandler(frame, frame.basePanel());
+                            	}
+                                dfh.handleDroppedfile(name, fileType, true, entryContainer.getEntry());
+                            }
+                        }
+                    }
+                });
+                return true;
+            }
+
+        } catch (IOException ioe) {
+            System.err.println("failed to read dropped data: " + ioe.toString());
+        } catch (UnsupportedFlavorException ufe) {
+            System.err.println("drop type error: " + ufe.toString());
+        }
+
+        // all supported flavors failed
+        System.err.println("can't transfer input: ");
+        DataFlavor inflavs[] = t.getTransferDataFlavors();
+        for (int i = 0; i < inflavs.length; i++) {
+            System.out.println("  " + inflavs[i].toString());
+        }
+
+        return false;
+    }
+
+    /**
+     * This method is called to query whether the transfer can be imported.
+     *
+     * Will return true for urls, strings, javaFileLists
+     *
+     * @override
+     */
+    public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
+
+        // accept this if any input flavor matches any of our supported flavors
+        for (int i = 0; i < transferFlavors.length; i++) {
+            DataFlavor inflav = transferFlavors[i];
+            if (inflav.match(urlFlavor) || inflav.match(stringFlavor)
+                || inflav.match(DataFlavor.javaFileListFlavor))
+                return true;
+        }
+
+        // nope, never heard of this type
+        return false;
+    }
+    
+}
diff --git a/src/java/net/sf/jabref/gui/FileListEntry.java b/src/java/net/sf/jabref/gui/FileListEntry.java
index f9b94df..fc54f14 100644
--- a/src/java/net/sf/jabref/gui/FileListEntry.java
+++ b/src/java/net/sf/jabref/gui/FileListEntry.java
@@ -1,62 +1,62 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import net.sf.jabref.external.ExternalFileType;
-
-/**
- * This class represents a file link for a Bibtex entry.
-*/
-public class FileListEntry {
-    private String link;
-    private String description;
-    private ExternalFileType type;
-
-    public FileListEntry(String description, String link, ExternalFileType type) {
-        this.link = link;
-        this.description = description;
-        this.type = type;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getLink() {
-        return link;
-    }
-
-    public void setLink(String link) {
-        this.link = link;
-    }
-
-    public ExternalFileType getType() {
-        return type;
-    }
-
-    public void setType(ExternalFileType type) {
-        this.type = type;
-    }
-
-    public String toString() {
-        return description+" : "+link+" : "+type;
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import net.sf.jabref.external.ExternalFileType;
+
+/**
+ * This class represents a file link for a Bibtex entry.
+*/
+public class FileListEntry {
+    private String link;
+    private String description;
+    private ExternalFileType type;
+
+    public FileListEntry(String description, String link, ExternalFileType type) {
+        this.link = link;
+        this.description = description;
+        this.type = type;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public ExternalFileType getType() {
+        return type;
+    }
+
+    public void setType(ExternalFileType type) {
+        this.type = type;
+    }
+
+    public String toString() {
+        return description+" : "+link+" : "+type;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/gui/FileListEntryEditor.java b/src/java/net/sf/jabref/gui/FileListEntryEditor.java
index f71e234..0d6ffe5 100644
--- a/src/java/net/sf/jabref/gui/FileListEntryEditor.java
+++ b/src/java/net/sf/jabref/gui/FileListEntryEditor.java
@@ -1,359 +1,359 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.BorderLayout;
-import java.awt.event.*;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.regex.Pattern;
-
-import javax.swing.*;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.Util;
-import net.sf.jabref.external.ConfirmCloseFileListEntryEditor;
-import net.sf.jabref.external.ExternalFileType;
-import net.sf.jabref.external.UnknownExternalFileType;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-
-/**
- * This class produces a dialog box for editing a single file link from a Bibtex entry.
- *
- * The information to be edited includes the file description, the link itself and the
- * file type. The dialog also includes convenience buttons for quick linking.
- *
- * For use when downloading files, this class also offers a progress bar and a "Downloading..."
- * label that can be hidden when the download is complete.
- */
-public class FileListEntryEditor {
-
-    JDialog diag;
-    JTextField link = new JTextField(), description = new JTextField();
-    JButton ok = new JButton(Globals.lang("Ok")),
-            cancel = new JButton(Globals.lang("Cancel")),
-            open = new JButton(Globals.lang("Open"));
-
-
-    JComboBox types;
-    JProgressBar prog = new JProgressBar(JProgressBar.HORIZONTAL);
-    JLabel downloadLabel = new JLabel(Globals.lang("Downloading..."));
-    ConfirmCloseFileListEntryEditor externalConfirm = null;
-
-    private AbstractAction okAction;
-    private FileListEntry entry;
-    private MetaData metaData;
-    private boolean okPressed = false, okDisabledExternally = false,
-            openBrowseWhenShown = false, dontOpenBrowseUntilDisposed = false;
-
-    public static Pattern remoteLinkPattern = Pattern.compile("[a-z]+://.*");
-
-    public FileListEntryEditor(JabRefFrame frame, FileListEntry entry, boolean showProgressBar,
-                               boolean showOpenButton, MetaData metaData) {
-        this.entry = entry;
-        this.metaData = metaData;
-
-        okAction = new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    // If OK button is disabled, ignore this event:
-                    if (!ok.isEnabled())
-                        return;
-                    // If necessary, ask the external confirm object whether we are ready to close.
-                    if (externalConfirm != null) {
-                        // Construct an updated FileListEntry:
-                        FileListEntry testEntry = new FileListEntry("", "", null);
-                        storeSettings(testEntry);
-                        if (!externalConfirm.confirmClose(testEntry))
-                            return;
-                    }
-                    diag.dispose();
-                    storeSettings(FileListEntryEditor.this.entry);
-                    okPressed = true;
-                }
-            };
-        types = new JComboBox();
-        types.addItemListener(new ItemListener() {
-            public void itemStateChanged(ItemEvent itemEvent) {
-                if (!okDisabledExternally)
-                    ok.setEnabled(types.getSelectedItem() != null);
-            }
-        });
-        
-        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout
-                ("left:pref, 4dlu, fill:150dlu, 4dlu, fill:pref, 4dlu, fill:pref", ""));
-        builder.append(Globals.lang("Link"));
-        builder.append(link);
-        final BrowseListener browse = new BrowseListener(frame, link);
-        final JButton browseBut = new JButton(Globals.lang("Browse"));
-        browseBut.addActionListener(browse);
-        builder.append(browseBut);
-        if (showOpenButton)
-            builder.append(open);
-        builder.nextLine();
-        builder.append(Globals.lang("Description"));
-        builder.append(description, 3);
-        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        builder.nextLine();
-        builder.append(Globals.lang("File type"));
-        builder.append(types, 3);
-        if (showProgressBar) {
-            builder.nextLine();
-            builder.append(downloadLabel);
-            builder.append(prog, 3);
-        }
-        
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        //bb.addButton(open);
-        //bb.addRelatedGap();
-        bb.addRelatedGap();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-
-
-        ok.addActionListener(okAction);
-        // Add OK action to the two text fields to simplify entering:
-        link.addActionListener(okAction);
-        description.addActionListener(okAction);
-
-        open.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                openFile();
-            }
-        });
-
-        AbstractAction cancelAction = new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    diag.dispose();
-                }
-            };
-        cancel.addActionListener(cancelAction);
-
-
-        // Key bindings:
-        ActionMap am = builder.getPanel().getActionMap();
-        InputMap im = builder.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", cancelAction);
-
-        link.getDocument().addDocumentListener(new DocumentListener() {
-            public void insertUpdate(DocumentEvent documentEvent) {
-                checkExtension();
-            }
-            public void removeUpdate(DocumentEvent documentEvent) {
-            }
-            public void changedUpdate(DocumentEvent documentEvent) {
-                checkExtension();
-            }
-
-        });
-
-
-        diag = new JDialog(frame, Globals.lang("Edit file link"), true);
-        diag.getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
-        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-        diag.pack();
-        Util.placeDialog(diag, frame);
-        diag.addWindowListener(new WindowAdapter() {
-            public void windowActivated(WindowEvent event) {
-                if (openBrowseWhenShown && !dontOpenBrowseUntilDisposed) {
-                    dontOpenBrowseUntilDisposed = true;
-                    SwingUtilities.invokeLater(new Runnable() {
-                        public void run() {
-                            browse.actionPerformed(new ActionEvent(browseBut, 0, ""));
-                        }
-                    });
-                }
-            }
-
-            @Override
-            public void windowClosed(WindowEvent event) {
-                dontOpenBrowseUntilDisposed = false;
-            }
-        });
-        setValues(entry);
-    }
-
-    private void checkExtension() {
-        if ((types.getSelectedIndex() == -1) &&
-                (link.getText().trim().length() > 0)) {
-
-            // Check if this looks like a remote link:
-            if (remoteLinkPattern.matcher(link.getText()).matches()) {
-                ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("html");
-                if (type != null) {
-                    types.setSelectedItem(type);
-                    return;
-                }
-            }
-
-            // Try to guess the file type:
-            String theLink = link.getText().trim();
-            ExternalFileType type = Globals.prefs.getExternalFileTypeForName(theLink);
-            if (type != null)
-                types.setSelectedItem(type);
-        }
-    }
-
-    public void openFile() {
-        ExternalFileType type = (ExternalFileType)types.getSelectedItem();
-        if (type != null)
-            try {
-                Util.openExternalFileAnyFormat(metaData, link.getText(), type);
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-    }
-
-    public void setExternalConfirm(ConfirmCloseFileListEntryEditor eC) {
-        this.externalConfirm = eC;
-    }
-
-    public void setOkEnabled(boolean enabled) {
-        okDisabledExternally = !enabled;
-        ok.setEnabled(enabled);
-    }
-
-    public JProgressBar getProgressBar() {
-        return prog;
-    }
-
-    public JLabel getProgressBarLabel() {
-        return downloadLabel;
-    }
-
-    public void setEntry(FileListEntry entry) {
-        this.entry = entry;
-        setValues(entry);
-    }
-
-    public void setVisible(boolean visible, boolean openBrowse) {
-        openBrowseWhenShown = openBrowse && Globals.prefs.getBoolean("allowFileAutoOpenBrowse");
-        if (visible)
-            okPressed = false;
-        diag.setVisible(visible);
-    }
-
-    public boolean isVisible() {
-        return diag != null && diag.isVisible();
-    }
-
-    public void setValues(FileListEntry entry) {
-        description.setText(entry.getDescription());
-        link.setText(entry.getLink());
-        //if (link.getText().length() > 0)
-        //    checkExtension();
-        types.setModel(new DefaultComboBoxModel(Globals.prefs.getExternalFileTypeSelection()));
-        types.setSelectedIndex(-1);
-        // See what is a reasonable selection for the type combobox:
-        if ((entry.getType() != null) && !(entry.getType() instanceof UnknownExternalFileType))
-            types.setSelectedItem(entry.getType());
-        // If the entry has a link but not a file type, try to deduce the file type:
-        else if ((entry.getLink() != null) && (entry.getLink().length() > 0)) {
-            checkExtension();    
-        }
-
-    }
-
-    public void storeSettings(FileListEntry entry) {
-        entry.setDescription(description.getText().trim());
-	// See if we should trim the file link to be relative to the file directory:
-	try {
-        String[] dirs = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
-        if (dirs.length == 0) {
-            entry.setLink(link.getText().trim());
-        } else {
-            boolean found = false;
-            for (int i=0; i<dirs.length; i++) {
-                String canPath = (new File(dirs[i])).getCanonicalPath();
-                File fl = new File(link.getText().trim());
-                if (fl.isAbsolute()) {
-                    String flPath = fl.getCanonicalPath();
-                    if ((flPath.length() > canPath.length()) && (flPath.startsWith(canPath))) {
-                        String relFileName = fl.getCanonicalPath().substring(canPath.length()+1);
-                        entry.setLink(relFileName);
-                        found = true;
-                        break;
-                    }
-                }
-            }
-            if (!found)
-                entry.setLink(link.getText().trim());
-        }
-    } catch (java.io.IOException ex)
-	{ 
-		ex.printStackTrace();
-		// Don't think this should happen, but set the file link directly as a fallback:
-		entry.setLink(link.getText().trim());
-	}
-	
-        entry.setType((ExternalFileType)types.getSelectedItem());
-    }
-
-    public boolean okPressed() {
-        return okPressed;
-    }
-
-    class BrowseListener implements ActionListener {
-        private JFrame parent;
-        private JTextField comp;
-
-        public BrowseListener(JFrame parent, JTextField comp) {
-            this.parent = parent;
-            this.comp = comp;
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            File initial = new File(comp.getText().trim());
-            if (comp.getText().trim().length() == 0) {
-                // Nothing in the field. Go to the last file dir used:
-                initial = new File(Globals.prefs.get("fileWorkingDirectory"));
-            }
-            String chosen = FileDialogs.getNewFile(parent, initial, Globals.NONE,
-                JFileChooser.OPEN_DIALOG, false);
-            if (chosen != null) {
-                File newFile = new File(chosen);
-                // Store the directory for next time:
-                Globals.prefs.put("fileWorkingDirectory", newFile.getParent());
-
-                // If the file is below the file directory, make the path relative:
-                ArrayList<File> dirs = new ArrayList<File>();
-                String[] dirsS = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
-                for (int i=0; i<dirsS.length; i++)
-                    dirs.add(new File(dirsS[i]));
-                if (dirs.size() > 0) {
-                    newFile = FileListEditor.relativizePath(newFile, dirs);
-                }
-
-                comp.setText(newFile.getPath());
-                comp.requestFocus();
-            }
-        }
-    }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.BorderLayout;
+import java.awt.event.*;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.regex.Pattern;
+
+import javax.swing.*;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.Util;
+import net.sf.jabref.external.ConfirmCloseFileListEntryEditor;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.external.UnknownExternalFileType;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+
+/**
+ * This class produces a dialog box for editing a single file link from a Bibtex entry.
+ *
+ * The information to be edited includes the file description, the link itself and the
+ * file type. The dialog also includes convenience buttons for quick linking.
+ *
+ * For use when downloading files, this class also offers a progress bar and a "Downloading..."
+ * label that can be hidden when the download is complete.
+ */
+public class FileListEntryEditor {
+
+    JDialog diag;
+    JTextField link = new JTextField(), description = new JTextField();
+    JButton ok = new JButton(Globals.lang("Ok")),
+            cancel = new JButton(Globals.lang("Cancel")),
+            open = new JButton(Globals.lang("Open"));
+
+
+    JComboBox types;
+    JProgressBar prog = new JProgressBar(JProgressBar.HORIZONTAL);
+    JLabel downloadLabel = new JLabel(Globals.lang("Downloading..."));
+    ConfirmCloseFileListEntryEditor externalConfirm = null;
+
+    private AbstractAction okAction;
+    private FileListEntry entry;
+    private MetaData metaData;
+    private boolean okPressed = false, okDisabledExternally = false,
+            openBrowseWhenShown = false, dontOpenBrowseUntilDisposed = false;
+
+    public static Pattern remoteLinkPattern = Pattern.compile("[a-z]+://.*");
+
+    public FileListEntryEditor(JabRefFrame frame, FileListEntry entry, boolean showProgressBar,
+                               boolean showOpenButton, MetaData metaData) {
+        this.entry = entry;
+        this.metaData = metaData;
+
+        okAction = new AbstractAction() {
+                public void actionPerformed(ActionEvent e) {
+                    // If OK button is disabled, ignore this event:
+                    if (!ok.isEnabled())
+                        return;
+                    // If necessary, ask the external confirm object whether we are ready to close.
+                    if (externalConfirm != null) {
+                        // Construct an updated FileListEntry:
+                        FileListEntry testEntry = new FileListEntry("", "", null);
+                        storeSettings(testEntry);
+                        if (!externalConfirm.confirmClose(testEntry))
+                            return;
+                    }
+                    diag.dispose();
+                    storeSettings(FileListEntryEditor.this.entry);
+                    okPressed = true;
+                }
+            };
+        types = new JComboBox();
+        types.addItemListener(new ItemListener() {
+            public void itemStateChanged(ItemEvent itemEvent) {
+                if (!okDisabledExternally)
+                    ok.setEnabled(types.getSelectedItem() != null);
+            }
+        });
+        
+        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout
+                ("left:pref, 4dlu, fill:150dlu, 4dlu, fill:pref, 4dlu, fill:pref", ""));
+        builder.append(Globals.lang("Link"));
+        builder.append(link);
+        final BrowseListener browse = new BrowseListener(frame, link);
+        final JButton browseBut = new JButton(Globals.lang("Browse"));
+        browseBut.addActionListener(browse);
+        builder.append(browseBut);
+        if (showOpenButton)
+            builder.append(open);
+        builder.nextLine();
+        builder.append(Globals.lang("Description"));
+        builder.append(description, 3);
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        builder.nextLine();
+        builder.append(Globals.lang("File type"));
+        builder.append(types, 3);
+        if (showProgressBar) {
+            builder.nextLine();
+            builder.append(downloadLabel);
+            builder.append(prog, 3);
+        }
+        
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        //bb.addButton(open);
+        //bb.addRelatedGap();
+        bb.addRelatedGap();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+
+
+        ok.addActionListener(okAction);
+        // Add OK action to the two text fields to simplify entering:
+        link.addActionListener(okAction);
+        description.addActionListener(okAction);
+
+        open.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                openFile();
+            }
+        });
+
+        AbstractAction cancelAction = new AbstractAction() {
+                public void actionPerformed(ActionEvent e) {
+                    diag.dispose();
+                }
+            };
+        cancel.addActionListener(cancelAction);
+
+
+        // Key bindings:
+        ActionMap am = builder.getPanel().getActionMap();
+        InputMap im = builder.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", cancelAction);
+
+        link.getDocument().addDocumentListener(new DocumentListener() {
+            public void insertUpdate(DocumentEvent documentEvent) {
+                checkExtension();
+            }
+            public void removeUpdate(DocumentEvent documentEvent) {
+            }
+            public void changedUpdate(DocumentEvent documentEvent) {
+                checkExtension();
+            }
+
+        });
+
+
+        diag = new JDialog(frame, Globals.lang("Edit file link"), true);
+        diag.getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
+        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        diag.pack();
+        Util.placeDialog(diag, frame);
+        diag.addWindowListener(new WindowAdapter() {
+            public void windowActivated(WindowEvent event) {
+                if (openBrowseWhenShown && !dontOpenBrowseUntilDisposed) {
+                    dontOpenBrowseUntilDisposed = true;
+                    SwingUtilities.invokeLater(new Runnable() {
+                        public void run() {
+                            browse.actionPerformed(new ActionEvent(browseBut, 0, ""));
+                        }
+                    });
+                }
+            }
+
+            @Override
+            public void windowClosed(WindowEvent event) {
+                dontOpenBrowseUntilDisposed = false;
+            }
+        });
+        setValues(entry);
+    }
+
+    private void checkExtension() {
+        if ((types.getSelectedIndex() == -1) &&
+                (link.getText().trim().length() > 0)) {
+
+            // Check if this looks like a remote link:
+            if (remoteLinkPattern.matcher(link.getText()).matches()) {
+                ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("html");
+                if (type != null) {
+                    types.setSelectedItem(type);
+                    return;
+                }
+            }
+
+            // Try to guess the file type:
+            String theLink = link.getText().trim();
+            ExternalFileType type = Globals.prefs.getExternalFileTypeForName(theLink);
+            if (type != null)
+                types.setSelectedItem(type);
+        }
+    }
+
+    public void openFile() {
+        ExternalFileType type = (ExternalFileType)types.getSelectedItem();
+        if (type != null)
+            try {
+                Util.openExternalFileAnyFormat(metaData, link.getText(), type);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+    }
+
+    public void setExternalConfirm(ConfirmCloseFileListEntryEditor eC) {
+        this.externalConfirm = eC;
+    }
+
+    public void setOkEnabled(boolean enabled) {
+        okDisabledExternally = !enabled;
+        ok.setEnabled(enabled);
+    }
+
+    public JProgressBar getProgressBar() {
+        return prog;
+    }
+
+    public JLabel getProgressBarLabel() {
+        return downloadLabel;
+    }
+
+    public void setEntry(FileListEntry entry) {
+        this.entry = entry;
+        setValues(entry);
+    }
+
+    public void setVisible(boolean visible, boolean openBrowse) {
+        openBrowseWhenShown = openBrowse && Globals.prefs.getBoolean("allowFileAutoOpenBrowse");
+        if (visible)
+            okPressed = false;
+        diag.setVisible(visible);
+    }
+
+    public boolean isVisible() {
+        return diag != null && diag.isVisible();
+    }
+
+    public void setValues(FileListEntry entry) {
+        description.setText(entry.getDescription());
+        link.setText(entry.getLink());
+        //if (link.getText().length() > 0)
+        //    checkExtension();
+        types.setModel(new DefaultComboBoxModel(Globals.prefs.getExternalFileTypeSelection()));
+        types.setSelectedIndex(-1);
+        // See what is a reasonable selection for the type combobox:
+        if ((entry.getType() != null) && !(entry.getType() instanceof UnknownExternalFileType))
+            types.setSelectedItem(entry.getType());
+        // If the entry has a link but not a file type, try to deduce the file type:
+        else if ((entry.getLink() != null) && (entry.getLink().length() > 0)) {
+            checkExtension();    
+        }
+
+    }
+
+    public void storeSettings(FileListEntry entry) {
+        entry.setDescription(description.getText().trim());
+	// See if we should trim the file link to be relative to the file directory:
+	try {
+        String[] dirs = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+        if (dirs.length == 0) {
+            entry.setLink(link.getText().trim());
+        } else {
+            boolean found = false;
+            for (int i=0; i<dirs.length; i++) {
+                String canPath = (new File(dirs[i])).getCanonicalPath();
+                File fl = new File(link.getText().trim());
+                if (fl.isAbsolute()) {
+                    String flPath = fl.getCanonicalPath();
+                    if ((flPath.length() > canPath.length()) && (flPath.startsWith(canPath))) {
+                        String relFileName = fl.getCanonicalPath().substring(canPath.length()+1);
+                        entry.setLink(relFileName);
+                        found = true;
+                        break;
+                    }
+                }
+            }
+            if (!found)
+                entry.setLink(link.getText().trim());
+        }
+    } catch (java.io.IOException ex)
+	{ 
+		ex.printStackTrace();
+		// Don't think this should happen, but set the file link directly as a fallback:
+		entry.setLink(link.getText().trim());
+	}
+	
+        entry.setType((ExternalFileType)types.getSelectedItem());
+    }
+
+    public boolean okPressed() {
+        return okPressed;
+    }
+
+    class BrowseListener implements ActionListener {
+        private JFrame parent;
+        private JTextField comp;
+
+        public BrowseListener(JFrame parent, JTextField comp) {
+            this.parent = parent;
+            this.comp = comp;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            File initial = new File(comp.getText().trim());
+            if (comp.getText().trim().length() == 0) {
+                // Nothing in the field. Go to the last file dir used:
+                initial = new File(Globals.prefs.get("fileWorkingDirectory"));
+            }
+            String chosen = FileDialogs.getNewFile(parent, initial, Globals.NONE,
+                JFileChooser.OPEN_DIALOG, false);
+            if (chosen != null) {
+                File newFile = new File(chosen);
+                // Store the directory for next time:
+                Globals.prefs.put("fileWorkingDirectory", newFile.getParent());
+
+                // If the file is below the file directory, make the path relative:
+                ArrayList<File> dirs = new ArrayList<File>();
+                String[] dirsS = metaData.getFileDirectory(GUIGlobals.FILE_FIELD);
+                for (int i=0; i<dirsS.length; i++)
+                    dirs.add(new File(dirsS[i]));
+                if (dirs.size() > 0) {
+                    newFile = FileListEditor.relativizePath(newFile, dirs);
+                }
+
+                comp.setText(newFile.getPath());
+                comp.requestFocus();
+            }
+        }
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/gui/FileListTableModel.java b/src/java/net/sf/jabref/gui/FileListTableModel.java
index 9d532f4..24d545b 100644
--- a/src/java/net/sf/jabref/gui/FileListTableModel.java
+++ b/src/java/net/sf/jabref/gui/FileListTableModel.java
@@ -1,295 +1,295 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import javax.swing.JLabel;
-import javax.swing.SwingUtilities;
-import javax.swing.event.TableModelEvent;
-import javax.swing.table.AbstractTableModel;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.external.ExternalFileType;
-import net.sf.jabref.external.UnknownExternalFileType;
-
-/**
- * Data structure to contain a list of file links, parseable from a coded string.
- * Doubles as a table model for the file list editor.
-*/
-public class FileListTableModel extends AbstractTableModel {
-
-    private final ArrayList<FileListEntry> list = new ArrayList<FileListEntry>();
-
-    public FileListTableModel() {
-    }
-
-    public int getRowCount() {
-        synchronized (list) {
-            return list.size();
-        }
-    }
-
-    public int getColumnCount() {
-        return 3;
-    }
-
-    public Class<String> getColumnClass(int columnIndex) {
-        return String.class;
-    }
-
-    public Object getValueAt(int rowIndex, int columnIndex) {
-        synchronized (list) {
-            FileListEntry entry = list.get(rowIndex);
-            switch (columnIndex) {
-                case 0: return entry.getDescription();
-                case 1: return entry.getLink();
-                default: return entry.getType() != null ?
-                        entry.getType().getName() : "";
-            }
-        }
-    }
-
-    public FileListEntry getEntry(int index) {
-        synchronized (list) {
-            return list.get(index);
-        }
-    }
-
-    public void removeEntry(int index) {
-        synchronized (list) {
-            list.remove(index);
-            fireTableRowsDeleted(index, index);
-        }
-
-    }
-
-    /**
-     * Add an entry to the table model, and fire a change event. The change event
-     * is fired on the event dispatch thread.
-     * @param index The row index to insert the entry at.
-     * @param entry The entry to insert.
-     */
-    public void addEntry(final int index, final FileListEntry entry) {
-        synchronized (list) {
-            list.add(index, entry);
-            if (!SwingUtilities.isEventDispatchThread()) {
-                SwingUtilities.invokeLater(new Runnable() {
-                    public void run() {
-                        fireTableRowsInserted(index, index);
-                    }
-                });
-            } else
-                fireTableRowsInserted(index, index);
-        }
-
-    }
-
-    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
-    }
-
-    /**
-     * Set up the table contents based on the flat string representation of the file list
-     * @param value The string representation
-     */
-    public void setContent(String value) {
-        setContent(value, false, true);
-    }
-
-    public void setContentDontGuessTypes(String value) {
-        setContent(value, false, false);
-    }
-
-    private FileListEntry setContent(String value, boolean firstOnly, boolean deduceUnknownTypes) {
-        if (value == null)
-            value = "";
-        ArrayList<FileListEntry> newList = new ArrayList<FileListEntry>();
-        StringBuilder sb = new StringBuilder();
-        ArrayList<String> thisEntry = new ArrayList<String>();
-        boolean inXmlChar = false;
-        boolean escaped = false;
-        for (int i=0; i<value.length(); i++) {
-            char c = value.charAt(i);
-            if (!escaped && (c == '\\')) {
-                escaped = true;
-                continue;
-            }
-            // Check if we are entering an XML special character construct such
-            // as ",", because we need to know in order to ignore the semicolon.
-            else if (!escaped && (c == '&') && !inXmlChar) {
-                sb.append(c);
-                if ((value.length() > i+1) && (value.charAt(i+1) == '#'))
-                    inXmlChar = true;
-            }
-            // Check if we are exiting an XML special character construct:
-            else if (!escaped && inXmlChar && (c == ';')) {
-                sb.append(c);
-                inXmlChar = false;
-            }
-            else if (!escaped && (c == ':')) {
-                thisEntry.add(sb.toString());
-                sb = new StringBuilder();
-            }
-            else if (!escaped && (c == ';') && !inXmlChar) {
-                thisEntry.add(sb.toString());
-                sb = new StringBuilder();
-                if (firstOnly)
-                    return decodeEntry(thisEntry, deduceUnknownTypes);
-                else {
-                    newList.add(decodeEntry(thisEntry, deduceUnknownTypes));
-                    thisEntry.clear();
-                }
-            }
-            else sb.append(c);
-            escaped = false;
-        }
-        if (sb.length() > 0)
-            thisEntry.add(sb.toString());
-        if (thisEntry.size() > 0) {
-            if (firstOnly)
-                return decodeEntry(thisEntry, deduceUnknownTypes);
-            else
-                newList.add(decodeEntry(thisEntry, deduceUnknownTypes));
-        }
-          
-        synchronized (list) {
-            list.clear();
-            list.addAll(newList);
-        }
-        fireTableChanged(new TableModelEvent(this));
-        return null;
-    }
-
-    /**
-     * Convenience method for finding a label corresponding to the type of the
-     * first file link in the given field content. The difference between using
-     * this method and using setContent() on an instance of FileListTableModel
-     * is a slight optimization: with this method, parsing is discontinued after
-     * the first entry has been found.
-     * @param content The file field content, as fed to this class' setContent() method.
-     * @return A JLabel set up with no text and the icon of the first entry's file type,
-     *  or null if no entry was found or the entry had no icon.
-     */
-    public static JLabel getFirstLabel(String content) {
-        FileListTableModel tm = new FileListTableModel();
-        FileListEntry entry = tm.setContent(content, true, true);
-        if (entry == null || entry.getType()==null )
-            return null;
-        return entry.getType().getIconLabel();
-    }
-
-    
-    private FileListEntry decodeEntry(ArrayList<String> contents, boolean deduceUnknownType) {
-        ExternalFileType type = Globals.prefs.getExternalFileTypeByName
-                        (getElementIfAvailable(contents, 2));
-
-        if (deduceUnknownType && (type instanceof UnknownExternalFileType)) {
-            // No file type was recognized. Try to find a usable file type based
-            // on mime type:
-            type = Globals.prefs.getExternalFileTypeByMimeType
-                        (getElementIfAvailable(contents, 2));
-            if (type == null) {
-                // No type could be found from mime type on the extension:
-                //System.out.println("Not found by mime: '"+getElementIfAvailable(contents, 2));
-                ExternalFileType typeGuess = null;
-                String link = getElementIfAvailable(contents, 1);
-                int index = link.lastIndexOf('.');
-                if ((index >= 0) && (index < link.length()-1)) {
-                    String extension = link.substring(index+1);
-                    typeGuess = Globals.prefs.getExternalFileTypeByExt(extension);
-                }
-                if (typeGuess != null)
-                    type = typeGuess;
-            }
-        }
-
-        return new FileListEntry(getElementIfAvailable(contents, 0),
-                getElementIfAvailable(contents, 1),
-                type);
-    }
-
-
-    private String getElementIfAvailable(ArrayList<String> contents, int index) {
-        if (index < contents.size())
-            return contents.get(index);
-        else return "";
-    }
-
-    /**
-     * Transform the file list shown in the table into a flat string representable
-     * as a BibTeX field:
-     * @return String representation.
-     */
-    public String getStringRepresentation() {
-        StringBuilder sb = new StringBuilder();
-        for (Iterator<FileListEntry> iterator = list.iterator(); iterator.hasNext();) {
-            FileListEntry entry = iterator.next();
-            sb.append(encodeEntry(entry));
-            if (iterator.hasNext())
-                sb.append(';');
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Transform the file list shown in the table into a HTML string representation
-     * suitable for displaying the contents in a tooltip.
-     * @return Tooltip representation.
-     */
-    public String getToolTipHTMLRepresentation() {
-        StringBuilder sb = new StringBuilder("<html>");
-        for (Iterator<FileListEntry> iterator = list.iterator(); iterator.hasNext();) {
-            FileListEntry entry = iterator.next();
-            sb.append(entry.getDescription()).append(" (").append(entry.getLink()).append(')');
-            if (iterator.hasNext())
-                sb.append("<br>");
-        }
-        return sb.append("</html>").toString();
-    }
-
-    private String encodeEntry(FileListEntry entry) {
-        StringBuilder sb = new StringBuilder();
-        sb.append(encodeString(entry.getDescription()));
-        sb.append(':');
-        sb.append(encodeString(entry.getLink()));
-        sb.append(':');
-        sb.append(encodeString(entry.getType() != null ? entry.getType().getName() : ""));
-        return sb.toString();
-    }
-
-    private String encodeString(String s) {
-        StringBuilder sb = new StringBuilder();
-        for (int i=0; i<s.length(); i++) {
-            char c = s.charAt(i);
-            if ((c == ';') || (c == ':') || (c == '\\'))
-                sb.append('\\');
-            sb.append(c);
-        }
-        return sb.toString();
-    }
-
-    public void print() {
-        System.out.println("----");
-        for (Iterator<FileListEntry> iterator = list.iterator(); iterator.hasNext();) {
-            FileListEntry fileListEntry = iterator.next();
-            System.out.println(fileListEntry);
-        }
-        System.out.println("----");
-    }
-
-   
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.JLabel;
+import javax.swing.SwingUtilities;
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.AbstractTableModel;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.external.UnknownExternalFileType;
+
+/**
+ * Data structure to contain a list of file links, parseable from a coded string.
+ * Doubles as a table model for the file list editor.
+*/
+public class FileListTableModel extends AbstractTableModel {
+
+    private final ArrayList<FileListEntry> list = new ArrayList<FileListEntry>();
+
+    public FileListTableModel() {
+    }
+
+    public int getRowCount() {
+        synchronized (list) {
+            return list.size();
+        }
+    }
+
+    public int getColumnCount() {
+        return 3;
+    }
+
+    public Class<String> getColumnClass(int columnIndex) {
+        return String.class;
+    }
+
+    public Object getValueAt(int rowIndex, int columnIndex) {
+        synchronized (list) {
+            FileListEntry entry = list.get(rowIndex);
+            switch (columnIndex) {
+                case 0: return entry.getDescription();
+                case 1: return entry.getLink();
+                default: return entry.getType() != null ?
+                        entry.getType().getName() : "";
+            }
+        }
+    }
+
+    public FileListEntry getEntry(int index) {
+        synchronized (list) {
+            return list.get(index);
+        }
+    }
+
+    public void removeEntry(int index) {
+        synchronized (list) {
+            list.remove(index);
+            fireTableRowsDeleted(index, index);
+        }
+
+    }
+
+    /**
+     * Add an entry to the table model, and fire a change event. The change event
+     * is fired on the event dispatch thread.
+     * @param index The row index to insert the entry at.
+     * @param entry The entry to insert.
+     */
+    public void addEntry(final int index, final FileListEntry entry) {
+        synchronized (list) {
+            list.add(index, entry);
+            if (!SwingUtilities.isEventDispatchThread()) {
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                        fireTableRowsInserted(index, index);
+                    }
+                });
+            } else
+                fireTableRowsInserted(index, index);
+        }
+
+    }
+
+    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+    }
+
+    /**
+     * Set up the table contents based on the flat string representation of the file list
+     * @param value The string representation
+     */
+    public void setContent(String value) {
+        setContent(value, false, true);
+    }
+
+    public void setContentDontGuessTypes(String value) {
+        setContent(value, false, false);
+    }
+
+    private FileListEntry setContent(String value, boolean firstOnly, boolean deduceUnknownTypes) {
+        if (value == null)
+            value = "";
+        ArrayList<FileListEntry> newList = new ArrayList<FileListEntry>();
+        StringBuilder sb = new StringBuilder();
+        ArrayList<String> thisEntry = new ArrayList<String>();
+        boolean inXmlChar = false;
+        boolean escaped = false;
+        for (int i=0; i<value.length(); i++) {
+            char c = value.charAt(i);
+            if (!escaped && (c == '\\')) {
+                escaped = true;
+                continue;
+            }
+            // Check if we are entering an XML special character construct such
+            // as ",", because we need to know in order to ignore the semicolon.
+            else if (!escaped && (c == '&') && !inXmlChar) {
+                sb.append(c);
+                if ((value.length() > i+1) && (value.charAt(i+1) == '#'))
+                    inXmlChar = true;
+            }
+            // Check if we are exiting an XML special character construct:
+            else if (!escaped && inXmlChar && (c == ';')) {
+                sb.append(c);
+                inXmlChar = false;
+            }
+            else if (!escaped && (c == ':')) {
+                thisEntry.add(sb.toString());
+                sb = new StringBuilder();
+            }
+            else if (!escaped && (c == ';') && !inXmlChar) {
+                thisEntry.add(sb.toString());
+                sb = new StringBuilder();
+                if (firstOnly)
+                    return decodeEntry(thisEntry, deduceUnknownTypes);
+                else {
+                    newList.add(decodeEntry(thisEntry, deduceUnknownTypes));
+                    thisEntry.clear();
+                }
+            }
+            else sb.append(c);
+            escaped = false;
+        }
+        if (sb.length() > 0)
+            thisEntry.add(sb.toString());
+        if (thisEntry.size() > 0) {
+            if (firstOnly)
+                return decodeEntry(thisEntry, deduceUnknownTypes);
+            else
+                newList.add(decodeEntry(thisEntry, deduceUnknownTypes));
+        }
+          
+        synchronized (list) {
+            list.clear();
+            list.addAll(newList);
+        }
+        fireTableChanged(new TableModelEvent(this));
+        return null;
+    }
+
+    /**
+     * Convenience method for finding a label corresponding to the type of the
+     * first file link in the given field content. The difference between using
+     * this method and using setContent() on an instance of FileListTableModel
+     * is a slight optimization: with this method, parsing is discontinued after
+     * the first entry has been found.
+     * @param content The file field content, as fed to this class' setContent() method.
+     * @return A JLabel set up with no text and the icon of the first entry's file type,
+     *  or null if no entry was found or the entry had no icon.
+     */
+    public static JLabel getFirstLabel(String content) {
+        FileListTableModel tm = new FileListTableModel();
+        FileListEntry entry = tm.setContent(content, true, true);
+        if (entry == null || entry.getType()==null )
+            return null;
+        return entry.getType().getIconLabel();
+    }
+
+    
+    private FileListEntry decodeEntry(ArrayList<String> contents, boolean deduceUnknownType) {
+        ExternalFileType type = Globals.prefs.getExternalFileTypeByName
+                        (getElementIfAvailable(contents, 2));
+
+        if (deduceUnknownType && (type instanceof UnknownExternalFileType)) {
+            // No file type was recognized. Try to find a usable file type based
+            // on mime type:
+            type = Globals.prefs.getExternalFileTypeByMimeType
+                        (getElementIfAvailable(contents, 2));
+            if (type == null) {
+                // No type could be found from mime type on the extension:
+                //System.out.println("Not found by mime: '"+getElementIfAvailable(contents, 2));
+                ExternalFileType typeGuess = null;
+                String link = getElementIfAvailable(contents, 1);
+                int index = link.lastIndexOf('.');
+                if ((index >= 0) && (index < link.length()-1)) {
+                    String extension = link.substring(index+1);
+                    typeGuess = Globals.prefs.getExternalFileTypeByExt(extension);
+                }
+                if (typeGuess != null)
+                    type = typeGuess;
+            }
+        }
+
+        return new FileListEntry(getElementIfAvailable(contents, 0),
+                getElementIfAvailable(contents, 1),
+                type);
+    }
+
+
+    private String getElementIfAvailable(ArrayList<String> contents, int index) {
+        if (index < contents.size())
+            return contents.get(index);
+        else return "";
+    }
+
+    /**
+     * Transform the file list shown in the table into a flat string representable
+     * as a BibTeX field:
+     * @return String representation.
+     */
+    public String getStringRepresentation() {
+        StringBuilder sb = new StringBuilder();
+        for (Iterator<FileListEntry> iterator = list.iterator(); iterator.hasNext();) {
+            FileListEntry entry = iterator.next();
+            sb.append(encodeEntry(entry));
+            if (iterator.hasNext())
+                sb.append(';');
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Transform the file list shown in the table into a HTML string representation
+     * suitable for displaying the contents in a tooltip.
+     * @return Tooltip representation.
+     */
+    public String getToolTipHTMLRepresentation() {
+        StringBuilder sb = new StringBuilder("<html>");
+        for (Iterator<FileListEntry> iterator = list.iterator(); iterator.hasNext();) {
+            FileListEntry entry = iterator.next();
+            sb.append(entry.getDescription()).append(" (").append(entry.getLink()).append(')');
+            if (iterator.hasNext())
+                sb.append("<br>");
+        }
+        return sb.append("</html>").toString();
+    }
+
+    private String encodeEntry(FileListEntry entry) {
+        StringBuilder sb = new StringBuilder();
+        sb.append(encodeString(entry.getDescription()));
+        sb.append(':');
+        sb.append(encodeString(entry.getLink()));
+        sb.append(':');
+        sb.append(encodeString(entry.getType() != null ? entry.getType().getName() : ""));
+        return sb.toString();
+    }
+
+    private String encodeString(String s) {
+        StringBuilder sb = new StringBuilder();
+        for (int i=0; i<s.length(); i++) {
+            char c = s.charAt(i);
+            if ((c == ';') || (c == ':') || (c == '\\'))
+                sb.append('\\');
+            sb.append(c);
+        }
+        return sb.toString();
+    }
+
+    public void print() {
+        System.out.println("----");
+        for (Iterator<FileListEntry> iterator = list.iterator(); iterator.hasNext();) {
+            FileListEntry fileListEntry = iterator.next();
+            System.out.println(fileListEntry);
+        }
+        System.out.println("----");
+    }
+
+   
+}
diff --git a/src/java/net/sf/jabref/gui/FirstColumnComparator.java b/src/java/net/sf/jabref/gui/FirstColumnComparator.java
index 2b3f683..ffdcb80 100644
--- a/src/java/net/sf/jabref/gui/FirstColumnComparator.java
+++ b/src/java/net/sf/jabref/gui/FirstColumnComparator.java
@@ -1,44 +1,44 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.util.Comparator;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexDatabase;
-
-public class FirstColumnComparator implements Comparator<BibtexEntry> {
-    private BibtexDatabase database;
-
-    public FirstColumnComparator(BibtexDatabase database) {
-
-        this.database = database;
-    }
-
-    public int compare(BibtexEntry e1, BibtexEntry e2) {
-
-		int score1 = 0, score2 = 0;
-
-		if (e1.hasAllRequiredFields(database))
-			score1++;
-
-		if (e2.hasAllRequiredFields(database))
-			score2++;
-
-		return score1 - score2;
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.util.Comparator;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexDatabase;
+
+public class FirstColumnComparator implements Comparator<BibtexEntry> {
+    private BibtexDatabase database;
+
+    public FirstColumnComparator(BibtexDatabase database) {
+
+        this.database = database;
+    }
+
+    public int compare(BibtexEntry e1, BibtexEntry e2) {
+
+		int score1 = 0, score2 = 0;
+
+		if (e1.hasAllRequiredFields(database))
+			score1++;
+
+		if (e2.hasAllRequiredFields(database))
+			score2++;
+
+		return score1 - score2;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/gui/GenFieldsCustomizer.java b/src/java/net/sf/jabref/gui/GenFieldsCustomizer.java
index 0d786e6..80b9bb9 100644
--- a/src/java/net/sf/jabref/gui/GenFieldsCustomizer.java
+++ b/src/java/net/sf/jabref/gui/GenFieldsCustomizer.java
@@ -1,244 +1,245 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.util.Iterator;
-
-import javax.swing.*;
-import javax.swing.border.TitledBorder;
-
-import net.sf.jabref.*;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.layout.Sizes;
-
-/**
- * <p>Title: </p>
- * <p>Description: </p>
- * <p>Copyright: Copyright (c) 2003</p>
- * <p>Company: </p>
- * @author not attributable
- * @version 1.0
- */
-
-public class GenFieldsCustomizer extends JDialog {
-  JPanel buttons = new JPanel();
-  JButton ok = new JButton();
-  JButton cancel = new JButton();
-  JButton helpBut = new JButton();
-  TitledBorder titledBorder1;
-  TitledBorder titledBorder2;
-  JLabel jLabel1 = new JLabel();
-  JPanel jPanel3 = new JPanel();
-  JPanel jPanel4 = new JPanel();
-  GridBagLayout gridBagLayout1 = new GridBagLayout();
-  JScrollPane jScrollPane1 = new JScrollPane();
-  JLabel jLabel2 = new JLabel();
-  JTextArea fieldsArea = new JTextArea();
-  GridBagLayout gridBagLayout2 = new GridBagLayout();
-  JabRefFrame parent;
-  JButton revert = new JButton();
-  //EntryCustomizationDialog diag;
-  HelpAction help;
-
-  public GenFieldsCustomizer(JabRefFrame frame/*, EntryCustomizationDialog diag*/) {
-    super(frame, Globals.lang("Set general fields"), false);
-    parent = frame;
-    //this.diag = diag;
-    help = new HelpAction(parent.helpDiag, GUIGlobals.generalFieldsHelp,
-          "Help", GUIGlobals.getIconUrl("helpSmall"));
-    helpBut = new JButton(Globals.lang("Help"));
-    helpBut.addActionListener(help);
-    try {
-      jbInit();
-      setSize(new Dimension(650, 300));
-    }
-    catch(Exception ex) {
-      ex.printStackTrace();
-    }
-  }
-
-  private void jbInit() throws Exception {
-      ok.setText(Globals.lang("Ok"));
-    ok.addActionListener(new GenFieldsCustomizer_ok_actionAdapter(this));
-    cancel.setText(Globals.lang("Cancel"));
-    cancel.addActionListener(new GenFieldsCustomizer_cancel_actionAdapter(this));
-    //buttons.setBackground(GUIGlobals.lightGray);
-    jLabel1.setText(Globals.lang("Delimit fields with semicolon, ex.")+": url;pdf;note");
-    jPanel3.setLayout(gridBagLayout2);
-    jPanel4.setBorder(BorderFactory.createEtchedBorder());
-    jPanel4.setLayout(gridBagLayout1);
-    jLabel2.setText(Globals.lang("General fields"));
-
-    //    fieldsArea.setText(parent.prefs.get("generalFields"));
-    setFieldsText();
-
-    //jPanel3.setBackground(GUIGlobals.lightGray);
-    revert.setText(Globals.lang("Default"));
-    revert.addActionListener(new GenFieldsCustomizer_revert_actionAdapter(this));
-    this.getContentPane().add(buttons, BorderLayout.SOUTH);
-    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
-    buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
-    bb.addGlue();
-    bb.addButton(ok);
-    bb.addButton(revert);
-    bb.addButton(cancel);
-    bb.addStrut(Sizes.DLUX5);
-    bb.addButton(helpBut);
-    bb.addGlue();
-    
-    this.getContentPane().add(jPanel3, BorderLayout.CENTER);
-    jPanel3.add(jLabel1,    new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0
-            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-    jPanel3.add(jPanel4,   new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0
-            ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 318, 193));
-    jPanel4.add(jScrollPane1,    new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0
-            ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
-    jScrollPane1.getViewport().add(fieldsArea, null);
-    jPanel4.add(jLabel2,    new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-
-  // Key bindings:
-  ActionMap am = buttons.getActionMap();
-  InputMap im = buttons.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-  im.put(Globals.prefs.getKey("Close dialog"), "close");
-  am.put("close", new AbstractAction() {
-    public void actionPerformed(ActionEvent e) {
-      dispose();
-      //diag.requestFocus();
-    }
-  });
-
-  }
-
-  void ok_actionPerformed(ActionEvent e) {
-      String[] lines = fieldsArea.getText().split("\n");
-      int i = 0;
-      for (; i < lines.length; i++) {
-          String[] parts = lines[i].split(":");
-          if (parts.length != 2) {
-              // Report error and exit.
-              String field = Globals.lang("field");
-              JOptionPane.showMessageDialog(this, Globals.lang("Each line must be on the following form") + " '" +
-                      Globals.lang("Tabname") + ":" + field + "1;" + field + "2;...;" + field + "N'",
-                      Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-              return;
-          }
-          String testString = Util.checkLegalKey(parts[1]);
-          if (!testString.equals(parts[1]) || (parts[1].indexOf('&') >= 0)) {
-              // Report error and exit.
-              JOptionPane.showMessageDialog(this, Globals.lang("Field names are not allowed to contain white space or the following "
-                      + "characters") + ": # { } ~ , ^ &",
-                      Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-
-              return;
-          }
-
-          Globals.prefs.put((Globals.prefs.CUSTOM_TAB_NAME + i), parts[0]);
-          Globals.prefs.put((Globals.prefs.CUSTOM_TAB_FIELDS + i), parts[1].toLowerCase());
-      }
-      Globals.prefs.purgeSeries(Globals.prefs.CUSTOM_TAB_NAME, i);
-      Globals.prefs.purgeSeries(Globals.prefs.CUSTOM_TAB_FIELDS, i);
-      Globals.prefs.updateEntryEditorTabList();
-      /*
-    String delimStr = fieldsArea.getText().replaceAll("\\s+","")
-        .replaceAll("\\n+","").trim();
-    parent.prefs.putStringArray("generalFields", Util.delimToStringArray(delimStr, ";"));
-      */
-
-      parent.removeCachedEntryEditors();
-      dispose();
-      //diag.requestFocus();
-  }
-
-  void cancel_actionPerformed(ActionEvent e) {
-    dispose();
-    //diag.requestFocus();
-  }
-
-    void setFieldsText() {
-        StringBuffer sb = new StringBuffer();
-
-        EntryEditorTabList tabList = Globals.prefs.getEntryEditorTabList();
-        for (int i=0; i<tabList.getTabCount(); i++) {
-            sb.append(tabList.getTabName(i));
-            sb.append(":");
-            for (Iterator<String> j = tabList.getTabFields(i).iterator(); j
-				.hasNext();) {
-				String field = j.next();
-				sb.append(field);
-				if (j.hasNext())
-					sb.append(";");
-			}
-            sb.append("\n");
-        }
-
-        fieldsArea.setText(sb.toString());
-    }
-
-    void revert_actionPerformed(ActionEvent e) {
-        StringBuffer sb = new StringBuffer();
-        String name = null, fields = null;
-        int i = 0;
-        while ((name = (String) Globals.prefs.defaults.get
-                (Globals.prefs.CUSTOM_TAB_NAME + "_def" + i)) != null) {
-            sb.append(name);
-            fields = (String) Globals.prefs.defaults.get
-                    (Globals.prefs.CUSTOM_TAB_FIELDS + "_def" + i);
-            sb.append(":");
-            sb.append(fields);
-            sb.append("\n");
-            i++;
-        }
-        fieldsArea.setText(sb.toString());
-
-    }
-}
-
-class GenFieldsCustomizer_ok_actionAdapter implements java.awt.event.ActionListener {
-  GenFieldsCustomizer adaptee;
-
-  GenFieldsCustomizer_ok_actionAdapter(GenFieldsCustomizer adaptee) {
-    this.adaptee = adaptee;
-  }
-  public void actionPerformed(ActionEvent e) {
-    adaptee.ok_actionPerformed(e);
-  }
-}
-
-class GenFieldsCustomizer_cancel_actionAdapter implements java.awt.event.ActionListener {
-  GenFieldsCustomizer adaptee;
-
-  GenFieldsCustomizer_cancel_actionAdapter(GenFieldsCustomizer adaptee) {
-    this.adaptee = adaptee;
-  }
-  public void actionPerformed(ActionEvent e) {
-    adaptee.cancel_actionPerformed(e);
-  }
-}
-
-class GenFieldsCustomizer_revert_actionAdapter implements java.awt.event.ActionListener {
-  GenFieldsCustomizer adaptee;
-
-  GenFieldsCustomizer_revert_actionAdapter(GenFieldsCustomizer adaptee) {
-    this.adaptee = adaptee;
-  }
-  public void actionPerformed(ActionEvent e) {
-    adaptee.revert_actionPerformed(e);
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.util.Iterator;
+
+import javax.swing.*;
+import javax.swing.border.TitledBorder;
+
+import net.sf.jabref.*;
+import net.sf.jabref.help.HelpAction;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.layout.Sizes;
+
+/**
+ * <p>Title: </p>
+ * <p>Description: </p>
+ * <p>Copyright: Copyright (c) 2003</p>
+ * <p>Company: </p>
+ * @author not attributable
+ * @version 1.0
+ */
+
+public class GenFieldsCustomizer extends JDialog {
+  JPanel buttons = new JPanel();
+  JButton ok = new JButton();
+  JButton cancel = new JButton();
+  JButton helpBut = new JButton();
+  TitledBorder titledBorder1;
+  TitledBorder titledBorder2;
+  JLabel jLabel1 = new JLabel();
+  JPanel jPanel3 = new JPanel();
+  JPanel jPanel4 = new JPanel();
+  GridBagLayout gridBagLayout1 = new GridBagLayout();
+  JScrollPane jScrollPane1 = new JScrollPane();
+  JLabel jLabel2 = new JLabel();
+  JTextArea fieldsArea = new JTextArea();
+  GridBagLayout gridBagLayout2 = new GridBagLayout();
+  JabRefFrame parent;
+  JButton revert = new JButton();
+  //EntryCustomizationDialog diag;
+  HelpAction help;
+
+  public GenFieldsCustomizer(JabRefFrame frame/*, EntryCustomizationDialog diag*/) {
+    super(frame, Globals.lang("Set general fields"), false);
+    parent = frame;
+    //this.diag = diag;
+    help = new HelpAction(parent.helpDiag, GUIGlobals.generalFieldsHelp,
+          "Help", GUIGlobals.getIconUrl("helpSmall"));
+    helpBut = new JButton(Globals.lang("Help"));
+    helpBut.addActionListener(help);
+    try {
+      jbInit();
+      setSize(new Dimension(650, 300));
+    }
+    catch(Exception ex) {
+      ex.printStackTrace();
+    }
+  }
+
+  private void jbInit() throws Exception {
+      ok.setText(Globals.lang("Ok"));
+    ok.addActionListener(new GenFieldsCustomizer_ok_actionAdapter(this));
+    cancel.setText(Globals.lang("Cancel"));
+    cancel.addActionListener(new GenFieldsCustomizer_cancel_actionAdapter(this));
+    //buttons.setBackground(GUIGlobals.lightGray);
+    jLabel1.setText(Globals.lang("Delimit fields with semicolon, ex.")+": url;pdf;note");
+    jPanel3.setLayout(gridBagLayout2);
+    jPanel4.setBorder(BorderFactory.createEtchedBorder());
+    jPanel4.setLayout(gridBagLayout1);
+    jLabel2.setText(Globals.lang("General fields"));
+
+    //    fieldsArea.setText(parent.prefs.get("generalFields"));
+    setFieldsText();
+
+    //jPanel3.setBackground(GUIGlobals.lightGray);
+    revert.setText(Globals.lang("Default"));
+    revert.addActionListener(new GenFieldsCustomizer_revert_actionAdapter(this));
+    this.getContentPane().add(buttons, BorderLayout.SOUTH);
+    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
+    buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+    bb.addGlue();
+    bb.addButton(ok);
+    bb.addButton(revert);
+    bb.addButton(cancel);
+    bb.addStrut(Sizes.DLUX5);
+    bb.addButton(helpBut);
+    bb.addGlue();
+    
+    this.getContentPane().add(jPanel3, BorderLayout.CENTER);
+    jPanel3.add(jLabel1,    new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0
+            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
+    jPanel3.add(jPanel4,   new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0
+            ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 318, 193));
+    jPanel4.add(jScrollPane1,    new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0
+            ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
+    jScrollPane1.getViewport().add(fieldsArea, null);
+    jPanel4.add(jLabel2,    new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
+            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
+
+  // Key bindings:
+  ActionMap am = buttons.getActionMap();
+  InputMap im = buttons.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+  im.put(Globals.prefs.getKey("Close dialog"), "close");
+  am.put("close", new AbstractAction() {
+    public void actionPerformed(ActionEvent e) {
+      dispose();
+      //diag.requestFocus();
+    }
+  });
+
+  }
+
+  void ok_actionPerformed(ActionEvent e) {
+      String[] lines = fieldsArea.getText().split("\n");
+      int i = 0;
+      for (; i < lines.length; i++) {
+          String[] parts = lines[i].split(":");
+          if (parts.length != 2) {
+              // Report error and exit.
+              String field = Globals.lang("field");
+              JOptionPane.showMessageDialog(this, Globals.lang("Each line must be on the following form") + " '" +
+                      Globals.lang("Tabname") + ":" + field + "1;" + field + "2;...;" + field + "N'",
+                      Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+              return;
+          }
+          String testString = Util.checkLegalKey(parts[1]);
+          if (!testString.equals(parts[1]) || (parts[1].indexOf('&') >= 0)) {
+              // Report error and exit.
+              JOptionPane.showMessageDialog(this, Globals.lang("Field names are not allowed to contain white space or the following "
+                      + "characters") + ": # { } ~ , ^ &",
+                      Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+
+              return;
+          }
+
+          Globals.prefs.put((Globals.prefs.CUSTOM_TAB_NAME + i), parts[0]);
+          Globals.prefs.put((Globals.prefs.CUSTOM_TAB_FIELDS + i), parts[1].toLowerCase());
+      }
+      Globals.prefs.purgeSeries(Globals.prefs.CUSTOM_TAB_NAME, i);
+      Globals.prefs.purgeSeries(Globals.prefs.CUSTOM_TAB_FIELDS, i);
+      Globals.prefs.updateEntryEditorTabList();
+      /*
+    String delimStr = fieldsArea.getText().replaceAll("\\s+","")
+        .replaceAll("\\n+","").trim();
+    parent.prefs.putStringArray("generalFields", Util.delimToStringArray(delimStr, ";"));
+      */
+
+      parent.removeCachedEntryEditors();
+      dispose();
+      //diag.requestFocus();
+  }
+
+  void cancel_actionPerformed(ActionEvent e) {
+    dispose();
+    //diag.requestFocus();
+  }
+
+    void setFieldsText() {
+        StringBuffer sb = new StringBuffer();
+
+        EntryEditorTabList tabList = Globals.prefs.getEntryEditorTabList();
+        for (int i=0; i<tabList.getTabCount(); i++) {
+            sb.append(tabList.getTabName(i));
+            sb.append(":");
+            for (Iterator<String> j = tabList.getTabFields(i).iterator(); j
+				.hasNext();) {
+				String field = j.next();
+				sb.append(field);
+				if (j.hasNext())
+					sb.append(";");
+			}
+            sb.append("\n");
+        }
+
+        fieldsArea.setText(sb.toString());
+    }
+
+    void revert_actionPerformed(ActionEvent e) {
+        StringBuffer sb = new StringBuffer();
+        String name = null, fields = null;
+        int i = 0;
+        while ((name = (String) Globals.prefs.defaults.get
+                (Globals.prefs.CUSTOM_TAB_NAME + "_def" + i)) != null) {
+            sb.append(name);
+            fields = (String) Globals.prefs.defaults.get
+                    (Globals.prefs.CUSTOM_TAB_FIELDS + "_def" + i);
+            sb.append(":");
+            sb.append(fields);
+            sb.append("\n");
+            i++;
+        }
+        fieldsArea.setText(sb.toString());
+
+    }
+}
+
+class GenFieldsCustomizer_ok_actionAdapter implements java.awt.event.ActionListener {
+  GenFieldsCustomizer adaptee;
+
+  GenFieldsCustomizer_ok_actionAdapter(GenFieldsCustomizer adaptee) {
+    this.adaptee = adaptee;
+  }
+  public void actionPerformed(ActionEvent e) {
+    adaptee.ok_actionPerformed(e);
+  }
+}
+
+class GenFieldsCustomizer_cancel_actionAdapter implements java.awt.event.ActionListener {
+  GenFieldsCustomizer adaptee;
+
+  GenFieldsCustomizer_cancel_actionAdapter(GenFieldsCustomizer adaptee) {
+    this.adaptee = adaptee;
+  }
+  public void actionPerformed(ActionEvent e) {
+    adaptee.cancel_actionPerformed(e);
+  }
+}
+
+class GenFieldsCustomizer_revert_actionAdapter implements java.awt.event.ActionListener {
+  GenFieldsCustomizer adaptee;
+
+  GenFieldsCustomizer_revert_actionAdapter(GenFieldsCustomizer adaptee) {
+    this.adaptee = adaptee;
+  }
+  public void actionPerformed(ActionEvent e) {
+    adaptee.revert_actionPerformed(e);
+  }
+}
diff --git a/src/java/net/sf/jabref/gui/GlazedEntrySorter.java b/src/java/net/sf/jabref/gui/GlazedEntrySorter.java
index 71c105d..74ab415 100644
--- a/src/java/net/sf/jabref/gui/GlazedEntrySorter.java
+++ b/src/java/net/sf/jabref/gui/GlazedEntrySorter.java
@@ -1,80 +1,80 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.DatabaseChangeEvent;
-import net.sf.jabref.DatabaseChangeListener;
-import net.sf.jabref.IdComparator;
-import ca.odell.glazedlists.BasicEventList;
-import ca.odell.glazedlists.EventList;
-
-public class GlazedEntrySorter implements DatabaseChangeListener {
-
-	EventList<BibtexEntry> list;
-
-    String[] idArray;
-    BibtexEntry[] entryArray;
-    
-    public GlazedEntrySorter(Map<String, BibtexEntry> entries) {
-        list = new BasicEventList<BibtexEntry>();
-        list.getReadWriteLock().writeLock().lock();
-        Set<String> keySet = entries.keySet();
-        if (keySet != null) {
-            Iterator<String> i = keySet.iterator();
-            while (i.hasNext()) {
-                list.add(entries.get(i.next()));
-            }
-        }
-
-        // Sort the list so it is ordered according to creation (or read) order
-        // when the table is unsorted.
-        Collections.sort(list, new IdComparator());
-        
-        list.getReadWriteLock().writeLock().unlock();
-
-    }
-
-    public EventList<BibtexEntry> getTheList() {
-        return list;
-    }
-
-    public void databaseChanged(DatabaseChangeEvent e) {
-        list.getReadWriteLock().writeLock().lock();
-        if (e.getType() == DatabaseChangeEvent.ChangeType.ADDED_ENTRY) {
-            list.add(e.getEntry());
-        } else if (e.getType() == DatabaseChangeEvent.ChangeType.REMOVED_ENTRY) {
-            list.remove(e.getEntry());
-        } else if (e.getType() == DatabaseChangeEvent.ChangeType.CHANGED_ENTRY) {
-            int index = list.indexOf(e.getEntry());
-            if (index != -1) {
-            	// SpecialFieldUtils.syncSpecialFieldsFromKeywords update an entry during
-            	// DatabaseChangeEvent.ADDED_ENTRY
-            	// thus, 
-            	list.set(index, e.getEntry());
-            }
-        }
-        list.getReadWriteLock().writeLock().unlock();
-
-    }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.DatabaseChangeEvent;
+import net.sf.jabref.DatabaseChangeListener;
+import net.sf.jabref.IdComparator;
+import ca.odell.glazedlists.BasicEventList;
+import ca.odell.glazedlists.EventList;
+
+public class GlazedEntrySorter implements DatabaseChangeListener {
+
+	EventList<BibtexEntry> list;
+
+    String[] idArray;
+    BibtexEntry[] entryArray;
+    
+    public GlazedEntrySorter(Map<String, BibtexEntry> entries) {
+        list = new BasicEventList<BibtexEntry>();
+        list.getReadWriteLock().writeLock().lock();
+        Set<String> keySet = entries.keySet();
+        if (keySet != null) {
+            Iterator<String> i = keySet.iterator();
+            while (i.hasNext()) {
+                list.add(entries.get(i.next()));
+            }
+        }
+
+        // Sort the list so it is ordered according to creation (or read) order
+        // when the table is unsorted.
+        Collections.sort(list, new IdComparator());
+        
+        list.getReadWriteLock().writeLock().unlock();
+
+    }
+
+    public EventList<BibtexEntry> getTheList() {
+        return list;
+    }
+
+    public void databaseChanged(DatabaseChangeEvent e) {
+        list.getReadWriteLock().writeLock().lock();
+        if (e.getType() == DatabaseChangeEvent.ChangeType.ADDED_ENTRY) {
+            list.add(e.getEntry());
+        } else if (e.getType() == DatabaseChangeEvent.ChangeType.REMOVED_ENTRY) {
+            list.remove(e.getEntry());
+        } else if (e.getType() == DatabaseChangeEvent.ChangeType.CHANGED_ENTRY) {
+            int index = list.indexOf(e.getEntry());
+            if (index != -1) {
+            	// SpecialFieldUtils.syncSpecialFieldsFromKeywords update an entry during
+            	// DatabaseChangeEvent.ADDED_ENTRY
+            	// thus, 
+            	list.set(index, e.getEntry());
+            }
+        }
+        list.getReadWriteLock().writeLock().unlock();
+
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/gui/HtmlTransferable.java b/src/java/net/sf/jabref/gui/HtmlTransferable.java
index 47fd9f1..a083347 100644
--- a/src/java/net/sf/jabref/gui/HtmlTransferable.java
+++ b/src/java/net/sf/jabref/gui/HtmlTransferable.java
@@ -1,72 +1,72 @@
-/* Copyright (C) 2012 JabRef contributors.
-
-  This program is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.sf.jabref.gui;
-
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.io.IOException;
-
-/**
-Based on http://newsgroups.derkeiler.com/Archive/De/de.comp.lang.java/2010-04/msg00203.html
-*/
-public class HtmlTransferable implements Transferable {
-    private static final int HTML = 0;
-    private static final int STRING = 1;
-
-    public static final DataFlavor HTML_FLAVOR = new DataFlavor("text/html;charset=utf-8;class=java.lang.String", "HTML Format"); // charset could be read via JabRef.jrf.basePanel().getEncoding()
-
-    private static final DataFlavor[] FLAVORS = { HTML_FLAVOR, DataFlavor.stringFlavor };
-
-    private String htmlText;
-    private String plainText;
-
-    /**
-     * @param htmlText the text in html 
-     * @param plainText the plain text
-     */
-    public HtmlTransferable(String htmlText, String plainText) {
-        this.htmlText = htmlText;
-        this.plainText = plainText;
-    }
-
-    @Override
-    public DataFlavor[] getTransferDataFlavors() {
-        return FLAVORS.clone();
-    }
-
-    @Override
-    public boolean isDataFlavorSupported(DataFlavor flavor) {
-        for (int i = 0; i < FLAVORS.length; i++) {
-            if (flavor.equals(FLAVORS[i])) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
-        if (flavor.equals(FLAVORS[STRING])) {
-            return plainText;
-        } else if (flavor.equals(FLAVORS[HTML])) {
-            return htmlText;
-        } else {
-            throw new UnsupportedFlavorException(flavor);
-        }
-    }
-}
+/* Copyright (C) 2012 JabRef contributors.
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.sf.jabref.gui;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
+
+/**
+Based on http://newsgroups.derkeiler.com/Archive/De/de.comp.lang.java/2010-04/msg00203.html
+*/
+public class HtmlTransferable implements Transferable {
+    private static final int HTML = 0;
+    private static final int STRING = 1;
+
+    public static final DataFlavor HTML_FLAVOR = new DataFlavor("text/html;charset=utf-8;class=java.lang.String", "HTML Format"); // charset could be read via JabRef.jrf.basePanel().getEncoding()
+
+    private static final DataFlavor[] FLAVORS = { HTML_FLAVOR, DataFlavor.stringFlavor };
+
+    private String htmlText;
+    private String plainText;
+
+    /**
+     * @param htmlText the text in html 
+     * @param plainText the plain text
+     */
+    public HtmlTransferable(String htmlText, String plainText) {
+        this.htmlText = htmlText;
+        this.plainText = plainText;
+    }
+
+    @Override
+    public DataFlavor[] getTransferDataFlavors() {
+        return FLAVORS.clone();
+    }
+
+    @Override
+    public boolean isDataFlavorSupported(DataFlavor flavor) {
+        for (int i = 0; i < FLAVORS.length; i++) {
+            if (flavor.equals(FLAVORS[i])) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
+        if (flavor.equals(FLAVORS[STRING])) {
+            return plainText;
+        } else if (flavor.equals(FLAVORS[HTML])) {
+            return htmlText;
+        } else {
+            throw new UnsupportedFlavorException(flavor);
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/IconComparator.java b/src/java/net/sf/jabref/gui/IconComparator.java
index c4c9ea8..1518c0c 100644
--- a/src/java/net/sf/jabref/gui/IconComparator.java
+++ b/src/java/net/sf/jabref/gui/IconComparator.java
@@ -1,61 +1,61 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import net.sf.jabref.BibtexEntry;
-
-import java.util.Comparator;
-
-/**
- * Comparator that handles icon columns. 
- */
-public class IconComparator implements Comparator<BibtexEntry> {
-
-    private String[] fields;
-
-    public IconComparator(String[] fields) {
-        this.fields = fields;
-    }
-
-    public int compare(BibtexEntry e1, BibtexEntry e2) {
-
-        for (int i=0; i<fields.length; i++) {
-            String val1 = e1.getField(fields[i]);
-            String val2 = e2.getField(fields[i]);
-			if (val1 == null) {
-				if (val2 != null) {
-					return 1;
-				} else {
-					// continue loop and check for next field
-				}
-			} else {
-				if (val2 == null) {
-					return -1;
-				} else {
-					// val1 is not null AND val2 is not null
-					int compareToRes = val1.compareTo(val2);
-					if (compareToRes != 0) {
-						return compareToRes;
-					} else {
-						// continue loop as current two values are equal
-					}
-				}
-			}
-		}
-        return 0;
-    }
-
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import net.sf.jabref.BibtexEntry;
+
+import java.util.Comparator;
+
+/**
+ * Comparator that handles icon columns. 
+ */
+public class IconComparator implements Comparator<BibtexEntry> {
+
+    private String[] fields;
+
+    public IconComparator(String[] fields) {
+        this.fields = fields;
+    }
+
+    public int compare(BibtexEntry e1, BibtexEntry e2) {
+
+        for (int i=0; i<fields.length; i++) {
+            String val1 = e1.getField(fields[i]);
+            String val2 = e2.getField(fields[i]);
+			if (val1 == null) {
+				if (val2 != null) {
+					return 1;
+				} else {
+					// continue loop and check for next field
+				}
+			} else {
+				if (val2 == null) {
+					return -1;
+				} else {
+					// val1 is not null AND val2 is not null
+					int compareToRes = val1.compareTo(val2);
+					if (compareToRes != 0) {
+						return compareToRes;
+					} else {
+						// continue loop as current two values are equal
+					}
+				}
+			}
+		}
+        return 0;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/gui/ImportInspectionDialog.java b/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
index 00f6149..c8de887 100644
--- a/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
+++ b/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
@@ -1,1503 +1,1501 @@
-package net.sf.jabref.gui;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.swing.AbstractAction;
-import javax.swing.ActionMap;
-import javax.swing.BorderFactory;
-import javax.swing.InputMap;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JProgressBar;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.SwingUtilities;
-import javax.swing.table.DefaultTableModel;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableColumnModel;
-import javax.swing.table.TableModel;
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.*;
-import net.sf.jabref.external.DownloadExternalFile;
-import net.sf.jabref.external.ExternalFileMenuItem;
-import net.sf.jabref.groups.AbstractGroup;
-import net.sf.jabref.groups.AllEntriesGroup;
-import net.sf.jabref.groups.GroupTreeNode;
-import net.sf.jabref.groups.UndoableChangeAssignment;
-import net.sf.jabref.imports.ImportInspector;
-import net.sf.jabref.labelPattern.LabelPatternUtil;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableInsertEntry;
-import net.sf.jabref.undo.UndoableRemoveEntry;
-import ca.odell.glazedlists.BasicEventList;
-import ca.odell.glazedlists.EventList;
-import ca.odell.glazedlists.SortedList;
-import ca.odell.glazedlists.event.ListEvent;
-import ca.odell.glazedlists.event.ListEventListener;
-import ca.odell.glazedlists.gui.TableFormat;
-import ca.odell.glazedlists.swing.EventSelectionModel;
-import ca.odell.glazedlists.swing.EventTableModel;
-import ca.odell.glazedlists.swing.TableComparatorChooser;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.ButtonStackBuilder;
-import com.jgoodies.uif_lite.component.UIFSplitPane;
-
-/**
- * Dialog to allow the selection of entries as part of an Import.
- * 
- * The usual way to use this class is to pass it to an Importer which will do
- * the following:
- * <ul>
- * <li>Register itself as a callback to get notified if the user wants to stop
- * the import.</li>
- * <li>Call setVisible(true) to display the dialog</li>
- * <li>For each entry that has been found call addEntry(...)</li>
- * <li>Call entryListComplete() after all entries have been fetched</li>
- * </ul>
- * 
- * If the importer wants to cancel the import, it should call the dispose()
- * method.
- * 
- * If the importer receives the stopFetching-call, it should stop fetching as
- * soon as possible (it is not really critical, but good style to not contribute
- * any more results via addEntry, call entryListComplete() or dispose(), after
- * receiving this call).
- * 
- * @author alver
- * @author $Author$
- * @version $Revision$ ($Date: 2007-11-14 01:25:31 +0100 (Mi, 14 Nov
- *          2007) $)
- * 
- */
-public class ImportInspectionDialog extends JDialog implements ImportInspector, OutputPrinter {
-
-    public static interface CallBack {
-
-        /**
-         * This method is called by the dialog when the user has cancelled or
-         * signalled a stop. It is expected that any long-running fetch
-         * operations will stop after this method is called.
-         */
-        public void stopFetching();
-    }
-
-	protected ImportInspectionDialog ths = this;
-
-    protected BasePanel panel;
-
-    protected JabRefFrame frame;
-
-    protected MetaData metaData;
-
-    protected UIFSplitPane contentPane = new UIFSplitPane(UIFSplitPane.VERTICAL_SPLIT);
-
-    protected JTable glTable;
-
-    protected TableComparatorChooser<BibtexEntry> comparatorChooser;
-
-    protected EventSelectionModel<BibtexEntry> selectionModel;
-
-    protected String[] fields;
-
-    protected JProgressBar progressBar = new JProgressBar(JProgressBar.HORIZONTAL);
-
-    protected JButton ok = new JButton(Globals.lang("Ok")), cancel = new JButton(Globals
-        .lang("Cancel")), generate = new JButton(Globals.lang("Generate now"));
-
-    protected EventList<BibtexEntry> entries = new BasicEventList<BibtexEntry>();
-
-    protected SortedList<BibtexEntry> sortedList;
-
-    /**
-     * Duplicate resolving may require deletion of old entries.
-     */
-    protected List<BibtexEntry> entriesToDelete = new ArrayList<BibtexEntry>();
-
-    protected String undoName;
-
-    protected ArrayList<CallBack> callBacks = new ArrayList<CallBack>();
-
-    protected boolean newDatabase;
-
-    protected JMenu groupsAdd = new JMenu(Globals.lang("Add to group"));
-
-    protected JPopupMenu popup = new JPopupMenu();
-
-    protected JButton selectAll = new JButton(Globals.lang("Select all"));
-
-    protected JButton deselectAll = new JButton(Globals.lang("Deselect all"));
-
-    protected JButton deselectAllDuplicates = new JButton(Globals.lang("Deselect all duplicates"));
-
-    protected JButton stop = new JButton(Globals.lang("Stop"));
-
-    protected JButton delete = new JButton(Globals.lang("Delete"));
-
-    protected JButton help = new JButton(Globals.lang("Help"));
-
-    protected PreviewPanel preview;
-
-    protected boolean generatedKeys = false; // Set to true after keys have
-                                                // been
-
-    // generated.
-
-    protected boolean defaultSelected = true;
-
-    protected Rectangle toRect = new Rectangle(0, 0, 1, 1);
-
-    protected Map<BibtexEntry, Set<GroupTreeNode>> groupAdditions = new HashMap<BibtexEntry, Set<GroupTreeNode>>();
-
-    protected JCheckBox autoGenerate = new JCheckBox(Globals.lang("Generate keys"), Globals.prefs
-        .getBoolean("generateKeysAfterInspection"));
-
-    protected JLabel duplLabel = new JLabel(GUIGlobals.getImage("duplicate")),
-        fileLabel = new JLabel(GUIGlobals.getImage("psSmall")), pdfLabel = new JLabel(GUIGlobals
-            .getImage("pdfSmall")), psLabel = new JLabel(GUIGlobals.getImage("psSmall")),
-        urlLabel = new JLabel(GUIGlobals.getImage("wwwSmall"));
-
-    protected final int DUPL_COL = 1, FILE_COL = 2, PDF_COL = -1,// 3,
-        PS_COL = -2,// 4,
-        URL_COL = 3,// 5,
-        PAD = 4; // 6;
-
-    /**
-     * The "defaultSelected" boolean value determines if new entries added are
-     * selected for import or not. This value is true by default.
-     * 
-     * @param defaultSelected
-     *            The desired value.
-     */
-    public void setDefaultSelected(boolean defaultSelected) {
-        this.defaultSelected = defaultSelected;
-    }
-
-    /**
-     * Creates a dialog that displays the given list of fields in the table. The
-     * dialog allows another process to add entries dynamically while the dialog
-     * is shown.
-     * 
-     * @param frame
-     * @param panel
-     * @param fields
-     */
-    public ImportInspectionDialog(JabRefFrame frame, BasePanel panel, String[] fields,
-        String undoName, boolean newDatabase) {
-        this.frame = frame;
-        this.panel = panel;
-        this.metaData = (panel != null) ? panel.metaData() : new MetaData();
-        this.fields = fields;
-        this.undoName = undoName;
-        this.newDatabase = newDatabase;
-        preview = new PreviewPanel(null, metaData, Globals.prefs.get("preview0"));
-
-        duplLabel.setToolTipText(Globals
-            .lang("Possible duplicate of existing entry. Click to resolve."));
-
-        sortedList = new SortedList<BibtexEntry>(entries);
-        EventTableModel<BibtexEntry> tableModelGl = new EventTableModel<BibtexEntry>(sortedList,
-            new EntryTableFormat());
-        glTable = new EntryTable(tableModelGl);
-        GeneralRenderer renderer = new GeneralRenderer(Color.white);
-        glTable.setDefaultRenderer(JLabel.class, renderer);
-        glTable.setDefaultRenderer(String.class, renderer);
-        glTable.getInputMap().put(Globals.prefs.getKey("Delete"), "delete");
-        DeleteListener deleteListener = new DeleteListener();
-        glTable.getActionMap().put("delete", deleteListener);
-
-        selectionModel = new EventSelectionModel<BibtexEntry>(sortedList);
-        glTable.setSelectionModel(selectionModel);
-        selectionModel.getSelected().addListEventListener(new EntrySelectionListener());
-        comparatorChooser = TableComparatorChooser.install(glTable, sortedList,
-            TableComparatorChooser.MULTIPLE_COLUMN_KEYBOARD);
-        setupComparatorChooser();
-        glTable.addMouseListener(new TableClickListener());
-
-        setWidths();
-
-        getContentPane().setLayout(new BorderLayout());
-        progressBar.setIndeterminate(true);
-        JPanel centerPan = new JPanel();
-        centerPan.setLayout(new BorderLayout());
-
-        contentPane.setTopComponent(new JScrollPane(glTable));
-        contentPane.setBottomComponent(preview);
-
-        centerPan.add(contentPane, BorderLayout.CENTER);
-        centerPan.add(progressBar, BorderLayout.SOUTH);
-
-        popup.add(deleteListener);
-        popup.addSeparator();
-        if (!newDatabase) {
-            GroupTreeNode node = metaData.getGroups();
-            groupsAdd.setEnabled(false); // Will get enabled if there are
-            // groups that can be added to.
-            insertNodes(groupsAdd, node);
-            popup.add(groupsAdd);
-        }
-
-        // Add "Attach file" menu choices to right click menu:
-        popup.add(new LinkLocalFile());
-        popup.add(new DownloadFile());
-        popup.add(new AutoSetLinks());
-        // popup.add(new AttachFile("pdf"));
-        // popup.add(new AttachFile("ps"));
-        popup.add(new AttachUrl());
-        getContentPane().add(centerPan, BorderLayout.CENTER);
-
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(stop);
-        bb.addButton(cancel);
-        bb.addRelatedGap();
-        bb.addButton(help);
-        bb.addGlue();
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
-
-        ButtonStackBuilder builder = new ButtonStackBuilder();
-        builder.addButton(selectAll);
-        builder.addButton(deselectAll);
-        builder.addButton(deselectAllDuplicates);
-        builder.addRelatedGap();
-        builder.addButton(delete);
-        builder.addRelatedGap();
-        builder.addFixed(autoGenerate);
-        builder.addButton(generate);
-        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
-        centerPan.add(builder.getPanel(), BorderLayout.WEST);
-
-        ok.setEnabled(false);
-        generate.setEnabled(false);
-        ok.addActionListener(new OkListener());
-        cancel.addActionListener(new CancelListener());
-        generate.addActionListener(new GenerateListener());
-        stop.addActionListener(new StopListener());
-        selectAll.addActionListener(new SelectionButton(true));
-        deselectAll.addActionListener(new SelectionButton(false));
-        deselectAllDuplicates.addActionListener(new DeselectDuplicatesButtonListener());
-        deselectAllDuplicates.setEnabled(false);
-        delete.addActionListener(deleteListener);
-        help.addActionListener(new HelpAction(frame.helpDiag, GUIGlobals.importInspectionHelp));
-        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-
-        // Remember and default to last size:
-        setSize(new Dimension(Globals.prefs.getInt("importInspectionDialogWidth"), Globals.prefs
-            .getInt("importInspectionDialogHeight")));
-        addWindowListener(new WindowAdapter() {
-
-            public void windowOpened(WindowEvent e) {
-                contentPane.setDividerLocation(0.5f);
-            }
-
-            public void windowClosed(WindowEvent e) {
-                Globals.prefs.putInt("importInspectionDialogWidth", getSize().width);
-                Globals.prefs.putInt("importInspectionDialogHeight", getSize().height);
-            }
-        });
-        // Key bindings:
-        AbstractAction closeAction = new AbstractAction() {
-          public void actionPerformed(ActionEvent e) {
-            dispose();
-          }
-        };
-        ActionMap am = contentPane.getActionMap();
-        InputMap im = contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", closeAction);
-
-    }
-
-    /* (non-Javadoc)
-	 * @see net.sf.jabref.gui.ImportInspection#setProgress(int, int)
-	 */
-    public void setProgress(int current, int max) {
-        progressBar.setIndeterminate(false);
-        progressBar.setMinimum(0);
-        progressBar.setMaximum(max);
-        progressBar.setValue(current);
-    }
-
-    /* (non-Javadoc)
-	 * @see net.sf.jabref.gui.ImportInspection#addEntry(net.sf.jabref.BibtexEntry)
-	 */
-    public void addEntry(BibtexEntry entry) {
-        List<BibtexEntry> list = new ArrayList<BibtexEntry>();
-        list.add(entry);
-        addEntries(list);
-    }
-
-    /* (non-Javadoc)
-	 * @see net.sf.jabref.gui.ImportInspection#addEntries(java.util.Collection)
-	 */
-    public void addEntries(Collection<BibtexEntry> entries) {
-
-        for (BibtexEntry entry : entries) {
-            // We exploit the entry's search status for indicating "Keep"
-            // status:
-            entry.setSearchHit(defaultSelected);
-            // We exploit the entry's group status for indicating duplicate
-            // status.
-            // Checking duplicates means both checking against the background
-            // database (if
-            // applicable) and against entries already in the table.
-            if (((panel != null) && (DuplicateCheck.containsDuplicate(panel.database(), entry) != null)) ||
-                (internalDuplicate(this.entries, entry) != null)) {
-                entry.setGroupHit(true);
-                deselectAllDuplicates.setEnabled(true);
-            }
-            this.entries.getReadWriteLock().writeLock().lock();
-            this.entries.add(entry);
-            this.entries.getReadWriteLock().writeLock().unlock();
-        }
-    }
-
-    /**
-     * Checks if there are duplicates to the given entry in the Collection. Does
-     * not report the entry as duplicate of itself if it is in the Collection.
-     * 
-     * @param entries
-     *            A Collection of BibtexEntry instances.
-     * @param entry
-     *            The entry to search for duplicates of.
-     * @return A possible duplicate, if any, or null if none were found.
-     */
-    protected BibtexEntry internalDuplicate(Collection<BibtexEntry> entries, BibtexEntry entry) {
-        for (BibtexEntry othEntry : entries) {
-            if (othEntry == entry)
-                continue; // Don't compare the entry to itself
-            if (DuplicateCheck.isDuplicate(entry, othEntry))
-                return othEntry;
-        }
-        return null;
-    }
-
-    /**
-     * Removes all selected entries from the table. Synchronizes on this.entries
-     * to prevent conflict with addition of new entries.
-     */
-    public void removeSelectedEntries() {
-        int row = glTable.getSelectedRow();
-        List<Object> toRemove = new ArrayList<Object>();
-        toRemove.addAll(selectionModel.getSelected());
-        entries.getReadWriteLock().writeLock().lock();
-        for (Object o : toRemove) {
-            entries.remove(o);
-        }
-        entries.getReadWriteLock().writeLock().unlock();
-        glTable.clearSelection();
-        if ((row >= 0) && (entries.size() > 0)) {
-            row = Math.min(entries.size() - 1, row);
-            glTable.addRowSelectionInterval(row, row);
-        }
-    }
-
-    /* (non-Javadoc)
-	 * @see net.sf.jabref.gui.ImportInspection#entryListComplete()
-	 */
-    public void entryListComplete() {
-        progressBar.setIndeterminate(false);
-        progressBar.setVisible(false);
-        ok.setEnabled(true);
-        if (!generatedKeys)
-            generate.setEnabled(true);
-        stop.setEnabled(false);
-        
-        //This is for selecting and displaying the first entry in the glTable
-        this.glTable.repaint();
-        if(this.glTable.getSelectedRowCount() == 0) //Only if no row selection is done, until now
-        	if (this.glTable.getRowCount()>0)
-        		this.glTable.setRowSelectionInterval(0, 0); //Select first row in the table
-    }
-
-    /**
-     * This method returns a List containing all entries that are selected
-     * (checkbox checked).
-     * 
-     * @return a List containing the selected entries.
-     */
-    public List<BibtexEntry> getSelectedEntries() {
-        List<BibtexEntry> selected = new ArrayList<BibtexEntry>();
-        for (Iterator<BibtexEntry> i = entries.iterator(); i.hasNext();) {
-            BibtexEntry entry = i.next();
-            if (entry.isSearchHit())
-                selected.add(entry);
-        }
-        /*
-         * for (int i = 0; i < table.getRowCount(); i++) { Boolean sel =
-         * (Boolean) table.getValueAt(i, 0); if (sel.booleanValue()) {
-         * selected.add(entries.get(i)); } }
-         */
-        return selected;
-    }
-
-    /**
-     * Generate key for the selected entry only.
-     */
-    public void generateKeySelectedEntry() {
-        if (selectionModel.getSelected().size() != 1)
-            return;
-        BibtexEntry entry = selectionModel.getSelected().get(0);
-        entries.getReadWriteLock().writeLock().lock();
-
-        BibtexDatabase database;
-        MetaData metaData;
-        
-        // Relate to existing database, if any:
-        if (panel != null) {
-            database = panel.database();
-            metaData = panel.metaData();
-        } else {
-            database = new BibtexDatabase();
-            metaData = new MetaData();
-        }
-        try {
-            entry.setId(Util.createNeutralId());
-            // Add the entry to the database we are working with:
-            database.insertEntry(entry);
-        } catch (KeyCollisionException ex) {
-            ex.printStackTrace();
-        }
-        // Generate a unique key:
-        LabelPatternUtil.makeLabel(metaData, database, entry);
-        // Remove the entry from the database again, since we only added it in
-        // order to
-        // make sure the key was unique:
-        database.removeEntry(entry.getId());
-
-        entries.getReadWriteLock().writeLock().lock();
-        glTable.repaint();
-    }
-
-    /**
-     * Generate keys for all entries. All keys will be unique with respect to
-     * one another, and, if they are destined for an existing database, with
-     * respect to existing keys in the database.
-     */
-    public void generateKeys(boolean addColumn) {
-        entries.getReadWriteLock().writeLock().lock();
-
-        BibtexDatabase database;
-        MetaData metaData;
-        
-        // Relate to existing database, if any:
-        if (panel != null) {
-            database = panel.database();
-            metaData = panel.metaData();
-        } else {
-            database = new BibtexDatabase();
-            metaData = new MetaData();
-        }
-
-        List<String> keys = new ArrayList<String>(entries.size());
-        // Iterate over the entries, add them to the database we are working
-        // with,
-        // and generate unique keys:
-        for (Iterator<BibtexEntry> i = entries.iterator(); i.hasNext();) {
-            BibtexEntry entry = i.next();
-            // if (newDatabase) {
-            try {
-                entry.setId(Util.createNeutralId());
-                database.insertEntry(entry);
-            } catch (KeyCollisionException ex) {
-                ex.printStackTrace();
-            }
-            // }
-            LabelPatternUtil.makeLabel(metaData, database, entry);
-            // Add the generated key to our list:
-            keys.add(entry.getCiteKey());
-        }
-        // Remove the entries from the database again, since they are not
-        // supposed to
-        // added yet. They only needed to be in it while we generated the keys,
-        // to keep
-        // control over key uniqueness.
-        for (Iterator<BibtexEntry> i = entries.iterator(); i.hasNext();) {
-            BibtexEntry entry = i.next();
-            database.removeEntry(entry.getId());
-        }
-        entries.getReadWriteLock().writeLock().lock();
-        glTable.repaint();
-    }
-
-    public void insertNodes(JMenu menu, GroupTreeNode node) {
-        final AbstractAction action = getAction(node);
-
-        if (node.getChildCount() == 0) {
-            menu.add(action);
-            if (action.isEnabled())
-                menu.setEnabled(true);
-            return;
-        }
-
-        JMenu submenu = null;
-        if (node.getGroup() instanceof AllEntriesGroup) {
-            for (int i = 0; i < node.getChildCount(); ++i) {
-                insertNodes(menu, (GroupTreeNode) node.getChildAt(i));
-            }
-        } else {
-            submenu = new JMenu("[" + node.getGroup().getName() + "]");
-            // setEnabled(true) is done above/below if at least one menu
-            // entry (item or submenu) is enabled
-            submenu.setEnabled(action.isEnabled());
-            submenu.add(action);
-            submenu.add(new JPopupMenu.Separator());
-            for (int i = 0; i < node.getChildCount(); ++i)
-                insertNodes(submenu, (GroupTreeNode) node.getChildAt(i));
-            menu.add(submenu);
-            if (submenu.isEnabled())
-                menu.setEnabled(true);
-        }
-    }
-
-    protected AbstractAction getAction(GroupTreeNode node) {
-        AbstractAction action = new AddToGroupAction(node);
-        AbstractGroup group = node.getGroup();
-        action.setEnabled(group.supportsAdd());
-        return action;
-    }
-
-    /**
-     * Stores the information about the selected entries being scheduled for
-     * addition to this group. The entries are *not* added to the group at this
-     * time. <p/> Synchronizes on this.entries to prevent conflict with threads
-     * that modify the entry list.
-     */
-    class AddToGroupAction extends AbstractAction {
-
-        protected GroupTreeNode node;
-
-        public AddToGroupAction(GroupTreeNode node) {
-            super(node.getGroup().getName());
-            this.node = node;
-        }
-
-        public void actionPerformed(ActionEvent event) {
-
-            selectionModel.getSelected().getReadWriteLock().writeLock().lock();
-            for (Iterator<BibtexEntry> i = selectionModel.getSelected().iterator(); i.hasNext();) {
-                BibtexEntry entry = i.next();
-                // We store the groups this entry should be added to in a Set in
-                // the Map:
-                Set<GroupTreeNode> groups = groupAdditions.get(entry);
-                if (groups == null) {
-                    // No previous definitions, so we create the Set now:
-                    groups = new HashSet<GroupTreeNode>();
-                    groupAdditions.put(entry, groups);
-                }
-                // Add the group:
-                groups.add(node);
-            }
-            selectionModel.getSelected().getReadWriteLock().writeLock().unlock();
-        }
-    }
-
-    public void addCallBack(CallBack cb) {
-        callBacks.add(cb);
-    }
-
-    class OkListener implements ActionListener {
-
-        public void actionPerformed(ActionEvent event) {
-
-            // First check if we are supposed to warn about duplicates. If so,
-            // see if there
-            // are unresolved duplicates, and warn if yes.
-            if (Globals.prefs.getBoolean("warnAboutDuplicatesInInspection")) {
-                for (Iterator<BibtexEntry> i = entries.iterator(); i.hasNext();) {
-
-                    BibtexEntry entry = i.next();
-                    // Only check entries that are to be imported. Keep status
-                    // is indicated
-                    // through the search hit status of the entry:
-                    if (!entry.isSearchHit())
-                        continue;
-
-                    // Check if the entry is a suspected, unresolved, duplicate.
-                    // This status
-                    // is indicated by the entry's group hit status:
-                    if (entry.isGroupHit()) {
-                        CheckBoxMessage cbm = new CheckBoxMessage(
-                            Globals
-                                .lang("There are possible duplicates (marked with a 'D' icon) that haven't been resolved. Continue?"),
-                            Globals.lang("Disable this confirmation dialog"), false);
-                        int answer = JOptionPane.showConfirmDialog(ImportInspectionDialog.this,
-                            cbm, Globals.lang("Duplicates found"), JOptionPane.YES_NO_OPTION);
-                        if (cbm.isSelected())
-                            Globals.prefs.putBoolean("warnAboutDuplicatesInInspection", false);
-                        if (answer == JOptionPane.NO_OPTION)
-                            return;
-                        break;
-                    }
-                }
-            }
-
-            // The compund undo action used to contain all changes made by this
-            // dialog.
-            NamedCompound ce = new NamedCompound(undoName);
-
-            // See if we should remove any old entries for duplicate resolving:
-            if (entriesToDelete.size() > 0) {
-                for (Iterator<BibtexEntry> i = entriesToDelete.iterator(); i.hasNext();) {
-                    BibtexEntry entry = i.next();
-                    ce.addEdit(new UndoableRemoveEntry(panel.database(), entry, panel));
-                    panel.database().removeEntry(entry.getId());
-                }
-            }
-
-            // If "Generate keys" is checked, generate keys unless it's already
-            // been done:
-            if (autoGenerate.isSelected() && !generatedKeys) {
-                generateKeys(false);
-            }
-            // Remember the choice until next time:
-            Globals.prefs.putBoolean("generateKeysAfterInspection", autoGenerate.isSelected());
-
-            final List<BibtexEntry> selected = getSelectedEntries();
-
-            if (selected.size() > 0) {
-
-                if (newDatabase) {
-                    // Create a new BasePanel for the entries:
-                    BibtexDatabase base = new BibtexDatabase();
-                    panel = new BasePanel(frame, base, null, new MetaData(),
-                        Globals.prefs.get("defaultEncoding"));
-                }
-
-                boolean groupingCanceled = false;
-
-                // Set owner/timestamp if options are enabled:
-                Util.setAutomaticFields(selected, Globals.prefs.getBoolean("overwriteOwner"),
-                    Globals.prefs.getBoolean("overwriteTimeStamp"), Globals.prefs.getBoolean("markImportedEntries"));
-
-
-                // Check if we should unmark entries before adding the new ones:
-                if (Globals.prefs.getBoolean("unmarkAllEntriesBeforeImporting"))
-                    for (BibtexEntry entry : panel.database().getEntries()) {
-                        Util.unmarkEntry(entry, true, panel.database(), ce);
-                    }
-
-                for (Iterator<BibtexEntry> i = selected.iterator(); i.hasNext();) {
-                    BibtexEntry entry = i.next();
-                    // entry.clone();
-
-                    // Remove settings to group/search hit status:
-                    entry.setSearchHit(false);
-                    entry.setGroupHit(false);
-
-                    // If this entry should be added to any groups, do it now:
-                    Set<GroupTreeNode> groups = groupAdditions.get(entry);
-                    if (!groupingCanceled && (groups != null)) {
-                        if (entry.getField(BibtexFields.KEY_FIELD) == null) {
-                            // The entry has no key, so it can't be added to the
-                            // group.
-                            // The best course of ation is probably to ask the
-                            // user if a key should be generated
-                            // immediately.
-                            int answer = JOptionPane
-                                .showConfirmDialog(
-                                    ImportInspectionDialog.this,
-                                    Globals
-                                        .lang("Cannot add entries to group without generating keys. Generate keys now?"),
-                                    Globals.lang("Add to group"), JOptionPane.YES_NO_OPTION);
-                            if (answer == JOptionPane.YES_OPTION) {
-                                generateKeys(false);
-                            } else
-                                groupingCanceled = true;
-                        }
-
-                        // If the key was list, or has been list now, go ahead:
-                        if (entry.getField(BibtexFields.KEY_FIELD) != null) {
-                            for (Iterator<GroupTreeNode> i2 = groups.iterator(); i2.hasNext();) {
-                                GroupTreeNode node = i2.next();
-                                if (node.getGroup().supportsAdd()) {
-                                    // Add the entry:
-                                    AbstractUndoableEdit undo = node.getGroup().add(
-                                        new BibtexEntry[] { entry });
-                                    if (undo instanceof UndoableChangeAssignment)
-                                        ((UndoableChangeAssignment) undo).setEditedNode(node);
-                                    ce.addEdit(undo);
-
-                                } else {
-                                    // Shouldn't happen...
-                                }
-                            }
-                        }
-                    }
-
-                    try {
-                        entry.setId(Util.createNeutralId());
-                        panel.database().insertEntry(entry);
-                        // Let the autocompleters, if any, harvest words from
-                        // the entry:
-                        Util.updateCompletersForEntry(panel.getAutoCompleters(), entry);
-                        ce.addEdit(new UndoableInsertEntry(panel.database(), entry, panel));
-                    } catch (KeyCollisionException e) {
-                        e.printStackTrace();
-                    }
-                }
-
-                ce.end();
-                panel.undoManager.addEdit(ce);
-            }
-
-            dispose();
-            SwingUtilities.invokeLater(new Thread() {
-
-                public void run() {
-                    if (newDatabase) {
-                        frame.addTab(panel, null, true);
-                    }
-                    panel.markBaseChanged();
-
-                    if (selected.size() > 0) {
-                        frame.output(Globals.lang("Number of entries successfully imported") +
-                            ": " + selected.size());
-                    } else {
-                        frame.output(Globals.lang("No entries imported."));
-                    }
-                }
-            });
-        }
-    }
-
-    protected void signalStopFetching() {
-        for (CallBack c : callBacks) {
-            c.stopFetching();
-        }
-    }
-
-    protected void setWidths() {
-        TableColumnModel cm = glTable.getColumnModel();
-        cm.getColumn(0).setPreferredWidth(55);
-        cm.getColumn(0).setMinWidth(55);
-        cm.getColumn(0).setMaxWidth(55);
-        for (int i = 1; i < PAD; i++) {
-        	// Check if the Column is a RankingColumn
-        	// If this is the case, set a certain Column-width,
-        	// because the RankingIconColumn needs some more width
-        	if (frame.basePanel().tableFormat.isRankingColumn(i)) {
-        		// Lock the width of ranking icon column.
-                cm.getColumn(i).setPreferredWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
-                cm.getColumn(i).setMinWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
-                cm.getColumn(i).setMaxWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
-        	} else {
-        		// Lock the width of icon columns.
-                cm.getColumn(i).setPreferredWidth(GUIGlobals.WIDTH_ICON_COL);
-                cm.getColumn(i).setMinWidth(GUIGlobals.WIDTH_ICON_COL);
-                cm.getColumn(i).setMaxWidth(GUIGlobals.WIDTH_ICON_COL);	
-        	}
-        }
-
-        for (int i = 0; i < fields.length; i++) {
-            int width = BibtexFields.getFieldLength(fields[i]);
-            glTable.getColumnModel().getColumn(i + PAD).setPreferredWidth(width);
-        }
-    }
-
-    class StopListener implements ActionListener {
-
-        public void actionPerformed(ActionEvent event) {
-            signalStopFetching();
-            entryListComplete();
-        }
-    }
-
-    class CancelListener implements ActionListener {
-
-        public void actionPerformed(ActionEvent event) {
-            signalStopFetching();
-            dispose();
-            frame.output(Globals.lang("Import canceled by user"));
-        }
-    }
-
-    class GenerateListener implements ActionListener {
-
-        public void actionPerformed(ActionEvent event) {
-            generate.setEnabled(false);
-            generatedKeys = true; // To prevent the button from getting
-            // enabled again.
-            generateKeys(true); // Generate the keys.
-        }
-    }
-
-    class DeleteListener extends AbstractAction implements ActionListener {
-
-        public DeleteListener() {
-            super(Globals.lang("Delete"), GUIGlobals.getImage("delete"));
-        }
-
-        public void actionPerformed(ActionEvent event) {
-            removeSelectedEntries();
-        }
-    }
-
-    class MyTable extends JTable {
-
-        public MyTable(TableModel model) {
-            super(model);
-            // setDefaultRenderer(Boolean.class, );
-        }
-
-        public boolean isCellEditable(int row, int col) {
-            return col == 0;
-        }
-    }
-
-    class MyTableModel extends DefaultTableModel {
-
-        public Class<?> getColumnClass(int i) {
-            if (i == 0)
-                return Boolean.class;
-            else
-                return String.class;
-        }
-
-    }
-
-    class SelectionButton implements ActionListener {
-
-        protected Boolean enable;
-
-        public SelectionButton(boolean enable) {
-            this.enable = Boolean.valueOf(enable);
-        }
-
-        public void actionPerformed(ActionEvent event) {
-            for (int i = 0; i < glTable.getRowCount(); i++) {
-                glTable.setValueAt(enable, i, 0);
-            }
-            glTable.repaint();
-        }
-    }
-
-    class DeselectDuplicatesButtonListener implements ActionListener {
-
-        public void actionPerformed(ActionEvent event) {
-            for (int i = 0; i < glTable.getRowCount(); i++) {
-                if (glTable.getValueAt(i, DUPL_COL) != null) {
-                    glTable.setValueAt(Boolean.valueOf(false), i, 0);
-                }
-            }
-            glTable.repaint();
-        }
-    }
-
-    class EntrySelectionListener implements ListEventListener<BibtexEntry> {
-
-        public void listChanged(ListEvent<BibtexEntry> listEvent) {
-            if (listEvent.getSourceList().size() == 1) {
-                preview.setEntry(listEvent.getSourceList().get(0));
-                contentPane.setDividerLocation(0.5f);
-                SwingUtilities.invokeLater(new Runnable() {
-
-                    public void run() {
-                        preview.scrollRectToVisible(toRect);
-                    }
-                });
-            }
-        }
-    }
-
-    /**
-     * This class handles clicks on the table that should trigger specific
-     * events, like opening the popup menu.
-     */
-    class TableClickListener implements MouseListener {
-
-        public boolean isIconColumn(int col) {
-            return (col == FILE_COL) || (col == PDF_COL) || (col == PS_COL) || (col == URL_COL);
-        }
-
-        public void mouseClicked(MouseEvent e) {
-            final int col = glTable.columnAtPoint(e.getPoint()), row = glTable.rowAtPoint(e
-                .getPoint());
-            if (isIconColumn(col)) {
-                BibtexEntry entry = sortedList.get(row);
-
-                switch (col) {
-                case FILE_COL:
-                    Object o = entry.getField(GUIGlobals.FILE_FIELD);
-                    if (o != null) {
-                        FileListTableModel tableModel = new FileListTableModel();
-                        tableModel.setContent((String) o);
-                        if (tableModel.getRowCount() == 0)
-                            return;
-                        FileListEntry fl = tableModel.getEntry(0);
-                        (new ExternalFileMenuItem(frame, entry, "", fl.getLink(), null, panel
-                            .metaData(), fl.getType())).actionPerformed(null);
-                    }
-                    break;
-                case URL_COL:
-                    openExternalLink("url", e);
-                    break;
-                case PDF_COL:
-                    openExternalLink("pdf", e);
-                    break;
-                case PS_COL:
-                    openExternalLink("ps", e);
-                    break;
-                }
-            }
-        }
-
-        public void mouseEntered(MouseEvent e) {
-
-        }
-
-        public void mouseExited(MouseEvent e) {
-
-        }
-
-        /**
-         * Show right-click menu. If the click happened in an icon column that
-         * presents its own popup menu, show that. Otherwise, show the ordinary
-         * popup menu.
-         * 
-         * @param e
-         *            The mouse event that triggered the popup.
-         */
-        public void showPopup(MouseEvent e) {
-            final int col = glTable.columnAtPoint(e.getPoint());
-            switch (col) {
-            case FILE_COL:
-                showFileFieldMenu(e);
-                break;
-            default:
-                showOrdinaryRightClickMenu(e);
-                break;
-            }
-
-        }
-
-        public void showOrdinaryRightClickMenu(MouseEvent e) {
-            popup.show(glTable, e.getX(), e.getY());
-        }
-
-        /**
-         * Show the popup menu for the FILE field.
-         * 
-         * @param e
-         *            The mouse event that triggered the popup.
-         */
-        public void showFileFieldMenu(MouseEvent e) {
-            final int row = glTable.rowAtPoint(e.getPoint());
-            BibtexEntry entry = sortedList.get(row);
-            JPopupMenu menu = new JPopupMenu();
-            int count = 0;
-            Object o = entry.getField(GUIGlobals.FILE_FIELD);
-            FileListTableModel fileList = new FileListTableModel();
-            fileList.setContent((String) o);
-            // If there are one or more links, open the first one:
-            for (int i = 0; i < fileList.getRowCount(); i++) {
-                FileListEntry flEntry = fileList.getEntry(i);
-                String description = flEntry.getDescription();
-                if ((description == null) || (description.trim().length() == 0))
-                    description = flEntry.getLink();
-                menu.add(new ExternalFileMenuItem(panel.frame(), entry, description, flEntry
-                    .getLink(), flEntry.getType().getIcon(), panel.metaData(), flEntry.getType()));
-                count++;
-            }
-            if (count == 0) {
-                showOrdinaryRightClickMenu(e);
-            } else
-                menu.show(glTable, e.getX(), e.getY());
-        }
-
-        /**
-         * Open old-style external links after user clicks icon.
-         * 
-         * @param fieldName
-         *            The name of the BibTeX field this icon is used for.
-         * @param e
-         *            The MouseEvent that triggered this operation.
-         */
-        public void openExternalLink(String fieldName, MouseEvent e) {
-            final int row = glTable.rowAtPoint(e.getPoint());
-            BibtexEntry entry = sortedList.get(row);
-
-            Object link = entry.getField(fieldName);
-            try {
-                if (link != null)
-                    Util.openExternalViewer(panel.metaData(), (String) link, fieldName);
-            } catch (IOException ex) {
-                ex.printStackTrace();
-            }
-        }
-
-        public void mouseReleased(MouseEvent e) {
-            // Check if the user has right-clicked. If so, open the right-click
-            // menu.
-            if (e.isPopupTrigger()) {
-                showPopup(e);
-                return;
-            }
-        }
-
-        public void mousePressed(MouseEvent e) {
-            // Check if the user has right-clicked. If so, open the right-click
-            // menu.
-            if (e.isPopupTrigger()) {
-                showPopup(e);
-                return;
-            }
-
-            // Check if any other action should be taken:
-            final int col = glTable.columnAtPoint(e.getPoint()), row = glTable.rowAtPoint(e
-                .getPoint());
-            // Is this the duplicate icon column, and is there an icon?
-            if ((col == DUPL_COL) && (glTable.getValueAt(row, col) != null)) {
-                BibtexEntry first = sortedList.get(row);
-                BibtexEntry other = DuplicateCheck.containsDuplicate(panel.database(), first);
-                if (other != null) {
-                    // This will be true if the duplicate is in the existing
-                    // database.
-                    DuplicateResolverDialog diag = new DuplicateResolverDialog(
-                        ImportInspectionDialog.this, other, first,
-                        DuplicateResolverDialog.INSPECTION);
-                    Util.placeDialog(diag, ImportInspectionDialog.this);
-                    diag.setVisible(true);
-                    ImportInspectionDialog.this.toFront();
-                    if (diag.getSelected() == DuplicateResolverDialog.KEEP_UPPER) {
-                        // Remove old entry. Or... add it to a list of entries
-                        // to be deleted. We only delete
-                        // it after Ok is clicked.
-                        entriesToDelete.add(other);
-                        // Clear duplicate icon, which is controlled by the
-                        // group hit
-                        // field of the entry:
-                        entries.getReadWriteLock().writeLock().lock();
-                        first.setGroupHit(false);
-                        entries.getReadWriteLock().writeLock().unlock();
-
-                    } else if (diag.getSelected() == DuplicateResolverDialog.KEEP_LOWER) {
-                        // Remove the entry from the import inspection dialog.
-                        entries.getReadWriteLock().writeLock().lock();
-                        entries.remove(first);
-                        entries.getReadWriteLock().writeLock().unlock();
-                    } else if (diag.getSelected() == DuplicateResolverDialog.KEEP_BOTH) {
-                        // Do nothing.
-                        entries.getReadWriteLock().writeLock().lock();
-                        first.setGroupHit(false);
-                        entries.getReadWriteLock().writeLock().unlock();
-                    }
-                }
-                // Check if the duplicate is of another entry in the import:
-                other = internalDuplicate(entries, first);
-                if (other != null) {
-                    int answer = DuplicateResolverDialog.resolveDuplicate(
-                        ImportInspectionDialog.this, first, other);
-                    if (answer == DuplicateResolverDialog.KEEP_UPPER) {
-                        entries.remove(other);
-                        first.setGroupHit(false);
-                    } else if (answer == DuplicateResolverDialog.KEEP_LOWER) {
-                        entries.remove(first);
-                    } else if (answer == DuplicateResolverDialog.KEEP_BOTH) {
-                        first.setGroupHit(false);
-                    }
-                }
-            }
-        }
-    }
-
-    class AttachUrl extends JMenuItem implements ActionListener {
-
-        public AttachUrl() {
-            super(Globals.lang("Attach URL"));
-            addActionListener(this);
-        }
-
-        public void actionPerformed(ActionEvent event) {
-            if (selectionModel.getSelected().size() != 1)
-                return;
-            BibtexEntry entry = selectionModel.getSelected().get(0);
-            String result = JOptionPane.showInputDialog(ImportInspectionDialog.this, Globals
-                .lang("Enter URL"), entry.getField("url"));
-            entries.getReadWriteLock().writeLock().lock();
-            if (result != null) {
-                if (result.equals("")) {
-                    entry.clearField("url");
-                } else {
-                    entry.setField("url", result);
-                }
-            }
-            entries.getReadWriteLock().writeLock().unlock();
-            glTable.repaint();
-        }
-    }
-
-    class DownloadFile extends JMenuItem implements ActionListener,
-        DownloadExternalFile.DownloadCallback {
-
-        BibtexEntry entry = null;
-
-        public DownloadFile() {
-            super(Globals.lang("Download file"));
-            addActionListener(this);
-        }
-
-        public void actionPerformed(ActionEvent actionEvent) {
-            if (selectionModel.getSelected().size() != 1)
-                return;
-            entry = selectionModel.getSelected().get(0);
-            String bibtexKey = entry.getCiteKey();
-            if (bibtexKey == null) {
-                int answer = JOptionPane.showConfirmDialog(frame, Globals
-                    .lang("This entry has no BibTeX key. Generate key now?"), Globals
-                    .lang("Download file"), JOptionPane.OK_CANCEL_OPTION,
-                    JOptionPane.QUESTION_MESSAGE);
-                if (answer == JOptionPane.OK_OPTION) {
-                    generateKeySelectedEntry();
-                    bibtexKey = entry.getCiteKey();
-                }
-            }
-            DownloadExternalFile def = new DownloadExternalFile(frame, metaData, bibtexKey);
-            try {
-                def.download(this);
-            } catch (IOException ex) {
-                ex.printStackTrace();
-            }
-        }
-
-        public void downloadComplete(FileListEntry file) {
-            ImportInspectionDialog.this.toFront(); // Hack
-            FileListTableModel model = new FileListTableModel();
-            String oldVal = entry.getField(GUIGlobals.FILE_FIELD);
-            if (oldVal != null)
-                model.setContent(oldVal);
-            model.addEntry(model.getRowCount(), file);
-            entries.getReadWriteLock().writeLock().lock();
-            entry.setField(GUIGlobals.FILE_FIELD, model.getStringRepresentation());
-            entries.getReadWriteLock().writeLock().unlock();
-            glTable.repaint();
-        }
-    }
-
-    class AutoSetLinks extends JMenuItem implements ActionListener {
-
-        public AutoSetLinks() {
-            super(Globals.lang("Autoset external links"));
-            addActionListener(this);
-        }
-
-        public void actionPerformed(ActionEvent actionEvent) {
-            if (selectionModel.getSelected().size() != 1)
-                return;
-            final BibtexEntry entry = selectionModel.getSelected().get(0);
-            String bibtexKey = entry.getCiteKey();
-            if (bibtexKey == null) {
-                int answer = JOptionPane.showConfirmDialog(frame, Globals
-                    .lang("This entry has no BibTeX key. Generate key now?"), Globals
-                    .lang("Download file"), JOptionPane.OK_CANCEL_OPTION,
-                    JOptionPane.QUESTION_MESSAGE);
-                if (answer == JOptionPane.OK_OPTION) {
-                    generateKeySelectedEntry();
-                    bibtexKey = entry.getCiteKey();
-                } else
-                    return; // Can't go on without the bibtex key.
-            }
-            final FileListTableModel model = new FileListTableModel();
-            String oldVal = entry.getField(GUIGlobals.FILE_FIELD);
-            if (oldVal != null)
-                model.setContent(oldVal);
-            // We have a static utility method for searching for all relevant
-            // links:
-            JDialog diag = new JDialog(ImportInspectionDialog.this, true);
-            FileListEditor.autoSetLinks(entry, model, metaData, new ActionListener() {
-
-                public void actionPerformed(ActionEvent e) {
-                    if (e.getID() > 0) {
-                        entries.getReadWriteLock().writeLock().lock();
-                        entry.setField(GUIGlobals.FILE_FIELD, model.getStringRepresentation());
-                        entries.getReadWriteLock().writeLock().unlock();
-                        glTable.repaint();
-                    }
-                }
-            }, diag);
-
-        }
-    }
-
-    class LinkLocalFile extends JMenuItem implements ActionListener,
-        DownloadExternalFile.DownloadCallback {
-
-        BibtexEntry entry = null;
-
-        public LinkLocalFile() {
-            super(Globals.lang("Link local file"));
-            addActionListener(this);
-        }
-
-        public void actionPerformed(ActionEvent actionEvent) {
-            if (selectionModel.getSelected().size() != 1)
-                return;
-            entry = selectionModel.getSelected().get(0);
-            FileListEntry flEntry = new FileListEntry("", "", null);
-            FileListEntryEditor editor = new FileListEntryEditor(frame, flEntry, false, true,
-                metaData);
-            editor.setVisible(true, true);
-            if (editor.okPressed()) {
-                FileListTableModel model = new FileListTableModel();
-                String oldVal = entry.getField(GUIGlobals.FILE_FIELD);
-                if (oldVal != null)
-                    model.setContent(oldVal);
-                model.addEntry(model.getRowCount(), flEntry);
-                entries.getReadWriteLock().writeLock().lock();
-                entry.setField(GUIGlobals.FILE_FIELD, model.getStringRepresentation());
-                entries.getReadWriteLock().writeLock().unlock();
-                glTable.repaint();
-            }
-        }
-
-        public void downloadComplete(FileListEntry file) {
-            ImportInspectionDialog.this.toFront(); // Hack
-            FileListTableModel model = new FileListTableModel();
-            String oldVal = entry.getField(GUIGlobals.FILE_FIELD);
-            if (oldVal != null)
-                model.setContent(oldVal);
-            model.addEntry(model.getRowCount(), file);
-            entries.getReadWriteLock().writeLock().lock();
-            entry.setField(GUIGlobals.FILE_FIELD, model.getStringRepresentation());
-            entries.getReadWriteLock().writeLock().unlock();
-            glTable.repaint();
-        }
-    }
-
-    class AttachFile extends JMenuItem implements ActionListener {
-
-        String fileType;
-
-        public AttachFile(String fileType) {
-            super(Globals.lang("Attach %0 file", new String[] { fileType.toUpperCase() }));
-            this.fileType = fileType;
-            addActionListener(this);
-        }
-
-        public void actionPerformed(ActionEvent event) {
-
-            if (selectionModel.getSelected().size() != 1)
-                return;
-            BibtexEntry entry = selectionModel.getSelected().get(0);
-            // Call up a dialog box that provides Browse, Download and auto
-            // buttons:
-            AttachFileDialog diag = new AttachFileDialog(ImportInspectionDialog.this, metaData,
-                entry, fileType);
-            Util.placeDialog(diag, ImportInspectionDialog.this);
-            diag.setVisible(true);
-            // After the dialog has closed, if it wasn't cancelled, list the
-            // field:
-            if (!diag.cancelled()) {
-                entries.getReadWriteLock().writeLock().lock();
-                entry.setField(fileType, diag.getValue());
-                entries.getReadWriteLock().writeLock().unlock();
-                glTable.repaint();
-            }
-
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    protected void setupComparatorChooser() {
-        // First column:
-        java.util.List<Comparator> comparators = comparatorChooser
-            .getComparatorsForColumn(0);
-        comparators.clear();
-
-        comparators = comparatorChooser.getComparatorsForColumn(1);
-        comparators.clear();
-
-        // Icon columns:
-        for (int i = 2; i < PAD; i++) {
-            comparators = comparatorChooser.getComparatorsForColumn(i);
-            comparators.clear();
-            if (i == FILE_COL)
-                comparators.add(new IconComparator(new String[] { GUIGlobals.FILE_FIELD }));
-            else if (i == PDF_COL)
-                comparators.add(new IconComparator(new String[] { "pdf" }));
-            else if (i == PS_COL)
-                comparators.add(new IconComparator(new String[] { "ps" }));
-            else if (i == URL_COL)
-                comparators.add(new IconComparator(new String[] { "url" }));
-
-        }
-        // Remaining columns:
-        for (int i = PAD; i < PAD + fields.length; i++) {
-            comparators = comparatorChooser.getComparatorsForColumn(i);
-            comparators.clear();
-            comparators.add(new FieldComparator(fields[i - PAD]));
-        }
-
-        // Set initial sort columns:
-
-        /*
-         * // Default sort order: String[] sortFields = new String[]
-         * {Globals.prefs.get("priSort"), Globals.prefs.get("secSort"),
-         * Globals.prefs.get("terSort")}; boolean[] sortDirections = new
-         * boolean[] {Globals.prefs.getBoolean("priDescending"),
-         * Globals.prefs.getBoolean("secDescending"),
-         * Globals.prefs.getBoolean("terDescending")}; // descending
-         */
-        sortedList.getReadWriteLock().writeLock().lock();
-        comparatorChooser.appendComparator(PAD, 0, false);
-        sortedList.getReadWriteLock().writeLock().unlock();
-
-    }
-
-    class EntryTable extends JTable {
-
-        GeneralRenderer renderer = new GeneralRenderer(Color.white);
-
-        public EntryTable(TableModel model) {
-            super(model);
-            getTableHeader().setReorderingAllowed(false);
-        }
-
-        public TableCellRenderer getCellRenderer(int row, int column) {
-            return column == 0 ? getDefaultRenderer(Boolean.class) : renderer;
-        }
-
-        /*
-         * public TableCellEditor getCellEditor() { return
-         * getDefaultEditor(Boolean.class); }
-         */
-
-        public Class<?> getColumnClass(int col) {
-            if (col == 0)
-                return Boolean.class;
-            else if (col < PAD)
-                return JLabel.class;
-            else
-                return String.class;
-        }
-
-        public boolean isCellEditable(int row, int column) {
-            return column == 0;
-        }
-
-        public void setValueAt(Object value, int row, int column) {
-            // Only column 0, which is controlled by BibtexEntry.searchHit, is
-            // editable:
-            entries.getReadWriteLock().writeLock().lock();
-            BibtexEntry entry = sortedList.get(row);
-            entry.setSearchHit(((Boolean) value).booleanValue());
-            entries.getReadWriteLock().writeLock().unlock();
-        }
-    }
-
-    class EntryTableFormat implements TableFormat<BibtexEntry> {
-
-        public int getColumnCount() {
-            return PAD + fields.length; 
-        }
-
-        public String getColumnName(int i) {
-            if (i == 0)
-                return Globals.lang("Keep");
-            if (i >= PAD) {
-                return Util.nCase(fields[i - PAD]);
-            }
-            return "";
-        }
-
-        public Object getColumnValue(BibtexEntry entry, int i) {
-            if (i == 0)
-                return entry.isSearchHit() ? Boolean.TRUE : Boolean.FALSE;
-            else if (i < PAD) {
-                Object o;
-                switch (i) {
-                case DUPL_COL:
-                    return entry.isGroupHit() ? duplLabel : null;
-                case FILE_COL:
-                    o = entry.getField(GUIGlobals.FILE_FIELD);
-                    if (o != null) {
-                        FileListTableModel model = new FileListTableModel();
-                        model.setContent((String) o);
-                        fileLabel.setToolTipText(model.getToolTipHTMLRepresentation());
-                        if (model.getRowCount() > 0)
-                            fileLabel.setIcon(model.getEntry(0).getType().getIcon());
-                        return fileLabel;
-                    } else
-                        return null;
-                case PDF_COL:
-                    o = entry.getField("pdf");
-                    if (o != null) {
-                        pdfLabel.setToolTipText((String) o);
-                        return pdfLabel;
-                    } else
-                        return null;
-
-                case PS_COL:
-                    o = entry.getField("ps");
-                    if (o != null) {
-                        psLabel.setToolTipText((String) o);
-                        return psLabel;
-                    } else
-                        return null;
-                case URL_COL:
-                    o = entry.getField("url");
-                    if (o != null) {
-                        urlLabel.setToolTipText((String) o);
-                        return urlLabel;
-                    } else
-                        return null;
-                default:
-                    return null;
-                }
-            } else {
-                String field = fields[i - PAD];
-                if (field.equals("author") || field.equals("editor")) {
-                    String contents = entry.getField(field);
-                    return (contents != null) ? AuthorList.fixAuthor_Natbib(contents) : "";
-                } else
-                    return entry.getField(field);
-            }
-        }
-
-    }
-
-    public void toFront() {
-        super.toFront();
-    }
-
-    public void setStatus(String s) {
-        frame.setStatus(s);
-    }
-
-    public void showMessage(Object message, String title, int msgType) {
-        JOptionPane.showMessageDialog(this, message, title, msgType);
-    }
-
-    public void showMessage(String message) {
-        JOptionPane.showMessageDialog(this, message);
-    }
-}
+package net.sf.jabref.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.swing.AbstractAction;
+import javax.swing.ActionMap;
+import javax.swing.BorderFactory;
+import javax.swing.InputMap;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JProgressBar;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableModel;
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.*;
+import net.sf.jabref.external.DownloadExternalFile;
+import net.sf.jabref.external.ExternalFileMenuItem;
+import net.sf.jabref.groups.AbstractGroup;
+import net.sf.jabref.groups.AllEntriesGroup;
+import net.sf.jabref.groups.GroupTreeNode;
+import net.sf.jabref.groups.UndoableChangeAssignment;
+import net.sf.jabref.help.HelpAction;
+import net.sf.jabref.imports.ImportInspector;
+import net.sf.jabref.labelPattern.LabelPatternUtil;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableInsertEntry;
+import net.sf.jabref.undo.UndoableRemoveEntry;
+import ca.odell.glazedlists.BasicEventList;
+import ca.odell.glazedlists.EventList;
+import ca.odell.glazedlists.SortedList;
+import ca.odell.glazedlists.event.ListEvent;
+import ca.odell.glazedlists.event.ListEventListener;
+import ca.odell.glazedlists.gui.TableFormat;
+import ca.odell.glazedlists.swing.EventSelectionModel;
+import ca.odell.glazedlists.swing.EventTableModel;
+import ca.odell.glazedlists.swing.TableComparatorChooser;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.ButtonStackBuilder;
+import com.jgoodies.uif_lite.component.UIFSplitPane;
+
+/**
+ * Dialog to allow the selection of entries as part of an Import.
+ * 
+ * The usual way to use this class is to pass it to an Importer which will do
+ * the following:
+ * <ul>
+ * <li>Register itself as a callback to get notified if the user wants to stop
+ * the import.</li>
+ * <li>Call setVisible(true) to display the dialog</li>
+ * <li>For each entry that has been found call addEntry(...)</li>
+ * <li>Call entryListComplete() after all entries have been fetched</li>
+ * </ul>
+ * 
+ * If the importer wants to cancel the import, it should call the dispose()
+ * method.
+ * 
+ * If the importer receives the stopFetching-call, it should stop fetching as
+ * soon as possible (it is not really critical, but good style to not contribute
+ * any more results via addEntry, call entryListComplete() or dispose(), after
+ * receiving this call).
+ * 
+ * @author alver
+ */
+public class ImportInspectionDialog extends JDialog implements ImportInspector, OutputPrinter {
+
+    public static interface CallBack {
+
+        /**
+         * This method is called by the dialog when the user has cancelled or
+         * signalled a stop. It is expected that any long-running fetch
+         * operations will stop after this method is called.
+         */
+        public void stopFetching();
+    }
+
+	protected ImportInspectionDialog ths = this;
+
+    protected BasePanel panel;
+
+    protected JabRefFrame frame;
+
+    protected MetaData metaData;
+
+    protected UIFSplitPane contentPane = new UIFSplitPane(UIFSplitPane.VERTICAL_SPLIT);
+
+    protected JTable glTable;
+
+    protected TableComparatorChooser<BibtexEntry> comparatorChooser;
+
+    protected EventSelectionModel<BibtexEntry> selectionModel;
+
+    protected String[] fields;
+
+    protected JProgressBar progressBar = new JProgressBar(JProgressBar.HORIZONTAL);
+
+    protected JButton ok = new JButton(Globals.lang("Ok")), cancel = new JButton(Globals
+        .lang("Cancel")), generate = new JButton(Globals.lang("Generate now"));
+
+    protected EventList<BibtexEntry> entries = new BasicEventList<BibtexEntry>();
+
+    protected SortedList<BibtexEntry> sortedList;
+
+    /**
+     * Duplicate resolving may require deletion of old entries.
+     */
+    protected List<BibtexEntry> entriesToDelete = new ArrayList<BibtexEntry>();
+
+    protected String undoName;
+
+    protected ArrayList<CallBack> callBacks = new ArrayList<CallBack>();
+
+    protected boolean newDatabase;
+
+    protected JMenu groupsAdd = new JMenu(Globals.lang("Add to group"));
+
+    protected JPopupMenu popup = new JPopupMenu();
+
+    protected JButton selectAll = new JButton(Globals.lang("Select all"));
+
+    protected JButton deselectAll = new JButton(Globals.lang("Deselect all"));
+
+    protected JButton deselectAllDuplicates = new JButton(Globals.lang("Deselect all duplicates"));
+
+    protected JButton stop = new JButton(Globals.lang("Stop"));
+
+    protected JButton delete = new JButton(Globals.lang("Delete"));
+
+    protected JButton help = new JButton(Globals.lang("Help"));
+
+    protected PreviewPanel preview;
+
+    protected boolean generatedKeys = false; // Set to true after keys have
+                                                // been
+
+    // generated.
+
+    protected boolean defaultSelected = true;
+
+    protected Rectangle toRect = new Rectangle(0, 0, 1, 1);
+
+    protected Map<BibtexEntry, Set<GroupTreeNode>> groupAdditions = new HashMap<BibtexEntry, Set<GroupTreeNode>>();
+
+    protected JCheckBox autoGenerate = new JCheckBox(Globals.lang("Generate keys"), Globals.prefs
+        .getBoolean("generateKeysAfterInspection"));
+
+    protected JLabel duplLabel = new JLabel(GUIGlobals.getImage("duplicate")),
+        fileLabel = new JLabel(GUIGlobals.getImage("psSmall")), pdfLabel = new JLabel(GUIGlobals
+            .getImage("pdfSmall")), psLabel = new JLabel(GUIGlobals.getImage("psSmall")),
+        urlLabel = new JLabel(GUIGlobals.getImage("wwwSmall"));
+
+    protected final int DUPL_COL = 1, FILE_COL = 2, PDF_COL = -1,// 3,
+        PS_COL = -2,// 4,
+        URL_COL = 3,// 5,
+        PAD = 4; // 6;
+
+    /**
+     * The "defaultSelected" boolean value determines if new entries added are
+     * selected for import or not. This value is true by default.
+     * 
+     * @param defaultSelected
+     *            The desired value.
+     */
+    public void setDefaultSelected(boolean defaultSelected) {
+        this.defaultSelected = defaultSelected;
+    }
+
+    /**
+     * Creates a dialog that displays the given list of fields in the table. The
+     * dialog allows another process to add entries dynamically while the dialog
+     * is shown.
+     * 
+     * @param frame
+     * @param panel
+     * @param fields
+     */
+    public ImportInspectionDialog(JabRefFrame frame, BasePanel panel, String[] fields,
+        String undoName, boolean newDatabase) {
+        this.frame = frame;
+        this.panel = panel;
+        this.metaData = (panel != null) ? panel.metaData() : new MetaData();
+        this.fields = fields;
+        this.undoName = undoName;
+        this.newDatabase = newDatabase;
+        preview = new PreviewPanel(null, metaData, Globals.prefs.get("preview0"));
+        this.setModal(true);
+
+        duplLabel.setToolTipText(Globals
+            .lang("Possible duplicate of existing entry. Click to resolve."));
+
+        sortedList = new SortedList<BibtexEntry>(entries);
+        EventTableModel<BibtexEntry> tableModelGl = new EventTableModel<BibtexEntry>(sortedList,
+            new EntryTableFormat());
+        glTable = new EntryTable(tableModelGl);
+        GeneralRenderer renderer = new GeneralRenderer(Color.white);
+        glTable.setDefaultRenderer(JLabel.class, renderer);
+        glTable.setDefaultRenderer(String.class, renderer);
+        glTable.getInputMap().put(Globals.prefs.getKey("Delete"), "delete");
+        DeleteListener deleteListener = new DeleteListener();
+        glTable.getActionMap().put("delete", deleteListener);
+
+        selectionModel = new EventSelectionModel<BibtexEntry>(sortedList);
+        glTable.setSelectionModel(selectionModel);
+        selectionModel.getSelected().addListEventListener(new EntrySelectionListener());
+        comparatorChooser = TableComparatorChooser.install(glTable, sortedList,
+            TableComparatorChooser.MULTIPLE_COLUMN_KEYBOARD);
+        setupComparatorChooser();
+        glTable.addMouseListener(new TableClickListener());
+
+        setWidths();
+
+        getContentPane().setLayout(new BorderLayout());
+        progressBar.setIndeterminate(true);
+        JPanel centerPan = new JPanel();
+        centerPan.setLayout(new BorderLayout());
+
+        contentPane.setTopComponent(new JScrollPane(glTable));
+        contentPane.setBottomComponent(preview);
+
+        centerPan.add(contentPane, BorderLayout.CENTER);
+        centerPan.add(progressBar, BorderLayout.SOUTH);
+
+        popup.add(deleteListener);
+        popup.addSeparator();
+        if (!newDatabase) {
+            GroupTreeNode node = metaData.getGroups();
+            groupsAdd.setEnabled(false); // Will get enabled if there are
+            // groups that can be added to.
+            insertNodes(groupsAdd, node);
+            popup.add(groupsAdd);
+        }
+
+        // Add "Attach file" menu choices to right click menu:
+        popup.add(new LinkLocalFile());
+        popup.add(new DownloadFile());
+        popup.add(new AutoSetLinks());
+        // popup.add(new AttachFile("pdf"));
+        // popup.add(new AttachFile("ps"));
+        popup.add(new AttachUrl());
+        getContentPane().add(centerPan, BorderLayout.CENTER);
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(stop);
+        bb.addButton(cancel);
+        bb.addRelatedGap();
+        bb.addButton(help);
+        bb.addGlue();
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+
+        ButtonStackBuilder builder = new ButtonStackBuilder();
+        builder.addButton(selectAll);
+        builder.addButton(deselectAll);
+        builder.addButton(deselectAllDuplicates);
+        builder.addRelatedGap();
+        builder.addButton(delete);
+        builder.addRelatedGap();
+        builder.addFixed(autoGenerate);
+        builder.addButton(generate);
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+        centerPan.add(builder.getPanel(), BorderLayout.WEST);
+
+        ok.setEnabled(false);
+        generate.setEnabled(false);
+        ok.addActionListener(new OkListener());
+        cancel.addActionListener(new CancelListener());
+        generate.addActionListener(new GenerateListener());
+        stop.addActionListener(new StopListener());
+        selectAll.addActionListener(new SelectionButton(true));
+        deselectAll.addActionListener(new SelectionButton(false));
+        deselectAllDuplicates.addActionListener(new DeselectDuplicatesButtonListener());
+        deselectAllDuplicates.setEnabled(false);
+        delete.addActionListener(deleteListener);
+        help.addActionListener(new HelpAction(frame.helpDiag, GUIGlobals.importInspectionHelp));
+        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+
+        // Remember and default to last size:
+        setSize(new Dimension(Globals.prefs.getInt("importInspectionDialogWidth"), Globals.prefs
+            .getInt("importInspectionDialogHeight")));
+        addWindowListener(new WindowAdapter() {
+
+            public void windowOpened(WindowEvent e) {
+                contentPane.setDividerLocation(0.5f);
+            }
+
+            public void windowClosed(WindowEvent e) {
+                Globals.prefs.putInt("importInspectionDialogWidth", getSize().width);
+                Globals.prefs.putInt("importInspectionDialogHeight", getSize().height);
+            }
+        });
+        // Key bindings:
+        AbstractAction closeAction = new AbstractAction() {
+          public void actionPerformed(ActionEvent e) {
+            dispose();
+          }
+        };
+        ActionMap am = contentPane.getActionMap();
+        InputMap im = contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", closeAction);
+
+    }
+
+    /* (non-Javadoc)
+	 * @see net.sf.jabref.gui.ImportInspection#setProgress(int, int)
+	 */
+    public void setProgress(int current, int max) {
+        progressBar.setIndeterminate(false);
+        progressBar.setMinimum(0);
+        progressBar.setMaximum(max);
+        progressBar.setValue(current);
+    }
+
+    /* (non-Javadoc)
+	 * @see net.sf.jabref.gui.ImportInspection#addEntry(net.sf.jabref.BibtexEntry)
+	 */
+    public void addEntry(BibtexEntry entry) {
+        List<BibtexEntry> list = new ArrayList<BibtexEntry>();
+        list.add(entry);
+        addEntries(list);
+    }
+
+    /* (non-Javadoc)
+	 * @see net.sf.jabref.gui.ImportInspection#addEntries(java.util.Collection)
+	 */
+    public void addEntries(Collection<BibtexEntry> entries) {
+
+        for (BibtexEntry entry : entries) {
+            // We exploit the entry's search status for indicating "Keep"
+            // status:
+            entry.setSearchHit(defaultSelected);
+            // We exploit the entry's group status for indicating duplicate
+            // status.
+            // Checking duplicates means both checking against the background
+            // database (if
+            // applicable) and against entries already in the table.
+            if (((panel != null) && (DuplicateCheck.containsDuplicate(panel.database(), entry) != null)) ||
+                (internalDuplicate(this.entries, entry) != null)) {
+                entry.setGroupHit(true);
+                deselectAllDuplicates.setEnabled(true);
+            }
+            this.entries.getReadWriteLock().writeLock().lock();
+            this.entries.add(entry);
+            this.entries.getReadWriteLock().writeLock().unlock();
+        }
+    }
+
+    /**
+     * Checks if there are duplicates to the given entry in the Collection. Does
+     * not report the entry as duplicate of itself if it is in the Collection.
+     * 
+     * @param entries
+     *            A Collection of BibtexEntry instances.
+     * @param entry
+     *            The entry to search for duplicates of.
+     * @return A possible duplicate, if any, or null if none were found.
+     */
+    protected BibtexEntry internalDuplicate(Collection<BibtexEntry> entries, BibtexEntry entry) {
+        for (BibtexEntry othEntry : entries) {
+            if (othEntry == entry)
+                continue; // Don't compare the entry to itself
+            if (DuplicateCheck.isDuplicate(entry, othEntry))
+                return othEntry;
+        }
+        return null;
+    }
+
+    /**
+     * Removes all selected entries from the table. Synchronizes on this.entries
+     * to prevent conflict with addition of new entries.
+     */
+    public void removeSelectedEntries() {
+        int row = glTable.getSelectedRow();
+        List<Object> toRemove = new ArrayList<Object>();
+        toRemove.addAll(selectionModel.getSelected());
+        entries.getReadWriteLock().writeLock().lock();
+        for (Object o : toRemove) {
+            entries.remove(o);
+        }
+        entries.getReadWriteLock().writeLock().unlock();
+        glTable.clearSelection();
+        if ((row >= 0) && (entries.size() > 0)) {
+            row = Math.min(entries.size() - 1, row);
+            glTable.addRowSelectionInterval(row, row);
+        }
+    }
+
+    /* (non-Javadoc)
+	 * @see net.sf.jabref.gui.ImportInspection#entryListComplete()
+	 */
+    public void entryListComplete() {
+        progressBar.setIndeterminate(false);
+        progressBar.setVisible(false);
+        ok.setEnabled(true);
+        if (!generatedKeys)
+            generate.setEnabled(true);
+        stop.setEnabled(false);
+        
+        //This is for selecting and displaying the first entry in the glTable
+        this.glTable.repaint();
+        if(this.glTable.getSelectedRowCount() == 0) //Only if no row selection is done, until now
+        	if (this.glTable.getRowCount()>0)
+        		this.glTable.setRowSelectionInterval(0, 0); //Select first row in the table
+    }
+
+    /**
+     * This method returns a List containing all entries that are selected
+     * (checkbox checked).
+     * 
+     * @return a List containing the selected entries.
+     */
+    public List<BibtexEntry> getSelectedEntries() {
+        List<BibtexEntry> selected = new ArrayList<BibtexEntry>();
+        for (Iterator<BibtexEntry> i = entries.iterator(); i.hasNext();) {
+            BibtexEntry entry = i.next();
+            if (entry.isSearchHit())
+                selected.add(entry);
+        }
+        /*
+         * for (int i = 0; i < table.getRowCount(); i++) { Boolean sel =
+         * (Boolean) table.getValueAt(i, 0); if (sel.booleanValue()) {
+         * selected.add(entries.get(i)); } }
+         */
+        return selected;
+    }
+
+    /**
+     * Generate key for the selected entry only.
+     */
+    public void generateKeySelectedEntry() {
+        if (selectionModel.getSelected().size() != 1)
+            return;
+        BibtexEntry entry = selectionModel.getSelected().get(0);
+        entries.getReadWriteLock().writeLock().lock();
+
+        BibtexDatabase database;
+        MetaData metaData;
+        
+        // Relate to existing database, if any:
+        if (panel != null) {
+            database = panel.database();
+            metaData = panel.metaData();
+        } else {
+            database = new BibtexDatabase();
+            metaData = new MetaData();
+        }
+        try {
+            entry.setId(Util.createNeutralId());
+            // Add the entry to the database we are working with:
+            database.insertEntry(entry);
+        } catch (KeyCollisionException ex) {
+            ex.printStackTrace();
+        }
+        // Generate a unique key:
+        LabelPatternUtil.makeLabel(metaData, database, entry);
+        // Remove the entry from the database again, since we only added it in
+        // order to
+        // make sure the key was unique:
+        database.removeEntry(entry.getId());
+
+        entries.getReadWriteLock().writeLock().lock();
+        glTable.repaint();
+    }
+
+    /**
+     * Generate keys for all entries. All keys will be unique with respect to
+     * one another, and, if they are destined for an existing database, with
+     * respect to existing keys in the database.
+     */
+    public void generateKeys(boolean addColumn) {
+        entries.getReadWriteLock().writeLock().lock();
+
+        BibtexDatabase database;
+        MetaData metaData;
+        
+        // Relate to existing database, if any:
+        if (panel != null) {
+            database = panel.database();
+            metaData = panel.metaData();
+        } else {
+            database = new BibtexDatabase();
+            metaData = new MetaData();
+        }
+
+        List<String> keys = new ArrayList<String>(entries.size());
+        // Iterate over the entries, add them to the database we are working
+        // with,
+        // and generate unique keys:
+        for (Iterator<BibtexEntry> i = entries.iterator(); i.hasNext();) {
+            BibtexEntry entry = i.next();
+            // if (newDatabase) {
+            try {
+                entry.setId(Util.createNeutralId());
+                database.insertEntry(entry);
+            } catch (KeyCollisionException ex) {
+                ex.printStackTrace();
+            }
+            // }
+            LabelPatternUtil.makeLabel(metaData, database, entry);
+            // Add the generated key to our list:
+            keys.add(entry.getCiteKey());
+        }
+        // Remove the entries from the database again, since they are not
+        // supposed to
+        // added yet. They only needed to be in it while we generated the keys,
+        // to keep
+        // control over key uniqueness.
+        for (Iterator<BibtexEntry> i = entries.iterator(); i.hasNext();) {
+            BibtexEntry entry = i.next();
+            database.removeEntry(entry.getId());
+        }
+        entries.getReadWriteLock().writeLock().lock();
+        glTable.repaint();
+    }
+
+    public void insertNodes(JMenu menu, GroupTreeNode node) {
+        final AbstractAction action = getAction(node);
+
+        if (node.getChildCount() == 0) {
+            menu.add(action);
+            if (action.isEnabled())
+                menu.setEnabled(true);
+            return;
+        }
+
+        JMenu submenu = null;
+        if (node.getGroup() instanceof AllEntriesGroup) {
+            for (int i = 0; i < node.getChildCount(); ++i) {
+                insertNodes(menu, (GroupTreeNode) node.getChildAt(i));
+            }
+        } else {
+            submenu = new JMenu("[" + node.getGroup().getName() + "]");
+            // setEnabled(true) is done above/below if at least one menu
+            // entry (item or submenu) is enabled
+            submenu.setEnabled(action.isEnabled());
+            submenu.add(action);
+            submenu.add(new JPopupMenu.Separator());
+            for (int i = 0; i < node.getChildCount(); ++i)
+                insertNodes(submenu, (GroupTreeNode) node.getChildAt(i));
+            menu.add(submenu);
+            if (submenu.isEnabled())
+                menu.setEnabled(true);
+        }
+    }
+
+    protected AbstractAction getAction(GroupTreeNode node) {
+        AbstractAction action = new AddToGroupAction(node);
+        AbstractGroup group = node.getGroup();
+        action.setEnabled(group.supportsAdd());
+        return action;
+    }
+
+    /**
+     * Stores the information about the selected entries being scheduled for
+     * addition to this group. The entries are *not* added to the group at this
+     * time. <p/> Synchronizes on this.entries to prevent conflict with threads
+     * that modify the entry list.
+     */
+    class AddToGroupAction extends AbstractAction {
+
+        protected GroupTreeNode node;
+
+        public AddToGroupAction(GroupTreeNode node) {
+            super(node.getGroup().getName());
+            this.node = node;
+        }
+
+        public void actionPerformed(ActionEvent event) {
+
+            selectionModel.getSelected().getReadWriteLock().writeLock().lock();
+            for (Iterator<BibtexEntry> i = selectionModel.getSelected().iterator(); i.hasNext();) {
+                BibtexEntry entry = i.next();
+                // We store the groups this entry should be added to in a Set in
+                // the Map:
+                Set<GroupTreeNode> groups = groupAdditions.get(entry);
+                if (groups == null) {
+                    // No previous definitions, so we create the Set now:
+                    groups = new HashSet<GroupTreeNode>();
+                    groupAdditions.put(entry, groups);
+                }
+                // Add the group:
+                groups.add(node);
+            }
+            selectionModel.getSelected().getReadWriteLock().writeLock().unlock();
+        }
+    }
+
+    public void addCallBack(CallBack cb) {
+        callBacks.add(cb);
+    }
+
+    class OkListener implements ActionListener {
+
+        public void actionPerformed(ActionEvent event) {
+
+            // First check if we are supposed to warn about duplicates. If so,
+            // see if there
+            // are unresolved duplicates, and warn if yes.
+            if (Globals.prefs.getBoolean("warnAboutDuplicatesInInspection")) {
+                for (Iterator<BibtexEntry> i = entries.iterator(); i.hasNext();) {
+
+                    BibtexEntry entry = i.next();
+                    // Only check entries that are to be imported. Keep status
+                    // is indicated
+                    // through the search hit status of the entry:
+                    if (!entry.isSearchHit())
+                        continue;
+
+                    // Check if the entry is a suspected, unresolved, duplicate.
+                    // This status
+                    // is indicated by the entry's group hit status:
+                    if (entry.isGroupHit()) {
+                        CheckBoxMessage cbm = new CheckBoxMessage(
+                            Globals
+                                .lang("There are possible duplicates (marked with a 'D' icon) that haven't been resolved. Continue?"),
+                            Globals.lang("Disable this confirmation dialog"), false);
+                        int answer = JOptionPane.showConfirmDialog(ImportInspectionDialog.this,
+                            cbm, Globals.lang("Duplicates found"), JOptionPane.YES_NO_OPTION);
+                        if (cbm.isSelected())
+                            Globals.prefs.putBoolean("warnAboutDuplicatesInInspection", false);
+                        if (answer == JOptionPane.NO_OPTION)
+                            return;
+                        break;
+                    }
+                }
+            }
+
+            // The compund undo action used to contain all changes made by this
+            // dialog.
+            NamedCompound ce = new NamedCompound(undoName);
+
+            // See if we should remove any old entries for duplicate resolving:
+            if (entriesToDelete.size() > 0) {
+                for (Iterator<BibtexEntry> i = entriesToDelete.iterator(); i.hasNext();) {
+                    BibtexEntry entry = i.next();
+                    ce.addEdit(new UndoableRemoveEntry(panel.database(), entry, panel));
+                    panel.database().removeEntry(entry.getId());
+                }
+            }
+
+            // If "Generate keys" is checked, generate keys unless it's already
+            // been done:
+            if (autoGenerate.isSelected() && !generatedKeys) {
+                generateKeys(false);
+            }
+            // Remember the choice until next time:
+            Globals.prefs.putBoolean("generateKeysAfterInspection", autoGenerate.isSelected());
+
+            final List<BibtexEntry> selected = getSelectedEntries();
+
+            if (selected.size() > 0) {
+
+                if (newDatabase) {
+                    // Create a new BasePanel for the entries:
+                    BibtexDatabase base = new BibtexDatabase();
+                    panel = new BasePanel(frame, base, null, new MetaData(),
+                        Globals.prefs.get("defaultEncoding"));
+                }
+
+                boolean groupingCanceled = false;
+
+                // Set owner/timestamp if options are enabled:
+                Util.setAutomaticFields(selected, Globals.prefs.getBoolean("overwriteOwner"),
+                    Globals.prefs.getBoolean("overwriteTimeStamp"), Globals.prefs.getBoolean("markImportedEntries"));
+
+
+                // Check if we should unmark entries before adding the new ones:
+                if (Globals.prefs.getBoolean("unmarkAllEntriesBeforeImporting"))
+                    for (BibtexEntry entry : panel.database().getEntries()) {
+                        Util.unmarkEntry(entry, true, panel.database(), ce);
+                    }
+
+                for (Iterator<BibtexEntry> i = selected.iterator(); i.hasNext();) {
+                    BibtexEntry entry = i.next();
+                    // entry.clone();
+
+                    // Remove settings to group/search hit status:
+                    entry.setSearchHit(false);
+                    entry.setGroupHit(false);
+
+                    // If this entry should be added to any groups, do it now:
+                    Set<GroupTreeNode> groups = groupAdditions.get(entry);
+                    if (!groupingCanceled && (groups != null)) {
+                        if (entry.getField(BibtexFields.KEY_FIELD) == null) {
+                            // The entry has no key, so it can't be added to the
+                            // group.
+                            // The best course of ation is probably to ask the
+                            // user if a key should be generated
+                            // immediately.
+                            int answer = JOptionPane
+                                .showConfirmDialog(
+                                    ImportInspectionDialog.this,
+                                    Globals
+                                        .lang("Cannot add entries to group without generating keys. Generate keys now?"),
+                                    Globals.lang("Add to group"), JOptionPane.YES_NO_OPTION);
+                            if (answer == JOptionPane.YES_OPTION) {
+                                generateKeys(false);
+                            } else
+                                groupingCanceled = true;
+                        }
+
+                        // If the key was list, or has been list now, go ahead:
+                        if (entry.getField(BibtexFields.KEY_FIELD) != null) {
+                            for (Iterator<GroupTreeNode> i2 = groups.iterator(); i2.hasNext();) {
+                                GroupTreeNode node = i2.next();
+                                if (node.getGroup().supportsAdd()) {
+                                    // Add the entry:
+                                    AbstractUndoableEdit undo = node.getGroup().add(
+                                        new BibtexEntry[] { entry });
+                                    if (undo instanceof UndoableChangeAssignment)
+                                        ((UndoableChangeAssignment) undo).setEditedNode(node);
+                                    ce.addEdit(undo);
+
+                                } else {
+                                    // Shouldn't happen...
+                                }
+                            }
+                        }
+                    }
+
+                    try {
+                        entry.setId(Util.createNeutralId());
+                        panel.database().insertEntry(entry);
+                        // Let the autocompleters, if any, harvest words from
+                        // the entry:
+                        Util.updateCompletersForEntry(panel.getAutoCompleters(), entry);
+                        ce.addEdit(new UndoableInsertEntry(panel.database(), entry, panel));
+                    } catch (KeyCollisionException e) {
+                        e.printStackTrace();
+                    }
+                }
+
+                ce.end();
+                panel.undoManager.addEdit(ce);
+            }
+
+            dispose();
+            SwingUtilities.invokeLater(new Thread() {
+
+                public void run() {
+                    if (newDatabase) {
+                        frame.addTab(panel, null, true);
+                    }
+                    panel.markBaseChanged();
+
+                    if (selected.size() > 0) {
+                        frame.output(Globals.lang("Number of entries successfully imported") +
+                            ": " + selected.size());
+                    } else {
+                        frame.output(Globals.lang("No entries imported."));
+                    }
+                }
+            });
+        }
+    }
+
+    protected void signalStopFetching() {
+        for (CallBack c : callBacks) {
+            c.stopFetching();
+        }
+    }
+
+    protected void setWidths() {
+        TableColumnModel cm = glTable.getColumnModel();
+        cm.getColumn(0).setPreferredWidth(55);
+        cm.getColumn(0).setMinWidth(55);
+        cm.getColumn(0).setMaxWidth(55);
+        for (int i = 1; i < PAD; i++) {
+        	// Check if the Column is a RankingColumn
+        	// If this is the case, set a certain Column-width,
+        	// because the RankingIconColumn needs some more width
+        	if (frame.basePanel().tableFormat.isRankingColumn(i)) {
+        		// Lock the width of ranking icon column.
+                cm.getColumn(i).setPreferredWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
+                cm.getColumn(i).setMinWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
+                cm.getColumn(i).setMaxWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
+        	} else {
+        		// Lock the width of icon columns.
+                cm.getColumn(i).setPreferredWidth(GUIGlobals.WIDTH_ICON_COL);
+                cm.getColumn(i).setMinWidth(GUIGlobals.WIDTH_ICON_COL);
+                cm.getColumn(i).setMaxWidth(GUIGlobals.WIDTH_ICON_COL);	
+        	}
+        }
+
+        for (int i = 0; i < fields.length; i++) {
+            int width = BibtexFields.getFieldLength(fields[i]);
+            glTable.getColumnModel().getColumn(i + PAD).setPreferredWidth(width);
+        }
+    }
+
+    class StopListener implements ActionListener {
+
+        public void actionPerformed(ActionEvent event) {
+            signalStopFetching();
+            entryListComplete();
+        }
+    }
+
+    class CancelListener implements ActionListener {
+
+        public void actionPerformed(ActionEvent event) {
+            signalStopFetching();
+            dispose();
+            frame.output(Globals.lang("Import canceled by user"));
+        }
+    }
+
+    class GenerateListener implements ActionListener {
+
+        public void actionPerformed(ActionEvent event) {
+            generate.setEnabled(false);
+            generatedKeys = true; // To prevent the button from getting
+            // enabled again.
+            generateKeys(true); // Generate the keys.
+        }
+    }
+
+    class DeleteListener extends AbstractAction implements ActionListener {
+
+        public DeleteListener() {
+            super(Globals.lang("Delete"), GUIGlobals.getImage("delete"));
+        }
+
+        public void actionPerformed(ActionEvent event) {
+            removeSelectedEntries();
+        }
+    }
+
+    class MyTable extends JTable {
+
+        public MyTable(TableModel model) {
+            super(model);
+            // setDefaultRenderer(Boolean.class, );
+        }
+
+        public boolean isCellEditable(int row, int col) {
+            return col == 0;
+        }
+    }
+
+    class MyTableModel extends DefaultTableModel {
+
+        public Class<?> getColumnClass(int i) {
+            if (i == 0)
+                return Boolean.class;
+            else
+                return String.class;
+        }
+
+    }
+
+    class SelectionButton implements ActionListener {
+
+        protected Boolean enable;
+
+        public SelectionButton(boolean enable) {
+            this.enable = Boolean.valueOf(enable);
+        }
+
+        public void actionPerformed(ActionEvent event) {
+            for (int i = 0; i < glTable.getRowCount(); i++) {
+                glTable.setValueAt(enable, i, 0);
+            }
+            glTable.repaint();
+        }
+    }
+
+    class DeselectDuplicatesButtonListener implements ActionListener {
+
+        public void actionPerformed(ActionEvent event) {
+            for (int i = 0; i < glTable.getRowCount(); i++) {
+                if (glTable.getValueAt(i, DUPL_COL) != null) {
+                    glTable.setValueAt(Boolean.valueOf(false), i, 0);
+                }
+            }
+            glTable.repaint();
+        }
+    }
+
+    class EntrySelectionListener implements ListEventListener<BibtexEntry> {
+
+        public void listChanged(ListEvent<BibtexEntry> listEvent) {
+            if (listEvent.getSourceList().size() == 1) {
+                preview.setEntry(listEvent.getSourceList().get(0));
+                contentPane.setDividerLocation(0.5f);
+                SwingUtilities.invokeLater(new Runnable() {
+
+                    public void run() {
+                        preview.scrollRectToVisible(toRect);
+                    }
+                });
+            }
+        }
+    }
+
+    /**
+     * This class handles clicks on the table that should trigger specific
+     * events, like opening the popup menu.
+     */
+    class TableClickListener implements MouseListener {
+
+        public boolean isIconColumn(int col) {
+            return (col == FILE_COL) || (col == PDF_COL) || (col == PS_COL) || (col == URL_COL);
+        }
+
+        public void mouseClicked(MouseEvent e) {
+            final int col = glTable.columnAtPoint(e.getPoint()), row = glTable.rowAtPoint(e
+                .getPoint());
+            if (isIconColumn(col)) {
+                BibtexEntry entry = sortedList.get(row);
+
+                switch (col) {
+                case FILE_COL:
+                    Object o = entry.getField(GUIGlobals.FILE_FIELD);
+                    if (o != null) {
+                        FileListTableModel tableModel = new FileListTableModel();
+                        tableModel.setContent((String) o);
+                        if (tableModel.getRowCount() == 0)
+                            return;
+                        FileListEntry fl = tableModel.getEntry(0);
+                        (new ExternalFileMenuItem(frame, entry, "", fl.getLink(), null, panel
+                            .metaData(), fl.getType())).actionPerformed(null);
+                    }
+                    break;
+                case URL_COL:
+                    openExternalLink("url", e);
+                    break;
+                case PDF_COL:
+                    openExternalLink("pdf", e);
+                    break;
+                case PS_COL:
+                    openExternalLink("ps", e);
+                    break;
+                }
+            }
+        }
+
+        public void mouseEntered(MouseEvent e) {
+
+        }
+
+        public void mouseExited(MouseEvent e) {
+
+        }
+
+        /**
+         * Show right-click menu. If the click happened in an icon column that
+         * presents its own popup menu, show that. Otherwise, show the ordinary
+         * popup menu.
+         * 
+         * @param e
+         *            The mouse event that triggered the popup.
+         */
+        public void showPopup(MouseEvent e) {
+            final int col = glTable.columnAtPoint(e.getPoint());
+            switch (col) {
+            case FILE_COL:
+                showFileFieldMenu(e);
+                break;
+            default:
+                showOrdinaryRightClickMenu(e);
+                break;
+            }
+
+        }
+
+        public void showOrdinaryRightClickMenu(MouseEvent e) {
+            popup.show(glTable, e.getX(), e.getY());
+        }
+
+        /**
+         * Show the popup menu for the FILE field.
+         * 
+         * @param e
+         *            The mouse event that triggered the popup.
+         */
+        public void showFileFieldMenu(MouseEvent e) {
+            final int row = glTable.rowAtPoint(e.getPoint());
+            BibtexEntry entry = sortedList.get(row);
+            JPopupMenu menu = new JPopupMenu();
+            int count = 0;
+            Object o = entry.getField(GUIGlobals.FILE_FIELD);
+            FileListTableModel fileList = new FileListTableModel();
+            fileList.setContent((String) o);
+            // If there are one or more links, open the first one:
+            for (int i = 0; i < fileList.getRowCount(); i++) {
+                FileListEntry flEntry = fileList.getEntry(i);
+                String description = flEntry.getDescription();
+                if ((description == null) || (description.trim().length() == 0))
+                    description = flEntry.getLink();
+                menu.add(new ExternalFileMenuItem(panel.frame(), entry, description, flEntry
+                    .getLink(), flEntry.getType().getIcon(), panel.metaData(), flEntry.getType()));
+                count++;
+            }
+            if (count == 0) {
+                showOrdinaryRightClickMenu(e);
+            } else
+                menu.show(glTable, e.getX(), e.getY());
+        }
+
+        /**
+         * Open old-style external links after user clicks icon.
+         * 
+         * @param fieldName
+         *            The name of the BibTeX field this icon is used for.
+         * @param e
+         *            The MouseEvent that triggered this operation.
+         */
+        public void openExternalLink(String fieldName, MouseEvent e) {
+            final int row = glTable.rowAtPoint(e.getPoint());
+            BibtexEntry entry = sortedList.get(row);
+
+            Object link = entry.getField(fieldName);
+            try {
+                if (link != null)
+                    Util.openExternalViewer(panel.metaData(), (String) link, fieldName);
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
+
+        public void mouseReleased(MouseEvent e) {
+            // Check if the user has right-clicked. If so, open the right-click
+            // menu.
+            if (e.isPopupTrigger()) {
+                showPopup(e);
+                return;
+            }
+        }
+
+        public void mousePressed(MouseEvent e) {
+            // Check if the user has right-clicked. If so, open the right-click
+            // menu.
+            if (e.isPopupTrigger()) {
+                showPopup(e);
+                return;
+            }
+
+            // Check if any other action should be taken:
+            final int col = glTable.columnAtPoint(e.getPoint()), row = glTable.rowAtPoint(e
+                .getPoint());
+            // Is this the duplicate icon column, and is there an icon?
+            if ((col == DUPL_COL) && (glTable.getValueAt(row, col) != null)) {
+                BibtexEntry first = sortedList.get(row);
+                BibtexEntry other = DuplicateCheck.containsDuplicate(panel.database(), first);
+                if (other != null) {
+                    // This will be true if the duplicate is in the existing
+                    // database.
+                    DuplicateResolverDialog diag = new DuplicateResolverDialog(
+                        ImportInspectionDialog.this, other, first,
+                        DuplicateResolverDialog.INSPECTION);
+                    Util.placeDialog(diag, ImportInspectionDialog.this);
+                    diag.setVisible(true);
+                    ImportInspectionDialog.this.toFront();
+                    if (diag.getSelected() == DuplicateResolverDialog.KEEP_UPPER) {
+                        // Remove old entry. Or... add it to a list of entries
+                        // to be deleted. We only delete
+                        // it after Ok is clicked.
+                        entriesToDelete.add(other);
+                        // Clear duplicate icon, which is controlled by the
+                        // group hit
+                        // field of the entry:
+                        entries.getReadWriteLock().writeLock().lock();
+                        first.setGroupHit(false);
+                        entries.getReadWriteLock().writeLock().unlock();
+
+                    } else if (diag.getSelected() == DuplicateResolverDialog.KEEP_LOWER) {
+                        // Remove the entry from the import inspection dialog.
+                        entries.getReadWriteLock().writeLock().lock();
+                        entries.remove(first);
+                        entries.getReadWriteLock().writeLock().unlock();
+                    } else if (diag.getSelected() == DuplicateResolverDialog.KEEP_BOTH) {
+                        // Do nothing.
+                        entries.getReadWriteLock().writeLock().lock();
+                        first.setGroupHit(false);
+                        entries.getReadWriteLock().writeLock().unlock();
+                    }
+                }
+                // Check if the duplicate is of another entry in the import:
+                other = internalDuplicate(entries, first);
+                if (other != null) {
+                    int answer = DuplicateResolverDialog.resolveDuplicate(
+                        ImportInspectionDialog.this, first, other);
+                    if (answer == DuplicateResolverDialog.KEEP_UPPER) {
+                        entries.remove(other);
+                        first.setGroupHit(false);
+                    } else if (answer == DuplicateResolverDialog.KEEP_LOWER) {
+                        entries.remove(first);
+                    } else if (answer == DuplicateResolverDialog.KEEP_BOTH) {
+                        first.setGroupHit(false);
+                    }
+                }
+            }
+        }
+    }
+
+    class AttachUrl extends JMenuItem implements ActionListener {
+
+        public AttachUrl() {
+            super(Globals.lang("Attach URL"));
+            addActionListener(this);
+        }
+
+        public void actionPerformed(ActionEvent event) {
+            if (selectionModel.getSelected().size() != 1)
+                return;
+            BibtexEntry entry = selectionModel.getSelected().get(0);
+            String result = JOptionPane.showInputDialog(ImportInspectionDialog.this, Globals
+                .lang("Enter URL"), entry.getField("url"));
+            entries.getReadWriteLock().writeLock().lock();
+            if (result != null) {
+                if (result.equals("")) {
+                    entry.clearField("url");
+                } else {
+                    entry.setField("url", result);
+                }
+            }
+            entries.getReadWriteLock().writeLock().unlock();
+            glTable.repaint();
+        }
+    }
+
+    class DownloadFile extends JMenuItem implements ActionListener,
+        DownloadExternalFile.DownloadCallback {
+
+        BibtexEntry entry = null;
+
+        public DownloadFile() {
+            super(Globals.lang("Download file"));
+            addActionListener(this);
+        }
+
+        public void actionPerformed(ActionEvent actionEvent) {
+            if (selectionModel.getSelected().size() != 1)
+                return;
+            entry = selectionModel.getSelected().get(0);
+            String bibtexKey = entry.getCiteKey();
+            if (bibtexKey == null) {
+                int answer = JOptionPane.showConfirmDialog(frame, Globals
+                    .lang("This entry has no BibTeX key. Generate key now?"), Globals
+                    .lang("Download file"), JOptionPane.OK_CANCEL_OPTION,
+                    JOptionPane.QUESTION_MESSAGE);
+                if (answer == JOptionPane.OK_OPTION) {
+                    generateKeySelectedEntry();
+                    bibtexKey = entry.getCiteKey();
+                }
+            }
+            DownloadExternalFile def = new DownloadExternalFile(frame, metaData, bibtexKey);
+            try {
+                def.download(this);
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
+
+        public void downloadComplete(FileListEntry file) {
+            ImportInspectionDialog.this.toFront(); // Hack
+            FileListTableModel model = new FileListTableModel();
+            String oldVal = entry.getField(GUIGlobals.FILE_FIELD);
+            if (oldVal != null)
+                model.setContent(oldVal);
+            model.addEntry(model.getRowCount(), file);
+            entries.getReadWriteLock().writeLock().lock();
+            entry.setField(GUIGlobals.FILE_FIELD, model.getStringRepresentation());
+            entries.getReadWriteLock().writeLock().unlock();
+            glTable.repaint();
+        }
+    }
+
+    class AutoSetLinks extends JMenuItem implements ActionListener {
+
+        public AutoSetLinks() {
+            super(Globals.lang("Autoset external links"));
+            addActionListener(this);
+        }
+
+        public void actionPerformed(ActionEvent actionEvent) {
+            if (selectionModel.getSelected().size() != 1)
+                return;
+            final BibtexEntry entry = selectionModel.getSelected().get(0);
+            String bibtexKey = entry.getCiteKey();
+            if (bibtexKey == null) {
+                int answer = JOptionPane.showConfirmDialog(frame, Globals
+                    .lang("This entry has no BibTeX key. Generate key now?"), Globals
+                    .lang("Download file"), JOptionPane.OK_CANCEL_OPTION,
+                    JOptionPane.QUESTION_MESSAGE);
+                if (answer == JOptionPane.OK_OPTION) {
+                    generateKeySelectedEntry();
+                    bibtexKey = entry.getCiteKey();
+                } else
+                    return; // Can't go on without the bibtex key.
+            }
+            final FileListTableModel model = new FileListTableModel();
+            String oldVal = entry.getField(GUIGlobals.FILE_FIELD);
+            if (oldVal != null)
+                model.setContent(oldVal);
+            // We have a static utility method for searching for all relevant
+            // links:
+            JDialog diag = new JDialog(ImportInspectionDialog.this, true);
+            FileListEditor.autoSetLinks(entry, model, metaData, new ActionListener() {
+
+                public void actionPerformed(ActionEvent e) {
+                    if (e.getID() > 0) {
+                        entries.getReadWriteLock().writeLock().lock();
+                        entry.setField(GUIGlobals.FILE_FIELD, model.getStringRepresentation());
+                        entries.getReadWriteLock().writeLock().unlock();
+                        glTable.repaint();
+                    }
+                }
+            }, diag);
+
+        }
+    }
+
+    class LinkLocalFile extends JMenuItem implements ActionListener,
+        DownloadExternalFile.DownloadCallback {
+
+        BibtexEntry entry = null;
+
+        public LinkLocalFile() {
+            super(Globals.lang("Link local file"));
+            addActionListener(this);
+        }
+
+        public void actionPerformed(ActionEvent actionEvent) {
+            if (selectionModel.getSelected().size() != 1)
+                return;
+            entry = selectionModel.getSelected().get(0);
+            FileListEntry flEntry = new FileListEntry("", "", null);
+            FileListEntryEditor editor = new FileListEntryEditor(frame, flEntry, false, true,
+                metaData);
+            editor.setVisible(true, true);
+            if (editor.okPressed()) {
+                FileListTableModel model = new FileListTableModel();
+                String oldVal = entry.getField(GUIGlobals.FILE_FIELD);
+                if (oldVal != null)
+                    model.setContent(oldVal);
+                model.addEntry(model.getRowCount(), flEntry);
+                entries.getReadWriteLock().writeLock().lock();
+                entry.setField(GUIGlobals.FILE_FIELD, model.getStringRepresentation());
+                entries.getReadWriteLock().writeLock().unlock();
+                glTable.repaint();
+            }
+        }
+
+        public void downloadComplete(FileListEntry file) {
+            ImportInspectionDialog.this.toFront(); // Hack
+            FileListTableModel model = new FileListTableModel();
+            String oldVal = entry.getField(GUIGlobals.FILE_FIELD);
+            if (oldVal != null)
+                model.setContent(oldVal);
+            model.addEntry(model.getRowCount(), file);
+            entries.getReadWriteLock().writeLock().lock();
+            entry.setField(GUIGlobals.FILE_FIELD, model.getStringRepresentation());
+            entries.getReadWriteLock().writeLock().unlock();
+            glTable.repaint();
+        }
+    }
+
+    class AttachFile extends JMenuItem implements ActionListener {
+
+        String fileType;
+
+        public AttachFile(String fileType) {
+            super(Globals.lang("Attach %0 file", new String[] { fileType.toUpperCase() }));
+            this.fileType = fileType;
+            addActionListener(this);
+        }
+
+        public void actionPerformed(ActionEvent event) {
+
+            if (selectionModel.getSelected().size() != 1)
+                return;
+            BibtexEntry entry = selectionModel.getSelected().get(0);
+            // Call up a dialog box that provides Browse, Download and auto
+            // buttons:
+            AttachFileDialog diag = new AttachFileDialog(ImportInspectionDialog.this, metaData,
+                entry, fileType);
+            Util.placeDialog(diag, ImportInspectionDialog.this);
+            diag.setVisible(true);
+            // After the dialog has closed, if it wasn't cancelled, list the
+            // field:
+            if (!diag.cancelled()) {
+                entries.getReadWriteLock().writeLock().lock();
+                entry.setField(fileType, diag.getValue());
+                entries.getReadWriteLock().writeLock().unlock();
+                glTable.repaint();
+            }
+
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    protected void setupComparatorChooser() {
+        // First column:
+        java.util.List<Comparator> comparators = comparatorChooser
+            .getComparatorsForColumn(0);
+        comparators.clear();
+
+        comparators = comparatorChooser.getComparatorsForColumn(1);
+        comparators.clear();
+
+        // Icon columns:
+        for (int i = 2; i < PAD; i++) {
+            comparators = comparatorChooser.getComparatorsForColumn(i);
+            comparators.clear();
+            if (i == FILE_COL)
+                comparators.add(new IconComparator(new String[] { GUIGlobals.FILE_FIELD }));
+            else if (i == PDF_COL)
+                comparators.add(new IconComparator(new String[] { "pdf" }));
+            else if (i == PS_COL)
+                comparators.add(new IconComparator(new String[] { "ps" }));
+            else if (i == URL_COL)
+                comparators.add(new IconComparator(new String[] { "url" }));
+
+        }
+        // Remaining columns:
+        for (int i = PAD; i < PAD + fields.length; i++) {
+            comparators = comparatorChooser.getComparatorsForColumn(i);
+            comparators.clear();
+            comparators.add(new FieldComparator(fields[i - PAD]));
+        }
+
+        // Set initial sort columns:
+
+        /*
+         * // Default sort order: String[] sortFields = new String[]
+         * {Globals.prefs.get("priSort"), Globals.prefs.get("secSort"),
+         * Globals.prefs.get("terSort")}; boolean[] sortDirections = new
+         * boolean[] {Globals.prefs.getBoolean("priDescending"),
+         * Globals.prefs.getBoolean("secDescending"),
+         * Globals.prefs.getBoolean("terDescending")}; // descending
+         */
+        sortedList.getReadWriteLock().writeLock().lock();
+        comparatorChooser.appendComparator(PAD, 0, false);
+        sortedList.getReadWriteLock().writeLock().unlock();
+
+    }
+
+    class EntryTable extends JTable {
+
+        GeneralRenderer renderer = new GeneralRenderer(Color.white);
+
+        public EntryTable(TableModel model) {
+            super(model);
+            getTableHeader().setReorderingAllowed(false);
+        }
+
+        public TableCellRenderer getCellRenderer(int row, int column) {
+            return column == 0 ? getDefaultRenderer(Boolean.class) : renderer;
+        }
+
+        /*
+         * public TableCellEditor getCellEditor() { return
+         * getDefaultEditor(Boolean.class); }
+         */
+
+        public Class<?> getColumnClass(int col) {
+            if (col == 0)
+                return Boolean.class;
+            else if (col < PAD)
+                return JLabel.class;
+            else
+                return String.class;
+        }
+
+        public boolean isCellEditable(int row, int column) {
+            return column == 0;
+        }
+
+        public void setValueAt(Object value, int row, int column) {
+            // Only column 0, which is controlled by BibtexEntry.searchHit, is
+            // editable:
+            entries.getReadWriteLock().writeLock().lock();
+            BibtexEntry entry = sortedList.get(row);
+            entry.setSearchHit(((Boolean) value).booleanValue());
+            entries.getReadWriteLock().writeLock().unlock();
+        }
+    }
+
+    class EntryTableFormat implements TableFormat<BibtexEntry> {
+
+        public int getColumnCount() {
+            return PAD + fields.length; 
+        }
+
+        public String getColumnName(int i) {
+            if (i == 0)
+                return Globals.lang("Keep");
+            if (i >= PAD) {
+                return Util.nCase(fields[i - PAD]);
+            }
+            return "";
+        }
+
+        public Object getColumnValue(BibtexEntry entry, int i) {
+            if (i == 0)
+                return entry.isSearchHit() ? Boolean.TRUE : Boolean.FALSE;
+            else if (i < PAD) {
+                Object o;
+                switch (i) {
+                case DUPL_COL:
+                    return entry.isGroupHit() ? duplLabel : null;
+                case FILE_COL:
+                    o = entry.getField(GUIGlobals.FILE_FIELD);
+                    if (o != null) {
+                        FileListTableModel model = new FileListTableModel();
+                        model.setContent((String) o);
+                        fileLabel.setToolTipText(model.getToolTipHTMLRepresentation());
+                        if (model.getRowCount() > 0)
+                            fileLabel.setIcon(model.getEntry(0).getType().getIcon());
+                        return fileLabel;
+                    } else
+                        return null;
+                case PDF_COL:
+                    o = entry.getField("pdf");
+                    if (o != null) {
+                        pdfLabel.setToolTipText((String) o);
+                        return pdfLabel;
+                    } else
+                        return null;
+
+                case PS_COL:
+                    o = entry.getField("ps");
+                    if (o != null) {
+                        psLabel.setToolTipText((String) o);
+                        return psLabel;
+                    } else
+                        return null;
+                case URL_COL:
+                    o = entry.getField("url");
+                    if (o != null) {
+                        urlLabel.setToolTipText((String) o);
+                        return urlLabel;
+                    } else
+                        return null;
+                default:
+                    return null;
+                }
+            } else {
+                String field = fields[i - PAD];
+                if (field.equals("author") || field.equals("editor")) {
+                    String contents = entry.getField(field);
+                    return (contents != null) ? AuthorList.fixAuthor_Natbib(contents) : "";
+                } else
+                    return entry.getField(field);
+            }
+        }
+
+    }
+
+    public void toFront() {
+        super.toFront();
+    }
+
+    public void setStatus(String s) {
+        frame.setStatus(s);
+    }
+
+    public void showMessage(Object message, String title, int msgType) {
+        JOptionPane.showMessageDialog(this, message, title, msgType);
+    }
+
+    public void showMessage(String message) {
+        JOptionPane.showMessageDialog(this, message);
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/IsMarkedComparator.java b/src/java/net/sf/jabref/gui/IsMarkedComparator.java
index 8859cbf..8b8e433 100644
--- a/src/java/net/sf/jabref/gui/IsMarkedComparator.java
+++ b/src/java/net/sf/jabref/gui/IsMarkedComparator.java
@@ -1,31 +1,31 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Util;
-
-import java.util.Comparator;
-
-public class IsMarkedComparator implements Comparator<BibtexEntry> {
-
-	public int compare(BibtexEntry e1, BibtexEntry e2) {
-
-        return - Util.isMarked(e1) + Util.isMarked(e2);
-		
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Util;
+
+import java.util.Comparator;
+
+public class IsMarkedComparator implements Comparator<BibtexEntry> {
+
+	public int compare(BibtexEntry e1, BibtexEntry e2) {
+
+        return - Util.isMarked(e1) + Util.isMarked(e2);
+		
+	}
+
+}
diff --git a/src/java/net/sf/jabref/gui/MainTable.java b/src/java/net/sf/jabref/gui/MainTable.java
index e79ac7b..3487be9 100644
--- a/src/java/net/sf/jabref/gui/MainTable.java
+++ b/src/java/net/sf/jabref/gui/MainTable.java
@@ -1,707 +1,707 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.Color;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Comparator;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import javax.swing.*;
-import javax.swing.plaf.TableUI;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableColumnModel;
-
-import net.sf.jabref.*;
-import net.sf.jabref.groups.EntryTableTransferHandler;
-import net.sf.jabref.search.HitOrMissComparator;
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-import ca.odell.glazedlists.EventList;
-import ca.odell.glazedlists.SortedList;
-import ca.odell.glazedlists.event.ListEventListener;
-import ca.odell.glazedlists.matchers.Matcher;
-import ca.odell.glazedlists.swing.EventSelectionModel;
-import ca.odell.glazedlists.swing.EventTableModel;
-import ca.odell.glazedlists.swing.TableComparatorChooser;
-
-/**
- * The central table which displays the bibtex entries.
- * 
- * User: alver
- * Date: Oct 12, 2005
- * Time: 10:29:39 PM
- * 
- */
-public class MainTable extends JTable {
-	
-    private MainTableFormat tableFormat;
-    private BasePanel panel;
-    private SortedList<BibtexEntry> sortedForMarking, sortedForTable, sortedForSearch, sortedForGrouping;
-    private boolean tableColorCodes, showingFloatSearch=false, showingFloatGrouping=false;
-    private EventSelectionModel<BibtexEntry> selectionModel;
-    private TableComparatorChooser<BibtexEntry> comparatorChooser;
-    private JScrollPane pane;
-    private Comparator<BibtexEntry> searchComparator, groupComparator,
-            markingComparator = new IsMarkedComparator();
-    private Matcher<BibtexEntry> searchMatcher, groupMatcher;
-    
-    // needed to activate/deactivate the listener
-    private final PersistenceTableColumnListener tableColumnListener;
-
-    // Constants used to define how a cell should be rendered.
-    public static final int REQUIRED = 1, OPTIONAL = 2,
-      REQ_STRING = 1,
-      REQ_NUMBER = 2,
-      OPT_STRING = 3,
-      OTHER = 3,
-      BOOLEAN = 4,
-      ICON_COL = 8; // Constant to indicate that an icon cell renderer should be used.
-
-    static {
-        updateRenderers();
-    }
-
-
-    public MainTable(MainTableFormat tableFormat, EventList<BibtexEntry> list, JabRefFrame frame,
-                     BasePanel panel) {
-        super();
-
-        addFocusListener(Globals.focusListener);
-        setAutoResizeMode(Globals.prefs.getInt("autoResizeMode"));
-        this.tableFormat = tableFormat;
-        this.panel = panel;
-        // This SortedList has a Comparator controlled by the TableComparatorChooser
-        // we are going to install, which responds to user sorting selctions:
-        sortedForTable = new SortedList<BibtexEntry>(list, null);
-        // This SortedList applies afterwards, and floats marked entries:
-        sortedForMarking = new SortedList<BibtexEntry>(sortedForTable, null);
-        // This SortedList applies afterwards, and can float search hits:
-        sortedForSearch = new SortedList<BibtexEntry>(sortedForMarking, null);
-        // This SortedList applies afterwards, and can float grouping hits:
-        sortedForGrouping = new SortedList<BibtexEntry>(sortedForSearch, null);
-
-
-        searchMatcher = null;
-        groupMatcher = null;
-        searchComparator = null;//new HitOrMissComparator(searchMatcher);
-        groupComparator = null;//new HitOrMissComparator(groupMatcher);
-
-        EventTableModel<BibtexEntry> tableModel = new EventTableModel<BibtexEntry>(sortedForGrouping, tableFormat);
-        setModel(tableModel);
-
-        tableColorCodes = Globals.prefs.getBoolean("tableColorCodesOn");
-        selectionModel = new EventSelectionModel<BibtexEntry>(sortedForGrouping);
-        setSelectionModel(selectionModel);
-        pane = new JScrollPane(this);
-        pane.getViewport().setBackground(Globals.prefs.getColor("tableBackground"));
-        setGridColor(Globals.prefs.getColor("gridColor"));
-
-        this.setTableHeader(new PreventDraggingJTableHeader(this.getColumnModel()));
-
-        comparatorChooser = new MyTableComparatorChooser(this, sortedForTable,
-                TableComparatorChooser.MULTIPLE_COLUMN_KEYBOARD);
-
-        this.tableColumnListener =  new PersistenceTableColumnListener(this);
-        /*if (Globals.prefs.getBoolean(PersistenceTableColumnListener.ACTIVATE_PREF_KEY)) {
-            getColumnModel().addColumnModelListener(this.tableColumnListener );
-        }*/
-
-        // TODO: Figure out, whether this call is needed.
-        getSelected();
-
-        // enable DnD
-        setDragEnabled(true);
-        TransferHandler xfer = new EntryTableTransferHandler(this, frame, panel);
-        setTransferHandler(xfer);
-        pane.setTransferHandler(xfer);
-
-        setupComparatorChooser();
-        refreshSorting();
-        setWidths();
-        
-
-    }
-
-    public void refreshSorting() {
-        sortedForMarking.getReadWriteLock().writeLock().lock();
-        if (Globals.prefs.getBoolean("floatMarkedEntries"))
-            sortedForMarking.setComparator(markingComparator);
-        else
-            sortedForMarking.setComparator(null);
-        sortedForMarking.getReadWriteLock().writeLock().unlock();
-        sortedForSearch.getReadWriteLock().writeLock().lock();
-        sortedForSearch.setComparator(searchComparator);
-        sortedForSearch.getReadWriteLock().writeLock().unlock();
-        sortedForGrouping.getReadWriteLock().writeLock().lock();
-        sortedForGrouping.setComparator(groupComparator);
-        sortedForGrouping.getReadWriteLock().writeLock().unlock();
-    }
-
-    /**
-     * Adds a sorting rule that floats hits to the top, and causes non-hits to be grayed out:
-     * @param m The Matcher that determines if an entry is a hit or not.
-     */
-    public void showFloatSearch(Matcher<BibtexEntry> m) {
-        showingFloatSearch = true;
-        searchMatcher = m;
-        searchComparator = new HitOrMissComparator(m);
-        refreshSorting();
-        scrollTo(0);
-    }
-
-    /**
-     * Removes sorting by search results, and graying out of non-hits.
-     */
-    public void stopShowingFloatSearch() {
-        showingFloatSearch = false;
-        searchMatcher = null;
-        searchComparator = null;
-        refreshSorting();
-    }
-
-    /**
-     * Adds a sorting rule that floats group hits to the top, and causes non-hits to be grayed out:
-     * @param m The Matcher that determines if an entry is a in the current group selection or not.
-     */
-    public void showFloatGrouping(Matcher<BibtexEntry> m) {
-        showingFloatGrouping = true;
-        groupMatcher = m;
-        groupComparator = new HitOrMissComparator(m);
-        refreshSorting();
-    }
-
-
-    public boolean isShowingFloatSearch() {
-        return showingFloatSearch;
-    }
-
-    /**
-     * Removes sorting by group, and graying out of non-hits.
-     */
-    public void stopShowingFloatGrouping() {
-        showingFloatGrouping = false;
-        groupMatcher = null;
-        groupComparator = null;
-        refreshSorting();
-    }
-
-    public EventList<BibtexEntry> getTableRows() {
-        return sortedForGrouping;
-    }
-    public void addSelectionListener(ListEventListener<BibtexEntry> listener) {
-        getSelected().addListEventListener(listener);
-    }
-
-    public JScrollPane getPane() {
-        return pane;
-    }
-
-    
-
-    public TableCellRenderer getCellRenderer(int row, int column) {
-        
-        int score = -3;
-        TableCellRenderer renderer = defRenderer;
-
-        int status = getCellStatus(row, column);
-
-        if (!showingFloatSearch || matches(row, searchMatcher))
-            score++;
-        if (!showingFloatGrouping || matches(row, groupMatcher))
-            score += 2;
-
-        // Now, a grayed out renderer is for entries with -1, and
-        // a very grayed out one for entries with -2
-        if (score < -1) {
-            if (column == 0) {
-                veryGrayedOutNumberRenderer.setNumber(row);
-                renderer = veryGrayedOutNumberRenderer;
-            } else renderer = veryGrayedOutRenderer;
-        }
-        else if (score == -1) {
-            if (column == 0) {
-                grayedOutNumberRenderer.setNumber(row);
-                renderer = grayedOutNumberRenderer;
-            } else renderer = grayedOutRenderer;
-        }
-
-        else if (column == 0) {
-            // Return a renderer with red background if the entry is incomplete.
-            if (!isComplete(row)) {
-                incRenderer.setNumber(row);
-                renderer = incRenderer;
-            } else {
-                compRenderer.setNumber(row);
-                int marking = isMarked(row);
-                if (marking > 0) {
-                    marking = Math.min(marking, Util.MARK_COLOR_LEVELS);
-                    renderer = markedNumberRenderers[marking-1];
-                    markedNumberRenderers[marking-1].setNumber(row);
-                } else
-                    renderer = compRenderer;
-            }
-        }
-        else if (tableColorCodes) {
-            if (status == REQUIRED)
-                renderer = reqRenderer;
-            else if (status == OPTIONAL)
-                renderer = optRenderer;
-            else if (status == BOOLEAN)
-                renderer = getDefaultRenderer(Boolean.class);
-        }
-
-        // For MARKED feature:
-        int marking = isMarked(row);
-        if ((column != 0) && (marking > 0)) {
-            marking = Math.min(marking, Util.MARK_COLOR_LEVELS);
-            renderer = markedRenderers[marking-1];
-        }
-
-        return renderer;
-
-    }
-
-    public void setWidths() {
-        // Setting column widths:
-        int ncWidth = Globals.prefs.getInt("numberColWidth");
-        String[] widths = Globals.prefs.getStringArray("columnWidths");
-        TableColumnModel cm = getColumnModel();
-        cm.getColumn(0).setPreferredWidth(ncWidth);
-        for (int i = 1; i < tableFormat.padleft; i++) {
-        	
-        	// Check if the Column is an extended RankingColumn (and not a compact-ranking column) 
-        	// If this is the case, set a certain Column-width,
-        	// because the RankingIconColumn needs some more width
-        	if (tableFormat.isRankingColumn(i) && !Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_RANKING_COMPACT)) {
-        		// Lock the width of ranking icon column.
-                cm.getColumn(i).setPreferredWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
-                cm.getColumn(i).setMinWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
-                cm.getColumn(i).setMaxWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
-        	} else {
-        		// Lock the width of icon columns.
-                cm.getColumn(i).setPreferredWidth(GUIGlobals.WIDTH_ICON_COL);
-                cm.getColumn(i).setMinWidth(GUIGlobals.WIDTH_ICON_COL);
-                cm.getColumn(i).setMaxWidth(GUIGlobals.WIDTH_ICON_COL);	
-        	}
-        	
-        }
-        for (int i = tableFormat.padleft; i < getModel().getColumnCount(); i++) {
-            try {
-                cm.getColumn(i).setPreferredWidth(Integer.parseInt(widths[i - tableFormat.padleft]));
-            } catch (Throwable ex) {
-                Globals.logger("Exception while setting column widths. Choosing default.");
-                cm.getColumn(i).setPreferredWidth(GUIGlobals.DEFAULT_FIELD_LENGTH);
-            }
-
-        }
-    }
-
-    public BibtexEntry getEntryAt(int row) {
-        return sortedForGrouping.get(row);
-    }
-
-    public BibtexEntry[] getSelectedEntries() {
-        final BibtexEntry[] BE_ARRAY = new BibtexEntry[0];
-        return getSelected().toArray(BE_ARRAY);
-    }
-
-    public List<Boolean> getCurrentSortOrder() {
-        List<Boolean> order = new ArrayList<Boolean>();
-        List<Integer> sortCols = comparatorChooser.getSortingColumns();
-        for (Iterator<Integer> iterator = sortCols.iterator(); iterator.hasNext();) {
-            int i = iterator.next();
-            order.add(comparatorChooser.isColumnReverse(i));
-        }
-        return order;
-    }
-
-    public List<String> getCurrentSortFields() {
-        List<Integer> sortCols = comparatorChooser.getSortingColumns();
-        List<String> fields = new ArrayList<String>();
-        for (Iterator<Integer> iterator = sortCols.iterator(); iterator.hasNext();) {
-            int i =  iterator.next();
-            String name = tableFormat.getColumnType(i);
-            if (name != null)
-                fields.add(name.toLowerCase());
-        }
-        return fields;
-    }
-
-
-    /**
-     * This method sets up what Comparators are used for the various table columns.
-     * The ComparatorChooser enables and disables such Comparators as the user clicks
-     * columns, but this is where the Comparators are defined. Also, the ComparatorChooser
-     * is initialized with the sort order defined in Preferences.
-     */
-    @SuppressWarnings("unchecked")
-	private void setupComparatorChooser() {
-        // First column:
-        List<Comparator> comparators = comparatorChooser.getComparatorsForColumn(0);
-        comparators.clear();
-        comparators.add(new FirstColumnComparator(panel.database()));
-
-        // Icon columns:
-        for (int i = 1; i < tableFormat.padleft; i++) {
-            comparators = comparatorChooser.getComparatorsForColumn(i);
-            comparators.clear();
-            String[] iconField = tableFormat.getIconTypeForColumn(i);
-            
-            if (iconField[0].equals(SpecialFieldsUtils.FIELDNAME_RANKING)) {
-            	comparators.add(new RankingFieldComparator());
-            } else {
-            	comparators.add(new IconComparator(iconField));
-            }
-        }
-        // Remaining columns:
-        for (int i = tableFormat.padleft; i < tableFormat.getColumnCount(); i++) {
-            comparators = comparatorChooser.getComparatorsForColumn(i);
-            comparators.clear();
-            comparators.add(new FieldComparator(tableFormat.getColumnName(i).toLowerCase()));
-        }
-
-
-        // Set initial sort columns:
-
-        // Default sort order:
-        String[] sortFields = new String[] {Globals.prefs.get("priSort"), Globals.prefs.get("secSort"),
-            Globals.prefs.get("terSort")};
-        boolean[] sortDirections = new boolean[] {Globals.prefs.getBoolean("priDescending"),
-            Globals.prefs.getBoolean("secDescending"), Globals.prefs.getBoolean("terDescending")}; // descending
-
-        sortedForTable.getReadWriteLock().writeLock().lock();
-        for (int i=0; i<sortFields.length; i++) {
-            int index = -1;
-            if (!sortFields[i].startsWith(MainTableFormat.ICON_COLUMN_PREFIX))
-                index = tableFormat.getColumnIndex(sortFields[i]);
-            else {
-                for (int j=0; j<tableFormat.getColumnCount(); j++) {
-                    if (sortFields[i].equals(tableFormat.getColumnType(j))) {
-                        index = j;
-                        break;
-                    }
-                }
-            }
-            if (index >= 0) {
-                comparatorChooser.appendComparator(index, 0, sortDirections[i]);
-            }
-        }
-        sortedForTable.getReadWriteLock().writeLock().unlock();
-
-        // Add action listener so we can remember the sort order:
-        comparatorChooser.addSortActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                // Get the information about the current sort order:
-                List<String> fields = getCurrentSortFields(); 
-                List<Boolean> order = getCurrentSortOrder();
-                // Update preferences:
-                int count = Math.min(fields.size(), order.size());
-                if (count >= 1) {
-                    Globals.prefs.put("priSort", fields.get(0));
-                    Globals.prefs.putBoolean("priDescending", order.get(0));
-                }
-                if (count >= 2) {
-                    Globals.prefs.put("secSort", fields.get(1));
-                    Globals.prefs.putBoolean("secDescending", order.get(1));
-                }
-                else {
-                    Globals.prefs.put("secSort", "");
-                    Globals.prefs.putBoolean("secDescending", false);
-                }
-                if (count >= 3) {
-                    Globals.prefs.put("terSort", fields.get(2));
-                    Globals.prefs.putBoolean("terDescending", order.get(2));
-                }
-                else {
-                    Globals.prefs.put("terSort", "");
-                    Globals.prefs.putBoolean("terDescending", false);
-                }
-            }
-
-        });
-
-
-    }
-
-    public int getCellStatus(int row, int col) {
-        try {
-            BibtexEntry be = sortedForGrouping.get(row);
-            BibtexEntryType type = be.getType();
-            String columnName = getColumnName(col).toLowerCase();
-            if (columnName.equals(BibtexFields.KEY_FIELD) || type.isRequired(columnName)) {
-                return REQUIRED;
-            }
-            if (type.isOptional(columnName)) {
-                return OPTIONAL;
-            }
-            return OTHER;
-        } catch (NullPointerException ex) {
-            //System.out.println("Exception: getCellStatus");
-            return OTHER;
-        }
-    }
-
-    public EventList<BibtexEntry> getSelected() {
-        return selectionModel.getSelected();
-    }
-
-    public int findEntry(BibtexEntry entry) {
-        //System.out.println(sortedForGrouping.indexOf(entry));
-        return sortedForGrouping.indexOf(entry);
-    }
-
-    public String[] getIconTypeForColumn(int column) {
-        return tableFormat.getIconTypeForColumn(column);
-    }
-
-    private boolean matches(int row, Matcher<BibtexEntry> m) {
-        return m.matches(sortedForGrouping.get(row));
-    }
-
-    private boolean isComplete(int row) {
-        try {
-            BibtexEntry be = sortedForGrouping.get(row);
-            return be.hasAllRequiredFields(panel.database());
-        } catch (NullPointerException ex) {
-            //System.out.println("Exception: isComplete");
-            return true;
-        }
-    }
-
-    private int isMarked(int row) {
-        try {
-            BibtexEntry be = sortedForGrouping.get(row);
-            return Util.isMarked(be);
-        } catch (NullPointerException ex) {
-            //System.out.println("Exception: isMarked");
-            return 0;
-        }
-    }
-
-
-    public void scrollTo(int y) {
-        JScrollBar scb = pane.getVerticalScrollBar();
-        scb.setValue(y * scb.getUnitIncrement(1));
-    }
-
-    /**
-     * updateFont
-     */
-    public void updateFont() {
-        setFont(GUIGlobals.CURRENTFONT);
-        setRowHeight(GUIGlobals.TABLE_ROW_PADDING + GUIGlobals.CURRENTFONT.getSize());
-    }
-
-    public void ensureVisible(int row) {
-        JScrollBar vert = pane.getVerticalScrollBar();
-        int y = row * getRowHeight();
-		if ((y < vert.getValue()) || (y > vert.getValue() + vert.getVisibleAmount()) && !showingFloatSearch) {
-			scrollToCenter(row, 1);
-		}
-            
-    }
-
-    public void scrollToCenter(int rowIndex, int vColIndex) {
-        if (!(this.getParent() instanceof JViewport)) {
-            return;
-        }
-
-        JViewport viewport = (JViewport) this.getParent();
-
-        // This rectangle is relative to the table where the
-        // northwest corner of cell (0,0) is always (0,0).
-        Rectangle rect = this.getCellRect(rowIndex, vColIndex, true);
-
-        // The location of the view relative to the table
-        Rectangle viewRect = viewport.getViewRect();
-
-        // Translate the cell location so that it is relative
-        // to the view, assuming the northwest corner of the
-        // view is (0,0).
-        rect.setLocation(rect.x - viewRect.x, rect.y - viewRect.y);
-
-        // Calculate location of rect if it were at the center of view
-        int centerX = (viewRect.width - rect.width) / 2;
-        int centerY = (viewRect.height - rect.height) / 2;
-
-        // Fake the location of the cell so that scrollRectToVisible
-        // will move the cell to the center
-        if (rect.x < centerX) {
-            centerX = -centerX;
-        }
-        if (rect.y < centerY) {
-            centerY = -centerY;
-        }
-        rect.translate(centerX, centerY);
-
-        // Scroll the area into view.
-        viewport.scrollRectToVisible(rect);
-
-        revalidate();
-        repaint();
-    }
-
-
-    private static GeneralRenderer defRenderer, reqRenderer, optRenderer, grayedOutRenderer,
-        veryGrayedOutRenderer;
-
-    private static GeneralRenderer[] markedRenderers;
-
-    private static IncompleteRenderer incRenderer;
-    private static CompleteRenderer
-            compRenderer,
-            grayedOutNumberRenderer,
-            veryGrayedOutNumberRenderer;
-
-    private static CompleteRenderer[] markedNumberRenderers;
-
-    public static void updateRenderers() {
-
-        defRenderer = new GeneralRenderer(Globals.prefs.getColor("tableBackground"),
-                Globals.prefs.getColor("tableText"));
-        Color sel = defRenderer.getTableCellRendererComponent
-                (new JTable(), "", true, false, 0, 0).getBackground();
-        reqRenderer = new GeneralRenderer(Globals.prefs.getColor("tableReqFieldBackground"), Globals.prefs.getColor("tableText"));
-        optRenderer = new GeneralRenderer(Globals.prefs.getColor("tableOptFieldBackground"), Globals.prefs.getColor("tableText"));
-        incRenderer = new IncompleteRenderer();
-        compRenderer = new CompleteRenderer(Globals.prefs.getColor("tableBackground"));
-        grayedOutNumberRenderer = new CompleteRenderer(Globals.prefs.getColor("grayedOutBackground"));
-        veryGrayedOutNumberRenderer = new CompleteRenderer(Globals.prefs.getColor("veryGrayedOutBackground"));
-        grayedOutRenderer = new GeneralRenderer(Globals.prefs.getColor("grayedOutBackground"),
-            Globals.prefs.getColor("grayedOutText"), mixColors(Globals.prefs.getColor("grayedOutBackground"),
-                sel));
-        veryGrayedOutRenderer = new GeneralRenderer(Globals.prefs.getColor("veryGrayedOutBackground"),
-                Globals.prefs.getColor("veryGrayedOutText"), mixColors(Globals.prefs.getColor("veryGrayedOutBackground"),
-                sel));
-
-        markedRenderers = new GeneralRenderer[Util.MARK_COLOR_LEVELS];
-        markedNumberRenderers = new CompleteRenderer[Util.MARK_COLOR_LEVELS];
-        for (int i=0; i<Util.MARK_COLOR_LEVELS; i++) {
-            Color c = Globals.prefs.getColor("markedEntryBackground"+i);
-            markedRenderers[i] = new GeneralRenderer(c,
-                Globals.prefs.getColor("tableText"), mixColors(Globals.prefs.getColor("markedEntryBackground"+i), sel));
-            markedNumberRenderers[i] = new CompleteRenderer(c);
-        }
-        
-    }
-
-    private static Color mixColors(Color one, Color two) {
-        return new Color((one.getRed()+two.getRed())/2, (one.getGreen()+two.getGreen())/2,
-                (one.getBlue()+two.getBlue())/2);
-    }
-
-    static class IncompleteRenderer extends GeneralRenderer {
-        public IncompleteRenderer() {
-            super(Globals.prefs.getColor("incompleteEntryBackground"));
-            super.setToolTipText(Globals.lang("This entry is incomplete"));
-        }
-
-        protected void setNumber(int number) {
-            super.setValue(String.valueOf(number + 1));
-        }
-
-        protected void setValue(Object value) {
-
-        }
-    }
-
-    static class CompleteRenderer extends GeneralRenderer {
-        public CompleteRenderer(Color color) {
-            super(color);
-        }
-
-        protected void setNumber(int number) {
-            super.setValue(String.valueOf(number + 1));
-        }
-
-        protected void setValue(Object value) {
-
-        }
-    }
-
-    class MyTableComparatorChooser extends TableComparatorChooser<BibtexEntry> {
-        public MyTableComparatorChooser(JTable table, SortedList<BibtexEntry> list,
-                                        Object sortingStrategy) {
-            super(table, list, sortingStrategy);
-            // We need to reset the stack of sorted list each time sorting order
-            // changes, or the sorting breaks down:
-            addSortActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    //System.out.println("...");
-                    refreshSorting();
-                }
-            });
-        }
-    }
-
-    /**
-     * Morten Alver: This override is a workaround NullPointerException when
-     * dragging stuff into the table. I found this in a forum, but have no idea
-     * why it works.
-     * @param newUI
-     */
-    public void setUI(TableUI newUI) {
-        super.setUI(newUI);
-        TransferHandler handler = getTransferHandler();
-        setTransferHandler(null);
-        setTransferHandler(handler);
-
-    }
-
-    /**
-     * Get the first comparator set up for the given column.
-     * @param index The column number.
-     * @return The Comparator, or null if none is set.
-     */
-    @SuppressWarnings("unchecked")
-	public Comparator<BibtexEntry> getComparatorForColumn(int index) {
-        List<Comparator> l = comparatorChooser.getComparatorsForColumn(index);
-        return l.size() == 0 ? null : l.get(0);
-    }
-
-    /**
-     * Find out which column is set as sort column.
-     * @param number The position in the sort hierarchy (primary, secondary, etc.)
-     * @return The sort column number.
-     */
-    public int getSortingColumn(int number) {
-        List<Integer> l = comparatorChooser.getSortingColumns();
-        if (l.size() <= number)
-            return -1;
-        else
-            return (l.get(number)).intValue();
-    }
-    
-    public PersistenceTableColumnListener getTableColumnListener() {
-		return tableColumnListener; 
-	}
-
-
-    /**
-     * Returns the List of entries sorted by a user-selected term. This is the
-     * sorting before marking, search etc. applies.
-     *
-     * Note: The returned List must not be modified from the outside
-     * @return The sorted list of entries.
-     */
-    public SortedList<BibtexEntry> getSortedForTable() {
-        return sortedForTable;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.Color;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Comparator;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.*;
+import javax.swing.plaf.TableUI;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumnModel;
+
+import net.sf.jabref.*;
+import net.sf.jabref.groups.EntryTableTransferHandler;
+import net.sf.jabref.search.HitOrMissComparator;
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+import ca.odell.glazedlists.EventList;
+import ca.odell.glazedlists.SortedList;
+import ca.odell.glazedlists.event.ListEventListener;
+import ca.odell.glazedlists.matchers.Matcher;
+import ca.odell.glazedlists.swing.EventSelectionModel;
+import ca.odell.glazedlists.swing.EventTableModel;
+import ca.odell.glazedlists.swing.TableComparatorChooser;
+
+/**
+ * The central table which displays the bibtex entries.
+ * 
+ * User: alver
+ * Date: Oct 12, 2005
+ * Time: 10:29:39 PM
+ * 
+ */
+public class MainTable extends JTable {
+	
+    private MainTableFormat tableFormat;
+    private BasePanel panel;
+    private SortedList<BibtexEntry> sortedForMarking, sortedForTable, sortedForSearch, sortedForGrouping;
+    private boolean tableColorCodes, showingFloatSearch=false, showingFloatGrouping=false;
+    private EventSelectionModel<BibtexEntry> selectionModel;
+    private TableComparatorChooser<BibtexEntry> comparatorChooser;
+    private JScrollPane pane;
+    private Comparator<BibtexEntry> searchComparator, groupComparator,
+            markingComparator = new IsMarkedComparator();
+    private Matcher<BibtexEntry> searchMatcher, groupMatcher;
+    
+    // needed to activate/deactivate the listener
+    private final PersistenceTableColumnListener tableColumnListener;
+
+    // Constants used to define how a cell should be rendered.
+    public static final int REQUIRED = 1, OPTIONAL = 2,
+      REQ_STRING = 1,
+      REQ_NUMBER = 2,
+      OPT_STRING = 3,
+      OTHER = 3,
+      BOOLEAN = 4,
+      ICON_COL = 8; // Constant to indicate that an icon cell renderer should be used.
+
+    static {
+        updateRenderers();
+    }
+
+
+    public MainTable(MainTableFormat tableFormat, EventList<BibtexEntry> list, JabRefFrame frame,
+                     BasePanel panel) {
+        super();
+
+        addFocusListener(Globals.focusListener);
+        setAutoResizeMode(Globals.prefs.getInt("autoResizeMode"));
+        this.tableFormat = tableFormat;
+        this.panel = panel;
+        // This SortedList has a Comparator controlled by the TableComparatorChooser
+        // we are going to install, which responds to user sorting selctions:
+        sortedForTable = new SortedList<BibtexEntry>(list, null);
+        // This SortedList applies afterwards, and floats marked entries:
+        sortedForMarking = new SortedList<BibtexEntry>(sortedForTable, null);
+        // This SortedList applies afterwards, and can float search hits:
+        sortedForSearch = new SortedList<BibtexEntry>(sortedForMarking, null);
+        // This SortedList applies afterwards, and can float grouping hits:
+        sortedForGrouping = new SortedList<BibtexEntry>(sortedForSearch, null);
+
+
+        searchMatcher = null;
+        groupMatcher = null;
+        searchComparator = null;//new HitOrMissComparator(searchMatcher);
+        groupComparator = null;//new HitOrMissComparator(groupMatcher);
+
+        EventTableModel<BibtexEntry> tableModel = new EventTableModel<BibtexEntry>(sortedForGrouping, tableFormat);
+        setModel(tableModel);
+
+        tableColorCodes = Globals.prefs.getBoolean("tableColorCodesOn");
+        selectionModel = new EventSelectionModel<BibtexEntry>(sortedForGrouping);
+        setSelectionModel(selectionModel);
+        pane = new JScrollPane(this);
+        pane.getViewport().setBackground(Globals.prefs.getColor("tableBackground"));
+        setGridColor(Globals.prefs.getColor("gridColor"));
+
+        this.setTableHeader(new PreventDraggingJTableHeader(this.getColumnModel()));
+
+        comparatorChooser = new MyTableComparatorChooser(this, sortedForTable,
+                TableComparatorChooser.MULTIPLE_COLUMN_KEYBOARD);
+
+        this.tableColumnListener =  new PersistenceTableColumnListener(this);
+        /*if (Globals.prefs.getBoolean(PersistenceTableColumnListener.ACTIVATE_PREF_KEY)) {
+            getColumnModel().addColumnModelListener(this.tableColumnListener );
+        }*/
+
+        // TODO: Figure out, whether this call is needed.
+        getSelected();
+
+        // enable DnD
+        setDragEnabled(true);
+        TransferHandler xfer = new EntryTableTransferHandler(this, frame, panel);
+        setTransferHandler(xfer);
+        pane.setTransferHandler(xfer);
+
+        setupComparatorChooser();
+        refreshSorting();
+        setWidths();
+        
+
+    }
+
+    public void refreshSorting() {
+        sortedForMarking.getReadWriteLock().writeLock().lock();
+        if (Globals.prefs.getBoolean("floatMarkedEntries"))
+            sortedForMarking.setComparator(markingComparator);
+        else
+            sortedForMarking.setComparator(null);
+        sortedForMarking.getReadWriteLock().writeLock().unlock();
+        sortedForSearch.getReadWriteLock().writeLock().lock();
+        sortedForSearch.setComparator(searchComparator);
+        sortedForSearch.getReadWriteLock().writeLock().unlock();
+        sortedForGrouping.getReadWriteLock().writeLock().lock();
+        sortedForGrouping.setComparator(groupComparator);
+        sortedForGrouping.getReadWriteLock().writeLock().unlock();
+    }
+
+    /**
+     * Adds a sorting rule that floats hits to the top, and causes non-hits to be grayed out:
+     * @param m The Matcher that determines if an entry is a hit or not.
+     */
+    public void showFloatSearch(Matcher<BibtexEntry> m) {
+        showingFloatSearch = true;
+        searchMatcher = m;
+        searchComparator = new HitOrMissComparator(m);
+        refreshSorting();
+        scrollTo(0);
+    }
+
+    /**
+     * Removes sorting by search results, and graying out of non-hits.
+     */
+    public void stopShowingFloatSearch() {
+        showingFloatSearch = false;
+        searchMatcher = null;
+        searchComparator = null;
+        refreshSorting();
+    }
+
+    /**
+     * Adds a sorting rule that floats group hits to the top, and causes non-hits to be grayed out:
+     * @param m The Matcher that determines if an entry is a in the current group selection or not.
+     */
+    public void showFloatGrouping(Matcher<BibtexEntry> m) {
+        showingFloatGrouping = true;
+        groupMatcher = m;
+        groupComparator = new HitOrMissComparator(m);
+        refreshSorting();
+    }
+
+
+    public boolean isShowingFloatSearch() {
+        return showingFloatSearch;
+    }
+
+    /**
+     * Removes sorting by group, and graying out of non-hits.
+     */
+    public void stopShowingFloatGrouping() {
+        showingFloatGrouping = false;
+        groupMatcher = null;
+        groupComparator = null;
+        refreshSorting();
+    }
+
+    public EventList<BibtexEntry> getTableRows() {
+        return sortedForGrouping;
+    }
+    public void addSelectionListener(ListEventListener<BibtexEntry> listener) {
+        getSelected().addListEventListener(listener);
+    }
+
+    public JScrollPane getPane() {
+        return pane;
+    }
+
+    
+
+    public TableCellRenderer getCellRenderer(int row, int column) {
+        
+        int score = -3;
+        TableCellRenderer renderer = defRenderer;
+
+        int status = getCellStatus(row, column);
+
+        if (!showingFloatSearch || matches(row, searchMatcher))
+            score++;
+        if (!showingFloatGrouping || matches(row, groupMatcher))
+            score += 2;
+
+        // Now, a grayed out renderer is for entries with -1, and
+        // a very grayed out one for entries with -2
+        if (score < -1) {
+            if (column == 0) {
+                veryGrayedOutNumberRenderer.setNumber(row);
+                renderer = veryGrayedOutNumberRenderer;
+            } else renderer = veryGrayedOutRenderer;
+        }
+        else if (score == -1) {
+            if (column == 0) {
+                grayedOutNumberRenderer.setNumber(row);
+                renderer = grayedOutNumberRenderer;
+            } else renderer = grayedOutRenderer;
+        }
+
+        else if (column == 0) {
+            // Return a renderer with red background if the entry is incomplete.
+            if (!isComplete(row)) {
+                incRenderer.setNumber(row);
+                renderer = incRenderer;
+            } else {
+                compRenderer.setNumber(row);
+                int marking = isMarked(row);
+                if (marking > 0) {
+                    marking = Math.min(marking, Util.MARK_COLOR_LEVELS);
+                    renderer = markedNumberRenderers[marking-1];
+                    markedNumberRenderers[marking-1].setNumber(row);
+                } else
+                    renderer = compRenderer;
+            }
+        }
+        else if (tableColorCodes) {
+            if (status == REQUIRED)
+                renderer = reqRenderer;
+            else if (status == OPTIONAL)
+                renderer = optRenderer;
+            else if (status == BOOLEAN)
+                renderer = getDefaultRenderer(Boolean.class);
+        }
+
+        // For MARKED feature:
+        int marking = isMarked(row);
+        if ((column != 0) && (marking > 0)) {
+            marking = Math.min(marking, Util.MARK_COLOR_LEVELS);
+            renderer = markedRenderers[marking-1];
+        }
+
+        return renderer;
+
+    }
+
+    public void setWidths() {
+        // Setting column widths:
+        int ncWidth = Globals.prefs.getInt("numberColWidth");
+        String[] widths = Globals.prefs.getStringArray("columnWidths");
+        TableColumnModel cm = getColumnModel();
+        cm.getColumn(0).setPreferredWidth(ncWidth);
+        for (int i = 1; i < tableFormat.padleft; i++) {
+        	
+        	// Check if the Column is an extended RankingColumn (and not a compact-ranking column) 
+        	// If this is the case, set a certain Column-width,
+        	// because the RankingIconColumn needs some more width
+        	if (tableFormat.isRankingColumn(i) && !Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_RANKING_COMPACT)) {
+        		// Lock the width of ranking icon column.
+                cm.getColumn(i).setPreferredWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
+                cm.getColumn(i).setMinWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
+                cm.getColumn(i).setMaxWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
+        	} else {
+        		// Lock the width of icon columns.
+                cm.getColumn(i).setPreferredWidth(GUIGlobals.WIDTH_ICON_COL);
+                cm.getColumn(i).setMinWidth(GUIGlobals.WIDTH_ICON_COL);
+                cm.getColumn(i).setMaxWidth(GUIGlobals.WIDTH_ICON_COL);	
+        	}
+        	
+        }
+        for (int i = tableFormat.padleft; i < getModel().getColumnCount(); i++) {
+            try {
+                cm.getColumn(i).setPreferredWidth(Integer.parseInt(widths[i - tableFormat.padleft]));
+            } catch (Throwable ex) {
+                Globals.logger("Exception while setting column widths. Choosing default.");
+                cm.getColumn(i).setPreferredWidth(GUIGlobals.DEFAULT_FIELD_LENGTH);
+            }
+
+        }
+    }
+
+    public BibtexEntry getEntryAt(int row) {
+        return sortedForGrouping.get(row);
+    }
+
+    public BibtexEntry[] getSelectedEntries() {
+        final BibtexEntry[] BE_ARRAY = new BibtexEntry[0];
+        return getSelected().toArray(BE_ARRAY);
+    }
+
+    public List<Boolean> getCurrentSortOrder() {
+        List<Boolean> order = new ArrayList<Boolean>();
+        List<Integer> sortCols = comparatorChooser.getSortingColumns();
+        for (Iterator<Integer> iterator = sortCols.iterator(); iterator.hasNext();) {
+            int i = iterator.next();
+            order.add(comparatorChooser.isColumnReverse(i));
+        }
+        return order;
+    }
+
+    public List<String> getCurrentSortFields() {
+        List<Integer> sortCols = comparatorChooser.getSortingColumns();
+        List<String> fields = new ArrayList<String>();
+        for (Iterator<Integer> iterator = sortCols.iterator(); iterator.hasNext();) {
+            int i =  iterator.next();
+            String name = tableFormat.getColumnType(i);
+            if (name != null)
+                fields.add(name.toLowerCase());
+        }
+        return fields;
+    }
+
+
+    /**
+     * This method sets up what Comparators are used for the various table columns.
+     * The ComparatorChooser enables and disables such Comparators as the user clicks
+     * columns, but this is where the Comparators are defined. Also, the ComparatorChooser
+     * is initialized with the sort order defined in Preferences.
+     */
+    @SuppressWarnings("unchecked")
+	private void setupComparatorChooser() {
+        // First column:
+        List<Comparator> comparators = comparatorChooser.getComparatorsForColumn(0);
+        comparators.clear();
+        comparators.add(new FirstColumnComparator(panel.database()));
+
+        // Icon columns:
+        for (int i = 1; i < tableFormat.padleft; i++) {
+            comparators = comparatorChooser.getComparatorsForColumn(i);
+            comparators.clear();
+            String[] iconField = tableFormat.getIconTypeForColumn(i);
+            
+            if (iconField[0].equals(SpecialFieldsUtils.FIELDNAME_RANKING)) {
+            	comparators.add(new RankingFieldComparator());
+            } else {
+            	comparators.add(new IconComparator(iconField));
+            }
+        }
+        // Remaining columns:
+        for (int i = tableFormat.padleft; i < tableFormat.getColumnCount(); i++) {
+            comparators = comparatorChooser.getComparatorsForColumn(i);
+            comparators.clear();
+            comparators.add(new FieldComparator(tableFormat.getColumnName(i).toLowerCase()));
+        }
+
+
+        // Set initial sort columns:
+
+        // Default sort order:
+        String[] sortFields = new String[] {Globals.prefs.get("priSort"), Globals.prefs.get("secSort"),
+            Globals.prefs.get("terSort")};
+        boolean[] sortDirections = new boolean[] {Globals.prefs.getBoolean("priDescending"),
+            Globals.prefs.getBoolean("secDescending"), Globals.prefs.getBoolean("terDescending")}; // descending
+
+        sortedForTable.getReadWriteLock().writeLock().lock();
+        for (int i=0; i<sortFields.length; i++) {
+            int index = -1;
+            if (!sortFields[i].startsWith(MainTableFormat.ICON_COLUMN_PREFIX))
+                index = tableFormat.getColumnIndex(sortFields[i]);
+            else {
+                for (int j=0; j<tableFormat.getColumnCount(); j++) {
+                    if (sortFields[i].equals(tableFormat.getColumnType(j))) {
+                        index = j;
+                        break;
+                    }
+                }
+            }
+            if (index >= 0) {
+                comparatorChooser.appendComparator(index, 0, sortDirections[i]);
+            }
+        }
+        sortedForTable.getReadWriteLock().writeLock().unlock();
+
+        // Add action listener so we can remember the sort order:
+        comparatorChooser.addSortActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                // Get the information about the current sort order:
+                List<String> fields = getCurrentSortFields(); 
+                List<Boolean> order = getCurrentSortOrder();
+                // Update preferences:
+                int count = Math.min(fields.size(), order.size());
+                if (count >= 1) {
+                    Globals.prefs.put("priSort", fields.get(0));
+                    Globals.prefs.putBoolean("priDescending", order.get(0));
+                }
+                if (count >= 2) {
+                    Globals.prefs.put("secSort", fields.get(1));
+                    Globals.prefs.putBoolean("secDescending", order.get(1));
+                }
+                else {
+                    Globals.prefs.put("secSort", "");
+                    Globals.prefs.putBoolean("secDescending", false);
+                }
+                if (count >= 3) {
+                    Globals.prefs.put("terSort", fields.get(2));
+                    Globals.prefs.putBoolean("terDescending", order.get(2));
+                }
+                else {
+                    Globals.prefs.put("terSort", "");
+                    Globals.prefs.putBoolean("terDescending", false);
+                }
+            }
+
+        });
+
+
+    }
+
+    public int getCellStatus(int row, int col) {
+        try {
+            BibtexEntry be = sortedForGrouping.get(row);
+            BibtexEntryType type = be.getType();
+            String columnName = getColumnName(col).toLowerCase();
+            if (columnName.equals(BibtexFields.KEY_FIELD) || type.isRequired(columnName)) {
+                return REQUIRED;
+            }
+            if (type.isOptional(columnName)) {
+                return OPTIONAL;
+            }
+            return OTHER;
+        } catch (NullPointerException ex) {
+            //System.out.println("Exception: getCellStatus");
+            return OTHER;
+        }
+    }
+
+    public EventList<BibtexEntry> getSelected() {
+        return selectionModel.getSelected();
+    }
+
+    public int findEntry(BibtexEntry entry) {
+        //System.out.println(sortedForGrouping.indexOf(entry));
+        return sortedForGrouping.indexOf(entry);
+    }
+
+    public String[] getIconTypeForColumn(int column) {
+        return tableFormat.getIconTypeForColumn(column);
+    }
+
+    private boolean matches(int row, Matcher<BibtexEntry> m) {
+        return m.matches(sortedForGrouping.get(row));
+    }
+
+    private boolean isComplete(int row) {
+        try {
+            BibtexEntry be = sortedForGrouping.get(row);
+            return be.hasAllRequiredFields(panel.database());
+        } catch (NullPointerException ex) {
+            //System.out.println("Exception: isComplete");
+            return true;
+        }
+    }
+
+    private int isMarked(int row) {
+        try {
+            BibtexEntry be = sortedForGrouping.get(row);
+            return Util.isMarked(be);
+        } catch (NullPointerException ex) {
+            //System.out.println("Exception: isMarked");
+            return 0;
+        }
+    }
+
+
+    public void scrollTo(int y) {
+        JScrollBar scb = pane.getVerticalScrollBar();
+        scb.setValue(y * scb.getUnitIncrement(1));
+    }
+
+    /**
+     * updateFont
+     */
+    public void updateFont() {
+        setFont(GUIGlobals.CURRENTFONT);
+        setRowHeight(GUIGlobals.TABLE_ROW_PADDING + GUIGlobals.CURRENTFONT.getSize());
+    }
+
+    public void ensureVisible(int row) {
+        JScrollBar vert = pane.getVerticalScrollBar();
+        int y = row * getRowHeight();
+		if ((y < vert.getValue()) || (y > vert.getValue() + vert.getVisibleAmount()) && !showingFloatSearch) {
+			scrollToCenter(row, 1);
+		}
+            
+    }
+
+    public void scrollToCenter(int rowIndex, int vColIndex) {
+        if (!(this.getParent() instanceof JViewport)) {
+            return;
+        }
+
+        JViewport viewport = (JViewport) this.getParent();
+
+        // This rectangle is relative to the table where the
+        // northwest corner of cell (0,0) is always (0,0).
+        Rectangle rect = this.getCellRect(rowIndex, vColIndex, true);
+
+        // The location of the view relative to the table
+        Rectangle viewRect = viewport.getViewRect();
+
+        // Translate the cell location so that it is relative
+        // to the view, assuming the northwest corner of the
+        // view is (0,0).
+        rect.setLocation(rect.x - viewRect.x, rect.y - viewRect.y);
+
+        // Calculate location of rect if it were at the center of view
+        int centerX = (viewRect.width - rect.width) / 2;
+        int centerY = (viewRect.height - rect.height) / 2;
+
+        // Fake the location of the cell so that scrollRectToVisible
+        // will move the cell to the center
+        if (rect.x < centerX) {
+            centerX = -centerX;
+        }
+        if (rect.y < centerY) {
+            centerY = -centerY;
+        }
+        rect.translate(centerX, centerY);
+
+        // Scroll the area into view.
+        viewport.scrollRectToVisible(rect);
+
+        revalidate();
+        repaint();
+    }
+
+
+    private static GeneralRenderer defRenderer, reqRenderer, optRenderer, grayedOutRenderer,
+        veryGrayedOutRenderer;
+
+    private static GeneralRenderer[] markedRenderers;
+
+    private static IncompleteRenderer incRenderer;
+    private static CompleteRenderer
+            compRenderer,
+            grayedOutNumberRenderer,
+            veryGrayedOutNumberRenderer;
+
+    private static CompleteRenderer[] markedNumberRenderers;
+
+    public static void updateRenderers() {
+
+        defRenderer = new GeneralRenderer(Globals.prefs.getColor("tableBackground"),
+                Globals.prefs.getColor("tableText"));
+        Color sel = defRenderer.getTableCellRendererComponent
+                (new JTable(), "", true, false, 0, 0).getBackground();
+        reqRenderer = new GeneralRenderer(Globals.prefs.getColor("tableReqFieldBackground"), Globals.prefs.getColor("tableText"));
+        optRenderer = new GeneralRenderer(Globals.prefs.getColor("tableOptFieldBackground"), Globals.prefs.getColor("tableText"));
+        incRenderer = new IncompleteRenderer();
+        compRenderer = new CompleteRenderer(Globals.prefs.getColor("tableBackground"));
+        grayedOutNumberRenderer = new CompleteRenderer(Globals.prefs.getColor("grayedOutBackground"));
+        veryGrayedOutNumberRenderer = new CompleteRenderer(Globals.prefs.getColor("veryGrayedOutBackground"));
+        grayedOutRenderer = new GeneralRenderer(Globals.prefs.getColor("grayedOutBackground"),
+            Globals.prefs.getColor("grayedOutText"), mixColors(Globals.prefs.getColor("grayedOutBackground"),
+                sel));
+        veryGrayedOutRenderer = new GeneralRenderer(Globals.prefs.getColor("veryGrayedOutBackground"),
+                Globals.prefs.getColor("veryGrayedOutText"), mixColors(Globals.prefs.getColor("veryGrayedOutBackground"),
+                sel));
+
+        markedRenderers = new GeneralRenderer[Util.MARK_COLOR_LEVELS];
+        markedNumberRenderers = new CompleteRenderer[Util.MARK_COLOR_LEVELS];
+        for (int i=0; i<Util.MARK_COLOR_LEVELS; i++) {
+            Color c = Globals.prefs.getColor("markedEntryBackground"+i);
+            markedRenderers[i] = new GeneralRenderer(c,
+                Globals.prefs.getColor("tableText"), mixColors(Globals.prefs.getColor("markedEntryBackground"+i), sel));
+            markedNumberRenderers[i] = new CompleteRenderer(c);
+        }
+        
+    }
+
+    private static Color mixColors(Color one, Color two) {
+        return new Color((one.getRed()+two.getRed())/2, (one.getGreen()+two.getGreen())/2,
+                (one.getBlue()+two.getBlue())/2);
+    }
+
+    static class IncompleteRenderer extends GeneralRenderer {
+        public IncompleteRenderer() {
+            super(Globals.prefs.getColor("incompleteEntryBackground"));
+            super.setToolTipText(Globals.lang("This entry is incomplete"));
+        }
+
+        protected void setNumber(int number) {
+            super.setValue(String.valueOf(number + 1));
+        }
+
+        protected void setValue(Object value) {
+
+        }
+    }
+
+    static class CompleteRenderer extends GeneralRenderer {
+        public CompleteRenderer(Color color) {
+            super(color);
+        }
+
+        protected void setNumber(int number) {
+            super.setValue(String.valueOf(number + 1));
+        }
+
+        protected void setValue(Object value) {
+
+        }
+    }
+
+    class MyTableComparatorChooser extends TableComparatorChooser<BibtexEntry> {
+        public MyTableComparatorChooser(JTable table, SortedList<BibtexEntry> list,
+                                        Object sortingStrategy) {
+            super(table, list, sortingStrategy);
+            // We need to reset the stack of sorted list each time sorting order
+            // changes, or the sorting breaks down:
+            addSortActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    //System.out.println("...");
+                    refreshSorting();
+                }
+            });
+        }
+    }
+
+    /**
+     * Morten Alver: This override is a workaround NullPointerException when
+     * dragging stuff into the table. I found this in a forum, but have no idea
+     * why it works.
+     * @param newUI
+     */
+    public void setUI(TableUI newUI) {
+        super.setUI(newUI);
+        TransferHandler handler = getTransferHandler();
+        setTransferHandler(null);
+        setTransferHandler(handler);
+
+    }
+
+    /**
+     * Get the first comparator set up for the given column.
+     * @param index The column number.
+     * @return The Comparator, or null if none is set.
+     */
+    @SuppressWarnings("unchecked")
+	public Comparator<BibtexEntry> getComparatorForColumn(int index) {
+        List<Comparator> l = comparatorChooser.getComparatorsForColumn(index);
+        return l.size() == 0 ? null : l.get(0);
+    }
+
+    /**
+     * Find out which column is set as sort column.
+     * @param number The position in the sort hierarchy (primary, secondary, etc.)
+     * @return The sort column number.
+     */
+    public int getSortingColumn(int number) {
+        List<Integer> l = comparatorChooser.getSortingColumns();
+        if (l.size() <= number)
+            return -1;
+        else
+            return (l.get(number)).intValue();
+    }
+    
+    public PersistenceTableColumnListener getTableColumnListener() {
+		return tableColumnListener; 
+	}
+
+
+    /**
+     * Returns the List of entries sorted by a user-selected term. This is the
+     * sorting before marking, search etc. applies.
+     *
+     * Note: The returned List must not be modified from the outside
+     * @return The sorted list of entries.
+     */
+    public SortedList<BibtexEntry> getSortedForTable() {
+        return sortedForTable;
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/MainTableFormat.java b/src/java/net/sf/jabref/gui/MainTableFormat.java
index f3d5ccd..ed8fec3 100644
--- a/src/java/net/sf/jabref/gui/MainTableFormat.java
+++ b/src/java/net/sf/jabref/gui/MainTableFormat.java
@@ -1,359 +1,359 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Vector;
-
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRef;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.SearchRuleSet;
-import net.sf.jabref.Util;
-import net.sf.jabref.specialfields.Priority;
-import net.sf.jabref.specialfields.Rank;
-import net.sf.jabref.specialfields.SpecialFieldValue;
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-import ca.odell.glazedlists.gui.TableFormat;
-import ca.odell.glazedlists.matchers.Matcher;
-
-/**
- * Class defining the contents and column headers of the main table.
- */
-public class MainTableFormat implements TableFormat<BibtexEntry> {
-
-    // Character separating field names that are to be used in sequence as
-    // fallbacks for a single column (e.g. "author/editor" to use editor where
-    // author is not set):
-    public static final String COL_DEFINITION_FIELD_SEPARATOR = "/";
-
-    public static final String ICON_COLUMN_PREFIX = "iconcol:";
-
-    // Values to gather iconImages for those columns
-    // These values are also used to put a heading into the table; see getColumnName(int)
-    public static final String[]
-    PDF = {"pdf", "ps"},
-    URL_ = {"url", "doi"},
-    CITESEER = {"citeseerurl"},
-    ARXIV = {"eprint"},
-    RANKING = {SpecialFieldsUtils.FIELDNAME_RANKING},
-    PRIORITY = {SpecialFieldsUtils.FIELDNAME_PRIORITY},
-    RELEVANCE = {SpecialFieldsUtils.FIELDNAME_RELEVANCE},
-    QUALITY = {SpecialFieldsUtils.FIELDNAME_QUALITY},
-    FILE = {GUIGlobals.FILE_FIELD};
-
-    BasePanel panel;
-
-    private String[][] columns; // Contains the current column names.
-    public int padleft = -1; // padleft indicates how many columns (starting from left) are
-    // special columns (number column or icon column).
-    private HashMap<Integer, String[]> iconCols = new HashMap<Integer, String[]>();
-    int[][] nameCols = null;
-    boolean namesAsIs, abbr_names, namesNatbib, namesFf, namesLf, namesLastOnly, showShort;
-
-    public MainTableFormat(BasePanel panel) {
-        this.panel = panel;
-    }
-
-    public int getColumnCount() {
-        return padleft + columns.length;
-    }
-
-    /**
-     * @return the string that should be put in the column header
-     */
-    public String getColumnName(int col) {
-        if (col == 0) {
-            return GUIGlobals.NUMBER_COL;
-        } else if (getIconTypeForColumn(col) != null) {
-            if (JabRef.jrf.prefs().getBoolean(JabRefPreferences.SHOWONELETTERHEADINGFORICONCOLUMNS)) {
-                return getIconTypeForColumn(col)[0].substring(0,1).toUpperCase();
-            } else {
-            	return null;
-            }
-        }
-        else // try to find an alternative fieldname (for display)
-        {
-            String[] fld = columns[col - padleft];
-            StringBuilder sb = new StringBuilder();
-            for (int i=0; i<fld.length; i++) {
-                if (i > 0)
-                    sb.append('/');
-                String disName = BibtexFields.getFieldDisplayName(fld[i]);
-                if (disName != null)
-                    sb.append(disName);
-                else
-                    sb.append(Util.nCase(fld[i]));
-            }
-            return sb.toString();
-          /*String disName = BibtexFields.getFieldDisplayName(columns[col - padleft]) ;
-          if ( disName != null)
-          {
-            return disName ;
-          } */
-        }
-        //return Util.nCase(columns[col - padleft]);
-    }
-
-    /**
-     * Get the column title, or a string identifying the column if it is an icon
-     * column without a title.
-     * @param col The column number
-     * @return the String identifying the column
-     */
-    public String getColumnType(int col) {
-        String name = getColumnName(col);
-        if (name != null)
-            return name;
-        String[] icon = getIconTypeForColumn(col);
-        if ((icon != null) && (icon.length > 0)) {
-            return ICON_COLUMN_PREFIX+icon[0];
-        }
-        return null;
-    }
-
-    /**
-     * This method returns a string array indicating the types of icons to be displayed in the given column.
-     * It returns null if the column is not an icon column, and thereby also serves to identify icon
-     * columns.
-     */
-    public String[] getIconTypeForColumn(int col) {
-        Object o = iconCols.get(new Integer(col));
-        if (o != null)
-            return (String[]) o;
-        else
-            return null;
-    }
-
-    /**
-     * Finds the column index for the given column name.
-     * @param colName The column name
-     * @return The column index if any, or -1 if no column has that name.
-     */
-    public int getColumnIndex(String colName) {
-        for (int i=0; i<columns.length; i++) {
-            // TODO: is the following line correct with [0] ?
-            if (columns[i][0].equalsIgnoreCase(colName))
-                return i+padleft;
-        }
-        return -1;
-    }
-
-    /**
-     * Checks, if the Column (int col) is a Ranking-Column
-     * @param col Column Number
-     * @return Is Ranking-Column or not?
-     */
-    public boolean isRankingColumn(int col) {
-        if (iconCols.get(col) != null) {
-            if (iconCols.get(col)[0] == RANKING[0]){
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public Object getColumnValue(BibtexEntry be, int col) {
-        Object o = null;
-        String[] iconType = getIconTypeForColumn(col); // If non-null, indicates an icon column's type.
-
-        if (col == 0) {
-            o = "#";// + (row + 1);
-        }
-
-        else if (iconType != null) {
-            int hasField = -1;
-            for (int i = iconType.length - 1; i >= 0; i--)
-                if (hasField(be, iconType[i]))
-                    hasField = i;
-            if (hasField < 0)
-                return null;
-
-            // Ok, so we are going to display an icon. Find out which one, and return it:
-            if (iconType[hasField].equals(GUIGlobals.FILE_FIELD)) {
-                o = FileListTableModel.getFirstLabel(be.getField(GUIGlobals.FILE_FIELD));
-
-            // Handle priority column special
-            // Extra handling because the icon depends on a FieldValue
-            } else if (iconType[hasField].equals(PRIORITY[0])) {
-                SpecialFieldValue prio = Priority.getInstance().parse(be.getField(SpecialFieldsUtils.FIELDNAME_PRIORITY));
-                if (prio != null) {
-                    // prio might be null if fieldvalue is an invalid value, therefore we check for != null
-                    o = prio.createLabel();
-                }
-            // Handle ranking column special
-            // Extra handling because the icon depends on a FieldValue
-            } else if (iconType[hasField].equals(RANKING[0])) {
-                SpecialFieldValue rank = Rank.getInstance().parse(be.getField(SpecialFieldsUtils.FIELDNAME_RANKING));
-                if (rank != null) {
-                    o = rank.createLabel();
-                }
-            } else {
-                o = GUIGlobals.getTableIcon(iconType[hasField]);
-            }
-        } else {
-            String[] fld = columns[col - padleft];
-            // Go through the fields until we find one with content:
-            int j = 0;
-            for (int i = 0; i < fld.length; i++) {
-                if (fld[i].equals(GUIGlobals.TYPE_HEADER))
-                    o = be.getType().getName();
-                else
-                    o = be.getField(fld[i]);
-                if (o != null) {
-                    j = i;
-                    break;
-                }
-            }
-
-            for (int i = 0; i < nameCols.length; i++) {
-                if ((col - padleft == nameCols[i][0]) && (nameCols[i][1] == j)) {
-                    return formatName(o);
-                }
-            }
-
-
-        }
-
-        return o;
-    }
-
-    /**
-     * Format a name field for the table, according to user preferences.
-     * @param o The contents of the name field.
-     * @return The formatted name field.
-     */
-    public Object formatName(Object o) {
-        if (o == null) {
-            return null;
-        }
-        if (namesAsIs) return o;
-        if (namesNatbib) o = AuthorList.fixAuthor_Natbib((String) o);
-        else if (namesLastOnly) o = AuthorList.fixAuthor_lastNameOnlyCommas((String) o, false);
-        else if (namesFf) o = AuthorList.fixAuthor_firstNameFirstCommas((String) o, abbr_names, false);
-        else if (namesLf) o = AuthorList.fixAuthor_lastNameFirstCommas((String) o, abbr_names, false);
-        return o;
-    }
-
-    public boolean hasField(BibtexEntry be, String field) {
-        // Returns true iff the entry has a nonzero value in its
-        // 'search' field.
-        return ((be != null) && (be.getField(field) != null));
-    }
-
-    public void updateTableFormat() {
-
-        // Read table columns from prefs:
-        String[] colSettings = Globals.prefs.getStringArray("columnNames");
-        columns = new String[colSettings.length][];
-        for (int i=0; i<colSettings.length; i++) {
-            String[] fields = colSettings[i].split(COL_DEFINITION_FIELD_SEPARATOR);
-            columns[i] = new String[fields.length];
-            for (int j = 0; j < fields.length; j++) {
-                columns[i][j] = fields[j];
-            }
-        }
-
-        // Read name format options:
-        showShort = Globals.prefs.getBoolean("showShort");        //MK:
-        namesNatbib = Globals.prefs.getBoolean("namesNatbib");    //MK:
-        namesLastOnly = Globals.prefs.getBoolean("namesLastOnly");
-        namesAsIs = Globals.prefs.getBoolean("namesAsIs");
-        abbr_names = Globals.prefs.getBoolean("abbrAuthorNames"); //MK:
-        namesFf = Globals.prefs.getBoolean("namesFf");
-        namesLf = !(namesAsIs || namesFf || namesNatbib || namesLastOnly); // None of the above.
-
-        // Set the icon columns, indicating the number of special columns to the left.
-        // We add those that are enabled in preferences.
-        iconCols.clear();
-        int coln = 1;
-
-        // Add special Icon Columns
-        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED)) {
-            if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING))
-                iconCols.put(coln++, RANKING);
-            if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE))
-                iconCols.put(coln++, RELEVANCE);
-            if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY))
-                iconCols.put(coln++, QUALITY);
-            if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY))
-                iconCols.put(coln++, PRIORITY);
-        }
-
-        if (Globals.prefs.getBoolean("fileColumn"))
-            iconCols.put(coln++, FILE);
-        if (Globals.prefs.getBoolean("pdfColumn"))
-            iconCols.put(coln++, PDF);
-        if (Globals.prefs.getBoolean("urlColumn"))
-            iconCols.put(coln++, URL_);
-        if (Globals.prefs.getBoolean("arxivColumn"))
-            iconCols.put(coln++, ARXIV);
-
-        // Add 1 to the number of icon columns to get padleft.
-        padleft = 1 + iconCols.size();
-
-        // Set up the int[][] nameCols, to mark which columns should be
-        // treated as lists of names. This is to provide a correct presentation
-        // of names as efficiently as possible.
-        // Each subarray contains the column number (before padding) and the
-        // subfield number in case a column has fallback fields.
-        Vector<int[]> tmp = new Vector<int[]>(2, 1);
-        for (int i = 0; i < columns.length; i++) {
-            for (int j = 0; j < columns[i].length; j++) {
-                if (columns[i][j].equals("author")
-                    || columns[i][j].equals("editor")) {
-                    tmp.add(new int[] {i, j});
-                }
-            }
-        }
-        nameCols = new int[tmp.size()][];
-        for (int i = 0; i < nameCols.length; i++) {
-            nameCols[i] = tmp.elementAt(i);
-        }
-    }
-
-    public boolean isIconColumn(int col) {
-        return (getIconTypeForColumn(col) != null);
-    }
-
-
-
-    static class NoSearchMatcher implements Matcher<BibtexEntry> {
-        public boolean matches(BibtexEntry object) {
-            return true;
-        }
-    }
-
-    static class SearchMatcher implements Matcher<BibtexEntry> {
-        private SearchRuleSet ruleSet;
-        private Hashtable<String, String> searchOptions;
-
-        public SearchMatcher(SearchRuleSet ruleSet, Hashtable<String, String> searchOptions) {
-            this.ruleSet = ruleSet;
-            this.searchOptions = searchOptions;
-        }
-        public boolean matches(BibtexEntry entry) {
-            int result = ruleSet.applyRule(searchOptions, entry);
-            return result > 0;
-        }
-    }
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.SearchRuleSet;
+import net.sf.jabref.Util;
+import net.sf.jabref.specialfields.Priority;
+import net.sf.jabref.specialfields.Rank;
+import net.sf.jabref.specialfields.SpecialFieldValue;
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+import ca.odell.glazedlists.gui.TableFormat;
+import ca.odell.glazedlists.matchers.Matcher;
+
+/**
+ * Class defining the contents and column headers of the main table.
+ */
+public class MainTableFormat implements TableFormat<BibtexEntry> {
+
+    // Character separating field names that are to be used in sequence as
+    // fallbacks for a single column (e.g. "author/editor" to use editor where
+    // author is not set):
+    public static final String COL_DEFINITION_FIELD_SEPARATOR = "/";
+
+    public static final String ICON_COLUMN_PREFIX = "iconcol:";
+
+    // Values to gather iconImages for those columns
+    // These values are also used to put a heading into the table; see getColumnName(int)
+    public static final String[]
+    PDF = {"pdf", "ps"},
+    URL_ = {"url", "doi"},
+    CITESEER = {"citeseerurl"},
+    ARXIV = {"eprint"},
+    RANKING = {SpecialFieldsUtils.FIELDNAME_RANKING},
+    PRIORITY = {SpecialFieldsUtils.FIELDNAME_PRIORITY},
+    RELEVANCE = {SpecialFieldsUtils.FIELDNAME_RELEVANCE},
+    QUALITY = {SpecialFieldsUtils.FIELDNAME_QUALITY},
+    FILE = {GUIGlobals.FILE_FIELD};
+
+    BasePanel panel;
+
+    private String[][] columns; // Contains the current column names.
+    public int padleft = -1; // padleft indicates how many columns (starting from left) are
+    // special columns (number column or icon column).
+    private HashMap<Integer, String[]> iconCols = new HashMap<Integer, String[]>();
+    int[][] nameCols = null;
+    boolean namesAsIs, abbr_names, namesNatbib, namesFf, namesLf, namesLastOnly, showShort;
+
+    public MainTableFormat(BasePanel panel) {
+        this.panel = panel;
+    }
+
+    public int getColumnCount() {
+        return padleft + columns.length;
+    }
+
+    /**
+     * @return the string that should be put in the column header
+     */
+    public String getColumnName(int col) {
+        if (col == 0) {
+            return GUIGlobals.NUMBER_COL;
+        } else if (getIconTypeForColumn(col) != null) {
+            if (JabRef.jrf.prefs().getBoolean(JabRefPreferences.SHOWONELETTERHEADINGFORICONCOLUMNS)) {
+                return getIconTypeForColumn(col)[0].substring(0,1).toUpperCase();
+            } else {
+            	return null;
+            }
+        }
+        else // try to find an alternative fieldname (for display)
+        {
+            String[] fld = columns[col - padleft];
+            StringBuilder sb = new StringBuilder();
+            for (int i=0; i<fld.length; i++) {
+                if (i > 0)
+                    sb.append('/');
+                String disName = BibtexFields.getFieldDisplayName(fld[i]);
+                if (disName != null)
+                    sb.append(disName);
+                else
+                    sb.append(Util.nCase(fld[i]));
+            }
+            return sb.toString();
+          /*String disName = BibtexFields.getFieldDisplayName(columns[col - padleft]) ;
+          if ( disName != null)
+          {
+            return disName ;
+          } */
+        }
+        //return Util.nCase(columns[col - padleft]);
+    }
+
+    /**
+     * Get the column title, or a string identifying the column if it is an icon
+     * column without a title.
+     * @param col The column number
+     * @return the String identifying the column
+     */
+    public String getColumnType(int col) {
+        String name = getColumnName(col);
+        if (name != null)
+            return name;
+        String[] icon = getIconTypeForColumn(col);
+        if ((icon != null) && (icon.length > 0)) {
+            return ICON_COLUMN_PREFIX+icon[0];
+        }
+        return null;
+    }
+
+    /**
+     * This method returns a string array indicating the types of icons to be displayed in the given column.
+     * It returns null if the column is not an icon column, and thereby also serves to identify icon
+     * columns.
+     */
+    public String[] getIconTypeForColumn(int col) {
+        Object o = iconCols.get(new Integer(col));
+        if (o != null)
+            return (String[]) o;
+        else
+            return null;
+    }
+
+    /**
+     * Finds the column index for the given column name.
+     * @param colName The column name
+     * @return The column index if any, or -1 if no column has that name.
+     */
+    public int getColumnIndex(String colName) {
+        for (int i=0; i<columns.length; i++) {
+            // TODO: is the following line correct with [0] ?
+            if (columns[i][0].equalsIgnoreCase(colName))
+                return i+padleft;
+        }
+        return -1;
+    }
+
+    /**
+     * Checks, if the Column (int col) is a Ranking-Column
+     * @param col Column Number
+     * @return Is Ranking-Column or not?
+     */
+    public boolean isRankingColumn(int col) {
+        if (iconCols.get(col) != null) {
+            if (iconCols.get(col)[0] == RANKING[0]){
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public Object getColumnValue(BibtexEntry be, int col) {
+        Object o = null;
+        String[] iconType = getIconTypeForColumn(col); // If non-null, indicates an icon column's type.
+
+        if (col == 0) {
+            o = "#";// + (row + 1);
+        }
+
+        else if (iconType != null) {
+            int hasField = -1;
+            for (int i = iconType.length - 1; i >= 0; i--)
+                if (hasField(be, iconType[i]))
+                    hasField = i;
+            if (hasField < 0)
+                return null;
+
+            // Ok, so we are going to display an icon. Find out which one, and return it:
+            if (iconType[hasField].equals(GUIGlobals.FILE_FIELD)) {
+                o = FileListTableModel.getFirstLabel(be.getField(GUIGlobals.FILE_FIELD));
+
+            // Handle priority column special
+            // Extra handling because the icon depends on a FieldValue
+            } else if (iconType[hasField].equals(PRIORITY[0])) {
+                SpecialFieldValue prio = Priority.getInstance().parse(be.getField(SpecialFieldsUtils.FIELDNAME_PRIORITY));
+                if (prio != null) {
+                    // prio might be null if fieldvalue is an invalid value, therefore we check for != null
+                    o = prio.createLabel();
+                }
+            // Handle ranking column special
+            // Extra handling because the icon depends on a FieldValue
+            } else if (iconType[hasField].equals(RANKING[0])) {
+                SpecialFieldValue rank = Rank.getInstance().parse(be.getField(SpecialFieldsUtils.FIELDNAME_RANKING));
+                if (rank != null) {
+                    o = rank.createLabel();
+                }
+            } else {
+                o = GUIGlobals.getTableIcon(iconType[hasField]);
+            }
+        } else {
+            String[] fld = columns[col - padleft];
+            // Go through the fields until we find one with content:
+            int j = 0;
+            for (int i = 0; i < fld.length; i++) {
+                if (fld[i].equals(GUIGlobals.TYPE_HEADER))
+                    o = be.getType().getName();
+                else
+                    o = be.getField(fld[i]);
+                if (o != null) {
+                    j = i;
+                    break;
+                }
+            }
+
+            for (int i = 0; i < nameCols.length; i++) {
+                if ((col - padleft == nameCols[i][0]) && (nameCols[i][1] == j)) {
+                    return formatName(o);
+                }
+            }
+
+
+        }
+
+        return o;
+    }
+
+    /**
+     * Format a name field for the table, according to user preferences.
+     * @param o The contents of the name field.
+     * @return The formatted name field.
+     */
+    public Object formatName(Object o) {
+        if (o == null) {
+            return null;
+        }
+        if (namesAsIs) return o;
+        if (namesNatbib) o = AuthorList.fixAuthor_Natbib((String) o);
+        else if (namesLastOnly) o = AuthorList.fixAuthor_lastNameOnlyCommas((String) o, false);
+        else if (namesFf) o = AuthorList.fixAuthor_firstNameFirstCommas((String) o, abbr_names, false);
+        else if (namesLf) o = AuthorList.fixAuthor_lastNameFirstCommas((String) o, abbr_names, false);
+        return o;
+    }
+
+    public boolean hasField(BibtexEntry be, String field) {
+        // Returns true iff the entry has a nonzero value in its
+        // 'search' field.
+        return ((be != null) && (be.getField(field) != null));
+    }
+
+    public void updateTableFormat() {
+
+        // Read table columns from prefs:
+        String[] colSettings = Globals.prefs.getStringArray("columnNames");
+        columns = new String[colSettings.length][];
+        for (int i=0; i<colSettings.length; i++) {
+            String[] fields = colSettings[i].split(COL_DEFINITION_FIELD_SEPARATOR);
+            columns[i] = new String[fields.length];
+            for (int j = 0; j < fields.length; j++) {
+                columns[i][j] = fields[j];
+            }
+        }
+
+        // Read name format options:
+        showShort = Globals.prefs.getBoolean("showShort");        //MK:
+        namesNatbib = Globals.prefs.getBoolean("namesNatbib");    //MK:
+        namesLastOnly = Globals.prefs.getBoolean("namesLastOnly");
+        namesAsIs = Globals.prefs.getBoolean("namesAsIs");
+        abbr_names = Globals.prefs.getBoolean("abbrAuthorNames"); //MK:
+        namesFf = Globals.prefs.getBoolean("namesFf");
+        namesLf = !(namesAsIs || namesFf || namesNatbib || namesLastOnly); // None of the above.
+
+        // Set the icon columns, indicating the number of special columns to the left.
+        // We add those that are enabled in preferences.
+        iconCols.clear();
+        int coln = 1;
+
+        // Add special Icon Columns
+        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED)) {
+            if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING))
+                iconCols.put(coln++, RANKING);
+            if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE))
+                iconCols.put(coln++, RELEVANCE);
+            if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY))
+                iconCols.put(coln++, QUALITY);
+            if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY))
+                iconCols.put(coln++, PRIORITY);
+        }
+
+        if (Globals.prefs.getBoolean("fileColumn"))
+            iconCols.put(coln++, FILE);
+        if (Globals.prefs.getBoolean("pdfColumn"))
+            iconCols.put(coln++, PDF);
+        if (Globals.prefs.getBoolean("urlColumn"))
+            iconCols.put(coln++, URL_);
+        if (Globals.prefs.getBoolean("arxivColumn"))
+            iconCols.put(coln++, ARXIV);
+
+        // Add 1 to the number of icon columns to get padleft.
+        padleft = 1 + iconCols.size();
+
+        // Set up the int[][] nameCols, to mark which columns should be
+        // treated as lists of names. This is to provide a correct presentation
+        // of names as efficiently as possible.
+        // Each subarray contains the column number (before padding) and the
+        // subfield number in case a column has fallback fields.
+        Vector<int[]> tmp = new Vector<int[]>(2, 1);
+        for (int i = 0; i < columns.length; i++) {
+            for (int j = 0; j < columns[i].length; j++) {
+                if (columns[i][j].equals("author")
+                    || columns[i][j].equals("editor")) {
+                    tmp.add(new int[] {i, j});
+                }
+            }
+        }
+        nameCols = new int[tmp.size()][];
+        for (int i = 0; i < nameCols.length; i++) {
+            nameCols[i] = tmp.elementAt(i);
+        }
+    }
+
+    public boolean isIconColumn(int col) {
+        return (getIconTypeForColumn(col) != null);
+    }
+
+
+
+    static class NoSearchMatcher implements Matcher<BibtexEntry> {
+        public boolean matches(BibtexEntry object) {
+            return true;
+        }
+    }
+
+    static class SearchMatcher implements Matcher<BibtexEntry> {
+        private SearchRuleSet ruleSet;
+        private Hashtable<String, String> searchOptions;
+
+        public SearchMatcher(SearchRuleSet ruleSet, Hashtable<String, String> searchOptions) {
+            this.ruleSet = ruleSet;
+            this.searchOptions = searchOptions;
+        }
+        public boolean matches(BibtexEntry entry) {
+            int result = ruleSet.applyRule(searchOptions, entry);
+            return result > 0;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/MainTableSelectionListener.java b/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
index 77e8798..dd3e6ce 100644
--- a/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
+++ b/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
@@ -1,570 +1,570 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.io.IOException;
-
-import javax.swing.JPopupMenu;
-import javax.swing.SwingUtilities;
-import javax.swing.Timer;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.EntryEditor;
-import net.sf.jabref.FocusRequester;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.PreviewPanel;
-import net.sf.jabref.RightClickMenu;
-import net.sf.jabref.Util;
-import net.sf.jabref.external.ExternalFileMenuItem;
-import ca.odell.glazedlists.EventList;
-import ca.odell.glazedlists.event.ListEvent;
-import ca.odell.glazedlists.event.ListEventListener;
-import net.sf.jabref.specialfields.SpecialField;
-import net.sf.jabref.specialfields.SpecialFieldValue;
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-
-/**
- * List event, mouse, key and focus listener for the main table that makes up the
- * most part of the BasePanel for a single bib database.
- */
-public class MainTableSelectionListener implements ListEventListener<BibtexEntry>, MouseListener,
-        KeyListener, FocusListener {
-
-    PreviewPanel[] previewPanel = null;
-    int activePreview = Globals.prefs.getInt("activePreview");
-    PreviewPanel preview;
-    MainTable table;
-    BasePanel panel;
-    EventList<BibtexEntry> tableRows;
-    private boolean previewActive = Globals.prefs.getBoolean("previewEnabled");
-    private boolean workingOnPreview = false;
-
-    private boolean enabled = true;
-
-    // Register the last character pressed to quick jump in the table. Together
-    // with storing the last row number jumped to, this is used to let multiple
-    // key strokes cycle between all entries starting with the same letter:
-    private int[] lastPressed = new int[20];
-    private int lastPressedCount = 0;
-    private long lastPressedTime = 0;
-    private long QUICK_JUMP_TIMEOUT = 2000;
-
-    //private int lastCharPressed = -1;
-
-    public MainTableSelectionListener(BasePanel panel, MainTable table) {
-        this.table = table;
-        this.panel = panel;
-        this.tableRows = table.getTableRows();
-        instantiatePreviews();
-        this.preview = previewPanel[activePreview];
-    }
-
-    public void setEnabled(boolean enabled) {
-        this.enabled = enabled;
-    }
-
-    private void instantiatePreviews() {
-		previewPanel = new PreviewPanel[] {
-			new PreviewPanel(panel.database(), null, panel, panel.metaData(), Globals.prefs
-				.get("preview0"), true),
-			new PreviewPanel(panel.database(), null, panel, panel.metaData(), Globals.prefs
-				.get("preview1"), true) };
-		
-		panel.frame().getSearchManager().addSearchListener(previewPanel[0]);
-		panel.frame().getSearchManager().addSearchListener(previewPanel[1]);
-	}
-
-    public void updatePreviews() {
-        try {
-            previewPanel[0].readLayout(Globals.prefs.get("preview0"));
-            previewPanel[1].readLayout(Globals.prefs.get("preview1"));
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    public void listChanged(ListEvent<BibtexEntry> e) {
-        if (!enabled) {
-            return;
-        }
-        EventList<BibtexEntry> selected = e.getSourceList();
-        Object newSelected = null;
-        while (e.next()) {
-            if (e.getType() == ListEvent.INSERT) {
-                if (newSelected != null)
-                    return; // More than one new selected. Do nothing.
-                else {
-                    if (e.getIndex() < selected.size())
-                        newSelected = selected.get(e.getIndex());
-                }
-
-            }
-        }
-
-        if (newSelected != null) {
-
-            // Ok, we have a single new entry that has been selected. Now decide what to do with it:
-            final BibtexEntry toShow = (BibtexEntry) newSelected;
-            final int mode = panel.getMode(); // What is the panel already showing?
-            if ((mode == BasePanel.WILL_SHOW_EDITOR) || (mode == BasePanel.SHOWING_EDITOR)) {
-                // An entry is currently being edited.
-                EntryEditor oldEditor = panel.getCurrentEditor();
-                String visName = null;
-                if (oldEditor != null) {
-                    visName = oldEditor.getVisiblePanelName();
-                }
-                // Get an old or new editor for the entry to edit:
-                EntryEditor newEditor = panel.getEntryEditor(toShow);
-
-                if ((oldEditor != null))// && (oldEditor != newEditor))
-                    oldEditor.setMovingToDifferentEntry();
-
-                // Show the new editor unless it was already visible:
-                if ((newEditor != oldEditor) || (mode != BasePanel.SHOWING_EDITOR)) {
-                    
-                    if (visName != null)
-                        newEditor.setVisiblePanel(visName);
-                    panel.showEntryEditor(newEditor);
-                    SwingUtilities.invokeLater(new Runnable() {
-                        public void run() {
-                            table.ensureVisible(table.getSelectedRow());
-                        }
-                    });
-                }
-
-            } else {
-                // Either nothing or a preview was shown. Update the preview.
-                if (previewActive) {
-                    updatePreview(toShow, false);
-                }
-
-            }
-        }
-
-    }
-
-    private void updatePreview(final BibtexEntry toShow, final boolean changedPreview) {
-        updatePreview(toShow, changedPreview, 0);
-    }
-
-    private void updatePreview(final BibtexEntry toShow, final boolean changedPreview, int repeats) {
-        if (workingOnPreview) {
-            if (repeats > 0)
-                return; // We've already waited once. Give up on this selection.
-            Timer t = new Timer(50, new ActionListener() {
-                public void actionPerformed(ActionEvent actionEvent) {
-                    updatePreview(toShow, changedPreview, 1);
-                }
-            });
-            t.setRepeats(false);
-            t.start();
-            return;
-        }
-        EventList<BibtexEntry> list = table.getSelected();
-        // Check if the entry to preview is still selected:
-        if ((list.size() != 1) || (list.get(0) != toShow)) {
-            return;
-        }
-        final int mode = panel.getMode();
-        workingOnPreview = true;
-        final Runnable update = new Runnable() {
-            public void run() {
-                // If nothing was already shown, set the preview and move the separator:
-                if (changedPreview || (mode == BasePanel.SHOWING_NOTHING)) {
-                    panel.showPreview(preview);
-                    panel.adjustSplitter();
-                }
-                workingOnPreview = false;
-            }
-        };
-        final Runnable worker = new Runnable() {
-            public void run() {
-                preview.setEntry(toShow);
-                SwingUtilities.invokeLater(update);
-            }
-        };
-        (new Thread(worker)).start();
-    }
-
-    public void editSignalled() {
-        if (table.getSelected().size() == 1) {
-            editSignalled(table.getSelected().get(0));
-        }
-    }
-
-    public void editSignalled(BibtexEntry entry) {
-        final int mode = panel.getMode();
-        EntryEditor editor = panel.getEntryEditor(entry);
-        if (mode != BasePanel.SHOWING_EDITOR) {
-            panel.showEntryEditor(editor);
-            panel.adjustSplitter();
-        }
-        new FocusRequester(editor);
-    }
-
-    public void mouseReleased(MouseEvent e) {
-        // First find the column and row on which the user has clicked.
-        final int col = table.columnAtPoint(e.getPoint()),
-                  row = table.rowAtPoint(e.getPoint());
-
-        // Check if the user has clicked on an icon cell to open url or pdf.
-        final String[] iconType = table.getIconTypeForColumn(col);
-        
-        // Check if the user has right-clicked. If so, open the right-click menu.
-        if (e.isPopupTrigger() || (e.getButton() == MouseEvent.BUTTON3)) {
-            if (iconType == null)
-                processPopupTrigger(e, row);
-            else
-                showIconRightClickMenu(e, row, iconType);
-        }
-    }
-    
-    public void mousePressed(MouseEvent e) {
-    	// all handling is done in "mouseReleased"
-    }
-
-    public void mouseClicked(MouseEvent e) {
-         
-        // First find the column on which the user has clicked.
-        final int col = table.columnAtPoint(e.getPoint()),
-                row = table.rowAtPoint(e.getPoint());
-
-        // A double click on an entry should open the entry's editor.
-        if (e.getClickCount() == 2) {
-
-            BibtexEntry toShow = tableRows.get(row);
-            editSignalled(toShow);
-        }
-
-        // Check if the user has clicked on an icon cell to open url or pdf.
-        final String[] iconType = table.getIconTypeForColumn(col);
-
-
-         // Workaround for Windows. Right-click is not popup trigger on mousePressed, but
-         // on mouseReleased. Therefore we need to avoid taking action at this point, because
-         // action will be taken when the button is released:
-        if (Globals.ON_WIN && (iconType != null) && (e.getButton() != MouseEvent.BUTTON1))
-            return;
-
-        if (iconType != null) {
-        	// left click on icon field
-        	SpecialField field = SpecialFieldsUtils.getSpecialFieldInstanceFromFieldName(iconType[0]);
-        	if ((e.getClickCount() == 1) && (field != null)) {
-        		// special field found
-        		if (field.isSingleValueField()) {
-        			// directly execute toggle action instead of showing a menu with one action
-        			field.getValues().get(0).getAction(panel.frame()).action();
-        		} else {
-	        		JPopupMenu menu = new JPopupMenu();
-	                for (SpecialFieldValue val: field.getValues()) {
-	                	menu.add(val.getMenuAction(panel.frame()));
-	                }
-	        		menu.show(table, e.getX(), e.getY());
-        		}
-        		return;
-        	}
-
-            Object value = table.getValueAt(row, col);
-            if (value == null) return; // No icon here, so we do nothing.
-
-            final BibtexEntry entry = tableRows.get(row);
-
-            // Get the icon type. Corresponds to the field name.
-            int hasField = -1;
-            for (int i = iconType.length - 1; i >= 0; i--)
-                if (entry.getField(iconType[i]) != null)
-                    hasField = i;
-            if (hasField == -1)
-                return;
-            final String fieldName = iconType[hasField];
-
-            // Open it now. We do this in a thread, so the program won't freeze during the wait.
-            (new Thread() {
-                public void run() {
-                    panel.output(Globals.lang("External viewer called") + ".");
-
-                    Object link = entry.getField(fieldName);
-                    if (link == null) {
-                        Globals.logger("Error: no link to " + fieldName + ".");
-                        return; // There is an icon, but the field is not set.
-                    }
-
-                    {
-                        // See if this is a simple file link field, or if it is a file-list
-                        // field that can specify a list of links:
-                        if (fieldName.equals(GUIGlobals.FILE_FIELD)) {
-
-                            // We use a FileListTableModel to parse the field content:
-                            FileListTableModel fileList = new FileListTableModel();
-                            fileList.setContent((String)link);
-                            // If there are one or more links, open the first one:
-                            if (fileList.getRowCount() > 0) {
-                                FileListEntry flEntry = fileList.getEntry(0);
-                                ExternalFileMenuItem item = new ExternalFileMenuItem
-                                        (panel.frame(), entry, "",
-                                        flEntry.getLink(), flEntry.getType().getIcon(),
-                                        panel.metaData(), flEntry.getType());
-                                boolean success = item.openLink();
-                                if (!success) {
-                                    panel.output(Globals.lang("Unable to open link."));
-                                }
-                            }
-                        } else {
-                            try {
-                                Util.openExternalViewer(panel.metaData(), (String)link, fieldName);
-                            } catch (IOException ex) {
-                                panel.output(Globals.lang("Unable to open link."));
-                            }
-
-                            /*ExternalFileType type = Globals.prefs.getExternalFileTypeByMimeType("text/html");
-                            ExternalFileMenuItem item = new ExternalFileMenuItem
-                                    (panel.frame(), entry, "",
-                                    (String)link, type.getIcon(),
-                                    panel.metaData(), type);
-                            boolean success = item.openLink();
-                            if (!success) {
-                                panel.output(Globals.lang("Unable to open link."));
-                            } */
-                            //Util.openExternalViewer(panel.metaData(), (String)link, fieldName);
-                        }
-
-                    }
-                    //catch (IOException ex) {
-                    //    panel.output(Globals.lang("Error") + ": " + ex.getMessage());
-                    //}
-                }
-
-            }).start();
-        }
-    }
-
-    /**
-     * Process general right-click events on the table. Show the table context menu at
-     * the position where the user right-clicked.
-     * @param e The mouse event defining the popup trigger.
-     * @param row The row where the event occured.
-     */
-    protected void processPopupTrigger(MouseEvent e, int row) {
-         int selRow = table.getSelectedRow();
-         if (selRow == -1 ||// (getSelectedRowCount() == 0))
-                 !table.isRowSelected(table.rowAtPoint(e.getPoint()))) {
-             table.setRowSelectionInterval(row, row);
-             //panel.updateViewToSelected();
-         }
-         RightClickMenu rightClickMenu = new RightClickMenu(panel, panel.metaData());
-         rightClickMenu.show(table, e.getX(), e.getY());
-     }
-
-    /**
-     * Process popup trigger events occurring on an icon cell in the table. Show
-     * a menu where the user can choose which external resource to open for the
-     * entry. If no relevant external resources exist, let the normal popup trigger
-     * handler do its thing instead.
-     * @param e The mouse event defining this popup trigger.
-     * @param row The row where the event occurred.
-     * @param iconType A string array containing the resource fields associated with
-     *  this table cell.
-     */
-    private void showIconRightClickMenu(MouseEvent e, int row, String[] iconType) {
-        BibtexEntry entry = tableRows.get(row);
-        JPopupMenu menu = new JPopupMenu();
-        boolean showDefaultPopup = true;
-
-        // See if this is a simple file link field, or if it is a file-list
-        // field that can specify a list of links:
-        if (iconType[0].equals(GUIGlobals.FILE_FIELD)) {
-            // We use a FileListTableModel to parse the field content:
-            Object o = entry.getField(iconType[0]);
-            FileListTableModel fileList = new FileListTableModel();
-            fileList.setContent((String)o);
-            // If there are one or more links, open the first one:
-            for (int i=0; i<fileList.getRowCount(); i++) {
-                FileListEntry flEntry = fileList.getEntry(i);
-                String description = flEntry.getDescription();
-                if ((description == null) || (description.trim().length() == 0))
-                    description = flEntry.getLink();
-                menu.add(new ExternalFileMenuItem(panel.frame(), entry, description,
-                        flEntry.getLink(), flEntry.getType().getIcon(), panel.metaData(),
-                        flEntry.getType()));
-                showDefaultPopup = false;
-            }
-        } else {
-        	SpecialField field = SpecialFieldsUtils.getSpecialFieldInstanceFromFieldName(iconType[0]);
-        	if (field != null) {
-//                for (SpecialFieldValue val: field.getValues()) {
-//                	menu.add(val.getMenuAction(panel.frame()));
-//                }
-        		// full pop should be shown as left click already shows short popup
-                showDefaultPopup = true;
-        	} else {
-	            for (int i=0; i<iconType.length; i++) {
-	                Object o = entry.getField(iconType[i]);
-	                if (o != null) {
-	                    menu.add(new ExternalFileMenuItem(panel.frame(), entry, (String)o, (String)o,
-	                            GUIGlobals.getTableIcon(iconType[i]).getIcon(),
-	                            panel.metaData(), iconType[i]));
-	                    showDefaultPopup = false;
-	                }
-	            }
-            }
-        }
-        if (showDefaultPopup) {
-            processPopupTrigger(e, row);
-        } else {
-        	menu.show(table, e.getX(), e.getY());
-        }
-    }
-
-    public void entryEditorClosing(EntryEditor editor) {
-        preview.setEntry(editor.getEntry());
-        if (previewActive)
-            panel.showPreview(preview);
-        else
-            panel.hideBottomComponent();
-        panel.adjustSplitter();
-        new FocusRequester(table);
-    }
-
-
-
-
-    public void mouseEntered(MouseEvent e) {
-
-    }
-
-    public void mouseExited(MouseEvent e) {
-
-    }
-
-    public void setPreviewActive(boolean enabled) {
-        previewActive = enabled;
-        if (!previewActive) {
-            panel.hideBottomComponent();
-        } else {
-            if (table.getSelected().size() > 0 ) {
-                updatePreview(table.getSelected().get(0), false);
-            }
-        }
-    }
-
-    public void switchPreview() {
-        if (activePreview < previewPanel.length - 1)
-            activePreview++;
-        else
-            activePreview = 0;
-        Globals.prefs.putInt("activePreview", activePreview);
-        if (previewActive) {
-            this.preview = previewPanel[activePreview];
-
-            if (table.getSelected().size() > 0) {
-                updatePreview(table.getSelected().get(0), true);
-            }
-        }
-    }
-
-    /**
-     * Receive key event on the main table. If the key is a letter or a digit,
-     * we should select the first entry in the table which starts with the given
-     * letter in the column by which the table is sorted.
-     * @param e The KeyEvent
-     */
-    public void keyTyped(KeyEvent e) {
-        if ((!e.isActionKey()) && Character.isLetterOrDigit(e.getKeyChar())
-	    //&& !e.isControlDown() && !e.isAltDown() && !e.isMetaDown()) {
-	    && (e.getModifiers() == 0)) {
-            long time = System.currentTimeMillis();
-            if (time - lastPressedTime > QUICK_JUMP_TIMEOUT)
-                lastPressedCount = 0; // Reset last pressed character
-            // Update timestamp:
-            lastPressedTime = time;
-            // Add the new char to the search array:
-            int c = e.getKeyChar();
-            if (lastPressedCount < lastPressed.length)
-                lastPressed[lastPressedCount++] = c;
-
-            int sortingColumn = table.getSortingColumn(0);
-            if (sortingColumn == -1)
-                return; // No sorting? TODO: look up by author, etc.?
-            // TODO: the following lookup should be done by a faster algorithm,
-            // such as binary search. But the table may not be sorted properly,
-            // due to marked entries, search etc., which rules out the binary search.
-            int startRow = 0;
-            /*if ((c == lastPressed) && (lastQuickJumpRow >= 0)) {
-                if (lastQuickJumpRow < table.getRowCount()-1)
-                    startRow = lastQuickJumpRow+1;
-            }*/
-
-            boolean done = false;
-            while (!done) {
-                for (int i=startRow; i<table.getRowCount(); i++) {
-                    Object o = table.getValueAt(i, sortingColumn);
-                    if (o == null)
-                        continue;
-                    String s = o.toString().toLowerCase();
-                    if (s.length() >= lastPressedCount)
-                        for (int j=0; j<lastPressedCount; j++) {
-                            if (s.charAt(j) != lastPressed[j])
-                                break; // Escape the loop immediately when we find a mismatch
-                            else if (j == lastPressedCount-1) {
-                                // We found a match:
-                                table.setRowSelectionInterval(i, i);
-                                table.ensureVisible(i);
-                                return;
-                            }
-                        }
-                    //if ((s.length() >= 1) && (s.charAt(0) == c)) {
-                    //}
-                }
-                // Finished, no result. If we didn't start at the beginning of
-                // the table, try that. Otherwise, exit the while loop.
-                if (startRow > 0)
-                    startRow = 0;
-                else
-                    done = true;
-
-            }
-            
-        } else if (e.getKeyChar() == KeyEvent.VK_ESCAPE) {
-            lastPressedCount = 0;
-
-        }
-    }
-
-    public void keyReleased(KeyEvent e) {
-    }
-
-    public void keyPressed(KeyEvent e) {
-    }
-
-    public void focusGained(FocusEvent e) {
-
-    }
-
-    public void focusLost(FocusEvent e) {
-        lastPressedCount = 0; // Reset quick jump when focus is lost.
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.io.IOException;
+
+import javax.swing.JPopupMenu;
+import javax.swing.SwingUtilities;
+import javax.swing.Timer;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.EntryEditor;
+import net.sf.jabref.FocusRequester;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.PreviewPanel;
+import net.sf.jabref.RightClickMenu;
+import net.sf.jabref.Util;
+import net.sf.jabref.external.ExternalFileMenuItem;
+import ca.odell.glazedlists.EventList;
+import ca.odell.glazedlists.event.ListEvent;
+import ca.odell.glazedlists.event.ListEventListener;
+import net.sf.jabref.specialfields.SpecialField;
+import net.sf.jabref.specialfields.SpecialFieldValue;
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+
+/**
+ * List event, mouse, key and focus listener for the main table that makes up the
+ * most part of the BasePanel for a single bib database.
+ */
+public class MainTableSelectionListener implements ListEventListener<BibtexEntry>, MouseListener,
+        KeyListener, FocusListener {
+
+    PreviewPanel[] previewPanel = null;
+    int activePreview = Globals.prefs.getInt("activePreview");
+    PreviewPanel preview;
+    MainTable table;
+    BasePanel panel;
+    EventList<BibtexEntry> tableRows;
+    private boolean previewActive = Globals.prefs.getBoolean("previewEnabled");
+    private boolean workingOnPreview = false;
+
+    private boolean enabled = true;
+
+    // Register the last character pressed to quick jump in the table. Together
+    // with storing the last row number jumped to, this is used to let multiple
+    // key strokes cycle between all entries starting with the same letter:
+    private int[] lastPressed = new int[20];
+    private int lastPressedCount = 0;
+    private long lastPressedTime = 0;
+    private long QUICK_JUMP_TIMEOUT = 2000;
+
+    //private int lastCharPressed = -1;
+
+    public MainTableSelectionListener(BasePanel panel, MainTable table) {
+        this.table = table;
+        this.panel = panel;
+        this.tableRows = table.getTableRows();
+        instantiatePreviews();
+        this.preview = previewPanel[activePreview];
+    }
+
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    private void instantiatePreviews() {
+		previewPanel = new PreviewPanel[] {
+			new PreviewPanel(panel.database(), null, panel, panel.metaData(), Globals.prefs
+				.get("preview0"), true),
+			new PreviewPanel(panel.database(), null, panel, panel.metaData(), Globals.prefs
+				.get("preview1"), true) };
+		
+		panel.frame().getSearchManager().addSearchListener(previewPanel[0]);
+		panel.frame().getSearchManager().addSearchListener(previewPanel[1]);
+	}
+
+    public void updatePreviews() {
+        try {
+            previewPanel[0].readLayout(Globals.prefs.get("preview0"));
+            previewPanel[1].readLayout(Globals.prefs.get("preview1"));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void listChanged(ListEvent<BibtexEntry> e) {
+        if (!enabled) {
+            return;
+        }
+        EventList<BibtexEntry> selected = e.getSourceList();
+        Object newSelected = null;
+        while (e.next()) {
+            if (e.getType() == ListEvent.INSERT) {
+                if (newSelected != null)
+                    return; // More than one new selected. Do nothing.
+                else {
+                    if (e.getIndex() < selected.size())
+                        newSelected = selected.get(e.getIndex());
+                }
+
+            }
+        }
+
+        if (newSelected != null) {
+
+            // Ok, we have a single new entry that has been selected. Now decide what to do with it:
+            final BibtexEntry toShow = (BibtexEntry) newSelected;
+            final int mode = panel.getMode(); // What is the panel already showing?
+            if ((mode == BasePanel.WILL_SHOW_EDITOR) || (mode == BasePanel.SHOWING_EDITOR)) {
+                // An entry is currently being edited.
+                EntryEditor oldEditor = panel.getCurrentEditor();
+                String visName = null;
+                if (oldEditor != null) {
+                    visName = oldEditor.getVisiblePanelName();
+                }
+                // Get an old or new editor for the entry to edit:
+                EntryEditor newEditor = panel.getEntryEditor(toShow);
+
+                if ((oldEditor != null))// && (oldEditor != newEditor))
+                    oldEditor.setMovingToDifferentEntry();
+
+                // Show the new editor unless it was already visible:
+                if ((newEditor != oldEditor) || (mode != BasePanel.SHOWING_EDITOR)) {
+                    
+                    if (visName != null)
+                        newEditor.setVisiblePanel(visName);
+                    panel.showEntryEditor(newEditor);
+                    SwingUtilities.invokeLater(new Runnable() {
+                        public void run() {
+                            table.ensureVisible(table.getSelectedRow());
+                        }
+                    });
+                }
+
+            } else {
+                // Either nothing or a preview was shown. Update the preview.
+                if (previewActive) {
+                    updatePreview(toShow, false);
+                }
+
+            }
+        }
+
+    }
+
+    private void updatePreview(final BibtexEntry toShow, final boolean changedPreview) {
+        updatePreview(toShow, changedPreview, 0);
+    }
+
+    private void updatePreview(final BibtexEntry toShow, final boolean changedPreview, int repeats) {
+        if (workingOnPreview) {
+            if (repeats > 0)
+                return; // We've already waited once. Give up on this selection.
+            Timer t = new Timer(50, new ActionListener() {
+                public void actionPerformed(ActionEvent actionEvent) {
+                    updatePreview(toShow, changedPreview, 1);
+                }
+            });
+            t.setRepeats(false);
+            t.start();
+            return;
+        }
+        EventList<BibtexEntry> list = table.getSelected();
+        // Check if the entry to preview is still selected:
+        if ((list.size() != 1) || (list.get(0) != toShow)) {
+            return;
+        }
+        final int mode = panel.getMode();
+        workingOnPreview = true;
+        final Runnable update = new Runnable() {
+            public void run() {
+                // If nothing was already shown, set the preview and move the separator:
+                if (changedPreview || (mode == BasePanel.SHOWING_NOTHING)) {
+                    panel.showPreview(preview);
+                    panel.adjustSplitter();
+                }
+                workingOnPreview = false;
+            }
+        };
+        final Runnable worker = new Runnable() {
+            public void run() {
+                preview.setEntry(toShow);
+                SwingUtilities.invokeLater(update);
+            }
+        };
+        (new Thread(worker)).start();
+    }
+
+    public void editSignalled() {
+        if (table.getSelected().size() == 1) {
+            editSignalled(table.getSelected().get(0));
+        }
+    }
+
+    public void editSignalled(BibtexEntry entry) {
+        final int mode = panel.getMode();
+        EntryEditor editor = panel.getEntryEditor(entry);
+        if (mode != BasePanel.SHOWING_EDITOR) {
+            panel.showEntryEditor(editor);
+            panel.adjustSplitter();
+        }
+        new FocusRequester(editor);
+    }
+
+    public void mouseReleased(MouseEvent e) {
+        // First find the column and row on which the user has clicked.
+        final int col = table.columnAtPoint(e.getPoint()),
+                  row = table.rowAtPoint(e.getPoint());
+
+        // Check if the user has clicked on an icon cell to open url or pdf.
+        final String[] iconType = table.getIconTypeForColumn(col);
+        
+        // Check if the user has right-clicked. If so, open the right-click menu.
+        if (e.isPopupTrigger() || (e.getButton() == MouseEvent.BUTTON3)) {
+            if (iconType == null)
+                processPopupTrigger(e, row);
+            else
+                showIconRightClickMenu(e, row, iconType);
+        }
+    }
+    
+    public void mousePressed(MouseEvent e) {
+    	// all handling is done in "mouseReleased"
+    }
+
+    public void mouseClicked(MouseEvent e) {
+         
+        // First find the column on which the user has clicked.
+        final int col = table.columnAtPoint(e.getPoint()),
+                row = table.rowAtPoint(e.getPoint());
+
+        // A double click on an entry should open the entry's editor.
+        if (e.getClickCount() == 2) {
+
+            BibtexEntry toShow = tableRows.get(row);
+            editSignalled(toShow);
+        }
+
+        // Check if the user has clicked on an icon cell to open url or pdf.
+        final String[] iconType = table.getIconTypeForColumn(col);
+
+
+         // Workaround for Windows. Right-click is not popup trigger on mousePressed, but
+         // on mouseReleased. Therefore we need to avoid taking action at this point, because
+         // action will be taken when the button is released:
+        if (Globals.ON_WIN && (iconType != null) && (e.getButton() != MouseEvent.BUTTON1))
+            return;
+
+        if (iconType != null) {
+        	// left click on icon field
+        	SpecialField field = SpecialFieldsUtils.getSpecialFieldInstanceFromFieldName(iconType[0]);
+        	if ((e.getClickCount() == 1) && (field != null)) {
+        		// special field found
+        		if (field.isSingleValueField()) {
+        			// directly execute toggle action instead of showing a menu with one action
+        			field.getValues().get(0).getAction(panel.frame()).action();
+        		} else {
+	        		JPopupMenu menu = new JPopupMenu();
+	                for (SpecialFieldValue val: field.getValues()) {
+	                	menu.add(val.getMenuAction(panel.frame()));
+	                }
+	        		menu.show(table, e.getX(), e.getY());
+        		}
+        		return;
+        	}
+
+            Object value = table.getValueAt(row, col);
+            if (value == null) return; // No icon here, so we do nothing.
+
+            final BibtexEntry entry = tableRows.get(row);
+
+            // Get the icon type. Corresponds to the field name.
+            int hasField = -1;
+            for (int i = iconType.length - 1; i >= 0; i--)
+                if (entry.getField(iconType[i]) != null)
+                    hasField = i;
+            if (hasField == -1)
+                return;
+            final String fieldName = iconType[hasField];
+
+            // Open it now. We do this in a thread, so the program won't freeze during the wait.
+            (new Thread() {
+                public void run() {
+                    panel.output(Globals.lang("External viewer called") + ".");
+
+                    Object link = entry.getField(fieldName);
+                    if (link == null) {
+                        Globals.logger("Error: no link to " + fieldName + ".");
+                        return; // There is an icon, but the field is not set.
+                    }
+
+                    {
+                        // See if this is a simple file link field, or if it is a file-list
+                        // field that can specify a list of links:
+                        if (fieldName.equals(GUIGlobals.FILE_FIELD)) {
+
+                            // We use a FileListTableModel to parse the field content:
+                            FileListTableModel fileList = new FileListTableModel();
+                            fileList.setContent((String)link);
+                            // If there are one or more links, open the first one:
+                            if (fileList.getRowCount() > 0) {
+                                FileListEntry flEntry = fileList.getEntry(0);
+                                ExternalFileMenuItem item = new ExternalFileMenuItem
+                                        (panel.frame(), entry, "",
+                                        flEntry.getLink(), flEntry.getType().getIcon(),
+                                        panel.metaData(), flEntry.getType());
+                                boolean success = item.openLink();
+                                if (!success) {
+                                    panel.output(Globals.lang("Unable to open link."));
+                                }
+                            }
+                        } else {
+                            try {
+                                Util.openExternalViewer(panel.metaData(), (String)link, fieldName);
+                            } catch (IOException ex) {
+                                panel.output(Globals.lang("Unable to open link."));
+                            }
+
+                            /*ExternalFileType type = Globals.prefs.getExternalFileTypeByMimeType("text/html");
+                            ExternalFileMenuItem item = new ExternalFileMenuItem
+                                    (panel.frame(), entry, "",
+                                    (String)link, type.getIcon(),
+                                    panel.metaData(), type);
+                            boolean success = item.openLink();
+                            if (!success) {
+                                panel.output(Globals.lang("Unable to open link."));
+                            } */
+                            //Util.openExternalViewer(panel.metaData(), (String)link, fieldName);
+                        }
+
+                    }
+                    //catch (IOException ex) {
+                    //    panel.output(Globals.lang("Error") + ": " + ex.getMessage());
+                    //}
+                }
+
+            }).start();
+        }
+    }
+
+    /**
+     * Process general right-click events on the table. Show the table context menu at
+     * the position where the user right-clicked.
+     * @param e The mouse event defining the popup trigger.
+     * @param row The row where the event occured.
+     */
+    protected void processPopupTrigger(MouseEvent e, int row) {
+         int selRow = table.getSelectedRow();
+         if (selRow == -1 ||// (getSelectedRowCount() == 0))
+                 !table.isRowSelected(table.rowAtPoint(e.getPoint()))) {
+             table.setRowSelectionInterval(row, row);
+             //panel.updateViewToSelected();
+         }
+         RightClickMenu rightClickMenu = new RightClickMenu(panel, panel.metaData());
+         rightClickMenu.show(table, e.getX(), e.getY());
+     }
+
+    /**
+     * Process popup trigger events occurring on an icon cell in the table. Show
+     * a menu where the user can choose which external resource to open for the
+     * entry. If no relevant external resources exist, let the normal popup trigger
+     * handler do its thing instead.
+     * @param e The mouse event defining this popup trigger.
+     * @param row The row where the event occurred.
+     * @param iconType A string array containing the resource fields associated with
+     *  this table cell.
+     */
+    private void showIconRightClickMenu(MouseEvent e, int row, String[] iconType) {
+        BibtexEntry entry = tableRows.get(row);
+        JPopupMenu menu = new JPopupMenu();
+        boolean showDefaultPopup = true;
+
+        // See if this is a simple file link field, or if it is a file-list
+        // field that can specify a list of links:
+        if (iconType[0].equals(GUIGlobals.FILE_FIELD)) {
+            // We use a FileListTableModel to parse the field content:
+            Object o = entry.getField(iconType[0]);
+            FileListTableModel fileList = new FileListTableModel();
+            fileList.setContent((String)o);
+            // If there are one or more links, open the first one:
+            for (int i=0; i<fileList.getRowCount(); i++) {
+                FileListEntry flEntry = fileList.getEntry(i);
+                String description = flEntry.getDescription();
+                if ((description == null) || (description.trim().length() == 0))
+                    description = flEntry.getLink();
+                menu.add(new ExternalFileMenuItem(panel.frame(), entry, description,
+                        flEntry.getLink(), flEntry.getType().getIcon(), panel.metaData(),
+                        flEntry.getType()));
+                showDefaultPopup = false;
+            }
+        } else {
+        	SpecialField field = SpecialFieldsUtils.getSpecialFieldInstanceFromFieldName(iconType[0]);
+        	if (field != null) {
+//                for (SpecialFieldValue val: field.getValues()) {
+//                	menu.add(val.getMenuAction(panel.frame()));
+//                }
+        		// full pop should be shown as left click already shows short popup
+                showDefaultPopup = true;
+        	} else {
+	            for (int i=0; i<iconType.length; i++) {
+	                Object o = entry.getField(iconType[i]);
+	                if (o != null) {
+	                    menu.add(new ExternalFileMenuItem(panel.frame(), entry, (String)o, (String)o,
+	                            GUIGlobals.getTableIcon(iconType[i]).getIcon(),
+	                            panel.metaData(), iconType[i]));
+	                    showDefaultPopup = false;
+	                }
+	            }
+            }
+        }
+        if (showDefaultPopup) {
+            processPopupTrigger(e, row);
+        } else {
+        	menu.show(table, e.getX(), e.getY());
+        }
+    }
+
+    public void entryEditorClosing(EntryEditor editor) {
+        preview.setEntry(editor.getEntry());
+        if (previewActive)
+            panel.showPreview(preview);
+        else
+            panel.hideBottomComponent();
+        panel.adjustSplitter();
+        new FocusRequester(table);
+    }
+
+
+
+
+    public void mouseEntered(MouseEvent e) {
+
+    }
+
+    public void mouseExited(MouseEvent e) {
+
+    }
+
+    public void setPreviewActive(boolean enabled) {
+        previewActive = enabled;
+        if (!previewActive) {
+            panel.hideBottomComponent();
+        } else {
+            if (table.getSelected().size() > 0 ) {
+                updatePreview(table.getSelected().get(0), false);
+            }
+        }
+    }
+
+    public void switchPreview() {
+        if (activePreview < previewPanel.length - 1)
+            activePreview++;
+        else
+            activePreview = 0;
+        Globals.prefs.putInt("activePreview", activePreview);
+        if (previewActive) {
+            this.preview = previewPanel[activePreview];
+
+            if (table.getSelected().size() > 0) {
+                updatePreview(table.getSelected().get(0), true);
+            }
+        }
+    }
+
+    /**
+     * Receive key event on the main table. If the key is a letter or a digit,
+     * we should select the first entry in the table which starts with the given
+     * letter in the column by which the table is sorted.
+     * @param e The KeyEvent
+     */
+    public void keyTyped(KeyEvent e) {
+        if ((!e.isActionKey()) && Character.isLetterOrDigit(e.getKeyChar())
+	    //&& !e.isControlDown() && !e.isAltDown() && !e.isMetaDown()) {
+	    && (e.getModifiers() == 0)) {
+            long time = System.currentTimeMillis();
+            if (time - lastPressedTime > QUICK_JUMP_TIMEOUT)
+                lastPressedCount = 0; // Reset last pressed character
+            // Update timestamp:
+            lastPressedTime = time;
+            // Add the new char to the search array:
+            int c = e.getKeyChar();
+            if (lastPressedCount < lastPressed.length)
+                lastPressed[lastPressedCount++] = c;
+
+            int sortingColumn = table.getSortingColumn(0);
+            if (sortingColumn == -1)
+                return; // No sorting? TODO: look up by author, etc.?
+            // TODO: the following lookup should be done by a faster algorithm,
+            // such as binary search. But the table may not be sorted properly,
+            // due to marked entries, search etc., which rules out the binary search.
+            int startRow = 0;
+            /*if ((c == lastPressed) && (lastQuickJumpRow >= 0)) {
+                if (lastQuickJumpRow < table.getRowCount()-1)
+                    startRow = lastQuickJumpRow+1;
+            }*/
+
+            boolean done = false;
+            while (!done) {
+                for (int i=startRow; i<table.getRowCount(); i++) {
+                    Object o = table.getValueAt(i, sortingColumn);
+                    if (o == null)
+                        continue;
+                    String s = o.toString().toLowerCase();
+                    if (s.length() >= lastPressedCount)
+                        for (int j=0; j<lastPressedCount; j++) {
+                            if (s.charAt(j) != lastPressed[j])
+                                break; // Escape the loop immediately when we find a mismatch
+                            else if (j == lastPressedCount-1) {
+                                // We found a match:
+                                table.setRowSelectionInterval(i, i);
+                                table.ensureVisible(i);
+                                return;
+                            }
+                        }
+                    //if ((s.length() >= 1) && (s.charAt(0) == c)) {
+                    //}
+                }
+                // Finished, no result. If we didn't start at the beginning of
+                // the table, try that. Otherwise, exit the while loop.
+                if (startRow > 0)
+                    startRow = 0;
+                else
+                    done = true;
+
+            }
+            
+        } else if (e.getKeyChar() == KeyEvent.VK_ESCAPE) {
+            lastPressedCount = 0;
+
+        }
+    }
+
+    public void keyReleased(KeyEvent e) {
+    }
+
+    public void keyPressed(KeyEvent e) {
+    }
+
+    public void focusGained(FocusEvent e) {
+
+    }
+
+    public void focusLost(FocusEvent e) {
+        lastPressedCount = 0; // Reset quick jump when focus is lost.
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/PersistenceTableColumnListener.java b/src/java/net/sf/jabref/gui/PersistenceTableColumnListener.java
index b36fdec..dc829b3 100644
--- a/src/java/net/sf/jabref/gui/PersistenceTableColumnListener.java
+++ b/src/java/net/sf/jabref/gui/PersistenceTableColumnListener.java
@@ -1,143 +1,143 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.util.Vector;
-
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.TableColumnModelEvent;
-import javax.swing.event.TableColumnModelListener;
-
-import net.sf.jabref.Globals;
-
-/**
- * Listens for TableColumnModelEvents to keep track of changes made to the
- * MainTable columns, like reordering or resizing.
- * 
- * Changes to columns without a name and the "#" column are not saved. To have
- * consistent behavior (e.g. as in TableColumnsTab).
- * 
- * @author Fabian Bieker
- * @author Daniel Waeber
- * @since 12/2008
- * 
- */
-public class PersistenceTableColumnListener implements TableColumnModelListener {
-
-	public static final String ACTIVATE_PREF_KEY = 
-	    "ActivatePersistenceTableColumnListener";
-
-	public static final boolean DEFAULT_ENABLED = true;
-
-	private static final String simpleClassName = 
-	    PersistenceTableColumnListener.class.getSimpleName();
-
-	// needed to get column names / indices mapped from view to model 
-	// and to access the table model 
-	private final MainTable mainTable;
-
-	/**
-	 * @param mainTable
-	 */
-	public PersistenceTableColumnListener(final MainTable mainTable) {
-		this.mainTable = mainTable;
-	}
-
-	/**
-	 * update columns names and their width, store it in the global prefs.
-	 */
-	private void updateColumnPrefs() {
-        final int columnCount = mainTable.getColumnCount();
-		Vector<String> storedColumns = new Vector<String>(columnCount - 1);
-		Vector<String> columnsWidths = new Vector<String>(columnCount - 1);
-		int ncWidth = -1;
-
-		for (int i = 0; i < columnCount; i++) {
-			final String name = mainTable.getColumnName(i);
-            if (name == null || name.equals("")) {
-				continue;
-			} else if (name.equals("#")) { // TODO: get "#" from prefs?
-				ncWidth = mainTable.getColumnModel().getColumn(i).getWidth();
-
-			} else {
-				storedColumns.add(name.toLowerCase());
-				columnsWidths.add(String.valueOf(mainTable.getColumnModel().getColumn(
-						i).getWidth()));
-
-			}
-		}
-
-		// Finally, we store the new preferences.
-		Globals.prefs.putStringArray("columnNames",
-				storedColumns.toArray(new String[0]));
-		Globals.prefs.putStringArray("columnWidths",
-				columnsWidths.toArray(new String[0]));
-
-		// width of the number ("#") column
-		Globals.prefs.putInt("numberColWidth", ncWidth);
-	}
-
-	/**
-	 * @see javax.swing.event.TableColumnModelListener#columnAdded(javax.swing.event.TableColumnModelEvent)
-	 */
-	public void columnAdded(TableColumnModelEvent e) {
-		assert e != null : simpleClassName + " received null event";
-
-		updateColumnPrefs();
-	}
-
-	/**
-	 * @see javax.swing.event.TableColumnModelListener#columnMarginChanged(javax.swing.event.ChangeEvent)
-	 */
-	public void columnMarginChanged(ChangeEvent e) {
-		assert e != null : simpleClassName + " received null event";
-		
-		updateColumnPrefs();
-	}
-
-	/**
-	 * @see javax.swing.event.TableColumnModelListener#columnMoved(javax.swing.event.TableColumnModelEvent)
-	 */
-	public void columnMoved(TableColumnModelEvent e) {
-		assert e != null : simpleClassName + " received null event";
-
-		// not really moved, ignore ...
-		if (e.getFromIndex() == e.getToIndex())
-			return;
-
-		updateColumnPrefs();
-
-	}
-
-	/**
-	 * @see javax.swing.event.TableColumnModelListener#columnRemoved(javax.swing.event.TableColumnModelEvent)
-	 */
-	public void columnRemoved(TableColumnModelEvent e) {
-		assert e != null : simpleClassName + " received null event";
-
-		updateColumnPrefs();
-
-	}
-
-	/**
-	 * @see javax.swing.event.TableColumnModelListener#columnSelectionChanged(javax.swing.event.ListSelectionEvent)
-	 */
-	public void columnSelectionChanged(ListSelectionEvent e) {
-		// ignore
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.util.Vector;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.TableColumnModelEvent;
+import javax.swing.event.TableColumnModelListener;
+
+import net.sf.jabref.Globals;
+
+/**
+ * Listens for TableColumnModelEvents to keep track of changes made to the
+ * MainTable columns, like reordering or resizing.
+ * 
+ * Changes to columns without a name and the "#" column are not saved. To have
+ * consistent behavior (e.g. as in TableColumnsTab).
+ * 
+ * @author Fabian Bieker
+ * @author Daniel Waeber
+ * @since 12/2008
+ * 
+ */
+public class PersistenceTableColumnListener implements TableColumnModelListener {
+
+	public static final String ACTIVATE_PREF_KEY = 
+	    "ActivatePersistenceTableColumnListener";
+
+	public static final boolean DEFAULT_ENABLED = true;
+
+	private static final String simpleClassName = 
+	    PersistenceTableColumnListener.class.getSimpleName();
+
+	// needed to get column names / indices mapped from view to model 
+	// and to access the table model 
+	private final MainTable mainTable;
+
+	/**
+	 * @param mainTable
+	 */
+	public PersistenceTableColumnListener(final MainTable mainTable) {
+		this.mainTable = mainTable;
+	}
+
+	/**
+	 * update columns names and their width, store it in the global prefs.
+	 */
+	private void updateColumnPrefs() {
+        final int columnCount = mainTable.getColumnCount();
+		Vector<String> storedColumns = new Vector<String>(columnCount - 1);
+		Vector<String> columnsWidths = new Vector<String>(columnCount - 1);
+		int ncWidth = -1;
+
+		for (int i = 0; i < columnCount; i++) {
+			final String name = mainTable.getColumnName(i);
+            if (name == null || name.equals("")) {
+				continue;
+			} else if (name.equals("#")) { // TODO: get "#" from prefs?
+				ncWidth = mainTable.getColumnModel().getColumn(i).getWidth();
+
+			} else {
+				storedColumns.add(name.toLowerCase());
+				columnsWidths.add(String.valueOf(mainTable.getColumnModel().getColumn(
+						i).getWidth()));
+
+			}
+		}
+
+		// Finally, we store the new preferences.
+		Globals.prefs.putStringArray("columnNames",
+				storedColumns.toArray(new String[0]));
+		Globals.prefs.putStringArray("columnWidths",
+				columnsWidths.toArray(new String[0]));
+
+		// width of the number ("#") column
+		Globals.prefs.putInt("numberColWidth", ncWidth);
+	}
+
+	/**
+	 * @see javax.swing.event.TableColumnModelListener#columnAdded(javax.swing.event.TableColumnModelEvent)
+	 */
+	public void columnAdded(TableColumnModelEvent e) {
+		assert e != null : simpleClassName + " received null event";
+
+		updateColumnPrefs();
+	}
+
+	/**
+	 * @see javax.swing.event.TableColumnModelListener#columnMarginChanged(javax.swing.event.ChangeEvent)
+	 */
+	public void columnMarginChanged(ChangeEvent e) {
+		assert e != null : simpleClassName + " received null event";
+		
+		updateColumnPrefs();
+	}
+
+	/**
+	 * @see javax.swing.event.TableColumnModelListener#columnMoved(javax.swing.event.TableColumnModelEvent)
+	 */
+	public void columnMoved(TableColumnModelEvent e) {
+		assert e != null : simpleClassName + " received null event";
+
+		// not really moved, ignore ...
+		if (e.getFromIndex() == e.getToIndex())
+			return;
+
+		updateColumnPrefs();
+
+	}
+
+	/**
+	 * @see javax.swing.event.TableColumnModelListener#columnRemoved(javax.swing.event.TableColumnModelEvent)
+	 */
+	public void columnRemoved(TableColumnModelEvent e) {
+		assert e != null : simpleClassName + " received null event";
+
+		updateColumnPrefs();
+
+	}
+
+	/**
+	 * @see javax.swing.event.TableColumnModelListener#columnSelectionChanged(javax.swing.event.ListSelectionEvent)
+	 */
+	public void columnSelectionChanged(ListSelectionEvent e) {
+		// ignore
+	}
+
+}
diff --git a/src/java/net/sf/jabref/gui/PreventDraggingJTableHeader.java b/src/java/net/sf/jabref/gui/PreventDraggingJTableHeader.java
index 468a5ea..8693c08 100644
--- a/src/java/net/sf/jabref/gui/PreventDraggingJTableHeader.java
+++ b/src/java/net/sf/jabref/gui/PreventDraggingJTableHeader.java
@@ -1,168 +1,168 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import javax.swing.JTable;
-import javax.swing.table.JTableHeader;
-import javax.swing.table.TableColumn;
-import javax.swing.table.TableColumnModel;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-
-/**
- * Related to <code>MainTable</code> class. <br/>
- * Prevents dragging of the first header column ("#"). Prevents dragging of
- * unnamed (aka special) header columns. This is needed to prevent the user from
- * putting the gui table in an inconsistent state.<br/>
- * 
- * This might not be the best way to solve this problem. Overriding
- * <code>getDraggedColumn</code> produces some ugly gui dragging artifacts if a
- * user attempts to drag something before the first columns.
- * 
- * @author Daniel Waeber
- * @author Fabian Bieker
- * @since 12/2008
- */
-public class PreventDraggingJTableHeader extends JTableHeader {
-
-    public PreventDraggingJTableHeader(TableColumnModel cm) {
-        super(cm);
-    }
-
-    /**
-     * Overridden to prevent dragging of first column ("#") and special (unnamed)
-     * columns.
-     */
-    @Override
-    public void setDraggedColumn(TableColumn column) {
-
-        if (column != null) {
-
-            // prevent dragging of "#"
-            if (column.getModelIndex() == 0) {
-                return;
-            }
-
-            // prevent dragging of unnamed (aka special) columns
-            // in the most recent JabRef, the special columns have a one letter heading,
-            // therefore, isUnnamed will always return "false"
-            // to be safe, we keep this call nevertheless
-            // (this is the null check for getHeaderValue())
-            if (isUnnamed(column)) {
-                return;
-            }
-            
-            // prevent dragging of special field columns
-            String headerValue = column.getHeaderValue().toString();
-            if (headerValue.equals("P") || headerValue.equals("Q") || headerValue.equals("R")) {
-            	// the letters are guessed. Don't know, where they are set in the code.
-            	return;
-            }
-            
-            // other icon columns should also not be dragged
-            // note that "P" is used for "PDF" and "Priority"
-            if (headerValue.equals("F") || headerValue.equals("U")) {
-            	return;
-            }
-            
-        }
-
-        super.setDraggedColumn(column);
-    }
-
-    /**
-     * Overridden to prevent dragging of an other column before the first
-     * columns ("#" and the unnamed ones).
-     * */
-    @Override
-    public TableColumn getDraggedColumn() {
-        TableColumn column = super.getDraggedColumn();
-        if (column != null) {
-            preventDragBeforeIndex(this.getTable(), column.getModelIndex(),
-                    getSpecialColumnsCount());
-        }
-
-        return column;
-    }
-
-    /**
-     * Note: used to prevent dragging of other columns before the special
-     * columns.
-     * 
-     * @return count of special columns
-     */
-    private int getSpecialColumnsCount() {
-        int count = 0;
-        if (Globals.prefs.getBoolean("fileColumn")) {
-            count++;
-        }
-        if (Globals.prefs.getBoolean("pdfColumn")) {
-            count++;
-        }
-        if (Globals.prefs.getBoolean("urlColumn")) {
-            count++;
-        }
-        if (Globals.prefs.getBoolean("arxivColumn")) {
-            count++;
-        }
-        
-        // special field columns may also not be dragged
-        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED)) {
-	        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING))
-	            count++;
-	        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE))
-	            count++;
-	        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY))
-	            count++;
-	        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY))
-	            count++;
-        }
-
-        return count;
-    }
-
-    private static boolean isUnnamed(TableColumn column) {
-        return column.getHeaderValue() == null
-                || "".equals(column.getHeaderValue().toString());
-    }
-
-    /**
-     * Transform model index <code>mColIndex</code> to a view based index and
-     * prevent dragging before model index <code>toIndex</code> (inclusive).
-     */
-    private static void preventDragBeforeIndex(JTable table, int mColIndex,
-            int toIndex) {
-
-        for (int c = 0; c < table.getColumnCount(); c++) {
-
-            TableColumn col = table.getColumnModel().getColumn(c);
-
-            // found the element in the view ...
-            // ... and check if it should not be dragged
-            if (col.getModelIndex() == mColIndex && c <= toIndex) {
-                // Util.pr("prevented! viewIndex = " + c + " modelIndex = "
-                // + mColIndex + " toIndex = " + toIndex);
-
-                // prevent dragging (move it back ...)
-                table.getColumnModel().moveColumn(toIndex, toIndex + 1);
-                return; // we are done now
-            }
-
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import javax.swing.JTable;
+import javax.swing.table.JTableHeader;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+
+/**
+ * Related to <code>MainTable</code> class. <br/>
+ * Prevents dragging of the first header column ("#"). Prevents dragging of
+ * unnamed (aka special) header columns. This is needed to prevent the user from
+ * putting the gui table in an inconsistent state.<br/>
+ * 
+ * This might not be the best way to solve this problem. Overriding
+ * <code>getDraggedColumn</code> produces some ugly gui dragging artifacts if a
+ * user attempts to drag something before the first columns.
+ * 
+ * @author Daniel Waeber
+ * @author Fabian Bieker
+ * @since 12/2008
+ */
+public class PreventDraggingJTableHeader extends JTableHeader {
+
+    public PreventDraggingJTableHeader(TableColumnModel cm) {
+        super(cm);
+    }
+
+    /**
+     * Overridden to prevent dragging of first column ("#") and special (unnamed)
+     * columns.
+     */
+    @Override
+    public void setDraggedColumn(TableColumn column) {
+
+        if (column != null) {
+
+            // prevent dragging of "#"
+            if (column.getModelIndex() == 0) {
+                return;
+            }
+
+            // prevent dragging of unnamed (aka special) columns
+            // in the most recent JabRef, the special columns have a one letter heading,
+            // therefore, isUnnamed will always return "false"
+            // to be safe, we keep this call nevertheless
+            // (this is the null check for getHeaderValue())
+            if (isUnnamed(column)) {
+                return;
+            }
+            
+            // prevent dragging of special field columns
+            String headerValue = column.getHeaderValue().toString();
+            if (headerValue.equals("P") || headerValue.equals("Q") || headerValue.equals("R")) {
+            	// the letters are guessed. Don't know, where they are set in the code.
+            	return;
+            }
+            
+            // other icon columns should also not be dragged
+            // note that "P" is used for "PDF" and "Priority"
+            if (headerValue.equals("F") || headerValue.equals("U")) {
+            	return;
+            }
+            
+        }
+
+        super.setDraggedColumn(column);
+    }
+
+    /**
+     * Overridden to prevent dragging of an other column before the first
+     * columns ("#" and the unnamed ones).
+     * */
+    @Override
+    public TableColumn getDraggedColumn() {
+        TableColumn column = super.getDraggedColumn();
+        if (column != null) {
+            preventDragBeforeIndex(this.getTable(), column.getModelIndex(),
+                    getSpecialColumnsCount());
+        }
+
+        return column;
+    }
+
+    /**
+     * Note: used to prevent dragging of other columns before the special
+     * columns.
+     * 
+     * @return count of special columns
+     */
+    private int getSpecialColumnsCount() {
+        int count = 0;
+        if (Globals.prefs.getBoolean("fileColumn")) {
+            count++;
+        }
+        if (Globals.prefs.getBoolean("pdfColumn")) {
+            count++;
+        }
+        if (Globals.prefs.getBoolean("urlColumn")) {
+            count++;
+        }
+        if (Globals.prefs.getBoolean("arxivColumn")) {
+            count++;
+        }
+        
+        // special field columns may also not be dragged
+        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED)) {
+	        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING))
+	            count++;
+	        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE))
+	            count++;
+	        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY))
+	            count++;
+	        if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY))
+	            count++;
+        }
+
+        return count;
+    }
+
+    private static boolean isUnnamed(TableColumn column) {
+        return column.getHeaderValue() == null
+                || "".equals(column.getHeaderValue().toString());
+    }
+
+    /**
+     * Transform model index <code>mColIndex</code> to a view based index and
+     * prevent dragging before model index <code>toIndex</code> (inclusive).
+     */
+    private static void preventDragBeforeIndex(JTable table, int mColIndex,
+            int toIndex) {
+
+        for (int c = 0; c < table.getColumnCount(); c++) {
+
+            TableColumn col = table.getColumnModel().getColumn(c);
+
+            // found the element in the view ...
+            // ... and check if it should not be dragged
+            if (col.getModelIndex() == mColIndex && c <= toIndex) {
+                // Util.pr("prevented! viewIndex = " + c + " modelIndex = "
+                // + mColIndex + " toIndex = " + toIndex);
+
+                // prevent dragging (move it back ...)
+                table.getColumnModel().moveColumn(toIndex, toIndex + 1);
+                return; // we are done now
+            }
+
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/PreviewPanelTransferHandler.java b/src/java/net/sf/jabref/gui/PreviewPanelTransferHandler.java
index cd9aa6f..60d336b 100644
--- a/src/java/net/sf/jabref/gui/PreviewPanelTransferHandler.java
+++ b/src/java/net/sf/jabref/gui/PreviewPanelTransferHandler.java
@@ -1,76 +1,76 @@
-/* Copyright (C) 2012 JabRef contributors.
-
-  This program is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.sf.jabref.gui;
-
-import java.awt.datatransfer.StringSelection;
-import java.awt.datatransfer.Transferable;
-import java.awt.dnd.DnDConstants;
-import java.io.IOException;
-import java.io.StringWriter;
-
-import javax.swing.JComponent;
-import javax.swing.JEditorPane;
-import javax.swing.TransferHandler;
-import javax.swing.text.BadLocationException;
-
-import net.sf.jabref.EntryContainer;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-
-public class PreviewPanelTransferHandler extends FileListEditorTransferHandler {
-    
-    public PreviewPanelTransferHandler(JabRefFrame frame, EntryContainer entryContainer, TransferHandler textTransferHandler) {
-        super(frame, entryContainer, textTransferHandler);
-    }
-
-    /**
-     * LINK is unsupported as dropping into into Microsoft Word then leads to a link instead to a copy
-     */
-    @Override
-    public int getSourceActions(JComponent c) {
-        return DnDConstants.ACTION_COPY;
-    }
-
-    @Override
-    protected Transferable createTransferable(JComponent c) {
-        if (c instanceof JEditorPane) {
-            // this method should be called from the preview panel only
-            
-            // the default TransferHandler implementation is aware of HTML
-            // and returns an appropriate Transferable
-            // as textTransferHandler.createTransferable() is not available and
-            // I don't know any other method, I do the HTML conversion by hand
-
-            // First, get the HTML of the selected text
-            JEditorPane e = (JEditorPane) c;
-            StringWriter sw = new StringWriter();
-            try {
-                e.getEditorKit().write(sw, e.getDocument(), e.getSelectionStart(), e.getSelectionEnd());
-            } catch (IOException e1) {
-                e1.printStackTrace();
-            } catch (BadLocationException e1) {
-                e1.printStackTrace();
-            }
-            
-            // Second, return the HTML (and text as fallback)
-            return new HtmlTransferable(sw.toString(), e.getSelectedText());
-        } else {
-            // if not called from the preview panel, return an error string
-            return new StringSelection(Globals.lang("Operation not supported"));
-        }
-    }
-}
+/* Copyright (C) 2012 JabRef contributors.
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.sf.jabref.gui;
+
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DnDConstants;
+import java.io.IOException;
+import java.io.StringWriter;
+
+import javax.swing.JComponent;
+import javax.swing.JEditorPane;
+import javax.swing.TransferHandler;
+import javax.swing.text.BadLocationException;
+
+import net.sf.jabref.EntryContainer;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+
+public class PreviewPanelTransferHandler extends FileListEditorTransferHandler {
+    
+    public PreviewPanelTransferHandler(JabRefFrame frame, EntryContainer entryContainer, TransferHandler textTransferHandler) {
+        super(frame, entryContainer, textTransferHandler);
+    }
+
+    /**
+     * LINK is unsupported as dropping into into Microsoft Word then leads to a link instead to a copy
+     */
+    @Override
+    public int getSourceActions(JComponent c) {
+        return DnDConstants.ACTION_COPY;
+    }
+
+    @Override
+    protected Transferable createTransferable(JComponent c) {
+        if (c instanceof JEditorPane) {
+            // this method should be called from the preview panel only
+            
+            // the default TransferHandler implementation is aware of HTML
+            // and returns an appropriate Transferable
+            // as textTransferHandler.createTransferable() is not available and
+            // I don't know any other method, I do the HTML conversion by hand
+
+            // First, get the HTML of the selected text
+            JEditorPane e = (JEditorPane) c;
+            StringWriter sw = new StringWriter();
+            try {
+                e.getEditorKit().write(sw, e.getDocument(), e.getSelectionStart(), e.getSelectionEnd());
+            } catch (IOException e1) {
+                e1.printStackTrace();
+            } catch (BadLocationException e1) {
+                e1.printStackTrace();
+            }
+            
+            // Second, return the HTML (and text as fallback)
+            return new HtmlTransferable(sw.toString(), e.getSelectedText());
+        } else {
+            // if not called from the preview panel, return an error string
+            return new StringSelection(Globals.lang("Operation not supported"));
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/RankingFieldComparator.java b/src/java/net/sf/jabref/gui/RankingFieldComparator.java
index 4c615c8..236304c 100644
--- a/src/java/net/sf/jabref/gui/RankingFieldComparator.java
+++ b/src/java/net/sf/jabref/gui/RankingFieldComparator.java
@@ -1,56 +1,56 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-
-import java.util.Comparator;
-
-/**
- * Comparator that handles the ranking icon column
- * 
- * Based on IconComparator
- * Only comparing ranking field
- * inverse comparison of ranking as rank5 is higher than rank1
- */
-public class RankingFieldComparator implements Comparator<BibtexEntry> {
-
-    public int compare(BibtexEntry e1, BibtexEntry e2) {
-        String val1 = e1.getField(SpecialFieldsUtils.FIELDNAME_RANKING);
-        String val2 = e2.getField(SpecialFieldsUtils.FIELDNAME_RANKING);
-		if (val1 == null) {
-			if (val2 != null) {
-				return 1;
-			} else {
-		        return 0;
-			}
-		} else {
-			if (val2 == null) {
-				return -1;
-			} else {
-				// val1 is not null AND val2 is not null
-				int compareToRes = val1.compareTo(val2);
-				if (compareToRes != 0) {
-					return compareToRes*-1;
-				} else {
-			        return 0;
-				}
-			}
-		}
-    }
-
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+
+import java.util.Comparator;
+
+/**
+ * Comparator that handles the ranking icon column
+ * 
+ * Based on IconComparator
+ * Only comparing ranking field
+ * inverse comparison of ranking as rank5 is higher than rank1
+ */
+public class RankingFieldComparator implements Comparator<BibtexEntry> {
+
+    public int compare(BibtexEntry e1, BibtexEntry e2) {
+        String val1 = e1.getField(SpecialFieldsUtils.FIELDNAME_RANKING);
+        String val2 = e2.getField(SpecialFieldsUtils.FIELDNAME_RANKING);
+		if (val1 == null) {
+			if (val2 != null) {
+				return 1;
+			} else {
+		        return 0;
+			}
+		} else {
+			if (val2 == null) {
+				return -1;
+			} else {
+				// val1 is not null AND val2 is not null
+				int compareToRes = val1.compareTo(val2);
+				if (compareToRes != 0) {
+					return compareToRes*-1;
+				} else {
+			        return 0;
+				}
+			}
+		}
+    }
+
+}
diff --git a/src/java/net/sf/jabref/gui/SearchResultsDialog.java b/src/java/net/sf/jabref/gui/SearchResultsDialog.java
index 2645a48..b910873 100644
--- a/src/java/net/sf/jabref/gui/SearchResultsDialog.java
+++ b/src/java/net/sf/jabref/gui/SearchResultsDialog.java
@@ -1,480 +1,480 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.IOException;
-import java.util.Comparator;
-import java.util.HashMap;
-
-import javax.swing.AbstractAction;
-import javax.swing.ActionMap;
-import javax.swing.InputMap;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.SwingUtilities;
-import javax.swing.table.TableColumnModel;
-
-import net.sf.jabref.*;
-import net.sf.jabref.external.ExternalFileMenuItem;
-import ca.odell.glazedlists.BasicEventList;
-import ca.odell.glazedlists.EventList;
-import ca.odell.glazedlists.SortedList;
-import ca.odell.glazedlists.event.ListEvent;
-import ca.odell.glazedlists.event.ListEventListener;
-import ca.odell.glazedlists.gui.AdvancedTableFormat;
-import ca.odell.glazedlists.swing.EventSelectionModel;
-import ca.odell.glazedlists.swing.EventTableModel;
-import ca.odell.glazedlists.swing.TableComparatorChooser;
-
-import com.jgoodies.uif_lite.component.UIFSplitPane;
-
-/**
- * Dialog to display search results, potentially from more than one BasePanel, with
- * possibility to preview and to locate each entry in the main window.
- *
- * TODO: should be possible to save or export the list.
- */
-public class SearchResultsDialog {
-    private JabRefFrame frame;
-
-    private JDialog diag;
-    private String[] fields = new String[]{
-            "author", "title", "year", "journal" 
-    };
-    protected final int FILE_COL = 0, URL_COL = 1,
-        PAD = 2;
-    private JLabel fileLabel = new JLabel(GUIGlobals.getImage("psSmall")),
-            urlLabel = new JLabel(GUIGlobals.getImage("wwwSmall"));
-
-    protected Rectangle toRect = new Rectangle(0, 0, 1, 1);
-
-    private EventTableModel<BibtexEntry> model;
-    private EventList<BibtexEntry> entries = new BasicEventList<BibtexEntry>();
-    private SortedList<BibtexEntry> sortedEntries;
-    private HashMap<BibtexEntry, BasePanel> entryHome = new HashMap<BibtexEntry, BasePanel>();
-
-    private JTable entryTable;
-    protected UIFSplitPane contentPane = new UIFSplitPane(UIFSplitPane.VERTICAL_SPLIT);
-    PreviewPanel preview;
-
-    public SearchResultsDialog(JabRefFrame frame, String title) {
-
-        this.frame = frame;
-
-        init(title);
-    }
-
-    private void init(String title) {
-        diag = new JDialog(frame, title, false);
-
-        int activePreview = Globals.prefs.getInt("activePreview");
-        preview = new PreviewPanel(null, new MetaData(),
-                activePreview == 0 ? Globals.prefs.get("preview0") : Globals.prefs.get("preview1"));
-
-        sortedEntries = new SortedList<BibtexEntry>(entries, new EntryComparator(false, true, "author"));
-        model = new EventTableModel<BibtexEntry>(sortedEntries,
-                new EntryTableFormat());
-        entryTable = new JTable(model);
-        GeneralRenderer renderer = new GeneralRenderer(Color.white);
-        entryTable.setDefaultRenderer(JLabel.class, renderer);
-        entryTable.setDefaultRenderer(String.class, renderer);
-        setWidths();
-        TableComparatorChooser<BibtexEntry> tableSorter =
-                TableComparatorChooser.install(entryTable, sortedEntries,
-                TableComparatorChooser.MULTIPLE_COLUMN_KEYBOARD);
-        setupComparatorChooser(tableSorter);
-        JScrollPane sp = new JScrollPane(entryTable);
-
-        final EventSelectionModel<BibtexEntry> selectionModel = new EventSelectionModel<BibtexEntry>(sortedEntries);
-        entryTable.setSelectionModel(selectionModel);
-        selectionModel.getSelected().addListEventListener(new EntrySelectionListener());
-        entryTable.addMouseListener(new TableClickListener());
-
-        contentPane.setTopComponent(sp);
-        contentPane.setBottomComponent(preview);
-
-        // Key bindings:
-        AbstractAction closeAction = new AbstractAction() {
-          public void actionPerformed(ActionEvent e) {
-            diag.dispose();
-          }
-        };
-        ActionMap am = contentPane.getActionMap();
-        InputMap im = contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", closeAction);
-
-        entryTable.getActionMap().put("copy", new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    if (selectionModel.getSelected().size() > 0) {
-                        BibtexEntry[] bes = selectionModel.getSelected().toArray
-                                (new BibtexEntry[selectionModel.getSelected().size()]);
-                        TransferableBibtexEntry trbe
-                                = new TransferableBibtexEntry(bes);
-                            // ! look at ClipBoardManager
-                            Toolkit.getDefaultToolkit().getSystemClipboard()
-                                .setContents(trbe, frame.basePanel());
-                        frame.output(Globals.lang("Copied")+" "+(bes.length>1 ? bes.length+" "
-                                                           +Globals.lang("entries")
-                                                           : "1 "+Globals.lang("entry")+"."));
-                    }
-                }
-            });
-
-        diag.addWindowListener(new WindowAdapter() {
-            public void windowOpened(WindowEvent e) {
-                contentPane.setDividerLocation(0.5f);
-            }
-
-            public void windowClosing(WindowEvent event) {
-                Globals.prefs.putInt("searchDialogWidth", diag.getSize().width);
-                Globals.prefs.putInt("searchDialogHeight", diag.getSize().height);
-            }
-        });
-
-        diag.getContentPane().add(contentPane, BorderLayout.CENTER);
-        // Remember and default to last size:
-        diag.setSize(new Dimension(Globals.prefs.getInt("searchDialogWidth"), Globals.prefs
-            .getInt("searchDialogHeight")));
-        diag.setLocationRelativeTo(frame);
-    }
-
-    /**
-     * Control the visibility of the dialog.
-     * @param visible true to show dialog, false to hide.
-     */
-    public void setVisible(boolean visible) {
-        diag.setVisible(visible);
-    }
-
-    public void selectFirstEntry() {
-        if (entryTable.getRowCount() > 0)
-            entryTable.setRowSelectionInterval(0,0);
-        else {
-            contentPane.setDividerLocation(1.0f);
-        }
-    }
-
-    /**
-     * Remove all entries from the table.
-     */
-    public synchronized void clear() {
-        entries.clear();
-        entryHome.clear();
-    }
-
-    /**
-     * Set up the comparators for each column, so the user can modify sort order
-     * by clicking the column labels.
-     * @param comparatorChooser The comparator chooser controlling the sort order.
-     */
-    @SuppressWarnings("unchecked")
-    protected void setupComparatorChooser(TableComparatorChooser<BibtexEntry> comparatorChooser) {
-        // First column:
-        java.util.List<Comparator> comparators = comparatorChooser
-            .getComparatorsForColumn(0);
-        comparators.clear();
-
-        comparators = comparatorChooser.getComparatorsForColumn(1);
-        comparators.clear();
-
-        // Icon columns:
-        for (int i = 2; i < PAD; i++) {
-            comparators = comparatorChooser.getComparatorsForColumn(i);
-            comparators.clear();
-            if (i == FILE_COL)
-                comparators.add(new IconComparator(new String[] { GUIGlobals.FILE_FIELD }));
-            else if (i == URL_COL)
-                comparators.add(new IconComparator(new String[] { "url" }));
-
-        }
-        // Remaining columns:
-        for (int i = PAD; i < PAD + fields.length; i++) {
-            comparators = comparatorChooser.getComparatorsForColumn(i);
-            comparators.clear();
-            comparators.add(new FieldComparator(fields[i - PAD]));
-        }
-
-        sortedEntries.getReadWriteLock().writeLock().lock();
-        comparatorChooser.appendComparator(PAD, 0, false);
-        sortedEntries.getReadWriteLock().writeLock().unlock();
-
-    }
-
-    /**
-     * Set column widths according to which field is shown, and lock icon columns
-     * to a suitable width.
-     */
-    protected void setWidths() {
-        TableColumnModel cm = entryTable.getColumnModel();
-        for (int i = 0; i < PAD; i++) {
-        	// Check if the Column is a RankingColumn
-        	// If this is the case, set a certain Column-width,
-        	// because the RankingIconColumn needs some more width
-        	if (frame.basePanel().tableFormat.isRankingColumn(i)) {
-        		// Lock the width of ranking icon column.
-                cm.getColumn(i).setPreferredWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
-                cm.getColumn(i).setMinWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
-                cm.getColumn(i).setMaxWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
-        	} else {
-        		// Lock the width of icon columns.
-                cm.getColumn(i).setPreferredWidth(GUIGlobals.WIDTH_ICON_COL);
-                cm.getColumn(i).setMinWidth(GUIGlobals.WIDTH_ICON_COL);
-                cm.getColumn(i).setMaxWidth(GUIGlobals.WIDTH_ICON_COL);	
-        	}
-        }
-
-        for (int i = 0; i < fields.length; i++) {
-            int width = BibtexFields.getFieldLength(fields[i]);
-            cm.getColumn(i + PAD).setPreferredWidth(width);
-        }
-    }
-
-    /**
-     * Add a list of entries to the table.
-     * @param newEntries The list of entries.
-     * @param panel A reference to the BasePanel where the entries belong.
-     */
-    public synchronized void addEntries(java.util.List<BibtexEntry> newEntries, BasePanel panel) {
-        for (BibtexEntry entry : newEntries) {
-            entries.add(entry);
-            entryHome.put(entry, panel);
-        }
-    }
-
-    /**
-     * Add a single entry to the table.
-     * @param entry The entry to add.
-     * @param panel A reference to the BasePanel where the entry belongs.
-     */
-    public synchronized void addEntry(BibtexEntry entry, BasePanel panel) {
-        entries.add(entry);
-        entryHome.put(entry, panel);
-    }
-
-    /**
-     * Mouse listener for the entry table. Processes icon clicks to open external
-     * files or urls, as well as the opening of the context menu.
-     */
-    class TableClickListener extends MouseAdapter {
-
-        public void mouseReleased(MouseEvent e) {
-            if (e.isPopupTrigger()) {
-                processPopupTrigger(e);
-                return;
-            }
-        }
-
-        public void mousePressed(MouseEvent e) {
-            if (e.isPopupTrigger()) {
-                processPopupTrigger(e);
-                return;
-            }
-
-            // First find the row on which the user has clicked.
-            final int row = entryTable.rowAtPoint(e.getPoint());
-
-            // A double click on an entry should highlight the entry in its BasePanel:
-            if (e.getClickCount() == 2) {
-                // Get the selected entry:
-                BibtexEntry toShow = model.getElementAt(row);
-                // Look up which BasePanel it belongs to:
-                BasePanel p = entryHome.get(toShow);
-                // Show the correct tab in the main window:
-                frame.showBasePanel(p);
-                // Highlight the entry:
-                p.highlightEntry(toShow);
-            }
-        }
-
-        public void mouseClicked(MouseEvent e) {
-            if (e.isPopupTrigger()) {
-                processPopupTrigger(e);
-                return;
-            }
-            //if (e.)
-            final int col = entryTable.columnAtPoint(e.getPoint()),
-                    row = entryTable.rowAtPoint(e.getPoint());
-            if (col < PAD) {
-                BibtexEntry entry = sortedEntries.get(row);
-                BasePanel p = entryHome.get(entry);
-                switch (col) {
-                    case FILE_COL:
-                        Object o = entry.getField(GUIGlobals.FILE_FIELD);
-                        if (o != null) {
-                            FileListTableModel tableModel = new FileListTableModel();
-                            tableModel.setContent((String) o);
-                            if (tableModel.getRowCount() == 0)
-                                return;
-                            FileListEntry fl = tableModel.getEntry(0);
-                            (new ExternalFileMenuItem(frame, entry, "", fl.getLink(), null,
-                                p.metaData(), fl.getType())).actionPerformed(null);
-                        }
-                        break;
-                    case URL_COL:
-                        Object link = entry.getField("url");
-                        try {
-                            if (link != null)
-                                Util.openExternalViewer(p.metaData(), (String) link, "url");
-                        } catch (IOException ex) {
-                            ex.printStackTrace();
-                        }
-                        break;
-
-                }
-            }
-        }
-
-        /**
-         * If the user has signalled the opening of a context menu, the event
-         * gets redirected to this method. Here we open a file link menu if the
-         * user is pointing at a file link icon. Otherwise a general context
-         * menu should be shown.
-         * @param e The triggering mouse event.
-         */
-        public void processPopupTrigger(MouseEvent e) {
-            BibtexEntry entry = sortedEntries.get(entryTable.rowAtPoint(e.getPoint()));
-            BasePanel p = entryHome.get(entry);
-            int col = entryTable.columnAtPoint(e.getPoint());
-            JPopupMenu menu = new JPopupMenu();
-            int count = 0;
-
-            if (col == FILE_COL) {
-                // We use a FileListTableModel to parse the field content:
-                Object o = entry.getField(GUIGlobals.FILE_FIELD);
-                FileListTableModel fileList = new FileListTableModel();
-                fileList.setContent((String)o);
-                // If there are one or more links, open the first one:
-                for (int i=0; i<fileList.getRowCount(); i++) {
-                    FileListEntry flEntry = fileList.getEntry(i);
-                    String description = flEntry.getDescription();
-                    if ((description == null) || (description.trim().length() == 0))
-                        description = flEntry.getLink();
-                    menu.add(new ExternalFileMenuItem(p.frame(), entry, description,
-                            flEntry.getLink(), flEntry.getType().getIcon(), p.metaData(),
-                            flEntry.getType()));
-                    count++;
-                }
-
-            }
-
-            if (count > 0)
-                menu.show(entryTable, e.getX(), e.getY());
-        }
-    }
-
-    /**
-     * The listener for the Glazed list monitoring the current selection.
-     * When selection changes, we need to update the preview panel.
-     */
-    class EntrySelectionListener implements ListEventListener<BibtexEntry> {
-
-            public void listChanged(ListEvent<BibtexEntry> listEvent) {
-                if (listEvent.getSourceList().size() == 1) {
-                    BibtexEntry entry = listEvent.getSourceList().get(0);
-                    // Find out which BasePanel the selected entry belongs to:
-                    BasePanel p = entryHome.get(entry);
-                    // Update the preview's metadata reference:
-                    preview.setMetaData(p.metaData());
-                    // Update the preview's entry:
-                    preview.setEntry(entry);
-                    contentPane.setDividerLocation(0.5f);
-                    SwingUtilities.invokeLater(new Runnable() {
-                        public void run() {
-                            preview.scrollRectToVisible(toRect);
-                        }
-                    });
-                }
-            }
-        }
-
-    /**
-     * TableFormat for the table shown in the dialog. Handles the display of entry
-     * fields and icons for linked files and urls.
-     */
-    public class EntryTableFormat implements AdvancedTableFormat<BibtexEntry> {
-
-        public int getColumnCount() {
-            return PAD+fields.length;
-        }
-
-        public String getColumnName(int column) {
-            if (column >= PAD)
-                return Util.nCase(fields[column-PAD]);
-            else return "";
-        }
-
-        public Object getColumnValue(BibtexEntry entry, int column) {
-            if (column < PAD) {
-                Object o;
-                switch (column) {
-                    case FILE_COL:
-                        o = entry.getField(GUIGlobals.FILE_FIELD);
-                        if (o != null) {
-                            FileListTableModel model = new FileListTableModel();
-                            model.setContent((String) o);
-                            fileLabel.setToolTipText(model.getToolTipHTMLRepresentation());
-                            if (model.getRowCount() > 0)
-                                fileLabel.setIcon(model.getEntry(0).getType().getIcon());
-                            return fileLabel;
-                        } else
-                            return null;
-                    case URL_COL:
-                        o = entry.getField("url");
-                        if (o != null) {
-                            urlLabel.setToolTipText((String) o);
-                            return urlLabel;
-                        } else
-                            return null;
-                    default:
-                        return null;
-                }
-            }
-            else {
-                String field = fields[column-PAD];
-                if (field.equals("author") || field.equals("editor")) {
-                    // For name fields, tap into a MainTableFormat instance and use
-                    // the same name formatting as is used in the entry table:
-                    if (frame.basePanel() != null)
-                        return frame.basePanel().tableFormat.formatName
-                                (entry.getField(field));
-                }
-                return entry.getField(field);
-            }
-        }
-
-        public Class<?> getColumnClass(int i) {
-            if (i < PAD)
-                return JLabel.class;
-            else
-                return String.class;
-        }
-
-        public Comparator<?> getColumnComparator(int i) {
-            return null;
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+import java.util.Comparator;
+import java.util.HashMap;
+
+import javax.swing.AbstractAction;
+import javax.swing.ActionMap;
+import javax.swing.InputMap;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+import javax.swing.table.TableColumnModel;
+
+import net.sf.jabref.*;
+import net.sf.jabref.external.ExternalFileMenuItem;
+import ca.odell.glazedlists.BasicEventList;
+import ca.odell.glazedlists.EventList;
+import ca.odell.glazedlists.SortedList;
+import ca.odell.glazedlists.event.ListEvent;
+import ca.odell.glazedlists.event.ListEventListener;
+import ca.odell.glazedlists.gui.AdvancedTableFormat;
+import ca.odell.glazedlists.swing.EventSelectionModel;
+import ca.odell.glazedlists.swing.EventTableModel;
+import ca.odell.glazedlists.swing.TableComparatorChooser;
+
+import com.jgoodies.uif_lite.component.UIFSplitPane;
+
+/**
+ * Dialog to display search results, potentially from more than one BasePanel, with
+ * possibility to preview and to locate each entry in the main window.
+ *
+ * TODO: should be possible to save or export the list.
+ */
+public class SearchResultsDialog {
+    private JabRefFrame frame;
+
+    private JDialog diag;
+    private String[] fields = new String[]{
+            "author", "title", "year", "journal" 
+    };
+    protected final int FILE_COL = 0, URL_COL = 1,
+        PAD = 2;
+    private JLabel fileLabel = new JLabel(GUIGlobals.getImage("psSmall")),
+            urlLabel = new JLabel(GUIGlobals.getImage("wwwSmall"));
+
+    protected Rectangle toRect = new Rectangle(0, 0, 1, 1);
+
+    private EventTableModel<BibtexEntry> model;
+    private EventList<BibtexEntry> entries = new BasicEventList<BibtexEntry>();
+    private SortedList<BibtexEntry> sortedEntries;
+    private HashMap<BibtexEntry, BasePanel> entryHome = new HashMap<BibtexEntry, BasePanel>();
+
+    private JTable entryTable;
+    protected UIFSplitPane contentPane = new UIFSplitPane(UIFSplitPane.VERTICAL_SPLIT);
+    PreviewPanel preview;
+
+    public SearchResultsDialog(JabRefFrame frame, String title) {
+
+        this.frame = frame;
+
+        init(title);
+    }
+
+    private void init(String title) {
+        diag = new JDialog(frame, title, false);
+
+        int activePreview = Globals.prefs.getInt("activePreview");
+        preview = new PreviewPanel(null, new MetaData(),
+                activePreview == 0 ? Globals.prefs.get("preview0") : Globals.prefs.get("preview1"));
+
+        sortedEntries = new SortedList<BibtexEntry>(entries, new EntryComparator(false, true, "author"));
+        model = new EventTableModel<BibtexEntry>(sortedEntries,
+                new EntryTableFormat());
+        entryTable = new JTable(model);
+        GeneralRenderer renderer = new GeneralRenderer(Color.white);
+        entryTable.setDefaultRenderer(JLabel.class, renderer);
+        entryTable.setDefaultRenderer(String.class, renderer);
+        setWidths();
+        TableComparatorChooser<BibtexEntry> tableSorter =
+                TableComparatorChooser.install(entryTable, sortedEntries,
+                TableComparatorChooser.MULTIPLE_COLUMN_KEYBOARD);
+        setupComparatorChooser(tableSorter);
+        JScrollPane sp = new JScrollPane(entryTable);
+
+        final EventSelectionModel<BibtexEntry> selectionModel = new EventSelectionModel<BibtexEntry>(sortedEntries);
+        entryTable.setSelectionModel(selectionModel);
+        selectionModel.getSelected().addListEventListener(new EntrySelectionListener());
+        entryTable.addMouseListener(new TableClickListener());
+
+        contentPane.setTopComponent(sp);
+        contentPane.setBottomComponent(preview);
+
+        // Key bindings:
+        AbstractAction closeAction = new AbstractAction() {
+          public void actionPerformed(ActionEvent e) {
+            diag.dispose();
+          }
+        };
+        ActionMap am = contentPane.getActionMap();
+        InputMap im = contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", closeAction);
+
+        entryTable.getActionMap().put("copy", new AbstractAction() {
+                public void actionPerformed(ActionEvent e) {
+                    if (selectionModel.getSelected().size() > 0) {
+                        BibtexEntry[] bes = selectionModel.getSelected().toArray
+                                (new BibtexEntry[selectionModel.getSelected().size()]);
+                        TransferableBibtexEntry trbe
+                                = new TransferableBibtexEntry(bes);
+                            // ! look at ClipBoardManager
+                            Toolkit.getDefaultToolkit().getSystemClipboard()
+                                .setContents(trbe, frame.basePanel());
+                        frame.output(Globals.lang("Copied")+" "+(bes.length>1 ? bes.length+" "
+                                                           +Globals.lang("entries")
+                                                           : "1 "+Globals.lang("entry")+"."));
+                    }
+                }
+            });
+
+        diag.addWindowListener(new WindowAdapter() {
+            public void windowOpened(WindowEvent e) {
+                contentPane.setDividerLocation(0.5f);
+            }
+
+            public void windowClosing(WindowEvent event) {
+                Globals.prefs.putInt("searchDialogWidth", diag.getSize().width);
+                Globals.prefs.putInt("searchDialogHeight", diag.getSize().height);
+            }
+        });
+
+        diag.getContentPane().add(contentPane, BorderLayout.CENTER);
+        // Remember and default to last size:
+        diag.setSize(new Dimension(Globals.prefs.getInt("searchDialogWidth"), Globals.prefs
+            .getInt("searchDialogHeight")));
+        diag.setLocationRelativeTo(frame);
+    }
+
+    /**
+     * Control the visibility of the dialog.
+     * @param visible true to show dialog, false to hide.
+     */
+    public void setVisible(boolean visible) {
+        diag.setVisible(visible);
+    }
+
+    public void selectFirstEntry() {
+        if (entryTable.getRowCount() > 0)
+            entryTable.setRowSelectionInterval(0,0);
+        else {
+            contentPane.setDividerLocation(1.0f);
+        }
+    }
+
+    /**
+     * Remove all entries from the table.
+     */
+    public synchronized void clear() {
+        entries.clear();
+        entryHome.clear();
+    }
+
+    /**
+     * Set up the comparators for each column, so the user can modify sort order
+     * by clicking the column labels.
+     * @param comparatorChooser The comparator chooser controlling the sort order.
+     */
+    @SuppressWarnings("unchecked")
+    protected void setupComparatorChooser(TableComparatorChooser<BibtexEntry> comparatorChooser) {
+        // First column:
+        java.util.List<Comparator> comparators = comparatorChooser
+            .getComparatorsForColumn(0);
+        comparators.clear();
+
+        comparators = comparatorChooser.getComparatorsForColumn(1);
+        comparators.clear();
+
+        // Icon columns:
+        for (int i = 2; i < PAD; i++) {
+            comparators = comparatorChooser.getComparatorsForColumn(i);
+            comparators.clear();
+            if (i == FILE_COL)
+                comparators.add(new IconComparator(new String[] { GUIGlobals.FILE_FIELD }));
+            else if (i == URL_COL)
+                comparators.add(new IconComparator(new String[] { "url" }));
+
+        }
+        // Remaining columns:
+        for (int i = PAD; i < PAD + fields.length; i++) {
+            comparators = comparatorChooser.getComparatorsForColumn(i);
+            comparators.clear();
+            comparators.add(new FieldComparator(fields[i - PAD]));
+        }
+
+        sortedEntries.getReadWriteLock().writeLock().lock();
+        comparatorChooser.appendComparator(PAD, 0, false);
+        sortedEntries.getReadWriteLock().writeLock().unlock();
+
+    }
+
+    /**
+     * Set column widths according to which field is shown, and lock icon columns
+     * to a suitable width.
+     */
+    protected void setWidths() {
+        TableColumnModel cm = entryTable.getColumnModel();
+        for (int i = 0; i < PAD; i++) {
+        	// Check if the Column is a RankingColumn
+        	// If this is the case, set a certain Column-width,
+        	// because the RankingIconColumn needs some more width
+        	if (frame.basePanel().tableFormat.isRankingColumn(i)) {
+        		// Lock the width of ranking icon column.
+                cm.getColumn(i).setPreferredWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
+                cm.getColumn(i).setMinWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
+                cm.getColumn(i).setMaxWidth(GUIGlobals.WIDTH_ICON_COL_RANKING);
+        	} else {
+        		// Lock the width of icon columns.
+                cm.getColumn(i).setPreferredWidth(GUIGlobals.WIDTH_ICON_COL);
+                cm.getColumn(i).setMinWidth(GUIGlobals.WIDTH_ICON_COL);
+                cm.getColumn(i).setMaxWidth(GUIGlobals.WIDTH_ICON_COL);	
+        	}
+        }
+
+        for (int i = 0; i < fields.length; i++) {
+            int width = BibtexFields.getFieldLength(fields[i]);
+            cm.getColumn(i + PAD).setPreferredWidth(width);
+        }
+    }
+
+    /**
+     * Add a list of entries to the table.
+     * @param newEntries The list of entries.
+     * @param panel A reference to the BasePanel where the entries belong.
+     */
+    public synchronized void addEntries(java.util.List<BibtexEntry> newEntries, BasePanel panel) {
+        for (BibtexEntry entry : newEntries) {
+            entries.add(entry);
+            entryHome.put(entry, panel);
+        }
+    }
+
+    /**
+     * Add a single entry to the table.
+     * @param entry The entry to add.
+     * @param panel A reference to the BasePanel where the entry belongs.
+     */
+    public synchronized void addEntry(BibtexEntry entry, BasePanel panel) {
+        entries.add(entry);
+        entryHome.put(entry, panel);
+    }
+
+    /**
+     * Mouse listener for the entry table. Processes icon clicks to open external
+     * files or urls, as well as the opening of the context menu.
+     */
+    class TableClickListener extends MouseAdapter {
+
+        public void mouseReleased(MouseEvent e) {
+            if (e.isPopupTrigger()) {
+                processPopupTrigger(e);
+                return;
+            }
+        }
+
+        public void mousePressed(MouseEvent e) {
+            if (e.isPopupTrigger()) {
+                processPopupTrigger(e);
+                return;
+            }
+
+            // First find the row on which the user has clicked.
+            final int row = entryTable.rowAtPoint(e.getPoint());
+
+            // A double click on an entry should highlight the entry in its BasePanel:
+            if (e.getClickCount() == 2) {
+                // Get the selected entry:
+                BibtexEntry toShow = model.getElementAt(row);
+                // Look up which BasePanel it belongs to:
+                BasePanel p = entryHome.get(toShow);
+                // Show the correct tab in the main window:
+                frame.showBasePanel(p);
+                // Highlight the entry:
+                p.highlightEntry(toShow);
+            }
+        }
+
+        public void mouseClicked(MouseEvent e) {
+            if (e.isPopupTrigger()) {
+                processPopupTrigger(e);
+                return;
+            }
+            //if (e.)
+            final int col = entryTable.columnAtPoint(e.getPoint()),
+                    row = entryTable.rowAtPoint(e.getPoint());
+            if (col < PAD) {
+                BibtexEntry entry = sortedEntries.get(row);
+                BasePanel p = entryHome.get(entry);
+                switch (col) {
+                    case FILE_COL:
+                        Object o = entry.getField(GUIGlobals.FILE_FIELD);
+                        if (o != null) {
+                            FileListTableModel tableModel = new FileListTableModel();
+                            tableModel.setContent((String) o);
+                            if (tableModel.getRowCount() == 0)
+                                return;
+                            FileListEntry fl = tableModel.getEntry(0);
+                            (new ExternalFileMenuItem(frame, entry, "", fl.getLink(), null,
+                                p.metaData(), fl.getType())).actionPerformed(null);
+                        }
+                        break;
+                    case URL_COL:
+                        Object link = entry.getField("url");
+                        try {
+                            if (link != null)
+                                Util.openExternalViewer(p.metaData(), (String) link, "url");
+                        } catch (IOException ex) {
+                            ex.printStackTrace();
+                        }
+                        break;
+
+                }
+            }
+        }
+
+        /**
+         * If the user has signalled the opening of a context menu, the event
+         * gets redirected to this method. Here we open a file link menu if the
+         * user is pointing at a file link icon. Otherwise a general context
+         * menu should be shown.
+         * @param e The triggering mouse event.
+         */
+        public void processPopupTrigger(MouseEvent e) {
+            BibtexEntry entry = sortedEntries.get(entryTable.rowAtPoint(e.getPoint()));
+            BasePanel p = entryHome.get(entry);
+            int col = entryTable.columnAtPoint(e.getPoint());
+            JPopupMenu menu = new JPopupMenu();
+            int count = 0;
+
+            if (col == FILE_COL) {
+                // We use a FileListTableModel to parse the field content:
+                Object o = entry.getField(GUIGlobals.FILE_FIELD);
+                FileListTableModel fileList = new FileListTableModel();
+                fileList.setContent((String)o);
+                // If there are one or more links, open the first one:
+                for (int i=0; i<fileList.getRowCount(); i++) {
+                    FileListEntry flEntry = fileList.getEntry(i);
+                    String description = flEntry.getDescription();
+                    if ((description == null) || (description.trim().length() == 0))
+                        description = flEntry.getLink();
+                    menu.add(new ExternalFileMenuItem(p.frame(), entry, description,
+                            flEntry.getLink(), flEntry.getType().getIcon(), p.metaData(),
+                            flEntry.getType()));
+                    count++;
+                }
+
+            }
+
+            if (count > 0)
+                menu.show(entryTable, e.getX(), e.getY());
+        }
+    }
+
+    /**
+     * The listener for the Glazed list monitoring the current selection.
+     * When selection changes, we need to update the preview panel.
+     */
+    class EntrySelectionListener implements ListEventListener<BibtexEntry> {
+
+            public void listChanged(ListEvent<BibtexEntry> listEvent) {
+                if (listEvent.getSourceList().size() == 1) {
+                    BibtexEntry entry = listEvent.getSourceList().get(0);
+                    // Find out which BasePanel the selected entry belongs to:
+                    BasePanel p = entryHome.get(entry);
+                    // Update the preview's metadata reference:
+                    preview.setMetaData(p.metaData());
+                    // Update the preview's entry:
+                    preview.setEntry(entry);
+                    contentPane.setDividerLocation(0.5f);
+                    SwingUtilities.invokeLater(new Runnable() {
+                        public void run() {
+                            preview.scrollRectToVisible(toRect);
+                        }
+                    });
+                }
+            }
+        }
+
+    /**
+     * TableFormat for the table shown in the dialog. Handles the display of entry
+     * fields and icons for linked files and urls.
+     */
+    public class EntryTableFormat implements AdvancedTableFormat<BibtexEntry> {
+
+        public int getColumnCount() {
+            return PAD+fields.length;
+        }
+
+        public String getColumnName(int column) {
+            if (column >= PAD)
+                return Util.nCase(fields[column-PAD]);
+            else return "";
+        }
+
+        public Object getColumnValue(BibtexEntry entry, int column) {
+            if (column < PAD) {
+                Object o;
+                switch (column) {
+                    case FILE_COL:
+                        o = entry.getField(GUIGlobals.FILE_FIELD);
+                        if (o != null) {
+                            FileListTableModel model = new FileListTableModel();
+                            model.setContent((String) o);
+                            fileLabel.setToolTipText(model.getToolTipHTMLRepresentation());
+                            if (model.getRowCount() > 0)
+                                fileLabel.setIcon(model.getEntry(0).getType().getIcon());
+                            return fileLabel;
+                        } else
+                            return null;
+                    case URL_COL:
+                        o = entry.getField("url");
+                        if (o != null) {
+                            urlLabel.setToolTipText((String) o);
+                            return urlLabel;
+                        } else
+                            return null;
+                    default:
+                        return null;
+                }
+            }
+            else {
+                String field = fields[column-PAD];
+                if (field.equals("author") || field.equals("editor")) {
+                    // For name fields, tap into a MainTableFormat instance and use
+                    // the same name formatting as is used in the entry table:
+                    if (frame.basePanel() != null)
+                        return frame.basePanel().tableFormat.formatName
+                                (entry.getField(field));
+                }
+                return entry.getField(field);
+            }
+        }
+
+        public Class<?> getColumnClass(int i) {
+            if (i < PAD)
+                return JLabel.class;
+            else
+                return String.class;
+        }
+
+        public Comparator<?> getColumnComparator(int i) {
+            return null;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/SortTabsAction.java b/src/java/net/sf/jabref/gui/SortTabsAction.java
index 5a7ea06..89ece3b 100644
--- a/src/java/net/sf/jabref/gui/SortTabsAction.java
+++ b/src/java/net/sf/jabref/gui/SortTabsAction.java
@@ -1,63 +1,63 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import java.awt.event.ActionEvent;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.TreeMap;
-
-import javax.swing.JTabbedPane;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MnemonicAwareAction;
-
-/**
- * This action rearranges all tabs in the main tabbed pane of the given JabRefFrame
- * in alphabetical order.
- */
-public class SortTabsAction extends MnemonicAwareAction implements Comparator<String> {
-    private JabRefFrame frame;
-
-    public SortTabsAction(JabRefFrame frame) {
-        putValue(NAME, "Sort tabs");
-        putValue(SHORT_DESCRIPTION, Globals.lang("Rearrange tabs alphabetically by title"));
-        this.frame = frame;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        JTabbedPane tabbedPane = frame.getTabbedPane();
-       // Make a sorted Map that compares case-insensitively:
-        TreeMap<String, BasePanel> map = new TreeMap<String, BasePanel>(this);
-
-        for (int i=0; i<tabbedPane.getTabCount(); i++) {
-            BasePanel panel = (BasePanel)tabbedPane.getComponent(i);
-            map.put(tabbedPane.getTitleAt(i), panel);
-        }
-        tabbedPane.removeAll();
-        for (Iterator<String> i=map.keySet().iterator(); i.hasNext();) {
-            String title = i.next();
-            BasePanel panel = map.get(title);
-            tabbedPane.addTab(title, panel);
-        }
-    }
-
-    public int compare(String o1, String o2) {
-        return o1.toLowerCase().compareTo(o2.toLowerCase());
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import java.awt.event.ActionEvent;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.TreeMap;
+
+import javax.swing.JTabbedPane;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.MnemonicAwareAction;
+
+/**
+ * This action rearranges all tabs in the main tabbed pane of the given JabRefFrame
+ * in alphabetical order.
+ */
+public class SortTabsAction extends MnemonicAwareAction implements Comparator<String> {
+    private JabRefFrame frame;
+
+    public SortTabsAction(JabRefFrame frame) {
+        putValue(NAME, "Sort tabs");
+        putValue(SHORT_DESCRIPTION, Globals.lang("Rearrange tabs alphabetically by title"));
+        this.frame = frame;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        JTabbedPane tabbedPane = frame.getTabbedPane();
+       // Make a sorted Map that compares case-insensitively:
+        TreeMap<String, BasePanel> map = new TreeMap<String, BasePanel>(this);
+
+        for (int i=0; i<tabbedPane.getTabCount(); i++) {
+            BasePanel panel = (BasePanel)tabbedPane.getComponent(i);
+            map.put(tabbedPane.getTitleAt(i), panel);
+        }
+        tabbedPane.removeAll();
+        for (Iterator<String> i=map.keySet().iterator(); i.hasNext();) {
+            String title = i.next();
+            BasePanel panel = map.get(title);
+            tabbedPane.addTab(title, panel);
+        }
+    }
+
+    public int compare(String o1, String o2) {
+        return o1.toLowerCase().compareTo(o2.toLowerCase());
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/SysTray.java b/src/java/net/sf/jabref/gui/SysTray.java
index 697f46d..7a6f306 100644
--- a/src/java/net/sf/jabref/gui/SysTray.java
+++ b/src/java/net/sf/jabref/gui/SysTray.java
@@ -1,92 +1,92 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
-public class SysTray {
-
-    private JabRefFrame frame;
-    private TrayIcon icon;
-    private PopupMenu popup = new PopupMenu();
-    private MenuItem showWindow;
-    private SystemTray tray = null;
-
-    public SysTray(JabRefFrame frame) {
-        this.frame = frame;
-
-        final ActionListener showJabref = new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                SwingUtilities.invokeLater(new Runnable() {
-                    public void run() {
-                        SysTray.this.frame.showIfMinimizedToSysTray();
-                    }
-                });
-
-            }
-        };
-        showWindow = new MenuItem(Globals.lang("Show"));
-        showWindow.addActionListener(showJabref);
-        popup.add(showWindow);
-        ImageIcon imic = new ImageIcon(GUIGlobals.class.getResource("/images/JabRef-icon-48.png"));
-        icon = new TrayIcon(imic.getImage(), "JabRef", popup);
-        icon.setImageAutoSize(true);
-        icon.addMouseListener(new MouseAdapter() {
-            @Override
-            public void mouseClicked(MouseEvent mouseEvent) {
-                showJabref.actionPerformed(new ActionEvent(mouseEvent.getSource(), 0, ""));
-            }
-
-            @Override
-            public void mousePressed(MouseEvent mouseEvent) {
-                super.mousePressed(mouseEvent);    //To change body of overridden methods use File | Settings | File Templates.
-            }
-
-            @Override
-            public void mouseReleased(MouseEvent mouseEvent) {
-                super.mouseReleased(mouseEvent);    //To change body of overridden methods use File | Settings | File Templates.
-            }
-        });
-        if (SystemTray.isSupported())
-            tray = SystemTray.getSystemTray();
-    }
-
-    public void setTrayIconVisible(boolean visible) {
-        if (tray == null)
-            return;
-        try {
-            if (visible)
-                tray.add(icon);
-            else
-                tray.remove(icon);
-        } catch (AWTException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static void main(String[] args) {
-        System.out.println(SystemTray.isSupported());
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+public class SysTray {
+
+    private JabRefFrame frame;
+    private TrayIcon icon;
+    private PopupMenu popup = new PopupMenu();
+    private MenuItem showWindow;
+    private SystemTray tray = null;
+
+    public SysTray(JabRefFrame frame) {
+        this.frame = frame;
+
+        final ActionListener showJabref = new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                        SysTray.this.frame.showIfMinimizedToSysTray();
+                    }
+                });
+
+            }
+        };
+        showWindow = new MenuItem(Globals.lang("Show"));
+        showWindow.addActionListener(showJabref);
+        popup.add(showWindow);
+        ImageIcon imic = new ImageIcon(GUIGlobals.class.getResource("/images/JabRef-icon-48.png"));
+        icon = new TrayIcon(imic.getImage(), "JabRef", popup);
+        icon.setImageAutoSize(true);
+        icon.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mouseClicked(MouseEvent mouseEvent) {
+                showJabref.actionPerformed(new ActionEvent(mouseEvent.getSource(), 0, ""));
+            }
+
+            @Override
+            public void mousePressed(MouseEvent mouseEvent) {
+                super.mousePressed(mouseEvent);    //To change body of overridden methods use File | Settings | File Templates.
+            }
+
+            @Override
+            public void mouseReleased(MouseEvent mouseEvent) {
+                super.mouseReleased(mouseEvent);    //To change body of overridden methods use File | Settings | File Templates.
+            }
+        });
+        if (SystemTray.isSupported())
+            tray = SystemTray.getSystemTray();
+    }
+
+    public void setTrayIconVisible(boolean visible) {
+        if (tray == null)
+            return;
+        try {
+            if (visible)
+                tray.add(icon);
+            else
+                tray.remove(icon);
+        } catch (AWTException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        System.out.println(SystemTray.isSupported());
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/WaitForSaveOperation.java b/src/java/net/sf/jabref/gui/WaitForSaveOperation.java
index 8501ad6..83afe52 100644
--- a/src/java/net/sf/jabref/gui/WaitForSaveOperation.java
+++ b/src/java/net/sf/jabref/gui/WaitForSaveOperation.java
@@ -1,93 +1,93 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-/**
- * Dialog shown when closing of application needs to wait for a save operation to finish.
- */
-public class WaitForSaveOperation implements ActionListener {
-
-    JabRefFrame frame;
-    JDialog diag;
-    JProgressBar prog;
-    JButton cancel;
-    Timer t = new Timer(500, this);
-    boolean cancelled = false;
-
-    public WaitForSaveOperation(JabRefFrame frame) {
-        this.frame = frame;
-
-        cancel = new JButton(Globals.lang("Cancel"));
-        prog = new JProgressBar(0);
-        prog.setIndeterminate(true);
-        prog.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        diag = new JDialog(frame, Globals.lang("Please wait"), true);
-
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(cancel);
-        bb.addGlue();
-        cancel.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                cancelled = true;
-                t.stop();
-                diag.dispose();
-            }
-        });
-
-        JLabel message = new JLabel(Globals.lang("Waiting for save operation to finish")+"...");
-        message.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        
-        diag.getContentPane().add(message, BorderLayout.NORTH);
-        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-        diag.getContentPane().add(prog, BorderLayout.CENTER);
-        diag.pack();
-    }
-
-    public void show() {
-        diag.setLocationRelativeTo(frame);
-        t.start();
-        diag.setVisible(true);
-
-    }
-
-    public boolean cancelled() {
-        return cancelled;
-    }
-
-    public void actionPerformed(ActionEvent actionEvent) {
-        boolean anySaving = false;
-        for (int i=0; i<frame.baseCount(); i++) {
-            if (frame.baseAt(i).isSaving()) {
-                anySaving = true;
-                break;
-            }
-        }
-        if (!anySaving) {
-            t.stop();
-            diag.dispose();
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+/**
+ * Dialog shown when closing of application needs to wait for a save operation to finish.
+ */
+public class WaitForSaveOperation implements ActionListener {
+
+    JabRefFrame frame;
+    JDialog diag;
+    JProgressBar prog;
+    JButton cancel;
+    Timer t = new Timer(500, this);
+    boolean cancelled = false;
+
+    public WaitForSaveOperation(JabRefFrame frame) {
+        this.frame = frame;
+
+        cancel = new JButton(Globals.lang("Cancel"));
+        prog = new JProgressBar(0);
+        prog.setIndeterminate(true);
+        prog.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        diag = new JDialog(frame, Globals.lang("Please wait"), true);
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(cancel);
+        bb.addGlue();
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                cancelled = true;
+                t.stop();
+                diag.dispose();
+            }
+        });
+
+        JLabel message = new JLabel(Globals.lang("Waiting for save operation to finish")+"...");
+        message.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        
+        diag.getContentPane().add(message, BorderLayout.NORTH);
+        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        diag.getContentPane().add(prog, BorderLayout.CENTER);
+        diag.pack();
+    }
+
+    public void show() {
+        diag.setLocationRelativeTo(frame);
+        t.start();
+        diag.setVisible(true);
+
+    }
+
+    public boolean cancelled() {
+        return cancelled;
+    }
+
+    public void actionPerformed(ActionEvent actionEvent) {
+        boolean anySaving = false;
+        for (int i=0; i<frame.baseCount(); i++) {
+            if (frame.baseAt(i).isSaving()) {
+                anySaving = true;
+                break;
+            }
+        }
+        if (!anySaving) {
+            t.stop();
+            diag.dispose();
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/gui/components/JPanelXBox.java b/src/java/net/sf/jabref/gui/components/JPanelXBox.java
index 00d1968..1b3a83c 100644
--- a/src/java/net/sf/jabref/gui/components/JPanelXBox.java
+++ b/src/java/net/sf/jabref/gui/components/JPanelXBox.java
@@ -1,35 +1,35 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui.components;
-
-import java.awt.Component;
-import javax.swing.BoxLayout;
-import javax.swing.JPanel;
-
-/**
- * A JPanel that by default uses a BoxLayout.X_AXIS
- */
-public class JPanelXBox extends JPanel {
-	/** Create the panel and set BoxLayout.X_AXIS */
-	public JPanelXBox() {
-		super();
-		setLayout(new BoxLayout(this,BoxLayout.X_AXIS));
-	}
-	public JPanelXBox(Component comp) {
-		this();
-		add(comp);
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui.components;
+
+import java.awt.Component;
+import javax.swing.BoxLayout;
+import javax.swing.JPanel;
+
+/**
+ * A JPanel that by default uses a BoxLayout.X_AXIS
+ */
+public class JPanelXBox extends JPanel {
+	/** Create the panel and set BoxLayout.X_AXIS */
+	public JPanelXBox() {
+		super();
+		setLayout(new BoxLayout(this,BoxLayout.X_AXIS));
+	}
+	public JPanelXBox(Component comp) {
+		this();
+		add(comp);
+	}
+}
diff --git a/src/java/net/sf/jabref/gui/components/JPanelXBoxLeftJustify.java b/src/java/net/sf/jabref/gui/components/JPanelXBoxLeftJustify.java
index da1684b..25e3dc1 100644
--- a/src/java/net/sf/jabref/gui/components/JPanelXBoxLeftJustify.java
+++ b/src/java/net/sf/jabref/gui/components/JPanelXBoxLeftJustify.java
@@ -1,33 +1,33 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui.components;
-
-import java.awt.Component;
-import javax.swing.JPanel;
-
-public class JPanelXBoxLeftJustify extends JPanelXBox {
-	public JPanelXBoxLeftJustify() {
-		super();
-		add(new JPanel()); // padding
-	}
-	public JPanelXBoxLeftJustify(Component c) {
-		this();
-		add(c);
-	}
-	public Component add(Component c) {
-		return super.add(c,Math.max(0,getComponentCount()-1));
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui.components;
+
+import java.awt.Component;
+import javax.swing.JPanel;
+
+public class JPanelXBoxLeftJustify extends JPanelXBox {
+	public JPanelXBoxLeftJustify() {
+		super();
+		add(new JPanel()); // padding
+	}
+	public JPanelXBoxLeftJustify(Component c) {
+		this();
+		add(c);
+	}
+	public Component add(Component c) {
+		return super.add(c,Math.max(0,getComponentCount()-1));
+	}
+}
diff --git a/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredHeight.java b/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredHeight.java
index cad7f26..1bc2e4a 100644
--- a/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredHeight.java
+++ b/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredHeight.java
@@ -1,33 +1,33 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui.components;
-
-import java.awt.Component;
-import java.awt.Dimension;
-
-public class JPanelXBoxPreferredHeight extends JPanelXBox {
-	public JPanelXBoxPreferredHeight() {
-		// nothing special
-	}
-	public JPanelXBoxPreferredHeight(Component c) {
-		add(c);
-	}
-	public Dimension getMaximumSize() {
-		Dimension pref = getPreferredSize();
-		pref.width = super.getMaximumSize().width;
-		return pref;				
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui.components;
+
+import java.awt.Component;
+import java.awt.Dimension;
+
+public class JPanelXBoxPreferredHeight extends JPanelXBox {
+	public JPanelXBoxPreferredHeight() {
+		// nothing special
+	}
+	public JPanelXBoxPreferredHeight(Component c) {
+		add(c);
+	}
+	public Dimension getMaximumSize() {
+		Dimension pref = getPreferredSize();
+		pref.width = super.getMaximumSize().width;
+		return pref;				
+	}
+}
diff --git a/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredSize.java b/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredSize.java
index f2e7564..27cb0c0 100644
--- a/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredSize.java
+++ b/src/java/net/sf/jabref/gui/components/JPanelXBoxPreferredSize.java
@@ -1,31 +1,31 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui.components;
-
-import java.awt.Component;
-import java.awt.Dimension;
-
-public class JPanelXBoxPreferredSize extends JPanelXBox {
-	public JPanelXBoxPreferredSize() {
-		// nothing special
-	}
-	public JPanelXBoxPreferredSize(Component c) {
-		add(c);
-	}
-	public Dimension getMaximumSize() {
-		return getPreferredSize();
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui.components;
+
+import java.awt.Component;
+import java.awt.Dimension;
+
+public class JPanelXBoxPreferredSize extends JPanelXBox {
+	public JPanelXBoxPreferredSize() {
+		// nothing special
+	}
+	public JPanelXBoxPreferredSize(Component c) {
+		add(c);
+	}
+	public Dimension getMaximumSize() {
+		return getPreferredSize();
+	}
+}
diff --git a/src/java/net/sf/jabref/gui/components/JPanelYBox.java b/src/java/net/sf/jabref/gui/components/JPanelYBox.java
index 8a1c83e..be2a738 100644
--- a/src/java/net/sf/jabref/gui/components/JPanelYBox.java
+++ b/src/java/net/sf/jabref/gui/components/JPanelYBox.java
@@ -1,29 +1,29 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui.components;
-
-import javax.swing.BoxLayout;
-import javax.swing.JPanel;
-
-/**
- * A JPanel that by default uses a BoxLayout.Y_AXIS
- */
-public class JPanelYBox extends JPanel {
-	/** Create the panel and set BoxLayout.Y_AXIS */
-	public JPanelYBox() {
-		setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui.components;
+
+import javax.swing.BoxLayout;
+import javax.swing.JPanel;
+
+/**
+ * A JPanel that by default uses a BoxLayout.Y_AXIS
+ */
+public class JPanelYBox extends JPanel {
+	/** Create the panel and set BoxLayout.Y_AXIS */
+	public JPanelYBox() {
+		setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
+	}
+}
diff --git a/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredHeight.java b/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredHeight.java
index f69eaf5..3458601 100644
--- a/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredHeight.java
+++ b/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredHeight.java
@@ -1,26 +1,26 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui.components;
-
-import java.awt.Dimension;
-
-public class JPanelYBoxPreferredHeight extends JPanelYBox {
-	public Dimension getMaximumSize() {
-		Dimension pref = getPreferredSize();
-		pref.width = super.getMaximumSize().width;
-		return pref;				
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui.components;
+
+import java.awt.Dimension;
+
+public class JPanelYBoxPreferredHeight extends JPanelYBox {
+	public Dimension getMaximumSize() {
+		Dimension pref = getPreferredSize();
+		pref.width = super.getMaximumSize().width;
+		return pref;				
+	}
+}
diff --git a/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredSize.java b/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredSize.java
index 6fe9a60..1105786 100644
--- a/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredSize.java
+++ b/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredSize.java
@@ -1,31 +1,31 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui.components;
-
-import java.awt.Component;
-import java.awt.Dimension;
-
-public class JPanelYBoxPreferredSize extends JPanelYBox {
-	public JPanelYBoxPreferredSize() {
-		// nothing special
-	}
-	public JPanelYBoxPreferredSize(Component c) {
-		add(c);
-	}
-	public Dimension getMaximumSize() {
-		return getPreferredSize();
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui.components;
+
+import java.awt.Component;
+import java.awt.Dimension;
+
+public class JPanelYBoxPreferredSize extends JPanelYBox {
+	public JPanelYBoxPreferredSize() {
+		// nothing special
+	}
+	public JPanelYBoxPreferredSize(Component c) {
+		add(c);
+	}
+	public Dimension getMaximumSize() {
+		return getPreferredSize();
+	}
+}
diff --git a/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredWidth.java b/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredWidth.java
index 3fd74eb..dd6e578 100644
--- a/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredWidth.java
+++ b/src/java/net/sf/jabref/gui/components/JPanelYBoxPreferredWidth.java
@@ -1,26 +1,26 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.gui.components;
-
-import java.awt.Dimension;
-
-public class JPanelYBoxPreferredWidth extends JPanelYBox {
-	public Dimension getMaximumSize() {
-		Dimension pref = getPreferredSize();
-		pref.height = super.getMaximumSize().height;
-		return pref;				
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.gui.components;
+
+import java.awt.Dimension;
+
+public class JPanelYBoxPreferredWidth extends JPanelYBox {
+	public Dimension getMaximumSize() {
+		Dimension pref = getPreferredSize();
+		pref.height = super.getMaximumSize().height;
+		return pref;				
+	}
+}
diff --git a/src/java/net/sf/jabref/gui/date/DatePickerButton.java b/src/java/net/sf/jabref/gui/date/DatePickerButton.java
index acf35ca..3b0bcb9 100644
--- a/src/java/net/sf/jabref/gui/date/DatePickerButton.java
+++ b/src/java/net/sf/jabref/gui/date/DatePickerButton.java
@@ -1,62 +1,62 @@
-/*  Copyright (C) 2003-2011 Raik Nagel
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// function : wrapper and service class for the DatePicker handling at the
-//            EntryEditor
-
-package net.sf.jabref.gui.date ;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Date;
-
-import javax.swing.JComponent;
-import javax.swing.JPanel;
-
-import net.sf.jabref.FieldEditor;
-import net.sf.jabref.FocusRequester;
-import net.sf.jabref.Util;
-
-import com.michaelbaranov.microba.calendar.DatePicker;
-
-public class DatePickerButton implements ActionListener {
-    private DatePicker datePicker = new DatePicker();
-    private JPanel panel = new JPanel();
-    private FieldEditor editor;
-
-    public DatePickerButton(FieldEditor pEditor) {
-        datePicker.showButtonOnly(true);
-        datePicker.addActionListener(this);
-        datePicker.setShowTodayButton(true);
-        panel.setLayout(new BorderLayout());
-        panel.add(datePicker, BorderLayout.WEST);
-        editor = pEditor;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        Date date = datePicker.getDate();
-        if (date != null) {
-            editor.setText(Util.easyDateFormat(date));
-            // Set focus to editor component after changing its text:
-            new FocusRequester(editor.getTextComponent());
-        }
-    }
-
-    public JComponent getDatePicker() {
-        //return datePicker;
-        return panel;
-    }
-}
+/*  Copyright (C) 2003-2011 Raik Nagel
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// function : wrapper and service class for the DatePicker handling at the
+//            EntryEditor
+
+package net.sf.jabref.gui.date ;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Date;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+
+import net.sf.jabref.FieldEditor;
+import net.sf.jabref.FocusRequester;
+import net.sf.jabref.Util;
+
+import com.michaelbaranov.microba.calendar.DatePicker;
+
+public class DatePickerButton implements ActionListener {
+    private DatePicker datePicker = new DatePicker();
+    private JPanel panel = new JPanel();
+    private FieldEditor editor;
+
+    public DatePickerButton(FieldEditor pEditor) {
+        datePicker.showButtonOnly(true);
+        datePicker.addActionListener(this);
+        datePicker.setShowTodayButton(true);
+        panel.setLayout(new BorderLayout());
+        panel.add(datePicker, BorderLayout.WEST);
+        editor = pEditor;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        Date date = datePicker.getDate();
+        if (date != null) {
+            editor.setText(Util.easyDateFormat(date));
+            // Set focus to editor component after changing its text:
+            new FocusRequester(editor.getTextComponent());
+        }
+    }
+
+    public JComponent getDatePicker() {
+        //return datePicker;
+        return panel;
+    }
+}
diff --git a/src/java/net/sf/jabref/help/HTMLParagraphView.java b/src/java/net/sf/jabref/help/HTMLParagraphView.java
new file mode 100644
index 0000000..cae8239
--- /dev/null
+++ b/src/java/net/sf/jabref/help/HTMLParagraphView.java
@@ -0,0 +1,30 @@
+package net.sf.jabref.help;
+
+import javax.swing.text.Element;
+import javax.swing.text.FlowView;
+import javax.swing.text.View;
+import javax.swing.text.html.ParagraphView;
+
+class HTMLParagraphView extends ParagraphView {
+
+    public static int MAX_VIEW_SIZE=100;
+
+       public HTMLParagraphView(Element elem) {
+           super(elem);
+           strategy = new HTMLParagraphView.HTMLFlowStrategy();
+       }
+
+       public static class HTMLFlowStrategy extends FlowStrategy {
+           protected View createView(FlowView fv, int startOffset, int spanLeft, int rowIndex) {
+               View res=super.createView(fv, startOffset, spanLeft, rowIndex);
+               if (res.getEndOffset()-res.getStartOffset()> MAX_VIEW_SIZE) {
+                   res = res.createFragment(startOffset, startOffset+ MAX_VIEW_SIZE);
+               }
+               return res;
+           }
+
+       }
+       public int getResizeWeight(int axis) {
+           return 0;
+       }
+}
diff --git a/src/java/net/sf/jabref/HelpAction.java b/src/java/net/sf/jabref/help/HelpAction.java
similarity index 93%
rename from src/java/net/sf/jabref/HelpAction.java
rename to src/java/net/sf/jabref/help/HelpAction.java
index 7c8c4fa..816bc5d 100644
--- a/src/java/net/sf/jabref/HelpAction.java
+++ b/src/java/net/sf/jabref/help/HelpAction.java
@@ -1,107 +1,111 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.net.URL;
-
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.KeyStroke;
-
-/**
- * This Action keeps a reference to a URL. When activated, it shows the help
- * Dialog unless it is already visible, and shows the URL in it.
- */
-public class HelpAction extends MnemonicAwareAction {
-
-	protected HelpDialog diag;
-
-    protected Class resourceOwner = null;
-
-	protected String helpFile;
-
-	public HelpAction(HelpDialog diag, String helpFile) {
-		super(GUIGlobals.getImage("help"));
-		putValue(NAME, "Help");
-		this.diag = diag;
-		this.helpFile = helpFile;
-	}
-
-	public HelpAction(HelpDialog diag, String helpFile, String tooltip) {
-		super(GUIGlobals.getImage("help"));
-		putValue(NAME, "Help");
-		putValue(SHORT_DESCRIPTION, Globals.lang(tooltip));
-		this.diag = diag;
-		this.helpFile = helpFile;
-	}
-
-	public HelpAction(HelpDialog diag, String helpFile, String tooltip, URL iconFile) {
-		super(new ImageIcon(iconFile));
-		putValue(NAME, "Help");
-		putValue(SHORT_DESCRIPTION, Globals.lang(tooltip));
-		this.diag = diag;
-		this.helpFile = helpFile;
-	}
-
-	public HelpAction(String title, HelpDialog diag, String helpFile, String tooltip) {
-		super(GUIGlobals.getImage("help"));
-		putValue(NAME, title);
-		putValue(SHORT_DESCRIPTION, Globals.lang(tooltip));
-		this.diag = diag;
-		this.helpFile = helpFile;
-	}
-
-	public HelpAction(String title, HelpDialog diag, String helpFile, String tooltip, KeyStroke key) {
-		super(GUIGlobals.getImage("help"));
-		putValue(NAME, title);
-		putValue(SHORT_DESCRIPTION, Globals.lang(tooltip));
-		putValue(ACCELERATOR_KEY, key);
-		this.diag = diag;
-		this.helpFile = helpFile;
-	}
-
-	public HelpAction(String title, HelpDialog diag, String helpFile, String tooltip, URL iconFile) {
-		super(new ImageIcon(iconFile));
-		putValue(NAME, title);
-		putValue(SHORT_DESCRIPTION, Globals.lang(tooltip));
-		this.diag = diag;
-		this.helpFile = helpFile;
-	}
-
-    public void setResourceOwner(Class resourceOwner) {
-        this.resourceOwner = resourceOwner;
-    }
-
-	public JButton getIconButton() {
-		JButton hlp = new JButton(this);
-		hlp.setText(null);
-		hlp.setPreferredSize(new Dimension(24, 24));
-		return hlp;
-	}
-
-    public void setHelpFile(String helpFile) {
-        this.helpFile = helpFile;
-    }
-
-	public void actionPerformed(ActionEvent e) {
-        if (resourceOwner == null)
-		    diag.showPage(helpFile);
-        else
-            diag.showPage(helpFile, resourceOwner);
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.help;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.net.URL;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.KeyStroke;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.MnemonicAwareAction;
+
+/**
+ * This Action keeps a reference to a URL. When activated, it shows the help
+ * Dialog unless it is already visible, and shows the URL in it.
+ */
+public class HelpAction extends MnemonicAwareAction {
+
+	protected HelpDialog diag;
+
+    protected Class resourceOwner = null;
+
+	protected String helpFile;
+
+	public HelpAction(HelpDialog diag, String helpFile) {
+		super(GUIGlobals.getImage("help"));
+		putValue(NAME, "Help");
+		this.diag = diag;
+		this.helpFile = helpFile;
+	}
+
+	public HelpAction(HelpDialog diag, String helpFile, String tooltip) {
+		super(GUIGlobals.getImage("help"));
+		putValue(NAME, "Help");
+		putValue(SHORT_DESCRIPTION, Globals.lang(tooltip));
+		this.diag = diag;
+		this.helpFile = helpFile;
+	}
+
+	public HelpAction(HelpDialog diag, String helpFile, String tooltip, URL iconFile) {
+		super(new ImageIcon(iconFile));
+		putValue(NAME, "Help");
+		putValue(SHORT_DESCRIPTION, Globals.lang(tooltip));
+		this.diag = diag;
+		this.helpFile = helpFile;
+	}
+
+	public HelpAction(String title, HelpDialog diag, String helpFile, String tooltip) {
+		super(GUIGlobals.getImage("help"));
+		putValue(NAME, title);
+		putValue(SHORT_DESCRIPTION, Globals.lang(tooltip));
+		this.diag = diag;
+		this.helpFile = helpFile;
+	}
+
+	public HelpAction(String title, HelpDialog diag, String helpFile, String tooltip, KeyStroke key) {
+		super(GUIGlobals.getImage("help"));
+		putValue(NAME, title);
+		putValue(SHORT_DESCRIPTION, Globals.lang(tooltip));
+		putValue(ACCELERATOR_KEY, key);
+		this.diag = diag;
+		this.helpFile = helpFile;
+	}
+
+	public HelpAction(String title, HelpDialog diag, String helpFile, String tooltip, URL iconFile) {
+		super(new ImageIcon(iconFile));
+		putValue(NAME, title);
+		putValue(SHORT_DESCRIPTION, Globals.lang(tooltip));
+		this.diag = diag;
+		this.helpFile = helpFile;
+	}
+
+    public void setResourceOwner(Class resourceOwner) {
+        this.resourceOwner = resourceOwner;
+    }
+
+	public JButton getIconButton() {
+		JButton hlp = new JButton(this);
+		hlp.setText(null);
+		hlp.setPreferredSize(new Dimension(24, 24));
+		return hlp;
+	}
+
+    public void setHelpFile(String helpFile) {
+        this.helpFile = helpFile;
+    }
+
+	public void actionPerformed(ActionEvent e) {
+        if (resourceOwner == null)
+		    diag.showPage(helpFile);
+        else
+            diag.showPage(helpFile, resourceOwner);
+	}
+}
diff --git a/src/java/net/sf/jabref/HelpContent.java b/src/java/net/sf/jabref/help/HelpContent.java
similarity index 70%
rename from src/java/net/sf/jabref/HelpContent.java
rename to src/java/net/sf/jabref/help/HelpContent.java
index 3297cef..746ebaa 100644
--- a/src/java/net/sf/jabref/HelpContent.java
+++ b/src/java/net/sf/jabref/help/HelpContent.java
@@ -1,229 +1,168 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.Point;
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.Stack;
-
-import javax.swing.*;
-import javax.swing.event.HyperlinkEvent;
-import javax.swing.event.HyperlinkListener;
-import javax.swing.text.DefaultEditorKit;
-import javax.swing.text.JTextComponent;
-import javax.swing.text.TextAction;
-import javax.swing.text.html.HTMLEditorKit;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-public class HelpContent extends JTextPane {
-
-	static Log log = LogFactory.getLog(HelpContent.class);
-	
-	JScrollPane pane;
-
-	private Stack<URL> history, forw;
-
-	JabRefPreferences prefs;
-
-	public HelpContent(JabRefPreferences prefs_) {
-		super();
-		pane = new JScrollPane(this, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-			JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-		pane.setDoubleBuffered(true);
-		prefs = prefs_;
-		history = new Stack<URL>();
-		forw = new Stack<URL>();
-		setEditorKitForContentType("text/html", new MyEditorKit());
-		setContentType("text/html");
-		setText("");
-		setEditable(false);
-		
-		// Handles Anchors
-		final HyperlinkListener hyperLinkListener = new HyperlinkListener() {
-			public void hyperlinkUpdate(final HyperlinkEvent e) {
-				if (e.getDescription().startsWith("#")) {
-					scrollToReference(e.getDescription().substring(1));
-				}
-			}
-		};
-		addHyperlinkListener(hyperLinkListener);
-	}
-
-	public boolean back() {
-		if (!history.empty()) {
-			URL prev = (history.pop());
-			forw.push(getPage());
-			setPageOnly(prev);
-		}
-		return !history.empty();
-	}
-
-	public boolean forward() {
-		if (!forw.empty()) {
-			URL next = (forw.pop());
-			history.push(getPage());
-			setPageOnly(next);
-		}
-		return !forw.empty();
-	}
-
-	public void reset() {
-		forw.removeAllElements();
-		history.removeAllElements();
-	}
-
-	public void setPage(String filename, Class resourceOwner) {
-		
-		// Check for anchor
-		int indexOf = filename.indexOf('#');
-		String file;
-		String reference;
-		
-		if (indexOf != -1) {
-			file = filename.substring(0, indexOf);
-			reference = filename.substring(indexOf + 1);
-		} else {
-			file = filename;
-			reference = "";
-		}
-		
-		String middle = prefs.get("language") + "/";
-		if (middle.equals("en/"))
-			middle = ""; // english in base help dir.
-
-        URL old = getPage();
-		try {
-			// First check in specified language
-			URL resource = resourceOwner.getResource(GUIGlobals.helpPre + middle + file);
-            
-			// If not available fallback to english
-			if (resource == null) {
-            	resource = resourceOwner.getResource(GUIGlobals.helpPre + file);
-            }
-			
-			// If still not available print a warning
-            if (resource == null){
-            	// TODO show warning to user
-            	log.error("Could not find html-help for file '" + file + "'.");
-            	return;
-            }
-            setPageOnly(new URL(resource.toString() + "#" + reference));
-            
-        } catch (IOException ex) {
-            ex.printStackTrace();
-		}
-
-		forw.removeAllElements();
-		if (old != null)
-			history.push(old);
-
-	}
-
-	/**
-	 * Convenience method for setPage(String)
-	 */
-	public void setPage(URL url) {
-		File f = new File(url.getPath());
-		setPage(f.getName(), JabRef.class);
-	}
-
-	private void setPageOnly(URL url) {
-		try {
-			super.setPage(url);
-		} catch (IOException ex) {
-			if (url == null) {
-				System.out.println("Error: Help file not set");
-			} else {
-				System.out.println("Error: Help file not found '" + url.getFile() + "'");
-			}
-		}
-	}
-
-	public JComponent getPane() {
-		return pane;
-	}
-
-	/*public void paintComponent(Graphics g) {
-		Graphics2D g2 = (Graphics2D) g;
-		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-		g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
-		super.paintComponent(g2);
-	}*/
-
-	public class MyNextVisualPositionAction extends TextAction {
-		private Action textActn;
-
-		private int direction;
-
-		private MyNextVisualPositionAction(Action textActn, int direction) {
-			super((String) textActn.getValue(Action.NAME));
-			this.textActn = textActn;
-			this.direction = direction;
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			JTextComponent c = getTextComponent(e);
-
-			if (c.getParent() instanceof JViewport) {
-				JViewport viewport = (JViewport) c.getParent();
-				Point p = viewport.getViewPosition();
-
-				if (this.direction == SwingConstants.NORTH) {
-					c.setCaretPosition(c.viewToModel(p));
-				} else {
-					p.y += viewport.getExtentSize().height;
-					c.setCaretPosition(c.viewToModel(p));
-				}
-			}
-
-			textActn.actionPerformed(e);
-		}
-	}
-
-	public class MyEditorKit extends HTMLEditorKit {
-		private Action[] myActions;
-
-		public Action[] getActions() {
-			if (myActions == null) {
-				Action[] actions = super.getActions();
-				Action[] newActions = new Action[2];
-
-				for (int i = 0; i < actions.length; i++) {
-					Action actn = actions[i];
-
-					String name = (String) actn.getValue(Action.NAME);
-
-					if (name.equals(DefaultEditorKit.upAction)) {
-						newActions[0] = new MyNextVisualPositionAction(actions[i],
-							SwingConstants.NORTH);
-					} else if (name.equals(DefaultEditorKit.downAction)) {
-						newActions[1] = new MyNextVisualPositionAction(actions[i],
-							SwingConstants.SOUTH);
-					}
-				}
-
-				myActions = TextAction.augmentList(actions, newActions);
-			}
-
-			return myActions;
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.help;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Stack;
+
+import javax.swing.*;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.JabRefPreferences;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class HelpContent extends JTextPane {
+
+	static Log log = LogFactory.getLog(HelpContent.class);
+	
+	JScrollPane pane;
+
+	private Stack<URL> history, forw;
+
+	JabRefPreferences prefs;
+
+	public HelpContent(JabRefPreferences prefs_) {
+		super();
+		pane = new JScrollPane(this, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+			JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+		pane.setDoubleBuffered(true);
+		prefs = prefs_;
+		history = new Stack<URL>();
+		forw = new Stack<URL>();
+		setEditorKitForContentType("text/html", new MyEditorKit());
+		setContentType("text/html");
+		setText("");
+		setEditable(false);
+		
+		// Handles Anchors
+		final HyperlinkListener hyperLinkListener = new HyperlinkListener() {
+			public void hyperlinkUpdate(final HyperlinkEvent e) {
+				if (e.getDescription().startsWith("#")) {
+					scrollToReference(e.getDescription().substring(1));
+				}
+			}
+		};
+		addHyperlinkListener(hyperLinkListener);
+	}
+
+	public boolean back() {
+		if (!history.empty()) {
+			URL prev = (history.pop());
+			forw.push(getPage());
+			setPageOnly(prev);
+		}
+		return !history.empty();
+	}
+
+	public boolean forward() {
+		if (!forw.empty()) {
+			URL next = (forw.pop());
+			history.push(getPage());
+			setPageOnly(next);
+		}
+		return !forw.empty();
+	}
+
+	public void reset() {
+		forw.removeAllElements();
+		history.removeAllElements();
+	}
+
+	public void setPage(String filename, Class resourceOwner) {
+		
+		// Check for anchor
+		int indexOf = filename.indexOf('#');
+		String file;
+		String reference;
+		
+		if (indexOf != -1) {
+			file = filename.substring(0, indexOf);
+			reference = filename.substring(indexOf + 1);
+		} else {
+			file = filename;
+			reference = "";
+		}
+		
+		String middle = prefs.get("language") + "/";
+		if (middle.equals("en/"))
+			middle = ""; // english in base help dir.
+
+        URL old = getPage();
+		try {
+			// First check in specified language
+			URL resource = resourceOwner.getResource(GUIGlobals.helpPre + middle + file);
+            
+			// If not available fallback to english
+			if (resource == null) {
+            	resource = resourceOwner.getResource(GUIGlobals.helpPre + file);
+            }
+			
+			// If still not available print a warning
+            if (resource == null){
+            	// TODO show warning to user
+            	log.error("Could not find html-help for file '" + file + "'.");
+            	return;
+            }
+            setPageOnly(new URL(resource.toString() + "#" + reference));
+            
+        } catch (IOException ex) {
+            ex.printStackTrace();
+		}
+
+		forw.removeAllElements();
+		if (old != null)
+			history.push(old);
+
+	}
+
+	/**
+	 * Convenience method for setPage(String)
+	 */
+	public void setPage(URL url) {
+		File f = new File(url.getPath());
+		setPage(f.getName(), JabRef.class);
+	}
+
+	private void setPageOnly(URL url) {
+		try {
+			super.setPage(url);
+		} catch (IOException ex) {
+			if (url == null) {
+				System.out.println("Error: Help file not set");
+			} else {
+				System.out.println("Error: Help file not found '" + url.getFile() + "'");
+			}
+		}
+	}
+
+	public JComponent getPane() {
+		return pane;
+	}
+
+	/*public void paintComponent(Graphics g) {
+		Graphics2D g2 = (Graphics2D) g;
+		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+		super.paintComponent(g2);
+	}*/
+
+}
diff --git a/src/java/net/sf/jabref/HelpDialog.java b/src/java/net/sf/jabref/help/HelpDialog.java
similarity index 85%
rename from src/java/net/sf/jabref/HelpDialog.java
rename to src/java/net/sf/jabref/help/HelpDialog.java
index 0615cb1..f0a52f5 100644
--- a/src/java/net/sf/jabref/HelpDialog.java
+++ b/src/java/net/sf/jabref/help/HelpDialog.java
@@ -1,155 +1,161 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-
-import javax.swing.*;
-import javax.swing.event.HyperlinkEvent;
-import javax.swing.event.HyperlinkListener;
-
-/**
- * 
- * This is a non-modal help Dialog. The contents of the help is specified by
- * calling showPage().
- * 
- * @version $Revision$ ($Date$)
- * 
- */
-public class HelpDialog extends JDialog implements HyperlinkListener {
-
-	private JabRefFrame frame;
-
-	private HelpContent content;
-
-	private BackAction back = new BackAction();
-
-	private ForwardAction forward = new ForwardAction();
-
-	private ContentsAction contents = new ContentsAction();
-
-	// Initializes, but does not show the help dialog.
-	public HelpDialog(JabRefFrame bf) {
-		super(bf, Globals.lang("JabRef help"), false);
-		frame = bf;
-		content = new HelpContent(bf.prefs);
-		content.addHyperlinkListener(this);
-		setSize(GUIGlobals.helpSize);
-
-		JToolBar tlb = new JToolBar();
-		tlb.add(back);
-		tlb.add(forward);
-		tlb.addSeparator();
-		tlb.add(contents);
-		tlb.setFloatable(false);
-
-		// Make ESC close dialog, and set shortkeys for back and forward.
-		InputMap im = tlb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-		ActionMap am = tlb.getActionMap();
-		im.put(bf.prefs.getKey("Close dialog"), "close");
-		am.put("close", new CloseAction());
-		im.put(bf.prefs.getKey("Back, help dialog"), "left");
-		am.put("left", back);
-		im.put(bf.prefs.getKey("Forward, help dialog"), "right");
-		am.put("right", forward);
-
-		// Set shortkeys for back and forward specifically for the EditorPane.
-		im = content.getInputMap(JComponent.WHEN_FOCUSED);
-		am = content.getActionMap();
-		im.put(bf.prefs.getKey("Back, help dialog"), "left");
-		am.put("left", back);
-		im.put(bf.prefs.getKey("Forward, help dialog"), "right");
-		am.put("right", forward);
-
-		getContentPane().add(tlb, BorderLayout.NORTH);
-		getContentPane().add(content.getPane());
-		forward.setEnabled(false);
-		back.setEnabled(false);
-	}
-
-    public void showPage(String url) {
-        showPage(url, JabRef.class);
-    }
-
-	public void showPage(String url, Class resourceOwner) {
-		if (!isVisible()) {
-			Util.placeDialog(this, frame);
-			content.reset();
-			back.setEnabled(false);
-			setVisible(true);
-		} else {
-			back.setEnabled(true);
-		}
-		forward.setEnabled(false);
-		content.setPage(url, resourceOwner);
-		content.requestFocus();
-	}
-
-	public void hyperlinkUpdate(HyperlinkEvent e) {
-		if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
-			content.setPage(e.getURL());
-			back.setEnabled(true);
-			forward.setEnabled(false);
-		}
-	}
-
-	class CloseAction extends AbstractAction {
-		public CloseAction() {
-			super(Globals.lang("Close"));
-			// , new ImageIcon(GUIGlobals.closeIconFile));
-			putValue(SHORT_DESCRIPTION, Globals.lang("Close the help window"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			dispose();
-		}
-	}
-
-	class BackAction extends AbstractAction {
-		public BackAction() {
-			super("Back", GUIGlobals.getImage("left"));
-			// putValue(SHORT_DESCRIPTION, "Show the previous page");
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			setEnabled(content.back());
-			forward.setEnabled(true);
-		}
-	}
-
-	class ForwardAction extends AbstractAction {
-		public ForwardAction() {
-			super("Forward", GUIGlobals.getImage("right"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			setEnabled(content.forward());
-			back.setEnabled(true);
-		}
-	}
-
-	class ContentsAction extends AbstractAction {
-		public ContentsAction() {
-			super("Contents", GUIGlobals.getImage("helpContents"));
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			content.setPage(GUIGlobals.helpContents, JabRef.class);
-			back.setEnabled(true);
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.help;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+
+import javax.swing.*;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.Util;
+
+/**
+ * 
+ * This is a non-modal help Dialog. The contents of the help is specified by
+ * calling showPage().
+ * 
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class HelpDialog extends JDialog implements HyperlinkListener {
+
+	private JabRefFrame frame;
+
+	private HelpContent content;
+
+	private BackAction back = new BackAction();
+
+	private ForwardAction forward = new ForwardAction();
+
+	private ContentsAction contents = new ContentsAction();
+
+	// Initializes, but does not show the help dialog.
+	public HelpDialog(JabRefFrame bf) {
+		super(bf, Globals.lang("JabRef help"), false);
+		frame = bf;
+		content = new HelpContent(bf.prefs());
+		content.addHyperlinkListener(this);
+		setSize(GUIGlobals.helpSize);
+
+		JToolBar tlb = new JToolBar();
+		tlb.add(back);
+		tlb.add(forward);
+		tlb.addSeparator();
+		tlb.add(contents);
+		tlb.setFloatable(false);
+
+		// Make ESC close dialog, and set shortkeys for back and forward.
+		InputMap im = tlb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+		ActionMap am = tlb.getActionMap();
+		im.put(bf.prefs().getKey("Close dialog"), "close");
+		am.put("close", new CloseAction());
+		im.put(bf.prefs().getKey("Back, help dialog"), "left");
+		am.put("left", back);
+		im.put(bf.prefs().getKey("Forward, help dialog"), "right");
+		am.put("right", forward);
+
+		// Set shortkeys for back and forward specifically for the EditorPane.
+		im = content.getInputMap(JComponent.WHEN_FOCUSED);
+		am = content.getActionMap();
+		im.put(bf.prefs().getKey("Back, help dialog"), "left");
+		am.put("left", back);
+		im.put(bf.prefs().getKey("Forward, help dialog"), "right");
+		am.put("right", forward);
+
+		getContentPane().add(tlb, BorderLayout.NORTH);
+		getContentPane().add(content.getPane());
+		forward.setEnabled(false);
+		back.setEnabled(false);
+	}
+
+    public void showPage(String url) {
+        showPage(url, JabRef.class);
+    }
+
+	public void showPage(String url, Class resourceOwner) {
+		if (!isVisible()) {
+			Util.placeDialog(this, frame);
+			content.reset();
+			back.setEnabled(false);
+			setVisible(true);
+		} else {
+			back.setEnabled(true);
+		}
+		forward.setEnabled(false);
+		content.setPage(url, resourceOwner);
+		content.requestFocus();
+	}
+
+	public void hyperlinkUpdate(HyperlinkEvent e) {
+		if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
+			content.setPage(e.getURL());
+			back.setEnabled(true);
+			forward.setEnabled(false);
+		}
+	}
+
+	class CloseAction extends AbstractAction {
+		public CloseAction() {
+			super(Globals.lang("Close"));
+			// , new ImageIcon(GUIGlobals.closeIconFile));
+			putValue(SHORT_DESCRIPTION, Globals.lang("Close the help window"));
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			dispose();
+		}
+	}
+
+	class BackAction extends AbstractAction {
+		public BackAction() {
+			super("Back", GUIGlobals.getImage("left"));
+			// putValue(SHORT_DESCRIPTION, "Show the previous page");
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			setEnabled(content.back());
+			forward.setEnabled(true);
+		}
+	}
+
+	class ForwardAction extends AbstractAction {
+		public ForwardAction() {
+			super("Forward", GUIGlobals.getImage("right"));
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			setEnabled(content.forward());
+			back.setEnabled(true);
+		}
+	}
+
+	class ContentsAction extends AbstractAction {
+		public ContentsAction() {
+			super("Contents", GUIGlobals.getImage("helpContents"));
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			content.setPage(GUIGlobals.helpContents, JabRef.class);
+			back.setEnabled(true);
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/help/LargeHTMLEditorKit.java b/src/java/net/sf/jabref/help/LargeHTMLEditorKit.java
new file mode 100644
index 0000000..e83be6d
--- /dev/null
+++ b/src/java/net/sf/jabref/help/LargeHTMLEditorKit.java
@@ -0,0 +1,160 @@
+package net.sf.jabref.help;
+
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+
+import javax.swing.text.AbstractDocument;
+import javax.swing.text.AttributeSet;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Element;
+import javax.swing.text.Position;
+import javax.swing.text.StyleConstants;
+import javax.swing.text.View;
+import javax.swing.text.ViewFactory;
+import javax.swing.text.html.BlockView;
+import javax.swing.text.html.CSS;
+import javax.swing.text.html.HTML;
+import javax.swing.text.html.HTMLEditorKit;
+
+import net.sf.jabref.GUIGlobals;
+
+/**
+ * An extended {@link HTMLEditorKit} that allow faster
+ * rendering of large html files and allow zooming of content.
+ * @author Alessio Pollero
+ * @version 1.0
+ */
+public class LargeHTMLEditorKit extends HTMLEditorKit {
+
+     ViewFactory factory = new MyViewFactory();
+
+        @Override
+        public ViewFactory getViewFactory() {
+            return factory;
+        }
+
+        class MyViewFactory extends HTMLFactory {
+            @Override
+            public View create(Element elem) {
+                AttributeSet attrs = elem.getAttributes();
+                Object elementName = attrs.getAttribute(AbstractDocument.ElementNameAttribute);
+                Object o = (elementName != null) ? null : attrs.getAttribute(StyleConstants.NameAttribute);
+                if (o instanceof HTML.Tag) {
+                    HTML.Tag kind = (HTML.Tag) o;
+                    if (kind == HTML.Tag.HTML) {
+                        return new HTMLBlockView(elem);
+                    }
+                    else if (kind == HTML.Tag.IMPLIED) {
+                        String ws = (String) elem.getAttributes().getAttribute(CSS.Attribute.WHITE_SPACE);
+                        if ((ws != null) && ws.equals("pre")) {
+                            return super.create(elem);
+                        }
+                        return new HTMLParagraphView(elem);
+                    } else if ((kind == HTML.Tag.P) ||
+                            (kind == HTML.Tag.H1) ||
+                            (kind == HTML.Tag.H2) ||
+                            (kind == HTML.Tag.H3) ||
+                            (kind == HTML.Tag.H4) ||
+                            (kind == HTML.Tag.H5) ||
+                            (kind == HTML.Tag.H6) ||
+                            (kind == HTML.Tag.DT)) {
+                        // paragraph
+                        return new HTMLParagraphView(elem);
+                    }
+                }
+                return super.create(elem);
+            }
+
+        }
+
+
+        private class HTMLBlockView extends BlockView {
+
+            public HTMLBlockView(Element elem) {
+                super(elem,  View.Y_AXIS);
+            }
+
+            @Override
+            protected void layout(int width, int height) {
+                if (width<Integer.MAX_VALUE) {
+                    super.layout(new Double(width / getZoomFactor()).intValue(),
+                             new Double(height *
+                                        getZoomFactor()).intValue());
+                }
+            }
+
+            public double getZoomFactor() {
+                Double scale = (Double) getDocument().getProperty("ZOOM_FACTOR");
+                if (scale == null) {
+                    return GUIGlobals.zoomLevel;
+                } else {
+                    return scale.doubleValue();
+                }
+            }
+
+            @Override
+            public void paint(Graphics g, Shape allocation) {
+                Graphics2D g2d = (Graphics2D) g;
+                double zoomFactor = getZoomFactor();
+                AffineTransform old = g2d.getTransform();
+                g2d.scale(zoomFactor, zoomFactor);
+                super.paint(g2d, allocation);
+                g2d.setTransform(old);
+            }
+
+            @Override
+            public float getMinimumSpan(int axis) {
+                float f = super.getMinimumSpan(axis);
+                f *= getZoomFactor();
+                return f;
+            }
+
+            @Override
+            public float getMaximumSpan(int axis) {
+                float f = super.getMaximumSpan(axis);
+                f *= getZoomFactor();
+                return f;
+            }
+
+            @Override
+            public float getPreferredSpan(int axis) {
+                float f = super.getPreferredSpan(axis);
+                f *= getZoomFactor();
+                return f;
+            }
+
+            @Override
+            public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException {
+                double zoomFactor = getZoomFactor();
+                Rectangle alloc;
+                alloc = a.getBounds();
+                Shape s = super.modelToView(pos, alloc, b);
+                alloc = s.getBounds();
+                alloc.x *= zoomFactor;
+                alloc.y *= zoomFactor;
+                alloc.width *= zoomFactor;
+                alloc.height *= zoomFactor;
+
+                return alloc;
+            }
+
+            @Override
+            public int viewToModel(float x, float y, Shape a,
+                                   Position.Bias[] bias) {
+                double zoomFactor = getZoomFactor();
+                Rectangle alloc = a.getBounds();
+                x /= zoomFactor;
+                y /= zoomFactor;
+                alloc.x /= zoomFactor;
+                alloc.y /= zoomFactor;
+                alloc.width /= zoomFactor;
+                alloc.height /= zoomFactor;
+
+                return super.viewToModel(x, y, alloc, bias);
+            }
+
+        }
+}
diff --git a/src/java/net/sf/jabref/help/MyEditorKit.java b/src/java/net/sf/jabref/help/MyEditorKit.java
new file mode 100644
index 0000000..09ed67f
--- /dev/null
+++ b/src/java/net/sf/jabref/help/MyEditorKit.java
@@ -0,0 +1,72 @@
+package net.sf.jabref.help;
+
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+
+import javax.swing.Action;
+import javax.swing.JViewport;
+import javax.swing.SwingConstants;
+import javax.swing.text.DefaultEditorKit;
+import javax.swing.text.JTextComponent;
+import javax.swing.text.TextAction;
+
+ at SuppressWarnings("serial")
+public class MyEditorKit extends LargeHTMLEditorKit {
+
+    public class MyNextVisualPositionAction extends TextAction {
+        private Action textActn;
+
+        private int direction;
+
+        private MyNextVisualPositionAction(Action textActn, int direction) {
+            super((String) textActn.getValue(Action.NAME));
+            this.textActn = textActn;
+            this.direction = direction;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            JTextComponent c = getTextComponent(e);
+
+            if (c.getParent() instanceof JViewport) {
+                JViewport viewport = (JViewport) c.getParent();
+                Point p = viewport.getViewPosition();
+
+                if (this.direction == SwingConstants.NORTH) {
+                    c.setCaretPosition(c.viewToModel(p));
+                } else {
+                    p.y += viewport.getExtentSize().height;
+                    c.setCaretPosition(c.viewToModel(p));
+                }
+            }
+
+            textActn.actionPerformed(e);
+        }
+    }
+
+    private Action[] myActions;
+
+    public Action[] getActions() {
+        if (myActions == null) {
+            Action[] actions = super.getActions();
+            Action[] newActions = new Action[2];
+
+            for (int i = 0; i < actions.length; i++) {
+                Action actn = actions[i];
+
+                String name = (String) actn.getValue(Action.NAME);
+
+                if (name.equals(DefaultEditorKit.upAction)) {
+                    newActions[0] = new MyNextVisualPositionAction(actions[i],
+                        SwingConstants.NORTH);
+                } else if (name.equals(DefaultEditorKit.downAction)) {
+                    newActions[1] = new MyNextVisualPositionAction(actions[i],
+                        SwingConstants.SOUTH);
+                }
+            }
+
+            myActions = TextAction.augmentList(actions, newActions);
+        }
+
+        return myActions;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/ACMPortalFetcher.java b/src/java/net/sf/jabref/imports/ACMPortalFetcher.java
index d7b1813..cedae3d 100644
--- a/src/java/net/sf/jabref/imports/ACMPortalFetcher.java
+++ b/src/java/net/sf/jabref/imports/ACMPortalFetcher.java
@@ -1,510 +1,510 @@
-/*  Copyright (C) 2003-2011 Aaron Chen
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.awt.*;
-import java.io.*;
-import java.net.ConnectException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.swing.*;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.gui.FetcherPreviewDialog;
-
-public class ACMPortalFetcher implements PreviewEntryFetcher {
-
-	private ImportInspector dialog = null;
-	private OutputPrinter status;
-    private final HTMLConverter htmlConverter = new HTMLConverter();
-    final CaseKeeper caseKeeper = new CaseKeeper();
-    private String terms;
-    
-    private static final String startUrl = "http://portal.acm.org/";
-    private static final String searchUrlPart = "results.cfm?query=";
-    private static final String searchUrlPartII = "&dl=";
-    private static final String endUrl = "&coll=Portal&short=0";//&start=";
-
-    private static final String bibtexUrl = "exportformats.cfm?id=";
-    private static final String bibtexUrlEnd = "&expformat=bibtex";
-    private static final String abstractUrl = "tab_abstract.cfm?id=";
-    
-    private final JRadioButton acmButton = new JRadioButton(Globals.lang("The ACM Digital Library"));
-    private final JRadioButton guideButton = new JRadioButton(Globals.lang("The Guide to Computing Literature"));
-    private final JCheckBox absCheckBox = new JCheckBox(Globals.lang("Include abstracts"), false);
-    
-    private static final int perPage = 20;
-    private static final int MAX_FETCH = perPage; // only one page. Otherwise, the user will get blocked by ACM. 100 has been the old setting. See Bug 3532752 - https://sourceforge.net/tracker/index.php?func=detail&aid=3532752&group_id=92314&atid=600306
-    private static final int WAIT_TIME = 200;
-    private int hits = 0, unparseable = 0, parsed = 0;
-    private boolean shouldContinue = false;
-    
-    // user settings
-    private boolean fetchAbstract = false;
-    private boolean acmOrGuide = false;
-
-    private static final Pattern hitsPattern = Pattern.compile(".*Found <b>(\\d+,*\\d*)</b>.*");
-    private static final Pattern maxHitsPattern = Pattern.compile(".*Results \\d+ - \\d+ of (\\d+,*\\d*).*");
-    //private static final Pattern bibPattern = Pattern.compile(".*'(exportformats.cfm\\?id=\\d+&expformat=bibtex)'.*");
-    
-    private static final Pattern fullCitationPattern =
-        Pattern.compile("<A HREF=\"(citation.cfm.*)\" class.*");
-
-    private static final Pattern idPattern =
-        Pattern.compile("citation.cfm\\?id=\\d*\\.?(\\d+)&.*");
-
-    // Patterns used to extract information for the preview:
-    private static final Pattern titlePattern = Pattern.compile("<A HREF=.*?\">([^<]*)</A>");
-    private static final Pattern monthYearPattern = Pattern.compile("([A-Za-z]+ [0-9]{4})");
-    private static final Pattern absPattern = Pattern.compile("<div .*?>(.*?)</div>");
-    private FetcherPreviewDialog preview;
-
-    public JPanel getOptionsPanel() {
-        JPanel pan = new JPanel();
-        pan.setLayout(new GridLayout(0,1));
-
-        guideButton.setSelected(true);
-        
-        ButtonGroup group = new ButtonGroup();
-        group.add(acmButton);
-        group.add(guideButton);
-        
-        pan.add(absCheckBox);
-        pan.add(acmButton);
-        pan.add(guideButton);
-        
-        return pan;
-    }
-
-    public boolean processQueryGetPreview(String query, FetcherPreviewDialog preview, OutputPrinter status) {
-        this.preview = preview;
-        this.status = status;
-        this.terms = query;
-        piv = 0;
-        shouldContinue = true;
-        parsed = 0;
-        unparseable = 0;
-        acmOrGuide = acmButton.isSelected();
-        fetchAbstract = absCheckBox.isSelected();
-        int firstEntry = 1;
-        String address = makeUrl(firstEntry);
-        LinkedHashMap<String, JLabel> previews = new LinkedHashMap<String, JLabel>();
-
-        try {
-            URL url = new URL(address);
-
-            String page = getResults(url);
-
-            hits = getNumberOfHits(page, "Found", hitsPattern);
-
-			int index = page.indexOf("Found");
-			if (index >= 0) {
-                            page = page.substring(index + 5);
-                            index = page.indexOf("Found");
-                            if (index >= 0) {
-                                page = page.substring(index);
-                            }
-			}
-
-            if (hits == 0) {
-                status.showMessage(Globals.lang("No entries found for the search string '%0'",
-                        terms),
-                        Globals.lang("Search ACM Portal"), JOptionPane.INFORMATION_MESSAGE);
-                return false;
-            }
-
-            hits = getNumberOfHits(page, "Results", maxHitsPattern);
-
-            for (int i=0; i<hits; i++) {
-                parse(page, 0, firstEntry, previews);
-                //address = makeUrl(firstEntry);
-                firstEntry += perPage;
-            }
-            for (String s : previews.keySet()) {
-                preview.addEntry(s, previews.get(s));
-            }
-
-
-            return true;
-
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-        } catch (ConnectException e) {
-            status.showMessage(Globals.lang("Connection to ACM Portal failed"),
-                    Globals.lang("Search ACM Portal"), JOptionPane.ERROR_MESSAGE);
-        } catch (IOException e) {
-        	status.showMessage(Globals.lang(e.getMessage()),
-                    Globals.lang("Search ACM Portal"), JOptionPane.ERROR_MESSAGE);
-            e.printStackTrace();
-        }
-        return false;
-
-    }
-
-    public void getEntries(Map<String, Boolean> selection, ImportInspector inspector) {
-        for (String id : selection.keySet()) {
-            if (!shouldContinue) {
-                break;
-            }
-            boolean sel = selection.get(id);
-            if (sel) {
-                try {
-                    BibtexEntry entry = downloadEntryBibTeX(id, fetchAbstract);
-                    if (entry != null) {
-                        // Convert from HTML and optionally add curly brackets around key words to keep the case
-                        String title = (String) entry.getField("title");
-                        
-                        if (title != null) {
-                            title = title.replaceAll("\\\\&", "&").replaceAll("\\\\#","#");
-                            title = convertHTMLChars(title);
-                            if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
-                                title = caseKeeper.format(title);
-                            }
-                            entry.setField("title", title);
-                        }
-                        
-                        String abstr = (String) entry.getField("abstract");
-                        if (abstr != null) {
-                            abstr = convertHTMLChars(abstr);
-                            entry.setField("abstract",abstr);
-                        }
-                        inspector.addEntry(entry);
-                    }
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-    }
-
-    public int getWarningLimit() {
-        return 10;
-    }
-
-    public int getPreferredPreviewHeight() {
-        return 75;
-    }
-
-    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
-        return false;
-    }
-
-    private String makeUrl(int startIndex) {
-        StringBuffer sb = new StringBuffer(startUrl).append(searchUrlPart);
-        sb.append(terms.replaceAll(" ", "%20"));
-        sb.append("&start=").append(String.valueOf(startIndex));
-        sb.append(searchUrlPartII);
-  
-        if (acmOrGuide) {
-        	sb.append("ACM");
-        } else {
-        	sb.append("GUIDE");
-        }
-        sb.append(endUrl);
-        return sb.toString();
-    }
-
-    private int piv = 0;
-
-    private void parse(String text, int startIndex, int firstEntryNumber, Map<String,JLabel> entries) {
-        piv = startIndex;
-        int entryNumber = firstEntryNumber;
-        String entry;
-        while (getNextEntryURL(text, piv, entryNumber, entries)) {
-            entryNumber++;
-        }
-
-    }
-
-    private String getEntryBibTeXURL(String fullCitation, boolean abs) {
-        String bibAddr = "";
-       	String ID = "";
-
-        // Get ID
-        Matcher idMatcher = idPattern.matcher(fullCitation);
-        if (idMatcher.find()) {
-            ID = idMatcher.group(1);
-            //System.out.println("To fetch: " + bibAddr);
-        }
-        else {
-            System.out.println("Did not find ID in: " + fullCitation);
-            return null;
-        }
-
-        // fetch bibtex record
-        //bibAddr = bibtexUrl + ID + bibtexUrlEnd;
-        return ID;
-
-    }
-
-    private boolean getNextEntryURL(String allText, int startIndex, int entryNumber,
-                                   Map<String,JLabel> entries) {
-        String toFind = new StringBuffer().append("<strong>")
-                .append(entryNumber).append("</strong><br>").toString();
-        int index = allText.indexOf(toFind, startIndex);
-        int endIndex = allText.length();
-
-        if (index >= 0) {
-            piv = index+1;
-            String text = allText.substring(index, endIndex);
-            // Always try RIS import first
-			Matcher fullCitation =
-				fullCitationPattern.matcher(text);
-			if (fullCitation.find()) {
-                String link = getEntryBibTeXURL(fullCitation.group(1), fetchAbstract);
-                String part;
-                int endOfRecord = text.indexOf("<div class=\"abstract2\">");
-                if (endOfRecord > 0) {
-                    StringBuilder sb = new StringBuilder();
-                    part = text.substring(0, endOfRecord);
-
-                    try {
-                        save("part"+entryNumber+".html", part);
-                    } catch (IOException e) {
-                        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-                    }
-
-                    // Find authors:
-                    String authMarker = "<div class=\"authors\">";
-                    int authStart = text.indexOf(authMarker);
-                    if (authStart >= 0) {
-                        int authEnd = text.indexOf("</div>", authStart+authMarker.length());
-                        if (authEnd >= 0) {
-                            sb.append("<p>").append(text.substring(authStart, authEnd)).append("</p>");
-                        }
-
-                    }
-                    // Find title:
-                    Matcher titM = titlePattern.matcher(part);
-                    if (titM.find()) {
-                        sb.append("<p>").append(titM.group(1)).append("</p>");
-                    }
-                    // Find month and year:
-                    Matcher mY = monthYearPattern.matcher(part);
-                    if (mY.find()) {
-                        sb.append("<p>").append(mY.group(1)).append("</p>");
-                    }
-
-
-                    part = sb.toString();
-                    /*.replaceAll("</tr>", "<br>");
-                    part = part.replaceAll("</td>", "");
-                    part = part.replaceAll("<tr valign=\"[A-Za-z]*\">", "");
-                    part = part.replaceAll("<table style=\"padding: 5px; 5px; 5px; 5px;\" border=\"0\">", "");*/
-                } else {
-                    part = link;
-                }
-
-
-                JLabel preview = new JLabel("<html>"+part+"</html>");
-                preview.setPreferredSize(new Dimension(750, 100));
-                entries.put(link, preview);
-                return true;
-			} else {
-				System.out.printf("Citation Unmatched %d\n", entryNumber);
-				System.out.printf(text);
-                return false;
-			}
-
-        }
-
-        return false;
-    }
-
-    private BibtexEntry downloadEntryBibTeX(String ID, boolean abs) throws IOException {
-        	try {
-        	    URL url = new URL(startUrl+bibtexUrl+ID+bibtexUrlEnd);
-    			BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
-    			ParserResult result = BibtexParser.parse(in);
-    			in.close();
-    			Collection<BibtexEntry> item = result.getDatabase().getEntries();
-                if (item.isEmpty()) {
-                        return null;
-                    }
-    			BibtexEntry entry = item.iterator().next();
-    			Thread.sleep(WAIT_TIME);//wait between requests or you will be blocked by ACM
-
-            	// get abstract
-            	if (abs) {
-            		url = new URL(startUrl + abstractUrl + ID);
-    	        	String page = getResults(url);
-                    Matcher absM = absPattern.matcher(page);
-                    if (absM.find()) {
-                        entry.setField("abstract", absM.group(1).trim());
-                    }
-    				Thread.sleep(WAIT_TIME);//wait between requests or you will be blocked by ACM
-            	}
-
-    			return entry;
-
-            } catch (NoSuchElementException e) {
-            	System.out.println("Bad Bibtex record read at: " + bibtexUrl + ID + bibtexUrlEnd);
-            	e.printStackTrace();
-                return null;
-            } catch (MalformedURLException e) {
-                e.printStackTrace();
-                return null;
-            } catch (ConnectException e) {
-                e.printStackTrace();
-                return null;
-    		} catch (IOException e) {
-    			e.printStackTrace();
-    			return null;
-    		} catch (InterruptedException e) {
-    			e.printStackTrace();
-    			return null;
-    		}
-        }
-
-
-    /**
-     * This method must convert HTML style char sequences to normal characters.
-     * @param text The text to handle.
-     * @return The converted text.
-     */
-    private String convertHTMLChars(String text) {
-
-        return htmlConverter.format(text);
-    }
-
-
-    /**
-     * Find out how many hits were found.
-     * @param page
-     */
-    private int getNumberOfHits(String page, String marker, Pattern pattern) throws IOException {
-        int ind = page.indexOf(marker);
-        if (ind < 0) {
-        	throw new IOException(Globals.lang("Could not parse number of hits"));
-        }
-        String substring = page.substring(ind, Math.min(ind + 42, page.length()));
-        Matcher m = pattern.matcher(substring);
-        if (!m.find()) {
-        	System.out.println("Unmatched!");
-        	System.out.println(substring);
-        } else {
-            try {
-            	// get rid of ,
-            	String number = m.group(1);
-            	//NumberFormat nf = NumberFormat.getInstance();
-            	//return nf.parse(number).intValue();
-            	number = number.replaceAll(",", "");
-            	//System.out.println(number);
-                return Integer.parseInt(number);
-            } catch (NumberFormatException ex) {
-                throw new IOException(Globals.lang("Could not parse number of hits"));
-            } catch (IllegalStateException e) {
-                throw new IOException(Globals.lang("Could not parse number of hits"));
-            }
-        }
-        throw new IOException(Globals.lang("Could not parse number of hits"));
-    }
-
-    /**
-     * Download the URL and return contents as a String.
-     * @param source
-     * @return
-     * @throws IOException
-     */
-    public String getResults(URL source) throws IOException {
-        
-        InputStream in = source.openStream();
-        StringBuffer sb = new StringBuffer();
-        byte[] buffer = new byte[256];
-        while(true) {
-            int bytesRead = in.read(buffer);
-            if(bytesRead == -1) {
-                break;
-            }
-            for (int i=0; i<bytesRead; i++) {
-                sb.append((char)buffer[i]);
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Read results from a file instead of an URL. Just for faster debugging.
-     * @param f
-     * @return
-     * @throws IOException
-     */
-    public String getResultsFromFile(File f) throws IOException {
-        InputStream in = new BufferedInputStream(new FileInputStream(f));
-        StringBuffer sb = new StringBuffer();
-        byte[] buffer = new byte[256];
-        while(true) {
-            int bytesRead = in.read(buffer);
-            if(bytesRead == -1) {
-                break;
-            }
-            for (int i=0; i<bytesRead; i++) {
-                sb.append((char)buffer[i]);
-            }
-        }
-        return sb.toString();
-    }
-
-	public String getTitle() {
-	    return "ACM Portal";
-	}
-	
-	
-	public URL getIcon() {
-	    return GUIGlobals.getIconUrl("www");
-	}
-	
-	public String getHelpPage() {
-	    return "ACMPortalHelp.html";
-	}
-	
-	public String getKeyName() {
-	    return "ACM Portal";
-	}
-	
-	// This method is called by the dialog when the user has cancelled the import.
-	public void cancelled() {
-	    shouldContinue = false;
-	}
-	
-	// This method is called by the dialog when the user has selected the
-	//wanted entries, and clicked Ok. The callback object can update status
-	//line etc.
-	public void done(int entriesImported) {
-
-	}
-	
-	// This method is called by the dialog when the user has cancelled or
-	//signalled a stop. It is expected that any long-running fetch operations
-	//will stop after this method is called.
-	public void stopFetching() {
-	    shouldContinue = false;
-	}
-
-
-    private void save(String filename, String content) throws IOException {
-        BufferedWriter out = new BufferedWriter(new FileWriter(filename));
-        out.write(content);
-        out.close();
-    }
-}
+/*  Copyright (C) 2003-2011 Aaron Chen
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.awt.*;
+import java.io.*;
+import java.net.ConnectException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.*;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.gui.FetcherPreviewDialog;
+
+public class ACMPortalFetcher implements PreviewEntryFetcher {
+
+	private ImportInspector dialog = null;
+	private OutputPrinter status;
+    private final HTMLConverter htmlConverter = new HTMLConverter();
+    final CaseKeeper caseKeeper = new CaseKeeper();
+    private String terms;
+    
+    private static final String startUrl = "http://portal.acm.org/";
+    private static final String searchUrlPart = "results.cfm?query=";
+    private static final String searchUrlPartII = "&dl=";
+    private static final String endUrl = "&coll=Portal&short=0";//&start=";
+
+    private static final String bibtexUrl = "exportformats.cfm?id=";
+    private static final String bibtexUrlEnd = "&expformat=bibtex";
+    private static final String abstractUrl = "tab_abstract.cfm?id=";
+    
+    private final JRadioButton acmButton = new JRadioButton(Globals.lang("The ACM Digital Library"));
+    private final JRadioButton guideButton = new JRadioButton(Globals.lang("The Guide to Computing Literature"));
+    private final JCheckBox absCheckBox = new JCheckBox(Globals.lang("Include abstracts"), false);
+    
+    private static final int perPage = 20;
+    private static final int MAX_FETCH = perPage; // only one page. Otherwise, the user will get blocked by ACM. 100 has been the old setting. See Bug 3532752 - https://sourceforge.net/tracker/index.php?func=detail&aid=3532752&group_id=92314&atid=600306
+    private static final int WAIT_TIME = 200;
+    private int hits = 0, unparseable = 0, parsed = 0;
+    private boolean shouldContinue = false;
+    
+    // user settings
+    private boolean fetchAbstract = false;
+    private boolean acmOrGuide = false;
+
+    private static final Pattern hitsPattern = Pattern.compile(".*Found <b>(\\d+,*\\d*)</b>.*");
+    private static final Pattern maxHitsPattern = Pattern.compile(".*Results \\d+ - \\d+ of (\\d+,*\\d*).*");
+    //private static final Pattern bibPattern = Pattern.compile(".*'(exportformats.cfm\\?id=\\d+&expformat=bibtex)'.*");
+    
+    private static final Pattern fullCitationPattern =
+        Pattern.compile("<A HREF=\"(citation.cfm.*)\" class.*");
+
+    private static final Pattern idPattern =
+        Pattern.compile("citation.cfm\\?id=\\d*\\.?(\\d+)&.*");
+
+    // Patterns used to extract information for the preview:
+    private static final Pattern titlePattern = Pattern.compile("<A HREF=.*?\">([^<]*)</A>");
+    private static final Pattern monthYearPattern = Pattern.compile("([A-Za-z]+ [0-9]{4})");
+    private static final Pattern absPattern = Pattern.compile("<div .*?>(.*?)</div>");
+    private FetcherPreviewDialog preview;
+
+    public JPanel getOptionsPanel() {
+        JPanel pan = new JPanel();
+        pan.setLayout(new GridLayout(0,1));
+
+        guideButton.setSelected(true);
+        
+        ButtonGroup group = new ButtonGroup();
+        group.add(acmButton);
+        group.add(guideButton);
+        
+        pan.add(absCheckBox);
+        pan.add(acmButton);
+        pan.add(guideButton);
+        
+        return pan;
+    }
+
+    public boolean processQueryGetPreview(String query, FetcherPreviewDialog preview, OutputPrinter status) {
+        this.preview = preview;
+        this.status = status;
+        this.terms = query;
+        piv = 0;
+        shouldContinue = true;
+        parsed = 0;
+        unparseable = 0;
+        acmOrGuide = acmButton.isSelected();
+        fetchAbstract = absCheckBox.isSelected();
+        int firstEntry = 1;
+        String address = makeUrl(firstEntry);
+        LinkedHashMap<String, JLabel> previews = new LinkedHashMap<String, JLabel>();
+
+        try {
+            URL url = new URL(address);
+
+            String page = getResults(url);
+
+            hits = getNumberOfHits(page, "Found", hitsPattern);
+
+			int index = page.indexOf("Found");
+			if (index >= 0) {
+                            page = page.substring(index + 5);
+                            index = page.indexOf("Found");
+                            if (index >= 0) {
+                                page = page.substring(index);
+                            }
+			}
+
+            if (hits == 0) {
+                status.showMessage(Globals.lang("No entries found for the search string '%0'",
+                        terms),
+                        Globals.lang("Search ACM Portal"), JOptionPane.INFORMATION_MESSAGE);
+                return false;
+            }
+
+            hits = getNumberOfHits(page, "Results", maxHitsPattern);
+
+            for (int i=0; i<hits; i++) {
+                parse(page, 0, firstEntry, previews);
+                //address = makeUrl(firstEntry);
+                firstEntry += perPage;
+            }
+            for (String s : previews.keySet()) {
+                preview.addEntry(s, previews.get(s));
+            }
+
+
+            return true;
+
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        } catch (ConnectException e) {
+            status.showMessage(Globals.lang("Connection to ACM Portal failed"),
+                    Globals.lang("Search ACM Portal"), JOptionPane.ERROR_MESSAGE);
+        } catch (IOException e) {
+        	status.showMessage(Globals.lang(e.getMessage()),
+                    Globals.lang("Search ACM Portal"), JOptionPane.ERROR_MESSAGE);
+            e.printStackTrace();
+        }
+        return false;
+
+    }
+
+    public void getEntries(Map<String, Boolean> selection, ImportInspector inspector) {
+        for (String id : selection.keySet()) {
+            if (!shouldContinue) {
+                break;
+            }
+            boolean sel = selection.get(id);
+            if (sel) {
+                try {
+                    BibtexEntry entry = downloadEntryBibTeX(id, fetchAbstract);
+                    if (entry != null) {
+                        // Convert from HTML and optionally add curly brackets around key words to keep the case
+                        String title = (String) entry.getField("title");
+                        
+                        if (title != null) {
+                            title = title.replaceAll("\\\\&", "&").replaceAll("\\\\#","#");
+                            title = convertHTMLChars(title);
+                            if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
+                                title = caseKeeper.format(title);
+                            }
+                            entry.setField("title", title);
+                        }
+                        
+                        String abstr = (String) entry.getField("abstract");
+                        if (abstr != null) {
+                            abstr = convertHTMLChars(abstr);
+                            entry.setField("abstract",abstr);
+                        }
+                        inspector.addEntry(entry);
+                    }
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    public int getWarningLimit() {
+        return 10;
+    }
+
+    public int getPreferredPreviewHeight() {
+        return 75;
+    }
+
+    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
+        return false;
+    }
+
+    private String makeUrl(int startIndex) {
+        StringBuffer sb = new StringBuffer(startUrl).append(searchUrlPart);
+        sb.append(terms.replaceAll(" ", "%20"));
+        sb.append("&start=").append(String.valueOf(startIndex));
+        sb.append(searchUrlPartII);
+  
+        if (acmOrGuide) {
+        	sb.append("ACM");
+        } else {
+        	sb.append("GUIDE");
+        }
+        sb.append(endUrl);
+        return sb.toString();
+    }
+
+    private int piv = 0;
+
+    private void parse(String text, int startIndex, int firstEntryNumber, Map<String,JLabel> entries) {
+        piv = startIndex;
+        int entryNumber = firstEntryNumber;
+        String entry;
+        while (getNextEntryURL(text, piv, entryNumber, entries)) {
+            entryNumber++;
+        }
+
+    }
+
+    private String getEntryBibTeXURL(String fullCitation, boolean abs) {
+        String bibAddr = "";
+       	String ID = "";
+
+        // Get ID
+        Matcher idMatcher = idPattern.matcher(fullCitation);
+        if (idMatcher.find()) {
+            ID = idMatcher.group(1);
+            //System.out.println("To fetch: " + bibAddr);
+        }
+        else {
+            System.out.println("Did not find ID in: " + fullCitation);
+            return null;
+        }
+
+        // fetch bibtex record
+        //bibAddr = bibtexUrl + ID + bibtexUrlEnd;
+        return ID;
+
+    }
+
+    private boolean getNextEntryURL(String allText, int startIndex, int entryNumber,
+                                   Map<String,JLabel> entries) {
+        String toFind = new StringBuffer().append("<strong>")
+                .append(entryNumber).append("</strong><br>").toString();
+        int index = allText.indexOf(toFind, startIndex);
+        int endIndex = allText.length();
+
+        if (index >= 0) {
+            piv = index+1;
+            String text = allText.substring(index, endIndex);
+            // Always try RIS import first
+			Matcher fullCitation =
+				fullCitationPattern.matcher(text);
+			if (fullCitation.find()) {
+                String link = getEntryBibTeXURL(fullCitation.group(1), fetchAbstract);
+                String part;
+                int endOfRecord = text.indexOf("<div class=\"abstract2\">");
+                if (endOfRecord > 0) {
+                    StringBuilder sb = new StringBuilder();
+                    part = text.substring(0, endOfRecord);
+
+                    try {
+                        save("part"+entryNumber+".html", part);
+                    } catch (IOException e) {
+                        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+                    }
+
+                    // Find authors:
+                    String authMarker = "<div class=\"authors\">";
+                    int authStart = text.indexOf(authMarker);
+                    if (authStart >= 0) {
+                        int authEnd = text.indexOf("</div>", authStart+authMarker.length());
+                        if (authEnd >= 0) {
+                            sb.append("<p>").append(text.substring(authStart, authEnd)).append("</p>");
+                        }
+
+                    }
+                    // Find title:
+                    Matcher titM = titlePattern.matcher(part);
+                    if (titM.find()) {
+                        sb.append("<p>").append(titM.group(1)).append("</p>");
+                    }
+                    // Find month and year:
+                    Matcher mY = monthYearPattern.matcher(part);
+                    if (mY.find()) {
+                        sb.append("<p>").append(mY.group(1)).append("</p>");
+                    }
+
+
+                    part = sb.toString();
+                    /*.replaceAll("</tr>", "<br>");
+                    part = part.replaceAll("</td>", "");
+                    part = part.replaceAll("<tr valign=\"[A-Za-z]*\">", "");
+                    part = part.replaceAll("<table style=\"padding: 5px; 5px; 5px; 5px;\" border=\"0\">", "");*/
+                } else {
+                    part = link;
+                }
+
+
+                JLabel preview = new JLabel("<html>"+part+"</html>");
+                preview.setPreferredSize(new Dimension(750, 100));
+                entries.put(link, preview);
+                return true;
+			} else {
+				System.out.printf("Citation Unmatched %d\n", entryNumber);
+				System.out.printf(text);
+                return false;
+			}
+
+        }
+
+        return false;
+    }
+
+    private BibtexEntry downloadEntryBibTeX(String ID, boolean abs) throws IOException {
+        	try {
+        	    URL url = new URL(startUrl+bibtexUrl+ID+bibtexUrlEnd);
+    			BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
+    			ParserResult result = BibtexParser.parse(in);
+    			in.close();
+    			Collection<BibtexEntry> item = result.getDatabase().getEntries();
+                if (item.isEmpty()) {
+                        return null;
+                    }
+    			BibtexEntry entry = item.iterator().next();
+    			Thread.sleep(WAIT_TIME);//wait between requests or you will be blocked by ACM
+
+            	// get abstract
+            	if (abs) {
+            		url = new URL(startUrl + abstractUrl + ID);
+    	        	String page = getResults(url);
+                    Matcher absM = absPattern.matcher(page);
+                    if (absM.find()) {
+                        entry.setField("abstract", absM.group(1).trim());
+                    }
+    				Thread.sleep(WAIT_TIME);//wait between requests or you will be blocked by ACM
+            	}
+
+    			return entry;
+
+            } catch (NoSuchElementException e) {
+            	System.out.println("Bad Bibtex record read at: " + bibtexUrl + ID + bibtexUrlEnd);
+            	e.printStackTrace();
+                return null;
+            } catch (MalformedURLException e) {
+                e.printStackTrace();
+                return null;
+            } catch (ConnectException e) {
+                e.printStackTrace();
+                return null;
+    		} catch (IOException e) {
+    			e.printStackTrace();
+    			return null;
+    		} catch (InterruptedException e) {
+    			e.printStackTrace();
+    			return null;
+    		}
+        }
+
+
+    /**
+     * This method must convert HTML style char sequences to normal characters.
+     * @param text The text to handle.
+     * @return The converted text.
+     */
+    private String convertHTMLChars(String text) {
+
+        return htmlConverter.format(text);
+    }
+
+
+    /**
+     * Find out how many hits were found.
+     * @param page
+     */
+    private int getNumberOfHits(String page, String marker, Pattern pattern) throws IOException {
+        int ind = page.indexOf(marker);
+        if (ind < 0) {
+        	throw new IOException(Globals.lang("Could not parse number of hits"));
+        }
+        String substring = page.substring(ind, Math.min(ind + 42, page.length()));
+        Matcher m = pattern.matcher(substring);
+        if (!m.find()) {
+        	System.out.println("Unmatched!");
+        	System.out.println(substring);
+        } else {
+            try {
+            	// get rid of ,
+            	String number = m.group(1);
+            	//NumberFormat nf = NumberFormat.getInstance();
+            	//return nf.parse(number).intValue();
+            	number = number.replaceAll(",", "");
+            	//System.out.println(number);
+                return Integer.parseInt(number);
+            } catch (NumberFormatException ex) {
+                throw new IOException(Globals.lang("Could not parse number of hits"));
+            } catch (IllegalStateException e) {
+                throw new IOException(Globals.lang("Could not parse number of hits"));
+            }
+        }
+        throw new IOException(Globals.lang("Could not parse number of hits"));
+    }
+
+    /**
+     * Download the URL and return contents as a String.
+     * @param source
+     * @return
+     * @throws IOException
+     */
+    public String getResults(URL source) throws IOException {
+        
+        InputStream in = source.openStream();
+        StringBuffer sb = new StringBuffer();
+        byte[] buffer = new byte[256];
+        while(true) {
+            int bytesRead = in.read(buffer);
+            if(bytesRead == -1) {
+                break;
+            }
+            for (int i=0; i<bytesRead; i++) {
+                sb.append((char)buffer[i]);
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Read results from a file instead of an URL. Just for faster debugging.
+     * @param f
+     * @return
+     * @throws IOException
+     */
+    public String getResultsFromFile(File f) throws IOException {
+        InputStream in = new BufferedInputStream(new FileInputStream(f));
+        StringBuffer sb = new StringBuffer();
+        byte[] buffer = new byte[256];
+        while(true) {
+            int bytesRead = in.read(buffer);
+            if(bytesRead == -1) {
+                break;
+            }
+            for (int i=0; i<bytesRead; i++) {
+                sb.append((char)buffer[i]);
+            }
+        }
+        return sb.toString();
+    }
+
+	public String getTitle() {
+	    return "ACM Portal";
+	}
+	
+	
+	public URL getIcon() {
+	    return GUIGlobals.getIconUrl("www");
+	}
+	
+	public String getHelpPage() {
+	    return "ACMPortalHelp.html";
+	}
+	
+	public String getKeyName() {
+	    return "ACM Portal";
+	}
+	
+	// This method is called by the dialog when the user has cancelled the import.
+	public void cancelled() {
+	    shouldContinue = false;
+	}
+	
+	// This method is called by the dialog when the user has selected the
+	//wanted entries, and clicked Ok. The callback object can update status
+	//line etc.
+	public void done(int entriesImported) {
+
+	}
+	
+	// This method is called by the dialog when the user has cancelled or
+	//signalled a stop. It is expected that any long-running fetch operations
+	//will stop after this method is called.
+	public void stopFetching() {
+	    shouldContinue = false;
+	}
+
+
+    private void save(String filename, String content) throws IOException {
+        BufferedWriter out = new BufferedWriter(new FileWriter(filename));
+        out.write(content);
+        out.close();
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/ADSFetcher.java b/src/java/net/sf/jabref/imports/ADSFetcher.java
index 30f67a7..caac1fc 100644
--- a/src/java/net/sf/jabref/imports/ADSFetcher.java
+++ b/src/java/net/sf/jabref/imports/ADSFetcher.java
@@ -1,176 +1,176 @@
-/* Copyright (c) 2009, Ryo IGARASHI <rigarash at gmail.com>
- * All rights reserved.
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *        notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-package net.sf.jabref.imports;
-
-import java.util.Set;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamException;
-
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.imports.BibtexParser;
-
-/**
- *
- * This class handles accessing and obtaining BibTeX entry
- * from ADS(The NASA Astrophysics Data System).
- * Fetching using DOI(Document Object Identifier) is only supported.
- *
- * @author Ryo IGARASHI
- * @version $Id$
- */
-public class ADSFetcher implements EntryFetcher {
-    public JPanel getOptionsPanel() {
-        // No option panel
-        return null;
-    }
-
-    public String getHelpPage() {
-        // TODO: No help page
-        return null;
-    }
-
-    public URL getIcon() {
-        return GUIGlobals.getIconUrl("www");
-    }
-
-    public String getKeyName() {
-        return "ADS from ADS-DOI";
-    }
-
-    public String getTitle() {
-        return Globals.menuTitle(getKeyName());
-    }
-
-    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
-        try {
-            /* Remove "doi:" scheme identifier */
-            query = query.replaceAll("^(doi:|DOI:)", "");
-            /* Allow fetching only 1 key */
-            String key = query;
-            /* Query ADS and load the results into the BibtexDatabase */
-            status.setStatus(Globals.lang("Processing ") + key);
-            BibtexDatabase bd = importADSEntries(key, status);
-            /* Add the entry to the inspection dialog */
-            status.setStatus("Adding fetched entries");
-            if (bd.getEntryCount() > 0) {
-                for (BibtexEntry entry : bd.getEntries()) {
-                    importADSAbstract(key, entry, status);
-                    dialog.addEntry(entry);
-                }
-            }
-        } catch (Exception e) {
-            status.setStatus(Globals.lang("Error while fetching from ADS") + ": " + e.getMessage());
-            e.printStackTrace();
-        }
-        return true;
-    }
-
-    public void stopFetching() {
-    }
-
-    public BibtexDatabase importADSEntries(String key, OutputPrinter status) {
-        String url = constructUrl(key);
-        try {
-            URL ADSUrl = new URL(url + "&data_type=BIBTEX");
-            HttpURLConnection ADSConnection = (HttpURLConnection) ADSUrl.openConnection();
-            ADSConnection.setRequestProperty("User-Agent", "Jabref");
-            InputStream is = ADSConnection.getInputStream();
-            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-            ParserResult pr = BibtexParser.parse(reader);
-            return pr.getDatabase();
-        } catch (IOException e) {
-            status.showMessage(Globals.lang(
-                "An Exception ocurred while accessing '%0'", url)
-                + "\n\n" + e.toString(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
-        } catch (RuntimeException e) {
-            status.showMessage(Globals.lang(
-                "An Error occurred while fetching from ADS (%0):", new String[]{url})
-                + "\n\n" + e.getMessage(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
-        }
-        return null;
-    }
-
-    public String constructUrl(String key) {
-        return "http://adsabs.harvard.edu/doi/" + key;
-    }
-
-    public void importADSAbstract(String key, BibtexEntry entry, OutputPrinter status) {
-        /* TODO: construct ADSUrl from BibtexEntry */
-        String url = constructUrl(key);
-        try {
-            URL ADSUrl = new URL(url + "&data_type=XML");
-            HttpURLConnection ADSConnection = (HttpURLConnection) ADSUrl.openConnection();
-            ADSConnection.setRequestProperty("User-Agent", "Jabref");
-            BufferedInputStream bis = new BufferedInputStream(ADSConnection.getInputStream());
-
-            XMLInputFactory factory = XMLInputFactory.newInstance();
-            XMLStreamReader reader = factory.createXMLStreamReader(bis);
-            boolean isAbstract = false;
-            String abstractText = "";
-            while (reader.hasNext()) {
-                reader.next();
-                if (reader.isStartElement() &&
-                    reader.getLocalName() == "abstract") {
-                    isAbstract = true;
-                }
-                if (isAbstract && reader.isCharacters()) {
-                    abstractText = abstractText + reader.getText();
-                }
-                if (isAbstract && reader.isEndElement()) {
-                    isAbstract = false;
-                }
-            }
-            abstractText = abstractText.replace("\n", " ");
-            entry.setField("abstract", abstractText);
-        } catch (XMLStreamException e) {
-            status.showMessage(Globals.lang(
-                "An Error occurred while parsing abstract"),
-                Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
-        } catch (IOException e) {
-            status.showMessage(Globals.lang(
-                "An Exception ocurred while accessing '%0'", url)
-                + "\n\n" + e.toString(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
-        } catch (RuntimeException e) {
-            status.showMessage(Globals.lang(
-                "An Error occurred while fetching from ADS (%0):", new String[]{url})
-                + "\n\n" + e.getMessage(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
-        }
-    }
-}
+/* Copyright (c) 2009, Ryo IGARASHI <rigarash at gmail.com>
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *        notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package net.sf.jabref.imports;
+
+import java.util.Set;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamException;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.imports.BibtexParser;
+
+/**
+ *
+ * This class handles accessing and obtaining BibTeX entry
+ * from ADS(The NASA Astrophysics Data System).
+ * Fetching using DOI(Document Object Identifier) is only supported.
+ *
+ * @author Ryo IGARASHI
+ * @version $Id$
+ */
+public class ADSFetcher implements EntryFetcher {
+    public JPanel getOptionsPanel() {
+        // No option panel
+        return null;
+    }
+
+    public String getHelpPage() {
+        // TODO: No help page
+        return null;
+    }
+
+    public URL getIcon() {
+        return GUIGlobals.getIconUrl("www");
+    }
+
+    public String getKeyName() {
+        return "ADS from ADS-DOI";
+    }
+
+    public String getTitle() {
+        return Globals.menuTitle(getKeyName());
+    }
+
+    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
+        try {
+            /* Remove "doi:" scheme identifier */
+            query = query.replaceAll("^(doi:|DOI:)", "");
+            /* Allow fetching only 1 key */
+            String key = query;
+            /* Query ADS and load the results into the BibtexDatabase */
+            status.setStatus(Globals.lang("Processing ") + key);
+            BibtexDatabase bd = importADSEntries(key, status);
+            /* Add the entry to the inspection dialog */
+            status.setStatus("Adding fetched entries");
+            if (bd.getEntryCount() > 0) {
+                for (BibtexEntry entry : bd.getEntries()) {
+                    importADSAbstract(key, entry, status);
+                    dialog.addEntry(entry);
+                }
+            }
+        } catch (Exception e) {
+            status.setStatus(Globals.lang("Error while fetching from ADS") + ": " + e.getMessage());
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    public void stopFetching() {
+    }
+
+    public BibtexDatabase importADSEntries(String key, OutputPrinter status) {
+        String url = constructUrl(key);
+        try {
+            URL ADSUrl = new URL(url + "&data_type=BIBTEX");
+            HttpURLConnection ADSConnection = (HttpURLConnection) ADSUrl.openConnection();
+            ADSConnection.setRequestProperty("User-Agent", "Jabref");
+            InputStream is = ADSConnection.getInputStream();
+            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+            ParserResult pr = BibtexParser.parse(reader);
+            return pr.getDatabase();
+        } catch (IOException e) {
+            status.showMessage(Globals.lang(
+                "An Exception ocurred while accessing '%0'", url)
+                + "\n\n" + e.toString(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        } catch (RuntimeException e) {
+            status.showMessage(Globals.lang(
+                "An Error occurred while fetching from ADS (%0):", new String[]{url})
+                + "\n\n" + e.getMessage(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        }
+        return null;
+    }
+
+    public String constructUrl(String key) {
+        return "http://adsabs.harvard.edu/doi/" + key;
+    }
+
+    public void importADSAbstract(String key, BibtexEntry entry, OutputPrinter status) {
+        /* TODO: construct ADSUrl from BibtexEntry */
+        String url = constructUrl(key);
+        try {
+            URL ADSUrl = new URL(url + "&data_type=XML");
+            HttpURLConnection ADSConnection = (HttpURLConnection) ADSUrl.openConnection();
+            ADSConnection.setRequestProperty("User-Agent", "Jabref");
+            BufferedInputStream bis = new BufferedInputStream(ADSConnection.getInputStream());
+
+            XMLInputFactory factory = XMLInputFactory.newInstance();
+            XMLStreamReader reader = factory.createXMLStreamReader(bis);
+            boolean isAbstract = false;
+            String abstractText = "";
+            while (reader.hasNext()) {
+                reader.next();
+                if (reader.isStartElement() &&
+                    reader.getLocalName() == "abstract") {
+                    isAbstract = true;
+                }
+                if (isAbstract && reader.isCharacters()) {
+                    abstractText = abstractText + reader.getText();
+                }
+                if (isAbstract && reader.isEndElement()) {
+                    isAbstract = false;
+                }
+            }
+            abstractText = abstractText.replace("\n", " ");
+            entry.setField("abstract", abstractText);
+        } catch (XMLStreamException e) {
+            status.showMessage(Globals.lang(
+                "An Error occurred while parsing abstract"),
+                Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        } catch (IOException e) {
+            status.showMessage(Globals.lang(
+                "An Exception ocurred while accessing '%0'", url)
+                + "\n\n" + e.toString(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        } catch (RuntimeException e) {
+            status.showMessage(Globals.lang(
+                "An Error occurred while fetching from ADS (%0):", new String[]{url})
+                + "\n\n" + e.getMessage(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/AppendDatabaseAction.java b/src/java/net/sf/jabref/imports/AppendDatabaseAction.java
index ad84bbc..8c00de5 100644
--- a/src/java/net/sf/jabref/imports/AppendDatabaseAction.java
+++ b/src/java/net/sf/jabref/imports/AppendDatabaseAction.java
@@ -1,210 +1,210 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.swing.JOptionPane;
-
-import net.sf.jabref.BaseAction;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexString;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.KeyCollisionException;
-import net.sf.jabref.MergeDialog;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.Util;
-import net.sf.jabref.gui.FileDialogs;
-import net.sf.jabref.groups.AbstractGroup;
-import net.sf.jabref.groups.AllEntriesGroup;
-import net.sf.jabref.groups.ExplicitGroup;
-import net.sf.jabref.groups.GroupTreeNode;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableInsertEntry;
-import net.sf.jabref.undo.UndoableInsertString;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: May 18, 2006
- * Time: 9:49:02 PM
- * To change this template use File | Settings | File Templates.
- */
-public class AppendDatabaseAction extends BaseAction {
-    private JabRefFrame frame;
-    private BasePanel panel;
-    private List<File> filesToOpen = new ArrayList<File>();
-
-    public AppendDatabaseAction(JabRefFrame frame, BasePanel panel) {
-        this.frame = frame;
-        this.panel = panel;
-    }
-
-    public void action() {
-
-        filesToOpen.clear();
-        final MergeDialog md = new MergeDialog(frame, Globals.lang("Append database"), true);
-        Util.placeDialog(md, panel);
-        md.setVisible(true);
-        if (md.isOkPressed()) {
-            String[] chosen = FileDialogs.getMultipleFiles(frame, new File(Globals.prefs.get("workingDirectory")),
-                    null, false);
-          //String chosenFile = Globals.getNewFile(frame, new File(Globals.prefs.get("workingDirectory")),
-          //                                       null, JFileChooser.OPEN_DIALOG, false);
-          if(chosen == null)
-            return;
-          for (int i=0; i<chosen.length; i++)
-            filesToOpen.add(new File(chosen[i]));
-
-            // Run the actual open in a thread to prevent the program
-            // locking until the file is loaded.
-            (new Thread() {
-                public void run() {
-                    openIt(md.importEntries(), md.importStrings(),
-                            md.importGroups(), md.importSelectorWords());
-                }
-            }).start();
-            //frame.getFileHistory().newFile(panel.fileToOpen.getPath());
-        }
-
-      }
-
-    void openIt(boolean importEntries, boolean importStrings,
-                boolean importGroups, boolean importSelectorWords) {
-        if (filesToOpen.size() == 0)
-            return;
-        for (Iterator<File> i = filesToOpen.iterator(); i.hasNext();) {
-            File file = i.next();
-            try {
-                Globals.prefs.put("workingDirectory", file.getPath());
-                // Should this be done _after_ we know it was successfully opened?
-                String encoding = Globals.prefs.get("defaultEncoding");
-                ParserResult pr = OpenDatabaseAction.loadDatabase(file, encoding);
-                mergeFromBibtex(frame, panel, pr, importEntries, importStrings,
-                        importGroups, importSelectorWords);
-                panel.output(Globals.lang("Imported from database") + " '" + file.getPath() + "'");
-            } catch (Throwable ex) {
-                ex.printStackTrace();
-                JOptionPane.showMessageDialog
-                        (panel, ex.getMessage(),
-                                "Open database", JOptionPane.ERROR_MESSAGE);
-            }
-        }
-    }
-
-	public static void mergeFromBibtex(JabRefFrame frame, BasePanel panel, ParserResult pr,
-                                boolean importEntries, boolean importStrings,
-                                boolean importGroups, boolean importSelectorWords)
-              throws KeyCollisionException {
-
-          BibtexDatabase fromDatabase = pr.getDatabase();
-          ArrayList<BibtexEntry> appendedEntries = new ArrayList<BibtexEntry>();
-          ArrayList<BibtexEntry> originalEntries = new ArrayList<BibtexEntry>();
-          BibtexDatabase database = panel.database();
-          BibtexEntry originalEntry;
-          NamedCompound ce = new NamedCompound(Globals.lang("Append database"));
-          MetaData meta = pr.getMetaData();
-
-          if (importEntries) { // Add entries
-              boolean overwriteOwner = Globals.prefs.getBoolean("overwriteOwner");
-              boolean overwriteTimeStamp = Globals.prefs.getBoolean("overwriteTimeStamp");
-
-        	  for (String key : fromDatabase.getKeySet()){
-        	      originalEntry = fromDatabase.getEntryById(key);
-                  BibtexEntry be = (BibtexEntry) (originalEntry.clone());
-                  be.setId(Util.createNeutralId());
-                  Util.setAutomaticFields(be, overwriteOwner, overwriteTimeStamp);
-                  database.insertEntry(be);
-                  appendedEntries.add(be);
-                  originalEntries.add(originalEntry);
-                  ce.addEdit(new UndoableInsertEntry(database, be, panel));
-              }
-          }
-
-          if (importStrings) {
-              for (BibtexString bs : fromDatabase.getStringValues()){
-                  if (!database.hasStringLabel(bs.getName())) {
-                      database.addString(bs);
-                      ce.addEdit(new UndoableInsertString(panel, database, bs));
-                  }
-              }
-          }
-
-          if (importGroups) {
-              GroupTreeNode newGroups = meta.getGroups();
-              if (newGroups != null) {
-
-                  // ensure that there is always only one AllEntriesGroup
-                  if (newGroups.getGroup() instanceof AllEntriesGroup) {
-                      // create a dummy group
-                      ExplicitGroup group = new ExplicitGroup("Imported",
-                              AbstractGroup.INDEPENDENT); // JZTODO lyrics
-                      newGroups.setGroup(group);
-                      for (int i = 0; i < appendedEntries.size(); ++i)
-                          group.addEntry(appendedEntries.get(i));
-                  }
-
-                  // groupsSelector is always created, even when no groups
-                  // have been defined. therefore, no check for null is
-                  // required here
-                  frame.groupSelector.addGroups(newGroups, ce);
-                  // for explicit groups, the entries copied to the mother fromDatabase have to
-                  // be "reassigned", i.e. the old reference is removed and the reference
-                  // to the new fromDatabase is added.
-                  GroupTreeNode node;
-                  ExplicitGroup group;
-                  BibtexEntry entry;
-                  
-                  for (Enumeration<GroupTreeNode> e = newGroups
-					.preorderEnumeration(); e.hasMoreElements();) {
-					node = e.nextElement();
-					if (!(node.getGroup() instanceof ExplicitGroup))
-						continue;
-					group = (ExplicitGroup) node.getGroup();
-					for (int i = 0; i < originalEntries.size(); ++i) {
-						entry = originalEntries.get(i);
-						if (group.contains(entry)) {
-							group.removeEntry(entry);
-							group.addEntry(appendedEntries.get(i));
-						}
-					}
-				}
-                  frame.groupSelector.revalidateGroups();
-              }
-          }
-
-          if (importSelectorWords) {
-        	  for (String s : meta){
-                  if (s.startsWith(Globals.SELECTOR_META_PREFIX)) {
-                      panel.metaData().putData(s, meta.getData(s));
-                  }
-              }
-          }
-
-          ce.end();
-          panel.undoManager.addEdit(ce);
-          panel.markBaseChanged();
-      }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import net.sf.jabref.BaseAction;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexString;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.KeyCollisionException;
+import net.sf.jabref.MergeDialog;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.Util;
+import net.sf.jabref.gui.FileDialogs;
+import net.sf.jabref.groups.AbstractGroup;
+import net.sf.jabref.groups.AllEntriesGroup;
+import net.sf.jabref.groups.ExplicitGroup;
+import net.sf.jabref.groups.GroupTreeNode;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableInsertEntry;
+import net.sf.jabref.undo.UndoableInsertString;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: May 18, 2006
+ * Time: 9:49:02 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class AppendDatabaseAction extends BaseAction {
+    private JabRefFrame frame;
+    private BasePanel panel;
+    private List<File> filesToOpen = new ArrayList<File>();
+
+    public AppendDatabaseAction(JabRefFrame frame, BasePanel panel) {
+        this.frame = frame;
+        this.panel = panel;
+    }
+
+    public void action() {
+
+        filesToOpen.clear();
+        final MergeDialog md = new MergeDialog(frame, Globals.lang("Append database"), true);
+        Util.placeDialog(md, panel);
+        md.setVisible(true);
+        if (md.isOkPressed()) {
+            String[] chosen = FileDialogs.getMultipleFiles(frame, new File(Globals.prefs.get("workingDirectory")),
+                    null, false);
+          //String chosenFile = Globals.getNewFile(frame, new File(Globals.prefs.get("workingDirectory")),
+          //                                       null, JFileChooser.OPEN_DIALOG, false);
+          if(chosen == null)
+            return;
+          for (int i=0; i<chosen.length; i++)
+            filesToOpen.add(new File(chosen[i]));
+
+            // Run the actual open in a thread to prevent the program
+            // locking until the file is loaded.
+            (new Thread() {
+                public void run() {
+                    openIt(md.importEntries(), md.importStrings(),
+                            md.importGroups(), md.importSelectorWords());
+                }
+            }).start();
+            //frame.getFileHistory().newFile(panel.fileToOpen.getPath());
+        }
+
+      }
+
+    void openIt(boolean importEntries, boolean importStrings,
+                boolean importGroups, boolean importSelectorWords) {
+        if (filesToOpen.size() == 0)
+            return;
+        for (Iterator<File> i = filesToOpen.iterator(); i.hasNext();) {
+            File file = i.next();
+            try {
+                Globals.prefs.put("workingDirectory", file.getPath());
+                // Should this be done _after_ we know it was successfully opened?
+                String encoding = Globals.prefs.get("defaultEncoding");
+                ParserResult pr = OpenDatabaseAction.loadDatabase(file, encoding);
+                mergeFromBibtex(frame, panel, pr, importEntries, importStrings,
+                        importGroups, importSelectorWords);
+                panel.output(Globals.lang("Imported from database") + " '" + file.getPath() + "'");
+            } catch (Throwable ex) {
+                ex.printStackTrace();
+                JOptionPane.showMessageDialog
+                        (panel, ex.getMessage(),
+                                "Open database", JOptionPane.ERROR_MESSAGE);
+            }
+        }
+    }
+
+	public static void mergeFromBibtex(JabRefFrame frame, BasePanel panel, ParserResult pr,
+                                boolean importEntries, boolean importStrings,
+                                boolean importGroups, boolean importSelectorWords)
+              throws KeyCollisionException {
+
+          BibtexDatabase fromDatabase = pr.getDatabase();
+          ArrayList<BibtexEntry> appendedEntries = new ArrayList<BibtexEntry>();
+          ArrayList<BibtexEntry> originalEntries = new ArrayList<BibtexEntry>();
+          BibtexDatabase database = panel.database();
+          BibtexEntry originalEntry;
+          NamedCompound ce = new NamedCompound(Globals.lang("Append database"));
+          MetaData meta = pr.getMetaData();
+
+          if (importEntries) { // Add entries
+              boolean overwriteOwner = Globals.prefs.getBoolean("overwriteOwner");
+              boolean overwriteTimeStamp = Globals.prefs.getBoolean("overwriteTimeStamp");
+
+        	  for (String key : fromDatabase.getKeySet()){
+        	      originalEntry = fromDatabase.getEntryById(key);
+                  BibtexEntry be = (BibtexEntry) (originalEntry.clone());
+                  be.setId(Util.createNeutralId());
+                  Util.setAutomaticFields(be, overwriteOwner, overwriteTimeStamp);
+                  database.insertEntry(be);
+                  appendedEntries.add(be);
+                  originalEntries.add(originalEntry);
+                  ce.addEdit(new UndoableInsertEntry(database, be, panel));
+              }
+          }
+
+          if (importStrings) {
+              for (BibtexString bs : fromDatabase.getStringValues()){
+                  if (!database.hasStringLabel(bs.getName())) {
+                      database.addString(bs);
+                      ce.addEdit(new UndoableInsertString(panel, database, bs));
+                  }
+              }
+          }
+
+          if (importGroups) {
+              GroupTreeNode newGroups = meta.getGroups();
+              if (newGroups != null) {
+
+                  // ensure that there is always only one AllEntriesGroup
+                  if (newGroups.getGroup() instanceof AllEntriesGroup) {
+                      // create a dummy group
+                      ExplicitGroup group = new ExplicitGroup("Imported",
+                              AbstractGroup.INDEPENDENT); // JZTODO lyrics
+                      newGroups.setGroup(group);
+                      for (int i = 0; i < appendedEntries.size(); ++i)
+                          group.addEntry(appendedEntries.get(i));
+                  }
+
+                  // groupsSelector is always created, even when no groups
+                  // have been defined. therefore, no check for null is
+                  // required here
+                  frame.groupSelector.addGroups(newGroups, ce);
+                  // for explicit groups, the entries copied to the mother fromDatabase have to
+                  // be "reassigned", i.e. the old reference is removed and the reference
+                  // to the new fromDatabase is added.
+                  GroupTreeNode node;
+                  ExplicitGroup group;
+                  BibtexEntry entry;
+                  
+                  for (Enumeration<GroupTreeNode> e = newGroups
+					.preorderEnumeration(); e.hasMoreElements();) {
+					node = e.nextElement();
+					if (!(node.getGroup() instanceof ExplicitGroup))
+						continue;
+					group = (ExplicitGroup) node.getGroup();
+					for (int i = 0; i < originalEntries.size(); ++i) {
+						entry = originalEntries.get(i);
+						if (group.contains(entry)) {
+							group.removeEntry(entry);
+							group.addEntry(appendedEntries.get(i));
+						}
+					}
+				}
+                  frame.groupSelector.revalidateGroups();
+              }
+          }
+
+          if (importSelectorWords) {
+        	  for (String s : meta){
+                  if (s.startsWith(Globals.SELECTOR_META_PREFIX)) {
+                      panel.metaData().putData(s, meta.getData(s));
+                  }
+              }
+          }
+
+          ce.end();
+          panel.undoManager.addEdit(ce);
+          panel.markBaseChanged();
+      }
+
+
+}
diff --git a/src/java/net/sf/jabref/imports/AutosaveStartupPrompter.java b/src/java/net/sf/jabref/imports/AutosaveStartupPrompter.java
index 3a85fb4..918ae05 100644
--- a/src/java/net/sf/jabref/imports/AutosaveStartupPrompter.java
+++ b/src/java/net/sf/jabref/imports/AutosaveStartupPrompter.java
@@ -1,123 +1,123 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRef;
-import net.sf.jabref.export.AutoSaveManager;
-
-import javax.swing.*;
-import java.io.File;
-import java.util.*;
-import net.sf.jabref.BasePanel;
-
-/**
- * Runnable task that prompts the user for what to do about files loaded at startup,
- * where an autosave file was found. The task should be run on the EDT after startup.
- */
-public class AutosaveStartupPrompter implements Runnable {
-    private JabRefFrame frame;
-    private List<File> files;
-
-    public AutosaveStartupPrompter(JabRefFrame frame, List<File> files) {
-
-        this.frame = frame;
-        this.files = files;
-    }
-
-    public void run() {
-        boolean first = frame.baseCount() == 0;
-        List<ParserResult> loaded = new ArrayList<ParserResult>();
-        Map<ParserResult,Integer> location = new HashMap<ParserResult, Integer>();
-        for (File file : files) {
-            File fileToLoad = file;
-            boolean tryingAutosave = false;
-            if (Globals.prefs.getBoolean("promptBeforeUsingAutosave")) {
-                int answer = JOptionPane.showConfirmDialog(null,"<html>"+
-                    Globals.lang("An autosave file was found for this database. This could indicate ")
-                        +Globals.lang("that JabRef didn't shut down cleanly last time the file was used.")+"<br>"
-                    +Globals.lang("Do you want to recover the database from the autosave file?")+"</html>",
-                    Globals.lang("Autosave of file '%0'", file.getName()), JOptionPane.YES_NO_OPTION);
-                tryingAutosave = answer == JOptionPane.YES_OPTION;
-            } else
-                tryingAutosave = true;
-
-            if (tryingAutosave) {
-                fileToLoad = AutoSaveManager.getAutoSaveFile(file);
-            }
-            boolean done = false;
-            ParserResult pr = null;
-            while (!done) {
-                pr = JabRef.openBibFile(fileToLoad.getPath(), true);
-                if ((pr != null) && !pr.isInvalid()) {
-                    loaded.add(pr);
-                    BasePanel panel = frame.addTab(pr.getDatabase(), file,
-                                    pr.getMetaData(), pr.getEncoding(), first);
-                    location.put(pr, frame.baseCount()-1);
-                    if (tryingAutosave)
-                        panel.markNonUndoableBaseChanged();
-                    
-                    first = false;
-                    done = true;
-                } else {
-                    if (tryingAutosave) {
-                        JOptionPane.showMessageDialog(frame,
-                            Globals.lang("Error opening autosave of '%0'. Trying to load '%0' instead.", file.getName()),
-                            Globals.lang("Error opening file"), JOptionPane.ERROR_MESSAGE);
-                        tryingAutosave = false;
-                        fileToLoad = file;
-                    } else {
-                        String message;
-                        if (pr != null) {
-                            message = "<html>"+pr.getErrorMessage()+"<p>"+
-                            Globals.lang("Error opening file '%0'.", file.getName())+"</html>";
-                        }
-                        else {
-                            message = Globals.lang("Error opening file '%0'.", file.getName());
-                        }
-                        JOptionPane.showMessageDialog(frame,
-                            message, Globals.lang("Error opening file"), JOptionPane.ERROR_MESSAGE);
-                        done = true;
-                    }
-
-                }
-            }
-
-            if ((pr != null) && !pr.isInvalid()) {
-                if (Globals.prefs.getBoolean("displayKeyWarningDialogAtStartup") && pr.hasWarnings()) {
-                    String[] wrns = pr.warnings();
-                    StringBuffer wrn = new StringBuffer();
-                    for (int j = 0; j<wrns.length; j++)
-                        wrn.append(j + 1).append(". ").append(wrns[j]).append("\n");
-                    if (wrn.length() > 0)
-                        wrn.deleteCharAt(wrn.length() - 1);
-                    frame.showBaseAt(location.get(pr));
-                    JOptionPane.showMessageDialog(frame, wrn.toString(),
-                        Globals.lang("Warnings"),
-                        JOptionPane.WARNING_MESSAGE);
-                }
-            }
-        }
-        
-        /*for (int i = 0; i < loaded.size(); i++) {
-            ParserResult pr = loaded.get(i);
-            
-        }*/
-
-
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.export.AutoSaveManager;
+
+import javax.swing.*;
+import java.io.File;
+import java.util.*;
+import net.sf.jabref.BasePanel;
+
+/**
+ * Runnable task that prompts the user for what to do about files loaded at startup,
+ * where an autosave file was found. The task should be run on the EDT after startup.
+ */
+public class AutosaveStartupPrompter implements Runnable {
+    private JabRefFrame frame;
+    private List<File> files;
+
+    public AutosaveStartupPrompter(JabRefFrame frame, List<File> files) {
+
+        this.frame = frame;
+        this.files = files;
+    }
+
+    public void run() {
+        boolean first = frame.baseCount() == 0;
+        List<ParserResult> loaded = new ArrayList<ParserResult>();
+        Map<ParserResult,Integer> location = new HashMap<ParserResult, Integer>();
+        for (File file : files) {
+            File fileToLoad = file;
+            boolean tryingAutosave = false;
+            if (Globals.prefs.getBoolean("promptBeforeUsingAutosave")) {
+                int answer = JOptionPane.showConfirmDialog(null,"<html>"+
+                    Globals.lang("An autosave file was found for this database. This could indicate ")
+                        +Globals.lang("that JabRef didn't shut down cleanly last time the file was used.")+"<br>"
+                    +Globals.lang("Do you want to recover the database from the autosave file?")+"</html>",
+                    Globals.lang("Autosave of file '%0'", file.getName()), JOptionPane.YES_NO_OPTION);
+                tryingAutosave = answer == JOptionPane.YES_OPTION;
+            } else
+                tryingAutosave = true;
+
+            if (tryingAutosave) {
+                fileToLoad = AutoSaveManager.getAutoSaveFile(file);
+            }
+            boolean done = false;
+            ParserResult pr = null;
+            while (!done) {
+                pr = JabRef.openBibFile(fileToLoad.getPath(), true);
+                if ((pr != null) && !pr.isInvalid()) {
+                    loaded.add(pr);
+                    BasePanel panel = frame.addTab(pr.getDatabase(), file,
+                                    pr.getMetaData(), pr.getEncoding(), first);
+                    location.put(pr, frame.baseCount()-1);
+                    if (tryingAutosave)
+                        panel.markNonUndoableBaseChanged();
+                    
+                    first = false;
+                    done = true;
+                } else {
+                    if (tryingAutosave) {
+                        JOptionPane.showMessageDialog(frame,
+                            Globals.lang("Error opening autosave of '%0'. Trying to load '%0' instead.", file.getName()),
+                            Globals.lang("Error opening file"), JOptionPane.ERROR_MESSAGE);
+                        tryingAutosave = false;
+                        fileToLoad = file;
+                    } else {
+                        String message;
+                        if (pr != null) {
+                            message = "<html>"+pr.getErrorMessage()+"<p>"+
+                            Globals.lang("Error opening file '%0'.", file.getName())+"</html>";
+                        }
+                        else {
+                            message = Globals.lang("Error opening file '%0'.", file.getName());
+                        }
+                        JOptionPane.showMessageDialog(frame,
+                            message, Globals.lang("Error opening file"), JOptionPane.ERROR_MESSAGE);
+                        done = true;
+                    }
+
+                }
+            }
+
+            if ((pr != null) && !pr.isInvalid()) {
+                if (Globals.prefs.getBoolean("displayKeyWarningDialogAtStartup") && pr.hasWarnings()) {
+                    String[] wrns = pr.warnings();
+                    StringBuffer wrn = new StringBuffer();
+                    for (int j = 0; j<wrns.length; j++)
+                        wrn.append(j + 1).append(". ").append(wrns[j]).append("\n");
+                    if (wrn.length() > 0)
+                        wrn.deleteCharAt(wrn.length() - 1);
+                    frame.showBaseAt(location.get(pr));
+                    JOptionPane.showMessageDialog(frame, wrn.toString(),
+                        Globals.lang("Warnings"),
+                        JOptionPane.WARNING_MESSAGE);
+                }
+            }
+        }
+        
+        /*for (int i = 0; i < loaded.size(); i++) {
+            ParserResult pr = loaded.get(i);
+            
+        }*/
+
+
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/BibTeXMLHandler.java b/src/java/net/sf/jabref/imports/BibTeXMLHandler.java
index e8e01c5..6fd64e9 100644
--- a/src/java/net/sf/jabref/imports/BibTeXMLHandler.java
+++ b/src/java/net/sf/jabref/imports/BibTeXMLHandler.java
@@ -1,110 +1,110 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.util.ArrayList;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.Util;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * Reader for the BibTeXML format. See
- * <a href="http://bibtexml.sourceforge.net/">bibtexml.sf.net</a>.
- *
- * @author Egon Willighagen
- */
-public class BibTeXMLHandler extends DefaultHandler {
-
-    private ArrayList<BibtexEntry> bibitems;
-
-    private BibtexEntry b; // the entry being read
-
-    // XML parsing stuff
-    private String currentChars;
-
-    public BibTeXMLHandler() {
-        super();
-    }
-
-    public ArrayList<BibtexEntry> getItems(){ return bibitems;}
-
-    // SAX parsing methods
-
-    public void doctypeDecl(String name, String publicId,
-        String systemId) {}
-
-    public void startDocument() {
-        bibitems = new ArrayList<BibtexEntry>();
-    }
-
-    public void endDocument() {
-    }
-
-    public void characters(char ch[], int start, int length) {
-        String s = new String(ch, start, length).trim();
-        currentChars += s;
-    }
-
-    public void startElement(String uri, String local, String raw, Attributes atts) {
-        String name = raw;
-        if (name.equals("bibtex:entry")) {
-            String articleID = null;
-            for (int i = 0; i < atts.getLength(); i++) {
-                if (atts.getQName(i).equals("bibtex:id") ||
-                    atts.getQName(i).equals("id")) {
-                    articleID = atts.getValue(i);
-                }
-            }
-            b = new BibtexEntry(Util.createNeutralId());
-            b.setField(BibtexFields.KEY_FIELD, articleID);
-        } else if (
-            name.equals("bibtex:article") ||
-            name.equals("bibtex:inbook") ||
-            name.equals("bibtex:book") ||
-            name.equals("bibtex:booklet") ||
-            name.equals("bibtex:incollection") ||
-            name.equals("bibtex:inproceedings") ||
-            name.equals("bibtex:proceedings") ||
-            name.equals("bibtex:manual") ||
-            name.equals("bibtex:mastersthesis") ||
-            name.equals("bibtex:phdthesis") ||
-            name.equals("bibtex:techreport") ||
-            name.equals("bibtex:unpublished") ||
-            name.equals("bibtex:misc") ||
-            name.equals("bibtex:other")) {
-            BibtexEntryType tp = BibtexEntryType.getType(local);
-            b.setType(tp);
-        }
-        currentChars = "";
-    }
-
-    public void endElement(String uri, String local, String raw) {
-        String name = raw;
-        if (name.equals("bibtex:entry")) {
-            bibitems.add( b  );
-        } else if (name.startsWith("bibtex:")) {
-            b.setField(local, currentChars);
-            // Util.pr(local+ " "+currentChars);
-        }
-        currentChars = "";
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.util.ArrayList;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.Util;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * Reader for the BibTeXML format. See
+ * <a href="http://bibtexml.sourceforge.net/">bibtexml.sf.net</a>.
+ *
+ * @author Egon Willighagen
+ */
+public class BibTeXMLHandler extends DefaultHandler {
+
+    private ArrayList<BibtexEntry> bibitems;
+
+    private BibtexEntry b; // the entry being read
+
+    // XML parsing stuff
+    private String currentChars;
+
+    public BibTeXMLHandler() {
+        super();
+    }
+
+    public ArrayList<BibtexEntry> getItems(){ return bibitems;}
+
+    // SAX parsing methods
+
+    public void doctypeDecl(String name, String publicId,
+        String systemId) {}
+
+    public void startDocument() {
+        bibitems = new ArrayList<BibtexEntry>();
+    }
+
+    public void endDocument() {
+    }
+
+    public void characters(char ch[], int start, int length) {
+        String s = new String(ch, start, length).trim();
+        currentChars += s;
+    }
+
+    public void startElement(String uri, String local, String raw, Attributes atts) {
+        String name = raw;
+        if (name.equals("bibtex:entry")) {
+            String articleID = null;
+            for (int i = 0; i < atts.getLength(); i++) {
+                if (atts.getQName(i).equals("bibtex:id") ||
+                    atts.getQName(i).equals("id")) {
+                    articleID = atts.getValue(i);
+                }
+            }
+            b = new BibtexEntry(Util.createNeutralId());
+            b.setField(BibtexFields.KEY_FIELD, articleID);
+        } else if (
+            name.equals("bibtex:article") ||
+            name.equals("bibtex:inbook") ||
+            name.equals("bibtex:book") ||
+            name.equals("bibtex:booklet") ||
+            name.equals("bibtex:incollection") ||
+            name.equals("bibtex:inproceedings") ||
+            name.equals("bibtex:proceedings") ||
+            name.equals("bibtex:manual") ||
+            name.equals("bibtex:mastersthesis") ||
+            name.equals("bibtex:phdthesis") ||
+            name.equals("bibtex:techreport") ||
+            name.equals("bibtex:unpublished") ||
+            name.equals("bibtex:misc") ||
+            name.equals("bibtex:other")) {
+            BibtexEntryType tp = BibtexEntryType.getType(local);
+            b.setType(tp);
+        }
+        currentChars = "";
+    }
+
+    public void endElement(String uri, String local, String raw) {
+        String name = raw;
+        if (name.equals("bibtex:entry")) {
+            bibitems.add( b  );
+        } else if (name.startsWith("bibtex:")) {
+            b.setField(local, currentChars);
+            // Util.pr(local+ " "+currentChars);
+        }
+        currentChars = "";
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/BiblioscapeImporter.java b/src/java/net/sf/jabref/imports/BiblioscapeImporter.java
index 7f55a64..d9f0a85 100644
--- a/src/java/net/sf/jabref/imports/BiblioscapeImporter.java
+++ b/src/java/net/sf/jabref/imports/BiblioscapeImporter.java
@@ -1,278 +1,278 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.*;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-
-/**
- * Imports a Biblioscape Tag File. The format is described on
- * http://www.biblioscape.com/manual_bsp/Biblioscape_Tag_File.htm Several
- * Biblioscape field types are ignored. Others are only included in the BibTeX
- * field "comment".
- */
-public class BiblioscapeImporter extends ImportFormat {
-
-    /**
-     * Return the name of this import format.
-     */
-    public String getFormatName() {
-        return "Biblioscape";
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-     */
-    public String getCLIId() {
-      return "biblioscape";
-    }
-
-    /**
-     * Check whether the source is in the correct format for this importer.
-     */
-    public boolean isRecognizedFormat(InputStream in) throws IOException {
-        return true;
-    }
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     */
-    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-
-        ArrayList<BibtexEntry> bibItems = new ArrayList<BibtexEntry>();
-        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-        String line;
-        HashMap<String, String> hm = new HashMap<String, String>();
-        HashMap<String, StringBuffer> lines = new HashMap<String, StringBuffer>();
-        StringBuffer previousLine = null;
-        while ((line = in.readLine()) != null){
-            if (line.length() == 0) continue; // ignore empty lines, e.g. at file
-                                          // end
-        // entry delimiter -> item complete
-        if (line.equals("------")){
-          String[] type = new String[2];
-          String[] pages = new String[2];
-          String country = null;
-          String address = null;
-          String titleST = null;
-          String titleTI = null;
-          Vector<String> comments = new Vector<String>();
-          // add item
-          for (Map.Entry<String, StringBuffer> entry : lines.entrySet()){
-            if (entry.getKey().equals("AU")) hm.put("author", entry.getValue()
-                .toString());
-            else if (entry.getKey().equals("TI")) titleTI = entry.getValue()
-                .toString();
-            else if (entry.getKey().equals("ST")) titleST = entry.getValue()
-                .toString();
-            else if (entry.getKey().equals("YP")) hm.put("year", entry
-                .getValue().toString());
-            else if (entry.getKey().equals("VL")) hm.put("volume", entry
-                .getValue().toString());
-            else if (entry.getKey().equals("NB")) hm.put("number", entry
-                .getValue().toString());
-            else if (entry.getKey().equals("PS")) pages[0] = entry.getValue()
-                .toString();
-            else if (entry.getKey().equals("PE")) pages[1] = entry.getValue()
-                .toString();
-            else if (entry.getKey().equals("KW")) hm.put("keywords", entry
-                .getValue().toString());
-            //else if (entry.getKey().equals("RM"))
-            // hm.put("",entry.getValue().toString());
-            //else if (entry.getKey().equals("RU"))
-            // hm.put("",entry.getValue().toString());
-            else if (entry.getKey().equals("RT")) type[0] = entry.getValue()
-                .toString();
-            else if (entry.getKey().equals("SB")) comments.add("Subject: "
-                + entry.getValue().toString());
-            else if (entry.getKey().equals("SA")) comments
-                .add("Secondary Authors: " + entry.getValue().toString());
-            else if (entry.getKey().equals("NT")) hm.put("note", entry
-                .getValue().toString());
-            //else if (entry.getKey().equals("PP"))
-            // hm.put("",entry.getValue().toString());
-            else if (entry.getKey().equals("PB")) hm.put("publisher", entry
-                .getValue().toString());
-            else if (entry.getKey().equals("TA")) comments
-                .add("Tertiary Authors: " + entry.getValue().toString());
-            else if (entry.getKey().equals("TT")) comments
-                .add("Tertiary Title: " + entry.getValue().toString());
-            else if (entry.getKey().equals("ED")) hm.put("edition", entry
-                .getValue().toString());
-            //else if (entry.getKey().equals("DP"))
-            // hm.put("",entry.getValue().toString());
-            else if (entry.getKey().equals("TW")) type[1] = entry.getValue()
-                .toString();
-            else if (entry.getKey().equals("QA")) comments
-                .add("Quaternary Authors: " + entry.getValue().toString());
-            else if (entry.getKey().equals("QT")) comments
-                .add("Quaternary Title: " + entry.getValue().toString());
-            else if (entry.getKey().equals("IS")) hm.put("isbn", entry
-                .getValue().toString());
-            //else if (entry.getKey().equals("LA"))
-            // hm.put("",entry.getValue().toString());
-            else if (entry.getKey().equals("AB")) hm.put("abstract", entry
-                .getValue().toString());
-            //else if (entry.getKey().equals("DI"))
-            // hm.put("",entry.getValue().toString());
-            //else if (entry.getKey().equals("DM"))
-            // hm.put("",entry.getValue().toString());
-            //else if (entry.getKey().equals("AV"))
-            // hm.put("",entry.getValue().toString());
-            //else if (entry.getKey().equals("PR"))
-            // hm.put("",entry.getValue().toString());
-            //else if (entry.getKey().equals("LO"))
-            // hm.put("",entry.getValue().toString());
-            else if (entry.getKey().equals("AD")) address = entry.getValue()
-                .toString();
-            else if (entry.getKey().equals("LG")) hm.put("language", entry
-                .getValue().toString());
-            else if (entry.getKey().equals("CO")) country = entry.getValue()
-                .toString();
-            else if (entry.getKey().equals("UR") || entry.getKey().equals("AT")){
-              String s = entry.getValue().toString().trim();
-              hm.put(s.startsWith("http://") || s.startsWith("ftp://") ? "url"
-                  : "pdf", entry.getValue().toString());
-            }else if (entry.getKey().equals("C1")) comments.add("Custom1: "
-                + entry.getValue().toString());
-            else if (entry.getKey().equals("C2")) comments.add("Custom2: "
-                + entry.getValue().toString());
-            else if (entry.getKey().equals("C3")) comments.add("Custom3: "
-                + entry.getValue().toString());
-            else if (entry.getKey().equals("C4")) comments.add("Custom4: "
-                + entry.getValue().toString());
-            //else if (entry.getKey().equals("RD"))
-            // hm.put("",entry.getValue().toString());
-            //else if (entry.getKey().equals("MB"))
-            // hm.put("",entry.getValue().toString());
-            else if (entry.getKey().equals("C5")) comments.add("Custom5: "
-                + entry.getValue().toString());
-            else if (entry.getKey().equals("C6")) comments.add("Custom6: "
-                + entry.getValue().toString());
-            //else if (entry.getKey().equals("FA"))
-            // hm.put("",entry.getValue().toString());
-            //else if (entry.getKey().equals("CN"))
-            // hm.put("",entry.getValue().toString());
-            else if (entry.getKey().equals("DE")) hm.put("annote", entry
-                .getValue().toString());
-            //else if (entry.getKey().equals("RP"))
-            // hm.put("",entry.getValue().toString());
-            //else if (entry.getKey().equals("DF"))
-            // hm.put("",entry.getValue().toString());
-            //else if (entry.getKey().equals("RS"))
-            // hm.put("",entry.getValue().toString());
-            else if (entry.getKey().equals("CA")) comments.add("Categories: "
-                + entry.getValue().toString());
-            //else if (entry.getKey().equals("WP"))
-            // hm.put("",entry.getValue().toString());
-            else if (entry.getKey().equals("TH")) comments.add("Short Title: "
-                + entry.getValue().toString());
-            //else if (entry.getKey().equals("WR"))
-            // hm.put("",entry.getValue().toString());
-            //else if (entry.getKey().equals("EW"))
-            // hm.put("",entry.getValue().toString());
-            else if (entry.getKey().equals("SE")) hm.put("chapter", entry
-                .getValue().toString());
-            //else if (entry.getKey().equals("AC"))
-            // hm.put("",entry.getValue().toString());
-            //else if (entry.getKey().equals("LP"))
-            // hm.put("",entry.getValue().toString());
-          }
-
-          String bibtexType = "misc";
-          // to find type, first check TW, then RT
-          for (int i = 1; i >= 0 && bibtexType.equals("misc"); --i){
-            if (type[i] == null) continue;
-            type[i] = type[i].toLowerCase();
-            if (type[i].indexOf("article") >= 0) bibtexType = "article";
-            else if (type[i].indexOf("journal") >= 0) bibtexType = "article";
-            else if (type[i].indexOf("book section") >= 0) bibtexType = "inbook";
-            else if (type[i].indexOf("book") >= 0) bibtexType = "book";
-            else if (type[i].indexOf("conference") >= 0) bibtexType = "inproceedings";
-            else if (type[i].indexOf("proceedings") >= 0) bibtexType = "inproceedings";
-            else if (type[i].indexOf("report") >= 0) bibtexType = "techreport";
-            else if (type[i].indexOf("thesis") >= 0
-                && type[i].indexOf("master") >= 0) bibtexType = "mastersthesis";
-            else if (type[i].indexOf("thesis") >= 0) bibtexType = "phdthesis";
-          }
-
-          // depending on bibtexType, decide where to place the titleRT and
-          // titleTI
-          if (bibtexType.equals("article")){
-            if (titleST != null) hm.put("journal", titleST);
-            if (titleTI != null) hm.put("title", titleTI);
-          }else if (bibtexType.equals("inbook")){
-            if (titleST != null) hm.put("booktitle", titleST);
-            if (titleTI != null) hm.put("title", titleTI);
-          }else{
-            if (titleST != null) hm.put("booktitle", titleST); // should not
-                                                               // happen, I
-                                                               // think
-            if (titleTI != null) hm.put("title", titleTI);
-          }
-
-          // concatenate pages
-          if (pages[0] != null || pages[1] != null) hm.put("pages",
-              (pages[0] != null ? pages[0] : "")
-                  + (pages[1] != null ? "--" + pages[1] : ""));
-
-          // concatenate address and country
-          if (address != null) hm.put("address", address
-              + (country != null ? ", " + country : ""));
-
-          if (comments.size() > 0){ // set comment if present
-            StringBuffer s = new StringBuffer();
-            for (int i = 0; i < comments.size(); ++i)
-                s.append(i > 0 ? "; " : "").append(comments.elementAt(i).toString());
-            hm.put("comment", s.toString());
-          }
-          BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID,
-              Globals.getEntryType(bibtexType));
-          b.setField(hm);
-          bibItems.add(b);
-
-          hm.clear();
-          lines.clear();
-          previousLine = null;
-
-          continue;
-        }
-        // new key
-        if (line.startsWith("--") && line.length() >= 7
-            && line.substring(4, 7).equals("-- ")){
-          lines.put(line.substring(2, 4), previousLine = new StringBuffer(line
-              .substring(7)));
-          continue;
-        }
-        // continuation (folding) of previous line
-        if (previousLine == null) // sanity check; should never happen
-        return null;
-        previousLine.append(line.trim());
-      }
-
-        return bibItems;
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.*;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+
+/**
+ * Imports a Biblioscape Tag File. The format is described on
+ * http://www.biblioscape.com/manual_bsp/Biblioscape_Tag_File.htm Several
+ * Biblioscape field types are ignored. Others are only included in the BibTeX
+ * field "comment".
+ */
+public class BiblioscapeImporter extends ImportFormat {
+
+    /**
+     * Return the name of this import format.
+     */
+    public String getFormatName() {
+        return "Biblioscape";
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+     */
+    public String getCLIId() {
+      return "biblioscape";
+    }
+
+    /**
+     * Check whether the source is in the correct format for this importer.
+     */
+    public boolean isRecognizedFormat(InputStream in) throws IOException {
+        return true;
+    }
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     */
+    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+
+        ArrayList<BibtexEntry> bibItems = new ArrayList<BibtexEntry>();
+        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+        String line;
+        HashMap<String, String> hm = new HashMap<String, String>();
+        HashMap<String, StringBuffer> lines = new HashMap<String, StringBuffer>();
+        StringBuffer previousLine = null;
+        while ((line = in.readLine()) != null){
+            if (line.length() == 0) continue; // ignore empty lines, e.g. at file
+                                          // end
+        // entry delimiter -> item complete
+        if (line.equals("------")){
+          String[] type = new String[2];
+          String[] pages = new String[2];
+          String country = null;
+          String address = null;
+          String titleST = null;
+          String titleTI = null;
+          Vector<String> comments = new Vector<String>();
+          // add item
+          for (Map.Entry<String, StringBuffer> entry : lines.entrySet()){
+            if (entry.getKey().equals("AU")) hm.put("author", entry.getValue()
+                .toString());
+            else if (entry.getKey().equals("TI")) titleTI = entry.getValue()
+                .toString();
+            else if (entry.getKey().equals("ST")) titleST = entry.getValue()
+                .toString();
+            else if (entry.getKey().equals("YP")) hm.put("year", entry
+                .getValue().toString());
+            else if (entry.getKey().equals("VL")) hm.put("volume", entry
+                .getValue().toString());
+            else if (entry.getKey().equals("NB")) hm.put("number", entry
+                .getValue().toString());
+            else if (entry.getKey().equals("PS")) pages[0] = entry.getValue()
+                .toString();
+            else if (entry.getKey().equals("PE")) pages[1] = entry.getValue()
+                .toString();
+            else if (entry.getKey().equals("KW")) hm.put("keywords", entry
+                .getValue().toString());
+            //else if (entry.getKey().equals("RM"))
+            // hm.put("",entry.getValue().toString());
+            //else if (entry.getKey().equals("RU"))
+            // hm.put("",entry.getValue().toString());
+            else if (entry.getKey().equals("RT")) type[0] = entry.getValue()
+                .toString();
+            else if (entry.getKey().equals("SB")) comments.add("Subject: "
+                + entry.getValue().toString());
+            else if (entry.getKey().equals("SA")) comments
+                .add("Secondary Authors: " + entry.getValue().toString());
+            else if (entry.getKey().equals("NT")) hm.put("note", entry
+                .getValue().toString());
+            //else if (entry.getKey().equals("PP"))
+            // hm.put("",entry.getValue().toString());
+            else if (entry.getKey().equals("PB")) hm.put("publisher", entry
+                .getValue().toString());
+            else if (entry.getKey().equals("TA")) comments
+                .add("Tertiary Authors: " + entry.getValue().toString());
+            else if (entry.getKey().equals("TT")) comments
+                .add("Tertiary Title: " + entry.getValue().toString());
+            else if (entry.getKey().equals("ED")) hm.put("edition", entry
+                .getValue().toString());
+            //else if (entry.getKey().equals("DP"))
+            // hm.put("",entry.getValue().toString());
+            else if (entry.getKey().equals("TW")) type[1] = entry.getValue()
+                .toString();
+            else if (entry.getKey().equals("QA")) comments
+                .add("Quaternary Authors: " + entry.getValue().toString());
+            else if (entry.getKey().equals("QT")) comments
+                .add("Quaternary Title: " + entry.getValue().toString());
+            else if (entry.getKey().equals("IS")) hm.put("isbn", entry
+                .getValue().toString());
+            //else if (entry.getKey().equals("LA"))
+            // hm.put("",entry.getValue().toString());
+            else if (entry.getKey().equals("AB")) hm.put("abstract", entry
+                .getValue().toString());
+            //else if (entry.getKey().equals("DI"))
+            // hm.put("",entry.getValue().toString());
+            //else if (entry.getKey().equals("DM"))
+            // hm.put("",entry.getValue().toString());
+            //else if (entry.getKey().equals("AV"))
+            // hm.put("",entry.getValue().toString());
+            //else if (entry.getKey().equals("PR"))
+            // hm.put("",entry.getValue().toString());
+            //else if (entry.getKey().equals("LO"))
+            // hm.put("",entry.getValue().toString());
+            else if (entry.getKey().equals("AD")) address = entry.getValue()
+                .toString();
+            else if (entry.getKey().equals("LG")) hm.put("language", entry
+                .getValue().toString());
+            else if (entry.getKey().equals("CO")) country = entry.getValue()
+                .toString();
+            else if (entry.getKey().equals("UR") || entry.getKey().equals("AT")){
+              String s = entry.getValue().toString().trim();
+              hm.put(s.startsWith("http://") || s.startsWith("ftp://") ? "url"
+                  : "pdf", entry.getValue().toString());
+            }else if (entry.getKey().equals("C1")) comments.add("Custom1: "
+                + entry.getValue().toString());
+            else if (entry.getKey().equals("C2")) comments.add("Custom2: "
+                + entry.getValue().toString());
+            else if (entry.getKey().equals("C3")) comments.add("Custom3: "
+                + entry.getValue().toString());
+            else if (entry.getKey().equals("C4")) comments.add("Custom4: "
+                + entry.getValue().toString());
+            //else if (entry.getKey().equals("RD"))
+            // hm.put("",entry.getValue().toString());
+            //else if (entry.getKey().equals("MB"))
+            // hm.put("",entry.getValue().toString());
+            else if (entry.getKey().equals("C5")) comments.add("Custom5: "
+                + entry.getValue().toString());
+            else if (entry.getKey().equals("C6")) comments.add("Custom6: "
+                + entry.getValue().toString());
+            //else if (entry.getKey().equals("FA"))
+            // hm.put("",entry.getValue().toString());
+            //else if (entry.getKey().equals("CN"))
+            // hm.put("",entry.getValue().toString());
+            else if (entry.getKey().equals("DE")) hm.put("annote", entry
+                .getValue().toString());
+            //else if (entry.getKey().equals("RP"))
+            // hm.put("",entry.getValue().toString());
+            //else if (entry.getKey().equals("DF"))
+            // hm.put("",entry.getValue().toString());
+            //else if (entry.getKey().equals("RS"))
+            // hm.put("",entry.getValue().toString());
+            else if (entry.getKey().equals("CA")) comments.add("Categories: "
+                + entry.getValue().toString());
+            //else if (entry.getKey().equals("WP"))
+            // hm.put("",entry.getValue().toString());
+            else if (entry.getKey().equals("TH")) comments.add("Short Title: "
+                + entry.getValue().toString());
+            //else if (entry.getKey().equals("WR"))
+            // hm.put("",entry.getValue().toString());
+            //else if (entry.getKey().equals("EW"))
+            // hm.put("",entry.getValue().toString());
+            else if (entry.getKey().equals("SE")) hm.put("chapter", entry
+                .getValue().toString());
+            //else if (entry.getKey().equals("AC"))
+            // hm.put("",entry.getValue().toString());
+            //else if (entry.getKey().equals("LP"))
+            // hm.put("",entry.getValue().toString());
+          }
+
+          String bibtexType = "misc";
+          // to find type, first check TW, then RT
+          for (int i = 1; i >= 0 && bibtexType.equals("misc"); --i){
+            if (type[i] == null) continue;
+            type[i] = type[i].toLowerCase();
+            if (type[i].indexOf("article") >= 0) bibtexType = "article";
+            else if (type[i].indexOf("journal") >= 0) bibtexType = "article";
+            else if (type[i].indexOf("book section") >= 0) bibtexType = "inbook";
+            else if (type[i].indexOf("book") >= 0) bibtexType = "book";
+            else if (type[i].indexOf("conference") >= 0) bibtexType = "inproceedings";
+            else if (type[i].indexOf("proceedings") >= 0) bibtexType = "inproceedings";
+            else if (type[i].indexOf("report") >= 0) bibtexType = "techreport";
+            else if (type[i].indexOf("thesis") >= 0
+                && type[i].indexOf("master") >= 0) bibtexType = "mastersthesis";
+            else if (type[i].indexOf("thesis") >= 0) bibtexType = "phdthesis";
+          }
+
+          // depending on bibtexType, decide where to place the titleRT and
+          // titleTI
+          if (bibtexType.equals("article")){
+            if (titleST != null) hm.put("journal", titleST);
+            if (titleTI != null) hm.put("title", titleTI);
+          }else if (bibtexType.equals("inbook")){
+            if (titleST != null) hm.put("booktitle", titleST);
+            if (titleTI != null) hm.put("title", titleTI);
+          }else{
+            if (titleST != null) hm.put("booktitle", titleST); // should not
+                                                               // happen, I
+                                                               // think
+            if (titleTI != null) hm.put("title", titleTI);
+          }
+
+          // concatenate pages
+          if (pages[0] != null || pages[1] != null) hm.put("pages",
+              (pages[0] != null ? pages[0] : "")
+                  + (pages[1] != null ? "--" + pages[1] : ""));
+
+          // concatenate address and country
+          if (address != null) hm.put("address", address
+              + (country != null ? ", " + country : ""));
+
+          if (comments.size() > 0){ // set comment if present
+            StringBuffer s = new StringBuffer();
+            for (int i = 0; i < comments.size(); ++i)
+                s.append(i > 0 ? "; " : "").append(comments.elementAt(i).toString());
+            hm.put("comment", s.toString());
+          }
+          BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID,
+              Globals.getEntryType(bibtexType));
+          b.setField(hm);
+          bibItems.add(b);
+
+          hm.clear();
+          lines.clear();
+          previousLine = null;
+
+          continue;
+        }
+        // new key
+        if (line.startsWith("--") && line.length() >= 7
+            && line.substring(4, 7).equals("-- ")){
+          lines.put(line.substring(2, 4), previousLine = new StringBuffer(line
+              .substring(7)));
+          continue;
+        }
+        // continuation (folding) of previous line
+        if (previousLine == null) // sanity check; should never happen
+        return null;
+        previousLine.append(line.trim());
+      }
+
+        return bibItems;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/BibsonomyScraper.java b/src/java/net/sf/jabref/imports/BibsonomyScraper.java
index df4220e..a0bcbed 100644
--- a/src/java/net/sf/jabref/imports/BibsonomyScraper.java
+++ b/src/java/net/sf/jabref/imports/BibsonomyScraper.java
@@ -1,66 +1,66 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Util;
-import net.sf.jabref.net.URLDownload;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.net.URL;
-
-/**
- * Convenience class for getting BibTeX entries from the BibSonomy scraper,
- * from an URL pointing to an entry.
- */
-public class BibsonomyScraper {
-
-    protected static final String BIBSONOMY_SCRAPER = "http://scraper.bibsonomy.org/service?url=";
-    protected static final String BIBSONOMY_SCRAPER_POST = "&format=bibtex";
-
-    /**
-     * Return a BibtexEntry by looking up the given url from the BibSonomy scraper.
-     * @param entryUrl
-     * @return
-     */
-    public static BibtexEntry getEntry(String entryUrl) {
-        try {
-            // Replace special characters by corresponding sequences:
-            entryUrl = entryUrl.replaceAll("%", "%25").replaceAll(":", "%3A").replaceAll("/", "%2F")
-                    .replaceAll("\\?", "%3F").replaceAll("&", "%26").replaceAll("=", "%3D");
-                    
-            URL url = new URL(BIBSONOMY_SCRAPER+entryUrl+BIBSONOMY_SCRAPER_POST);
-            URLDownload ud = new URLDownload(url);
-            ud.setEncoding("UTF8");
-            ud.download();
-            String bibtex = ud.getStringContent();
-            BibtexParser bp = new BibtexParser(new StringReader(bibtex));
-            ParserResult pr = bp.parse();
-            if ((pr != null) && (pr.getDatabase().getEntryCount() > 0)) {
-                return pr.getDatabase().getEntries().iterator().next();
-            }
-            else return null;
-
-        } catch (IOException ex) {
-            ex.printStackTrace();
-            return null;
-        } catch (RuntimeException ex) {
-            ex.printStackTrace();
-            return null;
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Util;
+import net.sf.jabref.net.URLDownload;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.URL;
+
+/**
+ * Convenience class for getting BibTeX entries from the BibSonomy scraper,
+ * from an URL pointing to an entry.
+ */
+public class BibsonomyScraper {
+
+    protected static final String BIBSONOMY_SCRAPER = "http://scraper.bibsonomy.org/service?url=";
+    protected static final String BIBSONOMY_SCRAPER_POST = "&format=bibtex";
+
+    /**
+     * Return a BibtexEntry by looking up the given url from the BibSonomy scraper.
+     * @param entryUrl
+     * @return
+     */
+    public static BibtexEntry getEntry(String entryUrl) {
+        try {
+            // Replace special characters by corresponding sequences:
+            entryUrl = entryUrl.replaceAll("%", "%25").replaceAll(":", "%3A").replaceAll("/", "%2F")
+                    .replaceAll("\\?", "%3F").replaceAll("&", "%26").replaceAll("=", "%3D");
+                    
+            URL url = new URL(BIBSONOMY_SCRAPER+entryUrl+BIBSONOMY_SCRAPER_POST);
+            URLDownload ud = new URLDownload(url);
+            ud.setEncoding("UTF8");
+            ud.download();
+            String bibtex = ud.getStringContent();
+            BibtexParser bp = new BibtexParser(new StringReader(bibtex));
+            ParserResult pr = bp.parse();
+            if ((pr != null) && (pr.getDatabase().getEntryCount() > 0)) {
+                return pr.getDatabase().getEntries().iterator().next();
+            }
+            else return null;
+
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            return null;
+        } catch (RuntimeException ex) {
+            ex.printStackTrace();
+            return null;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/BibteXMLImporter.java b/src/java/net/sf/jabref/imports/BibteXMLImporter.java
index e5b63f3..1fe3fda 100644
--- a/src/java/net/sf/jabref/imports/BibteXMLImporter.java
+++ b/src/java/net/sf/jabref/imports/BibteXMLImporter.java
@@ -1,117 +1,117 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Pattern;
-
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
-import com.sun.star.logging.LogLevel;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.OutputPrinter;
-
-/**
- * Importer for the Refer/Endnote format.
- *
- * check here for details on the format
- * http://www.ecst.csuchico.edu/~jacobsd/bib/formats/endnote.html
- */
-public class BibteXMLImporter extends ImportFormat {
-	
-	private static Logger logger = Logger.getLogger(BibteXMLImporter.class.toString());
-
-    /**
-     * Return the name of this import format.
-     */
-    public String getFormatName() {
-	return "BibTeXML";
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-     */
-    public String getCLIId() {
-      return "bibtexml";
-    }
-    
-
-    /**
-     * Check whether the source is in the correct format for this importer.
-     */
-    public boolean isRecognizedFormat(InputStream stream) throws IOException {
-
-	// Our strategy is to look for the "<bibtex:file *" line.
-	BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-	Pattern pat1 = Pattern
-	    .compile("<bibtex:file .*");
-	String str;
-	while ((str = in.readLine()) != null){
-	    if (pat1.matcher(str).find())
-		return true;
-	}
-	return false;
-    }
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     */
-    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-
-	ArrayList<BibtexEntry> bibItems = new ArrayList<BibtexEntry>();
-
-	// Obtain a factory object for creating SAX parsers
-	SAXParserFactory parserFactory = SAXParserFactory.newInstance();
-	// Configure the factory object to specify attributes of the parsers it
-	// creates
-	// parserFactory.setValidating(true);
-	parserFactory.setNamespaceAware(true);	
-	// Now create a SAXParser object
-
-
-	try{
-	    SAXParser parser = parserFactory.newSAXParser(); //May throw exceptions
-	    BibTeXMLHandler handler = new BibTeXMLHandler();
-	    // Start the parser. It reads the file and calls methods of the handler.
-	    parser.parse(stream, handler);
-	    // When you're done, report the results stored by your handler object
-	    bibItems = handler.getItems();
-	    
-	}catch (javax.xml.parsers.ParserConfigurationException e1){
-		logger.log(Level.SEVERE, e1.getLocalizedMessage(), e1);
-		status.showMessage(e1.getLocalizedMessage());
-	}catch (org.xml.sax.SAXException e2){
-		logger.log(Level.SEVERE, e2.getLocalizedMessage(), e2);
-		status.showMessage(e2.getLocalizedMessage());
-	}catch (java.io.IOException e3){
-		logger.log(Level.SEVERE, e3.getLocalizedMessage(), e3);
-		status.showMessage(e3.getLocalizedMessage());
-	}
-	return bibItems;
-	
-    }
-    
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Pattern;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import com.sun.star.logging.LogLevel;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.OutputPrinter;
+
+/**
+ * Importer for the Refer/Endnote format.
+ *
+ * check here for details on the format
+ * http://www.ecst.csuchico.edu/~jacobsd/bib/formats/endnote.html
+ */
+public class BibteXMLImporter extends ImportFormat {
+	
+	private static Logger logger = Logger.getLogger(BibteXMLImporter.class.toString());
+
+    /**
+     * Return the name of this import format.
+     */
+    public String getFormatName() {
+	return "BibTeXML";
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+     */
+    public String getCLIId() {
+      return "bibtexml";
+    }
+    
+
+    /**
+     * Check whether the source is in the correct format for this importer.
+     */
+    public boolean isRecognizedFormat(InputStream stream) throws IOException {
+
+	// Our strategy is to look for the "<bibtex:file *" line.
+	BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+	Pattern pat1 = Pattern
+	    .compile("<bibtex:file .*");
+	String str;
+	while ((str = in.readLine()) != null){
+	    if (pat1.matcher(str).find())
+		return true;
+	}
+	return false;
+    }
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     */
+    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+
+	ArrayList<BibtexEntry> bibItems = new ArrayList<BibtexEntry>();
+
+	// Obtain a factory object for creating SAX parsers
+	SAXParserFactory parserFactory = SAXParserFactory.newInstance();
+	// Configure the factory object to specify attributes of the parsers it
+	// creates
+	// parserFactory.setValidating(true);
+	parserFactory.setNamespaceAware(true);	
+	// Now create a SAXParser object
+
+
+	try{
+	    SAXParser parser = parserFactory.newSAXParser(); //May throw exceptions
+	    BibTeXMLHandler handler = new BibTeXMLHandler();
+	    // Start the parser. It reads the file and calls methods of the handler.
+	    parser.parse(stream, handler);
+	    // When you're done, report the results stored by your handler object
+	    bibItems = handler.getItems();
+	    
+	}catch (javax.xml.parsers.ParserConfigurationException e1){
+		logger.log(Level.SEVERE, e1.getLocalizedMessage(), e1);
+		status.showMessage(e1.getLocalizedMessage());
+	}catch (org.xml.sax.SAXException e2){
+		logger.log(Level.SEVERE, e2.getLocalizedMessage(), e2);
+		status.showMessage(e2.getLocalizedMessage());
+	}catch (java.io.IOException e3){
+		logger.log(Level.SEVERE, e3.getLocalizedMessage(), e3);
+		status.showMessage(e3.getLocalizedMessage());
+	}
+	return bibItems;
+	
+    }
+    
+}
diff --git a/src/java/net/sf/jabref/imports/BibtexParser.java b/src/java/net/sf/jabref/imports/BibtexParser.java
index ae13878..3991e86 100644
--- a/src/java/net/sf/jabref/imports/BibtexParser.java
+++ b/src/java/net/sf/jabref/imports/BibtexParser.java
@@ -1,1101 +1,1101 @@
-/*
- Copyright (C) 2003-06 David Weitzman, Nizar N. Batada, Morten O. Alver, Christopher Oezbek
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-
-package net.sf.jabref.imports;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.PushbackReader;
-import java.io.Reader;
-import java.io.StringReader;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import net.sf.jabref.*;
-
-/**
- * Class for importing BibTeX-files.
- * 
- * Use:
- * 
- * BibtexParser parser = new BibtexParser(reader);
- * 
- * ParserResult result = parser.parse();
- * 
- * or
- * 
- * ParserResult result = BibtexParser.parse(reader);
- * 
- * Can be used stand-alone.
- * 
- * @author David Weitzman
- * @author Nizar N. Batada
- * @author Morten O. Alver
- * @author Christopher Oezbek 
- */
-public class BibtexParser {
-	
-	private PushbackReader _in;
-
-	private BibtexDatabase _db;
-
-	private HashMap<String, String> _meta;
-	
-	private HashMap<String, BibtexEntryType> entryTypes;
-
-	private boolean _eof = false;
-
-	private int line = 1;
-
-	private FieldContentParser fieldContentParser = new FieldContentParser();
-
-	private ParserResult _pr;
-	
-	private static final Integer LOOKAHEAD = 64;
-
-	public BibtexParser(Reader in) {
-
-		if (in == null) {
-			throw new NullPointerException();
-		}
-		if (Globals.prefs == null) {
-			Globals.prefs = JabRefPreferences.getInstance();
-		}
-		_in = new PushbackReader(in, LOOKAHEAD);
-	}
-
-	/**
-	 * Shortcut usage to create a Parser and read the input.
-	 * 
-	 * @param in -
-	 *            Reader to read from
-	 * @throws IOException
-	 */
-	public static ParserResult parse(Reader in) throws IOException {
-		BibtexParser parser = new BibtexParser(in);
-		return parser.parse();
-	}
-	
-	
-	/**
-	 * Parses BibtexEntries from the given string and returns the collection of all entries found.
-	 * 
-	 * @param bibtexString
-	 * 
-	 * @return Returns null if an error occurred, returns an empty collection if no entries where found. 
-	 */
-	public static Collection<BibtexEntry> fromString(String bibtexString){
-		StringReader reader = new StringReader(bibtexString);
-		BibtexParser parser = new BibtexParser(reader); 
-		try {
-			return parser.parse().getDatabase().getEntries();
-		} catch (Exception e){
-			return null;
-		}
-	}
-	
-	/**
-	 * Parses BibtexEntries from the given string and returns one entry found (or null if none found)
-	 * 
-	 * It is undetermined which entry is returned, so use this in case you know there is only one entry in the string.
-	 * 
-	 * @param bibtexString
-	 * 
-	 * @return The bibtexentry or null if non was found or an error occurred.
-	 */
-	public static BibtexEntry singleFromString(String bibtexString) {
-		Collection<BibtexEntry> c = fromString(bibtexString);
-		if ((c == null) || (c.size() == 0)) {
-			return null;
-		}
-        return c.iterator().next();
-	}	
-	
-	/**
-	 * Check whether the source is in the correct format for this importer.
-	 */
-	public static boolean isRecognizedFormat(Reader inOrig) throws IOException {
-		// Our strategy is to look for the "@<type>    {" line.
-		BufferedReader in = new BufferedReader(inOrig);
-
-		Pattern pat1 = Pattern.compile("@[a-zA-Z]*\\s*\\{");
-
-		String str;
-
-		while ((str = in.readLine()) != null) {
-
-			if (pat1.matcher(str).find())
-				return true;
-			else if (str.startsWith(GUIGlobals.SIGNATURE))
-				return true;
-		}
-
-		return false;
-	}
-
-	private void skipWhitespace() throws IOException {
-		int c;
-
-		while (true) {
-			c = read();
-			if ((c == -1) || (c == 65535)) {
-				_eof = true;
-				return;
-			}
-
-			if (Character.isWhitespace((char) c)) {
-				continue;
-			} else
-				// found non-whitespace char
-				// Util.pr("SkipWhitespace, stops: "+c);
-				unread(c);
-			/*
-			 * try { Thread.currentThread().sleep(500); } catch
-			 * (InterruptedException ex) {}
-			 */
-			break;
-		}
-	}
-
-	private String skipAndRecordWhitespace(int j) throws IOException {
-		int c;
-		StringBuffer sb = new StringBuffer();
-		if (j != ' ')
-			sb.append((char) j);
-		while (true) {
-			c = read();
-			if ((c == -1) || (c == 65535)) {
-				_eof = true;
-				return sb.toString();
-			}
-
-			if (Character.isWhitespace((char) c)) {
-				if (c != ' ')
-					sb.append((char) c);
-				continue;
-			} else
-				// found non-whitespace char
-				// Util.pr("SkipWhitespace, stops: "+c);
-				unread(c);
-			/*
-			 * try { Thread.currentThread().sleep(500); } catch
-			 * (InterruptedException ex) {}
-			 */
-			break;
-		}
-		return sb.toString();
-	}
-
-	/**
-	 * Will parse the BibTex-Data found when reading from reader.
-	 * 
-	 * The reader will be consumed.
-	 * 
-	 * Multiple calls to parse() return the same results
-	 * 
-	 * @return ParserResult
-	 * @throws IOException
-	 */
-	public ParserResult parse() throws IOException {
-
-		// If we already parsed this, just return it.
-		if (_pr != null)
-			return _pr;
-
-        _db = new BibtexDatabase(); // Bibtex related contents.
-		_meta = new HashMap<String, String>(); // Metadata in comments for Bibkeeper.
-		entryTypes = new HashMap<String, BibtexEntryType>(); // To store custem entry types parsed.
-		_pr = new ParserResult(_db, null, entryTypes);
-
-        // First see if we can find the version number of the JabRef version that
-        // wrote the file:
-        String versionNum = readJabRefVersionNumber();
-        if (versionNum != null) {
-            _pr.setJabrefVersion(versionNum);
-            setMajorMinorVersions();
-        }
-        else {
-            // No version number found. However, we have only
-        }
-
-        skipWhitespace();
-
-		try {
-			while (!_eof) {
-				boolean found = consumeUncritically('@');
-				if (!found)
-					break;
-				skipWhitespace();
-				String entryType = parseTextToken();
-				BibtexEntryType tp = BibtexEntryType.getType(entryType);
-				boolean isEntry = (tp != null);
-				// Util.pr(tp.getName());
-				if (!isEntry) {
-					// The entry type name was not recognized. This can mean
-					// that it is a string, preamble, or comment. If so,
-					// parse and set accordingly. If not, assume it is an entry
-					// with an unknown type.
-					if (entryType.toLowerCase().equals("preamble")) {
-						_db.setPreamble(parsePreamble());
-					} else if (entryType.toLowerCase().equals("string")) {
-						BibtexString bs = parseString();
-						try {
-							_db.addString(bs);
-						} catch (KeyCollisionException ex) {
-							_pr.addWarning(Globals.lang("Duplicate string name") + ": "
-								+ bs.getName());
-							// ex.printStackTrace();
-						}
-					} else if (entryType.toLowerCase().equals("comment")) {
-						StringBuffer commentBuf = parseBracketedTextExactly();
-						/**
-						 * 
-						 * Metadata are used to store Bibkeeper-specific
-						 * information in .bib files.
-						 * 
-						 * Metadata are stored in bibtex files in the format
-						 * 
-						 * @comment{jabref-meta: type:data0;data1;data2;...}
-						 * 
-						 * Each comment that starts with the META_FLAG is stored
-						 * in the meta HashMap, with type as key. Unluckily, the
-						 * old META_FLAG bibkeeper-meta: was used in JabRef 1.0
-						 * and 1.1, so we need to support it as well. At least
-						 * for a while. We'll always save with the new one.
-						 */
-						String comment = commentBuf.toString().replaceAll("[\\x0d\\x0a]", "");
-						if (comment.substring(0,
-							Math.min(comment.length(), GUIGlobals.META_FLAG.length())).equals(
-							GUIGlobals.META_FLAG)
-							|| comment.substring(0,
-								Math.min(comment.length(), GUIGlobals.META_FLAG_OLD.length()))
-								.equals(GUIGlobals.META_FLAG_OLD)) {
-
-							String rest;
-							if (comment.substring(0, GUIGlobals.META_FLAG.length()).equals(
-								GUIGlobals.META_FLAG))
-								rest = comment.substring(GUIGlobals.META_FLAG.length());
-							else
-								rest = comment.substring(GUIGlobals.META_FLAG_OLD.length());
-
-							int pos = rest.indexOf(':');
-
-							if (pos > 0)
-								_meta.put(rest.substring(0, pos), rest.substring(pos + 1));
-							// We remove all line breaks in the metadata - these
-							// will have been inserted
-							// to prevent too long lines when the file was
-							// saved, and are not part of the data.
-							
-						} else if (comment.substring(0,
-							Math.min(comment.length(), GUIGlobals.ENTRYTYPE_FLAG.length())).equals(
-							GUIGlobals.ENTRYTYPE_FLAG)) {
-							 // A custom entry type can also be stored in a
-							 // "@comment"
-							CustomEntryType typ = CustomEntryType.parseEntryType(comment);
-							entryTypes.put(typ.getName().toLowerCase(), typ);
-						} else {
-							// FIXME: user comments are simply dropped
-							// at least, we log that we ignored the comment
-							Globals.logger(Globals.lang("Dropped comment from database") + ":" + comment);
-						}
-					} else {
-						// The entry type was not recognized. This may mean that
-						// it is a custom entry type whose definition will
-						// appear
-						// at the bottom of the file. So we use an
-						// UnknownEntryType
-						// to remember the type name by.
-						tp = new UnknownEntryType(entryType.toLowerCase());
-						// System.out.println("unknown type: "+entryType);
-						isEntry = true;
-					}
-				}
-
-				if (isEntry) // True if not comment, preamble or string.
-				{
-					/**
-					 * Morten Alver 13 Aug 2006: Trying to make the parser more
-					 * robust. If an exception is thrown when parsing an entry,
-					 * drop the entry and try to resume parsing. Add a warning
-					 * for the user.
-					 * 
-					 * An alternative solution is to try rescuing the entry for
-					 * which parsing failed, by returning the entry with the
-					 * exception and adding it before parsing is continued.
-					 */
-					try {
-						BibtexEntry be = parseEntry(tp);
-
-						boolean duplicateKey = _db.insertEntry(be);
-						if (duplicateKey) // JZTODO lyrics
-                            _pr.addDuplicateKey(be.getCiteKey());
-							/*_pr.addWarning(Globals.lang("duplicate BibTeX key") + ": "
-								+ be.getCiteKey() + " ("
-								+ Globals.lang("grouping may not work for this entry") + ")");                        */
-						else if (be.getCiteKey() == null || be.getCiteKey().equals("")) {
-							_pr.addWarning(Globals.lang("empty BibTeX key") + ": "
-								+ be.getAuthorTitleYear(40) + " ("
-								+ Globals.lang("grouping may not work for this entry") + ")");
-						}
-					} catch (IOException ex) {
-						ex.printStackTrace();
-						_pr.addWarning(Globals.lang("Error occured when parsing entry") + ": '"
-							+ ex.getMessage() + "'. " + Globals.lang("Skipped entry."));
-
-					}
-				}
-
-				skipWhitespace();
-			}
-
-			// Before returning the database, update entries with unknown type
-			// based on parsed type definitions, if possible.
-			checkEntryTypes(_pr);
-
-            // Instantiate meta data:
-            _pr.setMetaData(new MetaData(_meta, _db));
-
-			return _pr;
-		} catch (KeyCollisionException kce) {
-			// kce.printStackTrace();
-			throw new IOException("Duplicate ID in bibtex file: " + kce.toString());
-		}
-	}
-
-	private int peek() throws IOException {
-		int c = read();
-		unread(c);
-
-		return c;
-	}
-
-	private int read() throws IOException {
-		int c = _in.read();
-		if (c == '\n')
-			line++;
-		return c;
-	}
-
-	private void unread(int c) throws IOException {
-		if (c == '\n')
-			line--;
-		_in.unread(c);
-	}
-
-	public BibtexString parseString() throws IOException {
-		// Util.pr("Parsing string");
-		skipWhitespace();
-		consume('{', '(');
-		// while (read() != '}');
-		skipWhitespace();
-		// Util.pr("Parsing string name");
-		String name = parseTextToken();
-		// Util.pr("Parsed string name");
-		skipWhitespace();
-		// Util.pr("Now the contents");
-		consume('=');
-		String content = parseFieldContent(name);
-		// Util.pr("Now I'm going to consume a }");
-		consume('}', ')');
-		// Util.pr("Finished string parsing.");
-		String id = Util.createNeutralId();
-		return new BibtexString(id, name, content);
-	}
-
-	public String parsePreamble() throws IOException {
-		return parseBracketedText().toString();
-	}
-
-	public BibtexEntry parseEntry(BibtexEntryType tp) throws IOException {
-		String id = Util.createNeutralId();// createId(tp, _db);
-		BibtexEntry result = new BibtexEntry(id, tp);
-		skipWhitespace();
-		consume('{', '(');
-        int c = peek();
-        if ((c != '\n') && (c != '\r'))
-            skipWhitespace();
-		String key = null;
-		boolean doAgain = true;
-		while (doAgain) {
-			doAgain = false;
-			try {
-				if (key != null)
-					key = key + parseKey();// parseTextToken(),
-				else
-					key = parseKey();
-			} catch (NoLabelException ex) {
-				// This exception will be thrown if the entry lacks a key
-				// altogether, like in "@article{ author = { ...".
-				// It will also be thrown if a key contains =.
-				c = (char) peek();
-				if (Character.isWhitespace(c) || (c == '{') || (c == '\"')) {
-					String fieldName = ex.getMessage().trim().toLowerCase();
-					String cont = parseFieldContent(fieldName);
-					result.setField(fieldName, cont);
-				} else {
-					if (key != null)
-						key = key + ex.getMessage() + "=";
-					else
-						key = ex.getMessage() + "=";
-					doAgain = true;
-				}
-			}
-		}
-
-		if ((key != null) && key.equals(""))
-			key = null;
-
-		result.setField(BibtexFields.KEY_FIELD, key);
-		skipWhitespace();
-
-		while (true) {
-			c = peek();
-			if ((c == '}') || (c == ')')) {
-				break;
-			}
-
-			if (c == ',')
-				consume(',');
-
-			skipWhitespace();
-
-			c = peek();
-			if ((c == '}') || (c == ')')) {
-				break;
-			}
-			parseField(result);
-		}
-
-		consume('}', ')');
-		return result;
-	}
-
-	private void parseField(BibtexEntry entry) throws IOException {
-		String key = parseTextToken().toLowerCase();
-		// Util.pr("Field: _"+key+"_");
-		skipWhitespace();
-		consume('=');
-		String content = parseFieldContent(key);
-		// Now, if the field in question is set up to be fitted automatically
-		// with braces around
-		// capitals, we should remove those now when reading the field:
-		if (Globals.prefs.putBracesAroundCapitals(key)) {
-			content = Util.removeBracesAroundCapitals(content);
-		}
-		if (content.length() > 0) {
-			if (entry.getField(key) == null)
-				entry.setField(key, content);
-			else {
-				// The following hack enables the parser to deal with multiple
-				// author or
-				// editor lines, stringing them together instead of getting just
-				// one of them.
-				// Multiple author or editor lines are not allowed by the bibtex
-				// format, but
-				// at least one online database exports bibtex like that, making
-				// it inconvenient
-				// for users if JabRef didn't accept it.
-				if (key.equals("author") || key.equals("editor"))
-					entry.setField(key, entry.getField(key) + " and " + content);
-			}
-		}
-	}
-
-	private String parseFieldContent(String key) throws IOException {
-		skipWhitespace();
-		StringBuffer value = new StringBuffer();
-		int c = '.';
-
-		while (((c = peek()) != ',') && (c != '}') && (c != ')')) {
-
-			if (_eof) {
-				throw new RuntimeException("Error in line " + line + ": EOF in mid-string");
-			}
-			if (c == '"') {
-				StringBuffer text = parseQuotedFieldExactly();
-				value.append(fieldContentParser.format(text));
-				/*
-				 * 
-				 * The following code doesn't handle {"} correctly: // value is
-				 * a string consume('"');
-				 * 
-				 * while (!((peek() == '"') && (j != '\\'))) { j = read(); if
-				 * (_eof || (j == -1) || (j == 65535)) { throw new
-				 * RuntimeException("Error in line "+line+ ": EOF in
-				 * mid-string"); }
-				 * 
-				 * value.append((char) j); }
-				 * 
-				 * consume('"');
-				 */
-			} else if (c == '{') {
-				// Value is a string enclosed in brackets. There can be pairs
-				// of brackets inside of a field, so we need to count the
-				// brackets to know when the string is finished.
-				StringBuffer text = parseBracketedTextExactly();
-				value.append(fieldContentParser.format(text, key));
-
-			} else if (Character.isDigit((char) c)) { // value is a number
-
-				String numString = parseTextToken();
-                // Morten Alver 2007-07-04: I don't see the point of parsing the integer
-                // and converting it back to a string, so I'm removing the construct below
-                // the following line:
-                value.append(numString);
-                /*
-                try {
-					// Fixme: What is this for?
-					value.append(String.valueOf(Integer.parseInt(numString)));
-				} catch (NumberFormatException e) {
-					// If Integer could not be parsed then just add the text
-					// Used to fix [ 1594123 ] Failure to import big numbers
-					value.append(numString);
-				}
-				*/
-			} else if (c == '#') {
-				consume('#');
-			} else {
-				String textToken = parseTextToken();
-				if (textToken.length() == 0)
-					throw new IOException("Error in line " + line + " or above: "
-						+ "Empty text token.\nThis could be caused "
-						+ "by a missing comma between two fields.");
-				value.append("#").append(textToken).append("#");
-				// Util.pr(parseTextToken());
-				// throw new RuntimeException("Unknown field type");
-			}
-			skipWhitespace();
-		}
-		// Util.pr("Returning field content: "+value.toString());
-
-		// Check if we are to strip extra pairs of braces before returning:
-		if (Globals.prefs.getBoolean("autoDoubleBraces")) {
-			// Do it:
-			while ((value.length() > 1) && (value.charAt(0) == '{')
-				&& (value.charAt(value.length() - 1) == '}')) {
-				value.deleteCharAt(value.length() - 1);
-				value.deleteCharAt(0);
-			}
-			// Problem: if the field content is "{DNA} blahblah {EPA}", one pair
-			// too much will be removed.
-			// Check if this is the case, and re-add as many pairs as needed.
-			while (hasNegativeBraceCount(value.toString())) {
-				value.insert(0, '{');
-				value.append('}');
-			}
-
-		}
-		return value.toString();
-
-	}
-
-	/**
-	 * Originalinhalt nach parseFieldContent(String) verschoben.
-	 * @return
-	 * @throws IOException
-	 */
-//	private String parseFieldContent() throws IOException {
-//		return parseFieldContent(null);
-//	}
-
-	/**
-	 * Check if a string at any point has had more ending braces (}) than
-	 * opening ones ({). Will e.g. return true for the string "DNA} blahblal
-	 * {EPA"
-	 * 
-	 * @param s
-	 *            The string to check.
-	 * @return true if at any index the brace count is negative.
-	 */
-	private boolean hasNegativeBraceCount(String s) {
-		// System.out.println(s);
-		int i = 0, count = 0;
-		while (i < s.length()) {
-			if (s.charAt(i) == '{')
-				count++;
-			else if (s.charAt(i) == '}')
-				count--;
-			if (count < 0)
-				return true;
-			i++;
-		}
-		return false;
-	}
-
-	/**
-	 * This method is used to parse string labels, field names, entry type and
-	 * numbers outside brackets.
-	 */
-	private String parseTextToken() throws IOException {
-		StringBuffer token = new StringBuffer(20);
-
-		while (true) {
-			int c = read();
-			// Util.pr(".. "+c);
-			if (c == -1) {
-				_eof = true;
-
-				return token.toString();
-			}
-
-			if (Character.isLetterOrDigit((char) c) || (c == ':') || (c == '-') || (c == '_')
-				|| (c == '*') || (c == '+') || (c == '.') || (c == '/') || (c == '\'')) {
-				token.append((char) c);
-			} else {
-				unread(c);
-				// Util.pr("Pasted text token: "+token.toString());
-				return token.toString();
-			}
-		}
-	}
-	
-	
-	/**
-	 * Tries to restore the key
-	 * 
-	 * @return rest of key on success, otherwise empty string
-	 * @throws IOException
-	 *             on Reader-Error
-	 */
-    private String fixKey() throws IOException {
-        StringBuilder key = new StringBuilder();
-        int lookahead_used = 0;
-        char currentChar;
-
-        // Find a char which ends key (','&&'\n') or entryfield ('='):
-        do {
-            currentChar = (char) read();
-            key.append(currentChar);
-            lookahead_used++;
-        } while ((currentChar != ',' && currentChar != '\n' && currentChar != '=')
-                && (lookahead_used < LOOKAHEAD));
-
-        // Consumed a char too much, back into reader and remove from key:
-        unread(currentChar);
-        key.deleteCharAt(key.length() - 1);
-
-        // Restore if possible:
-        switch (currentChar) {
-            case '=':
-
-                // Get entryfieldname, push it back and take rest as key
-                key = key.reverse();
-
-                boolean matchedAlpha = false;
-                for (int i = 0; i < key.length(); i++) {
-                    currentChar = key.charAt(i);
-
-                    /// Skip spaces:
-                    if (!matchedAlpha && currentChar == ' ') {
-                        continue;
-                    }
-                    matchedAlpha = true;
-
-                    // Begin of entryfieldname (e.g. author) -> push back:
-                    unread(currentChar);
-                    if (currentChar == ' ' || currentChar == '\n') {
-
-                        /*
-                         * found whitespaces, entryfieldname completed -> key in
-                         * keybuffer, skip whitespaces
-                         */
-                        StringBuilder newKey = new StringBuilder();
-                        for (int j = i; j < key.length(); j++) {
-                            currentChar = key.charAt(j);
-                            if (!Character.isWhitespace(currentChar)) {
-                                newKey.append(currentChar);
-                            }
-                        }
-
-                        // Finished, now reverse newKey and remove whitespaces:
-                        _pr.addWarning(Globals.lang("Line %0: Found corrupted BibTeX-key.",
-                                String.valueOf(line)));
-                        key = newKey.reverse();
-                    }
-                }
-                break;
-
-            case ',':
-
-                _pr.addWarning(Globals.lang("Line %0: Found corrupted BibTeX-key (contains whitespaces).",
-                        String.valueOf(line)));
-
-            case '\n':
-
-                _pr.addWarning(Globals.lang("Line %0: Found corrupted BibTeX-key (comma missing).",
-                        String.valueOf(line)));
-
-                break;
-
-            default:
-
-                // No more lookahead, give up:
-                unreadBuffer(key);
-                return "";
-        }
-
-        return removeWhitespaces(key).toString();
-    }
-
-	/**
-	 * removes whitespaces from <code>sb</code>
-	 * 
-	 * @param sb
-	 * @return
-	 */
-	private StringBuilder removeWhitespaces(StringBuilder sb) {
-		StringBuilder newSb = new StringBuilder();
-		char current;
-		for (int i = 0; i < sb.length(); ++i) {
-			current = sb.charAt(i);
-			if (!Character.isWhitespace(current))
-				newSb.append(current);
-		}
-		return newSb;
-	}
-
-	/**
-	 * pushes buffer back into input
-	 * 
-	 * @param sb
-	 * @throws IOException
-	 *             can be thrown if buffer is bigger than LOOKAHEAD
-	 */
-	private void unreadBuffer(StringBuilder sb) throws IOException {
-		for (int i = sb.length() - 1; i >= 0; --i) {
-			unread(sb.charAt(i));
-		}
-	}
-	
-	
-	/**
-	 * This method is used to parse the bibtex key for an entry.
-	 */
-	private String parseKey() throws IOException, NoLabelException {
-		StringBuffer token = new StringBuffer(20);
-
-		while (true) {
-			int c = read();
-			// Util.pr(".. '"+(char)c+"'\t"+c);
-			if (c == -1) {
-				_eof = true;
-
-				return token.toString();
-			}
-
-			// Ikke: #{}\uFFFD~\uFFFD
-			//
-			// G\uFFFDr: $_*+.-\/?"^
-			if (!Character.isWhitespace((char) c)
-				&& (Character.isLetterOrDigit((char) c) || (c == ':') || ((c != '#') && (c != '{') && (c != '}')
-					&& (c != '\uFFFD') && (c != '~') && (c != '\uFFFD') && (c != ',') && (c != '=')))) {
-				token.append((char) c);
-			} else {
-
-				if (Character.isWhitespace((char) c)) {
-					// We have encountered white space instead of the comma at
-					// the end of
-					// the key. Possibly the comma is missing, so we try to
-					// return what we
-					// have found, as the key and try to restore the rest in fixKey().
-					return token.toString()+fixKey();
-				} else if (c == ',') {
-					unread(c);
-					return token.toString();
-					// } else if (Character.isWhitespace((char)c)) {
-					// throw new NoLabelException(token.toString());
-				} else if (c == '=') {
-					// If we find a '=' sign, it is either an error, or
-					// the entry lacked a comma signifying the end of the key.
-
-					return token.toString();
-					// throw new NoLabelException(token.toString());
-
-				} else
-					throw new IOException("Error in line " + line + ":" + "Character '" + (char) c
-						+ "' is not " + "allowed in bibtex keys.");
-
-			}
-		}
-
-	}
-
-	private class NoLabelException extends Exception {
-		public NoLabelException(String hasRead) {
-			super(hasRead);
-		}
-	}
-
-	private StringBuffer parseBracketedText() throws IOException {
-		// Util.pr("Parse bracketed text");
-		StringBuffer value = new StringBuffer();
-
-		consume('{');
-
-		int brackets = 0;
-
-		while (!((peek() == '}') && (brackets == 0))) {
-
-			int j = read();
-			if ((j == -1) || (j == 65535)) {
-				throw new RuntimeException("Error in line " + line + ": EOF in mid-string");
-			} else if (j == '{')
-				brackets++;
-			else if (j == '}')
-				brackets--;
-
-			// If we encounter whitespace of any kind, read it as a
-			// simple space, and ignore any others that follow immediately.
-			/*
-			 * if (j == '\n') { if (peek() == '\n') value.append('\n'); } else
-			 */
-			if (Character.isWhitespace((char) j)) {
-				String whs = skipAndRecordWhitespace(j);
-
-				// System.out.println(":"+whs+":");
-
-				if (!whs.equals("") && !whs.equals("\n\t")) { // &&
-																// !whs.equals("\n"))
-
-					whs = whs.replaceAll("\t", ""); // Remove tabulators.
-
-					// while (whs.endsWith("\t"))
-					// whs = whs.substring(0, whs.length()-1);
-
-					value.append(whs);
-
-				} else {
-					value.append(' ');
-				}
-
-			} else
-				value.append((char) j);
-
-		}
-
-		consume('}');
-
-		return value;
-	}
-
-	private StringBuffer parseBracketedTextExactly() throws IOException {
-
-		StringBuffer value = new StringBuffer();
-
-		consume('{');
-
-		int brackets = 0;
-
-		while (!((peek() == '}') && (brackets == 0))) {
-
-			int j = read();
-			if ((j == -1) || (j == 65535)) {
-				throw new RuntimeException("Error in line " + line + ": EOF in mid-string");
-			} else if (j == '{')
-				brackets++;
-			else if (j == '}')
-				brackets--;
-
-			value.append((char) j);
-
-		}
-
-		consume('}');
-
-		return value;
-	}
-
-	private StringBuffer parseQuotedFieldExactly() throws IOException {
-
-		StringBuffer value = new StringBuffer();
-
-		consume('"');
-
-		int brackets = 0;
-
-		while (!((peek() == '"') && (brackets == 0))) {
-
-			int j = read();
-			if ((j == -1) || (j == 65535)) {
-				throw new RuntimeException("Error in line " + line + ": EOF in mid-string");
-			} else if (j == '{')
-				brackets++;
-			else if (j == '}')
-				brackets--;
-
-			value.append((char) j);
-
-		}
-
-		consume('"');
-
-		return value;
-	}
-
-	private void consume(char expected) throws IOException {
-		int c = read();
-
-		if (c != expected) {
-			throw new RuntimeException("Error in line " + line + ": Expected " + expected
-				+ " but received " + (char) c);
-		}
-
-	}
-
-	private boolean consumeUncritically(char expected) throws IOException {
-		int c;
-		while (((c = read()) != expected) && (c != -1) && (c != 65535)){
-		    // do nothing
-		}
-			
-		if ((c == -1) || (c == 65535))
-			_eof = true;
-
-		// Return true if we actually found the character we were looking for:
-		return c == expected;
-	}
-
-	private void consume(char expected1, char expected2) throws IOException {
-		// Consumes one of the two, doesn't care which appears.
-
-		int c = read();
-
-		if ((c != expected1) && (c != expected2)) {
-			throw new RuntimeException("Error in line " + line + ": Expected " + expected1 + " or "
-				+ expected2 + " but received " + c);
-
-		}
-
-	}
-
-	public void checkEntryTypes(ParserResult _pr) {
-		
-		for (BibtexEntry be : _db.getEntries()){
-			if (be.getType() instanceof UnknownEntryType) {
-				// Look up the unknown type name in our map of parsed types:
-
-				Object o = entryTypes.get(be.getType().getName().toLowerCase());
-				if (o != null) {
-					BibtexEntryType type = (BibtexEntryType) o;
-					be.setType(type);
-				} else {
-					// System.out.println("Unknown entry type:
-					// "+be.getType().getName());
-					_pr
-						.addWarning(Globals.lang("unknown entry type") + ": "
-							+ be.getType().getName() + ". " + Globals.lang("Type set to 'other'")
-							+ ".");
-					be.setType(BibtexEntryType.OTHER);
-				}
-			}
-		}
-	}
-
-    /**
-     * Read the JabRef signature, if any, and find what version number is given.
-     * This method advances the file reader only as far as the end of the first line of
-     * the JabRef signature, or up until the point where the read characters don't match
-     * the signature. This should ensure that the parser can continue from that spot without
-     * resetting the reader, without the risk of losing important contents.
-     *
-     * @return The version number, or null if not found.
-     * @throws IOException
-     */
-    private String readJabRefVersionNumber() throws IOException {
-        StringBuffer headerText = new StringBuffer();
-        
-        boolean keepon = true;
-        int piv = 0;
-        int c;
-
-        // We start by reading the standard part of the signature, which precedes
-        // the version number:
-        //                     This file was created with JabRef X.y.
-        while (keepon) {
-            c = peek();
-            headerText.append((char) c);
-            if ((piv == 0) && (Character.isWhitespace((char) c) || (c == '%')))
-                read();
-            else if (c == GUIGlobals.SIGNATURE.charAt(piv)) {
-                piv++;
-                read();
-            }
-            else {
-                keepon = false;
-                return null;
-            }
-
-            // Check if we've reached the end of the signature's standard part:
-            if (piv == GUIGlobals.SIGNATURE.length()) {
-                keepon = false;
-
-                // Found the standard part. Now read the version number:
-                StringBuilder sb = new StringBuilder();
-                while (((c=read()) != '\n') && (c != -1))
-                    sb.append((char)c);
-                String versionNum = sb.toString().trim();
-                // See if it fits the X.y. pattern:
-                if (Pattern.compile("[1-9]+\\.[1-9A-Za-z ]+\\.").matcher(versionNum).matches()) {
-                    // It matched. Remove the last period and return:
-                    return versionNum.substring(0, versionNum.length()-1);
-                }
-                else if (Pattern.compile("[1-9]+\\.[1-9]\\.[1-9A-Za-z ]+\\.").matcher(versionNum).matches()) {
-                    // It matched. Remove the last period and return:
-                    return versionNum.substring(0, versionNum.length()-1);
-                }
-
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * After a JabRef version number has been parsed and put into _pr,
-     * parse the version number to determine the JabRef major and minor version
-     * number
-     */
-    private void setMajorMinorVersions() {
-        String v = _pr.getJabrefVersion();
-        Pattern p = Pattern.compile("([0-9]+)\\.([0-9]+).*");
-        Pattern p2 = Pattern.compile("([0-9]+)\\.([0-9]+)\\.([0-9]+).*");
-        Matcher m = p.matcher(v);
-        Matcher m2 = p2.matcher(v);
-        if (m.matches())
-            if (m.groupCount() >= 2) {
-                _pr.setJabrefMajorVersion(Integer.parseInt(m.group(1)));
-                _pr.setJabrefMinorVersion(Integer.parseInt(m.group(2)));
-            }
-        if (m2.matches())
-            if (m2.groupCount() >= 3) {
-                _pr.setJabrefMinor2Version(Integer.parseInt(m2.group(3)));
-            }
-    }
-}
+/*
+ Copyright (C) 2003-06 David Weitzman, Nizar N. Batada, Morten O. Alver, Christopher Oezbek
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+
+package net.sf.jabref.imports;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.PushbackReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.*;
+
+/**
+ * Class for importing BibTeX-files.
+ * 
+ * Use:
+ * 
+ * BibtexParser parser = new BibtexParser(reader);
+ * 
+ * ParserResult result = parser.parse();
+ * 
+ * or
+ * 
+ * ParserResult result = BibtexParser.parse(reader);
+ * 
+ * Can be used stand-alone.
+ * 
+ * @author David Weitzman
+ * @author Nizar N. Batada
+ * @author Morten O. Alver
+ * @author Christopher Oezbek 
+ */
+public class BibtexParser {
+	
+	private PushbackReader _in;
+
+	private BibtexDatabase _db;
+
+	private HashMap<String, String> _meta;
+	
+	private HashMap<String, BibtexEntryType> entryTypes;
+
+	private boolean _eof = false;
+
+	private int line = 1;
+
+	private FieldContentParser fieldContentParser = new FieldContentParser();
+
+	private ParserResult _pr;
+	
+	private static final Integer LOOKAHEAD = 64;
+
+	public BibtexParser(Reader in) {
+
+		if (in == null) {
+			throw new NullPointerException();
+		}
+		if (Globals.prefs == null) {
+			Globals.prefs = JabRefPreferences.getInstance();
+		}
+		_in = new PushbackReader(in, LOOKAHEAD);
+	}
+
+	/**
+	 * Shortcut usage to create a Parser and read the input.
+	 * 
+	 * @param in -
+	 *            Reader to read from
+	 * @throws IOException
+	 */
+	public static ParserResult parse(Reader in) throws IOException {
+		BibtexParser parser = new BibtexParser(in);
+		return parser.parse();
+	}
+	
+	
+	/**
+	 * Parses BibtexEntries from the given string and returns the collection of all entries found.
+	 * 
+	 * @param bibtexString
+	 * 
+	 * @return Returns null if an error occurred, returns an empty collection if no entries where found. 
+	 */
+	public static Collection<BibtexEntry> fromString(String bibtexString){
+		StringReader reader = new StringReader(bibtexString);
+		BibtexParser parser = new BibtexParser(reader); 
+		try {
+			return parser.parse().getDatabase().getEntries();
+		} catch (Exception e){
+			return null;
+		}
+	}
+	
+	/**
+	 * Parses BibtexEntries from the given string and returns one entry found (or null if none found)
+	 * 
+	 * It is undetermined which entry is returned, so use this in case you know there is only one entry in the string.
+	 * 
+	 * @param bibtexString
+	 * 
+	 * @return The bibtexentry or null if non was found or an error occurred.
+	 */
+	public static BibtexEntry singleFromString(String bibtexString) {
+		Collection<BibtexEntry> c = fromString(bibtexString);
+		if ((c == null) || (c.size() == 0)) {
+			return null;
+		}
+        return c.iterator().next();
+	}	
+	
+	/**
+	 * Check whether the source is in the correct format for this importer.
+	 */
+	public static boolean isRecognizedFormat(Reader inOrig) throws IOException {
+		// Our strategy is to look for the "@<type>    {" line.
+		BufferedReader in = new BufferedReader(inOrig);
+
+		Pattern pat1 = Pattern.compile("@[a-zA-Z]*\\s*\\{");
+
+		String str;
+
+		while ((str = in.readLine()) != null) {
+
+			if (pat1.matcher(str).find())
+				return true;
+			else if (str.startsWith(GUIGlobals.SIGNATURE))
+				return true;
+		}
+
+		return false;
+	}
+
+	private void skipWhitespace() throws IOException {
+		int c;
+
+		while (true) {
+			c = read();
+			if ((c == -1) || (c == 65535)) {
+				_eof = true;
+				return;
+			}
+
+			if (Character.isWhitespace((char) c)) {
+				continue;
+			} else
+				// found non-whitespace char
+				// Util.pr("SkipWhitespace, stops: "+c);
+				unread(c);
+			/*
+			 * try { Thread.currentThread().sleep(500); } catch
+			 * (InterruptedException ex) {}
+			 */
+			break;
+		}
+	}
+
+	private String skipAndRecordWhitespace(int j) throws IOException {
+		int c;
+		StringBuffer sb = new StringBuffer();
+		if (j != ' ')
+			sb.append((char) j);
+		while (true) {
+			c = read();
+			if ((c == -1) || (c == 65535)) {
+				_eof = true;
+				return sb.toString();
+			}
+
+			if (Character.isWhitespace((char) c)) {
+				if (c != ' ')
+					sb.append((char) c);
+				continue;
+			} else
+				// found non-whitespace char
+				// Util.pr("SkipWhitespace, stops: "+c);
+				unread(c);
+			/*
+			 * try { Thread.currentThread().sleep(500); } catch
+			 * (InterruptedException ex) {}
+			 */
+			break;
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * Will parse the BibTex-Data found when reading from reader.
+	 * 
+	 * The reader will be consumed.
+	 * 
+	 * Multiple calls to parse() return the same results
+	 * 
+	 * @return ParserResult
+	 * @throws IOException
+	 */
+	public ParserResult parse() throws IOException {
+
+		// If we already parsed this, just return it.
+		if (_pr != null)
+			return _pr;
+
+        _db = new BibtexDatabase(); // Bibtex related contents.
+		_meta = new HashMap<String, String>(); // Metadata in comments for Bibkeeper.
+		entryTypes = new HashMap<String, BibtexEntryType>(); // To store custem entry types parsed.
+		_pr = new ParserResult(_db, null, entryTypes);
+
+        // First see if we can find the version number of the JabRef version that
+        // wrote the file:
+        String versionNum = readJabRefVersionNumber();
+        if (versionNum != null) {
+            _pr.setJabrefVersion(versionNum);
+            setMajorMinorVersions();
+        }
+        else {
+            // No version number found. However, we have only
+        }
+
+        skipWhitespace();
+
+		try {
+			while (!_eof) {
+				boolean found = consumeUncritically('@');
+				if (!found)
+					break;
+				skipWhitespace();
+				String entryType = parseTextToken();
+				BibtexEntryType tp = BibtexEntryType.getType(entryType);
+				boolean isEntry = (tp != null);
+				// Util.pr(tp.getName());
+				if (!isEntry) {
+					// The entry type name was not recognized. This can mean
+					// that it is a string, preamble, or comment. If so,
+					// parse and set accordingly. If not, assume it is an entry
+					// with an unknown type.
+					if (entryType.toLowerCase().equals("preamble")) {
+						_db.setPreamble(parsePreamble());
+					} else if (entryType.toLowerCase().equals("string")) {
+						BibtexString bs = parseString();
+						try {
+							_db.addString(bs);
+						} catch (KeyCollisionException ex) {
+							_pr.addWarning(Globals.lang("Duplicate string name") + ": "
+								+ bs.getName());
+							// ex.printStackTrace();
+						}
+					} else if (entryType.toLowerCase().equals("comment")) {
+						StringBuffer commentBuf = parseBracketedTextExactly();
+						/**
+						 * 
+						 * Metadata are used to store Bibkeeper-specific
+						 * information in .bib files.
+						 * 
+						 * Metadata are stored in bibtex files in the format
+						 * 
+						 * @comment{jabref-meta: type:data0;data1;data2;...}
+						 * 
+						 * Each comment that starts with the META_FLAG is stored
+						 * in the meta HashMap, with type as key. Unluckily, the
+						 * old META_FLAG bibkeeper-meta: was used in JabRef 1.0
+						 * and 1.1, so we need to support it as well. At least
+						 * for a while. We'll always save with the new one.
+						 */
+						String comment = commentBuf.toString().replaceAll("[\\x0d\\x0a]", "");
+						if (comment.substring(0,
+							Math.min(comment.length(), GUIGlobals.META_FLAG.length())).equals(
+							GUIGlobals.META_FLAG)
+							|| comment.substring(0,
+								Math.min(comment.length(), GUIGlobals.META_FLAG_OLD.length()))
+								.equals(GUIGlobals.META_FLAG_OLD)) {
+
+							String rest;
+							if (comment.substring(0, GUIGlobals.META_FLAG.length()).equals(
+								GUIGlobals.META_FLAG))
+								rest = comment.substring(GUIGlobals.META_FLAG.length());
+							else
+								rest = comment.substring(GUIGlobals.META_FLAG_OLD.length());
+
+							int pos = rest.indexOf(':');
+
+							if (pos > 0)
+								_meta.put(rest.substring(0, pos), rest.substring(pos + 1));
+							// We remove all line breaks in the metadata - these
+							// will have been inserted
+							// to prevent too long lines when the file was
+							// saved, and are not part of the data.
+							
+						} else if (comment.substring(0,
+							Math.min(comment.length(), GUIGlobals.ENTRYTYPE_FLAG.length())).equals(
+							GUIGlobals.ENTRYTYPE_FLAG)) {
+							 // A custom entry type can also be stored in a
+							 // "@comment"
+							CustomEntryType typ = CustomEntryType.parseEntryType(comment);
+							entryTypes.put(typ.getName().toLowerCase(), typ);
+						} else {
+							// FIXME: user comments are simply dropped
+							// at least, we log that we ignored the comment
+							Globals.logger(Globals.lang("Dropped comment from database") + ":" + comment);
+						}
+					} else {
+						// The entry type was not recognized. This may mean that
+						// it is a custom entry type whose definition will
+						// appear
+						// at the bottom of the file. So we use an
+						// UnknownEntryType
+						// to remember the type name by.
+						tp = new UnknownEntryType(entryType.toLowerCase());
+						// System.out.println("unknown type: "+entryType);
+						isEntry = true;
+					}
+				}
+
+				if (isEntry) // True if not comment, preamble or string.
+				{
+					/**
+					 * Morten Alver 13 Aug 2006: Trying to make the parser more
+					 * robust. If an exception is thrown when parsing an entry,
+					 * drop the entry and try to resume parsing. Add a warning
+					 * for the user.
+					 * 
+					 * An alternative solution is to try rescuing the entry for
+					 * which parsing failed, by returning the entry with the
+					 * exception and adding it before parsing is continued.
+					 */
+					try {
+						BibtexEntry be = parseEntry(tp);
+
+						boolean duplicateKey = _db.insertEntry(be);
+						if (duplicateKey) // JZTODO lyrics
+                            _pr.addDuplicateKey(be.getCiteKey());
+							/*_pr.addWarning(Globals.lang("duplicate BibTeX key") + ": "
+								+ be.getCiteKey() + " ("
+								+ Globals.lang("grouping may not work for this entry") + ")");                        */
+						else if (be.getCiteKey() == null || be.getCiteKey().equals("")) {
+							_pr.addWarning(Globals.lang("empty BibTeX key") + ": "
+								+ be.getAuthorTitleYear(40) + " ("
+								+ Globals.lang("grouping may not work for this entry") + ")");
+						}
+					} catch (IOException ex) {
+						ex.printStackTrace();
+						_pr.addWarning(Globals.lang("Error occured when parsing entry") + ": '"
+							+ ex.getMessage() + "'. " + Globals.lang("Skipped entry."));
+
+					}
+				}
+
+				skipWhitespace();
+			}
+
+			// Before returning the database, update entries with unknown type
+			// based on parsed type definitions, if possible.
+			checkEntryTypes(_pr);
+
+            // Instantiate meta data:
+            _pr.setMetaData(new MetaData(_meta, _db));
+
+			return _pr;
+		} catch (KeyCollisionException kce) {
+			// kce.printStackTrace();
+			throw new IOException("Duplicate ID in bibtex file: " + kce.toString());
+		}
+	}
+
+	private int peek() throws IOException {
+		int c = read();
+		unread(c);
+
+		return c;
+	}
+
+	private int read() throws IOException {
+		int c = _in.read();
+		if (c == '\n')
+			line++;
+		return c;
+	}
+
+	private void unread(int c) throws IOException {
+		if (c == '\n')
+			line--;
+		_in.unread(c);
+	}
+
+	public BibtexString parseString() throws IOException {
+		// Util.pr("Parsing string");
+		skipWhitespace();
+		consume('{', '(');
+		// while (read() != '}');
+		skipWhitespace();
+		// Util.pr("Parsing string name");
+		String name = parseTextToken();
+		// Util.pr("Parsed string name");
+		skipWhitespace();
+		// Util.pr("Now the contents");
+		consume('=');
+		String content = parseFieldContent(name);
+		// Util.pr("Now I'm going to consume a }");
+		consume('}', ')');
+		// Util.pr("Finished string parsing.");
+		String id = Util.createNeutralId();
+		return new BibtexString(id, name, content);
+	}
+
+	public String parsePreamble() throws IOException {
+		return parseBracketedText().toString();
+	}
+
+	public BibtexEntry parseEntry(BibtexEntryType tp) throws IOException {
+		String id = Util.createNeutralId();// createId(tp, _db);
+		BibtexEntry result = new BibtexEntry(id, tp);
+		skipWhitespace();
+		consume('{', '(');
+        int c = peek();
+        if ((c != '\n') && (c != '\r'))
+            skipWhitespace();
+		String key = null;
+		boolean doAgain = true;
+		while (doAgain) {
+			doAgain = false;
+			try {
+				if (key != null)
+					key = key + parseKey();// parseTextToken(),
+				else
+					key = parseKey();
+			} catch (NoLabelException ex) {
+				// This exception will be thrown if the entry lacks a key
+				// altogether, like in "@article{ author = { ...".
+				// It will also be thrown if a key contains =.
+				c = (char) peek();
+				if (Character.isWhitespace(c) || (c == '{') || (c == '\"')) {
+					String fieldName = ex.getMessage().trim().toLowerCase();
+					String cont = parseFieldContent(fieldName);
+					result.setField(fieldName, cont);
+				} else {
+					if (key != null)
+						key = key + ex.getMessage() + "=";
+					else
+						key = ex.getMessage() + "=";
+					doAgain = true;
+				}
+			}
+		}
+
+		if ((key != null) && key.equals(""))
+			key = null;
+
+		result.setField(BibtexFields.KEY_FIELD, key);
+		skipWhitespace();
+
+		while (true) {
+			c = peek();
+			if ((c == '}') || (c == ')')) {
+				break;
+			}
+
+			if (c == ',')
+				consume(',');
+
+			skipWhitespace();
+
+			c = peek();
+			if ((c == '}') || (c == ')')) {
+				break;
+			}
+			parseField(result);
+		}
+
+		consume('}', ')');
+		return result;
+	}
+
+	private void parseField(BibtexEntry entry) throws IOException {
+		String key = parseTextToken().toLowerCase();
+		// Util.pr("Field: _"+key+"_");
+		skipWhitespace();
+		consume('=');
+		String content = parseFieldContent(key);
+		// Now, if the field in question is set up to be fitted automatically
+		// with braces around
+		// capitals, we should remove those now when reading the field:
+		if (Globals.prefs.putBracesAroundCapitals(key)) {
+			content = Util.removeBracesAroundCapitals(content);
+		}
+		if (content.length() > 0) {
+			if (entry.getField(key) == null)
+				entry.setField(key, content);
+			else {
+				// The following hack enables the parser to deal with multiple
+				// author or
+				// editor lines, stringing them together instead of getting just
+				// one of them.
+				// Multiple author or editor lines are not allowed by the bibtex
+				// format, but
+				// at least one online database exports bibtex like that, making
+				// it inconvenient
+				// for users if JabRef didn't accept it.
+				if (key.equals("author") || key.equals("editor"))
+					entry.setField(key, entry.getField(key) + " and " + content);
+			}
+		}
+	}
+
+	private String parseFieldContent(String key) throws IOException {
+		skipWhitespace();
+		StringBuffer value = new StringBuffer();
+		int c = '.';
+
+		while (((c = peek()) != ',') && (c != '}') && (c != ')')) {
+
+			if (_eof) {
+				throw new RuntimeException("Error in line " + line + ": EOF in mid-string");
+			}
+			if (c == '"') {
+				StringBuffer text = parseQuotedFieldExactly();
+				value.append(fieldContentParser.format(text));
+				/*
+				 * 
+				 * The following code doesn't handle {"} correctly: // value is
+				 * a string consume('"');
+				 * 
+				 * while (!((peek() == '"') && (j != '\\'))) { j = read(); if
+				 * (_eof || (j == -1) || (j == 65535)) { throw new
+				 * RuntimeException("Error in line "+line+ ": EOF in
+				 * mid-string"); }
+				 * 
+				 * value.append((char) j); }
+				 * 
+				 * consume('"');
+				 */
+			} else if (c == '{') {
+				// Value is a string enclosed in brackets. There can be pairs
+				// of brackets inside of a field, so we need to count the
+				// brackets to know when the string is finished.
+				StringBuffer text = parseBracketedTextExactly();
+				value.append(fieldContentParser.format(text, key));
+
+			} else if (Character.isDigit((char) c)) { // value is a number
+
+				String numString = parseTextToken();
+                // Morten Alver 2007-07-04: I don't see the point of parsing the integer
+                // and converting it back to a string, so I'm removing the construct below
+                // the following line:
+                value.append(numString);
+                /*
+                try {
+					// Fixme: What is this for?
+					value.append(String.valueOf(Integer.parseInt(numString)));
+				} catch (NumberFormatException e) {
+					// If Integer could not be parsed then just add the text
+					// Used to fix [ 1594123 ] Failure to import big numbers
+					value.append(numString);
+				}
+				*/
+			} else if (c == '#') {
+				consume('#');
+			} else {
+				String textToken = parseTextToken();
+				if (textToken.length() == 0)
+					throw new IOException("Error in line " + line + " or above: "
+						+ "Empty text token.\nThis could be caused "
+						+ "by a missing comma between two fields.");
+				value.append("#").append(textToken).append("#");
+				// Util.pr(parseTextToken());
+				// throw new RuntimeException("Unknown field type");
+			}
+			skipWhitespace();
+		}
+		// Util.pr("Returning field content: "+value.toString());
+
+		// Check if we are to strip extra pairs of braces before returning:
+		if (Globals.prefs.getBoolean("autoDoubleBraces")) {
+			// Do it:
+			while ((value.length() > 1) && (value.charAt(0) == '{')
+				&& (value.charAt(value.length() - 1) == '}')) {
+				value.deleteCharAt(value.length() - 1);
+				value.deleteCharAt(0);
+			}
+			// Problem: if the field content is "{DNA} blahblah {EPA}", one pair
+			// too much will be removed.
+			// Check if this is the case, and re-add as many pairs as needed.
+			while (hasNegativeBraceCount(value.toString())) {
+				value.insert(0, '{');
+				value.append('}');
+			}
+
+		}
+		return value.toString();
+
+	}
+
+	/**
+	 * Originalinhalt nach parseFieldContent(String) verschoben.
+	 * @return
+	 * @throws IOException
+	 */
+//	private String parseFieldContent() throws IOException {
+//		return parseFieldContent(null);
+//	}
+
+	/**
+	 * Check if a string at any point has had more ending braces (}) than
+	 * opening ones ({). Will e.g. return true for the string "DNA} blahblal
+	 * {EPA"
+	 * 
+	 * @param s
+	 *            The string to check.
+	 * @return true if at any index the brace count is negative.
+	 */
+	private boolean hasNegativeBraceCount(String s) {
+		// System.out.println(s);
+		int i = 0, count = 0;
+		while (i < s.length()) {
+			if (s.charAt(i) == '{')
+				count++;
+			else if (s.charAt(i) == '}')
+				count--;
+			if (count < 0)
+				return true;
+			i++;
+		}
+		return false;
+	}
+
+	/**
+	 * This method is used to parse string labels, field names, entry type and
+	 * numbers outside brackets.
+	 */
+	private String parseTextToken() throws IOException {
+		StringBuffer token = new StringBuffer(20);
+
+		while (true) {
+			int c = read();
+			// Util.pr(".. "+c);
+			if (c == -1) {
+				_eof = true;
+
+				return token.toString();
+			}
+
+			if (Character.isLetterOrDigit((char) c) || (c == ':') || (c == '-') || (c == '_')
+				|| (c == '*') || (c == '+') || (c == '.') || (c == '/') || (c == '\'')) {
+				token.append((char) c);
+			} else {
+				unread(c);
+				// Util.pr("Pasted text token: "+token.toString());
+				return token.toString();
+			}
+		}
+	}
+	
+	
+	/**
+	 * Tries to restore the key
+	 * 
+	 * @return rest of key on success, otherwise empty string
+	 * @throws IOException
+	 *             on Reader-Error
+	 */
+    private String fixKey() throws IOException {
+        StringBuilder key = new StringBuilder();
+        int lookahead_used = 0;
+        char currentChar;
+
+        // Find a char which ends key (','&&'\n') or entryfield ('='):
+        do {
+            currentChar = (char) read();
+            key.append(currentChar);
+            lookahead_used++;
+        } while ((currentChar != ',' && currentChar != '\n' && currentChar != '=')
+                && (lookahead_used < LOOKAHEAD));
+
+        // Consumed a char too much, back into reader and remove from key:
+        unread(currentChar);
+        key.deleteCharAt(key.length() - 1);
+
+        // Restore if possible:
+        switch (currentChar) {
+            case '=':
+
+                // Get entryfieldname, push it back and take rest as key
+                key = key.reverse();
+
+                boolean matchedAlpha = false;
+                for (int i = 0; i < key.length(); i++) {
+                    currentChar = key.charAt(i);
+
+                    /// Skip spaces:
+                    if (!matchedAlpha && currentChar == ' ') {
+                        continue;
+                    }
+                    matchedAlpha = true;
+
+                    // Begin of entryfieldname (e.g. author) -> push back:
+                    unread(currentChar);
+                    if (currentChar == ' ' || currentChar == '\n') {
+
+                        /*
+                         * found whitespaces, entryfieldname completed -> key in
+                         * keybuffer, skip whitespaces
+                         */
+                        StringBuilder newKey = new StringBuilder();
+                        for (int j = i; j < key.length(); j++) {
+                            currentChar = key.charAt(j);
+                            if (!Character.isWhitespace(currentChar)) {
+                                newKey.append(currentChar);
+                            }
+                        }
+
+                        // Finished, now reverse newKey and remove whitespaces:
+                        _pr.addWarning(Globals.lang("Line %0: Found corrupted BibTeX-key.",
+                                String.valueOf(line)));
+                        key = newKey.reverse();
+                    }
+                }
+                break;
+
+            case ',':
+
+                _pr.addWarning(Globals.lang("Line %0: Found corrupted BibTeX-key (contains whitespaces).",
+                        String.valueOf(line)));
+
+            case '\n':
+
+                _pr.addWarning(Globals.lang("Line %0: Found corrupted BibTeX-key (comma missing).",
+                        String.valueOf(line)));
+
+                break;
+
+            default:
+
+                // No more lookahead, give up:
+                unreadBuffer(key);
+                return "";
+        }
+
+        return removeWhitespaces(key).toString();
+    }
+
+	/**
+	 * removes whitespaces from <code>sb</code>
+	 * 
+	 * @param sb
+	 * @return
+	 */
+	private StringBuilder removeWhitespaces(StringBuilder sb) {
+		StringBuilder newSb = new StringBuilder();
+		char current;
+		for (int i = 0; i < sb.length(); ++i) {
+			current = sb.charAt(i);
+			if (!Character.isWhitespace(current))
+				newSb.append(current);
+		}
+		return newSb;
+	}
+
+	/**
+	 * pushes buffer back into input
+	 * 
+	 * @param sb
+	 * @throws IOException
+	 *             can be thrown if buffer is bigger than LOOKAHEAD
+	 */
+	private void unreadBuffer(StringBuilder sb) throws IOException {
+		for (int i = sb.length() - 1; i >= 0; --i) {
+			unread(sb.charAt(i));
+		}
+	}
+	
+	
+	/**
+	 * This method is used to parse the bibtex key for an entry.
+	 */
+	private String parseKey() throws IOException, NoLabelException {
+		StringBuffer token = new StringBuffer(20);
+
+		while (true) {
+			int c = read();
+			// Util.pr(".. '"+(char)c+"'\t"+c);
+			if (c == -1) {
+				_eof = true;
+
+				return token.toString();
+			}
+
+			// Ikke: #{}\uFFFD~\uFFFD
+			//
+			// G\uFFFDr: $_*+.-\/?"^
+			if (!Character.isWhitespace((char) c)
+				&& (Character.isLetterOrDigit((char) c) || (c == ':') || ((c != '#') && (c != '{') && (c != '}')
+					&& (c != '\uFFFD') && (c != '~') && (c != '\uFFFD') && (c != ',') && (c != '=')))) {
+				token.append((char) c);
+			} else {
+
+				if (Character.isWhitespace((char) c)) {
+					// We have encountered white space instead of the comma at
+					// the end of
+					// the key. Possibly the comma is missing, so we try to
+					// return what we
+					// have found, as the key and try to restore the rest in fixKey().
+					return token.toString()+fixKey();
+				} else if (c == ',') {
+					unread(c);
+					return token.toString();
+					// } else if (Character.isWhitespace((char)c)) {
+					// throw new NoLabelException(token.toString());
+				} else if (c == '=') {
+					// If we find a '=' sign, it is either an error, or
+					// the entry lacked a comma signifying the end of the key.
+
+					return token.toString();
+					// throw new NoLabelException(token.toString());
+
+				} else
+					throw new IOException("Error in line " + line + ":" + "Character '" + (char) c
+						+ "' is not " + "allowed in bibtex keys.");
+
+			}
+		}
+
+	}
+
+	private class NoLabelException extends Exception {
+		public NoLabelException(String hasRead) {
+			super(hasRead);
+		}
+	}
+
+	private StringBuffer parseBracketedText() throws IOException {
+		// Util.pr("Parse bracketed text");
+		StringBuffer value = new StringBuffer();
+
+		consume('{');
+
+		int brackets = 0;
+
+		while (!((peek() == '}') && (brackets == 0))) {
+
+			int j = read();
+			if ((j == -1) || (j == 65535)) {
+				throw new RuntimeException("Error in line " + line + ": EOF in mid-string");
+			} else if (j == '{')
+				brackets++;
+			else if (j == '}')
+				brackets--;
+
+			// If we encounter whitespace of any kind, read it as a
+			// simple space, and ignore any others that follow immediately.
+			/*
+			 * if (j == '\n') { if (peek() == '\n') value.append('\n'); } else
+			 */
+			if (Character.isWhitespace((char) j)) {
+				String whs = skipAndRecordWhitespace(j);
+
+				// System.out.println(":"+whs+":");
+
+				if (!whs.equals("") && !whs.equals("\n\t")) { // &&
+																// !whs.equals("\n"))
+
+					whs = whs.replaceAll("\t", ""); // Remove tabulators.
+
+					// while (whs.endsWith("\t"))
+					// whs = whs.substring(0, whs.length()-1);
+
+					value.append(whs);
+
+				} else {
+					value.append(' ');
+				}
+
+			} else
+				value.append((char) j);
+
+		}
+
+		consume('}');
+
+		return value;
+	}
+
+	private StringBuffer parseBracketedTextExactly() throws IOException {
+
+		StringBuffer value = new StringBuffer();
+
+		consume('{');
+
+		int brackets = 0;
+
+		while (!((peek() == '}') && (brackets == 0))) {
+
+			int j = read();
+			if ((j == -1) || (j == 65535)) {
+				throw new RuntimeException("Error in line " + line + ": EOF in mid-string");
+			} else if (j == '{')
+				brackets++;
+			else if (j == '}')
+				brackets--;
+
+			value.append((char) j);
+
+		}
+
+		consume('}');
+
+		return value;
+	}
+
+	private StringBuffer parseQuotedFieldExactly() throws IOException {
+
+		StringBuffer value = new StringBuffer();
+
+		consume('"');
+
+		int brackets = 0;
+
+		while (!((peek() == '"') && (brackets == 0))) {
+
+			int j = read();
+			if ((j == -1) || (j == 65535)) {
+				throw new RuntimeException("Error in line " + line + ": EOF in mid-string");
+			} else if (j == '{')
+				brackets++;
+			else if (j == '}')
+				brackets--;
+
+			value.append((char) j);
+
+		}
+
+		consume('"');
+
+		return value;
+	}
+
+	private void consume(char expected) throws IOException {
+		int c = read();
+
+		if (c != expected) {
+			throw new RuntimeException("Error in line " + line + ": Expected " + expected
+				+ " but received " + (char) c);
+		}
+
+	}
+
+	private boolean consumeUncritically(char expected) throws IOException {
+		int c;
+		while (((c = read()) != expected) && (c != -1) && (c != 65535)){
+		    // do nothing
+		}
+			
+		if ((c == -1) || (c == 65535))
+			_eof = true;
+
+		// Return true if we actually found the character we were looking for:
+		return c == expected;
+	}
+
+	private void consume(char expected1, char expected2) throws IOException {
+		// Consumes one of the two, doesn't care which appears.
+
+		int c = read();
+
+		if ((c != expected1) && (c != expected2)) {
+			throw new RuntimeException("Error in line " + line + ": Expected " + expected1 + " or "
+				+ expected2 + " but received " + c);
+
+		}
+
+	}
+
+	public void checkEntryTypes(ParserResult _pr) {
+		
+		for (BibtexEntry be : _db.getEntries()){
+			if (be.getType() instanceof UnknownEntryType) {
+				// Look up the unknown type name in our map of parsed types:
+
+				Object o = entryTypes.get(be.getType().getName().toLowerCase());
+				if (o != null) {
+					BibtexEntryType type = (BibtexEntryType) o;
+					be.setType(type);
+				} else {
+					// System.out.println("Unknown entry type:
+					// "+be.getType().getName());
+					_pr
+						.addWarning(Globals.lang("unknown entry type") + ": "
+							+ be.getType().getName() + ". " + Globals.lang("Type set to 'other'")
+							+ ".");
+					be.setType(BibtexEntryType.OTHER);
+				}
+			}
+		}
+	}
+
+    /**
+     * Read the JabRef signature, if any, and find what version number is given.
+     * This method advances the file reader only as far as the end of the first line of
+     * the JabRef signature, or up until the point where the read characters don't match
+     * the signature. This should ensure that the parser can continue from that spot without
+     * resetting the reader, without the risk of losing important contents.
+     *
+     * @return The version number, or null if not found.
+     * @throws IOException
+     */
+    private String readJabRefVersionNumber() throws IOException {
+        StringBuffer headerText = new StringBuffer();
+        
+        boolean keepon = true;
+        int piv = 0;
+        int c;
+
+        // We start by reading the standard part of the signature, which precedes
+        // the version number:
+        //                     This file was created with JabRef X.y.
+        while (keepon) {
+            c = peek();
+            headerText.append((char) c);
+            if ((piv == 0) && (Character.isWhitespace((char) c) || (c == '%')))
+                read();
+            else if (c == GUIGlobals.SIGNATURE.charAt(piv)) {
+                piv++;
+                read();
+            }
+            else {
+                keepon = false;
+                return null;
+            }
+
+            // Check if we've reached the end of the signature's standard part:
+            if (piv == GUIGlobals.SIGNATURE.length()) {
+                keepon = false;
+
+                // Found the standard part. Now read the version number:
+                StringBuilder sb = new StringBuilder();
+                while (((c=read()) != '\n') && (c != -1))
+                    sb.append((char)c);
+                String versionNum = sb.toString().trim();
+                // See if it fits the X.y. pattern:
+                if (Pattern.compile("[1-9]+\\.[1-9A-Za-z ]+\\.").matcher(versionNum).matches()) {
+                    // It matched. Remove the last period and return:
+                    return versionNum.substring(0, versionNum.length()-1);
+                }
+                else if (Pattern.compile("[1-9]+\\.[1-9]\\.[1-9A-Za-z ]+\\.").matcher(versionNum).matches()) {
+                    // It matched. Remove the last period and return:
+                    return versionNum.substring(0, versionNum.length()-1);
+                }
+
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * After a JabRef version number has been parsed and put into _pr,
+     * parse the version number to determine the JabRef major and minor version
+     * number
+     */
+    private void setMajorMinorVersions() {
+        String v = _pr.getJabrefVersion();
+        Pattern p = Pattern.compile("([0-9]+)\\.([0-9]+).*");
+        Pattern p2 = Pattern.compile("([0-9]+)\\.([0-9]+)\\.([0-9]+).*");
+        Matcher m = p.matcher(v);
+        Matcher m2 = p2.matcher(v);
+        if (m.matches())
+            if (m.groupCount() >= 2) {
+                _pr.setJabrefMajorVersion(Integer.parseInt(m.group(1)));
+                _pr.setJabrefMinorVersion(Integer.parseInt(m.group(2)));
+            }
+        if (m2.matches())
+            if (m2.groupCount() >= 3) {
+                _pr.setJabrefMinor2Version(Integer.parseInt(m2.group(3)));
+            }
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/BiomailImporter.java b/src/java/net/sf/jabref/imports/BiomailImporter.java
index 743ed2c..1657a13 100644
--- a/src/java/net/sf/jabref/imports/BiomailImporter.java
+++ b/src/java/net/sf/jabref/imports/BiomailImporter.java
@@ -1,207 +1,207 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.regex.Pattern;
-import net.sf.jabref.BibtexFields;
-
-
-/**
- * Importer for the ISI Web of Science format.
- */
-public class BiomailImporter extends ImportFormat {
-    /**
-     * Return the name of this import format.
-     */
-    public String getFormatName() {
-        return "Biomail";
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-     */
-    public String getCLIId() {
-      return "biomail";
-    }
-
-    /**
-     * Check whether the source is in the correct format for this importer.
-     */
-    public boolean isRecognizedFormat(InputStream stream)
-            throws IOException {
-        // Our strategy is to look for the "BioMail" line.
-        BufferedReader in =
-                new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-        Pattern pat1 = Pattern.compile("BioMail");
-
-        String str;
-
-        while ((str = in.readLine()) != null) {
-
-            if (pat1.matcher(str).find())
-                return true;
-        }
-
-        return false;
-    }
-
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     */
-    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
-        StringBuffer sb = new StringBuffer();
-
-        BufferedReader in =
-                new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-
-        String str;
-
-        while ((str = in.readLine()) != null) {
-            if (str.length() < 3)
-                continue;
-
-            // begining of a new item
-            if (str.substring(0, 6).equals("PMID- "))
-                sb.append("::").append(str);
-            else {
-                String beg = str.substring(0, 6);
-
-                if (beg.indexOf(" ") > 0) {
-                    sb.append(" ## "); // mark the begining of each field
-                    sb.append(str);
-                } else {
-                    sb.append("EOLEOL"); // mark the end of each line
-                    sb.append(str.trim());
-                }
-            }
-        }
-
-        String[] entries = sb.toString().split("::");
-
-        // skip the first entry as it is either empty or has document header
-        HashMap<String, String> hm = new HashMap<String, String>();
-
-        for (int i = 0; i < entries.length; i++) {
-            String[] fields = entries[i].split(" ## ");
-
-            if (fields.length == 0)
-                fields = entries[i].split("\n");
-
-            String Type = "";
-            String pages = "";
-            String shortauthor = "";
-            String fullauthor = "";
-            hm.clear();
-
-            for (int j = 0; j < fields.length; j++) {
-                System.out.println(">>>"+fields[j]+"<<<");
-
-                //empty field don't do anything
-                if (fields[j].length() <= 2)
-                    continue;
-
-                String beg = fields[j].substring(0, 6);
-                String value = fields[j].substring(6);
-                value = value.trim();
-
-                if (beg.equals("PT  - ")) {
-                    // PT = value.replaceAll("JOURNAL ARTICLE", "article").replaceAll("Journal Article", "article");
-                    Type = "article"; //make all of them PT?
-                } else if (beg.equals("TY  - ")) {
-                    if ("CONF".equals(value))
-                        Type = "inproceedings";
-                } else if (beg.equals("JO  - "))
-                    hm.put("booktitle", value);
-                else if (beg.equals("FAU - ")) {
-                    String tmpauthor = value.replaceAll("EOLEOL", " and ");
-
-                    // if there is already someone there then append with "and"
-                    if (!"".equals(fullauthor))
-                        fullauthor = fullauthor + " and " + tmpauthor;
-                    else
-                        fullauthor = tmpauthor;
-                } else if (beg.equals("AU  - ")) {
-                    String tmpauthor = value.replaceAll("EOLEOL", " and ").replaceAll(" ", ", ");
-
-                    // if there is already someone there then append with "and"
-                    if (!"".equals(shortauthor))
-                        shortauthor = shortauthor + " and " + tmpauthor;
-                    else
-                        shortauthor = tmpauthor;
-                } else if (beg.equals("TI  - "))
-                    hm.put("title", value.replaceAll("EOLEOL", " "));
-                else if (beg.equals("TA  - "))
-                    hm.put("journal", value.replaceAll("EOLEOL", " "));
-                else if (beg.equals("AB  - "))
-                    hm.put("abstract", value.replaceAll("EOLEOL", " "));
-                else if (beg.equals("PG  - "))
-                    pages = value.replaceAll("-", "--");
-                else if (beg.equals("IP  - "))
-                    hm.put("number", value);
-                else if (beg.equals("DP  - ")) {
-                    String[] parts = value.split(" "); // sometimes this is just year, sometimes full date
-                    hm.put("year", parts[0]);
-                } else if (beg.equals("VI  - "))
-                    hm.put("volume", value);
-                else if (beg.equals("AID - ")) {
-                    String[] parts = value.split(" ");
-                    if ("[doi]".equals(parts[1])) {
-                        hm.put("doi", parts[0]);
-                        hm.put("url", "http://dx.doi.org/" + parts[0]);
-                    }
-                }
-            }
-
-            if (!"".equals(pages))
-                hm.put("pages", pages);
-            if (!"".equals(fullauthor))
-                hm.put("author", fullauthor);
-            else if (!"".equals(shortauthor))
-                hm.put("author", shortauthor);
-
-            BibtexEntry b =
-                    new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals.getEntryType(Type)); // id assumes an existing database so don't
-
-            // create one here
-            b.setField(hm);
-
-            // the first bibitem is always empty, presumably as a result of trying
-            // to parse header informaion. So add only if we have at least author or
-            // title fields.
-            if (hm.get("author") != null || hm.get("title") != null)
-                bibitems.add(b);
-        }
-
-        return bibitems;
-    }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.regex.Pattern;
+import net.sf.jabref.BibtexFields;
+
+
+/**
+ * Importer for the ISI Web of Science format.
+ */
+public class BiomailImporter extends ImportFormat {
+    /**
+     * Return the name of this import format.
+     */
+    public String getFormatName() {
+        return "Biomail";
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+     */
+    public String getCLIId() {
+      return "biomail";
+    }
+
+    /**
+     * Check whether the source is in the correct format for this importer.
+     */
+    public boolean isRecognizedFormat(InputStream stream)
+            throws IOException {
+        // Our strategy is to look for the "BioMail" line.
+        BufferedReader in =
+                new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+        Pattern pat1 = Pattern.compile("BioMail");
+
+        String str;
+
+        while ((str = in.readLine()) != null) {
+
+            if (pat1.matcher(str).find())
+                return true;
+        }
+
+        return false;
+    }
+
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     */
+    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
+        StringBuffer sb = new StringBuffer();
+
+        BufferedReader in =
+                new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+
+        String str;
+
+        while ((str = in.readLine()) != null) {
+            if (str.length() < 3)
+                continue;
+
+            // begining of a new item
+            if (str.substring(0, 6).equals("PMID- "))
+                sb.append("::").append(str);
+            else {
+                String beg = str.substring(0, 6);
+
+                if (beg.indexOf(" ") > 0) {
+                    sb.append(" ## "); // mark the begining of each field
+                    sb.append(str);
+                } else {
+                    sb.append("EOLEOL"); // mark the end of each line
+                    sb.append(str.trim());
+                }
+            }
+        }
+
+        String[] entries = sb.toString().split("::");
+
+        // skip the first entry as it is either empty or has document header
+        HashMap<String, String> hm = new HashMap<String, String>();
+
+        for (int i = 0; i < entries.length; i++) {
+            String[] fields = entries[i].split(" ## ");
+
+            if (fields.length == 0)
+                fields = entries[i].split("\n");
+
+            String Type = "";
+            String pages = "";
+            String shortauthor = "";
+            String fullauthor = "";
+            hm.clear();
+
+            for (int j = 0; j < fields.length; j++) {
+                System.out.println(">>>"+fields[j]+"<<<");
+
+                //empty field don't do anything
+                if (fields[j].length() <= 2)
+                    continue;
+
+                String beg = fields[j].substring(0, 6);
+                String value = fields[j].substring(6);
+                value = value.trim();
+
+                if (beg.equals("PT  - ")) {
+                    // PT = value.replaceAll("JOURNAL ARTICLE", "article").replaceAll("Journal Article", "article");
+                    Type = "article"; //make all of them PT?
+                } else if (beg.equals("TY  - ")) {
+                    if ("CONF".equals(value))
+                        Type = "inproceedings";
+                } else if (beg.equals("JO  - "))
+                    hm.put("booktitle", value);
+                else if (beg.equals("FAU - ")) {
+                    String tmpauthor = value.replaceAll("EOLEOL", " and ");
+
+                    // if there is already someone there then append with "and"
+                    if (!"".equals(fullauthor))
+                        fullauthor = fullauthor + " and " + tmpauthor;
+                    else
+                        fullauthor = tmpauthor;
+                } else if (beg.equals("AU  - ")) {
+                    String tmpauthor = value.replaceAll("EOLEOL", " and ").replaceAll(" ", ", ");
+
+                    // if there is already someone there then append with "and"
+                    if (!"".equals(shortauthor))
+                        shortauthor = shortauthor + " and " + tmpauthor;
+                    else
+                        shortauthor = tmpauthor;
+                } else if (beg.equals("TI  - "))
+                    hm.put("title", value.replaceAll("EOLEOL", " "));
+                else if (beg.equals("TA  - "))
+                    hm.put("journal", value.replaceAll("EOLEOL", " "));
+                else if (beg.equals("AB  - "))
+                    hm.put("abstract", value.replaceAll("EOLEOL", " "));
+                else if (beg.equals("PG  - "))
+                    pages = value.replaceAll("-", "--");
+                else if (beg.equals("IP  - "))
+                    hm.put("number", value);
+                else if (beg.equals("DP  - ")) {
+                    String[] parts = value.split(" "); // sometimes this is just year, sometimes full date
+                    hm.put("year", parts[0]);
+                } else if (beg.equals("VI  - "))
+                    hm.put("volume", value);
+                else if (beg.equals("AID - ")) {
+                    String[] parts = value.split(" ");
+                    if ("[doi]".equals(parts[1])) {
+                        hm.put("doi", parts[0]);
+                        hm.put("url", "http://dx.doi.org/" + parts[0]);
+                    }
+                }
+            }
+
+            if (!"".equals(pages))
+                hm.put("pages", pages);
+            if (!"".equals(fullauthor))
+                hm.put("author", fullauthor);
+            else if (!"".equals(shortauthor))
+                hm.put("author", shortauthor);
+
+            BibtexEntry b =
+                    new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals.getEntryType(Type)); // id assumes an existing database so don't
+
+            // create one here
+            b.setField(hm);
+
+            // the first bibitem is always empty, presumably as a result of trying
+            // to parse header informaion. So add only if we have at least author or
+            // title fields.
+            if (hm.get("author") != null || hm.get("title") != null)
+                bibitems.add(b);
+        }
+
+        return bibitems;
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/imports/BooleanAssign.java b/src/java/net/sf/jabref/imports/BooleanAssign.java
index 39a1843..13b91f8 100644
--- a/src/java/net/sf/jabref/imports/BooleanAssign.java
+++ b/src/java/net/sf/jabref/imports/BooleanAssign.java
@@ -1,36 +1,36 @@
-/*  Copyright (C) 2003-2011 M. Spiegel
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-public class BooleanAssign {
-    
-    boolean value;
-    
-    /**
-	 * @param b
-	 */
-	public BooleanAssign(boolean b) {
-		setValue(b);		
-	}
-
-	public void setValue(boolean value) {
-        this.value = value;
-    }
-    
-    public boolean getValue() {
-        return(value);
-    }
-}
+/*  Copyright (C) 2003-2011 M. Spiegel
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+public class BooleanAssign {
+    
+    boolean value;
+    
+    /**
+	 * @param b
+	 */
+	public BooleanAssign(boolean b) {
+		setValue(b);		
+	}
+
+	public void setValue(boolean value) {
+        this.value = value;
+    }
+    
+    public boolean getValue() {
+        return(value);
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/CaseKeeper.java b/src/java/net/sf/jabref/imports/CaseKeeper.java
index 988d0d8..c3a7696 100644
--- a/src/java/net/sf/jabref/imports/CaseKeeper.java
+++ b/src/java/net/sf/jabref/imports/CaseKeeper.java
@@ -1,64 +1,64 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.util.Arrays;
-import java.util.Comparator;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-
-public class CaseKeeper implements LayoutFormatter {
-    
-    public CaseKeeper() {
-	super();
-    }
-    
-    public String format(String text, String [] listOfWords) {
-	if (text == null) {
-	    return null;
-        }
-        Arrays.sort(listOfWords, new LengthComparator());  
-        // For each word in the list
-	for (int i = 0; i < listOfWords.length; i++) {
-            // Add {} if the character before is a space, -, /, (, [, ", or } or if it is at the start of the string but not if it is followed by a }
-	    text = text.replaceAll("(^|[- /\\[(}\"])" + listOfWords[i] + "($|[^}])","$1\\{" + listOfWords[i] + "\\}$2");
-	}
-	return text;
-    }
-    
-
-    public String format(String text) {
-	if (text == null) {
-	    return null;
-        }
-        final CaseKeeperList list = new CaseKeeperList();
-	return this.format(text,list.getAll());
-    }
-    
-
-}
-
-class LengthComparator implements Comparator<String>{
-    @Override
-    public int compare(String o1, String o2) {  
-        if (o1.length() > o2.length()) {
-            return -1;
-        } else if (o1.length() == o2.length()) {
-            return 0;
-        }
-        return 1;
-    }
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.util.Arrays;
+import java.util.Comparator;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+public class CaseKeeper implements LayoutFormatter {
+    
+    public CaseKeeper() {
+	super();
+    }
+    
+    public String format(String text, String [] listOfWords) {
+	if (text == null) {
+	    return null;
+        }
+        Arrays.sort(listOfWords, new LengthComparator());  
+        // For each word in the list
+	for (int i = 0; i < listOfWords.length; i++) {
+            // Add {} if the character before is a space, -, /, (, [, ", or } or if it is at the start of the string but not if it is followed by a }
+	    text = text.replaceAll("(^|[- /\\[(}\"])" + listOfWords[i] + "($|[^}])","$1\\{" + listOfWords[i] + "\\}$2");
+	}
+	return text;
+    }
+    
+
+    public String format(String text) {
+	if (text == null) {
+	    return null;
+        }
+        final CaseKeeperList list = new CaseKeeperList();
+	return this.format(text,list.getAll());
+    }
+    
+
+}
+
+class LengthComparator implements Comparator<String>{
+    @Override
+    public int compare(String o1, String o2) {  
+        if (o1.length() > o2.length()) {
+            return -1;
+        } else if (o1.length() == o2.length()) {
+            return 0;
+        }
+        return 1;
+    }
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/imports/CaseKeeperList.java b/src/java/net/sf/jabref/imports/CaseKeeperList.java
index 12e6816..89aa2d1 100644
--- a/src/java/net/sf/jabref/imports/CaseKeeperList.java
+++ b/src/java/net/sf/jabref/imports/CaseKeeperList.java
@@ -1,710 +1,710 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-package net.sf.jabref.imports;
-
-/**
- * Container class for lists with keywords where the case should be kept independent of bibstyle
- * 
- */
-public class CaseKeeperList {
-   
-    // Common words in IEEE Xplore that should always be in the given case
-   public String[] wordListIEEEXplore = new String[]{
-        "1-D",
-        "1D",
-        "2-D",
-        "2D",
-        "3-D",
-        "3D",
-        "3G",
-        "3GPP",
-        "4-D",
-        "4D",
-        "4G",
-        "4H",
-        "6H",
-        "A/D",
-	"ACM",
-        "AC",
-        "ADC",
-        "ADI",
-	"ADSL",
-        "ADP",
-        "ADPLL",
-        "AES",
-        "AFE",
-        "AGC",
-        "AI",
-        "AIQ",
-        "ALU",
-        "AMPS",
-        "AM",
-        "AND",
-        "ANOVA",
-        "ANSI",
-        "API",
-        "ARMA",
-        "ARQ",
-        "ASIC",
-        "ASIP",
-        "ASK",
-        "ATE",
-	"ATM",
-        "ATP",
-        "ATPG",
-        "ATSC",
-        "ATV",
-        "AVC",
-        "AWGN",
-        "Alamouti",
-        "AlGaAs",
-        "AlGaN",
-        "AlN",
-        "Altera",
-        "BCD",
-        "BCH",
-        "BCJR",
-        "BDD",
-        "BER",
-        "BGA",
-        "BIBO",
-        "BIST",
-        "BJT",
-        "BLAST",
-        "BPSK",
-        "BP",
-        "BT",
-        "Baum",
-        "Bayes",
-        "Berlekamp",
-        "Bessel",
-        "BiCMOS",
-        "Blackwell",
-        "Bluetooth",
-        "Booth",
-        "Bose",
-        "Bragg",
-        "Butterworth",
-        "CAD",
-        "CAS",
-        "CATV",
-        "CBR",
-        "CCD",
-        "CDMA",
-        "CD",
-        "CDC",
-        "CDR",
-        "CERN",
-        "CFAR",
-        "CIC",
-        "CLB",
-        "CMFB",
-        "CMOS",
-        "CMRR",
-        "CMS",
-        "CNN",
-        "CO2",
-	"CORDIC",
-        "COTS",
-        "CP",
-        "CPE",
-        "CPLD",
-        "CPU",
-        "CRC",
-        "CRM",
-        "CSD",
-        "CSE",
-        "CSIT",
-        "CSI",
-        "CSMA",
-        "CSP",
-        "CT",
-        "CUDA",
-        "CW",
-        "Carlo",
-        "Cauer",
-        "Chebychev",
-        "Chebyshev",
-        "Chien",
-        "Cooley",
-        "D/A",
-        "DAB",
-	"DAC",
-        "DBMS",
-	"DCT",
-        "DC",
-        "DDC",
-        "DDFS",
-        "DDR",
-        "DDSM",
-        "DDS",
-        "DDoS",
-        "DECT",
-        "DEM",
-        "DFE",
-        "DFT",
-        "DGPS",
-        "DHT",
-        "DIMM",
-        "DLL",
-	"DMT",
-        "DNA",
-        "DNL",
-        "DOA",
-        "DOCSIS",
-        "DOI",
-        "DPSK",
-        "DRAM",
-        "DRM",
-        "DS",
-        "DSP",
-	"DST",
-        "DTMB",
-        "DTTB",
-        "DTV",
-        "DUC",
-        "DVB-C",
-        "DVB-H",
-        "DVB-S",
-        "DVB-T",
-        "DVB",
-        "DVD",
-        "DVFS",
-        "DVI",
-        "DWT",
-        "Dadda",
-        "Daubechies",
-        "Doppler",
-        "ECC",
-        "ECG",
-        "ECL",
-        "EDGE",
-        "EEG",
-        "EJB",
-        "EKF",
-        "EKG",
-        "EMC",
-        "EMG",
-        "EMI",
-        "ENOB",
-        "EPROM",
-        "ESD",
-        "ESPRIT",
-        "EV",
-        "EVM",
-        "Einstein",
-        "Euclid",
-        "Euler",
-        "FBAR",
-        "FDE",
-        "FDI",
-        "FDTD",
-        "FEC",
-        "FEM",
-        "FER",
-        "FET",
-        "FFT",
-        "FIFO",
-	"FIR",
-        "FMCW",
-	"FM",
-        "FP",
-        "FPAA",
-        "FPGA",
-        "FPU",
-        "FRM",
-        "FSK",
-        "FSM",
-        "FTTC",
-        "FTTH",
-        "Farrow",
-        "FinFET",
-        "Fokker",
-        "Fourier",
-        "GALS",
-        "GCM",
-        "GF",
-        "GHz",
-        "GIS",
-        "GM",
-        "GMD",
-        "GNSS",
-        "GNU",
-        "GPGPU",
-        "GPRS",
-        "GPS",
-        "GPU",
-        "GSM",
-        "GSPS",
-        "GS",
-        "GaAs",
-        "GaN",
-        "Gabor",
-        "Galileo",
-        "Galois",
-        "Gauss",
-        "Gb",
-        "GeV",
-        "Gram-Schmidt",
-        "H.264",
-        "HARQ",
-        "HBM",
-        "HBT",
-        "HDMI",
-        "HDTV",
-        "HD",
-        "HDD",
-        "HDI",
-        "HDL",
-        "HEMT",
-        "HEVC",
-        "HF",
-        "HMM",
-        "HPC",
-        "HRV",
-        "HSPA",
-        "HSDPA",
-        "HVAC",
-        "HVDC",
-        "HW",
-        "Haar",
-        "Hadamard",
-        "Hamming",
-        "Hartley",
-        "Hermit",  // Hermitian, Hermite, Hermit
-        "Hilbert",
-        "Hz",
-        "I-V",
-        "I/O",
-        "I/Q",
-        "IBM",
-        "ICA",
-        "IC",
-        "ICI",
-        "ICT",
-        "IDCT",
-        "IDFT",
-        "IEC",
-        "IEEE",
-        "IFFT",
-        "IFIR",
-        "IF",
-        "IGBT",
-        "II-VI",
-        "II/VI",
-        "III-V",
-        "III/V",
-        "IIR",
-        "ILP",
-        "IMDCT",
-        "IMDST",
-        "IMT-A", // IMT-Advanced
-        "IMU",
-        "INL",
-        "IO",
-        "IPTV",
-        "IP",
-        "IQ",
-        "IR",
-        "IS-95",
-        "ISDN",
-        "ISI",
-        "ISM",
-        "ISO",
-        "ISS",
-        "InGaAs",
-        "InGaN",
-        "InP",
-        "InSAR",
-        "J2EE",
-        "JEDEC",
-        "JFET",
-        "JIT",
-        "JPEG",
-        "JTAG",
-        "Josephson",
-        "Kalman",
-        "Karatsuba",
-        "LAN",
-        "LC",
-        "LCD",
-        "LCG",
-        "LDA",
-        "LDD",
-        "LDI",
-        "LDPC",
-        "LED",
-        "LFSR",
-        "LHC",
-        "LIDAR",
-        "LiDAR",
-        "LLC",
-        "LLR",
-        "LMDS",
-        "LMI",
-        "LMS",
-        "LNA",
-        "LNS",
-        "LS",
-        "LSB",
-        "LTCC",
-        "LTE-A",
-        "LTE",
-        "LTI",
-        "LUT",
-        "LVDC",
-        "LVDS",
-        "LZW",
-        "Laplace",
-        "Lempel",
-        "Lyapunov",
-        "MAC",
-        "MANET",
-        "MAP",
-        "MASH",
-        "MBE",
-        "MC",
-        "MCE",
-        "MCM",
-        "MCMC",
-        "MCU",
-        "MDCT",
-        "MDST",
-        "MEMS",
-        "MESFET",
-        "MHz",
-        "MILP",
-        "MIMO",
-        "MISO",
-        "MIT",
-        "ML",
-        "MMIC",
-        "MMS",
-        "MMSE",
-        "MOSFET",
-        "MOS",
-        "MP3",
-        "MPC",
-        "MPEG",
-        "MPI",
-        "MPPC",
-        "MPSoC",
-        "MQW",
-        "MRC",
-        "MRI",
-        "MRTD",
-        "MSB",
-        "MSD",
-        "MSE",
-        "MSPS",
-        "MS",
-        "MTCMOS",
-        "MTD",
-        "MTI",
-        "MV",
-        "MVC",
-        "Maclaurin",
-        "Manchester",
-        "Markov",
-        "Massey",
-        "Maxwell",
-        "Mb",
-        "McClellan",
-        "MeV",
-        "Miller",
-        "Monte",
-        "Montgomery",
-        "Msps",
-        "NAND",
-        "NOR",
-        "NF",
-        "NMOS",
-        "NRZ",
-        "NTSC",
-        "Newton",
-        "NoC",
-        "Nyquist",
-        "OCR",
-        "OFDMA",
-        "OFDM",
-        "OLED",
-        "OOP",
-        "OR",
-        "OSR",
-        "OTA-C",
-        "OTA",
-        "Ofman",
-        "P2P",
-        "PAL",
-        "PAM",
-        "PAPR",
-        "PBGA",
-        "PCA",
-        "PCB",
-        "PCI",
-        "PCM",
-        "PCMCIA",
-        "PC",
-        "PDP",
-        "PET",
-        "PFA",
-        "PHD",
-        "PHY",
-        "PIC",
-        "PID",
-        "PIN",
-        "PLC",
-        "PLL",
-        "PMOS",
-        "PN",
-        "PON",
-        "POTS",
-        "PQFP",
-        "PRPG",
-        "PSK",
-        "PSNR",
-        "PSO",
-        "PSRR",
-        "PV",
-        "PWB",
-        "PWM",
-        "Parks-McClellan",  // Only Parks will give lots of incorrect hits
-        "Pb",
-        "Planck",
-        "PowerPC",
-        "QAM",
-        "QC-LDPC",
-        "QCA",
-        "QDI",
-        "QFP",
-        "QMF",
-        "QNN",
-        "QO",
-        "QP",
-        "QPSK",
-        "QR",
-        "QRD",
-        "QRS",
-        "QoS",
-        "RAD",
-        "RAKE",
-        "RAM",
-        "RBF",
-        "RC",
-        "RCS",
-        "RFDAC",
-        "RFE",
-        "RFIC",
-        "RFID",
-        "RF",
-        "RFS",
-        "RISC",
-        "RLC",
-        "RLS",
-        "RMS",
-        "RNS",
-        "ROM",
-        "RRC",
-        "RS",
-        "RSA",
-        "RT",
-        "RTL",
-        "RTOS",
-        "RX",
-        "RZ",
-        "Rao",
-        "Raphson",
-        "Rayleigh",
-        "Reed",
-        "Remez",
-        "Riccati",
-        "SAR",
-        "SAT",
-        "SAW",
-        "SC",
-        "SDF",
-        "SDH",
-        "SDP",
-        "SDRAM",
-        "SDR",
-        "SDRE",
-        "SEU",
-        "SFDR",
-        "SIC",
-        "SIMD",
-        "SIMO",
-        "SINAD",
-        "SINR",
-        "SINS",
-        "SISO",
-        "SLAM",
-        "SMD",
-        "SME",
-        "SMS",
-        "SNDR",
-        "SNR",
-        "SOCP",
-        "SOI",
-        "SONET",
-        "SPS",
-        "SPT",
-        "SRAM",
-        "SQL",
-        "SQNR",
-        "STBC",
-        "SVD",
-        "SVM",
-        "SW",
-        "Schottky",
-        "SerDes",
-        "Shannon",
-        "SiC",
-        "SiGe",
-        "SoC",
-        "SoP",
-        "Solomon",
-        "SystemC",
-        "TCP",
-        "TDM",
-        "TDMA",
-        "TDS",
-        "TETRA",
-        "TFT",
-        "THD",
-        "THz",
-        "TLM",
-        "TLP",
-        "TPG",
-        "TQFP",
-        "TSOP",
-        "TSPC",
-        "TTL",
-        "TV",
-        "TX",
-        "Taylor",
-        "Toeplitz",
-        "Tukey",
-        "UAV",
-        "UHF",
-        "UKF",
-        "ULSI",
-        "UML",
-        "UMTS",
-        "UPS",
-        "USB",
-        "USRP",
-        "UV",
-        "UWB",
-        "V-BLAST",
-        "VBLAST",
-        "VBR",
-        "VCO",
-        "VDD",
-        "VDSL",
-        "VGA",
-        "VHDL",
-        "VHF",
-        "VLIW",
-        "VLSI",
-        "VOD",
-        "VQ",
-        "VSB",
-        "VTOL",
-        "Vdd",
-        "Verilog-AMS",
-        "Verilog-A",
-        "Verilog",
-        "Viterbi",
-        "VoD",
-        "VoIP",
-        "Volterra",
-        "WCDMA",
-        "WDF",
-        "WDM",
-        "WFTA",
-        "WLAN",
-        "WLS",
-        "WPAN",
-        "WSN",
-        "WWW",
-        "Wallace",
-        "Watt",
-        "Welch",
-        "WiFi",
-        "WiMAX",
-        "Wiener",
-        "Winograd",
-        "XML",
-        "XNOR",
-        "XOR",
-        "Xilinx",
-        "ZCS",
-        "ZF",
-        "ZVS",
-        "ZigBee",
-        "Ziv",
-        "ZnO",
-        "dB",
-        "eV",
-        "kA",
-        "keV",
-        "kHz",
-        "kS",
-        "kV",
-        "kW",
-        "mA",
-        "mJ",
-        "mW",
-        "mV",
-        "nJ",
-        "nV",
-        "nW",
-        "pJ",
-        "pV",
-        "pW",
-        "xDSL"
-   };
-    
-   
-   // List of all keyword lists
-   private String[][] allLists = new String[][] {
-       wordListIEEEXplore
-   };
-   
-   public CaseKeeperList () {
-   
-   };
-   /* Return all lists concatenated
-    * Can be done faster once deciding on Java 6.0
-    * see: http://stackoverflow.com/questions/80476/how-to-concatenate-two-arrays-in-java
-    */
-    public String[] getAll() {
-        int lengh = 0;
-        for (String[] array : allLists) {
-            lengh += array.length;
-        }
-        String[] result = new String[lengh];
-        int pos = 0;
-        for (String[] array : allLists) {
-            for (String element : array) {
-                result[pos] = element;
-                pos++;
-            }
-        }
-        return result;
-    }
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+package net.sf.jabref.imports;
+
+/**
+ * Container class for lists with keywords where the case should be kept independent of bibstyle
+ * 
+ */
+public class CaseKeeperList {
+   
+    // Common words in IEEE Xplore that should always be in the given case
+   public String[] wordListIEEEXplore = new String[]{
+        "1-D",
+        "1D",
+        "2-D",
+        "2D",
+        "3-D",
+        "3D",
+        "3G",
+        "3GPP",
+        "4-D",
+        "4D",
+        "4G",
+        "4H",
+        "6H",
+        "A/D",
+	"ACM",
+        "AC",
+        "ADC",
+        "ADI",
+	"ADSL",
+        "ADP",
+        "ADPLL",
+        "AES",
+        "AFE",
+        "AGC",
+        "AI",
+        "AIQ",
+        "ALU",
+        "AMPS",
+        "AM",
+        "AND",
+        "ANOVA",
+        "ANSI",
+        "API",
+        "ARMA",
+        "ARQ",
+        "ASIC",
+        "ASIP",
+        "ASK",
+        "ATE",
+	"ATM",
+        "ATP",
+        "ATPG",
+        "ATSC",
+        "ATV",
+        "AVC",
+        "AWGN",
+        "Alamouti",
+        "AlGaAs",
+        "AlGaN",
+        "AlN",
+        "Altera",
+        "BCD",
+        "BCH",
+        "BCJR",
+        "BDD",
+        "BER",
+        "BGA",
+        "BIBO",
+        "BIST",
+        "BJT",
+        "BLAST",
+        "BPSK",
+        "BP",
+        "BT",
+        "Baum",
+        "Bayes",
+        "Berlekamp",
+        "Bessel",
+        "BiCMOS",
+        "Blackwell",
+        "Bluetooth",
+        "Booth",
+        "Bose",
+        "Bragg",
+        "Butterworth",
+        "CAD",
+        "CAS",
+        "CATV",
+        "CBR",
+        "CCD",
+        "CDMA",
+        "CD",
+        "CDC",
+        "CDR",
+        "CERN",
+        "CFAR",
+        "CIC",
+        "CLB",
+        "CMFB",
+        "CMOS",
+        "CMRR",
+        "CMS",
+        "CNN",
+        "CO2",
+	"CORDIC",
+        "COTS",
+        "CP",
+        "CPE",
+        "CPLD",
+        "CPU",
+        "CRC",
+        "CRM",
+        "CSD",
+        "CSE",
+        "CSIT",
+        "CSI",
+        "CSMA",
+        "CSP",
+        "CT",
+        "CUDA",
+        "CW",
+        "Carlo",
+        "Cauer",
+        "Chebychev",
+        "Chebyshev",
+        "Chien",
+        "Cooley",
+        "D/A",
+        "DAB",
+	"DAC",
+        "DBMS",
+	"DCT",
+        "DC",
+        "DDC",
+        "DDFS",
+        "DDR",
+        "DDSM",
+        "DDS",
+        "DDoS",
+        "DECT",
+        "DEM",
+        "DFE",
+        "DFT",
+        "DGPS",
+        "DHT",
+        "DIMM",
+        "DLL",
+	"DMT",
+        "DNA",
+        "DNL",
+        "DOA",
+        "DOCSIS",
+        "DOI",
+        "DPSK",
+        "DRAM",
+        "DRM",
+        "DS",
+        "DSP",
+	"DST",
+        "DTMB",
+        "DTTB",
+        "DTV",
+        "DUC",
+        "DVB-C",
+        "DVB-H",
+        "DVB-S",
+        "DVB-T",
+        "DVB",
+        "DVD",
+        "DVFS",
+        "DVI",
+        "DWT",
+        "Dadda",
+        "Daubechies",
+        "Doppler",
+        "ECC",
+        "ECG",
+        "ECL",
+        "EDGE",
+        "EEG",
+        "EJB",
+        "EKF",
+        "EKG",
+        "EMC",
+        "EMG",
+        "EMI",
+        "ENOB",
+        "EPROM",
+        "ESD",
+        "ESPRIT",
+        "EV",
+        "EVM",
+        "Einstein",
+        "Euclid",
+        "Euler",
+        "FBAR",
+        "FDE",
+        "FDI",
+        "FDTD",
+        "FEC",
+        "FEM",
+        "FER",
+        "FET",
+        "FFT",
+        "FIFO",
+	"FIR",
+        "FMCW",
+	"FM",
+        "FP",
+        "FPAA",
+        "FPGA",
+        "FPU",
+        "FRM",
+        "FSK",
+        "FSM",
+        "FTTC",
+        "FTTH",
+        "Farrow",
+        "FinFET",
+        "Fokker",
+        "Fourier",
+        "GALS",
+        "GCM",
+        "GF",
+        "GHz",
+        "GIS",
+        "GM",
+        "GMD",
+        "GNSS",
+        "GNU",
+        "GPGPU",
+        "GPRS",
+        "GPS",
+        "GPU",
+        "GSM",
+        "GSPS",
+        "GS",
+        "GaAs",
+        "GaN",
+        "Gabor",
+        "Galileo",
+        "Galois",
+        "Gauss",
+        "Gb",
+        "GeV",
+        "Gram-Schmidt",
+        "H.264",
+        "HARQ",
+        "HBM",
+        "HBT",
+        "HDMI",
+        "HDTV",
+        "HD",
+        "HDD",
+        "HDI",
+        "HDL",
+        "HEMT",
+        "HEVC",
+        "HF",
+        "HMM",
+        "HPC",
+        "HRV",
+        "HSPA",
+        "HSDPA",
+        "HVAC",
+        "HVDC",
+        "HW",
+        "Haar",
+        "Hadamard",
+        "Hamming",
+        "Hartley",
+        "Hermit",  // Hermitian, Hermite, Hermit
+        "Hilbert",
+        "Hz",
+        "I-V",
+        "I/O",
+        "I/Q",
+        "IBM",
+        "ICA",
+        "IC",
+        "ICI",
+        "ICT",
+        "IDCT",
+        "IDFT",
+        "IEC",
+        "IEEE",
+        "IFFT",
+        "IFIR",
+        "IF",
+        "IGBT",
+        "II-VI",
+        "II/VI",
+        "III-V",
+        "III/V",
+        "IIR",
+        "ILP",
+        "IMDCT",
+        "IMDST",
+        "IMT-A", // IMT-Advanced
+        "IMU",
+        "INL",
+        "IO",
+        "IPTV",
+        "IP",
+        "IQ",
+        "IR",
+        "IS-95",
+        "ISDN",
+        "ISI",
+        "ISM",
+        "ISO",
+        "ISS",
+        "InGaAs",
+        "InGaN",
+        "InP",
+        "InSAR",
+        "J2EE",
+        "JEDEC",
+        "JFET",
+        "JIT",
+        "JPEG",
+        "JTAG",
+        "Josephson",
+        "Kalman",
+        "Karatsuba",
+        "LAN",
+        "LC",
+        "LCD",
+        "LCG",
+        "LDA",
+        "LDD",
+        "LDI",
+        "LDPC",
+        "LED",
+        "LFSR",
+        "LHC",
+        "LIDAR",
+        "LiDAR",
+        "LLC",
+        "LLR",
+        "LMDS",
+        "LMI",
+        "LMS",
+        "LNA",
+        "LNS",
+        "LS",
+        "LSB",
+        "LTCC",
+        "LTE-A",
+        "LTE",
+        "LTI",
+        "LUT",
+        "LVDC",
+        "LVDS",
+        "LZW",
+        "Laplace",
+        "Lempel",
+        "Lyapunov",
+        "MAC",
+        "MANET",
+        "MAP",
+        "MASH",
+        "MBE",
+        "MC",
+        "MCE",
+        "MCM",
+        "MCMC",
+        "MCU",
+        "MDCT",
+        "MDST",
+        "MEMS",
+        "MESFET",
+        "MHz",
+        "MILP",
+        "MIMO",
+        "MISO",
+        "MIT",
+        "ML",
+        "MMIC",
+        "MMS",
+        "MMSE",
+        "MOSFET",
+        "MOS",
+        "MP3",
+        "MPC",
+        "MPEG",
+        "MPI",
+        "MPPC",
+        "MPSoC",
+        "MQW",
+        "MRC",
+        "MRI",
+        "MRTD",
+        "MSB",
+        "MSD",
+        "MSE",
+        "MSPS",
+        "MS",
+        "MTCMOS",
+        "MTD",
+        "MTI",
+        "MV",
+        "MVC",
+        "Maclaurin",
+        "Manchester",
+        "Markov",
+        "Massey",
+        "Maxwell",
+        "Mb",
+        "McClellan",
+        "MeV",
+        "Miller",
+        "Monte",
+        "Montgomery",
+        "Msps",
+        "NAND",
+        "NOR",
+        "NF",
+        "NMOS",
+        "NRZ",
+        "NTSC",
+        "Newton",
+        "NoC",
+        "Nyquist",
+        "OCR",
+        "OFDMA",
+        "OFDM",
+        "OLED",
+        "OOP",
+        "OR",
+        "OSR",
+        "OTA-C",
+        "OTA",
+        "Ofman",
+        "P2P",
+        "PAL",
+        "PAM",
+        "PAPR",
+        "PBGA",
+        "PCA",
+        "PCB",
+        "PCI",
+        "PCM",
+        "PCMCIA",
+        "PC",
+        "PDP",
+        "PET",
+        "PFA",
+        "PHD",
+        "PHY",
+        "PIC",
+        "PID",
+        "PIN",
+        "PLC",
+        "PLL",
+        "PMOS",
+        "PN",
+        "PON",
+        "POTS",
+        "PQFP",
+        "PRPG",
+        "PSK",
+        "PSNR",
+        "PSO",
+        "PSRR",
+        "PV",
+        "PWB",
+        "PWM",
+        "Parks-McClellan",  // Only Parks will give lots of incorrect hits
+        "Pb",
+        "Planck",
+        "PowerPC",
+        "QAM",
+        "QC-LDPC",
+        "QCA",
+        "QDI",
+        "QFP",
+        "QMF",
+        "QNN",
+        "QO",
+        "QP",
+        "QPSK",
+        "QR",
+        "QRD",
+        "QRS",
+        "QoS",
+        "RAD",
+        "RAKE",
+        "RAM",
+        "RBF",
+        "RC",
+        "RCS",
+        "RFDAC",
+        "RFE",
+        "RFIC",
+        "RFID",
+        "RF",
+        "RFS",
+        "RISC",
+        "RLC",
+        "RLS",
+        "RMS",
+        "RNS",
+        "ROM",
+        "RRC",
+        "RS",
+        "RSA",
+        "RT",
+        "RTL",
+        "RTOS",
+        "RX",
+        "RZ",
+        "Rao",
+        "Raphson",
+        "Rayleigh",
+        "Reed",
+        "Remez",
+        "Riccati",
+        "SAR",
+        "SAT",
+        "SAW",
+        "SC",
+        "SDF",
+        "SDH",
+        "SDP",
+        "SDRAM",
+        "SDR",
+        "SDRE",
+        "SEU",
+        "SFDR",
+        "SIC",
+        "SIMD",
+        "SIMO",
+        "SINAD",
+        "SINR",
+        "SINS",
+        "SISO",
+        "SLAM",
+        "SMD",
+        "SME",
+        "SMS",
+        "SNDR",
+        "SNR",
+        "SOCP",
+        "SOI",
+        "SONET",
+        "SPS",
+        "SPT",
+        "SRAM",
+        "SQL",
+        "SQNR",
+        "STBC",
+        "SVD",
+        "SVM",
+        "SW",
+        "Schottky",
+        "SerDes",
+        "Shannon",
+        "SiC",
+        "SiGe",
+        "SoC",
+        "SoP",
+        "Solomon",
+        "SystemC",
+        "TCP",
+        "TDM",
+        "TDMA",
+        "TDS",
+        "TETRA",
+        "TFT",
+        "THD",
+        "THz",
+        "TLM",
+        "TLP",
+        "TPG",
+        "TQFP",
+        "TSOP",
+        "TSPC",
+        "TTL",
+        "TV",
+        "TX",
+        "Taylor",
+        "Toeplitz",
+        "Tukey",
+        "UAV",
+        "UHF",
+        "UKF",
+        "ULSI",
+        "UML",
+        "UMTS",
+        "UPS",
+        "USB",
+        "USRP",
+        "UV",
+        "UWB",
+        "V-BLAST",
+        "VBLAST",
+        "VBR",
+        "VCO",
+        "VDD",
+        "VDSL",
+        "VGA",
+        "VHDL",
+        "VHF",
+        "VLIW",
+        "VLSI",
+        "VOD",
+        "VQ",
+        "VSB",
+        "VTOL",
+        "Vdd",
+        "Verilog-AMS",
+        "Verilog-A",
+        "Verilog",
+        "Viterbi",
+        "VoD",
+        "VoIP",
+        "Volterra",
+        "WCDMA",
+        "WDF",
+        "WDM",
+        "WFTA",
+        "WLAN",
+        "WLS",
+        "WPAN",
+        "WSN",
+        "WWW",
+        "Wallace",
+        "Watt",
+        "Welch",
+        "WiFi",
+        "WiMAX",
+        "Wiener",
+        "Winograd",
+        "XML",
+        "XNOR",
+        "XOR",
+        "Xilinx",
+        "ZCS",
+        "ZF",
+        "ZVS",
+        "ZigBee",
+        "Ziv",
+        "ZnO",
+        "dB",
+        "eV",
+        "kA",
+        "keV",
+        "kHz",
+        "kS",
+        "kV",
+        "kW",
+        "mA",
+        "mJ",
+        "mW",
+        "mV",
+        "nJ",
+        "nV",
+        "nW",
+        "pJ",
+        "pV",
+        "pW",
+        "xDSL"
+   };
+    
+   
+   // List of all keyword lists
+   private String[][] allLists = new String[][] {
+       wordListIEEEXplore
+   };
+   
+   public CaseKeeperList () {
+   
+   };
+   /* Return all lists concatenated
+    * Can be done faster once deciding on Java 6.0
+    * see: http://stackoverflow.com/questions/80476/how-to-concatenate-two-arrays-in-java
+    */
+    public String[] getAll() {
+        int lengh = 0;
+        for (String[] array : allLists) {
+            lengh += array.length;
+        }
+        String[] result = new String[lengh];
+        int pos = 0;
+        for (String[] array : allLists) {
+            for (String element : array) {
+                result[pos] = element;
+                pos++;
+            }
+        }
+        return result;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/CheckForNewEntryTypesAction.java b/src/java/net/sf/jabref/imports/CheckForNewEntryTypesAction.java
index 2a6c779..4968041 100644
--- a/src/java/net/sf/jabref/imports/CheckForNewEntryTypesAction.java
+++ b/src/java/net/sf/jabref/imports/CheckForNewEntryTypesAction.java
@@ -1,68 +1,68 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.util.Arrays;
-import java.util.Iterator;
-
-import javax.swing.JOptionPane;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.Globals;
-
-/**
- * This action checks whether any new custom entry types were loaded from this
- * bib file. If so, an offer to remember these entry types is given.
- */
-public class CheckForNewEntryTypesAction implements PostOpenAction {
-
-    public boolean isActionNecessary(ParserResult pr) {
-        // See if any custom entry types were imported, but disregard those we already know:
-        for (Iterator<String> i = pr.getEntryTypes().keySet().iterator(); i.hasNext();) {
-            String typeName = (i.next()).toLowerCase();
-            if (BibtexEntryType.ALL_TYPES.get(typeName) != null)
-                i.remove();
-        }
-        return pr.getEntryTypes().size() > 0;
-    }
-
-    public void performAction(BasePanel panel, ParserResult pr) {
-
-        StringBuffer sb = new StringBuffer(Globals.lang("Custom entry types found in file") + ": ");
-        Object[] types = pr.getEntryTypes().keySet().toArray();
-        Arrays.sort(types);
-        for (int i = 0; i < types.length; i++) {
-            sb.append(types[i].toString()).append(", ");
-        }
-        String s = sb.toString();
-        int answer = JOptionPane.showConfirmDialog(panel.frame(),
-                s.substring(0, s.length() - 2) + ".\n"
-                        + Globals.lang("Remember these entry types?"),
-                Globals.lang("Custom entry types"),
-                JOptionPane.YES_NO_OPTION,
-                JOptionPane.QUESTION_MESSAGE);
-        
-        if (answer == JOptionPane.YES_OPTION) {
-            // Import
-            for (BibtexEntryType typ : pr.getEntryTypes().values()){
-                BibtexEntryType.ALL_TYPES.put(typ.getName().toLowerCase(), typ);
-            }
-
-        }
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import javax.swing.JOptionPane;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.Globals;
+
+/**
+ * This action checks whether any new custom entry types were loaded from this
+ * bib file. If so, an offer to remember these entry types is given.
+ */
+public class CheckForNewEntryTypesAction implements PostOpenAction {
+
+    public boolean isActionNecessary(ParserResult pr) {
+        // See if any custom entry types were imported, but disregard those we already know:
+        for (Iterator<String> i = pr.getEntryTypes().keySet().iterator(); i.hasNext();) {
+            String typeName = (i.next()).toLowerCase();
+            if (BibtexEntryType.ALL_TYPES.get(typeName) != null)
+                i.remove();
+        }
+        return pr.getEntryTypes().size() > 0;
+    }
+
+    public void performAction(BasePanel panel, ParserResult pr) {
+
+        StringBuffer sb = new StringBuffer(Globals.lang("Custom entry types found in file") + ": ");
+        Object[] types = pr.getEntryTypes().keySet().toArray();
+        Arrays.sort(types);
+        for (int i = 0; i < types.length; i++) {
+            sb.append(types[i].toString()).append(", ");
+        }
+        String s = sb.toString();
+        int answer = JOptionPane.showConfirmDialog(panel.frame(),
+                s.substring(0, s.length() - 2) + ".\n"
+                        + Globals.lang("Remember these entry types?"),
+                Globals.lang("Custom entry types"),
+                JOptionPane.YES_NO_OPTION,
+                JOptionPane.QUESTION_MESSAGE);
+        
+        if (answer == JOptionPane.YES_OPTION) {
+            // Import
+            for (BibtexEntryType typ : pr.getEntryTypes().values()){
+                BibtexEntryType.ALL_TYPES.put(typ.getName().toLowerCase(), typ);
+            }
+
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/CiteSeerXFetcher.java b/src/java/net/sf/jabref/imports/CiteSeerXFetcher.java
index b791453..cf5a0f4 100644
--- a/src/java/net/sf/jabref/imports/CiteSeerXFetcher.java
+++ b/src/java/net/sf/jabref/imports/CiteSeerXFetcher.java
@@ -1,177 +1,177 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import net.sf.jabref.*;
-import net.sf.jabref.net.URLDownload;
-import net.sf.jabref.util.NameListNormalizer;
-
-import javax.swing.*;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URL;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-
-public class CiteSeerXFetcher implements EntryFetcher {
-
-    protected static int MAX_PAGES_TO_LOAD = 8;
-    final static String QUERY_MARKER = "___QUERY___";
-    final static String URL_START = "http://citeseer.ist.psu.edu";
-    final static String SEARCH_URL = URL_START+"/search?q="+QUERY_MARKER
-            +"&submit=Search&sort=rlv&t=doc";
-    final static Pattern CITE_LINK_PATTERN = Pattern.compile("<a class=\"remove doc_details\" href=\"(.*)\">");
-
-    protected boolean stopFetching = false;
-
-    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
-        stopFetching = false;
-        try {
-            List<String> citations = getCitations(query);
-            for (String citation : citations) {
-                if (stopFetching)
-                    break;
-                BibtexEntry entry = getSingleCitation(citation);
-                //BibtexEntry entry = BibsonomyScraper.getEntry(citation);
-
-                //dialog.setProgress(++i, citations.size());
-                if (entry != null)
-                    inspector.addEntry(entry);
-            }
-
-            return true;
-        } catch (IOException e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    public String getTitle() {
-        return "CiteSeerX";
-    }
-
-    public String getKeyName() {
-        return "CiteSeerX";
-    }
-
-    public URL getIcon() {
-        return GUIGlobals.getIconUrl("www");
-    }
-
-    public String getHelpPage() {
-        return "CiteSeerHelp.html";
-    }
-
-    public JPanel getOptionsPanel() {
-        return null;
-    }
-
-    public void stopFetching() {
-        stopFetching = true;
-    }
-
-        /**
-     *
-     * @param query
-     *            The search term to query JStor for.
-     * @return a list of IDs
-     * @throws java.io.IOException
-     */
-    protected List<String> getCitations(String query) throws IOException {
-        String urlQuery;
-        ArrayList<String> ids = new ArrayList<String>();
-        try {
-            urlQuery = SEARCH_URL.replace(QUERY_MARKER, URLEncoder.encode(query, "UTF-8"));
-            int count = 1;
-            String nextPage = null;
-            while (((nextPage = getCitationsFromUrl(urlQuery, ids)) != null)
-                    && (count < MAX_PAGES_TO_LOAD)) {
-                urlQuery = nextPage;
-                count++;
-                if (stopFetching)
-                    break;
-            }
-            return ids;
-        } catch (UnsupportedEncodingException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    protected String getCitationsFromUrl(String urlQuery, List<String> ids) throws IOException {
-        URL url = new URL(urlQuery);
-        URLDownload ud = new URLDownload(url);
-        ud.download();
-
-        String cont = ud.getStringContent();
-        //System.out.println(cont);
-        Matcher m = CITE_LINK_PATTERN.matcher(cont);
-        while (m.find()) {
-            ids.add(URL_START+m.group(1));
-        }
-
-        return null;
-    }
-
-    final static String basePattern = "<meta name=\""+QUERY_MARKER+"\" content=\"(.*)\" />";
-    final static Pattern titlePattern = Pattern.compile(basePattern.replace(QUERY_MARKER, "citation_title"));
-    final static Pattern authorPattern = Pattern.compile(basePattern.replace(QUERY_MARKER, "citation_authors"));
-    final static Pattern yearPattern = Pattern.compile(basePattern.replace(QUERY_MARKER, "citation_year"));
-    final static Pattern abstractPattern = Pattern.compile("<h3>Abstract</h3>\\s*<p>(.*)</p>");
-
-    protected BibtexEntry getSingleCitation(String urlString) throws IOException {
-
-        URL url = new URL(urlString);
-        URLDownload ud = new URLDownload(url);
-        ud.setEncoding("UTF8");
-        ud.download();
-
-        String cont = ud.getStringContent();
-
-        // Find title, and create entry if we do. Otherwise assume we didn't get an entry:
-        Matcher m = titlePattern.matcher(cont);
-        if (m.find()) {
-            BibtexEntry entry = new BibtexEntry(Util.createNeutralId());
-            entry.setField("title", m.group(1));
-
-            // Find authors:
-            m = authorPattern.matcher(cont);
-            if (m.find()) {
-                String authors = m.group(1);
-                entry.setField("author", NameListNormalizer.normalizeAuthorList(authors));
-            }
-
-            // Find year:
-            m = yearPattern.matcher(cont);
-            if (m.find())
-                entry.setField("year", m.group(1));
-
-            // Find abstract:
-            m = abstractPattern.matcher(cont);
-            if (m.find())
-                entry.setField("abstract", m.group(1));
-
-            return entry;
-        }
-        else
-            return null;
-
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import net.sf.jabref.*;
+import net.sf.jabref.net.URLDownload;
+import net.sf.jabref.util.NameListNormalizer;
+
+import javax.swing.*;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+public class CiteSeerXFetcher implements EntryFetcher {
+
+    protected static int MAX_PAGES_TO_LOAD = 8;
+    final static String QUERY_MARKER = "___QUERY___";
+    final static String URL_START = "http://citeseer.ist.psu.edu";
+    final static String SEARCH_URL = URL_START+"/search?q="+QUERY_MARKER
+            +"&submit=Search&sort=rlv&t=doc";
+    final static Pattern CITE_LINK_PATTERN = Pattern.compile("<a class=\"remove doc_details\" href=\"(.*)\">");
+
+    protected boolean stopFetching = false;
+
+    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
+        stopFetching = false;
+        try {
+            List<String> citations = getCitations(query);
+            for (String citation : citations) {
+                if (stopFetching)
+                    break;
+                BibtexEntry entry = getSingleCitation(citation);
+                //BibtexEntry entry = BibsonomyScraper.getEntry(citation);
+
+                //dialog.setProgress(++i, citations.size());
+                if (entry != null)
+                    inspector.addEntry(entry);
+            }
+
+            return true;
+        } catch (IOException e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    public String getTitle() {
+        return "CiteSeerX";
+    }
+
+    public String getKeyName() {
+        return "CiteSeerX";
+    }
+
+    public URL getIcon() {
+        return GUIGlobals.getIconUrl("www");
+    }
+
+    public String getHelpPage() {
+        return "CiteSeerHelp.html";
+    }
+
+    public JPanel getOptionsPanel() {
+        return null;
+    }
+
+    public void stopFetching() {
+        stopFetching = true;
+    }
+
+        /**
+     *
+     * @param query
+     *            The search term to query JStor for.
+     * @return a list of IDs
+     * @throws java.io.IOException
+     */
+    protected List<String> getCitations(String query) throws IOException {
+        String urlQuery;
+        ArrayList<String> ids = new ArrayList<String>();
+        try {
+            urlQuery = SEARCH_URL.replace(QUERY_MARKER, URLEncoder.encode(query, "UTF-8"));
+            int count = 1;
+            String nextPage = null;
+            while (((nextPage = getCitationsFromUrl(urlQuery, ids)) != null)
+                    && (count < MAX_PAGES_TO_LOAD)) {
+                urlQuery = nextPage;
+                count++;
+                if (stopFetching)
+                    break;
+            }
+            return ids;
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    protected String getCitationsFromUrl(String urlQuery, List<String> ids) throws IOException {
+        URL url = new URL(urlQuery);
+        URLDownload ud = new URLDownload(url);
+        ud.download();
+
+        String cont = ud.getStringContent();
+        //System.out.println(cont);
+        Matcher m = CITE_LINK_PATTERN.matcher(cont);
+        while (m.find()) {
+            ids.add(URL_START+m.group(1));
+        }
+
+        return null;
+    }
+
+    final static String basePattern = "<meta name=\""+QUERY_MARKER+"\" content=\"(.*)\" />";
+    final static Pattern titlePattern = Pattern.compile(basePattern.replace(QUERY_MARKER, "citation_title"));
+    final static Pattern authorPattern = Pattern.compile(basePattern.replace(QUERY_MARKER, "citation_authors"));
+    final static Pattern yearPattern = Pattern.compile(basePattern.replace(QUERY_MARKER, "citation_year"));
+    final static Pattern abstractPattern = Pattern.compile("<h3>Abstract</h3>\\s*<p>(.*)</p>");
+
+    protected BibtexEntry getSingleCitation(String urlString) throws IOException {
+
+        URL url = new URL(urlString);
+        URLDownload ud = new URLDownload(url);
+        ud.setEncoding("UTF8");
+        ud.download();
+
+        String cont = ud.getStringContent();
+
+        // Find title, and create entry if we do. Otherwise assume we didn't get an entry:
+        Matcher m = titlePattern.matcher(cont);
+        if (m.find()) {
+            BibtexEntry entry = new BibtexEntry(Util.createNeutralId());
+            entry.setField("title", m.group(1));
+
+            // Find authors:
+            m = authorPattern.matcher(cont);
+            if (m.find()) {
+                String authors = m.group(1);
+                entry.setField("author", NameListNormalizer.normalizeAuthorList(authors));
+            }
+
+            // Find year:
+            m = yearPattern.matcher(cont);
+            if (m.find())
+                entry.setField("year", m.group(1));
+
+            // Find abstract:
+            m = abstractPattern.matcher(cont);
+            if (m.find())
+                entry.setField("abstract", m.group(1));
+
+            return entry;
+        }
+        else
+            return null;
+
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/CopacImporter.java b/src/java/net/sf/jabref/imports/CopacImporter.java
index d2a9e9a..1048cc1 100644
--- a/src/java/net/sf/jabref/imports/CopacImporter.java
+++ b/src/java/net/sf/jabref/imports/CopacImporter.java
@@ -1,173 +1,173 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.OutputPrinter;
-
-/**
- * Importer for COPAC format.
- * 
- * Documentation can be found online at:
- * 
- * http://copac.ac.uk/faq/#format
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class CopacImporter extends ImportFormat {
-	/**
-	 * Return the name of this import format.
-	 */
-	public String getFormatName() {
-		return "Copac";
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-	 */
-	public String getCLIId() {
-		return "cpc";
-	}
-
-	static final Pattern copacPattern = Pattern.compile("^\\s*TI- ");
-
-	/**
-	 * Check whether the source is in the correct format for this importer.
-	 */
-	public boolean isRecognizedFormat(InputStream stream) throws IOException {
-
-		BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-
-		String str;
-
-		while ((str = in.readLine()) != null) {
-			if (copacPattern.matcher(str).find())
-				return true;
-		}
-
-		return false;
-	}
-
-	/**
-	 * Parse the entries in the source, and return a List of BibtexEntry
-	 * objects.
-	 */
-	public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-		if (stream == null)
-			throw new IOException("No stream given.");
-
-		BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-
-		List<String> entries = new LinkedList<String>();
-
-		{ // Preprocess entries
-			String str;
-			StringBuffer sb = new StringBuffer();
-
-			while ((str = in.readLine()) != null) {
-
-				if (str.length() < 4)
-					continue;
-
-				String code = str.substring(0, 4);
-
-				if (code.equals("    ")) {
-					sb.append(" ").append(str.trim());
-				} else {
-
-					// begining of a new item
-					if (str.substring(0, 4).equals("TI- ")) {
-						if (sb.length() > 0) {
-							entries.add(sb.toString());
-						}
-						sb = new StringBuffer();
-					}
-					sb.append('\n').append(str);
-				}
-			}
-			if (sb.length() > 0)
-				entries.add(sb.toString());
-		}
-
-		List<BibtexEntry> results = new LinkedList<BibtexEntry>();
-
-		Iterator<String> it = entries.iterator();
-		while (it.hasNext()) {
-
-			// Copac does not contain enough information on the type of the
-			// document. A book is assumed.
-			BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID,
-				BibtexEntryType.BOOK);
-
-			String[] lines = it.next().toString().split("\n");
-
-			for (int i = 0; i < lines.length; i++) {
-				String line = lines[i].trim();
-				if (line.length() < 4)
-					continue;
-				String code = line.substring(0, 4);
-
-				if (code.equals("TI- "))
-					setOrAppend(b, "title", line.substring(4).trim(), ", ");
-				else if (code.equals("AU- "))
-					setOrAppend(b, "author", line.substring(4).trim(), " and ");
-				else if (code.equals("PY- "))
-					setOrAppend(b, "year", line.substring(4).trim(), ", ");
-				else if (code.equals("PU- "))
-					setOrAppend(b, "publisher", line.substring(4).trim(), ", ");
-				else if (code.equals("SE- "))
-					setOrAppend(b, "series", line.substring(4).trim(), ", ");
-				else if (code.equals("IS- "))
-					setOrAppend(b, "isbn", line.substring(4).trim(), ", ");
-				else if (code.equals("KW- "))
-					setOrAppend(b, "keywords", line.substring(4).trim(), ", ");
-				else if (code.equals("NT- "))
-					setOrAppend(b, "note", line.substring(4).trim(), ", ");
-				else if (code.equals("PD- "))
-					setOrAppend(b, "physicaldimensions", line.substring(4).trim(), ", ");
-				else if (code.equals("DT- "))
-					setOrAppend(b, "documenttype", line.substring(4).trim(), ", ");
-				else
-					setOrAppend(b, code.substring(0, 2), line.substring(4).trim(), ", ");
-			}
-			results.add(b);
-		}
-
-		return results;
-	}
-
-	void setOrAppend(BibtexEntry b, String field, String value, String separator) {
-		Object o = b.getField(field);
-		if (o != null)
-			b.setField(field, (String) o + separator + value);
-		else
-			b.setField(field, value);
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.OutputPrinter;
+
+/**
+ * Importer for COPAC format.
+ * 
+ * Documentation can be found online at:
+ * 
+ * http://copac.ac.uk/faq/#format
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class CopacImporter extends ImportFormat {
+	/**
+	 * Return the name of this import format.
+	 */
+	public String getFormatName() {
+		return "Copac";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+	 */
+	public String getCLIId() {
+		return "cpc";
+	}
+
+	static final Pattern copacPattern = Pattern.compile("^\\s*TI- ");
+
+	/**
+	 * Check whether the source is in the correct format for this importer.
+	 */
+	public boolean isRecognizedFormat(InputStream stream) throws IOException {
+
+		BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+
+		String str;
+
+		while ((str = in.readLine()) != null) {
+			if (copacPattern.matcher(str).find())
+				return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Parse the entries in the source, and return a List of BibtexEntry
+	 * objects.
+	 */
+	public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+		if (stream == null)
+			throw new IOException("No stream given.");
+
+		BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+
+		List<String> entries = new LinkedList<String>();
+
+		{ // Preprocess entries
+			String str;
+			StringBuffer sb = new StringBuffer();
+
+			while ((str = in.readLine()) != null) {
+
+				if (str.length() < 4)
+					continue;
+
+				String code = str.substring(0, 4);
+
+				if (code.equals("    ")) {
+					sb.append(" ").append(str.trim());
+				} else {
+
+					// begining of a new item
+					if (str.substring(0, 4).equals("TI- ")) {
+						if (sb.length() > 0) {
+							entries.add(sb.toString());
+						}
+						sb = new StringBuffer();
+					}
+					sb.append('\n').append(str);
+				}
+			}
+			if (sb.length() > 0)
+				entries.add(sb.toString());
+		}
+
+		List<BibtexEntry> results = new LinkedList<BibtexEntry>();
+
+		Iterator<String> it = entries.iterator();
+		while (it.hasNext()) {
+
+			// Copac does not contain enough information on the type of the
+			// document. A book is assumed.
+			BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID,
+				BibtexEntryType.BOOK);
+
+			String[] lines = it.next().toString().split("\n");
+
+			for (int i = 0; i < lines.length; i++) {
+				String line = lines[i].trim();
+				if (line.length() < 4)
+					continue;
+				String code = line.substring(0, 4);
+
+				if (code.equals("TI- "))
+					setOrAppend(b, "title", line.substring(4).trim(), ", ");
+				else if (code.equals("AU- "))
+					setOrAppend(b, "author", line.substring(4).trim(), " and ");
+				else if (code.equals("PY- "))
+					setOrAppend(b, "year", line.substring(4).trim(), ", ");
+				else if (code.equals("PU- "))
+					setOrAppend(b, "publisher", line.substring(4).trim(), ", ");
+				else if (code.equals("SE- "))
+					setOrAppend(b, "series", line.substring(4).trim(), ", ");
+				else if (code.equals("IS- "))
+					setOrAppend(b, "isbn", line.substring(4).trim(), ", ");
+				else if (code.equals("KW- "))
+					setOrAppend(b, "keywords", line.substring(4).trim(), ", ");
+				else if (code.equals("NT- "))
+					setOrAppend(b, "note", line.substring(4).trim(), ", ");
+				else if (code.equals("PD- "))
+					setOrAppend(b, "physicaldimensions", line.substring(4).trim(), ", ");
+				else if (code.equals("DT- "))
+					setOrAppend(b, "documenttype", line.substring(4).trim(), ", ");
+				else
+					setOrAppend(b, code.substring(0, 2), line.substring(4).trim(), ", ");
+			}
+			results.add(b);
+		}
+
+		return results;
+	}
+
+	void setOrAppend(BibtexEntry b, String field, String value, String separator) {
+		Object o = b.getField(field);
+		if (o != null)
+			b.setField(field, (String) o + separator + value);
+		else
+			b.setField(field, value);
+	}
+}
diff --git a/src/java/net/sf/jabref/imports/CsaImporter.java b/src/java/net/sf/jabref/imports/CsaImporter.java
index fbb717e..b19b692 100644
--- a/src/java/net/sf/jabref/imports/CsaImporter.java
+++ b/src/java/net/sf/jabref/imports/CsaImporter.java
@@ -1,470 +1,470 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import net.sf.jabref.BibtexFields;
-
-
-/**
- * Importer for records downloaded from CSA: Cambridge Scientific Abstracts
- * in full text format.  Although the same basic format is used by all CSA
- * databases, this importer has been tailored and tested to handle
- * ASFA: Aquatic Sciences and Fisheries records.
- *
- * @author John Relph
- */
-public class CsaImporter extends ImportFormat {
-
-    // local fields
-    private int line;
-
-    // pre-compiled patterns
-    private final static Pattern FIELD_PATTERN =
-        Pattern.compile("^([A-Z][A-Z]): ([A-Z].*)$");
-    private final static Pattern VOLNOPP_PATTERN =
-        Pattern.compile("[;,\\.]\\s+(\\d+[A-Za-z]?)\\((\\d+(?:-\\d+)?)\\)(?:,\\s+|:)(\\d+-\\d+)");
-    private final static Pattern PAGES_PATTERN =
-        Pattern.compile("[;,\\.]\\s+(?:(\\[?[vn]\\.?p\\.?\\]?)|(?:pp?\\.?\\s+)(\\d+[A-Z]?(?:-\\d+[A-Z]?)?)|(\\d+[A-Z]?(?:-\\d+[A-Z]?)?)(?:\\s+pp?))");
-    private final static Pattern VOLUME_PATTERN =
-        Pattern.compile("[;,\\.]?\\s+[vV][oO][lL]\\.?\\s+(\\d+[A-Z]?(?:-\\d+[A-Z]?)?)");
-    private final static Pattern NUMBER_PATTERN =
-        Pattern.compile("[;,\\.]\\s+(?:No|no|Part|part|NUMB)\\.?\\s+([A-Z]?\\d+(?:[/-]\\d+)?)");
-    private final static Pattern DATE_PATTERN =
-        Pattern.compile("[;,\\.]\\s+(?:(\\d+)\\s)?(?:([A-Z][a-z][a-z])[\\.,]*\\s)?\\(?(\\d\\d\\d\\d)\\)?(?:\\s([A-Z][a-z][a-z]))?(?:\\s+(\\d+))?");
-    private final static Pattern LT_PATTERN =
-        Pattern.compile("\\[Lt\\]");
-
-    // other constants
-    private static final String MONS =
-        "jan feb mar apr may jun jul aug sep oct nov dec";
-    private static final String[] MONTHS =
-        { "January", "February", "March", "April", "May", "June",
-          "July", "August", "September", "October", "November", "December" };
-
-    /**
-     * Return the name of this import format.
-     */
-    public String getFormatName() {
-        return "CSA";
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-     */
-    public String getCLIId() {
-      return "csa";
-    }
-
-    // read a line
-    private String readLine(BufferedReader file) throws IOException {
-        String str = file.readLine();
-        if (str != null)
-            line++;
-        return str;
-    }
-
-    // append to the "note" field
-    private void addNote(HashMap<String, String> hm, String note) {
-
-        StringBuffer notebuf = new StringBuffer();
-        if (hm.get("note") != null) {
-            notebuf.append(hm.get("note"));
-            notebuf.append("\n");
-        }
-        notebuf.append(note);
-        hm.put("note", notebuf.toString());
-    }
-
-    // parse the date from the Source field
-    private String parseDate(HashMap<String, String> hm, String fstr) {
-
-        // find LAST matching date in string
-        int match = -1;
-        Matcher pm = DATE_PATTERN.matcher(fstr);
-        while (pm.find()) {
-            match = pm.start();
-//	    System.out.println("MATCH: " + match + ": " + pm.group(0));
-        }
-
-        if (match == -1) {
-//	    System.out.println("NO MATCH: \"" + fstr + "\"");
-            return fstr;
-        }
-
-        if (!pm.find(match)) {
-//	    System.out.println("MATCH FAILED: \"" + fstr + "\"");
-            return fstr;
-        }
-
-        StringBuffer date = new StringBuffer();
-
-        String day = pm.group(1);
-        if (day == null)
-            day = pm.group(5);
-        else if (pm.group(5) != null)
-            return fstr;	// possible day found in two places
-
-        if (day != null && !day.equals("0")) {
-            date.append(day);
-            date.append(" ");
-        } else
-            day = null;
-
-        String mon = pm.group(2);
-        if (mon == null)
-            mon = pm.group(4);
-        else if (pm.group(4) != null)
-            return fstr;	// possible month found in two places
-
-        int idx = -1;
-        if (mon != null) {
-            String lmon = mon.toLowerCase();
-            idx = MONS.indexOf(lmon);
-            if (idx == -1)  // not legal month, error
-                return fstr;
-            date.append(mon);
-            date.append(" ");
-            idx = idx / 4;
-            hm.put("month", MONTHS[idx]);
-
-        } else if (day != null) // day found but not month, error
-            return fstr;
-
-        String year = pm.group(3);
-        date.append(year);
-
-        StringBuffer note = new StringBuffer();
-        if (day != null && !day.equals("0")) {
-            note.append("Source Date: ");
-            note.append(date);
-            note.append(".");
-            addNote(hm, note.toString());
-        }
-
-        // check if journal year matches PY field
-        if (hm.get("year") != null) {
-            String oyear = hm.get("year");
-            if (!year.equals(oyear)) {
-                note.setLength(0);
-                note.append("Source Year: ");
-                note.append(year);
-                note.append(".");
-                addNote(hm, note.toString());
-//		System.out.println(year + " != " + oyear);
-            }
-        } else
-            hm.put("year", year);
-
-        int len = fstr.length();
-        StringBuffer newf = new StringBuffer();
-        if (pm.start() > 0)
-            newf.append(fstr.substring(0, pm.start()));
-        if (pm.end() < len)
-            newf.append(fstr.substring(pm.end(), len));
-        return newf.toString();
-    }
-
-    /**
-     * Check whether the source is in the correct format for this importer.
-     */
-    public boolean isRecognizedFormat(InputStream stream) throws IOException {
-        // CSA records start with "DN: Database Name"
-        BufferedReader in =
-            new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-        String str;
-        while ((str = in.readLine()) != null) {
-            if (str.equals("DN: Database Name"))
-                return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     */
-    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
-        StringBuffer sb = new StringBuffer();
-        HashMap<String, String> hm = new HashMap<String, String>();
-
-        BufferedReader in =
-            new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-
-        String Type = null;
-        String str;
-        boolean first = true;
-        line = 1;
-        str = readLine(in);
-        while (true) {
-            if (str == null || str.length() == 0) {	// end of record
-                if (!hm.isEmpty()) { // have a record
-                    if (Type == null) {
-                        addNote(hm, "Publication Type: [NOT SPECIFIED]");
-                        addNote(hm, "[PERHAPS NOT FULL FORMAT]");
-                        Type = "article";
-                    }
-
-                    // post-process Journal article
-                    if (Type.equals("article") &&
-                        hm.get("booktitle") != null) {
-                        String booktitle = hm.get("booktitle");
-                        hm.remove("booktitle");
-                        hm.put("journal", booktitle);
-                    }
-
-                    BibtexEntry b =
-                        new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID,
-                                        Globals.getEntryType(Type));
-
-                    // create one here
-                    b.setField(hm);
-
-                    bibitems.add(b);
-                }
-                hm.clear();	// ready for next record
-                first = true;
-                if (str == null)
-                    break;	// end of file
-                str = readLine(in);
-                continue;
-            }
-
-            int fline = line;	// save this before reading field contents
-            Matcher fm = FIELD_PATTERN.matcher(str);
-            if (fm.find()) {
-
-                // save the field name (long and short)
-                String fabbr = fm.group(1);
-                String fname = fm.group(2);
-
-                // read the contents of the field
-                sb.setLength(0); // clear the buffer
-                while ((str = readLine(in)) != null) {
-                    if (! str.startsWith("    ")) // field contents?
-                        break;	// nope
-                    if (sb.length() > 0) {
-                        sb.append(" ");
-                    }
-                    sb.append(str.substring(4)); // skip spaces
-                }
-                String fstr = sb.toString();
-                if (fstr == null || fstr.length() == 0) {
-                    int line1 = line - 1;
-                    throw new IOException("illegal empty field at line " +
-                                          line1);
-                }
-                // replace [Lt] with <
-                fm = LT_PATTERN.matcher(fstr);
-                if (fm.find())
-                    fstr = fm.replaceAll("<");
-
-                // check for start of new record
-                if (fabbr.equals("DN") &&
-                    fname.equalsIgnoreCase("Database Name")) {
-                    if (first == false) {
-                        throw new IOException("format error at line " + fline +
-                                              ": DN out of order");
-                    }
-                    first = false;
-                } else if (first == true) {
-                    throw new IOException("format error at line " + fline +
-                                              ": missing DN");
-                }
-
-                if (fabbr.equals("PT")) {
-                    Type = null;
-                    String flow = fstr.toLowerCase();
-                    String[] types = flow.split("; ");
-                    for (int ii = 0; ii < types.length; ++ii) {
-                        if ((types[ii].indexOf("article")>=0) ||
-                            (types[ii].indexOf("journal article")>=0)) {
-                            Type = "article";
-                            break;
-                        } else if (types[ii].equals("dissertation")) {
-                            Type = "phdthesis";
-                            break;
-                        } else if (types[ii].equals("conference")) {
-                            Type = "inproceedings";
-                            break;
-                        } else if (types[ii].equals("book monograph") &&
-                                   Type == null) {
-                            Type = "book";
-                            break;
-                        } else if (types[ii].equals("report") &&
-                                   Type == null) {
-                            Type = "techreport";
-                            break;
-                        }
-                    }
-                    if (Type == null) {
-                        Type = "misc";
-                    }
-
-                }
-
-                String ftype = null;
-                if (fabbr.equals("AB"))
-                    ftype = "abstract";
-                else if (fabbr.equals("AF"))
-                    ftype = "affiliation";
-                else if (fabbr.equals("AU")) {
-                    ftype = "author";
-                    if (fstr.indexOf(";") >= 0)
-                        fstr = fstr.replaceAll("; ", " and ");
-                }
-                else if (fabbr.equals("CA"))
-                    ftype = "organization";
-                else if (fabbr.equals("DE"))
-                    ftype = "keywords";
-                else if (fabbr.equals("DO"))
-                    ftype = "doi";
-                else if (fabbr.equals("ED"))
-                    ftype = "editor";
-                else if (fabbr.equals("IB"))
-                    ftype = "ISBN";
-                else if (fabbr.equals("IS"))
-                    ftype = "ISSN";
-                else if (fabbr.equals("JN"))
-                    ftype = "journal";
-                else if (fabbr.equals("LA"))
-                    ftype = "language";
-                else if (fabbr.equals("PB"))
-                    ftype = "publisher";
-                else if (fabbr.equals("PY")) {
-                    ftype = "year";
-                    if (hm.get("year") != null) {
-                        String oyear = hm.get("year");
-                        if (!fstr.equals(oyear)) {
-                            StringBuffer note = new StringBuffer();
-                            note.append("Source Year: ");
-                            note.append(oyear);
-                            note.append(".");
-                            addNote(hm, note.toString());
-//			    System.out.println(fstr + " != " + oyear);
-                        }
-                    }
-                } else if (fabbr.equals("RL")) {
-                    ftype = "url";
-                    String[] lines = fstr.split(" ");
-                    StringBuffer urls = new StringBuffer();
-                    for (int ii = 0; ii < lines.length; ++ii) {
-                        if (lines[ii].startsWith("[URL:"))
-                            urls.append(lines[ii].substring(5));
-                        else if (lines[ii].endsWith("]")) {
-                            int len = lines[ii].length();
-                            urls.append(lines[ii].substring(0, len - 1));
-                            if (ii < lines.length - 1)
-                                urls.append("\n");
-                        } else
-                            urls.append(lines[ii]);
-                    }
-                    fstr = urls.toString();
-                } else if (fabbr.equals("SO")) {
-                    ftype = "booktitle";
-
-                    // see if we can extract journal information
-
-                    // compact vol(no):page-page:
-                    Matcher pm = VOLNOPP_PATTERN.matcher(fstr);
-                    if (pm.find()) {
-                        hm.put("volume", pm.group(1));
-                        hm.put("number", pm.group(2));
-                        hm.put("pages", pm.group(3));
-                        fstr = pm.replaceFirst("");
-                    }
-
-                    // pages
-                    pm = PAGES_PATTERN.matcher(fstr);
-                    StringBuffer pages = new StringBuffer();
-                    while (pm.find()) {
-                        if (pages.length() > 0)
-                            pages.append(",");
-                        String pp = pm.group(1);
-                        if (pp == null)
-                            pp = pm.group(2);
-                        if (pp == null)
-                            pp = pm.group(3);
-                        pages.append(pp);
-                        fstr = pm.replaceFirst("");
-                        pm = PAGES_PATTERN.matcher(fstr);
-                    }
-                    if (pages.length() > 0)
-                        hm.put("pages", pages.toString());
-
-                    // volume:
-                    pm = VOLUME_PATTERN.matcher(fstr);
-                    if (pm.find()) {
-                        hm.put("volume", pm.group(1));
-                        fstr = pm.replaceFirst("");
-                    }
-
-                    // number:
-                    pm = NUMBER_PATTERN.matcher(fstr);
-                    if (pm.find()) {
-                        hm.put("number", pm.group(1));
-                        fstr = pm.replaceFirst("");
-                    }
-
-                    // journal date:
-                    fstr = parseDate(hm, fstr);
-
-                    // strip trailing whitespace
-                    Pattern pp = Pattern.compile(",?\\s*$");
-                    pm = pp.matcher(fstr);
-                    if (pm.find())
-                        fstr = pm.replaceFirst("");
-
-                    if (fstr.equals(""))
-                        continue;
-//		    System.out.println("SOURCE: \"" + fstr + "\"");
-                } else if (fabbr.equals("TI"))
-                    ftype = "title";
-                else if (fabbr.equals("RE"))
-                    continue;	// throw away References
-
-                if (ftype != null) {
-                    hm.put(ftype, fstr);
-                } else {
-                    StringBuffer val = new StringBuffer();
-                    val.append(fname);
-                    val.append(": ");
-                    val.append(fstr);
-                    val.append(".");
-                    addNote(hm, val.toString());
-                }
-            } else
-                str = readLine(in);
-        }
-
-        return bibitems;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+import net.sf.jabref.BibtexFields;
+
+
+/**
+ * Importer for records downloaded from CSA: Cambridge Scientific Abstracts
+ * in full text format.  Although the same basic format is used by all CSA
+ * databases, this importer has been tailored and tested to handle
+ * ASFA: Aquatic Sciences and Fisheries records.
+ *
+ * @author John Relph
+ */
+public class CsaImporter extends ImportFormat {
+
+    // local fields
+    private int line;
+
+    // pre-compiled patterns
+    private final static Pattern FIELD_PATTERN =
+        Pattern.compile("^([A-Z][A-Z]): ([A-Z].*)$");
+    private final static Pattern VOLNOPP_PATTERN =
+        Pattern.compile("[;,\\.]\\s+(\\d+[A-Za-z]?)\\((\\d+(?:-\\d+)?)\\)(?:,\\s+|:)(\\d+-\\d+)");
+    private final static Pattern PAGES_PATTERN =
+        Pattern.compile("[;,\\.]\\s+(?:(\\[?[vn]\\.?p\\.?\\]?)|(?:pp?\\.?\\s+)(\\d+[A-Z]?(?:-\\d+[A-Z]?)?)|(\\d+[A-Z]?(?:-\\d+[A-Z]?)?)(?:\\s+pp?))");
+    private final static Pattern VOLUME_PATTERN =
+        Pattern.compile("[;,\\.]?\\s+[vV][oO][lL]\\.?\\s+(\\d+[A-Z]?(?:-\\d+[A-Z]?)?)");
+    private final static Pattern NUMBER_PATTERN =
+        Pattern.compile("[;,\\.]\\s+(?:No|no|Part|part|NUMB)\\.?\\s+([A-Z]?\\d+(?:[/-]\\d+)?)");
+    private final static Pattern DATE_PATTERN =
+        Pattern.compile("[;,\\.]\\s+(?:(\\d+)\\s)?(?:([A-Z][a-z][a-z])[\\.,]*\\s)?\\(?(\\d\\d\\d\\d)\\)?(?:\\s([A-Z][a-z][a-z]))?(?:\\s+(\\d+))?");
+    private final static Pattern LT_PATTERN =
+        Pattern.compile("\\[Lt\\]");
+
+    // other constants
+    private static final String MONS =
+        "jan feb mar apr may jun jul aug sep oct nov dec";
+    private static final String[] MONTHS =
+        { "January", "February", "March", "April", "May", "June",
+          "July", "August", "September", "October", "November", "December" };
+
+    /**
+     * Return the name of this import format.
+     */
+    public String getFormatName() {
+        return "CSA";
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+     */
+    public String getCLIId() {
+      return "csa";
+    }
+
+    // read a line
+    private String readLine(BufferedReader file) throws IOException {
+        String str = file.readLine();
+        if (str != null)
+            line++;
+        return str;
+    }
+
+    // append to the "note" field
+    private void addNote(HashMap<String, String> hm, String note) {
+
+        StringBuffer notebuf = new StringBuffer();
+        if (hm.get("note") != null) {
+            notebuf.append(hm.get("note"));
+            notebuf.append("\n");
+        }
+        notebuf.append(note);
+        hm.put("note", notebuf.toString());
+    }
+
+    // parse the date from the Source field
+    private String parseDate(HashMap<String, String> hm, String fstr) {
+
+        // find LAST matching date in string
+        int match = -1;
+        Matcher pm = DATE_PATTERN.matcher(fstr);
+        while (pm.find()) {
+            match = pm.start();
+//	    System.out.println("MATCH: " + match + ": " + pm.group(0));
+        }
+
+        if (match == -1) {
+//	    System.out.println("NO MATCH: \"" + fstr + "\"");
+            return fstr;
+        }
+
+        if (!pm.find(match)) {
+//	    System.out.println("MATCH FAILED: \"" + fstr + "\"");
+            return fstr;
+        }
+
+        StringBuffer date = new StringBuffer();
+
+        String day = pm.group(1);
+        if (day == null)
+            day = pm.group(5);
+        else if (pm.group(5) != null)
+            return fstr;	// possible day found in two places
+
+        if (day != null && !day.equals("0")) {
+            date.append(day);
+            date.append(" ");
+        } else
+            day = null;
+
+        String mon = pm.group(2);
+        if (mon == null)
+            mon = pm.group(4);
+        else if (pm.group(4) != null)
+            return fstr;	// possible month found in two places
+
+        int idx = -1;
+        if (mon != null) {
+            String lmon = mon.toLowerCase();
+            idx = MONS.indexOf(lmon);
+            if (idx == -1)  // not legal month, error
+                return fstr;
+            date.append(mon);
+            date.append(" ");
+            idx = idx / 4;
+            hm.put("month", MONTHS[idx]);
+
+        } else if (day != null) // day found but not month, error
+            return fstr;
+
+        String year = pm.group(3);
+        date.append(year);
+
+        StringBuffer note = new StringBuffer();
+        if (day != null && !day.equals("0")) {
+            note.append("Source Date: ");
+            note.append(date);
+            note.append(".");
+            addNote(hm, note.toString());
+        }
+
+        // check if journal year matches PY field
+        if (hm.get("year") != null) {
+            String oyear = hm.get("year");
+            if (!year.equals(oyear)) {
+                note.setLength(0);
+                note.append("Source Year: ");
+                note.append(year);
+                note.append(".");
+                addNote(hm, note.toString());
+//		System.out.println(year + " != " + oyear);
+            }
+        } else
+            hm.put("year", year);
+
+        int len = fstr.length();
+        StringBuffer newf = new StringBuffer();
+        if (pm.start() > 0)
+            newf.append(fstr.substring(0, pm.start()));
+        if (pm.end() < len)
+            newf.append(fstr.substring(pm.end(), len));
+        return newf.toString();
+    }
+
+    /**
+     * Check whether the source is in the correct format for this importer.
+     */
+    public boolean isRecognizedFormat(InputStream stream) throws IOException {
+        // CSA records start with "DN: Database Name"
+        BufferedReader in =
+            new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+        String str;
+        while ((str = in.readLine()) != null) {
+            if (str.equals("DN: Database Name"))
+                return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     */
+    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
+        StringBuffer sb = new StringBuffer();
+        HashMap<String, String> hm = new HashMap<String, String>();
+
+        BufferedReader in =
+            new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+
+        String Type = null;
+        String str;
+        boolean first = true;
+        line = 1;
+        str = readLine(in);
+        while (true) {
+            if (str == null || str.length() == 0) {	// end of record
+                if (!hm.isEmpty()) { // have a record
+                    if (Type == null) {
+                        addNote(hm, "Publication Type: [NOT SPECIFIED]");
+                        addNote(hm, "[PERHAPS NOT FULL FORMAT]");
+                        Type = "article";
+                    }
+
+                    // post-process Journal article
+                    if (Type.equals("article") &&
+                        hm.get("booktitle") != null) {
+                        String booktitle = hm.get("booktitle");
+                        hm.remove("booktitle");
+                        hm.put("journal", booktitle);
+                    }
+
+                    BibtexEntry b =
+                        new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID,
+                                        Globals.getEntryType(Type));
+
+                    // create one here
+                    b.setField(hm);
+
+                    bibitems.add(b);
+                }
+                hm.clear();	// ready for next record
+                first = true;
+                if (str == null)
+                    break;	// end of file
+                str = readLine(in);
+                continue;
+            }
+
+            int fline = line;	// save this before reading field contents
+            Matcher fm = FIELD_PATTERN.matcher(str);
+            if (fm.find()) {
+
+                // save the field name (long and short)
+                String fabbr = fm.group(1);
+                String fname = fm.group(2);
+
+                // read the contents of the field
+                sb.setLength(0); // clear the buffer
+                while ((str = readLine(in)) != null) {
+                    if (! str.startsWith("    ")) // field contents?
+                        break;	// nope
+                    if (sb.length() > 0) {
+                        sb.append(" ");
+                    }
+                    sb.append(str.substring(4)); // skip spaces
+                }
+                String fstr = sb.toString();
+                if (fstr == null || fstr.length() == 0) {
+                    int line1 = line - 1;
+                    throw new IOException("illegal empty field at line " +
+                                          line1);
+                }
+                // replace [Lt] with <
+                fm = LT_PATTERN.matcher(fstr);
+                if (fm.find())
+                    fstr = fm.replaceAll("<");
+
+                // check for start of new record
+                if (fabbr.equals("DN") &&
+                    fname.equalsIgnoreCase("Database Name")) {
+                    if (first == false) {
+                        throw new IOException("format error at line " + fline +
+                                              ": DN out of order");
+                    }
+                    first = false;
+                } else if (first == true) {
+                    throw new IOException("format error at line " + fline +
+                                              ": missing DN");
+                }
+
+                if (fabbr.equals("PT")) {
+                    Type = null;
+                    String flow = fstr.toLowerCase();
+                    String[] types = flow.split("; ");
+                    for (int ii = 0; ii < types.length; ++ii) {
+                        if ((types[ii].indexOf("article")>=0) ||
+                            (types[ii].indexOf("journal article")>=0)) {
+                            Type = "article";
+                            break;
+                        } else if (types[ii].equals("dissertation")) {
+                            Type = "phdthesis";
+                            break;
+                        } else if (types[ii].equals("conference")) {
+                            Type = "inproceedings";
+                            break;
+                        } else if (types[ii].equals("book monograph") &&
+                                   Type == null) {
+                            Type = "book";
+                            break;
+                        } else if (types[ii].equals("report") &&
+                                   Type == null) {
+                            Type = "techreport";
+                            break;
+                        }
+                    }
+                    if (Type == null) {
+                        Type = "misc";
+                    }
+
+                }
+
+                String ftype = null;
+                if (fabbr.equals("AB"))
+                    ftype = "abstract";
+                else if (fabbr.equals("AF"))
+                    ftype = "affiliation";
+                else if (fabbr.equals("AU")) {
+                    ftype = "author";
+                    if (fstr.indexOf(";") >= 0)
+                        fstr = fstr.replaceAll("; ", " and ");
+                }
+                else if (fabbr.equals("CA"))
+                    ftype = "organization";
+                else if (fabbr.equals("DE"))
+                    ftype = "keywords";
+                else if (fabbr.equals("DO"))
+                    ftype = "doi";
+                else if (fabbr.equals("ED"))
+                    ftype = "editor";
+                else if (fabbr.equals("IB"))
+                    ftype = "ISBN";
+                else if (fabbr.equals("IS"))
+                    ftype = "ISSN";
+                else if (fabbr.equals("JN"))
+                    ftype = "journal";
+                else if (fabbr.equals("LA"))
+                    ftype = "language";
+                else if (fabbr.equals("PB"))
+                    ftype = "publisher";
+                else if (fabbr.equals("PY")) {
+                    ftype = "year";
+                    if (hm.get("year") != null) {
+                        String oyear = hm.get("year");
+                        if (!fstr.equals(oyear)) {
+                            StringBuffer note = new StringBuffer();
+                            note.append("Source Year: ");
+                            note.append(oyear);
+                            note.append(".");
+                            addNote(hm, note.toString());
+//			    System.out.println(fstr + " != " + oyear);
+                        }
+                    }
+                } else if (fabbr.equals("RL")) {
+                    ftype = "url";
+                    String[] lines = fstr.split(" ");
+                    StringBuffer urls = new StringBuffer();
+                    for (int ii = 0; ii < lines.length; ++ii) {
+                        if (lines[ii].startsWith("[URL:"))
+                            urls.append(lines[ii].substring(5));
+                        else if (lines[ii].endsWith("]")) {
+                            int len = lines[ii].length();
+                            urls.append(lines[ii].substring(0, len - 1));
+                            if (ii < lines.length - 1)
+                                urls.append("\n");
+                        } else
+                            urls.append(lines[ii]);
+                    }
+                    fstr = urls.toString();
+                } else if (fabbr.equals("SO")) {
+                    ftype = "booktitle";
+
+                    // see if we can extract journal information
+
+                    // compact vol(no):page-page:
+                    Matcher pm = VOLNOPP_PATTERN.matcher(fstr);
+                    if (pm.find()) {
+                        hm.put("volume", pm.group(1));
+                        hm.put("number", pm.group(2));
+                        hm.put("pages", pm.group(3));
+                        fstr = pm.replaceFirst("");
+                    }
+
+                    // pages
+                    pm = PAGES_PATTERN.matcher(fstr);
+                    StringBuffer pages = new StringBuffer();
+                    while (pm.find()) {
+                        if (pages.length() > 0)
+                            pages.append(",");
+                        String pp = pm.group(1);
+                        if (pp == null)
+                            pp = pm.group(2);
+                        if (pp == null)
+                            pp = pm.group(3);
+                        pages.append(pp);
+                        fstr = pm.replaceFirst("");
+                        pm = PAGES_PATTERN.matcher(fstr);
+                    }
+                    if (pages.length() > 0)
+                        hm.put("pages", pages.toString());
+
+                    // volume:
+                    pm = VOLUME_PATTERN.matcher(fstr);
+                    if (pm.find()) {
+                        hm.put("volume", pm.group(1));
+                        fstr = pm.replaceFirst("");
+                    }
+
+                    // number:
+                    pm = NUMBER_PATTERN.matcher(fstr);
+                    if (pm.find()) {
+                        hm.put("number", pm.group(1));
+                        fstr = pm.replaceFirst("");
+                    }
+
+                    // journal date:
+                    fstr = parseDate(hm, fstr);
+
+                    // strip trailing whitespace
+                    Pattern pp = Pattern.compile(",?\\s*$");
+                    pm = pp.matcher(fstr);
+                    if (pm.find())
+                        fstr = pm.replaceFirst("");
+
+                    if (fstr.equals(""))
+                        continue;
+//		    System.out.println("SOURCE: \"" + fstr + "\"");
+                } else if (fabbr.equals("TI"))
+                    ftype = "title";
+                else if (fabbr.equals("RE"))
+                    continue;	// throw away References
+
+                if (ftype != null) {
+                    hm.put(ftype, fstr);
+                } else {
+                    StringBuffer val = new StringBuffer();
+                    val.append(fname);
+                    val.append(": ");
+                    val.append(fstr);
+                    val.append(".");
+                    addNote(hm, val.toString());
+                }
+            } else
+                str = readLine(in);
+        }
+
+        return bibitems;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/CustomImportList.java b/src/java/net/sf/jabref/imports/CustomImportList.java
index 8e64a61..95c8532 100644
--- a/src/java/net/sf/jabref/imports/CustomImportList.java
+++ b/src/java/net/sf/jabref/imports/CustomImportList.java
@@ -1,190 +1,190 @@
-/*
- Copyright (C) 2005 Andreas Rudert, based on CustomExportList by ??
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-*/
-package net.sf.jabref.imports;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.TreeSet;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-
-/**
- * Collection of user defined custom import formats. 
- * 
- * <p>The collection can be stored and retrieved from Preferences. It is sorted by the default
- * order of {@link ImportFormat}.</p>
- */
-public class CustomImportList extends TreeSet<CustomImportList.Importer> {
-
-  /**
-   * Object with data for a custom importer.
-   * 
-   * <p>Is also responsible for instantiating the class loader.</p>
-   */
-  public class Importer implements Comparable<Importer> {
-    
-    private String name;
-    private String cliId;
-    private String className;
-    private String basePath;
-    
-    public Importer() {
-      super();
-    }
-    
-    public Importer(String[] data) {
-      super();
-      this.name = data[0];
-      this.cliId = data[1];
-      this.className = data[2];
-      this.basePath = data[3];
-    }
-    
-    public String getName() {
-      return this.name;
-    }
-    
-    public void setName(String name) {
-      this.name = name;
-    }
-    
-    public String getClidId() {
-      return this.cliId;
-    }
-    
-    public void setCliId(String cliId) {
-      this.cliId = cliId;
-    }
-    
-    public String getClassName() {
-      return this.className;
-    }
-    
-    public void setClassName(String className) {
-      this.className = className;
-    }
-    
-    public void setBasePath(String basePath) {
-      this.basePath = basePath;
-    }
-    
-    public File getBasePath() {
-      return new File(basePath);
-    }
-    
-    public URL getBasePathUrl() throws MalformedURLException {
-      return getBasePath().toURI().toURL();
-    }
-    
-    public String[] getAsStringArray() {
-      return new String[] {name, cliId, className, basePath};
-    }
-    
-    public boolean equals(Object o) {
-      return o != null && o instanceof Importer && this.getName().equals(((Importer)o).getName());
-    }
-    
-    public int hashCode() {
-      return name.hashCode();
-    }
-    
-    public int compareTo(Importer o) {
-      return this.getName().compareTo( o.getName() );
-    }
-    
-    public String toString() {
-      return this.name;
-    }
-    
-    public ImportFormat getInstance() throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
-      URLClassLoader cl = new URLClassLoader(new URL[] {getBasePathUrl()});
-      Class<?> clazz = Class.forName(className, true, cl);
-      ImportFormat importFormat = (ImportFormat)clazz.newInstance();
-      importFormat.setIsCustomImporter(true);
-      return importFormat;
-    }
-  }
-  
-  private JabRefPreferences prefs;
-
-  public CustomImportList(JabRefPreferences prefs) {
-    super();
-    this.prefs = prefs;
-    readPrefs();
-  }
-
-
-  private void readPrefs() {
-    int i=0;
-    String[] s = null;
-    while ((s = prefs.getStringArray("customImportFormat"+i)) != null) {
-      try {
-        super.add(new Importer(s));
-      } catch (Exception e) {
-        System.err.println("Warning! Could not load " + s[0] + " from preferences. Will ignore.");
-        // Globals.prefs.remove("customImportFormat"+i);
-      }
-      i++;
-    }
-  }
-
-  public void addImporter(Importer customImporter) {
-    super.add(customImporter);
-  }
-  
-  /**
-   * Adds an importer.
-   * 
-   * <p>If an old one equal to the new one was contained, the old
-   * one is replaced.</p>
-   * 
-   * @param customImporter new (version of an) importer
-   * @return  if the importer was contained
-   */
-  public boolean replaceImporter(Importer customImporter) {
-    boolean wasContained = this.remove(customImporter);
-    this.addImporter(customImporter);
-    return wasContained;
-  }
-
-  public void store() {
-    purgeAll();
-    Importer[] importers = this.toArray(new Importer[]{});
-    for (int i = 0; i < importers.length; i++) {
-      Globals.prefs.putStringArray("customImportFormat"+i, importers[i].getAsStringArray());
-    }
-  }
-
-  private void purgeAll() {
-    for (int i = 0; Globals.prefs.getStringArray("customImportFormat"+i) != null; i++) {
-      Globals.prefs.remove("customImportFormat"+i);
-    }
-  }
-
-}
+/*
+ Copyright (C) 2005 Andreas Rudert, based on CustomExportList by ??
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+*/
+package net.sf.jabref.imports;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.TreeSet;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+
+/**
+ * Collection of user defined custom import formats. 
+ * 
+ * <p>The collection can be stored and retrieved from Preferences. It is sorted by the default
+ * order of {@link ImportFormat}.</p>
+ */
+public class CustomImportList extends TreeSet<CustomImportList.Importer> {
+
+  /**
+   * Object with data for a custom importer.
+   * 
+   * <p>Is also responsible for instantiating the class loader.</p>
+   */
+  public class Importer implements Comparable<Importer> {
+    
+    private String name;
+    private String cliId;
+    private String className;
+    private String basePath;
+    
+    public Importer() {
+      super();
+    }
+    
+    public Importer(String[] data) {
+      super();
+      this.name = data[0];
+      this.cliId = data[1];
+      this.className = data[2];
+      this.basePath = data[3];
+    }
+    
+    public String getName() {
+      return this.name;
+    }
+    
+    public void setName(String name) {
+      this.name = name;
+    }
+    
+    public String getClidId() {
+      return this.cliId;
+    }
+    
+    public void setCliId(String cliId) {
+      this.cliId = cliId;
+    }
+    
+    public String getClassName() {
+      return this.className;
+    }
+    
+    public void setClassName(String className) {
+      this.className = className;
+    }
+    
+    public void setBasePath(String basePath) {
+      this.basePath = basePath;
+    }
+    
+    public File getBasePath() {
+      return new File(basePath);
+    }
+    
+    public URL getBasePathUrl() throws MalformedURLException {
+      return getBasePath().toURI().toURL();
+    }
+    
+    public String[] getAsStringArray() {
+      return new String[] {name, cliId, className, basePath};
+    }
+    
+    public boolean equals(Object o) {
+      return o != null && o instanceof Importer && this.getName().equals(((Importer)o).getName());
+    }
+    
+    public int hashCode() {
+      return name.hashCode();
+    }
+    
+    public int compareTo(Importer o) {
+      return this.getName().compareTo( o.getName() );
+    }
+    
+    public String toString() {
+      return this.name;
+    }
+    
+    public ImportFormat getInstance() throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
+      URLClassLoader cl = new URLClassLoader(new URL[] {getBasePathUrl()});
+      Class<?> clazz = Class.forName(className, true, cl);
+      ImportFormat importFormat = (ImportFormat)clazz.newInstance();
+      importFormat.setIsCustomImporter(true);
+      return importFormat;
+    }
+  }
+  
+  private JabRefPreferences prefs;
+
+  public CustomImportList(JabRefPreferences prefs) {
+    super();
+    this.prefs = prefs;
+    readPrefs();
+  }
+
+
+  private void readPrefs() {
+    int i=0;
+    String[] s = null;
+    while ((s = prefs.getStringArray("customImportFormat"+i)) != null) {
+      try {
+        super.add(new Importer(s));
+      } catch (Exception e) {
+        System.err.println("Warning! Could not load " + s[0] + " from preferences. Will ignore.");
+        // Globals.prefs.remove("customImportFormat"+i);
+      }
+      i++;
+    }
+  }
+
+  public void addImporter(Importer customImporter) {
+    super.add(customImporter);
+  }
+  
+  /**
+   * Adds an importer.
+   * 
+   * <p>If an old one equal to the new one was contained, the old
+   * one is replaced.</p>
+   * 
+   * @param customImporter new (version of an) importer
+   * @return  if the importer was contained
+   */
+  public boolean replaceImporter(Importer customImporter) {
+    boolean wasContained = this.remove(customImporter);
+    this.addImporter(customImporter);
+    return wasContained;
+  }
+
+  public void store() {
+    purgeAll();
+    Importer[] importers = this.toArray(new Importer[]{});
+    for (int i = 0; i < importers.length; i++) {
+      Globals.prefs.putStringArray("customImportFormat"+i, importers[i].getAsStringArray());
+    }
+  }
+
+  private void purgeAll() {
+    for (int i = 0; Globals.prefs.getStringArray("customImportFormat"+i) != null; i++) {
+      Globals.prefs.remove("customImportFormat"+i);
+    }
+  }
+
+}
diff --git a/src/java/net/sf/jabref/imports/DBLPFetcher.java b/src/java/net/sf/jabref/imports/DBLPFetcher.java
index 2d9d57c..806f909 100644
--- a/src/java/net/sf/jabref/imports/DBLPFetcher.java
+++ b/src/java/net/sf/jabref/imports/DBLPFetcher.java
@@ -1,164 +1,164 @@
-/*  Copyright (C) 2011 Sascha Hunold.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.swing.JPanel;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.OutputPrinter;
-
-public class DBLPFetcher implements EntryFetcher {
-
-
-    private final String URL_START = "http://www.dblp.org/search/api/";
-    private final String URL_PART1 = "?q=";
-    private final String URL_END   = "&h=1000&c=4&f=0&format=json";
-
-	private volatile boolean shouldContinue = false;
-	private String query;
-	private final DBLPHelper helper = new DBLPHelper();
-
-
-	@Override
-	public void stopFetching() {
-	    shouldContinue  = false;
-	}
-
-	@Override
-	public boolean processQuery(String query, ImportInspector inspector,
-			OutputPrinter status) {
-
-		boolean res = false;
-		this.query = query;
-
-		shouldContinue = true;
-
-		try {
-
-			String address = makeSearchURL();
-			//System.out.println(address);
-			URL url = new URL(address);
-	        String page = readFromURL(url);
-
-	        //System.out.println(page);
-	        String[] lines = page.split("\n");
-	        List<String> bibtexUrlList = new ArrayList<String>();
-	        for(String line : lines) {
-	        	if( line.startsWith("\"url\"") ) {
-	        		String addr = line.replace("\"url\":\"", "");
-	        		addr = addr.substring(0, addr.length()-2);
-	        		//System.out.println("key address: " + addr);
-	        		bibtexUrlList.add(addr);
-	        	}
-	        }
-
-
-	        int count = 1;
-	        for(String urlStr : bibtexUrlList) {
-	        	if( ! shouldContinue ) {
-	        		break;
-	        	}
-
-	        	final URL bibUrl = new URL(urlStr);
-		        String bibtexPage = readFromURL(bibUrl);
-		        //System.out.println(bibtexPage);
-
-		        List<BibtexEntry> bibtexList = helper.getBibTexFromPage(bibtexPage);
-
-		        for(BibtexEntry bibtexEntry : bibtexList ) {
-		        	inspector.addEntry(bibtexEntry);
-		        	if( ! shouldContinue ) {
-		        		break;
-		        	}
-		        }
-	        	inspector.setProgress(count, bibtexUrlList.size());
-	        	count++;
-	        }
-
-	        // everything went smooth
-	        res = true;
-
-		} catch (MalformedURLException e) {
-			e.printStackTrace();
-			status.showMessage(e.getMessage());
-		} catch (IOException e) {
-			e.printStackTrace();
-			status.showMessage(e.getMessage());
-		} catch(DBLPParseException e) {
-			e.printStackTrace();
-			status.showMessage(e.getMessage());
-		}
-
-		return res;
-	}
-
-
-    private String readFromURL(final URL source) throws IOException {
-        final InputStream in = source.openStream();
-        final InputStreamReader ir = new InputStreamReader(in);
-        final StringBuffer sbuf = new StringBuffer();
-
-        char[] cbuf = new char[256];
-        int read;
-        while( (read = ir.read(cbuf)) != -1 ) {
-        	sbuf.append(cbuf, 0, read);
-        }
-        return sbuf.toString();
-    }
-
-	private String makeSearchURL() {
-        StringBuffer sb = new StringBuffer(URL_START).append(URL_PART1);
-        String cleanedQuery = helper.cleanDBLPQuery(query);
-        sb.append(cleanedQuery);
-        sb.append(URL_END);
-        return sb.toString();
-	}
-
-	@Override
-	public String getTitle() {
-		return "DBLP";
-	}
-
-	@Override
-	public String getKeyName() {
-		return "DBLP";
-	}
-
-	@Override
-	public URL getIcon() {
-	    return GUIGlobals.getIconUrl("www");
-	}
-
-	@Override
-	public String getHelpPage() {
-		return null;
-	}
-
-	@Override
-	public JPanel getOptionsPanel() {
-		return null;
-	}
-
-}
+/*  Copyright (C) 2011 Sascha Hunold.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JPanel;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.OutputPrinter;
+
+public class DBLPFetcher implements EntryFetcher {
+
+
+    private final String URL_START = "http://www.dblp.org/search/api/";
+    private final String URL_PART1 = "?q=";
+    private final String URL_END   = "&h=1000&c=4&f=0&format=json";
+
+	private volatile boolean shouldContinue = false;
+	private String query;
+	private final DBLPHelper helper = new DBLPHelper();
+
+
+	@Override
+	public void stopFetching() {
+	    shouldContinue  = false;
+	}
+
+	@Override
+	public boolean processQuery(String query, ImportInspector inspector,
+			OutputPrinter status) {
+
+		boolean res = false;
+		this.query = query;
+
+		shouldContinue = true;
+
+		try {
+
+			String address = makeSearchURL();
+			//System.out.println(address);
+			URL url = new URL(address);
+	        String page = readFromURL(url);
+
+	        //System.out.println(page);
+	        String[] lines = page.split("\n");
+	        List<String> bibtexUrlList = new ArrayList<String>();
+	        for(String line : lines) {
+	        	if( line.startsWith("\"url\"") ) {
+	        		String addr = line.replace("\"url\":\"", "");
+	        		addr = addr.substring(0, addr.length()-2);
+	        		//System.out.println("key address: " + addr);
+	        		bibtexUrlList.add(addr);
+	        	}
+	        }
+
+
+	        int count = 1;
+	        for(String urlStr : bibtexUrlList) {
+	        	if( ! shouldContinue ) {
+	        		break;
+	        	}
+
+	        	final URL bibUrl = new URL(urlStr);
+		        String bibtexPage = readFromURL(bibUrl);
+		        //System.out.println(bibtexPage);
+
+		        List<BibtexEntry> bibtexList = helper.getBibTexFromPage(bibtexPage);
+
+		        for(BibtexEntry bibtexEntry : bibtexList ) {
+		        	inspector.addEntry(bibtexEntry);
+		        	if( ! shouldContinue ) {
+		        		break;
+		        	}
+		        }
+	        	inspector.setProgress(count, bibtexUrlList.size());
+	        	count++;
+	        }
+
+	        // everything went smooth
+	        res = true;
+
+		} catch (MalformedURLException e) {
+			e.printStackTrace();
+			status.showMessage(e.getMessage());
+		} catch (IOException e) {
+			e.printStackTrace();
+			status.showMessage(e.getMessage());
+		} catch(DBLPParseException e) {
+			e.printStackTrace();
+			status.showMessage(e.getMessage());
+		}
+
+		return res;
+	}
+
+
+    private String readFromURL(final URL source) throws IOException {
+        final InputStream in = source.openStream();
+        final InputStreamReader ir = new InputStreamReader(in);
+        final StringBuffer sbuf = new StringBuffer();
+
+        char[] cbuf = new char[256];
+        int read;
+        while( (read = ir.read(cbuf)) != -1 ) {
+        	sbuf.append(cbuf, 0, read);
+        }
+        return sbuf.toString();
+    }
+
+	private String makeSearchURL() {
+        StringBuffer sb = new StringBuffer(URL_START).append(URL_PART1);
+        String cleanedQuery = helper.cleanDBLPQuery(query);
+        sb.append(cleanedQuery);
+        sb.append(URL_END);
+        return sb.toString();
+	}
+
+	@Override
+	public String getTitle() {
+		return "DBLP";
+	}
+
+	@Override
+	public String getKeyName() {
+		return "DBLP";
+	}
+
+	@Override
+	public URL getIcon() {
+	    return GUIGlobals.getIconUrl("www");
+	}
+
+	@Override
+	public String getHelpPage() {
+		return null;
+	}
+
+	@Override
+	public JPanel getOptionsPanel() {
+		return null;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/imports/DBLPHelper.java b/src/java/net/sf/jabref/imports/DBLPHelper.java
index b3765bf..0cfafdf 100644
--- a/src/java/net/sf/jabref/imports/DBLPHelper.java
+++ b/src/java/net/sf/jabref/imports/DBLPHelper.java
@@ -1,106 +1,106 @@
-/*  Copyright (C) 2011 Sascha Hunold.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-package net.sf.jabref.imports;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sf.jabref.BibtexEntry;
-
-public class DBLPHelper {
-
-	private final DBLPQueryCleaner cleaner = new DBLPQueryCleaner();
-
-	/*
-	 * This is a small helper class that cleans the user submitted query. Right
-	 * now, we cannot search for ":" on dblp.org. So, we remove colons from the
-	 * user submitted search string. Also, the search is case sensitive if we
-	 * use capitals. So, we better change the text to lower case.
-	 */
-
-	class DBLPQueryCleaner {
-
-		public String cleanQuery(final String query) {
-			String cleaned = query;
-
-			cleaned = cleaned.replaceAll("-", " ");
-			cleaned = cleaned.replaceAll(" ", "%20");
-			cleaned = cleaned.replaceAll(":", "");
-			cleaned = cleaned.toLowerCase();
-
-			return cleaned;
-		}
-	}
-
-	/**
-	 *
-	 * @param a
-	 *            string with the user query
-	 * @return a string with the user query, but compatible with dblp.org
-	 */
-	public String cleanDBLPQuery(String query) {
-		return cleaner.cleanQuery(query);
-	}
-
-	/**
-	 * Takes an HTML file (as String) as input and extracts the bibtex
-	 * information. After that, it will convert it into a BibtexEntry and return
-	 * it (them).
-	 *
-	 * @param html
-	 *            page as String
-	 * @return list of BibtexEntry
-	 */
-	public List<BibtexEntry> getBibTexFromPage(final String page)
-			throws DBLPParseException {
-		final List<BibtexEntry> bibtexList = new ArrayList<BibtexEntry>();
-		final String startPattern = "<pre>";
-		final String endPattern = "</pre>";
-
-		String tmpStr = page;
-		int startIdx = tmpStr.indexOf(startPattern);
-		int endIdx = tmpStr.indexOf(endPattern);
-
-		// this entry exists for sure
-		String entry1 = tmpStr.substring(startIdx + startPattern.length(),
-				endIdx);
-		entry1 = cleanEntry(entry1);
-		bibtexList.add(BibtexParser.singleFromString(entry1));
-		//System.out.println("'" + entry1 + "'");
-
-		// let's see whether there is another entry (crossref)
-		tmpStr = tmpStr
-				.substring(endIdx + endPattern.length(), tmpStr.length());
-		startIdx = tmpStr.indexOf(startPattern);
-		if (startIdx != -1) {
-			endIdx = tmpStr.indexOf(endPattern);
-			// this entry exists for sure
-			String entry2 = tmpStr.substring(startIdx + startPattern.length(),
-					endIdx);
-			entry2 = cleanEntry(entry2);
-			bibtexList.add(BibtexParser.singleFromString(entry2));
-		}
-
-		return bibtexList;
-	}
-
-	private String cleanEntry(final String bibEntry) {
-		String retStr = bibEntry
-				.replaceFirst("<a href=\".*\">DBLP</a>", "DBLP");
-		return retStr;
-	}
-
-}
+/*  Copyright (C) 2011 Sascha Hunold.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+package net.sf.jabref.imports;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sf.jabref.BibtexEntry;
+
+public class DBLPHelper {
+
+	private final DBLPQueryCleaner cleaner = new DBLPQueryCleaner();
+
+	/*
+	 * This is a small helper class that cleans the user submitted query. Right
+	 * now, we cannot search for ":" on dblp.org. So, we remove colons from the
+	 * user submitted search string. Also, the search is case sensitive if we
+	 * use capitals. So, we better change the text to lower case.
+	 */
+
+	class DBLPQueryCleaner {
+
+		public String cleanQuery(final String query) {
+			String cleaned = query;
+
+			cleaned = cleaned.replaceAll("-", " ");
+			cleaned = cleaned.replaceAll(" ", "%20");
+			cleaned = cleaned.replaceAll(":", "");
+			cleaned = cleaned.toLowerCase();
+
+			return cleaned;
+		}
+	}
+
+	/**
+	 *
+	 * @param a
+	 *            string with the user query
+	 * @return a string with the user query, but compatible with dblp.org
+	 */
+	public String cleanDBLPQuery(String query) {
+		return cleaner.cleanQuery(query);
+	}
+
+	/**
+	 * Takes an HTML file (as String) as input and extracts the bibtex
+	 * information. After that, it will convert it into a BibtexEntry and return
+	 * it (them).
+	 *
+	 * @param html
+	 *            page as String
+	 * @return list of BibtexEntry
+	 */
+	public List<BibtexEntry> getBibTexFromPage(final String page)
+			throws DBLPParseException {
+		final List<BibtexEntry> bibtexList = new ArrayList<BibtexEntry>();
+		final String startPattern = "<pre>";
+		final String endPattern = "</pre>";
+
+		String tmpStr = page;
+		int startIdx = tmpStr.indexOf(startPattern);
+		int endIdx = tmpStr.indexOf(endPattern);
+
+		// this entry exists for sure
+		String entry1 = tmpStr.substring(startIdx + startPattern.length(),
+				endIdx);
+		entry1 = cleanEntry(entry1);
+		bibtexList.add(BibtexParser.singleFromString(entry1));
+		//System.out.println("'" + entry1 + "'");
+
+		// let's see whether there is another entry (crossref)
+		tmpStr = tmpStr
+				.substring(endIdx + endPattern.length(), tmpStr.length());
+		startIdx = tmpStr.indexOf(startPattern);
+		if (startIdx != -1) {
+			endIdx = tmpStr.indexOf(endPattern);
+			// this entry exists for sure
+			String entry2 = tmpStr.substring(startIdx + startPattern.length(),
+					endIdx);
+			entry2 = cleanEntry(entry2);
+			bibtexList.add(BibtexParser.singleFromString(entry2));
+		}
+
+		return bibtexList;
+	}
+
+	private String cleanEntry(final String bibEntry) {
+		String retStr = bibEntry
+				.replaceFirst("<a href=\".*\">DBLP</a>", "DBLP");
+		return retStr;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/imports/DBLPParseException.java b/src/java/net/sf/jabref/imports/DBLPParseException.java
index 9fb1696..dabeb75 100644
--- a/src/java/net/sf/jabref/imports/DBLPParseException.java
+++ b/src/java/net/sf/jabref/imports/DBLPParseException.java
@@ -1,30 +1,30 @@
-/*  Copyright (C) 2011 Sascha Hunold.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-public class DBLPParseException extends Exception {
-
-	private static final long serialVersionUID = 1L;
-
-	public DBLPParseException(final String msg) {
-		super(msg);
-	}
-
-	public DBLPParseException(final Exception e) {
-		super(e);
-	}
-
-}
+/*  Copyright (C) 2011 Sascha Hunold.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+public class DBLPParseException extends Exception {
+
+	private static final long serialVersionUID = 1L;
+
+	public DBLPParseException(final String msg) {
+		super(msg);
+	}
+
+	public DBLPParseException(final Exception e) {
+		super(e);
+	}
+
+}
diff --git a/src/java/net/sf/jabref/imports/DOItoBibTeXFetcher.java b/src/java/net/sf/jabref/imports/DOItoBibTeXFetcher.java
index 9a2e543..c112bce 100644
--- a/src/java/net/sf/jabref/imports/DOItoBibTeXFetcher.java
+++ b/src/java/net/sf/jabref/imports/DOItoBibTeXFetcher.java
@@ -1,146 +1,146 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.io.FileNotFoundException;
-import java.io.UnsupportedEncodingException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLEncoder;
-import javax.swing.JOptionPane;
-
-import javax.swing.JPanel;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.Util;
-
-
-public class DOItoBibTeXFetcher implements EntryFetcher {
-	
-    private static final String URL_PATTERN = "http://dx.doi.org/%s"; 
-    final CaseKeeper caseKeeper = new CaseKeeper();
-    
-	@Override
-    public void stopFetching() {
-		// nothing needed as the fetching is a single HTTP GET
-    }
-
-	@Override
-    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
-		String q;
-		try {
-	        q = URLEncoder.encode(query, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
-        	// this should never happen
-        	status.setStatus(Globals.lang("Error"));
-	        e.printStackTrace();
-	        return false;
-        }
-		
-        String urlString = String.format(URL_PATTERN, q);
-
-        // Send the request
-        URL url;
-        try {
-            url = new URL(urlString);
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-            return false;
-        }
-
-        URLConnection conn;
-        try {
-	        conn = url.openConnection();
-        } catch (IOException e) {
-	        e.printStackTrace();
-	        return false;
-        }
-        
-        conn.setRequestProperty("Accept", "text/bibliography; style=bibtex");
-        
-        
-       String bibtexString;
-        try {
-	        bibtexString = Util.getResults(conn);
-        } catch (FileNotFoundException e) {
-               status.showMessage(Globals.lang("Unknown DOI: '%0'.",
-                        query),
-                        Globals.lang("Get BibTeX entry from DOI"), JOptionPane.INFORMATION_MESSAGE);
-	        return false;
-        }
-        catch (IOException e) {
-	        e.printStackTrace();
-	        return false;
-        }
-        
-       
-        
-        BibtexEntry entry = BibtexParser.singleFromString(bibtexString);
-        
-        if(entry != null) {
-            // Optionally add curly brackets around key words to keep the case
-            String title = (String)entry.getField("title");
-            if (title != null) {
-                if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
-                    title = caseKeeper.format(title);
-                }
-                entry.setField("title", title);
-            }
-            
-            // Do not use the provided key
-            // entry.setField(BibtexFields.KEY_FIELD,null);
-            inspector.addEntry(entry);
-	    return true;
-        } else {
-            return false;
-        }
-        
-    }
-
-	@Override
-    public String getTitle() {
-	    return "DOI to BibTeX";
-    }
-
-	@Override
-    public String getKeyName() {
-	    return "DOItoBibTeX";
-    }
-
-	@Override
-    public URL getIcon() {
-		// no special icon for this fetcher available.
-		// Therefore, we return some kind of default icon
-	    return GUIGlobals.getIconUrl("www");
-    }
-
-	@Override
-    public String getHelpPage() {
-	    return "DOItoBibTeXHelp.html";
-    }
-
-	@Override
-    public JPanel getOptionsPanel() {
-		// no additional options available
-	    return null;
-    }
-
-
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.FileNotFoundException;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import javax.swing.JOptionPane;
+
+import javax.swing.JPanel;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.Util;
+
+
+public class DOItoBibTeXFetcher implements EntryFetcher {
+	
+    private static final String URL_PATTERN = "http://dx.doi.org/%s"; 
+    final CaseKeeper caseKeeper = new CaseKeeper();
+    
+	@Override
+    public void stopFetching() {
+		// nothing needed as the fetching is a single HTTP GET
+    }
+
+	@Override
+    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
+		String q;
+		try {
+	        q = URLEncoder.encode(query, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+        	// this should never happen
+        	status.setStatus(Globals.lang("Error"));
+	        e.printStackTrace();
+	        return false;
+        }
+		
+        String urlString = String.format(URL_PATTERN, q);
+
+        // Send the request
+        URL url;
+        try {
+            url = new URL(urlString);
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+            return false;
+        }
+
+        URLConnection conn;
+        try {
+	        conn = url.openConnection();
+        } catch (IOException e) {
+	        e.printStackTrace();
+	        return false;
+        }
+        
+        conn.setRequestProperty("Accept", "text/bibliography; style=bibtex");
+        
+        
+       String bibtexString;
+        try {
+	        bibtexString = Util.getResults(conn);
+        } catch (FileNotFoundException e) {
+               status.showMessage(Globals.lang("Unknown DOI: '%0'.",
+                        query),
+                        Globals.lang("Get BibTeX entry from DOI"), JOptionPane.INFORMATION_MESSAGE);
+	        return false;
+        }
+        catch (IOException e) {
+	        e.printStackTrace();
+	        return false;
+        }
+        
+       
+        
+        BibtexEntry entry = BibtexParser.singleFromString(bibtexString);
+        
+        if(entry != null) {
+            // Optionally add curly brackets around key words to keep the case
+            String title = (String)entry.getField("title");
+            if (title != null) {
+                if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
+                    title = caseKeeper.format(title);
+                }
+                entry.setField("title", title);
+            }
+            
+            // Do not use the provided key
+            // entry.setField(BibtexFields.KEY_FIELD,null);
+            inspector.addEntry(entry);
+	    return true;
+        } else {
+            return false;
+        }
+        
+    }
+
+	@Override
+    public String getTitle() {
+	    return "DOI to BibTeX";
+    }
+
+	@Override
+    public String getKeyName() {
+	    return "DOItoBibTeX";
+    }
+
+	@Override
+    public URL getIcon() {
+		// no special icon for this fetcher available.
+		// Therefore, we return some kind of default icon
+	    return GUIGlobals.getIconUrl("www");
+    }
+
+	@Override
+    public String getHelpPage() {
+	    return "DOItoBibTeXHelp.html";
+    }
+
+	@Override
+    public JPanel getOptionsPanel() {
+		// no additional options available
+	    return null;
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/imports/DatabaseFileLookup.java b/src/java/net/sf/jabref/imports/DatabaseFileLookup.java
index 048aeeb..50832cc 100644
--- a/src/java/net/sf/jabref/imports/DatabaseFileLookup.java
+++ b/src/java/net/sf/jabref/imports/DatabaseFileLookup.java
@@ -1,127 +1,127 @@
-package net.sf.jabref.imports;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.logging.Logger;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.JabRef;
-import net.sf.jabref.Util;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.gui.FileListTableModel;
-
-/**
- * Search class for files. <br>
- * <br>
- * This class provides some functionality to search in a {@link BibtexDatabase} for
- * files. <br>
- * <br>
- * 
- * 
- * @author Nosh&Dan
- * @version 09.11.2008 | 21:21:41
- * 
- */
-public class DatabaseFileLookup {
-
-	private static final String KEY_FILE_FIELD = "file";
-
-	private static Logger logger = Logger.getLogger(DatabaseFileLookup.class.getName());
-	
-	private final HashMap<File, Boolean> fileToFound = new HashMap<File, Boolean>();
-
-    private final Collection<BibtexEntry> entries;
-
-    private final String[] possibleFilePaths;
-
-	/**
-	 * Creates an instance by passing a {@link BibtexDatabase} which will be
-	 * used for the searches.
-	 * 
-	 * @param aDatabase
-	 *            A {@link BibtexDatabase}.
-	 */
-	public DatabaseFileLookup(BibtexDatabase aDatabase) {
-		if (aDatabase == null)
-			throw new IllegalArgumentException("Passing a 'null' BibtexDatabase.");
-		entries = aDatabase.getEntries();
-        possibleFilePaths = JabRef.jrf.basePanel().metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-	}
-	
-	/**
-	 * Returns whether the File <code>aFile</code> is present in the database
-	 * as an attached File to an {@link BibtexEntry}. <br>
-	 * <br>
-	 * To do this, the field specified by the key <b>file</b> will be searched
-	 * for the provided file for every {@link BibtexEntry} in the database. <br>
-	 * <br>
-	 * For the matching, the absolute file paths will be used.
-	 * 
-	 * @param file
-	 *            A {@link File} Object.
-	 * @return <code>true</code>, if the file Object is stored in at least one
-	 *         entry in the database, otherwise <code>false</code>.
-	 */
-	public boolean lookupDatabase(File aFile) {
-	    if (fileToFound.containsKey(aFile)) {
-	        return fileToFound.get(aFile); 
-	    } else {
-	        Boolean res = false;
-    		for (BibtexEntry entry : entries) {
-    			if (lookupEntry(aFile, entry)) {
-    				res = true;
-    				break;
-    			}
-    		}
-    		fileToFound.put(aFile,  res);
-    		//System.out.println(aFile);
-    		return res;
-	    }
-	}
-
-	/**
-	 * Searches the specified {@link BibtexEntry} <code>anEntry</code> for the
-	 * appearance of the specified {@link File} <code>aFile</code>. <br>
-	 * <br>
-	 * Therefore the <i>file</i>-field of the bibtex-entry will be searched for
-	 * the absolute filepath of the searched file. <br>
-	 * <br>
-	 * 
-	 * @param aFile
-	 *            A file that is searched in an bibtex-entry.
-	 * @param anEntry
-	 *            A bibtex-entry, in which the file is searched.
-	 * @return <code>true</code>, if the bibtex entry stores the file in its
-	 *         <i>file</i>-field, otherwise <code>false</code>.
-	 */
-	public boolean lookupEntry(File aFile, BibtexEntry anEntry) {
-
-		if (aFile == null || anEntry == null)
-			return false;
-
-		FileListTableModel model = new FileListTableModel();
-
-		String fileField = anEntry.getField(KEY_FILE_FIELD);
-		model.setContent(fileField);
-		
-		for (int i = 0; i < model.getRowCount(); i++) {
-			FileListEntry flEntry = model.getEntry(i);
-			String link = flEntry.getLink();
-			
-			if (link == null) {
-				break;
-			}
-			
-            File expandedFilename = Util.expandFilename(link, possibleFilePaths);
-			if (expandedFilename != null // file exists
-			    && expandedFilename.equals(aFile)) {
-			    return true;
-			}
-		}
-		
-		return false;
-	}
-}
+package net.sf.jabref.imports;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.logging.Logger;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.Util;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileListTableModel;
+
+/**
+ * Search class for files. <br>
+ * <br>
+ * This class provides some functionality to search in a {@link BibtexDatabase} for
+ * files. <br>
+ * <br>
+ * 
+ * 
+ * @author Nosh&Dan
+ * @version 09.11.2008 | 21:21:41
+ * 
+ */
+public class DatabaseFileLookup {
+
+	private static final String KEY_FILE_FIELD = "file";
+
+	private static Logger logger = Logger.getLogger(DatabaseFileLookup.class.getName());
+	
+	private final HashMap<File, Boolean> fileToFound = new HashMap<File, Boolean>();
+
+    private final Collection<BibtexEntry> entries;
+
+    private final String[] possibleFilePaths;
+
+	/**
+	 * Creates an instance by passing a {@link BibtexDatabase} which will be
+	 * used for the searches.
+	 * 
+	 * @param aDatabase
+	 *            A {@link BibtexDatabase}.
+	 */
+	public DatabaseFileLookup(BibtexDatabase aDatabase) {
+		if (aDatabase == null)
+			throw new IllegalArgumentException("Passing a 'null' BibtexDatabase.");
+		entries = aDatabase.getEntries();
+        possibleFilePaths = JabRef.jrf.basePanel().metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+	}
+	
+	/**
+	 * Returns whether the File <code>aFile</code> is present in the database
+	 * as an attached File to an {@link BibtexEntry}. <br>
+	 * <br>
+	 * To do this, the field specified by the key <b>file</b> will be searched
+	 * for the provided file for every {@link BibtexEntry} in the database. <br>
+	 * <br>
+	 * For the matching, the absolute file paths will be used.
+	 * 
+	 * @param file
+	 *            A {@link File} Object.
+	 * @return <code>true</code>, if the file Object is stored in at least one
+	 *         entry in the database, otherwise <code>false</code>.
+	 */
+	public boolean lookupDatabase(File aFile) {
+	    if (fileToFound.containsKey(aFile)) {
+	        return fileToFound.get(aFile); 
+	    } else {
+	        Boolean res = false;
+    		for (BibtexEntry entry : entries) {
+    			if (lookupEntry(aFile, entry)) {
+    				res = true;
+    				break;
+    			}
+    		}
+    		fileToFound.put(aFile,  res);
+    		//System.out.println(aFile);
+    		return res;
+	    }
+	}
+
+	/**
+	 * Searches the specified {@link BibtexEntry} <code>anEntry</code> for the
+	 * appearance of the specified {@link File} <code>aFile</code>. <br>
+	 * <br>
+	 * Therefore the <i>file</i>-field of the bibtex-entry will be searched for
+	 * the absolute filepath of the searched file. <br>
+	 * <br>
+	 * 
+	 * @param aFile
+	 *            A file that is searched in an bibtex-entry.
+	 * @param anEntry
+	 *            A bibtex-entry, in which the file is searched.
+	 * @return <code>true</code>, if the bibtex entry stores the file in its
+	 *         <i>file</i>-field, otherwise <code>false</code>.
+	 */
+	public boolean lookupEntry(File aFile, BibtexEntry anEntry) {
+
+		if (aFile == null || anEntry == null)
+			return false;
+
+		FileListTableModel model = new FileListTableModel();
+
+		String fileField = anEntry.getField(KEY_FILE_FIELD);
+		model.setContent(fileField);
+		
+		for (int i = 0; i < model.getRowCount(); i++) {
+			FileListEntry flEntry = model.getEntry(i);
+			String link = flEntry.getLink();
+			
+			if (link == null) {
+				break;
+			}
+			
+            File expandedFilename = Util.expandFilename(link, possibleFilePaths);
+			if (expandedFilename != null // file exists
+			    && expandedFilename.equals(aFile)) {
+			    return true;
+			}
+		}
+		
+		return false;
+	}
+}
diff --git a/src/java/net/sf/jabref/imports/DiVAtoBibTeXFetcher.java b/src/java/net/sf/jabref/imports/DiVAtoBibTeXFetcher.java
index ee23e3a..373bc53 100644
--- a/src/java/net/sf/jabref/imports/DiVAtoBibTeXFetcher.java
+++ b/src/java/net/sf/jabref/imports/DiVAtoBibTeXFetcher.java
@@ -1,143 +1,143 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.io.FileNotFoundException;
-import java.io.UnsupportedEncodingException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLEncoder;
-import javax.swing.JOptionPane;
-
-import javax.swing.JPanel;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.Util;
-
-
-public class DiVAtoBibTeXFetcher implements EntryFetcher {
-	
-    private static final String URL_PATTERN = "http://www.diva-portal.org/smash/getreferences?referenceFormat=BibTex&pids=%s"; 
-    private static final String ABSTRACT_URL_PATTERN = "http://www.diva-portal.org/smash/record.jsf?pid=%s"; 
-    final CaseKeeper caseKeeper = new CaseKeeper();
-    
-	@Override
-    public void stopFetching() {
-		// nothing needed as the fetching is a single HTTP GET
-    }
-
-	@Override
-    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
-		String q;
-		try {
-	        q = URLEncoder.encode(query, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
-        	// this should never happen
-        	status.setStatus(Globals.lang("Error"));
-	        e.printStackTrace();
-	        return false;
-        }
-		
-        String urlString = String.format(URL_PATTERN, q);
-
-        // Send the request
-        URL url;
-        try {
-            url = new URL(urlString);
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-            return false;
-        }
-
-        URLConnection conn;
-        try {
-	        conn = url.openConnection();
-        } catch (IOException e) {
-	        e.printStackTrace();
-	        return false;
-        }
-        
-        // conn.setRequestProperty("Accept", "text/bibliography; style=bibtex");
-        
-        
-       String bibtexString;
-        try {
-	        bibtexString = Util.getResults(conn);
-        } catch (FileNotFoundException e) {
-               status.showMessage(Globals.lang("Unknown DiVA entry: '%0'.",
-                        query),
-                        Globals.lang("Get BibTeX entry from DiVA"), JOptionPane.INFORMATION_MESSAGE);
-	        return false;
-        }
-        catch (IOException e) {
-	        e.printStackTrace();
-	        return false;
-        }
-
-        BibtexEntry entry = BibtexParser.singleFromString(bibtexString);
-        if (entry != null) {
-            // Optionally add curly brackets around key words to keep the case
-            String title = (String)entry.getField("title");
-            if (title != null) {
-                if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
-                    title = caseKeeper.format(title);
-                }
-                entry.setField("title", title);
-            }
-            // Do not use the provided key
-            // entry.setField(BibtexFields.KEY_FIELD,null);
-            inspector.addEntry(entry);
-
-            return true;
-        }
-        else return false;
-
-    }
-
-	@Override
-    public String getTitle() {
-	    return "DiVA";
-    }
-
-	@Override
-    public String getKeyName() {
-	    return "DiVAtoBibTeX";
-    }
-
-	@Override
-    public URL getIcon() {
-		// no special icon for this fetcher available.
-		// Therefore, we return some kind of default icon
-	    return GUIGlobals.getIconUrl("www");
-    }
-
-	@Override
-    public String getHelpPage() {
-	    return "DiVAtoBibTeXHelp.html";
-    }
-
-	@Override
-    public JPanel getOptionsPanel() {
-		// no additional options available
-	    return null;
-    }
-
-
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.FileNotFoundException;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import javax.swing.JOptionPane;
+
+import javax.swing.JPanel;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.Util;
+
+
+public class DiVAtoBibTeXFetcher implements EntryFetcher {
+	
+    private static final String URL_PATTERN = "http://www.diva-portal.org/smash/getreferences?referenceFormat=BibTex&pids=%s"; 
+    private static final String ABSTRACT_URL_PATTERN = "http://www.diva-portal.org/smash/record.jsf?pid=%s"; 
+    final CaseKeeper caseKeeper = new CaseKeeper();
+    
+	@Override
+    public void stopFetching() {
+		// nothing needed as the fetching is a single HTTP GET
+    }
+
+	@Override
+    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
+		String q;
+		try {
+	        q = URLEncoder.encode(query, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+        	// this should never happen
+        	status.setStatus(Globals.lang("Error"));
+	        e.printStackTrace();
+	        return false;
+        }
+		
+        String urlString = String.format(URL_PATTERN, q);
+
+        // Send the request
+        URL url;
+        try {
+            url = new URL(urlString);
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+            return false;
+        }
+
+        URLConnection conn;
+        try {
+	        conn = url.openConnection();
+        } catch (IOException e) {
+	        e.printStackTrace();
+	        return false;
+        }
+        
+        // conn.setRequestProperty("Accept", "text/bibliography; style=bibtex");
+        
+        
+       String bibtexString;
+        try {
+	        bibtexString = Util.getResults(conn);
+        } catch (FileNotFoundException e) {
+               status.showMessage(Globals.lang("Unknown DiVA entry: '%0'.",
+                        query),
+                        Globals.lang("Get BibTeX entry from DiVA"), JOptionPane.INFORMATION_MESSAGE);
+	        return false;
+        }
+        catch (IOException e) {
+	        e.printStackTrace();
+	        return false;
+        }
+
+        BibtexEntry entry = BibtexParser.singleFromString(bibtexString);
+        if (entry != null) {
+            // Optionally add curly brackets around key words to keep the case
+            String title = (String)entry.getField("title");
+            if (title != null) {
+                if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
+                    title = caseKeeper.format(title);
+                }
+                entry.setField("title", title);
+            }
+            // Do not use the provided key
+            // entry.setField(BibtexFields.KEY_FIELD,null);
+            inspector.addEntry(entry);
+
+            return true;
+        }
+        else return false;
+
+    }
+
+	@Override
+    public String getTitle() {
+	    return "DiVA";
+    }
+
+	@Override
+    public String getKeyName() {
+	    return "DiVAtoBibTeX";
+    }
+
+	@Override
+    public URL getIcon() {
+		// no special icon for this fetcher available.
+		// Therefore, we return some kind of default icon
+	    return GUIGlobals.getIconUrl("www");
+    }
+
+	@Override
+    public String getHelpPage() {
+	    return "DiVAtoBibTeXHelp.html";
+    }
+
+	@Override
+    public JPanel getOptionsPanel() {
+		// no additional options available
+	    return null;
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/imports/EndnoteImporter.java b/src/java/net/sf/jabref/imports/EndnoteImporter.java
index 7e40db3..cbbc326 100644
--- a/src/java/net/sf/jabref/imports/EndnoteImporter.java
+++ b/src/java/net/sf/jabref/imports/EndnoteImporter.java
@@ -1,255 +1,255 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import net.sf.jabref.*;
-
-/**
- * Importer for the Refer/Endnote format.
- * modified to use article number for pages if pages are missing (some
- * journals, e.g., Physical Review Letters, don't use pages anymore)
- *
- * check here for details on the format
- * http://www.ecst.csuchico.edu/~jacobsd/bib/formats/endnote.html
- */
-public class EndnoteImporter extends ImportFormat {
-
-    /**
-     * Return the name of this import format.
-     */
-    public String getFormatName() {
-    return "Refer/Endnote";
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-     */
-    public String getCLIId() {
-      return "refer";
-    }
-
-    /**
-     * Check whether the source is in the correct format for this importer.
-     */
-    public boolean isRecognizedFormat(InputStream stream) throws IOException {
-
-    // Our strategy is to look for the "%A *" line.
-    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-    Pattern pat1 = Pattern.compile("%A .*"),
-            pat2 = Pattern.compile("%E .*");
-    String str;
-    while ((str = in.readLine()) != null){
-        if (pat1.matcher(str).matches() || pat2.matcher(str).matches())
-            return true;
-    }
-    return false;
-    }
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     */
-    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-    ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
-    StringBuffer sb = new StringBuffer();
-    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-    String ENDOFRECORD = "__EOREOR__";
-
-    String str;
-    boolean first = true;
-    while ((str = in.readLine()) != null){
-        str = str.trim();
-        // if(str.equals("")) continue;
-        if (str.indexOf("%0") == 0){
-        if (first){
-            first = false;
-        }else{
-            sb.append(ENDOFRECORD);
-        }
-        sb.append(str);
-        }else sb.append(str);
-        sb.append("\n");
-    }
-
-    String[] entries = sb.toString().split(ENDOFRECORD);
-    HashMap<String, String> hm = new HashMap<String, String>();
-    String author = "", Type = "", editor = "", artnum = "";
-    for (int i = 0; i < entries.length; i++){
-        hm.clear();
-        author = "";
-        Type = "";
-        editor = "";
-        artnum = "";
-
-        boolean IsEditedBook = false;
-        String[] fields = entries[i].trim().substring(1).split("\n%");
-        //String lastPrefix = "";
-        for (int j = 0; j < fields.length; j++){
-
-        if (fields[j].length() < 3) continue;
-
-        /*
-           * Details of Refer format for Journal Article and Book:
-           *
-           * Generic Ref Journal Article Book Code Author %A Author Author Year %D
-           * Year Year Title %T Title Title Secondary Author %E Series Editor
-           * Secondary Title %B Journal Series Title Place Published %C City
-           * Publisher %I Publisher Volume %V Volume Volume Number of Volumes %6
-           * Number of Volumes Number %N Issue Pages %P Pages Number of Pages
-           * Edition %7 Edition Subsidiary Author %? Translator Alternate Title %J
-           * Alternate Journal Label %F Label Label Keywords %K Keywords Keywords
-           * Abstract %X Abstract Abstract Notes %O Notes Notes
-           */
-
-        String prefix = fields[j].substring(0, 1);
-
-        String val = fields[j].substring(2);
-
-        if (prefix.equals("A")){
-            if (author.equals("")) author = val;
-            else author += " and " + val;
-        }else if (prefix.equals("E")){
-            if (editor.equals("")) editor = val;
-            else editor += " and " + val;
-        }else if (prefix.equals("T")) hm.put("title", val);
-        else if (prefix.equals("0")){
-            if (val.indexOf("Journal") == 0) Type = "article";
-            else if ((val.indexOf("Book Section") == 0)) Type = "incollection";
-            else if ((val.indexOf("Book") == 0)) Type = "book";
-            else if (val.indexOf("Edited Book") == 0) {
-                Type = "book";
-                IsEditedBook = true;
-            }else if (val.indexOf("Conference") == 0) // Proceedings
-            Type = "inproceedings";
-            else if (val.indexOf("Report") == 0) // Techreport
-            Type = "techreport";
-            else if (val.indexOf("Review") == 0)
-                Type = "article";
-            else if (val.indexOf("Thesis") == 0)
-                Type = "phdthesis";
-            else Type = "misc"; //
-        }else if (prefix.equals("7")) hm.put("edition", val);
-        else if (prefix.equals("C")) hm.put("address", val);
-        else if (prefix.equals("D")) hm.put("year", val);
-        else if (prefix.equals("8")) hm.put("date", val);
-        else if (prefix.equals("J")){
-            // "Alternate journal. Let's set it only if no journal
-            // has been set with %B.
-            if (hm.get("journal") == null) hm.put("journal", val);
-        }else if (prefix.equals("B")){
-            // This prefix stands for "journal" in a journal entry, and
-            // "series" in a book entry.
-            if (Type.equals("article")) hm.put("journal", val);
-            else if (Type.equals("book") || Type.equals("inbook")) hm.put(
-                                          "series", val);
-            else /* if (Type.equals("inproceedings")) */
-            hm.put("booktitle", val);
-        }else if (prefix.equals("I")) {
-            if (Type.equals("phdthesis"))
-                hm.put("school", val);
-            else
-                 hm.put("publisher", val);
-        }
-            // replace single dash page ranges (23-45) with double dashes (23--45):
-        else if (prefix.equals("P")) hm.put("pages", val.replaceAll("([0-9]) *- *([0-9])","$1--$2"));
-        else if (prefix.equals("V")) hm.put("volume", val);
-        else if (prefix.equals("N")) hm.put("number", val);
-        else if (prefix.equals("U")) hm.put("url", val);
-        else if (prefix.equals("R")) {
-            String doi = val;
-            if (doi.startsWith("doi:"))
-                doi = doi.substring(4);
-            hm.put("doi", doi);
-        }
-        else if (prefix.equals("O")) {
-	    // Notes may contain Article number
-	    if (val.startsWith("Artn")) {
-		String[] tokens = val.split("\\s");
-		artnum = tokens[1];
-	    }
-	    else {
-		hm.put("note", val);
-	    }
-	}
-        else if (prefix.equals("K")) hm.put("keywords", val);
-        else if (prefix.equals("X")) hm.put("abstract", val);
-        else if (prefix.equals("9")){
-            //Util.pr(val);
-            if (val.indexOf("Ph.D.") == 0) Type = "phdthesis";
-            if (val.indexOf("Masters") == 0) Type = "mastersthesis";
-        }else if (prefix.equals("F")) hm.put(BibtexFields.KEY_FIELD, Util
-                             .checkLegalKey(val));
-        }
-
-        // For Edited Book, EndNote puts the editors in the author field.
-        // We want them in the editor field so that bibtex knows it's an edited book
-        if (IsEditedBook && editor.equals("")) {
-           editor = author;
-           author = "";
-        }
-
-        //fixauthorscomma
-        if (!author.equals("")) hm.put("author", fixAuthor(author));
-        if (!editor.equals("")) hm.put("editor", fixAuthor(editor));
-        //if pages missing and article number given, use the article number
-        if (((hm.get("pages") == null) || hm.get("pages").equals("-")) && !artnum.equals(""))
-            hm.put("pages", artnum);
-
-        BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
-                        .getEntryType(Type)); // id assumes an existing database so don't
-        // create one here
-        b.setField(hm);
-        //if (hm.isEmpty())
-        if (b.getAllFields().size() > 0)
-        	bibitems.add(b);
-
-    }
-    return bibitems;
-
-    }
-
-    /**
-     * We must be careful about the author names, since they can be presented differently
-     * by different sources. Normally each %A tag brings one name, and we get the authors
-     * separated by " and ". This is the correct behaviour.
-     * One source lists the names separated by comma, with a comma at the end. We can detect
-     * this format and fix it.
-     * @param s The author string
-     * @return The fixed author string
-     */
-    private String fixAuthor(String s) {
-        int index = s.indexOf(" and ");
-        if (index >= 0)
-            return AuthorList.fixAuthor_lastNameFirst(s);
-        // Look for the comma at the end:
-        index = s.lastIndexOf(",");
-        if (index == s.length()-1) {
-            String mod = s.substring(0, s.length()-1).replaceAll(", ", " and ");
-            return AuthorList.fixAuthor_lastNameFirst(mod);
-        } else
-            return AuthorList.fixAuthor_lastNameFirst(s);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.*;
+
+/**
+ * Importer for the Refer/Endnote format.
+ * modified to use article number for pages if pages are missing (some
+ * journals, e.g., Physical Review Letters, don't use pages anymore)
+ *
+ * check here for details on the format
+ * http://www.ecst.csuchico.edu/~jacobsd/bib/formats/endnote.html
+ */
+public class EndnoteImporter extends ImportFormat {
+
+    /**
+     * Return the name of this import format.
+     */
+    public String getFormatName() {
+    return "Refer/Endnote";
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+     */
+    public String getCLIId() {
+      return "refer";
+    }
+
+    /**
+     * Check whether the source is in the correct format for this importer.
+     */
+    public boolean isRecognizedFormat(InputStream stream) throws IOException {
+
+    // Our strategy is to look for the "%A *" line.
+    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+    Pattern pat1 = Pattern.compile("%A .*"),
+            pat2 = Pattern.compile("%E .*");
+    String str;
+    while ((str = in.readLine()) != null){
+        if (pat1.matcher(str).matches() || pat2.matcher(str).matches())
+            return true;
+    }
+    return false;
+    }
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     */
+    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+    ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
+    StringBuffer sb = new StringBuffer();
+    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+    String ENDOFRECORD = "__EOREOR__";
+
+    String str;
+    boolean first = true;
+    while ((str = in.readLine()) != null){
+        str = str.trim();
+        // if(str.equals("")) continue;
+        if (str.indexOf("%0") == 0){
+        if (first){
+            first = false;
+        }else{
+            sb.append(ENDOFRECORD);
+        }
+        sb.append(str);
+        }else sb.append(str);
+        sb.append("\n");
+    }
+
+    String[] entries = sb.toString().split(ENDOFRECORD);
+    HashMap<String, String> hm = new HashMap<String, String>();
+    String author = "", Type = "", editor = "", artnum = "";
+    for (int i = 0; i < entries.length; i++){
+        hm.clear();
+        author = "";
+        Type = "";
+        editor = "";
+        artnum = "";
+
+        boolean IsEditedBook = false;
+        String[] fields = entries[i].trim().substring(1).split("\n%");
+        //String lastPrefix = "";
+        for (int j = 0; j < fields.length; j++){
+
+        if (fields[j].length() < 3) continue;
+
+        /*
+           * Details of Refer format for Journal Article and Book:
+           *
+           * Generic Ref Journal Article Book Code Author %A Author Author Year %D
+           * Year Year Title %T Title Title Secondary Author %E Series Editor
+           * Secondary Title %B Journal Series Title Place Published %C City
+           * Publisher %I Publisher Volume %V Volume Volume Number of Volumes %6
+           * Number of Volumes Number %N Issue Pages %P Pages Number of Pages
+           * Edition %7 Edition Subsidiary Author %? Translator Alternate Title %J
+           * Alternate Journal Label %F Label Label Keywords %K Keywords Keywords
+           * Abstract %X Abstract Abstract Notes %O Notes Notes
+           */
+
+        String prefix = fields[j].substring(0, 1);
+
+        String val = fields[j].substring(2);
+
+        if (prefix.equals("A")){
+            if (author.equals("")) author = val;
+            else author += " and " + val;
+        }else if (prefix.equals("E")){
+            if (editor.equals("")) editor = val;
+            else editor += " and " + val;
+        }else if (prefix.equals("T")) hm.put("title", val);
+        else if (prefix.equals("0")){
+            if (val.indexOf("Journal") == 0) Type = "article";
+            else if ((val.indexOf("Book Section") == 0)) Type = "incollection";
+            else if ((val.indexOf("Book") == 0)) Type = "book";
+            else if (val.indexOf("Edited Book") == 0) {
+                Type = "book";
+                IsEditedBook = true;
+            }else if (val.indexOf("Conference") == 0) // Proceedings
+            Type = "inproceedings";
+            else if (val.indexOf("Report") == 0) // Techreport
+            Type = "techreport";
+            else if (val.indexOf("Review") == 0)
+                Type = "article";
+            else if (val.indexOf("Thesis") == 0)
+                Type = "phdthesis";
+            else Type = "misc"; //
+        }else if (prefix.equals("7")) hm.put("edition", val);
+        else if (prefix.equals("C")) hm.put("address", val);
+        else if (prefix.equals("D")) hm.put("year", val);
+        else if (prefix.equals("8")) hm.put("date", val);
+        else if (prefix.equals("J")){
+            // "Alternate journal. Let's set it only if no journal
+            // has been set with %B.
+            if (hm.get("journal") == null) hm.put("journal", val);
+        }else if (prefix.equals("B")){
+            // This prefix stands for "journal" in a journal entry, and
+            // "series" in a book entry.
+            if (Type.equals("article")) hm.put("journal", val);
+            else if (Type.equals("book") || Type.equals("inbook")) hm.put(
+                                          "series", val);
+            else /* if (Type.equals("inproceedings")) */
+            hm.put("booktitle", val);
+        }else if (prefix.equals("I")) {
+            if (Type.equals("phdthesis"))
+                hm.put("school", val);
+            else
+                 hm.put("publisher", val);
+        }
+            // replace single dash page ranges (23-45) with double dashes (23--45):
+        else if (prefix.equals("P")) hm.put("pages", val.replaceAll("([0-9]) *- *([0-9])","$1--$2"));
+        else if (prefix.equals("V")) hm.put("volume", val);
+        else if (prefix.equals("N")) hm.put("number", val);
+        else if (prefix.equals("U")) hm.put("url", val);
+        else if (prefix.equals("R")) {
+            String doi = val;
+            if (doi.startsWith("doi:"))
+                doi = doi.substring(4);
+            hm.put("doi", doi);
+        }
+        else if (prefix.equals("O")) {
+	    // Notes may contain Article number
+	    if (val.startsWith("Artn")) {
+		String[] tokens = val.split("\\s");
+		artnum = tokens[1];
+	    }
+	    else {
+		hm.put("note", val);
+	    }
+	}
+        else if (prefix.equals("K")) hm.put("keywords", val);
+        else if (prefix.equals("X")) hm.put("abstract", val);
+        else if (prefix.equals("9")){
+            //Util.pr(val);
+            if (val.indexOf("Ph.D.") == 0) Type = "phdthesis";
+            if (val.indexOf("Masters") == 0) Type = "mastersthesis";
+        }else if (prefix.equals("F")) hm.put(BibtexFields.KEY_FIELD, Util
+                             .checkLegalKey(val));
+        }
+
+        // For Edited Book, EndNote puts the editors in the author field.
+        // We want them in the editor field so that bibtex knows it's an edited book
+        if (IsEditedBook && editor.equals("")) {
+           editor = author;
+           author = "";
+        }
+
+        //fixauthorscomma
+        if (!author.equals("")) hm.put("author", fixAuthor(author));
+        if (!editor.equals("")) hm.put("editor", fixAuthor(editor));
+        //if pages missing and article number given, use the article number
+        if (((hm.get("pages") == null) || hm.get("pages").equals("-")) && !artnum.equals(""))
+            hm.put("pages", artnum);
+
+        BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
+                        .getEntryType(Type)); // id assumes an existing database so don't
+        // create one here
+        b.setField(hm);
+        //if (hm.isEmpty())
+        if (b.getAllFields().size() > 0)
+        	bibitems.add(b);
+
+    }
+    return bibitems;
+
+    }
+
+    /**
+     * We must be careful about the author names, since they can be presented differently
+     * by different sources. Normally each %A tag brings one name, and we get the authors
+     * separated by " and ". This is the correct behaviour.
+     * One source lists the names separated by comma, with a comma at the end. We can detect
+     * this format and fix it.
+     * @param s The author string
+     * @return The fixed author string
+     */
+    private String fixAuthor(String s) {
+        int index = s.indexOf(" and ");
+        if (index >= 0)
+            return AuthorList.fixAuthor_lastNameFirst(s);
+        // Look for the comma at the end:
+        index = s.lastIndexOf(",");
+        if (index == s.length()-1) {
+            String mod = s.substring(0, s.length()-1).replaceAll(", ", " and ");
+            return AuthorList.fixAuthor_lastNameFirst(mod);
+        } else
+            return AuthorList.fixAuthor_lastNameFirst(s);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/EntryFetcher.java b/src/java/net/sf/jabref/imports/EntryFetcher.java
index 6a00d17..4413221 100644
--- a/src/java/net/sf/jabref/imports/EntryFetcher.java
+++ b/src/java/net/sf/jabref/imports/EntryFetcher.java
@@ -1,100 +1,100 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.net.URL;
-
-import javax.swing.JPanel;
-
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.gui.ImportInspectionDialog;
-
-/**
- * Implement this interface to add another activeFetcher (something that grabs records
- * from the Web for JabRef). Have a look at the existing implemenations
- * OAI2Fetcher, IEEEXploreFetcher, MedlineFetcher, JStorFetcher and
- * CiteSeerEntryFetcher.
- * 
- * Note: You also need to implement the method stopFetching from
- * ImportInspectionDialog.Callback
- * 
- * A Fetcher should not execute any GUI Operations, because it might be run in
- * headless mode, but rather use the OutputPrinter for talking to the user.
- */
-public interface EntryFetcher extends ImportInspectionDialog.CallBack {
-
-    /**
-     * Handle a query entered by the user.
-     * 
-     * The method is expected to block the caller until all entries have been
-     * reported to the inspector.
-     * 
-     * @param query
-     *            The query text.
-     * @param inspector
-     *            The dialog to add imported entries to.
-     * @param status
-     *            An OutputPrinter passed to the activeFetcher for reporting about the
-     *            status of the fetching.
-     * 
-     * @return True if the query was completed successfully, false if an error
-     *         occurred.
-     */
-    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status);
-
-    /**
-     * The title for this activeFetcher, displayed in the menu and in the side pane.
-     * 
-     * @return The title
-     */
-    public String getTitle();
-
-    /**
-     * Get the name of the key binding for this activeFetcher, if any.
-     * 
-     * @return The name of the key binding or null, if no keybinding should be
-     *         created.
-     */
-    public String getKeyName();
-
-    /**
-     * Get the appropriate icon URL for this activeFetcher.
-     * 
-     * @return The icon URL
-     */
-    public URL getIcon();
-
-    /**
-     * Get the name of the help page for this activeFetcher.
-     * 
-     * If given, a question mark is displayed in the side pane which leads to
-     * the help page.
-     * 
-     * @return The name of the help file or null if this activeFetcher does not have
-     *         any help.
-     */
-    public String getHelpPage();
-
-    /**
-     * If this activeFetcher requires additional options, a panel for setting up these
-     * should be returned in a JPanel by this method. This JPanel will be added
-     * to the side pane component automatically.
-     * 
-     * @return Options panel for this activeFetcher or null if this activeFetcher does not
-     *         have any options.
-     */
-    public JPanel getOptionsPanel();
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.net.URL;
+
+import javax.swing.JPanel;
+
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.gui.ImportInspectionDialog;
+
+/**
+ * Implement this interface to add another activeFetcher (something that grabs records
+ * from the Web for JabRef). Have a look at the existing implemenations
+ * OAI2Fetcher, IEEEXploreFetcher, MedlineFetcher, JStorFetcher and
+ * CiteSeerEntryFetcher.
+ * 
+ * Note: You also need to implement the method stopFetching from
+ * ImportInspectionDialog.Callback
+ * 
+ * A Fetcher should not execute any GUI Operations, because it might be run in
+ * headless mode, but rather use the OutputPrinter for talking to the user.
+ */
+public interface EntryFetcher extends ImportInspectionDialog.CallBack {
+
+    /**
+     * Handle a query entered by the user.
+     * 
+     * The method is expected to block the caller until all entries have been
+     * reported to the inspector.
+     * 
+     * @param query
+     *            The query text.
+     * @param inspector
+     *            The dialog to add imported entries to.
+     * @param status
+     *            An OutputPrinter passed to the activeFetcher for reporting about the
+     *            status of the fetching.
+     * 
+     * @return True if the query was completed successfully, false if an error
+     *         occurred.
+     */
+    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status);
+
+    /**
+     * The title for this activeFetcher, displayed in the menu and in the side pane.
+     * 
+     * @return The title
+     */
+    public String getTitle();
+
+    /**
+     * Get the name of the key binding for this activeFetcher, if any.
+     * 
+     * @return The name of the key binding or null, if no keybinding should be
+     *         created.
+     */
+    public String getKeyName();
+
+    /**
+     * Get the appropriate icon URL for this activeFetcher.
+     * 
+     * @return The icon URL
+     */
+    public URL getIcon();
+
+    /**
+     * Get the name of the help page for this activeFetcher.
+     * 
+     * If given, a question mark is displayed in the side pane which leads to
+     * the help page.
+     * 
+     * @return The name of the help file or null if this activeFetcher does not have
+     *         any help.
+     */
+    public String getHelpPage();
+
+    /**
+     * If this activeFetcher requires additional options, a panel for setting up these
+     * should be returned in a JPanel by this method. This JPanel will be added
+     * to the side pane component automatically.
+     * 
+     * @return Options panel for this activeFetcher or null if this activeFetcher does not
+     *         have any options.
+     */
+    public JPanel getOptionsPanel();
+}
diff --git a/src/java/net/sf/jabref/imports/EntryFromExternalFileCreator.java b/src/java/net/sf/jabref/imports/EntryFromExternalFileCreator.java
index b73cc56..a351d62 100644
--- a/src/java/net/sf/jabref/imports/EntryFromExternalFileCreator.java
+++ b/src/java/net/sf/jabref/imports/EntryFromExternalFileCreator.java
@@ -1,37 +1,37 @@
-package net.sf.jabref.imports;
-
-import java.io.File;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.external.ExternalFileType;
-
-/** EntryCreator for any predefined ExternalFileType.
- * This Creator accepts all files with the extension defined in the ExternalFileType.
-*/
-public class EntryFromExternalFileCreator extends EntryFromFileCreator {
-
-	
-	public EntryFromExternalFileCreator(ExternalFileType externalFileType) {
-		super(externalFileType);
-	}
-
-	@Override
-	public boolean accept(File f) {
-		return f.getName().endsWith("." + externalFileType.getExtension());
-	}
-
-	@Override
-	protected BibtexEntry createBibtexEntry(File file) {
-		if (!accept(file)) {
-			return null;
-		}
-		BibtexEntry entry = new BibtexEntry();
-
-		return entry;
-	}
-
-	@Override
-	public String getFormatName() {
-		return externalFileType.getName();
-	}
-}
+package net.sf.jabref.imports;
+
+import java.io.File;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.external.ExternalFileType;
+
+/** EntryCreator for any predefined ExternalFileType.
+ * This Creator accepts all files with the extension defined in the ExternalFileType.
+*/
+public class EntryFromExternalFileCreator extends EntryFromFileCreator {
+
+	
+	public EntryFromExternalFileCreator(ExternalFileType externalFileType) {
+		super(externalFileType);
+	}
+
+	@Override
+	public boolean accept(File f) {
+		return f.getName().endsWith("." + externalFileType.getExtension());
+	}
+
+	@Override
+	protected BibtexEntry createBibtexEntry(File file) {
+		if (!accept(file)) {
+			return null;
+		}
+		BibtexEntry entry = new BibtexEntry();
+
+		return entry;
+	}
+
+	@Override
+	public String getFormatName() {
+		return externalFileType.getName();
+	}
+}
diff --git a/src/java/net/sf/jabref/imports/EntryFromFileCreator.java b/src/java/net/sf/jabref/imports/EntryFromFileCreator.java
index 31116ed..1818f42 100644
--- a/src/java/net/sf/jabref/imports/EntryFromFileCreator.java
+++ b/src/java/net/sf/jabref/imports/EntryFromFileCreator.java
@@ -1,185 +1,185 @@
-package net.sf.jabref.imports;
-
-import java.io.File;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.JabRef;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.Util;
-import net.sf.jabref.external.ExternalFileType;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.gui.FileListTableModel;
-
-/**
- * The interface EntryFromFileCreator does twice: <br>
- * On the one hand, it defines a set of files, which it can deal with, on the
- * other hand it provides the functionality to create a Bibtex entry out of a
- * file. The interface extends the java.io.FileFilter to inherit a common way of
- * defining file sets.
- * 
- * @author Dan&Nosh
- * @version 25.11.2008 | 23:39:03
- * 
- */
-public abstract class EntryFromFileCreator implements java.io.FileFilter {
-
-	ExternalFileType externalFileType;
-
-	/**
-	 * Constructor. <br>
-	 * Forces subclasses to provide an {@link ExternalFileType} instance, which
-	 * they build on.
-	 * 
-	 * @param externalFileType
-	 */
-	public EntryFromFileCreator(ExternalFileType externalFileType) {
-		this.externalFileType = externalFileType;
-	}
-
-	protected abstract BibtexEntry createBibtexEntry(File f);
-
-	/**
-	 * <p>
-	 * To support platform independence, a creator must define what types of
-	 * files it accepts on it's own.
-	 * </p>
-	 * <p>
-	 * Basically, accepting files which end with the file extension that is
-	 * described in the nested {@link #externalFileType} would work on windows
-	 * systems. This is also the recommended criterion, on which files should be
-	 * accepted.
-	 * </p>
-	 * <p>
-	 * However, defining what types of files this creator accepts, is a property
-	 * of <i>entry creators</i>, that is left to the user.
-	 * </p>
-	 */
-	public abstract boolean accept(File f);
-
-	/**
-	 * Name of this import format.
-	 * 
-	 * <p>
-	 * The name must be unique.
-	 * </p>
-	 * 
-	 * @return format name, must be unique and not <code>null</code>
-	 */
-	public abstract String getFormatName();
-
-	/**
-	 * Create one BibtexEntry containing information regarding the given File.
-	 * 
-	 * @param f
-	 * @param addPathTokensAsKeywords
-	 * @return
-	 */
-	public BibtexEntry createEntry(File f, boolean addPathTokensAsKeywords) {
-		if (f == null || !f.exists()) {
-			return null;
-		}
-		BibtexEntry newEntry = createBibtexEntry(f);
-		
-		if(newEntry == null) {
-			return null;
-		}
-		
-		if (addPathTokensAsKeywords) {
-			appendToField(newEntry, "keywords", extractPathesToKeyWordsfield(f.getAbsolutePath()));
-		}
-
-		if (newEntry.getField("title") == null) {
-			newEntry.setField("title", f.getName());
-		}
-
-		addFileInfo(newEntry, f);
-		return newEntry;
-	}
-
-	/** Returns the ExternalFileType that is imported here */
-	public ExternalFileType getExternalFileType() {
-		return externalFileType;
-	}
-
-	/**
-	 * Splits the path to the file and builds a keywords String in the format
-	 * that is used by Jabref.
-	 * 
-	 * @param absolutePath
-	 * @return
-	 */
-	private String extractPathesToKeyWordsfield(String absolutePath) {
-		final int MIN_PATH_TOKEN_LENGTH = 4;
-		StringBuilder sb = new StringBuilder();
-		StringTokenizer st = new StringTokenizer(absolutePath, "" + File.separatorChar);
-		while (st.hasMoreTokens()) {
-			String token = st.nextToken();
-			if (!st.hasMoreTokens()) {
-				// ignore last token. The filename ist not wanted as keyword.
-				break;
-			}
-			if (token.length() >= MIN_PATH_TOKEN_LENGTH) {
-				if (sb.length() > 0) {
-					// TODO: find Jabref constant for delimter
-					sb.append(",");
-				}
-				sb.append(token);
-			}
-		}
-		return sb.toString();
-	}
-
-	protected void addFileInfo(BibtexEntry entry, File file) {
-		JabRefPreferences jabRefPreferences = JabRefPreferences.getInstance();
-		ExternalFileType fileType = jabRefPreferences.getExternalFileTypeByExt(externalFileType.getFieldName());
-		
-		String[] possibleFilePaths = JabRef.jrf.basePanel().metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
-		File shortenedFileName = Util.shortenFileName(file, possibleFilePaths);
-		FileListEntry fileListEntry = new FileListEntry("", shortenedFileName.getPath(), fileType);
-
-		FileListTableModel model = new FileListTableModel();
-		model.addEntry(0, fileListEntry);
-
-		entry.setField("file", model.getStringRepresentation());
-	}
-
-	protected void appendToField(BibtexEntry entry, String field, String value) {
-		if (value == null || "".equals(value))
-			return;
-		String oVal = entry.getField(field);
-		if (oVal == null) {
-			entry.setField(field, value);
-		} else {
-			// TODO: find Jabref constant for delimter
-			if (!oVal.contains(value)) {
-				entry.setField(field, oVal + "," + value);
-			}
-
-		}
-	}
-
-	protected void addEntrysToEntry(BibtexEntry entry, List<BibtexEntry> entrys) {
-		if (entrys != null) {
-			for (BibtexEntry e : entrys) {
-				addEntryDataToEntry(entry, e);
-			}
-		}
-	}
-
-	protected void addEntryDataToEntry(BibtexEntry entry, BibtexEntry e) {
-		for (String field : e.getAllFields()) {
-			appendToField(entry, field, e.getField(field));
-		}
-	}
-
-	public String toString() {
-		if (externalFileType == null) {
-			return "(undefined)";
-		}
-		return externalFileType.getName() + " (." + externalFileType.getExtension() + ")";
-	}
-
-}
+package net.sf.jabref.imports;
+
+import java.io.File;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.Util;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileListTableModel;
+
+/**
+ * The interface EntryFromFileCreator does twice: <br>
+ * On the one hand, it defines a set of files, which it can deal with, on the
+ * other hand it provides the functionality to create a Bibtex entry out of a
+ * file. The interface extends the java.io.FileFilter to inherit a common way of
+ * defining file sets.
+ * 
+ * @author Dan&Nosh
+ * @version 25.11.2008 | 23:39:03
+ * 
+ */
+public abstract class EntryFromFileCreator implements java.io.FileFilter {
+
+	ExternalFileType externalFileType;
+
+	/**
+	 * Constructor. <br>
+	 * Forces subclasses to provide an {@link ExternalFileType} instance, which
+	 * they build on.
+	 * 
+	 * @param externalFileType
+	 */
+	public EntryFromFileCreator(ExternalFileType externalFileType) {
+		this.externalFileType = externalFileType;
+	}
+
+	protected abstract BibtexEntry createBibtexEntry(File f);
+
+	/**
+	 * <p>
+	 * To support platform independence, a creator must define what types of
+	 * files it accepts on it's own.
+	 * </p>
+	 * <p>
+	 * Basically, accepting files which end with the file extension that is
+	 * described in the nested {@link #externalFileType} would work on windows
+	 * systems. This is also the recommended criterion, on which files should be
+	 * accepted.
+	 * </p>
+	 * <p>
+	 * However, defining what types of files this creator accepts, is a property
+	 * of <i>entry creators</i>, that is left to the user.
+	 * </p>
+	 */
+	public abstract boolean accept(File f);
+
+	/**
+	 * Name of this import format.
+	 * 
+	 * <p>
+	 * The name must be unique.
+	 * </p>
+	 * 
+	 * @return format name, must be unique and not <code>null</code>
+	 */
+	public abstract String getFormatName();
+
+	/**
+	 * Create one BibtexEntry containing information regarding the given File.
+	 * 
+	 * @param f
+	 * @param addPathTokensAsKeywords
+	 * @return
+	 */
+	public BibtexEntry createEntry(File f, boolean addPathTokensAsKeywords) {
+		if (f == null || !f.exists()) {
+			return null;
+		}
+		BibtexEntry newEntry = createBibtexEntry(f);
+		
+		if(newEntry == null) {
+			return null;
+		}
+		
+		if (addPathTokensAsKeywords) {
+			appendToField(newEntry, "keywords", extractPathesToKeyWordsfield(f.getAbsolutePath()));
+		}
+
+		if (newEntry.getField("title") == null) {
+			newEntry.setField("title", f.getName());
+		}
+
+		addFileInfo(newEntry, f);
+		return newEntry;
+	}
+
+	/** Returns the ExternalFileType that is imported here */
+	public ExternalFileType getExternalFileType() {
+		return externalFileType;
+	}
+
+	/**
+	 * Splits the path to the file and builds a keywords String in the format
+	 * that is used by Jabref.
+	 * 
+	 * @param absolutePath
+	 * @return
+	 */
+	private String extractPathesToKeyWordsfield(String absolutePath) {
+		final int MIN_PATH_TOKEN_LENGTH = 4;
+		StringBuilder sb = new StringBuilder();
+		StringTokenizer st = new StringTokenizer(absolutePath, "" + File.separatorChar);
+		while (st.hasMoreTokens()) {
+			String token = st.nextToken();
+			if (!st.hasMoreTokens()) {
+				// ignore last token. The filename ist not wanted as keyword.
+				break;
+			}
+			if (token.length() >= MIN_PATH_TOKEN_LENGTH) {
+				if (sb.length() > 0) {
+					// TODO: find Jabref constant for delimter
+					sb.append(",");
+				}
+				sb.append(token);
+			}
+		}
+		return sb.toString();
+	}
+
+	protected void addFileInfo(BibtexEntry entry, File file) {
+		JabRefPreferences jabRefPreferences = JabRefPreferences.getInstance();
+		ExternalFileType fileType = jabRefPreferences.getExternalFileTypeByExt(externalFileType.getFieldName());
+		
+		String[] possibleFilePaths = JabRef.jrf.basePanel().metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+		File shortenedFileName = Util.shortenFileName(file, possibleFilePaths);
+		FileListEntry fileListEntry = new FileListEntry("", shortenedFileName.getPath(), fileType);
+
+		FileListTableModel model = new FileListTableModel();
+		model.addEntry(0, fileListEntry);
+
+		entry.setField("file", model.getStringRepresentation());
+	}
+
+	protected void appendToField(BibtexEntry entry, String field, String value) {
+		if (value == null || "".equals(value))
+			return;
+		String oVal = entry.getField(field);
+		if (oVal == null) {
+			entry.setField(field, value);
+		} else {
+			// TODO: find Jabref constant for delimter
+			if (!oVal.contains(value)) {
+				entry.setField(field, oVal + "," + value);
+			}
+
+		}
+	}
+
+	protected void addEntrysToEntry(BibtexEntry entry, List<BibtexEntry> entrys) {
+		if (entrys != null) {
+			for (BibtexEntry e : entrys) {
+				addEntryDataToEntry(entry, e);
+			}
+		}
+	}
+
+	protected void addEntryDataToEntry(BibtexEntry entry, BibtexEntry e) {
+		for (String field : e.getAllFields()) {
+			appendToField(entry, field, e.getField(field));
+		}
+	}
+
+	public String toString() {
+		if (externalFileType == null) {
+			return "(undefined)";
+		}
+		return externalFileType.getName() + " (." + externalFileType.getExtension() + ")";
+	}
+
+}
diff --git a/src/java/net/sf/jabref/imports/EntryFromFileCreatorManager.java b/src/java/net/sf/jabref/imports/EntryFromFileCreatorManager.java
index ffc4d29..30b1de4 100644
--- a/src/java/net/sf/jabref/imports/EntryFromFileCreatorManager.java
+++ b/src/java/net/sf/jabref/imports/EntryFromFileCreatorManager.java
@@ -1,221 +1,221 @@
-package net.sf.jabref.imports;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.undo.CompoundEdit;
-import javax.swing.undo.UndoManager;
-
-import net.sf.jabref.*;
-import net.sf.jabref.external.ExternalFileType;
-import net.sf.jabref.undo.UndoableInsertEntry;
-
-/**
- * The class EntryFromFileCreatorManager manages entry creators. 
- * The manager knows all existing implementations of the interface EntryFromFileCreator. 
- * Given a file, the manager can then provide a creator, which is able to create a Bibtex entry for his file. 
- * Knowing all implementations of the interface, the manager also knows the set of all files, of which Bibtex entries can be created. 
- * The GUI uses this capability for offering the user only such files, of which entries could actually be created.
- * @author Dan&Nosh
- *
- */
-public final class EntryFromFileCreatorManager {
-
-	
-	private List<EntryFromFileCreator> entryCreators;
-
-	
-	
-	public EntryFromFileCreatorManager() {
-		
-		entryCreators = new ArrayList<EntryFromFileCreator>(10);
-		entryCreators.add(new EntryFromPDFCreator());
-		
-		// add a creator for each ExternalFileType if there is no specialised
-		// creator existing.
-        ExternalFileType[] fileTypes = JabRefPreferences.getInstance().getExternalFileTypeSelection();
-         
-		for (ExternalFileType exFileType : fileTypes) {
-			if (!hasSpecialisedCreatorForExternalFileType(exFileType)) {
-				entryCreators.add(new EntryFromExternalFileCreator(exFileType));
-			}
-		}
-	}
-
-	
-	private boolean hasSpecialisedCreatorForExternalFileType(
-			ExternalFileType externalFileType) {
-		for (EntryFromFileCreator entryCreator : entryCreators) {
-			if (entryCreator.getExternalFileType() == null || entryCreator.getExternalFileType().getExtension() == null) {
-				continue;
-			}
-			if (entryCreator.getExternalFileType().getExtension().equals(
-					externalFileType.getExtension())) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-
-	/**
-	 * Returns a EntryFromFileCreator object that is capable of creating a
-	 * BibtexEntry for the given File.
-	 * 
-	 * @param pdfFile
-	 * @return null if there is no EntryFromFileCreator for this File.
-	 */
-	public EntryFromFileCreator getEntryCreator(File file) {
-		if (file == null || !file.exists()) {
-			return null;
-		}
-		for (EntryFromFileCreator creator : entryCreators) {
-			if (creator.accept(file)) {
-				return creator;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Trys to add a entry for each file in the List.
-	 * 
-	 * @param files
-	 * @param database
-	 * @param entryType
-	 * @return List of unexcpected import event messages including failures.
-	 */
-	public List<String> addEntrysFromFiles(List<File> files,
-			BibtexDatabase database, BibtexEntryType entryType,
-			boolean generateKeywordsFromPathToFile) {
-        List<String> importGUIMessages = new LinkedList<String>();
-		addEntrysFromFiles(files, database, null, entryType,
-				generateKeywordsFromPathToFile, null, importGUIMessages);
-        return importGUIMessages;
-	}
-
-	/**
-	 * Tries to add a entry for each file in the List.
-	 * 
-	 * @param files
-     * @param database
-     * @param panel
-	 * @param entryType
-	 * @param generateKeywordsFromPathToFile
-	 * @param changeListener
-     * @param importGUIMessages list of unexpected import event - Messages including
-     	 *         failures
-	 * @return Returns The number of entries added
-	 */
-	public int addEntrysFromFiles(List<File> files,
-			BibtexDatabase database, BasePanel panel, BibtexEntryType entryType,
-			boolean generateKeywordsFromPathToFile,
-			ChangeListener changeListener, List<String> importGUIMessages) {
-
-        int count = 0;
-        CompoundEdit ce = new CompoundEdit();
-		for (File f : files) {
-			EntryFromFileCreator creator = getEntryCreator(f);
-			if (creator != null) {
-				BibtexEntry entry = creator.createEntry(f,
-						generateKeywordsFromPathToFile);
-				if (entry == null) {
-					importGUIMessages.add("Problem importing " + f.getPath()
-							+ ": Entry could not be created.");
-					continue;
-				}
-				if (entryType != null) {
-					entry.setType(entryType);
-				}
-				if (entry.getId() == null) {
-					entry.setId(Util.createNeutralId());
-				}
-				/*
-				 * TODO: database.insertEntry(BibtexEntry) is not sensible. Why
-				 * does 'true' mean "There were duplicates", while 'false' means
-				 * "Everything alright"?
-				 */
-				if (database.insertEntry(entry)) {
-					importGUIMessages.add("Problem importing " + f.getPath()
-							+ ": Insert into BibtexDatabase failed.");
-				}
-                else {
-                    count++;
-                    if (panel != null)
-                        ce.addEdit(new UndoableInsertEntry(database, entry, panel));
-                }
-			} else {
-				importGUIMessages.add("Problem importing " + f.getPath()
-						+ ": Unknown filetype.");
-			}
-
-			if (changeListener != null)
-				changeListener.stateChanged(new ChangeEvent(this));
-		}
-
-        System.out.println("count = "+count);
-        if ((count > 0) && (panel != null)) {
-            System.out.println("adding edit");
-            ce.end();
-            panel.undoManager.addEdit(ce);
-        }
-		return count;
-
-	}
-
-	/**
-	 * Returns a {@link FileFilter} instance which will accept all files, for
-	 * which a {@link EntryFromFileCreator} exists, that accepts the files. <br>
-	 * <br>
-	 * This {@link FileFilter} will be displayed in the GUI as
-	 * "All supported files".
-	 * 
-	 * @return A {@link FileFilter} that accepts all files for which creators
-	 *         exist.
-	 */
-	public FileFilter getFileFilter() {
-		return new FileFilter() {
-
-			/**
-			 * Accepts all files, which are accepted by any known creator.
-			 */
-			public boolean accept(File file) {
-				for (EntryFromFileCreator creator : entryCreators) {
-					if (creator.accept(file)) {
-						return true;
-					}
-				}
-				return false;
-			}
-
-			@Override
-			public String toString() {
-				return "All external files";
-			}
-		};
-	}
-
-	/**
-	 * Returns a list of all {@link FileFilter} instances (i.e.
-	 * {@link EntryFromFileCreator}, plus the file filter that comes with the
-	 * {@link #getFileFilter()} method, plus the {@link EntryFromAnyFileCreator}
-	 * file filter.
-	 * 
-	 * @return A List of all known possible file filters.
-	 */
-	public List<FileFilter> getFileFilterList() {
-		
-
-		List<FileFilter> filters = new ArrayList<FileFilter>();
-		filters.add(getFileFilter());
-		for (FileFilter creator : entryCreators) {
-			filters.add(creator);
-		}
-		return filters;
-	}
-}
+package net.sf.jabref.imports;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.undo.CompoundEdit;
+import javax.swing.undo.UndoManager;
+
+import net.sf.jabref.*;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.undo.UndoableInsertEntry;
+
+/**
+ * The class EntryFromFileCreatorManager manages entry creators. 
+ * The manager knows all existing implementations of the interface EntryFromFileCreator. 
+ * Given a file, the manager can then provide a creator, which is able to create a Bibtex entry for his file. 
+ * Knowing all implementations of the interface, the manager also knows the set of all files, of which Bibtex entries can be created. 
+ * The GUI uses this capability for offering the user only such files, of which entries could actually be created.
+ * @author Dan&Nosh
+ *
+ */
+public final class EntryFromFileCreatorManager {
+
+	
+	private List<EntryFromFileCreator> entryCreators;
+
+	
+	
+	public EntryFromFileCreatorManager() {
+		
+		entryCreators = new ArrayList<EntryFromFileCreator>(10);
+		entryCreators.add(new EntryFromPDFCreator());
+		
+		// add a creator for each ExternalFileType if there is no specialised
+		// creator existing.
+        ExternalFileType[] fileTypes = JabRefPreferences.getInstance().getExternalFileTypeSelection();
+         
+		for (ExternalFileType exFileType : fileTypes) {
+			if (!hasSpecialisedCreatorForExternalFileType(exFileType)) {
+				entryCreators.add(new EntryFromExternalFileCreator(exFileType));
+			}
+		}
+	}
+
+	
+	private boolean hasSpecialisedCreatorForExternalFileType(
+			ExternalFileType externalFileType) {
+		for (EntryFromFileCreator entryCreator : entryCreators) {
+			if (entryCreator.getExternalFileType() == null || entryCreator.getExternalFileType().getExtension() == null) {
+				continue;
+			}
+			if (entryCreator.getExternalFileType().getExtension().equals(
+					externalFileType.getExtension())) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+
+	/**
+	 * Returns a EntryFromFileCreator object that is capable of creating a
+	 * BibtexEntry for the given File.
+	 * 
+	 * @param pdfFile
+	 * @return null if there is no EntryFromFileCreator for this File.
+	 */
+	public EntryFromFileCreator getEntryCreator(File file) {
+		if (file == null || !file.exists()) {
+			return null;
+		}
+		for (EntryFromFileCreator creator : entryCreators) {
+			if (creator.accept(file)) {
+				return creator;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Trys to add a entry for each file in the List.
+	 * 
+	 * @param files
+	 * @param database
+	 * @param entryType
+	 * @return List of unexcpected import event messages including failures.
+	 */
+	public List<String> addEntrysFromFiles(List<File> files,
+			BibtexDatabase database, BibtexEntryType entryType,
+			boolean generateKeywordsFromPathToFile) {
+        List<String> importGUIMessages = new LinkedList<String>();
+		addEntrysFromFiles(files, database, null, entryType,
+				generateKeywordsFromPathToFile, null, importGUIMessages);
+        return importGUIMessages;
+	}
+
+	/**
+	 * Tries to add a entry for each file in the List.
+	 * 
+	 * @param files
+     * @param database
+     * @param panel
+	 * @param entryType
+	 * @param generateKeywordsFromPathToFile
+	 * @param changeListener
+     * @param importGUIMessages list of unexpected import event - Messages including
+     	 *         failures
+	 * @return Returns The number of entries added
+	 */
+	public int addEntrysFromFiles(List<File> files,
+			BibtexDatabase database, BasePanel panel, BibtexEntryType entryType,
+			boolean generateKeywordsFromPathToFile,
+			ChangeListener changeListener, List<String> importGUIMessages) {
+
+        int count = 0;
+        CompoundEdit ce = new CompoundEdit();
+		for (File f : files) {
+			EntryFromFileCreator creator = getEntryCreator(f);
+			if (creator != null) {
+				BibtexEntry entry = creator.createEntry(f,
+						generateKeywordsFromPathToFile);
+				if (entry == null) {
+					importGUIMessages.add("Problem importing " + f.getPath()
+							+ ": Entry could not be created.");
+					continue;
+				}
+				if (entryType != null) {
+					entry.setType(entryType);
+				}
+				if (entry.getId() == null) {
+					entry.setId(Util.createNeutralId());
+				}
+				/*
+				 * TODO: database.insertEntry(BibtexEntry) is not sensible. Why
+				 * does 'true' mean "There were duplicates", while 'false' means
+				 * "Everything alright"?
+				 */
+				if (database.insertEntry(entry)) {
+					importGUIMessages.add("Problem importing " + f.getPath()
+							+ ": Insert into BibtexDatabase failed.");
+				}
+                else {
+                    count++;
+                    if (panel != null)
+                        ce.addEdit(new UndoableInsertEntry(database, entry, panel));
+                }
+			} else {
+				importGUIMessages.add("Problem importing " + f.getPath()
+						+ ": Unknown filetype.");
+			}
+
+			if (changeListener != null)
+				changeListener.stateChanged(new ChangeEvent(this));
+		}
+
+        System.out.println("count = "+count);
+        if ((count > 0) && (panel != null)) {
+            System.out.println("adding edit");
+            ce.end();
+            panel.undoManager.addEdit(ce);
+        }
+		return count;
+
+	}
+
+	/**
+	 * Returns a {@link FileFilter} instance which will accept all files, for
+	 * which a {@link EntryFromFileCreator} exists, that accepts the files. <br>
+	 * <br>
+	 * This {@link FileFilter} will be displayed in the GUI as
+	 * "All supported files".
+	 * 
+	 * @return A {@link FileFilter} that accepts all files for which creators
+	 *         exist.
+	 */
+	public FileFilter getFileFilter() {
+		return new FileFilter() {
+
+			/**
+			 * Accepts all files, which are accepted by any known creator.
+			 */
+			public boolean accept(File file) {
+				for (EntryFromFileCreator creator : entryCreators) {
+					if (creator.accept(file)) {
+						return true;
+					}
+				}
+				return false;
+			}
+
+			@Override
+			public String toString() {
+				return "All external files";
+			}
+		};
+	}
+
+	/**
+	 * Returns a list of all {@link FileFilter} instances (i.e.
+	 * {@link EntryFromFileCreator}, plus the file filter that comes with the
+	 * {@link #getFileFilter()} method, plus the {@link EntryFromAnyFileCreator}
+	 * file filter.
+	 * 
+	 * @return A List of all known possible file filters.
+	 */
+	public List<FileFilter> getFileFilterList() {
+		
+
+		List<FileFilter> filters = new ArrayList<FileFilter>();
+		filters.add(getFileFilter());
+		for (FileFilter creator : entryCreators) {
+			filters.add(creator);
+		}
+		return filters;
+	}
+}
diff --git a/src/java/net/sf/jabref/imports/EntryFromPDFCreator.java b/src/java/net/sf/jabref/imports/EntryFromPDFCreator.java
index cb2aa8c..07e1284 100644
--- a/src/java/net/sf/jabref/imports/EntryFromPDFCreator.java
+++ b/src/java/net/sf/jabref/imports/EntryFromPDFCreator.java
@@ -1,163 +1,163 @@
-package net.sf.jabref.imports;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.pdmodel.PDDocumentInformation;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.OutputPrinterToNull;
-import net.sf.jabref.external.ExternalFileType;
-import net.sf.jabref.util.EncryptionNotSupportedException;
-import net.sf.jabref.util.XMPUtil;
-
-/**
- * Uses XMPUtils to get one BibtexEntry for a PDF-File. 
- * Also imports the non-XMP Data (PDDocument-Information) using XMPUtil.getBibtexEntryFromDocumentInformation.
- * If data from more than one entry is read by XMPUtil then this entys are merged into one.  
- * @author Dan
- * @version 12.11.2008 | 22:12:48
- * 
- */
-public class EntryFromPDFCreator extends EntryFromFileCreator {
-
-	private static Logger logger = Logger.getLogger(EntryFromPDFCreator.class.getName());
-	
-	public EntryFromPDFCreator() {
-		super(getPDFExternalFileType());
-	}
-	
-	private static ExternalFileType getPDFExternalFileType(){
-		ExternalFileType pdfFileType = JabRefPreferences.getInstance().getExternalFileTypeByExt("pdf");
-		if (pdfFileType==null){
-			return new ExternalFileType("PDF", "pdf", "application/pdf", "evince", "pdfSmall");
-		}
-		return pdfFileType;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see net.sf.jabref.imports.EntryFromFileCreator#accept(java.io.File)
-	 * 
-	 * Accepts all Files having as suffix ".PDF" (in ignore case mode).
-	 */
-	@Override
-	public boolean accept(File f) {
-		return f != null && f.getName().toUpperCase().endsWith(".PDF");
-	}
-
-	@Override
-	protected BibtexEntry createBibtexEntry(File pdfFile) {
-
-		if (!accept(pdfFile)) {
-			return null;
-		}
-
-		BibtexEntry entry = new BibtexEntry();
-
-		// Read pdf specific metadata
-		// use PdfContentImporter
-		PdfContentImporter pci = new PdfContentImporter();
-		try {
-			ArrayList<BibtexEntry> list =  (ArrayList<BibtexEntry>) pci.importEntries(new FileInputStream(pdfFile), new OutputPrinterToNull());
-			// there should only be one entry in the arraylist
-			if(list != null && !list.isEmpty()) {
-				return list.iterator().next();
-			}
-		} catch (FileNotFoundException e) {
-		    logger.log(Level.SEVERE, "File not found", e);
-		} catch (IOException e) {
-            logger.log(Level.SEVERE, "Error opening file", e);
-		}
-		
-		return null;
-		
-		/*addEntryDataFromPDDocumentInformation(pdfFile, entry);
-		addEntyDataFromXMP(pdfFile, entry);
-
-		if (entry.getField("title") == null) {
-			entry.setField("title", pdfFile.getName());
-		}
-
-		return entry;*/
-	}
-
-	/** Adds entry data read from the PDDocument information of the file.
-	 * @param pdfFile
-	 * @param entry
-	 */
-	private void addEntryDataFromPDDocumentInformation(File pdfFile, BibtexEntry entry) {
-		PDDocument document = null;
-		try {
-			document = PDDocument.load(pdfFile.getAbsoluteFile());
-			PDDocumentInformation pdfDocInfo = document
-					.getDocumentInformation();
-			
-			if (pdfDocInfo!=null){
-				BibtexEntry entryDI = XMPUtil.getBibtexEntryFromDocumentInformation(document
-						.getDocumentInformation());
-				if (entryDI!=null){
-					addEntryDataToEntry(entry,entryDI);
-					Calendar creationDate = pdfDocInfo.getCreationDate();
-					if (creationDate != null) {
-						String date = new SimpleDateFormat("yyyy.MM.dd")
-								.format(creationDate.getTime());
-						appendToField(entry, "timestamp", date.toString());
-					}
-		
-					if (pdfDocInfo.getCustomMetadataValue("bibtex/bibtexkey") != null){
-						entry.setId(pdfDocInfo
-								.getCustomMetadataValue("bibtex/bibtexkey"));
-					}
-				}
-			}
-		} catch (IOException e) {
-			// no canceling here, just no data added.
-		} finally {
-			if (document != null) {
-				try {
-					document.close();
-				} catch (IOException e) {
-					// no canceling here, just no data added.
-				}
-			}
-		}
-	}
-
-	/**
-	 * Adds all data Found in all the entrys of this XMP file to the given
-	 * entry. This was implemented without having much knowledge of the XMP
-	 * format.
-	 * 
-	 * @param aFile
-	 * @param entry
-	 */
-	private void addEntyDataFromXMP(File aFile, BibtexEntry entry) {
-		try {
-			List<BibtexEntry> entrys = XMPUtil.readXMP(aFile.getAbsoluteFile());
-			addEntrysToEntry(entry, entrys);
-		} catch (EncryptionNotSupportedException e) {
-			// no canceling here, just no data added.
-		} catch (IOException e) {
-			// no canceling here, just no data added.
-		}
-	}
-
-	@Override
-	public String getFormatName() {
-		return "PDF";
-	}
-
-}
+package net.sf.jabref.imports;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDDocumentInformation;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.OutputPrinterToNull;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.util.EncryptionNotSupportedException;
+import net.sf.jabref.util.XMPUtil;
+
+/**
+ * Uses XMPUtils to get one BibtexEntry for a PDF-File. 
+ * Also imports the non-XMP Data (PDDocument-Information) using XMPUtil.getBibtexEntryFromDocumentInformation.
+ * If data from more than one entry is read by XMPUtil then this entys are merged into one.  
+ * @author Dan
+ * @version 12.11.2008 | 22:12:48
+ * 
+ */
+public class EntryFromPDFCreator extends EntryFromFileCreator {
+
+	private static Logger logger = Logger.getLogger(EntryFromPDFCreator.class.getName());
+	
+	public EntryFromPDFCreator() {
+		super(getPDFExternalFileType());
+	}
+	
+	private static ExternalFileType getPDFExternalFileType(){
+		ExternalFileType pdfFileType = JabRefPreferences.getInstance().getExternalFileTypeByExt("pdf");
+		if (pdfFileType==null){
+			return new ExternalFileType("PDF", "pdf", "application/pdf", "evince", "pdfSmall");
+		}
+		return pdfFileType;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see net.sf.jabref.imports.EntryFromFileCreator#accept(java.io.File)
+	 * 
+	 * Accepts all Files having as suffix ".PDF" (in ignore case mode).
+	 */
+	@Override
+	public boolean accept(File f) {
+		return f != null && f.getName().toUpperCase().endsWith(".PDF");
+	}
+
+	@Override
+	protected BibtexEntry createBibtexEntry(File pdfFile) {
+
+		if (!accept(pdfFile)) {
+			return null;
+		}
+
+		BibtexEntry entry = new BibtexEntry();
+
+		// Read pdf specific metadata
+		// use PdfContentImporter
+		PdfContentImporter pci = new PdfContentImporter();
+		try {
+			ArrayList<BibtexEntry> list =  (ArrayList<BibtexEntry>) pci.importEntries(new FileInputStream(pdfFile), new OutputPrinterToNull());
+			// there should only be one entry in the arraylist
+			if(list != null && !list.isEmpty()) {
+				return list.iterator().next();
+			}
+		} catch (FileNotFoundException e) {
+		    logger.log(Level.SEVERE, "File not found", e);
+		} catch (IOException e) {
+            logger.log(Level.SEVERE, "Error opening file", e);
+		}
+		
+		return null;
+		
+		/*addEntryDataFromPDDocumentInformation(pdfFile, entry);
+		addEntyDataFromXMP(pdfFile, entry);
+
+		if (entry.getField("title") == null) {
+			entry.setField("title", pdfFile.getName());
+		}
+
+		return entry;*/
+	}
+
+	/** Adds entry data read from the PDDocument information of the file.
+	 * @param pdfFile
+	 * @param entry
+	 */
+	private void addEntryDataFromPDDocumentInformation(File pdfFile, BibtexEntry entry) {
+		PDDocument document = null;
+		try {
+			document = PDDocument.load(pdfFile.getAbsoluteFile());
+			PDDocumentInformation pdfDocInfo = document
+					.getDocumentInformation();
+			
+			if (pdfDocInfo!=null){
+				BibtexEntry entryDI = XMPUtil.getBibtexEntryFromDocumentInformation(document
+						.getDocumentInformation());
+				if (entryDI!=null){
+					addEntryDataToEntry(entry,entryDI);
+					Calendar creationDate = pdfDocInfo.getCreationDate();
+					if (creationDate != null) {
+						String date = new SimpleDateFormat("yyyy.MM.dd")
+								.format(creationDate.getTime());
+						appendToField(entry, "timestamp", date.toString());
+					}
+		
+					if (pdfDocInfo.getCustomMetadataValue("bibtex/bibtexkey") != null){
+						entry.setId(pdfDocInfo
+								.getCustomMetadataValue("bibtex/bibtexkey"));
+					}
+				}
+			}
+		} catch (IOException e) {
+			// no canceling here, just no data added.
+		} finally {
+			if (document != null) {
+				try {
+					document.close();
+				} catch (IOException e) {
+					// no canceling here, just no data added.
+				}
+			}
+		}
+	}
+
+	/**
+	 * Adds all data Found in all the entrys of this XMP file to the given
+	 * entry. This was implemented without having much knowledge of the XMP
+	 * format.
+	 * 
+	 * @param aFile
+	 * @param entry
+	 */
+	private void addEntyDataFromXMP(File aFile, BibtexEntry entry) {
+		try {
+			List<BibtexEntry> entrys = XMPUtil.readXMP(aFile.getAbsoluteFile());
+			addEntrysToEntry(entry, entrys);
+		} catch (EncryptionNotSupportedException e) {
+			// no canceling here, just no data added.
+		} catch (IOException e) {
+			// no canceling here, just no data added.
+		}
+	}
+
+	@Override
+	public String getFormatName() {
+		return "PDF";
+	}
+
+}
diff --git a/src/java/net/sf/jabref/imports/FieldContentParser.java b/src/java/net/sf/jabref/imports/FieldContentParser.java
index 49a6643..5157970 100644
--- a/src/java/net/sf/jabref/imports/FieldContentParser.java
+++ b/src/java/net/sf/jabref/imports/FieldContentParser.java
@@ -1,209 +1,209 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.GUIGlobals;
-
-
-/**
- * This class provides the reformatting needed when reading BibTeX fields formatted
- * in JabRef style. The reformatting must undo all formatting done by JabRef when
- * writing the same fields.
- */
-public class FieldContentParser {
-
-    /**
-     * Performs the reformatting
-     * @param content StringBuffer containing the field to format. key contains field name according to field
-     *  was edited by Kuehn/Havalevich
-     * @return The formatted field content. NOTE: the StringBuffer returned may
-     * or may not be the same as the argument given.
-     */
-	public StringBuffer format(StringBuffer content, String key) {
-
-        /*System.out.println("Content: '"+content+"'");
-        byte[] bt = content.toString().getBytes();
-        for (int i = 0; i < bt.length; i++) {
-            byte b = bt[i];
-            System.out.print(b+" ");
-        }
-        System.out.println("");
-        */
-        //boolean rep = false;
-
-        int i=0;
-
-        // Remove windows newlines and insert unix ones:
-        // TODO: 2005.12.3: Added replace from \r to \n, to work around a reported problem of words stiched together.
-        // But: we need to find out why these lone \r characters appear in his file.
-        content = new StringBuffer(content.toString().replaceAll("\r\n","\n").replaceAll("\r", "\n"));
-
-        while (i<content.length()) {
-
-            int c = content.charAt(i);
-            if (c == '\n') {
-                if ((content.length()>i+1) && (content.charAt(i+1)=='\t')
-                    && ((content.length()==i+2) || !Character.isWhitespace(content.charAt(i+2)))) {
-                    // We have either \n\t followed by non-whitespace, or \n\t at the
-                    // end. Bothe cases indicate a wrap made by JabRef. Remove and insert space if necessary.
-
-                    content.deleteCharAt(i); // \n
-                    content.deleteCharAt(i); // \t
-                    // Add space only if necessary:
-                    // Note 2007-05-26, mortenalver: the following line was modified. It previously
-                    // didn't add a space if the line break was at i==0. This caused some occurences of
-                    // "string1 # { and } # string2" constructs lose the space in front of the "and" because
-                    // the line wrap caused a JabRef linke break at the start of a value containing the " and ".
-                    // The bug was caused by a protective check for i>0 to avoid intexing char -1 in content.
-                    if ((i==0) || !Character.isWhitespace(content.charAt(i-1))) {
-                        content.insert(i, ' ');
-                        // Increment i because of the inserted character:
-                        i++;
-                    }
-                }
-                else if ((content.length()>i+3) && (content.charAt(i+1)=='\t')
-                    && (content.charAt(i+2)==' ')
-                    && !Character.isWhitespace(content.charAt(i+3))) {
-                    // We have \n\t followed by ' ' followed by non-whitespace, which indicates
-                    // a wrap made by JabRef <= 1.7.1. Remove:
-                    content.deleteCharAt(i); // \n
-                    content.deleteCharAt(i); // \t
-                    // Remove space only if necessary:
-                    if ((i>0) && Character.isWhitespace(content.charAt(i-1))) {
-                        content.deleteCharAt(i);
-                    }
-                }
-                else if ((content.length()>i+3) && (content.charAt(i+1)=='\t')
-                        && (content.charAt(i+2)=='\n') && (content.charAt(i+3)=='\t')) {
-                    // We have \n\t\n\t, which looks like a JabRef-formatted empty line.
-                    // Remove the tabs and keep one of the line breaks:
-                    content.deleteCharAt(i+1); // \t
-                    content.deleteCharAt(i+1); // \n
-                    content.deleteCharAt(i+1); // \t
-                    // Skip past the line breaks:
-                    i++;
-
-                    // Now, if more \n\t pairs are following, keep each line break. This
-                    // preserves several line breaks properly. Repeat until done:
-                    while ((content.length()>i+1) && (content.charAt(i)=='\n')
-                        && (content.charAt(i+1)=='\t')) {
-
-                        content.deleteCharAt(i+1);
-                        i++;
-                    }
-                }
-                else if ((content.length()>i+1) && (content.charAt(i+1)!='\n')) {
-                    // We have a line break not followed by another line break. This is probably a normal
-                    // line break made by whatever other editor, so we will remove the line break.
-                    content.deleteCharAt(i);
-                    // If the line break is not accompanied by other whitespace we must add a space:
-                    if (!Character.isWhitespace(content.charAt(i)) &&  // No whitespace after?
-                            (i>0) && !Character.isWhitespace(content.charAt(i-1))) // No whitespace before?
-                        content.insert(i, ' ');
-                }
-
-                //else if ((content.length()>i+1) && (content.charAt(i+1)=='\n'))
-                else
-                    i++;
-                //content.deleteCharAt(i);
-            }
-            else if (c == ' ') {
-                //if ((content.length()>i+2) && (content.charAt(i+1)==' ')) {
-                if ((i>0) && (content.charAt(i-1)==' ')) {
-                    // We have two spaces in a row. Don't include this one.
-                	
-                	// Yes, of course we have, but in Filenames it is nessary to have all spaces. :-)
-                	// This is the reason why the next lines are required
-                	if(key != null && key.equals(GUIGlobals.FILE_FIELD)){
-                		i++;
-                	}
-                	else
-                		content.deleteCharAt(i);
-                }
-                else
-                    i++;
-            } else if (c == '\t')
-                // Remove all tab characters that aren't associated with a line break.
-                content.deleteCharAt(i);
-            else
-                i++;
-
-        }
-        
-        return content;
-	}
-
-    /**
-     * Performs the reformatting
-     * @param content StringBuffer containing the field to format.
-     * @return The formatted field content. NOTE: the StringBuffer returned may
-     * or may not be the same as the argument given.
-     */
-    public StringBuffer format(StringBuffer content) { 
-    	return format(content, null);
-    }
-
-    /**
-     * Formats field contents for output. Must be "symmetric" with the parse method above,
-     * so stored and reloaded fields are not mangled.
-     * @param in
-     * @param wrapAmount
-     * @return the wrapped String.
-     */
-    public static String wrap(String in, int wrapAmount){
-        
-        String[] lines = in.split("\n");
-        StringBuffer res = new StringBuffer();
-        addWrappedLine(res, lines[0], wrapAmount);
-        for (int i=1; i<lines.length; i++) {
-
-            if (!lines[i].trim().equals("")) {
-                res.append(Globals.NEWLINE);
-                res.append('\t');
-                res.append(Globals.NEWLINE);
-                res.append('\t');
-                addWrappedLine(res, lines[i], wrapAmount);
-            } else {
-                res.append(Globals.NEWLINE);
-                res.append('\t');
-            }
-        }
-        return res.toString();
-    }
-
-    private static void addWrappedLine(StringBuffer res, String line, int wrapAmount) {
-        // Set our pointer to the beginning of the new line in the StringBuffer:
-        int p = res.length();
-        // Add the line, unmodified:
-        res.append(line);
-
-        while (p < res.length()){
-            int q = res.indexOf(" ", p+wrapAmount);
-            if ((q < 0) || (q >= res.length()))
-                break;
-
-            res.deleteCharAt(q);
-            res.insert(q, Globals.NEWLINE+"\t");
-            p = q+Globals.NEWLINE_LENGTH;
-
-        }
-    }
-
-    static class Indents {
-        //int hyp
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.GUIGlobals;
+
+
+/**
+ * This class provides the reformatting needed when reading BibTeX fields formatted
+ * in JabRef style. The reformatting must undo all formatting done by JabRef when
+ * writing the same fields.
+ */
+public class FieldContentParser {
+
+    /**
+     * Performs the reformatting
+     * @param content StringBuffer containing the field to format. key contains field name according to field
+     *  was edited by Kuehn/Havalevich
+     * @return The formatted field content. NOTE: the StringBuffer returned may
+     * or may not be the same as the argument given.
+     */
+	public StringBuffer format(StringBuffer content, String key) {
+
+        /*System.out.println("Content: '"+content+"'");
+        byte[] bt = content.toString().getBytes();
+        for (int i = 0; i < bt.length; i++) {
+            byte b = bt[i];
+            System.out.print(b+" ");
+        }
+        System.out.println("");
+        */
+        //boolean rep = false;
+
+        int i=0;
+
+        // Remove windows newlines and insert unix ones:
+        // TODO: 2005.12.3: Added replace from \r to \n, to work around a reported problem of words stiched together.
+        // But: we need to find out why these lone \r characters appear in his file.
+        content = new StringBuffer(content.toString().replaceAll("\r\n","\n").replaceAll("\r", "\n"));
+
+        while (i<content.length()) {
+
+            int c = content.charAt(i);
+            if (c == '\n') {
+                if ((content.length()>i+1) && (content.charAt(i+1)=='\t')
+                    && ((content.length()==i+2) || !Character.isWhitespace(content.charAt(i+2)))) {
+                    // We have either \n\t followed by non-whitespace, or \n\t at the
+                    // end. Bothe cases indicate a wrap made by JabRef. Remove and insert space if necessary.
+
+                    content.deleteCharAt(i); // \n
+                    content.deleteCharAt(i); // \t
+                    // Add space only if necessary:
+                    // Note 2007-05-26, mortenalver: the following line was modified. It previously
+                    // didn't add a space if the line break was at i==0. This caused some occurences of
+                    // "string1 # { and } # string2" constructs lose the space in front of the "and" because
+                    // the line wrap caused a JabRef linke break at the start of a value containing the " and ".
+                    // The bug was caused by a protective check for i>0 to avoid intexing char -1 in content.
+                    if ((i==0) || !Character.isWhitespace(content.charAt(i-1))) {
+                        content.insert(i, ' ');
+                        // Increment i because of the inserted character:
+                        i++;
+                    }
+                }
+                else if ((content.length()>i+3) && (content.charAt(i+1)=='\t')
+                    && (content.charAt(i+2)==' ')
+                    && !Character.isWhitespace(content.charAt(i+3))) {
+                    // We have \n\t followed by ' ' followed by non-whitespace, which indicates
+                    // a wrap made by JabRef <= 1.7.1. Remove:
+                    content.deleteCharAt(i); // \n
+                    content.deleteCharAt(i); // \t
+                    // Remove space only if necessary:
+                    if ((i>0) && Character.isWhitespace(content.charAt(i-1))) {
+                        content.deleteCharAt(i);
+                    }
+                }
+                else if ((content.length()>i+3) && (content.charAt(i+1)=='\t')
+                        && (content.charAt(i+2)=='\n') && (content.charAt(i+3)=='\t')) {
+                    // We have \n\t\n\t, which looks like a JabRef-formatted empty line.
+                    // Remove the tabs and keep one of the line breaks:
+                    content.deleteCharAt(i+1); // \t
+                    content.deleteCharAt(i+1); // \n
+                    content.deleteCharAt(i+1); // \t
+                    // Skip past the line breaks:
+                    i++;
+
+                    // Now, if more \n\t pairs are following, keep each line break. This
+                    // preserves several line breaks properly. Repeat until done:
+                    while ((content.length()>i+1) && (content.charAt(i)=='\n')
+                        && (content.charAt(i+1)=='\t')) {
+
+                        content.deleteCharAt(i+1);
+                        i++;
+                    }
+                }
+                else if ((content.length()>i+1) && (content.charAt(i+1)!='\n')) {
+                    // We have a line break not followed by another line break. This is probably a normal
+                    // line break made by whatever other editor, so we will remove the line break.
+                    content.deleteCharAt(i);
+                    // If the line break is not accompanied by other whitespace we must add a space:
+                    if (!Character.isWhitespace(content.charAt(i)) &&  // No whitespace after?
+                            (i>0) && !Character.isWhitespace(content.charAt(i-1))) // No whitespace before?
+                        content.insert(i, ' ');
+                }
+
+                //else if ((content.length()>i+1) && (content.charAt(i+1)=='\n'))
+                else
+                    i++;
+                //content.deleteCharAt(i);
+            }
+            else if (c == ' ') {
+                //if ((content.length()>i+2) && (content.charAt(i+1)==' ')) {
+                if ((i>0) && (content.charAt(i-1)==' ')) {
+                    // We have two spaces in a row. Don't include this one.
+                	
+                	// Yes, of course we have, but in Filenames it is nessary to have all spaces. :-)
+                	// This is the reason why the next lines are required
+                	if(key != null && key.equals(GUIGlobals.FILE_FIELD)){
+                		i++;
+                	}
+                	else
+                		content.deleteCharAt(i);
+                }
+                else
+                    i++;
+            } else if (c == '\t')
+                // Remove all tab characters that aren't associated with a line break.
+                content.deleteCharAt(i);
+            else
+                i++;
+
+        }
+        
+        return content;
+	}
+
+    /**
+     * Performs the reformatting
+     * @param content StringBuffer containing the field to format.
+     * @return The formatted field content. NOTE: the StringBuffer returned may
+     * or may not be the same as the argument given.
+     */
+    public StringBuffer format(StringBuffer content) { 
+    	return format(content, null);
+    }
+
+    /**
+     * Formats field contents for output. Must be "symmetric" with the parse method above,
+     * so stored and reloaded fields are not mangled.
+     * @param in
+     * @param wrapAmount
+     * @return the wrapped String.
+     */
+    public static String wrap(String in, int wrapAmount){
+        
+        String[] lines = in.split("\n");
+        StringBuffer res = new StringBuffer();
+        addWrappedLine(res, lines[0], wrapAmount);
+        for (int i=1; i<lines.length; i++) {
+
+            if (!lines[i].trim().equals("")) {
+                res.append(Globals.NEWLINE);
+                res.append('\t');
+                res.append(Globals.NEWLINE);
+                res.append('\t');
+                addWrappedLine(res, lines[i], wrapAmount);
+            } else {
+                res.append(Globals.NEWLINE);
+                res.append('\t');
+            }
+        }
+        return res.toString();
+    }
+
+    private static void addWrappedLine(StringBuffer res, String line, int wrapAmount) {
+        // Set our pointer to the beginning of the new line in the StringBuffer:
+        int p = res.length();
+        // Add the line, unmodified:
+        res.append(line);
+
+        while (p < res.length()){
+            int q = res.indexOf(" ", p+wrapAmount);
+            if ((q < 0) || (q >= res.length()))
+                break;
+
+            res.deleteCharAt(q);
+            res.insert(q, Globals.NEWLINE+"\t");
+            p = q+Globals.NEWLINE_LENGTH;
+
+        }
+    }
+
+    static class Indents {
+        //int hyp
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/FreeCiteImporter.java b/src/java/net/sf/jabref/imports/FreeCiteImporter.java
index 154328c..f270f56 100644
--- a/src/java/net/sf/jabref/imports/FreeCiteImporter.java
+++ b/src/java/net/sf/jabref/imports/FreeCiteImporter.java
@@ -1,228 +1,228 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-package net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
-import java.net.MalformedURLException;
-import java.net.SocketException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLEncoder;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Scanner;
-
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamReader;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRef;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.labelPattern.LabelPatternUtil;
-
-/**
- * This importer parses text format citations using the online API of FreeCite -
- * Open Source Citation Parser http://freecite.library.brown.edu/
- */
-public class FreeCiteImporter extends ImportFormat {
-
-    @Override
-    public boolean isRecognizedFormat(InputStream in) throws IOException {
-        // TODO: We don't know how to recognize text files, therefore we return
-        // "false"
-        return false;
-    }
-
-    @Override
-    public List<BibtexEntry> importEntries(InputStream in, OutputPrinter status)
-            throws IOException {
-        String text = new Scanner(in).useDelimiter("\\A").next();
-        return importEntries(text, status);
-    }
-
-    public List<BibtexEntry> importEntries(String text, OutputPrinter status) {
-        // URLencode the string for transmission
-        String urlencodedCitation = null;
-        try {
-            urlencodedCitation = URLEncoder.encode(text, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            // e.printStackTrace();
-        }
-        String data = "citation=" + urlencodedCitation;
-
-        // Send the request
-        URL url;
-        URLConnection conn;
-        try {
-            url = new URL("http://freecite.library.brown.edu/citations/create");
-            conn = url.openConnection();
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-            return null;
-        } catch (IOException e) {
-            e.printStackTrace();
-            return null;
-        }
-        try {
-            conn.setRequestProperty("accept", "text/xml");
-            conn.setDoOutput(true);
-            OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
-
-            // write parameters
-            writer.write(data);
-            writer.flush();
-        } catch (IOException e) {
-            status.showMessage(Globals.lang("Unable to connect to freecite online service."));
-            return null;
-        } catch (Exception ex) {
-            ex.printStackTrace();
-            return null;
-        }
-        // output is in conn.getInputStream();
-        // new InputStreamReader(conn.getInputStream())
-
-        List<BibtexEntry> res = new ArrayList<BibtexEntry>();
-        
-        XMLInputFactory factory = XMLInputFactory.newInstance();
-        try {
-            XMLStreamReader parser = factory.createXMLStreamReader(conn.getInputStream());
-            while (parser.hasNext()) {
-                if ((parser.getEventType() == XMLStreamConstants.START_ELEMENT)
-                        && (parser.getLocalName().equals("citation"))) {
-                    parser.nextTag();
-                    
-                    StringBuilder noteSB = new StringBuilder();
-
-                    BibtexEntry e = new BibtexEntry();
-                    // fallback type
-                    BibtexEntryType type = BibtexEntryType.INPROCEEDINGS;
-
-                    while (! (   parser.getEventType() == XMLStreamConstants.END_ELEMENT
-                              && parser.getLocalName().equals("citation"))) {
-                        if (parser.getEventType() == XMLStreamConstants.START_ELEMENT) {
-                            String ln = parser.getLocalName();
-                            if (ln.equals("authors")) {
-                                StringBuilder sb = new StringBuilder();
-                                parser.nextTag();
-
-                                while (parser.getEventType() == XMLStreamConstants.START_ELEMENT) {
-                                    // author is directly nested below authors
-                                    assert (parser.getLocalName()
-                                            .equals("author"));
-
-                                    String author = parser.getElementText();
-                                    if (sb.length() == 0) {
-                                        // first author
-                                        sb.append(author);
-                                    } else {
-                                        sb.append(" and ");
-                                        sb.append(author);
-                                    }
-                                    assert(parser.getEventType() == XMLStreamConstants.END_ELEMENT);
-                                    assert(parser.getLocalName().equals("author"));
-                                    parser.nextTag();
-                                    // current tag is either begin:author or
-                                    // end:authors
-                                }
-                                e.setField("author", sb.toString());
-                            } else if (ln.equals("journal")) {
-                                // we guess that the entry is a journal
-                                // the alternative way is to parse
-                                // ctx:context-objects / ctx:context-object / ctx:referent / ctx:metadata-by-val / ctx:metadata / journal / rft:genre
-                                // the drawback is that ctx:context-objects is NOT nested in citation, but a separate element
-                                // we would have to change the whole parser to parse that format.
-                                type = BibtexEntryType.ARTICLE;
-                                e.setField(ln, parser.getElementText());
-                            } else if (ln.equals("tech")) {
-                                type = BibtexEntryType.TECHREPORT;
-                                // the content of the "tech" field seems to contain the number of the technical report
-                                e.setField("number", parser.getElementText());
-                            } else if ( ln.equals("doi")
-                                     || ln.equals("institution")
-                                     || ln.equals("location")
-                                     || ln.equals("number")
-                                     || ln.equals("note") 
-                                     || ln.equals("title") 
-                                     || ln.equals("pages")
-                                     || ln.equals("publisher")
-                                     || ln.equals("volume")
-                                     || ln.equals("year")) {
-                                e.setField(ln, parser.getElementText());
-                            } else if (ln.equals("booktitle")) {
-                                String booktitle = parser.getElementText();
-                                if (booktitle.startsWith("In ")) {
-                                    // special treatment for parsing of
-                                    // "In proceedings of..." references
-                                    booktitle = booktitle.substring(3);
-                                }
-                                e.setField("booktitle", booktitle);
-                            } else if (ln.equals("raw_string")) {
-                                // raw input string is ignored
-                            } else {
-                                // all other tags are stored as note
-                                noteSB.append(ln);
-                                noteSB.append(":");
-                                noteSB.append(parser.getElementText());
-                                noteSB.append(Globals.NEWLINE);
-                            }
-                        }
-                        parser.next();
-                    }
-                    
-                    if (noteSB.length() > 0) {
-                        String note = e.getField("note");
-                        if (note != null) {
-                            // "note" could have been set during the parsing as FreeCite also returns "note" 
-                            note = note.concat(Globals.NEWLINE).concat(noteSB.toString());
-                        } else {
-                            note = noteSB.toString();
-                        }
-                        e.setField("note", note);
-                    }
-                    
-                    // type has been derived from "genre"
-                    // has to be done before label generation as label generation is dependent on entry type
-                    e.setType(type);
-
-                    // autogenerate label (BibTeX key)
-                    e = LabelPatternUtil.makeLabel(JabRef.jrf.basePanel().metaData(), JabRef.jrf.basePanel().database(), e);
-                    
-                    res.add(e);
-                }
-                parser.next();
-            }
-            parser.close();
-        } catch (Exception ex) {
-            ex.printStackTrace();
-            return null;
-        }
-
-        return res;
-    }
-
-    @Override
-    public String getFormatName() {
-        return "text citations";
-    }
-
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+package net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.SocketException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamReader;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.labelPattern.LabelPatternUtil;
+
+/**
+ * This importer parses text format citations using the online API of FreeCite -
+ * Open Source Citation Parser http://freecite.library.brown.edu/
+ */
+public class FreeCiteImporter extends ImportFormat {
+
+    @Override
+    public boolean isRecognizedFormat(InputStream in) throws IOException {
+        // TODO: We don't know how to recognize text files, therefore we return
+        // "false"
+        return false;
+    }
+
+    @Override
+    public List<BibtexEntry> importEntries(InputStream in, OutputPrinter status)
+            throws IOException {
+        String text = new Scanner(in).useDelimiter("\\A").next();
+        return importEntries(text, status);
+    }
+
+    public List<BibtexEntry> importEntries(String text, OutputPrinter status) {
+        // URLencode the string for transmission
+        String urlencodedCitation = null;
+        try {
+            urlencodedCitation = URLEncoder.encode(text, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            // e.printStackTrace();
+        }
+        String data = "citation=" + urlencodedCitation;
+
+        // Send the request
+        URL url;
+        URLConnection conn;
+        try {
+            url = new URL("http://freecite.library.brown.edu/citations/create");
+            conn = url.openConnection();
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+            return null;
+        } catch (IOException e) {
+            e.printStackTrace();
+            return null;
+        }
+        try {
+            conn.setRequestProperty("accept", "text/xml");
+            conn.setDoOutput(true);
+            OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
+
+            // write parameters
+            writer.write(data);
+            writer.flush();
+        } catch (IOException e) {
+            status.showMessage(Globals.lang("Unable to connect to freecite online service."));
+            return null;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            return null;
+        }
+        // output is in conn.getInputStream();
+        // new InputStreamReader(conn.getInputStream())
+
+        List<BibtexEntry> res = new ArrayList<BibtexEntry>();
+        
+        XMLInputFactory factory = XMLInputFactory.newInstance();
+        try {
+            XMLStreamReader parser = factory.createXMLStreamReader(conn.getInputStream());
+            while (parser.hasNext()) {
+                if ((parser.getEventType() == XMLStreamConstants.START_ELEMENT)
+                        && (parser.getLocalName().equals("citation"))) {
+                    parser.nextTag();
+                    
+                    StringBuilder noteSB = new StringBuilder();
+
+                    BibtexEntry e = new BibtexEntry();
+                    // fallback type
+                    BibtexEntryType type = BibtexEntryType.INPROCEEDINGS;
+
+                    while (! (   parser.getEventType() == XMLStreamConstants.END_ELEMENT
+                              && parser.getLocalName().equals("citation"))) {
+                        if (parser.getEventType() == XMLStreamConstants.START_ELEMENT) {
+                            String ln = parser.getLocalName();
+                            if (ln.equals("authors")) {
+                                StringBuilder sb = new StringBuilder();
+                                parser.nextTag();
+
+                                while (parser.getEventType() == XMLStreamConstants.START_ELEMENT) {
+                                    // author is directly nested below authors
+                                    assert (parser.getLocalName()
+                                            .equals("author"));
+
+                                    String author = parser.getElementText();
+                                    if (sb.length() == 0) {
+                                        // first author
+                                        sb.append(author);
+                                    } else {
+                                        sb.append(" and ");
+                                        sb.append(author);
+                                    }
+                                    assert(parser.getEventType() == XMLStreamConstants.END_ELEMENT);
+                                    assert(parser.getLocalName().equals("author"));
+                                    parser.nextTag();
+                                    // current tag is either begin:author or
+                                    // end:authors
+                                }
+                                e.setField("author", sb.toString());
+                            } else if (ln.equals("journal")) {
+                                // we guess that the entry is a journal
+                                // the alternative way is to parse
+                                // ctx:context-objects / ctx:context-object / ctx:referent / ctx:metadata-by-val / ctx:metadata / journal / rft:genre
+                                // the drawback is that ctx:context-objects is NOT nested in citation, but a separate element
+                                // we would have to change the whole parser to parse that format.
+                                type = BibtexEntryType.ARTICLE;
+                                e.setField(ln, parser.getElementText());
+                            } else if (ln.equals("tech")) {
+                                type = BibtexEntryType.TECHREPORT;
+                                // the content of the "tech" field seems to contain the number of the technical report
+                                e.setField("number", parser.getElementText());
+                            } else if ( ln.equals("doi")
+                                     || ln.equals("institution")
+                                     || ln.equals("location")
+                                     || ln.equals("number")
+                                     || ln.equals("note") 
+                                     || ln.equals("title") 
+                                     || ln.equals("pages")
+                                     || ln.equals("publisher")
+                                     || ln.equals("volume")
+                                     || ln.equals("year")) {
+                                e.setField(ln, parser.getElementText());
+                            } else if (ln.equals("booktitle")) {
+                                String booktitle = parser.getElementText();
+                                if (booktitle.startsWith("In ")) {
+                                    // special treatment for parsing of
+                                    // "In proceedings of..." references
+                                    booktitle = booktitle.substring(3);
+                                }
+                                e.setField("booktitle", booktitle);
+                            } else if (ln.equals("raw_string")) {
+                                // raw input string is ignored
+                            } else {
+                                // all other tags are stored as note
+                                noteSB.append(ln);
+                                noteSB.append(":");
+                                noteSB.append(parser.getElementText());
+                                noteSB.append(Globals.NEWLINE);
+                            }
+                        }
+                        parser.next();
+                    }
+                    
+                    if (noteSB.length() > 0) {
+                        String note = e.getField("note");
+                        if (note != null) {
+                            // "note" could have been set during the parsing as FreeCite also returns "note" 
+                            note = note.concat(Globals.NEWLINE).concat(noteSB.toString());
+                        } else {
+                            note = noteSB.toString();
+                        }
+                        e.setField("note", note);
+                    }
+                    
+                    // type has been derived from "genre"
+                    // has to be done before label generation as label generation is dependent on entry type
+                    e.setType(type);
+
+                    // autogenerate label (BibTeX key)
+                    e = LabelPatternUtil.makeLabel(JabRef.jrf.basePanel().metaData(), JabRef.jrf.basePanel().database(), e);
+                    
+                    res.add(e);
+                }
+                parser.next();
+            }
+            parser.close();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            return null;
+        }
+
+        return res;
+    }
+
+    @Override
+    public String getFormatName() {
+        return "text citations";
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/GeneralFetcher.java b/src/java/net/sf/jabref/imports/GeneralFetcher.java
index 9fa9f72..6c7f3e8 100644
--- a/src/java/net/sf/jabref/imports/GeneralFetcher.java
+++ b/src/java/net/sf/jabref/imports/GeneralFetcher.java
@@ -1,318 +1,318 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-
-import javax.swing.*;
-
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.FocusRequester;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.HelpAction;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.SidePaneComponent;
-import net.sf.jabref.SidePaneManager;
-import net.sf.jabref.Util;
-import net.sf.jabref.gui.FetcherPreviewDialog;
-import net.sf.jabref.gui.ImportInspectionDialog;
-
-/**
- * <p>Title: </p>
- * <p>Description: </p>
- * <p>Copyright: Copyright (c) 2003</p>
- * <p>Company: </p>
- *
- * @author not attributable
- * @version 1.0
- */
-
-public class GeneralFetcher extends SidePaneComponent implements ActionListener {
-
-    JTextField tf = new JTextField();
-    JPanel pan = new JPanel();
-    GridBagLayout gbl = new GridBagLayout();
-    GridBagConstraints con = new GridBagConstraints();
-    JButton go = new JButton(Globals.lang("Fetch")), helpBut = new JButton(
-			GUIGlobals.getImage("helpSmall")), reset = new JButton(Globals
-			.lang("Reset"));
-    JComboBox fetcherChoice;
-    CardLayout optionsCards = new CardLayout();
-    JPanel optionsPanel = new JPanel(optionsCards);
-    JPanel optPanel = new JPanel(new BorderLayout());
-    HelpAction help;
-
-    SidePaneManager sidePaneManager;
-    Action action;
-    JabRefFrame frame;
-    EntryFetcher activeFetcher;
-    EntryFetcher[] fetcherArray;
-
-    public GeneralFetcher(SidePaneManager p0, JabRefFrame frame, final List<EntryFetcher> fetchers) {
-        super(p0, GUIGlobals.getIconUrl("www"), Globals.lang("Web search"));
-        this.sidePaneManager = p0;
-        this.frame = frame;
-        fetcherArray = fetchers.toArray(new EntryFetcher[fetchers.size()]);
-        Arrays.sort(fetcherArray, new EntryFetcherComparator());
-        //JLabel[] choices = new JLabel[fetchers.size()];
-        String[] choices = new String[fetcherArray.length];
-        for (int i=0; i<fetcherArray.length; i++) {
-            choices[i] = fetcherArray[i].getTitle();
-            //choices[i] = new JLabel(fetchers.get(i).getTitle(), new ImageIcon(fetchers.get(i).getIcon()),
-            //        JLabel.HORIZONTAL);
-            /*if (fetchers.get(i).getOptionsPanel() != null)
-                optionsPanel.add(fetchers.get(i).getOptionsPanel(), String.valueOf(i));
-            else
-                optionsPanel.add(new JPanel(), String.valueOf(i));*/
-        }
-        fetcherChoice = new JComboBox(choices);
-        int defaultFetcher = Globals.prefs.getInt("selectedFetcherIndex");
-        if (defaultFetcher >= fetcherArray.length)
-            defaultFetcher = 0;
-        this.activeFetcher = fetcherArray[defaultFetcher];
-        fetcherChoice.setSelectedIndex(defaultFetcher);
-        if (this.activeFetcher.getOptionsPanel() != null)
-            optPanel.add(this.activeFetcher.getOptionsPanel(), BorderLayout.CENTER);
-        helpBut.setEnabled(activeFetcher.getHelpPage() != null);
-
-        //optionsCards.show(optionsPanel, String.valueOf(defaultFetcher));
-
-        /*fetcherChoice.setRenderer(new ListCellRenderer() {
-            JLabel label = new JLabel();
-            public Component getListCellRendererComponent(JList jList, Object o, int i, boolean isSelected,
-                boolean cellHasFocus) {
-                JLabel theLab = (JLabel)o;
-                label.setIcon(theLab.getIcon());
-                label.setText(theLab.getText());
-                if (cellHasFocus) {
-                    label.setBackground(UIManager.getDefaults().getColor("ComboBox.selectionBackground").darker());
-                    label.setForeground(UIManager.getDefaults().getColor("ComboBox.foreground"));
-                } else {
-                    label.setBackground(UIManager.getDefaults().getColor("ComboBox.background"));
-                    label.setForeground(UIManager.getDefaults().getColor("ComboBox.foreground"));
-                }
-                return label;
-            }
-        });*/
-        fetcherChoice.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                activeFetcher = fetcherArray[fetcherChoice.getSelectedIndex()];
-                Globals.prefs.putInt("selectedFetcherIndex", fetcherChoice.getSelectedIndex());
-                if (activeFetcher.getHelpPage() != null) {
-                    help.setHelpFile(activeFetcher.getHelpPage());
-                    helpBut.setEnabled(true);
-                } else {
-                    helpBut.setEnabled(false);
-                }
-                optionsCards.show(optionsPanel, String.valueOf(fetcherChoice.getSelectedIndex()));
-                optPanel.removeAll();
-                if (activeFetcher.getOptionsPanel() != null)
-                    optPanel.add(activeFetcher.getOptionsPanel(), BorderLayout.CENTER);
-                revalidate();
-            }
-        });
-
-        action = new FetcherAction();
-
-        help = new HelpAction(Globals.helpDiag, activeFetcher.getHelpPage(), "Help");
-
-        helpBut.addActionListener(help);
-        helpBut.setMargin(new Insets(0, 0, 0, 0));
-        tf.setPreferredSize(new Dimension(1,tf.getPreferredSize().height));
-        
-        tf.setName("tf");
-		// add action to reset-button. resets tf and requests focus
-		reset.addActionListener(new AbstractAction() {
-			public void actionPerformed(ActionEvent event) {
-				tf.setText("");
-				new FocusRequester(tf);
-			}
-		});
-
-        JPanel main = new JPanel();
-        main.setLayout(gbl);
-        con.fill = GridBagConstraints.BOTH;
-        con.insets = new Insets(0, 0, 2, 0);
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        con.weightx = 1;
-        con.weighty = 0;
-        con.weighty = 1;
-        con.insets = new Insets(1, 0, 1, 0);
-        con.fill = GridBagConstraints.BOTH;
-        gbl.setConstraints(fetcherChoice, con);
-        main.add(fetcherChoice);
-        con.insets = new Insets(0, 0, 0, 0);
-        gbl.setConstraints(tf, con);
-        main.add(tf);
-
-        // Go Button
-        con.weighty = 0;
-        con.gridwidth = 1;
-        gbl.setConstraints(go, con);
-        main.add(go);
-        
-        // Reset Button
-		reset.setName("reset");
-		gbl.setConstraints(reset, con);
-		main.add(reset);
-        
-        // Help Button
-        con.gridwidth = GridBagConstraints.REMAINDER;
-        gbl.setConstraints(helpBut, con);
-        main.add(helpBut);
-
-        if (pan != null) {
-            gbl.setConstraints(optPanel, con);
-            main.add(optPanel);
-        }
-
-        main.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
-        add(main, BorderLayout.CENTER);
-        go.addActionListener(this);
-        tf.addActionListener(this);
-    }
-
-    public void setHelpResourceOwner(Class c) {
-        help.setResourceOwner(c);
-    }
-
-    public JTextField getTextField() {
-        return tf;
-    }
-
-    public Action getAction() {
-        return action;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        if (tf.getText().trim().length() == 0) {    
-	    frame.output(Globals.lang("Please enter a search string")); 
-	    return;
-	}
-
-	if(frame.basePanel() == null) {
-	    frame.output(Globals.lang("Please open or start a new database before searching")); 
-	    return;
-	} 
-
-        // We have two categories of fetchers. One category can show previews first and ask the
-        // user which ones to download:
-	if (activeFetcher instanceof PreviewEntryFetcher) {
-	    frame.output(Globals.lang("Searching..."));
-	    frame.setProgressBarIndeterminate(true);
-	    frame.setProgressBarVisible(true);
-	    final PreviewEntryFetcher pFetcher = (PreviewEntryFetcher)activeFetcher;
-	    final FetcherPreviewDialog dialog = new FetcherPreviewDialog(frame,
-									 pFetcher.getWarningLimit(), pFetcher.getPreferredPreviewHeight());
-	    new Thread(new Runnable(){
-		    public void run(){
-			final boolean result = pFetcher.processQueryGetPreview(tf.getText().trim(), dialog, dialog);
-			SwingUtilities.invokeLater(new Runnable() {
-				public void run() {
-				    frame.setProgressBarVisible(false);
-				    frame.output("");
-				    if (!result)
-					return;
-				    dialog.setLocationRelativeTo(frame);
-				    dialog.setVisible(true);
-				    if (dialog.isOkPressed()) {
-					final ImportInspectionDialog d2 = new ImportInspectionDialog(frame, frame.basePanel(),
-												     BibtexFields.DEFAULT_INSPECTION_FIELDS, activeFetcher.getTitle(), false);
-					d2.addCallBack(activeFetcher);
-					Util.placeDialog(d2, frame);
-					d2.setVisible(true);
-					new Thread(new Runnable() {
-						public void run() {
-						    pFetcher.getEntries(dialog.getSelection(), d2);
-						    d2.entryListComplete();
-						}
-					    }).start();
-					
-				    }
-				}
-			    });
-			
-			
-		    }
-		}).start();
-	}
-	
-	// The other category downloads the entries first, then asks the user which ones to keep:
-	else {
-	    final ImportInspectionDialog dialog = new ImportInspectionDialog(frame, frame.basePanel(),
-									     BibtexFields.DEFAULT_INSPECTION_FIELDS, activeFetcher.getTitle(), false);
-	    dialog.addCallBack(activeFetcher);
-	    Util.placeDialog(dialog, frame);
-	    dialog.setVisible(true);
-	    
-	    new Thread(new Runnable(){
-		    public void run(){
-			
-			if (activeFetcher.processQuery(tf.getText().trim(), dialog, dialog)){
-			    dialog.entryListComplete();
-			} else {
-			    dialog.dispose();
-			}
-		    }
-		}).start();
-	}
-    }
-
-
-    class FetcherAction extends AbstractAction {
-        public FetcherAction() {
-            super(Globals.lang("Web search"), GUIGlobals.getImage("www"));
-            //if ((activeFetcher.getKeyName() != null) && (activeFetcher.getKeyName().length() > 0))
-            putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Fetch Medline"));
-        }
-        public void actionPerformed(ActionEvent e) {
-        	if (!sidePaneManager.hasComponent(GeneralFetcher.this.getTitle())){
-        		sidePaneManager.register(GeneralFetcher.this.getTitle(), GeneralFetcher.this);
-        	}
-        	
-        	if (frame.getTabbedPane().getTabCount() > 0) {
-				sidePaneManager.toggle(GeneralFetcher.this.getTitle());
-				if (sidePaneManager.isComponentVisible(GeneralFetcher.this.getTitle())) {
-					new FocusRequester(getTextField());
-				}
-			}        	
-        }
-    }
-
-    @Override
-    public void componentClosing() {
-        super.componentClosing();
-        Globals.prefs.putBoolean("webSearchVisible", Boolean.FALSE);
-    }
-
-    @Override
-    public void componentOpening() {
-        super.componentOpening();
-        Globals.prefs.putBoolean("webSearchVisible", Boolean.TRUE);
-    }
-
-    class EntryFetcherComparator implements Comparator<EntryFetcher> {
-        public int compare(EntryFetcher entryFetcher, EntryFetcher entryFetcher1) {
-            return entryFetcher.getTitle().compareTo(entryFetcher1.getTitle());
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+
+import javax.swing.*;
+
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.FocusRequester;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.SidePaneComponent;
+import net.sf.jabref.SidePaneManager;
+import net.sf.jabref.Util;
+import net.sf.jabref.gui.FetcherPreviewDialog;
+import net.sf.jabref.gui.ImportInspectionDialog;
+import net.sf.jabref.help.HelpAction;
+
+/**
+ * <p>Title: </p>
+ * <p>Description: </p>
+ * <p>Copyright: Copyright (c) 2003</p>
+ * <p>Company: </p>
+ *
+ * @author not attributable
+ * @version 1.0
+ */
+
+public class GeneralFetcher extends SidePaneComponent implements ActionListener {
+
+    JTextField tf = new JTextField();
+    JPanel pan = new JPanel();
+    GridBagLayout gbl = new GridBagLayout();
+    GridBagConstraints con = new GridBagConstraints();
+    JButton go = new JButton(Globals.lang("Fetch")), helpBut = new JButton(
+			GUIGlobals.getImage("helpSmall")), reset = new JButton(Globals
+			.lang("Reset"));
+    JComboBox fetcherChoice;
+    CardLayout optionsCards = new CardLayout();
+    JPanel optionsPanel = new JPanel(optionsCards);
+    JPanel optPanel = new JPanel(new BorderLayout());
+    HelpAction help;
+
+    SidePaneManager sidePaneManager;
+    Action action;
+    JabRefFrame frame;
+    EntryFetcher activeFetcher;
+    EntryFetcher[] fetcherArray;
+
+    public GeneralFetcher(SidePaneManager p0, JabRefFrame frame, final List<EntryFetcher> fetchers) {
+        super(p0, GUIGlobals.getIconUrl("www"), Globals.lang("Web search"));
+        this.sidePaneManager = p0;
+        this.frame = frame;
+        fetcherArray = fetchers.toArray(new EntryFetcher[fetchers.size()]);
+        Arrays.sort(fetcherArray, new EntryFetcherComparator());
+        //JLabel[] choices = new JLabel[fetchers.size()];
+        String[] choices = new String[fetcherArray.length];
+        for (int i=0; i<fetcherArray.length; i++) {
+            choices[i] = fetcherArray[i].getTitle();
+            //choices[i] = new JLabel(fetchers.get(i).getTitle(), new ImageIcon(fetchers.get(i).getIcon()),
+            //        JLabel.HORIZONTAL);
+            /*if (fetchers.get(i).getOptionsPanel() != null)
+                optionsPanel.add(fetchers.get(i).getOptionsPanel(), String.valueOf(i));
+            else
+                optionsPanel.add(new JPanel(), String.valueOf(i));*/
+        }
+        fetcherChoice = new JComboBox(choices);
+        int defaultFetcher = Globals.prefs.getInt("selectedFetcherIndex");
+        if (defaultFetcher >= fetcherArray.length)
+            defaultFetcher = 0;
+        this.activeFetcher = fetcherArray[defaultFetcher];
+        fetcherChoice.setSelectedIndex(defaultFetcher);
+        if (this.activeFetcher.getOptionsPanel() != null)
+            optPanel.add(this.activeFetcher.getOptionsPanel(), BorderLayout.CENTER);
+        helpBut.setEnabled(activeFetcher.getHelpPage() != null);
+
+        //optionsCards.show(optionsPanel, String.valueOf(defaultFetcher));
+
+        /*fetcherChoice.setRenderer(new ListCellRenderer() {
+            JLabel label = new JLabel();
+            public Component getListCellRendererComponent(JList jList, Object o, int i, boolean isSelected,
+                boolean cellHasFocus) {
+                JLabel theLab = (JLabel)o;
+                label.setIcon(theLab.getIcon());
+                label.setText(theLab.getText());
+                if (cellHasFocus) {
+                    label.setBackground(UIManager.getDefaults().getColor("ComboBox.selectionBackground").darker());
+                    label.setForeground(UIManager.getDefaults().getColor("ComboBox.foreground"));
+                } else {
+                    label.setBackground(UIManager.getDefaults().getColor("ComboBox.background"));
+                    label.setForeground(UIManager.getDefaults().getColor("ComboBox.foreground"));
+                }
+                return label;
+            }
+        });*/
+        fetcherChoice.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                activeFetcher = fetcherArray[fetcherChoice.getSelectedIndex()];
+                Globals.prefs.putInt("selectedFetcherIndex", fetcherChoice.getSelectedIndex());
+                if (activeFetcher.getHelpPage() != null) {
+                    help.setHelpFile(activeFetcher.getHelpPage());
+                    helpBut.setEnabled(true);
+                } else {
+                    helpBut.setEnabled(false);
+                }
+                optionsCards.show(optionsPanel, String.valueOf(fetcherChoice.getSelectedIndex()));
+                optPanel.removeAll();
+                if (activeFetcher.getOptionsPanel() != null)
+                    optPanel.add(activeFetcher.getOptionsPanel(), BorderLayout.CENTER);
+                revalidate();
+            }
+        });
+
+        action = new FetcherAction();
+
+        help = new HelpAction(Globals.helpDiag, activeFetcher.getHelpPage(), "Help");
+
+        helpBut.addActionListener(help);
+        helpBut.setMargin(new Insets(0, 0, 0, 0));
+        tf.setPreferredSize(new Dimension(1,tf.getPreferredSize().height));
+        
+        tf.setName("tf");
+		// add action to reset-button. resets tf and requests focus
+		reset.addActionListener(new AbstractAction() {
+			public void actionPerformed(ActionEvent event) {
+				tf.setText("");
+				new FocusRequester(tf);
+			}
+		});
+
+        JPanel main = new JPanel();
+        main.setLayout(gbl);
+        con.fill = GridBagConstraints.BOTH;
+        con.insets = new Insets(0, 0, 2, 0);
+        con.gridwidth = GridBagConstraints.REMAINDER;
+        con.weightx = 1;
+        con.weighty = 0;
+        con.weighty = 1;
+        con.insets = new Insets(1, 0, 1, 0);
+        con.fill = GridBagConstraints.BOTH;
+        gbl.setConstraints(fetcherChoice, con);
+        main.add(fetcherChoice);
+        con.insets = new Insets(0, 0, 0, 0);
+        gbl.setConstraints(tf, con);
+        main.add(tf);
+
+        // Go Button
+        con.weighty = 0;
+        con.gridwidth = 1;
+        gbl.setConstraints(go, con);
+        main.add(go);
+        
+        // Reset Button
+		reset.setName("reset");
+		gbl.setConstraints(reset, con);
+		main.add(reset);
+        
+        // Help Button
+        con.gridwidth = GridBagConstraints.REMAINDER;
+        gbl.setConstraints(helpBut, con);
+        main.add(helpBut);
+
+        if (pan != null) {
+            gbl.setConstraints(optPanel, con);
+            main.add(optPanel);
+        }
+
+        main.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
+        add(main, BorderLayout.CENTER);
+        go.addActionListener(this);
+        tf.addActionListener(this);
+    }
+
+    public void setHelpResourceOwner(Class c) {
+        help.setResourceOwner(c);
+    }
+
+    public JTextField getTextField() {
+        return tf;
+    }
+
+    public Action getAction() {
+        return action;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        if (tf.getText().trim().length() == 0) {    
+	    frame.output(Globals.lang("Please enter a search string")); 
+	    return;
+	}
+
+	if(frame.basePanel() == null) {
+	    frame.output(Globals.lang("Please open or start a new database before searching")); 
+	    return;
+	} 
+
+        // We have two categories of fetchers. One category can show previews first and ask the
+        // user which ones to download:
+	if (activeFetcher instanceof PreviewEntryFetcher) {
+	    frame.output(Globals.lang("Searching..."));
+	    frame.setProgressBarIndeterminate(true);
+	    frame.setProgressBarVisible(true);
+	    final PreviewEntryFetcher pFetcher = (PreviewEntryFetcher)activeFetcher;
+	    final FetcherPreviewDialog dialog = new FetcherPreviewDialog(frame,
+									 pFetcher.getWarningLimit(), pFetcher.getPreferredPreviewHeight());
+	    new Thread(new Runnable(){
+		    public void run(){
+			final boolean result = pFetcher.processQueryGetPreview(tf.getText().trim(), dialog, dialog);
+			SwingUtilities.invokeLater(new Runnable() {
+				public void run() {
+				    frame.setProgressBarVisible(false);
+				    frame.output("");
+				    if (!result)
+					return;
+				    dialog.setLocationRelativeTo(frame);
+				    dialog.setVisible(true);
+				    if (dialog.isOkPressed()) {
+					final ImportInspectionDialog d2 = new ImportInspectionDialog(frame, frame.basePanel(),
+												     BibtexFields.DEFAULT_INSPECTION_FIELDS, activeFetcher.getTitle(), false);
+					d2.addCallBack(activeFetcher);
+					Util.placeDialog(d2, frame);
+					d2.setVisible(true);
+					new Thread(new Runnable() {
+						public void run() {
+						    pFetcher.getEntries(dialog.getSelection(), d2);
+						    d2.entryListComplete();
+						}
+					    }).start();
+					
+				    }
+				}
+			    });
+			
+			
+		    }
+		}).start();
+	}
+	
+	// The other category downloads the entries first, then asks the user which ones to keep:
+	else {
+	    final ImportInspectionDialog dialog = new ImportInspectionDialog(frame, frame.basePanel(),
+									     BibtexFields.DEFAULT_INSPECTION_FIELDS, activeFetcher.getTitle(), false);
+	    dialog.addCallBack(activeFetcher);
+	    Util.placeDialog(dialog, frame);
+	    dialog.setVisible(true);
+	    
+	    new Thread(new Runnable(){
+		    public void run(){
+			
+			if (activeFetcher.processQuery(tf.getText().trim(), dialog, dialog)){
+			    dialog.entryListComplete();
+			} else {
+			    dialog.dispose();
+			}
+		    }
+		}).start();
+	}
+    }
+
+
+    class FetcherAction extends AbstractAction {
+        public FetcherAction() {
+            super(Globals.lang("Web search"), GUIGlobals.getImage("www"));
+            //if ((activeFetcher.getKeyName() != null) && (activeFetcher.getKeyName().length() > 0))
+            putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Fetch Medline"));
+        }
+        public void actionPerformed(ActionEvent e) {
+        	if (!sidePaneManager.hasComponent(GeneralFetcher.this.getTitle())){
+        		sidePaneManager.register(GeneralFetcher.this.getTitle(), GeneralFetcher.this);
+        	}
+        	
+        	if (frame.getTabbedPane().getTabCount() > 0) {
+				sidePaneManager.toggle(GeneralFetcher.this.getTitle());
+				if (sidePaneManager.isComponentVisible(GeneralFetcher.this.getTitle())) {
+					new FocusRequester(getTextField());
+				}
+			}        	
+        }
+    }
+
+    @Override
+    public void componentClosing() {
+        super.componentClosing();
+        Globals.prefs.putBoolean("webSearchVisible", Boolean.FALSE);
+    }
+
+    @Override
+    public void componentOpening() {
+        super.componentOpening();
+        Globals.prefs.putBoolean("webSearchVisible", Boolean.TRUE);
+    }
+
+    class EntryFetcherComparator implements Comparator<EntryFetcher> {
+        public int compare(EntryFetcher entryFetcher, EntryFetcher entryFetcher1) {
+            return entryFetcher.getTitle().compareTo(entryFetcher1.getTitle());
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/GoogleScholarFetcher.java b/src/java/net/sf/jabref/imports/GoogleScholarFetcher.java
index be2491e..c4bd173 100644
--- a/src/java/net/sf/jabref/imports/GoogleScholarFetcher.java
+++ b/src/java/net/sf/jabref/imports/GoogleScholarFetcher.java
@@ -1,335 +1,335 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import net.sf.jabref.*;
-import net.sf.jabref.gui.FetcherPreviewDialog;
-import net.sf.jabref.net.URLDownload;
-import net.sf.jabref.util.NameListNormalizer;
-
-import javax.swing.*;
-import java.io.*;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLEncoder;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-
-public class GoogleScholarFetcher implements PreviewEntryFetcher {
-
-    private boolean hasRunConfig = false;
-    private boolean clearKeys = true; // Should we clear the keys so new ones can be generated?
-    protected static int MAX_ENTRIES_TO_LOAD = 50;
-    final static String QUERY_MARKER = "___QUERY___";
-    final static String URL_START = "http://scholar.google.com";
-    final static String URL_SETTING = "http://scholar.google.com/scholar_settings";
-    final static String URL_SETPREFS = "http://scholar.google.com/scholar_setprefs";
-    final static String SEARCH_URL = URL_START+"/scholar?q="+QUERY_MARKER
-            +"&hl=en&btnG=Search";
-
-    final static Pattern BIBTEX_LINK_PATTERN = Pattern.compile("<a href=\"([^\"]*)\">[A-Za-z ]*BibTeX");
-    final static Pattern TITLE_START_PATTERN = Pattern.compile("<div class=\"gs_ri\">");
-    final static Pattern LINK_PATTERN = Pattern.compile("<h3 class=\"gs_rt\"><a href=\"([^\"]*)\">");
-    final static Pattern TITLE_END_PATTERN = Pattern.compile("<div class=\"gs_fl\">");
-
-    protected HashMap<String,String> entryLinks = new HashMap<String, String>();
-    //final static Pattern NEXT_PAGE_PATTERN = Pattern.compile(
-    //        "<a href=\"([^\"]*)\"><span class=\"SPRITE_nav_next\"> </span><br><span style=\".*\">Next</span></a>");
-
-    protected boolean stopFetching = false;
-
-
-    public int getWarningLimit() {
-        return 10;
-    }
-
-    public int getPreferredPreviewHeight() {
-        return 100;
-    }
-
-    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
-        return false;
-    }
-
-    public boolean processQueryGetPreview(String query, FetcherPreviewDialog preview, OutputPrinter status) {
-        entryLinks.clear();
-        stopFetching = false;
-        try {
-            if (!hasRunConfig) {
-                runConfig();
-                hasRunConfig = true;
-            }
-            Map<String, JLabel> citations = getCitations(query);
-            for (String link : citations.keySet()) {
-                preview.addEntry(link, citations.get(link));
-            }
-
-            return true;
-        } catch (IOException e) {
-            e.printStackTrace();
-            status.showMessage(Globals.lang("Error fetching from Google Scholar"));
-            return false;
-        }
-    }
-
-    public void getEntries(Map<String, Boolean> selection, ImportInspector inspector) {
-        int toDownload = 0, downloaded = 0;
-        for (String link : selection.keySet()) {
-            boolean isSelected = selection.get(link);
-            if (isSelected) toDownload++;
-        }
-        if (toDownload == 0) return;
-
-        for (String link : selection.keySet()) {
-            if (stopFetching)
-                break;
-            inspector.setProgress(downloaded, toDownload);
-            boolean isSelected = selection.get(link);
-            if (isSelected) {
-                downloaded++;
-                try {
-                    BibtexEntry entry = downloadEntry(link);
-                    inspector.addEntry(entry);
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-
-    }
-
-
-    public String getTitle() {
-        return "Google Scholar";
-    }
-
-    public String getKeyName() {
-        return "Google Scholar";
-    }
-
-    public URL getIcon() {
-        return GUIGlobals.getIconUrl("www");
-    }
-
-    public String getHelpPage() {
-        return "GoogleScholarHelp.html";
-    }
-
-    public JPanel getOptionsPanel() {
-        return null;
-    }
-
-    public void stopFetching() {
-        stopFetching = true;
-    }
-
-
-    private void save(String filename, String content) throws IOException {
-        BufferedWriter out = new BufferedWriter(new FileWriter(filename));
-        out.write(content);
-        out.close();
-    }
-
-    protected void runConfig() throws IOException {
-        String urlQuery;
-        try {
-            URL url;
-            URLDownload ud;
-            url = new URL("http://scholar.google.com");
-            ud = new URLDownload(url);
-            ud.download();
-            url = new URL(URL_SETTING);
-            ud = new URLDownload(url);
-            ud.download();
-            //save("setting.html", ud.getStringContent());
-            String settingsPage = ud.getStringContent();
-            // Get the form items and their values from the page:
-            HashMap<String,String> formItems = getFormElements(settingsPage);
-            // Override the important ones:
-            formItems.put("scis", "yes");
-            formItems.put("scisf", "4");
-            formItems.put("num", String.valueOf(MAX_ENTRIES_TO_LOAD));
-            StringBuilder ub = new StringBuilder(URL_SETPREFS+"?");
-            for (Iterator<String> i = formItems.keySet().iterator(); i.hasNext();) {
-                String name = i.next();
-                ub.append(name).append("=").append(formItems.get(name));
-                if (i.hasNext())
-                    ub.append("&");
-            }
-            ub.append("&submit=");
-            // Download the URL to set preferences:
-            URL url_setprefs = new URL(ub.toString());
-            ud = new URLDownload(url_setprefs);
-            ud.download();
-
-        } catch (UnsupportedEncodingException ex) {
-            ex.printStackTrace();
-        }
-    }
-
-    /**
-     *
-     * @param query
-     *            The search term to query Google Scholar for.
-     * @return a list of IDs
-     * @throws java.io.IOException
-     */
-    protected Map<String, JLabel> getCitations(String query) throws IOException {
-        String urlQuery;
-        LinkedHashMap<String, JLabel> res = new LinkedHashMap<String, JLabel>();
-        try {
-            urlQuery = SEARCH_URL.replace(QUERY_MARKER, URLEncoder.encode(query, "UTF-8"));
-            int count = 1;
-            String nextPage = null;
-            while (((nextPage = getCitationsFromUrl(urlQuery, res)) != null)
-                    && (count < 2)) {
-                urlQuery = nextPage;
-                count++;
-                if (stopFetching)
-                    break;
-            }
-            return res;
-        } catch (UnsupportedEncodingException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    protected String getCitationsFromUrl(String urlQuery, Map<String, JLabel> ids) throws IOException {
-        URL url = new URL(urlQuery);
-        URLDownload ud = new URLDownload(url);
-        ud.download();
-        String cont = ud.getStringContent();
-        //save("query.html", cont);
-        Matcher m = BIBTEX_LINK_PATTERN.matcher(cont);
-        int lastRegionStart = 0;
-        while (m.find()) {
-            String link = m.group(1).replaceAll("&", "&");
-            String pText = null;
-            //System.out.println("regionStart: "+m.start());
-            String part = cont.substring(lastRegionStart, m.start());
-            Matcher titleS = TITLE_START_PATTERN.matcher(part);
-            Matcher titleE = TITLE_END_PATTERN.matcher(part);
-            boolean fS = titleS.find();
-            boolean fE = titleE.find();
-            //System.out.println("fs = "+fS+", fE = "+fE);
-            //System.out.println(titleS.end()+" : "+titleE.start());
-            if (fS && fE) {
-                if (titleS.end() < titleE.start()) {
-                    pText = part.substring(titleS.end(), titleE.start());
-                }
-                else pText = part;
-            }
-            else
-                pText = link;
-
-            pText = pText.replaceAll("\\[PDF\\]", "");
-            JLabel preview = new JLabel("<html>"+pText+"</html>");
-            ids.put(link, preview);
-
-            // See if we can extract the link Google Scholar puts on the entry's title.
-            // That will be set as "url" for the entry if downloaded:
-            Matcher linkMatcher = LINK_PATTERN.matcher(pText);
-            if (linkMatcher.find())
-                entryLinks.put(link, linkMatcher.group(1));
-
-            lastRegionStart = m.end();
-        }
-
-        /*m = NEXT_PAGE_PATTERN.matcher(cont);
-        if (m.find()) {
-            System.out.println("NEXT: "+URL_START+m.group(1).replaceAll("&", "&"));
-            return URL_START+m.group(1).replaceAll("&", "&");
-        }
-        else*/
-        return null;
-    }
-
-    protected BibtexEntry downloadEntry(String link) throws IOException {
-        try {
-            URL url = new URL(URL_START+link);
-            URLDownload ud = new URLDownload(url);
-            ud.download();
-            String s = ud.getStringContent();
-            BibtexParser bp = new BibtexParser(new StringReader(s));
-            ParserResult pr = bp.parse();
-            if ((pr != null) && (pr.getDatabase() != null)) {
-                Collection<BibtexEntry> entries = pr.getDatabase().getEntries();
-                if (entries.size() == 1) {
-                    BibtexEntry entry = entries.iterator().next();
-                    if (clearKeys)
-                        entry.setField(BibtexFields.KEY_FIELD, null);
-                    // If the entry's url field is not set, and we have stored an url for this
-                    // entry, set it:
-                    if (entry.getField("url") == null) {
-                        String storedUrl = entryLinks.get(link);
-                        if (storedUrl != null)
-                            entry.setField("url", storedUrl);
-                    }
-                    
-                    // Clean up some remaining HTML code from Elsevier(?) papers
-                    // Search for: Poincare algebra
-                    // to see an example
-                    String title = (String) entry.getField("title");
-                    if (title != null) {
-                        String newtitle = title.replaceAll("<.?i>([^<]*)</i>","$1");
-                        if(!newtitle.equals(title)) {
-                            entry.setField("title",newtitle);
-                        }
-                    }
-                    
-                    return entry;
-                }
-                else if (entries.size() == 0) {
-                    System.out.println("No entry found! ("+link+")");
-                    return null;
-                }
-                else {
-                    System.out.println(entries.size()+" entries found! ("+link+")");
-                    return null;
-                }
-            }
-            else {
-                System.out.println("Parser failed! ("+link+")");
-                return null;
-
-            }
-        } catch (MalformedURLException ex) {
-            ex.printStackTrace();
-            return null;
-        }
-    }
-
-
-    static Pattern inputPattern = Pattern.compile("<input type=([^ ]+) name=([^ ]+) value=([^> ]+)");
-    public static HashMap<String,String> getFormElements(String page) {
-        Matcher m = inputPattern.matcher(page);
-        HashMap<String,String> items = new HashMap<String, String>();
-        while (m.find()) {
-            String name = m.group(2);
-            if ((name.length() > 2) && (name.charAt(0) == '"')
-                    && (name.charAt(name.length()-1) == '"'))
-                name = name.substring(1, name.length()-1);
-            String value = m.group(3);
-            if ((value.length() > 2) && (value.charAt(0) == '"')
-                    && (value.charAt(value.length()-1) == '"'))
-                value = value.substring(1, value.length()-1);
-            items.put(name, value);
-        }
-        return items;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import net.sf.jabref.*;
+import net.sf.jabref.gui.FetcherPreviewDialog;
+import net.sf.jabref.net.URLDownload;
+import net.sf.jabref.util.NameListNormalizer;
+
+import javax.swing.*;
+import java.io.*;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+public class GoogleScholarFetcher implements PreviewEntryFetcher {
+
+    private boolean hasRunConfig = false;
+    private boolean clearKeys = true; // Should we clear the keys so new ones can be generated?
+    protected static int MAX_ENTRIES_TO_LOAD = 50;
+    final static String QUERY_MARKER = "___QUERY___";
+    final static String URL_START = "http://scholar.google.com";
+    final static String URL_SETTING = "http://scholar.google.com/scholar_settings";
+    final static String URL_SETPREFS = "http://scholar.google.com/scholar_setprefs";
+    final static String SEARCH_URL = URL_START+"/scholar?q="+QUERY_MARKER
+            +"&hl=en&btnG=Search";
+
+    final static Pattern BIBTEX_LINK_PATTERN = Pattern.compile("<a href=\"([^\"]*)\">[A-Za-z ]*BibTeX");
+    final static Pattern TITLE_START_PATTERN = Pattern.compile("<div class=\"gs_ri\">");
+    final static Pattern LINK_PATTERN = Pattern.compile("<h3 class=\"gs_rt\"><a href=\"([^\"]*)\">");
+    final static Pattern TITLE_END_PATTERN = Pattern.compile("<div class=\"gs_fl\">");
+
+    protected HashMap<String,String> entryLinks = new HashMap<String, String>();
+    //final static Pattern NEXT_PAGE_PATTERN = Pattern.compile(
+    //        "<a href=\"([^\"]*)\"><span class=\"SPRITE_nav_next\"> </span><br><span style=\".*\">Next</span></a>");
+
+    protected boolean stopFetching = false;
+
+
+    public int getWarningLimit() {
+        return 10;
+    }
+
+    public int getPreferredPreviewHeight() {
+        return 100;
+    }
+
+    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
+        return false;
+    }
+
+    public boolean processQueryGetPreview(String query, FetcherPreviewDialog preview, OutputPrinter status) {
+        entryLinks.clear();
+        stopFetching = false;
+        try {
+            if (!hasRunConfig) {
+                runConfig();
+                hasRunConfig = true;
+            }
+            Map<String, JLabel> citations = getCitations(query);
+            for (String link : citations.keySet()) {
+                preview.addEntry(link, citations.get(link));
+            }
+
+            return true;
+        } catch (IOException e) {
+            e.printStackTrace();
+            status.showMessage(Globals.lang("Error fetching from Google Scholar"));
+            return false;
+        }
+    }
+
+    public void getEntries(Map<String, Boolean> selection, ImportInspector inspector) {
+        int toDownload = 0, downloaded = 0;
+        for (String link : selection.keySet()) {
+            boolean isSelected = selection.get(link);
+            if (isSelected) toDownload++;
+        }
+        if (toDownload == 0) return;
+
+        for (String link : selection.keySet()) {
+            if (stopFetching)
+                break;
+            inspector.setProgress(downloaded, toDownload);
+            boolean isSelected = selection.get(link);
+            if (isSelected) {
+                downloaded++;
+                try {
+                    BibtexEntry entry = downloadEntry(link);
+                    inspector.addEntry(entry);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+
+    }
+
+
+    public String getTitle() {
+        return "Google Scholar";
+    }
+
+    public String getKeyName() {
+        return "Google Scholar";
+    }
+
+    public URL getIcon() {
+        return GUIGlobals.getIconUrl("www");
+    }
+
+    public String getHelpPage() {
+        return "GoogleScholarHelp.html";
+    }
+
+    public JPanel getOptionsPanel() {
+        return null;
+    }
+
+    public void stopFetching() {
+        stopFetching = true;
+    }
+
+
+    private void save(String filename, String content) throws IOException {
+        BufferedWriter out = new BufferedWriter(new FileWriter(filename));
+        out.write(content);
+        out.close();
+    }
+
+    protected void runConfig() throws IOException {
+        String urlQuery;
+        try {
+            URL url;
+            URLDownload ud;
+            url = new URL("http://scholar.google.com");
+            ud = new URLDownload(url);
+            ud.download();
+            url = new URL(URL_SETTING);
+            ud = new URLDownload(url);
+            ud.download();
+            //save("setting.html", ud.getStringContent());
+            String settingsPage = ud.getStringContent();
+            // Get the form items and their values from the page:
+            HashMap<String,String> formItems = getFormElements(settingsPage);
+            // Override the important ones:
+            formItems.put("scis", "yes");
+            formItems.put("scisf", "4");
+            formItems.put("num", String.valueOf(MAX_ENTRIES_TO_LOAD));
+            StringBuilder ub = new StringBuilder(URL_SETPREFS+"?");
+            for (Iterator<String> i = formItems.keySet().iterator(); i.hasNext();) {
+                String name = i.next();
+                ub.append(name).append("=").append(formItems.get(name));
+                if (i.hasNext())
+                    ub.append("&");
+            }
+            ub.append("&submit=");
+            // Download the URL to set preferences:
+            URL url_setprefs = new URL(ub.toString());
+            ud = new URLDownload(url_setprefs);
+            ud.download();
+
+        } catch (UnsupportedEncodingException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    /**
+     *
+     * @param query
+     *            The search term to query Google Scholar for.
+     * @return a list of IDs
+     * @throws java.io.IOException
+     */
+    protected Map<String, JLabel> getCitations(String query) throws IOException {
+        String urlQuery;
+        LinkedHashMap<String, JLabel> res = new LinkedHashMap<String, JLabel>();
+        try {
+            urlQuery = SEARCH_URL.replace(QUERY_MARKER, URLEncoder.encode(query, "UTF-8"));
+            int count = 1;
+            String nextPage = null;
+            while (((nextPage = getCitationsFromUrl(urlQuery, res)) != null)
+                    && (count < 2)) {
+                urlQuery = nextPage;
+                count++;
+                if (stopFetching)
+                    break;
+            }
+            return res;
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    protected String getCitationsFromUrl(String urlQuery, Map<String, JLabel> ids) throws IOException {
+        URL url = new URL(urlQuery);
+        URLDownload ud = new URLDownload(url);
+        ud.download();
+        String cont = ud.getStringContent();
+        //save("query.html", cont);
+        Matcher m = BIBTEX_LINK_PATTERN.matcher(cont);
+        int lastRegionStart = 0;
+        while (m.find()) {
+            String link = m.group(1).replaceAll("&", "&");
+            String pText = null;
+            //System.out.println("regionStart: "+m.start());
+            String part = cont.substring(lastRegionStart, m.start());
+            Matcher titleS = TITLE_START_PATTERN.matcher(part);
+            Matcher titleE = TITLE_END_PATTERN.matcher(part);
+            boolean fS = titleS.find();
+            boolean fE = titleE.find();
+            //System.out.println("fs = "+fS+", fE = "+fE);
+            //System.out.println(titleS.end()+" : "+titleE.start());
+            if (fS && fE) {
+                if (titleS.end() < titleE.start()) {
+                    pText = part.substring(titleS.end(), titleE.start());
+                }
+                else pText = part;
+            }
+            else
+                pText = link;
+
+            pText = pText.replaceAll("\\[PDF\\]", "");
+            JLabel preview = new JLabel("<html>"+pText+"</html>");
+            ids.put(link, preview);
+
+            // See if we can extract the link Google Scholar puts on the entry's title.
+            // That will be set as "url" for the entry if downloaded:
+            Matcher linkMatcher = LINK_PATTERN.matcher(pText);
+            if (linkMatcher.find())
+                entryLinks.put(link, linkMatcher.group(1));
+
+            lastRegionStart = m.end();
+        }
+
+        /*m = NEXT_PAGE_PATTERN.matcher(cont);
+        if (m.find()) {
+            System.out.println("NEXT: "+URL_START+m.group(1).replaceAll("&", "&"));
+            return URL_START+m.group(1).replaceAll("&", "&");
+        }
+        else*/
+        return null;
+    }
+
+    protected BibtexEntry downloadEntry(String link) throws IOException {
+        try {
+            URL url = new URL(URL_START+link);
+            URLDownload ud = new URLDownload(url);
+            ud.download();
+            String s = ud.getStringContent();
+            BibtexParser bp = new BibtexParser(new StringReader(s));
+            ParserResult pr = bp.parse();
+            if ((pr != null) && (pr.getDatabase() != null)) {
+                Collection<BibtexEntry> entries = pr.getDatabase().getEntries();
+                if (entries.size() == 1) {
+                    BibtexEntry entry = entries.iterator().next();
+                    if (clearKeys)
+                        entry.setField(BibtexFields.KEY_FIELD, null);
+                    // If the entry's url field is not set, and we have stored an url for this
+                    // entry, set it:
+                    if (entry.getField("url") == null) {
+                        String storedUrl = entryLinks.get(link);
+                        if (storedUrl != null)
+                            entry.setField("url", storedUrl);
+                    }
+                    
+                    // Clean up some remaining HTML code from Elsevier(?) papers
+                    // Search for: Poincare algebra
+                    // to see an example
+                    String title = (String) entry.getField("title");
+                    if (title != null) {
+                        String newtitle = title.replaceAll("<.?i>([^<]*)</i>","$1");
+                        if(!newtitle.equals(title)) {
+                            entry.setField("title",newtitle);
+                        }
+                    }
+                    
+                    return entry;
+                }
+                else if (entries.size() == 0) {
+                    System.out.println("No entry found! ("+link+")");
+                    return null;
+                }
+                else {
+                    System.out.println(entries.size()+" entries found! ("+link+")");
+                    return null;
+                }
+            }
+            else {
+                System.out.println("Parser failed! ("+link+")");
+                return null;
+
+            }
+        } catch (MalformedURLException ex) {
+            ex.printStackTrace();
+            return null;
+        }
+    }
+
+
+    static Pattern inputPattern = Pattern.compile("<input type=([^ ]+) name=([^ ]+) value=([^> ]+)");
+    public static HashMap<String,String> getFormElements(String page) {
+        Matcher m = inputPattern.matcher(page);
+        HashMap<String,String> items = new HashMap<String, String>();
+        while (m.find()) {
+            String name = m.group(2);
+            if ((name.length() > 2) && (name.charAt(0) == '"')
+                    && (name.charAt(name.length()-1) == '"'))
+                name = name.substring(1, name.length()-1);
+            String value = m.group(3);
+            if ((value.length() > 2) && (value.charAt(0) == '"')
+                    && (value.charAt(value.length()-1) == '"'))
+                value = value.substring(1, value.length()-1);
+            items.put(name, value);
+        }
+        return items;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/HTMLConverter.java b/src/java/net/sf/jabref/imports/HTMLConverter.java
index 9513aec..dd7fa56 100644
--- a/src/java/net/sf/jabref/imports/HTMLConverter.java
+++ b/src/java/net/sf/jabref/imports/HTMLConverter.java
@@ -1,852 +1,852 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.util.HashMap;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.Globals;
-
-public class HTMLConverter implements LayoutFormatter {
-
-    /*   Portions © International Organization for Standardization 1986:
-     Permission to copy in any form is granted for use with
-     conforming SGML systems and applications as defined in
-     ISO 8879, provided this notice is included in all copies.
-    */
-
-
-	// most of the LaTeX commands can be read at http://en.wikibooks.org/wiki/LaTeX/Accents
-	// The symbols can be looked at http://www.fileformat.info/info/unicode/char/a4/index.htm. Replace "a4" with the U+ number
-	// http://detexify.kirelabs.org/classify.html and http://www.ctan.org/tex-archive/info/symbols/comprehensive/ might help to find the right LaTeX command
-        // http://llg.cubic.org/docs/ent2latex.html and http://www.w3.org/TR/xml-entity-names/byalpha.html are also useful
-        // as well as http://www.w3.org/Math/characters/unicode.xml
-    
-    
-    // An array of arrays of strings in the format:
-    // {"decimal number of HTML entity", "text HTML entity", "corresponding LaTeX command"}
-    // Leaving a field empty is OK as it then will not be included
-    private String[][] conversionList = new String[][]{
-        {"160", "nbsp", "\\{~\\}"}, // no-break space = non-breaking space, 
-        //                                 U+00A0 ISOnum 
-        {"161", "iexcl", "\\{\\\\textexclamdown\\}"}, // inverted exclamation mark, U+00A1 ISOnum
-        {"162", "cent", "\\{\\\\textcent\\}"}, // cent sign, U+00A2 ISOnum  
-        {"163", "pound", "\\{\\\\pounds\\}"}, // pound sign, U+00A3 ISOnum
-        {"164", "curren", "\\{\\\\textcurrency\\}"}, // currency sign, U+00A4 ISOnum  
-        {"165", "yen", "\\{\\\\textyen\\}"}, // yen sign = yuan sign, U+00A5 ISOnum  
-        {"166", "brvbar", "\\{\\\\textbrokenbar\\}"}, // broken bar = broken vertical bar, 
-        //                                 U+00A6 ISOnum 
-        {"167", "sect", "\\{\\\\S\\}"}, // section sign, U+00A7 ISOnum  
-        {"168", "uml", "\\{\\\\\"\\{\\}\\}"}, // diaeresis = spacing diaeresis, 
-        //                                 U+00A8 ISOdia 
-        {"169", "copy", "\\{\\\\copyright\\}"}, // copyright sign, U+00A9 ISOnum
-        {"170", "ordf", "\\{\\\\textordfeminine\\}"}, // feminine ordinal indicator, U+00AA ISOnum
-        {"171", "laquo", "\\{\\\\guillemotleft\\}"}, // left-pointing double angle quotation mark
-        //                                 = left pointing guillemet, U+00AB ISOnum 
-        {"172", "not", "\\$\\\\neg\\$"}, // not sign, U+00AC ISOnum  
-        {"173", "shy", "\\\\-"}, // soft hyphen = discretionary hyphen, 
-        //                                 U+00AD ISOnum 
-        {"174", "reg", "\\{\\\\textregistered\\}"}, // registered sign = registered trade mark sign,
-        //                                 U+00AE ISOnum 
-        {"175", "macr", "\\{\\\\=\\{\\}\\}"}, // macron = spacing macron = overline 
-        //                                 = APL overbar, U+00AF ISOdia 
-        {"176", "deg", "\\$\\\\deg\\$"}, // degree sign, U+00B0 ISOnum  
-        {"177", "plusmn", "\\$\\\\pm\\$"}, // plus-minus sign = plus-or-minus sign, 
-        //                                 U+00B1 ISOnum 
-        {"178", "sup2", "\\\\textsuperscript\\{2\\}"}, // superscript two = superscript digit two 
-        //                                 = squared, U+00B2 ISOnum 
-        {"179", "sup3", "\\\\textsuperscript\\{3\\}"}, // superscript three = superscript digit three 
-        //                                 = cubed, U+00B3 ISOnum 
-        {"180", "acute", "\\{\\\\'\\{\\}\\}"}, // acute accent = spacing acute, 
-        //                                 U+00B4 ISOdia 
-        {"181", "micro", "\\$\\\\mu\\$"}, // micro sign, U+00B5 ISOnum  
-        {"182", "para", "\\{\\\\P\\}"}, // pilcrow sign = paragraph sign, 
-        //                                 U+00B6 ISOnum 
-        {"183", "middot", "\\$\\\\cdot\\$"}, // middle dot = Georgian comma 
-        //                                 = Greek middle dot, U+00B7 ISOnum 
-        {"184", "cedil", "\\{\\\\c\\{\\}\\}"}, // cedilla = spacing cedilla, U+00B8 ISOdia  
-        {"185", "sup1", "\\\\textsuperscript\\{1\\}"}, // superscript one = superscript digit one,
-        //                                 U+00B9 ISOnum 
-        {"186", "ordm", "\\{\\\\textordmasculine\\}"}, // masculine ordinal indicator,
-        //                                 U+00BA ISOnum 
-        {"187", "raquo", "\\{\\\\guillemotright\\}"}, // right-pointing double angle quotation mark
-        //                                 = right pointing guillemet, U+00BB ISOnum 
-        {"188", "frac14", "\\$\\\\sfrac\\{1\\}\\{4\\}\\$"}, // vulgar fraction one quarter 
-        //                                 = fraction one quarter, U+00BC ISOnum 
-        {"189", "frac12", "\\$\\\\sfrac\\{1\\}\\{2\\}\\$"}, // vulgar fraction one half 
-        //                                 = fraction one half, U+00BD ISOnum 
-        {"190", "frac34", "\\$\\\\sfrac\\{3\\}\\{4\\}\\$"}, // vulgar fraction three quarters 
-        //                                 = fraction three quarters, U+00BE ISOnum 
-        {"191", "iquest", "\\{\\\\textquestiondown\\}"}, // inverted question mark 
-        //                                 = turned question mark, U+00BF ISOnum 
-        {"192", "Agrave", "\\{\\\\`\\{A\\}\\}"}, // latin capital letter A with grave
-        //                                 = latin capital letter A grave,
-        //                                 U+00C0 ISOlat1 
-        {"193", "Aacute", "\\{\\\\'\\{A\\}\\}"}, // latin capital letter A with acute, 
-        //                                 U+00C1 ISOlat1 
-        {"194", "Acirc", "\\{\\\\\\^\\{A\\}\\}"}, // latin capital letter A with circumflex, 
-        //                                 U+00C2 ISOlat1 
-        {"195", "Atilde", "\\{\\\\~\\{A\\}\\}"}, // latin capital letter A with tilde, 
-        //                                 U+00C3 ISOlat1 
-        {"196", "Auml", "\\{\\\\\"\\{A\\}\\}"}, // latin capital letter A with diaeresis, 
-        //                                 U+00C4 ISOlat1 
-        {"197", "Aring", "\\{\\\\AA\\}"}, // latin capital letter A with ring above 
-        //                                 = latin capital letter A ring,
-        //                                 U+00C5 ISOlat1 
-        {"198", "AElig", "\\{\\\\AE\\}"}, // latin capital letter AE 
-        //                                 = latin capital ligature AE,
-        //                                 U+00C6 ISOlat1 
-        {"199", "Ccedil", "\\{\\\\c\\{C\\}\\}"}, // latin capital letter C with cedilla,
-        //                                 U+00C7 ISOlat1 
-        {"200", "Egrave", "\\{\\\\`\\{E\\}\\}"}, // latin capital letter E with grave,
-        //                                 U+00C8 ISOlat1 
-        {"201", "Eacute", "\\{\\\\'\\{E\\}\\}"}, // latin capital letter E with acute, 
-        //                                 U+00C9 ISOlat1 
-        {"202", "Ecirc", "\\{\\\\\\^\\{E\\}\\}"}, // latin capital letter E with circumflex, 
-        //                                 U+00CA ISOlat1 
-        {"203", "Euml", "\\{\\\\\"\\{E\\}\\}"}, // latin capital letter E with diaeresis, 
-        //                                 U+00CB ISOlat1 
-        {"204", "Igrave", "\\{\\\\`\\{I\\}\\}"}, // latin capital letter I with grave,
-        //                                 U+00CC ISOlat1 
-        {"205", "Iacute", "\\{\\\\'\\{I\\}\\}"}, // latin capital letter I with acute, 
-        //                                 U+00CD ISOlat1 
-        {"206", "Icirc", "\\{\\\\\\^\\{I\\}\\}"}, // latin capital letter I with circumflex, 
-        //                                 U+00CE ISOlat1 
-        {"207", "Iuml", "\\{\\\\\"\\{I\\}\\}"}, // latin capital letter I with diaeresis, 
-        //                                 U+00CF ISOlat1 
-        {"208", "ETH", "\\{\\\\DH\\}"}, // latin capital letter ETH, U+00D0 ISOlat1  
-        {"209", "Ntilde", "\\{\\\\~\\{N\\}\\}"}, // latin capital letter N with tilde, 
-        //                                 U+00D1 ISOlat1 
-        {"210", "Ograve", "\\{\\\\`\\{O\\}\\}"}, // latin capital letter O with grave,
-        //                                 U+00D2 ISOlat1 
-        {"211", "Oacute", "\\{\\\\'\\{O\\}\\}"}, // latin capital letter O with acute, 
-        //                                 U+00D3 ISOlat1 
-        {"212", "Ocirc", "\\{\\\\\\^\\{O\\}\\}"}, // latin capital letter O with circumflex, 
-        //                                 U+00D4 ISOlat1 
-        {"213", "Otilde", "\\{\\\\~\\{O\\}\\}"}, // latin capital letter O with tilde, 
-        //                                 U+00D5 ISOlat1 
-        {"214", "Ouml", "\\{\\\\\"\\{O\\}\\}"}, // latin capital letter O with diaeresis, 
-        //                                 U+00D6 ISOlat1 
-        {"215", "times", "\\$\\\\times\\$"}, // multiplication sign, U+00D7 ISOnum  
-        {"216", "Oslash", "\\{\\\\O\\}"}, // latin capital letter O with stroke 
-        //                                 = latin capital letter O slash,
-        //                                 U+00D8 ISOlat1 
-        {"217", "Ugrave", "\\{\\\\`\\{U\\}\\}"}, // latin capital letter U with grave,
-        //                                 U+00D9 ISOlat1 
-        {"218", "Uacute", "\\{\\\\'\\{U\\}\\}"}, // latin capital letter U with acute, 
-        //                                 U+00DA ISOlat1 
-        {"219", "Ucirc", "\\{\\\\\\^\\{U\\}\\}"}, // latin capital letter U with circumflex, 
-        //                                 U+00DB ISOlat1 
-        {"220", "Uuml", "\\{\\\\\"\\{U\\}\\}"}, // latin capital letter U with diaeresis, 
-        //                                 U+00DC ISOlat1 
-        {"221", "Yacute", "\\{\\\\'\\{Y\\}\\}"}, // latin capital letter Y with acute, 
-        //                                 U+00DD ISOlat1 
-        {"222", "THORN", "\\{\\\\TH\\}"}, // latin capital letter THORN, 
-        //                                 U+00DE ISOlat1 
-        {"223", "szlig", "\\{\\\\ss\\}"}, // latin small letter sharp s = ess-zed,
-        //                                 U+00DF ISOlat1 
-        {"224", "agrave", "\\{\\\\`\\{a\\}\\}"}, // latin small letter a with grave
-        //                                 = latin small letter a grave,
-        //                                 U+00E0 ISOlat1 
-        {"225", "aacute", "\\{\\\\'\\{a\\}\\}"}, // latin small letter a with acute, 
-        //                                 U+00E1 ISOlat1 
-        {"226", "acirc", "\\{\\\\\\^\\{a\\}\\}"}, // latin small letter a with circumflex, 
-        //                                 U+00E2 ISOlat1 
-        {"227", "atilde", "\\{\\\\~\\{a\\}\\}"}, // latin small letter a with tilde, 
-        //                                 U+00E3 ISOlat1 
-        {"228", "auml", "\\{\\\\\"\\{a\\}\\}"}, // latin small letter a with diaeresis, 
-        //                                 U+00E4 ISOlat1 
-        {"229", "aring", "\\{\\\\aa\\}"}, // latin small letter a with ring above 
-        //                                 = latin small letter a ring,
-        //                                 U+00E5 ISOlat1 
-        {"230", "aelig", "\\{\\\\ae\\}"}, // latin small letter ae 
-        //                                 = latin small ligature ae, U+00E6 ISOlat1 
-        {"231", "ccedil", "\\{\\\\c\\{c\\}\\}"}, // latin small letter c with cedilla,
-        //                                 U+00E7 ISOlat1 
-        {"232", "egrave", "\\{\\\\`\\{e\\}\\}"}, // latin small letter e with grave,
-        //                                 U+00E8 ISOlat1 
-        {"233", "eacute", "\\{\\\\'\\{e\\}\\}"}, // latin small letter e with acute, 
-        //                                 U+00E9 ISOlat1 
-        {"234", "ecirc", "\\{\\\\\\^\\{e\\}\\}"}, // latin small letter e with circumflex, 
-        //                                 U+00EA ISOlat1 
-        {"235", "euml", "\\{\\\\\"\\{e\\}\\}"}, // latin small letter e with diaeresis, 
-        //                                 U+00EB ISOlat1 
-        {"236", "igrave", "\\{\\\\`\\{\\\\i\\}\\}"}, // latin small letter i with grave,
-        //                                 U+00EC ISOlat1 
-        {"237", "iacute", "\\{\\\\'\\{\\\\i\\}\\}"}, // latin small letter i with acute, 
-        //                                 U+00ED ISOlat1 
-        {"238", "icirc", "\\{\\\\\\^\\{\\\\i\\}\\}"}, // latin small letter i with circumflex, 
-        //                                 U+00EE ISOlat1 
-        {"239", "iuml", "\\{\\\\\"\\{\\\\i\\}\\}"}, // latin small letter i with diaeresis, 
-        //                                 U+00EF ISOlat1 
-        {"240", "eth", "\\{\\\\dh\\}"}, // latin small letter eth, U+00F0 ISOlat1  
-        {"241", "ntilde", "\\{\\\\~\\{n\\}\\}"}, // latin small letter n with tilde, 
-        //                                 U+00F1 ISOlat1 
-        {"242", "ograve", "\\{\\\\`\\{o\\}\\}"}, // latin small letter o with grave,
-        //                                 U+00F2 ISOlat1 
-        {"243", "oacute", "\\{\\\\'\\{o\\}\\}"}, // latin small letter o with acute, 
-        //                                 U+00F3 ISOlat1 
-        {"244", "ocirc", "\\{\\\\\\^\\{o\\}\\}"}, // latin small letter o with circumflex, 
-        //                                 U+00F4 ISOlat1 
-        {"245", "otilde", "\\{\\\\~\\{o\\}\\}"}, // latin small letter o with tilde, 
-        //                                 U+00F5 ISOlat1 
-        {"246", "ouml", "\\{\\\\\"\\{o\\}\\}"}, // latin small letter o with diaeresis, 
-        //                                 U+00F6 ISOlat1 
-        {"247", "divide", "\\$\\\\div\\$"}, // division sign, U+00F7 ISOnum  
-        {"248", "oslash", "\\{\\\\o\\}"}, // latin small letter o with stroke, 
-        //                                 = latin small letter o slash,
-        //                                 U+00F8 ISOlat1 
-        {"249", "ugrave", "\\{\\\\`\\{u\\}\\}"}, // latin small letter u with grave,
-        //                                 U+00F9 ISOlat1 
-        {"250", "uacute", "\\{\\\\'\\{u\\}\\}"}, // latin small letter u with acute, 
-        //                                 U+00FA ISOlat1 
-        {"251", "ucirc", "\\{\\\\\\^\\{u\\}\\}"}, // latin small letter u with circumflex, 
-        //                                 U+00FB ISOlat1 
-        {"252", "uuml", "\\{\\\\\"\\{u\\}\\}"}, // latin small letter u with diaeresis, 
-        //                                 U+00FC ISOlat1 
-        {"253", "yacute", "\\{\\\\'\\{y\\}\\}"}, // latin small letter y with acute, 
-        //                                 U+00FD ISOlat1 
-        {"254", "thorn", "\\{\\\\th\\}"}, // latin small letter thorn, 
-        //                                 U+00FE ISOlat1 
-        {"255", "yuml", "\\{\\\\\"\\{y\\}\\}"}, // latin small letter y with diaeresis, 
-        //                                 U+00FF ISOlat1 
-        {"402", "fnof", "\\$f\\$"}, // latin small f with hook = function 
-        //                                   = florin, U+0192 ISOtech 
-
-        /* Greek */
-        {"913", "Alpha", "\\{\\$\\\\Alpha\\$\\}"}, // greek capital letter alpha, U+0391  
-        {"914", "Beta", "\\{\\$\\\\Beta\\$\\}"}, // greek capital letter beta, U+0392  
-        {"915", "Gamma", "\\{\\$\\\\Gamma\\$\\}"}, // greek capital letter gamma, 
-        //                                   U+0393 ISOgrk3 
-        {"916", "Delta", "\\{\\$\\\\Delta\\$\\}"}, // greek capital letter delta, 
-        //                                   U+0394 ISOgrk3 
-        {"917", "Epsilon", "\\{\\$\\\\Epsilon\\$\\}"}, // greek capital letter epsilon, U+0395  
-        {"918", "Zeta", "\\{\\$\\\\Zeta\\$\\}"}, // greek capital letter zeta, U+0396  
-        {"919", "Eta", "\\{\\$\\\\Eta\\$\\}"}, // greek capital letter eta, U+0397  
-        {"920", "Theta", "\\{\\$\\\\Theta\\$\\}"}, // greek capital letter theta, 
-        //                                   U+0398 ISOgrk3 
-        {"921", "Iota", "\\{\\$\\\\Iota\\$\\}"}, // greek capital letter iota, U+0399  
-        {"922", "Kappa", "\\{\\$\\\\Kappa\\$\\}"}, // greek capital letter kappa, U+039A  
-        {"923", "Lambda", "\\{\\$\\\\Lambda\\$\\}"}, // greek capital letter lambda, 
-        //                                   U+039B ISOgrk3 
-        {"924", "Mu", "\\{\\$\\\\Mu\\$\\}"}, // greek capital letter mu, U+039C  
-        {"925", "Nu", "\\{\\$\\\\Nu\\$\\}"}, // greek capital letter nu, U+039D  
-        {"926", "Xi", "\\{\\$\\\\Xi\\$\\}"}, // greek capital letter xi, U+039E ISOgrk3  
-        {"927", "Omicron", "\\{\\$\\\\Omicron\\$\\}"}, // greek capital letter omicron, U+039F  
-        {"928", "Pi", "\\{\\$\\\\Pi\\$\\}"}, // greek capital letter pi, U+03A0 ISOgrk3  
-        {"929", "Rho", "\\{\\$\\\\Rho\\$\\}"}, // greek capital letter rho, U+03A1  
-        /* there is no Sigmaf, and no U+03A2 character either */
-        {"931", "Sigma", "\\{\\$\\\\Sigma\\$\\}"}, // greek capital letter sigma, 
-        //                                   U+03A3 ISOgrk3 
-        {"932", "Tau", "\\{\\$\\\\Tau\\$\\}"}, // greek capital letter tau, U+03A4  
-        {"933", "Upsilon", "\\{\\$\\\\Upsilon\\$\\}"}, // greek capital letter upsilon, 
-        //                                   U+03A5 ISOgrk3 
-        {"934", "Phi", "\\{\\$\\\\Phi\\$\\}"}, // greek capital letter phi, 
-        //                                   U+03A6 ISOgrk3 
-        {"935", "Chi", "\\{\\$\\\\Chi\\$\\}"}, // greek capital letter chi, U+03A7  
-        {"936", "Psi", "\\{\\$\\\\Psi\\$\\}"}, // greek capital letter psi, 
-        //                                   U+03A8 ISOgrk3 
-        {"937", "Omega", "\\{\\$\\\\Omega\\$\\}"}, // greek capital letter omega, 
-        //                                   U+03A9 ISOgrk3 
-
-        {"945", "alpha", "\\$\\\\alpha\\$"}, // greek small letter alpha, 
-        //                                   U+03B1 ISOgrk3 
-        {"946", "beta", "\\$\\\\beta\\$"}, // greek small letter beta, U+03B2 ISOgrk3  
-        {"947", "gamma", "\\$\\\\gamma\\$"}, // greek small letter gamma, 
-        //                                   U+03B3 ISOgrk3 
-        {"948", "delta", "\\$\\\\delta\\$"}, // greek small letter delta, 
-        //                                   U+03B4 ISOgrk3 
-        {"949", "epsilon", "\\$\\\\epsilon\\$"}, // greek small letter epsilon, 
-        //                                   U+03B5 ISOgrk3 
-        {"950", "zeta", "\\$\\\\zeta\\$"}, // greek small letter zeta, U+03B6 ISOgrk3  
-        {"951", "eta", "\\$\\\\eta\\$"}, // greek small letter eta, U+03B7 ISOgrk3  
-        {"952", "theta", "\\$\\\\theta\\$"}, // greek small letter theta, 
-        //                                   U+03B8 ISOgrk3 
-        {"953", "iota", "\\$\\\\iota\\$"}, // greek small letter iota, U+03B9 ISOgrk3  
-        {"954", "kappa", "\\$\\\\kappa\\$"}, // greek small letter kappa, 
-        //                                   U+03BA ISOgrk3 
-        {"955", "lambda", "\\$\\\\lambda\\$"}, // greek small letter lambda, 
-        //                                   U+03BB ISOgrk3 
-        {"956", "mu", "\\$\\\\mu\\$"}, // greek small letter mu, U+03BC ISOgrk3  
-        {"957", "nu", "\\$\\\\nu\\$"}, // greek small letter nu, U+03BD ISOgrk3  
-        {"958", "xi", "\\$\\\\xi\\$"}, // greek small letter xi, U+03BE ISOgrk3  
-        {"959", "omicron", "\\$\\\\omicron\\$"}, // greek small letter omicron, U+03BF NEW  
-        {"960", "pi", "\\$\\\\phi\\$"}, // greek small letter pi, U+03C0 ISOgrk3  
-        {"961", "rho", "\\$\\\\rho\\$"}, // greek small letter rho, U+03C1 ISOgrk3  
-        {"962", "sigmaf", "\\$\\\\varsigma\\$"}, // greek small letter final sigma, 
-        //                                   U+03C2 ISOgrk3 
-        {"963", "sigma", "\\$\\\\sigma\\$"}, // greek small letter sigma, 
-        //                                   U+03C3 ISOgrk3 
-        {"964", "tau", "\\$\\\\tau\\$"}, // greek small letter tau, U+03C4 ISOgrk3  
-        {"965", "upsilon", "\\$\\\\upsilon\\$"}, // greek small letter upsilon, 
-        {"", "upsi", "\\$\\\\upsilon\\$"}, // alias 
-        //                                   U+03C5 ISOgrk3 
-        {"966", "phi", "\\$\\\\phi\\$"}, // greek small letter phi, U+03C6 ISOgrk3  
-        {"967", "chi", "\\$\\\\chi\\$"}, // greek small letter chi, U+03C7 ISOgrk3  
-        {"968", "psi", "\\$\\\\psi\\$"}, // greek small letter psi, U+03C8 ISOgrk3  
-        {"969", "omega", "\\$\\\\omega\\$"}, // greek small letter omega, 
-        //                                   U+03C9 ISOgrk3 
-        {"977", "thetasym", "\\$\\\\vartheta\\$"}, // greek small letter theta symbol, 
-        {"", "thetav", "\\$\\\\vartheta\\$"}, // greek small letter theta symbol, 
-        {"", "vartheta", "\\$\\\\vartheta\\$"}, // greek small letter theta symbol, 
-        //                                   U+03D1 NEW 
-        {"978", "upsih", "\\{\\$\\\\Upsilon\\$\\}"}, // greek upsilon with hook symbol, 
-        //                                   U+03D2 NEW 
-        {"982", "piv", "\\$\\\\varphi\\$"}, // greek pi symbol, U+03D6 ISOgrk3  
-
-        /* General Punctuation */
-        {"8226", "bull", "\\$\\\\bullet\\$"}, // bullet = black small circle, 
-        //                                    U+2022 ISOpub  
-        /* bullet is NOT the same as bullet operator, U+2219 */
-        {"8230", "hellip", "\\{\\\\ldots\\}"}, // horizontal ellipsis = three dot leader, 
-        //                                    U+2026 ISOpub  
-        {"8242", "prime", "\\$\\\\prime\\$"}, // prime = minutes = feet, U+2032 ISOtech  
-        {"8243", "Prime", "\\$\\{''\\}\\$"}, // double prime = seconds = inches, 
-        //                                    U+2033 ISOtech 
-        {"8254", "oline", "\\{\\\\=\\{\\}\\}"}, // overline = spacing overscore, 
-        //                                    U+203E NEW 
-        {"8260", "frasl", "/"}, // fraction slash, U+2044 NEW  
-
-        /* Letterlike Symbols */
-        {"8472", "weierp", "\\$\\\\wp\\$"}, // script capital P = power set 
-        //                                    = Weierstrass p, U+2118 ISOamso 
-        {"8465", "image", "\\{\\$\\\\Im\\$\\}"}, // blackletter capital I = imaginary part, 
-        //                                    U+2111 ISOamso 
-        {"8476", "real", "\\{\\$\\\\Re\\$\\}"}, // blackletter capital R = real part symbol, 
-        //                                    U+211C ISOamso 
-        {"8482", "trade", "\\{\\\\texttrademark\\}"}, // trade mark sign, U+2122 ISOnum
-        {"8501", "alefsym", "\\$\\\\aleph\\$"}, // alef symbol = first transfinite cardinal, 
-        //                                    U+2135 NEW 
-        /*    alef symbol is NOT the same as hebrew letter alef,
-         U+05D0 although the same glyph could be used to depict both characters */
-        /* Arrows */
-        {"8592", "larr", "\\$\\\\leftarrow\\$"}, // leftwards arrow, U+2190 ISOnum
-        {"8593", "uarr", "\\$\\\\uparrow\\$"}, // upwards arrow, U+2191 ISOnum
-        {"8594", "rarr", "\\$\\\\rightarrow\\$"}, // rightwards arrow, U+2192 ISOnum
-        {"8595", "darr", "\\$\\\\downarrow\\$"}, // downwards arrow, U+2193 ISOnum
-        {"8596", "harr", "\\$\\\\leftrightarrow\\$"}, // left right arrow, U+2194 ISOamsa  
-        {"8629", "crarr", "\\$\\\\dlsh\\$"}, // downwards arrow with corner leftwards 
-        //                                    = carriage return, U+21B5 NEW - require mathabx
-        {"8656", "lArr", "\\{\\$\\\\Leftarrow\\$\\}"}, // leftwards double arrow, U+21D0 ISOtech
-        /*  ISO 10646 does not say that lArr is the same as the 'is implied by' arrow
-         but also does not have any other character for that function. So ? lArr can
-         be used for 'is implied by' as ISOtech suggests */
-        {"8657", "uArr", "\\{\\$\\\\Uparrow\\$\\}"}, // upwards double arrow, U+21D1 ISOamsa
-        {"8658", "rArr", "\\{\\$\\\\Rightarrow\\$\\}"}, // rightwards double arrow,
-        //                                     U+21D2 ISOtech 
-        /*   ISO 10646 does not say this is the 'implies' character but does not have 
-         another character with this function so ?
-         rArr can be used for 'implies' as ISOtech suggests */
-        {"8659", "dArr", "\\{\\$\\\\Downarrow\\$\\}"}, // downwards double arrow, U+21D3 ISOamsa  
-        {"8660", "hArr", "\\{\\$\\\\Leftrightarrow\\$\\}"}, // left right double arrow, 
-        //                                     U+21D4 ISOamsa 
-
-        /* Mathematical Operators */
-        {"8704", "forall", "\\$\\\\forall\\$"}, // for all, U+2200 ISOtech  
-        {"8706", "part", "\\$\\\\partial\\$"}, // partial differential, U+2202 ISOtech
-        {"8707", "exist", "\\$\\\\exists\\$"}, // there exists, U+2203 ISOtech
-        {"8709", "empty", "\\$\\\\emptyset\\$"}, // empty set = null set = diameter,
-        //                                    U+2205 ISOamso 
-        {"8711", "nabla", "\\$\\\\nabla\\$"}, // nabla = backward difference, 
-        //                                    U+2207 ISOtech 
-        {"8712", "isin", "\\$\\\\in\\$"}, // element of, U+2208 ISOtech
-        {"8713", "notin", "\\$\\\\notin\\$"}, // not an element of, U+2209 ISOtech
-        {"8715", "ni", "\\$\\\\ni\\$"}, // contains as member, U+220B ISOtech
-        /* should there be a more memorable name than 'ni'? */
-        {"8719", "prod", "\\$\\\\prod\\$"}, // n-ary product = product sign,
-        //                                    U+220F ISOamsb 
-        /*    prod is NOT the same character as U+03A0 'greek capital letter pi' though
-         the same glyph might be used for both  */
-        {"8721", "sum", "\\$\\\\sum\\$"}, // n-ary sumation, U+2211 ISOamsb  
-        /*    sum is NOT the same character as U+03A3 'greek capital letter sigma'
-         though the same glyph might be used for both */
-        {"8722", "minus", "\\$-\\$"}, // minus sign, U+2212 ISOtech  
-        {"8727", "lowast", "\\$\\\\ast\\$"}, // asterisk operator, U+2217 ISOtech  
-        {"8730", "radic", "\\$\\\\sqrt{}\\$"}, // square root = radical sign, 
-        //                                    U+221A ISOtech 
-        {"8733", "prop", "\\$\\\\propto\\$"}, // proportional to, U+221D ISOtech  
-        {"8734", "infin", "\\$\\\\infty\\$"}, // infinity, U+221E ISOtech  
-        {"8736", "ang", "\\$\\\\angle\\$"}, // angle, U+2220 ISOamso
-        {"8743", "and", "\\$\\\\land\\$"}, // logical and = wedge, U+2227 ISOtech
-        {"8744", "or", "\\$\\\\lor\\$"}, // logical or = vee, U+2228 ISOtech
-        {"8745", "cap", "\\$\\\\cap\\$"}, // intersection = cap, U+2229 ISOtech
-        {"8746", "cup", "\\$\\\\cup\\$"}, // union = cup, U+222A ISOtech
-        {"8747", "int", "\\$\\\\int\\$"}, // integral, U+222B ISOtech
-        {"8756", "there4", "\\$\\\\uptherefore\\$"}, // therefore, U+2234 ISOtech; only in LaTeX package MnSymbol
-        {"8764", "sim", "\\$\\\\sim\\$"}, // tilde operator = varies with = similar to,
-        //                                    U+223C ISOtech 
-        /*  tilde operator is NOT the same character as the tilde, U+007E,
-         although the same glyph might be used to represent both   */
-        {"8773", "cong", "\\$\\\\cong\\$"}, // approximately equal to, U+2245 ISOtech  
-        {"8776", "asymp", "\\$\\\\approx\\$"}, // almost equal to = asymptotic to, 
-        //                                    U+2248 ISOamsr 
-        {"8800", "ne", "\\$\\\\neq\\$"}, // not equal to, U+2260 ISOtech  
-        {"8801", "equiv", "\\$\\\\equiv\\$"}, // identical to, U+2261 ISOtech  
-        {"8804", "le", "\\$\\\\leq\\$"}, // less-than or equal to, U+2264 ISOtech  
-        {"8805", "ge", "\\$\\\\geq\\$"}, // greater-than or equal to, 
-        //                                    U+2265 ISOtech 
-        {"8834", "sub", "\\$\\\\subset\\$"}, // subset of, U+2282 ISOtech  
-        {"8835", "sup", "\\$\\\\supset\\$"}, // superset of, U+2283 ISOtech  
-        /*    note that nsup, 'not a superset of, U+2283' is not covered by the Symbol 
-         font encoding and is not included. Should it be, for symmetry?
-         It is in ISOamsn   */
-        {"8836", "nsub", "\\$\\\\nsubset\\$"}, // not a subset of, U+2284 ISOamsn  
-        {"8838", "sube", "\\$\\\\subseteq\\$"}, // subset of or equal to, U+2286 ISOtech  
-        {"8839", "supe", "\\$\\\\supseteq\\$"}, // superset of or equal to, 
-        //                                    U+2287 ISOtech 
-        {"8853", "oplus", "\\$\\\\oplus\\$"}, // circled plus = direct sum, 
-        //                                    U+2295 ISOamsb 
-        {"8855", "otimes", "\\$\\\\otimes\\$"}, // circled times = vector product,
-        //                                    U+2297 ISOamsb 
-        {"8869", "perp", "\\$\\\\perp\\$"}, // up tack = orthogonal to = perpendicular, 
-        //                                    U+22A5 ISOtech 
-        {"8901", "sdot", "\\$\\\\cdot\\$"}, // dot operator, U+22C5 ISOamsb  
-        /* dot operator is NOT the same character as U+00B7 middle dot */
-        /* Miscellaneous Technical */
-        {"8968", "lceil", "\\$\\\\lceil\\$"}, // left ceiling = apl upstile, 
-        //                                    U+2308 ISOamsc  
-        {"8969", "rceil", "\\$\\\\rceil\\$"}, // right ceiling, U+2309 ISOamsc   
-        {"8970", "lfloor", "\\$\\\\lfloor\\$"}, // left floor = apl downstile, 
-        //                                    U+230A ISOamsc  
-        {"8971", "rfloor", "\\$\\\\rfloor\\$"}, // right floor, U+230B ISOamsc   
-        {"9001", "lang", "\\$\\\\langle\\$"}, // left-pointing angle bracket = bra, 
-        //                                    U+2329 ISOtech 
-        /*    lang is NOT the same character as U+003C 'less than' 
-         or U+2039 'single left-pointing angle quotation mark' */
-        {"9002", "rang", "\\$\\\\rangle\\$"}, // right-pointing angle bracket = ket, 
-        //                                    U+232A ISOtech 
-        /*    rang is NOT the same character as U+003E 'greater than' 
-         or U+203A 'single right-pointing angle quotation mark' */
-        /* Geometric Shapes */
-        {"9674", "loz", "\\$\\\\lozenge\\$"}, // lozenge, U+25CA ISOpub  
-
-        /* Miscellaneous Symbols */
-        {"9824", "spades", "\\$\\\\spadesuit\\$"}, // black spade suit, U+2660 ISOpub  
-        /* black here seems to mean filled as opposed to hollow */
-        {"9827", "clubs", "\\$\\\\clubsuit\\$"}, // black club suit = shamrock, 
-        //                                    U+2663 ISOpub 
-        {"9829", "hearts", "\\$\\\\heartsuit\\$"}, // black heart suit = valentine, 
-        //                                    U+2665 ISOpub 
-        {"9830", "diams", "\\$\\\\diamondsuit\\$"}, // black diamond suit, U+2666 ISOpub  
-        {"34", "quot", "\""}, // quotation mark = APL quote,
-        //                                   U+0022 ISOnum 
-        {"38", "amp", "\\\\&"}, // ampersand, U+0026 ISOnum 
-        {"60", "lt", "\\$<\\$"}, // less-than sign, U+003C ISOnum 
-        {"62", "gt", "\\$>\\$"}, // greater-than sign, U+003E ISOnum 
-
-        /* Latin Extended-A */
-        {"338", "OElig", "\\{\\\\OE\\}"}, // latin capital ligature OE,
-        //                                   U+0152 ISOlat2 
-        {"339", "oelig", "\\{\\\\oe\\}"}, // latin small ligature oe, U+0153 ISOlat2 
-        /* ligature is a misnomer, this is a separate character in some languages */
-        {"352", "Scaron", "\\{\\\\v\\{S\\}\\}"}, // latin capital letter S with caron,
-        //                                   U+0160 ISOlat2 
-        {"353", "scaron", "\\{\\\\v\\{s\\}\\}"}, // latin small letter s with caron,
-        //                                   U+0161 ISOlat2 
-        {"376", "Yuml", "\\{\\\\\"\\{Y\\}\\}"}, // latin capital letter Y with diaeresis,
-        //                                   U+0178 ISOlat2 
-
-        /* Spacing Modifier Letters */
-        {"710", "circ", "\\{\\\\textasciicircum\\}"}, // modifier letter circumflex accent,
-        //                                   U+02C6 ISOpub 
-        {"732", "tilde", "\\{\\\\textasciitilde\\}"}, // small tilde, U+02DC ISOdia 
-
-        /* General Punctuation */
-        {"8194", "ensp", "\\\\hspace\\{0.5em\\}"}, // en space, U+2002 ISOpub  
-        {"8195", "emsp", "\\\\hspace\\{1em\\}"}, // em space, U+2003 ISOpub  
-        {"8201", "thinsp", "\\\\hspace\\{0.167em\\}"}, // thin space, U+2009 ISOpub  
-        {"8204", "zwnj", ""}, // zero width non-joiner, 
-        //                                   U+200C NEW RFC 2070 
-        {"8205", "zwj", ""}, // zero width joiner, U+200D NEW RFC 2070  
-        {"8206", "lrm", ""}, // left-to-right mark, U+200E NEW RFC 2070  
-        {"8207", "rlm", ""}, // right-to-left mark, U+200F NEW RFC 2070  
-        {"8211", "ndash", "--"}, // en dash, U+2013 ISOpub  
-        {"8212", "mdash", "---"}, // em dash, U+2014 ISOpub  
-        {"8216", "lsquo", "\\{\\\\textquoteleft\\}"}, // left single quotation mark, 
-        //                                   U+2018 ISOnum 
-        {"8217", "rsquo", "\\{\\\\textquoteright\\}"}, // right single quotation mark, 
-        //                                   U+2019 ISOnum 
-        {"8218", "sbquo", "\\{\\\\quotesinglbase\\}"}, // single low-9 quotation mark, U+201A NEW  
-        {"8220", "ldquo", "\\{\\\\textquotedblleft\\}"}, // left double quotation mark, 
-        //                                   U+201C ISOnum 
-        {"8221", "rdquo", "\\{\\\\textquotedblright\\}"}, // right double quotation mark, 
-        //                                   U+201D ISOnum 
-        {"8222", "bdquo", "\\{\\\\quotedblbase\\}"}, // double low-9 quotation mark, U+201E NEW  
-        {"8224", "dagger", "\\{\\\\dag\\}"}, // dagger, U+2020 ISOpub  
-        {"8225", "Dagger", "\\{\\\\ddag\\}"}, // double dagger, U+2021 ISOpub  
-        {"8240", "permil", "\\{\\\\textperthousand\\}"}, // per mille sign, U+2030 ISOtech  
-        {"8249", "lsaquo", "\\{\\\\guilsinglleft\\}"}, // single left-pointing angle quotation mark, 
-        //                                   U+2039 ISO proposed 
-        /* lsaquo is proposed but not yet ISO standardized */
-        {"8250", "rsaquo", "\\{\\\\guilsinglright\\}"}, // single right-pointing angle quotation mark, 
-        //                                   U+203A ISO proposed 
-        /* rsaquo is proposed but not yet ISO standardized */
-        {"8364", "euro", "\\{\\\\texteuro\\}"}, // euro sign, U+20AC NEW 
-            
-        /* Manually added */
-        {"37", "percnt", "\\\\%"}, // Percent
-        {"39", "", "'"}, // Apostrophe
-        {"40", "", "("}, // Left bracket
-        {"41", "", ")"}, // Right bracket
-        {"43", "plus", "\\+"}, // Plus
-        {"44", "comma", ","}, // Comma
-        {"45", "hyphen", "-"}, // Hyphen
-        {"46", "period", "\\."}, // Period
-        {"47", "slash", "/"}, // Slash (solidus)
-        {"58", "colon", ":"}, // Colon
-        {"59", "semi", ";"}, // Semi colon
-        {"91", "lsqb", "\\["}, // Left square bracket
-        {"92", "bsol", "\\{\\\\textbackslash\\}"}, // Backslash
-        {"93", "rsqb", "\\]"}, // Right square bracket
-        {"94", "Hat", "\\{\\\\\\^\\{\\}\\}"}, // Circumflex
-        {"95", "lowbar", "\\\\_"}, // Underscore
-        {"96", "grave", "\\{\\\\`\\{\\}\\}"}, // Grave
-        {"123", "lbrace", "\\\\\\{"}, // Left curly bracket
-        {"", "lcub", "\\\\\\{"}, // Left curly bracket
-        {"124", "vert", "\\|"}, // Vertical bar
-        {"", "verbar", "\\|"}, // Vertical bar
-        {"", "VerticalLine", "\\|"}, // Vertical bar
-        {"125", "rbrace", "\\\\\\}"}, // Right curly bracket
-        {"", "rcub", "\\\\\\}"}, // Right curly bracket
-        {"138", "", "\\{\\\\v\\{S\\}\\}"}, // Line tabulation set   
-     // {"141", "", ""}, // Reverse line feed
-        {"145", "", "`"}, // Apostrophe
-        {"146", "", "'"}, // Apostrophe
-        {"147", "", "``"}, // Quotation mark
-        {"148", "", "''"}, // Quotation mark
-        {"150", "", "--"}, // En dash
-        {"154", "", "\\{\\\\v\\{s\\}\\}"}, // Single character introducer
-        {"260", "Aogon", "\\{\\\\k\\{A\\}\\}"}, // capital A with ogonek
-        {"261", "aogon", "\\{\\\\k\\{a\\}\\}"}, // small a with ogonek
-        {"262", "Cacute", "\\{\\\\'\\{C\\}\\}"}, // capital C with acute
-        {"263", "cacute", "\\{\\\\'\\{c\\}\\}"}, // small C with acute
-        {"264", "Ccirc", "\\{\\\\\\^\\{C\\}\\}"}, // capital C with circumflex
-        {"265", "ccirc", "\\{\\\\\\^\\{c\\}\\}"}, // small C with circumflex
-        {"266", "Cdot", "\\{\\\\\\.\\{C\\}\\}"}, // capital C with dot above
-        {"267", "cdot", "\\{\\\\\\.\\{c\\}\\}"}, // small C with dot above
-        {"268", "Ccaron", "\\{\\\\v\\{C\\}\\}"}, // capital C with caron
-        {"269", "ccaron", "\\{\\\\v\\{c\\}\\}"}, // small C with caron
-        {"272", "Dstrok", "\\{\\\\DJ\\}"}, // capital D with stroke
-        {"273", "dstrok", "\\{\\\\dj\\}"}, // small d with stroke
-        {"280", "Eogon", "\\{\\\\k\\{E\\}\\}"}, // capital E with ogonek
-        {"281", "eogon", "\\{\\\\k\\{e\\}\\}"}, // small e with ogonek
-        {"298", "Imacr", "\\{\\\\=\\{I\\}\\}"}, // capital I with macron
-        {"299", "imacr", "\\{\\\\=\\{\\\\i\\}\\}"}, // small i with macron
-        {"302", "Iogon", "\\{\\\\k\\{I\\}\\}"}, // capital I with ogonek
-        {"303", "iogon", "\\{\\\\k\\{i\\}\\}"}, // small i with ogonek
-        {"304", "Idot", "\\{\\\\.\\{I\\}\\}"},    // capital I with dot above
-        {"305", "inodot", "\\{\\\\i\\}"},    // Small i without the dot
-        {"", "imath", "\\{\\\\i\\}"},    // Small i without the dot
-        {"321", "Lstrok", "\\{\\\\L\\}"},    // upper case l with stroke
-        {"322", "lstrok", "\\{\\\\l\\}"},    // lower case l with stroke
-        {"370", "Uogon", "\\{\\\\k\\{U\\}\\}"}, // capital U with ogonek
-        {"371", "uogon", "\\{\\\\k\\{u\\}\\}"}, // small u with ogonek
-        {"490", "Oogon", "\\{\\\\k\\{O\\}\\}"},    // capital letter O with ogonek
-        {"491", "oogon", "\\{\\\\k\\{o\\}\\}"},    // small letter o with ogonek
-        {"492", "", "\\{\\\\k\\{\\\\=\\{O\\}\\}\\}"},    // capital letter O with ogonek and macron
-        {"493", "", "\\{\\\\k\\{\\\\=\\{o\\}\\}\\}"},    // small letter o with ogonek and macron
-        {"536", "", "\\{\\\\cb\\{S\\}\\}"},    // capital letter S with comma below, require combelow
-        {"537", "", "\\{\\\\cb\\{s\\}\\}"},    // small letter S with comma below, require combelow
-        {"538", "", "\\{\\\\cb\\{T\\}\\}"},    // capital letter T with comma below, require combelow
-        {"539", "", "\\{\\\\cb\\{t\\}\\}"},    // small letter T with comma below, require combelow
-        {"727", "caron", "\\{\\\\v\\{\\}\\}"}, // Caron
-        {"", "Hacek", "\\{\\\\v\\{\\}\\}"}, // Caron
-        {"728", "breve", "\\{\\\\u\\{\\}\\}"}, // Breve
-        {"", "Breve", "\\{\\\\u\\{\\}\\}"}, // Breve
-        {"729", "dot", "\\{\\\\\\.\\{\\}\\}"}, // Dot above
-        {"730", "ring", "\\{\\\\r\\{\\}\\}"}, // Ring above
-        {"731", "ogon", "\\{\\\\k\\{\\}\\}"}, // Ogonek
-        {"733", "dblac", "\\{\\\\H\\{\\}\\}"}, // Double acute
-        {"949", "epsi", "\\$\\\\epsilon\\$"},    // Epsilon - double check
-        {"1013", "epsiv", "\\$\\\\varepsilonup\\$"},    // lunate epsilon, requires txfonts
-        {"1055", "", "\\{\\\\cyrchar\\\\CYRP\\}"},    // Cyrillic capital Pe
-        {"1082", "", "\\{\\\\cyrchar\\\\cyrk\\}"},    // Cyrillic small Ka
-     // {"2013", "", ""},    // NKO letter FA -- Maybe en dash = 0x2013?
-     // {"2014", "", ""},    // NKO letter FA -- Maybe em dash = 0x2014?
-        {"8192", "", "\\\\hspace\\{0.5em\\}"}, // en quad
-        {"8193", "", "\\\\hspace\\{1em\\}"}, // em quad
-        {"8196", "", "\\\\hspace\\{0.333em\\}"}, // Three-Per-Em Space 
-        {"8197", "", "\\\\hspace\\{0.25em\\}"}, // Four-Per-Em Space 
-        {"8198", "", "\\\\hspace\\{0.167em\\}"}, // Six-Per-Em Space
-        {"8208", "hyphen", "-"},    // Hyphen
-        {"8229", "nldr", "\\.\\."},    // Double dots - en leader
-        {"8451", "", "\\$\\\\deg\\$\\{C\\}"}, // Degree Celsius
-        {"8459", "Hscr", "\\$\\\\mathcal\\{H\\}\\$"}, // script capital H -- possibly use \mathscr
-        {"8460", "Hfr", "\\$\\\\mathbb\\{H\\}\\$"}, // black letter capital H -- requires e.g. amsfonts
-        {"8466", "Lscr", "\\$\\\\mathcal\\{L\\}\\$"}, // script capital L -- possibly use \mathscr
-        {"8467", "ell", "\\{\\\\ell\\}"}, // script small l 
-        {"8469", "naturals", "\\$\\\\mathbb\\{N\\}\\$"}, // double struck capital N -- requires e.g. amsfonts
-        {"8486", "", "\\$\\{\\\\Omega\\}\\$"}, // Omega
-        {"8491", "angst", "\\{\\\\AA\\}"}, // Angstrom 
-        {"8496", "Escr", "\\$\\\\mathcal\\{E\\}\\$"}, // script capital E 
-        {"8531", "frac13", "\\$\\\\sfrac\\{1\\}\\{3\\}\\$"},    // Vulgar fraction one third
-        {"8532", "frac23", "\\$\\\\sfrac\\{2\\}\\{3\\}\\$"},    // Vulgar fraction two thirds
-        {"8533", "frac15", "\\$\\\\sfrac\\{1\\}\\{5\\}\\$"},    // Vulgar fraction one fifth
-        {"8534", "frac25", "\\$\\\\sfrac\\{2\\}\\{5\\}\\$"},    // Vulgar fraction two fifths
-        {"8535", "frac35", "\\$\\\\sfrac\\{3\\}\\{5\\}\\$"},    // Vulgar fraction three fifths
-        {"8536", "frac45", "\\$\\\\sfrac\\{4\\}\\{5\\}\\$"},    // Vulgar fraction four fifths
-        {"8537", "frac16", "\\$\\\\sfrac\\{1\\}\\{6\\}\\$"},    // Vulgar fraction one sixth
-        {"8538", "frac56", "\\$\\\\sfrac\\{5\\}\\{6\\}\\$"},    // Vulgar fraction five sixths
-        {"8539", "frac18", "\\$\\\\sfrac\\{1\\}\\{8\\}\\$"},    // Vulgar fraction one eighth
-        {"8540", "frac38", "\\$\\\\sfrac\\{3\\}\\{8\\}\\$"},    // Vulgar fraction three eighths
-        {"8541", "frac58", "\\$\\\\sfrac\\{5\\}\\{8\\}\\$"},    // Vulgar fraction five eighths
-        {"8542", "frac78", "\\$\\\\sfrac\\{7\\}\\{8\\}\\$"},    // Vulgar fraction seven eighths
-        {"8710", "", "\\$\\\\triangle\\$"},    // Increment - could use a more appropriate symbol
-        {"8714", "", "\\$\\\\in\\$"},    // Small element in
-        {"8729", "bullet", "\\$\\\\bullet\\$"},    // Bullet operator
-        {"8758", "ratio", ":"},    // Colon/ratio
-        {"8771", "sime", "\\$\\\\simeq\\$"}, // almost equal to = asymptotic to, 
-        {"8776", "ap", "\\$\\\\approx\\$"}, // almost equal to = asymptotic to, 
-        {"8810", "ll", "\\$\\\\ll\\$"}, // Much less than 
-        {"", "Lt", "\\$\\\\ll\\$"}, // Much less than 
-        {"8811", "gg", "\\$\\\\gg\\$"}, // Much greater than 
-        {"", "Gt", "\\$\\\\gg\\$"}, // Much greater than 
-        {"8819", "gsim", "\\$\\\\gtrsim\\$"}, // Greater than or equivalent to
-        {"8882", "vltri", "\\$\\\\triangleleft\\$"}, // Left triangle
-        {"8883", "vrtri", "\\$\\\\triangleright\\$"}, // Right triangle
-        {"8896", "xwedge", "\\$\\\\bigwedge\\$"}, // Big wedge
-        {"8897", "xvee", "\\$\\\\bigvee\\$"}, // Big vee
-        {"9426", "", "\\{\\\\copyright\\}"}, // circled small letter C
-        {"9633", "square", "\\$\\\\square\\$"}, // White square
-        {"9653", "utri", "\\$\\\\triangle\\$"}, // White up-pointing small triangle -- \vartriangle probably
-                                                // better but requires amssymb
-        {"10877", "les", "\\$\\\\leqslant\\$"},    // Less than slanted equal -- requires amssymb 
-        {"10878", "ges", "\\$\\\\geqslant\\$"},    // Less than slanted equal -- requires amssymb 
-        {"119978", "Oscr", "\\$\\\\mathcal\\{O\\}\\$"} // script capital O -- possibly use \mathscr
-        
-    };
-    
-        // List of combining accents
-        private String[][] accentList = new String[][] {
-        {"768", "`"},    // Grave 
-        {"769", "'"},    // Acute
-        {"770", "\\^"},  // Circumflex
-        {"771", "~"},    // Tilde
-        {"772", "="},    // Macron
-        {"773", "="},     // Overline - not completely correct
-        {"774", "u"},    // Breve
-        {"775", "\\."},  // Dot above
-        {"776", "\""},   // Diaeresis
-        {"777", "h"},    // Hook above
-        {"778", "r"},    // Ring 
-        {"779", "H"},    // Double acute
-        {"780", "v"},    // Caron
-        {"781", "\\|"},  // Vertical line above
-        {"782", "U"},     // Double vertical line above
-        {"783", "G"},    // Double grave
-        {"784", "textdotbreve"},    // Candrabindu
-        {"785", "t"},    // Inverted breve
-//        {"786", ""},    // Turned comma above
-//        {"787", ""},    // Comma above
-//        {"788", ""},    // Reversed comma above
-//        {"789", ""},    // Comma above right
-        {"790", "textsubgrave"},    // Grave accent below -requires tipa
-        {"791", "textsubacute"},    // Acute accent below - requires tipa
-        {"792", "textadvancing"},    // Left tack below - requires tipa
-        {"793", "textretracting"},    // Right tack below - requires tipa
-//        {"794", ""},    // Left angle above
-//        {"795", ""},    // Horn
-        {"796", "textsublhalfring"},    // Left half ring below - requires tipa
-        {"797", "textraising"},    // Up tack below - requires tipa
-        {"798", "textlowering"},    // Down tack below - requires tipa
-        {"799", "textsubplus"},    // Plus sign below - requires tipa
-//        {"800", ""},    // Minus sign below
-//        {"801", ""},    // Palatalized hook below
-//        {"802", ""},    // Retroflex hook below
-        {"803", "d"},    // Dot below
-        {"804", "textsubumlaut"},    // Diaeresis below - requires tipa
-        {"805", "textsubring"},    // Ring below - requires tipa
-        {"806", "cb"},    // Comma below - requires combelow
-        {"807", "c"},    // Cedilla
-        {"808", "k"},    // Ogonek
-        {"809", "textsyllabic"},    // Vertical line below - requires tipa
-        {"810", "textsubbridge"},    // Bridge below - requires tipa
-        {"811", "textsubw"},    // Inverted double arch below - requires tipa
-        {"812", "textsubwedge"},    // Caron below
-        {"813", "textsubcircum"},    // Circumflex accent below - requires tipa
-//        {"814", ""},    // Breve below
-        {"815", "textsubarch"},    // Inverted breve below - requires tipa
-        {"816", "textsubtilde"},    // Tilde below - requires tipa
-        {"817", "b"},    // Macron below - not completely correct
-        {"818", "b"},    // Underline
-        {"819", "subdoublebar"},    // Double low line -- requires extraipa
-        {"820", "textsuperimposetilde"},    // Tilde overlay - requires tipa
-//        {"821", ""},    // Short stroke overlay
-//        {"822", ""},    // Long stroke overlay
-//        {"823", ""},    // Short solidus overlay
-//        {"824", ""},    // Long solidus overlay
-        {"825", "textsubrhalfring"},    // Right half ring below - requires tipa
-        {"826", "textinvsubbridge"},    // inverted bridge below - requires tipa
-        {"827", "textsubsquare"},    // Square below - requires tipa
-        {"828", "textseagull"},    // Seagull below - requires tipa
-        {"829", "textovercross"},    // X above - requires tipa
-//        {"830", ""},    // Vertical tilde
-//        {"831", ""},    // Double overline
-//        {"832", ""},    // Grave tone mark
-//        {"833", ""},    // Acute tone mark
-//        {"834", ""},    // Greek perispomeni
-//        {"835", ""},    // Greek koronis
-//        {"836", ""},    // Greek dialytika tonos
-//        {"837", ""},    // Greek ypogegrammeni
-        {"838", "overbridge"},    // Bridge above - requires extraipa
-        {"839", "subdoublebar"},    // Equals sign below - requires extraipa
-        {"840", "subdoublevert"},    // Double vertical line below - requires extraipa
-        {"841", "subcorner"},    // Left angle below - requires extraipa
-        {"842", "crtilde"},    // Not tilde above - requires extraipa
-        {"843", "dottedtilde"},    // Homothetic above - requires extraipa
-        {"844", "doubletilde"},    // Almost equal to above - requires extraipa
-        {"845", "spreadlips"},    // Left right arrow below - requires extraipa
-        {"846", "whistle"},    // Upwards arrow below - requires extraipa
-//        {"864", ""},    // Double tilde
-//        {"865", ""},    // Double inverted breve
-        {"866", "sliding"},    // Double rightwards arrow below - requires extraipa
-        };
-
-        private HashMap<String, String> escapedSymbols = new HashMap<String, String>();
-        private HashMap<Integer, String> escapedAccents = new HashMap<Integer, String>();
-        private HashMap<Integer, String> numSymbols = new HashMap<Integer, String>();
-        
-        
-	
-	public HTMLConverter() {
-		super();
-                for (int i=0;i<conversionList.length;i++) {
-                    if (conversionList[i][2].length() >= 1) {
-                        if (conversionList[i][1].length() >= 1) {
-                            escapedSymbols.put("&" + conversionList[i][1] + ";" , conversionList[i][2]);
-                        }
-                        if (conversionList[i][0].length() >= 1) {
-                            numSymbols.put(Integer.decode(conversionList[i][0]) , conversionList[i][2]);
-                        }
-                    }
-                }
-                for (int i=0;i<accentList.length;i++) {
-                    escapedAccents.put(Integer.decode(accentList[i][0]), accentList[i][1]);
-                }
-	}
-        
-    public String format(String text) {
-        if (text == null)
-            return null;
-        StringBuffer sb = new StringBuffer();
-	// Deal with the form <sup>k</sup>and <sub>k</sub>
-        // If the result is in text or equation form can be controlled
-        // From the "Advanced settings" tab
-        if(Globals.prefs.getBoolean("useConvertToEquation")) {
-            text = text.replaceAll("<sup>([^<]+)</sup>", "\\$\\^\\{$1\\}\\$");
-            text = text.replaceAll("<sub>([^<]+)</sub>", "\\$_\\{$1\\}\\$");
-        } else {
-            text = text.replaceAll("<sup>([^<]+)</sup>", "\\\\textsuperscript\\{$1\\}");
-            text = text.replaceAll("<sub>([^<]+)</sub>", "\\\\textsubscript\\{$1\\}");
-        }
-        
-        // TODO: maybe rewrite this based on regular expressions instead
-        // Note that (at least) the IEEE Xplore fetcher must be fixed as it relies on the current way to 
-        // remove tags for its image alt-tag to equation converter
-        for (int i=0; i<text.length(); i++) {
-
-            int c = text.charAt(i);
-
-            if (c == '<') {
-                i = readTag(text, sb, i);
-            } else
-                sb.append((char)c);
-
-        }
-        text = sb.toString();
-        
-        // Handle text based HTML entities
-        Set<String> patterns = escapedSymbols.keySet();
-        for (String pattern: patterns) {
-        	text = text.replaceAll(pattern, escapedSymbols.get(pattern));
-        }
-        
-        // Handle numerical HTML entities
-        Pattern escapedPattern = Pattern.compile("&#([x]*)([0]*)(\\p{XDigit}+);");
-        Matcher m = escapedPattern.matcher(text);
-        while (m.find()) {
-	    //	    System.err.println("Found pattern: " + m.group(1));
-	    //      System.err.println("Found pattern: " + m.group(2));
-            int num = Integer.decode(m.group(1).replace("x", "#") + m.group(3));
-            if(numSymbols.containsKey(num)) {
-                text = text.replaceAll("&#" + m.group(1) + m.group(2) + m.group(3) + ";", numSymbols.get(num));
-            } 
-        }
-
-        escapedPattern = Pattern.compile("(.)&#([x]*)([0]*)(\\p{XDigit}+);");
-        m = escapedPattern.matcher(text);
-        while (m.find()) {
-	    //	    System.err.println("Found pattern: " + m.group(1));
-	    //      System.err.println("Found pattern: " + m.group(2));
-            int num = Integer.decode(m.group(2).replace("x", "#") + m.group(4));
-            if(escapedAccents.containsKey(num)) {
-                if(m.group(1).equals("i")) {
-                    text = text.replaceAll(m.group(1) + "&#" + m.group(2) + m.group(3) + m.group(4) + ";", "\\{\\\\" + escapedAccents.get(num) + "\\{\\\\i\\}\\}");
-                } else if(m.group(1).equals("j")){
-                    text = text.replaceAll(m.group(1) + "&#" + m.group(2) + m.group(3) + m.group(4) + ";", "\\{\\\\" + escapedAccents.get(num) + "\\{\\\\j\\}\\}");
-                } else {
-                    text = text.replaceAll(m.group(1) + "&#" + m.group(2) + m.group(3) + m.group(4) + ";", "\\{\\\\" + escapedAccents.get(num) + "\\{" + m.group(1) + "\\}\\}");
-                }
-            } 
-        }
-
-        escapedPattern = Pattern.compile("&#([x]*)([0]*)(\\p{XDigit}+);");
-        m = escapedPattern.matcher(text);
-        while (m.find()) {
-	    //	    System.err.println("Found pattern: " + m.group(1));
-	    //      System.err.println("Found pattern: " + m.group(2));
-            int num = Integer.decode(m.group(1).replace("x", "#") + m.group(3));
-            System.err.println("HTML escaped char not converted: " + m.group(1) + m.group(2) + m.group(3) + " = " + Integer.toString(num));
-        }
-        
-        // Remove $$ in case of two adjacent conversions
-        text = text.replace("$$","");
-        
-       // Find non-covered special characters with alphabetic codes
-        escapedPattern = Pattern.compile("&(\\w+);");
-        m = escapedPattern.matcher(text);
-        while (m.find()) {
-	    System.err.println("HTML escaped char not converted: " + m.group(1));
-	}
-
-        return text.trim();
-    }
-
-    private final int MAX_TAG_LENGTH = 30;
-    /*private final int MAX_CHAR_LENGTH = 10;
-
-    private int readHtmlChar(String text, StringBuffer sb, int position) {
-        // Have just read the < character that starts the tag.
-        int index = text.indexOf(';', position);
-        if ((index > position) && (index-position < MAX_CHAR_LENGTH)) {
-        	//String code = text.substring(position, index);
-            //System.out.println("Removed code: "+text.substring(position, index));
-            return index; // Just skip the tag.
-        } else return position; // Don't do anything.
-    }*/
-
-    private int readTag(String text, StringBuffer sb, int position) {
-        // Have just read the < character that starts the tag.
-        int index = text.indexOf('>', position);
-        if ((index > position) && (index-position < MAX_TAG_LENGTH)) {
-            //System.out.println("Removed tag: "+text.substring(position, index));
-            return index; // Just skip the tag.
-        } else return position; // Don't do anything.
-    }
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.util.HashMap;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.Globals;
+
+public class HTMLConverter implements LayoutFormatter {
+
+    /*   Portions © International Organization for Standardization 1986:
+     Permission to copy in any form is granted for use with
+     conforming SGML systems and applications as defined in
+     ISO 8879, provided this notice is included in all copies.
+    */
+
+
+	// most of the LaTeX commands can be read at http://en.wikibooks.org/wiki/LaTeX/Accents
+	// The symbols can be looked at http://www.fileformat.info/info/unicode/char/a4/index.htm. Replace "a4" with the U+ number
+	// http://detexify.kirelabs.org/classify.html and http://www.ctan.org/tex-archive/info/symbols/comprehensive/ might help to find the right LaTeX command
+        // http://llg.cubic.org/docs/ent2latex.html and http://www.w3.org/TR/xml-entity-names/byalpha.html are also useful
+        // as well as http://www.w3.org/Math/characters/unicode.xml
+    
+    
+    // An array of arrays of strings in the format:
+    // {"decimal number of HTML entity", "text HTML entity", "corresponding LaTeX command"}
+    // Leaving a field empty is OK as it then will not be included
+    private String[][] conversionList = new String[][]{
+        {"160", "nbsp", "\\{~\\}"}, // no-break space = non-breaking space, 
+        //                                 U+00A0 ISOnum 
+        {"161", "iexcl", "\\{\\\\textexclamdown\\}"}, // inverted exclamation mark, U+00A1 ISOnum
+        {"162", "cent", "\\{\\\\textcent\\}"}, // cent sign, U+00A2 ISOnum  
+        {"163", "pound", "\\{\\\\pounds\\}"}, // pound sign, U+00A3 ISOnum
+        {"164", "curren", "\\{\\\\textcurrency\\}"}, // currency sign, U+00A4 ISOnum  
+        {"165", "yen", "\\{\\\\textyen\\}"}, // yen sign = yuan sign, U+00A5 ISOnum  
+        {"166", "brvbar", "\\{\\\\textbrokenbar\\}"}, // broken bar = broken vertical bar, 
+        //                                 U+00A6 ISOnum 
+        {"167", "sect", "\\{\\\\S\\}"}, // section sign, U+00A7 ISOnum  
+        {"168", "uml", "\\{\\\\\"\\{\\}\\}"}, // diaeresis = spacing diaeresis, 
+        //                                 U+00A8 ISOdia 
+        {"169", "copy", "\\{\\\\copyright\\}"}, // copyright sign, U+00A9 ISOnum
+        {"170", "ordf", "\\{\\\\textordfeminine\\}"}, // feminine ordinal indicator, U+00AA ISOnum
+        {"171", "laquo", "\\{\\\\guillemotleft\\}"}, // left-pointing double angle quotation mark
+        //                                 = left pointing guillemet, U+00AB ISOnum 
+        {"172", "not", "\\$\\\\neg\\$"}, // not sign, U+00AC ISOnum  
+        {"173", "shy", "\\\\-"}, // soft hyphen = discretionary hyphen, 
+        //                                 U+00AD ISOnum 
+        {"174", "reg", "\\{\\\\textregistered\\}"}, // registered sign = registered trade mark sign,
+        //                                 U+00AE ISOnum 
+        {"175", "macr", "\\{\\\\=\\{\\}\\}"}, // macron = spacing macron = overline 
+        //                                 = APL overbar, U+00AF ISOdia 
+        {"176", "deg", "\\$\\\\deg\\$"}, // degree sign, U+00B0 ISOnum  
+        {"177", "plusmn", "\\$\\\\pm\\$"}, // plus-minus sign = plus-or-minus sign, 
+        //                                 U+00B1 ISOnum 
+        {"178", "sup2", "\\\\textsuperscript\\{2\\}"}, // superscript two = superscript digit two 
+        //                                 = squared, U+00B2 ISOnum 
+        {"179", "sup3", "\\\\textsuperscript\\{3\\}"}, // superscript three = superscript digit three 
+        //                                 = cubed, U+00B3 ISOnum 
+        {"180", "acute", "\\{\\\\'\\{\\}\\}"}, // acute accent = spacing acute, 
+        //                                 U+00B4 ISOdia 
+        {"181", "micro", "\\$\\\\mu\\$"}, // micro sign, U+00B5 ISOnum  
+        {"182", "para", "\\{\\\\P\\}"}, // pilcrow sign = paragraph sign, 
+        //                                 U+00B6 ISOnum 
+        {"183", "middot", "\\$\\\\cdot\\$"}, // middle dot = Georgian comma 
+        //                                 = Greek middle dot, U+00B7 ISOnum 
+        {"184", "cedil", "\\{\\\\c\\{\\}\\}"}, // cedilla = spacing cedilla, U+00B8 ISOdia  
+        {"185", "sup1", "\\\\textsuperscript\\{1\\}"}, // superscript one = superscript digit one,
+        //                                 U+00B9 ISOnum 
+        {"186", "ordm", "\\{\\\\textordmasculine\\}"}, // masculine ordinal indicator,
+        //                                 U+00BA ISOnum 
+        {"187", "raquo", "\\{\\\\guillemotright\\}"}, // right-pointing double angle quotation mark
+        //                                 = right pointing guillemet, U+00BB ISOnum 
+        {"188", "frac14", "\\$\\\\sfrac\\{1\\}\\{4\\}\\$"}, // vulgar fraction one quarter 
+        //                                 = fraction one quarter, U+00BC ISOnum 
+        {"189", "frac12", "\\$\\\\sfrac\\{1\\}\\{2\\}\\$"}, // vulgar fraction one half 
+        //                                 = fraction one half, U+00BD ISOnum 
+        {"190", "frac34", "\\$\\\\sfrac\\{3\\}\\{4\\}\\$"}, // vulgar fraction three quarters 
+        //                                 = fraction three quarters, U+00BE ISOnum 
+        {"191", "iquest", "\\{\\\\textquestiondown\\}"}, // inverted question mark 
+        //                                 = turned question mark, U+00BF ISOnum 
+        {"192", "Agrave", "\\{\\\\`\\{A\\}\\}"}, // latin capital letter A with grave
+        //                                 = latin capital letter A grave,
+        //                                 U+00C0 ISOlat1 
+        {"193", "Aacute", "\\{\\\\'\\{A\\}\\}"}, // latin capital letter A with acute, 
+        //                                 U+00C1 ISOlat1 
+        {"194", "Acirc", "\\{\\\\\\^\\{A\\}\\}"}, // latin capital letter A with circumflex, 
+        //                                 U+00C2 ISOlat1 
+        {"195", "Atilde", "\\{\\\\~\\{A\\}\\}"}, // latin capital letter A with tilde, 
+        //                                 U+00C3 ISOlat1 
+        {"196", "Auml", "\\{\\\\\"\\{A\\}\\}"}, // latin capital letter A with diaeresis, 
+        //                                 U+00C4 ISOlat1 
+        {"197", "Aring", "\\{\\\\AA\\}"}, // latin capital letter A with ring above 
+        //                                 = latin capital letter A ring,
+        //                                 U+00C5 ISOlat1 
+        {"198", "AElig", "\\{\\\\AE\\}"}, // latin capital letter AE 
+        //                                 = latin capital ligature AE,
+        //                                 U+00C6 ISOlat1 
+        {"199", "Ccedil", "\\{\\\\c\\{C\\}\\}"}, // latin capital letter C with cedilla,
+        //                                 U+00C7 ISOlat1 
+        {"200", "Egrave", "\\{\\\\`\\{E\\}\\}"}, // latin capital letter E with grave,
+        //                                 U+00C8 ISOlat1 
+        {"201", "Eacute", "\\{\\\\'\\{E\\}\\}"}, // latin capital letter E with acute, 
+        //                                 U+00C9 ISOlat1 
+        {"202", "Ecirc", "\\{\\\\\\^\\{E\\}\\}"}, // latin capital letter E with circumflex, 
+        //                                 U+00CA ISOlat1 
+        {"203", "Euml", "\\{\\\\\"\\{E\\}\\}"}, // latin capital letter E with diaeresis, 
+        //                                 U+00CB ISOlat1 
+        {"204", "Igrave", "\\{\\\\`\\{I\\}\\}"}, // latin capital letter I with grave,
+        //                                 U+00CC ISOlat1 
+        {"205", "Iacute", "\\{\\\\'\\{I\\}\\}"}, // latin capital letter I with acute, 
+        //                                 U+00CD ISOlat1 
+        {"206", "Icirc", "\\{\\\\\\^\\{I\\}\\}"}, // latin capital letter I with circumflex, 
+        //                                 U+00CE ISOlat1 
+        {"207", "Iuml", "\\{\\\\\"\\{I\\}\\}"}, // latin capital letter I with diaeresis, 
+        //                                 U+00CF ISOlat1 
+        {"208", "ETH", "\\{\\\\DH\\}"}, // latin capital letter ETH, U+00D0 ISOlat1  
+        {"209", "Ntilde", "\\{\\\\~\\{N\\}\\}"}, // latin capital letter N with tilde, 
+        //                                 U+00D1 ISOlat1 
+        {"210", "Ograve", "\\{\\\\`\\{O\\}\\}"}, // latin capital letter O with grave,
+        //                                 U+00D2 ISOlat1 
+        {"211", "Oacute", "\\{\\\\'\\{O\\}\\}"}, // latin capital letter O with acute, 
+        //                                 U+00D3 ISOlat1 
+        {"212", "Ocirc", "\\{\\\\\\^\\{O\\}\\}"}, // latin capital letter O with circumflex, 
+        //                                 U+00D4 ISOlat1 
+        {"213", "Otilde", "\\{\\\\~\\{O\\}\\}"}, // latin capital letter O with tilde, 
+        //                                 U+00D5 ISOlat1 
+        {"214", "Ouml", "\\{\\\\\"\\{O\\}\\}"}, // latin capital letter O with diaeresis, 
+        //                                 U+00D6 ISOlat1 
+        {"215", "times", "\\$\\\\times\\$"}, // multiplication sign, U+00D7 ISOnum  
+        {"216", "Oslash", "\\{\\\\O\\}"}, // latin capital letter O with stroke 
+        //                                 = latin capital letter O slash,
+        //                                 U+00D8 ISOlat1 
+        {"217", "Ugrave", "\\{\\\\`\\{U\\}\\}"}, // latin capital letter U with grave,
+        //                                 U+00D9 ISOlat1 
+        {"218", "Uacute", "\\{\\\\'\\{U\\}\\}"}, // latin capital letter U with acute, 
+        //                                 U+00DA ISOlat1 
+        {"219", "Ucirc", "\\{\\\\\\^\\{U\\}\\}"}, // latin capital letter U with circumflex, 
+        //                                 U+00DB ISOlat1 
+        {"220", "Uuml", "\\{\\\\\"\\{U\\}\\}"}, // latin capital letter U with diaeresis, 
+        //                                 U+00DC ISOlat1 
+        {"221", "Yacute", "\\{\\\\'\\{Y\\}\\}"}, // latin capital letter Y with acute, 
+        //                                 U+00DD ISOlat1 
+        {"222", "THORN", "\\{\\\\TH\\}"}, // latin capital letter THORN, 
+        //                                 U+00DE ISOlat1 
+        {"223", "szlig", "\\{\\\\ss\\}"}, // latin small letter sharp s = ess-zed,
+        //                                 U+00DF ISOlat1 
+        {"224", "agrave", "\\{\\\\`\\{a\\}\\}"}, // latin small letter a with grave
+        //                                 = latin small letter a grave,
+        //                                 U+00E0 ISOlat1 
+        {"225", "aacute", "\\{\\\\'\\{a\\}\\}"}, // latin small letter a with acute, 
+        //                                 U+00E1 ISOlat1 
+        {"226", "acirc", "\\{\\\\\\^\\{a\\}\\}"}, // latin small letter a with circumflex, 
+        //                                 U+00E2 ISOlat1 
+        {"227", "atilde", "\\{\\\\~\\{a\\}\\}"}, // latin small letter a with tilde, 
+        //                                 U+00E3 ISOlat1 
+        {"228", "auml", "\\{\\\\\"\\{a\\}\\}"}, // latin small letter a with diaeresis, 
+        //                                 U+00E4 ISOlat1 
+        {"229", "aring", "\\{\\\\aa\\}"}, // latin small letter a with ring above 
+        //                                 = latin small letter a ring,
+        //                                 U+00E5 ISOlat1 
+        {"230", "aelig", "\\{\\\\ae\\}"}, // latin small letter ae 
+        //                                 = latin small ligature ae, U+00E6 ISOlat1 
+        {"231", "ccedil", "\\{\\\\c\\{c\\}\\}"}, // latin small letter c with cedilla,
+        //                                 U+00E7 ISOlat1 
+        {"232", "egrave", "\\{\\\\`\\{e\\}\\}"}, // latin small letter e with grave,
+        //                                 U+00E8 ISOlat1 
+        {"233", "eacute", "\\{\\\\'\\{e\\}\\}"}, // latin small letter e with acute, 
+        //                                 U+00E9 ISOlat1 
+        {"234", "ecirc", "\\{\\\\\\^\\{e\\}\\}"}, // latin small letter e with circumflex, 
+        //                                 U+00EA ISOlat1 
+        {"235", "euml", "\\{\\\\\"\\{e\\}\\}"}, // latin small letter e with diaeresis, 
+        //                                 U+00EB ISOlat1 
+        {"236", "igrave", "\\{\\\\`\\{\\\\i\\}\\}"}, // latin small letter i with grave,
+        //                                 U+00EC ISOlat1 
+        {"237", "iacute", "\\{\\\\'\\{\\\\i\\}\\}"}, // latin small letter i with acute, 
+        //                                 U+00ED ISOlat1 
+        {"238", "icirc", "\\{\\\\\\^\\{\\\\i\\}\\}"}, // latin small letter i with circumflex, 
+        //                                 U+00EE ISOlat1 
+        {"239", "iuml", "\\{\\\\\"\\{\\\\i\\}\\}"}, // latin small letter i with diaeresis, 
+        //                                 U+00EF ISOlat1 
+        {"240", "eth", "\\{\\\\dh\\}"}, // latin small letter eth, U+00F0 ISOlat1  
+        {"241", "ntilde", "\\{\\\\~\\{n\\}\\}"}, // latin small letter n with tilde, 
+        //                                 U+00F1 ISOlat1 
+        {"242", "ograve", "\\{\\\\`\\{o\\}\\}"}, // latin small letter o with grave,
+        //                                 U+00F2 ISOlat1 
+        {"243", "oacute", "\\{\\\\'\\{o\\}\\}"}, // latin small letter o with acute, 
+        //                                 U+00F3 ISOlat1 
+        {"244", "ocirc", "\\{\\\\\\^\\{o\\}\\}"}, // latin small letter o with circumflex, 
+        //                                 U+00F4 ISOlat1 
+        {"245", "otilde", "\\{\\\\~\\{o\\}\\}"}, // latin small letter o with tilde, 
+        //                                 U+00F5 ISOlat1 
+        {"246", "ouml", "\\{\\\\\"\\{o\\}\\}"}, // latin small letter o with diaeresis, 
+        //                                 U+00F6 ISOlat1 
+        {"247", "divide", "\\$\\\\div\\$"}, // division sign, U+00F7 ISOnum  
+        {"248", "oslash", "\\{\\\\o\\}"}, // latin small letter o with stroke, 
+        //                                 = latin small letter o slash,
+        //                                 U+00F8 ISOlat1 
+        {"249", "ugrave", "\\{\\\\`\\{u\\}\\}"}, // latin small letter u with grave,
+        //                                 U+00F9 ISOlat1 
+        {"250", "uacute", "\\{\\\\'\\{u\\}\\}"}, // latin small letter u with acute, 
+        //                                 U+00FA ISOlat1 
+        {"251", "ucirc", "\\{\\\\\\^\\{u\\}\\}"}, // latin small letter u with circumflex, 
+        //                                 U+00FB ISOlat1 
+        {"252", "uuml", "\\{\\\\\"\\{u\\}\\}"}, // latin small letter u with diaeresis, 
+        //                                 U+00FC ISOlat1 
+        {"253", "yacute", "\\{\\\\'\\{y\\}\\}"}, // latin small letter y with acute, 
+        //                                 U+00FD ISOlat1 
+        {"254", "thorn", "\\{\\\\th\\}"}, // latin small letter thorn, 
+        //                                 U+00FE ISOlat1 
+        {"255", "yuml", "\\{\\\\\"\\{y\\}\\}"}, // latin small letter y with diaeresis, 
+        //                                 U+00FF ISOlat1 
+        {"402", "fnof", "\\$f\\$"}, // latin small f with hook = function 
+        //                                   = florin, U+0192 ISOtech 
+
+        /* Greek */
+        {"913", "Alpha", "\\{\\$\\\\Alpha\\$\\}"}, // greek capital letter alpha, U+0391  
+        {"914", "Beta", "\\{\\$\\\\Beta\\$\\}"}, // greek capital letter beta, U+0392  
+        {"915", "Gamma", "\\{\\$\\\\Gamma\\$\\}"}, // greek capital letter gamma, 
+        //                                   U+0393 ISOgrk3 
+        {"916", "Delta", "\\{\\$\\\\Delta\\$\\}"}, // greek capital letter delta, 
+        //                                   U+0394 ISOgrk3 
+        {"917", "Epsilon", "\\{\\$\\\\Epsilon\\$\\}"}, // greek capital letter epsilon, U+0395  
+        {"918", "Zeta", "\\{\\$\\\\Zeta\\$\\}"}, // greek capital letter zeta, U+0396  
+        {"919", "Eta", "\\{\\$\\\\Eta\\$\\}"}, // greek capital letter eta, U+0397  
+        {"920", "Theta", "\\{\\$\\\\Theta\\$\\}"}, // greek capital letter theta, 
+        //                                   U+0398 ISOgrk3 
+        {"921", "Iota", "\\{\\$\\\\Iota\\$\\}"}, // greek capital letter iota, U+0399  
+        {"922", "Kappa", "\\{\\$\\\\Kappa\\$\\}"}, // greek capital letter kappa, U+039A  
+        {"923", "Lambda", "\\{\\$\\\\Lambda\\$\\}"}, // greek capital letter lambda, 
+        //                                   U+039B ISOgrk3 
+        {"924", "Mu", "\\{\\$\\\\Mu\\$\\}"}, // greek capital letter mu, U+039C  
+        {"925", "Nu", "\\{\\$\\\\Nu\\$\\}"}, // greek capital letter nu, U+039D  
+        {"926", "Xi", "\\{\\$\\\\Xi\\$\\}"}, // greek capital letter xi, U+039E ISOgrk3  
+        {"927", "Omicron", "\\{\\$\\\\Omicron\\$\\}"}, // greek capital letter omicron, U+039F  
+        {"928", "Pi", "\\{\\$\\\\Pi\\$\\}"}, // greek capital letter pi, U+03A0 ISOgrk3  
+        {"929", "Rho", "\\{\\$\\\\Rho\\$\\}"}, // greek capital letter rho, U+03A1  
+        /* there is no Sigmaf, and no U+03A2 character either */
+        {"931", "Sigma", "\\{\\$\\\\Sigma\\$\\}"}, // greek capital letter sigma, 
+        //                                   U+03A3 ISOgrk3 
+        {"932", "Tau", "\\{\\$\\\\Tau\\$\\}"}, // greek capital letter tau, U+03A4  
+        {"933", "Upsilon", "\\{\\$\\\\Upsilon\\$\\}"}, // greek capital letter upsilon, 
+        //                                   U+03A5 ISOgrk3 
+        {"934", "Phi", "\\{\\$\\\\Phi\\$\\}"}, // greek capital letter phi, 
+        //                                   U+03A6 ISOgrk3 
+        {"935", "Chi", "\\{\\$\\\\Chi\\$\\}"}, // greek capital letter chi, U+03A7  
+        {"936", "Psi", "\\{\\$\\\\Psi\\$\\}"}, // greek capital letter psi, 
+        //                                   U+03A8 ISOgrk3 
+        {"937", "Omega", "\\{\\$\\\\Omega\\$\\}"}, // greek capital letter omega, 
+        //                                   U+03A9 ISOgrk3 
+
+        {"945", "alpha", "\\$\\\\alpha\\$"}, // greek small letter alpha, 
+        //                                   U+03B1 ISOgrk3 
+        {"946", "beta", "\\$\\\\beta\\$"}, // greek small letter beta, U+03B2 ISOgrk3  
+        {"947", "gamma", "\\$\\\\gamma\\$"}, // greek small letter gamma, 
+        //                                   U+03B3 ISOgrk3 
+        {"948", "delta", "\\$\\\\delta\\$"}, // greek small letter delta, 
+        //                                   U+03B4 ISOgrk3 
+        {"949", "epsilon", "\\$\\\\epsilon\\$"}, // greek small letter epsilon, 
+        //                                   U+03B5 ISOgrk3 
+        {"950", "zeta", "\\$\\\\zeta\\$"}, // greek small letter zeta, U+03B6 ISOgrk3  
+        {"951", "eta", "\\$\\\\eta\\$"}, // greek small letter eta, U+03B7 ISOgrk3  
+        {"952", "theta", "\\$\\\\theta\\$"}, // greek small letter theta, 
+        //                                   U+03B8 ISOgrk3 
+        {"953", "iota", "\\$\\\\iota\\$"}, // greek small letter iota, U+03B9 ISOgrk3  
+        {"954", "kappa", "\\$\\\\kappa\\$"}, // greek small letter kappa, 
+        //                                   U+03BA ISOgrk3 
+        {"955", "lambda", "\\$\\\\lambda\\$"}, // greek small letter lambda, 
+        //                                   U+03BB ISOgrk3 
+        {"956", "mu", "\\$\\\\mu\\$"}, // greek small letter mu, U+03BC ISOgrk3  
+        {"957", "nu", "\\$\\\\nu\\$"}, // greek small letter nu, U+03BD ISOgrk3  
+        {"958", "xi", "\\$\\\\xi\\$"}, // greek small letter xi, U+03BE ISOgrk3  
+        {"959", "omicron", "\\$\\\\omicron\\$"}, // greek small letter omicron, U+03BF NEW  
+        {"960", "pi", "\\$\\\\phi\\$"}, // greek small letter pi, U+03C0 ISOgrk3  
+        {"961", "rho", "\\$\\\\rho\\$"}, // greek small letter rho, U+03C1 ISOgrk3  
+        {"962", "sigmaf", "\\$\\\\varsigma\\$"}, // greek small letter final sigma, 
+        //                                   U+03C2 ISOgrk3 
+        {"963", "sigma", "\\$\\\\sigma\\$"}, // greek small letter sigma, 
+        //                                   U+03C3 ISOgrk3 
+        {"964", "tau", "\\$\\\\tau\\$"}, // greek small letter tau, U+03C4 ISOgrk3  
+        {"965", "upsilon", "\\$\\\\upsilon\\$"}, // greek small letter upsilon, 
+        {"", "upsi", "\\$\\\\upsilon\\$"}, // alias 
+        //                                   U+03C5 ISOgrk3 
+        {"966", "phi", "\\$\\\\phi\\$"}, // greek small letter phi, U+03C6 ISOgrk3  
+        {"967", "chi", "\\$\\\\chi\\$"}, // greek small letter chi, U+03C7 ISOgrk3  
+        {"968", "psi", "\\$\\\\psi\\$"}, // greek small letter psi, U+03C8 ISOgrk3  
+        {"969", "omega", "\\$\\\\omega\\$"}, // greek small letter omega, 
+        //                                   U+03C9 ISOgrk3 
+        {"977", "thetasym", "\\$\\\\vartheta\\$"}, // greek small letter theta symbol, 
+        {"", "thetav", "\\$\\\\vartheta\\$"}, // greek small letter theta symbol, 
+        {"", "vartheta", "\\$\\\\vartheta\\$"}, // greek small letter theta symbol, 
+        //                                   U+03D1 NEW 
+        {"978", "upsih", "\\{\\$\\\\Upsilon\\$\\}"}, // greek upsilon with hook symbol, 
+        //                                   U+03D2 NEW 
+        {"982", "piv", "\\$\\\\varphi\\$"}, // greek pi symbol, U+03D6 ISOgrk3  
+
+        /* General Punctuation */
+        {"8226", "bull", "\\$\\\\bullet\\$"}, // bullet = black small circle, 
+        //                                    U+2022 ISOpub  
+        /* bullet is NOT the same as bullet operator, U+2219 */
+        {"8230", "hellip", "\\{\\\\ldots\\}"}, // horizontal ellipsis = three dot leader, 
+        //                                    U+2026 ISOpub  
+        {"8242", "prime", "\\$\\\\prime\\$"}, // prime = minutes = feet, U+2032 ISOtech  
+        {"8243", "Prime", "\\$\\{''\\}\\$"}, // double prime = seconds = inches, 
+        //                                    U+2033 ISOtech 
+        {"8254", "oline", "\\{\\\\=\\{\\}\\}"}, // overline = spacing overscore, 
+        //                                    U+203E NEW 
+        {"8260", "frasl", "/"}, // fraction slash, U+2044 NEW  
+
+        /* Letterlike Symbols */
+        {"8472", "weierp", "\\$\\\\wp\\$"}, // script capital P = power set 
+        //                                    = Weierstrass p, U+2118 ISOamso 
+        {"8465", "image", "\\{\\$\\\\Im\\$\\}"}, // blackletter capital I = imaginary part, 
+        //                                    U+2111 ISOamso 
+        {"8476", "real", "\\{\\$\\\\Re\\$\\}"}, // blackletter capital R = real part symbol, 
+        //                                    U+211C ISOamso 
+        {"8482", "trade", "\\{\\\\texttrademark\\}"}, // trade mark sign, U+2122 ISOnum
+        {"8501", "alefsym", "\\$\\\\aleph\\$"}, // alef symbol = first transfinite cardinal, 
+        //                                    U+2135 NEW 
+        /*    alef symbol is NOT the same as hebrew letter alef,
+         U+05D0 although the same glyph could be used to depict both characters */
+        /* Arrows */
+        {"8592", "larr", "\\$\\\\leftarrow\\$"}, // leftwards arrow, U+2190 ISOnum
+        {"8593", "uarr", "\\$\\\\uparrow\\$"}, // upwards arrow, U+2191 ISOnum
+        {"8594", "rarr", "\\$\\\\rightarrow\\$"}, // rightwards arrow, U+2192 ISOnum
+        {"8595", "darr", "\\$\\\\downarrow\\$"}, // downwards arrow, U+2193 ISOnum
+        {"8596", "harr", "\\$\\\\leftrightarrow\\$"}, // left right arrow, U+2194 ISOamsa  
+        {"8629", "crarr", "\\$\\\\dlsh\\$"}, // downwards arrow with corner leftwards 
+        //                                    = carriage return, U+21B5 NEW - require mathabx
+        {"8656", "lArr", "\\{\\$\\\\Leftarrow\\$\\}"}, // leftwards double arrow, U+21D0 ISOtech
+        /*  ISO 10646 does not say that lArr is the same as the 'is implied by' arrow
+         but also does not have any other character for that function. So ? lArr can
+         be used for 'is implied by' as ISOtech suggests */
+        {"8657", "uArr", "\\{\\$\\\\Uparrow\\$\\}"}, // upwards double arrow, U+21D1 ISOamsa
+        {"8658", "rArr", "\\{\\$\\\\Rightarrow\\$\\}"}, // rightwards double arrow,
+        //                                     U+21D2 ISOtech 
+        /*   ISO 10646 does not say this is the 'implies' character but does not have 
+         another character with this function so ?
+         rArr can be used for 'implies' as ISOtech suggests */
+        {"8659", "dArr", "\\{\\$\\\\Downarrow\\$\\}"}, // downwards double arrow, U+21D3 ISOamsa  
+        {"8660", "hArr", "\\{\\$\\\\Leftrightarrow\\$\\}"}, // left right double arrow, 
+        //                                     U+21D4 ISOamsa 
+
+        /* Mathematical Operators */
+        {"8704", "forall", "\\$\\\\forall\\$"}, // for all, U+2200 ISOtech  
+        {"8706", "part", "\\$\\\\partial\\$"}, // partial differential, U+2202 ISOtech
+        {"8707", "exist", "\\$\\\\exists\\$"}, // there exists, U+2203 ISOtech
+        {"8709", "empty", "\\$\\\\emptyset\\$"}, // empty set = null set = diameter,
+        //                                    U+2205 ISOamso 
+        {"8711", "nabla", "\\$\\\\nabla\\$"}, // nabla = backward difference, 
+        //                                    U+2207 ISOtech 
+        {"8712", "isin", "\\$\\\\in\\$"}, // element of, U+2208 ISOtech
+        {"8713", "notin", "\\$\\\\notin\\$"}, // not an element of, U+2209 ISOtech
+        {"8715", "ni", "\\$\\\\ni\\$"}, // contains as member, U+220B ISOtech
+        /* should there be a more memorable name than 'ni'? */
+        {"8719", "prod", "\\$\\\\prod\\$"}, // n-ary product = product sign,
+        //                                    U+220F ISOamsb 
+        /*    prod is NOT the same character as U+03A0 'greek capital letter pi' though
+         the same glyph might be used for both  */
+        {"8721", "sum", "\\$\\\\sum\\$"}, // n-ary sumation, U+2211 ISOamsb  
+        /*    sum is NOT the same character as U+03A3 'greek capital letter sigma'
+         though the same glyph might be used for both */
+        {"8722", "minus", "\\$-\\$"}, // minus sign, U+2212 ISOtech  
+        {"8727", "lowast", "\\$\\\\ast\\$"}, // asterisk operator, U+2217 ISOtech  
+        {"8730", "radic", "\\$\\\\sqrt{}\\$"}, // square root = radical sign, 
+        //                                    U+221A ISOtech 
+        {"8733", "prop", "\\$\\\\propto\\$"}, // proportional to, U+221D ISOtech  
+        {"8734", "infin", "\\$\\\\infty\\$"}, // infinity, U+221E ISOtech  
+        {"8736", "ang", "\\$\\\\angle\\$"}, // angle, U+2220 ISOamso
+        {"8743", "and", "\\$\\\\land\\$"}, // logical and = wedge, U+2227 ISOtech
+        {"8744", "or", "\\$\\\\lor\\$"}, // logical or = vee, U+2228 ISOtech
+        {"8745", "cap", "\\$\\\\cap\\$"}, // intersection = cap, U+2229 ISOtech
+        {"8746", "cup", "\\$\\\\cup\\$"}, // union = cup, U+222A ISOtech
+        {"8747", "int", "\\$\\\\int\\$"}, // integral, U+222B ISOtech
+        {"8756", "there4", "\\$\\\\uptherefore\\$"}, // therefore, U+2234 ISOtech; only in LaTeX package MnSymbol
+        {"8764", "sim", "\\$\\\\sim\\$"}, // tilde operator = varies with = similar to,
+        //                                    U+223C ISOtech 
+        /*  tilde operator is NOT the same character as the tilde, U+007E,
+         although the same glyph might be used to represent both   */
+        {"8773", "cong", "\\$\\\\cong\\$"}, // approximately equal to, U+2245 ISOtech  
+        {"8776", "asymp", "\\$\\\\approx\\$"}, // almost equal to = asymptotic to, 
+        //                                    U+2248 ISOamsr 
+        {"8800", "ne", "\\$\\\\neq\\$"}, // not equal to, U+2260 ISOtech  
+        {"8801", "equiv", "\\$\\\\equiv\\$"}, // identical to, U+2261 ISOtech  
+        {"8804", "le", "\\$\\\\leq\\$"}, // less-than or equal to, U+2264 ISOtech  
+        {"8805", "ge", "\\$\\\\geq\\$"}, // greater-than or equal to, 
+        //                                    U+2265 ISOtech 
+        {"8834", "sub", "\\$\\\\subset\\$"}, // subset of, U+2282 ISOtech  
+        {"8835", "sup", "\\$\\\\supset\\$"}, // superset of, U+2283 ISOtech  
+        /*    note that nsup, 'not a superset of, U+2283' is not covered by the Symbol 
+         font encoding and is not included. Should it be, for symmetry?
+         It is in ISOamsn   */
+        {"8836", "nsub", "\\$\\\\nsubset\\$"}, // not a subset of, U+2284 ISOamsn  
+        {"8838", "sube", "\\$\\\\subseteq\\$"}, // subset of or equal to, U+2286 ISOtech  
+        {"8839", "supe", "\\$\\\\supseteq\\$"}, // superset of or equal to, 
+        //                                    U+2287 ISOtech 
+        {"8853", "oplus", "\\$\\\\oplus\\$"}, // circled plus = direct sum, 
+        //                                    U+2295 ISOamsb 
+        {"8855", "otimes", "\\$\\\\otimes\\$"}, // circled times = vector product,
+        //                                    U+2297 ISOamsb 
+        {"8869", "perp", "\\$\\\\perp\\$"}, // up tack = orthogonal to = perpendicular, 
+        //                                    U+22A5 ISOtech 
+        {"8901", "sdot", "\\$\\\\cdot\\$"}, // dot operator, U+22C5 ISOamsb  
+        /* dot operator is NOT the same character as U+00B7 middle dot */
+        /* Miscellaneous Technical */
+        {"8968", "lceil", "\\$\\\\lceil\\$"}, // left ceiling = apl upstile, 
+        //                                    U+2308 ISOamsc  
+        {"8969", "rceil", "\\$\\\\rceil\\$"}, // right ceiling, U+2309 ISOamsc   
+        {"8970", "lfloor", "\\$\\\\lfloor\\$"}, // left floor = apl downstile, 
+        //                                    U+230A ISOamsc  
+        {"8971", "rfloor", "\\$\\\\rfloor\\$"}, // right floor, U+230B ISOamsc   
+        {"9001", "lang", "\\$\\\\langle\\$"}, // left-pointing angle bracket = bra, 
+        //                                    U+2329 ISOtech 
+        /*    lang is NOT the same character as U+003C 'less than' 
+         or U+2039 'single left-pointing angle quotation mark' */
+        {"9002", "rang", "\\$\\\\rangle\\$"}, // right-pointing angle bracket = ket, 
+        //                                    U+232A ISOtech 
+        /*    rang is NOT the same character as U+003E 'greater than' 
+         or U+203A 'single right-pointing angle quotation mark' */
+        /* Geometric Shapes */
+        {"9674", "loz", "\\$\\\\lozenge\\$"}, // lozenge, U+25CA ISOpub  
+
+        /* Miscellaneous Symbols */
+        {"9824", "spades", "\\$\\\\spadesuit\\$"}, // black spade suit, U+2660 ISOpub  
+        /* black here seems to mean filled as opposed to hollow */
+        {"9827", "clubs", "\\$\\\\clubsuit\\$"}, // black club suit = shamrock, 
+        //                                    U+2663 ISOpub 
+        {"9829", "hearts", "\\$\\\\heartsuit\\$"}, // black heart suit = valentine, 
+        //                                    U+2665 ISOpub 
+        {"9830", "diams", "\\$\\\\diamondsuit\\$"}, // black diamond suit, U+2666 ISOpub  
+        {"34", "quot", "\""}, // quotation mark = APL quote,
+        //                                   U+0022 ISOnum 
+        {"38", "amp", "\\\\&"}, // ampersand, U+0026 ISOnum 
+        {"60", "lt", "\\$<\\$"}, // less-than sign, U+003C ISOnum 
+        {"62", "gt", "\\$>\\$"}, // greater-than sign, U+003E ISOnum 
+
+        /* Latin Extended-A */
+        {"338", "OElig", "\\{\\\\OE\\}"}, // latin capital ligature OE,
+        //                                   U+0152 ISOlat2 
+        {"339", "oelig", "\\{\\\\oe\\}"}, // latin small ligature oe, U+0153 ISOlat2 
+        /* ligature is a misnomer, this is a separate character in some languages */
+        {"352", "Scaron", "\\{\\\\v\\{S\\}\\}"}, // latin capital letter S with caron,
+        //                                   U+0160 ISOlat2 
+        {"353", "scaron", "\\{\\\\v\\{s\\}\\}"}, // latin small letter s with caron,
+        //                                   U+0161 ISOlat2 
+        {"376", "Yuml", "\\{\\\\\"\\{Y\\}\\}"}, // latin capital letter Y with diaeresis,
+        //                                   U+0178 ISOlat2 
+
+        /* Spacing Modifier Letters */
+        {"710", "circ", "\\{\\\\textasciicircum\\}"}, // modifier letter circumflex accent,
+        //                                   U+02C6 ISOpub 
+        {"732", "tilde", "\\{\\\\textasciitilde\\}"}, // small tilde, U+02DC ISOdia 
+
+        /* General Punctuation */
+        {"8194", "ensp", "\\\\hspace\\{0.5em\\}"}, // en space, U+2002 ISOpub  
+        {"8195", "emsp", "\\\\hspace\\{1em\\}"}, // em space, U+2003 ISOpub  
+        {"8201", "thinsp", "\\\\hspace\\{0.167em\\}"}, // thin space, U+2009 ISOpub  
+        {"8204", "zwnj", ""}, // zero width non-joiner, 
+        //                                   U+200C NEW RFC 2070 
+        {"8205", "zwj", ""}, // zero width joiner, U+200D NEW RFC 2070  
+        {"8206", "lrm", ""}, // left-to-right mark, U+200E NEW RFC 2070  
+        {"8207", "rlm", ""}, // right-to-left mark, U+200F NEW RFC 2070  
+        {"8211", "ndash", "--"}, // en dash, U+2013 ISOpub  
+        {"8212", "mdash", "---"}, // em dash, U+2014 ISOpub  
+        {"8216", "lsquo", "\\{\\\\textquoteleft\\}"}, // left single quotation mark, 
+        //                                   U+2018 ISOnum 
+        {"8217", "rsquo", "\\{\\\\textquoteright\\}"}, // right single quotation mark, 
+        //                                   U+2019 ISOnum 
+        {"8218", "sbquo", "\\{\\\\quotesinglbase\\}"}, // single low-9 quotation mark, U+201A NEW  
+        {"8220", "ldquo", "\\{\\\\textquotedblleft\\}"}, // left double quotation mark, 
+        //                                   U+201C ISOnum 
+        {"8221", "rdquo", "\\{\\\\textquotedblright\\}"}, // right double quotation mark, 
+        //                                   U+201D ISOnum 
+        {"8222", "bdquo", "\\{\\\\quotedblbase\\}"}, // double low-9 quotation mark, U+201E NEW  
+        {"8224", "dagger", "\\{\\\\dag\\}"}, // dagger, U+2020 ISOpub  
+        {"8225", "Dagger", "\\{\\\\ddag\\}"}, // double dagger, U+2021 ISOpub  
+        {"8240", "permil", "\\{\\\\textperthousand\\}"}, // per mille sign, U+2030 ISOtech  
+        {"8249", "lsaquo", "\\{\\\\guilsinglleft\\}"}, // single left-pointing angle quotation mark, 
+        //                                   U+2039 ISO proposed 
+        /* lsaquo is proposed but not yet ISO standardized */
+        {"8250", "rsaquo", "\\{\\\\guilsinglright\\}"}, // single right-pointing angle quotation mark, 
+        //                                   U+203A ISO proposed 
+        /* rsaquo is proposed but not yet ISO standardized */
+        {"8364", "euro", "\\{\\\\texteuro\\}"}, // euro sign, U+20AC NEW 
+            
+        /* Manually added */
+        {"37", "percnt", "\\\\%"}, // Percent
+        {"39", "", "'"}, // Apostrophe
+        {"40", "", "("}, // Left bracket
+        {"41", "", ")"}, // Right bracket
+        {"43", "plus", "\\+"}, // Plus
+        {"44", "comma", ","}, // Comma
+        {"45", "hyphen", "-"}, // Hyphen
+        {"46", "period", "\\."}, // Period
+        {"47", "slash", "/"}, // Slash (solidus)
+        {"58", "colon", ":"}, // Colon
+        {"59", "semi", ";"}, // Semi colon
+        {"91", "lsqb", "\\["}, // Left square bracket
+        {"92", "bsol", "\\{\\\\textbackslash\\}"}, // Backslash
+        {"93", "rsqb", "\\]"}, // Right square bracket
+        {"94", "Hat", "\\{\\\\\\^\\{\\}\\}"}, // Circumflex
+        {"95", "lowbar", "\\\\_"}, // Underscore
+        {"96", "grave", "\\{\\\\`\\{\\}\\}"}, // Grave
+        {"123", "lbrace", "\\\\\\{"}, // Left curly bracket
+        {"", "lcub", "\\\\\\{"}, // Left curly bracket
+        {"124", "vert", "\\|"}, // Vertical bar
+        {"", "verbar", "\\|"}, // Vertical bar
+        {"", "VerticalLine", "\\|"}, // Vertical bar
+        {"125", "rbrace", "\\\\\\}"}, // Right curly bracket
+        {"", "rcub", "\\\\\\}"}, // Right curly bracket
+        {"138", "", "\\{\\\\v\\{S\\}\\}"}, // Line tabulation set   
+     // {"141", "", ""}, // Reverse line feed
+        {"145", "", "`"}, // Apostrophe
+        {"146", "", "'"}, // Apostrophe
+        {"147", "", "``"}, // Quotation mark
+        {"148", "", "''"}, // Quotation mark
+        {"150", "", "--"}, // En dash
+        {"154", "", "\\{\\\\v\\{s\\}\\}"}, // Single character introducer
+        {"260", "Aogon", "\\{\\\\k\\{A\\}\\}"}, // capital A with ogonek
+        {"261", "aogon", "\\{\\\\k\\{a\\}\\}"}, // small a with ogonek
+        {"262", "Cacute", "\\{\\\\'\\{C\\}\\}"}, // capital C with acute
+        {"263", "cacute", "\\{\\\\'\\{c\\}\\}"}, // small C with acute
+        {"264", "Ccirc", "\\{\\\\\\^\\{C\\}\\}"}, // capital C with circumflex
+        {"265", "ccirc", "\\{\\\\\\^\\{c\\}\\}"}, // small C with circumflex
+        {"266", "Cdot", "\\{\\\\\\.\\{C\\}\\}"}, // capital C with dot above
+        {"267", "cdot", "\\{\\\\\\.\\{c\\}\\}"}, // small C with dot above
+        {"268", "Ccaron", "\\{\\\\v\\{C\\}\\}"}, // capital C with caron
+        {"269", "ccaron", "\\{\\\\v\\{c\\}\\}"}, // small C with caron
+        {"272", "Dstrok", "\\{\\\\DJ\\}"}, // capital D with stroke
+        {"273", "dstrok", "\\{\\\\dj\\}"}, // small d with stroke
+        {"280", "Eogon", "\\{\\\\k\\{E\\}\\}"}, // capital E with ogonek
+        {"281", "eogon", "\\{\\\\k\\{e\\}\\}"}, // small e with ogonek
+        {"298", "Imacr", "\\{\\\\=\\{I\\}\\}"}, // capital I with macron
+        {"299", "imacr", "\\{\\\\=\\{\\\\i\\}\\}"}, // small i with macron
+        {"302", "Iogon", "\\{\\\\k\\{I\\}\\}"}, // capital I with ogonek
+        {"303", "iogon", "\\{\\\\k\\{i\\}\\}"}, // small i with ogonek
+        {"304", "Idot", "\\{\\\\.\\{I\\}\\}"},    // capital I with dot above
+        {"305", "inodot", "\\{\\\\i\\}"},    // Small i without the dot
+        {"", "imath", "\\{\\\\i\\}"},    // Small i without the dot
+        {"321", "Lstrok", "\\{\\\\L\\}"},    // upper case l with stroke
+        {"322", "lstrok", "\\{\\\\l\\}"},    // lower case l with stroke
+        {"370", "Uogon", "\\{\\\\k\\{U\\}\\}"}, // capital U with ogonek
+        {"371", "uogon", "\\{\\\\k\\{u\\}\\}"}, // small u with ogonek
+        {"490", "Oogon", "\\{\\\\k\\{O\\}\\}"},    // capital letter O with ogonek
+        {"491", "oogon", "\\{\\\\k\\{o\\}\\}"},    // small letter o with ogonek
+        {"492", "", "\\{\\\\k\\{\\\\=\\{O\\}\\}\\}"},    // capital letter O with ogonek and macron
+        {"493", "", "\\{\\\\k\\{\\\\=\\{o\\}\\}\\}"},    // small letter o with ogonek and macron
+        {"536", "", "\\{\\\\cb\\{S\\}\\}"},    // capital letter S with comma below, require combelow
+        {"537", "", "\\{\\\\cb\\{s\\}\\}"},    // small letter S with comma below, require combelow
+        {"538", "", "\\{\\\\cb\\{T\\}\\}"},    // capital letter T with comma below, require combelow
+        {"539", "", "\\{\\\\cb\\{t\\}\\}"},    // small letter T with comma below, require combelow
+        {"727", "caron", "\\{\\\\v\\{\\}\\}"}, // Caron
+        {"", "Hacek", "\\{\\\\v\\{\\}\\}"}, // Caron
+        {"728", "breve", "\\{\\\\u\\{\\}\\}"}, // Breve
+        {"", "Breve", "\\{\\\\u\\{\\}\\}"}, // Breve
+        {"729", "dot", "\\{\\\\\\.\\{\\}\\}"}, // Dot above
+        {"730", "ring", "\\{\\\\r\\{\\}\\}"}, // Ring above
+        {"731", "ogon", "\\{\\\\k\\{\\}\\}"}, // Ogonek
+        {"733", "dblac", "\\{\\\\H\\{\\}\\}"}, // Double acute
+        {"949", "epsi", "\\$\\\\epsilon\\$"},    // Epsilon - double check
+        {"1013", "epsiv", "\\$\\\\varepsilonup\\$"},    // lunate epsilon, requires txfonts
+        {"1055", "", "\\{\\\\cyrchar\\\\CYRP\\}"},    // Cyrillic capital Pe
+        {"1082", "", "\\{\\\\cyrchar\\\\cyrk\\}"},    // Cyrillic small Ka
+     // {"2013", "", ""},    // NKO letter FA -- Maybe en dash = 0x2013?
+     // {"2014", "", ""},    // NKO letter FA -- Maybe em dash = 0x2014?
+        {"8192", "", "\\\\hspace\\{0.5em\\}"}, // en quad
+        {"8193", "", "\\\\hspace\\{1em\\}"}, // em quad
+        {"8196", "", "\\\\hspace\\{0.333em\\}"}, // Three-Per-Em Space 
+        {"8197", "", "\\\\hspace\\{0.25em\\}"}, // Four-Per-Em Space 
+        {"8198", "", "\\\\hspace\\{0.167em\\}"}, // Six-Per-Em Space
+        {"8208", "hyphen", "-"},    // Hyphen
+        {"8229", "nldr", "\\.\\."},    // Double dots - en leader
+        {"8451", "", "\\$\\\\deg\\$\\{C\\}"}, // Degree Celsius
+        {"8459", "Hscr", "\\$\\\\mathcal\\{H\\}\\$"}, // script capital H -- possibly use \mathscr
+        {"8460", "Hfr", "\\$\\\\mathbb\\{H\\}\\$"}, // black letter capital H -- requires e.g. amsfonts
+        {"8466", "Lscr", "\\$\\\\mathcal\\{L\\}\\$"}, // script capital L -- possibly use \mathscr
+        {"8467", "ell", "\\{\\\\ell\\}"}, // script small l 
+        {"8469", "naturals", "\\$\\\\mathbb\\{N\\}\\$"}, // double struck capital N -- requires e.g. amsfonts
+        {"8486", "", "\\$\\{\\\\Omega\\}\\$"}, // Omega
+        {"8491", "angst", "\\{\\\\AA\\}"}, // Angstrom 
+        {"8496", "Escr", "\\$\\\\mathcal\\{E\\}\\$"}, // script capital E 
+        {"8531", "frac13", "\\$\\\\sfrac\\{1\\}\\{3\\}\\$"},    // Vulgar fraction one third
+        {"8532", "frac23", "\\$\\\\sfrac\\{2\\}\\{3\\}\\$"},    // Vulgar fraction two thirds
+        {"8533", "frac15", "\\$\\\\sfrac\\{1\\}\\{5\\}\\$"},    // Vulgar fraction one fifth
+        {"8534", "frac25", "\\$\\\\sfrac\\{2\\}\\{5\\}\\$"},    // Vulgar fraction two fifths
+        {"8535", "frac35", "\\$\\\\sfrac\\{3\\}\\{5\\}\\$"},    // Vulgar fraction three fifths
+        {"8536", "frac45", "\\$\\\\sfrac\\{4\\}\\{5\\}\\$"},    // Vulgar fraction four fifths
+        {"8537", "frac16", "\\$\\\\sfrac\\{1\\}\\{6\\}\\$"},    // Vulgar fraction one sixth
+        {"8538", "frac56", "\\$\\\\sfrac\\{5\\}\\{6\\}\\$"},    // Vulgar fraction five sixths
+        {"8539", "frac18", "\\$\\\\sfrac\\{1\\}\\{8\\}\\$"},    // Vulgar fraction one eighth
+        {"8540", "frac38", "\\$\\\\sfrac\\{3\\}\\{8\\}\\$"},    // Vulgar fraction three eighths
+        {"8541", "frac58", "\\$\\\\sfrac\\{5\\}\\{8\\}\\$"},    // Vulgar fraction five eighths
+        {"8542", "frac78", "\\$\\\\sfrac\\{7\\}\\{8\\}\\$"},    // Vulgar fraction seven eighths
+        {"8710", "", "\\$\\\\triangle\\$"},    // Increment - could use a more appropriate symbol
+        {"8714", "", "\\$\\\\in\\$"},    // Small element in
+        {"8729", "bullet", "\\$\\\\bullet\\$"},    // Bullet operator
+        {"8758", "ratio", ":"},    // Colon/ratio
+        {"8771", "sime", "\\$\\\\simeq\\$"}, // almost equal to = asymptotic to, 
+        {"8776", "ap", "\\$\\\\approx\\$"}, // almost equal to = asymptotic to, 
+        {"8810", "ll", "\\$\\\\ll\\$"}, // Much less than 
+        {"", "Lt", "\\$\\\\ll\\$"}, // Much less than 
+        {"8811", "gg", "\\$\\\\gg\\$"}, // Much greater than 
+        {"", "Gt", "\\$\\\\gg\\$"}, // Much greater than 
+        {"8819", "gsim", "\\$\\\\gtrsim\\$"}, // Greater than or equivalent to
+        {"8882", "vltri", "\\$\\\\triangleleft\\$"}, // Left triangle
+        {"8883", "vrtri", "\\$\\\\triangleright\\$"}, // Right triangle
+        {"8896", "xwedge", "\\$\\\\bigwedge\\$"}, // Big wedge
+        {"8897", "xvee", "\\$\\\\bigvee\\$"}, // Big vee
+        {"9426", "", "\\{\\\\copyright\\}"}, // circled small letter C
+        {"9633", "square", "\\$\\\\square\\$"}, // White square
+        {"9653", "utri", "\\$\\\\triangle\\$"}, // White up-pointing small triangle -- \vartriangle probably
+                                                // better but requires amssymb
+        {"10877", "les", "\\$\\\\leqslant\\$"},    // Less than slanted equal -- requires amssymb 
+        {"10878", "ges", "\\$\\\\geqslant\\$"},    // Less than slanted equal -- requires amssymb 
+        {"119978", "Oscr", "\\$\\\\mathcal\\{O\\}\\$"} // script capital O -- possibly use \mathscr
+        
+    };
+    
+        // List of combining accents
+        private String[][] accentList = new String[][] {
+        {"768", "`"},    // Grave 
+        {"769", "'"},    // Acute
+        {"770", "\\^"},  // Circumflex
+        {"771", "~"},    // Tilde
+        {"772", "="},    // Macron
+        {"773", "="},     // Overline - not completely correct
+        {"774", "u"},    // Breve
+        {"775", "\\."},  // Dot above
+        {"776", "\""},   // Diaeresis
+        {"777", "h"},    // Hook above
+        {"778", "r"},    // Ring 
+        {"779", "H"},    // Double acute
+        {"780", "v"},    // Caron
+        {"781", "\\|"},  // Vertical line above
+        {"782", "U"},     // Double vertical line above
+        {"783", "G"},    // Double grave
+        {"784", "textdotbreve"},    // Candrabindu
+        {"785", "t"},    // Inverted breve
+//        {"786", ""},    // Turned comma above
+//        {"787", ""},    // Comma above
+//        {"788", ""},    // Reversed comma above
+//        {"789", ""},    // Comma above right
+        {"790", "textsubgrave"},    // Grave accent below -requires tipa
+        {"791", "textsubacute"},    // Acute accent below - requires tipa
+        {"792", "textadvancing"},    // Left tack below - requires tipa
+        {"793", "textretracting"},    // Right tack below - requires tipa
+//        {"794", ""},    // Left angle above
+//        {"795", ""},    // Horn
+        {"796", "textsublhalfring"},    // Left half ring below - requires tipa
+        {"797", "textraising"},    // Up tack below - requires tipa
+        {"798", "textlowering"},    // Down tack below - requires tipa
+        {"799", "textsubplus"},    // Plus sign below - requires tipa
+//        {"800", ""},    // Minus sign below
+//        {"801", ""},    // Palatalized hook below
+//        {"802", ""},    // Retroflex hook below
+        {"803", "d"},    // Dot below
+        {"804", "textsubumlaut"},    // Diaeresis below - requires tipa
+        {"805", "textsubring"},    // Ring below - requires tipa
+        {"806", "cb"},    // Comma below - requires combelow
+        {"807", "c"},    // Cedilla
+        {"808", "k"},    // Ogonek
+        {"809", "textsyllabic"},    // Vertical line below - requires tipa
+        {"810", "textsubbridge"},    // Bridge below - requires tipa
+        {"811", "textsubw"},    // Inverted double arch below - requires tipa
+        {"812", "textsubwedge"},    // Caron below
+        {"813", "textsubcircum"},    // Circumflex accent below - requires tipa
+//        {"814", ""},    // Breve below
+        {"815", "textsubarch"},    // Inverted breve below - requires tipa
+        {"816", "textsubtilde"},    // Tilde below - requires tipa
+        {"817", "b"},    // Macron below - not completely correct
+        {"818", "b"},    // Underline
+        {"819", "subdoublebar"},    // Double low line -- requires extraipa
+        {"820", "textsuperimposetilde"},    // Tilde overlay - requires tipa
+//        {"821", ""},    // Short stroke overlay
+//        {"822", ""},    // Long stroke overlay
+//        {"823", ""},    // Short solidus overlay
+//        {"824", ""},    // Long solidus overlay
+        {"825", "textsubrhalfring"},    // Right half ring below - requires tipa
+        {"826", "textinvsubbridge"},    // inverted bridge below - requires tipa
+        {"827", "textsubsquare"},    // Square below - requires tipa
+        {"828", "textseagull"},    // Seagull below - requires tipa
+        {"829", "textovercross"},    // X above - requires tipa
+//        {"830", ""},    // Vertical tilde
+//        {"831", ""},    // Double overline
+//        {"832", ""},    // Grave tone mark
+//        {"833", ""},    // Acute tone mark
+//        {"834", ""},    // Greek perispomeni
+//        {"835", ""},    // Greek koronis
+//        {"836", ""},    // Greek dialytika tonos
+//        {"837", ""},    // Greek ypogegrammeni
+        {"838", "overbridge"},    // Bridge above - requires extraipa
+        {"839", "subdoublebar"},    // Equals sign below - requires extraipa
+        {"840", "subdoublevert"},    // Double vertical line below - requires extraipa
+        {"841", "subcorner"},    // Left angle below - requires extraipa
+        {"842", "crtilde"},    // Not tilde above - requires extraipa
+        {"843", "dottedtilde"},    // Homothetic above - requires extraipa
+        {"844", "doubletilde"},    // Almost equal to above - requires extraipa
+        {"845", "spreadlips"},    // Left right arrow below - requires extraipa
+        {"846", "whistle"},    // Upwards arrow below - requires extraipa
+//        {"864", ""},    // Double tilde
+//        {"865", ""},    // Double inverted breve
+        {"866", "sliding"},    // Double rightwards arrow below - requires extraipa
+        };
+
+        private HashMap<String, String> escapedSymbols = new HashMap<String, String>();
+        private HashMap<Integer, String> escapedAccents = new HashMap<Integer, String>();
+        private HashMap<Integer, String> numSymbols = new HashMap<Integer, String>();
+        
+        
+	
+	public HTMLConverter() {
+		super();
+                for (int i=0;i<conversionList.length;i++) {
+                    if (conversionList[i][2].length() >= 1) {
+                        if (conversionList[i][1].length() >= 1) {
+                            escapedSymbols.put("&" + conversionList[i][1] + ";" , conversionList[i][2]);
+                        }
+                        if (conversionList[i][0].length() >= 1) {
+                            numSymbols.put(Integer.decode(conversionList[i][0]) , conversionList[i][2]);
+                        }
+                    }
+                }
+                for (int i=0;i<accentList.length;i++) {
+                    escapedAccents.put(Integer.decode(accentList[i][0]), accentList[i][1]);
+                }
+	}
+        
+    public String format(String text) {
+        if (text == null)
+            return null;
+        StringBuffer sb = new StringBuffer();
+	// Deal with the form <sup>k</sup>and <sub>k</sub>
+        // If the result is in text or equation form can be controlled
+        // From the "Advanced settings" tab
+        if(Globals.prefs.getBoolean("useConvertToEquation")) {
+            text = text.replaceAll("<sup>([^<]+)</sup>", "\\$\\^\\{$1\\}\\$");
+            text = text.replaceAll("<sub>([^<]+)</sub>", "\\$_\\{$1\\}\\$");
+        } else {
+            text = text.replaceAll("<sup>([^<]+)</sup>", "\\\\textsuperscript\\{$1\\}");
+            text = text.replaceAll("<sub>([^<]+)</sub>", "\\\\textsubscript\\{$1\\}");
+        }
+        
+        // TODO: maybe rewrite this based on regular expressions instead
+        // Note that (at least) the IEEE Xplore fetcher must be fixed as it relies on the current way to 
+        // remove tags for its image alt-tag to equation converter
+        for (int i=0; i<text.length(); i++) {
+
+            int c = text.charAt(i);
+
+            if (c == '<') {
+                i = readTag(text, sb, i);
+            } else
+                sb.append((char)c);
+
+        }
+        text = sb.toString();
+        
+        // Handle text based HTML entities
+        Set<String> patterns = escapedSymbols.keySet();
+        for (String pattern: patterns) {
+        	text = text.replaceAll(pattern, escapedSymbols.get(pattern));
+        }
+        
+        // Handle numerical HTML entities
+        Pattern escapedPattern = Pattern.compile("&#([x]*)([0]*)(\\p{XDigit}+);");
+        Matcher m = escapedPattern.matcher(text);
+        while (m.find()) {
+	    //	    System.err.println("Found pattern: " + m.group(1));
+	    //      System.err.println("Found pattern: " + m.group(2));
+            int num = Integer.decode(m.group(1).replace("x", "#") + m.group(3));
+            if(numSymbols.containsKey(num)) {
+                text = text.replaceAll("&#" + m.group(1) + m.group(2) + m.group(3) + ";", numSymbols.get(num));
+            } 
+        }
+
+        escapedPattern = Pattern.compile("(.)&#([x]*)([0]*)(\\p{XDigit}+);");
+        m = escapedPattern.matcher(text);
+        while (m.find()) {
+	    //	    System.err.println("Found pattern: " + m.group(1));
+	    //      System.err.println("Found pattern: " + m.group(2));
+            int num = Integer.decode(m.group(2).replace("x", "#") + m.group(4));
+            if(escapedAccents.containsKey(num)) {
+                if(m.group(1).equals("i")) {
+                    text = text.replaceAll(m.group(1) + "&#" + m.group(2) + m.group(3) + m.group(4) + ";", "\\{\\\\" + escapedAccents.get(num) + "\\{\\\\i\\}\\}");
+                } else if(m.group(1).equals("j")){
+                    text = text.replaceAll(m.group(1) + "&#" + m.group(2) + m.group(3) + m.group(4) + ";", "\\{\\\\" + escapedAccents.get(num) + "\\{\\\\j\\}\\}");
+                } else {
+                    text = text.replaceAll(m.group(1) + "&#" + m.group(2) + m.group(3) + m.group(4) + ";", "\\{\\\\" + escapedAccents.get(num) + "\\{" + m.group(1) + "\\}\\}");
+                }
+            } 
+        }
+
+        escapedPattern = Pattern.compile("&#([x]*)([0]*)(\\p{XDigit}+);");
+        m = escapedPattern.matcher(text);
+        while (m.find()) {
+	    //	    System.err.println("Found pattern: " + m.group(1));
+	    //      System.err.println("Found pattern: " + m.group(2));
+            int num = Integer.decode(m.group(1).replace("x", "#") + m.group(3));
+            System.err.println("HTML escaped char not converted: " + m.group(1) + m.group(2) + m.group(3) + " = " + Integer.toString(num));
+        }
+        
+        // Remove $$ in case of two adjacent conversions
+        text = text.replace("$$","");
+        
+       // Find non-covered special characters with alphabetic codes
+        escapedPattern = Pattern.compile("&(\\w+);");
+        m = escapedPattern.matcher(text);
+        while (m.find()) {
+	    System.err.println("HTML escaped char not converted: " + m.group(1));
+	}
+
+        return text.trim();
+    }
+
+    private final int MAX_TAG_LENGTH = 30;
+    /*private final int MAX_CHAR_LENGTH = 10;
+
+    private int readHtmlChar(String text, StringBuffer sb, int position) {
+        // Have just read the < character that starts the tag.
+        int index = text.indexOf(';', position);
+        if ((index > position) && (index-position < MAX_CHAR_LENGTH)) {
+        	//String code = text.substring(position, index);
+            //System.out.println("Removed code: "+text.substring(position, index));
+            return index; // Just skip the tag.
+        } else return position; // Don't do anything.
+    }*/
+
+    private int readTag(String text, StringBuffer sb, int position) {
+        // Have just read the < character that starts the tag.
+        int index = text.indexOf('>', position);
+        if ((index > position) && (index-position < MAX_TAG_LENGTH)) {
+            //System.out.println("Removed tag: "+text.substring(position, index));
+            return index; // Just skip the tag.
+        } else return position; // Don't do anything.
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java b/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
index 16eea3b..ec30eaa 100644
--- a/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
+++ b/src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
@@ -1,785 +1,785 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.awt.BorderLayout;
-
-import java.io.BufferedReader;
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-
-import java.net.ConnectException;
-import java.net.CookieHandler;
-import java.net.CookieManager;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.swing.ButtonGroup;
-import javax.swing.JCheckBox;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.Util;
-
-public class IEEEXploreFetcher implements EntryFetcher {
-
-    final CaseKeeperList caseKeeperList = new CaseKeeperList();
-    final CaseKeeper caseKeeper = new CaseKeeper();
-    
-    ImportInspector dialog = null;
-	OutputPrinter status;
-    final HTMLConverter htmlConverter = new HTMLConverter();
-    
-    private JCheckBox absCheckBox = new JCheckBox(Globals.lang("Include abstracts"), false);
-    private JRadioButton htmlButton = new JRadioButton(Globals.lang("HTML parser"));
-    private JRadioButton bibButton = new JRadioButton(Globals.lang("BibTeX importer"));
-    
-    private CookieManager cm = new CookieManager();
-    
-    private static final int MAX_FETCH = 100;
-    private int perPage = MAX_FETCH, hits = 0, unparseable = 0, parsed = 0;
-    private int piv = 0;
-    private boolean shouldContinue = false;
-    private boolean includeAbstract = false;
-    private boolean importBibtex = false;
-    
-    private String terms;
-    private final String startUrl = "http://ieeexplore.ieee.org/search/freesearchresult.jsp?queryText=";
-    private final String endUrl = "&rowsPerPage=" + Integer.toString(perPage) + "&pageNumber=";
-    private String searchUrl;
-    private final String importUrl = "http://ieeexplore.ieee.org/xpls/downloadCitations";
-    
-    private final Pattern hitsPattern = Pattern.compile("([0-9,]+) Results");
-    private final Pattern idPattern = Pattern.compile("<input name=\'\' title=\'.*\' type=\'checkbox\'" + 
-						      "value=\'\'\\s*id=\'([0-9]+)\'/>");
-    private final Pattern typePattern = Pattern.compile("<span class=\"type\">\\s*(.+)");
-    private HashMap<String, String> fieldPatterns = new HashMap<String, String>();
-    private final Pattern absPattern = Pattern.compile("<p>\\s*(.+)");
-    
-    Pattern stdEntryPattern = Pattern.compile(".*<strong>(.+)</strong><br>"
-			+ "\\s+(.+)");
-    
-    Pattern publicationPattern = Pattern.compile("(.*), \\d*\\.*\\s?(.*)");
-    Pattern proceedingPattern = Pattern.compile("(.*?)\\.?\\s?Proceedings\\s?(.*)");
-    Pattern abstractLinkPattern = Pattern.compile(
-	   "<a href=\'(.+)\'>\\s*<span class=\"more\">View full.*</span> </a>");
-    String abrvPattern = ".*[^,] '?\\d+\\)?";
-
-    Pattern ieeeArticleNumberPattern = Pattern.compile("<a href=\".*arnumber=(\\d+).*\">");
-    
-    // Common words in IEEE Xplore that should always be 
-    
-    public IEEEXploreFetcher() {
-    	super();
-    	CookieHandler.setDefault(cm);
-        
-    	fieldPatterns.put("title", "<a\\s*href=[^<]+>\\s*(.+)\\s*</a>");
-        fieldPatterns.put("author", "</h3>\\s*(.+)");
-        fieldPatterns.put("volume", "Volume:\\s*([A-Za-z-]*\\d+)");
-        fieldPatterns.put("number", "Issue:\\s*(\\d+)");
-        //fieldPatterns.put("part", "Part (\\d+), (.+)");
-        fieldPatterns.put("year", "(?:Copyright|Publication) Year:\\s*(\\d{4})");
-        fieldPatterns.put("pages", "Page\\(s\\):\\s*(\\d+)\\s*-\\s*(\\d*)");
-        //fieldPatterns.put("doi", "Digital Object Identifier:\\s*<a href=.*>(.+)</a>");
-        fieldPatterns.put("doi", "<a href=\"http://dx.doi.org/(.+)\" target");
-        fieldPatterns.put("url", "<a href=\"(/stamp/stamp[^\"]+)");       
-    }
-    public JPanel getOptionsPanel() {
-        JPanel pan = new JPanel();
-        pan.setLayout(new BorderLayout());
-        htmlButton.setSelected(true);
-        htmlButton.setEnabled(false);
-        bibButton.setEnabled(false);
-        
-        ButtonGroup group = new ButtonGroup();
-        group.add(htmlButton);
-        group.add(bibButton);
-        pan.add(absCheckBox, BorderLayout.NORTH);
-        pan.add(htmlButton, BorderLayout.CENTER);
-        pan.add(bibButton, BorderLayout.EAST);
-		
-        return pan;
-    }
-
-    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
-        this.dialog = dialog;
-        this.status = status;
-        terms = query;
-        piv = 0;
-        shouldContinue = true;
-        parsed = 0;
-        unparseable = 0;
-        int pageNumber = 1;
-        
-        searchUrl = makeUrl(pageNumber);//start at page 1
-        
-        try {
-        	URL url = new URL(searchUrl);
-        	String page = getResults(url);
-            
-            if (page.indexOf("You have entered an invalid search") >= 0) {
-                status.showMessage(Globals.lang("You have entered an invalid search '%0'.",
-                        terms),
-                        Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
-                return false;
-            }
-            
-            if (page.indexOf("Bad request") >= 0) {
-            	status.showMessage(Globals.lang("Bad Request '%0'.",
-                        terms),
-                        Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
-                return false;
-            }
-            
-            if (page.indexOf("No results were found.") >= 0) {
-                status.showMessage(Globals.lang("No entries found for the search string '%0'",
-                        terms),
-                        Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
-                return false;
-            }
-                        
-            if (page.indexOf("Error Page") >= 0) {
-                status.showMessage(Globals.lang("Intermittent errors on the IEEE Xplore server. Please try again in a while."),
-                        Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
-                return false;
-            }
-            
-            hits = getNumberOfHits(page, "display-status", hitsPattern);
-
-
-            includeAbstract = absCheckBox.isSelected();
-            importBibtex = bibButton.isSelected();
-            
-            if (hits > MAX_FETCH) {
-            	status.showMessage(Globals.lang("%0 entries found. To reduce server load, "
-                       +"only %1 will be downloaded.",
-                                new String[] {String.valueOf(hits), String.valueOf(MAX_FETCH)}),
-                        Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
-           		hits = MAX_FETCH;
-            }
-
-            parse(dialog, page, 0, 1);
-            int firstEntry = perPage;
-            while (shouldContinue && firstEntry < hits) {
-            	pageNumber++;
-                searchUrl = makeUrl(pageNumber);
-                page = getResults(new URL(searchUrl));
-
-                if (!shouldContinue)
-                    break;
-
-                parse(dialog, page, 0, firstEntry + 1);
-                firstEntry += perPage;
-
-            }
-            return true;
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-        } catch (ConnectException e) {
-            status.showMessage(Globals.lang("Connection to IEEEXplore failed"),
-                    Globals.lang("Search IEEEXplore"), JOptionPane.ERROR_MESSAGE);
-        } catch (IOException e) {
-        	status.showMessage(Globals.lang(e.getMessage()),
-                    Globals.lang("Search IEEEXplore"), JOptionPane.ERROR_MESSAGE);
-            e.printStackTrace();
-        }
-        return false;
-    }
-
-    public String getTitle() {
-        return "IEEEXplore";
-    }
-
-    public URL getIcon() {
-        return GUIGlobals.getIconUrl("www");
-    }
-
-    public String getHelpPage() {
-        return "IEEEXploreHelp.html";
-    }
-
-    public String getKeyName() {
-        return "IEEEXplore";
-    }
-
-    /**
-     * This method is called by the dialog when the user has cancelled the import.
-     */
-    public void stopFetching() {
-        shouldContinue = false;
-    }
-
-    private String makeUrl(int startIndex) {
-        StringBuffer sb = new StringBuffer(startUrl);
-        sb.append(terms.replaceAll(" ", "+"));
-        sb.append(endUrl);
-        sb.append(String.valueOf(startIndex));
-        return sb.toString();
-    }
-
-    
-
-    private void parse(ImportInspector dialog, String text, int startIndex, int firstEntryNumber) {
-        piv = startIndex;
-        int entryNumber = firstEntryNumber;
-        
-        if (importBibtex) {
-			//TODO: Login
-        	ArrayList<String> idSelected = new ArrayList<String>();
-        	String id;
-		 	while ((id = parseNextEntryId(text, piv)) != null && shouldContinue) {
-	        	idSelected.add(id);
-	        	entryNumber++;
-	        }
-		 	try {
-		 		BibtexDatabase dbase = parseBibtexDatabase(idSelected, includeAbstract);
-		 		Collection<BibtexEntry> items = dbase.getEntries();
-		 		Iterator<BibtexEntry> iter = items.iterator();
-		 		while (iter.hasNext()) {
-		 			BibtexEntry entry = iter.next();
-		 			dialog.addEntry(cleanup(entry));
-	                dialog.setProgress(parsed + unparseable, hits);
-	                parsed++;
-		 		}
-		 	} catch (IOException e) {
-		 		e.printStackTrace();
-		 	}
-			//for
-        } else {
-        	BibtexEntry entry;
-	        while (((entry = parseNextEntry(text, piv)) != null) && shouldContinue) {
-	            if (entry.getField("title") != null) {
-	                dialog.addEntry(entry);
-	                dialog.setProgress(parsed + unparseable, hits);
-	                parsed++;
-	            }
-	            entryNumber++;
-	        }
-        }
-    }
-
-    private BibtexDatabase parseBibtexDatabase(List<String> id, boolean abs) throws IOException {
-    	if (id.isEmpty())
-    		return null;
-        URL url;
-        URLConnection conn;
-        try {
-            url = new URL(importUrl);
-            conn = url.openConnection();
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-            return null;
-        }
-        conn.setDoInput(true);
-        conn.setDoOutput(true);
-        conn.setRequestProperty("Content-Type",
-                "application/x-www-form-urlencoded");
-        conn.setRequestProperty("Referer", searchUrl);
-        PrintWriter out = new PrintWriter(
-                conn.getOutputStream());
-
-		String recordIds = "";
-		Iterator<String> iter = id.iterator();
-		while (iter.hasNext()) { 
-	    	recordIds += iter.next() + " ";
-		}
-		recordIds = recordIds.trim();
-		String citation = abs ? "citation-abstract" : "citation-only";
-		
-		String content = "recordIds=" + recordIds.replaceAll(" ", "%20") + "&fromPageName=&citations-format=" + citation + "&download-format=download-bibtex";
-		System.out.println(content);
-        out.write(content);
-        out.flush();
-        out.close();
-
-        BufferedReader bufr = new BufferedReader(new InputStreamReader(conn.getInputStream()));
-        StringBuffer sb = new StringBuffer();
-        char[] buffer = new char[256];
-        while(true) {
-            int bytesRead = bufr.read(buffer);
-            if(bytesRead == -1) break;
-            for (int i=0; i<bytesRead; i++)
-                sb.append((char)buffer[i]);
-        }
-        System.out.println(sb.toString());
-        
-        ParserResult results = new BibtexParser(bufr).parse();
-        bufr.close();
-        return results.getDatabase();
-    }
-
-    private BibtexEntry cleanup(BibtexEntry entry) {
-    	if (entry == null)
-    		return null;
-    	
-        // clean up title
-        String title = (String)entry.getField("title");
-        if (title != null) {
-            // USe the alt-text and replace image links
-            title = title.replaceAll("[ ]?img src=[^ ]+ alt=\"([^\"]+)\">[ ]?", "\\$$1\\$");
-            // Try to sort out most of the /spl / conversions
-            // Deal with this specific nested type first
-            title = title.replaceAll("/sub /spl infin//", "\\$_\\\\infty\\$");
-            title = title.replaceAll("/sup /spl infin//", "\\$\\^\\\\infty\\$");
-            // Replace general expressions
-            title = title.replaceAll("/[sS]pl ([^/]+)/", "\\$\\\\$1\\$");
-            // Deal with subscripts and superscripts       
-            if (Globals.prefs.getBoolean("useConvertToEquation")) {
-                title = title.replaceAll("/sup ([^/]+)/", "\\$\\^\\{$1\\}\\$");
-                title = title.replaceAll("/sub ([^/]+)/", "\\$_\\{$1\\}\\$");
-                title = title.replaceAll("\\(sup\\)([^(]+)\\(/sup\\)", "\\$\\^\\{$1\\}\\$");
-                title = title.replaceAll("\\(sub\\)([^(]+)\\(/sub\\)", "\\_\\{$1\\}\\$");
-            } else {
-                title = title.replaceAll("/sup ([^/]+)/", "\\\\textsuperscript\\{$1\\}");
-                title = title.replaceAll("/sub ([^/]+)/", "\\\\textsubscript\\{$1\\}");
-                title = title.replaceAll("\\(sup\\)([^(]+)\\(/sup\\)", "\\\\textsuperscript\\{$1\\}");
-                title = title.replaceAll("\\(sub\\)([^(]+)\\(/sub\\)", "\\\\textsubscript\\{$1\\}");
-            }
-
-            // Replace \infin with \infty
-            title = title.replaceAll("\\\\infin", "\\\\infty");
-            // Automatic case keeping
-            if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
-                title = caseKeeper.format(title, caseKeeperList.wordListIEEEXplore);
-            }
-            // Write back
-            entry.setField("title", title);
-        }
-        
-    	// clean up author
-    	String author = (String)entry.getField("author");
-    	if (author != null) {
-	    if (author.indexOf("a href=") >= 0) {  // Author parsing failed because it was empty
-		entry.setField("author","");  // Maybe not needed anymore due to another change
-	    } else {
-	    	author = author.replaceAll("\\.", ". ");
-	    	author = author.replaceAll("([^;]+),([^;]+),([^;]+)","$1,$3,$2"); // Change order in case of Jr. etc
-	    	author = author.replaceAll("  ", " ");
-	    	author = author.replaceAll("\\. -", ".-");
-                author = author.replaceAll("; ", " and ");
-	    	author = author.replaceAll(" ,", ",");
-	    	author = author.replaceAll("  ", " ");
-	    	author = author.replaceAll("[ ,;]+$", "");
-	    	entry.setField("author", author);
-	    }
-	}
-    	// clean up month
-    	String month = (String)entry.getField("month");
-    	if ((month != null) && (month.length() > 0)) {
-	    	month = month.replaceAll("\\.", "");
-	    	month = month.toLowerCase();
-
-	    	Pattern monthPattern = Pattern.compile("(\\d*+)\\s*([a-z]*+)-*(\\d*+)\\s*([a-z]*+)");
-	    	Matcher mm = monthPattern.matcher(month);
-	    	String date = month;
-	    	if (mm.find()) {
-	    		if (mm.group(3).length() == 0) {
-	    			if (mm.group(2).length() > 0) {
-	    				date = "#" + mm.group(2).substring(0, 3) + "#";
-	    				if (mm.group(1).length() > 0) {
-	    					date += " " + mm.group(1) + ",";
-	    				}
-	    			} else {
-	    				date = mm.group(1) + ",";
-	    			}
-	    		} else if (mm.group(2).length() == 0) {
-	    			if (mm.group(4).length() > 0) {
-	    				date = "#" + mm.group(4).substring(0, 3) + "# " + mm.group(1) + "--" + mm.group(3) + ",";
-	    			} else
-	    				date += ",";
-	    		} else {
-	    			date = "#" + mm.group(2).substring(0, 3) + "# " + mm.group(1) + "--#" + mm.group(4).substring(0, 3) + "# " + mm.group(3) + ",";
-	    		}
-	    	}
-	    	//date = date.trim();
-	    	//if (!date.isEmpty()) {
-	    	entry.setField("month", date);
-	    	//}
-    	}
-    	
-    	// clean up pages
-    	String field = "pages";
-    	String pages = entry.getField(field);
-    	if (pages != null) {
-	    	String [] pageNumbers = pages.split("-");
-	    	if (pageNumbers.length == 2) {
-	    		if (pageNumbers[0].equals(pageNumbers[1])) {// single page
-	    			entry.setField(field, pageNumbers[0]);
-	    		} else {
-	    			entry.setField(field, pages.replaceAll("-", "--"));
-	    		}
-	    	}
-    	}
-    	
-    	// clean up publication field
-    	BibtexEntryType type = entry.getType();
-    	String sourceField = "";
-		if (type.getName() == "Article") {
-        	sourceField = "journal";
-			entry.clearField("booktitle");
-		} else if (type.getName() == "Inproceedings"){
-            sourceField = "booktitle";
-		}
-        String fullName = entry.getField(sourceField);
-        if (fullName != null) {
-	        if (type.getName() == "Article") {
-	        	int ind = fullName.indexOf(": Accepted for future publication");
-				if (ind > 0) {
-					fullName = fullName.substring(0, ind);
-					entry.setField("year", "to be published");
-					entry.clearField("month");
-					entry.clearField("pages");
-					entry.clearField("number");
-				}
-		        String[] parts = fullName.split("[\\[\\]]"); //[see also...], [legacy...]
-		        fullName = parts[0];
-		        if (parts.length == 3) {
-					fullName += parts[2];
-				}
-			if(entry.getField("note") ==  "Early Access") {
-					entry.setField("year", "to be published");
-					entry.clearField("month");
-					entry.clearField("pages");
-					entry.clearField("number");
-			}
-	        } else {
-	        	fullName = fullName.replace("Conference Proceedings", "Proceedings").
-	        			replace("Proceedings of", "Proceedings").replace("Proceedings.", "Proceedings");
-	        	fullName = fullName.replaceAll("International", "Int.");
-	        	fullName = fullName.replaceAll("Symposium", "Symp.");
-	        	fullName = fullName.replaceAll("Conference", "Conf.");
-	        	fullName = fullName.replaceAll(" on", " ").replace("  ", " ");
-	        }
-	        
-	        Matcher m1 = publicationPattern.matcher(fullName);
-			if (m1.find()) {
-				String prefix = m1.group(2).trim();
-				String postfix = m1.group(1).trim();
-				String abrv = "";
-				String[] parts = prefix.split("\\. ", 2);
-				if (parts.length == 2) {
-					if (parts[0].matches(abrvPattern)) {
-						prefix = parts[1];
-						abrv = parts[0];
-					} else {
-						prefix = parts[0];
-						abrv = parts[1];
-					}
-				}
-				if (prefix.matches(abrvPattern) == false) {
-					fullName = prefix + " " + postfix + " " + abrv;
-					fullName = fullName.trim();
-				} else {
-					fullName = postfix + " " + prefix;
-				}
-			}
-			if (type.getName() == "Article") {
-				fullName = fullName.replace(" - ", "-"); //IEE Proceedings-
-				
-				fullName = fullName.trim();
-				if (Globals.prefs.getBoolean("useIEEEAbrv")) {
-					String id = Globals.journalAbbrev.getAbbreviatedName(fullName, false);
-					if (id != null)
-						fullName = id;
-				}
-	        }
-			if (type.getName() == "Inproceedings") {
-	            Matcher m2 = proceedingPattern.matcher(fullName);
-				if (m2.find()) {
-					String prefix = m2.group(2); 
-					String postfix = m2.group(1).replaceAll("\\.$", "");
-					if (prefix.matches(abrvPattern) == false) {
-						String abrv = "";
-					
-						String[] parts = postfix.split("\\. ", 2);
-						if (parts.length == 2) {
-							if (parts[0].matches(abrvPattern)) {
-								postfix = parts[1];
-								abrv = parts[0];
-							} else {
-								postfix = parts[0];
-								abrv = parts[1];
-							}
-						}
-						fullName = prefix.trim() + " " + postfix.trim() + " " + abrv;
-						
-					} else {
-						fullName = postfix.trim() + " " + prefix.trim();
-					}
-					
-				}
-				
-				fullName = fullName.trim();
-				
-				fullName = fullName.replaceAll("^[tT]he ", "").replaceAll("^\\d{4} ", "").replaceAll("[,.]$", "");
-				String year = entry.getField("year");
-				fullName = fullName.replaceAll(", " + year + "\\.?", "");
-				
-	        	if (fullName.contains("Abstract") == false && fullName.contains("Summaries") == false && fullName.contains("Conference Record") == false)
-	        		fullName = "Proc. " + fullName;
-	        }
-			entry.setField(sourceField, fullName);
-        }
-	
-        // clean up abstract
-        String abstr = (String) entry.getField("abstract");
-        if (abstr != null) {
-            // Try to sort out most of the /spl / conversions
-            // Deal with this specific nested type first
-            abstr = abstr.replaceAll("/sub /spl infin//", "\\$_\\\\infty\\$");
-            abstr = abstr.replaceAll("/sup /spl infin//", "\\$\\^\\\\infty\\$");
-            // Replace general expressions
-            abstr = abstr.replaceAll("/[sS]pl ([^/]+)/", "\\$\\\\$1\\$");
-            // Deal with subscripts and superscripts       
-            if (Globals.prefs.getBoolean("useConvertToEquation")) {
-                abstr = abstr.replaceAll("/sup ([^/]+)/", "\\$\\^\\{$1\\}\\$");
-                abstr = abstr.replaceAll("/sub ([^/]+)/", "\\$_\\{$1\\}\\$");
-                abstr = abstr.replaceAll("\\(sup\\)([^(]+)\\(/sup\\)", "\\$\\^\\{$1\\}\\$");
-                abstr = abstr.replaceAll("\\(sub\\)([^(]+)\\(/sub\\)", "\\_\\{$1\\}\\$");
-            } else {
-                abstr = abstr.replaceAll("/sup ([^/]+)/", "\\\\textsuperscript\\{$1\\}");
-                abstr = abstr.replaceAll("/sub ([^/]+)/", "\\\\textsubscript\\{$1\\}");
-                abstr = abstr.replaceAll("\\(sup\\)([^(]+)\\(/sup\\)", "\\\\textsuperscript\\{$1\\}");
-                abstr = abstr.replaceAll("\\(sub\\)([^(]+)\\(/sub\\)", "\\\\textsubscript\\{$1\\}");
-            }
-            // Replace \infin with \infty
-            abstr = abstr.replaceAll("\\\\infin", "\\\\infty");
-            // Write back
-            entry.setField("abstract", abstr);
-        }
-        
-        // Clean up url
-        String url = (String) entry.getField("url");
-        if (url != null) {
-            entry.setField("url","http://ieeexplore.ieee.org"+url.replace("tp=&",""));
-        }
-	return entry;
-    }
-
-    private String parseNextEntryId(String allText, int startIndex) {
-	    int index = allText.indexOf("<div class=\"select", startIndex);
-	    int endIndex = allText.indexOf("</div>", index);
-	    
-	    if (index >= 0 && endIndex > 0) {
-	    	String text = allText.substring(index, endIndex);
-	    	endIndex += 6;
-	    	piv = endIndex;
-	    	//parse id
-	    	Matcher idMatcher = idPattern.matcher(text);
-	    	//add id into a vector
-	    	if (idMatcher.find()) {
-	    		return idMatcher.group(1);
-	    	}
-	    }
-	    return null;
-    }
-    
-    private BibtexEntry parseNextEntry(String allText, int startIndex) {
-        BibtexEntry entry = null;
-        
-     	int index = allText.indexOf("<div class=\"detail", piv);
-        int endIndex = allText.indexOf("</div>", index);
-
-        if (index >= 0 && endIndex > 0) {
-        	endIndex += 6;
-        	piv = endIndex;
-        	String text = allText.substring(index, endIndex);
-            
-            BibtexEntryType type = null;
-            String sourceField = null;
-            
-            String typeName = "";
-            Matcher typeMatcher = typePattern.matcher(text);
-            if (typeMatcher.find()) {
-	            typeName = typeMatcher.group(1);
-	            if (typeName.equalsIgnoreCase("IEEE Journals & Magazines") || typeName.equalsIgnoreCase("IEEE Early Access Articles") ||
-	            		typeName.equalsIgnoreCase("IET Journals & Magazines") || typeName.equalsIgnoreCase("AIP Journals & Magazines") ||
-                                typeName.equalsIgnoreCase("AVS Journals & Magazines") || typeName.equalsIgnoreCase("IBM Journals & Magazines") || 
-                                typeName.equalsIgnoreCase("TUP Journals & Magazines") || typeName.equalsIgnoreCase("BIAI Journals & Magazines")) {
-	                type = BibtexEntryType.getType("article");
-	                sourceField = "journal";
-	            } else if (typeName.equalsIgnoreCase("IEEE Conference Publications") || typeName.equalsIgnoreCase("IET Conference Publications") || typeName.equalsIgnoreCase("VDE Conference Publications")) {
-	                type = BibtexEntryType.getType("inproceedings");
-	                sourceField = "booktitle";
-		        } else if (typeName.equalsIgnoreCase("IEEE Standards") || typeName.equalsIgnoreCase("Standards")) {
-	                type = BibtexEntryType.getType("standard");
-	                sourceField = "number";
-		        } else if (typeName.equalsIgnoreCase("IEEE eLearning Library Courses")) {
-		        	type = BibtexEntryType.getType("Electronic");
-		        	sourceField = "note";
-		        } else if (typeName.equalsIgnoreCase("Wiley-IEEE Press eBook Chapters") || typeName.equalsIgnoreCase("MIT Press eBook Chapters") ||
-                                typeName.equalsIgnoreCase("IEEE USA Books & eBooks")) {
-		        	type = BibtexEntryType.getType("inCollection");
-		        	sourceField = "booktitle";
-		        }
-            } 
-            
-            if (type == null) {
-            	type = BibtexEntryType.getType("misc");
-            	sourceField = "note";
-                System.err.println("Type detection failed. Use MISC instead.");
-                unparseable++;
-                System.err.println(text);
-            }
-            
-            entry = new BibtexEntry(Util.createNeutralId(), type);
-            
-            if (typeName.equalsIgnoreCase("IEEE Standards")) {
-            	entry.setField("organization", "IEEE");
-            }
-            
-            if (typeName.equalsIgnoreCase("Wiley-IEEE Press eBook Chapters")) {
-            	entry.setField("publisher", "Wiley-IEEE Press");
-            } else if(typeName.equalsIgnoreCase("MIT Press eBook Chapters")) {
-                entry.setField("publisher", "MIT Press");
-            } else if(typeName.equalsIgnoreCase("IEEE USA Books & eBooks")) {
-                entry.setField("publisher", "IEEE USA");
-            }
-            
-            if (typeName.equalsIgnoreCase("IEEE Early Access Articles")) {
-            	entry.setField("note", "Early Access");
-            }
-            
-            Set<String> fields = fieldPatterns.keySet();
-            for (String field: fields) {
-            	Matcher fieldMatcher = Pattern.compile(fieldPatterns.get(field)).matcher(text);
-            	if (fieldMatcher.find()) {
-            		entry.setField(field, htmlConverter.format(fieldMatcher.group(1)));
-            		if (field.equals("title") && fieldMatcher.find()) {
-            			String sec_title = htmlConverter.format(fieldMatcher.group(1));
-            			if (entry.getType() == BibtexEntryType.getStandardType("standard")) {
-            				sec_title = sec_title.replaceAll("IEEE Std ", "");
-            			}
-            			entry.setField(sourceField, sec_title);
-            			
-            		}
-            		if (field.equals("pages") && fieldMatcher.groupCount() == 2) {
-            			entry.setField(field, fieldMatcher.group(1) + "-" + fieldMatcher.group(2));
-            		}
-            	} 
-            }
-            if (entry.getField("author") == null || entry.getField("author").startsWith("a href") ||
-                    entry.getField("author").startsWith("Topic(s)")) {  // Fix for some documents without authors
-                entry.setField("author","");
-            }
-            if (entry.getType() == BibtexEntryType.getStandardType("inproceedings") && entry.getField("author").equals("")) {
-            	entry.setType(BibtexEntryType.getStandardType("proceedings"));
-            }
-        
-            if (includeAbstract) {
-		    index = text.indexOf("id=\"abstract");
-		    if (index >= 0) {
-		        endIndex = text.indexOf("</div>", index) + 6;
-		            
-	            	text = text.substring(index, endIndex);
-	            	Matcher absMatcher = absPattern.matcher(text);
-	            	if (absMatcher.find()) {
-			    	// Clean-up abstract
-			    String abstr=absMatcher.group(1);
-			    abstr = abstr.replaceAll("<span class='snippet'>([\\w]+)</span>","$1");
-				
-			    entry.setField("abstract", htmlConverter.format(abstr));
-	            	}
-	            }
-            }
-        }
-        
-        if (entry == null) {
-        	return null;
-        } else {
-            return cleanup(entry);
-        }
-    }
-
-    /**
-     * Find out how many hits were found.
-     * @param page
-     */
-    private int getNumberOfHits(String page, String marker, Pattern pattern) throws IOException {
-    	int ind = page.indexOf(marker);
-        if (ind < 0) {
-        	System.out.println(page);
-            throw new IOException(Globals.lang("Could not parse number of hits"));
-        }
-        String substring = page.substring(ind, page.length());
-        Matcher m = pattern.matcher(substring);
-        if (m.find())
-            return Integer.parseInt(m.group(1));
-        else
-        	throw new IOException(Globals.lang("Could not parse number of hits"));
-    }
-
-    /**
-     * Download the URL and return contents as a String.
-     * @param source
-     * @return
-     * @throws IOException
-     */
-    public String getResults(URL source) throws IOException {
-        
-        InputStream in = source.openStream();
-        StringBuffer sb = new StringBuffer();
-        byte[] buffer = new byte[256];
-        while(true) {
-            int bytesRead = in.read(buffer);
-            if(bytesRead == -1) break;
-            for (int i=0; i<bytesRead; i++)
-                sb.append((char)buffer[i]);
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Read results from a file instead of an URL. Just for faster debugging.
-     * @param f
-     * @return
-     * @throws IOException
-     */
-    public String getResultsFromFile(File f) throws IOException {
-        InputStream in = new BufferedInputStream(new FileInputStream(f));
-        StringBuffer sb = new StringBuffer();
-        byte[] buffer = new byte[256];
-        while(true) {
-            int bytesRead = in.read(buffer);
-            if(bytesRead == -1) break;
-            for (int i=0; i<bytesRead; i++)
-                sb.append((char)buffer[i]);
-        }
-        return sb.toString();
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.awt.BorderLayout;
+
+import java.io.BufferedReader;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+
+import java.net.ConnectException;
+import java.net.CookieHandler;
+import java.net.CookieManager;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JCheckBox;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.Util;
+
+public class IEEEXploreFetcher implements EntryFetcher {
+
+    final CaseKeeperList caseKeeperList = new CaseKeeperList();
+    final CaseKeeper caseKeeper = new CaseKeeper();
+    
+    ImportInspector dialog = null;
+	OutputPrinter status;
+    final HTMLConverter htmlConverter = new HTMLConverter();
+    
+    private JCheckBox absCheckBox = new JCheckBox(Globals.lang("Include abstracts"), false);
+    private JRadioButton htmlButton = new JRadioButton(Globals.lang("HTML parser"));
+    private JRadioButton bibButton = new JRadioButton(Globals.lang("BibTeX importer"));
+    
+    private CookieManager cm = new CookieManager();
+    
+    private static final int MAX_FETCH = 100;
+    private int perPage = MAX_FETCH, hits = 0, unparseable = 0, parsed = 0;
+    private int piv = 0;
+    private boolean shouldContinue = false;
+    private boolean includeAbstract = false;
+    private boolean importBibtex = false;
+    
+    private String terms;
+    private final String startUrl = "http://ieeexplore.ieee.org/search/freesearchresult.jsp?queryText=";
+    private final String endUrl = "&rowsPerPage=" + Integer.toString(perPage) + "&pageNumber=";
+    private String searchUrl;
+    private final String importUrl = "http://ieeexplore.ieee.org/xpls/downloadCitations";
+    
+    private final Pattern hitsPattern = Pattern.compile("([0-9,]+) Results");
+    private final Pattern idPattern = Pattern.compile("<input name=\'\' title=\'.*\' type=\'checkbox\'" + 
+						      "value=\'\'\\s*id=\'([0-9]+)\'/>");
+    private final Pattern typePattern = Pattern.compile("<span class=\"type\">\\s*(.+)");
+    private HashMap<String, String> fieldPatterns = new HashMap<String, String>();
+    private final Pattern absPattern = Pattern.compile("<p>\\s*(.+)");
+    
+    Pattern stdEntryPattern = Pattern.compile(".*<strong>(.+)</strong><br>"
+			+ "\\s+(.+)");
+    
+    Pattern publicationPattern = Pattern.compile("(.*), \\d*\\.*\\s?(.*)");
+    Pattern proceedingPattern = Pattern.compile("(.*?)\\.?\\s?Proceedings\\s?(.*)");
+    Pattern abstractLinkPattern = Pattern.compile(
+	   "<a href=\'(.+)\'>\\s*<span class=\"more\">View full.*</span> </a>");
+    String abrvPattern = ".*[^,] '?\\d+\\)?";
+
+    Pattern ieeeArticleNumberPattern = Pattern.compile("<a href=\".*arnumber=(\\d+).*\">");
+    
+    // Common words in IEEE Xplore that should always be 
+    
+    public IEEEXploreFetcher() {
+    	super();
+    	CookieHandler.setDefault(cm);
+        
+    	fieldPatterns.put("title", "<a\\s*href=[^<]+>\\s*(.+)\\s*</a>");
+        fieldPatterns.put("author", "</h3>\\s*(.+)");
+        fieldPatterns.put("volume", "Volume:\\s*([A-Za-z-]*\\d+)");
+        fieldPatterns.put("number", "Issue:\\s*(\\d+)");
+        //fieldPatterns.put("part", "Part (\\d+), (.+)");
+        fieldPatterns.put("year", "(?:Copyright|Publication) Year:\\s*(\\d{4})");
+        fieldPatterns.put("pages", "Page\\(s\\):\\s*(\\d+)\\s*-\\s*(\\d*)");
+        //fieldPatterns.put("doi", "Digital Object Identifier:\\s*<a href=.*>(.+)</a>");
+        fieldPatterns.put("doi", "<a href=\"http://dx.doi.org/(.+)\" target");
+        fieldPatterns.put("url", "<a href=\"(/stamp/stamp[^\"]+)");       
+    }
+    public JPanel getOptionsPanel() {
+        JPanel pan = new JPanel();
+        pan.setLayout(new BorderLayout());
+        htmlButton.setSelected(true);
+        htmlButton.setEnabled(false);
+        bibButton.setEnabled(false);
+        
+        ButtonGroup group = new ButtonGroup();
+        group.add(htmlButton);
+        group.add(bibButton);
+        pan.add(absCheckBox, BorderLayout.NORTH);
+        pan.add(htmlButton, BorderLayout.CENTER);
+        pan.add(bibButton, BorderLayout.EAST);
+		
+        return pan;
+    }
+
+    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
+        this.dialog = dialog;
+        this.status = status;
+        terms = query;
+        piv = 0;
+        shouldContinue = true;
+        parsed = 0;
+        unparseable = 0;
+        int pageNumber = 1;
+        
+        searchUrl = makeUrl(pageNumber);//start at page 1
+        
+        try {
+        	URL url = new URL(searchUrl);
+        	String page = getResults(url);
+            
+            if (page.indexOf("You have entered an invalid search") >= 0) {
+                status.showMessage(Globals.lang("You have entered an invalid search '%0'.",
+                        terms),
+                        Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
+                return false;
+            }
+            
+            if (page.indexOf("Bad request") >= 0) {
+            	status.showMessage(Globals.lang("Bad Request '%0'.",
+                        terms),
+                        Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
+                return false;
+            }
+            
+            if (page.indexOf("No results were found.") >= 0) {
+                status.showMessage(Globals.lang("No entries found for the search string '%0'",
+                        terms),
+                        Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
+                return false;
+            }
+                        
+            if (page.indexOf("Error Page") >= 0) {
+                status.showMessage(Globals.lang("Intermittent errors on the IEEE Xplore server. Please try again in a while."),
+                        Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
+                return false;
+            }
+            
+            hits = getNumberOfHits(page, "display-status", hitsPattern);
+
+
+            includeAbstract = absCheckBox.isSelected();
+            importBibtex = bibButton.isSelected();
+            
+            if (hits > MAX_FETCH) {
+            	status.showMessage(Globals.lang("%0 entries found. To reduce server load, "
+                       +"only %1 will be downloaded.",
+                                new String[] {String.valueOf(hits), String.valueOf(MAX_FETCH)}),
+                        Globals.lang("Search IEEEXplore"), JOptionPane.INFORMATION_MESSAGE);
+           		hits = MAX_FETCH;
+            }
+
+            parse(dialog, page, 0, 1);
+            int firstEntry = perPage;
+            while (shouldContinue && firstEntry < hits) {
+            	pageNumber++;
+                searchUrl = makeUrl(pageNumber);
+                page = getResults(new URL(searchUrl));
+
+                if (!shouldContinue)
+                    break;
+
+                parse(dialog, page, 0, firstEntry + 1);
+                firstEntry += perPage;
+
+            }
+            return true;
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        } catch (ConnectException e) {
+            status.showMessage(Globals.lang("Connection to IEEEXplore failed"),
+                    Globals.lang("Search IEEEXplore"), JOptionPane.ERROR_MESSAGE);
+        } catch (IOException e) {
+        	status.showMessage(Globals.lang(e.getMessage()),
+                    Globals.lang("Search IEEEXplore"), JOptionPane.ERROR_MESSAGE);
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    public String getTitle() {
+        return "IEEEXplore";
+    }
+
+    public URL getIcon() {
+        return GUIGlobals.getIconUrl("www");
+    }
+
+    public String getHelpPage() {
+        return "IEEEXploreHelp.html";
+    }
+
+    public String getKeyName() {
+        return "IEEEXplore";
+    }
+
+    /**
+     * This method is called by the dialog when the user has cancelled the import.
+     */
+    public void stopFetching() {
+        shouldContinue = false;
+    }
+
+    private String makeUrl(int startIndex) {
+        StringBuffer sb = new StringBuffer(startUrl);
+        sb.append(terms.replaceAll(" ", "+"));
+        sb.append(endUrl);
+        sb.append(String.valueOf(startIndex));
+        return sb.toString();
+    }
+
+    
+
+    private void parse(ImportInspector dialog, String text, int startIndex, int firstEntryNumber) {
+        piv = startIndex;
+        int entryNumber = firstEntryNumber;
+        
+        if (importBibtex) {
+			//TODO: Login
+        	ArrayList<String> idSelected = new ArrayList<String>();
+        	String id;
+		 	while ((id = parseNextEntryId(text, piv)) != null && shouldContinue) {
+	        	idSelected.add(id);
+	        	entryNumber++;
+	        }
+		 	try {
+		 		BibtexDatabase dbase = parseBibtexDatabase(idSelected, includeAbstract);
+		 		Collection<BibtexEntry> items = dbase.getEntries();
+		 		Iterator<BibtexEntry> iter = items.iterator();
+		 		while (iter.hasNext()) {
+		 			BibtexEntry entry = iter.next();
+		 			dialog.addEntry(cleanup(entry));
+	                dialog.setProgress(parsed + unparseable, hits);
+	                parsed++;
+		 		}
+		 	} catch (IOException e) {
+		 		e.printStackTrace();
+		 	}
+			//for
+        } else {
+        	BibtexEntry entry;
+	        while (((entry = parseNextEntry(text, piv)) != null) && shouldContinue) {
+	            if (entry.getField("title") != null) {
+	                dialog.addEntry(entry);
+	                dialog.setProgress(parsed + unparseable, hits);
+	                parsed++;
+	            }
+	            entryNumber++;
+	        }
+        }
+    }
+
+    private BibtexDatabase parseBibtexDatabase(List<String> id, boolean abs) throws IOException {
+    	if (id.isEmpty())
+    		return null;
+        URL url;
+        URLConnection conn;
+        try {
+            url = new URL(importUrl);
+            conn = url.openConnection();
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+            return null;
+        }
+        conn.setDoInput(true);
+        conn.setDoOutput(true);
+        conn.setRequestProperty("Content-Type",
+                "application/x-www-form-urlencoded");
+        conn.setRequestProperty("Referer", searchUrl);
+        PrintWriter out = new PrintWriter(
+                conn.getOutputStream());
+
+		String recordIds = "";
+		Iterator<String> iter = id.iterator();
+		while (iter.hasNext()) { 
+	    	recordIds += iter.next() + " ";
+		}
+		recordIds = recordIds.trim();
+		String citation = abs ? "citation-abstract" : "citation-only";
+		
+		String content = "recordIds=" + recordIds.replaceAll(" ", "%20") + "&fromPageName=&citations-format=" + citation + "&download-format=download-bibtex";
+		System.out.println(content);
+        out.write(content);
+        out.flush();
+        out.close();
+
+        BufferedReader bufr = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+        StringBuffer sb = new StringBuffer();
+        char[] buffer = new char[256];
+        while(true) {
+            int bytesRead = bufr.read(buffer);
+            if(bytesRead == -1) break;
+            for (int i=0; i<bytesRead; i++)
+                sb.append((char)buffer[i]);
+        }
+        System.out.println(sb.toString());
+        
+        ParserResult results = new BibtexParser(bufr).parse();
+        bufr.close();
+        return results.getDatabase();
+    }
+
+    private BibtexEntry cleanup(BibtexEntry entry) {
+    	if (entry == null)
+    		return null;
+    	
+        // clean up title
+        String title = (String)entry.getField("title");
+        if (title != null) {
+            // USe the alt-text and replace image links
+            title = title.replaceAll("[ ]?img src=[^ ]+ alt=\"([^\"]+)\">[ ]?", "\\$$1\\$");
+            // Try to sort out most of the /spl / conversions
+            // Deal with this specific nested type first
+            title = title.replaceAll("/sub /spl infin//", "\\$_\\\\infty\\$");
+            title = title.replaceAll("/sup /spl infin//", "\\$\\^\\\\infty\\$");
+            // Replace general expressions
+            title = title.replaceAll("/[sS]pl ([^/]+)/", "\\$\\\\$1\\$");
+            // Deal with subscripts and superscripts       
+            if (Globals.prefs.getBoolean("useConvertToEquation")) {
+                title = title.replaceAll("/sup ([^/]+)/", "\\$\\^\\{$1\\}\\$");
+                title = title.replaceAll("/sub ([^/]+)/", "\\$_\\{$1\\}\\$");
+                title = title.replaceAll("\\(sup\\)([^(]+)\\(/sup\\)", "\\$\\^\\{$1\\}\\$");
+                title = title.replaceAll("\\(sub\\)([^(]+)\\(/sub\\)", "\\_\\{$1\\}\\$");
+            } else {
+                title = title.replaceAll("/sup ([^/]+)/", "\\\\textsuperscript\\{$1\\}");
+                title = title.replaceAll("/sub ([^/]+)/", "\\\\textsubscript\\{$1\\}");
+                title = title.replaceAll("\\(sup\\)([^(]+)\\(/sup\\)", "\\\\textsuperscript\\{$1\\}");
+                title = title.replaceAll("\\(sub\\)([^(]+)\\(/sub\\)", "\\\\textsubscript\\{$1\\}");
+            }
+
+            // Replace \infin with \infty
+            title = title.replaceAll("\\\\infin", "\\\\infty");
+            // Automatic case keeping
+            if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
+                title = caseKeeper.format(title, caseKeeperList.wordListIEEEXplore);
+            }
+            // Write back
+            entry.setField("title", title);
+        }
+        
+    	// clean up author
+    	String author = (String)entry.getField("author");
+    	if (author != null) {
+	    if (author.indexOf("a href=") >= 0) {  // Author parsing failed because it was empty
+		entry.setField("author","");  // Maybe not needed anymore due to another change
+	    } else {
+	    	author = author.replaceAll("\\.", ". ");
+	    	author = author.replaceAll("([^;]+),([^;]+),([^;]+)","$1,$3,$2"); // Change order in case of Jr. etc
+	    	author = author.replaceAll("  ", " ");
+	    	author = author.replaceAll("\\. -", ".-");
+                author = author.replaceAll("; ", " and ");
+	    	author = author.replaceAll(" ,", ",");
+	    	author = author.replaceAll("  ", " ");
+	    	author = author.replaceAll("[ ,;]+$", "");
+	    	entry.setField("author", author);
+	    }
+	}
+    	// clean up month
+    	String month = (String)entry.getField("month");
+    	if ((month != null) && (month.length() > 0)) {
+	    	month = month.replaceAll("\\.", "");
+	    	month = month.toLowerCase();
+
+	    	Pattern monthPattern = Pattern.compile("(\\d*+)\\s*([a-z]*+)-*(\\d*+)\\s*([a-z]*+)");
+	    	Matcher mm = monthPattern.matcher(month);
+	    	String date = month;
+	    	if (mm.find()) {
+	    		if (mm.group(3).length() == 0) {
+	    			if (mm.group(2).length() > 0) {
+	    				date = "#" + mm.group(2).substring(0, 3) + "#";
+	    				if (mm.group(1).length() > 0) {
+	    					date += " " + mm.group(1) + ",";
+	    				}
+	    			} else {
+	    				date = mm.group(1) + ",";
+	    			}
+	    		} else if (mm.group(2).length() == 0) {
+	    			if (mm.group(4).length() > 0) {
+	    				date = "#" + mm.group(4).substring(0, 3) + "# " + mm.group(1) + "--" + mm.group(3) + ",";
+	    			} else
+	    				date += ",";
+	    		} else {
+	    			date = "#" + mm.group(2).substring(0, 3) + "# " + mm.group(1) + "--#" + mm.group(4).substring(0, 3) + "# " + mm.group(3) + ",";
+	    		}
+	    	}
+	    	//date = date.trim();
+	    	//if (!date.isEmpty()) {
+	    	entry.setField("month", date);
+	    	//}
+    	}
+    	
+    	// clean up pages
+    	String field = "pages";
+    	String pages = entry.getField(field);
+    	if (pages != null) {
+	    	String [] pageNumbers = pages.split("-");
+	    	if (pageNumbers.length == 2) {
+	    		if (pageNumbers[0].equals(pageNumbers[1])) {// single page
+	    			entry.setField(field, pageNumbers[0]);
+	    		} else {
+	    			entry.setField(field, pages.replaceAll("-", "--"));
+	    		}
+	    	}
+    	}
+    	
+    	// clean up publication field
+    	BibtexEntryType type = entry.getType();
+    	String sourceField = "";
+		if (type.getName() == "Article") {
+        	sourceField = "journal";
+			entry.clearField("booktitle");
+		} else if (type.getName() == "Inproceedings"){
+            sourceField = "booktitle";
+		}
+        String fullName = entry.getField(sourceField);
+        if (fullName != null) {
+	        if (type.getName() == "Article") {
+	        	int ind = fullName.indexOf(": Accepted for future publication");
+				if (ind > 0) {
+					fullName = fullName.substring(0, ind);
+					entry.setField("year", "to be published");
+					entry.clearField("month");
+					entry.clearField("pages");
+					entry.clearField("number");
+				}
+		        String[] parts = fullName.split("[\\[\\]]"); //[see also...], [legacy...]
+		        fullName = parts[0];
+		        if (parts.length == 3) {
+					fullName += parts[2];
+				}
+			if(entry.getField("note") ==  "Early Access") {
+					entry.setField("year", "to be published");
+					entry.clearField("month");
+					entry.clearField("pages");
+					entry.clearField("number");
+			}
+	        } else {
+	        	fullName = fullName.replace("Conference Proceedings", "Proceedings").
+	        			replace("Proceedings of", "Proceedings").replace("Proceedings.", "Proceedings");
+	        	fullName = fullName.replaceAll("International", "Int.");
+	        	fullName = fullName.replaceAll("Symposium", "Symp.");
+	        	fullName = fullName.replaceAll("Conference", "Conf.");
+	        	fullName = fullName.replaceAll(" on", " ").replace("  ", " ");
+	        }
+	        
+	        Matcher m1 = publicationPattern.matcher(fullName);
+			if (m1.find()) {
+				String prefix = m1.group(2).trim();
+				String postfix = m1.group(1).trim();
+				String abrv = "";
+				String[] parts = prefix.split("\\. ", 2);
+				if (parts.length == 2) {
+					if (parts[0].matches(abrvPattern)) {
+						prefix = parts[1];
+						abrv = parts[0];
+					} else {
+						prefix = parts[0];
+						abrv = parts[1];
+					}
+				}
+				if (prefix.matches(abrvPattern) == false) {
+					fullName = prefix + " " + postfix + " " + abrv;
+					fullName = fullName.trim();
+				} else {
+					fullName = postfix + " " + prefix;
+				}
+			}
+			if (type.getName() == "Article") {
+				fullName = fullName.replace(" - ", "-"); //IEE Proceedings-
+				
+				fullName = fullName.trim();
+				if (Globals.prefs.getBoolean("useIEEEAbrv")) {
+					String id = Globals.journalAbbrev.getAbbreviatedName(fullName, false);
+					if (id != null)
+						fullName = id;
+				}
+	        }
+			if (type.getName() == "Inproceedings") {
+	            Matcher m2 = proceedingPattern.matcher(fullName);
+				if (m2.find()) {
+					String prefix = m2.group(2); 
+					String postfix = m2.group(1).replaceAll("\\.$", "");
+					if (prefix.matches(abrvPattern) == false) {
+						String abrv = "";
+					
+						String[] parts = postfix.split("\\. ", 2);
+						if (parts.length == 2) {
+							if (parts[0].matches(abrvPattern)) {
+								postfix = parts[1];
+								abrv = parts[0];
+							} else {
+								postfix = parts[0];
+								abrv = parts[1];
+							}
+						}
+						fullName = prefix.trim() + " " + postfix.trim() + " " + abrv;
+						
+					} else {
+						fullName = postfix.trim() + " " + prefix.trim();
+					}
+					
+				}
+				
+				fullName = fullName.trim();
+				
+				fullName = fullName.replaceAll("^[tT]he ", "").replaceAll("^\\d{4} ", "").replaceAll("[,.]$", "");
+				String year = entry.getField("year");
+				fullName = fullName.replaceAll(", " + year + "\\.?", "");
+				
+	        	if (fullName.contains("Abstract") == false && fullName.contains("Summaries") == false && fullName.contains("Conference Record") == false)
+	        		fullName = "Proc. " + fullName;
+	        }
+			entry.setField(sourceField, fullName);
+        }
+	
+        // clean up abstract
+        String abstr = (String) entry.getField("abstract");
+        if (abstr != null) {
+            // Try to sort out most of the /spl / conversions
+            // Deal with this specific nested type first
+            abstr = abstr.replaceAll("/sub /spl infin//", "\\$_\\\\infty\\$");
+            abstr = abstr.replaceAll("/sup /spl infin//", "\\$\\^\\\\infty\\$");
+            // Replace general expressions
+            abstr = abstr.replaceAll("/[sS]pl ([^/]+)/", "\\$\\\\$1\\$");
+            // Deal with subscripts and superscripts       
+            if (Globals.prefs.getBoolean("useConvertToEquation")) {
+                abstr = abstr.replaceAll("/sup ([^/]+)/", "\\$\\^\\{$1\\}\\$");
+                abstr = abstr.replaceAll("/sub ([^/]+)/", "\\$_\\{$1\\}\\$");
+                abstr = abstr.replaceAll("\\(sup\\)([^(]+)\\(/sup\\)", "\\$\\^\\{$1\\}\\$");
+                abstr = abstr.replaceAll("\\(sub\\)([^(]+)\\(/sub\\)", "\\_\\{$1\\}\\$");
+            } else {
+                abstr = abstr.replaceAll("/sup ([^/]+)/", "\\\\textsuperscript\\{$1\\}");
+                abstr = abstr.replaceAll("/sub ([^/]+)/", "\\\\textsubscript\\{$1\\}");
+                abstr = abstr.replaceAll("\\(sup\\)([^(]+)\\(/sup\\)", "\\\\textsuperscript\\{$1\\}");
+                abstr = abstr.replaceAll("\\(sub\\)([^(]+)\\(/sub\\)", "\\\\textsubscript\\{$1\\}");
+            }
+            // Replace \infin with \infty
+            abstr = abstr.replaceAll("\\\\infin", "\\\\infty");
+            // Write back
+            entry.setField("abstract", abstr);
+        }
+        
+        // Clean up url
+        String url = (String) entry.getField("url");
+        if (url != null) {
+            entry.setField("url","http://ieeexplore.ieee.org"+url.replace("tp=&",""));
+        }
+	return entry;
+    }
+
+    private String parseNextEntryId(String allText, int startIndex) {
+	    int index = allText.indexOf("<div class=\"select", startIndex);
+	    int endIndex = allText.indexOf("</div>", index);
+	    
+	    if (index >= 0 && endIndex > 0) {
+	    	String text = allText.substring(index, endIndex);
+	    	endIndex += 6;
+	    	piv = endIndex;
+	    	//parse id
+	    	Matcher idMatcher = idPattern.matcher(text);
+	    	//add id into a vector
+	    	if (idMatcher.find()) {
+	    		return idMatcher.group(1);
+	    	}
+	    }
+	    return null;
+    }
+    
+    private BibtexEntry parseNextEntry(String allText, int startIndex) {
+        BibtexEntry entry = null;
+        
+     	int index = allText.indexOf("<div class=\"detail", piv);
+        int endIndex = allText.indexOf("</div>", index);
+
+        if (index >= 0 && endIndex > 0) {
+        	endIndex += 6;
+        	piv = endIndex;
+        	String text = allText.substring(index, endIndex);
+            
+            BibtexEntryType type = null;
+            String sourceField = null;
+            
+            String typeName = "";
+            Matcher typeMatcher = typePattern.matcher(text);
+            if (typeMatcher.find()) {
+	            typeName = typeMatcher.group(1);
+	            if (typeName.equalsIgnoreCase("IEEE Journals & Magazines") || typeName.equalsIgnoreCase("IEEE Early Access Articles") ||
+	            		typeName.equalsIgnoreCase("IET Journals & Magazines") || typeName.equalsIgnoreCase("AIP Journals & Magazines") ||
+                                typeName.equalsIgnoreCase("AVS Journals & Magazines") || typeName.equalsIgnoreCase("IBM Journals & Magazines") || 
+                                typeName.equalsIgnoreCase("TUP Journals & Magazines") || typeName.equalsIgnoreCase("BIAI Journals & Magazines")) {
+	                type = BibtexEntryType.getType("article");
+	                sourceField = "journal";
+	            } else if (typeName.equalsIgnoreCase("IEEE Conference Publications") || typeName.equalsIgnoreCase("IET Conference Publications") || typeName.equalsIgnoreCase("VDE Conference Publications")) {
+	                type = BibtexEntryType.getType("inproceedings");
+	                sourceField = "booktitle";
+		        } else if (typeName.equalsIgnoreCase("IEEE Standards") || typeName.equalsIgnoreCase("Standards")) {
+	                type = BibtexEntryType.getType("standard");
+	                sourceField = "number";
+		        } else if (typeName.equalsIgnoreCase("IEEE eLearning Library Courses")) {
+		        	type = BibtexEntryType.getType("Electronic");
+		        	sourceField = "note";
+		        } else if (typeName.equalsIgnoreCase("Wiley-IEEE Press eBook Chapters") || typeName.equalsIgnoreCase("MIT Press eBook Chapters") ||
+                                typeName.equalsIgnoreCase("IEEE USA Books & eBooks")) {
+		        	type = BibtexEntryType.getType("inCollection");
+		        	sourceField = "booktitle";
+		        }
+            } 
+            
+            if (type == null) {
+            	type = BibtexEntryType.getType("misc");
+            	sourceField = "note";
+                System.err.println("Type detection failed. Use MISC instead.");
+                unparseable++;
+                System.err.println(text);
+            }
+            
+            entry = new BibtexEntry(Util.createNeutralId(), type);
+            
+            if (typeName.equalsIgnoreCase("IEEE Standards")) {
+            	entry.setField("organization", "IEEE");
+            }
+            
+            if (typeName.equalsIgnoreCase("Wiley-IEEE Press eBook Chapters")) {
+            	entry.setField("publisher", "Wiley-IEEE Press");
+            } else if(typeName.equalsIgnoreCase("MIT Press eBook Chapters")) {
+                entry.setField("publisher", "MIT Press");
+            } else if(typeName.equalsIgnoreCase("IEEE USA Books & eBooks")) {
+                entry.setField("publisher", "IEEE USA");
+            }
+            
+            if (typeName.equalsIgnoreCase("IEEE Early Access Articles")) {
+            	entry.setField("note", "Early Access");
+            }
+            
+            Set<String> fields = fieldPatterns.keySet();
+            for (String field: fields) {
+            	Matcher fieldMatcher = Pattern.compile(fieldPatterns.get(field)).matcher(text);
+            	if (fieldMatcher.find()) {
+            		entry.setField(field, htmlConverter.format(fieldMatcher.group(1)));
+            		if (field.equals("title") && fieldMatcher.find()) {
+            			String sec_title = htmlConverter.format(fieldMatcher.group(1));
+            			if (entry.getType() == BibtexEntryType.getStandardType("standard")) {
+            				sec_title = sec_title.replaceAll("IEEE Std ", "");
+            			}
+            			entry.setField(sourceField, sec_title);
+            			
+            		}
+            		if (field.equals("pages") && fieldMatcher.groupCount() == 2) {
+            			entry.setField(field, fieldMatcher.group(1) + "-" + fieldMatcher.group(2));
+            		}
+            	} 
+            }
+            if (entry.getField("author") == null || entry.getField("author").startsWith("a href") ||
+                    entry.getField("author").startsWith("Topic(s)")) {  // Fix for some documents without authors
+                entry.setField("author","");
+            }
+            if (entry.getType() == BibtexEntryType.getStandardType("inproceedings") && entry.getField("author").equals("")) {
+            	entry.setType(BibtexEntryType.getStandardType("proceedings"));
+            }
+        
+            if (includeAbstract) {
+		    index = text.indexOf("id=\"abstract");
+		    if (index >= 0) {
+		        endIndex = text.indexOf("</div>", index) + 6;
+		            
+	            	text = text.substring(index, endIndex);
+	            	Matcher absMatcher = absPattern.matcher(text);
+	            	if (absMatcher.find()) {
+			    	// Clean-up abstract
+			    String abstr=absMatcher.group(1);
+			    abstr = abstr.replaceAll("<span class='snippet'>([\\w]+)</span>","$1");
+				
+			    entry.setField("abstract", htmlConverter.format(abstr));
+	            	}
+	            }
+            }
+        }
+        
+        if (entry == null) {
+        	return null;
+        } else {
+            return cleanup(entry);
+        }
+    }
+
+    /**
+     * Find out how many hits were found.
+     * @param page
+     */
+    private int getNumberOfHits(String page, String marker, Pattern pattern) throws IOException {
+    	int ind = page.indexOf(marker);
+        if (ind < 0) {
+        	System.out.println(page);
+            throw new IOException(Globals.lang("Could not parse number of hits"));
+        }
+        String substring = page.substring(ind, page.length());
+        Matcher m = pattern.matcher(substring);
+        if (m.find())
+            return Integer.parseInt(m.group(1));
+        else
+        	throw new IOException(Globals.lang("Could not parse number of hits"));
+    }
+
+    /**
+     * Download the URL and return contents as a String.
+     * @param source
+     * @return
+     * @throws IOException
+     */
+    public String getResults(URL source) throws IOException {
+        
+        InputStream in = source.openStream();
+        StringBuffer sb = new StringBuffer();
+        byte[] buffer = new byte[256];
+        while(true) {
+            int bytesRead = in.read(buffer);
+            if(bytesRead == -1) break;
+            for (int i=0; i<bytesRead; i++)
+                sb.append((char)buffer[i]);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Read results from a file instead of an URL. Just for faster debugging.
+     * @param f
+     * @return
+     * @throws IOException
+     */
+    public String getResultsFromFile(File f) throws IOException {
+        InputStream in = new BufferedInputStream(new FileInputStream(f));
+        StringBuffer sb = new StringBuffer();
+        byte[] buffer = new byte[256];
+        while(true) {
+            int bytesRead = in.read(buffer);
+            if(bytesRead == -1) break;
+            for (int i=0; i<bytesRead; i++)
+                sb.append((char)buffer[i]);
+        }
+        return sb.toString();
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/INSPIREBibtexFilterReader.java b/src/java/net/sf/jabref/imports/INSPIREBibtexFilterReader.java
index fabaefc..4724124 100644
--- a/src/java/net/sf/jabref/imports/INSPIREBibtexFilterReader.java
+++ b/src/java/net/sf/jabref/imports/INSPIREBibtexFilterReader.java
@@ -1,93 +1,93 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.BufferedReader;
-import java.io.FilterReader;
-import java.io.IOException;
-import java.io.Reader;
-
-/**
- * 
- * Warning -- it is not a generic filter, only read is implemented!
- *
- * Note: this is just a quick port of the original SPIRESBibtexFilterReader.
- * 
- * @author Fedor Bezrukov
- * @author Sheer El-Showk
- * 
- * @version $Id$
- * 
- * TODO: Fix grammar in bibtex entries -- it ma return invalid bibkeys (with space)
- * 
- */
-public class INSPIREBibtexFilterReader extends FilterReader {
-
-    protected BufferedReader in;
-
-    private String line;
-    private int pos;
-    private boolean pre;
-
-    INSPIREBibtexFilterReader(Reader _in) { 
-    	super(_in);
-    	in = new BufferedReader(_in);
-    	pos=-1;
-    	pre=false;
-    }
-
-    private String readpreLine() throws IOException {
-    	String l;
-    	do {
-    		l=in.readLine();
-    		if (l==null)
-    			return null;
-    		if (l.equals("<pre>")) {
-    			pre = true;
-    			l=in.readLine();
-    		}
-    		if (l.equals("</pre>"))
-    			pre = false;
-    	} while (!pre);
-    	return l;
-    }
-    
-    private String fixBibkey(String in) {
-    	if (in== null)
-    		return null;
-    	//System.out.println(in);
-    	if ( in.matches("@Article\\{.*,") ) {
-    		//System.out.println(in.replace(' ','_'));
-    		return in.replace(' ', '_');
-    	} else
-    		return in;
-    }
-
-    public int read() throws IOException {
-    	if ( pos<0 ) {
-    		line=fixBibkey(readpreLine());
-    		pos=0;
-	    	if ( line == null )
-	    		return -1;
-    	}
-    	if ( pos>=line.length() ) {
-    		pos=-1;
-    		return '\n';
-    	}
-    	return line.charAt(pos++);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.BufferedReader;
+import java.io.FilterReader;
+import java.io.IOException;
+import java.io.Reader;
+
+/**
+ * 
+ * Warning -- it is not a generic filter, only read is implemented!
+ *
+ * Note: this is just a quick port of the original SPIRESBibtexFilterReader.
+ * 
+ * @author Fedor Bezrukov
+ * @author Sheer El-Showk
+ * 
+ * @version $Id$
+ * 
+ * TODO: Fix grammar in bibtex entries -- it ma return invalid bibkeys (with space)
+ * 
+ */
+public class INSPIREBibtexFilterReader extends FilterReader {
+
+    protected BufferedReader in;
+
+    private String line;
+    private int pos;
+    private boolean pre;
+
+    INSPIREBibtexFilterReader(Reader _in) { 
+    	super(_in);
+    	in = new BufferedReader(_in);
+    	pos=-1;
+    	pre=false;
+    }
+
+    private String readpreLine() throws IOException {
+    	String l;
+    	do {
+    		l=in.readLine();
+    		if (l==null)
+    			return null;
+    		if (l.equals("<pre>")) {
+    			pre = true;
+    			l=in.readLine();
+    		}
+    		if (l.equals("</pre>"))
+    			pre = false;
+    	} while (!pre);
+    	return l;
+    }
+    
+    private String fixBibkey(String in) {
+    	if (in== null)
+    		return null;
+    	//System.out.println(in);
+    	if ( in.matches("@Article\\{.*,") ) {
+    		//System.out.println(in.replace(' ','_'));
+    		return in.replace(' ', '_');
+    	} else
+    		return in;
+    }
+
+    public int read() throws IOException {
+    	if ( pos<0 ) {
+    		line=fixBibkey(readpreLine());
+    		pos=0;
+	    	if ( line == null )
+	    		return -1;
+    	}
+    	if ( pos>=line.length() ) {
+    		pos=-1;
+    		return '\n';
+    	}
+    	return line.charAt(pos++);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/INSPIREFetcher.java b/src/java/net/sf/jabref/imports/INSPIREFetcher.java
index 3492043..f46c810 100644
--- a/src/java/net/sf/jabref/imports/INSPIREFetcher.java
+++ b/src/java/net/sf/jabref/imports/INSPIREFetcher.java
@@ -1,245 +1,245 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLEncoder;
-
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-
-/**
- * 
- * This class allows to access the Slac INSPIRE database. It is just a port of
- * the original SPIRES Fetcher.
- * 
- * It can either be a GeneralFetcher to pose requests to the database or fetch
- * individual entries.
- * 
- * @author Fedor Bezrukov
- * @author Sheer El-Showk
- * 
- * @version $Id$
- * 
- */
-public class INSPIREFetcher implements EntryFetcher {
-
-	private static String inspireHost = "inspirebeta.net";
-
-	public INSPIREFetcher() {
-	}
-
-	/**
-	 * Construct the query URL
-	 *
-	 * NOTE: we truncate at 1000 returned entries but its likely INSPIRE returns
-	 * fewer anyway.  This shouldn't be a problem since users should probably do
-	 * more specific searches.
-	 * 
-	 * @param key
-	 *            The key of the OAI2 entry that the url should poitn to.
-	 * 
-	 * @return a String denoting the query URL
-	 */
-	public String constructUrl(String key) {
-		String identifier = "";
-		try {
-			identifier = URLEncoder.encode(key, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			return "";
-		}
-		StringBuffer sb = new StringBuffer("http://").append(inspireHost)
-				.append("/");
-		sb.append("/search?ln=en&ln=en&p=find+");
-		//sb.append("spires/find/hep/www").append("?");
-		//sb.append("rawcmd=find+");
-		sb.append(identifier);
-		//sb.append("&action_search=Search&sf=&so=d&rm=&rg=25&sc=0&of=hx");
-		sb.append("&action_search=Search&sf=&so=d&rm=&rg=1000&sc=0&of=hx");
-		//sb.append("&FORMAT=WWWBRIEFBIBTEX&SEQUENCE=");
-		System.out.print("Inspire URL: " + sb.toString() + "\n");
-		return sb.toString();
-	}
-
-	/**
-	 * Constructs a INSPIRE query url from slaccitation field
-	 * 
-	 * @param slaccitation
-	 * @return query string
-	 *
-	public static String constructUrlFromSlaccitation(String slaccitation) {
-		String cmd = "j";
-		String key = slaccitation.replaceAll("^%%CITATION = ", "").replaceAll(
-				";%%$", "");
-		if (key.matches("^\\w*-\\w*[ /].*"))
-			cmd = "eprint";
-		try {
-			key = URLEncoder.encode(key, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-		}
-		StringBuffer sb = new StringBuffer("http://").append(inspireHost)
-				.append("/");
-		sb.append("spires/find/hep/www").append("?");
-		sb.append("rawcmd=find+").append(cmd).append("+");
-		sb.append(key);
-		return sb.toString();
-	}
-
-	/**
-	 * Construct an INSPIRE query url from eprint field
-	 * 
-	 * @param eprint
-	 * @return query string
-	 *
-	public static String constructUrlFromEprint(String eprint) {
-		String key = eprint.replaceAll(" [.*]$", "");
-		try {
-			key = URLEncoder.encode(key, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			return "";
-		}
-		StringBuffer sb = new StringBuffer("http://").append(inspireHost)
-				.append("/");
-		sb.append("spires/find/hep/www").append("?");
-		sb.append("rawcmd=find+eprint+");
-		sb.append(key);
-		return sb.toString();
-	}*/
-
-	/**
-	 * Import an entry from an OAI2 archive. The BibtexEntry provided has to
-	 * have the field OAI2_IDENTIFIER_FIELD set to the search string.
-	 * 
-	 * @param key
-	 *            The OAI2 key to fetch from ArXiv.
-	 * @return The imnported BibtexEntry or null if none.
-	 */
-	private BibtexDatabase importInspireEntries(String key, OutputPrinter frame) {
-		String url = constructUrl(key);
-		try {
-			HttpURLConnection conn = (HttpURLConnection) (new URL(url)).openConnection();
-			conn.setRequestProperty("User-Agent", "Jabref");
-			InputStream inputStream = conn.getInputStream();
-
-			INSPIREBibtexFilterReader reader = new INSPIREBibtexFilterReader(
-					new InputStreamReader(inputStream));
-
-			ParserResult pr = BibtexParser.parse(reader);
-
-			return pr.getDatabase();
-		} catch (IOException e) {
-			frame.showMessage( Globals.lang(
-					"An Exception ocurred while accessing '%0'", url)
-					+ "\n\n" + e.toString(), Globals.lang(getKeyName()),
-					JOptionPane.ERROR_MESSAGE);
-		} catch (RuntimeException e) {
-			frame.showMessage( Globals.lang(
-					"An Error occurred while fetching from INSPIRE source (%0):",
-					new String[] { url })
-					+ "\n\n" + e.getMessage(), Globals.lang(getKeyName()),
-					JOptionPane.ERROR_MESSAGE);
-		}
-		return null;
-	}
-
-	// public void addSpiresURL(BibtexEntry entry) {
-	// String url = "http://"+spiresHost+"/spires/find/hep/www?texkey+";
-	// url = url+entry.getCiteKey();
-	// entry.setField("url", url);
-	// }
-	//
-	// public void addSpiresURLtoDatabase(BibtexDatabase db) {
-	// Iterator<BibtexEntry> iter = db.getEntries().iterator();
-	// while (iter.hasNext())
-	// addSpiresURL(iter.next());
-	// }
-
-	/*
-	 * @see net.sf.jabref.imports.EntryFetcher
-	 */
-	public String getHelpPage() {
-		return "Spires.html";
-	}
-
-	public URL getIcon() {
-		return GUIGlobals.getIconUrl("www");
-	}
-
-	public String getKeyName() {
-		return "INSPIRE";
-	}
-
-	public JPanel getOptionsPanel() {
-		// we have no additional options
-		return null;
-	}
-
-	public String getTitle() {
-		return Globals.menuTitle(getKeyName());
-	}
-
-	/*
-	 * @see net.sf.jabref.gui.ImportInspectionDialog.CallBack
-	 */
-	public void cancelled() {
-	}
-
-	public void done(int entriesImported) {
-	}
-
-	public void stopFetching() {
-	}
-
-	/*
-	 * @see java.lang.Runnable
-	 */
-	public boolean processQuery(String query, ImportInspector dialog,
-								OutputPrinter frame) {
-		try {
-			frame.setStatus("Fetching entries from Inspire");
-			/* query the archive and load the results into the BibtexEntry */
-			BibtexDatabase bd = importInspireEntries(query,frame);
-
-			/* addSpiresURLtoDatabase(bd); */
-
-			frame.setStatus("Adding fetched entries");
-			/* add the entry to the inspection dialog */
-			if (bd.getEntryCount() > 0)
-		        for (BibtexEntry entry : bd.getEntries())
-		        	dialog.addEntry(entry);
-
-			/* update the dialogs progress bar */
-			// dialog.setProgress(i + 1, keys.length);
-			/* inform the inspection dialog, that we're done */
-		} catch (Exception e) {
-			frame.showMessage(Globals.lang("Error while fetching from Inspire: ")
-					+ e.getMessage());
-			e.printStackTrace();
-		}
-		return true;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+
+/**
+ * 
+ * This class allows to access the Slac INSPIRE database. It is just a port of
+ * the original SPIRES Fetcher.
+ * 
+ * It can either be a GeneralFetcher to pose requests to the database or fetch
+ * individual entries.
+ * 
+ * @author Fedor Bezrukov
+ * @author Sheer El-Showk
+ * 
+ * @version $Id$
+ * 
+ */
+public class INSPIREFetcher implements EntryFetcher {
+
+	private static String inspireHost = "inspirebeta.net";
+
+	public INSPIREFetcher() {
+	}
+
+	/**
+	 * Construct the query URL
+	 *
+	 * NOTE: we truncate at 1000 returned entries but its likely INSPIRE returns
+	 * fewer anyway.  This shouldn't be a problem since users should probably do
+	 * more specific searches.
+	 * 
+	 * @param key
+	 *            The key of the OAI2 entry that the url should poitn to.
+	 * 
+	 * @return a String denoting the query URL
+	 */
+	public String constructUrl(String key) {
+		String identifier = "";
+		try {
+			identifier = URLEncoder.encode(key, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			return "";
+		}
+		StringBuffer sb = new StringBuffer("http://").append(inspireHost)
+				.append("/");
+		sb.append("/search?ln=en&ln=en&p=find+");
+		//sb.append("spires/find/hep/www").append("?");
+		//sb.append("rawcmd=find+");
+		sb.append(identifier);
+		//sb.append("&action_search=Search&sf=&so=d&rm=&rg=25&sc=0&of=hx");
+		sb.append("&action_search=Search&sf=&so=d&rm=&rg=1000&sc=0&of=hx");
+		//sb.append("&FORMAT=WWWBRIEFBIBTEX&SEQUENCE=");
+		System.out.print("Inspire URL: " + sb.toString() + "\n");
+		return sb.toString();
+	}
+
+	/**
+	 * Constructs a INSPIRE query url from slaccitation field
+	 * 
+	 * @param slaccitation
+	 * @return query string
+	 *
+	public static String constructUrlFromSlaccitation(String slaccitation) {
+		String cmd = "j";
+		String key = slaccitation.replaceAll("^%%CITATION = ", "").replaceAll(
+				";%%$", "");
+		if (key.matches("^\\w*-\\w*[ /].*"))
+			cmd = "eprint";
+		try {
+			key = URLEncoder.encode(key, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+		}
+		StringBuffer sb = new StringBuffer("http://").append(inspireHost)
+				.append("/");
+		sb.append("spires/find/hep/www").append("?");
+		sb.append("rawcmd=find+").append(cmd).append("+");
+		sb.append(key);
+		return sb.toString();
+	}
+
+	/**
+	 * Construct an INSPIRE query url from eprint field
+	 * 
+	 * @param eprint
+	 * @return query string
+	 *
+	public static String constructUrlFromEprint(String eprint) {
+		String key = eprint.replaceAll(" [.*]$", "");
+		try {
+			key = URLEncoder.encode(key, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			return "";
+		}
+		StringBuffer sb = new StringBuffer("http://").append(inspireHost)
+				.append("/");
+		sb.append("spires/find/hep/www").append("?");
+		sb.append("rawcmd=find+eprint+");
+		sb.append(key);
+		return sb.toString();
+	}*/
+
+	/**
+	 * Import an entry from an OAI2 archive. The BibtexEntry provided has to
+	 * have the field OAI2_IDENTIFIER_FIELD set to the search string.
+	 * 
+	 * @param key
+	 *            The OAI2 key to fetch from ArXiv.
+	 * @return The imnported BibtexEntry or null if none.
+	 */
+	private BibtexDatabase importInspireEntries(String key, OutputPrinter frame) {
+		String url = constructUrl(key);
+		try {
+			HttpURLConnection conn = (HttpURLConnection) (new URL(url)).openConnection();
+			conn.setRequestProperty("User-Agent", "Jabref");
+			InputStream inputStream = conn.getInputStream();
+
+			INSPIREBibtexFilterReader reader = new INSPIREBibtexFilterReader(
+					new InputStreamReader(inputStream));
+
+			ParserResult pr = BibtexParser.parse(reader);
+
+			return pr.getDatabase();
+		} catch (IOException e) {
+			frame.showMessage( Globals.lang(
+					"An Exception ocurred while accessing '%0'", url)
+					+ "\n\n" + e.toString(), Globals.lang(getKeyName()),
+					JOptionPane.ERROR_MESSAGE);
+		} catch (RuntimeException e) {
+			frame.showMessage( Globals.lang(
+					"An Error occurred while fetching from INSPIRE source (%0):",
+					new String[] { url })
+					+ "\n\n" + e.getMessage(), Globals.lang(getKeyName()),
+					JOptionPane.ERROR_MESSAGE);
+		}
+		return null;
+	}
+
+	// public void addSpiresURL(BibtexEntry entry) {
+	// String url = "http://"+spiresHost+"/spires/find/hep/www?texkey+";
+	// url = url+entry.getCiteKey();
+	// entry.setField("url", url);
+	// }
+	//
+	// public void addSpiresURLtoDatabase(BibtexDatabase db) {
+	// Iterator<BibtexEntry> iter = db.getEntries().iterator();
+	// while (iter.hasNext())
+	// addSpiresURL(iter.next());
+	// }
+
+	/*
+	 * @see net.sf.jabref.imports.EntryFetcher
+	 */
+	public String getHelpPage() {
+		return "Spires.html";
+	}
+
+	public URL getIcon() {
+		return GUIGlobals.getIconUrl("www");
+	}
+
+	public String getKeyName() {
+		return "INSPIRE";
+	}
+
+	public JPanel getOptionsPanel() {
+		// we have no additional options
+		return null;
+	}
+
+	public String getTitle() {
+		return Globals.menuTitle(getKeyName());
+	}
+
+	/*
+	 * @see net.sf.jabref.gui.ImportInspectionDialog.CallBack
+	 */
+	public void cancelled() {
+	}
+
+	public void done(int entriesImported) {
+	}
+
+	public void stopFetching() {
+	}
+
+	/*
+	 * @see java.lang.Runnable
+	 */
+	public boolean processQuery(String query, ImportInspector dialog,
+								OutputPrinter frame) {
+		try {
+			frame.setStatus("Fetching entries from Inspire");
+			/* query the archive and load the results into the BibtexEntry */
+			BibtexDatabase bd = importInspireEntries(query,frame);
+
+			/* addSpiresURLtoDatabase(bd); */
+
+			frame.setStatus("Adding fetched entries");
+			/* add the entry to the inspection dialog */
+			if (bd.getEntryCount() > 0)
+		        for (BibtexEntry entry : bd.getEntries())
+		        	dialog.addEntry(entry);
+
+			/* update the dialogs progress bar */
+			// dialog.setProgress(i + 1, keys.length);
+			/* inform the inspection dialog, that we're done */
+		} catch (Exception e) {
+			frame.showMessage(Globals.lang("Error while fetching from Inspire: ")
+					+ e.getMessage());
+			e.printStackTrace();
+		}
+		return true;
+	}
+}
diff --git a/src/java/net/sf/jabref/imports/ImportCustomizationDialog.java b/src/java/net/sf/jabref/imports/ImportCustomizationDialog.java
index 2023600..92ada25 100644
--- a/src/java/net/sf/jabref/imports/ImportCustomizationDialog.java
+++ b/src/java/net/sf/jabref/imports/ImportCustomizationDialog.java
@@ -1,311 +1,312 @@
-/*
- Copyright (C) 2005 Andreas Rudert, based on ExportCustomizationDialog by ??
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-package net.sf.jabref.imports;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.HeadlessException;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.io.IOException;
-import java.util.zip.ZipFile;
-
-import javax.swing.*;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableColumnModel;
-
-import net.sf.jabref.*;
-import net.sf.jabref.gui.FileDialogs;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-/**
- * Dialog to manage custom importers.
- */
-public class ImportCustomizationDialog extends JDialog {
-
-  private final JabRefFrame frame;
-  private JButton addFromFolderButton = new JButton(Globals.lang("Add from folder"));
-  private JButton addFromJarButton = new JButton(Globals.lang("Add from jar"));
-  private JButton showDescButton = new JButton(Globals.lang("Show description"));
-  private JButton removeButton = new JButton(Globals.lang("Remove"));
-  private JButton closeButton = new JButton(Globals.lang("Close"));
-  private JButton helpButton = new JButton(Globals.lang("Help"));
-
-  private JPanel buttons = new JPanel();
-  private JPanel mainPanel = new JPanel();
-  private JTable customImporterTable;
-  private JabRefPreferences prefs = Globals.prefs;
-  private ImportCustomizationDialog importCustomizationDialog;
-
-  /*
-  *  (non-Javadoc)
-  * @see java.awt.Component#getSize()
-  */
-  public Dimension getSize() {
-    int width = GUIGlobals.IMPORT_DIALOG_COL_0_WIDTH
-              + GUIGlobals.IMPORT_DIALOG_COL_1_WIDTH
-              + GUIGlobals.IMPORT_DIALOG_COL_2_WIDTH
-              + GUIGlobals.IMPORT_DIALOG_COL_3_WIDTH;
-    return new Dimension(width, width/2);
-  }
-
-  /**
-   * Converts a path relative to a base-path into a class name.
-   * 
-   * @param basePath  base path
-   * @param path  path that includes base-path as a prefix
-   * @return  class name
-   */
-  private String pathToClass(File basePath, File path) {
-    String className = null;
-    // remove leading basepath from path
-    while (!path.equals(basePath)) {
-      className = path.getName() + (className != null ? "." + className : "");
-      path = path.getParentFile();
-    }
-    int lastDot = className.lastIndexOf('.');
-    if (lastDot < 0)
-        return className;
-    className = className.substring(0, lastDot);
-    return className;
-  }
-
-  /**
-   * Adds an importer to the model that underlies the custom importers.
-   * 
-   * @param importer  importer
-   */
-  void addOrReplaceImporter(CustomImportList.Importer importer) {
-    prefs.customImports.replaceImporter(importer);
-    Globals.importFormatReader.resetImportFormats();
-    ((ImportTableModel)customImporterTable.getModel()).fireTableDataChanged();
-  }
-
-  /**
-   * 
-   * @param frame_
-   * @throws HeadlessException
-   */
-  public ImportCustomizationDialog(JabRefFrame frame_) throws HeadlessException {
-    super(frame_, Globals.lang("Manage custom imports"), false);
-    this.importCustomizationDialog = this;
-    frame = frame_;
-
-    addFromFolderButton.addActionListener(new ActionListener() {
-     public void actionPerformed(ActionEvent e) {
-       CustomImportList.Importer importer = prefs.customImports.new Importer();
-       importer.setBasePath( FileDialogs.getNewDir(frame, new File(prefs.get("workingDirectory")), "",
-           Globals.lang("Select Classpath of New Importer"), JFileChooser.CUSTOM_DIALOG, false) );
-       String chosenFileStr = FileDialogs.getNewFile(frame, importer.getBasePath(), ".class",
-           Globals.lang("Select new ImportFormat Subclass"), JFileChooser.CUSTOM_DIALOG, false);
-       if (chosenFileStr != null) {
-         try {
-            importer.setClassName( pathToClass(importer.getBasePath(), new File(chosenFileStr)) );
-            importer.setName( importer.getInstance().getFormatName() );
-            importer.setCliId( importer.getInstance().getCLIId() );
-            addOrReplaceImporter(importer);
-            customImporterTable.revalidate();
-            customImporterTable.repaint();
-            frame.setUpImportMenus();
-         } catch (Exception exc) {
-            JOptionPane.showMessageDialog(frame, Globals.lang("Could not instantiate %0", chosenFileStr));
-         } catch (NoClassDefFoundError exc) {
-            JOptionPane.showMessageDialog(frame, Globals.lang("Could not instantiate %0. Have you chosen the correct package path?", chosenFileStr));
-         }
-
-
-       }
-      }
-    });
-    addFromFolderButton.setToolTipText(Globals.lang("Add a (compiled) custom ImportFormat class from a class path. \nThe path need not be on the classpath of JabRef."));
-
-    addFromJarButton.addActionListener(new ActionListener() {
-     public void actionPerformed(ActionEvent e) {
-       String basePath = FileDialogs.getNewFile(frame, new File(prefs.get("workingDirectory")), ".zip,.jar",
-           Globals.lang("Select a Zip-archive"), JFileChooser.CUSTOM_DIALOG, false);
-       ZipFile zipFile = null;
-       if (basePath != null) {
-         try {
-           zipFile = new ZipFile(new File(basePath), ZipFile.OPEN_READ);
-         } catch (IOException exc) {
-           exc.printStackTrace();
-           JOptionPane.showMessageDialog(frame, Globals.lang("Could not open %0", basePath)
-                + "\n" + Globals.lang("Have you chosen the correct package path?"));
-           return;
-         } catch (NoClassDefFoundError exc) {
-           exc.printStackTrace();
-           JOptionPane.showMessageDialog(frame, Globals.lang("Could not instantiate %0", basePath)
-                + "\n" + Globals.lang("Have you chosen the correct package path?"));
-         }
-       }
-
-       if (zipFile != null) {
-         ZipFileChooser zipFileChooser = new ZipFileChooser(importCustomizationDialog, zipFile);
-         zipFileChooser.setVisible(true);
-         customImporterTable.revalidate();
-         customImporterTable.repaint(10);
-         frame.setUpImportMenus();
-       }
-
-      }
-    });
-    addFromJarButton.setToolTipText(Globals.lang("Add a (compiled) custom ImportFormat class from a Zip-archive.\nThe Zip-archive need not be on the classpath of JabRef."));
-
-    showDescButton.addActionListener(new ActionListener() {
-     public void actionPerformed(ActionEvent e) {
-       int row = customImporterTable.getSelectedRow();
-       if (row != -1) {
-         CustomImportList.Importer importer = ((ImportTableModel)customImporterTable.getModel()).getImporter(row);
-         try {
-           ImportFormat importFormat = importer.getInstance();
-           JOptionPane.showMessageDialog(frame, importFormat.getDescription());
-         } catch (Exception exc) {
-           exc.printStackTrace();
-           JOptionPane.showMessageDialog(frame, Globals.lang("Could not instantiate %0 %1", importer.getName() + ":\n", exc.getMessage()));
-         }
-       } else {
-         JOptionPane.showMessageDialog(frame, Globals.lang("Please select an importer"));
-       }
-     }
-    });
-
-    removeButton.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        int row = customImporterTable.getSelectedRow();
-        if (row != -1) {
-          customImporterTable.removeRowSelectionInterval(row,row);
-          prefs.customImports.remove(((ImportTableModel)customImporterTable.getModel()).getImporter(row));
-          Globals.importFormatReader.resetImportFormats();
-          customImporterTable.revalidate();
-          customImporterTable.repaint();
-          frame.setUpImportMenus();
-        }  else {
-          JOptionPane.showMessageDialog(frame, Globals.lang("Please select an importer."));
-        }
-      }
-    });
-
-    AbstractAction closeAction = new AbstractAction() {
-      public void actionPerformed(ActionEvent e) {
-        dispose();
-      }
-    };
-
-    closeButton.addActionListener(closeAction);
-
-    helpButton.addActionListener(new HelpAction(frame.helpDiag, GUIGlobals.importCustomizationHelp,
-                                          "Help"));
-
-    ImportTableModel tableModel = new ImportTableModel();
-    customImporterTable = new JTable(tableModel);
-    TableColumnModel cm = customImporterTable.getColumnModel();
-    cm.getColumn(0).setPreferredWidth(GUIGlobals.IMPORT_DIALOG_COL_0_WIDTH);
-    cm.getColumn(1).setPreferredWidth(GUIGlobals.IMPORT_DIALOG_COL_1_WIDTH);
-    cm.getColumn(2).setPreferredWidth(GUIGlobals.IMPORT_DIALOG_COL_2_WIDTH);
-    cm.getColumn(3).setPreferredWidth(GUIGlobals.IMPORT_DIALOG_COL_3_WIDTH);
-    JScrollPane sp = new JScrollPane(customImporterTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-                                     JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-    customImporterTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-    customImporterTable.setPreferredScrollableViewportSize(getSize());
-    if (customImporterTable.getRowCount() > 0) {
-      customImporterTable.setRowSelectionInterval(0, 0);
-    }
-
-    // Key bindings:
-    ActionMap am = mainPanel.getActionMap();
-    InputMap im = mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-    im.put(frame.prefs().getKey("Close dialog"), "close");
-    am.put("close", closeAction);
-    mainPanel.setLayout(new BorderLayout());
-    mainPanel.add(sp, BorderLayout.CENTER);
-    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
-    buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
-    bb.addGlue();
-    bb.addButton(addFromFolderButton);
-    bb.addButton(addFromJarButton);
-    bb.addButton(showDescButton);
-    bb.addButton(removeButton);
-    bb.addButton(closeButton);
-    bb.addUnrelatedGap();
-    bb.addButton(helpButton);
-    bb.addGlue();
-
-    getContentPane().add(mainPanel, BorderLayout.CENTER);
-    getContentPane().add(buttons, BorderLayout.SOUTH);
-    this.setSize(getSize());
-    pack();
-    Util.placeDialog(this, frame);
-    new FocusRequester(customImporterTable);
-  }
-
-  /**
-   * Table model for the custom importer table.
-   */
-  class ImportTableModel extends AbstractTableModel {
-    private String[] columnNames = new String[] {
-      Globals.lang("Import name"),
-      Globals.lang("Command line id"),
-      Globals.lang("ImportFormat class"),
-      Globals.lang("Contained in")
-    };
-
-    public Object getValueAt(int rowIndex, int columnIndex) {
-      Object value = null;
-      CustomImportList.Importer importer = getImporter(rowIndex);
-      if (columnIndex == 0) {
-        value = importer.getName();
-      } else if (columnIndex == 1) {
-        value = importer.getClidId();
-      } else if (columnIndex == 2) {
-        value = importer.getClassName();
-      } else if (columnIndex == 3) {
-        value = importer.getBasePath();
-      }
-      return value;
-    }
-
-    public int getColumnCount() {
-      return columnNames.length;
-    }
-
-    public int getRowCount() {
-      return Globals.prefs.customImports.size();
-    }
-
-    public String getColumnName(int col) {
-      return columnNames[col];
-    }
-
-    public CustomImportList.Importer getImporter(int rowIndex) {
-      CustomImportList.Importer[] importers = Globals.prefs.customImports.toArray(new CustomImportList.Importer[] {});
-      return importers[rowIndex];
-    }
-  }
-
-}
+/*
+ Copyright (C) 2005 Andreas Rudert, based on ExportCustomizationDialog by ??
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+package net.sf.jabref.imports;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.HeadlessException;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
+import java.util.zip.ZipFile;
+
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableColumnModel;
+
+import net.sf.jabref.*;
+import net.sf.jabref.gui.FileDialogs;
+import net.sf.jabref.help.HelpAction;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+/**
+ * Dialog to manage custom importers.
+ */
+public class ImportCustomizationDialog extends JDialog {
+
+  private final JabRefFrame frame;
+  private JButton addFromFolderButton = new JButton(Globals.lang("Add from folder"));
+  private JButton addFromJarButton = new JButton(Globals.lang("Add from jar"));
+  private JButton showDescButton = new JButton(Globals.lang("Show description"));
+  private JButton removeButton = new JButton(Globals.lang("Remove"));
+  private JButton closeButton = new JButton(Globals.lang("Close"));
+  private JButton helpButton = new JButton(Globals.lang("Help"));
+
+  private JPanel buttons = new JPanel();
+  private JPanel mainPanel = new JPanel();
+  private JTable customImporterTable;
+  private JabRefPreferences prefs = Globals.prefs;
+  private ImportCustomizationDialog importCustomizationDialog;
+
+  /*
+  *  (non-Javadoc)
+  * @see java.awt.Component#getSize()
+  */
+  public Dimension getSize() {
+    int width = GUIGlobals.IMPORT_DIALOG_COL_0_WIDTH
+              + GUIGlobals.IMPORT_DIALOG_COL_1_WIDTH
+              + GUIGlobals.IMPORT_DIALOG_COL_2_WIDTH
+              + GUIGlobals.IMPORT_DIALOG_COL_3_WIDTH;
+    return new Dimension(width, width/2);
+  }
+
+  /**
+   * Converts a path relative to a base-path into a class name.
+   * 
+   * @param basePath  base path
+   * @param path  path that includes base-path as a prefix
+   * @return  class name
+   */
+  private String pathToClass(File basePath, File path) {
+    String className = null;
+    // remove leading basepath from path
+    while (!path.equals(basePath)) {
+      className = path.getName() + (className != null ? "." + className : "");
+      path = path.getParentFile();
+    }
+    int lastDot = className.lastIndexOf('.');
+    if (lastDot < 0)
+        return className;
+    className = className.substring(0, lastDot);
+    return className;
+  }
+
+  /**
+   * Adds an importer to the model that underlies the custom importers.
+   * 
+   * @param importer  importer
+   */
+  void addOrReplaceImporter(CustomImportList.Importer importer) {
+    prefs.customImports.replaceImporter(importer);
+    Globals.importFormatReader.resetImportFormats();
+    ((ImportTableModel)customImporterTable.getModel()).fireTableDataChanged();
+  }
+
+  /**
+   * 
+   * @param frame_
+   * @throws HeadlessException
+   */
+  public ImportCustomizationDialog(JabRefFrame frame_) throws HeadlessException {
+    super(frame_, Globals.lang("Manage custom imports"), false);
+    this.importCustomizationDialog = this;
+    frame = frame_;
+
+    addFromFolderButton.addActionListener(new ActionListener() {
+     public void actionPerformed(ActionEvent e) {
+       CustomImportList.Importer importer = prefs.customImports.new Importer();
+       importer.setBasePath( FileDialogs.getNewDir(frame, new File(prefs.get("workingDirectory")), "",
+           Globals.lang("Select Classpath of New Importer"), JFileChooser.CUSTOM_DIALOG, false) );
+       String chosenFileStr = FileDialogs.getNewFile(frame, importer.getBasePath(), ".class",
+           Globals.lang("Select new ImportFormat Subclass"), JFileChooser.CUSTOM_DIALOG, false);
+       if (chosenFileStr != null) {
+         try {
+            importer.setClassName( pathToClass(importer.getBasePath(), new File(chosenFileStr)) );
+            importer.setName( importer.getInstance().getFormatName() );
+            importer.setCliId( importer.getInstance().getCLIId() );
+            addOrReplaceImporter(importer);
+            customImporterTable.revalidate();
+            customImporterTable.repaint();
+            frame.setUpImportMenus();
+         } catch (Exception exc) {
+            JOptionPane.showMessageDialog(frame, Globals.lang("Could not instantiate %0", chosenFileStr));
+         } catch (NoClassDefFoundError exc) {
+            JOptionPane.showMessageDialog(frame, Globals.lang("Could not instantiate %0. Have you chosen the correct package path?", chosenFileStr));
+         }
+
+
+       }
+      }
+    });
+    addFromFolderButton.setToolTipText(Globals.lang("Add a (compiled) custom ImportFormat class from a class path. \nThe path need not be on the classpath of JabRef."));
+
+    addFromJarButton.addActionListener(new ActionListener() {
+     public void actionPerformed(ActionEvent e) {
+       String basePath = FileDialogs.getNewFile(frame, new File(prefs.get("workingDirectory")), ".zip,.jar",
+           Globals.lang("Select a Zip-archive"), JFileChooser.CUSTOM_DIALOG, false);
+       ZipFile zipFile = null;
+       if (basePath != null) {
+         try {
+           zipFile = new ZipFile(new File(basePath), ZipFile.OPEN_READ);
+         } catch (IOException exc) {
+           exc.printStackTrace();
+           JOptionPane.showMessageDialog(frame, Globals.lang("Could not open %0", basePath)
+                + "\n" + Globals.lang("Have you chosen the correct package path?"));
+           return;
+         } catch (NoClassDefFoundError exc) {
+           exc.printStackTrace();
+           JOptionPane.showMessageDialog(frame, Globals.lang("Could not instantiate %0", basePath)
+                + "\n" + Globals.lang("Have you chosen the correct package path?"));
+         }
+       }
+
+       if (zipFile != null) {
+         ZipFileChooser zipFileChooser = new ZipFileChooser(importCustomizationDialog, zipFile);
+         zipFileChooser.setVisible(true);
+         customImporterTable.revalidate();
+         customImporterTable.repaint(10);
+         frame.setUpImportMenus();
+       }
+
+      }
+    });
+    addFromJarButton.setToolTipText(Globals.lang("Add a (compiled) custom ImportFormat class from a Zip-archive.\nThe Zip-archive need not be on the classpath of JabRef."));
+
+    showDescButton.addActionListener(new ActionListener() {
+     public void actionPerformed(ActionEvent e) {
+       int row = customImporterTable.getSelectedRow();
+       if (row != -1) {
+         CustomImportList.Importer importer = ((ImportTableModel)customImporterTable.getModel()).getImporter(row);
+         try {
+           ImportFormat importFormat = importer.getInstance();
+           JOptionPane.showMessageDialog(frame, importFormat.getDescription());
+         } catch (Exception exc) {
+           exc.printStackTrace();
+           JOptionPane.showMessageDialog(frame, Globals.lang("Could not instantiate %0 %1", importer.getName() + ":\n", exc.getMessage()));
+         }
+       } else {
+         JOptionPane.showMessageDialog(frame, Globals.lang("Please select an importer"));
+       }
+     }
+    });
+
+    removeButton.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        int row = customImporterTable.getSelectedRow();
+        if (row != -1) {
+          customImporterTable.removeRowSelectionInterval(row,row);
+          prefs.customImports.remove(((ImportTableModel)customImporterTable.getModel()).getImporter(row));
+          Globals.importFormatReader.resetImportFormats();
+          customImporterTable.revalidate();
+          customImporterTable.repaint();
+          frame.setUpImportMenus();
+        }  else {
+          JOptionPane.showMessageDialog(frame, Globals.lang("Please select an importer."));
+        }
+      }
+    });
+
+    AbstractAction closeAction = new AbstractAction() {
+      public void actionPerformed(ActionEvent e) {
+        dispose();
+      }
+    };
+
+    closeButton.addActionListener(closeAction);
+
+    helpButton.addActionListener(new HelpAction(frame.helpDiag, GUIGlobals.importCustomizationHelp,
+                                          "Help"));
+
+    ImportTableModel tableModel = new ImportTableModel();
+    customImporterTable = new JTable(tableModel);
+    TableColumnModel cm = customImporterTable.getColumnModel();
+    cm.getColumn(0).setPreferredWidth(GUIGlobals.IMPORT_DIALOG_COL_0_WIDTH);
+    cm.getColumn(1).setPreferredWidth(GUIGlobals.IMPORT_DIALOG_COL_1_WIDTH);
+    cm.getColumn(2).setPreferredWidth(GUIGlobals.IMPORT_DIALOG_COL_2_WIDTH);
+    cm.getColumn(3).setPreferredWidth(GUIGlobals.IMPORT_DIALOG_COL_3_WIDTH);
+    JScrollPane sp = new JScrollPane(customImporterTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+                                     JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+    customImporterTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+    customImporterTable.setPreferredScrollableViewportSize(getSize());
+    if (customImporterTable.getRowCount() > 0) {
+      customImporterTable.setRowSelectionInterval(0, 0);
+    }
+
+    // Key bindings:
+    ActionMap am = mainPanel.getActionMap();
+    InputMap im = mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+    im.put(frame.prefs().getKey("Close dialog"), "close");
+    am.put("close", closeAction);
+    mainPanel.setLayout(new BorderLayout());
+    mainPanel.add(sp, BorderLayout.CENTER);
+    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
+    buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+    bb.addGlue();
+    bb.addButton(addFromFolderButton);
+    bb.addButton(addFromJarButton);
+    bb.addButton(showDescButton);
+    bb.addButton(removeButton);
+    bb.addButton(closeButton);
+    bb.addUnrelatedGap();
+    bb.addButton(helpButton);
+    bb.addGlue();
+
+    getContentPane().add(mainPanel, BorderLayout.CENTER);
+    getContentPane().add(buttons, BorderLayout.SOUTH);
+    this.setSize(getSize());
+    pack();
+    Util.placeDialog(this, frame);
+    new FocusRequester(customImporterTable);
+  }
+
+  /**
+   * Table model for the custom importer table.
+   */
+  class ImportTableModel extends AbstractTableModel {
+    private String[] columnNames = new String[] {
+      Globals.lang("Import name"),
+      Globals.lang("Command line id"),
+      Globals.lang("ImportFormat class"),
+      Globals.lang("Contained in")
+    };
+
+    public Object getValueAt(int rowIndex, int columnIndex) {
+      Object value = null;
+      CustomImportList.Importer importer = getImporter(rowIndex);
+      if (columnIndex == 0) {
+        value = importer.getName();
+      } else if (columnIndex == 1) {
+        value = importer.getClidId();
+      } else if (columnIndex == 2) {
+        value = importer.getClassName();
+      } else if (columnIndex == 3) {
+        value = importer.getBasePath();
+      }
+      return value;
+    }
+
+    public int getColumnCount() {
+      return columnNames.length;
+    }
+
+    public int getRowCount() {
+      return Globals.prefs.customImports.size();
+    }
+
+    public String getColumnName(int col) {
+      return columnNames[col];
+    }
+
+    public CustomImportList.Importer getImporter(int rowIndex) {
+      CustomImportList.Importer[] importers = Globals.prefs.customImports.toArray(new CustomImportList.Importer[] {});
+      return importers[rowIndex];
+    }
+  }
+
+}
diff --git a/src/java/net/sf/jabref/imports/ImportFileFilter.java b/src/java/net/sf/jabref/imports/ImportFileFilter.java
index 3b7ccfb..2400c25 100644
--- a/src/java/net/sf/jabref/imports/ImportFileFilter.java
+++ b/src/java/net/sf/jabref/imports/ImportFileFilter.java
@@ -1,53 +1,53 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import javax.swing.filechooser.FileFilter;
-import java.io.File;
-
-/**
- * File filter that lets the user choose export format while choosing file to
- * export to. Contains a reference to the ExportFormat in question.
- */
-public class ImportFileFilter extends FileFilter implements Comparable<ImportFileFilter> {
-    private ImportFormat format;
-    private String name;
-
-    public ImportFileFilter(ImportFormat format) {
-        this.format = format;
-        this.name = format.getFormatName();
-    }
-
-    public ImportFormat getImportFormat() {
-        return format;
-    }
-
-    public boolean accept(File file) {
-        return true;
-        /*if (file.isDirectory())
-            return true;
-        else
-            return file.getPath().toLowerCase().endsWith(extension);*/
-    }
-
-    public String getDescription() {
-        return name;
-    }
-
-    public int compareTo(ImportFileFilter o) {
-        return name.compareTo(o.name);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import javax.swing.filechooser.FileFilter;
+import java.io.File;
+
+/**
+ * File filter that lets the user choose export format while choosing file to
+ * export to. Contains a reference to the ExportFormat in question.
+ */
+public class ImportFileFilter extends FileFilter implements Comparable<ImportFileFilter> {
+    private ImportFormat format;
+    private String name;
+
+    public ImportFileFilter(ImportFormat format) {
+        this.format = format;
+        this.name = format.getFormatName();
+    }
+
+    public ImportFormat getImportFormat() {
+        return format;
+    }
+
+    public boolean accept(File file) {
+        return true;
+        /*if (file.isDirectory())
+            return true;
+        else
+            return file.getPath().toLowerCase().endsWith(extension);*/
+    }
+
+    public String getDescription() {
+        return name;
+    }
+
+    public int compareTo(ImportFileFilter o) {
+        return name.compareTo(o.name);
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/ImportFormat.java b/src/java/net/sf/jabref/imports/ImportFormat.java
index 7bc0a9c..4e77321 100644
--- a/src/java/net/sf/jabref/imports/ImportFormat.java
+++ b/src/java/net/sf/jabref/imports/ImportFormat.java
@@ -1,182 +1,182 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.OutputPrinter;
-
-/**
- * Role of an importer for JabRef.
- * 
- * <p>Importers are sorted according to following criteria
- * <ol><li>
- *   custom importers come first, then importers shipped with JabRef
- * </li><li>
- *   then importers are sorted by name.
- * </li></ol>
- * </p>
- */
-public abstract class ImportFormat implements Comparable<ImportFormat> {
-
-    private boolean isCustomImporter;
-    
-    /**
-     * Constructor for custom importers.
-     */
-    public ImportFormat() {
-      this.isCustomImporter = false;
-    }
-
-    /**
-     * Check whether the source is in the correct format for this importer.
-     */
-    public abstract boolean isRecognizedFormat(InputStream in) throws IOException;
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     *
-     * This method can be called in two different contexts - either when importing in
-     * a specified format, or when importing in unknown format. In the latter case,
-     * JabRef cycles through all available import formats. No error messages or feedback
-     * is displayed from individual import formats in this case.
-     *
-     * If importing in a specified format, and null or an empty list is returned, JabRef reports
-     * that no entries were found. If an IOException is thrown, JabRef displays the exception's
-     * message in unmodified form.
-     */
-    public abstract List<BibtexEntry> importEntries(InputStream in, OutputPrinter status) throws IOException;
-
-
-    /**
-     * Name of this import format.
-     * 
-     * <p>The name must be unique.</p>
-     * 
-     * @return format name, must be unique and not <code>null</code>
-     */
-    public abstract String getFormatName();
-    
-    /**
-     * Extensions that this importer can read.
-     * 
-     * @return comma separated list of extensions or <code>null</code> for the default
-     */
-    public String getExtensions() {
-      return null;
-    }
-    
-    /**
-     * Short, one token ID to identify the format from the command line.
-     * 
-     * @return command line ID
-     */
-    public String getCLIId() {
-      String id = getFormatName();
-      StringBuffer result = new StringBuffer(id.length());
-      for (int i = 0; i < id.length(); i++) {
-        char c = id.charAt(i);
-        if (Character.isLetterOrDigit(c)) {
-          result.append(Character.toLowerCase(c));
-        }
-      }
-      return result.toString();
-    }
-    
-    /**
-     * Description  of the ImportFormat.
-     * 
-     * <p>Implementors of ImportFormats should override this. Ideally, it should specify
-     * <ul><li>
-     *   what kind of entries from what sources and based on what specification it is able to import
-     * </li><li>
-     *   by what criteria it {@link #isRecognizedFormat(InputStream) recognizes} an import format
-     * </li></ul>
-     * 
-     * @return description of the import format
-     */
-    public String getDescription() {
-      return "No description available for " + getFormatName() + ".";
-    }
-    
-    /**
-     * Sets if this is a custom importer.
-     * 
-     * <p>For custom importers added dynamically to JabRef, this will be
-     * set automatically by JabRef.</p>
-     * 
-     * @param isCustomImporter if this is a custom importer
-     */
-    public final void setIsCustomImporter(boolean isCustomImporter) {
-      this.isCustomImporter = isCustomImporter;
-    }
-    
-    /**
-     * Wether this importer is a custom importer.
-     * 
-     * <p>Custom importers will have precedence over built-in importers.</p>
-     * 
-     * @return  wether this is a custom importer
-     */
-    public final boolean getIsCustomImporter() {
-      return this.isCustomImporter; 
-    }
-        
-    /*
-     *  (non-Javadoc)
-     * @see java.lang.Object#hashCode()
-     */
-    public int hashCode() {
-      return getFormatName().hashCode();
-    }
-    
-    /*
-     *  (non-Javadoc)
-     * @see java.lang.Object#equals(java.lang.Object)
-     */
-    public boolean equals(Object o) {
-      return o != null 
-          && o instanceof ImportFormat
-          && ((ImportFormat)o).getIsCustomImporter() == getIsCustomImporter() 
-          && ((ImportFormat)o).getFormatName().equals(getFormatName());
-    }
-    
-    /*
-     *  (non-Javadoc)
-     * @see java.lang.Object#toString()
-     */
-    public String toString() {
-      return getFormatName();
-    }
-    
-    /*
-     *  (non-Javadoc)
-     * @see java.lang.Comparable#compareTo(java.lang.Object)
-     */
-    public int compareTo(ImportFormat importer) {
-      int result = 0;
-      if (getIsCustomImporter() == importer.getIsCustomImporter()) {
-        result = getFormatName().compareTo(importer.getFormatName());
-      } else {
-        result = getIsCustomImporter() ? 1 : -1;
-      }
-      return result;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.OutputPrinter;
+
+/**
+ * Role of an importer for JabRef.
+ * 
+ * <p>Importers are sorted according to following criteria
+ * <ol><li>
+ *   custom importers come first, then importers shipped with JabRef
+ * </li><li>
+ *   then importers are sorted by name.
+ * </li></ol>
+ * </p>
+ */
+public abstract class ImportFormat implements Comparable<ImportFormat> {
+
+    private boolean isCustomImporter;
+    
+    /**
+     * Constructor for custom importers.
+     */
+    public ImportFormat() {
+      this.isCustomImporter = false;
+    }
+
+    /**
+     * Check whether the source is in the correct format for this importer.
+     */
+    public abstract boolean isRecognizedFormat(InputStream in) throws IOException;
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     *
+     * This method can be called in two different contexts - either when importing in
+     * a specified format, or when importing in unknown format. In the latter case,
+     * JabRef cycles through all available import formats. No error messages or feedback
+     * is displayed from individual import formats in this case.
+     *
+     * If importing in a specified format, and null or an empty list is returned, JabRef reports
+     * that no entries were found. If an IOException is thrown, JabRef displays the exception's
+     * message in unmodified form.
+     */
+    public abstract List<BibtexEntry> importEntries(InputStream in, OutputPrinter status) throws IOException;
+
+
+    /**
+     * Name of this import format.
+     * 
+     * <p>The name must be unique.</p>
+     * 
+     * @return format name, must be unique and not <code>null</code>
+     */
+    public abstract String getFormatName();
+    
+    /**
+     * Extensions that this importer can read.
+     * 
+     * @return comma separated list of extensions or <code>null</code> for the default
+     */
+    public String getExtensions() {
+      return null;
+    }
+    
+    /**
+     * Short, one token ID to identify the format from the command line.
+     * 
+     * @return command line ID
+     */
+    public String getCLIId() {
+      String id = getFormatName();
+      StringBuffer result = new StringBuffer(id.length());
+      for (int i = 0; i < id.length(); i++) {
+        char c = id.charAt(i);
+        if (Character.isLetterOrDigit(c)) {
+          result.append(Character.toLowerCase(c));
+        }
+      }
+      return result.toString();
+    }
+    
+    /**
+     * Description  of the ImportFormat.
+     * 
+     * <p>Implementors of ImportFormats should override this. Ideally, it should specify
+     * <ul><li>
+     *   what kind of entries from what sources and based on what specification it is able to import
+     * </li><li>
+     *   by what criteria it {@link #isRecognizedFormat(InputStream) recognizes} an import format
+     * </li></ul>
+     * 
+     * @return description of the import format
+     */
+    public String getDescription() {
+      return "No description available for " + getFormatName() + ".";
+    }
+    
+    /**
+     * Sets if this is a custom importer.
+     * 
+     * <p>For custom importers added dynamically to JabRef, this will be
+     * set automatically by JabRef.</p>
+     * 
+     * @param isCustomImporter if this is a custom importer
+     */
+    public final void setIsCustomImporter(boolean isCustomImporter) {
+      this.isCustomImporter = isCustomImporter;
+    }
+    
+    /**
+     * Wether this importer is a custom importer.
+     * 
+     * <p>Custom importers will have precedence over built-in importers.</p>
+     * 
+     * @return  wether this is a custom importer
+     */
+    public final boolean getIsCustomImporter() {
+      return this.isCustomImporter; 
+    }
+        
+    /*
+     *  (non-Javadoc)
+     * @see java.lang.Object#hashCode()
+     */
+    public int hashCode() {
+      return getFormatName().hashCode();
+    }
+    
+    /*
+     *  (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals(Object o) {
+      return o != null 
+          && o instanceof ImportFormat
+          && ((ImportFormat)o).getIsCustomImporter() == getIsCustomImporter() 
+          && ((ImportFormat)o).getFormatName().equals(getFormatName());
+    }
+    
+    /*
+     *  (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    public String toString() {
+      return getFormatName();
+    }
+    
+    /*
+     *  (non-Javadoc)
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    public int compareTo(ImportFormat importer) {
+      int result = 0;
+      if (getIsCustomImporter() == importer.getIsCustomImporter()) {
+        result = getFormatName().compareTo(importer.getFormatName());
+      } else {
+        result = getIsCustomImporter() ? 1 : -1;
+      }
+      return result;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/ImportFormatReader.java b/src/java/net/sf/jabref/imports/ImportFormatReader.java
index 3e65c05..4f29573 100644
--- a/src/java/net/sf/jabref/imports/ImportFormatReader.java
+++ b/src/java/net/sf/jabref/imports/ImportFormatReader.java
@@ -1,450 +1,458 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.*;
-import net.sf.jabref.util.Pair;
-import java.util.*;
-
-import net.sf.jabref.*;
-import net.sf.jabref.plugin.PluginCore;
-import net.sf.jabref.plugin.core.JabRefPlugin;
-import net.sf.jabref.plugin.core.generated._JabRefPlugin.ImportFormatExtension;
-
-
-public class ImportFormatReader {
-
-    public static String BIBTEX_FORMAT = "BibTeX";
-
-  /** all import formats, in the default order of import formats */
-  private SortedSet<ImportFormat> formats = new TreeSet<ImportFormat>();
-
-  public ImportFormatReader() {
-    super();
-  }
-
-  public void resetImportFormats() {
-    formats.clear();
-    
-    // Add all our importers to the TreeMap. The map is used to build the import
-    // menus, and .
-    formats.add(new CsaImporter());   
-    formats.add(new IsiImporter());
-    formats.add(new EndnoteImporter());
-    formats.add(new BibteXMLImporter());
-    formats.add(new BiblioscapeImporter());
-    formats.add(new SixpackImporter());
-    formats.add(new InspecImporter());
-    formats.add(new ScifinderImporter());
-    formats.add(new OvidImporter());
-    formats.add(new RisImporter());
-    formats.add(new JstorImporter());
-    formats.add(new SilverPlatterImporter());
-    formats.add(new BiomailImporter());
-    formats.add(new RepecNepImporter());  
-    formats.add(new PdfXmpImporter());
-    formats.add(new CopacImporter());
-    formats.add(new MsBibImporter());
-
-    /**
-     * Get import formats that are plug-ins
-     */
-    JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
-	if (jabrefPlugin != null){
-		for (ImportFormatExtension ext : jabrefPlugin.getImportFormatExtensions()){
-			ImportFormat importFormat = ext.getImportFormat();
-			if (importFormat != null){
-				formats.add(importFormat);
-			}
-		}
-	}
-	
-	/**
-	 * Get custom import formats
-	 */
-    for (CustomImportList.Importer importer : Globals.prefs.customImports){
-       try {
-        ImportFormat imFo = importer.getInstance();
-        formats.add(imFo);
-      } catch(Exception e) {
-        System.err.println("Could not instantiate " + importer.getName() + " importer, will ignore it. Please check if the class is still available.");
-        e.printStackTrace();
-      }      
-    }
-  }
-  
-  /**
-   * Format for a given CLI-ID.
-   * 
-   * <p>Will return the first format according to the default-order of
-   * format that matches the given ID.</p>
-   * 
-   * @param cliId  CLI-Id
-   * @return  Import Format or <code>null</code> if none matches
-   */
-  public ImportFormat getByCliId(String cliId) {
-    for (ImportFormat format : formats){
-      if (format.getCLIId().equals(cliId)) {
-        return format;
-      }
-    }
-    return null;
-  }
-  
-  public List<BibtexEntry> importFromStream(String format, InputStream in, OutputPrinter status)
-    throws IOException {
-    ImportFormat importer = getByCliId(format);
-
-    if (importer == null)
-      throw new IllegalArgumentException("Unknown import format: " + format);
-
-    List<BibtexEntry> res = importer.importEntries(in, status);
-
-    // Remove all empty entries
-    if (res != null)
-      purgeEmptyEntries(res);
-
-    return res;
-  }
-
-  public List<BibtexEntry> importFromFile(String format, String filename, OutputPrinter status)
-    throws IOException {
-    ImportFormat importer = getByCliId(format);
-
-    if (importer == null)
-      throw new IllegalArgumentException("Unknown import format: " + format);
-
-    return importFromFile(importer, filename, status);
-  }
-
-    public List<BibtexEntry> importFromFile(ImportFormat importer, String filename, OutputPrinter status) throws IOException {
-        List<BibtexEntry> result = null;
-        InputStream stream = null;
-        try {
-            File file = new File(filename);
-            stream = new FileInputStream(file);
-
-            if (!importer.isRecognizedFormat(stream))
-                throw new IOException(Globals.lang("Wrong file format"));
-
-            stream = new FileInputStream(file);
-
-            result = importer.importEntries(stream, status);
-        } finally {
-
-            try {
-                if (stream != null)
-                    stream.close();
-            } catch (IOException ex) {
-                throw ex;
-            }
-        }
-
-        return result;
-    }
-
-  public static BibtexDatabase createDatabase(Collection<BibtexEntry> bibentries) {
-    purgeEmptyEntries(bibentries);
-
-    BibtexDatabase database = new BibtexDatabase();
-
-    for (Iterator<BibtexEntry> i = bibentries.iterator(); i.hasNext();) {
-      BibtexEntry entry = i.next();
-
-      try {
-        entry.setId(Util.createNeutralId());
-        database.insertEntry(entry);
-      } catch (KeyCollisionException ex) {
-        System.err.println("KeyCollisionException [ addBibEntries(...) ]");
-      }
-    }
-
-    return database;
-  }
-
-  /**
-   * All custom importers.
-   * 
-   * <p>Elements are in default order.</p>
-   * 
-   * @return all custom importers, elements are of type InputFormat
-   */
-  public SortedSet<ImportFormat> getCustomImportFormats() {
-    SortedSet<ImportFormat> result = new TreeSet<ImportFormat>();
-    for (ImportFormat format : formats){
-      if (format.getIsCustomImporter()) {
-        result.add(format);  
-      }
-    }
-    return result;
-  }
-  
-  /**
-   * All built-in importers.
-   * 
-   * <p>Elements are in default order.</p>
-   * 
-   * @return all custom importers, elements are of type InputFormat
-   */
-  public SortedSet<ImportFormat> getBuiltInInputFormats() {
-		SortedSet<ImportFormat> result = new TreeSet<ImportFormat>();
-		for (ImportFormat format : formats) {
-			if (!format.getIsCustomImporter()) {
-				result.add(format);
-			}
-		}
-		return result;
-	}
-  
-  /**
-	 * All importers.
-	 * 
-	 * <p>
-	 * Elements are in default order.
-	 * </p>
-	 * 
-	 * @return all custom importers, elements are of type InputFormat
-	 */
-  public SortedSet<ImportFormat> getImportFormats() {
-    return this.formats;
-  }
-
-  /**
-   * Human readable list of all known import formats (name and CLI Id).
-   * 
-   * <p>List is in default-order.</p>
-   * 
-   * @return  human readable list of all known import formats
-   */
-  public String getImportFormatList() {
-    StringBuffer sb = new StringBuffer();
-
-    for (ImportFormat imFo : formats){
-      int pad = Math.max(0, 14 - imFo.getFormatName().length());
-      sb.append("  ");
-      sb.append(imFo.getFormatName());
-
-      for (int j = 0; j < pad; j++)
-        sb.append(" ");
-
-      sb.append(" : ");
-      sb.append(imFo.getCLIId());
-      sb.append("\n");
-    }
-
-    String res = sb.toString();
-
-    return res; //.substring(0, res.length()-1);
-  }
-
-
-    /**
-     * Expand initials, e.g. EH Wissler -> E. H. Wissler or Wissler, EH -> Wissler, E. H.
-     * @param name
-     * @return The name after expanding initials.
-     */
-    public static String expandAuthorInitials(String name) {
-      String[] authors = name.split(" and ");
-      StringBuffer sb = new StringBuffer();
-      for (int i=0; i<authors.length; i++) {
-          if (authors[i].indexOf(", ") >= 0) {
-              String[] names = authors[i].split(", ");
-              if (names.length > 0) {
-                  sb.append(names[0]);
-                  if (names.length > 1)
-                    sb.append(", ");
-              }
-              for (int j=1; j<names.length; j++) {
-                  if (j == 1)
-                    sb.append(expandAll(names[j]));
-                  else
-                    sb.append(names[j]);
-                  if (j < names.length-1)
-                      sb.append(", ");
-              }
-
-          } else {
-              String[] names = authors[i].split(" ");
-              if (names.length > 0) {
-                  sb.append(expandAll(names[0]));
-              }
-              for (int j=1; j<names.length; j++) {
-                  sb.append(" ");
-                  sb.append(names[j]);
-              }
-          }
-          if (i < authors.length-1)
-              sb.append(" and ");
-      }
-
-      return sb.toString().trim();
-  }
-  
-//------------------------------------------------------------------------------
-
-
-    public static String expandAll(String s) {
-        //System.out.println("'"+s+"'");
-        // Avoid arrayindexoutof.... :
-        if (s.length() == 0)
-          return s;
-        // If only one character (uppercase letter), add a dot and return immediately:
-        if ((s.length() == 1) && (Character.isLetter(s.charAt(0)) &&
-                Character.isUpperCase(s.charAt(0))))
-          return s+".";
-        StringBuffer sb = new StringBuffer();
-        char c = s.charAt(0), d = 0;
-        for (int i=1; i<s.length(); i++) {
-            d = s.charAt(i);
-            if (Character.isLetter(c) && Character.isUpperCase(c) &&
-                    Character.isLetter(d) && Character.isUpperCase(d)) {
-                sb.append(c);
-                sb.append(". ");
-            }
-            else {
-                sb.append(c);
-            }
-            c = d;
-        }
-        if (Character.isLetter(c) && Character.isUpperCase(c) &&
-              Character.isLetter(d) && Character.isUpperCase(d)) {
-            sb.append(c);
-            sb.append(". ");
-        }
-        else {
-            sb.append(c);
-        }
-        return sb.toString().trim();
-    }
-
-
-  static File checkAndCreateFile(String filename) {
-    File f = new File(filename);
-
-    if (!f.exists() && !f.canRead() && !f.isFile()) {
-      System.err.println("Error " + filename
-        + " is not a valid file and|or is not readable.");
-      Globals.logger("Error " + filename + " is not a valid file and|or is not readable.");
-
-      return null;
-    } else
-
-      return f;
-  }
-
-  //==================================================
-  // Set a field, unless the string to set is empty.
-  //==================================================
-  public static void setIfNecessary(BibtexEntry be, String field, String content) {
-    if (!content.equals(""))
-      be.setField(field, content);
-  }
-
-
-
-    public static Reader getReader(File f, String encoding)
-      throws IOException {
-      InputStreamReader reader;
-      reader = new InputStreamReader(new FileInputStream(f), encoding);
-
-      return reader;
-    }
-
-  public static Reader getReaderDefaultEncoding(InputStream in)
-    throws IOException {
-    InputStreamReader reader;
-    reader = new InputStreamReader(in, Globals.prefs.get("defaultEncoding"));
-
-    return reader;
-  }
-
-  /**
-   * Receives an ArrayList of BibtexEntry instances, iterates through them, and
-   * removes all entries that have no fields set. This is useful for rooting out
-   * an unsucessful import (wrong format) that returns a number of empty entries.
-   */
-  public static void purgeEmptyEntries(Collection<BibtexEntry> entries) {
-    for (Iterator<BibtexEntry> i = entries.iterator(); i.hasNext();) {
-      BibtexEntry entry = i.next();
-
-      // If there are no fields, remove the entry:
-      if (entry.getAllFields().size() == 0)
-        i.remove();
-    }
-  }
-
-  /**
-	 * Tries to import a file by iterating through the available import filters,
-	 * and keeping the import that seems most promising.
-	 * 
-	 * If all fails this method attempts to read this file as bibtex.
-	 * 
-	 * @throws IOException 
-	 */
-	public Pair<String, ParserResult> importUnknownFormat(String filename) {
-
-		Pair<String, ParserResult> result = null;
-		
-		// we don't use a provided OutputPrinter (such as the JabRef frame),
-		// as we don't want to see any outputs from failed importers:
-		// we expect failures and do not want to report them to the user
-		OutputPrinterToNull nullOutput = new OutputPrinterToNull();
-		
-		// Cycle through all importers:
-		int bestResult = 0;
-
-        for (ImportFormat imFo : getImportFormats()) {
-
-            try {
-
-                List<BibtexEntry> entries = importFromFile(imFo, filename, nullOutput);
-
-                if (entries != null)
-                    purgeEmptyEntries(entries);
-
-                int entryCount = ((entries != null) ? entries.size() : 0);
-
-                if (entryCount > bestResult) {
-                    bestResult = entryCount;
-
-                    result = new Pair<String, ParserResult>(imFo.getFormatName(),
-                    new ParserResult(entries));
-                }
-            } catch (IOException ex) {
-                // The import didn't succeed. Go on.
-            }
-        }
-		
-		if (result != null)
-			return result;
-
-      // Finally, if all else fails, see if it is a BibTeX file:
-      try {
-          ParserResult pr = OpenDatabaseAction.loadDatabase(new File(filename),
-                  Globals.prefs.get("defaultEncoding"));
-          if ((pr.getDatabase().getEntryCount() > 0)
-                  || (pr.getDatabase().getStringCount() > 0)) {
-              pr.setFile(new File(filename));
-
-              return new Pair<String, ParserResult>(BIBTEX_FORMAT, pr);
-          }
-      } catch (Throwable ex) {
-          return null;
-      }
-
-      return null;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.*;
+import net.sf.jabref.util.Pair;
+import java.util.*;
+
+import net.sf.jabref.*;
+import net.sf.jabref.plugin.PluginCore;
+import net.sf.jabref.plugin.core.JabRefPlugin;
+import net.sf.jabref.plugin.core.generated._JabRefPlugin.ImportFormatExtension;
+
+
+public class ImportFormatReader {
+
+    public static String BIBTEX_FORMAT = "BibTeX";
+
+  /** all import formats, in the default order of import formats */
+  private SortedSet<ImportFormat> formats = new TreeSet<ImportFormat>();
+
+  public ImportFormatReader() {
+    super();
+  }
+
+  public void resetImportFormats() {
+    formats.clear();
+    
+    // Add all our importers to the TreeMap. The map is used to build the import
+    // menus, and .
+    formats.add(new CsaImporter());   
+    formats.add(new IsiImporter());
+    formats.add(new EndnoteImporter());
+    formats.add(new BibteXMLImporter());
+    formats.add(new BiblioscapeImporter());
+    formats.add(new SixpackImporter());
+    formats.add(new InspecImporter());
+    formats.add(new ScifinderImporter());
+    formats.add(new OvidImporter());
+    formats.add(new RisImporter());
+    formats.add(new JstorImporter());
+    formats.add(new SilverPlatterImporter());
+    formats.add(new BiomailImporter());
+    formats.add(new RepecNepImporter());  
+    formats.add(new PdfXmpImporter());
+    formats.add(new CopacImporter());
+    formats.add(new MsBibImporter());
+
+    /**
+     * Get import formats that are plug-ins
+     */
+    JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
+	if (jabrefPlugin != null){
+		for (ImportFormatExtension ext : jabrefPlugin.getImportFormatExtensions()){
+			ImportFormat importFormat = ext.getImportFormat();
+			if (importFormat != null){
+				formats.add(importFormat);
+			}
+		}
+	}
+	
+	/**
+	 * Get custom import formats
+	 */
+    for (CustomImportList.Importer importer : Globals.prefs.customImports){
+       try {
+        ImportFormat imFo = importer.getInstance();
+        formats.add(imFo);
+      } catch(Exception e) {
+        System.err.println("Could not instantiate " + importer.getName() + " importer, will ignore it. Please check if the class is still available.");
+        e.printStackTrace();
+      }      
+    }
+  }
+  
+  /**
+   * Format for a given CLI-ID.
+   * 
+   * <p>Will return the first format according to the default-order of
+   * format that matches the given ID.</p>
+   * 
+   * @param cliId  CLI-Id
+   * @return  Import Format or <code>null</code> if none matches
+   */
+  public ImportFormat getByCliId(String cliId) {
+    for (ImportFormat format : formats){
+      if (format.getCLIId().equals(cliId)) {
+        return format;
+      }
+    }
+    return null;
+  }
+  
+  public List<BibtexEntry> importFromStream(String format, InputStream in, OutputPrinter status)
+    throws IOException {
+    ImportFormat importer = getByCliId(format);
+
+    if (importer == null)
+      throw new IllegalArgumentException("Unknown import format: " + format);
+
+    List<BibtexEntry> res = importer.importEntries(in, status);
+
+    // Remove all empty entries
+    if (res != null)
+      purgeEmptyEntries(res);
+
+    return res;
+  }
+
+  public List<BibtexEntry> importFromFile(String format, String filename, OutputPrinter status)
+    throws IOException {
+    ImportFormat importer = getByCliId(format);
+
+    if (importer == null)
+      throw new IllegalArgumentException("Unknown import format: " + format);
+
+    return importFromFile(importer, filename, status);
+  }
+
+    public List<BibtexEntry> importFromFile(ImportFormat importer, String filename, OutputPrinter status) throws IOException {
+        List<BibtexEntry> result = null;
+        InputStream stream = null;
+        try {
+            File file = new File(filename);
+            stream = new FileInputStream(file);
+
+            if (!importer.isRecognizedFormat(stream))
+                throw new IOException(Globals.lang("Wrong file format"));
+
+            stream = new FileInputStream(file);
+
+            result = importer.importEntries(stream, status);
+        } finally {
+
+            try {
+                if (stream != null)
+                    stream.close();
+            } catch (IOException ex) {
+                throw ex;
+            }
+        }
+
+        return result;
+    }
+
+  public static BibtexDatabase createDatabase(Collection<BibtexEntry> bibentries) {
+    purgeEmptyEntries(bibentries);
+
+    BibtexDatabase database = new BibtexDatabase();
+
+    for (Iterator<BibtexEntry> i = bibentries.iterator(); i.hasNext();) {
+      BibtexEntry entry = i.next();
+
+      try {
+        entry.setId(Util.createNeutralId());
+        database.insertEntry(entry);
+      } catch (KeyCollisionException ex) {
+        System.err.println("KeyCollisionException [ addBibEntries(...) ]");
+      }
+    }
+
+    return database;
+  }
+
+  /**
+   * All custom importers.
+   * 
+   * <p>Elements are in default order.</p>
+   * 
+   * @return all custom importers, elements are of type InputFormat
+   */
+  public SortedSet<ImportFormat> getCustomImportFormats() {
+    SortedSet<ImportFormat> result = new TreeSet<ImportFormat>();
+    for (ImportFormat format : formats){
+      if (format.getIsCustomImporter()) {
+        result.add(format);  
+      }
+    }
+    return result;
+  }
+  
+  /**
+   * All built-in importers.
+   * 
+   * <p>Elements are in default order.</p>
+   * 
+   * @return all custom importers, elements are of type InputFormat
+   */
+  public SortedSet<ImportFormat> getBuiltInInputFormats() {
+		SortedSet<ImportFormat> result = new TreeSet<ImportFormat>();
+		for (ImportFormat format : formats) {
+			if (!format.getIsCustomImporter()) {
+				result.add(format);
+			}
+		}
+		return result;
+	}
+  
+  /**
+	 * All importers.
+	 * 
+	 * <p>
+	 * Elements are in default order.
+	 * </p>
+	 * 
+	 * @return all custom importers, elements are of type InputFormat
+	 */
+  public SortedSet<ImportFormat> getImportFormats() {
+    return this.formats;
+  }
+
+  /**
+   * Human readable list of all known import formats (name and CLI Id).
+   * 
+   * <p>List is in default-order.</p>
+   * 
+   * @return  human readable list of all known import formats
+   */
+  public String getImportFormatList() {
+    StringBuffer sb = new StringBuffer();
+
+    for (ImportFormat imFo : formats){
+      int pad = Math.max(0, 14 - imFo.getFormatName().length());
+      sb.append("  ");
+      sb.append(imFo.getFormatName());
+
+      for (int j = 0; j < pad; j++)
+        sb.append(" ");
+
+      sb.append(" : ");
+      sb.append(imFo.getCLIId());
+      sb.append("\n");
+    }
+
+    String res = sb.toString();
+
+    return res; //.substring(0, res.length()-1);
+  }
+
+
+    /**
+     * Expand initials, e.g. EH Wissler -> E. H. Wissler or Wissler, EH -> Wissler, E. H.
+     * @param name
+     * @return The name after expanding initials.
+     */
+    public static String expandAuthorInitials(String name) {
+      String[] authors = name.split(" and ");
+      StringBuffer sb = new StringBuffer();
+      for (int i=0; i<authors.length; i++) {
+          if (authors[i].indexOf(", ") >= 0) {
+              String[] names = authors[i].split(", ");
+              if (names.length > 0) {
+                  sb.append(names[0]);
+                  if (names.length > 1)
+                    sb.append(", ");
+              }
+              for (int j=1; j<names.length; j++) {
+                  if (j == 1)
+                    sb.append(expandAll(names[j]));
+                  else
+                    sb.append(names[j]);
+                  if (j < names.length-1)
+                      sb.append(", ");
+              }
+
+          } else {
+              String[] names = authors[i].split(" ");
+              if (names.length > 0) {
+                  sb.append(expandAll(names[0]));
+              }
+              for (int j=1; j<names.length; j++) {
+                  sb.append(" ");
+                  sb.append(names[j]);
+              }
+          }
+          if (i < authors.length-1)
+              sb.append(" and ");
+      }
+
+      return sb.toString().trim();
+  }
+  
+//------------------------------------------------------------------------------
+
+
+    public static String expandAll(String s) {
+        //System.out.println("'"+s+"'");
+        // Avoid arrayindexoutof.... :
+        if (s.length() == 0)
+          return s;
+        // If only one character (uppercase letter), add a dot and return immediately:
+        if ((s.length() == 1) && (Character.isLetter(s.charAt(0)) &&
+                Character.isUpperCase(s.charAt(0))))
+          return s+".";
+        StringBuffer sb = new StringBuffer();
+        char c = s.charAt(0), d = 0;
+        for (int i=1; i<s.length(); i++) {
+            d = s.charAt(i);
+            if (Character.isLetter(c) && Character.isUpperCase(c) &&
+                    Character.isLetter(d) && Character.isUpperCase(d)) {
+                sb.append(c);
+                sb.append(". ");
+            }
+            else {
+                sb.append(c);
+            }
+            c = d;
+        }
+        if (Character.isLetter(c) && Character.isUpperCase(c) &&
+              Character.isLetter(d) && Character.isUpperCase(d)) {
+            sb.append(c);
+            sb.append(". ");
+        }
+        else {
+            sb.append(c);
+        }
+        return sb.toString().trim();
+    }
+
+
+  static File checkAndCreateFile(String filename) {
+    File f = new File(filename);
+
+    if (!f.exists() && !f.canRead() && !f.isFile()) {
+      System.err.println("Error " + filename
+        + " is not a valid file and|or is not readable.");
+      Globals.logger("Error " + filename + " is not a valid file and|or is not readable.");
+
+      return null;
+    } else
+
+      return f;
+  }
+
+  //==================================================
+  // Set a field, unless the string to set is empty.
+  //==================================================
+  public static void setIfNecessary(BibtexEntry be, String field, String content) {
+    if (!content.equals(""))
+      be.setField(field, content);
+  }
+
+
+
+    public static Reader getReader(File f, String encoding)
+      throws IOException {
+      InputStreamReader reader;
+      reader = new InputStreamReader(new FileInputStream(f), encoding);
+
+      return reader;
+    }
+
+  public static Reader getReaderDefaultEncoding(InputStream in)
+    throws IOException {
+    InputStreamReader reader;
+    reader = new InputStreamReader(in, Globals.prefs.get("defaultEncoding"));
+
+    return reader;
+  }
+
+  /**
+   * Receives an ArrayList of BibtexEntry instances, iterates through them, and
+   * removes all entries that have no fields set. This is useful for rooting out
+   * an unsucessful import (wrong format) that returns a number of empty entries.
+   */
+  public static void purgeEmptyEntries(Collection<BibtexEntry> entries) {
+    for (Iterator<BibtexEntry> i = entries.iterator(); i.hasNext();) {
+      BibtexEntry entry = i.next();
+
+      // If there are no fields, remove the entry:
+      if (entry.getAllFields().size() == 0)
+        i.remove();
+    }
+  }
+
+  /**
+	 * Tries to import a file by iterating through the available import filters,
+	 * and keeping the import that seems most promising.
+	 * 
+	 * If all fails this method attempts to read this file as bibtex.
+	 * 
+	 * @throws IOException 
+	 */
+	public Pair<String, ParserResult> importUnknownFormat(String filename) {
+
+		// we don't use a provided OutputPrinter (such as the JabRef frame),
+		// as we don't want to see any outputs from failed importers:
+		// we expect failures and do not want to report them to the user
+		OutputPrinterToNull nullOutput = new OutputPrinterToNull();
+
+		// stores ref to best result, gets updated at the next loop
+		List<BibtexEntry> bestResult = null;
+		int bestResultCount = 0;
+		String bestFormatName = null;
+
+		// Cycle through all importers:
+		for (ImportFormat imFo : getImportFormats()) {
+
+            try {
+
+                List<BibtexEntry> entries = importFromFile(imFo, filename, nullOutput);
+
+                int entryCount;
+                if (entries == null) {
+                    entryCount = 0;
+                } else {
+                    purgeEmptyEntries(entries);
+                    entryCount = entries.size();
+                }
+
+                if (entryCount > bestResultCount) {
+                    bestResult = entries;
+                    bestResultCount = bestResult.size();
+                    bestFormatName = imFo.getFormatName();
+                }
+            } catch (IOException ex) {
+                // The import didn't succeed. Go on.
+            }
+        }
+
+        if (bestResult != null) {
+            // we found something
+            ParserResult parserResult = new ParserResult(bestResult);
+            Pair<String, ParserResult> result =
+                    new Pair<String, ParserResult>(bestFormatName, parserResult);
+            return result;
+        }
+
+      // Finally, if all else fails, see if it is a BibTeX file:
+      try {
+          ParserResult pr = OpenDatabaseAction.loadDatabase(new File(filename),
+                  Globals.prefs.get("defaultEncoding"));
+          if ((pr.getDatabase().getEntryCount() > 0)
+                  || (pr.getDatabase().getStringCount() > 0)) {
+              pr.setFile(new File(filename));
+
+              return new Pair<String, ParserResult>(BIBTEX_FORMAT, pr);
+          }
+      } catch (Throwable ex) {
+          return null;
+      }
+
+      return null;
+	}
+}
diff --git a/src/java/net/sf/jabref/imports/ImportFormats.java b/src/java/net/sf/jabref/imports/ImportFormats.java
index 9ee8bcc..df15ce3 100644
--- a/src/java/net/sf/jabref/imports/ImportFormats.java
+++ b/src/java/net/sf/jabref/imports/ImportFormats.java
@@ -1,132 +1,132 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import javax.swing.AbstractAction;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-import javax.swing.filechooser.FileFilter;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MnemonicAwareAction;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Oct 22, 2006
- * Time: 12:06:09 PM
- * To change this template use File | Settings | File Templates.
- */
-public class ImportFormats {
-
-    public static JFileChooser createImportFileChooser(String currentDir) {
-
-        SortedSet<ImportFormat> importers = Globals.importFormatReader.getImportFormats();
-        
-        String lastUsedFormat = Globals.prefs.get("lastUsedImport");
-        FileFilter defaultFilter = null;
-        JFileChooser fc = new JFileChooser(currentDir);
-        TreeSet<ImportFileFilter> filters = new TreeSet<ImportFileFilter>();
-        for (ImportFormat format : importers){
-            ImportFileFilter filter = new ImportFileFilter(format);
-            filters.add(filter);
-            if (format.getFormatName().equals(lastUsedFormat))
-                defaultFilter = filter;
-        }
-        for (ImportFileFilter filter : filters){
-            fc.addChoosableFileFilter(filter);
-        }
-
-        if (defaultFilter != null)
-            fc.setFileFilter(defaultFilter);
-        else
-            fc.setFileFilter(fc.getAcceptAllFileFilter());
-        return fc;
-    }
-
-    /**
-     * Create an AbstractAction for performing an Import operation.
-     * @param frame The JabRefFrame of this JabRef instance.
-     * @param openInNew Indicate whether the action should open into a new database or
-     *  into the currently open one.
-     * @return The action.
-     */
-    public static AbstractAction getImportAction(JabRefFrame frame, boolean openInNew) {
-
-        class ImportAction extends MnemonicAwareAction {
-            private JabRefFrame frame;
-            private boolean openInNew;
-
-
-            public ImportAction(JabRefFrame frame, boolean openInNew) {
-                this.frame = frame;
-                this.openInNew = openInNew;
-
-                putValue(NAME, openInNew ? "Import into new database" :
-                        "Import into current database");
-                putValue(ACCELERATOR_KEY, openInNew ? Globals.prefs.getKey("Import into new database") :
-                        Globals.prefs.getKey("Import into current database"));
-            }
-
-            public void actionPerformed(ActionEvent e) {
-                JFileChooser fc = ImportFormats.createImportFileChooser
-                        (Globals.prefs.get("importWorkingDirectory"));
-                fc.showOpenDialog(frame);
-                File file = fc.getSelectedFile();
-                if (file == null)
-                    return;
-                FileFilter ff = fc.getFileFilter();
-                ImportFormat format = null;
-                if (ff instanceof ImportFileFilter)
-                    format = ((ImportFileFilter)ff).getImportFormat();
-
-                try {
-                    if (!file.exists()) {
-                        // Warn that the file doesn't exists:
-                        JOptionPane.showMessageDialog(frame,
-                                Globals.lang("File not found")+
-                                ": '"+file.getName()+"'.",
-                                Globals.lang("Import"), JOptionPane.ERROR_MESSAGE);
-                        return;
-                    }
-                    ImportMenuItem imi = new ImportMenuItem(frame,
-                            openInNew, format);
-                    imi.automatedImport(new String[] {file.getAbsolutePath()});
-
-
-                    // Make sure we remember which filter was used, to set the default
-                    // for next time:
-                    if (format != null)
-                        Globals.prefs.put("lastUsedImport", format.getFormatName());
-                    else
-                        Globals.prefs.put("lastUsedImport", "__all");
-                    Globals.prefs.put("importWorkingDirectory", file.getParent());
-                } catch (Exception ex) {
-                    ex.printStackTrace();
-                }
-
-            }
-        }
-
-        return new ImportAction(frame, openInNew);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import javax.swing.AbstractAction;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.filechooser.FileFilter;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.MnemonicAwareAction;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Oct 22, 2006
+ * Time: 12:06:09 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class ImportFormats {
+
+    public static JFileChooser createImportFileChooser(String currentDir) {
+
+        SortedSet<ImportFormat> importers = Globals.importFormatReader.getImportFormats();
+        
+        String lastUsedFormat = Globals.prefs.get("lastUsedImport");
+        FileFilter defaultFilter = null;
+        JFileChooser fc = new JFileChooser(currentDir);
+        TreeSet<ImportFileFilter> filters = new TreeSet<ImportFileFilter>();
+        for (ImportFormat format : importers){
+            ImportFileFilter filter = new ImportFileFilter(format);
+            filters.add(filter);
+            if (format.getFormatName().equals(lastUsedFormat))
+                defaultFilter = filter;
+        }
+        for (ImportFileFilter filter : filters){
+            fc.addChoosableFileFilter(filter);
+        }
+
+        if (defaultFilter != null)
+            fc.setFileFilter(defaultFilter);
+        else
+            fc.setFileFilter(fc.getAcceptAllFileFilter());
+        return fc;
+    }
+
+    /**
+     * Create an AbstractAction for performing an Import operation.
+     * @param frame The JabRefFrame of this JabRef instance.
+     * @param openInNew Indicate whether the action should open into a new database or
+     *  into the currently open one.
+     * @return The action.
+     */
+    public static AbstractAction getImportAction(JabRefFrame frame, boolean openInNew) {
+
+        class ImportAction extends MnemonicAwareAction {
+            private JabRefFrame frame;
+            private boolean openInNew;
+
+
+            public ImportAction(JabRefFrame frame, boolean openInNew) {
+                this.frame = frame;
+                this.openInNew = openInNew;
+
+                putValue(NAME, openInNew ? "Import into new database" :
+                        "Import into current database");
+                putValue(ACCELERATOR_KEY, openInNew ? Globals.prefs.getKey("Import into new database") :
+                        Globals.prefs.getKey("Import into current database"));
+            }
+
+            public void actionPerformed(ActionEvent e) {
+                JFileChooser fc = ImportFormats.createImportFileChooser
+                        (Globals.prefs.get("importWorkingDirectory"));
+                fc.showOpenDialog(frame);
+                File file = fc.getSelectedFile();
+                if (file == null)
+                    return;
+                FileFilter ff = fc.getFileFilter();
+                ImportFormat format = null;
+                if (ff instanceof ImportFileFilter)
+                    format = ((ImportFileFilter)ff).getImportFormat();
+
+                try {
+                    if (!file.exists()) {
+                        // Warn that the file doesn't exists:
+                        JOptionPane.showMessageDialog(frame,
+                                Globals.lang("File not found")+
+                                ": '"+file.getName()+"'.",
+                                Globals.lang("Import"), JOptionPane.ERROR_MESSAGE);
+                        return;
+                    }
+                    ImportMenuItem imi = new ImportMenuItem(frame,
+                            openInNew, format);
+                    imi.automatedImport(new String[] {file.getAbsolutePath()});
+
+
+                    // Make sure we remember which filter was used, to set the default
+                    // for next time:
+                    if (format != null)
+                        Globals.prefs.put("lastUsedImport", format.getFormatName());
+                    else
+                        Globals.prefs.put("lastUsedImport", "__all");
+                    Globals.prefs.put("importWorkingDirectory", file.getParent());
+                } catch (Exception ex) {
+                    ex.printStackTrace();
+                }
+
+            }
+        }
+
+        return new ImportAction(frame, openInNew);
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/ImportMenuItem.java b/src/java/net/sf/jabref/imports/ImportMenuItem.java
index c3009d7..c4d7971 100644
--- a/src/java/net/sf/jabref/imports/ImportMenuItem.java
+++ b/src/java/net/sf/jabref/imports/ImportMenuItem.java
@@ -1,345 +1,345 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-
-import net.sf.jabref.*;
-import net.sf.jabref.external.DroppedFileHandler;
-import net.sf.jabref.gui.ImportInspectionDialog;
-import net.sf.jabref.gui.FileDialogs;
-import net.sf.jabref.labelPattern.LabelPatternUtil;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableInsertEntry;
-import net.sf.jabref.undo.UndoableRemoveEntry;
-import net.sf.jabref.util.Pair;
-
-/* 
- * TODO: could separate the "menu item" functionality from the importing functionality
- * 
- */
-public class ImportMenuItem extends JMenuItem implements ActionListener {
-
-    JabRefFrame frame;
-    boolean openInNew;
-    MyWorker worker = null;
-    ImportFormat importer;
-    IOException importError = null;
-
-    public ImportMenuItem(JabRefFrame frame, boolean openInNew) {
-        this(frame, openInNew, null);
-    }
-
-    public ImportMenuItem(JabRefFrame frame, boolean openInNew, ImportFormat importer) {
-        super(importer != null ? importer.getFormatName()
-                : Globals.lang("Autodetect format"));
-        this.importer = importer;
-        this.frame = frame;
-        this.openInNew = openInNew;
-        addActionListener(this);
-    }
-
-
-    public void actionPerformed(ActionEvent e) {
-        worker = new MyWorker();
-        worker.init();
-        worker.getWorker().run();
-        worker.getCallBack().update();
-    }
-    
-    /**
-     * Automatically imports the files given as arguments
-     * @param filenames List of files to import
-     */
-    public void automatedImport(String filenames[]) {
-        // replace the work of the init step:
-        MyWorker worker = new MyWorker();
-        worker.fileOk = true;
-        worker.filenames = filenames;
-        
-        worker.getWorker().run();
-        worker.getCallBack().update();
-    }
-
-
-    class MyWorker extends AbstractWorker {
-        String[] filenames = null, formatName = null;
-        ParserResult bibtexResult = null; // Contains the merged import results
-        boolean fileOk = false;
-
-        public void init() {
-            importError = null;
-            filenames = FileDialogs.getMultipleFiles(frame,
-                    new File(Globals.prefs.get("workingDirectory")),
-                    (importer != null ? importer.getExtensions() : null), true);
-
-            if ((filenames != null) && (filenames.length > 0)) {
-                frame.block();
-                frame.output(Globals.lang("Starting import"));
-                fileOk = true;
-                
-                Globals.prefs.put("workingDirectory", filenames[0]);
-            }
-        }
-
-        public void run() {
-            if (!fileOk)
-                return;
-
-            // We import all files and collect their results:
-			List<Pair<String, ParserResult>> imports = new ArrayList<Pair<String, ParserResult>>();
-			for (String filename : filenames) {
-				try {
-					if (importer != null) {
-						// Specific importer:
-						ParserResult pr = new ParserResult(
-							Globals.importFormatReader.importFromFile(importer,
-								filename, frame));
-
-						imports.add(new Pair<String, ParserResult>(importer
-							.getFormatName(), pr));
-					} else {
-						// Unknown format:
-                        frame.output(Globals.lang("Importing in unknown format")+"...");
-                        // This import method never throws an IOException:
-                        imports.add(Globals.importFormatReader
-							.importUnknownFormat(filename));
-					}
-				} catch (IOException e) {
-					// This indicates that a specific importer was specified, and that
-                    // this importer has thrown an IOException. We store the exception,
-                    // so a relevant error message can be displayed.
-                    importError = e;
-                }
-			}
-
-
-
-            // Ok, done. Then try to gather in all we have found. Since we might
-			// have found
-            // one or more bibtex results, it's best to gather them in a
-			// BibtexDatabase.
-            bibtexResult = mergeImportResults(imports);
-            
-            
-            /* show parserwarnings, if any. */
-			for (Pair<String, ParserResult> p : imports) {
-                if (p != null) {
-                    ParserResult pr = p.v;
-                    if (pr.hasWarnings()) {
-                        if (Globals.prefs
-                                .getBoolean("displayKeyWarningDialogAtStartup")
-                                && pr.hasWarnings()) {
-                            String[] wrns = pr.warnings();
-                            StringBuffer wrn = new StringBuffer();
-                            for (int j = 0; j < wrns.length; j++)
-                                wrn.append(j + 1).append(". ").append(wrns[j])
-                                        .append("\n");
-                            if (wrn.length() > 0)
-                                wrn.deleteCharAt(wrn.length() - 1);
-                            JOptionPane.showMessageDialog(frame, wrn.toString(),
-                                    Globals.lang("Warnings"),
-                                    JOptionPane.WARNING_MESSAGE);
-                        }
-                    }
-                }
-			}
-        }
-
-        public void update() {
-            if (!fileOk)
-                return;
-
-            // TODO: undo is not handled properly here, except for the entries
-			// added by
-            //  the import inspection dialog.
-            if (bibtexResult != null) {
-                if (!openInNew) {
-                    final BasePanel panel = (BasePanel) frame.getTabbedPane().getSelectedComponent();
-                    BibtexDatabase toAddTo = panel.database();
-                    
-                    // Use the import inspection dialog if it is enabled in preferences, and
-                    // (there are more than one entry or the inspection dialog is also enabled
-                    // for single entries):
-                    if (Globals.prefs.getBoolean("useImportInspectionDialog") &&
-                            (Globals.prefs.getBoolean("useImportInspectionDialogForSingle")
-                                    || (bibtexResult.getDatabase().getEntryCount() > 1))) {
-                        ImportInspectionDialog diag = new ImportInspectionDialog(frame, panel,
-                                BibtexFields.DEFAULT_INSPECTION_FIELDS,
-                                Globals.lang("Import"), openInNew);
-                        diag.addEntries(bibtexResult.getDatabase().getEntries());
-                        diag.entryListComplete();
-                        Util.placeDialog(diag, frame);
-                        diag.setVisible(true);
-                        diag.toFront();
-                    } else {
-                        boolean generateKeys = Globals.prefs.getBoolean("generateKeysAfterInspection");
-                        NamedCompound ce = new NamedCompound(Globals.lang("Import entries"));
-
-                        // Check if we should unmark entries before adding the new ones:
-                        if (Globals.prefs.getBoolean("unmarkAllEntriesBeforeImporting"))
-                            for (BibtexEntry entry : toAddTo.getEntries()) {
-                                Util.unmarkEntry(entry, true, toAddTo, ce);
-                            }
-
-
-                        for (BibtexEntry entry : bibtexResult.getDatabase().getEntries()){
-                            try {
-                                // Check if the entry is a duplicate of an existing one:
-                                boolean keepEntry = true;
-                                BibtexEntry duplicate = DuplicateCheck.containsDuplicate(toAddTo, entry);
-                                if (duplicate != null) {
-                                    int answer = DuplicateResolverDialog.resolveDuplicateInImport
-                                            (frame, duplicate, entry);
-                                    // The upper entry is the
-                                    if (answer == DuplicateResolverDialog.DO_NOT_IMPORT)
-                                        keepEntry = false;
-                                    if (answer == DuplicateResolverDialog.IMPORT_AND_DELETE_OLD) {
-                                        // Remove the old one and import the new one.
-                                        toAddTo.removeEntry(duplicate.getId());
-                                        ce.addEdit(new UndoableRemoveEntry(toAddTo, duplicate, panel));
-                                    }
-                                }
-                                // Add the entry, if we are supposed to:
-                                if (keepEntry) {
-                                    toAddTo.insertEntry(entry);
-                                    // Generate key, if we are supposed to:
-                                    if (generateKeys) {
-                                        LabelPatternUtil.makeLabel(bibtexResult.getMetaData(), toAddTo, entry);
-                                        //System.out.println("gen:"+entry.getCiteKey());
-                                    }
-                                    // Let the autocompleters, if any, harvest words from the entry: 
-                                    Util.updateCompletersForEntry(panel.getAutoCompleters(), entry);
-
-                                    ce.addEdit(new UndoableInsertEntry(toAddTo, entry, panel));
-                                }
-                            } catch (KeyCollisionException e) {
-                                e.printStackTrace();
-                            }
-                        }
-                        ce.end();
-                        if (ce.hasEdits()) {
-                            panel.undoManager.addEdit(ce);
-                            panel.markBaseChanged();
-                        }
-
-                    }                    
-
-                }
-
-                else {
-                    frame.addTab(bibtexResult.getDatabase(), bibtexResult.getFile(),
-                            bibtexResult.getMetaData(), Globals.prefs.get("defaultEncoding"), true);
-                    frame.output(Globals.lang("Imported entries") + ": " + bibtexResult.getDatabase().getEntryCount());
-                }
-
-
-            } else {
-                if (importer == null)
-                    frame.output(Globals.lang("Could not find a suitable import format."));
-                else {
-                    // Import in a specific format was specified. Check if we have stored error information:
-                    if (importError != null) {
-                        JOptionPane.showMessageDialog(frame, importError.getMessage(), Globals.lang("Import failed"),
-                              JOptionPane.ERROR_MESSAGE);
-                    }
-                    else {
-                        JOptionPane.showMessageDialog(frame, Globals.lang("No entries found. Please make sure you are "
-                                      +"using the correct import filter."), Globals.lang("Import failed"),
-                              JOptionPane.ERROR_MESSAGE);
-                    }
-                }
-            }
-            frame.unblock();
-        }
-    }
-
-    public ParserResult mergeImportResults(List<Pair<String, ParserResult>> imports) {
-        BibtexDatabase database = new BibtexDatabase();
-        ParserResult directParserResult = null;
-        boolean anythingUseful = false;
-
-        for (Pair<String, ParserResult> importResult : imports){
-            if (importResult == null)
-                continue;
-            if (importResult.p.equals(ImportFormatReader.BIBTEX_FORMAT)){
-        	    // Bibtex result. We must merge it into our main base.
-                ParserResult pr = importResult.v;
-
-                anythingUseful = anythingUseful
-                        || ((pr.getDatabase().getEntryCount() > 0) || (pr.getDatabase().getStringCount() > 0));
-                
-                // Record the parserResult, as long as this is the first bibtex result:
-                if (directParserResult == null) {
-                    directParserResult = pr;
-                }
-
-                // Merge entries:
-                for (BibtexEntry entry : pr.getDatabase().getEntries()) {
-                    database.insertEntry(entry);
-                }
-                
-                // Merge strings:
-                for (BibtexString bs : pr.getDatabase().getStringValues()){
-                    try {
-                        database.addString((BibtexString)bs.clone());
-                    } catch (KeyCollisionException e) {
-                        // TODO: This means a duplicate string name exists, so it's not
-                        // a very exceptional situation. We should maybe give a warning...?
-                    }
-                }
-            } else {
-            	
-            	ParserResult pr = importResult.v;
-				Collection<BibtexEntry> entries = pr.getDatabase().getEntries();
-
-				anythingUseful = anythingUseful | (entries.size() > 0);
-
-				// set timestamp and owner
-				Util.setAutomaticFields(entries, Globals.prefs.getBoolean("overwriteOwner"),
-                        Globals.prefs.getBoolean("overwriteTimeStamp"),
-                        !openInNew && Globals.prefs.getBoolean("markImportedEntries")); // set timestamp and owner
-
-                for (BibtexEntry entry : entries){
-					database.insertEntry(entry);
-				}
-			}
-        }
-
-        if (!anythingUseful)
-            return null;
-
-        if ((imports.size() == 1) && (directParserResult != null)) {
-            return directParserResult;
-        } else {
-
-            ParserResult pr = new ParserResult(database, new MetaData(), new HashMap<String, BibtexEntryType>());
-            return pr;
-
-        }
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+
+import net.sf.jabref.*;
+import net.sf.jabref.external.DroppedFileHandler;
+import net.sf.jabref.gui.ImportInspectionDialog;
+import net.sf.jabref.gui.FileDialogs;
+import net.sf.jabref.labelPattern.LabelPatternUtil;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableInsertEntry;
+import net.sf.jabref.undo.UndoableRemoveEntry;
+import net.sf.jabref.util.Pair;
+
+/* 
+ * TODO: could separate the "menu item" functionality from the importing functionality
+ * 
+ */
+public class ImportMenuItem extends JMenuItem implements ActionListener {
+
+    JabRefFrame frame;
+    boolean openInNew;
+    MyWorker worker = null;
+    ImportFormat importer;
+    IOException importError = null;
+
+    public ImportMenuItem(JabRefFrame frame, boolean openInNew) {
+        this(frame, openInNew, null);
+    }
+
+    public ImportMenuItem(JabRefFrame frame, boolean openInNew, ImportFormat importer) {
+        super(importer != null ? importer.getFormatName()
+                : Globals.lang("Autodetect format"));
+        this.importer = importer;
+        this.frame = frame;
+        this.openInNew = openInNew;
+        addActionListener(this);
+    }
+
+
+    public void actionPerformed(ActionEvent e) {
+        worker = new MyWorker();
+        worker.init();
+        worker.getWorker().run();
+        worker.getCallBack().update();
+    }
+    
+    /**
+     * Automatically imports the files given as arguments
+     * @param filenames List of files to import
+     */
+    public void automatedImport(String filenames[]) {
+        // replace the work of the init step:
+        MyWorker worker = new MyWorker();
+        worker.fileOk = true;
+        worker.filenames = filenames;
+        
+        worker.getWorker().run();
+        worker.getCallBack().update();
+    }
+
+
+    class MyWorker extends AbstractWorker {
+        String[] filenames = null, formatName = null;
+        ParserResult bibtexResult = null; // Contains the merged import results
+        boolean fileOk = false;
+
+        public void init() {
+            importError = null;
+            filenames = FileDialogs.getMultipleFiles(frame,
+                    new File(Globals.prefs.get("workingDirectory")),
+                    (importer != null ? importer.getExtensions() : null), true);
+
+            if ((filenames != null) && (filenames.length > 0)) {
+                frame.block();
+                frame.output(Globals.lang("Starting import"));
+                fileOk = true;
+                
+                Globals.prefs.put("workingDirectory", filenames[0]);
+            }
+        }
+
+        public void run() {
+            if (!fileOk)
+                return;
+
+            // We import all files and collect their results:
+			List<Pair<String, ParserResult>> imports = new ArrayList<Pair<String, ParserResult>>();
+			for (String filename : filenames) {
+				try {
+					if (importer != null) {
+						// Specific importer:
+						ParserResult pr = new ParserResult(
+							Globals.importFormatReader.importFromFile(importer,
+								filename, frame));
+
+						imports.add(new Pair<String, ParserResult>(importer
+							.getFormatName(), pr));
+					} else {
+						// Unknown format:
+                        frame.output(Globals.lang("Importing in unknown format")+"...");
+                        // This import method never throws an IOException:
+                        imports.add(Globals.importFormatReader
+							.importUnknownFormat(filename));
+					}
+				} catch (IOException e) {
+					// This indicates that a specific importer was specified, and that
+                    // this importer has thrown an IOException. We store the exception,
+                    // so a relevant error message can be displayed.
+                    importError = e;
+                }
+			}
+
+
+
+            // Ok, done. Then try to gather in all we have found. Since we might
+			// have found
+            // one or more bibtex results, it's best to gather them in a
+			// BibtexDatabase.
+            bibtexResult = mergeImportResults(imports);
+            
+            
+            /* show parserwarnings, if any. */
+			for (Pair<String, ParserResult> p : imports) {
+                if (p != null) {
+                    ParserResult pr = p.v;
+                    if (pr.hasWarnings()) {
+                        if (Globals.prefs
+                                .getBoolean("displayKeyWarningDialogAtStartup")
+                                && pr.hasWarnings()) {
+                            String[] wrns = pr.warnings();
+                            StringBuffer wrn = new StringBuffer();
+                            for (int j = 0; j < wrns.length; j++)
+                                wrn.append(j + 1).append(". ").append(wrns[j])
+                                        .append("\n");
+                            if (wrn.length() > 0)
+                                wrn.deleteCharAt(wrn.length() - 1);
+                            JOptionPane.showMessageDialog(frame, wrn.toString(),
+                                    Globals.lang("Warnings"),
+                                    JOptionPane.WARNING_MESSAGE);
+                        }
+                    }
+                }
+			}
+        }
+
+        public void update() {
+            if (!fileOk)
+                return;
+
+            // TODO: undo is not handled properly here, except for the entries
+			// added by
+            //  the import inspection dialog.
+            if (bibtexResult != null) {
+                if (!openInNew) {
+                    final BasePanel panel = (BasePanel) frame.getTabbedPane().getSelectedComponent();
+                    BibtexDatabase toAddTo = panel.database();
+                    
+                    // Use the import inspection dialog if it is enabled in preferences, and
+                    // (there are more than one entry or the inspection dialog is also enabled
+                    // for single entries):
+                    if (Globals.prefs.getBoolean("useImportInspectionDialog") &&
+                            (Globals.prefs.getBoolean("useImportInspectionDialogForSingle")
+                                    || (bibtexResult.getDatabase().getEntryCount() > 1))) {
+                        ImportInspectionDialog diag = new ImportInspectionDialog(frame, panel,
+                                BibtexFields.DEFAULT_INSPECTION_FIELDS,
+                                Globals.lang("Import"), openInNew);
+                        diag.addEntries(bibtexResult.getDatabase().getEntries());
+                        diag.entryListComplete();
+                        Util.placeDialog(diag, frame);
+                        diag.setVisible(true);
+                        diag.toFront();
+                    } else {
+                        boolean generateKeys = Globals.prefs.getBoolean("generateKeysAfterInspection");
+                        NamedCompound ce = new NamedCompound(Globals.lang("Import entries"));
+
+                        // Check if we should unmark entries before adding the new ones:
+                        if (Globals.prefs.getBoolean("unmarkAllEntriesBeforeImporting"))
+                            for (BibtexEntry entry : toAddTo.getEntries()) {
+                                Util.unmarkEntry(entry, true, toAddTo, ce);
+                            }
+
+
+                        for (BibtexEntry entry : bibtexResult.getDatabase().getEntries()){
+                            try {
+                                // Check if the entry is a duplicate of an existing one:
+                                boolean keepEntry = true;
+                                BibtexEntry duplicate = DuplicateCheck.containsDuplicate(toAddTo, entry);
+                                if (duplicate != null) {
+                                    int answer = DuplicateResolverDialog.resolveDuplicateInImport
+                                            (frame, duplicate, entry);
+                                    // The upper entry is the
+                                    if (answer == DuplicateResolverDialog.DO_NOT_IMPORT)
+                                        keepEntry = false;
+                                    if (answer == DuplicateResolverDialog.IMPORT_AND_DELETE_OLD) {
+                                        // Remove the old one and import the new one.
+                                        toAddTo.removeEntry(duplicate.getId());
+                                        ce.addEdit(new UndoableRemoveEntry(toAddTo, duplicate, panel));
+                                    }
+                                }
+                                // Add the entry, if we are supposed to:
+                                if (keepEntry) {
+                                    toAddTo.insertEntry(entry);
+                                    // Generate key, if we are supposed to:
+                                    if (generateKeys) {
+                                        LabelPatternUtil.makeLabel(bibtexResult.getMetaData(), toAddTo, entry);
+                                        //System.out.println("gen:"+entry.getCiteKey());
+                                    }
+                                    // Let the autocompleters, if any, harvest words from the entry: 
+                                    Util.updateCompletersForEntry(panel.getAutoCompleters(), entry);
+
+                                    ce.addEdit(new UndoableInsertEntry(toAddTo, entry, panel));
+                                }
+                            } catch (KeyCollisionException e) {
+                                e.printStackTrace();
+                            }
+                        }
+                        ce.end();
+                        if (ce.hasEdits()) {
+                            panel.undoManager.addEdit(ce);
+                            panel.markBaseChanged();
+                        }
+
+                    }                    
+
+                }
+
+                else {
+                    frame.addTab(bibtexResult.getDatabase(), bibtexResult.getFile(),
+                            bibtexResult.getMetaData(), Globals.prefs.get("defaultEncoding"), true);
+                    frame.output(Globals.lang("Imported entries") + ": " + bibtexResult.getDatabase().getEntryCount());
+                }
+
+
+            } else {
+                if (importer == null)
+                    frame.output(Globals.lang("Could not find a suitable import format."));
+                else {
+                    // Import in a specific format was specified. Check if we have stored error information:
+                    if (importError != null) {
+                        JOptionPane.showMessageDialog(frame, importError.getMessage(), Globals.lang("Import failed"),
+                              JOptionPane.ERROR_MESSAGE);
+                    }
+                    else {
+                        JOptionPane.showMessageDialog(frame, Globals.lang("No entries found. Please make sure you are "
+                                      +"using the correct import filter."), Globals.lang("Import failed"),
+                              JOptionPane.ERROR_MESSAGE);
+                    }
+                }
+            }
+            frame.unblock();
+        }
+    }
+
+    public ParserResult mergeImportResults(List<Pair<String, ParserResult>> imports) {
+        BibtexDatabase database = new BibtexDatabase();
+        ParserResult directParserResult = null;
+        boolean anythingUseful = false;
+
+        for (Pair<String, ParserResult> importResult : imports){
+            if (importResult == null)
+                continue;
+            if (importResult.p.equals(ImportFormatReader.BIBTEX_FORMAT)){
+        	    // Bibtex result. We must merge it into our main base.
+                ParserResult pr = importResult.v;
+
+                anythingUseful = anythingUseful
+                        || ((pr.getDatabase().getEntryCount() > 0) || (pr.getDatabase().getStringCount() > 0));
+                
+                // Record the parserResult, as long as this is the first bibtex result:
+                if (directParserResult == null) {
+                    directParserResult = pr;
+                }
+
+                // Merge entries:
+                for (BibtexEntry entry : pr.getDatabase().getEntries()) {
+                    database.insertEntry(entry);
+                }
+                
+                // Merge strings:
+                for (BibtexString bs : pr.getDatabase().getStringValues()){
+                    try {
+                        database.addString((BibtexString)bs.clone());
+                    } catch (KeyCollisionException e) {
+                        // TODO: This means a duplicate string name exists, so it's not
+                        // a very exceptional situation. We should maybe give a warning...?
+                    }
+                }
+            } else {
+            	
+            	ParserResult pr = importResult.v;
+				Collection<BibtexEntry> entries = pr.getDatabase().getEntries();
+
+				anythingUseful = anythingUseful | (entries.size() > 0);
+
+				// set timestamp and owner
+				Util.setAutomaticFields(entries, Globals.prefs.getBoolean("overwriteOwner"),
+                        Globals.prefs.getBoolean("overwriteTimeStamp"),
+                        !openInNew && Globals.prefs.getBoolean("markImportedEntries")); // set timestamp and owner
+
+                for (BibtexEntry entry : entries){
+					database.insertEntry(entry);
+				}
+			}
+        }
+
+        if (!anythingUseful)
+            return null;
+
+        if ((imports.size() == 1) && (directParserResult != null)) {
+            return directParserResult;
+        } else {
+
+            ParserResult pr = new ParserResult(database, new MetaData(), new HashMap<String, BibtexEntryType>());
+            return pr;
+
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/InspecImporter.java b/src/java/net/sf/jabref/imports/InspecImporter.java
index 99fe7b8..1ee7b29 100644
--- a/src/java/net/sf/jabref/imports/InspecImporter.java
+++ b/src/java/net/sf/jabref/imports/InspecImporter.java
@@ -1,153 +1,153 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.InputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.HashMap;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.OutputPrinter;
-
-import java.util.regex.Pattern;
-import net.sf.jabref.BibtexFields;
-
-/**
- * INSPEC format importer.
- */
-public class InspecImporter extends ImportFormat {
-
-    /**
-     * Return the name of this import format.
-     */
-    public String getFormatName() {
-        return "INSPEC";
-    }
-
-  /*
-   *  (non-Javadoc)
-   * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-   */
-  public String getCLIId() {
-    return "inspec";
-  }
-
-  /**
-   * Check whether the source is in the correct format for this importer.
-   */
-  public boolean isRecognizedFormat(InputStream stream)
-    throws IOException {
-    // Our strategy is to look for the "PY <year>" line.
-    BufferedReader in =
-      new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-    //Pattern pat1 = Pattern.compile("PY:  \\d{4}");
-    Pattern pat1 = Pattern.compile("Record.*INSPEC.*");
-
-    //was PY \\\\d{4}? before
-    String str;
-
-    while ((str = in.readLine()) != null) {
-      //Inspec and IEEE seem to have these strange " - " between key and value
-      //str = str.replace(" - ", "");
-      //System.out.println(str);
-
-      if (pat1.matcher(str).find())
-        return true;
-    }
-
-    return false;
-  }
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     */
-    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
-        StringBuffer sb = new StringBuffer();
-        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-        String str;
-        while ((str = in.readLine()) != null){
-            if (str.length() < 2) continue;
-            if (str.indexOf("Record") == 0) sb.append("__::__").append(str);
-            else
-            sb.append("__NEWFIELD__").append(str);
-        }
-        in.close();
-        String[] entries = sb.toString().split("__::__");
-        String Type = "";
-        HashMap<String, String> h = new HashMap<String, String>();
-        for (int i = 0; i < entries.length; i++){
-            if (entries[i].indexOf("Record") != 0) continue;
-            h.clear();
-
-            String[] fields = entries[i].split("__NEWFIELD__");
-            for (int j = 0; j < fields.length; j++){
-                //System.out.println(fields[j]);
-                String s = fields[j];
-                String f3 = s.substring(0, 2);
-                String frest = s.substring(5);
-                if (f3.equals("TI")) h.put("title", frest);
-                else if (f3.equals("PY")) h.put("year", frest);
-                else if (f3.equals("AU")) h.put("author",
-                                                AuthorList.fixAuthor_lastNameFirst(frest.replaceAll(",-", ", ").replaceAll(
-                                                        ";", " and ")));
-                else if (f3.equals("AB")) h.put("abstract", frest);
-                else if (f3.equals("ID")) h.put("keywords", frest);
-                else if (f3.equals("SO")){
-                    int m = frest.indexOf(".");
-                    if (m >= 0){
-                        String jr = frest.substring(0, m);
-                        h.put("journal", jr.replaceAll("-", " "));
-                        frest = frest.substring(m);
-                        m = frest.indexOf(";");
-                        if (m >= 5){
-                            String yr = frest.substring(m - 5, m);
-                            h.put("year", yr);
-                            frest = frest.substring(m);
-                            m = frest.indexOf(":");
-                            if (m >= 0){
-                                String pg = frest.substring(m + 1).trim();
-                                h.put("pages", pg);
-                                h.put("volume", frest.substring(1, m));
-                            }
-                        }
-                    }
-
-                }else if (f3.equals("RT")){
-                    frest = frest.trim();
-                    if (frest.equals("Journal-Paper")) Type = "article";
-                    else if (frest.equals("Conference-Paper")
-                             || frest.equals("Conference-Paper; Journal-Paper")) Type = "inproceedings";
-                    else Type = frest.replaceAll(" ", "");
-                }
-            }
-            BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
-                                            .getEntryType(Type)); // id assumes an existing database so don't
-            // create one here
-            b.setField(h);
-
-            bibitems.add(b);
-
-        }
-
-        return bibitems;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.InputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.HashMap;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.OutputPrinter;
+
+import java.util.regex.Pattern;
+import net.sf.jabref.BibtexFields;
+
+/**
+ * INSPEC format importer.
+ */
+public class InspecImporter extends ImportFormat {
+
+    /**
+     * Return the name of this import format.
+     */
+    public String getFormatName() {
+        return "INSPEC";
+    }
+
+  /*
+   *  (non-Javadoc)
+   * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+   */
+  public String getCLIId() {
+    return "inspec";
+  }
+
+  /**
+   * Check whether the source is in the correct format for this importer.
+   */
+  public boolean isRecognizedFormat(InputStream stream)
+    throws IOException {
+    // Our strategy is to look for the "PY <year>" line.
+    BufferedReader in =
+      new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+    //Pattern pat1 = Pattern.compile("PY:  \\d{4}");
+    Pattern pat1 = Pattern.compile("Record.*INSPEC.*");
+
+    //was PY \\\\d{4}? before
+    String str;
+
+    while ((str = in.readLine()) != null) {
+      //Inspec and IEEE seem to have these strange " - " between key and value
+      //str = str.replace(" - ", "");
+      //System.out.println(str);
+
+      if (pat1.matcher(str).find())
+        return true;
+    }
+
+    return false;
+  }
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     */
+    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
+        StringBuffer sb = new StringBuffer();
+        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+        String str;
+        while ((str = in.readLine()) != null){
+            if (str.length() < 2) continue;
+            if (str.indexOf("Record") == 0) sb.append("__::__").append(str);
+            else
+            sb.append("__NEWFIELD__").append(str);
+        }
+        in.close();
+        String[] entries = sb.toString().split("__::__");
+        String Type = "";
+        HashMap<String, String> h = new HashMap<String, String>();
+        for (int i = 0; i < entries.length; i++){
+            if (entries[i].indexOf("Record") != 0) continue;
+            h.clear();
+
+            String[] fields = entries[i].split("__NEWFIELD__");
+            for (int j = 0; j < fields.length; j++){
+                //System.out.println(fields[j]);
+                String s = fields[j];
+                String f3 = s.substring(0, 2);
+                String frest = s.substring(5);
+                if (f3.equals("TI")) h.put("title", frest);
+                else if (f3.equals("PY")) h.put("year", frest);
+                else if (f3.equals("AU")) h.put("author",
+                                                AuthorList.fixAuthor_lastNameFirst(frest.replaceAll(",-", ", ").replaceAll(
+                                                        ";", " and ")));
+                else if (f3.equals("AB")) h.put("abstract", frest);
+                else if (f3.equals("ID")) h.put("keywords", frest);
+                else if (f3.equals("SO")){
+                    int m = frest.indexOf(".");
+                    if (m >= 0){
+                        String jr = frest.substring(0, m);
+                        h.put("journal", jr.replaceAll("-", " "));
+                        frest = frest.substring(m);
+                        m = frest.indexOf(";");
+                        if (m >= 5){
+                            String yr = frest.substring(m - 5, m);
+                            h.put("year", yr);
+                            frest = frest.substring(m);
+                            m = frest.indexOf(":");
+                            if (m >= 0){
+                                String pg = frest.substring(m + 1).trim();
+                                h.put("pages", pg);
+                                h.put("volume", frest.substring(1, m));
+                            }
+                        }
+                    }
+
+                }else if (f3.equals("RT")){
+                    frest = frest.trim();
+                    if (frest.equals("Journal-Paper")) Type = "article";
+                    else if (frest.equals("Conference-Paper")
+                             || frest.equals("Conference-Paper; Journal-Paper")) Type = "inproceedings";
+                    else Type = frest.replaceAll(" ", "");
+                }
+            }
+            BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
+                                            .getEntryType(Type)); // id assumes an existing database so don't
+            // create one here
+            b.setField(h);
+
+            bibitems.add(b);
+
+        }
+
+        return bibitems;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/IsiImporter.java b/src/java/net/sf/jabref/imports/IsiImporter.java
index c5f3f6c..36db0b5 100644
--- a/src/java/net/sf/jabref/imports/IsiImporter.java
+++ b/src/java/net/sf/jabref/imports/IsiImporter.java
@@ -1,441 +1,441 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.Util;
-import net.sf.jabref.util.CaseChanger;
-
-/**
- * Importer for the ISI Web of Science, INSPEC and Medline format.
- * 
- * Documentation about ISI WOS format:
- * 
- * <ul>
- * <li>http://wos.isitrial.com/help/helpprn.html</li>
- * </ul>
- * 
- * <ul>
- * <li>Check compatibility with other ISI2Bib tools like:
- * http://www-lab.imr.tohoku.ac.jp/~t-nissie/computer/software/isi/ or
- * http://www.tug.org/tex-archive/biblio/bibtex/utils/isi2bibtex/isi2bibtex or
- * http://web.mit.edu/emilio/www/utils.html</li>
- * <li>Deal with capitalization correctly</li>
- * </ul>
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class IsiImporter extends ImportFormat {
-	/**
-	 * Return the name of this import format.
-	 */
-	public String getFormatName() {
-		return "ISI";
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-	 */
-	public String getCLIId() {
-		return "isi";
-	}
-
-    // 2006.09.05: Modified pattern to avoid false positives for other files due to an
-    // extra | at the end:
-    static final Pattern isiPattern = Pattern.compile("FN ISI Export Format|VR 1.|PY \\d{4}");
-
-	/**
-	 * Check whether the source is in the correct format for this importer.
-	 */
-	public boolean isRecognizedFormat(InputStream stream) throws IOException {
-
-		BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-
-		String str;
-        int i=0;
-        while (((str = in.readLine()) != null) && (i < 50)) {
-
-			/**
-			 * The following line gives false positives for RIS files, so it
-			 * should not be uncommented. The hypen is a characteristic of the
-			 * RIS format.
-			 * 
-			 * str = str.replace(" - ", "")
-			 */
-			if (isiPattern.matcher(str).find())
-				return true;
-
-            i++;
-        }
-
-		return false;
-	}
-
-	static Pattern subsupPattern = Pattern.compile("/(sub|sup)\\s+(.*?)\\s*/");
-
-	static public void processSubSup(HashMap<String, String> map) {
-
-		String[] subsup = { "title", "abstract", "review", "notes" };
-
-		for (int i = 0; i < subsup.length; i++) {
-			if (map.containsKey(subsup[i])) {
-
-				Matcher m = subsupPattern.matcher(map.get(subsup[i]));
-				StringBuffer sb = new StringBuffer();
-
-				while (m.find()) {
-
-					String group2 = m.group(2);
-					group2 = group2.replaceAll("\\$", "\\\\\\\\\\\\\\$"); // Escaping
-					// insanity!
-					// :-)
-					if (group2.length() > 1) {
-						group2 = "{" + group2 + "}";
-					}
-					if (m.group(1).equals("sub")) {
-						m.appendReplacement(sb, "\\$_" + group2 + "\\$");
-					} else {
-						m.appendReplacement(sb, "\\$^" + group2 + "\\$");
-					}
-				}
-				m.appendTail(sb);
-				map.put(subsup[i], sb.toString());
-			}
-		}
-	}
-
-	static public void processCapitalization(HashMap<String, String> map) {
-
-		String[] subsup = { "title", "journal", "publisher" };
-
-		for (int i = 0; i < subsup.length; i++) {
-
-			if (map.containsKey(subsup[i])) {
-
-				String s = map.get(subsup[i]);
-                if (s.toUpperCase().equals(s)) {
-                    s = CaseChanger.changeCase(s, CaseChanger.UPPER_EACH_FIRST, true);
-					map.put(subsup[i], s);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Parse the entries in the source, and return a List of BibtexEntry
-	 * objects.
-	 */
-	public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-		if (stream == null) {
-			throw new IOException("No stream given.");
-		}
-
-		ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
-		StringBuffer sb = new StringBuffer();
-
-		BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-
-		// Pattern fieldPattern = Pattern.compile("^AU |^TI |^SO |^DT |^C1 |^AB
-		// |^ID |^BP |^PY |^SE |^PY |^VL |^IS ");
-		String str;
-
-		while ((str = in.readLine()) != null) {
-			if (str.length() < 3)
-				continue;
-
-			// begining of a new item
-			if (str.substring(0, 3).equals("PT "))
-				sb.append("::").append(str);
-			else {
-				String beg = str.substring(0, 3).trim();
-
-				// I could have used the fieldPattern regular expression instead
-				// however this seems to be
-				// quick and dirty and it works!
-				if (beg.length() == 2) {
-					sb.append(" ## "); // mark the begining of each field
-					sb.append(str);
-				} else {
-					sb.append("EOLEOL"); // mark the end of each line
-					sb.append(str.trim()); // remove the initial spaces
-				}
-			}
-		}
-
-		String[] entries = sb.toString().split("::");
-
-		HashMap<String, String> hm = new HashMap<String, String>();
-
-		// skip the first entry as it is either empty or has document header
-		for (int i = 0; i < entries.length; i++) {
-			String[] fields = entries[i].split(" ## ");
-
-			if (fields.length == 0)
-				fields = entries[i].split("\n");
-
-			String Type = "";
-			String PT = "";
-			String pages = "";
-			hm.clear();
-
-			nextField: for (int j = 0; j < fields.length; j++) {
-				// empty field don't do anything
-				if (fields[j].length() <= 2)
-					continue;
-
-				String beg = fields[j].substring(0, 2);
-				String value = fields[j].substring(3);
-				if (value.startsWith(" - ")) {
-					value = value.substring(3);
-				}
-				value = value.trim();
-
-				if (beg.equals("PT")) {
-					if (value.startsWith("J")) {
-						PT = "article";
-					} else {
-						PT = value;
-					}
-					Type = "article"; // make all of them PT?
-				} else if (beg.equals("TY")) {
-					if ("JOUR".equals(value))
-						Type = "article";
-					else if ("CONF".equals(value))
-						Type = "inproceedings";
-				} else if (beg.equals("JO"))
-					hm.put("booktitle", value);
-				else if (beg.equals("AU")) {
-					String author = isiAuthorsConvert(value.replaceAll("EOLEOL", " and "));
-
-					// if there is already someone there then append with "and"
-					if (hm.get("author") != null)
-						author = hm.get("author") + " and " + author;
-
-					hm.put("author", author);
-				} else if (beg.equals("TI"))
-					hm.put("title", value.replaceAll("EOLEOL", " "));
-				else if (beg.equals("SO") || beg.equals("JA"))
-					hm.put("journal", value.replaceAll("EOLEOL", " "));
-				else if (beg.equals("ID") || beg.equals("KW")) {
-				
-					value = value.replaceAll("EOLEOL", " ");
-					String existingKeywords = hm.get("keywords");
-					if (existingKeywords != null && existingKeywords.indexOf(value) == -1) {
-						existingKeywords += ", " + value;
-					} else {
-						existingKeywords = value;
-					}
-					hm.put("keywords", existingKeywords);
-
-				} else if (beg.equals("AB"))
-					hm.put("abstract", value.replaceAll("EOLEOL", " "));
-				else if (beg.equals("BP") || beg.equals("BR") || beg.equals("SP"))
-					pages = value;
-				else if (beg.equals("EP")) {
-					int detpos = value.indexOf(' ');
-
-					// tweak for IEEE Explore
-					if (detpos != -1 && value.substring(0, detpos).trim().length() > 0)
-						value = value.substring(0, detpos);
-
-					pages = pages + "--" + value;
-				} else if (beg.equals("PS")) {
-					pages = parsePages(value);
-				} else if (beg.equals("AR"))
-					pages = value;
-				else if (beg.equals("IS"))
-					hm.put("number", value);
-				else if (beg.equals("PY"))
-					hm.put("year", value);
-				else if (beg.equals("VL"))
-					hm.put("volume", value);
-				else if (beg.equals("PU"))
-					hm.put("publisher", value);
-                else if (beg.equals("DI"))
-                    hm.put("doi", value);
-				else if (beg.equals("PD")) {
-
-					String month = parseMonth(value);
-					if (month != null) {
-						hm.put("month", month);
-						continue nextField;
-					}
-
-				} else if (beg.equals("DT")) {
-					Type = value;
-					if (Type.equals("Review")) {
-						Type = "article"; // set "Review" in Note/Comment?
-					} else if (Type.startsWith("Article") || Type.startsWith("Journal")
-						|| PT.equals("article")) {
-						Type = "article";
-						continue;
-					} else {
-						Type = "misc";
-					}
-				} else if (beg.equals("CR")) {
-					hm.put("CitedReferences", value.replaceAll("EOLEOL", " ; ").trim());
-				} else {
-					// Preserve all other entries except
-					if (beg.equals("ER") || beg.equals("EF") || beg.equals("VR")
-						|| beg.equals("FN"))
-						continue nextField;
-					hm.put(beg, value);
-				}
-			}
-
-			if (!"".equals(pages))
-				hm.put("pages", pages);
-
-			// Skip empty entries
-			if (hm.size() == 0)
-				continue;
-
-			BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
-				.getEntryType(Type));
-			// id assumes an existing database so don't
-
-			// Remove empty fields:
-			ArrayList<Object> toRemove = new ArrayList<Object>();
-			for (Iterator<String> it = hm.keySet().iterator(); it.hasNext();) {
-				Object key = it.next();
-				String content = hm.get(key);
-				if ((content == null) || (content.trim().length() == 0))
-					toRemove.add(key);
-			}
-			for (Iterator<Object> iterator = toRemove.iterator(); iterator.hasNext();) {
-				hm.remove(iterator.next());
-
-			}
-
-			// Polish entries
-			processSubSup(hm);
-			processCapitalization(hm);
-
-			b.setField(hm);
-
-			bibitems.add(b);
-		}
-
-		return bibitems;
-	}
-
-	public static String parsePages(String value) {
-		int lastDash = value.lastIndexOf("-");
-		return value.substring(0, lastDash) + "--" + value.substring(lastDash + 1);
-	}
-
-	public static String parseMonth(String value) {
-
-		String[] parts = value.split("\\s|\\-");
-		for (int ii = 0; ii < parts.length; ii++) {
-			if (Globals.MONTH_STRINGS.containsKey(parts[ii].toLowerCase())) {
-				return "#" + parts[ii].toLowerCase() + "#";
-			}
-		}
-
-		// Try two digit month
-		for (int ii = 0; ii < parts.length; ii++) {
-			int number;
-			try {
-				number = Integer.parseInt(parts[ii]);
-				if (number >= 1 && number <= 12) {
-					return "#" + Globals.MONTHS[number - 1] + "#";
-				}
-			} catch (NumberFormatException e) {
-
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Will expand ISI first names.
-	 * 
-	 * Fixed bug from:
-	 * http://sourceforge.net/tracker/index.php?func=detail&aid=1542552&group_id=92314&atid=600306
-	 * 
-	 */
-	public static String isiAuthorConvert(String author) {
-
-		String[] s = author.split(",");
-		if (s.length != 2)
-			return author;
-
-		StringBuffer sb = new StringBuffer();
-
-		String last = s[0].trim();
-		sb.append(last).append(", ");
-
-		String first = s[1].trim();
-
-		String[] firstParts = first.split("\\s+");
-
-		for (int i = 0; i < firstParts.length; i++) {
-
-			first = firstParts[i];
-
-			// Do we have only uppercase chars?
-			if (first.toUpperCase().equals(first)) {
-				first = first.replaceAll("\\.", "");
-				for (int j = 0; j < first.length(); j++) {
-					sb.append(first.charAt(j)).append(".");
-
-					if (j < first.length() - 1)
-						sb.append(" ");
-				}
-			} else {
-				sb.append(first);
-			}
-			if (i < firstParts.length - 1) {
-				sb.append(" ");
-			}
-		}
-		return sb.toString();
-
-	}
-
-	public static String[] isiAuthorsConvert(String[] authors) {
-
-		String[] result = new String[authors.length];
-		for (int i = 0; i < result.length; i++) {
-			result[i] = isiAuthorConvert(authors[i]);
-		}
-		return result;
-	}
-
-	public static String isiAuthorsConvert(String authors) {
-		String[] s = isiAuthorsConvert(authors.split(" and |;"));
-		return Util.join(s, " and ", 0, s.length);
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.Util;
+import net.sf.jabref.util.CaseChanger;
+
+/**
+ * Importer for the ISI Web of Science, INSPEC and Medline format.
+ * 
+ * Documentation about ISI WOS format:
+ * 
+ * <ul>
+ * <li>http://wos.isitrial.com/help/helpprn.html</li>
+ * </ul>
+ * 
+ * <ul>
+ * <li>Check compatibility with other ISI2Bib tools like:
+ * http://www-lab.imr.tohoku.ac.jp/~t-nissie/computer/software/isi/ or
+ * http://www.tug.org/tex-archive/biblio/bibtex/utils/isi2bibtex/isi2bibtex or
+ * http://web.mit.edu/emilio/www/utils.html</li>
+ * <li>Deal with capitalization correctly</li>
+ * </ul>
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class IsiImporter extends ImportFormat {
+	/**
+	 * Return the name of this import format.
+	 */
+	public String getFormatName() {
+		return "ISI";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+	 */
+	public String getCLIId() {
+		return "isi";
+	}
+
+    // 2006.09.05: Modified pattern to avoid false positives for other files due to an
+    // extra | at the end:
+    static final Pattern isiPattern = Pattern.compile("FN ISI Export Format|VR 1.|PY \\d{4}");
+
+	/**
+	 * Check whether the source is in the correct format for this importer.
+	 */
+	public boolean isRecognizedFormat(InputStream stream) throws IOException {
+
+		BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+
+		String str;
+        int i=0;
+        while (((str = in.readLine()) != null) && (i < 50)) {
+
+			/**
+			 * The following line gives false positives for RIS files, so it
+			 * should not be uncommented. The hypen is a characteristic of the
+			 * RIS format.
+			 * 
+			 * str = str.replace(" - ", "")
+			 */
+			if (isiPattern.matcher(str).find())
+				return true;
+
+            i++;
+        }
+
+		return false;
+	}
+
+	static Pattern subsupPattern = Pattern.compile("/(sub|sup)\\s+(.*?)\\s*/");
+
+	static public void processSubSup(HashMap<String, String> map) {
+
+		String[] subsup = { "title", "abstract", "review", "notes" };
+
+		for (int i = 0; i < subsup.length; i++) {
+			if (map.containsKey(subsup[i])) {
+
+				Matcher m = subsupPattern.matcher(map.get(subsup[i]));
+				StringBuffer sb = new StringBuffer();
+
+				while (m.find()) {
+
+					String group2 = m.group(2);
+					group2 = group2.replaceAll("\\$", "\\\\\\\\\\\\\\$"); // Escaping
+					// insanity!
+					// :-)
+					if (group2.length() > 1) {
+						group2 = "{" + group2 + "}";
+					}
+					if (m.group(1).equals("sub")) {
+						m.appendReplacement(sb, "\\$_" + group2 + "\\$");
+					} else {
+						m.appendReplacement(sb, "\\$^" + group2 + "\\$");
+					}
+				}
+				m.appendTail(sb);
+				map.put(subsup[i], sb.toString());
+			}
+		}
+	}
+
+	static public void processCapitalization(HashMap<String, String> map) {
+
+		String[] subsup = { "title", "journal", "publisher" };
+
+		for (int i = 0; i < subsup.length; i++) {
+
+			if (map.containsKey(subsup[i])) {
+
+				String s = map.get(subsup[i]);
+                if (s.toUpperCase().equals(s)) {
+                    s = CaseChanger.changeCase(s, CaseChanger.UPPER_EACH_FIRST, true);
+					map.put(subsup[i], s);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Parse the entries in the source, and return a List of BibtexEntry
+	 * objects.
+	 */
+	public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+		if (stream == null) {
+			throw new IOException("No stream given.");
+		}
+
+		ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
+		StringBuffer sb = new StringBuffer();
+
+		BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+
+		// Pattern fieldPattern = Pattern.compile("^AU |^TI |^SO |^DT |^C1 |^AB
+		// |^ID |^BP |^PY |^SE |^PY |^VL |^IS ");
+		String str;
+
+		while ((str = in.readLine()) != null) {
+			if (str.length() < 3)
+				continue;
+
+			// begining of a new item
+			if (str.substring(0, 3).equals("PT "))
+				sb.append("::").append(str);
+			else {
+				String beg = str.substring(0, 3).trim();
+
+				// I could have used the fieldPattern regular expression instead
+				// however this seems to be
+				// quick and dirty and it works!
+				if (beg.length() == 2) {
+					sb.append(" ## "); // mark the begining of each field
+					sb.append(str);
+				} else {
+					sb.append("EOLEOL"); // mark the end of each line
+					sb.append(str.trim()); // remove the initial spaces
+				}
+			}
+		}
+
+		String[] entries = sb.toString().split("::");
+
+		HashMap<String, String> hm = new HashMap<String, String>();
+
+		// skip the first entry as it is either empty or has document header
+		for (int i = 0; i < entries.length; i++) {
+			String[] fields = entries[i].split(" ## ");
+
+			if (fields.length == 0)
+				fields = entries[i].split("\n");
+
+			String Type = "";
+			String PT = "";
+			String pages = "";
+			hm.clear();
+
+			nextField: for (int j = 0; j < fields.length; j++) {
+				// empty field don't do anything
+				if (fields[j].length() <= 2)
+					continue;
+
+				String beg = fields[j].substring(0, 2);
+				String value = fields[j].substring(3);
+				if (value.startsWith(" - ")) {
+					value = value.substring(3);
+				}
+				value = value.trim();
+
+				if (beg.equals("PT")) {
+					if (value.startsWith("J")) {
+						PT = "article";
+					} else {
+						PT = value;
+					}
+					Type = "article"; // make all of them PT?
+				} else if (beg.equals("TY")) {
+					if ("JOUR".equals(value))
+						Type = "article";
+					else if ("CONF".equals(value))
+						Type = "inproceedings";
+				} else if (beg.equals("JO"))
+					hm.put("booktitle", value);
+				else if (beg.equals("AU")) {
+					String author = isiAuthorsConvert(value.replaceAll("EOLEOL", " and "));
+
+					// if there is already someone there then append with "and"
+					if (hm.get("author") != null)
+						author = hm.get("author") + " and " + author;
+
+					hm.put("author", author);
+				} else if (beg.equals("TI"))
+					hm.put("title", value.replaceAll("EOLEOL", " "));
+				else if (beg.equals("SO") || beg.equals("JA"))
+					hm.put("journal", value.replaceAll("EOLEOL", " "));
+				else if (beg.equals("ID") || beg.equals("KW")) {
+				
+					value = value.replaceAll("EOLEOL", " ");
+					String existingKeywords = hm.get("keywords");
+					if (existingKeywords != null && existingKeywords.indexOf(value) == -1) {
+						existingKeywords += ", " + value;
+					} else {
+						existingKeywords = value;
+					}
+					hm.put("keywords", existingKeywords);
+
+				} else if (beg.equals("AB"))
+					hm.put("abstract", value.replaceAll("EOLEOL", " "));
+				else if (beg.equals("BP") || beg.equals("BR") || beg.equals("SP"))
+					pages = value;
+				else if (beg.equals("EP")) {
+					int detpos = value.indexOf(' ');
+
+					// tweak for IEEE Explore
+					if (detpos != -1 && value.substring(0, detpos).trim().length() > 0)
+						value = value.substring(0, detpos);
+
+					pages = pages + "--" + value;
+				} else if (beg.equals("PS")) {
+					pages = parsePages(value);
+				} else if (beg.equals("AR"))
+					pages = value;
+				else if (beg.equals("IS"))
+					hm.put("number", value);
+				else if (beg.equals("PY"))
+					hm.put("year", value);
+				else if (beg.equals("VL"))
+					hm.put("volume", value);
+				else if (beg.equals("PU"))
+					hm.put("publisher", value);
+                else if (beg.equals("DI"))
+                    hm.put("doi", value);
+				else if (beg.equals("PD")) {
+
+					String month = parseMonth(value);
+					if (month != null) {
+						hm.put("month", month);
+						continue nextField;
+					}
+
+				} else if (beg.equals("DT")) {
+					Type = value;
+					if (Type.equals("Review")) {
+						Type = "article"; // set "Review" in Note/Comment?
+					} else if (Type.startsWith("Article") || Type.startsWith("Journal")
+						|| PT.equals("article")) {
+						Type = "article";
+						continue;
+					} else {
+						Type = "misc";
+					}
+				} else if (beg.equals("CR")) {
+					hm.put("CitedReferences", value.replaceAll("EOLEOL", " ; ").trim());
+				} else {
+					// Preserve all other entries except
+					if (beg.equals("ER") || beg.equals("EF") || beg.equals("VR")
+						|| beg.equals("FN"))
+						continue nextField;
+					hm.put(beg, value);
+				}
+			}
+
+			if (!"".equals(pages))
+				hm.put("pages", pages);
+
+			// Skip empty entries
+			if (hm.size() == 0)
+				continue;
+
+			BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
+				.getEntryType(Type));
+			// id assumes an existing database so don't
+
+			// Remove empty fields:
+			ArrayList<Object> toRemove = new ArrayList<Object>();
+			for (Iterator<String> it = hm.keySet().iterator(); it.hasNext();) {
+				Object key = it.next();
+				String content = hm.get(key);
+				if ((content == null) || (content.trim().length() == 0))
+					toRemove.add(key);
+			}
+			for (Iterator<Object> iterator = toRemove.iterator(); iterator.hasNext();) {
+				hm.remove(iterator.next());
+
+			}
+
+			// Polish entries
+			processSubSup(hm);
+			processCapitalization(hm);
+
+			b.setField(hm);
+
+			bibitems.add(b);
+		}
+
+		return bibitems;
+	}
+
+	public static String parsePages(String value) {
+		int lastDash = value.lastIndexOf("-");
+		return value.substring(0, lastDash) + "--" + value.substring(lastDash + 1);
+	}
+
+	public static String parseMonth(String value) {
+
+		String[] parts = value.split("\\s|\\-");
+		for (int ii = 0; ii < parts.length; ii++) {
+			if (Globals.MONTH_STRINGS.containsKey(parts[ii].toLowerCase())) {
+				return "#" + parts[ii].toLowerCase() + "#";
+			}
+		}
+
+		// Try two digit month
+		for (int ii = 0; ii < parts.length; ii++) {
+			int number;
+			try {
+				number = Integer.parseInt(parts[ii]);
+				if (number >= 1 && number <= 12) {
+					return "#" + Globals.MONTHS[number - 1] + "#";
+				}
+			} catch (NumberFormatException e) {
+
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Will expand ISI first names.
+	 * 
+	 * Fixed bug from:
+	 * http://sourceforge.net/tracker/index.php?func=detail&aid=1542552&group_id=92314&atid=600306
+	 * 
+	 */
+	public static String isiAuthorConvert(String author) {
+
+		String[] s = author.split(",");
+		if (s.length != 2)
+			return author;
+
+		StringBuffer sb = new StringBuffer();
+
+		String last = s[0].trim();
+		sb.append(last).append(", ");
+
+		String first = s[1].trim();
+
+		String[] firstParts = first.split("\\s+");
+
+		for (int i = 0; i < firstParts.length; i++) {
+
+			first = firstParts[i];
+
+			// Do we have only uppercase chars?
+			if (first.toUpperCase().equals(first)) {
+				first = first.replaceAll("\\.", "");
+				for (int j = 0; j < first.length(); j++) {
+					sb.append(first.charAt(j)).append(".");
+
+					if (j < first.length() - 1)
+						sb.append(" ");
+				}
+			} else {
+				sb.append(first);
+			}
+			if (i < firstParts.length - 1) {
+				sb.append(" ");
+			}
+		}
+		return sb.toString();
+
+	}
+
+	public static String[] isiAuthorsConvert(String[] authors) {
+
+		String[] result = new String[authors.length];
+		for (int i = 0; i < result.length; i++) {
+			result[i] = isiAuthorConvert(authors[i]);
+		}
+		return result;
+	}
+
+	public static String isiAuthorsConvert(String authors) {
+		String[] s = isiAuthorsConvert(authors.split(" and |;"));
+		return Util.join(s, " and ", 0, s.length);
+	}
+
+}
diff --git a/src/java/net/sf/jabref/imports/JstorImporter.java b/src/java/net/sf/jabref/imports/JstorImporter.java
index 7f769bb..4f5eb99 100644
--- a/src/java/net/sf/jabref/imports/JstorImporter.java
+++ b/src/java/net/sf/jabref/imports/JstorImporter.java
@@ -1,106 +1,106 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.InputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.Util;
-import net.sf.jabref.AuthorList;
-
-/**
- * Imports a Biblioscape Tag File. The format is described on
- * http://www.biblioscape.com/manual_bsp/Biblioscape_Tag_File.htm Several
- * Biblioscape field types are ignored. Others are only included in the BibTeX
- * field "comment".
- */
-public class JstorImporter extends ImportFormat {
-
-    /**
-     * Return the name of this import format.
-     */
-    public String getFormatName() {
-    return "JStor (tab delimited)";
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-     */
-    public String getCLIId() {
-      return "jstor";
-    }
-    
-    /**
-     * Check whether the source is in the correct format for this importer.
-     */
-    public boolean isRecognizedFormat(InputStream in) throws IOException {
-    return true;
-    }
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     */
-    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-    ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
-    String s = "";
-    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-    while ((s != null) && !s.startsWith("Item Type"))
-        s = in.readLine();
-
-    mainloop: while ((s = in.readLine()) != null){
-        if (s.equals("")) continue;
-        if (s.startsWith("-----------------------------")) break mainloop;
-        String[] fields = s.split("\t");
-        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
-        try{
-        if (fields[0].equals("FLA")) be.setType(BibtexEntryType
-                            .getType("article"));
-        ImportFormatReader.setIfNecessary(be, "title", fields[2]);
-        ImportFormatReader.setIfNecessary(be, "author", AuthorList.fixAuthor_lastNameFirst(fields[4].replaceAll("; ", " and ")));
-        ImportFormatReader.setIfNecessary(be, "journal", fields[7]);
-        ImportFormatReader.setIfNecessary(be, "volume", fields[9]);
-        ImportFormatReader.setIfNecessary(be, "number", fields[10]);
-        String[] datefield = fields[12].split(" ");
-        ImportFormatReader.setIfNecessary(be, "year", datefield[datefield.length - 1]);
-        if (datefield.length > 1) {
-            if (datefield[0].endsWith(","))
-                datefield[0] = datefield[0].substring(0, datefield[0].length()-1);
-            ImportFormatReader.setIfNecessary(be, "month", datefield[0]);
-        }
-        //for (int i=0; i<fields.length; i++)
-        //  Util.pr(i+": "+fields[i]);
-        ImportFormatReader.setIfNecessary(be, "pages", fields[13].replaceAll("-", "--"));
-        ImportFormatReader.setIfNecessary(be, "url", fields[14]);
-        ImportFormatReader.setIfNecessary(be, "issn", fields[15]);
-        ImportFormatReader.setIfNecessary(be, "abstract", fields[16]);
-        ImportFormatReader.setIfNecessary(be, "keywords", fields[17]);
-        ImportFormatReader.setIfNecessary(be, "copyright", fields[21]);
-        }catch (ArrayIndexOutOfBoundsException ex){
-        }
-        bibitems.add(be);
-    }
-
-    return bibitems;
-
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.InputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.Util;
+import net.sf.jabref.AuthorList;
+
+/**
+ * Imports a Biblioscape Tag File. The format is described on
+ * http://www.biblioscape.com/manual_bsp/Biblioscape_Tag_File.htm Several
+ * Biblioscape field types are ignored. Others are only included in the BibTeX
+ * field "comment".
+ */
+public class JstorImporter extends ImportFormat {
+
+    /**
+     * Return the name of this import format.
+     */
+    public String getFormatName() {
+    return "JStor (tab delimited)";
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+     */
+    public String getCLIId() {
+      return "jstor";
+    }
+    
+    /**
+     * Check whether the source is in the correct format for this importer.
+     */
+    public boolean isRecognizedFormat(InputStream in) throws IOException {
+    return true;
+    }
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     */
+    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+    ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
+    String s = "";
+    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+    while ((s != null) && !s.startsWith("Item Type"))
+        s = in.readLine();
+
+    mainloop: while ((s = in.readLine()) != null){
+        if (s.equals("")) continue;
+        if (s.startsWith("-----------------------------")) break mainloop;
+        String[] fields = s.split("\t");
+        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
+        try{
+        if (fields[0].equals("FLA")) be.setType(BibtexEntryType
+                            .getType("article"));
+        ImportFormatReader.setIfNecessary(be, "title", fields[2]);
+        ImportFormatReader.setIfNecessary(be, "author", AuthorList.fixAuthor_lastNameFirst(fields[4].replaceAll("; ", " and ")));
+        ImportFormatReader.setIfNecessary(be, "journal", fields[7]);
+        ImportFormatReader.setIfNecessary(be, "volume", fields[9]);
+        ImportFormatReader.setIfNecessary(be, "number", fields[10]);
+        String[] datefield = fields[12].split(" ");
+        ImportFormatReader.setIfNecessary(be, "year", datefield[datefield.length - 1]);
+        if (datefield.length > 1) {
+            if (datefield[0].endsWith(","))
+                datefield[0] = datefield[0].substring(0, datefield[0].length()-1);
+            ImportFormatReader.setIfNecessary(be, "month", datefield[0]);
+        }
+        //for (int i=0; i<fields.length; i++)
+        //  Util.pr(i+": "+fields[i]);
+        ImportFormatReader.setIfNecessary(be, "pages", fields[13].replaceAll("-", "--"));
+        ImportFormatReader.setIfNecessary(be, "url", fields[14]);
+        ImportFormatReader.setIfNecessary(be, "issn", fields[15]);
+        ImportFormatReader.setIfNecessary(be, "abstract", fields[16]);
+        ImportFormatReader.setIfNecessary(be, "keywords", fields[17]);
+        ImportFormatReader.setIfNecessary(be, "copyright", fields[21]);
+        }catch (ArrayIndexOutOfBoundsException ex){
+        }
+        bibitems.add(be);
+    }
+
+    return bibitems;
+
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/MedlineFetcher.java b/src/java/net/sf/jabref/imports/MedlineFetcher.java
index 64d7bf6..a201d48 100644
--- a/src/java/net/sf/jabref/imports/MedlineFetcher.java
+++ b/src/java/net/sf/jabref/imports/MedlineFetcher.java
@@ -1,242 +1,242 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-
-/**
- * Fetch or search from Pubmed http://www.ncbi.nlm.nih.gov/sites/entrez/
- * 
- */
-public class MedlineFetcher implements EntryFetcher {
-
-    protected class SearchResult {
-
-        public int count = 0;
-
-        public int retmax = 0;
-
-        public int retstart = 0;
-
-        public String ids = "";
-
-        public void addID(String id) {
-            if (ids.equals(""))
-                ids = id;
-            else
-                ids += "," + id;
-        }
-    }
-
-    /**
-     * How many entries to query in one request
-     */
-    public static final int PACING = 20;
-
-    boolean shouldContinue;
-
-    OutputPrinter frame;
-
-    ImportInspector dialog;
-
-    public String toSearchTerm(String in) {
-        Pattern part1 = Pattern.compile(", ");
-        Pattern part2 = Pattern.compile(",");
-        Pattern part3 = Pattern.compile(" ");
-        Matcher matcher;
-        matcher = part1.matcher(in);
-        in = matcher.replaceAll("\\+AND\\+");
-        matcher = part2.matcher(in);
-        in = matcher.replaceAll("\\+AND\\+");
-        matcher = part3.matcher(in);
-        in = matcher.replaceAll("+");
-
-        return in;
-    }
-
-    /**
-     * Gets the initial list of ids
-     */
-    public SearchResult getIds(String term, int start, int pacing) {
-
-        String baseUrl = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils";
-        String medlineUrl = baseUrl + "/esearch.fcgi?db=pubmed&retmax=" + Integer.toString(pacing) +
-            "&retstart=" + Integer.toString(start) + "&term=";
-        
-        Pattern idPattern = Pattern.compile("<Id>(\\d+)</Id>");
-        Pattern countPattern = Pattern.compile("<Count>(\\d+)<\\/Count>");
-        Pattern retMaxPattern = Pattern.compile("<RetMax>(\\d+)<\\/RetMax>");
-        Pattern retStartPattern = Pattern.compile("<RetStart>(\\d+)<\\/RetStart>");
-
-        boolean doCount = true;
-        SearchResult result = new SearchResult();
-        try {
-            URL ncbi = new URL(medlineUrl + term);
-            // get the ids
-            BufferedReader in = new BufferedReader(new InputStreamReader(ncbi.openStream()));
-            String inLine;
-            while ((inLine = in.readLine()) != null) {
-
-                // get the count
-                Matcher idMatcher = idPattern.matcher(inLine);
-                if (idMatcher.find()) {
-                    result.addID(idMatcher.group(1));
-                }
-                Matcher retMaxMatcher = retMaxPattern.matcher(inLine);
-                if (retMaxMatcher.find()) {
-                    result.retmax = Integer.parseInt(retMaxMatcher.group(1));
-                }
-                Matcher retStartMatcher = retStartPattern.matcher(inLine);
-                if (retStartMatcher.find()) {
-                    result.retstart = Integer.parseInt(retStartMatcher.group(1));
-                }
-                Matcher countMatcher = countPattern.matcher(inLine);
-                if (doCount && countMatcher.find()) {
-                    result.count = Integer.parseInt(countMatcher.group(1));
-                    doCount = false;
-                }
-            }
-        } catch (MalformedURLException e) { // new URL() failed
-            System.out.println("bad url");
-            e.printStackTrace();
-        } catch (IOException e) { // openConnection() failed
-            System.out.println("connection failed");
-            e.printStackTrace();
-
-        }
-        return result;
-    }
-
-    public void stopFetching() {
-        shouldContinue = false;
-    }
-
-    public String getHelpPage() {
-        return GUIGlobals.medlineHelp;
-    }
-
-    public URL getIcon() {
-        return GUIGlobals.getIconUrl("www");
-    }
-
-    public String getKeyName() {
-        return "Medline";
-    }
-
-    public JPanel getOptionsPanel() {
-        // No Option Panel
-        return null;
-    }
-
-    public String getTitle() {
-        return "Medline";
-    }
-
-    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter frame) {
-
-        shouldContinue = true;
-
-        query = query.trim().replace(';', ',');
-
-        if (query.matches("\\d+[,\\d+]*")) {
-            frame.setStatus(Globals.lang("Fetching Medline by id..."));
-
-            List<BibtexEntry> bibs = MedlineImporter.fetchMedline(query, frame);
-
-            if (bibs.size() == 0) {
-            	frame.showMessage(Globals.lang("No references found"));
-            }
-            
-            for (BibtexEntry entry : bibs){
-                dialog.addEntry(entry);
-            }
-            return true;
-        }
-
-        if (query.length() > 0) {
-            frame.setStatus(Globals.lang("Fetching Medline by term..."));
-
-            String searchTerm = toSearchTerm(query);
-
-            // get the ids from entrez
-            SearchResult result = getIds(searchTerm, 0, 1);
-
-            if (result.count == 0) {
-            	frame.showMessage(Globals.lang("No references found"));
-                return false;
-            }
-
-            int numberToFetch = result.count;
-            if (numberToFetch > PACING) {
-                
-                while (true) {
-                    String strCount = JOptionPane.showInputDialog(Globals.lang("References found") +
-                        ": " + numberToFetch + "  " +
-                        Globals.lang("Number of references to fetch?"), Integer
-                        .toString(numberToFetch));
-
-                    if (strCount == null) {
-                        frame.setStatus(Globals.lang("Medline import canceled"));
-                        return false;
-                    }
-
-                    try {
-                        numberToFetch = Integer.parseInt(strCount.trim());
-                        break;
-                    } catch (RuntimeException ex) {
-                        frame.showMessage(Globals.lang("Please enter a valid number"));
-                    }
-                }
-            }
-
-            for (int i = 0; i < numberToFetch; i += PACING) {
-                if (!shouldContinue)
-                    break;
-
-                int noToFetch = Math.min(PACING, numberToFetch - i);
-                
-                // get the ids from entrez
-                result = getIds(searchTerm, i, noToFetch);
-
-                List<BibtexEntry> bibs = MedlineImporter.fetchMedline(result.ids, frame);
-                for (BibtexEntry entry : bibs){
-                    dialog.addEntry(entry);
-                }
-                dialog.setProgress(i + noToFetch, numberToFetch);
-            }
-            return true;
-        }
-        frame.showMessage(Globals
-            .lang("Please enter a comma separated list of Medline IDs (numbers) or search terms."),
-            Globals.lang("Input error"), JOptionPane.ERROR_MESSAGE);
-        return false;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+
+/**
+ * Fetch or search from Pubmed http://www.ncbi.nlm.nih.gov/sites/entrez/
+ * 
+ */
+public class MedlineFetcher implements EntryFetcher {
+
+    protected class SearchResult {
+
+        public int count = 0;
+
+        public int retmax = 0;
+
+        public int retstart = 0;
+
+        public String ids = "";
+
+        public void addID(String id) {
+            if (ids.equals(""))
+                ids = id;
+            else
+                ids += "," + id;
+        }
+    }
+
+    /**
+     * How many entries to query in one request
+     */
+    public static final int PACING = 20;
+
+    boolean shouldContinue;
+
+    OutputPrinter frame;
+
+    ImportInspector dialog;
+
+    public String toSearchTerm(String in) {
+        Pattern part1 = Pattern.compile(", ");
+        Pattern part2 = Pattern.compile(",");
+        Pattern part3 = Pattern.compile(" ");
+        Matcher matcher;
+        matcher = part1.matcher(in);
+        in = matcher.replaceAll("\\+AND\\+");
+        matcher = part2.matcher(in);
+        in = matcher.replaceAll("\\+AND\\+");
+        matcher = part3.matcher(in);
+        in = matcher.replaceAll("+");
+
+        return in;
+    }
+
+    /**
+     * Gets the initial list of ids
+     */
+    public SearchResult getIds(String term, int start, int pacing) {
+
+        String baseUrl = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils";
+        String medlineUrl = baseUrl + "/esearch.fcgi?db=pubmed&retmax=" + Integer.toString(pacing) +
+            "&retstart=" + Integer.toString(start) + "&term=";
+        
+        Pattern idPattern = Pattern.compile("<Id>(\\d+)</Id>");
+        Pattern countPattern = Pattern.compile("<Count>(\\d+)<\\/Count>");
+        Pattern retMaxPattern = Pattern.compile("<RetMax>(\\d+)<\\/RetMax>");
+        Pattern retStartPattern = Pattern.compile("<RetStart>(\\d+)<\\/RetStart>");
+
+        boolean doCount = true;
+        SearchResult result = new SearchResult();
+        try {
+            URL ncbi = new URL(medlineUrl + term);
+            // get the ids
+            BufferedReader in = new BufferedReader(new InputStreamReader(ncbi.openStream()));
+            String inLine;
+            while ((inLine = in.readLine()) != null) {
+
+                // get the count
+                Matcher idMatcher = idPattern.matcher(inLine);
+                if (idMatcher.find()) {
+                    result.addID(idMatcher.group(1));
+                }
+                Matcher retMaxMatcher = retMaxPattern.matcher(inLine);
+                if (retMaxMatcher.find()) {
+                    result.retmax = Integer.parseInt(retMaxMatcher.group(1));
+                }
+                Matcher retStartMatcher = retStartPattern.matcher(inLine);
+                if (retStartMatcher.find()) {
+                    result.retstart = Integer.parseInt(retStartMatcher.group(1));
+                }
+                Matcher countMatcher = countPattern.matcher(inLine);
+                if (doCount && countMatcher.find()) {
+                    result.count = Integer.parseInt(countMatcher.group(1));
+                    doCount = false;
+                }
+            }
+        } catch (MalformedURLException e) { // new URL() failed
+            System.out.println("bad url");
+            e.printStackTrace();
+        } catch (IOException e) { // openConnection() failed
+            System.out.println("connection failed");
+            e.printStackTrace();
+
+        }
+        return result;
+    }
+
+    public void stopFetching() {
+        shouldContinue = false;
+    }
+
+    public String getHelpPage() {
+        return GUIGlobals.medlineHelp;
+    }
+
+    public URL getIcon() {
+        return GUIGlobals.getIconUrl("www");
+    }
+
+    public String getKeyName() {
+        return "Medline";
+    }
+
+    public JPanel getOptionsPanel() {
+        // No Option Panel
+        return null;
+    }
+
+    public String getTitle() {
+        return "Medline";
+    }
+
+    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter frame) {
+
+        shouldContinue = true;
+
+        query = query.trim().replace(';', ',');
+
+        if (query.matches("\\d+[,\\d+]*")) {
+            frame.setStatus(Globals.lang("Fetching Medline by id..."));
+
+            List<BibtexEntry> bibs = MedlineImporter.fetchMedline(query, frame);
+
+            if (bibs.size() == 0) {
+            	frame.showMessage(Globals.lang("No references found"));
+            }
+            
+            for (BibtexEntry entry : bibs){
+                dialog.addEntry(entry);
+            }
+            return true;
+        }
+
+        if (query.length() > 0) {
+            frame.setStatus(Globals.lang("Fetching Medline by term..."));
+
+            String searchTerm = toSearchTerm(query);
+
+            // get the ids from entrez
+            SearchResult result = getIds(searchTerm, 0, 1);
+
+            if (result.count == 0) {
+            	frame.showMessage(Globals.lang("No references found"));
+                return false;
+            }
+
+            int numberToFetch = result.count;
+            if (numberToFetch > PACING) {
+                
+                while (true) {
+                    String strCount = JOptionPane.showInputDialog(Globals.lang("References found") +
+                        ": " + numberToFetch + "  " +
+                        Globals.lang("Number of references to fetch?"), Integer
+                        .toString(numberToFetch));
+
+                    if (strCount == null) {
+                        frame.setStatus(Globals.lang("Medline import canceled"));
+                        return false;
+                    }
+
+                    try {
+                        numberToFetch = Integer.parseInt(strCount.trim());
+                        break;
+                    } catch (RuntimeException ex) {
+                        frame.showMessage(Globals.lang("Please enter a valid number"));
+                    }
+                }
+            }
+
+            for (int i = 0; i < numberToFetch; i += PACING) {
+                if (!shouldContinue)
+                    break;
+
+                int noToFetch = Math.min(PACING, numberToFetch - i);
+                
+                // get the ids from entrez
+                result = getIds(searchTerm, i, noToFetch);
+
+                List<BibtexEntry> bibs = MedlineImporter.fetchMedline(result.ids, frame);
+                for (BibtexEntry entry : bibs){
+                    dialog.addEntry(entry);
+                }
+                dialog.setProgress(i + noToFetch, numberToFetch);
+            }
+            return true;
+        }
+        frame.showMessage(Globals
+            .lang("Please enter a comma separated list of Medline IDs (numbers) or search terms."),
+            Globals.lang("Input error"), JOptionPane.ERROR_MESSAGE);
+        return false;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/MedlineHandler.java b/src/java/net/sf/jabref/imports/MedlineHandler.java
index db02400..d39a244 100644
--- a/src/java/net/sf/jabref/imports/MedlineHandler.java
+++ b/src/java/net/sf/jabref/imports/MedlineHandler.java
@@ -1,355 +1,355 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.TreeSet;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.helpers.DefaultHandler;
-
-public class MedlineHandler extends DefaultHandler
-{
-    ArrayList<BibtexEntry> bibitems= new ArrayList<BibtexEntry>();
-    boolean inTitle=false,			inYear = false,
-		inJournal = false,			inMonth = false,
-		inVolume = false,			inAuthorList = false,
-		inAuthor =false,			inLastName = false,
-        inSuffix = false,
-		inInitials = false,			inMedlinePgn = false,
-		inMedlineID = false,		inURL=false,
-		inIssue = false,			inPubDate = false,
-        inUrl=false, inForename=false, inAbstractText=false, inMedlineDate=false,
-		inPubMedID=false, inDescriptorName=false,inDoi=false,inPii=false,
-        inAffiliation=false, inMeshHeader=false, inQualifierName=false,
-        inLanguage=false, inPst=false;
-    String title="", journal="", keywords ="",author="",
-		lastName="",suffix="",year="",forename="", abstractText="", affiliation="";
-    String month="",volume="",lastname="",initials="",number="",page="",medlineID="",url="",MedlineDate="";
-    String series="",editor="",booktitle="",type="article",key="",address="",
-		pubmedid="",doi="",pii="", majorTopic = "", minorTopics = "", language = "", pst= "";
-    ArrayList<String> authors=new ArrayList<String>();
-    TreeSet<String> descriptors = new TreeSet<String>(); // To gather keywords
-    int rowNum=0;
-
-    private static final String KEYWORD_SEPARATOR = "; ";
-
-    public ArrayList<BibtexEntry> getItems(){ return bibitems;}
-
-    public MedlineHandler(){
-		super();
-
-    }
-    public void startElement(String uri, String localName, String qName,  Attributes atts)
-    {
-		//		public void startElement(String localName, Attributes atts) {
-		// Get the number of attribute
-		if(localName.equals("PubmedArticle")){}
-		else if(localName.equals("ArticleTitle")){ inTitle=true; title="";}
-		else if(localName.equals("PubDate")){inPubDate=true;}
-		else if(localName.equals("Year") && inPubDate==true){inYear=true;}
-		else if( localName.equals("MedlineDate") && inPubDate==true){inMedlineDate=true;} // medline date does not have 4 digit dates instead it has multiyear etc
-		else if(localName.equals("MedlineTA")){inJournal=true;journal="";} //journal name
-		else if(localName.equals("Month") && inPubDate==true){inMonth=true;}
-		else if(localName.equals("Volume")){inVolume=true;}
-        else if(localName.equals("Language")){inLanguage=true;}
-        else if(localName.equals("PublicationStatus")){inPst=true;}
-		else if(localName.equals("AuthorList")){
-			inAuthorList=true;
-			authors.clear();}
-        else if (localName.equals("MeshHeading")) {
-            inMeshHeader = true;
-            majorTopic = "";
-            minorTopics = "";
-        }
-        else if(localName.equals("DescriptorName")){
-			inDescriptorName=true;
-		}
-        else if (localName.equals("QualifierName")) {
-            inQualifierName=true;
-        }
-                else if(localName.equals("Author")){inAuthor=true;author="";}
-                else if(localName.equals("CollectiveName")){inForename=true;forename="";} // Morten A. 20040513.
-		else if(localName.equals("PMID")){
-            // Set PMID only once, because there can be <CommentIn> tags later on that
-            // contain IDs of different articles.
-            if (pubmedid.length() == 0) {
-                inPubMedID=true;
-                pubmedid="";
-            }
-        }
-		else if(localName.equals("LastName")){inLastName=true; lastName="";}
-		else if(localName.equals("ForeName") || localName.equals("FirstName")) {
-			inForename=true; forename="";
-		}
-        else if (localName.equals("Suffix")) {
-            inSuffix = true;
-            suffix = "";
-        }
-		else if(localName.equals("Issue")){inIssue=true;}
-		else if(localName.equals("MedlinePgn")){inMedlinePgn=true;
-		}//pagenumber
-		else if(localName.equals("URL")){inUrl=true;}
-		else if(localName.equals("Initials")){inInitials=true;}
-		else if(localName.equals("AbstractText")){ inAbstractText=true;}
-		else if(localName.equals("ArticleId")){
-			for (int i = 0; i < atts.getLength(); i++) {
-				String value = atts.getValue(i);
-				if(value.equals("doi"))
-					inDoi=true;
-				else if(value.equals("pii"))
-					inPii=true;
-
-			}
-		}
-        else if(localName.equals("Affiliation")){ inAffiliation=true; }
-
-
-		return;
-    }
-    String join(Object[] sa,String delim){
-		StringBuffer sb=new StringBuffer();
-		sb.append( sa[0].toString() );
-		for(int i=1; i<sa.length; i++)
-	    {
-			sb.append( delim );
-			sb.append( sa[i].toString() );
-	    }
-		return sb.toString();
-    }
-    String makeBibtexString(){
-		String out  = "";
-                // PENDING jeffrey.kuhn at yale.edu 2005-05-27 : added call to fixPageRange
-		out= "article{,\n" + " author = { " + author + " },\n title = { " + title + "},\n journal ={ " + journal + "},\n year = " + year +
-			"},\n volume = { " + volume + "},\n number = { "+ number + "},\n pages = { " + fixPageRange(page) + "},\n abstract = { " + abstractText + "},\n}";
-		return out;
-    }
-    public void endElement( String uri, String localName, String qName ) {
-		if(localName.equals("PubmedArticle")){
-			//bibitems.add( new Bibitem(null, makeBibtexString(), Globals.nextKey(),"-1" )	 );
-			// check if year ="" then give medline date instead
-			if(year.equals("")){
-				if(!MedlineDate.equals("")) {
-					// multi-year date format
-					//System.out.println(MedlineDate);
-					year = MedlineDate.substring(0,4);
-					//Matcher m = Pattern.compile("\\b[0-9]{4}\\b").matcher(MedlineDate);
-					//if(m.matches())
-					//year = m.group();
-				}
-			}
-			
-			// Build a string from the collected keywords:
-            StringBuffer sb = new StringBuffer();
-            for (Iterator<String> iterator = descriptors.iterator(); iterator.hasNext();) {
-                String s = iterator.next();
-                sb.append(s);
-                if (iterator.hasNext())
-                    sb.append(KEYWORD_SEPARATOR);
-            }
-            keywords = sb.toString();
-            
-			BibtexEntry b=new BibtexEntry(Util.createNeutralId(),//Globals.DEFAULT_BIBTEXENTRY_ID,
-										  Globals.getEntryType("article")); // id assumes an existing database so don't create one here
-			if (!author.equals("")) { 
-			    b.setField("author",ImportFormatReader.expandAuthorInitials(author));
-			    author = "";
-			}
-			if (!title.equals("")) b.setField("title",title);
-			if (!journal.equals("")) b.setField("journal",journal);
-			if (!year.equals("")) b.setField("year",year);
-                        // PENDING jeffrey.kuhn at yale.edu 2005-05-27 : added call to fixPageRange
-			if (!page.equals("")) b.setField("pages",fixPageRange(page));
-			if (!volume.equals("")) b.setField("volume",volume);
-            if (!language.equals("")) b.setField("language",language);
-            if (!pst.equals("")) b.setField("medline-pst", pst);
-			if (!abstractText.equals("")) b.setField("abstract",abstractText.replaceAll("%","\\\\%"));
-			if (!keywords.equals("")) b.setField("keywords",keywords);
-			if (!month.equals("")) b.setField("month",month);
-			//if (!url.equals("")) b.setField("url",url);
-			if (!number.equals("")) b.setField("number",number);
-
-			if(!doi.equals("")){
-			    b.setField("doi",doi);
-			    b.setField("url","http://dx.doi.org/"+doi);
-			}
-			if(!pii.equals(""))
-			    b.setField("pii",pii);
-            if(!affiliation.equals("")) {
-                b.setField("institution",affiliation.replaceAll("#", "\\\\#"));
-            }
-
-            // PENDING jeffrey.kuhn at yale.edu 2005-05-27 : added "pmid" bibtex field
-            // Older references do not have doi entries, but every
-            // medline entry has a unique pubmed ID (aka primary ID).
-            // Add a bibtex field for the pubmed ID for future use.
-            if (!pubmedid.equals(""))
-                b.setField("pmid",pubmedid);
-                        
-			bibitems.add( b  );
-
-			abstractText = "";
-			author = "";
-			title="";
-			journal="";
-			keywords ="";
-            doi=""; pii="";
-			year="";
-			forename="";
-			lastName="";
-			suffix = "";
-			abstractText="";
-            affiliation="";
-            pubmedid="";
-            majorTopic = "";
-            minorTopics = "";
-            month="";volume="";language="";pst="";lastname=""; suffix="";
-            initials="";number="";page="";medlineID="";url="";
-			MedlineDate="";
-            descriptors.clear();
-        }
-
-		else if(localName.equals("ArticleTitle")){inTitle=false;}
-		else if(localName.equals("PubDate")){inPubDate=false;}
-		else if(localName.equals("Year")){inYear=false;}
-		else if(localName.equals("PMID")){inPubMedID=false;}
-		else if(localName.equals("MedlineDate")){inMedlineDate=false;}
-		else if(localName.equals("MedlineTA")){inJournal=false;} //journal name
-		else if(localName.equals("Month")){inMonth=false;}
-		else if(localName.equals("Volume")){inVolume=false;}
-        else if(localName.equals("Language")){inLanguage=false;}
-        else if(localName.equals("PublicationStatus")){inPst=false;}
-		else if(localName.equals("AuthorList")){
-			author = join( authors.toArray(), " and " );
-			inAuthorList = false;
-		}
-		else if(localName.equals("Author")){
-			// forename sometimes has initials with " " in middle: is pattern [A-Z] [A-Z]
-			// when above is the case replace it with initials
-			if(forename.length()==3 && forename.charAt(1)==' '){
-				forename=initials;
-			}
-
-            // Put together name with last name first, and enter suffix in between if present:
-            if (lastname.indexOf(" ") > 0)
-                author = "{"+lastname+"}";
-            else
-                author = lastname;
-
-            if (suffix.length() > 0)
-                author = author+", "+suffix;
-            if (forename.length() > 0)
-                author = author+", "+forename;
-
-			//author = initials + " " + lastname;
-			authors.add(author);
-			inAuthor=false;
-			forename = "";
-			initials = "";
-			lastname = "";
-			suffix = "";
-		}
-		else if(localName.equals("DescriptorName")) inDescriptorName=false;
-        else if(localName.equals("QualifierName")) inQualifierName=false;
-        else if(localName.equals("MeshHeading")) {
-            inMeshHeader = false;
-            if (minorTopics.equals(""))
-                descriptors.add(majorTopic);
-            else
-                descriptors.add(majorTopic+", "+minorTopics);
-        }
-        else if(localName.equals("LastName")){inLastName=false;}
-        else if(localName.equals("Suffix")){inSuffix=false;}
-		else if(localName.equals("ForeName")||localName.equals("FirstName")){ inForename=false;}
-		else if(localName.equals("Issue")){ inIssue = false;}
-		else if(localName.equals("MedlinePgn")){inMedlinePgn=false;}//pagenumber
-		else if(localName.equals("URL")){ inUrl=false;}
-		else if(localName.equals("Initials")){
-			//initials= '.' + initials + '.';
-			inInitials=false;
-		}
-		else if(localName.equals("AbstractText")){ inAbstractText=false;}
-        else if(localName.equals("Affiliation")){ inAffiliation=false; }
-        else if(localName.equals("ArticleId")){
-			if(inDoi)
-				inDoi=false;
-			else if(inPii)
-				inPii=false;}
-    }
-
-    public void characters( char[] data, int start, int length ) {
-
-		// if stack is not ready, data is not content of recognized element
-		if( inTitle ){ title += new String( data, start, length);}
-		else if(inYear){ year+=new String(data,start,length);}
-		else if(inJournal){journal += new String(data,start,length);}
-		else if(inMonth){month += new String(data,start,length);}
-		else if(inVolume){volume += new String(data,start,length);}
-        else if(inLanguage){language += new String(data,start,length).toLowerCase();}
-        else if(inPst){pst += new String(data,start,length);}
-		else if(inLastName){lastname += new String(data,start,length);}
-		else if(inSuffix){suffix += new String(data,start,length);}
-		else if(inInitials){initials += new String(data,start,length);}
-		else if(inIssue){number += new String(data,start,length);}
-		else if(inMedlinePgn){ page += new String(data,start,length);}
-		else if(inMedlineID){medlineID += new String(data,start,length);}
-		else if(inURL){url += new String(data,start,length);}
-		else if(inPubMedID){pubmedid = new String(data,start,length);}
-        else if(inQualifierName) {
-            if (!minorTopics.equals(""))
-                minorTopics = minorTopics+"/";
-            minorTopics = minorTopics + new String(data,start,length);
-        }
-        else if(inDescriptorName) {
-            majorTopic = new String(data,start,length);
-        }
-
-            //keywords += new String(data,start,length) + ", ";
-		else if(inForename){
-			forename += new String(data,start,length);
-			//System.out.println("IN FORENAME: " + forename);
-		}
-		else if(inAbstractText){ abstractText += new String(data,start,length);}
-		else if(inMedlineDate){ MedlineDate += new String(data,start,length);}
-		else if(inDoi){ doi=new String(data,start,length);}
-		else if(inPii){ pii=new String(data,start,length);}
-        else if(inAffiliation){ affiliation = new String(data,start,length);}
-    }
-
-    // PENDING jeffrey.kuhn at yale.edu 2005-05-27 : added fixPageRange method
-    //   Convert medline page ranges from short form to full form.
-    //   Medline reports page ranges in a shorthand format. 
-    //   The last page is reported using only the digits which
-    //   differ from the first page. 
-    //      i.e. 12345-51 refers to the actual range 12345-12351
-    public String fixPageRange(String pageRange) {
-        int minusPos = pageRange.indexOf('-');
-        if (minusPos < 0) {
-            return pageRange;
-        }
-        String first = pageRange.substring(0, minusPos).trim();
-        String last = pageRange.substring(minusPos+1).trim();
-        int llast = last.length(), lfirst = first.length();
-        if (llast < lfirst) {
-            last = first.substring(0, lfirst-llast) + last;
-        }
-        return first + "--" + last;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.TreeSet;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.helpers.DefaultHandler;
+
+public class MedlineHandler extends DefaultHandler
+{
+    ArrayList<BibtexEntry> bibitems= new ArrayList<BibtexEntry>();
+    boolean inTitle=false,			inYear = false,
+		inJournal = false,			inMonth = false,
+		inVolume = false,			inAuthorList = false,
+		inAuthor =false,			inLastName = false,
+        inSuffix = false,
+		inInitials = false,			inMedlinePgn = false,
+		inMedlineID = false,		inURL=false,
+		inIssue = false,			inPubDate = false,
+        inUrl=false, inForename=false, inAbstractText=false, inMedlineDate=false,
+		inPubMedID=false, inDescriptorName=false,inDoi=false,inPii=false,
+        inAffiliation=false, inMeshHeader=false, inQualifierName=false,
+        inLanguage=false, inPst=false;
+    String title="", journal="", keywords ="",author="",
+		lastName="",suffix="",year="",forename="", abstractText="", affiliation="";
+    String month="",volume="",lastname="",initials="",number="",page="",medlineID="",url="",MedlineDate="";
+    String series="",editor="",booktitle="",type="article",key="",address="",
+		pubmedid="",doi="",pii="", majorTopic = "", minorTopics = "", language = "", pst= "";
+    ArrayList<String> authors=new ArrayList<String>();
+    TreeSet<String> descriptors = new TreeSet<String>(); // To gather keywords
+    int rowNum=0;
+
+    private static final String KEYWORD_SEPARATOR = "; ";
+
+    public ArrayList<BibtexEntry> getItems(){ return bibitems;}
+
+    public MedlineHandler(){
+		super();
+
+    }
+    public void startElement(String uri, String localName, String qName,  Attributes atts)
+    {
+		//		public void startElement(String localName, Attributes atts) {
+		// Get the number of attribute
+		if(localName.equals("PubmedArticle")){}
+		else if(localName.equals("ArticleTitle")){ inTitle=true; title="";}
+		else if(localName.equals("PubDate")){inPubDate=true;}
+		else if(localName.equals("Year") && inPubDate==true){inYear=true;}
+		else if( localName.equals("MedlineDate") && inPubDate==true){inMedlineDate=true;} // medline date does not have 4 digit dates instead it has multiyear etc
+		else if(localName.equals("MedlineTA")){inJournal=true;journal="";} //journal name
+		else if(localName.equals("Month") && inPubDate==true){inMonth=true;}
+		else if(localName.equals("Volume")){inVolume=true;}
+        else if(localName.equals("Language")){inLanguage=true;}
+        else if(localName.equals("PublicationStatus")){inPst=true;}
+		else if(localName.equals("AuthorList")){
+			inAuthorList=true;
+			authors.clear();}
+        else if (localName.equals("MeshHeading")) {
+            inMeshHeader = true;
+            majorTopic = "";
+            minorTopics = "";
+        }
+        else if(localName.equals("DescriptorName")){
+			inDescriptorName=true;
+		}
+        else if (localName.equals("QualifierName")) {
+            inQualifierName=true;
+        }
+                else if(localName.equals("Author")){inAuthor=true;author="";}
+                else if(localName.equals("CollectiveName")){inForename=true;forename="";} // Morten A. 20040513.
+		else if(localName.equals("PMID")){
+            // Set PMID only once, because there can be <CommentIn> tags later on that
+            // contain IDs of different articles.
+            if (pubmedid.length() == 0) {
+                inPubMedID=true;
+                pubmedid="";
+            }
+        }
+		else if(localName.equals("LastName")){inLastName=true; lastName="";}
+		else if(localName.equals("ForeName") || localName.equals("FirstName")) {
+			inForename=true; forename="";
+		}
+        else if (localName.equals("Suffix")) {
+            inSuffix = true;
+            suffix = "";
+        }
+		else if(localName.equals("Issue")){inIssue=true;}
+		else if(localName.equals("MedlinePgn")){inMedlinePgn=true;
+		}//pagenumber
+		else if(localName.equals("URL")){inUrl=true;}
+		else if(localName.equals("Initials")){inInitials=true;}
+		else if(localName.equals("AbstractText")){ inAbstractText=true;}
+		else if(localName.equals("ArticleId")){
+			for (int i = 0; i < atts.getLength(); i++) {
+				String value = atts.getValue(i);
+				if(value.equals("doi"))
+					inDoi=true;
+				else if(value.equals("pii"))
+					inPii=true;
+
+			}
+		}
+        else if(localName.equals("Affiliation")){ inAffiliation=true; }
+
+
+		return;
+    }
+    String join(Object[] sa,String delim){
+		StringBuffer sb=new StringBuffer();
+		sb.append( sa[0].toString() );
+		for(int i=1; i<sa.length; i++)
+	    {
+			sb.append( delim );
+			sb.append( sa[i].toString() );
+	    }
+		return sb.toString();
+    }
+    String makeBibtexString(){
+		String out  = "";
+                // PENDING jeffrey.kuhn at yale.edu 2005-05-27 : added call to fixPageRange
+		out= "article{,\n" + " author = { " + author + " },\n title = { " + title + "},\n journal ={ " + journal + "},\n year = " + year +
+			"},\n volume = { " + volume + "},\n number = { "+ number + "},\n pages = { " + fixPageRange(page) + "},\n abstract = { " + abstractText + "},\n}";
+		return out;
+    }
+    public void endElement( String uri, String localName, String qName ) {
+		if(localName.equals("PubmedArticle")){
+			//bibitems.add( new Bibitem(null, makeBibtexString(), Globals.nextKey(),"-1" )	 );
+			// check if year ="" then give medline date instead
+			if(year.equals("")){
+				if(!MedlineDate.equals("")) {
+					// multi-year date format
+					//System.out.println(MedlineDate);
+					year = MedlineDate.substring(0,4);
+					//Matcher m = Pattern.compile("\\b[0-9]{4}\\b").matcher(MedlineDate);
+					//if(m.matches())
+					//year = m.group();
+				}
+			}
+			
+			// Build a string from the collected keywords:
+            StringBuffer sb = new StringBuffer();
+            for (Iterator<String> iterator = descriptors.iterator(); iterator.hasNext();) {
+                String s = iterator.next();
+                sb.append(s);
+                if (iterator.hasNext())
+                    sb.append(KEYWORD_SEPARATOR);
+            }
+            keywords = sb.toString();
+            
+			BibtexEntry b=new BibtexEntry(Util.createNeutralId(),//Globals.DEFAULT_BIBTEXENTRY_ID,
+										  Globals.getEntryType("article")); // id assumes an existing database so don't create one here
+			if (!author.equals("")) { 
+			    b.setField("author",ImportFormatReader.expandAuthorInitials(author));
+			    author = "";
+			}
+			if (!title.equals("")) b.setField("title",title);
+			if (!journal.equals("")) b.setField("journal",journal);
+			if (!year.equals("")) b.setField("year",year);
+                        // PENDING jeffrey.kuhn at yale.edu 2005-05-27 : added call to fixPageRange
+			if (!page.equals("")) b.setField("pages",fixPageRange(page));
+			if (!volume.equals("")) b.setField("volume",volume);
+            if (!language.equals("")) b.setField("language",language);
+            if (!pst.equals("")) b.setField("medline-pst", pst);
+			if (!abstractText.equals("")) b.setField("abstract",abstractText.replaceAll("%","\\\\%"));
+			if (!keywords.equals("")) b.setField("keywords",keywords);
+			if (!month.equals("")) b.setField("month",month);
+			//if (!url.equals("")) b.setField("url",url);
+			if (!number.equals("")) b.setField("number",number);
+
+			if(!doi.equals("")){
+			    b.setField("doi",doi);
+			    b.setField("url","http://dx.doi.org/"+doi);
+			}
+			if(!pii.equals(""))
+			    b.setField("pii",pii);
+            if(!affiliation.equals("")) {
+                b.setField("institution",affiliation.replaceAll("#", "\\\\#"));
+            }
+
+            // PENDING jeffrey.kuhn at yale.edu 2005-05-27 : added "pmid" bibtex field
+            // Older references do not have doi entries, but every
+            // medline entry has a unique pubmed ID (aka primary ID).
+            // Add a bibtex field for the pubmed ID for future use.
+            if (!pubmedid.equals(""))
+                b.setField("pmid",pubmedid);
+                        
+			bibitems.add( b  );
+
+			abstractText = "";
+			author = "";
+			title="";
+			journal="";
+			keywords ="";
+            doi=""; pii="";
+			year="";
+			forename="";
+			lastName="";
+			suffix = "";
+			abstractText="";
+            affiliation="";
+            pubmedid="";
+            majorTopic = "";
+            minorTopics = "";
+            month="";volume="";language="";pst="";lastname=""; suffix="";
+            initials="";number="";page="";medlineID="";url="";
+			MedlineDate="";
+            descriptors.clear();
+        }
+
+		else if(localName.equals("ArticleTitle")){inTitle=false;}
+		else if(localName.equals("PubDate")){inPubDate=false;}
+		else if(localName.equals("Year")){inYear=false;}
+		else if(localName.equals("PMID")){inPubMedID=false;}
+		else if(localName.equals("MedlineDate")){inMedlineDate=false;}
+		else if(localName.equals("MedlineTA")){inJournal=false;} //journal name
+		else if(localName.equals("Month")){inMonth=false;}
+		else if(localName.equals("Volume")){inVolume=false;}
+        else if(localName.equals("Language")){inLanguage=false;}
+        else if(localName.equals("PublicationStatus")){inPst=false;}
+		else if(localName.equals("AuthorList")){
+			author = join( authors.toArray(), " and " );
+			inAuthorList = false;
+		}
+		else if(localName.equals("Author")){
+			// forename sometimes has initials with " " in middle: is pattern [A-Z] [A-Z]
+			// when above is the case replace it with initials
+			if(forename.length()==3 && forename.charAt(1)==' '){
+				forename=initials;
+			}
+
+            // Put together name with last name first, and enter suffix in between if present:
+            if (lastname.indexOf(" ") > 0)
+                author = "{"+lastname+"}";
+            else
+                author = lastname;
+
+            if (suffix.length() > 0)
+                author = author+", "+suffix;
+            if (forename.length() > 0)
+                author = author+", "+forename;
+
+			//author = initials + " " + lastname;
+			authors.add(author);
+			inAuthor=false;
+			forename = "";
+			initials = "";
+			lastname = "";
+			suffix = "";
+		}
+		else if(localName.equals("DescriptorName")) inDescriptorName=false;
+        else if(localName.equals("QualifierName")) inQualifierName=false;
+        else if(localName.equals("MeshHeading")) {
+            inMeshHeader = false;
+            if (minorTopics.equals(""))
+                descriptors.add(majorTopic);
+            else
+                descriptors.add(majorTopic+", "+minorTopics);
+        }
+        else if(localName.equals("LastName")){inLastName=false;}
+        else if(localName.equals("Suffix")){inSuffix=false;}
+		else if(localName.equals("ForeName")||localName.equals("FirstName")){ inForename=false;}
+		else if(localName.equals("Issue")){ inIssue = false;}
+		else if(localName.equals("MedlinePgn")){inMedlinePgn=false;}//pagenumber
+		else if(localName.equals("URL")){ inUrl=false;}
+		else if(localName.equals("Initials")){
+			//initials= '.' + initials + '.';
+			inInitials=false;
+		}
+		else if(localName.equals("AbstractText")){ inAbstractText=false;}
+        else if(localName.equals("Affiliation")){ inAffiliation=false; }
+        else if(localName.equals("ArticleId")){
+			if(inDoi)
+				inDoi=false;
+			else if(inPii)
+				inPii=false;}
+    }
+
+    public void characters( char[] data, int start, int length ) {
+
+		// if stack is not ready, data is not content of recognized element
+		if( inTitle ){ title += new String( data, start, length);}
+		else if(inYear){ year+=new String(data,start,length);}
+		else if(inJournal){journal += new String(data,start,length);}
+		else if(inMonth){month += new String(data,start,length);}
+		else if(inVolume){volume += new String(data,start,length);}
+        else if(inLanguage){language += new String(data,start,length).toLowerCase();}
+        else if(inPst){pst += new String(data,start,length);}
+		else if(inLastName){lastname += new String(data,start,length);}
+		else if(inSuffix){suffix += new String(data,start,length);}
+		else if(inInitials){initials += new String(data,start,length);}
+		else if(inIssue){number += new String(data,start,length);}
+		else if(inMedlinePgn){ page += new String(data,start,length);}
+		else if(inMedlineID){medlineID += new String(data,start,length);}
+		else if(inURL){url += new String(data,start,length);}
+		else if(inPubMedID){pubmedid = new String(data,start,length);}
+        else if(inQualifierName) {
+            if (!minorTopics.equals(""))
+                minorTopics = minorTopics+"/";
+            minorTopics = minorTopics + new String(data,start,length);
+        }
+        else if(inDescriptorName) {
+            majorTopic = new String(data,start,length);
+        }
+
+            //keywords += new String(data,start,length) + ", ";
+		else if(inForename){
+			forename += new String(data,start,length);
+			//System.out.println("IN FORENAME: " + forename);
+		}
+		else if(inAbstractText){ abstractText += new String(data,start,length);}
+		else if(inMedlineDate){ MedlineDate += new String(data,start,length);}
+		else if(inDoi){ doi=new String(data,start,length);}
+		else if(inPii){ pii=new String(data,start,length);}
+        else if(inAffiliation){ affiliation = new String(data,start,length);}
+    }
+
+    // PENDING jeffrey.kuhn at yale.edu 2005-05-27 : added fixPageRange method
+    //   Convert medline page ranges from short form to full form.
+    //   Medline reports page ranges in a shorthand format. 
+    //   The last page is reported using only the digits which
+    //   differ from the first page. 
+    //      i.e. 12345-51 refers to the actual range 12345-12351
+    public String fixPageRange(String pageRange) {
+        int minusPos = pageRange.indexOf('-');
+        if (minusPos < 0) {
+            return pageRange;
+        }
+        String first = pageRange.substring(0, minusPos).trim();
+        String last = pageRange.substring(minusPos+1).trim();
+        int llast = last.length(), lfirst = first.length();
+        if (llast < lfirst) {
+            last = first.substring(0, lfirst-llast) + last;
+        }
+        return first + "--" + last;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/MedlineImporter.java b/src/java/net/sf/jabref/imports/MedlineImporter.java
index 57d0f84..de3f3b4 100644
--- a/src/java/net/sf/jabref/imports/MedlineImporter.java
+++ b/src/java/net/sf/jabref/imports/MedlineImporter.java
@@ -1,148 +1,148 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.*;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.OutputPrinter;
-
-/**
- * Importer for the Refer/Endnote format.
- * 
- * check here for details on the format
- * http://www.ecst.csuchico.edu/~jacobsd/bib/formats/endnote.html
- */
-public class MedlineImporter extends ImportFormat {
-
-	private static Logger logger = Logger.getLogger(MedlineImporter.class.toString());
-	
-    /**
-     * Return the name of this import format.
-     */
-    public String getFormatName() {
-        return "Medline";
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-     */
-    public String getCLIId() {
-        return "medline";
-    }
-
-    /**
-     * Check whether the source is in the correct format for this importer.
-     */
-    public boolean isRecognizedFormat(InputStream stream) throws IOException {
-
-        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-        String str;
-        int i=0;
-        while (((str = in.readLine()) != null) && (i < 50)) {
-
-			if (str.toLowerCase().indexOf("<pubmedarticle>") >= 0)
-				return true;
-
-            i++;
-        }
-
-		return false;
-    }
-
-    /**
-     * Fetch and parse an medline item from eutils.ncbi.nlm.nih.gov.
-     * 
-     * @param id One or several ids, separated by ","
-     * 
-     * @return Will return an empty list on error.
-     */
-    public static List<BibtexEntry> fetchMedline(String id, OutputPrinter status) {
-        String baseUrl = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&retmode=xml&rettype=citation&id=" +
-            id;
-        try {
-            URL url = new URL(baseUrl);
-            URLConnection data = url.openConnection();
-            return new MedlineImporter().importEntries(data.getInputStream(), status);
-        } catch (IOException e) {
-            return new ArrayList<BibtexEntry>();
-        }
-    }
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     */
-    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-
-        // Obtain a factory object for creating SAX parsers
-        SAXParserFactory parserFactory = SAXParserFactory.newInstance();
-
-        // Configure the factory object to specify attributes of the parsers it
-        // creates
-        parserFactory.setValidating(true);
-        parserFactory.setNamespaceAware(true);
-
-        // Now create a SAXParser object
-        ArrayList<BibtexEntry> bibItems = null;
-        try {
-            SAXParser parser = parserFactory.newSAXParser(); // May throw
-            // exceptions
-            MedlineHandler handler = new MedlineHandler();
-            // Start the parser. It reads the file and calls methods of the
-            // handler.
-            parser.parse(stream, handler);
-
-            // Switch this to true if you want to make a local copy for testing.
-            if (false) {
-                stream.reset();
-                FileOutputStream out = new FileOutputStream(new File("/home/alver/ut.txt"));
-                int c;
-                while ((c = stream.read()) != -1) {
-                    out.write((char) c);
-                }
-                out.close();
-            }
-
-            // When you're done, report the results stored by your handler
-            // object
-            bibItems = handler.getItems();
-    	}catch (javax.xml.parsers.ParserConfigurationException e1){
-    		logger.log(Level.SEVERE, e1.getLocalizedMessage(), e1);
-    		status.showMessage(e1.getLocalizedMessage());
-    	}catch (org.xml.sax.SAXException e2){
-    		logger.log(Level.SEVERE, e2.getLocalizedMessage(), e2);
-    		status.showMessage(e2.getLocalizedMessage());
-    	}catch (java.io.IOException e3){
-    		logger.log(Level.SEVERE, e3.getLocalizedMessage(), e3);
-    		status.showMessage(e3.getLocalizedMessage());
-    	}
-
-        return bibItems;
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.*;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.OutputPrinter;
+
+/**
+ * Importer for the Refer/Endnote format.
+ * 
+ * check here for details on the format
+ * http://www.ecst.csuchico.edu/~jacobsd/bib/formats/endnote.html
+ */
+public class MedlineImporter extends ImportFormat {
+
+	private static Logger logger = Logger.getLogger(MedlineImporter.class.toString());
+	
+    /**
+     * Return the name of this import format.
+     */
+    public String getFormatName() {
+        return "Medline";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+     */
+    public String getCLIId() {
+        return "medline";
+    }
+
+    /**
+     * Check whether the source is in the correct format for this importer.
+     */
+    public boolean isRecognizedFormat(InputStream stream) throws IOException {
+
+        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+        String str;
+        int i=0;
+        while (((str = in.readLine()) != null) && (i < 50)) {
+
+			if (str.toLowerCase().indexOf("<pubmedarticle>") >= 0)
+				return true;
+
+            i++;
+        }
+
+		return false;
+    }
+
+    /**
+     * Fetch and parse an medline item from eutils.ncbi.nlm.nih.gov.
+     * 
+     * @param id One or several ids, separated by ","
+     * 
+     * @return Will return an empty list on error.
+     */
+    public static List<BibtexEntry> fetchMedline(String id, OutputPrinter status) {
+        String baseUrl = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&retmode=xml&rettype=citation&id=" +
+            id;
+        try {
+            URL url = new URL(baseUrl);
+            URLConnection data = url.openConnection();
+            return new MedlineImporter().importEntries(data.getInputStream(), status);
+        } catch (IOException e) {
+            return new ArrayList<BibtexEntry>();
+        }
+    }
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     */
+    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+
+        // Obtain a factory object for creating SAX parsers
+        SAXParserFactory parserFactory = SAXParserFactory.newInstance();
+
+        // Configure the factory object to specify attributes of the parsers it
+        // creates
+        parserFactory.setValidating(true);
+        parserFactory.setNamespaceAware(true);
+
+        // Now create a SAXParser object
+        ArrayList<BibtexEntry> bibItems = null;
+        try {
+            SAXParser parser = parserFactory.newSAXParser(); // May throw
+            // exceptions
+            MedlineHandler handler = new MedlineHandler();
+            // Start the parser. It reads the file and calls methods of the
+            // handler.
+            parser.parse(stream, handler);
+
+            // Switch this to true if you want to make a local copy for testing.
+            if (false) {
+                stream.reset();
+                FileOutputStream out = new FileOutputStream(new File("/home/alver/ut.txt"));
+                int c;
+                while ((c = stream.read()) != -1) {
+                    out.write((char) c);
+                }
+                out.close();
+            }
+
+            // When you're done, report the results stored by your handler
+            // object
+            bibItems = handler.getItems();
+    	}catch (javax.xml.parsers.ParserConfigurationException e1){
+    		logger.log(Level.SEVERE, e1.getLocalizedMessage(), e1);
+    		status.showMessage(e1.getLocalizedMessage());
+    	}catch (org.xml.sax.SAXException e2){
+    		logger.log(Level.SEVERE, e2.getLocalizedMessage(), e2);
+    		status.showMessage(e2.getLocalizedMessage());
+    	}catch (java.io.IOException e3){
+    		logger.log(Level.SEVERE, e3.getLocalizedMessage(), e3);
+    		status.showMessage(e3.getLocalizedMessage());
+    	}
+
+        return bibItems;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/MsBibImporter.java b/src/java/net/sf/jabref/imports/MsBibImporter.java
index 95b6792..d937d1d 100644
--- a/src/java/net/sf/jabref/imports/MsBibImporter.java
+++ b/src/java/net/sf/jabref/imports/MsBibImporter.java
@@ -1,96 +1,96 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.msbib.MSBibDatabase;
-
-import org.w3c.dom.Document;
-
-
-/**
- * Importer for the MS Office 2007 XML bibliography format
- * By S. M. Mahbub Murshed
- *
- * ...
- */
-public class MsBibImporter extends ImportFormat {
-
-    public boolean isRecognizedFormat(InputStream in) throws IOException {
-
-        /*
-            This method is available for checking if a file can be of the MSBib type.
-            The effect of this method is primarily to avoid unnecessary processing of
-            files when searching for a suitable import format. If this method returns
-            false, the import routine will move on to the next import format.
-
-            The correct behaviour is to return false if it is certain that the file is
-            not of the MsBib type, and true otherwise. Returning true is the safe choice
-            if not certain.
-         */
-    	Document docin = null;
-    	try {
-    	DocumentBuilder dbuild = DocumentBuilderFactory.
-    								newInstance().
-    								newDocumentBuilder();
-   		docin = dbuild.parse(in);   		
-    	} catch (Exception e) {
-	   		return false;
-    	}
-    	if(docin!= null && docin.getDocumentElement().getTagName().contains("Sources") == false)
-    		return false;
-//   		NodeList rootLst = docin.getElementsByTagName("b:Sources");
-//   		if(rootLst.getLength()==0)
-//   			rootLst = docin.getElementsByTagName("Sources");
-//   		if(rootLst.getLength()==0)
-//   			return false;
-    	// System.out.println(docin.getDocumentElement().getTagName());
-        return true;
-    }
-
-    /**
-	 * String used to identify this import filter on the command line.
-	 * 
-	 * @override
-	 * @return "msbib"
-	 */
-	public String getCLIid() {
-		return "msbib";
-	}
-
-    public List<BibtexEntry> importEntries(InputStream in, OutputPrinter status) throws IOException {
-
-        MSBibDatabase dbase = new MSBibDatabase();
-
-        List<BibtexEntry> entries = dbase.importEntries(in);
-
-        return entries;
-    }
-
-    public String getFormatName() {
-        // This method should return the name of this import format.
-        return "MSBib";
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.msbib.MSBibDatabase;
+
+import org.w3c.dom.Document;
+
+
+/**
+ * Importer for the MS Office 2007 XML bibliography format
+ * By S. M. Mahbub Murshed
+ *
+ * ...
+ */
+public class MsBibImporter extends ImportFormat {
+
+    public boolean isRecognizedFormat(InputStream in) throws IOException {
+
+        /*
+            This method is available for checking if a file can be of the MSBib type.
+            The effect of this method is primarily to avoid unnecessary processing of
+            files when searching for a suitable import format. If this method returns
+            false, the import routine will move on to the next import format.
+
+            The correct behaviour is to return false if it is certain that the file is
+            not of the MsBib type, and true otherwise. Returning true is the safe choice
+            if not certain.
+         */
+    	Document docin = null;
+    	try {
+    	DocumentBuilder dbuild = DocumentBuilderFactory.
+    								newInstance().
+    								newDocumentBuilder();
+   		docin = dbuild.parse(in);   		
+    	} catch (Exception e) {
+	   		return false;
+    	}
+    	if(docin!= null && docin.getDocumentElement().getTagName().contains("Sources") == false)
+    		return false;
+//   		NodeList rootLst = docin.getElementsByTagName("b:Sources");
+//   		if(rootLst.getLength()==0)
+//   			rootLst = docin.getElementsByTagName("Sources");
+//   		if(rootLst.getLength()==0)
+//   			return false;
+    	// System.out.println(docin.getDocumentElement().getTagName());
+        return true;
+    }
+
+    /**
+	 * String used to identify this import filter on the command line.
+	 * 
+	 * @override
+	 * @return "msbib"
+	 */
+	public String getCLIid() {
+		return "msbib";
+	}
+
+    public List<BibtexEntry> importEntries(InputStream in, OutputPrinter status) throws IOException {
+
+        MSBibDatabase dbase = new MSBibDatabase();
+
+        List<BibtexEntry> entries = dbase.importEntries(in);
+
+        return entries;
+    }
+
+    public String getFormatName() {
+        // This method should return the name of this import format.
+        return "MSBib";
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/OAI2Fetcher.java b/src/java/net/sf/jabref/imports/OAI2Fetcher.java
index 9fef00e..564a432 100644
--- a/src/java/net/sf/jabref/imports/OAI2Fetcher.java
+++ b/src/java/net/sf/jabref/imports/OAI2Fetcher.java
@@ -1,335 +1,335 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLEncoder;
-import java.util.Date;
-
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.Util;
-
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * 
- * This class can be used to access any archive offering an OAI2 interface. By
- * default it will access ArXiv.org
- * 
- * @author Ulrich Stärk
- * @author Christian Kopf
- * 
- * @version $Revision$ ($Date$)
- * 
- */
-public class OAI2Fetcher implements EntryFetcher {
-
-    public static final String OAI2_ARXIV_PREFIXIDENTIFIER = "oai%3AarXiv.org%3A";
-
-    public static final String OAI2_ARXIV_HOST = "export.arxiv.org";
-
-    public static final String OAI2_ARXIV_SCRIPT = "oai2";
-
-    public static final String OAI2_ARXIV_METADATAPREFIX = "arXiv";
-
-    public static final String OAI2_ARXIV_ARCHIVENAME = "ArXiv.org";
-
-    public static final String OAI2_IDENTIFIER_FIELD = "oai2identifier";
-
-    private SAXParserFactory parserFactory;
-
-    private SAXParser saxParser;
-
-    private String oai2Host;
-
-    private String oai2Script;
-
-    private String oai2MetaDataPrefix;
-
-    private String oai2PrefixIdentifier;
-
-    private String oai2ArchiveName;
-
-    private boolean shouldContinue = true;
-
-    private OutputPrinter status;
-
-    /**
-     * some archives - like ArXiv.org - might expect of you to wait some time 
-     */
-    private boolean shouldWait() {
-        return waitTime > 0;
-    }
-
-    private long waitTime = -1;
-
-    private Date lastCall;
-
-    /**
-     * 
-     * 
-     * @param oai2Host
-     *            the host to query without leading http:// and without trailing /
-     * @param oai2Script
-     *            the relative location of the oai2 interface without leading
-     *            and trailing /
-     * @param oai2Metadataprefix
-     *            the urlencoded metadataprefix
-     * @param oai2Prefixidentifier
-     *            the urlencoded prefix identifier
-     * @param waitTimeMs
-     *            Time to wait in milliseconds between query-requests.
-     */
-    public OAI2Fetcher(String oai2Host, String oai2Script, String oai2Metadataprefix,
-        String oai2Prefixidentifier, String oai2ArchiveName, long waitTimeMs) {
-        this.oai2Host = oai2Host;
-        this.oai2Script = oai2Script;
-        this.oai2MetaDataPrefix = oai2Metadataprefix;
-        this.oai2PrefixIdentifier = oai2Prefixidentifier;
-        this.oai2ArchiveName = oai2ArchiveName;
-        this.waitTime = waitTimeMs;
-        try {
-            parserFactory = SAXParserFactory.newInstance();
-            saxParser = parserFactory.newSAXParser();
-        } catch (ParserConfigurationException e) {
-            e.printStackTrace();
-        } catch (SAXException e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * Default Constructor. The archive queried will be ArXiv.org
-     * 
-     */
-    public OAI2Fetcher() {
-        this(OAI2_ARXIV_HOST, OAI2_ARXIV_SCRIPT, OAI2_ARXIV_METADATAPREFIX,
-            OAI2_ARXIV_PREFIXIDENTIFIER, OAI2_ARXIV_ARCHIVENAME, 20000L);
-    }
-
-    /**
-     * Construct the query URL
-     * 
-     * @param key
-     *            The key of the OAI2 entry that the url should point to.
-     *            
-     * @return a String denoting the query URL
-     */
-    public String constructUrl(String key) {
-        String identifier = "";
-        try {
-            identifier = URLEncoder.encode(key, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            return "";
-        }
-        StringBuffer sb = new StringBuffer("http://").append(oai2Host).append("/");
-        sb.append(oai2Script).append("?");
-        sb.append("verb=GetRecord");
-        sb.append("&identifier=");
-        sb.append(oai2PrefixIdentifier);
-        sb.append(identifier);
-        sb.append("&metadataPrefix=").append(oai2MetaDataPrefix);
-        return sb.toString();
-    }
-    
-    /**
-     * Strip subcategories from ArXiv key.
-     * 
-     * @param key The key to fix.
-     * @return Fixed key.
-     */
-    public static String fixKey(String key){
-        
-        if (key.toLowerCase().startsWith("arxiv:")){
-            key = key.substring(6);
-        }
-        
-        int dot = key.indexOf('.');
-        int slash = key.indexOf('/');
-        
-        if (dot > -1 && dot < slash) {
-            key = key.substring(0, dot) + key.substring(slash, key.length());
-        }
-    
-        return key;
-    }
-
-    public static String correctLineBreaks(String s){
-        s = s.replaceAll("\\n(?!\\s*\\n)", " ");
-        s = s.replaceAll("\\s*\\n\\s*", "\n");
-        return s.replaceAll(" {2,}", " ").replaceAll("(^\\s*|\\s+$)", "");
-    }
-    
-    /**
-     * Import an entry from an OAI2 archive. The BibtexEntry provided has to
-     * have the field OAI2_IDENTIFIER_FIELD set to the search string.
-     * 
-     * @param key
-     *            The OAI2 key to fetch from ArXiv.
-     * @return The imported BibtexEntry or null if none.
-     */
-    public BibtexEntry importOai2Entry(String key) {
-        /**
-         * Fix for problem reported in mailing-list: 
-         *   https://sourceforge.net/forum/message.php?msg_id=4087158
-         */
-        key = fixKey(key);
-        
-        String url = constructUrl(key);
-        try {
-            URL oai2Url = new URL(url);
-            HttpURLConnection oai2Connection = (HttpURLConnection) oai2Url.openConnection();
-            oai2Connection.setRequestProperty("User-Agent", "Jabref");
-            InputStream inputStream = oai2Connection.getInputStream();
-    
-            /* create an empty BibtexEntry and set the oai2identifier field */
-            BibtexEntry be = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.ARTICLE);
-            be.setField(OAI2_IDENTIFIER_FIELD, key);
-            DefaultHandler handlerBase = new OAI2Handler(be);
-            /* parse the result */
-            saxParser.parse(inputStream, handlerBase);
-            
-            /* Correct line breaks and spacing */
-            for (String name : be.getAllFields()){
-                be.setField(name, OAI2Fetcher.correctLineBreaks(be.getField(name).toString()));
-            }
-            
-            if (key.matches("\\d\\d\\d\\d\\..*")){
-                be.setField("year", "20" + key.substring(0,2));
-                
-                int month = Integer.parseInt(key.substring(2,4));
-                if (month >= 1 && month <= 12){
-                    be.setField("month", "#" + Globals.MONTHS[month - 1] + "#");
-                }
-            }
-            
-            return be;
-        } catch (IOException e) {
-            status.showMessage(Globals.lang(
-                "An Exception ocurred while accessing '%0'", url)
-                + "\n\n" + e.toString(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
-        } catch (SAXException e) {
-            status.showMessage(Globals.lang(
-                "An SAXException ocurred while parsing '%0':", new String[]{url})
-                + "\n\n" + e.getMessage(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
-        } catch (RuntimeException e){
-            status.showMessage(Globals.lang(
-                "An Error occurred while fetching from OAI2 source (%0):", new String[]{url})
-                + "\n\n" + e.getMessage(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
-        } 
-        return null;
-    }
-
-    public String getHelpPage() {
-        // there is no helppage
-        return null;
-    }
-
-    public URL getIcon() {
-        return GUIGlobals.getIconUrl("www");
-    }
-
-    public String getKeyName() {
-        return oai2ArchiveName;
-    }
-
-    public JPanel getOptionsPanel() {
-        // we have no additional options
-        return null;
-    }
-
-    public String getTitle() {
-        return Globals.menuTitle(getKeyName());
-    }
-
-    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
-
-        this.status = status;
-
-        try {
-            shouldContinue = true;
-            
-            /* multiple keys can be delimited by ; or space */
-            query = query.replaceAll(" ", ";");
-            String[] keys = query.split(";");
-            for (int i = 0; i < keys.length; i++) {
-                String key = keys[i];
-                
-                /*
-                 * some archives - like arxive.org - might expect of you to wait
-                 * some time
-                 */
-                if (shouldWait() && lastCall != null) {
-
-                    long elapsed = new Date().getTime() - lastCall.getTime();
-
-                    while (elapsed < waitTime) {
-                        status.setStatus(Globals.lang("Waiting for ArXiv...") + ((waitTime - elapsed) / 1000) + " s");
-                        Thread.sleep(1000);
-                        elapsed = new Date().getTime() - lastCall.getTime();
-                    }
-                }
-
-                status.setStatus(Globals.lang("Processing ") + key);
-
-                /* the cancel button has been hit */
-                if (!shouldContinue) {
-                    break;
-                }
-                
-                /* query the archive and load the results into the BibtexEntry */
-                BibtexEntry be = importOai2Entry(key);
-
-                if (shouldWait()) {
-                    lastCall = new Date();
-                }
-                
-                /* add the entry to the inspection dialog */
-                if (be != null) {
-                    dialog.addEntry(be);
-                }
-
-                /* update the dialogs progress bar */
-                dialog.setProgress(i + 1, keys.length);
-            }
-            
-            return true;
-        } catch (Exception e) {
-            status.setStatus(Globals.lang("Error while fetching from OAI2")+ ": " + e.getMessage());
-            e.printStackTrace();
-        }
-        return false;
-    }
-
-    public void stopFetching() {
-        shouldContinue = false;
-    }
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.Date;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.Util;
+
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * 
+ * This class can be used to access any archive offering an OAI2 interface. By
+ * default it will access ArXiv.org
+ * 
+ * @author Ulrich Stärk
+ * @author Christian Kopf
+ * 
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class OAI2Fetcher implements EntryFetcher {
+
+    public static final String OAI2_ARXIV_PREFIXIDENTIFIER = "oai%3AarXiv.org%3A";
+
+    public static final String OAI2_ARXIV_HOST = "export.arxiv.org";
+
+    public static final String OAI2_ARXIV_SCRIPT = "oai2";
+
+    public static final String OAI2_ARXIV_METADATAPREFIX = "arXiv";
+
+    public static final String OAI2_ARXIV_ARCHIVENAME = "ArXiv.org";
+
+    public static final String OAI2_IDENTIFIER_FIELD = "oai2identifier";
+
+    private SAXParserFactory parserFactory;
+
+    private SAXParser saxParser;
+
+    private String oai2Host;
+
+    private String oai2Script;
+
+    private String oai2MetaDataPrefix;
+
+    private String oai2PrefixIdentifier;
+
+    private String oai2ArchiveName;
+
+    private boolean shouldContinue = true;
+
+    private OutputPrinter status;
+
+    /**
+     * some archives - like ArXiv.org - might expect of you to wait some time 
+     */
+    private boolean shouldWait() {
+        return waitTime > 0;
+    }
+
+    private long waitTime = -1;
+
+    private Date lastCall;
+
+    /**
+     * 
+     * 
+     * @param oai2Host
+     *            the host to query without leading http:// and without trailing /
+     * @param oai2Script
+     *            the relative location of the oai2 interface without leading
+     *            and trailing /
+     * @param oai2Metadataprefix
+     *            the urlencoded metadataprefix
+     * @param oai2Prefixidentifier
+     *            the urlencoded prefix identifier
+     * @param waitTimeMs
+     *            Time to wait in milliseconds between query-requests.
+     */
+    public OAI2Fetcher(String oai2Host, String oai2Script, String oai2Metadataprefix,
+        String oai2Prefixidentifier, String oai2ArchiveName, long waitTimeMs) {
+        this.oai2Host = oai2Host;
+        this.oai2Script = oai2Script;
+        this.oai2MetaDataPrefix = oai2Metadataprefix;
+        this.oai2PrefixIdentifier = oai2Prefixidentifier;
+        this.oai2ArchiveName = oai2ArchiveName;
+        this.waitTime = waitTimeMs;
+        try {
+            parserFactory = SAXParserFactory.newInstance();
+            saxParser = parserFactory.newSAXParser();
+        } catch (ParserConfigurationException e) {
+            e.printStackTrace();
+        } catch (SAXException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Default Constructor. The archive queried will be ArXiv.org
+     * 
+     */
+    public OAI2Fetcher() {
+        this(OAI2_ARXIV_HOST, OAI2_ARXIV_SCRIPT, OAI2_ARXIV_METADATAPREFIX,
+            OAI2_ARXIV_PREFIXIDENTIFIER, OAI2_ARXIV_ARCHIVENAME, 20000L);
+    }
+
+    /**
+     * Construct the query URL
+     * 
+     * @param key
+     *            The key of the OAI2 entry that the url should point to.
+     *            
+     * @return a String denoting the query URL
+     */
+    public String constructUrl(String key) {
+        String identifier = "";
+        try {
+            identifier = URLEncoder.encode(key, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            return "";
+        }
+        StringBuffer sb = new StringBuffer("http://").append(oai2Host).append("/");
+        sb.append(oai2Script).append("?");
+        sb.append("verb=GetRecord");
+        sb.append("&identifier=");
+        sb.append(oai2PrefixIdentifier);
+        sb.append(identifier);
+        sb.append("&metadataPrefix=").append(oai2MetaDataPrefix);
+        return sb.toString();
+    }
+    
+    /**
+     * Strip subcategories from ArXiv key.
+     * 
+     * @param key The key to fix.
+     * @return Fixed key.
+     */
+    public static String fixKey(String key){
+        
+        if (key.toLowerCase().startsWith("arxiv:")){
+            key = key.substring(6);
+        }
+        
+        int dot = key.indexOf('.');
+        int slash = key.indexOf('/');
+        
+        if (dot > -1 && dot < slash) {
+            key = key.substring(0, dot) + key.substring(slash, key.length());
+        }
+    
+        return key;
+    }
+
+    public static String correctLineBreaks(String s){
+        s = s.replaceAll("\\n(?!\\s*\\n)", " ");
+        s = s.replaceAll("\\s*\\n\\s*", "\n");
+        return s.replaceAll(" {2,}", " ").replaceAll("(^\\s*|\\s+$)", "");
+    }
+    
+    /**
+     * Import an entry from an OAI2 archive. The BibtexEntry provided has to
+     * have the field OAI2_IDENTIFIER_FIELD set to the search string.
+     * 
+     * @param key
+     *            The OAI2 key to fetch from ArXiv.
+     * @return The imported BibtexEntry or null if none.
+     */
+    public BibtexEntry importOai2Entry(String key) {
+        /**
+         * Fix for problem reported in mailing-list: 
+         *   https://sourceforge.net/forum/message.php?msg_id=4087158
+         */
+        key = fixKey(key);
+        
+        String url = constructUrl(key);
+        try {
+            URL oai2Url = new URL(url);
+            HttpURLConnection oai2Connection = (HttpURLConnection) oai2Url.openConnection();
+            oai2Connection.setRequestProperty("User-Agent", "Jabref");
+            InputStream inputStream = oai2Connection.getInputStream();
+    
+            /* create an empty BibtexEntry and set the oai2identifier field */
+            BibtexEntry be = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.ARTICLE);
+            be.setField(OAI2_IDENTIFIER_FIELD, key);
+            DefaultHandler handlerBase = new OAI2Handler(be);
+            /* parse the result */
+            saxParser.parse(inputStream, handlerBase);
+            
+            /* Correct line breaks and spacing */
+            for (String name : be.getAllFields()){
+                be.setField(name, OAI2Fetcher.correctLineBreaks(be.getField(name).toString()));
+            }
+            
+            if (key.matches("\\d\\d\\d\\d\\..*")){
+                be.setField("year", "20" + key.substring(0,2));
+                
+                int month = Integer.parseInt(key.substring(2,4));
+                if (month >= 1 && month <= 12){
+                    be.setField("month", "#" + Globals.MONTHS[month - 1] + "#");
+                }
+            }
+            
+            return be;
+        } catch (IOException e) {
+            status.showMessage(Globals.lang(
+                "An Exception ocurred while accessing '%0'", url)
+                + "\n\n" + e.toString(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        } catch (SAXException e) {
+            status.showMessage(Globals.lang(
+                "An SAXException ocurred while parsing '%0':", new String[]{url})
+                + "\n\n" + e.getMessage(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        } catch (RuntimeException e){
+            status.showMessage(Globals.lang(
+                "An Error occurred while fetching from OAI2 source (%0):", new String[]{url})
+                + "\n\n" + e.getMessage(), Globals.lang(getKeyName()), JOptionPane.ERROR_MESSAGE);
+        } 
+        return null;
+    }
+
+    public String getHelpPage() {
+        // there is no helppage
+        return null;
+    }
+
+    public URL getIcon() {
+        return GUIGlobals.getIconUrl("www");
+    }
+
+    public String getKeyName() {
+        return oai2ArchiveName;
+    }
+
+    public JPanel getOptionsPanel() {
+        // we have no additional options
+        return null;
+    }
+
+    public String getTitle() {
+        return Globals.menuTitle(getKeyName());
+    }
+
+    public boolean processQuery(String query, ImportInspector dialog, OutputPrinter status) {
+
+        this.status = status;
+
+        try {
+            shouldContinue = true;
+            
+            /* multiple keys can be delimited by ; or space */
+            query = query.replaceAll(" ", ";");
+            String[] keys = query.split(";");
+            for (int i = 0; i < keys.length; i++) {
+                String key = keys[i];
+                
+                /*
+                 * some archives - like arxive.org - might expect of you to wait
+                 * some time
+                 */
+                if (shouldWait() && lastCall != null) {
+
+                    long elapsed = new Date().getTime() - lastCall.getTime();
+
+                    while (elapsed < waitTime) {
+                        status.setStatus(Globals.lang("Waiting for ArXiv...") + ((waitTime - elapsed) / 1000) + " s");
+                        Thread.sleep(1000);
+                        elapsed = new Date().getTime() - lastCall.getTime();
+                    }
+                }
+
+                status.setStatus(Globals.lang("Processing ") + key);
+
+                /* the cancel button has been hit */
+                if (!shouldContinue) {
+                    break;
+                }
+                
+                /* query the archive and load the results into the BibtexEntry */
+                BibtexEntry be = importOai2Entry(key);
+
+                if (shouldWait()) {
+                    lastCall = new Date();
+                }
+                
+                /* add the entry to the inspection dialog */
+                if (be != null) {
+                    dialog.addEntry(be);
+                }
+
+                /* update the dialogs progress bar */
+                dialog.setProgress(i + 1, keys.length);
+            }
+            
+            return true;
+        } catch (Exception e) {
+            status.setStatus(Globals.lang("Error while fetching from OAI2")+ ": " + e.getMessage());
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    public void stopFetching() {
+        shouldContinue = false;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/OAI2Handler.java b/src/java/net/sf/jabref/imports/OAI2Handler.java
index 7501997..9230ec0 100644
--- a/src/java/net/sf/jabref/imports/OAI2Handler.java
+++ b/src/java/net/sf/jabref/imports/OAI2Handler.java
@@ -1,115 +1,115 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import net.sf.jabref.BibtexEntry;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * SAX-Handler to parse OAI2-xml files.
- * 
- * @author Ulrich Stärk
- * @author Christian Kopf
- * @author Christopher Oezbek
- * 
- * @version $Revision$ ($Date$)
- * 
- */
-public class OAI2Handler extends DefaultHandler {
-
-	BibtexEntry entry;
-
-	StringBuffer authors;
-
-	String keyname;
-
-	String forenames;
-
-	StringBuffer characters;
-
-	public OAI2Handler(BibtexEntry be) {
-		this.entry = be;
-	}
-	
-	public void startDocument() throws SAXException {
-		authors = new StringBuffer();
-	}
-
-	public void characters(char[] ch, int start, int length) throws SAXException {
-		characters.append(ch, start, length);
-	}
-
-	public void startElement(String uri, String localName, String qualifiedName,
-		Attributes attributes) throws SAXException {
-
-		characters = new StringBuffer();
-	}
-
-	public void endElement(String uri, String localName, String qualifiedName) throws SAXException {
-
-		String content = characters.toString();
-
-		if (qualifiedName.equals("error")) {
-			throw new RuntimeException(content);
-		} else if (qualifiedName.equals("id")) {
-			entry.setField("eprint", content);
-		} else if (qualifiedName.equals("keyname")) {
-			keyname = content;
-		} else if (qualifiedName.equals("forenames")) {
-			forenames = content;
-		} else if (qualifiedName.equals("journal-ref")) {
-			String journal = content.replaceFirst("[0-9].*", "");
-			entry.setField("journal", journal);
-			String volume = content.replaceFirst(journal, "");
-			volume = volume.replaceFirst(" .*", "");
-			entry.setField("volume", volume);
-			String year = content.replaceFirst(".*?\\(", "");
-			year = year.replaceFirst("\\).*", "");
-			entry.setField("year", year);
-			String pages = content.replaceFirst(journal, "");
-			pages = pages.replaceFirst(volume, "");
-			pages = pages.replaceFirst("\\(" + year + "\\)", "");
-			pages = pages.replaceAll(" ", "");
-			entry.setField("pages", pages);
-		} else if (qualifiedName.equals("datestamp")) {
-			String year = entry.getField("year");
-			if (year == null || year.equals("")) {
-				entry.setField("year", content.replaceFirst("-.*", ""));
-			}
-		} else if (qualifiedName.equals("title")) {
-			entry.setField("title", content);
-		} else if (qualifiedName.equals("abstract")) {
-			entry.setField("abstract", content);
-		} else if (qualifiedName.equals("comments")) {
-			entry.setField("comments", content);
-		} else if (qualifiedName.equals("report-no")) {
-			entry.setField("reportno", content);
-		} else if (qualifiedName.equals("author")) {
-			String author = forenames + " " + keyname;
-			if (authors.length() > 0)
-				authors.append(" and ");
-			authors.append(author);
-		}
-	}
-
-	public void endDocument() throws SAXException {
-		entry.setField("author", authors.toString());
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import net.sf.jabref.BibtexEntry;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * SAX-Handler to parse OAI2-xml files.
+ * 
+ * @author Ulrich Stärk
+ * @author Christian Kopf
+ * @author Christopher Oezbek
+ * 
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class OAI2Handler extends DefaultHandler {
+
+	BibtexEntry entry;
+
+	StringBuffer authors;
+
+	String keyname;
+
+	String forenames;
+
+	StringBuffer characters;
+
+	public OAI2Handler(BibtexEntry be) {
+		this.entry = be;
+	}
+	
+	public void startDocument() throws SAXException {
+		authors = new StringBuffer();
+	}
+
+	public void characters(char[] ch, int start, int length) throws SAXException {
+		characters.append(ch, start, length);
+	}
+
+	public void startElement(String uri, String localName, String qualifiedName,
+		Attributes attributes) throws SAXException {
+
+		characters = new StringBuffer();
+	}
+
+	public void endElement(String uri, String localName, String qualifiedName) throws SAXException {
+
+		String content = characters.toString();
+
+		if (qualifiedName.equals("error")) {
+			throw new RuntimeException(content);
+		} else if (qualifiedName.equals("id")) {
+			entry.setField("eprint", content);
+		} else if (qualifiedName.equals("keyname")) {
+			keyname = content;
+		} else if (qualifiedName.equals("forenames")) {
+			forenames = content;
+		} else if (qualifiedName.equals("journal-ref")) {
+			String journal = content.replaceFirst("[0-9].*", "");
+			entry.setField("journal", journal);
+			String volume = content.replaceFirst(journal, "");
+			volume = volume.replaceFirst(" .*", "");
+			entry.setField("volume", volume);
+			String year = content.replaceFirst(".*?\\(", "");
+			year = year.replaceFirst("\\).*", "");
+			entry.setField("year", year);
+			String pages = content.replaceFirst(journal, "");
+			pages = pages.replaceFirst(volume, "");
+			pages = pages.replaceFirst("\\(" + year + "\\)", "");
+			pages = pages.replaceAll(" ", "");
+			entry.setField("pages", pages);
+		} else if (qualifiedName.equals("datestamp")) {
+			String year = entry.getField("year");
+			if (year == null || year.equals("")) {
+				entry.setField("year", content.replaceFirst("-.*", ""));
+			}
+		} else if (qualifiedName.equals("title")) {
+			entry.setField("title", content);
+		} else if (qualifiedName.equals("abstract")) {
+			entry.setField("abstract", content);
+		} else if (qualifiedName.equals("comments")) {
+			entry.setField("comments", content);
+		} else if (qualifiedName.equals("report-no")) {
+			entry.setField("reportno", content);
+		} else if (qualifiedName.equals("author")) {
+			String author = forenames + " " + keyname;
+			if (authors.length() > 0)
+				authors.append(" and ");
+			authors.append(author);
+		}
+	}
+
+	public void endDocument() throws SAXException {
+		entry.setField("author", authors.toString());
+	}
+
+}
diff --git a/src/java/net/sf/jabref/imports/OpenDatabaseAction.java b/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
index 3fe069d..ef8ab2e 100644
--- a/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
+++ b/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
@@ -1,452 +1,452 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.io.IOException;
-import java.io.Reader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.logging.Logger;
-
-import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
-
-import net.sf.jabref.*;
-
-import net.sf.jabref.export.AutoSaveManager;
-import net.sf.jabref.export.SaveSession;
-import net.sf.jabref.gui.FileDialogs;
-import net.sf.jabref.external.FileLinksUpgradeWarning;
-import net.sf.jabref.label.HandleDuplicateWarnings;
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-import net.sf.jabref.undo.NamedCompound;
-
-// The action concerned with opening an existing database.
-
-public class OpenDatabaseAction extends MnemonicAwareAction {
-    private static Logger logger = Logger.getLogger(OpenDatabaseAction.class.toString());
-
-    boolean showDialog;
-    private JabRefFrame frame;
-
-    // List of actions that may need to be called after opening the file. Such as
-    // upgrade actions etc. that may depend on the JabRef version that wrote the file:
-    private static ArrayList<PostOpenAction> postOpenActions =
-            new ArrayList<PostOpenAction>();
-
-    static {
-        // Add the action for checking for new custom entry types loaded from
-        // the bib file:
-        postOpenActions.add(new CheckForNewEntryTypesAction());
-        // Add the action for the new external file handling system in version 2.3:
-        postOpenActions.add(new FileLinksUpgradeWarning());
-        // Add the action for warning about and handling duplicate BibTeX keys:
-        postOpenActions.add(new HandleDuplicateWarnings());
-    }
-
-    public OpenDatabaseAction(JabRefFrame frame, boolean showDialog) {
-        super(GUIGlobals.getImage("open"));
-        this.frame = frame;
-        this.showDialog = showDialog;
-        putValue(NAME, "Open database");
-        putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Open database"));
-        putValue(SHORT_DESCRIPTION, Globals.lang("Open BibTeX database"));
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        List<File> filesToOpen = new ArrayList<File>();
-        //File fileToOpen = null;
-
-        if (showDialog) {
-
-            String[] chosen = FileDialogs.getMultipleFiles(frame, new File(Globals.prefs.get("workingDirectory")), ".bib",
-                    true);
-            if (chosen != null) for (int i=0; i<chosen.length; i++) {
-                if (chosen[i] != null)
-                    filesToOpen.add(new File(chosen[i]));
-            }
-
-            /*
-            String chosenFile = Globals.getNewFile(frame,
-                    new File(Globals.prefs.get("workingDirectory")), ".bib",
-                    JFileChooser.OPEN_DIALOG, true);
-
-            if (chosenFile != null) {
-                fileToOpen = new File(chosenFile);
-            }*/
-        } else {
-            Util.pr(NAME);
-            Util.pr(e.getActionCommand());
-            filesToOpen.add(new File(Util.checkName(e.getActionCommand())));
-        }
-
-        BasePanel toRaise = null;
-        int initialCount = filesToOpen.size(), removed = 0;
-        
-        // Check if any of the files are already open:
-        for (Iterator<File> iterator = filesToOpen.iterator(); iterator.hasNext();) {
-            File file = iterator.next();
-            for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
-                BasePanel bp = frame.baseAt(i);
-                if ((bp.getFile() != null) && bp.getFile().equals(file)) {
-                    iterator.remove();
-                    removed++;
-                    // See if we removed the final one. If so, we must perhaps
-                    // raise the BasePanel in question:
-                    if (removed == initialCount) {
-                        toRaise = bp;
-                    }
-                    break;
-                }
-            }
-        }
-
-
-        // Run the actual open in a thread to prevent the program
-        // locking until the file is loaded.
-        if (filesToOpen.size() > 0) {
-            final List<File> theFiles = Collections.unmodifiableList(filesToOpen);
-            (new Thread() {
-                public void run() {
-                    for (Iterator<File> i=theFiles.iterator(); i.hasNext();)
-                        openIt(i.next(), true);
-
-                }
-            }).start();
-            for (Iterator<File> i=theFiles.iterator(); i.hasNext();)
-                frame.getFileHistory().newFile(i.next().getPath());
-        }
-        // If no files are remaining to open, this could mean that a file was
-        // already open. If so, we may have to raise the correct tab:
-        else if (toRaise != null) {
-            frame.output(Globals.lang("File '%0' is already open.", toRaise.getFile().getPath()));
-            frame.getTabbedPane().setSelectedComponent(toRaise);
-        }
-    }
-
-    class OpenItSwingHelper implements Runnable {
-        BasePanel bp;
-        boolean raisePanel;
-        File file;
-
-        OpenItSwingHelper(BasePanel bp, File file, boolean raisePanel) {
-            this.bp = bp;
-            this.raisePanel = raisePanel;
-            this.file = file;
-        }
-
-        public void run() {
-            frame.addTab(bp, file, raisePanel);
-
-        }
-    }
-
-    public void openIt(File file, boolean raisePanel) {
-        if ((file != null) && (file.exists())) {
-            File fileToLoad = file;
-            frame.output(Globals.lang("Opening") + ": '" + file.getPath() + "'");
-            boolean tryingAutosave = false;
-            boolean autoSaveFound = AutoSaveManager.newerAutoSaveExists(file);
-            if (autoSaveFound && !Globals.prefs.getBoolean("promptBeforeUsingAutosave")) {
-                // We have found a newer autosave, and the preferences say we should load
-                // it without prompting, so we replace the fileToLoad:
-                fileToLoad = AutoSaveManager.getAutoSaveFile(file);
-                tryingAutosave = true;
-            } else if (autoSaveFound) {
-                // We have found a newer autosave, but we are not allowed to use it without
-                // prompting.
-                int answer = JOptionPane.showConfirmDialog(null,"<html>"+
-                        Globals.lang("An autosave file was found for this database. This could indicate ")
-                            +Globals.lang("that JabRef didn't shut down cleanly last time the file was used.")+"<br>"
-                        +Globals.lang("Do you want to recover the database from the autosave file?")+"</html>",
-                        Globals.lang("Recover from autosave"), JOptionPane.YES_NO_OPTION);
-                if (answer == JOptionPane.YES_OPTION) {
-                    fileToLoad = AutoSaveManager.getAutoSaveFile(file);
-                    tryingAutosave = true;
-                }
-            }
-
-            boolean done = false;
-            while (!done) {
-                String fileName = file.getPath();
-                Globals.prefs.put("workingDirectory", file.getPath());
-                // Should this be done _after_ we know it was successfully opened?
-                String encoding = Globals.prefs.get("defaultEncoding");
-
-                if (Util.hasLockFile(file)) {
-                    long modTime = Util.getLockFileTimeStamp(file);
-                    if ((modTime != -1) && (System.currentTimeMillis() - modTime
-                            > SaveSession.LOCKFILE_CRITICAL_AGE)) {
-                        // The lock file is fairly old, so we can offer to "steal" the file:
-                        int answer = JOptionPane.showConfirmDialog(null, "<html>"+Globals.lang("Error opening file")
-                            +" '"+fileName+"'. "+Globals.lang("File is locked by another JabRef instance.")
-                            +"<p>"+Globals.lang("Do you want to override the file lock?"),
-                            Globals.lang("File locked"), JOptionPane.YES_NO_OPTION);
-                        if (answer == JOptionPane.YES_OPTION) {
-                            Util.deleteLockFile(file);
-                        }
-                        else return;
-                    }
-                    else if (!Util.waitForFileLock(file, 10)) {
-                        JOptionPane.showMessageDialog(null, Globals.lang("Error opening file")
-                            +" '"+fileName+"'. "+Globals.lang("File is locked by another JabRef instance."),
-                            Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-                        return;
-                    }
-
-
-                }
-                ParserResult pr;
-                String errorMessage = null;
-                try {
-                    pr = loadDatabase(fileToLoad, encoding);
-                } catch (Exception ex) {
-                    //ex.printStackTrace();
-                    errorMessage = ex.getMessage();
-                    pr = null;
-                }
-                if ((pr == null) || (pr == ParserResult.INVALID_FORMAT)) {
-                    JOptionPane.showMessageDialog(null, Globals.lang("Error opening file") + " '" + fileName + "'",
-                            Globals.lang("Error"),
-                            JOptionPane.ERROR_MESSAGE);
-
-                    String message = "<html>"+errorMessage+"<p>"+
-                            (tryingAutosave ? Globals.lang("Error opening autosave of '%0'. Trying to load '%0' instead.", file.getName())
-                            : ""/*Globals.lang("Error opening file '%0'.", file.getName())*/)+"</html>";
-                    JOptionPane.showMessageDialog(null, message, Globals.lang("Error opening file"), JOptionPane.ERROR_MESSAGE);
-
-                    if (tryingAutosave) {
-                        tryingAutosave = false;
-                        fileToLoad = file;
-                    }
-                    else
-                        done = true;
-                    continue;
-                } else done = true;
-
-                final BasePanel panel = addNewDatabase(pr, file, raisePanel);
-                if (tryingAutosave)
-                    panel.markNonUndoableBaseChanged();
-
-                // After adding the database, go through our list and see if
-                // any post open actions need to be done. For instance, checking
-                // if we found new entry types that can be imported, or checking
-                // if the database contents should be modified due to new features
-                // in this version of JabRef:
-                final ParserResult prf = pr;
-                SwingUtilities.invokeLater(new Runnable() {
-                    public void run() {
-                        performPostOpenActions(panel, prf, true);
-                    }
-                });
-            }
-
-            
-        }
-    }
-
-    /**
-     * Go through the list of post open actions, and perform those that need
-     * to be performed.
-     * @param panel The BasePanel where the database is shown.
-     * @param pr The result of the bib file parse operation.
-     */
-    public static void performPostOpenActions(BasePanel panel, ParserResult pr,
-                                              boolean mustRaisePanel) {
-        for (Iterator<PostOpenAction> iterator = postOpenActions.iterator(); iterator.hasNext();) {
-            PostOpenAction action = iterator.next();
-            if (action.isActionNecessary(pr)) {
-                if (mustRaisePanel)
-                    panel.frame().getTabbedPane().setSelectedComponent(panel);
-                action.performAction(panel, pr);
-            }
-        }
-    }
-
-    public BasePanel addNewDatabase(ParserResult pr, final File file,
-                               boolean raisePanel) {
-
-        String fileName = file.getPath();
-        BibtexDatabase db = pr.getDatabase();
-        MetaData meta = pr.getMetaData();
-
-        if (pr.hasWarnings()) {
-            final String[] wrns = pr.warnings();
-            (new Thread() {
-                public void run() {
-                    StringBuffer wrn = new StringBuffer();
-                    for (int i = 0; i < wrns.length; i++)
-                        wrn.append(i + 1).append(". ").append(wrns[i]).append("\n");
-
-                    if (wrn.length() > 0)
-                        wrn.deleteCharAt(wrn.length() - 1);
-                    // Note to self or to someone else: The following line causes an
-                    // ArrayIndexOutOfBoundsException in situations with a large number of
-                    // warnings; approx. 5000 for the database I opened when I observed the problem
-                    // (duplicate key warnings). I don't think this is a big problem for normal situations,
-                    // and it may possibly be a bug in the Swing code.
-                    JOptionPane.showMessageDialog(frame, wrn.toString(),
-                            Globals.lang("Warnings")+" ("+file.getName()+")",
-                            JOptionPane.WARNING_MESSAGE);
-                }
-            }).start();
-        }
-        BasePanel bp = new BasePanel(frame, db, file, meta, pr.getEncoding());
-
-        // file is set to null inside the EventDispatcherThread
-        SwingUtilities.invokeLater(new OpenItSwingHelper(bp, file, raisePanel));
-
-        frame.output(Globals.lang("Opened database") + " '" + fileName +
-                "' " + Globals.lang("with") + " " +
-                db.getEntryCount() + " " + Globals.lang("entries") + ".");
-
-        return bp;
-    }
-
-    public static ParserResult loadDatabase(File fileToOpen, String encoding)
-            throws IOException {
-
-        // First we make a quick check to see if this looks like a BibTeX file:
-        Reader reader;// = ImportFormatReader.getReader(fileToOpen, encoding);
-        //if (!BibtexParser.isRecognizedFormat(reader))
-        //    return null;
-
-        // The file looks promising. Reinitialize the reader and go on:
-        //reader = getReader(fileToOpen, encoding);
-
-        // We want to check if there is a JabRef signature in the file, because that would tell us
-        // which character encoding is used. However, to read the signature we must be using a compatible
-        // encoding in the first place. Since the signature doesn't contain any fancy characters, we can
-        // read it regardless of encoding, with either UTF8 or UTF-16. That's the hypothesis, at any rate.
-        // 8 bit is most likely, so we try that first:
-        Reader utf8Reader = ImportFormatReader.getReader(fileToOpen, "UTF8");
-        String suppliedEncoding = checkForEncoding(utf8Reader);
-        utf8Reader.close();
-        // Now if that didn't get us anywhere, we check with the 16 bit encoding:
-        if (suppliedEncoding == null) {
-            Reader utf16Reader = ImportFormatReader.getReader(fileToOpen, "UTF-16");
-            suppliedEncoding = checkForEncoding(utf16Reader);
-            utf16Reader.close();
-            //System.out.println("Result of UTF-16 test: "+suppliedEncoding);
-        }
-
-        //System.out.println(suppliedEncoding != null ? "Encoding: '"+suppliedEncoding+"' Len: "+suppliedEncoding.length() : "no supplied encoding");
-
-        if ((suppliedEncoding != null)) {
-           try {
-               reader = ImportFormatReader.getReader(fileToOpen, suppliedEncoding);
-               encoding = suppliedEncoding; // Just so we put the right info into the ParserResult.
-           } catch (Exception ex) {
-               ex.printStackTrace();
-               reader = ImportFormatReader.getReader(fileToOpen, encoding); // The supplied encoding didn't work out, so we use the default.
-           }
-        } else {
-            // We couldn't find a header with info about encoding. Use default:
-            reader = ImportFormatReader.getReader(fileToOpen, encoding);
-        }
-
-        BibtexParser bp = new BibtexParser(reader);
-
-        ParserResult pr = bp.parse();
-        pr.setEncoding(encoding);
-        pr.setFile(fileToOpen);
-
-        if (SpecialFieldsUtils.keywordSyncEnabled()) {
-        	for (BibtexEntry entry: pr.getDatabase().getEntries()) {
-        		SpecialFieldsUtils.syncSpecialFieldsFromKeywords(entry, null);
-        	}
-        	logger.fine(Globals.lang("Synchronized special fields based on keywords"));
-        }
-
-        if (!pr.getMetaData().isGroupTreeValid())
-            pr.addWarning(Globals.lang("Group tree could not be parsed. If you save the BibTeX database, all groups will be lost."));
-
-        return pr;
-    }
-
-    private static String checkForEncoding(Reader reader) {
-        String suppliedEncoding = null;
-        StringBuffer headerText = new StringBuffer();
-        try {
-            boolean keepon = true;
-            int piv = 0, offset = 0;
-            int c;
-
-            while (keepon) {
-                c = reader.read();
-                if ((piv == 0) && ((c == '%') || (Character.isWhitespace((char)c))))
-                    offset++;
-                else {
-                    headerText.append((char) c);
-                    if (c == GUIGlobals.SIGNATURE.charAt(piv))
-                        piv++;
-                    else //if (((char)c) == '@')
-                        keepon = false;
-                }
-                //System.out.println(headerText.toString());
-                found:
-                if (piv == GUIGlobals.SIGNATURE.length()) {
-                    keepon = false;
-
-                    //if (headerText.length() > GUIGlobals.SIGNATURE.length())
-                    //    System.out.println("'"+headerText.toString().substring(0, headerText.length()-GUIGlobals.SIGNATURE.length())+"'");
-                    // Found the signature. The rest of the line is unknown, so we skip
-                    // it:
-                    while (reader.read() != '\n'){
-                        // keep reading
-                    }
-                    // If the next line starts with something like "% ", handle this:
-                    while (((c =reader.read()) == '%') || (Character.isWhitespace((char)c))){
-                        // keep reading
-                    }
-                    // Then we must skip the "Encoding: ". We may already have read the first
-                    // character:
-                    if ((char)c != GUIGlobals.encPrefix.charAt(0))
-                        break found;
-
-                    for (int i = 1; i < GUIGlobals.encPrefix.length(); i++) {
-                        if (reader.read() != GUIGlobals.encPrefix.charAt(i))
-                            break found; // No,
-                        // it
-                        // doesn't
-                        // seem
-                        // to
-                        // match.
-                    }
-                    
-                    // If ok, then read the rest of the line, which should contain the
-                    // name
-                    // of the encoding:
-                    StringBuffer sb = new StringBuffer();
-
-                    while ((c = reader.read()) != '\n') {
-                        sb.append((char) c);
-                    }
-
-
-                    suppliedEncoding = sb.toString();
-                }
-            }
-        } catch (IOException ex) {
-        }
-        return suppliedEncoding != null ? suppliedEncoding.trim() : null;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Logger;
+
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+
+import net.sf.jabref.*;
+
+import net.sf.jabref.export.AutoSaveManager;
+import net.sf.jabref.export.SaveSession;
+import net.sf.jabref.gui.FileDialogs;
+import net.sf.jabref.external.FileLinksUpgradeWarning;
+import net.sf.jabref.label.HandleDuplicateWarnings;
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+import net.sf.jabref.undo.NamedCompound;
+
+// The action concerned with opening an existing database.
+
+public class OpenDatabaseAction extends MnemonicAwareAction {
+    private static Logger logger = Logger.getLogger(OpenDatabaseAction.class.toString());
+
+    boolean showDialog;
+    private JabRefFrame frame;
+
+    // List of actions that may need to be called after opening the file. Such as
+    // upgrade actions etc. that may depend on the JabRef version that wrote the file:
+    private static ArrayList<PostOpenAction> postOpenActions =
+            new ArrayList<PostOpenAction>();
+
+    static {
+        // Add the action for checking for new custom entry types loaded from
+        // the bib file:
+        postOpenActions.add(new CheckForNewEntryTypesAction());
+        // Add the action for the new external file handling system in version 2.3:
+        postOpenActions.add(new FileLinksUpgradeWarning());
+        // Add the action for warning about and handling duplicate BibTeX keys:
+        postOpenActions.add(new HandleDuplicateWarnings());
+    }
+
+    public OpenDatabaseAction(JabRefFrame frame, boolean showDialog) {
+        super(GUIGlobals.getImage("open"));
+        this.frame = frame;
+        this.showDialog = showDialog;
+        putValue(NAME, "Open database");
+        putValue(ACCELERATOR_KEY, Globals.prefs.getKey("Open database"));
+        putValue(SHORT_DESCRIPTION, Globals.lang("Open BibTeX database"));
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        List<File> filesToOpen = new ArrayList<File>();
+        //File fileToOpen = null;
+
+        if (showDialog) {
+
+            String[] chosen = FileDialogs.getMultipleFiles(frame, new File(Globals.prefs.get("workingDirectory")), ".bib",
+                    true);
+            if (chosen != null) for (int i=0; i<chosen.length; i++) {
+                if (chosen[i] != null)
+                    filesToOpen.add(new File(chosen[i]));
+            }
+
+            /*
+            String chosenFile = Globals.getNewFile(frame,
+                    new File(Globals.prefs.get("workingDirectory")), ".bib",
+                    JFileChooser.OPEN_DIALOG, true);
+
+            if (chosenFile != null) {
+                fileToOpen = new File(chosenFile);
+            }*/
+        } else {
+            Util.pr(NAME);
+            Util.pr(e.getActionCommand());
+            filesToOpen.add(new File(Util.checkName(e.getActionCommand())));
+        }
+
+        BasePanel toRaise = null;
+        int initialCount = filesToOpen.size(), removed = 0;
+        
+        // Check if any of the files are already open:
+        for (Iterator<File> iterator = filesToOpen.iterator(); iterator.hasNext();) {
+            File file = iterator.next();
+            for (int i=0; i<frame.getTabbedPane().getTabCount(); i++) {
+                BasePanel bp = frame.baseAt(i);
+                if ((bp.getFile() != null) && bp.getFile().equals(file)) {
+                    iterator.remove();
+                    removed++;
+                    // See if we removed the final one. If so, we must perhaps
+                    // raise the BasePanel in question:
+                    if (removed == initialCount) {
+                        toRaise = bp;
+                    }
+                    break;
+                }
+            }
+        }
+
+
+        // Run the actual open in a thread to prevent the program
+        // locking until the file is loaded.
+        if (filesToOpen.size() > 0) {
+            final List<File> theFiles = Collections.unmodifiableList(filesToOpen);
+            (new Thread() {
+                public void run() {
+                    for (Iterator<File> i=theFiles.iterator(); i.hasNext();)
+                        openIt(i.next(), true);
+
+                }
+            }).start();
+            for (Iterator<File> i=theFiles.iterator(); i.hasNext();)
+                frame.getFileHistory().newFile(i.next().getPath());
+        }
+        // If no files are remaining to open, this could mean that a file was
+        // already open. If so, we may have to raise the correct tab:
+        else if (toRaise != null) {
+            frame.output(Globals.lang("File '%0' is already open.", toRaise.getFile().getPath()));
+            frame.getTabbedPane().setSelectedComponent(toRaise);
+        }
+    }
+
+    class OpenItSwingHelper implements Runnable {
+        BasePanel bp;
+        boolean raisePanel;
+        File file;
+
+        OpenItSwingHelper(BasePanel bp, File file, boolean raisePanel) {
+            this.bp = bp;
+            this.raisePanel = raisePanel;
+            this.file = file;
+        }
+
+        public void run() {
+            frame.addTab(bp, file, raisePanel);
+
+        }
+    }
+
+    public void openIt(File file, boolean raisePanel) {
+        if ((file != null) && (file.exists())) {
+            File fileToLoad = file;
+            frame.output(Globals.lang("Opening") + ": '" + file.getPath() + "'");
+            boolean tryingAutosave = false;
+            boolean autoSaveFound = AutoSaveManager.newerAutoSaveExists(file);
+            if (autoSaveFound && !Globals.prefs.getBoolean("promptBeforeUsingAutosave")) {
+                // We have found a newer autosave, and the preferences say we should load
+                // it without prompting, so we replace the fileToLoad:
+                fileToLoad = AutoSaveManager.getAutoSaveFile(file);
+                tryingAutosave = true;
+            } else if (autoSaveFound) {
+                // We have found a newer autosave, but we are not allowed to use it without
+                // prompting.
+                int answer = JOptionPane.showConfirmDialog(null,"<html>"+
+                        Globals.lang("An autosave file was found for this database. This could indicate ")
+                            +Globals.lang("that JabRef didn't shut down cleanly last time the file was used.")+"<br>"
+                        +Globals.lang("Do you want to recover the database from the autosave file?")+"</html>",
+                        Globals.lang("Recover from autosave"), JOptionPane.YES_NO_OPTION);
+                if (answer == JOptionPane.YES_OPTION) {
+                    fileToLoad = AutoSaveManager.getAutoSaveFile(file);
+                    tryingAutosave = true;
+                }
+            }
+
+            boolean done = false;
+            while (!done) {
+                String fileName = file.getPath();
+                Globals.prefs.put("workingDirectory", file.getPath());
+                // Should this be done _after_ we know it was successfully opened?
+                String encoding = Globals.prefs.get("defaultEncoding");
+
+                if (Util.hasLockFile(file)) {
+                    long modTime = Util.getLockFileTimeStamp(file);
+                    if ((modTime != -1) && (System.currentTimeMillis() - modTime
+                            > SaveSession.LOCKFILE_CRITICAL_AGE)) {
+                        // The lock file is fairly old, so we can offer to "steal" the file:
+                        int answer = JOptionPane.showConfirmDialog(null, "<html>"+Globals.lang("Error opening file")
+                            +" '"+fileName+"'. "+Globals.lang("File is locked by another JabRef instance.")
+                            +"<p>"+Globals.lang("Do you want to override the file lock?"),
+                            Globals.lang("File locked"), JOptionPane.YES_NO_OPTION);
+                        if (answer == JOptionPane.YES_OPTION) {
+                            Util.deleteLockFile(file);
+                        }
+                        else return;
+                    }
+                    else if (!Util.waitForFileLock(file, 10)) {
+                        JOptionPane.showMessageDialog(null, Globals.lang("Error opening file")
+                            +" '"+fileName+"'. "+Globals.lang("File is locked by another JabRef instance."),
+                            Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+                        return;
+                    }
+
+
+                }
+                ParserResult pr;
+                String errorMessage = null;
+                try {
+                    pr = loadDatabase(fileToLoad, encoding);
+                } catch (Exception ex) {
+                    //ex.printStackTrace();
+                    errorMessage = ex.getMessage();
+                    pr = null;
+                }
+                if ((pr == null) || (pr == ParserResult.INVALID_FORMAT)) {
+                    JOptionPane.showMessageDialog(null, Globals.lang("Error opening file") + " '" + fileName + "'",
+                            Globals.lang("Error"),
+                            JOptionPane.ERROR_MESSAGE);
+
+                    String message = "<html>"+errorMessage+"<p>"+
+                            (tryingAutosave ? Globals.lang("Error opening autosave of '%0'. Trying to load '%0' instead.", file.getName())
+                            : ""/*Globals.lang("Error opening file '%0'.", file.getName())*/)+"</html>";
+                    JOptionPane.showMessageDialog(null, message, Globals.lang("Error opening file"), JOptionPane.ERROR_MESSAGE);
+
+                    if (tryingAutosave) {
+                        tryingAutosave = false;
+                        fileToLoad = file;
+                    }
+                    else
+                        done = true;
+                    continue;
+                } else done = true;
+
+                final BasePanel panel = addNewDatabase(pr, file, raisePanel);
+                if (tryingAutosave)
+                    panel.markNonUndoableBaseChanged();
+
+                // After adding the database, go through our list and see if
+                // any post open actions need to be done. For instance, checking
+                // if we found new entry types that can be imported, or checking
+                // if the database contents should be modified due to new features
+                // in this version of JabRef:
+                final ParserResult prf = pr;
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                        performPostOpenActions(panel, prf, true);
+                    }
+                });
+            }
+
+            
+        }
+    }
+
+    /**
+     * Go through the list of post open actions, and perform those that need
+     * to be performed.
+     * @param panel The BasePanel where the database is shown.
+     * @param pr The result of the bib file parse operation.
+     */
+    public static void performPostOpenActions(BasePanel panel, ParserResult pr,
+                                              boolean mustRaisePanel) {
+        for (Iterator<PostOpenAction> iterator = postOpenActions.iterator(); iterator.hasNext();) {
+            PostOpenAction action = iterator.next();
+            if (action.isActionNecessary(pr)) {
+                if (mustRaisePanel)
+                    panel.frame().getTabbedPane().setSelectedComponent(panel);
+                action.performAction(panel, pr);
+            }
+        }
+    }
+
+    public BasePanel addNewDatabase(ParserResult pr, final File file,
+                               boolean raisePanel) {
+
+        String fileName = file.getPath();
+        BibtexDatabase db = pr.getDatabase();
+        MetaData meta = pr.getMetaData();
+
+        if (pr.hasWarnings()) {
+            final String[] wrns = pr.warnings();
+            (new Thread() {
+                public void run() {
+                    StringBuffer wrn = new StringBuffer();
+                    for (int i = 0; i < wrns.length; i++)
+                        wrn.append(i + 1).append(". ").append(wrns[i]).append("\n");
+
+                    if (wrn.length() > 0)
+                        wrn.deleteCharAt(wrn.length() - 1);
+                    // Note to self or to someone else: The following line causes an
+                    // ArrayIndexOutOfBoundsException in situations with a large number of
+                    // warnings; approx. 5000 for the database I opened when I observed the problem
+                    // (duplicate key warnings). I don't think this is a big problem for normal situations,
+                    // and it may possibly be a bug in the Swing code.
+                    JOptionPane.showMessageDialog(frame, wrn.toString(),
+                            Globals.lang("Warnings")+" ("+file.getName()+")",
+                            JOptionPane.WARNING_MESSAGE);
+                }
+            }).start();
+        }
+        BasePanel bp = new BasePanel(frame, db, file, meta, pr.getEncoding());
+
+        // file is set to null inside the EventDispatcherThread
+        SwingUtilities.invokeLater(new OpenItSwingHelper(bp, file, raisePanel));
+
+        frame.output(Globals.lang("Opened database") + " '" + fileName +
+                "' " + Globals.lang("with") + " " +
+                db.getEntryCount() + " " + Globals.lang("entries") + ".");
+
+        return bp;
+    }
+
+    public static ParserResult loadDatabase(File fileToOpen, String encoding)
+            throws IOException {
+
+        // First we make a quick check to see if this looks like a BibTeX file:
+        Reader reader;// = ImportFormatReader.getReader(fileToOpen, encoding);
+        //if (!BibtexParser.isRecognizedFormat(reader))
+        //    return null;
+
+        // The file looks promising. Reinitialize the reader and go on:
+        //reader = getReader(fileToOpen, encoding);
+
+        // We want to check if there is a JabRef signature in the file, because that would tell us
+        // which character encoding is used. However, to read the signature we must be using a compatible
+        // encoding in the first place. Since the signature doesn't contain any fancy characters, we can
+        // read it regardless of encoding, with either UTF8 or UTF-16. That's the hypothesis, at any rate.
+        // 8 bit is most likely, so we try that first:
+        Reader utf8Reader = ImportFormatReader.getReader(fileToOpen, "UTF8");
+        String suppliedEncoding = checkForEncoding(utf8Reader);
+        utf8Reader.close();
+        // Now if that didn't get us anywhere, we check with the 16 bit encoding:
+        if (suppliedEncoding == null) {
+            Reader utf16Reader = ImportFormatReader.getReader(fileToOpen, "UTF-16");
+            suppliedEncoding = checkForEncoding(utf16Reader);
+            utf16Reader.close();
+            //System.out.println("Result of UTF-16 test: "+suppliedEncoding);
+        }
+
+        //System.out.println(suppliedEncoding != null ? "Encoding: '"+suppliedEncoding+"' Len: "+suppliedEncoding.length() : "no supplied encoding");
+
+        if ((suppliedEncoding != null)) {
+           try {
+               reader = ImportFormatReader.getReader(fileToOpen, suppliedEncoding);
+               encoding = suppliedEncoding; // Just so we put the right info into the ParserResult.
+           } catch (Exception ex) {
+               ex.printStackTrace();
+               reader = ImportFormatReader.getReader(fileToOpen, encoding); // The supplied encoding didn't work out, so we use the default.
+           }
+        } else {
+            // We couldn't find a header with info about encoding. Use default:
+            reader = ImportFormatReader.getReader(fileToOpen, encoding);
+        }
+
+        BibtexParser bp = new BibtexParser(reader);
+
+        ParserResult pr = bp.parse();
+        pr.setEncoding(encoding);
+        pr.setFile(fileToOpen);
+
+        if (SpecialFieldsUtils.keywordSyncEnabled()) {
+        	for (BibtexEntry entry: pr.getDatabase().getEntries()) {
+        		SpecialFieldsUtils.syncSpecialFieldsFromKeywords(entry, null);
+        	}
+        	logger.fine(Globals.lang("Synchronized special fields based on keywords"));
+        }
+
+        if (!pr.getMetaData().isGroupTreeValid())
+            pr.addWarning(Globals.lang("Group tree could not be parsed. If you save the BibTeX database, all groups will be lost."));
+
+        return pr;
+    }
+
+    private static String checkForEncoding(Reader reader) {
+        String suppliedEncoding = null;
+        StringBuffer headerText = new StringBuffer();
+        try {
+            boolean keepon = true;
+            int piv = 0, offset = 0;
+            int c;
+
+            while (keepon) {
+                c = reader.read();
+                if ((piv == 0) && ((c == '%') || (Character.isWhitespace((char)c))))
+                    offset++;
+                else {
+                    headerText.append((char) c);
+                    if (c == GUIGlobals.SIGNATURE.charAt(piv))
+                        piv++;
+                    else //if (((char)c) == '@')
+                        keepon = false;
+                }
+                //System.out.println(headerText.toString());
+                found:
+                if (piv == GUIGlobals.SIGNATURE.length()) {
+                    keepon = false;
+
+                    //if (headerText.length() > GUIGlobals.SIGNATURE.length())
+                    //    System.out.println("'"+headerText.toString().substring(0, headerText.length()-GUIGlobals.SIGNATURE.length())+"'");
+                    // Found the signature. The rest of the line is unknown, so we skip
+                    // it:
+                    while (reader.read() != '\n'){
+                        // keep reading
+                    }
+                    // If the next line starts with something like "% ", handle this:
+                    while (((c =reader.read()) == '%') || (Character.isWhitespace((char)c))){
+                        // keep reading
+                    }
+                    // Then we must skip the "Encoding: ". We may already have read the first
+                    // character:
+                    if ((char)c != GUIGlobals.encPrefix.charAt(0))
+                        break found;
+
+                    for (int i = 1; i < GUIGlobals.encPrefix.length(); i++) {
+                        if (reader.read() != GUIGlobals.encPrefix.charAt(i))
+                            break found; // No,
+                        // it
+                        // doesn't
+                        // seem
+                        // to
+                        // match.
+                    }
+                    
+                    // If ok, then read the rest of the line, which should contain the
+                    // name
+                    // of the encoding:
+                    StringBuffer sb = new StringBuffer();
+
+                    while ((c = reader.read()) != '\n') {
+                        sb.append((char) c);
+                    }
+
+
+                    suppliedEncoding = sb.toString();
+                }
+            }
+        } catch (IOException ex) {
+        }
+        return suppliedEncoding != null ? suppliedEncoding.trim() : null;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/OvidImporter.java b/src/java/net/sf/jabref/imports/OvidImporter.java
index 3138ebf..da773e3 100644
--- a/src/java/net/sf/jabref/imports/OvidImporter.java
+++ b/src/java/net/sf/jabref/imports/OvidImporter.java
@@ -1,262 +1,262 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.io.InputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.HashMap;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.Util;
-import net.sf.jabref.AuthorList;
-
-/**
- * Imports an Ovid file.
- */
-public class OvidImporter extends ImportFormat {
-
-    public static Pattern ovid_src_pat = Pattern
-    .compile("Source ([ \\w&\\-,:]+)\\.[ ]+([0-9]+)\\(([\\w\\-]+)\\):([0-9]+\\-?[0-9]+?)\\,.*([0-9][0-9][0-9][0-9])");
-
-    public static Pattern ovid_src_pat_no_issue = Pattern
-    .compile("Source ([ \\w&\\-,:]+)\\.[ ]+([0-9]+):([0-9]+\\-?[0-9]+?)\\,.*([0-9][0-9][0-9][0-9])");
-
-    public static Pattern ovid_src_pat_2 = Pattern.compile(
-            "([ \\w&\\-,]+)\\. Vol ([0-9]+)\\(([\\w\\-]+)\\) ([A-Za-z]+) ([0-9][0-9][0-9][0-9]), ([0-9]+\\-?[0-9]+)");
-
-    public static Pattern incollection_pat = Pattern.compile(
-            "(.+)\\(([0-9][0-9][0-9][0-9])\\)\\. ([ \\w&\\-,:]+)\\.[ ]+\\(pp. ([0-9]+\\-?[0-9]+?)\\).[A-Za-z0-9, ]+pp\\. "
-            +"([\\w, ]+): ([\\w, ]+)");
-    public static Pattern book_pat = Pattern.compile(
-                "\\(([0-9][0-9][0-9][0-9])\\)\\. [A-Za-z, ]+([0-9]+) pp\\. ([\\w, ]+): ([\\w, ]+)");
-
-    //   public static Pattern ovid_pat_inspec= Pattern.compile("Source ([
-    // \\w&\\-]+)");
-
-
-    /**
-     * Return the name of this import format.
-     */
-    public String getFormatName() {
-    return "Ovid";
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-     */
-    public String getCLIId() {
-      return "ovid";
-    }
-
-    static final Pattern ovidPattern = Pattern.compile("<[0-9]+>");
-
-    /**
-     * Check whether the source is in the correct format for this importer.
-     */
-    public boolean isRecognizedFormat(InputStream stream) throws IOException {
-
-        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-        String str;
-        int i=0;
-        while (((str = in.readLine()) != null) && (i < 50)) {
-
-			if (ovidPattern.matcher(str).find())
-				return true;
-
-            i++;
-        }
-
-		return false;
-    }
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     */
-    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-    ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
-    StringBuffer sb = new StringBuffer();
-    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-    String line;
-    while ((line = in.readLine()) != null){
-        if (line.length() > 0 && line.charAt(0) != ' '){
-            sb.append("__NEWFIELD__");
-        }
-        sb.append(line);
-        sb.append('\n');
-    }
-
-    String items[] = sb.toString().split("<[0-9]+>");
-
-    for (int i = 1; i < items.length; i++){
-        HashMap<String, String> h = new HashMap<String, String>();
-        String[] fields = items[i].split("__NEWFIELD__");
-        for (int j = 0; j < fields.length; j++){
-            int linebreak = fields[j].indexOf('\n');
-            String fieldName = fields[j].substring(0, linebreak).trim();
-            String content = fields[j].substring(linebreak).trim();
-
-            // Check if this is the author field (due to a minor special treatment for this field):
-            boolean isAuthor = fieldName.indexOf("Author") == 0
-                && fieldName.indexOf("Author Keywords") == -1
-                && fieldName.indexOf("Author e-mail") == -1;
-
-            // Remove unnecessary dots at the end of lines, unless this is the author field,
-            // in which case a dot at the end could be significant:
-            if (!isAuthor && content.endsWith("."))
-                    content = content.substring(0, content.length()-1);
-            //fields[j] = fields[j].trim();
-            if (isAuthor) {
-
-                h.put("author", content);
-
-
-        }else if (fieldName.indexOf("Title") == 0) {
-                content = content.replaceAll("\\[.+\\]", "").trim();
-                if (content.endsWith("."))
-                    content = content.substring(0, content.length()-1);
-                h.put("title", content);
-        }
-
-        else if (fieldName.indexOf("Chapter Title") == 0) h.put("chaptertitle", content);
-
-        // The "Source" field is a complete mess - it can have several different formats,
-        // but since it can contain journal name, book title, year, month, volume etc. we
-        // must try to parse it. We use different regular expressions to check different
-        // possible formattings.
-        else if (fieldName.indexOf("Source") == 0){
-                Matcher matcher;
-            if ((matcher = ovid_src_pat.matcher(content)).find()) {
-            h.put("journal", matcher.group(1));
-            h.put("volume", matcher.group(2));
-            h.put("issue", matcher.group(3));
-            h.put("pages", matcher.group(4));
-            h.put("year", matcher.group(5));
-            } else if ((matcher = ovid_src_pat_no_issue.matcher(content)).find()) {// may be missing the issue
-                h.put("journal", matcher.group(1));
-                h.put("volume", matcher.group(2));
-                h.put("pages", matcher.group(3));
-                h.put("year", matcher.group(4));
-            } else if ((matcher = ovid_src_pat_2.matcher(content)).find()) {
-
-                h.put("journal", matcher.group(1));
-                h.put("volume", matcher.group(2));
-                h.put("issue", matcher.group(3));
-                h.put("month", matcher.group(4));
-                h.put("year", matcher.group(5));
-                h.put("pages", matcher.group(6));
-
-            } else if ((matcher = incollection_pat.matcher(content)).find()) {
-                h.put("editor", matcher.group(1).replaceAll(" \\(Ed\\)", ""));
-                h.put("year", matcher.group(2));
-                h.put("booktitle", matcher.group(3));
-                h.put("pages", matcher.group(4));
-                h.put("address", matcher.group(5));
-                h.put("publisher", matcher.group(6));
-            } else if ((matcher = book_pat.matcher(content)).find()) {
-                h.put("year", matcher.group(1));
-                h.put("pages", matcher.group(2));
-                h.put("address", matcher.group(3));
-                h.put("publisher", matcher.group(4));
-
-            }
-            // Add double hyphens to page ranges:
-            if (h.get("pages") != null) {
-                h.put("pages", h.get("pages").replaceAll("-", "--"));
-            }
-
-        } else if (fieldName.equals("Abstract")) {
-                h.put("abstract", content);
-
-        } else if (fieldName.equals("Publication Type")) {
-             if (content.indexOf("Book") >= 0)
-                h.put("entrytype", "book");
-             else if (content.indexOf("Journal") >= 0)
-                h.put("entrytype", "article");
-             else if (content.indexOf("Conference Paper") >= 0)
-                h.put("entrytype", "inproceedings");
-        }
-        }
-
-        // Now we need to check if a book entry has given editors in the author field;
-        // if so, rearrange:
-        String auth = h.get("author");
-        if ((auth != null) && (auth.indexOf(" [Ed]") >= 0)) {
-            h.remove("author");
-            h.put("editor", auth.replaceAll(" \\[Ed\\]", ""));
-        }
-
-        // Rearrange names properly:
-        auth = h.get("author");
-        if (auth != null)
-            h.put("author", fixNames(auth));
-        auth = h.get("editor");
-        if (auth != null)
-            h.put("editor", fixNames(auth));
-
-
-
-        // Set the entrytype properly:
-        String entryType = h.containsKey("entrytype") ? h.get("entrytype") : "other";
-        h.remove("entrytype");
-        if (entryType.equals("book")) {
-            if (h.containsKey("chaptertitle")) {
-                // This means we have an "incollection" entry.
-                entryType = "incollection";
-                // Move the "chaptertitle" to just "title":
-                h.put("title", h.remove("chaptertitle"));
-            }
-        }
-        BibtexEntry b = new BibtexEntry(Util.createNeutralId(), Globals.getEntryType(entryType));
-        b.setField(h);
-
-        bibitems.add(b);
-
-    }
-
-    return bibitems;
-    }
-
-    /**
-     * Convert a string of author names into a BibTeX-compatible format.
-     * @param content The name string.
-     * @return The formatted names.
-     */
-    private String fixNames(String content) {
-        String names;
-        if (content.indexOf(";") > 0){ //LN FN; [LN FN;]*
-            names = content.replaceAll("[^\\.A-Za-z,;\\- ]", "").replaceAll(";", " and");
-        } else if (content.indexOf("  ") > 0) {
-            String[] sNames = content.split("  ");
-            StringBuilder sb = new StringBuilder();
-            for (int i = 0; i < sNames.length; i++) {
-                if (i > 0) sb.append(" and ");
-                sb.append(sNames[i].replaceFirst(" ", ", "));
-            }
-            names = sb.toString();
-        } else
-            names = content;
-        return AuthorList.fixAuthor_lastNameFirst(names);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.io.InputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.HashMap;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.Util;
+import net.sf.jabref.AuthorList;
+
+/**
+ * Imports an Ovid file.
+ */
+public class OvidImporter extends ImportFormat {
+
+    public static Pattern ovid_src_pat = Pattern
+    .compile("Source ([ \\w&\\-,:]+)\\.[ ]+([0-9]+)\\(([\\w\\-]+)\\):([0-9]+\\-?[0-9]+?)\\,.*([0-9][0-9][0-9][0-9])");
+
+    public static Pattern ovid_src_pat_no_issue = Pattern
+    .compile("Source ([ \\w&\\-,:]+)\\.[ ]+([0-9]+):([0-9]+\\-?[0-9]+?)\\,.*([0-9][0-9][0-9][0-9])");
+
+    public static Pattern ovid_src_pat_2 = Pattern.compile(
+            "([ \\w&\\-,]+)\\. Vol ([0-9]+)\\(([\\w\\-]+)\\) ([A-Za-z]+) ([0-9][0-9][0-9][0-9]), ([0-9]+\\-?[0-9]+)");
+
+    public static Pattern incollection_pat = Pattern.compile(
+            "(.+)\\(([0-9][0-9][0-9][0-9])\\)\\. ([ \\w&\\-,:]+)\\.[ ]+\\(pp. ([0-9]+\\-?[0-9]+?)\\).[A-Za-z0-9, ]+pp\\. "
+            +"([\\w, ]+): ([\\w, ]+)");
+    public static Pattern book_pat = Pattern.compile(
+                "\\(([0-9][0-9][0-9][0-9])\\)\\. [A-Za-z, ]+([0-9]+) pp\\. ([\\w, ]+): ([\\w, ]+)");
+
+    //   public static Pattern ovid_pat_inspec= Pattern.compile("Source ([
+    // \\w&\\-]+)");
+
+
+    /**
+     * Return the name of this import format.
+     */
+    public String getFormatName() {
+    return "Ovid";
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+     */
+    public String getCLIId() {
+      return "ovid";
+    }
+
+    static final Pattern ovidPattern = Pattern.compile("<[0-9]+>");
+
+    /**
+     * Check whether the source is in the correct format for this importer.
+     */
+    public boolean isRecognizedFormat(InputStream stream) throws IOException {
+
+        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+        String str;
+        int i=0;
+        while (((str = in.readLine()) != null) && (i < 50)) {
+
+			if (ovidPattern.matcher(str).find())
+				return true;
+
+            i++;
+        }
+
+		return false;
+    }
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     */
+    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+    ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
+    StringBuffer sb = new StringBuffer();
+    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+    String line;
+    while ((line = in.readLine()) != null){
+        if (line.length() > 0 && line.charAt(0) != ' '){
+            sb.append("__NEWFIELD__");
+        }
+        sb.append(line);
+        sb.append('\n');
+    }
+
+    String items[] = sb.toString().split("<[0-9]+>");
+
+    for (int i = 1; i < items.length; i++){
+        HashMap<String, String> h = new HashMap<String, String>();
+        String[] fields = items[i].split("__NEWFIELD__");
+        for (int j = 0; j < fields.length; j++){
+            int linebreak = fields[j].indexOf('\n');
+            String fieldName = fields[j].substring(0, linebreak).trim();
+            String content = fields[j].substring(linebreak).trim();
+
+            // Check if this is the author field (due to a minor special treatment for this field):
+            boolean isAuthor = fieldName.indexOf("Author") == 0
+                && fieldName.indexOf("Author Keywords") == -1
+                && fieldName.indexOf("Author e-mail") == -1;
+
+            // Remove unnecessary dots at the end of lines, unless this is the author field,
+            // in which case a dot at the end could be significant:
+            if (!isAuthor && content.endsWith("."))
+                    content = content.substring(0, content.length()-1);
+            //fields[j] = fields[j].trim();
+            if (isAuthor) {
+
+                h.put("author", content);
+
+
+        }else if (fieldName.indexOf("Title") == 0) {
+                content = content.replaceAll("\\[.+\\]", "").trim();
+                if (content.endsWith("."))
+                    content = content.substring(0, content.length()-1);
+                h.put("title", content);
+        }
+
+        else if (fieldName.indexOf("Chapter Title") == 0) h.put("chaptertitle", content);
+
+        // The "Source" field is a complete mess - it can have several different formats,
+        // but since it can contain journal name, book title, year, month, volume etc. we
+        // must try to parse it. We use different regular expressions to check different
+        // possible formattings.
+        else if (fieldName.indexOf("Source") == 0){
+                Matcher matcher;
+            if ((matcher = ovid_src_pat.matcher(content)).find()) {
+            h.put("journal", matcher.group(1));
+            h.put("volume", matcher.group(2));
+            h.put("issue", matcher.group(3));
+            h.put("pages", matcher.group(4));
+            h.put("year", matcher.group(5));
+            } else if ((matcher = ovid_src_pat_no_issue.matcher(content)).find()) {// may be missing the issue
+                h.put("journal", matcher.group(1));
+                h.put("volume", matcher.group(2));
+                h.put("pages", matcher.group(3));
+                h.put("year", matcher.group(4));
+            } else if ((matcher = ovid_src_pat_2.matcher(content)).find()) {
+
+                h.put("journal", matcher.group(1));
+                h.put("volume", matcher.group(2));
+                h.put("issue", matcher.group(3));
+                h.put("month", matcher.group(4));
+                h.put("year", matcher.group(5));
+                h.put("pages", matcher.group(6));
+
+            } else if ((matcher = incollection_pat.matcher(content)).find()) {
+                h.put("editor", matcher.group(1).replaceAll(" \\(Ed\\)", ""));
+                h.put("year", matcher.group(2));
+                h.put("booktitle", matcher.group(3));
+                h.put("pages", matcher.group(4));
+                h.put("address", matcher.group(5));
+                h.put("publisher", matcher.group(6));
+            } else if ((matcher = book_pat.matcher(content)).find()) {
+                h.put("year", matcher.group(1));
+                h.put("pages", matcher.group(2));
+                h.put("address", matcher.group(3));
+                h.put("publisher", matcher.group(4));
+
+            }
+            // Add double hyphens to page ranges:
+            if (h.get("pages") != null) {
+                h.put("pages", h.get("pages").replaceAll("-", "--"));
+            }
+
+        } else if (fieldName.equals("Abstract")) {
+                h.put("abstract", content);
+
+        } else if (fieldName.equals("Publication Type")) {
+             if (content.indexOf("Book") >= 0)
+                h.put("entrytype", "book");
+             else if (content.indexOf("Journal") >= 0)
+                h.put("entrytype", "article");
+             else if (content.indexOf("Conference Paper") >= 0)
+                h.put("entrytype", "inproceedings");
+        }
+        }
+
+        // Now we need to check if a book entry has given editors in the author field;
+        // if so, rearrange:
+        String auth = h.get("author");
+        if ((auth != null) && (auth.indexOf(" [Ed]") >= 0)) {
+            h.remove("author");
+            h.put("editor", auth.replaceAll(" \\[Ed\\]", ""));
+        }
+
+        // Rearrange names properly:
+        auth = h.get("author");
+        if (auth != null)
+            h.put("author", fixNames(auth));
+        auth = h.get("editor");
+        if (auth != null)
+            h.put("editor", fixNames(auth));
+
+
+
+        // Set the entrytype properly:
+        String entryType = h.containsKey("entrytype") ? h.get("entrytype") : "other";
+        h.remove("entrytype");
+        if (entryType.equals("book")) {
+            if (h.containsKey("chaptertitle")) {
+                // This means we have an "incollection" entry.
+                entryType = "incollection";
+                // Move the "chaptertitle" to just "title":
+                h.put("title", h.remove("chaptertitle"));
+            }
+        }
+        BibtexEntry b = new BibtexEntry(Util.createNeutralId(), Globals.getEntryType(entryType));
+        b.setField(h);
+
+        bibitems.add(b);
+
+    }
+
+    return bibitems;
+    }
+
+    /**
+     * Convert a string of author names into a BibTeX-compatible format.
+     * @param content The name string.
+     * @return The formatted names.
+     */
+    private String fixNames(String content) {
+        String names;
+        if (content.indexOf(";") > 0){ //LN FN; [LN FN;]*
+            names = content.replaceAll("[^\\.A-Za-z,;\\- ]", "").replaceAll(";", " and");
+        } else if (content.indexOf("  ") > 0) {
+            String[] sNames = content.split("  ");
+            StringBuilder sb = new StringBuilder();
+            for (int i = 0; i < sNames.length; i++) {
+                if (i > 0) sb.append(" and ");
+                sb.append(sNames[i].replaceFirst(" ", ", "));
+            }
+            names = sb.toString();
+        } else
+            names = content;
+        return AuthorList.fixAuthor_lastNameFirst(names);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/ParserResult.java b/src/java/net/sf/jabref/imports/ParserResult.java
index c569b0a..5756bf6 100644
--- a/src/java/net/sf/jabref/imports/ParserResult.java
+++ b/src/java/net/sf/jabref/imports/ParserResult.java
@@ -1,227 +1,227 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.File;
-import net.sf.jabref.BibtexEntryType;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.MetaData;
-
-public class ParserResult {
-
-    public static ParserResult INVALID_FORMAT = new ParserResult(null, null, null);
-    public static ParserResult FILE_LOCKED = new ParserResult(null, null, null);
-    private BibtexDatabase base;
-    private MetaData metaData;
-    private HashMap<String, BibtexEntryType> entryTypes;
-
-
-    private File file = null;
-    private ArrayList<String> warnings = new ArrayList<String>();
-    private ArrayList<String> duplicateKeys = new ArrayList<String>();
-
-    private String errorMessage = null;
-    private String encoding = null; // Which encoding was used?
-
-    private boolean postponedAutosaveFound = false;
-    private boolean invalid = false;
-
-    private String jabrefVersion = null; // Which JabRef version wrote the file, if any?
-    private int jabrefMajorVersion = 0;
-    private int jabrefMinorVersion = 0;
-    private int jabrefMinor2Version = 0; // Numeric version representation
-    private boolean toOpenTab = false;
-
-    public ParserResult(Collection<BibtexEntry> entries){
-    	this(ImportFormatReader.createDatabase(entries), null, new HashMap<String, BibtexEntryType>());
-    }
-    
-    public ParserResult(BibtexDatabase base, MetaData metaData, HashMap<String, BibtexEntryType> entryTypes) {
-		this.base = base;
-		this.metaData = metaData;
-		this.entryTypes = entryTypes;
-    }
-
-    /**
-     * Check if this base is marked to be added to the currently open tab. Default is false.
-     * @return
-     */
-    public boolean toOpenTab() {
-        return toOpenTab;
-    }
-
-    public void setToOpenTab(boolean toOpenTab) {
-        this.toOpenTab = toOpenTab;
-    }
-
-
-    /**
-     * Find which version of JabRef, if any, produced this bib file.
-     * @return The version number string, or null if no JabRef signature could be read.
-     */
-    public String getJabrefVersion() {
-        return jabrefVersion;
-    }
-
-    /**
-     * Set the JabRef version number string for this parser result.
-     * @param jabrefVersion The version number string.                                         
-     */
-    public void setJabrefVersion(String jabrefVersion) {
-        this.jabrefVersion = jabrefVersion;
-    }
-
-
-    public int getJabrefMajorVersion() {
-        return jabrefMajorVersion;
-    }
-
-    public void setJabrefMajorVersion(int jabrefMajorVersion) {
-        this.jabrefMajorVersion = jabrefMajorVersion;
-    }
-
-    public int getJabrefMinorVersion() {
-        return jabrefMinorVersion;
-    }
-
-    public void setJabrefMinorVersion(int jabrefMinorVersion) {
-        this.jabrefMinorVersion = jabrefMinorVersion;
-    }
-
-    public int getJabrefMinor2Version() {
-        return jabrefMinor2Version;
-    }
-
-    public void setJabrefMinor2Version(int jabrefMinor2Version) {
-        this.jabrefMinor2Version = jabrefMinor2Version;
-    }
-    
-    public BibtexDatabase getDatabase() {
-    	return base;
-    }
-
-    public MetaData getMetaData() {
-	    return metaData;
-    }
-
-    public void setMetaData(MetaData md) {
-        this.metaData = md;
-    }
-
-    public HashMap<String, BibtexEntryType> getEntryTypes() {
-    	return entryTypes;
-    }
-
-    public File getFile() {
-      return file;
-    }
-
-    public void setFile(File f) {
-      file = f;
-    }
-
-    /**
-     * Sets the variable indicating which encoding was used during parsing.
-     *
-     * @param enc String the name of the encoding.
-     */
-    public void setEncoding(String enc) {
-      encoding = enc;
-    }
-
-    /**
-     * Returns the name of the encoding used during parsing, or null if not specified
-     * (indicates that prefs.get("defaultEncoding") was used).
-     */
-    public String getEncoding() {
-      return encoding;
-    }
-
-    /**
-     * Add a parser warning.
-     *
-     * @param s String Warning text. Must be pretranslated. Only added if there isn't already a dupe.
-     */
-    public void addWarning(String s) {
-        if (!warnings.contains(s))
-            warnings.add(s);
-    }
-
-    public boolean hasWarnings() {
-      return (warnings.size() > 0);
-    }
-
-    public String[] warnings() {
-      String[] s = new String[warnings.size()];
-      for (int i=0; i<warnings.size(); i++)
-        s[i] = warnings.get(i);
-      return s;
-    }
-
-    /**
-     * Add a key to the list of duplicated BibTeX keys found in the database.
-     * @param key The duplicated key
-     */
-    public void addDuplicateKey(String key) {
-        if (!duplicateKeys.contains(key))
-            duplicateKeys.add(key);
-    }
-
-    /**
-     * Query whether any duplicated BibTeX keys have been found in the database.
-     * @return true if there is at least one duplicate key.
-     */
-    public boolean hasDuplicateKeys() {
-        return duplicateKeys.size() > 0;
-    }
-
-    /**
-     * Get all duplicated keys found in the database.
-     * @return An array containing the duplicated keys.
-     */
-    public String[] getDuplicateKeys() {
-        return duplicateKeys.toArray(new String[duplicateKeys.size()]);
-    }
-    
-
-    public boolean isPostponedAutosaveFound() {
-        return postponedAutosaveFound;
-    }
-
-    public void setPostponedAutosaveFound(boolean postponedAutosaveFound) {
-        this.postponedAutosaveFound = postponedAutosaveFound;
-    }
-
-    public boolean isInvalid() {
-        return invalid;
-    }
-
-    public void setInvalid(boolean invalid) {
-        this.invalid = invalid;
-    }
-
-    public String getErrorMessage() {
-        return errorMessage;
-    }
-
-    public void setErrorMessage(String errorMessage) {
-        this.errorMessage = errorMessage;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.File;
+import net.sf.jabref.BibtexEntryType;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.MetaData;
+
+public class ParserResult {
+
+    public static ParserResult INVALID_FORMAT = new ParserResult(null, null, null);
+    public static ParserResult FILE_LOCKED = new ParserResult(null, null, null);
+    private BibtexDatabase base;
+    private MetaData metaData;
+    private HashMap<String, BibtexEntryType> entryTypes;
+
+
+    private File file = null;
+    private ArrayList<String> warnings = new ArrayList<String>();
+    private ArrayList<String> duplicateKeys = new ArrayList<String>();
+
+    private String errorMessage = null;
+    private String encoding = null; // Which encoding was used?
+
+    private boolean postponedAutosaveFound = false;
+    private boolean invalid = false;
+
+    private String jabrefVersion = null; // Which JabRef version wrote the file, if any?
+    private int jabrefMajorVersion = 0;
+    private int jabrefMinorVersion = 0;
+    private int jabrefMinor2Version = 0; // Numeric version representation
+    private boolean toOpenTab = false;
+
+    public ParserResult(Collection<BibtexEntry> entries){
+    	this(ImportFormatReader.createDatabase(entries), null, new HashMap<String, BibtexEntryType>());
+    }
+    
+    public ParserResult(BibtexDatabase base, MetaData metaData, HashMap<String, BibtexEntryType> entryTypes) {
+		this.base = base;
+		this.metaData = metaData;
+		this.entryTypes = entryTypes;
+    }
+
+    /**
+     * Check if this base is marked to be added to the currently open tab. Default is false.
+     * @return
+     */
+    public boolean toOpenTab() {
+        return toOpenTab;
+    }
+
+    public void setToOpenTab(boolean toOpenTab) {
+        this.toOpenTab = toOpenTab;
+    }
+
+
+    /**
+     * Find which version of JabRef, if any, produced this bib file.
+     * @return The version number string, or null if no JabRef signature could be read.
+     */
+    public String getJabrefVersion() {
+        return jabrefVersion;
+    }
+
+    /**
+     * Set the JabRef version number string for this parser result.
+     * @param jabrefVersion The version number string.                                         
+     */
+    public void setJabrefVersion(String jabrefVersion) {
+        this.jabrefVersion = jabrefVersion;
+    }
+
+
+    public int getJabrefMajorVersion() {
+        return jabrefMajorVersion;
+    }
+
+    public void setJabrefMajorVersion(int jabrefMajorVersion) {
+        this.jabrefMajorVersion = jabrefMajorVersion;
+    }
+
+    public int getJabrefMinorVersion() {
+        return jabrefMinorVersion;
+    }
+
+    public void setJabrefMinorVersion(int jabrefMinorVersion) {
+        this.jabrefMinorVersion = jabrefMinorVersion;
+    }
+
+    public int getJabrefMinor2Version() {
+        return jabrefMinor2Version;
+    }
+
+    public void setJabrefMinor2Version(int jabrefMinor2Version) {
+        this.jabrefMinor2Version = jabrefMinor2Version;
+    }
+    
+    public BibtexDatabase getDatabase() {
+    	return base;
+    }
+
+    public MetaData getMetaData() {
+	    return metaData;
+    }
+
+    public void setMetaData(MetaData md) {
+        this.metaData = md;
+    }
+
+    public HashMap<String, BibtexEntryType> getEntryTypes() {
+    	return entryTypes;
+    }
+
+    public File getFile() {
+      return file;
+    }
+
+    public void setFile(File f) {
+      file = f;
+    }
+
+    /**
+     * Sets the variable indicating which encoding was used during parsing.
+     *
+     * @param enc String the name of the encoding.
+     */
+    public void setEncoding(String enc) {
+      encoding = enc;
+    }
+
+    /**
+     * Returns the name of the encoding used during parsing, or null if not specified
+     * (indicates that prefs.get("defaultEncoding") was used).
+     */
+    public String getEncoding() {
+      return encoding;
+    }
+
+    /**
+     * Add a parser warning.
+     *
+     * @param s String Warning text. Must be pretranslated. Only added if there isn't already a dupe.
+     */
+    public void addWarning(String s) {
+        if (!warnings.contains(s))
+            warnings.add(s);
+    }
+
+    public boolean hasWarnings() {
+      return (warnings.size() > 0);
+    }
+
+    public String[] warnings() {
+      String[] s = new String[warnings.size()];
+      for (int i=0; i<warnings.size(); i++)
+        s[i] = warnings.get(i);
+      return s;
+    }
+
+    /**
+     * Add a key to the list of duplicated BibTeX keys found in the database.
+     * @param key The duplicated key
+     */
+    public void addDuplicateKey(String key) {
+        if (!duplicateKeys.contains(key))
+            duplicateKeys.add(key);
+    }
+
+    /**
+     * Query whether any duplicated BibTeX keys have been found in the database.
+     * @return true if there is at least one duplicate key.
+     */
+    public boolean hasDuplicateKeys() {
+        return duplicateKeys.size() > 0;
+    }
+
+    /**
+     * Get all duplicated keys found in the database.
+     * @return An array containing the duplicated keys.
+     */
+    public String[] getDuplicateKeys() {
+        return duplicateKeys.toArray(new String[duplicateKeys.size()]);
+    }
+    
+
+    public boolean isPostponedAutosaveFound() {
+        return postponedAutosaveFound;
+    }
+
+    public void setPostponedAutosaveFound(boolean postponedAutosaveFound) {
+        this.postponedAutosaveFound = postponedAutosaveFound;
+    }
+
+    public boolean isInvalid() {
+        return invalid;
+    }
+
+    public void setInvalid(boolean invalid) {
+        this.invalid = invalid;
+    }
+
+    public String getErrorMessage() {
+        return errorMessage;
+    }
+
+    public void setErrorMessage(String errorMessage) {
+        this.errorMessage = errorMessage;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/PdfContentImporter.java b/src/java/net/sf/jabref/imports/PdfContentImporter.java
index 4505047..874357e 100644
--- a/src/java/net/sf/jabref/imports/PdfContentImporter.java
+++ b/src/java/net/sf/jabref/imports/PdfContentImporter.java
@@ -1,614 +1,614 @@
-/*
-PdfContentImporter is part of JabRef. 
-Copyright (C) 2011 Oliver Kopp
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
-or see http://www.gnu.org/licenses/gpl-2.0.html
-*/
-
-package net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.util.PDFTextStripper;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.Util;
-
-/**
- * PdfContentImporter parses data of the first page of the PDF and creates a BibTeX entry.
- * 
- * Currently, Springer and IEEE formats are supported.
- * 
- * Integrating XMP support is future work
- * 
- * @author koppor
- *
- */
-public class PdfContentImporter extends ImportFormat {
-	
-	private static Logger logger = Logger.getLogger(PdfContentImporter.class.getName());
-	
-	// we can store the DOItoBibTeXFetcher as single reference as the fetcher doesn't hold internal state
-	private static DOItoBibTeXFetcher doiToBibTeXFetcher = new DOItoBibTeXFetcher();
-
-	/* global variables holding the state of the current parse run
-	 * needed to be able to generate methods such as "fillCurStringWithNonEmptyLines"
-	 */
-	
-	// input split into several lines
-	private String[] split; 
-	
-	// current index in split
-    private int i;
-    
-    // curent "line" in split.
-    // sometimes, a "line" is several lines in split
-    private String curString;
-    
-	private String year = null;
-
-	@Override
-	public boolean isRecognizedFormat(InputStream in) throws IOException {
-		return false;
-	}
-
-	/**
-	 * Removes all non-letter characters at the end
-	 * 
-	 * EXCEPTION: a closing bracket is NOT removed
-	 * 
-	 * @param input
-	 * @return
-	 * TODO Additionally repalce multiple subsequent spaces by one space
-	 */
-	private String removeNonLettersAtEnd(String input) {
-		input = input.trim();
-		if (input.length() == 0)
-			return input;
-		char lastC = input.charAt(input.length()-1);
-		while (!Character.isLetter(lastC) &&  (lastC!=')')) {
-			// if there is an asterix, a dot or something else at the end: remove it
-			input = input.substring(0, input.length()-1);
-			if (input.length()>0) {
-				lastC = input.charAt(input.length()-1);
-			} else {
-				break;
-			}
-		}
-		return input;
-	}
-	
-	private String streamlineNames(String names) {
-		String res;
-		// supported formats:
-		//   Matthias Schrepfer1, Johannes Wolf1, Jan Mendling1, and Hajo A. Reijers2
-		if (names.contains(",")) {
-			String[] splitNames = names.split(",");
-			res = "";
-			boolean isFirst = true;
-			for (int i=0; i<splitNames.length; i++) {
-				String curName = removeNonLettersAtEnd(splitNames[i]);
-				if (curName.indexOf("and")==0) {
-					// skip possible ands between names
-					curName = curName.substring(3).trim();
-				} else {
-					int posAnd = curName.indexOf(" and "); 
-					if (posAnd>=0) {
-						String nameBefore = curName.substring(0, posAnd);
-						// cannot be first name as "," is contained in the string
-						res = res.concat(" and ").concat(removeNonLettersAtEnd(nameBefore));
-						curName = curName.substring(posAnd+5);
-					}
-				}
-					
-				if (!curName.equals("")) {
-					if (curName.equalsIgnoreCase("et al."))
-						curName = "others";
-					if (isFirst) {
-						isFirst = false;
-					} else {
-						res = res.concat(" and ");
-					}
-					res = res.concat(curName);
-				}
-			}
-		} else {
-			// assumption: names separated by space
-			
-			String[] splitNames = names.split(" ");
-			if (splitNames.length == 0) {
-				// empty names... something was really wrong...
-				return "";
-			}
-			
-			boolean workedOnFirstOrMiddle = false;
-			boolean isFirst = true;
-			int i=0;
-			res = "";
-			do {
-				if (!workedOnFirstOrMiddle) {
-					if (splitNames[i].equalsIgnoreCase("and")) {
-						// do nothing, just increment i at the end of this iteration
-					} else {
-						if (isFirst) {
-							isFirst = false;
-						} else {
-							res = res.concat(" and ");
-						}
-						if ((splitNames[i].equalsIgnoreCase("et")) && (splitNames.length>i+1) && (splitNames[i+1].equalsIgnoreCase("al."))) {
-							res = res.concat("others");
-							break;
-						} else {
-							res = res.concat(splitNames[i]).concat(" ");
-							workedOnFirstOrMiddle = true;
-						}
-					}
-				} else {
-					// last item was a first or a middle name
-					// we have to check whether we are on a middle name
-					// if not, just add the item as last name and add an "and"
-					if (splitNames[i].contains(".")) {
-						// we found a middle name
-						res = res.concat(splitNames[i]).concat(" ");
-					} else {
-						// last name found
-						res = res.concat(removeNonLettersAtEnd(splitNames[i]));
-						
-						if (splitNames[i].length() > 0 && Character.isLowerCase(splitNames[i].charAt(0))) {
-							// it is probably be "van", "vom", ...
-							// we just rely on the fact that these things are written in lower case letters
-							// do NOT finish name
-							res = res.concat(" ");
-						} else {
-							// finish this name
-							workedOnFirstOrMiddle = false;
-						}
-					}
-				}
-				i++;
-			} while (i<splitNames.length);
-			
-		}
-		return res;
-	}
-	
-	private String streamlineTitle(String title) {
-		return removeNonLettersAtEnd(title);
-	}
-	
-	private boolean isYear(String yearStr) {
-		try {
-			Integer.parseInt(yearStr);
-			return true;
-		} catch (NumberFormatException e) {
-			return false;
-		}
-	}
-	
-	@Override
-	public List<BibtexEntry> importEntries(InputStream in, OutputPrinter status) throws IOException {
-		final ArrayList<BibtexEntry> res = new ArrayList<BibtexEntry>(1);
-		
-		PDDocument document = null;
-		try {
-			document = PDDocument.load(in);
-		} catch (IOException e) {
-			logger.log(Level.SEVERE, "Could not load document", e);
-			return res;
-		}
-
-		try {
-			if (document.isEncrypted()) {
-				logger.log(Level.INFO,
-						Globals.lang("Encrypted documents are not supported"));
-				//return res;
-			}
-
-			PDFTextStripper stripper = new PDFTextStripper();
-			stripper.setStartPage(1);
-			stripper.setEndPage(1);
-			stripper.setSortByPosition(true);
-			stripper.setParagraphEnd(System.getProperty("line.separator"));
-			StringWriter writer = new StringWriter();
-			stripper.writeText(document, writer);
-			String textResult = writer.toString();
-			
-			String doi = Util.getDOI(textResult);
-			if (doi.length() < textResult.length()) {
-				// A DOI was found in the text
-				// We do NO parsing of the text, but use the DOI fetcher
-				
-				ImportInspector i = new ImportInspector() {
-					@Override
-					public void toFront() {
-					}
-					@Override
-					public void setProgress(int current, int max) {
-					}
-					@Override
-					public void addEntry(BibtexEntry entry) {
-						// add the entry to the result object
-						res.add(entry);
-					}
-				};
-				doiToBibTeXFetcher.processQuery(doi, i, status);
-				if (res.size() != 0) {
-					// if something has been found, return the result
-					return res;
-				} else {
-					// otherwise, we just parse the PDF
-				}
-			}
-
-			String author = null;
-			String editor = null;
-			String institution = null;
-			String abstractT = null;
-			String keywords = null;
-			String title = null;
-			String conference = null;
-			String DOI = null;
-			String series = null;
-			String volume = null;
-			String number = null;
-			String pages = null;
-			// year is a class variable as the method extractYear() uses it;
-			String publisher = null;
-			BibtexEntryType type = BibtexEntryType.INPROCEEDINGS; 
-			
-			final String lineBreak = System.getProperty("line.separator");
-			
-			split = textResult.split(lineBreak);
-			
-			// idea: split[] contains the different lines
-			// blocks are separated by empty lines
-			// treat each block
-			//   or do special treatment at authors (which are not broken)
-			//   therefore, we do a line-based and not a block-based splitting
-			// i points to the current line
-			// curString (mostly) contains the current block
-			//   the different lines are joined into one and thereby separated by " "
-			
-			proceedToNextNonEmptyLine();
-			if (i>=split.length) {
-				// PDF could not be parsed or is empty
-				// return empty list
-				return res;
-			}
-			curString = split[i];
-			i = i+1;
-			
-			if (curString.length()>4) {
-				// special case: possibly conference as first line on the page
-				extractYear();
-				if (curString.contains("Conference")) {
-					fillCurStringWithNonEmptyLines();
-					conference = curString;
-					curString = "";
-				} else {
-					// e.g. Copyright (c) 1998 by the Genetics Society of America
-					// future work: get year using RegEx
-					String lower = curString.toLowerCase();
-					if (lower.contains("copyright")) {
-						fillCurStringWithNonEmptyLines();
-						publisher = curString;
-						curString = "";
-					}
-				}
-			}
-			
-			// start: title
-			fillCurStringWithNonEmptyLines();
-			title = streamlineTitle(curString);
-			curString = "";
-			//i points to the next non-empty line
-			
-			// after title: authors
-			author = null;
-			while ((i<split.length)  && (!split[i].equals(""))) {
-				// author names are unlikely to be split among different lines
-				// treat them line by line
-				curString = streamlineNames(split[i]);
-				if (author==null) {
-					author = curString;
-				} else {
-					if (curString.equals("")) {
-						// if split[i] is "and" then "" is returned by streamlineNames -> do nothing
-					} else {
-						author = author.concat(" and ").concat(curString);
-					}
-				}
-				i++;
-			}			
-			curString = "";
-			i++;
-			
-			// then, abstract and keywords follow
-			while (i<split.length) {
-				curString = split[i];
-				if ((curString.length()>="Abstract".length()) && (curString.substring(0, "Abstract".length()).equalsIgnoreCase("Abstract"))) {
-					if (curString.length() == "Abstract".length()) {
-						// only word "abstract" found -- skip line
-						curString = "";
-					} else {
-						curString = curString.substring("Abstract".length()+1).trim().concat(lineBreak);
-					}
-					i++;
-					// fillCurStringWithNonEmptyLines() cannot be used as that uses " " as line separator
-					// whereas we need linebreak as separator
-					while ((i<split.length)  && (!split[i].equals(""))) {
-						curString = curString.concat(split[i]).concat(lineBreak);
-						i++;
-					}
-					abstractT=curString;
-					i++;
-				} else if ((curString.length()>="Keywords".length()) && (curString.substring(0, "Keywords".length()).equalsIgnoreCase("Keywords"))) {
-					if (curString.length() == "Keywords".length()) {
-						// only word "Keywords" found -- skip line
-						curString = "";
-					} else {
-						curString = curString.substring("Keywords".length()+1).trim();
-					}
-					i++;
-					fillCurStringWithNonEmptyLines();
-					keywords=removeNonLettersAtEnd(curString);
-				} else {
-					String lower = curString.toLowerCase();
-					
-					int pos = lower.indexOf("technical");
-					if (pos>=0) {
-						type = BibtexEntryType.TECHREPORT;
-						pos = curString.trim().lastIndexOf(' ');
-						if (pos>=0) {
-							// assumption: last character of curString is NOT ' '
-							//   otherwise pos+1 leads to an out-of-bounds exception
-							number = curString.substring(pos+1);
-						}
-					}
-					
-					i++;
-					proceedToNextNonEmptyLine();
-				}
-			}
-			
-			i = split.length-1;
-			
-			// last block: DOI, detailed information
-			// sometimes, this information is in the third last block etc...
-			// therefore, read until the beginning of the file 
-			
-			while (i>=0) {
-				readLastBlock();
-				// i now points to the block before or is -1
-				// curString contains the last block, separated by " "
-			
-				extractYear();
-				
-				int pos = curString.indexOf("(Eds.)");
-				if ((pos >= 0) && (publisher == null)) {
-					// looks like a Springer last line
-					// e.g: A. Persson and J. Stirna (Eds.): PoEM 2009, LNBIP 39, pp. 161-175, 2009.
-					publisher = "Springer";
-					editor = streamlineNames(curString.substring(0, pos - 1));
-					curString = curString.substring(pos+"(Eds.)".length()+2); //+2 because of ":" after (Eds.) and the subsequent space
-					String[] springerSplit = curString.split(", ");
-					if (springerSplit.length >= 4) {
-						conference = springerSplit[0];
-
-						String seriesData = springerSplit[1];
-						int lastSpace = seriesData.lastIndexOf(' ');
-						series = seriesData.substring(0, lastSpace);
-						volume = seriesData.substring(lastSpace + 1);
-						
-						pages = springerSplit[2].substring(4);
-						
-						if (springerSplit[3].length()>=4) {
-							year = springerSplit[3].substring(0,4);
-						}
-					}
-				} else {
-					if (DOI==null) {
-						pos = curString.indexOf("DOI");
-						if (pos < 0) pos = curString.indexOf("doi");
-						if (pos>=0) {
-							pos += 3;
-							char delimiter = curString.charAt(pos);
-							if ((delimiter == ':') || (delimiter == ' ')) {
-								pos++;
-							}
-							int nextSpace = curString.indexOf(' ', pos);
-							if (nextSpace > 0)
-								DOI = curString.substring(pos, nextSpace);
-							else
-								DOI = curString.substring(pos);
-						}
-					}
-					
-					if ((publisher==null) && (curString.indexOf("IEEE")>=0)) {
-						// IEEE has the conference things at the end
-						publisher = "IEEE";
-
-						// year is extracted by extractYear
-						// otherwise, we could it determine as follows: 
-						// String yearStr = curString.substring(curString.length()-4);
-						// if (isYear(yearStr)) {
-						//	year = yearStr;
-						// }
-						
-						if (conference == null) {
-							pos = curString.indexOf('$');
-							if (pos>0) {
-								// we found the price
-								// before the price, the ISSN is stated
-								// skip that
-								pos -= 2;
-								while ((pos>=0) && (curString.charAt(pos) != ' '))
-									pos--;
-								if (pos>0) {
-									conference = curString.substring(0,pos);
-								}
-							}
-						}
-					}
-					
-//					String lower = curString.toLowerCase();
-//					if (institution == null) {
-//						
-//					}
-					
-				}
-			}
-
-			BibtexEntry entry = new BibtexEntry();
-			entry.setType(type);
-			
-			if (author!=null) entry.setField("author", author);
-			if (editor!=null) entry.setField("editor", editor);
-			if (institution!=null) entry.setField("institution", institution);
-			if (abstractT!=null) entry.setField("abstract", abstractT);
-			if (keywords!=null) entry.setField("keywords", keywords);
-			if (title!=null) entry.setField("title", title);
-			if (conference!=null) entry.setField("booktitle", conference);
-			if (DOI!=null) entry.setField("doi", DOI);
-			if (series!=null) entry.setField("series", series);
-			if (volume!=null) entry.setField("volume", volume);
-			if (number!=null) entry.setField("number", number);
-			if (pages!=null) entry.setField("pages", pages);
-			if (year!=null) entry.setField("year", year);
-			if (publisher!=null) entry.setField("publisher", publisher);
-			
-			entry.setField("review", textResult);
-
-			res.add(entry);
-		} catch (NoClassDefFoundError e) {
-			if (e.getMessage().equals("org/bouncycastle/jce/provider/BouncyCastleProvider")) {
-				status.showMessage(Globals.lang("Java Bouncy Castle library not found. Please download and install it. For more information see http://www.bouncycastle.org/."));
-			} else {
-				logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
-			}
-		} finally {
-			document.close();
-		}
-		
-		return res;
-	}
-
-	
-	
-	/**
-	 * Extract the year out of curString (if it is not yet defined)
-	 */
-	private void extractYear() {
-		if (year != null)
-			return;
-		
-		final Pattern p = Pattern.compile("\\d\\d\\d\\d");
-		Matcher m = p.matcher(curString);
-		if (m.find()) {
-			year = curString.substring(m.start(), m.end());
-		}
-		
-	}
-
-	/**
-	 * PDFTextStripper normally does NOT produce multiple empty lines 
-	 * (besides at strange PDFs). These strange PDFs are handled here:
-	 * proceed to next non-empty line
-	 */
-	private void proceedToNextNonEmptyLine() {
-		while ((i<split.length) && (split[i].trim().equals(""))) {
-			i++;
-		}
-	}
-	
-
-	/**
-	 * Fill curString with lines until "" is found
-	 * No trailing space is added
-	 * i is advanced to the next non-empty line (ignoring white space)
-	 * 
-	 * Lines containing only white spaces are ignored,
-	 * but NOT considered as ""
-	 * 
-	 * Uses GLOBAL variables split, curLine, i
-	 */
-	private void fillCurStringWithNonEmptyLines() {
-		// ensure that curString does not end with " "
-		curString = curString.trim();
-		while ((i<split.length)  && (!split[i].equals(""))) {
-			String curLine = split[i].trim();
-			if (!curLine.equals("")) {
-				if (curString.length()>0) {
-					// insert separating space if necessary
-					curString = curString.concat(" ");
-				}
-				curString = curString.concat(split[i]);
-			}
-			i++;
-		}
-
-		proceedToNextNonEmptyLine();
-	}
-
-	/**
-	 * resets curString
-	 * curString now contains the last block (until "" reached)
-	 * Trailing space is added
-	 * 
-	 * invariant before/after: i points to line before the last handled block
-	 */
-	private void readLastBlock() {
-		while ((i>=0) && (split[i].trim().equals(""))) {
-			i--;
-		}
-		// i is now at the end of a block
-		
-		int end = i;
-		
-		// find beginning
-		while ((i>=0) && (!split[i].equals(""))) {
-			i--;
-		}
-		// i is now the line before the beginning of the block
-		// this fulfills the invariant
-		
-		curString = "";
-		for (int j = i+1; j<=end; j++) {
-			curString = curString.concat(split[j].trim());
-			if (j!=end) {
-				curString = curString.concat(" ");
-			}
-		}
-	}
-
-	@Override
-	public String getFormatName() {
-		return "PDFcontent";
-	}
-
-}
+/*
+PdfContentImporter is part of JabRef. 
+Copyright (C) 2011 Oliver Kopp
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+or see http://www.gnu.org/licenses/gpl-2.0.html
+*/
+
+package net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.util.PDFTextStripper;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.Util;
+
+/**
+ * PdfContentImporter parses data of the first page of the PDF and creates a BibTeX entry.
+ * 
+ * Currently, Springer and IEEE formats are supported.
+ * 
+ * Integrating XMP support is future work
+ * 
+ * @author koppor
+ *
+ */
+public class PdfContentImporter extends ImportFormat {
+	
+	private static Logger logger = Logger.getLogger(PdfContentImporter.class.getName());
+	
+	// we can store the DOItoBibTeXFetcher as single reference as the fetcher doesn't hold internal state
+	private static DOItoBibTeXFetcher doiToBibTeXFetcher = new DOItoBibTeXFetcher();
+
+	/* global variables holding the state of the current parse run
+	 * needed to be able to generate methods such as "fillCurStringWithNonEmptyLines"
+	 */
+	
+	// input split into several lines
+	private String[] split; 
+	
+	// current index in split
+    private int i;
+    
+    // curent "line" in split.
+    // sometimes, a "line" is several lines in split
+    private String curString;
+    
+	private String year = null;
+
+	@Override
+	public boolean isRecognizedFormat(InputStream in) throws IOException {
+		return false;
+	}
+
+	/**
+	 * Removes all non-letter characters at the end
+	 * 
+	 * EXCEPTION: a closing bracket is NOT removed
+	 * 
+	 * @param input
+	 * @return
+	 * TODO Additionally repalce multiple subsequent spaces by one space
+	 */
+	private String removeNonLettersAtEnd(String input) {
+		input = input.trim();
+		if (input.length() == 0)
+			return input;
+		char lastC = input.charAt(input.length()-1);
+		while (!Character.isLetter(lastC) &&  (lastC!=')')) {
+			// if there is an asterix, a dot or something else at the end: remove it
+			input = input.substring(0, input.length()-1);
+			if (input.length()>0) {
+				lastC = input.charAt(input.length()-1);
+			} else {
+				break;
+			}
+		}
+		return input;
+	}
+	
+	private String streamlineNames(String names) {
+		String res;
+		// supported formats:
+		//   Matthias Schrepfer1, Johannes Wolf1, Jan Mendling1, and Hajo A. Reijers2
+		if (names.contains(",")) {
+			String[] splitNames = names.split(",");
+			res = "";
+			boolean isFirst = true;
+			for (int i=0; i<splitNames.length; i++) {
+				String curName = removeNonLettersAtEnd(splitNames[i]);
+				if (curName.indexOf("and")==0) {
+					// skip possible ands between names
+					curName = curName.substring(3).trim();
+				} else {
+					int posAnd = curName.indexOf(" and "); 
+					if (posAnd>=0) {
+						String nameBefore = curName.substring(0, posAnd);
+						// cannot be first name as "," is contained in the string
+						res = res.concat(" and ").concat(removeNonLettersAtEnd(nameBefore));
+						curName = curName.substring(posAnd+5);
+					}
+				}
+					
+				if (!curName.equals("")) {
+					if (curName.equalsIgnoreCase("et al."))
+						curName = "others";
+					if (isFirst) {
+						isFirst = false;
+					} else {
+						res = res.concat(" and ");
+					}
+					res = res.concat(curName);
+				}
+			}
+		} else {
+			// assumption: names separated by space
+			
+			String[] splitNames = names.split(" ");
+			if (splitNames.length == 0) {
+				// empty names... something was really wrong...
+				return "";
+			}
+			
+			boolean workedOnFirstOrMiddle = false;
+			boolean isFirst = true;
+			int i=0;
+			res = "";
+			do {
+				if (!workedOnFirstOrMiddle) {
+					if (splitNames[i].equalsIgnoreCase("and")) {
+						// do nothing, just increment i at the end of this iteration
+					} else {
+						if (isFirst) {
+							isFirst = false;
+						} else {
+							res = res.concat(" and ");
+						}
+						if ((splitNames[i].equalsIgnoreCase("et")) && (splitNames.length>i+1) && (splitNames[i+1].equalsIgnoreCase("al."))) {
+							res = res.concat("others");
+							break;
+						} else {
+							res = res.concat(splitNames[i]).concat(" ");
+							workedOnFirstOrMiddle = true;
+						}
+					}
+				} else {
+					// last item was a first or a middle name
+					// we have to check whether we are on a middle name
+					// if not, just add the item as last name and add an "and"
+					if (splitNames[i].contains(".")) {
+						// we found a middle name
+						res = res.concat(splitNames[i]).concat(" ");
+					} else {
+						// last name found
+						res = res.concat(removeNonLettersAtEnd(splitNames[i]));
+						
+						if (splitNames[i].length() > 0 && Character.isLowerCase(splitNames[i].charAt(0))) {
+							// it is probably be "van", "vom", ...
+							// we just rely on the fact that these things are written in lower case letters
+							// do NOT finish name
+							res = res.concat(" ");
+						} else {
+							// finish this name
+							workedOnFirstOrMiddle = false;
+						}
+					}
+				}
+				i++;
+			} while (i<splitNames.length);
+			
+		}
+		return res;
+	}
+	
+	private String streamlineTitle(String title) {
+		return removeNonLettersAtEnd(title);
+	}
+	
+	private boolean isYear(String yearStr) {
+		try {
+			Integer.parseInt(yearStr);
+			return true;
+		} catch (NumberFormatException e) {
+			return false;
+		}
+	}
+	
+	@Override
+	public List<BibtexEntry> importEntries(InputStream in, OutputPrinter status) throws IOException {
+		final ArrayList<BibtexEntry> res = new ArrayList<BibtexEntry>(1);
+		
+		PDDocument document = null;
+		try {
+			document = PDDocument.load(in);
+		} catch (IOException e) {
+			logger.log(Level.SEVERE, "Could not load document", e);
+			return res;
+		}
+
+		try {
+			if (document.isEncrypted()) {
+				logger.log(Level.INFO,
+						Globals.lang("Encrypted documents are not supported"));
+				//return res;
+			}
+
+			PDFTextStripper stripper = new PDFTextStripper();
+			stripper.setStartPage(1);
+			stripper.setEndPage(1);
+			stripper.setSortByPosition(true);
+			stripper.setParagraphEnd(System.getProperty("line.separator"));
+			StringWriter writer = new StringWriter();
+			stripper.writeText(document, writer);
+			String textResult = writer.toString();
+			
+			String doi = Util.getDOI(textResult);
+			if (doi.length() < textResult.length()) {
+				// A DOI was found in the text
+				// We do NO parsing of the text, but use the DOI fetcher
+				
+				ImportInspector i = new ImportInspector() {
+					@Override
+					public void toFront() {
+					}
+					@Override
+					public void setProgress(int current, int max) {
+					}
+					@Override
+					public void addEntry(BibtexEntry entry) {
+						// add the entry to the result object
+						res.add(entry);
+					}
+				};
+				doiToBibTeXFetcher.processQuery(doi, i, status);
+				if (res.size() != 0) {
+					// if something has been found, return the result
+					return res;
+				} else {
+					// otherwise, we just parse the PDF
+				}
+			}
+
+			String author = null;
+			String editor = null;
+			String institution = null;
+			String abstractT = null;
+			String keywords = null;
+			String title = null;
+			String conference = null;
+			String DOI = null;
+			String series = null;
+			String volume = null;
+			String number = null;
+			String pages = null;
+			// year is a class variable as the method extractYear() uses it;
+			String publisher = null;
+			BibtexEntryType type = BibtexEntryType.INPROCEEDINGS; 
+			
+			final String lineBreak = System.getProperty("line.separator");
+			
+			split = textResult.split(lineBreak);
+			
+			// idea: split[] contains the different lines
+			// blocks are separated by empty lines
+			// treat each block
+			//   or do special treatment at authors (which are not broken)
+			//   therefore, we do a line-based and not a block-based splitting
+			// i points to the current line
+			// curString (mostly) contains the current block
+			//   the different lines are joined into one and thereby separated by " "
+			
+			proceedToNextNonEmptyLine();
+			if (i>=split.length) {
+				// PDF could not be parsed or is empty
+				// return empty list
+				return res;
+			}
+			curString = split[i];
+			i = i+1;
+			
+			if (curString.length()>4) {
+				// special case: possibly conference as first line on the page
+				extractYear();
+				if (curString.contains("Conference")) {
+					fillCurStringWithNonEmptyLines();
+					conference = curString;
+					curString = "";
+				} else {
+					// e.g. Copyright (c) 1998 by the Genetics Society of America
+					// future work: get year using RegEx
+					String lower = curString.toLowerCase();
+					if (lower.contains("copyright")) {
+						fillCurStringWithNonEmptyLines();
+						publisher = curString;
+						curString = "";
+					}
+				}
+			}
+			
+			// start: title
+			fillCurStringWithNonEmptyLines();
+			title = streamlineTitle(curString);
+			curString = "";
+			//i points to the next non-empty line
+			
+			// after title: authors
+			author = null;
+			while ((i<split.length)  && (!split[i].equals(""))) {
+				// author names are unlikely to be split among different lines
+				// treat them line by line
+				curString = streamlineNames(split[i]);
+				if (author==null) {
+					author = curString;
+				} else {
+					if (curString.equals("")) {
+						// if split[i] is "and" then "" is returned by streamlineNames -> do nothing
+					} else {
+						author = author.concat(" and ").concat(curString);
+					}
+				}
+				i++;
+			}			
+			curString = "";
+			i++;
+			
+			// then, abstract and keywords follow
+			while (i<split.length) {
+				curString = split[i];
+				if ((curString.length()>="Abstract".length()) && (curString.substring(0, "Abstract".length()).equalsIgnoreCase("Abstract"))) {
+					if (curString.length() == "Abstract".length()) {
+						// only word "abstract" found -- skip line
+						curString = "";
+					} else {
+						curString = curString.substring("Abstract".length()+1).trim().concat(lineBreak);
+					}
+					i++;
+					// fillCurStringWithNonEmptyLines() cannot be used as that uses " " as line separator
+					// whereas we need linebreak as separator
+					while ((i<split.length)  && (!split[i].equals(""))) {
+						curString = curString.concat(split[i]).concat(lineBreak);
+						i++;
+					}
+					abstractT=curString;
+					i++;
+				} else if ((curString.length()>="Keywords".length()) && (curString.substring(0, "Keywords".length()).equalsIgnoreCase("Keywords"))) {
+					if (curString.length() == "Keywords".length()) {
+						// only word "Keywords" found -- skip line
+						curString = "";
+					} else {
+						curString = curString.substring("Keywords".length()+1).trim();
+					}
+					i++;
+					fillCurStringWithNonEmptyLines();
+					keywords=removeNonLettersAtEnd(curString);
+				} else {
+					String lower = curString.toLowerCase();
+					
+					int pos = lower.indexOf("technical");
+					if (pos>=0) {
+						type = BibtexEntryType.TECHREPORT;
+						pos = curString.trim().lastIndexOf(' ');
+						if (pos>=0) {
+							// assumption: last character of curString is NOT ' '
+							//   otherwise pos+1 leads to an out-of-bounds exception
+							number = curString.substring(pos+1);
+						}
+					}
+					
+					i++;
+					proceedToNextNonEmptyLine();
+				}
+			}
+			
+			i = split.length-1;
+			
+			// last block: DOI, detailed information
+			// sometimes, this information is in the third last block etc...
+			// therefore, read until the beginning of the file 
+			
+			while (i>=0) {
+				readLastBlock();
+				// i now points to the block before or is -1
+				// curString contains the last block, separated by " "
+			
+				extractYear();
+				
+				int pos = curString.indexOf("(Eds.)");
+				if ((pos >= 0) && (publisher == null)) {
+					// looks like a Springer last line
+					// e.g: A. Persson and J. Stirna (Eds.): PoEM 2009, LNBIP 39, pp. 161-175, 2009.
+					publisher = "Springer";
+					editor = streamlineNames(curString.substring(0, pos - 1));
+					curString = curString.substring(pos+"(Eds.)".length()+2); //+2 because of ":" after (Eds.) and the subsequent space
+					String[] springerSplit = curString.split(", ");
+					if (springerSplit.length >= 4) {
+						conference = springerSplit[0];
+
+						String seriesData = springerSplit[1];
+						int lastSpace = seriesData.lastIndexOf(' ');
+						series = seriesData.substring(0, lastSpace);
+						volume = seriesData.substring(lastSpace + 1);
+						
+						pages = springerSplit[2].substring(4);
+						
+						if (springerSplit[3].length()>=4) {
+							year = springerSplit[3].substring(0,4);
+						}
+					}
+				} else {
+					if (DOI==null) {
+						pos = curString.indexOf("DOI");
+						if (pos < 0) pos = curString.indexOf("doi");
+						if (pos>=0) {
+							pos += 3;
+							char delimiter = curString.charAt(pos);
+							if ((delimiter == ':') || (delimiter == ' ')) {
+								pos++;
+							}
+							int nextSpace = curString.indexOf(' ', pos);
+							if (nextSpace > 0)
+								DOI = curString.substring(pos, nextSpace);
+							else
+								DOI = curString.substring(pos);
+						}
+					}
+					
+					if ((publisher==null) && (curString.indexOf("IEEE")>=0)) {
+						// IEEE has the conference things at the end
+						publisher = "IEEE";
+
+						// year is extracted by extractYear
+						// otherwise, we could it determine as follows: 
+						// String yearStr = curString.substring(curString.length()-4);
+						// if (isYear(yearStr)) {
+						//	year = yearStr;
+						// }
+						
+						if (conference == null) {
+							pos = curString.indexOf('$');
+							if (pos>0) {
+								// we found the price
+								// before the price, the ISSN is stated
+								// skip that
+								pos -= 2;
+								while ((pos>=0) && (curString.charAt(pos) != ' '))
+									pos--;
+								if (pos>0) {
+									conference = curString.substring(0,pos);
+								}
+							}
+						}
+					}
+					
+//					String lower = curString.toLowerCase();
+//					if (institution == null) {
+//						
+//					}
+					
+				}
+			}
+
+			BibtexEntry entry = new BibtexEntry();
+			entry.setType(type);
+			
+			if (author!=null) entry.setField("author", author);
+			if (editor!=null) entry.setField("editor", editor);
+			if (institution!=null) entry.setField("institution", institution);
+			if (abstractT!=null) entry.setField("abstract", abstractT);
+			if (keywords!=null) entry.setField("keywords", keywords);
+			if (title!=null) entry.setField("title", title);
+			if (conference!=null) entry.setField("booktitle", conference);
+			if (DOI!=null) entry.setField("doi", DOI);
+			if (series!=null) entry.setField("series", series);
+			if (volume!=null) entry.setField("volume", volume);
+			if (number!=null) entry.setField("number", number);
+			if (pages!=null) entry.setField("pages", pages);
+			if (year!=null) entry.setField("year", year);
+			if (publisher!=null) entry.setField("publisher", publisher);
+			
+			entry.setField("review", textResult);
+
+			res.add(entry);
+		} catch (NoClassDefFoundError e) {
+			if (e.getMessage().equals("org/bouncycastle/jce/provider/BouncyCastleProvider")) {
+				status.showMessage(Globals.lang("Java Bouncy Castle library not found. Please download and install it. For more information see http://www.bouncycastle.org/."));
+			} else {
+				logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
+			}
+		} finally {
+			document.close();
+		}
+		
+		return res;
+	}
+
+	
+	
+	/**
+	 * Extract the year out of curString (if it is not yet defined)
+	 */
+	private void extractYear() {
+		if (year != null)
+			return;
+		
+		final Pattern p = Pattern.compile("\\d\\d\\d\\d");
+		Matcher m = p.matcher(curString);
+		if (m.find()) {
+			year = curString.substring(m.start(), m.end());
+		}
+		
+	}
+
+	/**
+	 * PDFTextStripper normally does NOT produce multiple empty lines 
+	 * (besides at strange PDFs). These strange PDFs are handled here:
+	 * proceed to next non-empty line
+	 */
+	private void proceedToNextNonEmptyLine() {
+		while ((i<split.length) && (split[i].trim().equals(""))) {
+			i++;
+		}
+	}
+	
+
+	/**
+	 * Fill curString with lines until "" is found
+	 * No trailing space is added
+	 * i is advanced to the next non-empty line (ignoring white space)
+	 * 
+	 * Lines containing only white spaces are ignored,
+	 * but NOT considered as ""
+	 * 
+	 * Uses GLOBAL variables split, curLine, i
+	 */
+	private void fillCurStringWithNonEmptyLines() {
+		// ensure that curString does not end with " "
+		curString = curString.trim();
+		while ((i<split.length)  && (!split[i].equals(""))) {
+			String curLine = split[i].trim();
+			if (!curLine.equals("")) {
+				if (curString.length()>0) {
+					// insert separating space if necessary
+					curString = curString.concat(" ");
+				}
+				curString = curString.concat(split[i]);
+			}
+			i++;
+		}
+
+		proceedToNextNonEmptyLine();
+	}
+
+	/**
+	 * resets curString
+	 * curString now contains the last block (until "" reached)
+	 * Trailing space is added
+	 * 
+	 * invariant before/after: i points to line before the last handled block
+	 */
+	private void readLastBlock() {
+		while ((i>=0) && (split[i].trim().equals(""))) {
+			i--;
+		}
+		// i is now at the end of a block
+		
+		int end = i;
+		
+		// find beginning
+		while ((i>=0) && (!split[i].equals(""))) {
+			i--;
+		}
+		// i is now the line before the beginning of the block
+		// this fulfills the invariant
+		
+		curString = "";
+		for (int j = i+1; j<=end; j++) {
+			curString = curString.concat(split[j].trim());
+			if (j!=end) {
+				curString = curString.concat(" ");
+			}
+		}
+	}
+
+	@Override
+	public String getFormatName() {
+		return "PDFcontent";
+	}
+
+}
diff --git a/src/java/net/sf/jabref/imports/PdfXmpImporter.java b/src/java/net/sf/jabref/imports/PdfXmpImporter.java
index 3be9547..2aa0ccd 100644
--- a/src/java/net/sf/jabref/imports/PdfXmpImporter.java
+++ b/src/java/net/sf/jabref/imports/PdfXmpImporter.java
@@ -1,67 +1,67 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.util.XMPUtil;
-
-/**
- * Wraps the XMPUtility function to be used as an ImportFormat.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class PdfXmpImporter extends ImportFormat {
-
-	public String getFormatName() {
-		return Globals.lang("XMP-annotated PDF");
-	}
-
-	/**
-	 * Returns a list of all BibtexEntries found in the inputstream.
-	 */
-	public List<BibtexEntry> importEntries(InputStream in, OutputPrinter status) throws IOException {
-		return XMPUtil.readXMP(in);
-	}
-
-	/**
-	 * Returns whether the given stream contains data that is a.) a pdf and b.)
-	 * contains at least one BibtexEntry.
-	 * 
-	 * @override
-	 */
-	public boolean isRecognizedFormat(InputStream in) throws IOException {
-		return XMPUtil.hasMetadata(in);
-	}
-
-	/**
-	 * String used to identify this import filter on the command line.
-	 * 
-	 * @override
-	 * @return "xmp"
-	 */
-	public String getCLIid() {
-		return "xmp";
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.util.XMPUtil;
+
+/**
+ * Wraps the XMPUtility function to be used as an ImportFormat.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class PdfXmpImporter extends ImportFormat {
+
+	public String getFormatName() {
+		return Globals.lang("XMP-annotated PDF");
+	}
+
+	/**
+	 * Returns a list of all BibtexEntries found in the inputstream.
+	 */
+	public List<BibtexEntry> importEntries(InputStream in, OutputPrinter status) throws IOException {
+		return XMPUtil.readXMP(in);
+	}
+
+	/**
+	 * Returns whether the given stream contains data that is a.) a pdf and b.)
+	 * contains at least one BibtexEntry.
+	 * 
+	 * @override
+	 */
+	public boolean isRecognizedFormat(InputStream in) throws IOException {
+		return XMPUtil.hasMetadata(in);
+	}
+
+	/**
+	 * String used to identify this import filter on the command line.
+	 * 
+	 * @override
+	 * @return "xmp"
+	 */
+	public String getCLIid() {
+		return "xmp";
+	}
+
+}
diff --git a/src/java/net/sf/jabref/imports/PostOpenAction.java b/src/java/net/sf/jabref/imports/PostOpenAction.java
index d771f78..eff3910 100644
--- a/src/java/net/sf/jabref/imports/PostOpenAction.java
+++ b/src/java/net/sf/jabref/imports/PostOpenAction.java
@@ -1,52 +1,52 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import net.sf.jabref.BasePanel;
-
-/**
- * This interface defines potential actions that may need to be taken after
- * opening a bib file into JabRef. This can for instance be file upgrade actions
- * that should be offered due to new features in JabRef, and may depend on e.g.
- * which JabRef version the file was last written by.
- *
- * This interface is introduced in an attempt to add such functionality in a
- * flexible manner.
- */
-public interface PostOpenAction {
-
-    /**
-     * This method is queried in order to find out whether the action needs to be
-     * performed or not.
-     * @param pr The result of the bib parse operation.
-     * @return true if the action should be called, false otherwise.
-     */
-    public boolean isActionNecessary(ParserResult pr);
-
-    /**
-     * This method is called after the new database has been added to the GUI, if
-     * the isActionNecessary() method returned true.
-     *
-     * Note: if several such methods need to be called sequentially, it is
-     *       important that all implementations of this method do not return
-     *       until the operation is finished. If work needs to be off-loaded
-     *       into a worker thread, use Spin to do this synchronously.
-     *
-     * @param panel The BasePanel where the database is shown.
-     * @param pr The result of the bib parse operation.
-     */
-    public void performAction(BasePanel panel, ParserResult pr);
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import net.sf.jabref.BasePanel;
+
+/**
+ * This interface defines potential actions that may need to be taken after
+ * opening a bib file into JabRef. This can for instance be file upgrade actions
+ * that should be offered due to new features in JabRef, and may depend on e.g.
+ * which JabRef version the file was last written by.
+ *
+ * This interface is introduced in an attempt to add such functionality in a
+ * flexible manner.
+ */
+public interface PostOpenAction {
+
+    /**
+     * This method is queried in order to find out whether the action needs to be
+     * performed or not.
+     * @param pr The result of the bib parse operation.
+     * @return true if the action should be called, false otherwise.
+     */
+    public boolean isActionNecessary(ParserResult pr);
+
+    /**
+     * This method is called after the new database has been added to the GUI, if
+     * the isActionNecessary() method returned true.
+     *
+     * Note: if several such methods need to be called sequentially, it is
+     *       important that all implementations of this method do not return
+     *       until the operation is finished. If work needs to be off-loaded
+     *       into a worker thread, use Spin to do this synchronously.
+     *
+     * @param panel The BasePanel where the database is shown.
+     * @param pr The result of the bib parse operation.
+     */
+    public void performAction(BasePanel panel, ParserResult pr);
+}
diff --git a/src/java/net/sf/jabref/imports/PreviewEntryFetcher.java b/src/java/net/sf/jabref/imports/PreviewEntryFetcher.java
index b7034ed..468957c 100644
--- a/src/java/net/sf/jabref/imports/PreviewEntryFetcher.java
+++ b/src/java/net/sf/jabref/imports/PreviewEntryFetcher.java
@@ -1,31 +1,31 @@
-package net.sf.jabref.imports;
-
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.gui.FetcherPreviewDialog;
-
-import javax.swing.*;
-import java.util.Map;
-
-/**
- *
- */
-public interface PreviewEntryFetcher extends EntryFetcher {
-
-    public boolean processQueryGetPreview(String query, FetcherPreviewDialog preview,
-                                                      OutputPrinter status);
-
-    public void getEntries(Map<String, Boolean> selection, ImportInspector inspector);
-
-    /**
-     * The number of entries a user can select for download without getting a warning message.
-     * @return the warning limit
-     */
-    public int getWarningLimit();
-
-    /**
-     * The preferred table row height for the previews.
-     * @return the preferred height
-     */
-    public int getPreferredPreviewHeight();
-
-}
+package net.sf.jabref.imports;
+
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.gui.FetcherPreviewDialog;
+
+import javax.swing.*;
+import java.util.Map;
+
+/**
+ *
+ */
+public interface PreviewEntryFetcher extends EntryFetcher {
+
+    public boolean processQueryGetPreview(String query, FetcherPreviewDialog preview,
+                                                      OutputPrinter status);
+
+    public void getEntries(Map<String, Boolean> selection, ImportInspector inspector);
+
+    /**
+     * The number of entries a user can select for download without getting a warning message.
+     * @return the warning limit
+     */
+    public int getWarningLimit();
+
+    /**
+     * The preferred table row height for the previews.
+     * @return the preferred height
+     */
+    public int getPreferredPreviewHeight();
+
+}
diff --git a/src/java/net/sf/jabref/imports/RepecNepImporter.java b/src/java/net/sf/jabref/imports/RepecNepImporter.java
index 39d34de..009bf9d 100644
--- a/src/java/net/sf/jabref/imports/RepecNepImporter.java
+++ b/src/java/net/sf/jabref/imports/RepecNepImporter.java
@@ -1,489 +1,489 @@
-/*
- Copyright (C) 2005 Andreas Rudert
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-package net.sf.jabref.imports;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.Util;
-
-
-/**
- * Imports a New Economics Papers-Message from the REPEC-NEP Service.
- * 
- * <p>{@link http://www.repec.org RePEc} (Research Papers in Economics) 
- * is a collaborative effort of over 100 volunteers in 49 countries 
- * to enhance the dissemination of research in economics. The heart of 
- * the project is a decentralized database of working papers, journal 
- * articles and software components. All RePEc material is freely available.</p>
- * At the time of writing RePEc holds over 300.000 items.</p>
- * 
- * <p>{@link http://nep.repec.org NEP} (New Economic Papers) is an announcement 
- * service which filters information on new additions to RePEc into edited 
- * reports. The goal is to provide subscribers with up-to-date information 
- * to the research literature.</p>
- * 
- * <p>This importer is capable of importing NEP messages into JabRef.</p>
- * 
- * <p>There is no officially defined message format for NEP. NEP messages are assumed to have 
- * (and almost always have) the form given by the following semi-formal grammar:
- * <pre>
- * NEPMessage:
- *       MessageSection NEPMessage
- *       MessageSection
- *       
- * MessageSection:            
- *       OverviewMessageSection 
- *       OtherMessageSection
- *
- * # we skip the overview
- * OverviewMessageSection:
- *       'In this issue we have: ' SectionSeparator OtherStuff
- *
- * OtherMessageSection:
- *       SectionSeparator  OtherMessageSectionContent
- *
- * # we skip other stuff and read only full working paper references
- * OtherMessageSectionContent:
- *       WorkingPaper EmptyLine OtherMessageSectionContent 
- *       OtherStuff EmptyLine OtherMessageSectionContent
- *       ''
- *       
- * OtherStuff:
- *       NonEmptyLine OtherStuff
- *       NonEmptyLine
- *       
- * NonEmptyLine:
- *       a non-empty String that does not start with a number followed by a '.'
- *       
- * # working papers are recognized by a number followed by a '.' 
- * # in a non-overview section
- * WorkingPaper:
- *       Number'.' WhiteSpace TitleString EmptyLine Authors EmptyLine Abstract AdditionalFields
- *       Number'.' WhiteSpace TitleString AdditionalFields Abstract AdditionalFields
- *       
- * TitleString:
- *       a String that may span several lines and should be joined
- *       
- * # there must be at least one author
- * Authors:
- *       Author '\n' Authors
- *       Author '\n'
- * 
- * # optionally, an institution is given for an author
- * Author:
- *       AuthorName
- *       AuthorName '(' Institution ')'
- *       
- * # there are no rules about the name, it may be firstname lastname or lastname, firstname or anything else
- * AuthorName:
- *       a non-empty String without '(' or ')' characters, not spanning more that one line
- *       
- * Institution:
- *       a non-empty String that may span several lines
- *       
- * Abstract:
- *       a (possibly empty) String that may span several lines
- *
- * AdditionalFields:
- *       AdditionalField '\n' AdditionalFields
- *       EmptyLine AdditionalFields
- *       ''
- *       
- * AdditionalField:
- *       'Keywords:' KeywordList
- *       'URL:' non-empty String
- *       'Date:' DateString
- *       'JEL:' JelClassificationList
- *       'By': Authors
- *       
- * KeywordList:
- *        Keyword ',' KeywordList
- *        Keyword ';' KeywordList
- *        Keyword
- *        
- * Keyword:
- *        non-empty String that does not contain ',' (may contain whitespace)
- *        
- * # if no date is given, the current year as given by the system clock is assumed
- * DateString:
- *        'yyyy-MM-dd'
- *        'yyyy-MM'
- *        'yyyy'
- *        
- * JelClassificationList:
- *        JelClassification JelClassificationList
- *        JelClassification
- *      
- * # the JEL Classifications are set into a new BIBTEX-field 'jel'
- * # they will appear if you add it as a field to one of the BIBTex Entry sections
- * JelClassification:
- *        one of the allowed classes, see http://ideas.repec.org/j/
- *       
- * SectionSeparator:
- *       '\n-----------------------------'
- * </pre>
- * </p>
- * 
- * @see http://nep.repec.org
- * @author andreas_sf at rudert-home dot de
- */
-public class RepecNepImporter extends ImportFormat {
-
-  private static Logger logger = Logger.getLogger(RepecNepImporter.class.getName());
-
-  private final static Collection<String> recognizedFields = Arrays.asList(new String[]{"Keywords", "JEL", "Date", "URL", "By"});
-  
-  private int line = 0;
-  private String lastLine = "";
-  private String preLine = "";
-  private BufferedReader in = null;
-  private boolean inOverviewSection = false;
-  
-  /**
-   * Return the name of this import format.
-   */
-  public String getFormatName() {
-    return "REPEC New Economic Papers (NEP)";
-  }
-
-  /*
-   *  (non-Javadoc)
-   * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-   */
-  public String getCLIId() {
-    return "repecnep";
-  }
-  
-  /*
-   *  (non-Javadoc)
-   * @see net.sf.jabref.imports.ImportFormat#getExtensions()
-   */  
-  public String getExtensions() {
-    return ".txt";
-  }
-  
-  /*
-   *  (non-Javadoc)
-   * @see net.sf.jabref.imports.ImportFormat#getDescription()
-   */
-  public String getDescription() {
-    return 
-      "Imports a New Economics Papers-Message (see http://nep.repec.org)\n"
-    + "from the REPEC-NEP Service (see http://www.repec.org).\n"
-    + "To import papers either save a NEP message as a text file and then import or\n"
-    + "copy&paste the papers you want to import and make sure, one of the first lines\n"
-    + "contains the line \"nep.repec.org\".";
-  }
-  
-  /*
-   *  (non-Javadoc)
-   * @see net.sf.jabref.imports.ImportFormat#isRecognizedFormat(java.io.InputStream)
-   */
-  public boolean isRecognizedFormat(InputStream stream) throws IOException {
-    // read the first couple of lines
-    // NEP message usually contain the String 'NEP: New Economics Papers'
-    // or, they are from nep.repec.org
-    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-    String startOfMessage = "";
-    String line = in.readLine();
-    for (int i = 0; i < 25 && line != null; i++) {
-      startOfMessage += line;
-      line = in.readLine();
-    }
-    return startOfMessage.indexOf("NEP: New Economics Papers") >= 0 || startOfMessage.indexOf("nep.repec.org") >= 0;
-  }
-
-  private boolean startsWithKeyword(Collection<String> keywords) {
-    boolean result = this.lastLine.indexOf(':') > 0;
-    if (result) {
-      String possibleKeyword = this.lastLine.substring(0, this.lastLine.indexOf(':'));
-      result = keywords.contains(possibleKeyword);
-    }
-    return result;
-  }
-  
-  private void readLine() throws IOException {
-    this.line++;
-    this.preLine = this.lastLine;
-    this.lastLine = this.in.readLine();
-  }
-  
-  /**
-   * Read multiple lines.
-   * 
-   * <p>Reads multiple lines until either
-   * <ul>
-   *   <li>an empty line</li>
-   *   <li>the end of file</li>
-   *   <li>the next working paper or</li>
-   *   <li>a keyword</li>
-   * </ul>
-   * is found. Whitespace at start or end of lines is trimmed except for one blank character.</p>
-   * 
-   * @return  result
-   */
-  private String readMultipleLines() throws IOException {
-    String result = this.lastLine.trim();
-    readLine();
-    while (this.lastLine != null && !this.lastLine.trim().equals("") && !startsWithKeyword(recognizedFields) && !isStartOfWorkingPaper()) {
-      result += this.lastLine.length() == 0 ? this.lastLine.trim() : " " + this.lastLine.trim();
-      readLine();
-    }
-    return result;
-  }
-
-  /**
-   * Implements grammar rule "TitleString".
-   * 
-   * @param be
-   * @throws IOException
-   */
-  private void parseTitleString(BibtexEntry be) throws IOException {
-    // skip article number
-    this.lastLine = this.lastLine.substring(this.lastLine.indexOf('.') + 1, this.lastLine.length());
-    be.setField("title", readMultipleLines());
-  }
-  
-  /**
-   * Implements grammer rule "Authors"
-   * 
-   * @param be
-   * @throws IOException
-   */
-  private void parseAuthors(BibtexEntry be) throws IOException {
-    // read authors and institutions
-    String authors = "";
-    String institutions = "";
-    while (this.lastLine != null && !this.lastLine.equals("") && !startsWithKeyword(recognizedFields)) {
-      
-      // read single author
-      String author = null;
-      String institution = null;
-      boolean institutionDone = false;
-      if (this.lastLine.indexOf('(') >= 0) {
-        author = this.lastLine.substring(0, this.lastLine.indexOf('(')).trim();
-        institutionDone = this.lastLine.indexOf(')') > 0;
-        institution = this.lastLine.substring(this.lastLine.indexOf('(') + 1, institutionDone && this.lastLine.indexOf(')') > this.lastLine.indexOf('(') + 1 ? this.lastLine.indexOf(')') : this.lastLine.length()).trim();
-      } else {
-        author = this.lastLine.substring(0, this.lastLine.length()).trim();
-        institutionDone = true;
-      }
-      
-      readLine();
-      while (!institutionDone && this.lastLine!= null) {
-        institutionDone = this.lastLine.indexOf(')') > 0;
-        institution += this.lastLine.substring(0, institutionDone ? this.lastLine.indexOf(')') : this.lastLine.length()).trim();
-        readLine();
-      }
-      
-      if (author != null) {
-        authors += !authors.equals("") ? " and " + author : "" + author;
-      }
-      if (institution != null) {
-        institutions += !institutions.equals("") ? " and " + institution : "" + institution;
-      }            
-    }
-    
-    if (!authors.equals("")) {
-      be.setField("author", authors);
-    }
-    if (!institutions.equals("")) {
-      be.setField("institution", institutions);
-    }
-  }
-  
-  /**
-   * Implements grammar rule "Abstract".
-   * 
-   * @param be
-   * @throws IOException
-   */
-  private void parseAbstract(BibtexEntry be) throws IOException {
-    String theabstract = readMultipleLines();
-    
-    if (!theabstract.equals("")) {
-      be.setField("abstract", theabstract);
-    }
-  }
-    
-  /**
-   * Implements grammar rule "AdditionalFields".
-   * 
-   * @param be
-   * @throws IOException
-   */
-  private void parseAdditionalFields(BibtexEntry be, boolean multilineUrlFieldAllowed) throws IOException {
-    
-    // one empty line is possible before fields start
-    if (this.lastLine != null && this.lastLine.trim().equals("")) {
-      readLine();  
-    }
-    
-    // read other fields
-    while (this.lastLine != null && !isStartOfWorkingPaper() && (startsWithKeyword(recognizedFields) || this.lastLine.equals(""))) {
-      
-      // if multiple lines for a field are allowed and field consists of multiple lines, join them
-      String keyword = this.lastLine.equals("") ? "" : this.lastLine.substring(0, this.lastLine.indexOf(':')).trim();
-      // skip keyword
-      this.lastLine = this.lastLine.equals("") ? "" : this.lastLine.substring(this.lastLine.indexOf(':')+1, this.lastLine.length()).trim();
-      
-      // parse keywords field
-      if (keyword.equals("Keywords")) {
-        String content = readMultipleLines();
-        String[] keywords = content.split("[,;]");
-        String keywordStr = "";
-        for (int i = 0; i < keywords.length; i++) {
-          keywordStr += " '" + keywords[i].trim() + "'";
-        }
-        be.setField("keywords", keywordStr.trim());
-        
-      // parse JEL field
-      } else if (keyword.equals("JEL")) {
-        be.setField("jel", readMultipleLines());
-        
-      // parse date field
-      } else if (keyword.startsWith("Date")) {
-        Date date = null;
-        String content = readMultipleLines();
-        String[] recognizedDateFormats = new String[] {"yyyy-MM-dd","yyyy-MM","yyyy"};
-        int i = 0;
-        for (; i < recognizedDateFormats.length && date == null; i++) {
-          try {            
-            date = new SimpleDateFormat(recognizedDateFormats[i]).parse(content);
-          } catch (ParseException e) {
-            // wrong format
-          }
-        }
-        
-        Calendar cal = new GregorianCalendar();              
-        cal.setTime(date != null ? date : new Date());
-        be.setField("year", "" + cal.get(Calendar.YEAR));
-        if (date != null && recognizedDateFormats[i-1].indexOf("MM") >= 0) {
-          be.setField("month", "" + cal.get(Calendar.MONTH));
-        }
-        
-      // parse URL field
-      } else if (keyword.startsWith("URL")) {
-        String content = null;
-        if (multilineUrlFieldAllowed) {
-          content = readMultipleLines(); 
-        } else {
-          content = this.lastLine;
-          readLine();
-        }
-        be.setField("url", content);
-        
-      // authors field
-      } else if (keyword.startsWith("By")) {
-        // parse authors      
-        parseAuthors(be); 
-      } else {
-        readLine();
-      }
-    }
-  }
-
-  /**
-   * if line starts with a string of the form 'x. ' and we are not in the overview
-   * section, we have a working paper entry we are interested in
-   */
-  private boolean isStartOfWorkingPaper() {
-    return this.lastLine.matches("\\d+\\.\\s.*") && !this.inOverviewSection && this.preLine.trim().equals("");
-  }
-  
-  /*
-   *  (non-Javadoc)
-   * @see net.sf.jabref.imports.ImportFormat#importEntries(java.io.InputStream)
-   */
-  public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {    
-  	ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
-    String paperNoStr = null;
-    this.line = 0;
-    
-    try {
-    	this.in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-      
-      readLine(); // skip header and editor information
-    	while (this.lastLine != null) {
-  
-        if (this.lastLine.startsWith("-----------------------------")) {
-          this.inOverviewSection = this.preLine.startsWith("In this issue we have");
-        } 
-        if (isStartOfWorkingPaper()) {
-          BibtexEntry be = new BibtexEntry(Util.createNeutralId());
-          be.setType(BibtexEntryType.getType("techreport"));
-          paperNoStr = this.lastLine.substring(0, this.lastLine.indexOf('.'));  
-          parseTitleString(be);
-          if (startsWithKeyword(recognizedFields)) {
-            parseAdditionalFields(be, false);
-          } else {
-            readLine(); // skip empty line
-            parseAuthors(be);
-            readLine(); // skip empty line
-          }
-          if (!startsWithKeyword(recognizedFields)) {
-            parseAbstract(be);
-          }
-          parseAdditionalFields(be, true);
-          
-          bibitems.add(be);
-          paperNoStr = null;
-          
-        } else {        
-          this.preLine = this.lastLine;
-          readLine();
-        }
-      }
-      
-    } catch (Exception e) {
-      String message = "Error in REPEC-NEP import on line " + this.line;
-      if (paperNoStr != null) {
-        message += ", paper no. " + paperNoStr + ": ";
-      }
-      message += e.getMessage();
-      logger.log(Level.SEVERE, message, e);
-      if (!(e instanceof IOException)) {
-        e.printStackTrace();
-        e = new IOException(message);
-      }
-      throw (IOException)e;
-    }
-
-  	return bibitems;	  	
-  }
-}
-
-
+/*
+ Copyright (C) 2005 Andreas Rudert
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+package net.sf.jabref.imports;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.Util;
+
+
+/**
+ * Imports a New Economics Papers-Message from the REPEC-NEP Service.
+ * 
+ * <p>{@link http://www.repec.org RePEc} (Research Papers in Economics) 
+ * is a collaborative effort of over 100 volunteers in 49 countries 
+ * to enhance the dissemination of research in economics. The heart of 
+ * the project is a decentralized database of working papers, journal 
+ * articles and software components. All RePEc material is freely available.</p>
+ * At the time of writing RePEc holds over 300.000 items.</p>
+ * 
+ * <p>{@link http://nep.repec.org NEP} (New Economic Papers) is an announcement 
+ * service which filters information on new additions to RePEc into edited 
+ * reports. The goal is to provide subscribers with up-to-date information 
+ * to the research literature.</p>
+ * 
+ * <p>This importer is capable of importing NEP messages into JabRef.</p>
+ * 
+ * <p>There is no officially defined message format for NEP. NEP messages are assumed to have 
+ * (and almost always have) the form given by the following semi-formal grammar:
+ * <pre>
+ * NEPMessage:
+ *       MessageSection NEPMessage
+ *       MessageSection
+ *       
+ * MessageSection:            
+ *       OverviewMessageSection 
+ *       OtherMessageSection
+ *
+ * # we skip the overview
+ * OverviewMessageSection:
+ *       'In this issue we have: ' SectionSeparator OtherStuff
+ *
+ * OtherMessageSection:
+ *       SectionSeparator  OtherMessageSectionContent
+ *
+ * # we skip other stuff and read only full working paper references
+ * OtherMessageSectionContent:
+ *       WorkingPaper EmptyLine OtherMessageSectionContent 
+ *       OtherStuff EmptyLine OtherMessageSectionContent
+ *       ''
+ *       
+ * OtherStuff:
+ *       NonEmptyLine OtherStuff
+ *       NonEmptyLine
+ *       
+ * NonEmptyLine:
+ *       a non-empty String that does not start with a number followed by a '.'
+ *       
+ * # working papers are recognized by a number followed by a '.' 
+ * # in a non-overview section
+ * WorkingPaper:
+ *       Number'.' WhiteSpace TitleString EmptyLine Authors EmptyLine Abstract AdditionalFields
+ *       Number'.' WhiteSpace TitleString AdditionalFields Abstract AdditionalFields
+ *       
+ * TitleString:
+ *       a String that may span several lines and should be joined
+ *       
+ * # there must be at least one author
+ * Authors:
+ *       Author '\n' Authors
+ *       Author '\n'
+ * 
+ * # optionally, an institution is given for an author
+ * Author:
+ *       AuthorName
+ *       AuthorName '(' Institution ')'
+ *       
+ * # there are no rules about the name, it may be firstname lastname or lastname, firstname or anything else
+ * AuthorName:
+ *       a non-empty String without '(' or ')' characters, not spanning more that one line
+ *       
+ * Institution:
+ *       a non-empty String that may span several lines
+ *       
+ * Abstract:
+ *       a (possibly empty) String that may span several lines
+ *
+ * AdditionalFields:
+ *       AdditionalField '\n' AdditionalFields
+ *       EmptyLine AdditionalFields
+ *       ''
+ *       
+ * AdditionalField:
+ *       'Keywords:' KeywordList
+ *       'URL:' non-empty String
+ *       'Date:' DateString
+ *       'JEL:' JelClassificationList
+ *       'By': Authors
+ *       
+ * KeywordList:
+ *        Keyword ',' KeywordList
+ *        Keyword ';' KeywordList
+ *        Keyword
+ *        
+ * Keyword:
+ *        non-empty String that does not contain ',' (may contain whitespace)
+ *        
+ * # if no date is given, the current year as given by the system clock is assumed
+ * DateString:
+ *        'yyyy-MM-dd'
+ *        'yyyy-MM'
+ *        'yyyy'
+ *        
+ * JelClassificationList:
+ *        JelClassification JelClassificationList
+ *        JelClassification
+ *      
+ * # the JEL Classifications are set into a new BIBTEX-field 'jel'
+ * # they will appear if you add it as a field to one of the BIBTex Entry sections
+ * JelClassification:
+ *        one of the allowed classes, see http://ideas.repec.org/j/
+ *       
+ * SectionSeparator:
+ *       '\n-----------------------------'
+ * </pre>
+ * </p>
+ * 
+ * @see http://nep.repec.org
+ * @author andreas_sf at rudert-home dot de
+ */
+public class RepecNepImporter extends ImportFormat {
+
+  private static Logger logger = Logger.getLogger(RepecNepImporter.class.getName());
+
+  private final static Collection<String> recognizedFields = Arrays.asList(new String[]{"Keywords", "JEL", "Date", "URL", "By"});
+  
+  private int line = 0;
+  private String lastLine = "";
+  private String preLine = "";
+  private BufferedReader in = null;
+  private boolean inOverviewSection = false;
+  
+  /**
+   * Return the name of this import format.
+   */
+  public String getFormatName() {
+    return "REPEC New Economic Papers (NEP)";
+  }
+
+  /*
+   *  (non-Javadoc)
+   * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+   */
+  public String getCLIId() {
+    return "repecnep";
+  }
+  
+  /*
+   *  (non-Javadoc)
+   * @see net.sf.jabref.imports.ImportFormat#getExtensions()
+   */  
+  public String getExtensions() {
+    return ".txt";
+  }
+  
+  /*
+   *  (non-Javadoc)
+   * @see net.sf.jabref.imports.ImportFormat#getDescription()
+   */
+  public String getDescription() {
+    return 
+      "Imports a New Economics Papers-Message (see http://nep.repec.org)\n"
+    + "from the REPEC-NEP Service (see http://www.repec.org).\n"
+    + "To import papers either save a NEP message as a text file and then import or\n"
+    + "copy&paste the papers you want to import and make sure, one of the first lines\n"
+    + "contains the line \"nep.repec.org\".";
+  }
+  
+  /*
+   *  (non-Javadoc)
+   * @see net.sf.jabref.imports.ImportFormat#isRecognizedFormat(java.io.InputStream)
+   */
+  public boolean isRecognizedFormat(InputStream stream) throws IOException {
+    // read the first couple of lines
+    // NEP message usually contain the String 'NEP: New Economics Papers'
+    // or, they are from nep.repec.org
+    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+    String startOfMessage = "";
+    String line = in.readLine();
+    for (int i = 0; i < 25 && line != null; i++) {
+      startOfMessage += line;
+      line = in.readLine();
+    }
+    return startOfMessage.indexOf("NEP: New Economics Papers") >= 0 || startOfMessage.indexOf("nep.repec.org") >= 0;
+  }
+
+  private boolean startsWithKeyword(Collection<String> keywords) {
+    boolean result = this.lastLine.indexOf(':') > 0;
+    if (result) {
+      String possibleKeyword = this.lastLine.substring(0, this.lastLine.indexOf(':'));
+      result = keywords.contains(possibleKeyword);
+    }
+    return result;
+  }
+  
+  private void readLine() throws IOException {
+    this.line++;
+    this.preLine = this.lastLine;
+    this.lastLine = this.in.readLine();
+  }
+  
+  /**
+   * Read multiple lines.
+   * 
+   * <p>Reads multiple lines until either
+   * <ul>
+   *   <li>an empty line</li>
+   *   <li>the end of file</li>
+   *   <li>the next working paper or</li>
+   *   <li>a keyword</li>
+   * </ul>
+   * is found. Whitespace at start or end of lines is trimmed except for one blank character.</p>
+   * 
+   * @return  result
+   */
+  private String readMultipleLines() throws IOException {
+    String result = this.lastLine.trim();
+    readLine();
+    while (this.lastLine != null && !this.lastLine.trim().equals("") && !startsWithKeyword(recognizedFields) && !isStartOfWorkingPaper()) {
+      result += this.lastLine.length() == 0 ? this.lastLine.trim() : " " + this.lastLine.trim();
+      readLine();
+    }
+    return result;
+  }
+
+  /**
+   * Implements grammar rule "TitleString".
+   * 
+   * @param be
+   * @throws IOException
+   */
+  private void parseTitleString(BibtexEntry be) throws IOException {
+    // skip article number
+    this.lastLine = this.lastLine.substring(this.lastLine.indexOf('.') + 1, this.lastLine.length());
+    be.setField("title", readMultipleLines());
+  }
+  
+  /**
+   * Implements grammer rule "Authors"
+   * 
+   * @param be
+   * @throws IOException
+   */
+  private void parseAuthors(BibtexEntry be) throws IOException {
+    // read authors and institutions
+    String authors = "";
+    String institutions = "";
+    while (this.lastLine != null && !this.lastLine.equals("") && !startsWithKeyword(recognizedFields)) {
+      
+      // read single author
+      String author = null;
+      String institution = null;
+      boolean institutionDone = false;
+      if (this.lastLine.indexOf('(') >= 0) {
+        author = this.lastLine.substring(0, this.lastLine.indexOf('(')).trim();
+        institutionDone = this.lastLine.indexOf(')') > 0;
+        institution = this.lastLine.substring(this.lastLine.indexOf('(') + 1, institutionDone && this.lastLine.indexOf(')') > this.lastLine.indexOf('(') + 1 ? this.lastLine.indexOf(')') : this.lastLine.length()).trim();
+      } else {
+        author = this.lastLine.substring(0, this.lastLine.length()).trim();
+        institutionDone = true;
+      }
+      
+      readLine();
+      while (!institutionDone && this.lastLine!= null) {
+        institutionDone = this.lastLine.indexOf(')') > 0;
+        institution += this.lastLine.substring(0, institutionDone ? this.lastLine.indexOf(')') : this.lastLine.length()).trim();
+        readLine();
+      }
+      
+      if (author != null) {
+        authors += !authors.equals("") ? " and " + author : "" + author;
+      }
+      if (institution != null) {
+        institutions += !institutions.equals("") ? " and " + institution : "" + institution;
+      }            
+    }
+    
+    if (!authors.equals("")) {
+      be.setField("author", authors);
+    }
+    if (!institutions.equals("")) {
+      be.setField("institution", institutions);
+    }
+  }
+  
+  /**
+   * Implements grammar rule "Abstract".
+   * 
+   * @param be
+   * @throws IOException
+   */
+  private void parseAbstract(BibtexEntry be) throws IOException {
+    String theabstract = readMultipleLines();
+    
+    if (!theabstract.equals("")) {
+      be.setField("abstract", theabstract);
+    }
+  }
+    
+  /**
+   * Implements grammar rule "AdditionalFields".
+   * 
+   * @param be
+   * @throws IOException
+   */
+  private void parseAdditionalFields(BibtexEntry be, boolean multilineUrlFieldAllowed) throws IOException {
+    
+    // one empty line is possible before fields start
+    if (this.lastLine != null && this.lastLine.trim().equals("")) {
+      readLine();  
+    }
+    
+    // read other fields
+    while (this.lastLine != null && !isStartOfWorkingPaper() && (startsWithKeyword(recognizedFields) || this.lastLine.equals(""))) {
+      
+      // if multiple lines for a field are allowed and field consists of multiple lines, join them
+      String keyword = this.lastLine.equals("") ? "" : this.lastLine.substring(0, this.lastLine.indexOf(':')).trim();
+      // skip keyword
+      this.lastLine = this.lastLine.equals("") ? "" : this.lastLine.substring(this.lastLine.indexOf(':')+1, this.lastLine.length()).trim();
+      
+      // parse keywords field
+      if (keyword.equals("Keywords")) {
+        String content = readMultipleLines();
+        String[] keywords = content.split("[,;]");
+        String keywordStr = "";
+        for (int i = 0; i < keywords.length; i++) {
+          keywordStr += " '" + keywords[i].trim() + "'";
+        }
+        be.setField("keywords", keywordStr.trim());
+        
+      // parse JEL field
+      } else if (keyword.equals("JEL")) {
+        be.setField("jel", readMultipleLines());
+        
+      // parse date field
+      } else if (keyword.startsWith("Date")) {
+        Date date = null;
+        String content = readMultipleLines();
+        String[] recognizedDateFormats = new String[] {"yyyy-MM-dd","yyyy-MM","yyyy"};
+        int i = 0;
+        for (; i < recognizedDateFormats.length && date == null; i++) {
+          try {            
+            date = new SimpleDateFormat(recognizedDateFormats[i]).parse(content);
+          } catch (ParseException e) {
+            // wrong format
+          }
+        }
+        
+        Calendar cal = new GregorianCalendar();              
+        cal.setTime(date != null ? date : new Date());
+        be.setField("year", "" + cal.get(Calendar.YEAR));
+        if (date != null && recognizedDateFormats[i-1].indexOf("MM") >= 0) {
+          be.setField("month", "" + cal.get(Calendar.MONTH));
+        }
+        
+      // parse URL field
+      } else if (keyword.startsWith("URL")) {
+        String content = null;
+        if (multilineUrlFieldAllowed) {
+          content = readMultipleLines(); 
+        } else {
+          content = this.lastLine;
+          readLine();
+        }
+        be.setField("url", content);
+        
+      // authors field
+      } else if (keyword.startsWith("By")) {
+        // parse authors      
+        parseAuthors(be); 
+      } else {
+        readLine();
+      }
+    }
+  }
+
+  /**
+   * if line starts with a string of the form 'x. ' and we are not in the overview
+   * section, we have a working paper entry we are interested in
+   */
+  private boolean isStartOfWorkingPaper() {
+    return this.lastLine.matches("\\d+\\.\\s.*") && !this.inOverviewSection && this.preLine.trim().equals("");
+  }
+  
+  /*
+   *  (non-Javadoc)
+   * @see net.sf.jabref.imports.ImportFormat#importEntries(java.io.InputStream)
+   */
+  public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {    
+  	ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
+    String paperNoStr = null;
+    this.line = 0;
+    
+    try {
+    	this.in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+      
+      readLine(); // skip header and editor information
+    	while (this.lastLine != null) {
+  
+        if (this.lastLine.startsWith("-----------------------------")) {
+          this.inOverviewSection = this.preLine.startsWith("In this issue we have");
+        } 
+        if (isStartOfWorkingPaper()) {
+          BibtexEntry be = new BibtexEntry(Util.createNeutralId());
+          be.setType(BibtexEntryType.getType("techreport"));
+          paperNoStr = this.lastLine.substring(0, this.lastLine.indexOf('.'));  
+          parseTitleString(be);
+          if (startsWithKeyword(recognizedFields)) {
+            parseAdditionalFields(be, false);
+          } else {
+            readLine(); // skip empty line
+            parseAuthors(be);
+            readLine(); // skip empty line
+          }
+          if (!startsWithKeyword(recognizedFields)) {
+            parseAbstract(be);
+          }
+          parseAdditionalFields(be, true);
+          
+          bibitems.add(be);
+          paperNoStr = null;
+          
+        } else {        
+          this.preLine = this.lastLine;
+          readLine();
+        }
+      }
+      
+    } catch (Exception e) {
+      String message = "Error in REPEC-NEP import on line " + this.line;
+      if (paperNoStr != null) {
+        message += ", paper no. " + paperNoStr + ": ";
+      }
+      message += e.getMessage();
+      logger.log(Level.SEVERE, message, e);
+      if (!(e instanceof IOException)) {
+        e.printStackTrace();
+        e = new IOException(message);
+      }
+      throw (IOException)e;
+    }
+
+  	return bibitems;	  	
+  }
+}
+
+
diff --git a/src/java/net/sf/jabref/imports/RisImporter.java b/src/java/net/sf/jabref/imports/RisImporter.java
index fa809b9..6df0f17 100644
--- a/src/java/net/sf/jabref/imports/RisImporter.java
+++ b/src/java/net/sf/jabref/imports/RisImporter.java
@@ -1,269 +1,269 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.util.regex.Pattern;
-import java.io.InputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.OutputPrinter;
-
-/**
- * Imports a Biblioscape Tag File. The format is described on
- * http://www.biblioscape.com/manual_bsp/Biblioscape_Tag_File.htm Several
- * Biblioscape field types are ignored. Others are only included in the BibTeX
- * field "comment".
- */
-public class RisImporter extends ImportFormat {
-
-    /**
-     * Return the name of this import format.
-     */
-    public String getFormatName() {
-        return "RIS";
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-     */
-    public String getCLIId() {
-        return "ris";
-    }
-
-    /**
-     * Check whether the source is in the correct format for this importer.
-     */
-    public boolean isRecognizedFormat(InputStream stream) throws IOException {
-
-        // Our strategy is to look for the "AU  - *" line.
-        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-        Pattern pat1 = Pattern.compile("AU  - .*"),
-                pat2 = Pattern.compile("A1  - .*"),
-                pat3 = Pattern.compile("A2  - .*");
-
-
-        String str;
-        while ((str = in.readLine()) != null){
-            if (pat1.matcher(str).find() || pat2.matcher(str).find() || pat3.matcher(str).find())
-                return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     */
-    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
-        StringBuffer sb = new StringBuffer();
-        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-        String str;
-        while ((str = in.readLine()) != null){
-            sb.append(str);
-            sb.append("\n");
-        }
-        String[] entries = sb.toString().replaceAll("\u2013", "-").replaceAll("\u2014", "--").replaceAll("\u2015", "--").split("ER  -.*\\n");
-
-        for (int i = 0; i < entries.length; i++){
-
-            if (entries[i].trim().length() == 0)
-                continue;
-
-            String type = "", author = "", editor = "", startPage = "", endPage = "",
-                    comment = "";
-            HashMap<String, String> hm = new HashMap<String, String>();
-
-
-            String[] fields = entries[i].split("\n");
-
-            for (int j = 0; j < fields.length; j++){
-                StringBuffer current = new StringBuffer(fields[j]);
-                boolean done = false;
-                while (!done && (j < fields.length-1)) {
-                    if ((fields[j+1].length() >= 6) && !fields[j+1].substring(2, 6).equals("  - ")) {
-                        if ((current.length() > 0)
-                                && !Character.isWhitespace(current.charAt(current.length()-1))
-                                && !Character.isWhitespace(fields[j+1].charAt(0)))
-                            current.append(' ');
-                        current.append(fields[j+1]);
-                        j++;
-                    } else
-                        done = true;
-                }
-                String entry = current.toString();
-                if (entry.length() < 6) continue;
-                else{
-                    String lab = entry.substring(0, 2);
-                    String val = entry.substring(6).trim();
-                    if (lab.equals("TY")){
-                        if (val.equals("BOOK")) type = "book";
-                        else if (val.equals("JOUR") || val.equals("MGZN")) type = "article";
-                        else if (val.equals("THES")) type = "phdthesis";
-                        else if (val.equals("UNPB")) type = "unpublished";
-                        else if (val.equals("RPRT")) type = "techreport";
-                        else if (val.equals("CONF")) type = "inproceedings";
-                        else if (val.equals("CHAP")) type = "incollection";//"inbook";
-
-                        else type = "other";
-                    }else if (lab.equals("T1") || lab.equals("TI")) {
-                        String oldVal = hm.get("title");
-                        if (oldVal == null)
-                            hm.put("title", val);
-                        else {
-                            if (oldVal.endsWith(":") || oldVal.endsWith(".") || oldVal.endsWith("?"))
-                                hm.put("title", oldVal+" "+val);
-                            else
-                                hm.put("title", oldVal+": "+val);
-                        }
-                    }
-                        // =
-                        // val;
-                    else if (lab.equals("T2") || lab.equals("T3") || lab.equals("BT")) {
-                        hm.put("booktitle", val);
-                    }
-                    else if (lab.equals("AU") || lab.equals("A1")) {
-                        if (author.equals("")) // don't add " and " for the first author
-                            author = val;
-                        else author += " and " + val;
-                    }
-                    else if (lab.equals("A2")){
-                        if (editor.equals("")) // don't add " and " for the first editor
-                            editor = val;
-                        else editor += " and " + val;
-                    }
-                    else if (lab.equals("JA") || lab.equals("JF") || lab.equals("JO")) {
-                        if (type.equals("inproceedings"))
-                            hm.put("booktitle", val);
-                        else
-                            hm.put("journal", val);
-                    }
-
-                    else if (lab.equals("SP")) startPage = val;
-                    else if (lab.equals("PB")) {
-                        if (type.equals("phdthesis"))
-                            hm.put("school", val);
-                        else
-                            hm.put("publisher", val);
-                    }
-                    else if (lab.equals("AD") || lab.equals("CY"))
-                        hm.put("address", val);
-                    else if (lab.equals("EP")) endPage = val;
-                    else if (lab.equals("SN"))
-                        hm.put("issn", val);
-                    else if (lab.equals("VL")) hm.put("volume", val);
-                    else if (lab.equals("IS")) hm.put("number", val);
-                    else if (lab.equals("N2") || lab.equals("AB")) {
-                        String oldAb = hm.get("abstract");
-                        if (oldAb == null)
-                            hm.put("abstract", val);
-                        else
-                            hm.put("abstract", oldAb+"\n"+val);
-                    }
-
-                    else if (lab.equals("UR")) hm.put("url", val);
-                    else if ((lab.equals("Y1") || lab.equals("PY")) && val.length() >= 4) {
-                        String[] parts = val.split("/");
-                        hm.put("year", parts[0]);
-                        if ((parts.length > 1) && (parts[1].length() > 0)) {
-                            try {
-                                int month = Integer.parseInt(parts[1]);
-                                if ((month > 0) && (month <= 12)) {
-                                    //System.out.println(Globals.MONTHS[month-1]);
-                                    hm.put("month", "#"+Globals.MONTHS[month-1]+"#");
-                                }
-                            } catch (NumberFormatException ex) {
-                                // The month part is unparseable, so we ignore it.
-                            }
-                        }
-                    }
-
-                    else if (lab.equals("KW")){
-                        if (!hm.containsKey("keywords")) hm.put("keywords", val);
-                        else{
-                            String kw = hm.get("keywords");
-                            hm.put("keywords", kw + ", " + val);
-                        }
-                    }
-                    else if (lab.equals("U1") || lab.equals("U2") || lab.equals("N1")) {
-                        if (comment.length() > 0)
-                            comment = comment+"\n";
-                        comment = comment+val;
-                    }
-                    // Added ID import 2005.12.01, Morten Alver:
-                    else if (lab.equals("ID"))
-                        hm.put("refid", val);
-                        // Added doi import (sciencedirect.com) 2011.01.10, Alexander Hug <alexander at alexanderhug.info>
-                    else if (lab.equals("M3")){
-                        String doi = val;
-                        if (doi.startsWith("doi:")){
-                            doi = doi.replaceAll("(?i)doi:", "").trim();
-                            hm.put("doi", doi);
-                        }
-                    }
-                }
-                // fix authors
-                if (author.length() > 0) {
-                    author = AuthorList.fixAuthor_lastNameFirst(author);
-                    hm.put("author", author);
-                }
-                if (editor.length() > 0) {
-                    editor = AuthorList.fixAuthor_lastNameFirst(editor);
-                    hm.put("editor", editor);
-                }
-                if (comment.length() > 0) {
-                    hm.put("comment", comment);
-                }
-
-                hm.put("pages", startPage + "--" + endPage);
-            }
-            BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
-                    .getEntryType(type)); // id assumes an existing database so don't
-
-            // Remove empty fields:
-            ArrayList<Object> toRemove = new ArrayList<Object>();
-            for (Iterator<String> it = hm.keySet().iterator(); it.hasNext();) {
-                Object key = it.next();
-                String content = hm.get(key);
-                if ((content == null) || (content.trim().length() == 0))
-                    toRemove.add(key);
-            }
-            for (Iterator<Object> iterator = toRemove.iterator(); iterator.hasNext();) {
-                hm.remove(iterator.next());
-
-            }
-
-            // create one here
-            b.setField(hm);
-            bibitems.add(b);
-
-        }
-
-        return bibitems;
-
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.util.regex.Pattern;
+import java.io.InputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.OutputPrinter;
+
+/**
+ * Imports a Biblioscape Tag File. The format is described on
+ * http://www.biblioscape.com/manual_bsp/Biblioscape_Tag_File.htm Several
+ * Biblioscape field types are ignored. Others are only included in the BibTeX
+ * field "comment".
+ */
+public class RisImporter extends ImportFormat {
+
+    /**
+     * Return the name of this import format.
+     */
+    public String getFormatName() {
+        return "RIS";
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+     */
+    public String getCLIId() {
+        return "ris";
+    }
+
+    /**
+     * Check whether the source is in the correct format for this importer.
+     */
+    public boolean isRecognizedFormat(InputStream stream) throws IOException {
+
+        // Our strategy is to look for the "AU  - *" line.
+        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+        Pattern pat1 = Pattern.compile("AU  - .*"),
+                pat2 = Pattern.compile("A1  - .*"),
+                pat3 = Pattern.compile("A2  - .*");
+
+
+        String str;
+        while ((str = in.readLine()) != null){
+            if (pat1.matcher(str).find() || pat2.matcher(str).find() || pat3.matcher(str).find())
+                return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     */
+    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
+        StringBuffer sb = new StringBuffer();
+        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+        String str;
+        while ((str = in.readLine()) != null){
+            sb.append(str);
+            sb.append("\n");
+        }
+        String[] entries = sb.toString().replaceAll("\u2013", "-").replaceAll("\u2014", "--").replaceAll("\u2015", "--").split("ER  -.*\\n");
+
+        for (int i = 0; i < entries.length; i++){
+
+            if (entries[i].trim().length() == 0)
+                continue;
+
+            String type = "", author = "", editor = "", startPage = "", endPage = "",
+                    comment = "";
+            HashMap<String, String> hm = new HashMap<String, String>();
+
+
+            String[] fields = entries[i].split("\n");
+
+            for (int j = 0; j < fields.length; j++){
+                StringBuffer current = new StringBuffer(fields[j]);
+                boolean done = false;
+                while (!done && (j < fields.length-1)) {
+                    if ((fields[j+1].length() >= 6) && !fields[j+1].substring(2, 6).equals("  - ")) {
+                        if ((current.length() > 0)
+                                && !Character.isWhitespace(current.charAt(current.length()-1))
+                                && !Character.isWhitespace(fields[j+1].charAt(0)))
+                            current.append(' ');
+                        current.append(fields[j+1]);
+                        j++;
+                    } else
+                        done = true;
+                }
+                String entry = current.toString();
+                if (entry.length() < 6) continue;
+                else{
+                    String lab = entry.substring(0, 2);
+                    String val = entry.substring(6).trim();
+                    if (lab.equals("TY")){
+                        if (val.equals("BOOK")) type = "book";
+                        else if (val.equals("JOUR") || val.equals("MGZN")) type = "article";
+                        else if (val.equals("THES")) type = "phdthesis";
+                        else if (val.equals("UNPB")) type = "unpublished";
+                        else if (val.equals("RPRT")) type = "techreport";
+                        else if (val.equals("CONF")) type = "inproceedings";
+                        else if (val.equals("CHAP")) type = "incollection";//"inbook";
+
+                        else type = "other";
+                    }else if (lab.equals("T1") || lab.equals("TI")) {
+                        String oldVal = hm.get("title");
+                        if (oldVal == null)
+                            hm.put("title", val);
+                        else {
+                            if (oldVal.endsWith(":") || oldVal.endsWith(".") || oldVal.endsWith("?"))
+                                hm.put("title", oldVal+" "+val);
+                            else
+                                hm.put("title", oldVal+": "+val);
+                        }
+                    }
+                        // =
+                        // val;
+                    else if (lab.equals("T2") || lab.equals("T3") || lab.equals("BT")) {
+                        hm.put("booktitle", val);
+                    }
+                    else if (lab.equals("AU") || lab.equals("A1")) {
+                        if (author.equals("")) // don't add " and " for the first author
+                            author = val;
+                        else author += " and " + val;
+                    }
+                    else if (lab.equals("A2")){
+                        if (editor.equals("")) // don't add " and " for the first editor
+                            editor = val;
+                        else editor += " and " + val;
+                    }
+                    else if (lab.equals("JA") || lab.equals("JF") || lab.equals("JO")) {
+                        if (type.equals("inproceedings"))
+                            hm.put("booktitle", val);
+                        else
+                            hm.put("journal", val);
+                    }
+
+                    else if (lab.equals("SP")) startPage = val;
+                    else if (lab.equals("PB")) {
+                        if (type.equals("phdthesis"))
+                            hm.put("school", val);
+                        else
+                            hm.put("publisher", val);
+                    }
+                    else if (lab.equals("AD") || lab.equals("CY"))
+                        hm.put("address", val);
+                    else if (lab.equals("EP")) endPage = val;
+                    else if (lab.equals("SN"))
+                        hm.put("issn", val);
+                    else if (lab.equals("VL")) hm.put("volume", val);
+                    else if (lab.equals("IS")) hm.put("number", val);
+                    else if (lab.equals("N2") || lab.equals("AB")) {
+                        String oldAb = hm.get("abstract");
+                        if (oldAb == null)
+                            hm.put("abstract", val);
+                        else
+                            hm.put("abstract", oldAb+"\n"+val);
+                    }
+
+                    else if (lab.equals("UR")) hm.put("url", val);
+                    else if ((lab.equals("Y1") || lab.equals("PY")) && val.length() >= 4) {
+                        String[] parts = val.split("/");
+                        hm.put("year", parts[0]);
+                        if ((parts.length > 1) && (parts[1].length() > 0)) {
+                            try {
+                                int month = Integer.parseInt(parts[1]);
+                                if ((month > 0) && (month <= 12)) {
+                                    //System.out.println(Globals.MONTHS[month-1]);
+                                    hm.put("month", "#"+Globals.MONTHS[month-1]+"#");
+                                }
+                            } catch (NumberFormatException ex) {
+                                // The month part is unparseable, so we ignore it.
+                            }
+                        }
+                    }
+
+                    else if (lab.equals("KW")){
+                        if (!hm.containsKey("keywords")) hm.put("keywords", val);
+                        else{
+                            String kw = hm.get("keywords");
+                            hm.put("keywords", kw + ", " + val);
+                        }
+                    }
+                    else if (lab.equals("U1") || lab.equals("U2") || lab.equals("N1")) {
+                        if (comment.length() > 0)
+                            comment = comment+"\n";
+                        comment = comment+val;
+                    }
+                    // Added ID import 2005.12.01, Morten Alver:
+                    else if (lab.equals("ID"))
+                        hm.put("refid", val);
+                        // Added doi import (sciencedirect.com) 2011.01.10, Alexander Hug <alexander at alexanderhug.info>
+                    else if (lab.equals("M3")){
+                        String doi = val;
+                        if (doi.startsWith("doi:")){
+                            doi = doi.replaceAll("(?i)doi:", "").trim();
+                            hm.put("doi", doi);
+                        }
+                    }
+                }
+                // fix authors
+                if (author.length() > 0) {
+                    author = AuthorList.fixAuthor_lastNameFirst(author);
+                    hm.put("author", author);
+                }
+                if (editor.length() > 0) {
+                    editor = AuthorList.fixAuthor_lastNameFirst(editor);
+                    hm.put("editor", editor);
+                }
+                if (comment.length() > 0) {
+                    hm.put("comment", comment);
+                }
+
+                hm.put("pages", startPage + "--" + endPage);
+            }
+            BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
+                    .getEntryType(type)); // id assumes an existing database so don't
+
+            // Remove empty fields:
+            ArrayList<Object> toRemove = new ArrayList<Object>();
+            for (Iterator<String> it = hm.keySet().iterator(); it.hasNext();) {
+                Object key = it.next();
+                String content = hm.get(key);
+                if ((content == null) || (content.trim().length() == 0))
+                    toRemove.add(key);
+            }
+            for (Iterator<Object> iterator = toRemove.iterator(); iterator.hasNext();) {
+                hm.remove(iterator.next());
+
+            }
+
+            // create one here
+            b.setField(hm);
+            bibitems.add(b);
+
+        }
+
+        return bibitems;
+
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/SPIRESBibtexFilterReader.java b/src/java/net/sf/jabref/imports/SPIRESBibtexFilterReader.java
index 18ba359..ebaddbf 100644
--- a/src/java/net/sf/jabref/imports/SPIRESBibtexFilterReader.java
+++ b/src/java/net/sf/jabref/imports/SPIRESBibtexFilterReader.java
@@ -1,90 +1,90 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.BufferedReader;
-import java.io.FilterReader;
-import java.io.IOException;
-import java.io.Reader;
-
-/**
- * 
- * Warning -- it is not a generic filter, only read is implemented!
- * 
- * @author Fedor Bezrukov
- * 
- * @version $Id$
- * 
- * TODO: Fix grammar in bibtex entries -- it ma return invalid bibkeys (with space)
- * 
- */
-public class SPIRESBibtexFilterReader extends FilterReader {
-
-    protected BufferedReader in;
-
-    private String line;
-    private int pos;
-    private boolean pre;
-
-    SPIRESBibtexFilterReader(Reader _in) { 
-    	super(_in);
-    	in = new BufferedReader(_in);
-    	pos=-1;
-    	pre=false;
-    }
-
-    private String readpreLine() throws IOException {
-    	String l;
-    	do {
-    		l=in.readLine();
-    		if (l==null)
-    			return null;
-    		if (l.equals("<pre>")) {
-    			pre = true;
-    			l=in.readLine();
-    		}
-    		if (l.equals("</pre>"))
-    			pre = false;
-    	} while (!pre);
-    	return l;
-    }
-    
-    private String fixBibkey(String in) {
-    	if (in== null)
-    		return null;
-    	//System.out.println(in);
-    	if ( in.matches("@Article\\{.*,") ) {
-    		//System.out.println(in.replace(' ','_'));
-    		return in.replace(' ', '_');
-    	} else
-    		return in;
-    }
-
-    public int read() throws IOException {
-    	if ( pos<0 ) {
-    		line=fixBibkey(readpreLine());
-    		pos=0;
-	    	if ( line == null )
-	    		return -1;
-    	}
-    	if ( pos>=line.length() ) {
-    		pos=-1;
-    		return '\n';
-    	}
-    	return line.charAt(pos++);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.BufferedReader;
+import java.io.FilterReader;
+import java.io.IOException;
+import java.io.Reader;
+
+/**
+ * 
+ * Warning -- it is not a generic filter, only read is implemented!
+ * 
+ * @author Fedor Bezrukov
+ * 
+ * @version $Id$
+ * 
+ * TODO: Fix grammar in bibtex entries -- it ma return invalid bibkeys (with space)
+ * 
+ */
+public class SPIRESBibtexFilterReader extends FilterReader {
+
+    protected BufferedReader in;
+
+    private String line;
+    private int pos;
+    private boolean pre;
+
+    SPIRESBibtexFilterReader(Reader _in) { 
+    	super(_in);
+    	in = new BufferedReader(_in);
+    	pos=-1;
+    	pre=false;
+    }
+
+    private String readpreLine() throws IOException {
+    	String l;
+    	do {
+    		l=in.readLine();
+    		if (l==null)
+    			return null;
+    		if (l.equals("<pre>")) {
+    			pre = true;
+    			l=in.readLine();
+    		}
+    		if (l.equals("</pre>"))
+    			pre = false;
+    	} while (!pre);
+    	return l;
+    }
+    
+    private String fixBibkey(String in) {
+    	if (in== null)
+    		return null;
+    	//System.out.println(in);
+    	if ( in.matches("@Article\\{.*,") ) {
+    		//System.out.println(in.replace(' ','_'));
+    		return in.replace(' ', '_');
+    	} else
+    		return in;
+    }
+
+    public int read() throws IOException {
+    	if ( pos<0 ) {
+    		line=fixBibkey(readpreLine());
+    		pos=0;
+	    	if ( line == null )
+	    		return -1;
+    	}
+    	if ( pos>=line.length() ) {
+    		pos=-1;
+    		return '\n';
+    	}
+    	return line.charAt(pos++);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/SPIRESFetcher.java b/src/java/net/sf/jabref/imports/SPIRESFetcher.java
index ae849f1..f1eff8a 100644
--- a/src/java/net/sf/jabref/imports/SPIRESFetcher.java
+++ b/src/java/net/sf/jabref/imports/SPIRESFetcher.java
@@ -1,235 +1,235 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLEncoder;
-
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-
-/**
- * 
- * This class allows to access the Slac SPIRES database.
- * 
- * It can either be a GeneralFetcher to pose requests to the database or fetch
- * individual entries.
- * 
- * @author Fedor Bezrukov
- * 
- * @version $Id$
- * 
- */
-public class SPIRESFetcher implements EntryFetcher {
-
-	private static String spiresHost = "www-spires.slac.stanford.edu";
-
-	public SPIRESFetcher() {
-	}
-
-	/**
-	 * Construct the query URL
-	 * 
-	 * @param key
-	 *            The key of the OAI2 entry that the url should poitn to.
-	 * 
-	 * @return a String denoting the query URL
-	 */
-	public String constructUrl(String key) {
-		String identifier = "";
-		try {
-			identifier = URLEncoder.encode(key, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			return "";
-		}
-		StringBuffer sb = new StringBuffer("http://").append(spiresHost)
-				.append("/");
-		sb.append("spires/find/hep/www").append("?");
-		sb.append("rawcmd=find+");
-		sb.append(identifier);
-		sb.append("&FORMAT=WWWBRIEFBIBTEX&SEQUENCE=");
-		return sb.toString();
-	}
-
-	/**
-	 * Constructs a SPIRES query url from slaccitation field
-	 * 
-	 * @param slaccitation
-	 * @return query string
-	 */
-	public static String constructUrlFromSlaccitation(String slaccitation) {
-		String cmd = "j";
-		String key = slaccitation.replaceAll("^%%CITATION = ", "").replaceAll(
-				";%%$", "");
-		if (key.matches("^\\w*-\\w*[ /].*"))
-			cmd = "eprint";
-		try {
-			key = URLEncoder.encode(key, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-		}
-		StringBuffer sb = new StringBuffer("http://").append(spiresHost)
-				.append("/");
-		sb.append("spires/find/hep/www").append("?");
-		sb.append("rawcmd=find+").append(cmd).append("+");
-		sb.append(key);
-		return sb.toString();
-	}
-
-	/**
-	 * Construct an SPIRES query url from eprint field
-	 * 
-	 * @param eprint
-	 * @return query string
-	 */
-	public static String constructUrlFromEprint(String eprint) {
-		String key = eprint.replaceAll(" [.*]$", "");
-		try {
-			key = URLEncoder.encode(key, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			return "";
-		}
-		StringBuffer sb = new StringBuffer("http://").append(spiresHost)
-				.append("/");
-		sb.append("spires/find/hep/www").append("?");
-		sb.append("rawcmd=find+eprint+");
-		sb.append(key);
-		return sb.toString();
-	}
-
-	/**
-	 * Import an entry from an OAI2 archive. The BibtexEntry provided has to
-	 * have the field OAI2_IDENTIFIER_FIELD set to the search string.
-	 * 
-	 * @param key
-	 *            The OAI2 key to fetch from ArXiv.
-	 * @return The imnported BibtexEntry or null if none.
-	 */
-	private BibtexDatabase importSpiresEntries(String key, OutputPrinter frame) {
-		String url = constructUrl(key);
-		try {
-			HttpURLConnection conn = (HttpURLConnection) (new URL(url)).openConnection();
-			conn.setRequestProperty("User-Agent", "Jabref");
-			InputStream inputStream = conn.getInputStream();
-
-			SPIRESBibtexFilterReader reader = new SPIRESBibtexFilterReader(
-					new InputStreamReader(inputStream));
-
-			ParserResult pr = BibtexParser.parse(reader);
-
-			return pr.getDatabase();
-		} catch (IOException e) {
-			frame.showMessage( Globals.lang(
-					"An Exception ocurred while accessing '%0'", url)
-					+ "\n\n" + e.toString(), Globals.lang(getKeyName()),
-					JOptionPane.ERROR_MESSAGE);
-		} catch (RuntimeException e) {
-			frame.showMessage( Globals.lang(
-					"An Error occurred while fetching from SPIRES source (%0):",
-					new String[] { url })
-					+ "\n\n" + e.getMessage(), Globals.lang(getKeyName()),
-					JOptionPane.ERROR_MESSAGE);
-		}
-		return null;
-	}
-
-	// public void addSpiresURL(BibtexEntry entry) {
-	// String url = "http://"+spiresHost+"/spires/find/hep/www?texkey+";
-	// url = url+entry.getCiteKey();
-	// entry.setField("url", url);
-	// }
-	//
-	// public void addSpiresURLtoDatabase(BibtexDatabase db) {
-	// Iterator<BibtexEntry> iter = db.getEntries().iterator();
-	// while (iter.hasNext())
-	// addSpiresURL(iter.next());
-	// }
-
-	/*
-	 * @see net.sf.jabref.imports.EntryFetcher
-	 */
-	public String getHelpPage() {
-		return "Spires.html";
-	}
-
-	public URL getIcon() {
-		return GUIGlobals.getIconUrl("www");
-	}
-
-	public String getKeyName() {
-		return "SPIRES";
-	}
-
-	public JPanel getOptionsPanel() {
-		// we have no additional options
-		return null;
-	}
-
-	public String getTitle() {
-		return Globals.menuTitle(getKeyName());
-	}
-
-	/*
-	 * @see net.sf.jabref.gui.ImportInspectionDialog.CallBack
-	 */
-	public void cancelled() {
-	}
-
-	public void done(int entriesImported) {
-	}
-
-	public void stopFetching() {
-	}
-
-	/*
-	 * @see java.lang.Runnable
-	 */
-	public boolean processQuery(String query, ImportInspector dialog,
-								OutputPrinter frame) {
-		try {
-			frame.setStatus("Fetching entries from Spires");
-			/* query the archive and load the results into the BibtexEntry */
-			BibtexDatabase bd = importSpiresEntries(query,frame);
-
-			/* addSpiresURLtoDatabase(bd); */
-
-			frame.setStatus("Adding fetched entries");
-			/* add the entry to the inspection dialog */
-			if (bd.getEntryCount() > 0)
-		        for (BibtexEntry entry : bd.getEntries())
-		        	dialog.addEntry(entry);
-
-			/* update the dialogs progress bar */
-			// dialog.setProgress(i + 1, keys.length);
-			/* inform the inspection dialog, that we're done */
-		} catch (Exception e) {
-			frame.showMessage(Globals.lang("Error while fetching from Spires: ")
-					+ e.getMessage());
-			e.printStackTrace();
-		}
-		return true;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+
+/**
+ * 
+ * This class allows to access the Slac SPIRES database.
+ * 
+ * It can either be a GeneralFetcher to pose requests to the database or fetch
+ * individual entries.
+ * 
+ * @author Fedor Bezrukov
+ * 
+ * @version $Id$
+ * 
+ */
+public class SPIRESFetcher implements EntryFetcher {
+
+	private static String spiresHost = "www-spires.slac.stanford.edu";
+
+	public SPIRESFetcher() {
+	}
+
+	/**
+	 * Construct the query URL
+	 * 
+	 * @param key
+	 *            The key of the OAI2 entry that the url should poitn to.
+	 * 
+	 * @return a String denoting the query URL
+	 */
+	public String constructUrl(String key) {
+		String identifier = "";
+		try {
+			identifier = URLEncoder.encode(key, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			return "";
+		}
+		StringBuffer sb = new StringBuffer("http://").append(spiresHost)
+				.append("/");
+		sb.append("spires/find/hep/www").append("?");
+		sb.append("rawcmd=find+");
+		sb.append(identifier);
+		sb.append("&FORMAT=WWWBRIEFBIBTEX&SEQUENCE=");
+		return sb.toString();
+	}
+
+	/**
+	 * Constructs a SPIRES query url from slaccitation field
+	 * 
+	 * @param slaccitation
+	 * @return query string
+	 */
+	public static String constructUrlFromSlaccitation(String slaccitation) {
+		String cmd = "j";
+		String key = slaccitation.replaceAll("^%%CITATION = ", "").replaceAll(
+				";%%$", "");
+		if (key.matches("^\\w*-\\w*[ /].*"))
+			cmd = "eprint";
+		try {
+			key = URLEncoder.encode(key, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+		}
+		StringBuffer sb = new StringBuffer("http://").append(spiresHost)
+				.append("/");
+		sb.append("spires/find/hep/www").append("?");
+		sb.append("rawcmd=find+").append(cmd).append("+");
+		sb.append(key);
+		return sb.toString();
+	}
+
+	/**
+	 * Construct an SPIRES query url from eprint field
+	 * 
+	 * @param eprint
+	 * @return query string
+	 */
+	public static String constructUrlFromEprint(String eprint) {
+		String key = eprint.replaceAll(" [.*]$", "");
+		try {
+			key = URLEncoder.encode(key, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			return "";
+		}
+		StringBuffer sb = new StringBuffer("http://").append(spiresHost)
+				.append("/");
+		sb.append("spires/find/hep/www").append("?");
+		sb.append("rawcmd=find+eprint+");
+		sb.append(key);
+		return sb.toString();
+	}
+
+	/**
+	 * Import an entry from an OAI2 archive. The BibtexEntry provided has to
+	 * have the field OAI2_IDENTIFIER_FIELD set to the search string.
+	 * 
+	 * @param key
+	 *            The OAI2 key to fetch from ArXiv.
+	 * @return The imnported BibtexEntry or null if none.
+	 */
+	private BibtexDatabase importSpiresEntries(String key, OutputPrinter frame) {
+		String url = constructUrl(key);
+		try {
+			HttpURLConnection conn = (HttpURLConnection) (new URL(url)).openConnection();
+			conn.setRequestProperty("User-Agent", "Jabref");
+			InputStream inputStream = conn.getInputStream();
+
+			SPIRESBibtexFilterReader reader = new SPIRESBibtexFilterReader(
+					new InputStreamReader(inputStream));
+
+			ParserResult pr = BibtexParser.parse(reader);
+
+			return pr.getDatabase();
+		} catch (IOException e) {
+			frame.showMessage( Globals.lang(
+					"An Exception ocurred while accessing '%0'", url)
+					+ "\n\n" + e.toString(), Globals.lang(getKeyName()),
+					JOptionPane.ERROR_MESSAGE);
+		} catch (RuntimeException e) {
+			frame.showMessage( Globals.lang(
+					"An Error occurred while fetching from SPIRES source (%0):",
+					new String[] { url })
+					+ "\n\n" + e.getMessage(), Globals.lang(getKeyName()),
+					JOptionPane.ERROR_MESSAGE);
+		}
+		return null;
+	}
+
+	// public void addSpiresURL(BibtexEntry entry) {
+	// String url = "http://"+spiresHost+"/spires/find/hep/www?texkey+";
+	// url = url+entry.getCiteKey();
+	// entry.setField("url", url);
+	// }
+	//
+	// public void addSpiresURLtoDatabase(BibtexDatabase db) {
+	// Iterator<BibtexEntry> iter = db.getEntries().iterator();
+	// while (iter.hasNext())
+	// addSpiresURL(iter.next());
+	// }
+
+	/*
+	 * @see net.sf.jabref.imports.EntryFetcher
+	 */
+	public String getHelpPage() {
+		return "Spires.html";
+	}
+
+	public URL getIcon() {
+		return GUIGlobals.getIconUrl("www");
+	}
+
+	public String getKeyName() {
+		return "SPIRES";
+	}
+
+	public JPanel getOptionsPanel() {
+		// we have no additional options
+		return null;
+	}
+
+	public String getTitle() {
+		return Globals.menuTitle(getKeyName());
+	}
+
+	/*
+	 * @see net.sf.jabref.gui.ImportInspectionDialog.CallBack
+	 */
+	public void cancelled() {
+	}
+
+	public void done(int entriesImported) {
+	}
+
+	public void stopFetching() {
+	}
+
+	/*
+	 * @see java.lang.Runnable
+	 */
+	public boolean processQuery(String query, ImportInspector dialog,
+								OutputPrinter frame) {
+		try {
+			frame.setStatus("Fetching entries from Spires");
+			/* query the archive and load the results into the BibtexEntry */
+			BibtexDatabase bd = importSpiresEntries(query,frame);
+
+			/* addSpiresURLtoDatabase(bd); */
+
+			frame.setStatus("Adding fetched entries");
+			/* add the entry to the inspection dialog */
+			if (bd.getEntryCount() > 0)
+		        for (BibtexEntry entry : bd.getEntries())
+		        	dialog.addEntry(entry);
+
+			/* update the dialogs progress bar */
+			// dialog.setProgress(i + 1, keys.length);
+			/* inform the inspection dialog, that we're done */
+		} catch (Exception e) {
+			frame.showMessage(Globals.lang("Error while fetching from Spires: ")
+					+ e.getMessage());
+			e.printStackTrace();
+		}
+		return true;
+	}
+}
diff --git a/src/java/net/sf/jabref/imports/ScifinderImporter.java b/src/java/net/sf/jabref/imports/ScifinderImporter.java
index 3ecda22..c39a4f8 100644
--- a/src/java/net/sf/jabref/imports/ScifinderImporter.java
+++ b/src/java/net/sf/jabref/imports/ScifinderImporter.java
@@ -1,151 +1,151 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.InputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.HashMap;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.OutputPrinter;
-
-/**
- * Imports a Biblioscape Tag File. The format is described on
- * http://www.biblioscape.com/manual_bsp/Biblioscape_Tag_File.htm Several
- * Biblioscape field types are ignored. Others are only included in the BibTeX
- * field "comment".
- */
-public class ScifinderImporter extends ImportFormat {
-
-    /**
-     * Return the name of this import format.
-     */
-    public String getFormatName() {
-    return "Scifinder";
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-     */
-    public String getCLIId() {
-      return "scifinder";
-    }
-
-    /**
-     * Check whether the source is in the correct format for this importer.
-     */
-    public boolean isRecognizedFormat(InputStream stream) throws IOException {
-
-        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-        String str;
-        int i=0;
-        while (((str = in.readLine()) != null) && (i < 50)) {
-
-			if (str.trim().equals("START_RECORD"))
-				return true;
-
-            i++;
-        }
-
-		return false;
-    }
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     */
-    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-    ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
-    StringBuffer sb = new StringBuffer();
-    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-    String str;
-    String number = "";
-    String country = "";
-    String kindcode = "";
-    while ((str = in.readLine()) != null){
-        sb.append(str);
-    }
-
-    String[] entries = sb.toString().split("START_RECORD");
-    HashMap<String, String> hm = new HashMap<String, String>();
-    for (int i = 1; i < entries.length; i++){
-        String[] fields = entries[i].split("FIELD ");
-        String journal = null;
-        String Type = "";
-        hm.clear(); // reset
-        for (int j = 0; j < fields.length; j++)
-        if (fields[j].indexOf(":") >= 0){
-            String tmp[] = new String[2];
-            tmp[0] = fields[j].substring(0, fields[j].indexOf(":"));
-            tmp[1] = fields[j].substring(fields[j].indexOf(":") + 1).trim();
-            if (tmp.length > 1){//==2
-            if (tmp[0].equals("Author")) hm.put("author", AuthorList.fixAuthor_lastNameFirst(tmp[1].replaceAll(";", " and ")));
-            else if (tmp[0].equals("Title")) hm.put("title", tmp[1]);
-            else if (tmp[0].equals("Journal Title")) {
-                journal = tmp[1];
-            }
-
-
-            else if (tmp[0].equals("Volume")) hm.put("volume", tmp[1]);
-            else if (tmp[0].equals("Page")) hm.put("pages", tmp[1]);
-            else if (tmp[0].equals("Publication Year")) hm.put("year", tmp[1]);
-            else if (tmp[0].equals("Abstract")) hm.put("abstract", tmp[1]);
-            else if (tmp[0].equals("Supplementary Terms")) hm.put("keywords",
-                                          tmp[1]);
-            else if (tmp[0].equals("Inventor Name") && (tmp[1].trim().length() > 0)) hm.put("author", AuthorList.fixAuthor_lastNameFirst(tmp[1].replaceAll(";", " and ")));
-            else if (tmp[0].equals("Patent Assignee")) hm.put("institution", tmp[1]);
-            else if (tmp[0].equals("Patent Kind Code")) kindcode = " " + tmp[1];
-            else if (tmp[0].equals("Patent Country")) country = tmp[1] + " ";
-            else if (tmp[0].equals("Patent Number")) number = tmp[1];
-            else if (tmp[0].equals("Priority Application Date")) hm.put("number", country + number + kindcode);
-
-            else if (tmp[0].equals("Document Type")) {
-                                if (tmp[1].startsWith("Journal") || tmp[1].startsWith("Review"))
-                                    Type = "article";
-                                else if (tmp[1].equals("Dissertation"))
-                                    Type = "phdthesis";
-                                else if (tmp[1].equals("Patent"))
-                                    Type = "patent";
-                                else if (tmp[1].startsWith("Conference"))
-                                    Type = "conference";
-                                else
-                                    Type = tmp[1];
-                        }
-            }
-        }
-
-        BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
-                        .getEntryType(Type)); // id assumes an existing database so don't
-        // create one here
-        b.setField(hm);
-        if (journal != null) {
-            if (Type.equals("conference"))
-                b.setField("booktitle", journal);
-            else
-                b.setField("journal", journal);
-        }
-        bibitems.add(b);
-
-    }
-    return bibitems;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.InputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.HashMap;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.OutputPrinter;
+
+/**
+ * Imports a Biblioscape Tag File. The format is described on
+ * http://www.biblioscape.com/manual_bsp/Biblioscape_Tag_File.htm Several
+ * Biblioscape field types are ignored. Others are only included in the BibTeX
+ * field "comment".
+ */
+public class ScifinderImporter extends ImportFormat {
+
+    /**
+     * Return the name of this import format.
+     */
+    public String getFormatName() {
+    return "Scifinder";
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+     */
+    public String getCLIId() {
+      return "scifinder";
+    }
+
+    /**
+     * Check whether the source is in the correct format for this importer.
+     */
+    public boolean isRecognizedFormat(InputStream stream) throws IOException {
+
+        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+        String str;
+        int i=0;
+        while (((str = in.readLine()) != null) && (i < 50)) {
+
+			if (str.trim().equals("START_RECORD"))
+				return true;
+
+            i++;
+        }
+
+		return false;
+    }
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     */
+    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+    ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
+    StringBuffer sb = new StringBuffer();
+    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+    String str;
+    String number = "";
+    String country = "";
+    String kindcode = "";
+    while ((str = in.readLine()) != null){
+        sb.append(str);
+    }
+
+    String[] entries = sb.toString().split("START_RECORD");
+    HashMap<String, String> hm = new HashMap<String, String>();
+    for (int i = 1; i < entries.length; i++){
+        String[] fields = entries[i].split("FIELD ");
+        String journal = null;
+        String Type = "";
+        hm.clear(); // reset
+        for (int j = 0; j < fields.length; j++)
+        if (fields[j].indexOf(":") >= 0){
+            String tmp[] = new String[2];
+            tmp[0] = fields[j].substring(0, fields[j].indexOf(":"));
+            tmp[1] = fields[j].substring(fields[j].indexOf(":") + 1).trim();
+            if (tmp.length > 1){//==2
+            if (tmp[0].equals("Author")) hm.put("author", AuthorList.fixAuthor_lastNameFirst(tmp[1].replaceAll(";", " and ")));
+            else if (tmp[0].equals("Title")) hm.put("title", tmp[1]);
+            else if (tmp[0].equals("Journal Title")) {
+                journal = tmp[1];
+            }
+
+
+            else if (tmp[0].equals("Volume")) hm.put("volume", tmp[1]);
+            else if (tmp[0].equals("Page")) hm.put("pages", tmp[1]);
+            else if (tmp[0].equals("Publication Year")) hm.put("year", tmp[1]);
+            else if (tmp[0].equals("Abstract")) hm.put("abstract", tmp[1]);
+            else if (tmp[0].equals("Supplementary Terms")) hm.put("keywords",
+                                          tmp[1]);
+            else if (tmp[0].equals("Inventor Name") && (tmp[1].trim().length() > 0)) hm.put("author", AuthorList.fixAuthor_lastNameFirst(tmp[1].replaceAll(";", " and ")));
+            else if (tmp[0].equals("Patent Assignee")) hm.put("institution", tmp[1]);
+            else if (tmp[0].equals("Patent Kind Code")) kindcode = " " + tmp[1];
+            else if (tmp[0].equals("Patent Country")) country = tmp[1] + " ";
+            else if (tmp[0].equals("Patent Number")) number = tmp[1];
+            else if (tmp[0].equals("Priority Application Date")) hm.put("number", country + number + kindcode);
+
+            else if (tmp[0].equals("Document Type")) {
+                                if (tmp[1].startsWith("Journal") || tmp[1].startsWith("Review"))
+                                    Type = "article";
+                                else if (tmp[1].equals("Dissertation"))
+                                    Type = "phdthesis";
+                                else if (tmp[1].equals("Patent"))
+                                    Type = "patent";
+                                else if (tmp[1].startsWith("Conference"))
+                                    Type = "conference";
+                                else
+                                    Type = tmp[1];
+                        }
+            }
+        }
+
+        BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
+                        .getEntryType(Type)); // id assumes an existing database so don't
+        // create one here
+        b.setField(hm);
+        if (journal != null) {
+            if (Type.equals("conference"))
+                b.setField("booktitle", journal);
+            else
+                b.setField("journal", journal);
+        }
+        bibitems.add(b);
+
+    }
+    return bibitems;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/SilverPlatterImporter.java b/src/java/net/sf/jabref/imports/SilverPlatterImporter.java
index ccf93ef..8faa58a 100644
--- a/src/java/net/sf/jabref/imports/SilverPlatterImporter.java
+++ b/src/java/net/sf/jabref/imports/SilverPlatterImporter.java
@@ -1,204 +1,204 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.InputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.HashMap;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.OutputPrinter;
-
-import java.util.regex.Pattern;
-import net.sf.jabref.BibtexFields;
-
-/**
- * Imports a SilverPlatter exported file. This is a poor format to parse,
- * so it currently doesn't handle everything correctly.
- */
-public class SilverPlatterImporter extends ImportFormat {
-
-    /**
-     * Return the name of this import format.
-     */
-    public String getFormatName() {
-        return "SilverPlatter";
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-     */
-    public String getCLIId() {
-      return "silverplatter";
-    }
-
-    /**
-     * Check whether the source is in the correct format for this importer.
-     */
-    public boolean isRecognizedFormat(InputStream stream) throws IOException {
-        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-
-        // This format is very similar to Inspec, so we have a two-fold strategy:
-        // If we see the flag signalling that it is an inspec file, return false.
-        // This flag should appear above the first entry and prevent us from
-        // accepting the Inspec format. Then we look for the title entry.
-        Pattern pat1 = Pattern.compile("Record.*INSPEC.*");
-        String str;
-        while ((str = in.readLine()) != null){
-
-            if (pat1.matcher(str).find())
-                return false; // This is an inspec file, so return false.
-
-            if ((str.length()>=5) && (str.substring(0, 5).equals("TI:  ")))
-                return true;
-        }
-        return false;
-    }
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     */
-    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
-        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-        boolean isChapter = false;
-        String str;
-        StringBuffer sb = new StringBuffer();
-        while ((str = in.readLine()) != null){
-            if (str.length() < 2) sb.append("__::__").append(str);
-            else
-            sb.append("__NEWFIELD__").append(str);
-        }
-        in.close();
-        String[] entries = sb.toString().split("__::__");
-        String Type = "";
-        HashMap<String, String> h = new HashMap<String, String>();
-        entryLoop: for (int i = 0; i < entries.length; i++){
-            if (entries[i].trim().length() < 6) continue entryLoop;
-            //System.out.println("'"+entries[i]+"'");
-            h.clear();
-            String[] fields = entries[i].split("__NEWFIELD__");
-            fieldLoop: for (int j = 0; j < fields.length; j++){
-                if (fields[j].length() < 6) continue fieldLoop;
-                //System.out.println(">"+fields[j]+"<");
-                String s = fields[j];
-                String f3 = s.substring(0, 2);
-                String frest = s.substring(5);
-                if (f3.equals("TI")) h.put("title", frest);
-                //else if(f3.equals("PY")) h.put("year", frest);
-                else if (f3.equals("AU")){
-                    if (frest.trim().endsWith("(ed)")){
-                        String ed = frest.trim();
-                        ed = ed.substring(0, ed.length() - 4);
-                        h.put("editor", AuthorList.fixAuthor_lastNameFirst(ed.replaceAll(",-", ", ")
-                                .replaceAll(";", " and ")));
-                    }else h.put("author", AuthorList.fixAuthor_lastNameFirst(frest.replaceAll(
-                                           ",-", ", ").replaceAll(";", " and ")));
-                }else if (f3.equals("AB")) h.put("abstract", frest);
-                else if (f3.equals("DE")){
-                    String kw = frest.replaceAll("-;", ",").toLowerCase();
-                    h.put("keywords", kw.substring(0, kw.length() - 1));
-                }else if (f3.equals("SO")){
-                    int m = frest.indexOf(".");
-                    if (m >= 0){
-                        String jr = frest.substring(0, m);
-                        h.put("journal", jr.replaceAll("-", " "));
-                        frest = frest.substring(m);
-                        m = frest.indexOf(";");
-                        if (m >= 5){
-                            String yr = frest.substring(m - 5, m).trim();
-                            h.put("year", yr);
-                            frest = frest.substring(m);
-                            m = frest.indexOf(":");
-                            if (m >= 0){
-                                String pg = frest.substring(m + 1).trim();
-                                h.put("pages", pg);
-                                h.put("volume", frest.substring(1, m));
-                            }
-                        }
-                    }
-                }else if (f3.equals("PB")){
-                    int m = frest.indexOf(":");
-                    if (m >= 0){
-                        String jr = frest.substring(0, m);
-                        h.put("publisher", jr.replaceAll("-", " ").trim());
-                        frest = frest.substring(m);
-                        m = frest.indexOf(", ");
-                        if (m + 2 < frest.length()){
-                            String yr = frest.substring(m + 2).trim();
-                            try {
-                                Integer.parseInt(yr);
-                                h.put("year", yr);
-                            } catch (NumberFormatException ex) {
-                                // Let's assume that this wasn't a number, since it
-                                // couldn't be parsed as an integer.
-                            }
-
-                        }
-
-                    }
-                } else if (f3.equals("AF")) {
-                    h.put("school", frest.trim());
-
-                }else if (f3.equals("DT")){
-                    frest = frest.trim();
-                    if (frest.equals("Monograph")) Type = "book";
-                    else if (frest.startsWith("Dissertation")) Type = "phdthesis";
-                    else if (frest.toLowerCase().indexOf("journal") >= 0) Type = "article";
-                    else if (frest.equals("Contribution") || frest.equals("Chapter")){
-                        Type = "incollection";
-                        // This entry type contains page numbers and booktitle in the
-                        // title field.
-                        isChapter = true;
-                    }
-
-                    else Type = frest.replaceAll(" ", "");
-                }
-            }
-
-            if (isChapter) {
-                Object titleO = h.get("title");
-                if (titleO != null) {
-                    String title = ((String)titleO).trim();
-                    int inPos = title.indexOf("\" in ");
-                    int pgPos = title.lastIndexOf(" ");
-                    if (inPos > 1) h.put("title", title.substring(1, inPos));
-                    if (pgPos > inPos) h.put("pages", title.substring(pgPos)
-                                             .replaceAll("-", "--"));
-
-                }
-
-            }
-
-            BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
-                                            .getEntryType(Type)); // id assumes an existing database so don't
-            // create one here
-            b.setField(h);
-
-            bibitems.add(b);
-
-        }
-
-
-        return bibitems;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.InputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.HashMap;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.OutputPrinter;
+
+import java.util.regex.Pattern;
+import net.sf.jabref.BibtexFields;
+
+/**
+ * Imports a SilverPlatter exported file. This is a poor format to parse,
+ * so it currently doesn't handle everything correctly.
+ */
+public class SilverPlatterImporter extends ImportFormat {
+
+    /**
+     * Return the name of this import format.
+     */
+    public String getFormatName() {
+        return "SilverPlatter";
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+     */
+    public String getCLIId() {
+      return "silverplatter";
+    }
+
+    /**
+     * Check whether the source is in the correct format for this importer.
+     */
+    public boolean isRecognizedFormat(InputStream stream) throws IOException {
+        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+
+        // This format is very similar to Inspec, so we have a two-fold strategy:
+        // If we see the flag signalling that it is an inspec file, return false.
+        // This flag should appear above the first entry and prevent us from
+        // accepting the Inspec format. Then we look for the title entry.
+        Pattern pat1 = Pattern.compile("Record.*INSPEC.*");
+        String str;
+        while ((str = in.readLine()) != null){
+
+            if (pat1.matcher(str).find())
+                return false; // This is an inspec file, so return false.
+
+            if ((str.length()>=5) && (str.substring(0, 5).equals("TI:  ")))
+                return true;
+        }
+        return false;
+    }
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     */
+    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+        ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
+        BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+        boolean isChapter = false;
+        String str;
+        StringBuffer sb = new StringBuffer();
+        while ((str = in.readLine()) != null){
+            if (str.length() < 2) sb.append("__::__").append(str);
+            else
+            sb.append("__NEWFIELD__").append(str);
+        }
+        in.close();
+        String[] entries = sb.toString().split("__::__");
+        String Type = "";
+        HashMap<String, String> h = new HashMap<String, String>();
+        entryLoop: for (int i = 0; i < entries.length; i++){
+            if (entries[i].trim().length() < 6) continue entryLoop;
+            //System.out.println("'"+entries[i]+"'");
+            h.clear();
+            String[] fields = entries[i].split("__NEWFIELD__");
+            fieldLoop: for (int j = 0; j < fields.length; j++){
+                if (fields[j].length() < 6) continue fieldLoop;
+                //System.out.println(">"+fields[j]+"<");
+                String s = fields[j];
+                String f3 = s.substring(0, 2);
+                String frest = s.substring(5);
+                if (f3.equals("TI")) h.put("title", frest);
+                //else if(f3.equals("PY")) h.put("year", frest);
+                else if (f3.equals("AU")){
+                    if (frest.trim().endsWith("(ed)")){
+                        String ed = frest.trim();
+                        ed = ed.substring(0, ed.length() - 4);
+                        h.put("editor", AuthorList.fixAuthor_lastNameFirst(ed.replaceAll(",-", ", ")
+                                .replaceAll(";", " and ")));
+                    }else h.put("author", AuthorList.fixAuthor_lastNameFirst(frest.replaceAll(
+                                           ",-", ", ").replaceAll(";", " and ")));
+                }else if (f3.equals("AB")) h.put("abstract", frest);
+                else if (f3.equals("DE")){
+                    String kw = frest.replaceAll("-;", ",").toLowerCase();
+                    h.put("keywords", kw.substring(0, kw.length() - 1));
+                }else if (f3.equals("SO")){
+                    int m = frest.indexOf(".");
+                    if (m >= 0){
+                        String jr = frest.substring(0, m);
+                        h.put("journal", jr.replaceAll("-", " "));
+                        frest = frest.substring(m);
+                        m = frest.indexOf(";");
+                        if (m >= 5){
+                            String yr = frest.substring(m - 5, m).trim();
+                            h.put("year", yr);
+                            frest = frest.substring(m);
+                            m = frest.indexOf(":");
+                            if (m >= 0){
+                                String pg = frest.substring(m + 1).trim();
+                                h.put("pages", pg);
+                                h.put("volume", frest.substring(1, m));
+                            }
+                        }
+                    }
+                }else if (f3.equals("PB")){
+                    int m = frest.indexOf(":");
+                    if (m >= 0){
+                        String jr = frest.substring(0, m);
+                        h.put("publisher", jr.replaceAll("-", " ").trim());
+                        frest = frest.substring(m);
+                        m = frest.indexOf(", ");
+                        if (m + 2 < frest.length()){
+                            String yr = frest.substring(m + 2).trim();
+                            try {
+                                Integer.parseInt(yr);
+                                h.put("year", yr);
+                            } catch (NumberFormatException ex) {
+                                // Let's assume that this wasn't a number, since it
+                                // couldn't be parsed as an integer.
+                            }
+
+                        }
+
+                    }
+                } else if (f3.equals("AF")) {
+                    h.put("school", frest.trim());
+
+                }else if (f3.equals("DT")){
+                    frest = frest.trim();
+                    if (frest.equals("Monograph")) Type = "book";
+                    else if (frest.startsWith("Dissertation")) Type = "phdthesis";
+                    else if (frest.toLowerCase().indexOf("journal") >= 0) Type = "article";
+                    else if (frest.equals("Contribution") || frest.equals("Chapter")){
+                        Type = "incollection";
+                        // This entry type contains page numbers and booktitle in the
+                        // title field.
+                        isChapter = true;
+                    }
+
+                    else Type = frest.replaceAll(" ", "");
+                }
+            }
+
+            if (isChapter) {
+                Object titleO = h.get("title");
+                if (titleO != null) {
+                    String title = ((String)titleO).trim();
+                    int inPos = title.indexOf("\" in ");
+                    int pgPos = title.lastIndexOf(" ");
+                    if (inPos > 1) h.put("title", title.substring(1, inPos));
+                    if (pgPos > inPos) h.put("pages", title.substring(pgPos)
+                                             .replaceAll("-", "--"));
+
+                }
+
+            }
+
+            BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
+                                            .getEntryType(Type)); // id assumes an existing database so don't
+            // create one here
+            b.setField(h);
+
+            bibitems.add(b);
+
+        }
+
+
+        return bibitems;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/SixpackImporter.java b/src/java/net/sf/jabref/imports/SixpackImporter.java
index 5daca2d..741ab0f 100644
--- a/src/java/net/sf/jabref/imports/SixpackImporter.java
+++ b/src/java/net/sf/jabref/imports/SixpackImporter.java
@@ -1,165 +1,165 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.io.InputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.HashMap;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.Util;
-
-/**
- * Imports a Biblioscape Tag File. The format is described on
- * http://www.biblioscape.com/manual_bsp/Biblioscape_Tag_File.htm Several
- * Biblioscape field types are ignored. Others are only included in the BibTeX
- * field "comment".
- */
-public class SixpackImporter extends ImportFormat {
-
-    final String SEPARATOR = new String(new char[] { 0, 48 });
-
-    /**
-     * Return the name of this import format.
-     */
-    public String getFormatName() {
-	return "Sixpack";
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
-     */
-    public String getCLIId() {
-      return "sixpack";
-    }
-    
-    /**
-     * Check whether the source is in the correct format for this importer.
-     */
-    public boolean isRecognizedFormat(InputStream stream) throws IOException {
-	    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-        String str;
-        int i=0;
-        while (((str = in.readLine()) != null) && (i < 50)) {
-
-			if (str.indexOf(SEPARATOR) >= 0)
-				return true;
-
-            i++;
-        }
-
-		return false;
-    }
-
-    /**
-     * Parse the entries in the source, and return a List of BibtexEntry
-     * objects.
-     */
-    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
-
-
-	HashMap<String, String> fI = new HashMap<String, String>();
-	fI.put("id", "bibtexkey");
-	fI.put("au", "author");
-	fI.put("ti", "title");
-	fI.put("jo", "journal");
-	fI.put("vo", "volume");
-	fI.put("nu", "number");
-	fI.put("pa", "pages");
-	fI.put("mo", "month");
-	fI.put("yr", "year");
-	fI.put("kw", "keywords");
-	fI.put("ab", "abstract");
-	fI.put("no", "note");
-	fI.put("ed", "editor");
-	fI.put("pu", "publisher");
-	fI.put("se", "series");
-	fI.put("ad", "address");
-	fI.put("en", "edition");
-	fI.put("ch", "chapter");
-	fI.put("hp", "howpublished");
-	fI.put("tb", "booktitle");
-	fI.put("or", "organization");
-	fI.put("sc", "school");
-	fI.put("in", "institution");
-	fI.put("ty", "type");
-	fI.put("url", "url");
-	fI.put("cr", "crossref");
-    fI.put("fi", "file");
-
-	ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
-	BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-	in.readLine();
-    String ln = in.readLine();
-    if (ln == null)
-        return null;
-    String[] fieldDef = ln.split(",");
-
-    String s = null;
-	BibtexEntry entry = null;
-	lines: while ((s = in.readLine()) != null){
-	    try{
-		s = s.replaceAll("<par>", ""); // What is <par> ????
-		String[] fields = s.split(SEPARATOR);
-		// Check type and create entry:
-		if (fields.length < 2)
-		    continue lines; // Avoid ArrayIndexOutOfBoundsException
-		BibtexEntryType typ = BibtexEntryType
-		    .getType(fields[1].toLowerCase());
-		if (typ == null){
-		    String type = "";
-		    if (fields[1].equals("Masterthesis")) type = "mastersthesis";
-		    if (fields[1].equals("PhD-Thesis")) type = "phdthesis";
-		    if (fields[1].equals("miscellaneous")) type = "misc";
-		    if (fields[1].equals("Conference")) type = "proceedings";
-		    typ = BibtexEntryType.getType(type.toLowerCase());
-		}
-		entry = new BibtexEntry(Util.createNeutralId(), typ);
-		String fld;
-		for (int i = 0; i < Math.min(fieldDef.length, fields.length); i++){
-		    fld = fI.get(fieldDef[i]);
-		    if (fld != null){
-			if (fld.equals("author") || fld.equals("editor")) ImportFormatReader.setIfNecessary(entry,
-												      fld, fields[i].replaceAll(" and ", ", ").replaceAll(", ",
-																			  " and "));
-			else if (fld.equals("pages")) ImportFormatReader.setIfNecessary(entry, fld, fields[i]
-							       .replaceAll("-", "--"));
-            else if (fld.equals("file")) {
-                String fieldName = "pdf"; // We set pdf as default.
-                if (fields[i].endsWith("ps") || fields[i].endsWith("ps.gz"))
-                    fieldName = "ps";
-                else if (fields[i].endsWith("html"))
-                    fieldName = "url";
-                ImportFormatReader.setIfNecessary(entry, fieldName, fields[i]);
-            }
-			else ImportFormatReader.setIfNecessary(entry, fld, fields[i]);
-		    }
-		}
-		bibitems.add(entry);
-	    }catch (NullPointerException ex){
-		Globals.logger("Problem parsing Sixpack entry, ignoring entry.");
-	    }
-	}
-
-	return bibitems;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.io.InputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.HashMap;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.Util;
+
+/**
+ * Imports a Biblioscape Tag File. The format is described on
+ * http://www.biblioscape.com/manual_bsp/Biblioscape_Tag_File.htm Several
+ * Biblioscape field types are ignored. Others are only included in the BibTeX
+ * field "comment".
+ */
+public class SixpackImporter extends ImportFormat {
+
+    final String SEPARATOR = new String(new char[] { 0, 48 });
+
+    /**
+     * Return the name of this import format.
+     */
+    public String getFormatName() {
+	return "Sixpack";
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see net.sf.jabref.imports.ImportFormat#getCLIId()
+     */
+    public String getCLIId() {
+      return "sixpack";
+    }
+    
+    /**
+     * Check whether the source is in the correct format for this importer.
+     */
+    public boolean isRecognizedFormat(InputStream stream) throws IOException {
+	    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+        String str;
+        int i=0;
+        while (((str = in.readLine()) != null) && (i < 50)) {
+
+			if (str.indexOf(SEPARATOR) >= 0)
+				return true;
+
+            i++;
+        }
+
+		return false;
+    }
+
+    /**
+     * Parse the entries in the source, and return a List of BibtexEntry
+     * objects.
+     */
+    public List<BibtexEntry> importEntries(InputStream stream, OutputPrinter status) throws IOException {
+
+
+	HashMap<String, String> fI = new HashMap<String, String>();
+	fI.put("id", "bibtexkey");
+	fI.put("au", "author");
+	fI.put("ti", "title");
+	fI.put("jo", "journal");
+	fI.put("vo", "volume");
+	fI.put("nu", "number");
+	fI.put("pa", "pages");
+	fI.put("mo", "month");
+	fI.put("yr", "year");
+	fI.put("kw", "keywords");
+	fI.put("ab", "abstract");
+	fI.put("no", "note");
+	fI.put("ed", "editor");
+	fI.put("pu", "publisher");
+	fI.put("se", "series");
+	fI.put("ad", "address");
+	fI.put("en", "edition");
+	fI.put("ch", "chapter");
+	fI.put("hp", "howpublished");
+	fI.put("tb", "booktitle");
+	fI.put("or", "organization");
+	fI.put("sc", "school");
+	fI.put("in", "institution");
+	fI.put("ty", "type");
+	fI.put("url", "url");
+	fI.put("cr", "crossref");
+    fI.put("fi", "file");
+
+	ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
+	BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+	in.readLine();
+    String ln = in.readLine();
+    if (ln == null)
+        return null;
+    String[] fieldDef = ln.split(",");
+
+    String s = null;
+	BibtexEntry entry = null;
+	lines: while ((s = in.readLine()) != null){
+	    try{
+		s = s.replaceAll("<par>", ""); // What is <par> ????
+		String[] fields = s.split(SEPARATOR);
+		// Check type and create entry:
+		if (fields.length < 2)
+		    continue lines; // Avoid ArrayIndexOutOfBoundsException
+		BibtexEntryType typ = BibtexEntryType
+		    .getType(fields[1].toLowerCase());
+		if (typ == null){
+		    String type = "";
+		    if (fields[1].equals("Masterthesis")) type = "mastersthesis";
+		    if (fields[1].equals("PhD-Thesis")) type = "phdthesis";
+		    if (fields[1].equals("miscellaneous")) type = "misc";
+		    if (fields[1].equals("Conference")) type = "proceedings";
+		    typ = BibtexEntryType.getType(type.toLowerCase());
+		}
+		entry = new BibtexEntry(Util.createNeutralId(), typ);
+		String fld;
+		for (int i = 0; i < Math.min(fieldDef.length, fields.length); i++){
+		    fld = fI.get(fieldDef[i]);
+		    if (fld != null){
+			if (fld.equals("author") || fld.equals("editor")) ImportFormatReader.setIfNecessary(entry,
+												      fld, fields[i].replaceAll(" and ", ", ").replaceAll(", ",
+																			  " and "));
+			else if (fld.equals("pages")) ImportFormatReader.setIfNecessary(entry, fld, fields[i]
+							       .replaceAll("-", "--"));
+            else if (fld.equals("file")) {
+                String fieldName = "pdf"; // We set pdf as default.
+                if (fields[i].endsWith("ps") || fields[i].endsWith("ps.gz"))
+                    fieldName = "ps";
+                else if (fields[i].endsWith("html"))
+                    fieldName = "url";
+                ImportFormatReader.setIfNecessary(entry, fieldName, fields[i]);
+            }
+			else ImportFormatReader.setIfNecessary(entry, fld, fields[i]);
+		    }
+		}
+		bibitems.add(entry);
+	    }catch (NullPointerException ex){
+		Globals.logger("Problem parsing Sixpack entry, ignoring entry.");
+	    }
+	}
+
+	return bibitems;
+    }
+}
diff --git a/src/java/net/sf/jabref/imports/TextAnalyzer.java b/src/java/net/sf/jabref/imports/TextAnalyzer.java
index 8e70c9f..98e4568 100644
--- a/src/java/net/sf/jabref/imports/TextAnalyzer.java
+++ b/src/java/net/sf/jabref/imports/TextAnalyzer.java
@@ -1,230 +1,230 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.imports;
-
-import java.util.Iterator;
-import java.util.TreeSet;
-import java.util.Vector;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-
-public class TextAnalyzer {
-
-  BibtexEntry be = null;
-
-  public TextAnalyzer(String text) {
-    guessBibtexFields(text);
-  }
-
-  public BibtexEntry getEntry() {
-    return be;
-  }
-
-  public void guessBibtexFields(String text) {
-
-      TreeSet<Substring> usedParts = new TreeSet<Substring>();
-
-      text = "  "+text+"  ";
-
-      String[] split = null;
-
-      // Look for the year:
-      String year = null;
-      String yearRx = "(\\s|\\()\\d\\d\\d\\d(\\.|,|\\))";
-      String[] cand = getMatches(text, yearRx);
-      if (cand.length == 1) {
-        // Only one four-digit number, so we guess that is the year.
-        year = clean(cand[0]);
-        int pos = text.indexOf(year);
-        usedParts.add(new Substring("year", pos, pos+year.length()));
-        Util.pr("Guessing 'year': '"+year+"'");
-      } else if (cand.length > 1) {
-        // More than one four-digit numbers, so we look for one giving a reasonable year:
-
-        int good = -1, yearFound = -1;
-        find: for (int i=0; i<cand.length; i++) {
-          int number = Integer.parseInt(cand[i].trim());
-          if (number == yearFound)
-            continue find;
-          if (number < 2500) {
-            if (good == -1) {
-              good = i;
-              yearFound = number;
-            } else {
-              // More than one found. Be a bit more specific.
-              if ((yearFound < Globals.FUTURE_YEAR) && (number < Globals.FUTURE_YEAR)) {
-                good = -1;
-                break find; // Give up, both seem good enough.
-              }
-              else if ((yearFound >= Globals.FUTURE_YEAR) && (number < Globals.FUTURE_YEAR)) {
-                good = i;
-                yearFound = number;
-              }
-            }
-          }
-        }
-        if (good >= 0) {
-          year = clean(cand[good]);
-          int pos = text.indexOf(year);
-          usedParts.add(new Substring("year", pos, pos+year.length()));
-          Util.pr("Guessing 'year': '"+year+"'");
-        }
-      }
-
-      // Look for Pages:
-      String pages = null;
-      String pagesRx = "\\s(\\d{1,4})( ??)-( ??)(\\d{1,4})(\\.|,|\\s)";
-      cand = getMatches(text, pagesRx);
-      if (cand.length == 1) {
-        pages = clean(cand[0].replaceAll("-|( - )", "--"));
-        int pos = text.indexOf(cand[0]);
-        usedParts.add(new Substring("pages", pos, pos+year.length()));
-        Util.pr("Guessing 'pages': '" + pages + "'");
-      } else if (cand.length > 1) {
-        int found = -1;
-        checkScope: for (int i=0; i<cand.length; i++) {
-          split = clean(cand[i].replaceAll("\\s", "")).split("-");
-               //   Util.pr("Pg: "+pages);
-          int first = Integer.parseInt(split[0]),
-              second = Integer.parseInt(split[1]);
-          if (second-first > 3) {
-            found = i;
-            break checkScope;
-          }
-        }
-        if (found >= 0) {
-          pages = clean(cand[found].replaceAll("-|( - )", "--"));
-          int pos = text.indexOf(cand[found]);
-          Util.pr("Guessing 'pages': '" + pages + "'");
-          usedParts.add(new Substring("pages", pos, pos+pages.length()));
-        }
-      }
-
-      //String journalRx = "(\\.|\\n)\\s??([a-zA-Z\\. ]{8,30}+)((vol\\.|Vol\\.|Volume|volume))??(.??)(\\d{1,3})(\\.|,|\\s)";
-      String journal = null,
-          volume = null;
-      String journalRx = "(,|\\.|\\n)\\s??([a-zA-Z\\. ]{8,30}+)((.){0,2})((vol\\.|Vol\\.|Volume|volume))??\\s??(\\d{1,3})(\\.|,|\\s|:)";
-      cand = getMatches(text, journalRx);
-      if (cand.length > 0) {
-        //Util.pr("guessing 'journal': '" + cand[0] + "'");
-        cand[0] = cand[0].trim();
-        int pos = cand[0].lastIndexOf(' ');
-        if (pos > 0) {
-          volume = clean(cand[0].substring(pos+1));
-          Util.pr("Guessing 'volume': '" + volume + "'");
-          journal = clean(cand[0].substring(0, pos));
-          //Util.pr("guessing 'journal': '" + journal + "'");
-          pos = journal.lastIndexOf(' ');
-          if (pos > 0) {
-            String last = journal.substring(pos+1).toLowerCase();
-            if (last.equals("volume") || last.equals("vol") || last.equals("v"))
-              journal = clean(journal.substring(0, pos));
-          }
-          pos = text.indexOf(journal);
-          usedParts.add(new Substring("journal", pos, pos+journal.length()));
-          Util.pr("Guessing 'journal': '" + journal + "'");
-        }
-        //Util.pr("Journal? '"+cand[0]+"'");
-      } else {
-        // No journal found. Maybe the year precedes the volume? Try another regexp:
-        journalRx = "(,|\\.|\\n)\\s??([a-zA-Z\\. ]{8,30}+)((.){0,2})\\s??(\\d{1,3})(\\.|,|\\s|:)";
-      }
-
-      // Then try to find title and authors.
-      Substring ss;
-      Vector<String> free = new Vector<String>();
-      int piv = 0;
-      for (Iterator<Substring> i=usedParts.iterator(); i.hasNext();) {
-        ss = i.next();
-        if (ss.begin()-piv > 10) {
-          Util.pr("... "+text.substring(piv, ss.begin()));
-          free.add(clean(text.substring(piv, ss.begin())));
-        }
-        piv = ss.end();
-      }
-      if (text.length()-piv > 10) {
-        free.add(clean(text.substring(piv)));
-      }
-      Util.pr("Free parts:");
-      for (String s : free){
-        Util.pr(": '"+s+"'");
-      }
-    }
-
-
-    public String[] getMatches(String text, String regexp) {
-      int piv = 0;
-      String[] test = text.split(regexp);
-      if (test.length < 2)
-        return new String[0];
-
-      String[] out = new String[test.length-1];
-      for (int i=0; i<out.length; i++) {
-        String[] curr = text.split(regexp, i+2);
-        out[i] = text.substring(piv+curr[i].length(), text.length()-curr[i+1].length());
-        piv += curr[i].length()+out[i].length();
-        //Util.pr("--"+out[i]+"\n-> "+piv);
-      }
-      return out;
-    }
-
-    private String clean(String s) {
-      boolean found = false;
-      int left = 0, right = s.length()-1;
-      while (!found && left<s.length()) {
-        char c = s.charAt(left);
-        if (Character.isWhitespace(c) || (c=='.') || (c==',') || (c=='(')
-            || (c==':') || (c==')'))
-          left++;
-        else
-          found = true;
-      }
-      found = false;
-      while (!found && right>left) {
-        char c = s.charAt(right);
-        if (Character.isWhitespace(c) || (c=='.') || (c==',') || (c==')')
-            || (c==':') || (c=='('))
-          right--;
-        else
-          found = true;
-      }
-      //Util.pr(s+"\n"+left+" "+right);
-      return s.substring(left, Math.min(right+1, s.length()));
-    }
-
-    private class Substring implements Comparable<Substring> {
-		int begin, end;
-
-		public Substring(String name, int begin, int end) {
-			this.begin = begin;
-			this.end = end;
-		}
-
-		public int begin() {
-			return begin;
-		}
-
-		public int end() {
-			return end;
-		}
-
-		public int compareTo(Substring other) {
-			return (new Integer(begin)).compareTo(new Integer(other.begin()));
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.imports;
+
+import java.util.Iterator;
+import java.util.TreeSet;
+import java.util.Vector;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+
+public class TextAnalyzer {
+
+  BibtexEntry be = null;
+
+  public TextAnalyzer(String text) {
+    guessBibtexFields(text);
+  }
+
+  public BibtexEntry getEntry() {
+    return be;
+  }
+
+  public void guessBibtexFields(String text) {
+
+      TreeSet<Substring> usedParts = new TreeSet<Substring>();
+
+      text = "  "+text+"  ";
+
+      String[] split = null;
+
+      // Look for the year:
+      String year = null;
+      String yearRx = "(\\s|\\()\\d\\d\\d\\d(\\.|,|\\))";
+      String[] cand = getMatches(text, yearRx);
+      if (cand.length == 1) {
+        // Only one four-digit number, so we guess that is the year.
+        year = clean(cand[0]);
+        int pos = text.indexOf(year);
+        usedParts.add(new Substring("year", pos, pos+year.length()));
+        Util.pr("Guessing 'year': '"+year+"'");
+      } else if (cand.length > 1) {
+        // More than one four-digit numbers, so we look for one giving a reasonable year:
+
+        int good = -1, yearFound = -1;
+        find: for (int i=0; i<cand.length; i++) {
+          int number = Integer.parseInt(cand[i].trim());
+          if (number == yearFound)
+            continue find;
+          if (number < 2500) {
+            if (good == -1) {
+              good = i;
+              yearFound = number;
+            } else {
+              // More than one found. Be a bit more specific.
+              if ((yearFound < Globals.FUTURE_YEAR) && (number < Globals.FUTURE_YEAR)) {
+                good = -1;
+                break find; // Give up, both seem good enough.
+              }
+              else if ((yearFound >= Globals.FUTURE_YEAR) && (number < Globals.FUTURE_YEAR)) {
+                good = i;
+                yearFound = number;
+              }
+            }
+          }
+        }
+        if (good >= 0) {
+          year = clean(cand[good]);
+          int pos = text.indexOf(year);
+          usedParts.add(new Substring("year", pos, pos+year.length()));
+          Util.pr("Guessing 'year': '"+year+"'");
+        }
+      }
+
+      // Look for Pages:
+      String pages = null;
+      String pagesRx = "\\s(\\d{1,4})( ??)-( ??)(\\d{1,4})(\\.|,|\\s)";
+      cand = getMatches(text, pagesRx);
+      if (cand.length == 1) {
+        pages = clean(cand[0].replaceAll("-|( - )", "--"));
+        int pos = text.indexOf(cand[0]);
+        usedParts.add(new Substring("pages", pos, pos+year.length()));
+        Util.pr("Guessing 'pages': '" + pages + "'");
+      } else if (cand.length > 1) {
+        int found = -1;
+        checkScope: for (int i=0; i<cand.length; i++) {
+          split = clean(cand[i].replaceAll("\\s", "")).split("-");
+               //   Util.pr("Pg: "+pages);
+          int first = Integer.parseInt(split[0]),
+              second = Integer.parseInt(split[1]);
+          if (second-first > 3) {
+            found = i;
+            break checkScope;
+          }
+        }
+        if (found >= 0) {
+          pages = clean(cand[found].replaceAll("-|( - )", "--"));
+          int pos = text.indexOf(cand[found]);
+          Util.pr("Guessing 'pages': '" + pages + "'");
+          usedParts.add(new Substring("pages", pos, pos+pages.length()));
+        }
+      }
+
+      //String journalRx = "(\\.|\\n)\\s??([a-zA-Z\\. ]{8,30}+)((vol\\.|Vol\\.|Volume|volume))??(.??)(\\d{1,3})(\\.|,|\\s)";
+      String journal = null,
+          volume = null;
+      String journalRx = "(,|\\.|\\n)\\s??([a-zA-Z\\. ]{8,30}+)((.){0,2})((vol\\.|Vol\\.|Volume|volume))??\\s??(\\d{1,3})(\\.|,|\\s|:)";
+      cand = getMatches(text, journalRx);
+      if (cand.length > 0) {
+        //Util.pr("guessing 'journal': '" + cand[0] + "'");
+        cand[0] = cand[0].trim();
+        int pos = cand[0].lastIndexOf(' ');
+        if (pos > 0) {
+          volume = clean(cand[0].substring(pos+1));
+          Util.pr("Guessing 'volume': '" + volume + "'");
+          journal = clean(cand[0].substring(0, pos));
+          //Util.pr("guessing 'journal': '" + journal + "'");
+          pos = journal.lastIndexOf(' ');
+          if (pos > 0) {
+            String last = journal.substring(pos+1).toLowerCase();
+            if (last.equals("volume") || last.equals("vol") || last.equals("v"))
+              journal = clean(journal.substring(0, pos));
+          }
+          pos = text.indexOf(journal);
+          usedParts.add(new Substring("journal", pos, pos+journal.length()));
+          Util.pr("Guessing 'journal': '" + journal + "'");
+        }
+        //Util.pr("Journal? '"+cand[0]+"'");
+      } else {
+        // No journal found. Maybe the year precedes the volume? Try another regexp:
+        journalRx = "(,|\\.|\\n)\\s??([a-zA-Z\\. ]{8,30}+)((.){0,2})\\s??(\\d{1,3})(\\.|,|\\s|:)";
+      }
+
+      // Then try to find title and authors.
+      Substring ss;
+      Vector<String> free = new Vector<String>();
+      int piv = 0;
+      for (Iterator<Substring> i=usedParts.iterator(); i.hasNext();) {
+        ss = i.next();
+        if (ss.begin()-piv > 10) {
+          Util.pr("... "+text.substring(piv, ss.begin()));
+          free.add(clean(text.substring(piv, ss.begin())));
+        }
+        piv = ss.end();
+      }
+      if (text.length()-piv > 10) {
+        free.add(clean(text.substring(piv)));
+      }
+      Util.pr("Free parts:");
+      for (String s : free){
+        Util.pr(": '"+s+"'");
+      }
+    }
+
+
+    public String[] getMatches(String text, String regexp) {
+      int piv = 0;
+      String[] test = text.split(regexp);
+      if (test.length < 2)
+        return new String[0];
+
+      String[] out = new String[test.length-1];
+      for (int i=0; i<out.length; i++) {
+        String[] curr = text.split(regexp, i+2);
+        out[i] = text.substring(piv+curr[i].length(), text.length()-curr[i+1].length());
+        piv += curr[i].length()+out[i].length();
+        //Util.pr("--"+out[i]+"\n-> "+piv);
+      }
+      return out;
+    }
+
+    private String clean(String s) {
+      boolean found = false;
+      int left = 0, right = s.length()-1;
+      while (!found && left<s.length()) {
+        char c = s.charAt(left);
+        if (Character.isWhitespace(c) || (c=='.') || (c==',') || (c=='(')
+            || (c==':') || (c==')'))
+          left++;
+        else
+          found = true;
+      }
+      found = false;
+      while (!found && right>left) {
+        char c = s.charAt(right);
+        if (Character.isWhitespace(c) || (c=='.') || (c==',') || (c==')')
+            || (c==':') || (c=='('))
+          right--;
+        else
+          found = true;
+      }
+      //Util.pr(s+"\n"+left+" "+right);
+      return s.substring(left, Math.min(right+1, s.length()));
+    }
+
+    private class Substring implements Comparable<Substring> {
+		int begin, end;
+
+		public Substring(String name, int begin, int end) {
+			this.begin = begin;
+			this.end = end;
+		}
+
+		public int begin() {
+			return begin;
+		}
+
+		public int end() {
+			return end;
+		}
+
+		public int compareTo(Substring other) {
+			return (new Integer(begin)).compareTo(new Integer(other.begin()));
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/imports/UnlinkedFilesCrawler.java b/src/java/net/sf/jabref/imports/UnlinkedFilesCrawler.java
index 9e86636..ae937e4 100644
--- a/src/java/net/sf/jabref/imports/UnlinkedFilesCrawler.java
+++ b/src/java/net/sf/jabref/imports/UnlinkedFilesCrawler.java
@@ -1,102 +1,102 @@
-package net.sf.jabref.imports;
-
-import java.io.File;
-import java.io.FileFilter;
-
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.FindUnlinkedFilesDialog.CheckableTreeNode;
-import net.sf.jabref.FindUnlinkedFilesDialog.FileNodeWrapper;
-
-/**
- * Util class for searching files on the filessystem which are not linked to a
- * provided {@link BibtexDatabase}.
- * 
- * @author Nosh&Dan
- * @version 09.11.2008 | 19:55:20
- * 
- */
-public class UnlinkedFilesCrawler {
-
-	/**
-	 * File filter, that accepts directorys only.
-	 */
-	public final FileFilter directoryFilter = new FileFilter() {
-		public boolean accept(File pathname) {
-			if (pathname == null)
-				return false;
-			return pathname.isDirectory();
-		}
-	};
-	private final BibtexDatabase database;
-
-	/**
-	 * CONSTRUCTOR
-	 * 
-	 * @param database
-	 */
-	public UnlinkedFilesCrawler(BibtexDatabase database) {
-		this.database = database;
-	}
-	
-	public CheckableTreeNode searchDirectory(File directory, FileFilter aFileFilter) {
-	    UnlinkedPDFFileFilter ff = new UnlinkedPDFFileFilter(aFileFilter, database);
-		return searchDirectory(directory, ff, new int[] {1}, null);
-	}
-
-	/**
-	 * Searches recursively all files in the specified directory. <br>
-	 * <br>
-	 * All {@link File}s, which match the {@link FileFilter} that comes with the
-	 * {@link EntryFromFileCreatorManager}, are taken into the resulting tree. <br>
-	 * <br>
-	 * The result will be a tree structure of nodes of the type
-	 * {@link CheckableTreeNode}. <br>
-	 * <br>
-	 * The user objects that are attached to the nodes is the
-	 * {@link FileNodeWrapper}, which wrapps the {@link File}-Object. <br>
-	 * <br>
-	 * For ensuring the capability to cancel the work of this recursive method,
-	 * the first position in the integer array 'state' must be set to 1, to keep
-	 * the recursion running. When the states value changes, the methode will
-	 * resolve its recursion and return what it has saved so far.
-	 */
-	public CheckableTreeNode searchDirectory(File directory, UnlinkedPDFFileFilter ff, int[] state, ChangeListener changeListener) {
-		/* Cancellation of the search from outside! */
-		if (state == null || state.length < 1 || state[0] != 1) {
-			return null;
-		}
-		/* Return null if the directory is not valid. */
-		if (directory == null || !directory.exists() || !directory.isDirectory()) {
-			return null;
-		}
-		
-		File[] files = directory.listFiles(ff);
-		CheckableTreeNode root = new CheckableTreeNode(null);
-
-		int filesCount = 0;
-
-		File[] subDirectories = directory.listFiles(directoryFilter);
-		for (int i = 0; i < subDirectories.length; i++) {
-			CheckableTreeNode subRoot = searchDirectory(subDirectories[i], ff, state, changeListener);
-			if (subRoot != null && subRoot.getChildCount() > 0) {
-				filesCount += ((FileNodeWrapper) subRoot.getUserObject()).fileCount;
-				root.add(subRoot);
-			}
-		}
-
-		root.setUserObject(new FileNodeWrapper(directory, files.length + filesCount));
-
-		for (int i = 0; i < files.length; i++) {
-			root.add(new CheckableTreeNode(new FileNodeWrapper(files[i])));
-			if (changeListener != null)
-				changeListener.stateChanged(new ChangeEvent(this));
-		}
-
-		return root;
-	}
-
-}
+package net.sf.jabref.imports;
+
+import java.io.File;
+import java.io.FileFilter;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.FindUnlinkedFilesDialog.CheckableTreeNode;
+import net.sf.jabref.FindUnlinkedFilesDialog.FileNodeWrapper;
+
+/**
+ * Util class for searching files on the filessystem which are not linked to a
+ * provided {@link BibtexDatabase}.
+ * 
+ * @author Nosh&Dan
+ * @version 09.11.2008 | 19:55:20
+ * 
+ */
+public class UnlinkedFilesCrawler {
+
+	/**
+	 * File filter, that accepts directorys only.
+	 */
+	public final FileFilter directoryFilter = new FileFilter() {
+		public boolean accept(File pathname) {
+			if (pathname == null)
+				return false;
+			return pathname.isDirectory();
+		}
+	};
+	private final BibtexDatabase database;
+
+	/**
+	 * CONSTRUCTOR
+	 * 
+	 * @param database
+	 */
+	public UnlinkedFilesCrawler(BibtexDatabase database) {
+		this.database = database;
+	}
+	
+	public CheckableTreeNode searchDirectory(File directory, FileFilter aFileFilter) {
+	    UnlinkedPDFFileFilter ff = new UnlinkedPDFFileFilter(aFileFilter, database);
+		return searchDirectory(directory, ff, new int[] {1}, null);
+	}
+
+	/**
+	 * Searches recursively all files in the specified directory. <br>
+	 * <br>
+	 * All {@link File}s, which match the {@link FileFilter} that comes with the
+	 * {@link EntryFromFileCreatorManager}, are taken into the resulting tree. <br>
+	 * <br>
+	 * The result will be a tree structure of nodes of the type
+	 * {@link CheckableTreeNode}. <br>
+	 * <br>
+	 * The user objects that are attached to the nodes is the
+	 * {@link FileNodeWrapper}, which wrapps the {@link File}-Object. <br>
+	 * <br>
+	 * For ensuring the capability to cancel the work of this recursive method,
+	 * the first position in the integer array 'state' must be set to 1, to keep
+	 * the recursion running. When the states value changes, the methode will
+	 * resolve its recursion and return what it has saved so far.
+	 */
+	public CheckableTreeNode searchDirectory(File directory, UnlinkedPDFFileFilter ff, int[] state, ChangeListener changeListener) {
+		/* Cancellation of the search from outside! */
+		if (state == null || state.length < 1 || state[0] != 1) {
+			return null;
+		}
+		/* Return null if the directory is not valid. */
+		if (directory == null || !directory.exists() || !directory.isDirectory()) {
+			return null;
+		}
+		
+		File[] files = directory.listFiles(ff);
+		CheckableTreeNode root = new CheckableTreeNode(null);
+
+		int filesCount = 0;
+
+		File[] subDirectories = directory.listFiles(directoryFilter);
+		for (int i = 0; i < subDirectories.length; i++) {
+			CheckableTreeNode subRoot = searchDirectory(subDirectories[i], ff, state, changeListener);
+			if (subRoot != null && subRoot.getChildCount() > 0) {
+				filesCount += ((FileNodeWrapper) subRoot.getUserObject()).fileCount;
+				root.add(subRoot);
+			}
+		}
+
+		root.setUserObject(new FileNodeWrapper(directory, files.length + filesCount));
+
+		for (int i = 0; i < files.length; i++) {
+			root.add(new CheckableTreeNode(new FileNodeWrapper(files[i])));
+			if (changeListener != null)
+				changeListener.stateChanged(new ChangeEvent(this));
+		}
+
+		return root;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/imports/UnlinkedPDFFileFilter.java b/src/java/net/sf/jabref/imports/UnlinkedPDFFileFilter.java
index 8b3d1a6..37b514d 100644
--- a/src/java/net/sf/jabref/imports/UnlinkedPDFFileFilter.java
+++ b/src/java/net/sf/jabref/imports/UnlinkedPDFFileFilter.java
@@ -1,36 +1,36 @@
-package net.sf.jabref.imports;
-
-import java.io.File;
-import java.io.FileFilter;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-
-/**
- * {@link FileFilter} implementation, that allows only files which are not
- * linked in any of the {@link BibtexEntry}s of the specified
- * {@link BibtexDatabase}. <br>
- * <br>
- * This {@link FileFilter} sits on top of another {@link FileFilter}
- * -implementation, which it first consults. Only if this major filefilter
- * has accepted a file, this implementation will verify on that file.
- * 
- * @author Nosh&Dan
- * @version 12.11.2008 | 02:00:15
- * 
- */
-public class UnlinkedPDFFileFilter implements FileFilter {
-    private final DatabaseFileLookup lookup;
-    private final FileFilter fileFilter;
-
-    public UnlinkedPDFFileFilter(FileFilter aFileFilter, BibtexDatabase database) {
-        this.fileFilter = aFileFilter;
-        this.lookup = new DatabaseFileLookup(database);
-    }
-
-    public boolean accept(File pathname) {
-        if (fileFilter.accept(pathname))
-            return !lookup.lookupDatabase(pathname);
-        return false;
-    }
-};
+package net.sf.jabref.imports;
+
+import java.io.File;
+import java.io.FileFilter;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+
+/**
+ * {@link FileFilter} implementation, that allows only files which are not
+ * linked in any of the {@link BibtexEntry}s of the specified
+ * {@link BibtexDatabase}. <br>
+ * <br>
+ * This {@link FileFilter} sits on top of another {@link FileFilter}
+ * -implementation, which it first consults. Only if this major filefilter
+ * has accepted a file, this implementation will verify on that file.
+ * 
+ * @author Nosh&Dan
+ * @version 12.11.2008 | 02:00:15
+ * 
+ */
+public class UnlinkedPDFFileFilter implements FileFilter {
+    private final DatabaseFileLookup lookup;
+    private final FileFilter fileFilter;
+
+    public UnlinkedPDFFileFilter(FileFilter aFileFilter, BibtexDatabase database) {
+        this.fileFilter = aFileFilter;
+        this.lookup = new DatabaseFileLookup(database);
+    }
+
+    public boolean accept(File pathname) {
+        if (fileFilter.accept(pathname))
+            return !lookup.lookupDatabase(pathname);
+        return false;
+    }
+};
diff --git a/src/java/net/sf/jabref/imports/ZipFileChooser.java b/src/java/net/sf/jabref/imports/ZipFileChooser.java
index 2bbe529..6af421c 100644
--- a/src/java/net/sf/jabref/imports/ZipFileChooser.java
+++ b/src/java/net/sf/jabref/imports/ZipFileChooser.java
@@ -1,279 +1,279 @@
-/*
- Copyright (C) 2005 Andreas Rudert
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-package net.sf.jabref.imports;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.HeadlessException;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.ListSelectionModel;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableColumnModel;
-
-import net.sf.jabref.FocusRequester;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.Util;
-
-
-/**
- * Dialog to allow users to choose a file contained in a ZIP file.
- * 
- * @author andreas_sf at rudert-home dot de
- */
-class ZipFileChooser extends JDialog {
-
-  /**
-   * Table model for the ZIP archive contents.
-   * 
-   * <p>Contains one row for each entry.
-   * Does not contain rows for directory entries.</p>
-   * 
-   * <p>The columns contain information about ZIIP file entries:
-   * <ol><li>
-   *   name {@link String}
-   * </li><li>
-   *   time of last modification {@link Date}
-   * </li><li>
-   *   size (uncompressed) {@link Long}
-   * </li></ol></p>
-   */
-  class ZipFileChooserTableModel extends AbstractTableModel {
-    
-    private String[] columnNames = new String[] {
-      Globals.lang("Name"),
-      Globals.lang("Last modified"),
-      Globals.lang("Size")
-    };
-    private ZipEntry[] rows = null;
-    private ZipFile zipFile = null;
-    
-    ZipFileChooserTableModel(ZipFile zipFile, ZipEntry[] rows) {
-      super();
-      this.rows = rows;
-      this.zipFile = zipFile;        
-    }
-    
-    /*
-     *  (non-Javadoc)
-     * @see javax.swing.table.TableModel#getColumnCount()
-     */
-    public int getColumnCount() {
-      return columnNames.length;
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see javax.swing.table.TableModel#getRowCount()
-     */
-    public int getRowCount() {
-      return this.rows.length;
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see javax.swing.table.TableModel#getColumnName(int)
-     */
-    public String getColumnName(int col) {
-      return columnNames[col];
-    }
-
-    /**
-     * Zip-File entry at the given row index.
-     * 
-     * @param rowIndex  row index
-     * @return  Zip file entry
-     */
-    public ZipEntry getZipEntry(int rowIndex) {
-      return this.rows[rowIndex];
-    }
-    
-    /**
-     * Zip file which contains all entries of this model.
-     * 
-     * @return zip file
-     */
-    public ZipFile getZipFile() {
-      return this.zipFile;
-    }
-    
-    /*
-     *  (non-Javadoc)
-     * @see javax.swing.table.TableModel#getValueAt(int, int)
-     */
-    public Object getValueAt(int rowIndex, int columnIndex) {
-      Object value = null;
-      ZipEntry entry = getZipEntry(rowIndex);
-      if (columnIndex == 0) {
-        value = entry.getName();
-      } else if (columnIndex == 1) {
-        value = SimpleDateFormat.getDateTimeInstance().format(new Date(entry.getTime()));
-      } else if (columnIndex == 2) {
-        value = new Long(entry.getSize());
-      }
-      return value;
-    }
-  }
-
-  private JButton okButton = new JButton(Globals.lang("Ok"));
-  private JButton cancelButton = new JButton(Globals.lang("Cancel"));
-
-  /** table of Zip entries */
-  private JTable table;
-  /** shortcut to preferences */
-  private JabRefPreferences prefs = Globals.prefs;
-  /** this */
-  private ZipFileChooser zipFileChooser;
-  /** import customization dialog, owner of this dialog */
-  private ImportCustomizationDialog importCustomizationDialog;
-  
-  /*
-   *  (non-Javadoc)
-   * @see java.awt.Component#getSize()
-   */
-  public Dimension getSize() {
-    return new Dimension(400, 300);
-  }
-  
-  /**
-   * Entries that can be selected with this dialog.
-   * 
-   * @param zipFile  Zip-File
-   * @return  entries that can be selected
-   */
-  private ZipEntry[] getSelectableZipEntries(ZipFile zipFile) {
-    List<ZipEntry> entries = new ArrayList<ZipEntry>();
-    Enumeration<? extends ZipEntry> e = zipFile.entries();
-    while (e.hasMoreElements()) {
-      ZipEntry entry = e.nextElement();
-      if (!entry.isDirectory() && entry.getName().endsWith(".class")) {
-        entries.add(entry); 
-      }
-    }
-    return entries.toArray(new ZipEntry[]{});
-  }
-  
-  /**
-   * New Zip file chooser.
-   * 
-   * @param owner  Owner of the file chooser
-   * @param zipFile  Zip-Fle to choose from, must be readable
-   * @throws HeadlessException
-   */
-  public ZipFileChooser(ImportCustomizationDialog owner, ZipFile zipFile) throws HeadlessException {
-    super(owner, Globals.lang("Select file from ZIP-archive"), false);
-    
-    this.importCustomizationDialog = owner;
-    this.zipFileChooser = this;
-    
-    // cancel: no entry is selected
-    cancelButton.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        dispose();
-      }
-    });
-
-    // ok: get selected class and check if it is instantiable as an importer
-    okButton.addActionListener(new ActionListener() {
-     public void actionPerformed(ActionEvent e) {
-       int row = table.getSelectedRow();
-       if (row != -1) {
-         ZipFileChooserTableModel model = (ZipFileChooserTableModel)table.getModel();
-         ZipEntry tempZipEntry = model.getZipEntry(row);
-         CustomImportList.Importer importer = prefs.customImports.new Importer();
-         importer.setBasePath(model.getZipFile().getName());
-         String className = tempZipEntry.getName().substring(0, tempZipEntry.getName().lastIndexOf('.')).replaceAll("/", ".");
-         importer.setClassName(className);
-         try {
-           ImportFormat importFormat = importer.getInstance();
-           importer.setName(importFormat.getFormatName());
-           importer.setCliId(importFormat.getCLIId());
-           importCustomizationDialog.addOrReplaceImporter(importer);
-           dispose();
-         } catch (Exception exc) {           
-           exc.printStackTrace();
-           JOptionPane.showMessageDialog(zipFileChooser, Globals.lang("Could not instantiate %0 %1", importer.getName() + ":\n", exc.getMessage()));
-         }
-       } else {
-         JOptionPane.showMessageDialog(zipFileChooser, Globals.lang("Please select an importer."));
-       }
-     }
-    });
-    
-
-    ZipFileChooserTableModel tableModel = new ZipFileChooserTableModel( zipFile, getSelectableZipEntries(zipFile) );
-    table = new JTable(tableModel);
-    TableColumnModel cm = table.getColumnModel();
-    cm.getColumn(0).setPreferredWidth(200);
-    cm.getColumn(1).setPreferredWidth(150);
-    cm.getColumn(2).setPreferredWidth(100);
-    JScrollPane sp = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-                                     JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-    table.setPreferredScrollableViewportSize(new Dimension(500, 150));
-    if (table.getRowCount() > 0) {
-      table.setRowSelectionInterval(0, 0);
-    }
-
-    // Key bindings:
-    JPanel mainPanel = new JPanel();
-    //ActionMap am = mainPanel.getActionMap();
-    //InputMap im = mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-    //im.put(prefs.getKey("Close dialog"), "close");
-    //am.put("close", closeAction);
-    mainPanel.setLayout(new BorderLayout());
-    mainPanel.add(sp, BorderLayout.CENTER);
-
-    JPanel optionsPanel = new JPanel();
-    optionsPanel.add(okButton);
-    optionsPanel.add(cancelButton);
-    optionsPanel.add(Box.createHorizontalStrut(5));
-
-    getContentPane().add(mainPanel, BorderLayout.CENTER);
-    getContentPane().add(optionsPanel, BorderLayout.SOUTH);
-    this.setSize(getSize());
-    pack();
-    Util.placeDialog(this, owner);
-    new FocusRequester(table);
-  }
-}
+/*
+ Copyright (C) 2005 Andreas Rudert
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+package net.sf.jabref.imports;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.HeadlessException;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableColumnModel;
+
+import net.sf.jabref.FocusRequester;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.Util;
+
+
+/**
+ * Dialog to allow users to choose a file contained in a ZIP file.
+ * 
+ * @author andreas_sf at rudert-home dot de
+ */
+class ZipFileChooser extends JDialog {
+
+  /**
+   * Table model for the ZIP archive contents.
+   * 
+   * <p>Contains one row for each entry.
+   * Does not contain rows for directory entries.</p>
+   * 
+   * <p>The columns contain information about ZIIP file entries:
+   * <ol><li>
+   *   name {@link String}
+   * </li><li>
+   *   time of last modification {@link Date}
+   * </li><li>
+   *   size (uncompressed) {@link Long}
+   * </li></ol></p>
+   */
+  class ZipFileChooserTableModel extends AbstractTableModel {
+    
+    private String[] columnNames = new String[] {
+      Globals.lang("Name"),
+      Globals.lang("Last modified"),
+      Globals.lang("Size")
+    };
+    private ZipEntry[] rows = null;
+    private ZipFile zipFile = null;
+    
+    ZipFileChooserTableModel(ZipFile zipFile, ZipEntry[] rows) {
+      super();
+      this.rows = rows;
+      this.zipFile = zipFile;        
+    }
+    
+    /*
+     *  (non-Javadoc)
+     * @see javax.swing.table.TableModel#getColumnCount()
+     */
+    public int getColumnCount() {
+      return columnNames.length;
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see javax.swing.table.TableModel#getRowCount()
+     */
+    public int getRowCount() {
+      return this.rows.length;
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see javax.swing.table.TableModel#getColumnName(int)
+     */
+    public String getColumnName(int col) {
+      return columnNames[col];
+    }
+
+    /**
+     * Zip-File entry at the given row index.
+     * 
+     * @param rowIndex  row index
+     * @return  Zip file entry
+     */
+    public ZipEntry getZipEntry(int rowIndex) {
+      return this.rows[rowIndex];
+    }
+    
+    /**
+     * Zip file which contains all entries of this model.
+     * 
+     * @return zip file
+     */
+    public ZipFile getZipFile() {
+      return this.zipFile;
+    }
+    
+    /*
+     *  (non-Javadoc)
+     * @see javax.swing.table.TableModel#getValueAt(int, int)
+     */
+    public Object getValueAt(int rowIndex, int columnIndex) {
+      Object value = null;
+      ZipEntry entry = getZipEntry(rowIndex);
+      if (columnIndex == 0) {
+        value = entry.getName();
+      } else if (columnIndex == 1) {
+        value = SimpleDateFormat.getDateTimeInstance().format(new Date(entry.getTime()));
+      } else if (columnIndex == 2) {
+        value = new Long(entry.getSize());
+      }
+      return value;
+    }
+  }
+
+  private JButton okButton = new JButton(Globals.lang("Ok"));
+  private JButton cancelButton = new JButton(Globals.lang("Cancel"));
+
+  /** table of Zip entries */
+  private JTable table;
+  /** shortcut to preferences */
+  private JabRefPreferences prefs = Globals.prefs;
+  /** this */
+  private ZipFileChooser zipFileChooser;
+  /** import customization dialog, owner of this dialog */
+  private ImportCustomizationDialog importCustomizationDialog;
+  
+  /*
+   *  (non-Javadoc)
+   * @see java.awt.Component#getSize()
+   */
+  public Dimension getSize() {
+    return new Dimension(400, 300);
+  }
+  
+  /**
+   * Entries that can be selected with this dialog.
+   * 
+   * @param zipFile  Zip-File
+   * @return  entries that can be selected
+   */
+  private ZipEntry[] getSelectableZipEntries(ZipFile zipFile) {
+    List<ZipEntry> entries = new ArrayList<ZipEntry>();
+    Enumeration<? extends ZipEntry> e = zipFile.entries();
+    while (e.hasMoreElements()) {
+      ZipEntry entry = e.nextElement();
+      if (!entry.isDirectory() && entry.getName().endsWith(".class")) {
+        entries.add(entry); 
+      }
+    }
+    return entries.toArray(new ZipEntry[]{});
+  }
+  
+  /**
+   * New Zip file chooser.
+   * 
+   * @param owner  Owner of the file chooser
+   * @param zipFile  Zip-Fle to choose from, must be readable
+   * @throws HeadlessException
+   */
+  public ZipFileChooser(ImportCustomizationDialog owner, ZipFile zipFile) throws HeadlessException {
+    super(owner, Globals.lang("Select file from ZIP-archive"), false);
+    
+    this.importCustomizationDialog = owner;
+    this.zipFileChooser = this;
+    
+    // cancel: no entry is selected
+    cancelButton.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        dispose();
+      }
+    });
+
+    // ok: get selected class and check if it is instantiable as an importer
+    okButton.addActionListener(new ActionListener() {
+     public void actionPerformed(ActionEvent e) {
+       int row = table.getSelectedRow();
+       if (row != -1) {
+         ZipFileChooserTableModel model = (ZipFileChooserTableModel)table.getModel();
+         ZipEntry tempZipEntry = model.getZipEntry(row);
+         CustomImportList.Importer importer = prefs.customImports.new Importer();
+         importer.setBasePath(model.getZipFile().getName());
+         String className = tempZipEntry.getName().substring(0, tempZipEntry.getName().lastIndexOf('.')).replaceAll("/", ".");
+         importer.setClassName(className);
+         try {
+           ImportFormat importFormat = importer.getInstance();
+           importer.setName(importFormat.getFormatName());
+           importer.setCliId(importFormat.getCLIId());
+           importCustomizationDialog.addOrReplaceImporter(importer);
+           dispose();
+         } catch (Exception exc) {           
+           exc.printStackTrace();
+           JOptionPane.showMessageDialog(zipFileChooser, Globals.lang("Could not instantiate %0 %1", importer.getName() + ":\n", exc.getMessage()));
+         }
+       } else {
+         JOptionPane.showMessageDialog(zipFileChooser, Globals.lang("Please select an importer."));
+       }
+     }
+    });
+    
+
+    ZipFileChooserTableModel tableModel = new ZipFileChooserTableModel( zipFile, getSelectableZipEntries(zipFile) );
+    table = new JTable(tableModel);
+    TableColumnModel cm = table.getColumnModel();
+    cm.getColumn(0).setPreferredWidth(200);
+    cm.getColumn(1).setPreferredWidth(150);
+    cm.getColumn(2).setPreferredWidth(100);
+    JScrollPane sp = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+                                     JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+    table.setPreferredScrollableViewportSize(new Dimension(500, 150));
+    if (table.getRowCount() > 0) {
+      table.setRowSelectionInterval(0, 0);
+    }
+
+    // Key bindings:
+    JPanel mainPanel = new JPanel();
+    //ActionMap am = mainPanel.getActionMap();
+    //InputMap im = mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+    //im.put(prefs.getKey("Close dialog"), "close");
+    //am.put("close", closeAction);
+    mainPanel.setLayout(new BorderLayout());
+    mainPanel.add(sp, BorderLayout.CENTER);
+
+    JPanel optionsPanel = new JPanel();
+    optionsPanel.add(okButton);
+    optionsPanel.add(cancelButton);
+    optionsPanel.add(Box.createHorizontalStrut(5));
+
+    getContentPane().add(mainPanel, BorderLayout.CENTER);
+    getContentPane().add(optionsPanel, BorderLayout.SOUTH);
+    this.setSize(getSize());
+    pack();
+    Util.placeDialog(this, owner);
+    new FocusRequester(table);
+  }
+}
diff --git a/src/java/net/sf/jabref/imports/fetcher/ISBNtoBibTeXFetcher.java b/src/java/net/sf/jabref/imports/fetcher/ISBNtoBibTeXFetcher.java
index 269b7bd..f4dd1ce 100644
--- a/src/java/net/sf/jabref/imports/fetcher/ISBNtoBibTeXFetcher.java
+++ b/src/java/net/sf/jabref/imports/fetcher/ISBNtoBibTeXFetcher.java
@@ -1,142 +1,142 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package net.sf.jabref.imports.fetcher;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLEncoder;
-import java.util.Scanner;
-
-import javax.swing.JPanel;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.OutputPrinter;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.imports.CaseKeeper;
-import net.sf.jabref.imports.EntryFetcher;
-import net.sf.jabref.imports.ImportInspector;
-
-/**
- * This class uses Manas Tungare's ISBN to BibTeX Converter to convert an ISBN to a BibTeX entry <br />
- * The online version of the converter is available at http://manas.tungare.name/software/isbn-to-bibtex/
- */
-public class ISBNtoBibTeXFetcher implements EntryFetcher {
-	
-	private static final String URL_PATTERN = "http://manas.tungare.name/software/isbn-to-bibtex/isbn-service?isbn=%s"; 
-        final CaseKeeper caseKeeper = new CaseKeeper();
-   
-	@Override
-    public void stopFetching() {
-		// nothing needed as the fetching is a single HTTP GET
-    }
-
-	@Override
-    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
-		String q;
-		try {
-	        q = URLEncoder.encode(query, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
-        	// this should never happen
-        	status.setStatus(Globals.lang("Error"));
-	        e.printStackTrace();
-	        return false;
-        }
-		
-        String urlString = String.format(URL_PATTERN, q);
-
-        // Send the request
-        URL url;
-        URLConnection conn;
-        try {
-            url = new URL(urlString);
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-            return false;
-        } catch (IOException e) {
-            e.printStackTrace();
-            return false;
-        }
-
-        InputStream source;
-        try {
-	        source = url.openStream();
-        } catch (IOException e) {
-	        e.printStackTrace();
-	        return false;
-        }
-        
-        String bibtexString = new Scanner(source).useDelimiter("\\A").next();
-        if (bibtexString.startsWith("@comment")) {
-        	// an error occured
-        	// the error is nested in @comment{...}
-        	String errorMsg = bibtexString.substring("@comment{".length());
-        	errorMsg = errorMsg.substring(0, errorMsg.length()-1);
-        	status.showMessage(errorMsg); // showMessage does not work -> NPE
-        	return false;
-        }
-        
-        BibtexEntry entry = BibtexParser.singleFromString(bibtexString);
-        if(entry != null)  {
-            // Optionally add curly brackets around key words to keep the case
-            String title = (String)entry.getField("title");
-            if (title != null) {
-                if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
-                    title = caseKeeper.format(title);
-                }
-                entry.setField("title", title);
-            }
-            
-            inspector.addEntry(entry);
-	    return true;
-        } else {
-            return false;
-        }
-    }
-
-	@Override
-    public String getTitle() {
-	    return "ISBN to BibTeX";
-    }
-
-	@Override
-    public String getKeyName() {
-	    return "ISBNtoBibTeX";
-    }
-
-	@Override
-    public URL getIcon() {
-		// no special icon for this fetcher available.
-		// Therefore, we return some kind of default icon
-	    return GUIGlobals.getIconUrl("www");
-    }
-
-	@Override
-    public String getHelpPage() {
-	    return "ISBNtoBibTeXHelp.html";
-    }
-
-	@Override
-    public JPanel getOptionsPanel() {
-		// no additional options available
-	    return null;
-    }
-
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package net.sf.jabref.imports.fetcher;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.util.Scanner;
+
+import javax.swing.JPanel;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.OutputPrinter;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.imports.CaseKeeper;
+import net.sf.jabref.imports.EntryFetcher;
+import net.sf.jabref.imports.ImportInspector;
+
+/**
+ * This class uses Manas Tungare's ISBN to BibTeX Converter to convert an ISBN to a BibTeX entry <br />
+ * The online version of the converter is available at http://manas.tungare.name/software/isbn-to-bibtex/
+ */
+public class ISBNtoBibTeXFetcher implements EntryFetcher {
+	
+	private static final String URL_PATTERN = "http://manas.tungare.name/software/isbn-to-bibtex/isbn-service?isbn=%s"; 
+        final CaseKeeper caseKeeper = new CaseKeeper();
+   
+	@Override
+    public void stopFetching() {
+		// nothing needed as the fetching is a single HTTP GET
+    }
+
+	@Override
+    public boolean processQuery(String query, ImportInspector inspector, OutputPrinter status) {
+		String q;
+		try {
+	        q = URLEncoder.encode(query, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+        	// this should never happen
+        	status.setStatus(Globals.lang("Error"));
+	        e.printStackTrace();
+	        return false;
+        }
+		
+        String urlString = String.format(URL_PATTERN, q);
+
+        // Send the request
+        URL url;
+        URLConnection conn;
+        try {
+            url = new URL(urlString);
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+            return false;
+        } catch (IOException e) {
+            e.printStackTrace();
+            return false;
+        }
+
+        InputStream source;
+        try {
+	        source = url.openStream();
+        } catch (IOException e) {
+	        e.printStackTrace();
+	        return false;
+        }
+        
+        String bibtexString = new Scanner(source).useDelimiter("\\A").next();
+        if (bibtexString.startsWith("@comment")) {
+        	// an error occured
+        	// the error is nested in @comment{...}
+        	String errorMsg = bibtexString.substring("@comment{".length());
+        	errorMsg = errorMsg.substring(0, errorMsg.length()-1);
+        	status.showMessage(errorMsg); // showMessage does not work -> NPE
+        	return false;
+        }
+        
+        BibtexEntry entry = BibtexParser.singleFromString(bibtexString);
+        if(entry != null)  {
+            // Optionally add curly brackets around key words to keep the case
+            String title = (String)entry.getField("title");
+            if (title != null) {
+                if (Globals.prefs.getBoolean("useCaseKeeperOnSearch")) {
+                    title = caseKeeper.format(title);
+                }
+                entry.setField("title", title);
+            }
+            
+            inspector.addEntry(entry);
+	    return true;
+        } else {
+            return false;
+        }
+    }
+
+	@Override
+    public String getTitle() {
+	    return "ISBN to BibTeX";
+    }
+
+	@Override
+    public String getKeyName() {
+	    return "ISBNtoBibTeX";
+    }
+
+	@Override
+    public URL getIcon() {
+		// no special icon for this fetcher available.
+		// Therefore, we return some kind of default icon
+	    return GUIGlobals.getIconUrl("www");
+    }
+
+	@Override
+    public String getHelpPage() {
+	    return "ISBNtoBibTeXHelp.html";
+    }
+
+	@Override
+    public JPanel getOptionsPanel() {
+		// no additional options available
+	    return null;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/imports/fetcher/package-info.java b/src/java/net/sf/jabref/imports/fetcher/package-info.java
index 5015f9e..d3db3e6 100644
--- a/src/java/net/sf/jabref/imports/fetcher/package-info.java
+++ b/src/java/net/sf/jabref/imports/fetcher/package-info.java
@@ -1,4 +1,4 @@
-/**
- * This package will contain all entry fetchers derived from net.sf.jabref.imports.Fetcher
- */
+/**
+ * This package will contain all entry fetchers derived from net.sf.jabref.imports.Fetcher
+ */
 package net.sf.jabref.imports.fetcher;
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/journals/AbbreviateAction.java b/src/java/net/sf/jabref/journals/AbbreviateAction.java
index 7f84fe3..51a3eb0 100644
--- a/src/java/net/sf/jabref/journals/AbbreviateAction.java
+++ b/src/java/net/sf/jabref/journals/AbbreviateAction.java
@@ -1,73 +1,73 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.journals;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.AbstractWorker;
-import net.sf.jabref.undo.NamedCompound;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Sep 17, 2005
- * Time: 12:48:23 AM
- * To browseOld this template use File | Settings | File Templates.
- */
-public class AbbreviateAction extends AbstractWorker {
-    BasePanel panel;
-    String message = "";
-    boolean iso;
-
-    public AbbreviateAction(BasePanel panel, boolean iso) {
-        this.panel = panel;
-        this.iso = iso;
-    }
-
-
-    public void init() {
-        //  new FieldWeightDialog(frame).setVisible(true);
-        panel.output("Abbreviating...");
-    }
-
-    public void run() {
-        //net.sf.jabref.journals.JournalList.downloadJournalList(frame);
-
-
-        BibtexEntry[] entries = panel.getSelectedEntries();
-        if (entries == null)
-            return;
-        NamedCompound ce = new NamedCompound("Abbreviate journal names");
-        int count = 0;
-        for (int i = 0; i < entries.length; i++) {
-            if (Globals.journalAbbrev.abbreviate(panel.database(), entries[i], "journal", ce, iso))
-                count++;
-        }
-        if (count > 0) {
-            ce.end();
-            panel.undoManager.addEdit(ce);
-            panel.markBaseChanged();
-            message = Globals.lang("Abbreviated %0 journal names.", String.valueOf(count));
-        } else {
-            message = Globals.lang("No journal names could be abbreviated.");
-        }
-    }
-
-    public void update() {
-        panel.output(message);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.journals;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.AbstractWorker;
+import net.sf.jabref.undo.NamedCompound;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Sep 17, 2005
+ * Time: 12:48:23 AM
+ * To browseOld this template use File | Settings | File Templates.
+ */
+public class AbbreviateAction extends AbstractWorker {
+    BasePanel panel;
+    String message = "";
+    boolean iso;
+
+    public AbbreviateAction(BasePanel panel, boolean iso) {
+        this.panel = panel;
+        this.iso = iso;
+    }
+
+
+    public void init() {
+        //  new FieldWeightDialog(frame).setVisible(true);
+        panel.output("Abbreviating...");
+    }
+
+    public void run() {
+        //net.sf.jabref.journals.JournalList.downloadJournalList(frame);
+
+
+        BibtexEntry[] entries = panel.getSelectedEntries();
+        if (entries == null)
+            return;
+        NamedCompound ce = new NamedCompound("Abbreviate journal names");
+        int count = 0;
+        for (int i = 0; i < entries.length; i++) {
+            if (Globals.journalAbbrev.abbreviate(panel.database(), entries[i], "journal", ce, iso))
+                count++;
+        }
+        if (count > 0) {
+            ce.end();
+            panel.undoManager.addEdit(ce);
+            panel.markBaseChanged();
+            message = Globals.lang("Abbreviated %0 journal names.", String.valueOf(count));
+        } else {
+            message = Globals.lang("No journal names could be abbreviated.");
+        }
+    }
+
+    public void update() {
+        panel.output(message);
+    }
+}
diff --git a/src/java/net/sf/jabref/journals/JournalAbbreviations.java b/src/java/net/sf/jabref/journals/JournalAbbreviations.java
index d8f4979..71d5fb9 100644
--- a/src/java/net/sf/jabref/journals/JournalAbbreviations.java
+++ b/src/java/net/sf/jabref/journals/JournalAbbreviations.java
@@ -1,333 +1,333 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.journals;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.*;
-import java.net.URL;
-import java.util.*;
-
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.table.DefaultTableModel;
-import javax.swing.table.TableModel;
-import javax.swing.undo.CompoundEdit;
-import javax.swing.undo.UndoManager;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.UndoableFieldChange;
-import net.sf.jabref.util.CaseChanger;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Sep 16, 2005
- * Time: 10:49:08 PM
- * To browseOld this template use File | Settings | File Templates.
- */
-public class JournalAbbreviations {
-
-    static String TOOLTIPTEXT = "<HTML>"+Globals.lang("Switches between full and abbreviated journal name "
-        +"if the journal name is known.")
-        +"<BR>"+Globals.lang("To set up, go to <B>Tools -> Manage journal abbreviations</B>")+".</HTML>";
-    TreeMap<String, String> fullNameKeyed = new TreeMap<String, String>();
-    HashMap<String, String> abbrNameKeyed = new HashMap<String, String>();
-    HashMap<String, String> abbrNoDotsToAbbr = new HashMap<String, String>();
-    TreeMap<String, String> all = new TreeMap<String, String>();
-
-    public JournalAbbreviations() {
-        
-    }
-
-    public JournalAbbreviations(String resource) {
-        readJournalList(resource);
-    }
-
-    public JournalAbbreviations(File file) throws FileNotFoundException {
-        readJournalList(file);
-    }
-
-    /**
-     * Get an iterator for the known journals in alphabetical order.
-     * @return Iterator for journal full names
-     */
-    public Iterator<String> fullNameIterator() {
-        return fullNameKeyed.keySet().iterator();
-    }
-
-    public boolean isKnownName(String journalName) {
-        String s = journalName.toLowerCase();
-        return ((fullNameKeyed.get(s) != null) || (abbrNameKeyed.get(s) != null) || (abbrNoDotsToAbbr.get(s) != null));
-    }
-
-    public boolean isAbbreviatedName(String journalName) {
-        String s = journalName.toLowerCase();
-        return ((abbrNameKeyed.get(s) != null) || (abbrNoDotsToAbbr.get(s) != null));
-    }
-
-    public String dotsToNodots(String name) {
-        return name.replaceAll("\\.", " ").replaceAll("  ", " ").trim();
-    }
-
-    /**
-     * Attempts to get the abbreviated name of the journal given. Returns null if no
-     * abbreviated name is known.
-     * @param journalName The journal name to abbreviate.
-     * @param withDots True if the abbreviation should have dots.
-     * if only the first character should be.
-     * @return The abbreviated name, or null if it couldn't be found.
-     */
-    public String getAbbreviatedName(String journalName, boolean withDots) {
-        String s = journalName.toLowerCase();
-        String abbr;
-        if (fullNameKeyed.containsKey(s)) {
-            abbr = fullNameKeyed.get(s);
-        }
-        else if (abbrNameKeyed.containsKey(s)) {
-            abbr = journalName;
-        }
-        else if (abbrNoDotsToAbbr.containsKey(s)) {
-            abbr = abbrNoDotsToAbbr.get(s);
-        } else
-            return null;
-
-        if (!withDots) {
-            abbr = dotsToNodots(abbr);
-        }
-
-        return abbr;
-    }
-
-    /**
-     * Attempts to get the full name of the abbreviation given. Returns null if no
-     * full name is known.
-     * @param journalName The abbreviation to resolve.
-     * @return The full name, or null if it couldn't be found.
-     */
-    public String getFullName(String journalName) {
-        // Normalize name first:
-        String s = getAbbreviatedName(journalName, true);
-	if (s != null) 
-	    s = s.toLowerCase();
-	else
-	    return null;
-        Object o = abbrNameKeyed.get(s);
-        if (o == null) {
-            if (fullNameKeyed.containsKey(s))
-                o = s;
-            else
-                return null;
-        }
-        s = (String)o;
-        return s;//caseChanger.changeCase(s, CaseChanger.UPPER_EACH_FIRST);
-    }
-
-    public void readJournalList(String resourceFileName) {
-        URL url = JournalAbbreviations.class.getResource(resourceFileName);
-        try {
-            readJournalList(new InputStreamReader(url.openStream()));
-        } catch (FileNotFoundException e) {
-            e.printStackTrace();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public void readJournalList(File file) throws FileNotFoundException {
-        readJournalList(new FileReader(file));
-    }
-
-    /**
-     * Read the given file, which should contain a list of journal names and their
-     * abbreviations. Each line should be formatted as: "Full Journal Name=Abbr. Journal Name"
-     * @param in
-     */
-    public void readJournalList(Reader in) throws FileNotFoundException {
-        BufferedReader reader = new BufferedReader(in);
-        try {
-            String line;
-            while ((line = reader.readLine()) != null) {
-                //System.out.println(line);
-                if (line.startsWith("#"))
-                    continue;
-                String[] parts = line.split("=");
-                if (parts.length == 2) {
-                    String fullName = parts[0].trim();
-                    String fullNameLC = fullName.toLowerCase();
-                    String abbrName = parts[1].trim();
-                    if (abbrName.indexOf(';') >= 0) {
-                        String[] restParts = abbrName.split(";");
-                        abbrName = restParts[0];
-                    }
-                    String abbrNameLC = abbrName.toLowerCase();
-                    String abbrNoDots = dotsToNodots(abbrName);
-                    String abbrNoDotsLC = abbrNoDots.toLowerCase();
-                    //System.out.println(abbrNoDots);
-                    if ((fullName.length()>0) && (abbrName.length()>0)) {
-                        //System.out.println("'"+fullName+"' : '"+abbrNoDots+"'");
-                        fullNameKeyed.put(fullNameLC, abbrName);
-                        abbrNameKeyed.put(abbrNameLC, fullName);
-                        abbrNoDotsToAbbr.put(abbrNoDotsLC, abbrName);
-                        all.put(fullName, abbrName);
-                    }
-                }
-            }
-
-        } catch (IOException ex) {
-            ex.printStackTrace();
-        } finally {
-            try {
-                reader.close();
-            } catch (IOException ex2) {
-                ex2.printStackTrace();
-            }
-        }
-    }
-
-    /**
-     * Abbreviate the journal name of the given entry.
-     * @param database The database the entry belongs to, or null if no database.
-     * @param entry The entry to be treated.
-     * @param fieldName The field name (e.g. "journal")
-     * @param ce If the entry is changed, add an edit to this compound.
-     * @param withDots True if the abbreviations should have dots.
-     * @return true if the entry was changed, false otherwise.
-     */
-    public boolean abbreviate(BibtexDatabase database, BibtexEntry entry,
-                              String fieldName, CompoundEdit ce, boolean withDots) {
-        String text = entry.getField(fieldName);
-        if (text == null)
-            return false;
-        String origText = text;
-        if (database != null)
-            text = database.resolveForStrings(text);
-        if (isKnownName(text) && !isAbbreviatedName(text)) {
-            String newText = getAbbreviatedName(text, withDots);
-            if (newText == null)
-                return false;
-            entry.setField(fieldName, newText);
-            ce.addEdit(new UndoableFieldChange(entry, fieldName, origText, newText));
-            return true;
-        } else {
-            String unabbr = getFullName(text);
-            if (unabbr != null) {
-                String newText = getAbbreviatedName(unabbr, withDots);
-                if (newText == null)
-                    return false;
-                entry.setField(fieldName, newText);
-                ce.addEdit(new UndoableFieldChange(entry, fieldName, origText, newText));
-                return true;
-            } else
-                return false;
-        }
-    }
-
-    /**
-     * Unabbreviate the journal name of the given entry.
-     * @param entry The entry to be treated.
-     * @param fieldName The field name (e.g. "journal")
-     * @param ce If the entry is changed, add an edit to this compound.
-     * @return true if the entry was changed, false otherwise.
-     */
-    public boolean unabbreviate(BibtexDatabase database, BibtexEntry entry,
-                                String fieldName, CompoundEdit ce) {
-        String text = entry.getField(fieldName);
-        if (text == null)
-            return false;
-        String origText = text;
-        if (database != null)
-            text = database.resolveForStrings(text);
-        if (isKnownName(text) && isAbbreviatedName(text)) {
-            String newText = getFullName(text);
-            if (newText == null)
-                return false;
-            entry.setField(fieldName, newText);
-            ce.addEdit(new UndoableFieldChange(entry, fieldName, origText, newText));
-            return true;
-        } else
-            return false;
-    }
-
-
-    public Map<String, String> getJournals() {
-        return Collections.unmodifiableMap(all);
-    }
-
-    /**
-     * Create a control panel for the entry editor's journal field, to toggle
-     * abbreviated/full journal name
-     * @param editor The FieldEditor for the journal field.
-     * @return The control panel for the entry editor.
-     */
-    public static JComponent getNameSwitcher(final EntryEditor entryEditor, final FieldEditor editor,
-                                      final UndoManager undoManager) {
-        JButton button = new JButton(Globals.lang("Toggle abbreviation"));
-        button.setToolTipText(TOOLTIPTEXT);
-        button.addActionListener(new ActionListener() {
-            boolean withDots = true;
-            public void actionPerformed(ActionEvent actionEvent) {
-                String text = editor.getText();
-                if (Globals.journalAbbrev.isKnownName(text)) {
-                    String s;
-                    if (Globals.journalAbbrev.isAbbreviatedName(text)) {
-                        //System.out.println(withDots);
-                        if (!withDots) {
-                            s = Globals.journalAbbrev.getAbbreviatedName(text, false);
-                            withDots = true;
-                        } else {
-                            s = Globals.journalAbbrev.getFullName(text);
-                        }
-                    }
-                    else {
-                        s = Globals.journalAbbrev.getAbbreviatedName(text, true);
-                        withDots = false;
-                    }
-
-                    if (s != null) {
-                        editor.setText(s);
-                        entryEditor.storeFieldAction.actionPerformed(new ActionEvent(editor, 0, ""));
-                        undoManager.addEdit(new UndoableFieldChange(entryEditor.getEntry(), editor.getFieldName(),
-                                text, s));
-                    }
-                }
-            }
-        });
-
-        return button;
-    }
-
-    public TableModel getTableModel() {
-        Object[][] cells = new Object[fullNameKeyed.size()][2];
-        int row = 0;
-        for (Iterator<String> i=fullNameIterator(); i.hasNext();) {
-            String name = i.next();
-            cells[row][0] = getFullName(name);
-            cells[row][1] = getAbbreviatedName(name, true);
-            row++;
-        }
-        DefaultTableModel tableModel = new DefaultTableModel(cells, new Object[] {Globals.lang("Full name"),
-            Globals.lang("Abbreviation")}) {
-
-            public boolean isCellEditable(int row, int column) {
-                return false;
-            }
-        };
-
-        return tableModel;
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.journals;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.*;
+import java.net.URL;
+import java.util.*;
+
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableModel;
+import javax.swing.undo.CompoundEdit;
+import javax.swing.undo.UndoManager;
+
+import net.sf.jabref.*;
+import net.sf.jabref.undo.UndoableFieldChange;
+import net.sf.jabref.util.CaseChanger;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Sep 16, 2005
+ * Time: 10:49:08 PM
+ * To browseOld this template use File | Settings | File Templates.
+ */
+public class JournalAbbreviations {
+
+    static String TOOLTIPTEXT = "<HTML>"+Globals.lang("Switches between full and abbreviated journal name "
+        +"if the journal name is known.")
+        +"<BR>"+Globals.lang("To set up, go to <B>Tools -> Manage journal abbreviations</B>")+".</HTML>";
+    TreeMap<String, String> fullNameKeyed = new TreeMap<String, String>();
+    HashMap<String, String> abbrNameKeyed = new HashMap<String, String>();
+    HashMap<String, String> abbrNoDotsToAbbr = new HashMap<String, String>();
+    TreeMap<String, String> all = new TreeMap<String, String>();
+
+    public JournalAbbreviations() {
+        
+    }
+
+    public JournalAbbreviations(String resource) {
+        readJournalList(resource);
+    }
+
+    public JournalAbbreviations(File file) throws FileNotFoundException {
+        readJournalList(file);
+    }
+
+    /**
+     * Get an iterator for the known journals in alphabetical order.
+     * @return Iterator for journal full names
+     */
+    public Iterator<String> fullNameIterator() {
+        return fullNameKeyed.keySet().iterator();
+    }
+
+    public boolean isKnownName(String journalName) {
+        String s = journalName.toLowerCase();
+        return ((fullNameKeyed.get(s) != null) || (abbrNameKeyed.get(s) != null) || (abbrNoDotsToAbbr.get(s) != null));
+    }
+
+    public boolean isAbbreviatedName(String journalName) {
+        String s = journalName.toLowerCase();
+        return ((abbrNameKeyed.get(s) != null) || (abbrNoDotsToAbbr.get(s) != null));
+    }
+
+    public String dotsToNodots(String name) {
+        return name.replaceAll("\\.", " ").replaceAll("  ", " ").trim();
+    }
+
+    /**
+     * Attempts to get the abbreviated name of the journal given. Returns null if no
+     * abbreviated name is known.
+     * @param journalName The journal name to abbreviate.
+     * @param withDots True if the abbreviation should have dots.
+     * if only the first character should be.
+     * @return The abbreviated name, or null if it couldn't be found.
+     */
+    public String getAbbreviatedName(String journalName, boolean withDots) {
+        String s = journalName.toLowerCase();
+        String abbr;
+        if (fullNameKeyed.containsKey(s)) {
+            abbr = fullNameKeyed.get(s);
+        }
+        else if (abbrNameKeyed.containsKey(s)) {
+            abbr = journalName;
+        }
+        else if (abbrNoDotsToAbbr.containsKey(s)) {
+            abbr = abbrNoDotsToAbbr.get(s);
+        } else
+            return null;
+
+        if (!withDots) {
+            abbr = dotsToNodots(abbr);
+        }
+
+        return abbr;
+    }
+
+    /**
+     * Attempts to get the full name of the abbreviation given. Returns null if no
+     * full name is known.
+     * @param journalName The abbreviation to resolve.
+     * @return The full name, or null if it couldn't be found.
+     */
+    public String getFullName(String journalName) {
+        // Normalize name first:
+        String s = getAbbreviatedName(journalName, true);
+	if (s != null) 
+	    s = s.toLowerCase();
+	else
+	    return null;
+        Object o = abbrNameKeyed.get(s);
+        if (o == null) {
+            if (fullNameKeyed.containsKey(s))
+                o = s;
+            else
+                return null;
+        }
+        s = (String)o;
+        return s;//caseChanger.changeCase(s, CaseChanger.UPPER_EACH_FIRST);
+    }
+
+    public void readJournalList(String resourceFileName) {
+        URL url = JournalAbbreviations.class.getResource(resourceFileName);
+        try {
+            readJournalList(new InputStreamReader(url.openStream()));
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void readJournalList(File file) throws FileNotFoundException {
+        readJournalList(new FileReader(file));
+    }
+
+    /**
+     * Read the given file, which should contain a list of journal names and their
+     * abbreviations. Each line should be formatted as: "Full Journal Name=Abbr. Journal Name"
+     * @param in
+     */
+    public void readJournalList(Reader in) throws FileNotFoundException {
+        BufferedReader reader = new BufferedReader(in);
+        try {
+            String line;
+            while ((line = reader.readLine()) != null) {
+                //System.out.println(line);
+                if (line.startsWith("#"))
+                    continue;
+                String[] parts = line.split("=");
+                if (parts.length == 2) {
+                    String fullName = parts[0].trim();
+                    String fullNameLC = fullName.toLowerCase();
+                    String abbrName = parts[1].trim();
+                    if (abbrName.indexOf(';') >= 0) {
+                        String[] restParts = abbrName.split(";");
+                        abbrName = restParts[0];
+                    }
+                    String abbrNameLC = abbrName.toLowerCase();
+                    String abbrNoDots = dotsToNodots(abbrName);
+                    String abbrNoDotsLC = abbrNoDots.toLowerCase();
+                    //System.out.println(abbrNoDots);
+                    if ((fullName.length()>0) && (abbrName.length()>0)) {
+                        //System.out.println("'"+fullName+"' : '"+abbrNoDots+"'");
+                        fullNameKeyed.put(fullNameLC, abbrName);
+                        abbrNameKeyed.put(abbrNameLC, fullName);
+                        abbrNoDotsToAbbr.put(abbrNoDotsLC, abbrName);
+                        all.put(fullName, abbrName);
+                    }
+                }
+            }
+
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } finally {
+            try {
+                reader.close();
+            } catch (IOException ex2) {
+                ex2.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * Abbreviate the journal name of the given entry.
+     * @param database The database the entry belongs to, or null if no database.
+     * @param entry The entry to be treated.
+     * @param fieldName The field name (e.g. "journal")
+     * @param ce If the entry is changed, add an edit to this compound.
+     * @param withDots True if the abbreviations should have dots.
+     * @return true if the entry was changed, false otherwise.
+     */
+    public boolean abbreviate(BibtexDatabase database, BibtexEntry entry,
+                              String fieldName, CompoundEdit ce, boolean withDots) {
+        String text = entry.getField(fieldName);
+        if (text == null)
+            return false;
+        String origText = text;
+        if (database != null)
+            text = database.resolveForStrings(text);
+        if (isKnownName(text) && !isAbbreviatedName(text)) {
+            String newText = getAbbreviatedName(text, withDots);
+            if (newText == null)
+                return false;
+            entry.setField(fieldName, newText);
+            ce.addEdit(new UndoableFieldChange(entry, fieldName, origText, newText));
+            return true;
+        } else {
+            String unabbr = getFullName(text);
+            if (unabbr != null) {
+                String newText = getAbbreviatedName(unabbr, withDots);
+                if (newText == null)
+                    return false;
+                entry.setField(fieldName, newText);
+                ce.addEdit(new UndoableFieldChange(entry, fieldName, origText, newText));
+                return true;
+            } else
+                return false;
+        }
+    }
+
+    /**
+     * Unabbreviate the journal name of the given entry.
+     * @param entry The entry to be treated.
+     * @param fieldName The field name (e.g. "journal")
+     * @param ce If the entry is changed, add an edit to this compound.
+     * @return true if the entry was changed, false otherwise.
+     */
+    public boolean unabbreviate(BibtexDatabase database, BibtexEntry entry,
+                                String fieldName, CompoundEdit ce) {
+        String text = entry.getField(fieldName);
+        if (text == null)
+            return false;
+        String origText = text;
+        if (database != null)
+            text = database.resolveForStrings(text);
+        if (isKnownName(text) && isAbbreviatedName(text)) {
+            String newText = getFullName(text);
+            if (newText == null)
+                return false;
+            entry.setField(fieldName, newText);
+            ce.addEdit(new UndoableFieldChange(entry, fieldName, origText, newText));
+            return true;
+        } else
+            return false;
+    }
+
+
+    public Map<String, String> getJournals() {
+        return Collections.unmodifiableMap(all);
+    }
+
+    /**
+     * Create a control panel for the entry editor's journal field, to toggle
+     * abbreviated/full journal name
+     * @param editor The FieldEditor for the journal field.
+     * @return The control panel for the entry editor.
+     */
+    public static JComponent getNameSwitcher(final EntryEditor entryEditor, final FieldEditor editor,
+                                      final UndoManager undoManager) {
+        JButton button = new JButton(Globals.lang("Toggle abbreviation"));
+        button.setToolTipText(TOOLTIPTEXT);
+        button.addActionListener(new ActionListener() {
+            boolean withDots = true;
+            public void actionPerformed(ActionEvent actionEvent) {
+                String text = editor.getText();
+                if (Globals.journalAbbrev.isKnownName(text)) {
+                    String s;
+                    if (Globals.journalAbbrev.isAbbreviatedName(text)) {
+                        //System.out.println(withDots);
+                        if (!withDots) {
+                            s = Globals.journalAbbrev.getAbbreviatedName(text, false);
+                            withDots = true;
+                        } else {
+                            s = Globals.journalAbbrev.getFullName(text);
+                        }
+                    }
+                    else {
+                        s = Globals.journalAbbrev.getAbbreviatedName(text, true);
+                        withDots = false;
+                    }
+
+                    if (s != null) {
+                        editor.setText(s);
+                        entryEditor.storeFieldAction.actionPerformed(new ActionEvent(editor, 0, ""));
+                        undoManager.addEdit(new UndoableFieldChange(entryEditor.getEntry(), editor.getFieldName(),
+                                text, s));
+                    }
+                }
+            }
+        });
+
+        return button;
+    }
+
+    public TableModel getTableModel() {
+        Object[][] cells = new Object[fullNameKeyed.size()][2];
+        int row = 0;
+        for (Iterator<String> i=fullNameIterator(); i.hasNext();) {
+            String name = i.next();
+            cells[row][0] = getFullName(name);
+            cells[row][1] = getAbbreviatedName(name, true);
+            row++;
+        }
+        DefaultTableModel tableModel = new DefaultTableModel(cells, new Object[] {Globals.lang("Full name"),
+            Globals.lang("Abbreviation")}) {
+
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+        };
+
+        return tableModel;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/journals/ManageJournalsAction.java b/src/java/net/sf/jabref/journals/ManageJournalsAction.java
index ee7238d..85072ba 100644
--- a/src/java/net/sf/jabref/journals/ManageJournalsAction.java
+++ b/src/java/net/sf/jabref/journals/ManageJournalsAction.java
@@ -1,47 +1,47 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.journals;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MnemonicAwareAction;
-import net.sf.jabref.Util;
-
-import java.awt.event.ActionEvent;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Sep 22, 2005
- * Time: 10:45:02 PM
- * To browseOld this template use File | Settings | File Templates.
- */
-public class ManageJournalsAction extends MnemonicAwareAction {
-
-    JabRefFrame frame;
-
-    public ManageJournalsAction(JabRefFrame frame) {
-        super();
-        putValue(NAME, Globals.menuTitle("Manage journal abbreviations"));
-        this.frame = frame;
-    }
-    public void actionPerformed(ActionEvent actionEvent) {
-        ManageJournalsPanel panel = new ManageJournalsPanel(frame);
-        Util.placeDialog(panel.getDialog(), frame);
-        panel.setValues();
-        panel.getDialog().setVisible(true);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.journals;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.MnemonicAwareAction;
+import net.sf.jabref.Util;
+
+import java.awt.event.ActionEvent;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Sep 22, 2005
+ * Time: 10:45:02 PM
+ * To browseOld this template use File | Settings | File Templates.
+ */
+public class ManageJournalsAction extends MnemonicAwareAction {
+
+    JabRefFrame frame;
+
+    public ManageJournalsAction(JabRefFrame frame) {
+        super();
+        putValue(NAME, Globals.menuTitle("Manage journal abbreviations"));
+        this.frame = frame;
+    }
+    public void actionPerformed(ActionEvent actionEvent) {
+        ManageJournalsPanel panel = new ManageJournalsPanel(frame);
+        Util.placeDialog(panel.getDialog(), frame);
+        panel.setValues();
+        panel.getDialog().setVisible(true);
+    }
+}
diff --git a/src/java/net/sf/jabref/journals/ManageJournalsPanel.java b/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
index dd6d39f..00fe266 100644
--- a/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
+++ b/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
@@ -1,644 +1,644 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.journals;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.event.*;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.*;
-
-import javax.swing.*;
-import javax.swing.table.AbstractTableModel;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.HelpAction;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.gui.FileDialogs;
-import net.sf.jabref.net.URLDownload;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.ButtonStackBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.CellConstraints;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Sep 19, 2005
- * Time: 7:57:29 PM
- * To browseOld this template use File | Settings | File Templates.
- */
-public class ManageJournalsPanel extends JPanel{
-
-    JabRefFrame frame;
-    JTextField personalFile = new JTextField();
-    AbbreviationsTableModel tableModel = new AbbreviationsTableModel();
-    JTable userTable; // builtInTable
-    JPanel userPanel = new JPanel(),
-        journalEditPanel,
-        externalFilesPanel = new JPanel(),
-        addExtPan = new JPanel();
-    JTextField nameTf = new JTextField(),
-        newNameTf = new JTextField(),
-        abbrTf = new JTextField();
-    List<ExternalFileEntry> externals = new ArrayList<ExternalFileEntry>(); // To hold references to external journal lists.
-    JDialog dialog;
-    JRadioButton newFile = new JRadioButton(Globals.lang("New file")),
-        oldFile = new JRadioButton(Globals.lang("Existing file"));
-
-    JButton add = new JButton(GUIGlobals.getImage("add")),
-        remove = new JButton(GUIGlobals.getImage("remove")),
-        ok = new JButton(Globals.lang("Ok")),
-        cancel = new JButton(Globals.lang("Cancel")),
-        help = new JButton(Globals.lang("Help")),
-        browseOld = new JButton(Globals.lang("Browse")),
-        browseNew = new JButton(Globals.lang("Browse")),
-        addExt = new JButton(GUIGlobals.getImage("add")),
-        viewBuiltin = new JButton(Globals.lang("View"));
-
-
-    public ManageJournalsPanel(final JabRefFrame frame) {
-        this.frame = frame;
-
-        personalFile.setEditable(false);
-
-        ButtonGroup group = new ButtonGroup();
-        group.add(newFile);
-        group.add(oldFile);
-        addExtPan.setLayout(new BorderLayout());
-        addExtPan.add(addExt, BorderLayout.EAST);
-        addExtPan.setToolTipText(Globals.lang("Add"));
-        //addExtPan.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
-        FormLayout layout = new FormLayout
-                ("1dlu, 8dlu, left:pref, 4dlu, fill:200dlu:grow, 4dlu, fill:pref",// 4dlu, left:pref, 4dlu",
-                        "pref, pref, pref, 20dlu, 20dlu, fill:200dlu, 4dlu, pref");//150dlu");
-        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-
-        CellConstraints cc = new CellConstraints();
-
-        /*JLabel description = new JLabel("<HTML>"+Glbals.lang("JabRef can switch journal names between "
-            +"abbreviated and full form. Since it knows only a limited number of journal names, "
-            +"you may need to add your own definitions.")+"</HTML>");*/
-        builder.addSeparator(Globals.lang("Built-in journal list"), cc.xyw(2,1,6));
-        JLabel description = new JLabel("<HTML>"+Globals.lang("JabRef includes a built-in list of journal abbreviations.")
-            +"<br>"+Globals.lang("You can add additional journal names by setting up a personal journal list,<br>as "
-            +"well as linking to external journal lists.")+"</HTML>");
-        description.setBorder(BorderFactory.createEmptyBorder(5,0,5,0));
-        builder.add(description, cc.xyw(2,2,6));
-        builder.add(viewBuiltin, cc.xy(7,2));
-        builder.addSeparator(Globals.lang("Personal journal list"), cc.xyw(2,3,6));
-
-        //builder.add(description, cc.xyw(2,1,6));
-        builder.add(newFile, cc.xy(3,4));
-        builder.add(newNameTf, cc.xy(5,4));
-        builder.add(browseNew, cc.xy(7,4));
-        builder.add(oldFile, cc.xy(3,5));
-        builder.add(personalFile, cc.xy(5,5));
-        //BrowseAction action = new BrowseAction(personalFile, false);
-        //JButton browse = new JButton(Globals.lang("Browse"));
-        //browse.addActionListener(action);
-        builder.add(browseOld, cc.xy(7,5));
-
-        userPanel.setLayout(new BorderLayout());
-        //builtInTable = new JTable(Globals.journalAbbrev.getTableModel());
-        builder.add(userPanel, cc.xyw(2,6,4));
-        ButtonStackBuilder butBul = new ButtonStackBuilder();
-        butBul.addButton(add);
-        butBul.addButton(remove);
-
-        butBul.addGlue();
-        builder.add(butBul.getPanel(), cc.xy(7,6));
-
-        builder.addSeparator(Globals.lang("External files"), cc.xyw(2,8,6));
-        externalFilesPanel.setLayout(new BorderLayout());
-        //builder.add(/*new JScrollPane(*/externalFilesPanel/*)*/, cc.xyw(2,8,6));
-
-        setLayout(new BorderLayout());
-        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));//createMatteBorder(1,1,1,1,Color.green));
-        add(builder.getPanel(), BorderLayout.NORTH);
-        add(externalFilesPanel, BorderLayout.CENTER);
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addUnrelatedGap();
-        bb.addButton(help);
-        bb.addGlue();
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        dialog = new JDialog(frame, Globals.lang("Journal abbreviations"), false);
-        dialog.getContentPane().add(this, BorderLayout.CENTER);
-        dialog.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-
-        //add(new JScrollPane(builtInTable), BorderLayout.CENTER);
-
-        // Set up panel for editing a single journal, to be used in a dialog box:
-        FormLayout layout2 = new FormLayout
-                ("right:pref, 4dlu, fill:180dlu", "");
-        DefaultFormBuilder builder2 = new DefaultFormBuilder(layout2);
-        builder2.append(Globals.lang("Journal name"));
-        builder2.append(nameTf);
-        builder2.nextLine();
-        builder2.append(Globals.lang("ISO abbreviation"));
-        builder2.append(abbrTf);
-        journalEditPanel = builder2.getPanel();
-
-        viewBuiltin.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    JournalAbbreviations abbr = new JournalAbbreviations(Globals.JOURNALS_FILE_BUILTIN);
-                    JTable table = new JTable(abbr.getTableModel());
-                    JScrollPane pane = new JScrollPane(table);
-                    JOptionPane.showMessageDialog(null, pane, Globals.lang("Journal list preview"), JOptionPane.INFORMATION_MESSAGE);
-                }
-            });
-
-        browseNew.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                File old = null;
-                if (!newNameTf.getText().equals(""))
-                    old = new File(newNameTf.getText());
-                String name = FileDialogs.getNewFile(frame, old, null, JFileChooser.SAVE_DIALOG, false);
-                if (name != null) {
-                    if ((old != null) && (tableModel.getRowCount() > 0)) {
-                    }
-                    newNameTf.setText(name);
-                    newFile.setSelected(true);
-                }
-            }
-        });
-        browseOld.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                File old = null;
-                if (!personalFile.getText().equals(""))
-                    old = new File(personalFile.getText());
-                String name = FileDialogs.getNewFile(frame, old, null, JFileChooser.OPEN_DIALOG, false);
-                if (name != null) {
-                    if ((old != null) && (tableModel.getRowCount() > 0)) {
-                    }
-                    personalFile.setText(name);
-                    oldFile.setSelected(true);
-                    oldFile.setEnabled(true);
-                    setupUserTable();
-                }
-            }
-        });
-
-
-        ok.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                if (readyToClose()) {
-                    storeSettings();
-                    dialog.dispose();
-                }
-            }
-        });
-        help.addActionListener(new HelpAction(Globals.helpDiag, GUIGlobals.journalAbbrHelp));
-
-        AbstractAction cancelAction = new AbstractAction() {
-            public void actionPerformed(ActionEvent e) {
-                dialog.dispose();
-            }
-        };
-        cancel.addActionListener(cancelAction);
-
-        add.addActionListener(tableModel);
-        remove.addActionListener(tableModel);
-        addExt.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                externals.add(new ExternalFileEntry());
-                buildExternalsPanel();
-            }
-        });
-
-        // Key bindings:
-        ActionMap am = getActionMap();
-        InputMap im = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", cancelAction);
-
-        //dialog.pack();
-        int xSize = getPreferredSize().width;
-        dialog.setSize(xSize+10,700);
-    }
-
-    public JDialog getDialog() {
-        return dialog;
-    }
-
-    public void setValues() {
-        personalFile.setText(Globals.prefs.get("personalJournalList"));
-        if (personalFile.getText().length() == 0) {
-            newFile.setSelected(true);
-            oldFile.setEnabled(false);
-        } else {
-            oldFile.setSelected(true);
-            oldFile.setEnabled(true);
-        }
-        setupUserTable();
-        setupExternals();
-        buildExternalsPanel();
-
-    }
-
-    private void buildExternalsPanel() {
-
-        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("fill:pref:grow",""));
-        for (Iterator<ExternalFileEntry> i=externals.iterator(); i.hasNext();) {
-            ExternalFileEntry efe = i.next();
-            builder.append(efe.getPanel());
-            builder.nextLine();
-        }
-        builder.append(Box.createVerticalGlue());
-        builder.nextLine();
-        builder.append(addExtPan);
-        builder.nextLine();
-        builder.append(Box.createVerticalGlue());
-
-        //builder.getPanel().setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.green));
-        //externalFilesPanel.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
-        JScrollPane pane = new JScrollPane(builder.getPanel());
-        pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        externalFilesPanel.setMinimumSize(new Dimension(400,400));
-        externalFilesPanel.setPreferredSize(new Dimension(400,400));
-        externalFilesPanel.removeAll();
-        externalFilesPanel.add(pane, BorderLayout.CENTER);
-        externalFilesPanel.revalidate();
-        externalFilesPanel.repaint();
-
-    }
-
-    private void setupExternals() {
-        String[] externalFiles = Globals.prefs.getStringArray("externalJournalLists");
-        if ((externalFiles == null) || (externalFiles.length == 0)) {
-            ExternalFileEntry efe = new ExternalFileEntry();
-            externals.add(efe);
-        } else {
-            for (int i=0; i<externalFiles.length; i++) {
-                ExternalFileEntry efe = new ExternalFileEntry(externalFiles[i]);
-                externals.add(efe);
-
-            }
-
-        }
-
-        //efe = new ExternalFileEntry();
-        //externals.add(efe);
-
-    }
-
-    public void setupUserTable() {
-        JournalAbbreviations userAbbr = new JournalAbbreviations();
-        String filename = personalFile.getText();
-        if (!filename.equals("") && (new File(filename)).exists()) {
-            try {
-                userAbbr.readJournalList(new File(filename));
-            } catch (FileNotFoundException e) {
-                e.printStackTrace();
-            }
-        }
-
-        tableModel.setJournals(userAbbr.getJournals());
-        userTable = new JTable(tableModel);
-        userTable.addMouseListener(tableModel.getMouseListener());
-        userPanel.add(new JScrollPane(userTable), BorderLayout.CENTER);
-    }
-
-    public boolean readyToClose() {
-        File f;
-        if (newFile.isSelected()) {
-            if (newNameTf.getText().length() > 0) {
-                f = new File(newNameTf.getText());
-                return (!f.exists() ||
-                    (JOptionPane.showConfirmDialog
-                     (this, "'"+f.getName()+"' "+Globals.lang("exists. Overwrite file?"),
-                      Globals.lang("Store journal abbreviations"), JOptionPane.OK_CANCEL_OPTION)
-                     == JOptionPane.OK_OPTION));
-            } else {
-                if (tableModel.getRowCount() > 0) {
-                    JOptionPane.showMessageDialog(this, Globals.lang("You must choose a file name to store journal abbreviations"),
-                            Globals.lang("Store journal abbreviations"), JOptionPane.ERROR_MESSAGE);
-                        return false;
-                }
-                else return true;
-
-            }
-        }
-        return true;
-    }
-
-    public void storeSettings() {
-        File f = null;
-        if (newFile.isSelected()) {
-            if (newNameTf.getText().length() > 0) {
-                f = new File(newNameTf.getText());
-            }// else {
-            //    return; // Nothing to do.
-            //}
-        } else
-            f = new File(personalFile.getText());
-
-        if (f != null) {
-            FileWriter fw = null;
-            try {
-                fw = new FileWriter(f, false);
-                for (Iterator<JournalEntry> i=tableModel.getJournals().iterator(); i.hasNext();) {
-                    JournalEntry entry = i.next();
-                    fw.write(entry.name);
-                    fw.write(" = ");
-                    fw.write(entry.abbreviation);
-                    fw.write(Globals.NEWLINE);
-                }
-
-            } catch (IOException e) {
-                e.printStackTrace();
-
-            } finally {
-                if (fw != null)
-                    try {
-                        fw.close();
-                    } catch (IOException e) {
-                        e.printStackTrace();
-                    }
-            }
-
-            String filename = f.getPath();
-            if (filename.equals(""))
-                filename = null;
-            Globals.prefs.put("personalJournalList", filename);
-        }
-
-        // Store the list of external files set up:
-        ArrayList<String> extFiles = new ArrayList<String>();
-        for (Iterator<ExternalFileEntry> i=externals.iterator(); i.hasNext();) {
-            ExternalFileEntry efe = i.next();
-            if (!efe.getValue().equals("")) {
-                extFiles.add(efe.getValue());
-            }
-        }
-        if (extFiles.size() == 0)
-            Globals.prefs.put("externalJournalLists", "");
-        else {
-            String[] list = extFiles.toArray(new String[extFiles.size()]);
-            Globals.prefs.putStringArray("externalJournalLists", list);
-        }
-
-
-        Globals.initializeJournalNames();
-
-        // Update the autocompleter for the "journal" field in all base panels,
-        // so added journal names are available:
-        for (int i=0; i<frame.baseCount(); i++) {
-            frame.baseAt(i).addJournalListToAutoCompleter();
-        }
-
-    }
-
-    class DownloadAction extends AbstractAction {
-        JTextField comp;
-
-        public DownloadAction(JTextField tc) {
-            super(Globals.lang("Download"));
-            comp = tc;
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            String chosen = null;
-            chosen = JOptionPane.showInputDialog(Globals.lang("Choose the URL to download. The default value points to a list provided by the JabRef developers."),
-                    "http://jabref.sf.net/journals/journal_abbreviations_general.txt");
-            if (chosen == null)
-                return;
-            File toFile;
-            try {
-                URL url = new URL(chosen);
-                String toName = FileDialogs.getNewFile(frame, new File(System.getProperty("user.home")),
-                        null, JFileChooser.SAVE_DIALOG, false);
-                if (toName == null)
-                    return;
-                else toFile = new File(toName);
-                URLDownload ud = new URLDownload(comp, url, toFile);
-                ud.download();
-                comp.setText(toFile.getPath());
-            } catch (Exception ex) {
-                JOptionPane.showMessageDialog(null, Globals.lang("Error downloading file '%0'", chosen),
-                        Globals.lang("Download failed"), JOptionPane.ERROR_MESSAGE);
-            }
-        }
-    }
-
-    class BrowseAction extends AbstractAction {
-        JTextField comp;
-        boolean dir;
-
-        public BrowseAction(JTextField tc, boolean dir) {
-            super(Globals.lang("Browse"));
-            this.dir = dir;
-            comp = tc;
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            String chosen = null;
-            if (dir)
-                chosen = FileDialogs.getNewDir(frame, new File(comp.getText()), Globals.NONE,
-                        JFileChooser.OPEN_DIALOG, false);
-            else
-                chosen = FileDialogs.getNewFile(frame, new File(comp.getText()), Globals.NONE,
-                        JFileChooser.OPEN_DIALOG, false);
-            if (chosen != null) {
-                File newFile = new File(chosen);
-                comp.setText(newFile.getPath());
-            }
-        }
-    }
-
-    class AbbreviationsTableModel extends AbstractTableModel implements ActionListener {
-
-        String[] names = new String[] {Globals.lang("Journal name"), Globals.lang("Abbreviation")};
-        ArrayList<JournalEntry> journals = null;
-
-        public AbbreviationsTableModel() {
-
-
-        }
-
-        public void setJournals(Map<String, String> journals) {
-            this.journals = new ArrayList<JournalEntry>();
-            for (Map.Entry<String, String> entry : journals.entrySet()){
-                this.journals.add(new JournalEntry(entry.getKey(), entry.getValue()));
-            }
-            fireTableDataChanged();
-        }
-
-        public ArrayList<JournalEntry> getJournals() {
-            return journals;
-        }
-
-        public int getColumnCount() {
-            return 2;
-        }
-
-        public int getRowCount() {
-            return journals.size();
-        }
-
-        public Object getValueAt(int row, int col) {
-            if (col == 0)
-                return journals.get(row).name;
-            else
-                return journals.get(row).abbreviation;
-        }
-
-        public void setValueAt(Object object, int row, int col) {
-            JournalEntry entry = journals.get(row);
-            if (col == 0)
-                entry.name = (String)object;
-            else
-                entry.abbreviation = (String)object;
-
-        }
-
-        public String getColumnName(int i) {
-            return names[i];
-        }
-
-        public boolean isCellEditable(int i, int i1) {
-            return false;
-        }
-
-        public MouseListener getMouseListener() {
-            return new MouseAdapter() {
-                public void mouseClicked(MouseEvent e) {
-                    if (e.getClickCount() == 2) {
-                        JTable table = (JTable)e.getSource();
-                        int row = table.rowAtPoint(e.getPoint());
-                        nameTf.setText((String)getValueAt(row,0));
-                        abbrTf.setText((String)getValueAt(row,1));
-                        if (JOptionPane.showConfirmDialog(dialog, journalEditPanel, Globals.lang("Edit journal"),
-                            JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) {
-                            setValueAt(nameTf.getText(), row, 0);
-                            setValueAt(abbrTf.getText(), row, 1);
-                            Collections.sort(journals);
-                            fireTableDataChanged();
-                        }
-
-                    }
-                }
-            };
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            if (e.getSource() == add) {
-                //int sel = userTable.getSelectedRow();
-                //if (sel < 0)
-                //    sel = 0;
-
-                nameTf.setText("");
-                abbrTf.setText("");
-                if (JOptionPane.showConfirmDialog(dialog, journalEditPanel, Globals.lang("Edit journal"),
-                        JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) {
-                    journals.add(new JournalEntry(nameTf.getText(), abbrTf.getText()));
-                    //setValueAt(nameTf.getText(), sel, 0);
-                    //setValueAt(abbrTf.getText(), sel, 1);
-                    Collections.sort(journals);
-                    fireTableDataChanged();
-                }
-            }
-            else if (e.getSource() == remove) {
-                int[] rows = userTable.getSelectedRows();
-                if (rows.length > 0) {
-                    for (int i=rows.length-1; i>=0; i--) {
-                        journals.remove(rows[i]);
-                    }
-                    fireTableDataChanged();
-                }
-            }
-        }
-    }
-
-    class ExternalFileEntry {
-        private JPanel pan;
-        private JTextField tf;
-        private JButton browse = new JButton(Globals.lang("Browse")),
-            view = new JButton(Globals.lang("Preview")),
-            clear = new JButton(GUIGlobals.getImage("delete")),
-            download = new JButton(Globals.lang("Download"));
-        public ExternalFileEntry() {
-            tf = new JTextField();
-            setupPanel();
-        }
-        public ExternalFileEntry(String filename) {
-            tf = new JTextField(filename);
-            setupPanel();
-        }
-        private void setupPanel() {
-            tf.setEditable(false);
-            BrowseAction browseA = new BrowseAction(tf, false);
-            browse.addActionListener(browseA);
-            DownloadAction da = new DownloadAction(tf);
-            download.addActionListener(da);
-            DefaultFormBuilder builder = new DefaultFormBuilder
-                    (new FormLayout("fill:pref:grow, 4dlu, fill:pref, 4dlu, fill:pref, 4dlu, fill:pref, 4dlu, fill:pref", ""));
-            builder.append(tf);
-            builder.append(browse);
-            builder.append(download);
-            builder.append(view);
-            builder.append(clear);
-
-            pan = builder.getPanel();
-
-            view.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    try {
-                        JournalAbbreviations abbr = new JournalAbbreviations(new File(tf.getText()));
-                        JTable table = new JTable(abbr.getTableModel());
-                        JScrollPane pane = new JScrollPane(table);
-                        JOptionPane.showMessageDialog(null, pane, Globals.lang("Journal list preview"), JOptionPane.INFORMATION_MESSAGE);
-                    } catch (FileNotFoundException ex) {
-                        JOptionPane.showMessageDialog(null, Globals.lang("File '%0' not found", tf.getText()),
-                                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-                    }
-                }
-            });
-            clear.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    externals.remove(ExternalFileEntry.this);
-                    buildExternalsPanel();
-                }
-            });
-            clear.setToolTipText(Globals.lang("Remove"));
-
-        }
-        public JPanel getPanel() { return pan; }
-        public String getValue() { return tf.getText(); }
-    }
-
-    class JournalEntry implements Comparable<JournalEntry> {
-        String name, abbreviation;
-        public JournalEntry(String name, String abbreviation) {
-            this.name = name;
-            this.abbreviation = abbreviation;
-        }
-        public int compareTo(JournalEntry other) {
-            return this.name.compareTo(other.name);
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.journals;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.*;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.*;
+
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.gui.FileDialogs;
+import net.sf.jabref.help.HelpAction;
+import net.sf.jabref.net.URLDownload;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.ButtonStackBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Sep 19, 2005
+ * Time: 7:57:29 PM
+ * To browseOld this template use File | Settings | File Templates.
+ */
+public class ManageJournalsPanel extends JPanel{
+
+    JabRefFrame frame;
+    JTextField personalFile = new JTextField();
+    AbbreviationsTableModel tableModel = new AbbreviationsTableModel();
+    JTable userTable; // builtInTable
+    JPanel userPanel = new JPanel(),
+        journalEditPanel,
+        externalFilesPanel = new JPanel(),
+        addExtPan = new JPanel();
+    JTextField nameTf = new JTextField(),
+        newNameTf = new JTextField(),
+        abbrTf = new JTextField();
+    List<ExternalFileEntry> externals = new ArrayList<ExternalFileEntry>(); // To hold references to external journal lists.
+    JDialog dialog;
+    JRadioButton newFile = new JRadioButton(Globals.lang("New file")),
+        oldFile = new JRadioButton(Globals.lang("Existing file"));
+
+    JButton add = new JButton(GUIGlobals.getImage("add")),
+        remove = new JButton(GUIGlobals.getImage("remove")),
+        ok = new JButton(Globals.lang("Ok")),
+        cancel = new JButton(Globals.lang("Cancel")),
+        help = new JButton(Globals.lang("Help")),
+        browseOld = new JButton(Globals.lang("Browse")),
+        browseNew = new JButton(Globals.lang("Browse")),
+        addExt = new JButton(GUIGlobals.getImage("add")),
+        viewBuiltin = new JButton(Globals.lang("View"));
+
+
+    public ManageJournalsPanel(final JabRefFrame frame) {
+        this.frame = frame;
+
+        personalFile.setEditable(false);
+
+        ButtonGroup group = new ButtonGroup();
+        group.add(newFile);
+        group.add(oldFile);
+        addExtPan.setLayout(new BorderLayout());
+        addExtPan.add(addExt, BorderLayout.EAST);
+        addExtPan.setToolTipText(Globals.lang("Add"));
+        //addExtPan.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
+        FormLayout layout = new FormLayout
+                ("1dlu, 8dlu, left:pref, 4dlu, fill:200dlu:grow, 4dlu, fill:pref",// 4dlu, left:pref, 4dlu",
+                        "pref, pref, pref, 20dlu, 20dlu, fill:200dlu, 4dlu, pref");//150dlu");
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+
+        CellConstraints cc = new CellConstraints();
+
+        /*JLabel description = new JLabel("<HTML>"+Glbals.lang("JabRef can switch journal names between "
+            +"abbreviated and full form. Since it knows only a limited number of journal names, "
+            +"you may need to add your own definitions.")+"</HTML>");*/
+        builder.addSeparator(Globals.lang("Built-in journal list"), cc.xyw(2,1,6));
+        JLabel description = new JLabel("<HTML>"+Globals.lang("JabRef includes a built-in list of journal abbreviations.")
+            +"<br>"+Globals.lang("You can add additional journal names by setting up a personal journal list,<br>as "
+            +"well as linking to external journal lists.")+"</HTML>");
+        description.setBorder(BorderFactory.createEmptyBorder(5,0,5,0));
+        builder.add(description, cc.xyw(2,2,6));
+        builder.add(viewBuiltin, cc.xy(7,2));
+        builder.addSeparator(Globals.lang("Personal journal list"), cc.xyw(2,3,6));
+
+        //builder.add(description, cc.xyw(2,1,6));
+        builder.add(newFile, cc.xy(3,4));
+        builder.add(newNameTf, cc.xy(5,4));
+        builder.add(browseNew, cc.xy(7,4));
+        builder.add(oldFile, cc.xy(3,5));
+        builder.add(personalFile, cc.xy(5,5));
+        //BrowseAction action = new BrowseAction(personalFile, false);
+        //JButton browse = new JButton(Globals.lang("Browse"));
+        //browse.addActionListener(action);
+        builder.add(browseOld, cc.xy(7,5));
+
+        userPanel.setLayout(new BorderLayout());
+        //builtInTable = new JTable(Globals.journalAbbrev.getTableModel());
+        builder.add(userPanel, cc.xyw(2,6,4));
+        ButtonStackBuilder butBul = new ButtonStackBuilder();
+        butBul.addButton(add);
+        butBul.addButton(remove);
+
+        butBul.addGlue();
+        builder.add(butBul.getPanel(), cc.xy(7,6));
+
+        builder.addSeparator(Globals.lang("External files"), cc.xyw(2,8,6));
+        externalFilesPanel.setLayout(new BorderLayout());
+        //builder.add(/*new JScrollPane(*/externalFilesPanel/*)*/, cc.xyw(2,8,6));
+
+        setLayout(new BorderLayout());
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));//createMatteBorder(1,1,1,1,Color.green));
+        add(builder.getPanel(), BorderLayout.NORTH);
+        add(externalFilesPanel, BorderLayout.CENTER);
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addUnrelatedGap();
+        bb.addButton(help);
+        bb.addGlue();
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        dialog = new JDialog(frame, Globals.lang("Journal abbreviations"), false);
+        dialog.getContentPane().add(this, BorderLayout.CENTER);
+        dialog.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+
+        //add(new JScrollPane(builtInTable), BorderLayout.CENTER);
+
+        // Set up panel for editing a single journal, to be used in a dialog box:
+        FormLayout layout2 = new FormLayout
+                ("right:pref, 4dlu, fill:180dlu", "");
+        DefaultFormBuilder builder2 = new DefaultFormBuilder(layout2);
+        builder2.append(Globals.lang("Journal name"));
+        builder2.append(nameTf);
+        builder2.nextLine();
+        builder2.append(Globals.lang("ISO abbreviation"));
+        builder2.append(abbrTf);
+        journalEditPanel = builder2.getPanel();
+
+        viewBuiltin.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    JournalAbbreviations abbr = new JournalAbbreviations(Globals.JOURNALS_FILE_BUILTIN);
+                    JTable table = new JTable(abbr.getTableModel());
+                    JScrollPane pane = new JScrollPane(table);
+                    JOptionPane.showMessageDialog(null, pane, Globals.lang("Journal list preview"), JOptionPane.INFORMATION_MESSAGE);
+                }
+            });
+
+        browseNew.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                File old = null;
+                if (!newNameTf.getText().equals(""))
+                    old = new File(newNameTf.getText());
+                String name = FileDialogs.getNewFile(frame, old, null, JFileChooser.SAVE_DIALOG, false);
+                if (name != null) {
+                    if ((old != null) && (tableModel.getRowCount() > 0)) {
+                    }
+                    newNameTf.setText(name);
+                    newFile.setSelected(true);
+                }
+            }
+        });
+        browseOld.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                File old = null;
+                if (!personalFile.getText().equals(""))
+                    old = new File(personalFile.getText());
+                String name = FileDialogs.getNewFile(frame, old, null, JFileChooser.OPEN_DIALOG, false);
+                if (name != null) {
+                    if ((old != null) && (tableModel.getRowCount() > 0)) {
+                    }
+                    personalFile.setText(name);
+                    oldFile.setSelected(true);
+                    oldFile.setEnabled(true);
+                    setupUserTable();
+                }
+            }
+        });
+
+
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                if (readyToClose()) {
+                    storeSettings();
+                    dialog.dispose();
+                }
+            }
+        });
+        help.addActionListener(new HelpAction(Globals.helpDiag, GUIGlobals.journalAbbrHelp));
+
+        AbstractAction cancelAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                dialog.dispose();
+            }
+        };
+        cancel.addActionListener(cancelAction);
+
+        add.addActionListener(tableModel);
+        remove.addActionListener(tableModel);
+        addExt.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                externals.add(new ExternalFileEntry());
+                buildExternalsPanel();
+            }
+        });
+
+        // Key bindings:
+        ActionMap am = getActionMap();
+        InputMap im = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", cancelAction);
+
+        //dialog.pack();
+        int xSize = getPreferredSize().width;
+        dialog.setSize(xSize+10,700);
+    }
+
+    public JDialog getDialog() {
+        return dialog;
+    }
+
+    public void setValues() {
+        personalFile.setText(Globals.prefs.get("personalJournalList"));
+        if (personalFile.getText().length() == 0) {
+            newFile.setSelected(true);
+            oldFile.setEnabled(false);
+        } else {
+            oldFile.setSelected(true);
+            oldFile.setEnabled(true);
+        }
+        setupUserTable();
+        setupExternals();
+        buildExternalsPanel();
+
+    }
+
+    private void buildExternalsPanel() {
+
+        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("fill:pref:grow",""));
+        for (Iterator<ExternalFileEntry> i=externals.iterator(); i.hasNext();) {
+            ExternalFileEntry efe = i.next();
+            builder.append(efe.getPanel());
+            builder.nextLine();
+        }
+        builder.append(Box.createVerticalGlue());
+        builder.nextLine();
+        builder.append(addExtPan);
+        builder.nextLine();
+        builder.append(Box.createVerticalGlue());
+
+        //builder.getPanel().setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.green));
+        //externalFilesPanel.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
+        JScrollPane pane = new JScrollPane(builder.getPanel());
+        pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        externalFilesPanel.setMinimumSize(new Dimension(400,400));
+        externalFilesPanel.setPreferredSize(new Dimension(400,400));
+        externalFilesPanel.removeAll();
+        externalFilesPanel.add(pane, BorderLayout.CENTER);
+        externalFilesPanel.revalidate();
+        externalFilesPanel.repaint();
+
+    }
+
+    private void setupExternals() {
+        String[] externalFiles = Globals.prefs.getStringArray("externalJournalLists");
+        if ((externalFiles == null) || (externalFiles.length == 0)) {
+            ExternalFileEntry efe = new ExternalFileEntry();
+            externals.add(efe);
+        } else {
+            for (int i=0; i<externalFiles.length; i++) {
+                ExternalFileEntry efe = new ExternalFileEntry(externalFiles[i]);
+                externals.add(efe);
+
+            }
+
+        }
+
+        //efe = new ExternalFileEntry();
+        //externals.add(efe);
+
+    }
+
+    public void setupUserTable() {
+        JournalAbbreviations userAbbr = new JournalAbbreviations();
+        String filename = personalFile.getText();
+        if (!filename.equals("") && (new File(filename)).exists()) {
+            try {
+                userAbbr.readJournalList(new File(filename));
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            }
+        }
+
+        tableModel.setJournals(userAbbr.getJournals());
+        userTable = new JTable(tableModel);
+        userTable.addMouseListener(tableModel.getMouseListener());
+        userPanel.add(new JScrollPane(userTable), BorderLayout.CENTER);
+    }
+
+    public boolean readyToClose() {
+        File f;
+        if (newFile.isSelected()) {
+            if (newNameTf.getText().length() > 0) {
+                f = new File(newNameTf.getText());
+                return (!f.exists() ||
+                    (JOptionPane.showConfirmDialog
+                     (this, "'"+f.getName()+"' "+Globals.lang("exists. Overwrite file?"),
+                      Globals.lang("Store journal abbreviations"), JOptionPane.OK_CANCEL_OPTION)
+                     == JOptionPane.OK_OPTION));
+            } else {
+                if (tableModel.getRowCount() > 0) {
+                    JOptionPane.showMessageDialog(this, Globals.lang("You must choose a file name to store journal abbreviations"),
+                            Globals.lang("Store journal abbreviations"), JOptionPane.ERROR_MESSAGE);
+                        return false;
+                }
+                else return true;
+
+            }
+        }
+        return true;
+    }
+
+    public void storeSettings() {
+        File f = null;
+        if (newFile.isSelected()) {
+            if (newNameTf.getText().length() > 0) {
+                f = new File(newNameTf.getText());
+            }// else {
+            //    return; // Nothing to do.
+            //}
+        } else
+            f = new File(personalFile.getText());
+
+        if (f != null) {
+            FileWriter fw = null;
+            try {
+                fw = new FileWriter(f, false);
+                for (Iterator<JournalEntry> i=tableModel.getJournals().iterator(); i.hasNext();) {
+                    JournalEntry entry = i.next();
+                    fw.write(entry.name);
+                    fw.write(" = ");
+                    fw.write(entry.abbreviation);
+                    fw.write(Globals.NEWLINE);
+                }
+
+            } catch (IOException e) {
+                e.printStackTrace();
+
+            } finally {
+                if (fw != null)
+                    try {
+                        fw.close();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+            }
+
+            String filename = f.getPath();
+            if (filename.equals(""))
+                filename = null;
+            Globals.prefs.put("personalJournalList", filename);
+        }
+
+        // Store the list of external files set up:
+        ArrayList<String> extFiles = new ArrayList<String>();
+        for (Iterator<ExternalFileEntry> i=externals.iterator(); i.hasNext();) {
+            ExternalFileEntry efe = i.next();
+            if (!efe.getValue().equals("")) {
+                extFiles.add(efe.getValue());
+            }
+        }
+        if (extFiles.size() == 0)
+            Globals.prefs.put("externalJournalLists", "");
+        else {
+            String[] list = extFiles.toArray(new String[extFiles.size()]);
+            Globals.prefs.putStringArray("externalJournalLists", list);
+        }
+
+
+        Globals.initializeJournalNames();
+
+        // Update the autocompleter for the "journal" field in all base panels,
+        // so added journal names are available:
+        for (int i=0; i<frame.baseCount(); i++) {
+            frame.baseAt(i).addJournalListToAutoCompleter();
+        }
+
+    }
+
+    class DownloadAction extends AbstractAction {
+        JTextField comp;
+
+        public DownloadAction(JTextField tc) {
+            super(Globals.lang("Download"));
+            comp = tc;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            String chosen = null;
+            chosen = JOptionPane.showInputDialog(Globals.lang("Choose the URL to download. The default value points to a list provided by the JabRef developers."),
+                    "http://jabref.sf.net/journals/journal_abbreviations_general.txt");
+            if (chosen == null)
+                return;
+            File toFile;
+            try {
+                URL url = new URL(chosen);
+                String toName = FileDialogs.getNewFile(frame, new File(System.getProperty("user.home")),
+                        null, JFileChooser.SAVE_DIALOG, false);
+                if (toName == null)
+                    return;
+                else toFile = new File(toName);
+                URLDownload ud = new URLDownload(comp, url, toFile);
+                ud.download();
+                comp.setText(toFile.getPath());
+            } catch (Exception ex) {
+                JOptionPane.showMessageDialog(null, Globals.lang("Error downloading file '%0'", chosen),
+                        Globals.lang("Download failed"), JOptionPane.ERROR_MESSAGE);
+            }
+        }
+    }
+
+    class BrowseAction extends AbstractAction {
+        JTextField comp;
+        boolean dir;
+
+        public BrowseAction(JTextField tc, boolean dir) {
+            super(Globals.lang("Browse"));
+            this.dir = dir;
+            comp = tc;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            String chosen = null;
+            if (dir)
+                chosen = FileDialogs.getNewDir(frame, new File(comp.getText()), Globals.NONE,
+                        JFileChooser.OPEN_DIALOG, false);
+            else
+                chosen = FileDialogs.getNewFile(frame, new File(comp.getText()), Globals.NONE,
+                        JFileChooser.OPEN_DIALOG, false);
+            if (chosen != null) {
+                File newFile = new File(chosen);
+                comp.setText(newFile.getPath());
+            }
+        }
+    }
+
+    class AbbreviationsTableModel extends AbstractTableModel implements ActionListener {
+
+        String[] names = new String[] {Globals.lang("Journal name"), Globals.lang("Abbreviation")};
+        ArrayList<JournalEntry> journals = null;
+
+        public AbbreviationsTableModel() {
+
+
+        }
+
+        public void setJournals(Map<String, String> journals) {
+            this.journals = new ArrayList<JournalEntry>();
+            for (Map.Entry<String, String> entry : journals.entrySet()){
+                this.journals.add(new JournalEntry(entry.getKey(), entry.getValue()));
+            }
+            fireTableDataChanged();
+        }
+
+        public ArrayList<JournalEntry> getJournals() {
+            return journals;
+        }
+
+        public int getColumnCount() {
+            return 2;
+        }
+
+        public int getRowCount() {
+            return journals.size();
+        }
+
+        public Object getValueAt(int row, int col) {
+            if (col == 0)
+                return journals.get(row).name;
+            else
+                return journals.get(row).abbreviation;
+        }
+
+        public void setValueAt(Object object, int row, int col) {
+            JournalEntry entry = journals.get(row);
+            if (col == 0)
+                entry.name = (String)object;
+            else
+                entry.abbreviation = (String)object;
+
+        }
+
+        public String getColumnName(int i) {
+            return names[i];
+        }
+
+        public boolean isCellEditable(int i, int i1) {
+            return false;
+        }
+
+        public MouseListener getMouseListener() {
+            return new MouseAdapter() {
+                public void mouseClicked(MouseEvent e) {
+                    if (e.getClickCount() == 2) {
+                        JTable table = (JTable)e.getSource();
+                        int row = table.rowAtPoint(e.getPoint());
+                        nameTf.setText((String)getValueAt(row,0));
+                        abbrTf.setText((String)getValueAt(row,1));
+                        if (JOptionPane.showConfirmDialog(dialog, journalEditPanel, Globals.lang("Edit journal"),
+                            JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) {
+                            setValueAt(nameTf.getText(), row, 0);
+                            setValueAt(abbrTf.getText(), row, 1);
+                            Collections.sort(journals);
+                            fireTableDataChanged();
+                        }
+
+                    }
+                }
+            };
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            if (e.getSource() == add) {
+                //int sel = userTable.getSelectedRow();
+                //if (sel < 0)
+                //    sel = 0;
+
+                nameTf.setText("");
+                abbrTf.setText("");
+                if (JOptionPane.showConfirmDialog(dialog, journalEditPanel, Globals.lang("Edit journal"),
+                        JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) {
+                    journals.add(new JournalEntry(nameTf.getText(), abbrTf.getText()));
+                    //setValueAt(nameTf.getText(), sel, 0);
+                    //setValueAt(abbrTf.getText(), sel, 1);
+                    Collections.sort(journals);
+                    fireTableDataChanged();
+                }
+            }
+            else if (e.getSource() == remove) {
+                int[] rows = userTable.getSelectedRows();
+                if (rows.length > 0) {
+                    for (int i=rows.length-1; i>=0; i--) {
+                        journals.remove(rows[i]);
+                    }
+                    fireTableDataChanged();
+                }
+            }
+        }
+    }
+
+    class ExternalFileEntry {
+        private JPanel pan;
+        private JTextField tf;
+        private JButton browse = new JButton(Globals.lang("Browse")),
+            view = new JButton(Globals.lang("Preview")),
+            clear = new JButton(GUIGlobals.getImage("delete")),
+            download = new JButton(Globals.lang("Download"));
+        public ExternalFileEntry() {
+            tf = new JTextField();
+            setupPanel();
+        }
+        public ExternalFileEntry(String filename) {
+            tf = new JTextField(filename);
+            setupPanel();
+        }
+        private void setupPanel() {
+            tf.setEditable(false);
+            BrowseAction browseA = new BrowseAction(tf, false);
+            browse.addActionListener(browseA);
+            DownloadAction da = new DownloadAction(tf);
+            download.addActionListener(da);
+            DefaultFormBuilder builder = new DefaultFormBuilder
+                    (new FormLayout("fill:pref:grow, 4dlu, fill:pref, 4dlu, fill:pref, 4dlu, fill:pref, 4dlu, fill:pref", ""));
+            builder.append(tf);
+            builder.append(browse);
+            builder.append(download);
+            builder.append(view);
+            builder.append(clear);
+
+            pan = builder.getPanel();
+
+            view.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    try {
+                        JournalAbbreviations abbr = new JournalAbbreviations(new File(tf.getText()));
+                        JTable table = new JTable(abbr.getTableModel());
+                        JScrollPane pane = new JScrollPane(table);
+                        JOptionPane.showMessageDialog(null, pane, Globals.lang("Journal list preview"), JOptionPane.INFORMATION_MESSAGE);
+                    } catch (FileNotFoundException ex) {
+                        JOptionPane.showMessageDialog(null, Globals.lang("File '%0' not found", tf.getText()),
+                                Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+                    }
+                }
+            });
+            clear.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    externals.remove(ExternalFileEntry.this);
+                    buildExternalsPanel();
+                }
+            });
+            clear.setToolTipText(Globals.lang("Remove"));
+
+        }
+        public JPanel getPanel() { return pan; }
+        public String getValue() { return tf.getText(); }
+    }
+
+    class JournalEntry implements Comparable<JournalEntry> {
+        String name, abbreviation;
+        public JournalEntry(String name, String abbreviation) {
+            this.name = name;
+            this.abbreviation = abbreviation;
+        }
+        public int compareTo(JournalEntry other) {
+            return this.name.compareTo(other.name);
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/journals/UnabbreviateAction.java b/src/java/net/sf/jabref/journals/UnabbreviateAction.java
index 49a9520..178b3ea 100644
--- a/src/java/net/sf/jabref/journals/UnabbreviateAction.java
+++ b/src/java/net/sf/jabref/journals/UnabbreviateAction.java
@@ -1,71 +1,71 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.journals;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.AbstractWorker;
-import net.sf.jabref.undo.NamedCompound;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Sep 17, 2005
- * Time: 12:48:23 AM
- * To browseOld this template use File | Settings | File Templates.
- */
-public class UnabbreviateAction extends AbstractWorker {
-    BasePanel panel;
-    String message = "";
-
-    public UnabbreviateAction(BasePanel panel) {
-        this.panel = panel;
-    }
-
-
-    public void init() {
-        //  new FieldWeightDialog(frame).setVisible(true);
-        panel.output("Unabbreviating...");
-    }
-
-    public void run() {
-        //net.sf.jabref.journals.JournalList.downloadJournalList(frame);
-
-
-        BibtexEntry[] entries = panel.getSelectedEntries();
-        if (entries == null)
-            return;
-        NamedCompound ce = new NamedCompound("Unabbreviate journal names");
-        int count = 0;
-        for (int i = 0; i < entries.length; i++) {
-            if (Globals.journalAbbrev.unabbreviate(panel.database(), entries[i], "journal", ce))
-                count++;
-        }
-        if (count > 0) {
-            ce.end();
-            panel.undoManager.addEdit(ce);
-            panel.markBaseChanged();
-            message = Globals.lang("Unabbreviated %0 journal names.", String.valueOf(count));
-        } else {
-            message = Globals.lang("No journal names could be unabbreviated.");
-        }
-    }
-
-    public void update() {
-        panel.output(message);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.journals;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.AbstractWorker;
+import net.sf.jabref.undo.NamedCompound;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Sep 17, 2005
+ * Time: 12:48:23 AM
+ * To browseOld this template use File | Settings | File Templates.
+ */
+public class UnabbreviateAction extends AbstractWorker {
+    BasePanel panel;
+    String message = "";
+
+    public UnabbreviateAction(BasePanel panel) {
+        this.panel = panel;
+    }
+
+
+    public void init() {
+        //  new FieldWeightDialog(frame).setVisible(true);
+        panel.output("Unabbreviating...");
+    }
+
+    public void run() {
+        //net.sf.jabref.journals.JournalList.downloadJournalList(frame);
+
+
+        BibtexEntry[] entries = panel.getSelectedEntries();
+        if (entries == null)
+            return;
+        NamedCompound ce = new NamedCompound("Unabbreviate journal names");
+        int count = 0;
+        for (int i = 0; i < entries.length; i++) {
+            if (Globals.journalAbbrev.unabbreviate(panel.database(), entries[i], "journal", ce))
+                count++;
+        }
+        if (count > 0) {
+            ce.end();
+            panel.undoManager.addEdit(ce);
+            panel.markBaseChanged();
+            message = Globals.lang("Unabbreviated %0 journal names.", String.valueOf(count));
+        } else {
+            message = Globals.lang("No journal names could be unabbreviated.");
+        }
+    }
+
+    public void update() {
+        panel.output(message);
+    }
+}
diff --git a/src/java/net/sf/jabref/label/ArticleLabelRule.java b/src/java/net/sf/jabref/label/ArticleLabelRule.java
index a4edb55..d821af4 100644
--- a/src/java/net/sf/jabref/label/ArticleLabelRule.java
+++ b/src/java/net/sf/jabref/label/ArticleLabelRule.java
@@ -1,117 +1,117 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.label;
-
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexFields;
-
-public class ArticleLabelRule extends DefaultLabelRule {
-
-    // this is the rule used handle articles
-    // we try (first author last name)/(year)/(first unique journal word)
-    public String applyRule(BibtexEntry oldEntry){
-        String oldLabel = (oldEntry.getField(BibtexFields.KEY_FIELD)) ;
-        String newLabel = "" ;
-
-        String author="";
-
-        //## to be done: i need to check if the key is unique else need to make another one with suffix
-        try{
-            author=oldEntry.getField("author");
-            String[] tokens= author.split("\\band\\b");
-            if( tokens.length > 0){ // if author is empty
-                if(tokens[0].indexOf(",") > 0)
-                    tokens[0] = AuthorList.fixAuthor_firstNameFirst( tokens[0] ); // convert lastname, firstname to firstname lastname
-                String[] firstAuthor = tokens[0].replaceAll("\\s+"," ").split(" ");
-                // lastname, firstname
-
-                newLabel += firstAuthor[ firstAuthor.length-1];
-            }
-        }catch(Throwable t){
-            System.out.println("error getting author: "+t) ;
-        }
-
-        // use the year token
-        try{
-            if( ! newLabel.equals("")){
-                if( oldEntry.getField("year")!= null){
-                    newLabel += String.valueOf( oldEntry.getField("year")) ;
-                }
-            }else
-                newLabel=oldLabel; // don't make a key since there is no author
-        }catch(Throwable t){
-            System.out.println("error getting year: "+t) ;
-        }
-
-// now check for uniqueness
-// i need access to basepanes: checkForDuplicateKey
-
-//oldEntry.setField(Globals.KEY_FIELD,newLabel) ;
-        return newLabel ;
-
-
-/*
-// use the journal name
-// return the first token 4 wrds or longer, that's not journal
-// , society, or the like (using the Keyword class)
-try{
-
-if(oldEntry.getField("journal") != null) {
-authorTokens = new StringTokenizer( ((String) oldEntry.getField("journal")).replaceAll(","," ").replaceAll("/"," ")) ;
-String tempString = authorTokens.nextToken() ;
-tempString = tempString.replaceAll(",","") ;
-boolean done = false ;
-while(tempString!=null && !done ){
-tempString = tempString.replaceAll(",","").trim() ;
-if(tempString.trim().length() > 3 && !KeyWord.isKeyWord(tempString))  {
-done = true ;
-}
-else{
-
-if(authorTokens.hasMoreTokens()){
-tempString = authorTokens.nextToken() ;
-}else{
-done = true ;
-}
-}
-}
-
-if(tempString!=null && (tempString.indexOf("null")<0) ){
-newLabel += String.valueOf( tempString.toLowerCase()) ;
-}
-}
-}
-catch(Throwable t){  System.err.println(t) ; }
-*/
-
-    }
-
-
-//    public static void main(String args[]){
-//
-//        System.out.println(args[0]) ;
-//        BibtexEntry entry = new BibtexEntry("1",BibtexEntryType.ARTICLE) ;
-//        entry.setField("journal",args[0]) ;
-//        entry.setField("author","jones, b") ;
-//        entry.setField("year","1984") ;
-//        ArticleLabelRule rule = new ArticleLabelRule() ;
-//        entry = rule.applyRule(entry) ;
-//        System.out.println(entry.getField(BibtexBaseFrame.KEY_PROPERTY) );
-//
-//    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.label;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexFields;
+
+public class ArticleLabelRule extends DefaultLabelRule {
+
+    // this is the rule used handle articles
+    // we try (first author last name)/(year)/(first unique journal word)
+    public String applyRule(BibtexEntry oldEntry){
+        String oldLabel = (oldEntry.getField(BibtexFields.KEY_FIELD)) ;
+        String newLabel = "" ;
+
+        String author="";
+
+        //## to be done: i need to check if the key is unique else need to make another one with suffix
+        try{
+            author=oldEntry.getField("author");
+            String[] tokens= author.split("\\band\\b");
+            if( tokens.length > 0){ // if author is empty
+                if(tokens[0].indexOf(",") > 0)
+                    tokens[0] = AuthorList.fixAuthor_firstNameFirst( tokens[0] ); // convert lastname, firstname to firstname lastname
+                String[] firstAuthor = tokens[0].replaceAll("\\s+"," ").split(" ");
+                // lastname, firstname
+
+                newLabel += firstAuthor[ firstAuthor.length-1];
+            }
+        }catch(Throwable t){
+            System.out.println("error getting author: "+t) ;
+        }
+
+        // use the year token
+        try{
+            if( ! newLabel.equals("")){
+                if( oldEntry.getField("year")!= null){
+                    newLabel += String.valueOf( oldEntry.getField("year")) ;
+                }
+            }else
+                newLabel=oldLabel; // don't make a key since there is no author
+        }catch(Throwable t){
+            System.out.println("error getting year: "+t) ;
+        }
+
+// now check for uniqueness
+// i need access to basepanes: checkForDuplicateKey
+
+//oldEntry.setField(Globals.KEY_FIELD,newLabel) ;
+        return newLabel ;
+
+
+/*
+// use the journal name
+// return the first token 4 wrds or longer, that's not journal
+// , society, or the like (using the Keyword class)
+try{
+
+if(oldEntry.getField("journal") != null) {
+authorTokens = new StringTokenizer( ((String) oldEntry.getField("journal")).replaceAll(","," ").replaceAll("/"," ")) ;
+String tempString = authorTokens.nextToken() ;
+tempString = tempString.replaceAll(",","") ;
+boolean done = false ;
+while(tempString!=null && !done ){
+tempString = tempString.replaceAll(",","").trim() ;
+if(tempString.trim().length() > 3 && !KeyWord.isKeyWord(tempString))  {
+done = true ;
+}
+else{
+
+if(authorTokens.hasMoreTokens()){
+tempString = authorTokens.nextToken() ;
+}else{
+done = true ;
+}
+}
+}
+
+if(tempString!=null && (tempString.indexOf("null")<0) ){
+newLabel += String.valueOf( tempString.toLowerCase()) ;
+}
+}
+}
+catch(Throwable t){  System.err.println(t) ; }
+*/
+
+    }
+
+
+//    public static void main(String args[]){
+//
+//        System.out.println(args[0]) ;
+//        BibtexEntry entry = new BibtexEntry("1",BibtexEntryType.ARTICLE) ;
+//        entry.setField("journal",args[0]) ;
+//        entry.setField("author","jones, b") ;
+//        entry.setField("year","1984") ;
+//        ArticleLabelRule rule = new ArticleLabelRule() ;
+//        entry = rule.applyRule(entry) ;
+//        System.out.println(entry.getField(BibtexBaseFrame.KEY_PROPERTY) );
+//
+//    }
+
+}
diff --git a/src/java/net/sf/jabref/label/BookLabelRule.java b/src/java/net/sf/jabref/label/BookLabelRule.java
index 3d09b3a..2474dbc 100644
--- a/src/java/net/sf/jabref/label/BookLabelRule.java
+++ b/src/java/net/sf/jabref/label/BookLabelRule.java
@@ -1,70 +1,70 @@
-/*
-Copyright (C) 2003 Nathan Dunn, Morten O. Alver, Nizar N. Batada
-
-All programs in this directory and
-subdirectories are published under the GNU General Public License as
-described below.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA
-
-Further information about the GNU GPL is available at:
-http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-package net.sf.jabref.label;
-
-import java.util.StringTokenizer;
-
-import net.sf.jabref.BibtexEntry;
-
-public class BookLabelRule extends DefaultLabelRule {
-
-    // this is the rule used handle articles
-    // we try (first author)/(year)
-    public String applyRule(BibtexEntry oldEntry) {
-        String newLabel = "";
-
-        StringTokenizer authorTokens = null;
-        // use the author token
-        try {
-            if (oldEntry.getField("author") != null) {
-                authorTokens = new StringTokenizer(oldEntry.getField("author"),
-                    ",");
-            } else if (oldEntry.getField("editor") != null) {
-                authorTokens = new StringTokenizer(oldEntry.getField("editor"),
-                    ",");
-            }
-            if (authorTokens != null)
-                newLabel += authorTokens.nextToken().toLowerCase();
-        } catch (Throwable t) {
-            System.out.println("error getting author/editor: " + t);
-        }
-
-        // use the year token
-        try {
-            if (oldEntry.getField("year") != null) {
-                newLabel += String.valueOf(oldEntry.getField("year"));
-            }
-        } catch (Throwable t) {
-            System.out.println("error getting author: " + t);
-        }
-
-        newLabel += "book";
-
-        return newLabel;
-    }
-
-}
+/*
+Copyright (C) 2003 Nathan Dunn, Morten O. Alver, Nizar N. Batada
+
+All programs in this directory and
+subdirectories are published under the GNU General Public License as
+described below.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
+
+Further information about the GNU GPL is available at:
+http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+package net.sf.jabref.label;
+
+import java.util.StringTokenizer;
+
+import net.sf.jabref.BibtexEntry;
+
+public class BookLabelRule extends DefaultLabelRule {
+
+    // this is the rule used handle articles
+    // we try (first author)/(year)
+    public String applyRule(BibtexEntry oldEntry) {
+        String newLabel = "";
+
+        StringTokenizer authorTokens = null;
+        // use the author token
+        try {
+            if (oldEntry.getField("author") != null) {
+                authorTokens = new StringTokenizer(oldEntry.getField("author"),
+                    ",");
+            } else if (oldEntry.getField("editor") != null) {
+                authorTokens = new StringTokenizer(oldEntry.getField("editor"),
+                    ",");
+            }
+            if (authorTokens != null)
+                newLabel += authorTokens.nextToken().toLowerCase();
+        } catch (Throwable t) {
+            System.out.println("error getting author/editor: " + t);
+        }
+
+        // use the year token
+        try {
+            if (oldEntry.getField("year") != null) {
+                newLabel += String.valueOf(oldEntry.getField("year"));
+            }
+        } catch (Throwable t) {
+            System.out.println("error getting author: " + t);
+        }
+
+        newLabel += "book";
+
+        return newLabel;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/label/DefaultLabelRule.java b/src/java/net/sf/jabref/label/DefaultLabelRule.java
index c36f2dd..ae53aaf 100644
--- a/src/java/net/sf/jabref/label/DefaultLabelRule.java
+++ b/src/java/net/sf/jabref/label/DefaultLabelRule.java
@@ -1,30 +1,30 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.label;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexFields;
-
-public class DefaultLabelRule implements LabelRule {
-
-
-    // the default rule is that oit simply returns what it was given
-    public String applyRule(BibtexEntry oldEntry){
-        return oldEntry.getField(BibtexFields.KEY_FIELD);
-    }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.label;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexFields;
+
+public class DefaultLabelRule implements LabelRule {
+
+
+    // the default rule is that oit simply returns what it was given
+    public String applyRule(BibtexEntry oldEntry){
+        return oldEntry.getField(BibtexFields.KEY_FIELD);
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/label/HandleDuplicateWarnings.java b/src/java/net/sf/jabref/label/HandleDuplicateWarnings.java
index 981781f..6375721 100644
--- a/src/java/net/sf/jabref/label/HandleDuplicateWarnings.java
+++ b/src/java/net/sf/jabref/label/HandleDuplicateWarnings.java
@@ -1,46 +1,46 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.label;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Globals;
-import net.sf.jabref.imports.ParserResult;
-import net.sf.jabref.imports.PostOpenAction;
-import net.sf.jabref.labelPattern.SearchFixDuplicateLabels;
-
-import javax.swing.*;
-
-/**
- * PostOpenAction that checks whether there are warnings about duplicate BibTeX keys, and
- * if so, offers to start the duplicate resolving process.
- */
-public class HandleDuplicateWarnings implements PostOpenAction {
-
-
-    public boolean isActionNecessary(ParserResult pr) {
-        return pr.hasDuplicateKeys();
-    }
-
-    public void performAction(BasePanel panel, ParserResult pr) {
-        int answer = JOptionPane.showConfirmDialog(null,
-                "<html><p>"+Globals.lang("This database contains one or more duplicated BibTeX keys.")
-                +"</p><p>"+Globals.lang("Do you want to resolve duplicate keys now?"),
-                Globals.lang("Duplicate BibTeX key"), JOptionPane.YES_NO_OPTION);
-        if (answer == JOptionPane.YES_OPTION) {
-            panel.runCommand("resolveDuplicateKeys");
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.label;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Globals;
+import net.sf.jabref.imports.ParserResult;
+import net.sf.jabref.imports.PostOpenAction;
+import net.sf.jabref.labelPattern.SearchFixDuplicateLabels;
+
+import javax.swing.*;
+
+/**
+ * PostOpenAction that checks whether there are warnings about duplicate BibTeX keys, and
+ * if so, offers to start the duplicate resolving process.
+ */
+public class HandleDuplicateWarnings implements PostOpenAction {
+
+
+    public boolean isActionNecessary(ParserResult pr) {
+        return pr.hasDuplicateKeys();
+    }
+
+    public void performAction(BasePanel panel, ParserResult pr) {
+        int answer = JOptionPane.showConfirmDialog(null,
+                "<html><p>"+Globals.lang("This database contains one or more duplicated BibTeX keys.")
+                +"</p><p>"+Globals.lang("Do you want to resolve duplicate keys now?"),
+                Globals.lang("Duplicate BibTeX key"), JOptionPane.YES_NO_OPTION);
+        if (answer == JOptionPane.YES_OPTION) {
+            panel.runCommand("resolveDuplicateKeys");
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/label/IncollectionLabelRule.java b/src/java/net/sf/jabref/label/IncollectionLabelRule.java
index bc5113b..2a69db0 100644
--- a/src/java/net/sf/jabref/label/IncollectionLabelRule.java
+++ b/src/java/net/sf/jabref/label/IncollectionLabelRule.java
@@ -1,30 +1,30 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.label;
-
-
-public class IncollectionLabelRule extends ArticleLabelRule {
-
-    // this is the rule used handle articles
-    // we try (first author)/(year)
-
-    // Same thing as the ArticleLabelRule
-//    public BibtexEntry applyRule(BibtexEntry oldEntry){
-//    }
-//
-
-    
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.label;
+
+
+public class IncollectionLabelRule extends ArticleLabelRule {
+
+    // this is the rule used handle articles
+    // we try (first author)/(year)
+
+    // Same thing as the ArticleLabelRule
+//    public BibtexEntry applyRule(BibtexEntry oldEntry){
+//    }
+//
+
+    
+}
diff --git a/src/java/net/sf/jabref/label/InproceedingsLabelRule.java b/src/java/net/sf/jabref/label/InproceedingsLabelRule.java
index 39e0896..015859f 100644
--- a/src/java/net/sf/jabref/label/InproceedingsLabelRule.java
+++ b/src/java/net/sf/jabref/label/InproceedingsLabelRule.java
@@ -1,84 +1,84 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.label;
-
-import java.util.StringTokenizer;
-
-import net.sf.jabref.BibtexEntry;
-
-public class InproceedingsLabelRule extends DefaultLabelRule {
-
-    // this is the rule used handle articles
-    // we try (first author)/(year)/(first unique booktitle word)
-    public String applyRule(BibtexEntry oldEntry){
-        String newLabel = "" ;
-
-        StringTokenizer authorTokens = null ;
-        // use the author token
-        try{
-            authorTokens= new StringTokenizer(oldEntry.getField("author"),",") ;
-            newLabel += authorTokens.nextToken().toLowerCase().replaceAll(" ","").replaceAll("\\.","")   ;
-        }catch(Throwable t){
-                        System.out.println("error getting author: "+t) ;
-        }
-
-        // use the year token
-        try{
-            if( oldEntry.getField("year")!= null){
-                newLabel += String.valueOf( oldEntry.getField("year")) ;
-            }
-        }catch(Throwable t){
-                        System.out.println("error getting year: "+t) ;
-        }
-
-        // use the booktitle name
-        // return the first token 4 wrds or longer, that's not a keyword
-        try{
-
-          if(oldEntry.getField("booktitle") != null) {
-            authorTokens = new StringTokenizer( (oldEntry.getField("booktitle")).replaceAll(","," ").replaceAll("/"," ")) ;
-            String tempString = authorTokens.nextToken() ;
-            tempString = tempString.replaceAll(",","") ;
-            boolean done = false ;
-            while(tempString!=null && !done ){
-                tempString = tempString.replaceAll(",","").trim() ;
-                if(tempString.trim().length() > 3 && !KeyWord.getKeyWord().isKeyWord(tempString))  {
-                    done = true ;
-                }
-                else{
-
-                    if(authorTokens.hasMoreTokens()){
-                        tempString = authorTokens.nextToken() ;
-                    }else{
-                        done = true ;
-                    }
-                }
-            }
-
-            if(tempString!=null && (tempString.indexOf("null")<0) ){
-                newLabel += String.valueOf( tempString.toLowerCase()) ;
-            }
-          }
-        }
-        catch(Throwable t){  System.err.println(t) ; }
-
-        //	oldEntry.setField(Globals.KEY_FIELD,newLabel) ;
-        return newLabel;
-    }
-
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.label;
+
+import java.util.StringTokenizer;
+
+import net.sf.jabref.BibtexEntry;
+
+public class InproceedingsLabelRule extends DefaultLabelRule {
+
+    // this is the rule used handle articles
+    // we try (first author)/(year)/(first unique booktitle word)
+    public String applyRule(BibtexEntry oldEntry){
+        String newLabel = "" ;
+
+        StringTokenizer authorTokens = null ;
+        // use the author token
+        try{
+            authorTokens= new StringTokenizer(oldEntry.getField("author"),",") ;
+            newLabel += authorTokens.nextToken().toLowerCase().replaceAll(" ","").replaceAll("\\.","")   ;
+        }catch(Throwable t){
+                        System.out.println("error getting author: "+t) ;
+        }
+
+        // use the year token
+        try{
+            if( oldEntry.getField("year")!= null){
+                newLabel += String.valueOf( oldEntry.getField("year")) ;
+            }
+        }catch(Throwable t){
+                        System.out.println("error getting year: "+t) ;
+        }
+
+        // use the booktitle name
+        // return the first token 4 wrds or longer, that's not a keyword
+        try{
+
+          if(oldEntry.getField("booktitle") != null) {
+            authorTokens = new StringTokenizer( (oldEntry.getField("booktitle")).replaceAll(","," ").replaceAll("/"," ")) ;
+            String tempString = authorTokens.nextToken() ;
+            tempString = tempString.replaceAll(",","") ;
+            boolean done = false ;
+            while(tempString!=null && !done ){
+                tempString = tempString.replaceAll(",","").trim() ;
+                if(tempString.trim().length() > 3 && !KeyWord.getKeyWord().isKeyWord(tempString))  {
+                    done = true ;
+                }
+                else{
+
+                    if(authorTokens.hasMoreTokens()){
+                        tempString = authorTokens.nextToken() ;
+                    }else{
+                        done = true ;
+                    }
+                }
+            }
+
+            if(tempString!=null && (tempString.indexOf("null")<0) ){
+                newLabel += String.valueOf( tempString.toLowerCase()) ;
+            }
+          }
+        }
+        catch(Throwable t){  System.err.println(t) ; }
+
+        //	oldEntry.setField(Globals.KEY_FIELD,newLabel) ;
+        return newLabel;
+    }
+
+
+
+}
diff --git a/src/java/net/sf/jabref/label/KeyWord.java b/src/java/net/sf/jabref/label/KeyWord.java
index 750cf4b..b26c816 100644
--- a/src/java/net/sf/jabref/label/KeyWord.java
+++ b/src/java/net/sf/jabref/label/KeyWord.java
@@ -1,63 +1,63 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.label;
-
-import java.util.HashSet;
-
-public class KeyWord extends HashSet<String> {
-
-	private static KeyWord singleton;
-
-	private KeyWord() {
-		// puts all keywords in
-		add("society");
-		add("transaction");
-		add("transactions");
-		add("journal");
-		add("review");
-		add("revue");
-		add("communication");
-		add("communications");
-		add("letters");
-		add("advances");
-		add("proceedings");
-		add("proceeding");
-		add("international");
-		add("joint");
-		add("conference");
-	}
- 
-	public static KeyWord getKeyWord() {
-		if (singleton == null)
-			singleton = new KeyWord();
-		return singleton;
-	}
-
-	public boolean isKeyWord(String matchWord) {
-		if (contains(matchWord.toLowerCase())) {
-			return true;
-		}
-		return false;
-	}
-
-	public boolean isKeyWordMatchCase(String matchWord) {
-		if (contains(matchWord)) {
-			return true;
-		}
-		return false;
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.label;
+
+import java.util.HashSet;
+
+public class KeyWord extends HashSet<String> {
+
+	private static KeyWord singleton;
+
+	private KeyWord() {
+		// puts all keywords in
+		add("society");
+		add("transaction");
+		add("transactions");
+		add("journal");
+		add("review");
+		add("revue");
+		add("communication");
+		add("communications");
+		add("letters");
+		add("advances");
+		add("proceedings");
+		add("proceeding");
+		add("international");
+		add("joint");
+		add("conference");
+	}
+ 
+	public static KeyWord getKeyWord() {
+		if (singleton == null)
+			singleton = new KeyWord();
+		return singleton;
+	}
+
+	public boolean isKeyWord(String matchWord) {
+		if (contains(matchWord.toLowerCase())) {
+			return true;
+		}
+		return false;
+	}
+
+	public boolean isKeyWordMatchCase(String matchWord) {
+		if (contains(matchWord)) {
+			return true;
+		}
+		return false;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/label/LabelMaker.java b/src/java/net/sf/jabref/label/LabelMaker.java
index 6ad1320..7f75c5c 100644
--- a/src/java/net/sf/jabref/label/LabelMaker.java
+++ b/src/java/net/sf/jabref/label/LabelMaker.java
@@ -1,76 +1,76 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.label;
-
-import java.util.Hashtable;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.Util;
-
-
-/**
- *  This class is the abstract class which contains all of the rules
- *  for making the different types of Rules.
- */
-public class LabelMaker {
-
-    public BibtexEntry applyRule(BibtexEntry newEntry, BibtexDatabase base){
-	String newKey = "";
-        if(ruleTable.containsKey(newEntry.getType().getName())){
-            newKey = ruleTable.get(newEntry.getType().getName()).applyRule(newEntry) ;
-        }
-        else{
-		newKey = applyDefaultRule(newEntry) ;
-        }
-
-	// Remove all illegal characters from the key.
-	newKey = Util.checkLegalKey(newKey);
-
-	// Try new keys until we get a unique one:
-	if (base.setCiteKeyForEntry(newEntry.getId(), newKey)) {
-	    
-	    char c = 'b';
-	    String modKey = newKey+"a";
-	    while (base.setCiteKeyForEntry(newEntry.getId(), modKey))
-		modKey = newKey+((c++));	    
-	}
-
-	//newEntry.setField(Globals.KEY_FIELD, newKey);
-	// ...
-
-		return newEntry ;
-    }
-
-    public void setDefaultRule(LabelRule newRule) {
-		defaultRule = newRule ;
-    }
-
-    public String applyDefaultRule(BibtexEntry newEntry) {
-        return defaultRule.applyRule(newEntry) ;
-    }
-
-
-    // there should be a default rule for any type
-    public void addRule(LabelRule rule,BibtexEntryType type){
-       ruleTable.put(type.getName(),rule) ;
-    }
-
-    protected LabelRule defaultRule = new ArticleLabelRule() ;
-    protected Hashtable<String, LabelRule> ruleTable = new Hashtable<String, LabelRule>() ;
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.label;
+
+import java.util.Hashtable;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.Util;
+
+
+/**
+ *  This class is the abstract class which contains all of the rules
+ *  for making the different types of Rules.
+ */
+public class LabelMaker {
+
+    public BibtexEntry applyRule(BibtexEntry newEntry, BibtexDatabase base){
+	String newKey = "";
+        if(ruleTable.containsKey(newEntry.getType().getName())){
+            newKey = ruleTable.get(newEntry.getType().getName()).applyRule(newEntry) ;
+        }
+        else{
+		newKey = applyDefaultRule(newEntry) ;
+        }
+
+	// Remove all illegal characters from the key.
+	newKey = Util.checkLegalKey(newKey);
+
+	// Try new keys until we get a unique one:
+	if (base.setCiteKeyForEntry(newEntry.getId(), newKey)) {
+	    
+	    char c = 'b';
+	    String modKey = newKey+"a";
+	    while (base.setCiteKeyForEntry(newEntry.getId(), modKey))
+		modKey = newKey+((c++));	    
+	}
+
+	//newEntry.setField(Globals.KEY_FIELD, newKey);
+	// ...
+
+		return newEntry ;
+    }
+
+    public void setDefaultRule(LabelRule newRule) {
+		defaultRule = newRule ;
+    }
+
+    public String applyDefaultRule(BibtexEntry newEntry) {
+        return defaultRule.applyRule(newEntry) ;
+    }
+
+
+    // there should be a default rule for any type
+    public void addRule(LabelRule rule,BibtexEntryType type){
+       ruleTable.put(type.getName(),rule) ;
+    }
+
+    protected LabelRule defaultRule = new ArticleLabelRule() ;
+    protected Hashtable<String, LabelRule> ruleTable = new Hashtable<String, LabelRule>() ;
+
+}
diff --git a/src/java/net/sf/jabref/label/LabelRule.java b/src/java/net/sf/jabref/label/LabelRule.java
index 3fd151c..2e9b797 100644
--- a/src/java/net/sf/jabref/label/LabelRule.java
+++ b/src/java/net/sf/jabref/label/LabelRule.java
@@ -1,26 +1,26 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.label;
-
-import net.sf.jabref.BibtexEntry;
-
-public interface LabelRule{
-
-    // the default rule is that oit simply returns what it was given
-    public String applyRule(BibtexEntry oldEntry) ;
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.label;
+
+import net.sf.jabref.BibtexEntry;
+
+public interface LabelRule{
+
+    // the default rule is that oit simply returns what it was given
+    public String applyRule(BibtexEntry oldEntry) ;
+
+
+}
diff --git a/src/java/net/sf/jabref/labelPattern/LabelPattern.java b/src/java/net/sf/jabref/labelPattern/LabelPattern.java
index 80274e7..88f8442 100644
--- a/src/java/net/sf/jabref/labelPattern/LabelPattern.java
+++ b/src/java/net/sf/jabref/labelPattern/LabelPattern.java
@@ -1,144 +1,144 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.labelPattern;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-
-/**
- * A small table, where an entry type is associated with a label pattern (an
- * <code>ArrayList</code>). A parent LabelPattern can be set.
- * 
- * @author Ulrik Stervbo (ulriks AT ruc.dk)
- */
-public class LabelPattern extends Hashtable<String, ArrayList<String>> {
-
-    private ArrayList<String> defaultPattern = null;
-    
-    /**
-     * The parent of this LabelPattern.
-     */
-    protected LabelPattern parent = null;
-
-    public LabelPattern() {
-    }
-
-    public LabelPattern(LabelPattern parent) {
-        this.parent = parent;
-    }
-
-    /**
-     * Sets the parent LabelPattern.
-     * 
-     * @param parent
-     *            a <code>String</code>
-     */
-    public void setParent(LabelPattern parent) {
-        this.parent = parent;
-    }
-
-    /**
-     * Get the parent LabelPattern
-     * 
-     * @return the parent LabelPattern
-     */
-    public LabelPattern getParent() {
-        return parent;
-    }
-
-    public void addLabelPattern(String type, String pattern) {
-        put(type, LabelPatternUtil.split(pattern));
-    }
-
-    /**
-     * Remove a label pattern from the LabelPattern. No key patterns can be
-     * removed from the very parent LabelPattern since is thought of as a
-     * default. To do this, use the removeKeyPattern(String type, boolean sure)
-     * 
-     * @param type
-     *            a <code>String</code>
-     */
-    public void removeLabelPattern(String type) {
-        if (containsKey(type) && parent != null) {
-            remove(type);
-        }
-    }
-
-    public void removeLabelPattern(String type, boolean sure) {
-
-        if (containsKey(type) && sure) {
-            remove(type);
-        }
-    }
-
-    /**
-     * Gets an object for a desired label from this LabelPattern or one of it's
-     * parents. This method first tries to obtain the object from this
-     * LabelPattern via the <code>get</code> method of <code>Hashtable</code>.
-     * If this fails, we try the default.<br />
-     * If that fails, we try the parent.<br />
-     * If that fails, we return the DEFAULT_LABELPATTERN<br />
-     * 
-     * @param key a <code>String</code>
-     * @return the list of Strings for the given key
-     */
-    public final ArrayList<String> getValue(String key) {
-        ArrayList<String> result = get(key);
-        // Test to see if we found anything
-        if (result == null) {
-            // check default value
-            result = getDefaultValue();
-            if (result == null) {
-                // no default value, ask parent
-                if (parent != null) {
-                    result = parent.getValue(key);
-                    // parent will definitely return something != null
-                } else {
-                    // we are the "last" parent
-                    // we don't have anything left
-                    // return the global default pattern
-                    return LabelPatternUtil.DEFAULT_LABELPATTERN;
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Checks whether this pattern is customized or the default value.
-     */
-    public final boolean isDefaultValue(String key) {
-        Object _obj = get(key);
-        return _obj == null;
-    }
-    
-    /**
-     * This method is called "...Value" to be in line with the other methods
-     * @return
-     */
-    public ArrayList<String> getDefaultValue() {
-        return this.defaultPattern;
-    }
-
-    /**
-     * Sets the DEFAULT PATTERN for this label pattern
-     * @param pattern the pattern to store
-     */
-    public void setDefaultValue(String labelPattern) {
-        ArrayList<String> split = LabelPatternUtil.split(labelPattern);
-        this.defaultPattern = split;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.labelPattern;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+/**
+ * A small table, where an entry type is associated with a label pattern (an
+ * <code>ArrayList</code>). A parent LabelPattern can be set.
+ * 
+ * @author Ulrik Stervbo (ulriks AT ruc.dk)
+ */
+public class LabelPattern extends Hashtable<String, ArrayList<String>> {
+
+    private ArrayList<String> defaultPattern = null;
+    
+    /**
+     * The parent of this LabelPattern.
+     */
+    protected LabelPattern parent = null;
+
+    public LabelPattern() {
+    }
+
+    public LabelPattern(LabelPattern parent) {
+        this.parent = parent;
+    }
+
+    /**
+     * Sets the parent LabelPattern.
+     * 
+     * @param parent
+     *            a <code>String</code>
+     */
+    public void setParent(LabelPattern parent) {
+        this.parent = parent;
+    }
+
+    /**
+     * Get the parent LabelPattern
+     * 
+     * @return the parent LabelPattern
+     */
+    public LabelPattern getParent() {
+        return parent;
+    }
+
+    public void addLabelPattern(String type, String pattern) {
+        put(type, LabelPatternUtil.split(pattern));
+    }
+
+    /**
+     * Remove a label pattern from the LabelPattern. No key patterns can be
+     * removed from the very parent LabelPattern since is thought of as a
+     * default. To do this, use the removeKeyPattern(String type, boolean sure)
+     * 
+     * @param type
+     *            a <code>String</code>
+     */
+    public void removeLabelPattern(String type) {
+        if (containsKey(type) && parent != null) {
+            remove(type);
+        }
+    }
+
+    public void removeLabelPattern(String type, boolean sure) {
+
+        if (containsKey(type) && sure) {
+            remove(type);
+        }
+    }
+
+    /**
+     * Gets an object for a desired label from this LabelPattern or one of it's
+     * parents. This method first tries to obtain the object from this
+     * LabelPattern via the <code>get</code> method of <code>Hashtable</code>.
+     * If this fails, we try the default.<br />
+     * If that fails, we try the parent.<br />
+     * If that fails, we return the DEFAULT_LABELPATTERN<br />
+     * 
+     * @param key a <code>String</code>
+     * @return the list of Strings for the given key
+     */
+    public final ArrayList<String> getValue(String key) {
+        ArrayList<String> result = get(key);
+        // Test to see if we found anything
+        if (result == null) {
+            // check default value
+            result = getDefaultValue();
+            if (result == null) {
+                // no default value, ask parent
+                if (parent != null) {
+                    result = parent.getValue(key);
+                    // parent will definitely return something != null
+                } else {
+                    // we are the "last" parent
+                    // we don't have anything left
+                    // return the global default pattern
+                    return LabelPatternUtil.DEFAULT_LABELPATTERN;
+                }
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Checks whether this pattern is customized or the default value.
+     */
+    public final boolean isDefaultValue(String key) {
+        Object _obj = get(key);
+        return _obj == null;
+    }
+    
+    /**
+     * This method is called "...Value" to be in line with the other methods
+     * @return
+     */
+    public ArrayList<String> getDefaultValue() {
+        return this.defaultPattern;
+    }
+
+    /**
+     * Sets the DEFAULT PATTERN for this label pattern
+     * @param pattern the pattern to store
+     */
+    public void setDefaultValue(String labelPattern) {
+        ArrayList<String> split = LabelPatternUtil.split(labelPattern);
+        this.defaultPattern = split;
+    }
+}
diff --git a/src/java/net/sf/jabref/labelPattern/LabelPatternPanel.java b/src/java/net/sf/jabref/labelPattern/LabelPatternPanel.java
index eb76d75..9c79788 100644
--- a/src/java/net/sf/jabref/labelPattern/LabelPatternPanel.java
+++ b/src/java/net/sf/jabref/labelPattern/LabelPatternPanel.java
@@ -1,280 +1,280 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.labelPattern;
-
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.JButton;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JScrollPane;
-import javax.swing.JTextField;
-
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.HelpAction;
-import net.sf.jabref.HelpDialog;
-import net.sf.jabref.Util;
-
-public class LabelPatternPanel  extends JPanel {
-    
-    // used by both LabelPatternPanel and TabLabelPAttern
-    protected GridBagLayout gbl = new GridBagLayout();
-    protected GridBagConstraints con = new GridBagConstraints();
-
-    private HelpAction help;
-
-    private JButton btnDefaultAll, btnDefault;
-
-    private JLabel lblEntryType, lblKeyPattern;
-
-    // default pattern
-    protected JTextField defaultPat = new JTextField();
-    
-    // one field for each type
-    private HashMap<String, JTextField> textFields = new HashMap<String, JTextField>();
-
-    public LabelPatternPanel(HelpDialog helpDiag) {
-        help = new HelpAction(helpDiag, GUIGlobals.labelPatternHelp, "Help on key patterns");
-        buildGUI();
-    }
-    
-    private void buildGUI() {
-        JPanel pan = new JPanel();
-        JScrollPane sp = new JScrollPane(pan);
-        sp.setPreferredSize(new Dimension(100,100));
-        sp.setBorder(BorderFactory.createEmptyBorder());
-        pan.setLayout(gbl);
-        setLayout(gbl);     
-        // The header - can be removed
-        lblEntryType = new JLabel(Globals.lang("Entry type"));
-        Font f = new Font("plain", Font.BOLD, 12);
-        lblEntryType.setFont(f);
-        con.gridx = 0;
-        con.gridy = 0;
-        con.gridwidth = 1;
-        con.gridheight = 1;
-        con.fill = GridBagConstraints.VERTICAL;
-        con.anchor = GridBagConstraints.WEST;
-        con.insets = new Insets( 5,5,10,0 );
-        gbl.setConstraints( lblEntryType, con );
-        pan. add( lblEntryType );
-        
-        lblKeyPattern = new JLabel(Globals.lang("Key pattern"));
-        lblKeyPattern.setFont(f);
-        con.gridx = 1;
-        con.gridy = 0;
-        //con.gridwidth = 2;
-        con.gridheight = 1;
-        con.fill = GridBagConstraints.HORIZONTAL;
-        con.anchor = GridBagConstraints.WEST;
-        con.insets = new Insets( 5,5,10,5 );
-        gbl.setConstraints( lblKeyPattern, con );
-        pan.add( lblKeyPattern );
-
-
-        con.gridy = 1;
-        con.gridx = 0;
-        JLabel lab = new JLabel(Globals.lang("Default pattern"));
-        gbl.setConstraints(lab, con);
-        pan.add(lab);
-        con.gridx = 1;
-        gbl.setConstraints(defaultPat, con);
-        pan.add(defaultPat);
-        con.insets = new Insets( 5,5,10,5 );
-        btnDefault = new JButton(Globals.lang("Default"));
-        btnDefault.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                defaultPat.setText((String)Globals.prefs.defaults.get("defaultLabelPattern"));
-            }
-        });
-        con.gridx = 2;
-        int y = 2;
-        gbl.setConstraints(btnDefault, con);
-        pan.add(btnDefault);
-
-        for (String s : BibtexEntryType.ALL_TYPES.keySet()) {
-            textFields.put(s, addEntryType(pan, s, y));
-            y++;
-        }
-
-        con.fill = GridBagConstraints.BOTH;
-        con.gridx = 0;
-        con.gridy = 1;
-        con.gridwidth = 3;
-        con.weightx = 1;
-        con.weighty = 1;
-        gbl.setConstraints(sp, con );
-        add(sp);
-
-        // A help button
-        con.gridwidth = 1;
-        con.gridx = 1;
-        con.gridy = 2;
-        con.fill = GridBagConstraints.HORIZONTAL;
-        //
-        con.weightx = 0;
-        con.weighty = 0;
-        con.anchor = GridBagConstraints.SOUTHEAST;
-        con.insets = new Insets( 0,5,0,5 );
-        JButton hlb = new JButton(GUIGlobals.getImage("helpSmall"));
-        hlb.setToolTipText(Globals.lang("Help on key patterns"));
-        gbl.setConstraints( hlb, con );
-        add(hlb);
-        hlb.addActionListener(help);
-        
-        // And finally a button to reset everything
-        btnDefaultAll = new JButton(Globals.lang("Reset all"));
-        con.gridx = 2;
-        con.gridy = 2;
-        
-        //con.fill = GridBagConstraints.BOTH;
-        con.weightx = 1;
-        con.weighty = 0;
-        con.anchor = GridBagConstraints.SOUTHEAST;
-        con.insets = new Insets( 20,5,0,5 );
-        gbl.setConstraints( btnDefaultAll, con );
-        btnDefaultAll.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent arg0) {
-                // reset all fields
-                Iterator<String> i=textFields.keySet().iterator();
-                while (i.hasNext()) {
-                    String s = i.next();
-                    JTextField tf = textFields.get(s);
-                    tf.setText("");
-                }
-                
-                // also reset the default pattern
-                defaultPat.setText((String)Globals.prefs.defaults.get("defaultLabelPattern"));
-            }
-        });
-        add( btnDefaultAll );
-    }
-
-    private  JTextField addEntryType(Container c, String name, int y) { 
-
-        JLabel lab = new JLabel(Util.nCase(name));
-        name = name.toLowerCase();
-        con.gridx = 0;
-        con.gridy = y;
-        con.fill = GridBagConstraints.BOTH;
-        con.weightx = 0;
-        con.weighty = 0;
-        con.anchor = GridBagConstraints.WEST;
-        con.insets = new Insets( 0,5,0,5 );
-        gbl.setConstraints( lab, con );
-        c.add( lab );
-        
-        JTextField tf = new JTextField();//_keypatterns.getValue(name).get(0).toString());
-        tf.setColumns( 15 );
-        con.gridx = 1;
-        con.fill = GridBagConstraints.HORIZONTAL;
-        con.weightx = 1;
-        con.weighty = 0;
-        con.anchor = GridBagConstraints.CENTER;
-        con.insets = new Insets( 0,5,0,5 );
-        gbl.setConstraints( tf, con );
-        c.add( tf );    
-        
-        JButton but = new JButton( Globals.lang("Default") );
-        con.gridx = 2;
-        con.fill = GridBagConstraints.BOTH;
-        con.weightx = 0;
-        con.weighty = 0;
-        con.anchor = GridBagConstraints.CENTER;
-        con.insets = new Insets( 0,5,0,5 );
-        gbl.setConstraints( but, con );
-        but.setActionCommand(name);
-        but.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                JTextField tf = textFields.get(e.getActionCommand());
-                tf.setText("");
-            }
-        });
-        c.add(but);
-
-        return tf;
-    }
-
-    /**
-     * @return the LabelPattern generated from the text fields 
-     */
-    public LabelPattern getLabelPattern() {
-        LabelPattern keypatterns = new LabelPattern();
-        
-        // each entry type
-        Iterator<String> i=textFields.keySet().iterator();
-        while (i.hasNext()) {
-            String s = i.next(),
-                text = textFields.get(s).getText();
-            if (!"".equals(text.trim()))
-                keypatterns.addLabelPattern(s, text);
-        }
-        
-        // default value
-        String text = defaultPat.getText();
-        if (!"".equals(text.trim())) { // we do not trim the value at the assignment to enable users to have spaces at the beginning and at the end of the pattern
-            keypatterns.setDefaultValue(text);
-        }
-        
-        return keypatterns;
-    }
-
-    /**
-     * Fills the current values to the text fields
-     * 
-     * @param keypatterns the LabelPattern to use as initial value
-     */
-    public void setValues(LabelPattern keypatterns) {
-        for (Iterator<String> i=textFields.keySet().iterator(); i.hasNext();) {
-            String name = i.next();
-            JTextField tf = textFields.get(name);
-            setValue(tf, name, keypatterns);
-        }
-        
-        if (keypatterns.getDefaultValue() == null) {
-            defaultPat.setText("");
-        } else {
-            defaultPat.setText(keypatterns.getDefaultValue().get(0));
-        }
-    }
-    
-    private void setValue(JTextField tf, String fieldName, LabelPattern keypatterns) {
-        if (keypatterns.isDefaultValue(fieldName))
-            tf.setText("");
-        else {
-            //System.out.println(":: "+_keypatterns.getValue(fieldName).get(0).toString());
-            tf.setText(keypatterns.getValue(fieldName).get(0).toString());
-        }
-    }
-
-
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.labelPattern;
+
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+import net.sf.jabref.help.HelpAction;
+import net.sf.jabref.help.HelpDialog;
+
+public class LabelPatternPanel  extends JPanel {
+    
+    // used by both LabelPatternPanel and TabLabelPAttern
+    protected GridBagLayout gbl = new GridBagLayout();
+    protected GridBagConstraints con = new GridBagConstraints();
+
+    private HelpAction help;
+
+    private JButton btnDefaultAll, btnDefault;
+
+    private JLabel lblEntryType, lblKeyPattern;
+
+    // default pattern
+    protected JTextField defaultPat = new JTextField();
+    
+    // one field for each type
+    private HashMap<String, JTextField> textFields = new HashMap<String, JTextField>();
+
+    public LabelPatternPanel(HelpDialog helpDiag) {
+        help = new HelpAction(helpDiag, GUIGlobals.labelPatternHelp, "Help on key patterns");
+        buildGUI();
+    }
+    
+    private void buildGUI() {
+        JPanel pan = new JPanel();
+        JScrollPane sp = new JScrollPane(pan);
+        sp.setPreferredSize(new Dimension(100,100));
+        sp.setBorder(BorderFactory.createEmptyBorder());
+        pan.setLayout(gbl);
+        setLayout(gbl);     
+        // The header - can be removed
+        lblEntryType = new JLabel(Globals.lang("Entry type"));
+        Font f = new Font("plain", Font.BOLD, 12);
+        lblEntryType.setFont(f);
+        con.gridx = 0;
+        con.gridy = 0;
+        con.gridwidth = 1;
+        con.gridheight = 1;
+        con.fill = GridBagConstraints.VERTICAL;
+        con.anchor = GridBagConstraints.WEST;
+        con.insets = new Insets( 5,5,10,0 );
+        gbl.setConstraints( lblEntryType, con );
+        pan. add( lblEntryType );
+        
+        lblKeyPattern = new JLabel(Globals.lang("Key pattern"));
+        lblKeyPattern.setFont(f);
+        con.gridx = 1;
+        con.gridy = 0;
+        //con.gridwidth = 2;
+        con.gridheight = 1;
+        con.fill = GridBagConstraints.HORIZONTAL;
+        con.anchor = GridBagConstraints.WEST;
+        con.insets = new Insets( 5,5,10,5 );
+        gbl.setConstraints( lblKeyPattern, con );
+        pan.add( lblKeyPattern );
+
+
+        con.gridy = 1;
+        con.gridx = 0;
+        JLabel lab = new JLabel(Globals.lang("Default pattern"));
+        gbl.setConstraints(lab, con);
+        pan.add(lab);
+        con.gridx = 1;
+        gbl.setConstraints(defaultPat, con);
+        pan.add(defaultPat);
+        con.insets = new Insets( 5,5,10,5 );
+        btnDefault = new JButton(Globals.lang("Default"));
+        btnDefault.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                defaultPat.setText((String)Globals.prefs.defaults.get("defaultLabelPattern"));
+            }
+        });
+        con.gridx = 2;
+        int y = 2;
+        gbl.setConstraints(btnDefault, con);
+        pan.add(btnDefault);
+
+        for (String s : BibtexEntryType.ALL_TYPES.keySet()) {
+            textFields.put(s, addEntryType(pan, s, y));
+            y++;
+        }
+
+        con.fill = GridBagConstraints.BOTH;
+        con.gridx = 0;
+        con.gridy = 1;
+        con.gridwidth = 3;
+        con.weightx = 1;
+        con.weighty = 1;
+        gbl.setConstraints(sp, con );
+        add(sp);
+
+        // A help button
+        con.gridwidth = 1;
+        con.gridx = 1;
+        con.gridy = 2;
+        con.fill = GridBagConstraints.HORIZONTAL;
+        //
+        con.weightx = 0;
+        con.weighty = 0;
+        con.anchor = GridBagConstraints.SOUTHEAST;
+        con.insets = new Insets( 0,5,0,5 );
+        JButton hlb = new JButton(GUIGlobals.getImage("helpSmall"));
+        hlb.setToolTipText(Globals.lang("Help on key patterns"));
+        gbl.setConstraints( hlb, con );
+        add(hlb);
+        hlb.addActionListener(help);
+        
+        // And finally a button to reset everything
+        btnDefaultAll = new JButton(Globals.lang("Reset all"));
+        con.gridx = 2;
+        con.gridy = 2;
+        
+        //con.fill = GridBagConstraints.BOTH;
+        con.weightx = 1;
+        con.weighty = 0;
+        con.anchor = GridBagConstraints.SOUTHEAST;
+        con.insets = new Insets( 20,5,0,5 );
+        gbl.setConstraints( btnDefaultAll, con );
+        btnDefaultAll.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent arg0) {
+                // reset all fields
+                Iterator<String> i=textFields.keySet().iterator();
+                while (i.hasNext()) {
+                    String s = i.next();
+                    JTextField tf = textFields.get(s);
+                    tf.setText("");
+                }
+                
+                // also reset the default pattern
+                defaultPat.setText((String)Globals.prefs.defaults.get("defaultLabelPattern"));
+            }
+        });
+        add( btnDefaultAll );
+    }
+
+    private  JTextField addEntryType(Container c, String name, int y) { 
+
+        JLabel lab = new JLabel(Util.nCase(name));
+        name = name.toLowerCase();
+        con.gridx = 0;
+        con.gridy = y;
+        con.fill = GridBagConstraints.BOTH;
+        con.weightx = 0;
+        con.weighty = 0;
+        con.anchor = GridBagConstraints.WEST;
+        con.insets = new Insets( 0,5,0,5 );
+        gbl.setConstraints( lab, con );
+        c.add( lab );
+        
+        JTextField tf = new JTextField();//_keypatterns.getValue(name).get(0).toString());
+        tf.setColumns( 15 );
+        con.gridx = 1;
+        con.fill = GridBagConstraints.HORIZONTAL;
+        con.weightx = 1;
+        con.weighty = 0;
+        con.anchor = GridBagConstraints.CENTER;
+        con.insets = new Insets( 0,5,0,5 );
+        gbl.setConstraints( tf, con );
+        c.add( tf );    
+        
+        JButton but = new JButton( Globals.lang("Default") );
+        con.gridx = 2;
+        con.fill = GridBagConstraints.BOTH;
+        con.weightx = 0;
+        con.weighty = 0;
+        con.anchor = GridBagConstraints.CENTER;
+        con.insets = new Insets( 0,5,0,5 );
+        gbl.setConstraints( but, con );
+        but.setActionCommand(name);
+        but.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                JTextField tf = textFields.get(e.getActionCommand());
+                tf.setText("");
+            }
+        });
+        c.add(but);
+
+        return tf;
+    }
+
+    /**
+     * @return the LabelPattern generated from the text fields 
+     */
+    public LabelPattern getLabelPattern() {
+        LabelPattern keypatterns = new LabelPattern();
+        
+        // each entry type
+        Iterator<String> i=textFields.keySet().iterator();
+        while (i.hasNext()) {
+            String s = i.next(),
+                text = textFields.get(s).getText();
+            if (!"".equals(text.trim()))
+                keypatterns.addLabelPattern(s, text);
+        }
+        
+        // default value
+        String text = defaultPat.getText();
+        if (!"".equals(text.trim())) { // we do not trim the value at the assignment to enable users to have spaces at the beginning and at the end of the pattern
+            keypatterns.setDefaultValue(text);
+        }
+        
+        return keypatterns;
+    }
+
+    /**
+     * Fills the current values to the text fields
+     * 
+     * @param keypatterns the LabelPattern to use as initial value
+     */
+    public void setValues(LabelPattern keypatterns) {
+        for (Iterator<String> i=textFields.keySet().iterator(); i.hasNext();) {
+            String name = i.next();
+            JTextField tf = textFields.get(name);
+            setValue(tf, name, keypatterns);
+        }
+        
+        if (keypatterns.getDefaultValue() == null) {
+            defaultPat.setText("");
+        } else {
+            defaultPat.setText(keypatterns.getDefaultValue().get(0));
+        }
+    }
+    
+    private void setValue(JTextField tf, String fieldName, LabelPattern keypatterns) {
+        if (keypatterns.isDefaultValue(fieldName))
+            tf.setText("");
+        else {
+            //System.out.println(":: "+_keypatterns.getValue(fieldName).get(0).toString());
+            tf.setText(keypatterns.getValue(fieldName).get(0).toString());
+        }
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java b/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java
index d83273a..932ed99 100644
--- a/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java
+++ b/src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java
@@ -1,997 +1,997 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.labelPattern;
-
-import java.util.ArrayList;
-import java.util.StringTokenizer;
-import java.util.Arrays;
-import java.util.List;
-
-import net.sf.jabref.*;
-import net.sf.jabref.export.layout.format.RemoveLatexCommands;
-
-/**
- *
- * @author Ulrik Stervbo (ulriks AT ruc.dk)
- */
-/**
- * This is the utility class of the LabelPattern package.
- * @author Ulrik Stervbo (ulriks AT ruc.dk)
- */
-public class LabelPatternUtil {
-
-    // All single characters that we can use for extending a key to make it unique:
-    private static String CHARS = "abcdefghijklmnopqrstuvwxyz";
-
-    public static ArrayList<String> DEFAULT_LABELPATTERN;
-    static {
-        updateDefaultPattern();
-    }
-
-    private static BibtexDatabase _db;
-
-    public static void updateDefaultPattern() {
-        DEFAULT_LABELPATTERN = split(JabRefPreferences.getInstance().get("defaultLabelPattern"));
-    }
-
-    /**
-     * This method takes a string of the form [field1]spacer[field2]spacer[field3]...,
-     * where the fields are the (required) fields of a BibTex entry. The string is split
-     * into fields and spacers by recognizing the [ and ].
-     *
-     * @param labelPattern a <code>String</code>
-     * @return an <code>ArrayList</code> The first item of the list
-     * is a string representation of the key pattern (the parameter),
-     * the remaining items are the fields
-     */
-    public static ArrayList<String> split(String labelPattern) {
-        // A holder for fields of the entry to be used for the key
-        ArrayList<String> _alist = new ArrayList<String>();
-
-        // Before we do anything, we add the parameter to the ArrayLIst
-        _alist.add(labelPattern);
-
-        //String[] ss = labelPattern.split("\\[|\\]");
-        StringTokenizer tok = new StringTokenizer(labelPattern, "[]", true);
-        while (tok.hasMoreTokens()) {
-            _alist.add(tok.nextToken());
-        }
-        return _alist;
-
-        /*
-       // Regular expresion for identifying the fields
-       Pattern pi = Pattern.compile("\\[\\w*\\]");
-       // Regular expresion for identifying the spacer
-       Pattern ps = Pattern.compile("\\].()*\\[");
-
-       // The matcher for the field
-       Matcher mi = pi.matcher(labelPattern);
-       // The matcher for the spacer char
-       Matcher ms = ps.matcher(labelPattern);
-
-       // Before we do anything, we add the parameter to the ArrayLIst
-       _alist.add(labelPattern);
-
-       // If we can find the spacer character
-       if(ms.find()){
-     String t_spacer = ms.group();
-      // Remove the `]' and `[' at the ends
-      // We cant imagine a spacer of omre than one character.
-      t_spacer = t_spacer.substring(1,2);
-      _alist.add(t_spacer);
-       }
-
-       while(mi.find()){
-     // Get the matched string
-     String t_str = mi.group();
-      int _sindex = 1;
-      int _eindex = t_str.length() -1;
-      // Remove the `[' and `]' at the ends
-      t_str = t_str.substring(_sindex, _eindex);
-     _alist.add(t_str);
-       }
-
-       return _alist;*/
-    }
-
-    /**
-     * Generates a BibTeX label according to the pattern for a given entry type, and
-     * returns the <code>Bibtexentry</code> with the unique label.
-     * 
-     * The given database is used to avoid duplicate keys.
-     * 
-     * @param database a <code>BibtexDatabase</code>
-     * @param _entry a <code>BibtexEntry</code>
-     * @return modified Bibtexentry
-     */
-    public static BibtexEntry makeLabel(MetaData metaData, BibtexDatabase database, BibtexEntry _entry) {
-        _db = database;
-        ArrayList<String> _al;
-        String _label;
-        StringBuffer _sb = new StringBuffer();
-        boolean forceUpper = false, forceLower = false;
-
-        try {
-            // get the type of entry
-            String _type = _entry.getType().getName().toLowerCase();
-            // Get the arrayList corresponding to the type
-            _al = metaData.getLabelPattern().getValue(_type);
-            int _alSize = _al.size();
-            boolean field = false;
-            for (int i = 1; i < _alSize; i++) {
-                String val = _al.get(i).toString();
-                if (val.equals("[")) {
-                    field = true;
-                } else if (val.equals("]")) {
-                    field = false;
-                } else if (field) {
-                    /*
-                     * Edited by Seb Wills <saw27 at mrao.cam.ac.uk> on 13-Apr-2004
-                     * Added new pseudo-fields "shortyear" and "veryshorttitle",
-                     * and and ":lower" modifier for all fields (in a way easily
-                     * extended to other modifiers). Helpfile
-                     * help/LabelPatterns.html updated accordingly.
-                     */
-                    // check whether there is a modifier on the end such as
-                    // ":lower"
-                    // String modifier = null;
-                    String[] parts = parseFieldMarker(val);//val.split(":");
-
-                    String label = makeLabel(_entry, parts[0]);
-                    
-                    // apply modifier if present
-                    if (parts.length > 1)
-                        label = applyModifiers(label, parts, 1);
-                    
-                    _sb.append(label);
-
-                } else {
-                    _sb.append(val);
-                }
-            }
-        } catch (Exception e) {
-            System.err.println(e);
-        }
-
-
-        // Remove all illegal characters from the key.
-        _label = Util.checkLegalKey(_sb.toString());
-
-        // Patch by Toralf Senger:
-        // Remove Regular Expressions while generating Keys
-        String regex = Globals.prefs.get("KeyPatternRegex");
-        if ((regex != null) && (regex.trim().length() > 0)) {
-            String replacement = Globals.prefs.get("KeyPatternReplacement");
-            _label = _label.replaceAll(regex, replacement);
-        }
-
-        if (forceUpper) {
-            _label = _label.toUpperCase();
-        }
-        if (forceLower) {
-            _label = _label.toLowerCase();
-        }
-
-        String oldKey = _entry.getCiteKey();
-        int occurences = _db.getNumberOfKeyOccurences(_label);
-
-        if ((oldKey != null) && oldKey.equals(_label))
-            occurences--; // No change, so we can accept one dupe.
-
-        boolean alwaysAddLetter = Globals.prefs.getBoolean("keyGenAlwaysAddLetter"),
-                firstLetterA = Globals.prefs.getBoolean("keyGenFirstLetterA");
-
-        if (!alwaysAddLetter && (occurences == 0)) {
-            // No dupes found, so we can just go ahead.
-            if (!_label.equals(oldKey)) {
-                if (_db.getEntryById(_entry.getId()) == null) {
-                    // entry does not (yet) exist in the database, just update the entry
-                    _entry.setField(BibtexFields.KEY_FIELD, _label);
-                } else {
-                    _db.setCiteKeyForEntry(_entry.getId(), _label);
-                }
-            }
-
-        } else {
-            // The key is already in use, so we must modify it.
-            int number = 0;
-            if (!alwaysAddLetter && !firstLetterA)
-                number = 1;
-
-            String moddedKey = _label + getAddition(number);
-            occurences = _db.getNumberOfKeyOccurences(moddedKey);
-
-            if ((oldKey != null) && oldKey.equals(moddedKey))
-                occurences--;
-
-            while (occurences > 0) {
-                number++;
-                moddedKey = _label + getAddition(number);
-
-                occurences = _db.getNumberOfKeyOccurences(moddedKey);
-                if ((oldKey != null) && oldKey.equals(moddedKey))
-                    occurences--;
-            }
-
-            if (!moddedKey.equals(oldKey)) {
-                if (_db.getEntryById(_entry.getId()) == null) {
-                    // entry does not (yet) exist in the database, just update the entry
-                    _entry.setField(BibtexFields.KEY_FIELD, moddedKey);
-                } else {
-                    _db.setCiteKeyForEntry(_entry.getId(), moddedKey);
-                }
-            }
-        }
-
-        return _entry;
-        /** End of edit, Morten Alver 2004.02.04.  */
-    }
-
-    /**
-     * Applies modifiers to a label generated based on a field marker.
-     * @param label The generated label.
-     * @param parts String array containing the modifiers.
-     * @param offset The number of initial items in the modifiers array to skip.
-     * @return The modified label.
-     */
-    public static String applyModifiers(String label, String[] parts, int offset) {
-        if (parts.length > offset)
-            for (int j = offset; j < parts.length; j++) {
-                String modifier = parts[j];
-
-                if (modifier.equals("lower")) {
-                    label = label.toLowerCase();
-                } else if (modifier.equals("upper")) {
-                    label = label.toUpperCase();
-                } else if (modifier.equals("abbr")) {
-                    // Abbreviate - that is,
-                    // System.out.println(_sbvalue.toString());
-                    StringBuffer abbr = new StringBuffer();
-                    String[] words = label.toString().replaceAll("[\\{\\}']","")
-                            .split("[\\(\\) \r\n\"]");
-                    for (int word = 0; word < words.length; word++)
-                        if (words[word].length() > 0)
-                            abbr.append(words[word].charAt(0));
-                    label = abbr.toString();
-
-                } else if (modifier.startsWith("(") && modifier.endsWith(")")) {
-                    // Alternate text modifier in parentheses. Should be inserted if
-                    // the label is empty:
-                    if (label.equals("") && (modifier.length() > 2))
-                        return modifier.substring(1, modifier.length()-1);
-
-                } else {
-                    Globals
-                        .logger("Key generator warning: unknown modifier '"
-                            + modifier + "'.");
-                }
-            }
-        return label;
-    }
-
-    public static String makeLabel(BibtexEntry _entry, String val) {
-
-        try {
-            if (val.startsWith("auth") || val.startsWith("pureauth")) {
-
-                /*
-                 * For label code "auth...": if there is no author, but there
-                 * are editor(s) (e.g. for an Edited Book), use the editor(s)
-                 * instead. (saw27 at mrao.cam.ac.uk). This is what most people
-                 * want, but in case somebody really needs a field which expands
-                 * to nothing if there is no author (e.g. someone who uses both
-                 * "auth" and "ed" in the same label), we provide an alternative
-                 * form "pureauth..." which does not do this fallback
-                 * substitution of editor.
-                 */
-                String authString = _entry.getField("author");
-
-                if (val.startsWith("pure")) {
-                    // remove the "pure" prefix so the remaining
-                    // code in this section functions correctly
-                    val = val.substring(4);
-                } else {
-                    if (authString == null || authString.equals("")) {
-                        authString = _entry.getField("editor");
-                    }
-                }
-
-                // Gather all author-related checks, so we don't
-                // have to check all the time.
-                if (val.equals("auth")) {
-                    return firstAuthor(authString);
-                } else if (val.equals("authors")) {
-                    return allAuthors(authString);
-                } else if (val.equals("authorsAlpha")) {
-                	return authorsAlpha(authString);
-                }
-                // Last author's last name
-                else if (val.equals("authorLast")) {
-                    return lastAuthor(authString);
-                } else if (val.equals("authorIni")) {
-                    String s = oneAuthorPlusIni(authString);
-                    return s == null ? "" : s;
-                } else if (val.matches("authIni[\\d]+")) {
-                    int num = Integer.parseInt(val.substring(7));
-                    String s = authIniN(authString, num);
-                    return s == null ? "" : s;
-                } else if (val.equals("auth.auth.ea")) {
-                    String s = authAuthEa(authString);
-                    return s == null ? "" : s;
-                } else if (val.equals("auth.etal")) {
-                    String s = authEtal(authString);
-                    return s == null ? "" : s;
-                } else if (val.equals("authshort")) {
-                    String s = authshort(authString);
-                    return s == null ? "" : s;
-                } else if (val.matches("auth[\\d]+_[\\d]+")) {
-                    String[] nums = val.substring(4).split("_");
-                    String s = authN_M(authString, Integer.parseInt(nums[0]),
-                        Integer.parseInt(nums[1]) - 1);
-                    return s == null ? "" : s;
-                } else if (val.matches("auth\\d+")) {
-                    // authN. First N chars of the first author's last
-                    // name.
-
-                    int num = Integer.parseInt(val.substring(4));
-                    String fa = firstAuthor(authString);
-                    if (fa == null)
-                        return "";
-                    if (num > fa.length())
-                        num = fa.length();
-                    return fa.substring(0, num);
-                } else if (val.matches("authors\\d+")) {
-                    String s = NAuthors(authString, Integer.parseInt(val
-                        .substring(7)));
-                    return s == null ? "" : s;
-                } else {
-                    // This "auth" business was a dead end, so just
-                    // use it literally:
-                    return getField(_entry, val);
-                }
-            } else if (val.startsWith("ed")) {
-                // Gather all markers starting with "ed" here, so we
-                // don't have to check all the time.
-                if (val.equals("edtr")) {
-                    return firstAuthor(_entry.getField("editor").toString());
-                } else if (val.equals("editors")) {
-                    return allAuthors(_entry.getField("editor").toString());
-                // Last author's last name
-                } else if (val.equals("editorLast")) {
-                    return lastAuthor(_entry.getField("editor").toString());
-                } else if (val.equals("editorIni")) {
-                    String s = oneAuthorPlusIni(_entry.getField("editor")
-                        .toString());
-                    return s == null ? "" : s;
-                } else if (val.matches("edtrIni[\\d]+")) {
-                    int num = Integer.parseInt(val.substring(7));
-                    String s = authIniN(_entry.getField("editor").toString(), num);
-                    return s == null ? "" : s;
-                } else if (val.matches("edtr[\\d]+_[\\d]+")) {
-                    String[] nums = val.substring(4).split("_");
-                    String s = authN_M(_entry.getField("editor").toString(),
-                        Integer.parseInt(nums[0]),
-                        Integer.parseInt(nums[1]) - 1);
-                    return s == null ? "" : s;
-                } else if (val.equals("edtr.edtr.ea")) {
-                    String s = authAuthEa(_entry.getField("editor").toString());
-                    return s == null ? "" : s;
-                } else if (val.equals("edtrshort")) {
-                    String s = authshort(_entry.getField("editor").toString());
-                    return s == null ? "" : s;
-                }
-                // authN. First N chars of the first author's last
-                // name.
-                else if (val.matches("edtr\\d+")) {
-                    int num = Integer.parseInt(val.substring(4));
-                    String fa = firstAuthor(_entry.getField("editor")
-                        .toString());
-                    if (fa == null)
-                        return "";
-                    if (num > fa.length())
-                        num = fa.length();
-                    return fa.substring(0, num);
-                } else {
-                    // This "ed" business was a dead end, so just
-                    // use it literally:
-                    return getField(_entry, val);
-                }
-            } else if (val.equals("firstpage")) {
-                return firstPage(_entry.getField("pages"));
-            } else if (val.equals("lastpage")) {
-                return lastPage(_entry.getField("pages"));
-            } else if (val.equals("shorttitle")) {
-                return getTitleWords(3, _entry);
-            } else if (val.equals("shortyear")) {
-                String ss = _entry.getField("year");
-                if (ss.startsWith("in") || ss.startsWith("sub")) {
-                    return "IP";
-                } else if (ss.length() > 2) {
-                    return ss.substring(ss.length() - 2);
-                } else {
-                    return ss;
-                }
-            } else if (val.equals("veryshorttitle")) {
-                return getTitleWords(1, _entry);
-            } else if (val.matches("keyword\\d+")) {
-                StringBuilder sb = new StringBuilder();
-                int num = Integer.parseInt(val.substring(7));
-                String kw = getField(_entry, "keywords");
-                if (kw != null) {
-                	// TODO: merge this functionality with Util.getSeparatedKeywords
-                    String[] keywords = kw.split("[,;]\\s*");
-                    if ((num > 0) && (num < keywords.length))
-                        sb.append(keywords[num - 1].trim());
-                }
-                return sb.toString();
-            } else {
-                // we haven't seen any special demands
-                return getField(_entry, val);
-            }
-        } catch (NullPointerException ex) {
-            return "";
-        }
-
-    }
-
-    /**
-     * Look up a field of a BibtexEntry, returning its String value, or an
-     * empty string if it isn't set.
-     * @param entry The entry.
-     * @param field The field to look up.
-     * @return The field value.
-     */
-    private static String getField(BibtexEntry entry, String field) {
-        Object o = entry.getField(field);
-        return o != null ? (String)o : "";
-    }
-
-    /**
-     * Computes an appendix to a BibTeX key that could make it unique. We use
-     * a-z for numbers 0-25, and then aa-az, ba-bz, etc.
-     * 
-     * @param number
-     *            The appendix number.
-     * @return The String to append.
-     */
-    private static String getAddition(int number) {
-        if (number >= CHARS.length()) {
-            int lastChar = number % CHARS.length();
-            return getAddition(number/CHARS.length()-1) + CHARS.substring(lastChar, lastChar+1);
-        } else
-            return CHARS.substring(number, number+1);
-    }
-
-
-    static String getTitleWords(int number, BibtexEntry _entry) {
-        String ss = (new RemoveLatexCommands()).format(_entry.getField("title").toString());
-        StringBuffer _sbvalue = new StringBuffer(),
-        current;
-        int piv=0, words = 0;
-
-        // sorry for being English-centric. I guess these
-        // words should really be an editable preference.
-        mainl: while ((piv < ss.length()) && (words < number)) {
-            current = new StringBuffer();
-            // Get the next word:
-            while ((piv<ss.length()) && !Character.isWhitespace(ss.charAt(piv))
-                    && (ss.charAt(piv) != '-')) {
-                current.append(ss.charAt(piv));
-                piv++;
-                //System.out.println(".. "+piv+" '"+current.toString()+"'");
-            }
-            piv++;
-            // Check if it is ok:
-            String word = current.toString().trim();
-            if (word.length() == 0)
-                continue mainl;
-            for(int _i=0; _i< Globals.SKIP_WORDS.length; _i++) {
-                if (word.equalsIgnoreCase(Globals.SKIP_WORDS[_i])) {
-                    continue mainl;
-                }
-            }
-
-            // If we get here, the word was accepted.
-            if (_sbvalue.length() > 0)
-                _sbvalue.append(" ");
-            _sbvalue.append(word);
-            words++;
-        }
-
-        return _sbvalue.toString();
-    }
-
-    static String keepLettersAndDigitsOnly(String in) {
-        StringBuilder sb = new StringBuilder();
-        for (int i=0; i<in.length(); i++) {
-            if (Character.isLetterOrDigit(in.charAt(i)))
-                sb.append(in.charAt(i));
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Tests whether a given label is unique.
-     * @param label a <code>String</code>
-     * @return <code>true</code> if and only if the <code>label</code> is unique
-     */
-    public static boolean isLabelUnique(String label) {
-        boolean _isUnique = true;
-        BibtexEntry _entry;
-        int _dbSize = _db.getEntryCount();
-        // run through the whole DB and check the key field
-        // if this could be made recursive I would be very happy
-        // it kinda sux that we have to run through the whole db.
-        // The idea here is that if we meet NO match, the _duplicate
-        // field will be true
-
-        for (int i = 0; i < _dbSize; i++) {
-            _entry = _db.getEntryById(String.valueOf(i));
-
-            // oh my! there is a match! we better set the uniqueness to false
-            // and leave this for-loop all together
-            if (_entry.getField(BibtexFields.KEY_FIELD).equals(label)) {
-                _isUnique = false;
-                break;
-            }
-        }
-
-        return _isUnique;
-
-    }
-
-    /**
-     * Gets the last name of the first author/editor
-     * 
-     * @param authorField
-     *            a <code>String</code>
-     * @return the surname of an author/editor or "" if no author was found
-     *    This method is guaranteed to never return null.
-     * 
-     * @throws NullPointerException
-     *             if authorField == null
-     */
-    public static String firstAuthor(String authorField) {
-        AuthorList al = AuthorList.getAuthorList(authorField);
-        if (al.size() == 0)
-            return "";
-        String s = al.getAuthor(0).getLast();
-        return s != null ? s : "";
-
-    }
-
-    /**
-     * Gets the von part and the last name of the first author/editor
-     *
-     * @param authorField
-     *            a <code>String</code>
-     * @return the von part and surname of an author/editor or "" if no author was found.
-     *  This method is guaranteed to never return null.
-     *
-     * @throws NullPointerException
-     *             if authorField == null
-     */
-    public static String firstAuthorVonAndLast(String authorField) {
-        AuthorList al = AuthorList.getAuthorList(authorField);
-        if (al.size() == 0)
-            return "";
-        String s = al.getAuthor(0).getVon();
-        StringBuilder sb = new StringBuilder();
-        if (s != null) {
-            sb.append(s);
-            sb.append(' ');
-        }
-        s = al.getAuthor(0).getLast();
-        if (s != null)
-            sb.append(s);
-        return sb.toString();
-    }
-
-    /**
-     * Gets the last name of the last author/editor
-     * @param authorField a <code>String</code>
-     * @return the sur name of an author/editor
-     */
-    private static String lastAuthor(String authorField) {
-        String[] tokens = AuthorList.fixAuthorForAlphabetization(authorField).split("\\band\\b");
-        if (tokens.length > 0) { // if author is empty
-            String[] lastAuthor = tokens[tokens.length-1].replaceAll("\\s+", " ").trim().split(" ");
-            return lastAuthor[0];
-
-        }
-        else return "";
-    }
-
-    /**
-     * Gets the last name of all authors/editors
-     * @param authorField a <code>String</code>
-     * @return the sur name of all authors/editors
-     */
-    private static String allAuthors(String authorField) {
-        String author = "";
-        // This code was part of 'ApplyRule' in 'ArticleLabelRule'
-        String[] tokens = AuthorList.fixAuthorForAlphabetization(authorField).split("\\band\\b");
-        int i = 0;
-        while (tokens.length > i) {
-            // convert lastname, firstname to firstname lastname
-            String[] firstAuthor = tokens[i].replaceAll("\\s+", " ").trim().split(" ");
-            // lastname, firstname
-            author += firstAuthor[0];
-            i++;
-        }
-        return author;
-    }
-    
-    /**
-     * Returns the authors according to the BibTeX-alpha-Style
-     * @param authorField string containing the value of the author field
-     * @return the initials of all authornames
-     */
-    private static String authorsAlpha(String authorField) {
-    	String authors = "";
-    	
-    	String fixedAuthors = AuthorList.fixAuthor_lastNameOnlyCommas(authorField, false);
-    	
-    	// drop the "and" before the last author
-    	// -> makes processing easier
-    	fixedAuthors = fixedAuthors.replace(" and ", ", ");
-    	
-    	String[] tokens = fixedAuthors.split(",");
-    	int max = (tokens.length > 4 ? 3 : tokens.length);
-    	if (max==1) {
-			String[] firstAuthor = tokens[0].replaceAll("\\s+", " ").trim().split(" ");
-			// take first letter of any "prefixes" (e.g. van der Aalst -> vd) 
-			for (int j=0; j<firstAuthor.length-1; j++) {
-				authors = authors.concat(firstAuthor[j].substring(0,1));
-			}
-			// append last part of last name completely
-			authors = authors.concat(firstAuthor[firstAuthor.length-1].substring(0,
-                    Math.min(3, firstAuthor[firstAuthor.length-1].length())));
-    	} else {
-    		for (int i = 0; i < max; i++) {
-    			// replace all whitespaces by " "
-    			// split the lastname at " "
-    			String[] curAuthor = tokens[i].replaceAll("\\s+", " ").trim().split(" ");
-    			for (int j=0; j<curAuthor.length; j++) {
-    				// use first character of each part of lastname
-    				authors = authors.concat(curAuthor[j].substring(0, 1));
-    			}
-    		}
-    		if (tokens.length > 4) {
-    			authors = authors.concat("+");
-    		}
-    	}
-    	return authors;
-    }
-
-    /**
-     * Gets the surnames of the first N authors and appends EtAl if there are more than N authors
-     * @param authorField a <code>String</code>
-     * @param n the number of desired authors
-     * @return Gets the surnames of the first N authors and appends EtAl if there are more than N authors
-     */
-    private static String NAuthors(String authorField, int n) {
-        String author = "";
-        // This code was part of 'ApplyRule' in 'ArticleLabelRule'
-        String[] tokens = AuthorList.fixAuthorForAlphabetization(authorField).split("\\band\\b");
-        int i = 0;
-        while (tokens.length > i && i < n) {
-            // convert lastname, firstname to firstname lastname
-            String[] firstAuthor = tokens[i].replaceAll("\\s+", " ").trim().split(" ");
-            // lastname, firstname
-            author += firstAuthor[0];
-            i++;
-        }
-        if (tokens.length <= n) return author;
-        return author += "EtAl";
-    }
-
-    /**
-     * Gets the first part of the last name of the first
-     * author/editor, and appends the last name initial of the
-     * remaining authors/editors.
-     * @param authorField a <code>String</code>
-     * @return the sur name of all authors/editors
-     */
-    private static String oneAuthorPlusIni(String authorField) {
-        final int CHARS_OF_FIRST = 5;
-        authorField = AuthorList.fixAuthorForAlphabetization(authorField);
-        String author = "";
-        // This code was part of 'ApplyRule' in 'ArticleLabelRule'
-        String[] tokens = authorField.split("\\band\\b");
-        int i = 1;
-        if (tokens.length == 0) {
-            return author;
-        }
-        String[] firstAuthor = tokens[0].replaceAll("\\s+", " ").split(" ");
-        author = firstAuthor[0].substring(0,
-            Math.min(CHARS_OF_FIRST,
-                firstAuthor[0].length()));
-        while (tokens.length > i) {
-            // convert lastname, firstname to firstname lastname
-            author += tokens[i].trim().charAt(0);
-            i++;
-        }
-        return author;
-
-    }
-
-    /**
-     * auth.auth.ea format:
-     * Isaac Newton and James Maxwell and Albert Einstein (1960)
-     * Isaac Newton and James Maxwell (1960)
-     *  give:
-     * Newton.Maxwell.ea
-     * Newton.Maxwell
-     */
-    private static String authAuthEa(String authorField) {
-        authorField = AuthorList.fixAuthorForAlphabetization(authorField);
-        StringBuffer author = new StringBuffer();
-
-        String[] tokens = authorField.split("\\band\\b");
-        if (tokens.length == 0) {
-            return "";
-        }
-        author.append((tokens[0].split(","))[0]);
-        if (tokens.length >= 2)
-            author.append(".").append((tokens[1].split(","))[0]);
-        if (tokens.length > 2)
-            author.append(".ea");
-
-        return author.toString();
-    }
-
-    /**
-     * auth.etal format:
-     * Isaac Newton and James Maxwell and Albert Einstein (1960)
-     * Isaac Newton and James Maxwell (1960)
-     *  give:
-     * Newton.etal
-     * Newton.Maxwell
-     */
-    private static String authEtal(String authorField) {
-        authorField = AuthorList.fixAuthorForAlphabetization(authorField);
-        StringBuffer author = new StringBuffer();
-
-        String[] tokens = authorField.split("\\band\\b");
-        if (tokens.length == 0) {
-            return "";
-        }
-        author.append((tokens[0].split(","))[0]);
-        if (tokens.length == 2)
-            author.append(".").append((tokens[1].split(","))[0]);
-        else if (tokens.length > 2)
-            author.append(".etal");
-
-        return author.toString();
-    }
-
-    /**
-     * The first N characters of the Mth author/editor.
-     */
-    private static String authN_M(String authorField, int n, int m) {
-        authorField = AuthorList.fixAuthorForAlphabetization(authorField);
-
-        String[] tokens = authorField.split("\\band\\b");
-        if ((tokens.length <= m) || (n<0) || (m<0)) {
-            return "";
-        }
-        String lastName = (tokens[m].split(","))[0].trim();
-        if (lastName.length() <= n)
-            return lastName;
-        else
-            return lastName.substring(0, n);
-    }
-
-    /**
-     * authshort format:
-     * added by Kolja Brix, kbx at users.sourceforge.net
-     *
-     * given author names
-     * 
-     *   Isaac Newton and James Maxwell and Albert Einstein and N. Bohr
-     * 
-     *   Isaac Newton and James Maxwell and Albert Einstein
-     *   
-     *   Isaac Newton and James Maxwell
-     *   
-     *   Isaac Newton
-     * 
-     * yield
-     * 
-     *   NME+
-     *   
-     *   NME
-     *   
-     *   NM
-     *   
-     *   Newton
-     */
-    private static String authshort(String authorField) {
-        authorField = AuthorList.fixAuthorForAlphabetization(authorField);
-        StringBuffer author = new StringBuffer();
-        String[] tokens = authorField.split("\\band\\b");
-        int i = 0;
-
-        if (tokens.length == 1) {
-
-            author.append(authN_M(authorField,authorField.length(),0));
-
-        } else if (tokens.length >= 2) {
-
-            while (tokens.length > i && i<3) {
-                author.append(authN_M(authorField,1,i));
-                i++;
-            }
-
-            if (tokens.length > 3)
-                author.append("+");
-
-        }
-
-        return author.toString();
-    }
-
-    /**
-     * authIniN format:
-     * 
-     * Each author gets (N div #authors) chars, the remaining (N mod #authors)
-     * chars are equally distributed to the authors first in the row.
-     * 
-     * If (N < #authors), only the first N authors get mentioned.
-     * 
-     * For example if
-     * 
-     * a) I. Newton and J. Maxwell and A. Einstein and N. Bohr (..)
-     * 
-     * b) I. Newton and J. Maxwell and A. Einstein
-     * 
-     * c) I. Newton and J. Maxwell
-     * 
-     * d) I. Newton
-     * 
-     * authIni4 gives: a) NMEB, b) NeME, c) NeMa, d) Newt
-     * 
-     * @param authorField
-     *            The authors to format.
-     * 
-     * @param n
-     *            The maximum number of characters this string will be long. A
-     *            negative number or zero will lead to "" be returned.
-     * 
-     * @throws NullPointerException
-     *             if authorField is null and n > 0
-     */
-    public static String authIniN(String authorField, int n) {
-        
-        if (n <= 0)
-            return "";
-        
-        authorField = AuthorList.fixAuthorForAlphabetization(authorField);
-        StringBuffer author = new StringBuffer();
-        String[] tokens = authorField.split("\\band\\b");
-        int i = 0;
-        int charsAll = n / tokens.length;
-
-        if (tokens.length == 0) {
-            return author.toString();
-        }
-
-        while (tokens.length > i) {
-            if ( i < (n % tokens.length) ) {
-                author.append(authN_M(authorField,charsAll+1,i));
-            } else {
-                author.append(authN_M(authorField,charsAll,i));
-            }
-            i++;
-        }
-
-        if (author.length() <= n)
-            return author.toString();
-        else
-            return author.toString().substring(0, n);
-    }
-
-
-    /**
-     * Split the pages field into separate numbers and return the lowest
-     * 
-     * @param pages
-     *            (may not be null) a pages string such as 42--111 or
-     *            7,41,73--97 or 43+
-     * 
-     * @return the first page number or "" if no number is found in the string
-     * 
-     * @throws NullPointerException
-     *             if pages is null
-     */
-    public static String firstPage(String pages) {
-        String[] _pages = pages.split("\\D+");
-        int result = Integer.MAX_VALUE;
-        for (String n : _pages){
-            if (n.matches("\\d+"))
-                result = Math.min(Integer.parseInt(n), result);
-        }
-        
-        if (result == Integer.MAX_VALUE)
-            return "";
-        else 
-            return String.valueOf(result);
-    }
-
-    /**
-     * Split the pages field into separate numbers and return the highest
-     * 
-     * @param pages
-     *            a pages string such as 42--111 or 7,41,73--97 or 43+
-     * 
-     * @return the first page number or "" if no number is found in the string
-     * 
-     * @throws NullPointerException
-     *             if pages is null.
-     */
-    public static String lastPage(String pages) {
-        String[] _pages = pages.split("\\D+");
-        int result = Integer.MIN_VALUE;
-        for (String n : _pages){
-            if (n.matches("\\d+"))
-                result = Math.max(Integer.parseInt(n), result);
-        }
-        
-        if (result == Integer.MIN_VALUE)
-            return "";
-        else 
-            return String.valueOf(result);
-    }
-
-    /**
-         * Parse a field marker with modifiers, possibly containing a parenthesised modifier,
-         * as well as escaped colons and parentheses.
-         * @param arg The argument string.
-         * @return An array of strings representing the parts of the marker
-         */
-        public static String[] parseFieldMarker(String arg) {
-            List<String> parts = new ArrayList<String>();
-            StringBuilder current = new StringBuilder();
-            boolean escaped = false;
-            int inParenthesis = 0;
-            for (int i=0; i<arg.length(); i++) {
-                if ((arg.charAt(i) == ':') && !escaped && (inParenthesis == 0)) {
-                    parts.add(current.toString());
-                    current = new StringBuilder();
-                } else if ((arg.charAt(i) == '(') && !escaped) {
-                    inParenthesis++;
-                    current.append(arg.charAt(i));
-                } else if ((arg.charAt(i) == ')') && !escaped && (inParenthesis > 0)) {
-                    inParenthesis--;
-                    current.append(arg.charAt(i));
-                } else if (arg.charAt(i) == '\\') {
-                    if (escaped) {
-                        escaped = false;
-                        current.append(arg.charAt(i));
-                    } else
-                        escaped = true;
-                } else if (escaped) {
-                    current.append(arg.charAt(i));
-                    escaped = false;
-                } else
-                    current.append(arg.charAt(i));
-            }
-            parts.add(current.toString());
-            return parts.toArray(new String[parts.size()]);
-        }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.labelPattern;
+
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+import java.util.Arrays;
+import java.util.List;
+
+import net.sf.jabref.*;
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
+
+/**
+ *
+ * @author Ulrik Stervbo (ulriks AT ruc.dk)
+ */
+/**
+ * This is the utility class of the LabelPattern package.
+ * @author Ulrik Stervbo (ulriks AT ruc.dk)
+ */
+public class LabelPatternUtil {
+
+    // All single characters that we can use for extending a key to make it unique:
+    private static String CHARS = "abcdefghijklmnopqrstuvwxyz";
+
+    public static ArrayList<String> DEFAULT_LABELPATTERN;
+    static {
+        updateDefaultPattern();
+    }
+
+    private static BibtexDatabase _db;
+
+    public static void updateDefaultPattern() {
+        DEFAULT_LABELPATTERN = split(JabRefPreferences.getInstance().get("defaultLabelPattern"));
+    }
+
+    /**
+     * This method takes a string of the form [field1]spacer[field2]spacer[field3]...,
+     * where the fields are the (required) fields of a BibTex entry. The string is split
+     * into fields and spacers by recognizing the [ and ].
+     *
+     * @param labelPattern a <code>String</code>
+     * @return an <code>ArrayList</code> The first item of the list
+     * is a string representation of the key pattern (the parameter),
+     * the remaining items are the fields
+     */
+    public static ArrayList<String> split(String labelPattern) {
+        // A holder for fields of the entry to be used for the key
+        ArrayList<String> _alist = new ArrayList<String>();
+
+        // Before we do anything, we add the parameter to the ArrayLIst
+        _alist.add(labelPattern);
+
+        //String[] ss = labelPattern.split("\\[|\\]");
+        StringTokenizer tok = new StringTokenizer(labelPattern, "[]", true);
+        while (tok.hasMoreTokens()) {
+            _alist.add(tok.nextToken());
+        }
+        return _alist;
+
+        /*
+       // Regular expresion for identifying the fields
+       Pattern pi = Pattern.compile("\\[\\w*\\]");
+       // Regular expresion for identifying the spacer
+       Pattern ps = Pattern.compile("\\].()*\\[");
+
+       // The matcher for the field
+       Matcher mi = pi.matcher(labelPattern);
+       // The matcher for the spacer char
+       Matcher ms = ps.matcher(labelPattern);
+
+       // Before we do anything, we add the parameter to the ArrayLIst
+       _alist.add(labelPattern);
+
+       // If we can find the spacer character
+       if(ms.find()){
+     String t_spacer = ms.group();
+      // Remove the `]' and `[' at the ends
+      // We cant imagine a spacer of omre than one character.
+      t_spacer = t_spacer.substring(1,2);
+      _alist.add(t_spacer);
+       }
+
+       while(mi.find()){
+     // Get the matched string
+     String t_str = mi.group();
+      int _sindex = 1;
+      int _eindex = t_str.length() -1;
+      // Remove the `[' and `]' at the ends
+      t_str = t_str.substring(_sindex, _eindex);
+     _alist.add(t_str);
+       }
+
+       return _alist;*/
+    }
+
+    /**
+     * Generates a BibTeX label according to the pattern for a given entry type, and
+     * returns the <code>Bibtexentry</code> with the unique label.
+     * 
+     * The given database is used to avoid duplicate keys.
+     * 
+     * @param database a <code>BibtexDatabase</code>
+     * @param _entry a <code>BibtexEntry</code>
+     * @return modified Bibtexentry
+     */
+    public static BibtexEntry makeLabel(MetaData metaData, BibtexDatabase database, BibtexEntry _entry) {
+        _db = database;
+        ArrayList<String> _al;
+        String _label;
+        StringBuffer _sb = new StringBuffer();
+        boolean forceUpper = false, forceLower = false;
+
+        try {
+            // get the type of entry
+            String _type = _entry.getType().getName().toLowerCase();
+            // Get the arrayList corresponding to the type
+            _al = metaData.getLabelPattern().getValue(_type);
+            int _alSize = _al.size();
+            boolean field = false;
+            for (int i = 1; i < _alSize; i++) {
+                String val = _al.get(i).toString();
+                if (val.equals("[")) {
+                    field = true;
+                } else if (val.equals("]")) {
+                    field = false;
+                } else if (field) {
+                    /*
+                     * Edited by Seb Wills <saw27 at mrao.cam.ac.uk> on 13-Apr-2004
+                     * Added new pseudo-fields "shortyear" and "veryshorttitle",
+                     * and and ":lower" modifier for all fields (in a way easily
+                     * extended to other modifiers). Helpfile
+                     * help/LabelPatterns.html updated accordingly.
+                     */
+                    // check whether there is a modifier on the end such as
+                    // ":lower"
+                    // String modifier = null;
+                    String[] parts = parseFieldMarker(val);//val.split(":");
+
+                    String label = makeLabel(_entry, parts[0]);
+                    
+                    // apply modifier if present
+                    if (parts.length > 1)
+                        label = applyModifiers(label, parts, 1);
+                    
+                    _sb.append(label);
+
+                } else {
+                    _sb.append(val);
+                }
+            }
+        } catch (Exception e) {
+            System.err.println(e);
+        }
+
+
+        // Remove all illegal characters from the key.
+        _label = Util.checkLegalKey(_sb.toString());
+
+        // Patch by Toralf Senger:
+        // Remove Regular Expressions while generating Keys
+        String regex = Globals.prefs.get("KeyPatternRegex");
+        if ((regex != null) && (regex.trim().length() > 0)) {
+            String replacement = Globals.prefs.get("KeyPatternReplacement");
+            _label = _label.replaceAll(regex, replacement);
+        }
+
+        if (forceUpper) {
+            _label = _label.toUpperCase();
+        }
+        if (forceLower) {
+            _label = _label.toLowerCase();
+        }
+
+        String oldKey = _entry.getCiteKey();
+        int occurences = _db.getNumberOfKeyOccurences(_label);
+
+        if ((oldKey != null) && oldKey.equals(_label))
+            occurences--; // No change, so we can accept one dupe.
+
+        boolean alwaysAddLetter = Globals.prefs.getBoolean("keyGenAlwaysAddLetter"),
+                firstLetterA = Globals.prefs.getBoolean("keyGenFirstLetterA");
+
+        if (!alwaysAddLetter && (occurences == 0)) {
+            // No dupes found, so we can just go ahead.
+            if (!_label.equals(oldKey)) {
+                if (_db.getEntryById(_entry.getId()) == null) {
+                    // entry does not (yet) exist in the database, just update the entry
+                    _entry.setField(BibtexFields.KEY_FIELD, _label);
+                } else {
+                    _db.setCiteKeyForEntry(_entry.getId(), _label);
+                }
+            }
+
+        } else {
+            // The key is already in use, so we must modify it.
+            int number = 0;
+            if (!alwaysAddLetter && !firstLetterA)
+                number = 1;
+
+            String moddedKey = _label + getAddition(number);
+            occurences = _db.getNumberOfKeyOccurences(moddedKey);
+
+            if ((oldKey != null) && oldKey.equals(moddedKey))
+                occurences--;
+
+            while (occurences > 0) {
+                number++;
+                moddedKey = _label + getAddition(number);
+
+                occurences = _db.getNumberOfKeyOccurences(moddedKey);
+                if ((oldKey != null) && oldKey.equals(moddedKey))
+                    occurences--;
+            }
+
+            if (!moddedKey.equals(oldKey)) {
+                if (_db.getEntryById(_entry.getId()) == null) {
+                    // entry does not (yet) exist in the database, just update the entry
+                    _entry.setField(BibtexFields.KEY_FIELD, moddedKey);
+                } else {
+                    _db.setCiteKeyForEntry(_entry.getId(), moddedKey);
+                }
+            }
+        }
+
+        return _entry;
+        /** End of edit, Morten Alver 2004.02.04.  */
+    }
+
+    /**
+     * Applies modifiers to a label generated based on a field marker.
+     * @param label The generated label.
+     * @param parts String array containing the modifiers.
+     * @param offset The number of initial items in the modifiers array to skip.
+     * @return The modified label.
+     */
+    public static String applyModifiers(String label, String[] parts, int offset) {
+        if (parts.length > offset)
+            for (int j = offset; j < parts.length; j++) {
+                String modifier = parts[j];
+
+                if (modifier.equals("lower")) {
+                    label = label.toLowerCase();
+                } else if (modifier.equals("upper")) {
+                    label = label.toUpperCase();
+                } else if (modifier.equals("abbr")) {
+                    // Abbreviate - that is,
+                    // System.out.println(_sbvalue.toString());
+                    StringBuffer abbr = new StringBuffer();
+                    String[] words = label.toString().replaceAll("[\\{\\}']","")
+                            .split("[\\(\\) \r\n\"]");
+                    for (int word = 0; word < words.length; word++)
+                        if (words[word].length() > 0)
+                            abbr.append(words[word].charAt(0));
+                    label = abbr.toString();
+
+                } else if (modifier.startsWith("(") && modifier.endsWith(")")) {
+                    // Alternate text modifier in parentheses. Should be inserted if
+                    // the label is empty:
+                    if (label.equals("") && (modifier.length() > 2))
+                        return modifier.substring(1, modifier.length()-1);
+
+                } else {
+                    Globals
+                        .logger("Key generator warning: unknown modifier '"
+                            + modifier + "'.");
+                }
+            }
+        return label;
+    }
+
+    public static String makeLabel(BibtexEntry _entry, String val) {
+
+        try {
+            if (val.startsWith("auth") || val.startsWith("pureauth")) {
+
+                /*
+                 * For label code "auth...": if there is no author, but there
+                 * are editor(s) (e.g. for an Edited Book), use the editor(s)
+                 * instead. (saw27 at mrao.cam.ac.uk). This is what most people
+                 * want, but in case somebody really needs a field which expands
+                 * to nothing if there is no author (e.g. someone who uses both
+                 * "auth" and "ed" in the same label), we provide an alternative
+                 * form "pureauth..." which does not do this fallback
+                 * substitution of editor.
+                 */
+                String authString = _entry.getField("author");
+
+                if (val.startsWith("pure")) {
+                    // remove the "pure" prefix so the remaining
+                    // code in this section functions correctly
+                    val = val.substring(4);
+                } else {
+                    if (authString == null || authString.equals("")) {
+                        authString = _entry.getField("editor");
+                    }
+                }
+
+                // Gather all author-related checks, so we don't
+                // have to check all the time.
+                if (val.equals("auth")) {
+                    return firstAuthor(authString);
+                } else if (val.equals("authors")) {
+                    return allAuthors(authString);
+                } else if (val.equals("authorsAlpha")) {
+                	return authorsAlpha(authString);
+                }
+                // Last author's last name
+                else if (val.equals("authorLast")) {
+                    return lastAuthor(authString);
+                } else if (val.equals("authorIni")) {
+                    String s = oneAuthorPlusIni(authString);
+                    return s == null ? "" : s;
+                } else if (val.matches("authIni[\\d]+")) {
+                    int num = Integer.parseInt(val.substring(7));
+                    String s = authIniN(authString, num);
+                    return s == null ? "" : s;
+                } else if (val.equals("auth.auth.ea")) {
+                    String s = authAuthEa(authString);
+                    return s == null ? "" : s;
+                } else if (val.equals("auth.etal")) {
+                    String s = authEtal(authString);
+                    return s == null ? "" : s;
+                } else if (val.equals("authshort")) {
+                    String s = authshort(authString);
+                    return s == null ? "" : s;
+                } else if (val.matches("auth[\\d]+_[\\d]+")) {
+                    String[] nums = val.substring(4).split("_");
+                    String s = authN_M(authString, Integer.parseInt(nums[0]),
+                        Integer.parseInt(nums[1]) - 1);
+                    return s == null ? "" : s;
+                } else if (val.matches("auth\\d+")) {
+                    // authN. First N chars of the first author's last
+                    // name.
+
+                    int num = Integer.parseInt(val.substring(4));
+                    String fa = firstAuthor(authString);
+                    if (fa == null)
+                        return "";
+                    if (num > fa.length())
+                        num = fa.length();
+                    return fa.substring(0, num);
+                } else if (val.matches("authors\\d+")) {
+                    String s = NAuthors(authString, Integer.parseInt(val
+                        .substring(7)));
+                    return s == null ? "" : s;
+                } else {
+                    // This "auth" business was a dead end, so just
+                    // use it literally:
+                    return getField(_entry, val);
+                }
+            } else if (val.startsWith("ed")) {
+                // Gather all markers starting with "ed" here, so we
+                // don't have to check all the time.
+                if (val.equals("edtr")) {
+                    return firstAuthor(_entry.getField("editor").toString());
+                } else if (val.equals("editors")) {
+                    return allAuthors(_entry.getField("editor").toString());
+                // Last author's last name
+                } else if (val.equals("editorLast")) {
+                    return lastAuthor(_entry.getField("editor").toString());
+                } else if (val.equals("editorIni")) {
+                    String s = oneAuthorPlusIni(_entry.getField("editor")
+                        .toString());
+                    return s == null ? "" : s;
+                } else if (val.matches("edtrIni[\\d]+")) {
+                    int num = Integer.parseInt(val.substring(7));
+                    String s = authIniN(_entry.getField("editor").toString(), num);
+                    return s == null ? "" : s;
+                } else if (val.matches("edtr[\\d]+_[\\d]+")) {
+                    String[] nums = val.substring(4).split("_");
+                    String s = authN_M(_entry.getField("editor").toString(),
+                        Integer.parseInt(nums[0]),
+                        Integer.parseInt(nums[1]) - 1);
+                    return s == null ? "" : s;
+                } else if (val.equals("edtr.edtr.ea")) {
+                    String s = authAuthEa(_entry.getField("editor").toString());
+                    return s == null ? "" : s;
+                } else if (val.equals("edtrshort")) {
+                    String s = authshort(_entry.getField("editor").toString());
+                    return s == null ? "" : s;
+                }
+                // authN. First N chars of the first author's last
+                // name.
+                else if (val.matches("edtr\\d+")) {
+                    int num = Integer.parseInt(val.substring(4));
+                    String fa = firstAuthor(_entry.getField("editor")
+                        .toString());
+                    if (fa == null)
+                        return "";
+                    if (num > fa.length())
+                        num = fa.length();
+                    return fa.substring(0, num);
+                } else {
+                    // This "ed" business was a dead end, so just
+                    // use it literally:
+                    return getField(_entry, val);
+                }
+            } else if (val.equals("firstpage")) {
+                return firstPage(_entry.getField("pages"));
+            } else if (val.equals("lastpage")) {
+                return lastPage(_entry.getField("pages"));
+            } else if (val.equals("shorttitle")) {
+                return getTitleWords(3, _entry);
+            } else if (val.equals("shortyear")) {
+                String ss = _entry.getField("year");
+                if (ss.startsWith("in") || ss.startsWith("sub")) {
+                    return "IP";
+                } else if (ss.length() > 2) {
+                    return ss.substring(ss.length() - 2);
+                } else {
+                    return ss;
+                }
+            } else if (val.equals("veryshorttitle")) {
+                return getTitleWords(1, _entry);
+            } else if (val.matches("keyword\\d+")) {
+                StringBuilder sb = new StringBuilder();
+                int num = Integer.parseInt(val.substring(7));
+                String kw = getField(_entry, "keywords");
+                if (kw != null) {
+                	// TODO: merge this functionality with Util.getSeparatedKeywords
+                    String[] keywords = kw.split("[,;]\\s*");
+                    if ((num > 0) && (num < keywords.length))
+                        sb.append(keywords[num - 1].trim());
+                }
+                return sb.toString();
+            } else {
+                // we haven't seen any special demands
+                return getField(_entry, val);
+            }
+        } catch (NullPointerException ex) {
+            return "";
+        }
+
+    }
+
+    /**
+     * Look up a field of a BibtexEntry, returning its String value, or an
+     * empty string if it isn't set.
+     * @param entry The entry.
+     * @param field The field to look up.
+     * @return The field value.
+     */
+    private static String getField(BibtexEntry entry, String field) {
+        Object o = entry.getField(field);
+        return o != null ? (String)o : "";
+    }
+
+    /**
+     * Computes an appendix to a BibTeX key that could make it unique. We use
+     * a-z for numbers 0-25, and then aa-az, ba-bz, etc.
+     * 
+     * @param number
+     *            The appendix number.
+     * @return The String to append.
+     */
+    private static String getAddition(int number) {
+        if (number >= CHARS.length()) {
+            int lastChar = number % CHARS.length();
+            return getAddition(number/CHARS.length()-1) + CHARS.substring(lastChar, lastChar+1);
+        } else
+            return CHARS.substring(number, number+1);
+    }
+
+
+    static String getTitleWords(int number, BibtexEntry _entry) {
+        String ss = (new RemoveLatexCommands()).format(_entry.getField("title").toString());
+        StringBuffer _sbvalue = new StringBuffer(),
+        current;
+        int piv=0, words = 0;
+
+        // sorry for being English-centric. I guess these
+        // words should really be an editable preference.
+        mainl: while ((piv < ss.length()) && (words < number)) {
+            current = new StringBuffer();
+            // Get the next word:
+            while ((piv<ss.length()) && !Character.isWhitespace(ss.charAt(piv))
+                    && (ss.charAt(piv) != '-')) {
+                current.append(ss.charAt(piv));
+                piv++;
+                //System.out.println(".. "+piv+" '"+current.toString()+"'");
+            }
+            piv++;
+            // Check if it is ok:
+            String word = current.toString().trim();
+            if (word.length() == 0)
+                continue mainl;
+            for(int _i=0; _i< Globals.SKIP_WORDS.length; _i++) {
+                if (word.equalsIgnoreCase(Globals.SKIP_WORDS[_i])) {
+                    continue mainl;
+                }
+            }
+
+            // If we get here, the word was accepted.
+            if (_sbvalue.length() > 0)
+                _sbvalue.append(" ");
+            _sbvalue.append(word);
+            words++;
+        }
+
+        return _sbvalue.toString();
+    }
+
+    static String keepLettersAndDigitsOnly(String in) {
+        StringBuilder sb = new StringBuilder();
+        for (int i=0; i<in.length(); i++) {
+            if (Character.isLetterOrDigit(in.charAt(i)))
+                sb.append(in.charAt(i));
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Tests whether a given label is unique.
+     * @param label a <code>String</code>
+     * @return <code>true</code> if and only if the <code>label</code> is unique
+     */
+    public static boolean isLabelUnique(String label) {
+        boolean _isUnique = true;
+        BibtexEntry _entry;
+        int _dbSize = _db.getEntryCount();
+        // run through the whole DB and check the key field
+        // if this could be made recursive I would be very happy
+        // it kinda sux that we have to run through the whole db.
+        // The idea here is that if we meet NO match, the _duplicate
+        // field will be true
+
+        for (int i = 0; i < _dbSize; i++) {
+            _entry = _db.getEntryById(String.valueOf(i));
+
+            // oh my! there is a match! we better set the uniqueness to false
+            // and leave this for-loop all together
+            if (_entry.getField(BibtexFields.KEY_FIELD).equals(label)) {
+                _isUnique = false;
+                break;
+            }
+        }
+
+        return _isUnique;
+
+    }
+
+    /**
+     * Gets the last name of the first author/editor
+     * 
+     * @param authorField
+     *            a <code>String</code>
+     * @return the surname of an author/editor or "" if no author was found
+     *    This method is guaranteed to never return null.
+     * 
+     * @throws NullPointerException
+     *             if authorField == null
+     */
+    public static String firstAuthor(String authorField) {
+        AuthorList al = AuthorList.getAuthorList(authorField);
+        if (al.size() == 0)
+            return "";
+        String s = al.getAuthor(0).getLast();
+        return s != null ? s : "";
+
+    }
+
+    /**
+     * Gets the von part and the last name of the first author/editor
+     *
+     * @param authorField
+     *            a <code>String</code>
+     * @return the von part and surname of an author/editor or "" if no author was found.
+     *  This method is guaranteed to never return null.
+     *
+     * @throws NullPointerException
+     *             if authorField == null
+     */
+    public static String firstAuthorVonAndLast(String authorField) {
+        AuthorList al = AuthorList.getAuthorList(authorField);
+        if (al.size() == 0)
+            return "";
+        String s = al.getAuthor(0).getVon();
+        StringBuilder sb = new StringBuilder();
+        if (s != null) {
+            sb.append(s);
+            sb.append(' ');
+        }
+        s = al.getAuthor(0).getLast();
+        if (s != null)
+            sb.append(s);
+        return sb.toString();
+    }
+
+    /**
+     * Gets the last name of the last author/editor
+     * @param authorField a <code>String</code>
+     * @return the sur name of an author/editor
+     */
+    private static String lastAuthor(String authorField) {
+        String[] tokens = AuthorList.fixAuthorForAlphabetization(authorField).split("\\band\\b");
+        if (tokens.length > 0) { // if author is empty
+            String[] lastAuthor = tokens[tokens.length-1].replaceAll("\\s+", " ").trim().split(" ");
+            return lastAuthor[0];
+
+        }
+        else return "";
+    }
+
+    /**
+     * Gets the last name of all authors/editors
+     * @param authorField a <code>String</code>
+     * @return the sur name of all authors/editors
+     */
+    private static String allAuthors(String authorField) {
+        String author = "";
+        // This code was part of 'ApplyRule' in 'ArticleLabelRule'
+        String[] tokens = AuthorList.fixAuthorForAlphabetization(authorField).split("\\band\\b");
+        int i = 0;
+        while (tokens.length > i) {
+            // convert lastname, firstname to firstname lastname
+            String[] firstAuthor = tokens[i].replaceAll("\\s+", " ").trim().split(" ");
+            // lastname, firstname
+            author += firstAuthor[0];
+            i++;
+        }
+        return author;
+    }
+    
+    /**
+     * Returns the authors according to the BibTeX-alpha-Style
+     * @param authorField string containing the value of the author field
+     * @return the initials of all authornames
+     */
+    private static String authorsAlpha(String authorField) {
+    	String authors = "";
+    	
+    	String fixedAuthors = AuthorList.fixAuthor_lastNameOnlyCommas(authorField, false);
+    	
+    	// drop the "and" before the last author
+    	// -> makes processing easier
+    	fixedAuthors = fixedAuthors.replace(" and ", ", ");
+    	
+    	String[] tokens = fixedAuthors.split(",");
+    	int max = (tokens.length > 4 ? 3 : tokens.length);
+    	if (max==1) {
+			String[] firstAuthor = tokens[0].replaceAll("\\s+", " ").trim().split(" ");
+			// take first letter of any "prefixes" (e.g. van der Aalst -> vd) 
+			for (int j=0; j<firstAuthor.length-1; j++) {
+				authors = authors.concat(firstAuthor[j].substring(0,1));
+			}
+			// append last part of last name completely
+			authors = authors.concat(firstAuthor[firstAuthor.length-1].substring(0,
+                    Math.min(3, firstAuthor[firstAuthor.length-1].length())));
+    	} else {
+    		for (int i = 0; i < max; i++) {
+    			// replace all whitespaces by " "
+    			// split the lastname at " "
+    			String[] curAuthor = tokens[i].replaceAll("\\s+", " ").trim().split(" ");
+    			for (int j=0; j<curAuthor.length; j++) {
+    				// use first character of each part of lastname
+    				authors = authors.concat(curAuthor[j].substring(0, 1));
+    			}
+    		}
+    		if (tokens.length > 4) {
+    			authors = authors.concat("+");
+    		}
+    	}
+    	return authors;
+    }
+
+    /**
+     * Gets the surnames of the first N authors and appends EtAl if there are more than N authors
+     * @param authorField a <code>String</code>
+     * @param n the number of desired authors
+     * @return Gets the surnames of the first N authors and appends EtAl if there are more than N authors
+     */
+    private static String NAuthors(String authorField, int n) {
+        String author = "";
+        // This code was part of 'ApplyRule' in 'ArticleLabelRule'
+        String[] tokens = AuthorList.fixAuthorForAlphabetization(authorField).split("\\band\\b");
+        int i = 0;
+        while (tokens.length > i && i < n) {
+            // convert lastname, firstname to firstname lastname
+            String[] firstAuthor = tokens[i].replaceAll("\\s+", " ").trim().split(" ");
+            // lastname, firstname
+            author += firstAuthor[0];
+            i++;
+        }
+        if (tokens.length <= n) return author;
+        return author += "EtAl";
+    }
+
+    /**
+     * Gets the first part of the last name of the first
+     * author/editor, and appends the last name initial of the
+     * remaining authors/editors.
+     * @param authorField a <code>String</code>
+     * @return the sur name of all authors/editors
+     */
+    private static String oneAuthorPlusIni(String authorField) {
+        final int CHARS_OF_FIRST = 5;
+        authorField = AuthorList.fixAuthorForAlphabetization(authorField);
+        String author = "";
+        // This code was part of 'ApplyRule' in 'ArticleLabelRule'
+        String[] tokens = authorField.split("\\band\\b");
+        int i = 1;
+        if (tokens.length == 0) {
+            return author;
+        }
+        String[] firstAuthor = tokens[0].replaceAll("\\s+", " ").split(" ");
+        author = firstAuthor[0].substring(0,
+            Math.min(CHARS_OF_FIRST,
+                firstAuthor[0].length()));
+        while (tokens.length > i) {
+            // convert lastname, firstname to firstname lastname
+            author += tokens[i].trim().charAt(0);
+            i++;
+        }
+        return author;
+
+    }
+
+    /**
+     * auth.auth.ea format:
+     * Isaac Newton and James Maxwell and Albert Einstein (1960)
+     * Isaac Newton and James Maxwell (1960)
+     *  give:
+     * Newton.Maxwell.ea
+     * Newton.Maxwell
+     */
+    private static String authAuthEa(String authorField) {
+        authorField = AuthorList.fixAuthorForAlphabetization(authorField);
+        StringBuffer author = new StringBuffer();
+
+        String[] tokens = authorField.split("\\band\\b");
+        if (tokens.length == 0) {
+            return "";
+        }
+        author.append((tokens[0].split(","))[0]);
+        if (tokens.length >= 2)
+            author.append(".").append((tokens[1].split(","))[0]);
+        if (tokens.length > 2)
+            author.append(".ea");
+
+        return author.toString();
+    }
+
+    /**
+     * auth.etal format:
+     * Isaac Newton and James Maxwell and Albert Einstein (1960)
+     * Isaac Newton and James Maxwell (1960)
+     *  give:
+     * Newton.etal
+     * Newton.Maxwell
+     */
+    private static String authEtal(String authorField) {
+        authorField = AuthorList.fixAuthorForAlphabetization(authorField);
+        StringBuffer author = new StringBuffer();
+
+        String[] tokens = authorField.split("\\band\\b");
+        if (tokens.length == 0) {
+            return "";
+        }
+        author.append((tokens[0].split(","))[0]);
+        if (tokens.length == 2)
+            author.append(".").append((tokens[1].split(","))[0]);
+        else if (tokens.length > 2)
+            author.append(".etal");
+
+        return author.toString();
+    }
+
+    /**
+     * The first N characters of the Mth author/editor.
+     */
+    private static String authN_M(String authorField, int n, int m) {
+        authorField = AuthorList.fixAuthorForAlphabetization(authorField);
+
+        String[] tokens = authorField.split("\\band\\b");
+        if ((tokens.length <= m) || (n<0) || (m<0)) {
+            return "";
+        }
+        String lastName = (tokens[m].split(","))[0].trim();
+        if (lastName.length() <= n)
+            return lastName;
+        else
+            return lastName.substring(0, n);
+    }
+
+    /**
+     * authshort format:
+     * added by Kolja Brix, kbx at users.sourceforge.net
+     *
+     * given author names
+     * 
+     *   Isaac Newton and James Maxwell and Albert Einstein and N. Bohr
+     * 
+     *   Isaac Newton and James Maxwell and Albert Einstein
+     *   
+     *   Isaac Newton and James Maxwell
+     *   
+     *   Isaac Newton
+     * 
+     * yield
+     * 
+     *   NME+
+     *   
+     *   NME
+     *   
+     *   NM
+     *   
+     *   Newton
+     */
+    private static String authshort(String authorField) {
+        authorField = AuthorList.fixAuthorForAlphabetization(authorField);
+        StringBuffer author = new StringBuffer();
+        String[] tokens = authorField.split("\\band\\b");
+        int i = 0;
+
+        if (tokens.length == 1) {
+
+            author.append(authN_M(authorField,authorField.length(),0));
+
+        } else if (tokens.length >= 2) {
+
+            while (tokens.length > i && i<3) {
+                author.append(authN_M(authorField,1,i));
+                i++;
+            }
+
+            if (tokens.length > 3)
+                author.append("+");
+
+        }
+
+        return author.toString();
+    }
+
+    /**
+     * authIniN format:
+     * 
+     * Each author gets (N div #authors) chars, the remaining (N mod #authors)
+     * chars are equally distributed to the authors first in the row.
+     * 
+     * If (N < #authors), only the first N authors get mentioned.
+     * 
+     * For example if
+     * 
+     * a) I. Newton and J. Maxwell and A. Einstein and N. Bohr (..)
+     * 
+     * b) I. Newton and J. Maxwell and A. Einstein
+     * 
+     * c) I. Newton and J. Maxwell
+     * 
+     * d) I. Newton
+     * 
+     * authIni4 gives: a) NMEB, b) NeME, c) NeMa, d) Newt
+     * 
+     * @param authorField
+     *            The authors to format.
+     * 
+     * @param n
+     *            The maximum number of characters this string will be long. A
+     *            negative number or zero will lead to "" be returned.
+     * 
+     * @throws NullPointerException
+     *             if authorField is null and n > 0
+     */
+    public static String authIniN(String authorField, int n) {
+        
+        if (n <= 0)
+            return "";
+        
+        authorField = AuthorList.fixAuthorForAlphabetization(authorField);
+        StringBuffer author = new StringBuffer();
+        String[] tokens = authorField.split("\\band\\b");
+        int i = 0;
+        int charsAll = n / tokens.length;
+
+        if (tokens.length == 0) {
+            return author.toString();
+        }
+
+        while (tokens.length > i) {
+            if ( i < (n % tokens.length) ) {
+                author.append(authN_M(authorField,charsAll+1,i));
+            } else {
+                author.append(authN_M(authorField,charsAll,i));
+            }
+            i++;
+        }
+
+        if (author.length() <= n)
+            return author.toString();
+        else
+            return author.toString().substring(0, n);
+    }
+
+
+    /**
+     * Split the pages field into separate numbers and return the lowest
+     * 
+     * @param pages
+     *            (may not be null) a pages string such as 42--111 or
+     *            7,41,73--97 or 43+
+     * 
+     * @return the first page number or "" if no number is found in the string
+     * 
+     * @throws NullPointerException
+     *             if pages is null
+     */
+    public static String firstPage(String pages) {
+        String[] _pages = pages.split("\\D+");
+        int result = Integer.MAX_VALUE;
+        for (String n : _pages){
+            if (n.matches("\\d+"))
+                result = Math.min(Integer.parseInt(n), result);
+        }
+        
+        if (result == Integer.MAX_VALUE)
+            return "";
+        else 
+            return String.valueOf(result);
+    }
+
+    /**
+     * Split the pages field into separate numbers and return the highest
+     * 
+     * @param pages
+     *            a pages string such as 42--111 or 7,41,73--97 or 43+
+     * 
+     * @return the first page number or "" if no number is found in the string
+     * 
+     * @throws NullPointerException
+     *             if pages is null.
+     */
+    public static String lastPage(String pages) {
+        String[] _pages = pages.split("\\D+");
+        int result = Integer.MIN_VALUE;
+        for (String n : _pages){
+            if (n.matches("\\d+"))
+                result = Math.max(Integer.parseInt(n), result);
+        }
+        
+        if (result == Integer.MIN_VALUE)
+            return "";
+        else 
+            return String.valueOf(result);
+    }
+
+    /**
+         * Parse a field marker with modifiers, possibly containing a parenthesised modifier,
+         * as well as escaped colons and parentheses.
+         * @param arg The argument string.
+         * @return An array of strings representing the parts of the marker
+         */
+        public static String[] parseFieldMarker(String arg) {
+            List<String> parts = new ArrayList<String>();
+            StringBuilder current = new StringBuilder();
+            boolean escaped = false;
+            int inParenthesis = 0;
+            for (int i=0; i<arg.length(); i++) {
+                if ((arg.charAt(i) == ':') && !escaped && (inParenthesis == 0)) {
+                    parts.add(current.toString());
+                    current = new StringBuilder();
+                } else if ((arg.charAt(i) == '(') && !escaped) {
+                    inParenthesis++;
+                    current.append(arg.charAt(i));
+                } else if ((arg.charAt(i) == ')') && !escaped && (inParenthesis > 0)) {
+                    inParenthesis--;
+                    current.append(arg.charAt(i));
+                } else if (arg.charAt(i) == '\\') {
+                    if (escaped) {
+                        escaped = false;
+                        current.append(arg.charAt(i));
+                    } else
+                        escaped = true;
+                } else if (escaped) {
+                    current.append(arg.charAt(i));
+                    escaped = false;
+                } else
+                    current.append(arg.charAt(i));
+            }
+            parts.add(current.toString());
+            return parts.toArray(new String[parts.size()]);
+        }
+
+}
diff --git a/src/java/net/sf/jabref/labelPattern/ResolveDuplicateLabelDialog.java b/src/java/net/sf/jabref/labelPattern/ResolveDuplicateLabelDialog.java
index 718275a..4399275 100644
--- a/src/java/net/sf/jabref/labelPattern/ResolveDuplicateLabelDialog.java
+++ b/src/java/net/sf/jabref/labelPattern/ResolveDuplicateLabelDialog.java
@@ -1,143 +1,143 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.labelPattern;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import net.sf.jabref.*;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Dialog box for resolving duplicate bibte keys
- */
-public class ResolveDuplicateLabelDialog {
-
-    JDialog diag;
-    JButton ok = new JButton(Globals.lang("Ok")),
-        cancel = new JButton(Globals.lang("Cancel"));
-    List<JCheckBox> cbs = new ArrayList<JCheckBox>();
-    private boolean okPressed = false;
-
-    final static String layout = "<font face=\"arial\"><b><i>\\bibtextype</i><a name=\"\\bibtexkey\">\\begin{bibtexkey} (\\bibtexkey)</a>\\end{bibtexkey}</b><br>\n" +
-            "\\begin{author} \\format[HTMLChars,AuthorAbbreviator,AuthorAndsReplacer]{\\author}<BR>\\end{author}\n" +
-            "\\begin{editor} \\format[HTMLChars,AuthorAbbreviator,AuthorAndsReplacer]{\\editor} <i>(\\format[IfPlural(Eds.,Ed.)]{\\editor})</i><BR>\\end{editor}\n" +
-            "\\begin{title} \\format[HTMLChars]{\\title} \\end{title}<BR>\n" +
-            "\\begin{chapter} \\format[HTMLChars]{\\chapter}<BR>\\end{chapter}\n" +
-            "\\begin{journal} <em>\\format[HTMLChars]{\\journal}, </em>\\end{journal}\n" +
-            "\\begin{booktitle} <em>\\format[HTMLChars]{\\booktitle}, </em>\\end{booktitle}\n" +
-            "\\begin{school} <em>\\format[HTMLChars]{\\school}, </em>\\end{school}\n" +
-            "\\begin{institution} <em>\\format[HTMLChars]{\\institution}, </em>\\end{institution}\n" +
-            "\\begin{publisher} <em>\\format[HTMLChars]{\\publisher}, </em>\\end{publisher}\n" +
-            "\\begin{year}<b>\\year</b>\\end{year}\\begin{volume}<i>, \\volume</i>\\end{volume}\\begin{pages}, \\format[FormatPagesForHTML]{\\pages} \\end{pages}\n" +
-            "<p></p></font>";
-
-    public ResolveDuplicateLabelDialog(BasePanel panel, String key,
-                                       List<BibtexEntry> entries) {
-        diag = new JDialog(panel.frame(), Globals.lang("Duplicate BibTeX key"), true);
-
-        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout(
-                "left:pref, 4dlu, fill:pref", ""));
-        b.append(new JLabel(Globals.lang("Duplicate key")+": "+key), 3);
-        b.nextLine();
-        b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-
-        boolean first = true;
-        for (BibtexEntry entry : entries) {
-            JCheckBox cb = new JCheckBox(Globals.lang("Generate key"), !first);
-            //JPanel pan = new JPanel();
-            //pan.setLayout(new BorderLayout());
-            //pan.add(cb, BorderLayout.NORTH);
-            //cb.add(new JPanel(), BorderLayout.CENTER);
-            b.append(cb);
-            PreviewPanel pp = new PreviewPanel(null, entry, null , new MetaData(), layout);
-            pp.setPreferredSize(new Dimension(800, 90));
-            //pp.setBorder(BorderFactory.createEtchedBorder());
-			b.append(new JScrollPane(pp));
-            b.nextLine();
-            cbs.add(cb);
-            first = false;
-        }
-
-
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-
-        diag.getContentPane().add(b.getPanel(), BorderLayout.CENTER);
-        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-
-        diag.pack();
-
-        ok.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                okPressed = true;
-                diag.dispose();
-            }
-        });
-        cancel.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                diag.dispose();
-            }
-        });
-
-
-        AbstractAction closeAction = new AbstractAction() {
-            public void actionPerformed(ActionEvent e) {
-                diag.dispose();
-            }
-        };
-        ActionMap am = b.getPanel().getActionMap();
-        InputMap im = b.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", closeAction);
-    }
-
-/**
-     * After the dialog has been closed, this query answers whether the dialog was okPressed
-     * (by cancel button or by closing the dialog directly).
-     * @return true if it was okPressed, false if Ok was pressed.
-     */
-    public boolean isOkPressed() {
-        return okPressed;
-    }
-
-    /**
-     * Get the list of checkboxes where the user has selected which entries to generate
-     * new keys for.
-     * @return the list of checkboxes
-     */
-    public List<JCheckBox> getCheckBoxes() {
-        return cbs;
-    }
-
-    public void show() {
-        okPressed = false;
-        diag.setLocationRelativeTo(diag.getParent());
-        diag.setVisible(true);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.labelPattern;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import net.sf.jabref.*;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Dialog box for resolving duplicate bibte keys
+ */
+public class ResolveDuplicateLabelDialog {
+
+    JDialog diag;
+    JButton ok = new JButton(Globals.lang("Ok")),
+        cancel = new JButton(Globals.lang("Cancel"));
+    List<JCheckBox> cbs = new ArrayList<JCheckBox>();
+    private boolean okPressed = false;
+
+    final static String layout = "<font face=\"arial\"><b><i>\\bibtextype</i><a name=\"\\bibtexkey\">\\begin{bibtexkey} (\\bibtexkey)</a>\\end{bibtexkey}</b><br>\n" +
+            "\\begin{author} \\format[HTMLChars,AuthorAbbreviator,AuthorAndsReplacer]{\\author}<BR>\\end{author}\n" +
+            "\\begin{editor} \\format[HTMLChars,AuthorAbbreviator,AuthorAndsReplacer]{\\editor} <i>(\\format[IfPlural(Eds.,Ed.)]{\\editor})</i><BR>\\end{editor}\n" +
+            "\\begin{title} \\format[HTMLChars]{\\title} \\end{title}<BR>\n" +
+            "\\begin{chapter} \\format[HTMLChars]{\\chapter}<BR>\\end{chapter}\n" +
+            "\\begin{journal} <em>\\format[HTMLChars]{\\journal}, </em>\\end{journal}\n" +
+            "\\begin{booktitle} <em>\\format[HTMLChars]{\\booktitle}, </em>\\end{booktitle}\n" +
+            "\\begin{school} <em>\\format[HTMLChars]{\\school}, </em>\\end{school}\n" +
+            "\\begin{institution} <em>\\format[HTMLChars]{\\institution}, </em>\\end{institution}\n" +
+            "\\begin{publisher} <em>\\format[HTMLChars]{\\publisher}, </em>\\end{publisher}\n" +
+            "\\begin{year}<b>\\year</b>\\end{year}\\begin{volume}<i>, \\volume</i>\\end{volume}\\begin{pages}, \\format[FormatPagesForHTML]{\\pages} \\end{pages}\n" +
+            "<p></p></font>";
+
+    public ResolveDuplicateLabelDialog(BasePanel panel, String key,
+                                       List<BibtexEntry> entries) {
+        diag = new JDialog(panel.frame(), Globals.lang("Duplicate BibTeX key"), true);
+
+        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout(
+                "left:pref, 4dlu, fill:pref", ""));
+        b.append(new JLabel(Globals.lang("Duplicate key")+": "+key), 3);
+        b.nextLine();
+        b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+        boolean first = true;
+        for (BibtexEntry entry : entries) {
+            JCheckBox cb = new JCheckBox(Globals.lang("Generate key"), !first);
+            //JPanel pan = new JPanel();
+            //pan.setLayout(new BorderLayout());
+            //pan.add(cb, BorderLayout.NORTH);
+            //cb.add(new JPanel(), BorderLayout.CENTER);
+            b.append(cb);
+            PreviewPanel pp = new PreviewPanel(null, entry, null , new MetaData(), layout);
+            pp.setPreferredSize(new Dimension(800, 90));
+            //pp.setBorder(BorderFactory.createEtchedBorder());
+			b.append(new JScrollPane(pp));
+            b.nextLine();
+            cbs.add(cb);
+            first = false;
+        }
+
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+        diag.getContentPane().add(b.getPanel(), BorderLayout.CENTER);
+        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+
+        diag.pack();
+
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                okPressed = true;
+                diag.dispose();
+            }
+        });
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                diag.dispose();
+            }
+        });
+
+
+        AbstractAction closeAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                diag.dispose();
+            }
+        };
+        ActionMap am = b.getPanel().getActionMap();
+        InputMap im = b.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", closeAction);
+    }
+
+/**
+     * After the dialog has been closed, this query answers whether the dialog was okPressed
+     * (by cancel button or by closing the dialog directly).
+     * @return true if it was okPressed, false if Ok was pressed.
+     */
+    public boolean isOkPressed() {
+        return okPressed;
+    }
+
+    /**
+     * Get the list of checkboxes where the user has selected which entries to generate
+     * new keys for.
+     * @return the list of checkboxes
+     */
+    public List<JCheckBox> getCheckBoxes() {
+        return cbs;
+    }
+
+    public void show() {
+        okPressed = false;
+        diag.setLocationRelativeTo(diag.getParent());
+        diag.setVisible(true);
+    }
+}
diff --git a/src/java/net/sf/jabref/labelPattern/SearchFixDuplicateLabels.java b/src/java/net/sf/jabref/labelPattern/SearchFixDuplicateLabels.java
index 9b87159..3778d99 100644
--- a/src/java/net/sf/jabref/labelPattern/SearchFixDuplicateLabels.java
+++ b/src/java/net/sf/jabref/labelPattern/SearchFixDuplicateLabels.java
@@ -1,114 +1,114 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.labelPattern;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableKeyChange;
-
-import javax.swing.*;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * Function for resolving duplicate BibTeX keys.
- */
-public class SearchFixDuplicateLabels extends AbstractWorker {
-    private BasePanel panel;
-    HashMap<String, List<BibtexEntry>> dupes = null;
-
-    public SearchFixDuplicateLabels(BasePanel panel) {
-
-        this.panel = panel;
-    }
-
-    public void run() {
-        // Find all multiple occurences of BibTeX keys.
-        dupes = new HashMap<String, List<BibtexEntry>>();
-
-        HashMap<String, BibtexEntry> foundKeys = new HashMap<String, BibtexEntry>();
-        BibtexDatabase db = panel.database();
-        for (BibtexEntry entry : db.getEntries()) {
-            String key = entry.getCiteKey();
-            // Only handle keys that are actually set:
-            if ((key != null) && (key.length() > 0)) {
-                // See whether this entry's key is already known:
-                if (!foundKeys.containsKey(key)) {
-                    // Not already known. Add key and entry to map:
-                    foundKeys.put(key, entry);
-                }
-                else {
-                    // Already known, so we have found a dupe. See if it was already found as a dupe:
-                    if (dupes.containsKey(key)) {
-                        // Already in the dupe map. Add this entry as well:
-                        dupes.get(key).add(entry);
-                    }
-                    else {
-                        // Construct a list of entries for this key:
-                        ArrayList<BibtexEntry> al = new ArrayList<BibtexEntry>();
-                        // Add both the first one we found, and the one we found just now:
-                        al.add(foundKeys.get(key));
-                        al.add(entry);
-                        // Add the list to the dupe map:
-                        dupes.put(key, al);
-                    }
-                }
-            }
-        }
-    }
-
-    @Override
-    public void init() throws Throwable {
-        panel.output(Globals.lang("Resolving duplicate BibTeX keys..."));
-
-    }
-
-    @Override
-    public void update() {
-        List<BibtexEntry> toGenerateFor = new ArrayList<BibtexEntry>();
-        for (String key : dupes.keySet()) {
-            ResolveDuplicateLabelDialog rdld = new ResolveDuplicateLabelDialog(panel,
-                    key, dupes.get(key));
-            rdld.show();
-            if (rdld.isOkPressed()) {
-                List<JCheckBox> cbs = rdld.getCheckBoxes();
-                for (int i=0; i<cbs.size(); i++) {
-                    if (cbs.get(i).isSelected()) {
-                        // The checkbox for entry i has been selected, so we should generate a new key for it:
-                        toGenerateFor.add(dupes.get(key).get(i));
-                    }
-                }
-            }
-        }
-
-        // Do the actual generation:
-        if (toGenerateFor.size() > 0) {
-            NamedCompound ce = new NamedCompound("resolve duplicate keys");
-            for (BibtexEntry entry : toGenerateFor) {
-                String oldKey = entry.getCiteKey();
-                entry = LabelPatternUtil.makeLabel(panel.metaData(), panel.database(), entry);
-                ce.addEdit(new UndoableKeyChange(panel.database(), entry.getId(), oldKey,
-                    entry.getField(BibtexFields.KEY_FIELD)));
-            }
-            ce.end();
-            panel.undoManager.addEdit(ce);
-            panel.markBaseChanged();
-        }
-        panel.output(Globals.lang("Finished resolving duplicate BibTeX keys. %0 entries modified.",
-                String.valueOf(toGenerateFor.size())));
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.labelPattern;
+
+import net.sf.jabref.*;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableKeyChange;
+
+import javax.swing.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * Function for resolving duplicate BibTeX keys.
+ */
+public class SearchFixDuplicateLabels extends AbstractWorker {
+    private BasePanel panel;
+    HashMap<String, List<BibtexEntry>> dupes = null;
+
+    public SearchFixDuplicateLabels(BasePanel panel) {
+
+        this.panel = panel;
+    }
+
+    public void run() {
+        // Find all multiple occurences of BibTeX keys.
+        dupes = new HashMap<String, List<BibtexEntry>>();
+
+        HashMap<String, BibtexEntry> foundKeys = new HashMap<String, BibtexEntry>();
+        BibtexDatabase db = panel.database();
+        for (BibtexEntry entry : db.getEntries()) {
+            String key = entry.getCiteKey();
+            // Only handle keys that are actually set:
+            if ((key != null) && (key.length() > 0)) {
+                // See whether this entry's key is already known:
+                if (!foundKeys.containsKey(key)) {
+                    // Not already known. Add key and entry to map:
+                    foundKeys.put(key, entry);
+                }
+                else {
+                    // Already known, so we have found a dupe. See if it was already found as a dupe:
+                    if (dupes.containsKey(key)) {
+                        // Already in the dupe map. Add this entry as well:
+                        dupes.get(key).add(entry);
+                    }
+                    else {
+                        // Construct a list of entries for this key:
+                        ArrayList<BibtexEntry> al = new ArrayList<BibtexEntry>();
+                        // Add both the first one we found, and the one we found just now:
+                        al.add(foundKeys.get(key));
+                        al.add(entry);
+                        // Add the list to the dupe map:
+                        dupes.put(key, al);
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public void init() throws Throwable {
+        panel.output(Globals.lang("Resolving duplicate BibTeX keys..."));
+
+    }
+
+    @Override
+    public void update() {
+        List<BibtexEntry> toGenerateFor = new ArrayList<BibtexEntry>();
+        for (String key : dupes.keySet()) {
+            ResolveDuplicateLabelDialog rdld = new ResolveDuplicateLabelDialog(panel,
+                    key, dupes.get(key));
+            rdld.show();
+            if (rdld.isOkPressed()) {
+                List<JCheckBox> cbs = rdld.getCheckBoxes();
+                for (int i=0; i<cbs.size(); i++) {
+                    if (cbs.get(i).isSelected()) {
+                        // The checkbox for entry i has been selected, so we should generate a new key for it:
+                        toGenerateFor.add(dupes.get(key).get(i));
+                    }
+                }
+            }
+        }
+
+        // Do the actual generation:
+        if (toGenerateFor.size() > 0) {
+            NamedCompound ce = new NamedCompound("resolve duplicate keys");
+            for (BibtexEntry entry : toGenerateFor) {
+                String oldKey = entry.getCiteKey();
+                entry = LabelPatternUtil.makeLabel(panel.metaData(), panel.database(), entry);
+                ce.addEdit(new UndoableKeyChange(panel.database(), entry.getId(), oldKey,
+                    entry.getField(BibtexFields.KEY_FIELD)));
+            }
+            ce.end();
+            panel.undoManager.addEdit(ce);
+            panel.markBaseChanged();
+        }
+        panel.output(Globals.lang("Finished resolving duplicate BibTeX keys. %0 entries modified.",
+                String.valueOf(toGenerateFor.size())));
+    }
+}
diff --git a/src/java/net/sf/jabref/mods/MODSDatabase.java b/src/java/net/sf/jabref/mods/MODSDatabase.java
index b9714a7..c72c4cd 100644
--- a/src/java/net/sf/jabref/mods/MODSDatabase.java
+++ b/src/java/net/sf/jabref/mods/MODSDatabase.java
@@ -1,88 +1,88 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.mods;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-/**
- * @author Michael Wrighton
- *
- */
-public class MODSDatabase {
-	protected Set<MODSEntry> entries;
-	
-	public MODSDatabase() {
-		// maybe make this sorted later...
-		entries = new HashSet<MODSEntry>();
-	}
-	
-	public MODSDatabase(BibtexDatabase bibtex) {
-        addEntries(bibtex, bibtex.getKeySet());
-    }
-
-    public MODSDatabase(BibtexDatabase bibtex, Set<String> keySet) {
-        if (keySet == null)
-            keySet = bibtex.getKeySet();
-        addEntries(bibtex, keySet);
-    }
-
-    private void addEntries(BibtexDatabase database, Set<String> keySet) {
-        entries = new HashSet<MODSEntry>();
-        for(Iterator<String> iter = keySet.iterator(); iter.hasNext(); ) {
-			BibtexEntry entry = database.getEntryById(iter.next());
-			MODSEntry newMods = new MODSEntry(entry);
-			entries.add(newMods);
-		}
-	}
-	public Document getDOMrepresentation() {
-		Document result = null;
-	   	try {
-	   		DocumentBuilder dbuild = DocumentBuilderFactory.
-														newInstance().
-														newDocumentBuilder();
-	   		result = dbuild.newDocument();
-	   		Element modsCollection = result.createElement("modsCollection");
-	   		modsCollection.setAttribute("xmlns", "http://www.loc.gov/mods/v3");
-	   		modsCollection.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
-	   		modsCollection.setAttribute("xsi:schemaLocation", "http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd");
-	   		
-	   		for(Iterator<MODSEntry> iter = entries.iterator(); iter.hasNext(); ) {
-	   			MODSEntry entry = iter.next();
-	   			Node node = entry.getDOMrepresentation(result);
-	   			modsCollection.appendChild(node);
-	   		}
-	   		
-	   		result.appendChild(modsCollection);	   		
-	   	}
-	   	catch (Exception e)
-		{
-	   		System.out.println("Exception caught..." + e);
-	   		e.printStackTrace();
-		}
-	   	return result;
-	   }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.mods;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * @author Michael Wrighton
+ *
+ */
+public class MODSDatabase {
+	protected Set<MODSEntry> entries;
+	
+	public MODSDatabase() {
+		// maybe make this sorted later...
+		entries = new HashSet<MODSEntry>();
+	}
+	
+	public MODSDatabase(BibtexDatabase bibtex) {
+        addEntries(bibtex, bibtex.getKeySet());
+    }
+
+    public MODSDatabase(BibtexDatabase bibtex, Set<String> keySet) {
+        if (keySet == null)
+            keySet = bibtex.getKeySet();
+        addEntries(bibtex, keySet);
+    }
+
+    private void addEntries(BibtexDatabase database, Set<String> keySet) {
+        entries = new HashSet<MODSEntry>();
+        for(Iterator<String> iter = keySet.iterator(); iter.hasNext(); ) {
+			BibtexEntry entry = database.getEntryById(iter.next());
+			MODSEntry newMods = new MODSEntry(entry);
+			entries.add(newMods);
+		}
+	}
+	public Document getDOMrepresentation() {
+		Document result = null;
+	   	try {
+	   		DocumentBuilder dbuild = DocumentBuilderFactory.
+														newInstance().
+														newDocumentBuilder();
+	   		result = dbuild.newDocument();
+	   		Element modsCollection = result.createElement("modsCollection");
+	   		modsCollection.setAttribute("xmlns", "http://www.loc.gov/mods/v3");
+	   		modsCollection.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
+	   		modsCollection.setAttribute("xsi:schemaLocation", "http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd");
+	   		
+	   		for(Iterator<MODSEntry> iter = entries.iterator(); iter.hasNext(); ) {
+	   			MODSEntry entry = iter.next();
+	   			Node node = entry.getDOMrepresentation(result);
+	   			modsCollection.appendChild(node);
+	   		}
+	   		
+	   		result.appendChild(modsCollection);	   		
+	   	}
+	   	catch (Exception e)
+		{
+	   		System.out.println("Exception caught..." + e);
+	   		e.printStackTrace();
+		}
+	   	return result;
+	   }
+}
diff --git a/src/java/net/sf/jabref/mods/MODSEntry.java b/src/java/net/sf/jabref/mods/MODSEntry.java
index 050926e..0b77dc7 100644
--- a/src/java/net/sf/jabref/mods/MODSEntry.java
+++ b/src/java/net/sf/jabref/mods/MODSEntry.java
@@ -1,355 +1,355 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.mods;
-import java.io.StringWriter;
-import java.util.*;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.XMLChars;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-/**
- * @author Michael Wrighton
- *
- */
-public class MODSEntry {
-	protected String entryType = "mods"; // could also be relatedItem
-	protected String id;
-	protected List<PersonName> authors = null;
-
-	// should really be handled with an enum
-	protected String issuance = "monographic";
-	protected PageNumbers pages = null;
-	
-	protected String publisher = null;
-	protected String date = null;
-	protected String place = null;
-	
-	protected String title = null;
-	// should really be handled with an enum
-	protected String type = "text";
-	
-	protected String number;
-	protected String volume;
-	protected String genre = null;
-	protected Set<String> handledExtensions;
-	
-	protected MODSEntry host;
-	Map<String, String> extensionFields;
-	
-	public static String BIBTEX = "bibtex_";
-	
-	private final boolean CHARFORMAT = false;
-	
-	public MODSEntry() {
-		extensionFields = new HashMap<String, String>();
-		handledExtensions = new HashSet<String>();
-	
-	}
-	
-	public MODSEntry(BibtexEntry bibtex) {
-		this();
-		handledExtensions.add(BIBTEX + "publisher");
-		handledExtensions.add(BIBTEX + "title");
-		handledExtensions.add(BIBTEX + "bibtexkey");
-		handledExtensions.add(BIBTEX + "author");
-		populateFromBibtex(bibtex);
-	}
-	
-	protected void populateFromBibtex(BibtexEntry bibtex) {
-		LayoutFormatter chars = new XMLChars();
-		if (bibtex.getField("title") != null) {
-			if(CHARFORMAT)
-				title = chars.format(bibtex.getField("title").toString());
-			else
-				title = bibtex.getField("title").toString();
-		}
-		
-		if (bibtex.getField("publisher") != null) {
-			if(CHARFORMAT)
-				publisher = chars.format(bibtex.getField("publisher").toString());
-			else
-				publisher = bibtex.getField("publisher").toString();
-		}
-			
-		if (bibtex.getField("bibtexkey") != null)
-			id = bibtex.getField("bibtexkey").toString();
-		if (bibtex.getField("place") != null) {
-			if(CHARFORMAT)
-				place = chars.format(bibtex.getField("place").toString());
-			else
-				place = bibtex.getField("place").toString();
-		}
-			
-		date = getDate(bibtex);	
-		genre = getMODSgenre(bibtex);
-		if (bibtex.getField("author") != null)
-			authors = getAuthors(bibtex.getField("author").toString());
-		if (bibtex.getType() == BibtexEntryType.ARTICLE || 
-			bibtex.getType() == BibtexEntryType.INPROCEEDINGS)
-		{
-			host = new MODSEntry();
-			host.entryType = "relatedItem";
-			host.title = bibtex.getField("booktitle");
-			host.publisher = bibtex.getField("publisher");
-			host.number = bibtex.getField("number");
-			if (bibtex.getField("pages") != null)
-				host.volume = bibtex.getField("volume");
-			host.issuance = "continuing";
-			if (bibtex.getField("pages") != null)
-				host.pages = new PageNumbers(bibtex.getField("pages"));
-		}
-		
-		populateExtensionFields(bibtex);
-		
-	}
-	
-	protected void populateExtensionFields(BibtexEntry e) {
-		
-		for (String field : e.getAllFields()){
-			String value = e.getField(field);
-			field = BIBTEX + field;
-			extensionFields.put(field, value);
-		}
-	}
-	
-	protected List<PersonName> getAuthors(String authors) {
-		List<PersonName> result = new LinkedList<PersonName>();
-		LayoutFormatter chars = new XMLChars();
-		
-		if (authors.indexOf(" and ") == -1) {
-			if(CHARFORMAT)
-				result.add(new PersonName(chars.format(authors)));
-			else
-				result.add(new PersonName(authors));
-		}
-        else
-        {
-            String[] names = authors.split(" and ");
-            for (int i=0; i<names.length; i++) {
-            	if(CHARFORMAT)
-            		result.add(new PersonName(chars.format(names[i])));
-            	else
-            		result.add(new PersonName(names[i]));
-            }
-        }
-		return result;
-	}
-	
-	/* construct a MODS date object */
-	protected String getDate(BibtexEntry bibtex) {
-		String result = "";
-		if (bibtex.getField("year") != null)
-			result += (bibtex.getField("year").toString());
-		if (bibtex.getField("month") != null)
-			result += "-" + bibtex.getField("month").toString();
-		
-		return result;
-	}
-	// must be from http://www.loc.gov/marc/sourcecode/genre/genrelist.html
-	protected String getMODSgenre(BibtexEntry bibtex) {
-		String bibtexType = bibtex.getType().getName();
-		/**
-		 * <pre> String result; if (bibtexType.equals("Mastersthesis")) result =
-		 * "theses"; else result = "conference publication"; // etc... </pre>
-		 */
-		return bibtexType;		
-	}
-	
-	public Node getDOMrepresentation() {
-		Node result = null;
-		try {
-			DocumentBuilder d = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-			
-			result = getDOMrepresentation(d.newDocument());
-		}
-		catch (Exception e) 
-		{
-			throw new Error(e);
-		}
-		return result;
-	}
-		
-	
-	public Element getDOMrepresentation(Document d) {
-	   	try {
-	   		Element mods = d.createElement(entryType);
-	   		mods.setAttribute("version", "3.0");
-	   		// mods.setAttribute("xmlns:xlink:", "http://www.w3.org/1999/xlink");
-	   		// title
-	   		if(title != null) {
-	   			Element titleInfo = d.createElement("titleInfo");
-	   			Element mainTitle = d.createElement("title");
-	   			mainTitle.appendChild(d.createTextNode(stripNonValidXMLCharacters(title)));
-	   			titleInfo.appendChild(mainTitle);
-		   		mods.appendChild(titleInfo);
-	   		}
-	   		if (authors != null) {
-	   			for(Iterator<PersonName> iter = authors.iterator(); iter.hasNext();) {
-	   				PersonName name = iter.next();
-	   				Element modsName = d.createElement("name");
-	   				modsName.setAttribute("type", "personal");
-	   				if (name.getSurname() != null) {
-	   					Element namePart = d.createElement("namePart");
-	   					namePart.setAttribute("type", "family");
-	   					namePart.appendChild(d.createTextNode(stripNonValidXMLCharacters(name.getSurname())));
-	   					modsName.appendChild(namePart);
-	   				}
-	   				if (name.getGivenNames() != null) {
-	   					Element namePart = d.createElement("namePart");
-	   					namePart.setAttribute("type", "given");
-	   					namePart.appendChild(d.createTextNode(stripNonValidXMLCharacters(name.getGivenNames())));
-	   					modsName.appendChild(namePart);
-	   				}
-	   				Element role = d.createElement("role");
-	   				Element roleTerm = d.createElement("roleTerm");
-	   				roleTerm.setAttribute("type", "text");
-	   				roleTerm.appendChild(d.createTextNode("author"));
-	   				role.appendChild(roleTerm);
-	   				modsName.appendChild(role);
-	   				mods.appendChild(modsName);
-	   			}
-	   		}
-	   		//publisher
-	   		Element originInfo = d.createElement("originInfo");
-	   		mods.appendChild(originInfo);
-	   		if (this.publisher != null) {
-	   			Element publisher = d.createElement("publisher");
-				publisher.appendChild(d.createTextNode(stripNonValidXMLCharacters(this.publisher)));
-	   			originInfo.appendChild(publisher);
-	   		}
-	   		if (date != null) {
-	   			Element dateIssued = d.createElement("dateIssued");
-	   			dateIssued.appendChild(d.createTextNode(stripNonValidXMLCharacters(date)));
-	   			originInfo.appendChild(dateIssued);
-	   		}
-	   		Element issuance = d.createElement("issuance");
-	   		issuance.appendChild(d.createTextNode(stripNonValidXMLCharacters(this.issuance)));
-	   		originInfo.appendChild(issuance);
-	   		
-	   		if (id != null) {
-	   			Element idref = d.createElement("identifier");
-	   			idref.appendChild(d.createTextNode(stripNonValidXMLCharacters(id)));
-	   			mods.appendChild(idref);
-	   			mods.setAttribute("ID", id);
-		   		
-	   		}
-	   		Element typeOfResource = d.createElement("typeOfResource");
-	   		typeOfResource.appendChild(d.createTextNode(stripNonValidXMLCharacters(type)));
-	   		mods.appendChild(typeOfResource);
-	   		
-	   		if (genre != null) {
-	   			Element genreElement = d.createElement("genre");
-	   			genreElement.setAttribute("authority", "marc");
-	   			genreElement.appendChild(d.createTextNode(stripNonValidXMLCharacters(genre)));
-	   			mods.appendChild(genreElement);
-	   		}
-	   		
-	   		if (host != null) {
-	   			Element relatedItem = host.getDOMrepresentation(d);	   			
-	   			relatedItem.setAttribute("type","host");	   			
-	   			mods.appendChild(relatedItem);
-	   		}
-	   		if (pages != null) {
-	   			mods.appendChild(pages.getDOMrepresentation(d));
-	   		}
-	   		
-	   		/* now generate extension fields for unhandled data */
-	   		for(Map.Entry<String, String> theEntry : extensionFields.entrySet()){
-	   			Element extension = d.createElement("extension");
-	   			String field = theEntry.getKey();
-	   			String value = theEntry.getValue();
-	   			if (handledExtensions.contains(field))
-	   				continue;
-	   			Element theData = d.createElement(field);
-	   			theData.appendChild(d.createTextNode(stripNonValidXMLCharacters(value)));
-	   			extension.appendChild(theData);
-	   			mods.appendChild(extension);
-	   		}
-	   		return mods;
-	   	}
-	   	catch (Exception e)
-		{
-	   		System.out.println("Exception caught..." + e);
-	   		e.printStackTrace();
-	   		throw new Error(e);
-		}
-	   	// return result;
-	   }
-	
-	/**
-	 * This method ensures that the output String has only
-     * valid XML unicode characters as specified by the
-     * XML 1.0 standard. For reference, please see
-     * <a href="http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char">the
-     * standard</a>. This method will return an empty
-     * String if the input is null or empty.
-     * 
-     * URL: http://cse-mjmcl.cse.bris.ac.uk/blog/2007/02/14/1171465494443.html
-     *
-     * @param in The String whose non-valid characters we want to remove.
-     * @return The in String, stripped of non-valid characters.
-     */
-    public String stripNonValidXMLCharacters(String in) {
-        StringBuffer out = new StringBuffer(); // Used to hold the output.
-        char current; // Used to reference the current character.
-
-        if (in == null || ("".equals(in))) return ""; // vacancy test.
-        for (int i = 0; i < in.length(); i++) {
-            current = in.charAt(i); // NOTE: No IndexOutOfBoundsException caught here; it should not happen.
-            if ((current == 0x9) ||
-                (current == 0xA) ||
-                (current == 0xD) ||
-                ((current >= 0x20) && (current <= 0xD7FF)) ||
-                ((current >= 0xE000) && (current <= 0xFFFD)) ||
-                ((current >= 0x10000) && (current <= 0x10FFFF)))
-                out.append(current);
-        }
-        return out.toString();
-    }
-
-	/*
-	 * render as XML
-	 * 
-	 */
-	public String toString() {
-		StringWriter sresult = new StringWriter();
-	   	try {
-	      	 DOMSource source = new DOMSource(getDOMrepresentation());
-	      	 StreamResult result = new StreamResult(sresult);
-	      	 Transformer trans = TransformerFactory.newInstance().newTransformer();
-	      	 trans.setOutputProperty(OutputKeys.INDENT, "yes");
-	      	 trans.transform(source, result);
-	      	}
-	      	catch (Exception e) {
-	      		throw new Error(e);
-	      	}
-	      return sresult.toString();
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.mods;
+import java.io.StringWriter;
+import java.util.*;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.XMLChars;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+/**
+ * @author Michael Wrighton
+ *
+ */
+public class MODSEntry {
+	protected String entryType = "mods"; // could also be relatedItem
+	protected String id;
+	protected List<PersonName> authors = null;
+
+	// should really be handled with an enum
+	protected String issuance = "monographic";
+	protected PageNumbers pages = null;
+	
+	protected String publisher = null;
+	protected String date = null;
+	protected String place = null;
+	
+	protected String title = null;
+	// should really be handled with an enum
+	protected String type = "text";
+	
+	protected String number;
+	protected String volume;
+	protected String genre = null;
+	protected Set<String> handledExtensions;
+	
+	protected MODSEntry host;
+	Map<String, String> extensionFields;
+	
+	public static String BIBTEX = "bibtex_";
+	
+	private final boolean CHARFORMAT = false;
+	
+	public MODSEntry() {
+		extensionFields = new HashMap<String, String>();
+		handledExtensions = new HashSet<String>();
+	
+	}
+	
+	public MODSEntry(BibtexEntry bibtex) {
+		this();
+		handledExtensions.add(BIBTEX + "publisher");
+		handledExtensions.add(BIBTEX + "title");
+		handledExtensions.add(BIBTEX + "bibtexkey");
+		handledExtensions.add(BIBTEX + "author");
+		populateFromBibtex(bibtex);
+	}
+	
+	protected void populateFromBibtex(BibtexEntry bibtex) {
+		LayoutFormatter chars = new XMLChars();
+		if (bibtex.getField("title") != null) {
+			if(CHARFORMAT)
+				title = chars.format(bibtex.getField("title").toString());
+			else
+				title = bibtex.getField("title").toString();
+		}
+		
+		if (bibtex.getField("publisher") != null) {
+			if(CHARFORMAT)
+				publisher = chars.format(bibtex.getField("publisher").toString());
+			else
+				publisher = bibtex.getField("publisher").toString();
+		}
+			
+		if (bibtex.getField("bibtexkey") != null)
+			id = bibtex.getField("bibtexkey").toString();
+		if (bibtex.getField("place") != null) {
+			if(CHARFORMAT)
+				place = chars.format(bibtex.getField("place").toString());
+			else
+				place = bibtex.getField("place").toString();
+		}
+			
+		date = getDate(bibtex);	
+		genre = getMODSgenre(bibtex);
+		if (bibtex.getField("author") != null)
+			authors = getAuthors(bibtex.getField("author").toString());
+		if (bibtex.getType() == BibtexEntryType.ARTICLE || 
+			bibtex.getType() == BibtexEntryType.INPROCEEDINGS)
+		{
+			host = new MODSEntry();
+			host.entryType = "relatedItem";
+			host.title = bibtex.getField("booktitle");
+			host.publisher = bibtex.getField("publisher");
+			host.number = bibtex.getField("number");
+			if (bibtex.getField("pages") != null)
+				host.volume = bibtex.getField("volume");
+			host.issuance = "continuing";
+			if (bibtex.getField("pages") != null)
+				host.pages = new PageNumbers(bibtex.getField("pages"));
+		}
+		
+		populateExtensionFields(bibtex);
+		
+	}
+	
+	protected void populateExtensionFields(BibtexEntry e) {
+		
+		for (String field : e.getAllFields()){
+			String value = e.getField(field);
+			field = BIBTEX + field;
+			extensionFields.put(field, value);
+		}
+	}
+	
+	protected List<PersonName> getAuthors(String authors) {
+		List<PersonName> result = new LinkedList<PersonName>();
+		LayoutFormatter chars = new XMLChars();
+		
+		if (authors.indexOf(" and ") == -1) {
+			if(CHARFORMAT)
+				result.add(new PersonName(chars.format(authors)));
+			else
+				result.add(new PersonName(authors));
+		}
+        else
+        {
+            String[] names = authors.split(" and ");
+            for (int i=0; i<names.length; i++) {
+            	if(CHARFORMAT)
+            		result.add(new PersonName(chars.format(names[i])));
+            	else
+            		result.add(new PersonName(names[i]));
+            }
+        }
+		return result;
+	}
+	
+	/* construct a MODS date object */
+	protected String getDate(BibtexEntry bibtex) {
+		String result = "";
+		if (bibtex.getField("year") != null)
+			result += (bibtex.getField("year").toString());
+		if (bibtex.getField("month") != null)
+			result += "-" + bibtex.getField("month").toString();
+		
+		return result;
+	}
+	// must be from http://www.loc.gov/marc/sourcecode/genre/genrelist.html
+	protected String getMODSgenre(BibtexEntry bibtex) {
+		String bibtexType = bibtex.getType().getName();
+		/**
+		 * <pre> String result; if (bibtexType.equals("Mastersthesis")) result =
+		 * "theses"; else result = "conference publication"; // etc... </pre>
+		 */
+		return bibtexType;		
+	}
+	
+	public Node getDOMrepresentation() {
+		Node result = null;
+		try {
+			DocumentBuilder d = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+			
+			result = getDOMrepresentation(d.newDocument());
+		}
+		catch (Exception e) 
+		{
+			throw new Error(e);
+		}
+		return result;
+	}
+		
+	
+	public Element getDOMrepresentation(Document d) {
+	   	try {
+	   		Element mods = d.createElement(entryType);
+	   		mods.setAttribute("version", "3.0");
+	   		// mods.setAttribute("xmlns:xlink:", "http://www.w3.org/1999/xlink");
+	   		// title
+	   		if(title != null) {
+	   			Element titleInfo = d.createElement("titleInfo");
+	   			Element mainTitle = d.createElement("title");
+	   			mainTitle.appendChild(d.createTextNode(stripNonValidXMLCharacters(title)));
+	   			titleInfo.appendChild(mainTitle);
+		   		mods.appendChild(titleInfo);
+	   		}
+	   		if (authors != null) {
+	   			for(Iterator<PersonName> iter = authors.iterator(); iter.hasNext();) {
+	   				PersonName name = iter.next();
+	   				Element modsName = d.createElement("name");
+	   				modsName.setAttribute("type", "personal");
+	   				if (name.getSurname() != null) {
+	   					Element namePart = d.createElement("namePart");
+	   					namePart.setAttribute("type", "family");
+	   					namePart.appendChild(d.createTextNode(stripNonValidXMLCharacters(name.getSurname())));
+	   					modsName.appendChild(namePart);
+	   				}
+	   				if (name.getGivenNames() != null) {
+	   					Element namePart = d.createElement("namePart");
+	   					namePart.setAttribute("type", "given");
+	   					namePart.appendChild(d.createTextNode(stripNonValidXMLCharacters(name.getGivenNames())));
+	   					modsName.appendChild(namePart);
+	   				}
+	   				Element role = d.createElement("role");
+	   				Element roleTerm = d.createElement("roleTerm");
+	   				roleTerm.setAttribute("type", "text");
+	   				roleTerm.appendChild(d.createTextNode("author"));
+	   				role.appendChild(roleTerm);
+	   				modsName.appendChild(role);
+	   				mods.appendChild(modsName);
+	   			}
+	   		}
+	   		//publisher
+	   		Element originInfo = d.createElement("originInfo");
+	   		mods.appendChild(originInfo);
+	   		if (this.publisher != null) {
+	   			Element publisher = d.createElement("publisher");
+				publisher.appendChild(d.createTextNode(stripNonValidXMLCharacters(this.publisher)));
+	   			originInfo.appendChild(publisher);
+	   		}
+	   		if (date != null) {
+	   			Element dateIssued = d.createElement("dateIssued");
+	   			dateIssued.appendChild(d.createTextNode(stripNonValidXMLCharacters(date)));
+	   			originInfo.appendChild(dateIssued);
+	   		}
+	   		Element issuance = d.createElement("issuance");
+	   		issuance.appendChild(d.createTextNode(stripNonValidXMLCharacters(this.issuance)));
+	   		originInfo.appendChild(issuance);
+	   		
+	   		if (id != null) {
+	   			Element idref = d.createElement("identifier");
+	   			idref.appendChild(d.createTextNode(stripNonValidXMLCharacters(id)));
+	   			mods.appendChild(idref);
+	   			mods.setAttribute("ID", id);
+		   		
+	   		}
+	   		Element typeOfResource = d.createElement("typeOfResource");
+	   		typeOfResource.appendChild(d.createTextNode(stripNonValidXMLCharacters(type)));
+	   		mods.appendChild(typeOfResource);
+	   		
+	   		if (genre != null) {
+	   			Element genreElement = d.createElement("genre");
+	   			genreElement.setAttribute("authority", "marc");
+	   			genreElement.appendChild(d.createTextNode(stripNonValidXMLCharacters(genre)));
+	   			mods.appendChild(genreElement);
+	   		}
+	   		
+	   		if (host != null) {
+	   			Element relatedItem = host.getDOMrepresentation(d);	   			
+	   			relatedItem.setAttribute("type","host");	   			
+	   			mods.appendChild(relatedItem);
+	   		}
+	   		if (pages != null) {
+	   			mods.appendChild(pages.getDOMrepresentation(d));
+	   		}
+	   		
+	   		/* now generate extension fields for unhandled data */
+	   		for(Map.Entry<String, String> theEntry : extensionFields.entrySet()){
+	   			Element extension = d.createElement("extension");
+	   			String field = theEntry.getKey();
+	   			String value = theEntry.getValue();
+	   			if (handledExtensions.contains(field))
+	   				continue;
+	   			Element theData = d.createElement(field);
+	   			theData.appendChild(d.createTextNode(stripNonValidXMLCharacters(value)));
+	   			extension.appendChild(theData);
+	   			mods.appendChild(extension);
+	   		}
+	   		return mods;
+	   	}
+	   	catch (Exception e)
+		{
+	   		System.out.println("Exception caught..." + e);
+	   		e.printStackTrace();
+	   		throw new Error(e);
+		}
+	   	// return result;
+	   }
+	
+	/**
+	 * This method ensures that the output String has only
+     * valid XML unicode characters as specified by the
+     * XML 1.0 standard. For reference, please see
+     * <a href="http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char">the
+     * standard</a>. This method will return an empty
+     * String if the input is null or empty.
+     * 
+     * URL: http://cse-mjmcl.cse.bris.ac.uk/blog/2007/02/14/1171465494443.html
+     *
+     * @param in The String whose non-valid characters we want to remove.
+     * @return The in String, stripped of non-valid characters.
+     */
+    public String stripNonValidXMLCharacters(String in) {
+        StringBuffer out = new StringBuffer(); // Used to hold the output.
+        char current; // Used to reference the current character.
+
+        if (in == null || ("".equals(in))) return ""; // vacancy test.
+        for (int i = 0; i < in.length(); i++) {
+            current = in.charAt(i); // NOTE: No IndexOutOfBoundsException caught here; it should not happen.
+            if ((current == 0x9) ||
+                (current == 0xA) ||
+                (current == 0xD) ||
+                ((current >= 0x20) && (current <= 0xD7FF)) ||
+                ((current >= 0xE000) && (current <= 0xFFFD)) ||
+                ((current >= 0x10000) && (current <= 0x10FFFF)))
+                out.append(current);
+        }
+        return out.toString();
+    }
+
+	/*
+	 * render as XML
+	 * 
+	 */
+	public String toString() {
+		StringWriter sresult = new StringWriter();
+	   	try {
+	      	 DOMSource source = new DOMSource(getDOMrepresentation());
+	      	 StreamResult result = new StreamResult(sresult);
+	      	 Transformer trans = TransformerFactory.newInstance().newTransformer();
+	      	 trans.setOutputProperty(OutputKeys.INDENT, "yes");
+	      	 trans.transform(source, result);
+	      	}
+	      	catch (Exception e) {
+	      		throw new Error(e);
+	      	}
+	      return sresult.toString();
+	}
+
+}
diff --git a/src/java/net/sf/jabref/mods/PageNumbers.java b/src/java/net/sf/jabref/mods/PageNumbers.java
index 5dc5613..a1bb6d4 100644
--- a/src/java/net/sf/jabref/mods/PageNumbers.java
+++ b/src/java/net/sf/jabref/mods/PageNumbers.java
@@ -1,75 +1,75 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.mods;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-/**
- * @author Michael Wrighton
- * @author S M Mahbub Murshed
- *
- */
-public class PageNumbers {
-	String freeform = null;
-	int start, end;
-	
-	public PageNumbers(String s) {
-		parsePageNums(s);
-	}
-	
-	protected void parsePageNums(String s) {
-		Pattern p = Pattern.compile("\\s*(\\d+)\\s*-{1,2}\\s*(\\d+)\\s*");
-		Matcher m = p.matcher(s);
-		if (m.matches()) {
-			start = Integer.parseInt(m.group(1));
-			end = Integer.parseInt(m.group(2));
-		}
-		else
-			freeform = s;
-	}
-	
-	public Element getDOMrepresentation(Document d) {
-		Element result = d.createElement("extent");
-		result.setAttribute("unit","page");
-		if (freeform != null) { 
-			Node t = d.createTextNode(freeform);
-			result.appendChild(t);
-		}
-		else {
-			Element start = d.createElement("start");
-			Element end = d.createElement("end");
-			start.appendChild(d.createTextNode("" + this.start));
-			end.appendChild(d.createTextNode("" + this.end));
-			result.appendChild(start);
-			result.appendChild(end);			
-		}
-		return result;
-	}
-	
-    public String toString(String seperator) {
-    	if (freeform != null)
-    		return freeform; 
-		return (start+seperator+end);
-    }
-
-	public String toString() {
-		return toString("--");
-    }
- 
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.mods;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+/**
+ * @author Michael Wrighton
+ * @author S M Mahbub Murshed
+ *
+ */
+public class PageNumbers {
+	String freeform = null;
+	int start, end;
+	
+	public PageNumbers(String s) {
+		parsePageNums(s);
+	}
+	
+	protected void parsePageNums(String s) {
+		Pattern p = Pattern.compile("\\s*(\\d+)\\s*-{1,2}\\s*(\\d+)\\s*");
+		Matcher m = p.matcher(s);
+		if (m.matches()) {
+			start = Integer.parseInt(m.group(1));
+			end = Integer.parseInt(m.group(2));
+		}
+		else
+			freeform = s;
+	}
+	
+	public Element getDOMrepresentation(Document d) {
+		Element result = d.createElement("extent");
+		result.setAttribute("unit","page");
+		if (freeform != null) { 
+			Node t = d.createTextNode(freeform);
+			result.appendChild(t);
+		}
+		else {
+			Element start = d.createElement("start");
+			Element end = d.createElement("end");
+			start.appendChild(d.createTextNode("" + this.start));
+			end.appendChild(d.createTextNode("" + this.end));
+			result.appendChild(start);
+			result.appendChild(end);			
+		}
+		return result;
+	}
+	
+    public String toString(String seperator) {
+    	if (freeform != null)
+    		return freeform; 
+		return (start+seperator+end);
+    }
+
+	public String toString() {
+		return toString("--");
+    }
+ 
+}
diff --git a/src/java/net/sf/jabref/mods/PersonName.java b/src/java/net/sf/jabref/mods/PersonName.java
index c94fbcc..7b0e57d 100644
--- a/src/java/net/sf/jabref/mods/PersonName.java
+++ b/src/java/net/sf/jabref/mods/PersonName.java
@@ -1,142 +1,142 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.mods;
-
-import java.util.Vector;
-
-import net.sf.jabref.export.layout.WSITools;
-import net.sf.jabref.export.layout.format.XMLChars;
-
-import net.sf.jabref.AuthorList;
-
-/**
- * @author Michael Wrighton, S M Mahbub Murshed
- *
- * S M Mahbub Murshed : added few functions for convenience. May 15, 2007
- *
- * History
- * Dec 16, 2011 - Changed parseName(String) to export authorname with
- * 				  more than 3 names correctly
- *
- */
-public class PersonName {
-    protected String givenName = null;
-    protected String surname = null;
-    protected String middleName = null;
-
-    public PersonName() {
-    }
-
-    public PersonName(String name) {
-        parseName(name);
-    }
-
-    public PersonName(String firstName, String _middleName, String lastName) {
-        givenName = firstName;
-        middleName = _middleName;
-        surname = lastName;
-    }
-
-    protected void parseName(String author) {
-    		Vector<String> v = new Vector<String>();
-            String authorMod = AuthorList.fixAuthor_lastNameFirst(author, false);
-             
-            //Formating names and replacing escape Char for ',' back to a comma
-//            XMLChars xmlChars = new XMLChars();
-//            authorMod = xmlChars.format(authorMod).replace(",", ",");
- 
-            int endOfLastName = authorMod.indexOf(",");
-
-            // Tokenize just the firstName and middleNames as we have the surname
-            // before the comma.
-            WSITools.tokenize(v, authorMod.substring(endOfLastName+1).trim(), " \n\r");
-            if (endOfLastName>=0) // comma is found
-            	v.add(authorMod.substring(0, endOfLastName));
-            
-            int amountOfNames = v.size();
-
-            if (amountOfNames == 1)
-                surname = v.get(0);
-            else if (amountOfNames == 2) {
-                givenName = v.get(0);
-                surname = v.get(1);
-            }
-            else {
-                givenName = v.get(0);
-                middleName = "";
-                for (int i = 1; i < amountOfNames - 1 ; i++)
-                	middleName += " " + v.get(i);
-                middleName = middleName.trim();
-                surname = v.get(amountOfNames-1);
-                }
-    }
-
-    public String getGivenNames() {
-        String result = "";
-        if (givenName != null)
-            result += givenName;
-        if (middleName != null)
-            result += " " + middleName;
-        return result;
-    }
-
-    public String getSurname()
-    {
-        return surname;
-    }
-
-    public void setSurname(String lastName)
-    {
-        surname = lastName;
-    }
-
-    public String getFirstname()
-    {
-        return givenName;
-    }
-
-    public void setFirstname(String firstName)
-    {
-        givenName = firstName;
-    }
-
-    public String getMiddlename()
-    {
-        return middleName;
-    }
-
-    public void setMiddlename(String _middleName)
-    {
-        middleName = _middleName;
-    }
-
-    public String getFullname()
-    {
-    	String fullName = "";
-    	if(givenName != null && givenName != "")
-    		fullName += givenName + " "; 
-    	if(middleName != null && middleName != "")
-    		fullName += middleName + " ";
-    	if(surname != null && surname != "")
-    		fullName += surname;
-    	
-    	return fullName.trim();
-    }
-
-    public String toString() {
-        return surname;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.mods;
+
+import java.util.Vector;
+
+import net.sf.jabref.export.layout.WSITools;
+import net.sf.jabref.export.layout.format.XMLChars;
+
+import net.sf.jabref.AuthorList;
+
+/**
+ * @author Michael Wrighton, S M Mahbub Murshed
+ *
+ * S M Mahbub Murshed : added few functions for convenience. May 15, 2007
+ *
+ * History
+ * Dec 16, 2011 - Changed parseName(String) to export authorname with
+ * 				  more than 3 names correctly
+ *
+ */
+public class PersonName {
+    protected String givenName = null;
+    protected String surname = null;
+    protected String middleName = null;
+
+    public PersonName() {
+    }
+
+    public PersonName(String name) {
+        parseName(name);
+    }
+
+    public PersonName(String firstName, String _middleName, String lastName) {
+        givenName = firstName;
+        middleName = _middleName;
+        surname = lastName;
+    }
+
+    protected void parseName(String author) {
+    		Vector<String> v = new Vector<String>();
+            String authorMod = AuthorList.fixAuthor_lastNameFirst(author, false);
+             
+            //Formating names and replacing escape Char for ',' back to a comma
+//            XMLChars xmlChars = new XMLChars();
+//            authorMod = xmlChars.format(authorMod).replace(",", ",");
+ 
+            int endOfLastName = authorMod.indexOf(",");
+
+            // Tokenize just the firstName and middleNames as we have the surname
+            // before the comma.
+            WSITools.tokenize(v, authorMod.substring(endOfLastName+1).trim(), " \n\r");
+            if (endOfLastName>=0) // comma is found
+            	v.add(authorMod.substring(0, endOfLastName));
+            
+            int amountOfNames = v.size();
+
+            if (amountOfNames == 1)
+                surname = v.get(0);
+            else if (amountOfNames == 2) {
+                givenName = v.get(0);
+                surname = v.get(1);
+            }
+            else {
+                givenName = v.get(0);
+                middleName = "";
+                for (int i = 1; i < amountOfNames - 1 ; i++)
+                	middleName += " " + v.get(i);
+                middleName = middleName.trim();
+                surname = v.get(amountOfNames-1);
+                }
+    }
+
+    public String getGivenNames() {
+        String result = "";
+        if (givenName != null)
+            result += givenName;
+        if (middleName != null)
+            result += " " + middleName;
+        return result;
+    }
+
+    public String getSurname()
+    {
+        return surname;
+    }
+
+    public void setSurname(String lastName)
+    {
+        surname = lastName;
+    }
+
+    public String getFirstname()
+    {
+        return givenName;
+    }
+
+    public void setFirstname(String firstName)
+    {
+        givenName = firstName;
+    }
+
+    public String getMiddlename()
+    {
+        return middleName;
+    }
+
+    public void setMiddlename(String _middleName)
+    {
+        middleName = _middleName;
+    }
+
+    public String getFullname()
+    {
+    	String fullName = "";
+    	if(givenName != null && givenName != "")
+    		fullName += givenName + " "; 
+    	if(middleName != null && middleName != "")
+    		fullName += middleName + " ";
+    	if(surname != null && surname != "")
+    		fullName += surname;
+    	
+    	return fullName.trim();
+    }
+
+    public String toString() {
+        return surname;
+    }
+}
diff --git a/src/java/net/sf/jabref/msbib/MSBibDatabase.java b/src/java/net/sf/jabref/msbib/MSBibDatabase.java
index 39c7a2e..df6b341 100644
--- a/src/java/net/sf/jabref/msbib/MSBibDatabase.java
+++ b/src/java/net/sf/jabref/msbib/MSBibDatabase.java
@@ -1,137 +1,137 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.msbib;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.*;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-/**
- * @author S M Mahbub Murshed
- * @email udvranto at yahoo.com
- *
- * @version 2.0.0
- * @see http://mahbub.wordpress.com/2007/03/24/details-of-microsoft-office-2007-bibliographic-format-compared-to-bibtex/
- * @see http://mahbub.wordpress.com/2007/03/22/deciphering-microsoft-office-2007-bibliography-format/
- * 
- * Date: May 15, 2007; May 03, 2007
- * 
- * History:
- * May 03, 2007 - Added suport for export
- * May 15, 2007 - Added suport for import
- */
-public class MSBibDatabase {
-	protected Set<MSBibEntry> entries;
-	
-	public MSBibDatabase() {
-		// maybe make this sorted later...
-		entries = new HashSet<MSBibEntry>();
-	}
-	
-	public MSBibDatabase(InputStream stream) throws IOException {
-		importEntries(stream);
-    }
-
-	public MSBibDatabase(BibtexDatabase bibtex) {
-		Set<String> keySet = bibtex.getKeySet();
-        addEntries(bibtex, keySet);
-    }
-
-    public MSBibDatabase(BibtexDatabase bibtex, Set<String> keySet) {
-        if (keySet == null)
-            keySet = bibtex.getKeySet();
-        addEntries(bibtex, keySet);
-    }
-
-    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
-    	entries = new HashSet<MSBibEntry>();	
-    	ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
-    	Document docin = null;
-    	try {
-    	DocumentBuilder dbuild = DocumentBuilderFactory.
-    								newInstance().
-    								newDocumentBuilder();
-   		docin = dbuild.parse(stream);
-    	} catch (Exception e) {
-	   		System.out.println("Exception caught..." + e);
-	   		e.printStackTrace();
-    	}
-   		String bcol = "b:";
-   		NodeList rootLst = docin.getElementsByTagName("b:Sources");
-   		if(rootLst.getLength()==0) {   			
-   			rootLst = docin.getElementsByTagName("Sources");
-   			bcol = "";
-   		}
-   		if(rootLst.getLength()==0)
-   			return bibitems;
-//    	if(docin!= null && docin.getDocumentElement().getTagName().contains("Sources") == false)
-//    		return bibitems;
-
-   		NodeList sourceList = ((Element)(rootLst.item(0))).getElementsByTagName(bcol+"Source");
-   		for(int i=0; i<sourceList.getLength(); i++) {
-   			MSBibEntry entry = new MSBibEntry((Element)sourceList.item(i),bcol);
-   			entries.add(entry);
-   			bibitems.add(entry.getBibtexRepresentation());   			
-   		}
-   		
-   		return bibitems;
-    }
-
-    private void addEntries(BibtexDatabase database, Set<String> keySet) {
-        entries = new HashSet<MSBibEntry>();
-        for (String s : keySet){
-        	BibtexEntry entry = database.getEntryById(s);
-			MSBibEntry newMods = new MSBibEntry(entry);
-			entries.add(newMods);
-		}
-	}
-	public Document getDOMrepresentation() {
-		Document result = null;
-	   	try {
-	   		DocumentBuilder dbuild = DocumentBuilderFactory.
-														newInstance().
-														newDocumentBuilder();
-	   		result = dbuild.newDocument();
-	   		Element msbibCollection = result.createElement("b:Sources");
-	   		msbibCollection.setAttribute("SelectedStyle","");
-	   		msbibCollection.setAttribute("xmlns", "http://schemas.openxmlformats.org/officeDocument/2006/bibliography");
-	   		msbibCollection.setAttribute("xmlns:b", "http://schemas.openxmlformats.org/officeDocument/2006/bibliography");	   			   		 
-	   		
-	   		for(Iterator<MSBibEntry> iter = entries.iterator(); iter.hasNext(); ) {
-	   			MSBibEntry entry = iter.next();
-	   			Node node = entry.getDOMrepresentation(result);
-	   			msbibCollection.appendChild(node);
-	   		}
-	   		
-	   		result.appendChild(msbibCollection);	   		
-	   	}
-	   	catch (Exception e)
-		{
-	   		System.out.println("Exception caught..." + e);
-	   		e.printStackTrace();
-		}
-	   	return result;
-	   }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.msbib;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.*;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+/**
+ * @author S M Mahbub Murshed
+ * @email udvranto at yahoo.com
+ *
+ * @version 2.0.0
+ * @see http://mahbub.wordpress.com/2007/03/24/details-of-microsoft-office-2007-bibliographic-format-compared-to-bibtex/
+ * @see http://mahbub.wordpress.com/2007/03/22/deciphering-microsoft-office-2007-bibliography-format/
+ * 
+ * Date: May 15, 2007; May 03, 2007
+ * 
+ * History:
+ * May 03, 2007 - Added suport for export
+ * May 15, 2007 - Added suport for import
+ */
+public class MSBibDatabase {
+	protected Set<MSBibEntry> entries;
+	
+	public MSBibDatabase() {
+		// maybe make this sorted later...
+		entries = new HashSet<MSBibEntry>();
+	}
+	
+	public MSBibDatabase(InputStream stream) throws IOException {
+		importEntries(stream);
+    }
+
+	public MSBibDatabase(BibtexDatabase bibtex) {
+		Set<String> keySet = bibtex.getKeySet();
+        addEntries(bibtex, keySet);
+    }
+
+    public MSBibDatabase(BibtexDatabase bibtex, Set<String> keySet) {
+        if (keySet == null)
+            keySet = bibtex.getKeySet();
+        addEntries(bibtex, keySet);
+    }
+
+    public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
+    	entries = new HashSet<MSBibEntry>();	
+    	ArrayList<BibtexEntry> bibitems = new ArrayList<BibtexEntry>();
+    	Document docin = null;
+    	try {
+    	DocumentBuilder dbuild = DocumentBuilderFactory.
+    								newInstance().
+    								newDocumentBuilder();
+   		docin = dbuild.parse(stream);
+    	} catch (Exception e) {
+	   		System.out.println("Exception caught..." + e);
+	   		e.printStackTrace();
+    	}
+   		String bcol = "b:";
+   		NodeList rootLst = docin.getElementsByTagName("b:Sources");
+   		if(rootLst.getLength()==0) {   			
+   			rootLst = docin.getElementsByTagName("Sources");
+   			bcol = "";
+   		}
+   		if(rootLst.getLength()==0)
+   			return bibitems;
+//    	if(docin!= null && docin.getDocumentElement().getTagName().contains("Sources") == false)
+//    		return bibitems;
+
+   		NodeList sourceList = ((Element)(rootLst.item(0))).getElementsByTagName(bcol+"Source");
+   		for(int i=0; i<sourceList.getLength(); i++) {
+   			MSBibEntry entry = new MSBibEntry((Element)sourceList.item(i),bcol);
+   			entries.add(entry);
+   			bibitems.add(entry.getBibtexRepresentation());   			
+   		}
+   		
+   		return bibitems;
+    }
+
+    private void addEntries(BibtexDatabase database, Set<String> keySet) {
+        entries = new HashSet<MSBibEntry>();
+        for (String s : keySet){
+        	BibtexEntry entry = database.getEntryById(s);
+			MSBibEntry newMods = new MSBibEntry(entry);
+			entries.add(newMods);
+		}
+	}
+	public Document getDOMrepresentation() {
+		Document result = null;
+	   	try {
+	   		DocumentBuilder dbuild = DocumentBuilderFactory.
+														newInstance().
+														newDocumentBuilder();
+	   		result = dbuild.newDocument();
+	   		Element msbibCollection = result.createElement("b:Sources");
+	   		msbibCollection.setAttribute("SelectedStyle","");
+	   		msbibCollection.setAttribute("xmlns", "http://schemas.openxmlformats.org/officeDocument/2006/bibliography");
+	   		msbibCollection.setAttribute("xmlns:b", "http://schemas.openxmlformats.org/officeDocument/2006/bibliography");	   			   		 
+	   		
+	   		for(Iterator<MSBibEntry> iter = entries.iterator(); iter.hasNext(); ) {
+	   			MSBibEntry entry = iter.next();
+	   			Node node = entry.getDOMrepresentation(result);
+	   			msbibCollection.appendChild(node);
+	   		}
+	   		
+	   		result.appendChild(msbibCollection);	   		
+	   	}
+	   	catch (Exception e)
+		{
+	   		System.out.println("Exception caught..." + e);
+	   		e.printStackTrace();
+		}
+	   	return result;
+	   }
+}
diff --git a/src/java/net/sf/jabref/msbib/MSBibEntry.java b/src/java/net/sf/jabref/msbib/MSBibEntry.java
index 32f3c98..a288c74 100644
--- a/src/java/net/sf/jabref/msbib/MSBibEntry.java
+++ b/src/java/net/sf/jabref/msbib/MSBibEntry.java
@@ -1,1214 +1,1214 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.msbib;
-import java.io.StringWriter;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.XMLChars;
-import net.sf.jabref.mods.PageNumbers;
-import net.sf.jabref.mods.PersonName;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- * @author S M Mahbub Murshed
- * @email udvranto at yahoo.com
- *
- * @version 2.0.0
- * @see http://mahbub.wordpress.com/2007/03/24/details-of-microsoft-office-2007-bibliographic-format-compared-to-bibtex/
- * @see http://mahbub.wordpress.com/2007/03/22/deciphering-microsoft-office-2007-bibliography-format/
- * 
- * Date: May 15, 2007; May 03, 2007
- * 
- * History
- * May 03, 2007 - Added export functionality
- * May 15, 2007 - Added import functionality
- * May 16, 2007 - Changed all interger entries to strings,
- * 				  except LCID which must be an integer.
- * 				  To avoid exception during integer parsing
- *				  the exception is caught and LCID is set to zero.
- * Jan 06, 2012 - Changed the XML element ConferenceName to present
- * 				  the Booktitle instead of the organization field content
- */
-public class MSBibEntry {
-	protected String sourceType = "Misc";
-	protected String bibTexEntry = null;
-
-	protected String tag = null;
-	protected String GUID = null;
-	protected int LCID = -1;
-
-	protected List<PersonName> authors = null;
-	protected List<PersonName> bookAuthors = null;
-	protected List<PersonName> editors = null;
-	protected List<PersonName> translators = null;
-	protected List<PersonName> producerNames = null;
-	protected List<PersonName> composers = null;
-	protected List<PersonName> conductors = null;
-	protected List<PersonName> performers = null;
-	protected List<PersonName> writers = null;
-	protected List<PersonName> directors = null;
-	protected List<PersonName> compilers = null;
-	protected List<PersonName> interviewers = null;
-	protected List<PersonName> interviewees = null;
-	protected List<PersonName> inventors = null;
-	protected List<PersonName> counsels = null;
-
-	protected String title = null;
-	protected String year = null;
-	protected String month = null;
-	protected String day = null;
-	
-	protected String shortTitle = null;
-	protected String comments = null;
-	
-	protected PageNumbers pages = null;
-	protected String volume = null;
-	protected String numberOfVolumes = null;
-	protected String edition = null;
-	protected String standardNumber = null;	
-	protected String publisher = null;
-	
-	protected String address = null;
-	protected String bookTitle = null;
-	protected String chapterNumber = null;
-	protected String journalName = null;
-	protected String issue = null;
-	protected String periodicalTitle = null;
-	protected String conferenceName = null;
-	protected String department = null;
-	protected String institution = null;
-	protected String thesisType = null;
-	protected String internetSiteTitle = null;
-	protected String dateAccessed = null;
-	protected String url = null;
-	protected String productionCompany = null;
-	protected String publicationTitle = null;
-	protected String medium = null;
-	protected String albumTitle = null;
-	protected String recordingNumber = null;
-	protected String theater = null;
-	protected String distributor = null;
-	protected String broadcastTitle = null;
-	protected String broadcaster = null;
-	protected String station = null;
-	protected String type = null;
-	protected String patentNumber = null;
-	protected String court = null;
-	protected String reporter = null;
-	protected String caseNumber = null;
-	protected String abbreviatedCaseNumber = null;
-	protected String bibTex_Series = null;
-	protected String bibTex_Abstract = null; 	 
-	protected String bibTex_KeyWords = null; 	 
-	protected String bibTex_CrossRef = null;
-	protected String bibTex_HowPublished = null; 	 
-	protected String bibTex_Affiliation = null;
-	protected String bibTex_Contents = null;
-	protected String bibTex_Copyright = null;	 
-	protected String bibTex_Price = null; 	 
-	protected String bibTex_Size = null;
-	
-	/* SM 2010.10 intype, paper support */
-	protected String bibTex_InType = null;
-	protected String bibTex_Paper = null;
-
-	private final String BIBTEX = "BIBTEX_";
-	private final String MSBIB = "msbib-";
-
-	private final String bcol = "b:";
-	
-	private final boolean FORMATXML = false;
-	
-	public MSBibEntry() {
-	}
-	
-	public MSBibEntry(BibtexEntry bibtex) {
-		this();
-		populateFromBibtex(bibtex);
-	}
-
-	public MSBibEntry(Element entry, String _bcol) {
-		this();
-		populateFromXml(entry,_bcol);
-	}
-
-	protected String getFromXml(String name, Element entry) {
-		String value = null;
-		NodeList nodeLst = entry.getElementsByTagName(name);
-		if(nodeLst.getLength()>0)
-			value = nodeLst.item(0).getTextContent();
-		return value;
-	}
-	
-
-	protected void populateFromXml(Element entry, String _bcol) {		
-		String temp = null;
-
-		sourceType = getFromXml(_bcol+"SourceType", entry);
-
-		tag  = getFromXml(_bcol+"Tag", entry);
-
-		temp = getFromXml(_bcol+"LCID", entry);
-		if(temp!=null)
-		{
-			try {
-			LCID = Integer.parseInt(temp); }
-			catch (Exception e) {
-				LCID = -1;
-			}
-		}
-
-		title = getFromXml(_bcol+"Title", entry);
-		year = getFromXml(_bcol+"Year", entry);
-		month = getFromXml(_bcol+"Month", entry);
-		day = getFromXml(_bcol+"Day", entry);
-
-		shortTitle = getFromXml(_bcol+"ShortTitle", entry);
-		comments = getFromXml(_bcol+"Comments", entry);
-
-		temp = getFromXml(_bcol+"Pages", entry);
-		if(temp != null)
-			pages = new PageNumbers(temp);
-
-		volume = getFromXml(_bcol+"Volume", entry);
-
-		numberOfVolumes = getFromXml(_bcol+"NumberVolumes", entry);
-
-		edition = getFromXml(_bcol+"Edition", entry);
-		
-		standardNumber = getFromXml(_bcol+"StandardNumber", entry);
-
-		publisher = getFromXml(_bcol+"Publisher", entry);
-
-		String city = getFromXml(_bcol+"City", entry);
-		String state = getFromXml(_bcol+"StateProvince", entry);
-		String country = getFromXml(_bcol+"CountryRegion", entry);
-		address = "";
-		if(city != null)
-			address += city + ", "; 
-		if(state != null)
-			address += state + " "; 
-		if(country != null)
-			address += country;
-		address = address.trim();
-		if(address.equals("") || address.equals(","))
-			address = null;
-
-		bookTitle = getFromXml(_bcol+"BookTitle", entry);
-
-		chapterNumber = getFromXml(_bcol+"ChapterNumber", entry);
-
-		journalName = getFromXml(_bcol+"JournalName", entry);
-
-		issue = getFromXml(_bcol+"Issue", entry);
-
-		periodicalTitle = getFromXml(_bcol+"PeriodicalTitle", entry);
-		
-		conferenceName = getFromXml(_bcol+"ConferenceName", entry);
-		department = getFromXml(_bcol+"Department", entry);
-		institution = getFromXml(_bcol+"Institution", entry);
-
-		thesisType = getFromXml(_bcol+"ThesisType", entry);
-		internetSiteTitle = getFromXml(_bcol+"InternetSiteTitle", entry);
-		String month = getFromXml(_bcol+"MonthAccessed", entry);
-		String day = getFromXml(_bcol+"DayAccessed", entry);
-		String year = getFromXml(_bcol+"YearAccessed", entry);
-		dateAccessed = "";
-		if(month != null)
-			dateAccessed += month + " ";
-		if(day != null)
-			dateAccessed += day + ", ";
-		if(year != null)
-			dateAccessed += year;
-		dateAccessed = dateAccessed.trim();
-		if(dateAccessed.equals("") || dateAccessed.equals(","))
-			dateAccessed = null;
-
-		url = getFromXml(_bcol+"URL", entry);
-		productionCompany = getFromXml(_bcol+"ProductionCompany", entry);
-		
-		publicationTitle = getFromXml(_bcol+"PublicationTitle", entry);
-		medium = getFromXml(_bcol+"Medium", entry);
-		albumTitle = getFromXml(_bcol+"AlbumTitle", entry);
-		recordingNumber = getFromXml(_bcol+"RecordingNumber", entry);
-		theater = getFromXml(_bcol+"Theater", entry);
-		distributor = getFromXml(_bcol+"Distributor", entry);
-		broadcastTitle = getFromXml(_bcol+"BroadcastTitle", entry);
-		broadcaster = getFromXml(_bcol+"Broadcaster", entry);
-		station = getFromXml(_bcol+"Station", entry);
-		type = getFromXml(_bcol+"Type", entry);
-		patentNumber = getFromXml(_bcol+"PatentNumber", entry);
-		court = getFromXml(_bcol+"Court", entry);
-		reporter = getFromXml(_bcol+"Reporter", entry);
-		caseNumber = getFromXml(_bcol+"CaseNumber", entry);
-		abbreviatedCaseNumber = getFromXml(_bcol+"AbbreviatedCaseNumber", entry);
-		bibTex_Series = getFromXml(_bcol+BIBTEX+"Series", entry);
-		bibTex_Abstract = getFromXml(_bcol+BIBTEX+"Abstract", entry);
-		bibTex_KeyWords = getFromXml(_bcol+BIBTEX+"KeyWords", entry);
-		bibTex_CrossRef = getFromXml(_bcol+BIBTEX+"CrossRef", entry);
-		bibTex_HowPublished = getFromXml(_bcol+BIBTEX+"HowPublished", entry);
-		bibTex_Affiliation = getFromXml(_bcol+BIBTEX+"Affiliation", entry);
-		bibTex_Contents = getFromXml(_bcol+BIBTEX+"Contents", entry);
-		bibTex_Copyright = getFromXml(_bcol+BIBTEX+"Copyright", entry);
-		bibTex_Price = getFromXml(_bcol+BIBTEX+"Price", entry);
-		bibTex_Size = getFromXml(_bcol+BIBTEX+"Size", entry);
-	 
-		NodeList nodeLst = entry.getElementsByTagName(_bcol+"Author");
-		if(nodeLst.getLength()>0)
-			getAuthors((Element)(nodeLst.item(0)),_bcol);
-	}
-
-	protected void populateFromBibtex(BibtexEntry bibtex) {
-		// date = getDate(bibtex);	
-		sourceType = getMSBibSourceType(bibtex);
-
-		if (bibtex.getField("bibtexkey") != null)
-			tag = bibtex.getField("bibtexkey").toString();
-
-		if (bibtex.getField("language") != null)
-			LCID = getLCID(bibtex.getField("language").toString());
-
-		if (bibtex.getField("title") != null)
-			title = bibtex.getField("title").toString();
-		if (bibtex.getField("year") != null)
-			year = bibtex.getField("year").toString();
-		if (bibtex.getField("month") != null)
-			month = bibtex.getField("month").toString();
-		if (bibtex.getField(MSBIB+"day") != null)
-			day = bibtex.getField(MSBIB+"day").toString();
-
-		if (bibtex.getField(MSBIB+"shorttitle") != null)
-			shortTitle = bibtex.getField(MSBIB+"shorttitle").toString();
-		if (bibtex.getField("note") != null)
-			comments = bibtex.getField("note").toString();
-
-		if (bibtex.getField("pages") != null)
-			pages = new PageNumbers(bibtex.getField("pages").toString());
-
-		if (bibtex.getField("volume") != null)
-			volume = bibtex.getField("volume").toString();
-
-		if (bibtex.getField(MSBIB+"numberofvolume") != null)
-			numberOfVolumes = bibtex.getField(MSBIB+"numberofvolume").toString();
-
-		if (bibtex.getField("edition") != null)
-			edition = bibtex.getField("edition").toString();
-		
-		standardNumber = new String();
-		if (bibtex.getField("isbn") != null) /* SM: 2010.10: lower case */
-			standardNumber += " ISBN: " + bibtex.getField("isbn").toString(); /* SM: 2010.10: lower case */
-		if (bibtex.getField("issn") != null) /* SM: 2010.10: lower case */
-			standardNumber += " ISSN: "+ bibtex.getField("issn").toString(); /* SM: 2010.10: lower case */
-		if (bibtex.getField("lccn") != null) /* SM: 2010.10: lower case */
-			standardNumber += " LCCN: "+ bibtex.getField("lccn").toString(); /* SM: 2010.10: lower case */
-		if (bibtex.getField("mrnumber") != null)
-			standardNumber += " MRN: "+ bibtex.getField("mrnumber").toString();
-		/* SM: 2010.10 begin DOI support */	
-		if (bibtex.getField("doi") != null)
-			standardNumber += " DOI: "+ bibtex.getField("doi").toString();
-		/* SM: 2010.10 end DOI support */	
-		if(standardNumber.equals(""))
-			standardNumber = null;
-
-		if (bibtex.getField("publisher") != null)
-			publisher = bibtex.getField("publisher").toString();
-
-		if (bibtex.getField("address") != null)
-			address = bibtex.getField("address").toString();
-
-		if (bibtex.getField("booktitle") != null)
-			bookTitle = bibtex.getField("booktitle").toString();
-
-		if (bibtex.getField("chapter") != null)
-			chapterNumber = bibtex.getField("chapter").toString();
-
-		if (bibtex.getField("journal") != null)
-			journalName = bibtex.getField("journal").toString();
-
-		if (bibtex.getField("number") != null)
-			issue = bibtex.getField("number").toString();
-
-		if (bibtex.getField(MSBIB+"periodical") != null)
-			periodicalTitle = bibtex.getField(MSBIB+"periodical").toString();
-		
-		if (bibtex.getField("booktitle") != null)
-			conferenceName = bibtex.getField("booktitle").toString();
-		if (bibtex.getField("school") != null)
-			department = bibtex.getField("school").toString();
-		if (bibtex.getField("institution") != null)
-			institution = bibtex.getField("institution").toString();
-
-		/* SM: 2010.10 Modified for default source types */
-		if (bibtex.getField("type") != null)
-			thesisType = bibtex.getField("type").toString();
-		else
-		{
-			if (bibtex.getType().getName().equalsIgnoreCase("techreport"))
-				thesisType = "Tech. rep.";
-			else if (bibtex.getType().getName().equalsIgnoreCase("mastersthesis"))
-				thesisType = "Master's thesis";
-			else if (bibtex.getType().getName().equalsIgnoreCase("phdthesis"))
-				thesisType = "Ph.D. dissertation";
-			else if (bibtex.getType().getName().equalsIgnoreCase("unpublished"))
-				thesisType = "unpublished";
-			//else if (bibtex.getType().getName().equalsIgnoreCase("manual"))
-			//	thesisType = "manual";
-		}
-		
-		
-		if ( (sourceType.equals("InternetSite")==true || sourceType.equals("DocumentFromInternetSite")==true)
-				&& bibtex.getField("title") != null)
-			internetSiteTitle = bibtex.getField("title").toString();
-		if (bibtex.getField(MSBIB+"accessed") != null)
-			dateAccessed = bibtex.getField(MSBIB+"accessed").toString();
-		if (bibtex.getField("url") != null) /* SM: 2010.10: lower case */
-			url = bibtex.getField("url").toString(); /* SM: 2010.10: lower case */
-		if (bibtex.getField(MSBIB+"productioncompany") != null)
-			productionCompany = bibtex.getField(MSBIB+"productioncompany").toString();
-		
-		if ( (sourceType.equals("ElectronicSource")==true 
-				|| sourceType.equals("Art")==true
-				|| sourceType.equals("Misc")==true)
-				&& bibtex.getField("title") != null)
-			publicationTitle = bibtex.getField("title").toString();
-		if (bibtex.getField(MSBIB+"medium") != null)
-			medium = bibtex.getField(MSBIB+"medium").toString();
-		if (sourceType.equals("SoundRecording")==true && bibtex.getField("title") != null)
-			albumTitle = bibtex.getField("title").toString();
-		if (bibtex.getField(MSBIB+"recordingnumber") != null)
-			recordingNumber = bibtex.getField(MSBIB+"recordingnumber").toString();
-		if (bibtex.getField(MSBIB+"theater") != null)
-			theater = bibtex.getField(MSBIB+"theater").toString();
-		if (bibtex.getField(MSBIB+"distributor") != null)
-			distributor = bibtex.getField(MSBIB+"distributor").toString();
-		if (sourceType.equals("Interview")==true && bibtex.getField("title") != null)
-			broadcastTitle = bibtex.getField("title").toString();
-		if (bibtex.getField(MSBIB+"broadcaster") != null)
-			broadcaster = bibtex.getField(MSBIB+"broadcaster").toString();
-		if (bibtex.getField(MSBIB+"station") != null)
-			station = bibtex.getField(MSBIB+"station").toString();
-		if (bibtex.getField(MSBIB+"type") != null)
-			type = bibtex.getField(MSBIB+"type").toString();
-		if (bibtex.getField(MSBIB+"patentnumber") != null)
-			patentNumber = bibtex.getField(MSBIB+"patentnumber").toString();
-		if (bibtex.getField(MSBIB+"court") != null)
-			court = bibtex.getField(MSBIB+"court").toString();
-		if (bibtex.getField(MSBIB+"reporter") != null)
-			reporter = bibtex.getField(MSBIB+"reporter").toString();
-		if (bibtex.getField(MSBIB+"casenumber") != null)
-			caseNumber = bibtex.getField(MSBIB+"casenumber").toString();
-		if (bibtex.getField(MSBIB+"abbreviatedcasenumber") != null)
-			abbreviatedCaseNumber = bibtex.getField(MSBIB+"abbreviatedcasenumber").toString();
-		
-		if (bibtex.getField("series") != null)
-			bibTex_Series = bibtex.getField("series").toString();
-		if (bibtex.getField("abstract") != null)
-			bibTex_Abstract = bibtex.getField("abstract").toString();
-		if (bibtex.getField("keywords") != null)
-			bibTex_KeyWords = bibtex.getField("keywords").toString();
-		if (bibtex.getField("crossref") != null)
-			bibTex_CrossRef = bibtex.getField("crossref").toString();
-		if (bibtex.getField("howpublished") != null)
-			bibTex_HowPublished = bibtex.getField("howpublished").toString();
-		if (bibtex.getField("affiliation") != null)
-			bibTex_Affiliation = bibtex.getField("affiliation").toString();
-		if (bibtex.getField("contents") != null)
-			bibTex_Contents = bibtex.getField("contents").toString();
-		if (bibtex.getField("copyright") != null)
-			bibTex_Copyright = bibtex.getField("copyright").toString();
-		if (bibtex.getField("price") != null)
-			bibTex_Price = bibtex.getField("price").toString();
-		if (bibtex.getField("size") != null)
-			bibTex_Size = bibtex.getField("size").toString();
-	 
-		/* SM: 2010.10 end intype, paper support */	
-		if (bibtex.getField("intype") != null)
-			bibTex_InType = bibtex.getField("intype").toString();
-		if (bibtex.getField("paper") != null)
-			bibTex_Paper = bibtex.getField("paper").toString();
-
-		
-		if (bibtex.getField("author") != null)
-			authors = getAuthors(bibtex.getField("author").toString());
-        if (bibtex.getField("editor") != null)
-            editors = getAuthors(bibtex.getField("editor").toString());
-        
-		if(FORMATXML)
-		{
-			title = format(title);
-			// shortTitle = format(shortTitle);
-			// publisher = format(publisher);
-			// conferenceName = format(conferenceName);
-			// department = format(department);
-			// institution = format(institution);
-			// internetSiteTitle = format(internetSiteTitle);
-			// publicationTitle = format(publicationTitle);
-			// albumTitle = format(albumTitle);
-			// theater = format(theater);
-			// distributor = format(distributor);
-			// broadcastTitle = format(broadcastTitle);
-			// broadcaster = format(broadcaster);
-			// station = format(station);
-			// court = format(court);
-			// reporter = format(reporter);
-			// bibTex_Series = format(bibTex_Series);
-			bibTex_Abstract = format(bibTex_Abstract);
-		}
-	}
-
-	private String format(String value)
-	{
-		if(value == null)
-			return null;
-		String result = null;
-		LayoutFormatter chars = new XMLChars();
-		result = chars.format(value);
-		return result;
-	}
-	
-	// http://www.microsoft.com/globaldev/reference/lcid-all.mspx
-	protected int getLCID(String language)
-	{
-		int iLCID = 0;
-		// TODO: add lanaguage to LCID mapping
-		
-		return iLCID;
-	}
-
-	// http://www.microsoft.com/globaldev/reference/lcid-all.mspx
-	protected String getLanguage(int LCID)
-	{
-		String language = "english";
-		// TODO: add lanaguage to LCID mapping
-		
-		return language;
-	}
-	
-	protected List<PersonName> getSpecificAuthors(String type, Element authors, String _bcol) {
-		List<PersonName> result = null;
-		NodeList nodeLst = authors.getElementsByTagName(_bcol+type);
-		if(nodeLst.getLength()<=0)
-			return result;
-		nodeLst = ((Element)(nodeLst.item(0))).getElementsByTagName(_bcol+"NameList");
-		if(nodeLst.getLength()<=0)
-			return result;
-		NodeList person = ((Element)(nodeLst.item(0))).getElementsByTagName(_bcol+"Person");
-		if(person.getLength()<=0)
-			return result;
-
-		result = new LinkedList<PersonName>();
-		for(int i=0;i<person.getLength();i++)
-		{
-			NodeList firstName  = ((Element)(person.item(i))).getElementsByTagName(_bcol+"First");
-			NodeList lastName   = ((Element)(person.item(i))).getElementsByTagName(_bcol+"Last");
-			NodeList middleName = ((Element)(person.item(i))).getElementsByTagName(_bcol+"Middle");
-			PersonName name = new PersonName();
-			if(firstName.getLength()>0)
-				name.setFirstname(firstName.item(0).getTextContent());
-			if(middleName.getLength()>0)
-				name.setMiddlename(middleName.item(0).getTextContent());
-			if(lastName.getLength()>0)
-				name.setSurname(lastName.item(0).getTextContent());
-			result.add(name);
-		}
-		
-		return result;
-	}
-
-	protected void getAuthors(Element authorsElem, String _bcol) {
-		authors = getSpecificAuthors("Author",authorsElem,_bcol);		
-		bookAuthors = getSpecificAuthors("BookAuthor",authorsElem,_bcol);
-		editors = getSpecificAuthors("Editor",authorsElem,_bcol);
-		translators = getSpecificAuthors("Translator",authorsElem,_bcol);
-		producerNames = getSpecificAuthors("ProducerName",authorsElem,_bcol);
-		composers = getSpecificAuthors("Composer",authorsElem,_bcol);
-		conductors = getSpecificAuthors("Conductor",authorsElem,_bcol);
-		performers = getSpecificAuthors("Performer",authorsElem,_bcol);
-		writers = getSpecificAuthors("Writer",authorsElem,_bcol);
-		directors = getSpecificAuthors("Director",authorsElem,_bcol);
-		compilers = getSpecificAuthors("Compiler",authorsElem,_bcol);
-		interviewers = getSpecificAuthors("Interviewer",authorsElem,_bcol);
-		interviewees = getSpecificAuthors("Interviewee",authorsElem,_bcol);
-		inventors = getSpecificAuthors("Inventor",authorsElem,_bcol);
-		counsels = getSpecificAuthors("Counsel",authorsElem,_bcol);
-	}
-
-	protected List<PersonName> getAuthors(String authors) {
-		List<PersonName> result = new LinkedList<PersonName>();
-		
-		if (authors.indexOf(" and ") == -1)
-		{
-				result.add(new PersonName(authors));
-		}
-        else
-        {
-            String[] names = authors.split(" and ");
-            for (int i=0; i<names.length; i++)
-            {
-            		result.add(new PersonName(names[i]));
-            }
-        }
-		return result;
-	}
-	
-	/* construct a MSBib date object */
-	protected String getDate(BibtexEntry bibtex) {
-		String result = "";
-		if (bibtex.getField("year") != null)
-			result += (bibtex.getField("year").toString());
-		if (bibtex.getField("month") != null)
-			result += "-" + bibtex.getField("month").toString();
-		
-		return result;
-	}
-
-	protected String getMSBibSourceType(BibtexEntry bibtex) {
-		String bibtexType = bibtex.getType().getName();
-
-		String result = "Misc";
-		if (bibtexType.equalsIgnoreCase("book"))
-			result = "Book";
-		else if(bibtexType.equalsIgnoreCase("inbook"))
-			{ result = "BookSection"; bibTexEntry = "inbook"; } /* SM 2010.10: generalized */
-		else if(bibtexType.equalsIgnoreCase("booklet"))
-			{ result = "BookSection"; bibTexEntry = "booklet"; } 
-		else if(bibtexType.equalsIgnoreCase("incollection"))
-			{ result = "BookSection"; bibTexEntry = "incollection"; } 
-
-		else if(bibtexType.equalsIgnoreCase("article"))
-			result = "JournalArticle"; 
-
-		else if(bibtexType.equalsIgnoreCase("inproceedings"))
-		{ result = "ConferenceProceedings"; bibTexEntry = "inproceedings"; }  /* SM 2010.10: generalized */ 
-		else if(bibtexType.equalsIgnoreCase("conference"))
-			{ result = "ConferenceProceedings"; bibTexEntry = "conference"; } 
-		else if(bibtexType.equalsIgnoreCase("proceedings"))
-			{ result = "ConferenceProceedings"; bibTexEntry = "proceedings"; } 
-		else if(bibtexType.equalsIgnoreCase("collection"))
-			{ result = "ConferenceProceedings"; bibTexEntry = "collection"; } 
-
-		else if(bibtexType.equalsIgnoreCase("techreport"))
-		{ result = "Report"; bibTexEntry = "techreport"; } /* SM 2010.10: generalized */ 
-		else if(bibtexType.equalsIgnoreCase("manual"))
-			{ result = "Report"; bibTexEntry = "manual"; } 
-		else if(bibtexType.equalsIgnoreCase("mastersthesis"))
-			{ result = "Report"; bibTexEntry = "mastersthesis"; } 
-		else if(bibtexType.equalsIgnoreCase("phdthesis"))
-			{ result = "Report"; bibTexEntry = "phdthesis"; } 
-		else if(bibtexType.equalsIgnoreCase("unpublished"))
-			{ result = "Report"; bibTexEntry = "unpublished"; } 
-
-		else if(bibtexType.equalsIgnoreCase("patent"))
-			result = "Patent"; 
-
-		else if(bibtexType.equalsIgnoreCase("misc"))
-			result = "Misc"; 
-			
-		/*SM: 2010.10 - bibtex @electronic */
-		else if(bibtexType.equalsIgnoreCase("electronic"))
-			{ result = "Misc"; bibTexEntry = "electronic"; } 
-		
-		return result;
-	}
-	
-	public Node getDOMrepresentation() {
-		Node result = null;
-		try {
-			DocumentBuilder d = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-			
-			result = getDOMrepresentation(d.newDocument());
-		}
-		catch (Exception e) 
-		{
-			throw new Error(e);
-		}
-		return result;
-	}
-
-	public void addField(Document d,Element parent, String name, String value) {
-		if(value == null)
-			return;
-		Element elem = d.createElement(bcol+name);
- 		// elem.appendChild(d.createTextNode(healXML(value)));
-//		Text txt = d.createTextNode(value);
-//		if(!txt.getTextContent().equals(value))
-//			System.out.println("Values dont match!");
-//			// throw new Exception("Values dont match!");
-//		elem.appendChild(txt);
-		elem.appendChild(d.createTextNode(stripNonValidXMLCharacters(value)));		
-		parent.appendChild(elem);
-	}
-
-	public void addAuthor(Document d, Element allAuthors, String entryName, List<PersonName> authorsLst) {
-		if(authorsLst == null)
-			return;
-		Element authorTop = d.createElement(bcol+entryName);
-		Element nameList = d.createElement(bcol+"NameList");
-		for(Iterator<PersonName> iter = authorsLst.iterator(); iter.hasNext();) {
-			PersonName name = iter.next();
-			Element person = d.createElement(bcol+"Person");
-			addField(d, person,"Last",name.getSurname());
-			addField(d, person,"Middle",name.getMiddlename());
-			addField(d, person,"First",name.getFirstname());
-			nameList.appendChild(person);
-		}
-		authorTop.appendChild(nameList);
-		
-		allAuthors.appendChild(authorTop);
-	}
-
-	public void addAdrress(Document d,Element parent, String address) {
-		if(address == null)
-			return;
-
-		// US address parser
-		// See documentation here http://regexlib.com/REDetails.aspx?regexp_id=472
-		// Pattern p = Pattern.compile("^(?n:(((?<address1>(\\d{1,5}(\\ 1\\/[234])?(\\x20[A-Z]([a-z])+)+ )|(P\\.O\\.\\ Box\\ \\d{1,5}))\\s{1,2}(?i:(?<address2>(((APT|B LDG|DEPT|FL|HNGR|LOT|PIER|RM|S(LIP|PC|T(E|OP))|TRLR|UNIT)\\x20\\w{1,5})|(BSMT|FRNT|LBBY|LOWR|OFC|PH|REAR|SIDE|UPPR)\\.?)\\s{1,2})?))?)(?<city>[A-Z]([a-z])+(\\.?)(\\x20[A-Z]([a-z])+){0,2})([,\\x20]+?)(?<state>A[LKSZRAP]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADL N]|K[SY]|LA|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[ARW]|RI|S[CD] |T[NX]|UT|V[AIT] [...]
-		// the pattern above is for C#, may not work with java. Never tested though.
-		
-		// reduced subset, supports only "CITY , STATE, COUNTRY"
-		// \b(\w+)\s?[,]?\s?(\w+)\s?[,]?\s?(\w+)\b
-		// WORD SPACE , SPACE WORD SPACE , SPACE WORD
-		// tested using http://www.javaregex.com/test.html
-		Pattern p = Pattern.compile("\\b(\\w+)\\s*[,]?\\s*(\\w+)\\s*[,]?\\s*(\\w+)\\b");
-		Matcher m = p.matcher(address);
-		if (m.matches() && m.groupCount()>3)
-		{
-			addField(d, parent,"City",m.group(1));
-			addField(d, parent,"StateProvince",m.group(2));
-			addField(d, parent,"CountryRegion",m.group(3));
-		}
-		else
-			/* SM: 2010.10 generalized */
-			addField(d, parent,"City",address);
-	}
-
-	public void addDate(Document d,Element parent, String date, String extra) {
-		if(date == null)
-			return;
-
-		// Allows 20.3-2007|||20/3-  2007 etc. 
-		// (\d{1,2})\s?[.,-/]\s?(\d{1,2})\s?[.,-/]\s?(\d{2,4})
-		// 1-2 DIGITS SPACE SEPERATOR SPACE 1-2 DIGITS SPACE SEPERATOR SPACE 2-4 DIGITS
-		// tested using http://www.javaregex.com/test.html
-		Pattern p = Pattern.compile("(\\d{1,2})\\s*[.,-/]\\s*(\\d{1,2})\\s*[.,-/]\\s*(\\d{2,4})");
-		Matcher m = p.matcher(date);
-		if (m.matches() && m.groupCount()>3)
-		{
-			addField(d, parent,"Month"+extra,m.group(1));
-			addField(d, parent,"Day"+extra,m.group(2));
-			addField(d, parent,"Year"+extra,m.group(3));
-		}
-	}
-
-	public Element getDOMrepresentation(Document d) {
-	
-	   	try {
-	   		Element msbibEntry = d.createElement(bcol+"Source");
-
-	   		addField(d,msbibEntry,"SourceType",sourceType);
-   			addField(d,msbibEntry,BIBTEX+"Entry",bibTexEntry);
-
-   			addField(d,msbibEntry,"Tag",tag);
-   			addField(d,msbibEntry,"GUID",GUID);
-   			if(LCID >= 0)
-   				addField(d,msbibEntry,"LCID",Integer.toString(LCID));
-   			addField(d,msbibEntry,"Title",title);
-   			addField(d,msbibEntry,"Year",year);
-   			addField(d,msbibEntry,"ShortTitle",shortTitle);
-   			addField(d,msbibEntry,"Comments",comments);
-
-   			Element allAuthors = d.createElement(bcol+"Author");
-
-   			addAuthor(d,allAuthors,"Author",authors);
-	   		addAuthor(d,allAuthors,"BookAuthor",bookAuthors);
-	   		addAuthor(d,allAuthors,"Editor",editors);
-	   		addAuthor(d,allAuthors,"Translator",translators);
-	   		addAuthor(d,allAuthors,"ProducerName",producerNames);
-	   		addAuthor(d,allAuthors,"Composer",composers);
-	   		addAuthor(d,allAuthors,"Conductor",conductors);
-	   		addAuthor(d,allAuthors,"Performer",performers);
-	   		addAuthor(d,allAuthors,"Writer",writers);
-	   		addAuthor(d,allAuthors,"Director",directors);
-	   		addAuthor(d,allAuthors,"Compiler",compilers);
-	   		addAuthor(d,allAuthors,"Interviewer",interviewers);
-	   		addAuthor(d,allAuthors,"Interviewee",interviewees);
-	   		addAuthor(d,allAuthors,"Inventor",inventors);
-	   		addAuthor(d,allAuthors,"Counsel",counsels);
-
-	   		msbibEntry.appendChild(allAuthors);
-	   		
-	   		if(pages !=null )
-	   			addField(d,msbibEntry,"Pages",pages.toString("-"));
-	   		addField(d,msbibEntry,"Volume",volume);
-	   		addField(d,msbibEntry,"NumberVolumes",numberOfVolumes);
-	   		addField(d,msbibEntry,"Edition",edition);
-	   		addField(d,msbibEntry,"StandardNumber",standardNumber);
-	   		addField(d,msbibEntry,"Publisher",publisher);
-		
-	   		addAdrress(d,msbibEntry,address);
-	   		
-	   		addField(d,msbibEntry,"BookTitle",bookTitle);
-	   		addField(d,msbibEntry,"ChapterNumber",chapterNumber);
-
-	   		addField(d,msbibEntry,"JournalName",journalName);
-	   		addField(d,msbibEntry,"Issue",issue);
-	   		addField(d,msbibEntry,"PeriodicalTitle",periodicalTitle);
-	   		addField(d,msbibEntry,"ConferenceName",conferenceName);
-
-	   		addField(d,msbibEntry,"Department",department);
-	   		addField(d,msbibEntry,"Institution",institution);
-	   		addField(d,msbibEntry,"ThesisType",thesisType);
-	   		addField(d,msbibEntry,"InternetSiteTitle",internetSiteTitle);
-	   		
-	   		addDate(d,msbibEntry, dateAccessed, "Accessed");
-	   		
-	   		/* SM 2010.10 added month export */
-	   		addField(d,msbibEntry,"Month",month);
-	   		
-	   		addField(d,msbibEntry,"URL",url);
-	   		addField(d,msbibEntry,"ProductionCompany",productionCompany);
-	   		addField(d,msbibEntry,"PublicationTitle",publicationTitle);
-	   		addField(d,msbibEntry,"Medium",medium);
-	   		addField(d,msbibEntry,"AlbumTitle",albumTitle);
-	   		addField(d,msbibEntry,"RecordingNumber",recordingNumber);	   		
-	   		addField(d,msbibEntry,"Theater",theater);
-	   		addField(d,msbibEntry,"Distributor",distributor);
-	   		addField(d,msbibEntry,"BroadcastTitle",broadcastTitle);
-	   		addField(d,msbibEntry,"Broadcaster",broadcaster);
-	   		addField(d,msbibEntry,"Station",station);
-	   		addField(d,msbibEntry,"Type",type);
-	   		addField(d,msbibEntry,"PatentNumber",patentNumber);
-	   		addField(d,msbibEntry,"Court",court);
-	   		addField(d,msbibEntry,"Reporter",reporter);
-	   		addField(d,msbibEntry,"CaseNumber",caseNumber);
-	   		addField(d,msbibEntry,"AbbreviatedCaseNumber",abbreviatedCaseNumber);
-
-	   		addField(d,msbibEntry,BIBTEX+"Series",bibTex_Series);
-	   		addField(d,msbibEntry,BIBTEX+"Abstract",bibTex_Abstract);
-	   		addField(d,msbibEntry,BIBTEX+"KeyWords",bibTex_KeyWords);
-	   		addField(d,msbibEntry,BIBTEX+"CrossRef",bibTex_CrossRef);
-	   		addField(d,msbibEntry,BIBTEX+"HowPublished",bibTex_HowPublished);
-	   		addField(d,msbibEntry,BIBTEX+"Affiliation",bibTex_Affiliation);
-	   		addField(d,msbibEntry,BIBTEX+"Contents",bibTex_Contents);
-	   		addField(d,msbibEntry,BIBTEX+"Copyright",bibTex_Copyright);
-	   		addField(d,msbibEntry,BIBTEX+"Price",bibTex_Price);
-	   		addField(d,msbibEntry,BIBTEX+"Size",bibTex_Size);
-	   		
-			/* SM: 2010.10 end intype, paper support */	
-	   		addField(d,msbibEntry,BIBTEX+"InType",bibTex_InType);
-	   		addField(d,msbibEntry,BIBTEX+"Paper",bibTex_Paper);
-
-
-	   		return msbibEntry;
-	   	}
-	   	catch (Exception e)
-		{
-	   		System.out.println("Exception caught..." + e);
-	   		e.printStackTrace();
-	   		throw new Error(e);
-		}
-	   	// return null;
-	   }
-	
-	protected void parseSingleStandardNumber(String type,String bibtype, String standardNum, HashMap<String, String> hm) {
-		// tested using http://www.javaregex.com/test.html
-		Pattern p = Pattern.compile(":"+type+":(.[^:]+)");
-		Matcher m = p.matcher(standardNum);
-		if (m.matches())
-			hm.put(bibtype,m.group(1));
-	}
-
-	protected void parseStandardNumber(String standardNum, HashMap<String, String> hm) {
-		if(standardNumber == null)
-			return;
-		parseSingleStandardNumber("ISBN","isbn",standardNum,hm); /* SM: 2010.10: lower case */
-		parseSingleStandardNumber("ISSN","issn",standardNum,hm); /* SM: 2010.10: lower case */
-		parseSingleStandardNumber("LCCN","lccn",standardNum,hm); /* SM: 2010.10: lower case */
-		parseSingleStandardNumber("MRN","mrnumber",standardNum,hm);
-		/* SM: 2010.10 begin DOI support */	
-		parseSingleStandardNumber("DOI","doi",standardNum,hm);
-		/* SM: 2010.10 end DOI support */
-	}
-
-	public void addAuthor(HashMap<String, String> hm, String type, List<PersonName> authorsLst) {
-		if(authorsLst == null)
-			return;
-		String allAuthors = "";
-		boolean First = true;
-		for(Iterator<PersonName> iter = authorsLst.iterator(); iter.hasNext();) {
-			PersonName name = iter.next();
-			if(First == false)
-				allAuthors += " and ";
-			allAuthors += name.getFullname();
-			First = false;
-		}
-		hm.put(type,allAuthors);
-	}
-
-//	public String mapMSBibToBibtexTypeString(String msbib) {		
-//		String bibtex = "other";
-//		if(msbib.equals("Book"))
-//			bibtex = "book";
-//		else if(msbib.equals("BookSection"))
-//			bibtex = "inbook";
-//		else if(msbib.equals("JournalArticle"))
-//			bibtex = "article";
-//		else if(msbib.equals("ArticleInAPeriodical"))
-//			bibtex = "article";
-//		else if(msbib.equals("ConferenceProceedings"))
-//			bibtex = "conference";
-//		else if(msbib.equals("Report"))
-//			bibtex = "techreport";
-//		else if(msbib.equals("InternetSite"))
-//			bibtex = "other";
-//		else if(msbib.equals("DocumentFromInternetSite"))
-//			bibtex = "other";
-//		else if(msbib.equals("DocumentFromInternetSite"))
-//			bibtex = "other";
-//		else if(msbib.equals("ElectronicSource"))
-//			bibtex = "other";
-//		else if(msbib.equals("Art"))
-//			bibtex = "other";
-//		else if(msbib.equals("SoundRecording"))
-//			bibtex = "other";
-//		else if(msbib.equals("Performance"))
-//			bibtex = "other";
-//		else if(msbib.equals("Film"))
-//			bibtex = "other";
-//		else if(msbib.equals("Interview"))
-//			bibtex = "other";
-//		else if(msbib.equals("Patent"))
-//			bibtex = "other";
-//		else if(msbib.equals("Case"))
-//			bibtex = "other";
-//		else if(msbib.equals("Misc"))
-//			bibtex = "misc";
-//		else
-//			bibtex = "misc";
-//
-//		return bibtex;
-//	}
-	
-	public BibtexEntryType mapMSBibToBibtexType(String msbib)
-	{
-		BibtexEntryType bibtex = BibtexEntryType.OTHER;
-		if(msbib.equals("Book"))
-			bibtex = BibtexEntryType.BOOK;
-		else if(msbib.equals("BookSection"))
-			bibtex = BibtexEntryType.INBOOK;
-		else if(msbib.equals("JournalArticle"))
-			bibtex = BibtexEntryType.ARTICLE;
-		else if(msbib.equals("ArticleInAPeriodical"))
-			bibtex = BibtexEntryType.ARTICLE;
-		else if(msbib.equals("ConferenceProceedings"))
-			bibtex = BibtexEntryType.CONFERENCE;
-		else if(msbib.equals("Report"))
-			bibtex = BibtexEntryType.TECHREPORT;
-		else if(msbib.equals("InternetSite"))
-			bibtex = BibtexEntryType.OTHER;
-		else if(msbib.equals("DocumentFromInternetSite"))
-			bibtex = BibtexEntryType.OTHER;
-		else if(msbib.equals("DocumentFromInternetSite"))
-			bibtex = BibtexEntryType.OTHER;
-		else if(msbib.equals("ElectronicSource"))
-			bibtex = BibtexEntryType.OTHER;
-		else if(msbib.equals("Art"))
-			bibtex = BibtexEntryType.OTHER;
-		else if(msbib.equals("SoundRecording"))
-			bibtex = BibtexEntryType.OTHER;
-		else if(msbib.equals("Performance"))
-			bibtex = BibtexEntryType.OTHER;
-		else if(msbib.equals("Film"))
-			bibtex = BibtexEntryType.OTHER;
-		else if(msbib.equals("Interview"))
-			bibtex = BibtexEntryType.OTHER;
-		else if(msbib.equals("Patent"))
-			bibtex = BibtexEntryType.OTHER;
-		else if(msbib.equals("Case"))
-			bibtex = BibtexEntryType.OTHER;
-		else if(msbib.equals("Misc"))
-			bibtex = BibtexEntryType.MISC;
-		else
-			bibtex = BibtexEntryType.MISC;
-
-		return bibtex;
-	}
-	public BibtexEntry getBibtexRepresentation() {		
-//		BibtexEntry entry = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, 
-//				Globals.getEntryType(mapMSBibToBibtexTypeString(sourceType)));
-
-//		BibtexEntry entry = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, 
-//				mapMSBibToBibtexType(sourceType));
-
-		BibtexEntry entry = null;
-		if(tag == null)
-			entry = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, 
-					mapMSBibToBibtexType(sourceType));
-		else
-			entry = new BibtexEntry(tag, 
-					mapMSBibToBibtexType(sourceType)); // id assumes an existing database so don't
-		
-
-		// Todo: add check for BibTexEntry types
-//		BibtexEntry entry = new BibtexEntry();
-//		if(sourceType.equals("Book"))
-//			entry.setType(BibtexEntryType.BOOK);
-//		else if(sourceType.equals("BookSection"))
-//			entry.setType(BibtexEntryType.INBOOK);
-//		else if(sourceType.equals("JournalArticle"))
-//			entry.setType(BibtexEntryType.ARTICLE);
-//		else if(sourceType.equals("ArticleInAPeriodical"))
-//			entry.setType(BibtexEntryType.ARTICLE);
-//		else if(sourceType.equals("ConferenceProceedings"))
-//			entry.setType(BibtexEntryType.CONFERENCE);
-//		else if(sourceType.equals("Report"))
-//			entry.setType(BibtexEntryType.TECHREPORT);
-//		else if(sourceType.equals("InternetSite"))
-//			entry.setType(BibtexEntryType.OTHER);
-//		else if(sourceType.equals("DocumentFromInternetSite"))
-//			entry.setType(BibtexEntryType.OTHER);
-//		else if(sourceType.equals("DocumentFromInternetSite"))
-//			entry.setType(BibtexEntryType.OTHER);
-//		else if(sourceType.equals("ElectronicSource"))
-//			entry.setType(BibtexEntryType.OTHER);
-//		else if(sourceType.equals("Art"))
-//			entry.setType(BibtexEntryType.OTHER);
-//		else if(sourceType.equals("SoundRecording"))
-//			entry.setType(BibtexEntryType.OTHER);
-//		else if(sourceType.equals("Performance"))
-//			entry.setType(BibtexEntryType.OTHER);
-//		else if(sourceType.equals("Film"))
-//			entry.setType(BibtexEntryType.OTHER);
-//		else if(sourceType.equals("Interview"))
-//			entry.setType(BibtexEntryType.OTHER);
-//		else if(sourceType.equals("Patent"))
-//			entry.setType(BibtexEntryType.OTHER);
-//		else if(sourceType.equals("Case"))
-//			entry.setType(BibtexEntryType.OTHER);
-//		else if(sourceType.equals("Misc"))
-//			entry.setType(BibtexEntryType.MISC);
-//		else
-//			entry.setType(BibtexEntryType.MISC);
-
-		HashMap<String, String> hm = new HashMap<String, String>();
-		
-		if(tag != null)
-			hm.put("bibtexkey",tag);
-//		if(GUID != null)
-//			hm.put("GUID",GUID);
-		if(LCID >= 0)
-			hm.put("language",getLanguage(LCID));
-		if(title != null)
-			hm.put("title",title);
-		if(year != null)
-			hm.put("year",year);
-		if(shortTitle != null)
-			hm.put(MSBIB+"shorttitle",shortTitle);
-		if(comments != null)
-			hm.put("note",comments);
-
-		addAuthor(hm,"author",authors);
-		addAuthor(hm,MSBIB+"bookauthor",bookAuthors);
-		addAuthor(hm,"editor",editors);
-		addAuthor(hm,MSBIB+"translator",translators);
-		addAuthor(hm,MSBIB+"producername",producerNames);
-		addAuthor(hm,MSBIB+"composer",composers);
-		addAuthor(hm,MSBIB+"conductor",conductors);
-		addAuthor(hm,MSBIB+"performer",performers);
-		addAuthor(hm,MSBIB+"writer",writers);
-		addAuthor(hm,MSBIB+"director",directors);
-		addAuthor(hm,MSBIB+"compiler",compilers);
-		addAuthor(hm,MSBIB+"interviewer",interviewers);
-		addAuthor(hm,MSBIB+"interviewee",interviewees);
-		addAuthor(hm,MSBIB+"inventor",inventors);
-		addAuthor(hm,MSBIB+"counsel",counsels);
-   		
-		if(pages !=null )
-			hm.put("pages",pages.toString("--"));
-		if(volume !=null )
-			hm.put("volume",volume);
-		if(numberOfVolumes !=null )
-			hm.put(MSBIB+"numberofvolume",numberOfVolumes);
-		if(edition !=null )
-			hm.put("edition",edition);
-		if(edition !=null )
-			hm.put("edition",edition);
-		parseStandardNumber(standardNumber,hm);
-
-		if(publisher !=null )
-			hm.put("publisher",publisher);
-		if(publisher !=null )
-			hm.put("publisher",publisher);
-		if(address !=null )
-			hm.put("address",address);
-		if(bookTitle !=null )
-			hm.put("booktitle",bookTitle);
-		if(chapterNumber !=null )
-			hm.put("chapter",chapterNumber);
-		if(journalName !=null )
-			hm.put("journal",journalName);
-		if(issue !=null )
-			hm.put("number",issue);
-        if(month !=null )
-            hm.put("month",month);
-		if(periodicalTitle !=null )
-			hm.put("organization",periodicalTitle);
-		if(conferenceName !=null )
-			hm.put("organization",conferenceName);
-		if(department !=null )
-			hm.put("school",department);
-		if(institution !=null )
-			hm.put("institution",institution);
-//		if(thesisType !=null )
-//			hm.put("type",thesisType);
-//		if(internetSiteTitle !=null )
-//			hm.put("title",internetSiteTitle);
-		if(dateAccessed !=null )
-			hm.put(MSBIB+"accessed",dateAccessed);
-		if(url !=null )
-			hm.put("url",url);
-		if(productionCompany !=null )
-			hm.put(MSBIB+"productioncompany",productionCompany);
-//		if(publicationTitle !=null )
-//			hm.put("title",publicationTitle);
-		if(medium !=null )
-			hm.put(MSBIB+"medium",medium);
-//		if(albumTitle !=null )
-//			hm.put("title",albumTitle);
-		if(recordingNumber !=null )
-			hm.put(MSBIB+"recordingnumber",recordingNumber);
-		if(theater !=null )
-			hm.put(MSBIB+"theater",theater);
-		if(distributor !=null )
-			hm.put(MSBIB+"distributor",distributor);
-//		if(broadcastTitle !=null )
-//			hm.put("title",broadcastTitle);
-		if(broadcaster !=null )
-			hm.put(MSBIB+"broadcaster",broadcaster);
-		if(station !=null )
-			hm.put(MSBIB+"station",station);
-		if(type !=null )
-			hm.put(MSBIB+"type",type);
-		if(patentNumber !=null )
-			hm.put(MSBIB+"patentnumber",patentNumber);
-		if(court !=null )
-			hm.put(MSBIB+"court",court);
-		if(reporter !=null )
-			hm.put(MSBIB+"reporter",reporter);
-		if(caseNumber !=null )
-			hm.put(MSBIB+"casenumber",caseNumber);
-		if(abbreviatedCaseNumber !=null )
-			hm.put(MSBIB+"abbreviatedcasenumber",abbreviatedCaseNumber);
-
-		if(bibTex_Series !=null )
-			hm.put("series",bibTex_Series);
-		if(bibTex_Abstract !=null )
-			hm.put("abstract",bibTex_Abstract);
-		if(bibTex_KeyWords !=null )
-			hm.put("keywords",bibTex_KeyWords);
-		if(bibTex_CrossRef !=null )
-			hm.put("crossref",bibTex_CrossRef);
-		if(bibTex_HowPublished !=null )
-			hm.put("howpublished",bibTex_HowPublished);
-		if(bibTex_Affiliation !=null )
-			hm.put("affiliation",bibTex_Affiliation);
-		if(bibTex_Contents !=null )
-			hm.put("contents",bibTex_Contents);
-		if(bibTex_Copyright !=null )
-			hm.put("copyright",bibTex_Copyright);
-		if(bibTex_Price !=null )
-			hm.put("price",bibTex_Price);
-		if(bibTex_Size !=null )
-			hm.put("size",bibTex_Size);
-
-		entry.setField(hm);
-		return entry;
-	}
-
-	/**
-	 * This method ensures that the output String has only
-     * valid XML unicode characters as specified by the
-     * XML 1.0 standard. For reference, please see
-     * <a href="http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char">the
-     * standard</a>. This method will return an empty
-     * String if the input is null or empty.
-     * 
-     * URL: http://cse-mjmcl.cse.bris.ac.uk/blog/2007/02/14/1171465494443.html
-     *
-     * @param in The String whose non-valid characters we want to remove.
-     * @return The in String, stripped of non-valid characters.
-     */
-    public String stripNonValidXMLCharacters(String in) {
-        StringBuffer out = new StringBuffer(); // Used to hold the output.
-        char current; // Used to reference the current character.
-
-        if (in == null || ("".equals(in))) return ""; // vacancy test.
-        for (int i = 0; i < in.length(); i++) {
-            current = in.charAt(i); // NOTE: No IndexOutOfBoundsException caught here; it should not happen.
-            if ((current == 0x9) ||
-                (current == 0xA) ||
-                (current == 0xD) ||
-                ((current >= 0x20) && (current <= 0xD7FF)) ||
-                ((current >= 0xE000) && (current <= 0xFFFD)) ||
-                ((current >= 0x10000) && (current <= 0x10FFFF)))
-                out.append(current);
-        }
-        return out.toString();
-    }
-
-	/*
-	 * render as XML
-	 * 
-	 * TODO This is untested.
-	 */
-	public String toString() {
-		StringWriter sresult = new StringWriter();
-	   	try {
-	      	 DOMSource source = new DOMSource(getDOMrepresentation());
-	      	 StreamResult result = new StreamResult(sresult);
-	      	 Transformer trans = TransformerFactory.newInstance().newTransformer();
-	      	 trans.setOutputProperty(OutputKeys.INDENT, "yes");
-	      	 trans.transform(source, result);
-	      	}
-	      	catch (Exception e) {
-	      		throw new Error(e);
-	      	}
-	      return sresult.toString();
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.msbib;
+import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.XMLChars;
+import net.sf.jabref.mods.PageNumbers;
+import net.sf.jabref.mods.PersonName;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * @author S M Mahbub Murshed
+ * @email udvranto at yahoo.com
+ *
+ * @version 2.0.0
+ * @see http://mahbub.wordpress.com/2007/03/24/details-of-microsoft-office-2007-bibliographic-format-compared-to-bibtex/
+ * @see http://mahbub.wordpress.com/2007/03/22/deciphering-microsoft-office-2007-bibliography-format/
+ * 
+ * Date: May 15, 2007; May 03, 2007
+ * 
+ * History
+ * May 03, 2007 - Added export functionality
+ * May 15, 2007 - Added import functionality
+ * May 16, 2007 - Changed all interger entries to strings,
+ * 				  except LCID which must be an integer.
+ * 				  To avoid exception during integer parsing
+ *				  the exception is caught and LCID is set to zero.
+ * Jan 06, 2012 - Changed the XML element ConferenceName to present
+ * 				  the Booktitle instead of the organization field content
+ */
+public class MSBibEntry {
+	protected String sourceType = "Misc";
+	protected String bibTexEntry = null;
+
+	protected String tag = null;
+	protected String GUID = null;
+	protected int LCID = -1;
+
+	protected List<PersonName> authors = null;
+	protected List<PersonName> bookAuthors = null;
+	protected List<PersonName> editors = null;
+	protected List<PersonName> translators = null;
+	protected List<PersonName> producerNames = null;
+	protected List<PersonName> composers = null;
+	protected List<PersonName> conductors = null;
+	protected List<PersonName> performers = null;
+	protected List<PersonName> writers = null;
+	protected List<PersonName> directors = null;
+	protected List<PersonName> compilers = null;
+	protected List<PersonName> interviewers = null;
+	protected List<PersonName> interviewees = null;
+	protected List<PersonName> inventors = null;
+	protected List<PersonName> counsels = null;
+
+	protected String title = null;
+	protected String year = null;
+	protected String month = null;
+	protected String day = null;
+	
+	protected String shortTitle = null;
+	protected String comments = null;
+	
+	protected PageNumbers pages = null;
+	protected String volume = null;
+	protected String numberOfVolumes = null;
+	protected String edition = null;
+	protected String standardNumber = null;	
+	protected String publisher = null;
+	
+	protected String address = null;
+	protected String bookTitle = null;
+	protected String chapterNumber = null;
+	protected String journalName = null;
+	protected String issue = null;
+	protected String periodicalTitle = null;
+	protected String conferenceName = null;
+	protected String department = null;
+	protected String institution = null;
+	protected String thesisType = null;
+	protected String internetSiteTitle = null;
+	protected String dateAccessed = null;
+	protected String url = null;
+	protected String productionCompany = null;
+	protected String publicationTitle = null;
+	protected String medium = null;
+	protected String albumTitle = null;
+	protected String recordingNumber = null;
+	protected String theater = null;
+	protected String distributor = null;
+	protected String broadcastTitle = null;
+	protected String broadcaster = null;
+	protected String station = null;
+	protected String type = null;
+	protected String patentNumber = null;
+	protected String court = null;
+	protected String reporter = null;
+	protected String caseNumber = null;
+	protected String abbreviatedCaseNumber = null;
+	protected String bibTex_Series = null;
+	protected String bibTex_Abstract = null; 	 
+	protected String bibTex_KeyWords = null; 	 
+	protected String bibTex_CrossRef = null;
+	protected String bibTex_HowPublished = null; 	 
+	protected String bibTex_Affiliation = null;
+	protected String bibTex_Contents = null;
+	protected String bibTex_Copyright = null;	 
+	protected String bibTex_Price = null; 	 
+	protected String bibTex_Size = null;
+	
+	/* SM 2010.10 intype, paper support */
+	protected String bibTex_InType = null;
+	protected String bibTex_Paper = null;
+
+	private final String BIBTEX = "BIBTEX_";
+	private final String MSBIB = "msbib-";
+
+	private final String bcol = "b:";
+	
+	private final boolean FORMATXML = false;
+	
+	public MSBibEntry() {
+	}
+	
+	public MSBibEntry(BibtexEntry bibtex) {
+		this();
+		populateFromBibtex(bibtex);
+	}
+
+	public MSBibEntry(Element entry, String _bcol) {
+		this();
+		populateFromXml(entry,_bcol);
+	}
+
+	protected String getFromXml(String name, Element entry) {
+		String value = null;
+		NodeList nodeLst = entry.getElementsByTagName(name);
+		if(nodeLst.getLength()>0)
+			value = nodeLst.item(0).getTextContent();
+		return value;
+	}
+	
+
+	protected void populateFromXml(Element entry, String _bcol) {		
+		String temp = null;
+
+		sourceType = getFromXml(_bcol+"SourceType", entry);
+
+		tag  = getFromXml(_bcol+"Tag", entry);
+
+		temp = getFromXml(_bcol+"LCID", entry);
+		if(temp!=null)
+		{
+			try {
+			LCID = Integer.parseInt(temp); }
+			catch (Exception e) {
+				LCID = -1;
+			}
+		}
+
+		title = getFromXml(_bcol+"Title", entry);
+		year = getFromXml(_bcol+"Year", entry);
+		month = getFromXml(_bcol+"Month", entry);
+		day = getFromXml(_bcol+"Day", entry);
+
+		shortTitle = getFromXml(_bcol+"ShortTitle", entry);
+		comments = getFromXml(_bcol+"Comments", entry);
+
+		temp = getFromXml(_bcol+"Pages", entry);
+		if(temp != null)
+			pages = new PageNumbers(temp);
+
+		volume = getFromXml(_bcol+"Volume", entry);
+
+		numberOfVolumes = getFromXml(_bcol+"NumberVolumes", entry);
+
+		edition = getFromXml(_bcol+"Edition", entry);
+		
+		standardNumber = getFromXml(_bcol+"StandardNumber", entry);
+
+		publisher = getFromXml(_bcol+"Publisher", entry);
+
+		String city = getFromXml(_bcol+"City", entry);
+		String state = getFromXml(_bcol+"StateProvince", entry);
+		String country = getFromXml(_bcol+"CountryRegion", entry);
+		address = "";
+		if(city != null)
+			address += city + ", "; 
+		if(state != null)
+			address += state + " "; 
+		if(country != null)
+			address += country;
+		address = address.trim();
+		if(address.equals("") || address.equals(","))
+			address = null;
+
+		bookTitle = getFromXml(_bcol+"BookTitle", entry);
+
+		chapterNumber = getFromXml(_bcol+"ChapterNumber", entry);
+
+		journalName = getFromXml(_bcol+"JournalName", entry);
+
+		issue = getFromXml(_bcol+"Issue", entry);
+
+		periodicalTitle = getFromXml(_bcol+"PeriodicalTitle", entry);
+		
+		conferenceName = getFromXml(_bcol+"ConferenceName", entry);
+		department = getFromXml(_bcol+"Department", entry);
+		institution = getFromXml(_bcol+"Institution", entry);
+
+		thesisType = getFromXml(_bcol+"ThesisType", entry);
+		internetSiteTitle = getFromXml(_bcol+"InternetSiteTitle", entry);
+		String month = getFromXml(_bcol+"MonthAccessed", entry);
+		String day = getFromXml(_bcol+"DayAccessed", entry);
+		String year = getFromXml(_bcol+"YearAccessed", entry);
+		dateAccessed = "";
+		if(month != null)
+			dateAccessed += month + " ";
+		if(day != null)
+			dateAccessed += day + ", ";
+		if(year != null)
+			dateAccessed += year;
+		dateAccessed = dateAccessed.trim();
+		if(dateAccessed.equals("") || dateAccessed.equals(","))
+			dateAccessed = null;
+
+		url = getFromXml(_bcol+"URL", entry);
+		productionCompany = getFromXml(_bcol+"ProductionCompany", entry);
+		
+		publicationTitle = getFromXml(_bcol+"PublicationTitle", entry);
+		medium = getFromXml(_bcol+"Medium", entry);
+		albumTitle = getFromXml(_bcol+"AlbumTitle", entry);
+		recordingNumber = getFromXml(_bcol+"RecordingNumber", entry);
+		theater = getFromXml(_bcol+"Theater", entry);
+		distributor = getFromXml(_bcol+"Distributor", entry);
+		broadcastTitle = getFromXml(_bcol+"BroadcastTitle", entry);
+		broadcaster = getFromXml(_bcol+"Broadcaster", entry);
+		station = getFromXml(_bcol+"Station", entry);
+		type = getFromXml(_bcol+"Type", entry);
+		patentNumber = getFromXml(_bcol+"PatentNumber", entry);
+		court = getFromXml(_bcol+"Court", entry);
+		reporter = getFromXml(_bcol+"Reporter", entry);
+		caseNumber = getFromXml(_bcol+"CaseNumber", entry);
+		abbreviatedCaseNumber = getFromXml(_bcol+"AbbreviatedCaseNumber", entry);
+		bibTex_Series = getFromXml(_bcol+BIBTEX+"Series", entry);
+		bibTex_Abstract = getFromXml(_bcol+BIBTEX+"Abstract", entry);
+		bibTex_KeyWords = getFromXml(_bcol+BIBTEX+"KeyWords", entry);
+		bibTex_CrossRef = getFromXml(_bcol+BIBTEX+"CrossRef", entry);
+		bibTex_HowPublished = getFromXml(_bcol+BIBTEX+"HowPublished", entry);
+		bibTex_Affiliation = getFromXml(_bcol+BIBTEX+"Affiliation", entry);
+		bibTex_Contents = getFromXml(_bcol+BIBTEX+"Contents", entry);
+		bibTex_Copyright = getFromXml(_bcol+BIBTEX+"Copyright", entry);
+		bibTex_Price = getFromXml(_bcol+BIBTEX+"Price", entry);
+		bibTex_Size = getFromXml(_bcol+BIBTEX+"Size", entry);
+	 
+		NodeList nodeLst = entry.getElementsByTagName(_bcol+"Author");
+		if(nodeLst.getLength()>0)
+			getAuthors((Element)(nodeLst.item(0)),_bcol);
+	}
+
+	protected void populateFromBibtex(BibtexEntry bibtex) {
+		// date = getDate(bibtex);	
+		sourceType = getMSBibSourceType(bibtex);
+
+		if (bibtex.getField("bibtexkey") != null)
+			tag = bibtex.getField("bibtexkey").toString();
+
+		if (bibtex.getField("language") != null)
+			LCID = getLCID(bibtex.getField("language").toString());
+
+		if (bibtex.getField("title") != null)
+			title = bibtex.getField("title").toString();
+		if (bibtex.getField("year") != null)
+			year = bibtex.getField("year").toString();
+		if (bibtex.getField("month") != null)
+			month = bibtex.getField("month").toString();
+		if (bibtex.getField(MSBIB+"day") != null)
+			day = bibtex.getField(MSBIB+"day").toString();
+
+		if (bibtex.getField(MSBIB+"shorttitle") != null)
+			shortTitle = bibtex.getField(MSBIB+"shorttitle").toString();
+		if (bibtex.getField("note") != null)
+			comments = bibtex.getField("note").toString();
+
+		if (bibtex.getField("pages") != null)
+			pages = new PageNumbers(bibtex.getField("pages").toString());
+
+		if (bibtex.getField("volume") != null)
+			volume = bibtex.getField("volume").toString();
+
+		if (bibtex.getField(MSBIB+"numberofvolume") != null)
+			numberOfVolumes = bibtex.getField(MSBIB+"numberofvolume").toString();
+
+		if (bibtex.getField("edition") != null)
+			edition = bibtex.getField("edition").toString();
+		
+		standardNumber = new String();
+		if (bibtex.getField("isbn") != null) /* SM: 2010.10: lower case */
+			standardNumber += " ISBN: " + bibtex.getField("isbn").toString(); /* SM: 2010.10: lower case */
+		if (bibtex.getField("issn") != null) /* SM: 2010.10: lower case */
+			standardNumber += " ISSN: "+ bibtex.getField("issn").toString(); /* SM: 2010.10: lower case */
+		if (bibtex.getField("lccn") != null) /* SM: 2010.10: lower case */
+			standardNumber += " LCCN: "+ bibtex.getField("lccn").toString(); /* SM: 2010.10: lower case */
+		if (bibtex.getField("mrnumber") != null)
+			standardNumber += " MRN: "+ bibtex.getField("mrnumber").toString();
+		/* SM: 2010.10 begin DOI support */	
+		if (bibtex.getField("doi") != null)
+			standardNumber += " DOI: "+ bibtex.getField("doi").toString();
+		/* SM: 2010.10 end DOI support */	
+		if(standardNumber.equals(""))
+			standardNumber = null;
+
+		if (bibtex.getField("publisher") != null)
+			publisher = bibtex.getField("publisher").toString();
+
+		if (bibtex.getField("address") != null)
+			address = bibtex.getField("address").toString();
+
+		if (bibtex.getField("booktitle") != null)
+			bookTitle = bibtex.getField("booktitle").toString();
+
+		if (bibtex.getField("chapter") != null)
+			chapterNumber = bibtex.getField("chapter").toString();
+
+		if (bibtex.getField("journal") != null)
+			journalName = bibtex.getField("journal").toString();
+
+		if (bibtex.getField("number") != null)
+			issue = bibtex.getField("number").toString();
+
+		if (bibtex.getField(MSBIB+"periodical") != null)
+			periodicalTitle = bibtex.getField(MSBIB+"periodical").toString();
+		
+		if (bibtex.getField("booktitle") != null)
+			conferenceName = bibtex.getField("booktitle").toString();
+		if (bibtex.getField("school") != null)
+			department = bibtex.getField("school").toString();
+		if (bibtex.getField("institution") != null)
+			institution = bibtex.getField("institution").toString();
+
+		/* SM: 2010.10 Modified for default source types */
+		if (bibtex.getField("type") != null)
+			thesisType = bibtex.getField("type").toString();
+		else
+		{
+			if (bibtex.getType().getName().equalsIgnoreCase("techreport"))
+				thesisType = "Tech. rep.";
+			else if (bibtex.getType().getName().equalsIgnoreCase("mastersthesis"))
+				thesisType = "Master's thesis";
+			else if (bibtex.getType().getName().equalsIgnoreCase("phdthesis"))
+				thesisType = "Ph.D. dissertation";
+			else if (bibtex.getType().getName().equalsIgnoreCase("unpublished"))
+				thesisType = "unpublished";
+			//else if (bibtex.getType().getName().equalsIgnoreCase("manual"))
+			//	thesisType = "manual";
+		}
+		
+		
+		if ( (sourceType.equals("InternetSite")==true || sourceType.equals("DocumentFromInternetSite")==true)
+				&& bibtex.getField("title") != null)
+			internetSiteTitle = bibtex.getField("title").toString();
+		if (bibtex.getField(MSBIB+"accessed") != null)
+			dateAccessed = bibtex.getField(MSBIB+"accessed").toString();
+		if (bibtex.getField("url") != null) /* SM: 2010.10: lower case */
+			url = bibtex.getField("url").toString(); /* SM: 2010.10: lower case */
+		if (bibtex.getField(MSBIB+"productioncompany") != null)
+			productionCompany = bibtex.getField(MSBIB+"productioncompany").toString();
+		
+		if ( (sourceType.equals("ElectronicSource")==true 
+				|| sourceType.equals("Art")==true
+				|| sourceType.equals("Misc")==true)
+				&& bibtex.getField("title") != null)
+			publicationTitle = bibtex.getField("title").toString();
+		if (bibtex.getField(MSBIB+"medium") != null)
+			medium = bibtex.getField(MSBIB+"medium").toString();
+		if (sourceType.equals("SoundRecording")==true && bibtex.getField("title") != null)
+			albumTitle = bibtex.getField("title").toString();
+		if (bibtex.getField(MSBIB+"recordingnumber") != null)
+			recordingNumber = bibtex.getField(MSBIB+"recordingnumber").toString();
+		if (bibtex.getField(MSBIB+"theater") != null)
+			theater = bibtex.getField(MSBIB+"theater").toString();
+		if (bibtex.getField(MSBIB+"distributor") != null)
+			distributor = bibtex.getField(MSBIB+"distributor").toString();
+		if (sourceType.equals("Interview")==true && bibtex.getField("title") != null)
+			broadcastTitle = bibtex.getField("title").toString();
+		if (bibtex.getField(MSBIB+"broadcaster") != null)
+			broadcaster = bibtex.getField(MSBIB+"broadcaster").toString();
+		if (bibtex.getField(MSBIB+"station") != null)
+			station = bibtex.getField(MSBIB+"station").toString();
+		if (bibtex.getField(MSBIB+"type") != null)
+			type = bibtex.getField(MSBIB+"type").toString();
+		if (bibtex.getField(MSBIB+"patentnumber") != null)
+			patentNumber = bibtex.getField(MSBIB+"patentnumber").toString();
+		if (bibtex.getField(MSBIB+"court") != null)
+			court = bibtex.getField(MSBIB+"court").toString();
+		if (bibtex.getField(MSBIB+"reporter") != null)
+			reporter = bibtex.getField(MSBIB+"reporter").toString();
+		if (bibtex.getField(MSBIB+"casenumber") != null)
+			caseNumber = bibtex.getField(MSBIB+"casenumber").toString();
+		if (bibtex.getField(MSBIB+"abbreviatedcasenumber") != null)
+			abbreviatedCaseNumber = bibtex.getField(MSBIB+"abbreviatedcasenumber").toString();
+		
+		if (bibtex.getField("series") != null)
+			bibTex_Series = bibtex.getField("series").toString();
+		if (bibtex.getField("abstract") != null)
+			bibTex_Abstract = bibtex.getField("abstract").toString();
+		if (bibtex.getField("keywords") != null)
+			bibTex_KeyWords = bibtex.getField("keywords").toString();
+		if (bibtex.getField("crossref") != null)
+			bibTex_CrossRef = bibtex.getField("crossref").toString();
+		if (bibtex.getField("howpublished") != null)
+			bibTex_HowPublished = bibtex.getField("howpublished").toString();
+		if (bibtex.getField("affiliation") != null)
+			bibTex_Affiliation = bibtex.getField("affiliation").toString();
+		if (bibtex.getField("contents") != null)
+			bibTex_Contents = bibtex.getField("contents").toString();
+		if (bibtex.getField("copyright") != null)
+			bibTex_Copyright = bibtex.getField("copyright").toString();
+		if (bibtex.getField("price") != null)
+			bibTex_Price = bibtex.getField("price").toString();
+		if (bibtex.getField("size") != null)
+			bibTex_Size = bibtex.getField("size").toString();
+	 
+		/* SM: 2010.10 end intype, paper support */	
+		if (bibtex.getField("intype") != null)
+			bibTex_InType = bibtex.getField("intype").toString();
+		if (bibtex.getField("paper") != null)
+			bibTex_Paper = bibtex.getField("paper").toString();
+
+		
+		if (bibtex.getField("author") != null)
+			authors = getAuthors(bibtex.getField("author").toString());
+        if (bibtex.getField("editor") != null)
+            editors = getAuthors(bibtex.getField("editor").toString());
+        
+		if(FORMATXML)
+		{
+			title = format(title);
+			// shortTitle = format(shortTitle);
+			// publisher = format(publisher);
+			// conferenceName = format(conferenceName);
+			// department = format(department);
+			// institution = format(institution);
+			// internetSiteTitle = format(internetSiteTitle);
+			// publicationTitle = format(publicationTitle);
+			// albumTitle = format(albumTitle);
+			// theater = format(theater);
+			// distributor = format(distributor);
+			// broadcastTitle = format(broadcastTitle);
+			// broadcaster = format(broadcaster);
+			// station = format(station);
+			// court = format(court);
+			// reporter = format(reporter);
+			// bibTex_Series = format(bibTex_Series);
+			bibTex_Abstract = format(bibTex_Abstract);
+		}
+	}
+
+	private String format(String value)
+	{
+		if(value == null)
+			return null;
+		String result = null;
+		LayoutFormatter chars = new XMLChars();
+		result = chars.format(value);
+		return result;
+	}
+	
+	// http://www.microsoft.com/globaldev/reference/lcid-all.mspx
+	protected int getLCID(String language)
+	{
+		int iLCID = 0;
+		// TODO: add lanaguage to LCID mapping
+		
+		return iLCID;
+	}
+
+	// http://www.microsoft.com/globaldev/reference/lcid-all.mspx
+	protected String getLanguage(int LCID)
+	{
+		String language = "english";
+		// TODO: add lanaguage to LCID mapping
+		
+		return language;
+	}
+	
+	protected List<PersonName> getSpecificAuthors(String type, Element authors, String _bcol) {
+		List<PersonName> result = null;
+		NodeList nodeLst = authors.getElementsByTagName(_bcol+type);
+		if(nodeLst.getLength()<=0)
+			return result;
+		nodeLst = ((Element)(nodeLst.item(0))).getElementsByTagName(_bcol+"NameList");
+		if(nodeLst.getLength()<=0)
+			return result;
+		NodeList person = ((Element)(nodeLst.item(0))).getElementsByTagName(_bcol+"Person");
+		if(person.getLength()<=0)
+			return result;
+
+		result = new LinkedList<PersonName>();
+		for(int i=0;i<person.getLength();i++)
+		{
+			NodeList firstName  = ((Element)(person.item(i))).getElementsByTagName(_bcol+"First");
+			NodeList lastName   = ((Element)(person.item(i))).getElementsByTagName(_bcol+"Last");
+			NodeList middleName = ((Element)(person.item(i))).getElementsByTagName(_bcol+"Middle");
+			PersonName name = new PersonName();
+			if(firstName.getLength()>0)
+				name.setFirstname(firstName.item(0).getTextContent());
+			if(middleName.getLength()>0)
+				name.setMiddlename(middleName.item(0).getTextContent());
+			if(lastName.getLength()>0)
+				name.setSurname(lastName.item(0).getTextContent());
+			result.add(name);
+		}
+		
+		return result;
+	}
+
+	protected void getAuthors(Element authorsElem, String _bcol) {
+		authors = getSpecificAuthors("Author",authorsElem,_bcol);		
+		bookAuthors = getSpecificAuthors("BookAuthor",authorsElem,_bcol);
+		editors = getSpecificAuthors("Editor",authorsElem,_bcol);
+		translators = getSpecificAuthors("Translator",authorsElem,_bcol);
+		producerNames = getSpecificAuthors("ProducerName",authorsElem,_bcol);
+		composers = getSpecificAuthors("Composer",authorsElem,_bcol);
+		conductors = getSpecificAuthors("Conductor",authorsElem,_bcol);
+		performers = getSpecificAuthors("Performer",authorsElem,_bcol);
+		writers = getSpecificAuthors("Writer",authorsElem,_bcol);
+		directors = getSpecificAuthors("Director",authorsElem,_bcol);
+		compilers = getSpecificAuthors("Compiler",authorsElem,_bcol);
+		interviewers = getSpecificAuthors("Interviewer",authorsElem,_bcol);
+		interviewees = getSpecificAuthors("Interviewee",authorsElem,_bcol);
+		inventors = getSpecificAuthors("Inventor",authorsElem,_bcol);
+		counsels = getSpecificAuthors("Counsel",authorsElem,_bcol);
+	}
+
+	protected List<PersonName> getAuthors(String authors) {
+		List<PersonName> result = new LinkedList<PersonName>();
+		
+		if (authors.indexOf(" and ") == -1)
+		{
+				result.add(new PersonName(authors));
+		}
+        else
+        {
+            String[] names = authors.split(" and ");
+            for (int i=0; i<names.length; i++)
+            {
+            		result.add(new PersonName(names[i]));
+            }
+        }
+		return result;
+	}
+	
+	/* construct a MSBib date object */
+	protected String getDate(BibtexEntry bibtex) {
+		String result = "";
+		if (bibtex.getField("year") != null)
+			result += (bibtex.getField("year").toString());
+		if (bibtex.getField("month") != null)
+			result += "-" + bibtex.getField("month").toString();
+		
+		return result;
+	}
+
+	protected String getMSBibSourceType(BibtexEntry bibtex) {
+		String bibtexType = bibtex.getType().getName();
+
+		String result = "Misc";
+		if (bibtexType.equalsIgnoreCase("book"))
+			result = "Book";
+		else if(bibtexType.equalsIgnoreCase("inbook"))
+			{ result = "BookSection"; bibTexEntry = "inbook"; } /* SM 2010.10: generalized */
+		else if(bibtexType.equalsIgnoreCase("booklet"))
+			{ result = "BookSection"; bibTexEntry = "booklet"; } 
+		else if(bibtexType.equalsIgnoreCase("incollection"))
+			{ result = "BookSection"; bibTexEntry = "incollection"; } 
+
+		else if(bibtexType.equalsIgnoreCase("article"))
+			result = "JournalArticle"; 
+
+		else if(bibtexType.equalsIgnoreCase("inproceedings"))
+		{ result = "ConferenceProceedings"; bibTexEntry = "inproceedings"; }  /* SM 2010.10: generalized */ 
+		else if(bibtexType.equalsIgnoreCase("conference"))
+			{ result = "ConferenceProceedings"; bibTexEntry = "conference"; } 
+		else if(bibtexType.equalsIgnoreCase("proceedings"))
+			{ result = "ConferenceProceedings"; bibTexEntry = "proceedings"; } 
+		else if(bibtexType.equalsIgnoreCase("collection"))
+			{ result = "ConferenceProceedings"; bibTexEntry = "collection"; } 
+
+		else if(bibtexType.equalsIgnoreCase("techreport"))
+		{ result = "Report"; bibTexEntry = "techreport"; } /* SM 2010.10: generalized */ 
+		else if(bibtexType.equalsIgnoreCase("manual"))
+			{ result = "Report"; bibTexEntry = "manual"; } 
+		else if(bibtexType.equalsIgnoreCase("mastersthesis"))
+			{ result = "Report"; bibTexEntry = "mastersthesis"; } 
+		else if(bibtexType.equalsIgnoreCase("phdthesis"))
+			{ result = "Report"; bibTexEntry = "phdthesis"; } 
+		else if(bibtexType.equalsIgnoreCase("unpublished"))
+			{ result = "Report"; bibTexEntry = "unpublished"; } 
+
+		else if(bibtexType.equalsIgnoreCase("patent"))
+			result = "Patent"; 
+
+		else if(bibtexType.equalsIgnoreCase("misc"))
+			result = "Misc"; 
+			
+		/*SM: 2010.10 - bibtex @electronic */
+		else if(bibtexType.equalsIgnoreCase("electronic"))
+			{ result = "Misc"; bibTexEntry = "electronic"; } 
+		
+		return result;
+	}
+	
+	public Node getDOMrepresentation() {
+		Node result = null;
+		try {
+			DocumentBuilder d = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+			
+			result = getDOMrepresentation(d.newDocument());
+		}
+		catch (Exception e) 
+		{
+			throw new Error(e);
+		}
+		return result;
+	}
+
+	public void addField(Document d,Element parent, String name, String value) {
+		if(value == null)
+			return;
+		Element elem = d.createElement(bcol+name);
+ 		// elem.appendChild(d.createTextNode(healXML(value)));
+//		Text txt = d.createTextNode(value);
+//		if(!txt.getTextContent().equals(value))
+//			System.out.println("Values dont match!");
+//			// throw new Exception("Values dont match!");
+//		elem.appendChild(txt);
+		elem.appendChild(d.createTextNode(stripNonValidXMLCharacters(value)));		
+		parent.appendChild(elem);
+	}
+
+	public void addAuthor(Document d, Element allAuthors, String entryName, List<PersonName> authorsLst) {
+		if(authorsLst == null)
+			return;
+		Element authorTop = d.createElement(bcol+entryName);
+		Element nameList = d.createElement(bcol+"NameList");
+		for(Iterator<PersonName> iter = authorsLst.iterator(); iter.hasNext();) {
+			PersonName name = iter.next();
+			Element person = d.createElement(bcol+"Person");
+			addField(d, person,"Last",name.getSurname());
+			addField(d, person,"Middle",name.getMiddlename());
+			addField(d, person,"First",name.getFirstname());
+			nameList.appendChild(person);
+		}
+		authorTop.appendChild(nameList);
+		
+		allAuthors.appendChild(authorTop);
+	}
+
+	public void addAdrress(Document d,Element parent, String address) {
+		if(address == null)
+			return;
+
+		// US address parser
+		// See documentation here http://regexlib.com/REDetails.aspx?regexp_id=472
+		// Pattern p = Pattern.compile("^(?n:(((?<address1>(\\d{1,5}(\\ 1\\/[234])?(\\x20[A-Z]([a-z])+)+ )|(P\\.O\\.\\ Box\\ \\d{1,5}))\\s{1,2}(?i:(?<address2>(((APT|B LDG|DEPT|FL|HNGR|LOT|PIER|RM|S(LIP|PC|T(E|OP))|TRLR|UNIT)\\x20\\w{1,5})|(BSMT|FRNT|LBBY|LOWR|OFC|PH|REAR|SIDE|UPPR)\\.?)\\s{1,2})?))?)(?<city>[A-Z]([a-z])+(\\.?)(\\x20[A-Z]([a-z])+){0,2})([,\\x20]+?)(?<state>A[LKSZRAP]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADL N]|K[SY]|LA|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[ARW]|RI|S[CD] |T[NX]|UT|V[AIT] [...]
+		// the pattern above is for C#, may not work with java. Never tested though.
+		
+		// reduced subset, supports only "CITY , STATE, COUNTRY"
+		// \b(\w+)\s?[,]?\s?(\w+)\s?[,]?\s?(\w+)\b
+		// WORD SPACE , SPACE WORD SPACE , SPACE WORD
+		// tested using http://www.javaregex.com/test.html
+		Pattern p = Pattern.compile("\\b(\\w+)\\s*[,]?\\s*(\\w+)\\s*[,]?\\s*(\\w+)\\b");
+		Matcher m = p.matcher(address);
+		if (m.matches() && m.groupCount()>3)
+		{
+			addField(d, parent,"City",m.group(1));
+			addField(d, parent,"StateProvince",m.group(2));
+			addField(d, parent,"CountryRegion",m.group(3));
+		}
+		else
+			/* SM: 2010.10 generalized */
+			addField(d, parent,"City",address);
+	}
+
+	public void addDate(Document d,Element parent, String date, String extra) {
+		if(date == null)
+			return;
+
+		// Allows 20.3-2007|||20/3-  2007 etc. 
+		// (\d{1,2})\s?[.,-/]\s?(\d{1,2})\s?[.,-/]\s?(\d{2,4})
+		// 1-2 DIGITS SPACE SEPERATOR SPACE 1-2 DIGITS SPACE SEPERATOR SPACE 2-4 DIGITS
+		// tested using http://www.javaregex.com/test.html
+		Pattern p = Pattern.compile("(\\d{1,2})\\s*[.,-/]\\s*(\\d{1,2})\\s*[.,-/]\\s*(\\d{2,4})");
+		Matcher m = p.matcher(date);
+		if (m.matches() && m.groupCount()>3)
+		{
+			addField(d, parent,"Month"+extra,m.group(1));
+			addField(d, parent,"Day"+extra,m.group(2));
+			addField(d, parent,"Year"+extra,m.group(3));
+		}
+	}
+
+	public Element getDOMrepresentation(Document d) {
+	
+	   	try {
+	   		Element msbibEntry = d.createElement(bcol+"Source");
+
+	   		addField(d,msbibEntry,"SourceType",sourceType);
+   			addField(d,msbibEntry,BIBTEX+"Entry",bibTexEntry);
+
+   			addField(d,msbibEntry,"Tag",tag);
+   			addField(d,msbibEntry,"GUID",GUID);
+   			if(LCID >= 0)
+   				addField(d,msbibEntry,"LCID",Integer.toString(LCID));
+   			addField(d,msbibEntry,"Title",title);
+   			addField(d,msbibEntry,"Year",year);
+   			addField(d,msbibEntry,"ShortTitle",shortTitle);
+   			addField(d,msbibEntry,"Comments",comments);
+
+   			Element allAuthors = d.createElement(bcol+"Author");
+
+   			addAuthor(d,allAuthors,"Author",authors);
+	   		addAuthor(d,allAuthors,"BookAuthor",bookAuthors);
+	   		addAuthor(d,allAuthors,"Editor",editors);
+	   		addAuthor(d,allAuthors,"Translator",translators);
+	   		addAuthor(d,allAuthors,"ProducerName",producerNames);
+	   		addAuthor(d,allAuthors,"Composer",composers);
+	   		addAuthor(d,allAuthors,"Conductor",conductors);
+	   		addAuthor(d,allAuthors,"Performer",performers);
+	   		addAuthor(d,allAuthors,"Writer",writers);
+	   		addAuthor(d,allAuthors,"Director",directors);
+	   		addAuthor(d,allAuthors,"Compiler",compilers);
+	   		addAuthor(d,allAuthors,"Interviewer",interviewers);
+	   		addAuthor(d,allAuthors,"Interviewee",interviewees);
+	   		addAuthor(d,allAuthors,"Inventor",inventors);
+	   		addAuthor(d,allAuthors,"Counsel",counsels);
+
+	   		msbibEntry.appendChild(allAuthors);
+	   		
+	   		if(pages !=null )
+	   			addField(d,msbibEntry,"Pages",pages.toString("-"));
+	   		addField(d,msbibEntry,"Volume",volume);
+	   		addField(d,msbibEntry,"NumberVolumes",numberOfVolumes);
+	   		addField(d,msbibEntry,"Edition",edition);
+	   		addField(d,msbibEntry,"StandardNumber",standardNumber);
+	   		addField(d,msbibEntry,"Publisher",publisher);
+		
+	   		addAdrress(d,msbibEntry,address);
+	   		
+	   		addField(d,msbibEntry,"BookTitle",bookTitle);
+	   		addField(d,msbibEntry,"ChapterNumber",chapterNumber);
+
+	   		addField(d,msbibEntry,"JournalName",journalName);
+	   		addField(d,msbibEntry,"Issue",issue);
+	   		addField(d,msbibEntry,"PeriodicalTitle",periodicalTitle);
+	   		addField(d,msbibEntry,"ConferenceName",conferenceName);
+
+	   		addField(d,msbibEntry,"Department",department);
+	   		addField(d,msbibEntry,"Institution",institution);
+	   		addField(d,msbibEntry,"ThesisType",thesisType);
+	   		addField(d,msbibEntry,"InternetSiteTitle",internetSiteTitle);
+	   		
+	   		addDate(d,msbibEntry, dateAccessed, "Accessed");
+	   		
+	   		/* SM 2010.10 added month export */
+	   		addField(d,msbibEntry,"Month",month);
+	   		
+	   		addField(d,msbibEntry,"URL",url);
+	   		addField(d,msbibEntry,"ProductionCompany",productionCompany);
+	   		addField(d,msbibEntry,"PublicationTitle",publicationTitle);
+	   		addField(d,msbibEntry,"Medium",medium);
+	   		addField(d,msbibEntry,"AlbumTitle",albumTitle);
+	   		addField(d,msbibEntry,"RecordingNumber",recordingNumber);	   		
+	   		addField(d,msbibEntry,"Theater",theater);
+	   		addField(d,msbibEntry,"Distributor",distributor);
+	   		addField(d,msbibEntry,"BroadcastTitle",broadcastTitle);
+	   		addField(d,msbibEntry,"Broadcaster",broadcaster);
+	   		addField(d,msbibEntry,"Station",station);
+	   		addField(d,msbibEntry,"Type",type);
+	   		addField(d,msbibEntry,"PatentNumber",patentNumber);
+	   		addField(d,msbibEntry,"Court",court);
+	   		addField(d,msbibEntry,"Reporter",reporter);
+	   		addField(d,msbibEntry,"CaseNumber",caseNumber);
+	   		addField(d,msbibEntry,"AbbreviatedCaseNumber",abbreviatedCaseNumber);
+
+	   		addField(d,msbibEntry,BIBTEX+"Series",bibTex_Series);
+	   		addField(d,msbibEntry,BIBTEX+"Abstract",bibTex_Abstract);
+	   		addField(d,msbibEntry,BIBTEX+"KeyWords",bibTex_KeyWords);
+	   		addField(d,msbibEntry,BIBTEX+"CrossRef",bibTex_CrossRef);
+	   		addField(d,msbibEntry,BIBTEX+"HowPublished",bibTex_HowPublished);
+	   		addField(d,msbibEntry,BIBTEX+"Affiliation",bibTex_Affiliation);
+	   		addField(d,msbibEntry,BIBTEX+"Contents",bibTex_Contents);
+	   		addField(d,msbibEntry,BIBTEX+"Copyright",bibTex_Copyright);
+	   		addField(d,msbibEntry,BIBTEX+"Price",bibTex_Price);
+	   		addField(d,msbibEntry,BIBTEX+"Size",bibTex_Size);
+	   		
+			/* SM: 2010.10 end intype, paper support */	
+	   		addField(d,msbibEntry,BIBTEX+"InType",bibTex_InType);
+	   		addField(d,msbibEntry,BIBTEX+"Paper",bibTex_Paper);
+
+
+	   		return msbibEntry;
+	   	}
+	   	catch (Exception e)
+		{
+	   		System.out.println("Exception caught..." + e);
+	   		e.printStackTrace();
+	   		throw new Error(e);
+		}
+	   	// return null;
+	   }
+	
+	protected void parseSingleStandardNumber(String type,String bibtype, String standardNum, HashMap<String, String> hm) {
+		// tested using http://www.javaregex.com/test.html
+		Pattern p = Pattern.compile(":"+type+":(.[^:]+)");
+		Matcher m = p.matcher(standardNum);
+		if (m.matches())
+			hm.put(bibtype,m.group(1));
+	}
+
+	protected void parseStandardNumber(String standardNum, HashMap<String, String> hm) {
+		if(standardNumber == null)
+			return;
+		parseSingleStandardNumber("ISBN","isbn",standardNum,hm); /* SM: 2010.10: lower case */
+		parseSingleStandardNumber("ISSN","issn",standardNum,hm); /* SM: 2010.10: lower case */
+		parseSingleStandardNumber("LCCN","lccn",standardNum,hm); /* SM: 2010.10: lower case */
+		parseSingleStandardNumber("MRN","mrnumber",standardNum,hm);
+		/* SM: 2010.10 begin DOI support */	
+		parseSingleStandardNumber("DOI","doi",standardNum,hm);
+		/* SM: 2010.10 end DOI support */
+	}
+
+	public void addAuthor(HashMap<String, String> hm, String type, List<PersonName> authorsLst) {
+		if(authorsLst == null)
+			return;
+		String allAuthors = "";
+		boolean First = true;
+		for(Iterator<PersonName> iter = authorsLst.iterator(); iter.hasNext();) {
+			PersonName name = iter.next();
+			if(First == false)
+				allAuthors += " and ";
+			allAuthors += name.getFullname();
+			First = false;
+		}
+		hm.put(type,allAuthors);
+	}
+
+//	public String mapMSBibToBibtexTypeString(String msbib) {		
+//		String bibtex = "other";
+//		if(msbib.equals("Book"))
+//			bibtex = "book";
+//		else if(msbib.equals("BookSection"))
+//			bibtex = "inbook";
+//		else if(msbib.equals("JournalArticle"))
+//			bibtex = "article";
+//		else if(msbib.equals("ArticleInAPeriodical"))
+//			bibtex = "article";
+//		else if(msbib.equals("ConferenceProceedings"))
+//			bibtex = "conference";
+//		else if(msbib.equals("Report"))
+//			bibtex = "techreport";
+//		else if(msbib.equals("InternetSite"))
+//			bibtex = "other";
+//		else if(msbib.equals("DocumentFromInternetSite"))
+//			bibtex = "other";
+//		else if(msbib.equals("DocumentFromInternetSite"))
+//			bibtex = "other";
+//		else if(msbib.equals("ElectronicSource"))
+//			bibtex = "other";
+//		else if(msbib.equals("Art"))
+//			bibtex = "other";
+//		else if(msbib.equals("SoundRecording"))
+//			bibtex = "other";
+//		else if(msbib.equals("Performance"))
+//			bibtex = "other";
+//		else if(msbib.equals("Film"))
+//			bibtex = "other";
+//		else if(msbib.equals("Interview"))
+//			bibtex = "other";
+//		else if(msbib.equals("Patent"))
+//			bibtex = "other";
+//		else if(msbib.equals("Case"))
+//			bibtex = "other";
+//		else if(msbib.equals("Misc"))
+//			bibtex = "misc";
+//		else
+//			bibtex = "misc";
+//
+//		return bibtex;
+//	}
+	
+	public BibtexEntryType mapMSBibToBibtexType(String msbib)
+	{
+		BibtexEntryType bibtex = BibtexEntryType.OTHER;
+		if(msbib.equals("Book"))
+			bibtex = BibtexEntryType.BOOK;
+		else if(msbib.equals("BookSection"))
+			bibtex = BibtexEntryType.INBOOK;
+		else if(msbib.equals("JournalArticle"))
+			bibtex = BibtexEntryType.ARTICLE;
+		else if(msbib.equals("ArticleInAPeriodical"))
+			bibtex = BibtexEntryType.ARTICLE;
+		else if(msbib.equals("ConferenceProceedings"))
+			bibtex = BibtexEntryType.CONFERENCE;
+		else if(msbib.equals("Report"))
+			bibtex = BibtexEntryType.TECHREPORT;
+		else if(msbib.equals("InternetSite"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("DocumentFromInternetSite"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("DocumentFromInternetSite"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("ElectronicSource"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Art"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("SoundRecording"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Performance"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Film"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Interview"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Patent"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Case"))
+			bibtex = BibtexEntryType.OTHER;
+		else if(msbib.equals("Misc"))
+			bibtex = BibtexEntryType.MISC;
+		else
+			bibtex = BibtexEntryType.MISC;
+
+		return bibtex;
+	}
+	public BibtexEntry getBibtexRepresentation() {		
+//		BibtexEntry entry = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, 
+//				Globals.getEntryType(mapMSBibToBibtexTypeString(sourceType)));
+
+//		BibtexEntry entry = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, 
+//				mapMSBibToBibtexType(sourceType));
+
+		BibtexEntry entry = null;
+		if(tag == null)
+			entry = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, 
+					mapMSBibToBibtexType(sourceType));
+		else
+			entry = new BibtexEntry(tag, 
+					mapMSBibToBibtexType(sourceType)); // id assumes an existing database so don't
+		
+
+		// Todo: add check for BibTexEntry types
+//		BibtexEntry entry = new BibtexEntry();
+//		if(sourceType.equals("Book"))
+//			entry.setType(BibtexEntryType.BOOK);
+//		else if(sourceType.equals("BookSection"))
+//			entry.setType(BibtexEntryType.INBOOK);
+//		else if(sourceType.equals("JournalArticle"))
+//			entry.setType(BibtexEntryType.ARTICLE);
+//		else if(sourceType.equals("ArticleInAPeriodical"))
+//			entry.setType(BibtexEntryType.ARTICLE);
+//		else if(sourceType.equals("ConferenceProceedings"))
+//			entry.setType(BibtexEntryType.CONFERENCE);
+//		else if(sourceType.equals("Report"))
+//			entry.setType(BibtexEntryType.TECHREPORT);
+//		else if(sourceType.equals("InternetSite"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("DocumentFromInternetSite"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("DocumentFromInternetSite"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("ElectronicSource"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Art"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("SoundRecording"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Performance"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Film"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Interview"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Patent"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Case"))
+//			entry.setType(BibtexEntryType.OTHER);
+//		else if(sourceType.equals("Misc"))
+//			entry.setType(BibtexEntryType.MISC);
+//		else
+//			entry.setType(BibtexEntryType.MISC);
+
+		HashMap<String, String> hm = new HashMap<String, String>();
+		
+		if(tag != null)
+			hm.put("bibtexkey",tag);
+//		if(GUID != null)
+//			hm.put("GUID",GUID);
+		if(LCID >= 0)
+			hm.put("language",getLanguage(LCID));
+		if(title != null)
+			hm.put("title",title);
+		if(year != null)
+			hm.put("year",year);
+		if(shortTitle != null)
+			hm.put(MSBIB+"shorttitle",shortTitle);
+		if(comments != null)
+			hm.put("note",comments);
+
+		addAuthor(hm,"author",authors);
+		addAuthor(hm,MSBIB+"bookauthor",bookAuthors);
+		addAuthor(hm,"editor",editors);
+		addAuthor(hm,MSBIB+"translator",translators);
+		addAuthor(hm,MSBIB+"producername",producerNames);
+		addAuthor(hm,MSBIB+"composer",composers);
+		addAuthor(hm,MSBIB+"conductor",conductors);
+		addAuthor(hm,MSBIB+"performer",performers);
+		addAuthor(hm,MSBIB+"writer",writers);
+		addAuthor(hm,MSBIB+"director",directors);
+		addAuthor(hm,MSBIB+"compiler",compilers);
+		addAuthor(hm,MSBIB+"interviewer",interviewers);
+		addAuthor(hm,MSBIB+"interviewee",interviewees);
+		addAuthor(hm,MSBIB+"inventor",inventors);
+		addAuthor(hm,MSBIB+"counsel",counsels);
+   		
+		if(pages !=null )
+			hm.put("pages",pages.toString("--"));
+		if(volume !=null )
+			hm.put("volume",volume);
+		if(numberOfVolumes !=null )
+			hm.put(MSBIB+"numberofvolume",numberOfVolumes);
+		if(edition !=null )
+			hm.put("edition",edition);
+		if(edition !=null )
+			hm.put("edition",edition);
+		parseStandardNumber(standardNumber,hm);
+
+		if(publisher !=null )
+			hm.put("publisher",publisher);
+		if(publisher !=null )
+			hm.put("publisher",publisher);
+		if(address !=null )
+			hm.put("address",address);
+		if(bookTitle !=null )
+			hm.put("booktitle",bookTitle);
+		if(chapterNumber !=null )
+			hm.put("chapter",chapterNumber);
+		if(journalName !=null )
+			hm.put("journal",journalName);
+		if(issue !=null )
+			hm.put("number",issue);
+        if(month !=null )
+            hm.put("month",month);
+		if(periodicalTitle !=null )
+			hm.put("organization",periodicalTitle);
+		if(conferenceName !=null )
+			hm.put("organization",conferenceName);
+		if(department !=null )
+			hm.put("school",department);
+		if(institution !=null )
+			hm.put("institution",institution);
+//		if(thesisType !=null )
+//			hm.put("type",thesisType);
+//		if(internetSiteTitle !=null )
+//			hm.put("title",internetSiteTitle);
+		if(dateAccessed !=null )
+			hm.put(MSBIB+"accessed",dateAccessed);
+		if(url !=null )
+			hm.put("url",url);
+		if(productionCompany !=null )
+			hm.put(MSBIB+"productioncompany",productionCompany);
+//		if(publicationTitle !=null )
+//			hm.put("title",publicationTitle);
+		if(medium !=null )
+			hm.put(MSBIB+"medium",medium);
+//		if(albumTitle !=null )
+//			hm.put("title",albumTitle);
+		if(recordingNumber !=null )
+			hm.put(MSBIB+"recordingnumber",recordingNumber);
+		if(theater !=null )
+			hm.put(MSBIB+"theater",theater);
+		if(distributor !=null )
+			hm.put(MSBIB+"distributor",distributor);
+//		if(broadcastTitle !=null )
+//			hm.put("title",broadcastTitle);
+		if(broadcaster !=null )
+			hm.put(MSBIB+"broadcaster",broadcaster);
+		if(station !=null )
+			hm.put(MSBIB+"station",station);
+		if(type !=null )
+			hm.put(MSBIB+"type",type);
+		if(patentNumber !=null )
+			hm.put(MSBIB+"patentnumber",patentNumber);
+		if(court !=null )
+			hm.put(MSBIB+"court",court);
+		if(reporter !=null )
+			hm.put(MSBIB+"reporter",reporter);
+		if(caseNumber !=null )
+			hm.put(MSBIB+"casenumber",caseNumber);
+		if(abbreviatedCaseNumber !=null )
+			hm.put(MSBIB+"abbreviatedcasenumber",abbreviatedCaseNumber);
+
+		if(bibTex_Series !=null )
+			hm.put("series",bibTex_Series);
+		if(bibTex_Abstract !=null )
+			hm.put("abstract",bibTex_Abstract);
+		if(bibTex_KeyWords !=null )
+			hm.put("keywords",bibTex_KeyWords);
+		if(bibTex_CrossRef !=null )
+			hm.put("crossref",bibTex_CrossRef);
+		if(bibTex_HowPublished !=null )
+			hm.put("howpublished",bibTex_HowPublished);
+		if(bibTex_Affiliation !=null )
+			hm.put("affiliation",bibTex_Affiliation);
+		if(bibTex_Contents !=null )
+			hm.put("contents",bibTex_Contents);
+		if(bibTex_Copyright !=null )
+			hm.put("copyright",bibTex_Copyright);
+		if(bibTex_Price !=null )
+			hm.put("price",bibTex_Price);
+		if(bibTex_Size !=null )
+			hm.put("size",bibTex_Size);
+
+		entry.setField(hm);
+		return entry;
+	}
+
+	/**
+	 * This method ensures that the output String has only
+     * valid XML unicode characters as specified by the
+     * XML 1.0 standard. For reference, please see
+     * <a href="http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char">the
+     * standard</a>. This method will return an empty
+     * String if the input is null or empty.
+     * 
+     * URL: http://cse-mjmcl.cse.bris.ac.uk/blog/2007/02/14/1171465494443.html
+     *
+     * @param in The String whose non-valid characters we want to remove.
+     * @return The in String, stripped of non-valid characters.
+     */
+    public String stripNonValidXMLCharacters(String in) {
+        StringBuffer out = new StringBuffer(); // Used to hold the output.
+        char current; // Used to reference the current character.
+
+        if (in == null || ("".equals(in))) return ""; // vacancy test.
+        for (int i = 0; i < in.length(); i++) {
+            current = in.charAt(i); // NOTE: No IndexOutOfBoundsException caught here; it should not happen.
+            if ((current == 0x9) ||
+                (current == 0xA) ||
+                (current == 0xD) ||
+                ((current >= 0x20) && (current <= 0xD7FF)) ||
+                ((current >= 0xE000) && (current <= 0xFFFD)) ||
+                ((current >= 0x10000) && (current <= 0x10FFFF)))
+                out.append(current);
+        }
+        return out.toString();
+    }
+
+	/*
+	 * render as XML
+	 * 
+	 * TODO This is untested.
+	 */
+	public String toString() {
+		StringWriter sresult = new StringWriter();
+	   	try {
+	      	 DOMSource source = new DOMSource(getDOMrepresentation());
+	      	 StreamResult result = new StreamResult(sresult);
+	      	 Transformer trans = TransformerFactory.newInstance().newTransformer();
+	      	 trans.setOutputProperty(OutputKeys.INDENT, "yes");
+	      	 trans.transform(source, result);
+	      	}
+	      	catch (Exception e) {
+	      		throw new Error(e);
+	      	}
+	      return sresult.toString();
+	}
+
+}
diff --git a/src/java/net/sf/jabref/net/Cookie.java b/src/java/net/sf/jabref/net/Cookie.java
index 639352e..a923ee4 100644
--- a/src/java/net/sf/jabref/net/Cookie.java
+++ b/src/java/net/sf/jabref/net/Cookie.java
@@ -1,139 +1,139 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.net;
-
-import java.net.*;
-import java.text.*;
-import java.util.*;
-
-public class Cookie {
-
-  String name;
-  String value;
-  URI uri;
-  String domain;
-  Date expires;
-  String path;
-
-  private static DateFormat expiresFormat1
-     = new SimpleDateFormat("E, dd MMM yyyy k:m:s 'GMT'", Locale.US);
-
-  private static DateFormat expiresFormat2
-     = new SimpleDateFormat("E, dd-MMM-yyyy k:m:s 'GMT'", Locale.US);
-
-
-  /**
-   * Construct a cookie from the URI and header fields
-   *
-   * @param uri URI for cookie
-   * @param header Set of attributes in header
-   */
-  public Cookie(URI uri, String header) {
-    String attributes[] = header.split(";");
-    String nameValue = attributes[0].trim();
-    this.uri = uri;
-    this.name =
-      nameValue.substring(0, nameValue.indexOf('='));
-    this.value =
-      nameValue.substring(nameValue.indexOf('=')+1);
-    this.path = "/";
-    this.domain = uri.getHost();
-
-    for (int i=1; i < attributes.length; i++) {
-      nameValue = attributes[i].trim();
-      int equals = nameValue.indexOf('=');
-      if (equals == -1) {
-        continue;
-      }
-      String name = nameValue.substring(0, equals);
-      String value = nameValue.substring(equals+1);
-      if (name.equalsIgnoreCase("domain")) {
-        String uriDomain = uri.getHost();
-        if (uriDomain.equals(value)) {
-          this.domain = value;
-        } else {
-          if (!value.startsWith(".")) {
-            value = "." + value;
-          }
-          uriDomain = uriDomain.substring(
-            uriDomain.indexOf('.'));
-          if (!uriDomain.equals(value) && !uriDomain.endsWith(value)
-                  && !value.endsWith(uriDomain)) {
-            throw new IllegalArgumentException("Trying to set foreign cookie");
-          }
-          this.domain = value;
-        }
-      } else if (name.equalsIgnoreCase("path")) {
-        this.path = value;
-      } else if (name.equalsIgnoreCase("expires")) {
-        try {
-          this.expires = expiresFormat1.parse(value);
-        } catch (ParseException e) {
-          try {
-            this.expires = expiresFormat2.parse(value);
-          } catch (ParseException e2) {
-            throw new IllegalArgumentException(
-              "Bad date format in header: " + value);
-          }
-        }
-      }
-    }
-  }
-
-  public boolean hasExpired() {
-    if (expires == null) {
-      return false;
-    }
-    Date now = new Date();
-    return now.after(expires);
-  }
-
-  public String getName() {
-    return name;
-  }
-
-  public URI getURI() {
-    return uri;
-  }
-
-  /**
-   * Check if cookie isn't expired and if URI matches,
-   * should cookie be included in response.
-   *
-   * @param uri URI to check against
-   * @return true if match, false otherwise
-   */
-  public boolean matches(URI uri) {
-
-    if (hasExpired()) {
-      return false;
-    }
-
-   String path = uri.getPath();
-    if (path == null) {
-      path = "/";
-    }
-
-    return path.startsWith(this.path);
-  }
-
-  public String toString() {
-    StringBuilder result = new StringBuilder(name);
-    result.append("=");
-    result.append(value);
-    return result.toString();
-  }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.net;
+
+import java.net.*;
+import java.text.*;
+import java.util.*;
+
+public class Cookie {
+
+  String name;
+  String value;
+  URI uri;
+  String domain;
+  Date expires;
+  String path;
+
+  private static DateFormat expiresFormat1
+     = new SimpleDateFormat("E, dd MMM yyyy k:m:s 'GMT'", Locale.US);
+
+  private static DateFormat expiresFormat2
+     = new SimpleDateFormat("E, dd-MMM-yyyy k:m:s 'GMT'", Locale.US);
+
+
+  /**
+   * Construct a cookie from the URI and header fields
+   *
+   * @param uri URI for cookie
+   * @param header Set of attributes in header
+   */
+  public Cookie(URI uri, String header) {
+    String attributes[] = header.split(";");
+    String nameValue = attributes[0].trim();
+    this.uri = uri;
+    this.name =
+      nameValue.substring(0, nameValue.indexOf('='));
+    this.value =
+      nameValue.substring(nameValue.indexOf('=')+1);
+    this.path = "/";
+    this.domain = uri.getHost();
+
+    for (int i=1; i < attributes.length; i++) {
+      nameValue = attributes[i].trim();
+      int equals = nameValue.indexOf('=');
+      if (equals == -1) {
+        continue;
+      }
+      String name = nameValue.substring(0, equals);
+      String value = nameValue.substring(equals+1);
+      if (name.equalsIgnoreCase("domain")) {
+        String uriDomain = uri.getHost();
+        if (uriDomain.equals(value)) {
+          this.domain = value;
+        } else {
+          if (!value.startsWith(".")) {
+            value = "." + value;
+          }
+          uriDomain = uriDomain.substring(
+            uriDomain.indexOf('.'));
+          if (!uriDomain.equals(value) && !uriDomain.endsWith(value)
+                  && !value.endsWith(uriDomain)) {
+            throw new IllegalArgumentException("Trying to set foreign cookie");
+          }
+          this.domain = value;
+        }
+      } else if (name.equalsIgnoreCase("path")) {
+        this.path = value;
+      } else if (name.equalsIgnoreCase("expires")) {
+        try {
+          this.expires = expiresFormat1.parse(value);
+        } catch (ParseException e) {
+          try {
+            this.expires = expiresFormat2.parse(value);
+          } catch (ParseException e2) {
+            throw new IllegalArgumentException(
+              "Bad date format in header: " + value);
+          }
+        }
+      }
+    }
+  }
+
+  public boolean hasExpired() {
+    if (expires == null) {
+      return false;
+    }
+    Date now = new Date();
+    return now.after(expires);
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public URI getURI() {
+    return uri;
+  }
+
+  /**
+   * Check if cookie isn't expired and if URI matches,
+   * should cookie be included in response.
+   *
+   * @param uri URI to check against
+   * @return true if match, false otherwise
+   */
+  public boolean matches(URI uri) {
+
+    if (hasExpired()) {
+      return false;
+    }
+
+   String path = uri.getPath();
+    if (path == null) {
+      path = "/";
+    }
+
+    return path.startsWith(this.path);
+  }
+
+  public String toString() {
+    StringBuilder result = new StringBuilder(name);
+    result.append("=");
+    result.append(value);
+    return result.toString();
+  }
+}
diff --git a/src/java/net/sf/jabref/net/CookieHandlerImpl.java b/src/java/net/sf/jabref/net/CookieHandlerImpl.java
index c19d120..31b829e 100644
--- a/src/java/net/sf/jabref/net/CookieHandlerImpl.java
+++ b/src/java/net/sf/jabref/net/CookieHandlerImpl.java
@@ -1,120 +1,120 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.net;
-
-import java.net.CookieHandler;
-import java.net.URI;
-import java.util.*;
-import java.io.IOException;
-
-/**
- * 
- */
-public class CookieHandlerImpl extends CookieHandler {
-
-    // "Long" term storage for cookies, not serialized so only
-    // for current JVM instance
-    private List<Cookie> cache = new LinkedList<Cookie>();
-
-    /**
-     * Saves all applicable cookies present in the response
-     * headers into cache.
-     *
-     * @param uri             URI source of cookies
-     * @param responseHeaders Immutable map from field names to
-     *                        lists of field
-     *                        values representing the response header fields returned
-     */
-
-    public void put(
-            URI uri,
-            Map<String, List<String>> responseHeaders)
-            throws IOException {
-
-        List<String> setCookieList =
-                responseHeaders.get("Set-Cookie");
-        if (setCookieList != null) {
-            for (String item : setCookieList) {
-                Cookie cookie = new Cookie(uri, item);
-                // Remove cookie if it already exists
-                // New one will replace
-                for (Iterator<Cookie> i = cache.iterator(); i.hasNext();) {
-                    Cookie existingCookie = i.next();
-                    if (/*(cookie.getURI().equals(
-                            existingCookie.getURI()))*/
-                        (cookie.domain.equals(existingCookie.domain))
-                        &&
-                            (cookie.getName().equals(
-                                    existingCookie.getName()))) {
-                        i.remove();
-                        break;
-                    }
-                }
-                //System.out.println(cookie.getName()+" : "+cookie.domain+" : "+cookie.toString());
-
-                cache.add(cookie);
-            }
-        }
-    }
-
-    /**
-     * Gets all the applicable cookies from a cookie cache for
-     * the specified uri in the request header.
-     *
-     * @param uri            URI to send cookies to in a request
-     * @param requestHeaders Map from request header field names
-     *                       to lists of field values representing the current request
-     *                       headers
-     * @return Immutable map, with field name "Cookie" to a list
-     *         of cookies
-     */
-
-    public Map<String, List<String>> get(
-            URI uri,
-            Map<String, List<String>> requestHeaders)
-            throws IOException {
-
-        // Retrieve all the cookies for matching URI
-        // Put in comma-separated list
-        StringBuilder cookies = new StringBuilder();
-        for (Iterator<Cookie> i = cache.iterator(); i.hasNext();) {
-        //for (Cookie cookie : cache) {
-            Cookie cookie = i.next();
-            // Remove cookies that have expired
-            if (cookie.hasExpired()) {
-                i.remove();
-            } else if (cookie.matches(uri)) {
-                if (cookies.length() > 0) {
-                    cookies.append(", ");
-                }
-                cookies.append(cookie.toString());
-            }
-        }
-
-        // Map to return
-        Map<String, List<String>> cookieMap =
-                new HashMap<String, List<String>>(requestHeaders);
-
-        // Convert StringBuilder to List, store in map
-        if (cookies.length() > 0) {
-            List<String> list =
-                    Collections.singletonList(cookies.toString());
-            cookieMap.put("Cookie", list);
-
-        }
-        return Collections.unmodifiableMap(cookieMap);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.net;
+
+import java.net.CookieHandler;
+import java.net.URI;
+import java.util.*;
+import java.io.IOException;
+
+/**
+ * 
+ */
+public class CookieHandlerImpl extends CookieHandler {
+
+    // "Long" term storage for cookies, not serialized so only
+    // for current JVM instance
+    private List<Cookie> cache = new LinkedList<Cookie>();
+
+    /**
+     * Saves all applicable cookies present in the response
+     * headers into cache.
+     *
+     * @param uri             URI source of cookies
+     * @param responseHeaders Immutable map from field names to
+     *                        lists of field
+     *                        values representing the response header fields returned
+     */
+
+    public void put(
+            URI uri,
+            Map<String, List<String>> responseHeaders)
+            throws IOException {
+
+        List<String> setCookieList =
+                responseHeaders.get("Set-Cookie");
+        if (setCookieList != null) {
+            for (String item : setCookieList) {
+                Cookie cookie = new Cookie(uri, item);
+                // Remove cookie if it already exists
+                // New one will replace
+                for (Iterator<Cookie> i = cache.iterator(); i.hasNext();) {
+                    Cookie existingCookie = i.next();
+                    if (/*(cookie.getURI().equals(
+                            existingCookie.getURI()))*/
+                        (cookie.domain.equals(existingCookie.domain))
+                        &&
+                            (cookie.getName().equals(
+                                    existingCookie.getName()))) {
+                        i.remove();
+                        break;
+                    }
+                }
+                //System.out.println(cookie.getName()+" : "+cookie.domain+" : "+cookie.toString());
+
+                cache.add(cookie);
+            }
+        }
+    }
+
+    /**
+     * Gets all the applicable cookies from a cookie cache for
+     * the specified uri in the request header.
+     *
+     * @param uri            URI to send cookies to in a request
+     * @param requestHeaders Map from request header field names
+     *                       to lists of field values representing the current request
+     *                       headers
+     * @return Immutable map, with field name "Cookie" to a list
+     *         of cookies
+     */
+
+    public Map<String, List<String>> get(
+            URI uri,
+            Map<String, List<String>> requestHeaders)
+            throws IOException {
+
+        // Retrieve all the cookies for matching URI
+        // Put in comma-separated list
+        StringBuilder cookies = new StringBuilder();
+        for (Iterator<Cookie> i = cache.iterator(); i.hasNext();) {
+        //for (Cookie cookie : cache) {
+            Cookie cookie = i.next();
+            // Remove cookies that have expired
+            if (cookie.hasExpired()) {
+                i.remove();
+            } else if (cookie.matches(uri)) {
+                if (cookies.length() > 0) {
+                    cookies.append(", ");
+                }
+                cookies.append(cookie.toString());
+            }
+        }
+
+        // Map to return
+        Map<String, List<String>> cookieMap =
+                new HashMap<String, List<String>>(requestHeaders);
+
+        // Convert StringBuilder to List, store in map
+        if (cookies.length() > 0) {
+            List<String> list =
+                    Collections.singletonList(cookies.toString());
+            cookieMap.put("Cookie", list);
+
+        }
+        return Collections.unmodifiableMap(cookieMap);
+    }
+}
diff --git a/src/java/net/sf/jabref/net/URLDownload.java b/src/java/net/sf/jabref/net/URLDownload.java
index 847ad62..62cbdb4 100644
--- a/src/java/net/sf/jabref/net/URLDownload.java
+++ b/src/java/net/sf/jabref/net/URLDownload.java
@@ -1,204 +1,204 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.net;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.imports.ImportFormatReader;
-
-import java.awt.Component;
-import java.io.*;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.CookieHandler;
-
-import javax.swing.ProgressMonitorInputStream;
-
-/**
- * @author Erik Putrycz erik.putrycz-at-nrc-cnrc.gc.ca
- */
-
-public class URLDownload {  
-    
-    private URL source;
-    private URLConnection con = null;
-    private File dest;
-    private Component parent;
-    private String mimeType = null;
-    private String content = null;
-    private String encoding = null;
-
-    private CookieHandler cm;
-
-    /**
-     * URL download to a string. After construction, call download() and then getStringContent().
-     * @param _source The URL to download.
-     */
-    public URLDownload(URL _source) {
-        this.source = _source;
-        this.dest = null;
-        this.parent = null;
-
-        setCookieHandler();
-    }
-
-    /**
-     * URL download to a file. After construction, call download().
-     * @param _parent Parent component.
-     * @param _source The URL to download.
-     * @param _dest The file to download into.
-     */
-    public URLDownload(Component _parent, URL _source, File _dest) {
-        source = _source;
-        dest = _dest;
-        parent = _parent;
-
-        setCookieHandler();
-    }
-
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-
-    private void setCookieHandler() {
-        try {
-            // This should set up JabRef to receive cookies properly
-            if ((cm = CookieHandler.getDefault()) == null) {
-                cm = new CookieHandlerImpl();
-                CookieHandler.setDefault(cm);
-            }
-        } catch (SecurityException e) {
-            // Setting or getting the system default cookie handler is forbidden
-            // In this case cookie handling is not possible.
-        }
-    }
-
-    public String getMimeType() {
-        return mimeType;
-    }
-
-    public URLConnection getURLConnection() {
-        return con;
-    }
-
-    /**
-     * This method can be used after download() has been called, to get the contents
-     * of the download, provided this URLDownload was created with the constructor
-     * that takes no File argument.
-     */
-    public String getStringContent() {
-        return content;
-    }
-
-    public void openConnectionOnly() throws IOException {
-        con = source.openConnection();
-        con.setRequestProperty("User-Agent", "Jabref");
-        mimeType = con.getContentType();
-    }
-
-    public void download() throws IOException {
-
-        if (con == null) {
-            con = source.openConnection();
-            con.setRequestProperty("User-Agent", "Jabref");
-            mimeType = con.getContentType();
-        }
-        if (dest != null)
-            downloadToFile();
-        else
-            downloadToString();
-    }
-
-    protected void downloadToString() throws IOException {
-
-    	InputStream input = new BufferedInputStream(con.getInputStream());
-        Writer output = new StringWriter();
-
-        try
-          {
-            copy(input, output);
-          }
-        catch (IOException e)
-          {
-            e.printStackTrace();
-          }
-        finally
-          {
-            try
-              {
-                input.close();
-                output.close();
-              }
-            catch (Exception e)
-              {
-              }
-          }
-
-        content = output.toString();
-    }
-
-
-    protected void downloadToFile() throws IOException {
-
-    	InputStream input = new BufferedInputStream(con.getInputStream());
-        OutputStream output =  new BufferedOutputStream(new FileOutputStream(dest));
-
-        try
-          {
-            copy(input, output);
-          }
-        catch (IOException e)
-          {
-            e.printStackTrace();
-          }
-        finally
-          {
-            try
-              {
-                input.close();
-                output.close();
-              }
-            catch (Exception e)
-              {
-              }
-          }        
-    }
-
-    public void copy(InputStream in, OutputStream out) throws IOException
-      {
-        InputStream _in = new ProgressMonitorInputStream(parent, "Downloading " + source.toString(), in);
-        byte[] buffer = new byte[512];
-        while(true)
-        {
-            int bytesRead = _in.read(buffer);
-            if(bytesRead == -1) break;
-            out.write(buffer, 0, bytesRead);
-        }        
-      }
-
-    public void copy(InputStream in, Writer out) throws IOException
-      {
-        InputStream _in = new ProgressMonitorInputStream(parent, "Downloading " + source.toString(), in);
-        Reader r = encoding != null ? new InputStreamReader(_in, encoding) :
-                ImportFormatReader.getReaderDefaultEncoding(_in);
-        BufferedReader read = new BufferedReader(r);
-
-        String line;
-        while ((line = read.readLine()) != null) {
-            out.write(line);
-            out.write("\n");
-        }
-      }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.net;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.imports.ImportFormatReader;
+
+import java.awt.Component;
+import java.io.*;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.CookieHandler;
+
+import javax.swing.ProgressMonitorInputStream;
+
+/**
+ * @author Erik Putrycz erik.putrycz-at-nrc-cnrc.gc.ca
+ */
+
+public class URLDownload {  
+    
+    private URL source;
+    private URLConnection con = null;
+    private File dest;
+    private Component parent;
+    private String mimeType = null;
+    private String content = null;
+    private String encoding = null;
+
+    private CookieHandler cm;
+
+    /**
+     * URL download to a string. After construction, call download() and then getStringContent().
+     * @param _source The URL to download.
+     */
+    public URLDownload(URL _source) {
+        this.source = _source;
+        this.dest = null;
+        this.parent = null;
+
+        setCookieHandler();
+    }
+
+    /**
+     * URL download to a file. After construction, call download().
+     * @param _parent Parent component.
+     * @param _source The URL to download.
+     * @param _dest The file to download into.
+     */
+    public URLDownload(Component _parent, URL _source, File _dest) {
+        source = _source;
+        dest = _dest;
+        parent = _parent;
+
+        setCookieHandler();
+    }
+
+    public void setEncoding(String encoding) {
+        this.encoding = encoding;
+    }
+
+    private void setCookieHandler() {
+        try {
+            // This should set up JabRef to receive cookies properly
+            if ((cm = CookieHandler.getDefault()) == null) {
+                cm = new CookieHandlerImpl();
+                CookieHandler.setDefault(cm);
+            }
+        } catch (SecurityException e) {
+            // Setting or getting the system default cookie handler is forbidden
+            // In this case cookie handling is not possible.
+        }
+    }
+
+    public String getMimeType() {
+        return mimeType;
+    }
+
+    public URLConnection getURLConnection() {
+        return con;
+    }
+
+    /**
+     * This method can be used after download() has been called, to get the contents
+     * of the download, provided this URLDownload was created with the constructor
+     * that takes no File argument.
+     */
+    public String getStringContent() {
+        return content;
+    }
+
+    public void openConnectionOnly() throws IOException {
+        con = source.openConnection();
+        con.setRequestProperty("User-Agent", "Jabref");
+        mimeType = con.getContentType();
+    }
+
+    public void download() throws IOException {
+
+        if (con == null) {
+            con = source.openConnection();
+            con.setRequestProperty("User-Agent", "Jabref");
+            mimeType = con.getContentType();
+        }
+        if (dest != null)
+            downloadToFile();
+        else
+            downloadToString();
+    }
+
+    protected void downloadToString() throws IOException {
+
+    	InputStream input = new BufferedInputStream(con.getInputStream());
+        Writer output = new StringWriter();
+
+        try
+          {
+            copy(input, output);
+          }
+        catch (IOException e)
+          {
+            e.printStackTrace();
+          }
+        finally
+          {
+            try
+              {
+                input.close();
+                output.close();
+              }
+            catch (Exception e)
+              {
+              }
+          }
+
+        content = output.toString();
+    }
+
+
+    protected void downloadToFile() throws IOException {
+
+    	InputStream input = new BufferedInputStream(con.getInputStream());
+        OutputStream output =  new BufferedOutputStream(new FileOutputStream(dest));
+
+        try
+          {
+            copy(input, output);
+          }
+        catch (IOException e)
+          {
+            e.printStackTrace();
+          }
+        finally
+          {
+            try
+              {
+                input.close();
+                output.close();
+              }
+            catch (Exception e)
+              {
+              }
+          }        
+    }
+
+    public void copy(InputStream in, OutputStream out) throws IOException
+      {
+        InputStream _in = new ProgressMonitorInputStream(parent, "Downloading " + source.toString(), in);
+        byte[] buffer = new byte[512];
+        while(true)
+        {
+            int bytesRead = _in.read(buffer);
+            if(bytesRead == -1) break;
+            out.write(buffer, 0, bytesRead);
+        }        
+      }
+
+    public void copy(InputStream in, Writer out) throws IOException
+      {
+        InputStream _in = new ProgressMonitorInputStream(parent, "Downloading " + source.toString(), in);
+        Reader r = encoding != null ? new InputStreamReader(_in, encoding) :
+                ImportFormatReader.getReaderDefaultEncoding(_in);
+        BufferedReader read = new BufferedReader(r);
+
+        String line;
+        while ((line = read.readLine()) != null) {
+            out.write(line);
+            out.write("\n");
+        }
+      }
+}
diff --git a/src/java/net/sf/jabref/oo/AdvancedCiteDialog.java b/src/java/net/sf/jabref/oo/AdvancedCiteDialog.java
index 152f028..6b332d1 100644
--- a/src/java/net/sf/jabref/oo/AdvancedCiteDialog.java
+++ b/src/java/net/sf/jabref/oo/AdvancedCiteDialog.java
@@ -1,124 +1,124 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-
-import javax.swing.*;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-
-/**
- * Dialog for adding citation with page number info.
- */
-public class AdvancedCiteDialog {
-
-    static boolean defaultInPar = true;
-    boolean okPressed = false;
-    JDialog diag;
-    JRadioButton inPar = new JRadioButton(Globals.lang("Cite selected entries")),
-        inText = new JRadioButton(Globals.lang("Cite selected entries with in-text citation"));
-    JTextField pageInfo = new JTextField(15);
-    JButton ok = new JButton(Globals.lang("Ok")),
-        cancel = new JButton(Globals.lang("Cancel"));
-
-    public AdvancedCiteDialog(JabRefFrame parent) {
-        diag = new JDialog(parent, Globals.lang("Cite special"), true);
-        ButtonGroup bg = new ButtonGroup();
-        bg.add(inPar);
-        bg.add(inText);
-        if (defaultInPar)
-            inPar.setSelected(true);
-        else
-            inText.setSelected(true);
-        
-        inPar.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent changeEvent) {
-                defaultInPar = inPar.isSelected();
-            }
-        });
-        
-        DefaultFormBuilder b = new DefaultFormBuilder
-                (new FormLayout("left:pref, 4dlu, fill:pref", ""));
-        b.append(inPar, 3);
-        b.nextLine();
-        b.append(inText, 3);
-        b.nextLine();
-        b.append(Globals.lang("Extra information (e.g. page number)")+":");
-        b.append(pageInfo);
-
-        b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        diag.getContentPane().add(b.getPanel(), BorderLayout.CENTER);
-
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-
-        diag.pack();
-
-        Action okAction = new AbstractAction() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                okPressed = true;
-                diag.dispose();
-            }
-        };
-        ok.addActionListener(okAction);
-        pageInfo.addActionListener(okAction);
-        inPar.addActionListener(okAction);
-        inText.addActionListener(okAction);
-        Action cancelAction = new AbstractAction() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                okPressed = false;
-                diag.dispose();
-            }
-        };
-        cancel.addActionListener(cancelAction);
-        b.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
-                .put(Globals.prefs.getKey("Close dialog"), "close");
-        b.getPanel().getActionMap().put("close", cancelAction);
-        
-    }
-
-    public void showDialog() {
-        diag.setLocationRelativeTo(diag.getParent());
-        diag.setVisible(true);
-    }
-
-    public boolean cancelled() {
-        return !okPressed;
-    }
-
-    public String getPageInfo() {
-        return pageInfo.getText().trim();
-    }
-
-    public boolean isInParenthesisCite() {
-        return inPar.isSelected();
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+/**
+ * Dialog for adding citation with page number info.
+ */
+public class AdvancedCiteDialog {
+
+    static boolean defaultInPar = true;
+    boolean okPressed = false;
+    JDialog diag;
+    JRadioButton inPar = new JRadioButton(Globals.lang("Cite selected entries")),
+        inText = new JRadioButton(Globals.lang("Cite selected entries with in-text citation"));
+    JTextField pageInfo = new JTextField(15);
+    JButton ok = new JButton(Globals.lang("Ok")),
+        cancel = new JButton(Globals.lang("Cancel"));
+
+    public AdvancedCiteDialog(JabRefFrame parent) {
+        diag = new JDialog(parent, Globals.lang("Cite special"), true);
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(inPar);
+        bg.add(inText);
+        if (defaultInPar)
+            inPar.setSelected(true);
+        else
+            inText.setSelected(true);
+        
+        inPar.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent changeEvent) {
+                defaultInPar = inPar.isSelected();
+            }
+        });
+        
+        DefaultFormBuilder b = new DefaultFormBuilder
+                (new FormLayout("left:pref, 4dlu, fill:pref", ""));
+        b.append(inPar, 3);
+        b.nextLine();
+        b.append(inText, 3);
+        b.nextLine();
+        b.append(Globals.lang("Extra information (e.g. page number)")+":");
+        b.append(pageInfo);
+
+        b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        diag.getContentPane().add(b.getPanel(), BorderLayout.CENTER);
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+
+        diag.pack();
+
+        Action okAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                okPressed = true;
+                diag.dispose();
+            }
+        };
+        ok.addActionListener(okAction);
+        pageInfo.addActionListener(okAction);
+        inPar.addActionListener(okAction);
+        inText.addActionListener(okAction);
+        Action cancelAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                okPressed = false;
+                diag.dispose();
+            }
+        };
+        cancel.addActionListener(cancelAction);
+        b.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
+                .put(Globals.prefs.getKey("Close dialog"), "close");
+        b.getPanel().getActionMap().put("close", cancelAction);
+        
+    }
+
+    public void showDialog() {
+        diag.setLocationRelativeTo(diag.getParent());
+        diag.setVisible(true);
+    }
+
+    public boolean cancelled() {
+        return !okPressed;
+    }
+
+    public String getPageInfo() {
+        return pageInfo.getText().trim();
+    }
+
+    public boolean isInParenthesisCite() {
+        return inPar.isSelected();
+    }
+}
diff --git a/src/java/net/sf/jabref/oo/AlphanumericComparator.java b/src/java/net/sf/jabref/oo/AlphanumericComparator.java
old mode 100755
new mode 100644
index c3fbb8b..baf7fed
--- a/src/java/net/sf/jabref/oo/AlphanumericComparator.java
+++ b/src/java/net/sf/jabref/oo/AlphanumericComparator.java
@@ -1,73 +1,73 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.FieldComparator;
-
-import java.util.Comparator;
-
-/**
- * Comparator for sorting bibliography entries.
- *
- * TODO: is it sufficient with a hardcoded sort algorithm for the bibliography?
- */
-public class AlphanumericComparator implements Comparator<BibtexEntry> {
-
-    FieldComparator authComp = new FieldComparator("author"),
-        editorComp = new FieldComparator("editor"),
-        yearComp = new FieldComparator("year"),
-        titleComp = new FieldComparator("title");
-
-    public AlphanumericComparator() {
-
-    }
-
-    public int compare(BibtexEntry o1, BibtexEntry o2) {
-        // Author as first criterion:
-        int comp = authComp.compare(o1, o2);
-        if (comp != 0)
-            return comp;
-        // Editor as second criterion:
-        comp = editorComp.compare(o1, o2);
-        if (comp != 0)
-            return comp;
-        // Year as next criterion:
-        comp = yearComp.compare(o1, o2);
-        if (comp != 0)
-            return comp;
-        // Title as next criterion:
-        comp = titleComp.compare(o1, o2);
-        if (comp != 0)
-            return comp;
-        // Bibtex key as next criterion:
-        return compare(o1.getCiteKey(), o2.getCiteKey());
-
-
-    }
-
-    private int compare(String k1, String k2) {
-        if (k1 != null) {
-            if (k2 != null)
-                return k1.compareTo(k2);
-            else
-                return 1;
-        }
-        else if (k2 != null)
-            return -1;
-        else return 0;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.FieldComparator;
+
+import java.util.Comparator;
+
+/**
+ * Comparator for sorting bibliography entries.
+ *
+ * TODO: is it sufficient with a hardcoded sort algorithm for the bibliography?
+ */
+public class AlphanumericComparator implements Comparator<BibtexEntry> {
+
+    FieldComparator authComp = new FieldComparator("author"),
+        editorComp = new FieldComparator("editor"),
+        yearComp = new FieldComparator("year"),
+        titleComp = new FieldComparator("title");
+
+    public AlphanumericComparator() {
+
+    }
+
+    public int compare(BibtexEntry o1, BibtexEntry o2) {
+        // Author as first criterion:
+        int comp = authComp.compare(o1, o2);
+        if (comp != 0)
+            return comp;
+        // Editor as second criterion:
+        comp = editorComp.compare(o1, o2);
+        if (comp != 0)
+            return comp;
+        // Year as next criterion:
+        comp = yearComp.compare(o1, o2);
+        if (comp != 0)
+            return comp;
+        // Title as next criterion:
+        comp = titleComp.compare(o1, o2);
+        if (comp != 0)
+            return comp;
+        // Bibtex key as next criterion:
+        return compare(o1.getCiteKey(), o2.getCiteKey());
+
+
+    }
+
+    private int compare(String k1, String k2) {
+        if (k1 != null) {
+            if (k2 != null)
+                return k1.compareTo(k2);
+            else
+                return 1;
+        }
+        else if (k2 != null)
+            return -1;
+        else return 0;
+    }
+}
diff --git a/src/java/net/sf/jabref/oo/AutoDetectPaths.java b/src/java/net/sf/jabref/oo/AutoDetectPaths.java
old mode 100755
new mode 100644
index c546179..ccde06e
--- a/src/java/net/sf/jabref/oo/AutoDetectPaths.java
+++ b/src/java/net/sf/jabref/oo/AutoDetectPaths.java
@@ -1,360 +1,360 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.AbstractWorker;
-
-import javax.swing.*;
-import java.io.File;
-import java.io.FileFilter;
-import java.awt.*;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.util.*;
-import java.util.List;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * Tools for automatically detecting jar and executable paths to OpenOffice.
- */
-public class AutoDetectPaths extends AbstractWorker {
-
-    boolean foundPaths = false;
-    boolean fileSearchCancelled = false;
-    JDialog prog;
-    private JDialog parent;
-
-    public AutoDetectPaths(JDialog parent) {
-        this.parent = parent;
-    }
-
-    public boolean runAutodetection() {
-        try {
-            if (checkAutoDetectedPaths())
-                return true;
-            init();
-            getWorker().run();
-            update();
-            return foundPaths;
-        } catch (Throwable e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    public void run() {
-        foundPaths = autoDetectPaths();
-    }
-
-    public boolean getResult() {
-        return foundPaths;
-    }
-
-    public boolean cancelled() {
-        return fileSearchCancelled;
-    }
-
-    public void init() throws Throwable {
-        prog = showProgressDialog(parent, Globals.lang("Autodetecting paths..."),
-            Globals.lang("Please wait..."), true);
-    }
-
-    public void update() {
-        prog.dispose();
-    }
-
-    public boolean autoDetectPaths() {
-
-        if (Globals.ON_WIN) {
-            List<File> progFiles = findProgramFilesDir();
-            File sOffice = null;
-            if (fileSearchCancelled)
-                return false;
-            for (File dir : progFiles) {
-                sOffice = findFileDir(dir, "soffice.exe");
-                if (sOffice != null)
-                    break;
-            }
-            if (sOffice == null) {
-                JOptionPane.showMessageDialog(parent, Globals.lang("Unable to autodetect OpenOffice installation. Please choose the installation directory manually."),
-                        Globals.lang("Could not find OpenOffice installation"), JOptionPane.INFORMATION_MESSAGE);
-                JFileChooser jfc = new JFileChooser(new File("C:\\"));
-                jfc.setDialogType(JFileChooser.OPEN_DIALOG);
-                jfc.setFileFilter(new javax.swing.filechooser.FileFilter() {
-                    public boolean accept(File file) {
-                        return file.isDirectory();
-                    }
-
-                    public String getDescription() {
-                        return Globals.lang("Directories");
-                    }
-                });
-                jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
-                jfc.showOpenDialog(parent);
-                if (jfc.getSelectedFile() != null)
-                    sOffice = jfc.getSelectedFile();
-            }
-            if (sOffice == null)
-                return false;
-
-            Globals.prefs.put("ooExecutablePath", new File(sOffice, "soffice.exe").getPath());
-            File unoil = findFileDir(sOffice.getParentFile(), "unoil.jar");
-            if (fileSearchCancelled)
-                return false;
-            File jurt = findFileDir(sOffice.getParentFile(), "jurt.jar");
-            if (fileSearchCancelled)
-                return false;
-            if ((unoil != null) && (jurt != null)) {
-                Globals.prefs.put("ooUnoilPath", unoil.getPath());
-                Globals.prefs.put("ooJurtPath", jurt.getPath());
-                return true;
-            }
-            else return false;
-
-        }
-        else if (Globals.ON_MAC) {
-            File rootDir = new File("/Applications");
-            File[] files = rootDir.listFiles();
-            for (int i = 0; i < files.length; i++) {
-                File file = files[i];
-                if (file.isDirectory() && file.getName().equals("OpenOffice.org.app")) {
-                    rootDir = file;
-                    //System.out.println("Setting starting dir to: "+file.getPath());
-                    break;
-                }
-            }
-            //System.out.println("Searching for soffice.bin");
-            File sOffice = findFileDir(rootDir, "soffice.bin");
-            //System.out.println("Found: "+(sOffice != null ? sOffice.getPath() : "-"));
-            if (fileSearchCancelled)
-                return false;
-            if (sOffice != null) {
-                Globals.prefs.put("ooExecutablePath", new File(sOffice, "soffice.bin").getPath());
-                //System.out.println("Searching for unoil.jar");
-                File unoil = findFileDir(rootDir, "unoil.jar");
-                //System.out.println("Found: "+(unoil != null ? unoil.getPath(): "-"));
-                if (fileSearchCancelled)
-                    return false;
-                //System.out.println("Searching for jurt.jar");
-                File jurt = findFileDir(rootDir, "jurt.jar");
-                //System.out.println("Found: "+(jurt != null ? jurt.getPath(): "-"));
-                if (fileSearchCancelled)
-                    return false;
-                if ((unoil != null) && (jurt != null)) {
-                    Globals.prefs.put("ooUnoilPath", unoil.getPath());
-                    Globals.prefs.put("ooJurtPath", jurt.getPath());
-                    return true;
-                }
-                else return false;
-            }
-            else return false;
-        }
-        else {
-            // Linux:
-            String usrRoot = "/usr/lib";
-            File inUsr = findFileDir(new File("/usr/lib"), "soffice");
-            if (fileSearchCancelled)
-                return false;
-            if (inUsr == null) {
-                inUsr = findFileDir(new File("/usr/lib64"), "soffice");
-                if (inUsr != null) usrRoot = "/usr/lib64";
-            }
-
-            if (fileSearchCancelled)
-                return false;
-            File inOpt = findFileDir(new File("/opt"), "soffice");
-            if (fileSearchCancelled)
-                return false;
-            if ((inUsr != null) && (inOpt == null)) {
-                Globals.prefs.put("ooExecutablePath", new File(inUsr, "soffice.bin").getPath());
-                File unoil = findFileDir(new File(usrRoot), "unoil.jar");
-                if (fileSearchCancelled)
-                    return false;
-                File jurt = findFileDir(new File(usrRoot), "jurt.jar");
-                if (fileSearchCancelled)
-                    return false;
-                if ((unoil != null) && (jurt != null)) {
-                    Globals.prefs.put("ooUnoilPath", unoil.getPath());
-                    Globals.prefs.put("ooJurtPath", jurt.getPath());
-                    return true;
-                }
-                else return false;
-            }
-            else if ((inOpt != null) && (inUsr == null)) {
-                Globals.prefs.put("ooExecutablePath", new File(inOpt, "soffice.bin").getPath());
-                File unoil = findFileDir(new File("/opt"), "unoil.jar");
-                File jurt = findFileDir(new File("/opt"), "jurt.jar");
-                if ((unoil != null) && (jurt != null)) {
-                    Globals.prefs.put("ooUnoilPath", unoil.getPath());
-                    Globals.prefs.put("ooJurtPath", jurt.getPath());
-                    return true;
-                }
-                else return false;
-            }
-            else if (inOpt != null) { // Found both
-                JRadioButton optRB = new JRadioButton(inOpt.getPath(), true);
-                JRadioButton usrRB = new JRadioButton(inUsr.getPath(), false);
-                ButtonGroup bg = new ButtonGroup();
-                bg.add(optRB);
-                bg.add(usrRB);
-                DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout("left:pref", ""));
-                b.append(Globals.lang("Found more than one OpenOffice executable. Please choose which one to connect to:"));
-                b.append(optRB);
-                b.append(usrRB);
-                int answer = JOptionPane.showConfirmDialog(null, b.getPanel(), Globals.lang("Choose OpenOffice executable"),
-                        JOptionPane.OK_CANCEL_OPTION);
-                if (answer == JOptionPane.CANCEL_OPTION)
-                    return false;
-                else {
-                    if (optRB.isSelected()) {
-                        Globals.prefs.put("ooExecutablePath", new File(inOpt, "soffice.bin").getPath());
-                        File unoil = findFileDir(new File("/opt"), "unoil.jar");
-                        if (fileSearchCancelled)
-                            return false;
-                        File jurt = findFileDir(new File("/opt"), "jurt.jar");
-                        if (fileSearchCancelled)
-                            return false;
-                        if ((unoil != null) && (jurt != null)) {
-                            Globals.prefs.put("ooUnoilPath", unoil.getPath());
-                            Globals.prefs.put("ooJurtPath", jurt.getPath());
-                            return true;
-                        }
-                        else return false;
-                    }
-                    else {
-                        Globals.prefs.put("ooExecutablePath", new File(inUsr, "soffice.bin").getPath());
-                        File unoil = findFileDir(new File(usrRoot), "unoil.jar");
-                        if (fileSearchCancelled)
-                            return false;
-                        File jurt = findFileDir(new File(usrRoot), "jurt.jar");
-                        if (fileSearchCancelled)
-                            return false;
-                        if ((unoil != null) && (jurt != null)) {
-                            Globals.prefs.put("ooUnoilPath", unoil.getPath());
-                            Globals.prefs.put("ooJurtPath", jurt.getPath());
-                            return true;
-                        }
-                        else return false;
-                    }
-
-                }
-            }
-            else return false;
-        }
-
-
-    }
-
-    /**
-     * Search for Program files directory.
-     * @return the File pointing to the Program files directory, or null if not found.
-     *   Since we are not including a library for Windows integration, this method can't
-     *   find the Program files dir in localized Windows installations.
-     */
-    private static java.util.List<File> findProgramFilesDir() {
-        List<File> dirList = new ArrayList<File>();
-        File root = new File("C:\\");
-        File[] dirs = root.listFiles(new FileFilter() {
-            public boolean accept(File file) {
-                return file.isDirectory();
-            }
-        });
-        for (int i = 0; i < dirs.length; i++) {
-            File dir = dirs[i];
-            if (dir.getName().toLowerCase().equals("program files"))
-                dirList.add(dir);
-            else if (dir.getName().toLowerCase().equals("program files (x86)"))
-                dirList.add(dir);
-        }
-        return dirList;
-    }
-
-    public static boolean checkAutoDetectedPaths() {
-
-        if (Globals.prefs.hasKey("ooUnoilPath") && Globals.prefs.hasKey("ooJurtPath")
-                && Globals.prefs.hasKey("ooExecutablePath")) {
-            if (new File(Globals.prefs.get("ooUnoilPath"), "unoil.jar").exists()
-                && new File(Globals.prefs.get("ooJurtPath"), "jurt.jar").exists()
-                && new File(Globals.prefs.get("ooExecutablePath")).exists()) {
-                return true;
-            }
-            else {
-                return false;
-            }
-        }
-        else return false;
-    }
-
-    /**
-     * Search for a file, starting at the given directory.
-     * @param startDir The starting point.
-     * @param filename The name of the file to search for.
-     * @return The directory where the file was first found, or null if not found.
-     */
-    public File findFileDir(File startDir, String filename) {
-        if (fileSearchCancelled)
-            return null;
-        File[] files = startDir.listFiles();
-        if (files == null)
-            return null;
-        File result = null;
-        for (int i=0; i<files.length; i++) {
-            if (fileSearchCancelled)
-                return null;
-            if (files[i].isDirectory()) {
-                result = findFileDir(files[i], filename);
-                if (result != null)
-                    break;
-            }
-            else if (files[i].getName().equals(filename)) {
-                result = startDir;
-                break;
-            }
-        }
-        return result;
-    }
-
-    public JDialog showProgressDialog(JDialog parent, String title, String message, boolean includeCancelButton) {
-        fileSearchCancelled = false;
-        final JDialog prog;
-        JProgressBar bar = new JProgressBar(JProgressBar.HORIZONTAL);
-        JButton cancel = new JButton(Globals.lang("Cancel"));
-        cancel.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                fileSearchCancelled = true;
-                ((JButton)event.getSource()).setEnabled(false);
-            }
-        });
-        prog = new JDialog(parent, title, false);
-        bar.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
-        bar.setIndeterminate(true);
-        if (includeCancelButton)
-            prog.add(cancel, BorderLayout.SOUTH);
-        prog.add(new JLabel(message), BorderLayout.NORTH);
-        prog.add(bar, BorderLayout.CENTER);
-        prog.pack();
-        prog.setLocationRelativeTo(null);//parent);
-        //SwingUtilities.invokeLater(new Runnable() {
-        //    public void run() {
-                prog.setVisible(true);
-        //    }
-        //});
-        return prog;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.AbstractWorker;
+
+import javax.swing.*;
+import java.io.File;
+import java.io.FileFilter;
+import java.awt.*;
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+import java.util.*;
+import java.util.List;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Tools for automatically detecting jar and executable paths to OpenOffice.
+ */
+public class AutoDetectPaths extends AbstractWorker {
+
+    boolean foundPaths = false;
+    boolean fileSearchCancelled = false;
+    JDialog prog;
+    private JDialog parent;
+
+    public AutoDetectPaths(JDialog parent) {
+        this.parent = parent;
+    }
+
+    public boolean runAutodetection() {
+        try {
+            if (checkAutoDetectedPaths())
+                return true;
+            init();
+            getWorker().run();
+            update();
+            return foundPaths;
+        } catch (Throwable e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    public void run() {
+        foundPaths = autoDetectPaths();
+    }
+
+    public boolean getResult() {
+        return foundPaths;
+    }
+
+    public boolean cancelled() {
+        return fileSearchCancelled;
+    }
+
+    public void init() throws Throwable {
+        prog = showProgressDialog(parent, Globals.lang("Autodetecting paths..."),
+            Globals.lang("Please wait..."), true);
+    }
+
+    public void update() {
+        prog.dispose();
+    }
+
+    public boolean autoDetectPaths() {
+
+        if (Globals.ON_WIN) {
+            List<File> progFiles = findProgramFilesDir();
+            File sOffice = null;
+            if (fileSearchCancelled)
+                return false;
+            for (File dir : progFiles) {
+                sOffice = findFileDir(dir, "soffice.exe");
+                if (sOffice != null)
+                    break;
+            }
+            if (sOffice == null) {
+                JOptionPane.showMessageDialog(parent, Globals.lang("Unable to autodetect OpenOffice installation. Please choose the installation directory manually."),
+                        Globals.lang("Could not find OpenOffice installation"), JOptionPane.INFORMATION_MESSAGE);
+                JFileChooser jfc = new JFileChooser(new File("C:\\"));
+                jfc.setDialogType(JFileChooser.OPEN_DIALOG);
+                jfc.setFileFilter(new javax.swing.filechooser.FileFilter() {
+                    public boolean accept(File file) {
+                        return file.isDirectory();
+                    }
+
+                    public String getDescription() {
+                        return Globals.lang("Directories");
+                    }
+                });
+                jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+                jfc.showOpenDialog(parent);
+                if (jfc.getSelectedFile() != null)
+                    sOffice = jfc.getSelectedFile();
+            }
+            if (sOffice == null)
+                return false;
+
+            Globals.prefs.put("ooExecutablePath", new File(sOffice, "soffice.exe").getPath());
+            File unoil = findFileDir(sOffice.getParentFile(), "unoil.jar");
+            if (fileSearchCancelled)
+                return false;
+            File jurt = findFileDir(sOffice.getParentFile(), "jurt.jar");
+            if (fileSearchCancelled)
+                return false;
+            if ((unoil != null) && (jurt != null)) {
+                Globals.prefs.put("ooUnoilPath", unoil.getPath());
+                Globals.prefs.put("ooJurtPath", jurt.getPath());
+                return true;
+            }
+            else return false;
+
+        }
+        else if (Globals.ON_MAC) {
+            File rootDir = new File("/Applications");
+            File[] files = rootDir.listFiles();
+            for (int i = 0; i < files.length; i++) {
+                File file = files[i];
+                if (file.isDirectory() && file.getName().equals("OpenOffice.org.app")) {
+                    rootDir = file;
+                    //System.out.println("Setting starting dir to: "+file.getPath());
+                    break;
+                }
+            }
+            //System.out.println("Searching for soffice.bin");
+            File sOffice = findFileDir(rootDir, "soffice.bin");
+            //System.out.println("Found: "+(sOffice != null ? sOffice.getPath() : "-"));
+            if (fileSearchCancelled)
+                return false;
+            if (sOffice != null) {
+                Globals.prefs.put("ooExecutablePath", new File(sOffice, "soffice.bin").getPath());
+                //System.out.println("Searching for unoil.jar");
+                File unoil = findFileDir(rootDir, "unoil.jar");
+                //System.out.println("Found: "+(unoil != null ? unoil.getPath(): "-"));
+                if (fileSearchCancelled)
+                    return false;
+                //System.out.println("Searching for jurt.jar");
+                File jurt = findFileDir(rootDir, "jurt.jar");
+                //System.out.println("Found: "+(jurt != null ? jurt.getPath(): "-"));
+                if (fileSearchCancelled)
+                    return false;
+                if ((unoil != null) && (jurt != null)) {
+                    Globals.prefs.put("ooUnoilPath", unoil.getPath());
+                    Globals.prefs.put("ooJurtPath", jurt.getPath());
+                    return true;
+                }
+                else return false;
+            }
+            else return false;
+        }
+        else {
+            // Linux:
+            String usrRoot = "/usr/lib";
+            File inUsr = findFileDir(new File("/usr/lib"), "soffice");
+            if (fileSearchCancelled)
+                return false;
+            if (inUsr == null) {
+                inUsr = findFileDir(new File("/usr/lib64"), "soffice");
+                if (inUsr != null) usrRoot = "/usr/lib64";
+            }
+
+            if (fileSearchCancelled)
+                return false;
+            File inOpt = findFileDir(new File("/opt"), "soffice");
+            if (fileSearchCancelled)
+                return false;
+            if ((inUsr != null) && (inOpt == null)) {
+                Globals.prefs.put("ooExecutablePath", new File(inUsr, "soffice.bin").getPath());
+                File unoil = findFileDir(new File(usrRoot), "unoil.jar");
+                if (fileSearchCancelled)
+                    return false;
+                File jurt = findFileDir(new File(usrRoot), "jurt.jar");
+                if (fileSearchCancelled)
+                    return false;
+                if ((unoil != null) && (jurt != null)) {
+                    Globals.prefs.put("ooUnoilPath", unoil.getPath());
+                    Globals.prefs.put("ooJurtPath", jurt.getPath());
+                    return true;
+                }
+                else return false;
+            }
+            else if ((inOpt != null) && (inUsr == null)) {
+                Globals.prefs.put("ooExecutablePath", new File(inOpt, "soffice.bin").getPath());
+                File unoil = findFileDir(new File("/opt"), "unoil.jar");
+                File jurt = findFileDir(new File("/opt"), "jurt.jar");
+                if ((unoil != null) && (jurt != null)) {
+                    Globals.prefs.put("ooUnoilPath", unoil.getPath());
+                    Globals.prefs.put("ooJurtPath", jurt.getPath());
+                    return true;
+                }
+                else return false;
+            }
+            else if (inOpt != null) { // Found both
+                JRadioButton optRB = new JRadioButton(inOpt.getPath(), true);
+                JRadioButton usrRB = new JRadioButton(inUsr.getPath(), false);
+                ButtonGroup bg = new ButtonGroup();
+                bg.add(optRB);
+                bg.add(usrRB);
+                DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout("left:pref", ""));
+                b.append(Globals.lang("Found more than one OpenOffice executable. Please choose which one to connect to:"));
+                b.append(optRB);
+                b.append(usrRB);
+                int answer = JOptionPane.showConfirmDialog(null, b.getPanel(), Globals.lang("Choose OpenOffice executable"),
+                        JOptionPane.OK_CANCEL_OPTION);
+                if (answer == JOptionPane.CANCEL_OPTION)
+                    return false;
+                else {
+                    if (optRB.isSelected()) {
+                        Globals.prefs.put("ooExecutablePath", new File(inOpt, "soffice.bin").getPath());
+                        File unoil = findFileDir(new File("/opt"), "unoil.jar");
+                        if (fileSearchCancelled)
+                            return false;
+                        File jurt = findFileDir(new File("/opt"), "jurt.jar");
+                        if (fileSearchCancelled)
+                            return false;
+                        if ((unoil != null) && (jurt != null)) {
+                            Globals.prefs.put("ooUnoilPath", unoil.getPath());
+                            Globals.prefs.put("ooJurtPath", jurt.getPath());
+                            return true;
+                        }
+                        else return false;
+                    }
+                    else {
+                        Globals.prefs.put("ooExecutablePath", new File(inUsr, "soffice.bin").getPath());
+                        File unoil = findFileDir(new File(usrRoot), "unoil.jar");
+                        if (fileSearchCancelled)
+                            return false;
+                        File jurt = findFileDir(new File(usrRoot), "jurt.jar");
+                        if (fileSearchCancelled)
+                            return false;
+                        if ((unoil != null) && (jurt != null)) {
+                            Globals.prefs.put("ooUnoilPath", unoil.getPath());
+                            Globals.prefs.put("ooJurtPath", jurt.getPath());
+                            return true;
+                        }
+                        else return false;
+                    }
+
+                }
+            }
+            else return false;
+        }
+
+
+    }
+
+    /**
+     * Search for Program files directory.
+     * @return the File pointing to the Program files directory, or null if not found.
+     *   Since we are not including a library for Windows integration, this method can't
+     *   find the Program files dir in localized Windows installations.
+     */
+    private static java.util.List<File> findProgramFilesDir() {
+        List<File> dirList = new ArrayList<File>();
+        File root = new File("C:\\");
+        File[] dirs = root.listFiles(new FileFilter() {
+            public boolean accept(File file) {
+                return file.isDirectory();
+            }
+        });
+        for (int i = 0; i < dirs.length; i++) {
+            File dir = dirs[i];
+            if (dir.getName().toLowerCase().equals("program files"))
+                dirList.add(dir);
+            else if (dir.getName().toLowerCase().equals("program files (x86)"))
+                dirList.add(dir);
+        }
+        return dirList;
+    }
+
+    public static boolean checkAutoDetectedPaths() {
+
+        if (Globals.prefs.hasKey("ooUnoilPath") && Globals.prefs.hasKey("ooJurtPath")
+                && Globals.prefs.hasKey("ooExecutablePath")) {
+            if (new File(Globals.prefs.get("ooUnoilPath"), "unoil.jar").exists()
+                && new File(Globals.prefs.get("ooJurtPath"), "jurt.jar").exists()
+                && new File(Globals.prefs.get("ooExecutablePath")).exists()) {
+                return true;
+            }
+            else {
+                return false;
+            }
+        }
+        else return false;
+    }
+
+    /**
+     * Search for a file, starting at the given directory.
+     * @param startDir The starting point.
+     * @param filename The name of the file to search for.
+     * @return The directory where the file was first found, or null if not found.
+     */
+    public File findFileDir(File startDir, String filename) {
+        if (fileSearchCancelled)
+            return null;
+        File[] files = startDir.listFiles();
+        if (files == null)
+            return null;
+        File result = null;
+        for (int i=0; i<files.length; i++) {
+            if (fileSearchCancelled)
+                return null;
+            if (files[i].isDirectory()) {
+                result = findFileDir(files[i], filename);
+                if (result != null)
+                    break;
+            }
+            else if (files[i].getName().equals(filename)) {
+                result = startDir;
+                break;
+            }
+        }
+        return result;
+    }
+
+    public JDialog showProgressDialog(JDialog parent, String title, String message, boolean includeCancelButton) {
+        fileSearchCancelled = false;
+        final JDialog prog;
+        JProgressBar bar = new JProgressBar(JProgressBar.HORIZONTAL);
+        JButton cancel = new JButton(Globals.lang("Cancel"));
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                fileSearchCancelled = true;
+                ((JButton)event.getSource()).setEnabled(false);
+            }
+        });
+        prog = new JDialog(parent, title, false);
+        bar.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+        bar.setIndeterminate(true);
+        if (includeCancelButton)
+            prog.add(cancel, BorderLayout.SOUTH);
+        prog.add(new JLabel(message), BorderLayout.NORTH);
+        prog.add(bar, BorderLayout.CENTER);
+        prog.pack();
+        prog.setLocationRelativeTo(null);//parent);
+        //SwingUtilities.invokeLater(new Runnable() {
+        //    public void run() {
+                prog.setVisible(true);
+        //    }
+        //});
+        return prog;
+    }
+}
diff --git a/src/java/net/sf/jabref/oo/BibtexEntryNotFoundException.java b/src/java/net/sf/jabref/oo/BibtexEntryNotFoundException.java
old mode 100755
new mode 100644
index 81aba1b..11a5e6d
--- a/src/java/net/sf/jabref/oo/BibtexEntryNotFoundException.java
+++ b/src/java/net/sf/jabref/oo/BibtexEntryNotFoundException.java
@@ -1,37 +1,37 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: 16-Dec-2007
- * Time: 10:37:23
- * To change this template use File | Settings | File Templates.
- */
-public class BibtexEntryNotFoundException extends Exception {
-    private String bibtexKey;
-
-    public BibtexEntryNotFoundException(String bibtexKey, String message) {
-        super(message);
-
-        this.bibtexKey = bibtexKey;
-    }
-
-    public String getBibtexKey() {
-        return bibtexKey;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: 16-Dec-2007
+ * Time: 10:37:23
+ * To change this template use File | Settings | File Templates.
+ */
+public class BibtexEntryNotFoundException extends Exception {
+    private String bibtexKey;
+
+    public BibtexEntryNotFoundException(String bibtexKey, String message) {
+        super(message);
+
+        this.bibtexKey = bibtexKey;
+    }
+
+    public String getBibtexKey() {
+        return bibtexKey;
+    }
+}
diff --git a/src/java/net/sf/jabref/oo/BstWrapper.java b/src/java/net/sf/jabref/oo/BstWrapper.java
old mode 100755
new mode 100644
index dae128b..a67c8f0
--- a/src/java/net/sf/jabref/oo/BstWrapper.java
+++ b/src/java/net/sf/jabref/oo/BstWrapper.java
@@ -1,103 +1,103 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.FormatChars;
-import net.sf.jabref.bst.VM;
-import org.antlr.runtime.RecognitionException;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- *
- * Wrapper for using JabRef's bst engine for formatting OO bibliography.
- */
-public class BstWrapper {
-
-    LayoutFormatter formatter = new FormatChars();
-    VM vm = null;
-
-    public BstWrapper() {
-
-    }
-
-    /**
-     * Set the bst file to be used for processing. This method will initiate parsing
-     * of the bst file.
-     * @param f The bst file to load.
-     * @throws IOException On IO errors.
-     * @throws RecognitionException On parsing errors.
-     */
-    public void loadBstFile(File f) throws IOException, RecognitionException {
-        vm = new VM(f);
-    }
-
-    /**
-     * Use the instructions of the loaded bst file for processing a collection of entries.
-     * @param entries The entries to process.
-     * @param database The database the entries belong to.
-     * @return A Map of the entries' bibtex keys linking to their processed strings.
-     */
-    public Map<String,String> processEntries(Collection<BibtexEntry> entries, BibtexDatabase database) {
-        // TODO: how to handle uniquefiers?
-
-        // TODO: need handling of crossrefs?
-        String result = vm.run(entries);
-        return parseResult(result);
-    }
-
-    static Pattern bibitemTag = Pattern.compile("\\\\[a-zA-Z]*item\\{.*\\}");
-
-    private Map<String,String> parseResult(String result) {
-        Map<String,String> map = new HashMap<String,String>();
-        // Look through for instances of \bibitem :
-        Matcher m =  bibitemTag.matcher(result);
-        ArrayList<Integer> indices = new ArrayList<Integer>();
-        ArrayList<Integer> endIndices = new ArrayList<Integer>();
-        ArrayList<String> keys = new ArrayList<String>();
-        while (m.find()) {
-            if (indices.size() > 0)
-                endIndices.add(m.start());
-            System.out.println(m.start()+"  "+m.end());
-            String tag = m.group();
-            String key = tag.substring(9, tag.length()-1);
-            indices.add(m.end());
-            keys.add(key);
-        }
-        int lastI = result.lastIndexOf("\\end{thebibliography}");
-        if ((lastI > 0) && (lastI > indices.get(indices.size()-1)))
-            endIndices.add(lastI);
-        for (int i=0; i<keys.size(); i++) {
-            String key = keys.get(i);
-            int index = indices.get(i);
-            int endIndex = endIndices.get(i);
-            String part = result.substring(index, endIndex);
-            map.put(key, formatter.format(part.trim().replaceAll("\\\\newblock ", " ")));
-        }
-
-        return map;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.FormatChars;
+import net.sf.jabref.bst.VM;
+import org.antlr.runtime.RecognitionException;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ *
+ * Wrapper for using JabRef's bst engine for formatting OO bibliography.
+ */
+public class BstWrapper {
+
+    LayoutFormatter formatter = new FormatChars();
+    VM vm = null;
+
+    public BstWrapper() {
+
+    }
+
+    /**
+     * Set the bst file to be used for processing. This method will initiate parsing
+     * of the bst file.
+     * @param f The bst file to load.
+     * @throws IOException On IO errors.
+     * @throws RecognitionException On parsing errors.
+     */
+    public void loadBstFile(File f) throws IOException, RecognitionException {
+        vm = new VM(f);
+    }
+
+    /**
+     * Use the instructions of the loaded bst file for processing a collection of entries.
+     * @param entries The entries to process.
+     * @param database The database the entries belong to.
+     * @return A Map of the entries' bibtex keys linking to their processed strings.
+     */
+    public Map<String,String> processEntries(Collection<BibtexEntry> entries, BibtexDatabase database) {
+        // TODO: how to handle uniquefiers?
+
+        // TODO: need handling of crossrefs?
+        String result = vm.run(entries);
+        return parseResult(result);
+    }
+
+    static Pattern bibitemTag = Pattern.compile("\\\\[a-zA-Z]*item\\{.*\\}");
+
+    private Map<String,String> parseResult(String result) {
+        Map<String,String> map = new HashMap<String,String>();
+        // Look through for instances of \bibitem :
+        Matcher m =  bibitemTag.matcher(result);
+        ArrayList<Integer> indices = new ArrayList<Integer>();
+        ArrayList<Integer> endIndices = new ArrayList<Integer>();
+        ArrayList<String> keys = new ArrayList<String>();
+        while (m.find()) {
+            if (indices.size() > 0)
+                endIndices.add(m.start());
+            System.out.println(m.start()+"  "+m.end());
+            String tag = m.group();
+            String key = tag.substring(9, tag.length()-1);
+            indices.add(m.end());
+            keys.add(key);
+        }
+        int lastI = result.lastIndexOf("\\end{thebibliography}");
+        if ((lastI > 0) && (lastI > indices.get(indices.size()-1)))
+            endIndices.add(lastI);
+        for (int i=0; i<keys.size(); i++) {
+            String key = keys.get(i);
+            int index = indices.get(i);
+            int endIndex = endIndices.get(i);
+            String part = result.substring(index, endIndex);
+            map.put(key, formatter.format(part.trim().replaceAll("\\\\newblock ", " ")));
+        }
+
+        return map;
+    }
+}
diff --git a/src/java/net/sf/jabref/oo/CitationManager.java b/src/java/net/sf/jabref/oo/CitationManager.java
index fa7c072..c9d12d6 100644
--- a/src/java/net/sf/jabref/oo/CitationManager.java
+++ b/src/java/net/sf/jabref/oo/CitationManager.java
@@ -1,260 +1,260 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import ca.odell.glazedlists.BasicEventList;
-import ca.odell.glazedlists.EventList;
-import ca.odell.glazedlists.SortedList;
-import ca.odell.glazedlists.gui.TableFormat;
-import ca.odell.glazedlists.swing.EventTableModel;
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import com.sun.star.container.XNameAccess;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.gui.FileListEntry;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.List;
-
-/**
- * Dialog for modifying existing citations.
- */
-public class CitationManager {
-
-    OOBibBase ooBase;
-    JDialog diag;
-    EventList<CitEntry> list;
-    JTable table;
-    EventTableModel tableModel;
-    JButton ok = new JButton(Globals.lang("Ok")),
-        cancel = new JButton(Globals.lang("Cancel"));
-
-    public CitationManager(final JabRefFrame frame, OOBibBase ooBase) throws Exception {
-        diag = new JDialog(frame, Globals.lang("Manage citations"), true);
-        this.ooBase = ooBase;
-
-        list = new BasicEventList<CitEntry>();
-        XNameAccess nameAccess = ooBase.getReferenceMarks();
-        String[] names = ooBase.getJabRefReferenceMarks(nameAccess);
-        for (int i=0; i<names.length; i++) {
-            String name = names[i];
-            List<String> keys = ooBase.parseRefMarkName(name);
-            list.add(new CitEntry(name, keys,
-                    "<html>..."+ooBase.getCitationContext(nameAccess, name, 30, 30, true)+"...</html>",
-                    ooBase.getCustomProperty(name)));
-        }
-        tableModel = new EventTableModel(list, new CitEntryFormat());
-        table = new JTable(tableModel);
-        diag.add(new JScrollPane(table), BorderLayout.CENTER);
-
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        diag.add(bb.getPanel(), BorderLayout.SOUTH);
-
-        diag.pack();
-        diag.setSize(700, 400);
-
-        Action okAction = new AbstractAction() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                try {
-                    storeSettings();
-                } catch (Exception ex) {
-                    ex.printStackTrace();
-                    JOptionPane.showMessageDialog(frame, Globals.lang("Problem modifying citation"));
-                }
-                diag.dispose();
-            }
-        };
-        ok.addActionListener(okAction);
-
-        Action cancelAction = new AbstractAction() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                diag.dispose();
-            }
-        };
-        cancel.addActionListener(cancelAction);
-
-        bb.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put
-                (Globals.prefs.getKey("Close dialog"), "close");
-        bb.getPanel().getActionMap().put("close", cancelAction);
-
-        table.getColumnModel().getColumn(0).setPreferredWidth(600);
-        table.getColumnModel().getColumn(1).setPreferredWidth(90);
-        table.setPreferredScrollableViewportSize(new Dimension(700, 500));
-        table.addMouseListener(new TableClickListener());
-    }
-
-    private void storeSettings() throws Exception {
-        for (CitEntry entry : list) {
-            if (entry.pageInfoChanged()) {
-                ooBase.setCustomProperty(entry.refMarkName, entry.pageInfo);
-            }
-        }
-    }
-
-    public void showDialog() {
-        diag.setLocationRelativeTo(diag.getParent());
-        diag.setVisible(true);
-    }
-
-    class CitEntry implements Comparable {
-        String refMarkName, pageInfo, keyString, context, origPageInfo;
-        List<String> keys;
-
-        public CitEntry(String refMarkName, List<String> keys, String context, String pageInfo) {
-            this.refMarkName = refMarkName;
-            this.keys = keys;
-            this.context = context;
-            this.pageInfo = pageInfo;
-            this.origPageInfo = pageInfo;
-            StringBuilder sb = new StringBuilder();
-            for (int j=0; j<keys.size(); j++) {
-                sb.append(keys.get(j));
-                if (j < keys.size()-1)
-                    sb.append(", ");
-            }
-            keyString = sb.toString();
-        }
-
-        public boolean pageInfoChanged() {
-            if (((pageInfo != null) && (origPageInfo == null))
-                || ((pageInfo == null) && (origPageInfo != null)))
-                return true;
-            if (pageInfo != null)
-                return pageInfo.compareTo(origPageInfo) != 0;
-            else return false;
-        }
-
-        public int compareTo(Object o) {
-            CitEntry other = (CitEntry)o;
-            return this.refMarkName.compareTo(other.refMarkName);
-        }
-    }
-
-    class CitEntryFormat implements TableFormat<CitEntry> {
-
-        public int getColumnCount() {
-            return 2;
-        }
-
-        public String getColumnName(int i) {
-            switch (i) {
-                case 0: return Globals.lang("Citation");
-                //case 1: return Globals.lang("Context");
-                default: return Globals.lang("Extra information");
-            }
-        }
-
-        public Object getColumnValue(CitEntry citEntry, int i) {
-            switch (i) {
-                //case 0: return citEntry.keyString;
-                case 0: return citEntry.context;
-                default: return citEntry.pageInfo != null ? citEntry.pageInfo : "";
-            }
-        }
-    }
-
-    class TableClickListener extends MouseAdapter {
-
-        public void mouseClicked(MouseEvent e) {
-            if ((e.getButton() == MouseEvent.BUTTON1) && (e.getClickCount() == 2)) {
-                int row = table.rowAtPoint(e.getPoint());
-                if (row >= 0) {
-                    SingleCitDialog scd = new SingleCitDialog(list.get(row));
-                    scd.showDialog();
-                }
-            }
-            //else if (e.isPopupTrigger())
-            //    processPopupTrigger(e);
-        }
-    }
-
-    class SingleCitDialog {
-        JDialog diag;
-        JTextField pageInfo = new JTextField(20);
-        JLabel title;
-        JButton ok = new JButton(Globals.lang("Ok")),
-                cancel = new JButton(Globals.lang("Cancel"));
-        CitEntry _entry;
-
-        public SingleCitDialog(CitEntry entry) {
-            this._entry = entry;
-            title = new JLabel(entry.context);
-            pageInfo.setText(entry.pageInfo);
-
-            diag = new JDialog(CitationManager.this.diag, Globals.lang("Citation"), true);
-
-            DefaultFormBuilder b = new DefaultFormBuilder(
-                    new FormLayout("left:pref, 4dlu, left:150dlu", ""));
-            b.append(title, 3);
-            b.nextLine();
-            b.append(Globals.lang("Extra information (e.g. page number)"));
-            b.append(pageInfo);
-            b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-            diag.getContentPane().add(b.getPanel(), BorderLayout.CENTER);
-
-            ButtonBarBuilder bb = new ButtonBarBuilder();
-            bb.addGlue();
-            bb.addButton(ok);
-            bb.addButton(cancel);
-            bb.addGlue();
-            bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-            diag.add(bb.getPanel(), BorderLayout.SOUTH);
-
-
-            Action okAction = new AbstractAction() {
-                public void actionPerformed(ActionEvent actionEvent) {
-                    if (pageInfo.getText().trim().length() > 0) {
-                        _entry.pageInfo = pageInfo.getText().trim();
-                    }
-                    else
-                        _entry.pageInfo = null;
-                    tableModel.fireTableDataChanged();
-                    diag.dispose();
-                }
-            };
-            ok.addActionListener(okAction);
-
-            Action cancelAction = new AbstractAction() {
-                public void actionPerformed(ActionEvent actionEvent) {
-                    diag.dispose();
-                }
-            };
-            cancel.addActionListener(cancelAction);
-
-            b.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put
-                    (Globals.prefs.getKey("Close dialog"), "close");
-            b.getPanel().getActionMap().put("close", cancelAction);
-
-        }
-
-        public void showDialog() {
-            diag.pack();
-            diag.setLocationRelativeTo(diag.getParent());
-            diag.setVisible(true);
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import ca.odell.glazedlists.BasicEventList;
+import ca.odell.glazedlists.EventList;
+import ca.odell.glazedlists.SortedList;
+import ca.odell.glazedlists.gui.TableFormat;
+import ca.odell.glazedlists.swing.EventTableModel;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import com.sun.star.container.XNameAccess;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.gui.FileListEntry;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.List;
+
+/**
+ * Dialog for modifying existing citations.
+ */
+public class CitationManager {
+
+    OOBibBase ooBase;
+    JDialog diag;
+    EventList<CitEntry> list;
+    JTable table;
+    EventTableModel tableModel;
+    JButton ok = new JButton(Globals.lang("Ok")),
+        cancel = new JButton(Globals.lang("Cancel"));
+
+    public CitationManager(final JabRefFrame frame, OOBibBase ooBase) throws Exception {
+        diag = new JDialog(frame, Globals.lang("Manage citations"), true);
+        this.ooBase = ooBase;
+
+        list = new BasicEventList<CitEntry>();
+        XNameAccess nameAccess = ooBase.getReferenceMarks();
+        String[] names = ooBase.getJabRefReferenceMarks(nameAccess);
+        for (int i=0; i<names.length; i++) {
+            String name = names[i];
+            List<String> keys = ooBase.parseRefMarkName(name);
+            list.add(new CitEntry(name, keys,
+                    "<html>..."+ooBase.getCitationContext(nameAccess, name, 30, 30, true)+"...</html>",
+                    ooBase.getCustomProperty(name)));
+        }
+        tableModel = new EventTableModel(list, new CitEntryFormat());
+        table = new JTable(tableModel);
+        diag.add(new JScrollPane(table), BorderLayout.CENTER);
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        diag.add(bb.getPanel(), BorderLayout.SOUTH);
+
+        diag.pack();
+        diag.setSize(700, 400);
+
+        Action okAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                try {
+                    storeSettings();
+                } catch (Exception ex) {
+                    ex.printStackTrace();
+                    JOptionPane.showMessageDialog(frame, Globals.lang("Problem modifying citation"));
+                }
+                diag.dispose();
+            }
+        };
+        ok.addActionListener(okAction);
+
+        Action cancelAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                diag.dispose();
+            }
+        };
+        cancel.addActionListener(cancelAction);
+
+        bb.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put
+                (Globals.prefs.getKey("Close dialog"), "close");
+        bb.getPanel().getActionMap().put("close", cancelAction);
+
+        table.getColumnModel().getColumn(0).setPreferredWidth(600);
+        table.getColumnModel().getColumn(1).setPreferredWidth(90);
+        table.setPreferredScrollableViewportSize(new Dimension(700, 500));
+        table.addMouseListener(new TableClickListener());
+    }
+
+    private void storeSettings() throws Exception {
+        for (CitEntry entry : list) {
+            if (entry.pageInfoChanged()) {
+                ooBase.setCustomProperty(entry.refMarkName, entry.pageInfo);
+            }
+        }
+    }
+
+    public void showDialog() {
+        diag.setLocationRelativeTo(diag.getParent());
+        diag.setVisible(true);
+    }
+
+    class CitEntry implements Comparable {
+        String refMarkName, pageInfo, keyString, context, origPageInfo;
+        List<String> keys;
+
+        public CitEntry(String refMarkName, List<String> keys, String context, String pageInfo) {
+            this.refMarkName = refMarkName;
+            this.keys = keys;
+            this.context = context;
+            this.pageInfo = pageInfo;
+            this.origPageInfo = pageInfo;
+            StringBuilder sb = new StringBuilder();
+            for (int j=0; j<keys.size(); j++) {
+                sb.append(keys.get(j));
+                if (j < keys.size()-1)
+                    sb.append(", ");
+            }
+            keyString = sb.toString();
+        }
+
+        public boolean pageInfoChanged() {
+            if (((pageInfo != null) && (origPageInfo == null))
+                || ((pageInfo == null) && (origPageInfo != null)))
+                return true;
+            if (pageInfo != null)
+                return pageInfo.compareTo(origPageInfo) != 0;
+            else return false;
+        }
+
+        public int compareTo(Object o) {
+            CitEntry other = (CitEntry)o;
+            return this.refMarkName.compareTo(other.refMarkName);
+        }
+    }
+
+    class CitEntryFormat implements TableFormat<CitEntry> {
+
+        public int getColumnCount() {
+            return 2;
+        }
+
+        public String getColumnName(int i) {
+            switch (i) {
+                case 0: return Globals.lang("Citation");
+                //case 1: return Globals.lang("Context");
+                default: return Globals.lang("Extra information");
+            }
+        }
+
+        public Object getColumnValue(CitEntry citEntry, int i) {
+            switch (i) {
+                //case 0: return citEntry.keyString;
+                case 0: return citEntry.context;
+                default: return citEntry.pageInfo != null ? citEntry.pageInfo : "";
+            }
+        }
+    }
+
+    class TableClickListener extends MouseAdapter {
+
+        public void mouseClicked(MouseEvent e) {
+            if ((e.getButton() == MouseEvent.BUTTON1) && (e.getClickCount() == 2)) {
+                int row = table.rowAtPoint(e.getPoint());
+                if (row >= 0) {
+                    SingleCitDialog scd = new SingleCitDialog(list.get(row));
+                    scd.showDialog();
+                }
+            }
+            //else if (e.isPopupTrigger())
+            //    processPopupTrigger(e);
+        }
+    }
+
+    class SingleCitDialog {
+        JDialog diag;
+        JTextField pageInfo = new JTextField(20);
+        JLabel title;
+        JButton ok = new JButton(Globals.lang("Ok")),
+                cancel = new JButton(Globals.lang("Cancel"));
+        CitEntry _entry;
+
+        public SingleCitDialog(CitEntry entry) {
+            this._entry = entry;
+            title = new JLabel(entry.context);
+            pageInfo.setText(entry.pageInfo);
+
+            diag = new JDialog(CitationManager.this.diag, Globals.lang("Citation"), true);
+
+            DefaultFormBuilder b = new DefaultFormBuilder(
+                    new FormLayout("left:pref, 4dlu, left:150dlu", ""));
+            b.append(title, 3);
+            b.nextLine();
+            b.append(Globals.lang("Extra information (e.g. page number)"));
+            b.append(pageInfo);
+            b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+            diag.getContentPane().add(b.getPanel(), BorderLayout.CENTER);
+
+            ButtonBarBuilder bb = new ButtonBarBuilder();
+            bb.addGlue();
+            bb.addButton(ok);
+            bb.addButton(cancel);
+            bb.addGlue();
+            bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+            diag.add(bb.getPanel(), BorderLayout.SOUTH);
+
+
+            Action okAction = new AbstractAction() {
+                public void actionPerformed(ActionEvent actionEvent) {
+                    if (pageInfo.getText().trim().length() > 0) {
+                        _entry.pageInfo = pageInfo.getText().trim();
+                    }
+                    else
+                        _entry.pageInfo = null;
+                    tableModel.fireTableDataChanged();
+                    diag.dispose();
+                }
+            };
+            ok.addActionListener(okAction);
+
+            Action cancelAction = new AbstractAction() {
+                public void actionPerformed(ActionEvent actionEvent) {
+                    diag.dispose();
+                }
+            };
+            cancel.addActionListener(cancelAction);
+
+            b.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put
+                    (Globals.prefs.getKey("Close dialog"), "close");
+            b.getPanel().getActionMap().put("close", cancelAction);
+
+        }
+
+        public void showDialog() {
+            diag.pack();
+            diag.setLocationRelativeTo(diag.getParent());
+            diag.setVisible(true);
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/oo/ComparableMark.java b/src/java/net/sf/jabref/oo/ComparableMark.java
index 5b51c85..902659e 100644
--- a/src/java/net/sf/jabref/oo/ComparableMark.java
+++ b/src/java/net/sf/jabref/oo/ComparableMark.java
@@ -1,48 +1,48 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import com.sun.star.awt.Point;
-
-/**
- *
- */
-public class ComparableMark implements Comparable {
-
-    String name;
-    Point position;
-
-    public ComparableMark(String name, Point position) {
-        this.name = name;
-        this.position = position;
-    }
-
-    public int compareTo(Object o) {
-        ComparableMark other = (ComparableMark)o;
-        if (position.Y != other.position.Y)
-            return position.Y-other.position.Y;
-        else
-            return position.X-other.position.X;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public Point getPosition() {
-        return position;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import com.sun.star.awt.Point;
+
+/**
+ *
+ */
+public class ComparableMark implements Comparable {
+
+    String name;
+    Point position;
+
+    public ComparableMark(String name, Point position) {
+        this.name = name;
+        this.position = position;
+    }
+
+    public int compareTo(Object o) {
+        ComparableMark other = (ComparableMark)o;
+        if (position.Y != other.position.Y)
+            return position.Y-other.position.Y;
+        else
+            return position.X-other.position.X;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Point getPosition() {
+        return position;
+    }
+}
diff --git a/src/java/net/sf/jabref/oo/ConnectionLostException.java b/src/java/net/sf/jabref/oo/ConnectionLostException.java
index 997434c..badec5d 100644
--- a/src/java/net/sf/jabref/oo/ConnectionLostException.java
+++ b/src/java/net/sf/jabref/oo/ConnectionLostException.java
@@ -1,26 +1,26 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-/**
- * This exception is used to indicate that connection to OpenOffice has been lost.
- */
-public class ConnectionLostException extends RuntimeException {
-
-    public ConnectionLostException(String s) {
-        super(s);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+/**
+ * This exception is used to indicate that connection to OpenOffice has been lost.
+ */
+public class ConnectionLostException extends RuntimeException {
+
+    public ConnectionLostException(String s) {
+        super(s);
+    }
+}
diff --git a/src/java/net/sf/jabref/oo/OOBibBase.java b/src/java/net/sf/jabref/oo/OOBibBase.java
old mode 100755
new mode 100644
index d7d4871..258dca9
--- a/src/java/net/sf/jabref/oo/OOBibBase.java
+++ b/src/java/net/sf/jabref/oo/OOBibBase.java
@@ -1,1454 +1,1454 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import com.sun.star.awt.Point;
-import com.sun.star.awt.XWindow;
-import com.sun.star.beans.XPropertyContainer;
-import com.sun.star.beans.XPropertySet;
-import com.sun.star.beans.PropertyValue;
-import com.sun.star.comp.helper.Bootstrap;
-import com.sun.star.container.*;
-import com.sun.star.container.NoSuchElementException;
-import com.sun.star.document.XDocumentPropertiesSupplier;
-import com.sun.star.frame.*;
-import com.sun.star.lang.*;
-import com.sun.star.lang.Locale;
-import com.sun.star.text.*;
-import com.sun.star.uno.Any;
-import com.sun.star.uno.Type;
-import com.sun.star.uno.UnoRuntime;
-import com.sun.star.uno.XComponentContext;
-import net.sf.jabref.*;
-import net.sf.jabref.export.layout.Layout;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Class for manipulating the Bibliography of the currently start document in OpenOffice.
- */
-public class OOBibBase {
-
-    final static String BIB_SECTION_NAME = "JR_bib";
-    final static String BIB_SECTION_END_NAME = "JR_bib_end";
-    final static String BIB_CITATION = "JR_cite";
-    public final Pattern citePattern = Pattern.compile(BIB_CITATION+"\\d*_(\\d*)_(.*)");
-
-    final static int
-        AUTHORYEAR_PAR = 1,
-        AUTHORYEAR_INTEXT = 2,
-        INVISIBLE_CIT = 3;
-
-    final static String DEFAULT_CONNECTION_STRING = "uno:socket,host=localhost,port=2002;urp;StarOffice.ServiceManager";
-    final String[] BIB_TYPES = new String[] { "ARTICLE", "BOOK", "BOOKLET", "CONFERENCE",
-            "INBOOK", "INCOLLECTION", "INPROCEEDINGS", "JOURNAL", "MANUAL", "MASTERTHESIS",
-            "MISC", "PHDTHESIS", "PROCEEDINGS", "TECHREPORT", "UNPUBLISHED", "EMAIL", "WWW",
-            "CUSTOM1", "CUSTOM2", "CUSTOM3", "CUSTOM4", "CUSTOM5" };
-
-    
-    private XMultiServiceFactory mxDocFactory = null;
-    private XTextDocument mxDoc = null;
-    private XText text = null;
-    private XDesktop xDesktop = null;
-    XTextViewCursorSupplier xViewCursorSupplier = null;
-    XComponent xCurrentComponent = null;
-    XComponentLoader xComponentLoader = null;
-    XPropertyContainer userProperties = null;
-    XPropertySet propertySet = null;
-
-    private boolean atEnd;
-    private AlphanumericComparator entryComparator = new AlphanumericComparator();
-    private YearComparator yearComparator = new YearComparator();
-
-    private HashMap<String,String> uniquefiers = new HashMap<String, String>();
-
-    private String[] sortedReferenceMarks = null;
-
-    public OOBibBase(String pathToOO, boolean atEnd) throws Exception {
-        this.atEnd = atEnd;
-        xDesktop = simpleBootstrap(pathToOO);//getDesktop();
-        selectDocument();
-    }
-
-    public boolean isConnectedToDocument() {
-        return xCurrentComponent != null;
-    }
-
-    public String getCurrentDocumentTitle() {
-        if (mxDoc != null) {
-            try {
-                return String.valueOf(OOUtil.getProperty
-                        (mxDoc.getCurrentController().getFrame(), "Title"));
-            } catch (Exception e) {
-                e.printStackTrace();
-                return null;
-            }
-        }
-        else
-            return null;
-    }
-
-    public void selectDocument() throws Exception {
-        List<XTextDocument> ls = getTextDocuments();
-        XTextDocument selected = null;
-        if (ls.size() == 0) {
-            // No text documents found.
-            throw new Exception("No Writer documents found");
-        }
-        else if (ls.size() > 1) {
-            selected = OOUtil.selectComponent(null, xDesktop, ls);
-        }
-        else
-            selected = ls.get(0);
-
-        if (selected == null) {
-            return;
-        }
-        xCurrentComponent = (XComponent) UnoRuntime.queryInterface(
-                XComponent.class, selected);
-        mxDoc = selected;
-
-        com.sun.star.text.XDocumentIndexesSupplier indexesSupp = (com.sun.star.text.XDocumentIndexesSupplier) UnoRuntime.queryInterface(
-                 com.sun.star.text.XDocumentIndexesSupplier.class, xCurrentComponent);
-
-        XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, xCurrentComponent);
-        XController xController = xModel.getCurrentController();
-        xViewCursorSupplier =
-            (com.sun.star.text.XTextViewCursorSupplier) UnoRuntime.queryInterface(
-                    com.sun.star.text.XTextViewCursorSupplier.class, xController);
-
-        // get a reference to the body text of the document
-        text = mxDoc.getText();
-
-        // Access the text document's multi service factory:
-        mxDocFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, mxDoc);
-
-
-        XDocumentPropertiesSupplier supp =
-                UnoRuntime.queryInterface(XDocumentPropertiesSupplier.class, mxDoc);
-        userProperties = supp.getDocumentProperties().getUserDefinedProperties();
-        propertySet = UnoRuntime.queryInterface(XPropertySet.class, userProperties);
-
-    }
-
-    public XDesktop simpleBootstrap(String pathToExecutable) throws Exception {
-
-        ClassLoader loader = ClassLoader.getSystemClassLoader();
-        if (loader instanceof URLClassLoader) {
-            URLClassLoader cl = (URLClassLoader) loader;
-            Class sysclass = URLClassLoader.class;
-            try {
-
-                 Method method = sysclass.getDeclaredMethod("addURL", new Class[]{URL.class});
-                 method.setAccessible(true);
-                 method.invoke(cl, new Object[]{new File(pathToExecutable).toURI().toURL()});
-             } catch (Throwable t) {
-                 t.printStackTrace();
-                 throw new IOException("Error, could not add URL to system classloader");
-             }
-         } else {
-             System.out.println("Error occured, URLClassLoader expected but " +
-                     loader.getClass() + " received. Could not continue.");
-         }
-
-         //Get the office component context:
-         XComponentContext xContext = Bootstrap.bootstrap();
-         //Get the office service manager:
-         XMultiComponentFactory xServiceManager = xContext.getServiceManager();
-         //Create the desktop, which is the root frame of the
-         //hierarchy of frames that contain viewable components:
-         Object desktop = xServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", xContext);
-        XDesktop xD = (XDesktop) UnoRuntime.queryInterface(XDesktop.class, desktop);
-
-        xComponentLoader = (XComponentLoader)UnoRuntime.queryInterface(
-             XComponentLoader.class, desktop);
-
-        return xD;
-
-     }
-
-     public List<XTextDocument> getTextDocuments() throws Exception {
-         List<XTextDocument> res = new ArrayList<XTextDocument>();
-         XEnumerationAccess enumA = xDesktop.getComponents();
-         XEnumeration e = enumA.createEnumeration();
-
-         // TODO: http://api.openoffice.org/docs/DevelopersGuide/OfficeDev/OfficeDev.xhtml#1_1_3_2_1_2_Frame_Hierarchies
-
-         while (e.hasMoreElements()) {
-             Object o = e.nextElement();
-             XComponent comp = (XComponent) UnoRuntime.queryInterface(XComponent.class, o);
-             XTextDocument doc = (XTextDocument) UnoRuntime.queryInterface(
-                    XTextDocument.class, comp);
-             if (doc != null) {
-                res.add(doc);
-             }
-         }
-         return res;
-     }
-
-    public void testCustomProperties() throws Exception {
-        XDocumentPropertiesSupplier supp = (XDocumentPropertiesSupplier)UnoRuntime.queryInterface(
-                XDocumentPropertiesSupplier.class, mxDoc);
-        XPropertyContainer cont = supp.getDocumentProperties().getUserDefinedProperties();
-        XPropertySet set = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, cont);
-        try {
-            cont.addProperty("JR_cite_1_Danielsen1987", (short)0, new Any(Type.STRING, "Brum"));
-        } catch (Exception ex) {
-            System.out.println("property already exists");
-        }
-        System.out.println(set.getPropertyValue("Test").toString());
-
-    }
-
-    public void setCustomProperty(String property, String value) throws Exception {
-        if (propertySet.getPropertySetInfo().hasPropertyByName(property))
-            userProperties.removeProperty(property);
-        if (value != null)
-            userProperties.addProperty(property, com.sun.star.beans.PropertyAttribute.REMOVEABLE,
-                   new Any(Type.STRING, value));
-    }
-    
-    public String getCustomProperty(String property) throws Exception {
-        if (propertySet.getPropertySetInfo().hasPropertyByName(property))
-            return propertySet.getPropertyValue(property).toString();
-        else return null;
-
-    }
-
-     public void updateSortedReferenceMarks() throws Exception {
-         XReferenceMarksSupplier supplier = (XReferenceMarksSupplier) UnoRuntime.queryInterface(
-                XReferenceMarksSupplier.class, xCurrentComponent);
-        XNameAccess nameAccess = supplier.getReferenceMarks();
-        String[] names;
-        sortedReferenceMarks = getSortedReferenceMarks(nameAccess);
-     }
-     
-    /**
-     * This method inserts a cite marker in the text for the given BibtexEntry,
-     * and may refresh the bibliography.
-     * @param entries The entries to cite.
-     * @param database The database the entry belongs to.
-     * @param style The bibliography style we are using.
-     * @param inParenthesis Indicates whether it is an in-text citation or a citation in parenthesis.
-     *   This is not relevant if numbered citations are used.
-     * @param withText Indicates whether this should be a normal citation (true) or an empty
-     *   (invisible) citation (false).
-     * @param sync Indicates whether the reference list should be refreshed.
-     * @throws Exception
-     */
-    public void insertEntry(BibtexEntry[] entries, BibtexDatabase database,
-                            List<BibtexDatabase> allBases, OOBibStyle style,
-                            boolean inParenthesis, boolean withText, String pageInfo,
-                            boolean sync) throws Exception {
-
-        try {
-
-            XTextViewCursor xViewCursor = xViewCursorSupplier.getViewCursor();
-
-            if (entries.length > 1) {
-                if (style.getBooleanCitProperty("MultiCiteChronological"))
-                    Arrays.sort(entries, yearComparator);
-                else
-                    Arrays.sort(entries, entryComparator);
-            }
-
-            StringBuilder sb = new StringBuilder();
-            for (int i = 0; i < entries.length; i++) {
-                BibtexEntry entry = entries[i];
-                if (i > 0)
-                    sb.append(",");
-                sb.append(entry.getCiteKey());
-            }
-            String keyString = sb.toString();
-            // Insert bookmark:
-            String bName = getUniqueReferenceMarkName(keyString,
-                    withText ? (inParenthesis ? AUTHORYEAR_PAR : AUTHORYEAR_INTEXT) : INVISIBLE_CIT);
-            //XTextContent content = insertBookMark(bName, xViewCursor);
-
-            // If we should store metadata for page info, do that now:
-            if (pageInfo != null) {
-                System.out.println("Storing page info: "+pageInfo);
-                setCustomProperty(bName, pageInfo);
-            }
-
-
-            String citeText = style.isNumberEntries() ? "-" : style.getCitationMarker(entries, database, inParenthesis, null, null);
-
-            //System.out.println(text+" / "+xViewCursor.getText());
-            xViewCursor.getText().insertString(xViewCursor, " ", false);
-            if (style.isFormatCitations()) {
-                XPropertySet xCursorProps = (XPropertySet) UnoRuntime.queryInterface(
-                                    XPropertySet.class, xViewCursor);
-                String charStyle = style.getCitationCharacterFormat();
-                try {
-                    xCursorProps.setPropertyValue("CharStyleName", charStyle);
-                } catch (Throwable ex) {
-                    // Setting the character format failed, so we throw an exception that
-                    // will result in an error message for the user. Before that,
-                    // delete the space we inserted:
-                    xViewCursor.goLeft((short)1,true);
-                    xViewCursor.setString("");
-                    throw new UndefinedCharacterFormatException(charStyle);
-                }
-            }
-            xViewCursor.goLeft((short)1,false);
-            insertReferenceMark(bName, citeText, xViewCursor, withText, style);
-            //xViewCursor.collapseToEnd();
-
-            xViewCursor.collapseToEnd();
-            xViewCursor.goRight((short)1,false);
-
-            XTextRange position = xViewCursor.getEnd();
-
-            if (sync) {
-                // To account for numbering and for uniqiefiers, we must refresh the cite markers:
-                updateSortedReferenceMarks();
-                refreshCiteMarkers(allBases, style);
-
-                // Insert it at the current position:
-                rebuildBibTextSection(allBases, style);
-            }
-
-            // Go back to the relevant position:
-            try {
-                xViewCursor.gotoRange(position, false);
-            } catch (Exception ex) {
-                System.out.println("Catch");
-                ex.printStackTrace();
-            }
-        } catch (DisposedException ex) {
-            // We need to catch this one here because the OpenOfficePanel class is
-            // loaded before connection, and therefore cannot directly reference
-            // or catch a DisposedException (which is in a OO jar file).
-            throw new ConnectionLostException(ex.getMessage());
-        }
-    }
-
-    /**
-     * Refresh all cite markers in the document.
-     * @param databases The databases to get entries from.
-     * @param style The bibliography style to use.
-     * @return A list of those referenced BibTeX keys that could not be resolved.
-     * @throws Exception
-     */
-    public List<String> refreshCiteMarkers(List<BibtexDatabase> databases, OOBibStyle style) throws
-            Exception {
-        try {
-            return refreshCiteMarkersInternal(databases, style);
-        } catch (DisposedException ex) {
-            // We need to catch this one here because the OpenOfficePanel class is
-            // loaded before connection, and therefore cannot directly reference
-            // or catch a DisposedException (which is in a OO jar file).
-            throw new ConnectionLostException(ex.getMessage());
-        }
-    }
-
-    public XNameAccess getReferenceMarks() {
-        XReferenceMarksSupplier supplier = (XReferenceMarksSupplier) UnoRuntime.queryInterface(
-                XReferenceMarksSupplier.class, xCurrentComponent);
-        return supplier.getReferenceMarks();
-    }
-
-    public String[] getJabRefReferenceMarks(XNameAccess nameAccess) {
-        String[] names = nameAccess.getElementNames();
-        // Remove all reference marks that don't look like JabRef citations:
-        ArrayList<String> tmp = new ArrayList<String>();
-        for (int i = 0; i < names.length; i++) {
-            if (citePattern.matcher(names[i]).find())
-                tmp.add(names[i]);
-        }
-        names = tmp.toArray(new String[tmp.size()]);
-        return names;
-    }
-
-    private List<String> refreshCiteMarkersInternal(List<BibtexDatabase> databases, OOBibStyle style) throws
-            Exception {
-
-        List<String> cited = findCitedKeys();
-        HashMap<String,BibtexDatabase> linkSourceBase = new HashMap<String, BibtexDatabase>();
-        Map<BibtexEntry,BibtexDatabase> entries = findCitedEntries(databases, cited, linkSourceBase);
-
-        XNameAccess nameAccess = getReferenceMarks();
-
-        String[] names;
-        if (style.isSortByPosition()) {
-            // We need to sort the reference marks according to their order of appearance:
-            /*if (sortedReferenceMarks == null)
-                updateSortedReferenceMarks();*/
-            names = sortedReferenceMarks;
-        }
-        else if (style.isNumberEntries()) {
-            // We need to sort the reference marks according to the sorting of the bibliographic
-            // entries:
-            SortedMap<BibtexEntry,BibtexDatabase> newMap =
-                    new TreeMap<BibtexEntry, BibtexDatabase>(entryComparator);
-            for (BibtexEntry entry : entries.keySet())
-                newMap.put(entry, entries.get(entry));
-            entries = newMap;
-            // Rebuild the list of cited keys according to the sort order:
-            cited.clear();
-            for (Iterator<BibtexEntry> iterator = entries.keySet().iterator(); iterator.hasNext();) {
-                BibtexEntry entry = iterator.next();
-                cited.add(entry.getCiteKey());
-            }
-            names = nameAccess.getElementNames();
-        }
-        else {
-            /*if (sortedReferenceMarks == null)
-                updateSortedReferenceMarks();*/
-            names = sortedReferenceMarks;            
-        }
-
-        // Remove all reference marks that don't look like JabRef citations:
-        ArrayList<String> tmp = new ArrayList<String>();
-        for (int i = 0; i < names.length; i++) {
-            if (citePattern.matcher(names[i]).find())
-                tmp.add(names[i]);
-        }
-        names = tmp.toArray(new String[tmp.size()]);
-
-        HashMap<String,Integer> numbers = new HashMap<String, Integer>();
-        //HashMap<S
-        int lastNum = 0;
-        // First compute citation markers for all citations:
-        String[] citMarkers = new String[names.length];
-        String[][] normCitMarkers = new String[names.length][];
-        String[][] bibtexKeys = new String[names.length][];
-
-        int minGroupingCount = style.getIntCitProperty("MinimumGroupingCount");
-
-        int[] types = new int[names.length];
-        for (int i = 0; i < names.length; i++) {
-            Matcher m = citePattern.matcher(names[i]);
-            if (m.find()) {
-                String typeStr = m.group(1);
-                int type = Integer.parseInt(typeStr);
-                types[i] = type; // Remember the type in case we need to uniqiefy.
-                String[] keys = m.group(2).split(",");
-                bibtexKeys[i] = keys;
-                BibtexEntry[] cEntries = new BibtexEntry[keys.length];
-                for (int j = 0; j < cEntries.length; j++) {
-                    BibtexDatabase database = linkSourceBase.get(keys[j]);
-                    cEntries[j] = null;
-                    if (database != null)
-                        cEntries[j] = OOUtil.createAdaptedEntry(database.getEntryByKey(keys[j]));
-                    if (cEntries[j] == null) {
-                        System.out.println("Bibtex key not found : '"+keys[j]+"'");
-                        System.out.println("Problem with reference mark: '"+names[i]+"'");
-                        cEntries[j] = new UndefinedBibtexEntry(keys[j]);
-                        //throw new BibtexEntryNotFoundException(keys[j], "");
-                    }
-                }
-
-                String[] normCitMarker = new String[keys.length];
-                String citationMarker;
-                if (style.isBibtexKeyCiteMarkers()) {
-                    StringBuilder sb = new StringBuilder();
-                    normCitMarkers[i] = new String[keys.length];
-                    for (int j=0; j<keys.length; j++) {
-                        normCitMarkers[i][j] = cEntries[j].getCiteKey();
-                        sb.append(cEntries[j].getCiteKey());
-                        if (j < keys.length-1)
-                            sb.append(",");
-                    }
-                    citationMarker = sb.toString();
-                }
-                else if (style.isNumberEntries()) {
-                    if (style.isSortByPosition()) {
-                        // We have sorted the citation markers according to their order of appearance,
-                        // so we simply count up for each marker referring to a new entry:
-                        int[] num = new int[keys.length];
-                        for (int j=0; j<keys.length; j++) {
-                            if (cEntries[j] instanceof UndefinedBibtexEntry) {
-                                num[j] = -1;
-                            } else {
-                                num[j] = lastNum + 1;
-                                if (numbers.containsKey(keys[j]))
-                                    num[j] = numbers.get(keys[j]);
-                                else {
-                                    numbers.put(keys[j], num[j]);
-                                    lastNum = num[j];
-                                }
-                            }
-                        }
-                        citationMarker = style.getNumCitationMarker(num, minGroupingCount, false);
-                        for (int j=0; j<keys.length; j++)
-                            normCitMarker[j] = style.getNumCitationMarker(new int[] {num[j]},
-                                    minGroupingCount, false);
-                    }
-                    else {
-                        // We need to find the number of the cited entry in the bibliography,
-                        // and use that number for the cite marker:
-                        int[] num = findCitedEntryIndex(names[i], cited);
-
-                        if (num != null)
-                            citationMarker = style.getNumCitationMarker(num, minGroupingCount, false);
-                        else
-                            throw new BibtexEntryNotFoundException(names[i], Globals.lang("Could not resolve BibTeX entry for citation marker '%0'.", names[i]));
-
-                        for (int j=0; j<keys.length; j++)
-                            normCitMarker[j] = style.getNumCitationMarker(new int[] {num[j]},
-                                    minGroupingCount, false);
-                    }
-                }
-                else {
-
-                    if (cEntries.length > 1) {
-                        if (style.getBooleanCitProperty("MultiCiteChronological"))
-                            Arrays.sort(cEntries, yearComparator);
-                        else
-                            Arrays.sort(cEntries, entryComparator);
-                        // Update key list to match the new sorting:
-                        for (int j = 0; j < cEntries.length; j++) {
-                            bibtexKeys[i][j] = cEntries[j].getCiteKey();
-                        }
-                    }
-                    /*System.out.println(style.getBooleanCitProperty("MultiCiteChronological"));
-                    for (int j = 0; j < cEntries.length; j++) {
-                        BibtexEntry cEntry = cEntries[j];
-                        System.out.println(cEntry.getCiteKey());
-                    } */
-
-                    citationMarker = style.getCitationMarker(cEntries, entries.get(cEntries), type == AUTHORYEAR_PAR, null, null);
-                    // We need "normalized" (in parenthesis) markers for uniqueness checking purposes:
-                    for (int j=0; j<cEntries.length; j++)
-                        normCitMarker[j] = style.getCitationMarker(cEntries[j], entries.get(cEntries), true, null, -1);
-                }
-                citMarkers[i] = citationMarker;
-                normCitMarkers[i] = normCitMarker;
-
-            }
-
-
-        }
-
-        uniquefiers.clear();
-        if (!style.isBibtexKeyCiteMarkers() && !style.isNumberEntries()) {
-            // See if there are duplicate citations marks referring to different entries. If so, we need to
-            // use uniquefiers:
-            HashMap<String,List<String>> refKeys = new HashMap<String, List<String>>();
-            HashMap<String,List<Integer>> refNums = new HashMap<String, List<Integer>>();
-            for (int i = 0; i < citMarkers.length; i++) {
-                String[] markers = normCitMarkers[i]; // compare normalized markers, since the actual markers can be different
-                for (int j=0; j<markers.length; j++) {
-                    String marker = markers[j];
-                    if (!refKeys.containsKey(marker)) {
-                        List<String> l = new ArrayList<String>(1);
-                        l.add(bibtexKeys[i][j]);
-                        refKeys.put(marker, l);
-                        List<Integer> l2 = new ArrayList<Integer>(1);
-                        l2.add(i);
-                        refNums.put(marker, l2);
-                    }
-                    else {
-                        // Ok, we have seen this exact marker before.
-                        if (!refKeys.get(marker).contains(bibtexKeys[i][j])) {
-                            // ... but not for this entry.
-                            refKeys.get(marker).add(bibtexKeys[i][j]);
-                            refNums.get(marker).add(i);
-                        }
-                    }
-                }
-            }
-            // Go through the collected lists and see where we need to uniquefy:
-            for (String marker : refKeys.keySet()) {
-                List<String> keys = refKeys.get(marker);
-                if (keys.size() > 1) {
-                    // This marker appears for more than one unique entry:
-                    int uniq = 'a';
-                    for (String key : keys) {
-                        // Update the map of uniquefiers for the benefit of both the following generation of new
-                        // citation markers, and for the method that builds the bibliography:
-                        uniquefiers.put(key, String.valueOf((char)uniq));
-                        uniq++;
-                    }
-                }
-            }
-
-            // Finally, go through all citation markers, and update those referring to entries in our current list:
-            int maxAuthorsFirst = style.getIntCitProperty("MaxAuthorsFirst");
-            HashSet<String> seenBefore = new HashSet<String>();
-            for (int j = 0; j < bibtexKeys.length; j++) {
-                boolean needsChange = false;
-                int[] firstLimAuthors = new int[bibtexKeys[j].length];
-                String[] uniquif = new String[bibtexKeys[j].length];
-                BibtexEntry[] cEntries = new BibtexEntry[bibtexKeys[j].length];
-                for (int k=0; k<bibtexKeys[j].length; k++) {
-                    firstLimAuthors[k] = -1;
-                    if (maxAuthorsFirst > 0) {
-                        if (!seenBefore.contains(bibtexKeys[j][k])) {
-                            firstLimAuthors[k] = maxAuthorsFirst;
-                        }
-                        seenBefore.add(bibtexKeys[j][k]);
-                    }
-                    String uniq = uniquefiers.get(bibtexKeys[j][k]);
-                    if ((uniq != null) && (uniq.length() >= 0)) {
-                        needsChange = true;
-                        BibtexDatabase database = linkSourceBase.get(bibtexKeys[j][k]);
-                        if (database != null)
-                            cEntries[k] = OOUtil.createAdaptedEntry(database.getEntryByKey(bibtexKeys[j][k]));
-                        uniquif[k] = uniq;
-                    }
-                    else if (firstLimAuthors[k] > 0) {
-                        needsChange = true;
-                        BibtexDatabase database = linkSourceBase.get(bibtexKeys[j][k]);
-                        if (database != null)
-                            cEntries[k] = OOUtil.createAdaptedEntry(database.getEntryByKey(bibtexKeys[j][k]));
-                        uniquif[k] = "";
-                    }
-                    else {
-                        BibtexDatabase database = linkSourceBase.get(bibtexKeys[j][k]);
-                        if (database != null)
-                            cEntries[k] = OOUtil.createAdaptedEntry(database.getEntryByKey(bibtexKeys[j][k]));
-                        uniquif[k] = "";
-                    }
-                }
-                if (needsChange) {
-                    citMarkers[j] = style.getCitationMarker(cEntries, entries.get(cEntries), types[j] == AUTHORYEAR_PAR,
-                        uniquif, firstLimAuthors);
-                }
-            }
-        }
-
-        // Refresh all reference marks with the citation markers we computed:
-        boolean hadBibSection = getBookmarkRange(BIB_SECTION_NAME) != null;
-        // Check if we are supposed to set a character format for citations:
-        boolean mustTestCharFormat = style.isFormatCitations();
-        for (int i = 0; i < names.length; i++) {
-            Object o = nameAccess.getByName(names[i]);
-            XTextContent bm = (XTextContent) UnoRuntime.queryInterface
-                    (XTextContent.class, o);
-
-            XTextCursor cursor = bm.getAnchor().getText().createTextCursorByRange(bm.getAnchor());
-
-            if (mustTestCharFormat) {
-                // If we are supposed to set character format for citations, must run a test before we
-                // delete old citation markers. Otherwise, if the specified character format doesn't
-                // exist, we end up deleting the markers before the process crashes due to a the missing
-                // format, with catastrophic consequences for the user.
-                mustTestCharFormat = false; // need to do this only once
-                XPropertySet xCursorProps = (XPropertySet) UnoRuntime.queryInterface(
-                                    XPropertySet.class, cursor);
-                String charStyle = style.getCitationCharacterFormat();
-                try {
-                    xCursorProps.setPropertyValue("CharStyleName", charStyle);
-                } catch (Throwable ex) {
-                    throw new UndefinedCharacterFormatException(charStyle);
-                }
-            }
-
-
-            text.removeTextContent(bm);
-
-            insertReferenceMark(names[i], citMarkers[i], cursor, types[i] != INVISIBLE_CIT, style);
-            if (hadBibSection && (getBookmarkRange(BIB_SECTION_NAME) == null)) {
-                // We have overwritten the marker for the start of the reference list.
-                // We need to add it again.
-                cursor.collapseToEnd();
-                OOUtil.insertParagraphBreak(text, cursor);
-                insertBookMark(BIB_SECTION_NAME, cursor);
-                /* The following is for resetting the paragraph format, but should probably
-                   not be done.
-                   
-                XParagraphCursor parCursor =
-                    (XParagraphCursor)UnoRuntime.queryInterface(
-                    java.lang.Class.forName("com.sun.star.text.XParagraphCursor"), cursor);
-                parCursor.gotoPreviousParagraph(false);
-                parCursor.gotoStartOfParagraph(false);
-                parCursor.gotoEndOfParagraph(true);
-                XPropertySet props = (XPropertySet) UnoRuntime.queryInterface(
-                    XPropertySet.class, parCursor);
-
-                try {
-                    props.setPropertyValue("ParaStyleName", "Default");
-                } catch (com.sun.star.lang.IllegalArgumentException ex) {
-                    throw new UndefinedParagraphFormatException("Default");
-                }
-                */
-
-            }
-        }
-
-        ArrayList<String> unresolvedKeys = new ArrayList<String>();
-        for (BibtexEntry entry : entries.keySet()) {
-            if (entry instanceof UndefinedBibtexEntry) {
-                String key = ((UndefinedBibtexEntry)entry).getKey();
-                if (!unresolvedKeys.contains(key))
-                    unresolvedKeys.add(key);
-            }
-        }
-        return unresolvedKeys;
-    }
-
-    public String[] getSortedReferenceMarks(final XNameAccess nameAccess) throws Exception {
-        /*
-        PropertyValue[] props = new PropertyValue[2];
-
-        props[0] = new PropertyValue();
-        props[0].Name = "Model";
-
-        props[0].Value = mxDoc.getCurrentController().getModel();
-        props[1] = new PropertyValue();
-        props[1].Name = "Hidden";
-        props[1].Value = true;
-
-        // argument xModel wins over URL.
-        System.out.println("her");
-        XComponent comp = xComponentLoader.loadComponentFromURL("private:factory/swriter",
-                           "_blank", 0, props);
-        System.out.println("her2");
-
-        XTextDocument newDoc = (XTextDocument)UnoRuntime.queryInterface(
-                XTextDocument.class, comp);
-        System.out.println("newDoc = "+newDoc);
-
-        // Controller of the hidden frame
-        XController xController = newDoc.getCurrentController();
-
-        XFrame xFrame = xController.getFrame();
-        XWindow xContainerWindow = xFrame.getContainerWindow();
-        XWindow xComponentWindow = xFrame.getComponentWindow();
-
-        xContainerWindow.setVisible(true);
-        xComponentWindow.setFocus();
-        xContainerWindow.setVisible(false);
-        */
-        XTextViewCursorSupplier css = (XTextViewCursorSupplier)UnoRuntime.queryInterface(
-                XTextViewCursorSupplier.class, mxDoc.getCurrentController());
-
-        XTextViewCursor tvc = css.getViewCursor();
-        XTextRange initialPos = tvc.getStart();
-        String[] names = nameAccess.getElementNames();
-        Point[] positions = new Point[names.length];
-        for (int i = 0; i < names.length; i++) {
-            String name = names[i];
-            XTextContent tc = (XTextContent) UnoRuntime.queryInterface
-                    (XTextContent.class, nameAccess.getByName(name));
-            XTextRange r = tc.getAnchor();
-            // Check if we are inside a footnote:
-            if (UnoRuntime.queryInterface(XFootnote.class, r.getText()) != null) {
-                // Find the linking footnote marker:
-                XFootnote footer = (XFootnote)UnoRuntime.queryInterface(XFootnote.class, r.getText());
-                // The footnote's anchor gives the correct position in the text:
-                r = footer.getAnchor();
-            }
-
-            positions[i] = findPosition(tvc, r);
-        }
-        TreeSet<ComparableMark> set = new TreeSet<ComparableMark>();
-        for (int i = 0; i < positions.length; i++) {
-            set.add(new ComparableMark(names[i], positions[i]));
-        }
-        int i=0;
-        for (Iterator<ComparableMark> iterator = set.iterator(); iterator.hasNext();) {
-            ComparableMark mark = iterator.next();
-            //System.out.println(mark.getPosition().X+" -- "+mark.getPosition().Y+" : "+mark.getName());
-            names[i++] = mark.getName();
-        }
-        tvc.gotoRange(initialPos, false);
-        //xFrame.dispose();
-
-        return names;
-        
-        /*final XTextRangeCompare compare = (XTextRangeCompare) UnoRuntime.queryInterface
-                (XTextRangeCompare.class, text);
-        Arrays.sort(names, new Comparator<String>() {
-            public int compare(String o1, String o2) {
-                try {
-                    XTextRange r1 = ((XTextContent) UnoRuntime.queryInterface
-                            (XTextContent.class, nameAccess.getByName(o1))).getAnchor();
-                    XTextRange r2 = ((XTextContent) UnoRuntime.queryInterface
-                            (XTextContent.class, nameAccess.getByName(o2))).getAnchor();
-
-                    try {
-                        return compare.compareRegionStarts(r2, r1);
-                    } catch (com.sun.star.lang.IllegalArgumentException ex) {
-                        // problem comparing reference marks in different areas (text, table, etc.)
-                        return 0;
-                    }
-                } catch (Exception ex) {
-                    ex.printStackTrace();
-                    return 0;
-                }
-            }
-        });
-        return names;*/
-    }
-
-    public void rebuildBibTextSection(List<BibtexDatabase> databases, OOBibStyle style)
-            throws Exception {
-        List<String> cited = findCitedKeys();
-        HashMap<String,BibtexDatabase> linkSourceBase = new HashMap<String, BibtexDatabase>();
-        Map<BibtexEntry,BibtexDatabase> entries = findCitedEntries
-                (databases, cited, linkSourceBase);
-        
-        String[] names = sortedReferenceMarks;
-        
-        if (style.isSortByPosition()) {
-            // We need to sort the entries according to their order of appearance:
-           entries = getSortedEntriesFromSortedRefMarks(names, entries, linkSourceBase);
-        }
-        else {
-            SortedMap<BibtexEntry,BibtexDatabase> newMap =
-                    new TreeMap<BibtexEntry, BibtexDatabase>(entryComparator);
-            for (BibtexEntry entry : entries.keySet())
-                newMap.put(entry, entries.get(entry));
-            entries = newMap;
-        }
-        clearBibTextSectionContent2();
-        populateBibTextSection(entries, style);
-    }
-
-
-
-    public String getUniqueReferenceMarkName(String bibtexKey, int type) {
-        XReferenceMarksSupplier supplier = (XReferenceMarksSupplier) UnoRuntime.queryInterface(
-                XReferenceMarksSupplier.class, xCurrentComponent);
-        XNameAccess xNamedRefMarks = supplier.getReferenceMarks();
-        int i=0;
-        String name = BIB_CITATION+"_"+type+"_"+bibtexKey;
-        while (xNamedRefMarks.hasByName(name)) {
-            name = BIB_CITATION+i+"_"+type+"_"+bibtexKey;
-            i++;
-        }
-        return name;
-    }
-
-    public LinkedHashMap<BibtexEntry,BibtexDatabase> findCitedEntries
-            (List<BibtexDatabase> databases, List<String> keys,
-             HashMap<String,BibtexDatabase> linkSourceBase) {
-        LinkedHashMap<BibtexEntry,BibtexDatabase> entries = new LinkedHashMap<BibtexEntry, BibtexDatabase>();
-        for (String key : keys) {
-            boolean found = false;
-            bases: for (BibtexDatabase database : databases) {
-                BibtexEntry entry = database.getEntryByKey(key);
-                if (entry != null) {
-                    entries.put(OOUtil.createAdaptedEntry(entry), database);
-                    linkSourceBase.put(key, database);
-                    found = true;
-                    break bases;
-                }
-            }
-
-            if (!found)
-                entries.put(new UndefinedBibtexEntry(key), null);
-        }
-        return entries;
-    }
-
-    public List<String> findCitedKeys() throws com.sun.star.container.NoSuchElementException, WrappedTargetException {
-
-        XReferenceMarksSupplier supplier = (XReferenceMarksSupplier) UnoRuntime.queryInterface(
-                XReferenceMarksSupplier.class, xCurrentComponent);
-        XNameAccess xNamedMarks = supplier.getReferenceMarks();
-        String[] names = xNamedMarks.getElementNames();
-        ArrayList<String> keys = new ArrayList<String>();
-        for (int i = 0; i < names.length; i++) {
-            Object bookmark = xNamedMarks.getByName(names[i]);
-            XTextContent xTextContent = (XTextContent) UnoRuntime.queryInterface(
-                    XTextContent.class, bookmark);
-
-            String name = names[i];
-            List<String> newKeys = parseRefMarkName(name);
-            for (String key : newKeys)
-                if (!keys.contains(key))
-                    keys.add(key);
-        }
-
-        return keys;
-    }
-
-    public LinkedHashMap<BibtexEntry,BibtexDatabase> getSortedEntriesFromSortedRefMarks
-            (String[] names,
-            Map<BibtexEntry,BibtexDatabase> entries,
-            HashMap<String,BibtexDatabase> linkSourceBase)
-            throws BibtexEntryNotFoundException {
-        
-        LinkedHashMap<BibtexEntry,BibtexDatabase> newList = new LinkedHashMap<BibtexEntry,BibtexDatabase>();
-        HashMap<BibtexEntry,BibtexEntry> adaptedEntries = new HashMap<BibtexEntry,BibtexEntry>();
-        for (int i = 0; i < names.length; i++) {
-            Matcher m = citePattern.matcher(names[i]);
-            if (m.find()) {
-                String[] keys = m.group(2).split(",");
-                for (int j = 0; j < keys.length; j++) {
-                    BibtexDatabase database = linkSourceBase.get(keys[j]);
-                    BibtexEntry origEntry = null;
-                    if (database != null) origEntry = database.getEntryByKey(keys[j]);
-                    if (origEntry == null) {
-                        System.out.println("Bibtex key not found : '"+keys[j]+"'");
-                        System.out.println("Problem with reference mark: '"+names[i]+"'");
-                        newList.put(new UndefinedBibtexEntry(keys[j]), null);
-                        //throw new BibtexEntryNotFoundException(keys[j], "");
-                    } else {
-                        BibtexEntry entry = adaptedEntries.get(origEntry);
-                        if (entry == null) {
-                            entry = OOUtil.createAdaptedEntry(origEntry);
-                            adaptedEntries.put(origEntry, entry);
-                        }
-                        if (!newList.containsKey(entry)) {
-                            newList.put(entry, database);
-                        }
-                    }
-                }
-            }
-        }
-
-        return newList;
-    }
-    
-    public Point findPosition(XTextViewCursor cursor, XTextRange range) {
-        cursor.gotoRange(range, false);
-        return cursor.getPosition();
-    }
-
-    /**
-     * Extract the list of bibtex keys from a reference mark name.
-     * @param name The reference mark name.
-     * @return The list of bibtex keys encoded in the name.
-     */
-    public List<String> parseRefMarkName(String name) {
-        ArrayList<String> keys = new ArrayList<String>();
-        Matcher m = citePattern.matcher(name);
-        if (m.find()) {
-            String[] keystring = m.group(2).split(",");
-            for (int j = 0; j < keystring.length; j++) {
-                if (!keys.contains(keystring[j]))
-                    keys.add(keystring[j]);
-            }
-        }
-        return keys;
-    }
-
-    /**
-     * Resolve the bibtex key from a citation reference marker name, and look up
-     * the index of the key in a list of keys.
-     * @param citRefName The name of the ReferenceMark representing the citation.
-     * @param keys A List of bibtex keys representing the entries in the bibliography.
-     * @return the indices of the cited keys, -1 if a key is not found. Returns null if the ref name
-     *   could not be resolved as a citation.
-     */
-    public int[] findCitedEntryIndex(String citRefName, List<String> keys) {
-        Matcher m = citePattern.matcher(citRefName);
-        if (m.find()) {
-            String[] keyStrings = m.group(2).split(",");
-            int[] res = new int[keyStrings.length];
-            for (int i=0; i<keyStrings.length; i++) {
-                int ind = keys.indexOf(keyStrings[i]);
-                res[i] = ind != -1 ? 1+ind : -1;
-            }
-            return res;
-        }
-        else
-            return null;
-    }
-
-    public String getCitationContext(XNameAccess nameAccess, String refMarkName,
-                                     int charBefore, int charAfter,
-                                     boolean htmlMarkup) throws Exception {
-        Object o = nameAccess.getByName(refMarkName);
-        XTextContent bm = (XTextContent) UnoRuntime.queryInterface
-                (XTextContent.class, o);
-
-        XTextCursor cursor = bm.getAnchor().getText().createTextCursorByRange(bm.getAnchor());
-        String citPart = cursor.getString();
-        int flex = 8;
-        for (int i=0; i<charBefore; i++) {
-            try {
-                cursor.goLeft((short)1, true);
-                if ((i >= charBefore-flex) && Character.isWhitespace(cursor.getString().charAt(0)))
-                    break;
-            } catch (Exception ex) {
-                ex.printStackTrace();
-            }
-        }
-        int length = cursor.getString().length();
-        int added = length - citPart.length();
-        cursor.collapseToStart();
-        for (int i=0; i<charAfter+length; i++) {
-            try {
-                cursor.goRight((short)1, true);
-                if (i >= charAfter+length-flex) {
-                    String strNow = cursor.getString();
-                    if (Character.isWhitespace(strNow.charAt(strNow.length()-1)))
-                        break;
-                }
-            } catch (Exception ex) {
-                ex.printStackTrace();
-            }
-        }
-
-        String result = cursor.getString();
-        if (htmlMarkup) {
-            result = result.substring(0, added)+"<b>"+citPart+
-                    "</b>"+result.substring(length);
-        }
-        return result.trim();
-    }
-
-    public void insertFullReferenceAtCursor(XTextCursor cursor, Map<BibtexEntry,BibtexDatabase> entries,
-                                            OOBibStyle style, String parFormat)
-            throws UndefinedParagraphFormatException, Exception {
-        // If we don't have numbered entries, we need to sort the entries before adding them:
-        if (!style.isSortByPosition()) {
-            Map<BibtexEntry,BibtexDatabase> newMap = new TreeMap<BibtexEntry,BibtexDatabase>(entryComparator);
-            for (BibtexEntry entry : entries.keySet())
-                newMap.put(entry, entries.get(entry));
-            entries = newMap;
-        }
-        int number = 1;
-        for (BibtexEntry entry : entries.keySet()) {
-            if (entry instanceof UndefinedBibtexEntry)
-                continue;
-            OOUtil.insertParagraphBreak(text, cursor);
-            if (style.isNumberEntries()) {
-                int minGroupingCount = style.getIntCitProperty("MinimumGroupingCount");
-                OOUtil.insertTextAtCurrentLocation(text, cursor,
-                        style.getNumCitationMarker(new int[] {number++}, minGroupingCount, true),
-                        false, false, false, false, false, false);
-            }
-            Layout layout = style.getReferenceFormat(entry.getType().getName());
-            try {
-                layout.setPostFormatter(OOUtil.postformatter);
-            } catch (NoSuchMethodError ex) {
-                
-            }
-            OOUtil.insertFullReferenceAtCurrentLocation(text, cursor, layout, parFormat, entry,
-                    entries.get(entry), uniquefiers.get(entry.getCiteKey()));
-        }
-        
-    }
-
-    public void insertFullReferenceAtViewCursor(Map<BibtexEntry,BibtexDatabase> entries,
-                                                OOBibStyle style, String parFormat) throws Exception {
-        XTextViewCursor xViewCursor = xViewCursorSupplier.getViewCursor();
-        insertFullReferenceAtCursor(xViewCursor, entries, style, parFormat);
-    }
-
-
-    public void insertMarkedUpTextAtViewCursor(String lText, String parFormat) throws Exception {
-        XTextViewCursor xViewCursor = xViewCursorSupplier.getViewCursor();
-        XTextCursor cursor = text.createTextCursorByRange(xViewCursor.getEnd());
-        OOUtil.insertOOFormattedTextAtCurrentLocation(text,cursor, lText, parFormat);
-        
-    }
-
-    /**
-     * This method creates and inserts an XTextSection named as determined by the
-     * string BIB_SECTION_NAME.
-     * @param end true to indicate that the section should be put at the end of the document,
-     *  false to indicate that it should be put at the cursor position.
-     * @return true if the bibliography already existed, false otherwise..
-     * @throws Exception
-     */
-    public boolean createBibTextSection(boolean end) throws Exception {
-        // Check if there already is a bookmarked section:
-        XBookmarksSupplier bSupp = (XBookmarksSupplier) UnoRuntime.queryInterface(
-                 XBookmarksSupplier.class, mxDoc);
-        if (bSupp.getBookmarks().hasByName(BIB_SECTION_NAME)) {
-            System.out.println("Found existing JabRef bookmark");
-            return true;
-        }
-        XTextCursor mxDocCursor = text.createTextCursor();
-        if (end)
-            mxDocCursor.gotoEnd(false);
-        OOUtil.insertParagraphBreak(text, mxDocCursor);
-        insertBookMark(BIB_SECTION_NAME, mxDocCursor);
-        return false;
-    }
-
-    public void createBibTextSection2(boolean end) throws Exception {
-
-        XTextCursor mxDocCursor = text.createTextCursor();
-        if (end)
-            mxDocCursor.gotoEnd(false);
-        OOUtil.insertParagraphBreak(text, mxDocCursor);
-        // Create a new TextSection from the document factory and access it's XNamed interface
-        XNamed xChildNamed = UnoRuntime.queryInterface(
-          XNamed.class, mxDocFactory.createInstance("com.sun.star.text.TextSection"));
-        // Set the new sections name to 'Child_Section'
-        xChildNamed.setName(BIB_SECTION_NAME);
-        // Access the Child_Section's XTextContent interface and insert it into the document
-         XTextContent xChildSection = (XTextContent) UnoRuntime.queryInterface(
-             XTextContent.class, xChildNamed);
-         text.insertTextContent (mxDocCursor, xChildSection, false);
-        
-    }
-
-    public void clearBibTextSectionContent2() throws Exception {
-
-        // Check if the section exists:
-        boolean exists = false;
-        XTextSectionsSupplier supp = UnoRuntime.queryInterface(
-                XTextSectionsSupplier.class, mxDoc);
-        try {
-            XTextSection section = (XTextSection)((Any)supp.getTextSections().getByName(BIB_SECTION_NAME)).getObject();
-            // Clear it:
-            XTextCursor cursor = text.createTextCursorByRange(section.getAnchor());
-            cursor.gotoRange(section.getAnchor(), false);
-            cursor.setString("");
-
-        } catch (NoSuchElementException ex) {
-            createBibTextSection2(atEnd);
-        }
-    }
-
-    public void clearBibTextSectionContent() throws Exception {
-        // Get a range comparator:
-        XTextRangeCompare compare = (XTextRangeCompare) UnoRuntime.queryInterface
-                (XTextRangeCompare.class, text);
-        // Find the bookmarks for the bibliography:
-        XTextRange range = getBookmarkRange(BIB_SECTION_NAME);
-        if (range == null) {
-            createBibTextSection(atEnd);
-        }
-
-
-        XTextRange rangeEnd = getBookmarkRange(BIB_SECTION_END_NAME);
-        if (rangeEnd == null) {
-            // No end bookmark. This means that there is no bibliography.
-            return;
-        }
-        // Get a paragraph cursor at the start of the bibliography:
-        //System.out.println("text="+text+" range="+range);
-        XTextCursor mxDocCursor = text.createTextCursorByRange(range.getEnd());
-        mxDocCursor.goRight((short)1, true);
-        boolean couldExpand = true;
-        while (couldExpand && (compare.compareRegionEnds(mxDocCursor, rangeEnd) > 0)) {
-            couldExpand = mxDocCursor.goRight((short)1, true);
-        }
-        // Finally, clear the bibliography:
-        mxDocCursor.setString("");
-        mxDocCursor.collapseToStart();
-        removeBookMark(BIB_SECTION_END_NAME);
-        // If we lost the start bookmark, recreate it:
-        if (getBookmarkRange(BIB_SECTION_NAME) == null)
-            insertBookMark(BIB_SECTION_NAME, mxDocCursor);
-    }
-
-    public void populateBibTextSection(Map<BibtexEntry,BibtexDatabase> entries,
-                                       OOBibStyle style)
-            throws UndefinedParagraphFormatException, Exception {
-        XTextSectionsSupplier supp = UnoRuntime.queryInterface(XTextSectionsSupplier.class, mxDoc);
-        XTextSection section = (XTextSection)((Any)supp.getTextSections().getByName(BIB_SECTION_NAME))
-                    .getObject();
-        XTextCursor cursor = text.createTextCursorByRange(section.getAnchor());
-        OOUtil.insertTextAtCurrentLocation(text, cursor, (String)style.getProperty("Title"),
-                (String)style.getProperty("ReferenceHeaderParagraphFormat"));
-        insertFullReferenceAtCursor(cursor, entries, style,
-                (String)style.getProperty("ReferenceParagraphFormat"));
-        insertBookMark(BIB_SECTION_END_NAME, cursor);
-    }
-
-    public XTextContent insertBookMark(String name, XTextCursor position) throws Exception {
-        Object bookmark = mxDocFactory.createInstance("com.sun.star.text.Bookmark");
-        // name the bookmark
-        XNamed xNamed = (XNamed) UnoRuntime.queryInterface(
-                XNamed.class, bookmark);
-        xNamed.setName(name);
-        // get XTextContent interface
-        XTextContent xTextContent = (XTextContent) UnoRuntime.queryInterface(
-                XTextContent.class, bookmark);
-        // insert bookmark at the end of the document
-        // instead of mxDocText.getEnd you could use a text cursor's XTextRange interface or any XTextRange
-        text.insertTextContent(position, xTextContent, true);
-        position.collapseToEnd();
-        return xTextContent;
-    }
-
-    public void insertReferenceMark(String name, String citText, XTextCursor position, boolean withText,
-                               OOBibStyle style)
-            throws Exception {
-
-        // Check if there is "page info" stored for this citation. If so, insert it into 
-        // the citation text before inserting the citation:
-        String pageInfo = getCustomProperty(name);
-        if (pageInfo != null) {
-            citText = style.insertPageInfo(citText, pageInfo);
-        }
-
-        Object bookmark = mxDocFactory.createInstance("com.sun.star.text.ReferenceMark");
-        // Name the reference
-        XNamed xNamed = UnoRuntime.queryInterface(XNamed.class, bookmark);
-        xNamed.setName(name);
-        // get XTextContent interface
-        if (true) {
-
-            XTextContent xTextContent = UnoRuntime.queryInterface(XTextContent.class, bookmark);
-            if (withText) {
-                position.setString(citText);
-                XPropertySet xCursorProps = UnoRuntime.queryInterface(XPropertySet.class, position);
-
-                // Set language to [None]:
-                xCursorProps.setPropertyValue("CharLocale", new Locale("zxx", "", ""));
-                if (style.isFormatCitations()) {
-                    String charStyle = style.getCitationCharacterFormat();
-                    try {
-                        xCursorProps.setPropertyValue("CharStyleName", charStyle);
-                    } catch (Throwable ex) {
-                        throw new UndefinedCharacterFormatException(charStyle);
-                    }
-                }
-            }
-            else
-                position.setString("");
-
-            position.getText().insertTextContent(position, xTextContent, true);
-
-            // Check if we should italicize the "et al." string in citations:
-            boolean italicize = style.getBooleanCitProperty("ItalicEtAl");
-            if (italicize) {
-                String etAlString = style.getStringCitProperty("EtAlString");
-                int index = citText.indexOf(etAlString);
-                if (index >= 0) {
-                    italicizeOrBold(position, true, index, index+etAlString.length());
-                }
-            }
-
-        }
-        position.collapseToEnd();
-
-    }
-
-    private void italicizeOrBold(XTextCursor position, boolean italicize,
-                                 int start, int end) throws Exception {
-        XTextRange rng = position.getStart();
-        XTextCursor cursor = position.getText().createTextCursorByRange(rng);
-        cursor.goRight((short)start, false);
-        cursor.goRight((short)(end-start), true);
-        XPropertySet xcp = UnoRuntime.queryInterface(XPropertySet.class, cursor);
-        if (italicize)
-            xcp.setPropertyValue("CharPosture", com.sun.star.awt.FontSlant.ITALIC);
-        else
-            xcp.setPropertyValue("CharWeight", com.sun.star.awt.FontWeight.BOLD);
-    }
-
-    public void testFootnote() throws Exception {
-        XTextViewCursor xViewCursor = xViewCursorSupplier.getViewCursor();
-        insertFootnote("jabbes", "Cite text", xViewCursor);
-    }
-
-    public void insertFootnote(String name, String citText, XTextCursor position) throws Exception {
-        XFootnote xFootnote = (XFootnote) UnoRuntime.queryInterface( XFootnote.class,
-            mxDocFactory.createInstance("com.sun.star.text.Footnote"));
-        xFootnote.setLabel("");
-        XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xFootnote);
-        props.setPropertyValue("ReferenceId", name); // doesn't work: short data type
-        System.out.println(props.getPropertyValue("ReferenceId"));
-        XTextContent xContent = (XTextContent)UnoRuntime.queryInterface(
-            XTextContent.class, xFootnote);
-        text.insertTextContent (position, xContent, false);
-        XSimpleText xSimple = (XSimpleText)UnoRuntime.queryInterface(XSimpleText.class, xFootnote);
-        XTextRange xRange = (XTextRange)UnoRuntime.queryInterface(XTextRange.class, xSimple.createTextCursor());
-        xSimple.insertString (xRange, citText, false);
-    }
-
-    public void removeBookMark(String name) throws Exception {
-        XBookmarksSupplier xBookmarksSupplier = (XBookmarksSupplier) UnoRuntime.queryInterface(
-                XBookmarksSupplier.class, xCurrentComponent);
-        if (xBookmarksSupplier.getBookmarks().hasByName(name)) {
-            Object o = xBookmarksSupplier.getBookmarks().getByName(name);
-            XTextContent bm = (XTextContent) UnoRuntime.queryInterface(
-                XTextContent.class, o);
-            text.removeTextContent(bm);
-        }
-    }
-
-    public void removeReferenceMark(String name) throws Exception {
-        XReferenceMarksSupplier xSupplier = (XReferenceMarksSupplier) UnoRuntime.queryInterface(
-                XReferenceMarksSupplier.class, xCurrentComponent);
-        if (xSupplier.getReferenceMarks().hasByName(name)) {
-            Object o = xSupplier.getReferenceMarks().getByName(name);
-            XTextContent bm = (XTextContent) UnoRuntime.queryInterface(
-                XTextContent.class, o);
-            text.removeTextContent(bm);
-        }
-    }
-
-    /**
-     * Get the XTextRange corresponding to the named bookmark.
-     * @param name The name of the bookmark to find.
-     * @return The XTextRange for the bookmark.
-     * @throws Exception
-     */
-    public XTextRange getBookmarkRange(String name) throws Exception {
-        // query XBookmarksSupplier from document model and get bookmarks collection
-        XBookmarksSupplier xBookmarksSupplier = (XBookmarksSupplier) UnoRuntime.queryInterface(
-                XBookmarksSupplier.class, xCurrentComponent);
-        XNameAccess xNamedBookmarks = xBookmarksSupplier.getBookmarks();
-
-        // retrieve bookmark by name
-        //System.out.println("Name="+name+" : "+xNamedBookmarks.hasByName(name));
-        if (!xNamedBookmarks.hasByName(name))
-            return null;
-        Object foundBookmark = xNamedBookmarks.getByName(name);
-        XTextContent xFoundBookmark = (XTextContent) UnoRuntime.queryInterface(
-                XTextContent.class, foundBookmark);
-        return xFoundBookmark.getAnchor();
-    }
-
-    public void printBookmarkNames() throws Exception {
-        XBookmarksSupplier xBookmarksSupplier = (XBookmarksSupplier) UnoRuntime.queryInterface(
-                XBookmarksSupplier.class, xCurrentComponent);
-        XNameAccess xNamedBookmarks = xBookmarksSupplier.getBookmarks();
-        String[] names = xNamedBookmarks.getElementNames();
-        for (int i = 0; i < names.length; i++) {
-            System.out.println(i+". "+names[i]);
-        }
-    }
-
-
-    /**
-     * Focus the active OO document.
-     */
-    public void setFocus() {
-        xDesktop.getCurrentFrame().getContainerWindow().setFocus();
-    }
-
-
-    public void combineCiteMarkers(List<BibtexDatabase> databases, OOBibStyle style) throws Exception {
-        XReferenceMarksSupplier supplier = (XReferenceMarksSupplier) UnoRuntime.queryInterface(
-                XReferenceMarksSupplier.class, xCurrentComponent);
-        XNameAccess nameAccess = supplier.getReferenceMarks();
-        // TODO: doesn't work for citations in footnotes/tables
-        String[] names = getSortedReferenceMarks(nameAccess);
-
-
-        final XTextRangeCompare compare = (XTextRangeCompare) UnoRuntime.queryInterface
-                (XTextRangeCompare.class, text);
-
-        int piv = 0;
-        boolean madeModifications = false;
-        while (piv < names.length-1) {
-            XTextRange r1 = ((XTextContent) UnoRuntime.queryInterface
-                            (XTextContent.class, nameAccess.getByName(names[piv]))).getAnchor().getEnd();
-            XTextRange r2 = ((XTextContent) UnoRuntime.queryInterface
-                            (XTextContent.class,
-                                    nameAccess.getByName(names[piv+1]))).getAnchor().getStart();
-            if (r1.getText() != r2.getText()) {
-                piv++;
-                continue;
-            }
-            XTextCursor mxDocCursor = r1.getText().createTextCursorByRange(r1);
-            mxDocCursor.goRight((short)1, true);
-            boolean couldExpand = true;
-            while (couldExpand && (compare.compareRegionEnds(mxDocCursor, r2) > 0)) {
-                couldExpand = mxDocCursor.goRight((short)1, true);
-            }
-            String text = mxDocCursor.getString();
-            // Check if the string contains no line breaks and only whitespace:
-            if ((text.indexOf('\n') == -1) && (text.trim().length() == 0)) {
-
-                // If we are supposed to set character format for citations, test this before
-                // making any changes. This way we can throw an exception before any reference
-                // marks are removed, preventing damage to the user's document:
-                if (style.isFormatCitations()) {
-                    XPropertySet xCursorProps = (XPropertySet) UnoRuntime.queryInterface(
-                                        XPropertySet.class, mxDocCursor);
-                    String charStyle = style.getCitationCharacterFormat();
-                    try {
-                        xCursorProps.setPropertyValue("CharStyleName", charStyle);
-                    } catch (Throwable ex) {
-                        // Setting the character format failed, so we throw an exception that
-                        // will result in an error message for the user:
-                        throw new UndefinedCharacterFormatException(charStyle);
-                    }
-                }
-
-                List<String> keys = parseRefMarkName(names[piv]);
-                keys.addAll(parseRefMarkName(names[piv+1]));
-                removeReferenceMark(names[piv]);
-                removeReferenceMark(names[piv+1]);
-                ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>();
-                for (String key : keys) {
-                    bases: for (BibtexDatabase database : databases) {
-                        BibtexEntry entry = database.getEntryByKey(key);
-                        if (entry != null) {
-                            entries.add(OOUtil.createAdaptedEntry(entry));
-                            break bases;
-                        }
-                    }
-                }
-                Collections.sort(entries, new FieldComparator("year"));
-                StringBuilder sb = new StringBuilder();
-                int i=0;
-                for (BibtexEntry entry : entries) {
-                    if (i > 0)
-                        sb.append(",");
-                    sb.append(entry.getCiteKey());
-                    i++;
-                }
-                String keyString = sb.toString();
-                boolean inParenthesis = true;
-                // Insert bookmark:
-                String bName = getUniqueReferenceMarkName(keyString,
-                        inParenthesis ? AUTHORYEAR_PAR : AUTHORYEAR_INTEXT);
-                insertReferenceMark(bName, "tmp", mxDocCursor, true, style);
-                names[piv+1] = bName;
-                madeModifications = true;
-            }
-            piv++;
-        }
-        if (madeModifications) {
-            updateSortedReferenceMarks();
-            refreshCiteMarkers(databases, style);
-        }
-
-
-    }
-
-    public void testFrameHandling() throws Exception {
-
-        XController oldController = mxDoc.getCurrentController();
-        PropertyValue[] props = new PropertyValue[2];
-
-        props[0] = new PropertyValue();
-        props[0].Name = "Model";
-
-        props[0].Value = mxDoc.getCurrentController().getModel();
-        props[1] = new PropertyValue();
-        props[1].Name = "Hidden";
-        props[1].Value = true;
-
-        // argument xModel wins over URL.
-        System.out.println("her");
-        XComponent comp = xComponentLoader.loadComponentFromURL("private:factory/swriter",
-                           "_blank", 0, props);
-        System.out.println("her2");
-
-        XTextDocument newDoc = (XTextDocument)UnoRuntime.queryInterface(
-                XTextDocument.class, comp);
-        System.out.println("newDoc = "+newDoc);
-
-        // Controller of the hidden frame
-        XController xController = newDoc.getCurrentController();
-
-        XFrame xFrame = xController.getFrame();
-        XWindow xContainerWindow = xFrame.getContainerWindow();
-        XWindow xComponentWindow = xFrame.getComponentWindow();
-
-        //xContainerWindow.setVisible(true);
-        //xComponentWindow.setFocus();
-        //xContainerWindow.setVisible(false);
-        xFrame.dispose();
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import com.sun.star.awt.Point;
+import com.sun.star.awt.XWindow;
+import com.sun.star.beans.XPropertyContainer;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.comp.helper.Bootstrap;
+import com.sun.star.container.*;
+import com.sun.star.container.NoSuchElementException;
+import com.sun.star.document.XDocumentPropertiesSupplier;
+import com.sun.star.frame.*;
+import com.sun.star.lang.*;
+import com.sun.star.lang.Locale;
+import com.sun.star.text.*;
+import com.sun.star.uno.Any;
+import com.sun.star.uno.Type;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+import net.sf.jabref.*;
+import net.sf.jabref.export.layout.Layout;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Class for manipulating the Bibliography of the currently start document in OpenOffice.
+ */
+public class OOBibBase {
+
+    final static String BIB_SECTION_NAME = "JR_bib";
+    final static String BIB_SECTION_END_NAME = "JR_bib_end";
+    final static String BIB_CITATION = "JR_cite";
+    public final Pattern citePattern = Pattern.compile(BIB_CITATION+"\\d*_(\\d*)_(.*)");
+
+    final static int
+        AUTHORYEAR_PAR = 1,
+        AUTHORYEAR_INTEXT = 2,
+        INVISIBLE_CIT = 3;
+
+    final static String DEFAULT_CONNECTION_STRING = "uno:socket,host=localhost,port=2002;urp;StarOffice.ServiceManager";
+    final String[] BIB_TYPES = new String[] { "ARTICLE", "BOOK", "BOOKLET", "CONFERENCE",
+            "INBOOK", "INCOLLECTION", "INPROCEEDINGS", "JOURNAL", "MANUAL", "MASTERTHESIS",
+            "MISC", "PHDTHESIS", "PROCEEDINGS", "TECHREPORT", "UNPUBLISHED", "EMAIL", "WWW",
+            "CUSTOM1", "CUSTOM2", "CUSTOM3", "CUSTOM4", "CUSTOM5" };
+
+    
+    private XMultiServiceFactory mxDocFactory = null;
+    private XTextDocument mxDoc = null;
+    private XText text = null;
+    private XDesktop xDesktop = null;
+    XTextViewCursorSupplier xViewCursorSupplier = null;
+    XComponent xCurrentComponent = null;
+    XComponentLoader xComponentLoader = null;
+    XPropertyContainer userProperties = null;
+    XPropertySet propertySet = null;
+
+    private boolean atEnd;
+    private AlphanumericComparator entryComparator = new AlphanumericComparator();
+    private YearComparator yearComparator = new YearComparator();
+
+    private HashMap<String,String> uniquefiers = new HashMap<String, String>();
+
+    private String[] sortedReferenceMarks = null;
+
+    public OOBibBase(String pathToOO, boolean atEnd) throws Exception {
+        this.atEnd = atEnd;
+        xDesktop = simpleBootstrap(pathToOO);//getDesktop();
+        selectDocument();
+    }
+
+    public boolean isConnectedToDocument() {
+        return xCurrentComponent != null;
+    }
+
+    public String getCurrentDocumentTitle() {
+        if (mxDoc != null) {
+            try {
+                return String.valueOf(OOUtil.getProperty
+                        (mxDoc.getCurrentController().getFrame(), "Title"));
+            } catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+        else
+            return null;
+    }
+
+    public void selectDocument() throws Exception {
+        List<XTextDocument> ls = getTextDocuments();
+        XTextDocument selected = null;
+        if (ls.size() == 0) {
+            // No text documents found.
+            throw new Exception("No Writer documents found");
+        }
+        else if (ls.size() > 1) {
+            selected = OOUtil.selectComponent(null, xDesktop, ls);
+        }
+        else
+            selected = ls.get(0);
+
+        if (selected == null) {
+            return;
+        }
+        xCurrentComponent = (XComponent) UnoRuntime.queryInterface(
+                XComponent.class, selected);
+        mxDoc = selected;
+
+        com.sun.star.text.XDocumentIndexesSupplier indexesSupp = (com.sun.star.text.XDocumentIndexesSupplier) UnoRuntime.queryInterface(
+                 com.sun.star.text.XDocumentIndexesSupplier.class, xCurrentComponent);
+
+        XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, xCurrentComponent);
+        XController xController = xModel.getCurrentController();
+        xViewCursorSupplier =
+            (com.sun.star.text.XTextViewCursorSupplier) UnoRuntime.queryInterface(
+                    com.sun.star.text.XTextViewCursorSupplier.class, xController);
+
+        // get a reference to the body text of the document
+        text = mxDoc.getText();
+
+        // Access the text document's multi service factory:
+        mxDocFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, mxDoc);
+
+
+        XDocumentPropertiesSupplier supp =
+                UnoRuntime.queryInterface(XDocumentPropertiesSupplier.class, mxDoc);
+        userProperties = supp.getDocumentProperties().getUserDefinedProperties();
+        propertySet = UnoRuntime.queryInterface(XPropertySet.class, userProperties);
+
+    }
+
+    public XDesktop simpleBootstrap(String pathToExecutable) throws Exception {
+
+        ClassLoader loader = ClassLoader.getSystemClassLoader();
+        if (loader instanceof URLClassLoader) {
+            URLClassLoader cl = (URLClassLoader) loader;
+            Class sysclass = URLClassLoader.class;
+            try {
+
+                 Method method = sysclass.getDeclaredMethod("addURL", new Class[]{URL.class});
+                 method.setAccessible(true);
+                 method.invoke(cl, new Object[]{new File(pathToExecutable).toURI().toURL()});
+             } catch (Throwable t) {
+                 t.printStackTrace();
+                 throw new IOException("Error, could not add URL to system classloader");
+             }
+         } else {
+             System.out.println("Error occured, URLClassLoader expected but " +
+                     loader.getClass() + " received. Could not continue.");
+         }
+
+         //Get the office component context:
+         XComponentContext xContext = Bootstrap.bootstrap();
+         //Get the office service manager:
+         XMultiComponentFactory xServiceManager = xContext.getServiceManager();
+         //Create the desktop, which is the root frame of the
+         //hierarchy of frames that contain viewable components:
+         Object desktop = xServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", xContext);
+        XDesktop xD = (XDesktop) UnoRuntime.queryInterface(XDesktop.class, desktop);
+
+        xComponentLoader = (XComponentLoader)UnoRuntime.queryInterface(
+             XComponentLoader.class, desktop);
+
+        return xD;
+
+     }
+
+     public List<XTextDocument> getTextDocuments() throws Exception {
+         List<XTextDocument> res = new ArrayList<XTextDocument>();
+         XEnumerationAccess enumA = xDesktop.getComponents();
+         XEnumeration e = enumA.createEnumeration();
+
+         // TODO: http://api.openoffice.org/docs/DevelopersGuide/OfficeDev/OfficeDev.xhtml#1_1_3_2_1_2_Frame_Hierarchies
+
+         while (e.hasMoreElements()) {
+             Object o = e.nextElement();
+             XComponent comp = (XComponent) UnoRuntime.queryInterface(XComponent.class, o);
+             XTextDocument doc = (XTextDocument) UnoRuntime.queryInterface(
+                    XTextDocument.class, comp);
+             if (doc != null) {
+                res.add(doc);
+             }
+         }
+         return res;
+     }
+
+    public void testCustomProperties() throws Exception {
+        XDocumentPropertiesSupplier supp = (XDocumentPropertiesSupplier)UnoRuntime.queryInterface(
+                XDocumentPropertiesSupplier.class, mxDoc);
+        XPropertyContainer cont = supp.getDocumentProperties().getUserDefinedProperties();
+        XPropertySet set = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, cont);
+        try {
+            cont.addProperty("JR_cite_1_Danielsen1987", (short)0, new Any(Type.STRING, "Brum"));
+        } catch (Exception ex) {
+            System.out.println("property already exists");
+        }
+        System.out.println(set.getPropertyValue("Test").toString());
+
+    }
+
+    public void setCustomProperty(String property, String value) throws Exception {
+        if (propertySet.getPropertySetInfo().hasPropertyByName(property))
+            userProperties.removeProperty(property);
+        if (value != null)
+            userProperties.addProperty(property, com.sun.star.beans.PropertyAttribute.REMOVEABLE,
+                   new Any(Type.STRING, value));
+    }
+    
+    public String getCustomProperty(String property) throws Exception {
+        if (propertySet.getPropertySetInfo().hasPropertyByName(property))
+            return propertySet.getPropertyValue(property).toString();
+        else return null;
+
+    }
+
+     public void updateSortedReferenceMarks() throws Exception {
+         XReferenceMarksSupplier supplier = (XReferenceMarksSupplier) UnoRuntime.queryInterface(
+                XReferenceMarksSupplier.class, xCurrentComponent);
+        XNameAccess nameAccess = supplier.getReferenceMarks();
+        String[] names;
+        sortedReferenceMarks = getSortedReferenceMarks(nameAccess);
+     }
+     
+    /**
+     * This method inserts a cite marker in the text for the given BibtexEntry,
+     * and may refresh the bibliography.
+     * @param entries The entries to cite.
+     * @param database The database the entry belongs to.
+     * @param style The bibliography style we are using.
+     * @param inParenthesis Indicates whether it is an in-text citation or a citation in parenthesis.
+     *   This is not relevant if numbered citations are used.
+     * @param withText Indicates whether this should be a normal citation (true) or an empty
+     *   (invisible) citation (false).
+     * @param sync Indicates whether the reference list should be refreshed.
+     * @throws Exception
+     */
+    public void insertEntry(BibtexEntry[] entries, BibtexDatabase database,
+                            List<BibtexDatabase> allBases, OOBibStyle style,
+                            boolean inParenthesis, boolean withText, String pageInfo,
+                            boolean sync) throws Exception {
+
+        try {
+
+            XTextViewCursor xViewCursor = xViewCursorSupplier.getViewCursor();
+
+            if (entries.length > 1) {
+                if (style.getBooleanCitProperty("MultiCiteChronological"))
+                    Arrays.sort(entries, yearComparator);
+                else
+                    Arrays.sort(entries, entryComparator);
+            }
+
+            StringBuilder sb = new StringBuilder();
+            for (int i = 0; i < entries.length; i++) {
+                BibtexEntry entry = entries[i];
+                if (i > 0)
+                    sb.append(",");
+                sb.append(entry.getCiteKey());
+            }
+            String keyString = sb.toString();
+            // Insert bookmark:
+            String bName = getUniqueReferenceMarkName(keyString,
+                    withText ? (inParenthesis ? AUTHORYEAR_PAR : AUTHORYEAR_INTEXT) : INVISIBLE_CIT);
+            //XTextContent content = insertBookMark(bName, xViewCursor);
+
+            // If we should store metadata for page info, do that now:
+            if (pageInfo != null) {
+                System.out.println("Storing page info: "+pageInfo);
+                setCustomProperty(bName, pageInfo);
+            }
+
+
+            String citeText = style.isNumberEntries() ? "-" : style.getCitationMarker(entries, database, inParenthesis, null, null);
+
+            //System.out.println(text+" / "+xViewCursor.getText());
+            xViewCursor.getText().insertString(xViewCursor, " ", false);
+            if (style.isFormatCitations()) {
+                XPropertySet xCursorProps = (XPropertySet) UnoRuntime.queryInterface(
+                                    XPropertySet.class, xViewCursor);
+                String charStyle = style.getCitationCharacterFormat();
+                try {
+                    xCursorProps.setPropertyValue("CharStyleName", charStyle);
+                } catch (Throwable ex) {
+                    // Setting the character format failed, so we throw an exception that
+                    // will result in an error message for the user. Before that,
+                    // delete the space we inserted:
+                    xViewCursor.goLeft((short)1,true);
+                    xViewCursor.setString("");
+                    throw new UndefinedCharacterFormatException(charStyle);
+                }
+            }
+            xViewCursor.goLeft((short)1,false);
+            insertReferenceMark(bName, citeText, xViewCursor, withText, style);
+            //xViewCursor.collapseToEnd();
+
+            xViewCursor.collapseToEnd();
+            xViewCursor.goRight((short)1,false);
+
+            XTextRange position = xViewCursor.getEnd();
+
+            if (sync) {
+                // To account for numbering and for uniqiefiers, we must refresh the cite markers:
+                updateSortedReferenceMarks();
+                refreshCiteMarkers(allBases, style);
+
+                // Insert it at the current position:
+                rebuildBibTextSection(allBases, style);
+            }
+
+            // Go back to the relevant position:
+            try {
+                xViewCursor.gotoRange(position, false);
+            } catch (Exception ex) {
+                System.out.println("Catch");
+                ex.printStackTrace();
+            }
+        } catch (DisposedException ex) {
+            // We need to catch this one here because the OpenOfficePanel class is
+            // loaded before connection, and therefore cannot directly reference
+            // or catch a DisposedException (which is in a OO jar file).
+            throw new ConnectionLostException(ex.getMessage());
+        }
+    }
+
+    /**
+     * Refresh all cite markers in the document.
+     * @param databases The databases to get entries from.
+     * @param style The bibliography style to use.
+     * @return A list of those referenced BibTeX keys that could not be resolved.
+     * @throws Exception
+     */
+    public List<String> refreshCiteMarkers(List<BibtexDatabase> databases, OOBibStyle style) throws
+            Exception {
+        try {
+            return refreshCiteMarkersInternal(databases, style);
+        } catch (DisposedException ex) {
+            // We need to catch this one here because the OpenOfficePanel class is
+            // loaded before connection, and therefore cannot directly reference
+            // or catch a DisposedException (which is in a OO jar file).
+            throw new ConnectionLostException(ex.getMessage());
+        }
+    }
+
+    public XNameAccess getReferenceMarks() {
+        XReferenceMarksSupplier supplier = (XReferenceMarksSupplier) UnoRuntime.queryInterface(
+                XReferenceMarksSupplier.class, xCurrentComponent);
+        return supplier.getReferenceMarks();
+    }
+
+    public String[] getJabRefReferenceMarks(XNameAccess nameAccess) {
+        String[] names = nameAccess.getElementNames();
+        // Remove all reference marks that don't look like JabRef citations:
+        ArrayList<String> tmp = new ArrayList<String>();
+        for (int i = 0; i < names.length; i++) {
+            if (citePattern.matcher(names[i]).find())
+                tmp.add(names[i]);
+        }
+        names = tmp.toArray(new String[tmp.size()]);
+        return names;
+    }
+
+    private List<String> refreshCiteMarkersInternal(List<BibtexDatabase> databases, OOBibStyle style) throws
+            Exception {
+
+        List<String> cited = findCitedKeys();
+        HashMap<String,BibtexDatabase> linkSourceBase = new HashMap<String, BibtexDatabase>();
+        Map<BibtexEntry,BibtexDatabase> entries = findCitedEntries(databases, cited, linkSourceBase);
+
+        XNameAccess nameAccess = getReferenceMarks();
+
+        String[] names;
+        if (style.isSortByPosition()) {
+            // We need to sort the reference marks according to their order of appearance:
+            /*if (sortedReferenceMarks == null)
+                updateSortedReferenceMarks();*/
+            names = sortedReferenceMarks;
+        }
+        else if (style.isNumberEntries()) {
+            // We need to sort the reference marks according to the sorting of the bibliographic
+            // entries:
+            SortedMap<BibtexEntry,BibtexDatabase> newMap =
+                    new TreeMap<BibtexEntry, BibtexDatabase>(entryComparator);
+            for (BibtexEntry entry : entries.keySet())
+                newMap.put(entry, entries.get(entry));
+            entries = newMap;
+            // Rebuild the list of cited keys according to the sort order:
+            cited.clear();
+            for (Iterator<BibtexEntry> iterator = entries.keySet().iterator(); iterator.hasNext();) {
+                BibtexEntry entry = iterator.next();
+                cited.add(entry.getCiteKey());
+            }
+            names = nameAccess.getElementNames();
+        }
+        else {
+            /*if (sortedReferenceMarks == null)
+                updateSortedReferenceMarks();*/
+            names = sortedReferenceMarks;            
+        }
+
+        // Remove all reference marks that don't look like JabRef citations:
+        ArrayList<String> tmp = new ArrayList<String>();
+        for (int i = 0; i < names.length; i++) {
+            if (citePattern.matcher(names[i]).find())
+                tmp.add(names[i]);
+        }
+        names = tmp.toArray(new String[tmp.size()]);
+
+        HashMap<String,Integer> numbers = new HashMap<String, Integer>();
+        //HashMap<S
+        int lastNum = 0;
+        // First compute citation markers for all citations:
+        String[] citMarkers = new String[names.length];
+        String[][] normCitMarkers = new String[names.length][];
+        String[][] bibtexKeys = new String[names.length][];
+
+        int minGroupingCount = style.getIntCitProperty("MinimumGroupingCount");
+
+        int[] types = new int[names.length];
+        for (int i = 0; i < names.length; i++) {
+            Matcher m = citePattern.matcher(names[i]);
+            if (m.find()) {
+                String typeStr = m.group(1);
+                int type = Integer.parseInt(typeStr);
+                types[i] = type; // Remember the type in case we need to uniqiefy.
+                String[] keys = m.group(2).split(",");
+                bibtexKeys[i] = keys;
+                BibtexEntry[] cEntries = new BibtexEntry[keys.length];
+                for (int j = 0; j < cEntries.length; j++) {
+                    BibtexDatabase database = linkSourceBase.get(keys[j]);
+                    cEntries[j] = null;
+                    if (database != null)
+                        cEntries[j] = OOUtil.createAdaptedEntry(database.getEntryByKey(keys[j]));
+                    if (cEntries[j] == null) {
+                        System.out.println("Bibtex key not found : '"+keys[j]+"'");
+                        System.out.println("Problem with reference mark: '"+names[i]+"'");
+                        cEntries[j] = new UndefinedBibtexEntry(keys[j]);
+                        //throw new BibtexEntryNotFoundException(keys[j], "");
+                    }
+                }
+
+                String[] normCitMarker = new String[keys.length];
+                String citationMarker;
+                if (style.isBibtexKeyCiteMarkers()) {
+                    StringBuilder sb = new StringBuilder();
+                    normCitMarkers[i] = new String[keys.length];
+                    for (int j=0; j<keys.length; j++) {
+                        normCitMarkers[i][j] = cEntries[j].getCiteKey();
+                        sb.append(cEntries[j].getCiteKey());
+                        if (j < keys.length-1)
+                            sb.append(",");
+                    }
+                    citationMarker = sb.toString();
+                }
+                else if (style.isNumberEntries()) {
+                    if (style.isSortByPosition()) {
+                        // We have sorted the citation markers according to their order of appearance,
+                        // so we simply count up for each marker referring to a new entry:
+                        int[] num = new int[keys.length];
+                        for (int j=0; j<keys.length; j++) {
+                            if (cEntries[j] instanceof UndefinedBibtexEntry) {
+                                num[j] = -1;
+                            } else {
+                                num[j] = lastNum + 1;
+                                if (numbers.containsKey(keys[j]))
+                                    num[j] = numbers.get(keys[j]);
+                                else {
+                                    numbers.put(keys[j], num[j]);
+                                    lastNum = num[j];
+                                }
+                            }
+                        }
+                        citationMarker = style.getNumCitationMarker(num, minGroupingCount, false);
+                        for (int j=0; j<keys.length; j++)
+                            normCitMarker[j] = style.getNumCitationMarker(new int[] {num[j]},
+                                    minGroupingCount, false);
+                    }
+                    else {
+                        // We need to find the number of the cited entry in the bibliography,
+                        // and use that number for the cite marker:
+                        int[] num = findCitedEntryIndex(names[i], cited);
+
+                        if (num != null)
+                            citationMarker = style.getNumCitationMarker(num, minGroupingCount, false);
+                        else
+                            throw new BibtexEntryNotFoundException(names[i], Globals.lang("Could not resolve BibTeX entry for citation marker '%0'.", names[i]));
+
+                        for (int j=0; j<keys.length; j++)
+                            normCitMarker[j] = style.getNumCitationMarker(new int[] {num[j]},
+                                    minGroupingCount, false);
+                    }
+                }
+                else {
+
+                    if (cEntries.length > 1) {
+                        if (style.getBooleanCitProperty("MultiCiteChronological"))
+                            Arrays.sort(cEntries, yearComparator);
+                        else
+                            Arrays.sort(cEntries, entryComparator);
+                        // Update key list to match the new sorting:
+                        for (int j = 0; j < cEntries.length; j++) {
+                            bibtexKeys[i][j] = cEntries[j].getCiteKey();
+                        }
+                    }
+                    /*System.out.println(style.getBooleanCitProperty("MultiCiteChronological"));
+                    for (int j = 0; j < cEntries.length; j++) {
+                        BibtexEntry cEntry = cEntries[j];
+                        System.out.println(cEntry.getCiteKey());
+                    } */
+
+                    citationMarker = style.getCitationMarker(cEntries, entries.get(cEntries), type == AUTHORYEAR_PAR, null, null);
+                    // We need "normalized" (in parenthesis) markers for uniqueness checking purposes:
+                    for (int j=0; j<cEntries.length; j++)
+                        normCitMarker[j] = style.getCitationMarker(cEntries[j], entries.get(cEntries), true, null, -1);
+                }
+                citMarkers[i] = citationMarker;
+                normCitMarkers[i] = normCitMarker;
+
+            }
+
+
+        }
+
+        uniquefiers.clear();
+        if (!style.isBibtexKeyCiteMarkers() && !style.isNumberEntries()) {
+            // See if there are duplicate citations marks referring to different entries. If so, we need to
+            // use uniquefiers:
+            HashMap<String,List<String>> refKeys = new HashMap<String, List<String>>();
+            HashMap<String,List<Integer>> refNums = new HashMap<String, List<Integer>>();
+            for (int i = 0; i < citMarkers.length; i++) {
+                String[] markers = normCitMarkers[i]; // compare normalized markers, since the actual markers can be different
+                for (int j=0; j<markers.length; j++) {
+                    String marker = markers[j];
+                    if (!refKeys.containsKey(marker)) {
+                        List<String> l = new ArrayList<String>(1);
+                        l.add(bibtexKeys[i][j]);
+                        refKeys.put(marker, l);
+                        List<Integer> l2 = new ArrayList<Integer>(1);
+                        l2.add(i);
+                        refNums.put(marker, l2);
+                    }
+                    else {
+                        // Ok, we have seen this exact marker before.
+                        if (!refKeys.get(marker).contains(bibtexKeys[i][j])) {
+                            // ... but not for this entry.
+                            refKeys.get(marker).add(bibtexKeys[i][j]);
+                            refNums.get(marker).add(i);
+                        }
+                    }
+                }
+            }
+            // Go through the collected lists and see where we need to uniquefy:
+            for (String marker : refKeys.keySet()) {
+                List<String> keys = refKeys.get(marker);
+                if (keys.size() > 1) {
+                    // This marker appears for more than one unique entry:
+                    int uniq = 'a';
+                    for (String key : keys) {
+                        // Update the map of uniquefiers for the benefit of both the following generation of new
+                        // citation markers, and for the method that builds the bibliography:
+                        uniquefiers.put(key, String.valueOf((char)uniq));
+                        uniq++;
+                    }
+                }
+            }
+
+            // Finally, go through all citation markers, and update those referring to entries in our current list:
+            int maxAuthorsFirst = style.getIntCitProperty("MaxAuthorsFirst");
+            HashSet<String> seenBefore = new HashSet<String>();
+            for (int j = 0; j < bibtexKeys.length; j++) {
+                boolean needsChange = false;
+                int[] firstLimAuthors = new int[bibtexKeys[j].length];
+                String[] uniquif = new String[bibtexKeys[j].length];
+                BibtexEntry[] cEntries = new BibtexEntry[bibtexKeys[j].length];
+                for (int k=0; k<bibtexKeys[j].length; k++) {
+                    firstLimAuthors[k] = -1;
+                    if (maxAuthorsFirst > 0) {
+                        if (!seenBefore.contains(bibtexKeys[j][k])) {
+                            firstLimAuthors[k] = maxAuthorsFirst;
+                        }
+                        seenBefore.add(bibtexKeys[j][k]);
+                    }
+                    String uniq = uniquefiers.get(bibtexKeys[j][k]);
+                    if ((uniq != null) && (uniq.length() >= 0)) {
+                        needsChange = true;
+                        BibtexDatabase database = linkSourceBase.get(bibtexKeys[j][k]);
+                        if (database != null)
+                            cEntries[k] = OOUtil.createAdaptedEntry(database.getEntryByKey(bibtexKeys[j][k]));
+                        uniquif[k] = uniq;
+                    }
+                    else if (firstLimAuthors[k] > 0) {
+                        needsChange = true;
+                        BibtexDatabase database = linkSourceBase.get(bibtexKeys[j][k]);
+                        if (database != null)
+                            cEntries[k] = OOUtil.createAdaptedEntry(database.getEntryByKey(bibtexKeys[j][k]));
+                        uniquif[k] = "";
+                    }
+                    else {
+                        BibtexDatabase database = linkSourceBase.get(bibtexKeys[j][k]);
+                        if (database != null)
+                            cEntries[k] = OOUtil.createAdaptedEntry(database.getEntryByKey(bibtexKeys[j][k]));
+                        uniquif[k] = "";
+                    }
+                }
+                if (needsChange) {
+                    citMarkers[j] = style.getCitationMarker(cEntries, entries.get(cEntries), types[j] == AUTHORYEAR_PAR,
+                        uniquif, firstLimAuthors);
+                }
+            }
+        }
+
+        // Refresh all reference marks with the citation markers we computed:
+        boolean hadBibSection = getBookmarkRange(BIB_SECTION_NAME) != null;
+        // Check if we are supposed to set a character format for citations:
+        boolean mustTestCharFormat = style.isFormatCitations();
+        for (int i = 0; i < names.length; i++) {
+            Object o = nameAccess.getByName(names[i]);
+            XTextContent bm = (XTextContent) UnoRuntime.queryInterface
+                    (XTextContent.class, o);
+
+            XTextCursor cursor = bm.getAnchor().getText().createTextCursorByRange(bm.getAnchor());
+
+            if (mustTestCharFormat) {
+                // If we are supposed to set character format for citations, must run a test before we
+                // delete old citation markers. Otherwise, if the specified character format doesn't
+                // exist, we end up deleting the markers before the process crashes due to a the missing
+                // format, with catastrophic consequences for the user.
+                mustTestCharFormat = false; // need to do this only once
+                XPropertySet xCursorProps = (XPropertySet) UnoRuntime.queryInterface(
+                                    XPropertySet.class, cursor);
+                String charStyle = style.getCitationCharacterFormat();
+                try {
+                    xCursorProps.setPropertyValue("CharStyleName", charStyle);
+                } catch (Throwable ex) {
+                    throw new UndefinedCharacterFormatException(charStyle);
+                }
+            }
+
+
+            text.removeTextContent(bm);
+
+            insertReferenceMark(names[i], citMarkers[i], cursor, types[i] != INVISIBLE_CIT, style);
+            if (hadBibSection && (getBookmarkRange(BIB_SECTION_NAME) == null)) {
+                // We have overwritten the marker for the start of the reference list.
+                // We need to add it again.
+                cursor.collapseToEnd();
+                OOUtil.insertParagraphBreak(text, cursor);
+                insertBookMark(BIB_SECTION_NAME, cursor);
+                /* The following is for resetting the paragraph format, but should probably
+                   not be done.
+                   
+                XParagraphCursor parCursor =
+                    (XParagraphCursor)UnoRuntime.queryInterface(
+                    java.lang.Class.forName("com.sun.star.text.XParagraphCursor"), cursor);
+                parCursor.gotoPreviousParagraph(false);
+                parCursor.gotoStartOfParagraph(false);
+                parCursor.gotoEndOfParagraph(true);
+                XPropertySet props = (XPropertySet) UnoRuntime.queryInterface(
+                    XPropertySet.class, parCursor);
+
+                try {
+                    props.setPropertyValue("ParaStyleName", "Default");
+                } catch (com.sun.star.lang.IllegalArgumentException ex) {
+                    throw new UndefinedParagraphFormatException("Default");
+                }
+                */
+
+            }
+        }
+
+        ArrayList<String> unresolvedKeys = new ArrayList<String>();
+        for (BibtexEntry entry : entries.keySet()) {
+            if (entry instanceof UndefinedBibtexEntry) {
+                String key = ((UndefinedBibtexEntry)entry).getKey();
+                if (!unresolvedKeys.contains(key))
+                    unresolvedKeys.add(key);
+            }
+        }
+        return unresolvedKeys;
+    }
+
+    public String[] getSortedReferenceMarks(final XNameAccess nameAccess) throws Exception {
+        /*
+        PropertyValue[] props = new PropertyValue[2];
+
+        props[0] = new PropertyValue();
+        props[0].Name = "Model";
+
+        props[0].Value = mxDoc.getCurrentController().getModel();
+        props[1] = new PropertyValue();
+        props[1].Name = "Hidden";
+        props[1].Value = true;
+
+        // argument xModel wins over URL.
+        System.out.println("her");
+        XComponent comp = xComponentLoader.loadComponentFromURL("private:factory/swriter",
+                           "_blank", 0, props);
+        System.out.println("her2");
+
+        XTextDocument newDoc = (XTextDocument)UnoRuntime.queryInterface(
+                XTextDocument.class, comp);
+        System.out.println("newDoc = "+newDoc);
+
+        // Controller of the hidden frame
+        XController xController = newDoc.getCurrentController();
+
+        XFrame xFrame = xController.getFrame();
+        XWindow xContainerWindow = xFrame.getContainerWindow();
+        XWindow xComponentWindow = xFrame.getComponentWindow();
+
+        xContainerWindow.setVisible(true);
+        xComponentWindow.setFocus();
+        xContainerWindow.setVisible(false);
+        */
+        XTextViewCursorSupplier css = (XTextViewCursorSupplier)UnoRuntime.queryInterface(
+                XTextViewCursorSupplier.class, mxDoc.getCurrentController());
+
+        XTextViewCursor tvc = css.getViewCursor();
+        XTextRange initialPos = tvc.getStart();
+        String[] names = nameAccess.getElementNames();
+        Point[] positions = new Point[names.length];
+        for (int i = 0; i < names.length; i++) {
+            String name = names[i];
+            XTextContent tc = (XTextContent) UnoRuntime.queryInterface
+                    (XTextContent.class, nameAccess.getByName(name));
+            XTextRange r = tc.getAnchor();
+            // Check if we are inside a footnote:
+            if (UnoRuntime.queryInterface(XFootnote.class, r.getText()) != null) {
+                // Find the linking footnote marker:
+                XFootnote footer = (XFootnote)UnoRuntime.queryInterface(XFootnote.class, r.getText());
+                // The footnote's anchor gives the correct position in the text:
+                r = footer.getAnchor();
+            }
+
+            positions[i] = findPosition(tvc, r);
+        }
+        TreeSet<ComparableMark> set = new TreeSet<ComparableMark>();
+        for (int i = 0; i < positions.length; i++) {
+            set.add(new ComparableMark(names[i], positions[i]));
+        }
+        int i=0;
+        for (Iterator<ComparableMark> iterator = set.iterator(); iterator.hasNext();) {
+            ComparableMark mark = iterator.next();
+            //System.out.println(mark.getPosition().X+" -- "+mark.getPosition().Y+" : "+mark.getName());
+            names[i++] = mark.getName();
+        }
+        tvc.gotoRange(initialPos, false);
+        //xFrame.dispose();
+
+        return names;
+        
+        /*final XTextRangeCompare compare = (XTextRangeCompare) UnoRuntime.queryInterface
+                (XTextRangeCompare.class, text);
+        Arrays.sort(names, new Comparator<String>() {
+            public int compare(String o1, String o2) {
+                try {
+                    XTextRange r1 = ((XTextContent) UnoRuntime.queryInterface
+                            (XTextContent.class, nameAccess.getByName(o1))).getAnchor();
+                    XTextRange r2 = ((XTextContent) UnoRuntime.queryInterface
+                            (XTextContent.class, nameAccess.getByName(o2))).getAnchor();
+
+                    try {
+                        return compare.compareRegionStarts(r2, r1);
+                    } catch (com.sun.star.lang.IllegalArgumentException ex) {
+                        // problem comparing reference marks in different areas (text, table, etc.)
+                        return 0;
+                    }
+                } catch (Exception ex) {
+                    ex.printStackTrace();
+                    return 0;
+                }
+            }
+        });
+        return names;*/
+    }
+
+    public void rebuildBibTextSection(List<BibtexDatabase> databases, OOBibStyle style)
+            throws Exception {
+        List<String> cited = findCitedKeys();
+        HashMap<String,BibtexDatabase> linkSourceBase = new HashMap<String, BibtexDatabase>();
+        Map<BibtexEntry,BibtexDatabase> entries = findCitedEntries
+                (databases, cited, linkSourceBase);
+        
+        String[] names = sortedReferenceMarks;
+        
+        if (style.isSortByPosition()) {
+            // We need to sort the entries according to their order of appearance:
+           entries = getSortedEntriesFromSortedRefMarks(names, entries, linkSourceBase);
+        }
+        else {
+            SortedMap<BibtexEntry,BibtexDatabase> newMap =
+                    new TreeMap<BibtexEntry, BibtexDatabase>(entryComparator);
+            for (BibtexEntry entry : entries.keySet())
+                newMap.put(entry, entries.get(entry));
+            entries = newMap;
+        }
+        clearBibTextSectionContent2();
+        populateBibTextSection(entries, style);
+    }
+
+
+
+    public String getUniqueReferenceMarkName(String bibtexKey, int type) {
+        XReferenceMarksSupplier supplier = (XReferenceMarksSupplier) UnoRuntime.queryInterface(
+                XReferenceMarksSupplier.class, xCurrentComponent);
+        XNameAccess xNamedRefMarks = supplier.getReferenceMarks();
+        int i=0;
+        String name = BIB_CITATION+"_"+type+"_"+bibtexKey;
+        while (xNamedRefMarks.hasByName(name)) {
+            name = BIB_CITATION+i+"_"+type+"_"+bibtexKey;
+            i++;
+        }
+        return name;
+    }
+
+    public LinkedHashMap<BibtexEntry,BibtexDatabase> findCitedEntries
+            (List<BibtexDatabase> databases, List<String> keys,
+             HashMap<String,BibtexDatabase> linkSourceBase) {
+        LinkedHashMap<BibtexEntry,BibtexDatabase> entries = new LinkedHashMap<BibtexEntry, BibtexDatabase>();
+        for (String key : keys) {
+            boolean found = false;
+            bases: for (BibtexDatabase database : databases) {
+                BibtexEntry entry = database.getEntryByKey(key);
+                if (entry != null) {
+                    entries.put(OOUtil.createAdaptedEntry(entry), database);
+                    linkSourceBase.put(key, database);
+                    found = true;
+                    break bases;
+                }
+            }
+
+            if (!found)
+                entries.put(new UndefinedBibtexEntry(key), null);
+        }
+        return entries;
+    }
+
+    public List<String> findCitedKeys() throws com.sun.star.container.NoSuchElementException, WrappedTargetException {
+
+        XReferenceMarksSupplier supplier = (XReferenceMarksSupplier) UnoRuntime.queryInterface(
+                XReferenceMarksSupplier.class, xCurrentComponent);
+        XNameAccess xNamedMarks = supplier.getReferenceMarks();
+        String[] names = xNamedMarks.getElementNames();
+        ArrayList<String> keys = new ArrayList<String>();
+        for (int i = 0; i < names.length; i++) {
+            Object bookmark = xNamedMarks.getByName(names[i]);
+            XTextContent xTextContent = (XTextContent) UnoRuntime.queryInterface(
+                    XTextContent.class, bookmark);
+
+            String name = names[i];
+            List<String> newKeys = parseRefMarkName(name);
+            for (String key : newKeys)
+                if (!keys.contains(key))
+                    keys.add(key);
+        }
+
+        return keys;
+    }
+
+    public LinkedHashMap<BibtexEntry,BibtexDatabase> getSortedEntriesFromSortedRefMarks
+            (String[] names,
+            Map<BibtexEntry,BibtexDatabase> entries,
+            HashMap<String,BibtexDatabase> linkSourceBase)
+            throws BibtexEntryNotFoundException {
+        
+        LinkedHashMap<BibtexEntry,BibtexDatabase> newList = new LinkedHashMap<BibtexEntry,BibtexDatabase>();
+        HashMap<BibtexEntry,BibtexEntry> adaptedEntries = new HashMap<BibtexEntry,BibtexEntry>();
+        for (int i = 0; i < names.length; i++) {
+            Matcher m = citePattern.matcher(names[i]);
+            if (m.find()) {
+                String[] keys = m.group(2).split(",");
+                for (int j = 0; j < keys.length; j++) {
+                    BibtexDatabase database = linkSourceBase.get(keys[j]);
+                    BibtexEntry origEntry = null;
+                    if (database != null) origEntry = database.getEntryByKey(keys[j]);
+                    if (origEntry == null) {
+                        System.out.println("Bibtex key not found : '"+keys[j]+"'");
+                        System.out.println("Problem with reference mark: '"+names[i]+"'");
+                        newList.put(new UndefinedBibtexEntry(keys[j]), null);
+                        //throw new BibtexEntryNotFoundException(keys[j], "");
+                    } else {
+                        BibtexEntry entry = adaptedEntries.get(origEntry);
+                        if (entry == null) {
+                            entry = OOUtil.createAdaptedEntry(origEntry);
+                            adaptedEntries.put(origEntry, entry);
+                        }
+                        if (!newList.containsKey(entry)) {
+                            newList.put(entry, database);
+                        }
+                    }
+                }
+            }
+        }
+
+        return newList;
+    }
+    
+    public Point findPosition(XTextViewCursor cursor, XTextRange range) {
+        cursor.gotoRange(range, false);
+        return cursor.getPosition();
+    }
+
+    /**
+     * Extract the list of bibtex keys from a reference mark name.
+     * @param name The reference mark name.
+     * @return The list of bibtex keys encoded in the name.
+     */
+    public List<String> parseRefMarkName(String name) {
+        ArrayList<String> keys = new ArrayList<String>();
+        Matcher m = citePattern.matcher(name);
+        if (m.find()) {
+            String[] keystring = m.group(2).split(",");
+            for (int j = 0; j < keystring.length; j++) {
+                if (!keys.contains(keystring[j]))
+                    keys.add(keystring[j]);
+            }
+        }
+        return keys;
+    }
+
+    /**
+     * Resolve the bibtex key from a citation reference marker name, and look up
+     * the index of the key in a list of keys.
+     * @param citRefName The name of the ReferenceMark representing the citation.
+     * @param keys A List of bibtex keys representing the entries in the bibliography.
+     * @return the indices of the cited keys, -1 if a key is not found. Returns null if the ref name
+     *   could not be resolved as a citation.
+     */
+    public int[] findCitedEntryIndex(String citRefName, List<String> keys) {
+        Matcher m = citePattern.matcher(citRefName);
+        if (m.find()) {
+            String[] keyStrings = m.group(2).split(",");
+            int[] res = new int[keyStrings.length];
+            for (int i=0; i<keyStrings.length; i++) {
+                int ind = keys.indexOf(keyStrings[i]);
+                res[i] = ind != -1 ? 1+ind : -1;
+            }
+            return res;
+        }
+        else
+            return null;
+    }
+
+    public String getCitationContext(XNameAccess nameAccess, String refMarkName,
+                                     int charBefore, int charAfter,
+                                     boolean htmlMarkup) throws Exception {
+        Object o = nameAccess.getByName(refMarkName);
+        XTextContent bm = (XTextContent) UnoRuntime.queryInterface
+                (XTextContent.class, o);
+
+        XTextCursor cursor = bm.getAnchor().getText().createTextCursorByRange(bm.getAnchor());
+        String citPart = cursor.getString();
+        int flex = 8;
+        for (int i=0; i<charBefore; i++) {
+            try {
+                cursor.goLeft((short)1, true);
+                if ((i >= charBefore-flex) && Character.isWhitespace(cursor.getString().charAt(0)))
+                    break;
+            } catch (Exception ex) {
+                ex.printStackTrace();
+            }
+        }
+        int length = cursor.getString().length();
+        int added = length - citPart.length();
+        cursor.collapseToStart();
+        for (int i=0; i<charAfter+length; i++) {
+            try {
+                cursor.goRight((short)1, true);
+                if (i >= charAfter+length-flex) {
+                    String strNow = cursor.getString();
+                    if (Character.isWhitespace(strNow.charAt(strNow.length()-1)))
+                        break;
+                }
+            } catch (Exception ex) {
+                ex.printStackTrace();
+            }
+        }
+
+        String result = cursor.getString();
+        if (htmlMarkup) {
+            result = result.substring(0, added)+"<b>"+citPart+
+                    "</b>"+result.substring(length);
+        }
+        return result.trim();
+    }
+
+    public void insertFullReferenceAtCursor(XTextCursor cursor, Map<BibtexEntry,BibtexDatabase> entries,
+                                            OOBibStyle style, String parFormat)
+            throws UndefinedParagraphFormatException, Exception {
+        // If we don't have numbered entries, we need to sort the entries before adding them:
+        if (!style.isSortByPosition()) {
+            Map<BibtexEntry,BibtexDatabase> newMap = new TreeMap<BibtexEntry,BibtexDatabase>(entryComparator);
+            for (BibtexEntry entry : entries.keySet())
+                newMap.put(entry, entries.get(entry));
+            entries = newMap;
+        }
+        int number = 1;
+        for (BibtexEntry entry : entries.keySet()) {
+            if (entry instanceof UndefinedBibtexEntry)
+                continue;
+            OOUtil.insertParagraphBreak(text, cursor);
+            if (style.isNumberEntries()) {
+                int minGroupingCount = style.getIntCitProperty("MinimumGroupingCount");
+                OOUtil.insertTextAtCurrentLocation(text, cursor,
+                        style.getNumCitationMarker(new int[] {number++}, minGroupingCount, true),
+                        false, false, false, false, false, false);
+            }
+            Layout layout = style.getReferenceFormat(entry.getType().getName());
+            try {
+                layout.setPostFormatter(OOUtil.postformatter);
+            } catch (NoSuchMethodError ex) {
+                
+            }
+            OOUtil.insertFullReferenceAtCurrentLocation(text, cursor, layout, parFormat, entry,
+                    entries.get(entry), uniquefiers.get(entry.getCiteKey()));
+        }
+        
+    }
+
+    public void insertFullReferenceAtViewCursor(Map<BibtexEntry,BibtexDatabase> entries,
+                                                OOBibStyle style, String parFormat) throws Exception {
+        XTextViewCursor xViewCursor = xViewCursorSupplier.getViewCursor();
+        insertFullReferenceAtCursor(xViewCursor, entries, style, parFormat);
+    }
+
+
+    public void insertMarkedUpTextAtViewCursor(String lText, String parFormat) throws Exception {
+        XTextViewCursor xViewCursor = xViewCursorSupplier.getViewCursor();
+        XTextCursor cursor = text.createTextCursorByRange(xViewCursor.getEnd());
+        OOUtil.insertOOFormattedTextAtCurrentLocation(text,cursor, lText, parFormat);
+        
+    }
+
+    /**
+     * This method creates and inserts an XTextSection named as determined by the
+     * string BIB_SECTION_NAME.
+     * @param end true to indicate that the section should be put at the end of the document,
+     *  false to indicate that it should be put at the cursor position.
+     * @return true if the bibliography already existed, false otherwise..
+     * @throws Exception
+     */
+    public boolean createBibTextSection(boolean end) throws Exception {
+        // Check if there already is a bookmarked section:
+        XBookmarksSupplier bSupp = (XBookmarksSupplier) UnoRuntime.queryInterface(
+                 XBookmarksSupplier.class, mxDoc);
+        if (bSupp.getBookmarks().hasByName(BIB_SECTION_NAME)) {
+            System.out.println("Found existing JabRef bookmark");
+            return true;
+        }
+        XTextCursor mxDocCursor = text.createTextCursor();
+        if (end)
+            mxDocCursor.gotoEnd(false);
+        OOUtil.insertParagraphBreak(text, mxDocCursor);
+        insertBookMark(BIB_SECTION_NAME, mxDocCursor);
+        return false;
+    }
+
+    public void createBibTextSection2(boolean end) throws Exception {
+
+        XTextCursor mxDocCursor = text.createTextCursor();
+        if (end)
+            mxDocCursor.gotoEnd(false);
+        OOUtil.insertParagraphBreak(text, mxDocCursor);
+        // Create a new TextSection from the document factory and access it's XNamed interface
+        XNamed xChildNamed = UnoRuntime.queryInterface(
+          XNamed.class, mxDocFactory.createInstance("com.sun.star.text.TextSection"));
+        // Set the new sections name to 'Child_Section'
+        xChildNamed.setName(BIB_SECTION_NAME);
+        // Access the Child_Section's XTextContent interface and insert it into the document
+         XTextContent xChildSection = (XTextContent) UnoRuntime.queryInterface(
+             XTextContent.class, xChildNamed);
+         text.insertTextContent (mxDocCursor, xChildSection, false);
+        
+    }
+
+    public void clearBibTextSectionContent2() throws Exception {
+
+        // Check if the section exists:
+        boolean exists = false;
+        XTextSectionsSupplier supp = UnoRuntime.queryInterface(
+                XTextSectionsSupplier.class, mxDoc);
+        try {
+            XTextSection section = (XTextSection)((Any)supp.getTextSections().getByName(BIB_SECTION_NAME)).getObject();
+            // Clear it:
+            XTextCursor cursor = text.createTextCursorByRange(section.getAnchor());
+            cursor.gotoRange(section.getAnchor(), false);
+            cursor.setString("");
+
+        } catch (NoSuchElementException ex) {
+            createBibTextSection2(atEnd);
+        }
+    }
+
+    public void clearBibTextSectionContent() throws Exception {
+        // Get a range comparator:
+        XTextRangeCompare compare = (XTextRangeCompare) UnoRuntime.queryInterface
+                (XTextRangeCompare.class, text);
+        // Find the bookmarks for the bibliography:
+        XTextRange range = getBookmarkRange(BIB_SECTION_NAME);
+        if (range == null) {
+            createBibTextSection(atEnd);
+        }
+
+
+        XTextRange rangeEnd = getBookmarkRange(BIB_SECTION_END_NAME);
+        if (rangeEnd == null) {
+            // No end bookmark. This means that there is no bibliography.
+            return;
+        }
+        // Get a paragraph cursor at the start of the bibliography:
+        //System.out.println("text="+text+" range="+range);
+        XTextCursor mxDocCursor = text.createTextCursorByRange(range.getEnd());
+        mxDocCursor.goRight((short)1, true);
+        boolean couldExpand = true;
+        while (couldExpand && (compare.compareRegionEnds(mxDocCursor, rangeEnd) > 0)) {
+            couldExpand = mxDocCursor.goRight((short)1, true);
+        }
+        // Finally, clear the bibliography:
+        mxDocCursor.setString("");
+        mxDocCursor.collapseToStart();
+        removeBookMark(BIB_SECTION_END_NAME);
+        // If we lost the start bookmark, recreate it:
+        if (getBookmarkRange(BIB_SECTION_NAME) == null)
+            insertBookMark(BIB_SECTION_NAME, mxDocCursor);
+    }
+
+    public void populateBibTextSection(Map<BibtexEntry,BibtexDatabase> entries,
+                                       OOBibStyle style)
+            throws UndefinedParagraphFormatException, Exception {
+        XTextSectionsSupplier supp = UnoRuntime.queryInterface(XTextSectionsSupplier.class, mxDoc);
+        XTextSection section = (XTextSection)((Any)supp.getTextSections().getByName(BIB_SECTION_NAME))
+                    .getObject();
+        XTextCursor cursor = text.createTextCursorByRange(section.getAnchor());
+        OOUtil.insertTextAtCurrentLocation(text, cursor, (String)style.getProperty("Title"),
+                (String)style.getProperty("ReferenceHeaderParagraphFormat"));
+        insertFullReferenceAtCursor(cursor, entries, style,
+                (String)style.getProperty("ReferenceParagraphFormat"));
+        insertBookMark(BIB_SECTION_END_NAME, cursor);
+    }
+
+    public XTextContent insertBookMark(String name, XTextCursor position) throws Exception {
+        Object bookmark = mxDocFactory.createInstance("com.sun.star.text.Bookmark");
+        // name the bookmark
+        XNamed xNamed = (XNamed) UnoRuntime.queryInterface(
+                XNamed.class, bookmark);
+        xNamed.setName(name);
+        // get XTextContent interface
+        XTextContent xTextContent = (XTextContent) UnoRuntime.queryInterface(
+                XTextContent.class, bookmark);
+        // insert bookmark at the end of the document
+        // instead of mxDocText.getEnd you could use a text cursor's XTextRange interface or any XTextRange
+        text.insertTextContent(position, xTextContent, true);
+        position.collapseToEnd();
+        return xTextContent;
+    }
+
+    public void insertReferenceMark(String name, String citText, XTextCursor position, boolean withText,
+                               OOBibStyle style)
+            throws Exception {
+
+        // Check if there is "page info" stored for this citation. If so, insert it into 
+        // the citation text before inserting the citation:
+        String pageInfo = getCustomProperty(name);
+        if (pageInfo != null) {
+            citText = style.insertPageInfo(citText, pageInfo);
+        }
+
+        Object bookmark = mxDocFactory.createInstance("com.sun.star.text.ReferenceMark");
+        // Name the reference
+        XNamed xNamed = UnoRuntime.queryInterface(XNamed.class, bookmark);
+        xNamed.setName(name);
+        // get XTextContent interface
+        if (true) {
+
+            XTextContent xTextContent = UnoRuntime.queryInterface(XTextContent.class, bookmark);
+            if (withText) {
+                position.setString(citText);
+                XPropertySet xCursorProps = UnoRuntime.queryInterface(XPropertySet.class, position);
+
+                // Set language to [None]:
+                xCursorProps.setPropertyValue("CharLocale", new Locale("zxx", "", ""));
+                if (style.isFormatCitations()) {
+                    String charStyle = style.getCitationCharacterFormat();
+                    try {
+                        xCursorProps.setPropertyValue("CharStyleName", charStyle);
+                    } catch (Throwable ex) {
+                        throw new UndefinedCharacterFormatException(charStyle);
+                    }
+                }
+            }
+            else
+                position.setString("");
+
+            position.getText().insertTextContent(position, xTextContent, true);
+
+            // Check if we should italicize the "et al." string in citations:
+            boolean italicize = style.getBooleanCitProperty("ItalicEtAl");
+            if (italicize) {
+                String etAlString = style.getStringCitProperty("EtAlString");
+                int index = citText.indexOf(etAlString);
+                if (index >= 0) {
+                    italicizeOrBold(position, true, index, index+etAlString.length());
+                }
+            }
+
+        }
+        position.collapseToEnd();
+
+    }
+
+    private void italicizeOrBold(XTextCursor position, boolean italicize,
+                                 int start, int end) throws Exception {
+        XTextRange rng = position.getStart();
+        XTextCursor cursor = position.getText().createTextCursorByRange(rng);
+        cursor.goRight((short)start, false);
+        cursor.goRight((short)(end-start), true);
+        XPropertySet xcp = UnoRuntime.queryInterface(XPropertySet.class, cursor);
+        if (italicize)
+            xcp.setPropertyValue("CharPosture", com.sun.star.awt.FontSlant.ITALIC);
+        else
+            xcp.setPropertyValue("CharWeight", com.sun.star.awt.FontWeight.BOLD);
+    }
+
+    public void testFootnote() throws Exception {
+        XTextViewCursor xViewCursor = xViewCursorSupplier.getViewCursor();
+        insertFootnote("jabbes", "Cite text", xViewCursor);
+    }
+
+    public void insertFootnote(String name, String citText, XTextCursor position) throws Exception {
+        XFootnote xFootnote = (XFootnote) UnoRuntime.queryInterface( XFootnote.class,
+            mxDocFactory.createInstance("com.sun.star.text.Footnote"));
+        xFootnote.setLabel("");
+        XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xFootnote);
+        props.setPropertyValue("ReferenceId", name); // doesn't work: short data type
+        System.out.println(props.getPropertyValue("ReferenceId"));
+        XTextContent xContent = (XTextContent)UnoRuntime.queryInterface(
+            XTextContent.class, xFootnote);
+        text.insertTextContent (position, xContent, false);
+        XSimpleText xSimple = (XSimpleText)UnoRuntime.queryInterface(XSimpleText.class, xFootnote);
+        XTextRange xRange = (XTextRange)UnoRuntime.queryInterface(XTextRange.class, xSimple.createTextCursor());
+        xSimple.insertString (xRange, citText, false);
+    }
+
+    public void removeBookMark(String name) throws Exception {
+        XBookmarksSupplier xBookmarksSupplier = (XBookmarksSupplier) UnoRuntime.queryInterface(
+                XBookmarksSupplier.class, xCurrentComponent);
+        if (xBookmarksSupplier.getBookmarks().hasByName(name)) {
+            Object o = xBookmarksSupplier.getBookmarks().getByName(name);
+            XTextContent bm = (XTextContent) UnoRuntime.queryInterface(
+                XTextContent.class, o);
+            text.removeTextContent(bm);
+        }
+    }
+
+    public void removeReferenceMark(String name) throws Exception {
+        XReferenceMarksSupplier xSupplier = (XReferenceMarksSupplier) UnoRuntime.queryInterface(
+                XReferenceMarksSupplier.class, xCurrentComponent);
+        if (xSupplier.getReferenceMarks().hasByName(name)) {
+            Object o = xSupplier.getReferenceMarks().getByName(name);
+            XTextContent bm = (XTextContent) UnoRuntime.queryInterface(
+                XTextContent.class, o);
+            text.removeTextContent(bm);
+        }
+    }
+
+    /**
+     * Get the XTextRange corresponding to the named bookmark.
+     * @param name The name of the bookmark to find.
+     * @return The XTextRange for the bookmark.
+     * @throws Exception
+     */
+    public XTextRange getBookmarkRange(String name) throws Exception {
+        // query XBookmarksSupplier from document model and get bookmarks collection
+        XBookmarksSupplier xBookmarksSupplier = (XBookmarksSupplier) UnoRuntime.queryInterface(
+                XBookmarksSupplier.class, xCurrentComponent);
+        XNameAccess xNamedBookmarks = xBookmarksSupplier.getBookmarks();
+
+        // retrieve bookmark by name
+        //System.out.println("Name="+name+" : "+xNamedBookmarks.hasByName(name));
+        if (!xNamedBookmarks.hasByName(name))
+            return null;
+        Object foundBookmark = xNamedBookmarks.getByName(name);
+        XTextContent xFoundBookmark = (XTextContent) UnoRuntime.queryInterface(
+                XTextContent.class, foundBookmark);
+        return xFoundBookmark.getAnchor();
+    }
+
+    public void printBookmarkNames() throws Exception {
+        XBookmarksSupplier xBookmarksSupplier = (XBookmarksSupplier) UnoRuntime.queryInterface(
+                XBookmarksSupplier.class, xCurrentComponent);
+        XNameAccess xNamedBookmarks = xBookmarksSupplier.getBookmarks();
+        String[] names = xNamedBookmarks.getElementNames();
+        for (int i = 0; i < names.length; i++) {
+            System.out.println(i+". "+names[i]);
+        }
+    }
+
+
+    /**
+     * Focus the active OO document.
+     */
+    public void setFocus() {
+        xDesktop.getCurrentFrame().getContainerWindow().setFocus();
+    }
+
+
+    public void combineCiteMarkers(List<BibtexDatabase> databases, OOBibStyle style) throws Exception {
+        XReferenceMarksSupplier supplier = (XReferenceMarksSupplier) UnoRuntime.queryInterface(
+                XReferenceMarksSupplier.class, xCurrentComponent);
+        XNameAccess nameAccess = supplier.getReferenceMarks();
+        // TODO: doesn't work for citations in footnotes/tables
+        String[] names = getSortedReferenceMarks(nameAccess);
+
+
+        final XTextRangeCompare compare = (XTextRangeCompare) UnoRuntime.queryInterface
+                (XTextRangeCompare.class, text);
+
+        int piv = 0;
+        boolean madeModifications = false;
+        while (piv < names.length-1) {
+            XTextRange r1 = ((XTextContent) UnoRuntime.queryInterface
+                            (XTextContent.class, nameAccess.getByName(names[piv]))).getAnchor().getEnd();
+            XTextRange r2 = ((XTextContent) UnoRuntime.queryInterface
+                            (XTextContent.class,
+                                    nameAccess.getByName(names[piv+1]))).getAnchor().getStart();
+            if (r1.getText() != r2.getText()) {
+                piv++;
+                continue;
+            }
+            XTextCursor mxDocCursor = r1.getText().createTextCursorByRange(r1);
+            mxDocCursor.goRight((short)1, true);
+            boolean couldExpand = true;
+            while (couldExpand && (compare.compareRegionEnds(mxDocCursor, r2) > 0)) {
+                couldExpand = mxDocCursor.goRight((short)1, true);
+            }
+            String text = mxDocCursor.getString();
+            // Check if the string contains no line breaks and only whitespace:
+            if ((text.indexOf('\n') == -1) && (text.trim().length() == 0)) {
+
+                // If we are supposed to set character format for citations, test this before
+                // making any changes. This way we can throw an exception before any reference
+                // marks are removed, preventing damage to the user's document:
+                if (style.isFormatCitations()) {
+                    XPropertySet xCursorProps = (XPropertySet) UnoRuntime.queryInterface(
+                                        XPropertySet.class, mxDocCursor);
+                    String charStyle = style.getCitationCharacterFormat();
+                    try {
+                        xCursorProps.setPropertyValue("CharStyleName", charStyle);
+                    } catch (Throwable ex) {
+                        // Setting the character format failed, so we throw an exception that
+                        // will result in an error message for the user:
+                        throw new UndefinedCharacterFormatException(charStyle);
+                    }
+                }
+
+                List<String> keys = parseRefMarkName(names[piv]);
+                keys.addAll(parseRefMarkName(names[piv+1]));
+                removeReferenceMark(names[piv]);
+                removeReferenceMark(names[piv+1]);
+                ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+                for (String key : keys) {
+                    bases: for (BibtexDatabase database : databases) {
+                        BibtexEntry entry = database.getEntryByKey(key);
+                        if (entry != null) {
+                            entries.add(OOUtil.createAdaptedEntry(entry));
+                            break bases;
+                        }
+                    }
+                }
+                Collections.sort(entries, new FieldComparator("year"));
+                StringBuilder sb = new StringBuilder();
+                int i=0;
+                for (BibtexEntry entry : entries) {
+                    if (i > 0)
+                        sb.append(",");
+                    sb.append(entry.getCiteKey());
+                    i++;
+                }
+                String keyString = sb.toString();
+                boolean inParenthesis = true;
+                // Insert bookmark:
+                String bName = getUniqueReferenceMarkName(keyString,
+                        inParenthesis ? AUTHORYEAR_PAR : AUTHORYEAR_INTEXT);
+                insertReferenceMark(bName, "tmp", mxDocCursor, true, style);
+                names[piv+1] = bName;
+                madeModifications = true;
+            }
+            piv++;
+        }
+        if (madeModifications) {
+            updateSortedReferenceMarks();
+            refreshCiteMarkers(databases, style);
+        }
+
+
+    }
+
+    public void testFrameHandling() throws Exception {
+
+        XController oldController = mxDoc.getCurrentController();
+        PropertyValue[] props = new PropertyValue[2];
+
+        props[0] = new PropertyValue();
+        props[0].Name = "Model";
+
+        props[0].Value = mxDoc.getCurrentController().getModel();
+        props[1] = new PropertyValue();
+        props[1].Name = "Hidden";
+        props[1].Value = true;
+
+        // argument xModel wins over URL.
+        System.out.println("her");
+        XComponent comp = xComponentLoader.loadComponentFromURL("private:factory/swriter",
+                           "_blank", 0, props);
+        System.out.println("her2");
+
+        XTextDocument newDoc = (XTextDocument)UnoRuntime.queryInterface(
+                XTextDocument.class, comp);
+        System.out.println("newDoc = "+newDoc);
+
+        // Controller of the hidden frame
+        XController xController = newDoc.getCurrentController();
+
+        XFrame xFrame = xController.getFrame();
+        XWindow xContainerWindow = xFrame.getContainerWindow();
+        XWindow xComponentWindow = xFrame.getComponentWindow();
+
+        //xContainerWindow.setVisible(true);
+        //xComponentWindow.setFocus();
+        //xContainerWindow.setVisible(false);
+        xFrame.dispose();
+    }
+}
diff --git a/src/java/net/sf/jabref/oo/OOBibStyle.java b/src/java/net/sf/jabref/oo/OOBibStyle.java
old mode 100755
new mode 100644
index c13d73d..1fb3f0e
--- a/src/java/net/sf/jabref/oo/OOBibStyle.java
+++ b/src/java/net/sf/jabref/oo/OOBibStyle.java
@@ -1,866 +1,866 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.export.layout.Layout;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.LayoutHelper;
-import net.sf.jabref.export.layout.format.RemoveLatexCommands;
-
-import java.io.*;
-import java.util.*;
-import java.util.regex.Pattern;
-
-/**
- * This class embodies a bibliography formatting for OpenOffice, which is composed
- * of the following elements:
- *
- * 1) Each OO bib entry type must have a formatting. A formatting is an array of elements, each
- *    of which is either a piece of constant text, an entry field value, or a tab. Each element has
- *    a character format associated with it.
- *
- * 2) Many field values (e.g. author) need to be formatted before input to OpenOffice. The style
- *    has the responsibility of formatting all field values. Formatting is handled by 0-n
- *    JabRef LayoutFormatter classes.
- *
- * 3) If the entries are not numbered, a citation marker must be produced for each entry. This
- *    operation is performed for each JabRef BibtexEntry.
- */
-public class OOBibStyle implements Comparable {
-
-    public static final String UNDEFINED_CITATION_MARKER = "??";
-    String name = null;
-    SortedSet<String> journals = new TreeSet<String>();
-
-    // Formatter to be run on fields before they are used as part of citation marker:
-    LayoutFormatter fieldFormatter = new OOPreFormatter();
-
-    Layout defaultBibLayout;
-
-    // reference layout mapped from entry type number:
-    HashMap<String, Layout> bibLayout = new HashMap<String, Layout>();
-
-    HashMap properties = new HashMap();
-    HashMap citProperties = new HashMap();
-
-    Pattern numPattern = Pattern.compile("-?\\d+");
-
-    boolean valid = false;
-
-    final static int NONE = 0, LAYOUT = 1, PROPERTIES=2, CITATION=3, NAME=4, JOURNALS=5;
-    final static String LAYOUT_MRK = "LAYOUT",
-        PROPERTIES_MARK = "PROPERTIES",
-        CITATION_MARK = "CITATION",
-        NAME_MARK = "NAME",
-        JOURNALS_MARK = "JOURNALS",
-        DEFAULT_MARK = "default";
-    private File styleFile = null;
-    private static long styleFileModificationTime = Long.MIN_VALUE;
-    private String COMBINED_ENTRIES_SEPARATOR = "-";
-
-    //private Pattern quoted = Pattern.compile("\".*^\\\\\"");
-    private Pattern quoted = Pattern.compile("\".*\"");
-
-    public OOBibStyle(File styleFile) throws Exception {
-        this(new FileReader(styleFile));
-        this.styleFile = styleFile;
-        styleFileModificationTime = (styleFile).lastModified();
-    }
-
-    public OOBibStyle(Reader in) throws Exception {
-
-        // Set default property values:
-        properties.put("Title", "Bibliography");
-        properties.put("SortAlgorithm", "alphanumeric");
-        properties.put("IsSortByPosition", Boolean.FALSE);
-        properties.put("IsNumberEntries", Boolean.FALSE);
-        properties.put("BracketBefore", "[");
-        properties.put("BracketAfter", "]");
-        properties.put("ReferenceParagraphFormat", "Default");
-        properties.put("ReferenceHeaderParagraphFormat", "Heading 1");
-
-        // Set default properties for the citation marker:
-        citProperties.put("AuthorField", "author/editor");
-        citProperties.put("YearField", "year");
-        citProperties.put("MaxAuthors", 3);
-        citProperties.put("MaxAuthorsFirst", -1);
-        citProperties.put("AuthorSeparator", ", ");
-        citProperties.put("AuthorLastSeparator", " & ");
-        citProperties.put("AuthorLastSeparatorInText", null);
-        citProperties.put("EtAlString", " et al.");
-        citProperties.put("YearSeparator", ", ");
-        citProperties.put("InTextYearSeparator", " ");
-        citProperties.put("BracketBefore", "(");
-        citProperties.put("BracketAfter", ")");
-        citProperties.put("CitationSeparator", "; ");
-        citProperties.put("PageInfoSeparator", "; ");
-        citProperties.put("GroupedNumbersSeparator", "-");
-        citProperties.put("MinimumGroupingCount", 3);
-        citProperties.put("FormatCitations", Boolean.FALSE);
-        citProperties.put("CitationCharacterFormat", "Default");
-        citProperties.put("ItalicCitations", Boolean.FALSE);
-        citProperties.put("BoldCitations", Boolean.FALSE);
-        citProperties.put("SuperscriptCitations", Boolean.FALSE);
-        citProperties.put("SubscriptCitations", Boolean.FALSE);
-        citProperties.put("MultiCiteChronological", Boolean.TRUE);
-        citProperties.put("BibtexKeyCitations", Boolean.FALSE);
-        citProperties.put("ItalicEtAl", Boolean.FALSE);
-
-        initialize(in);
-
-
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public File getFile() {
-        return styleFile;
-    }
-
-    public Set<String> getJournals() {
-        return Collections.unmodifiableSet(journals);
-    }
-
-    private void initialize(Reader in) throws IOException {
-        name = null;
-        readFormatFile(in);
-    }
-
-    /**
-     * If this style was initialized from a file on disk, reload the style
-     * if the file has been modified since it was read.
-     * @throws Exception
-     */
-    public void ensureUpToDate() throws Exception {
-        if (!isUpToDate())
-            reload();
-    }
-
-    /**
-     * If this style was initialized from a file on disk, reload the style
-     * information.
-     * @throws Exception
-     */
-    public void reload() throws Exception {
-        if (styleFile != null) {
-            styleFileModificationTime = (styleFile).lastModified();
-            initialize(new FileReader(styleFile));
-        }
-    }
-
-    /**
-     * If this style was initialized from a file on disk, check whether the file
-     * is unmodified since initialization.
-     * @return true if the file has not been modified, false otherwise.
-     */
-    public boolean isUpToDate() {
-        if (styleFile != null) {
-            return styleFile.lastModified() == styleFileModificationTime;
-        }
-        else return true;
-    }
-
-    private void readFormatFile(Reader in) throws IOException {
-
-        // First read all the contents of the file:
-        StringBuffer sb = new StringBuffer();
-        int c;
-        while ((c = in.read()) != -1) {
-            sb.append((char)c);
-        }
-        // Break into separate lines:
-        String[] lines = sb.toString().split("\n");
-        int mode = NONE;
-
-        for (int i = 0; i < lines.length; i++) {
-            String line = lines[i];
-            if ((line.length() > 0) && (line.charAt(line.length()-1) == '\r'))
-                line = line.substring(0, line.length()-1);
-            // Check for empty line or comment:
-            if ((line.trim().length() == 0) || (line.charAt(0) == '#'))
-                continue;
-            // Check if we should change mode:
-            if (line.equals(NAME_MARK)) {
-                mode = NAME;
-                continue;
-            }
-            else if (line.equals(LAYOUT_MRK)) {
-                mode = LAYOUT;
-                continue;
-            }
-            else if (line.equals(PROPERTIES_MARK)) {
-                mode = PROPERTIES;
-                continue;
-            }
-            else if (line.equals(CITATION_MARK)) {
-                mode = CITATION;
-                continue;
-            }
-            else if (line.equals(JOURNALS_MARK)) {
-                mode = JOURNALS;
-                continue;
-            }
-
-            switch (mode) {
-                case NAME:
-                    if (line.trim().length() > 0)
-                        name = line.trim();
-                case LAYOUT:
-                    handleStructureLine(line);
-                    break;
-                case PROPERTIES:
-                    handlePropertiesLine(line, properties);
-                    break;
-                case CITATION:
-                    handlePropertiesLine(line, citProperties);
-                    break;
-                case JOURNALS:
-                    handleJournalsLine(line);
-            }
-
-        }
-
-        // Set validity boolean based on whether we found anything interesting
-        // in the file:
-        if (mode != NONE)
-            valid = true;
-
-    }
-
-    /**
-     * After initalizing this style from a file, this method can be used to check
-     * whether the file appeared to be a proper style file.
-     * @return true if the file could be parsed as a style file, false otherwise.
-     */
-    public boolean isValid() {
-        return valid;
-    }
-
-
-    /**
-     * Parse a line providing bibliography structure information for an entry type.
-     * @param line The string containing the structure description.
-     * @throws IOException
-     */
-    private void handleStructureLine(String line) throws IOException {
-        int index = line.indexOf("=");
-        if ((index > 0) && (index < line.length()-1)) {
-            String formatString = line.substring(index+1);
-            //System.out.println("'"+line.substring(0, index)+"' : '"+formatString+"'");
-            boolean setDefault = line.substring(0, index).equals(DEFAULT_MARK);
-            String type = line.substring(0, index);
-            Short typeS;
-            try {
-                /*typeS = new Short(Short.parseShort(type));
-                OOBibFormatParser parser = new OOBibFormatParser(new StringReader(formatString));
-                PropertyValue[][] layout = parser.parse();*/
-                Layout layout = new LayoutHelper(new StringReader(formatString)).
-                        getLayoutFromText(Globals.FORMATTER_PACKAGE);
-                if (setDefault)
-                    defaultBibLayout = layout;
-                else
-                    bibLayout.put(type.toLowerCase(), layout);
-
-            } catch (Exception ex) {
-                ex.printStackTrace();
-
-            }
-        }
-    }
-
-
-    /**
-     * Parse a line providing a property name and value.
-     * @param line The line containing the formatter names.
-     * @throws IOException
-     */
-    private void handlePropertiesLine(String line, HashMap map) throws IOException {
-        int index = line.indexOf("=");
-        if ((index > 0) && (index <= line.length()-1)) {
-            String propertyName = line.substring(0, index).trim();
-            String value = line.substring(index+1);
-            if ((value.trim().length() > 2) && quoted.matcher(value.trim()).matches())
-                value = value.trim().substring(1, value.trim().length()-1);
-            Object toSet = value;
-            if (numPattern.matcher(value).matches()) {
-                toSet = Integer.parseInt(value);
-            }
-            else if (value.toLowerCase().trim().equals("true"))
-                toSet = Boolean.TRUE;
-            else if (value.toLowerCase().trim().equals("false"))
-                toSet = Boolean.FALSE;
-            map.put(propertyName, toSet);
-        }
-    }
-
-    /**
-     * Parse a line providing a journal name for which this style is valid.
-     * @param line
-     * @throws IOException
-     */
-    private void handleJournalsLine(String line) throws IOException {
-        if (line.trim().length() > 0)
-            journals.add(line.trim());
-    }
-
-    public Layout getReferenceFormat(String type) {
-        Layout l = bibLayout.get(type.toLowerCase());
-        if (l != null)
-            return l;
-        else
-            return defaultBibLayout;
-    }
-
-    /**
-     * Get the array of elements composing the reference for a given entry type.
-     * @param bibType The OO type number.
-     * @return The format definition.
-
-    public PropertyValue[][] getReferenceFormat(short bibType) {
-        Object o = bibLayout.get(new Short(bibType));
-        if (o != null)
-            return (PropertyValue[][])o;
-        else
-            return defaultBibLayout;
-    }*/
-
-
-    /**
-     * Format a number-based citation marker for the given number.
-     * @param number The citation numbers.
-     * @return The text for the citation.
-     */
-    public String getNumCitationMarker(int[] number, int minGroupingCount, boolean inList) {
-        String bracketBefore = (String)citProperties.get("BracketBefore");
-        if (inList && (citProperties.get("BracketBeforeInList")!=null)) {
-            bracketBefore = (String)citProperties.get("BracketBeforeInList");
-        }
-        String bracketAfter = (String)citProperties.get("BracketAfter");
-        if (inList && (citProperties.get("BracketAfterInList")!=null)) {
-            bracketAfter = (String)citProperties.get("BracketAfterInList");
-        }
-        // Sort the numbers:
-        int[] lNum = new int[number.length];
-        for (int i = 0; i < lNum.length; i++) {
-            lNum[i] = number[i];
-
-        }
-        //Arrays.copyOf(number, number.length);
-        Arrays.sort(lNum);
-        StringBuilder sb = new StringBuilder(bracketBefore);
-        int combineFrom = -1, written = 0;
-        for (int i = 0; i < lNum.length; i++) {
-            int i1 = lNum[i];
-            if (combineFrom < 0) {
-                // Check if next entry is the next in the ref list:
-                if ((i < lNum.length-1) && (lNum[i+1] == i1+1))
-                    combineFrom = i1;
-                else {
-                    // Add single entry:
-                    if (i>0)
-                        sb.append((String)citProperties.get("CitationSeparator"));
-                    sb.append(lNum[i] > 0 ? String.valueOf(lNum[i]) : UNDEFINED_CITATION_MARKER);
-                    written++;
-                }
-            } else {
-                // We are building a list of combined entries.
-                // Check if it ends here:
-                if ((i == lNum.length-1) || (lNum[i+1] != i1+1)) {
-                    if (written>0)
-                        sb.append((String)citProperties.get("CitationSeparator"));
-                    if ((minGroupingCount > 0) && (i1+1-combineFrom >= minGroupingCount)) {
-                        sb.append(combineFrom);
-                        sb.append((String)citProperties.get("GroupedNumbersSeparator"));
-                        sb.append(i1);
-                        written++;
-                    }
-                    else {
-                        // Either we should never group, or there aren't enough
-                        // entries in this case to group. Output all:
-                        for (int jj=combineFrom; jj<=i1; jj++) {
-                            sb.append(jj);
-                            if (jj < i1)
-                                sb.append((String)citProperties.get("CitationSeparator"));
-                            written++;
-                        }
-                    }
-                    combineFrom = -1;
-
-                }
-                // If it doesn't end here, just keep iterating.
-            }
-
-        }
-        sb.append(bracketAfter);
-        return sb.toString();
-    }
-
-    /**
-     * Format the marker for the in-text citation according to this bib style.
-     *
-     * @param entry The JabRef BibtexEntry providing the data.
-     * @param inParenthesis Signals whether a parenthesized citation or an in-text citation is wanted.
-     * @param uniquefier String to add behind the year in case it's needed to separate similar
-     *   entries.
-     * @return The formatted citation.
-     */
-    public String getCitationMarker(BibtexEntry entry, BibtexDatabase database, boolean inParenthesis,
-                                    String uniquefier, int unlimAuthors) {
-        return getCitationMarker(new BibtexEntry[] {entry}, database, inParenthesis, new String[] {uniquefier},
-                new int[] {unlimAuthors});
-    }
-
-    /**
-     * Format the marker for the in-text citation according to this bib style. Uniquefier letters are added as
-     * provided by the uniquefiers argument. If successive entries within the citation are uniquefied from each other,
-     * this method will perform a grouping of these entries.
-     *
-     * @param entries The array of JabRef BibtexEntry providing the data.
-     * @param inParenthesis Signals whether a parenthesized citation or an in-text citation is wanted.
-     * @param uniquefiers Strings to add behind the year for each entry in case it's needed to separate similar
-     *   entries.
-     * @param unlimAuthors Boolean for each entry. If true, we should not use "et al" formatting regardless
-     *   of the number of authors. Can be null to indicate that no entries should have unlimited names.
-     * @return The formatted citation.
-     */
-    public String getCitationMarker(BibtexEntry[] entries, BibtexDatabase database, boolean inParenthesis,
-                                    String[] uniquefiers, int[] unlimAuthors) {
-
-        // Look for groups of uniquefied entries that should be combined in the output.
-        // E.g. (Olsen, 2005a, b) should be output instead of (Olsen, 2005a; Olsen, 2005b).
-        int piv = -1;
-        String tmpMarker = null;
-        if (uniquefiers != null) {
-            for (int i = 0; i < uniquefiers.length; i++) {
-
-                if ((uniquefiers[i] != null) && (uniquefiers[i].length() > 0)) {
-                    String authorField = (String)citProperties.get("AuthorField");
-                    int maxAuthors = (Integer)citProperties.get("MaxAuthors");
-                    if (piv == -1) {
-                        piv = i;
-                        tmpMarker = getAuthorYearParenthesisMarker(new BibtexEntry[] {entries[i]}, database,
-                            authorField,
-                            (String)citProperties.get("YearField"),
-                            maxAuthors,
-                            (String)citProperties.get("AuthorSeparator"),
-                            (String)citProperties.get("AuthorLastSeparator"),
-                            (String)citProperties.get("EtAlString"),
-                            (String)citProperties.get("YearSeparator"),
-                            (String)citProperties.get("BracketBefore"),
-                            (String)citProperties.get("BracketAfter"),
-                            (String)citProperties.get("CitationSeparator"), null, unlimAuthors);
-                        //System.out.println("piv="+piv+" tmpMarker='"+tmpMarker+"'");
-                    }
-                    else {
-                        // See if this entry can go into a group with the previous one:
-                        String thisMarker = getAuthorYearParenthesisMarker(new BibtexEntry[] {entries[i]}, database,
-                            authorField,
-                            (String)citProperties.get("YearField"),
-                            maxAuthors,
-                            (String)citProperties.get("AuthorSeparator"),
-                            (String)citProperties.get("AuthorLastSeparator"),
-                            (String)citProperties.get("EtAlString"),
-                            (String)citProperties.get("YearSeparator"),
-                            (String)citProperties.get("BracketBefore"),
-                            (String)citProperties.get("BracketAfter"),
-                            (String)citProperties.get("CitationSeparator"), null, unlimAuthors);
-
-                        String author = getCitationMarkerField(entries[i], database,
-                                authorField);
-                        AuthorList al = AuthorList.getAuthorList(author);
-                        //System.out.println("i="+i+" thisMarker='"+thisMarker+"'");
-                        int prevALim = i > 0 ? unlimAuthors[i-1] : unlimAuthors[0];
-                        if (!thisMarker.equals(tmpMarker) ||
-                                ((al.size() > maxAuthors) && (unlimAuthors[i] != prevALim))) {
-                            // No match. Update piv to exclude the previous entry. But first check if the
-                            // previous entry was part of a group:
-                            if ((piv > -1) && (i > piv+1)) {
-                                // Do the grouping:
-                                group(entries, uniquefiers, piv, i-1, (String)citProperties.get("UniquefierSeparator"));
-                            }
-                            tmpMarker = thisMarker;
-                            piv = i;
-                        }
-                    }
-                }
-                else {
-                    // This entry has no uniquefier.
-                    // Check if we just passed a group of more than one entry with uniquefier:
-                    if ((piv > -1) && (i > piv+1)) {
-                        // Do the grouping:
-                        group(entries, uniquefiers, piv, i-1, (String)citProperties.get("UniquefierSeparator"));
-                    }
-
-                    piv = -1;
-                }
-
-            }
-            // Finished with the loop. See if the last entries form a group:
-            if (piv >= 0) {
-                // Do the grouping:
-                group(entries, uniquefiers, piv, uniquefiers.length-1, (String)citProperties.get("UniquefierSeparator"));
-            }
-        }
-
-        if (inParenthesis)
-            return getAuthorYearParenthesisMarker(entries, database,
-                    (String)citProperties.get("AuthorField"),
-                    (String)citProperties.get("YearField"),
-                    (Integer)citProperties.get("MaxAuthors"),
-                    (String)citProperties.get("AuthorSeparator"),
-                    (String)citProperties.get("AuthorLastSeparator"),
-                    (String)citProperties.get("EtAlString"),
-                    (String)citProperties.get("YearSeparator"),
-                    (String)citProperties.get("BracketBefore"),
-                    (String)citProperties.get("BracketAfter"),
-                    (String)citProperties.get("CitationSeparator"),
-                    uniquefiers, unlimAuthors);
-        else {
-            String authorLastSeparator = (String)citProperties.get("AuthorLastSeparator");
-            String alsInText = (String)citProperties.get("AuthorLastSeparatorInText");
-            if (alsInText != null)
-                authorLastSeparator = alsInText;
-            return getAuthorYearInTextMarker(entries, database,
-                    (String)citProperties.get("AuthorField"),
-                    (String)citProperties.get("YearField"),
-                    (Integer)citProperties.get("MaxAuthors"),
-                    (String)citProperties.get("AuthorSeparator"),
-                    authorLastSeparator,
-                    (String)citProperties.get("EtAlString"),
-                    (String)citProperties.get("InTextYearSeparator"),
-                    (String)citProperties.get("BracketBefore"),
-                    (String)citProperties.get("BracketAfter"),
-                    (String)citProperties.get("CitationSeparator"),
-                    uniquefiers, unlimAuthors);
-        }
-    }
-
-    /**
-     * Modify entry and uniqiefier arrays to facilitate a grouped presentation of uniqiefied entries.
-     * @param entries The entry array.
-     * @param uniquefiers The uniquefier array.
-     * @param from The first index to group (inclusive)
-     * @param to The last index to group (inclusive)
-     * @param separator The separator for the uniquefier letters.
-     */
-    private void group(BibtexEntry[] entries, String[] uniquefiers, int from, int to, String separator) {
-        StringBuilder sb = new StringBuilder(uniquefiers[from]);
-        for (int i=from+1; i<=to; i++) {
-            sb.append(separator);
-            sb.append(uniquefiers[i]);
-            entries[i] = null;
-        }
-        uniquefiers[from] = sb.toString();
-    }
-
-    /**
-     * This method produces (Author, year) style citation strings in many different forms.
-     *
-     * @param entries The array of BibtexEntry to get fields from.
-     * @param authorField The bibtex field providing author names, e.g. "author" or "editor".
-     * @param yearField The bibtex field providing the year, e.g. "year".
-     * @param maxA The maximum number of authors to write out in full without using etal. Set to
-     *              -1 to always write out all authors.
-     * @param authorSep The String to add between author names except the last two, e.g. ", ".
-     * @param andString The String to add between the two last author names, e.g. " & ".
-     * @param etAlString The String to represent authors that are not mentioned, e.g. " et al."
-     * @param yearSep The String to separate authors from year, e.g. "; ".
-     * @param startBrace The opening parenthesis.
-     * @param endBrace The closing parenthesis.
-     * @param citationSeparator The String to separate citations from each other.
-     * @param uniquifiers Optional parameter to separate similar citations. Elements can be null if not needed.
-     * @return The formatted citation.
-     */
-    public String getAuthorYearParenthesisMarker(BibtexEntry[] entries, BibtexDatabase database,
-                                                 String authorField, String yearField,
-                                                 int maxA, String authorSep,
-                                                 String andString, String etAlString, String yearSep,
-                                                 String startBrace, String endBrace, String citationSeparator,
-                                                 String[] uniquifiers, int[] unlimAuthors) {
-
-
-        StringBuffer sb = new StringBuffer(startBrace);
-        for (int j=0; j<entries.length; j++) {
-
-            int unlimA = (unlimAuthors != null ? unlimAuthors[j] : -1);
-            int maxAuthors = unlimA > 0 ? unlimA : maxA;
-
-            BibtexEntry entry = entries[j];
-            
-            // Check if this entry has been nulled due to grouping with the previous entry(ies):
-            if (entry == null)
-                continue;
-
-            if (j > 0)
-                sb.append(citationSeparator);
-
-            String author = getCitationMarkerField(entry, database, authorField);
-
-            if (author != null) {
-                AuthorList al = AuthorList.getAuthorList(author);
-                sb.append(getAuthorLastName(al, 0));
-
-                if ((al.size() > 1) && ((al.size() <= maxAuthors) || (maxAuthors < 0))) {
-                    int i=1;
-                    while (i < al.size()-1) {
-                        sb.append(authorSep);
-                        sb.append(getAuthorLastName(al, i));
-                        i++;
-                    }
-                    sb.append(andString);
-                    sb.append(getAuthorLastName(al, al.size()-1));
-                } else if (al.size() > maxAuthors) {
-                    sb.append(etAlString);
-                }
-                sb.append(yearSep);
-            }
-            String year = getCitationMarkerField(entry, database, yearField);
-            if (year != null)
-                sb.append(year);
-            if ((uniquifiers != null) && (uniquifiers[j] != null))
-                sb.append(uniquifiers[j]);
-        }
-        sb.append(endBrace);
-        return sb.toString();
-
-    }
-
-    /**
-     * This method produces "Author (year)" style citation strings in many different forms.
-     *
-     * @param entries The array of BibtexEntry to get fields from.
-     * @param authorField The bibtex field providing author names, e.g. "author" or "editor".
-     * @param yearField The bibtex field providing the year, e.g. "year".
-     * @param maxA The maximum number of authors to write out in full without using etal. Set to
-     *              -1 to always write out all authors.
-     * @param authorSep The String to add between author names except the last two, e.g. ", ".
-     * @param andString The String to add between the two last author names, e.g. " & ".
-     * @param etAlString The String to represent authors that are not mentioned, e.g. " et al."
-     * @param yearSep The String to separate authors from year, e.g. "; ".
-     * @param startBrace The opening parenthesis.
-     * @param endBrace The closing parenthesis.
-     * @param uniquefiers Optional parameters to separate similar citations. Can be null if not needed.
-     * @return The formatted citation.
-     */
-    public String getAuthorYearInTextMarker(BibtexEntry[] entries, BibtexDatabase database, String authorField,
-                                            String yearField, int maxA, String authorSep,
-                                            String andString, String etAlString, String yearSep,
-                                            String startBrace, String endBrace, String citationSeparator,
-                                            String[] uniquefiers, int[] unlimAuthors) {
-        StringBuffer sb = new StringBuffer();
-        for (int i=0; i<entries.length; i++) {
-
-            int unlimA = (unlimAuthors != null ? unlimAuthors[i] : -1);
-            int maxAuthors = unlimA > 0 ? unlimA : maxA;
-
-            // Check if this entry has been nulled due to grouping with the previous entry(ies):
-            if (entries[i] == null)
-                continue;
-
-            if (i > 0)
-                sb.append(citationSeparator);
-            String author = getCitationMarkerField(entries[i], database, authorField);
-            if (author != null) {
-                AuthorList al = AuthorList.getAuthorList(author);
-                if (al.size() > 0)
-                    sb.append(getAuthorLastName(al, 0));
-                if ((al.size() > 1) && ((al.size() <= maxAuthors) || (maxAuthors < 0))) {
-                    int j=1;
-                    while (j < al.size()-1) {
-                        sb.append(authorSep);
-                        sb.append(getAuthorLastName(al, j));
-                        j++;
-                    }
-                    sb.append(andString);
-                    sb.append(getAuthorLastName(al, al.size()-1));
-                } else if (al.size() > maxAuthors) {
-                    sb.append(etAlString);
-                }
-                sb.append(yearSep);
-            }
-            sb.append(startBrace);
-            String year = getCitationMarkerField(entries[i], database, yearField);
-            if (year != null)
-                sb.append(year);
-            if ((uniquefiers != null) && (uniquefiers[i] != null))
-                sb.append(uniquefiers[i]);
-            sb.append(endBrace);
-        }
-        return sb.toString();
-
-    }
-
-    /**
-     * This method looks up a field for en entry in a database. Any number of backup fields can be used
-     * if the primary field is empty.
-     * @param entry The entry.
-     * @param database The database the entry belongs to.
-     * @param field The field, or succession of fields, to look up. If backup fields are needed, separate
-     *   field names by /. E.g. to use "author" with "editor" as backup, specify "author/editor".
-     * @return The resolved field content, or an empty string if the field(s) were empty.
-     */
-    public String getCitationMarkerField(BibtexEntry entry, BibtexDatabase database, String field) {
-        String[] fields = field.split("/");
-        for (int i = 0; i < fields.length; i++) {
-            String s = fields[i];
-            String content = BibtexDatabase.getResolvedField(s, entry, database);
-            if ((content != null) && (content.trim().length() > 0)) {
-                if (fieldFormatter != null)
-                    content = fieldFormatter.format(content);
-                return content;
-            }
-        }
-        // No luck? Return an empty string:
-        return "";
-    }
-
-    /**
-     * Look up the nth author and return the proper last name for citation markers.
-     * @param al The author list.
-     * @param number The number of the author to return.
-     * @return The author name, or an empty String if inapplicable.
-     */
-    public String getAuthorLastName(AuthorList al, int number) {
-        StringBuilder sb = new StringBuilder();
-
-        if (al.size() > number) {
-            AuthorList.Author a = al.getAuthor(number);
-            if ((a.getVon() != null) && a.getVon().length() > 0) {
-                String von = a.getVon();
-                sb.append(von);
-                /*sb.append(von.substring(0, 1).toUpperCase());
-                if (von.length() > 1)
-                    sb.append(von.substring(1));*/
-                sb.append(' ');
-            }
-            sb.append(a.getLast());
-        }
-
-        return sb.toString();
-    }
-
-    /**
-     * Take a finished citation and insert a string at the end (but inside the end bracket)
-     * separated by "PageInfoSeparator"
-     * @param citation
-     * @param pageInfo
-     * @return
-     */
-    public String insertPageInfo(String citation, String pageInfo) {
-        String bracketAfter = getStringCitProperty("BracketAfter");
-        if (citation.endsWith(bracketAfter)) {
-            String first = citation.substring(0, citation.length()-bracketAfter.length());
-            return first+getStringCitProperty("PageInfoSeparator")+pageInfo+bracketAfter;
-        }
-        else return citation+getStringCitProperty("PageInfoSeparator")+pageInfo;
-    }
-
-    /**
-     * Convenience method for checking the property for whether we use number citations or
-     * author-year citations.
-     * @return true if we use numbered citations, false otherwise.
-     */
-    public boolean isNumberEntries() {
-        return (Boolean)getProperty("IsNumberEntries");
-    }
-
-    /**
-     * Convenience method for checking the property for whether we sort the bibliography
-     * according to their order of appearance in the text.
-     * @return true to sort by appearance, false to sort alphabetically.
-     */
-    public boolean isSortByPosition() {
-        return (Boolean)getProperty("IsSortByPosition");
-    }
-
-    /**
-     * Convenience method for checking whether citation markers should be italicised.
-     * Will only be relevant if isFormatCitations() returns true.
-     * @return true to indicate that citations should be in italics.
-     */
-    public boolean isItalicCitations() {
-        return (Boolean)citProperties.get("ItalicCitations");
-    }
-
-    /**
-     * Convenience method for checking whether citation markers should be bold.
-     * Will only be relevant if isFormatCitations() returns true.
-     * @return true to indicate that citations should be in bold.
-     */
-    public boolean isBoldCitations() {
-        return (Boolean)citProperties.get("BoldCitations");
-    }
-
-    /**
-     * Convenience method for checking whether citation markers formatted
-     * according to the results of the isItalicCitations() and
-     * isBoldCitations() methods.
-     * @return true to indicate that citations should be in italics.
-     */
-    public boolean isFormatCitations() {
-        return (Boolean)citProperties.get("FormatCitations");
-    }
-
-    public boolean isBibtexKeyCiteMarkers() {
-        return (Boolean)citProperties.get("BibtexKeyCitations");
-    }
-    
-    /**
-     * Get boolean property.
-     * @param key The property key
-     * @return the value
-     */
-    public boolean getBooleanCitProperty(String key) {
-        return (Boolean)citProperties.get(key);
-    }
-
-    public int getIntCitProperty(String key) {
-        return (Integer)citProperties.get(key);
-    }
-
-    public String getStringCitProperty(String key) {
-        return (String)citProperties.get(key);
-    }
-
-    public String getCitationCharacterFormat() {
-        return (String)citProperties.get("CitationCharacterFormat");
-    }
-    /**
-     * Get a style property.
-     * @param name The property name.
-     * @return The property value, or null if it doesn't exist.
-     */
-    public Object getProperty(String name) {
-        return properties.get(name);
-    }
-
-    public int compareTo(Object o) {
-        OOBibStyle other = (OOBibStyle)o;
-        return getName().compareTo(other.getName());
-    }
-
-    public boolean equals(Object o) {
-        return styleFile.equals(((OOBibStyle)o).styleFile);
-    }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.export.layout.Layout;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.LayoutHelper;
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
+
+import java.io.*;
+import java.util.*;
+import java.util.regex.Pattern;
+
+/**
+ * This class embodies a bibliography formatting for OpenOffice, which is composed
+ * of the following elements:
+ *
+ * 1) Each OO bib entry type must have a formatting. A formatting is an array of elements, each
+ *    of which is either a piece of constant text, an entry field value, or a tab. Each element has
+ *    a character format associated with it.
+ *
+ * 2) Many field values (e.g. author) need to be formatted before input to OpenOffice. The style
+ *    has the responsibility of formatting all field values. Formatting is handled by 0-n
+ *    JabRef LayoutFormatter classes.
+ *
+ * 3) If the entries are not numbered, a citation marker must be produced for each entry. This
+ *    operation is performed for each JabRef BibtexEntry.
+ */
+public class OOBibStyle implements Comparable {
+
+    public static final String UNDEFINED_CITATION_MARKER = "??";
+    String name = null;
+    SortedSet<String> journals = new TreeSet<String>();
+
+    // Formatter to be run on fields before they are used as part of citation marker:
+    LayoutFormatter fieldFormatter = new OOPreFormatter();
+
+    Layout defaultBibLayout;
+
+    // reference layout mapped from entry type number:
+    HashMap<String, Layout> bibLayout = new HashMap<String, Layout>();
+
+    HashMap properties = new HashMap();
+    HashMap citProperties = new HashMap();
+
+    Pattern numPattern = Pattern.compile("-?\\d+");
+
+    boolean valid = false;
+
+    final static int NONE = 0, LAYOUT = 1, PROPERTIES=2, CITATION=3, NAME=4, JOURNALS=5;
+    final static String LAYOUT_MRK = "LAYOUT",
+        PROPERTIES_MARK = "PROPERTIES",
+        CITATION_MARK = "CITATION",
+        NAME_MARK = "NAME",
+        JOURNALS_MARK = "JOURNALS",
+        DEFAULT_MARK = "default";
+    private File styleFile = null;
+    private static long styleFileModificationTime = Long.MIN_VALUE;
+    private String COMBINED_ENTRIES_SEPARATOR = "-";
+
+    //private Pattern quoted = Pattern.compile("\".*^\\\\\"");
+    private Pattern quoted = Pattern.compile("\".*\"");
+
+    public OOBibStyle(File styleFile) throws Exception {
+        this(new FileReader(styleFile));
+        this.styleFile = styleFile;
+        styleFileModificationTime = (styleFile).lastModified();
+    }
+
+    public OOBibStyle(Reader in) throws Exception {
+
+        // Set default property values:
+        properties.put("Title", "Bibliography");
+        properties.put("SortAlgorithm", "alphanumeric");
+        properties.put("IsSortByPosition", Boolean.FALSE);
+        properties.put("IsNumberEntries", Boolean.FALSE);
+        properties.put("BracketBefore", "[");
+        properties.put("BracketAfter", "]");
+        properties.put("ReferenceParagraphFormat", "Default");
+        properties.put("ReferenceHeaderParagraphFormat", "Heading 1");
+
+        // Set default properties for the citation marker:
+        citProperties.put("AuthorField", "author/editor");
+        citProperties.put("YearField", "year");
+        citProperties.put("MaxAuthors", 3);
+        citProperties.put("MaxAuthorsFirst", -1);
+        citProperties.put("AuthorSeparator", ", ");
+        citProperties.put("AuthorLastSeparator", " & ");
+        citProperties.put("AuthorLastSeparatorInText", null);
+        citProperties.put("EtAlString", " et al.");
+        citProperties.put("YearSeparator", ", ");
+        citProperties.put("InTextYearSeparator", " ");
+        citProperties.put("BracketBefore", "(");
+        citProperties.put("BracketAfter", ")");
+        citProperties.put("CitationSeparator", "; ");
+        citProperties.put("PageInfoSeparator", "; ");
+        citProperties.put("GroupedNumbersSeparator", "-");
+        citProperties.put("MinimumGroupingCount", 3);
+        citProperties.put("FormatCitations", Boolean.FALSE);
+        citProperties.put("CitationCharacterFormat", "Default");
+        citProperties.put("ItalicCitations", Boolean.FALSE);
+        citProperties.put("BoldCitations", Boolean.FALSE);
+        citProperties.put("SuperscriptCitations", Boolean.FALSE);
+        citProperties.put("SubscriptCitations", Boolean.FALSE);
+        citProperties.put("MultiCiteChronological", Boolean.TRUE);
+        citProperties.put("BibtexKeyCitations", Boolean.FALSE);
+        citProperties.put("ItalicEtAl", Boolean.FALSE);
+
+        initialize(in);
+
+
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public File getFile() {
+        return styleFile;
+    }
+
+    public Set<String> getJournals() {
+        return Collections.unmodifiableSet(journals);
+    }
+
+    private void initialize(Reader in) throws IOException {
+        name = null;
+        readFormatFile(in);
+    }
+
+    /**
+     * If this style was initialized from a file on disk, reload the style
+     * if the file has been modified since it was read.
+     * @throws Exception
+     */
+    public void ensureUpToDate() throws Exception {
+        if (!isUpToDate())
+            reload();
+    }
+
+    /**
+     * If this style was initialized from a file on disk, reload the style
+     * information.
+     * @throws Exception
+     */
+    public void reload() throws Exception {
+        if (styleFile != null) {
+            styleFileModificationTime = (styleFile).lastModified();
+            initialize(new FileReader(styleFile));
+        }
+    }
+
+    /**
+     * If this style was initialized from a file on disk, check whether the file
+     * is unmodified since initialization.
+     * @return true if the file has not been modified, false otherwise.
+     */
+    public boolean isUpToDate() {
+        if (styleFile != null) {
+            return styleFile.lastModified() == styleFileModificationTime;
+        }
+        else return true;
+    }
+
+    private void readFormatFile(Reader in) throws IOException {
+
+        // First read all the contents of the file:
+        StringBuffer sb = new StringBuffer();
+        int c;
+        while ((c = in.read()) != -1) {
+            sb.append((char)c);
+        }
+        // Break into separate lines:
+        String[] lines = sb.toString().split("\n");
+        int mode = NONE;
+
+        for (int i = 0; i < lines.length; i++) {
+            String line = lines[i];
+            if ((line.length() > 0) && (line.charAt(line.length()-1) == '\r'))
+                line = line.substring(0, line.length()-1);
+            // Check for empty line or comment:
+            if ((line.trim().length() == 0) || (line.charAt(0) == '#'))
+                continue;
+            // Check if we should change mode:
+            if (line.equals(NAME_MARK)) {
+                mode = NAME;
+                continue;
+            }
+            else if (line.equals(LAYOUT_MRK)) {
+                mode = LAYOUT;
+                continue;
+            }
+            else if (line.equals(PROPERTIES_MARK)) {
+                mode = PROPERTIES;
+                continue;
+            }
+            else if (line.equals(CITATION_MARK)) {
+                mode = CITATION;
+                continue;
+            }
+            else if (line.equals(JOURNALS_MARK)) {
+                mode = JOURNALS;
+                continue;
+            }
+
+            switch (mode) {
+                case NAME:
+                    if (line.trim().length() > 0)
+                        name = line.trim();
+                case LAYOUT:
+                    handleStructureLine(line);
+                    break;
+                case PROPERTIES:
+                    handlePropertiesLine(line, properties);
+                    break;
+                case CITATION:
+                    handlePropertiesLine(line, citProperties);
+                    break;
+                case JOURNALS:
+                    handleJournalsLine(line);
+            }
+
+        }
+
+        // Set validity boolean based on whether we found anything interesting
+        // in the file:
+        if (mode != NONE)
+            valid = true;
+
+    }
+
+    /**
+     * After initalizing this style from a file, this method can be used to check
+     * whether the file appeared to be a proper style file.
+     * @return true if the file could be parsed as a style file, false otherwise.
+     */
+    public boolean isValid() {
+        return valid;
+    }
+
+
+    /**
+     * Parse a line providing bibliography structure information for an entry type.
+     * @param line The string containing the structure description.
+     * @throws IOException
+     */
+    private void handleStructureLine(String line) throws IOException {
+        int index = line.indexOf("=");
+        if ((index > 0) && (index < line.length()-1)) {
+            String formatString = line.substring(index+1);
+            //System.out.println("'"+line.substring(0, index)+"' : '"+formatString+"'");
+            boolean setDefault = line.substring(0, index).equals(DEFAULT_MARK);
+            String type = line.substring(0, index);
+            Short typeS;
+            try {
+                /*typeS = new Short(Short.parseShort(type));
+                OOBibFormatParser parser = new OOBibFormatParser(new StringReader(formatString));
+                PropertyValue[][] layout = parser.parse();*/
+                Layout layout = new LayoutHelper(new StringReader(formatString)).
+                        getLayoutFromText(Globals.FORMATTER_PACKAGE);
+                if (setDefault)
+                    defaultBibLayout = layout;
+                else
+                    bibLayout.put(type.toLowerCase(), layout);
+
+            } catch (Exception ex) {
+                ex.printStackTrace();
+
+            }
+        }
+    }
+
+
+    /**
+     * Parse a line providing a property name and value.
+     * @param line The line containing the formatter names.
+     * @throws IOException
+     */
+    private void handlePropertiesLine(String line, HashMap map) throws IOException {
+        int index = line.indexOf("=");
+        if ((index > 0) && (index <= line.length()-1)) {
+            String propertyName = line.substring(0, index).trim();
+            String value = line.substring(index+1);
+            if ((value.trim().length() > 2) && quoted.matcher(value.trim()).matches())
+                value = value.trim().substring(1, value.trim().length()-1);
+            Object toSet = value;
+            if (numPattern.matcher(value).matches()) {
+                toSet = Integer.parseInt(value);
+            }
+            else if (value.toLowerCase().trim().equals("true"))
+                toSet = Boolean.TRUE;
+            else if (value.toLowerCase().trim().equals("false"))
+                toSet = Boolean.FALSE;
+            map.put(propertyName, toSet);
+        }
+    }
+
+    /**
+     * Parse a line providing a journal name for which this style is valid.
+     * @param line
+     * @throws IOException
+     */
+    private void handleJournalsLine(String line) throws IOException {
+        if (line.trim().length() > 0)
+            journals.add(line.trim());
+    }
+
+    public Layout getReferenceFormat(String type) {
+        Layout l = bibLayout.get(type.toLowerCase());
+        if (l != null)
+            return l;
+        else
+            return defaultBibLayout;
+    }
+
+    /**
+     * Get the array of elements composing the reference for a given entry type.
+     * @param bibType The OO type number.
+     * @return The format definition.
+
+    public PropertyValue[][] getReferenceFormat(short bibType) {
+        Object o = bibLayout.get(new Short(bibType));
+        if (o != null)
+            return (PropertyValue[][])o;
+        else
+            return defaultBibLayout;
+    }*/
+
+
+    /**
+     * Format a number-based citation marker for the given number.
+     * @param number The citation numbers.
+     * @return The text for the citation.
+     */
+    public String getNumCitationMarker(int[] number, int minGroupingCount, boolean inList) {
+        String bracketBefore = (String)citProperties.get("BracketBefore");
+        if (inList && (citProperties.get("BracketBeforeInList")!=null)) {
+            bracketBefore = (String)citProperties.get("BracketBeforeInList");
+        }
+        String bracketAfter = (String)citProperties.get("BracketAfter");
+        if (inList && (citProperties.get("BracketAfterInList")!=null)) {
+            bracketAfter = (String)citProperties.get("BracketAfterInList");
+        }
+        // Sort the numbers:
+        int[] lNum = new int[number.length];
+        for (int i = 0; i < lNum.length; i++) {
+            lNum[i] = number[i];
+
+        }
+        //Arrays.copyOf(number, number.length);
+        Arrays.sort(lNum);
+        StringBuilder sb = new StringBuilder(bracketBefore);
+        int combineFrom = -1, written = 0;
+        for (int i = 0; i < lNum.length; i++) {
+            int i1 = lNum[i];
+            if (combineFrom < 0) {
+                // Check if next entry is the next in the ref list:
+                if ((i < lNum.length-1) && (lNum[i+1] == i1+1))
+                    combineFrom = i1;
+                else {
+                    // Add single entry:
+                    if (i>0)
+                        sb.append((String)citProperties.get("CitationSeparator"));
+                    sb.append(lNum[i] > 0 ? String.valueOf(lNum[i]) : UNDEFINED_CITATION_MARKER);
+                    written++;
+                }
+            } else {
+                // We are building a list of combined entries.
+                // Check if it ends here:
+                if ((i == lNum.length-1) || (lNum[i+1] != i1+1)) {
+                    if (written>0)
+                        sb.append((String)citProperties.get("CitationSeparator"));
+                    if ((minGroupingCount > 0) && (i1+1-combineFrom >= minGroupingCount)) {
+                        sb.append(combineFrom);
+                        sb.append((String)citProperties.get("GroupedNumbersSeparator"));
+                        sb.append(i1);
+                        written++;
+                    }
+                    else {
+                        // Either we should never group, or there aren't enough
+                        // entries in this case to group. Output all:
+                        for (int jj=combineFrom; jj<=i1; jj++) {
+                            sb.append(jj);
+                            if (jj < i1)
+                                sb.append((String)citProperties.get("CitationSeparator"));
+                            written++;
+                        }
+                    }
+                    combineFrom = -1;
+
+                }
+                // If it doesn't end here, just keep iterating.
+            }
+
+        }
+        sb.append(bracketAfter);
+        return sb.toString();
+    }
+
+    /**
+     * Format the marker for the in-text citation according to this bib style.
+     *
+     * @param entry The JabRef BibtexEntry providing the data.
+     * @param inParenthesis Signals whether a parenthesized citation or an in-text citation is wanted.
+     * @param uniquefier String to add behind the year in case it's needed to separate similar
+     *   entries.
+     * @return The formatted citation.
+     */
+    public String getCitationMarker(BibtexEntry entry, BibtexDatabase database, boolean inParenthesis,
+                                    String uniquefier, int unlimAuthors) {
+        return getCitationMarker(new BibtexEntry[] {entry}, database, inParenthesis, new String[] {uniquefier},
+                new int[] {unlimAuthors});
+    }
+
+    /**
+     * Format the marker for the in-text citation according to this bib style. Uniquefier letters are added as
+     * provided by the uniquefiers argument. If successive entries within the citation are uniquefied from each other,
+     * this method will perform a grouping of these entries.
+     *
+     * @param entries The array of JabRef BibtexEntry providing the data.
+     * @param inParenthesis Signals whether a parenthesized citation or an in-text citation is wanted.
+     * @param uniquefiers Strings to add behind the year for each entry in case it's needed to separate similar
+     *   entries.
+     * @param unlimAuthors Boolean for each entry. If true, we should not use "et al" formatting regardless
+     *   of the number of authors. Can be null to indicate that no entries should have unlimited names.
+     * @return The formatted citation.
+     */
+    public String getCitationMarker(BibtexEntry[] entries, BibtexDatabase database, boolean inParenthesis,
+                                    String[] uniquefiers, int[] unlimAuthors) {
+
+        // Look for groups of uniquefied entries that should be combined in the output.
+        // E.g. (Olsen, 2005a, b) should be output instead of (Olsen, 2005a; Olsen, 2005b).
+        int piv = -1;
+        String tmpMarker = null;
+        if (uniquefiers != null) {
+            for (int i = 0; i < uniquefiers.length; i++) {
+
+                if ((uniquefiers[i] != null) && (uniquefiers[i].length() > 0)) {
+                    String authorField = (String)citProperties.get("AuthorField");
+                    int maxAuthors = (Integer)citProperties.get("MaxAuthors");
+                    if (piv == -1) {
+                        piv = i;
+                        tmpMarker = getAuthorYearParenthesisMarker(new BibtexEntry[] {entries[i]}, database,
+                            authorField,
+                            (String)citProperties.get("YearField"),
+                            maxAuthors,
+                            (String)citProperties.get("AuthorSeparator"),
+                            (String)citProperties.get("AuthorLastSeparator"),
+                            (String)citProperties.get("EtAlString"),
+                            (String)citProperties.get("YearSeparator"),
+                            (String)citProperties.get("BracketBefore"),
+                            (String)citProperties.get("BracketAfter"),
+                            (String)citProperties.get("CitationSeparator"), null, unlimAuthors);
+                        //System.out.println("piv="+piv+" tmpMarker='"+tmpMarker+"'");
+                    }
+                    else {
+                        // See if this entry can go into a group with the previous one:
+                        String thisMarker = getAuthorYearParenthesisMarker(new BibtexEntry[] {entries[i]}, database,
+                            authorField,
+                            (String)citProperties.get("YearField"),
+                            maxAuthors,
+                            (String)citProperties.get("AuthorSeparator"),
+                            (String)citProperties.get("AuthorLastSeparator"),
+                            (String)citProperties.get("EtAlString"),
+                            (String)citProperties.get("YearSeparator"),
+                            (String)citProperties.get("BracketBefore"),
+                            (String)citProperties.get("BracketAfter"),
+                            (String)citProperties.get("CitationSeparator"), null, unlimAuthors);
+
+                        String author = getCitationMarkerField(entries[i], database,
+                                authorField);
+                        AuthorList al = AuthorList.getAuthorList(author);
+                        //System.out.println("i="+i+" thisMarker='"+thisMarker+"'");
+                        int prevALim = i > 0 ? unlimAuthors[i-1] : unlimAuthors[0];
+                        if (!thisMarker.equals(tmpMarker) ||
+                                ((al.size() > maxAuthors) && (unlimAuthors[i] != prevALim))) {
+                            // No match. Update piv to exclude the previous entry. But first check if the
+                            // previous entry was part of a group:
+                            if ((piv > -1) && (i > piv+1)) {
+                                // Do the grouping:
+                                group(entries, uniquefiers, piv, i-1, (String)citProperties.get("UniquefierSeparator"));
+                            }
+                            tmpMarker = thisMarker;
+                            piv = i;
+                        }
+                    }
+                }
+                else {
+                    // This entry has no uniquefier.
+                    // Check if we just passed a group of more than one entry with uniquefier:
+                    if ((piv > -1) && (i > piv+1)) {
+                        // Do the grouping:
+                        group(entries, uniquefiers, piv, i-1, (String)citProperties.get("UniquefierSeparator"));
+                    }
+
+                    piv = -1;
+                }
+
+            }
+            // Finished with the loop. See if the last entries form a group:
+            if (piv >= 0) {
+                // Do the grouping:
+                group(entries, uniquefiers, piv, uniquefiers.length-1, (String)citProperties.get("UniquefierSeparator"));
+            }
+        }
+
+        if (inParenthesis)
+            return getAuthorYearParenthesisMarker(entries, database,
+                    (String)citProperties.get("AuthorField"),
+                    (String)citProperties.get("YearField"),
+                    (Integer)citProperties.get("MaxAuthors"),
+                    (String)citProperties.get("AuthorSeparator"),
+                    (String)citProperties.get("AuthorLastSeparator"),
+                    (String)citProperties.get("EtAlString"),
+                    (String)citProperties.get("YearSeparator"),
+                    (String)citProperties.get("BracketBefore"),
+                    (String)citProperties.get("BracketAfter"),
+                    (String)citProperties.get("CitationSeparator"),
+                    uniquefiers, unlimAuthors);
+        else {
+            String authorLastSeparator = (String)citProperties.get("AuthorLastSeparator");
+            String alsInText = (String)citProperties.get("AuthorLastSeparatorInText");
+            if (alsInText != null)
+                authorLastSeparator = alsInText;
+            return getAuthorYearInTextMarker(entries, database,
+                    (String)citProperties.get("AuthorField"),
+                    (String)citProperties.get("YearField"),
+                    (Integer)citProperties.get("MaxAuthors"),
+                    (String)citProperties.get("AuthorSeparator"),
+                    authorLastSeparator,
+                    (String)citProperties.get("EtAlString"),
+                    (String)citProperties.get("InTextYearSeparator"),
+                    (String)citProperties.get("BracketBefore"),
+                    (String)citProperties.get("BracketAfter"),
+                    (String)citProperties.get("CitationSeparator"),
+                    uniquefiers, unlimAuthors);
+        }
+    }
+
+    /**
+     * Modify entry and uniqiefier arrays to facilitate a grouped presentation of uniqiefied entries.
+     * @param entries The entry array.
+     * @param uniquefiers The uniquefier array.
+     * @param from The first index to group (inclusive)
+     * @param to The last index to group (inclusive)
+     * @param separator The separator for the uniquefier letters.
+     */
+    private void group(BibtexEntry[] entries, String[] uniquefiers, int from, int to, String separator) {
+        StringBuilder sb = new StringBuilder(uniquefiers[from]);
+        for (int i=from+1; i<=to; i++) {
+            sb.append(separator);
+            sb.append(uniquefiers[i]);
+            entries[i] = null;
+        }
+        uniquefiers[from] = sb.toString();
+    }
+
+    /**
+     * This method produces (Author, year) style citation strings in many different forms.
+     *
+     * @param entries The array of BibtexEntry to get fields from.
+     * @param authorField The bibtex field providing author names, e.g. "author" or "editor".
+     * @param yearField The bibtex field providing the year, e.g. "year".
+     * @param maxA The maximum number of authors to write out in full without using etal. Set to
+     *              -1 to always write out all authors.
+     * @param authorSep The String to add between author names except the last two, e.g. ", ".
+     * @param andString The String to add between the two last author names, e.g. " & ".
+     * @param etAlString The String to represent authors that are not mentioned, e.g. " et al."
+     * @param yearSep The String to separate authors from year, e.g. "; ".
+     * @param startBrace The opening parenthesis.
+     * @param endBrace The closing parenthesis.
+     * @param citationSeparator The String to separate citations from each other.
+     * @param uniquifiers Optional parameter to separate similar citations. Elements can be null if not needed.
+     * @return The formatted citation.
+     */
+    public String getAuthorYearParenthesisMarker(BibtexEntry[] entries, BibtexDatabase database,
+                                                 String authorField, String yearField,
+                                                 int maxA, String authorSep,
+                                                 String andString, String etAlString, String yearSep,
+                                                 String startBrace, String endBrace, String citationSeparator,
+                                                 String[] uniquifiers, int[] unlimAuthors) {
+
+
+        StringBuffer sb = new StringBuffer(startBrace);
+        for (int j=0; j<entries.length; j++) {
+
+            int unlimA = (unlimAuthors != null ? unlimAuthors[j] : -1);
+            int maxAuthors = unlimA > 0 ? unlimA : maxA;
+
+            BibtexEntry entry = entries[j];
+            
+            // Check if this entry has been nulled due to grouping with the previous entry(ies):
+            if (entry == null)
+                continue;
+
+            if (j > 0)
+                sb.append(citationSeparator);
+
+            String author = getCitationMarkerField(entry, database, authorField);
+
+            if (author != null) {
+                AuthorList al = AuthorList.getAuthorList(author);
+                sb.append(getAuthorLastName(al, 0));
+
+                if ((al.size() > 1) && ((al.size() <= maxAuthors) || (maxAuthors < 0))) {
+                    int i=1;
+                    while (i < al.size()-1) {
+                        sb.append(authorSep);
+                        sb.append(getAuthorLastName(al, i));
+                        i++;
+                    }
+                    sb.append(andString);
+                    sb.append(getAuthorLastName(al, al.size()-1));
+                } else if (al.size() > maxAuthors) {
+                    sb.append(etAlString);
+                }
+                sb.append(yearSep);
+            }
+            String year = getCitationMarkerField(entry, database, yearField);
+            if (year != null)
+                sb.append(year);
+            if ((uniquifiers != null) && (uniquifiers[j] != null))
+                sb.append(uniquifiers[j]);
+        }
+        sb.append(endBrace);
+        return sb.toString();
+
+    }
+
+    /**
+     * This method produces "Author (year)" style citation strings in many different forms.
+     *
+     * @param entries The array of BibtexEntry to get fields from.
+     * @param authorField The bibtex field providing author names, e.g. "author" or "editor".
+     * @param yearField The bibtex field providing the year, e.g. "year".
+     * @param maxA The maximum number of authors to write out in full without using etal. Set to
+     *              -1 to always write out all authors.
+     * @param authorSep The String to add between author names except the last two, e.g. ", ".
+     * @param andString The String to add between the two last author names, e.g. " & ".
+     * @param etAlString The String to represent authors that are not mentioned, e.g. " et al."
+     * @param yearSep The String to separate authors from year, e.g. "; ".
+     * @param startBrace The opening parenthesis.
+     * @param endBrace The closing parenthesis.
+     * @param uniquefiers Optional parameters to separate similar citations. Can be null if not needed.
+     * @return The formatted citation.
+     */
+    public String getAuthorYearInTextMarker(BibtexEntry[] entries, BibtexDatabase database, String authorField,
+                                            String yearField, int maxA, String authorSep,
+                                            String andString, String etAlString, String yearSep,
+                                            String startBrace, String endBrace, String citationSeparator,
+                                            String[] uniquefiers, int[] unlimAuthors) {
+        StringBuffer sb = new StringBuffer();
+        for (int i=0; i<entries.length; i++) {
+
+            int unlimA = (unlimAuthors != null ? unlimAuthors[i] : -1);
+            int maxAuthors = unlimA > 0 ? unlimA : maxA;
+
+            // Check if this entry has been nulled due to grouping with the previous entry(ies):
+            if (entries[i] == null)
+                continue;
+
+            if (i > 0)
+                sb.append(citationSeparator);
+            String author = getCitationMarkerField(entries[i], database, authorField);
+            if (author != null) {
+                AuthorList al = AuthorList.getAuthorList(author);
+                if (al.size() > 0)
+                    sb.append(getAuthorLastName(al, 0));
+                if ((al.size() > 1) && ((al.size() <= maxAuthors) || (maxAuthors < 0))) {
+                    int j=1;
+                    while (j < al.size()-1) {
+                        sb.append(authorSep);
+                        sb.append(getAuthorLastName(al, j));
+                        j++;
+                    }
+                    sb.append(andString);
+                    sb.append(getAuthorLastName(al, al.size()-1));
+                } else if (al.size() > maxAuthors) {
+                    sb.append(etAlString);
+                }
+                sb.append(yearSep);
+            }
+            sb.append(startBrace);
+            String year = getCitationMarkerField(entries[i], database, yearField);
+            if (year != null)
+                sb.append(year);
+            if ((uniquefiers != null) && (uniquefiers[i] != null))
+                sb.append(uniquefiers[i]);
+            sb.append(endBrace);
+        }
+        return sb.toString();
+
+    }
+
+    /**
+     * This method looks up a field for en entry in a database. Any number of backup fields can be used
+     * if the primary field is empty.
+     * @param entry The entry.
+     * @param database The database the entry belongs to.
+     * @param field The field, or succession of fields, to look up. If backup fields are needed, separate
+     *   field names by /. E.g. to use "author" with "editor" as backup, specify "author/editor".
+     * @return The resolved field content, or an empty string if the field(s) were empty.
+     */
+    public String getCitationMarkerField(BibtexEntry entry, BibtexDatabase database, String field) {
+        String[] fields = field.split("/");
+        for (int i = 0; i < fields.length; i++) {
+            String s = fields[i];
+            String content = BibtexDatabase.getResolvedField(s, entry, database);
+            if ((content != null) && (content.trim().length() > 0)) {
+                if (fieldFormatter != null)
+                    content = fieldFormatter.format(content);
+                return content;
+            }
+        }
+        // No luck? Return an empty string:
+        return "";
+    }
+
+    /**
+     * Look up the nth author and return the proper last name for citation markers.
+     * @param al The author list.
+     * @param number The number of the author to return.
+     * @return The author name, or an empty String if inapplicable.
+     */
+    public String getAuthorLastName(AuthorList al, int number) {
+        StringBuilder sb = new StringBuilder();
+
+        if (al.size() > number) {
+            AuthorList.Author a = al.getAuthor(number);
+            if ((a.getVon() != null) && a.getVon().length() > 0) {
+                String von = a.getVon();
+                sb.append(von);
+                /*sb.append(von.substring(0, 1).toUpperCase());
+                if (von.length() > 1)
+                    sb.append(von.substring(1));*/
+                sb.append(' ');
+            }
+            sb.append(a.getLast());
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Take a finished citation and insert a string at the end (but inside the end bracket)
+     * separated by "PageInfoSeparator"
+     * @param citation
+     * @param pageInfo
+     * @return
+     */
+    public String insertPageInfo(String citation, String pageInfo) {
+        String bracketAfter = getStringCitProperty("BracketAfter");
+        if (citation.endsWith(bracketAfter)) {
+            String first = citation.substring(0, citation.length()-bracketAfter.length());
+            return first+getStringCitProperty("PageInfoSeparator")+pageInfo+bracketAfter;
+        }
+        else return citation+getStringCitProperty("PageInfoSeparator")+pageInfo;
+    }
+
+    /**
+     * Convenience method for checking the property for whether we use number citations or
+     * author-year citations.
+     * @return true if we use numbered citations, false otherwise.
+     */
+    public boolean isNumberEntries() {
+        return (Boolean)getProperty("IsNumberEntries");
+    }
+
+    /**
+     * Convenience method for checking the property for whether we sort the bibliography
+     * according to their order of appearance in the text.
+     * @return true to sort by appearance, false to sort alphabetically.
+     */
+    public boolean isSortByPosition() {
+        return (Boolean)getProperty("IsSortByPosition");
+    }
+
+    /**
+     * Convenience method for checking whether citation markers should be italicised.
+     * Will only be relevant if isFormatCitations() returns true.
+     * @return true to indicate that citations should be in italics.
+     */
+    public boolean isItalicCitations() {
+        return (Boolean)citProperties.get("ItalicCitations");
+    }
+
+    /**
+     * Convenience method for checking whether citation markers should be bold.
+     * Will only be relevant if isFormatCitations() returns true.
+     * @return true to indicate that citations should be in bold.
+     */
+    public boolean isBoldCitations() {
+        return (Boolean)citProperties.get("BoldCitations");
+    }
+
+    /**
+     * Convenience method for checking whether citation markers formatted
+     * according to the results of the isItalicCitations() and
+     * isBoldCitations() methods.
+     * @return true to indicate that citations should be in italics.
+     */
+    public boolean isFormatCitations() {
+        return (Boolean)citProperties.get("FormatCitations");
+    }
+
+    public boolean isBibtexKeyCiteMarkers() {
+        return (Boolean)citProperties.get("BibtexKeyCitations");
+    }
+    
+    /**
+     * Get boolean property.
+     * @param key The property key
+     * @return the value
+     */
+    public boolean getBooleanCitProperty(String key) {
+        return (Boolean)citProperties.get(key);
+    }
+
+    public int getIntCitProperty(String key) {
+        return (Integer)citProperties.get(key);
+    }
+
+    public String getStringCitProperty(String key) {
+        return (String)citProperties.get(key);
+    }
+
+    public String getCitationCharacterFormat() {
+        return (String)citProperties.get("CitationCharacterFormat");
+    }
+    /**
+     * Get a style property.
+     * @param name The property name.
+     * @return The property value, or null if it doesn't exist.
+     */
+    public Object getProperty(String name) {
+        return properties.get(name);
+    }
+
+    public int compareTo(Object o) {
+        OOBibStyle other = (OOBibStyle)o;
+        return getName().compareTo(other.getName());
+    }
+
+    public boolean equals(Object o) {
+        return styleFile.equals(((OOBibStyle)o).styleFile);
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/oo/OOPreFormatter.java b/src/java/net/sf/jabref/oo/OOPreFormatter.java
old mode 100755
new mode 100644
index 27a6168..a32daa9
--- a/src/java/net/sf/jabref/oo/OOPreFormatter.java
+++ b/src/java/net/sf/jabref/oo/OOPreFormatter.java
@@ -1,449 +1,449 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import java.util.HashMap;
-
-/**
- * This formatter preprocesses JabRef fields before they are run through the layout of the
- * bibliography style. It handles translation of LaTeX italic/bold commands into HTML tags.
- *
- * @version $Revision: 2568 $ ($Date: 2008-01-15 18:40:26 +0100 (Tue, 15 Jan 2008) $)
- */
-public class OOPreFormatter implements LayoutFormatter {
-
-
-    public static HashMap<String, String> CHARS = new HashMap<String, String>();
-
-    static {
-        // Following character definitions contributed by Ervin Kolenovic:
-		// HTML named entities from #192 - #255 (UNICODE Latin-1)
-		CHARS.put("`A", "À"); // #192
-		CHARS.put("'A", "Á"); // #193
-		CHARS.put("^A", "Â"); // #194
-		CHARS.put("~A", "Ã"); // #195
-		CHARS.put("\"A", "Ä"); // #196
-		CHARS.put("AA", "Å"); // #197
-		CHARS.put("AE", "Æ"); // #198
-		CHARS.put("cC", "Ç"); // #199
-        CHARS.put("`E", "È"); // #200
-		CHARS.put("'E", "É"); // #201
-		CHARS.put("^E", "Ê"); // #202
-		CHARS.put("\"E", "Ë"); // #203
-		CHARS.put("`I", "Ì"); // #204
-		CHARS.put("'I", "Í"); // #205
-		CHARS.put("^I", "Î"); // #206
-		CHARS.put("\"I", "Ï"); // #207
-		CHARS.put("DH", "Ð"); // #208
-		CHARS.put("~N", "Ñ"); // #209
-		CHARS.put("`O", "Ò"); // #210
-		CHARS.put("'O", "Ó"); // #211
-		CHARS.put("^O", "Ô"); // #212
-		CHARS.put("~O", "Õ"); // #213
-		CHARS.put("\"O", "Ö"); // #214
-		// According to ISO 8859-1 the "\times" symbol should be placed here
-		// (#215).
-		// Omitting this, because it is a mathematical symbol.
-		CHARS.put("O", "Ø"); // #216
-		CHARS.put("`U", "Ù"); // #217
-		CHARS.put("'U", "Ú"); // #218
-		CHARS.put("^U", "Û"); // #219
-		CHARS.put("\"U", "Ü"); // #220
-		CHARS.put("'Y", "Ý"); // #221
-		CHARS.put("TH", "Þ"); // #222
-		CHARS.put("ss", "ß"); // #223
-		CHARS.put("`a", "à"); // #224
-		CHARS.put("'a", "á"); // #225
-		CHARS.put("^a", "â"); // #226
-		CHARS.put("~a", "ã"); // #227
-		CHARS.put("\"a", "ä"); // #228
-		CHARS.put("aa", "å"); // #229
-		CHARS.put("ae", "æ"); // #230
-		CHARS.put("cc", "ç"); // #231
-		CHARS.put("`e", "è"); // #232
-		CHARS.put("'e", "é"); // #233
-		CHARS.put("^e", "ê"); // #234
-		CHARS.put("\"e", "ë"); // #235
-		CHARS.put("`i", "ì"); // #236
-		CHARS.put("'i", "í"); // #237
-		CHARS.put("^i", "î"); // #238
-		CHARS.put("\"i", "ï"); // #239
-		CHARS.put("dh", "ð"); // #240
-		CHARS.put("~n", "ñ"); // #241
-		CHARS.put("`o", "ò"); // #242
-		CHARS.put("'o", "ó"); // #243
-		CHARS.put("^o", "ô"); // #244
-		CHARS.put("~o", "õ"); // #245
-		CHARS.put("\"o", "ö"); // #246
-		// According to ISO 8859-1 the "\div" symbol should be placed here
-		// (#247).
-		// Omitting this, because it is a mathematical symbol.
-		CHARS.put("o", "ø"); // #248
-		CHARS.put("`u", "ù"); // #249
-		CHARS.put("'u", "ú"); // #250
-		CHARS.put("^u", "û"); // #251
-		CHARS.put("\"u", "ü"); // #252
-		CHARS.put("'y", "ý"); // #253
-		CHARS.put("th", "þ"); // #254
-		CHARS.put("\"y", "ÿ"); // #255
-
-		// HTML special characters without names (UNICODE Latin Extended-A),
-		// indicated by UNICODE number
-		CHARS.put("=A", "Ā"); // "Amacr"
-		CHARS.put("=a", "ā"); // "amacr"
-		CHARS.put("uA", "Ă"); // "Abreve"
-		CHARS.put("ua", "ă"); // "abreve"
-		CHARS.put("kA", "Ą"); // "Aogon"
-		CHARS.put("ka", "ą"); // "aogon"
-		CHARS.put("'C", "Ć"); // "Cacute"
-		CHARS.put("'c", "ć"); // "cacute"
-		CHARS.put("^C", "Ĉ"); // "Ccirc"
-		CHARS.put("^c", "ĉ"); // "ccirc"
-		CHARS.put(".C", "Ċ"); // "Cdot"
-		CHARS.put(".c", "ċ"); // "cdot"
-		CHARS.put("vC", "Č"); // "Ccaron"
-		CHARS.put("vc", "č"); // "ccaron"
-		CHARS.put("vD", "Ď"); // "Dcaron"
-		// Symbol #271 (d�) has no special Latex command
-		CHARS.put("DJ", "Đ"); // "Dstrok"
-		CHARS.put("dj", "đ"); // "dstrok"
-		CHARS.put("=E", "Ē"); // "Emacr"
-		CHARS.put("=e", "ē"); // "emacr"
-		CHARS.put("uE", "Ĕ"); // "Ebreve"
-		CHARS.put("ue", "ĕ"); // "ebreve"
-		CHARS.put(".E", "Ė"); // "Edot"
-		CHARS.put(".e", "ė"); // "edot"
-		CHARS.put("kE", "Ę"); // "Eogon"
-		CHARS.put("ke", "ę"); // "eogon"
-		CHARS.put("vE", "Ě"); // "Ecaron"
-		CHARS.put("ve", "ě"); // "ecaron"
-		CHARS.put("^G", "Ĝ"); // "Gcirc"
-		CHARS.put("^g", "ĝ"); // "gcirc"
-		CHARS.put("uG", "Ğ"); // "Gbreve"
-		CHARS.put("ug", "ğ"); // "gbreve"
-		CHARS.put(".G", "Ġ"); // "Gdot"
-		CHARS.put(".g", "ġ"); // "gdot"
-		CHARS.put("cG", "Ģ"); // "Gcedil"
-		CHARS.put("'g", "ģ"); // "gacute"
-		CHARS.put("^H", "Ĥ"); // "Hcirc"
-		CHARS.put("^h", "ĥ"); // "hcirc"
-		CHARS.put("Hstrok", "Ħ"); // "Hstrok"
-		CHARS.put("hstrok", "ħ"); // "hstrok"
-		CHARS.put("~I", "Ĩ"); // "Itilde"
-		CHARS.put("~i", "ĩ"); // "itilde"
-		CHARS.put("=I", "Ī"); // "Imacr"
-		CHARS.put("=i", "ī"); // "imacr"
-		CHARS.put("uI", "Ĭ"); // "Ibreve"
-		CHARS.put("ui", "ĭ"); // "ibreve"
-		CHARS.put("kI", "Į"); // "Iogon"
-		CHARS.put("ki", "į"); // "iogon"
-		CHARS.put(".I", "İ"); // "Idot"
-		CHARS.put("i", "ı"); // "inodot"
-		// Symbol #306 (IJ) has no special Latex command
-		// Symbol #307 (ij) has no special Latex command
-		CHARS.put("^J", "Ĵ"); // "Jcirc"
-		CHARS.put("^j", "ĵ"); // "jcirc"
-		CHARS.put("cK", "Ķ"); // "Kcedil"
-		CHARS.put("ck", "ķ"); // "kcedil"
-		// Symbol #312 (k) has no special Latex command
-		CHARS.put("'L", "Ĺ"); // "Lacute"
-		CHARS.put("'l", "ĺ"); // "lacute"
-		CHARS.put("cL", "Ļ"); // "Lcedil"
-		CHARS.put("cl", "ļ"); // "lcedil"
-		// Symbol #317 (L�) has no special Latex command
-		// Symbol #318 (l�) has no special Latex command
-		CHARS.put("Lmidot", "Ŀ"); // "Lmidot"
-		CHARS.put("lmidot", "ŀ"); // "lmidot"
-		CHARS.put("L", "Ł"); // "Lstrok"
-		CHARS.put("l", "ł"); // "lstrok"
-		CHARS.put("'N", "Ń"); // "Nacute"
-		CHARS.put("'n", "ń"); // "nacute"
-		CHARS.put("cN", "Ņ"); // "Ncedil"
-		CHARS.put("cn", "ņ"); // "ncedil"
-		CHARS.put("vN", "Ň"); // "Ncaron"
-		CHARS.put("vn", "ň"); // "ncaron"
-		// Symbol #329 (�n) has no special Latex command
-		CHARS.put("NG", "Ŋ"); // "ENG"
-		CHARS.put("ng", "ŋ"); // "eng"
-		CHARS.put("=O", "Ō"); // "Omacr"
-		CHARS.put("=o", "ō"); // "omacr"
-		CHARS.put("uO", "Ŏ"); // "Obreve"
-		CHARS.put("uo", "ŏ"); // "obreve"
-		CHARS.put("HO", "Ő"); // "Odblac"
-		CHARS.put("Ho", "ő"); // "odblac"
-		CHARS.put("OE", "Œ"); // "OElig"
-		CHARS.put("oe", "œ"); // "oelig"
-		CHARS.put("'R", "Ŕ"); // "Racute"
-		CHARS.put("'r", "ŕ"); // "racute"
-		CHARS.put("cR", "Ŗ"); // "Rcedil"
-		CHARS.put("cr", "ŗ"); // "rcedil"
-		CHARS.put("vR", "Ř"); // "Rcaron"
-		CHARS.put("vr", "ř"); // "rcaron"
-		CHARS.put("'S", "Ś"); // "Sacute"
-		CHARS.put("'s", "ś"); // "sacute"
-		CHARS.put("^S", "Ŝ"); // "Scirc"
-		CHARS.put("^s", "ŝ"); // "scirc"
-		CHARS.put("cS", "Ş"); // "Scedil"
-		CHARS.put("cs", "ş"); // "scedil"
-		CHARS.put("vS", "Š"); // "Scaron"
-		CHARS.put("vs", "š"); // "scaron"
-		CHARS.put("cT", "Ţ"); // "Tcedil"
-		CHARS.put("ct", "ţ"); // "tcedil"
-		CHARS.put("vT", "Ť"); // "Tcaron"
-		// Symbol #357 (t�) has no special Latex command
-		CHARS.put("Tstrok", "Ŧ"); // "Tstrok"
-		CHARS.put("tstrok", "ŧ"); // "tstrok"
-		CHARS.put("~U", "Ũ"); // "Utilde"
-		CHARS.put("~u", "ũ"); // "utilde"
-		CHARS.put("=U", "Ū"); // "Umacr"
-		CHARS.put("=u", "ū"); // "umacr"
-		CHARS.put("uU", "Ŭ"); // "Ubreve"
-		CHARS.put("uu", "ŭ"); // "ubreve"
-		CHARS.put("rU", "Ů"); // "Uring"
-		CHARS.put("ru", "ů"); // "uring"
-		CHARS.put("HU", "ů"); // "Odblac"
-		CHARS.put("Hu", "ű"); // "odblac"
-		CHARS.put("kU", "Ų"); // "Uogon"
-		CHARS.put("ku", "ų"); // "uogon"
-		CHARS.put("^W", "Ŵ"); // "Wcirc"
-		CHARS.put("^w", "ŵ"); // "wcirc"
-		CHARS.put("^Y", "Ŷ"); // "Ycirc"
-		CHARS.put("^y", "ŷ"); // "ycirc"
-		CHARS.put("\"Y", "Ÿ"); // "Yuml"
-		CHARS.put("'Z", "Ź"); // "Zacute"
-		CHARS.put("'z", "ź"); // "zacute"
-		CHARS.put(".Z", "Ż"); // "Zdot"
-		CHARS.put(".z", "ż"); // "zdot"
-		CHARS.put("vZ", "Ž"); // "Zcaron"
-		CHARS.put("vz", "ž"); // "zcaron"
-		// Symbol #383 (f) has no special Latex command
-        CHARS.put("%", "%"); // percent sign
-    }
-
-	public String format(String field) {
-		int i;
-		field = field.replaceAll("&|\\\\&", "&");
-
-		StringBuffer sb = new StringBuffer();
-		StringBuffer currentCommand = null;
-
-		char c;
-		boolean escaped = false, incommand = false;
-
-		for (i = 0; i < field.length(); i++) {
-			c = field.charAt(i);
-			if (escaped && (c == '\\')) {
-				sb.append('\\');
-				escaped = false;
-			} else if (c == '\\') {
-				if (incommand){
-					/* Close Command */
-					String command = currentCommand.toString();
-					Object result = CHARS.get(command);
-					if (result != null) {
-						sb.append((String) result);
-					} else {
-						sb.append(command);
-					}
-				}
-				escaped = true;
-				incommand = true;
-				currentCommand = new StringBuffer();
-			} else if (!incommand && (c == '{' || c == '}')) {
-				// Swallow the brace.
-			} else if (Character.isLetter(c) || (c == '%')
-				|| (Globals.SPECIAL_COMMAND_CHARS.indexOf(String.valueOf(c)) >= 0)) {
-				escaped = false;
-
-                if (!incommand)
-					sb.append(c);
-					// Else we are in a command, and should not keep the letter.
-				else {
-					currentCommand.append(c);
-                    testCharCom: if ((currentCommand.length() == 1)
-						&& (Globals.SPECIAL_COMMAND_CHARS.indexOf(currentCommand.toString()) >= 0)) {
-						// This indicates that we are in a command of the type
-						// \^o or \~{n}
-						if (i >= field.length() - 1)
-							break testCharCom;
-
-						String command = currentCommand.toString();
-						i++;
-						c = field.charAt(i);
-						// System.out.println("next: "+(char)c);
-						String combody;
-						if (c == '{') {
-							IntAndString part = getPart(field, i, false);
-							i += part.i;
-							combody = part.s;
-						} else {
-							combody = field.substring(i, i + 1);
-							// System.out.println("... "+combody);
-						}
-						Object result = CHARS.get(command + combody);
-
-						if (result != null)
-							sb.append((String) result);
-
-						incommand = false;
-						escaped = false;
-					} else {
-						//	Are we already at the end of the string?
-						if (i + 1 == field.length()){
-							String command = currentCommand.toString();
-                            Object result = CHARS.get(command);
-							/* If found, then use translated version. If not,
-							 * then keep
-							 * the text of the parameter intact.
-							 */
-							if (result != null) {
-								sb.append((String) result);
-							} else {
-								sb.append(command);
-							}
-
-						}
-					}
-				}
-			} else {
-				String argument = null;
-
-				if (!incommand) {
-					sb.append(c);
-				} else if (Character.isWhitespace(c) || (c == '{') || (c == '}')) {
-					// First test if we are already at the end of the string.
-					// if (i >= field.length()-1)
-					// break testContent;
-
-					String command = currentCommand.toString();
-
-                    // Then test if we are dealing with a italics or bold
-					// command.
-					// If so, handle.
-					if (command.equals("em") || command.equals("emph") || command.equals("textit")) {
-						IntAndString part = getPart(field, i, true);
-
-						i += part.i;
-						sb.append("<em>").append(part.s).append("</em>");
-					} else if (command.equals("textbf")) {
-						IntAndString part = getPart(field, i, true);
-						i += part.i;
-						sb.append("<b>").append(part.s).append("</b>");
-					} else if (c == '{') {
-						IntAndString part = getPart(field, i, true);
-						i += part.i;
-						argument = part.s;
-						if (argument != null) {
-							// handle common case of general latex command
-							Object result = CHARS.get(command + argument);
-                            // System.out.print("command: "+command+", arg: "+argument);
-							// System.out.print(", result: ");
-							// If found, then use translated version. If not, then keep
-							// the
-							// text of the parameter intact.
-							if (result != null) {
-								sb.append((String) result);
-							} else {
-								sb.append(argument);
-							}
-						}
-                    } else if (c == '}') {
-                        // This end brace terminates a command. This can be the case in
-                        // constructs like {\aa}. The correct behaviour should be to
-                        // substitute the evaluated command and swallow the brace:
-                        Object result = CHARS.get(command);
-                        if (result != null) {
-                            sb.append((String) result);
-                        } else {
-                            // If the command is unknown, just print it:
-                            sb.append(command);
-                        }
-                    } else {
-						Object result = CHARS.get(command);
-						if (result != null) {
-							sb.append((String) result);
-						} else {
-							sb.append(command);
-						}
-						sb.append(' ');
-					}
-				}/* else if (c == '}') {
-                    System.out.printf("com term by }: '%s'\n", currentCommand.toString());
-
-                    argument = "";
-				}*/ else {
-					/*
-					 * TODO: this point is reached, apparently, if a command is
-					 * terminated in a strange way, such as with "$\omega$".
-					 * Also, the command "\&" causes us to get here. The former
-					 * issue is maybe a little difficult to address, since it
-					 * involves the LaTeX math mode. We don't have a complete
-					 * LaTeX parser, so maybe it's better to ignore these
-					 * commands?
-					 */
-				}
-
-				incommand = false;
-				escaped = false;
-			}
-		}
-
-		return sb.toString();
-	}
-
-	private IntAndString getPart(String text, int i, boolean terminateOnEndBraceOnly) {
-		char c;
-		int count = 0;
-
-		StringBuffer part = new StringBuffer();
-
-		// advance to first char and skip wihitespace
-		i++;
-		while (i < text.length() && Character.isWhitespace(text.charAt(i))){
-			i++;
-		}
-
-		// then grab whathever is the first token (counting braces)
-		while (i < text.length()){
-			c = text.charAt(i);
-			if (!terminateOnEndBraceOnly && count == 0 && Character.isWhitespace(c)) {
-				i--; // end argument and leave whitespace for further
-					 // processing
-				break;
-			}
-			if (c == '}' && --count < 0)
-				break;
-			else if (c == '{')
-				count++;
-			part.append(c);
-			i++;
-		}
-		return new IntAndString(part.length(), format(part.toString()));
-	}
-
-	private class IntAndString {
-		public int i;
-
-		String s;
-
-		public IntAndString(int i, String s) {
-			this.i = i;
-			this.s = s;
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import java.util.HashMap;
+
+/**
+ * This formatter preprocesses JabRef fields before they are run through the layout of the
+ * bibliography style. It handles translation of LaTeX italic/bold commands into HTML tags.
+ *
+ * @version $Revision: 2568 $ ($Date: 2008-01-15 18:40:26 +0100 (Tue, 15 Jan 2008) $)
+ */
+public class OOPreFormatter implements LayoutFormatter {
+
+
+    public static HashMap<String, String> CHARS = new HashMap<String, String>();
+
+    static {
+        // Following character definitions contributed by Ervin Kolenovic:
+		// HTML named entities from #192 - #255 (UNICODE Latin-1)
+		CHARS.put("`A", "À"); // #192
+		CHARS.put("'A", "Á"); // #193
+		CHARS.put("^A", "Â"); // #194
+		CHARS.put("~A", "Ã"); // #195
+		CHARS.put("\"A", "Ä"); // #196
+		CHARS.put("AA", "Å"); // #197
+		CHARS.put("AE", "Æ"); // #198
+		CHARS.put("cC", "Ç"); // #199
+        CHARS.put("`E", "È"); // #200
+		CHARS.put("'E", "É"); // #201
+		CHARS.put("^E", "Ê"); // #202
+		CHARS.put("\"E", "Ë"); // #203
+		CHARS.put("`I", "Ì"); // #204
+		CHARS.put("'I", "Í"); // #205
+		CHARS.put("^I", "Î"); // #206
+		CHARS.put("\"I", "Ï"); // #207
+		CHARS.put("DH", "Ð"); // #208
+		CHARS.put("~N", "Ñ"); // #209
+		CHARS.put("`O", "Ò"); // #210
+		CHARS.put("'O", "Ó"); // #211
+		CHARS.put("^O", "Ô"); // #212
+		CHARS.put("~O", "Õ"); // #213
+		CHARS.put("\"O", "Ö"); // #214
+		// According to ISO 8859-1 the "\times" symbol should be placed here
+		// (#215).
+		// Omitting this, because it is a mathematical symbol.
+		CHARS.put("O", "Ø"); // #216
+		CHARS.put("`U", "Ù"); // #217
+		CHARS.put("'U", "Ú"); // #218
+		CHARS.put("^U", "Û"); // #219
+		CHARS.put("\"U", "Ü"); // #220
+		CHARS.put("'Y", "Ý"); // #221
+		CHARS.put("TH", "Þ"); // #222
+		CHARS.put("ss", "ß"); // #223
+		CHARS.put("`a", "à"); // #224
+		CHARS.put("'a", "á"); // #225
+		CHARS.put("^a", "â"); // #226
+		CHARS.put("~a", "ã"); // #227
+		CHARS.put("\"a", "ä"); // #228
+		CHARS.put("aa", "å"); // #229
+		CHARS.put("ae", "æ"); // #230
+		CHARS.put("cc", "ç"); // #231
+		CHARS.put("`e", "è"); // #232
+		CHARS.put("'e", "é"); // #233
+		CHARS.put("^e", "ê"); // #234
+		CHARS.put("\"e", "ë"); // #235
+		CHARS.put("`i", "ì"); // #236
+		CHARS.put("'i", "í"); // #237
+		CHARS.put("^i", "î"); // #238
+		CHARS.put("\"i", "ï"); // #239
+		CHARS.put("dh", "ð"); // #240
+		CHARS.put("~n", "ñ"); // #241
+		CHARS.put("`o", "ò"); // #242
+		CHARS.put("'o", "ó"); // #243
+		CHARS.put("^o", "ô"); // #244
+		CHARS.put("~o", "õ"); // #245
+		CHARS.put("\"o", "ö"); // #246
+		// According to ISO 8859-1 the "\div" symbol should be placed here
+		// (#247).
+		// Omitting this, because it is a mathematical symbol.
+		CHARS.put("o", "ø"); // #248
+		CHARS.put("`u", "ù"); // #249
+		CHARS.put("'u", "ú"); // #250
+		CHARS.put("^u", "û"); // #251
+		CHARS.put("\"u", "ü"); // #252
+		CHARS.put("'y", "ý"); // #253
+		CHARS.put("th", "þ"); // #254
+		CHARS.put("\"y", "ÿ"); // #255
+
+		// HTML special characters without names (UNICODE Latin Extended-A),
+		// indicated by UNICODE number
+		CHARS.put("=A", "Ā"); // "Amacr"
+		CHARS.put("=a", "ā"); // "amacr"
+		CHARS.put("uA", "Ă"); // "Abreve"
+		CHARS.put("ua", "ă"); // "abreve"
+		CHARS.put("kA", "Ą"); // "Aogon"
+		CHARS.put("ka", "ą"); // "aogon"
+		CHARS.put("'C", "Ć"); // "Cacute"
+		CHARS.put("'c", "ć"); // "cacute"
+		CHARS.put("^C", "Ĉ"); // "Ccirc"
+		CHARS.put("^c", "ĉ"); // "ccirc"
+		CHARS.put(".C", "Ċ"); // "Cdot"
+		CHARS.put(".c", "ċ"); // "cdot"
+		CHARS.put("vC", "Č"); // "Ccaron"
+		CHARS.put("vc", "č"); // "ccaron"
+		CHARS.put("vD", "Ď"); // "Dcaron"
+		// Symbol #271 (d�) has no special Latex command
+		CHARS.put("DJ", "Đ"); // "Dstrok"
+		CHARS.put("dj", "đ"); // "dstrok"
+		CHARS.put("=E", "Ē"); // "Emacr"
+		CHARS.put("=e", "ē"); // "emacr"
+		CHARS.put("uE", "Ĕ"); // "Ebreve"
+		CHARS.put("ue", "ĕ"); // "ebreve"
+		CHARS.put(".E", "Ė"); // "Edot"
+		CHARS.put(".e", "ė"); // "edot"
+		CHARS.put("kE", "Ę"); // "Eogon"
+		CHARS.put("ke", "ę"); // "eogon"
+		CHARS.put("vE", "Ě"); // "Ecaron"
+		CHARS.put("ve", "ě"); // "ecaron"
+		CHARS.put("^G", "Ĝ"); // "Gcirc"
+		CHARS.put("^g", "ĝ"); // "gcirc"
+		CHARS.put("uG", "Ğ"); // "Gbreve"
+		CHARS.put("ug", "ğ"); // "gbreve"
+		CHARS.put(".G", "Ġ"); // "Gdot"
+		CHARS.put(".g", "ġ"); // "gdot"
+		CHARS.put("cG", "Ģ"); // "Gcedil"
+		CHARS.put("'g", "ģ"); // "gacute"
+		CHARS.put("^H", "Ĥ"); // "Hcirc"
+		CHARS.put("^h", "ĥ"); // "hcirc"
+		CHARS.put("Hstrok", "Ħ"); // "Hstrok"
+		CHARS.put("hstrok", "ħ"); // "hstrok"
+		CHARS.put("~I", "Ĩ"); // "Itilde"
+		CHARS.put("~i", "ĩ"); // "itilde"
+		CHARS.put("=I", "Ī"); // "Imacr"
+		CHARS.put("=i", "ī"); // "imacr"
+		CHARS.put("uI", "Ĭ"); // "Ibreve"
+		CHARS.put("ui", "ĭ"); // "ibreve"
+		CHARS.put("kI", "Į"); // "Iogon"
+		CHARS.put("ki", "į"); // "iogon"
+		CHARS.put(".I", "İ"); // "Idot"
+		CHARS.put("i", "ı"); // "inodot"
+		// Symbol #306 (IJ) has no special Latex command
+		// Symbol #307 (ij) has no special Latex command
+		CHARS.put("^J", "Ĵ"); // "Jcirc"
+		CHARS.put("^j", "ĵ"); // "jcirc"
+		CHARS.put("cK", "Ķ"); // "Kcedil"
+		CHARS.put("ck", "ķ"); // "kcedil"
+		// Symbol #312 (k) has no special Latex command
+		CHARS.put("'L", "Ĺ"); // "Lacute"
+		CHARS.put("'l", "ĺ"); // "lacute"
+		CHARS.put("cL", "Ļ"); // "Lcedil"
+		CHARS.put("cl", "ļ"); // "lcedil"
+		// Symbol #317 (L�) has no special Latex command
+		// Symbol #318 (l�) has no special Latex command
+		CHARS.put("Lmidot", "Ŀ"); // "Lmidot"
+		CHARS.put("lmidot", "ŀ"); // "lmidot"
+		CHARS.put("L", "Ł"); // "Lstrok"
+		CHARS.put("l", "ł"); // "lstrok"
+		CHARS.put("'N", "Ń"); // "Nacute"
+		CHARS.put("'n", "ń"); // "nacute"
+		CHARS.put("cN", "Ņ"); // "Ncedil"
+		CHARS.put("cn", "ņ"); // "ncedil"
+		CHARS.put("vN", "Ň"); // "Ncaron"
+		CHARS.put("vn", "ň"); // "ncaron"
+		// Symbol #329 (�n) has no special Latex command
+		CHARS.put("NG", "Ŋ"); // "ENG"
+		CHARS.put("ng", "ŋ"); // "eng"
+		CHARS.put("=O", "Ō"); // "Omacr"
+		CHARS.put("=o", "ō"); // "omacr"
+		CHARS.put("uO", "Ŏ"); // "Obreve"
+		CHARS.put("uo", "ŏ"); // "obreve"
+		CHARS.put("HO", "Ő"); // "Odblac"
+		CHARS.put("Ho", "ő"); // "odblac"
+		CHARS.put("OE", "Œ"); // "OElig"
+		CHARS.put("oe", "œ"); // "oelig"
+		CHARS.put("'R", "Ŕ"); // "Racute"
+		CHARS.put("'r", "ŕ"); // "racute"
+		CHARS.put("cR", "Ŗ"); // "Rcedil"
+		CHARS.put("cr", "ŗ"); // "rcedil"
+		CHARS.put("vR", "Ř"); // "Rcaron"
+		CHARS.put("vr", "ř"); // "rcaron"
+		CHARS.put("'S", "Ś"); // "Sacute"
+		CHARS.put("'s", "ś"); // "sacute"
+		CHARS.put("^S", "Ŝ"); // "Scirc"
+		CHARS.put("^s", "ŝ"); // "scirc"
+		CHARS.put("cS", "Ş"); // "Scedil"
+		CHARS.put("cs", "ş"); // "scedil"
+		CHARS.put("vS", "Š"); // "Scaron"
+		CHARS.put("vs", "š"); // "scaron"
+		CHARS.put("cT", "Ţ"); // "Tcedil"
+		CHARS.put("ct", "ţ"); // "tcedil"
+		CHARS.put("vT", "Ť"); // "Tcaron"
+		// Symbol #357 (t�) has no special Latex command
+		CHARS.put("Tstrok", "Ŧ"); // "Tstrok"
+		CHARS.put("tstrok", "ŧ"); // "tstrok"
+		CHARS.put("~U", "Ũ"); // "Utilde"
+		CHARS.put("~u", "ũ"); // "utilde"
+		CHARS.put("=U", "Ū"); // "Umacr"
+		CHARS.put("=u", "ū"); // "umacr"
+		CHARS.put("uU", "Ŭ"); // "Ubreve"
+		CHARS.put("uu", "ŭ"); // "ubreve"
+		CHARS.put("rU", "Ů"); // "Uring"
+		CHARS.put("ru", "ů"); // "uring"
+		CHARS.put("HU", "ů"); // "Odblac"
+		CHARS.put("Hu", "ű"); // "odblac"
+		CHARS.put("kU", "Ų"); // "Uogon"
+		CHARS.put("ku", "ų"); // "uogon"
+		CHARS.put("^W", "Ŵ"); // "Wcirc"
+		CHARS.put("^w", "ŵ"); // "wcirc"
+		CHARS.put("^Y", "Ŷ"); // "Ycirc"
+		CHARS.put("^y", "ŷ"); // "ycirc"
+		CHARS.put("\"Y", "Ÿ"); // "Yuml"
+		CHARS.put("'Z", "Ź"); // "Zacute"
+		CHARS.put("'z", "ź"); // "zacute"
+		CHARS.put(".Z", "Ż"); // "Zdot"
+		CHARS.put(".z", "ż"); // "zdot"
+		CHARS.put("vZ", "Ž"); // "Zcaron"
+		CHARS.put("vz", "ž"); // "zcaron"
+		// Symbol #383 (f) has no special Latex command
+        CHARS.put("%", "%"); // percent sign
+    }
+
+	public String format(String field) {
+		int i;
+		field = field.replaceAll("&|\\\\&", "&");
+
+		StringBuffer sb = new StringBuffer();
+		StringBuffer currentCommand = null;
+
+		char c;
+		boolean escaped = false, incommand = false;
+
+		for (i = 0; i < field.length(); i++) {
+			c = field.charAt(i);
+			if (escaped && (c == '\\')) {
+				sb.append('\\');
+				escaped = false;
+			} else if (c == '\\') {
+				if (incommand){
+					/* Close Command */
+					String command = currentCommand.toString();
+					Object result = CHARS.get(command);
+					if (result != null) {
+						sb.append((String) result);
+					} else {
+						sb.append(command);
+					}
+				}
+				escaped = true;
+				incommand = true;
+				currentCommand = new StringBuffer();
+			} else if (!incommand && (c == '{' || c == '}')) {
+				// Swallow the brace.
+			} else if (Character.isLetter(c) || (c == '%')
+				|| (Globals.SPECIAL_COMMAND_CHARS.indexOf(String.valueOf(c)) >= 0)) {
+				escaped = false;
+
+                if (!incommand)
+					sb.append(c);
+					// Else we are in a command, and should not keep the letter.
+				else {
+					currentCommand.append(c);
+                    testCharCom: if ((currentCommand.length() == 1)
+						&& (Globals.SPECIAL_COMMAND_CHARS.indexOf(currentCommand.toString()) >= 0)) {
+						// This indicates that we are in a command of the type
+						// \^o or \~{n}
+						if (i >= field.length() - 1)
+							break testCharCom;
+
+						String command = currentCommand.toString();
+						i++;
+						c = field.charAt(i);
+						// System.out.println("next: "+(char)c);
+						String combody;
+						if (c == '{') {
+							IntAndString part = getPart(field, i, false);
+							i += part.i;
+							combody = part.s;
+						} else {
+							combody = field.substring(i, i + 1);
+							// System.out.println("... "+combody);
+						}
+						Object result = CHARS.get(command + combody);
+
+						if (result != null)
+							sb.append((String) result);
+
+						incommand = false;
+						escaped = false;
+					} else {
+						//	Are we already at the end of the string?
+						if (i + 1 == field.length()){
+							String command = currentCommand.toString();
+                            Object result = CHARS.get(command);
+							/* If found, then use translated version. If not,
+							 * then keep
+							 * the text of the parameter intact.
+							 */
+							if (result != null) {
+								sb.append((String) result);
+							} else {
+								sb.append(command);
+							}
+
+						}
+					}
+				}
+			} else {
+				String argument = null;
+
+				if (!incommand) {
+					sb.append(c);
+				} else if (Character.isWhitespace(c) || (c == '{') || (c == '}')) {
+					// First test if we are already at the end of the string.
+					// if (i >= field.length()-1)
+					// break testContent;
+
+					String command = currentCommand.toString();
+
+                    // Then test if we are dealing with a italics or bold
+					// command.
+					// If so, handle.
+					if (command.equals("em") || command.equals("emph") || command.equals("textit")) {
+						IntAndString part = getPart(field, i, true);
+
+						i += part.i;
+						sb.append("<em>").append(part.s).append("</em>");
+					} else if (command.equals("textbf")) {
+						IntAndString part = getPart(field, i, true);
+						i += part.i;
+						sb.append("<b>").append(part.s).append("</b>");
+					} else if (c == '{') {
+						IntAndString part = getPart(field, i, true);
+						i += part.i;
+						argument = part.s;
+						if (argument != null) {
+							// handle common case of general latex command
+							Object result = CHARS.get(command + argument);
+                            // System.out.print("command: "+command+", arg: "+argument);
+							// System.out.print(", result: ");
+							// If found, then use translated version. If not, then keep
+							// the
+							// text of the parameter intact.
+							if (result != null) {
+								sb.append((String) result);
+							} else {
+								sb.append(argument);
+							}
+						}
+                    } else if (c == '}') {
+                        // This end brace terminates a command. This can be the case in
+                        // constructs like {\aa}. The correct behaviour should be to
+                        // substitute the evaluated command and swallow the brace:
+                        Object result = CHARS.get(command);
+                        if (result != null) {
+                            sb.append((String) result);
+                        } else {
+                            // If the command is unknown, just print it:
+                            sb.append(command);
+                        }
+                    } else {
+						Object result = CHARS.get(command);
+						if (result != null) {
+							sb.append((String) result);
+						} else {
+							sb.append(command);
+						}
+						sb.append(' ');
+					}
+				}/* else if (c == '}') {
+                    System.out.printf("com term by }: '%s'\n", currentCommand.toString());
+
+                    argument = "";
+				}*/ else {
+					/*
+					 * TODO: this point is reached, apparently, if a command is
+					 * terminated in a strange way, such as with "$\omega$".
+					 * Also, the command "\&" causes us to get here. The former
+					 * issue is maybe a little difficult to address, since it
+					 * involves the LaTeX math mode. We don't have a complete
+					 * LaTeX parser, so maybe it's better to ignore these
+					 * commands?
+					 */
+				}
+
+				incommand = false;
+				escaped = false;
+			}
+		}
+
+		return sb.toString();
+	}
+
+	private IntAndString getPart(String text, int i, boolean terminateOnEndBraceOnly) {
+		char c;
+		int count = 0;
+
+		StringBuffer part = new StringBuffer();
+
+		// advance to first char and skip wihitespace
+		i++;
+		while (i < text.length() && Character.isWhitespace(text.charAt(i))){
+			i++;
+		}
+
+		// then grab whathever is the first token (counting braces)
+		while (i < text.length()){
+			c = text.charAt(i);
+			if (!terminateOnEndBraceOnly && count == 0 && Character.isWhitespace(c)) {
+				i--; // end argument and leave whitespace for further
+					 // processing
+				break;
+			}
+			if (c == '}' && --count < 0)
+				break;
+			else if (c == '{')
+				count++;
+			part.append(c);
+			i++;
+		}
+		return new IntAndString(part.length(), format(part.toString()));
+	}
+
+	private class IntAndString {
+		public int i;
+
+		String s;
+
+		public IntAndString(int i, String s) {
+			this.i = i;
+			this.s = s;
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/oo/OOUtil.java b/src/java/net/sf/jabref/oo/OOUtil.java
old mode 100755
new mode 100644
index 07d7f95..79dc18e
--- a/src/java/net/sf/jabref/oo/OOUtil.java
+++ b/src/java/net/sf/jabref/oo/OOUtil.java
@@ -1,300 +1,300 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import com.sun.star.beans.XPropertySet;
-import com.sun.star.beans.Property;
-import com.sun.star.text.*;
-import com.sun.star.uno.UnoRuntime;
-import com.sun.star.frame.XDesktop;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.export.layout.Layout;
-
-import javax.swing.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.List;
-import java.util.Iterator;
-
-/**
- * Utility methods for processing OO Writer documents.
- */
-public class OOUtil {
-
-    
-    static Pattern htmlTag = Pattern.compile("</?[a-z]+>");
-
-    static OOPreFormatter postformatter = new OOPreFormatter();
-
-    /**
-     * Insert a reference, formatted using a Layout, at the position of a given cursor.
-     * @param text The text to insert in.
-     * @param cursor The cursor giving the insert location.
-     * @param layout The Layout to format the reference with.
-     * @param parStyle The name of the paragraph style to use.
-     * @param entry The entry to insert.
-     * @param database The database the entry belongs to.
-     * @param uniquefier Uniqiefier letter, if any, to append to the entry's year.
-     * @throws Exception
-     */
-    public static void insertFullReferenceAtCurrentLocation(XText text, XTextCursor cursor,
-            Layout layout, String parStyle, BibtexEntry entry, BibtexDatabase database, String uniquefier)
-            throws UndefinedParagraphFormatException, Exception {
-
-        final String UNIQUEFIER_FIELD = "uniq";
-
-        // Backup the value of the uniq field, just in case the entry already has it:
-        String oldUniqVal = (String)entry.getField(UNIQUEFIER_FIELD);
-
-        // Set the uniq field with the supplied uniquefier:
-        entry.setField(UNIQUEFIER_FIELD, uniquefier);
-
-        // Do the layout for this entry:
-        String lText = layout.doLayout(entry, database);
-
-        // Afterwards, reset the old value:
-        entry.setField(UNIQUEFIER_FIELD, oldUniqVal);
-
-        // Insert the formatted text:
-        insertOOFormattedTextAtCurrentLocation(text, cursor, lText, parStyle);
-    }
-
-    /**
-     * Insert a text with formatting indicated by HTML-like tags, into a text at
-         * the position given by a cursor.
-     * @param text The text to insert in.
-     * @param cursor The cursor giving the insert location.
-     * @param lText The marked-up text to insert.
-     * @param parStyle The name of the paragraph style to use.
-     * @throws Exception
-     */
-    public static void insertOOFormattedTextAtCurrentLocation(XText text, XTextCursor cursor,
-              String lText, String parStyle) throws UndefinedParagraphFormatException, Exception {
-
-        XParagraphCursor parCursor = (XParagraphCursor)UnoRuntime.queryInterface(
-            XParagraphCursor.class, cursor);
-        XPropertySet props = (XPropertySet) UnoRuntime.queryInterface(
-            XPropertySet.class, parCursor);
-
-        try {
-            props.setPropertyValue("ParaStyleName", parStyle);
-        } catch (com.sun.star.lang.IllegalArgumentException ex) {
-            throw new UndefinedParagraphFormatException(parStyle);
-        }
-        
-        // We need to extract formatting. Use a simple regexp search iteration:
-        int piv = 0;
-        int italic = 0, bold = 0, sup = 0, sub = 0, mono = 0, smallCaps = 0;
-        //insertTextAtCurrentLocation(text, cursor, "_",
-        //    false, false, false, false, false, false);
-        //cursor.goLeft((short)1, true);
-        Matcher m = htmlTag.matcher(lText);
-        while (m.find()) {
-            String ss = lText.substring(piv, m.start());
-            if (ss.length() > 0) {
-                insertTextAtCurrentLocation(text, cursor, ss, (bold % 2) > 0, (italic % 2) > 0,
-                        mono > 0, smallCaps > 0, sup > 0, sub > 0);
-            }
-            String tag = m.group();
-            // Handle tags:
-            if (tag.equals("<b>"))
-                bold++;
-            else if (tag.equals("</b>"))
-                bold--;
-            else if (tag.equals("<i>") || tag.equals("<em>"))
-                italic++;
-            else if (tag.equals("</i>") || tag.equals("</em>"))
-                italic--;
-            else if (tag.equals("</monospace>"))
-                mono = 0;
-            else if (tag.equals("<monospace>"))
-                mono = 1;
-            else if (tag.equals("</smallcaps>"))
-                smallCaps = 0;
-            else if (tag.equals("<smallcaps>"))
-                smallCaps = 1;
-            else if (tag.equals("</sup>"))
-                sup = 0;
-            else if (tag.equals("<sup>"))
-                sup = 1;
-            else if (tag.equals("</sub>"))
-                sub = 0;
-            else if (tag.equals("<sub>"))
-                sub = 1;
-
-            piv = m.end();
-            
-        }
-
-        if (piv < lText.length())
-            insertTextAtCurrentLocation(text, cursor,lText.substring(piv),
-                    (bold % 2) > 0, (italic % 2) > 0, mono > 0, smallCaps > 0, sup > 0, sub > 0);
-
-
-
-        cursor.collapseToEnd();
-    }
-
-    public static void insertParagraphBreak(XText text, XTextCursor cursor) throws Exception {
-        text.insertControlCharacter(cursor, ControlCharacter.PARAGRAPH_BREAK, true);
-        cursor.collapseToEnd();
-    }
-
-    public static void insertTextAtCurrentLocation(XText text, XTextCursor cursor, String string,
-                   boolean bold, boolean italic, boolean monospace, boolean smallCaps, boolean superscript,
-                   boolean subscript) throws Exception {
-        text.insertString(cursor, string, true);
-        // Access the property set of the cursor, and set the currently selected text
-        // (which is the string we just inserted) to be bold
-        XPropertySet xCursorProps = (XPropertySet) UnoRuntime.queryInterface(
-            XPropertySet.class, cursor);
-        if (bold)
-            xCursorProps.setPropertyValue("CharWeight",
-                    new Float(com.sun.star.awt.FontWeight.BOLD));
-        else
-            xCursorProps.setPropertyValue("CharWeight",
-                    new Float(com.sun.star.awt.FontWeight.NORMAL));
-
-        if (italic)
-            xCursorProps.setPropertyValue("CharPosture",
-                            com.sun.star.awt.FontSlant.ITALIC);
-        else
-            xCursorProps.setPropertyValue("CharPosture",
-                            com.sun.star.awt.FontSlant.NONE);
-
-        if (smallCaps) {
-            xCursorProps.setPropertyValue("CharCaseMap",
-                            com.sun.star.style.CaseMap.SMALLCAPS);
-        }
-        else {
-            xCursorProps.setPropertyValue("CharCaseMap",
-                            com.sun.star.style.CaseMap.NONE);
-        }
-
-        // TODO: the <monospace> tag doesn't work
-        /*
-        if (monospace) {
-            xCursorProps.setPropertyValue("CharFontPitch",
-                            com.sun.star.awt.FontPitch.FIXED);
-        }
-        else {
-            xCursorProps.setPropertyValue("CharFontPitch",
-                            com.sun.star.awt.FontPitch.VARIABLE);
-        } */
-        if (subscript) {
-            xCursorProps.setPropertyValue("CharEscapement",
-                    (byte)-101);
-            xCursorProps.setPropertyValue("CharEscapementHeight",
-                    (byte)58);
-        }
-        else if (superscript) {
-            xCursorProps.setPropertyValue("CharEscapement",
-                    (byte)101);
-            xCursorProps.setPropertyValue("CharEscapementHeight",
-                    (byte)58);
-        }
-        else {
-            xCursorProps.setPropertyValue("CharEscapement",
-                    (byte)0);
-            xCursorProps.setPropertyValue("CharEscapementHeight",
-                    (byte)100);
-        }
-
-        cursor.collapseToEnd();
-
-    }
-
-    public static void insertTextAtCurrentLocation(XText text, XTextCursor cursor, String string,
-                                                   String parStyle) throws Exception {
-        text.insertString(cursor, string, true);
-        XParagraphCursor parCursor = (XParagraphCursor)UnoRuntime.queryInterface(
-            XParagraphCursor.class, cursor);
-        // Access the property set of the cursor, and set the currently selected text
-        // (which is the string we just inserted) to be bold
-        XPropertySet props = (XPropertySet) UnoRuntime.queryInterface(
-            XPropertySet.class, parCursor);
-        try {
-            props.setPropertyValue("ParaStyleName", parStyle);
-        } catch (com.sun.star.lang.IllegalArgumentException ex) {
-            throw new UndefinedParagraphFormatException(parStyle);
-        }
-        cursor.collapseToEnd();
-
-    }
-
-
-
-    public static Object getProperty(Object o, String property) throws Exception {
-        XPropertySet props = (XPropertySet) UnoRuntime.queryInterface(
-                XPropertySet.class, o);
-        return props.getPropertyValue(property);
-    }
-
-    public static void listProperties(Object o) throws Exception {
-        XPropertySet props = (XPropertySet) UnoRuntime.queryInterface(
-                XPropertySet.class, o);
-        Property[] pr = props.getPropertySetInfo().getProperties();
-        for (int i = 0; i < pr.length; i++) {
-            Property property1 = pr[i];
-            System.out.println(property1.Name+" : "+props.getPropertyValue(property1.Name));
-        }
-    }
-
-    public static XTextDocument selectComponent(JFrame parent, XDesktop xDesktop, List<XTextDocument> list) throws Exception {
-        String[] values = new String[list.size()];
-        int ii=0;
-        for (Iterator<XTextDocument> iterator = list.iterator(); iterator.hasNext();) {
-            XTextDocument doc = iterator.next();
-            values[ii++] = String.valueOf(getProperty(doc.getCurrentController().getFrame(), "Title"));
-        }
-        JList sel = new JList(values);
-        sel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-        sel.setSelectedIndex(0);
-        int ans = JOptionPane.showConfirmDialog(parent, new JScrollPane(sel), Globals.lang("Select document"),
-                JOptionPane.OK_CANCEL_OPTION);
-        if (ans == JOptionPane.OK_OPTION) {
-            return list.get(sel.getSelectedIndex());
-        }
-        else return null;
-    }
-
-    /**
-     * Make a cloned BibtexEntry and do the necessary preprocessing for use by the plugin.
-     * If the running JabRef version doesn't support post-processing in Layout, this
-     * preprocessing includes running the OOPreFormatter formatter for all fields except the
-     * BibTeX key.
-     * @param entry the original entry
-     * @return the cloned and processed entry
-     */
-    public static BibtexEntry createAdaptedEntry(BibtexEntry entry) {
-        if (entry == null)
-            return null;
-        BibtexEntry e = (BibtexEntry)entry.clone();
-        for (String field : e.getAllFields()) {
-            if (field.equals(BibtexFields.KEY_FIELD))
-                continue;
-            String value = e.getField(field);
-            // If the running JabRef version doesn't support post-processing in Layout,
-            // preprocess fields instead:
-            if (!OpenOfficePanel.postLayoutSupported && (value != null))
-                e.setField(field, postformatter.format(value));
-        }
-        return e;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.beans.Property;
+import com.sun.star.text.*;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.frame.XDesktop;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.export.layout.Layout;
+
+import javax.swing.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.List;
+import java.util.Iterator;
+
+/**
+ * Utility methods for processing OO Writer documents.
+ */
+public class OOUtil {
+
+    
+    static Pattern htmlTag = Pattern.compile("</?[a-z]+>");
+
+    static OOPreFormatter postformatter = new OOPreFormatter();
+
+    /**
+     * Insert a reference, formatted using a Layout, at the position of a given cursor.
+     * @param text The text to insert in.
+     * @param cursor The cursor giving the insert location.
+     * @param layout The Layout to format the reference with.
+     * @param parStyle The name of the paragraph style to use.
+     * @param entry The entry to insert.
+     * @param database The database the entry belongs to.
+     * @param uniquefier Uniqiefier letter, if any, to append to the entry's year.
+     * @throws Exception
+     */
+    public static void insertFullReferenceAtCurrentLocation(XText text, XTextCursor cursor,
+            Layout layout, String parStyle, BibtexEntry entry, BibtexDatabase database, String uniquefier)
+            throws UndefinedParagraphFormatException, Exception {
+
+        final String UNIQUEFIER_FIELD = "uniq";
+
+        // Backup the value of the uniq field, just in case the entry already has it:
+        String oldUniqVal = (String)entry.getField(UNIQUEFIER_FIELD);
+
+        // Set the uniq field with the supplied uniquefier:
+        entry.setField(UNIQUEFIER_FIELD, uniquefier);
+
+        // Do the layout for this entry:
+        String lText = layout.doLayout(entry, database);
+
+        // Afterwards, reset the old value:
+        entry.setField(UNIQUEFIER_FIELD, oldUniqVal);
+
+        // Insert the formatted text:
+        insertOOFormattedTextAtCurrentLocation(text, cursor, lText, parStyle);
+    }
+
+    /**
+     * Insert a text with formatting indicated by HTML-like tags, into a text at
+         * the position given by a cursor.
+     * @param text The text to insert in.
+     * @param cursor The cursor giving the insert location.
+     * @param lText The marked-up text to insert.
+     * @param parStyle The name of the paragraph style to use.
+     * @throws Exception
+     */
+    public static void insertOOFormattedTextAtCurrentLocation(XText text, XTextCursor cursor,
+              String lText, String parStyle) throws UndefinedParagraphFormatException, Exception {
+
+        XParagraphCursor parCursor = (XParagraphCursor)UnoRuntime.queryInterface(
+            XParagraphCursor.class, cursor);
+        XPropertySet props = (XPropertySet) UnoRuntime.queryInterface(
+            XPropertySet.class, parCursor);
+
+        try {
+            props.setPropertyValue("ParaStyleName", parStyle);
+        } catch (com.sun.star.lang.IllegalArgumentException ex) {
+            throw new UndefinedParagraphFormatException(parStyle);
+        }
+        
+        // We need to extract formatting. Use a simple regexp search iteration:
+        int piv = 0;
+        int italic = 0, bold = 0, sup = 0, sub = 0, mono = 0, smallCaps = 0;
+        //insertTextAtCurrentLocation(text, cursor, "_",
+        //    false, false, false, false, false, false);
+        //cursor.goLeft((short)1, true);
+        Matcher m = htmlTag.matcher(lText);
+        while (m.find()) {
+            String ss = lText.substring(piv, m.start());
+            if (ss.length() > 0) {
+                insertTextAtCurrentLocation(text, cursor, ss, (bold % 2) > 0, (italic % 2) > 0,
+                        mono > 0, smallCaps > 0, sup > 0, sub > 0);
+            }
+            String tag = m.group();
+            // Handle tags:
+            if (tag.equals("<b>"))
+                bold++;
+            else if (tag.equals("</b>"))
+                bold--;
+            else if (tag.equals("<i>") || tag.equals("<em>"))
+                italic++;
+            else if (tag.equals("</i>") || tag.equals("</em>"))
+                italic--;
+            else if (tag.equals("</monospace>"))
+                mono = 0;
+            else if (tag.equals("<monospace>"))
+                mono = 1;
+            else if (tag.equals("</smallcaps>"))
+                smallCaps = 0;
+            else if (tag.equals("<smallcaps>"))
+                smallCaps = 1;
+            else if (tag.equals("</sup>"))
+                sup = 0;
+            else if (tag.equals("<sup>"))
+                sup = 1;
+            else if (tag.equals("</sub>"))
+                sub = 0;
+            else if (tag.equals("<sub>"))
+                sub = 1;
+
+            piv = m.end();
+            
+        }
+
+        if (piv < lText.length())
+            insertTextAtCurrentLocation(text, cursor,lText.substring(piv),
+                    (bold % 2) > 0, (italic % 2) > 0, mono > 0, smallCaps > 0, sup > 0, sub > 0);
+
+
+
+        cursor.collapseToEnd();
+    }
+
+    public static void insertParagraphBreak(XText text, XTextCursor cursor) throws Exception {
+        text.insertControlCharacter(cursor, ControlCharacter.PARAGRAPH_BREAK, true);
+        cursor.collapseToEnd();
+    }
+
+    public static void insertTextAtCurrentLocation(XText text, XTextCursor cursor, String string,
+                   boolean bold, boolean italic, boolean monospace, boolean smallCaps, boolean superscript,
+                   boolean subscript) throws Exception {
+        text.insertString(cursor, string, true);
+        // Access the property set of the cursor, and set the currently selected text
+        // (which is the string we just inserted) to be bold
+        XPropertySet xCursorProps = (XPropertySet) UnoRuntime.queryInterface(
+            XPropertySet.class, cursor);
+        if (bold)
+            xCursorProps.setPropertyValue("CharWeight",
+                    new Float(com.sun.star.awt.FontWeight.BOLD));
+        else
+            xCursorProps.setPropertyValue("CharWeight",
+                    new Float(com.sun.star.awt.FontWeight.NORMAL));
+
+        if (italic)
+            xCursorProps.setPropertyValue("CharPosture",
+                            com.sun.star.awt.FontSlant.ITALIC);
+        else
+            xCursorProps.setPropertyValue("CharPosture",
+                            com.sun.star.awt.FontSlant.NONE);
+
+        if (smallCaps) {
+            xCursorProps.setPropertyValue("CharCaseMap",
+                            com.sun.star.style.CaseMap.SMALLCAPS);
+        }
+        else {
+            xCursorProps.setPropertyValue("CharCaseMap",
+                            com.sun.star.style.CaseMap.NONE);
+        }
+
+        // TODO: the <monospace> tag doesn't work
+        /*
+        if (monospace) {
+            xCursorProps.setPropertyValue("CharFontPitch",
+                            com.sun.star.awt.FontPitch.FIXED);
+        }
+        else {
+            xCursorProps.setPropertyValue("CharFontPitch",
+                            com.sun.star.awt.FontPitch.VARIABLE);
+        } */
+        if (subscript) {
+            xCursorProps.setPropertyValue("CharEscapement",
+                    (byte)-101);
+            xCursorProps.setPropertyValue("CharEscapementHeight",
+                    (byte)58);
+        }
+        else if (superscript) {
+            xCursorProps.setPropertyValue("CharEscapement",
+                    (byte)101);
+            xCursorProps.setPropertyValue("CharEscapementHeight",
+                    (byte)58);
+        }
+        else {
+            xCursorProps.setPropertyValue("CharEscapement",
+                    (byte)0);
+            xCursorProps.setPropertyValue("CharEscapementHeight",
+                    (byte)100);
+        }
+
+        cursor.collapseToEnd();
+
+    }
+
+    public static void insertTextAtCurrentLocation(XText text, XTextCursor cursor, String string,
+                                                   String parStyle) throws Exception {
+        text.insertString(cursor, string, true);
+        XParagraphCursor parCursor = (XParagraphCursor)UnoRuntime.queryInterface(
+            XParagraphCursor.class, cursor);
+        // Access the property set of the cursor, and set the currently selected text
+        // (which is the string we just inserted) to be bold
+        XPropertySet props = (XPropertySet) UnoRuntime.queryInterface(
+            XPropertySet.class, parCursor);
+        try {
+            props.setPropertyValue("ParaStyleName", parStyle);
+        } catch (com.sun.star.lang.IllegalArgumentException ex) {
+            throw new UndefinedParagraphFormatException(parStyle);
+        }
+        cursor.collapseToEnd();
+
+    }
+
+
+
+    public static Object getProperty(Object o, String property) throws Exception {
+        XPropertySet props = (XPropertySet) UnoRuntime.queryInterface(
+                XPropertySet.class, o);
+        return props.getPropertyValue(property);
+    }
+
+    public static void listProperties(Object o) throws Exception {
+        XPropertySet props = (XPropertySet) UnoRuntime.queryInterface(
+                XPropertySet.class, o);
+        Property[] pr = props.getPropertySetInfo().getProperties();
+        for (int i = 0; i < pr.length; i++) {
+            Property property1 = pr[i];
+            System.out.println(property1.Name+" : "+props.getPropertyValue(property1.Name));
+        }
+    }
+
+    public static XTextDocument selectComponent(JFrame parent, XDesktop xDesktop, List<XTextDocument> list) throws Exception {
+        String[] values = new String[list.size()];
+        int ii=0;
+        for (Iterator<XTextDocument> iterator = list.iterator(); iterator.hasNext();) {
+            XTextDocument doc = iterator.next();
+            values[ii++] = String.valueOf(getProperty(doc.getCurrentController().getFrame(), "Title"));
+        }
+        JList sel = new JList(values);
+        sel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        sel.setSelectedIndex(0);
+        int ans = JOptionPane.showConfirmDialog(parent, new JScrollPane(sel), Globals.lang("Select document"),
+                JOptionPane.OK_CANCEL_OPTION);
+        if (ans == JOptionPane.OK_OPTION) {
+            return list.get(sel.getSelectedIndex());
+        }
+        else return null;
+    }
+
+    /**
+     * Make a cloned BibtexEntry and do the necessary preprocessing for use by the plugin.
+     * If the running JabRef version doesn't support post-processing in Layout, this
+     * preprocessing includes running the OOPreFormatter formatter for all fields except the
+     * BibTeX key.
+     * @param entry the original entry
+     * @return the cloned and processed entry
+     */
+    public static BibtexEntry createAdaptedEntry(BibtexEntry entry) {
+        if (entry == null)
+            return null;
+        BibtexEntry e = (BibtexEntry)entry.clone();
+        for (String field : e.getAllFields()) {
+            if (field.equals(BibtexFields.KEY_FIELD))
+                continue;
+            String value = e.getField(field);
+            // If the running JabRef version doesn't support post-processing in Layout,
+            // preprocess fields instead:
+            if (!OpenOfficePanel.postLayoutSupported && (value != null))
+                e.setField(field, postformatter.format(value));
+        }
+        return e;
+    }
+}
diff --git a/src/java/net/sf/jabref/oo/OpenOfficePanel.java b/src/java/net/sf/jabref/oo/OpenOfficePanel.java
old mode 100755
new mode 100644
index 0c69969..dd16b97
--- a/src/java/net/sf/jabref/oo/OpenOfficePanel.java
+++ b/src/java/net/sf/jabref/oo/OpenOfficePanel.java
@@ -1,1005 +1,1006 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import net.sf.jabref.*;
-import net.sf.jabref.export.layout.Layout;
-import net.sf.jabref.export.layout.LayoutHelper;
-import net.sf.jabref.external.PushToApplication;
-import net.sf.jabref.plugin.SidePanePlugin;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.*;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * This test panel can be opened by reflection from JabRef, passing the JabRefFrame as an
- * argument to the start() method. It displays buttons for testing interaction functions
- * between JabRef and OpenOffice.
- */
-public class OpenOfficePanel extends AbstractWorker implements SidePanePlugin, PushToApplication {
-
-    public static final String defaultAuthorYearStylePath = "/resource/openoffice/default_authoryear.jstyle";
-    public static final String defaultNumericalStylePath = "/resource/openoffice/default_numerical.jstyle";
-
-    // This field indicates whether the running JabRef supports post formatters in Layout:
-    public static boolean postLayoutSupported;
-
-    static {
-        postLayoutSupported = true;
-        try {
-            Layout l = new LayoutHelper(new StringReader("")).
-                        getLayoutFromText(Globals.FORMATTER_PACKAGE);
-            l.setPostFormatter(null);
-        } catch (NoSuchMethodError ex) {
-            postLayoutSupported = false;
-        } catch (Exception ex) {
-
-        }
-
-    }
-
-    OOPanel comp;
-    JDialog diag;
-    static JButton
-        connect,
-        manualConnect,
-        selectDocument,
-        setStyleFile = new JButton(Globals.lang("Select style")),
-        pushEntries = new JButton(Globals.lang("Cite")),
-        pushEntriesInt = new JButton(Globals.lang("Cite in-text")),
-        pushEntriesEmpty = new JButton(Globals.lang("Insert empty citation")),
-        pushEntriesAdvanced = new JButton(Globals.lang("Cite special")),
-        focus = new JButton("Focus OO document"),
-        update,
-        insertFullRef = new JButton("Insert reference text"),
-        merge = new JButton(Globals.lang("Merge citations")),
-        manageCitations = new JButton(Globals.lang("Manage citations")),
-        settingsB = new JButton(Globals.lang("Settings")),
-        help = new JButton(GUIGlobals.getImage("help")),
-        test = new JButton("Test");
-    JRadioButton inPar, inText;
-    private JPanel settings = null;
-    private static String styleFile = null;
-    private static OOBibBase ooBase;
-    private static JabRefFrame frame;
-    private SidePaneManager manager;
-    private static OOBibStyle style = null;
-    private static boolean useDefaultAuthoryearStyle = false;
-    private static boolean useDefaultNumericalStyle = false;
-    private StyleSelectDialog styleDialog = null;
-    private boolean dialogOkPressed = false, autoDetected = false;
-    private String sOffice = null;
-    private Throwable connectException = null;
-
-    private static OpenOfficePanel instance = null;
-
-    public static OpenOfficePanel getInstance() {
-        if (instance == null)
-            instance = new OpenOfficePanel();
-        return instance;
-    }
-
-    private OpenOfficePanel() {
-        ImageIcon connectImage = new ImageIcon(OpenOfficePanel.class.getResource("/images/connect_no.png"));
-
-        connect = new JButton(connectImage);
-        manualConnect = new JButton(connectImage);
-        connect.setToolTipText(Globals.lang("Connect"));
-        manualConnect.setToolTipText(Globals.lang("Manual connect"));
-        selectDocument = new JButton(GUIGlobals.getImage("open"));
-        selectDocument.setToolTipText(Globals.lang("Select Writer document"));
-        update = new JButton(GUIGlobals.getImage("refresh"));
-        update.setToolTipText(Globals.lang("Sync OO bibliography"));
-        String defExecutable, defJarsDir;
-        if (Globals.ON_WIN) {
-            Globals.prefs.putDefaultValue("ooPath", "C:\\Program Files\\OpenOffice.org 3");
-            Globals.prefs.putDefaultValue("ooExecutablePath", "C:\\Program Files\\OpenOffice.org 2.3\\program\\soffice.exe");
-            Globals.prefs.putDefaultValue("ooJarsPath", "C:\\Program Files\\OpenOffice.org 2.3\\program\\classes");
-        } else if (Globals.ON_MAC) {
-            Globals.prefs.putDefaultValue("ooExecutablePath", "/Applications/OpenOffice.org.app/Contents/MacOS/soffice.bin");
-            Globals.prefs.putDefaultValue("ooPath", "/Applications/OpenOffice.org.app");
-            Globals.prefs.putDefaultValue("ooJarsPath", "/Applications/OpenOffice.org.app/Contents/basis-link");
-        } else { // Linux
-            //Globals.prefs.putDefaultValue("ooPath", "/usr/lib/openoffice");
-            Globals.prefs.putDefaultValue("ooPath", "/opt/openoffice.org3");
-            Globals.prefs.putDefaultValue("ooExecutablePath", "/usr/lib/openoffice/program/soffice");
-            //Globals.prefs.putDefaultValue("ooJarsPath", "/usr/share/java/openoffice");
-            Globals.prefs.putDefaultValue("ooJarsPath", "/opt/openoffice.org/basis3.0");
-        }
-        Globals.prefs.putDefaultValue("connectToOO3", Boolean.TRUE);
-        
-        //Globals.prefs.putDefaultValue("ooStyleFileDirectories", System.getProperty("user.home")+";false");
-        Globals.prefs.putDefaultValue("ooStyleFileLastDir", System.getProperty("user.home"));
-        Globals.prefs.putDefaultValue("ooInParCitation", true);
-        Globals.prefs.putDefaultValue("syncOOWhenCiting", false);
-        Globals.prefs.putDefaultValue("showOOPanel", false);
-        Globals.prefs.putDefaultValue("useAllOpenBases", true);
-        Globals.prefs.putDefaultValue("ooUseDefaultAuthoryearStyle", true);
-        Globals.prefs.putDefaultValue("ooUseDefaultNumericalStyle", false);
-        Globals.prefs.putDefaultValue("ooChooseStyleDirectly", false);
-        Globals.prefs.putDefaultValue("ooDirectFile", "");
-        Globals.prefs.putDefaultValue("ooStyleDirectory", "");
-        styleFile = Globals.prefs.get("ooBibliographyStyleFile");
-
-
-    }
-
-    public SidePaneComponent getSidePaneComponent() {
-        return comp;
-    }
-
-
-    public void init(JabRefFrame frame, SidePaneManager manager) {
-        this.frame = frame;
-        this.manager = manager;
-        comp = new OOPanel(manager, GUIGlobals.getIconUrl("openoffice"), Globals.lang("OpenOffice"));
-        try {
-            initPanel();
-            manager.register(getName(), comp);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    public JMenuItem getMenuItem() {
-        if (Globals.prefs.getBoolean("showOOPanel"))
-            manager.show(getName());
-        JMenuItem item = new JMenuItem(Globals.lang("OpenOffice/LibreOffice connection"), GUIGlobals.getImage("openoffice"));
-        item.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                manager.show(getName());
-            }
-        });
-        return item;
-    }
-
-    public String getShortcutKey() {
-        return null;
-    }
-
-
-    private void initPanel() throws Exception {
-
-        useDefaultAuthoryearStyle = Globals.prefs.getBoolean("ooUseDefaultAuthoryearStyle");
-        useDefaultNumericalStyle = Globals.prefs.getBoolean("ooUseDefaultNumericalStyle");
-        Action al = new AbstractAction() {
-            public void actionPerformed(ActionEvent e) {
-                connect(true);
-            }
-        };
-        connect.addActionListener(al);
-
-        manualConnect.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                connect(false);
-            }
-        });
-        selectDocument.setToolTipText(Globals.lang("Select which open Writer document to work on"));
-        selectDocument.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                try {
-                    ooBase.selectDocument();
-                    frame.output(Globals.lang("Connected to document")+": "+ooBase.getCurrentDocumentTitle());
-                } catch (Exception ex) {
-                    JOptionPane.showMessageDialog(frame, ex.getMessage(), Globals.lang("Error"),
-                            JOptionPane.ERROR_MESSAGE);
-                }
-            }
-        });
-
-        setStyleFile.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                if (styleDialog == null) {
-                    styleDialog = new StyleSelectDialog(frame, styleFile);
-                }
-                styleDialog.setVisible(true);
-                if (styleDialog.isOkPressed()) {
-                    useDefaultAuthoryearStyle = Globals.prefs.getBoolean("ooUseDefaultAuthoryearStyle");
-                    useDefaultNumericalStyle = Globals.prefs.getBoolean("ooUseDefaultNumericalStyle");
-                    styleFile = Globals.prefs.get("ooBibliographyStyleFile");
-                    try {
-                        readStyleFile();
-                    } catch (Exception ex) {
-                        ex.printStackTrace();
-                    }
-                }
-            }
-        });
-
-        pushEntries.setToolTipText(Globals.lang("Cite selected entries"));
-        pushEntries.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                pushEntries(true, true, false);
-            }
-        });
-        pushEntriesInt.setToolTipText(Globals.lang("Cite selected entries with in-text citation"));
-        pushEntriesInt.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                pushEntries(false, true, false);
-            }
-        });
-        pushEntriesEmpty.setToolTipText(Globals.lang("Insert a citation without text (the entry will appear in the reference list)"));
-        pushEntriesEmpty.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                pushEntries(false, false, false);
-            }
-        });
-        pushEntriesAdvanced.setToolTipText(Globals.lang("Cite selected entries with extra information"));
-        pushEntriesAdvanced.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                pushEntries(false, true, true);
-            }
-        });
-
-        focus.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                ooBase.setFocus();
-            }
-        });
-        update.setToolTipText(Globals.lang("Ensure that the bibliography is up-to-date"));
-        Action updateAction = new AbstractAction() {
-            public void actionPerformed(ActionEvent e) {
-                try {
-                    try {
-                        if (style == null)
-                            readStyleFile();
-                        else
-                            style.ensureUpToDate();
-                    } catch (Throwable ex) {
-                        JOptionPane.showMessageDialog(frame, Globals.lang("You must select either a valid style file, or use one of the default styles."),
-                                Globals.lang("No valid style file defined"), JOptionPane.ERROR_MESSAGE);
-                        return;
-                    }
-
-                    ooBase.updateSortedReferenceMarks();
-
-                    java.util.List<BibtexDatabase> databases = getBaseList();
-                    java.util.List<String> unresolvedKeys = ooBase.refreshCiteMarkers
-                            (databases, style);
-                    ooBase.rebuildBibTextSection(databases, style);
-                    //ooBase.sync(frame.basePanel().database(), style);
-                    if (unresolvedKeys.size() > 0) {
-                        JOptionPane.showMessageDialog(frame, Globals.lang("Your OpenOffice document references the BibTeX key '%0', which could not be found in your current database.",
-                            unresolvedKeys.get(0)), Globals.lang("Unable to synchronize bibliography"), JOptionPane.ERROR_MESSAGE);
-                    }
-                } catch (UndefinedCharacterFormatException ex) {
-                    reportUndefinedCharacterFormat(ex);
-                } catch (UndefinedParagraphFormatException ex) {
-                    reportUndefinedParagraphFormat(ex);
-                } catch (ConnectionLostException ex) {
-                    showConnectionLostErrorMessage();
-                } catch (BibtexEntryNotFoundException ex) {
-                    JOptionPane.showMessageDialog(frame, Globals.lang("Your OpenOffice document references the BibTeX key '%0', which could not be found in your current database.",
-                            ex.getBibtexKey()), Globals.lang("Unable to synchronize bibliography"), JOptionPane.ERROR_MESSAGE);
-                }
-                catch (Exception e1) {
-                    e1.printStackTrace();
-                }
-            }
-        };
-        update.addActionListener(updateAction);
-
-        insertFullRef.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                try {
-                    insertFullRefs();
-                } catch (Exception e1) {
-                    e1.printStackTrace();
-                }
-            }
-        });
-
-        merge.setToolTipText(Globals.lang("Combine pairs of citations that are separated by spaces only"));
-        merge.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                try {
-                    ooBase.combineCiteMarkers(getBaseList(), style);
-                } catch (UndefinedCharacterFormatException e) {
-                    reportUndefinedCharacterFormat(e);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-
-            }
-        });
-
-        settingsB.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                showSettingsPopup();
-            }
-        });
-
-        help.addActionListener(new HelpAction(Globals.helpDiag, "OpenOfficeIntegration.html"));
-
-        manageCitations.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                try {
-                    CitationManager cm = new CitationManager(frame, ooBase);
-                    cm.showDialog();
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-            }
-        });
-
-        test.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                try {
-                            //pushEntries(false, true, true);
-
-                    //ooBase.testFrameHandling();
-
-                    //ooBase.combineCiteMarkers(frame.basePanel().database(), style);
-                    //insertUsingBST();
-                    //ooBase.testFootnote();
-                    //ooBase.refreshCiteMarkers(frame.basePanel().database(), style);
-                    //ooBase.createBibTextSection(true);
-                    //ooBase.clearBibTextSectionContent();
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-
-            }
-        });
-
-        selectDocument.setEnabled(false);
-        pushEntries.setEnabled(false);
-        pushEntriesInt.setEnabled(false);
-        pushEntriesEmpty.setEnabled(false);
-        pushEntriesAdvanced.setEnabled(false);
-        focus.setEnabled(false);
-        update.setEnabled(false);
-        insertFullRef.setEnabled(false);
-        merge.setEnabled(false);
-        manageCitations.setEnabled(false);
-        test.setEnabled(false);
-        diag = new JDialog((JFrame)null, "OpenOffice panel", false);
-
-        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout("fill:pref:grow",
-                //"p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu"));
-                "p,p,p,p,p,p,p,p,p,p"));
-
-        //ButtonBarBuilder bb = new ButtonBarBuilder();
-        DefaultFormBuilder bb = new DefaultFormBuilder(new FormLayout
-                ("fill:pref:grow, 1dlu, fill:pref:grow, 1dlu, fill:pref:grow, "
-                        +"1dlu, fill:pref:grow, 1dlu, fill:pref:grow", ""));
-        bb.append(connect);
-        bb.append(manualConnect);
-        bb.append(selectDocument);
-        bb.append(update);
-        bb.append(help);
-
-        //b.append(connect);
-        //b.append(manualConnect);
-        //b.append(selectDocument);
-        b.append(bb.getPanel());
-        b.append(setStyleFile);
-        b.append(pushEntries);
-        b.append(pushEntriesInt);
-        b.append(pushEntriesAdvanced);
-        b.append(pushEntriesEmpty);
-        b.append(merge);
-        b.append(manageCitations);
-        b.append(settingsB);
-        //b.append(focus);
-        //b.append(update);
-
-        //b.append(insertFullRef);
-        //b.append(test);
-        //diag.getContentPane().add(b.getPanel(), BorderLayout.CENTER);
-
-        JPanel content = new JPanel();
-        comp.setContent(content);
-        content.setLayout(new BorderLayout());
-        content.add(b.getPanel(), BorderLayout.CENTER);
-
-        frame.getTabbedPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
-                .put(Globals.prefs.getKey("Refresh OO"), "Refresh OO");
-        frame.getTabbedPane().getActionMap().put("Refresh OO", updateAction);
-
-        //diag.pack();
-        //diag.setVisible(true);
-    }
-
-    public java.util.List<BibtexDatabase> getBaseList() {
-        java.util.List<BibtexDatabase> databases = new ArrayList<BibtexDatabase>();
-        if (Globals.prefs.getBoolean("useAllOpenBases")) {
-            for (int i=0; i<frame.baseCount(); i++)
-                databases.add(frame.baseAt(i).database());
-        }
-        else
-            databases.add(frame.basePanel().database());
-
-        return databases;
-    }
-
-    public void connect(boolean auto) {
-        /*if (ooBase != null) {
-            try {
-                java.util.List<XTextDocument> list = ooBase.getTextDocuments();
-                // TODO: how to find the title of the documents?
-            } catch (Exception ex) {
-                ex.printStackTrace();
-            }
-            return;
-        }*/
-
-        String unoilDir, ooBaseDirectory;
-        if (auto) {
-            AutoDetectPaths adp = new AutoDetectPaths(diag);
-
-            if (adp.runAutodetection()) {
-                autoDetected = true;
-                dialogOkPressed = true;
-                diag.dispose();
-            } else if (!adp.cancelled()) {
-                JOptionPane.showMessageDialog(diag,
-                        Globals.lang("Autodetection failed"),
-                        Globals.lang("Autodetection failed"),
-                        JOptionPane.ERROR_MESSAGE);
-            }
-            if (!autoDetected)
-                return;
-
-            // User clicked Auto, and the system successfully detected paths:
-            unoilDir = Globals.prefs.get("ooUnoilPath");
-            ooBaseDirectory = Globals.prefs.get("ooJurtPath");
-            sOffice = Globals.prefs.get("ooExecutablePath");
-
-            //System.out.println("unoilDir: "+unoilDir);
-            //System.out.println("ooBaseDir: "+ooBaseDirectory);
-            //System.out.println("soffice: "+sOffice);
-
-        }
-        else { // Manual connect
-
-            showConnectDialog();
-            if (!dialogOkPressed)
-                return;
-
-            String ooPath = Globals.prefs.get("ooPath");
-            String ooJars = Globals.prefs.get("ooJarsPath");
-            sOffice = Globals.prefs.get("ooExecutablePath");
-
-            boolean openOffice3 = true;//Globals.prefs.getBoolean("connectToOO3");
-            if (Globals.ON_WIN) {
-                //if (openOffice3) {
-                    unoilDir = ooPath+"\\Basis\\program\\classes";
-                    ooBaseDirectory = ooPath+"\\URE\\java";
-                    sOffice = ooPath+"\\program\\soffice.exe";
-                //}
-                
-            }
-            else if (Globals.ON_MAC) {
-                //if (openOffice3) {
-                    sOffice = ooPath+"/Contents/MacOS/soffice.bin";
-                    ooBaseDirectory = ooPath+"/Contents/basis-link/ure-link/share/java";
-                    unoilDir = ooPath+"/Contents/basis-link/program/classes"; 
-                //}
-
-            }
-            else {
-                // Linux:
-                //if (openOffice3) {
-                    unoilDir = ooJars+"/program/classes";
-                    ooBaseDirectory = ooJars+"/ure-link/share/java";
-                    //sOffice = ooPath+"/program/soffice";
-                //}
-
-            }
-        }
-
-        //String unoilDir = "/opt/openoffice.org/basis3.0/program/classes";
-        //String ooBaseDirectory = Globals.prefs.get("ooJarsPath");//"/usr/share/java/openoffice";
-        //String sOffice = Globals.prefs.get("ooExecutablePath");
-        //System.getProperty( "os.name" ).startsWith( "Windows" ) ? "soffice.exe" : "soffice";
-
-        // Add OO jars to the classpath:
-        try {
-            File[] jarFiles = new File[] {
-                    new File(unoilDir, "unoil.jar"),
-                    new File(ooBaseDirectory, "jurt.jar"),
-                    new File(ooBaseDirectory, "juh.jar"),
-                    new File(ooBaseDirectory, "ridl.jar")};
-            URL[] jarList = new URL[jarFiles.length];
-            for (int i = 0; i < jarList.length; i++) {
-                if (!jarFiles[i].exists())
-                    throw new Exception(Globals.lang("File not found")+": "+jarFiles[i].getPath());
-                jarList[i] = jarFiles[i].toURI().toURL();
-            }
-            addURL(jarList);
-
-            // Show progress dialog:
-            final JDialog progDiag = (new AutoDetectPaths(diag)).showProgressDialog(diag, Globals.lang("Connecting"),
-                    Globals.lang("Please wait..."), false);
-            getWorker().run(); // Do the actual connection, using Spin to get off the EDT.
-            progDiag.dispose();
-            diag.dispose();
-            if (ooBase == null) {
-                throw connectException;
-            }
-
-            if (ooBase.isConnectedToDocument())
-                frame.output(Globals.lang("Connected to document")+": "+ooBase.getCurrentDocumentTitle());
-
-            // Enable actions that depend on Connect:
-            selectDocument.setEnabled(true);
-            pushEntries.setEnabled(true);
-            pushEntriesInt.setEnabled(true);
-            pushEntriesEmpty.setEnabled(true);
-            pushEntriesAdvanced.setEnabled(true);
-            focus.setEnabled(true);
-            update.setEnabled(true);
-            insertFullRef.setEnabled(true);
-            merge.setEnabled(true);
-            manageCitations.setEnabled(true);
-            test.setEnabled(true);
-
-        } catch (Throwable e) {
-            e.printStackTrace();
-            if (e instanceof UnsatisfiedLinkError) {
-                JOptionPane.showMessageDialog(frame, Globals.lang("Unable to connect. One possible reason is that JabRef "
-                    +"and OpenOffice/LibreOffice are not both running in either 32 bit mode or 64 bit mode."));
-
-            }
-            else {
-                JOptionPane.showMessageDialog(frame, Globals.lang("Could not connect to running OpenOffice.\n"
-                    +"Make sure you have installed OpenOffice with Java support.\nIf connecting manually, please verify program and library paths.\n"
-                    +"\nError message: "+e.getMessage()));
-            }
-        }
-    }
-
-    public void run() {
-        try {
-            // Connect:
-            ooBase = new OOBibBase(sOffice, true);
-        } catch (Throwable e) {
-            ooBase = null;
-            connectException = e;
-            //JOptionPane.showMessageDialog(frame, Globals.lang("Unable to connect"));
-        }
-    }
-
-    /**
-     * Read the style file. Record the last modified time of the file.
-     * @throws Exception
-     */
-    public void readStyleFile() throws Exception {
-        if (useDefaultAuthoryearStyle) {
-            URL defPath = JabRef.class.getResource(defaultAuthorYearStylePath);
-            Reader r = new InputStreamReader(defPath.openStream());
-            style = new OOBibStyle(r);
-        }
-        else if (useDefaultNumericalStyle) {
-            URL defPath = JabRef.class.getResource(defaultNumericalStylePath);
-            Reader r = new InputStreamReader(defPath.openStream());
-            style = new OOBibStyle(r);
-        }
-        else {
-            style = new OOBibStyle(new File(styleFile));
-        }
-    }
-
-
-
-
-    // The methods addFile and associated final Class[] parameters were gratefully copied from
-	// anthony_miguel @ http://forum.java.sun.com/thread.jsp?forum=32&thread=300557&tstart=0&trange=15
-	private static final Class[] parameters = new Class[]{URL.class};
-
-    public static void addURL(URL[] u) throws IOException {
-		URLClassLoader sysloader = (URLClassLoader)ClassLoader.getSystemClassLoader();
-		Class sysclass = URLClassLoader.class;
-
-        try {
-			Method method = sysclass.getDeclaredMethod("addURL",parameters);
-			method.setAccessible(true);
-            for (int i=0; i<u.length; i++)
-                method.invoke(sysloader, u[i]);
-		} catch (Throwable t) {
-			t.printStackTrace();
-			throw new IOException("Error, could not add URL to system classloader");
-		}//end try catch
-	}//end method
-
-    public void updateConnectionParams(String ooPath, String ooExec, String ooJars, boolean oo3) {
-        Globals.prefs.put("ooPath", ooPath);
-        Globals.prefs.put("ooExecutablePath", ooExec);
-        Globals.prefs.put("ooJarsPath", ooJars);
-        Globals.prefs.putBoolean("connectToOO3", oo3);
-    }
-
-    public void showConnectDialog() {
-        dialogOkPressed = false;
-        final JDialog diag = new JDialog(frame, Globals.lang("Set connection parameters"), true);
-        final JTextField ooPath = new JTextField(30);
-        JButton browseOOPath = new JButton(Globals.lang("Browse"));
-        ooPath.setText(Globals.prefs.get("ooPath"));
-        final JTextField ooExec = new JTextField(30);
-        JButton browseOOExec = new JButton(Globals.lang("Browse"));
-        browseOOExec.addActionListener(new BrowseAction(null, ooExec, false));
-        final JTextField ooJars = new JTextField(30);
-        JButton browseOOJars = new JButton(Globals.lang("Browse"));
-        browseOOJars.addActionListener(new BrowseAction(null, ooJars, true));
-        ooExec.setText(Globals.prefs.get("ooExecutablePath"));
-        ooJars.setText(Globals.prefs.get("ooJarsPath"));
-        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("left:pref, 4dlu, fill:pref:grow, 4dlu, fill:pref", ""));
-        if (Globals.ON_WIN || Globals.ON_MAC) {
-            builder.append(Globals.lang("Path to OpenOffice directory"));
-            builder.append(ooPath);
-            builder.append(browseOOPath);
-            builder.nextLine();
-        }
-        else {
-            builder.append(Globals.lang("Path to OpenOffice executable"));
-            builder.append(ooExec);
-            builder.append(browseOOExec);
-            builder.nextLine();
-
-            builder.append(Globals.lang("Path to OpenOffice library dir"));
-            builder.append(ooJars);
-            builder.append(browseOOJars);
-            builder.nextLine();
-        }
-
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        JButton ok = new JButton(Globals.lang("Ok"));
-        JButton cancel = new JButton(Globals.lang("Cancel"));
-        //JButton auto = new JButton(Globals.lang("Autodetect"));
-        ActionListener tfListener = new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                updateConnectionParams(ooPath.getText(), ooExec.getText(), ooJars.getText(),
-                        true);
-                diag.dispose();
-            }
-        };
-
-        ooPath.addActionListener(tfListener);
-        ooExec.addActionListener(tfListener);
-        ooJars.addActionListener(tfListener);
-        ok.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                updateConnectionParams(ooPath.getText(), ooExec.getText(), ooJars.getText(),
-                        true);
-                dialogOkPressed = true;
-                diag.dispose();
-            }
-        });
-        cancel.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent event) {
-                diag.dispose();
-            }
-        });
-        bb.addGlue();
-        bb.addRelatedGap();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        diag.getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
-        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-        diag.pack();
-        diag.setLocationRelativeTo(frame);
-        diag.setVisible(true);
-        
-    }
-
-
-
-    public void pushEntries(boolean inParenthesis, boolean withText, boolean addPageInfo) {
-        if (!ooBase.isConnectedToDocument()) {
-            JOptionPane.showMessageDialog(frame, Globals.lang("Not connected to any Writer document. Please"
-                +" make sure a document is open, and use the 'Select Writer document' button to connect to it."),
-                    Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
-            return;
-        }
-
-        String pageInfo = null;
-        if (addPageInfo) {
-            AdvancedCiteDialog acd = new AdvancedCiteDialog(frame);
-            acd.showDialog();
-            if (acd.cancelled())
-                return;
-            if (acd.getPageInfo().length() > 0)
-                pageInfo = acd.getPageInfo();
-            inParenthesis = acd.isInParenthesisCite();
-
-        }
-
-
-        BasePanel panel =frame.basePanel();
-        final BibtexDatabase database = panel.database();
-        if (panel != null) {
-            BibtexEntry[] entries = panel.getSelectedEntries();
-            if (entries.length > 0) {
-                try {
-                    if (style == null)
-                        readStyleFile();
-                    ooBase.insertEntry(entries, database, getBaseList(), style, inParenthesis, withText,
-                            pageInfo, Globals.prefs.getBoolean("syncOOWhenCiting"));
-                } catch (FileNotFoundException ex) {
-                    JOptionPane.showMessageDialog(frame, Globals.lang("You must select either a valid style file, or use one of the default styles."),
-                            Globals.lang("No valid style file defined"), JOptionPane.ERROR_MESSAGE);
-                    return;
-                }
-                catch (ConnectionLostException ex) {
-                    showConnectionLostErrorMessage();
-                } catch (UndefinedCharacterFormatException ex) {
-                    reportUndefinedCharacterFormat(ex);
-                } catch (UndefinedParagraphFormatException ex) {
-                   reportUndefinedParagraphFormat(ex);
-                } catch (Exception ex) {
-                    ex.printStackTrace();
-                }
-            }
-
-        }
-
-    }
-
-    public void showConnectionLostErrorMessage() {
-        JOptionPane.showMessageDialog(frame, Globals.lang("Connection to OpenOffice has been lost. "
-            +"Please make sure OpenOffice is running, and try to reconnect."),
-            Globals.lang("Connection lost"), JOptionPane.ERROR_MESSAGE);
-    }
-
-    public void insertFullRefs() {
-        try {
-            // Create or clear bibliography:
-            /*boolean hadBib = ooBase.createBibTextSection(true);
-            if (hadBib)
-                ooBase.clearBibTextSectionContent();
-              */
-            BasePanel panel =frame.basePanel();
-            final BibtexDatabase database = panel.database();
-            Map<BibtexEntry,BibtexDatabase> entries = new LinkedHashMap<BibtexEntry,BibtexDatabase>();
-            if (panel != null) {
-                BibtexEntry[] e = panel.getSelectedEntries();
-                ArrayList<BibtexEntry> el = new ArrayList<BibtexEntry>();
-                for (int i = 0; i < e.length; i++) {
-                    entries.put(e[i], database);
-                }
-
-                ooBase.insertFullReferenceAtViewCursor(entries, style, "Default");
-            }
-        } catch (UndefinedParagraphFormatException ex) {
-            reportUndefinedParagraphFormat(ex);
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-
-    }
-
-    private void reportUndefinedParagraphFormat(UndefinedParagraphFormatException ex) {
-        JOptionPane.showMessageDialog(frame, "<html>"+Globals.lang("Your style file specifies the paragraph format '%0', "
-            +"which is undefined in your current OpenOffice document.", ex.getFormatName())+"<br>"
-            +Globals.lang("The paragraph format is controlled by the property 'ReferenceParagraphFormat' or 'ReferenceHeaderParagraphFormat' in the style file.")
-            +"</html>",
-            Globals.lang(""), JOptionPane.ERROR_MESSAGE);
-    }
-
-    private void reportUndefinedCharacterFormat(UndefinedCharacterFormatException ex) {
-        JOptionPane.showMessageDialog(frame, "<html>"+Globals.lang("Your style file specifies the character format '%0', "
-            +"which is undefined in your current OpenOffice document.", ex.getFormatName())+"<br>"
-            +Globals.lang("The character format is controlled by the citation property 'CitationCharacterFormat' in the style file.")
-            +"</html>",
-            Globals.lang(""), JOptionPane.ERROR_MESSAGE);
-    }
-
-    public void insertUsingBST() {
-        try {
-            BasePanel panel =frame.basePanel();
-            final BibtexDatabase database = panel.database();
-            if (panel != null) {
-                BibtexEntry[] entries = panel.getSelectedEntries();
-                ArrayList<BibtexEntry> el = new ArrayList<BibtexEntry>();
-                for (int i = 0; i < entries.length; i++) {
-                    el.add(entries[i]);
-                }
-
-                BstWrapper wrapper = new BstWrapper();
-                //wrapper.loadBstFile(new File("/home/usr/share/texmf-tetex/bibtex/bst/base/plain.bst"));
-                wrapper.loadBstFile(new File("/home/usr/share/texmf-tetex/bibtex/bst/ams/amsalpha.bst"));
-                Map<String,String> result = wrapper.processEntries(el, database);
-                for (String key : result.keySet()) {
-                    System.out.println("Key: "+key);
-                    System.out.println("Entry: "+result.get(key));
-                    ooBase.insertMarkedUpTextAtViewCursor(result.get(key), "Default");
-                }
-                //System.out.println(result);
-            }
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-    }
-
-    public void showSettingsPopup() {
-        JPopupMenu menu = new JPopupMenu();
-        final JCheckBoxMenuItem autoSync = new JCheckBoxMenuItem(
-                Globals.lang("Automatically sync bibliography when inserting citations"),
-                Globals.prefs.getBoolean("syncOOWhenCiting"));
-        final JRadioButtonMenuItem useActiveBase = new JRadioButtonMenuItem
-                (Globals.lang("Look up BibTeX entries in the active tab only"));
-        final JRadioButtonMenuItem useAllBases = new JRadioButtonMenuItem
-                (Globals.lang("Look up BibTeX entries in all open databases"));
-        ButtonGroup bg = new ButtonGroup();
-        bg.add(useActiveBase);
-        bg.add(useAllBases);
-        if (Globals.prefs.getBoolean("useAllOpenBases"))
-            useAllBases.setSelected(true);
-        else
-            useActiveBase.setSelected(true);
-
-        autoSync.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                Globals.prefs.putBoolean("syncOOWhenCiting", autoSync.isSelected());
-            }
-        });
-        useAllBases.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                Globals.prefs.putBoolean("useAllOpenBases", useAllBases.isSelected());
-            }
-        });
-        useActiveBase.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                Globals.prefs.putBoolean("useAllOpenBases", !useActiveBase.isSelected());
-            }
-        });
-        menu.add(autoSync);
-        menu.addSeparator();
-        menu.add(useActiveBase);
-        menu.add(useAllBases);
-        menu.show(settingsB, 0, settingsB.getHeight());
-    }
-
-    public void pushEntries(boolean inParenthesis, BibtexEntry[] entries) {
-
-        final BibtexDatabase database = frame.basePanel().database();
-        if (entries.length > 0) {
-
-            String pageInfo = null;
-            //if (addPageInfo) {
-                AdvancedCiteDialog acd = new AdvancedCiteDialog(frame);
-                acd.showDialog();
-                if (acd.cancelled())
-                    return;
-                if (acd.getPageInfo().length() > 0)
-                    pageInfo = acd.getPageInfo();
-                inParenthesis = acd.isInParenthesisCite();
-
-            //}
-
-            try {
-                ooBase.insertEntry(entries, database, getBaseList(), style, inParenthesis, true,
-                    pageInfo, Globals.prefs.getBoolean("syncOOWhenCiting"));
-            } catch (ConnectionLostException ex) {
-                showConnectionLostErrorMessage();
-            } catch (UndefinedCharacterFormatException ex) {
-                reportUndefinedCharacterFormat(ex);
-            } catch (UndefinedParagraphFormatException ex) {
-               reportUndefinedParagraphFormat(ex);
-            } catch (Exception ex) {
-                ex.printStackTrace();
-            }
-        }
-    }
-
-    public String getName() {
-        return "Push to OpenOffice";
-    }
-
-    public String getApplicationName() {
-        return "OpenOffice";
-    }
-
-    public String getTooltip() {
-        return "Push selection to OpenOffice";
-    }
-
-    public Icon getIcon() {
-        return GUIGlobals.getImage("openoffice");
-    }
-
-    public String getKeyStrokeName() {
-        return null;
-    }
-
-    public JPanel getSettingsPanel() {
-        return null;
-        /*if (settings == null)
-            initSettingsPanel();
-        return settings;*/
-    }
-
-    private void initSettingsPanel() {
-        boolean inParen = Globals.prefs.getBoolean("ooInParCitation");
-        inPar = new JRadioButton(Globals.lang("Use in-parenthesis citation"), inParen);
-        inText = new JRadioButton(Globals.lang("Use in-text citation"), !inParen);
-        ButtonGroup bg = new ButtonGroup();
-        bg.add(inPar);
-        bg.add(inText);
-        settings = new JPanel();
-        settings.setLayout(new BorderLayout());
-        settings.add(inPar, BorderLayout.NORTH);
-        settings.add(inText, BorderLayout.SOUTH);
-    }
-
-    public void storeSettings() {
-        Globals.prefs.putBoolean("ooInParCitation", inPar.isSelected());
-    }
-
-    public void pushEntries(BibtexDatabase bibtexDatabase, BibtexEntry[] entries, String s, MetaData metaData) {
-        if (ooBase == null) {
-            connect(true);
-        }
-        if (ooBase != null) {
-            try {
-                if (style == null)
-                    readStyleFile();
-            } catch (Exception ex) {
-                JOptionPane.showMessageDialog(frame, Globals.lang("You must select either a valid style file, or use one of the default styles."),
-                        Globals.lang("No valid style file defined"), JOptionPane.ERROR_MESSAGE);
-                return;
-            }
-            pushEntries(Globals.prefs.getBoolean("ooInParCitation"), entries);
-        }
-    }
-
-    public void operationCompleted(BasePanel basePanel) {
-
-    }
-
-    public boolean requiresBibtexKeys() {
-        return true;
-    }
-
-    class OOPanel extends SidePaneComponent {
-
-        public OOPanel(SidePaneManager sidePaneManager, URL url, String s) {
-            super(sidePaneManager, url, s);
-        }
-
-        public String getName() {
-            return OpenOfficePanel.this.getName();
-        }
-
-        @Override
-        public void componentClosing() {
-            Globals.prefs.putBoolean("showOOPanel", false);
-        }
-
-        @Override
-        public void componentOpening() {
-            Globals.prefs.putBoolean("showOOPanel", true);
-        }
-    }
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import net.sf.jabref.*;
+import net.sf.jabref.export.layout.Layout;
+import net.sf.jabref.export.layout.LayoutHelper;
+import net.sf.jabref.external.PushToApplication;
+import net.sf.jabref.help.HelpAction;
+import net.sf.jabref.plugin.SidePanePlugin;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.*;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * This test panel can be opened by reflection from JabRef, passing the JabRefFrame as an
+ * argument to the start() method. It displays buttons for testing interaction functions
+ * between JabRef and OpenOffice.
+ */
+public class OpenOfficePanel extends AbstractWorker implements SidePanePlugin, PushToApplication {
+
+    public static final String defaultAuthorYearStylePath = "/resource/openoffice/default_authoryear.jstyle";
+    public static final String defaultNumericalStylePath = "/resource/openoffice/default_numerical.jstyle";
+
+    // This field indicates whether the running JabRef supports post formatters in Layout:
+    public static boolean postLayoutSupported;
+
+    static {
+        postLayoutSupported = true;
+        try {
+            Layout l = new LayoutHelper(new StringReader("")).
+                        getLayoutFromText(Globals.FORMATTER_PACKAGE);
+            l.setPostFormatter(null);
+        } catch (NoSuchMethodError ex) {
+            postLayoutSupported = false;
+        } catch (Exception ex) {
+
+        }
+
+    }
+
+    OOPanel comp;
+    JDialog diag;
+    static JButton
+        connect,
+        manualConnect,
+        selectDocument,
+        setStyleFile = new JButton(Globals.lang("Select style")),
+        pushEntries = new JButton(Globals.lang("Cite")),
+        pushEntriesInt = new JButton(Globals.lang("Cite in-text")),
+        pushEntriesEmpty = new JButton(Globals.lang("Insert empty citation")),
+        pushEntriesAdvanced = new JButton(Globals.lang("Cite special")),
+        focus = new JButton("Focus OO document"),
+        update,
+        insertFullRef = new JButton("Insert reference text"),
+        merge = new JButton(Globals.lang("Merge citations")),
+        manageCitations = new JButton(Globals.lang("Manage citations")),
+        settingsB = new JButton(Globals.lang("Settings")),
+        help = new JButton(GUIGlobals.getImage("help")),
+        test = new JButton("Test");
+    JRadioButton inPar, inText;
+    private JPanel settings = null;
+    private static String styleFile = null;
+    private static OOBibBase ooBase;
+    private static JabRefFrame frame;
+    private SidePaneManager manager;
+    private static OOBibStyle style = null;
+    private static boolean useDefaultAuthoryearStyle = false;
+    private static boolean useDefaultNumericalStyle = false;
+    private StyleSelectDialog styleDialog = null;
+    private boolean dialogOkPressed = false, autoDetected = false;
+    private String sOffice = null;
+    private Throwable connectException = null;
+
+    private static OpenOfficePanel instance = null;
+
+    public static OpenOfficePanel getInstance() {
+        if (instance == null)
+            instance = new OpenOfficePanel();
+        return instance;
+    }
+
+    private OpenOfficePanel() {
+        ImageIcon connectImage = new ImageIcon(OpenOfficePanel.class.getResource("/images/connect_no.png"));
+
+        connect = new JButton(connectImage);
+        manualConnect = new JButton(connectImage);
+        connect.setToolTipText(Globals.lang("Connect"));
+        manualConnect.setToolTipText(Globals.lang("Manual connect"));
+        selectDocument = new JButton(GUIGlobals.getImage("open"));
+        selectDocument.setToolTipText(Globals.lang("Select Writer document"));
+        update = new JButton(GUIGlobals.getImage("refresh"));
+        update.setToolTipText(Globals.lang("Sync OO bibliography"));
+        String defExecutable, defJarsDir;
+        if (Globals.ON_WIN) {
+            Globals.prefs.putDefaultValue("ooPath", "C:\\Program Files\\OpenOffice.org 3");
+            Globals.prefs.putDefaultValue("ooExecutablePath", "C:\\Program Files\\OpenOffice.org 2.3\\program\\soffice.exe");
+            Globals.prefs.putDefaultValue("ooJarsPath", "C:\\Program Files\\OpenOffice.org 2.3\\program\\classes");
+        } else if (Globals.ON_MAC) {
+            Globals.prefs.putDefaultValue("ooExecutablePath", "/Applications/OpenOffice.org.app/Contents/MacOS/soffice.bin");
+            Globals.prefs.putDefaultValue("ooPath", "/Applications/OpenOffice.org.app");
+            Globals.prefs.putDefaultValue("ooJarsPath", "/Applications/OpenOffice.org.app/Contents/basis-link");
+        } else { // Linux
+            //Globals.prefs.putDefaultValue("ooPath", "/usr/lib/openoffice");
+            Globals.prefs.putDefaultValue("ooPath", "/opt/openoffice.org3");
+            Globals.prefs.putDefaultValue("ooExecutablePath", "/usr/lib/openoffice/program/soffice");
+            //Globals.prefs.putDefaultValue("ooJarsPath", "/usr/share/java/openoffice");
+            Globals.prefs.putDefaultValue("ooJarsPath", "/opt/openoffice.org/basis3.0");
+        }
+        Globals.prefs.putDefaultValue("connectToOO3", Boolean.TRUE);
+        
+        //Globals.prefs.putDefaultValue("ooStyleFileDirectories", System.getProperty("user.home")+";false");
+        Globals.prefs.putDefaultValue("ooStyleFileLastDir", System.getProperty("user.home"));
+        Globals.prefs.putDefaultValue("ooInParCitation", true);
+        Globals.prefs.putDefaultValue("syncOOWhenCiting", false);
+        Globals.prefs.putDefaultValue("showOOPanel", false);
+        Globals.prefs.putDefaultValue("useAllOpenBases", true);
+        Globals.prefs.putDefaultValue("ooUseDefaultAuthoryearStyle", true);
+        Globals.prefs.putDefaultValue("ooUseDefaultNumericalStyle", false);
+        Globals.prefs.putDefaultValue("ooChooseStyleDirectly", false);
+        Globals.prefs.putDefaultValue("ooDirectFile", "");
+        Globals.prefs.putDefaultValue("ooStyleDirectory", "");
+        styleFile = Globals.prefs.get("ooBibliographyStyleFile");
+
+
+    }
+
+    public SidePaneComponent getSidePaneComponent() {
+        return comp;
+    }
+
+
+    public void init(JabRefFrame frame, SidePaneManager manager) {
+        this.frame = frame;
+        this.manager = manager;
+        comp = new OOPanel(manager, GUIGlobals.getIconUrl("openoffice"), Globals.lang("OpenOffice"));
+        try {
+            initPanel();
+            manager.register(getName(), comp);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public JMenuItem getMenuItem() {
+        if (Globals.prefs.getBoolean("showOOPanel"))
+            manager.show(getName());
+        JMenuItem item = new JMenuItem(Globals.lang("OpenOffice/LibreOffice connection"), GUIGlobals.getImage("openoffice"));
+        item.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                manager.show(getName());
+            }
+        });
+        return item;
+    }
+
+    public String getShortcutKey() {
+        return null;
+    }
+
+
+    private void initPanel() throws Exception {
+
+        useDefaultAuthoryearStyle = Globals.prefs.getBoolean("ooUseDefaultAuthoryearStyle");
+        useDefaultNumericalStyle = Globals.prefs.getBoolean("ooUseDefaultNumericalStyle");
+        Action al = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                connect(true);
+            }
+        };
+        connect.addActionListener(al);
+
+        manualConnect.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                connect(false);
+            }
+        });
+        selectDocument.setToolTipText(Globals.lang("Select which open Writer document to work on"));
+        selectDocument.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                try {
+                    ooBase.selectDocument();
+                    frame.output(Globals.lang("Connected to document")+": "+ooBase.getCurrentDocumentTitle());
+                } catch (Exception ex) {
+                    JOptionPane.showMessageDialog(frame, ex.getMessage(), Globals.lang("Error"),
+                            JOptionPane.ERROR_MESSAGE);
+                }
+            }
+        });
+
+        setStyleFile.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                if (styleDialog == null) {
+                    styleDialog = new StyleSelectDialog(frame, styleFile);
+                }
+                styleDialog.setVisible(true);
+                if (styleDialog.isOkPressed()) {
+                    useDefaultAuthoryearStyle = Globals.prefs.getBoolean("ooUseDefaultAuthoryearStyle");
+                    useDefaultNumericalStyle = Globals.prefs.getBoolean("ooUseDefaultNumericalStyle");
+                    styleFile = Globals.prefs.get("ooBibliographyStyleFile");
+                    try {
+                        readStyleFile();
+                    } catch (Exception ex) {
+                        ex.printStackTrace();
+                    }
+                }
+            }
+        });
+
+        pushEntries.setToolTipText(Globals.lang("Cite selected entries"));
+        pushEntries.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                pushEntries(true, true, false);
+            }
+        });
+        pushEntriesInt.setToolTipText(Globals.lang("Cite selected entries with in-text citation"));
+        pushEntriesInt.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                pushEntries(false, true, false);
+            }
+        });
+        pushEntriesEmpty.setToolTipText(Globals.lang("Insert a citation without text (the entry will appear in the reference list)"));
+        pushEntriesEmpty.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                pushEntries(false, false, false);
+            }
+        });
+        pushEntriesAdvanced.setToolTipText(Globals.lang("Cite selected entries with extra information"));
+        pushEntriesAdvanced.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                pushEntries(false, true, true);
+            }
+        });
+
+        focus.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                ooBase.setFocus();
+            }
+        });
+        update.setToolTipText(Globals.lang("Ensure that the bibliography is up-to-date"));
+        Action updateAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    try {
+                        if (style == null)
+                            readStyleFile();
+                        else
+                            style.ensureUpToDate();
+                    } catch (Throwable ex) {
+                        JOptionPane.showMessageDialog(frame, Globals.lang("You must select either a valid style file, or use one of the default styles."),
+                                Globals.lang("No valid style file defined"), JOptionPane.ERROR_MESSAGE);
+                        return;
+                    }
+
+                    ooBase.updateSortedReferenceMarks();
+
+                    java.util.List<BibtexDatabase> databases = getBaseList();
+                    java.util.List<String> unresolvedKeys = ooBase.refreshCiteMarkers
+                            (databases, style);
+                    ooBase.rebuildBibTextSection(databases, style);
+                    //ooBase.sync(frame.basePanel().database(), style);
+                    if (unresolvedKeys.size() > 0) {
+                        JOptionPane.showMessageDialog(frame, Globals.lang("Your OpenOffice document references the BibTeX key '%0', which could not be found in your current database.",
+                            unresolvedKeys.get(0)), Globals.lang("Unable to synchronize bibliography"), JOptionPane.ERROR_MESSAGE);
+                    }
+                } catch (UndefinedCharacterFormatException ex) {
+                    reportUndefinedCharacterFormat(ex);
+                } catch (UndefinedParagraphFormatException ex) {
+                    reportUndefinedParagraphFormat(ex);
+                } catch (ConnectionLostException ex) {
+                    showConnectionLostErrorMessage();
+                } catch (BibtexEntryNotFoundException ex) {
+                    JOptionPane.showMessageDialog(frame, Globals.lang("Your OpenOffice document references the BibTeX key '%0', which could not be found in your current database.",
+                            ex.getBibtexKey()), Globals.lang("Unable to synchronize bibliography"), JOptionPane.ERROR_MESSAGE);
+                }
+                catch (Exception e1) {
+                    e1.printStackTrace();
+                }
+            }
+        };
+        update.addActionListener(updateAction);
+
+        insertFullRef.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                try {
+                    insertFullRefs();
+                } catch (Exception e1) {
+                    e1.printStackTrace();
+                }
+            }
+        });
+
+        merge.setToolTipText(Globals.lang("Combine pairs of citations that are separated by spaces only"));
+        merge.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                try {
+                    ooBase.combineCiteMarkers(getBaseList(), style);
+                } catch (UndefinedCharacterFormatException e) {
+                    reportUndefinedCharacterFormat(e);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+            }
+        });
+
+        settingsB.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                showSettingsPopup();
+            }
+        });
+
+        help.addActionListener(new HelpAction(Globals.helpDiag, "OpenOfficeIntegration.html"));
+
+        manageCitations.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                try {
+                    CitationManager cm = new CitationManager(frame, ooBase);
+                    cm.showDialog();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+
+        test.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                try {
+                            //pushEntries(false, true, true);
+
+                    //ooBase.testFrameHandling();
+
+                    //ooBase.combineCiteMarkers(frame.basePanel().database(), style);
+                    //insertUsingBST();
+                    //ooBase.testFootnote();
+                    //ooBase.refreshCiteMarkers(frame.basePanel().database(), style);
+                    //ooBase.createBibTextSection(true);
+                    //ooBase.clearBibTextSectionContent();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+            }
+        });
+
+        selectDocument.setEnabled(false);
+        pushEntries.setEnabled(false);
+        pushEntriesInt.setEnabled(false);
+        pushEntriesEmpty.setEnabled(false);
+        pushEntriesAdvanced.setEnabled(false);
+        focus.setEnabled(false);
+        update.setEnabled(false);
+        insertFullRef.setEnabled(false);
+        merge.setEnabled(false);
+        manageCitations.setEnabled(false);
+        test.setEnabled(false);
+        diag = new JDialog((JFrame)null, "OpenOffice panel", false);
+
+        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout("fill:pref:grow",
+                //"p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu,p,0dlu"));
+                "p,p,p,p,p,p,p,p,p,p"));
+
+        //ButtonBarBuilder bb = new ButtonBarBuilder();
+        DefaultFormBuilder bb = new DefaultFormBuilder(new FormLayout
+                ("fill:pref:grow, 1dlu, fill:pref:grow, 1dlu, fill:pref:grow, "
+                        +"1dlu, fill:pref:grow, 1dlu, fill:pref:grow", ""));
+        bb.append(connect);
+        bb.append(manualConnect);
+        bb.append(selectDocument);
+        bb.append(update);
+        bb.append(help);
+
+        //b.append(connect);
+        //b.append(manualConnect);
+        //b.append(selectDocument);
+        b.append(bb.getPanel());
+        b.append(setStyleFile);
+        b.append(pushEntries);
+        b.append(pushEntriesInt);
+        b.append(pushEntriesAdvanced);
+        b.append(pushEntriesEmpty);
+        b.append(merge);
+        b.append(manageCitations);
+        b.append(settingsB);
+        //b.append(focus);
+        //b.append(update);
+
+        //b.append(insertFullRef);
+        //b.append(test);
+        //diag.getContentPane().add(b.getPanel(), BorderLayout.CENTER);
+
+        JPanel content = new JPanel();
+        comp.setContent(content);
+        content.setLayout(new BorderLayout());
+        content.add(b.getPanel(), BorderLayout.CENTER);
+
+        frame.getTabbedPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
+                .put(Globals.prefs.getKey("Refresh OO"), "Refresh OO");
+        frame.getTabbedPane().getActionMap().put("Refresh OO", updateAction);
+
+        //diag.pack();
+        //diag.setVisible(true);
+    }
+
+    public java.util.List<BibtexDatabase> getBaseList() {
+        java.util.List<BibtexDatabase> databases = new ArrayList<BibtexDatabase>();
+        if (Globals.prefs.getBoolean("useAllOpenBases")) {
+            for (int i=0; i<frame.baseCount(); i++)
+                databases.add(frame.baseAt(i).database());
+        }
+        else
+            databases.add(frame.basePanel().database());
+
+        return databases;
+    }
+
+    public void connect(boolean auto) {
+        /*if (ooBase != null) {
+            try {
+                java.util.List<XTextDocument> list = ooBase.getTextDocuments();
+                // TODO: how to find the title of the documents?
+            } catch (Exception ex) {
+                ex.printStackTrace();
+            }
+            return;
+        }*/
+
+        String unoilDir, ooBaseDirectory;
+        if (auto) {
+            AutoDetectPaths adp = new AutoDetectPaths(diag);
+
+            if (adp.runAutodetection()) {
+                autoDetected = true;
+                dialogOkPressed = true;
+                diag.dispose();
+            } else if (!adp.cancelled()) {
+                JOptionPane.showMessageDialog(diag,
+                        Globals.lang("Autodetection failed"),
+                        Globals.lang("Autodetection failed"),
+                        JOptionPane.ERROR_MESSAGE);
+            }
+            if (!autoDetected)
+                return;
+
+            // User clicked Auto, and the system successfully detected paths:
+            unoilDir = Globals.prefs.get("ooUnoilPath");
+            ooBaseDirectory = Globals.prefs.get("ooJurtPath");
+            sOffice = Globals.prefs.get("ooExecutablePath");
+
+            //System.out.println("unoilDir: "+unoilDir);
+            //System.out.println("ooBaseDir: "+ooBaseDirectory);
+            //System.out.println("soffice: "+sOffice);
+
+        }
+        else { // Manual connect
+
+            showConnectDialog();
+            if (!dialogOkPressed)
+                return;
+
+            String ooPath = Globals.prefs.get("ooPath");
+            String ooJars = Globals.prefs.get("ooJarsPath");
+            sOffice = Globals.prefs.get("ooExecutablePath");
+
+            boolean openOffice3 = true;//Globals.prefs.getBoolean("connectToOO3");
+            if (Globals.ON_WIN) {
+                //if (openOffice3) {
+                    unoilDir = ooPath+"\\Basis\\program\\classes";
+                    ooBaseDirectory = ooPath+"\\URE\\java";
+                    sOffice = ooPath+"\\program\\soffice.exe";
+                //}
+                
+            }
+            else if (Globals.ON_MAC) {
+                //if (openOffice3) {
+                    sOffice = ooPath+"/Contents/MacOS/soffice.bin";
+                    ooBaseDirectory = ooPath+"/Contents/basis-link/ure-link/share/java";
+                    unoilDir = ooPath+"/Contents/basis-link/program/classes"; 
+                //}
+
+            }
+            else {
+                // Linux:
+                //if (openOffice3) {
+                    unoilDir = ooJars+"/program/classes";
+                    ooBaseDirectory = ooJars+"/ure-link/share/java";
+                    //sOffice = ooPath+"/program/soffice";
+                //}
+
+            }
+        }
+
+        //String unoilDir = "/opt/openoffice.org/basis3.0/program/classes";
+        //String ooBaseDirectory = Globals.prefs.get("ooJarsPath");//"/usr/share/java/openoffice";
+        //String sOffice = Globals.prefs.get("ooExecutablePath");
+        //System.getProperty( "os.name" ).startsWith( "Windows" ) ? "soffice.exe" : "soffice";
+
+        // Add OO jars to the classpath:
+        try {
+            File[] jarFiles = new File[] {
+                    new File(unoilDir, "unoil.jar"),
+                    new File(ooBaseDirectory, "jurt.jar"),
+                    new File(ooBaseDirectory, "juh.jar"),
+                    new File(ooBaseDirectory, "ridl.jar")};
+            URL[] jarList = new URL[jarFiles.length];
+            for (int i = 0; i < jarList.length; i++) {
+                if (!jarFiles[i].exists())
+                    throw new Exception(Globals.lang("File not found")+": "+jarFiles[i].getPath());
+                jarList[i] = jarFiles[i].toURI().toURL();
+            }
+            addURL(jarList);
+
+            // Show progress dialog:
+            final JDialog progDiag = (new AutoDetectPaths(diag)).showProgressDialog(diag, Globals.lang("Connecting"),
+                    Globals.lang("Please wait..."), false);
+            getWorker().run(); // Do the actual connection, using Spin to get off the EDT.
+            progDiag.dispose();
+            diag.dispose();
+            if (ooBase == null) {
+                throw connectException;
+            }
+
+            if (ooBase.isConnectedToDocument())
+                frame.output(Globals.lang("Connected to document")+": "+ooBase.getCurrentDocumentTitle());
+
+            // Enable actions that depend on Connect:
+            selectDocument.setEnabled(true);
+            pushEntries.setEnabled(true);
+            pushEntriesInt.setEnabled(true);
+            pushEntriesEmpty.setEnabled(true);
+            pushEntriesAdvanced.setEnabled(true);
+            focus.setEnabled(true);
+            update.setEnabled(true);
+            insertFullRef.setEnabled(true);
+            merge.setEnabled(true);
+            manageCitations.setEnabled(true);
+            test.setEnabled(true);
+
+        } catch (Throwable e) {
+            e.printStackTrace();
+            if (e instanceof UnsatisfiedLinkError) {
+                JOptionPane.showMessageDialog(frame, Globals.lang("Unable to connect. One possible reason is that JabRef "
+                    +"and OpenOffice/LibreOffice are not both running in either 32 bit mode or 64 bit mode."));
+
+            }
+            else {
+                JOptionPane.showMessageDialog(frame, Globals.lang("Could not connect to running OpenOffice.\n"
+                    +"Make sure you have installed OpenOffice with Java support.\nIf connecting manually, please verify program and library paths.\n"
+                    +"\nError message: "+e.getMessage()));
+            }
+        }
+    }
+
+    public void run() {
+        try {
+            // Connect:
+            ooBase = new OOBibBase(sOffice, true);
+        } catch (Throwable e) {
+            ooBase = null;
+            connectException = e;
+            //JOptionPane.showMessageDialog(frame, Globals.lang("Unable to connect"));
+        }
+    }
+
+    /**
+     * Read the style file. Record the last modified time of the file.
+     * @throws Exception
+     */
+    public void readStyleFile() throws Exception {
+        if (useDefaultAuthoryearStyle) {
+            URL defPath = JabRef.class.getResource(defaultAuthorYearStylePath);
+            Reader r = new InputStreamReader(defPath.openStream());
+            style = new OOBibStyle(r);
+        }
+        else if (useDefaultNumericalStyle) {
+            URL defPath = JabRef.class.getResource(defaultNumericalStylePath);
+            Reader r = new InputStreamReader(defPath.openStream());
+            style = new OOBibStyle(r);
+        }
+        else {
+            style = new OOBibStyle(new File(styleFile));
+        }
+    }
+
+
+
+
+    // The methods addFile and associated final Class[] parameters were gratefully copied from
+	// anthony_miguel @ http://forum.java.sun.com/thread.jsp?forum=32&thread=300557&tstart=0&trange=15
+	private static final Class[] parameters = new Class[]{URL.class};
+
+    public static void addURL(URL[] u) throws IOException {
+		URLClassLoader sysloader = (URLClassLoader)ClassLoader.getSystemClassLoader();
+		Class sysclass = URLClassLoader.class;
+
+        try {
+			Method method = sysclass.getDeclaredMethod("addURL",parameters);
+			method.setAccessible(true);
+            for (int i=0; i<u.length; i++)
+                method.invoke(sysloader, u[i]);
+		} catch (Throwable t) {
+			t.printStackTrace();
+			throw new IOException("Error, could not add URL to system classloader");
+		}//end try catch
+	}//end method
+
+    public void updateConnectionParams(String ooPath, String ooExec, String ooJars, boolean oo3) {
+        Globals.prefs.put("ooPath", ooPath);
+        Globals.prefs.put("ooExecutablePath", ooExec);
+        Globals.prefs.put("ooJarsPath", ooJars);
+        Globals.prefs.putBoolean("connectToOO3", oo3);
+    }
+
+    public void showConnectDialog() {
+        dialogOkPressed = false;
+        final JDialog diag = new JDialog(frame, Globals.lang("Set connection parameters"), true);
+        final JTextField ooPath = new JTextField(30);
+        JButton browseOOPath = new JButton(Globals.lang("Browse"));
+        ooPath.setText(Globals.prefs.get("ooPath"));
+        final JTextField ooExec = new JTextField(30);
+        JButton browseOOExec = new JButton(Globals.lang("Browse"));
+        browseOOExec.addActionListener(new BrowseAction(null, ooExec, false));
+        final JTextField ooJars = new JTextField(30);
+        JButton browseOOJars = new JButton(Globals.lang("Browse"));
+        browseOOJars.addActionListener(new BrowseAction(null, ooJars, true));
+        ooExec.setText(Globals.prefs.get("ooExecutablePath"));
+        ooJars.setText(Globals.prefs.get("ooJarsPath"));
+        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("left:pref, 4dlu, fill:pref:grow, 4dlu, fill:pref", ""));
+        if (Globals.ON_WIN || Globals.ON_MAC) {
+            builder.append(Globals.lang("Path to OpenOffice directory"));
+            builder.append(ooPath);
+            builder.append(browseOOPath);
+            builder.nextLine();
+        }
+        else {
+            builder.append(Globals.lang("Path to OpenOffice executable"));
+            builder.append(ooExec);
+            builder.append(browseOOExec);
+            builder.nextLine();
+
+            builder.append(Globals.lang("Path to OpenOffice library dir"));
+            builder.append(ooJars);
+            builder.append(browseOOJars);
+            builder.nextLine();
+        }
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        JButton ok = new JButton(Globals.lang("Ok"));
+        JButton cancel = new JButton(Globals.lang("Cancel"));
+        //JButton auto = new JButton(Globals.lang("Autodetect"));
+        ActionListener tfListener = new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                updateConnectionParams(ooPath.getText(), ooExec.getText(), ooJars.getText(),
+                        true);
+                diag.dispose();
+            }
+        };
+
+        ooPath.addActionListener(tfListener);
+        ooExec.addActionListener(tfListener);
+        ooJars.addActionListener(tfListener);
+        ok.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                updateConnectionParams(ooPath.getText(), ooExec.getText(), ooJars.getText(),
+                        true);
+                dialogOkPressed = true;
+                diag.dispose();
+            }
+        });
+        cancel.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent event) {
+                diag.dispose();
+            }
+        });
+        bb.addGlue();
+        bb.addRelatedGap();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        diag.getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
+        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        diag.pack();
+        diag.setLocationRelativeTo(frame);
+        diag.setVisible(true);
+        
+    }
+
+
+
+    public void pushEntries(boolean inParenthesis, boolean withText, boolean addPageInfo) {
+        if (!ooBase.isConnectedToDocument()) {
+            JOptionPane.showMessageDialog(frame, Globals.lang("Not connected to any Writer document. Please"
+                +" make sure a document is open, and use the 'Select Writer document' button to connect to it."),
+                    Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+            return;
+        }
+
+        String pageInfo = null;
+        if (addPageInfo) {
+            AdvancedCiteDialog acd = new AdvancedCiteDialog(frame);
+            acd.showDialog();
+            if (acd.cancelled())
+                return;
+            if (acd.getPageInfo().length() > 0)
+                pageInfo = acd.getPageInfo();
+            inParenthesis = acd.isInParenthesisCite();
+
+        }
+
+
+        BasePanel panel =frame.basePanel();
+        final BibtexDatabase database = panel.database();
+        if (panel != null) {
+            BibtexEntry[] entries = panel.getSelectedEntries();
+            if (entries.length > 0) {
+                try {
+                    if (style == null)
+                        readStyleFile();
+                    ooBase.insertEntry(entries, database, getBaseList(), style, inParenthesis, withText,
+                            pageInfo, Globals.prefs.getBoolean("syncOOWhenCiting"));
+                } catch (FileNotFoundException ex) {
+                    JOptionPane.showMessageDialog(frame, Globals.lang("You must select either a valid style file, or use one of the default styles."),
+                            Globals.lang("No valid style file defined"), JOptionPane.ERROR_MESSAGE);
+                    return;
+                }
+                catch (ConnectionLostException ex) {
+                    showConnectionLostErrorMessage();
+                } catch (UndefinedCharacterFormatException ex) {
+                    reportUndefinedCharacterFormat(ex);
+                } catch (UndefinedParagraphFormatException ex) {
+                   reportUndefinedParagraphFormat(ex);
+                } catch (Exception ex) {
+                    ex.printStackTrace();
+                }
+            }
+
+        }
+
+    }
+
+    public void showConnectionLostErrorMessage() {
+        JOptionPane.showMessageDialog(frame, Globals.lang("Connection to OpenOffice has been lost. "
+            +"Please make sure OpenOffice is running, and try to reconnect."),
+            Globals.lang("Connection lost"), JOptionPane.ERROR_MESSAGE);
+    }
+
+    public void insertFullRefs() {
+        try {
+            // Create or clear bibliography:
+            /*boolean hadBib = ooBase.createBibTextSection(true);
+            if (hadBib)
+                ooBase.clearBibTextSectionContent();
+              */
+            BasePanel panel =frame.basePanel();
+            final BibtexDatabase database = panel.database();
+            Map<BibtexEntry,BibtexDatabase> entries = new LinkedHashMap<BibtexEntry,BibtexDatabase>();
+            if (panel != null) {
+                BibtexEntry[] e = panel.getSelectedEntries();
+                ArrayList<BibtexEntry> el = new ArrayList<BibtexEntry>();
+                for (int i = 0; i < e.length; i++) {
+                    entries.put(e[i], database);
+                }
+
+                ooBase.insertFullReferenceAtViewCursor(entries, style, "Default");
+            }
+        } catch (UndefinedParagraphFormatException ex) {
+            reportUndefinedParagraphFormat(ex);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+
+    }
+
+    private void reportUndefinedParagraphFormat(UndefinedParagraphFormatException ex) {
+        JOptionPane.showMessageDialog(frame, "<html>"+Globals.lang("Your style file specifies the paragraph format '%0', "
+            +"which is undefined in your current OpenOffice document.", ex.getFormatName())+"<br>"
+            +Globals.lang("The paragraph format is controlled by the property 'ReferenceParagraphFormat' or 'ReferenceHeaderParagraphFormat' in the style file.")
+            +"</html>",
+            Globals.lang(""), JOptionPane.ERROR_MESSAGE);
+    }
+
+    private void reportUndefinedCharacterFormat(UndefinedCharacterFormatException ex) {
+        JOptionPane.showMessageDialog(frame, "<html>"+Globals.lang("Your style file specifies the character format '%0', "
+            +"which is undefined in your current OpenOffice document.", ex.getFormatName())+"<br>"
+            +Globals.lang("The character format is controlled by the citation property 'CitationCharacterFormat' in the style file.")
+            +"</html>",
+            Globals.lang(""), JOptionPane.ERROR_MESSAGE);
+    }
+
+    public void insertUsingBST() {
+        try {
+            BasePanel panel =frame.basePanel();
+            final BibtexDatabase database = panel.database();
+            if (panel != null) {
+                BibtexEntry[] entries = panel.getSelectedEntries();
+                ArrayList<BibtexEntry> el = new ArrayList<BibtexEntry>();
+                for (int i = 0; i < entries.length; i++) {
+                    el.add(entries[i]);
+                }
+
+                BstWrapper wrapper = new BstWrapper();
+                //wrapper.loadBstFile(new File("/home/usr/share/texmf-tetex/bibtex/bst/base/plain.bst"));
+                wrapper.loadBstFile(new File("/home/usr/share/texmf-tetex/bibtex/bst/ams/amsalpha.bst"));
+                Map<String,String> result = wrapper.processEntries(el, database);
+                for (String key : result.keySet()) {
+                    System.out.println("Key: "+key);
+                    System.out.println("Entry: "+result.get(key));
+                    ooBase.insertMarkedUpTextAtViewCursor(result.get(key), "Default");
+                }
+                //System.out.println(result);
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    public void showSettingsPopup() {
+        JPopupMenu menu = new JPopupMenu();
+        final JCheckBoxMenuItem autoSync = new JCheckBoxMenuItem(
+                Globals.lang("Automatically sync bibliography when inserting citations"),
+                Globals.prefs.getBoolean("syncOOWhenCiting"));
+        final JRadioButtonMenuItem useActiveBase = new JRadioButtonMenuItem
+                (Globals.lang("Look up BibTeX entries in the active tab only"));
+        final JRadioButtonMenuItem useAllBases = new JRadioButtonMenuItem
+                (Globals.lang("Look up BibTeX entries in all open databases"));
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(useActiveBase);
+        bg.add(useAllBases);
+        if (Globals.prefs.getBoolean("useAllOpenBases"))
+            useAllBases.setSelected(true);
+        else
+            useActiveBase.setSelected(true);
+
+        autoSync.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                Globals.prefs.putBoolean("syncOOWhenCiting", autoSync.isSelected());
+            }
+        });
+        useAllBases.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                Globals.prefs.putBoolean("useAllOpenBases", useAllBases.isSelected());
+            }
+        });
+        useActiveBase.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                Globals.prefs.putBoolean("useAllOpenBases", !useActiveBase.isSelected());
+            }
+        });
+        menu.add(autoSync);
+        menu.addSeparator();
+        menu.add(useActiveBase);
+        menu.add(useAllBases);
+        menu.show(settingsB, 0, settingsB.getHeight());
+    }
+
+    public void pushEntries(boolean inParenthesis, BibtexEntry[] entries) {
+
+        final BibtexDatabase database = frame.basePanel().database();
+        if (entries.length > 0) {
+
+            String pageInfo = null;
+            //if (addPageInfo) {
+                AdvancedCiteDialog acd = new AdvancedCiteDialog(frame);
+                acd.showDialog();
+                if (acd.cancelled())
+                    return;
+                if (acd.getPageInfo().length() > 0)
+                    pageInfo = acd.getPageInfo();
+                inParenthesis = acd.isInParenthesisCite();
+
+            //}
+
+            try {
+                ooBase.insertEntry(entries, database, getBaseList(), style, inParenthesis, true,
+                    pageInfo, Globals.prefs.getBoolean("syncOOWhenCiting"));
+            } catch (ConnectionLostException ex) {
+                showConnectionLostErrorMessage();
+            } catch (UndefinedCharacterFormatException ex) {
+                reportUndefinedCharacterFormat(ex);
+            } catch (UndefinedParagraphFormatException ex) {
+               reportUndefinedParagraphFormat(ex);
+            } catch (Exception ex) {
+                ex.printStackTrace();
+            }
+        }
+    }
+
+    public String getName() {
+        return "Push to OpenOffice";
+    }
+
+    public String getApplicationName() {
+        return "OpenOffice";
+    }
+
+    public String getTooltip() {
+        return "Push selection to OpenOffice";
+    }
+
+    public Icon getIcon() {
+        return GUIGlobals.getImage("openoffice");
+    }
+
+    public String getKeyStrokeName() {
+        return null;
+    }
+
+    public JPanel getSettingsPanel() {
+        return null;
+        /*if (settings == null)
+            initSettingsPanel();
+        return settings;*/
+    }
+
+    private void initSettingsPanel() {
+        boolean inParen = Globals.prefs.getBoolean("ooInParCitation");
+        inPar = new JRadioButton(Globals.lang("Use in-parenthesis citation"), inParen);
+        inText = new JRadioButton(Globals.lang("Use in-text citation"), !inParen);
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(inPar);
+        bg.add(inText);
+        settings = new JPanel();
+        settings.setLayout(new BorderLayout());
+        settings.add(inPar, BorderLayout.NORTH);
+        settings.add(inText, BorderLayout.SOUTH);
+    }
+
+    public void storeSettings() {
+        Globals.prefs.putBoolean("ooInParCitation", inPar.isSelected());
+    }
+
+    public void pushEntries(BibtexDatabase bibtexDatabase, BibtexEntry[] entries, String s, MetaData metaData) {
+        if (ooBase == null) {
+            connect(true);
+        }
+        if (ooBase != null) {
+            try {
+                if (style == null)
+                    readStyleFile();
+            } catch (Exception ex) {
+                JOptionPane.showMessageDialog(frame, Globals.lang("You must select either a valid style file, or use one of the default styles."),
+                        Globals.lang("No valid style file defined"), JOptionPane.ERROR_MESSAGE);
+                return;
+            }
+            pushEntries(Globals.prefs.getBoolean("ooInParCitation"), entries);
+        }
+    }
+
+    public void operationCompleted(BasePanel basePanel) {
+
+    }
+
+    public boolean requiresBibtexKeys() {
+        return true;
+    }
+
+    class OOPanel extends SidePaneComponent {
+
+        public OOPanel(SidePaneManager sidePaneManager, URL url, String s) {
+            super(sidePaneManager, url, s);
+        }
+
+        public String getName() {
+            return OpenOfficePanel.this.getName();
+        }
+
+        @Override
+        public void componentClosing() {
+            Globals.prefs.putBoolean("showOOPanel", false);
+        }
+
+        @Override
+        public void componentOpening() {
+            Globals.prefs.putBoolean("showOOPanel", true);
+        }
+    }
+
+
+}
diff --git a/src/java/net/sf/jabref/oo/StyleSelectDialog.java b/src/java/net/sf/jabref/oo/StyleSelectDialog.java
old mode 100755
new mode 100644
index ac0aaf0..1d48ad3
--- a/src/java/net/sf/jabref/oo/StyleSelectDialog.java
+++ b/src/java/net/sf/jabref/oo/StyleSelectDialog.java
@@ -1,561 +1,561 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import ca.odell.glazedlists.BasicEventList;
-import ca.odell.glazedlists.EventList;
-import ca.odell.glazedlists.SortedList;
-import ca.odell.glazedlists.event.ListEvent;
-import ca.odell.glazedlists.event.ListEventListener;
-import ca.odell.glazedlists.gui.TableFormat;
-import ca.odell.glazedlists.swing.EventSelectionModel;
-import ca.odell.glazedlists.swing.EventTableModel;
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import com.jgoodies.uif_lite.component.UIFSplitPane;
-import net.sf.jabref.*;
-import net.sf.jabref.external.ExternalFileType;
-import net.sf.jabref.external.UnknownExternalFileType;
-
-import javax.swing.*;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.table.TableColumnModel;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.io.*;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * This class produces a dialog box for choosing a style file.
- */
-public class StyleSelectDialog {
-
-    public static final String STYLE_FILE_EXTENSION = ".jstyle";
-    private JabRefFrame frame;
-    private EventList<OOBibStyle> styles, sortedStyles;
-    private JDialog diag;
-    private JTable table;
-    private UIFSplitPane contentPane = new UIFSplitPane(UIFSplitPane.VERTICAL_SPLIT);
-    private EventTableModel tableModel;
-    private EventSelectionModel<OOBibStyle> selectionModel;
-    private JPopupMenu popup = new JPopupMenu();
-    private JMenuItem edit = new JMenuItem(Globals.lang("Edit"));
-    private JRadioButton useDefaultAuthoryear = new JRadioButton(Globals.lang("Default style (author-year citations)")),
-        useDefaultNumerical = new JRadioButton(Globals.lang("Default style (numerical citations)")),
-        chooseDirectly = new JRadioButton(Globals.lang("Choose style file directly")+":"),
-        setDirectory = new JRadioButton(Globals.lang("Choose from a directory")+":");
-    private JTextField directFile = new JTextField(),
-        styleDir = new JTextField();
-    private JButton browseDirectFile = new JButton(Globals.lang("Browse")),
-        browseStyleDir = new JButton(Globals.lang("Browse")),
-        showDefaultAuthoryearStyle = new JButton(Globals.lang("View")),
-        showDefaultNumericalStyle = new JButton(Globals.lang("View"));
-
-    PreviewPanel preview;
-
-    private Rectangle toRect = new Rectangle(0, 0, 1, 1);
-    private JButton ok = new JButton(Globals.lang("Ok")),
-        cancel = new JButton(Globals.lang("Cancel"));
-    private BibtexEntry prevEntry = new BibtexEntry(Util.createNeutralId());
-
-    private boolean okPressed = false;
-    private String initSelection;
-
-    public StyleSelectDialog(JabRefFrame frame, String initSelection) {
-
-        this.frame = frame;
-        setupPrevEntry();
-        init(initSelection);
-    }
-
-    private void init(String initSelection) {
-        this.initSelection = initSelection;
-
-        ButtonGroup bg = new ButtonGroup();
-        bg.add(useDefaultAuthoryear);
-        bg.add(useDefaultNumerical);
-        bg.add(chooseDirectly);
-        bg.add(setDirectory);
-        if (Globals.prefs.getBoolean("ooUseDefaultAuthoryearStyle"))
-            useDefaultAuthoryear.setSelected(true);
-        else if (Globals.prefs.getBoolean("ooUseDefaultNumericalStyle"))
-            useDefaultNumerical.setSelected(true);
-        else {
-            if (Globals.prefs.getBoolean("ooChooseStyleDirectly"))
-                chooseDirectly.setSelected(true);
-            else
-                setDirectory.setSelected(true);
-        }
-
-        directFile.setText(Globals.prefs.get("ooDirectFile"));
-        styleDir.setText(Globals.prefs.get("ooStyleDirectory"));
-        directFile.setEditable(false);
-        styleDir.setEditable(false);
-
-        popup.add(edit);
-
-        BrowseAction dfBrowse = new BrowseAction(null, directFile, false);
-        dfBrowse.setFocusTarget(directFile);
-        browseDirectFile.addActionListener(dfBrowse);
-        BrowseAction sdBrowse = new BrowseAction(null, styleDir, true);
-        sdBrowse.setFocusTarget(setDirectory);
-        browseStyleDir.addActionListener(sdBrowse);
-        showDefaultAuthoryearStyle.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                displayDefaultStyle(true);
-            }
-        });
-        showDefaultNumericalStyle.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                displayDefaultStyle(false);
-            }
-        });
-        // Add action listener to "Edit" menu item, which is supposed to open the style file in an external editor:
-        edit.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent actionEvent) {
-                int i = table.getSelectedRow();
-                if (i == -1)
-                    return;
-                ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("jstyle");
-                String link = ((OOBibStyle)tableModel.getElementAt(i)).getFile().getPath();
-                try {
-                    if (type != null)
-                        Util.openExternalFileAnyFormat(new MetaData(), link, type);
-                    else
-                        Util.openExternalFileUnknown(frame, null, new MetaData(), link,
-                                new UnknownExternalFileType("jstyle"));
-                } catch (IOException e) {
-                    e.printStackTrace();
-
-                }
-            }
-        });
-
-        diag = new JDialog(frame, Globals.lang("Styles"), true);
-
-        styles = new BasicEventList<OOBibStyle>();
-        sortedStyles = new SortedList<OOBibStyle>(styles);
-
-        // Create a preview panel for previewing styles:
-        preview = new PreviewPanel(null, new MetaData(), "");
-        // Use the test entry from the Preview settings tab in Preferences:
-        preview.setEntry(prevEntry);//PreviewPrefsTab.getTestEntry());
-
-        tableModel = new EventTableModel<OOBibStyle>(sortedStyles, new StyleTableFormat());
-        table = new JTable(tableModel);
-        TableColumnModel cm = table.getColumnModel();
-        cm.getColumn(0).setPreferredWidth(100);
-        cm.getColumn(1).setPreferredWidth(200);
-        cm.getColumn(2).setPreferredWidth(80);
-        selectionModel = new EventSelectionModel<OOBibStyle>(sortedStyles);
-        table.setSelectionModel(selectionModel);
-        table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-        table.addMouseListener(new MouseAdapter() {
-            @Override
-            public void mousePressed(MouseEvent mouseEvent) {
-                if (mouseEvent.isPopupTrigger())
-                    tablePopup(mouseEvent);
-            }
-
-            @Override
-            public void mouseReleased(MouseEvent mouseEvent) {
-                if (mouseEvent.isPopupTrigger())
-                    tablePopup(mouseEvent);
-            }
-        });
-
-        selectionModel.getSelected().addListEventListener(new EntrySelectionListener());
-
-        styleDir.getDocument().addDocumentListener(new DocumentListener() {
-            public void insertUpdate(DocumentEvent documentEvent) {
-                readStyles();
-                setDirectory.setSelected(true);
-            }
-            public void removeUpdate(DocumentEvent documentEvent) {
-                readStyles();
-                setDirectory.setSelected(true);
-            }
-            public void changedUpdate(DocumentEvent documentEvent) {
-                readStyles();
-                setDirectory.setSelected(true);
-            }
-        });
-        directFile.getDocument().addDocumentListener(new DocumentListener() {
-            public void insertUpdate(DocumentEvent documentEvent) {
-                chooseDirectly.setSelected(true);
-            }
-            public void removeUpdate(DocumentEvent documentEvent) {
-                chooseDirectly.setSelected(true);
-            }
-            public void changedUpdate(DocumentEvent documentEvent) {
-                chooseDirectly.setSelected(true);
-            }
-        });
-
-        contentPane.setTopComponent(new JScrollPane(table));
-        contentPane.setBottomComponent(preview);
-
-        readStyles();
-
-        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout("fill:pref,4dlu,fill:150dlu,4dlu,fill:pref",""));
-        b.append(useDefaultAuthoryear, 3);
-        b.append(showDefaultAuthoryearStyle);
-        b.nextLine();
-        b.append(useDefaultNumerical, 3);
-        b.append(showDefaultNumericalStyle);
-        b.nextLine();
-        b.append(chooseDirectly);
-        b.append(directFile);
-        b.append(browseDirectFile);
-        b.nextLine();
-        b.append(setDirectory);
-        b.append(styleDir);
-        b.append(browseStyleDir);
-        b.nextLine();
-        DefaultFormBuilder b2 = new DefaultFormBuilder(new FormLayout("fill:1dlu:grow",
-                 "fill:pref, fill:pref, fill:270dlu:grow"));
-
-        b2.nextLine();
-        b2.append(new JLabel("<html>"+Globals.lang("This is the list of available styles. Select the one you want to use.")+"</html>"));
-        b2.nextLine();
-        b2.append(contentPane);
-        b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        b2.getPanel().setBorder(BorderFactory.createEmptyBorder(15,5,5,5));
-        diag.add(b.getPanel(), BorderLayout.NORTH);
-        diag.add(b2.getPanel(), BorderLayout.CENTER);
-
-        AbstractAction okListener = new AbstractAction() {
-            public void actionPerformed(ActionEvent event) {
-                if (!useDefaultAuthoryear.isSelected() && !useDefaultNumerical.isSelected()) {
-                    if (chooseDirectly.isSelected()) {
-                        File f = new File(directFile.getText());
-                        if (!f.exists()) {
-                            JOptionPane.showMessageDialog(diag, Globals.lang("You must select either a valid style file, or use a default style."),
-                                    Globals.lang("Style selection"), JOptionPane.ERROR_MESSAGE);
-                            return;
-                        }
-                    }
-                    else {
-                        if (table.getRowCount() == 0 || table.getSelectedRowCount() == 0) {
-                            JOptionPane.showMessageDialog(diag, Globals.lang("You must select either a valid style file, or use a default style."),
-                                    Globals.lang("Style selection"), JOptionPane.ERROR_MESSAGE);
-                            return;
-                        }
-                    }
-                }
-                okPressed = true;
-                storeSettings();
-                diag.dispose();
-            }
-        };
-        ok.addActionListener(okListener);
-
-        Action cancelListener = new AbstractAction() {
-            public void actionPerformed(ActionEvent event) {
-                diag.dispose();
-            }
-        };
-        cancel.addActionListener(cancelListener);
-
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        diag.add(bb.getPanel(), BorderLayout.SOUTH);
-
-        ActionMap am = bb.getPanel().getActionMap();
-        InputMap im = bb.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", cancelListener);
-        im.put(KeyStroke.getKeyStroke("ENTER"), "enterOk");
-        am.put("enterOk", okListener);
-
-        diag.pack();
-        diag.setLocationRelativeTo(frame);
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                contentPane.setDividerLocation(contentPane.getSize().height-150);
-            }
-        });
-
-    }
-
-    public void setVisible(boolean visible) {
-        okPressed = false;
-        diag.setVisible(visible);
-    }
-
-    /**
-     * Read all style files or directories of style files indicated by the current
-     * settings, and add the styles to the list of styles.
-     */
-    private void readStyles() {
-        table.clearSelection();
-
-        styles.getReadWriteLock().writeLock().lock();
-        styles.clear();
-        if (styleDir.getText().length() > 0)
-            addStyles(styleDir.getText(), true);
-        styles.getReadWriteLock().writeLock().unlock();
-
-        selectLastUsed();
-    }
-
-    /**
-     * This method scans the current list of styles, and looks for the styles
-     * that was last used. If found, that style is selected. If not found,
-     * the first style is selected provided there are >0 styles.
-     */
-    private void selectLastUsed() {
-        // Set the initial selection of the table:
-        if (initSelection != null) {
-            boolean found = false;
-            for (int i=0; i < table.getRowCount(); i++) {
-                if (((OOBibStyle)tableModel.getElementAt(i)).getFile().getPath().
-                        equals(initSelection)) {
-                    table.setRowSelectionInterval(i,i);
-                    found = true;
-                    break;
-                }
-            }
-            if (!found && (table.getRowCount() > 0))
-                table.setRowSelectionInterval(0,0);
-        }
-        else {
-            if (table.getRowCount() > 0)
-                table.setRowSelectionInterval(0,0);
-        }
-    }
-
-    /**
-     * If the string dir indicates a file, parse it and add it to the list of styles if
-     * successful. If the string dir indicates a directory, parse all files looking like
-     * style files, and add them. The parameter recurse determines whether we should
-     * recurse into subdirectories.
-     * @param dir the directory or file to handle.
-     * @param recurse true indicates that we should recurse into subdirectories.
-     */
-    private void addStyles(String dir, boolean recurse) {
-        File dirF = new File(dir);
-        if (dirF.isDirectory()) {
-            File[] files = dirF.listFiles();
-            for (int i = 0; i < files.length; i++) {
-                File file = files[i];
-                // If the file looks like a style file, parse it:
-                if (!file.isDirectory() && (file.getName().endsWith(STYLE_FILE_EXTENSION))) {
-                    addSingleFile(file);
-                }
-                // If the file is a directory, and we should recurse, do:
-                else if (file.isDirectory() && recurse) {
-                    addStyles(file.getPath(), recurse);
-                }
-            }
-        }
-        else {
-            // The file wasn't a directory, so we simply parse it:
-            addSingleFile(dirF);
-        }
-    }
-
-    /**
-     * Parse a single file, and add it to the list of styles if parse was successful.
-     * @param file the file to parse.
-     */
-    private void addSingleFile(File file) {
-        try {
-            OOBibStyle style = new OOBibStyle(file);
-            // Check if the parse was successful before adding it:
-            if (style.isValid() && !styles.contains(style))
-                styles.add(style);
-        } catch (Exception e) {
-            System.out.println("Unable to read style file: '"+file.getPath()+"'");
-            e.printStackTrace();
-        }
-    }
-
-    public void storeSettings() {
-        OOBibStyle selected = getSelectedStyle();
-        Globals.prefs.putBoolean("ooUseDefaultAuthoryearStyle", useDefaultAuthoryear.isSelected());
-        Globals.prefs.putBoolean("ooUseDefaultNumericalStyle", useDefaultNumerical.isSelected());
-        Globals.prefs.putBoolean("ooChooseStyleDirectly", chooseDirectly.isSelected());
-        Globals.prefs.put("ooDirectFile", directFile.getText());
-        Globals.prefs.put("ooStyleDirectory", styleDir.getText());
-        if (chooseDirectly.isSelected()) {
-            Globals.prefs.put("ooBibliographyStyleFile", directFile.getText());
-        }
-        else if (setDirectory.isSelected() && (selected != null)) {
-            Globals.prefs.put("ooBibliographyStyleFile", selected.getFile().getPath());
-        }
-
-
-    }
-
-    /**
-     * Get the currently selected style.
-     * @return the selected style, or null if no style is selected.
-     */
-    public OOBibStyle getSelectedStyle() {
-        if (selectionModel.getSelected().size() > 0)
-            return selectionModel.getSelected().get(0);
-        else
-            return null;
-    }
-
-    private void setupPrevEntry() {
-        prevEntry.setField("author", "Smith, Bill and Jones, Bob and Williams, Jeff");
-        prevEntry.setField("editor", "Taylor, Phil");
-        prevEntry.setField("title", "Title of the test entry for reference styles");
-        prevEntry.setField("volume", "34");
-        prevEntry.setField("year", "2008");
-        prevEntry.setField("journal", "BibTeX journal");
-        prevEntry.setField("publisher", "JabRef publishing");
-        prevEntry.setField("address", "Trondheim");
-        prevEntry.setField("www", "http://jabref.sf.net");
-    }
-
-    static class StyleTableFormat implements TableFormat<OOBibStyle> {
-
-        public int getColumnCount() {
-            return 3;
-        }
-
-        public String getColumnName(int i) {
-            switch (i) {
-                case 0:
-                    return Globals.lang("Name");
-                case 1:
-                    return Globals.lang("Journals");
-                case 2:
-                    return Globals.lang("File");
-                default:
-                    return "";
-            }
-        }
-
-        public Object getColumnValue(OOBibStyle style, int i) {
-            switch (i) {
-                case 0:
-                    return style.getName();
-                case 1:
-                    return formatJournals(style.getJournals());
-                case 2:
-                    return style.getFile().getName();
-                default:
-                    return "";
-            }
-        }
-
-
-        private String formatJournals(Set<String> journals) {
-            StringBuilder sb = new StringBuilder("");
-            for (Iterator<String> i = journals.iterator(); i.hasNext();) {
-                sb.append(i.next());
-                if (i.hasNext())
-                    sb.append(", ");
-            }
-            return sb.toString();    
-        }
-    }
-
-    public boolean isOkPressed() {
-        return okPressed;
-    }
-
-    protected void tablePopup(MouseEvent e) {
-        popup.show(e.getComponent(), e.getX(), e.getY());
-    }
-
-    protected void displayDefaultStyle(boolean authoryear) {
-        try {
-            // Read the contents of the default style file:
-            URL defPath = authoryear ? JabRef.class.getResource(OpenOfficePanel.defaultAuthorYearStylePath) :
-                    JabRef.class.getResource(OpenOfficePanel.defaultNumericalStylePath);
-            BufferedReader r = new BufferedReader(new InputStreamReader(defPath.openStream()));
-            String line = null;
-            StringBuilder sb = new StringBuilder();
-            while ((line = r.readLine()) != null) {
-                sb.append(line);
-                sb.append("\n");
-            }
-
-            // Make a dialog box to display the contents:
-            final JDialog dd = new JDialog(diag, Globals.lang("Default style"), true);
-            JLabel header = new JLabel("<html>"+Globals.lang("The panel below shows the definition of the default style.")
-                //+"<br>"
-                +Globals.lang("If you want to use it as a template for a new style, you can copy the contents into a new .jstyle file")
-                +"</html>");
-
-            header.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-            dd.getContentPane().add(header, BorderLayout.NORTH);
-            JTextArea ta = new JTextArea(sb.toString());
-            ta.setEditable(false);
-            JScrollPane sp = new JScrollPane(ta);
-            sp.setPreferredSize(new Dimension(700,500));
-            dd.getContentPane().add(sp, BorderLayout.CENTER);
-            JButton ok = new JButton(Globals.lang("Ok"));
-            ButtonBarBuilder bb = new ButtonBarBuilder();
-            bb.addGlue();
-            bb.addButton(ok);
-            bb.addGlue();
-            bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-            dd.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-            ok.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent actionEvent) {
-                    dd.dispose();
-                }
-            });
-            dd.pack();
-            dd.setLocationRelativeTo(diag);
-            dd.setVisible(true);
-        } catch (IOException ex) {
-            ex.printStackTrace();
-        }
-    }
-
-
-    /**
-     * The listener for the Glazed list monitoring the current selection.
-     * When selection changes, we need to update the preview panel.
-     */
-    class EntrySelectionListener implements ListEventListener<OOBibStyle> {
-
-        public void listChanged(ListEvent<OOBibStyle> listEvent) {
-            if (listEvent.getSourceList().size() == 1) {
-                OOBibStyle style = listEvent.getSourceList().get(0);
-                initSelection = style.getFile().getPath();
-                preview.setLayout(style.getReferenceFormat("default"));
-                // Update the preview's entry:
-                contentPane.setDividerLocation(contentPane.getSize().height-150); 
-                SwingUtilities.invokeLater(new Runnable() {
-                    public void run() {
-                        preview.update();
-                        preview.scrollRectToVisible(toRect);
-                    }
-                });
-            }
-        }
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import ca.odell.glazedlists.BasicEventList;
+import ca.odell.glazedlists.EventList;
+import ca.odell.glazedlists.SortedList;
+import ca.odell.glazedlists.event.ListEvent;
+import ca.odell.glazedlists.event.ListEventListener;
+import ca.odell.glazedlists.gui.TableFormat;
+import ca.odell.glazedlists.swing.EventSelectionModel;
+import ca.odell.glazedlists.swing.EventTableModel;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.uif_lite.component.UIFSplitPane;
+import net.sf.jabref.*;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.external.UnknownExternalFileType;
+
+import javax.swing.*;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.table.TableColumnModel;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.io.*;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * This class produces a dialog box for choosing a style file.
+ */
+public class StyleSelectDialog {
+
+    public static final String STYLE_FILE_EXTENSION = ".jstyle";
+    private JabRefFrame frame;
+    private EventList<OOBibStyle> styles, sortedStyles;
+    private JDialog diag;
+    private JTable table;
+    private UIFSplitPane contentPane = new UIFSplitPane(UIFSplitPane.VERTICAL_SPLIT);
+    private EventTableModel tableModel;
+    private EventSelectionModel<OOBibStyle> selectionModel;
+    private JPopupMenu popup = new JPopupMenu();
+    private JMenuItem edit = new JMenuItem(Globals.lang("Edit"));
+    private JRadioButton useDefaultAuthoryear = new JRadioButton(Globals.lang("Default style (author-year citations)")),
+        useDefaultNumerical = new JRadioButton(Globals.lang("Default style (numerical citations)")),
+        chooseDirectly = new JRadioButton(Globals.lang("Choose style file directly")+":"),
+        setDirectory = new JRadioButton(Globals.lang("Choose from a directory")+":");
+    private JTextField directFile = new JTextField(),
+        styleDir = new JTextField();
+    private JButton browseDirectFile = new JButton(Globals.lang("Browse")),
+        browseStyleDir = new JButton(Globals.lang("Browse")),
+        showDefaultAuthoryearStyle = new JButton(Globals.lang("View")),
+        showDefaultNumericalStyle = new JButton(Globals.lang("View"));
+
+    PreviewPanel preview;
+
+    private Rectangle toRect = new Rectangle(0, 0, 1, 1);
+    private JButton ok = new JButton(Globals.lang("Ok")),
+        cancel = new JButton(Globals.lang("Cancel"));
+    private BibtexEntry prevEntry = new BibtexEntry(Util.createNeutralId());
+
+    private boolean okPressed = false;
+    private String initSelection;
+
+    public StyleSelectDialog(JabRefFrame frame, String initSelection) {
+
+        this.frame = frame;
+        setupPrevEntry();
+        init(initSelection);
+    }
+
+    private void init(String initSelection) {
+        this.initSelection = initSelection;
+
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(useDefaultAuthoryear);
+        bg.add(useDefaultNumerical);
+        bg.add(chooseDirectly);
+        bg.add(setDirectory);
+        if (Globals.prefs.getBoolean("ooUseDefaultAuthoryearStyle"))
+            useDefaultAuthoryear.setSelected(true);
+        else if (Globals.prefs.getBoolean("ooUseDefaultNumericalStyle"))
+            useDefaultNumerical.setSelected(true);
+        else {
+            if (Globals.prefs.getBoolean("ooChooseStyleDirectly"))
+                chooseDirectly.setSelected(true);
+            else
+                setDirectory.setSelected(true);
+        }
+
+        directFile.setText(Globals.prefs.get("ooDirectFile"));
+        styleDir.setText(Globals.prefs.get("ooStyleDirectory"));
+        directFile.setEditable(false);
+        styleDir.setEditable(false);
+
+        popup.add(edit);
+
+        BrowseAction dfBrowse = new BrowseAction(null, directFile, false);
+        dfBrowse.setFocusTarget(directFile);
+        browseDirectFile.addActionListener(dfBrowse);
+        BrowseAction sdBrowse = new BrowseAction(null, styleDir, true);
+        sdBrowse.setFocusTarget(setDirectory);
+        browseStyleDir.addActionListener(sdBrowse);
+        showDefaultAuthoryearStyle.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                displayDefaultStyle(true);
+            }
+        });
+        showDefaultNumericalStyle.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                displayDefaultStyle(false);
+            }
+        });
+        // Add action listener to "Edit" menu item, which is supposed to open the style file in an external editor:
+        edit.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent actionEvent) {
+                int i = table.getSelectedRow();
+                if (i == -1)
+                    return;
+                ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("jstyle");
+                String link = ((OOBibStyle)tableModel.getElementAt(i)).getFile().getPath();
+                try {
+                    if (type != null)
+                        Util.openExternalFileAnyFormat(new MetaData(), link, type);
+                    else
+                        Util.openExternalFileUnknown(frame, null, new MetaData(), link,
+                                new UnknownExternalFileType("jstyle"));
+                } catch (IOException e) {
+                    e.printStackTrace();
+
+                }
+            }
+        });
+
+        diag = new JDialog(frame, Globals.lang("Styles"), true);
+
+        styles = new BasicEventList<OOBibStyle>();
+        sortedStyles = new SortedList<OOBibStyle>(styles);
+
+        // Create a preview panel for previewing styles:
+        preview = new PreviewPanel(null, new MetaData(), "");
+        // Use the test entry from the Preview settings tab in Preferences:
+        preview.setEntry(prevEntry);//PreviewPrefsTab.getTestEntry());
+
+        tableModel = new EventTableModel<OOBibStyle>(sortedStyles, new StyleTableFormat());
+        table = new JTable(tableModel);
+        TableColumnModel cm = table.getColumnModel();
+        cm.getColumn(0).setPreferredWidth(100);
+        cm.getColumn(1).setPreferredWidth(200);
+        cm.getColumn(2).setPreferredWidth(80);
+        selectionModel = new EventSelectionModel<OOBibStyle>(sortedStyles);
+        table.setSelectionModel(selectionModel);
+        table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        table.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mousePressed(MouseEvent mouseEvent) {
+                if (mouseEvent.isPopupTrigger())
+                    tablePopup(mouseEvent);
+            }
+
+            @Override
+            public void mouseReleased(MouseEvent mouseEvent) {
+                if (mouseEvent.isPopupTrigger())
+                    tablePopup(mouseEvent);
+            }
+        });
+
+        selectionModel.getSelected().addListEventListener(new EntrySelectionListener());
+
+        styleDir.getDocument().addDocumentListener(new DocumentListener() {
+            public void insertUpdate(DocumentEvent documentEvent) {
+                readStyles();
+                setDirectory.setSelected(true);
+            }
+            public void removeUpdate(DocumentEvent documentEvent) {
+                readStyles();
+                setDirectory.setSelected(true);
+            }
+            public void changedUpdate(DocumentEvent documentEvent) {
+                readStyles();
+                setDirectory.setSelected(true);
+            }
+        });
+        directFile.getDocument().addDocumentListener(new DocumentListener() {
+            public void insertUpdate(DocumentEvent documentEvent) {
+                chooseDirectly.setSelected(true);
+            }
+            public void removeUpdate(DocumentEvent documentEvent) {
+                chooseDirectly.setSelected(true);
+            }
+            public void changedUpdate(DocumentEvent documentEvent) {
+                chooseDirectly.setSelected(true);
+            }
+        });
+
+        contentPane.setTopComponent(new JScrollPane(table));
+        contentPane.setBottomComponent(preview);
+
+        readStyles();
+
+        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout("fill:pref,4dlu,fill:150dlu,4dlu,fill:pref",""));
+        b.append(useDefaultAuthoryear, 3);
+        b.append(showDefaultAuthoryearStyle);
+        b.nextLine();
+        b.append(useDefaultNumerical, 3);
+        b.append(showDefaultNumericalStyle);
+        b.nextLine();
+        b.append(chooseDirectly);
+        b.append(directFile);
+        b.append(browseDirectFile);
+        b.nextLine();
+        b.append(setDirectory);
+        b.append(styleDir);
+        b.append(browseStyleDir);
+        b.nextLine();
+        DefaultFormBuilder b2 = new DefaultFormBuilder(new FormLayout("fill:1dlu:grow",
+                 "fill:pref, fill:pref, fill:270dlu:grow"));
+
+        b2.nextLine();
+        b2.append(new JLabel("<html>"+Globals.lang("This is the list of available styles. Select the one you want to use.")+"</html>"));
+        b2.nextLine();
+        b2.append(contentPane);
+        b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        b2.getPanel().setBorder(BorderFactory.createEmptyBorder(15,5,5,5));
+        diag.add(b.getPanel(), BorderLayout.NORTH);
+        diag.add(b2.getPanel(), BorderLayout.CENTER);
+
+        AbstractAction okListener = new AbstractAction() {
+            public void actionPerformed(ActionEvent event) {
+                if (!useDefaultAuthoryear.isSelected() && !useDefaultNumerical.isSelected()) {
+                    if (chooseDirectly.isSelected()) {
+                        File f = new File(directFile.getText());
+                        if (!f.exists()) {
+                            JOptionPane.showMessageDialog(diag, Globals.lang("You must select either a valid style file, or use a default style."),
+                                    Globals.lang("Style selection"), JOptionPane.ERROR_MESSAGE);
+                            return;
+                        }
+                    }
+                    else {
+                        if (table.getRowCount() == 0 || table.getSelectedRowCount() == 0) {
+                            JOptionPane.showMessageDialog(diag, Globals.lang("You must select either a valid style file, or use a default style."),
+                                    Globals.lang("Style selection"), JOptionPane.ERROR_MESSAGE);
+                            return;
+                        }
+                    }
+                }
+                okPressed = true;
+                storeSettings();
+                diag.dispose();
+            }
+        };
+        ok.addActionListener(okListener);
+
+        Action cancelListener = new AbstractAction() {
+            public void actionPerformed(ActionEvent event) {
+                diag.dispose();
+            }
+        };
+        cancel.addActionListener(cancelListener);
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        diag.add(bb.getPanel(), BorderLayout.SOUTH);
+
+        ActionMap am = bb.getPanel().getActionMap();
+        InputMap im = bb.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", cancelListener);
+        im.put(KeyStroke.getKeyStroke("ENTER"), "enterOk");
+        am.put("enterOk", okListener);
+
+        diag.pack();
+        diag.setLocationRelativeTo(frame);
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                contentPane.setDividerLocation(contentPane.getSize().height-150);
+            }
+        });
+
+    }
+
+    public void setVisible(boolean visible) {
+        okPressed = false;
+        diag.setVisible(visible);
+    }
+
+    /**
+     * Read all style files or directories of style files indicated by the current
+     * settings, and add the styles to the list of styles.
+     */
+    private void readStyles() {
+        table.clearSelection();
+
+        styles.getReadWriteLock().writeLock().lock();
+        styles.clear();
+        if (styleDir.getText().length() > 0)
+            addStyles(styleDir.getText(), true);
+        styles.getReadWriteLock().writeLock().unlock();
+
+        selectLastUsed();
+    }
+
+    /**
+     * This method scans the current list of styles, and looks for the styles
+     * that was last used. If found, that style is selected. If not found,
+     * the first style is selected provided there are >0 styles.
+     */
+    private void selectLastUsed() {
+        // Set the initial selection of the table:
+        if (initSelection != null) {
+            boolean found = false;
+            for (int i=0; i < table.getRowCount(); i++) {
+                if (((OOBibStyle)tableModel.getElementAt(i)).getFile().getPath().
+                        equals(initSelection)) {
+                    table.setRowSelectionInterval(i,i);
+                    found = true;
+                    break;
+                }
+            }
+            if (!found && (table.getRowCount() > 0))
+                table.setRowSelectionInterval(0,0);
+        }
+        else {
+            if (table.getRowCount() > 0)
+                table.setRowSelectionInterval(0,0);
+        }
+    }
+
+    /**
+     * If the string dir indicates a file, parse it and add it to the list of styles if
+     * successful. If the string dir indicates a directory, parse all files looking like
+     * style files, and add them. The parameter recurse determines whether we should
+     * recurse into subdirectories.
+     * @param dir the directory or file to handle.
+     * @param recurse true indicates that we should recurse into subdirectories.
+     */
+    private void addStyles(String dir, boolean recurse) {
+        File dirF = new File(dir);
+        if (dirF.isDirectory()) {
+            File[] files = dirF.listFiles();
+            for (int i = 0; i < files.length; i++) {
+                File file = files[i];
+                // If the file looks like a style file, parse it:
+                if (!file.isDirectory() && (file.getName().endsWith(STYLE_FILE_EXTENSION))) {
+                    addSingleFile(file);
+                }
+                // If the file is a directory, and we should recurse, do:
+                else if (file.isDirectory() && recurse) {
+                    addStyles(file.getPath(), recurse);
+                }
+            }
+        }
+        else {
+            // The file wasn't a directory, so we simply parse it:
+            addSingleFile(dirF);
+        }
+    }
+
+    /**
+     * Parse a single file, and add it to the list of styles if parse was successful.
+     * @param file the file to parse.
+     */
+    private void addSingleFile(File file) {
+        try {
+            OOBibStyle style = new OOBibStyle(file);
+            // Check if the parse was successful before adding it:
+            if (style.isValid() && !styles.contains(style))
+                styles.add(style);
+        } catch (Exception e) {
+            System.out.println("Unable to read style file: '"+file.getPath()+"'");
+            e.printStackTrace();
+        }
+    }
+
+    public void storeSettings() {
+        OOBibStyle selected = getSelectedStyle();
+        Globals.prefs.putBoolean("ooUseDefaultAuthoryearStyle", useDefaultAuthoryear.isSelected());
+        Globals.prefs.putBoolean("ooUseDefaultNumericalStyle", useDefaultNumerical.isSelected());
+        Globals.prefs.putBoolean("ooChooseStyleDirectly", chooseDirectly.isSelected());
+        Globals.prefs.put("ooDirectFile", directFile.getText());
+        Globals.prefs.put("ooStyleDirectory", styleDir.getText());
+        if (chooseDirectly.isSelected()) {
+            Globals.prefs.put("ooBibliographyStyleFile", directFile.getText());
+        }
+        else if (setDirectory.isSelected() && (selected != null)) {
+            Globals.prefs.put("ooBibliographyStyleFile", selected.getFile().getPath());
+        }
+
+
+    }
+
+    /**
+     * Get the currently selected style.
+     * @return the selected style, or null if no style is selected.
+     */
+    public OOBibStyle getSelectedStyle() {
+        if (selectionModel.getSelected().size() > 0)
+            return selectionModel.getSelected().get(0);
+        else
+            return null;
+    }
+
+    private void setupPrevEntry() {
+        prevEntry.setField("author", "Smith, Bill and Jones, Bob and Williams, Jeff");
+        prevEntry.setField("editor", "Taylor, Phil");
+        prevEntry.setField("title", "Title of the test entry for reference styles");
+        prevEntry.setField("volume", "34");
+        prevEntry.setField("year", "2008");
+        prevEntry.setField("journal", "BibTeX journal");
+        prevEntry.setField("publisher", "JabRef publishing");
+        prevEntry.setField("address", "Trondheim");
+        prevEntry.setField("www", "http://jabref.sf.net");
+    }
+
+    static class StyleTableFormat implements TableFormat<OOBibStyle> {
+
+        public int getColumnCount() {
+            return 3;
+        }
+
+        public String getColumnName(int i) {
+            switch (i) {
+                case 0:
+                    return Globals.lang("Name");
+                case 1:
+                    return Globals.lang("Journals");
+                case 2:
+                    return Globals.lang("File");
+                default:
+                    return "";
+            }
+        }
+
+        public Object getColumnValue(OOBibStyle style, int i) {
+            switch (i) {
+                case 0:
+                    return style.getName();
+                case 1:
+                    return formatJournals(style.getJournals());
+                case 2:
+                    return style.getFile().getName();
+                default:
+                    return "";
+            }
+        }
+
+
+        private String formatJournals(Set<String> journals) {
+            StringBuilder sb = new StringBuilder("");
+            for (Iterator<String> i = journals.iterator(); i.hasNext();) {
+                sb.append(i.next());
+                if (i.hasNext())
+                    sb.append(", ");
+            }
+            return sb.toString();    
+        }
+    }
+
+    public boolean isOkPressed() {
+        return okPressed;
+    }
+
+    protected void tablePopup(MouseEvent e) {
+        popup.show(e.getComponent(), e.getX(), e.getY());
+    }
+
+    protected void displayDefaultStyle(boolean authoryear) {
+        try {
+            // Read the contents of the default style file:
+            URL defPath = authoryear ? JabRef.class.getResource(OpenOfficePanel.defaultAuthorYearStylePath) :
+                    JabRef.class.getResource(OpenOfficePanel.defaultNumericalStylePath);
+            BufferedReader r = new BufferedReader(new InputStreamReader(defPath.openStream()));
+            String line = null;
+            StringBuilder sb = new StringBuilder();
+            while ((line = r.readLine()) != null) {
+                sb.append(line);
+                sb.append("\n");
+            }
+
+            // Make a dialog box to display the contents:
+            final JDialog dd = new JDialog(diag, Globals.lang("Default style"), true);
+            JLabel header = new JLabel("<html>"+Globals.lang("The panel below shows the definition of the default style.")
+                //+"<br>"
+                +Globals.lang("If you want to use it as a template for a new style, you can copy the contents into a new .jstyle file")
+                +"</html>");
+
+            header.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+            dd.getContentPane().add(header, BorderLayout.NORTH);
+            JTextArea ta = new JTextArea(sb.toString());
+            ta.setEditable(false);
+            JScrollPane sp = new JScrollPane(ta);
+            sp.setPreferredSize(new Dimension(700,500));
+            dd.getContentPane().add(sp, BorderLayout.CENTER);
+            JButton ok = new JButton(Globals.lang("Ok"));
+            ButtonBarBuilder bb = new ButtonBarBuilder();
+            bb.addGlue();
+            bb.addButton(ok);
+            bb.addGlue();
+            bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+            dd.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+            ok.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent actionEvent) {
+                    dd.dispose();
+                }
+            });
+            dd.pack();
+            dd.setLocationRelativeTo(diag);
+            dd.setVisible(true);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+
+    /**
+     * The listener for the Glazed list monitoring the current selection.
+     * When selection changes, we need to update the preview panel.
+     */
+    class EntrySelectionListener implements ListEventListener<OOBibStyle> {
+
+        public void listChanged(ListEvent<OOBibStyle> listEvent) {
+            if (listEvent.getSourceList().size() == 1) {
+                OOBibStyle style = listEvent.getSourceList().get(0);
+                initSelection = style.getFile().getPath();
+                preview.setLayout(style.getReferenceFormat("default"));
+                // Update the preview's entry:
+                contentPane.setDividerLocation(contentPane.getSize().height-150); 
+                SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                        preview.update();
+                        preview.scrollRectToVisible(toRect);
+                    }
+                });
+            }
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/oo/UndefinedBibtexEntry.java b/src/java/net/sf/jabref/oo/UndefinedBibtexEntry.java
index 3b6741a..db2577d 100644
--- a/src/java/net/sf/jabref/oo/UndefinedBibtexEntry.java
+++ b/src/java/net/sf/jabref/oo/UndefinedBibtexEntry.java
@@ -1,37 +1,37 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Util;
-
-/**
- * Subclass of BibtexEntry for representing entries referenced in a document that can't
- * be found in JabRef's current database.
- */
-public class UndefinedBibtexEntry extends BibtexEntry {
-    private String key;
-
-    public UndefinedBibtexEntry(String key) {
-        super(Util.createNeutralId());
-        this.key = key;
-        setField("author", OOBibStyle.UNDEFINED_CITATION_MARKER);
-    }
-
-    public String getKey() {
-        return key;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Util;
+
+/**
+ * Subclass of BibtexEntry for representing entries referenced in a document that can't
+ * be found in JabRef's current database.
+ */
+public class UndefinedBibtexEntry extends BibtexEntry {
+    private String key;
+
+    public UndefinedBibtexEntry(String key) {
+        super(Util.createNeutralId());
+        this.key = key;
+        setField("author", OOBibStyle.UNDEFINED_CITATION_MARKER);
+    }
+
+    public String getKey() {
+        return key;
+    }
+}
diff --git a/src/java/net/sf/jabref/oo/UndefinedCharacterFormatException.java b/src/java/net/sf/jabref/oo/UndefinedCharacterFormatException.java
index 9abdeec..c8b1623 100644
--- a/src/java/net/sf/jabref/oo/UndefinedCharacterFormatException.java
+++ b/src/java/net/sf/jabref/oo/UndefinedCharacterFormatException.java
@@ -1,34 +1,34 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-/**
- * Exception used to indicate that the plugin attempted to set a character format that is
- * not defined in the current OpenOffice document.
- */
-public class UndefinedCharacterFormatException extends Exception {
-
-    String formatName;
-
-    public UndefinedCharacterFormatException(String formatName) {
-        super();
-        this.formatName = formatName;
-    }
-
-    public String getFormatName() {
-        return formatName;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+/**
+ * Exception used to indicate that the plugin attempted to set a character format that is
+ * not defined in the current OpenOffice document.
+ */
+public class UndefinedCharacterFormatException extends Exception {
+
+    String formatName;
+
+    public UndefinedCharacterFormatException(String formatName) {
+        super();
+        this.formatName = formatName;
+    }
+
+    public String getFormatName() {
+        return formatName;
+    }
+}
diff --git a/src/java/net/sf/jabref/oo/UndefinedParagraphFormatException.java b/src/java/net/sf/jabref/oo/UndefinedParagraphFormatException.java
index c56d926..60d96fc 100644
--- a/src/java/net/sf/jabref/oo/UndefinedParagraphFormatException.java
+++ b/src/java/net/sf/jabref/oo/UndefinedParagraphFormatException.java
@@ -1,34 +1,34 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-/**
- * Exception used to indicate that the plugin attempted to set a paragraph format that is
- * not defined in the current OpenOffice document.
- */
-public class UndefinedParagraphFormatException extends Exception {
-
-    String formatName;
-
-    public UndefinedParagraphFormatException(String formatName) {
-        super();
-        this.formatName = formatName;
-    }
-
-    public String getFormatName() {
-        return formatName;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+/**
+ * Exception used to indicate that the plugin attempted to set a paragraph format that is
+ * not defined in the current OpenOffice document.
+ */
+public class UndefinedParagraphFormatException extends Exception {
+
+    String formatName;
+
+    public UndefinedParagraphFormatException(String formatName) {
+        super();
+        this.formatName = formatName;
+    }
+
+    public String getFormatName() {
+        return formatName;
+    }
+}
diff --git a/src/java/net/sf/jabref/oo/YearComparator.java b/src/java/net/sf/jabref/oo/YearComparator.java
old mode 100755
new mode 100644
index 9861bcc..f9f9551
--- a/src/java/net/sf/jabref/oo/YearComparator.java
+++ b/src/java/net/sf/jabref/oo/YearComparator.java
@@ -1,51 +1,51 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.oo;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.FieldComparator;
-
-import java.util.Comparator;
-
-/**
- * Comparator for sorting bibliography entries according to publication year. This is used to
- * sort entries in multiple citations where the oldest publication should appear first.
- */
-public class YearComparator implements Comparator<BibtexEntry> {
-
-    FieldComparator authComp = new FieldComparator("author"),
-        editorComp = new FieldComparator("editor"),
-        yearComp = new FieldComparator("year");
-
-    public YearComparator() {
-
-    }
-
-    public int compare(BibtexEntry o1, BibtexEntry o2) {
-        // Year as first criterion:
-        int comp = yearComp.compare(o1, o2);
-        if (comp != 0)
-            return comp;
-        // TODO: Is it a good idea to try editor if author fields are equal?
-        // Author as next criterion:
-        comp = authComp.compare(o1, o2);
-        if (comp != 0)
-            return comp;
-        // Editor as next criterion:
-        return editorComp.compare(o1, o2);
-
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.oo;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.FieldComparator;
+
+import java.util.Comparator;
+
+/**
+ * Comparator for sorting bibliography entries according to publication year. This is used to
+ * sort entries in multiple citations where the oldest publication should appear first.
+ */
+public class YearComparator implements Comparator<BibtexEntry> {
+
+    FieldComparator authComp = new FieldComparator("author"),
+        editorComp = new FieldComparator("editor"),
+        yearComp = new FieldComparator("year");
+
+    public YearComparator() {
+
+    }
+
+    public int compare(BibtexEntry o1, BibtexEntry o2) {
+        // Year as first criterion:
+        int comp = yearComp.compare(o1, o2);
+        if (comp != 0)
+            return comp;
+        // TODO: Is it a good idea to try editor if author fields are equal?
+        // Author as next criterion:
+        comp = authComp.compare(o1, o2);
+        if (comp != 0)
+            return comp;
+        // Editor as next criterion:
+        return editorComp.compare(o1, o2);
+
+    }
+}
diff --git a/src/java/net/sf/jabref/plugin/ManagePluginsDialog.java b/src/java/net/sf/jabref/plugin/ManagePluginsDialog.java
index 7224e86..3944b8d 100644
--- a/src/java/net/sf/jabref/plugin/ManagePluginsDialog.java
+++ b/src/java/net/sf/jabref/plugin/ManagePluginsDialog.java
@@ -1,290 +1,290 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.plugin;
-
-import ca.odell.glazedlists.SortedList;
-import ca.odell.glazedlists.EventList;
-import ca.odell.glazedlists.BasicEventList;
-import ca.odell.glazedlists.gui.TableFormat;
-import ca.odell.glazedlists.swing.EventTableModel;
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Iterator;
-import javax.swing.*;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.HelpAction;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.net.URLDownload;
-import net.sf.jabref.gui.FileDialogs;
-import net.sf.jabref.plugin.PluginInstaller.NameAndVersion;
-
-/**
- *
- * @author alver
- */
-public class ManagePluginsDialog {
-
-    private JabRefFrame frame;
-    private JDialog diag;
-    private SortedList<NameAndVersion> plugins, pluginsOther;
-    private JTable table, tableOther;
-    private TableFormat tableFormat, tableFormatOther;
-    private JButton close = new JButton(Globals.lang("Close")),
-            install = new JButton(Globals.lang("Install plugin")),
-            download = new JButton(Globals.lang("Download plugin")),
-            remove = new JButton(Globals.lang("Delete")),
-            help = new JButton(Globals.lang("Help"));
-    
-    
-    public ManagePluginsDialog(JabRefFrame frame) {
-        this.frame = frame;
-        diag = new JDialog(frame, Globals.lang("Plugin manager"), false);
-        help.addActionListener(new HelpAction(Globals.helpDiag, GUIGlobals.pluginHelp, "Help"));
-        JPanel pan = new JPanel();
-        pan.setLayout(new BorderLayout());
-
-        JLabel lab = new JLabel
-                (Globals.lang("Plugins installed in your user plugin directory (%0):",
-                PluginCore.userPluginDir.getPath()));
-        lab.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        pan.add(lab, BorderLayout.NORTH);
-
-        // Table for user dir plugins:
-        table = new JTable();
-        // Table for other plugiuns
-        tableOther = new JTable();
-        tableOther.setRowSelectionAllowed(false);
-        tableOther.setColumnSelectionAllowed(false);
-        tableOther.setCellSelectionEnabled(false);
-        buildList();
-        table.setPreferredScrollableViewportSize(new Dimension(500, 200));
-        tableOther.setPreferredScrollableViewportSize(new Dimension(500, 100));
-        pan.add(new JScrollPane(table), BorderLayout.CENTER);
-        diag.getContentPane().add(pan, BorderLayout.NORTH);
-        pan = new JPanel();
-        pan.setLayout(new BorderLayout());
-        lab = new JLabel(Globals.lang("Plugins installed in other locations:"));
-        lab.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        pan.add(lab, BorderLayout.NORTH);
-        pan.add(new JScrollPane(tableOther), BorderLayout.CENTER);
-
-        diag.getContentPane().add(pan, BorderLayout.CENTER);
-        
-        ButtonBarBuilder b = new ButtonBarBuilder();
-        b.addGlue();
-        b.addButton(install);
-        b.addButton(download);
-        b.addButton(remove);
-        b.addButton(close);
-        b.addRelatedGap();
-        b.addButton(help);
-        
-        b.addGlue();
-        b.getPanel().setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-        diag.getContentPane().add(b.getPanel(), BorderLayout.SOUTH);
-        diag.pack();
-        diag.setLocationRelativeTo(frame);
-        
-        install.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent arg0) {
-                installPlugin();
-            }
-        });
-        
-        download.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent arg0) {
-                downloadPlugin();
-            }
-        });
-        
-        Action closeListener = new AbstractAction() {
-            public void actionPerformed(ActionEvent arg0) {
-                diag.dispose();
-            }
-        };
-        close.addActionListener(closeListener);
-        
-        remove.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent arg0) {
-                removeSelected();
-            }
-        });
-        
-        // Key bindings:
-        ActionMap am = b.getPanel().getActionMap();
-        InputMap im = b.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", closeListener);
-
-    }
-    
-    private void removeSelected() {
-        int[] sel = table.getSelectedRows();
-        if (sel.length > 0) {
-            String message = Globals.lang("Delete the %0 selected plugins?", String.valueOf(sel.length));
-            String title = Globals.lang("Delete plugins");
-            if (sel.length == 1) {
-                message = Globals.lang("Delete the selected plugin?");
-                title = Globals.lang("Delete plugin");
-            }
-            int reply = JOptionPane.showConfirmDialog(frame, message, title, JOptionPane.YES_NO_OPTION);
-            if (reply != JOptionPane.YES_OPTION)
-                return;
-            boolean success = true;
-            for (int i=0; i<sel.length; i++) {
-                PluginInstaller.NameAndVersion nav = plugins.get(sel[i]);
-                success = PluginInstaller.deletePlugin(nav) & success;
-            }
-            if (!success) {
-
-                JOptionPane.showMessageDialog(frame, sel.length > 1 ?
-                        Globals.lang("Plugins will be deleted next time JabRef starts up.")
-                        : Globals.lang("Plugin will be deleted next time JabRef starts up."),
-                        sel.length > 1 ? Globals.lang("Delete plugins") : Globals.lang("Delete plugin"),
-                        JOptionPane.INFORMATION_MESSAGE);
-            }
-            buildList();
-        }
-    }
-    
-    private void buildList() {
-        plugins = new SortedList<NameAndVersion>(PluginInstaller.findInstalledPlugins());
-        // Move those plugins that are not installed in the user plugin dir to another list:
-        EventList<NameAndVersion> outsideUserDir = new BasicEventList<NameAndVersion>();
-        for (Iterator<NameAndVersion> i = plugins.iterator(); i.hasNext();) {
-            NameAndVersion nav = i.next();
-            if (!nav.inUserDirectory) {
-                outsideUserDir.add(nav);
-                i.remove();
-            }
-        }
-        pluginsOther = new SortedList<NameAndVersion>(outsideUserDir);
-        tableFormatOther = new PluginTableFormat();
-        EventTableModel tableModel = new EventTableModel(pluginsOther, tableFormatOther);
-        tableOther.setModel(tableModel);
-        tableOther.getColumnModel().getColumn(0).setPreferredWidth(200);
-        tableOther.getColumnModel().getColumn(1).setPreferredWidth(50);
-        tableOther.getColumnModel().getColumn(2).setPreferredWidth(50);
-
-        tableFormat = new PluginTableFormat();
-        EventTableModel tableModelOther = new EventTableModel(plugins, tableFormat);
-        table.setModel(tableModelOther);
-        table.getColumnModel().getColumn(0).setPreferredWidth(200);
-        table.getColumnModel().getColumn(1).setPreferredWidth(50);
-        table.getColumnModel().getColumn(2).setPreferredWidth(50);
-    }
-    
-    public void setVisible(boolean visible) {
-        diag.setVisible(visible);
-    }
-    
-    public void installPlugin() {
-        String filename = FileDialogs.getNewFile(frame, new File(System.getProperty("user.home")),
-            ".jar", JFileChooser.OPEN_DIALOG, false);
-        if (filename == null)
-            return;
-        File f = new File(filename);
-        if (f != null) {
-            if (!f.exists()) {
-                JOptionPane.showMessageDialog(frame, Globals.lang("File not found")+".",
-                        Globals.lang("Plugin installer"), JOptionPane.ERROR_MESSAGE);
-            } else {
-                installFromFile(f);
-            }
-        }
-
-    }
-
-    public void downloadPlugin() {
-        String url = JOptionPane.showInputDialog(Globals.lang("Enter download URL"));
-        if (url == null)
-            return;
-        try {
-            installFromURL(new URL(url));
-        } catch (MalformedURLException e) {
-            JOptionPane.showMessageDialog(frame, Globals.lang("Invalid URL"),
-                    Globals.lang("Plugin installer"), JOptionPane.ERROR_MESSAGE);
-        }
-    }
-    
-    public void installFromURL(URL url) {
-        try {
-            File tmpFile = File.createTempFile("jabref-plugin", ".jar");
-            tmpFile.deleteOnExit();
-            URLDownload ud = new URLDownload(frame, url, tmpFile);
-            ud.download();
-            String path = url.getPath();
-            int pos = path.lastIndexOf('/');
-            if ((pos >= 0) && (pos < path.length()-1))
-                path = path.substring(pos+1);
-            PluginInstaller.installPlugin(frame, tmpFile, path);
-            tmpFile.delete();
-            buildList();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        
-    }
-
-    public void installFromFile(File file) {
-        PluginInstaller.installPlugin(frame, file, null);
-        buildList();
-    }
-    
-    class PluginTableFormat implements TableFormat<NameAndVersion> {
-
-        public int getColumnCount() {
-            return 3;
-        }
-
-        public String getColumnName(int col) {
-            if (col == 0)
-                return Globals.lang("Plugin name");
-            else if (col == 1)
-                return Globals.lang("Version");
-            else return Globals.lang("Status");
-        }
-
-        public Object getColumnValue(NameAndVersion nav, int col) {
-            if (col == 0)
-                return nav.name;
-            else if (col == 1) {
-                if (!nav.version.equals(PluginInstaller.VersionNumber.ZERO))
-                    return nav.version.toString();
-                else return Globals.lang("Unknown");
-            }
-            else {
-                int status = nav.getStatus();
-                if (status == 0)
-                    return Globals.lang("Not loaded");
-                else if (status == 1)
-                    return Globals.lang("Loaded");
-                else
-                    return Globals.lang("Error");
-            }
-        }
-        
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.plugin;
+
+import ca.odell.glazedlists.SortedList;
+import ca.odell.glazedlists.EventList;
+import ca.odell.glazedlists.BasicEventList;
+import ca.odell.glazedlists.gui.TableFormat;
+import ca.odell.glazedlists.swing.EventTableModel;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Iterator;
+import javax.swing.*;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.net.URLDownload;
+import net.sf.jabref.gui.FileDialogs;
+import net.sf.jabref.help.HelpAction;
+import net.sf.jabref.plugin.PluginInstaller.NameAndVersion;
+
+/**
+ *
+ * @author alver
+ */
+public class ManagePluginsDialog {
+
+    private JabRefFrame frame;
+    private JDialog diag;
+    private SortedList<NameAndVersion> plugins, pluginsOther;
+    private JTable table, tableOther;
+    private TableFormat tableFormat, tableFormatOther;
+    private JButton close = new JButton(Globals.lang("Close")),
+            install = new JButton(Globals.lang("Install plugin")),
+            download = new JButton(Globals.lang("Download plugin")),
+            remove = new JButton(Globals.lang("Delete")),
+            help = new JButton(Globals.lang("Help"));
+    
+    
+    public ManagePluginsDialog(JabRefFrame frame) {
+        this.frame = frame;
+        diag = new JDialog(frame, Globals.lang("Plugin manager"), false);
+        help.addActionListener(new HelpAction(Globals.helpDiag, GUIGlobals.pluginHelp, "Help"));
+        JPanel pan = new JPanel();
+        pan.setLayout(new BorderLayout());
+
+        JLabel lab = new JLabel
+                (Globals.lang("Plugins installed in your user plugin directory (%0):",
+                PluginCore.userPluginDir.getPath()));
+        lab.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pan.add(lab, BorderLayout.NORTH);
+
+        // Table for user dir plugins:
+        table = new JTable();
+        // Table for other plugiuns
+        tableOther = new JTable();
+        tableOther.setRowSelectionAllowed(false);
+        tableOther.setColumnSelectionAllowed(false);
+        tableOther.setCellSelectionEnabled(false);
+        buildList();
+        table.setPreferredScrollableViewportSize(new Dimension(500, 200));
+        tableOther.setPreferredScrollableViewportSize(new Dimension(500, 100));
+        pan.add(new JScrollPane(table), BorderLayout.CENTER);
+        diag.getContentPane().add(pan, BorderLayout.NORTH);
+        pan = new JPanel();
+        pan.setLayout(new BorderLayout());
+        lab = new JLabel(Globals.lang("Plugins installed in other locations:"));
+        lab.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pan.add(lab, BorderLayout.NORTH);
+        pan.add(new JScrollPane(tableOther), BorderLayout.CENTER);
+
+        diag.getContentPane().add(pan, BorderLayout.CENTER);
+        
+        ButtonBarBuilder b = new ButtonBarBuilder();
+        b.addGlue();
+        b.addButton(install);
+        b.addButton(download);
+        b.addButton(remove);
+        b.addButton(close);
+        b.addRelatedGap();
+        b.addButton(help);
+        
+        b.addGlue();
+        b.getPanel().setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        diag.getContentPane().add(b.getPanel(), BorderLayout.SOUTH);
+        diag.pack();
+        diag.setLocationRelativeTo(frame);
+        
+        install.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent arg0) {
+                installPlugin();
+            }
+        });
+        
+        download.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent arg0) {
+                downloadPlugin();
+            }
+        });
+        
+        Action closeListener = new AbstractAction() {
+            public void actionPerformed(ActionEvent arg0) {
+                diag.dispose();
+            }
+        };
+        close.addActionListener(closeListener);
+        
+        remove.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent arg0) {
+                removeSelected();
+            }
+        });
+        
+        // Key bindings:
+        ActionMap am = b.getPanel().getActionMap();
+        InputMap im = b.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", closeListener);
+
+    }
+    
+    private void removeSelected() {
+        int[] sel = table.getSelectedRows();
+        if (sel.length > 0) {
+            String message = Globals.lang("Delete the %0 selected plugins?", String.valueOf(sel.length));
+            String title = Globals.lang("Delete plugins");
+            if (sel.length == 1) {
+                message = Globals.lang("Delete the selected plugin?");
+                title = Globals.lang("Delete plugin");
+            }
+            int reply = JOptionPane.showConfirmDialog(frame, message, title, JOptionPane.YES_NO_OPTION);
+            if (reply != JOptionPane.YES_OPTION)
+                return;
+            boolean success = true;
+            for (int i=0; i<sel.length; i++) {
+                PluginInstaller.NameAndVersion nav = plugins.get(sel[i]);
+                success = PluginInstaller.deletePlugin(nav) & success;
+            }
+            if (!success) {
+
+                JOptionPane.showMessageDialog(frame, sel.length > 1 ?
+                        Globals.lang("Plugins will be deleted next time JabRef starts up.")
+                        : Globals.lang("Plugin will be deleted next time JabRef starts up."),
+                        sel.length > 1 ? Globals.lang("Delete plugins") : Globals.lang("Delete plugin"),
+                        JOptionPane.INFORMATION_MESSAGE);
+            }
+            buildList();
+        }
+    }
+    
+    private void buildList() {
+        plugins = new SortedList<NameAndVersion>(PluginInstaller.findInstalledPlugins());
+        // Move those plugins that are not installed in the user plugin dir to another list:
+        EventList<NameAndVersion> outsideUserDir = new BasicEventList<NameAndVersion>();
+        for (Iterator<NameAndVersion> i = plugins.iterator(); i.hasNext();) {
+            NameAndVersion nav = i.next();
+            if (!nav.inUserDirectory) {
+                outsideUserDir.add(nav);
+                i.remove();
+            }
+        }
+        pluginsOther = new SortedList<NameAndVersion>(outsideUserDir);
+        tableFormatOther = new PluginTableFormat();
+        EventTableModel tableModel = new EventTableModel(pluginsOther, tableFormatOther);
+        tableOther.setModel(tableModel);
+        tableOther.getColumnModel().getColumn(0).setPreferredWidth(200);
+        tableOther.getColumnModel().getColumn(1).setPreferredWidth(50);
+        tableOther.getColumnModel().getColumn(2).setPreferredWidth(50);
+
+        tableFormat = new PluginTableFormat();
+        EventTableModel tableModelOther = new EventTableModel(plugins, tableFormat);
+        table.setModel(tableModelOther);
+        table.getColumnModel().getColumn(0).setPreferredWidth(200);
+        table.getColumnModel().getColumn(1).setPreferredWidth(50);
+        table.getColumnModel().getColumn(2).setPreferredWidth(50);
+    }
+    
+    public void setVisible(boolean visible) {
+        diag.setVisible(visible);
+    }
+    
+    public void installPlugin() {
+        String filename = FileDialogs.getNewFile(frame, new File(System.getProperty("user.home")),
+            ".jar", JFileChooser.OPEN_DIALOG, false);
+        if (filename == null)
+            return;
+        File f = new File(filename);
+        if (f != null) {
+            if (!f.exists()) {
+                JOptionPane.showMessageDialog(frame, Globals.lang("File not found")+".",
+                        Globals.lang("Plugin installer"), JOptionPane.ERROR_MESSAGE);
+            } else {
+                installFromFile(f);
+            }
+        }
+
+    }
+
+    public void downloadPlugin() {
+        String url = JOptionPane.showInputDialog(Globals.lang("Enter download URL"));
+        if (url == null)
+            return;
+        try {
+            installFromURL(new URL(url));
+        } catch (MalformedURLException e) {
+            JOptionPane.showMessageDialog(frame, Globals.lang("Invalid URL"),
+                    Globals.lang("Plugin installer"), JOptionPane.ERROR_MESSAGE);
+        }
+    }
+    
+    public void installFromURL(URL url) {
+        try {
+            File tmpFile = File.createTempFile("jabref-plugin", ".jar");
+            tmpFile.deleteOnExit();
+            URLDownload ud = new URLDownload(frame, url, tmpFile);
+            ud.download();
+            String path = url.getPath();
+            int pos = path.lastIndexOf('/');
+            if ((pos >= 0) && (pos < path.length()-1))
+                path = path.substring(pos+1);
+            PluginInstaller.installPlugin(frame, tmpFile, path);
+            tmpFile.delete();
+            buildList();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        
+    }
+
+    public void installFromFile(File file) {
+        PluginInstaller.installPlugin(frame, file, null);
+        buildList();
+    }
+    
+    class PluginTableFormat implements TableFormat<NameAndVersion> {
+
+        public int getColumnCount() {
+            return 3;
+        }
+
+        public String getColumnName(int col) {
+            if (col == 0)
+                return Globals.lang("Plugin name");
+            else if (col == 1)
+                return Globals.lang("Version");
+            else return Globals.lang("Status");
+        }
+
+        public Object getColumnValue(NameAndVersion nav, int col) {
+            if (col == 0)
+                return nav.name;
+            else if (col == 1) {
+                if (!nav.version.equals(PluginInstaller.VersionNumber.ZERO))
+                    return nav.version.toString();
+                else return Globals.lang("Unknown");
+            }
+            else {
+                int status = nav.getStatus();
+                if (status == 0)
+                    return Globals.lang("Not loaded");
+                else if (status == 1)
+                    return Globals.lang("Loaded");
+                else
+                    return Globals.lang("Error");
+            }
+        }
+        
+    }
+}
diff --git a/src/java/net/sf/jabref/plugin/PluginCore.java b/src/java/net/sf/jabref/plugin/PluginCore.java
index 7d1cca9..4f83237 100644
--- a/src/java/net/sf/jabref/plugin/PluginCore.java
+++ b/src/java/net/sf/jabref/plugin/PluginCore.java
@@ -1,205 +1,205 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.plugin;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.plugin.util.Util;
-
-import org.java.plugin.ObjectFactory;
-import org.java.plugin.PluginManager;
-import org.java.plugin.PluginManager.PluginLocation;
-import org.java.plugin.boot.DefaultPluginsCollector;
-import org.java.plugin.registry.PluginDescriptor;
-import org.java.plugin.standard.StandardPluginLocation;
-import org.java.plugin.util.ExtendedProperties;
-
-/**
- * Helper class for the plug-in system. Helps to retrieve the singleton instance
- * of the PluginManager, which then can be used to access all the plug-ins
- * registered.
- * 
- * For an example how this is done see
- * {@link net.sf.jabref.export.layout.LayoutEntry#getLayoutFormatterFromPlugins(String)}
- * 
- * The PluginCore relies on the generated class
- * {@link net.sf.jabref.plugin.core.JabRefPlugin} in the sub-package "core" for
- * finding the plugins and their extension.
- * 
- * @author Christopher Oezbek
- */
-public class PluginCore {
-
-    static PluginManager singleton;
-
-    static File userPluginDir = new File(System.getProperty("user.home")+"/.jabref/plugins");
-
-    static PluginLocation getLocationInsideJar(String context, String manifest) {
-        URL jar = PluginCore.class
-            .getResource(Util.joinPath(context, manifest));
-
-        if (jar == null) {
-            return null;
-        }
-        String protocol = jar.getProtocol().toLowerCase();
-        try {
-            if (protocol.startsWith("jar")) {
-                return new StandardPluginLocation(new URL(jar.toExternalForm()
-                    .replaceFirst("!(.*?)$", Util.joinPath("!", context))), jar);
-            } else if (protocol.startsWith("file")) {
-                File f = new File(jar.toURI());
-                return new StandardPluginLocation(f.getParentFile(), manifest);
-            }
-        } catch (URISyntaxException e) {
-            return null;
-        } catch (MalformedURLException e) {
-            return null;
-        }
-        return null;
-    }
-
-    static PluginManager initialize() {
-        // We do not want info messages from JPF.
-        Logger.getLogger("org.java.plugin").setLevel(Level.WARNING);
-
-        Logger log = Logger.getLogger(PluginCore.class.getName());
-
-        ObjectFactory objectFactory = ObjectFactory.newInstance();
-
-        PluginManager result = objectFactory.createManager();
-
-        
-        /*
-         * Now find plug-ins! Check directories and jar.
-         */
-        try {
-            DefaultPluginsCollector collector = new DefaultPluginsCollector();
-            ExtendedProperties ep = new ExtendedProperties();
-
-
-            List<File> directoriesToSearch = new LinkedList<File>();
-            directoriesToSearch.add(new File("./src/plugins"));
-            directoriesToSearch.add(new File("./plugins"));
-            directoriesToSearch.add(userPluginDir);
-
-            try {
-                File parent = new File(PluginCore.class.getProtectionDomain()
-                    .getCodeSource().getLocation().toURI()).getParentFile();
-            
-                if (!parent.getCanonicalFile().equals(
-                    new File(".").getCanonicalFile())) {
-                    directoriesToSearch.add(new File(parent, "/src/plugins"));
-                    directoriesToSearch.add(new File(parent, "/plugins"));
-                }
-            } catch (Exception e) {
-                // no problem, we just use paths relative to current dir.
-            }
-
-            StringBuilder sb = new StringBuilder();
-            for (File directory : directoriesToSearch) {
-                // We don't want warnings if the default plug-in paths don't
-                // exist, we do that below
-                if (directory.exists()) {
-                    if (sb.length() > 0)
-                        sb.append(',');
-                    sb.append(directory.getPath());
-                }
-            }
-
-            ep.setProperty("org.java.plugin.boot.pluginsRepositories", sb
-                .toString());
-            collector.configure(ep);
-
-            Collection<PluginLocation> plugins = collector
-                .collectPluginLocations();
-
-            /**
-             * I know the following is really, really ugly, but I have found no
-             * way to automatically discover multiple plugin.xmls in JARs
-             */
-            String[] jarLocationsToSearch = new String[] {
-                "/plugins/net.sf.jabref.core/",
-                "/plugins/net.sf.jabref.export.misq/"};
-                
-            // Collection locations
-            for (String jarLocation : jarLocationsToSearch) {
-                PluginLocation location = getLocationInsideJar(jarLocation,
-                    "plugin.xml");
-                if (location != null)
-                    plugins.add(location);
-            }
-
-            if (plugins.size() <= 0) {
-                log
-                    .warning(Globals
-                        .lang("No plugins were found in the following folders:") +
-                        "\n  " +
-                        Util.join(directoriesToSearch
-                            .toArray(new String[directoriesToSearch.size()]),
-                            "\n  ", 0, directoriesToSearch.size()) +
-                        "\n" +
-                        Globals.lang("and inside the JabRef-jar:") +
-                        "\n  " +
-                        Util.join(jarLocationsToSearch, "\n  ", 0,
-                            jarLocationsToSearch.length) +
-                        "\n" +
-                        Globals
-                            .lang("At least the plug-in 'net.sf.jabref.core' should be there."));
-            } else {
-                result.publishPlugins(plugins.toArray(new PluginLocation[] {}));
-
-                Collection<PluginDescriptor> descs = result.getRegistry()
-                    .getPluginDescriptors();
-
-                sb = new StringBuilder();
-                sb.append(Globals.lang("Found %0 plugin(s)", String
-                    .valueOf(descs.size())) +
-                    ":\n");
-
-                for (PluginDescriptor p : result.getRegistry()
-                    .getPluginDescriptors()) {
-                    sb.append("  - ").append(p.getId()).append(" (").append(
-                        p.getLocation()).append(")\n");
-                }
-                log.info(sb.toString());
-            }
-
-        } catch (Exception e) {
-            log
-                .severe(Globals
-                    .lang("Error in starting plug-in system. Starting without, but some functionality may be missing.") +
-                    "\n" + e.getLocalizedMessage());
-        }
-        return result;
-    }
-
-    public static PluginManager getManager() {
-        if (singleton == null) {
-            singleton = PluginCore.initialize();
-        }
-
-        return singleton;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.plugin;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.plugin.util.Util;
+
+import org.java.plugin.ObjectFactory;
+import org.java.plugin.PluginManager;
+import org.java.plugin.PluginManager.PluginLocation;
+import org.java.plugin.boot.DefaultPluginsCollector;
+import org.java.plugin.registry.PluginDescriptor;
+import org.java.plugin.standard.StandardPluginLocation;
+import org.java.plugin.util.ExtendedProperties;
+
+/**
+ * Helper class for the plug-in system. Helps to retrieve the singleton instance
+ * of the PluginManager, which then can be used to access all the plug-ins
+ * registered.
+ * 
+ * For an example how this is done see
+ * {@link net.sf.jabref.export.layout.LayoutEntry#getLayoutFormatterFromPlugins(String)}
+ * 
+ * The PluginCore relies on the generated class
+ * {@link net.sf.jabref.plugin.core.JabRefPlugin} in the sub-package "core" for
+ * finding the plugins and their extension.
+ * 
+ * @author Christopher Oezbek
+ */
+public class PluginCore {
+
+    static PluginManager singleton;
+
+    static File userPluginDir = new File(System.getProperty("user.home")+"/.jabref/plugins");
+
+    static PluginLocation getLocationInsideJar(String context, String manifest) {
+        URL jar = PluginCore.class
+            .getResource(Util.joinPath(context, manifest));
+
+        if (jar == null) {
+            return null;
+        }
+        String protocol = jar.getProtocol().toLowerCase();
+        try {
+            if (protocol.startsWith("jar")) {
+                return new StandardPluginLocation(new URL(jar.toExternalForm()
+                    .replaceFirst("!(.*?)$", Util.joinPath("!", context))), jar);
+            } else if (protocol.startsWith("file")) {
+                File f = new File(jar.toURI());
+                return new StandardPluginLocation(f.getParentFile(), manifest);
+            }
+        } catch (URISyntaxException e) {
+            return null;
+        } catch (MalformedURLException e) {
+            return null;
+        }
+        return null;
+    }
+
+    static PluginManager initialize() {
+        // We do not want info messages from JPF.
+        Logger.getLogger("org.java.plugin").setLevel(Level.WARNING);
+
+        Logger log = Logger.getLogger(PluginCore.class.getName());
+
+        ObjectFactory objectFactory = ObjectFactory.newInstance();
+
+        PluginManager result = objectFactory.createManager();
+
+        
+        /*
+         * Now find plug-ins! Check directories and jar.
+         */
+        try {
+            DefaultPluginsCollector collector = new DefaultPluginsCollector();
+            ExtendedProperties ep = new ExtendedProperties();
+
+
+            List<File> directoriesToSearch = new LinkedList<File>();
+            directoriesToSearch.add(new File("./src/plugins"));
+            directoriesToSearch.add(new File("./plugins"));
+            directoriesToSearch.add(userPluginDir);
+
+            try {
+                File parent = new File(PluginCore.class.getProtectionDomain()
+                    .getCodeSource().getLocation().toURI()).getParentFile();
+            
+                if (!parent.getCanonicalFile().equals(
+                    new File(".").getCanonicalFile())) {
+                    directoriesToSearch.add(new File(parent, "/src/plugins"));
+                    directoriesToSearch.add(new File(parent, "/plugins"));
+                }
+            } catch (Exception e) {
+                // no problem, we just use paths relative to current dir.
+            }
+
+            StringBuilder sb = new StringBuilder();
+            for (File directory : directoriesToSearch) {
+                // We don't want warnings if the default plug-in paths don't
+                // exist, we do that below
+                if (directory.exists()) {
+                    if (sb.length() > 0)
+                        sb.append(',');
+                    sb.append(directory.getPath());
+                }
+            }
+
+            ep.setProperty("org.java.plugin.boot.pluginsRepositories", sb
+                .toString());
+            collector.configure(ep);
+
+            Collection<PluginLocation> plugins = collector
+                .collectPluginLocations();
+
+            /**
+             * I know the following is really, really ugly, but I have found no
+             * way to automatically discover multiple plugin.xmls in JARs
+             */
+            String[] jarLocationsToSearch = new String[] {
+                "/plugins/net.sf.jabref.core/",
+                "/plugins/net.sf.jabref.export.misq/"};
+                
+            // Collection locations
+            for (String jarLocation : jarLocationsToSearch) {
+                PluginLocation location = getLocationInsideJar(jarLocation,
+                    "plugin.xml");
+                if (location != null)
+                    plugins.add(location);
+            }
+
+            if (plugins.size() <= 0) {
+                log
+                    .warning(Globals
+                        .lang("No plugins were found in the following folders:") +
+                        "\n  " +
+                        Util.join(directoriesToSearch
+                            .toArray(new String[directoriesToSearch.size()]),
+                            "\n  ", 0, directoriesToSearch.size()) +
+                        "\n" +
+                        Globals.lang("and inside the JabRef-jar:") +
+                        "\n  " +
+                        Util.join(jarLocationsToSearch, "\n  ", 0,
+                            jarLocationsToSearch.length) +
+                        "\n" +
+                        Globals
+                            .lang("At least the plug-in 'net.sf.jabref.core' should be there."));
+            } else {
+                result.publishPlugins(plugins.toArray(new PluginLocation[] {}));
+
+                Collection<PluginDescriptor> descs = result.getRegistry()
+                    .getPluginDescriptors();
+
+                sb = new StringBuilder();
+                sb.append(Globals.lang("Found %0 plugin(s)", String
+                    .valueOf(descs.size())) +
+                    ":\n");
+
+                for (PluginDescriptor p : result.getRegistry()
+                    .getPluginDescriptors()) {
+                    sb.append("  - ").append(p.getId()).append(" (").append(
+                        p.getLocation()).append(")\n");
+                }
+                log.info(sb.toString());
+            }
+
+        } catch (Exception e) {
+            log
+                .severe(Globals
+                    .lang("Error in starting plug-in system. Starting without, but some functionality may be missing.") +
+                    "\n" + e.getLocalizedMessage());
+        }
+        return result;
+    }
+
+    public static PluginManager getManager() {
+        if (singleton == null) {
+            singleton = PluginCore.initialize();
+        }
+
+        return singleton;
+    }
+}
diff --git a/src/java/net/sf/jabref/plugin/PluginInstaller.java b/src/java/net/sf/jabref/plugin/PluginInstaller.java
index 0cab2a0..fffc671 100644
--- a/src/java/net/sf/jabref/plugin/PluginInstaller.java
+++ b/src/java/net/sf/jabref/plugin/PluginInstaller.java
@@ -1,596 +1,596 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.plugin;
-
-import net.sf.jabref.plugin.*;
-import ca.odell.glazedlists.BasicEventList;
-import ca.odell.glazedlists.EventList;
-import net.sf.jabref.net.URLDownload;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.Globals;
-
-import javax.swing.*;
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.io.*;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import java.util.*;
-import java.util.zip.ZipEntry;
-import java.util.jar.JarFile;
-
-import org.java.plugin.registry.PluginDescriptor;
-import org.java.plugin.registry.PluginRegistry;
-import org.java.plugin.registry.ManifestProcessingException;
-import org.java.plugin.registry.ManifestInfo;
-import org.java.plugin.registry.xml.PluginRegistryImpl;
-
-/**
- *
- */
-public class PluginInstaller {
-
-    public static final String PLUGIN_XML_FILE = "plugin.xml";
-    public static final int
-        SUCCESS = 0,
-        UNABLE_TO_CREATE_DIR = 1,
-        UNABLE_TO_COPY_FILE = 2;
-
-    public static final int
-        NO_VERSIONS_INSTALLED = 0,
-        NEWER_VERSION_INSTALLED = 1,
-        SAME_VERSION_INSTALLED = 2,
-        OLDER_VERSION_INSTALLED = 3,
-        UNCONVENTIONAL_FILENAME = 4,
-        UNKNOWN_VERSION = 5;
-
-    public static final int
-        NOT_LOADED = 0,
-        LOADED = 1,
-        BAD = 2;
-
-
-    public static void installPlugin(JabRefFrame frame, File file, String targetFileName) {
-        String fileName = targetFileName != null ? targetFileName : file.getName();
-        if (!PluginCore.userPluginDir.exists()) {
-            boolean created = PluginCore.userPluginDir.mkdirs();
-            if (!created) {
-                JOptionPane.showMessageDialog(frame, Globals.lang("Unable to create plugin directory")
-                    +" ("+PluginCore.userPluginDir.getPath()+").", Globals.lang("Plugin installer"),
-                    JOptionPane.ERROR_MESSAGE);
-                return;
-            }
-        }
-        int status = checkInstalledVersion(file);
-        int result;
-        switch (status) {
-            case NO_VERSIONS_INSTALLED:
-                result = copyPlugin(frame, file, fileName);
-                if (result == SUCCESS)
-                    JOptionPane.showMessageDialog(frame, Globals.lang("Plugin installed successfully. You must restart JabRef to load the new plugin."),
-                            Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
-                else {
-                    String reason;
-                    if (result == UNABLE_TO_COPY_FILE)
-                        reason = Globals.lang("Unable to copy file");
-                    else
-                        reason = Globals.lang("Unable to create user plugin directory")
-                            +" ("+PluginCore.userPluginDir.getPath()+").";
-                    JOptionPane.showMessageDialog(frame, Globals.lang("Plugin installation failed.")+" "+reason,
-                            Globals.lang("Plugin installer"), JOptionPane.ERROR_MESSAGE);
-                }
-                break;
-            case SAME_VERSION_INSTALLED:
-                JOptionPane.showMessageDialog(frame, Globals.lang("The same version of this plugin is already installed."),
-                        Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
-                break;
-            case NEWER_VERSION_INSTALLED:
-                JOptionPane.showMessageDialog(frame, Globals.lang("A newer version of this plugin is already installed."),
-                        Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
-                break;
-            case OLDER_VERSION_INSTALLED:
-                result = copyPlugin(frame, file, fileName);
-                if (result == SUCCESS) {
-                    int answer = JOptionPane.showConfirmDialog(frame,
-                            Globals.lang("One or more older versions of this plugin is installed. Delete old versions?"),
-                            Globals.lang("Plugin installer"), JOptionPane.YES_NO_OPTION);
-                    if (answer == JOptionPane.YES_OPTION) {
-                        boolean success = deleteOlderVersions(file);
-                        if (success) {
-                            JOptionPane.showMessageDialog(frame,
-                                    Globals.lang("Old versions deleted successfully."),
-                                    Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
-                        } else {
-                            JOptionPane.showMessageDialog(frame,
-                                    Globals.lang("Old plugin versions will be deleted next time JabRef starts up."),
-                                    Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
-                        }
-                    }
-                }
-                else {
-                    String reason;
-                    if (result == UNABLE_TO_COPY_FILE)
-                        reason = Globals.lang("Unable to copy file");
-                    else
-                        reason = Globals.lang("Unable to create user plugin directory")
-                            +" ("+PluginCore.userPluginDir.getPath()+").";
-                    JOptionPane.showMessageDialog(frame, Globals.lang("Plugin installation failed.")+" "+reason,
-                            Globals.lang("Plugin installer"), JOptionPane.ERROR_MESSAGE);
-                }
-                break;
-            //case UNKNOWN_VERSION:
-            //    JOptionPane.showMessageDialog(frame, Globals.lang("Could not determine version of "));
-            //    break;
-            case UNKNOWN_VERSION:
-                JLabel lab = new JLabel("<html>"+Globals.lang("Unable to determine plugin name and "
-                        +"version. This may not be a valid JabRef plugin.")
-                        +"<br>"+Globals.lang("Install anyway?")+"</html>");
-                int answer = JOptionPane.showConfirmDialog(frame, lab,
-                        Globals.lang("Plugin installer"), JOptionPane.YES_NO_OPTION);
-                if (answer == JOptionPane.YES_OPTION) {
-                    result = copyPlugin(frame, file, fileName);
-                    if (result == SUCCESS)
-                        JOptionPane.showMessageDialog(frame, Globals.lang("Plugin installed successfully. You must restart JabRef to load the new plugin."),
-                                Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
-                    else {
-                        String reason;
-                        if (result == UNABLE_TO_COPY_FILE)
-                            reason = Globals.lang("Unable to copy file");
-                        else
-                            reason = Globals.lang("Unable to create user plugin directory")
-                                +" ("+PluginCore.userPluginDir.getPath()+").";
-                        JOptionPane.showMessageDialog(frame, Globals.lang("Plugin installation failed.")+" "+reason,
-                                Globals.lang("Plugin installer"), JOptionPane.ERROR_MESSAGE);
-                    }
-
-                }
-                break;
-        }
-    }
-
-    /**
-     * Check the status of the named plugin - whether an older, the same or a
-     * newer version is already installed.
-     * @param f The plugin file.
-     * @return an integer indicating the status
-     */
-    public static int checkInstalledVersion(File f) {
-        String[] nav = getNameAndVersion(f);
-        if (nav == null)
-            return UNKNOWN_VERSION;
-
-        VersionNumber vn = new VersionNumber(nav[1]);
-        Map<VersionNumber, File> versions = getInstalledVersions(nav[0]);
-
-        if (versions.size() == 0) {
-            return NO_VERSIONS_INSTALLED;
-        }
-        VersionNumber thenum = versions.keySet().iterator().next();
-        boolean hasSame = vn.compareTo(thenum) == 0;
-        boolean hasNewer = vn.compareTo(thenum) > 0;
-
-
-        if (hasNewer)
-            return NEWER_VERSION_INSTALLED;
-        if (hasSame)
-            return SAME_VERSION_INSTALLED;
-
-        return OLDER_VERSION_INSTALLED;
-    }
-
-    /**
-     * Delete the given plugin.
-     * @param plugin Name and version information for the plugin to delete.
-     * @return true if deletion is successful, false otherwise.
-     */
-    public static boolean deletePlugin(NameAndVersion plugin) {
-        /*String file = buildFileName(plugin.name,
-                plugin.version.equals(VersionNumber.ZERO) ? null : plugin.version.toString());*/
-        return deletePluginFile(plugin.file);
-    }
-    
-    public static boolean deleteOlderVersions(File f) {
-        String[] nav = getNameAndVersion(f);
-        if (nav == null)
-            return false;
-        boolean success = true;
-        VersionNumber num = new VersionNumber(nav[1]);
-        Map<VersionNumber, File> versions = getInstalledVersions(nav[0]);
-        for (Iterator<VersionNumber> iterator = versions.keySet().iterator(); iterator.hasNext();) {
-            VersionNumber versionNumber = iterator.next();
-            if (num.compareTo(versionNumber) < 0) {
-                String vnString = versionNumber.equals(VersionNumber.ZERO) ? null : versionNumber.toString();
-                File file = versions.get(versionNumber);//buildFileName(nav[0], vnString);
-                success = deletePluginFile(file);//file).delete() && success;
-            }
-        }
-        return success;
-    }
-
-    /**
-     * This method deletes a plugin file. If deletion fails - typically happens
-     * on Windows due to file locking - the file is scheduled for deletion on
-     * the next startup.
-     *
-     * @param f The file to delete.
-     * @return true if deletion was successful, false if scheduled for later.
-     */
-    public static boolean deletePluginFile(File f) {
-        boolean success = f.delete();
-        if (success)
-            return true;
-        else {
-            schedulePluginForDeletion(f.getPath());
-            return false;
-        }
-    }
-
-    /**
-     * Copy a plugin to the user plugin directory. Does not check whether the plugin
-     * already exists.
-     * @param source The local or remote location to copy the plugin from.
-     * @return true if the install was successful
-     */
-    public static int copyPlugin(JFrame frame, URL source, String destFileName) {
-        if (destFileName == null)
-            destFileName = source.getFile();
-        if (!PluginCore.userPluginDir.exists()) {
-            boolean created = PluginCore.userPluginDir.mkdirs();
-            if (!created) {
-                return UNABLE_TO_CREATE_DIR;
-            }
-        }
-        File destFile = new File(PluginCore.userPluginDir, destFileName);
-        URLDownload ud = new URLDownload(frame, source, destFile);
-
-        try {
-            ud.download();
-            return SUCCESS;
-        } catch (IOException e) {
-            e.printStackTrace();
-            return UNABLE_TO_COPY_FILE;
-        }
-    }
-
-    public static int copyPlugin(JFrame frame, File source, String destFileName) {
-        if (destFileName == null)
-            destFileName = source.getName();
-        if (!PluginCore.userPluginDir.exists()) {
-            boolean created = PluginCore.userPluginDir.mkdirs();
-            if (!created) {
-                return UNABLE_TO_CREATE_DIR;
-            }
-        }
-        File destFile = new File(PluginCore.userPluginDir, destFileName);
-        BufferedInputStream in = null;
-        BufferedOutputStream out = null;
-        try {
-            in = new BufferedInputStream(new FileInputStream(source));
-            out = new BufferedOutputStream(new FileOutputStream(destFile));
-            byte[] buf = new byte[1024];
-            int count;
-            while ((count = in.read(buf, 0, buf.length)) > 0) {
-                out.write(buf, 0, count);
-            }
-        } catch (IOException ex) {
-            ex.printStackTrace();
-            return UNABLE_TO_COPY_FILE;
-        } finally {
-            if (in != null) try {
-                in.close();
-            } catch (IOException ex) {
-                return UNABLE_TO_COPY_FILE;
-            }
-            if (out != null) try {
-                out.close();
-            } catch (IOException ex) {
-                return UNABLE_TO_COPY_FILE;
-            }
-        }
-        return SUCCESS;
-    }
-
-
-
-    /**
-     * Based on a plugin name, find all versions that are already present
-     * in the user plugin directory.
-     * @param pluginName The name of the plugin.
-     * @return A map of versions already present, linking to the file containing each.
-     */
-    public static Map<VersionNumber, File> getInstalledVersions(final String pluginName) {
-
-        String[] files = PluginCore.userPluginDir.list(new FilenameFilter() {
-            public boolean accept(File file, String s) {
-                return s.endsWith(".jar");
-            }
-        });
-        Map<VersionNumber, File> versions = new TreeMap<VersionNumber, File>();
-        for (int i = 0; i < files.length; i++) {
-            String file = files[i];
-            File f = new File(PluginCore.userPluginDir,file);
-            String[] nav = getNameAndVersion(f);
-            if (nav != null) {
-                if (nav[0].equals(pluginName)) {
-                    VersionNumber vn = new VersionNumber(nav[1]);
-                    versions.put(vn, f);
-                }
-            }
-                
-        }
-
-        return versions;
-    }
-
-    /**
-     * Add the given filename to the list of plugins to be deleted on the next
-     * JabRef startup.
-     *
-     * @param filename The path to the file to delete.
-     */
-    public static void schedulePluginForDeletion(String filename) {
-        String[] oldValues = Globals.prefs.getStringArray("deletePlugins");
-        String[] newValues = oldValues == null ? new String[1] : new String[oldValues.length+1];
-        if (oldValues != null) for (int i=0; i<oldValues.length; i++) {
-            newValues[i] = oldValues[i];
-        }
-        newValues[newValues.length-1] = filename;
-        Globals.prefs.putStringArray("deletePlugins", newValues);
-    }
-
-    /**
-     * Delete the given files. Refuses to delete files outside the user plugin directory.
-     * This method throws no errors is the files don't exist or deletion failed.
-     * @param filenames An array of names of the files to be deleted.
-     */
-    public static void deletePluginsOnStartup(String[] filenames) {
-        for (int i = 0; i < filenames.length; i++) {
-            String s = filenames[i];
-            File f = new File(s);
-            if (f.getParentFile().equals(PluginCore.userPluginDir)) {
-            //if (s.startsWith(PluginCore.userPluginDir.getPath())) {
-                boolean success = f.delete();
-            }
-            else
-                System.out.println("File outside of user plugin dir: "+s);
-        }
-    }
-
-
-    static Pattern pluginFilePattern = Pattern.compile("(.*)-([\\d\\.]+).jar");
-    static Pattern pluginFilePatternNoVersion = Pattern.compile("(.*).jar");
-
-    /**
-     * Look inside a jar file, find the plugin.xml file, and use it to determine the name
-     * and version of the plugin.
-     *
-     * @param f The file to investigate.
-     * @return A string array containing the plugin name in the first element and
-     *   the version number in the second, or null if the filename couldn't be
-     *   interpreted.
-     *
-     */
-    public static String[] getNameAndVersion(File f) {
-
-        try {
-            File temp = unpackPluginXML(f);
-            if (temp == null)
-                return null; // Couldn't find the plugin.xml file
-            ManifestInfo mi = PluginCore.getManager().getRegistry().
-                    readManifestInfo(temp.toURI().toURL());
-            temp.delete();
-            return new String[] {mi.getId(), mi.getVersion().toString()};
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-            return null;
-        } catch (ManifestProcessingException e) {
-            return null; // Couldn't make sense of the plugin.xml
-        }
-
-    }
-
-    /**
-     * Take the name of a jar file and extract the plugin.xml file, if possible,
-     * to a temporary file.
-     * @param f The jar file to extract from.
-     * @return a temporary file to which the plugin.xml file has been copied.
-     */
-    public static File unpackPluginXML(File f) {
-        InputStream in = null;
-        OutputStream out = null;
-
-        try {
-            JarFile jar = new JarFile(f);
-            ZipEntry entry = jar.getEntry(PLUGIN_XML_FILE);
-            if (entry == null) {
-                return null;
-            }
-            File dest = File.createTempFile("jabref_plugin", ".xml");
-            dest.deleteOnExit();
-            
-            in = new BufferedInputStream(jar.getInputStream(entry));
-            out = new BufferedOutputStream(new FileOutputStream(dest));
-            byte[] buffer = new byte[2048];
-            for (;;)  {
-                int nBytes = in.read(buffer);
-                if (nBytes <= 0) break;
-                out.write(buffer, 0, nBytes);
-            }
-            out.flush();
-            return dest;
-        } catch (IOException ex) {
-            ex.printStackTrace();
-            return null;
-        } finally {
-                try {
-                    if (out != null) out.close();
-                    if (in != null) in.close();
-                } catch (IOException ex) {
-                    ex.printStackTrace();
-                    return null;
-                }
-        }
-    }
-
-    
-    /**
-     * Build a list of installed plugins.
-     * @return a list of plugin names and version numbers.
-     */
-    public static EventList<NameAndVersion> findInstalledPlugins() {
-	EventList<NameAndVersion> plugins = new BasicEventList<NameAndVersion>();
-	if (!PluginCore.userPluginDir.exists())
-		return plugins;
-        String[] files = PluginCore.userPluginDir.list(new FilenameFilter() {
-            public boolean accept(File dir, String name) {
-                return name.endsWith(".jar");
-            }
-        });
-        
-        HashMap<String,PluginDescriptor> urls = new HashMap<String,PluginDescriptor>();
-        Collection<PluginDescriptor> descriptors =
-                PluginCore.getManager().getRegistry().getPluginDescriptors();
-        for (PluginDescriptor desc : descriptors) {
-            if ((desc.getPluginClassName()==null) || !desc.getPluginClassName()
-                    .equals("net.sf.jabref.plugin.core.JabRefPlugin")) {
-                urls.put(desc.getId(), desc);
-            }
-        }
-        
-        for (int i=0; i<files.length; i++) {
-            File file = new File(PluginCore.userPluginDir, files[i]);
-            String[] nav = getNameAndVersion(file);
-            if (nav != null) {
-                VersionNumber vn = nav[1] != null ? new VersionNumber(nav[1]) : null;
-                NameAndVersion nameAndVersion = new NameAndVersion(nav[0], vn, true,
-                        file);
-                for (Iterator<String> it = urls.keySet().iterator(); it.hasNext();) {
-                    String loc = it.next();
-                    if (loc.indexOf(nav[0]) >= 0) {
-                        PluginDescriptor desc = urls.get(loc);
-                        //System.out.println("Accounted for: "+desc.getId()+" "+desc.getVersion().toString());
-                        if (!PluginCore.getManager().isPluginEnabled(urls.get(loc)))
-                            nameAndVersion.setStatus(BAD);
-                        else
-                            nameAndVersion.setStatus(LOADED);
-                        it.remove();
-                    }
-                }
-                plugins.add(nameAndVersion);
-            }
-        }
-
-        for (String url : urls.keySet()) {
-            PluginDescriptor desc = urls.get(url);
-            File location =  new File(desc.getLocation().getFile());
-            if (location.getPath().indexOf(PluginCore.userPluginDir.getPath()) >= 0)
-                continue; // This must be a loaded user dir plugin that's been deleted.
-            //System.out.println("File: "+desc.getLocation().getFile());
-            NameAndVersion nameAndVersion = new NameAndVersion(desc.getId(),
-                    new VersionNumber(desc.getVersion().toString()), false,
-                   location);
-            if (!PluginCore.getManager().isPluginEnabled(urls.get(url)))
-                nameAndVersion.setStatus(BAD);
-            else
-                nameAndVersion.setStatus(LOADED);
-            plugins.add(nameAndVersion);
-        }
-        return plugins;
-    }
-    
-  
-    public static class NameAndVersion implements Comparable {
-        String name;
-        VersionNumber version;
-        int status = 0;
-        boolean inUserDirectory;
-        File file;
-        
-        public NameAndVersion(String name, VersionNumber version, boolean inUserDirectory,
-                              File file) {
-            this.name = name;
-            this.version = version;
-            this.inUserDirectory = inUserDirectory;
-            this.file = file;
-        }
-        
-        public int compareTo(Object o) {
-            NameAndVersion oth = (NameAndVersion)o;
-            if (!name.equals(oth.name))
-                return name.compareTo(oth.name);
-            else {
-                if (version == null)
-                    return 1;
-                else if (oth.version == null)
-                    return -1;
-                else
-                    return version.compareTo(oth.version);
-            }
-        }
-        
-        public int getStatus() {
-            return status;
-        }
-        
-        public void setStatus(int status) {
-            this.status = status;
-        }
-    }
-            
-    static class VersionNumber implements Comparable {
-        public static final VersionNumber ZERO = new VersionNumber("0");
-        List<Integer> digits;
-        public VersionNumber(String number) {
-            digits = new ArrayList<Integer>();
-            String[] elms = number.split("\\.");
-            for (int i = 0; i < elms.length; i++) {
-                try {
-                    int num = Integer.parseInt(elms[i]);
-                    digits.add(num);
-                } catch (NumberFormatException ex) {
-                    // Do nothing
-                }
-
-            }
-        }
-
-        public int compareTo(Object o) {
-            VersionNumber oth = (VersionNumber)o;
-           
-            for (int i=0; i<Math.min(digits.size(), oth.digits.size()); i++) {
-                if (digits.get(i) != oth.digits.get(i))
-                    return oth.digits.get(i)-digits.get(i);
-            }
-            // All digits equal so far, and only one of the numbers has more digits.
-            // The one with digits remaining is the newest one:
-            return oth.digits.size()-digits.size();
-        }
-        
-        public String toString() {
-            StringBuilder sb = new StringBuilder();
-            for (Iterator<Integer> integerIterator = digits.iterator(); integerIterator.hasNext();) {
-                sb.append(integerIterator.next());
-                if (integerIterator.hasNext())
-                    sb.append(".");
-            }
-            return sb.toString();
-        }
-        
-        public boolean equals(Object o) {
-            return compareTo(o) == 0;
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.plugin;
+
+import net.sf.jabref.plugin.*;
+import ca.odell.glazedlists.BasicEventList;
+import ca.odell.glazedlists.EventList;
+import net.sf.jabref.net.URLDownload;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.Globals;
+
+import javax.swing.*;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.io.*;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+import java.util.*;
+import java.util.zip.ZipEntry;
+import java.util.jar.JarFile;
+
+import org.java.plugin.registry.PluginDescriptor;
+import org.java.plugin.registry.PluginRegistry;
+import org.java.plugin.registry.ManifestProcessingException;
+import org.java.plugin.registry.ManifestInfo;
+import org.java.plugin.registry.xml.PluginRegistryImpl;
+
+/**
+ *
+ */
+public class PluginInstaller {
+
+    public static final String PLUGIN_XML_FILE = "plugin.xml";
+    public static final int
+        SUCCESS = 0,
+        UNABLE_TO_CREATE_DIR = 1,
+        UNABLE_TO_COPY_FILE = 2;
+
+    public static final int
+        NO_VERSIONS_INSTALLED = 0,
+        NEWER_VERSION_INSTALLED = 1,
+        SAME_VERSION_INSTALLED = 2,
+        OLDER_VERSION_INSTALLED = 3,
+        UNCONVENTIONAL_FILENAME = 4,
+        UNKNOWN_VERSION = 5;
+
+    public static final int
+        NOT_LOADED = 0,
+        LOADED = 1,
+        BAD = 2;
+
+
+    public static void installPlugin(JabRefFrame frame, File file, String targetFileName) {
+        String fileName = targetFileName != null ? targetFileName : file.getName();
+        if (!PluginCore.userPluginDir.exists()) {
+            boolean created = PluginCore.userPluginDir.mkdirs();
+            if (!created) {
+                JOptionPane.showMessageDialog(frame, Globals.lang("Unable to create plugin directory")
+                    +" ("+PluginCore.userPluginDir.getPath()+").", Globals.lang("Plugin installer"),
+                    JOptionPane.ERROR_MESSAGE);
+                return;
+            }
+        }
+        int status = checkInstalledVersion(file);
+        int result;
+        switch (status) {
+            case NO_VERSIONS_INSTALLED:
+                result = copyPlugin(frame, file, fileName);
+                if (result == SUCCESS)
+                    JOptionPane.showMessageDialog(frame, Globals.lang("Plugin installed successfully. You must restart JabRef to load the new plugin."),
+                            Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
+                else {
+                    String reason;
+                    if (result == UNABLE_TO_COPY_FILE)
+                        reason = Globals.lang("Unable to copy file");
+                    else
+                        reason = Globals.lang("Unable to create user plugin directory")
+                            +" ("+PluginCore.userPluginDir.getPath()+").";
+                    JOptionPane.showMessageDialog(frame, Globals.lang("Plugin installation failed.")+" "+reason,
+                            Globals.lang("Plugin installer"), JOptionPane.ERROR_MESSAGE);
+                }
+                break;
+            case SAME_VERSION_INSTALLED:
+                JOptionPane.showMessageDialog(frame, Globals.lang("The same version of this plugin is already installed."),
+                        Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
+                break;
+            case NEWER_VERSION_INSTALLED:
+                JOptionPane.showMessageDialog(frame, Globals.lang("A newer version of this plugin is already installed."),
+                        Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
+                break;
+            case OLDER_VERSION_INSTALLED:
+                result = copyPlugin(frame, file, fileName);
+                if (result == SUCCESS) {
+                    int answer = JOptionPane.showConfirmDialog(frame,
+                            Globals.lang("One or more older versions of this plugin is installed. Delete old versions?"),
+                            Globals.lang("Plugin installer"), JOptionPane.YES_NO_OPTION);
+                    if (answer == JOptionPane.YES_OPTION) {
+                        boolean success = deleteOlderVersions(file);
+                        if (success) {
+                            JOptionPane.showMessageDialog(frame,
+                                    Globals.lang("Old versions deleted successfully."),
+                                    Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
+                        } else {
+                            JOptionPane.showMessageDialog(frame,
+                                    Globals.lang("Old plugin versions will be deleted next time JabRef starts up."),
+                                    Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
+                        }
+                    }
+                }
+                else {
+                    String reason;
+                    if (result == UNABLE_TO_COPY_FILE)
+                        reason = Globals.lang("Unable to copy file");
+                    else
+                        reason = Globals.lang("Unable to create user plugin directory")
+                            +" ("+PluginCore.userPluginDir.getPath()+").";
+                    JOptionPane.showMessageDialog(frame, Globals.lang("Plugin installation failed.")+" "+reason,
+                            Globals.lang("Plugin installer"), JOptionPane.ERROR_MESSAGE);
+                }
+                break;
+            //case UNKNOWN_VERSION:
+            //    JOptionPane.showMessageDialog(frame, Globals.lang("Could not determine version of "));
+            //    break;
+            case UNKNOWN_VERSION:
+                JLabel lab = new JLabel("<html>"+Globals.lang("Unable to determine plugin name and "
+                        +"version. This may not be a valid JabRef plugin.")
+                        +"<br>"+Globals.lang("Install anyway?")+"</html>");
+                int answer = JOptionPane.showConfirmDialog(frame, lab,
+                        Globals.lang("Plugin installer"), JOptionPane.YES_NO_OPTION);
+                if (answer == JOptionPane.YES_OPTION) {
+                    result = copyPlugin(frame, file, fileName);
+                    if (result == SUCCESS)
+                        JOptionPane.showMessageDialog(frame, Globals.lang("Plugin installed successfully. You must restart JabRef to load the new plugin."),
+                                Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
+                    else {
+                        String reason;
+                        if (result == UNABLE_TO_COPY_FILE)
+                            reason = Globals.lang("Unable to copy file");
+                        else
+                            reason = Globals.lang("Unable to create user plugin directory")
+                                +" ("+PluginCore.userPluginDir.getPath()+").";
+                        JOptionPane.showMessageDialog(frame, Globals.lang("Plugin installation failed.")+" "+reason,
+                                Globals.lang("Plugin installer"), JOptionPane.ERROR_MESSAGE);
+                    }
+
+                }
+                break;
+        }
+    }
+
+    /**
+     * Check the status of the named plugin - whether an older, the same or a
+     * newer version is already installed.
+     * @param f The plugin file.
+     * @return an integer indicating the status
+     */
+    public static int checkInstalledVersion(File f) {
+        String[] nav = getNameAndVersion(f);
+        if (nav == null)
+            return UNKNOWN_VERSION;
+
+        VersionNumber vn = new VersionNumber(nav[1]);
+        Map<VersionNumber, File> versions = getInstalledVersions(nav[0]);
+
+        if (versions.size() == 0) {
+            return NO_VERSIONS_INSTALLED;
+        }
+        VersionNumber thenum = versions.keySet().iterator().next();
+        boolean hasSame = vn.compareTo(thenum) == 0;
+        boolean hasNewer = vn.compareTo(thenum) > 0;
+
+
+        if (hasNewer)
+            return NEWER_VERSION_INSTALLED;
+        if (hasSame)
+            return SAME_VERSION_INSTALLED;
+
+        return OLDER_VERSION_INSTALLED;
+    }
+
+    /**
+     * Delete the given plugin.
+     * @param plugin Name and version information for the plugin to delete.
+     * @return true if deletion is successful, false otherwise.
+     */
+    public static boolean deletePlugin(NameAndVersion plugin) {
+        /*String file = buildFileName(plugin.name,
+                plugin.version.equals(VersionNumber.ZERO) ? null : plugin.version.toString());*/
+        return deletePluginFile(plugin.file);
+    }
+    
+    public static boolean deleteOlderVersions(File f) {
+        String[] nav = getNameAndVersion(f);
+        if (nav == null)
+            return false;
+        boolean success = true;
+        VersionNumber num = new VersionNumber(nav[1]);
+        Map<VersionNumber, File> versions = getInstalledVersions(nav[0]);
+        for (Iterator<VersionNumber> iterator = versions.keySet().iterator(); iterator.hasNext();) {
+            VersionNumber versionNumber = iterator.next();
+            if (num.compareTo(versionNumber) < 0) {
+                String vnString = versionNumber.equals(VersionNumber.ZERO) ? null : versionNumber.toString();
+                File file = versions.get(versionNumber);//buildFileName(nav[0], vnString);
+                success = deletePluginFile(file);//file).delete() && success;
+            }
+        }
+        return success;
+    }
+
+    /**
+     * This method deletes a plugin file. If deletion fails - typically happens
+     * on Windows due to file locking - the file is scheduled for deletion on
+     * the next startup.
+     *
+     * @param f The file to delete.
+     * @return true if deletion was successful, false if scheduled for later.
+     */
+    public static boolean deletePluginFile(File f) {
+        boolean success = f.delete();
+        if (success)
+            return true;
+        else {
+            schedulePluginForDeletion(f.getPath());
+            return false;
+        }
+    }
+
+    /**
+     * Copy a plugin to the user plugin directory. Does not check whether the plugin
+     * already exists.
+     * @param source The local or remote location to copy the plugin from.
+     * @return true if the install was successful
+     */
+    public static int copyPlugin(JFrame frame, URL source, String destFileName) {
+        if (destFileName == null)
+            destFileName = source.getFile();
+        if (!PluginCore.userPluginDir.exists()) {
+            boolean created = PluginCore.userPluginDir.mkdirs();
+            if (!created) {
+                return UNABLE_TO_CREATE_DIR;
+            }
+        }
+        File destFile = new File(PluginCore.userPluginDir, destFileName);
+        URLDownload ud = new URLDownload(frame, source, destFile);
+
+        try {
+            ud.download();
+            return SUCCESS;
+        } catch (IOException e) {
+            e.printStackTrace();
+            return UNABLE_TO_COPY_FILE;
+        }
+    }
+
+    public static int copyPlugin(JFrame frame, File source, String destFileName) {
+        if (destFileName == null)
+            destFileName = source.getName();
+        if (!PluginCore.userPluginDir.exists()) {
+            boolean created = PluginCore.userPluginDir.mkdirs();
+            if (!created) {
+                return UNABLE_TO_CREATE_DIR;
+            }
+        }
+        File destFile = new File(PluginCore.userPluginDir, destFileName);
+        BufferedInputStream in = null;
+        BufferedOutputStream out = null;
+        try {
+            in = new BufferedInputStream(new FileInputStream(source));
+            out = new BufferedOutputStream(new FileOutputStream(destFile));
+            byte[] buf = new byte[1024];
+            int count;
+            while ((count = in.read(buf, 0, buf.length)) > 0) {
+                out.write(buf, 0, count);
+            }
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            return UNABLE_TO_COPY_FILE;
+        } finally {
+            if (in != null) try {
+                in.close();
+            } catch (IOException ex) {
+                return UNABLE_TO_COPY_FILE;
+            }
+            if (out != null) try {
+                out.close();
+            } catch (IOException ex) {
+                return UNABLE_TO_COPY_FILE;
+            }
+        }
+        return SUCCESS;
+    }
+
+
+
+    /**
+     * Based on a plugin name, find all versions that are already present
+     * in the user plugin directory.
+     * @param pluginName The name of the plugin.
+     * @return A map of versions already present, linking to the file containing each.
+     */
+    public static Map<VersionNumber, File> getInstalledVersions(final String pluginName) {
+
+        String[] files = PluginCore.userPluginDir.list(new FilenameFilter() {
+            public boolean accept(File file, String s) {
+                return s.endsWith(".jar");
+            }
+        });
+        Map<VersionNumber, File> versions = new TreeMap<VersionNumber, File>();
+        for (int i = 0; i < files.length; i++) {
+            String file = files[i];
+            File f = new File(PluginCore.userPluginDir,file);
+            String[] nav = getNameAndVersion(f);
+            if (nav != null) {
+                if (nav[0].equals(pluginName)) {
+                    VersionNumber vn = new VersionNumber(nav[1]);
+                    versions.put(vn, f);
+                }
+            }
+                
+        }
+
+        return versions;
+    }
+
+    /**
+     * Add the given filename to the list of plugins to be deleted on the next
+     * JabRef startup.
+     *
+     * @param filename The path to the file to delete.
+     */
+    public static void schedulePluginForDeletion(String filename) {
+        String[] oldValues = Globals.prefs.getStringArray("deletePlugins");
+        String[] newValues = oldValues == null ? new String[1] : new String[oldValues.length+1];
+        if (oldValues != null) for (int i=0; i<oldValues.length; i++) {
+            newValues[i] = oldValues[i];
+        }
+        newValues[newValues.length-1] = filename;
+        Globals.prefs.putStringArray("deletePlugins", newValues);
+    }
+
+    /**
+     * Delete the given files. Refuses to delete files outside the user plugin directory.
+     * This method throws no errors is the files don't exist or deletion failed.
+     * @param filenames An array of names of the files to be deleted.
+     */
+    public static void deletePluginsOnStartup(String[] filenames) {
+        for (int i = 0; i < filenames.length; i++) {
+            String s = filenames[i];
+            File f = new File(s);
+            if (f.getParentFile().equals(PluginCore.userPluginDir)) {
+            //if (s.startsWith(PluginCore.userPluginDir.getPath())) {
+                boolean success = f.delete();
+            }
+            else
+                System.out.println("File outside of user plugin dir: "+s);
+        }
+    }
+
+
+    static Pattern pluginFilePattern = Pattern.compile("(.*)-([\\d\\.]+).jar");
+    static Pattern pluginFilePatternNoVersion = Pattern.compile("(.*).jar");
+
+    /**
+     * Look inside a jar file, find the plugin.xml file, and use it to determine the name
+     * and version of the plugin.
+     *
+     * @param f The file to investigate.
+     * @return A string array containing the plugin name in the first element and
+     *   the version number in the second, or null if the filename couldn't be
+     *   interpreted.
+     *
+     */
+    public static String[] getNameAndVersion(File f) {
+
+        try {
+            File temp = unpackPluginXML(f);
+            if (temp == null)
+                return null; // Couldn't find the plugin.xml file
+            ManifestInfo mi = PluginCore.getManager().getRegistry().
+                    readManifestInfo(temp.toURI().toURL());
+            temp.delete();
+            return new String[] {mi.getId(), mi.getVersion().toString()};
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+            return null;
+        } catch (ManifestProcessingException e) {
+            return null; // Couldn't make sense of the plugin.xml
+        }
+
+    }
+
+    /**
+     * Take the name of a jar file and extract the plugin.xml file, if possible,
+     * to a temporary file.
+     * @param f The jar file to extract from.
+     * @return a temporary file to which the plugin.xml file has been copied.
+     */
+    public static File unpackPluginXML(File f) {
+        InputStream in = null;
+        OutputStream out = null;
+
+        try {
+            JarFile jar = new JarFile(f);
+            ZipEntry entry = jar.getEntry(PLUGIN_XML_FILE);
+            if (entry == null) {
+                return null;
+            }
+            File dest = File.createTempFile("jabref_plugin", ".xml");
+            dest.deleteOnExit();
+            
+            in = new BufferedInputStream(jar.getInputStream(entry));
+            out = new BufferedOutputStream(new FileOutputStream(dest));
+            byte[] buffer = new byte[2048];
+            for (;;)  {
+                int nBytes = in.read(buffer);
+                if (nBytes <= 0) break;
+                out.write(buffer, 0, nBytes);
+            }
+            out.flush();
+            return dest;
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            return null;
+        } finally {
+                try {
+                    if (out != null) out.close();
+                    if (in != null) in.close();
+                } catch (IOException ex) {
+                    ex.printStackTrace();
+                    return null;
+                }
+        }
+    }
+
+    
+    /**
+     * Build a list of installed plugins.
+     * @return a list of plugin names and version numbers.
+     */
+    public static EventList<NameAndVersion> findInstalledPlugins() {
+	EventList<NameAndVersion> plugins = new BasicEventList<NameAndVersion>();
+	if (!PluginCore.userPluginDir.exists())
+		return plugins;
+        String[] files = PluginCore.userPluginDir.list(new FilenameFilter() {
+            public boolean accept(File dir, String name) {
+                return name.endsWith(".jar");
+            }
+        });
+        
+        HashMap<String,PluginDescriptor> urls = new HashMap<String,PluginDescriptor>();
+        Collection<PluginDescriptor> descriptors =
+                PluginCore.getManager().getRegistry().getPluginDescriptors();
+        for (PluginDescriptor desc : descriptors) {
+            if ((desc.getPluginClassName()==null) || !desc.getPluginClassName()
+                    .equals("net.sf.jabref.plugin.core.JabRefPlugin")) {
+                urls.put(desc.getId(), desc);
+            }
+        }
+        
+        for (int i=0; i<files.length; i++) {
+            File file = new File(PluginCore.userPluginDir, files[i]);
+            String[] nav = getNameAndVersion(file);
+            if (nav != null) {
+                VersionNumber vn = nav[1] != null ? new VersionNumber(nav[1]) : null;
+                NameAndVersion nameAndVersion = new NameAndVersion(nav[0], vn, true,
+                        file);
+                for (Iterator<String> it = urls.keySet().iterator(); it.hasNext();) {
+                    String loc = it.next();
+                    if (loc.indexOf(nav[0]) >= 0) {
+                        PluginDescriptor desc = urls.get(loc);
+                        //System.out.println("Accounted for: "+desc.getId()+" "+desc.getVersion().toString());
+                        if (!PluginCore.getManager().isPluginEnabled(urls.get(loc)))
+                            nameAndVersion.setStatus(BAD);
+                        else
+                            nameAndVersion.setStatus(LOADED);
+                        it.remove();
+                    }
+                }
+                plugins.add(nameAndVersion);
+            }
+        }
+
+        for (String url : urls.keySet()) {
+            PluginDescriptor desc = urls.get(url);
+            File location =  new File(desc.getLocation().getFile());
+            if (location.getPath().indexOf(PluginCore.userPluginDir.getPath()) >= 0)
+                continue; // This must be a loaded user dir plugin that's been deleted.
+            //System.out.println("File: "+desc.getLocation().getFile());
+            NameAndVersion nameAndVersion = new NameAndVersion(desc.getId(),
+                    new VersionNumber(desc.getVersion().toString()), false,
+                   location);
+            if (!PluginCore.getManager().isPluginEnabled(urls.get(url)))
+                nameAndVersion.setStatus(BAD);
+            else
+                nameAndVersion.setStatus(LOADED);
+            plugins.add(nameAndVersion);
+        }
+        return plugins;
+    }
+    
+  
+    public static class NameAndVersion implements Comparable {
+        String name;
+        VersionNumber version;
+        int status = 0;
+        boolean inUserDirectory;
+        File file;
+        
+        public NameAndVersion(String name, VersionNumber version, boolean inUserDirectory,
+                              File file) {
+            this.name = name;
+            this.version = version;
+            this.inUserDirectory = inUserDirectory;
+            this.file = file;
+        }
+        
+        public int compareTo(Object o) {
+            NameAndVersion oth = (NameAndVersion)o;
+            if (!name.equals(oth.name))
+                return name.compareTo(oth.name);
+            else {
+                if (version == null)
+                    return 1;
+                else if (oth.version == null)
+                    return -1;
+                else
+                    return version.compareTo(oth.version);
+            }
+        }
+        
+        public int getStatus() {
+            return status;
+        }
+        
+        public void setStatus(int status) {
+            this.status = status;
+        }
+    }
+            
+    static class VersionNumber implements Comparable {
+        public static final VersionNumber ZERO = new VersionNumber("0");
+        List<Integer> digits;
+        public VersionNumber(String number) {
+            digits = new ArrayList<Integer>();
+            String[] elms = number.split("\\.");
+            for (int i = 0; i < elms.length; i++) {
+                try {
+                    int num = Integer.parseInt(elms[i]);
+                    digits.add(num);
+                } catch (NumberFormatException ex) {
+                    // Do nothing
+                }
+
+            }
+        }
+
+        public int compareTo(Object o) {
+            VersionNumber oth = (VersionNumber)o;
+           
+            for (int i=0; i<Math.min(digits.size(), oth.digits.size()); i++) {
+                if (digits.get(i) != oth.digits.get(i))
+                    return oth.digits.get(i)-digits.get(i);
+            }
+            // All digits equal so far, and only one of the numbers has more digits.
+            // The one with digits remaining is the newest one:
+            return oth.digits.size()-digits.size();
+        }
+        
+        public String toString() {
+            StringBuilder sb = new StringBuilder();
+            for (Iterator<Integer> integerIterator = digits.iterator(); integerIterator.hasNext();) {
+                sb.append(integerIterator.next());
+                if (integerIterator.hasNext())
+                    sb.append(".");
+            }
+            return sb.toString();
+        }
+        
+        public boolean equals(Object o) {
+            return compareTo(o) == 0;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/plugin/PluginInstallerAction.java b/src/java/net/sf/jabref/plugin/PluginInstallerAction.java
index 151393a..81f0a48 100644
--- a/src/java/net/sf/jabref/plugin/PluginInstallerAction.java
+++ b/src/java/net/sf/jabref/plugin/PluginInstallerAction.java
@@ -1,53 +1,53 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.plugin;
-
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MnemonicAwareAction;
-import net.sf.jabref.Globals;
-import net.sf.jabref.GUIGlobals;
-
-import javax.swing.*;
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.net.URL;
-import java.net.MalformedURLException;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Mar 27, 2009
- * Time: 11:33:56 PM
- * To change this template use File | Settings | File Templates.
- */
-public class PluginInstallerAction extends MnemonicAwareAction {
-    private JabRefFrame frame;
-
-    public PluginInstallerAction(JabRefFrame frame) {
-        super(GUIGlobals.getImage("plugin"));
-        //System.out.println();
-        this.frame = frame;
-        putValue(NAME, Globals.menuTitle("Manage plugins"));
-
-    }
-    
-    public void actionPerformed(ActionEvent actionEvent) {
-        ManagePluginsDialog mpd = new ManagePluginsDialog(frame);
-        mpd.setVisible(true);
-    }
-
-    
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.plugin;
+
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.MnemonicAwareAction;
+import net.sf.jabref.Globals;
+import net.sf.jabref.GUIGlobals;
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.net.URL;
+import java.net.MalformedURLException;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Mar 27, 2009
+ * Time: 11:33:56 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class PluginInstallerAction extends MnemonicAwareAction {
+    private JabRefFrame frame;
+
+    public PluginInstallerAction(JabRefFrame frame) {
+        super(GUIGlobals.getImage("plugin"));
+        //System.out.println();
+        this.frame = frame;
+        putValue(NAME, Globals.menuTitle("Manage plugins"));
+
+    }
+    
+    public void actionPerformed(ActionEvent actionEvent) {
+        ManagePluginsDialog mpd = new ManagePluginsDialog(frame);
+        mpd.setVisible(true);
+    }
+
+    
+}
diff --git a/src/java/net/sf/jabref/plugin/SidePanePlugin.java b/src/java/net/sf/jabref/plugin/SidePanePlugin.java
index cd0c532..a1f9bc4 100644
--- a/src/java/net/sf/jabref/plugin/SidePanePlugin.java
+++ b/src/java/net/sf/jabref/plugin/SidePanePlugin.java
@@ -1,40 +1,40 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.plugin;
-
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.SidePaneComponent;
-import net.sf.jabref.SidePaneManager;
-
-import javax.swing.*;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Nov 26, 2007
- * Time: 5:44:16 PM
- * To change this template use File | Settings | File Templates.
- */
-public interface SidePanePlugin {
-
-    public void init(JabRefFrame frame, SidePaneManager manager);
-    
-    public SidePaneComponent getSidePaneComponent();
-
-    public JMenuItem getMenuItem();
-
-    public String getShortcutKey();
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.plugin;
+
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.SidePaneComponent;
+import net.sf.jabref.SidePaneManager;
+
+import javax.swing.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Nov 26, 2007
+ * Time: 5:44:16 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public interface SidePanePlugin {
+
+    public void init(JabRefFrame frame, SidePaneManager manager);
+    
+    public SidePaneComponent getSidePaneComponent();
+
+    public JMenuItem getMenuItem();
+
+    public String getShortcutKey();
+}
diff --git a/src/java/net/sf/jabref/plugin/core/JabRefPlugin.java b/src/java/net/sf/jabref/plugin/core/JabRefPlugin.java
index 7335e52..c8191dc 100644
--- a/src/java/net/sf/jabref/plugin/core/JabRefPlugin.java
+++ b/src/java/net/sf/jabref/plugin/core/JabRefPlugin.java
@@ -1,58 +1,58 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.plugin.core;
-
-import net.sf.jabref.plugin.core.generated._JabRefPlugin;
-
-import org.java.plugin.PluginLifecycleException;
-import org.java.plugin.PluginManager;
-
-/**
- * Plug-in class for plug-in net.sf.jabref.core.
- * 
- * Feel free to modify this file, since only the class _JabRefPlugin 
- * (in the subpackage net.sf.jabref.plugin.core.generated)
- * will be overwritten, when you re-run the code generator.
- */
-public class JabRefPlugin extends _JabRefPlugin {
-
-    public void doStart(){
-        // TODO: Will be called when plug-in is started.
-    }
-
-    public void doStop(){
-        // TODO: Will be called when plug-in is stopped.
-    }
-
-    /**
-	 * Retrieve the Plug-in instance from the given manager.
-	 * 
-	 * @param manager
-	 *            The manager from which to retrieve the plug-in instance
-	 * 
-	 * @return The requested plug-in or null if not found.
-	 */
-	public static JabRefPlugin getInstance(PluginManager manager) {
-		try {
-            return (JabRefPlugin) manager
-					.getPlugin(JabRefPlugin.getId());
-		} catch (PluginLifecycleException e) {
-			return null;
-		} catch (IllegalArgumentException e) {
-		    return null;
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.plugin.core;
+
+import net.sf.jabref.plugin.core.generated._JabRefPlugin;
+
+import org.java.plugin.PluginLifecycleException;
+import org.java.plugin.PluginManager;
+
+/**
+ * Plug-in class for plug-in net.sf.jabref.core.
+ * 
+ * Feel free to modify this file, since only the class _JabRefPlugin 
+ * (in the subpackage net.sf.jabref.plugin.core.generated)
+ * will be overwritten, when you re-run the code generator.
+ */
+public class JabRefPlugin extends _JabRefPlugin {
+
+    public void doStart(){
+        // TODO: Will be called when plug-in is started.
+    }
+
+    public void doStop(){
+        // TODO: Will be called when plug-in is stopped.
+    }
+
+    /**
+	 * Retrieve the Plug-in instance from the given manager.
+	 * 
+	 * @param manager
+	 *            The manager from which to retrieve the plug-in instance
+	 * 
+	 * @return The requested plug-in or null if not found.
+	 */
+	public static JabRefPlugin getInstance(PluginManager manager) {
+		try {
+            return (JabRefPlugin) manager
+					.getPlugin(JabRefPlugin.getId());
+		} catch (PluginLifecycleException e) {
+			return null;
+		} catch (IllegalArgumentException e) {
+		    return null;
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/plugin/core/generated/.gitignore b/src/java/net/sf/jabref/plugin/core/generated/.gitignore
deleted file mode 100644
index 163c89e..0000000
--- a/src/java/net/sf/jabref/plugin/core/generated/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-_JabRefPlugin.java
diff --git a/src/java/net/sf/jabref/plugin/core/generated/_JabRefPlugin.java b/src/java/net/sf/jabref/plugin/core/generated/_JabRefPlugin.java
deleted file mode 100644
index 5671389..0000000
--- a/src/java/net/sf/jabref/plugin/core/generated/_JabRefPlugin.java
+++ /dev/null
@@ -1,360 +0,0 @@
-package net.sf.jabref.plugin.core.generated;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import net.sf.jabref.plugin.util.RuntimeExtension;
-import org.java.plugin.Plugin;
-import org.java.plugin.PluginLifecycleException;
-import org.java.plugin.registry.Extension;
-import org.java.plugin.registry.ExtensionPoint;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Do not modify this file, as it was auto generated and will be overwritten!
- * User modifications should go in net.sf.jabref.plugin.core.JabRefPlugin.
- */
-public abstract class _JabRefPlugin extends Plugin {
-
-    public static String getId(){
-        return "net.sf.jabref.core";
-    }
-
-	static Log log = LogFactory.getLog(_JabRefPlugin.class);
-
-	public List<ExportFormatTemplateExtension> getExportFormatTemplateExtensions(){
-        ExtensionPoint extPoint = getManager().getRegistry().getExtensionPoint(getId(), "ExportFormatTemplate");
-        List<ExportFormatTemplateExtension> result = new ArrayList<ExportFormatTemplateExtension>();
-        for (Extension ext : extPoint.getConnectedExtensions()) {
-			try {
-				result.add(new ExportFormatTemplateExtension(getManager().getPlugin(
-						ext.getDeclaringPluginDescriptor().getId()), ext));
-			} catch (PluginLifecycleException e) {
-				log.error("Failed to activate plug-in " + ext.getDeclaringPluginDescriptor().getId(), e);
-			}
-		}
-        return result;
-    }
-
-    public static class ExportFormatTemplateExtension extends RuntimeExtension {
-        public ExportFormatTemplateExtension(Plugin declaringPlugin, Extension wrapped){
-            super(declaringPlugin, wrapped);
-        }
-                
-	     
-              public String getDisplayName(){
-            return getStringParameter("displayName");
-        }
-  
-  	     
-              public String getConsoleName(){
-            return getStringParameter("consoleName");
-        }
-  
-  	     
-              public String getLayoutFilename(){
-            return getStringParameter("layoutFilename");
-        }
-  
-  	     
-      		public URL getDirAsUrl(){
-		    return getResourceParameter("dir");
-		}
-		
-		public URL getDirAsUrl(String relativePath){
-		    return getResourceParameter("dir", relativePath);
-		}
-  
-  	     
-              public String getExtension(){
-            return getStringParameter("extension");
-        }
-  
-  	     
-              public String getEncoding(){
-            return getStringParameter("encoding");
-        }
-  
-      }
-
-	public List<ExportFormatExtension> getExportFormatExtensions(){
-        ExtensionPoint extPoint = getManager().getRegistry().getExtensionPoint(getId(), "ExportFormat");
-        List<ExportFormatExtension> result = new ArrayList<ExportFormatExtension>();
-        for (Extension ext : extPoint.getConnectedExtensions()) {
-			try {
-				result.add(new ExportFormatExtension(getManager().getPlugin(
-						ext.getDeclaringPluginDescriptor().getId()), ext));
-			} catch (PluginLifecycleException e) {
-				log.error("Failed to activate plug-in " + ext.getDeclaringPluginDescriptor().getId(), e);
-			}
-		}
-        return result;
-    }
-
-    public static class ExportFormatExtension extends RuntimeExtension {
-        public ExportFormatExtension(Plugin declaringPlugin, Extension wrapped){
-            super(declaringPlugin, wrapped);
-        }
-                
-	     
-              /**
-         * @return A singleton instance of the class parameter or null if the class could not be found!
-         */
-        public net.sf.jabref.export.IExportFormat getExportFormat(){
-          return (net.sf.jabref.export.IExportFormat)getClassParameter("exportFormat");
-        }
-  
-  	     
-              public String getDisplayName(){
-            return getStringParameter("displayName");
-        }
-  
-  	     
-              public String getConsoleName(){
-            return getStringParameter("consoleName");
-        }
-  
-  	     
-              public String getExtension(){
-            return getStringParameter("extension");
-        }
-  
-      }
-
-	public List<SidePanePluginExtension> getSidePanePluginExtensions(){
-        ExtensionPoint extPoint = getManager().getRegistry().getExtensionPoint(getId(), "SidePanePlugin");
-        List<SidePanePluginExtension> result = new ArrayList<SidePanePluginExtension>();
-        for (Extension ext : extPoint.getConnectedExtensions()) {
-			try {
-				result.add(new SidePanePluginExtension(getManager().getPlugin(
-						ext.getDeclaringPluginDescriptor().getId()), ext));
-			} catch (PluginLifecycleException e) {
-				log.error("Failed to activate plug-in " + ext.getDeclaringPluginDescriptor().getId(), e);
-			}
-		}
-        return result;
-    }
-
-    public static class SidePanePluginExtension extends RuntimeExtension {
-        public SidePanePluginExtension(Plugin declaringPlugin, Extension wrapped){
-            super(declaringPlugin, wrapped);
-        }
-                
-	     
-              /**
-         * @return A singleton instance of the class parameter or null if the class could not be found!
-         */
-        public net.sf.jabref.plugin.SidePanePlugin getSidePanePlugin(){
-          return (net.sf.jabref.plugin.SidePanePlugin)getClassParameter("sidePanePlugin");
-        }
-  
-  	     
-              public String getName(){
-            return getStringParameter("name");
-        }
-  
-  	     
-              public String getDescription(){
-            return getStringParameter("description");
-        }
-  
-      }
-
-	public List<EntryFetcherExtension> getEntryFetcherExtensions(){
-        ExtensionPoint extPoint = getManager().getRegistry().getExtensionPoint(getId(), "EntryFetcher");
-        List<EntryFetcherExtension> result = new ArrayList<EntryFetcherExtension>();
-        for (Extension ext : extPoint.getConnectedExtensions()) {
-			try {
-				result.add(new EntryFetcherExtension(getManager().getPlugin(
-						ext.getDeclaringPluginDescriptor().getId()), ext));
-			} catch (PluginLifecycleException e) {
-				log.error("Failed to activate plug-in " + ext.getDeclaringPluginDescriptor().getId(), e);
-			}
-		}
-        return result;
-    }
-
-    public static class EntryFetcherExtension extends RuntimeExtension {
-        public EntryFetcherExtension(Plugin declaringPlugin, Extension wrapped){
-            super(declaringPlugin, wrapped);
-        }
-                
-	     
-              /**
-         * @return A singleton instance of the class parameter or null if the class could not be found!
-         */
-        public net.sf.jabref.imports.EntryFetcher getEntryFetcher(){
-          return (net.sf.jabref.imports.EntryFetcher)getClassParameter("entryFetcher");
-        }
-  
-  	     
-              public String getName(){
-            return getStringParameter("name");
-        }
-  
-  	     
-              public String getDescription(){
-            return getStringParameter("description");
-        }
-  
-      }
-
-	public List<ExportFormatProviderExtension> getExportFormatProviderExtensions(){
-        ExtensionPoint extPoint = getManager().getRegistry().getExtensionPoint(getId(), "ExportFormatProvider");
-        List<ExportFormatProviderExtension> result = new ArrayList<ExportFormatProviderExtension>();
-        for (Extension ext : extPoint.getConnectedExtensions()) {
-			try {
-				result.add(new ExportFormatProviderExtension(getManager().getPlugin(
-						ext.getDeclaringPluginDescriptor().getId()), ext));
-			} catch (PluginLifecycleException e) {
-				log.error("Failed to activate plug-in " + ext.getDeclaringPluginDescriptor().getId(), e);
-			}
-		}
-        return result;
-    }
-
-    public static class ExportFormatProviderExtension extends RuntimeExtension {
-        public ExportFormatProviderExtension(Plugin declaringPlugin, Extension wrapped){
-            super(declaringPlugin, wrapped);
-        }
-                
-	     
-              /**
-         * @return A singleton instance of the class parameter or null if the class could not be found!
-         */
-        public net.sf.jabref.export.IExportFormatProvider getFormatProvider(){
-          return (net.sf.jabref.export.IExportFormatProvider)getClassParameter("formatProvider");
-        }
-  
-  	     
-              public String getName(){
-            return getStringParameter("name");
-        }
-  
-  	     
-              public String getDescription(){
-            return getStringParameter("description");
-        }
-  
-      }
-
-	public List<PushToApplicationExtension> getPushToApplicationExtensions(){
-        ExtensionPoint extPoint = getManager().getRegistry().getExtensionPoint(getId(), "PushToApplication");
-        List<PushToApplicationExtension> result = new ArrayList<PushToApplicationExtension>();
-        for (Extension ext : extPoint.getConnectedExtensions()) {
-			try {
-				result.add(new PushToApplicationExtension(getManager().getPlugin(
-						ext.getDeclaringPluginDescriptor().getId()), ext));
-			} catch (PluginLifecycleException e) {
-				log.error("Failed to activate plug-in " + ext.getDeclaringPluginDescriptor().getId(), e);
-			}
-		}
-        return result;
-    }
-
-    public static class PushToApplicationExtension extends RuntimeExtension {
-        public PushToApplicationExtension(Plugin declaringPlugin, Extension wrapped){
-            super(declaringPlugin, wrapped);
-        }
-                
-	     
-              /**
-         * @return A singleton instance of the class parameter or null if the class could not be found!
-         */
-        public net.sf.jabref.external.PushToApplication getPushToApp(){
-          return (net.sf.jabref.external.PushToApplication)getClassParameter("pushToApp");
-        }
-  
-  	     
-              public String getName(){
-            return getStringParameter("name");
-        }
-  
-  	     
-              public String getDescription(){
-            return getStringParameter("description");
-        }
-  
-      }
-
-	public List<LayoutFormatterExtension> getLayoutFormatterExtensions(){
-        ExtensionPoint extPoint = getManager().getRegistry().getExtensionPoint(getId(), "LayoutFormatter");
-        List<LayoutFormatterExtension> result = new ArrayList<LayoutFormatterExtension>();
-        for (Extension ext : extPoint.getConnectedExtensions()) {
-			try {
-				result.add(new LayoutFormatterExtension(getManager().getPlugin(
-						ext.getDeclaringPluginDescriptor().getId()), ext));
-			} catch (PluginLifecycleException e) {
-				log.error("Failed to activate plug-in " + ext.getDeclaringPluginDescriptor().getId(), e);
-			}
-		}
-        return result;
-    }
-
-    public static class LayoutFormatterExtension extends RuntimeExtension {
-        public LayoutFormatterExtension(Plugin declaringPlugin, Extension wrapped){
-            super(declaringPlugin, wrapped);
-        }
-                
-	     
-              /**
-         * @return A singleton instance of the class parameter or null if the class could not be found!
-         */
-        public net.sf.jabref.export.layout.LayoutFormatter getLayoutFormatter(){
-          return (net.sf.jabref.export.layout.LayoutFormatter)getClassParameter("layoutFormatter");
-        }
-  
-  	     
-              public String getDescription(){
-            return getStringParameter("description");
-        }
-  
-  	     
-              public String getName(){
-            return getStringParameter("name");
-        }
-  
-      }
-
-	public List<ImportFormatExtension> getImportFormatExtensions(){
-        ExtensionPoint extPoint = getManager().getRegistry().getExtensionPoint(getId(), "ImportFormat");
-        List<ImportFormatExtension> result = new ArrayList<ImportFormatExtension>();
-        for (Extension ext : extPoint.getConnectedExtensions()) {
-			try {
-				result.add(new ImportFormatExtension(getManager().getPlugin(
-						ext.getDeclaringPluginDescriptor().getId()), ext));
-			} catch (PluginLifecycleException e) {
-				log.error("Failed to activate plug-in " + ext.getDeclaringPluginDescriptor().getId(), e);
-			}
-		}
-        return result;
-    }
-
-    public static class ImportFormatExtension extends RuntimeExtension {
-        public ImportFormatExtension(Plugin declaringPlugin, Extension wrapped){
-            super(declaringPlugin, wrapped);
-        }
-                
-	     
-              /**
-         * @return A singleton instance of the class parameter or null if the class could not be found!
-         */
-        public net.sf.jabref.imports.ImportFormat getImportFormat(){
-          return (net.sf.jabref.imports.ImportFormat)getClassParameter("importFormat");
-        }
-  
-  	     
-              public String getName(){
-            return getStringParameter("name");
-        }
-  
-  	     
-              public String getDescription(){
-            return getStringParameter("description");
-        }
-  
-      }
-
-}
diff --git a/src/java/net/sf/jabref/remote/RemoteListener.java b/src/java/net/sf/jabref/remote/RemoteListener.java
index 5b7bfce..3aded76 100644
--- a/src/java/net/sf/jabref/remote/RemoteListener.java
+++ b/src/java/net/sf/jabref/remote/RemoteListener.java
@@ -1,193 +1,182 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.remote;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.SocketException;
-import java.net.SocketTimeoutException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Vector;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRef;
-import net.sf.jabref.imports.ParserResult;
-
-import javax.swing.*;
-
-public class RemoteListener extends Thread {
-
-    private JabRef jabref;
-    private ServerSocket socket;
-    private boolean active = true, toStop = false;
-    private static final String IDENTIFIER = "jabref";
-
-    public RemoteListener(JabRef jabref, ServerSocket socket) {
-        this.jabref = jabref;
-        this.socket = socket;
-    }
-
-    public void disable() {
-        toStop = true;
-        try {
-            socket.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public void run() {
-        while (active) {
-            try {
-                Socket newSocket = socket.accept();
-
-                newSocket.setSoTimeout(1000);
-
-                if (toStop) {
-                    active = false;
-                    return;
-                }
-
-                OutputStream out = newSocket.getOutputStream();
-                InputStream in = newSocket.getInputStream();
-                out.write(IDENTIFIER.getBytes());
-                out.write('\0');
-                out.flush();
-
-                int c;
-                StringBuffer sb = new StringBuffer();
-                try {
-                    while (((c = in.read()) != '\0') && (c >= 0)) {
-                        sb.append((char)c);
-                    }
-                    if (sb.length() == 0) {
-                        continue;
-                    }
-                    String[] args = sb.toString().split("\n");
-                    Vector<ParserResult> loaded = jabref.processArguments(args, false);
-
-                    for (int i=0; i<loaded.size(); i++) {
-                        ParserResult pr = loaded.elementAt(i);
-                        if (!pr.toOpenTab()) {
-                            jabref.jrf.addTab(pr.getDatabase(), pr.getFile(), pr.getMetaData(), pr.getEncoding(), (i == 0));
-                        } else {
-                            // Add the entries to the open tab.
-                            BasePanel panel = jabref.jrf.basePanel();
-                            if (panel == null) {
-                                // There is no open tab to add to, so we create a new tab:
-                                jabref.jrf.addTab(pr.getDatabase(), pr.getFile(), pr.getMetaData(), pr.getEncoding(), (i == 0));
-                            } else {
-                                List<BibtexEntry> entries = new ArrayList<BibtexEntry>(pr.getDatabase().getEntries());
-                                jabref.jrf.addImportedEntries(panel, entries, "", false);
-                            }
-                        }
-                    }
-                    in.close();
-                    out.close();
-                    newSocket.close();
-
-                    SwingUtilities.invokeLater(new Runnable() {
-                        public void run() {
-                            jabref.jrf.showIfMinimizedToSysTray();
-                        }
-                    });
-                } catch (SocketTimeoutException ex) {
-                    //System.out.println("timeout");
-                    in.close();
-                    out.close();
-                    newSocket.close();
-                }
-
-
-
-            } catch (SocketException ex) {
-                active = false;
-                //ex.printStackTrace();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    public static RemoteListener openRemoteListener(JabRef jabref) {
-        try {
-            ServerSocket socket = new ServerSocket(Globals.prefs.getInt("remoteServerPort"), 1,
-                    InetAddress.getByAddress(new byte[] {127, 0, 0, 1}));
-            RemoteListener listener = new RemoteListener(jabref, socket);
-            return listener;
-        } catch (IOException e) {
-            if (!e.getMessage().startsWith("Address already in use"))
-                e.printStackTrace();
-            return null;
-
-        }
-
-    }
-
-    /**
-     * Attempt to send command line arguments to already running JabRef instance.
-     * @param args Command line arguments.
-     * @return true if successful, false otherwise.
-     */
-    public static boolean sendToActiveJabRefInstance(String[] args) {
-        try {
-            InetAddress local = InetAddress.getByName("localhost");
-            Socket socket = new Socket(local, Globals.prefs.getInt("remoteServerPort"));
-            socket.setSoTimeout(2000);
-
-            InputStream in = socket.getInputStream();
-            OutputStream out = socket.getOutputStream();
-            int c;
-            StringBuffer sb = new StringBuffer();
-            try {
-                while (((c = in.read()) != '\0') && (c >= 0)) {
-                    sb.append((char)c);
-                }
-            } catch (SocketTimeoutException ex) {
-                 System.out.println("Connection timed out.");
-            }
-
-            if (!IDENTIFIER.equals(sb.toString())) {
-            	String port = String.valueOf(Globals.prefs.getInt("remoteServerPort"));
-                String error = Globals.lang("Cannot use port %0 for remote operation; another application may be using it. Try specifying another port.", port);
-                System.out.println(error);
-                return false;
-            }
-
-            for (int i=0; i<args.length; i++) {
-                byte[] bytes = args[i].getBytes();
-                out.write(bytes);
-                out.write('\n');
-            }
-            out.write('\0');
-            out.flush();
-            in.close();
-            out.close();
-            socket.close();
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.remote;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketException;
+import java.net.SocketTimeoutException;
+import java.util.Vector;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.imports.ParserResult;
+
+import javax.swing.*;
+
+public class RemoteListener extends Thread {
+
+    private JabRef jabref;
+    private ServerSocket socket;
+    private boolean active = true, toStop = false;
+    private static final String IDENTIFIER = "jabref";
+
+    public RemoteListener(JabRef jabref, ServerSocket socket) {
+        this.jabref = jabref;
+        this.socket = socket;
+    }
+
+    public void disable() {
+        toStop = true;
+        try {
+            socket.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void run() {
+        while (active) {
+            try {
+                Socket newSocket = socket.accept();
+
+                newSocket.setSoTimeout(1000);
+
+                if (toStop) {
+                    active = false;
+                    return;
+                }
+
+                OutputStream out = newSocket.getOutputStream();
+                InputStream in = newSocket.getInputStream();
+                out.write(IDENTIFIER.getBytes());
+                out.write('\0');
+                out.flush();
+
+                int c;
+                StringBuffer sb = new StringBuffer();
+                try {
+                    while (((c = in.read()) != '\0') && (c >= 0)) {
+                        sb.append((char)c);
+                    }
+                    if (sb.length() == 0) {
+                        continue;
+                    }
+                    String[] args = sb.toString().split("\n");
+                    Vector<ParserResult> loaded = jabref.processArguments(args, false);
+
+                    // put "bringToFront" in the queue
+                    // it has to happen before the call to import as the import might open a dialog
+                    // --> Globals.prefs.getBoolean("useImportInspectionDialog")
+                    // this dialog has to be shown AFTER JabRef has been brought to front
+                    SwingUtilities.invokeLater(new Runnable() {
+                        public void run() {
+                            JabRef.jrf.showIfMinimizedToSysTray();
+                        }
+                    });
+
+                    for (int i=0; i<loaded.size(); i++) {
+                        ParserResult pr = loaded.elementAt(i);
+                        JabRef.jrf.addParserResult(pr, (i==0));
+                    }
+
+                    in.close();
+                    out.close();
+                    newSocket.close();
+                } catch (SocketTimeoutException ex) {
+                    //System.out.println("timeout");
+                    in.close();
+                    out.close();
+                    newSocket.close();
+                }
+
+
+
+            } catch (SocketException ex) {
+                active = false;
+                //ex.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public static RemoteListener openRemoteListener(JabRef jabref) {
+        try {
+            ServerSocket socket = new ServerSocket(Globals.prefs.getInt("remoteServerPort"), 1,
+                    InetAddress.getByAddress(new byte[] {127, 0, 0, 1}));
+            RemoteListener listener = new RemoteListener(jabref, socket);
+            return listener;
+        } catch (IOException e) {
+            if (!e.getMessage().startsWith("Address already in use"))
+                e.printStackTrace();
+            return null;
+
+        }
+
+    }
+
+    /**
+     * Attempt to send command line arguments to already running JabRef instance.
+     * @param args Command line arguments.
+     * @return true if successful, false otherwise.
+     */
+    public static boolean sendToActiveJabRefInstance(String[] args) {
+        try {
+            InetAddress local = InetAddress.getByName("localhost");
+            Socket socket = new Socket(local, Globals.prefs.getInt("remoteServerPort"));
+            socket.setSoTimeout(2000);
+
+            InputStream in = socket.getInputStream();
+            OutputStream out = socket.getOutputStream();
+            int c;
+            StringBuffer sb = new StringBuffer();
+            try {
+                while (((c = in.read()) != '\0') && (c >= 0)) {
+                    sb.append((char)c);
+                }
+            } catch (SocketTimeoutException ex) {
+                 System.out.println("Connection timed out.");
+            }
+
+            if (!IDENTIFIER.equals(sb.toString())) {
+            	String port = String.valueOf(Globals.prefs.getInt("remoteServerPort"));
+                String error = Globals.lang("Cannot use port %0 for remote operation; another application may be using it. Try specifying another port.", port);
+                System.out.println(error);
+                return false;
+            }
+
+            for (int i=0; i<args.length; i++) {
+                byte[] bytes = args[i].getBytes();
+                out.write(bytes);
+                out.write('\n');
+            }
+            out.write('\0');
+            out.flush();
+            in.close();
+            out.close();
+            socket.close();
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/search/BasicSearch.java b/src/java/net/sf/jabref/search/BasicSearch.java
index 607ecd7..5744a90 100644
--- a/src/java/net/sf/jabref/search/BasicSearch.java
+++ b/src/java/net/sf/jabref/search/BasicSearch.java
@@ -1,177 +1,177 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.search;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.SearchRule;
-import net.sf.jabref.export.layout.format.RemoveLatexCommands;
-
-/**
- * Search rule for simple search.
- */
-public class BasicSearch implements SearchRule {
-    private boolean caseSensitive;
-    private boolean regExp;
-    Pattern[] pattern;
-    //static RemoveBrackets removeLatexCommands = new RemoveBrackets();
-    static RemoveLatexCommands removeBrackets = new RemoveLatexCommands();
-
-    public BasicSearch(boolean caseSensitive, boolean regExp) {
-
-        this.caseSensitive = caseSensitive;
-        this.regExp = regExp;
-    }
-
-    public int applyRule(String query, BibtexEntry bibtexEntry) {
-        HashMap<String, String> map = new HashMap<String, String>();
-        map.put("1", query);
-        return applyRule(map, bibtexEntry);
-    }
-
-    public boolean validateSearchStrings(Map<String, String> searchStrings) {
-        if (regExp) {
-            int flags = 0;
-            String searchString = searchStrings.values().iterator().next();
-            if (!caseSensitive) {
-                searchString = searchString.toLowerCase();
-                flags = Pattern.CASE_INSENSITIVE;
-            }
-            ArrayList<String> words = parseQuery(searchString);
-            try {
-                pattern = new Pattern[words.size()];
-                for (int i = 0; i < pattern.length; i++) {
-                    pattern[i] = Pattern.compile(words.get(i), flags);
-                }
-            } catch (PatternSyntaxException ex) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
-
-        int flags = 0;
-        String searchString = searchStrings.values().iterator().next();
-        if (!caseSensitive) {
-            searchString = searchString.toLowerCase();
-            flags = Pattern.CASE_INSENSITIVE;
-        }
-
-        ArrayList<String> words = parseQuery(searchString);
-
-        if (regExp)
-            try {
-                pattern = new Pattern[words.size()];
-                for (int i = 0; i < pattern.length; i++) {
-                    pattern[i] = Pattern.compile(words.get(i), flags);
-                }
-            } catch (PatternSyntaxException ex) {
-                return 0;
-            }
-
-        //print(words);
-        // We need match for all words:
-        boolean[] matchFound = new boolean[words.size()];
-
-        Object fieldContentAsObject;
-        String fieldContent;
-        
-        for (String field : bibtexEntry.getAllFields()){
-            fieldContentAsObject = bibtexEntry.getField(field);
-            if (fieldContentAsObject != null) {
-                fieldContent = removeBrackets.format(fieldContentAsObject.toString());
-                if (!caseSensitive)
-                    fieldContent = fieldContent.toLowerCase();
-                int index = 0;
-                // Check if we have a match for each of the query words, ignoring
-                // those words for which we already have a match:
-                for (int j=0; j<words.size(); j++) {
-                    if (!regExp) {
-                        String s = words.get(j);
-                        matchFound[index] = matchFound[index]
-                            || (fieldContent.indexOf(s) >= 0);
-                    } else {
-                        if (fieldContent != null) {
-                            Matcher m = pattern[j].matcher
-                                    (removeBrackets.format(fieldContent));
-                            matchFound[index] = matchFound[index]
-                                || m.find();
-                        }
-                    }
-
-                    index++;
-                }
-            }
-
-        }
-        for (int i = 0; i < matchFound.length; i++) {
-            if (!matchFound[i])
-                return 0; // Didn't match all words.
-        }
-        return 1; // Matched all words.
-    }
-
-    private ArrayList<String> parseQuery(String query) {
-        StringBuffer sb = new StringBuffer();
-        ArrayList<String> result = new ArrayList<String>();
-        int c;
-        boolean escaped = false, quoted = false;
-        for (int i=0; i<query.length(); i++) {
-            c = query.charAt(i);
-            // Check if we are entering an escape sequence:
-            if (!escaped && (c == '\\'))
-                escaped = true;
-            else {
-                // See if we have reached the end of a word:
-                if (!escaped && !quoted && Character.isWhitespace((char)c)) {
-                    if (sb.length() > 0) {
-                        result.add(sb.toString());
-                        sb = new StringBuffer();
-                    }
-                }
-                else if (c == '"') {
-                    // Whether it is a start or end quote, store the current
-                    // word if any:
-                    if (sb.length() > 0) {
-                        result.add(sb.toString());
-                        sb = new StringBuffer();
-                    }
-                    quoted = !quoted;
-                }
-                else {
-                    // All other possibilities exhausted, we add the char to
-                    // the current word:
-                    sb.append((char)c);
-                }
-                escaped = false;
-            }
-        }
-        // Finished with the loop. If we have a current word, add it:
-        if (sb.length() > 0) {
-            result.add(sb.toString());
-        }
-
-        return result; 
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.search;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.SearchRule;
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
+
+/**
+ * Search rule for simple search.
+ */
+public class BasicSearch implements SearchRule {
+    private boolean caseSensitive;
+    private boolean regExp;
+    Pattern[] pattern;
+    //static RemoveBrackets removeLatexCommands = new RemoveBrackets();
+    static RemoveLatexCommands removeBrackets = new RemoveLatexCommands();
+
+    public BasicSearch(boolean caseSensitive, boolean regExp) {
+
+        this.caseSensitive = caseSensitive;
+        this.regExp = regExp;
+    }
+
+    public int applyRule(String query, BibtexEntry bibtexEntry) {
+        HashMap<String, String> map = new HashMap<String, String>();
+        map.put("1", query);
+        return applyRule(map, bibtexEntry);
+    }
+
+    public boolean validateSearchStrings(Map<String, String> searchStrings) {
+        if (regExp) {
+            int flags = 0;
+            String searchString = searchStrings.values().iterator().next();
+            if (!caseSensitive) {
+                searchString = searchString.toLowerCase();
+                flags = Pattern.CASE_INSENSITIVE;
+            }
+            ArrayList<String> words = parseQuery(searchString);
+            try {
+                pattern = new Pattern[words.size()];
+                for (int i = 0; i < pattern.length; i++) {
+                    pattern[i] = Pattern.compile(words.get(i), flags);
+                }
+            } catch (PatternSyntaxException ex) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
+
+        int flags = 0;
+        String searchString = searchStrings.values().iterator().next();
+        if (!caseSensitive) {
+            searchString = searchString.toLowerCase();
+            flags = Pattern.CASE_INSENSITIVE;
+        }
+
+        ArrayList<String> words = parseQuery(searchString);
+
+        if (regExp)
+            try {
+                pattern = new Pattern[words.size()];
+                for (int i = 0; i < pattern.length; i++) {
+                    pattern[i] = Pattern.compile(words.get(i), flags);
+                }
+            } catch (PatternSyntaxException ex) {
+                return 0;
+            }
+
+        //print(words);
+        // We need match for all words:
+        boolean[] matchFound = new boolean[words.size()];
+
+        Object fieldContentAsObject;
+        String fieldContent;
+        
+        for (String field : bibtexEntry.getAllFields()){
+            fieldContentAsObject = bibtexEntry.getField(field);
+            if (fieldContentAsObject != null) {
+                fieldContent = removeBrackets.format(fieldContentAsObject.toString());
+                if (!caseSensitive)
+                    fieldContent = fieldContent.toLowerCase();
+                int index = 0;
+                // Check if we have a match for each of the query words, ignoring
+                // those words for which we already have a match:
+                for (int j=0; j<words.size(); j++) {
+                    if (!regExp) {
+                        String s = words.get(j);
+                        matchFound[index] = matchFound[index]
+                            || (fieldContent.indexOf(s) >= 0);
+                    } else {
+                        if (fieldContent != null) {
+                            Matcher m = pattern[j].matcher
+                                    (removeBrackets.format(fieldContent));
+                            matchFound[index] = matchFound[index]
+                                || m.find();
+                        }
+                    }
+
+                    index++;
+                }
+            }
+
+        }
+        for (int i = 0; i < matchFound.length; i++) {
+            if (!matchFound[i])
+                return 0; // Didn't match all words.
+        }
+        return 1; // Matched all words.
+    }
+
+    private ArrayList<String> parseQuery(String query) {
+        StringBuffer sb = new StringBuffer();
+        ArrayList<String> result = new ArrayList<String>();
+        int c;
+        boolean escaped = false, quoted = false;
+        for (int i=0; i<query.length(); i++) {
+            c = query.charAt(i);
+            // Check if we are entering an escape sequence:
+            if (!escaped && (c == '\\'))
+                escaped = true;
+            else {
+                // See if we have reached the end of a word:
+                if (!escaped && !quoted && Character.isWhitespace((char)c)) {
+                    if (sb.length() > 0) {
+                        result.add(sb.toString());
+                        sb = new StringBuffer();
+                    }
+                }
+                else if (c == '"') {
+                    // Whether it is a start or end quote, store the current
+                    // word if any:
+                    if (sb.length() > 0) {
+                        result.add(sb.toString());
+                        sb = new StringBuffer();
+                    }
+                    quoted = !quoted;
+                }
+                else {
+                    // All other possibilities exhausted, we add the char to
+                    // the current word:
+                    sb.append((char)c);
+                }
+                escaped = false;
+            }
+        }
+        // Finished with the loop. If we have a current word, add it:
+        if (sb.length() > 0) {
+            result.add(sb.toString());
+        }
+
+        return result; 
+    }
+}
diff --git a/src/java/net/sf/jabref/search/HitOrMissComparator.java b/src/java/net/sf/jabref/search/HitOrMissComparator.java
index b797ce2..7a4aa94 100644
--- a/src/java/net/sf/jabref/search/HitOrMissComparator.java
+++ b/src/java/net/sf/jabref/search/HitOrMissComparator.java
@@ -1,46 +1,46 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.search;
-
-import java.util.Comparator;
-
-import net.sf.jabref.BibtexEntry;
-import ca.odell.glazedlists.matchers.Matcher;
-
-/**
- * This Comparator compares two objects based on whether none, one of them, or both
- * match a given Matcher. It is used to "float" group and search hits in the main table.
- */
-public class HitOrMissComparator implements Comparator<BibtexEntry> {
-    private Matcher<BibtexEntry> hitOrMiss;
-
-    public HitOrMissComparator(Matcher<BibtexEntry> hitOrMiss) {
-        this.hitOrMiss = hitOrMiss;
-    }
-
-    public int compare(BibtexEntry o1, BibtexEntry o2) {
-        if (hitOrMiss == null)
-            return 0;
-        
-        boolean
-                hit1 = hitOrMiss.matches(o1),
-                hit2 = hitOrMiss.matches(o2);
-        if (hit1 == hit2)
-            return 0;
-        else
-            return hit1 ? -1 : 1;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.search;
+
+import java.util.Comparator;
+
+import net.sf.jabref.BibtexEntry;
+import ca.odell.glazedlists.matchers.Matcher;
+
+/**
+ * This Comparator compares two objects based on whether none, one of them, or both
+ * match a given Matcher. It is used to "float" group and search hits in the main table.
+ */
+public class HitOrMissComparator implements Comparator<BibtexEntry> {
+    private Matcher<BibtexEntry> hitOrMiss;
+
+    public HitOrMissComparator(Matcher<BibtexEntry> hitOrMiss) {
+        this.hitOrMiss = hitOrMiss;
+    }
+
+    public int compare(BibtexEntry o1, BibtexEntry o2) {
+        if (hitOrMiss == null)
+            return 0;
+        
+        boolean
+                hit1 = hitOrMiss.matches(o1),
+                hit2 = hitOrMiss.matches(o2);
+        if (hit1 == hit2)
+            return 0;
+        else
+            return hit1 ? -1 : 1;
+    }
+}
diff --git a/src/java/net/sf/jabref/search/Lexer.g b/src/java/net/sf/jabref/search/Lexer.g
index f2786c0..08235e6 100644
--- a/src/java/net/sf/jabref/search/Lexer.g
+++ b/src/java/net/sf/jabref/search/Lexer.g
@@ -1,65 +1,65 @@
-header {
-package net.sf.jabref.search;
-}
-
-class SearchExpressionLexer extends Lexer;
-
-options {
-	k = 2;
-	exportVocab = SearchExpressionLexer;
-	caseSensitive = false;
-	caseSensitiveLiterals = false;
-	charVocabulary = '\3'..'\377'; // 8 bit
-	testLiterals = false;
-}
-
-tokens {
-	"and";
-	"or";
-	"not";
-	"contains";
-	"matches";
-
-}
-
-
-
-WS options { paraphrase = "white space"; }
-	:	(' '
-	|
-	'\t'
-	)
-		{ $setType(Token.SKIP); }
-	;
-
-LPAREN options { paraphrase = "'('"; }
-	:	'('
-	;
-
-RPAREN options { paraphrase = "')'"; }
-	:	')'
-	;
-
-EQUAL options { paraphrase = "'='"; }
-	:	"=";
-
-EEQUAL options { paraphrase = "'=='"; }
-	:	"==";
-
-NEQUAL options { paraphrase = "'!='"; }
-	:	"!=";
-
-QUOTE options { paraphrase = "'\"'"; }
-	:	'"';
-
-STRING options { paraphrase = "a text literal"; }
-	:	QUOTE! (~'"')* QUOTE!;
-
-protected
-LETTER options { paraphrase = "a letter"; testLiterals = true; }
-	: ~(' ' | '\t' | '"' | '(' | ')' | '=' | '!'); //'a'..'z';
-
-FIELDTYPE options { paraphrase = "a field type"; testLiterals = true; }
-	:	( LETTER )+
-	;
-
+header {
+package net.sf.jabref.search;
+}
+
+class SearchExpressionLexer extends Lexer;
+
+options {
+	k = 2;
+	exportVocab = SearchExpressionLexer;
+	caseSensitive = false;
+	caseSensitiveLiterals = false;
+	charVocabulary = '\3'..'\377'; // 8 bit
+	testLiterals = false;
+}
+
+tokens {
+	"and";
+	"or";
+	"not";
+	"contains";
+	"matches";
+
+}
+
+
+
+WS options { paraphrase = "white space"; }
+	:	(' '
+	|
+	'\t'
+	)
+		{ $setType(Token.SKIP); }
+	;
+
+LPAREN options { paraphrase = "'('"; }
+	:	'('
+	;
+
+RPAREN options { paraphrase = "')'"; }
+	:	')'
+	;
+
+EQUAL options { paraphrase = "'='"; }
+	:	"=";
+
+EEQUAL options { paraphrase = "'=='"; }
+	:	"==";
+
+NEQUAL options { paraphrase = "'!='"; }
+	:	"!=";
+
+QUOTE options { paraphrase = "'\"'"; }
+	:	'"';
+
+STRING options { paraphrase = "a text literal"; }
+	:	QUOTE! (~'"')* QUOTE!;
+
+protected
+LETTER options { paraphrase = "a letter"; testLiterals = true; }
+	: ~(' ' | '\t' | '"' | '(' | ')' | '=' | '!'); //'a'..'z';
+
+FIELDTYPE options { paraphrase = "a field type"; testLiterals = true; }
+	:	( LETTER )+
+	;
+
diff --git a/src/java/net/sf/jabref/search/NoSearchMatcher.java b/src/java/net/sf/jabref/search/NoSearchMatcher.java
index 503ee4d..47b8ebc 100644
--- a/src/java/net/sf/jabref/search/NoSearchMatcher.java
+++ b/src/java/net/sf/jabref/search/NoSearchMatcher.java
@@ -1,32 +1,32 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.search;
-
-import net.sf.jabref.BibtexEntry;
-
-import ca.odell.glazedlists.matchers.Matcher;
-
-/**
- * Matcher that accepts all entries. Used for filtering when so search is
- * active.
- */
-public class NoSearchMatcher implements Matcher<BibtexEntry> {
-	public static final Matcher<BibtexEntry> INSTANCE = new NoSearchMatcher();
-
-	public boolean matches(BibtexEntry object) {
-		return true;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.search;
+
+import net.sf.jabref.BibtexEntry;
+
+import ca.odell.glazedlists.matchers.Matcher;
+
+/**
+ * Matcher that accepts all entries. Used for filtering when so search is
+ * active.
+ */
+public class NoSearchMatcher implements Matcher<BibtexEntry> {
+	public static final Matcher<BibtexEntry> INSTANCE = new NoSearchMatcher();
+
+	public boolean matches(BibtexEntry object) {
+		return true;
+	}
+}
diff --git a/src/java/net/sf/jabref/search/Parser.g b/src/java/net/sf/jabref/search/Parser.g
index e5d9635..2ae61c3 100644
--- a/src/java/net/sf/jabref/search/Parser.g
+++ b/src/java/net/sf/jabref/search/Parser.g
@@ -1,103 +1,103 @@
-header {
-package net.sf.jabref.search;
-import java.io.StringReader;
-}
-
-class SearchExpressionParser extends Parser;
-
-options {
-	importVocab = SearchExpressionLexer; // use vocab generated by lexer
-	exportVocab = SearchExpressionParser;
-	defaultErrorHandler = false;
-	buildAST = true;
-	k = 3;
-}
-
-tokens {
-	RegularExpression;
-	And;
-	Or;
-	Not;
-	ExpressionSearch;
-}
-
-// ---------- Java Source Code ----------
-
-{
-	public boolean caseSensitive = false;
-    public boolean regex = true;
-	/** Creates a parser and lexer instance and tests the specified String.
-	  * Returns the AST if s is in valid syntax for advanced field search, null otherwise. */
-	public static AST checkSyntax(String s, boolean caseSensitive, boolean regex) {
-		// Is there some way to prevent instance creation here?
-		// How can a parser and/or lexer be reused?
-		SearchExpressionParser parser = new SearchExpressionParser(new SearchExpressionLexer(
-				new StringReader(s)));
-		parser.caseSensitive = caseSensitive;
-		parser.regex = regex;
-		try {
-			parser.searchExpression();
-			return parser.getAST();
-		} catch (Exception e) {
-			return null;
-		}
-	}
-}
-
-// ---------- Text and Regular Expressions ----------
-
-quotedRegularExpression[boolean caseSensitive, boolean regex]:
-		var_s:STRING
-			{
-				## = astFactory.make((new ASTArray(2)).add(new RegExNode(RegularExpression,var_s.getText(),caseSensitive,regex)).add(##));
-			}
-		;
-
-simpleRegularExpression[boolean caseSensitive, boolean regex]:
-		var_s:FIELDTYPE
-			{
-				## = astFactory.make((new ASTArray(2)).add(new RegExNode(RegularExpression,var_s.getText(),caseSensitive,regex)).add(##));
-			}
-		;
-
-// ---------- Condition and Expressions ----------
-
-searchExpression:
-	condition EOF;
-
-condition:
-		(expression LITERAL_and condition) => expression LITERAL_and! condition { ## = #( [And], ##); }
-		|
-		(expression LITERAL_or condition) => expression LITERAL_or! condition { ## = #( [Or], ##); }
-		|
-		expression // negation is done in expression
-		;
-
-expression:
-		expressionSearch
-		|
-		LPAREN! condition RPAREN!
-		|
-		LITERAL_not! expressionSearch { ## = #( [Not], ## ); }         // NOT single expression
-		|
-		LITERAL_not! LPAREN! condition RPAREN! { ## = #( [Not], ## ); } // NOT ( ... )
-		;
-
-expressionSearch:
-		quotedRegularExpression[false,true] compareType quotedRegularExpression[caseSensitive,regex]
-			{ ## = #( [ExpressionSearch], ## ); }
-		|
-		simpleRegularExpression[false,true] compareType quotedRegularExpression[caseSensitive,regex]
-			{ ## = #( [ExpressionSearch], ## ); }
-		|
-		simpleRegularExpression[false,true] compareType simpleRegularExpression[caseSensitive,regex]
-			{ ## = #( [ExpressionSearch], ## ); }
-		|
-		quotedRegularExpression[false,true] compareType simpleRegularExpression[caseSensitive,regex]
-			{ ## = #( [ExpressionSearch], ## ); }
-		;
-
-compareType:
-		LITERAL_contains | LITERAL_matches | EQUAL | EEQUAL | NEQUAL
-		;
-
+header {
+package net.sf.jabref.search;
+import java.io.StringReader;
+}
+
+class SearchExpressionParser extends Parser;
+
+options {
+	importVocab = SearchExpressionLexer; // use vocab generated by lexer
+	exportVocab = SearchExpressionParser;
+	defaultErrorHandler = false;
+	buildAST = true;
+	k = 3;
+}
+
+tokens {
+	RegularExpression;
+	And;
+	Or;
+	Not;
+	ExpressionSearch;
+}
+
+// ---------- Java Source Code ----------
+
+{
+	public boolean caseSensitive = false;
+    public boolean regex = true;
+	/** Creates a parser and lexer instance and tests the specified String.
+	  * Returns the AST if s is in valid syntax for advanced field search, null otherwise. */
+	public static AST checkSyntax(String s, boolean caseSensitive, boolean regex) {
+		// Is there some way to prevent instance creation here?
+		// How can a parser and/or lexer be reused?
+		SearchExpressionParser parser = new SearchExpressionParser(new SearchExpressionLexer(
+				new StringReader(s)));
+		parser.caseSensitive = caseSensitive;
+		parser.regex = regex;
+		try {
+			parser.searchExpression();
+			return parser.getAST();
+		} catch (Exception e) {
+			return null;
+		}
+	}
+}
+
+// ---------- Text and Regular Expressions ----------
+
+quotedRegularExpression[boolean caseSensitive, boolean regex]:
+		var_s:STRING
+			{
+				## = astFactory.make((new ASTArray(2)).add(new RegExNode(RegularExpression,var_s.getText(),caseSensitive,regex)).add(##));
+			}
+		;
+
+simpleRegularExpression[boolean caseSensitive, boolean regex]:
+		var_s:FIELDTYPE
+			{
+				## = astFactory.make((new ASTArray(2)).add(new RegExNode(RegularExpression,var_s.getText(),caseSensitive,regex)).add(##));
+			}
+		;
+
+// ---------- Condition and Expressions ----------
+
+searchExpression:
+	condition EOF;
+
+condition:
+		(expression LITERAL_and condition) => expression LITERAL_and! condition { ## = #( [And], ##); }
+		|
+		(expression LITERAL_or condition) => expression LITERAL_or! condition { ## = #( [Or], ##); }
+		|
+		expression // negation is done in expression
+		;
+
+expression:
+		expressionSearch
+		|
+		LPAREN! condition RPAREN!
+		|
+		LITERAL_not! expressionSearch { ## = #( [Not], ## ); }         // NOT single expression
+		|
+		LITERAL_not! LPAREN! condition RPAREN! { ## = #( [Not], ## ); } // NOT ( ... )
+		;
+
+expressionSearch:
+		quotedRegularExpression[false,true] compareType quotedRegularExpression[caseSensitive,regex]
+			{ ## = #( [ExpressionSearch], ## ); }
+		|
+		simpleRegularExpression[false,true] compareType quotedRegularExpression[caseSensitive,regex]
+			{ ## = #( [ExpressionSearch], ## ); }
+		|
+		simpleRegularExpression[false,true] compareType simpleRegularExpression[caseSensitive,regex]
+			{ ## = #( [ExpressionSearch], ## ); }
+		|
+		quotedRegularExpression[false,true] compareType simpleRegularExpression[caseSensitive,regex]
+			{ ## = #( [ExpressionSearch], ## ); }
+		;
+
+compareType:
+		LITERAL_contains | LITERAL_matches | EQUAL | EEQUAL | NEQUAL
+		;
+
diff --git a/src/java/net/sf/jabref/search/RegExNode.java b/src/java/net/sf/jabref/search/RegExNode.java
index 54ea726..b64953f 100644
--- a/src/java/net/sf/jabref/search/RegExNode.java
+++ b/src/java/net/sf/jabref/search/RegExNode.java
@@ -1,32 +1,32 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.search;
-
-import antlr.CommonAST;
-import java.util.regex.Pattern;
-
-public class RegExNode extends CommonAST {
-	private Pattern pattern = null;
-	public RegExNode(int tokenType, String text, boolean caseSensitive, boolean regex) {
-		initialize(tokenType,text);
-		pattern = Pattern.compile(
-			regex ? text : "\\Q" + text + "\\E", // quote if !regex
-			caseSensitive ? 0 : Pattern.CASE_INSENSITIVE);
-	}
-	public Pattern getPattern() {
-		return pattern;
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.search;
+
+import antlr.CommonAST;
+import java.util.regex.Pattern;
+
+public class RegExNode extends CommonAST {
+	private Pattern pattern = null;
+	public RegExNode(int tokenType, String text, boolean caseSensitive, boolean regex) {
+		initialize(tokenType,text);
+		pattern = Pattern.compile(
+			regex ? text : "\\Q" + text + "\\E", // quote if !regex
+			caseSensitive ? 0 : Pattern.CASE_INSENSITIVE);
+	}
+	public Pattern getPattern() {
+		return pattern;
+	}
+}
diff --git a/src/java/net/sf/jabref/search/SearchExpression.java b/src/java/net/sf/jabref/search/SearchExpression.java
index 13822a4..36ac656 100644
--- a/src/java/net/sf/jabref/search/SearchExpression.java
+++ b/src/java/net/sf/jabref/search/SearchExpression.java
@@ -1,60 +1,60 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.search;
-
-import java.io.StringReader;
-import java.util.Hashtable;
-import java.util.Map;
-import java.util.regex.PatternSyntaxException;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.SearchRule;
-import antlr.RecognitionException;
-import antlr.TokenStreamException;
-import antlr.collections.AST;
-
-public class SearchExpression implements SearchRule {
-	private SearchExpressionTreeParser treeParser = new SearchExpressionTreeParser();
-	private AST ast = null;
-	private JabRefPreferences prefs = null;
-
-	public SearchExpression(JabRefPreferences prefs, Hashtable<String, String> searchOptions)
-		throws TokenStreamException, RecognitionException,
-		PatternSyntaxException {
-		this.prefs = prefs;
-		// parse search expression
-		SearchExpressionParser parser = new SearchExpressionParser(
-			new SearchExpressionLexer(new StringReader(searchOptions.elements()
-				.nextElement()))); // supports only single entry
-		parser.caseSensitive = this.prefs.getBoolean("caseSensitiveSearch");
-		parser.regex = this.prefs.getBoolean("regExpSearch");
-		parser.searchExpression(); // this is the "global" rule
-		ast = parser.getAST(); // remember abstract syntax tree
-	}
-
-	public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
-		try {
-			return treeParser.apply(ast, bibtexEntry);
-		} catch (RecognitionException e) {
-			return 0; // this should never occur
-		}
-	}
-
-    public boolean validateSearchStrings(Map<String, String> searchStrings) {
-        return true;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.search;
+
+import java.io.StringReader;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.regex.PatternSyntaxException;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.SearchRule;
+import antlr.RecognitionException;
+import antlr.TokenStreamException;
+import antlr.collections.AST;
+
+public class SearchExpression implements SearchRule {
+	private SearchExpressionTreeParser treeParser = new SearchExpressionTreeParser();
+	private AST ast = null;
+	private JabRefPreferences prefs = null;
+
+	public SearchExpression(JabRefPreferences prefs, Hashtable<String, String> searchOptions)
+		throws TokenStreamException, RecognitionException,
+		PatternSyntaxException {
+		this.prefs = prefs;
+		// parse search expression
+		SearchExpressionParser parser = new SearchExpressionParser(
+			new SearchExpressionLexer(new StringReader(searchOptions.elements()
+				.nextElement()))); // supports only single entry
+		parser.caseSensitive = this.prefs.getBoolean("caseSensitiveSearch");
+		parser.regex = this.prefs.getBoolean("regExpSearch");
+		parser.searchExpression(); // this is the "global" rule
+		ast = parser.getAST(); // remember abstract syntax tree
+	}
+
+	public int applyRule(Map<String, String> searchStrings, BibtexEntry bibtexEntry) {
+		try {
+			return treeParser.apply(ast, bibtexEntry);
+		} catch (RecognitionException e) {
+			return 0; // this should never occur
+		}
+	}
+
+    public boolean validateSearchStrings(Map<String, String> searchStrings) {
+        return true;
+    }
+}
diff --git a/src/java/net/sf/jabref/search/SearchExpressionLexer.java b/src/java/net/sf/jabref/search/SearchExpressionLexer.java
index 8c1a7b6..32c1b89 100644
--- a/src/java/net/sf/jabref/search/SearchExpressionLexer.java
+++ b/src/java/net/sf/jabref/search/SearchExpressionLexer.java
@@ -1,344 +1,344 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// $ANTLR : "Lexer.g" -> "SearchExpressionLexer.java"$
-
-package net.sf.jabref.search;
-
-import java.io.InputStream;
-import java.io.Reader;
-import java.util.Hashtable;
-
-import antlr.ANTLRHashString;
-import antlr.ByteBuffer;
-import antlr.CharBuffer;
-import antlr.CharStreamException;
-import antlr.CharStreamIOException;
-import antlr.InputBuffer;
-import antlr.LexerSharedInputState;
-import antlr.NoViableAltForCharException;
-import antlr.RecognitionException;
-import antlr.Token;
-import antlr.TokenStream;
-import antlr.TokenStreamException;
-import antlr.TokenStreamIOException;
-import antlr.TokenStreamRecognitionException;
-import antlr.collections.impl.BitSet;
-
- at SuppressWarnings({"unchecked", "unused"})
-public class SearchExpressionLexer extends antlr.CharScanner implements SearchExpressionLexerTokenTypes, TokenStream
- {
-public SearchExpressionLexer(InputStream in) {
-	this(new ByteBuffer(in));
-}
-public SearchExpressionLexer(Reader in) {
-	this(new CharBuffer(in));
-}
-public SearchExpressionLexer(InputBuffer ib) {
-	this(new LexerSharedInputState(ib));
-}
-
-public SearchExpressionLexer(LexerSharedInputState state) {
-	super(state);
-	caseSensitiveLiterals = false;
-	setCaseSensitive(false);
-	literals = new Hashtable<ANTLRHashString, Integer>();
-	literals.put(new ANTLRHashString("matches", this), new Integer(8));
-	literals.put(new ANTLRHashString("or", this), new Integer(5));
-	literals.put(new ANTLRHashString("and", this), new Integer(4));
-	literals.put(new ANTLRHashString("not", this), new Integer(6));
-	literals.put(new ANTLRHashString("contains", this), new Integer(7));
-}
-
-public Token nextToken() throws TokenStreamException {
-	Token theRetToken=null;
-tryAgain:
-	for (;;) {
-		Token _token = null;
-		int _ttype = Token.INVALID_TYPE;
-		resetText();
-		try {   // for char stream error handling
-			try {   // for lexical error handling
-				switch ( LA(1)) {
-				case '\t':  case ' ':
-				{
-					mWS(true);
-					theRetToken=_returnToken;
-					break;
-				}
-				case '(':
-				{
-					mLPAREN(true);
-					theRetToken=_returnToken;
-					break;
-				}
-				case ')':
-				{
-					mRPAREN(true);
-					theRetToken=_returnToken;
-					break;
-				}
-				case '!':
-				{
-					mNEQUAL(true);
-					theRetToken=_returnToken;
-					break;
-				}
-				default:
-					if ((LA(1)=='=') && (LA(2)=='=')) {
-						mEEQUAL(true);
-						theRetToken=_returnToken;
-					}
-					else if ((LA(1)=='"') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) {
-						mSTRING(true);
-						theRetToken=_returnToken;
-					}
-					else if ((LA(1)=='=') && (true)) {
-						mEQUAL(true);
-						theRetToken=_returnToken;
-					}
-					else if ((LA(1)=='"') && (true)) {
-						mQUOTE(true);
-						theRetToken=_returnToken;
-					}
-					else if ((_tokenSet_0.member(LA(1)))) {
-						mFIELDTYPE(true);
-						theRetToken=_returnToken;
-					}
-				else {
-					if (LA(1)==EOF_CHAR) {uponEOF(); _returnToken = makeToken(Token.EOF_TYPE);}
-				else {throw new NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
-				}
-				}
-				if ( _returnToken==null ) continue tryAgain; // found SKIP token
-				_ttype = _returnToken.getType();
-				_returnToken.setType(_ttype);
-				return _returnToken;
-			}
-			catch (RecognitionException e) {
-				throw new TokenStreamRecognitionException(e);
-			}
-		}
-		catch (CharStreamException cse) {
-			if ( cse instanceof CharStreamIOException ) {
-				throw new TokenStreamIOException(((CharStreamIOException)cse).io);
-			}
-			else {
-				throw new TokenStreamException(cse.getMessage());
-			}
-		}
-	}
-}
-
-	public final void mWS(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
-		int _ttype; Token _token=null; int _begin=text.length();
-		_ttype = WS;
-		
-		int _saveIndex;
-		
-		{
-		switch ( LA(1)) {
-		case ' ':
-		{
-			match(' ');
-			break;
-		}
-		case '\t':
-		{
-			match('\t');
-			break;
-		}
-		default:
-		{
-			throw new NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());
-		}
-		}
-		}
-		_ttype = Token.SKIP;
-		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
-			_token = makeToken(_ttype);
-			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
-		}
-		_returnToken = _token;
-	}
-	
-	public final void mLPAREN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
-		int _ttype; Token _token=null; int _begin=text.length();
-		_ttype = LPAREN;
-		int _saveIndex;
-		
-		match('(');
-		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
-			_token = makeToken(_ttype);
-			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
-		}
-		_returnToken = _token;
-	}
-	
-	public final void mRPAREN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
-		int _ttype; Token _token=null; int _begin=text.length();
-		_ttype = RPAREN;
-		int _saveIndex;
-		
-		match(')');
-		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
-			_token = makeToken(_ttype);
-			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
-		}
-		_returnToken = _token;
-	}
-	
-	public final void mEQUAL(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
-		int _ttype; Token _token=null; int _begin=text.length();
-		_ttype = EQUAL;
-		int _saveIndex;
-		
-		match("=");
-		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
-			_token = makeToken(_ttype);
-			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
-		}
-		_returnToken = _token;
-	}
-	
-	public final void mEEQUAL(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
-		int _ttype; Token _token=null; int _begin=text.length();
-		_ttype = EEQUAL;
-		int _saveIndex;
-		
-		match("==");
-		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
-			_token = makeToken(_ttype);
-			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
-		}
-		_returnToken = _token;
-	}
-	
-	public final void mNEQUAL(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
-		int _ttype; Token _token=null; int _begin=text.length();
-		_ttype = NEQUAL;
-		int _saveIndex;
-		
-		match("!=");
-		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
-			_token = makeToken(_ttype);
-			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
-		}
-		_returnToken = _token;
-	}
-	
-	public final void mQUOTE(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
-		int _ttype; Token _token=null; int _begin=text.length();
-		_ttype = QUOTE;
-		int _saveIndex;
-		
-		match('"');
-		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
-			_token = makeToken(_ttype);
-			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
-		}
-		_returnToken = _token;
-	}
-	
-	public final void mSTRING(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
-		int _ttype; Token _token=null; int _begin=text.length();
-		_ttype = STRING;
-		int _saveIndex;
-		
-		_saveIndex=text.length();
-		mQUOTE(false);
-		text.setLength(_saveIndex);
-		{
-		_loop28:
-		do {
-			if ((_tokenSet_1.member(LA(1)))) {
-				matchNot('"');
-			}
-			else {
-				break _loop28;
-			}
-			
-		} while (true);
-		}
-		_saveIndex=text.length();
-		mQUOTE(false);
-		text.setLength(_saveIndex);
-		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
-			_token = makeToken(_ttype);
-			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
-		}
-		_returnToken = _token;
-	}
-	
-	protected final void mLETTER(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
-		int _ttype; Token _token=null; int _begin=text.length();
-		_ttype = LETTER;
-		int _saveIndex;
-		
-		{
-		match(_tokenSet_0);
-		}
-		_ttype = testLiteralsTable(new String(text.getBuffer(),_begin,text.length()-_begin),_ttype);
-		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
-			_token = makeToken(_ttype);
-			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
-		}
-		_returnToken = _token;
-	}
-	
-	public final void mFIELDTYPE(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
-		int _ttype; Token _token=null; int _begin=text.length();
-		_ttype = FIELDTYPE;
-		int _saveIndex;
-		
-		{
-		int _cnt33=0;
-		_loop33:
-		do {
-			if ((_tokenSet_0.member(LA(1)))) {
-				mLETTER(false);
-			}
-			else {
-				if ( _cnt33>=1 ) { break _loop33; } else {throw new NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
-			}
-			
-			_cnt33++;
-		} while (true);
-		}
-		_ttype = testLiteralsTable(_ttype);
-		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
-			_token = makeToken(_ttype);
-			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
-		}
-		_returnToken = _token;
-	}
-	
-	
-	private static final long[] mk_tokenSet_0() {
-		long[] data = new long[8];
-		data[0]=-2305846337813348872L;
-		for (int i = 1; i<=3; i++) { data[i]=-1L; }
-		return data;
-	}
-	public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0());
-	private static final long[] mk_tokenSet_1() {
-		long[] data = new long[8];
-		data[0]=-17179869192L;
-		for (int i = 1; i<=3; i++) { data[i]=-1L; }
-		return data;
-	}
-	public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1());
-	
-	}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// $ANTLR : "Lexer.g" -> "SearchExpressionLexer.java"$
+
+package net.sf.jabref.search;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Hashtable;
+
+import antlr.ANTLRHashString;
+import antlr.ByteBuffer;
+import antlr.CharBuffer;
+import antlr.CharStreamException;
+import antlr.CharStreamIOException;
+import antlr.InputBuffer;
+import antlr.LexerSharedInputState;
+import antlr.NoViableAltForCharException;
+import antlr.RecognitionException;
+import antlr.Token;
+import antlr.TokenStream;
+import antlr.TokenStreamException;
+import antlr.TokenStreamIOException;
+import antlr.TokenStreamRecognitionException;
+import antlr.collections.impl.BitSet;
+
+ at SuppressWarnings({"unchecked", "unused"})
+public class SearchExpressionLexer extends antlr.CharScanner implements SearchExpressionLexerTokenTypes, TokenStream
+ {
+public SearchExpressionLexer(InputStream in) {
+	this(new ByteBuffer(in));
+}
+public SearchExpressionLexer(Reader in) {
+	this(new CharBuffer(in));
+}
+public SearchExpressionLexer(InputBuffer ib) {
+	this(new LexerSharedInputState(ib));
+}
+
+public SearchExpressionLexer(LexerSharedInputState state) {
+	super(state);
+	caseSensitiveLiterals = false;
+	setCaseSensitive(false);
+	literals = new Hashtable<ANTLRHashString, Integer>();
+	literals.put(new ANTLRHashString("matches", this), new Integer(8));
+	literals.put(new ANTLRHashString("or", this), new Integer(5));
+	literals.put(new ANTLRHashString("and", this), new Integer(4));
+	literals.put(new ANTLRHashString("not", this), new Integer(6));
+	literals.put(new ANTLRHashString("contains", this), new Integer(7));
+}
+
+public Token nextToken() throws TokenStreamException {
+	Token theRetToken=null;
+tryAgain:
+	for (;;) {
+		Token _token = null;
+		int _ttype = Token.INVALID_TYPE;
+		resetText();
+		try {   // for char stream error handling
+			try {   // for lexical error handling
+				switch ( LA(1)) {
+				case '\t':  case ' ':
+				{
+					mWS(true);
+					theRetToken=_returnToken;
+					break;
+				}
+				case '(':
+				{
+					mLPAREN(true);
+					theRetToken=_returnToken;
+					break;
+				}
+				case ')':
+				{
+					mRPAREN(true);
+					theRetToken=_returnToken;
+					break;
+				}
+				case '!':
+				{
+					mNEQUAL(true);
+					theRetToken=_returnToken;
+					break;
+				}
+				default:
+					if ((LA(1)=='=') && (LA(2)=='=')) {
+						mEEQUAL(true);
+						theRetToken=_returnToken;
+					}
+					else if ((LA(1)=='"') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) {
+						mSTRING(true);
+						theRetToken=_returnToken;
+					}
+					else if ((LA(1)=='=') && (true)) {
+						mEQUAL(true);
+						theRetToken=_returnToken;
+					}
+					else if ((LA(1)=='"') && (true)) {
+						mQUOTE(true);
+						theRetToken=_returnToken;
+					}
+					else if ((_tokenSet_0.member(LA(1)))) {
+						mFIELDTYPE(true);
+						theRetToken=_returnToken;
+					}
+				else {
+					if (LA(1)==EOF_CHAR) {uponEOF(); _returnToken = makeToken(Token.EOF_TYPE);}
+				else {throw new NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
+				}
+				}
+				if ( _returnToken==null ) continue tryAgain; // found SKIP token
+				_ttype = _returnToken.getType();
+				_returnToken.setType(_ttype);
+				return _returnToken;
+			}
+			catch (RecognitionException e) {
+				throw new TokenStreamRecognitionException(e);
+			}
+		}
+		catch (CharStreamException cse) {
+			if ( cse instanceof CharStreamIOException ) {
+				throw new TokenStreamIOException(((CharStreamIOException)cse).io);
+			}
+			else {
+				throw new TokenStreamException(cse.getMessage());
+			}
+		}
+	}
+}
+
+	public final void mWS(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
+		int _ttype; Token _token=null; int _begin=text.length();
+		_ttype = WS;
+		
+		int _saveIndex;
+		
+		{
+		switch ( LA(1)) {
+		case ' ':
+		{
+			match(' ');
+			break;
+		}
+		case '\t':
+		{
+			match('\t');
+			break;
+		}
+		default:
+		{
+			throw new NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());
+		}
+		}
+		}
+		_ttype = Token.SKIP;
+		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
+			_token = makeToken(_ttype);
+			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
+		}
+		_returnToken = _token;
+	}
+	
+	public final void mLPAREN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
+		int _ttype; Token _token=null; int _begin=text.length();
+		_ttype = LPAREN;
+		int _saveIndex;
+		
+		match('(');
+		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
+			_token = makeToken(_ttype);
+			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
+		}
+		_returnToken = _token;
+	}
+	
+	public final void mRPAREN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
+		int _ttype; Token _token=null; int _begin=text.length();
+		_ttype = RPAREN;
+		int _saveIndex;
+		
+		match(')');
+		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
+			_token = makeToken(_ttype);
+			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
+		}
+		_returnToken = _token;
+	}
+	
+	public final void mEQUAL(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
+		int _ttype; Token _token=null; int _begin=text.length();
+		_ttype = EQUAL;
+		int _saveIndex;
+		
+		match("=");
+		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
+			_token = makeToken(_ttype);
+			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
+		}
+		_returnToken = _token;
+	}
+	
+	public final void mEEQUAL(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
+		int _ttype; Token _token=null; int _begin=text.length();
+		_ttype = EEQUAL;
+		int _saveIndex;
+		
+		match("==");
+		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
+			_token = makeToken(_ttype);
+			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
+		}
+		_returnToken = _token;
+	}
+	
+	public final void mNEQUAL(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
+		int _ttype; Token _token=null; int _begin=text.length();
+		_ttype = NEQUAL;
+		int _saveIndex;
+		
+		match("!=");
+		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
+			_token = makeToken(_ttype);
+			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
+		}
+		_returnToken = _token;
+	}
+	
+	public final void mQUOTE(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
+		int _ttype; Token _token=null; int _begin=text.length();
+		_ttype = QUOTE;
+		int _saveIndex;
+		
+		match('"');
+		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
+			_token = makeToken(_ttype);
+			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
+		}
+		_returnToken = _token;
+	}
+	
+	public final void mSTRING(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
+		int _ttype; Token _token=null; int _begin=text.length();
+		_ttype = STRING;
+		int _saveIndex;
+		
+		_saveIndex=text.length();
+		mQUOTE(false);
+		text.setLength(_saveIndex);
+		{
+		_loop28:
+		do {
+			if ((_tokenSet_1.member(LA(1)))) {
+				matchNot('"');
+			}
+			else {
+				break _loop28;
+			}
+			
+		} while (true);
+		}
+		_saveIndex=text.length();
+		mQUOTE(false);
+		text.setLength(_saveIndex);
+		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
+			_token = makeToken(_ttype);
+			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
+		}
+		_returnToken = _token;
+	}
+	
+	protected final void mLETTER(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
+		int _ttype; Token _token=null; int _begin=text.length();
+		_ttype = LETTER;
+		int _saveIndex;
+		
+		{
+		match(_tokenSet_0);
+		}
+		_ttype = testLiteralsTable(new String(text.getBuffer(),_begin,text.length()-_begin),_ttype);
+		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
+			_token = makeToken(_ttype);
+			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
+		}
+		_returnToken = _token;
+	}
+	
+	public final void mFIELDTYPE(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
+		int _ttype; Token _token=null; int _begin=text.length();
+		_ttype = FIELDTYPE;
+		int _saveIndex;
+		
+		{
+		int _cnt33=0;
+		_loop33:
+		do {
+			if ((_tokenSet_0.member(LA(1)))) {
+				mLETTER(false);
+			}
+			else {
+				if ( _cnt33>=1 ) { break _loop33; } else {throw new NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
+			}
+			
+			_cnt33++;
+		} while (true);
+		}
+		_ttype = testLiteralsTable(_ttype);
+		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
+			_token = makeToken(_ttype);
+			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
+		}
+		_returnToken = _token;
+	}
+	
+	
+	private static final long[] mk_tokenSet_0() {
+		long[] data = new long[8];
+		data[0]=-2305846337813348872L;
+		for (int i = 1; i<=3; i++) { data[i]=-1L; }
+		return data;
+	}
+	public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0());
+	private static final long[] mk_tokenSet_1() {
+		long[] data = new long[8];
+		data[0]=-17179869192L;
+		for (int i = 1; i<=3; i++) { data[i]=-1L; }
+		return data;
+	}
+	public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1());
+	
+	}
diff --git a/src/java/net/sf/jabref/search/SearchExpressionLexerTokenTypes.java b/src/java/net/sf/jabref/search/SearchExpressionLexerTokenTypes.java
index df3049f..c5b72d6 100644
--- a/src/java/net/sf/jabref/search/SearchExpressionLexerTokenTypes.java
+++ b/src/java/net/sf/jabref/search/SearchExpressionLexerTokenTypes.java
@@ -1,38 +1,38 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// $ANTLR : "Lexer.g" -> "SearchExpressionLexer.java"$
-
-package net.sf.jabref.search;
-
-public interface SearchExpressionLexerTokenTypes {
-	int EOF = 1;
-	int NULL_TREE_LOOKAHEAD = 3;
-	int LITERAL_and = 4;
-	int LITERAL_or = 5;
-	int LITERAL_not = 6;
-	int LITERAL_contains = 7;
-	int LITERAL_matches = 8;
-	int WS = 9;
-	int LPAREN = 10;
-	int RPAREN = 11;
-	int EQUAL = 12;
-	int EEQUAL = 13;
-	int NEQUAL = 14;
-	int QUOTE = 15;
-	int STRING = 16;
-	int LETTER = 17;
-	int FIELDTYPE = 18;
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// $ANTLR : "Lexer.g" -> "SearchExpressionLexer.java"$
+
+package net.sf.jabref.search;
+
+public interface SearchExpressionLexerTokenTypes {
+	int EOF = 1;
+	int NULL_TREE_LOOKAHEAD = 3;
+	int LITERAL_and = 4;
+	int LITERAL_or = 5;
+	int LITERAL_not = 6;
+	int LITERAL_contains = 7;
+	int LITERAL_matches = 8;
+	int WS = 9;
+	int LPAREN = 10;
+	int RPAREN = 11;
+	int EQUAL = 12;
+	int EEQUAL = 13;
+	int NEQUAL = 14;
+	int QUOTE = 15;
+	int STRING = 16;
+	int LETTER = 17;
+	int FIELDTYPE = 18;
+}
diff --git a/src/java/net/sf/jabref/search/SearchExpressionParser.java b/src/java/net/sf/jabref/search/SearchExpressionParser.java
index 3a5f8f7..cf995d1 100644
--- a/src/java/net/sf/jabref/search/SearchExpressionParser.java
+++ b/src/java/net/sf/jabref/search/SearchExpressionParser.java
@@ -1,487 +1,487 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// $ANTLR : "Parser.g" -> "SearchExpressionParser.java"$
-
-package net.sf.jabref.search;
-import java.io.StringReader;
-
-import antlr.*;
-import antlr.collections.AST;
-import antlr.collections.impl.ASTArray;
-import antlr.collections.impl.BitSet;
-
-public class SearchExpressionParser extends antlr.LLkParser       implements SearchExpressionParserTokenTypes
- {
-
-	public boolean caseSensitive = false;
-    public boolean regex = true;
-	/** Creates a parser and lexer instance and tests the specified String.
-	  * Returns the AST if s is in valid syntax for advanced field search, null otherwise. */
-	public static AST checkSyntax(String s, boolean caseSensitive, boolean regex) {
-		// Is there some way to prevent instance creation here?
-		// How can a parser and/or lexer be reused?
-		SearchExpressionParser parser = new SearchExpressionParser(new SearchExpressionLexer(
-				new StringReader(s)));
-		parser.caseSensitive = caseSensitive;
-		parser.regex = regex;
-		try {
-			parser.searchExpression();
-			return parser.getAST();
-		} catch (Exception e) {
-			return null;
-		}
-	}
-
-protected SearchExpressionParser(TokenBuffer tokenBuf, int k) {
-  super(tokenBuf,k);
-  tokenNames = _tokenNames;
-  buildTokenTypeASTClassMap();
-  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
-}
-
-public SearchExpressionParser(TokenBuffer tokenBuf) {
-  this(tokenBuf,3);
-}
-
-protected SearchExpressionParser(TokenStream lexer, int k) {
-  super(lexer,k);
-  tokenNames = _tokenNames;
-  buildTokenTypeASTClassMap();
-  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
-}
-
-public SearchExpressionParser(TokenStream lexer) {
-  this(lexer,3);
-}
-
-public SearchExpressionParser(ParserSharedInputState state) {
-  super(state,3);
-  tokenNames = _tokenNames;
-  buildTokenTypeASTClassMap();
-  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
-}
-
-	public final void quotedRegularExpression(
-		boolean caseSensitive, boolean regex
-	) throws RecognitionException, TokenStreamException {
-		
-		returnAST = null;
-		ASTPair currentAST = new ASTPair();
-		AST quotedRegularExpression_AST = null;
-		Token  var_s = null;
-		AST var_s_AST = null;
-		
-		var_s = LT(1);
-		var_s_AST = astFactory.create(var_s);
-		astFactory.addASTChild(currentAST, var_s_AST);
-		match(STRING);
-		if ( inputState.guessing==0 ) {
-			quotedRegularExpression_AST = currentAST.root;
-			
-							quotedRegularExpression_AST = astFactory.make((new ASTArray(2)).add(new RegExNode(RegularExpression,var_s.getText(),caseSensitive,regex)).add(quotedRegularExpression_AST));
-						
-			currentAST.root = quotedRegularExpression_AST;
-			currentAST.child = quotedRegularExpression_AST!=null &&quotedRegularExpression_AST.getFirstChild()!=null ?
-				quotedRegularExpression_AST.getFirstChild() : quotedRegularExpression_AST;
-			currentAST.advanceChildToEnd();
-		}
-		quotedRegularExpression_AST = currentAST.root;
-		returnAST = quotedRegularExpression_AST;
-	}
-	
-	public final void simpleRegularExpression(
-		boolean caseSensitive, boolean regex
-	) throws RecognitionException, TokenStreamException {
-		
-		returnAST = null;
-		ASTPair currentAST = new ASTPair();
-		AST simpleRegularExpression_AST = null;
-		Token  var_s = null;
-		AST var_s_AST = null;
-		
-		var_s = LT(1);
-		var_s_AST = astFactory.create(var_s);
-		astFactory.addASTChild(currentAST, var_s_AST);
-		match(FIELDTYPE);
-		if ( inputState.guessing==0 ) {
-			simpleRegularExpression_AST = currentAST.root;
-			
-							simpleRegularExpression_AST = astFactory.make((new ASTArray(2)).add(new RegExNode(RegularExpression,var_s.getText(),caseSensitive,regex)).add(simpleRegularExpression_AST));
-						
-			currentAST.root = simpleRegularExpression_AST;
-			currentAST.child = simpleRegularExpression_AST!=null &&simpleRegularExpression_AST.getFirstChild()!=null ?
-				simpleRegularExpression_AST.getFirstChild() : simpleRegularExpression_AST;
-			currentAST.advanceChildToEnd();
-		}
-		simpleRegularExpression_AST = currentAST.root;
-		returnAST = simpleRegularExpression_AST;
-	}
-	
-	public final void searchExpression() throws RecognitionException, TokenStreamException {
-		
-		returnAST = null;
-		ASTPair currentAST = new ASTPair();
-		AST searchExpression_AST = null;
-		
-		condition();
-		astFactory.addASTChild(currentAST, returnAST);
-		AST tmp1_AST = null;
-		tmp1_AST = astFactory.create(LT(1));
-		astFactory.addASTChild(currentAST, tmp1_AST);
-		match(Token.EOF_TYPE);
-		searchExpression_AST = currentAST.root;
-		returnAST = searchExpression_AST;
-	}
-	
-	public final void condition() throws RecognitionException, TokenStreamException {
-		
-		returnAST = null;
-		ASTPair currentAST = new ASTPair();
-		AST condition_AST = null;
-		
-		boolean synPredMatched80 = false;
-		if (((_tokenSet_0.member(LA(1))) && (_tokenSet_1.member(LA(2))) && (_tokenSet_1.member(LA(3))))) {
-			int _m80 = mark();
-			synPredMatched80 = true;
-			inputState.guessing++;
-			try {
-				{
-				expression();
-				match(LITERAL_and);
-				condition();
-				}
-			}
-			catch (RecognitionException pe) {
-				synPredMatched80 = false;
-			}
-			rewind(_m80);
-inputState.guessing--;
-		}
-		if ( synPredMatched80 ) {
-			expression();
-			astFactory.addASTChild(currentAST, returnAST);
-			match(LITERAL_and);
-			condition();
-			astFactory.addASTChild(currentAST, returnAST);
-			if ( inputState.guessing==0 ) {
-				condition_AST = currentAST.root;
-				condition_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(And)).add(condition_AST));
-				currentAST.root = condition_AST;
-				currentAST.child = condition_AST!=null &&condition_AST.getFirstChild()!=null ?
-					condition_AST.getFirstChild() : condition_AST;
-				currentAST.advanceChildToEnd();
-			}
-			condition_AST = currentAST.root;
-		}
-		else {
-			boolean synPredMatched82 = false;
-			if (((_tokenSet_0.member(LA(1))) && (_tokenSet_1.member(LA(2))) && (_tokenSet_1.member(LA(3))))) {
-				int _m82 = mark();
-				synPredMatched82 = true;
-				inputState.guessing++;
-				try {
-					{
-					expression();
-					match(LITERAL_or);
-					condition();
-					}
-				}
-				catch (RecognitionException pe) {
-					synPredMatched82 = false;
-				}
-				rewind(_m82);
-inputState.guessing--;
-			}
-			if ( synPredMatched82 ) {
-				expression();
-				astFactory.addASTChild(currentAST, returnAST);
-				match(LITERAL_or);
-				condition();
-				astFactory.addASTChild(currentAST, returnAST);
-				if ( inputState.guessing==0 ) {
-					condition_AST = currentAST.root;
-					condition_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(Or)).add(condition_AST));
-					currentAST.root = condition_AST;
-					currentAST.child = condition_AST!=null &&condition_AST.getFirstChild()!=null ?
-						condition_AST.getFirstChild() : condition_AST;
-					currentAST.advanceChildToEnd();
-				}
-				condition_AST = currentAST.root;
-			}
-			else if ((_tokenSet_0.member(LA(1))) && (_tokenSet_1.member(LA(2))) && (_tokenSet_1.member(LA(3)))) {
-				expression();
-				astFactory.addASTChild(currentAST, returnAST);
-				condition_AST = currentAST.root;
-			}
-			else {
-				throw new NoViableAltException(LT(1), getFilename());
-			}
-			}
-			returnAST = condition_AST;
-		}
-		
-	public final void expression() throws RecognitionException, TokenStreamException {
-		
-		returnAST = null;
-		ASTPair currentAST = new ASTPair();
-		AST expression_AST = null;
-		
-		switch ( LA(1)) {
-		case STRING:
-		case FIELDTYPE:
-		{
-			expressionSearch();
-			astFactory.addASTChild(currentAST, returnAST);
-			expression_AST = currentAST.root;
-			break;
-		}
-		case LPAREN:
-		{
-			match(LPAREN);
-			condition();
-			astFactory.addASTChild(currentAST, returnAST);
-			match(RPAREN);
-			expression_AST = currentAST.root;
-			break;
-		}
-		default:
-			if ((LA(1)==LITERAL_not) && (LA(2)==STRING||LA(2)==FIELDTYPE)) {
-				match(LITERAL_not);
-				expressionSearch();
-				astFactory.addASTChild(currentAST, returnAST);
-				if ( inputState.guessing==0 ) {
-					expression_AST = currentAST.root;
-					expression_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(Not)).add(expression_AST));
-					currentAST.root = expression_AST;
-					currentAST.child = expression_AST!=null &&expression_AST.getFirstChild()!=null ?
-						expression_AST.getFirstChild() : expression_AST;
-					currentAST.advanceChildToEnd();
-				}
-				expression_AST = currentAST.root;
-			}
-			else if ((LA(1)==LITERAL_not) && (LA(2)==LPAREN)) {
-				match(LITERAL_not);
-				match(LPAREN);
-				condition();
-				astFactory.addASTChild(currentAST, returnAST);
-				match(RPAREN);
-				if ( inputState.guessing==0 ) {
-					expression_AST = currentAST.root;
-					expression_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(Not)).add(expression_AST));
-					currentAST.root = expression_AST;
-					currentAST.child = expression_AST!=null &&expression_AST.getFirstChild()!=null ?
-						expression_AST.getFirstChild() : expression_AST;
-					currentAST.advanceChildToEnd();
-				}
-				expression_AST = currentAST.root;
-			}
-		else {
-			throw new NoViableAltException(LT(1), getFilename());
-		}
-		}
-		returnAST = expression_AST;
-	}
-	
-	public final void expressionSearch() throws RecognitionException, TokenStreamException {
-		
-		returnAST = null;
-		ASTPair currentAST = new ASTPair();
-		AST expressionSearch_AST = null;
-		
-		if ((LA(1)==STRING) && (_tokenSet_2.member(LA(2))) && (LA(3)==STRING)) {
-			quotedRegularExpression(false,true);
-			astFactory.addASTChild(currentAST, returnAST);
-			compareType();
-			astFactory.addASTChild(currentAST, returnAST);
-			quotedRegularExpression(caseSensitive,regex);
-			astFactory.addASTChild(currentAST, returnAST);
-			if ( inputState.guessing==0 ) {
-				expressionSearch_AST = currentAST.root;
-				expressionSearch_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(ExpressionSearch)).add(expressionSearch_AST));
-				currentAST.root = expressionSearch_AST;
-				currentAST.child = expressionSearch_AST!=null &&expressionSearch_AST.getFirstChild()!=null ?
-					expressionSearch_AST.getFirstChild() : expressionSearch_AST;
-				currentAST.advanceChildToEnd();
-			}
-			expressionSearch_AST = currentAST.root;
-		}
-		else if ((LA(1)==FIELDTYPE) && (_tokenSet_2.member(LA(2))) && (LA(3)==STRING)) {
-			simpleRegularExpression(false,true);
-			astFactory.addASTChild(currentAST, returnAST);
-			compareType();
-			astFactory.addASTChild(currentAST, returnAST);
-			quotedRegularExpression(caseSensitive,regex);
-			astFactory.addASTChild(currentAST, returnAST);
-			if ( inputState.guessing==0 ) {
-				expressionSearch_AST = currentAST.root;
-				expressionSearch_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(ExpressionSearch)).add(expressionSearch_AST));
-				currentAST.root = expressionSearch_AST;
-				currentAST.child = expressionSearch_AST!=null &&expressionSearch_AST.getFirstChild()!=null ?
-					expressionSearch_AST.getFirstChild() : expressionSearch_AST;
-				currentAST.advanceChildToEnd();
-			}
-			expressionSearch_AST = currentAST.root;
-		}
-		else if ((LA(1)==FIELDTYPE) && (_tokenSet_2.member(LA(2))) && (LA(3)==FIELDTYPE)) {
-			simpleRegularExpression(false,true);
-			astFactory.addASTChild(currentAST, returnAST);
-			compareType();
-			astFactory.addASTChild(currentAST, returnAST);
-			simpleRegularExpression(caseSensitive,regex);
-			astFactory.addASTChild(currentAST, returnAST);
-			if ( inputState.guessing==0 ) {
-				expressionSearch_AST = currentAST.root;
-				expressionSearch_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(ExpressionSearch)).add(expressionSearch_AST));
-				currentAST.root = expressionSearch_AST;
-				currentAST.child = expressionSearch_AST!=null &&expressionSearch_AST.getFirstChild()!=null ?
-					expressionSearch_AST.getFirstChild() : expressionSearch_AST;
-				currentAST.advanceChildToEnd();
-			}
-			expressionSearch_AST = currentAST.root;
-		}
-		else if ((LA(1)==STRING) && (_tokenSet_2.member(LA(2))) && (LA(3)==FIELDTYPE)) {
-			quotedRegularExpression(false,true);
-			astFactory.addASTChild(currentAST, returnAST);
-			compareType();
-			astFactory.addASTChild(currentAST, returnAST);
-			simpleRegularExpression(caseSensitive,regex);
-			astFactory.addASTChild(currentAST, returnAST);
-			if ( inputState.guessing==0 ) {
-				expressionSearch_AST = currentAST.root;
-				expressionSearch_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(ExpressionSearch)).add(expressionSearch_AST));
-				currentAST.root = expressionSearch_AST;
-				currentAST.child = expressionSearch_AST!=null &&expressionSearch_AST.getFirstChild()!=null ?
-					expressionSearch_AST.getFirstChild() : expressionSearch_AST;
-				currentAST.advanceChildToEnd();
-			}
-			expressionSearch_AST = currentAST.root;
-		}
-		else {
-			throw new NoViableAltException(LT(1), getFilename());
-		}
-		
-		returnAST = expressionSearch_AST;
-	}
-	
-	public final void compareType() throws RecognitionException, TokenStreamException {
-		
-		returnAST = null;
-		ASTPair currentAST = new ASTPair();
-		AST compareType_AST = null;
-		
-		switch ( LA(1)) {
-		case LITERAL_contains:
-		{
-			AST tmp10_AST = null;
-			tmp10_AST = astFactory.create(LT(1));
-			astFactory.addASTChild(currentAST, tmp10_AST);
-			match(LITERAL_contains);
-			compareType_AST = currentAST.root;
-			break;
-		}
-		case LITERAL_matches:
-		{
-			AST tmp11_AST = null;
-			tmp11_AST = astFactory.create(LT(1));
-			astFactory.addASTChild(currentAST, tmp11_AST);
-			match(LITERAL_matches);
-			compareType_AST = currentAST.root;
-			break;
-		}
-		case EQUAL:
-		{
-			AST tmp12_AST = null;
-			tmp12_AST = astFactory.create(LT(1));
-			astFactory.addASTChild(currentAST, tmp12_AST);
-			match(EQUAL);
-			compareType_AST = currentAST.root;
-			break;
-		}
-		case EEQUAL:
-		{
-			AST tmp13_AST = null;
-			tmp13_AST = astFactory.create(LT(1));
-			astFactory.addASTChild(currentAST, tmp13_AST);
-			match(EEQUAL);
-			compareType_AST = currentAST.root;
-			break;
-		}
-		case NEQUAL:
-		{
-			AST tmp14_AST = null;
-			tmp14_AST = astFactory.create(LT(1));
-			astFactory.addASTChild(currentAST, tmp14_AST);
-			match(NEQUAL);
-			compareType_AST = currentAST.root;
-			break;
-		}
-		default:
-		{
-			throw new NoViableAltException(LT(1), getFilename());
-		}
-		}
-		returnAST = compareType_AST;
-	}
-	
-	
-	public static final String[] _tokenNames = {
-		"<0>",
-		"EOF",
-		"<2>",
-		"NULL_TREE_LOOKAHEAD",
-		"\"and\"",
-		"\"or\"",
-		"\"not\"",
-		"\"contains\"",
-		"\"matches\"",
-		"white space",
-		"'('",
-		"')'",
-		"'='",
-		"'=='",
-		"'!='",
-		"'\\\"'",
-		"a text literal",
-		"a letter",
-		"a field type",
-		"RegularExpression",
-		"And",
-		"Or",
-		"Not",
-		"ExpressionSearch"
-	};
-	
-	protected void buildTokenTypeASTClassMap() {
-		tokenTypeToASTClassMap=null;
-	}
-
-     private static final long[] mk_tokenSet_0() {
-         long[] data = { 328768L, 0L};
-         return data;
-     }
-	public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0());
-	private static final long[] mk_tokenSet_1() {
-		long[] data = { 357824L, 0L};
-		return data;
-	}
-	public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1());
-	private static final long[] mk_tokenSet_2() {
-		long[] data = { 29056L, 0L};
-		return data;
-	}
-	public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2());
-	
-	}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// $ANTLR : "Parser.g" -> "SearchExpressionParser.java"$
+
+package net.sf.jabref.search;
+import java.io.StringReader;
+
+import antlr.*;
+import antlr.collections.AST;
+import antlr.collections.impl.ASTArray;
+import antlr.collections.impl.BitSet;
+
+public class SearchExpressionParser extends antlr.LLkParser       implements SearchExpressionParserTokenTypes
+ {
+
+	public boolean caseSensitive = false;
+    public boolean regex = true;
+	/** Creates a parser and lexer instance and tests the specified String.
+	  * Returns the AST if s is in valid syntax for advanced field search, null otherwise. */
+	public static AST checkSyntax(String s, boolean caseSensitive, boolean regex) {
+		// Is there some way to prevent instance creation here?
+		// How can a parser and/or lexer be reused?
+		SearchExpressionParser parser = new SearchExpressionParser(new SearchExpressionLexer(
+				new StringReader(s)));
+		parser.caseSensitive = caseSensitive;
+		parser.regex = regex;
+		try {
+			parser.searchExpression();
+			return parser.getAST();
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+protected SearchExpressionParser(TokenBuffer tokenBuf, int k) {
+  super(tokenBuf,k);
+  tokenNames = _tokenNames;
+  buildTokenTypeASTClassMap();
+  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
+}
+
+public SearchExpressionParser(TokenBuffer tokenBuf) {
+  this(tokenBuf,3);
+}
+
+protected SearchExpressionParser(TokenStream lexer, int k) {
+  super(lexer,k);
+  tokenNames = _tokenNames;
+  buildTokenTypeASTClassMap();
+  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
+}
+
+public SearchExpressionParser(TokenStream lexer) {
+  this(lexer,3);
+}
+
+public SearchExpressionParser(ParserSharedInputState state) {
+  super(state,3);
+  tokenNames = _tokenNames;
+  buildTokenTypeASTClassMap();
+  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
+}
+
+	public final void quotedRegularExpression(
+		boolean caseSensitive, boolean regex
+	) throws RecognitionException, TokenStreamException {
+		
+		returnAST = null;
+		ASTPair currentAST = new ASTPair();
+		AST quotedRegularExpression_AST = null;
+		Token  var_s = null;
+		AST var_s_AST = null;
+		
+		var_s = LT(1);
+		var_s_AST = astFactory.create(var_s);
+		astFactory.addASTChild(currentAST, var_s_AST);
+		match(STRING);
+		if ( inputState.guessing==0 ) {
+			quotedRegularExpression_AST = currentAST.root;
+			
+							quotedRegularExpression_AST = astFactory.make((new ASTArray(2)).add(new RegExNode(RegularExpression,var_s.getText(),caseSensitive,regex)).add(quotedRegularExpression_AST));
+						
+			currentAST.root = quotedRegularExpression_AST;
+			currentAST.child = quotedRegularExpression_AST!=null &&quotedRegularExpression_AST.getFirstChild()!=null ?
+				quotedRegularExpression_AST.getFirstChild() : quotedRegularExpression_AST;
+			currentAST.advanceChildToEnd();
+		}
+		quotedRegularExpression_AST = currentAST.root;
+		returnAST = quotedRegularExpression_AST;
+	}
+	
+	public final void simpleRegularExpression(
+		boolean caseSensitive, boolean regex
+	) throws RecognitionException, TokenStreamException {
+		
+		returnAST = null;
+		ASTPair currentAST = new ASTPair();
+		AST simpleRegularExpression_AST = null;
+		Token  var_s = null;
+		AST var_s_AST = null;
+		
+		var_s = LT(1);
+		var_s_AST = astFactory.create(var_s);
+		astFactory.addASTChild(currentAST, var_s_AST);
+		match(FIELDTYPE);
+		if ( inputState.guessing==0 ) {
+			simpleRegularExpression_AST = currentAST.root;
+			
+							simpleRegularExpression_AST = astFactory.make((new ASTArray(2)).add(new RegExNode(RegularExpression,var_s.getText(),caseSensitive,regex)).add(simpleRegularExpression_AST));
+						
+			currentAST.root = simpleRegularExpression_AST;
+			currentAST.child = simpleRegularExpression_AST!=null &&simpleRegularExpression_AST.getFirstChild()!=null ?
+				simpleRegularExpression_AST.getFirstChild() : simpleRegularExpression_AST;
+			currentAST.advanceChildToEnd();
+		}
+		simpleRegularExpression_AST = currentAST.root;
+		returnAST = simpleRegularExpression_AST;
+	}
+	
+	public final void searchExpression() throws RecognitionException, TokenStreamException {
+		
+		returnAST = null;
+		ASTPair currentAST = new ASTPair();
+		AST searchExpression_AST = null;
+		
+		condition();
+		astFactory.addASTChild(currentAST, returnAST);
+		AST tmp1_AST = null;
+		tmp1_AST = astFactory.create(LT(1));
+		astFactory.addASTChild(currentAST, tmp1_AST);
+		match(Token.EOF_TYPE);
+		searchExpression_AST = currentAST.root;
+		returnAST = searchExpression_AST;
+	}
+	
+	public final void condition() throws RecognitionException, TokenStreamException {
+		
+		returnAST = null;
+		ASTPair currentAST = new ASTPair();
+		AST condition_AST = null;
+		
+		boolean synPredMatched80 = false;
+		if (((_tokenSet_0.member(LA(1))) && (_tokenSet_1.member(LA(2))) && (_tokenSet_1.member(LA(3))))) {
+			int _m80 = mark();
+			synPredMatched80 = true;
+			inputState.guessing++;
+			try {
+				{
+				expression();
+				match(LITERAL_and);
+				condition();
+				}
+			}
+			catch (RecognitionException pe) {
+				synPredMatched80 = false;
+			}
+			rewind(_m80);
+inputState.guessing--;
+		}
+		if ( synPredMatched80 ) {
+			expression();
+			astFactory.addASTChild(currentAST, returnAST);
+			match(LITERAL_and);
+			condition();
+			astFactory.addASTChild(currentAST, returnAST);
+			if ( inputState.guessing==0 ) {
+				condition_AST = currentAST.root;
+				condition_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(And)).add(condition_AST));
+				currentAST.root = condition_AST;
+				currentAST.child = condition_AST!=null &&condition_AST.getFirstChild()!=null ?
+					condition_AST.getFirstChild() : condition_AST;
+				currentAST.advanceChildToEnd();
+			}
+			condition_AST = currentAST.root;
+		}
+		else {
+			boolean synPredMatched82 = false;
+			if (((_tokenSet_0.member(LA(1))) && (_tokenSet_1.member(LA(2))) && (_tokenSet_1.member(LA(3))))) {
+				int _m82 = mark();
+				synPredMatched82 = true;
+				inputState.guessing++;
+				try {
+					{
+					expression();
+					match(LITERAL_or);
+					condition();
+					}
+				}
+				catch (RecognitionException pe) {
+					synPredMatched82 = false;
+				}
+				rewind(_m82);
+inputState.guessing--;
+			}
+			if ( synPredMatched82 ) {
+				expression();
+				astFactory.addASTChild(currentAST, returnAST);
+				match(LITERAL_or);
+				condition();
+				astFactory.addASTChild(currentAST, returnAST);
+				if ( inputState.guessing==0 ) {
+					condition_AST = currentAST.root;
+					condition_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(Or)).add(condition_AST));
+					currentAST.root = condition_AST;
+					currentAST.child = condition_AST!=null &&condition_AST.getFirstChild()!=null ?
+						condition_AST.getFirstChild() : condition_AST;
+					currentAST.advanceChildToEnd();
+				}
+				condition_AST = currentAST.root;
+			}
+			else if ((_tokenSet_0.member(LA(1))) && (_tokenSet_1.member(LA(2))) && (_tokenSet_1.member(LA(3)))) {
+				expression();
+				astFactory.addASTChild(currentAST, returnAST);
+				condition_AST = currentAST.root;
+			}
+			else {
+				throw new NoViableAltException(LT(1), getFilename());
+			}
+			}
+			returnAST = condition_AST;
+		}
+		
+	public final void expression() throws RecognitionException, TokenStreamException {
+		
+		returnAST = null;
+		ASTPair currentAST = new ASTPair();
+		AST expression_AST = null;
+		
+		switch ( LA(1)) {
+		case STRING:
+		case FIELDTYPE:
+		{
+			expressionSearch();
+			astFactory.addASTChild(currentAST, returnAST);
+			expression_AST = currentAST.root;
+			break;
+		}
+		case LPAREN:
+		{
+			match(LPAREN);
+			condition();
+			astFactory.addASTChild(currentAST, returnAST);
+			match(RPAREN);
+			expression_AST = currentAST.root;
+			break;
+		}
+		default:
+			if ((LA(1)==LITERAL_not) && (LA(2)==STRING||LA(2)==FIELDTYPE)) {
+				match(LITERAL_not);
+				expressionSearch();
+				astFactory.addASTChild(currentAST, returnAST);
+				if ( inputState.guessing==0 ) {
+					expression_AST = currentAST.root;
+					expression_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(Not)).add(expression_AST));
+					currentAST.root = expression_AST;
+					currentAST.child = expression_AST!=null &&expression_AST.getFirstChild()!=null ?
+						expression_AST.getFirstChild() : expression_AST;
+					currentAST.advanceChildToEnd();
+				}
+				expression_AST = currentAST.root;
+			}
+			else if ((LA(1)==LITERAL_not) && (LA(2)==LPAREN)) {
+				match(LITERAL_not);
+				match(LPAREN);
+				condition();
+				astFactory.addASTChild(currentAST, returnAST);
+				match(RPAREN);
+				if ( inputState.guessing==0 ) {
+					expression_AST = currentAST.root;
+					expression_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(Not)).add(expression_AST));
+					currentAST.root = expression_AST;
+					currentAST.child = expression_AST!=null &&expression_AST.getFirstChild()!=null ?
+						expression_AST.getFirstChild() : expression_AST;
+					currentAST.advanceChildToEnd();
+				}
+				expression_AST = currentAST.root;
+			}
+		else {
+			throw new NoViableAltException(LT(1), getFilename());
+		}
+		}
+		returnAST = expression_AST;
+	}
+	
+	public final void expressionSearch() throws RecognitionException, TokenStreamException {
+		
+		returnAST = null;
+		ASTPair currentAST = new ASTPair();
+		AST expressionSearch_AST = null;
+		
+		if ((LA(1)==STRING) && (_tokenSet_2.member(LA(2))) && (LA(3)==STRING)) {
+			quotedRegularExpression(false,true);
+			astFactory.addASTChild(currentAST, returnAST);
+			compareType();
+			astFactory.addASTChild(currentAST, returnAST);
+			quotedRegularExpression(caseSensitive,regex);
+			astFactory.addASTChild(currentAST, returnAST);
+			if ( inputState.guessing==0 ) {
+				expressionSearch_AST = currentAST.root;
+				expressionSearch_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(ExpressionSearch)).add(expressionSearch_AST));
+				currentAST.root = expressionSearch_AST;
+				currentAST.child = expressionSearch_AST!=null &&expressionSearch_AST.getFirstChild()!=null ?
+					expressionSearch_AST.getFirstChild() : expressionSearch_AST;
+				currentAST.advanceChildToEnd();
+			}
+			expressionSearch_AST = currentAST.root;
+		}
+		else if ((LA(1)==FIELDTYPE) && (_tokenSet_2.member(LA(2))) && (LA(3)==STRING)) {
+			simpleRegularExpression(false,true);
+			astFactory.addASTChild(currentAST, returnAST);
+			compareType();
+			astFactory.addASTChild(currentAST, returnAST);
+			quotedRegularExpression(caseSensitive,regex);
+			astFactory.addASTChild(currentAST, returnAST);
+			if ( inputState.guessing==0 ) {
+				expressionSearch_AST = currentAST.root;
+				expressionSearch_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(ExpressionSearch)).add(expressionSearch_AST));
+				currentAST.root = expressionSearch_AST;
+				currentAST.child = expressionSearch_AST!=null &&expressionSearch_AST.getFirstChild()!=null ?
+					expressionSearch_AST.getFirstChild() : expressionSearch_AST;
+				currentAST.advanceChildToEnd();
+			}
+			expressionSearch_AST = currentAST.root;
+		}
+		else if ((LA(1)==FIELDTYPE) && (_tokenSet_2.member(LA(2))) && (LA(3)==FIELDTYPE)) {
+			simpleRegularExpression(false,true);
+			astFactory.addASTChild(currentAST, returnAST);
+			compareType();
+			astFactory.addASTChild(currentAST, returnAST);
+			simpleRegularExpression(caseSensitive,regex);
+			astFactory.addASTChild(currentAST, returnAST);
+			if ( inputState.guessing==0 ) {
+				expressionSearch_AST = currentAST.root;
+				expressionSearch_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(ExpressionSearch)).add(expressionSearch_AST));
+				currentAST.root = expressionSearch_AST;
+				currentAST.child = expressionSearch_AST!=null &&expressionSearch_AST.getFirstChild()!=null ?
+					expressionSearch_AST.getFirstChild() : expressionSearch_AST;
+				currentAST.advanceChildToEnd();
+			}
+			expressionSearch_AST = currentAST.root;
+		}
+		else if ((LA(1)==STRING) && (_tokenSet_2.member(LA(2))) && (LA(3)==FIELDTYPE)) {
+			quotedRegularExpression(false,true);
+			astFactory.addASTChild(currentAST, returnAST);
+			compareType();
+			astFactory.addASTChild(currentAST, returnAST);
+			simpleRegularExpression(caseSensitive,regex);
+			astFactory.addASTChild(currentAST, returnAST);
+			if ( inputState.guessing==0 ) {
+				expressionSearch_AST = currentAST.root;
+				expressionSearch_AST = astFactory.make( (new ASTArray(2)).add(astFactory.create(ExpressionSearch)).add(expressionSearch_AST));
+				currentAST.root = expressionSearch_AST;
+				currentAST.child = expressionSearch_AST!=null &&expressionSearch_AST.getFirstChild()!=null ?
+					expressionSearch_AST.getFirstChild() : expressionSearch_AST;
+				currentAST.advanceChildToEnd();
+			}
+			expressionSearch_AST = currentAST.root;
+		}
+		else {
+			throw new NoViableAltException(LT(1), getFilename());
+		}
+		
+		returnAST = expressionSearch_AST;
+	}
+	
+	public final void compareType() throws RecognitionException, TokenStreamException {
+		
+		returnAST = null;
+		ASTPair currentAST = new ASTPair();
+		AST compareType_AST = null;
+		
+		switch ( LA(1)) {
+		case LITERAL_contains:
+		{
+			AST tmp10_AST = null;
+			tmp10_AST = astFactory.create(LT(1));
+			astFactory.addASTChild(currentAST, tmp10_AST);
+			match(LITERAL_contains);
+			compareType_AST = currentAST.root;
+			break;
+		}
+		case LITERAL_matches:
+		{
+			AST tmp11_AST = null;
+			tmp11_AST = astFactory.create(LT(1));
+			astFactory.addASTChild(currentAST, tmp11_AST);
+			match(LITERAL_matches);
+			compareType_AST = currentAST.root;
+			break;
+		}
+		case EQUAL:
+		{
+			AST tmp12_AST = null;
+			tmp12_AST = astFactory.create(LT(1));
+			astFactory.addASTChild(currentAST, tmp12_AST);
+			match(EQUAL);
+			compareType_AST = currentAST.root;
+			break;
+		}
+		case EEQUAL:
+		{
+			AST tmp13_AST = null;
+			tmp13_AST = astFactory.create(LT(1));
+			astFactory.addASTChild(currentAST, tmp13_AST);
+			match(EEQUAL);
+			compareType_AST = currentAST.root;
+			break;
+		}
+		case NEQUAL:
+		{
+			AST tmp14_AST = null;
+			tmp14_AST = astFactory.create(LT(1));
+			astFactory.addASTChild(currentAST, tmp14_AST);
+			match(NEQUAL);
+			compareType_AST = currentAST.root;
+			break;
+		}
+		default:
+		{
+			throw new NoViableAltException(LT(1), getFilename());
+		}
+		}
+		returnAST = compareType_AST;
+	}
+	
+	
+	public static final String[] _tokenNames = {
+		"<0>",
+		"EOF",
+		"<2>",
+		"NULL_TREE_LOOKAHEAD",
+		"\"and\"",
+		"\"or\"",
+		"\"not\"",
+		"\"contains\"",
+		"\"matches\"",
+		"white space",
+		"'('",
+		"')'",
+		"'='",
+		"'=='",
+		"'!='",
+		"'\\\"'",
+		"a text literal",
+		"a letter",
+		"a field type",
+		"RegularExpression",
+		"And",
+		"Or",
+		"Not",
+		"ExpressionSearch"
+	};
+	
+	protected void buildTokenTypeASTClassMap() {
+		tokenTypeToASTClassMap=null;
+	}
+
+     private static final long[] mk_tokenSet_0() {
+         long[] data = { 328768L, 0L};
+         return data;
+     }
+	public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0());
+	private static final long[] mk_tokenSet_1() {
+		long[] data = { 357824L, 0L};
+		return data;
+	}
+	public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1());
+	private static final long[] mk_tokenSet_2() {
+		long[] data = { 29056L, 0L};
+		return data;
+	}
+	public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2());
+	
+	}
diff --git a/src/java/net/sf/jabref/search/SearchExpressionParserTokenTypes.java b/src/java/net/sf/jabref/search/SearchExpressionParserTokenTypes.java
index 6e453f6..abf0a05 100644
--- a/src/java/net/sf/jabref/search/SearchExpressionParserTokenTypes.java
+++ b/src/java/net/sf/jabref/search/SearchExpressionParserTokenTypes.java
@@ -1,43 +1,43 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// $ANTLR : "Parser.g" -> "SearchExpressionParser.java"$
-
-package net.sf.jabref.search;
-
-public interface SearchExpressionParserTokenTypes {
-	int EOF = 1;
-	int NULL_TREE_LOOKAHEAD = 3;
-	int LITERAL_and = 4;
-	int LITERAL_or = 5;
-	int LITERAL_not = 6;
-	int LITERAL_contains = 7;
-	int LITERAL_matches = 8;
-	int WS = 9;
-	int LPAREN = 10;
-	int RPAREN = 11;
-	int EQUAL = 12;
-	int EEQUAL = 13;
-	int NEQUAL = 14;
-	int QUOTE = 15;
-	int STRING = 16;
-	int LETTER = 17;
-	int FIELDTYPE = 18;
-	int RegularExpression = 19;
-	int And = 20;
-	int Or = 21;
-	int Not = 22;
-	int ExpressionSearch = 23;
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// $ANTLR : "Parser.g" -> "SearchExpressionParser.java"$
+
+package net.sf.jabref.search;
+
+public interface SearchExpressionParserTokenTypes {
+	int EOF = 1;
+	int NULL_TREE_LOOKAHEAD = 3;
+	int LITERAL_and = 4;
+	int LITERAL_or = 5;
+	int LITERAL_not = 6;
+	int LITERAL_contains = 7;
+	int LITERAL_matches = 8;
+	int WS = 9;
+	int LPAREN = 10;
+	int RPAREN = 11;
+	int EQUAL = 12;
+	int EEQUAL = 13;
+	int NEQUAL = 14;
+	int QUOTE = 15;
+	int STRING = 16;
+	int LETTER = 17;
+	int FIELDTYPE = 18;
+	int RegularExpression = 19;
+	int And = 20;
+	int Or = 21;
+	int Not = 22;
+	int ExpressionSearch = 23;
+}
diff --git a/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java b/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java
index d1c0845..9e52e2c 100644
--- a/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java
+++ b/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java
@@ -1,321 +1,321 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// $ANTLR : "TreeParser.g" -> "SearchExpressionTreeParser.java"$
-
-package net.sf.jabref.search;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.export.layout.format.RemoveLatexCommands;
-import antlr.MismatchedTokenException;
-import antlr.NoViableAltException;
-import antlr.RecognitionException;
-import antlr.collections.AST;
-
- at SuppressWarnings({"unused"})
-public class SearchExpressionTreeParser extends antlr.TreeParser       implements SearchExpressionTreeParserTokenTypes
- {
-
-    // Formatter used on every field before searching. Removes Latex commands that
-    // may interfere with the search:
-    static RemoveLatexCommands removeLatexCommands = new RemoveLatexCommands();
-
-    private static final int MATCH_EXACT = 0;
-	private static final int MATCH_CONTAINS = 1;
-	private static final int MATCH_DOES_NOT_CONTAIN = 2;
-
-	private BibtexEntry bibtexEntry;
-	private Object[] searchKeys;
-
-    private static final int PSEUDOFIELD_TYPE = 1;
-
-     public int apply(AST ast, BibtexEntry bibtexEntry) throws antlr.RecognitionException {
-		this.bibtexEntry = bibtexEntry;
-		// specification of fields to search is done in the search expression itself
-		this.searchKeys = bibtexEntry.getAllFields().toArray();
-		return tSearchExpression(ast) ? 1 : 0;
-	}
-public SearchExpressionTreeParser() {
-	tokenNames = _tokenNames;
-}
-
-	public final boolean  tSearchExpression(AST _t) throws RecognitionException, PatternSyntaxException {
-		boolean ret = false;
-
-        AST tSearchExpression_AST_in = (_t == ASTNULL) ? null : (AST)_t;
-		
-			boolean a = false, b = false;
-		
-		
-		try {      // for error handling
-			if (_t==null) _t=ASTNULL;
-			switch ( _t.getType()) {
-			case And:
-			{
-				AST __t87 = _t;
-				AST tmp1_AST_in = _t;
-				match(_t,And);
-				_t = _t.getFirstChild();
-				a=tSearchExpression(_t);
-				_t = _retTree;
-				{
-				if (_t==null) _t=ASTNULL;
-				if ((((_t.getType() >= And && _t.getType() <= ExpressionSearch)))&&(a)) {
-					b=tSearchExpression(_t);
-					_t = _retTree;
-				}
-				else if (((_t.getType() >= LITERAL_and && _t.getType() <= ExpressionSearch))) {
-					AST tmp2_AST_in = _t;
-					if ( _t==null ) throw new MismatchedTokenException();
-					_t = _t.getNextSibling();
-				}
-				else {
-					throw new NoViableAltException(_t);
-				}
-				
-				}
-				_t = __t87;
-				_t = _t.getNextSibling();
-				ret = a && b;
-				break;
-			}
-			case Or:
-			{
-				AST __t89 = _t;
-				AST tmp3_AST_in = _t;
-				match(_t,Or);
-				_t = _t.getFirstChild();
-				a=tSearchExpression(_t);
-				_t = _retTree;
-				{
-				if (_t==null) _t=ASTNULL;
-				if ((((_t.getType() >= And && _t.getType() <= ExpressionSearch)))&&(!a)) {
-					b=tSearchExpression(_t);
-					_t = _retTree;
-				}
-				else if (((_t.getType() >= LITERAL_and && _t.getType() <= ExpressionSearch))) {
-					AST tmp4_AST_in = _t;
-					if ( _t==null ) throw new MismatchedTokenException();
-					_t = _t.getNextSibling();
-				}
-				else {
-					throw new NoViableAltException(_t);
-				}
-				
-				}
-				_t = __t89;
-				_t = _t.getNextSibling();
-				ret = a || b;
-				break;
-			}
-			case Not:
-			{
-				AST __t91 = _t;
-				AST tmp5_AST_in = _t;
-				match(_t,Not);
-				_t = _t.getFirstChild();
-				a=tSearchExpression(_t);
-				_t = _retTree;
-				_t = __t91;
-				_t = _t.getNextSibling();
-				ret = !a;
-				break;
-			}
-			case ExpressionSearch:
-			{
-				ret=tExpressionSearch(_t);
-				_t = _retTree;
-				break;
-			}
-			default:
-			{
-				throw new NoViableAltException(_t);
-			}
-			}
-		}
-		catch (RecognitionException ex) {
-			reportError(ex);
-			if (_t!=null) {_t = _t.getNextSibling();}
-		}
-		_retTree = _t;
-		return ret;
-	}
-	
-	public final boolean  tExpressionSearch(AST _t) throws RecognitionException, PatternSyntaxException {
-		 boolean ret = false;
-
-		AST var_f = null;
-		AST var_v = null;
-		
-			int matchType = 0;
-		
-		
-		try {      // for error handling
-			AST __t94 = _t;
-			AST tmp6_AST_in = _t;
-			match(_t,ExpressionSearch);
-			_t = _t.getFirstChild();
-			var_f = _t;
-			match(_t,RegularExpression);
-			_t = _t.getNextSibling();
-			matchType=tSearchType(_t);
-			_t = _retTree;
-			var_v = _t;
-			match(_t,RegularExpression);
-			_t = _t.getNextSibling();
-			
-						Pattern fieldSpec = ((RegExNode)var_f).getPattern();
-						Pattern valueSpec = ((RegExNode)var_v).getPattern();
-			boolean noSuchField = true;
-						// this loop iterates over all regular keys, then over pseudo keys like "type"
-						for (int i = 0; i < searchKeys.length + PSEUDOFIELD_TYPE && !ret; ++i) {
-							String content;
-							switch (i - searchKeys.length + 1) {
-								case PSEUDOFIELD_TYPE:
-									if (!fieldSpec.matcher("entrytype").matches())
-										continue;
-									content = bibtexEntry.getType().getName();
-									break;
-								default: // regular field
-									if (!fieldSpec.matcher(searchKeys[i].toString()).matches())
-										continue;
-                                    String field = bibtexEntry.getField(searchKeys[i].toString());
-									content = field != null ? removeLatexCommands.format(field) : null;
-
-							}
-			noSuchField = false;
-							if (content == null)
-								continue; // paranoia
-							Matcher matcher = valueSpec.matcher(content);
-							switch (matchType) {
-							case MATCH_CONTAINS:
-								ret = matcher.find();
-								break;
-							case MATCH_EXACT:
-								ret = matcher.matches();
-								break;
-							case MATCH_DOES_NOT_CONTAIN:
-								ret = !matcher.find();
-								break;
-							}
-						}
-			if (noSuchField && matchType == MATCH_DOES_NOT_CONTAIN)
-			ret = true; // special case
-					
-			_t = __t94;
-			_t = _t.getNextSibling();
-		}
-		catch (RecognitionException ex) {
-			reportError(ex);
-			if (_t!=null) {_t = _t.getNextSibling();}
-		}
-		_retTree = _t;
-		return ret;
-	}
-	
-	public final int  tSearchType(AST _t) throws RecognitionException {
-		 int matchType = 0;
-
-        AST tSearchType_AST_in = (_t == ASTNULL) ? null : (AST)_t;
-		
-		try {      // for error handling
-			if (_t==null) _t=ASTNULL;
-			switch ( _t.getType()) {
-			case LITERAL_contains:
-			{
-				AST tmp7_AST_in = _t;
-				match(_t,LITERAL_contains);
-				_t = _t.getNextSibling();
-				matchType = MATCH_CONTAINS;
-				break;
-			}
-			case LITERAL_matches:
-			{
-				AST tmp8_AST_in = _t;
-				match(_t,LITERAL_matches);
-				_t = _t.getNextSibling();
-				matchType = MATCH_EXACT;
-				break;
-			}
-			case EQUAL:
-			{
-				AST tmp9_AST_in = _t;
-				match(_t,EQUAL);
-				_t = _t.getNextSibling();
-				matchType = MATCH_CONTAINS;
-				break;
-			}
-			case EEQUAL:
-			{
-				AST tmp10_AST_in = _t;
-				match(_t,EEQUAL);
-				_t = _t.getNextSibling();
-				matchType = MATCH_EXACT;
-				break;
-			}
-			case NEQUAL:
-			{
-				AST tmp11_AST_in = _t;
-				match(_t,NEQUAL);
-				_t = _t.getNextSibling();
-				matchType = MATCH_DOES_NOT_CONTAIN;
-				break;
-			}
-			default:
-			{
-				throw new NoViableAltException(_t);
-			}
-			}
-		}
-		catch (RecognitionException ex) {
-			reportError(ex);
-			if (_t!=null) {_t = _t.getNextSibling();}
-		}
-		_retTree = _t;
-		return matchType;
-	}
-	
-	
-	public static final String[] _tokenNames = {
-		"<0>",
-		"EOF",
-		"<2>",
-		"NULL_TREE_LOOKAHEAD",
-		"\"and\"",
-		"\"or\"",
-		"\"not\"",
-		"\"contains\"",
-		"\"matches\"",
-		"white space",
-		"'('",
-		"')'",
-		"'='",
-		"'=='",
-		"'!='",
-		"'\\\"'",
-		"a text literal",
-		"a letter",
-		"a field type",
-		"RegularExpression",
-		"And",
-		"Or",
-		"Not",
-		"ExpressionSearch"
-	};
-	
-	}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// $ANTLR : "TreeParser.g" -> "SearchExpressionTreeParser.java"$
+
+package net.sf.jabref.search;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
+import antlr.MismatchedTokenException;
+import antlr.NoViableAltException;
+import antlr.RecognitionException;
+import antlr.collections.AST;
+
+ at SuppressWarnings({"unused"})
+public class SearchExpressionTreeParser extends antlr.TreeParser       implements SearchExpressionTreeParserTokenTypes
+ {
+
+    // Formatter used on every field before searching. Removes Latex commands that
+    // may interfere with the search:
+    static RemoveLatexCommands removeLatexCommands = new RemoveLatexCommands();
+
+    private static final int MATCH_EXACT = 0;
+	private static final int MATCH_CONTAINS = 1;
+	private static final int MATCH_DOES_NOT_CONTAIN = 2;
+
+	private BibtexEntry bibtexEntry;
+	private Object[] searchKeys;
+
+    private static final int PSEUDOFIELD_TYPE = 1;
+
+     public int apply(AST ast, BibtexEntry bibtexEntry) throws antlr.RecognitionException {
+		this.bibtexEntry = bibtexEntry;
+		// specification of fields to search is done in the search expression itself
+		this.searchKeys = bibtexEntry.getAllFields().toArray();
+		return tSearchExpression(ast) ? 1 : 0;
+	}
+public SearchExpressionTreeParser() {
+	tokenNames = _tokenNames;
+}
+
+	public final boolean  tSearchExpression(AST _t) throws RecognitionException, PatternSyntaxException {
+		boolean ret = false;
+
+        AST tSearchExpression_AST_in = (_t == ASTNULL) ? null : (AST)_t;
+		
+			boolean a = false, b = false;
+		
+		
+		try {      // for error handling
+			if (_t==null) _t=ASTNULL;
+			switch ( _t.getType()) {
+			case And:
+			{
+				AST __t87 = _t;
+				AST tmp1_AST_in = _t;
+				match(_t,And);
+				_t = _t.getFirstChild();
+				a=tSearchExpression(_t);
+				_t = _retTree;
+				{
+				if (_t==null) _t=ASTNULL;
+				if ((((_t.getType() >= And && _t.getType() <= ExpressionSearch)))&&(a)) {
+					b=tSearchExpression(_t);
+					_t = _retTree;
+				}
+				else if (((_t.getType() >= LITERAL_and && _t.getType() <= ExpressionSearch))) {
+					AST tmp2_AST_in = _t;
+					if ( _t==null ) throw new MismatchedTokenException();
+					_t = _t.getNextSibling();
+				}
+				else {
+					throw new NoViableAltException(_t);
+				}
+				
+				}
+				_t = __t87;
+				_t = _t.getNextSibling();
+				ret = a && b;
+				break;
+			}
+			case Or:
+			{
+				AST __t89 = _t;
+				AST tmp3_AST_in = _t;
+				match(_t,Or);
+				_t = _t.getFirstChild();
+				a=tSearchExpression(_t);
+				_t = _retTree;
+				{
+				if (_t==null) _t=ASTNULL;
+				if ((((_t.getType() >= And && _t.getType() <= ExpressionSearch)))&&(!a)) {
+					b=tSearchExpression(_t);
+					_t = _retTree;
+				}
+				else if (((_t.getType() >= LITERAL_and && _t.getType() <= ExpressionSearch))) {
+					AST tmp4_AST_in = _t;
+					if ( _t==null ) throw new MismatchedTokenException();
+					_t = _t.getNextSibling();
+				}
+				else {
+					throw new NoViableAltException(_t);
+				}
+				
+				}
+				_t = __t89;
+				_t = _t.getNextSibling();
+				ret = a || b;
+				break;
+			}
+			case Not:
+			{
+				AST __t91 = _t;
+				AST tmp5_AST_in = _t;
+				match(_t,Not);
+				_t = _t.getFirstChild();
+				a=tSearchExpression(_t);
+				_t = _retTree;
+				_t = __t91;
+				_t = _t.getNextSibling();
+				ret = !a;
+				break;
+			}
+			case ExpressionSearch:
+			{
+				ret=tExpressionSearch(_t);
+				_t = _retTree;
+				break;
+			}
+			default:
+			{
+				throw new NoViableAltException(_t);
+			}
+			}
+		}
+		catch (RecognitionException ex) {
+			reportError(ex);
+			if (_t!=null) {_t = _t.getNextSibling();}
+		}
+		_retTree = _t;
+		return ret;
+	}
+	
+	public final boolean  tExpressionSearch(AST _t) throws RecognitionException, PatternSyntaxException {
+		 boolean ret = false;
+
+		AST var_f = null;
+		AST var_v = null;
+		
+			int matchType = 0;
+		
+		
+		try {      // for error handling
+			AST __t94 = _t;
+			AST tmp6_AST_in = _t;
+			match(_t,ExpressionSearch);
+			_t = _t.getFirstChild();
+			var_f = _t;
+			match(_t,RegularExpression);
+			_t = _t.getNextSibling();
+			matchType=tSearchType(_t);
+			_t = _retTree;
+			var_v = _t;
+			match(_t,RegularExpression);
+			_t = _t.getNextSibling();
+			
+						Pattern fieldSpec = ((RegExNode)var_f).getPattern();
+						Pattern valueSpec = ((RegExNode)var_v).getPattern();
+			boolean noSuchField = true;
+						// this loop iterates over all regular keys, then over pseudo keys like "type"
+						for (int i = 0; i < searchKeys.length + PSEUDOFIELD_TYPE && !ret; ++i) {
+							String content;
+							switch (i - searchKeys.length + 1) {
+								case PSEUDOFIELD_TYPE:
+									if (!fieldSpec.matcher("entrytype").matches())
+										continue;
+									content = bibtexEntry.getType().getName();
+									break;
+								default: // regular field
+									if (!fieldSpec.matcher(searchKeys[i].toString()).matches())
+										continue;
+                                    String field = bibtexEntry.getField(searchKeys[i].toString());
+									content = field != null ? removeLatexCommands.format(field) : null;
+
+							}
+			noSuchField = false;
+							if (content == null)
+								continue; // paranoia
+							Matcher matcher = valueSpec.matcher(content);
+							switch (matchType) {
+							case MATCH_CONTAINS:
+								ret = matcher.find();
+								break;
+							case MATCH_EXACT:
+								ret = matcher.matches();
+								break;
+							case MATCH_DOES_NOT_CONTAIN:
+								ret = !matcher.find();
+								break;
+							}
+						}
+			if (noSuchField && matchType == MATCH_DOES_NOT_CONTAIN)
+			ret = true; // special case
+					
+			_t = __t94;
+			_t = _t.getNextSibling();
+		}
+		catch (RecognitionException ex) {
+			reportError(ex);
+			if (_t!=null) {_t = _t.getNextSibling();}
+		}
+		_retTree = _t;
+		return ret;
+	}
+	
+	public final int  tSearchType(AST _t) throws RecognitionException {
+		 int matchType = 0;
+
+        AST tSearchType_AST_in = (_t == ASTNULL) ? null : (AST)_t;
+		
+		try {      // for error handling
+			if (_t==null) _t=ASTNULL;
+			switch ( _t.getType()) {
+			case LITERAL_contains:
+			{
+				AST tmp7_AST_in = _t;
+				match(_t,LITERAL_contains);
+				_t = _t.getNextSibling();
+				matchType = MATCH_CONTAINS;
+				break;
+			}
+			case LITERAL_matches:
+			{
+				AST tmp8_AST_in = _t;
+				match(_t,LITERAL_matches);
+				_t = _t.getNextSibling();
+				matchType = MATCH_EXACT;
+				break;
+			}
+			case EQUAL:
+			{
+				AST tmp9_AST_in = _t;
+				match(_t,EQUAL);
+				_t = _t.getNextSibling();
+				matchType = MATCH_CONTAINS;
+				break;
+			}
+			case EEQUAL:
+			{
+				AST tmp10_AST_in = _t;
+				match(_t,EEQUAL);
+				_t = _t.getNextSibling();
+				matchType = MATCH_EXACT;
+				break;
+			}
+			case NEQUAL:
+			{
+				AST tmp11_AST_in = _t;
+				match(_t,NEQUAL);
+				_t = _t.getNextSibling();
+				matchType = MATCH_DOES_NOT_CONTAIN;
+				break;
+			}
+			default:
+			{
+				throw new NoViableAltException(_t);
+			}
+			}
+		}
+		catch (RecognitionException ex) {
+			reportError(ex);
+			if (_t!=null) {_t = _t.getNextSibling();}
+		}
+		_retTree = _t;
+		return matchType;
+	}
+	
+	
+	public static final String[] _tokenNames = {
+		"<0>",
+		"EOF",
+		"<2>",
+		"NULL_TREE_LOOKAHEAD",
+		"\"and\"",
+		"\"or\"",
+		"\"not\"",
+		"\"contains\"",
+		"\"matches\"",
+		"white space",
+		"'('",
+		"')'",
+		"'='",
+		"'=='",
+		"'!='",
+		"'\\\"'",
+		"a text literal",
+		"a letter",
+		"a field type",
+		"RegularExpression",
+		"And",
+		"Or",
+		"Not",
+		"ExpressionSearch"
+	};
+	
+	}
diff --git a/src/java/net/sf/jabref/search/SearchExpressionTreeParserTokenTypes.java b/src/java/net/sf/jabref/search/SearchExpressionTreeParserTokenTypes.java
index 6a5c5a4..0a8b0ab 100644
--- a/src/java/net/sf/jabref/search/SearchExpressionTreeParserTokenTypes.java
+++ b/src/java/net/sf/jabref/search/SearchExpressionTreeParserTokenTypes.java
@@ -1,43 +1,43 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// $ANTLR : "TreeParser.g" -> "SearchExpressionTreeParser.java"$
-
-package net.sf.jabref.search;
-
-public interface SearchExpressionTreeParserTokenTypes {
-	int EOF = 1;
-	int NULL_TREE_LOOKAHEAD = 3;
-	int LITERAL_and = 4;
-	int LITERAL_or = 5;
-	int LITERAL_not = 6;
-	int LITERAL_contains = 7;
-	int LITERAL_matches = 8;
-	int WS = 9;
-	int LPAREN = 10;
-	int RPAREN = 11;
-	int EQUAL = 12;
-	int EEQUAL = 13;
-	int NEQUAL = 14;
-	int QUOTE = 15;
-	int STRING = 16;
-	int LETTER = 17;
-	int FIELDTYPE = 18;
-	int RegularExpression = 19;
-	int And = 20;
-	int Or = 21;
-	int Not = 22;
-	int ExpressionSearch = 23;
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// $ANTLR : "TreeParser.g" -> "SearchExpressionTreeParser.java"$
+
+package net.sf.jabref.search;
+
+public interface SearchExpressionTreeParserTokenTypes {
+	int EOF = 1;
+	int NULL_TREE_LOOKAHEAD = 3;
+	int LITERAL_and = 4;
+	int LITERAL_or = 5;
+	int LITERAL_not = 6;
+	int LITERAL_contains = 7;
+	int LITERAL_matches = 8;
+	int WS = 9;
+	int LPAREN = 10;
+	int RPAREN = 11;
+	int EQUAL = 12;
+	int EEQUAL = 13;
+	int NEQUAL = 14;
+	int QUOTE = 15;
+	int STRING = 16;
+	int LETTER = 17;
+	int FIELDTYPE = 18;
+	int RegularExpression = 19;
+	int And = 20;
+	int Or = 21;
+	int Not = 22;
+	int ExpressionSearch = 23;
+}
diff --git a/src/java/net/sf/jabref/search/SearchMatcher.java b/src/java/net/sf/jabref/search/SearchMatcher.java
index 7a56459..1b21676 100644
--- a/src/java/net/sf/jabref/search/SearchMatcher.java
+++ b/src/java/net/sf/jabref/search/SearchMatcher.java
@@ -1,32 +1,32 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.search;
-
-import net.sf.jabref.BibtexEntry;
-import ca.odell.glazedlists.matchers.Matcher;
-
-/**
- * Matcher for filtering or sorting the table according to whether entries are
- * tagged as search matches.
- */
-public class SearchMatcher implements Matcher<BibtexEntry> {
-
-	public static SearchMatcher INSTANCE = new SearchMatcher();
-
-	public boolean matches(BibtexEntry entry) {
-		return entry.isSearchHit();
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.search;
+
+import net.sf.jabref.BibtexEntry;
+import ca.odell.glazedlists.matchers.Matcher;
+
+/**
+ * Matcher for filtering or sorting the table according to whether entries are
+ * tagged as search matches.
+ */
+public class SearchMatcher implements Matcher<BibtexEntry> {
+
+	public static SearchMatcher INSTANCE = new SearchMatcher();
+
+	public boolean matches(BibtexEntry entry) {
+		return entry.isSearchHit();
+	}
+}
diff --git a/src/java/net/sf/jabref/search/TreeParser.g b/src/java/net/sf/jabref/search/TreeParser.g
index 6d9bf0a..976721a 100644
--- a/src/java/net/sf/jabref/search/TreeParser.g
+++ b/src/java/net/sf/jabref/search/TreeParser.g
@@ -1,110 +1,110 @@
-header {
-package net.sf.jabref.search;
-import java.util.*;
-import java.util.regex.*;
-import net.sf.jabref.*;
-}
-
-class SearchExpressionTreeParser extends TreeParser;
-
-options {
-	importVocab = SearchExpressionParser;
-	exportVocab = SearchExpressionTreeParser;
-}
-
-{
-	private static final int MATCH_EXACT = 0;
-	private static final int MATCH_CONTAINS = 1;
-	private static final int MATCH_DOES_NOT_CONTAIN = 2;
-
-	private BibtexEntry bibtexEntry;
-	private Object[] searchKeys;
-
-    private static final int PSEUDOFIELD_TYPE = 1;
-
-    public int apply(AST ast, BibtexEntry bibtexEntry) throws antlr.RecognitionException {
-		this.bibtexEntry = bibtexEntry;
-		// specification of fields to search is done in the search expression itself
-		this.searchKeys = bibtexEntry.getAllFields();
-		return tSearchExpression(ast) ? 1 : 0;
-	}
-}
-
-
-
-// ---------- Condition and Expressions ----------
-
-tSearchExpression returns [boolean ret = false;] throws PatternSyntaxException
-{
-	boolean a = false, b = false;
-}
-	: // predicates for and/or used to evaluate 2nd expression only if necessary
-	#( And a=tSearchExpression ( {a}? b=tSearchExpression | . ) ) { ret = a && b; }
-	|
-	#( Or a=tSearchExpression ( {!a}? b=tSearchExpression | . ) ) { ret = a || b; }
-	|
-	#( Not a=tSearchExpression ) { ret = !a; }
-	|
-	ret=tExpressionSearch
-	;
-
-tSearchType returns [ int matchType = 0; ]
-	:
-	LITERAL_contains { matchType = MATCH_CONTAINS; }
-	|
-	LITERAL_matches { matchType = MATCH_EXACT; }
-	|
-	EQUAL { matchType = MATCH_CONTAINS; }
-	|
-	EEQUAL { matchType = MATCH_EXACT; }
-	|
-	NEQUAL { matchType = MATCH_DOES_NOT_CONTAIN; }
-	;
-
-tExpressionSearch returns [ boolean ret = false; ] throws PatternSyntaxException
-{
-	int matchType = 0;
-}
-	:
-	#( ExpressionSearch var_f:RegularExpression matchType=tSearchType var_v:RegularExpression
-		{
-			Pattern fieldSpec = ((RegExNode)var_f).getPattern();
-			Pattern valueSpec = ((RegExNode)var_v).getPattern();
-			int pseudoField = 0;
-            boolean noSuchField = true;
-			// this loop iterates over all regular keys, then over pseudo keys like "type"
-			for (int i = 0; i < searchKeys.length + PSEUDOFIELD_TYPE && !ret; ++i) {
-				String content;
-				switch (i - searchKeys.length + 1) {
-					case PSEUDOFIELD_TYPE:
-						if (!fieldSpec.matcher("entrytype").matches())
-							continue;
-						content = bibtexEntry.getType().getName();
-						break;
-					default: // regular field
-						if (!fieldSpec.matcher(searchKeys[i].toString()).matches())
-							continue;
-						content = (String)bibtexEntry.getField(searchKeys[i].toString());
-				}
-                noSuchField = false;
-				if (content == null)
-					continue; // paranoia
-				Matcher matcher = valueSpec.matcher(content);
-				switch (matchType) {
-				case MATCH_CONTAINS:
-					ret = matcher.find();
-					break;
-				case MATCH_EXACT:
-					ret = matcher.matches();
-					break;
-				case MATCH_DOES_NOT_CONTAIN:
-					ret = !matcher.find();
-					break;
-				}
-			}
-            if (noSuchField && matchType == MATCH_DOES_NOT_CONTAIN)
-                ret = true; // special case
-		}
-	)
-	;
-
+header {
+package net.sf.jabref.search;
+import java.util.*;
+import java.util.regex.*;
+import net.sf.jabref.*;
+}
+
+class SearchExpressionTreeParser extends TreeParser;
+
+options {
+	importVocab = SearchExpressionParser;
+	exportVocab = SearchExpressionTreeParser;
+}
+
+{
+	private static final int MATCH_EXACT = 0;
+	private static final int MATCH_CONTAINS = 1;
+	private static final int MATCH_DOES_NOT_CONTAIN = 2;
+
+	private BibtexEntry bibtexEntry;
+	private Object[] searchKeys;
+
+    private static final int PSEUDOFIELD_TYPE = 1;
+
+    public int apply(AST ast, BibtexEntry bibtexEntry) throws antlr.RecognitionException {
+		this.bibtexEntry = bibtexEntry;
+		// specification of fields to search is done in the search expression itself
+		this.searchKeys = bibtexEntry.getAllFields();
+		return tSearchExpression(ast) ? 1 : 0;
+	}
+}
+
+
+
+// ---------- Condition and Expressions ----------
+
+tSearchExpression returns [boolean ret = false;] throws PatternSyntaxException
+{
+	boolean a = false, b = false;
+}
+	: // predicates for and/or used to evaluate 2nd expression only if necessary
+	#( And a=tSearchExpression ( {a}? b=tSearchExpression | . ) ) { ret = a && b; }
+	|
+	#( Or a=tSearchExpression ( {!a}? b=tSearchExpression | . ) ) { ret = a || b; }
+	|
+	#( Not a=tSearchExpression ) { ret = !a; }
+	|
+	ret=tExpressionSearch
+	;
+
+tSearchType returns [ int matchType = 0; ]
+	:
+	LITERAL_contains { matchType = MATCH_CONTAINS; }
+	|
+	LITERAL_matches { matchType = MATCH_EXACT; }
+	|
+	EQUAL { matchType = MATCH_CONTAINS; }
+	|
+	EEQUAL { matchType = MATCH_EXACT; }
+	|
+	NEQUAL { matchType = MATCH_DOES_NOT_CONTAIN; }
+	;
+
+tExpressionSearch returns [ boolean ret = false; ] throws PatternSyntaxException
+{
+	int matchType = 0;
+}
+	:
+	#( ExpressionSearch var_f:RegularExpression matchType=tSearchType var_v:RegularExpression
+		{
+			Pattern fieldSpec = ((RegExNode)var_f).getPattern();
+			Pattern valueSpec = ((RegExNode)var_v).getPattern();
+			int pseudoField = 0;
+            boolean noSuchField = true;
+			// this loop iterates over all regular keys, then over pseudo keys like "type"
+			for (int i = 0; i < searchKeys.length + PSEUDOFIELD_TYPE && !ret; ++i) {
+				String content;
+				switch (i - searchKeys.length + 1) {
+					case PSEUDOFIELD_TYPE:
+						if (!fieldSpec.matcher("entrytype").matches())
+							continue;
+						content = bibtexEntry.getType().getName();
+						break;
+					default: // regular field
+						if (!fieldSpec.matcher(searchKeys[i].toString()).matches())
+							continue;
+						content = (String)bibtexEntry.getField(searchKeys[i].toString());
+				}
+                noSuchField = false;
+				if (content == null)
+					continue; // paranoia
+				Matcher matcher = valueSpec.matcher(content);
+				switch (matchType) {
+				case MATCH_CONTAINS:
+					ret = matcher.find();
+					break;
+				case MATCH_EXACT:
+					ret = matcher.matches();
+					break;
+				case MATCH_DOES_NOT_CONTAIN:
+					ret = !matcher.find();
+					break;
+				}
+			}
+            if (noSuchField && matchType == MATCH_DOES_NOT_CONTAIN)
+                ret = true; // special case
+		}
+	)
+	;
+
diff --git a/src/java/net/sf/jabref/specialfields/Priority.java b/src/java/net/sf/jabref/specialfields/Priority.java
index 94afdb9..6618889 100644
--- a/src/java/net/sf/jabref/specialfields/Priority.java
+++ b/src/java/net/sf/jabref/specialfields/Priority.java
@@ -1,68 +1,68 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.specialfields;
-
-import java.util.ArrayList;
-
-import javax.swing.ImageIcon;
-import javax.swing.JLabel;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-
-public class Priority extends SpecialField {
-	
-	private static Priority INSTANCE = null;
-	
-	private ImageIcon icon = new ImageIcon(GUIGlobals.getIconUrl("priority"));
-	
-	public Priority() {
-		ArrayList<SpecialFieldValue> values = new ArrayList<SpecialFieldValue>();
-		values.add(new SpecialFieldValue(this, null, "clearPriority", Globals.lang("Clear priority"), null, Globals.lang("No priority information")));
-		ImageIcon icon;
-		icon = GUIGlobals.getImage("red");
-		values.add(new SpecialFieldValue(this, "prio1", "setPriority1", Globals.lang("Set priority to high"), icon, Globals.lang("Priority high")));
-		icon = GUIGlobals.getImage("orange");
-		values.add(new SpecialFieldValue(this, "prio2", "setPriority2", Globals.lang("Set priority to medium"), icon, Globals.lang("Priority medium")));
-		icon = GUIGlobals.getImage("green");
-		values.add(new SpecialFieldValue(this, "prio3", "setPriority3", Globals.lang("Set priority to low"), icon, Globals.lang("Priority low")));
-		this.setValues(values);
-		TEXT_DONE_PATTERN = "Set priority %0 for %1 entries";
-	}
-	
-	public static Priority getInstance() {
-		if (INSTANCE == null) {
-			INSTANCE = new Priority();
-		}
-		return INSTANCE;
-	}
-	
-	public String getFieldName() {
-		return SpecialFieldsUtils.FIELDNAME_PRIORITY;
-	}
-	
-	public ImageIcon getRepresentingIcon() {
-		return this.icon;
-	}
-	
-	public String getToolTip() {
-		return Globals.lang("Priority");
-	}
-	
-	public String getMenuString() {
-		return Globals.lang("Priority");
-	}
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.specialfields;
+
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+
+public class Priority extends SpecialField {
+	
+	private static Priority INSTANCE = null;
+	
+	private ImageIcon icon = new ImageIcon(GUIGlobals.getIconUrl("priority"));
+	
+	public Priority() {
+		ArrayList<SpecialFieldValue> values = new ArrayList<SpecialFieldValue>();
+		values.add(new SpecialFieldValue(this, null, "clearPriority", Globals.lang("Clear priority"), null, Globals.lang("No priority information")));
+		ImageIcon icon;
+		icon = GUIGlobals.getImage("red");
+		values.add(new SpecialFieldValue(this, "prio1", "setPriority1", Globals.lang("Set priority to high"), icon, Globals.lang("Priority high")));
+		icon = GUIGlobals.getImage("orange");
+		values.add(new SpecialFieldValue(this, "prio2", "setPriority2", Globals.lang("Set priority to medium"), icon, Globals.lang("Priority medium")));
+		icon = GUIGlobals.getImage("green");
+		values.add(new SpecialFieldValue(this, "prio3", "setPriority3", Globals.lang("Set priority to low"), icon, Globals.lang("Priority low")));
+		this.setValues(values);
+		TEXT_DONE_PATTERN = "Set priority %0 for %1 entries";
+	}
+	
+	public static Priority getInstance() {
+		if (INSTANCE == null) {
+			INSTANCE = new Priority();
+		}
+		return INSTANCE;
+	}
+	
+	public String getFieldName() {
+		return SpecialFieldsUtils.FIELDNAME_PRIORITY;
+	}
+	
+	public ImageIcon getRepresentingIcon() {
+		return this.icon;
+	}
+	
+	public String getToolTip() {
+		return Globals.lang("Priority");
+	}
+	
+	public String getMenuString() {
+		return Globals.lang("Priority");
+	}
+}
diff --git a/src/java/net/sf/jabref/specialfields/Quality.java b/src/java/net/sf/jabref/specialfields/Quality.java
index 6d12969..8b96067 100644
--- a/src/java/net/sf/jabref/specialfields/Quality.java
+++ b/src/java/net/sf/jabref/specialfields/Quality.java
@@ -1,64 +1,64 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.specialfields;
-
-import java.util.ArrayList;
-
-import javax.swing.ImageIcon;
-import javax.swing.JLabel;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-
-public class Quality extends SpecialField {
-
-	private static Quality INSTANCE;
-
-	public Quality() {
-		ArrayList<SpecialFieldValue> values = new ArrayList<SpecialFieldValue>();
-    	values.add(new SpecialFieldValue(this, "qualityAssured", "toggleQualityAssured", Globals.lang("Toogle quality assured"), GUIGlobals.getImage("qualityAssured"), Globals.lang("Toogle quality assured")));
-		this.setValues(values);
-		TEXT_DONE_PATTERN = "Toggled quality for %0 entries";
-	}
-	
-	public String getFieldName() {
-		return SpecialFieldsUtils.FIELDNAME_QUALITY;
-	}
-
-	public static Quality getInstance() {
-		if (INSTANCE == null) {
-			INSTANCE = new Quality();
-		}
-		return INSTANCE;
-	}
-	
-	public ImageIcon getRepresentingIcon() {
-		return this.getValues().get(0).getIcon();
-	}
-
-	public String getToolTip() {
-		return this.getValues().get(0).getToolTipText();
-	}
-
-	public String getMenuString() {
-		return Globals.lang("Quality");
-	}
-	
-	public boolean isSingleValueField() {
-		return true;
-	}
-
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.specialfields;
+
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+
+public class Quality extends SpecialField {
+
+	private static Quality INSTANCE;
+
+	public Quality() {
+		ArrayList<SpecialFieldValue> values = new ArrayList<SpecialFieldValue>();
+    	values.add(new SpecialFieldValue(this, "qualityAssured", "toggleQualityAssured", Globals.lang("Toogle quality assured"), GUIGlobals.getImage("qualityAssured"), Globals.lang("Toogle quality assured")));
+		this.setValues(values);
+		TEXT_DONE_PATTERN = "Toggled quality for %0 entries";
+	}
+	
+	public String getFieldName() {
+		return SpecialFieldsUtils.FIELDNAME_QUALITY;
+	}
+
+	public static Quality getInstance() {
+		if (INSTANCE == null) {
+			INSTANCE = new Quality();
+		}
+		return INSTANCE;
+	}
+	
+	public ImageIcon getRepresentingIcon() {
+		return this.getValues().get(0).getIcon();
+	}
+
+	public String getToolTip() {
+		return this.getValues().get(0).getToolTipText();
+	}
+
+	public String getMenuString() {
+		return Globals.lang("Quality");
+	}
+	
+	public boolean isSingleValueField() {
+		return true;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/specialfields/Rank.java b/src/java/net/sf/jabref/specialfields/Rank.java
index 7a174ac..735c593 100644
--- a/src/java/net/sf/jabref/specialfields/Rank.java
+++ b/src/java/net/sf/jabref/specialfields/Rank.java
@@ -1,52 +1,52 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.specialfields;
-
-import java.util.ArrayList;
-
-import javax.swing.ImageIcon;
-import javax.swing.JLabel;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-
-public abstract class Rank extends SpecialField {
-	
-	public Rank() {
-		TEXT_DONE_PATTERN = "Set rank %0 for %1 entries";
-	}
-
-	public static Rank getInstance() {
-		if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_RANKING_COMPACT)) {
-			return RankCompact.getInstance();
-		} else {
-			return RankExtended.getInstance();
-		}
-	}
-	
-	public String getFieldName() {
-		return SpecialFieldsUtils.FIELDNAME_RANKING;
-	}
-
-	public String getToolTip() {
-		return Globals.lang("Rank");
-	}
-	
-	public String getMenuString() {
-		return Globals.lang("Rank");
-	}
-	
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.specialfields;
+
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+
+public abstract class Rank extends SpecialField {
+	
+	public Rank() {
+		TEXT_DONE_PATTERN = "Set rank %0 for %1 entries";
+	}
+
+	public static Rank getInstance() {
+		if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_RANKING_COMPACT)) {
+			return RankCompact.getInstance();
+		} else {
+			return RankExtended.getInstance();
+		}
+	}
+	
+	public String getFieldName() {
+		return SpecialFieldsUtils.FIELDNAME_RANKING;
+	}
+
+	public String getToolTip() {
+		return Globals.lang("Rank");
+	}
+	
+	public String getMenuString() {
+		return Globals.lang("Rank");
+	}
+	
+}
diff --git a/src/java/net/sf/jabref/specialfields/RankCompact.java b/src/java/net/sf/jabref/specialfields/RankCompact.java
index c561fec..1965c00 100644
--- a/src/java/net/sf/jabref/specialfields/RankCompact.java
+++ b/src/java/net/sf/jabref/specialfields/RankCompact.java
@@ -1,38 +1,38 @@
-package net.sf.jabref.specialfields;
-
-import java.util.ArrayList;
-
-import javax.swing.ImageIcon;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-
-public class RankCompact extends Rank {
-
-	private static RankCompact INSTANCE = null;
-
-	public RankCompact() {
-		ArrayList<SpecialFieldValue> values = new ArrayList<SpecialFieldValue>();
-    	//lab.setName("i");
-		values.add(new SpecialFieldValue(this, null, "clearRank", Globals.lang("Clear rank"), null, Globals.lang("No rank information")));
-		values.add(new SpecialFieldValue(this, "rank1", "setRank1", Globals.lang("Set rank to one star"), GUIGlobals.getImage("rankc1"), Globals.lang("One star")));
-		values.add(new SpecialFieldValue(this, "rank2", "setRank2", Globals.lang("Set rank to two stars"), GUIGlobals.getImage("rankc2"), Globals.lang("Two stars")));
-		values.add(new SpecialFieldValue(this, "rank3", "setRank3", Globals.lang("Set rank to three stars"), GUIGlobals.getImage("rankc3"), Globals.lang("Three stars")));
-		values.add(new SpecialFieldValue(this, "rank4", "setRank4", Globals.lang("Set rank to four stars"), GUIGlobals.getImage("rankc4"), Globals.lang("Four stars")));
-		values.add(new SpecialFieldValue(this, "rank5", "setRank5", Globals.lang("Set rank to five stars"), GUIGlobals.getImage("rankc5"), Globals.lang("Five stars")));
-		this.setValues(values);
-		TEXT_DONE_PATTERN = "Set rank %0 for %1 entries";
-	}
-
-	public static RankCompact getInstance() {
-		if (INSTANCE  == null) {
-			INSTANCE = new RankCompact();
-		}
-		return INSTANCE;
-	}	
-	
-    public ImageIcon getRepresentingIcon() {
-    	return GUIGlobals.getImage("ranking");
-    }
-
-}
+package net.sf.jabref.specialfields;
+
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+
+public class RankCompact extends Rank {
+
+	private static RankCompact INSTANCE = null;
+
+	public RankCompact() {
+		ArrayList<SpecialFieldValue> values = new ArrayList<SpecialFieldValue>();
+    	//lab.setName("i");
+		values.add(new SpecialFieldValue(this, null, "clearRank", Globals.lang("Clear rank"), null, Globals.lang("No rank information")));
+		values.add(new SpecialFieldValue(this, "rank1", "setRank1", Globals.lang("Set rank to one star"), GUIGlobals.getImage("rankc1"), Globals.lang("One star")));
+		values.add(new SpecialFieldValue(this, "rank2", "setRank2", Globals.lang("Set rank to two stars"), GUIGlobals.getImage("rankc2"), Globals.lang("Two stars")));
+		values.add(new SpecialFieldValue(this, "rank3", "setRank3", Globals.lang("Set rank to three stars"), GUIGlobals.getImage("rankc3"), Globals.lang("Three stars")));
+		values.add(new SpecialFieldValue(this, "rank4", "setRank4", Globals.lang("Set rank to four stars"), GUIGlobals.getImage("rankc4"), Globals.lang("Four stars")));
+		values.add(new SpecialFieldValue(this, "rank5", "setRank5", Globals.lang("Set rank to five stars"), GUIGlobals.getImage("rankc5"), Globals.lang("Five stars")));
+		this.setValues(values);
+		TEXT_DONE_PATTERN = "Set rank %0 for %1 entries";
+	}
+
+	public static RankCompact getInstance() {
+		if (INSTANCE  == null) {
+			INSTANCE = new RankCompact();
+		}
+		return INSTANCE;
+	}	
+	
+    public ImageIcon getRepresentingIcon() {
+    	return GUIGlobals.getImage("ranking");
+    }
+
+}
diff --git a/src/java/net/sf/jabref/specialfields/RankExtended.java b/src/java/net/sf/jabref/specialfields/RankExtended.java
index 2384f5d..646017a 100644
--- a/src/java/net/sf/jabref/specialfields/RankExtended.java
+++ b/src/java/net/sf/jabref/specialfields/RankExtended.java
@@ -1,38 +1,38 @@
-package net.sf.jabref.specialfields;
-
-import java.util.ArrayList;
-
-import javax.swing.ImageIcon;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-
-public class RankExtended extends Rank {
-
-	private static RankExtended INSTANCE = null;
-
-	public RankExtended() {
-		super();
-		ArrayList<SpecialFieldValue> values = new ArrayList<SpecialFieldValue>();
-		values.add(new SpecialFieldValue(this, null, "clearRank", Globals.lang("Clear rank"), null, Globals.lang("No rank information")));
-		values.add(new SpecialFieldValue(this, "rank1", "setRank1", Globals.lang("Set rank to one star"), GUIGlobals.getImage("rank1"), Globals.lang("One star")));
-		values.add(new SpecialFieldValue(this, "rank2", "setRank2", Globals.lang("Set rank to two stars"), GUIGlobals.getImage("rank2"), Globals.lang("Two stars")));
-		values.add(new SpecialFieldValue(this, "rank3", "setRank3", Globals.lang("Set rank to three stars"), GUIGlobals.getImage("rank3"), Globals.lang("Three stars")));
-		values.add(new SpecialFieldValue(this, "rank4", "setRank4", Globals.lang("Set rank to four stars"), GUIGlobals.getImage("rank4"), Globals.lang("Four stars")));
-		values.add(new SpecialFieldValue(this, "rank5", "setRank5", Globals.lang("Set rank to five stars"), GUIGlobals.getImage("rank5"), Globals.lang("Five stars")));
-		this.setValues(values);
-	}
-	
-	public static RankExtended getInstance() {
-		if (INSTANCE   == null) {
-			INSTANCE = new RankExtended();
-		}
-		return INSTANCE;
-	}	
-	
-	public ImageIcon getRepresentingIcon() {
-		return this.getValues().get(1).getIcon();
-	}
-	
-
-}
+package net.sf.jabref.specialfields;
+
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+
+public class RankExtended extends Rank {
+
+	private static RankExtended INSTANCE = null;
+
+	public RankExtended() {
+		super();
+		ArrayList<SpecialFieldValue> values = new ArrayList<SpecialFieldValue>();
+		values.add(new SpecialFieldValue(this, null, "clearRank", Globals.lang("Clear rank"), null, Globals.lang("No rank information")));
+		values.add(new SpecialFieldValue(this, "rank1", "setRank1", Globals.lang("Set rank to one star"), GUIGlobals.getImage("rank1"), Globals.lang("One star")));
+		values.add(new SpecialFieldValue(this, "rank2", "setRank2", Globals.lang("Set rank to two stars"), GUIGlobals.getImage("rank2"), Globals.lang("Two stars")));
+		values.add(new SpecialFieldValue(this, "rank3", "setRank3", Globals.lang("Set rank to three stars"), GUIGlobals.getImage("rank3"), Globals.lang("Three stars")));
+		values.add(new SpecialFieldValue(this, "rank4", "setRank4", Globals.lang("Set rank to four stars"), GUIGlobals.getImage("rank4"), Globals.lang("Four stars")));
+		values.add(new SpecialFieldValue(this, "rank5", "setRank5", Globals.lang("Set rank to five stars"), GUIGlobals.getImage("rank5"), Globals.lang("Five stars")));
+		this.setValues(values);
+	}
+	
+	public static RankExtended getInstance() {
+		if (INSTANCE   == null) {
+			INSTANCE = new RankExtended();
+		}
+		return INSTANCE;
+	}	
+	
+	public ImageIcon getRepresentingIcon() {
+		return this.getValues().get(1).getIcon();
+	}
+	
+
+}
diff --git a/src/java/net/sf/jabref/specialfields/Relevance.java b/src/java/net/sf/jabref/specialfields/Relevance.java
index 4393afa..de7824c 100644
--- a/src/java/net/sf/jabref/specialfields/Relevance.java
+++ b/src/java/net/sf/jabref/specialfields/Relevance.java
@@ -1,63 +1,63 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.specialfields;
-
-import java.util.ArrayList;
-
-import javax.swing.ImageIcon;
-
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-
-public class Relevance extends SpecialField {
-
-	private static Relevance INSTANCE;
-	
-	public Relevance() {
-		ArrayList<SpecialFieldValue> values = new ArrayList<SpecialFieldValue>();
-    	// action directly set by JabRefFrame
-		values.add(new SpecialFieldValue(this, "relevant", "toggleRelevance", Globals.lang("Toggle relevance"), GUIGlobals.getImage("relevant"), Globals.lang("Toggle relevance")));
-		this.setValues(values);
-		TEXT_DONE_PATTERN = "Toggled relevance for %0 entries";
-	}
-
-	public String getFieldName() {
-		return SpecialFieldsUtils.FIELDNAME_RELEVANCE;
-	}
-
-	public static Relevance getInstance() {
-		if (INSTANCE == null) {
-			INSTANCE = new Relevance();
-		}
-		return INSTANCE;
-	}	
-	
-	public ImageIcon getRepresentingIcon() {
-		return this.getValues().get(0).getIcon();
-	}
-	
-	public String getToolTip() {
-		return this.getValues().get(0).getToolTipText();
-	}
-
-	public String getMenuString() {
-		return Globals.lang("Relevance");
-	}
-	
-	public boolean isSingleValueField() {
-		return true;
-	}
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.specialfields;
+
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+
+public class Relevance extends SpecialField {
+
+	private static Relevance INSTANCE;
+	
+	public Relevance() {
+		ArrayList<SpecialFieldValue> values = new ArrayList<SpecialFieldValue>();
+    	// action directly set by JabRefFrame
+		values.add(new SpecialFieldValue(this, "relevant", "toggleRelevance", Globals.lang("Toggle relevance"), GUIGlobals.getImage("relevant"), Globals.lang("Toggle relevance")));
+		this.setValues(values);
+		TEXT_DONE_PATTERN = "Toggled relevance for %0 entries";
+	}
+
+	public String getFieldName() {
+		return SpecialFieldsUtils.FIELDNAME_RELEVANCE;
+	}
+
+	public static Relevance getInstance() {
+		if (INSTANCE == null) {
+			INSTANCE = new Relevance();
+		}
+		return INSTANCE;
+	}	
+	
+	public ImageIcon getRepresentingIcon() {
+		return this.getValues().get(0).getIcon();
+	}
+	
+	public String getToolTip() {
+		return this.getValues().get(0).getToolTipText();
+	}
+
+	public String getMenuString() {
+		return Globals.lang("Relevance");
+	}
+	
+	public boolean isSingleValueField() {
+		return true;
+	}
+}
diff --git a/src/java/net/sf/jabref/specialfields/SpecialField.java b/src/java/net/sf/jabref/specialfields/SpecialField.java
index ca65e59..a98a5f7 100644
--- a/src/java/net/sf/jabref/specialfields/SpecialField.java
+++ b/src/java/net/sf/jabref/specialfields/SpecialField.java
@@ -1,74 +1,74 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.specialfields;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import javax.swing.ImageIcon;
-
-import net.sf.jabref.Globals;
-
-public abstract class SpecialField {
-	// currently, menuString is used for undo string
-	// public static String TEXT_UNDO;
-	
-	public String TEXT_DONE_PATTERN;
-	
-	private List<SpecialFieldValue> values;
-	private List<String> keywords;
-	private HashMap<String, SpecialFieldValue> map;
-	
-	protected void setValues(List<SpecialFieldValue> values) {
-		this.values = values;
-		this.keywords = new ArrayList<String>();		
-		this.map = new HashMap<String, SpecialFieldValue>();
-		for (SpecialFieldValue v: values) {
-			if (v.getKeyword() != null) {
-				keywords.add(v.getKeyword());
-			}
-			if (v.getFieldValue() != null) {
-				map.put(v.getFieldValue(), v);
-			}
-		}
-	}
-	
-	public List<SpecialFieldValue> getValues() {
-		return this.values;
-	}
-	
-	public List<String> getKeyWords() {
-		return this.keywords;
-	}
-	
-	public SpecialFieldValue parse(String s) {
-		return map.get(s);
-	}
-	
-	public abstract String getFieldName();
-	
-	public abstract ImageIcon getRepresentingIcon();
-	
-	public abstract String getMenuString();
-	
-	public abstract String getToolTip();
-	
-	public boolean isSingleValueField() {
-		return false;
-	}
-	
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.specialfields;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.swing.ImageIcon;
+
+import net.sf.jabref.Globals;
+
+public abstract class SpecialField {
+	// currently, menuString is used for undo string
+	// public static String TEXT_UNDO;
+	
+	public String TEXT_DONE_PATTERN;
+	
+	private List<SpecialFieldValue> values;
+	private List<String> keywords;
+	private HashMap<String, SpecialFieldValue> map;
+	
+	protected void setValues(List<SpecialFieldValue> values) {
+		this.values = values;
+		this.keywords = new ArrayList<String>();		
+		this.map = new HashMap<String, SpecialFieldValue>();
+		for (SpecialFieldValue v: values) {
+			if (v.getKeyword() != null) {
+				keywords.add(v.getKeyword());
+			}
+			if (v.getFieldValue() != null) {
+				map.put(v.getFieldValue(), v);
+			}
+		}
+	}
+	
+	public List<SpecialFieldValue> getValues() {
+		return this.values;
+	}
+	
+	public List<String> getKeyWords() {
+		return this.keywords;
+	}
+	
+	public SpecialFieldValue parse(String s) {
+		return map.get(s);
+	}
+	
+	public abstract String getFieldName();
+	
+	public abstract ImageIcon getRepresentingIcon();
+	
+	public abstract String getMenuString();
+	
+	public abstract String getToolTip();
+	
+	public boolean isSingleValueField() {
+		return false;
+	}
+	
+}
diff --git a/src/java/net/sf/jabref/specialfields/SpecialFieldAction.java b/src/java/net/sf/jabref/specialfields/SpecialFieldAction.java
index 4b56ce7..2016068 100644
--- a/src/java/net/sf/jabref/specialfields/SpecialFieldAction.java
+++ b/src/java/net/sf/jabref/specialfields/SpecialFieldAction.java
@@ -1,83 +1,83 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.specialfields;
-
-import net.sf.jabref.BaseAction;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.undo.NamedCompound;
-
-public class SpecialFieldAction extends BaseAction {
-	private JabRefFrame frame;
-	private String doneTextPattern;
-	private SpecialField c;
-	String value;
-	private boolean nullFieldIfValueIsTheSame;
-	private String undoText;
-	
-	/**
-	 * 
-	 * @param nullFieldIfValueIsTheSame - false also causes that doneTextPattern has two place holders %0 for the value and %1 for the sum of entries
-	 * @param doneTextPattern - the pattern to use to update status information shown in MainFrame
-	 */
-	public SpecialFieldAction(
-			JabRefFrame frame,
-			SpecialField c,
-			String value,
-			boolean nullFieldIfValueIsTheSame,
-			String undoText,
-			String doneTextPattern
-			) {
-		this.frame = frame;
-		this.c = c;
-		this.value = value;
-		this.nullFieldIfValueIsTheSame = nullFieldIfValueIsTheSame;
-		this.undoText = undoText;		
-		this.doneTextPattern = doneTextPattern;
-	}
-	
-    public void action() {
-        try {
-      	  NamedCompound ce = new NamedCompound(undoText);
-      	  BibtexEntry[] bes = frame.basePanel().getSelectedEntries();
-      	  if (bes == null)
-      		  return;
-      	  for (BibtexEntry be: bes) {
-      		  // if (value==null) and then call nullField has been ommited as updatefield also handles value==null
-      		  SpecialFieldsUtils.updateField(c, value, be, ce, nullFieldIfValueIsTheSame);
-      	  }
-      	  ce.end();
-      	  if (ce.hasEdits()) {
-	      	  frame.basePanel().undoManager.addEdit(ce);
-	      	  frame.basePanel().markBaseChanged();
-	      	  frame.basePanel().updateEntryEditorIfShowing();
-	      	  String outText;
-	      	  if (nullFieldIfValueIsTheSame)
-	      		  outText = Globals.lang(doneTextPattern, Integer.toString(bes.length));
-	      	  else
-	      		  outText = Globals.lang(doneTextPattern, value, Integer.toString(bes.length));
-	      	  frame.output(outText);
-      	  } else {
-      		  // if user does not change anything with his action, we do not do anything either
-      		  // even no output message
-      	  }
-        } catch (Throwable ex) { 
-      	  ex.printStackTrace(); 
-        }
-    }
-
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.specialfields;
+
+import net.sf.jabref.BaseAction;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.undo.NamedCompound;
+
+public class SpecialFieldAction extends BaseAction {
+	private JabRefFrame frame;
+	private String doneTextPattern;
+	private SpecialField c;
+	String value;
+	private boolean nullFieldIfValueIsTheSame;
+	private String undoText;
+	
+	/**
+	 * 
+	 * @param nullFieldIfValueIsTheSame - false also causes that doneTextPattern has two place holders %0 for the value and %1 for the sum of entries
+	 * @param doneTextPattern - the pattern to use to update status information shown in MainFrame
+	 */
+	public SpecialFieldAction(
+			JabRefFrame frame,
+			SpecialField c,
+			String value,
+			boolean nullFieldIfValueIsTheSame,
+			String undoText,
+			String doneTextPattern
+			) {
+		this.frame = frame;
+		this.c = c;
+		this.value = value;
+		this.nullFieldIfValueIsTheSame = nullFieldIfValueIsTheSame;
+		this.undoText = undoText;		
+		this.doneTextPattern = doneTextPattern;
+	}
+	
+    public void action() {
+        try {
+      	  NamedCompound ce = new NamedCompound(undoText);
+      	  BibtexEntry[] bes = frame.basePanel().getSelectedEntries();
+      	  if (bes == null)
+      		  return;
+      	  for (BibtexEntry be: bes) {
+      		  // if (value==null) and then call nullField has been ommited as updatefield also handles value==null
+      		  SpecialFieldsUtils.updateField(c, value, be, ce, nullFieldIfValueIsTheSame);
+      	  }
+      	  ce.end();
+      	  if (ce.hasEdits()) {
+	      	  frame.basePanel().undoManager.addEdit(ce);
+	      	  frame.basePanel().markBaseChanged();
+	      	  frame.basePanel().updateEntryEditorIfShowing();
+	      	  String outText;
+	      	  if (nullFieldIfValueIsTheSame)
+	      		  outText = Globals.lang(doneTextPattern, Integer.toString(bes.length));
+	      	  else
+	      		  outText = Globals.lang(doneTextPattern, value, Integer.toString(bes.length));
+	      	  frame.output(outText);
+      	  } else {
+      		  // if user does not change anything with his action, we do not do anything either
+      		  // even no output message
+      	  }
+        } catch (Throwable ex) { 
+      	  ex.printStackTrace(); 
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/specialfields/SpecialFieldDatabaseChangeListener.java b/src/java/net/sf/jabref/specialfields/SpecialFieldDatabaseChangeListener.java
index 2b138ed..c5e36a6 100644
--- a/src/java/net/sf/jabref/specialfields/SpecialFieldDatabaseChangeListener.java
+++ b/src/java/net/sf/jabref/specialfields/SpecialFieldDatabaseChangeListener.java
@@ -1,36 +1,36 @@
-package net.sf.jabref.specialfields;
-
-import javax.swing.SwingUtilities;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.DatabaseChangeEvent;
-import net.sf.jabref.DatabaseChangeListener;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRef;
-import net.sf.jabref.undo.NamedCompound;
-
-public class SpecialFieldDatabaseChangeListener implements
-		DatabaseChangeListener {
-	
-	private static SpecialFieldDatabaseChangeListener INSTANCE = null;
-
-	public void databaseChanged(DatabaseChangeEvent e) {
-		if ((e.getType() == DatabaseChangeEvent.ChangeType.ADDED_ENTRY) &&
-		    SpecialFieldsUtils.keywordSyncEnabled()) {
-			final BibtexEntry entry = e.getEntry();
-			// NamedCompount code similar to SpecialFieldUpdateListener
-			NamedCompound nc = new NamedCompound(Globals.lang("Synchronized special fields based on keywords"));
-			SpecialFieldsUtils.syncSpecialFieldsFromKeywords(entry, nc);
-            nc.end();
-			JabRef.jrf.basePanel().undoManager.addEdit(nc);
-		}
-	}
-	
-	public static SpecialFieldDatabaseChangeListener getInstance() {
-		if (INSTANCE == null) {
-			INSTANCE = new SpecialFieldDatabaseChangeListener();
-		}
-		return INSTANCE;
-	}
-
-}
+package net.sf.jabref.specialfields;
+
+import javax.swing.SwingUtilities;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.DatabaseChangeEvent;
+import net.sf.jabref.DatabaseChangeListener;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.undo.NamedCompound;
+
+public class SpecialFieldDatabaseChangeListener implements
+		DatabaseChangeListener {
+	
+	private static SpecialFieldDatabaseChangeListener INSTANCE = null;
+
+	public void databaseChanged(DatabaseChangeEvent e) {
+		if ((e.getType() == DatabaseChangeEvent.ChangeType.ADDED_ENTRY) &&
+		    SpecialFieldsUtils.keywordSyncEnabled()) {
+			final BibtexEntry entry = e.getEntry();
+			// NamedCompount code similar to SpecialFieldUpdateListener
+			NamedCompound nc = new NamedCompound(Globals.lang("Synchronized special fields based on keywords"));
+			SpecialFieldsUtils.syncSpecialFieldsFromKeywords(entry, nc);
+            nc.end();
+			JabRef.jrf.basePanel().undoManager.addEdit(nc);
+		}
+	}
+	
+	public static SpecialFieldDatabaseChangeListener getInstance() {
+		if (INSTANCE == null) {
+			INSTANCE = new SpecialFieldDatabaseChangeListener();
+		}
+		return INSTANCE;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/specialfields/SpecialFieldDropDown.java b/src/java/net/sf/jabref/specialfields/SpecialFieldDropDown.java
index 03ea57f..b49b823 100644
--- a/src/java/net/sf/jabref/specialfields/SpecialFieldDropDown.java
+++ b/src/java/net/sf/jabref/specialfields/SpecialFieldDropDown.java
@@ -1,105 +1,105 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.specialfields;
-
-import java.awt.Dimension;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JButton;
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-
-import com.jgoodies.looks.HeaderStyle;
-import com.jgoodies.looks.Options;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-
-public class SpecialFieldDropDown {
-	
-	public static JButton generateSpecialFieldButtonWithDropDown(SpecialField field, JabRefFrame frame) {
-		Dimension buttonDim = new Dimension(23,23);
-		JButton button = new JButton(field.getRepresentingIcon());
-		button.setToolTipText(field.getToolTip());
-		button.setPreferredSize(buttonDim);
-		if (!Globals.ON_MAC)
-			button.setMargin(new Insets(1, 0, 2, 0));
-		button.setBorder(null);
-		button.setBorderPainted(false);
-		button.setRolloverEnabled(true);
-		button.setOpaque(false);
-		button.setBounds(0, 0, buttonDim.width, buttonDim.height);
-		button.setSize(buttonDim);
-		button.setMinimumSize(buttonDim);
-		button.setMaximumSize(buttonDim);
-		button.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH);
-		button.addActionListener(new MenuButtonActionListener(field, frame, button, buttonDim));
-		return button;
-	}
-	
-	private static class MenuButtonActionListener implements ActionListener {
-
-		private JPopupMenu popup;
-		private Dimension dim;
-		private JabRefFrame frame;
-		private SpecialField field;
-		private JButton button;
-
-		public MenuButtonActionListener(SpecialField field, JabRefFrame frame, JButton button, Dimension dim) {
-			this.field = field;
-			this.dim = dim;
-			this.frame = frame;
-			this.button = button;
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			if (popup == null) {
-				popup = new JPopupMenu();
-				for (SpecialFieldValue val: field.getValues()) {
-					JMenuItem item = new JMenuItem(val.getIcon());
-					item.setText(val.getMenuString());
-					item.setToolTipText(val.getToolTipText());
-					item.addActionListener(new PopupitemActionListener(frame.basePanel(), val.getActionName()));
-					item.setMargin(new Insets(0,0,0,0));
-					popup.add(item);
-				}
-			}
-			popup.show(button, 0, dim.height);
-		}
-
-		private class PopupitemActionListener implements ActionListener {
-
-			private BasePanel panel;
-			private String actionName;
-
-			public PopupitemActionListener(BasePanel panel, String actionName) {
-				this.panel = panel;
-				this.actionName = actionName;
-			}
-
-			public void actionPerformed(ActionEvent e) {
-				panel.runCommand(actionName);
-				popup.setVisible(false);
-			}
-
-		}
-
-	}
-
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.specialfields;
+
+import java.awt.Dimension;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+
+import com.jgoodies.looks.HeaderStyle;
+import com.jgoodies.looks.Options;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+
+public class SpecialFieldDropDown {
+	
+	public static JButton generateSpecialFieldButtonWithDropDown(SpecialField field, JabRefFrame frame) {
+		Dimension buttonDim = new Dimension(23,23);
+		JButton button = new JButton(field.getRepresentingIcon());
+		button.setToolTipText(field.getToolTip());
+		button.setPreferredSize(buttonDim);
+		if (!Globals.ON_MAC)
+			button.setMargin(new Insets(1, 0, 2, 0));
+		button.setBorder(null);
+		button.setBorderPainted(false);
+		button.setRolloverEnabled(true);
+		button.setOpaque(false);
+		button.setBounds(0, 0, buttonDim.width, buttonDim.height);
+		button.setSize(buttonDim);
+		button.setMinimumSize(buttonDim);
+		button.setMaximumSize(buttonDim);
+		button.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH);
+		button.addActionListener(new MenuButtonActionListener(field, frame, button, buttonDim));
+		return button;
+	}
+	
+	private static class MenuButtonActionListener implements ActionListener {
+
+		private JPopupMenu popup;
+		private Dimension dim;
+		private JabRefFrame frame;
+		private SpecialField field;
+		private JButton button;
+
+		public MenuButtonActionListener(SpecialField field, JabRefFrame frame, JButton button, Dimension dim) {
+			this.field = field;
+			this.dim = dim;
+			this.frame = frame;
+			this.button = button;
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			if (popup == null) {
+				popup = new JPopupMenu();
+				for (SpecialFieldValue val: field.getValues()) {
+					JMenuItem item = new JMenuItem(val.getIcon());
+					item.setText(val.getMenuString());
+					item.setToolTipText(val.getToolTipText());
+					item.addActionListener(new PopupitemActionListener(frame.basePanel(), val.getActionName()));
+					item.setMargin(new Insets(0,0,0,0));
+					popup.add(item);
+				}
+			}
+			popup.show(button, 0, dim.height);
+		}
+
+		private class PopupitemActionListener implements ActionListener {
+
+			private BasePanel panel;
+			private String actionName;
+
+			public PopupitemActionListener(BasePanel panel, String actionName) {
+				this.panel = panel;
+				this.actionName = actionName;
+			}
+
+			public void actionPerformed(ActionEvent e) {
+				panel.runCommand(actionName);
+				popup.setVisible(false);
+			}
+
+		}
+
+	}
+
+}
diff --git a/src/java/net/sf/jabref/specialfields/SpecialFieldMenuAction.java b/src/java/net/sf/jabref/specialfields/SpecialFieldMenuAction.java
index 13dcbf9..9e3bb19 100644
--- a/src/java/net/sf/jabref/specialfields/SpecialFieldMenuAction.java
+++ b/src/java/net/sf/jabref/specialfields/SpecialFieldMenuAction.java
@@ -1,38 +1,38 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.specialfields;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.AbstractAction;
-
-import net.sf.jabref.JabRefFrame;
-
-public class SpecialFieldMenuAction extends AbstractAction {
-	private JabRefFrame frame;
-	private String actionName;
-
-	public SpecialFieldMenuAction(SpecialFieldValue val, JabRefFrame frame) {
-		super(val.getMenuString(), val.getIcon());
-		this.frame = frame;
-		this.actionName = val.getActionName();
-	}
-	
-	public void actionPerformed(ActionEvent evt) {
-		frame.basePanel().runCommand(actionName);
-	}
-}
-
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.specialfields;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+
+import net.sf.jabref.JabRefFrame;
+
+public class SpecialFieldMenuAction extends AbstractAction {
+	private JabRefFrame frame;
+	private String actionName;
+
+	public SpecialFieldMenuAction(SpecialFieldValue val, JabRefFrame frame) {
+		super(val.getMenuString(), val.getIcon());
+		this.frame = frame;
+		this.actionName = val.getActionName();
+	}
+	
+	public void actionPerformed(ActionEvent evt) {
+		frame.basePanel().runCommand(actionName);
+	}
+}
+
diff --git a/src/java/net/sf/jabref/specialfields/SpecialFieldUpdateListener.java b/src/java/net/sf/jabref/specialfields/SpecialFieldUpdateListener.java
index 192f602..69967f9 100644
--- a/src/java/net/sf/jabref/specialfields/SpecialFieldUpdateListener.java
+++ b/src/java/net/sf/jabref/specialfields/SpecialFieldUpdateListener.java
@@ -1,81 +1,81 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.specialfields;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyVetoException;
-import java.beans.VetoableChangeListener;
-
-import javax.swing.SwingUtilities;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.JabRef;
-
-/**
- * Listener triggering 
- *  * an update of keywords if special field has been updated
- *  * an update of special fields if keywords have been updated 
- */
-public class SpecialFieldUpdateListener implements VetoableChangeListener {
-	
-	private static SpecialFieldUpdateListener INSTANCE = null;
-	
-	public void vetoableChange(PropertyChangeEvent e)
-			throws PropertyVetoException {
-		final BibtexEntry entry = (BibtexEntry) e.getSource();
-		final String fieldName = e.getPropertyName();
-		// Source editor cycles through all entries
-		// if we immediately updated the fields, the entry editor would detect a subsequent change as a user change 
-		// and re-fire this event
-		// e.g., "keyword = {prio1}, priority = {prio2}" and a change at keyword to prio3 would not succeed. 
-        SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-				if (fieldName.equals("keywords")) {
-					// we do NOT pass a named component indicating that we do not want to have undo capabilities
-					// if the user undoes the change in the keyword field, this method is also called and 
-					// the special fields are updated accordingly 
-					SpecialFieldsUtils.syncSpecialFieldsFromKeywords(entry, null);
-		            SwingUtilities.invokeLater(new Runnable() {
-		                public void run() {
-					    	JabRef.jrf.basePanel().updateEntryEditorIfShowing();
-		                }
-		            });
-				} else {
-					SpecialField field = SpecialFieldsUtils.getSpecialFieldInstanceFromFieldName(fieldName);
-					if (field != null) {
-						// we do NOT pass a named component indicating that we do not want to have undo capabilities
-						// if the user undoes the change in the sepcial field, this method is also called and 
-						// the keyword field is updated accordingly 
-						SpecialFieldsUtils.syncKeywordsFromSpecialFields(entry, null);
-			            SwingUtilities.invokeLater(new Runnable() {
-			                public void run() {
-						    	JabRef.jrf.basePanel().updateEntryEditorIfShowing();
-			                }
-			            });
-					}
-				}
-			}
-		});
-	}
-	
-	public static SpecialFieldUpdateListener getInstance() {
-		if (INSTANCE == null) {
-			INSTANCE = new SpecialFieldUpdateListener();
-		};
-		return INSTANCE;
-	}
-
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.specialfields;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyVetoException;
+import java.beans.VetoableChangeListener;
+
+import javax.swing.SwingUtilities;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.JabRef;
+
+/**
+ * Listener triggering 
+ *  * an update of keywords if special field has been updated
+ *  * an update of special fields if keywords have been updated 
+ */
+public class SpecialFieldUpdateListener implements VetoableChangeListener {
+	
+	private static SpecialFieldUpdateListener INSTANCE = null;
+	
+	public void vetoableChange(PropertyChangeEvent e)
+			throws PropertyVetoException {
+		final BibtexEntry entry = (BibtexEntry) e.getSource();
+		final String fieldName = e.getPropertyName();
+		// Source editor cycles through all entries
+		// if we immediately updated the fields, the entry editor would detect a subsequent change as a user change 
+		// and re-fire this event
+		// e.g., "keyword = {prio1}, priority = {prio2}" and a change at keyword to prio3 would not succeed. 
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+				if (fieldName.equals("keywords")) {
+					// we do NOT pass a named component indicating that we do not want to have undo capabilities
+					// if the user undoes the change in the keyword field, this method is also called and 
+					// the special fields are updated accordingly 
+					SpecialFieldsUtils.syncSpecialFieldsFromKeywords(entry, null);
+		            SwingUtilities.invokeLater(new Runnable() {
+		                public void run() {
+					    	JabRef.jrf.basePanel().updateEntryEditorIfShowing();
+		                }
+		            });
+				} else {
+					SpecialField field = SpecialFieldsUtils.getSpecialFieldInstanceFromFieldName(fieldName);
+					if (field != null) {
+						// we do NOT pass a named component indicating that we do not want to have undo capabilities
+						// if the user undoes the change in the sepcial field, this method is also called and 
+						// the keyword field is updated accordingly 
+						SpecialFieldsUtils.syncKeywordsFromSpecialFields(entry, null);
+			            SwingUtilities.invokeLater(new Runnable() {
+			                public void run() {
+						    	JabRef.jrf.basePanel().updateEntryEditorIfShowing();
+			                }
+			            });
+					}
+				}
+			}
+		});
+	}
+	
+	public static SpecialFieldUpdateListener getInstance() {
+		if (INSTANCE == null) {
+			INSTANCE = new SpecialFieldUpdateListener();
+		};
+		return INSTANCE;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/specialfields/SpecialFieldValue.java b/src/java/net/sf/jabref/specialfields/SpecialFieldValue.java
index 0b8979d..4b5895a 100644
--- a/src/java/net/sf/jabref/specialfields/SpecialFieldValue.java
+++ b/src/java/net/sf/jabref/specialfields/SpecialFieldValue.java
@@ -1,124 +1,124 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.specialfields;
-
-import javax.swing.ImageIcon;
-import javax.swing.JLabel;
-import javax.swing.JMenuItem;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-
-public class SpecialFieldValue {
-	private final SpecialField field;
-	
-	// keyword used at keyword field
-	private final String keyword;
-	
-	// action belonging to this value
-	private final String actionName;
-	
-	// localized menu string used at menu / button
-	private String menuString;
-	
-	private SpecialFieldAction action = null;
-	
-	private SpecialFieldMenuAction menuAction = null;
-
-	private ImageIcon icon;
-
-	private String toolTipText;
-	
-	// value when used in a separate vield
-	//private String fieldValue; 
-	
-	/**
-	 * 
-	 * @param field The special field this value is a value of
-	 * @param keyword - The keyword to be used at BibTex's keyword field
-	 * @param actionName - the action to call
-	 * @param menuString - the string to display at a menu
-	 * @param icon - the icon of this value
-	 * @param toolTipText - the tool tip text
-	 */
-	public SpecialFieldValue(
-			SpecialField field, 
-			String keyword, 
-			String actionName, 
-			String menuString, 
-			ImageIcon icon,
-			String toolTipText) {
-		this.field = field;
-		this.keyword = keyword;
-		this.actionName = actionName;
-		this.menuString = menuString;
-		this.icon = icon;
-		this.toolTipText = toolTipText;
-	}
-	
-	public String getKeyword() {
-		return this.keyword;
-	}
-	
-	public String getActionName() {
-		return this.actionName;
-	}
-	
-	public String getMenuString() {
-		return this.menuString;
-	}
-	
-	public JLabel createLabel() {
-		JLabel label = new JLabel(this.icon);
-    	label.setToolTipText(this.toolTipText);
-    	return label;
-	}
-	
-	public String getFieldValue() {
-		return this.keyword;
-	}
-	
-	public ImageIcon getIcon() {
-		return this.icon;
-	}
-	
-	public String getToolTipText() {
-		return this.toolTipText;
-	}
-	
-	public SpecialFieldAction getAction(JabRefFrame frame) {
-		if (this.action == null) {
-			action = new SpecialFieldAction(
-					frame, 
-					this.field, 
-					this.getFieldValue(),
-					// if field contains only one value, it has to be nulled
-					// otherwise, another setting does not empty the field
-					this.field.getValues().size() == 1, 
-					this.getMenuString(), 
-					this.field.TEXT_DONE_PATTERN);
-		} 
-		return action;
-	}
-	
-	public SpecialFieldMenuAction getMenuAction(JabRefFrame frame) {
-		if  (this.menuAction == null) {
-			this.menuAction = new SpecialFieldMenuAction(this, frame);
-		}
-		return this.menuAction;
-	}
-
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.specialfields;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JMenuItem;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+
+public class SpecialFieldValue {
+	private final SpecialField field;
+	
+	// keyword used at keyword field
+	private final String keyword;
+	
+	// action belonging to this value
+	private final String actionName;
+	
+	// localized menu string used at menu / button
+	private String menuString;
+	
+	private SpecialFieldAction action = null;
+	
+	private SpecialFieldMenuAction menuAction = null;
+
+	private ImageIcon icon;
+
+	private String toolTipText;
+	
+	// value when used in a separate vield
+	//private String fieldValue; 
+	
+	/**
+	 * 
+	 * @param field The special field this value is a value of
+	 * @param keyword - The keyword to be used at BibTex's keyword field
+	 * @param actionName - the action to call
+	 * @param menuString - the string to display at a menu
+	 * @param icon - the icon of this value
+	 * @param toolTipText - the tool tip text
+	 */
+	public SpecialFieldValue(
+			SpecialField field, 
+			String keyword, 
+			String actionName, 
+			String menuString, 
+			ImageIcon icon,
+			String toolTipText) {
+		this.field = field;
+		this.keyword = keyword;
+		this.actionName = actionName;
+		this.menuString = menuString;
+		this.icon = icon;
+		this.toolTipText = toolTipText;
+	}
+	
+	public String getKeyword() {
+		return this.keyword;
+	}
+	
+	public String getActionName() {
+		return this.actionName;
+	}
+	
+	public String getMenuString() {
+		return this.menuString;
+	}
+	
+	public JLabel createLabel() {
+		JLabel label = new JLabel(this.icon);
+    	label.setToolTipText(this.toolTipText);
+    	return label;
+	}
+	
+	public String getFieldValue() {
+		return this.keyword;
+	}
+	
+	public ImageIcon getIcon() {
+		return this.icon;
+	}
+	
+	public String getToolTipText() {
+		return this.toolTipText;
+	}
+	
+	public SpecialFieldAction getAction(JabRefFrame frame) {
+		if (this.action == null) {
+			action = new SpecialFieldAction(
+					frame, 
+					this.field, 
+					this.getFieldValue(),
+					// if field contains only one value, it has to be nulled
+					// otherwise, another setting does not empty the field
+					this.field.getValues().size() == 1, 
+					this.getMenuString(), 
+					this.field.TEXT_DONE_PATTERN);
+		} 
+		return action;
+	}
+	
+	public SpecialFieldMenuAction getMenuAction(JabRefFrame frame) {
+		if  (this.menuAction == null) {
+			this.menuAction = new SpecialFieldMenuAction(this, frame);
+		}
+		return this.menuAction;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/specialfields/SpecialFieldsUtils.java b/src/java/net/sf/jabref/specialfields/SpecialFieldsUtils.java
index a6007e7..b965f51 100644
--- a/src/java/net/sf/jabref/specialfields/SpecialFieldsUtils.java
+++ b/src/java/net/sf/jabref/specialfields/SpecialFieldsUtils.java
@@ -1,177 +1,177 @@
-/*  Copyright (C) 2012 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.specialfields;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sf.jabref.Util;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.undo.NamedCompound;
-
-public class SpecialFieldsUtils {
-	
-	public final static String FIELDNAME_PRIORITY = "priority";
-	public final static String FIELDNAME_RANKING = "ranking";
-	public final static String FIELDNAME_RELEVANCE = "relevance";
-	public final static String FIELDNAME_QUALITY = "qualityassured";
-
-	public final static String  PREF_SPECIALFIELDSENABLED = "specialFieldsEnabled";
-	public final static Boolean PREF_SPECIALFIELDSENABLED_DEFAULT = Boolean.FALSE;
-	
-	public final static String  PREF_SHOWCOLUMN_RANKING = "showRankingColumn";
-	public final static Boolean PREF_SHOWCOLUMN_RANKING_DEFAULT = Boolean.TRUE;
-	
-	public final static String  PREF_RANKING_COMPACT = "compactRankingColumn";
-	public final static Boolean PREF_RANKING_COMPACT_DEFAULT = Boolean.TRUE;
-
-	public final static String  PREF_SHOWCOLUMN_PRIORITY = "showPriorityColumn";
-	public final static Boolean PREF_SHOWCOLUMN_PRIORITY_DEFAULT = Boolean.FALSE;
-
-	public final static String  PREF_SHOWCOLUMN_RELEVANCE = "showRelevanceColumn";
-	public final static Boolean PREF_SHOWCOLUMN_RELEVANCE_DEFAULT = Boolean.FALSE;
-	
-	public final static String  PREF_SHOWCOLUMN_QUALITY = "showQualityColumn";
-	public final static Boolean PREF_SHOWCOLUMN_QUALITY_DEFAULT = Boolean.FALSE;
-	
-	public final static String  PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS = "autoSyncSpecialFieldsToKeywords";
-	public final static Boolean PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS_DEFAULT = Boolean.FALSE;
-	
-	public final static String  PREF_SERIALIZESPECIALFIELDS = "serializeSpecialFields";
-	public final static Boolean PREF_SERIALIZESPECIALFIELDS_DEFAULT = Boolean.TRUE;
-	
-	/****************************************************/
-	/** generic treatment                              **/
-	/** no special treatment any more, thanks to enums **/
-	/****************************************************/
-
-	/**
-	 * @param e - Field to be handled
-	 * @param value - may be null to state that field should be emptied
-	 * @param be - BibTeXEntry to be handled
-	 * @param ce - Filled with undo info (if necessary)
-	 * @param nullFieldIfValueIsTheSame - true: field is nulled if value is the same than the current value in be
-	 */
-	public static void updateField(SpecialField e, String value, BibtexEntry be, NamedCompound ce, boolean nullFieldIfValueIsTheSame) {
-		Util.updateField(be, e.getFieldName(), value, ce, nullFieldIfValueIsTheSame);
-		// we cannot use "value" here as updateField has side effects: "nullFieldIfValueIsTheSame" nulls the field if value is the same
-		exportFieldToKeywords(e, be.getField(e.getFieldName()), be, ce);
-	}
-	
-	private static void exportFieldToKeywords(SpecialField e, BibtexEntry be, NamedCompound ce) {
-		exportFieldToKeywords(e, be.getField(e.getFieldName()), be, ce);
-	}
-	
-	private static void exportFieldToKeywords(SpecialField e, String newValue, BibtexEntry be, NamedCompound ce) {
-		if (!SpecialFieldsUtils.keywordSyncEnabled()) return;
-		ArrayList<String> keywordList = Util.getSeparatedKeywords(be);
-		List<String> values = e.getKeyWords();
-		
-		int foundPos = -1;
-		
-		// cleanup keywords
-		for (Object value: values) {
-			int pos = keywordList.indexOf(value);
-			if (pos >= 0) {
-				foundPos = pos;
-				keywordList.remove(pos);
-			}
-		}
-		
-		if (newValue != null) {
-			if (foundPos == -1) {
-				keywordList.add(newValue);
-			} else {
-				keywordList.add(foundPos, newValue);
-			}
-		}
-		Util.putKeywords(be, keywordList, ce);
-	}
-	
-	
-	/**
-	 * Update keywords according to values of special fields
-	 * 
-	 * @param nc indicates the undo named compound. May be null
-	 */
-	public static void syncKeywordsFromSpecialFields(BibtexEntry be, NamedCompound nc) {
-		exportFieldToKeywords(Priority.getInstance(), be, nc);
-		exportFieldToKeywords(Rank.getInstance(), be, nc);
-		exportFieldToKeywords(Relevance.getInstance(), be, nc);
-		exportFieldToKeywords(Quality.getInstance(), be, nc);
-	}
-	
-	private static void importKeywordsForField(ArrayList<String> keywordList, SpecialField c, BibtexEntry be, NamedCompound nc) {
-		List<String> values = c.getKeyWords();
-		String newValue = null;
-		for (String val: values) {
-			if (keywordList.contains(val)) {
-				newValue = val;
-				break;
-			}
-		}
-		Util.updateField(be, c.getFieldName(), newValue, nc);
-	}
-
-	/**
-	 * updates field values according to keywords
-	 * 
-	 * @param nc indicates the undo named compound. May be null
-	 */
-	public static void syncSpecialFieldsFromKeywords(BibtexEntry be, NamedCompound ce) {
-		if (be.getField("keywords") == null)
-			return;
-		ArrayList<String> keywordList = Util.getSeparatedKeywords(be.getField("keywords"));
-		importKeywordsForField(keywordList, Priority.getInstance(), be, ce);
-		importKeywordsForField(keywordList, Rank.getInstance(), be, ce);
-		importKeywordsForField(keywordList, Quality.getInstance(), be, ce);
-		importKeywordsForField(keywordList, Relevance.getInstance(), be, ce);
-	}
-	
-	/**
-	 * @param fieldName the fieldName
-	 * @return an instance of that field. The returned object is a singleton. null is returned if fieldName does not indicate a special field
-	 */
-	public static SpecialField getSpecialFieldInstanceFromFieldName(String fieldName) {
-		if (fieldName.equals(FIELDNAME_PRIORITY)) {
-			return Priority.getInstance();
-		} else if (fieldName.equals(FIELDNAME_QUALITY)) {
-			return Quality.getInstance();
-		} else if (fieldName.equals(FIELDNAME_RANKING)) {
-			return Rank.getInstance();
-		} else if (fieldName.equals(FIELDNAME_RELEVANCE)) {
-			return Relevance.getInstance();
-		} else {
-			return null;
-		}
-	}
-	
-	/**
-	 * @param fieldName the name of the field to check
-	 * @return true if given field is a special field, false otherwise
-	 */
-	public static boolean isSpecialField(String fieldName) {
-		return (getSpecialFieldInstanceFromFieldName(fieldName) != null);
-	}
-	
-	public static boolean keywordSyncEnabled() {
-		return  Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED) &&
-				Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS);
-	}
-
-}
+/*  Copyright (C) 2012 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.specialfields;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sf.jabref.Util;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.undo.NamedCompound;
+
+public class SpecialFieldsUtils {
+	
+	public final static String FIELDNAME_PRIORITY = "priority";
+	public final static String FIELDNAME_RANKING = "ranking";
+	public final static String FIELDNAME_RELEVANCE = "relevance";
+	public final static String FIELDNAME_QUALITY = "qualityassured";
+
+	public final static String  PREF_SPECIALFIELDSENABLED = "specialFieldsEnabled";
+	public final static Boolean PREF_SPECIALFIELDSENABLED_DEFAULT = Boolean.FALSE;
+	
+	public final static String  PREF_SHOWCOLUMN_RANKING = "showRankingColumn";
+	public final static Boolean PREF_SHOWCOLUMN_RANKING_DEFAULT = Boolean.TRUE;
+	
+	public final static String  PREF_RANKING_COMPACT = "compactRankingColumn";
+	public final static Boolean PREF_RANKING_COMPACT_DEFAULT = Boolean.TRUE;
+
+	public final static String  PREF_SHOWCOLUMN_PRIORITY = "showPriorityColumn";
+	public final static Boolean PREF_SHOWCOLUMN_PRIORITY_DEFAULT = Boolean.FALSE;
+
+	public final static String  PREF_SHOWCOLUMN_RELEVANCE = "showRelevanceColumn";
+	public final static Boolean PREF_SHOWCOLUMN_RELEVANCE_DEFAULT = Boolean.FALSE;
+	
+	public final static String  PREF_SHOWCOLUMN_QUALITY = "showQualityColumn";
+	public final static Boolean PREF_SHOWCOLUMN_QUALITY_DEFAULT = Boolean.FALSE;
+	
+	public final static String  PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS = "autoSyncSpecialFieldsToKeywords";
+	public final static Boolean PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS_DEFAULT = Boolean.FALSE;
+	
+	public final static String  PREF_SERIALIZESPECIALFIELDS = "serializeSpecialFields";
+	public final static Boolean PREF_SERIALIZESPECIALFIELDS_DEFAULT = Boolean.TRUE;
+	
+	/****************************************************/
+	/** generic treatment                              **/
+	/** no special treatment any more, thanks to enums **/
+	/****************************************************/
+
+	/**
+	 * @param e - Field to be handled
+	 * @param value - may be null to state that field should be emptied
+	 * @param be - BibTeXEntry to be handled
+	 * @param ce - Filled with undo info (if necessary)
+	 * @param nullFieldIfValueIsTheSame - true: field is nulled if value is the same than the current value in be
+	 */
+	public static void updateField(SpecialField e, String value, BibtexEntry be, NamedCompound ce, boolean nullFieldIfValueIsTheSame) {
+		Util.updateField(be, e.getFieldName(), value, ce, nullFieldIfValueIsTheSame);
+		// we cannot use "value" here as updateField has side effects: "nullFieldIfValueIsTheSame" nulls the field if value is the same
+		exportFieldToKeywords(e, be.getField(e.getFieldName()), be, ce);
+	}
+	
+	private static void exportFieldToKeywords(SpecialField e, BibtexEntry be, NamedCompound ce) {
+		exportFieldToKeywords(e, be.getField(e.getFieldName()), be, ce);
+	}
+	
+	private static void exportFieldToKeywords(SpecialField e, String newValue, BibtexEntry be, NamedCompound ce) {
+		if (!SpecialFieldsUtils.keywordSyncEnabled()) return;
+		ArrayList<String> keywordList = Util.getSeparatedKeywords(be);
+		List<String> values = e.getKeyWords();
+		
+		int foundPos = -1;
+		
+		// cleanup keywords
+		for (Object value: values) {
+			int pos = keywordList.indexOf(value);
+			if (pos >= 0) {
+				foundPos = pos;
+				keywordList.remove(pos);
+			}
+		}
+		
+		if (newValue != null) {
+			if (foundPos == -1) {
+				keywordList.add(newValue);
+			} else {
+				keywordList.add(foundPos, newValue);
+			}
+		}
+		Util.putKeywords(be, keywordList, ce);
+	}
+	
+	
+	/**
+	 * Update keywords according to values of special fields
+	 * 
+	 * @param nc indicates the undo named compound. May be null
+	 */
+	public static void syncKeywordsFromSpecialFields(BibtexEntry be, NamedCompound nc) {
+		exportFieldToKeywords(Priority.getInstance(), be, nc);
+		exportFieldToKeywords(Rank.getInstance(), be, nc);
+		exportFieldToKeywords(Relevance.getInstance(), be, nc);
+		exportFieldToKeywords(Quality.getInstance(), be, nc);
+	}
+	
+	private static void importKeywordsForField(ArrayList<String> keywordList, SpecialField c, BibtexEntry be, NamedCompound nc) {
+		List<String> values = c.getKeyWords();
+		String newValue = null;
+		for (String val: values) {
+			if (keywordList.contains(val)) {
+				newValue = val;
+				break;
+			}
+		}
+		Util.updateField(be, c.getFieldName(), newValue, nc);
+	}
+
+	/**
+	 * updates field values according to keywords
+	 * 
+	 * @param nc indicates the undo named compound. May be null
+	 */
+	public static void syncSpecialFieldsFromKeywords(BibtexEntry be, NamedCompound ce) {
+		if (be.getField("keywords") == null)
+			return;
+		ArrayList<String> keywordList = Util.getSeparatedKeywords(be.getField("keywords"));
+		importKeywordsForField(keywordList, Priority.getInstance(), be, ce);
+		importKeywordsForField(keywordList, Rank.getInstance(), be, ce);
+		importKeywordsForField(keywordList, Quality.getInstance(), be, ce);
+		importKeywordsForField(keywordList, Relevance.getInstance(), be, ce);
+	}
+	
+	/**
+	 * @param fieldName the fieldName
+	 * @return an instance of that field. The returned object is a singleton. null is returned if fieldName does not indicate a special field
+	 */
+	public static SpecialField getSpecialFieldInstanceFromFieldName(String fieldName) {
+		if (fieldName.equals(FIELDNAME_PRIORITY)) {
+			return Priority.getInstance();
+		} else if (fieldName.equals(FIELDNAME_QUALITY)) {
+			return Quality.getInstance();
+		} else if (fieldName.equals(FIELDNAME_RANKING)) {
+			return Rank.getInstance();
+		} else if (fieldName.equals(FIELDNAME_RELEVANCE)) {
+			return Relevance.getInstance();
+		} else {
+			return null;
+		}
+	}
+	
+	/**
+	 * @param fieldName the name of the field to check
+	 * @return true if given field is a special field, false otherwise
+	 */
+	public static boolean isSpecialField(String fieldName) {
+		return (getSpecialFieldInstanceFromFieldName(fieldName) != null);
+	}
+	
+	public static boolean keywordSyncEnabled() {
+		return  Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SPECIALFIELDSENABLED) &&
+				Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS);
+	}
+
+}
diff --git a/src/java/net/sf/jabref/sql/DBConnectDialog.java b/src/java/net/sf/jabref/sql/DBConnectDialog.java
index 55dea4f..e73654a 100644
--- a/src/java/net/sf/jabref/sql/DBConnectDialog.java
+++ b/src/java/net/sf/jabref/sql/DBConnectDialog.java
@@ -1,283 +1,283 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.sql;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import javax.swing.*;
-
-import net.sf.jabref.Globals;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-
-/**
- * Dialog box for collecting database connection strings from the user
- *
- * @author pattonlk
- */
-public class DBConnectDialog extends JDialog {
-
-    // labels
-    JLabel lblServerType     = new JLabel();
-    JLabel lblServerHostname = new JLabel();
-    JLabel lblDatabase       = new JLabel();
-    JLabel lblUsername       = new JLabel();
-    JLabel lblPassword       = new JLabel();
-
-    // input fields
-    JComboBox cmbServerType = new JComboBox();
-    JTextField txtServerHostname = new JTextField(40);
-    JTextField txtDatabase = new JTextField(40);
-    JTextField txtUsername = new JTextField(40);        
-    JPasswordField pwdPassword = new JPasswordField(40);
-    JButton btnConnect = new JButton();
-    JButton btnCancel = new JButton();
-
-    // array for holding components on left-hand and right-hand sides
-    ArrayList<JLabel> lhs = new ArrayList<JLabel>();
-    ArrayList<JComponent> rhs = new ArrayList<JComponent>();
-
-    DBStrings dbStrings = new DBStrings();
-
-    private boolean connectToDB = false;
-
-    /** Creates a new instance of DBConnectDialog */
-    public DBConnectDialog( JFrame parent, DBStrings dbs) {
-
-        super(parent, Globals.lang("Connect to SQL Database"), true);
-
-        this.setResizable(false);
-        this.setLocationRelativeTo(parent);
-
-        dbStrings = dbs;
-
-        // build collections of components
-        lhs.add(lblServerType);
-        lhs.add(lblServerHostname);
-        lhs.add(lblDatabase);
-        lhs.add(lblUsername);
-        lhs.add(lblPassword);
-
-        rhs.add(cmbServerType);
-        rhs.add(txtServerHostname);
-        rhs.add(txtDatabase);
-        rhs.add(txtUsername);
-        rhs.add(pwdPassword);
-
-        // setup label text
-        lblServerType.setText(Globals.lang("Server Type :"));
-        lblServerHostname.setText(Globals.lang("Server Hostname :"));
-        lblDatabase.setText(Globals.lang("Database :"));
-        lblUsername.setText(Globals.lang("Username :"));
-        lblPassword.setText(Globals.lang("Password :"));
-
-        // set label text alignment
-        for (JLabel label : lhs){
-            label.setHorizontalAlignment(JLabel.RIGHT);
-        }
-        
-        // set button text
-        btnConnect.setText(Globals.lang("Connect"));
-        btnCancel.setText(Globals.lang("Cancel"));
-
-        // init input fields to current DB strings
-        String srvSel = dbStrings.getServerType();
-        String[] srv = dbStrings.getServerTypes();
-        for (int i=0; i<srv.length; i++) {
-           cmbServerType.addItem(srv[i]);
-        }
-
-        cmbServerType.setSelectedItem(srvSel);
-        txtServerHostname.setText(dbStrings.getServerHostname());
-        txtDatabase.setText(dbStrings.getDatabase());
-        txtUsername.setText(dbStrings.getUsername());
-        pwdPassword.setText(dbStrings.getPassword());
-
-
-        // construct dialog
-        DefaultFormBuilder builder = new DefaultFormBuilder(new
-                                 FormLayout("right:pref, 4dlu, fill:pref", ""));
-
-        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-
-
-        // add labels and input fields
-        builder.append(lblServerType);
-        builder.append(cmbServerType);
-        builder.nextLine();
-        builder.append(lblServerHostname);
-        builder.append(txtServerHostname);
-        builder.nextLine();
-        builder.append(lblDatabase);
-        builder.append(txtDatabase);
-        builder.nextLine();
-        builder.append(lblUsername);
-        builder.append(txtUsername);
-        builder.nextLine();
-        builder.append(lblPassword);
-        builder.append(pwdPassword);
-        builder.nextLine();
-
-        // add the panel to the CENTER of your dialog:
-        getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
-
-        // add buttons are added in a similar way:
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(btnConnect);
-        bb.addButton(btnCancel);
-        bb.addGlue();
-
-        // add the buttons to the SOUTH of your dialog:
-        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-        pack();
-
-        ActionListener connectAction = new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-
-                String errorMessage = checkInput();
-
-                if ( errorMessage==null) {
-                    storeSettings();
-                    setVisible(false);
-                    setConnectToDB(true);
-                } else {
-                    JOptionPane.showMessageDialog(null, errorMessage,
-                            "Input Error", JOptionPane.ERROR_MESSAGE);
-                }
-
-            }
-        };
-
-        btnConnect.addActionListener(connectAction);
-        txtDatabase.addActionListener(connectAction);
-        txtServerHostname.addActionListener(connectAction);
-        txtUsername.addActionListener(connectAction);
-        pwdPassword.addActionListener(connectAction);
-
-        AbstractAction cancelAction = new AbstractAction() {
-            public void actionPerformed(ActionEvent e) {
-                setVisible(false);
-                dispose();
-                setConnectToDB(false);
-            }
-        };
-        btnCancel.addActionListener(cancelAction);
-
-        // Key bindings:
-        ActionMap am = builder.getPanel().getActionMap();
-        InputMap im = builder.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", cancelAction);
-    }
-
-    /**
-     * Checks the user input, and ensures that required fields have entries
-     *
-     * @return 
-     *      Appropriate error message to be displayed to user
-     */
-    private String checkInput () {
-
-        String[] fields = {"Server Hostname", "Database", "Username"};
-        String[] errors = new String[fields.length];
-        int cnt = 0;
-
-        if (txtServerHostname.getText().trim().equals("")) {
-            errors[cnt] = fields[0];
-            cnt++;
-        }
-
-        if (txtDatabase.getText().trim().equals("")) {
-            errors[cnt] = fields[1];
-            cnt++;
-        }
-
-        if (txtUsername.getText().trim().equals("")) {
-            errors[cnt] = fields[2];
-            cnt++;
-        }
-
-        String errMsg = Globals.lang("Please specify the ");
-
-        switch (cnt) {
-            case 0:
-                errMsg = null;
-                break;
-            case 1:
-                errMsg = errMsg + errors[0] + ".";
-                break;
-            case 2:
-                errMsg = errMsg + errors[0] + " and " + errors[1] + "."; 
-                break;
-            case 3:
-                errMsg = errMsg + errors[0] + ", " +  errors[1] 
-                      + ", and " + errors[2] + ".";
-                break;
-            default:
-
-        }
-
-        return errMsg;
-    }
-
-    /**
-     * Save user input.
-     */
-    private void storeSettings () {
-        dbStrings.setServerType(cmbServerType.getSelectedItem().toString());
-        dbStrings.setServerHostname(txtServerHostname.getText());
-        dbStrings.setDatabase(txtDatabase.getText());
-        dbStrings.setUsername(txtUsername.getText());
-
-        // Store these settings so they appear as default next time:
-        dbStrings.storeToPreferences();
-
-        char[] pwd = pwdPassword.getPassword();
-        String tmp = "";
-        for (int i=0; i<pwd.length; i++) {
-            tmp = tmp + pwd[i];
-        }
-        dbStrings.setPassword(tmp);
-        tmp = "";
-        Arrays.fill(pwd, '0');
-
-    }
-
-    public DBStrings getDBStrings() {
-        return dbStrings;
-    }
-
-    public void setDBStrings(DBStrings dbStrings) { 
-        this.dbStrings = dbStrings;
-    }
-
-    public boolean getConnectToDB() {
-        return connectToDB;
-    }
-
-    public void setConnectToDB(boolean connectToDB) {
-        this.connectToDB = connectToDB;
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.sql;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import javax.swing.*;
+
+import net.sf.jabref.Globals;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+
+/**
+ * Dialog box for collecting database connection strings from the user
+ *
+ * @author pattonlk
+ */
+public class DBConnectDialog extends JDialog {
+
+    // labels
+    JLabel lblServerType     = new JLabel();
+    JLabel lblServerHostname = new JLabel();
+    JLabel lblDatabase       = new JLabel();
+    JLabel lblUsername       = new JLabel();
+    JLabel lblPassword       = new JLabel();
+
+    // input fields
+    JComboBox cmbServerType = new JComboBox();
+    JTextField txtServerHostname = new JTextField(40);
+    JTextField txtDatabase = new JTextField(40);
+    JTextField txtUsername = new JTextField(40);        
+    JPasswordField pwdPassword = new JPasswordField(40);
+    JButton btnConnect = new JButton();
+    JButton btnCancel = new JButton();
+
+    // array for holding components on left-hand and right-hand sides
+    ArrayList<JLabel> lhs = new ArrayList<JLabel>();
+    ArrayList<JComponent> rhs = new ArrayList<JComponent>();
+
+    DBStrings dbStrings = new DBStrings();
+
+    private boolean connectToDB = false;
+
+    /** Creates a new instance of DBConnectDialog */
+    public DBConnectDialog( JFrame parent, DBStrings dbs) {
+
+        super(parent, Globals.lang("Connect to SQL Database"), true);
+
+        this.setResizable(false);
+        this.setLocationRelativeTo(parent);
+
+        dbStrings = dbs;
+
+        // build collections of components
+        lhs.add(lblServerType);
+        lhs.add(lblServerHostname);
+        lhs.add(lblDatabase);
+        lhs.add(lblUsername);
+        lhs.add(lblPassword);
+
+        rhs.add(cmbServerType);
+        rhs.add(txtServerHostname);
+        rhs.add(txtDatabase);
+        rhs.add(txtUsername);
+        rhs.add(pwdPassword);
+
+        // setup label text
+        lblServerType.setText(Globals.lang("Server Type :"));
+        lblServerHostname.setText(Globals.lang("Server Hostname :"));
+        lblDatabase.setText(Globals.lang("Database :"));
+        lblUsername.setText(Globals.lang("Username :"));
+        lblPassword.setText(Globals.lang("Password :"));
+
+        // set label text alignment
+        for (JLabel label : lhs){
+            label.setHorizontalAlignment(JLabel.RIGHT);
+        }
+        
+        // set button text
+        btnConnect.setText(Globals.lang("Connect"));
+        btnCancel.setText(Globals.lang("Cancel"));
+
+        // init input fields to current DB strings
+        String srvSel = dbStrings.getServerType();
+        String[] srv = dbStrings.getServerTypes();
+        for (int i=0; i<srv.length; i++) {
+           cmbServerType.addItem(srv[i]);
+        }
+
+        cmbServerType.setSelectedItem(srvSel);
+        txtServerHostname.setText(dbStrings.getServerHostname());
+        txtDatabase.setText(dbStrings.getDatabase());
+        txtUsername.setText(dbStrings.getUsername());
+        pwdPassword.setText(dbStrings.getPassword());
+
+
+        // construct dialog
+        DefaultFormBuilder builder = new DefaultFormBuilder(new
+                                 FormLayout("right:pref, 4dlu, fill:pref", ""));
+
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+
+        // add labels and input fields
+        builder.append(lblServerType);
+        builder.append(cmbServerType);
+        builder.nextLine();
+        builder.append(lblServerHostname);
+        builder.append(txtServerHostname);
+        builder.nextLine();
+        builder.append(lblDatabase);
+        builder.append(txtDatabase);
+        builder.nextLine();
+        builder.append(lblUsername);
+        builder.append(txtUsername);
+        builder.nextLine();
+        builder.append(lblPassword);
+        builder.append(pwdPassword);
+        builder.nextLine();
+
+        // add the panel to the CENTER of your dialog:
+        getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
+
+        // add buttons are added in a similar way:
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(btnConnect);
+        bb.addButton(btnCancel);
+        bb.addGlue();
+
+        // add the buttons to the SOUTH of your dialog:
+        getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        pack();
+
+        ActionListener connectAction = new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+
+                String errorMessage = checkInput();
+
+                if ( errorMessage==null) {
+                    storeSettings();
+                    setVisible(false);
+                    setConnectToDB(true);
+                } else {
+                    JOptionPane.showMessageDialog(null, errorMessage,
+                            "Input Error", JOptionPane.ERROR_MESSAGE);
+                }
+
+            }
+        };
+
+        btnConnect.addActionListener(connectAction);
+        txtDatabase.addActionListener(connectAction);
+        txtServerHostname.addActionListener(connectAction);
+        txtUsername.addActionListener(connectAction);
+        pwdPassword.addActionListener(connectAction);
+
+        AbstractAction cancelAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                setVisible(false);
+                dispose();
+                setConnectToDB(false);
+            }
+        };
+        btnCancel.addActionListener(cancelAction);
+
+        // Key bindings:
+        ActionMap am = builder.getPanel().getActionMap();
+        InputMap im = builder.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", cancelAction);
+    }
+
+    /**
+     * Checks the user input, and ensures that required fields have entries
+     *
+     * @return 
+     *      Appropriate error message to be displayed to user
+     */
+    private String checkInput () {
+
+        String[] fields = {"Server Hostname", "Database", "Username"};
+        String[] errors = new String[fields.length];
+        int cnt = 0;
+
+        if (txtServerHostname.getText().trim().equals("")) {
+            errors[cnt] = fields[0];
+            cnt++;
+        }
+
+        if (txtDatabase.getText().trim().equals("")) {
+            errors[cnt] = fields[1];
+            cnt++;
+        }
+
+        if (txtUsername.getText().trim().equals("")) {
+            errors[cnt] = fields[2];
+            cnt++;
+        }
+
+        String errMsg = Globals.lang("Please specify the ");
+
+        switch (cnt) {
+            case 0:
+                errMsg = null;
+                break;
+            case 1:
+                errMsg = errMsg + errors[0] + ".";
+                break;
+            case 2:
+                errMsg = errMsg + errors[0] + " and " + errors[1] + "."; 
+                break;
+            case 3:
+                errMsg = errMsg + errors[0] + ", " +  errors[1] 
+                      + ", and " + errors[2] + ".";
+                break;
+            default:
+
+        }
+
+        return errMsg;
+    }
+
+    /**
+     * Save user input.
+     */
+    private void storeSettings () {
+        dbStrings.setServerType(cmbServerType.getSelectedItem().toString());
+        dbStrings.setServerHostname(txtServerHostname.getText());
+        dbStrings.setDatabase(txtDatabase.getText());
+        dbStrings.setUsername(txtUsername.getText());
+
+        // Store these settings so they appear as default next time:
+        dbStrings.storeToPreferences();
+
+        char[] pwd = pwdPassword.getPassword();
+        String tmp = "";
+        for (int i=0; i<pwd.length; i++) {
+            tmp = tmp + pwd[i];
+        }
+        dbStrings.setPassword(tmp);
+        tmp = "";
+        Arrays.fill(pwd, '0');
+
+    }
+
+    public DBStrings getDBStrings() {
+        return dbStrings;
+    }
+
+    public void setDBStrings(DBStrings dbStrings) { 
+        this.dbStrings = dbStrings;
+    }
+
+    public boolean getConnectToDB() {
+        return connectToDB;
+    }
+
+    public void setConnectToDB(boolean connectToDB) {
+        this.connectToDB = connectToDB;
+    }
+
+}
diff --git a/src/java/net/sf/jabref/sql/DBExporterAndImporterFactory.java b/src/java/net/sf/jabref/sql/DBExporterAndImporterFactory.java
index ac94c7c..eb7ab05 100644
--- a/src/java/net/sf/jabref/sql/DBExporterAndImporterFactory.java
+++ b/src/java/net/sf/jabref/sql/DBExporterAndImporterFactory.java
@@ -1,115 +1,115 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-package net.sf.jabref.sql;
-
-import net.sf.jabref.sql.exporter.DBExporter;
-import net.sf.jabref.sql.exporter.MySQLExporter;
-import net.sf.jabref.sql.exporter.PostgreSQLExporter;
-import net.sf.jabref.sql.importer.DBImporter;
-import net.sf.jabref.sql.importer.MySQLImporter;
-import net.sf.jabref.sql.importer.PostgreSQLImporter;
-
-/**
- * Created by ifsteinm
- * 
- * Jan 20th 	This class is a factory that creates DBImporter and DBExporters
- * 				when the user wishes to import or export a bib file to DBMS
- * 
- */
-public class DBExporterAndImporterFactory {
-
-	/**
-	 * All DBTypes must appear here. The enum items must be the
-	 * names that appear in the combobox used to select the DB,
-	 * because this text is used to choose which DBImporter/Exporter
-	 * will be sent back to the requester
-	 * 
-	 */
-	public enum DBType {
-		MYSQL("MYSQL"), POSTGRESQL("POSTGRESQL");
-		private String dbType;
-
-		private DBType(String dbType) {
-			this.dbType = dbType;
-		}
-
-		public String getDBType() {
-			return dbType;
-		}
-	}
-
-	/**
-	 * Returns a DBExporter object according to a given DBType
-	 * 
-	 * @param type
-	 * 		The type of the database selected
-	 * @return The DBExporter object instance
-	 */
-	public DBExporter getExporter(DBType type) {
-		DBExporter exporter = null;
-		switch (type) {
-		case MYSQL:
-			exporter = MySQLExporter.getInstance();
-			break;
-		case POSTGRESQL:
-			exporter = PostgreSQLExporter.getInstance();
-			break;
-		}
-		return exporter;
-	}
-	
-	/**
-	 * Returns a DBExporter object according the type given as a String
-	 * 
-	 * @param type
-	 * 		The type of the DB as a String. (e.g. Postgresql, MySQL)
-	 * @return The DBExporter object instance
-	 */
-	public DBExporter getExporter(String type) {
-		return this.getExporter(DBType.valueOf(type.toUpperCase()));
-	}
-
-	/**
-	 * Returns a DBImporter object according to a given DBType
-	 * 
-	 * @param type
-	 * 		The type of the database selected
-	 * @return The DBImporter object instance
-	 */
-	public DBImporter getImporter(DBType type) {
-		DBImporter importer = null;
-		switch (type) {
-		case MYSQL:
-			importer = MySQLImporter.getInstance();
-			break;
-		case POSTGRESQL:
-			importer = PostgreSQLImporter.getInstance();
-			break;
-		}
-		return importer;
-	}
-
-	/**
-	 * Returns a DBImporter object according the type given as a String
-	 * 
-	 * @param type
-	 * 		The type of the DB as a String. (e.g. Postgresql, MySQL)
-	 * @return The DBImporter object instance
-	 */
-	public DBImporter getImporter(String type) {
-		return this.getImporter(DBType.valueOf(type.toUpperCase()));
-	}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+package net.sf.jabref.sql;
+
+import net.sf.jabref.sql.exporter.DBExporter;
+import net.sf.jabref.sql.exporter.MySQLExporter;
+import net.sf.jabref.sql.exporter.PostgreSQLExporter;
+import net.sf.jabref.sql.importer.DBImporter;
+import net.sf.jabref.sql.importer.MySQLImporter;
+import net.sf.jabref.sql.importer.PostgreSQLImporter;
+
+/**
+ * Created by ifsteinm
+ * 
+ * Jan 20th 	This class is a factory that creates DBImporter and DBExporters
+ * 				when the user wishes to import or export a bib file to DBMS
+ * 
+ */
+public class DBExporterAndImporterFactory {
+
+	/**
+	 * All DBTypes must appear here. The enum items must be the
+	 * names that appear in the combobox used to select the DB,
+	 * because this text is used to choose which DBImporter/Exporter
+	 * will be sent back to the requester
+	 * 
+	 */
+	public enum DBType {
+		MYSQL("MYSQL"), POSTGRESQL("POSTGRESQL");
+		private String dbType;
+
+		private DBType(String dbType) {
+			this.dbType = dbType;
+		}
+
+		public String getDBType() {
+			return dbType;
+		}
+	}
+
+	/**
+	 * Returns a DBExporter object according to a given DBType
+	 * 
+	 * @param type
+	 * 		The type of the database selected
+	 * @return The DBExporter object instance
+	 */
+	public DBExporter getExporter(DBType type) {
+		DBExporter exporter = null;
+		switch (type) {
+		case MYSQL:
+			exporter = MySQLExporter.getInstance();
+			break;
+		case POSTGRESQL:
+			exporter = PostgreSQLExporter.getInstance();
+			break;
+		}
+		return exporter;
+	}
+	
+	/**
+	 * Returns a DBExporter object according the type given as a String
+	 * 
+	 * @param type
+	 * 		The type of the DB as a String. (e.g. Postgresql, MySQL)
+	 * @return The DBExporter object instance
+	 */
+	public DBExporter getExporter(String type) {
+		return this.getExporter(DBType.valueOf(type.toUpperCase()));
+	}
+
+	/**
+	 * Returns a DBImporter object according to a given DBType
+	 * 
+	 * @param type
+	 * 		The type of the database selected
+	 * @return The DBImporter object instance
+	 */
+	public DBImporter getImporter(DBType type) {
+		DBImporter importer = null;
+		switch (type) {
+		case MYSQL:
+			importer = MySQLImporter.getInstance();
+			break;
+		case POSTGRESQL:
+			importer = PostgreSQLImporter.getInstance();
+			break;
+		}
+		return importer;
+	}
+
+	/**
+	 * Returns a DBImporter object according the type given as a String
+	 * 
+	 * @param type
+	 * 		The type of the DB as a String. (e.g. Postgresql, MySQL)
+	 * @return The DBImporter object instance
+	 */
+	public DBImporter getImporter(String type) {
+		return this.getImporter(DBType.valueOf(type.toUpperCase()));
+	}
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/sql/DBImportExportDialog.java b/src/java/net/sf/jabref/sql/DBImportExportDialog.java
index eea3f48..84dbbc1 100644
--- a/src/java/net/sf/jabref/sql/DBImportExportDialog.java
+++ b/src/java/net/sf/jabref/sql/DBImportExportDialog.java
@@ -1,287 +1,287 @@
-package net.sf.jabref.sql;
-
-/*  Copyright (C) 2003-2011 JabRef contributors.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Vector;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.KeyStroke;
-import javax.swing.ListSelectionModel;
-import javax.swing.table.DefaultTableModel;
-
-import org.w3c.dom.views.AbstractView;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-/**
- * 
- * @author ifsteinm
- */
-
-public class DBImportExportDialog implements MouseListener, KeyListener {
-
-	private JDialog diag;
-	private JTable table;
-	private String dialogTitle;
-	private String dialogTopMessage;
-	private int tableSelectionModel;
-
-	// IMPORT
-	public List<String> listOfDBs = new ArrayList<String>();
-	public boolean moreThanOne = false;
-	// EXPORT
-	public String selectedDB = "";
-	public boolean hasDBSelected = false;
-	public boolean removeAction = false;
-	public int selectedInt = -1;
-	private DialogType dialogType;
-
-	public DialogType getDialogType() {
-		return dialogType;
-	}
-
-	public void setDialogType(DialogType dialogType) {
-		this.dialogType = dialogType;
-	}
-
-	public enum DialogType {
-		IMPORTER("IMPORTER"), EXPORTER("EXPORTER");
-		private String dialogType;
-
-		private DialogType(String dialogType) {
-			this.dialogType = dialogType;
-		}
-
-		public String getDialogType() {
-			return this.dialogType;
-		}
-	}
-
-	private JButton importButton = new JButton(Globals.lang("Import"));
-	private JButton exportButton = new JButton(Globals.lang("Export"));
-	private JButton cancelButton = new JButton(Globals.lang("Cancel"));
-	private JButton removeButton = new JButton(Globals.lang("Remove Selected"));
-
-	public DBImportExportDialog(JabRefFrame frame, Vector<Vector<String>> rows, DialogType dialogType) {
-		this.dialogType = dialogType;
-
-		Vector<String> columns = new Vector<String>();
-		columns.add("Databases");
-		table = new JTable();
-		DefaultTableModel model = new DefaultTableModel(rows,columns){
-			private static final long serialVersionUID = 1L;
-			public boolean isCellEditable(int row, int column){
-				return false;
-			}
-		};
-		
-		table.setModel (model);
-
-		
-		if (dialogType.equals(DialogType.EXPORTER)){
-			dialogTitle = Globals.lang("SQL Database Exporter");
-			dialogTopMessage = Globals.lang("Select target SQL database:");
-			tableSelectionModel = ListSelectionModel.SINGLE_SELECTION;
-			table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put((KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0)), "exportAction");
-			table.getActionMap().put("exportAction",new AbstractAction() {
-			    public void actionPerformed(ActionEvent e) {
-			        exportAction();
-			    }
-			});
-		}
-		else{
-			this.dialogType = dialogType;
-			dialogTitle = Globals.lang("SQL Database Importer");
-			dialogTopMessage = Globals.lang("Please select which JabRef databases do you want to import:");
-			tableSelectionModel = ListSelectionModel.MULTIPLE_INTERVAL_SELECTION;
-			table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put((KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0)), "importAction");
-			table.getActionMap().put("importAction",new AbstractAction() {
-			    public void actionPerformed(ActionEvent e) {
-			        importAction();
-			    }
-			});
-		}		
-		
-		diag = new JDialog(frame, dialogTitle, false);
-		JPanel pan = new JPanel();
-		pan.setLayout(new BorderLayout());
-
-		
-		JLabel lab = new JLabel(dialogTopMessage);
-		lab.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-		pan.add(lab, BorderLayout.NORTH);
-
-		table.setSelectionMode(tableSelectionModel);
-		table.setPreferredScrollableViewportSize(new Dimension(100, 100));
-		table.setTableHeader(null);
-		table.setRowSelectionInterval(0, 0);
-		
-		pan.add(new JScrollPane(table), BorderLayout.CENTER);
-		diag.getContentPane().add(pan, BorderLayout.NORTH);
-		pan = new JPanel();
-		pan.setLayout(new BorderLayout());
-
-		diag.getContentPane().add(pan, BorderLayout.CENTER);
-
-		ButtonBarBuilder b = new ButtonBarBuilder();
-		b.addGlue();
-		if (dialogType.equals(DialogType.IMPORTER))
-			b.addButton(importButton);
-		else
-			b.addButton(exportButton);
-
-		b.addRelatedGap();
-		b.addButton(cancelButton);
-		b.addRelatedGap();
-		b.addButton(removeButton);
-
-		b.addGlue();
-		b.getPanel().setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-		diag.getContentPane().add(b.getPanel(), BorderLayout.SOUTH);
-		diag.pack();
-		diag.setLocationRelativeTo(frame);
-		table.addMouseListener(this);
-
-		importButton.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent arg0) {
-				importAction();
-			}
-		});
-
-		exportButton.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent arg0) {
-				exportAction();
-			}
-		});
-
-		cancelButton.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent arg0) {
-				moreThanOne = false;
-				hasDBSelected = false;
-				diag.dispose();
-			}
-		});
-		removeButton.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent arg0) {
-				moreThanOne = false;
-				hasDBSelected = true;
-				selectedInt = table.getSelectedRow();
-				selectedDB = (String) table.getValueAt(selectedInt, 0); 
-				int areYouSure = JOptionPane.showConfirmDialog(diag,"Are you sure you want to remove the already\nexistent SQL DBs?");
-				if (areYouSure == JOptionPane.YES_OPTION)
-				{
-					removeAction = true;
-					diag.dispose();
-				}
-			}
-		});
-		diag.setModal(true);
-		diag.setVisible(true);
-	}
-
-	public JDialog getDiag() {
-		return this.diag;
-	}
-
-	private void exportAction() {
-		selectedInt = table.getSelectedRow();
-		selectedDB = (String) table.getValueAt(selectedInt, 0);
-		hasDBSelected = true;
-		diag.dispose();
-	}
-
-	private void importAction() {
-		int[] selectedInt = table.getSelectedRows();
-		for (int i=0; i < selectedInt.length;i++) {
-			listOfDBs.add((String)table.getValueAt(selectedInt[i], 0));
-			moreThanOne = true;
-		}
-		diag.dispose();
-	}
-	
-
-	@Override
-	public void mouseClicked(MouseEvent e) {
-		if ((e.getClickCount() == 2)
-				&& this.dialogType.equals(DialogType.EXPORTER)) {
-			this.exportAction();
-		}
-	}
-
-	@Override
-	public void mouseEntered(MouseEvent arg0) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	public void mouseExited(MouseEvent arg0) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void mousePressed(MouseEvent arg0) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void mouseReleased(MouseEvent arg0) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void keyPressed(KeyEvent arg0) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void keyReleased(KeyEvent arg0) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void keyTyped(KeyEvent arg0) {
-		// TODO Auto-generated method stub
-
-	}
-}
+package net.sf.jabref.sql;
+
+/*  Copyright (C) 2003-2011 JabRef contributors.
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.KeyStroke;
+import javax.swing.ListSelectionModel;
+import javax.swing.table.DefaultTableModel;
+
+import org.w3c.dom.views.AbstractView;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+/**
+ * 
+ * @author ifsteinm
+ */
+
+public class DBImportExportDialog implements MouseListener, KeyListener {
+
+	private JDialog diag;
+	private JTable table;
+	private String dialogTitle;
+	private String dialogTopMessage;
+	private int tableSelectionModel;
+
+	// IMPORT
+	public List<String> listOfDBs = new ArrayList<String>();
+	public boolean moreThanOne = false;
+	// EXPORT
+	public String selectedDB = "";
+	public boolean hasDBSelected = false;
+	public boolean removeAction = false;
+	public int selectedInt = -1;
+	private DialogType dialogType;
+
+	public DialogType getDialogType() {
+		return dialogType;
+	}
+
+	public void setDialogType(DialogType dialogType) {
+		this.dialogType = dialogType;
+	}
+
+	public enum DialogType {
+		IMPORTER("IMPORTER"), EXPORTER("EXPORTER");
+		private String dialogType;
+
+		private DialogType(String dialogType) {
+			this.dialogType = dialogType;
+		}
+
+		public String getDialogType() {
+			return this.dialogType;
+		}
+	}
+
+	private JButton importButton = new JButton(Globals.lang("Import"));
+	private JButton exportButton = new JButton(Globals.lang("Export"));
+	private JButton cancelButton = new JButton(Globals.lang("Cancel"));
+	private JButton removeButton = new JButton(Globals.lang("Remove Selected"));
+
+	public DBImportExportDialog(JabRefFrame frame, Vector<Vector<String>> rows, DialogType dialogType) {
+		this.dialogType = dialogType;
+
+		Vector<String> columns = new Vector<String>();
+		columns.add("Databases");
+		table = new JTable();
+		DefaultTableModel model = new DefaultTableModel(rows,columns){
+			private static final long serialVersionUID = 1L;
+			public boolean isCellEditable(int row, int column){
+				return false;
+			}
+		};
+		
+		table.setModel (model);
+
+		
+		if (dialogType.equals(DialogType.EXPORTER)){
+			dialogTitle = Globals.lang("SQL Database Exporter");
+			dialogTopMessage = Globals.lang("Select target SQL database:");
+			tableSelectionModel = ListSelectionModel.SINGLE_SELECTION;
+			table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put((KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0)), "exportAction");
+			table.getActionMap().put("exportAction",new AbstractAction() {
+			    public void actionPerformed(ActionEvent e) {
+			        exportAction();
+			    }
+			});
+		}
+		else{
+			this.dialogType = dialogType;
+			dialogTitle = Globals.lang("SQL Database Importer");
+			dialogTopMessage = Globals.lang("Please select which JabRef databases do you want to import:");
+			tableSelectionModel = ListSelectionModel.MULTIPLE_INTERVAL_SELECTION;
+			table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put((KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0)), "importAction");
+			table.getActionMap().put("importAction",new AbstractAction() {
+			    public void actionPerformed(ActionEvent e) {
+			        importAction();
+			    }
+			});
+		}		
+		
+		diag = new JDialog(frame, dialogTitle, false);
+		JPanel pan = new JPanel();
+		pan.setLayout(new BorderLayout());
+
+		
+		JLabel lab = new JLabel(dialogTopMessage);
+		lab.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+		pan.add(lab, BorderLayout.NORTH);
+
+		table.setSelectionMode(tableSelectionModel);
+		table.setPreferredScrollableViewportSize(new Dimension(100, 100));
+		table.setTableHeader(null);
+		table.setRowSelectionInterval(0, 0);
+		
+		pan.add(new JScrollPane(table), BorderLayout.CENTER);
+		diag.getContentPane().add(pan, BorderLayout.NORTH);
+		pan = new JPanel();
+		pan.setLayout(new BorderLayout());
+
+		diag.getContentPane().add(pan, BorderLayout.CENTER);
+
+		ButtonBarBuilder b = new ButtonBarBuilder();
+		b.addGlue();
+		if (dialogType.equals(DialogType.IMPORTER))
+			b.addButton(importButton);
+		else
+			b.addButton(exportButton);
+
+		b.addRelatedGap();
+		b.addButton(cancelButton);
+		b.addRelatedGap();
+		b.addButton(removeButton);
+
+		b.addGlue();
+		b.getPanel().setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+		diag.getContentPane().add(b.getPanel(), BorderLayout.SOUTH);
+		diag.pack();
+		diag.setLocationRelativeTo(frame);
+		table.addMouseListener(this);
+
+		importButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				importAction();
+			}
+		});
+
+		exportButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				exportAction();
+			}
+		});
+
+		cancelButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				moreThanOne = false;
+				hasDBSelected = false;
+				diag.dispose();
+			}
+		});
+		removeButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				moreThanOne = false;
+				hasDBSelected = true;
+				selectedInt = table.getSelectedRow();
+				selectedDB = (String) table.getValueAt(selectedInt, 0); 
+				int areYouSure = JOptionPane.showConfirmDialog(diag,"Are you sure you want to remove the already\nexistent SQL DBs?");
+				if (areYouSure == JOptionPane.YES_OPTION)
+				{
+					removeAction = true;
+					diag.dispose();
+				}
+			}
+		});
+		diag.setModal(true);
+		diag.setVisible(true);
+	}
+
+	public JDialog getDiag() {
+		return this.diag;
+	}
+
+	private void exportAction() {
+		selectedInt = table.getSelectedRow();
+		selectedDB = (String) table.getValueAt(selectedInt, 0);
+		hasDBSelected = true;
+		diag.dispose();
+	}
+
+	private void importAction() {
+		int[] selectedInt = table.getSelectedRows();
+		for (int i=0; i < selectedInt.length;i++) {
+			listOfDBs.add((String)table.getValueAt(selectedInt[i], 0));
+			moreThanOne = true;
+		}
+		diag.dispose();
+	}
+	
+
+	@Override
+	public void mouseClicked(MouseEvent e) {
+		if ((e.getClickCount() == 2)
+				&& this.dialogType.equals(DialogType.EXPORTER)) {
+			this.exportAction();
+		}
+	}
+
+	@Override
+	public void mouseEntered(MouseEvent arg0) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	public void mouseExited(MouseEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void mousePressed(MouseEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void mouseReleased(MouseEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void keyPressed(KeyEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void keyReleased(KeyEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void keyTyped(KeyEvent arg0) {
+		// TODO Auto-generated method stub
+
+	}
+}
diff --git a/src/java/net/sf/jabref/sql/DBImporterExporter.java b/src/java/net/sf/jabref/sql/DBImporterExporter.java
index dce3122..8b95b76 100644
--- a/src/java/net/sf/jabref/sql/DBImporterExporter.java
+++ b/src/java/net/sf/jabref/sql/DBImporterExporter.java
@@ -1,118 +1,118 @@
-package net.sf.jabref.sql;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import javax.swing.JOptionPane;
-
-import net.sf.jabref.MetaData;
-import net.sf.jabref.sql.DBImportExportDialog.DialogType;
-
-public class DBImporterExporter {
-
-	public void removeDB(DBImportExportDialog dialogo, String dbName,
-			Connection conn, MetaData metadata) throws SQLException {
-		if (dialogo.removeAction) {
-			if ((dialogo.selectedInt <= 0)
-					&& (dialogo.getDialogType().equals(DialogType.EXPORTER))) {
-				JOptionPane.showMessageDialog(dialogo.getDiag(),
-						"Please select a DB to be removed", "SQL Export",
-						JOptionPane.INFORMATION_MESSAGE);
-			} else {
-				removeAGivenDB(conn,
-						getDatabaseIDByName(metadata, conn, dbName));
-			}
-		}
-	}
-
-	/**
-	 * Returns a Jabref Database ID from the database in case the DB is already
-	 * exported. In case the bib was already exported before, the method returns
-	 * the id, otherwise it calls the method that inserts a new row and returns
-	 * the ID for this new database
-	 * 
-	 * @param metaData
-	 *            The MetaData object containing the database information
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be written.
-	 * @return The ID of database row of the jabref database being exported
-	 * @throws SQLException
-	 */
-	public int getDatabaseIDByName(MetaData metaData, Object out, String dbName)
-			throws SQLException {
-
-		if (out instanceof Connection) {
-			Object response = SQLUtil.processQueryWithResults(out,
-					"SELECT database_id FROM jabref_database WHERE database_name='"
-							+ dbName + "';");
-			ResultSet rs = ((Statement) response).getResultSet();
-			if (rs.next())
-				return rs.getInt("database_id");
-			else {
-				insertJabRefDatabase(metaData, out, dbName);
-				return getDatabaseIDByName(metaData, out, dbName);
-			}
-		}
-		// in case of text export there will be only 1 bib exported
-		else {
-			insertJabRefDatabase(metaData, out, dbName);
-			return 1;
-		}
-	}
-
-	public void removeAGivenDB(Object out, int database_id) throws SQLException {
-		removeAllRecordsForAGivenDB(out, database_id);
-		SQLUtil.processQuery(out,
-				"DELETE FROM jabref_database WHERE database_id='" + database_id
-						+ "';");
-	}
-
-	/**
-	 * Removes all records for the database being exported in case it was
-	 * exported before.
-	 * 
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be written.
-	 * @param database_id
-	 *            Id of the database being exported.
-	 * @throws SQLException
-	 */
-	public void removeAllRecordsForAGivenDB(Object out, int database_id)
-			throws SQLException {
-		SQLUtil.processQuery(out, "DELETE FROM entries WHERE database_id='"
-				+ database_id + "';");
-		SQLUtil.processQuery(out, "DELETE FROM groups WHERE database_id='"
-				+ database_id + "';");
-		SQLUtil.processQuery(out, "DELETE FROM strings WHERE database_id='"
-				+ database_id + "';");
-	}
-
-	/**
-	 * This method creates a new row into jabref_database table enabling to
-	 * export more than one .bib
-	 * 
-	 * @param metaData
-	 *            The MetaData object containing the groups information
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be written.
-	 * 
-	 * @throws SQLException
-	 */
-	private void insertJabRefDatabase(final MetaData metaData, Object out,
-			String dbName) throws SQLException {
-		String path = null;
-		if (null == metaData.getFile())
-			path = dbName;
-		else
-			path = metaData.getFile().getAbsolutePath();
-		SQLUtil.processQuery(out,
-				"INSERT INTO jabref_database(database_name, md5_path) VALUES ('"
-						+ dbName + "', md5('" + path + "'));");
-	}
-
-}
+package net.sf.jabref.sql;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import javax.swing.JOptionPane;
+
+import net.sf.jabref.MetaData;
+import net.sf.jabref.sql.DBImportExportDialog.DialogType;
+
+public class DBImporterExporter {
+
+	public void removeDB(DBImportExportDialog dialogo, String dbName,
+			Connection conn, MetaData metadata) throws SQLException {
+		if (dialogo.removeAction) {
+			if ((dialogo.selectedInt <= 0)
+					&& (dialogo.getDialogType().equals(DialogType.EXPORTER))) {
+				JOptionPane.showMessageDialog(dialogo.getDiag(),
+						"Please select a DB to be removed", "SQL Export",
+						JOptionPane.INFORMATION_MESSAGE);
+			} else {
+				removeAGivenDB(conn,
+						getDatabaseIDByName(metadata, conn, dbName));
+			}
+		}
+	}
+
+	/**
+	 * Returns a Jabref Database ID from the database in case the DB is already
+	 * exported. In case the bib was already exported before, the method returns
+	 * the id, otherwise it calls the method that inserts a new row and returns
+	 * the ID for this new database
+	 * 
+	 * @param metaData
+	 *            The MetaData object containing the database information
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be written.
+	 * @return The ID of database row of the jabref database being exported
+	 * @throws SQLException
+	 */
+	public int getDatabaseIDByName(MetaData metaData, Object out, String dbName)
+			throws SQLException {
+
+		if (out instanceof Connection) {
+			Object response = SQLUtil.processQueryWithResults(out,
+					"SELECT database_id FROM jabref_database WHERE database_name='"
+							+ dbName + "';");
+			ResultSet rs = ((Statement) response).getResultSet();
+			if (rs.next())
+				return rs.getInt("database_id");
+			else {
+				insertJabRefDatabase(metaData, out, dbName);
+				return getDatabaseIDByName(metaData, out, dbName);
+			}
+		}
+		// in case of text export there will be only 1 bib exported
+		else {
+			insertJabRefDatabase(metaData, out, dbName);
+			return 1;
+		}
+	}
+
+	public void removeAGivenDB(Object out, int database_id) throws SQLException {
+		removeAllRecordsForAGivenDB(out, database_id);
+		SQLUtil.processQuery(out,
+				"DELETE FROM jabref_database WHERE database_id='" + database_id
+						+ "';");
+	}
+
+	/**
+	 * Removes all records for the database being exported in case it was
+	 * exported before.
+	 * 
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be written.
+	 * @param database_id
+	 *            Id of the database being exported.
+	 * @throws SQLException
+	 */
+	public void removeAllRecordsForAGivenDB(Object out, int database_id)
+			throws SQLException {
+		SQLUtil.processQuery(out, "DELETE FROM entries WHERE database_id='"
+				+ database_id + "';");
+		SQLUtil.processQuery(out, "DELETE FROM groups WHERE database_id='"
+				+ database_id + "';");
+		SQLUtil.processQuery(out, "DELETE FROM strings WHERE database_id='"
+				+ database_id + "';");
+	}
+
+	/**
+	 * This method creates a new row into jabref_database table enabling to
+	 * export more than one .bib
+	 * 
+	 * @param metaData
+	 *            The MetaData object containing the groups information
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be written.
+	 * 
+	 * @throws SQLException
+	 */
+	private void insertJabRefDatabase(final MetaData metaData, Object out,
+			String dbName) throws SQLException {
+		String path = null;
+		if (null == metaData.getFile())
+			path = dbName;
+		else
+			path = metaData.getFile().getAbsolutePath();
+		SQLUtil.processQuery(out,
+				"INSERT INTO jabref_database(database_name, md5_path) VALUES ('"
+						+ dbName + "', md5('" + path + "'));");
+	}
+
+}
diff --git a/src/java/net/sf/jabref/sql/DBStrings.java b/src/java/net/sf/jabref/sql/DBStrings.java
index 1dc250f..741d63c 100644
--- a/src/java/net/sf/jabref/sql/DBStrings.java
+++ b/src/java/net/sf/jabref/sql/DBStrings.java
@@ -1,134 +1,134 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.sql;
-
-import net.sf.jabref.Globals;
-
-/**
- *
- * @author pattonlk
- */
-public class DBStrings {
-   
-    private String serverType;
-    private String serverHostname;
-    private String database;
-    private String username;
-    private String password;
-
-    private String[] serverTypes;
-    private boolean isInitialized;
-    private boolean configValid;
-
-    /** Creates a new instance of DBStrings */
-    public DBStrings() {
-        this.setServerType(null);
-        this.setServerHostname(null);
-        this.setDatabase(null);
-        this.setUsername(null);
-        this.setPassword(null);
-        this.isInitialized(false);
-        this.isConfigValid(false);
-    }
-
-   /**
-    * Initializes the variables needed with defaults
-    */
-    public void initialize() {
-        String [] servers = {Globals.lang("MySQL"), Globals.lang("PostgreSQL")};
-        setServerTypes(servers);
-        setServerType(Globals.prefs.get("dbConnectServerType"));
-        setServerHostname(Globals.prefs.get("dbConnectHostname"));
-        setDatabase(Globals.prefs.get("dbConnectDatabase"));
-        setUsername(Globals.prefs.get("dbConnectUsername"));
-        setPassword("");
-        isInitialized(true);
-    }
-
-    public void setServerType(String serverType) {
-        this.serverType = serverType;
-    }
-
-    public void setServerHostname(String serverHostname) {
-        this.serverHostname = serverHostname;
-    }
-
-    public void setDatabase(String database) {
-        this.database = database;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getServerType() {
-        return serverType;
-    }
-
-    public String getServerHostname() {
-        return serverHostname;
-    }
-
-    public String getDatabase() {
-        return database;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public String[] getServerTypes() {
-        return serverTypes;
-    }
-
-    public void setServerTypes(String[] serverTypes) {
-        this.serverTypes = serverTypes;
-    }
-
-    public boolean isInitialized() {
-        return isInitialized;
-    }
-
-    public void isInitialized(boolean isInitialized) {
-        this.isInitialized = isInitialized;
-    }
-
-    public boolean isConfigValid() {
-        return configValid;
-    }
-
-    public void isConfigValid(boolean configValid) {
-        this.configValid = configValid;
-    }
-
-    /**
-     * Store these db strings into JabRef preferences.
-     */
-    public void storeToPreferences() {
-        Globals.prefs.put("dbConnectServerType", getServerType());
-        Globals.prefs.put("dbConnectHostname", getServerHostname());
-        Globals.prefs.put("dbConnectDatabase", getDatabase());
-        Globals.prefs.put("dbConnectUsername", getUsername());
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.sql;
+
+import net.sf.jabref.Globals;
+
+/**
+ *
+ * @author pattonlk
+ */
+public class DBStrings {
+   
+    private String serverType;
+    private String serverHostname;
+    private String database;
+    private String username;
+    private String password;
+
+    private String[] serverTypes;
+    private boolean isInitialized;
+    private boolean configValid;
+
+    /** Creates a new instance of DBStrings */
+    public DBStrings() {
+        this.setServerType(null);
+        this.setServerHostname(null);
+        this.setDatabase(null);
+        this.setUsername(null);
+        this.setPassword(null);
+        this.isInitialized(false);
+        this.isConfigValid(false);
+    }
+
+   /**
+    * Initializes the variables needed with defaults
+    */
+    public void initialize() {
+        String [] servers = {Globals.lang("MySQL"), Globals.lang("PostgreSQL")};
+        setServerTypes(servers);
+        setServerType(Globals.prefs.get("dbConnectServerType"));
+        setServerHostname(Globals.prefs.get("dbConnectHostname"));
+        setDatabase(Globals.prefs.get("dbConnectDatabase"));
+        setUsername(Globals.prefs.get("dbConnectUsername"));
+        setPassword("");
+        isInitialized(true);
+    }
+
+    public void setServerType(String serverType) {
+        this.serverType = serverType;
+    }
+
+    public void setServerHostname(String serverHostname) {
+        this.serverHostname = serverHostname;
+    }
+
+    public void setDatabase(String database) {
+        this.database = database;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getServerType() {
+        return serverType;
+    }
+
+    public String getServerHostname() {
+        return serverHostname;
+    }
+
+    public String getDatabase() {
+        return database;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public String[] getServerTypes() {
+        return serverTypes;
+    }
+
+    public void setServerTypes(String[] serverTypes) {
+        this.serverTypes = serverTypes;
+    }
+
+    public boolean isInitialized() {
+        return isInitialized;
+    }
+
+    public void isInitialized(boolean isInitialized) {
+        this.isInitialized = isInitialized;
+    }
+
+    public boolean isConfigValid() {
+        return configValid;
+    }
+
+    public void isConfigValid(boolean configValid) {
+        this.configValid = configValid;
+    }
+
+    /**
+     * Store these db strings into JabRef preferences.
+     */
+    public void storeToPreferences() {
+        Globals.prefs.put("dbConnectServerType", getServerType());
+        Globals.prefs.put("dbConnectHostname", getServerHostname());
+        Globals.prefs.put("dbConnectDatabase", getDatabase());
+        Globals.prefs.put("dbConnectUsername", getUsername());
+    }
+}
diff --git a/src/java/net/sf/jabref/sql/DbConnectAction.java b/src/java/net/sf/jabref/sql/DbConnectAction.java
index 0ae4d70..f2a66fa 100644
--- a/src/java/net/sf/jabref/sql/DbConnectAction.java
+++ b/src/java/net/sf/jabref/sql/DbConnectAction.java
@@ -1,101 +1,101 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-package net.sf.jabref.sql;
-
-import net.sf.jabref.BaseAction;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.Util;
-import net.sf.jabref.Globals;
-import net.sf.jabref.sql.exporter.DBExporter;
-
-import javax.swing.*;
-import java.sql.Connection;
-import java.awt.event.ActionEvent;
-
-/**
- * Created by IntelliJ IDEA. User: alver Date: Mar 27, 2008 Time: 6:05:13 PM To
- * change this template use File | Settings | File Templates.
- * 
- * Jan 20th Adjusted to accomodate changes on SQL Exporter module by ifsteinm
- * 
- */
-public class DbConnectAction extends BaseAction {
-	private BasePanel panel;
-
-	public DbConnectAction(BasePanel panel) {
-		this.panel = panel;
-	}
-
-	public AbstractAction getAction() {
-		return new DbImpAction();
-	}
-
-	class DbImpAction extends AbstractAction {
-		public void actionPerformed(ActionEvent e) {
-			action();
-
-		}
-	}
-
-	public void action() {
-
-		DBStrings dbs = panel.metaData().getDBStrings();
-
-		// init DB strings if necessary
-		if (!dbs.isInitialized()) {
-			dbs.initialize();
-		}
-
-		// show connection dialog
-		DBConnectDialog dbd = new DBConnectDialog(panel.frame(), dbs);
-		Util.placeDialog(dbd, panel);
-		dbd.setVisible(true);
-
-		// connnect to database to test DBStrings
-		if (dbd.getConnectToDB()) {
-
-			dbs = dbd.getDBStrings();
-
-			try {
-
-				panel.frame().output(
-						Globals.lang("Establishing SQL connection..."));
-				DBExporter exporter = (new DBExporterAndImporterFactory())
-						.getExporter(dbs.getServerType());
-				Connection conn = exporter.connectToDB(dbs);
-				conn.close();
-				dbs.isConfigValid(true);
-				panel.frame().output(
-						Globals.lang("SQL connection established."));
-			} catch (Exception ex) {
-				String errorMessage = SQLUtil.getExceptionMessage(ex);
-				dbs.isConfigValid(false);
-
-				String preamble = "Could not connect to SQL database for the following reason:";
-				panel.frame().output(
-						Globals.lang(preamble) + "  " + errorMessage);
-
-				JOptionPane.showMessageDialog(panel.frame(),
-						Globals.lang(preamble) + "\n" + errorMessage,
-						Globals.lang("Connect to SQL database"),
-						JOptionPane.ERROR_MESSAGE);
-			} finally {
-				panel.metaData().setDBStrings(dbs);
-				dbd.dispose();
-			}
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+package net.sf.jabref.sql;
+
+import net.sf.jabref.BaseAction;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Util;
+import net.sf.jabref.Globals;
+import net.sf.jabref.sql.exporter.DBExporter;
+
+import javax.swing.*;
+import java.sql.Connection;
+import java.awt.event.ActionEvent;
+
+/**
+ * Created by IntelliJ IDEA. User: alver Date: Mar 27, 2008 Time: 6:05:13 PM To
+ * change this template use File | Settings | File Templates.
+ * 
+ * Jan 20th Adjusted to accomodate changes on SQL Exporter module by ifsteinm
+ * 
+ */
+public class DbConnectAction extends BaseAction {
+	private BasePanel panel;
+
+	public DbConnectAction(BasePanel panel) {
+		this.panel = panel;
+	}
+
+	public AbstractAction getAction() {
+		return new DbImpAction();
+	}
+
+	class DbImpAction extends AbstractAction {
+		public void actionPerformed(ActionEvent e) {
+			action();
+
+		}
+	}
+
+	public void action() {
+
+		DBStrings dbs = panel.metaData().getDBStrings();
+
+		// init DB strings if necessary
+		if (!dbs.isInitialized()) {
+			dbs.initialize();
+		}
+
+		// show connection dialog
+		DBConnectDialog dbd = new DBConnectDialog(panel.frame(), dbs);
+		Util.placeDialog(dbd, panel);
+		dbd.setVisible(true);
+
+		// connnect to database to test DBStrings
+		if (dbd.getConnectToDB()) {
+
+			dbs = dbd.getDBStrings();
+
+			try {
+
+				panel.frame().output(
+						Globals.lang("Establishing SQL connection..."));
+				DBExporter exporter = (new DBExporterAndImporterFactory())
+						.getExporter(dbs.getServerType());
+				Connection conn = exporter.connectToDB(dbs);
+				conn.close();
+				dbs.isConfigValid(true);
+				panel.frame().output(
+						Globals.lang("SQL connection established."));
+			} catch (Exception ex) {
+				String errorMessage = SQLUtil.getExceptionMessage(ex);
+				dbs.isConfigValid(false);
+
+				String preamble = "Could not connect to SQL database for the following reason:";
+				panel.frame().output(
+						Globals.lang(preamble) + "  " + errorMessage);
+
+				JOptionPane.showMessageDialog(panel.frame(),
+						Globals.lang(preamble) + "\n" + errorMessage,
+						Globals.lang("Connect to SQL database"),
+						JOptionPane.ERROR_MESSAGE);
+			} finally {
+				panel.metaData().setDBStrings(dbs);
+				dbd.dispose();
+			}
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/sql/SQLUtil.java b/src/java/net/sf/jabref/sql/SQLUtil.java
index 7bb146f..0c6326e 100644
--- a/src/java/net/sf/jabref/sql/SQLUtil.java
+++ b/src/java/net/sf/jabref/sql/SQLUtil.java
@@ -1,335 +1,335 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General public static License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General public static License for more details.
-
-    You should have received a copy of the GNU General public static License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-package net.sf.jabref.sql;
-
-import java.io.PrintStream;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.SQLWarning;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.ListIterator;
-
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.Globals;
-
-/**
- * 
- * @author pattonlk
- * 
- *         Reestructured by ifsteinm. Jan 20th Now it is possible to export more
- *         than one jabref database. BD creation, insertions and queries where
- *         reformulated to accomodate the changes. The changes include a
- *         refactory on import/export to SQL module, creating many other classes
- *         making them more readable This class just support Exporters and
- *         Importers
- */
-
-public class SQLUtil {
-
-	private static final ArrayList<String> reservedDBWords = new ArrayList<String>(
-			Arrays.asList("key"));
-
-	private static ArrayList<String> allFields = null;
-
-	private SQLUtil() {
-	}
-
-	/**
-	 * loop through entry types to get required, optional, general and utility
-	 * fields for this type.
-	 */
-	public static void refreshFields() {
-		if (allFields == null) {
-			allFields = new ArrayList<String>();
-		} else {
-			allFields.clear();
-		}
-		uniqueInsert(allFields, BibtexFields.getAllFieldNames());
-	}
-
-	/**
-	 * 
-	 * @return All existent fields for a bibtex entry
-	 */
-	public static ArrayList<String> getAllFields() {
-		if (allFields == null)
-			refreshFields();
-		return allFields;
-	}
-
-	/**
-	 * 
-	 * @return Create a common separated field names
-	 */
-	public static String getFieldStr() {
-		// create comma separated list of field names
-		String fieldstr = "";
-		String field = "";
-		for (int i = 0; i < getAllFields().size(); i++) {
-			field = allFields.get(i);
-			if (i > 0)
-				fieldstr = fieldstr + ", ";
-			if (reservedDBWords.contains(field))
-				field += "_";
-			fieldstr = fieldstr + field;
-		}
-		return fieldstr;
-	}
-
-	/**
-	 * Inserts the elements of a String array into an ArrayList making sure not
-	 * to duplicate entries in the ArrayList
-	 * 
-	 * @param list
-	 *            The ArrayList containing unique entries
-	 * @param array
-	 *            The String array to be inserted into the ArrayList
-	 * @return The updated ArrayList with new unique entries
-	 */
-	private static ArrayList<String> uniqueInsert(ArrayList<String> list,
-			String[] array) {
-		if (array != null) {
-			for (int i = 0; i < array.length; i++) {
-				if (!list.contains(array[i]))
-					list.add(array[i]);
-			}
-		}
-		return list;
-	}
-
-	/**
-	 * Generates DML specifying table columns and their datatypes. The output of
-	 * this routine should be used within a CREATE TABLE statement.
-	 * 
-	 * @param fields
-	 *            Contains unique field names
-	 * @param datatype
-	 *            Specifies the SQL data type that the fields should take on.
-	 * @return The SQL code to be included in a CREATE TABLE statement.
-	 */
-	public static String fieldsAsCols(ArrayList<String> fields, String datatype) {
-		String str = "";
-		String field = "";
-		ListIterator<String> li = fields.listIterator();
-		while (li.hasNext()) {
-			field = li.next();
-			if (reservedDBWords.contains(field))
-				field = field + "_";
-			str = str + field + datatype;
-			if (li.hasNext())
-				str = str + ", ";
-		}
-		return str;
-	}
-	
-	/**
-	 * 
-	 * @param allFields
-	 *            All existent fields for a given entry type
-	 * @param reqFields
-	 *            list containing required fields for an entry type
-	 * @param optFields
-	 *            list containing optional fields for an entry type
-	 * @param utiFields
-	 *            list containing utility fields for an entry type
-	 * @param origList
-	 *            original list with the correct size filled with the default
-	 *            values for each field
-	 * @return origList changing the values of the fields that appear on
-	 *         reqFields, optFields, utiFields set to 'req', 'opt' and 'uti'
-	 *         respectively
-	 */
-	public static ArrayList<String> setFieldRequirement(
-			ArrayList<String> allFields, List<String> reqFields,
-			List<String> optFields, List<String> utiFields,
-			ArrayList<String> origList) {
-
-		String currentField = null;
-		for (int i = 0; i < allFields.size(); i++) {
-			currentField = allFields.get(i);
-			if (reqFields.contains(currentField))
-				origList.set(i, "req");
-			else if (optFields.contains(currentField))
-				origList.set(i, "opt");
-			else if (utiFields.contains(currentField))
-				origList.set(i, "uti");
-		}
-		return origList;
-	}
-
-	/**
-	 * Return a message raised from a SQLException
-	 * 
-	 * @param ex
-	 *            The SQLException raised
-	 */
-	public static String getExceptionMessage(Exception ex) {
-		String msg = null;
-		if (ex.getMessage() == null) {
-			msg = ex.toString();
-		} else {
-			msg = ex.getMessage();
-		}
-		return msg;
-	}
-
-	/**
-	 * return a ResultSet with the result of a "SELECT *" query for a given
-	 * table
-	 * 
-	 * @param conn
-	 *            Connection to the database
-	 * @param tableName
-	 *            String containing the name of the table you want to get the
-	 *            results.
-	 * @return a ResultSet with the query result returned from the DB
-	 * @throws SQLException
-	 */
-	public static ResultSet queryAllFromTable(Connection conn, String tableName)
-			throws SQLException {
-		String query = "SELECT * FROM " + tableName + ";";
-		Statement res = (Statement) processQueryWithResults(conn, query);
-		return res.getResultSet();
-	}
-
-	/**
-	 * Utility method for processing DML with proper output
-	 * 
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be sent
-	 * @param dml
-	 *            The DML statements to be processed
-	 */
-	public static void processQuery(Object out, String dml) throws SQLException {
-		if (out instanceof PrintStream) {
-			PrintStream fout = (PrintStream) out;
-			fout.println(dml);
-		}
-		if (out instanceof Connection) {
-			Connection conn = (Connection) out;
-			executeQuery(conn, dml);
-		}
-	}
-
-	/**
-	 * Utility method for processing DML with proper output
-	 * 
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be sent
-	 * @param query
-	 *            The DML statements to be processed
-	 * @return the result of the statement
-	 */
-	public static Object processQueryWithResults(Object out, String query)
-			throws SQLException {
-		if (out instanceof PrintStream) {// TODO: how to handle the PrintStream
-											// case?
-			PrintStream fout = (PrintStream) out;
-			fout.println(query);
-			return fout;
-		}
-		if (out instanceof Connection) {
-			Connection conn = (Connection) out;
-			return executeQueryWithResults(conn, query);
-		}
-		return null;
-	}
-
-	/**
-	 * This routine returns the JDBC url corresponding to the DBStrings input.
-	 * 
-	 * @param dbStrings
-	 *            The DBStrings to use to make the connection
-	 * @return The JDBC url corresponding to the input DBStrings
-	 */
-	public static String createJDBCurl(DBStrings dbStrings, boolean withDBName) {
-		String url = "";
-		url = "jdbc:" + dbStrings.getServerType().toLowerCase() + "://"
-				+ dbStrings.getServerHostname()
-				+ (withDBName ? "/" + dbStrings.getDatabase() : "");
-		return url;
-	}
-
-	/**
-	 * Process a query and returns only the first result of a result set as a
-	 * String. To be used when it is certain that only one String (single cell)
-	 * will be returned from the DB
-	 * 
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be sent
-	 * @param query
-	 *            The query statements to be processed
-	 * @return String with the result returned from the database
-	 * @throws SQLException
-	 */
-	public static String processQueryWithSingleResult(Connection conn,
-			String query) throws SQLException {
-		ResultSet rs = ((Statement) executeQueryWithResults(conn, query))
-				.getResultSet();
-		rs.next();
-		String result = rs.getString(1);
-		rs.getStatement().close();
-		return result;
-	}
-
-	/**
-	 * Utility method for executing DML
-	 * 
-	 * @param conn
-	 *            The DML Connection object that will execute the SQL
-	 * @param qry
-	 *            The DML statements to be executed
-	 */
-	public static void executeQuery(Connection conn, String qry)
-			throws SQLException {
-		Statement stmnt = conn.createStatement();
-		stmnt.execute(qry);
-		SQLWarning warn = stmnt.getWarnings();
-		if (warn != null) {
-			System.err.println(warn.toString());
-		}
-		stmnt.close();
-	}
-
-	/**
-	 * Utility method for executing DML
-	 * 
-	 * @param conn
-	 *            The DML Connection object that will execute the SQL
-	 * @param qry
-	 *            The DML statements to be executed
-	 */
-	public static Statement executeQueryWithResults(Connection conn, String qry)
-			throws SQLException {
-		Statement stmnt = conn.createStatement();
-		stmnt.executeQuery(qry);
-		SQLWarning warn = stmnt.getWarnings();
-		if (warn != null) {
-
-			System.err.println(warn.toString());
-		}
-		return stmnt;
-	}
-	
-	
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General public static License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General public static License for more details.
+
+    You should have received a copy of the GNU General public static License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+package net.sf.jabref.sql;
+
+import java.io.PrintStream;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.ListIterator;
+
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.Globals;
+
+/**
+ * 
+ * @author pattonlk
+ * 
+ *         Reestructured by ifsteinm. Jan 20th Now it is possible to export more
+ *         than one jabref database. BD creation, insertions and queries where
+ *         reformulated to accomodate the changes. The changes include a
+ *         refactory on import/export to SQL module, creating many other classes
+ *         making them more readable This class just support Exporters and
+ *         Importers
+ */
+
+public class SQLUtil {
+
+	private static final ArrayList<String> reservedDBWords = new ArrayList<String>(
+			Arrays.asList("key"));
+
+	private static ArrayList<String> allFields = null;
+
+	private SQLUtil() {
+	}
+
+	/**
+	 * loop through entry types to get required, optional, general and utility
+	 * fields for this type.
+	 */
+	public static void refreshFields() {
+		if (allFields == null) {
+			allFields = new ArrayList<String>();
+		} else {
+			allFields.clear();
+		}
+		uniqueInsert(allFields, BibtexFields.getAllFieldNames());
+	}
+
+	/**
+	 * 
+	 * @return All existent fields for a bibtex entry
+	 */
+	public static ArrayList<String> getAllFields() {
+		if (allFields == null)
+			refreshFields();
+		return allFields;
+	}
+
+	/**
+	 * 
+	 * @return Create a common separated field names
+	 */
+	public static String getFieldStr() {
+		// create comma separated list of field names
+		String fieldstr = "";
+		String field = "";
+		for (int i = 0; i < getAllFields().size(); i++) {
+			field = allFields.get(i);
+			if (i > 0)
+				fieldstr = fieldstr + ", ";
+			if (reservedDBWords.contains(field))
+				field += "_";
+			fieldstr = fieldstr + field;
+		}
+		return fieldstr;
+	}
+
+	/**
+	 * Inserts the elements of a String array into an ArrayList making sure not
+	 * to duplicate entries in the ArrayList
+	 * 
+	 * @param list
+	 *            The ArrayList containing unique entries
+	 * @param array
+	 *            The String array to be inserted into the ArrayList
+	 * @return The updated ArrayList with new unique entries
+	 */
+	private static ArrayList<String> uniqueInsert(ArrayList<String> list,
+			String[] array) {
+		if (array != null) {
+			for (int i = 0; i < array.length; i++) {
+				if (!list.contains(array[i]))
+					list.add(array[i]);
+			}
+		}
+		return list;
+	}
+
+	/**
+	 * Generates DML specifying table columns and their datatypes. The output of
+	 * this routine should be used within a CREATE TABLE statement.
+	 * 
+	 * @param fields
+	 *            Contains unique field names
+	 * @param datatype
+	 *            Specifies the SQL data type that the fields should take on.
+	 * @return The SQL code to be included in a CREATE TABLE statement.
+	 */
+	public static String fieldsAsCols(ArrayList<String> fields, String datatype) {
+		String str = "";
+		String field = "";
+		ListIterator<String> li = fields.listIterator();
+		while (li.hasNext()) {
+			field = li.next();
+			if (reservedDBWords.contains(field))
+				field = field + "_";
+			str = str + field + datatype;
+			if (li.hasNext())
+				str = str + ", ";
+		}
+		return str;
+	}
+	
+	/**
+	 * 
+	 * @param allFields
+	 *            All existent fields for a given entry type
+	 * @param reqFields
+	 *            list containing required fields for an entry type
+	 * @param optFields
+	 *            list containing optional fields for an entry type
+	 * @param utiFields
+	 *            list containing utility fields for an entry type
+	 * @param origList
+	 *            original list with the correct size filled with the default
+	 *            values for each field
+	 * @return origList changing the values of the fields that appear on
+	 *         reqFields, optFields, utiFields set to 'req', 'opt' and 'uti'
+	 *         respectively
+	 */
+	public static ArrayList<String> setFieldRequirement(
+			ArrayList<String> allFields, List<String> reqFields,
+			List<String> optFields, List<String> utiFields,
+			ArrayList<String> origList) {
+
+		String currentField = null;
+		for (int i = 0; i < allFields.size(); i++) {
+			currentField = allFields.get(i);
+			if (reqFields.contains(currentField))
+				origList.set(i, "req");
+			else if (optFields.contains(currentField))
+				origList.set(i, "opt");
+			else if (utiFields.contains(currentField))
+				origList.set(i, "uti");
+		}
+		return origList;
+	}
+
+	/**
+	 * Return a message raised from a SQLException
+	 * 
+	 * @param ex
+	 *            The SQLException raised
+	 */
+	public static String getExceptionMessage(Exception ex) {
+		String msg = null;
+		if (ex.getMessage() == null) {
+			msg = ex.toString();
+		} else {
+			msg = ex.getMessage();
+		}
+		return msg;
+	}
+
+	/**
+	 * return a ResultSet with the result of a "SELECT *" query for a given
+	 * table
+	 * 
+	 * @param conn
+	 *            Connection to the database
+	 * @param tableName
+	 *            String containing the name of the table you want to get the
+	 *            results.
+	 * @return a ResultSet with the query result returned from the DB
+	 * @throws SQLException
+	 */
+	public static ResultSet queryAllFromTable(Connection conn, String tableName)
+			throws SQLException {
+		String query = "SELECT * FROM " + tableName + ";";
+		Statement res = (Statement) processQueryWithResults(conn, query);
+		return res.getResultSet();
+	}
+
+	/**
+	 * Utility method for processing DML with proper output
+	 * 
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be sent
+	 * @param dml
+	 *            The DML statements to be processed
+	 */
+	public static void processQuery(Object out, String dml) throws SQLException {
+		if (out instanceof PrintStream) {
+			PrintStream fout = (PrintStream) out;
+			fout.println(dml);
+		}
+		if (out instanceof Connection) {
+			Connection conn = (Connection) out;
+			executeQuery(conn, dml);
+		}
+	}
+
+	/**
+	 * Utility method for processing DML with proper output
+	 * 
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be sent
+	 * @param query
+	 *            The DML statements to be processed
+	 * @return the result of the statement
+	 */
+	public static Object processQueryWithResults(Object out, String query)
+			throws SQLException {
+		if (out instanceof PrintStream) {// TODO: how to handle the PrintStream
+											// case?
+			PrintStream fout = (PrintStream) out;
+			fout.println(query);
+			return fout;
+		}
+		if (out instanceof Connection) {
+			Connection conn = (Connection) out;
+			return executeQueryWithResults(conn, query);
+		}
+		return null;
+	}
+
+	/**
+	 * This routine returns the JDBC url corresponding to the DBStrings input.
+	 * 
+	 * @param dbStrings
+	 *            The DBStrings to use to make the connection
+	 * @return The JDBC url corresponding to the input DBStrings
+	 */
+	public static String createJDBCurl(DBStrings dbStrings, boolean withDBName) {
+		String url = "";
+		url = "jdbc:" + dbStrings.getServerType().toLowerCase() + "://"
+				+ dbStrings.getServerHostname()
+				+ (withDBName ? "/" + dbStrings.getDatabase() : "");
+		return url;
+	}
+
+	/**
+	 * Process a query and returns only the first result of a result set as a
+	 * String. To be used when it is certain that only one String (single cell)
+	 * will be returned from the DB
+	 * 
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be sent
+	 * @param query
+	 *            The query statements to be processed
+	 * @return String with the result returned from the database
+	 * @throws SQLException
+	 */
+	public static String processQueryWithSingleResult(Connection conn,
+			String query) throws SQLException {
+		ResultSet rs = ((Statement) executeQueryWithResults(conn, query))
+				.getResultSet();
+		rs.next();
+		String result = rs.getString(1);
+		rs.getStatement().close();
+		return result;
+	}
+
+	/**
+	 * Utility method for executing DML
+	 * 
+	 * @param conn
+	 *            The DML Connection object that will execute the SQL
+	 * @param qry
+	 *            The DML statements to be executed
+	 */
+	public static void executeQuery(Connection conn, String qry)
+			throws SQLException {
+		Statement stmnt = conn.createStatement();
+		stmnt.execute(qry);
+		SQLWarning warn = stmnt.getWarnings();
+		if (warn != null) {
+			System.err.println(warn.toString());
+		}
+		stmnt.close();
+	}
+
+	/**
+	 * Utility method for executing DML
+	 * 
+	 * @param conn
+	 *            The DML Connection object that will execute the SQL
+	 * @param qry
+	 *            The DML statements to be executed
+	 */
+	public static Statement executeQueryWithResults(Connection conn, String qry)
+			throws SQLException {
+		Statement stmnt = conn.createStatement();
+		stmnt.executeQuery(qry);
+		SQLWarning warn = stmnt.getWarnings();
+		if (warn != null) {
+
+			System.err.println(warn.toString());
+		}
+		return stmnt;
+	}
+	
+	
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/sql/exporter/DBExporter.java b/src/java/net/sf/jabref/sql/exporter/DBExporter.java
index deb9126..95b9bcb 100644
--- a/src/java/net/sf/jabref/sql/exporter/DBExporter.java
+++ b/src/java/net/sf/jabref/sql/exporter/DBExporter.java
@@ -1,617 +1,617 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General public static License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General public static License for more details.
-
-    You should have received a copy of the GNU General public static License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-package net.sf.jabref.sql.exporter;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.Vector;
-
-import javax.swing.JOptionPane;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.BibtexString;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.Util;
-import net.sf.jabref.export.FileActions;
-import net.sf.jabref.groups.AbstractGroup;
-import net.sf.jabref.groups.AllEntriesGroup;
-import net.sf.jabref.groups.ExplicitGroup;
-import net.sf.jabref.groups.GroupTreeNode;
-import net.sf.jabref.groups.KeywordGroup;
-import net.sf.jabref.groups.SearchGroup;
-import net.sf.jabref.sql.DBImportExportDialog;
-import net.sf.jabref.sql.DBImporterExporter;
-import net.sf.jabref.sql.DBStrings;
-import net.sf.jabref.sql.SQLUtil;
-
-/**
- * 
- * @author ifsteinm.
- * 
- *         Jan 20th Abstract Class to provide main features to export entries to
- *         a DB. To insert a new DB it is necessary to extend this class and add
- *         the DB name the enum available at
- *         net.sf.jabref.sql.DBImporterAndExporterFactory (and to the GUI). This
- *         class and its subclasses create database, entries and related stuff
- *         within a DB.
- * 
- */
-
-public abstract class DBExporter extends DBImporterExporter{
-
-	String fieldStr = SQLUtil.getFieldStr();
-	DBStrings dbStrings = null;
-	ArrayList<String> dbNames = new ArrayList<String>();
-
-	/**
-	 * Method for the exportDatabase methods.
-	 * 
-	 * @param dbtype
-	 *            The DBTYPE of the database
-	 * @param database
-	 *            The BibtexDatabase to export
-	 * @param metaData
-	 *            The MetaData object containing the groups information
-	 * @param keySet
-	 *            The set of IDs of the entries to export.
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be written.
-	 */
-
-	private void performExport(final BibtexDatabase database,
-			final MetaData metaData, Set<String> keySet, Object out,
-			String dbName) throws Exception {
-
-		List<BibtexEntry> entries = FileActions.getSortedEntries(database,
-				keySet, false);
-		GroupTreeNode gtn = metaData.getGroups();
-
-		int database_id = getDatabaseIDByName(metaData, out, dbName);
-		removeAllRecordsForAGivenDB(out, database_id);
-		populateEntryTypesTable(out);
-		populateEntriesTable(database_id, entries, out);
-		populateStringTable(database, out, database_id);
-		populateGroupTypesTable(out);
-		populateGroupsTable(gtn, 0, 1, out, database_id);
-		populateEntryGroupsTable(gtn, 0, 1, out, database_id);
-	}
-
-	/**
-	 * Generates the DML required to populate the entries table with jabref data
-	 * and writes it to the output PrintStream.
-	 * 
-	 * @param database_id
-	 *            ID of Jabref database related to the entries to be exported
-	 *            This information can be gathered using
-	 *            getDatabaseIDByPath(metaData, out)
-	 * @param entries
-	 *            The BibtexEntries to export
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be written.
-	 */
-	private void populateEntriesTable(int database_id,
-			List<BibtexEntry> entries, Object out) throws SQLException {
-		String query = "";
-		String val = "";
-		String insert = "INSERT INTO entries (jabref_eid, entry_types_id, cite_key, "
-				+ fieldStr + ", database_id) VALUES (";
-		for (BibtexEntry entry : entries) {
-			query = insert + "'" + entry.getId() + "'"
-					+ ", (SELECT entry_types_id FROM entry_types WHERE label='"
-					+ entry.getType().getName().toLowerCase() + "'), '"
-					+ entry.getCiteKey() + "'";
-			for (int i = 0; i < SQLUtil.getAllFields().size(); i++) {
-				query = query + ", ";
-				val = entry.getField(SQLUtil.getAllFields().get(i));
-				if (val != null) {
-					val = val.replace("\\", "\\\\");
-					val = val.replace("\"", "\\\"");
-					val = val.replace("\'", "''");
-					val = val.replace("`", "\\`");
-					query = query + "'" + val + "'";
-				} else {
-					query = query + "NULL";
-				}
-			}
-			query = query + ", '" + database_id + "');";
-			SQLUtil.processQuery(out, query);
-		}
-	}
-
-
-	/**
-	 * Recursive method to include a tree of groups.
-	 * 
-	 * @param cursor
-	 *            The current GroupTreeNode in the GroupsTree
-	 * @param parentID
-	 *            The integer ID associated with the cursors's parent node
-	 * @param currentID
-	 *            The integer value to associate with the cursor
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be written.
-	 * @param database_id
-	 *            Id of jabref database to which the group is part of
-	 */
-
-	private int populateEntryGroupsTable(GroupTreeNode cursor, int parentID,
-			int currentID, Object out, int database_id) throws SQLException {
-		// if this group contains entries...
-		if (cursor.getGroup() instanceof ExplicitGroup) {
-			ExplicitGroup grp = (ExplicitGroup) cursor.getGroup();
-			for (BibtexEntry be : grp.getEntries()) {
-				SQLUtil.processQuery(
-						out,
-						"INSERT INTO entry_group (entries_id, groups_id) "
-								+ "VALUES ("
-								+ "(SELECT entries_id FROM entries WHERE jabref_eid="
-								+ "'"
-								+ be.getId()
-								+ "' AND database_id = "
-								+ database_id
-								+ "), "
-								+ "(SELECT groups_id FROM groups WHERE database_id="
-								+ "'" + database_id + "' AND parent_id=" + "'"
-								+ parentID + "' AND label=" + "'"
-								+ grp.getName() + "')" + ");");
-			}
-		}
-		// recurse on child nodes (depth-first traversal)
-		Object response = SQLUtil.processQueryWithResults(out,
-				"SELECT groups_id FROM groups WHERE label='"
-						+ cursor.getGroup().getName() + "' AND database_id='"
-						+ database_id + "' AND parent_id='" + parentID + "';");
-		// setting values to ID and myID to be used in case of textual SQL
-		// export
-		int myID = ++currentID;
-		if (response instanceof Statement) {
-			ResultSet rs = ((Statement) response).getResultSet();
-			rs.next();
-			myID = rs.getInt("groups_id");
-		}
-		for (Enumeration<GroupTreeNode> e = cursor.children(); e
-				.hasMoreElements();)
-			currentID = populateEntryGroupsTable(e.nextElement(), myID,
-					currentID, out, database_id);
-		return currentID;
-	}
-
-	/**
-	 * Generates the SQL required to populate the entry_types table with jabref
-	 * data.
-	 * 
-	 * @param out
-	 *            The output (PrintSream or Connection) object to which the DML
-	 *            should be written.
-	 */
-
-	private void populateEntryTypesTable(Object out) throws SQLException {
-		String query = "";
-		ArrayList<String> fieldRequirement = new ArrayList<String>();
-
-		ArrayList<String> existentTypes = new ArrayList<String>();
-		if (out instanceof Connection) {
-			ResultSet rs = ((Statement) SQLUtil.processQueryWithResults(out,
-					"SELECT label FROM entry_types")).getResultSet();
-			while (rs.next()) {
-				existentTypes.add(rs.getString(1));
-			}
-		}
-		for (BibtexEntryType val : BibtexEntryType.ALL_TYPES.values()) {
-			fieldRequirement.clear();
-			for (int i = 0; i < SQLUtil.getAllFields().size(); i++) {
-				fieldRequirement.add(i, "gen");
-			}
-			List<String> reqFields = Arrays
-					.asList(val.getRequiredFields() != null ? val
-							.getRequiredFields() : new String[0]);
-			List<String> optFields = Arrays
-					.asList(val.getOptionalFields() != null ? val
-							.getOptionalFields() : new String[0]);
-			List<String> utiFields = Arrays
-					.asList(val.getUtilityFields() != null ? val
-							.getUtilityFields() : new String[0]);
-			fieldRequirement = SQLUtil.setFieldRequirement(
-					SQLUtil.getAllFields(), reqFields, optFields, utiFields,
-					fieldRequirement);
-			if (!existentTypes.contains(val.getName().toLowerCase())) {
-				String insert = "INSERT INTO entry_types (label, " + fieldStr
-						+ ") VALUES (";
-				query = insert + "'" + val.getName().toLowerCase() + "'";
-				for (int i = 0; i < fieldRequirement.size(); i++) {
-					query = query + ", '" + fieldRequirement.get(i) + "'";
-				}
-				query = query + ");";
-			} else {
-				String[] update = fieldStr.split(",");
-				query = "UPDATE entry_types SET \n";
-				for (int i = 0; i < fieldRequirement.size(); i++) {
-					query += update[i] + "='" + fieldRequirement.get(i) + "',";
-				}
-				query = query.substring(0, query.lastIndexOf(","));
-				query += " WHERE label='" + val.getName().toLowerCase() + "'";
-			}
-			SQLUtil.processQuery(out, query);
-		}
-	}
-
-	/**
-	 * Recursive worker method for the populateGroupsTable methods.
-	 * 
-	 * @param cursor
-	 *            The current GroupTreeNode in the GroupsTree
-	 * @param parentID
-	 *            The integer ID associated with the cursors's parent node
-	 * @param ID
-	 *            The integer value to associate with the cursor
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be written.
-	 * @param database_id
-	 *            Id of jabref database to which the groups/entries are part of
-	 */
-	private int populateGroupsTable(GroupTreeNode cursor, int parentID,
-			int currentID, Object out, int database_id) throws SQLException {
-
-		AbstractGroup group = cursor.getGroup();
-		String searchField = null, searchExpr = null, caseSens = null, reg_exp = null;
-		int hierContext = group.getHierarchicalContext();
-		if (group instanceof KeywordGroup) {
-			searchField = ((KeywordGroup) group).getSearchField();
-			searchExpr = ((KeywordGroup) group).getSearchExpression();
-			caseSens = ((KeywordGroup) group).isCaseSensitive() ? "1" : "0";
-			reg_exp = ((KeywordGroup) group).isRegExp() ? "1" : "0";
-		} else if (group instanceof SearchGroup) {
-			searchExpr = ((SearchGroup) group).getSearchExpression();
-			caseSens = ((SearchGroup) group).isCaseSensitive() ? "1" : "0";
-			reg_exp = ((SearchGroup) group).isRegExp() ? "1" : "0";
-		}
-		// Protect all quotes in the group descriptions:
-		if (searchField != null)
-			searchField = Util.quote(searchField, "'", '\\');
-		if (searchExpr != null)
-			searchExpr = Util.quote(searchExpr, "'", '\\');
-
-		SQLUtil.processQuery(
-				out,
-				"INSERT INTO groups (label, parent_id, group_types_id, search_field, "
-						+ "search_expression, case_sensitive, reg_exp, hierarchical_context, database_id) "
-						+ "VALUES ('"
-						+ group.getName()
-						+ "', "
-						+ parentID
-						+ ", (SELECT group_types_id FROM group_types where label='"
-						+ group.getTypeId()
-						+ "')"
-						+ ", "
-						+ (searchField != null ? "'" + searchField + "'"
-								: "NULL")
-						+ ", "
-						+ (searchExpr != null ? "'" + searchExpr + "'" : "NULL")
-						+ ", "
-						+ (caseSens != null ? "'" + caseSens + "'" : "NULL")
-						+ ", "
-						+ (reg_exp != null ? "'" + reg_exp + "'" : "NULL")
-						+ ", " + hierContext + ", '" + database_id + "');");
-		// recurse on child nodes (depth-first traversal)
-		Object response = SQLUtil.processQueryWithResults(out,
-				"SELECT groups_id FROM groups WHERE label='"
-						+ cursor.getGroup().getName() + "' AND database_id='"
-						+ database_id + "' AND parent_id='" + parentID + "';");
-		// setting values to ID and myID to be used in case of textual SQL
-		// export
-		int myID = currentID;
-		if (response instanceof Statement) {
-			ResultSet rs = ((Statement) response).getResultSet();
-			rs.next();
-			myID = rs.getInt("groups_id");
-		}
-		for (Enumeration<GroupTreeNode> e = cursor.children(); e
-				.hasMoreElements();)
-			currentID = populateGroupsTable(e.nextElement(), myID, ++currentID,
-					out, database_id);
-		return currentID;
-	}
-
-	/**
-	 * Generates the DML required to populate the group_types table with JabRef
-	 * data.
-	 * 
-	 * @param out
-	 *            The output (PrintSream or Connection) object to which the DML
-	 *            should be written.
-	 * 
-	 * @throws SQLException
-	 */
-	private void populateGroupTypesTable(Object out) throws SQLException {
-		int quantidade = 0;
-		if (out instanceof Connection) {
-			ResultSet res = ((Statement) SQLUtil.processQueryWithResults(out,
-					"SELECT COUNT(*) AS amount FROM group_types"))
-					.getResultSet();
-			res.next();
-			quantidade = res.getInt("amount");
-			res.getStatement().close();
-		}
-		if (quantidade == 0) {
-			String[] typeNames = new String[] { AllEntriesGroup.ID,
-					ExplicitGroup.ID, KeywordGroup.ID, SearchGroup.ID };
-			for (int i = 0; i < typeNames.length; i++) {
-				String typeName = typeNames[i];
-				String insert = "INSERT INTO group_types (label) VALUES ('"
-						+ typeName + "');";
-				SQLUtil.processQuery(out, insert);
-			}
-		}
-	}
-
-	/**
-	 * Generates the SQL required to populate the strings table with jabref
-	 * data.
-	 * 
-	 * @param database
-	 *            BibtexDatabase object used from where the strings will be
-	 *            exported
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be written.
-	 * @param database_id
-	 *            ID of Jabref database related to the entries to be exported
-	 *            This information can be gathered using
-	 *            getDatabaseIDByPath(metaData, out)
-	 * @throws SQLException
-	 */
-	private void populateStringTable(BibtexDatabase database, Object out,
-			int database_id) throws SQLException {
-		String insert = "INSERT INTO strings (label, content, database_id) VALUES (";
-
-		if (database.getPreamble() != null) {
-			String dml = insert + "'@PREAMBLE', " + "'"
-					+ Util.quote(database.getPreamble(), "'", '\\') + "', "
-					+ "'" + database_id + "');";
-			SQLUtil.processQuery(out, dml);
-		}
-		Iterator<String> it = database.getStringKeySet().iterator();
-		while (it.hasNext()) {
-			String key = it.next();
-			BibtexString string = database.getString(key);
-			String dml = insert + "'" + Util.quote(string.getName(), "'", '\\')
-					+ "', " + "'" + Util.quote(string.getContent(), "'", '\\')
-					+ "', " + "'" + database_id + "'" + ");";
-			SQLUtil.processQuery(out, dml);
-		}
-	}
-
-	/**
-	 * Given a DBStrings it connects to the DB and returns the
-	 * java.sql.Connection object
-	 * 
-	 * @param dbstrings
-	 *            The DBStrings to use to make the connection
-	 * @return java.sql.Connection to the DB chosen
-	 * @throws Exception
-	 */
-	public abstract Connection connectToDB(DBStrings dbstrings)
-			throws Exception;
-
-	/**
-	 * Generates DML code necessary to create all tables in a database, and
-	 * writes it to appropriate output.
-	 * 
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be written.
-	 */
-	protected abstract void createTables(Object out) throws SQLException;
-
-	/**
-	 * Accepts the BibtexDatabase and MetaData, generates the DML required to
-	 * create and populate SQL database tables, and writes this DML to the
-	 * specified output file.
-	 * 
-	 * @param database
-	 *            The BibtexDatabase to export
-	 * @param metaData
-	 *            The MetaData object containing the groups information
-	 * @param keySet
-	 *            The set of IDs of the entries to export.
-	 * @param file
-	 *            The name of the file to which the DML should be written
-	 */
-	public void exportDatabaseAsFile(final BibtexDatabase database,
-			final MetaData metaData, Set<String> keySet, String file)
-			throws Exception {
-
-		// open output file
-		File outfile = new File(file);
-		if (outfile.exists())
-			outfile.delete();
-		BufferedOutputStream writer = null;
-		writer = new BufferedOutputStream(new FileOutputStream(outfile));
-		PrintStream fout = null;
-		fout = new PrintStream(writer);
-		performExport(database, metaData, keySet, fout, "file");
-		fout.close();
-	}
-
-	/**
-	 * Accepts the BibtexDatabase and MetaData, generates the DML required to
-	 * create and populate SQL database tables, and writes this DML to the
-	 * specified SQL database.
-	 * 
-	 * @param database
-	 *            The BibtexDatabase to export
-	 * @param metaData
-	 *            The MetaData object containing the groups information
-	 * @param keySet
-	 *            The set of IDs of the entries to export.
-	 * @param dbStrings
-	 *            The necessary database connection information
-	 */
-	public void exportDatabaseToDBMS(final BibtexDatabase database,
-			final MetaData metaData, Set<String> keySet, DBStrings dbStrings,
-			JabRefFrame frame) throws Exception {
-		String dbName = "";
-		Connection conn = null;
-		boolean redisplay = false;
-		try {
-			conn = this.connectToDB(dbStrings);
-			createTables(conn);
-			Vector<Vector<String>> matrix = createExistentDBNamesMatrix(dbStrings);
-			DBImportExportDialog dialogo = new DBImportExportDialog(frame,
-					matrix, DBImportExportDialog.DialogType.EXPORTER);
-			if (dialogo.removeAction) {
-				dbName = getDBName(matrix, dbStrings, frame, dialogo);
-				removeDB(dialogo, dbName, conn, metaData);
-				redisplay = true;
-			} else if (dialogo.hasDBSelected){
-				dbName = getDBName(matrix, dbStrings, frame, dialogo);
-				performExport(database, metaData, keySet, conn, dbName);
-			}
-			if (!conn.getAutoCommit()) {
-				conn.commit();
-				conn.setAutoCommit(true);
-			}
-			conn.close();
-			if (redisplay)
-				exportDatabaseToDBMS(database, metaData, keySet, dbStrings, frame);
-		} catch (SQLException ex) {
-			if (conn != null) {
-				if (!conn.getAutoCommit()) {
-					conn.rollback();
-				}
-			}
-			throw ex;
-		}
-	}
-
-	private String getDBName(Vector<Vector<String>> matrix,
-			DBStrings dbStrings, JabRefFrame frame, DBImportExportDialog dialogo)
-			throws SQLException, Exception {
-		String dbName = "";
-		if (matrix.size() > 1) {
-			if (dialogo.hasDBSelected) {
-				dbName = dialogo.selectedDB;
-				if ((dialogo.selectedInt == 0) && (!dialogo.removeAction)) {
-					dbName = JOptionPane.showInputDialog(dialogo.getDiag(),
-							"Please enter the desired name:", "SQL Export",
-							JOptionPane.INFORMATION_MESSAGE);
-					if (dbName != null) {
-						while (!isValidDBName(dbNames, dbName)) {
-							dbName = JOptionPane
-									.showInputDialog(
-											dialogo.getDiag(),
-											"You have entered an invalid or already existent DB name.\n Please enter the desired name:",
-											"SQL Export",
-											JOptionPane.ERROR_MESSAGE);
-						}
-					} else {
-						getDBName(
-								matrix,
-								dbStrings,
-								frame,
-								new DBImportExportDialog(
-										frame,
-										matrix,
-										DBImportExportDialog.DialogType.EXPORTER));
-					}
-				}
-			}
-		} else
-			dbName = JOptionPane.showInputDialog(frame,
-					"Please enter the desired name:", "SQL Export",
-					JOptionPane.INFORMATION_MESSAGE);
-		return dbName;
-	}
-
-	private Vector<Vector<String>> createExistentDBNamesMatrix(
-			DBStrings dbStrings) throws SQLException, Exception {
-		ResultSet rs = SQLUtil.queryAllFromTable(this.connectToDB(dbStrings),
-				"jabref_database");
-		Vector<String> v;
-		Vector<Vector<String>> matrix = new Vector<Vector<String>>();
-		dbNames.clear();
-		v = new Vector<String>();
-		v.add(Globals.lang("< CREATE NEW DATABASE >"));
-		matrix.add(v);
-		while (rs.next()) {
-			v = new Vector<String>();
-			v.add(rs.getString("database_name"));
-			matrix.add(v);
-			dbNames.add(rs.getString("database_name"));
-		}
-		return matrix;
-	}
-
-	private boolean isValidDBName(ArrayList<String> dbNames, String desiredName)
-			throws SQLException {
-		if (desiredName.trim().length() <= 1)
-			return false;
-		if (dbNames.contains(desiredName))
-			return false;
-		return true;
-	}
-
-
-	/**
-	 * Returns a Jabref Database ID from the database in case the DB is already
-	 * exported. In case the bib was already exported before, the method returns
-	 * the id, otherwise it calls the method that inserts a new row and returns
-	 * the ID for this new database
-	 * 
-	 * @param metaData
-	 *            The MetaData object containing the database information
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be written.
-	 * @return The ID of database row of the jabref database being exported
-	 * @throws SQLException
-	 */
-	/*
-	 * public int getDatabaseIDByPath(MetaData metaData, Object out, String
-	 * dbName) throws SQLException {
-	 * 
-	 * if (out instanceof Connection) { Object response =
-	 * SQLUtil.processQueryWithResults(out,
-	 * "SELECT database_id FROM jabref_database WHERE md5_path=md5('" +
-	 * metaData.getFile().getAbsolutePath() + "');"); ResultSet rs =
-	 * ((Statement) response).getResultSet(); if (rs.next()) return
-	 * rs.getInt("database_id"); else { insertJabRefDatabase(metaData, out,
-	 * dbName); return getDatabaseIDByPath(metaData, out, dbName); } } // in
-	 * case of text export there will be only 1 bib exported else {
-	 * insertJabRefDatabase(metaData, out, dbName); return 1; } }
-	 */
-
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General public static License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General public static License for more details.
+
+    You should have received a copy of the GNU General public static License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+package net.sf.jabref.sql.exporter;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.Vector;
+
+import javax.swing.JOptionPane;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.BibtexString;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.Util;
+import net.sf.jabref.export.FileActions;
+import net.sf.jabref.groups.AbstractGroup;
+import net.sf.jabref.groups.AllEntriesGroup;
+import net.sf.jabref.groups.ExplicitGroup;
+import net.sf.jabref.groups.GroupTreeNode;
+import net.sf.jabref.groups.KeywordGroup;
+import net.sf.jabref.groups.SearchGroup;
+import net.sf.jabref.sql.DBImportExportDialog;
+import net.sf.jabref.sql.DBImporterExporter;
+import net.sf.jabref.sql.DBStrings;
+import net.sf.jabref.sql.SQLUtil;
+
+/**
+ * 
+ * @author ifsteinm.
+ * 
+ *         Jan 20th Abstract Class to provide main features to export entries to
+ *         a DB. To insert a new DB it is necessary to extend this class and add
+ *         the DB name the enum available at
+ *         net.sf.jabref.sql.DBImporterAndExporterFactory (and to the GUI). This
+ *         class and its subclasses create database, entries and related stuff
+ *         within a DB.
+ * 
+ */
+
+public abstract class DBExporter extends DBImporterExporter{
+
+	String fieldStr = SQLUtil.getFieldStr();
+	DBStrings dbStrings = null;
+	ArrayList<String> dbNames = new ArrayList<String>();
+
+	/**
+	 * Method for the exportDatabase methods.
+	 * 
+	 * @param dbtype
+	 *            The DBTYPE of the database
+	 * @param database
+	 *            The BibtexDatabase to export
+	 * @param metaData
+	 *            The MetaData object containing the groups information
+	 * @param keySet
+	 *            The set of IDs of the entries to export.
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be written.
+	 */
+
+	private void performExport(final BibtexDatabase database,
+			final MetaData metaData, Set<String> keySet, Object out,
+			String dbName) throws Exception {
+
+		List<BibtexEntry> entries = FileActions.getSortedEntries(database,
+				keySet, false);
+		GroupTreeNode gtn = metaData.getGroups();
+
+		int database_id = getDatabaseIDByName(metaData, out, dbName);
+		removeAllRecordsForAGivenDB(out, database_id);
+		populateEntryTypesTable(out);
+		populateEntriesTable(database_id, entries, out);
+		populateStringTable(database, out, database_id);
+		populateGroupTypesTable(out);
+		populateGroupsTable(gtn, 0, 1, out, database_id);
+		populateEntryGroupsTable(gtn, 0, 1, out, database_id);
+	}
+
+	/**
+	 * Generates the DML required to populate the entries table with jabref data
+	 * and writes it to the output PrintStream.
+	 * 
+	 * @param database_id
+	 *            ID of Jabref database related to the entries to be exported
+	 *            This information can be gathered using
+	 *            getDatabaseIDByPath(metaData, out)
+	 * @param entries
+	 *            The BibtexEntries to export
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be written.
+	 */
+	private void populateEntriesTable(int database_id,
+			List<BibtexEntry> entries, Object out) throws SQLException {
+		String query = "";
+		String val = "";
+		String insert = "INSERT INTO entries (jabref_eid, entry_types_id, cite_key, "
+				+ fieldStr + ", database_id) VALUES (";
+		for (BibtexEntry entry : entries) {
+			query = insert + "'" + entry.getId() + "'"
+					+ ", (SELECT entry_types_id FROM entry_types WHERE label='"
+					+ entry.getType().getName().toLowerCase() + "'), '"
+					+ entry.getCiteKey() + "'";
+			for (int i = 0; i < SQLUtil.getAllFields().size(); i++) {
+				query = query + ", ";
+				val = entry.getField(SQLUtil.getAllFields().get(i));
+				if (val != null) {
+					val = val.replace("\\", "\\\\");
+					val = val.replace("\"", "\\\"");
+					val = val.replace("\'", "''");
+					val = val.replace("`", "\\`");
+					query = query + "'" + val + "'";
+				} else {
+					query = query + "NULL";
+				}
+			}
+			query = query + ", '" + database_id + "');";
+			SQLUtil.processQuery(out, query);
+		}
+	}
+
+
+	/**
+	 * Recursive method to include a tree of groups.
+	 * 
+	 * @param cursor
+	 *            The current GroupTreeNode in the GroupsTree
+	 * @param parentID
+	 *            The integer ID associated with the cursors's parent node
+	 * @param currentID
+	 *            The integer value to associate with the cursor
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be written.
+	 * @param database_id
+	 *            Id of jabref database to which the group is part of
+	 */
+
+	private int populateEntryGroupsTable(GroupTreeNode cursor, int parentID,
+			int currentID, Object out, int database_id) throws SQLException {
+		// if this group contains entries...
+		if (cursor.getGroup() instanceof ExplicitGroup) {
+			ExplicitGroup grp = (ExplicitGroup) cursor.getGroup();
+			for (BibtexEntry be : grp.getEntries()) {
+				SQLUtil.processQuery(
+						out,
+						"INSERT INTO entry_group (entries_id, groups_id) "
+								+ "VALUES ("
+								+ "(SELECT entries_id FROM entries WHERE jabref_eid="
+								+ "'"
+								+ be.getId()
+								+ "' AND database_id = "
+								+ database_id
+								+ "), "
+								+ "(SELECT groups_id FROM groups WHERE database_id="
+								+ "'" + database_id + "' AND parent_id=" + "'"
+								+ parentID + "' AND label=" + "'"
+								+ grp.getName() + "')" + ");");
+			}
+		}
+		// recurse on child nodes (depth-first traversal)
+		Object response = SQLUtil.processQueryWithResults(out,
+				"SELECT groups_id FROM groups WHERE label='"
+						+ cursor.getGroup().getName() + "' AND database_id='"
+						+ database_id + "' AND parent_id='" + parentID + "';");
+		// setting values to ID and myID to be used in case of textual SQL
+		// export
+		int myID = ++currentID;
+		if (response instanceof Statement) {
+			ResultSet rs = ((Statement) response).getResultSet();
+			rs.next();
+			myID = rs.getInt("groups_id");
+		}
+		for (Enumeration<GroupTreeNode> e = cursor.children(); e
+				.hasMoreElements();)
+			currentID = populateEntryGroupsTable(e.nextElement(), myID,
+					currentID, out, database_id);
+		return currentID;
+	}
+
+	/**
+	 * Generates the SQL required to populate the entry_types table with jabref
+	 * data.
+	 * 
+	 * @param out
+	 *            The output (PrintSream or Connection) object to which the DML
+	 *            should be written.
+	 */
+
+	private void populateEntryTypesTable(Object out) throws SQLException {
+		String query = "";
+		ArrayList<String> fieldRequirement = new ArrayList<String>();
+
+		ArrayList<String> existentTypes = new ArrayList<String>();
+		if (out instanceof Connection) {
+			ResultSet rs = ((Statement) SQLUtil.processQueryWithResults(out,
+					"SELECT label FROM entry_types")).getResultSet();
+			while (rs.next()) {
+				existentTypes.add(rs.getString(1));
+			}
+		}
+		for (BibtexEntryType val : BibtexEntryType.ALL_TYPES.values()) {
+			fieldRequirement.clear();
+			for (int i = 0; i < SQLUtil.getAllFields().size(); i++) {
+				fieldRequirement.add(i, "gen");
+			}
+			List<String> reqFields = Arrays
+					.asList(val.getRequiredFields() != null ? val
+							.getRequiredFields() : new String[0]);
+			List<String> optFields = Arrays
+					.asList(val.getOptionalFields() != null ? val
+							.getOptionalFields() : new String[0]);
+			List<String> utiFields = Arrays
+					.asList(val.getUtilityFields() != null ? val
+							.getUtilityFields() : new String[0]);
+			fieldRequirement = SQLUtil.setFieldRequirement(
+					SQLUtil.getAllFields(), reqFields, optFields, utiFields,
+					fieldRequirement);
+			if (!existentTypes.contains(val.getName().toLowerCase())) {
+				String insert = "INSERT INTO entry_types (label, " + fieldStr
+						+ ") VALUES (";
+				query = insert + "'" + val.getName().toLowerCase() + "'";
+				for (int i = 0; i < fieldRequirement.size(); i++) {
+					query = query + ", '" + fieldRequirement.get(i) + "'";
+				}
+				query = query + ");";
+			} else {
+				String[] update = fieldStr.split(",");
+				query = "UPDATE entry_types SET \n";
+				for (int i = 0; i < fieldRequirement.size(); i++) {
+					query += update[i] + "='" + fieldRequirement.get(i) + "',";
+				}
+				query = query.substring(0, query.lastIndexOf(","));
+				query += " WHERE label='" + val.getName().toLowerCase() + "'";
+			}
+			SQLUtil.processQuery(out, query);
+		}
+	}
+
+	/**
+	 * Recursive worker method for the populateGroupsTable methods.
+	 * 
+	 * @param cursor
+	 *            The current GroupTreeNode in the GroupsTree
+	 * @param parentID
+	 *            The integer ID associated with the cursors's parent node
+	 * @param ID
+	 *            The integer value to associate with the cursor
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be written.
+	 * @param database_id
+	 *            Id of jabref database to which the groups/entries are part of
+	 */
+	private int populateGroupsTable(GroupTreeNode cursor, int parentID,
+			int currentID, Object out, int database_id) throws SQLException {
+
+		AbstractGroup group = cursor.getGroup();
+		String searchField = null, searchExpr = null, caseSens = null, reg_exp = null;
+		int hierContext = group.getHierarchicalContext();
+		if (group instanceof KeywordGroup) {
+			searchField = ((KeywordGroup) group).getSearchField();
+			searchExpr = ((KeywordGroup) group).getSearchExpression();
+			caseSens = ((KeywordGroup) group).isCaseSensitive() ? "1" : "0";
+			reg_exp = ((KeywordGroup) group).isRegExp() ? "1" : "0";
+		} else if (group instanceof SearchGroup) {
+			searchExpr = ((SearchGroup) group).getSearchExpression();
+			caseSens = ((SearchGroup) group).isCaseSensitive() ? "1" : "0";
+			reg_exp = ((SearchGroup) group).isRegExp() ? "1" : "0";
+		}
+		// Protect all quotes in the group descriptions:
+		if (searchField != null)
+			searchField = Util.quote(searchField, "'", '\\');
+		if (searchExpr != null)
+			searchExpr = Util.quote(searchExpr, "'", '\\');
+
+		SQLUtil.processQuery(
+				out,
+				"INSERT INTO groups (label, parent_id, group_types_id, search_field, "
+						+ "search_expression, case_sensitive, reg_exp, hierarchical_context, database_id) "
+						+ "VALUES ('"
+						+ group.getName()
+						+ "', "
+						+ parentID
+						+ ", (SELECT group_types_id FROM group_types where label='"
+						+ group.getTypeId()
+						+ "')"
+						+ ", "
+						+ (searchField != null ? "'" + searchField + "'"
+								: "NULL")
+						+ ", "
+						+ (searchExpr != null ? "'" + searchExpr + "'" : "NULL")
+						+ ", "
+						+ (caseSens != null ? "'" + caseSens + "'" : "NULL")
+						+ ", "
+						+ (reg_exp != null ? "'" + reg_exp + "'" : "NULL")
+						+ ", " + hierContext + ", '" + database_id + "');");
+		// recurse on child nodes (depth-first traversal)
+		Object response = SQLUtil.processQueryWithResults(out,
+				"SELECT groups_id FROM groups WHERE label='"
+						+ cursor.getGroup().getName() + "' AND database_id='"
+						+ database_id + "' AND parent_id='" + parentID + "';");
+		// setting values to ID and myID to be used in case of textual SQL
+		// export
+		int myID = currentID;
+		if (response instanceof Statement) {
+			ResultSet rs = ((Statement) response).getResultSet();
+			rs.next();
+			myID = rs.getInt("groups_id");
+		}
+		for (Enumeration<GroupTreeNode> e = cursor.children(); e
+				.hasMoreElements();)
+			currentID = populateGroupsTable(e.nextElement(), myID, ++currentID,
+					out, database_id);
+		return currentID;
+	}
+
+	/**
+	 * Generates the DML required to populate the group_types table with JabRef
+	 * data.
+	 * 
+	 * @param out
+	 *            The output (PrintSream or Connection) object to which the DML
+	 *            should be written.
+	 * 
+	 * @throws SQLException
+	 */
+	private void populateGroupTypesTable(Object out) throws SQLException {
+		int quantidade = 0;
+		if (out instanceof Connection) {
+			ResultSet res = ((Statement) SQLUtil.processQueryWithResults(out,
+					"SELECT COUNT(*) AS amount FROM group_types"))
+					.getResultSet();
+			res.next();
+			quantidade = res.getInt("amount");
+			res.getStatement().close();
+		}
+		if (quantidade == 0) {
+			String[] typeNames = new String[] { AllEntriesGroup.ID,
+					ExplicitGroup.ID, KeywordGroup.ID, SearchGroup.ID };
+			for (int i = 0; i < typeNames.length; i++) {
+				String typeName = typeNames[i];
+				String insert = "INSERT INTO group_types (label) VALUES ('"
+						+ typeName + "');";
+				SQLUtil.processQuery(out, insert);
+			}
+		}
+	}
+
+	/**
+	 * Generates the SQL required to populate the strings table with jabref
+	 * data.
+	 * 
+	 * @param database
+	 *            BibtexDatabase object used from where the strings will be
+	 *            exported
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be written.
+	 * @param database_id
+	 *            ID of Jabref database related to the entries to be exported
+	 *            This information can be gathered using
+	 *            getDatabaseIDByPath(metaData, out)
+	 * @throws SQLException
+	 */
+	private void populateStringTable(BibtexDatabase database, Object out,
+			int database_id) throws SQLException {
+		String insert = "INSERT INTO strings (label, content, database_id) VALUES (";
+
+		if (database.getPreamble() != null) {
+			String dml = insert + "'@PREAMBLE', " + "'"
+					+ Util.quote(database.getPreamble(), "'", '\\') + "', "
+					+ "'" + database_id + "');";
+			SQLUtil.processQuery(out, dml);
+		}
+		Iterator<String> it = database.getStringKeySet().iterator();
+		while (it.hasNext()) {
+			String key = it.next();
+			BibtexString string = database.getString(key);
+			String dml = insert + "'" + Util.quote(string.getName(), "'", '\\')
+					+ "', " + "'" + Util.quote(string.getContent(), "'", '\\')
+					+ "', " + "'" + database_id + "'" + ");";
+			SQLUtil.processQuery(out, dml);
+		}
+	}
+
+	/**
+	 * Given a DBStrings it connects to the DB and returns the
+	 * java.sql.Connection object
+	 * 
+	 * @param dbstrings
+	 *            The DBStrings to use to make the connection
+	 * @return java.sql.Connection to the DB chosen
+	 * @throws Exception
+	 */
+	public abstract Connection connectToDB(DBStrings dbstrings)
+			throws Exception;
+
+	/**
+	 * Generates DML code necessary to create all tables in a database, and
+	 * writes it to appropriate output.
+	 * 
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be written.
+	 */
+	protected abstract void createTables(Object out) throws SQLException;
+
+	/**
+	 * Accepts the BibtexDatabase and MetaData, generates the DML required to
+	 * create and populate SQL database tables, and writes this DML to the
+	 * specified output file.
+	 * 
+	 * @param database
+	 *            The BibtexDatabase to export
+	 * @param metaData
+	 *            The MetaData object containing the groups information
+	 * @param keySet
+	 *            The set of IDs of the entries to export.
+	 * @param file
+	 *            The name of the file to which the DML should be written
+	 */
+	public void exportDatabaseAsFile(final BibtexDatabase database,
+			final MetaData metaData, Set<String> keySet, String file)
+			throws Exception {
+
+		// open output file
+		File outfile = new File(file);
+		if (outfile.exists())
+			outfile.delete();
+		BufferedOutputStream writer = null;
+		writer = new BufferedOutputStream(new FileOutputStream(outfile));
+		PrintStream fout = null;
+		fout = new PrintStream(writer);
+		performExport(database, metaData, keySet, fout, "file");
+		fout.close();
+	}
+
+	/**
+	 * Accepts the BibtexDatabase and MetaData, generates the DML required to
+	 * create and populate SQL database tables, and writes this DML to the
+	 * specified SQL database.
+	 * 
+	 * @param database
+	 *            The BibtexDatabase to export
+	 * @param metaData
+	 *            The MetaData object containing the groups information
+	 * @param keySet
+	 *            The set of IDs of the entries to export.
+	 * @param dbStrings
+	 *            The necessary database connection information
+	 */
+	public void exportDatabaseToDBMS(final BibtexDatabase database,
+			final MetaData metaData, Set<String> keySet, DBStrings dbStrings,
+			JabRefFrame frame) throws Exception {
+		String dbName = "";
+		Connection conn = null;
+		boolean redisplay = false;
+		try {
+			conn = this.connectToDB(dbStrings);
+			createTables(conn);
+			Vector<Vector<String>> matrix = createExistentDBNamesMatrix(dbStrings);
+			DBImportExportDialog dialogo = new DBImportExportDialog(frame,
+					matrix, DBImportExportDialog.DialogType.EXPORTER);
+			if (dialogo.removeAction) {
+				dbName = getDBName(matrix, dbStrings, frame, dialogo);
+				removeDB(dialogo, dbName, conn, metaData);
+				redisplay = true;
+			} else if (dialogo.hasDBSelected){
+				dbName = getDBName(matrix, dbStrings, frame, dialogo);
+				performExport(database, metaData, keySet, conn, dbName);
+			}
+			if (!conn.getAutoCommit()) {
+				conn.commit();
+				conn.setAutoCommit(true);
+			}
+			conn.close();
+			if (redisplay)
+				exportDatabaseToDBMS(database, metaData, keySet, dbStrings, frame);
+		} catch (SQLException ex) {
+			if (conn != null) {
+				if (!conn.getAutoCommit()) {
+					conn.rollback();
+				}
+			}
+			throw ex;
+		}
+	}
+
+	private String getDBName(Vector<Vector<String>> matrix,
+			DBStrings dbStrings, JabRefFrame frame, DBImportExportDialog dialogo)
+			throws SQLException, Exception {
+		String dbName = "";
+		if (matrix.size() > 1) {
+			if (dialogo.hasDBSelected) {
+				dbName = dialogo.selectedDB;
+				if ((dialogo.selectedInt == 0) && (!dialogo.removeAction)) {
+					dbName = JOptionPane.showInputDialog(dialogo.getDiag(),
+							"Please enter the desired name:", "SQL Export",
+							JOptionPane.INFORMATION_MESSAGE);
+					if (dbName != null) {
+						while (!isValidDBName(dbNames, dbName)) {
+							dbName = JOptionPane
+									.showInputDialog(
+											dialogo.getDiag(),
+											"You have entered an invalid or already existent DB name.\n Please enter the desired name:",
+											"SQL Export",
+											JOptionPane.ERROR_MESSAGE);
+						}
+					} else {
+						getDBName(
+								matrix,
+								dbStrings,
+								frame,
+								new DBImportExportDialog(
+										frame,
+										matrix,
+										DBImportExportDialog.DialogType.EXPORTER));
+					}
+				}
+			}
+		} else
+			dbName = JOptionPane.showInputDialog(frame,
+					"Please enter the desired name:", "SQL Export",
+					JOptionPane.INFORMATION_MESSAGE);
+		return dbName;
+	}
+
+	private Vector<Vector<String>> createExistentDBNamesMatrix(
+			DBStrings dbStrings) throws SQLException, Exception {
+		ResultSet rs = SQLUtil.queryAllFromTable(this.connectToDB(dbStrings),
+				"jabref_database");
+		Vector<String> v;
+		Vector<Vector<String>> matrix = new Vector<Vector<String>>();
+		dbNames.clear();
+		v = new Vector<String>();
+		v.add(Globals.lang("< CREATE NEW DATABASE >"));
+		matrix.add(v);
+		while (rs.next()) {
+			v = new Vector<String>();
+			v.add(rs.getString("database_name"));
+			matrix.add(v);
+			dbNames.add(rs.getString("database_name"));
+		}
+		return matrix;
+	}
+
+	private boolean isValidDBName(ArrayList<String> dbNames, String desiredName)
+			throws SQLException {
+		if (desiredName.trim().length() <= 1)
+			return false;
+		if (dbNames.contains(desiredName))
+			return false;
+		return true;
+	}
+
+
+	/**
+	 * Returns a Jabref Database ID from the database in case the DB is already
+	 * exported. In case the bib was already exported before, the method returns
+	 * the id, otherwise it calls the method that inserts a new row and returns
+	 * the ID for this new database
+	 * 
+	 * @param metaData
+	 *            The MetaData object containing the database information
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be written.
+	 * @return The ID of database row of the jabref database being exported
+	 * @throws SQLException
+	 */
+	/*
+	 * public int getDatabaseIDByPath(MetaData metaData, Object out, String
+	 * dbName) throws SQLException {
+	 * 
+	 * if (out instanceof Connection) { Object response =
+	 * SQLUtil.processQueryWithResults(out,
+	 * "SELECT database_id FROM jabref_database WHERE md5_path=md5('" +
+	 * metaData.getFile().getAbsolutePath() + "');"); ResultSet rs =
+	 * ((Statement) response).getResultSet(); if (rs.next()) return
+	 * rs.getInt("database_id"); else { insertJabRefDatabase(metaData, out,
+	 * dbName); return getDatabaseIDByPath(metaData, out, dbName); } } // in
+	 * case of text export there will be only 1 bib exported else {
+	 * insertJabRefDatabase(metaData, out, dbName); return 1; } }
+	 */
+
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/sql/exporter/MySQLExporter.java b/src/java/net/sf/jabref/sql/exporter/MySQLExporter.java
index 61b61d5..13639c3 100644
--- a/src/java/net/sf/jabref/sql/exporter/MySQLExporter.java
+++ b/src/java/net/sf/jabref/sql/exporter/MySQLExporter.java
@@ -1,150 +1,150 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General public static License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General public static License for more details.
-
-    You should have received a copy of the GNU General public static License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-package net.sf.jabref.sql.exporter;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-
-import net.sf.jabref.Util;
-import net.sf.jabref.sql.DBStrings;
-import net.sf.jabref.sql.SQLUtil;
-
-/**
- * 
- * @author ifsteinm.
- * 
- *         Jan 20th Extends DBExporter to provide features specific for MySQL
- *         Created after a refactory on SQLUtil
- * 
- */
-
-public class MySQLExporter extends DBExporter {
-
-	private static MySQLExporter instance = null;
-
-	private MySQLExporter() {
-	}
-
-	/**
-	 * 
-	 * @return The singleton instance of the MySQLExporter
-	 */
-	public static MySQLExporter getInstance() {
-		if (instance == null)
-			instance = new MySQLExporter();
-		return instance;
-	}
-
-	@Override
-	public Connection connectToDB(DBStrings dbstrings) throws Exception {
-		this.dbStrings = dbstrings;
-		String url = SQLUtil.createJDBCurl(dbstrings, false);
-		String drv = "com.mysql.jdbc.Driver";
-
-		Class.forName(drv).newInstance();
-		Connection conn = DriverManager.getConnection(url,
-				dbstrings.getUsername(), dbstrings.getPassword());
-		SQLUtil.processQuery(conn, "CREATE DATABASE IF NOT EXISTS `"
-				+ dbStrings.getDatabase() + "`");
-		SQLUtil.processQuery(conn, "USE `" + dbStrings.getDatabase() + "`");
-		return conn;
-	}
-
-	/**
-	 * Generates SQLnecessary to create all tables in a MySQL database, and
-	 * writes it to appropriate output.
-	 * 
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be written.
-	 */
-	@Override
-	protected void createTables(Object out) throws SQLException {
-
-		SQLUtil.processQuery(
-				out,
-				"CREATE TABLE IF NOT EXISTS jabref_database ( \n"
-						+ "database_id INT UNSIGNED NOT NULL AUTO_INCREMENT, \n"
-						+ "database_name VARCHAR(64) NOT NULL, \n"
-						+ "md5_path VARCHAR(32) NOT NULL, \n"
-						+ "PRIMARY KEY (database_id)\n );");
-		SQLUtil.processQuery(
-				out,
-				"CREATE TABLE IF NOT EXISTS entry_types ( \n"
-						+ "entry_types_id    INT UNSIGNED  NOT NULL AUTO_INCREMENT, \n"
-						+ "label			 TEXT, \n"
-						+ SQLUtil.fieldsAsCols(SQLUtil.getAllFields(),
-								" VARCHAR(3) DEFAULT NULL") + ", \n"
-						+ "PRIMARY KEY (entry_types_id) \n" + ");");
-		SQLUtil.processQuery(
-				out,
-				"CREATE TABLE IF NOT EXISTS entries ( \n"
-						+ "entries_id      INTEGER         NOT NULL AUTO_INCREMENT, \n"
-						+ "jabref_eid      VARCHAR("
-						+ Util.getMinimumIntegerDigits()
-						+ ")   DEFAULT NULL, \n"
-						+ "database_id INT UNSIGNED, \n"
-						+ "entry_types_id  INT UNSIGNED         DEFAULT NULL, \n"
-						+ "cite_key        VARCHAR(100)     DEFAULT NULL, \n"
-						+ SQLUtil.fieldsAsCols(SQLUtil.getAllFields(),
-								" TEXT DEFAULT NULL")
-						+ ",\n"
-						+ "PRIMARY KEY (entries_id), \n"
-						+ "INDEX(entry_types_id), \n"
-						+ "FOREIGN KEY (entry_types_id) REFERENCES entry_types(entry_types_id), \n"
-						+ "FOREIGN KEY (database_id) REFERENCES jabref_database(database_id) \n);");
-		SQLUtil.processQuery(
-				out,
-				"CREATE TABLE IF NOT EXISTS strings ( \n"
-						+ "strings_id      INTEGER         NOT NULL AUTO_INCREMENT, \n"
-						+ "label      VARCHAR(100)  DEFAULT NULL, \n"
-						+ "content    VARCHAR(200)  DEFAULT NULL, \n"
-						+ "database_id INT UNSIGNED, \n"
-						+ "FOREIGN KEY (database_id) REFERENCES jabref_database(database_id), \n"
-						+ "PRIMARY KEY (strings_id) \n" + ");");
-		SQLUtil.processQuery(out, "CREATE TABLE IF NOT EXISTS group_types ( \n"
-				+ "group_types_id  INTEGER     NOT NULL AUTO_INCREMENT, \n"
-				+ "label   VARCHAR(100)    DEFAULT NULL, \n"
-				+ "PRIMARY KEY (group_types_id) \n" + ");");
-		SQLUtil.processQuery(
-				out,
-				"CREATE TABLE IF NOT EXISTS groups ( \n"
-						+ "groups_id       INTEGER         NOT NULL AUTO_INCREMENT, \n"
-						+ "group_types_id  INTEGER         DEFAULT NULL, \n"
-						+ "label           VARCHAR(100)    DEFAULT NULL, \n"
-						+ "database_id INT UNSIGNED, \n"
-						+ "parent_id       INTEGER         DEFAULT NULL, \n"
-						+ "search_field       VARCHAR(100)          DEFAULT NULL, \n"
-						+ "search_expression  VARCHAR(200)          DEFAULT NULL, \n"
-						+ "case_sensitive  BOOL          DEFAULT NULL, \n"
-						+ "reg_exp BOOL DEFAULT NULL, \n"
-						+ "hierarchical_context INTEGER DEFAULT NULL, \n"
-						+ "FOREIGN KEY (database_id) REFERENCES jabref_database(database_id), \n"
-						+ "PRIMARY KEY (groups_id) \n" + ");");
-		SQLUtil.processQuery(
-				out,
-				"CREATE TABLE IF NOT EXISTS entry_group ( \n"
-						+ "entries_id       INTEGER        NOT NULL AUTO_INCREMENT, \n"
-						+ "groups_id        INTEGER        DEFAULT NULL, \n"
-						+ "INDEX(entries_id), \n"
-						+ "INDEX(groups_id), \n"
-						+ "FOREIGN KEY (entries_id) REFERENCES entries(entries_id) ON DELETE CASCADE, \n"
-						+ "FOREIGN KEY (groups_id)  REFERENCES groups(groups_id), \n"
-						+ "PRIMARY KEY (groups_id, entries_id) \n" + ");");
-	}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General public static License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General public static License for more details.
+
+    You should have received a copy of the GNU General public static License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+package net.sf.jabref.sql.exporter;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+import net.sf.jabref.Util;
+import net.sf.jabref.sql.DBStrings;
+import net.sf.jabref.sql.SQLUtil;
+
+/**
+ * 
+ * @author ifsteinm.
+ * 
+ *         Jan 20th Extends DBExporter to provide features specific for MySQL
+ *         Created after a refactory on SQLUtil
+ * 
+ */
+
+public class MySQLExporter extends DBExporter {
+
+	private static MySQLExporter instance = null;
+
+	private MySQLExporter() {
+	}
+
+	/**
+	 * 
+	 * @return The singleton instance of the MySQLExporter
+	 */
+	public static MySQLExporter getInstance() {
+		if (instance == null)
+			instance = new MySQLExporter();
+		return instance;
+	}
+
+	@Override
+	public Connection connectToDB(DBStrings dbstrings) throws Exception {
+		this.dbStrings = dbstrings;
+		String url = SQLUtil.createJDBCurl(dbstrings, false);
+		String drv = "com.mysql.jdbc.Driver";
+
+		Class.forName(drv).newInstance();
+		Connection conn = DriverManager.getConnection(url,
+				dbstrings.getUsername(), dbstrings.getPassword());
+		SQLUtil.processQuery(conn, "CREATE DATABASE IF NOT EXISTS `"
+				+ dbStrings.getDatabase() + "`");
+		SQLUtil.processQuery(conn, "USE `" + dbStrings.getDatabase() + "`");
+		return conn;
+	}
+
+	/**
+	 * Generates SQLnecessary to create all tables in a MySQL database, and
+	 * writes it to appropriate output.
+	 * 
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be written.
+	 */
+	@Override
+	protected void createTables(Object out) throws SQLException {
+
+		SQLUtil.processQuery(
+				out,
+				"CREATE TABLE IF NOT EXISTS jabref_database ( \n"
+						+ "database_id INT UNSIGNED NOT NULL AUTO_INCREMENT, \n"
+						+ "database_name VARCHAR(64) NOT NULL, \n"
+						+ "md5_path VARCHAR(32) NOT NULL, \n"
+						+ "PRIMARY KEY (database_id)\n );");
+		SQLUtil.processQuery(
+				out,
+				"CREATE TABLE IF NOT EXISTS entry_types ( \n"
+						+ "entry_types_id    INT UNSIGNED  NOT NULL AUTO_INCREMENT, \n"
+						+ "label			 TEXT, \n"
+						+ SQLUtil.fieldsAsCols(SQLUtil.getAllFields(),
+								" VARCHAR(3) DEFAULT NULL") + ", \n"
+						+ "PRIMARY KEY (entry_types_id) \n" + ");");
+		SQLUtil.processQuery(
+				out,
+				"CREATE TABLE IF NOT EXISTS entries ( \n"
+						+ "entries_id      INTEGER         NOT NULL AUTO_INCREMENT, \n"
+						+ "jabref_eid      VARCHAR("
+						+ Util.getMinimumIntegerDigits()
+						+ ")   DEFAULT NULL, \n"
+						+ "database_id INT UNSIGNED, \n"
+						+ "entry_types_id  INT UNSIGNED         DEFAULT NULL, \n"
+						+ "cite_key        VARCHAR(100)     DEFAULT NULL, \n"
+						+ SQLUtil.fieldsAsCols(SQLUtil.getAllFields(),
+								" TEXT DEFAULT NULL")
+						+ ",\n"
+						+ "PRIMARY KEY (entries_id), \n"
+						+ "INDEX(entry_types_id), \n"
+						+ "FOREIGN KEY (entry_types_id) REFERENCES entry_types(entry_types_id), \n"
+						+ "FOREIGN KEY (database_id) REFERENCES jabref_database(database_id) \n);");
+		SQLUtil.processQuery(
+				out,
+				"CREATE TABLE IF NOT EXISTS strings ( \n"
+						+ "strings_id      INTEGER         NOT NULL AUTO_INCREMENT, \n"
+						+ "label      VARCHAR(100)  DEFAULT NULL, \n"
+						+ "content    VARCHAR(200)  DEFAULT NULL, \n"
+						+ "database_id INT UNSIGNED, \n"
+						+ "FOREIGN KEY (database_id) REFERENCES jabref_database(database_id), \n"
+						+ "PRIMARY KEY (strings_id) \n" + ");");
+		SQLUtil.processQuery(out, "CREATE TABLE IF NOT EXISTS group_types ( \n"
+				+ "group_types_id  INTEGER     NOT NULL AUTO_INCREMENT, \n"
+				+ "label   VARCHAR(100)    DEFAULT NULL, \n"
+				+ "PRIMARY KEY (group_types_id) \n" + ");");
+		SQLUtil.processQuery(
+				out,
+				"CREATE TABLE IF NOT EXISTS groups ( \n"
+						+ "groups_id       INTEGER         NOT NULL AUTO_INCREMENT, \n"
+						+ "group_types_id  INTEGER         DEFAULT NULL, \n"
+						+ "label           VARCHAR(100)    DEFAULT NULL, \n"
+						+ "database_id INT UNSIGNED, \n"
+						+ "parent_id       INTEGER         DEFAULT NULL, \n"
+						+ "search_field       VARCHAR(100)          DEFAULT NULL, \n"
+						+ "search_expression  VARCHAR(200)          DEFAULT NULL, \n"
+						+ "case_sensitive  BOOL          DEFAULT NULL, \n"
+						+ "reg_exp BOOL DEFAULT NULL, \n"
+						+ "hierarchical_context INTEGER DEFAULT NULL, \n"
+						+ "FOREIGN KEY (database_id) REFERENCES jabref_database(database_id), \n"
+						+ "PRIMARY KEY (groups_id) \n" + ");");
+		SQLUtil.processQuery(
+				out,
+				"CREATE TABLE IF NOT EXISTS entry_group ( \n"
+						+ "entries_id       INTEGER        NOT NULL AUTO_INCREMENT, \n"
+						+ "groups_id        INTEGER        DEFAULT NULL, \n"
+						+ "INDEX(entries_id), \n"
+						+ "INDEX(groups_id), \n"
+						+ "FOREIGN KEY (entries_id) REFERENCES entries(entries_id) ON DELETE CASCADE, \n"
+						+ "FOREIGN KEY (groups_id)  REFERENCES groups(groups_id), \n"
+						+ "PRIMARY KEY (groups_id, entries_id) \n" + ");");
+	}
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/sql/exporter/PostgreSQLExporter.java b/src/java/net/sf/jabref/sql/exporter/PostgreSQLExporter.java
index c8b1452..7afd7be 100644
--- a/src/java/net/sf/jabref/sql/exporter/PostgreSQLExporter.java
+++ b/src/java/net/sf/jabref/sql/exporter/PostgreSQLExporter.java
@@ -1,175 +1,175 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General public static License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General public static License for more details.
-
-    You should have received a copy of the GNU General public static License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-package net.sf.jabref.sql.exporter;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import net.sf.jabref.Util;
-import net.sf.jabref.sql.DBStrings;
-import net.sf.jabref.sql.SQLUtil;
-
-/**
- * 
- * @author ifsteinm.
- * 
- *  Jan 20th	Extends DBExporter to provide features specific for PostgreSQL
- *  			Created after a refactory on SQLUtil
- *          
- */
-public class PostgreSQLExporter extends DBExporter {
-
-	private static PostgreSQLExporter instance = null;
-
-	private PostgreSQLExporter() {
-	}
-
-	/**
-	 * 
-	 * @return The singleton instance of the PostgreSQLExporter
-	 */
-	public static PostgreSQLExporter getInstance() {
-		if (instance == null)
-			instance = new PostgreSQLExporter();
-		return instance;
-	}
-
-	@Override
-	public Connection connectToDB(DBStrings dbstrings) throws Exception {
-		this.dbStrings = dbstrings;
-		String url = SQLUtil.createJDBCurl(dbstrings, true);
-		String drv = "org.postgresql.Driver";
-
-		Class.forName(drv).newInstance();
-		Connection conn = DriverManager.getConnection(url,
-				dbstrings.getUsername(), dbstrings.getPassword());
-		ResultSet rs = ((Statement) SQLUtil.processQueryWithResults(conn,
-				"SELECT count(*) AS alreadyThere FROM pg_database WHERE datname='"
-						+ dbStrings.getDatabase() + "'")).getResultSet();
-		rs.next();
-		if (rs.getInt("alreadyThere") == 0) {
-			SQLUtil.processQuery(conn, "CREATE DATABASE " + dbStrings.getDatabase());
-		}
-		rs.getStatement().close();
-		conn.close();
-
-		conn = DriverManager.getConnection(url, dbstrings.getUsername(),
-				dbstrings.getPassword());
-		createPLPGSQLFunction(conn);
-
-		return conn;
-	}
-
-
-	private void createPLPGSQLFunction(Connection conn) throws SQLException {
-		SQLUtil.processQuery(
-				conn,
-				"create or replace function create_table_if_not_exists (create_sql text) returns bool as $$"
-						+ "BEGIN"
-						+ "\tBEGIN"
-						+ "\t\tEXECUTE create_sql;"
-						+ "\t\tException when duplicate_table THEN"
-						+ "\t\tRETURN false;"
-						+ "\tEND;"
-						+ "\tRETURN true;"
-						+ "END;" + "$$" + "Language plpgsql;");
-	}
-
-
-	/**
-	 * Generates SQL necessary to create all tables in a MySQL database, and
-	 * writes it to appropriate output.
-	 * 
-	 * @param out
-	 *            The output (PrintStream or Connection) object to which the DML
-	 *            should be written.
-	 */
-	@Override
-	protected void createTables(Object out) throws SQLException {
-
-		SQLUtil.processQuery(out,
-				"SELECT create_table_if_not_exists ('CREATE TABLE jabref_database ( \n"
-						+ "database_id SERIAL NOT NULL, \n"
-						+ "database_name VARCHAR(64) NOT NULL, \n"
-						+ "md5_path VARCHAR(32) NOT NULL, \n"
-						+ "PRIMARY KEY (database_id)\n );')");
-		SQLUtil.processQuery(
-				out,
-				"SELECT create_table_if_not_exists ('CREATE TABLE entry_types ( \n"
-						+ "entry_types_id    SERIAL, \n"
-						+ "label TEXT, \n"
-						+ SQLUtil.fieldsAsCols(SQLUtil.getAllFields(),
-								" VARCHAR(3) DEFAULT NULL") + ", \n"
-						+ "PRIMARY KEY (entry_types_id) \n" + ");')");
-		SQLUtil.processQuery(
-				out,
-				"SELECT create_table_if_not_exists ('CREATE TABLE entries ( \n"
-						+ "entries_id      SERIAL, \n"
-						+ "jabref_eid      VARCHAR("
-						+ Util.getMinimumIntegerDigits()
-						+ ")   DEFAULT NULL, \n"
-						+ "database_id INTEGER, \n"
-						+ "entry_types_id  INTEGER DEFAULT NULL, \n"
-						+ "cite_key        VARCHAR(100)     DEFAULT NULL, \n"
-						+ SQLUtil.fieldsAsCols(SQLUtil.getAllFields(),
-								" TEXT DEFAULT NULL")
-						+ ",\n"
-						+ "PRIMARY KEY (entries_id), \n"
-						+ "FOREIGN KEY (entry_types_id) REFERENCES entry_types (entry_types_id), \n"
-						+ "FOREIGN KEY (database_id) REFERENCES jabref_database(database_id) \n"
-						+ ");')");
-		SQLUtil.processQuery(out,
-				"SELECT create_table_if_not_exists ('CREATE TABLE strings ( \n"
-						+ "strings_id      SERIAL, \n"
-						+ "label      VARCHAR(100)  DEFAULT NULL, \n"
-						+ "content    VARCHAR(200)  DEFAULT NULL, \n"
-						+ "database_id INTEGER, \n"
-						+ "FOREIGN KEY (database_id) REFERENCES jabref_database(database_id), \n"
-						+ "PRIMARY KEY (strings_id) \n" + ");')");
-		SQLUtil.processQuery(out,
-				"SELECT create_table_if_not_exists ('CREATE TABLE group_types ( \n"
-						+ "group_types_id  SERIAL, \n"
-						+ "label   VARCHAR(100)    DEFAULT NULL, \n"
-						+ "PRIMARY KEY (group_types_id) \n" + ");')");
-		SQLUtil.processQuery(
-				out,
-				"SELECT create_table_if_not_exists ('CREATE TABLE groups ( \n"
-						+ "groups_id       SERIAL, \n"
-						+ "group_types_id  INTEGER         DEFAULT NULL, \n"
-						+ "label           VARCHAR(100)    DEFAULT NULL, \n"
-						+ "database_id INTEGER, \n"
-						+ "parent_id       INTEGER         DEFAULT NULL, \n"
-						+ "search_field       VARCHAR(100)          DEFAULT NULL, \n"
-						+ "search_expression  VARCHAR(200)          DEFAULT NULL, \n"
-						+ "case_sensitive  BOOLEAN       DEFAULT NULL, \n"
-						+ "reg_exp BOOLEAN DEFAULT NULL, \n"
-						+ "hierarchical_context INTEGER DEFAULT NULL, \n"
-						+ "FOREIGN KEY (database_id) REFERENCES jabref_database(database_id), \n"
-						+ "PRIMARY KEY (groups_id) \n" + ");')");
-		SQLUtil.processQuery(
-				out,
-				"SELECT create_table_if_not_exists ('CREATE TABLE entry_group ( \n"
-						+ "entries_id       SERIAL, \n"
-						+ "groups_id        INTEGER        DEFAULT NULL, \n"
-						+ "FOREIGN KEY (entries_id) REFERENCES entries (entries_id) ON DELETE CASCADE, \n"
-						+ "FOREIGN KEY (groups_id)  REFERENCES groups (groups_id), \n"
-						+ "PRIMARY KEY (groups_id, entries_id) \n" + ");')");
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General public static License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General public static License for more details.
+
+    You should have received a copy of the GNU General public static License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+package net.sf.jabref.sql.exporter;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import net.sf.jabref.Util;
+import net.sf.jabref.sql.DBStrings;
+import net.sf.jabref.sql.SQLUtil;
+
+/**
+ * 
+ * @author ifsteinm.
+ * 
+ *  Jan 20th	Extends DBExporter to provide features specific for PostgreSQL
+ *  			Created after a refactory on SQLUtil
+ *          
+ */
+public class PostgreSQLExporter extends DBExporter {
+
+	private static PostgreSQLExporter instance = null;
+
+	private PostgreSQLExporter() {
+	}
+
+	/**
+	 * 
+	 * @return The singleton instance of the PostgreSQLExporter
+	 */
+	public static PostgreSQLExporter getInstance() {
+		if (instance == null)
+			instance = new PostgreSQLExporter();
+		return instance;
+	}
+
+	@Override
+	public Connection connectToDB(DBStrings dbstrings) throws Exception {
+		this.dbStrings = dbstrings;
+		String url = SQLUtil.createJDBCurl(dbstrings, true);
+		String drv = "org.postgresql.Driver";
+
+		Class.forName(drv).newInstance();
+		Connection conn = DriverManager.getConnection(url,
+				dbstrings.getUsername(), dbstrings.getPassword());
+		ResultSet rs = ((Statement) SQLUtil.processQueryWithResults(conn,
+				"SELECT count(*) AS alreadyThere FROM pg_database WHERE datname='"
+						+ dbStrings.getDatabase() + "'")).getResultSet();
+		rs.next();
+		if (rs.getInt("alreadyThere") == 0) {
+			SQLUtil.processQuery(conn, "CREATE DATABASE " + dbStrings.getDatabase());
+		}
+		rs.getStatement().close();
+		conn.close();
+
+		conn = DriverManager.getConnection(url, dbstrings.getUsername(),
+				dbstrings.getPassword());
+		createPLPGSQLFunction(conn);
+
+		return conn;
+	}
+
+
+	private void createPLPGSQLFunction(Connection conn) throws SQLException {
+		SQLUtil.processQuery(
+				conn,
+				"create or replace function create_table_if_not_exists (create_sql text) returns bool as $$"
+						+ "BEGIN"
+						+ "\tBEGIN"
+						+ "\t\tEXECUTE create_sql;"
+						+ "\t\tException when duplicate_table THEN"
+						+ "\t\tRETURN false;"
+						+ "\tEND;"
+						+ "\tRETURN true;"
+						+ "END;" + "$$" + "Language plpgsql;");
+	}
+
+
+	/**
+	 * Generates SQL necessary to create all tables in a MySQL database, and
+	 * writes it to appropriate output.
+	 * 
+	 * @param out
+	 *            The output (PrintStream or Connection) object to which the DML
+	 *            should be written.
+	 */
+	@Override
+	protected void createTables(Object out) throws SQLException {
+
+		SQLUtil.processQuery(out,
+				"SELECT create_table_if_not_exists ('CREATE TABLE jabref_database ( \n"
+						+ "database_id SERIAL NOT NULL, \n"
+						+ "database_name VARCHAR(64) NOT NULL, \n"
+						+ "md5_path VARCHAR(32) NOT NULL, \n"
+						+ "PRIMARY KEY (database_id)\n );')");
+		SQLUtil.processQuery(
+				out,
+				"SELECT create_table_if_not_exists ('CREATE TABLE entry_types ( \n"
+						+ "entry_types_id    SERIAL, \n"
+						+ "label TEXT, \n"
+						+ SQLUtil.fieldsAsCols(SQLUtil.getAllFields(),
+								" VARCHAR(3) DEFAULT NULL") + ", \n"
+						+ "PRIMARY KEY (entry_types_id) \n" + ");')");
+		SQLUtil.processQuery(
+				out,
+				"SELECT create_table_if_not_exists ('CREATE TABLE entries ( \n"
+						+ "entries_id      SERIAL, \n"
+						+ "jabref_eid      VARCHAR("
+						+ Util.getMinimumIntegerDigits()
+						+ ")   DEFAULT NULL, \n"
+						+ "database_id INTEGER, \n"
+						+ "entry_types_id  INTEGER DEFAULT NULL, \n"
+						+ "cite_key        VARCHAR(100)     DEFAULT NULL, \n"
+						+ SQLUtil.fieldsAsCols(SQLUtil.getAllFields(),
+								" TEXT DEFAULT NULL")
+						+ ",\n"
+						+ "PRIMARY KEY (entries_id), \n"
+						+ "FOREIGN KEY (entry_types_id) REFERENCES entry_types (entry_types_id), \n"
+						+ "FOREIGN KEY (database_id) REFERENCES jabref_database(database_id) \n"
+						+ ");')");
+		SQLUtil.processQuery(out,
+				"SELECT create_table_if_not_exists ('CREATE TABLE strings ( \n"
+						+ "strings_id      SERIAL, \n"
+						+ "label      VARCHAR(100)  DEFAULT NULL, \n"
+						+ "content    VARCHAR(200)  DEFAULT NULL, \n"
+						+ "database_id INTEGER, \n"
+						+ "FOREIGN KEY (database_id) REFERENCES jabref_database(database_id), \n"
+						+ "PRIMARY KEY (strings_id) \n" + ");')");
+		SQLUtil.processQuery(out,
+				"SELECT create_table_if_not_exists ('CREATE TABLE group_types ( \n"
+						+ "group_types_id  SERIAL, \n"
+						+ "label   VARCHAR(100)    DEFAULT NULL, \n"
+						+ "PRIMARY KEY (group_types_id) \n" + ");')");
+		SQLUtil.processQuery(
+				out,
+				"SELECT create_table_if_not_exists ('CREATE TABLE groups ( \n"
+						+ "groups_id       SERIAL, \n"
+						+ "group_types_id  INTEGER         DEFAULT NULL, \n"
+						+ "label           VARCHAR(100)    DEFAULT NULL, \n"
+						+ "database_id INTEGER, \n"
+						+ "parent_id       INTEGER         DEFAULT NULL, \n"
+						+ "search_field       VARCHAR(100)          DEFAULT NULL, \n"
+						+ "search_expression  VARCHAR(200)          DEFAULT NULL, \n"
+						+ "case_sensitive  BOOLEAN       DEFAULT NULL, \n"
+						+ "reg_exp BOOLEAN DEFAULT NULL, \n"
+						+ "hierarchical_context INTEGER DEFAULT NULL, \n"
+						+ "FOREIGN KEY (database_id) REFERENCES jabref_database(database_id), \n"
+						+ "PRIMARY KEY (groups_id) \n" + ");')");
+		SQLUtil.processQuery(
+				out,
+				"SELECT create_table_if_not_exists ('CREATE TABLE entry_group ( \n"
+						+ "entries_id       SERIAL, \n"
+						+ "groups_id        INTEGER        DEFAULT NULL, \n"
+						+ "FOREIGN KEY (entries_id) REFERENCES entries (entries_id) ON DELETE CASCADE, \n"
+						+ "FOREIGN KEY (groups_id)  REFERENCES groups (groups_id), \n"
+						+ "PRIMARY KEY (groups_id, entries_id) \n" + ");')");
+	}
+}
diff --git a/src/java/net/sf/jabref/sql/importer/DBImporter.java b/src/java/net/sf/jabref/sql/importer/DBImporter.java
index 0e092c3..04ad162 100644
--- a/src/java/net/sf/jabref/sql/importer/DBImporter.java
+++ b/src/java/net/sf/jabref/sql/importer/DBImporter.java
@@ -1,286 +1,286 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General public static License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General public static License for more details.
-
-    You should have received a copy of the GNU General public static License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-package net.sf.jabref.sql.importer;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Set;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.BibtexFields;
-import net.sf.jabref.BibtexString;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.Util;
-import net.sf.jabref.groups.AbstractGroup;
-import net.sf.jabref.groups.AllEntriesGroup;
-import net.sf.jabref.groups.ExplicitGroup;
-import net.sf.jabref.groups.GroupTreeNode;
-import net.sf.jabref.groups.KeywordGroup;
-import net.sf.jabref.groups.SearchGroup;
-import net.sf.jabref.sql.DBImporterExporter;
-import net.sf.jabref.sql.DBStrings;
-import net.sf.jabref.sql.SQLUtil;
-
-/**
- * 
- * @author ifsteinm.
- * 
- *         Jan 20th Abstract Class to provide main features to import entries
- *         from a DB. To insert a new DB it is necessary to extend this class
- *         and add the DB name the enum available at
- *         net.sf.jabref.sql.DBImporterAndExporterFactory (and to the GUI). This
- *         class and its subclasses import database, entries and related stuff
- *         from a DB to bib. Each exported database is imported as a new JabRef
- *         (bib) database, presented on a new tab
- * 
- */
-public abstract class DBImporter extends DBImporterExporter{
-
-	private final ArrayList<String> columnsNotConsideredForEntries = new ArrayList<String>(
-			Arrays.asList("cite_key", "entry_types_id", "database_id",
-					"jabref_eid", "entries_id"));
-
-	/**
-	 * Given a DBStrings it connects to the DB and returns the
-	 * java.sql.Connection object
-	 * 
-	 * @param dbstrings
-	 *            The DBStrings to use to make the connection
-	 * @return java.sql.Connection to the DB chosen
-	 * @throws Exception
-	 */
-	protected abstract Connection connectToDB(DBStrings dbstrings)
-			throws Exception;
-
-	/**
-	 * 
-	 * @param conn
-	 *            Connection object to the database
-	 * @return A ResultSet with column name for the entries table
-	 * @throws SQLException
-	 */
-	protected abstract ResultSet readColumnNames(Connection conn)
-			throws SQLException;
-
-	/**
-	 * Worker method to perform the import from a database
-	 * 
-	 * @param keySet
-	 *            The set of IDs of the entries to export.
-	 * @param dbs
-	 *            The necessary database connection information
-	 * @return An ArrayList containing pairs of Objects. Each position of the
-	 *         ArrayList stores three Objects: a BibtexDatabase, a MetaData and
-	 *         a String with the bib database name stored in the DBMS
-	 * @throws Exception
-	 */
-	public ArrayList<Object[]> performImport(Set<String> keySet, DBStrings dbs, List<String> listOfDBs)
-			throws Exception {
-		ArrayList<Object[]> result = new ArrayList<Object[]>();
-		Connection conn = this.connectToDB(dbs);
-
-        Iterator<String> itLista = listOfDBs.iterator();
-        String jabrefDBs = "(";   
-        while (itLista.hasNext())
-        {
-        	jabrefDBs += "'" + itLista.next() + "',";
-        }
-        jabrefDBs = jabrefDBs.substring(0, jabrefDBs.length() - 1) + ")";
-		
-		ResultSet rsDatabase = SQLUtil.queryAllFromTable(conn,
-				"jabref_database WHERE database_name IN "+jabrefDBs);
-		while (rsDatabase.next()) {
-			BibtexDatabase database = new BibtexDatabase();
-			// Find entry type IDs and their mappings to type names:
-			HashMap<String, BibtexEntryType> types = new HashMap<String, BibtexEntryType>();
-			ResultSet rsEntryType = SQLUtil.queryAllFromTable(conn,
-					"entry_types");
-			while (rsEntryType.next()) {
-				types.put(rsEntryType.getString("entry_types_id"),
-						BibtexEntryType.getType(rsEntryType.getString("label")));
-			}
-			rsEntryType.getStatement().close();
-			for (Iterator<String> iterator = types.keySet().iterator(); iterator
-					.hasNext();) {
-				iterator.next();
-			}
-
-			ResultSet rsColumns = this.readColumnNames(conn);
-			ArrayList<String> colNames = new ArrayList<String>();
-			while (rsColumns.next()) {
-				if (!columnsNotConsideredForEntries.contains(rsColumns
-						.getString(1)))
-					colNames.add(rsColumns.getString(1));
-			}
-			rsColumns.getStatement().close();
-			String database_id = rsDatabase.getString("database_id");
-			// Read the entries and create BibtexEntry instances:
-			HashMap<String, BibtexEntry> entries = new HashMap<String, BibtexEntry>();
-			ResultSet rsEntries = SQLUtil.queryAllFromTable(conn,
-					"entries WHERE database_id= '" + database_id + "';");
-			while (rsEntries.next()) {
-				String id = rsEntries.getString("entries_id");
-				BibtexEntry entry = new BibtexEntry(Util.createNeutralId(),
-						types.get(rsEntries.getString("entry_types_id")));
-				entry.setField(BibtexFields.KEY_FIELD,
-						rsEntries.getString("cite_key"));
-				for (Iterator<String> iterator = colNames.iterator(); iterator
-						.hasNext();) {
-					String col = iterator.next();
-					String value = rsEntries.getString(col);
-					if (value != null) {
-						col = col.charAt(col.length() - 1) == '_' ? col
-								.substring(0, col.length() - 1) : col;
-						entry.setField(col, value);
-					}
-				}
-				entries.put(id, entry);
-				database.insertEntry(entry);
-			}
-			rsEntries.getStatement().close();
-
-			// Import strings and preamble:
-			ResultSet rsStrings = SQLUtil.queryAllFromTable(conn,
-					"strings WHERE database_id='" + database_id + "'");
-			while (rsStrings.next()) {
-				String label = rsStrings.getString("label"), content = rsStrings
-						.getString("content");
-				if (label.equals("@PREAMBLE")) {
-					database.setPreamble(content);
-				} else {
-					BibtexString string = new BibtexString(
-							Util.createNeutralId(), label, content);
-					database.addString(string);
-				}
-			}
-			rsStrings.getStatement().close();
-
-			MetaData metaData = new MetaData();
-			metaData.initializeNewDatabase();
-			// Read the groups tree:
-			importGroupsTree(metaData, entries, conn, database_id);
-			result.add(new Object[] { database, metaData,
-					rsDatabase.getString("database_name") });
-		}
-		return result;
-	}
-
-	/**
-	 * Look up the group type name from the type ID in the database.
-	 * 
-	 * @param groupId
-	 *            The database's groups id
-	 * @param conn
-	 *            The database connection
-	 * 
-	 * @return The name (JabRef type id) of the group type.
-	 * @throws SQLException
-	 */
-	public String findGroupTypeName(String groupId, Connection conn)
-			throws SQLException {
-		return SQLUtil.processQueryWithSingleResult(conn,
-				"SELECT label FROM group_types WHERE group_types_id='"
-						+ groupId + "';");
-	}
-
-	public void importGroupsTree(MetaData metaData,
-			HashMap<String, BibtexEntry> entries, Connection conn,
-			String database_id) throws SQLException {
-		HashMap<String, GroupTreeNode> groups = new HashMap<String, GroupTreeNode>();
-		LinkedHashMap<GroupTreeNode, String> parentIds = new LinkedHashMap<GroupTreeNode, String>();
-		GroupTreeNode rootNode = new GroupTreeNode(new AllEntriesGroup());
-
-		ResultSet rsGroups = SQLUtil.queryAllFromTable(conn,
-				"groups WHERE database_id='" + database_id
-						+ "' ORDER BY groups_id");
-		while (rsGroups.next()) {
-			AbstractGroup group = null;
-			String typeId = findGroupTypeName(
-					rsGroups.getString("group_types_id"), conn);
-			if (typeId.equals(AllEntriesGroup.ID)) {
-				// register the id of the root node:
-				groups.put(rsGroups.getString("groups_id"), rootNode);
-			} else if (typeId.equals(ExplicitGroup.ID)) {
-				group = new ExplicitGroup(rsGroups.getString("label"),
-						rsGroups.getInt("hierarchical_context"));
-			} else if (typeId.equals(KeywordGroup.ID)) {
-				System.out.println("Keyw: "
-						+ rsGroups.getBoolean("case_sensitive"));
-				group = new KeywordGroup(rsGroups.getString("label"),
-						Util.unquote(rsGroups.getString("search_field"), '\\'),
-						Util.unquote(rsGroups.getString("search_expression"),
-								'\\'), rsGroups.getBoolean("case_sensitive"),
-						rsGroups.getBoolean("reg_exp"),
-						rsGroups.getInt("hierarchical_context"));
-			} else if (typeId.equals(SearchGroup.ID)) {
-				System.out.println("Search: "
-						+ rsGroups.getBoolean("case_sensitive"));
-				group = new SearchGroup(rsGroups.getString("label"),
-						Util.unquote(rsGroups.getString("search_expression"),
-								'\\'), rsGroups.getBoolean("case_sensitive"),
-						rsGroups.getBoolean("reg_exp"),
-						rsGroups.getInt("hierarchical_context"));
-			}
-
-			if (group != null) {
-				GroupTreeNode node = new GroupTreeNode(group);
-				parentIds.put(node, rsGroups.getString("parent_id"));
-				groups.put(rsGroups.getString("groups_id"), node);
-			}
-
-			// Ok, we have collected a map of all groups and their parent IDs,
-			// and another map of all group IDs and their group nodes.
-			// Now we need to build the groups tree:
-			for (Iterator<GroupTreeNode> i = parentIds.keySet().iterator(); i
-					.hasNext();) {
-				GroupTreeNode node = i.next();
-				String parentId = parentIds.get(node);
-				GroupTreeNode parent = groups.get(parentId);
-				if (parent == null) {
-					// TODO: missing parent
-				} else {
-					parent.add(node);
-				}
-			}
-			ResultSet rsEntryGroup = SQLUtil.queryAllFromTable(conn,
-					"entry_group");
-			while (rsEntryGroup.next()) {
-				String entryId = rsEntryGroup.getString("entries_id"), groupId = rsEntryGroup
-						.getString("groups_id");
-				GroupTreeNode node = groups.get(groupId);
-				if ((node != null)
-						&& (node.getGroup() instanceof ExplicitGroup)) {
-					ExplicitGroup expGroup = (ExplicitGroup) node.getGroup();
-					expGroup.addEntry(entries.get(entryId));
-				}
-			}
-			rsEntryGroup.getStatement().close();
-			metaData.setGroups(rootNode);
-		}
-		rsGroups.getStatement().close();
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General public static License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General public static License for more details.
+
+    You should have received a copy of the GNU General public static License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+package net.sf.jabref.sql.importer;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Set;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.BibtexFields;
+import net.sf.jabref.BibtexString;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.Util;
+import net.sf.jabref.groups.AbstractGroup;
+import net.sf.jabref.groups.AllEntriesGroup;
+import net.sf.jabref.groups.ExplicitGroup;
+import net.sf.jabref.groups.GroupTreeNode;
+import net.sf.jabref.groups.KeywordGroup;
+import net.sf.jabref.groups.SearchGroup;
+import net.sf.jabref.sql.DBImporterExporter;
+import net.sf.jabref.sql.DBStrings;
+import net.sf.jabref.sql.SQLUtil;
+
+/**
+ * 
+ * @author ifsteinm.
+ * 
+ *         Jan 20th Abstract Class to provide main features to import entries
+ *         from a DB. To insert a new DB it is necessary to extend this class
+ *         and add the DB name the enum available at
+ *         net.sf.jabref.sql.DBImporterAndExporterFactory (and to the GUI). This
+ *         class and its subclasses import database, entries and related stuff
+ *         from a DB to bib. Each exported database is imported as a new JabRef
+ *         (bib) database, presented on a new tab
+ * 
+ */
+public abstract class DBImporter extends DBImporterExporter{
+
+	private final ArrayList<String> columnsNotConsideredForEntries = new ArrayList<String>(
+			Arrays.asList("cite_key", "entry_types_id", "database_id",
+					"jabref_eid", "entries_id"));
+
+	/**
+	 * Given a DBStrings it connects to the DB and returns the
+	 * java.sql.Connection object
+	 * 
+	 * @param dbstrings
+	 *            The DBStrings to use to make the connection
+	 * @return java.sql.Connection to the DB chosen
+	 * @throws Exception
+	 */
+	protected abstract Connection connectToDB(DBStrings dbstrings)
+			throws Exception;
+
+	/**
+	 * 
+	 * @param conn
+	 *            Connection object to the database
+	 * @return A ResultSet with column name for the entries table
+	 * @throws SQLException
+	 */
+	protected abstract ResultSet readColumnNames(Connection conn)
+			throws SQLException;
+
+	/**
+	 * Worker method to perform the import from a database
+	 * 
+	 * @param keySet
+	 *            The set of IDs of the entries to export.
+	 * @param dbs
+	 *            The necessary database connection information
+	 * @return An ArrayList containing pairs of Objects. Each position of the
+	 *         ArrayList stores three Objects: a BibtexDatabase, a MetaData and
+	 *         a String with the bib database name stored in the DBMS
+	 * @throws Exception
+	 */
+	public ArrayList<Object[]> performImport(Set<String> keySet, DBStrings dbs, List<String> listOfDBs)
+			throws Exception {
+		ArrayList<Object[]> result = new ArrayList<Object[]>();
+		Connection conn = this.connectToDB(dbs);
+
+        Iterator<String> itLista = listOfDBs.iterator();
+        String jabrefDBs = "(";   
+        while (itLista.hasNext())
+        {
+        	jabrefDBs += "'" + itLista.next() + "',";
+        }
+        jabrefDBs = jabrefDBs.substring(0, jabrefDBs.length() - 1) + ")";
+		
+		ResultSet rsDatabase = SQLUtil.queryAllFromTable(conn,
+				"jabref_database WHERE database_name IN "+jabrefDBs);
+		while (rsDatabase.next()) {
+			BibtexDatabase database = new BibtexDatabase();
+			// Find entry type IDs and their mappings to type names:
+			HashMap<String, BibtexEntryType> types = new HashMap<String, BibtexEntryType>();
+			ResultSet rsEntryType = SQLUtil.queryAllFromTable(conn,
+					"entry_types");
+			while (rsEntryType.next()) {
+				types.put(rsEntryType.getString("entry_types_id"),
+						BibtexEntryType.getType(rsEntryType.getString("label")));
+			}
+			rsEntryType.getStatement().close();
+			for (Iterator<String> iterator = types.keySet().iterator(); iterator
+					.hasNext();) {
+				iterator.next();
+			}
+
+			ResultSet rsColumns = this.readColumnNames(conn);
+			ArrayList<String> colNames = new ArrayList<String>();
+			while (rsColumns.next()) {
+				if (!columnsNotConsideredForEntries.contains(rsColumns
+						.getString(1)))
+					colNames.add(rsColumns.getString(1));
+			}
+			rsColumns.getStatement().close();
+			String database_id = rsDatabase.getString("database_id");
+			// Read the entries and create BibtexEntry instances:
+			HashMap<String, BibtexEntry> entries = new HashMap<String, BibtexEntry>();
+			ResultSet rsEntries = SQLUtil.queryAllFromTable(conn,
+					"entries WHERE database_id= '" + database_id + "';");
+			while (rsEntries.next()) {
+				String id = rsEntries.getString("entries_id");
+				BibtexEntry entry = new BibtexEntry(Util.createNeutralId(),
+						types.get(rsEntries.getString("entry_types_id")));
+				entry.setField(BibtexFields.KEY_FIELD,
+						rsEntries.getString("cite_key"));
+				for (Iterator<String> iterator = colNames.iterator(); iterator
+						.hasNext();) {
+					String col = iterator.next();
+					String value = rsEntries.getString(col);
+					if (value != null) {
+						col = col.charAt(col.length() - 1) == '_' ? col
+								.substring(0, col.length() - 1) : col;
+						entry.setField(col, value);
+					}
+				}
+				entries.put(id, entry);
+				database.insertEntry(entry);
+			}
+			rsEntries.getStatement().close();
+
+			// Import strings and preamble:
+			ResultSet rsStrings = SQLUtil.queryAllFromTable(conn,
+					"strings WHERE database_id='" + database_id + "'");
+			while (rsStrings.next()) {
+				String label = rsStrings.getString("label"), content = rsStrings
+						.getString("content");
+				if (label.equals("@PREAMBLE")) {
+					database.setPreamble(content);
+				} else {
+					BibtexString string = new BibtexString(
+							Util.createNeutralId(), label, content);
+					database.addString(string);
+				}
+			}
+			rsStrings.getStatement().close();
+
+			MetaData metaData = new MetaData();
+			metaData.initializeNewDatabase();
+			// Read the groups tree:
+			importGroupsTree(metaData, entries, conn, database_id);
+			result.add(new Object[] { database, metaData,
+					rsDatabase.getString("database_name") });
+		}
+		return result;
+	}
+
+	/**
+	 * Look up the group type name from the type ID in the database.
+	 * 
+	 * @param groupId
+	 *            The database's groups id
+	 * @param conn
+	 *            The database connection
+	 * 
+	 * @return The name (JabRef type id) of the group type.
+	 * @throws SQLException
+	 */
+	public String findGroupTypeName(String groupId, Connection conn)
+			throws SQLException {
+		return SQLUtil.processQueryWithSingleResult(conn,
+				"SELECT label FROM group_types WHERE group_types_id='"
+						+ groupId + "';");
+	}
+
+	public void importGroupsTree(MetaData metaData,
+			HashMap<String, BibtexEntry> entries, Connection conn,
+			String database_id) throws SQLException {
+		HashMap<String, GroupTreeNode> groups = new HashMap<String, GroupTreeNode>();
+		LinkedHashMap<GroupTreeNode, String> parentIds = new LinkedHashMap<GroupTreeNode, String>();
+		GroupTreeNode rootNode = new GroupTreeNode(new AllEntriesGroup());
+
+		ResultSet rsGroups = SQLUtil.queryAllFromTable(conn,
+				"groups WHERE database_id='" + database_id
+						+ "' ORDER BY groups_id");
+		while (rsGroups.next()) {
+			AbstractGroup group = null;
+			String typeId = findGroupTypeName(
+					rsGroups.getString("group_types_id"), conn);
+			if (typeId.equals(AllEntriesGroup.ID)) {
+				// register the id of the root node:
+				groups.put(rsGroups.getString("groups_id"), rootNode);
+			} else if (typeId.equals(ExplicitGroup.ID)) {
+				group = new ExplicitGroup(rsGroups.getString("label"),
+						rsGroups.getInt("hierarchical_context"));
+			} else if (typeId.equals(KeywordGroup.ID)) {
+				System.out.println("Keyw: "
+						+ rsGroups.getBoolean("case_sensitive"));
+				group = new KeywordGroup(rsGroups.getString("label"),
+						Util.unquote(rsGroups.getString("search_field"), '\\'),
+						Util.unquote(rsGroups.getString("search_expression"),
+								'\\'), rsGroups.getBoolean("case_sensitive"),
+						rsGroups.getBoolean("reg_exp"),
+						rsGroups.getInt("hierarchical_context"));
+			} else if (typeId.equals(SearchGroup.ID)) {
+				System.out.println("Search: "
+						+ rsGroups.getBoolean("case_sensitive"));
+				group = new SearchGroup(rsGroups.getString("label"),
+						Util.unquote(rsGroups.getString("search_expression"),
+								'\\'), rsGroups.getBoolean("case_sensitive"),
+						rsGroups.getBoolean("reg_exp"),
+						rsGroups.getInt("hierarchical_context"));
+			}
+
+			if (group != null) {
+				GroupTreeNode node = new GroupTreeNode(group);
+				parentIds.put(node, rsGroups.getString("parent_id"));
+				groups.put(rsGroups.getString("groups_id"), node);
+			}
+
+			// Ok, we have collected a map of all groups and their parent IDs,
+			// and another map of all group IDs and their group nodes.
+			// Now we need to build the groups tree:
+			for (Iterator<GroupTreeNode> i = parentIds.keySet().iterator(); i
+					.hasNext();) {
+				GroupTreeNode node = i.next();
+				String parentId = parentIds.get(node);
+				GroupTreeNode parent = groups.get(parentId);
+				if (parent == null) {
+					// TODO: missing parent
+				} else {
+					parent.add(node);
+				}
+			}
+			ResultSet rsEntryGroup = SQLUtil.queryAllFromTable(conn,
+					"entry_group");
+			while (rsEntryGroup.next()) {
+				String entryId = rsEntryGroup.getString("entries_id"), groupId = rsEntryGroup
+						.getString("groups_id");
+				GroupTreeNode node = groups.get(groupId);
+				if ((node != null)
+						&& (node.getGroup() instanceof ExplicitGroup)) {
+					ExplicitGroup expGroup = (ExplicitGroup) node.getGroup();
+					expGroup.addEntry(entries.get(entryId));
+				}
+			}
+			rsEntryGroup.getStatement().close();
+			metaData.setGroups(rootNode);
+		}
+		rsGroups.getStatement().close();
+	}
+
+}
diff --git a/src/java/net/sf/jabref/sql/importer/DbImportAction.java b/src/java/net/sf/jabref/sql/importer/DbImportAction.java
index 677af8a..367581a 100644
--- a/src/java/net/sf/jabref/sql/importer/DbImportAction.java
+++ b/src/java/net/sf/jabref/sql/importer/DbImportAction.java
@@ -1,209 +1,209 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-package net.sf.jabref.sql.importer;
-
-import java.awt.event.ActionEvent;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.util.ArrayList;
-import java.util.Vector;
-
-import javax.swing.AbstractAction;
-import javax.swing.JOptionPane;
-
-import net.sf.jabref.AbstractWorker;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MetaData;
-import net.sf.jabref.MnemonicAwareAction;
-import net.sf.jabref.Util;
-import net.sf.jabref.sql.DBConnectDialog;
-import net.sf.jabref.sql.DBExporterAndImporterFactory;
-import net.sf.jabref.sql.DBImportExportDialog;
-import net.sf.jabref.sql.DBStrings;
-import net.sf.jabref.sql.SQLUtil;
-
-/**
- * Created by IntelliJ IDEA. User: alver Date: Mar 27, 2008 Time: 6:09:08 PM To
- * change this template use File | Settings | File Templates.
- * 
- * Jan. 20th Changed to accomodate the new way to connect to DB and also to show
- * the exceptions and to display more than one DB imported (by ifsteinm)
- * 
- */
-public class DbImportAction extends AbstractWorker {
-
-	BibtexDatabase database = null;
-	MetaData metaData = null;
-	String errorMessage = null;
-	boolean connectToDB = false;
-	private JabRefFrame frame;
-	private DBStrings dbs = null;
-	ArrayList<Object[]> databases = null;
-
-	public DbImportAction(JabRefFrame frame) {
-		this.frame = frame;
-	}
-
-	public AbstractAction getAction() {
-		return new DbImpAction();
-	}
-
-	class DbImpAction extends MnemonicAwareAction {
-		public DbImpAction() {
-			super(GUIGlobals.getImage("dbImport"));
-			putValue(NAME, "Import from external SQL database");
-
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			try {
-				Util.runAbstractWorker(DbImportAction.this);
-			} catch (Throwable throwable) {
-				throwable.printStackTrace();
-			}
-		}
-	}
-
-	// run first, in EDT:
-	public void init() {
-
-		dbs = new DBStrings();
-		dbs.initialize();
-		DBConnectDialog dbd = new DBConnectDialog(frame, dbs);
-		dbs = dbd.getDBStrings();
-		// panel.metaData().getDBStrings();
-
-		// get DBStrings from user if necessary
-		if (!dbs.isConfigValid()) {
-
-			// init DB strings if necessary
-			if (!dbs.isInitialized()) {
-				dbs.initialize();
-			}
-
-			// show connection dialog
-			dbd = new DBConnectDialog(frame, dbs);
-			Util.placeDialog(dbd, frame);
-			dbd.setVisible(true);
-
-			connectToDB = dbd.getConnectToDB();
-
-			// store database strings
-			if (connectToDB) {
-				dbs = dbd.getDBStrings();
-				dbd.dispose();
-			}
-
-		} else {
-
-			connectToDB = true;
-
-		}
-
-	}
-
-	// run second, on a different thread:
-	public void run() {
-		performImport();
-	}
-
-	private void performImport() {
-		if (connectToDB) {
-			try {
-				frame.output(Globals.lang("Attempting SQL import..."));
-				DBExporterAndImporterFactory factory = new DBExporterAndImporterFactory();
-				DBImporter importer = factory.getImporter(dbs.getServerType());
-				Connection conn = importer.connectToDB(dbs);
-				ResultSet rs = SQLUtil.queryAllFromTable(conn,
-						"jabref_database");
-				Vector<String> v;
-				Vector<Vector<String>> matrix = new Vector<Vector<String>>();
-
-				while (rs.next()) {
-					v = new Vector<String>();
-					v.add(rs.getString("database_name"));
-					matrix.add(v);
-				}
-
-				if (matrix.size() > 0) {
-					DBImportExportDialog dialogo = new DBImportExportDialog(
-							frame, matrix,
-							DBImportExportDialog.DialogType.IMPORTER);
-
-					if (dialogo.removeAction) {
-						String dbName = dialogo.selectedDB;
-						importer.removeDB(dialogo, dbName, conn, metaData);
-						performImport();
-					} else {
-						if (dialogo.moreThanOne) {
-							databases = importer.performImport(null, dbs,
-									dialogo.listOfDBs);
-							for (Object[] res : databases) {
-								database = (BibtexDatabase) res[0];
-								metaData = (MetaData) res[1];
-								dbs.isConfigValid(true);
-							}
-							frame.output(Globals.lang(
-									"%0 databases will be imported",
-									Integer.toString(databases.size())));
-						} else {
-							frame.output(Globals.lang("Importing cancelled"));
-						}
-					}
-				} else {
-					JOptionPane.showMessageDialog(frame, Globals.lang("There are no available databases to be imported"),
-							Globals.lang("Import from SQL database"),
-							JOptionPane.INFORMATION_MESSAGE);					
-				}
-
-			} catch (Exception ex) {
-				String preamble = "Could not import from SQL database for the following reason:";
-				errorMessage = SQLUtil.getExceptionMessage(ex);
-				dbs.isConfigValid(false);
-				JOptionPane.showMessageDialog(frame, Globals.lang(preamble)
-						+ "\n" + errorMessage,
-						Globals.lang("Import from SQL database"),
-						JOptionPane.ERROR_MESSAGE);
-				frame.output(Globals.lang("Error importing from database"));
-				ex.printStackTrace();
-			}
-		}
-	}
-
-	// run third, on EDT:
-	public void update() {
-		if (databases == null)
-			return;
-		for (Object[] res : databases) {
-			database = (BibtexDatabase) res[0];
-			metaData = (MetaData) res[1];
-			if (database != null) {
-				BasePanel pan = frame.addTab(database, null, metaData,
-						Globals.prefs.get("defaultEncoding"), true);
-				pan.metaData().setDBStrings(dbs);
-				frame.setTabTitle(pan, res[2] + "(Imported)", "Imported DB");
-				pan.markBaseChanged();
-			}
-		}
-		frame.output(Globals.lang("Imported %0 databases successfully",
-				Integer.toString(databases.size())));
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+package net.sf.jabref.sql.importer;
+
+import java.awt.event.ActionEvent;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.Vector;
+
+import javax.swing.AbstractAction;
+import javax.swing.JOptionPane;
+
+import net.sf.jabref.AbstractWorker;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.MnemonicAwareAction;
+import net.sf.jabref.Util;
+import net.sf.jabref.sql.DBConnectDialog;
+import net.sf.jabref.sql.DBExporterAndImporterFactory;
+import net.sf.jabref.sql.DBImportExportDialog;
+import net.sf.jabref.sql.DBStrings;
+import net.sf.jabref.sql.SQLUtil;
+
+/**
+ * Created by IntelliJ IDEA. User: alver Date: Mar 27, 2008 Time: 6:09:08 PM To
+ * change this template use File | Settings | File Templates.
+ * 
+ * Jan. 20th Changed to accomodate the new way to connect to DB and also to show
+ * the exceptions and to display more than one DB imported (by ifsteinm)
+ * 
+ */
+public class DbImportAction extends AbstractWorker {
+
+	BibtexDatabase database = null;
+	MetaData metaData = null;
+	String errorMessage = null;
+	boolean connectToDB = false;
+	private JabRefFrame frame;
+	private DBStrings dbs = null;
+	ArrayList<Object[]> databases = null;
+
+	public DbImportAction(JabRefFrame frame) {
+		this.frame = frame;
+	}
+
+	public AbstractAction getAction() {
+		return new DbImpAction();
+	}
+
+	class DbImpAction extends MnemonicAwareAction {
+		public DbImpAction() {
+			super(GUIGlobals.getImage("dbImport"));
+			putValue(NAME, "Import from external SQL database");
+
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			try {
+				Util.runAbstractWorker(DbImportAction.this);
+			} catch (Throwable throwable) {
+				throwable.printStackTrace();
+			}
+		}
+	}
+
+	// run first, in EDT:
+	public void init() {
+
+		dbs = new DBStrings();
+		dbs.initialize();
+		DBConnectDialog dbd = new DBConnectDialog(frame, dbs);
+		dbs = dbd.getDBStrings();
+		// panel.metaData().getDBStrings();
+
+		// get DBStrings from user if necessary
+		if (!dbs.isConfigValid()) {
+
+			// init DB strings if necessary
+			if (!dbs.isInitialized()) {
+				dbs.initialize();
+			}
+
+			// show connection dialog
+			dbd = new DBConnectDialog(frame, dbs);
+			Util.placeDialog(dbd, frame);
+			dbd.setVisible(true);
+
+			connectToDB = dbd.getConnectToDB();
+
+			// store database strings
+			if (connectToDB) {
+				dbs = dbd.getDBStrings();
+				dbd.dispose();
+			}
+
+		} else {
+
+			connectToDB = true;
+
+		}
+
+	}
+
+	// run second, on a different thread:
+	public void run() {
+		performImport();
+	}
+
+	private void performImport() {
+		if (connectToDB) {
+			try {
+				frame.output(Globals.lang("Attempting SQL import..."));
+				DBExporterAndImporterFactory factory = new DBExporterAndImporterFactory();
+				DBImporter importer = factory.getImporter(dbs.getServerType());
+				Connection conn = importer.connectToDB(dbs);
+				ResultSet rs = SQLUtil.queryAllFromTable(conn,
+						"jabref_database");
+				Vector<String> v;
+				Vector<Vector<String>> matrix = new Vector<Vector<String>>();
+
+				while (rs.next()) {
+					v = new Vector<String>();
+					v.add(rs.getString("database_name"));
+					matrix.add(v);
+				}
+
+				if (matrix.size() > 0) {
+					DBImportExportDialog dialogo = new DBImportExportDialog(
+							frame, matrix,
+							DBImportExportDialog.DialogType.IMPORTER);
+
+					if (dialogo.removeAction) {
+						String dbName = dialogo.selectedDB;
+						importer.removeDB(dialogo, dbName, conn, metaData);
+						performImport();
+					} else {
+						if (dialogo.moreThanOne) {
+							databases = importer.performImport(null, dbs,
+									dialogo.listOfDBs);
+							for (Object[] res : databases) {
+								database = (BibtexDatabase) res[0];
+								metaData = (MetaData) res[1];
+								dbs.isConfigValid(true);
+							}
+							frame.output(Globals.lang(
+									"%0 databases will be imported",
+									Integer.toString(databases.size())));
+						} else {
+							frame.output(Globals.lang("Importing cancelled"));
+						}
+					}
+				} else {
+					JOptionPane.showMessageDialog(frame, Globals.lang("There are no available databases to be imported"),
+							Globals.lang("Import from SQL database"),
+							JOptionPane.INFORMATION_MESSAGE);					
+				}
+
+			} catch (Exception ex) {
+				String preamble = "Could not import from SQL database for the following reason:";
+				errorMessage = SQLUtil.getExceptionMessage(ex);
+				dbs.isConfigValid(false);
+				JOptionPane.showMessageDialog(frame, Globals.lang(preamble)
+						+ "\n" + errorMessage,
+						Globals.lang("Import from SQL database"),
+						JOptionPane.ERROR_MESSAGE);
+				frame.output(Globals.lang("Error importing from database"));
+				ex.printStackTrace();
+			}
+		}
+	}
+
+	// run third, on EDT:
+	public void update() {
+		if (databases == null)
+			return;
+		for (Object[] res : databases) {
+			database = (BibtexDatabase) res[0];
+			metaData = (MetaData) res[1];
+			if (database != null) {
+				BasePanel pan = frame.addTab(database, null, metaData,
+						Globals.prefs.get("defaultEncoding"), true);
+				pan.metaData().setDBStrings(dbs);
+				frame.setTabTitle(pan, res[2] + "(Imported)", "Imported DB");
+				pan.markBaseChanged();
+			}
+		}
+		frame.output(Globals.lang("Imported %0 databases successfully",
+				Integer.toString(databases.size())));
+	}
+
+}
diff --git a/src/java/net/sf/jabref/sql/importer/MySQLImporter.java b/src/java/net/sf/jabref/sql/importer/MySQLImporter.java
index 8e3cd63..af894e4 100644
--- a/src/java/net/sf/jabref/sql/importer/MySQLImporter.java
+++ b/src/java/net/sf/jabref/sql/importer/MySQLImporter.java
@@ -1,71 +1,71 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General public static License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General public static License for more details.
-
-    You should have received a copy of the GNU General public static License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-package net.sf.jabref.sql.importer;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import net.sf.jabref.sql.DBStrings;
-import net.sf.jabref.sql.SQLUtil;
-
-/**
- * 
- * @author ifsteinm.
- * 
- *  Jan 20th	Extends DBImporter to provide features specific for MySQL
- *  			Created after a refactory on SQLUtil
- *          
- */
-public class MySQLImporter extends DBImporter {
-
-	private static MySQLImporter instance = null;
-
-	private MySQLImporter() {
-	}
-
-	/**
-	 * 
-	 * @return The singleton instance of the MySQLImporter
-	 */
-	public static MySQLImporter getInstance() {
-		if (instance == null)
-			instance = new MySQLImporter();
-		return instance;
-	}
-
-	@Override
-	protected ResultSet readColumnNames(Connection conn) throws SQLException {
-		Statement statement = (Statement) SQLUtil.processQueryWithResults(conn,
-				"SHOW columns FROM entries;");
-		ResultSet rs = statement.getResultSet();
-		return rs;
-	}
-	
-	protected Connection connectToDB(DBStrings dbstrings) throws Exception{
-		String url = SQLUtil.createJDBCurl(dbstrings, true);
-		String drv = "com.mysql.jdbc.Driver";
-
-		Class.forName(drv).newInstance();
-		Connection conn = DriverManager.getConnection(url,
-				dbstrings.getUsername(), dbstrings.getPassword());
-		return conn;
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General public static License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General public static License for more details.
+
+    You should have received a copy of the GNU General public static License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+package net.sf.jabref.sql.importer;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import net.sf.jabref.sql.DBStrings;
+import net.sf.jabref.sql.SQLUtil;
+
+/**
+ * 
+ * @author ifsteinm.
+ * 
+ *  Jan 20th	Extends DBImporter to provide features specific for MySQL
+ *  			Created after a refactory on SQLUtil
+ *          
+ */
+public class MySQLImporter extends DBImporter {
+
+	private static MySQLImporter instance = null;
+
+	private MySQLImporter() {
+	}
+
+	/**
+	 * 
+	 * @return The singleton instance of the MySQLImporter
+	 */
+	public static MySQLImporter getInstance() {
+		if (instance == null)
+			instance = new MySQLImporter();
+		return instance;
+	}
+
+	@Override
+	protected ResultSet readColumnNames(Connection conn) throws SQLException {
+		Statement statement = (Statement) SQLUtil.processQueryWithResults(conn,
+				"SHOW columns FROM entries;");
+		ResultSet rs = statement.getResultSet();
+		return rs;
+	}
+	
+	protected Connection connectToDB(DBStrings dbstrings) throws Exception{
+		String url = SQLUtil.createJDBCurl(dbstrings, true);
+		String drv = "com.mysql.jdbc.Driver";
+
+		Class.forName(drv).newInstance();
+		Connection conn = DriverManager.getConnection(url,
+				dbstrings.getUsername(), dbstrings.getPassword());
+		return conn;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/sql/importer/PostgreSQLImporter.java b/src/java/net/sf/jabref/sql/importer/PostgreSQLImporter.java
index 1fde2fb..0f7240f 100644
--- a/src/java/net/sf/jabref/sql/importer/PostgreSQLImporter.java
+++ b/src/java/net/sf/jabref/sql/importer/PostgreSQLImporter.java
@@ -1,71 +1,71 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General public static License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General public static License for more details.
-
-    You should have received a copy of the GNU General public static License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-package net.sf.jabref.sql.importer;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import net.sf.jabref.sql.DBStrings;
-import net.sf.jabref.sql.SQLUtil;
-
-/**
- * 
- * @author ifsteinm.
- * 
- *  Jan 20th	Extends DBExporter to provide features specific for PostgreSQL
- *  			Created after a refactory on SQLUtil. 
- *          
- */
-public class PostgreSQLImporter extends DBImporter {
-
-	private static PostgreSQLImporter instance = null;
-
-	private PostgreSQLImporter() {
-	}
-
-	/**
-	 * 
-	 * @return The singleton instance of the MySQLImporter
-	 */
-	public static PostgreSQLImporter getInstance() {
-		if (instance == null)
-			instance = new PostgreSQLImporter();
-		return instance;
-	}
-
-	@Override
-	protected ResultSet readColumnNames(Connection conn) throws SQLException {
-		Statement statement = (Statement) SQLUtil.processQueryWithResults(conn,
-				"SELECT column_name FROM information_schema.columns WHERE table_name ='entries';");
-		ResultSet rs = statement.getResultSet();
-		return rs;
-	}
-
-	@Override
-	protected Connection connectToDB(DBStrings dbstrings) throws Exception{
-		String url = SQLUtil.createJDBCurl(dbstrings, true);
-		String drv = "org.postgresql.Driver";
-
-		Class.forName(drv).newInstance();
-		Connection conn = DriverManager.getConnection(url,
-				dbstrings.getUsername(), dbstrings.getPassword());
-		return conn;
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General public static License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General public static License for more details.
+
+    You should have received a copy of the GNU General public static License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+package net.sf.jabref.sql.importer;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import net.sf.jabref.sql.DBStrings;
+import net.sf.jabref.sql.SQLUtil;
+
+/**
+ * 
+ * @author ifsteinm.
+ * 
+ *  Jan 20th	Extends DBExporter to provide features specific for PostgreSQL
+ *  			Created after a refactory on SQLUtil. 
+ *          
+ */
+public class PostgreSQLImporter extends DBImporter {
+
+	private static PostgreSQLImporter instance = null;
+
+	private PostgreSQLImporter() {
+	}
+
+	/**
+	 * 
+	 * @return The singleton instance of the MySQLImporter
+	 */
+	public static PostgreSQLImporter getInstance() {
+		if (instance == null)
+			instance = new PostgreSQLImporter();
+		return instance;
+	}
+
+	@Override
+	protected ResultSet readColumnNames(Connection conn) throws SQLException {
+		Statement statement = (Statement) SQLUtil.processQueryWithResults(conn,
+				"SELECT column_name FROM information_schema.columns WHERE table_name ='entries';");
+		ResultSet rs = statement.getResultSet();
+		return rs;
+	}
+
+	@Override
+	protected Connection connectToDB(DBStrings dbstrings) throws Exception{
+		String url = SQLUtil.createJDBCurl(dbstrings, true);
+		String drv = "org.postgresql.Driver";
+
+		Class.forName(drv).newInstance();
+		Connection conn = DriverManager.getConnection(url,
+				dbstrings.getUsername(), dbstrings.getPassword());
+		return conn;
+	}
+
+}
diff --git a/src/java/net/sf/jabref/undo/CountingUndoManager.java b/src/java/net/sf/jabref/undo/CountingUndoManager.java
index 0187e61..24a65b7 100644
--- a/src/java/net/sf/jabref/undo/CountingUndoManager.java
+++ b/src/java/net/sf/jabref/undo/CountingUndoManager.java
@@ -1,61 +1,61 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.undo;
-
-import javax.swing.undo.CannotUndoException;
-import javax.swing.undo.UndoManager;
-import javax.swing.undo.UndoableEdit;
-import javax.swing.event.UndoableEditEvent;
-
-import net.sf.jabref.BasePanel;
-
-public class CountingUndoManager extends UndoManager {
-
-    private int unchangedPoint = 0,
-	current = 0;
-    private BasePanel panel = null;
-
-    public CountingUndoManager(BasePanel basePanel) {
-    	super();
-	    panel = basePanel;
-    }
-
-
-    public synchronized boolean addEdit(UndoableEdit edit) {
-	    current++;
-        return super.addEdit(edit);
-    }
-    
-    public synchronized void undo() throws CannotUndoException {
-	    super.undo();
-	    current--;
-        panel.updateEntryEditorIfShowing();
-    }
-
-    public synchronized void redo() throws CannotUndoException {
-	    super.redo();
-	    current++;
-        panel.updateEntryEditorIfShowing();
-    }
-
-    public synchronized void markUnchanged() {
-    	unchangedPoint = current;
-    }
-
-    public boolean hasChanged() {
-    	return !(current == unchangedPoint);
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.undo;
+
+import javax.swing.undo.CannotUndoException;
+import javax.swing.undo.UndoManager;
+import javax.swing.undo.UndoableEdit;
+import javax.swing.event.UndoableEditEvent;
+
+import net.sf.jabref.BasePanel;
+
+public class CountingUndoManager extends UndoManager {
+
+    private int unchangedPoint = 0,
+	current = 0;
+    private BasePanel panel = null;
+
+    public CountingUndoManager(BasePanel basePanel) {
+    	super();
+	    panel = basePanel;
+    }
+
+
+    public synchronized boolean addEdit(UndoableEdit edit) {
+	    current++;
+        return super.addEdit(edit);
+    }
+    
+    public synchronized void undo() throws CannotUndoException {
+	    super.undo();
+	    current--;
+        panel.updateEntryEditorIfShowing();
+    }
+
+    public synchronized void redo() throws CannotUndoException {
+	    super.redo();
+	    current++;
+        panel.updateEntryEditorIfShowing();
+    }
+
+    public synchronized void markUnchanged() {
+    	unchangedPoint = current;
+    }
+
+    public boolean hasChanged() {
+    	return !(current == unchangedPoint);
+    }
+}
diff --git a/src/java/net/sf/jabref/undo/NamedCompound.java b/src/java/net/sf/jabref/undo/NamedCompound.java
index cc51540..26e12b6 100644
--- a/src/java/net/sf/jabref/undo/NamedCompound.java
+++ b/src/java/net/sf/jabref/undo/NamedCompound.java
@@ -1,56 +1,56 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.undo;
-
-import javax.swing.undo.CompoundEdit;
-import javax.swing.undo.UndoableEdit;
-
-import net.sf.jabref.Globals;
-
-public class NamedCompound extends CompoundEdit {
-
-    String name;
-    boolean hasEdits = false;
-
-    public NamedCompound(String name) {
-	super();
-	this.name = name;
-    }
-
-    public boolean addEdit(UndoableEdit undoableEdit) {
-        hasEdits = true;
-        return super.addEdit(undoableEdit);
-    }
-
-    public boolean hasEdits() {
-        return hasEdits;
-    }
-
-    public String getUndoPresentationName() {
-	return Globals.lang("Undo")+": "+name;
-    }
-
-    public String getRedoPresentationName() {
-	return Globals.lang("Redo")+": "+name;
-    }
-
-    /**
-     * Returns the name of this compound, without the Undo or Redo prefix.
-     */
-    public String getNameOnly() {
-      return name;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.undo;
+
+import javax.swing.undo.CompoundEdit;
+import javax.swing.undo.UndoableEdit;
+
+import net.sf.jabref.Globals;
+
+public class NamedCompound extends CompoundEdit {
+
+    String name;
+    boolean hasEdits = false;
+
+    public NamedCompound(String name) {
+	super();
+	this.name = name;
+    }
+
+    public boolean addEdit(UndoableEdit undoableEdit) {
+        hasEdits = true;
+        return super.addEdit(undoableEdit);
+    }
+
+    public boolean hasEdits() {
+        return hasEdits;
+    }
+
+    public String getUndoPresentationName() {
+	return Globals.lang("Undo")+": "+name;
+    }
+
+    public String getRedoPresentationName() {
+	return Globals.lang("Redo")+": "+name;
+    }
+
+    /**
+     * Returns the name of this compound, without the Undo or Redo prefix.
+     */
+    public String getNameOnly() {
+      return name;
+    }
+}
diff --git a/src/java/net/sf/jabref/undo/UndoableChangeType.java b/src/java/net/sf/jabref/undo/UndoableChangeType.java
index d81f3ea..7bd886a 100644
--- a/src/java/net/sf/jabref/undo/UndoableChangeType.java
+++ b/src/java/net/sf/jabref/undo/UndoableChangeType.java
@@ -1,56 +1,56 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.undo;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-
-/**
- * This class represents the change of type for an entry.
- */
-public class UndoableChangeType extends AbstractUndoableEdit {
-
-    BibtexEntryType oldType, newType;
-    BibtexEntry be;
-
-    public UndoableChangeType(BibtexEntry be, BibtexEntryType oldType,
-			      BibtexEntryType newType) {
-	this.oldType = oldType;
-	this.newType = newType;
-	this.be = be;
-    }
-
-    public String getUndoPresentationName() {
-	return "Undo: change type";
-    }
-
-    public String getRedoPresentationName() {
-	return "Redo: change type";
-    }
-
-    public void undo() {
-	super.undo();
-	be.setType(oldType);
-    }
-
-    public void redo() {
-	super.redo();
-	be.setType(newType);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.undo;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+
+/**
+ * This class represents the change of type for an entry.
+ */
+public class UndoableChangeType extends AbstractUndoableEdit {
+
+    BibtexEntryType oldType, newType;
+    BibtexEntry be;
+
+    public UndoableChangeType(BibtexEntry be, BibtexEntryType oldType,
+			      BibtexEntryType newType) {
+	this.oldType = oldType;
+	this.newType = newType;
+	this.be = be;
+    }
+
+    public String getUndoPresentationName() {
+	return "Undo: change type";
+    }
+
+    public String getRedoPresentationName() {
+	return "Redo: change type";
+    }
+
+    public void undo() {
+	super.undo();
+	be.setType(oldType);
+    }
+
+    public void redo() {
+	super.redo();
+	be.setType(newType);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/undo/UndoableFieldChange.java b/src/java/net/sf/jabref/undo/UndoableFieldChange.java
index 813018d..f5c4e18 100644
--- a/src/java/net/sf/jabref/undo/UndoableFieldChange.java
+++ b/src/java/net/sf/jabref/undo/UndoableFieldChange.java
@@ -1,82 +1,82 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.undo;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Util;
-
-/**
- * This class represents a change in any field value. The relevant
- * information is the BibtexEntry, the field name, the old and the
- * new value. Old/new values can be null.
- */
-public class UndoableFieldChange extends AbstractUndoableEdit {
-
-    private BibtexEntry entry;
-    private String field;
-    private String oldValue, newValue;
-
-    public UndoableFieldChange(BibtexEntry entry, String field,
-			       String oldValue, String newValue) {
-	this.entry = entry;
-	this.field = field;
-	this.oldValue = oldValue;
-	this.newValue = newValue;
-    }
-
-    public String getUndoPresentationName() {
-	return "Undo: change field";
-    }
-
-    public String getRedoPresentationName() {
-	return "Redo: change field";
-    }
-
-    public void undo() {
-	super.undo();
-
-	// Revert the change.
-	try {
-          if (oldValue != null)
-            entry.setField(field, oldValue);
-          else
-            entry.clearField(field);
-
-	} catch (Throwable ex) {
-	    Util.pr(ex.getMessage());
-	}
-    }
-
-    public void redo() {
-	super.redo();
-
-	// Redo the change.
-	try {
-          if (newValue != null)
-            entry.setField(field, newValue);
-          else
-            entry.clearField(field);
-
-	} catch (Throwable ex) {
-	    Util.pr(ex.getMessage());
-	}
-    }
-
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.undo;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Util;
+
+/**
+ * This class represents a change in any field value. The relevant
+ * information is the BibtexEntry, the field name, the old and the
+ * new value. Old/new values can be null.
+ */
+public class UndoableFieldChange extends AbstractUndoableEdit {
+
+    private BibtexEntry entry;
+    private String field;
+    private String oldValue, newValue;
+
+    public UndoableFieldChange(BibtexEntry entry, String field,
+			       String oldValue, String newValue) {
+	this.entry = entry;
+	this.field = field;
+	this.oldValue = oldValue;
+	this.newValue = newValue;
+    }
+
+    public String getUndoPresentationName() {
+	return "Undo: change field";
+    }
+
+    public String getRedoPresentationName() {
+	return "Redo: change field";
+    }
+
+    public void undo() {
+	super.undo();
+
+	// Revert the change.
+	try {
+          if (oldValue != null)
+            entry.setField(field, oldValue);
+          else
+            entry.clearField(field);
+
+	} catch (Throwable ex) {
+	    Util.pr(ex.getMessage());
+	}
+    }
+
+    public void redo() {
+	super.redo();
+
+	// Redo the change.
+	try {
+          if (newValue != null)
+            entry.setField(field, newValue);
+          else
+            entry.clearField(field);
+
+	} catch (Throwable ex) {
+	    Util.pr(ex.getMessage());
+	}
+    }
+
+
+
+}
diff --git a/src/java/net/sf/jabref/undo/UndoableInsertEntry.java b/src/java/net/sf/jabref/undo/UndoableInsertEntry.java
index 49df02e..4fdaa5f 100644
--- a/src/java/net/sf/jabref/undo/UndoableInsertEntry.java
+++ b/src/java/net/sf/jabref/undo/UndoableInsertEntry.java
@@ -1,80 +1,80 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.undo;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Util;
-
-/**
- * This class represents the removal of an entry. The constructor needs
- * references to the database, the entry, and the map of open entry editors.
- * The latter to be able to close the entry's editor if it is opened before
- * the insert is undone.
- */
-public class UndoableInsertEntry extends AbstractUndoableEdit {
-
-    private BibtexDatabase base;
-    private BibtexEntry entry;
-    private BasePanel panel;
-
-    public UndoableInsertEntry(BibtexDatabase base, BibtexEntry entry,
-			       BasePanel panel) {
-        this.base = base;
-        this.entry = entry;
-        this.panel = panel;
-    }
-
-    public String getUndoPresentationName() {
-	    return "Undo: insert entry";
-    }
-
-    public String getRedoPresentationName() {
-	    return "Redo: insert entry";
-    }
-
-    public void undo() {
-        super.undo();
-
-        // Revert the change.
-        try {
-            base.removeEntry(entry.getId());
-            // If the entry has an editor currently open, we must close it.
-            panel.ensureNotShowing(entry);
-        } catch (Throwable ex) {
-              ex.printStackTrace();
-        }
-    }
-
-    public void redo() {
-        super.redo();
-
-        // Redo the change.
-        try {
-              String id = Util.createNeutralId();
-            entry.setId(id);
-            base.insertEntry(entry);
-        } catch (Throwable ex) {
-              ex.printStackTrace();
-        }
-    }
-
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.undo;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Util;
+
+/**
+ * This class represents the removal of an entry. The constructor needs
+ * references to the database, the entry, and the map of open entry editors.
+ * The latter to be able to close the entry's editor if it is opened before
+ * the insert is undone.
+ */
+public class UndoableInsertEntry extends AbstractUndoableEdit {
+
+    private BibtexDatabase base;
+    private BibtexEntry entry;
+    private BasePanel panel;
+
+    public UndoableInsertEntry(BibtexDatabase base, BibtexEntry entry,
+			       BasePanel panel) {
+        this.base = base;
+        this.entry = entry;
+        this.panel = panel;
+    }
+
+    public String getUndoPresentationName() {
+	    return "Undo: insert entry";
+    }
+
+    public String getRedoPresentationName() {
+	    return "Redo: insert entry";
+    }
+
+    public void undo() {
+        super.undo();
+
+        // Revert the change.
+        try {
+            base.removeEntry(entry.getId());
+            // If the entry has an editor currently open, we must close it.
+            panel.ensureNotShowing(entry);
+        } catch (Throwable ex) {
+              ex.printStackTrace();
+        }
+    }
+
+    public void redo() {
+        super.redo();
+
+        // Redo the change.
+        try {
+              String id = Util.createNeutralId();
+            entry.setId(id);
+            base.insertEntry(entry);
+        } catch (Throwable ex) {
+              ex.printStackTrace();
+        }
+    }
+
+
+
+}
diff --git a/src/java/net/sf/jabref/undo/UndoableInsertString.java b/src/java/net/sf/jabref/undo/UndoableInsertString.java
index 6f45d17..81c6942 100644
--- a/src/java/net/sf/jabref/undo/UndoableInsertString.java
+++ b/src/java/net/sf/jabref/undo/UndoableInsertString.java
@@ -1,66 +1,66 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.undo;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.*;
-
-public class UndoableInsertString extends AbstractUndoableEdit {
-    
-    private BibtexDatabase base;
-    private BasePanel panel;
-    private BibtexString string;
-
-    public UndoableInsertString(BasePanel panel, BibtexDatabase base,
-				BibtexString string) {
-	this.base = base;
-	this.panel = panel;
-	this.string = string;
-    }
-
-    public String getUndoPresentationName() {
-	return Globals.lang("Undo")+": "+Globals.lang("insert string ");
-    }
-
-    public String getRedoPresentationName() {
-	return Globals.lang("Redo")+": "+Globals.lang("insert string ");
-    }
-
-    public void undo() {
-	super.undo();
-	
-	// Revert the change.
-	base.removeString(string.getId());
-	panel.updateStringDialog();
-    }
-
-    public void redo() {
-	super.redo();
-
-	// Redo the change.
-	try {
-	    base.addString(string);
-	} catch (KeyCollisionException ex) {
-	    ex.printStackTrace();
-	}
-
-	panel.updateStringDialog();
-    }
-
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.undo;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.*;
+
+public class UndoableInsertString extends AbstractUndoableEdit {
+    
+    private BibtexDatabase base;
+    private BasePanel panel;
+    private BibtexString string;
+
+    public UndoableInsertString(BasePanel panel, BibtexDatabase base,
+				BibtexString string) {
+	this.base = base;
+	this.panel = panel;
+	this.string = string;
+    }
+
+    public String getUndoPresentationName() {
+	return Globals.lang("Undo")+": "+Globals.lang("insert string ");
+    }
+
+    public String getRedoPresentationName() {
+	return Globals.lang("Redo")+": "+Globals.lang("insert string ");
+    }
+
+    public void undo() {
+	super.undo();
+	
+	// Revert the change.
+	base.removeString(string.getId());
+	panel.updateStringDialog();
+    }
+
+    public void redo() {
+	super.redo();
+
+	// Redo the change.
+	try {
+	    base.addString(string);
+	} catch (KeyCollisionException ex) {
+	    ex.printStackTrace();
+	}
+
+	panel.updateStringDialog();
+    }
+
+
+
+}
diff --git a/src/java/net/sf/jabref/undo/UndoableKeyChange.java b/src/java/net/sf/jabref/undo/UndoableKeyChange.java
index 0a23829..5868eb5 100644
--- a/src/java/net/sf/jabref/undo/UndoableKeyChange.java
+++ b/src/java/net/sf/jabref/undo/UndoableKeyChange.java
@@ -1,68 +1,68 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.undo;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.Globals;
-
-/**
- * This class represents a change in any field value. The relevant
- * information is the BibtexEntry, the field name, the old and the
- * new value. Old/new values can be null.
- */
-public class UndoableKeyChange extends AbstractUndoableEdit {
-
-    private String entryId;
-    private BibtexDatabase base;
-    private String oldValue, newValue;
-
-    public UndoableKeyChange(BibtexDatabase base, String entryId,
-			     String oldValue, String newValue) {
-	this.base = base;
-	this.entryId = entryId;
-	this.oldValue = oldValue;
-	this.newValue = newValue;
-    }
-
-    public String getUndoPresentationName() {
-	return Globals.lang("Undo")+": "+Globals.lang("change key");
-    }
-
-    public String getRedoPresentationName() {
-	return Globals.lang("Redo")+": "+Globals.lang("change key");
-    }
-
-    public void undo() {
-	super.undo();
-	
-	// Revert the change.
-	set(oldValue);
-    }
-
-    public void redo() {
-	super.redo();
-
-	// Redo the change.
-	set(newValue);
-    }
-
-    private void set(String to) {
-	base.setCiteKeyForEntry(entryId, to);
-    }
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.undo;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.Globals;
+
+/**
+ * This class represents a change in any field value. The relevant
+ * information is the BibtexEntry, the field name, the old and the
+ * new value. Old/new values can be null.
+ */
+public class UndoableKeyChange extends AbstractUndoableEdit {
+
+    private String entryId;
+    private BibtexDatabase base;
+    private String oldValue, newValue;
+
+    public UndoableKeyChange(BibtexDatabase base, String entryId,
+			     String oldValue, String newValue) {
+	this.base = base;
+	this.entryId = entryId;
+	this.oldValue = oldValue;
+	this.newValue = newValue;
+    }
+
+    public String getUndoPresentationName() {
+	return Globals.lang("Undo")+": "+Globals.lang("change key");
+    }
+
+    public String getRedoPresentationName() {
+	return Globals.lang("Redo")+": "+Globals.lang("change key");
+    }
+
+    public void undo() {
+	super.undo();
+	
+	// Revert the change.
+	set(oldValue);
+    }
+
+    public void redo() {
+	super.redo();
+
+	// Redo the change.
+	set(newValue);
+    }
+
+    private void set(String to) {
+	base.setCiteKeyForEntry(entryId, to);
+    }
+
+}
diff --git a/src/java/net/sf/jabref/undo/UndoablePreambleChange.java b/src/java/net/sf/jabref/undo/UndoablePreambleChange.java
index 22e7242..6fdf7fb 100644
--- a/src/java/net/sf/jabref/undo/UndoablePreambleChange.java
+++ b/src/java/net/sf/jabref/undo/UndoablePreambleChange.java
@@ -1,74 +1,74 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.undo;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.Globals;
-
-/**
- * This class represents a change in any field value. The relevant
- * information is the BibtexEntry, the field name, the old and the
- * new value. Old/new values can be null.
- */
-public class UndoablePreambleChange extends AbstractUndoableEdit {
-
-    private BibtexDatabase base;
-    private String oldValue, newValue;
-    private BasePanel panel;
-
-    public UndoablePreambleChange(BibtexDatabase base, BasePanel panel,
-				  String oldValue, String newValue) {
-	this.base = base;
-	this.oldValue = oldValue;
-	this.newValue = newValue;
-	this.panel = panel;
-    }
-
-    public String getUndoPresentationName() {
-	return Globals.lang("Undo")+": "+Globals.lang("change preamble");
-    }
-
-    public String getRedoPresentationName() {
-	return Globals.lang("Redo")+": "+Globals.lang("change preamble");
-    }
-
-    public void undo() {
-	super.undo();
-	
-	// Revert the change.
-	base.setPreamble(oldValue);
-
-	// If the preamble editor is open, update it.
-	panel.updatePreamble();
-    }
-
-    public void redo() {
-	super.redo();
-
-	// Redo the change.
-	base.setPreamble(newValue);
-
-	// If the preamble editor is open, update it.
-	panel.updatePreamble();
-
-    }
-
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.undo;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.Globals;
+
+/**
+ * This class represents a change in any field value. The relevant
+ * information is the BibtexEntry, the field name, the old and the
+ * new value. Old/new values can be null.
+ */
+public class UndoablePreambleChange extends AbstractUndoableEdit {
+
+    private BibtexDatabase base;
+    private String oldValue, newValue;
+    private BasePanel panel;
+
+    public UndoablePreambleChange(BibtexDatabase base, BasePanel panel,
+				  String oldValue, String newValue) {
+	this.base = base;
+	this.oldValue = oldValue;
+	this.newValue = newValue;
+	this.panel = panel;
+    }
+
+    public String getUndoPresentationName() {
+	return Globals.lang("Undo")+": "+Globals.lang("change preamble");
+    }
+
+    public String getRedoPresentationName() {
+	return Globals.lang("Redo")+": "+Globals.lang("change preamble");
+    }
+
+    public void undo() {
+	super.undo();
+	
+	// Revert the change.
+	base.setPreamble(oldValue);
+
+	// If the preamble editor is open, update it.
+	panel.updatePreamble();
+    }
+
+    public void redo() {
+	super.redo();
+
+	// Redo the change.
+	base.setPreamble(newValue);
+
+	// If the preamble editor is open, update it.
+	panel.updatePreamble();
+
+    }
+
+
+
+}
diff --git a/src/java/net/sf/jabref/undo/UndoableRemoveEntry.java b/src/java/net/sf/jabref/undo/UndoableRemoveEntry.java
index 0ac85b7..89797ce 100644
--- a/src/java/net/sf/jabref/undo/UndoableRemoveEntry.java
+++ b/src/java/net/sf/jabref/undo/UndoableRemoveEntry.java
@@ -1,80 +1,80 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.undo;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Util;
-
-/**
- * This class represents the removal of an entry. The constructor needs
- * references to the database, the entry, and the map of open entry editors.
- * The latter to be able to close the entry's editor if it is opened after
- * an undo, and the removal is then undone.
- */
-public class UndoableRemoveEntry extends AbstractUndoableEdit {
-
-    private BibtexDatabase base;
-    private BibtexEntry entry;
-    private BasePanel panel;
-
-    public UndoableRemoveEntry(BibtexDatabase base, BibtexEntry entry,
-			       BasePanel panel) {
-	this.base = base;
-	this.entry = entry;
-	this.panel = panel;
-    }
-
-    public String getUndoPresentationName() {
-	return "Undo: remove entry";
-    }
-
-    public String getRedoPresentationName() {
-	return "Redo: remove entry";
-    }
-
-    public void undo() {
-	super.undo();
-
-	// Revert the change.
-	try {
-	    String id = Util.createNeutralId();
-	    entry.setId(id);
-	    base.insertEntry(entry);
-	} catch (Throwable ex) {
-          ex.printStackTrace();
-	}
-    }
-
-    public void redo() {
-	super.redo();
-
-	// Redo the change.
-	try {
-	    base.removeEntry(entry.getId());
-	    // If the entry has an editor currently open, we must close it.
-	    panel.ensureNotShowing(entry);
-	} catch (Throwable ex) {
-          ex.printStackTrace();
-	}
-    }
-
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.undo;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Util;
+
+/**
+ * This class represents the removal of an entry. The constructor needs
+ * references to the database, the entry, and the map of open entry editors.
+ * The latter to be able to close the entry's editor if it is opened after
+ * an undo, and the removal is then undone.
+ */
+public class UndoableRemoveEntry extends AbstractUndoableEdit {
+
+    private BibtexDatabase base;
+    private BibtexEntry entry;
+    private BasePanel panel;
+
+    public UndoableRemoveEntry(BibtexDatabase base, BibtexEntry entry,
+			       BasePanel panel) {
+	this.base = base;
+	this.entry = entry;
+	this.panel = panel;
+    }
+
+    public String getUndoPresentationName() {
+	return "Undo: remove entry";
+    }
+
+    public String getRedoPresentationName() {
+	return "Redo: remove entry";
+    }
+
+    public void undo() {
+	super.undo();
+
+	// Revert the change.
+	try {
+	    String id = Util.createNeutralId();
+	    entry.setId(id);
+	    base.insertEntry(entry);
+	} catch (Throwable ex) {
+          ex.printStackTrace();
+	}
+    }
+
+    public void redo() {
+	super.redo();
+
+	// Redo the change.
+	try {
+	    base.removeEntry(entry.getId());
+	    // If the entry has an editor currently open, we must close it.
+	    panel.ensureNotShowing(entry);
+	} catch (Throwable ex) {
+          ex.printStackTrace();
+	}
+    }
+
+
+
+}
diff --git a/src/java/net/sf/jabref/undo/UndoableRemoveString.java b/src/java/net/sf/jabref/undo/UndoableRemoveString.java
index 49769a3..76ae89d 100644
--- a/src/java/net/sf/jabref/undo/UndoableRemoveString.java
+++ b/src/java/net/sf/jabref/undo/UndoableRemoveString.java
@@ -1,67 +1,67 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.undo;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.*;
-
-public class UndoableRemoveString extends AbstractUndoableEdit {
-
-    private BibtexDatabase base;
-    private BibtexString string;
-    private BasePanel panel;
-
-    public UndoableRemoveString(BasePanel panel,
-				BibtexDatabase base, BibtexString string) {
-	this.base = base;
-	this.string = string;
-	this.panel = panel;
-    }
-
-    public String getUndoPresentationName() {
-	return Globals.lang("Undo")+": "+Globals.lang("remove string ");
-    }
-
-    public String getRedoPresentationName() {
-	return Globals.lang("Redo")+": "+Globals.lang("remove string ");
-    }
-
-    public void undo() {
-	super.undo();
-	
-	// Revert the change.
-	try {
-	    base.addString(string);
-	} catch (KeyCollisionException ex) {
-	    ex.printStackTrace();
-	}
-
-	panel.updateStringDialog();
-    }
-
-    public void redo() {
-	super.redo();
-
-	// Redo the change.
-	base.removeString(string.getId());
-
-	panel.updateStringDialog();
-    }
-
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.undo;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.*;
+
+public class UndoableRemoveString extends AbstractUndoableEdit {
+
+    private BibtexDatabase base;
+    private BibtexString string;
+    private BasePanel panel;
+
+    public UndoableRemoveString(BasePanel panel,
+				BibtexDatabase base, BibtexString string) {
+	this.base = base;
+	this.string = string;
+	this.panel = panel;
+    }
+
+    public String getUndoPresentationName() {
+	return Globals.lang("Undo")+": "+Globals.lang("remove string ");
+    }
+
+    public String getRedoPresentationName() {
+	return Globals.lang("Redo")+": "+Globals.lang("remove string ");
+    }
+
+    public void undo() {
+	super.undo();
+	
+	// Revert the change.
+	try {
+	    base.addString(string);
+	} catch (KeyCollisionException ex) {
+	    ex.printStackTrace();
+	}
+
+	panel.updateStringDialog();
+    }
+
+    public void redo() {
+	super.redo();
+
+	// Redo the change.
+	base.removeString(string.getId());
+
+	panel.updateStringDialog();
+    }
+
+
+
+}
diff --git a/src/java/net/sf/jabref/undo/UndoableStringChange.java b/src/java/net/sf/jabref/undo/UndoableStringChange.java
index 18bef7e..dcd714a 100644
--- a/src/java/net/sf/jabref/undo/UndoableStringChange.java
+++ b/src/java/net/sf/jabref/undo/UndoableStringChange.java
@@ -1,83 +1,83 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.undo;
-
-import javax.swing.undo.AbstractUndoableEdit;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexString;
-import net.sf.jabref.Globals;
-
-public class UndoableStringChange extends AbstractUndoableEdit {
-
-    private BibtexString string;
-    private String oldValue, newValue;
-    private boolean nameChange;
-    private BasePanel panel;
-    
-
-    public UndoableStringChange(BasePanel panel,
-				BibtexString string, boolean nameChange,
-				String oldValue, String newValue) {
-	this.string = string;
-	this.oldValue = oldValue;
-	this.newValue = newValue;
-	this.nameChange = nameChange;
-	this.panel = panel;
-    }
-
-    public String getUndoPresentationName() {
-	return Globals.lang("Undo")+": "
-	    +Globals.lang(nameChange ? "change string name" : "change string content");
-    }
-
-    public String getRedoPresentationName() {
-	return Globals.lang("Redo")+": "
-	    +Globals.lang(nameChange ? "change string name" : "change string content");
-    }
-
-    public void undo() {
-	super.undo();
-	
-	// Revert the change.
-
-	panel.assureStringDialogNotEditing();
-
-	if (nameChange)
-	    string.setName(oldValue);
-	else
-	    string.setContent(oldValue);
-
-	panel.updateStringDialog();
-    }
-
-    public void redo() {
-	super.redo();
-
-	// Redo the change.
-
-	panel.assureStringDialogNotEditing();
-	if (nameChange)
-	    string.setName(newValue);
-	else
-	    string.setContent(newValue);
-
-	panel.updateStringDialog();
-    }
-
-
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.undo;
+
+import javax.swing.undo.AbstractUndoableEdit;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexString;
+import net.sf.jabref.Globals;
+
+public class UndoableStringChange extends AbstractUndoableEdit {
+
+    private BibtexString string;
+    private String oldValue, newValue;
+    private boolean nameChange;
+    private BasePanel panel;
+    
+
+    public UndoableStringChange(BasePanel panel,
+				BibtexString string, boolean nameChange,
+				String oldValue, String newValue) {
+	this.string = string;
+	this.oldValue = oldValue;
+	this.newValue = newValue;
+	this.nameChange = nameChange;
+	this.panel = panel;
+    }
+
+    public String getUndoPresentationName() {
+	return Globals.lang("Undo")+": "
+	    +Globals.lang(nameChange ? "change string name" : "change string content");
+    }
+
+    public String getRedoPresentationName() {
+	return Globals.lang("Redo")+": "
+	    +Globals.lang(nameChange ? "change string name" : "change string content");
+    }
+
+    public void undo() {
+	super.undo();
+	
+	// Revert the change.
+
+	panel.assureStringDialogNotEditing();
+
+	if (nameChange)
+	    string.setName(oldValue);
+	else
+	    string.setContent(oldValue);
+
+	panel.updateStringDialog();
+    }
+
+    public void redo() {
+	super.redo();
+
+	// Redo the change.
+
+	panel.assureStringDialogNotEditing();
+	if (nameChange)
+	    string.setName(newValue);
+	else
+	    string.setContent(newValue);
+
+	panel.updateStringDialog();
+    }
+
+
+
+}
diff --git a/src/java/net/sf/jabref/util/CaseChangeMenu.java b/src/java/net/sf/jabref/util/CaseChangeMenu.java
index 2bd394c..0ed63c3 100644
--- a/src/java/net/sf/jabref/util/CaseChangeMenu.java
+++ b/src/java/net/sf/jabref/util/CaseChangeMenu.java
@@ -1,77 +1,77 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.util;
-
-/* Mp3dings - manage mp3 meta-information
- * Copyright (C) 2003 Moritz Ringler
- * $Id$
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-import net.sf.jabref.Globals;
-
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.text.JTextComponent;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-
-public class CaseChangeMenu extends JMenu implements ActionListener{
-    static CaseChanger cc = new CaseChanger();
-    JMenuItem changeCaseItems[];
-    private JTextComponent parent;
-
-    public CaseChangeMenu(JTextComponent opener){
-        /* case */
-        super(Globals.lang("Change case"));
-        parent = opener;
-        int m = CaseChanger.getNumModes();
-        changeCaseItems = new JMenuItem[m];
-        for (int i=0;i<m;i++){
-            changeCaseItems[i]=new JMenuItem(Globals.lang(CaseChanger.getModeName(i)));
-            changeCaseItems[i].addActionListener(this);
-            this.add(changeCaseItems[i]);
-        }
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        Object source = (e.getSource());
-        for(int i=0, m=CaseChanger.getNumModes(); i<m; i++){
-            if(source == changeCaseItems[i]){
-                caseChange(i);
-                break;
-            }
-        }
-    }
-
-    private void caseChange(int mode){
-        parent.setText(CaseChanger.changeCase(parent.getText(), mode));
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.util;
+
+/* Mp3dings - manage mp3 meta-information
+ * Copyright (C) 2003 Moritz Ringler
+ * $Id$
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+import net.sf.jabref.Globals;
+
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.text.JTextComponent;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+
+public class CaseChangeMenu extends JMenu implements ActionListener{
+    static CaseChanger cc = new CaseChanger();
+    JMenuItem changeCaseItems[];
+    private JTextComponent parent;
+
+    public CaseChangeMenu(JTextComponent opener){
+        /* case */
+        super(Globals.lang("Change case"));
+        parent = opener;
+        int m = CaseChanger.getNumModes();
+        changeCaseItems = new JMenuItem[m];
+        for (int i=0;i<m;i++){
+            changeCaseItems[i]=new JMenuItem(Globals.lang(CaseChanger.getModeName(i)));
+            changeCaseItems[i].addActionListener(this);
+            this.add(changeCaseItems[i]);
+        }
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        Object source = (e.getSource());
+        for(int i=0, m=CaseChanger.getNumModes(); i<m; i++){
+            if(source == changeCaseItems[i]){
+                caseChange(i);
+                break;
+            }
+        }
+    }
+
+    private void caseChange(int mode){
+        parent.setText(CaseChanger.changeCase(parent.getText(), mode));
+    }
+}
diff --git a/src/java/net/sf/jabref/util/CaseChanger.java b/src/java/net/sf/jabref/util/CaseChanger.java
index 3a1f85c..d350c54 100644
--- a/src/java/net/sf/jabref/util/CaseChanger.java
+++ b/src/java/net/sf/jabref/util/CaseChanger.java
@@ -1,192 +1,192 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.util;
-
-/* Mp3dings - manage mp3 meta-information
- * Copyright (C) 2003 Moritz Ringler
- * $Id$
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-import net.sf.jabref.Util;
-
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import java.util.HashSet;
-
-/**
- * 
- * Class with static methods for changing the case of strings and arrays of
- * strings.
- * 
- * @author Moritz Ringler
- * 
- * @version $Revision$ ($Date$)
- */
-public class CaseChanger {
-
-	/** Lowercase */
-	public final static int LOWER = 0;
-
-	/** Uppercase */
-	public final static int UPPER = 1;
-
-	/** First letter of string uppercase */
-	public final static int UPPER_FIRST = 2;
-
-	/** First letter of each word uppercase */
-	public final static int UPPER_EACH_FIRST = 3;
-
-	/**
-	 * I don't think it is thread-safe to use the same matcher at the same time for all calls.
-	 */
-	private final static Pattern UF_PATTERN = Pattern.compile("\\b\\w");
-
-
-	// private final static Matcher UF_MATCHER =
-	// // Pattern.compile("(?i)\\b\\w").matcher("");
-	// Pattern.compile("\\b\\w").matcher("");
-
-	/* you can add more modes here */
-	private final static int numModes = 4;
-
-	private final static String[] modeNames = { "lower", "UPPER", "Upper first", "Upper Each First" };
-
-    private final static HashSet<String> notToCapitalize = new HashSet<String>();
-
-    static {
-        notToCapitalize.add("of");
-        notToCapitalize.add("and");
-        notToCapitalize.add("the");
-    }
-
-	/**
-	 * Gets the name of a case changing mode
-	 * 
-	 * @param mode
-	 *            by default one of LOWER, UPPER, UPPER_FIRST or
-	 *            UPPER_EACH_FIRST
-	 */
-	public static String getModeName(int mode) {
-		return modeNames[mode];
-	}
-
-	/** Gets the names of all available case changing modes */
-	public static String[] getModeNames() {
-		return modeNames;
-	}
-
-	/** Gets the number of available case changing modes */
-	public static int getNumModes() {
-		return numModes;
-	}
-
-	/**
-	 * Changes the case of the specified strings. wrapper for
-	 * {@link #changeCase(String input, int mode)}
-	 * 
-	 * @see #changeCase(String input, int mode)
-	 */
-	public static String[] changeCase(String[] input, int mode) {
-		int n = input.length;
-		String[] output = new String[n];
-		for (int i = 0; i < n; i++) {
-			output[i] = changeCase(input[i], mode);
-		}
-		return output;
-	}
-
-	/**
-	 * Changes the case of the specified string
-	 * 
-	 * @param input
-	 *            String to change
-	 * @param mode
-	 *            by default one of LOWER, UPPER, UPPER_FIRST or
-	 *            UPPER_EACH_FIRST
-	 * @return casechanged string
-	 */
-	public static String changeCase(String input, int mode) {
-        return changeCase(input, mode, false);
-    }
-
-    /**
-	 * Changes the case of the specified string
-	 *
-	 * @param input
-	 *            String to change
-	 * @param mode
-	 *            by default one of LOWER, UPPER, UPPER_FIRST or
-	 *            UPPER_EACH_FIRST
-     * @param skipSmallWords
-     *            In UPPER_EACH_FIRST mode, do not capitalize words like of, the, and,
-     *            unless at the start of the string.
-	 * @return casechanged string
-	 */
-	public static String changeCase(String input, int mode, boolean skipSmallWords) {
-
-		switch (mode) {
-		case UPPER:
-			return input.toUpperCase();
-		case LOWER:
-			return input.toLowerCase();
-		case UPPER_FIRST: {
-			String s = input.toLowerCase();
-
-			Matcher matcher = UF_PATTERN.matcher(s);
-
-			if (matcher.find()) {
-				return matcher.replaceFirst(matcher.group(0).toUpperCase());
-			} else {
-				return input;
-			}
-		}
-		case UPPER_EACH_FIRST: {
-			String s = input.toLowerCase();
-			boolean found = false;
-            String[] words = s.split("\\s+");
-            StringBuilder sb = new StringBuilder();
-            for (int i = 0; i < words.length; i++) {
-                String word = words[i];
-                if ((i == 0) || !skipSmallWords || !notToCapitalize.contains(word))
-                    sb.append(Util.nCase(word));
-                else
-                    sb.append(word);
-                if (i < words.length-1)
-                    sb.append(" ");
-
-            }
-            return sb.toString();
-			
-		}
-		default:
-			return input;
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.util;
+
+/* Mp3dings - manage mp3 meta-information
+ * Copyright (C) 2003 Moritz Ringler
+ * $Id$
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+import net.sf.jabref.Util;
+
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+import java.util.HashSet;
+
+/**
+ * 
+ * Class with static methods for changing the case of strings and arrays of
+ * strings.
+ * 
+ * @author Moritz Ringler
+ * 
+ * @version $Revision$ ($Date$)
+ */
+public class CaseChanger {
+
+	/** Lowercase */
+	public final static int LOWER = 0;
+
+	/** Uppercase */
+	public final static int UPPER = 1;
+
+	/** First letter of string uppercase */
+	public final static int UPPER_FIRST = 2;
+
+	/** First letter of each word uppercase */
+	public final static int UPPER_EACH_FIRST = 3;
+
+	/**
+	 * I don't think it is thread-safe to use the same matcher at the same time for all calls.
+	 */
+	private final static Pattern UF_PATTERN = Pattern.compile("\\b\\w");
+
+
+	// private final static Matcher UF_MATCHER =
+	// // Pattern.compile("(?i)\\b\\w").matcher("");
+	// Pattern.compile("\\b\\w").matcher("");
+
+	/* you can add more modes here */
+	private final static int numModes = 4;
+
+	private final static String[] modeNames = { "lower", "UPPER", "Upper first", "Upper Each First" };
+
+    private final static HashSet<String> notToCapitalize = new HashSet<String>();
+
+    static {
+        notToCapitalize.add("of");
+        notToCapitalize.add("and");
+        notToCapitalize.add("the");
+    }
+
+	/**
+	 * Gets the name of a case changing mode
+	 * 
+	 * @param mode
+	 *            by default one of LOWER, UPPER, UPPER_FIRST or
+	 *            UPPER_EACH_FIRST
+	 */
+	public static String getModeName(int mode) {
+		return modeNames[mode];
+	}
+
+	/** Gets the names of all available case changing modes */
+	public static String[] getModeNames() {
+		return modeNames;
+	}
+
+	/** Gets the number of available case changing modes */
+	public static int getNumModes() {
+		return numModes;
+	}
+
+	/**
+	 * Changes the case of the specified strings. wrapper for
+	 * {@link #changeCase(String input, int mode)}
+	 * 
+	 * @see #changeCase(String input, int mode)
+	 */
+	public static String[] changeCase(String[] input, int mode) {
+		int n = input.length;
+		String[] output = new String[n];
+		for (int i = 0; i < n; i++) {
+			output[i] = changeCase(input[i], mode);
+		}
+		return output;
+	}
+
+	/**
+	 * Changes the case of the specified string
+	 * 
+	 * @param input
+	 *            String to change
+	 * @param mode
+	 *            by default one of LOWER, UPPER, UPPER_FIRST or
+	 *            UPPER_EACH_FIRST
+	 * @return casechanged string
+	 */
+	public static String changeCase(String input, int mode) {
+        return changeCase(input, mode, false);
+    }
+
+    /**
+	 * Changes the case of the specified string
+	 *
+	 * @param input
+	 *            String to change
+	 * @param mode
+	 *            by default one of LOWER, UPPER, UPPER_FIRST or
+	 *            UPPER_EACH_FIRST
+     * @param skipSmallWords
+     *            In UPPER_EACH_FIRST mode, do not capitalize words like of, the, and,
+     *            unless at the start of the string.
+	 * @return casechanged string
+	 */
+	public static String changeCase(String input, int mode, boolean skipSmallWords) {
+
+		switch (mode) {
+		case UPPER:
+			return input.toUpperCase();
+		case LOWER:
+			return input.toLowerCase();
+		case UPPER_FIRST: {
+			String s = input.toLowerCase();
+
+			Matcher matcher = UF_PATTERN.matcher(s);
+
+			if (matcher.find()) {
+				return matcher.replaceFirst(matcher.group(0).toUpperCase());
+			} else {
+				return input;
+			}
+		}
+		case UPPER_EACH_FIRST: {
+			String s = input.toLowerCase();
+			boolean found = false;
+            String[] words = s.split("\\s+");
+            StringBuilder sb = new StringBuilder();
+            for (int i = 0; i < words.length; i++) {
+                String word = words[i];
+                if ((i == 0) || !skipSmallWords || !notToCapitalize.contains(word))
+                    sb.append(Util.nCase(word));
+                else
+                    sb.append(word);
+                if (i < words.length-1)
+                    sb.append(" ");
+
+            }
+            return sb.toString();
+			
+		}
+		default:
+			return input;
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/util/EncryptionNotSupportedException.java b/src/java/net/sf/jabref/util/EncryptionNotSupportedException.java
index 5d51080..fb748eb 100644
--- a/src/java/net/sf/jabref/util/EncryptionNotSupportedException.java
+++ b/src/java/net/sf/jabref/util/EncryptionNotSupportedException.java
@@ -1,28 +1,28 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.util;
-
-import java.io.IOException;
-
-public class EncryptionNotSupportedException extends IOException {
-
-	private static final long serialVersionUID = 3280233692527372333L;
-
-	public EncryptionNotSupportedException(String string) {
-		super(string);
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.util;
+
+import java.io.IOException;
+
+public class EncryptionNotSupportedException extends IOException {
+
+	private static final long serialVersionUID = 3280233692527372333L;
+
+	public EncryptionNotSupportedException(String string) {
+		super(string);
+	}
+
+}
diff --git a/src/java/net/sf/jabref/util/ErrorConsole.java b/src/java/net/sf/jabref/util/ErrorConsole.java
index 2e60b66..e357a32 100644
--- a/src/java/net/sf/jabref/util/ErrorConsole.java
+++ b/src/java/net/sf/jabref/util/ErrorConsole.java
@@ -1,188 +1,188 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.util;
-
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.logging.Handler;
-import java.util.logging.LogRecord;
-import java.util.logging.SimpleFormatter;
-
-import javax.swing.*;
-
-import net.sf.jabref.Globals;
-
-/**
- * This class redirects the System.err stream so it goes both the way it normally
- * goes, and into a ByteArrayOutputStream. We can use this stream to display any
- * error messages and stack traces to the user. Such an error console can be
- * useful in getting complete bug reports, especially from Windows users,
- * without asking users to run JabRef in a command window to catch the error info.
- *
- * It also offers a separate tab for the log output.
- *
- * User: alver
- * Date: Mar 1, 2006
- * Time: 11:13:03 PM
- */
-public class ErrorConsole  extends Handler {
-
-    ByteArrayOutputStream errByteStream = new ByteArrayOutputStream();
-    ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
-    
-    ArrayList<String> logOutput = new ArrayList<String>();
-    String logOutputCache = "";
-    boolean logOutputCacheRefreshNeeded = true;
-    SimpleFormatter fmt = new SimpleFormatter();
-    private static final int MAXLOGLINES = 500;
-    
-    private static ErrorConsole instance = null;
-
-
-    public static ErrorConsole getInstance() {
-        if (instance == null)
-            instance = new ErrorConsole();
-
-        return instance;
-    }
-
-    private ErrorConsole() {
-        PrintStream myErr = new PrintStream(errByteStream);
-        PrintStream tee = new TeeStream(System.err, myErr);
-        System.setErr(tee);
-        myErr = new PrintStream(outByteStream);
-        tee = new TeeStream(System.out, myErr);
-        System.setOut(tee);
-    }
-
-    private String getErrorMessages() {
-        return errByteStream.toString();
-    }
-
-    private String getOutput() {
-        return outByteStream.toString();
-    }
-    
-    private String getLog() {
-    	if (logOutputCacheRefreshNeeded) {
-    		StringBuilder sb = new StringBuilder();
-    		for(String line: logOutput) {
-    			sb.append(line);
-    		}
-    		logOutputCache = sb.toString();
-    	}
-    	return logOutputCache;
-    }
-    
-    /**
-     * 
-     * @param tabbed the tabbed pane to add the tab to
-     * @param output the text to display in the tab
-     * @param ifEmpty Text to output if textbox is emtpy. may be null
-     */
-    private void addTextArea(JTabbedPane tabbed, String title, String output, String ifEmpty) {
-        JTextArea ta = new JTextArea(output);
-        ta.setEditable(false);
-        if ((ifEmpty!=null) && (ta.getText().length() == 0)) {
-            ta.setText(ifEmpty);
-        }
-        JScrollPane sp = new JScrollPane(ta);
-        tabbed.addTab(title, sp);
-    }
-    
-    public void displayErrorConsole(JFrame parent) {
-        JTabbedPane tabbed = new JTabbedPane();
-        
-        addTextArea(tabbed, Globals.lang("Output"), getOutput(), null);
-        addTextArea(tabbed, Globals.lang("Exceptions"), getErrorMessages(),
-        		Globals.lang("No exceptions have ocurred."));
-        addTextArea(tabbed, Globals.lang("Log"), getLog(), null);
-
-        tabbed.setPreferredSize(new Dimension(500,500));
-
-        JOptionPane.showMessageDialog(parent,  tabbed,
-                Globals.lang("Program output"), JOptionPane.ERROR_MESSAGE);
-    }
-
-    class ErrorConsoleAction extends AbstractAction {
-        JFrame frame;
-        public ErrorConsoleAction(JFrame frame) {
-            super(Globals.menuTitle("Show error console"));
-            putValue(SHORT_DESCRIPTION, Globals.lang("Display all error messages"));
-            this.frame = frame;
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            displayErrorConsole(frame);
-        }
-    }
-
-    public AbstractAction getAction(JFrame parent) {
-        return new ErrorConsoleAction(parent);
-    }
-
-    // All writes to this print stream are copied to two print streams
-    public class TeeStream extends PrintStream {
-        PrintStream out;
-        public TeeStream(PrintStream out1, PrintStream out2) {
-            super(out1);
-            this.out = out2;
-        }
-        public void write(byte buf[], int off, int len) {
-            try {
-                super.write(buf, off, len);
-                out.write(buf, off, len);
-            } catch (Exception e) {
-            }
-        }
-        public void flush() {
-            super.flush();
-            out.flush();
-        }
-    }
-    
-    /* * * methods for Logging (required by Handler) * * */
-
-	@Override
-    public void close() throws SecurityException {
-    }
-
-	@Override
-    public void flush() {
-    }
-
-	@Override
-    public void publish(LogRecord record) {
-		String msg = fmt.format(record);
-		logOutput.add(msg);
-		if (logOutput.size() < MAXLOGLINES) {
-			// if we did not yet reach MAXLOGLINES, we just append the string to the cache
-			logOutputCache = logOutputCache + msg;
-		} else {
-			// if we reached MAXLOGLINES, we switch to the "real" caching method and remove old lines 
-			logOutputCacheRefreshNeeded = true;
-			while (logOutput.size() > MAXLOGLINES) {
-				// if log is too large, remove first line
-				// we need a while loop as the formatter may output more than one line
-				logOutput.remove(0);
-			}
-		}
-		logOutputCacheRefreshNeeded = true;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.util;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.logging.Handler;
+import java.util.logging.LogRecord;
+import java.util.logging.SimpleFormatter;
+
+import javax.swing.*;
+
+import net.sf.jabref.Globals;
+
+/**
+ * This class redirects the System.err stream so it goes both the way it normally
+ * goes, and into a ByteArrayOutputStream. We can use this stream to display any
+ * error messages and stack traces to the user. Such an error console can be
+ * useful in getting complete bug reports, especially from Windows users,
+ * without asking users to run JabRef in a command window to catch the error info.
+ *
+ * It also offers a separate tab for the log output.
+ *
+ * User: alver
+ * Date: Mar 1, 2006
+ * Time: 11:13:03 PM
+ */
+public class ErrorConsole  extends Handler {
+
+    ByteArrayOutputStream errByteStream = new ByteArrayOutputStream();
+    ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
+    
+    ArrayList<String> logOutput = new ArrayList<String>();
+    String logOutputCache = "";
+    boolean logOutputCacheRefreshNeeded = true;
+    SimpleFormatter fmt = new SimpleFormatter();
+    private static final int MAXLOGLINES = 500;
+    
+    private static ErrorConsole instance = null;
+
+
+    public static ErrorConsole getInstance() {
+        if (instance == null)
+            instance = new ErrorConsole();
+
+        return instance;
+    }
+
+    private ErrorConsole() {
+        PrintStream myErr = new PrintStream(errByteStream);
+        PrintStream tee = new TeeStream(System.err, myErr);
+        System.setErr(tee);
+        myErr = new PrintStream(outByteStream);
+        tee = new TeeStream(System.out, myErr);
+        System.setOut(tee);
+    }
+
+    private String getErrorMessages() {
+        return errByteStream.toString();
+    }
+
+    private String getOutput() {
+        return outByteStream.toString();
+    }
+    
+    private String getLog() {
+    	if (logOutputCacheRefreshNeeded) {
+    		StringBuilder sb = new StringBuilder();
+    		for(String line: logOutput) {
+    			sb.append(line);
+    		}
+    		logOutputCache = sb.toString();
+    	}
+    	return logOutputCache;
+    }
+    
+    /**
+     * 
+     * @param tabbed the tabbed pane to add the tab to
+     * @param output the text to display in the tab
+     * @param ifEmpty Text to output if textbox is emtpy. may be null
+     */
+    private void addTextArea(JTabbedPane tabbed, String title, String output, String ifEmpty) {
+        JTextArea ta = new JTextArea(output);
+        ta.setEditable(false);
+        if ((ifEmpty!=null) && (ta.getText().length() == 0)) {
+            ta.setText(ifEmpty);
+        }
+        JScrollPane sp = new JScrollPane(ta);
+        tabbed.addTab(title, sp);
+    }
+    
+    public void displayErrorConsole(JFrame parent) {
+        JTabbedPane tabbed = new JTabbedPane();
+        
+        addTextArea(tabbed, Globals.lang("Output"), getOutput(), null);
+        addTextArea(tabbed, Globals.lang("Exceptions"), getErrorMessages(),
+        		Globals.lang("No exceptions have ocurred."));
+        addTextArea(tabbed, Globals.lang("Log"), getLog(), null);
+
+        tabbed.setPreferredSize(new Dimension(500,500));
+
+        JOptionPane.showMessageDialog(parent,  tabbed,
+                Globals.lang("Program output"), JOptionPane.ERROR_MESSAGE);
+    }
+
+    class ErrorConsoleAction extends AbstractAction {
+        JFrame frame;
+        public ErrorConsoleAction(JFrame frame) {
+            super(Globals.menuTitle("Show error console"));
+            putValue(SHORT_DESCRIPTION, Globals.lang("Display all error messages"));
+            this.frame = frame;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            displayErrorConsole(frame);
+        }
+    }
+
+    public AbstractAction getAction(JFrame parent) {
+        return new ErrorConsoleAction(parent);
+    }
+
+    // All writes to this print stream are copied to two print streams
+    public class TeeStream extends PrintStream {
+        PrintStream out;
+        public TeeStream(PrintStream out1, PrintStream out2) {
+            super(out1);
+            this.out = out2;
+        }
+        public void write(byte buf[], int off, int len) {
+            try {
+                super.write(buf, off, len);
+                out.write(buf, off, len);
+            } catch (Exception e) {
+            }
+        }
+        public void flush() {
+            super.flush();
+            out.flush();
+        }
+    }
+    
+    /* * * methods for Logging (required by Handler) * * */
+
+	@Override
+    public void close() throws SecurityException {
+    }
+
+	@Override
+    public void flush() {
+    }
+
+	@Override
+    public void publish(LogRecord record) {
+		String msg = fmt.format(record);
+		logOutput.add(msg);
+		if (logOutput.size() < MAXLOGLINES) {
+			// if we did not yet reach MAXLOGLINES, we just append the string to the cache
+			logOutputCache = logOutputCache + msg;
+		} else {
+			// if we reached MAXLOGLINES, we switch to the "real" caching method and remove old lines 
+			logOutputCacheRefreshNeeded = true;
+			while (logOutput.size() > MAXLOGLINES) {
+				// if log is too large, remove first line
+				// we need a while loop as the formatter may output more than one line
+				logOutput.remove(0);
+			}
+		}
+		logOutputCacheRefreshNeeded = true;
+    }
+}
diff --git a/src/java/net/sf/jabref/util/FileNameCleaner.java b/src/java/net/sf/jabref/util/FileNameCleaner.java
index 7661a9c..82593e2 100644
--- a/src/java/net/sf/jabref/util/FileNameCleaner.java
+++ b/src/java/net/sf/jabref/util/FileNameCleaner.java
@@ -1,45 +1,45 @@
-/*  Copyright (C) 2012 Sarel Botha
-    This class is based on http://stackoverflow.com/a/5626340/873282
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package net.sf.jabref.util;
-
-import java.util.Arrays;
-
-public class FileNameCleaner {
-final static int[] illegalChars = {34, 60, 62, 124, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 58, 42, 63, 92, 47};
-static {
-    Arrays.sort(illegalChars);
-}
-
-/**
- * Replaces illegal characters in given fileName by '_'
- * 
- * @param badFileName the fileName to clean
- * @return a clean filename
- */
-public static String cleanFileName(String badFileName) {
-    StringBuilder cleanName = new StringBuilder();
-    for (int i = 0; i < badFileName.length(); i++) {
-        int c = (int)badFileName.charAt(i);
-        if (Arrays.binarySearch(illegalChars, c) < 0) {
-            cleanName.append((char)c);
-        } else {
-        	cleanName.append('_');
-        }
-    }
-    return cleanName.toString();
-}
+/*  Copyright (C) 2012 Sarel Botha
+    This class is based on http://stackoverflow.com/a/5626340/873282
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.jabref.util;
+
+import java.util.Arrays;
+
+public class FileNameCleaner {
+final static int[] illegalChars = {34, 60, 62, 124, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 58, 42, 63, 92, 47};
+static {
+    Arrays.sort(illegalChars);
+}
+
+/**
+ * Replaces illegal characters in given fileName by '_'
+ * 
+ * @param badFileName the fileName to clean
+ * @return a clean filename
+ */
+public static String cleanFileName(String badFileName) {
+    StringBuilder cleanName = new StringBuilder();
+    for (int i = 0; i < badFileName.length(); i++) {
+        int c = (int)badFileName.charAt(i);
+        if (Arrays.binarySearch(illegalChars, c) < 0) {
+            cleanName.append((char)c);
+        } else {
+        	cleanName.append('_');
+        }
+    }
+    return cleanName.toString();
+}
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/util/ManageKeywordsAction.java b/src/java/net/sf/jabref/util/ManageKeywordsAction.java
index f5c6bb8..2fb4952 100644
--- a/src/java/net/sf/jabref/util/ManageKeywordsAction.java
+++ b/src/java/net/sf/jabref/util/ManageKeywordsAction.java
@@ -1,402 +1,402 @@
-/*  Copyright (C) 2003-2012 JabRef contributors.
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package net.sf.jabref.util;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.TreeSet;
-
-import javax.swing.AbstractAction;
-import javax.swing.ActionMap;
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.DefaultListModel;
-import javax.swing.InputMap;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JList;
-import javax.swing.JRadioButton;
-import javax.swing.JScrollPane;
-import javax.swing.JTextField;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRef;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.MnemonicAwareAction;
-import net.sf.jabref.Util;
-import net.sf.jabref.autocompleter.AbstractAutoCompleter;
-import net.sf.jabref.gui.AutoCompleteListener;
-import net.sf.jabref.specialfields.Priority;
-import net.sf.jabref.specialfields.Quality;
-import net.sf.jabref.specialfields.Rank;
-import net.sf.jabref.specialfields.Relevance;
-import net.sf.jabref.specialfields.SpecialFieldsUtils;
-import net.sf.jabref.undo.NamedCompound;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import com.sun.star.bridge.oleautomation.Date;
-
-/**
- * An Action for launching mass field.
- *
- * Functionality:
- * * Defaults to selected entries, or all entries if none are selected.
- * * Input field name
- * * Either set field, or clear field.
- */
-public class ManageKeywordsAction extends MnemonicAwareAction {
-    private JabRefFrame frame;
-    
-    private JDialog diag = null;
-
-    // keyword to add
-    private JTextField keyword;
-
-    private DefaultListModel keywordListModel;
-    private JList keywordList;
-    private JScrollPane kPane;
-    
-	private JRadioButton intersectKeywords, mergeKeywords;
-
-    private JButton ok, cancel, add, remove;
-	private boolean cancelled;
-
-	private TreeSet<String> sortedKeywordsOfAllEntriesBeforeUpdateByUser = new TreeSet<String>();
-	
-	public ManageKeywordsAction(JabRefFrame frame) {
-        putValue(NAME, "Manage keywords");
-        this.frame = frame;
-    }
-
-    private void createDialog() {
-        keyword = new JTextField();
-
-        keywordListModel = new DefaultListModel();
-        keywordList = new JList(keywordListModel);
-        keywordList.setVisibleRowCount(8);
-        kPane = new JScrollPane(keywordList);
-
-        diag = new JDialog(frame, Globals.lang("Manage keywords"), true);
-
-        ok = new JButton(Globals.lang("Ok"));
-        cancel = new JButton(Globals.lang("Cancel"));
-        add = new JButton(Globals.lang("Add"));
-        remove = new JButton(Globals.lang("Remove"));
-        
-        keywordList.setVisibleRowCount(10);
-        
-        intersectKeywords = new JRadioButton("Display keywords appearing in ALL entries");
-        mergeKeywords = new JRadioButton("Display keywords appearing in ANY entry");
-		ButtonGroup group = new ButtonGroup();
-		group.add(intersectKeywords);
-		group.add(mergeKeywords);
-		ActionListener stateChanged = new ActionListener() {
-			public void actionPerformed(ActionEvent arg0) {
-		        fillKeyWordList();
-			}
-		};
-		intersectKeywords.addActionListener(stateChanged);
-		mergeKeywords.addActionListener(stateChanged);
-		intersectKeywords.setSelected(true);
-
-        DefaultFormBuilder builder = new DefaultFormBuilder(
-        		new FormLayout("fill:200dlu, 4dlu, left:pref, 4dlu, left:pref", ""));
-        builder.appendSeparator(Globals.lang("Keywords of selected entries"));
-        builder.append(intersectKeywords, 5);
-        builder.nextLine();
-        builder.append(mergeKeywords, 5);
-        builder.nextLine();
-        builder.append(kPane, 3);
-        builder.add(remove);
-        builder.nextLine();
-        builder.append(keyword, 3);
-        builder.append(add);
-        builder.nextLine();
-        
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-
-        ok.addActionListener(new ActionListener() {
-           public void actionPerformed(ActionEvent e) {
-                cancelled = false;
-                diag.dispose();
-            }
-        });
-
-        AbstractAction cancelAction = new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    cancelled = true;
-                    diag.dispose();
-                }
-            };
-        cancel.addActionListener(cancelAction);
-        
-        final ActionListener addActionListener = new ActionListener() {
-			public void actionPerformed(ActionEvent arg0) {
-				String text = keyword.getText().trim();
-				if (text.equals("")) {
-					// no text to add, do nothing
-					return;
-				}
-				if (keywordListModel.isEmpty()) {
-					keywordListModel.addElement(text);
-				} else {
-					int idx = 0;
-                    String element = (String)keywordListModel.getElementAt(idx);
-					while ((idx < keywordListModel.size()) &&
-                            (element.compareTo(text) < 0)) {
-						idx++;
-					}
-					if (idx == keywordListModel.size()) {
-						// list is empty or word is greater than last word in list
-						keywordListModel.addElement(text);
-					} else if (element.compareTo(text) == 0) {
-						// nothing to do, word already in table
-					} else {
-						keywordListModel.add(idx, text);
-					}
-				}
-				keyword.setText(null);
-				keyword.requestFocusInWindow();
-			}
-		};
-        add.addActionListener(addActionListener);
-
-        final ActionListener removeActionListenter = new ActionListener() {
-
-            public void actionPerformed(ActionEvent arg0) {
-				// keywordList.getSelectedIndices(); does not work, therefore we operate on the values
-                Object[] values = keywordList.getSelectedValues();
-				List<String> selectedValuesList = new ArrayList<String>();
-                for (int i=0; i<values.length; i++)
-                    selectedValuesList.add((String)values[i]);
-				for (String val: selectedValuesList) {
-					keywordListModel.removeElement(val);
-				}
-			}
-		};
-        remove.addActionListener(removeActionListenter);
-        keywordList.addKeyListener(new KeyListener() {
-			
-			public void keyTyped(KeyEvent arg0) {}
-			
-			public void keyReleased(KeyEvent arg0) {}
-			
-			public void keyPressed(KeyEvent arg0) {
-				if (arg0.getKeyCode() == KeyEvent.VK_DELETE) {
-					removeActionListenter.actionPerformed(null);
-				}
-			}
-		});
-        
-        AbstractAutoCompleter autoComp = JabRef.jrf.basePanel().getAutoCompleter("keywords");
-        AutoCompleteListener acl = new AutoCompleteListener(autoComp);
-        keyword.addKeyListener(acl);
-        keyword.addFocusListener(acl);
-        keyword.addKeyListener(new KeyListener() {
-			
-			public void keyTyped(KeyEvent e) {}
-			
-			public void keyReleased(KeyEvent e) {}
-			
-			public void keyPressed(KeyEvent e) {
-				if (e.getKeyCode() == KeyEvent.VK_ENTER) {
-					addActionListener.actionPerformed(null);
-				}
-			}
-		});
-        
-        // Key bindings:
-        ActionMap am = builder.getPanel().getActionMap();
-        InputMap im = builder.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", cancelAction);
-
-        diag.getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
-        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-        //diag.pack();
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        BasePanel bp = frame.basePanel();
-        if (bp == null)
-            return;
-        if (bp.getSelectedEntries().length == 0) {
-        	// no entries selected, silently ignore action
-        	return;
-        }
-
-        // Lazy creation of the dialog:
-        if (diag == null) {
-            createDialog();
-        }
-
-        cancelled = true;
-
-        fillKeyWordList();
-
-        diag.pack();
-        Util.placeDialog(diag, frame);
-        diag.setVisible(true);
-        if (cancelled)
-            return;
-        
-        HashSet<String> keywordsToAdd = new HashSet<String>();
-        HashSet<String> userSelectedKeywords = new HashSet<String>();
-        // build keywordsToAdd and userSelectedKeywords in parallel
-        for (Enumeration keywords = keywordListModel.elements(); keywords.hasMoreElements(); ) {
-        	String keyword = (String)keywords.nextElement();
-        	userSelectedKeywords.add(keyword);
-        	if (!sortedKeywordsOfAllEntriesBeforeUpdateByUser.contains(keyword)) {
-        		keywordsToAdd.add(keyword);
-        	}
-        }
-        
-        HashSet<String> keywordsToRemove = new HashSet<String>();
-        for (String keyword: sortedKeywordsOfAllEntriesBeforeUpdateByUser) {
-        	if (!userSelectedKeywords.contains(keyword)) {
-        		keywordsToRemove.add(keyword);
-        	}
-        }
-        
-        if (keywordsToAdd.isEmpty() && keywordsToRemove.isEmpty()) {
-        	// nothing to be done if nothing is new and nothing is obsolete
-        	return;
-        }
-        
-    	if (SpecialFieldsUtils.keywordSyncEnabled()) {
-	        if (!keywordsToAdd.isEmpty()) {
-	        	// we need to check whether a special field is added
-	        	// for each field:
-	        	//   check if something is added
-	        	//   if yes, add all keywords of that special fields to the keywords to be removed
-	        	
-	        	HashSet<String> clone;
-	        	
-	        	// Priority
-	        	clone = (HashSet<String>) keywordsToAdd.clone();
-	        	clone.retainAll(Priority.getInstance().getKeyWords());
-	        	if (!clone.isEmpty()) {
-	        		keywordsToRemove.addAll(Priority.getInstance().getKeyWords());
-	        	}
-	        	
-	        	// Quality
-	        	clone = (HashSet<String>) keywordsToAdd.clone();
-	        	clone.retainAll(Quality.getInstance().getKeyWords());
-	        	if (!clone.isEmpty()) {
-	        		keywordsToRemove.addAll(Quality.getInstance().getKeyWords());
-	        	}
-	        	
-	        	// Rank
-	        	clone = (HashSet<String>) keywordsToAdd.clone();
-	        	clone.retainAll(Rank.getInstance().getKeyWords());
-	        	if (!clone.isEmpty()) {
-	        		keywordsToRemove.addAll(Rank.getInstance().getKeyWords());
-	        	}
-	        	
-	        	// Relevance
-	        	clone = (HashSet<String>) keywordsToAdd.clone();
-	        	clone.retainAll(Relevance.getInstance().getKeyWords());
-	        	if (!clone.isEmpty()) {
-	        		keywordsToRemove.addAll(Relevance.getInstance().getKeyWords());
-	        	}
-	        }
-        }
-
-        BibtexEntry[] entries = bp.getSelectedEntries();
-        NamedCompound ce = new NamedCompound(Globals.lang("Update keywords"));
-        for (BibtexEntry entry: entries) {
-            ArrayList<String> separatedKeywords = Util.getSeparatedKeywords(entry);
-            
-            // we "intercept" with a treeset
-            // pro: no duplicates
-            // possible con: alphabetical sorting of the keywords
-            TreeSet<String> keywords = new TreeSet<String>();
-            keywords.addAll(separatedKeywords);
-            
-            // update keywords
-            keywords.removeAll(keywordsToRemove);
-            keywords.addAll(keywordsToAdd);
-            
-            // put keywords back
-            separatedKeywords.clear();
-            separatedKeywords.addAll(keywords);
-            Util.putKeywords(entry, separatedKeywords, ce);
-            
-        	if (SpecialFieldsUtils.keywordSyncEnabled()) {
-        		SpecialFieldsUtils.syncSpecialFieldsFromKeywords(entry, ce);
-        	}
-        }
-        ce.end();
-        bp.undoManager.addEdit(ce);
-        bp.markBaseChanged();
-    }
-
-	private void fillKeyWordList() {
-        BasePanel bp = frame.basePanel();
-        BibtexEntry[] entries = bp.getSelectedEntries();
-
-        // fill dialog with values
-        keywordListModel.clear();
-        sortedKeywordsOfAllEntriesBeforeUpdateByUser.clear();
-        
-        if (mergeKeywords.isSelected()) {
-            for (BibtexEntry entry : entries) {
-            	ArrayList<String> separatedKeywords = Util.getSeparatedKeywords(entry);
-            	sortedKeywordsOfAllEntriesBeforeUpdateByUser.addAll(separatedKeywords);
-            }
-        } else {
-        	assert(intersectKeywords.isSelected());
-        	
-        	// all keywords from first entry have to be added
-        	BibtexEntry firstEntry = entries[0];
-        	ArrayList<String> separatedKeywords = Util.getSeparatedKeywords(firstEntry);
-        	sortedKeywordsOfAllEntriesBeforeUpdateByUser.addAll(separatedKeywords);
-        	
-        	// for the remaining entries, intersection has to be used
-        	// this approach ensures that one empty keyword list leads to an empty set of common keywords
-        	for (int i = 1; i<entries.length; i++) {
-        		BibtexEntry entry = entries[i];
-        		separatedKeywords = Util.getSeparatedKeywords(entry);
-        		sortedKeywordsOfAllEntriesBeforeUpdateByUser.retainAll(separatedKeywords);
-        	}
-        }
-        for (String s : sortedKeywordsOfAllEntriesBeforeUpdateByUser) {
-        	keywordListModel.addElement(s);
-        }
-    }
-
-}
+/*  Copyright (C) 2003-2012 JabRef contributors.
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package net.sf.jabref.util;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.List;
+import java.util.TreeSet;
+
+import javax.swing.AbstractAction;
+import javax.swing.ActionMap;
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.DefaultListModel;
+import javax.swing.InputMap;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JList;
+import javax.swing.JRadioButton;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.MnemonicAwareAction;
+import net.sf.jabref.Util;
+import net.sf.jabref.autocompleter.AbstractAutoCompleter;
+import net.sf.jabref.gui.AutoCompleteListener;
+import net.sf.jabref.specialfields.Priority;
+import net.sf.jabref.specialfields.Quality;
+import net.sf.jabref.specialfields.Rank;
+import net.sf.jabref.specialfields.Relevance;
+import net.sf.jabref.specialfields.SpecialFieldsUtils;
+import net.sf.jabref.undo.NamedCompound;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import com.sun.star.bridge.oleautomation.Date;
+
+/**
+ * An Action for launching mass field.
+ *
+ * Functionality:
+ * * Defaults to selected entries, or all entries if none are selected.
+ * * Input field name
+ * * Either set field, or clear field.
+ */
+public class ManageKeywordsAction extends MnemonicAwareAction {
+    private JabRefFrame frame;
+    
+    private JDialog diag = null;
+
+    // keyword to add
+    private JTextField keyword;
+
+    private DefaultListModel keywordListModel;
+    private JList keywordList;
+    private JScrollPane kPane;
+    
+	private JRadioButton intersectKeywords, mergeKeywords;
+
+    private JButton ok, cancel, add, remove;
+	private boolean cancelled;
+
+	private TreeSet<String> sortedKeywordsOfAllEntriesBeforeUpdateByUser = new TreeSet<String>();
+	
+	public ManageKeywordsAction(JabRefFrame frame) {
+        putValue(NAME, "Manage keywords");
+        this.frame = frame;
+    }
+
+    private void createDialog() {
+        keyword = new JTextField();
+
+        keywordListModel = new DefaultListModel();
+        keywordList = new JList(keywordListModel);
+        keywordList.setVisibleRowCount(8);
+        kPane = new JScrollPane(keywordList);
+
+        diag = new JDialog(frame, Globals.lang("Manage keywords"), true);
+
+        ok = new JButton(Globals.lang("Ok"));
+        cancel = new JButton(Globals.lang("Cancel"));
+        add = new JButton(Globals.lang("Add"));
+        remove = new JButton(Globals.lang("Remove"));
+        
+        keywordList.setVisibleRowCount(10);
+        
+        intersectKeywords = new JRadioButton("Display keywords appearing in ALL entries");
+        mergeKeywords = new JRadioButton("Display keywords appearing in ANY entry");
+		ButtonGroup group = new ButtonGroup();
+		group.add(intersectKeywords);
+		group.add(mergeKeywords);
+		ActionListener stateChanged = new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+		        fillKeyWordList();
+			}
+		};
+		intersectKeywords.addActionListener(stateChanged);
+		mergeKeywords.addActionListener(stateChanged);
+		intersectKeywords.setSelected(true);
+
+        DefaultFormBuilder builder = new DefaultFormBuilder(
+        		new FormLayout("fill:200dlu, 4dlu, left:pref, 4dlu, left:pref", ""));
+        builder.appendSeparator(Globals.lang("Keywords of selected entries"));
+        builder.append(intersectKeywords, 5);
+        builder.nextLine();
+        builder.append(mergeKeywords, 5);
+        builder.nextLine();
+        builder.append(kPane, 3);
+        builder.add(remove);
+        builder.nextLine();
+        builder.append(keyword, 3);
+        builder.append(add);
+        builder.nextLine();
+        
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+        ok.addActionListener(new ActionListener() {
+           public void actionPerformed(ActionEvent e) {
+                cancelled = false;
+                diag.dispose();
+            }
+        });
+
+        AbstractAction cancelAction = new AbstractAction() {
+                public void actionPerformed(ActionEvent e) {
+                    cancelled = true;
+                    diag.dispose();
+                }
+            };
+        cancel.addActionListener(cancelAction);
+        
+        final ActionListener addActionListener = new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				String text = keyword.getText().trim();
+				if (text.equals("")) {
+					// no text to add, do nothing
+					return;
+				}
+				if (keywordListModel.isEmpty()) {
+					keywordListModel.addElement(text);
+				} else {
+					int idx = 0;
+                    String element = (String)keywordListModel.getElementAt(idx);
+					while ((idx < keywordListModel.size()) &&
+                            (element.compareTo(text) < 0)) {
+						idx++;
+					}
+					if (idx == keywordListModel.size()) {
+						// list is empty or word is greater than last word in list
+						keywordListModel.addElement(text);
+					} else if (element.compareTo(text) == 0) {
+						// nothing to do, word already in table
+					} else {
+						keywordListModel.add(idx, text);
+					}
+				}
+				keyword.setText(null);
+				keyword.requestFocusInWindow();
+			}
+		};
+        add.addActionListener(addActionListener);
+
+        final ActionListener removeActionListenter = new ActionListener() {
+
+            public void actionPerformed(ActionEvent arg0) {
+				// keywordList.getSelectedIndices(); does not work, therefore we operate on the values
+                Object[] values = keywordList.getSelectedValues();
+				List<String> selectedValuesList = new ArrayList<String>();
+                for (int i=0; i<values.length; i++)
+                    selectedValuesList.add((String)values[i]);
+				for (String val: selectedValuesList) {
+					keywordListModel.removeElement(val);
+				}
+			}
+		};
+        remove.addActionListener(removeActionListenter);
+        keywordList.addKeyListener(new KeyListener() {
+			
+			public void keyTyped(KeyEvent arg0) {}
+			
+			public void keyReleased(KeyEvent arg0) {}
+			
+			public void keyPressed(KeyEvent arg0) {
+				if (arg0.getKeyCode() == KeyEvent.VK_DELETE) {
+					removeActionListenter.actionPerformed(null);
+				}
+			}
+		});
+        
+        AbstractAutoCompleter autoComp = JabRef.jrf.basePanel().getAutoCompleter("keywords");
+        AutoCompleteListener acl = new AutoCompleteListener(autoComp);
+        keyword.addKeyListener(acl);
+        keyword.addFocusListener(acl);
+        keyword.addKeyListener(new KeyListener() {
+			
+			public void keyTyped(KeyEvent e) {}
+			
+			public void keyReleased(KeyEvent e) {}
+			
+			public void keyPressed(KeyEvent e) {
+				if (e.getKeyCode() == KeyEvent.VK_ENTER) {
+					addActionListener.actionPerformed(null);
+				}
+			}
+		});
+        
+        // Key bindings:
+        ActionMap am = builder.getPanel().getActionMap();
+        InputMap im = builder.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", cancelAction);
+
+        diag.getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
+        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        //diag.pack();
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        BasePanel bp = frame.basePanel();
+        if (bp == null)
+            return;
+        if (bp.getSelectedEntries().length == 0) {
+        	// no entries selected, silently ignore action
+        	return;
+        }
+
+        // Lazy creation of the dialog:
+        if (diag == null) {
+            createDialog();
+        }
+
+        cancelled = true;
+
+        fillKeyWordList();
+
+        diag.pack();
+        Util.placeDialog(diag, frame);
+        diag.setVisible(true);
+        if (cancelled)
+            return;
+        
+        HashSet<String> keywordsToAdd = new HashSet<String>();
+        HashSet<String> userSelectedKeywords = new HashSet<String>();
+        // build keywordsToAdd and userSelectedKeywords in parallel
+        for (Enumeration keywords = keywordListModel.elements(); keywords.hasMoreElements(); ) {
+        	String keyword = (String)keywords.nextElement();
+        	userSelectedKeywords.add(keyword);
+        	if (!sortedKeywordsOfAllEntriesBeforeUpdateByUser.contains(keyword)) {
+        		keywordsToAdd.add(keyword);
+        	}
+        }
+        
+        HashSet<String> keywordsToRemove = new HashSet<String>();
+        for (String keyword: sortedKeywordsOfAllEntriesBeforeUpdateByUser) {
+        	if (!userSelectedKeywords.contains(keyword)) {
+        		keywordsToRemove.add(keyword);
+        	}
+        }
+        
+        if (keywordsToAdd.isEmpty() && keywordsToRemove.isEmpty()) {
+        	// nothing to be done if nothing is new and nothing is obsolete
+        	return;
+        }
+        
+    	if (SpecialFieldsUtils.keywordSyncEnabled()) {
+	        if (!keywordsToAdd.isEmpty()) {
+	        	// we need to check whether a special field is added
+	        	// for each field:
+	        	//   check if something is added
+	        	//   if yes, add all keywords of that special fields to the keywords to be removed
+	        	
+	        	HashSet<String> clone;
+	        	
+	        	// Priority
+	        	clone = (HashSet<String>) keywordsToAdd.clone();
+	        	clone.retainAll(Priority.getInstance().getKeyWords());
+	        	if (!clone.isEmpty()) {
+	        		keywordsToRemove.addAll(Priority.getInstance().getKeyWords());
+	        	}
+	        	
+	        	// Quality
+	        	clone = (HashSet<String>) keywordsToAdd.clone();
+	        	clone.retainAll(Quality.getInstance().getKeyWords());
+	        	if (!clone.isEmpty()) {
+	        		keywordsToRemove.addAll(Quality.getInstance().getKeyWords());
+	        	}
+	        	
+	        	// Rank
+	        	clone = (HashSet<String>) keywordsToAdd.clone();
+	        	clone.retainAll(Rank.getInstance().getKeyWords());
+	        	if (!clone.isEmpty()) {
+	        		keywordsToRemove.addAll(Rank.getInstance().getKeyWords());
+	        	}
+	        	
+	        	// Relevance
+	        	clone = (HashSet<String>) keywordsToAdd.clone();
+	        	clone.retainAll(Relevance.getInstance().getKeyWords());
+	        	if (!clone.isEmpty()) {
+	        		keywordsToRemove.addAll(Relevance.getInstance().getKeyWords());
+	        	}
+	        }
+        }
+
+        BibtexEntry[] entries = bp.getSelectedEntries();
+        NamedCompound ce = new NamedCompound(Globals.lang("Update keywords"));
+        for (BibtexEntry entry: entries) {
+            ArrayList<String> separatedKeywords = Util.getSeparatedKeywords(entry);
+            
+            // we "intercept" with a treeset
+            // pro: no duplicates
+            // possible con: alphabetical sorting of the keywords
+            TreeSet<String> keywords = new TreeSet<String>();
+            keywords.addAll(separatedKeywords);
+            
+            // update keywords
+            keywords.removeAll(keywordsToRemove);
+            keywords.addAll(keywordsToAdd);
+            
+            // put keywords back
+            separatedKeywords.clear();
+            separatedKeywords.addAll(keywords);
+            Util.putKeywords(entry, separatedKeywords, ce);
+            
+        	if (SpecialFieldsUtils.keywordSyncEnabled()) {
+        		SpecialFieldsUtils.syncSpecialFieldsFromKeywords(entry, ce);
+        	}
+        }
+        ce.end();
+        bp.undoManager.addEdit(ce);
+        bp.markBaseChanged();
+    }
+
+	private void fillKeyWordList() {
+        BasePanel bp = frame.basePanel();
+        BibtexEntry[] entries = bp.getSelectedEntries();
+
+        // fill dialog with values
+        keywordListModel.clear();
+        sortedKeywordsOfAllEntriesBeforeUpdateByUser.clear();
+        
+        if (mergeKeywords.isSelected()) {
+            for (BibtexEntry entry : entries) {
+            	ArrayList<String> separatedKeywords = Util.getSeparatedKeywords(entry);
+            	sortedKeywordsOfAllEntriesBeforeUpdateByUser.addAll(separatedKeywords);
+            }
+        } else {
+        	assert(intersectKeywords.isSelected());
+        	
+        	// all keywords from first entry have to be added
+        	BibtexEntry firstEntry = entries[0];
+        	ArrayList<String> separatedKeywords = Util.getSeparatedKeywords(firstEntry);
+        	sortedKeywordsOfAllEntriesBeforeUpdateByUser.addAll(separatedKeywords);
+        	
+        	// for the remaining entries, intersection has to be used
+        	// this approach ensures that one empty keyword list leads to an empty set of common keywords
+        	for (int i = 1; i<entries.length; i++) {
+        		BibtexEntry entry = entries[i];
+        		separatedKeywords = Util.getSeparatedKeywords(entry);
+        		sortedKeywordsOfAllEntriesBeforeUpdateByUser.retainAll(separatedKeywords);
+        	}
+        }
+        for (String s : sortedKeywordsOfAllEntriesBeforeUpdateByUser) {
+        	keywordListModel.addElement(s);
+        }
+    }
+
+}
diff --git a/src/java/net/sf/jabref/util/MassSetFieldAction.java b/src/java/net/sf/jabref/util/MassSetFieldAction.java
index 777d781..0e78a68 100644
--- a/src/java/net/sf/jabref/util/MassSetFieldAction.java
+++ b/src/java/net/sf/jabref/util/MassSetFieldAction.java
@@ -1,226 +1,226 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.util;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Arrays;
-import java.util.Collection;
-
-import javax.swing.*;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.NamedCompound;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * An Action for launching mass field.
- *
- * Functionality:
- * * Defaults to selected entries, or all entries if none are selected.
- * * Input field name
- * * Either set field, or clear field.
- */
-public class MassSetFieldAction extends MnemonicAwareAction {
-    private JabRefFrame frame;
-    private JDialog diag;
-    private JRadioButton all, selected, clear, set, rename;
-    private JTextField field, text, renameTo;
-    private JButton ok, cancel;
-    boolean cancelled = true;
-    private JCheckBox overwrite;
-
-    public MassSetFieldAction(JabRefFrame frame) {
-        putValue(NAME, "Set/clear/rename fields");
-        this.frame = frame;
-    }
-
-    private void createDialog() {
-        diag = new JDialog(frame, Globals.lang("Set/clear/rename fields"), true);
-
-        field = new JTextField();
-        text = new JTextField();
-        text.setEnabled(false);
-        renameTo = new JTextField();
-        renameTo.setEnabled(false);
-
-        ok = new JButton(Globals.lang("Ok"));
-        cancel = new JButton(Globals.lang("Cancel"));
-
-        all = new JRadioButton(Globals.lang("All entries"));
-        selected = new JRadioButton(Globals.lang("Selected entries"));
-        clear = new JRadioButton(Globals.lang("Clear fields"));
-        set = new JRadioButton(Globals.lang("Set fields"));
-        rename = new JRadioButton(Globals.lang("Rename field to:"));
-        rename.setToolTipText(Globals.lang("Move contents of a field into a field with a different name"));
-        set.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent e) {
-                // Entering a text is only relevant if we are setting, not clearing:
-                text.setEnabled(set.isSelected());
-            }
-        });
-        clear.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent event) {
-                // Overwrite protection makes no sense if we are clearing the field:
-                overwrite.setEnabled(!clear.isSelected());
-            }
-        });
-        rename.addChangeListener(new ChangeListener() {
-            public void stateChanged(ChangeEvent e) {
-                // Entering a text is only relevant if we are renaming
-                renameTo.setEnabled(rename.isSelected());
-            }
-        });
-        overwrite = new JCheckBox(Globals.lang("Overwrite existing field values"), true);
-        ButtonGroup bg = new ButtonGroup();
-        bg.add(all);
-        bg.add(selected);
-        bg = new ButtonGroup();
-        bg.add(clear);
-        bg.add(set);
-        bg.add(rename);
-        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout(
-                "left:pref, 4dlu, fill:100dlu", ""));
-        builder.appendSeparator(Globals.lang("Field name"));
-        builder.append(Globals.lang("Field name"));
-        builder.append(field);
-        builder.nextLine();
-        builder.appendSeparator(Globals.lang("Include entries"));
-        builder.append(all, 3);
-        builder.nextLine();
-        builder.append(selected, 3);
-        builder.nextLine();
-        builder.appendSeparator(Globals.lang("New field value"));
-        builder.append(set);
-        builder.append(text);
-        builder.nextLine();
-        builder.append(clear);
-        builder.nextLine();
-        builder.append(rename);
-        builder.append(renameTo);
-        builder.nextLine();
-        builder.append(overwrite, 3);
-
-
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        bb.addGlue();
-        bb.addButton(ok);
-        bb.addButton(cancel);
-        bb.addGlue();
-        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        diag.getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
-        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
-        diag.pack();
-
-        ok.addActionListener(new ActionListener() {
-           public void actionPerformed(ActionEvent e) {
-               // Check if the user tries to rename multiple fields:
-               if (rename.isSelected()) {
-                    String[] fields = getFieldNames(field.getText());
-                   if (fields.length > 1) {
-                       JOptionPane.showMessageDialog(diag, Globals.lang("You can only rename one field at a time"),
-                               "", JOptionPane.ERROR_MESSAGE);
-                       return; // Do not close the dialog.
-                   }
-               }
-                cancelled = false;
-                diag.dispose();
-            }
-        });
-
-        AbstractAction cancelAction = new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    cancelled = true;
-                    diag.dispose();
-                }
-            };
-        cancel.addActionListener(cancelAction);
-
-        // Key bindings:
-        ActionMap am = builder.getPanel().getActionMap();
-        InputMap im = builder.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(Globals.prefs.getKey("Close dialog"), "close");
-        am.put("close", cancelAction);
-    }
-
-    private void prepareDialog(boolean selection) {
-        selected.setEnabled(selection);
-        if (selection)
-            selected.setSelected(true);
-        else
-            all.setSelected(true);
-        // Make sure one of the following ones is selected:
-        if (!set.isSelected() && !clear.isSelected() && !rename.isSelected())
-            set.setSelected(true);
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        BasePanel bp = frame.basePanel();
-        if (bp == null)
-            return;
-        BibtexEntry[] entries = bp.getSelectedEntries();
-        // Lazy creation of the dialog:
-        if (diag == null)
-            createDialog();
-        cancelled = true;
-        prepareDialog(entries.length > 0);
-        Util.placeDialog(diag, frame);
-        diag.setVisible(true);
-        if (cancelled)
-            return;
-
-        Collection<BibtexEntry> entryList;
-        // If all entries should be treated, change the entries array:
-        if (all.isSelected())
-            entryList = bp.database().getEntries();
-        else
-            entryList = Arrays.asList(entries);
-        String toSet = text.getText();
-        if (toSet.length() == 0)
-            toSet = null;
-        String[] fields = getFieldNames(field.getText().trim().toLowerCase());
-        NamedCompound ce = new NamedCompound(Globals.lang("Set field"));
-        if (rename.isSelected()) {
-            if (fields.length > 1) {
-                // TODO: message: can only rename a single field
-            }
-            else {
-                ce.addEdit(Util.massRenameField(entryList, fields[0], renameTo.getText(),
-                        overwrite.isSelected()));
-            }
-        } else {
-            for (int i = 0; i < fields.length; i++) {
-                ce.addEdit(Util.massSetField(entryList, fields[i],
-                        set.isSelected() ? toSet : null,
-                        overwrite.isSelected()));
-            }
-        }
-        ce.end();
-        bp.undoManager.addEdit(ce);
-        bp.markBaseChanged();
-    }
-
-    private String[] getFieldNames(String s) {
-        return s.split("[\\s;,]");
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.util;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Arrays;
+import java.util.Collection;
+
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.sf.jabref.*;
+import net.sf.jabref.undo.NamedCompound;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * An Action for launching mass field.
+ *
+ * Functionality:
+ * * Defaults to selected entries, or all entries if none are selected.
+ * * Input field name
+ * * Either set field, or clear field.
+ */
+public class MassSetFieldAction extends MnemonicAwareAction {
+    private JabRefFrame frame;
+    private JDialog diag;
+    private JRadioButton all, selected, clear, set, rename;
+    private JTextField field, text, renameTo;
+    private JButton ok, cancel;
+    boolean cancelled = true;
+    private JCheckBox overwrite;
+
+    public MassSetFieldAction(JabRefFrame frame) {
+        putValue(NAME, "Set/clear/rename fields");
+        this.frame = frame;
+    }
+
+    private void createDialog() {
+        diag = new JDialog(frame, Globals.lang("Set/clear/rename fields"), true);
+
+        field = new JTextField();
+        text = new JTextField();
+        text.setEnabled(false);
+        renameTo = new JTextField();
+        renameTo.setEnabled(false);
+
+        ok = new JButton(Globals.lang("Ok"));
+        cancel = new JButton(Globals.lang("Cancel"));
+
+        all = new JRadioButton(Globals.lang("All entries"));
+        selected = new JRadioButton(Globals.lang("Selected entries"));
+        clear = new JRadioButton(Globals.lang("Clear fields"));
+        set = new JRadioButton(Globals.lang("Set fields"));
+        rename = new JRadioButton(Globals.lang("Rename field to:"));
+        rename.setToolTipText(Globals.lang("Move contents of a field into a field with a different name"));
+        set.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent e) {
+                // Entering a text is only relevant if we are setting, not clearing:
+                text.setEnabled(set.isSelected());
+            }
+        });
+        clear.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent event) {
+                // Overwrite protection makes no sense if we are clearing the field:
+                overwrite.setEnabled(!clear.isSelected());
+            }
+        });
+        rename.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent e) {
+                // Entering a text is only relevant if we are renaming
+                renameTo.setEnabled(rename.isSelected());
+            }
+        });
+        overwrite = new JCheckBox(Globals.lang("Overwrite existing field values"), true);
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(all);
+        bg.add(selected);
+        bg = new ButtonGroup();
+        bg.add(clear);
+        bg.add(set);
+        bg.add(rename);
+        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout(
+                "left:pref, 4dlu, fill:100dlu", ""));
+        builder.appendSeparator(Globals.lang("Field name"));
+        builder.append(Globals.lang("Field name"));
+        builder.append(field);
+        builder.nextLine();
+        builder.appendSeparator(Globals.lang("Include entries"));
+        builder.append(all, 3);
+        builder.nextLine();
+        builder.append(selected, 3);
+        builder.nextLine();
+        builder.appendSeparator(Globals.lang("New field value"));
+        builder.append(set);
+        builder.append(text);
+        builder.nextLine();
+        builder.append(clear);
+        builder.nextLine();
+        builder.append(rename);
+        builder.append(renameTo);
+        builder.nextLine();
+        builder.append(overwrite, 3);
+
+
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        bb.addGlue();
+        bb.addButton(ok);
+        bb.addButton(cancel);
+        bb.addGlue();
+        builder.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        bb.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        diag.getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
+        diag.getContentPane().add(bb.getPanel(), BorderLayout.SOUTH);
+        diag.pack();
+
+        ok.addActionListener(new ActionListener() {
+           public void actionPerformed(ActionEvent e) {
+               // Check if the user tries to rename multiple fields:
+               if (rename.isSelected()) {
+                    String[] fields = getFieldNames(field.getText());
+                   if (fields.length > 1) {
+                       JOptionPane.showMessageDialog(diag, Globals.lang("You can only rename one field at a time"),
+                               "", JOptionPane.ERROR_MESSAGE);
+                       return; // Do not close the dialog.
+                   }
+               }
+                cancelled = false;
+                diag.dispose();
+            }
+        });
+
+        AbstractAction cancelAction = new AbstractAction() {
+                public void actionPerformed(ActionEvent e) {
+                    cancelled = true;
+                    diag.dispose();
+                }
+            };
+        cancel.addActionListener(cancelAction);
+
+        // Key bindings:
+        ActionMap am = builder.getPanel().getActionMap();
+        InputMap im = builder.getPanel().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(Globals.prefs.getKey("Close dialog"), "close");
+        am.put("close", cancelAction);
+    }
+
+    private void prepareDialog(boolean selection) {
+        selected.setEnabled(selection);
+        if (selection)
+            selected.setSelected(true);
+        else
+            all.setSelected(true);
+        // Make sure one of the following ones is selected:
+        if (!set.isSelected() && !clear.isSelected() && !rename.isSelected())
+            set.setSelected(true);
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        BasePanel bp = frame.basePanel();
+        if (bp == null)
+            return;
+        BibtexEntry[] entries = bp.getSelectedEntries();
+        // Lazy creation of the dialog:
+        if (diag == null)
+            createDialog();
+        cancelled = true;
+        prepareDialog(entries.length > 0);
+        Util.placeDialog(diag, frame);
+        diag.setVisible(true);
+        if (cancelled)
+            return;
+
+        Collection<BibtexEntry> entryList;
+        // If all entries should be treated, change the entries array:
+        if (all.isSelected())
+            entryList = bp.database().getEntries();
+        else
+            entryList = Arrays.asList(entries);
+        String toSet = text.getText();
+        if (toSet.length() == 0)
+            toSet = null;
+        String[] fields = getFieldNames(field.getText().trim().toLowerCase());
+        NamedCompound ce = new NamedCompound(Globals.lang("Set field"));
+        if (rename.isSelected()) {
+            if (fields.length > 1) {
+                // TODO: message: can only rename a single field
+            }
+            else {
+                ce.addEdit(Util.massRenameField(entryList, fields[0], renameTo.getText(),
+                        overwrite.isSelected()));
+            }
+        } else {
+            for (int i = 0; i < fields.length; i++) {
+                ce.addEdit(Util.massSetField(entryList, fields[i],
+                        set.isSelected() ? toSet : null,
+                        overwrite.isSelected()));
+            }
+        }
+        ce.end();
+        bp.undoManager.addEdit(ce);
+        bp.markBaseChanged();
+    }
+
+    private String[] getFieldNames(String s) {
+        return s.split("[\\s;,]");
+    }
+}
diff --git a/src/java/net/sf/jabref/util/NameListNormalizer.java b/src/java/net/sf/jabref/util/NameListNormalizer.java
index d6cea2b..7790499 100644
--- a/src/java/net/sf/jabref/util/NameListNormalizer.java
+++ b/src/java/net/sf/jabref/util/NameListNormalizer.java
@@ -1,255 +1,255 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.util;
-
-import java.util.ArrayList;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Class containing method(s) for normalizing author lists to BibTeX format.
- */
-public class NameListNormalizer {
-
-    static Pattern lastFF = Pattern.compile("(\\p{javaUpperCase}[\\p{javaLowerCase}]+) (\\p{javaUpperCase}+)");
-    static Pattern lastFdotF = Pattern.compile("(\\p{javaUpperCase}[\\p{javaLowerCase}]+) ([\\. \\p{javaUpperCase}]+)");
-    static Pattern FFlast = Pattern.compile("(\\p{javaUpperCase}+) (\\p{javaUpperCase}[\\p{javaLowerCase}]+)");
-    static Pattern FdotFlast = Pattern.compile("([\\. \\p{javaUpperCase}]+) (\\p{javaUpperCase}[\\p{javaLowerCase}]+)");
-    static Pattern singleName = Pattern.compile("(\\p{javaUpperCase}[\\p{javaLowerCase}]*)");
-
-    /*public static void main(String[] args) {
-        normalizeAuthorList("Staci D. Bilbo and Smith SH and Jaclyn M Schwarz");
-        //System.out.println(normalizeAuthorList("Ølver MA"));
-        //System.out.println(normalizeAuthorList("Ølver MA, GG Øie, Øie GG, Alfredsen JÅÅ, Jo Alfredsen, Olsen Y.Y. and Olsen Y. Y."));
-        //System.out.println(normalizeAuthorList("Ølver MA, GG Øie, Øie GG, Alfredsen JÅÅ, Jo Alfredsen, Olsen Y.Y., Olsen Y. Y."));
-        //System.out.println(normalizeAuthorList("Alver, Morten and Alver, Morten O and Alfredsen, JA and Olsen, Y.Y."));
-        //System.out.println(normalizeAuthorList("Alver, MA; Alfredsen, JA; Olsen Y.Y."));
-    }*/
-
-    public static String normalizeAuthorList(String in){
-        boolean andSep = false, semicolonSep = false, commaSep = false;
-        String author;
-        String[] authors = in.split("( |,)and ",-1);
-        if (authors.length > 1)
-            andSep = true;
-        else {
-            /*
-            If there are no "and" separators in the original string, we assume it either means that
-            the author list is comma or semicolon separated or that it contains only a single name.
-            If there is a semicolon, we go by that. If not, we assume commas, and count the parts
-            separated by commas to determine which it is.
-            */
-            String[] a2 = in.split("; ");
-            if (a2.length > 1) {
-                semicolonSep = true;
-                authors = a2;
-            }
-            else {
-                a2 = in.split(", ");
-                if (a2.length > 3) { // Probably more than a single author, so we split by commas.
-                    commaSep = true;
-                    authors = a2;
-                } else {
-                    if (a2.length == 3) {
-                        // This could be a BibTeX formatted name containing a Jr particle,
-                        // e.g. Smith, Jr., Peter
-                        // We check if the middle part is <= 3 characters. If not, we assume we are
-                        // dealing with three authors.
-                        if (a2[1].length() > 3)
-                            authors = a2;
-                    }
-                }
-            }
-        }
-
-        // Remove leading and trailing whitespaces from each name:
-        for (int i = 0; i < authors.length; i++){
-            authors[i] = authors[i].trim();
-        }
-
-        // If we found an and separator, there could possibly be semicolon or
-        // comma separation before the last separator. If there are two or more
-        // and separators, we can dismiss this possibility.
-        // If there is only a single and separator, check closer:
-        if(andSep && (authors.length == 2)){
-            // Check if the first part is semicolon separated:
-            String[] semiSep = authors[0].split("; ");
-            if (semiSep.length > 1) {
-                // Ok, it looks like this is the case. Use separation by semicolons:
-                String[] newAuthors = new String[1+semiSep.length];
-                for (int i=0; i<semiSep.length; i++) {
-                    newAuthors[i] = semiSep[i].trim();
-                }
-                newAuthors[semiSep.length] = authors[1];
-                authors = newAuthors;
-            }
-            else {
-                // Check if there is a comma in the last name. If so, we can assume that comma
-                // is not used to separate the names:
-                boolean lnfn = (authors[1].indexOf(",") > 0);
-                if (!lnfn) {
-                    String[] cmSep = authors[0].split(", ");
-                    if (cmSep.length > 1) {
-                        // This means that the last name doesn't contain a comma, but the first
-                        // one contains one or more. This indicates that the names leading up to
-                        // the single "and" are comma separated:
-                        String[] newAuthors = new String[1+cmSep.length];
-                        for (int i=0; i<cmSep.length; i++) {
-                            newAuthors[i] = cmSep[i].trim();
-                        }
-                        newAuthors[cmSep.length] = authors[1];
-                        authors = newAuthors;
-                    }
-
-                }
-            }
-        }
-
-        StringBuilder sb = new StringBuilder();
-        for (int i=0; i<authors.length; i++) {
-            String norm = normalizeName(authors[i]);
-            sb.append(norm);
-            if (i < authors.length-1)
-                sb.append(" and ");
-        }
-        return sb.toString();
-    }
-
-
-    public static String normalizeName(String name) {
-        Matcher m = lastFF.matcher(name);
-        if (m.matches()) {
-            String initials = m.group(2);
-            StringBuilder sb = new StringBuilder(m.group(1));
-            sb.append(", ");
-            for (int i=0; i<initials.length(); i++) {
-                sb.append(initials.charAt(i));
-                sb.append('.');
-                if (i < initials.length()-1)
-                    sb.append(' ');
-            }
-            return sb.toString();
-        }
-        m = lastFdotF.matcher(name);
-        if (m.matches()) {
-            String initials = m.group(2).replaceAll("[\\. ]+", "");
-            StringBuilder sb = new StringBuilder(m.group(1));
-            sb.append(", ");
-            for (int i=0; i<initials.length(); i++) {
-                sb.append(initials.charAt(i));
-                sb.append('.');
-                if (i < initials.length()-1)
-                    sb.append(' ');
-            }
-            return sb.toString();
-        }
-
-        m = FFlast.matcher(name);
-        if (m.matches()) {
-            String initials = m.group(1);
-            StringBuilder sb = new StringBuilder(m.group(2));
-            sb.append(", ");
-            for (int i=0; i<initials.length(); i++) {
-                sb.append(initials.charAt(i));
-                sb.append('.');
-                if (i < initials.length()-1)
-                    sb.append(' ');
-            }
-            return sb.toString();
-        }
-        m = FdotFlast.matcher(name);
-        if (m.matches()) {
-            String initials = m.group(1).replaceAll("[\\. ]+", "");
-            StringBuilder sb = new StringBuilder(m.group(2));
-            sb.append(", ");
-            for (int i=0; i<initials.length(); i++) {
-                sb.append(initials.charAt(i));
-                sb.append('.');
-                if (i < initials.length()-1)
-                    sb.append(' ');
-            }
-            return sb.toString();
-        }
-
-        if (name.indexOf(',') >= 0) {
-            // Name contains comma
-            int index = name.lastIndexOf(',');
-            // If the comma is at the end of the name, just remove it to prevent index error:
-            if (index == name.length() - 1)
-                name = name.substring(0, name.length()-1);
-
-            StringBuilder sb = new StringBuilder(name.substring(0, index));
-            sb.append(", ");
-            // Check if the remainder is a single name:
-            String fName = name.substring(index+1).trim();
-            String[] fParts = fName.split(" ");
-            if (fParts.length > 1) {
-                // Multiple parts. Add all of them, and add a dot if they are single letter parts:
-                for (int i=0; i<fParts.length; i++) {
-                    if (fParts[i].length() == 1)
-                        sb.append(fParts[i]+".");
-                    else sb.append(fParts[i]);
-                    if (i < fParts.length-1)
-                        sb.append(" ");
-                }
-            } else {
-                // Only a single part. Check if it looks like a name or initials:
-                Matcher m2 = singleName.matcher(fParts[0]);
-                if (m2.matches())
-                    sb.append(fParts[0]);
-                else {
-                    // It looks like initials.
-                    String initials = fParts[0].replaceAll("[\\.]+", "");
-                    for (int i=0; i<initials.length(); i++) {
-                        sb.append(initials.charAt(i));
-                        sb.append('.');
-                        if (i < initials.length()-1)
-                            sb.append(' ');
-                    }
-                }
-
-            }
-            return sb.toString();
-        } else {
-            // Name doesn't contain comma
-            String[] parts = name.split(" +");
-            boolean allNames = true;
-            for (int i = 0; i < parts.length; i++) {
-                m = singleName.matcher(parts[i]);
-                if (!m.matches()) {
-                    allNames = false;
-                    break;
-                }
-            }
-            if (allNames) {
-                // Looks like a name written in full with first name first.
-                // Change into last name first format:
-                StringBuilder sb = new StringBuilder(parts[parts.length-1]);
-                if (parts.length > 1) {
-                    sb.append(",");
-                    for (int i = 0; i < parts.length-1; i++) {
-                        sb.append(" "+parts[i]);
-                        if (parts[i].length() == 1)
-                            sb.append(".");
-                    }
-                }
-                return sb.toString();
-            }
-        }
-
-        return name;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.util;
+
+import java.util.ArrayList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Class containing method(s) for normalizing author lists to BibTeX format.
+ */
+public class NameListNormalizer {
+
+    static Pattern lastFF = Pattern.compile("(\\p{javaUpperCase}[\\p{javaLowerCase}]+) (\\p{javaUpperCase}+)");
+    static Pattern lastFdotF = Pattern.compile("(\\p{javaUpperCase}[\\p{javaLowerCase}]+) ([\\. \\p{javaUpperCase}]+)");
+    static Pattern FFlast = Pattern.compile("(\\p{javaUpperCase}+) (\\p{javaUpperCase}[\\p{javaLowerCase}]+)");
+    static Pattern FdotFlast = Pattern.compile("([\\. \\p{javaUpperCase}]+) (\\p{javaUpperCase}[\\p{javaLowerCase}]+)");
+    static Pattern singleName = Pattern.compile("(\\p{javaUpperCase}[\\p{javaLowerCase}]*)");
+
+    /*public static void main(String[] args) {
+        normalizeAuthorList("Staci D. Bilbo and Smith SH and Jaclyn M Schwarz");
+        //System.out.println(normalizeAuthorList("Ølver MA"));
+        //System.out.println(normalizeAuthorList("Ølver MA, GG Øie, Øie GG, Alfredsen JÅÅ, Jo Alfredsen, Olsen Y.Y. and Olsen Y. Y."));
+        //System.out.println(normalizeAuthorList("Ølver MA, GG Øie, Øie GG, Alfredsen JÅÅ, Jo Alfredsen, Olsen Y.Y., Olsen Y. Y."));
+        //System.out.println(normalizeAuthorList("Alver, Morten and Alver, Morten O and Alfredsen, JA and Olsen, Y.Y."));
+        //System.out.println(normalizeAuthorList("Alver, MA; Alfredsen, JA; Olsen Y.Y."));
+    }*/
+
+    public static String normalizeAuthorList(String in){
+        boolean andSep = false, semicolonSep = false, commaSep = false;
+        String author;
+        String[] authors = in.split("( |,)and ",-1);
+        if (authors.length > 1)
+            andSep = true;
+        else {
+            /*
+            If there are no "and" separators in the original string, we assume it either means that
+            the author list is comma or semicolon separated or that it contains only a single name.
+            If there is a semicolon, we go by that. If not, we assume commas, and count the parts
+            separated by commas to determine which it is.
+            */
+            String[] a2 = in.split("; ");
+            if (a2.length > 1) {
+                semicolonSep = true;
+                authors = a2;
+            }
+            else {
+                a2 = in.split(", ");
+                if (a2.length > 3) { // Probably more than a single author, so we split by commas.
+                    commaSep = true;
+                    authors = a2;
+                } else {
+                    if (a2.length == 3) {
+                        // This could be a BibTeX formatted name containing a Jr particle,
+                        // e.g. Smith, Jr., Peter
+                        // We check if the middle part is <= 3 characters. If not, we assume we are
+                        // dealing with three authors.
+                        if (a2[1].length() > 3)
+                            authors = a2;
+                    }
+                }
+            }
+        }
+
+        // Remove leading and trailing whitespaces from each name:
+        for (int i = 0; i < authors.length; i++){
+            authors[i] = authors[i].trim();
+        }
+
+        // If we found an and separator, there could possibly be semicolon or
+        // comma separation before the last separator. If there are two or more
+        // and separators, we can dismiss this possibility.
+        // If there is only a single and separator, check closer:
+        if(andSep && (authors.length == 2)){
+            // Check if the first part is semicolon separated:
+            String[] semiSep = authors[0].split("; ");
+            if (semiSep.length > 1) {
+                // Ok, it looks like this is the case. Use separation by semicolons:
+                String[] newAuthors = new String[1+semiSep.length];
+                for (int i=0; i<semiSep.length; i++) {
+                    newAuthors[i] = semiSep[i].trim();
+                }
+                newAuthors[semiSep.length] = authors[1];
+                authors = newAuthors;
+            }
+            else {
+                // Check if there is a comma in the last name. If so, we can assume that comma
+                // is not used to separate the names:
+                boolean lnfn = (authors[1].indexOf(",") > 0);
+                if (!lnfn) {
+                    String[] cmSep = authors[0].split(", ");
+                    if (cmSep.length > 1) {
+                        // This means that the last name doesn't contain a comma, but the first
+                        // one contains one or more. This indicates that the names leading up to
+                        // the single "and" are comma separated:
+                        String[] newAuthors = new String[1+cmSep.length];
+                        for (int i=0; i<cmSep.length; i++) {
+                            newAuthors[i] = cmSep[i].trim();
+                        }
+                        newAuthors[cmSep.length] = authors[1];
+                        authors = newAuthors;
+                    }
+
+                }
+            }
+        }
+
+        StringBuilder sb = new StringBuilder();
+        for (int i=0; i<authors.length; i++) {
+            String norm = normalizeName(authors[i]);
+            sb.append(norm);
+            if (i < authors.length-1)
+                sb.append(" and ");
+        }
+        return sb.toString();
+    }
+
+
+    public static String normalizeName(String name) {
+        Matcher m = lastFF.matcher(name);
+        if (m.matches()) {
+            String initials = m.group(2);
+            StringBuilder sb = new StringBuilder(m.group(1));
+            sb.append(", ");
+            for (int i=0; i<initials.length(); i++) {
+                sb.append(initials.charAt(i));
+                sb.append('.');
+                if (i < initials.length()-1)
+                    sb.append(' ');
+            }
+            return sb.toString();
+        }
+        m = lastFdotF.matcher(name);
+        if (m.matches()) {
+            String initials = m.group(2).replaceAll("[\\. ]+", "");
+            StringBuilder sb = new StringBuilder(m.group(1));
+            sb.append(", ");
+            for (int i=0; i<initials.length(); i++) {
+                sb.append(initials.charAt(i));
+                sb.append('.');
+                if (i < initials.length()-1)
+                    sb.append(' ');
+            }
+            return sb.toString();
+        }
+
+        m = FFlast.matcher(name);
+        if (m.matches()) {
+            String initials = m.group(1);
+            StringBuilder sb = new StringBuilder(m.group(2));
+            sb.append(", ");
+            for (int i=0; i<initials.length(); i++) {
+                sb.append(initials.charAt(i));
+                sb.append('.');
+                if (i < initials.length()-1)
+                    sb.append(' ');
+            }
+            return sb.toString();
+        }
+        m = FdotFlast.matcher(name);
+        if (m.matches()) {
+            String initials = m.group(1).replaceAll("[\\. ]+", "");
+            StringBuilder sb = new StringBuilder(m.group(2));
+            sb.append(", ");
+            for (int i=0; i<initials.length(); i++) {
+                sb.append(initials.charAt(i));
+                sb.append('.');
+                if (i < initials.length()-1)
+                    sb.append(' ');
+            }
+            return sb.toString();
+        }
+
+        if (name.indexOf(',') >= 0) {
+            // Name contains comma
+            int index = name.lastIndexOf(',');
+            // If the comma is at the end of the name, just remove it to prevent index error:
+            if (index == name.length() - 1)
+                name = name.substring(0, name.length()-1);
+
+            StringBuilder sb = new StringBuilder(name.substring(0, index));
+            sb.append(", ");
+            // Check if the remainder is a single name:
+            String fName = name.substring(index+1).trim();
+            String[] fParts = fName.split(" ");
+            if (fParts.length > 1) {
+                // Multiple parts. Add all of them, and add a dot if they are single letter parts:
+                for (int i=0; i<fParts.length; i++) {
+                    if (fParts[i].length() == 1)
+                        sb.append(fParts[i]+".");
+                    else sb.append(fParts[i]);
+                    if (i < fParts.length-1)
+                        sb.append(" ");
+                }
+            } else {
+                // Only a single part. Check if it looks like a name or initials:
+                Matcher m2 = singleName.matcher(fParts[0]);
+                if (m2.matches())
+                    sb.append(fParts[0]);
+                else {
+                    // It looks like initials.
+                    String initials = fParts[0].replaceAll("[\\.]+", "");
+                    for (int i=0; i<initials.length(); i++) {
+                        sb.append(initials.charAt(i));
+                        sb.append('.');
+                        if (i < initials.length()-1)
+                            sb.append(' ');
+                    }
+                }
+
+            }
+            return sb.toString();
+        } else {
+            // Name doesn't contain comma
+            String[] parts = name.split(" +");
+            boolean allNames = true;
+            for (int i = 0; i < parts.length; i++) {
+                m = singleName.matcher(parts[i]);
+                if (!m.matches()) {
+                    allNames = false;
+                    break;
+                }
+            }
+            if (allNames) {
+                // Looks like a name written in full with first name first.
+                // Change into last name first format:
+                StringBuilder sb = new StringBuilder(parts[parts.length-1]);
+                if (parts.length > 1) {
+                    sb.append(",");
+                    for (int i = 0; i < parts.length-1; i++) {
+                        sb.append(" "+parts[i]);
+                        if (parts[i].length() == 1)
+                            sb.append(".");
+                    }
+                }
+                return sb.toString();
+            }
+        }
+
+        return name;
+    }
+}
diff --git a/src/java/net/sf/jabref/util/QuotedStringTokenizer.java b/src/java/net/sf/jabref/util/QuotedStringTokenizer.java
index c5a4a67..dcec0e4 100644
--- a/src/java/net/sf/jabref/util/QuotedStringTokenizer.java
+++ b/src/java/net/sf/jabref/util/QuotedStringTokenizer.java
@@ -1,80 +1,80 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.util;
-
-/**
- * A String tokenizer that works just like StringTokenizer, but considers quoted
- * characters (which do not act as delimiters).
- */
-public class QuotedStringTokenizer {
-    private final String m_content;
-    private final int m_contentLength;
-    private final String m_delimiters;
-    private final char m_quoteChar;
-    private int m_index = 0;
-    
-    /**
-     * @param content
-     *            The String to be tokenized.
-     * @param delimiters
-     *            The delimiter characters.
-     * @param quoteCharacter
-     *            The quoting character. Every character (including, but not
-     *            limited to, delimiters) that is preceded by this character is
-     *            not treated as a delimiter, but as a token component.
-     */
-    public QuotedStringTokenizer(String content, String delimiters, char quoteCharacter) {
-        m_content = content;
-        m_delimiters = delimiters;
-        m_quoteChar = quoteCharacter;
-        m_contentLength = m_content.length();
-        // skip leading delimiters
-        while (isDelimiter(m_content.charAt(m_index)) && m_index < m_contentLength)
-            ++m_index;
-    }
-    
-    public String nextToken() {
-        char c;
-        StringBuffer sb = new StringBuffer();
-        while (m_index < m_contentLength) {
-            c = m_content.charAt(m_index);
-    		if (c == m_quoteChar) { // next is quoted
-    		    ++m_index;
-    		    if (m_index < m_contentLength) // sanity check
-    		        sb.append(m_content.charAt(m_index));
-    			// ignore for delimiter search!
-    		} else if (isDelimiter(c)) { // unit finished
-    		    // advance index until next token or end
-    		    do {
-    		        ++m_index;
-    		    } while (m_index < m_contentLength && isDelimiter(m_content.charAt(m_index)));
-    		    return sb.toString();
-    		}
-   			else
-                sb.append(c);
-   			++m_index;
-    	}
-        return sb.toString();
-    }
-    
-    private boolean isDelimiter(char c) {
-        return m_delimiters.indexOf(c) >= 0;
-    }
-    
-    public boolean hasMoreTokens() {
-        return m_index < m_contentLength;
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.util;
+
+/**
+ * A String tokenizer that works just like StringTokenizer, but considers quoted
+ * characters (which do not act as delimiters).
+ */
+public class QuotedStringTokenizer {
+    private final String m_content;
+    private final int m_contentLength;
+    private final String m_delimiters;
+    private final char m_quoteChar;
+    private int m_index = 0;
+    
+    /**
+     * @param content
+     *            The String to be tokenized.
+     * @param delimiters
+     *            The delimiter characters.
+     * @param quoteCharacter
+     *            The quoting character. Every character (including, but not
+     *            limited to, delimiters) that is preceded by this character is
+     *            not treated as a delimiter, but as a token component.
+     */
+    public QuotedStringTokenizer(String content, String delimiters, char quoteCharacter) {
+        m_content = content;
+        m_delimiters = delimiters;
+        m_quoteChar = quoteCharacter;
+        m_contentLength = m_content.length();
+        // skip leading delimiters
+        while (isDelimiter(m_content.charAt(m_index)) && m_index < m_contentLength)
+            ++m_index;
+    }
+    
+    public String nextToken() {
+        char c;
+        StringBuffer sb = new StringBuffer();
+        while (m_index < m_contentLength) {
+            c = m_content.charAt(m_index);
+    		if (c == m_quoteChar) { // next is quoted
+    		    ++m_index;
+    		    if (m_index < m_contentLength) // sanity check
+    		        sb.append(m_content.charAt(m_index));
+    			// ignore for delimiter search!
+    		} else if (isDelimiter(c)) { // unit finished
+    		    // advance index until next token or end
+    		    do {
+    		        ++m_index;
+    		    } while (m_index < m_contentLength && isDelimiter(m_content.charAt(m_index)));
+    		    return sb.toString();
+    		}
+   			else
+                sb.append(c);
+   			++m_index;
+    	}
+        return sb.toString();
+    }
+    
+    private boolean isDelimiter(char c) {
+        return m_delimiters.indexOf(c) >= 0;
+    }
+    
+    public boolean hasMoreTokens() {
+        return m_index < m_contentLength;
+    }
+}
diff --git a/src/java/net/sf/jabref/util/ResourceExtractor.java b/src/java/net/sf/jabref/util/ResourceExtractor.java
index f476b57..107dd86 100644
--- a/src/java/net/sf/jabref/util/ResourceExtractor.java
+++ b/src/java/net/sf/jabref/util/ResourceExtractor.java
@@ -1,59 +1,59 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.util;
-
-import java.awt.Component;
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRef;
-import net.sf.jabref.Worker;
-import net.sf.jabref.net.URLDownload;
-/**
- * This class performs the somewhat weird action of extracting a file from within the running JabRef jar,
- * and storing it to the given File. It may prove useful e.g. for extracting Endnote export/import filters which
- * are needed for full integration with the export filter in JabRef, so we can bundle these for the user even though
- * they are not used by JabRef directly.
- *
- *
- *
- * @author alver
- */
-public class ResourceExtractor implements Worker {
-    
-    final URL resource;
-    final Component parent;
-    final File destination;
-    
-    /** Creates a new instance of ResourceExtractor */
-    public ResourceExtractor(final Component parent, final String filename, File destination) {
-         resource = JabRef.class.getResource(filename);
-         //System.out.println(filename+"\n"+resource);
-         this.parent = parent;
-         this.destination = destination;
-    }
-    
-    public void run() {
-        URLDownload ud = new URLDownload(parent, resource, destination);
-        try {
-            ud.download();
-        } catch (IOException ex) {
-            Globals.logger("Error extracting resource: "+ex.getMessage());            
-        }
-    }
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.util;
+
+import java.awt.Component;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.Worker;
+import net.sf.jabref.net.URLDownload;
+/**
+ * This class performs the somewhat weird action of extracting a file from within the running JabRef jar,
+ * and storing it to the given File. It may prove useful e.g. for extracting Endnote export/import filters which
+ * are needed for full integration with the export filter in JabRef, so we can bundle these for the user even though
+ * they are not used by JabRef directly.
+ *
+ *
+ *
+ * @author alver
+ */
+public class ResourceExtractor implements Worker {
+    
+    final URL resource;
+    final Component parent;
+    final File destination;
+    
+    /** Creates a new instance of ResourceExtractor */
+    public ResourceExtractor(final Component parent, final String filename, File destination) {
+         resource = JabRef.class.getResource(filename);
+         //System.out.println(filename+"\n"+resource);
+         this.parent = parent;
+         this.destination = destination;
+    }
+    
+    public void run() {
+        URLDownload ud = new URLDownload(parent, resource, destination);
+        try {
+            ud.download();
+        } catch (IOException ex) {
+            Globals.logger("Error extracting resource: "+ex.getMessage());            
+        }
+    }
+}
diff --git a/src/java/net/sf/jabref/util/TBuildInfo.java b/src/java/net/sf/jabref/util/TBuildInfo.java
index ebd3f7b..f92b572 100644
--- a/src/java/net/sf/jabref/util/TBuildInfo.java
+++ b/src/java/net/sf/jabref/util/TBuildInfo.java
@@ -1,145 +1,145 @@
-/*
- Copyright (C) 2005 R. Nagel
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-
-// created by : r.nagel 01.06.2005
-//
-// function : read build informations from build.properies file
-//
-//
-// modified:
-//
-
-package net.sf.jabref.util;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-
-public class TBuildInfo
-{
-  private String BUILD_DATE = "" ;
-  private String BUILD_VERSION = "devel - 1st edition family" ;
-  private String BUILD_NUMBER = "1" ;
-
-//  private TBuilderInfo runtime = new TBuildInfo() ;
-  public TBuildInfo(String path)
-  {
-    readBuildVersionData(path) ;
-  }
-
-// --------------------------------------------------------------------------
-  // some informations from extern build file
-  private void readBuildVersionData(String path)
-  {
-    String buf = null ;
-    int sep = 0 ;
-    String Key, Value ;
-    BufferedReader input = null ;
-
-    try
-    {
-
-      input = new BufferedReader(
-          new InputStreamReader( getClass().getResourceAsStream( path) ), 100 ) ;
-    }
-    catch ( Exception e1 )
-    {
-//      System.out.println( e1 ) ;
-//      e1.printStackTrace();
-//      Logger.global.info( e1.getMessage() ) ;
-        return ;
-    }
-
-    try
-    {
-      while ( ( buf = input.readLine() ) != null )
-      {
-        if ( buf.length() > 0 )
-        { // no empty lines
-          if ( buf.charAt( 0 ) != '#' )
-          { // data line, comments - first char = #
-            sep = buf.indexOf( '=' ) ;
-            if ( sep > 0 )
-            { // = found
-              Key = buf.substring( 0, sep ) ;
-              Value = buf.substring( sep + 1 ) ;
-              if ( Key.equals( "builddate" ) )
-              {
-                BUILD_DATE = Value ;
-              }
-              else if ( Key.equals( "build" ) )
-              {
-                BUILD_NUMBER = Value ;
-              }
-              else if ( Key.equals( "version" ) )
-              {
-                BUILD_VERSION = Value ;
-              }
-
-            }
-          } // data line
-        }
-      } // while
-    }
-    catch ( IOException iex )
-    {
-//      System.err.println(iex.getMessage());
-//      Logger.global.info( iex.getMessage() ) ;
-    }
-
-    try
-    {
-      input.close() ;
-    }
-    catch ( Exception e )
-    {
-//      System.out.println(e.getMessage());
-//      Logger.global.info( e.getMessage() ) ;
-    }
-  }
-
-  // --------------------------------------------------------------------------
-
-  public String getBUILD_DATE()
-  {
-    return BUILD_DATE;
-  }
-
-  public String getBUILD_VERSION()
-  {
-    return BUILD_VERSION;
-  }
-
-  public String getBUILD_NUMBER()
-  {
-    return BUILD_NUMBER;
-  }
-
-
-// --------------------------------------------------------------------------
-
-}
+/*
+ Copyright (C) 2005 R. Nagel
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+
+// created by : r.nagel 01.06.2005
+//
+// function : read build informations from build.properies file
+//
+//
+// modified:
+//
+
+package net.sf.jabref.util;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+public class TBuildInfo
+{
+  private String BUILD_DATE = "" ;
+  private String BUILD_VERSION = "devel - 1st edition family" ;
+  private String BUILD_NUMBER = "1" ;
+
+//  private TBuilderInfo runtime = new TBuildInfo() ;
+  public TBuildInfo(String path)
+  {
+    readBuildVersionData(path) ;
+  }
+
+// --------------------------------------------------------------------------
+  // some informations from extern build file
+  private void readBuildVersionData(String path)
+  {
+    String buf = null ;
+    int sep = 0 ;
+    String Key, Value ;
+    BufferedReader input = null ;
+
+    try
+    {
+
+      input = new BufferedReader(
+          new InputStreamReader( getClass().getResourceAsStream( path) ), 100 ) ;
+    }
+    catch ( Exception e1 )
+    {
+//      System.out.println( e1 ) ;
+//      e1.printStackTrace();
+//      Logger.global.info( e1.getMessage() ) ;
+        return ;
+    }
+
+    try
+    {
+      while ( ( buf = input.readLine() ) != null )
+      {
+        if ( buf.length() > 0 )
+        { // no empty lines
+          if ( buf.charAt( 0 ) != '#' )
+          { // data line, comments - first char = #
+            sep = buf.indexOf( '=' ) ;
+            if ( sep > 0 )
+            { // = found
+              Key = buf.substring( 0, sep ) ;
+              Value = buf.substring( sep + 1 ) ;
+              if ( Key.equals( "builddate" ) )
+              {
+                BUILD_DATE = Value ;
+              }
+              else if ( Key.equals( "build" ) )
+              {
+                BUILD_NUMBER = Value ;
+              }
+              else if ( Key.equals( "version" ) )
+              {
+                BUILD_VERSION = Value ;
+              }
+
+            }
+          } // data line
+        }
+      } // while
+    }
+    catch ( IOException iex )
+    {
+//      System.err.println(iex.getMessage());
+//      Logger.global.info( iex.getMessage() ) ;
+    }
+
+    try
+    {
+      input.close() ;
+    }
+    catch ( Exception e )
+    {
+//      System.out.println(e.getMessage());
+//      Logger.global.info( e.getMessage() ) ;
+    }
+  }
+
+  // --------------------------------------------------------------------------
+
+  public String getBUILD_DATE()
+  {
+    return BUILD_DATE;
+  }
+
+  public String getBUILD_VERSION()
+  {
+    return BUILD_VERSION;
+  }
+
+  public String getBUILD_NUMBER()
+  {
+    return BUILD_NUMBER;
+  }
+
+
+// --------------------------------------------------------------------------
+
+}
diff --git a/src/java/net/sf/jabref/util/TXMLReader.java b/src/java/net/sf/jabref/util/TXMLReader.java
index 52ac800..7bdedee 100644
--- a/src/java/net/sf/jabref/util/TXMLReader.java
+++ b/src/java/net/sf/jabref/util/TXMLReader.java
@@ -1,194 +1,194 @@
-/*  Copyright (C) 2003-2011 Raik Nagel
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-// function : simple xml reader functions
-
-package net.sf.jabref.util ;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.w3c.dom.*;
-import org.xml.sax.SAXException;
-
-public class TXMLReader
-{
-  private Document config ; // XML data
-  private DocumentBuilderFactory factory ;
-  private DocumentBuilder builder ;
-
-  private boolean ready = false ;
-
-  public TXMLReader(String resPath)
-  {
-    factory = DocumentBuilderFactory.newInstance() ;
-    try
-    {
-      builder = factory.newDocumentBuilder() ;
-
-      InputStream stream = null ;
-      if (resPath != null)
-      {
-        stream = TXMLReader.class.getResourceAsStream( resPath ) ;
-      }
-      // not found, check the src/ directory (IDE mode)
-      if (stream == null)
-      {
-        try
-        {
-          stream = new FileInputStream( "src" +resPath ) ;
-        }
-        catch (Exception e)
-        {
-
-        }
-      }
-
-      if (stream != null)
-      {
-        config = builder.parse( stream ) ;
-        ready = true ;
-      }
-    }
-
-    catch ( SAXException sxe )
-    {
-      sxe.printStackTrace() ;
-    }
-    catch ( ParserConfigurationException pce )
-    {
-      pce.printStackTrace() ;
-    }
-    catch ( IOException ioe )
-    {
-      ioe.printStackTrace() ;
-    }
-    catch (Exception oe)
-    {
-      oe.printStackTrace();
-    }
-  }
-
-  // ---------------------------------------------------------------------------
-
-  public boolean isReady()
-  {
-    return ready ;
-  }
-
-
-  public NodeList getNodes( String name )
-  {
-    return config.getElementsByTagName( name ) ;
-  }
-
-  // ---------------------------------------------------------------------------
-
-  private Element getFirstElement( Element element, String name )
-  {
-    NodeList nl = element.getElementsByTagName( name ) ;
-    if ( nl.getLength() < 1 )
-    {
-      throw new RuntimeException(
-          "Element: " + element + " does not contain: " + name ) ;
-    }
-    return ( Element ) nl.item( 0 ) ;
-  }
-
-  /** returns all "plain" data of a subnode with name <name> */
-  public String getSimpleElementText( Element node, String name )
-  {
-    Element namedElement = getFirstElement( node, name ) ;
-    return getSimpleElementText( namedElement ) ;
-  }
-
-  /** collect all "plain" data of a xml node */
-  public String getSimpleElementText( Element node )
-  {
-    StringBuffer sb = new StringBuffer() ;
-    NodeList children = node.getChildNodes() ;
-    for ( int i = 0 ; i < children.getLength() ; i++ )
-    {
-      Node child = children.item( i ) ;
-      if ( child instanceof Text )
-      {
-        sb.append( child.getNodeValue().trim() ) ;
-      }
-    }
-    return sb.toString() ;
-  }
-
-  // ---------------------------------------------------------------------------
-  // read some attributes
-  // --------------------------------------------------------------------------
-  public int readIntegerAttribute( Element node, String attrName, int defaultValue )
-  {
-    int back = defaultValue ;
-    if ( node != null )
-    {
-      String data = node.getAttribute( attrName ) ;
-      if ( data != null )
-      {
-        if ( data.length() > 0 )
-        {
-          try
-          {
-            back = Integer.parseInt( data ) ;
-          }
-          catch (Exception e) {}
-        }
-      }
-    }
-    return back ;
-  }
-
-  public String readStringAttribute( Element node, String attrName, String defaultValue )
-  {
-    if ( node != null )
-    {
-      String data = node.getAttribute( attrName ) ;
-      if ( data != null )
-      {
-        if ( data.length() > 0 )
-        {
-          return data ;
-        }
-      }
-    }
-    return defaultValue ;
-  }
-
-  public double readDoubleAttribute( Element node, String attrName, double defaultValue )
-  {
-    if ( node != null )
-    {
-      String data = node.getAttribute( attrName ) ;
-      if ( data != null )
-      {
-        if ( data.length() > 0 )
-        {
-          return Double.parseDouble( data ) ;
-        }
-      }
-    }
-    return defaultValue ;
-  }
-
-}
+/*  Copyright (C) 2003-2011 Raik Nagel
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+// function : simple xml reader functions
+
+package net.sf.jabref.util ;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.*;
+import org.xml.sax.SAXException;
+
+public class TXMLReader
+{
+  private Document config ; // XML data
+  private DocumentBuilderFactory factory ;
+  private DocumentBuilder builder ;
+
+  private boolean ready = false ;
+
+  public TXMLReader(String resPath)
+  {
+    factory = DocumentBuilderFactory.newInstance() ;
+    try
+    {
+      builder = factory.newDocumentBuilder() ;
+
+      InputStream stream = null ;
+      if (resPath != null)
+      {
+        stream = TXMLReader.class.getResourceAsStream( resPath ) ;
+      }
+      // not found, check the src/ directory (IDE mode)
+      if (stream == null)
+      {
+        try
+        {
+          stream = new FileInputStream( "src" +resPath ) ;
+        }
+        catch (Exception e)
+        {
+
+        }
+      }
+
+      if (stream != null)
+      {
+        config = builder.parse( stream ) ;
+        ready = true ;
+      }
+    }
+
+    catch ( SAXException sxe )
+    {
+      sxe.printStackTrace() ;
+    }
+    catch ( ParserConfigurationException pce )
+    {
+      pce.printStackTrace() ;
+    }
+    catch ( IOException ioe )
+    {
+      ioe.printStackTrace() ;
+    }
+    catch (Exception oe)
+    {
+      oe.printStackTrace();
+    }
+  }
+
+  // ---------------------------------------------------------------------------
+
+  public boolean isReady()
+  {
+    return ready ;
+  }
+
+
+  public NodeList getNodes( String name )
+  {
+    return config.getElementsByTagName( name ) ;
+  }
+
+  // ---------------------------------------------------------------------------
+
+  private Element getFirstElement( Element element, String name )
+  {
+    NodeList nl = element.getElementsByTagName( name ) ;
+    if ( nl.getLength() < 1 )
+    {
+      throw new RuntimeException(
+          "Element: " + element + " does not contain: " + name ) ;
+    }
+    return ( Element ) nl.item( 0 ) ;
+  }
+
+  /** returns all "plain" data of a subnode with name <name> */
+  public String getSimpleElementText( Element node, String name )
+  {
+    Element namedElement = getFirstElement( node, name ) ;
+    return getSimpleElementText( namedElement ) ;
+  }
+
+  /** collect all "plain" data of a xml node */
+  public String getSimpleElementText( Element node )
+  {
+    StringBuffer sb = new StringBuffer() ;
+    NodeList children = node.getChildNodes() ;
+    for ( int i = 0 ; i < children.getLength() ; i++ )
+    {
+      Node child = children.item( i ) ;
+      if ( child instanceof Text )
+      {
+        sb.append( child.getNodeValue().trim() ) ;
+      }
+    }
+    return sb.toString() ;
+  }
+
+  // ---------------------------------------------------------------------------
+  // read some attributes
+  // --------------------------------------------------------------------------
+  public int readIntegerAttribute( Element node, String attrName, int defaultValue )
+  {
+    int back = defaultValue ;
+    if ( node != null )
+    {
+      String data = node.getAttribute( attrName ) ;
+      if ( data != null )
+      {
+        if ( data.length() > 0 )
+        {
+          try
+          {
+            back = Integer.parseInt( data ) ;
+          }
+          catch (Exception e) {}
+        }
+      }
+    }
+    return back ;
+  }
+
+  public String readStringAttribute( Element node, String attrName, String defaultValue )
+  {
+    if ( node != null )
+    {
+      String data = node.getAttribute( attrName ) ;
+      if ( data != null )
+      {
+        if ( data.length() > 0 )
+        {
+          return data ;
+        }
+      }
+    }
+    return defaultValue ;
+  }
+
+  public double readDoubleAttribute( Element node, String attrName, double defaultValue )
+  {
+    if ( node != null )
+    {
+      String data = node.getAttribute( attrName ) ;
+      if ( data != null )
+      {
+        if ( data.length() > 0 )
+        {
+          return Double.parseDouble( data ) ;
+        }
+      }
+    }
+    return defaultValue ;
+  }
+
+}
diff --git a/src/java/net/sf/jabref/util/XMPSchemaBibtex.java b/src/java/net/sf/jabref/util/XMPSchemaBibtex.java
index 0961ee1..e3259ab 100644
--- a/src/java/net/sf/jabref/util/XMPSchemaBibtex.java
+++ b/src/java/net/sf/jabref/util/XMPSchemaBibtex.java
@@ -1,322 +1,322 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.util;
-
-import java.io.IOException;
-import java.util.*;
-
-import javax.xml.transform.TransformerException;
-
-import net.sf.jabref.*;
-
-import org.apache.jempbox.xmp.XMPMetadata;
-import org.apache.jempbox.xmp.XMPSchema;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-public class XMPSchemaBibtex extends XMPSchema {
-
-	/**
-	 * The namespace of this schema.
-	 */
-	public static final String NAMESPACE = "http://jabref.sourceforge.net/bibteXMP/";
-
-	public static final String KEY = "bibtex";
-
-	/**
-	 * Create a new empty XMPSchemaBibtex as a child in the given XMPMetadata.
-	 * 
-	 * @param parent
-	 */
-	public XMPSchemaBibtex(XMPMetadata parent) {
-		super(parent, KEY, NAMESPACE);
-	}
-
-	/**
-	 * Create schema from an existing XML element.
-	 * 
-	 * @param element
-	 *            The existing XML element.
-	 */
-	public XMPSchemaBibtex(Element e, String namespace) {
-		super(e, KEY);
-	}
-
-	protected String makeProperty(String propertyName) {
-		return KEY + ":" + propertyName;
-	}
-
-	/**
-	 * 
-	 * @param field
-	 * @return
-	 * @derived Uses XMPSchema methods
-	 */
-	public List<String> getPersonList(String field) {
-		return getSequenceList(field);
-	}
-
-	/**
-	 * 
-	 * @param field
-	 * @param value
-	 * @derived Uses XMPSchema methods
-	 */
-	public void setPersonList(String field, String value) {
-		AuthorList list = AuthorList.getAuthorList(value);
-
-		int n = list.size();
-		for (int i = 0; i < n; i++) {
-			addSequenceValue(field, list.getAuthor(i).getFirstLast(false));
-		}
-	}
-
-	public String getTextProperty(String field) {
-		return super.getTextProperty(makeProperty(field));
-	}
-
-	public void setTextProperty(String field, String value) {
-		super.setTextProperty(makeProperty(field), value);
-	}
-
-	@SuppressWarnings("unchecked")
-	public List<String> getBagList(String bagName) {
-		return super.getBagList(makeProperty(bagName));
-	}
-
-	public void removeBagValue(String bagName, String value) {
-		super.removeBagValue(makeProperty(bagName), value);
-	}
-
-	public void addBagValue(String bagName, String value) {
-		super.addBagValue(makeProperty(bagName), value);
-	}
-
-	@SuppressWarnings("unchecked")
-	public List<String> getSequenceList(String seqName) {
-		return super.getSequenceList(makeProperty(seqName));
-	}
-
-	public void removeSequenceValue(String seqName, String value) {
-		super.removeSequenceValue(makeProperty(seqName), value);
-	}
-
-	public void addSequenceValue(String seqName, String value) {
-		super.addSequenceValue(makeProperty(seqName), value);
-	}
-
-	public List<Calendar> getSequenceDateList(String seqName) throws IOException {
-		return super.getSequenceDateList(makeProperty(seqName));
-	}
-
-	public void removeSequenceDateValue(String seqName, Calendar date) {
-		super.removeSequenceDateValue(makeProperty(seqName), date);
-	}
-
-	public void addSequenceDateValue(String field, Calendar date) {
-		super.addSequenceDateValue(makeProperty(field), date);
-	}
-
-	public static String getContents(NodeList seqList) {
-
-		Element seqNode = (Element) seqList.item(0);
-		StringBuffer seq = null;
-
-		NodeList items = seqNode.getElementsByTagName("rdf:li");
-		for (int j = 0; j < items.getLength(); j++) {
-			Element li = (Element) items.item(j);
-			if (seq == null) {
-				seq = new StringBuffer();
-			} else {
-				seq.append(" and ");
-			}
-			seq.append(getTextContent(li));
-		}
-		if (seq != null) {
-			return seq.toString();
-		}
-		return null;
-	}
-
-	/**
-	 * Returns a map of all properties and their values. LIs and bags in seqs
-	 * are concatenated using " and ".
-	 * 
-	 * @return Map from name of textproperty (String) to value (String). For
-	 *         instance: "year" => "2005". Empty map if none found.
-	 * @throws TransformerException
-	 */
-	public static Map<String, String> getAllProperties(XMPSchema schema, String namespaceName) {
-		NodeList nodes = schema.getElement().getChildNodes();
-
-		Map<String, String> result = new HashMap<String, String>();
-
-		if (nodes == null) {
-			return result;
-		}
-
-		// Check child-nodes first
-		int n = nodes.getLength();
-
-		for (int i = 0; i < n; i++) {
-			Node node = nodes.item(i);
-			if (node.getNodeType() != Node.ATTRIBUTE_NODE
-				&& node.getNodeType() != Node.ELEMENT_NODE)
-				continue;
-
-			String nodeName = node.getNodeName();
-
-			String[] split = nodeName.split(":");
-
-			if (split.length == 2 && split[0].equals(namespaceName)) {
-				NodeList seqList = ((Element) node).getElementsByTagName("rdf:Seq");
-				if (seqList.getLength() > 0) {
-
-					String seq = getContents(seqList);
-
-					if (seq != null) {
-						result.put(split[1], seq);
-					}
-				} else {
-					NodeList bagList = ((Element) node).getElementsByTagName("rdf:Bag");
-					if (bagList.getLength() > 0) {
-
-						String seq = getContents(bagList);
-
-						if (seq != null) {
-							result.put(split[1], seq);
-						}
-					} else {
-						result.put(split[1], getTextContent(node));
-					}
-				}
-			}
-		}
-
-		// Then check Attributes
-		NamedNodeMap attrs = schema.getElement().getAttributes();
-		int m = attrs.getLength();
-		for (int j = 0; j < m; j++) {
-			Node attr = attrs.item(j);
-
-			String nodeName = attr.getNodeName();
-			String[] split = nodeName.split(":");
-			if (split.length == 2 && split[0].equals(namespaceName)) {
-				result.put(split[1], attr.getNodeValue());
-			}
-		}
-
-		/*
-		 * Collapse Whitespace
-		 * 
-		 * Quoting from
-		 * http://www.gerg.ca/software/btOOL/doc/bt_postprocess.html: <cite>
-		 * "The exact rules for collapsing whitespace are simple: non-space
-		 * whitespace characters (tabs and newlines mainly) are converted to
-		 * space, any strings of more than one space within are collapsed to a
-		 * single space, and any leading or trailing spaces are deleted."
-		 * </cite>
-		 */
-		
-		for (Map.Entry<String, String> entry : result.entrySet()){
-			String key = entry.getKey();
-			if (preserveWhiteSpace.contains(key))
-				continue;
-			entry.setValue(entry.getValue().replaceAll("\\s+", " ").trim());
-		}
-
-		return result;
-	}
-
-	public static HashSet<String> preserveWhiteSpace = new HashSet<String>();
-	static {
-		preserveWhiteSpace.add("abstract");
-		preserveWhiteSpace.add("note");
-		preserveWhiteSpace.add("review");
-	}
-
-	public void setBibtexEntry(BibtexEntry entry) {
-		setBibtexEntry(entry, null);
-	}
-	
-	/**
-	 * 
-	 * @param entry
-	 * @param database maybenull
-	 */
-	public void setBibtexEntry(BibtexEntry entry, BibtexDatabase database) {
-		// Set all the values including key and entryType
-		Set<String> fields = entry.getAllFields();
-		
-		JabRefPreferences prefs = JabRefPreferences.getInstance();
-		if (prefs.getBoolean("useXmpPrivacyFilter")) {
-			TreeSet<String> filters = new TreeSet<String>(Arrays.asList(prefs.getStringArray("xmpPrivacyFilters")));
-			fields.removeAll(filters);
-		}
-		
-		for (String field : fields){
-			String value = BibtexDatabase.getResolvedField(field, entry, database);
-			if (field.equals("author") || field.equals("editor")) {
-				setPersonList(field, value);
-			} else {
-				setTextProperty(field, value);
-			}
-		}
-		setTextProperty("entrytype", entry.getType().getName());
-	}
-
-	public BibtexEntry getBibtexEntry() {
-
-		String type = getTextProperty("entrytype");
-		BibtexEntryType t;
-		if (type != null)
-			t = BibtexEntryType.getStandardType(type);
-		else
-			t = BibtexEntryType.OTHER;
-
-		BibtexEntry e = new BibtexEntry(Util.createNeutralId(), t);
-
-		// Get Text Properties
-		Map<String, String> text = getAllProperties(this, "bibtex");
-		text.remove("entrytype");
-		e.setField(text);
-		return e;
-	}
-
-	/**
-	 * Taken from DOM2Utils.java:
-	 * 
-	 * JBoss, the OpenSource EJB server
-	 * 
-	 * Distributable under LGPL license. See terms of license at gnu.org.
-	 */
-	public static String getTextContent(Node node) {
-		boolean hasTextContent = false;
-		StringBuffer buffer = new StringBuffer();
-		NodeList nlist = node.getChildNodes();
-		for (int i = 0; i < nlist.getLength(); i++) {
-			Node child = nlist.item(i);
-			if (child.getNodeType() == Node.TEXT_NODE) {
-				buffer.append(child.getNodeValue());
-				hasTextContent = true;
-			}
-		}
-		return (hasTextContent ? buffer.toString() : "");
-	}
-
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.util;
+
+import java.io.IOException;
+import java.util.*;
+
+import javax.xml.transform.TransformerException;
+
+import net.sf.jabref.*;
+
+import org.apache.jempbox.xmp.XMPMetadata;
+import org.apache.jempbox.xmp.XMPSchema;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class XMPSchemaBibtex extends XMPSchema {
+
+	/**
+	 * The namespace of this schema.
+	 */
+	public static final String NAMESPACE = "http://jabref.sourceforge.net/bibteXMP/";
+
+	public static final String KEY = "bibtex";
+
+	/**
+	 * Create a new empty XMPSchemaBibtex as a child in the given XMPMetadata.
+	 * 
+	 * @param parent
+	 */
+	public XMPSchemaBibtex(XMPMetadata parent) {
+		super(parent, KEY, NAMESPACE);
+	}
+
+	/**
+	 * Create schema from an existing XML element.
+	 * 
+	 * @param element
+	 *            The existing XML element.
+	 */
+	public XMPSchemaBibtex(Element e, String namespace) {
+		super(e, KEY);
+	}
+
+	protected String makeProperty(String propertyName) {
+		return KEY + ":" + propertyName;
+	}
+
+	/**
+	 * 
+	 * @param field
+	 * @return
+	 * @derived Uses XMPSchema methods
+	 */
+	public List<String> getPersonList(String field) {
+		return getSequenceList(field);
+	}
+
+	/**
+	 * 
+	 * @param field
+	 * @param value
+	 * @derived Uses XMPSchema methods
+	 */
+	public void setPersonList(String field, String value) {
+		AuthorList list = AuthorList.getAuthorList(value);
+
+		int n = list.size();
+		for (int i = 0; i < n; i++) {
+			addSequenceValue(field, list.getAuthor(i).getFirstLast(false));
+		}
+	}
+
+	public String getTextProperty(String field) {
+		return super.getTextProperty(makeProperty(field));
+	}
+
+	public void setTextProperty(String field, String value) {
+		super.setTextProperty(makeProperty(field), value);
+	}
+
+	@SuppressWarnings("unchecked")
+	public List<String> getBagList(String bagName) {
+		return super.getBagList(makeProperty(bagName));
+	}
+
+	public void removeBagValue(String bagName, String value) {
+		super.removeBagValue(makeProperty(bagName), value);
+	}
+
+	public void addBagValue(String bagName, String value) {
+		super.addBagValue(makeProperty(bagName), value);
+	}
+
+	@SuppressWarnings("unchecked")
+	public List<String> getSequenceList(String seqName) {
+		return super.getSequenceList(makeProperty(seqName));
+	}
+
+	public void removeSequenceValue(String seqName, String value) {
+		super.removeSequenceValue(makeProperty(seqName), value);
+	}
+
+	public void addSequenceValue(String seqName, String value) {
+		super.addSequenceValue(makeProperty(seqName), value);
+	}
+
+	public List<Calendar> getSequenceDateList(String seqName) throws IOException {
+		return super.getSequenceDateList(makeProperty(seqName));
+	}
+
+	public void removeSequenceDateValue(String seqName, Calendar date) {
+		super.removeSequenceDateValue(makeProperty(seqName), date);
+	}
+
+	public void addSequenceDateValue(String field, Calendar date) {
+		super.addSequenceDateValue(makeProperty(field), date);
+	}
+
+	public static String getContents(NodeList seqList) {
+
+		Element seqNode = (Element) seqList.item(0);
+		StringBuffer seq = null;
+
+		NodeList items = seqNode.getElementsByTagName("rdf:li");
+		for (int j = 0; j < items.getLength(); j++) {
+			Element li = (Element) items.item(j);
+			if (seq == null) {
+				seq = new StringBuffer();
+			} else {
+				seq.append(" and ");
+			}
+			seq.append(getTextContent(li));
+		}
+		if (seq != null) {
+			return seq.toString();
+		}
+		return null;
+	}
+
+	/**
+	 * Returns a map of all properties and their values. LIs and bags in seqs
+	 * are concatenated using " and ".
+	 * 
+	 * @return Map from name of textproperty (String) to value (String). For
+	 *         instance: "year" => "2005". Empty map if none found.
+	 * @throws TransformerException
+	 */
+	public static Map<String, String> getAllProperties(XMPSchema schema, String namespaceName) {
+		NodeList nodes = schema.getElement().getChildNodes();
+
+		Map<String, String> result = new HashMap<String, String>();
+
+		if (nodes == null) {
+			return result;
+		}
+
+		// Check child-nodes first
+		int n = nodes.getLength();
+
+		for (int i = 0; i < n; i++) {
+			Node node = nodes.item(i);
+			if (node.getNodeType() != Node.ATTRIBUTE_NODE
+				&& node.getNodeType() != Node.ELEMENT_NODE)
+				continue;
+
+			String nodeName = node.getNodeName();
+
+			String[] split = nodeName.split(":");
+
+			if (split.length == 2 && split[0].equals(namespaceName)) {
+				NodeList seqList = ((Element) node).getElementsByTagName("rdf:Seq");
+				if (seqList.getLength() > 0) {
+
+					String seq = getContents(seqList);
+
+					if (seq != null) {
+						result.put(split[1], seq);
+					}
+				} else {
+					NodeList bagList = ((Element) node).getElementsByTagName("rdf:Bag");
+					if (bagList.getLength() > 0) {
+
+						String seq = getContents(bagList);
+
+						if (seq != null) {
+							result.put(split[1], seq);
+						}
+					} else {
+						result.put(split[1], getTextContent(node));
+					}
+				}
+			}
+		}
+
+		// Then check Attributes
+		NamedNodeMap attrs = schema.getElement().getAttributes();
+		int m = attrs.getLength();
+		for (int j = 0; j < m; j++) {
+			Node attr = attrs.item(j);
+
+			String nodeName = attr.getNodeName();
+			String[] split = nodeName.split(":");
+			if (split.length == 2 && split[0].equals(namespaceName)) {
+				result.put(split[1], attr.getNodeValue());
+			}
+		}
+
+		/*
+		 * Collapse Whitespace
+		 * 
+		 * Quoting from
+		 * http://www.gerg.ca/software/btOOL/doc/bt_postprocess.html: <cite>
+		 * "The exact rules for collapsing whitespace are simple: non-space
+		 * whitespace characters (tabs and newlines mainly) are converted to
+		 * space, any strings of more than one space within are collapsed to a
+		 * single space, and any leading or trailing spaces are deleted."
+		 * </cite>
+		 */
+		
+		for (Map.Entry<String, String> entry : result.entrySet()){
+			String key = entry.getKey();
+			if (preserveWhiteSpace.contains(key))
+				continue;
+			entry.setValue(entry.getValue().replaceAll("\\s+", " ").trim());
+		}
+
+		return result;
+	}
+
+	public static HashSet<String> preserveWhiteSpace = new HashSet<String>();
+	static {
+		preserveWhiteSpace.add("abstract");
+		preserveWhiteSpace.add("note");
+		preserveWhiteSpace.add("review");
+	}
+
+	public void setBibtexEntry(BibtexEntry entry) {
+		setBibtexEntry(entry, null);
+	}
+	
+	/**
+	 * 
+	 * @param entry
+	 * @param database maybenull
+	 */
+	public void setBibtexEntry(BibtexEntry entry, BibtexDatabase database) {
+		// Set all the values including key and entryType
+		Set<String> fields = entry.getAllFields();
+		
+		JabRefPreferences prefs = JabRefPreferences.getInstance();
+		if (prefs.getBoolean("useXmpPrivacyFilter")) {
+			TreeSet<String> filters = new TreeSet<String>(Arrays.asList(prefs.getStringArray("xmpPrivacyFilters")));
+			fields.removeAll(filters);
+		}
+		
+		for (String field : fields){
+			String value = BibtexDatabase.getResolvedField(field, entry, database);
+			if (field.equals("author") || field.equals("editor")) {
+				setPersonList(field, value);
+			} else {
+				setTextProperty(field, value);
+			}
+		}
+		setTextProperty("entrytype", entry.getType().getName());
+	}
+
+	public BibtexEntry getBibtexEntry() {
+
+		String type = getTextProperty("entrytype");
+		BibtexEntryType t;
+		if (type != null)
+			t = BibtexEntryType.getStandardType(type);
+		else
+			t = BibtexEntryType.OTHER;
+
+		BibtexEntry e = new BibtexEntry(Util.createNeutralId(), t);
+
+		// Get Text Properties
+		Map<String, String> text = getAllProperties(this, "bibtex");
+		text.remove("entrytype");
+		e.setField(text);
+		return e;
+	}
+
+	/**
+	 * Taken from DOM2Utils.java:
+	 * 
+	 * JBoss, the OpenSource EJB server
+	 * 
+	 * Distributable under LGPL license. See terms of license at gnu.org.
+	 */
+	public static String getTextContent(Node node) {
+		boolean hasTextContent = false;
+		StringBuffer buffer = new StringBuffer();
+		NodeList nlist = node.getChildNodes();
+		for (int i = 0; i < nlist.getLength(); i++) {
+			Node child = nlist.item(i);
+			if (child.getNodeType() == Node.TEXT_NODE) {
+				buffer.append(child.getNodeValue());
+				hasTextContent = true;
+			}
+		}
+		return (hasTextContent ? buffer.toString() : "");
+	}
+
+}
diff --git a/src/java/net/sf/jabref/util/XMPUtil.java b/src/java/net/sf/jabref/util/XMPUtil.java
index 4e8e5b9..6c27079 100644
--- a/src/java/net/sf/jabref/util/XMPUtil.java
+++ b/src/java/net/sf/jabref/util/XMPUtil.java
@@ -1,1281 +1,1281 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.util;
-
-import java.io.*;
-import java.util.*;
-
-import javax.xml.transform.TransformerException;
-
-import net.sf.jabref.*;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.imports.ParserResult;
-
-import org.apache.jempbox.impl.DateConverter;
-import org.apache.jempbox.impl.XMLUtil;
-import org.apache.jempbox.xmp.XMPMetadata;
-import org.apache.jempbox.xmp.XMPSchema;
-import org.apache.jempbox.xmp.XMPSchemaDublinCore;
-import org.apache.pdfbox.cos.COSDictionary;
-import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.exceptions.COSVisitorException;
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
-import org.apache.pdfbox.pdmodel.PDDocumentInformation;
-import org.apache.pdfbox.pdmodel.common.PDMetadata;
-
-/**
- * XMPUtils provide support for reading and writing BibTex data as XMP-Metadata
- * in PDF-documents.
- * 
- * @author Christopher Oezbek <oezi at oezi.de>
- * 
- * TODO:
- * 
- * Synchronization
- * 
- * @version $Revision$ ($Date$)
- */
-public class XMPUtil {
-
-	/**
-	 * Convenience method for readXMP(File).
-	 * 
-	 * @param filename
-	 *            The filename from which to open the file.
-	 * @return BibtexEntryies found in the PDF or an empty list
-	 * @throws IOException
-	 */
-	public static List<BibtexEntry> readXMP(String filename) throws IOException {
-		return readXMP(new File(filename));
-	}
-
-	/**
-	 * Try to write the given BibTexEntry in the XMP-stream of the given
-	 * PDF-file.
-	 * 
-	 * Throws an IOException if the file cannot be read or written, so the user
-	 * can remove a lock or cancel the operation.
-	 * 
-	 * The method will overwrite existing BibTeX-XMP-data, but keep other
-	 * existing metadata.
-	 * 
-	 * This is a convenience method for writeXMP(File, BibtexEntry).
-	 * 
-	 * @param filename
-	 *            The filename from which to open the file.
-	 * @param entry
-	 *            The entry to write.
-	 * @param database
-	 *            maybenull An optional database which the given bibtex entries
-	 *            belong to, which will be used to resolve strings. If the
-	 *            database is null the strings will not be resolved.
-	 * @throws TransformerException
-	 *             If the entry was malformed or unsupported.
-	 * @throws IOException
-	 *             If the file could not be written to or could not be found.
-	 */
-	public static void writeXMP(String filename, BibtexEntry entry,
-			BibtexDatabase database) throws IOException, TransformerException {
-		writeXMP(new File(filename), entry, database);
-	}
-
-	/**
-	 * Try to read the BibTexEntries from the XMP-stream of the given PDF-file.
-	 * 
-	 * @param file
-	 *            The file to read from.
-	 * 
-	 * @throws IOException
-	 *             Throws an IOException if the file cannot be read, so the user
-	 *             than remove a lock or cancel the operation.
-	 */
-	public static List<BibtexEntry> readXMP(File file) throws IOException {
-		FileInputStream is = new FileInputStream(file);
-		try {
-			return readXMP(is);
-		} finally {
-			is.close();
-		}
-	}
-
-	/**
-	 * Try to read the given BibTexEntry from the XMP-stream of the given
-	 * inputstream containing a PDF-file.
-	 * 
-	 * @param file
-	 *            The inputstream to read from.
-	 * 
-	 * @throws IOException
-	 *             Throws an IOException if the file cannot be read, so the user
-	 *             than remove a lock or cancel the operation.
-	 */
-	@SuppressWarnings("unchecked")
-	public static List<BibtexEntry> readXMP(InputStream inputStream)
-			throws IOException {
-
-		List<BibtexEntry> result = new LinkedList<BibtexEntry>();
-
-		PDDocument document = null;
-
-		try {
-			document = PDDocument.load(inputStream);
-			if (document.isEncrypted()) {
-				throw new EncryptionNotSupportedException(
-						"Error: Cannot read metadata from encrypted document.");
-			}
-
-			XMPMetadata meta = getXMPMetadata(document);
-
-			// If we did not find any XMP metadata, search for non XMP metadata
-			if (meta != null) {
-
-        			List<XMPSchema> schemas = meta
-        					.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
-        
-        			Iterator<XMPSchema> it = schemas.iterator();
-        			while (it.hasNext()) {
-        				XMPSchemaBibtex bib = (XMPSchemaBibtex) it.next();
-        
-        				result.add(bib.getBibtexEntry());
-        			}
-        
-        			// If we did not find anything have a look if a Dublin Core exists
-        			if (result.size() == 0) {
-        				schemas = meta
-        						.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
-        				it = schemas.iterator();
-        				while (it.hasNext()) {
-        					XMPSchemaDublinCore dc = (XMPSchemaDublinCore) it.next();
-        
-        					BibtexEntry entry = getBibtexEntryFromDublinCore(dc);
-        
-        					if (entry != null)
-        						result.add(entry);
-        				}
-        			}
-			}
-			if (result.size() == 0) {
-				BibtexEntry entry = getBibtexEntryFromDocumentInformation(document
-						.getDocumentInformation());
-
-				if (entry != null)
-					result.add(entry);
-			}
-		} finally {
-			if (document != null)
-				document.close();
-		}
-		
-		// return null, if no metadata was found
-		if (result.size()==0) return null;
-		return result;
-	}
-
-	/**
-	 * Helper function for retrieving a BibtexEntry from the
-	 * PDDocumentInformation in a PDF file.
-	 * 
-	 * To understand how to get hold of a PDDocumentInformation have a look in
-	 * the test cases for XMPUtil.
-	 * 
-	 * The BibtexEntry is build by mapping individual fields in the document
-	 * information (like author, title, keywords) to fields in a bibtex entry.
-	 * 
-	 * @param di
-	 *            The document information from which to build a BibtexEntry.
-	 * 
-	 * @return The bibtex entry found in the document information.
-	 */
-	@SuppressWarnings("unchecked")
-	public static BibtexEntry getBibtexEntryFromDocumentInformation(
-			PDDocumentInformation di) {
-
-		BibtexEntry entry = new BibtexEntry();
-
-		String s = di.getAuthor();
-		if (s != null)
-			entry.setField("author", s);
-
-		s = di.getTitle();
-		if (s != null)
-			entry.setField("title", s);
-
-		s = di.getKeywords();
-		if (s != null)
-			entry.setField("keywords", s);
-
-		s = di.getSubject();
-		if (s != null)
-			entry.setField("abstract", s);
-
-		COSDictionary dict = di.getDictionary();
-		Iterator it = dict.keyList().iterator();
-		while (it.hasNext()) {
-			String key = ((COSName) it.next()).getName();
-			if (key.startsWith("bibtex/")) {
-				String value = dict.getString(key);
-				key = key.substring("bibtex/".length());
-				if (key.equals("entrytype")) {
-					BibtexEntryType type = BibtexEntryType
-							.getStandardType(value);
-					if (type != null)
-						entry.setType(type);
-				} else
-					entry.setField(key, value);
-			}
-		}
-
-		// Return null if no values were found
-		return (entry.getAllFields().size() > 0 ? entry : null);
-	}
-
-	/**
-	 * Helper function for retrieving a BibtexEntry from the DublinCore metadata
-	 * in a PDF file.
-	 * 
-	 * To understand how to get hold of a XMPSchemaDublinCore have a look in the
-	 * test cases for XMPUtil.
-	 * 
-	 * The BibtexEntry is build by mapping individual fields in the dublin core
-	 * (like creator, title, subject) to fields in a bibtex entry.
-	 * 
-	 * @param di
-	 *            The document information from which to build a BibtexEntry.
-	 * 
-	 * @return The bibtex entry found in the document information.
-	 */
-	@SuppressWarnings("unchecked")
-	public static BibtexEntry getBibtexEntryFromDublinCore(
-			XMPSchemaDublinCore dcSchema) {
-
-		BibtexEntry entry = new BibtexEntry();
-
-		/**
-		 * Contributor -> Editor
-		 */
-		List contributors = dcSchema.getContributors();
-		if (contributors != null) {
-			Iterator it = contributors.iterator();
-			StringBuffer sb = null;
-			while (it.hasNext()) {
-				if (sb != null) {
-					sb.append(" and ");
-				} else {
-					sb = new StringBuffer();
-				}
-				sb.append(it.next());
-			}
-			if (sb != null)
-				entry.setField("editor", sb.toString());
-		}
-
-		/**
-		 * Author -> Creator
-		 */
-		List creators = dcSchema.getCreators();
-		if (creators != null) {
-			Iterator it = creators.iterator();
-			StringBuffer sb = null;
-			while (it.hasNext()) {
-				if (sb != null) {
-					sb.append(" and ");
-				} else {
-					sb = new StringBuffer();
-				}
-				sb.append(it.next());
-			}
-			if (sb != null)
-				entry.setField("author", sb.toString());
-		}
-
-		/**
-		 * Year + Month -> Date
-		 */
-		List dates = dcSchema.getSequenceList("dc:date");
-		if (dates != null && dates.size() > 0) {
-			String date = ((String) dates.get(0)).trim();
-			Calendar c = null;
-			try {
-				c = DateConverter.toCalendar(date);
-			} catch (Exception e) {
-
-			}
-			if (c != null) {
-				entry.setField("year", String.valueOf(c.get(Calendar.YEAR)));
-				if (date.length() > 4) {
-					entry.setField("month", "#"
-							+ Globals.MONTHS[c.get(Calendar.MONTH)] + "#");
-				}
-			}
-		}
-
-		/**
-		 * Abstract -> Description
-		 */
-		String s = dcSchema.getDescription();
-		if (s != null)
-			entry.setField("abstract", s);
-
-		/**
-		 * Identifier -> DOI
-		 */
-		s = dcSchema.getIdentifier();
-		if (s != null)
-			entry.setField("doi", s);
-
-		/**
-		 * Publisher -> Publisher
-		 */
-		List publishers = dcSchema.getPublishers();
-		if (publishers != null) {
-			Iterator it = dcSchema.getPublishers().iterator();
-			StringBuffer sb = null;
-			while (it.hasNext()) {
-				if (sb != null) {
-					sb.append(" and ");
-				} else {
-					sb = new StringBuffer();
-				}
-				sb.append(it.next());
-			}
-			if (sb != null)
-				entry.setField("publishers", sb.toString());
-		}
-
-		/**
-		 * Relation -> bibtexkey
-		 * 
-		 * We abuse the relationship attribute to store all other values in the
-		 * bibtex document
-		 */
-		List relationships = dcSchema.getRelationships();
-		if (relationships != null) {
-			Iterator it = relationships.iterator();
-			while (it.hasNext()) {
-				s = (String) it.next();
-				if (s.startsWith("bibtex/")) {
-					s = s.substring("bibtex/".length());
-					int i = s.indexOf('/');
-					if (i != -1) {
-						entry.setField(s.substring(0, i), s.substring(i + 1));
-					}
-				}
-			}
-		}
-
-		/**
-		 * Rights -> Rights
-		 */
-		s = dcSchema.getRights();
-		if (s != null)
-			entry.setField("rights", s);
-
-		/**
-		 * Source -> Source
-		 */
-		s = dcSchema.getSource();
-		if (s != null)
-			entry.setField("source", s);
-
-		/**
-		 * Subject -> Keywords
-		 */
-		List subjects = dcSchema.getSubjects();
-		if (subjects != null) {
-			Iterator it = subjects.iterator();
-			StringBuffer sb = null;
-			while (it.hasNext()) {
-				if (sb != null) {
-					sb.append(",");
-				} else {
-					sb = new StringBuffer();
-				}
-				sb.append(it.next());
-			}
-			if (sb != null)
-				entry.setField("keywords", sb.toString());
-		}
-
-		/**
-		 * Title -> Title
-		 */
-		s = dcSchema.getTitle();
-		if (s != null)
-			entry.setField("title", s);
-
-		/**
-		 * Type -> Type
-		 */
-		List l = dcSchema.getTypes();
-		if (l != null && l.size() > 0) {
-			s = (String) l.get(0);
-			if (s != null) {
-				BibtexEntryType type = BibtexEntryType.getStandardType(s);
-				if (type != null)
-					entry.setType(type);
-			}
-		}
-
-		return (entry.getAllFields().size() > 0 ? entry : null);
-	}
-
-	/**
-	 * Try to write the given BibTexEntry in the XMP-stream of the given
-	 * PDF-file.
-	 * 
-	 * Throws an IOException if the file cannot be read or written, so the user
-	 * can remove a lock or cancel the operation.
-	 * 
-	 * The method will overwrite existing BibTeX-XMP-data, but keep other
-	 * existing metadata.
-	 * 
-	 * This is a convenience method for writeXMP(File, Collection).
-	 * 
-	 * @param file
-	 *            The file to write to.
-	 * @param entry
-	 *            The entry to write.
-	 * @param database
-	 *            maybenull An optional database which the given bibtex entries
-	 *            belong to, which will be used to resolve strings. If the
-	 *            database is null the strings will not be resolved.
-	 * @throws TransformerException
-	 *             If the entry was malformed or unsupported.
-	 * @throws IOException
-	 *             If the file could not be written to or could not be found.
-	 */
-	public static void writeXMP(File file, BibtexEntry entry,
-			BibtexDatabase database) throws IOException, TransformerException {
-		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
-		l.add(entry);
-		writeXMP(file, l, database, true);
-	}
-
-	/**
-	 * Write the given BibtexEntries as XMP-metadata text to the given stream.
-	 * 
-	 * The text that is written to the stream contains a complete XMP-document.
-	 * 
-	 * @param bibtexEntries
-	 *            The BibtexEntries to write XMP-metadata for.
-	 * @param database
-	 *            maybenull An optional database which the given bibtex entries
-	 *            belong to, which will be used to resolve strings. If the
-	 *            database is null the strings will not be resolved.
-	 * @throws TransformerException
-	 *             Thrown if the bibtexEntries could not transformed to XMP.
-	 * @throws IOException
-	 *             Thrown if an IOException occured while writing to the stream.
-	 * 
-	 * @see #toXMP(Collection, OutputStream) if you don't need strings to be
-	 *      resolved.
-	 */
-	public static void toXMP(Collection<BibtexEntry> bibtexEntries,
-			BibtexDatabase database, OutputStream outputStream)
-			throws IOException, TransformerException {
-
-		if (database != null)
-			bibtexEntries = database.resolveForStrings(bibtexEntries, true);
-
-		XMPMetadata x = new XMPMetadata();
-
-		Iterator<BibtexEntry> it = bibtexEntries.iterator();
-		while (it.hasNext()) {
-			BibtexEntry e = it.next();
-			XMPSchemaBibtex schema = new XMPSchemaBibtex(x);
-			x.addSchema(schema);
-			schema.setBibtexEntry(e);
-		}
-
-		x.save(outputStream);
-	}
-
-	/**
-	 * Convenience method for toXMP(Collection<BibtexEntry>, BibtexDatabase,
-	 * OutputStream) returning a String containing the XMP-metadata of the given
-	 * collection of BibtexEntries.
-	 * 
-	 * The resulting metadata string is wrapped as a complete XMP-document.
-	 * 
-	 * @param bibtexEntries
-	 *            The BibtexEntries to return XMP-metadata for. 
-	 * @param database
-	 *            maybenull An optional database which the given bibtex entries
-	 *            belong to, which will be used to resolve strings. If the
-	 *            database is null the strings will not be resolved.
-	 * @return The XMP representation of the given bibtexEntries.
-	 * @throws TransformerException
-	 *             Thrown if the bibtexEntries could not transformed to XMP.
-	 */
-	public static String toXMP(Collection<BibtexEntry> bibtexEntries,
-			BibtexDatabase database) throws TransformerException {
-		try {
-			ByteArrayOutputStream bs = new ByteArrayOutputStream();
-			toXMP(bibtexEntries, database, bs);
-			return bs.toString();
-		} catch (IOException e) {
-			throw new TransformerException(e);
-		}
-	}
-
-	/**
-	 * Will read the XMPMetadata from the given pdf file, closing the file
-	 * afterwards.
-	 * 
-	 * @param inputStream
-	 *            The inputStream representing a PDF-file to read the
-	 *            XMPMetadata from.
-	 * @return The XMPMetadata object found in the file or null if none is
-	 *         found.
-	 * @throws IOException
-	 */
-	public static XMPMetadata readRawXMP(InputStream inputStream)
-			throws IOException {
-		PDDocument document = null;
-
-		try {
-			document = PDDocument.load(inputStream);
-			if (document.isEncrypted()) {
-				throw new EncryptionNotSupportedException(
-						"Error: Cannot read metadata from encrypted document.");
-			}
-
-			return getXMPMetadata(document);
-
-		} finally {
-			if (document != null)
-				document.close();
-		}
-	}
-
-	static XMPMetadata getXMPMetadata(PDDocument document) throws IOException {
-		PDDocumentCatalog catalog = document.getDocumentCatalog();
-		PDMetadata metaRaw = catalog.getMetadata();
-
-		if (metaRaw == null) {
-			return null;
-		}
-
-		XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw
-				.createInputStream()));
-		meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE, XMPSchemaBibtex.class);
-		return meta;
-	}
-
-	/**
-	 * Will read the XMPMetadata from the given pdf file, closing the file
-	 * afterwards.
-	 * 
-	 * @param file
-	 *            The file to read the XMPMetadata from.
-	 * @return The XMPMetadata object found in the file or null if none is
-	 *         found.
-	 * @throws IOException
-	 */
-	public static XMPMetadata readRawXMP(File file) throws IOException {
-		FileInputStream is = new FileInputStream(file);
-		try {
-			return readRawXMP(is);
-		} finally {
-			is.close();
-		}
-	}
-
-	static void writeToDCSchema(XMPSchemaDublinCore dcSchema,
-			BibtexEntry entry, BibtexDatabase database) {
-
-		if (database != null)
-			entry = database.resolveForStrings(entry, false);
-
-		// Set all the values including key and entryType
-		
-		for (String field : entry.getAllFields()){
-
-			if (field.equals("editor")) {
-				String o = entry.getField(field.toString()).toString();
-
-				/**
-				 * Editor -> Contributor
-				 * 
-				 * Field: dc:contributor
-				 * 
-				 * Type: bag ProperName
-				 * 
-				 * Category: External
-				 * 
-				 * Description: Contributors to the resource (other than the
-				 * authors).
-				 * 
-				 * Bibtex-Fields used: editor
-				 */
-
-				String authors = o.toString();
-				AuthorList list = AuthorList.getAuthorList(authors);
-
-				int n = list.size();
-				for (int i = 0; i < n; i++) {
-					dcSchema.addContributor(list.getAuthor(i).getFirstLast(
-							false));
-				}
-				continue;
-			}
-
-			/**
-			 * ? -> Coverage
-			 * 
-			 * Unmapped
-			 * 
-			 * dc:coverage Text External The extent or scope of the resource.
-			 */
-
-			/**
-			 * Author -> Creator
-			 * 
-			 * Field: dc:creator
-			 * 
-			 * Type: seq ProperName
-			 * 
-			 * Category: External
-			 * 
-			 * Description: The authors of the resource (listed in order of
-			 * precedence, if significant).
-			 * 
-			 * Bibtex-Fields used: author
-			 */
-			if (field.equals("author")) {
-				String o = entry.getField(field.toString()).toString();
-				String authors = o.toString();
-				AuthorList list = AuthorList.getAuthorList(authors);
-
-				int n = list.size();
-				for (int i = 0; i < n; i++) {
-					dcSchema.addCreator(list.getAuthor(i).getFirstLast(false));
-				}
-				continue;
-			}
-
-			if (field.equals("month")) {
-				// Dealt with in year
-				continue;
-			}
-
-			if (field.equals("year")) {
-
-				/**
-				 * Year + Month -> Date
-				 * 
-				 * Field: dc:date
-				 * 
-				 * Type: seq Date
-				 * 
-				 * Category: External
-				 * 
-				 * Description: Date(s) that something interesting happened to
-				 * the resource.
-				 * 
-				 * Bibtex-Fields used: year, month
-				 */
-				String publicationDate = Util.getPublicationDate(entry);
-				if (publicationDate != null) {
-					dcSchema.addSequenceValue("dc:date", publicationDate);
-				}
-				continue;
-			}
-			/**
-			 * Abstract -> Description
-			 * 
-			 * Field: dc:description
-			 * 
-			 * Type: Lang Alt
-			 * 
-			 * Category: External
-			 * 
-			 * Description: A textual description of the content of the
-			 * resource. Multiple values may be present for different languages.
-			 * 
-			 * Bibtex-Fields used: abstract
-			 */
-			if (field.equals("abstract")) {
-				String o = entry.getField(field.toString()).toString();
-				dcSchema.setDescription(o.toString());
-				continue;
-			}
-
-			/**
-			 * DOI -> identifier
-			 * 
-			 * Field: dc:identifier
-			 * 
-			 * Type: Text
-			 * 
-			 * Category: External
-			 * 
-			 * Description: Unique identifier of the resource.
-			 * 
-			 * Bibtex-Fields used: doi
-			 */
-			if (field.equals("doi")) {
-				String o = entry.getField(field.toString()).toString();
-				dcSchema.setIdentifier(o.toString());
-				continue;
-			}
-
-			/**
-			 * ? -> Language
-			 * 
-			 * Unmapped
-			 * 
-			 * dc:language bag Locale Internal An unordered array specifying the
-			 * languages used in the resource.
-			 */
-
-			/**
-			 * Publisher -> Publisher
-			 * 
-			 * Field: dc:publisher
-			 * 
-			 * Type: bag ProperName
-			 * 
-			 * Category: External
-			 * 
-			 * Description: Publishers.
-			 * 
-			 * Bibtex-Fields used: doi
-			 */
-			if (field.equals("publisher")) {
-				String o = entry.getField(field.toString()).toString();
-				dcSchema.addPublisher(o.toString());
-				continue;
-			}
-
-			/**
-			 * ? -> Rights
-			 * 
-			 * Unmapped
-			 * 
-			 * dc:rights Lang Alt External Informal rights statement, selected
-			 * by language.
-			 */
-
-			/**
-			 * ? -> Source
-			 * 
-			 * Unmapped
-			 * 
-			 * dc:source Text External Unique identifier of the work from which
-			 * this resource was derived.
-			 */
-
-			/**
-			 * Keywords -> Subject
-			 * 
-			 * Field: dc:subject
-			 * 
-			 * Type: bag Text
-			 * 
-			 * Category: External
-			 * 
-			 * Description: An unordered array of descriptive phrases or
-			 * keywords that specify the topic of the content of the resource.
-			 * 
-			 * Bibtex-Fields used: doi
-			 */
-			if (field.equals("keywords")) {
-				String o = entry.getField(field.toString()).toString();
-				String[] keywords = o.toString().split(",");
-				for (int i = 0; i < keywords.length; i++) {
-					dcSchema.addSubject(keywords[i].trim());
-				}
-				continue;
-			}
-
-			/**
-			 * Title -> Title
-			 * 
-			 * Field: dc:title
-			 * 
-			 * Type: Lang Alt
-			 * 
-			 * Category: External
-			 * 
-			 * Description: The title of the document, or the name given to the
-			 * resource. Typically, it will be a name by which the resource is
-			 * formally known.
-			 * 
-			 * Bibtex-Fields used: title
-			 */
-			if (field.equals("title")) {
-				String o = entry.getField(field.toString()).toString();
-				dcSchema.setTitle(o.toString());
-				continue;
-			}
-
-			/**
-			 * bibtextype -> relation
-			 * 
-			 * Field: dc:relation
-			 * 
-			 * Type: bag Text
-			 * 
-			 * Category: External
-			 * 
-			 * Description: Relationships to other documents.
-			 * 
-			 * Bibtex-Fields used: bibtextype
-			 */
-			/**
-			 * All others (including the bibtex key) get packaged in the
-			 * relation attribute
-			 */
-			String o = entry.getField(field.toString()).toString();
-			dcSchema.addRelation("bibtex/" + field.toString() + "/" + o);
-		}
-
-		/**
-		 * ? -> Format
-		 * 
-		 * Unmapped
-		 * 
-		 * dc:format MIMEType Internal The file format used when saving the
-		 * resource. Tools and applications should set this property to the save
-		 * format of the data. It may include appropriate qualifiers.
-		 */
-		dcSchema.setFormat("application/pdf");
-
-		/**
-		 * Type -> Type
-		 * 
-		 * Field: dc:type
-		 * 
-		 * Type: bag open Choice
-		 * 
-		 * Category: External
-		 * 
-		 * Description: A document type; for example, novel, poem, or working
-		 * paper.
-		 * 
-		 * Bibtex-Fields used: title
-		 */
-		Object o = entry.getType().getName();
-		if (o != null)
-			dcSchema.addType(o.toString());
-	}
-
-	/**
-	 * Try to write the given BibTexEntry as a DublinCore XMP Schema
-	 * 
-	 * Existing DublinCore schemas in the document are not modified.
-	 * 
-	 * @param document
-	 *            The pdf document to write to.
-	 * @param entry
-	 *            The Bibtex entry that is written as a schema.
-	 * @param database
-	 *            maybenull An optional database which the given bibtex entries
-	 *            belong to, which will be used to resolve strings. If the
-	 *            database is null the strings will not be resolved.
-	 * @throws IOException
-	 * @throws TransformerException
-	 */
-	public static void writeDublinCore(PDDocument document, BibtexEntry entry,
-			BibtexDatabase database) throws IOException, TransformerException {
-
-		List<BibtexEntry> entries = new ArrayList<BibtexEntry>();
-		entries.add(entry);
-
-		writeDublinCore(document, entries, database);
-	}
-
-	/**
-	 * Try to write the given BibTexEntries as DublinCore XMP Schemas
-	 * 
-	 * Existing DublinCore schemas in the document are removed
-	 * 
-	 * @param document
-	 *            The pdf document to write to.
-	 * @param entries
-	 *            The Bibtex entries that are written as schemas
-	 * @param database
-	 *            maybenull An optional database which the given bibtex entries
-	 *            belong to, which will be used to resolve strings. If the
-	 *            database is null the strings will not be resolved.
-	 * @throws IOException
-	 * @throws TransformerException
-	 */
-	@SuppressWarnings("unchecked")
-	public static void writeDublinCore(PDDocument document,
-			Collection<BibtexEntry> entries, BibtexDatabase database)
-			throws IOException, TransformerException {
-
-		if (database != null)
-			entries = database.resolveForStrings(entries, false);
-
-		PDDocumentCatalog catalog = document.getDocumentCatalog();
-		PDMetadata metaRaw = catalog.getMetadata();
-
-		XMPMetadata meta;
-		if (metaRaw != null) {
-			meta = new XMPMetadata(XMLUtil.parse(metaRaw.createInputStream()));
-		} else {
-			meta = new XMPMetadata();
-		}
-
-		// Remove all current Dublin-Core schemas
-		List schemas = meta
-				.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
-		Iterator it = schemas.iterator();
-		while (it.hasNext()) {
-			XMPSchema bib = (XMPSchema) it.next();
-			bib.getElement().getParentNode().removeChild(bib.getElement());
-		}
-
-		for (BibtexEntry entry : entries) {
-			XMPSchemaDublinCore dcSchema = new XMPSchemaDublinCore(meta);
-			writeToDCSchema(dcSchema, entry, null);
-			meta.addSchema(dcSchema);
-		}
-
-		// Save to stream and then input that stream to the PDF
-		ByteArrayOutputStream os = new ByteArrayOutputStream();
-		meta.save(os);
-		ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
-		PDMetadata metadataStream = new PDMetadata(document, is, false);
-		catalog.setMetadata(metadataStream);
-	}
-
-	/**
-	 * Try to write the given BibTexEntry in the Document Information (the
-	 * properties of the pdf).
-	 * 
-	 * Existing fields values are overriden if the bibtex entry has the
-	 * corresponding value set.
-	 * 
-	 * @param document
-	 *            The pdf document to write to.
-	 * @param entry
-	 *            The Bibtex entry that is written into the PDF properties. *
-	 * @param database
-	 *            maybenull An optional database which the given bibtex entries
-	 *            belong to, which will be used to resolve strings. If the
-	 *            database is null the strings will not be resolved.
-	 */
-	public static void writeDocumentInformation(PDDocument document,
-			BibtexEntry entry, BibtexDatabase database) {
-
-		PDDocumentInformation di = document.getDocumentInformation();
-
-		if (database != null)
-			entry = database.resolveForStrings(entry, false);
-
-		// Set all the values including key and entryType
-		Set<String> fields = entry.getAllFields();
-
-		for (String field : fields){
-			if (field.equals("author")) {
-				di.setAuthor(entry.getField("author").toString());
-			} else if (field.equals("title")) {
-				di.setTitle(entry.getField("title").toString());
-			} else if (field.equals("keywords")) {
-				di.setKeywords(entry.getField("keywords").toString());
-			} else if (field.equals("abstract")) {
-				di.setSubject(entry.getField("abstract").toString());
-			} else {
-				di.setCustomMetadataValue("bibtex/" + field.toString(),
-						entry.getField(field.toString()).toString());
-			}
-		}
-		di
-				.setCustomMetadataValue("bibtex/entrytype", entry.getType()
-						.getName());
-	}
-
-	/**
-	 * Try to write the given BibTexEntry in the XMP-stream of the given
-	 * PDF-file.
-	 * 
-	 * Throws an IOException if the file cannot be read or written, so the user
-	 * can remove a lock or cancel the operation.
-	 * 
-	 * The method will overwrite existing BibTeX-XMP-data, but keep other
-	 * existing metadata.
-	 * 
-	 * @param file
-	 *            The file to write the entries to.
-	 * @param bibtexEntries
-	 *            The entries to write to the file. *
-	 * @param database
-	 *            maybenull An optional database which the given bibtex entries
-	 *            belong to, which will be used to resolve strings. If the
-	 *            database is null the strings will not be resolved.
-	 * @param writePDFInfo
-	 *            Write information also in PDF document properties
-	 * @throws TransformerException
-	 *             If the entry was malformed or unsupported.
-	 * @throws IOException
-	 *             If the file could not be written to or could not be found.
-	 */
-	@SuppressWarnings("unchecked")
-	public static void writeXMP(File file,
-			Collection<BibtexEntry> bibtexEntries, BibtexDatabase databasee,
-			boolean writePDFInfo) throws IOException, TransformerException {
-
-		if (databasee != null)
-			bibtexEntries = databasee.resolveForStrings(bibtexEntries, false);
-
-		PDDocument document = null;
-
-		try {
-			document = PDDocument.load(file.getAbsoluteFile());
-			if (document.isEncrypted()) {
-				throw new EncryptionNotSupportedException(
-						"Error: Cannot add metadata to encrypted document.");
-			}
-
-			if (writePDFInfo && bibtexEntries.size() == 1) {
-				writeDocumentInformation(document, bibtexEntries
-						.iterator().next(), null);
-				writeDublinCore(document, bibtexEntries, null);
-			}
-
-			PDDocumentCatalog catalog = document.getDocumentCatalog();
-			PDMetadata metaRaw = catalog.getMetadata();
-
-			XMPMetadata meta;
-			if (metaRaw != null) {
-				meta = new XMPMetadata(XMLUtil.parse(metaRaw
-						.createInputStream()));
-			} else {
-				meta = new XMPMetadata();
-			}
-			meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
-					XMPSchemaBibtex.class);
-
-			// Remove all current Bibtex-schemas
-			List schemas = meta
-					.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
-			Iterator it = schemas.iterator();
-			while (it.hasNext()) {
-				XMPSchemaBibtex bib = (XMPSchemaBibtex) it.next();
-				bib.getElement().getParentNode().removeChild(bib.getElement());
-			}
-
-			it = bibtexEntries.iterator();
-			while (it.hasNext()) {
-				BibtexEntry e = (BibtexEntry) it.next();
-				XMPSchemaBibtex bibtex = new XMPSchemaBibtex(meta);
-				meta.addSchema(bibtex);
-				bibtex.setBibtexEntry(e, null);
-			}
-
-			// Save to stream and then input that stream to the PDF
-			ByteArrayOutputStream os = new ByteArrayOutputStream();
-			meta.save(os);
-			ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
-			PDMetadata metadataStream = new PDMetadata(document, is, false);
-			catalog.setMetadata(metadataStream);
-
-			// Save
-			try {
-				document.save(file.getAbsolutePath());
-			} catch (COSVisitorException e) {
-				throw new TransformerException("Could not write XMP-metadata: "
-						+ e.getLocalizedMessage());
-			}
-
-		} finally {
-			if (document != null) {
-				document.close();
-			}
-		}
-	}
-
-	/**
-	 * Print usage information for the command line tool xmpUtil.
-	 * 
-	 * @see XMPUtil#main(String[])
-	 */
-	protected static void usage() {
-		System.out.println("Read or write XMP-metadata from or to pdf file.");
-		System.out.println("");
-		System.out.println("Usage:");
-		System.out.println("Read from PDF and print as bibtex:");
-		System.out.println("  xmpUtil <pdf>");
-		System.out.println("Read from PDF and print raw XMP:");
-		System.out.println("  xmpUtil -x <pdf>");
-		System.out
-				.println("Write the entry in <bib> given by <key> to the PDF:");
-		System.out.println("  xmpUtil <key> <bib> <pdf>");
-		System.out.println("Write all entries in <bib> to the PDF:");
-		System.out.println("  xmpUtil <bib> <pdf>");
-		System.out.println("");
-		System.out
-				.println("To report bugs visit http://jabref.sourceforge.net");
-	}
-
-	/**
-	 * Command-line tool for working with XMP-data.
-	 * 
-	 * Read or write XMP-metadata from or to pdf file.
-	 * 
-	 * Usage:
-	 * <dl>
-	 * <dd>Read from PDF and print as bibtex:</dd>
-	 * <dt>xmpUtil PDF</dt>
-	 * <dd>Read from PDF and print raw XMP:</dd>
-	 * <dt>xmpUtil -x PDF</dt>
-	 * <dd>Write the entry in BIB given by KEY to the PDF:</dd>
-	 * <dt>xmpUtil KEY BIB PDF</dt>
-	 * <dd>Write all entries in BIB to the PDF:</dd>
-	 * <dt>xmpUtil BIB PDF</dt>
-	 * </dl>
-	 * 
-	 * @param args
-	 *            Command line strings passed to utility.
-	 * @throws IOException
-	 *             If any of the given files could not be read or written.
-	 * @throws TransformerException
-	 *             If the given BibtexEntry is malformed.
-	 */
-	public static void main(String[] args) throws IOException,
-			TransformerException {
-
-		// Don't forget to initialize the preferences
-		if (Globals.prefs == null) {
-			Globals.prefs = JabRefPreferences.getInstance();
-		}
-
-		switch (args.length) {
-		case 0:
-			usage();
-			break;
-		case 1: {
-
-			if (args[0].endsWith(".pdf")) {
-				// Read from pdf and write as BibTex
-				List<BibtexEntry> l = XMPUtil.readXMP(new File(args[0]));
-
-				Iterator<BibtexEntry> it = l.iterator();
-				while (it.hasNext()) {
-					BibtexEntry e = it.next();
-					StringWriter sw = new StringWriter();
-					e.write(sw, new net.sf.jabref.export.LatexFieldFormatter(),
-							false);
-					System.out.println(sw.getBuffer().toString());
-				}
-
-			} else if (args[0].endsWith(".bib")) {
-				// Read from bib and write as XMP
-
-				ParserResult result = BibtexParser
-						.parse(new FileReader(args[0]));
-				Collection<BibtexEntry> entries = result.getDatabase()
-						.getEntries();
-
-				if (entries.size() == 0) {
-					System.err.println("Could not find BibtexEntry in "
-							+ args[0]);
-				} else {
-					System.out.println(XMPUtil.toXMP(entries, result
-							.getDatabase()));
-				}
-
-			} else {
-				usage();
-			}
-			break;
-		}
-		case 2: {
-			if (args[0].equals("-x") && args[1].endsWith(".pdf")) {
-				// Read from pdf and write as BibTex
-				XMPMetadata meta = XMPUtil.readRawXMP(new File(args[1]));
-
-				if (meta == null) {
-					System.err
-							.println("The given pdf does not contain any XMP-metadata.");
-				} else {
-					XMLUtil.save(meta.getXMPDocument(), System.out, "UTF-8");
-				}
-				break;
-			}
-
-			if (args[0].endsWith(".bib") && args[1].endsWith(".pdf")) {
-				ParserResult result = BibtexParser
-						.parse(new FileReader(args[0]));
-
-				Collection<BibtexEntry> entries = result.getDatabase()
-						.getEntries();
-
-				if (entries.size() == 0) {
-					System.err.println("Could not find BibtexEntry in "
-							+ args[0]);
-				} else {
-					XMPUtil.writeXMP(new File(args[1]), entries, result
-							.getDatabase(), false);
-					System.out.println("XMP written.");
-				}
-				break;
-			}
-
-			usage();
-			break;
-		}
-		case 3: {
-			if (!args[1].endsWith(".bib") && !args[2].endsWith(".pdf")) {
-				usage();
-				break;
-			}
-
-			ParserResult result = BibtexParser.parse(new FileReader(args[1]));
-
-			BibtexEntry e = result.getDatabase().getEntryByKey(args[0]);
-
-			if (e == null) {
-				System.err.println("Could not find BibtexEntry " + args[0]
-						+ " in " + args[0]);
-			} else {
-				XMPUtil.writeXMP(new File(args[2]), e, result.getDatabase());
-
-				System.out.println("XMP written.");
-			}
-			break;
-		}
-
-		default:
-			usage();
-		}
-	}
-
-	/**
-	 * Will try to read XMP metadata from the given file, returning whether
-	 * metadata was found.
-	 * 
-	 * Caution: This method is as expensive as it is reading the actual metadata
-	 * itself from the PDF.
-	 * 
-	 * @param is
-	 *            The inputstream to read the PDF from.
-	 * @return whether a BibtexEntry was found in the given PDF.
-	 */
-	public static boolean hasMetadata(InputStream is) {
-		try {
-			List<BibtexEntry> l = XMPUtil.readXMP(is);
-			return l.size() > 0;
-		} catch (Exception e) {
-			return false;
-		}
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.util;
+
+import java.io.*;
+import java.util.*;
+
+import javax.xml.transform.TransformerException;
+
+import net.sf.jabref.*;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.imports.ParserResult;
+
+import org.apache.jempbox.impl.DateConverter;
+import org.apache.jempbox.impl.XMLUtil;
+import org.apache.jempbox.xmp.XMPMetadata;
+import org.apache.jempbox.xmp.XMPSchema;
+import org.apache.jempbox.xmp.XMPSchemaDublinCore;
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.exceptions.COSVisitorException;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
+import org.apache.pdfbox.pdmodel.PDDocumentInformation;
+import org.apache.pdfbox.pdmodel.common.PDMetadata;
+
+/**
+ * XMPUtils provide support for reading and writing BibTex data as XMP-Metadata
+ * in PDF-documents.
+ * 
+ * @author Christopher Oezbek <oezi at oezi.de>
+ * 
+ * TODO:
+ * 
+ * Synchronization
+ * 
+ * @version $Revision$ ($Date$)
+ */
+public class XMPUtil {
+
+	/**
+	 * Convenience method for readXMP(File).
+	 * 
+	 * @param filename
+	 *            The filename from which to open the file.
+	 * @return BibtexEntryies found in the PDF or an empty list
+	 * @throws IOException
+	 */
+	public static List<BibtexEntry> readXMP(String filename) throws IOException {
+		return readXMP(new File(filename));
+	}
+
+	/**
+	 * Try to write the given BibTexEntry in the XMP-stream of the given
+	 * PDF-file.
+	 * 
+	 * Throws an IOException if the file cannot be read or written, so the user
+	 * can remove a lock or cancel the operation.
+	 * 
+	 * The method will overwrite existing BibTeX-XMP-data, but keep other
+	 * existing metadata.
+	 * 
+	 * This is a convenience method for writeXMP(File, BibtexEntry).
+	 * 
+	 * @param filename
+	 *            The filename from which to open the file.
+	 * @param entry
+	 *            The entry to write.
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
+	 * @throws TransformerException
+	 *             If the entry was malformed or unsupported.
+	 * @throws IOException
+	 *             If the file could not be written to or could not be found.
+	 */
+	public static void writeXMP(String filename, BibtexEntry entry,
+			BibtexDatabase database) throws IOException, TransformerException {
+		writeXMP(new File(filename), entry, database);
+	}
+
+	/**
+	 * Try to read the BibTexEntries from the XMP-stream of the given PDF-file.
+	 * 
+	 * @param file
+	 *            The file to read from.
+	 * 
+	 * @throws IOException
+	 *             Throws an IOException if the file cannot be read, so the user
+	 *             than remove a lock or cancel the operation.
+	 */
+	public static List<BibtexEntry> readXMP(File file) throws IOException {
+		FileInputStream is = new FileInputStream(file);
+		try {
+			return readXMP(is);
+		} finally {
+			is.close();
+		}
+	}
+
+	/**
+	 * Try to read the given BibTexEntry from the XMP-stream of the given
+	 * inputstream containing a PDF-file.
+	 * 
+	 * @param file
+	 *            The inputstream to read from.
+	 * 
+	 * @throws IOException
+	 *             Throws an IOException if the file cannot be read, so the user
+	 *             than remove a lock or cancel the operation.
+	 */
+	@SuppressWarnings("unchecked")
+	public static List<BibtexEntry> readXMP(InputStream inputStream)
+			throws IOException {
+
+		List<BibtexEntry> result = new LinkedList<BibtexEntry>();
+
+		PDDocument document = null;
+
+		try {
+			document = PDDocument.load(inputStream);
+			if (document.isEncrypted()) {
+				throw new EncryptionNotSupportedException(
+						"Error: Cannot read metadata from encrypted document.");
+			}
+
+			XMPMetadata meta = getXMPMetadata(document);
+
+			// If we did not find any XMP metadata, search for non XMP metadata
+			if (meta != null) {
+
+        			List<XMPSchema> schemas = meta
+        					.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
+        
+        			Iterator<XMPSchema> it = schemas.iterator();
+        			while (it.hasNext()) {
+        				XMPSchemaBibtex bib = (XMPSchemaBibtex) it.next();
+        
+        				result.add(bib.getBibtexEntry());
+        			}
+        
+        			// If we did not find anything have a look if a Dublin Core exists
+        			if (result.size() == 0) {
+        				schemas = meta
+        						.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
+        				it = schemas.iterator();
+        				while (it.hasNext()) {
+        					XMPSchemaDublinCore dc = (XMPSchemaDublinCore) it.next();
+        
+        					BibtexEntry entry = getBibtexEntryFromDublinCore(dc);
+        
+        					if (entry != null)
+        						result.add(entry);
+        				}
+        			}
+			}
+			if (result.size() == 0) {
+				BibtexEntry entry = getBibtexEntryFromDocumentInformation(document
+						.getDocumentInformation());
+
+				if (entry != null)
+					result.add(entry);
+			}
+		} finally {
+			if (document != null)
+				document.close();
+		}
+		
+		// return null, if no metadata was found
+		if (result.size()==0) return null;
+		return result;
+	}
+
+	/**
+	 * Helper function for retrieving a BibtexEntry from the
+	 * PDDocumentInformation in a PDF file.
+	 * 
+	 * To understand how to get hold of a PDDocumentInformation have a look in
+	 * the test cases for XMPUtil.
+	 * 
+	 * The BibtexEntry is build by mapping individual fields in the document
+	 * information (like author, title, keywords) to fields in a bibtex entry.
+	 * 
+	 * @param di
+	 *            The document information from which to build a BibtexEntry.
+	 * 
+	 * @return The bibtex entry found in the document information.
+	 */
+	@SuppressWarnings("unchecked")
+	public static BibtexEntry getBibtexEntryFromDocumentInformation(
+			PDDocumentInformation di) {
+
+		BibtexEntry entry = new BibtexEntry();
+
+		String s = di.getAuthor();
+		if (s != null)
+			entry.setField("author", s);
+
+		s = di.getTitle();
+		if (s != null)
+			entry.setField("title", s);
+
+		s = di.getKeywords();
+		if (s != null)
+			entry.setField("keywords", s);
+
+		s = di.getSubject();
+		if (s != null)
+			entry.setField("abstract", s);
+
+		COSDictionary dict = di.getDictionary();
+		Iterator it = dict.keyList().iterator();
+		while (it.hasNext()) {
+			String key = ((COSName) it.next()).getName();
+			if (key.startsWith("bibtex/")) {
+				String value = dict.getString(key);
+				key = key.substring("bibtex/".length());
+				if (key.equals("entrytype")) {
+					BibtexEntryType type = BibtexEntryType
+							.getStandardType(value);
+					if (type != null)
+						entry.setType(type);
+				} else
+					entry.setField(key, value);
+			}
+		}
+
+		// Return null if no values were found
+		return (entry.getAllFields().size() > 0 ? entry : null);
+	}
+
+	/**
+	 * Helper function for retrieving a BibtexEntry from the DublinCore metadata
+	 * in a PDF file.
+	 * 
+	 * To understand how to get hold of a XMPSchemaDublinCore have a look in the
+	 * test cases for XMPUtil.
+	 * 
+	 * The BibtexEntry is build by mapping individual fields in the dublin core
+	 * (like creator, title, subject) to fields in a bibtex entry.
+	 * 
+	 * @param di
+	 *            The document information from which to build a BibtexEntry.
+	 * 
+	 * @return The bibtex entry found in the document information.
+	 */
+	@SuppressWarnings("unchecked")
+	public static BibtexEntry getBibtexEntryFromDublinCore(
+			XMPSchemaDublinCore dcSchema) {
+
+		BibtexEntry entry = new BibtexEntry();
+
+		/**
+		 * Contributor -> Editor
+		 */
+		List contributors = dcSchema.getContributors();
+		if (contributors != null) {
+			Iterator it = contributors.iterator();
+			StringBuffer sb = null;
+			while (it.hasNext()) {
+				if (sb != null) {
+					sb.append(" and ");
+				} else {
+					sb = new StringBuffer();
+				}
+				sb.append(it.next());
+			}
+			if (sb != null)
+				entry.setField("editor", sb.toString());
+		}
+
+		/**
+		 * Author -> Creator
+		 */
+		List creators = dcSchema.getCreators();
+		if (creators != null) {
+			Iterator it = creators.iterator();
+			StringBuffer sb = null;
+			while (it.hasNext()) {
+				if (sb != null) {
+					sb.append(" and ");
+				} else {
+					sb = new StringBuffer();
+				}
+				sb.append(it.next());
+			}
+			if (sb != null)
+				entry.setField("author", sb.toString());
+		}
+
+		/**
+		 * Year + Month -> Date
+		 */
+		List dates = dcSchema.getSequenceList("dc:date");
+		if (dates != null && dates.size() > 0) {
+			String date = ((String) dates.get(0)).trim();
+			Calendar c = null;
+			try {
+				c = DateConverter.toCalendar(date);
+			} catch (Exception e) {
+
+			}
+			if (c != null) {
+				entry.setField("year", String.valueOf(c.get(Calendar.YEAR)));
+				if (date.length() > 4) {
+					entry.setField("month", "#"
+							+ Globals.MONTHS[c.get(Calendar.MONTH)] + "#");
+				}
+			}
+		}
+
+		/**
+		 * Abstract -> Description
+		 */
+		String s = dcSchema.getDescription();
+		if (s != null)
+			entry.setField("abstract", s);
+
+		/**
+		 * Identifier -> DOI
+		 */
+		s = dcSchema.getIdentifier();
+		if (s != null)
+			entry.setField("doi", s);
+
+		/**
+		 * Publisher -> Publisher
+		 */
+		List publishers = dcSchema.getPublishers();
+		if (publishers != null) {
+			Iterator it = dcSchema.getPublishers().iterator();
+			StringBuffer sb = null;
+			while (it.hasNext()) {
+				if (sb != null) {
+					sb.append(" and ");
+				} else {
+					sb = new StringBuffer();
+				}
+				sb.append(it.next());
+			}
+			if (sb != null)
+				entry.setField("publishers", sb.toString());
+		}
+
+		/**
+		 * Relation -> bibtexkey
+		 * 
+		 * We abuse the relationship attribute to store all other values in the
+		 * bibtex document
+		 */
+		List relationships = dcSchema.getRelationships();
+		if (relationships != null) {
+			Iterator it = relationships.iterator();
+			while (it.hasNext()) {
+				s = (String) it.next();
+				if (s.startsWith("bibtex/")) {
+					s = s.substring("bibtex/".length());
+					int i = s.indexOf('/');
+					if (i != -1) {
+						entry.setField(s.substring(0, i), s.substring(i + 1));
+					}
+				}
+			}
+		}
+
+		/**
+		 * Rights -> Rights
+		 */
+		s = dcSchema.getRights();
+		if (s != null)
+			entry.setField("rights", s);
+
+		/**
+		 * Source -> Source
+		 */
+		s = dcSchema.getSource();
+		if (s != null)
+			entry.setField("source", s);
+
+		/**
+		 * Subject -> Keywords
+		 */
+		List subjects = dcSchema.getSubjects();
+		if (subjects != null) {
+			Iterator it = subjects.iterator();
+			StringBuffer sb = null;
+			while (it.hasNext()) {
+				if (sb != null) {
+					sb.append(",");
+				} else {
+					sb = new StringBuffer();
+				}
+				sb.append(it.next());
+			}
+			if (sb != null)
+				entry.setField("keywords", sb.toString());
+		}
+
+		/**
+		 * Title -> Title
+		 */
+		s = dcSchema.getTitle();
+		if (s != null)
+			entry.setField("title", s);
+
+		/**
+		 * Type -> Type
+		 */
+		List l = dcSchema.getTypes();
+		if (l != null && l.size() > 0) {
+			s = (String) l.get(0);
+			if (s != null) {
+				BibtexEntryType type = BibtexEntryType.getStandardType(s);
+				if (type != null)
+					entry.setType(type);
+			}
+		}
+
+		return (entry.getAllFields().size() > 0 ? entry : null);
+	}
+
+	/**
+	 * Try to write the given BibTexEntry in the XMP-stream of the given
+	 * PDF-file.
+	 * 
+	 * Throws an IOException if the file cannot be read or written, so the user
+	 * can remove a lock or cancel the operation.
+	 * 
+	 * The method will overwrite existing BibTeX-XMP-data, but keep other
+	 * existing metadata.
+	 * 
+	 * This is a convenience method for writeXMP(File, Collection).
+	 * 
+	 * @param file
+	 *            The file to write to.
+	 * @param entry
+	 *            The entry to write.
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
+	 * @throws TransformerException
+	 *             If the entry was malformed or unsupported.
+	 * @throws IOException
+	 *             If the file could not be written to or could not be found.
+	 */
+	public static void writeXMP(File file, BibtexEntry entry,
+			BibtexDatabase database) throws IOException, TransformerException {
+		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
+		l.add(entry);
+		writeXMP(file, l, database, true);
+	}
+
+	/**
+	 * Write the given BibtexEntries as XMP-metadata text to the given stream.
+	 * 
+	 * The text that is written to the stream contains a complete XMP-document.
+	 * 
+	 * @param bibtexEntries
+	 *            The BibtexEntries to write XMP-metadata for.
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
+	 * @throws TransformerException
+	 *             Thrown if the bibtexEntries could not transformed to XMP.
+	 * @throws IOException
+	 *             Thrown if an IOException occured while writing to the stream.
+	 * 
+	 * @see #toXMP(Collection, OutputStream) if you don't need strings to be
+	 *      resolved.
+	 */
+	public static void toXMP(Collection<BibtexEntry> bibtexEntries,
+			BibtexDatabase database, OutputStream outputStream)
+			throws IOException, TransformerException {
+
+		if (database != null)
+			bibtexEntries = database.resolveForStrings(bibtexEntries, true);
+
+		XMPMetadata x = new XMPMetadata();
+
+		Iterator<BibtexEntry> it = bibtexEntries.iterator();
+		while (it.hasNext()) {
+			BibtexEntry e = it.next();
+			XMPSchemaBibtex schema = new XMPSchemaBibtex(x);
+			x.addSchema(schema);
+			schema.setBibtexEntry(e);
+		}
+
+		x.save(outputStream);
+	}
+
+	/**
+	 * Convenience method for toXMP(Collection<BibtexEntry>, BibtexDatabase,
+	 * OutputStream) returning a String containing the XMP-metadata of the given
+	 * collection of BibtexEntries.
+	 * 
+	 * The resulting metadata string is wrapped as a complete XMP-document.
+	 * 
+	 * @param bibtexEntries
+	 *            The BibtexEntries to return XMP-metadata for. 
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
+	 * @return The XMP representation of the given bibtexEntries.
+	 * @throws TransformerException
+	 *             Thrown if the bibtexEntries could not transformed to XMP.
+	 */
+	public static String toXMP(Collection<BibtexEntry> bibtexEntries,
+			BibtexDatabase database) throws TransformerException {
+		try {
+			ByteArrayOutputStream bs = new ByteArrayOutputStream();
+			toXMP(bibtexEntries, database, bs);
+			return bs.toString();
+		} catch (IOException e) {
+			throw new TransformerException(e);
+		}
+	}
+
+	/**
+	 * Will read the XMPMetadata from the given pdf file, closing the file
+	 * afterwards.
+	 * 
+	 * @param inputStream
+	 *            The inputStream representing a PDF-file to read the
+	 *            XMPMetadata from.
+	 * @return The XMPMetadata object found in the file or null if none is
+	 *         found.
+	 * @throws IOException
+	 */
+	public static XMPMetadata readRawXMP(InputStream inputStream)
+			throws IOException {
+		PDDocument document = null;
+
+		try {
+			document = PDDocument.load(inputStream);
+			if (document.isEncrypted()) {
+				throw new EncryptionNotSupportedException(
+						"Error: Cannot read metadata from encrypted document.");
+			}
+
+			return getXMPMetadata(document);
+
+		} finally {
+			if (document != null)
+				document.close();
+		}
+	}
+
+	static XMPMetadata getXMPMetadata(PDDocument document) throws IOException {
+		PDDocumentCatalog catalog = document.getDocumentCatalog();
+		PDMetadata metaRaw = catalog.getMetadata();
+
+		if (metaRaw == null) {
+			return null;
+		}
+
+		XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw
+				.createInputStream()));
+		meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE, XMPSchemaBibtex.class);
+		return meta;
+	}
+
+	/**
+	 * Will read the XMPMetadata from the given pdf file, closing the file
+	 * afterwards.
+	 * 
+	 * @param file
+	 *            The file to read the XMPMetadata from.
+	 * @return The XMPMetadata object found in the file or null if none is
+	 *         found.
+	 * @throws IOException
+	 */
+	public static XMPMetadata readRawXMP(File file) throws IOException {
+		FileInputStream is = new FileInputStream(file);
+		try {
+			return readRawXMP(is);
+		} finally {
+			is.close();
+		}
+	}
+
+	static void writeToDCSchema(XMPSchemaDublinCore dcSchema,
+			BibtexEntry entry, BibtexDatabase database) {
+
+		if (database != null)
+			entry = database.resolveForStrings(entry, false);
+
+		// Set all the values including key and entryType
+		
+		for (String field : entry.getAllFields()){
+
+			if (field.equals("editor")) {
+				String o = entry.getField(field.toString()).toString();
+
+				/**
+				 * Editor -> Contributor
+				 * 
+				 * Field: dc:contributor
+				 * 
+				 * Type: bag ProperName
+				 * 
+				 * Category: External
+				 * 
+				 * Description: Contributors to the resource (other than the
+				 * authors).
+				 * 
+				 * Bibtex-Fields used: editor
+				 */
+
+				String authors = o.toString();
+				AuthorList list = AuthorList.getAuthorList(authors);
+
+				int n = list.size();
+				for (int i = 0; i < n; i++) {
+					dcSchema.addContributor(list.getAuthor(i).getFirstLast(
+							false));
+				}
+				continue;
+			}
+
+			/**
+			 * ? -> Coverage
+			 * 
+			 * Unmapped
+			 * 
+			 * dc:coverage Text External The extent or scope of the resource.
+			 */
+
+			/**
+			 * Author -> Creator
+			 * 
+			 * Field: dc:creator
+			 * 
+			 * Type: seq ProperName
+			 * 
+			 * Category: External
+			 * 
+			 * Description: The authors of the resource (listed in order of
+			 * precedence, if significant).
+			 * 
+			 * Bibtex-Fields used: author
+			 */
+			if (field.equals("author")) {
+				String o = entry.getField(field.toString()).toString();
+				String authors = o.toString();
+				AuthorList list = AuthorList.getAuthorList(authors);
+
+				int n = list.size();
+				for (int i = 0; i < n; i++) {
+					dcSchema.addCreator(list.getAuthor(i).getFirstLast(false));
+				}
+				continue;
+			}
+
+			if (field.equals("month")) {
+				// Dealt with in year
+				continue;
+			}
+
+			if (field.equals("year")) {
+
+				/**
+				 * Year + Month -> Date
+				 * 
+				 * Field: dc:date
+				 * 
+				 * Type: seq Date
+				 * 
+				 * Category: External
+				 * 
+				 * Description: Date(s) that something interesting happened to
+				 * the resource.
+				 * 
+				 * Bibtex-Fields used: year, month
+				 */
+				String publicationDate = Util.getPublicationDate(entry);
+				if (publicationDate != null) {
+					dcSchema.addSequenceValue("dc:date", publicationDate);
+				}
+				continue;
+			}
+			/**
+			 * Abstract -> Description
+			 * 
+			 * Field: dc:description
+			 * 
+			 * Type: Lang Alt
+			 * 
+			 * Category: External
+			 * 
+			 * Description: A textual description of the content of the
+			 * resource. Multiple values may be present for different languages.
+			 * 
+			 * Bibtex-Fields used: abstract
+			 */
+			if (field.equals("abstract")) {
+				String o = entry.getField(field.toString()).toString();
+				dcSchema.setDescription(o.toString());
+				continue;
+			}
+
+			/**
+			 * DOI -> identifier
+			 * 
+			 * Field: dc:identifier
+			 * 
+			 * Type: Text
+			 * 
+			 * Category: External
+			 * 
+			 * Description: Unique identifier of the resource.
+			 * 
+			 * Bibtex-Fields used: doi
+			 */
+			if (field.equals("doi")) {
+				String o = entry.getField(field.toString()).toString();
+				dcSchema.setIdentifier(o.toString());
+				continue;
+			}
+
+			/**
+			 * ? -> Language
+			 * 
+			 * Unmapped
+			 * 
+			 * dc:language bag Locale Internal An unordered array specifying the
+			 * languages used in the resource.
+			 */
+
+			/**
+			 * Publisher -> Publisher
+			 * 
+			 * Field: dc:publisher
+			 * 
+			 * Type: bag ProperName
+			 * 
+			 * Category: External
+			 * 
+			 * Description: Publishers.
+			 * 
+			 * Bibtex-Fields used: doi
+			 */
+			if (field.equals("publisher")) {
+				String o = entry.getField(field.toString()).toString();
+				dcSchema.addPublisher(o.toString());
+				continue;
+			}
+
+			/**
+			 * ? -> Rights
+			 * 
+			 * Unmapped
+			 * 
+			 * dc:rights Lang Alt External Informal rights statement, selected
+			 * by language.
+			 */
+
+			/**
+			 * ? -> Source
+			 * 
+			 * Unmapped
+			 * 
+			 * dc:source Text External Unique identifier of the work from which
+			 * this resource was derived.
+			 */
+
+			/**
+			 * Keywords -> Subject
+			 * 
+			 * Field: dc:subject
+			 * 
+			 * Type: bag Text
+			 * 
+			 * Category: External
+			 * 
+			 * Description: An unordered array of descriptive phrases or
+			 * keywords that specify the topic of the content of the resource.
+			 * 
+			 * Bibtex-Fields used: doi
+			 */
+			if (field.equals("keywords")) {
+				String o = entry.getField(field.toString()).toString();
+				String[] keywords = o.toString().split(",");
+				for (int i = 0; i < keywords.length; i++) {
+					dcSchema.addSubject(keywords[i].trim());
+				}
+				continue;
+			}
+
+			/**
+			 * Title -> Title
+			 * 
+			 * Field: dc:title
+			 * 
+			 * Type: Lang Alt
+			 * 
+			 * Category: External
+			 * 
+			 * Description: The title of the document, or the name given to the
+			 * resource. Typically, it will be a name by which the resource is
+			 * formally known.
+			 * 
+			 * Bibtex-Fields used: title
+			 */
+			if (field.equals("title")) {
+				String o = entry.getField(field.toString()).toString();
+				dcSchema.setTitle(o.toString());
+				continue;
+			}
+
+			/**
+			 * bibtextype -> relation
+			 * 
+			 * Field: dc:relation
+			 * 
+			 * Type: bag Text
+			 * 
+			 * Category: External
+			 * 
+			 * Description: Relationships to other documents.
+			 * 
+			 * Bibtex-Fields used: bibtextype
+			 */
+			/**
+			 * All others (including the bibtex key) get packaged in the
+			 * relation attribute
+			 */
+			String o = entry.getField(field.toString()).toString();
+			dcSchema.addRelation("bibtex/" + field.toString() + "/" + o);
+		}
+
+		/**
+		 * ? -> Format
+		 * 
+		 * Unmapped
+		 * 
+		 * dc:format MIMEType Internal The file format used when saving the
+		 * resource. Tools and applications should set this property to the save
+		 * format of the data. It may include appropriate qualifiers.
+		 */
+		dcSchema.setFormat("application/pdf");
+
+		/**
+		 * Type -> Type
+		 * 
+		 * Field: dc:type
+		 * 
+		 * Type: bag open Choice
+		 * 
+		 * Category: External
+		 * 
+		 * Description: A document type; for example, novel, poem, or working
+		 * paper.
+		 * 
+		 * Bibtex-Fields used: title
+		 */
+		Object o = entry.getType().getName();
+		if (o != null)
+			dcSchema.addType(o.toString());
+	}
+
+	/**
+	 * Try to write the given BibTexEntry as a DublinCore XMP Schema
+	 * 
+	 * Existing DublinCore schemas in the document are not modified.
+	 * 
+	 * @param document
+	 *            The pdf document to write to.
+	 * @param entry
+	 *            The Bibtex entry that is written as a schema.
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
+	 * @throws IOException
+	 * @throws TransformerException
+	 */
+	public static void writeDublinCore(PDDocument document, BibtexEntry entry,
+			BibtexDatabase database) throws IOException, TransformerException {
+
+		List<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+		entries.add(entry);
+
+		writeDublinCore(document, entries, database);
+	}
+
+	/**
+	 * Try to write the given BibTexEntries as DublinCore XMP Schemas
+	 * 
+	 * Existing DublinCore schemas in the document are removed
+	 * 
+	 * @param document
+	 *            The pdf document to write to.
+	 * @param entries
+	 *            The Bibtex entries that are written as schemas
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
+	 * @throws IOException
+	 * @throws TransformerException
+	 */
+	@SuppressWarnings("unchecked")
+	public static void writeDublinCore(PDDocument document,
+			Collection<BibtexEntry> entries, BibtexDatabase database)
+			throws IOException, TransformerException {
+
+		if (database != null)
+			entries = database.resolveForStrings(entries, false);
+
+		PDDocumentCatalog catalog = document.getDocumentCatalog();
+		PDMetadata metaRaw = catalog.getMetadata();
+
+		XMPMetadata meta;
+		if (metaRaw != null) {
+			meta = new XMPMetadata(XMLUtil.parse(metaRaw.createInputStream()));
+		} else {
+			meta = new XMPMetadata();
+		}
+
+		// Remove all current Dublin-Core schemas
+		List schemas = meta
+				.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
+		Iterator it = schemas.iterator();
+		while (it.hasNext()) {
+			XMPSchema bib = (XMPSchema) it.next();
+			bib.getElement().getParentNode().removeChild(bib.getElement());
+		}
+
+		for (BibtexEntry entry : entries) {
+			XMPSchemaDublinCore dcSchema = new XMPSchemaDublinCore(meta);
+			writeToDCSchema(dcSchema, entry, null);
+			meta.addSchema(dcSchema);
+		}
+
+		// Save to stream and then input that stream to the PDF
+		ByteArrayOutputStream os = new ByteArrayOutputStream();
+		meta.save(os);
+		ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
+		PDMetadata metadataStream = new PDMetadata(document, is, false);
+		catalog.setMetadata(metadataStream);
+	}
+
+	/**
+	 * Try to write the given BibTexEntry in the Document Information (the
+	 * properties of the pdf).
+	 * 
+	 * Existing fields values are overriden if the bibtex entry has the
+	 * corresponding value set.
+	 * 
+	 * @param document
+	 *            The pdf document to write to.
+	 * @param entry
+	 *            The Bibtex entry that is written into the PDF properties. *
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
+	 */
+	public static void writeDocumentInformation(PDDocument document,
+			BibtexEntry entry, BibtexDatabase database) {
+
+		PDDocumentInformation di = document.getDocumentInformation();
+
+		if (database != null)
+			entry = database.resolveForStrings(entry, false);
+
+		// Set all the values including key and entryType
+		Set<String> fields = entry.getAllFields();
+
+		for (String field : fields){
+			if (field.equals("author")) {
+				di.setAuthor(entry.getField("author").toString());
+			} else if (field.equals("title")) {
+				di.setTitle(entry.getField("title").toString());
+			} else if (field.equals("keywords")) {
+				di.setKeywords(entry.getField("keywords").toString());
+			} else if (field.equals("abstract")) {
+				di.setSubject(entry.getField("abstract").toString());
+			} else {
+				di.setCustomMetadataValue("bibtex/" + field.toString(),
+						entry.getField(field.toString()).toString());
+			}
+		}
+		di
+				.setCustomMetadataValue("bibtex/entrytype", entry.getType()
+						.getName());
+	}
+
+	/**
+	 * Try to write the given BibTexEntry in the XMP-stream of the given
+	 * PDF-file.
+	 * 
+	 * Throws an IOException if the file cannot be read or written, so the user
+	 * can remove a lock or cancel the operation.
+	 * 
+	 * The method will overwrite existing BibTeX-XMP-data, but keep other
+	 * existing metadata.
+	 * 
+	 * @param file
+	 *            The file to write the entries to.
+	 * @param bibtexEntries
+	 *            The entries to write to the file. *
+	 * @param database
+	 *            maybenull An optional database which the given bibtex entries
+	 *            belong to, which will be used to resolve strings. If the
+	 *            database is null the strings will not be resolved.
+	 * @param writePDFInfo
+	 *            Write information also in PDF document properties
+	 * @throws TransformerException
+	 *             If the entry was malformed or unsupported.
+	 * @throws IOException
+	 *             If the file could not be written to or could not be found.
+	 */
+	@SuppressWarnings("unchecked")
+	public static void writeXMP(File file,
+			Collection<BibtexEntry> bibtexEntries, BibtexDatabase databasee,
+			boolean writePDFInfo) throws IOException, TransformerException {
+
+		if (databasee != null)
+			bibtexEntries = databasee.resolveForStrings(bibtexEntries, false);
+
+		PDDocument document = null;
+
+		try {
+			document = PDDocument.load(file.getAbsoluteFile());
+			if (document.isEncrypted()) {
+				throw new EncryptionNotSupportedException(
+						"Error: Cannot add metadata to encrypted document.");
+			}
+
+			if (writePDFInfo && bibtexEntries.size() == 1) {
+				writeDocumentInformation(document, bibtexEntries
+						.iterator().next(), null);
+				writeDublinCore(document, bibtexEntries, null);
+			}
+
+			PDDocumentCatalog catalog = document.getDocumentCatalog();
+			PDMetadata metaRaw = catalog.getMetadata();
+
+			XMPMetadata meta;
+			if (metaRaw != null) {
+				meta = new XMPMetadata(XMLUtil.parse(metaRaw
+						.createInputStream()));
+			} else {
+				meta = new XMPMetadata();
+			}
+			meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
+					XMPSchemaBibtex.class);
+
+			// Remove all current Bibtex-schemas
+			List schemas = meta
+					.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
+			Iterator it = schemas.iterator();
+			while (it.hasNext()) {
+				XMPSchemaBibtex bib = (XMPSchemaBibtex) it.next();
+				bib.getElement().getParentNode().removeChild(bib.getElement());
+			}
+
+			it = bibtexEntries.iterator();
+			while (it.hasNext()) {
+				BibtexEntry e = (BibtexEntry) it.next();
+				XMPSchemaBibtex bibtex = new XMPSchemaBibtex(meta);
+				meta.addSchema(bibtex);
+				bibtex.setBibtexEntry(e, null);
+			}
+
+			// Save to stream and then input that stream to the PDF
+			ByteArrayOutputStream os = new ByteArrayOutputStream();
+			meta.save(os);
+			ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
+			PDMetadata metadataStream = new PDMetadata(document, is, false);
+			catalog.setMetadata(metadataStream);
+
+			// Save
+			try {
+				document.save(file.getAbsolutePath());
+			} catch (COSVisitorException e) {
+				throw new TransformerException("Could not write XMP-metadata: "
+						+ e.getLocalizedMessage());
+			}
+
+		} finally {
+			if (document != null) {
+				document.close();
+			}
+		}
+	}
+
+	/**
+	 * Print usage information for the command line tool xmpUtil.
+	 * 
+	 * @see XMPUtil#main(String[])
+	 */
+	protected static void usage() {
+		System.out.println("Read or write XMP-metadata from or to pdf file.");
+		System.out.println("");
+		System.out.println("Usage:");
+		System.out.println("Read from PDF and print as bibtex:");
+		System.out.println("  xmpUtil <pdf>");
+		System.out.println("Read from PDF and print raw XMP:");
+		System.out.println("  xmpUtil -x <pdf>");
+		System.out
+				.println("Write the entry in <bib> given by <key> to the PDF:");
+		System.out.println("  xmpUtil <key> <bib> <pdf>");
+		System.out.println("Write all entries in <bib> to the PDF:");
+		System.out.println("  xmpUtil <bib> <pdf>");
+		System.out.println("");
+		System.out
+				.println("To report bugs visit http://jabref.sourceforge.net");
+	}
+
+	/**
+	 * Command-line tool for working with XMP-data.
+	 * 
+	 * Read or write XMP-metadata from or to pdf file.
+	 * 
+	 * Usage:
+	 * <dl>
+	 * <dd>Read from PDF and print as bibtex:</dd>
+	 * <dt>xmpUtil PDF</dt>
+	 * <dd>Read from PDF and print raw XMP:</dd>
+	 * <dt>xmpUtil -x PDF</dt>
+	 * <dd>Write the entry in BIB given by KEY to the PDF:</dd>
+	 * <dt>xmpUtil KEY BIB PDF</dt>
+	 * <dd>Write all entries in BIB to the PDF:</dd>
+	 * <dt>xmpUtil BIB PDF</dt>
+	 * </dl>
+	 * 
+	 * @param args
+	 *            Command line strings passed to utility.
+	 * @throws IOException
+	 *             If any of the given files could not be read or written.
+	 * @throws TransformerException
+	 *             If the given BibtexEntry is malformed.
+	 */
+	public static void main(String[] args) throws IOException,
+			TransformerException {
+
+		// Don't forget to initialize the preferences
+		if (Globals.prefs == null) {
+			Globals.prefs = JabRefPreferences.getInstance();
+		}
+
+		switch (args.length) {
+		case 0:
+			usage();
+			break;
+		case 1: {
+
+			if (args[0].endsWith(".pdf")) {
+				// Read from pdf and write as BibTex
+				List<BibtexEntry> l = XMPUtil.readXMP(new File(args[0]));
+
+				Iterator<BibtexEntry> it = l.iterator();
+				while (it.hasNext()) {
+					BibtexEntry e = it.next();
+					StringWriter sw = new StringWriter();
+					e.write(sw, new net.sf.jabref.export.LatexFieldFormatter(),
+							false);
+					System.out.println(sw.getBuffer().toString());
+				}
+
+			} else if (args[0].endsWith(".bib")) {
+				// Read from bib and write as XMP
+
+				ParserResult result = BibtexParser
+						.parse(new FileReader(args[0]));
+				Collection<BibtexEntry> entries = result.getDatabase()
+						.getEntries();
+
+				if (entries.size() == 0) {
+					System.err.println("Could not find BibtexEntry in "
+							+ args[0]);
+				} else {
+					System.out.println(XMPUtil.toXMP(entries, result
+							.getDatabase()));
+				}
+
+			} else {
+				usage();
+			}
+			break;
+		}
+		case 2: {
+			if (args[0].equals("-x") && args[1].endsWith(".pdf")) {
+				// Read from pdf and write as BibTex
+				XMPMetadata meta = XMPUtil.readRawXMP(new File(args[1]));
+
+				if (meta == null) {
+					System.err
+							.println("The given pdf does not contain any XMP-metadata.");
+				} else {
+					XMLUtil.save(meta.getXMPDocument(), System.out, "UTF-8");
+				}
+				break;
+			}
+
+			if (args[0].endsWith(".bib") && args[1].endsWith(".pdf")) {
+				ParserResult result = BibtexParser
+						.parse(new FileReader(args[0]));
+
+				Collection<BibtexEntry> entries = result.getDatabase()
+						.getEntries();
+
+				if (entries.size() == 0) {
+					System.err.println("Could not find BibtexEntry in "
+							+ args[0]);
+				} else {
+					XMPUtil.writeXMP(new File(args[1]), entries, result
+							.getDatabase(), false);
+					System.out.println("XMP written.");
+				}
+				break;
+			}
+
+			usage();
+			break;
+		}
+		case 3: {
+			if (!args[1].endsWith(".bib") && !args[2].endsWith(".pdf")) {
+				usage();
+				break;
+			}
+
+			ParserResult result = BibtexParser.parse(new FileReader(args[1]));
+
+			BibtexEntry e = result.getDatabase().getEntryByKey(args[0]);
+
+			if (e == null) {
+				System.err.println("Could not find BibtexEntry " + args[0]
+						+ " in " + args[0]);
+			} else {
+				XMPUtil.writeXMP(new File(args[2]), e, result.getDatabase());
+
+				System.out.println("XMP written.");
+			}
+			break;
+		}
+
+		default:
+			usage();
+		}
+	}
+
+	/**
+	 * Will try to read XMP metadata from the given file, returning whether
+	 * metadata was found.
+	 * 
+	 * Caution: This method is as expensive as it is reading the actual metadata
+	 * itself from the PDF.
+	 * 
+	 * @param is
+	 *            The inputstream to read the PDF from.
+	 * @return whether a BibtexEntry was found in the given PDF.
+	 */
+	public static boolean hasMetadata(InputStream is) {
+		try {
+			List<BibtexEntry> l = XMPUtil.readXMP(is);
+			return l.size() > 0;
+		} catch (Exception e) {
+			return false;
+		}
+	}
+}
diff --git a/src/java/net/sf/jabref/wizard/auximport/AuxCommandLine.java b/src/java/net/sf/jabref/wizard/auximport/AuxCommandLine.java
index 032d26e..dc4cb60 100644
--- a/src/java/net/sf/jabref/wizard/auximport/AuxCommandLine.java
+++ b/src/java/net/sf/jabref/wizard/auximport/AuxCommandLine.java
@@ -1,80 +1,80 @@
-/*
-Copyright (C) 2004 R. Nagel
-
-All programs in this directory and
-subdirectories are published under the GNU General Public License as
-described below.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA
-
-Further information about the GNU GPL is available at:
-http://www.gnu.org/copyleft/gpl.ja.html
-
-*/
-
-// created by : r.nagel 13.10.2004
-//
-// function : handles the subdatabase from aux command line option
-//
-// modified :
-
-package net.sf.jabref.wizard.auximport ;
-
-import java.util.Vector;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.Globals;
-import net.sf.jabref.Util;
-
-public class AuxCommandLine
-{
-  private String auxName ;
-  private BibtexDatabase bib ;
-
-  public AuxCommandLine(String auxFileName, BibtexDatabase refDBase)
-  {
-    auxName = Util.getCorrectFileName(auxFileName, "aux") ;
-    bib = refDBase ;
-  }
-
-  public BibtexDatabase perform()
-  {
-    BibtexDatabase back = null ;
-    if ( (auxName.length() > 0) && (bib != null) )
-    {
-      AuxSubGenerator auxParser = new AuxSubGenerator(bib) ;
-      Vector<String> returnValue = auxParser.generate(auxName, bib) ;
-      back = auxParser.getGeneratedDatabase() ;
-
-      // print statistics
-//      System.out.println(Globals.lang( "Results" ));
-      System.out.println( Globals.lang("keys_in_database") +" " +bib.getEntryCount() ) ;
-      System.out.println( Globals.lang("found_in_aux_file") +" "+auxParser.getFoundKeysInAux());
-      System.out.println( Globals.lang("resolved") +" " +auxParser.getResolvedKeysCount());
-      if (auxParser.getNotResolvedKeysCount() > 0)
-      {
-        System.out.println( Globals.lang( "not_found" ) + " " +
-                            auxParser.getNotResolvedKeysCount() ) ;
-        System.out.println( returnValue ) ;
-      }
-      int nested = auxParser.getNestedAuxCounter() ;
-      if (nested > 0)
-        System.out.println( Globals.lang("nested_aux_files") +" " +nested);
-
-    }
-    return back ;
-  }
-}
+/*
+Copyright (C) 2004 R. Nagel
+
+All programs in this directory and
+subdirectories are published under the GNU General Public License as
+described below.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
+
+Further information about the GNU GPL is available at:
+http://www.gnu.org/copyleft/gpl.ja.html
+
+*/
+
+// created by : r.nagel 13.10.2004
+//
+// function : handles the subdatabase from aux command line option
+//
+// modified :
+
+package net.sf.jabref.wizard.auximport ;
+
+import java.util.Vector;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.Globals;
+import net.sf.jabref.Util;
+
+public class AuxCommandLine
+{
+  private String auxName ;
+  private BibtexDatabase bib ;
+
+  public AuxCommandLine(String auxFileName, BibtexDatabase refDBase)
+  {
+    auxName = Util.getCorrectFileName(auxFileName, "aux") ;
+    bib = refDBase ;
+  }
+
+  public BibtexDatabase perform()
+  {
+    BibtexDatabase back = null ;
+    if ( (auxName.length() > 0) && (bib != null) )
+    {
+      AuxSubGenerator auxParser = new AuxSubGenerator(bib) ;
+      Vector<String> returnValue = auxParser.generate(auxName, bib) ;
+      back = auxParser.getGeneratedDatabase() ;
+
+      // print statistics
+//      System.out.println(Globals.lang( "Results" ));
+      System.out.println( Globals.lang("keys_in_database") +" " +bib.getEntryCount() ) ;
+      System.out.println( Globals.lang("found_in_aux_file") +" "+auxParser.getFoundKeysInAux());
+      System.out.println( Globals.lang("resolved") +" " +auxParser.getResolvedKeysCount());
+      if (auxParser.getNotResolvedKeysCount() > 0)
+      {
+        System.out.println( Globals.lang( "not_found" ) + " " +
+                            auxParser.getNotResolvedKeysCount() ) ;
+        System.out.println( returnValue ) ;
+      }
+      int nested = auxParser.getNestedAuxCounter() ;
+      if (nested > 0)
+        System.out.println( Globals.lang("nested_aux_files") +" " +nested);
+
+    }
+    return back ;
+  }
+}
diff --git a/src/java/net/sf/jabref/wizard/auximport/AuxSubGenerator.java b/src/java/net/sf/jabref/wizard/auximport/AuxSubGenerator.java
index 1f3990d..c855525 100644
--- a/src/java/net/sf/jabref/wizard/auximport/AuxSubGenerator.java
+++ b/src/java/net/sf/jabref/wizard/auximport/AuxSubGenerator.java
@@ -1,416 +1,416 @@
-/*
-Copyright (C) 2004 R. Nagel
-
-All programs in this directory and
-subdirectories are published under the GNU General Public License as
-described below.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA
-
-Further information about the GNU GPL is available at:
-http://www.gnu.org/copyleft/gpl.ja.html
-
-*/
-
-/**
- * <p>Title: Latex Aux to Bibtex</p>
- *
- * <p>Description: generates a sub-database which contains only bibtex entries
- * from input aux file</p>
- *
- * <p>Copyright: Copyright (c) 2004</p>
- *
- * <p>Company: </p>
- *
- * @version 1.0
- * @author r.nagel
- *
- * @todo Redesign of dialog structure for an assitent like feeling....
- *   Now - the unknown bibtex entries cannot inserted into the reference
- *   database without closing the dialog.
- */
-
-// created by : r.nagel 23.08.2004
-//
-// modified : - 11.04.2005
-//              handling \\@input{file.aux} tag in aux files (nested aux files)
-
-
-package net.sf.jabref.wizard.auximport ;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.Vector;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import net.sf.jabref.*;
-
-public class AuxSubGenerator
-{
-
-  private HashSet<String> mySet ; // all unique bibtex keys in aux file
-
-  private Vector<String> notFoundList ; // all not solved bibtex keys
-
-  private BibtexDatabase db ; // reference database
-  private BibtexDatabase auxDB ; // contains only the bibtex keys who found in aux file
-
-  private int nestedAuxCounter ;  // counts the nested aux files
-  private int crossreferencedEntriesCount = 0; // counts entries pulled in due to crossref
-
-  public AuxSubGenerator(BibtexDatabase refDBase)
-  {
-    mySet = new HashSet<String>(20) ;
-    notFoundList = new Vector<String>() ;
-    db = refDBase ;
-  }
-
-  public final void setReferenceDatabase(BibtexDatabase newRefDB)
-  {
-    db = newRefDB ;
-  }
-
-  /**
-   * parseAuxFile
-   * read the Aux file and fill up some intern data structures.
-   * Nested aux files (latex \\include) supported!
-   *
-   * @param filename String : Path to LatexAuxFile
-   * @return boolean, true = no error occurs
-   */
-
-  // found at comp.text.tex
-  //  > Can anyone tell be the information held within a .aux file?  Is there a
-  //  > specific format to this file?
-  //
-  // I don't think there is a particular format. Every package, class
-  // or document can write to the aux file. The aux file consists of LaTeX macros
-  // and is read at the \begin{document} and again at the \end{document}.
-  //
-  // It usually contains information about existing labels
-  //  \\newlabel{sec:Intro}{{1}{1}}
-  // and citations
-  //  \citation{hiri:conv:1993}
-  // and macros to write information to other files (like toc, lof or lot files)
-  //  \@writefile{toc}{\contentsline {section}{\numberline
-  // {1}Intro}{1}}
-  // but as I said, there can be a lot more
-
-  // aux file :
-  //
-  // \\citation{x}  x = used reference of bibtex library entry
-  //
-  // \\@input{x}  x = nested aux file
-  //
-  // the \\bibdata{x} directive contains information about the
-  // bibtex library file -> x = name of bib file
-  //
-  // \\bibcite{x}{y}
-  //   x is a label for an item and y is the index in bibliography
-
-  public final boolean parseAuxFile(String filename)
-  {
-    // regular expressions
-    Pattern pattern ;
-    Matcher matcher ;
-
-    // while condition
-    boolean weiter = false ;
-
-    // return value -> default: no error
-    boolean back = true ;
-
-    // fileopen status
-    boolean loopFileOpen = false ;
-
-    // the important tag
-    pattern = Pattern.compile( "\\\\citation\\{.+\\}" ) ;
-
-    // input-file-buffer
-    BufferedReader br = null ;
-
-    // filelist, used for nested aux files
-    Vector<String> fileList = new Vector<String>(5) ;
-    fileList.add( filename );
-
-    // get the file path
-    File dummy = new File( filename ) ;
-    String path = dummy.getParent() ;
-    if (path != null)
-      path = path + File.separator ;
-    else
-      path = "" ;
-
-    nestedAuxCounter = -1 ;  // count only the nested reads
-
-    // index of current file in list
-    int fileIndex = 0 ;
-
-    while (fileIndex < fileList.size())
-    {
-      String fName = fileList.elementAt( fileIndex ) ;
-      try
-      {
-//        System.out.println("read #"+fName +"#") ;
-        br = new BufferedReader( new FileReader( fName ) ) ;
-        weiter = true ;
-        loopFileOpen = true ;
-      }
-      catch ( FileNotFoundException fnfe )
-      {
-        System.out.println( "Cannot locate input file! " + fnfe.getMessage() ) ;
-        // System.exit( 0 ) ;
-        back = false ;
-        weiter = false ;
-        loopFileOpen = false ;
-      }
-
-      while ( weiter )
-      {
-        String line ;
-        try
-        {
-            if (br == null)
-                throw new IOException();
-            line = br.readLine() ;
-        }
-        catch ( IOException ioe )
-        {
-          line = null ;
-          weiter = false ;
-        }
-
-        if ( line != null )
-        {
-          matcher = pattern.matcher( line ) ;
-
-          while ( matcher.find() )
-          {
-            // extract the bibtex-key(s) XXX from \citation{XXX} string
-            int len = matcher.end() - matcher.start() ;
-            if ( len > 11 )
-            {
-              String str = matcher.group().substring( matcher.start() + 10,
-                  matcher.end() - 1 ) ;
-              // could be an comma separated list of keys
-              String keys[] = str.split( "," ) ;
-              if ( keys != null )
-              {
-                int keyCount = keys.length ;
-                for ( int t = 0 ; t < keyCount ; t++ )
-                {
-                  String dummyStr = keys[t] ;
-                  if ( dummyStr != null )
-                  {
-                    // delete all unnecessary blanks and save key into an set
-                    mySet.add( dummyStr.trim() ) ;
-//                System.out.println("found " +str +" in AUX") ;
-                  }
-                }
-              }
-            }
-          }
-          // try to find a nested aux file
-          int index = line.indexOf( "\\@input{" ) ;
-          if ( index >= 0 )
-          {
-            int start = index + 8 ;
-            int end = line.indexOf( "}", start ) ;
-            if ( end > start )
-            {
-              String str = path + line.substring( index + 8, end ) ;
-
-              // if filename already in filelist
-              if (!fileList.contains( str ) )
-              {
-                 fileList.add(str);   // insert file into filelist
-              }
-            }
-          }
-        } // line != null
-        else weiter = false ;
-      } // end of while
-
-      if ( loopFileOpen ) // only close, if open sucessful
-      {
-        try
-        {
-            if (br != null)
-                br.close() ;
-          nestedAuxCounter++ ;
-        }
-        catch ( IOException ioe )
-        {}
-      }
-
-      fileIndex++ ; // load next file
-    }
-
-    return back ;
-  }
-
-  /**
-   * resolveTags
-   * Try to find an equivalent bibtex entry into reference database for all keys
-   * (found in aux file). This methode will fill up some intern data structures.....
-   */
-  public final void resolveTags()
-  {
-    auxDB = new BibtexDatabase() ;
-    notFoundList.clear();
-
-    Iterator<String> it = mySet.iterator() ;
-
-    // forall bibtex keys (found in aux-file) try to find an equivalent
-    // entry into reference database
-    while (it.hasNext())
-    {
-      String str = it.next() ;
-      BibtexEntry entry = db.getEntryByKey(str);
-
-      if (entry == null)
-      {
-        notFoundList.add(str) ;
-      } else
-      {
-          insertEntry(auxDB, entry);
-          // Check if the entry we just found references another entry which
-          // we don't already have in our list of entries to include. If so,
-          // pull in that entry as well:
-          String crossref = entry.getField("crossref");
-          if ((crossref != null) && (!mySet.contains(crossref))) {
-              BibtexEntry refEntry = db.getEntryByKey(crossref);
-              /**
-               * [ 1717849 ] Patch for aux import by Kai Eckert
-               */
-              if (refEntry == null) {
-                  notFoundList.add(crossref);
-              } else {
-                  insertEntry(auxDB, refEntry);
-                  crossreferencedEntriesCount++;
-              }
-          }
-
-      }
-    }
-
-
-      // If we have inserted any entries, make sure to copy the source database's preamble and
-      // strings:
-      if (auxDB.getEntryCount() > 0) {
-          auxDB.setPreamble(db.getPreamble());
-          Set<String> keys = db.getStringKeySet();
-          for (String key : keys) {
-              BibtexString string = db.getString(key);
-              auxDB.addString(string);
-          }
-      }
-  }
-
-    /**
-     * Insert a clone of the given entry. The clone is given a new unique ID.
-     * @param auxDB The database to insert into.
-     * @param entry The entry to insert a copy of.
-     */
-    private void insertEntry(BibtexDatabase auxDB, BibtexEntry entry) {
-        try {
-            BibtexEntry clonedEntry = (BibtexEntry)entry.clone();
-            clonedEntry.setId(Util.createNeutralId());
-            auxDB.insertEntry(clonedEntry);
-        } catch (KeyCollisionException e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * generate
-     * Shortcut methode for easy generation.
-     *
-     * @param auxFileName String
-     * @param bibDB BibtexDatabase - reference database
-     * @return Vector - contains all not resolved bibtex entries
-     */
-    public final Vector<String> generate(String auxFileName, BibtexDatabase bibDB)
-    {
-      setReferenceDatabase(bibDB);
-      parseAuxFile(auxFileName) ;
-      resolveTags();
-
-      return notFoundList ;
-    }
-
-  public BibtexDatabase getGeneratedDatabase()
-  {
-    if (auxDB == null)
-      auxDB = new BibtexDatabase() ;
-
-    return auxDB ;
-  }
-
-  public final int getFoundKeysInAux()
-  {
-    return mySet.size() ;
-  }
-
-  public final int getResolvedKeysCount()
-  {
-    return auxDB.getEntryCount() - crossreferencedEntriesCount;
-  }
-
-  public final int getNotResolvedKeysCount()
-  {
-    return notFoundList.size() ;
-  }
-
-    /**
-     * Query the number of extra entries pulled in due to crossrefs from other
-     * entries.
-     * @return The number of additional entries pulled in due to crossref
-     */
-    public final int getCrossreferencedEntriesCount()
-    {
-        return crossreferencedEntriesCount;
-    }
-
-  /** reset all used datastructures */
-  public final void clear()
-  {
-    mySet.clear() ;
-    notFoundList.clear();
-    crossreferencedEntriesCount = 0;
-    // db = null ;  ???
-  }
-
-  /** returns a vector off all not resolved bibtex entries found in auxfile */
-  public Vector<String> getNotFoundList()
-  {
-    return notFoundList ;
-  }
-
-  /** returns the number of nested aux files, read by the last call of
-   *  generate method */
-  public int getNestedAuxCounter()
-  {
-    return this.nestedAuxCounter ;
-  }
-}
+/*
+Copyright (C) 2004 R. Nagel
+
+All programs in this directory and
+subdirectories are published under the GNU General Public License as
+described below.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
+
+Further information about the GNU GPL is available at:
+http://www.gnu.org/copyleft/gpl.ja.html
+
+*/
+
+/**
+ * <p>Title: Latex Aux to Bibtex</p>
+ *
+ * <p>Description: generates a sub-database which contains only bibtex entries
+ * from input aux file</p>
+ *
+ * <p>Copyright: Copyright (c) 2004</p>
+ *
+ * <p>Company: </p>
+ *
+ * @version 1.0
+ * @author r.nagel
+ *
+ * @todo Redesign of dialog structure for an assitent like feeling....
+ *   Now - the unknown bibtex entries cannot inserted into the reference
+ *   database without closing the dialog.
+ */
+
+// created by : r.nagel 23.08.2004
+//
+// modified : - 11.04.2005
+//              handling \\@input{file.aux} tag in aux files (nested aux files)
+
+
+package net.sf.jabref.wizard.auximport ;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import net.sf.jabref.*;
+
+public class AuxSubGenerator
+{
+
+  private HashSet<String> mySet ; // all unique bibtex keys in aux file
+
+  private Vector<String> notFoundList ; // all not solved bibtex keys
+
+  private BibtexDatabase db ; // reference database
+  private BibtexDatabase auxDB ; // contains only the bibtex keys who found in aux file
+
+  private int nestedAuxCounter ;  // counts the nested aux files
+  private int crossreferencedEntriesCount = 0; // counts entries pulled in due to crossref
+
+  public AuxSubGenerator(BibtexDatabase refDBase)
+  {
+    mySet = new HashSet<String>(20) ;
+    notFoundList = new Vector<String>() ;
+    db = refDBase ;
+  }
+
+  public final void setReferenceDatabase(BibtexDatabase newRefDB)
+  {
+    db = newRefDB ;
+  }
+
+  /**
+   * parseAuxFile
+   * read the Aux file and fill up some intern data structures.
+   * Nested aux files (latex \\include) supported!
+   *
+   * @param filename String : Path to LatexAuxFile
+   * @return boolean, true = no error occurs
+   */
+
+  // found at comp.text.tex
+  //  > Can anyone tell be the information held within a .aux file?  Is there a
+  //  > specific format to this file?
+  //
+  // I don't think there is a particular format. Every package, class
+  // or document can write to the aux file. The aux file consists of LaTeX macros
+  // and is read at the \begin{document} and again at the \end{document}.
+  //
+  // It usually contains information about existing labels
+  //  \\newlabel{sec:Intro}{{1}{1}}
+  // and citations
+  //  \citation{hiri:conv:1993}
+  // and macros to write information to other files (like toc, lof or lot files)
+  //  \@writefile{toc}{\contentsline {section}{\numberline
+  // {1}Intro}{1}}
+  // but as I said, there can be a lot more
+
+  // aux file :
+  //
+  // \\citation{x}  x = used reference of bibtex library entry
+  //
+  // \\@input{x}  x = nested aux file
+  //
+  // the \\bibdata{x} directive contains information about the
+  // bibtex library file -> x = name of bib file
+  //
+  // \\bibcite{x}{y}
+  //   x is a label for an item and y is the index in bibliography
+
+  public final boolean parseAuxFile(String filename)
+  {
+    // regular expressions
+    Pattern pattern ;
+    Matcher matcher ;
+
+    // while condition
+    boolean weiter = false ;
+
+    // return value -> default: no error
+    boolean back = true ;
+
+    // fileopen status
+    boolean loopFileOpen = false ;
+
+    // the important tag
+    pattern = Pattern.compile( "\\\\citation\\{.+\\}" ) ;
+
+    // input-file-buffer
+    BufferedReader br = null ;
+
+    // filelist, used for nested aux files
+    Vector<String> fileList = new Vector<String>(5) ;
+    fileList.add( filename );
+
+    // get the file path
+    File dummy = new File( filename ) ;
+    String path = dummy.getParent() ;
+    if (path != null)
+      path = path + File.separator ;
+    else
+      path = "" ;
+
+    nestedAuxCounter = -1 ;  // count only the nested reads
+
+    // index of current file in list
+    int fileIndex = 0 ;
+
+    while (fileIndex < fileList.size())
+    {
+      String fName = fileList.elementAt( fileIndex ) ;
+      try
+      {
+//        System.out.println("read #"+fName +"#") ;
+        br = new BufferedReader( new FileReader( fName ) ) ;
+        weiter = true ;
+        loopFileOpen = true ;
+      }
+      catch ( FileNotFoundException fnfe )
+      {
+        System.out.println( "Cannot locate input file! " + fnfe.getMessage() ) ;
+        // System.exit( 0 ) ;
+        back = false ;
+        weiter = false ;
+        loopFileOpen = false ;
+      }
+
+      while ( weiter )
+      {
+        String line ;
+        try
+        {
+            if (br == null)
+                throw new IOException();
+            line = br.readLine() ;
+        }
+        catch ( IOException ioe )
+        {
+          line = null ;
+          weiter = false ;
+        }
+
+        if ( line != null )
+        {
+          matcher = pattern.matcher( line ) ;
+
+          while ( matcher.find() )
+          {
+            // extract the bibtex-key(s) XXX from \citation{XXX} string
+            int len = matcher.end() - matcher.start() ;
+            if ( len > 11 )
+            {
+              String str = matcher.group().substring( matcher.start() + 10,
+                  matcher.end() - 1 ) ;
+              // could be an comma separated list of keys
+              String keys[] = str.split( "," ) ;
+              if ( keys != null )
+              {
+                int keyCount = keys.length ;
+                for ( int t = 0 ; t < keyCount ; t++ )
+                {
+                  String dummyStr = keys[t] ;
+                  if ( dummyStr != null )
+                  {
+                    // delete all unnecessary blanks and save key into an set
+                    mySet.add( dummyStr.trim() ) ;
+//                System.out.println("found " +str +" in AUX") ;
+                  }
+                }
+              }
+            }
+          }
+          // try to find a nested aux file
+          int index = line.indexOf( "\\@input{" ) ;
+          if ( index >= 0 )
+          {
+            int start = index + 8 ;
+            int end = line.indexOf( "}", start ) ;
+            if ( end > start )
+            {
+              String str = path + line.substring( index + 8, end ) ;
+
+              // if filename already in filelist
+              if (!fileList.contains( str ) )
+              {
+                 fileList.add(str);   // insert file into filelist
+              }
+            }
+          }
+        } // line != null
+        else weiter = false ;
+      } // end of while
+
+      if ( loopFileOpen ) // only close, if open sucessful
+      {
+        try
+        {
+            if (br != null)
+                br.close() ;
+          nestedAuxCounter++ ;
+        }
+        catch ( IOException ioe )
+        {}
+      }
+
+      fileIndex++ ; // load next file
+    }
+
+    return back ;
+  }
+
+  /**
+   * resolveTags
+   * Try to find an equivalent bibtex entry into reference database for all keys
+   * (found in aux file). This methode will fill up some intern data structures.....
+   */
+  public final void resolveTags()
+  {
+    auxDB = new BibtexDatabase() ;
+    notFoundList.clear();
+
+    Iterator<String> it = mySet.iterator() ;
+
+    // forall bibtex keys (found in aux-file) try to find an equivalent
+    // entry into reference database
+    while (it.hasNext())
+    {
+      String str = it.next() ;
+      BibtexEntry entry = db.getEntryByKey(str);
+
+      if (entry == null)
+      {
+        notFoundList.add(str) ;
+      } else
+      {
+          insertEntry(auxDB, entry);
+          // Check if the entry we just found references another entry which
+          // we don't already have in our list of entries to include. If so,
+          // pull in that entry as well:
+          String crossref = entry.getField("crossref");
+          if ((crossref != null) && (!mySet.contains(crossref))) {
+              BibtexEntry refEntry = db.getEntryByKey(crossref);
+              /**
+               * [ 1717849 ] Patch for aux import by Kai Eckert
+               */
+              if (refEntry == null) {
+                  notFoundList.add(crossref);
+              } else {
+                  insertEntry(auxDB, refEntry);
+                  crossreferencedEntriesCount++;
+              }
+          }
+
+      }
+    }
+
+
+      // If we have inserted any entries, make sure to copy the source database's preamble and
+      // strings:
+      if (auxDB.getEntryCount() > 0) {
+          auxDB.setPreamble(db.getPreamble());
+          Set<String> keys = db.getStringKeySet();
+          for (String key : keys) {
+              BibtexString string = db.getString(key);
+              auxDB.addString(string);
+          }
+      }
+  }
+
+    /**
+     * Insert a clone of the given entry. The clone is given a new unique ID.
+     * @param auxDB The database to insert into.
+     * @param entry The entry to insert a copy of.
+     */
+    private void insertEntry(BibtexDatabase auxDB, BibtexEntry entry) {
+        try {
+            BibtexEntry clonedEntry = (BibtexEntry)entry.clone();
+            clonedEntry.setId(Util.createNeutralId());
+            auxDB.insertEntry(clonedEntry);
+        } catch (KeyCollisionException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * generate
+     * Shortcut methode for easy generation.
+     *
+     * @param auxFileName String
+     * @param bibDB BibtexDatabase - reference database
+     * @return Vector - contains all not resolved bibtex entries
+     */
+    public final Vector<String> generate(String auxFileName, BibtexDatabase bibDB)
+    {
+      setReferenceDatabase(bibDB);
+      parseAuxFile(auxFileName) ;
+      resolveTags();
+
+      return notFoundList ;
+    }
+
+  public BibtexDatabase getGeneratedDatabase()
+  {
+    if (auxDB == null)
+      auxDB = new BibtexDatabase() ;
+
+    return auxDB ;
+  }
+
+  public final int getFoundKeysInAux()
+  {
+    return mySet.size() ;
+  }
+
+  public final int getResolvedKeysCount()
+  {
+    return auxDB.getEntryCount() - crossreferencedEntriesCount;
+  }
+
+  public final int getNotResolvedKeysCount()
+  {
+    return notFoundList.size() ;
+  }
+
+    /**
+     * Query the number of extra entries pulled in due to crossrefs from other
+     * entries.
+     * @return The number of additional entries pulled in due to crossref
+     */
+    public final int getCrossreferencedEntriesCount()
+    {
+        return crossreferencedEntriesCount;
+    }
+
+  /** reset all used datastructures */
+  public final void clear()
+  {
+    mySet.clear() ;
+    notFoundList.clear();
+    crossreferencedEntriesCount = 0;
+    // db = null ;  ???
+  }
+
+  /** returns a vector off all not resolved bibtex entries found in auxfile */
+  public Vector<String> getNotFoundList()
+  {
+    return notFoundList ;
+  }
+
+  /** returns the number of nested aux files, read by the last call of
+   *  generate method */
+  public int getNestedAuxCounter()
+  {
+    return this.nestedAuxCounter ;
+  }
+}
diff --git a/src/java/net/sf/jabref/wizard/auximport/gui/FromAuxDialog.java b/src/java/net/sf/jabref/wizard/auximport/gui/FromAuxDialog.java
index a1e1547..2c6275b 100644
--- a/src/java/net/sf/jabref/wizard/auximport/gui/FromAuxDialog.java
+++ b/src/java/net/sf/jabref/wizard/auximport/gui/FromAuxDialog.java
@@ -1,355 +1,355 @@
-/*
- Copyright (C) 2004 R. Nagel
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-
-// A wizard dialog for generating a new sub database from existing TeX aux file
-//
-// created by : r.nagel 23.08.2004
-//
-// modified : 18.04.2006 r.nagel
-//            insert a "short info" section
-
-
-package net.sf.jabref.wizard.auximport.gui;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-import javax.swing.AbstractAction;
-import javax.swing.ActionMap;
-import javax.swing.BorderFactory;
-import javax.swing.InputMap;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JEditorPane;
-import javax.swing.JFileChooser;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTabbedPane;
-import javax.swing.JTextArea;
-import javax.swing.JTextField;
-import javax.swing.SwingConstants;
-import javax.swing.border.EtchedBorder;
-import javax.swing.border.TitledBorder;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRef;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.gui.FileDialogs;
-import net.sf.jabref.wizard.auximport.AuxSubGenerator;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-public class FromAuxDialog
-        extends JDialog {
-    private JPanel statusPanel = new JPanel();
-    private JPanel buttons = new JPanel();
-    private JButton okButton = new JButton();
-    private JButton cancelButton = new JButton();
-    private JButton generateButton = new JButton();
-
-    private JComboBox dbChooser = new JComboBox();
-    private JTextField auxFileField;
-    private JButton browseAuxFileButton;
-
-    private JList notFoundList;
-    private JTextArea statusInfos;
-
-    // all open databases from JabRefFrame
-    private JTabbedPane parentTabbedPane;
-
-    private boolean okPressed = false;
-
-    private AuxSubGenerator auxParser;
-
-    public FromAuxDialog(JabRefFrame frame, String title, boolean modal,
-                         JTabbedPane viewedDBs) {
-        super(frame, title, modal);
-
-        parentTabbedPane = viewedDBs;
-
-        auxParser = new AuxSubGenerator(null);
-
-        try {
-            jbInit(frame);
-            pack();
-            setSize(600, 500);
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-    }
-
-    private void jbInit(JabRefFrame parent) {
-        JPanel panel1 = new JPanel();
-
-        panel1.setLayout(new BorderLayout());
-        okButton.setText(Globals.lang("Ok"));
-        okButton.setEnabled(false);
-        okButton.addActionListener(new FromAuxDialog_ok_actionAdapter(this));
-        cancelButton.setText(Globals.lang("Cancel"));
-        cancelButton.addActionListener(new FromAuxDialog_Cancel_actionAdapter(this));
-        generateButton.setText(Globals.lang("Generate"));
-        generateButton.addActionListener(new FromAuxDialog_generate_actionAdapter(this));
-
-        initPanels(parent);
-
-        // insert the buttons
-        ButtonBarBuilder bb = new ButtonBarBuilder();
-        JPanel buttonPanel = bb.getPanel();
-        buttonPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-
-        bb.addGlue();
-        bb.addButton(generateButton);
-        bb.addRelatedGap();
-        bb.addButton(okButton);
-        bb.addButton(cancelButton);
-        bb.addGlue();
-        this.setModal(true);
-        this.setResizable(true);
-        this.setTitle(Globals.lang("AUX file import"));
-        JLabel desc = new JLabel("<html><h3>"+Globals.lang("AUX file import")+"</h3><p>"
-                    +Globals.lang("This feature generates a new database based on which entries "
-                    +"are needed in an existing LaTeX document.")+"</p>"
-                    +"<p>"+Globals.lang("You need to select one of your open databases from which to choose "
-                    +"entries, as well as the AUX file produced by LaTeX when compiling your document.")+"</p></html>");
-        desc.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-        panel1.add(desc, BorderLayout.NORTH);
-
-        JPanel centerPane = new JPanel(new BorderLayout());
-        centerPane.add(buttons, BorderLayout.NORTH);
-        centerPane.add(statusPanel, BorderLayout.CENTER);
-
-        getContentPane().add(panel1, BorderLayout.NORTH);
-        getContentPane().add(centerPane, BorderLayout.CENTER);
-        getContentPane().add(buttonPanel, BorderLayout.SOUTH);
-
-        // Key bindings:
-        ActionMap am = statusPanel.getActionMap();
-        InputMap im = statusPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        im.put(parent.prefs().getKey("Close dialog"), "close");
-        am.put("close", new AbstractAction() {
-            public void actionPerformed(ActionEvent e) {
-                dispose();
-            }
-        });
-
-    }
-
-    private void initPanels(JabRefFrame parent) {
-        // collect the names of all open databases
-        int len = parentTabbedPane.getTabCount();
-        int toSelect = -1;
-        for (int i = 0; i<len; i++) {
-            dbChooser.addItem(parentTabbedPane.getTitleAt(i));
-            if (parent.baseAt(i) == parent.basePanel())
-                toSelect = i;
-        }
-        if (toSelect >= 0)
-            dbChooser.setSelectedIndex(toSelect);
-
-        auxFileField = new JTextField("", 25);
-        browseAuxFileButton = new JButton(Globals.lang("Browse"));
-        browseAuxFileButton.addActionListener(new BrowseAction(auxFileField, parent));
-        notFoundList = new JList();
-        JScrollPane listScrollPane = new JScrollPane(notFoundList);
-        //listScrollPane.setPreferredSize(new Dimension(250, 120));
-        statusInfos = new JTextArea("", 5, 20);
-        JScrollPane statusScrollPane = new JScrollPane(statusInfos);
-        //statusScrollPane.setPreferredSize(new Dimension(250, 120));
-        //statusInfos.setBorder(BorderFactory.createEtchedBorder());
-        statusInfos.setEditable(false);
-
-        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout(
-                "left:pref, 4dlu, fill:pref:grow, 4dlu, left:pref", ""), buttons);
-        b.appendSeparator(Globals.lang("Options"));
-        b.append(Globals.lang("Reference database") + ":");
-        b.append(dbChooser, 3);
-        b.nextLine();
-        b.append(Globals.lang("LaTeX AUX file") + ":");
-        b.append(auxFileField);
-        b.append(browseAuxFileButton);
-        b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-
-        b = new DefaultFormBuilder(new FormLayout(
-                "fill:pref:grow, 4dlu, fill:pref:grow", "pref, pref, fill:pref:grow"), statusPanel);
-        b.appendSeparator(Globals.lang("Unknown bibtex entries")+":");
-        b.append(Globals.lang("Unknown bibtex entries")+":");
-        b.append(Globals.lang("Messages")+":");
-        b.nextLine();
-        b.append(listScrollPane);
-        b.append(statusScrollPane);
-        b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-    }
-
-    void ok_actionPerformed(ActionEvent e) {
-        okPressed = true;
-        dispose();
-    }
-
-    void Cancel_actionPerformed(ActionEvent e) {
-        dispose();
-    }
-
-    void generate_actionPerformed(ActionEvent e) {
-        generateButton.setEnabled(false);
-        BasePanel bp = (BasePanel) parentTabbedPane.getComponentAt(
-                dbChooser.getSelectedIndex());
-        notFoundList.removeAll();
-        statusInfos.setText(null);
-        BibtexDatabase refBase = bp.getDatabase();
-        String auxName = auxFileField.getText();
-
-        if (auxName != null) {
-            if ((refBase != null) && (auxName.length() > 0)) {
-                auxParser.clear();
-                notFoundList.setListData(auxParser.generate(auxName, refBase));
-
-                statusInfos.append(Globals.lang("keys in database") + " " +
-                        refBase.getEntryCount());
-                statusInfos.append("\n" + Globals.lang("found in aux file") + " " +
-                        auxParser.getFoundKeysInAux());
-                statusInfos.append("\n" + Globals.lang("resolved") + " " +
-                        auxParser.getResolvedKeysCount());
-                statusInfos.append("\n" + Globals.lang("not found") + " " +
-                        auxParser.getNotResolvedKeysCount());
-                statusInfos.append("\n" + Globals.lang("crossreferenced entries included") + " " +
-                        auxParser.getCrossreferencedEntriesCount());
-
-
-                int nested = auxParser.getNestedAuxCounter();
-                if (nested > 0) {
-                    statusInfos.append("\n" + Globals.lang("nested_aux_files") + " " +
-                            nested);
-                }
-
-                okButton.setEnabled(true);
-            }
-        }
-
-        // the generated database contains no entries -> no active ok-button
-        if (auxParser.getGeneratedDatabase().getEntryCount() < 1) {
-            statusInfos.append("\n" + Globals.lang("empty database"));
-            okButton.setEnabled(false);
-        }
-
-        generateButton.setEnabled(true);
-    }
-
-    public boolean okPressed() {
-        return okPressed;
-    }
-
-    public BibtexDatabase getGenerateDB() {
-        return auxParser.getGeneratedDatabase();
-    }
-
-// ---------------------------------------------------------------------------
-
-    /**
-     * Action used to produce a "Browse" button for one of the text fields.
-     */
-    class BrowseAction
-            extends AbstractAction {
-        private JTextField comp;
-        private JabRefFrame _frame;
-
-        public BrowseAction(JTextField tc, JabRefFrame frame) {
-            super(Globals.lang("Browse"));
-            _frame = frame;
-            comp = tc;
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            String chosen = null;
-            chosen = FileDialogs.getNewFile(_frame,
-                    new File(comp.getText()),
-                    ".aux",
-                    JFileChooser.OPEN_DIALOG, false);
-            if (chosen != null) {
-                File newFile = new File(chosen);
-                comp.setText(newFile.getPath());
-            }
-        }
-    }
-
-}
-
-// ----------- helper class -------------------
-class FromAuxDialog_ok_actionAdapter
-        implements java.awt.event.ActionListener {
-    FromAuxDialog adaptee;
-
-    FromAuxDialog_ok_actionAdapter(FromAuxDialog adaptee) {
-        this.adaptee = adaptee;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        adaptee.ok_actionPerformed(e);
-    }
-}
-
-class FromAuxDialog_Cancel_actionAdapter
-        implements java.awt.event.ActionListener {
-    FromAuxDialog adaptee;
-
-    FromAuxDialog_Cancel_actionAdapter(FromAuxDialog adaptee) {
-        this.adaptee = adaptee;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        adaptee.Cancel_actionPerformed(e);
-    }
-}
-
-class FromAuxDialog_generate_actionAdapter
-        implements java.awt.event.ActionListener {
-    FromAuxDialog adaptee;
-
-    FromAuxDialog_generate_actionAdapter(FromAuxDialog adaptee) {
-        this.adaptee = adaptee;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-        adaptee.generate_actionPerformed(e);
-    }
-}
+/*
+ Copyright (C) 2004 R. Nagel
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+
+// A wizard dialog for generating a new sub database from existing TeX aux file
+//
+// created by : r.nagel 23.08.2004
+//
+// modified : 18.04.2006 r.nagel
+//            insert a "short info" section
+
+
+package net.sf.jabref.wizard.auximport.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import javax.swing.AbstractAction;
+import javax.swing.ActionMap;
+import javax.swing.BorderFactory;
+import javax.swing.InputMap;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JEditorPane;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.SwingConstants;
+import javax.swing.border.EtchedBorder;
+import javax.swing.border.TitledBorder;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.gui.FileDialogs;
+import net.sf.jabref.wizard.auximport.AuxSubGenerator;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+public class FromAuxDialog
+        extends JDialog {
+    private JPanel statusPanel = new JPanel();
+    private JPanel buttons = new JPanel();
+    private JButton okButton = new JButton();
+    private JButton cancelButton = new JButton();
+    private JButton generateButton = new JButton();
+
+    private JComboBox dbChooser = new JComboBox();
+    private JTextField auxFileField;
+    private JButton browseAuxFileButton;
+
+    private JList notFoundList;
+    private JTextArea statusInfos;
+
+    // all open databases from JabRefFrame
+    private JTabbedPane parentTabbedPane;
+
+    private boolean okPressed = false;
+
+    private AuxSubGenerator auxParser;
+
+    public FromAuxDialog(JabRefFrame frame, String title, boolean modal,
+                         JTabbedPane viewedDBs) {
+        super(frame, title, modal);
+
+        parentTabbedPane = viewedDBs;
+
+        auxParser = new AuxSubGenerator(null);
+
+        try {
+            jbInit(frame);
+            pack();
+            setSize(600, 500);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    private void jbInit(JabRefFrame parent) {
+        JPanel panel1 = new JPanel();
+
+        panel1.setLayout(new BorderLayout());
+        okButton.setText(Globals.lang("Ok"));
+        okButton.setEnabled(false);
+        okButton.addActionListener(new FromAuxDialog_ok_actionAdapter(this));
+        cancelButton.setText(Globals.lang("Cancel"));
+        cancelButton.addActionListener(new FromAuxDialog_Cancel_actionAdapter(this));
+        generateButton.setText(Globals.lang("Generate"));
+        generateButton.addActionListener(new FromAuxDialog_generate_actionAdapter(this));
+
+        initPanels(parent);
+
+        // insert the buttons
+        ButtonBarBuilder bb = new ButtonBarBuilder();
+        JPanel buttonPanel = bb.getPanel();
+        buttonPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+        bb.addGlue();
+        bb.addButton(generateButton);
+        bb.addRelatedGap();
+        bb.addButton(okButton);
+        bb.addButton(cancelButton);
+        bb.addGlue();
+        this.setModal(true);
+        this.setResizable(true);
+        this.setTitle(Globals.lang("AUX file import"));
+        JLabel desc = new JLabel("<html><h3>"+Globals.lang("AUX file import")+"</h3><p>"
+                    +Globals.lang("This feature generates a new database based on which entries "
+                    +"are needed in an existing LaTeX document.")+"</p>"
+                    +"<p>"+Globals.lang("You need to select one of your open databases from which to choose "
+                    +"entries, as well as the AUX file produced by LaTeX when compiling your document.")+"</p></html>");
+        desc.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        panel1.add(desc, BorderLayout.NORTH);
+
+        JPanel centerPane = new JPanel(new BorderLayout());
+        centerPane.add(buttons, BorderLayout.NORTH);
+        centerPane.add(statusPanel, BorderLayout.CENTER);
+
+        getContentPane().add(panel1, BorderLayout.NORTH);
+        getContentPane().add(centerPane, BorderLayout.CENTER);
+        getContentPane().add(buttonPanel, BorderLayout.SOUTH);
+
+        // Key bindings:
+        ActionMap am = statusPanel.getActionMap();
+        InputMap im = statusPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+        im.put(parent.prefs().getKey("Close dialog"), "close");
+        am.put("close", new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                dispose();
+            }
+        });
+
+    }
+
+    private void initPanels(JabRefFrame parent) {
+        // collect the names of all open databases
+        int len = parentTabbedPane.getTabCount();
+        int toSelect = -1;
+        for (int i = 0; i<len; i++) {
+            dbChooser.addItem(parentTabbedPane.getTitleAt(i));
+            if (parent.baseAt(i) == parent.basePanel())
+                toSelect = i;
+        }
+        if (toSelect >= 0)
+            dbChooser.setSelectedIndex(toSelect);
+
+        auxFileField = new JTextField("", 25);
+        browseAuxFileButton = new JButton(Globals.lang("Browse"));
+        browseAuxFileButton.addActionListener(new BrowseAction(auxFileField, parent));
+        notFoundList = new JList();
+        JScrollPane listScrollPane = new JScrollPane(notFoundList);
+        //listScrollPane.setPreferredSize(new Dimension(250, 120));
+        statusInfos = new JTextArea("", 5, 20);
+        JScrollPane statusScrollPane = new JScrollPane(statusInfos);
+        //statusScrollPane.setPreferredSize(new Dimension(250, 120));
+        //statusInfos.setBorder(BorderFactory.createEtchedBorder());
+        statusInfos.setEditable(false);
+
+        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout(
+                "left:pref, 4dlu, fill:pref:grow, 4dlu, left:pref", ""), buttons);
+        b.appendSeparator(Globals.lang("Options"));
+        b.append(Globals.lang("Reference database") + ":");
+        b.append(dbChooser, 3);
+        b.nextLine();
+        b.append(Globals.lang("LaTeX AUX file") + ":");
+        b.append(auxFileField);
+        b.append(browseAuxFileButton);
+        b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+        b = new DefaultFormBuilder(new FormLayout(
+                "fill:pref:grow, 4dlu, fill:pref:grow", "pref, pref, fill:pref:grow"), statusPanel);
+        b.appendSeparator(Globals.lang("Unknown bibtex entries")+":");
+        b.append(Globals.lang("Unknown bibtex entries")+":");
+        b.append(Globals.lang("Messages")+":");
+        b.nextLine();
+        b.append(listScrollPane);
+        b.append(statusScrollPane);
+        b.getPanel().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+    }
+
+    void ok_actionPerformed(ActionEvent e) {
+        okPressed = true;
+        dispose();
+    }
+
+    void Cancel_actionPerformed(ActionEvent e) {
+        dispose();
+    }
+
+    void generate_actionPerformed(ActionEvent e) {
+        generateButton.setEnabled(false);
+        BasePanel bp = (BasePanel) parentTabbedPane.getComponentAt(
+                dbChooser.getSelectedIndex());
+        notFoundList.removeAll();
+        statusInfos.setText(null);
+        BibtexDatabase refBase = bp.getDatabase();
+        String auxName = auxFileField.getText();
+
+        if (auxName != null) {
+            if ((refBase != null) && (auxName.length() > 0)) {
+                auxParser.clear();
+                notFoundList.setListData(auxParser.generate(auxName, refBase));
+
+                statusInfos.append(Globals.lang("keys in database") + " " +
+                        refBase.getEntryCount());
+                statusInfos.append("\n" + Globals.lang("found in aux file") + " " +
+                        auxParser.getFoundKeysInAux());
+                statusInfos.append("\n" + Globals.lang("resolved") + " " +
+                        auxParser.getResolvedKeysCount());
+                statusInfos.append("\n" + Globals.lang("not found") + " " +
+                        auxParser.getNotResolvedKeysCount());
+                statusInfos.append("\n" + Globals.lang("crossreferenced entries included") + " " +
+                        auxParser.getCrossreferencedEntriesCount());
+
+
+                int nested = auxParser.getNestedAuxCounter();
+                if (nested > 0) {
+                    statusInfos.append("\n" + Globals.lang("nested_aux_files") + " " +
+                            nested);
+                }
+
+                okButton.setEnabled(true);
+            }
+        }
+
+        // the generated database contains no entries -> no active ok-button
+        if (auxParser.getGeneratedDatabase().getEntryCount() < 1) {
+            statusInfos.append("\n" + Globals.lang("empty database"));
+            okButton.setEnabled(false);
+        }
+
+        generateButton.setEnabled(true);
+    }
+
+    public boolean okPressed() {
+        return okPressed;
+    }
+
+    public BibtexDatabase getGenerateDB() {
+        return auxParser.getGeneratedDatabase();
+    }
+
+// ---------------------------------------------------------------------------
+
+    /**
+     * Action used to produce a "Browse" button for one of the text fields.
+     */
+    class BrowseAction
+            extends AbstractAction {
+        private JTextField comp;
+        private JabRefFrame _frame;
+
+        public BrowseAction(JTextField tc, JabRefFrame frame) {
+            super(Globals.lang("Browse"));
+            _frame = frame;
+            comp = tc;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            String chosen = null;
+            chosen = FileDialogs.getNewFile(_frame,
+                    new File(comp.getText()),
+                    ".aux",
+                    JFileChooser.OPEN_DIALOG, false);
+            if (chosen != null) {
+                File newFile = new File(chosen);
+                comp.setText(newFile.getPath());
+            }
+        }
+    }
+
+}
+
+// ----------- helper class -------------------
+class FromAuxDialog_ok_actionAdapter
+        implements java.awt.event.ActionListener {
+    FromAuxDialog adaptee;
+
+    FromAuxDialog_ok_actionAdapter(FromAuxDialog adaptee) {
+        this.adaptee = adaptee;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        adaptee.ok_actionPerformed(e);
+    }
+}
+
+class FromAuxDialog_Cancel_actionAdapter
+        implements java.awt.event.ActionListener {
+    FromAuxDialog adaptee;
+
+    FromAuxDialog_Cancel_actionAdapter(FromAuxDialog adaptee) {
+        this.adaptee = adaptee;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        adaptee.Cancel_actionPerformed(e);
+    }
+}
+
+class FromAuxDialog_generate_actionAdapter
+        implements java.awt.event.ActionListener {
+    FromAuxDialog adaptee;
+
+    FromAuxDialog_generate_actionAdapter(FromAuxDialog adaptee) {
+        this.adaptee = adaptee;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        adaptee.generate_actionPerformed(e);
+    }
+}
diff --git a/src/java/net/sf/jabref/wizard/integrity/IntegrityCheck.java b/src/java/net/sf/jabref/wizard/integrity/IntegrityCheck.java
index 2dbc22e..0d4b8d6 100644
--- a/src/java/net/sf/jabref/wizard/integrity/IntegrityCheck.java
+++ b/src/java/net/sf/jabref/wizard/integrity/IntegrityCheck.java
@@ -1,276 +1,276 @@
-/*
-Copyright (C) 2004 R. Nagel
-
-All programs in this directory and
-subdirectories are published under the GNU General Public License as
-described below.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA
-
-Further information about the GNU GPL is available at:
-http://www.gnu.org/copyleft/gpl.ja.html
-
-*/
-
-// created by : r.nagel 27.10.2004
-//
-// function : check all bibtex items and report errors, inconsistencies,
-//            warnings, hints and ....
-//
-//     todo : find equal authors: e.g.: D. Knuth = Donald Knuth = Donald E. Knuth
-//            and try to give all items an identically look
-//
-// modified :
-
-
-
-package net.sf.jabref.wizard.integrity ;
-
-import java.util.Vector;
-
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-
-public class IntegrityCheck
-{
-  private Vector<IntegrityMessage> messages ;
-
-  public IntegrityCheck()
-  {
-    messages = new Vector<IntegrityMessage>() ;
-  }
-
-  public Vector<IntegrityMessage> checkBibtexDatabase(BibtexDatabase base) {
-		messages.clear();
-		if (base != null) {
-			for (BibtexEntry entry : base.getEntries()) {
-				checkSingleEntry(entry);
-			}
-		}
-		return new Vector<IntegrityMessage>(messages);
-	}
-
-	public Vector<IntegrityMessage> checkBibtexEntry(BibtexEntry entry) {
-		messages.clear();
-		checkSingleEntry(entry);
-		return new Vector<IntegrityMessage>(messages);
-	}
-
-  public void checkSingleEntry(BibtexEntry entry)
-  {
-    if (entry == null)
-      return ;
-
-    Object data = entry.getField("author") ;
-    if (data != null)
-      authorNameCheck( data.toString(), "author", entry) ;
-
-    data = entry.getField("editor") ;
-    if (data != null)
-      authorNameCheck( data.toString(), "editor", entry) ;
-
-    data = entry.getField("title") ;
-    if (data != null)
-      titleCheck( data.toString(), "title", entry) ;
-
-    data = entry.getField("year") ;
-    if (data != null)
-      yearCheck( data.toString(), "year", entry) ;
-  }
-
- /** fills the class Vector (of IntegrityMessage Objects) which did inform about
-  *  failures, hints....
-  *  The Authors or Editors field could be invalid -> try to detect it!
-  *  Knuth, Donald E. and Kurt Cobain and A. Einstein = N,NNaNNaNN
-  */
-  private void authorNameCheck(String names, String fieldName, BibtexEntry entry)
-  {
-    // try to extract the structure of author tag
-    // N = name, ","= seperator, "a" = and
-    StringBuffer structure = new StringBuffer() ;
-    int len = names.length() ;
-    int mode = -1 ;
-    for (int t = 0 ; t < len ; t++)
-    {
-      char ch = names.charAt(t) ;
-      switch (ch)
-      {
-        case ',' :
-          if (mode == 5) // "and"
-            structure.append('a') ;
-          else
-            structure.append('N') ;
-
-          structure.append(',') ;
-          mode = 0 ;
-          break ;
-
-        case ' ' :
-          if (mode == 5) // "and"
-            structure.append('a') ;
-          else
-            if (mode != 0)
-              structure.append('N') ;
-          mode = -1 ; // blank processed
-          break ;
-       case 'a' :
-         if (mode == -1)
-           mode = 2 ;
-         break ;
-       case 'n' :
-         if (mode == 2)
-           mode = 3 ;
-         break ;
-       case 'd' :
-         if (mode == 3)
-           mode = 5 ;
-         break ;
-       default :
-         mode = 1 ;
-      }
-    }
-    if (mode == 5) // "and"
-      structure.append('a') ;
-    else
-      if (mode != 0)
-        structure.append('N') ;
-
-    // Check
-    len = structure.length() ;
-    if (len > 0)
-    {
-      if (structure.charAt(0) != 'N')  // must start by name
-      {
-        messages.add( new IntegrityMessage( IntegrityMessage.NAME_START_WARNING,
-                                            entry, fieldName, null))  ;
-//        back.add("beginning of " +fieldName +" field");
-      }
-
-      if (structure.charAt( structure.length() -1) != 'N')  // end without seperator
-      {
-        messages.add( new IntegrityMessage( IntegrityMessage.NAME_END_WARNING,
-                                            entry, fieldName, null))  ;
-//        back.add("bad end (" +fieldName +" field)");
-      }
-      /*if (structure.indexOf("NN,NN") > -1)
-      {
-        messages.add( new IntegrityMessage( IntegrityMessage.NAME_SEMANTIC_WARNING,
-                                            entry, fieldName, null))  ;
-
-//        back.add("something could be wrong in " +fieldName +" field") ;
-      } */
-    }
-//    messages.add( new IntegrityMessage( IntegrityMessage.NAME_END_WARNING,
-//                                        entry, fieldName, null))  ;
-
-  }
-
-
-
-  private void titleCheck(String title, String fieldName, BibtexEntry entry)
-  {
-    int len = title.length() ;
-    int mode = 0 ;
-    int upLowCounter = 0 ;
-//    boolean lastWasSpace = false ;
-    for (int t = 0 ; t < len ; t++)
-    {
-      char ch = title.charAt( t ) ;
-      switch (ch)
-      {
-        case '}' : // end of Sequence
-          if (mode == 0)
-          {
-            // closing brace '}' without an opening
-            messages.add( new IntegrityMessage( IntegrityMessage.UNEXPECTED_CLOSING_BRACE_FAILURE,
-                                            entry, fieldName, null))  ;
-          }
-          else  // mode == 1
-          {
-            mode-- ;
-//            lastWasSpace = true ;
-          }
-          break ;
-
-        case '{' :  // open {
-          mode++ ;
-          break ;
-
-        case ' ' :
-//          lastWasSpace = true ;
-          break ;
-
-        default :
-          if (mode == 0) // out of {}
-          {
-            if ( Character.isUpperCase(ch) && (t > 1))
-            {
-              upLowCounter++ ;
-            }
-          }
-      }
-    }
-    if (upLowCounter > 0)
-    {
-
-        /*
-        Morten Alver (2006.10.10):
-
-        Disabling this warning because we have a feature for automatically adding
-        braces when saving, which makes this warning misleading. It could be modified
-        to suggest to use this feature if not enabled, and not give a warning if the
-        feature is enabled.
-
-        messages.add( new IntegrityMessage( IntegrityMessage.UPPER_AND_LOWER_HINT,
-                                        entry, fieldName, null))  ;*/
-
-    }
-  }
-
-  /** Checks, if the number String contains a four digit year */
-  private void yearCheck(String number, String fieldName, BibtexEntry entry)
-  {
-    int len = number.length() ;
-    int digitCounter = 0 ;
-    boolean fourDigitsBlock = false ;
-    boolean containsFourDigits = false ;
-
-    for (int t = 0 ; t < len ; t++)
-    {
-      char ch = number.charAt( t ) ;
-      if ( Character.isDigit(ch))
-      {
-        digitCounter++ ;
-        if (digitCounter == 4)
-          fourDigitsBlock = true ;
-        else
-          fourDigitsBlock = false ;
-      } else
-      {
-        if (fourDigitsBlock)
-          containsFourDigits = true ;
-
-        digitCounter = 0 ;
-      }
-    }
-
-    if ((!containsFourDigits) && (!fourDigitsBlock))
-    {
-      messages.add( new IntegrityMessage( IntegrityMessage.FOUR_DIGITS_HINT,
-                                      entry, fieldName, null))  ;
-    }
-  }
-}
+/*
+Copyright (C) 2004 R. Nagel
+
+All programs in this directory and
+subdirectories are published under the GNU General Public License as
+described below.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
+
+Further information about the GNU GPL is available at:
+http://www.gnu.org/copyleft/gpl.ja.html
+
+*/
+
+// created by : r.nagel 27.10.2004
+//
+// function : check all bibtex items and report errors, inconsistencies,
+//            warnings, hints and ....
+//
+//     todo : find equal authors: e.g.: D. Knuth = Donald Knuth = Donald E. Knuth
+//            and try to give all items an identically look
+//
+// modified :
+
+
+
+package net.sf.jabref.wizard.integrity ;
+
+import java.util.Vector;
+
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+
+public class IntegrityCheck
+{
+  private Vector<IntegrityMessage> messages ;
+
+  public IntegrityCheck()
+  {
+    messages = new Vector<IntegrityMessage>() ;
+  }
+
+  public Vector<IntegrityMessage> checkBibtexDatabase(BibtexDatabase base) {
+		messages.clear();
+		if (base != null) {
+			for (BibtexEntry entry : base.getEntries()) {
+				checkSingleEntry(entry);
+			}
+		}
+		return new Vector<IntegrityMessage>(messages);
+	}
+
+	public Vector<IntegrityMessage> checkBibtexEntry(BibtexEntry entry) {
+		messages.clear();
+		checkSingleEntry(entry);
+		return new Vector<IntegrityMessage>(messages);
+	}
+
+  public void checkSingleEntry(BibtexEntry entry)
+  {
+    if (entry == null)
+      return ;
+
+    Object data = entry.getField("author") ;
+    if (data != null)
+      authorNameCheck( data.toString(), "author", entry) ;
+
+    data = entry.getField("editor") ;
+    if (data != null)
+      authorNameCheck( data.toString(), "editor", entry) ;
+
+    data = entry.getField("title") ;
+    if (data != null)
+      titleCheck( data.toString(), "title", entry) ;
+
+    data = entry.getField("year") ;
+    if (data != null)
+      yearCheck( data.toString(), "year", entry) ;
+  }
+
+ /** fills the class Vector (of IntegrityMessage Objects) which did inform about
+  *  failures, hints....
+  *  The Authors or Editors field could be invalid -> try to detect it!
+  *  Knuth, Donald E. and Kurt Cobain and A. Einstein = N,NNaNNaNN
+  */
+  private void authorNameCheck(String names, String fieldName, BibtexEntry entry)
+  {
+    // try to extract the structure of author tag
+    // N = name, ","= seperator, "a" = and
+    StringBuffer structure = new StringBuffer() ;
+    int len = names.length() ;
+    int mode = -1 ;
+    for (int t = 0 ; t < len ; t++)
+    {
+      char ch = names.charAt(t) ;
+      switch (ch)
+      {
+        case ',' :
+          if (mode == 5) // "and"
+            structure.append('a') ;
+          else
+            structure.append('N') ;
+
+          structure.append(',') ;
+          mode = 0 ;
+          break ;
+
+        case ' ' :
+          if (mode == 5) // "and"
+            structure.append('a') ;
+          else
+            if (mode != 0)
+              structure.append('N') ;
+          mode = -1 ; // blank processed
+          break ;
+       case 'a' :
+         if (mode == -1)
+           mode = 2 ;
+         break ;
+       case 'n' :
+         if (mode == 2)
+           mode = 3 ;
+         break ;
+       case 'd' :
+         if (mode == 3)
+           mode = 5 ;
+         break ;
+       default :
+         mode = 1 ;
+      }
+    }
+    if (mode == 5) // "and"
+      structure.append('a') ;
+    else
+      if (mode != 0)
+        structure.append('N') ;
+
+    // Check
+    len = structure.length() ;
+    if (len > 0)
+    {
+      if (structure.charAt(0) != 'N')  // must start by name
+      {
+        messages.add( new IntegrityMessage( IntegrityMessage.NAME_START_WARNING,
+                                            entry, fieldName, null))  ;
+//        back.add("beginning of " +fieldName +" field");
+      }
+
+      if (structure.charAt( structure.length() -1) != 'N')  // end without seperator
+      {
+        messages.add( new IntegrityMessage( IntegrityMessage.NAME_END_WARNING,
+                                            entry, fieldName, null))  ;
+//        back.add("bad end (" +fieldName +" field)");
+      }
+      /*if (structure.indexOf("NN,NN") > -1)
+      {
+        messages.add( new IntegrityMessage( IntegrityMessage.NAME_SEMANTIC_WARNING,
+                                            entry, fieldName, null))  ;
+
+//        back.add("something could be wrong in " +fieldName +" field") ;
+      } */
+    }
+//    messages.add( new IntegrityMessage( IntegrityMessage.NAME_END_WARNING,
+//                                        entry, fieldName, null))  ;
+
+  }
+
+
+
+  private void titleCheck(String title, String fieldName, BibtexEntry entry)
+  {
+    int len = title.length() ;
+    int mode = 0 ;
+    int upLowCounter = 0 ;
+//    boolean lastWasSpace = false ;
+    for (int t = 0 ; t < len ; t++)
+    {
+      char ch = title.charAt( t ) ;
+      switch (ch)
+      {
+        case '}' : // end of Sequence
+          if (mode == 0)
+          {
+            // closing brace '}' without an opening
+            messages.add( new IntegrityMessage( IntegrityMessage.UNEXPECTED_CLOSING_BRACE_FAILURE,
+                                            entry, fieldName, null))  ;
+          }
+          else  // mode == 1
+          {
+            mode-- ;
+//            lastWasSpace = true ;
+          }
+          break ;
+
+        case '{' :  // open {
+          mode++ ;
+          break ;
+
+        case ' ' :
+//          lastWasSpace = true ;
+          break ;
+
+        default :
+          if (mode == 0) // out of {}
+          {
+            if ( Character.isUpperCase(ch) && (t > 1))
+            {
+              upLowCounter++ ;
+            }
+          }
+      }
+    }
+    if (upLowCounter > 0)
+    {
+
+        /*
+        Morten Alver (2006.10.10):
+
+        Disabling this warning because we have a feature for automatically adding
+        braces when saving, which makes this warning misleading. It could be modified
+        to suggest to use this feature if not enabled, and not give a warning if the
+        feature is enabled.
+
+        messages.add( new IntegrityMessage( IntegrityMessage.UPPER_AND_LOWER_HINT,
+                                        entry, fieldName, null))  ;*/
+
+    }
+  }
+
+  /** Checks, if the number String contains a four digit year */
+  private void yearCheck(String number, String fieldName, BibtexEntry entry)
+  {
+    int len = number.length() ;
+    int digitCounter = 0 ;
+    boolean fourDigitsBlock = false ;
+    boolean containsFourDigits = false ;
+
+    for (int t = 0 ; t < len ; t++)
+    {
+      char ch = number.charAt( t ) ;
+      if ( Character.isDigit(ch))
+      {
+        digitCounter++ ;
+        if (digitCounter == 4)
+          fourDigitsBlock = true ;
+        else
+          fourDigitsBlock = false ;
+      } else
+      {
+        if (fourDigitsBlock)
+          containsFourDigits = true ;
+
+        digitCounter = 0 ;
+      }
+    }
+
+    if ((!containsFourDigits) && (!fourDigitsBlock))
+    {
+      messages.add( new IntegrityMessage( IntegrityMessage.FOUR_DIGITS_HINT,
+                                      entry, fieldName, null))  ;
+    }
+  }
+}
diff --git a/src/java/net/sf/jabref/wizard/integrity/IntegrityMessage.java b/src/java/net/sf/jabref/wizard/integrity/IntegrityMessage.java
index bc97505..d1c2df6 100644
--- a/src/java/net/sf/jabref/wizard/integrity/IntegrityMessage.java
+++ b/src/java/net/sf/jabref/wizard/integrity/IntegrityMessage.java
@@ -1,144 +1,144 @@
-/*
-Copyright (C) 2004 R. Nagel
-
-All programs in this directory and
-subdirectories are published under the GNU General Public License as
-described below.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA
-
-Further information about the GNU GPL is available at:
-http://www.gnu.org/copyleft/gpl.ja.html
-
-*/
-
-
-// created by : r.nagel 09.12.2004
-//
-// function : a class for wrapping a IntegrityCheck message
-//
-// modified :
-
-package net.sf.jabref.wizard.integrity ;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-
-public class IntegrityMessage implements Cloneable
-{
-  // Hints and Infos < 1000 :-)
-  public static final int
-      GENERIC_HINT             = 1,
-      UPPER_AND_LOWER_HINT     = 10,
-      FOUR_DIGITS_HINT         = 11
-
-      ;
-
-  // > 1000 Warnings
-  public static final int
-      GENERIC_WARNING                = 1001,
-      NAME_START_WARNING             = 1010,
-      NAME_END_WARNING               = 1011,
-      NAME_SEMANTIC_WARNING          = 1012
-      ;
-
-  // > 2000 Failure Messages
-  public static final int
-      UNKNONW_FAILURE                    = 2001,
-      UNEXPECTED_CLOSING_BRACE_FAILURE   = 2010
-      ;
-
-  public static int
-      FULL_MODE    = 1,  // print with Bibtex Entry
-      SINLGE_MODE  = 2   // print only Message
-      ;
-
-  private static int printMode = SINLGE_MODE ;
-
-  private int type ;
-  private BibtexEntry entry ;
-  private String fieldName ;
-  private Object additionalInfo ;
-  private String msg ;
-  private boolean fixed ; // the user has changed sometings on BibtexEntry
-
-  public final synchronized static void setPrintMode(int newMode)
-  {
-    printMode = newMode ;
-  }
-
-
-  public IntegrityMessage(int pType, BibtexEntry pEntry, String pFieldName, Object pAdditionalInfo)
-  {
-    this.type = pType;
-    this.entry = pEntry;
-    this.fieldName = pFieldName;
-    this.additionalInfo = pAdditionalInfo;
-    fixed = false ;
-
-    msg = getMessage() ;
-  }
-
-  public String getMessage()
-  {
-    String back = Globals.getIntegrityMessage("ITEXT_"+type) ;
-    if ((back != null) && (fieldName != null))
-    {
-      back = back.replaceAll( "\\$FIELD", fieldName ) ;
-    }
-    return back ;
-  }
-
-  public String toString()
-  {
-    String back = msg ;
-    if (printMode == FULL_MODE)
-    {
-      back = "[" + entry.getCiteKey() + "] " + msg ;
-    }
-    return back ;
-  }
-
-  public int getType()
-  {
-    return type;
-  }
-
-  public BibtexEntry getEntry()
-  {
-    return entry;
-  }
-
-  public String getFieldName()
-  {
-    return fieldName;
-  }
-
-  public Object getAdditionalInfo()
-  {
-    return additionalInfo;
-  }
-
-  public boolean getFixed()
-  {
-    return fixed;
-  }
-
-  public void setFixed(boolean pFixed)
-  {
-    this.fixed = pFixed;
-  }
-}
+/*
+Copyright (C) 2004 R. Nagel
+
+All programs in this directory and
+subdirectories are published under the GNU General Public License as
+described below.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
+
+Further information about the GNU GPL is available at:
+http://www.gnu.org/copyleft/gpl.ja.html
+
+*/
+
+
+// created by : r.nagel 09.12.2004
+//
+// function : a class for wrapping a IntegrityCheck message
+//
+// modified :
+
+package net.sf.jabref.wizard.integrity ;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+
+public class IntegrityMessage implements Cloneable
+{
+  // Hints and Infos < 1000 :-)
+  public static final int
+      GENERIC_HINT             = 1,
+      UPPER_AND_LOWER_HINT     = 10,
+      FOUR_DIGITS_HINT         = 11
+
+      ;
+
+  // > 1000 Warnings
+  public static final int
+      GENERIC_WARNING                = 1001,
+      NAME_START_WARNING             = 1010,
+      NAME_END_WARNING               = 1011,
+      NAME_SEMANTIC_WARNING          = 1012
+      ;
+
+  // > 2000 Failure Messages
+  public static final int
+      UNKNONW_FAILURE                    = 2001,
+      UNEXPECTED_CLOSING_BRACE_FAILURE   = 2010
+      ;
+
+  public static int
+      FULL_MODE    = 1,  // print with Bibtex Entry
+      SINLGE_MODE  = 2   // print only Message
+      ;
+
+  private static int printMode = SINLGE_MODE ;
+
+  private int type ;
+  private BibtexEntry entry ;
+  private String fieldName ;
+  private Object additionalInfo ;
+  private String msg ;
+  private boolean fixed ; // the user has changed sometings on BibtexEntry
+
+  public final synchronized static void setPrintMode(int newMode)
+  {
+    printMode = newMode ;
+  }
+
+
+  public IntegrityMessage(int pType, BibtexEntry pEntry, String pFieldName, Object pAdditionalInfo)
+  {
+    this.type = pType;
+    this.entry = pEntry;
+    this.fieldName = pFieldName;
+    this.additionalInfo = pAdditionalInfo;
+    fixed = false ;
+
+    msg = getMessage() ;
+  }
+
+  public String getMessage()
+  {
+    String back = Globals.getIntegrityMessage("ITEXT_"+type) ;
+    if ((back != null) && (fieldName != null))
+    {
+      back = back.replaceAll( "\\$FIELD", fieldName ) ;
+    }
+    return back ;
+  }
+
+  public String toString()
+  {
+    String back = msg ;
+    if (printMode == FULL_MODE)
+    {
+      back = "[" + entry.getCiteKey() + "] " + msg ;
+    }
+    return back ;
+  }
+
+  public int getType()
+  {
+    return type;
+  }
+
+  public BibtexEntry getEntry()
+  {
+    return entry;
+  }
+
+  public String getFieldName()
+  {
+    return fieldName;
+  }
+
+  public Object getAdditionalInfo()
+  {
+    return additionalInfo;
+  }
+
+  public boolean getFixed()
+  {
+    return fixed;
+  }
+
+  public void setFixed(boolean pFixed)
+  {
+    this.fixed = pFixed;
+  }
+}
diff --git a/src/java/net/sf/jabref/wizard/integrity/gui/IntegrityMessagePanel.java b/src/java/net/sf/jabref/wizard/integrity/gui/IntegrityMessagePanel.java
index 6f31728..1d7b4f9 100644
--- a/src/java/net/sf/jabref/wizard/integrity/gui/IntegrityMessagePanel.java
+++ b/src/java/net/sf/jabref/wizard/integrity/gui/IntegrityMessagePanel.java
@@ -1,244 +1,244 @@
-/*
-Copyright (C) 2004 R. Nagel
-
-All programs in this directory and
-subdirectories are published under the GNU General Public License as
-described below.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA
-
-Further information about the GNU GPL is available at:
-http://www.gnu.org/copyleft/gpl.ja.html
-
-*/
-
-// created by : r.nagel 09.12.2004
-//
-// function : shows the IntegrityMessages produced by IntegrityCheck
-//
-//     todo : several entries not supported
-//
-// modified :
-
-package net.sf.jabref.wizard.integrity.gui ;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-
-import javax.swing.*;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-
-import net.sf.jabref.*;
-import net.sf.jabref.undo.UndoableFieldChange;
-import net.sf.jabref.wizard.integrity.IntegrityCheck;
-import net.sf.jabref.wizard.integrity.IntegrityMessage;
-import net.sf.jabref.wizard.text.gui.HintListModel;
-
-public class IntegrityMessagePanel
-    extends JPanel
-    implements ListSelectionListener, KeyListener, ActionListener
-
-{
-  private JList warnings ;
-  private HintListModel warningData ;
-
-  private IntegrityCheck validChecker ;
-
-  private JTextField content  ;
-  private JButton applyButton ;
-  private JButton fixButton ;
-  private BasePanel basePanel;
-
-  public IntegrityMessagePanel(BasePanel basePanel)
-  {
-    this.basePanel = basePanel;
-    validChecker = new IntegrityCheck() ; // errors, warnings, hints
-
-  // JList --------------------------------------------------------------
-    warningData = new HintListModel() ;
-    warnings = new JList( warningData ) ;
-    warnings.setCellRenderer( new IntegrityListRenderer() );
-    warnings.addListSelectionListener(this);
-
-    JScrollPane paneScrollPane = new JScrollPane( warnings ) ;
-    paneScrollPane.setVerticalScrollBarPolicy(
-        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ) ;
-    paneScrollPane.setPreferredSize( new Dimension( 540, 255 ) ) ;
-    paneScrollPane.setMinimumSize( new Dimension( 10, 10 ) ) ;
-
-  // Fix Panel ---------------------------------------------------------
-    JPanel fixPanel = new JPanel() ;
-//    BoxLayout box = new BoxLayout(fixPanel, BoxLayout.LINE_AXIS) ;
-
-    JLabel label1 = new JLabel(Globals.lang("Field_content")) ;
-
-    content = new JTextField(40) ;
-    content.addKeyListener(this);
-    applyButton = new JButton(Globals.lang("Apply")) ;
-    applyButton.addActionListener(this) ;
-    applyButton.setEnabled(false);
-    fixButton = new JButton(Globals.lang("Suggest")) ;
-    fixButton.setEnabled(false);
-
-    fixPanel.add(label1) ;
-    fixPanel.add(content) ;
-    fixPanel.add(applyButton) ;
-    fixPanel.add(fixButton) ;
-
-  // Main Panel --------------------------------------------------------
-    this.setLayout( new BorderLayout() );
-    this.add( paneScrollPane, BorderLayout.CENTER ) ;
-    this.add( fixPanel, BorderLayout.SOUTH) ;
-  }
-
-  // ------------------------------------------------------------------------
-
-  public void updateView( BibtexEntry entry )
-  {
-    warningData.clear();
-    IntegrityMessage.setPrintMode( IntegrityMessage.SINLGE_MODE) ;
-    warningData.setData( validChecker.checkBibtexEntry( entry ) ) ;
-  }
-
-  public void updateView( BibtexDatabase base )
-  {
-    warningData.clear();
-    IntegrityMessage.setPrintMode( IntegrityMessage.FULL_MODE) ;
-    warningData.setData( validChecker.checkBibtexDatabase( base ) ) ;
-  }
-
-
-  // ------------------------------------------------------------------------
-  //This method is required by ListSelectionListener.
-  public void valueChanged( ListSelectionEvent e )
-  {
-    if ( e.getValueIsAdjusting() )
-    {
-      Object obj = warnings.getSelectedValue() ;
-      String str = "" ;
-      if (obj != null)
-      {
-        IntegrityMessage msg = (IntegrityMessage) obj ;
-        BibtexEntry entry = msg.getEntry() ;
-
-        if (entry != null)
-        {
-          str = entry.getField(msg.getFieldName()) ;
-          basePanel.highlightEntry(entry);
-  // make the "invalid" field visible  ....
-  //          EntryEditor editor = basePanel.getCurrentEditor() ;
-  //          editor.
-        }
-      }
-      content.setText(str);
-      applyButton.setEnabled(false);
-    }
-  }
-
-// --------------------------------------------------------------------------
-// This methods are required by KeyListener
-  public void keyPressed( KeyEvent e )
-  {
-  }
-
-  public void keyReleased( KeyEvent e )
-  {
-    applyButton.setEnabled(true);
-    if (e.getKeyCode() == KeyEvent.VK_ENTER)
-    {
-      applyButton.doClick();
-    }
-  }
-
-  public void keyTyped( KeyEvent e )
-  {
-  }
-
-  public void actionPerformed( ActionEvent e )
-  {
-    Object obj = e.getSource() ;
-    if (obj == applyButton)
-    {
-      Object data = warnings.getSelectedValue() ;
-      if (data != null)
-      {
-        IntegrityMessage msg = (IntegrityMessage) data ;
-        BibtexEntry entry = msg.getEntry() ;
-
-        if (entry != null)
-        {
-//          System.out.println("update") ;
-            String oldContent = entry.getField(msg.getFieldName());
-            UndoableFieldChange edit = new UndoableFieldChange(entry, msg.getFieldName(), oldContent,
-                        content.getText());
-            entry.setField(msg.getFieldName(), content.getText());
-            basePanel.undoManager.addEdit(edit);
-            basePanel.markBaseChanged();
-            msg.setFixed(true);
-//          updateView(entry) ;
-          warningData.valueUpdated(warnings.getSelectedIndex()) ;
-        }
-      }
-
-      applyButton.setEnabled(false);
-    }
-  }
-  // ---------------------------------------------------------------------------
-  // ---------------------------------------------------------------------------
-  class IntegrityListRenderer extends DefaultListCellRenderer
-  {
-    final ImageIcon warnIcon = GUIGlobals.getImage("integrityWarn");
-    final ImageIcon infoIcon = GUIGlobals.getImage("integrityInfo");
-    final ImageIcon failIcon = GUIGlobals.getImage("integrityFail");
-    final ImageIcon fixedIcon = GUIGlobals.getImage("complete");
-
-    public Component getListCellRendererComponent(
-        JList list,
-        Object value, // value to display
-        int index, // cell index
-        boolean iss, // is the cell selected
-        boolean chf ) // the list and the cell have the focus
-    {
-      super.getListCellRendererComponent( list, value, index, iss, chf ) ;
-
-      if (value != null)
-      {
-        IntegrityMessage msg = (IntegrityMessage) value ;
-        if (msg.getFixed())
-        {
-          setIcon(fixedIcon) ;
-        }
-        else
-        {
-          int id = msg.getType() ;
-          if ( id < 1000 )
-            setIcon( infoIcon ) ;
-          else if ( id < 2000 )
-            setIcon( warnIcon ) ;
-          else setIcon( failIcon ) ;
-        }
-      }
-      return this ;
-    }
-  }
-
-}
+/*
+Copyright (C) 2004 R. Nagel
+
+All programs in this directory and
+subdirectories are published under the GNU General Public License as
+described below.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA
+
+Further information about the GNU GPL is available at:
+http://www.gnu.org/copyleft/gpl.ja.html
+
+*/
+
+// created by : r.nagel 09.12.2004
+//
+// function : shows the IntegrityMessages produced by IntegrityCheck
+//
+//     todo : several entries not supported
+//
+// modified :
+
+package net.sf.jabref.wizard.integrity.gui ;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.*;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import net.sf.jabref.*;
+import net.sf.jabref.undo.UndoableFieldChange;
+import net.sf.jabref.wizard.integrity.IntegrityCheck;
+import net.sf.jabref.wizard.integrity.IntegrityMessage;
+import net.sf.jabref.wizard.text.gui.HintListModel;
+
+public class IntegrityMessagePanel
+    extends JPanel
+    implements ListSelectionListener, KeyListener, ActionListener
+
+{
+  private JList warnings ;
+  private HintListModel warningData ;
+
+  private IntegrityCheck validChecker ;
+
+  private JTextField content  ;
+  private JButton applyButton ;
+  private JButton fixButton ;
+  private BasePanel basePanel;
+
+  public IntegrityMessagePanel(BasePanel basePanel)
+  {
+    this.basePanel = basePanel;
+    validChecker = new IntegrityCheck() ; // errors, warnings, hints
+
+  // JList --------------------------------------------------------------
+    warningData = new HintListModel() ;
+    warnings = new JList( warningData ) ;
+    warnings.setCellRenderer( new IntegrityListRenderer() );
+    warnings.addListSelectionListener(this);
+
+    JScrollPane paneScrollPane = new JScrollPane( warnings ) ;
+    paneScrollPane.setVerticalScrollBarPolicy(
+        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ) ;
+    paneScrollPane.setPreferredSize( new Dimension( 540, 255 ) ) ;
+    paneScrollPane.setMinimumSize( new Dimension( 10, 10 ) ) ;
+
+  // Fix Panel ---------------------------------------------------------
+    JPanel fixPanel = new JPanel() ;
+//    BoxLayout box = new BoxLayout(fixPanel, BoxLayout.LINE_AXIS) ;
+
+    JLabel label1 = new JLabel(Globals.lang("Field_content")) ;
+
+    content = new JTextField(40) ;
+    content.addKeyListener(this);
+    applyButton = new JButton(Globals.lang("Apply")) ;
+    applyButton.addActionListener(this) ;
+    applyButton.setEnabled(false);
+    fixButton = new JButton(Globals.lang("Suggest")) ;
+    fixButton.setEnabled(false);
+
+    fixPanel.add(label1) ;
+    fixPanel.add(content) ;
+    fixPanel.add(applyButton) ;
+    fixPanel.add(fixButton) ;
+
+  // Main Panel --------------------------------------------------------
+    this.setLayout( new BorderLayout() );
+    this.add( paneScrollPane, BorderLayout.CENTER ) ;
+    this.add( fixPanel, BorderLayout.SOUTH) ;
+  }
+
+  // ------------------------------------------------------------------------
+
+  public void updateView( BibtexEntry entry )
+  {
+    warningData.clear();
+    IntegrityMessage.setPrintMode( IntegrityMessage.SINLGE_MODE) ;
+    warningData.setData( validChecker.checkBibtexEntry( entry ) ) ;
+  }
+
+  public void updateView( BibtexDatabase base )
+  {
+    warningData.clear();
+    IntegrityMessage.setPrintMode( IntegrityMessage.FULL_MODE) ;
+    warningData.setData( validChecker.checkBibtexDatabase( base ) ) ;
+  }
+
+
+  // ------------------------------------------------------------------------
+  //This method is required by ListSelectionListener.
+  public void valueChanged( ListSelectionEvent e )
+  {
+    if ( e.getValueIsAdjusting() )
+    {
+      Object obj = warnings.getSelectedValue() ;
+      String str = "" ;
+      if (obj != null)
+      {
+        IntegrityMessage msg = (IntegrityMessage) obj ;
+        BibtexEntry entry = msg.getEntry() ;
+
+        if (entry != null)
+        {
+          str = entry.getField(msg.getFieldName()) ;
+          basePanel.highlightEntry(entry);
+  // make the "invalid" field visible  ....
+  //          EntryEditor editor = basePanel.getCurrentEditor() ;
+  //          editor.
+        }
+      }
+      content.setText(str);
+      applyButton.setEnabled(false);
+    }
+  }
+
+// --------------------------------------------------------------------------
+// This methods are required by KeyListener
+  public void keyPressed( KeyEvent e )
+  {
+  }
+
+  public void keyReleased( KeyEvent e )
+  {
+    applyButton.setEnabled(true);
+    if (e.getKeyCode() == KeyEvent.VK_ENTER)
+    {
+      applyButton.doClick();
+    }
+  }
+
+  public void keyTyped( KeyEvent e )
+  {
+  }
+
+  public void actionPerformed( ActionEvent e )
+  {
+    Object obj = e.getSource() ;
+    if (obj == applyButton)
+    {
+      Object data = warnings.getSelectedValue() ;
+      if (data != null)
+      {
+        IntegrityMessage msg = (IntegrityMessage) data ;
+        BibtexEntry entry = msg.getEntry() ;
+
+        if (entry != null)
+        {
+//          System.out.println("update") ;
+            String oldContent = entry.getField(msg.getFieldName());
+            UndoableFieldChange edit = new UndoableFieldChange(entry, msg.getFieldName(), oldContent,
+                        content.getText());
+            entry.setField(msg.getFieldName(), content.getText());
+            basePanel.undoManager.addEdit(edit);
+            basePanel.markBaseChanged();
+            msg.setFixed(true);
+//          updateView(entry) ;
+          warningData.valueUpdated(warnings.getSelectedIndex()) ;
+        }
+      }
+
+      applyButton.setEnabled(false);
+    }
+  }
+  // ---------------------------------------------------------------------------
+  // ---------------------------------------------------------------------------
+  class IntegrityListRenderer extends DefaultListCellRenderer
+  {
+    final ImageIcon warnIcon = GUIGlobals.getImage("integrityWarn");
+    final ImageIcon infoIcon = GUIGlobals.getImage("integrityInfo");
+    final ImageIcon failIcon = GUIGlobals.getImage("integrityFail");
+    final ImageIcon fixedIcon = GUIGlobals.getImage("complete");
+
+    public Component getListCellRendererComponent(
+        JList list,
+        Object value, // value to display
+        int index, // cell index
+        boolean iss, // is the cell selected
+        boolean chf ) // the list and the cell have the focus
+    {
+      super.getListCellRendererComponent( list, value, index, iss, chf ) ;
+
+      if (value != null)
+      {
+        IntegrityMessage msg = (IntegrityMessage) value ;
+        if (msg.getFixed())
+        {
+          setIcon(fixedIcon) ;
+        }
+        else
+        {
+          int id = msg.getType() ;
+          if ( id < 1000 )
+            setIcon( infoIcon ) ;
+          else if ( id < 2000 )
+            setIcon( warnIcon ) ;
+          else setIcon( failIcon ) ;
+        }
+      }
+      return this ;
+    }
+  }
+
+}
diff --git a/src/java/net/sf/jabref/wizard/integrity/gui/IntegrityWizard.java b/src/java/net/sf/jabref/wizard/integrity/gui/IntegrityWizard.java
index f8d0354..9b7148e 100644
--- a/src/java/net/sf/jabref/wizard/integrity/gui/IntegrityWizard.java
+++ b/src/java/net/sf/jabref/wizard/integrity/gui/IntegrityWizard.java
@@ -1,174 +1,174 @@
-/*
- Copyright (C) 2004 R. Nagel
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-
-// created by : r.nagel 14.09.2004
-//
-// function :
-//
-// modified:
-//
-
-package net.sf.jabref.wizard.integrity.gui ;
-
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.IOException;
-import java.net.URL;
-
-import javax.swing.*;
-import javax.swing.border.EtchedBorder;
-
-import net.sf.jabref.*;
-
-public class IntegrityWizard extends JDialog implements ActionListener {
-
-  private BibtexDatabase dbase ;
-  private BasePanel basePanel;
-  private JButton closeButton ;
-  private JButton startButton ;
-  private IntegrityMessagePanel warnPanel ;
-
-  public IntegrityWizard( JabRefFrame frame, BasePanel basePanel)
-  {
-    super( frame, "dialog", false ) ;  // no modal
-
-    this.basePanel = basePanel;
-    dbase = basePanel.database();
-
-    try
-    {
-      jbInit() ;
-      pack() ;
-    }
-    catch ( Exception ex )
-    {
-      ex.printStackTrace() ;
-    }
-  }
-
-  private void jbInit() {
-//    this.setModal( true ) ;
-    this.setResizable( false ) ;
-
-    // messages
-    this.setTitle( Globals.lang("Integrity_check") ) ;//Globals.lang( "Plain_text_import" ) + " " + typeStr ) ;
-    //warnPanel = new IntegrityMessagePanel() ;
-    //this.setTitle( "Experimental feature - Integrity Check") ;//Globals.lang( "Plain_text_import" ) + " " + typeStr ) ;
-    warnPanel = new IntegrityMessagePanel(basePanel) ;
-
-
-    // ButtonPanel
-    JPanel buttonPanel = new JPanel() ;
-    GridBagLayout gbl = new GridBagLayout() ;
-    GridBagConstraints con = new GridBagConstraints() ;
-    con.weightx = 0 ;
-    con.insets = new Insets( 5, 10, 0, 10 ) ;
-    con.fill = GridBagConstraints.HORIZONTAL ;
-
-    // Buttons
-    startButton = new JButton(Globals.lang("Scan")) ;
-    startButton.addActionListener( this) ;
-    closeButton = new JButton(Globals.lang("Close"));
-    closeButton.addActionListener( this) ;
-
-    // insert Buttons
-    con.gridwidth = GridBagConstraints.REMAINDER ;
-    gbl.setConstraints( startButton, con ) ;
-    buttonPanel.add( startButton ) ;
-
-    gbl.setConstraints( closeButton, con ) ;
-    buttonPanel.add( closeButton ) ;
-
-    // ----------------------------------------------------------------------
-    // add a short info, if available
-
-    JEditorPane infoText = null ;
-
-    URL infoURL = JabRef.class.getResource(GUIGlobals.getLocaleHelpPath()
-                                           +GUIGlobals.shortIntegrityCheck);
-    if (infoURL != null)
-      try
-      {
-        infoText = new JEditorPane() ;
-        infoText.setEditable(false);
-        infoText.setPreferredSize( new Dimension(220, 60));
-        infoText.setMinimumSize( new Dimension(180, 50));
-        infoText.setPage(infoURL);
-        infoText.setBackground(GUIGlobals.infoField);
-        infoText.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
-//        bottomPanel.add( infoText, BorderLayout.CENTER ) ;
-      }
-      catch (IOException e)
-      {
-        infoText = null ;
-      }
-
-    // -----------------------------------------------------------------------
-
-    // content
-    Container content = this.getContentPane() ;
-    content.setLayout( new BorderLayout());
-
-    if (infoText != null) // only if some help available
-    {
-      content.add( infoText, BorderLayout.PAGE_START ) ;
-    }
-    content.add(warnPanel, BorderLayout.CENTER) ;
-    content.add(buttonPanel, BorderLayout.PAGE_END) ;
-  }
-
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-
-  public void actionPerformed( ActionEvent e )
-  {
-    Object sender = e.getSource() ;
-
-    if (sender == closeButton)
-    {
-      dispose() ;
-    }
-    else if (sender == startButton)
-    {
-      startButton.setEnabled(false);
-      Runnable scanWork = new Runnable()
-      {
-        public void run()
-        {
-          warnPanel.updateView(dbase);
-        }
-      } ;
-      SwingUtilities.invokeLater(scanWork);
-      startButton.setEnabled(true);
-    }
-  }
-
-
-
-}
+/*
+ Copyright (C) 2004 R. Nagel
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+
+// created by : r.nagel 14.09.2004
+//
+// function :
+//
+// modified:
+//
+
+package net.sf.jabref.wizard.integrity.gui ;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.net.URL;
+
+import javax.swing.*;
+import javax.swing.border.EtchedBorder;
+
+import net.sf.jabref.*;
+
+public class IntegrityWizard extends JDialog implements ActionListener {
+
+  private BibtexDatabase dbase ;
+  private BasePanel basePanel;
+  private JButton closeButton ;
+  private JButton startButton ;
+  private IntegrityMessagePanel warnPanel ;
+
+  public IntegrityWizard( JabRefFrame frame, BasePanel basePanel)
+  {
+    super( frame, "dialog", false ) ;  // no modal
+
+    this.basePanel = basePanel;
+    dbase = basePanel.database();
+
+    try
+    {
+      jbInit() ;
+      pack() ;
+    }
+    catch ( Exception ex )
+    {
+      ex.printStackTrace() ;
+    }
+  }
+
+  private void jbInit() {
+//    this.setModal( true ) ;
+    this.setResizable( false ) ;
+
+    // messages
+    this.setTitle( Globals.lang("Integrity_check") ) ;//Globals.lang( "Plain_text_import" ) + " " + typeStr ) ;
+    //warnPanel = new IntegrityMessagePanel() ;
+    //this.setTitle( "Experimental feature - Integrity Check") ;//Globals.lang( "Plain_text_import" ) + " " + typeStr ) ;
+    warnPanel = new IntegrityMessagePanel(basePanel) ;
+
+
+    // ButtonPanel
+    JPanel buttonPanel = new JPanel() ;
+    GridBagLayout gbl = new GridBagLayout() ;
+    GridBagConstraints con = new GridBagConstraints() ;
+    con.weightx = 0 ;
+    con.insets = new Insets( 5, 10, 0, 10 ) ;
+    con.fill = GridBagConstraints.HORIZONTAL ;
+
+    // Buttons
+    startButton = new JButton(Globals.lang("Scan")) ;
+    startButton.addActionListener( this) ;
+    closeButton = new JButton(Globals.lang("Close"));
+    closeButton.addActionListener( this) ;
+
+    // insert Buttons
+    con.gridwidth = GridBagConstraints.REMAINDER ;
+    gbl.setConstraints( startButton, con ) ;
+    buttonPanel.add( startButton ) ;
+
+    gbl.setConstraints( closeButton, con ) ;
+    buttonPanel.add( closeButton ) ;
+
+    // ----------------------------------------------------------------------
+    // add a short info, if available
+
+    JEditorPane infoText = null ;
+
+    URL infoURL = JabRef.class.getResource(GUIGlobals.getLocaleHelpPath()
+                                           +GUIGlobals.shortIntegrityCheck);
+    if (infoURL != null)
+      try
+      {
+        infoText = new JEditorPane() ;
+        infoText.setEditable(false);
+        infoText.setPreferredSize( new Dimension(220, 60));
+        infoText.setMinimumSize( new Dimension(180, 50));
+        infoText.setPage(infoURL);
+        infoText.setBackground(GUIGlobals.infoField);
+        infoText.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
+//        bottomPanel.add( infoText, BorderLayout.CENTER ) ;
+      }
+      catch (IOException e)
+      {
+        infoText = null ;
+      }
+
+    // -----------------------------------------------------------------------
+
+    // content
+    Container content = this.getContentPane() ;
+    content.setLayout( new BorderLayout());
+
+    if (infoText != null) // only if some help available
+    {
+      content.add( infoText, BorderLayout.PAGE_START ) ;
+    }
+    content.add(warnPanel, BorderLayout.CENTER) ;
+    content.add(buttonPanel, BorderLayout.PAGE_END) ;
+  }
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+
+  public void actionPerformed( ActionEvent e )
+  {
+    Object sender = e.getSource() ;
+
+    if (sender == closeButton)
+    {
+      dispose() ;
+    }
+    else if (sender == startButton)
+    {
+      startButton.setEnabled(false);
+      Runnable scanWork = new Runnable()
+      {
+        public void run()
+        {
+          warnPanel.updateView(dbase);
+        }
+      } ;
+      SwingUtilities.invokeLater(scanWork);
+      startButton.setEnabled(true);
+    }
+  }
+
+
+
+}
diff --git a/src/java/net/sf/jabref/wizard/text/TagToMarkedTextStore.java b/src/java/net/sf/jabref/wizard/text/TagToMarkedTextStore.java
index 6601974..f29e8b5 100644
--- a/src/java/net/sf/jabref/wizard/text/TagToMarkedTextStore.java
+++ b/src/java/net/sf/jabref/wizard/text/TagToMarkedTextStore.java
@@ -1,107 +1,107 @@
-/*
- Copyright (C) 2004 R. Nagel
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-
-// created by : r.nagel 06.10.2004
-//
-// function : save the textposition for tags in a recent TextInputDialog context
-//
-// modified :
-
-package net.sf.jabref.wizard.text ;
-
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import javax.swing.text.StyledDocument;
-
-
-public class TagToMarkedTextStore
-{
-  private class TMarkedStoreItem
-  {
-    int start ;
-    int end ;
-  }
-
-  private HashMap<String, LinkedList<TMarkedStoreItem>> tagMap ;
-
-  public TagToMarkedTextStore()
-  {
-    tagMap = new HashMap<String, LinkedList<TMarkedStoreItem>>(10) ;
-  }
-
-  /** appends a selection propertie for tag */
-	public void appendPosition(String tag, int start, int end) {
-		LinkedList<TMarkedStoreItem> ll = tagMap.get(tag);
-		if (ll == null) {
-			ll = new LinkedList<TMarkedStoreItem>();
-			tagMap.put(tag, ll);
-		}
-
-		TMarkedStoreItem item = new TMarkedStoreItem();
-		ll.add(item);
-		item.end = end;
-		item.start = start;
-	}
-
-  /** insert selection propertie for tag, old entries were deleted */
-	public void insertPosition(String tag, int start, int end) {
-		LinkedList<TMarkedStoreItem> ll = tagMap.get(tag);
-
-		if (ll == null) {
-			ll = new LinkedList<TMarkedStoreItem>();
-			tagMap.put(tag, ll);
-		} else {
-			ll.clear();
-		}
-
-		TMarkedStoreItem item = new TMarkedStoreItem();
-		ll.add(item);
-		item.end = end;
-		item.start = start;
-	}
-
-  /** set the Style for the tag if an entry is available */
-	public void setStyleForTag(String tag, String style, StyledDocument doc) {
-		LinkedList<TMarkedStoreItem> ll = tagMap.get(tag);
-
-		if (ll != null) {
-			// iterate over all saved selections
-			for (ListIterator<TMarkedStoreItem> lIt = ll.listIterator(); lIt
-				.hasNext();) {
-				Object du2 = lIt.next();
-				if (du2 != null) {
-					TMarkedStoreItem item = (TMarkedStoreItem) du2;
-					doc.setCharacterAttributes(item.start, item.end
-						- item.start, doc.getStyle(style), true);
-				}
-			}
-		}
-	}
-
-}
+/*
+ Copyright (C) 2004 R. Nagel
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+
+// created by : r.nagel 06.10.2004
+//
+// function : save the textposition for tags in a recent TextInputDialog context
+//
+// modified :
+
+package net.sf.jabref.wizard.text ;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import javax.swing.text.StyledDocument;
+
+
+public class TagToMarkedTextStore
+{
+  private class TMarkedStoreItem
+  {
+    int start ;
+    int end ;
+  }
+
+  private HashMap<String, LinkedList<TMarkedStoreItem>> tagMap ;
+
+  public TagToMarkedTextStore()
+  {
+    tagMap = new HashMap<String, LinkedList<TMarkedStoreItem>>(10) ;
+  }
+
+  /** appends a selection propertie for tag */
+	public void appendPosition(String tag, int start, int end) {
+		LinkedList<TMarkedStoreItem> ll = tagMap.get(tag);
+		if (ll == null) {
+			ll = new LinkedList<TMarkedStoreItem>();
+			tagMap.put(tag, ll);
+		}
+
+		TMarkedStoreItem item = new TMarkedStoreItem();
+		ll.add(item);
+		item.end = end;
+		item.start = start;
+	}
+
+  /** insert selection propertie for tag, old entries were deleted */
+	public void insertPosition(String tag, int start, int end) {
+		LinkedList<TMarkedStoreItem> ll = tagMap.get(tag);
+
+		if (ll == null) {
+			ll = new LinkedList<TMarkedStoreItem>();
+			tagMap.put(tag, ll);
+		} else {
+			ll.clear();
+		}
+
+		TMarkedStoreItem item = new TMarkedStoreItem();
+		ll.add(item);
+		item.end = end;
+		item.start = start;
+	}
+
+  /** set the Style for the tag if an entry is available */
+	public void setStyleForTag(String tag, String style, StyledDocument doc) {
+		LinkedList<TMarkedStoreItem> ll = tagMap.get(tag);
+
+		if (ll != null) {
+			// iterate over all saved selections
+			for (ListIterator<TMarkedStoreItem> lIt = ll.listIterator(); lIt
+				.hasNext();) {
+				Object du2 = lIt.next();
+				if (du2 != null) {
+					TMarkedStoreItem item = (TMarkedStoreItem) du2;
+					doc.setCharacterAttributes(item.start, item.end
+						- item.start, doc.getStyle(style), true);
+				}
+			}
+		}
+	}
+
+}
diff --git a/src/java/net/sf/jabref/wizard/text/gui/HintListModel.java b/src/java/net/sf/jabref/wizard/text/gui/HintListModel.java
index 46c55c7..3d113b9 100644
--- a/src/java/net/sf/jabref/wizard/text/gui/HintListModel.java
+++ b/src/java/net/sf/jabref/wizard/text/gui/HintListModel.java
@@ -1,38 +1,38 @@
-/*  Copyright (C) 2003-2011 JabRef contributors.
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-package net.sf.jabref.wizard.text.gui;
-
-import java.util.Vector;
-
-import javax.swing.DefaultListModel;
-
-import net.sf.jabref.wizard.integrity.IntegrityMessage;
-
-public class HintListModel extends DefaultListModel {
-	
-	public void setData(Vector<IntegrityMessage> newData) {
-		clear();
-		if (newData != null) {
-			for (IntegrityMessage message : newData){
-				addElement(message);
-			}
-		}
-	}
-
-	public void valueUpdated(int index) {
-		super.fireContentsChanged(this, index, index);
-	}
-}
+/*  Copyright (C) 2003-2011 JabRef contributors.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+package net.sf.jabref.wizard.text.gui;
+
+import java.util.Vector;
+
+import javax.swing.DefaultListModel;
+
+import net.sf.jabref.wizard.integrity.IntegrityMessage;
+
+public class HintListModel extends DefaultListModel {
+	
+	public void setData(Vector<IntegrityMessage> newData) {
+		clear();
+		if (newData != null) {
+			for (IntegrityMessage message : newData){
+				addElement(message);
+			}
+		}
+	}
+
+	public void valueUpdated(int index) {
+		super.fireContentsChanged(this, index, index);
+	}
+}
diff --git a/src/java/net/sf/jabref/wizard/text/gui/OverlayPanel.java b/src/java/net/sf/jabref/wizard/text/gui/OverlayPanel.java
index 7d0a859..d7fbba8 100644
--- a/src/java/net/sf/jabref/wizard/text/gui/OverlayPanel.java
+++ b/src/java/net/sf/jabref/wizard/text/gui/OverlayPanel.java
@@ -1,98 +1,98 @@
-/*
- Copyright (C) 2004 R. Nagel
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-
-// created by : r.nagel 04.11.2004
-//
-// function : supports an underlying text for jcomponents
-//
-// modified :
-//
-
-
-package net.sf.jabref.wizard.text.gui ;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Graphics;
-
-import javax.swing.*;
-
-public class OverlayPanel extends JPanel
-{
-
-  private JLabel label ;
-  private JComponent overlay ;
-
-  private JScrollPane scroller ;
-
-  public OverlayPanel(JComponent container, String text)
-  {
-    OverlayLayout layout = new OverlayLayout(this) ;
-    this.setLayout( layout );
-    overlay = container ;
-
-    label = new JLabel(text) ;
-    label.setFont(new Font("dialog", Font.ITALIC, 18));
-//    label.setForeground(Color.lightGray);
-    label.setForeground( new Color(224, 220, 220) );
-    label.setLocation(0, 0);
-
-     scroller = new JScrollPane( overlay ) ;
-     scroller.setLocation(0, 0);
-
-     scroller.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ) ;
-
-    add(label) ;
-    add(scroller) ;
-  }
-
-  public void paint(Graphics g)
-  {
-    int len = label.getWidth() ;
-
-    Dimension dim = this.getSize() ;
-    if ((dim.height > 25) && (dim.width > len+10))
-    {
-      int x = (dim.width-len) / 2 ;
-      int y = dim.height / 2 ;
-
-      label.setLocation(x, y) ;
-    }
-
-    super.paint(g);
-  }
-
-/*
-  // it doesn't work well
-  public void addMouseListener(MouseListener listener)
-  {
-    overlay.addMouseListener(listener);
-    super.addMouseListener(listener);
-  }
-*/
-}
+/*
+ Copyright (C) 2004 R. Nagel
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+
+// created by : r.nagel 04.11.2004
+//
+// function : supports an underlying text for jcomponents
+//
+// modified :
+//
+
+
+package net.sf.jabref.wizard.text.gui ;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Graphics;
+
+import javax.swing.*;
+
+public class OverlayPanel extends JPanel
+{
+
+  private JLabel label ;
+  private JComponent overlay ;
+
+  private JScrollPane scroller ;
+
+  public OverlayPanel(JComponent container, String text)
+  {
+    OverlayLayout layout = new OverlayLayout(this) ;
+    this.setLayout( layout );
+    overlay = container ;
+
+    label = new JLabel(text) ;
+    label.setFont(new Font("dialog", Font.ITALIC, 18));
+//    label.setForeground(Color.lightGray);
+    label.setForeground( new Color(224, 220, 220) );
+    label.setLocation(0, 0);
+
+     scroller = new JScrollPane( overlay ) ;
+     scroller.setLocation(0, 0);
+
+     scroller.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ) ;
+
+    add(label) ;
+    add(scroller) ;
+  }
+
+  public void paint(Graphics g)
+  {
+    int len = label.getWidth() ;
+
+    Dimension dim = this.getSize() ;
+    if ((dim.height > 25) && (dim.width > len+10))
+    {
+      int x = (dim.width-len) / 2 ;
+      int y = dim.height / 2 ;
+
+      label.setLocation(x, y) ;
+    }
+
+    super.paint(g);
+  }
+
+/*
+  // it doesn't work well
+  public void addMouseListener(MouseListener listener)
+  {
+    overlay.addMouseListener(listener);
+    super.addMouseListener(listener);
+  }
+*/
+}
diff --git a/src/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java b/src/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java
index 17f8084..b30906a 100644
--- a/src/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java
+++ b/src/java/net/sf/jabref/wizard/text/gui/TextInputDialog.java
@@ -1,852 +1,852 @@
-/*
- Copyright (C) 2004 R. Nagel
-
- All programs in this directory and
- subdirectories are published under the GNU General Public License as
- described below.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- Further information about the GNU GPL is available at:
- http://www.gnu.org/copyleft/gpl.ja.html
-
- */
-
-// created by : r.nagel 14.09.2004
-//
-// function : import from plain text => simple mark/copy/paste into bibtex entry
-//
-// todo     : - change colors and fonts
-//            - delete selected text
-//            - make textarea editable
-//            - create several bibtex entries in dialog
-//            - if the dialog works with an existing entry (right click menu item)
-//              the cancel option doesn't work well
-//
-// modified :
-//            28.07.2005
-//            - fix: insert button doesnt work
-//            - append a author with "and"
-//            04.11.2004
-//            - experimental: text-input-area with underlying infotext
-//            02.11.2004
-//            - integrity check, which reports errors and warnings for the fields
-//            22.10.2004
-//            - little help box
-//
-
-package net.sf.jabref.wizard.text.gui ;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.swing.*;
-import javax.swing.border.TitledBorder;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.text.*;
-import net.sf.jabref.*;
-import net.sf.jabref.gui.FileDialogs;
-import net.sf.jabref.imports.FreeCiteImporter;
-import net.sf.jabref.wizard.integrity.gui.IntegrityMessagePanel;
-import net.sf.jabref.wizard.text.TagToMarkedTextStore;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-
-public class TextInputDialog
-    extends JDialog implements ActionListener
-{
-  private JButton okButton = new JButton() ;
-  private JButton cancelButton = new JButton() ;
-  private JButton insertButton = new JButton() ;
-  private JButton parseWithFreeCiteButton = new JButton();
-  private JPanel panel1 = new JPanel() ;
-  private JPanel buttons = new JPanel() ;
-  private JPanel rawPanel = new JPanel() ;
-  private JPanel sourcePanel = new JPanel() ;
-  private IntegrityMessagePanel warnPanel;
-  private JList fieldList ;
-  private JRadioButton overRadio, appRadio ;
-
-  private OverlayPanel testPanel ;
-
-  private BibtexEntry entry ;
-
-  public JPopupMenu inputMenu = new JPopupMenu() ;
-  private StyledDocument doc ; // content from inputPane
-  private JTextPane textPane ;
-  private JTextArea preview ;
-
-  private boolean inputChanged ; // input changed, fired by insert buttons
-
-  private TagToMarkedTextStore marked ;
-
-  private JabRefFrame _frame ;
-
-  private boolean okPressed = false ;
-
-  public TextInputDialog( JabRefFrame frame, BasePanel panel, String title, boolean modal,
-                          BibtexEntry bibEntry )
-  {
-    super( frame, title, modal ) ;
-
-    warnPanel = new IntegrityMessagePanel(panel);
-    inputChanged = true ;  // for a first validCheck
-
-
-    _frame = frame ;
-
-    entry = bibEntry ;
-    marked = new TagToMarkedTextStore() ;
-
-    try
-    {
-      jbInit( frame ) ;
-      pack() ;
-    }
-    catch ( Exception ex )
-    {
-      ex.printStackTrace() ;
-    }
-
-    updateSourceView() ;
-  }
-
-  private void jbInit( JabRefFrame parent ) {
-    this.setModal( true ) ;
-    //this.setResizable( false ) ;
-    getContentPane().setLayout(new BorderLayout());
-    String typeStr = Globals.lang( "for" ) ;
-    if ( entry != null )
-    {
-      if ( entry.getType() != null )
-      {
-        typeStr = typeStr + " " + entry.getType().getName() ;
-      }
-    }
-
-    this.setTitle( Globals.lang( "Plain_text_import" ) + " " + typeStr ) ;
-    getContentPane().add( panel1, BorderLayout.CENTER ) ;
-
-    initRawPanel() ;
-    initButtonPanel() ;
-    initSourcePanel() ;
-
-    JTabbedPane tabbed = new JTabbedPane() ;
-    tabbed.addChangeListener(
-        new ChangeListener()
-    {
-      public void stateChanged( ChangeEvent e )
-      {
-        if ( inputChanged )
-        {
-          warnPanel.updateView( entry ) ;
-        }
-      }
-    } ) ;
-
-    tabbed.add( rawPanel, Globals.lang( "Raw_source" ) ) ;
-    tabbed.add( sourcePanel, Globals.lang( "BibTeX_source" ) ) ;
-    tabbed.add( warnPanel, Globals.lang( "Messages_and_Hints" ) ) ;
-
-    // Panel Layout
-    panel1.setLayout( new BorderLayout() ) ;
-    panel1.add( tabbed, BorderLayout.CENTER ) ;
-    panel1.add( buttons, BorderLayout.SOUTH ) ;
-
-    // Key bindings:
-    ActionMap am = buttons.getActionMap() ;
-    InputMap im = buttons.getInputMap( JComponent.WHEN_IN_FOCUSED_WINDOW ) ;
-    im.put( parent.prefs().getKey( "Close dialog" ), "close" ) ;
-    am.put( "close", new AbstractAction()
-    {
-      public void actionPerformed( ActionEvent e )
-      {
-        dispose() ;
-      }
-    } ) ;
-  }
-
-// ---------------------------------------------------------------------------
-  // Panel with text import functionality
-  private void initRawPanel()
-  {
-
-    rawPanel.setLayout( new BorderLayout() ) ;
-
-        // Textarea
-        textPane = new JTextPane() ;
-
-        textPane.setEditable( false ) ;
-
-        doc = textPane.getStyledDocument() ;
-        addStylesToDocument( doc ) ;
-
-        try
-        {
-          doc.insertString( 0, "", doc.getStyle( "regular" ) ) ;
-        }
-        catch ( Exception e )
-        {}
-
-        testPanel = new OverlayPanel(textPane,
-                                     Globals.lang("Text_Input_Area") ) ;
-
-        testPanel.setPreferredSize( new Dimension( 450, 255) );
-        testPanel.setMaximumSize( new Dimension(450, Integer.MAX_VALUE) );
-
-    // copy/paste Menu
-    PasteAction pasteAction = new PasteAction() ;
-    JMenuItem pasteMI = new JMenuItem( pasteAction ) ;
-    inputMenu.add( new MenuHeaderAction() ) ;
-    inputMenu.addSeparator() ;
-    inputMenu.add( pasteMI ) ;
-
-    //Add listener to components that can bring up popup menus.
-    MouseListener popupListener = new PopupListener( inputMenu ) ;
-    textPane.addMouseListener( popupListener );
-    testPanel.addMouseListener( popupListener );
-
-    // Toolbar
-    JToolBar toolBar = new JToolBar() ;
-    toolBar.add( new ClearAction() ) ;
-    toolBar.setBorderPainted( false ) ;
-    toolBar.addSeparator() ;
-    toolBar.add( pasteAction ) ;
-    toolBar.add( new LoadAction() ) ;
-
-    JPanel leftPanel = new JPanel( new BorderLayout() ) ;
-
-    leftPanel.add( toolBar, BorderLayout.NORTH ) ;
-    leftPanel.add( testPanel, BorderLayout.CENTER ) ;
-
-
-    // ----------------------------------------------------------------
-    JPanel inputPanel = new JPanel() ;
-
-    // Panel Layout
-    GridBagLayout gbl = new GridBagLayout() ;
-    GridBagConstraints con = new GridBagConstraints() ;
-    con.weightx = 0 ;
-    con.insets = new Insets( 5, 5, 0, 5 ) ;
-    con.fill = GridBagConstraints.HORIZONTAL ;
-
-    inputPanel.setLayout( gbl ) ;
-
-    // Border
-    TitledBorder titledBorder1 = new TitledBorder(
-        BorderFactory.createLineBorder(
-            new Color( 153, 153, 153 ), 2 ),
-        Globals.lang( "Input" ) ) ;
-    inputPanel.setBorder( titledBorder1 ) ;
-    //inputPanel.setPreferredSize( new Dimension( 200, 255 ) ) ;
-    inputPanel.setMinimumSize( new Dimension( 10, 10 ) ) ;
-
-    fieldList = new JList( getAllFields() ) ;
-    fieldList.setCellRenderer( new SimpleCellRenderer( fieldList.getFont() ) ) ;
-    ListSelectionModel listSelectionModel = fieldList.getSelectionModel() ;
-    listSelectionModel.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ) ;
-    listSelectionModel.addListSelectionListener( new FieldListSelectionHandler() ) ;
-    fieldList.addMouseListener( new FieldListMouseListener() ) ;
-
-    JScrollPane fieldScroller = new JScrollPane( fieldList ) ;
-    fieldScroller.setVerticalScrollBarPolicy(
-        JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED ) ;
-    //fieldScroller.setPreferredSize( new Dimension( 180, 190 ) ) ;
-    //fieldScroller.setMinimumSize( new Dimension( 180, 190 ) ) ;
-
-    // insert buttons
-    insertButton.setText( Globals.lang( "Insert" ) ) ;
-    insertButton.addActionListener( this ) ;
-    
-    // parse with FreeCite button
-    parseWithFreeCiteButton.setText(Globals.lang("Parse with FreeCite"));
-    parseWithFreeCiteButton.addActionListener(this);
-    
-
-    // Radio buttons
-    appRadio = new JRadioButton( Globals.lang( "Append" ) ) ;
-    appRadio.setToolTipText( Globals.lang( "append_the_selected_text_to_bibtex_key") ) ;
-    appRadio.setMnemonic( KeyEvent.VK_A ) ;
-    appRadio.setSelected( true ) ;
-
-    overRadio = new JRadioButton( Globals.lang( "Override" ) ) ;
-    overRadio.setToolTipText( Globals.lang( "override_the_bibtex_key_by_the_selected_text") ) ;
-    overRadio.setMnemonic( KeyEvent.VK_O ) ;
-    overRadio.setSelected( false ) ;
-
-    //Group the radio buttons.
-    ButtonGroup group = new ButtonGroup() ;
-    group.add( appRadio ) ;
-    group.add( overRadio ) ;
-
-    JPanel radioPanel = new JPanel( new GridLayout( 0, 1 ) ) ;
-    radioPanel.add( appRadio ) ;
-    radioPanel.add( overRadio ) ;
-
-    // insert sub components
-    JLabel label1 = new JLabel( Globals.lang( "Available fields" ) ) ;
-    con.gridwidth = GridBagConstraints.REMAINDER ;
-    gbl.setConstraints( label1, con ) ;
-    inputPanel.add( label1 ) ;
-
-    con.gridwidth = GridBagConstraints.REMAINDER ;
-    con.gridheight = 8 ;
-    con.weighty = 1;
-    con.fill = GridBagConstraints.BOTH;
-    gbl.setConstraints( fieldScroller, con ) ;
-    inputPanel.add( fieldScroller ) ;
-
-    con.fill = GridBagConstraints.HORIZONTAL ;
-    con.weighty = 0;
-    con.gridwidth = 2 ;
-    gbl.setConstraints( radioPanel, con ) ;
-    inputPanel.add( radioPanel ) ;
-
-    con.gridwidth = GridBagConstraints.REMAINDER ;
-    gbl.setConstraints( insertButton, con ) ;
-    inputPanel.add( insertButton ) ;
-
-    // ----------------------------------------------------------------------
-    rawPanel.add( leftPanel, BorderLayout.CENTER ) ;
-    rawPanel.add( inputPanel, BorderLayout.EAST ) ;
-
-    boolean loaded = false ;
-
-    JLabel desc = new JLabel("<html><h3>"+Globals.lang("Plain text import")+"</h3><p>"
-            +Globals.lang("This is a simple copy and paste dialog. First load or paste some text into "
-            +"the text input area.<br>After that, you can mark text and assign it to a BibTeX field.")
-            +"</p></html>");
-    desc.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-
-
-    /*infoText.setEditable(false);
-    infoText.setBackground(GUIGlobals.infoField);
-    infoText.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
-    infoText.setPreferredSize( new Dimension(220, 50));
-    infoText.setMinimumSize( new Dimension(180, 50));*/
-
-    rawPanel.add(desc, BorderLayout.SOUTH) ;
-  }
-
-// ---------------------------------------------------------------------------
-
-// ---------------------------------------------------------------------------
-
-  private void initButtonPanel()
-  {
-
-    okButton.setText( Globals.lang( "Accept" ) ) ;
-    okButton.addActionListener( this ) ;
-    cancelButton.setText( Globals.lang( "Cancel" ) ) ;
-    cancelButton.addActionListener( this ) ;
-
-    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
-    buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
-    bb.addGlue();
-    bb.addButton(okButton);
-    bb.addButton(parseWithFreeCiteButton);
-    bb.addButton(cancelButton);
-    bb.addGlue();
-
-  }
-
-// ---------------------------------------------------------------------------
-
-  // Panel with bibtex source code
-  private void initSourcePanel()
-  {
-//    preview =  new PreviewPanel(entry) ;
-    preview = new JTextArea() ;
-    preview.setEditable( false ) ;
-
-    JScrollPane paneScrollPane = new JScrollPane( preview ) ;
-    paneScrollPane.setVerticalScrollBarPolicy(
-        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ) ;
-    paneScrollPane.setPreferredSize( new Dimension( 500, 255 ) ) ;
-    paneScrollPane.setMinimumSize( new Dimension( 10, 10 ) ) ;
-
-    sourcePanel.setLayout( new BorderLayout() ) ;
-    sourcePanel.add( paneScrollPane, BorderLayout.CENTER ) ;
-  }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-  protected void addStylesToDocument( StyledDocument doc )
-  {
-    //Initialize some styles.
-    Style def = StyleContext.getDefaultStyleContext().
-        getStyle( StyleContext.DEFAULT_STYLE ) ;
-
-    Style regular = doc.addStyle( "regular", def ) ;
-    StyleConstants.setFontFamily( def, "SansSerif" ) ;
-    StyleConstants.setFontSize( def, 12 ) ;
-
-    Style s = doc.addStyle( "oldused", regular ) ;
-    StyleConstants.setItalic( s, true ) ;
-    StyleConstants.setForeground( s, Color.blue ) ;
-
-    s = doc.addStyle( "used", regular ) ;
-    StyleConstants.setBold( s, true ) ;
-    StyleConstants.setForeground( s, Color.blue ) ;
-
-    s = doc.addStyle( "marked", regular ) ;
-    StyleConstants.setBold( s, true ) ;
-    StyleConstants.setForeground( s, Color.red ) ;
-
-    s = doc.addStyle( "small", regular ) ;
-    StyleConstants.setFontSize( s, 10 ) ;
-
-    s = doc.addStyle( "large", regular ) ;
-    StyleConstants.setFontSize( s, 16 ) ;
-  }
-
-// ---------------------------------------------------------------------------
-  private void insertTextForTag()
-  {
-    String type = ( String ) fieldList.getSelectedValue() ;
-    if ( type != null )
-    {
-      String txt = textPane.getSelectedText() ;
-
-      if ( txt != null )
-      {
-        int selStart = textPane.getSelectionStart() ;
-        int selEnd = textPane.getSelectionEnd() ;
-
-        // unselect text
-        textPane.setSelectionEnd( selStart ) ;
-
-        // mark the selected text as "used"
-        doc.setCharacterAttributes( selStart, selEnd - selStart,
-                                    doc.getStyle( "marked" ), true ) ;
-
-        // override an existing entry
-        if ( overRadio.isSelected() )
-        {
-          entry.setField( type, txt ) ;
-          // erase old text selection
-          marked.setStyleForTag( type, "regular", doc ) ; // delete all previous styles
-          marked.insertPosition( type, selStart, selEnd ) ; // insert new selection style
-        }
-        else // append text
-        {
-          // memorize the selection for text highlighting
-          marked.appendPosition( type, selStart, selEnd ) ;
-
-          // get old text from bibtex tag
-          String old = entry.getField( type ) ;
-
-          // merge old and selected text
-          if ( old != null )
-          {
-            // insert a new author with an additional "and"
-            if (type.hashCode() == "author".hashCode())
-            {
-              entry.setField(type, old +" and " +txt);
-            }
-            else entry.setField( type, old + txt ) ;
-          }
-          else // "null"+"txt" Strings forbidden
-          {
-            entry.setField( type, txt ) ;
-          }
-        }
-        // make the new data in bibtex source code visible
-        updateSourceView() ;
-      }
-    }
-  }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-  public boolean okPressed()
-  {
-    return okPressed ;
-  }
-
-// ---------------------------------------------------------------------------
-
-//  ActionListener
-//  handling of buttons-click actions
-  public void actionPerformed( ActionEvent e )
-  {
-    Object source = e.getSource() ;
-
-    if (source == this.okButton)
-    {
-      okPressed = true ;
-      dispose() ;
-    }
-    else if (source == this.cancelButton)
-    {
-      dispose() ;
-    }
-    else if (source == this.insertButton)
-    {
-      insertTextForTag() ;
-    }
-    else if (source == this.parseWithFreeCiteButton) {
-        if (parseWithFreeCiteAndAddEntries()) {    	
-            okPressed = false; // we do not want to have the super method to handle our entries, we do it on our own
-        	dispose();
-        }
-    }
-  }
-
-  
-    /**
-     * tries to parse the pasted reference with freecite
-     * @return true if successful, false otherwise
-     */
-  private boolean parseWithFreeCiteAndAddEntries() {
-        FreeCiteImporter fimp = new FreeCiteImporter();
-        String text = textPane.getText();
-        
-        // we have to remove line breaks (but keep empty lines)
-        // otherwise, the result is broken
-        text = text.replace(Globals.NEWLINE.concat(Globals.NEWLINE), "##NEWLINE##");
-        // possible URL line breaks are removed completely.
-        text = text.replace("/".concat(Globals.NEWLINE), "/");
-        text = text.replace(Globals.NEWLINE, " ");
-        text = text.replace("##NEWLINE##", Globals.NEWLINE);
-        
-        List<BibtexEntry> importedEntries = fimp.importEntries(text, JabRef.jrf);
-        if (importedEntries != null) {
-            Util.setAutomaticFields(importedEntries, false, false, true);
-            for (BibtexEntry e: importedEntries) {
-                JabRef.jrf.basePanel().insertEntry(e);
-            }
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-  // update the bibtex source view and available List
-  private final void updateSourceView()
-  {
-    StringWriter sw = new StringWriter( 200 ) ;
-    try
-    {
-      entry.write( sw, new net.sf.jabref.export.LatexFieldFormatter(), false ) ;
-      String srcString = sw.getBuffer().toString() ;
-      preview.setText( srcString ) ;
-    }
-    catch ( IOException ex )
-    {}
-
-    fieldList.clearSelection() ;
-  }
-
-// ---------------------------------------------------------------------------
-  private final String[] getAllFields()
-  {
-      ArrayList<String> f = new ArrayList<String>();
-      String[] req = entry.getRequiredFields();
-      String[] opt = entry.getOptionalFields();
-      String[] allFields = BibtexFields.getAllFieldNames();
-      for (int i=0; i<req.length; i++) {
-          f.add(req[i]);
-      }
-      for (int i=0; i<opt.length; i++) {
-          f.add(opt[i]);
-      }
-      for (int i=0; i<allFields.length; i++) {
-          if (!f.contains(allFields[i]))
-              f.add(allFields[i]);
-      }
-      return f.toArray(new String[f.size()]);
-   }
-
-// ---------------------------------------------------------------------------
-  class PasteAction
-      extends BasicAction
-  {
-    public PasteAction()
-    {
-      super( "Paste", "Paste from clipboard", GUIGlobals.getIconUrl("paste")) ;
-    }
-
-    public void actionPerformed( ActionEvent e )
-    {
-      String data = ClipBoardManager.clipBoard.getClipboardContents() ;
-      if ( data != null )
-      {
-        int selStart = textPane.getSelectionStart() ;
-        int selEnd = textPane.getSelectionEnd() ;
-        if ( selEnd - selStart > 0 )
-        {
-          textPane.replaceSelection( "" ) ;
-        }
-        int cPos = textPane.getCaretPosition() ;
-        try
-        {
-          doc.insertString( cPos, data, doc.getStyle( "regular" ) ) ;
-        }
-        catch ( Exception ex )
-        {}
-      }
-    }
-  }
-
-// ---------------------------------------------------------------------------
-  class LoadAction
-      extends BasicAction
-  {
-    public LoadAction()
-    {
-      super( "Open", "Open_file", GUIGlobals.getIconUrl("open")) ;
-    }
-
-    public void actionPerformed( ActionEvent e )
-    {
-      try
-      {
-        String chosen = null ;
-        chosen = FileDialogs.getNewFile( _frame, null, null,
-                                     ".txt",
-                                     JFileChooser.OPEN_DIALOG, false ) ;
-        if ( chosen != null )
-        {
-          File newFile = new File( chosen ) ;
-          doc.remove( 0, doc.getLength() ) ;
-          EditorKit eKit = textPane.getEditorKit() ;
-          if ( eKit != null )
-          {
-            eKit.read( new FileInputStream( newFile ), doc, 0 ) ;
-            doc.setLogicalStyle( 0, doc.getStyle( "regular" ) ) ;
-          }
-        }
-      }
-      catch ( Exception ex )
-      {}
-    }
-  }
-
-// ---------------------------------------------------------------------------
-  class ClearAction
-      extends BasicAction
-  {
-    public ClearAction()
-    {
-      super( "Clear", "Clear_inputarea", GUIGlobals.getIconUrl("new")) ;
-    }
-
-    public void actionPerformed( ActionEvent e )
-    {
-      textPane.setText( "" ) ;
-    }
-  }
-
-// ---------------------------------------------------------------------------
-  class MenuHeaderAction
-      extends BasicAction
-  {
-    public MenuHeaderAction()
-    {
-      super( "Edit" ) ;
-      this.setEnabled( false ) ;
-    }
-
-    public void actionPerformed( ActionEvent e )
-    {}
-  }
-
-// ---------------------------------------------------------------------------
-
-  class FieldListSelectionHandler
-      implements ListSelectionListener
-  {
-    private int lastIndex = -1 ;
-
-    public void valueChanged( ListSelectionEvent e )
-    {
-      ListSelectionModel lsm = ( ListSelectionModel ) e.getSource() ;
-
-      int index = lsm.getAnchorSelectionIndex() ;
-      if ( index != lastIndex )
-      {
-
-        boolean isAdjusting = e.getValueIsAdjusting() ;
-
-        if ( !isAdjusting ) // if selection is finished
-        {
-//            System.out.println( "Event for index" + index ) ;
-          if ( lastIndex > -1 )
-          {
-            String tag1 = fieldList.getModel().getElementAt( lastIndex ).
-                toString() ;
-            marked.setStyleForTag( tag1, "used", doc ) ;
-          }
-
-          String tag2 = fieldList.getModel().getElementAt( index ).toString() ;
-          marked.setStyleForTag( tag2, "marked", doc ) ;
-
-          lastIndex = index ;
-        }
-      }
-    }
-  }
-
-// ---------------------------------------------------------------------------
-
-  // simple JList Renderer
-  // based on : Advanced JList Programming at developers.sun.com
-  class SimpleCellRenderer
-      extends DefaultListCellRenderer
-  {
-    private Font baseFont ;
-    private Font usedFont ;
-    private ImageIcon okIcon = GUIGlobals.getImage("complete");
-    private ImageIcon needIcon = GUIGlobals.getImage("wrong");
-
-    public SimpleCellRenderer( Font normFont )
-    {
-      baseFont = normFont ;
-      usedFont = baseFont.deriveFont( Font.ITALIC ) ;
-    }
-
-    /* This is the only method defined by ListCellRenderer.  We just
-     * reconfigure the Jlabel each time we're called.
-     */
-    public Component getListCellRendererComponent(
-        JList list,
-        Object value, // value to display
-        int index, // cell index
-        boolean iss, // is the cell selected
-        boolean chf ) // the list and the cell have the focus
-    {
-      /* The DefaultListCellRenderer class will take care of
-       * the JLabels text property, it's foreground and background
-       * colors, and so on.
-       */
-      super.getListCellRendererComponent( list, value, index, iss, chf ) ;
-
-      /* We additionally set the JLabels icon property here.
-       */
-      String s = value.toString() ;
-//        setIcon((s.length > 10) ? longIcon : shortIcon);
-      if ( entry.getField( s ) != null )
-      {
-        this.setForeground( Color.gray ) ;
-        this.setFont( usedFont ) ;
-        this.setIcon( okIcon ) ;
-        this.setToolTipText( "filled" ) ;
-      }
-      else
-      {
-        this.setIcon( needIcon ) ;
-        this.setToolTipText( "field is missing" ) ;
-      }
-      return this ;
-    }
-  }
-
-//---------------------------------------------------------------
-
-  class FieldListMouseListener
-      extends MouseAdapter
-  {
-    public void mouseClicked( MouseEvent e )
-    {
-      if ( e.getClickCount() == 2 )
-      {
-        insertTextForTag() ;
-      }
-    }
-  }
-}
-
-//---------------------------------------------------------------
-class PopupListener
-    extends MouseAdapter
-{
-  private JPopupMenu popMenu ;
-
-  public PopupListener( JPopupMenu menu )
-  {
-    popMenu = menu ;
-  }
-
-  public void mousePressed( MouseEvent e )
-  {
-    maybeShowPopup( e ) ;
-  }
-
-  public void mouseReleased( MouseEvent e )
-  {
-    maybeShowPopup( e ) ;
-  }
-
-  private void maybeShowPopup( MouseEvent e )
-  {
-    if ( e.isPopupTrigger() )
-    {
-//      System.out.println("show "
-//                         + e.getComponent() +"  x =" + e.getX() +"y =" + e.getY() ) ;
-//      popMenu.setVisible(true);
-      popMenu.show( e.getComponent(), e.getX(), e.getY() ) ;
-    }
-  }
-}
-
-//---------------------------------------------------------------
-
-abstract class BasicAction
-    extends AbstractAction
-{
-  public BasicAction( String text, String description, URL icon )
-  {
-    super( Globals.lang( text ), new ImageIcon( icon ) ) ;
-    putValue( SHORT_DESCRIPTION, Globals.lang( description ) ) ;
-  }
-
-  public BasicAction( String text, String description, URL icon, KeyStroke key )
-  {
-    super( Globals.lang( text ), new ImageIcon( icon ) ) ;
-    putValue( ACCELERATOR_KEY, key ) ;
-    putValue( SHORT_DESCRIPTION, Globals.lang( description ) ) ;
-  }
-
-  public BasicAction( String text )
-  {
-    super( Globals.lang( text ) ) ;
-  }
-
-  public BasicAction( String text, KeyStroke key )
-  {
-    super( Globals.lang( text ) ) ;
-    putValue( ACCELERATOR_KEY, key ) ;
-  }
-
-  public abstract void actionPerformed( ActionEvent e ) ;
-}
-//---------------------------------------------------------------
-
-
-//---------------------------------------------------------------
-
+/*
+ Copyright (C) 2004 R. Nagel
+
+ All programs in this directory and
+ subdirectories are published under the GNU General Public License as
+ described below.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+
+ Further information about the GNU GPL is available at:
+ http://www.gnu.org/copyleft/gpl.ja.html
+
+ */
+
+// created by : r.nagel 14.09.2004
+//
+// function : import from plain text => simple mark/copy/paste into bibtex entry
+//
+// todo     : - change colors and fonts
+//            - delete selected text
+//            - make textarea editable
+//            - create several bibtex entries in dialog
+//            - if the dialog works with an existing entry (right click menu item)
+//              the cancel option doesn't work well
+//
+// modified :
+//            28.07.2005
+//            - fix: insert button doesnt work
+//            - append a author with "and"
+//            04.11.2004
+//            - experimental: text-input-area with underlying infotext
+//            02.11.2004
+//            - integrity check, which reports errors and warnings for the fields
+//            22.10.2004
+//            - little help box
+//
+
+package net.sf.jabref.wizard.text.gui ;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.*;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.text.*;
+import net.sf.jabref.*;
+import net.sf.jabref.gui.FileDialogs;
+import net.sf.jabref.imports.FreeCiteImporter;
+import net.sf.jabref.wizard.integrity.gui.IntegrityMessagePanel;
+import net.sf.jabref.wizard.text.TagToMarkedTextStore;
+
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
+public class TextInputDialog
+    extends JDialog implements ActionListener
+{
+  private JButton okButton = new JButton() ;
+  private JButton cancelButton = new JButton() ;
+  private JButton insertButton = new JButton() ;
+  private JButton parseWithFreeCiteButton = new JButton();
+  private JPanel panel1 = new JPanel() ;
+  private JPanel buttons = new JPanel() ;
+  private JPanel rawPanel = new JPanel() ;
+  private JPanel sourcePanel = new JPanel() ;
+  private IntegrityMessagePanel warnPanel;
+  private JList fieldList ;
+  private JRadioButton overRadio, appRadio ;
+
+  private OverlayPanel testPanel ;
+
+  private BibtexEntry entry ;
+
+  public JPopupMenu inputMenu = new JPopupMenu() ;
+  private StyledDocument doc ; // content from inputPane
+  private JTextPane textPane ;
+  private JTextArea preview ;
+
+  private boolean inputChanged ; // input changed, fired by insert buttons
+
+  private TagToMarkedTextStore marked ;
+
+  private JabRefFrame _frame ;
+
+  private boolean okPressed = false ;
+
+  public TextInputDialog( JabRefFrame frame, BasePanel panel, String title, boolean modal,
+                          BibtexEntry bibEntry )
+  {
+    super( frame, title, modal ) ;
+
+    warnPanel = new IntegrityMessagePanel(panel);
+    inputChanged = true ;  // for a first validCheck
+
+
+    _frame = frame ;
+
+    entry = bibEntry ;
+    marked = new TagToMarkedTextStore() ;
+
+    try
+    {
+      jbInit( frame ) ;
+      pack() ;
+    }
+    catch ( Exception ex )
+    {
+      ex.printStackTrace() ;
+    }
+
+    updateSourceView() ;
+  }
+
+  private void jbInit( JabRefFrame parent ) {
+    this.setModal( true ) ;
+    //this.setResizable( false ) ;
+    getContentPane().setLayout(new BorderLayout());
+    String typeStr = Globals.lang( "for" ) ;
+    if ( entry != null )
+    {
+      if ( entry.getType() != null )
+      {
+        typeStr = typeStr + " " + entry.getType().getName() ;
+      }
+    }
+
+    this.setTitle( Globals.lang( "Plain_text_import" ) + " " + typeStr ) ;
+    getContentPane().add( panel1, BorderLayout.CENTER ) ;
+
+    initRawPanel() ;
+    initButtonPanel() ;
+    initSourcePanel() ;
+
+    JTabbedPane tabbed = new JTabbedPane() ;
+    tabbed.addChangeListener(
+        new ChangeListener()
+    {
+      public void stateChanged( ChangeEvent e )
+      {
+        if ( inputChanged )
+        {
+          warnPanel.updateView( entry ) ;
+        }
+      }
+    } ) ;
+
+    tabbed.add( rawPanel, Globals.lang( "Raw_source" ) ) ;
+    tabbed.add( sourcePanel, Globals.lang( "BibTeX_source" ) ) ;
+    tabbed.add( warnPanel, Globals.lang( "Messages_and_Hints" ) ) ;
+
+    // Panel Layout
+    panel1.setLayout( new BorderLayout() ) ;
+    panel1.add( tabbed, BorderLayout.CENTER ) ;
+    panel1.add( buttons, BorderLayout.SOUTH ) ;
+
+    // Key bindings:
+    ActionMap am = buttons.getActionMap() ;
+    InputMap im = buttons.getInputMap( JComponent.WHEN_IN_FOCUSED_WINDOW ) ;
+    im.put( parent.prefs().getKey( "Close dialog" ), "close" ) ;
+    am.put( "close", new AbstractAction()
+    {
+      public void actionPerformed( ActionEvent e )
+      {
+        dispose() ;
+      }
+    } ) ;
+  }
+
+// ---------------------------------------------------------------------------
+  // Panel with text import functionality
+  private void initRawPanel()
+  {
+
+    rawPanel.setLayout( new BorderLayout() ) ;
+
+        // Textarea
+        textPane = new JTextPane() ;
+
+        textPane.setEditable( false ) ;
+
+        doc = textPane.getStyledDocument() ;
+        addStylesToDocument( doc ) ;
+
+        try
+        {
+          doc.insertString( 0, "", doc.getStyle( "regular" ) ) ;
+        }
+        catch ( Exception e )
+        {}
+
+        testPanel = new OverlayPanel(textPane,
+                                     Globals.lang("Text_Input_Area") ) ;
+
+        testPanel.setPreferredSize( new Dimension( 450, 255) );
+        testPanel.setMaximumSize( new Dimension(450, Integer.MAX_VALUE) );
+
+    // copy/paste Menu
+    PasteAction pasteAction = new PasteAction() ;
+    JMenuItem pasteMI = new JMenuItem( pasteAction ) ;
+    inputMenu.add( new MenuHeaderAction() ) ;
+    inputMenu.addSeparator() ;
+    inputMenu.add( pasteMI ) ;
+
+    //Add listener to components that can bring up popup menus.
+    MouseListener popupListener = new PopupListener( inputMenu ) ;
+    textPane.addMouseListener( popupListener );
+    testPanel.addMouseListener( popupListener );
+
+    // Toolbar
+    JToolBar toolBar = new JToolBar() ;
+    toolBar.add( new ClearAction() ) ;
+    toolBar.setBorderPainted( false ) ;
+    toolBar.addSeparator() ;
+    toolBar.add( pasteAction ) ;
+    toolBar.add( new LoadAction() ) ;
+
+    JPanel leftPanel = new JPanel( new BorderLayout() ) ;
+
+    leftPanel.add( toolBar, BorderLayout.NORTH ) ;
+    leftPanel.add( testPanel, BorderLayout.CENTER ) ;
+
+
+    // ----------------------------------------------------------------
+    JPanel inputPanel = new JPanel() ;
+
+    // Panel Layout
+    GridBagLayout gbl = new GridBagLayout() ;
+    GridBagConstraints con = new GridBagConstraints() ;
+    con.weightx = 0 ;
+    con.insets = new Insets( 5, 5, 0, 5 ) ;
+    con.fill = GridBagConstraints.HORIZONTAL ;
+
+    inputPanel.setLayout( gbl ) ;
+
+    // Border
+    TitledBorder titledBorder1 = new TitledBorder(
+        BorderFactory.createLineBorder(
+            new Color( 153, 153, 153 ), 2 ),
+        Globals.lang( "Input" ) ) ;
+    inputPanel.setBorder( titledBorder1 ) ;
+    //inputPanel.setPreferredSize( new Dimension( 200, 255 ) ) ;
+    inputPanel.setMinimumSize( new Dimension( 10, 10 ) ) ;
+
+    fieldList = new JList( getAllFields() ) ;
+    fieldList.setCellRenderer( new SimpleCellRenderer( fieldList.getFont() ) ) ;
+    ListSelectionModel listSelectionModel = fieldList.getSelectionModel() ;
+    listSelectionModel.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ) ;
+    listSelectionModel.addListSelectionListener( new FieldListSelectionHandler() ) ;
+    fieldList.addMouseListener( new FieldListMouseListener() ) ;
+
+    JScrollPane fieldScroller = new JScrollPane( fieldList ) ;
+    fieldScroller.setVerticalScrollBarPolicy(
+        JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED ) ;
+    //fieldScroller.setPreferredSize( new Dimension( 180, 190 ) ) ;
+    //fieldScroller.setMinimumSize( new Dimension( 180, 190 ) ) ;
+
+    // insert buttons
+    insertButton.setText( Globals.lang( "Insert" ) ) ;
+    insertButton.addActionListener( this ) ;
+    
+    // parse with FreeCite button
+    parseWithFreeCiteButton.setText(Globals.lang("Parse with FreeCite"));
+    parseWithFreeCiteButton.addActionListener(this);
+    
+
+    // Radio buttons
+    appRadio = new JRadioButton( Globals.lang( "Append" ) ) ;
+    appRadio.setToolTipText( Globals.lang( "append_the_selected_text_to_bibtex_key") ) ;
+    appRadio.setMnemonic( KeyEvent.VK_A ) ;
+    appRadio.setSelected( true ) ;
+
+    overRadio = new JRadioButton( Globals.lang( "Override" ) ) ;
+    overRadio.setToolTipText( Globals.lang( "override_the_bibtex_key_by_the_selected_text") ) ;
+    overRadio.setMnemonic( KeyEvent.VK_O ) ;
+    overRadio.setSelected( false ) ;
+
+    //Group the radio buttons.
+    ButtonGroup group = new ButtonGroup() ;
+    group.add( appRadio ) ;
+    group.add( overRadio ) ;
+
+    JPanel radioPanel = new JPanel( new GridLayout( 0, 1 ) ) ;
+    radioPanel.add( appRadio ) ;
+    radioPanel.add( overRadio ) ;
+
+    // insert sub components
+    JLabel label1 = new JLabel( Globals.lang( "Available fields" ) ) ;
+    con.gridwidth = GridBagConstraints.REMAINDER ;
+    gbl.setConstraints( label1, con ) ;
+    inputPanel.add( label1 ) ;
+
+    con.gridwidth = GridBagConstraints.REMAINDER ;
+    con.gridheight = 8 ;
+    con.weighty = 1;
+    con.fill = GridBagConstraints.BOTH;
+    gbl.setConstraints( fieldScroller, con ) ;
+    inputPanel.add( fieldScroller ) ;
+
+    con.fill = GridBagConstraints.HORIZONTAL ;
+    con.weighty = 0;
+    con.gridwidth = 2 ;
+    gbl.setConstraints( radioPanel, con ) ;
+    inputPanel.add( radioPanel ) ;
+
+    con.gridwidth = GridBagConstraints.REMAINDER ;
+    gbl.setConstraints( insertButton, con ) ;
+    inputPanel.add( insertButton ) ;
+
+    // ----------------------------------------------------------------------
+    rawPanel.add( leftPanel, BorderLayout.CENTER ) ;
+    rawPanel.add( inputPanel, BorderLayout.EAST ) ;
+
+    boolean loaded = false ;
+
+    JLabel desc = new JLabel("<html><h3>"+Globals.lang("Plain text import")+"</h3><p>"
+            +Globals.lang("This is a simple copy and paste dialog. First load or paste some text into "
+            +"the text input area.<br>After that, you can mark text and assign it to a BibTeX field.")
+            +"</p></html>");
+    desc.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+
+    /*infoText.setEditable(false);
+    infoText.setBackground(GUIGlobals.infoField);
+    infoText.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
+    infoText.setPreferredSize( new Dimension(220, 50));
+    infoText.setMinimumSize( new Dimension(180, 50));*/
+
+    rawPanel.add(desc, BorderLayout.SOUTH) ;
+  }
+
+// ---------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------
+
+  private void initButtonPanel()
+  {
+
+    okButton.setText( Globals.lang( "Accept" ) ) ;
+    okButton.addActionListener( this ) ;
+    cancelButton.setText( Globals.lang( "Cancel" ) ) ;
+    cancelButton.addActionListener( this ) ;
+
+    ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
+    buttons.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+    bb.addGlue();
+    bb.addButton(okButton);
+    bb.addButton(parseWithFreeCiteButton);
+    bb.addButton(cancelButton);
+    bb.addGlue();
+
+  }
+
+// ---------------------------------------------------------------------------
+
+  // Panel with bibtex source code
+  private void initSourcePanel()
+  {
+//    preview =  new PreviewPanel(entry) ;
+    preview = new JTextArea() ;
+    preview.setEditable( false ) ;
+
+    JScrollPane paneScrollPane = new JScrollPane( preview ) ;
+    paneScrollPane.setVerticalScrollBarPolicy(
+        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ) ;
+    paneScrollPane.setPreferredSize( new Dimension( 500, 255 ) ) ;
+    paneScrollPane.setMinimumSize( new Dimension( 10, 10 ) ) ;
+
+    sourcePanel.setLayout( new BorderLayout() ) ;
+    sourcePanel.add( paneScrollPane, BorderLayout.CENTER ) ;
+  }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+  protected void addStylesToDocument( StyledDocument doc )
+  {
+    //Initialize some styles.
+    Style def = StyleContext.getDefaultStyleContext().
+        getStyle( StyleContext.DEFAULT_STYLE ) ;
+
+    Style regular = doc.addStyle( "regular", def ) ;
+    StyleConstants.setFontFamily( def, "SansSerif" ) ;
+    StyleConstants.setFontSize( def, 12 ) ;
+
+    Style s = doc.addStyle( "oldused", regular ) ;
+    StyleConstants.setItalic( s, true ) ;
+    StyleConstants.setForeground( s, Color.blue ) ;
+
+    s = doc.addStyle( "used", regular ) ;
+    StyleConstants.setBold( s, true ) ;
+    StyleConstants.setForeground( s, Color.blue ) ;
+
+    s = doc.addStyle( "marked", regular ) ;
+    StyleConstants.setBold( s, true ) ;
+    StyleConstants.setForeground( s, Color.red ) ;
+
+    s = doc.addStyle( "small", regular ) ;
+    StyleConstants.setFontSize( s, 10 ) ;
+
+    s = doc.addStyle( "large", regular ) ;
+    StyleConstants.setFontSize( s, 16 ) ;
+  }
+
+// ---------------------------------------------------------------------------
+  private void insertTextForTag()
+  {
+    String type = ( String ) fieldList.getSelectedValue() ;
+    if ( type != null )
+    {
+      String txt = textPane.getSelectedText() ;
+
+      if ( txt != null )
+      {
+        int selStart = textPane.getSelectionStart() ;
+        int selEnd = textPane.getSelectionEnd() ;
+
+        // unselect text
+        textPane.setSelectionEnd( selStart ) ;
+
+        // mark the selected text as "used"
+        doc.setCharacterAttributes( selStart, selEnd - selStart,
+                                    doc.getStyle( "marked" ), true ) ;
+
+        // override an existing entry
+        if ( overRadio.isSelected() )
+        {
+          entry.setField( type, txt ) ;
+          // erase old text selection
+          marked.setStyleForTag( type, "regular", doc ) ; // delete all previous styles
+          marked.insertPosition( type, selStart, selEnd ) ; // insert new selection style
+        }
+        else // append text
+        {
+          // memorize the selection for text highlighting
+          marked.appendPosition( type, selStart, selEnd ) ;
+
+          // get old text from bibtex tag
+          String old = entry.getField( type ) ;
+
+          // merge old and selected text
+          if ( old != null )
+          {
+            // insert a new author with an additional "and"
+            if (type.hashCode() == "author".hashCode())
+            {
+              entry.setField(type, old +" and " +txt);
+            }
+            else entry.setField( type, old + txt ) ;
+          }
+          else // "null"+"txt" Strings forbidden
+          {
+            entry.setField( type, txt ) ;
+          }
+        }
+        // make the new data in bibtex source code visible
+        updateSourceView() ;
+      }
+    }
+  }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+  public boolean okPressed()
+  {
+    return okPressed ;
+  }
+
+// ---------------------------------------------------------------------------
+
+//  ActionListener
+//  handling of buttons-click actions
+  public void actionPerformed( ActionEvent e )
+  {
+    Object source = e.getSource() ;
+
+    if (source == this.okButton)
+    {
+      okPressed = true ;
+      dispose() ;
+    }
+    else if (source == this.cancelButton)
+    {
+      dispose() ;
+    }
+    else if (source == this.insertButton)
+    {
+      insertTextForTag() ;
+    }
+    else if (source == this.parseWithFreeCiteButton) {
+        if (parseWithFreeCiteAndAddEntries()) {    	
+            okPressed = false; // we do not want to have the super method to handle our entries, we do it on our own
+        	dispose();
+        }
+    }
+  }
+
+  
+    /**
+     * tries to parse the pasted reference with freecite
+     * @return true if successful, false otherwise
+     */
+  private boolean parseWithFreeCiteAndAddEntries() {
+        FreeCiteImporter fimp = new FreeCiteImporter();
+        String text = textPane.getText();
+        
+        // we have to remove line breaks (but keep empty lines)
+        // otherwise, the result is broken
+        text = text.replace(Globals.NEWLINE.concat(Globals.NEWLINE), "##NEWLINE##");
+        // possible URL line breaks are removed completely.
+        text = text.replace("/".concat(Globals.NEWLINE), "/");
+        text = text.replace(Globals.NEWLINE, " ");
+        text = text.replace("##NEWLINE##", Globals.NEWLINE);
+        
+        List<BibtexEntry> importedEntries = fimp.importEntries(text, JabRef.jrf);
+        if (importedEntries != null) {
+            Util.setAutomaticFields(importedEntries, false, false, true);
+            for (BibtexEntry e: importedEntries) {
+                JabRef.jrf.basePanel().insertEntry(e);
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+  // update the bibtex source view and available List
+  private final void updateSourceView()
+  {
+    StringWriter sw = new StringWriter( 200 ) ;
+    try
+    {
+      entry.write( sw, new net.sf.jabref.export.LatexFieldFormatter(), false ) ;
+      String srcString = sw.getBuffer().toString() ;
+      preview.setText( srcString ) ;
+    }
+    catch ( IOException ex )
+    {}
+
+    fieldList.clearSelection() ;
+  }
+
+// ---------------------------------------------------------------------------
+  private final String[] getAllFields()
+  {
+      ArrayList<String> f = new ArrayList<String>();
+      String[] req = entry.getRequiredFields();
+      String[] opt = entry.getOptionalFields();
+      String[] allFields = BibtexFields.getAllFieldNames();
+      for (int i=0; i<req.length; i++) {
+          f.add(req[i]);
+      }
+      for (int i=0; i<opt.length; i++) {
+          f.add(opt[i]);
+      }
+      for (int i=0; i<allFields.length; i++) {
+          if (!f.contains(allFields[i]))
+              f.add(allFields[i]);
+      }
+      return f.toArray(new String[f.size()]);
+   }
+
+// ---------------------------------------------------------------------------
+  class PasteAction
+      extends BasicAction
+  {
+    public PasteAction()
+    {
+      super( "Paste", "Paste from clipboard", GUIGlobals.getIconUrl("paste")) ;
+    }
+
+    public void actionPerformed( ActionEvent e )
+    {
+      String data = ClipBoardManager.clipBoard.getClipboardContents() ;
+      if ( data != null )
+      {
+        int selStart = textPane.getSelectionStart() ;
+        int selEnd = textPane.getSelectionEnd() ;
+        if ( selEnd - selStart > 0 )
+        {
+          textPane.replaceSelection( "" ) ;
+        }
+        int cPos = textPane.getCaretPosition() ;
+        try
+        {
+          doc.insertString( cPos, data, doc.getStyle( "regular" ) ) ;
+        }
+        catch ( Exception ex )
+        {}
+      }
+    }
+  }
+
+// ---------------------------------------------------------------------------
+  class LoadAction
+      extends BasicAction
+  {
+    public LoadAction()
+    {
+      super( "Open", "Open_file", GUIGlobals.getIconUrl("open")) ;
+    }
+
+    public void actionPerformed( ActionEvent e )
+    {
+      try
+      {
+        String chosen = null ;
+        chosen = FileDialogs.getNewFile( _frame, null, null,
+                                     ".txt",
+                                     JFileChooser.OPEN_DIALOG, false ) ;
+        if ( chosen != null )
+        {
+          File newFile = new File( chosen ) ;
+          doc.remove( 0, doc.getLength() ) ;
+          EditorKit eKit = textPane.getEditorKit() ;
+          if ( eKit != null )
+          {
+            eKit.read( new FileInputStream( newFile ), doc, 0 ) ;
+            doc.setLogicalStyle( 0, doc.getStyle( "regular" ) ) ;
+          }
+        }
+      }
+      catch ( Exception ex )
+      {}
+    }
+  }
+
+// ---------------------------------------------------------------------------
+  class ClearAction
+      extends BasicAction
+  {
+    public ClearAction()
+    {
+      super( "Clear", "Clear_inputarea", GUIGlobals.getIconUrl("new")) ;
+    }
+
+    public void actionPerformed( ActionEvent e )
+    {
+      textPane.setText( "" ) ;
+    }
+  }
+
+// ---------------------------------------------------------------------------
+  class MenuHeaderAction
+      extends BasicAction
+  {
+    public MenuHeaderAction()
+    {
+      super( "Edit" ) ;
+      this.setEnabled( false ) ;
+    }
+
+    public void actionPerformed( ActionEvent e )
+    {}
+  }
+
+// ---------------------------------------------------------------------------
+
+  class FieldListSelectionHandler
+      implements ListSelectionListener
+  {
+    private int lastIndex = -1 ;
+
+    public void valueChanged( ListSelectionEvent e )
+    {
+      ListSelectionModel lsm = ( ListSelectionModel ) e.getSource() ;
+
+      int index = lsm.getAnchorSelectionIndex() ;
+      if ( index != lastIndex )
+      {
+
+        boolean isAdjusting = e.getValueIsAdjusting() ;
+
+        if ( !isAdjusting ) // if selection is finished
+        {
+//            System.out.println( "Event for index" + index ) ;
+          if ( lastIndex > -1 )
+          {
+            String tag1 = fieldList.getModel().getElementAt( lastIndex ).
+                toString() ;
+            marked.setStyleForTag( tag1, "used", doc ) ;
+          }
+
+          String tag2 = fieldList.getModel().getElementAt( index ).toString() ;
+          marked.setStyleForTag( tag2, "marked", doc ) ;
+
+          lastIndex = index ;
+        }
+      }
+    }
+  }
+
+// ---------------------------------------------------------------------------
+
+  // simple JList Renderer
+  // based on : Advanced JList Programming at developers.sun.com
+  class SimpleCellRenderer
+      extends DefaultListCellRenderer
+  {
+    private Font baseFont ;
+    private Font usedFont ;
+    private ImageIcon okIcon = GUIGlobals.getImage("complete");
+    private ImageIcon needIcon = GUIGlobals.getImage("wrong");
+
+    public SimpleCellRenderer( Font normFont )
+    {
+      baseFont = normFont ;
+      usedFont = baseFont.deriveFont( Font.ITALIC ) ;
+    }
+
+    /* This is the only method defined by ListCellRenderer.  We just
+     * reconfigure the Jlabel each time we're called.
+     */
+    public Component getListCellRendererComponent(
+        JList list,
+        Object value, // value to display
+        int index, // cell index
+        boolean iss, // is the cell selected
+        boolean chf ) // the list and the cell have the focus
+    {
+      /* The DefaultListCellRenderer class will take care of
+       * the JLabels text property, it's foreground and background
+       * colors, and so on.
+       */
+      super.getListCellRendererComponent( list, value, index, iss, chf ) ;
+
+      /* We additionally set the JLabels icon property here.
+       */
+      String s = value.toString() ;
+//        setIcon((s.length > 10) ? longIcon : shortIcon);
+      if ( entry.getField( s ) != null )
+      {
+        this.setForeground( Color.gray ) ;
+        this.setFont( usedFont ) ;
+        this.setIcon( okIcon ) ;
+        this.setToolTipText( "filled" ) ;
+      }
+      else
+      {
+        this.setIcon( needIcon ) ;
+        this.setToolTipText( "field is missing" ) ;
+      }
+      return this ;
+    }
+  }
+
+//---------------------------------------------------------------
+
+  class FieldListMouseListener
+      extends MouseAdapter
+  {
+    public void mouseClicked( MouseEvent e )
+    {
+      if ( e.getClickCount() == 2 )
+      {
+        insertTextForTag() ;
+      }
+    }
+  }
+}
+
+//---------------------------------------------------------------
+class PopupListener
+    extends MouseAdapter
+{
+  private JPopupMenu popMenu ;
+
+  public PopupListener( JPopupMenu menu )
+  {
+    popMenu = menu ;
+  }
+
+  public void mousePressed( MouseEvent e )
+  {
+    maybeShowPopup( e ) ;
+  }
+
+  public void mouseReleased( MouseEvent e )
+  {
+    maybeShowPopup( e ) ;
+  }
+
+  private void maybeShowPopup( MouseEvent e )
+  {
+    if ( e.isPopupTrigger() )
+    {
+//      System.out.println("show "
+//                         + e.getComponent() +"  x =" + e.getX() +"y =" + e.getY() ) ;
+//      popMenu.setVisible(true);
+      popMenu.show( e.getComponent(), e.getX(), e.getY() ) ;
+    }
+  }
+}
+
+//---------------------------------------------------------------
+
+abstract class BasicAction
+    extends AbstractAction
+{
+  public BasicAction( String text, String description, URL icon )
+  {
+    super( Globals.lang( text ), new ImageIcon( icon ) ) ;
+    putValue( SHORT_DESCRIPTION, Globals.lang( description ) ) ;
+  }
+
+  public BasicAction( String text, String description, URL icon, KeyStroke key )
+  {
+    super( Globals.lang( text ), new ImageIcon( icon ) ) ;
+    putValue( ACCELERATOR_KEY, key ) ;
+    putValue( SHORT_DESCRIPTION, Globals.lang( description ) ) ;
+  }
+
+  public BasicAction( String text )
+  {
+    super( Globals.lang( text ) ) ;
+  }
+
+  public BasicAction( String text, KeyStroke key )
+  {
+    super( Globals.lang( text ) ) ;
+    putValue( ACCELERATOR_KEY, key ) ;
+  }
+
+  public abstract void actionPerformed( ActionEvent e ) ;
+}
+//---------------------------------------------------------------
+
+
+//---------------------------------------------------------------
+
diff --git a/src/java/tests/net/sf/jabref/AllTests.java b/src/java/tests/net/sf/jabref/AllTests.java
index a397341..6f15cfc 100644
--- a/src/java/tests/net/sf/jabref/AllTests.java
+++ b/src/java/tests/net/sf/jabref/AllTests.java
@@ -1,32 +1,32 @@
-package tests.net.sf.jabref;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite("Test for test.net.sf.jabref");
-		//$JUnit-BEGIN$
-		suite.addTestSuite(BibtexDatabaseTest.class);
-		suite.addTestSuite(JabRefTestCase.class);
-		suite.addTestSuite(UtilFindFileTest.class);
-		suite.addTestSuite(AuthorListTest.class);
-		suite.addTestSuite(FileBasedTestCase.class);
-		suite.addTestSuite(UtilTest.class);
-		suite.addTestSuite(SearchTextListenerTest.class);
-		//$JUnit-END$
-
-		suite.addTest(tests.net.sf.jabref.export.layout.format.AllTests.suite());
-		suite.addTest(tests.net.sf.jabref.gui.AllTests.suite());
-		suite.addTest(tests.net.sf.jabref.imports.AllTests.suite());
-		suite.addTest(tests.net.sf.jabref.search.AllTests.suite());
-		suite.addTest(tests.net.sf.jabref.util.AllTests.suite());
-		suite.addTest(tests.net.sf.jabref.export.layout.AllTests.suite());
-		suite.addTest(tests.net.sf.jabref.bst.AllTests.suite());
-		suite.addTest(tests.net.sf.jabref.labelPattern.AllTests.suite());
-
-		return suite;
-	}
-
-}
+package tests.net.sf.jabref;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for test.net.sf.jabref");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(BibtexDatabaseTest.class);
+		suite.addTestSuite(JabRefTestCase.class);
+		suite.addTestSuite(UtilFindFileTest.class);
+		suite.addTestSuite(AuthorListTest.class);
+		suite.addTestSuite(FileBasedTestCase.class);
+		suite.addTestSuite(UtilTest.class);
+		suite.addTestSuite(SearchTextListenerTest.class);
+		//$JUnit-END$
+
+		suite.addTest(tests.net.sf.jabref.export.layout.format.AllTests.suite());
+		suite.addTest(tests.net.sf.jabref.gui.AllTests.suite());
+		suite.addTest(tests.net.sf.jabref.imports.AllTests.suite());
+		suite.addTest(tests.net.sf.jabref.search.AllTests.suite());
+		suite.addTest(tests.net.sf.jabref.util.AllTests.suite());
+		suite.addTest(tests.net.sf.jabref.export.layout.AllTests.suite());
+		suite.addTest(tests.net.sf.jabref.bst.AllTests.suite());
+		suite.addTest(tests.net.sf.jabref.labelPattern.AllTests.suite());
+
+		return suite;
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/AuthorListTest.java b/src/java/tests/net/sf/jabref/AuthorListTest.java
index 5c2a58b..30804db 100644
--- a/src/java/tests/net/sf/jabref/AuthorListTest.java
+++ b/src/java/tests/net/sf/jabref/AuthorListTest.java
@@ -1,556 +1,556 @@
-package tests.net.sf.jabref;
-
-import junit.framework.TestCase;
-import net.sf.jabref.AuthorList;
-
-/**
- * 
- * @see net.sf.jabref.AuthorList Class tested.
- * 
- * @author Christopher Oezbek <oezi at oezi.de>
- * 
- * @version 0.1 - Still fails for stuff in AuthorList that is ambiguous
- */
-public class AuthorListTest extends TestCase {
-
-	public void testFixAuthor_Natbib() {
-		assertEquals("", AuthorList.fixAuthor_Natbib(""));
-		assertEquals("Smith", AuthorList.fixAuthor_Natbib("John Smith"));
-		assertEquals("Smith and Black Brown", AuthorList
-			.fixAuthor_Natbib("John Smith and Black Brown, Peter"));
-		assertEquals("von Neumann et al.", AuthorList
-			.fixAuthor_Natbib("John von Neumann and John Smith and Black Brown, Peter"));
-
-		// Is not cached!
-		assertTrue(AuthorList
-			.fixAuthor_Natbib("John von Neumann and John Smith and Black Brown, Peter") == AuthorList
-			.fixAuthor_Natbib("John von Neumann" + (0 == 1 ? "" : " and ")
-				+ "John Smith and Black Brown, Peter"));
-	}
-
-	public void testGetAuthorList() {
-		// Test caching in authorCache.
-		AuthorList al = AuthorList.getAuthorList("John Smith");
-		assertTrue(al == AuthorList.getAuthorList("John Smith"));
-		assertFalse(al == AuthorList.getAuthorList("Smith"));
-	}
-
-	public void testFixAuthor_firstNameFirstCommas() {
-
-		{ // No Commas
-			assertEquals("", AuthorList.fixAuthor_firstNameFirstCommas("", true, false));
-			assertEquals("", AuthorList.fixAuthor_firstNameFirstCommas("", false, false));
-
-			assertEquals("John Smith", AuthorList.fixAuthor_firstNameFirstCommas("John Smith",
-				false, false));
-			assertEquals("J. Smith", AuthorList.fixAuthor_firstNameFirstCommas("John Smith", true,
-				false));
-
-			// Check caching
-			assertTrue(AuthorList.fixAuthor_firstNameFirstCommas(
-				"John von Neumann and John Smith and Black Brown, Peter", true, false) == AuthorList
-				.fixAuthor_firstNameFirstCommas("John von Neumann" + (0 == 1 ? "" : " and ")
-					+ "John Smith and Black Brown, Peter", true, false));
-
-			assertEquals("John Smith and Peter Black Brown", AuthorList
-				.fixAuthor_firstNameFirstCommas("John Smith and Black Brown, Peter", false, false));
-			assertEquals("J. Smith and P. Black Brown", AuthorList.fixAuthor_firstNameFirstCommas(
-				"John Smith and Black Brown, Peter", true, false));
-
-			// Method description is different than code -> additional comma
-			// there
-			assertEquals("John von Neumann, John Smith and Peter Black Brown", AuthorList
-				.fixAuthor_firstNameFirstCommas(
-					"John von Neumann and John Smith and Black Brown, Peter", false, false));
-			assertEquals("J. von Neumann, J. Smith and P. Black Brown", AuthorList
-				.fixAuthor_firstNameFirstCommas(
-					"John von Neumann and John Smith and Black Brown, Peter", true, false));
-
-			assertEquals("J. P. von Neumann", AuthorList.fixAuthor_firstNameFirstCommas(
-				"John Peter von Neumann", true, false));
-		}
-		{ // Oxford Commas
-			assertEquals("", AuthorList.fixAuthor_firstNameFirstCommas("", true, true));
-			assertEquals("", AuthorList.fixAuthor_firstNameFirstCommas("", false, true));
-
-			assertEquals("John Smith", AuthorList.fixAuthor_firstNameFirstCommas("John Smith",
-				false, true));
-			assertEquals("J. Smith", AuthorList.fixAuthor_firstNameFirstCommas("John Smith", true,
-				true));
-
-			// Check caching
-			assertTrue(AuthorList.fixAuthor_firstNameFirstCommas(
-				"John von Neumann and John Smith and Black Brown, Peter", true, true) == AuthorList
-				.fixAuthor_firstNameFirstCommas("John von Neumann" + (0 == 1 ? "" : " and ")
-					+ "John Smith and Black Brown, Peter", true, true));
-
-			assertEquals("John Smith and Peter Black Brown", AuthorList
-				.fixAuthor_firstNameFirstCommas("John Smith and Black Brown, Peter", false, true));
-			assertEquals("J. Smith and P. Black Brown", AuthorList.fixAuthor_firstNameFirstCommas(
-				"John Smith and Black Brown, Peter", true, true));
-
-			// Method description is different than code -> additional comma
-			// there
-			assertEquals("John von Neumann, John Smith, and Peter Black Brown", AuthorList
-				.fixAuthor_firstNameFirstCommas(
-					"John von Neumann and John Smith and Black Brown, Peter", false, true));
-			assertEquals("J. von Neumann, J. Smith, and P. Black Brown", AuthorList
-				.fixAuthor_firstNameFirstCommas(
-					"John von Neumann and John Smith and Black Brown, Peter", true, true));
-
-			assertEquals("J. P. von Neumann", AuthorList.fixAuthor_firstNameFirstCommas(
-				"John Peter von Neumann", true, true));
-
-		}
-	}
-
-	public void testFixAuthor_firstNameFirst() {
-		assertEquals("John Smith", AuthorList.fixAuthor_firstNameFirst("John Smith"));
-
-		assertEquals("John Smith and Peter Black Brown", AuthorList
-			.fixAuthor_firstNameFirst("John Smith and Black Brown, Peter"));
-
-		assertEquals("John von Neumann and John Smith and Peter Black Brown", AuthorList
-			.fixAuthor_firstNameFirst("John von Neumann and John Smith and Black Brown, Peter"));
-
-		assertEquals("First von Last, Jr. III", AuthorList
-			.fixAuthor_firstNameFirst("von Last, Jr. III, First"));
-
-		// Check caching
-		assertTrue(AuthorList
-			.fixAuthor_firstNameFirst("John von Neumann and John Smith and Black Brown, Peter") == AuthorList
-			.fixAuthor_firstNameFirst("John von Neumann" + (0 == 1 ? "" : " and ")
-				+ "John Smith and Black Brown, Peter"));
-
-	}
-
-	public void testFixAuthor_lastNameFirstCommas() {
-
-		{ // No commas before and
-			assertEquals("", AuthorList.fixAuthor_lastNameFirstCommas("", true, false));
-			assertEquals("", AuthorList.fixAuthor_lastNameFirstCommas("", false, false));
-
-			assertEquals("Smith, John", AuthorList.fixAuthor_lastNameFirstCommas("John Smith",
-				false, false));
-			assertEquals("Smith, J.", AuthorList.fixAuthor_lastNameFirstCommas("John Smith", true,
-				false));
-
-			String a = AuthorList.fixAuthor_lastNameFirstCommas(
-				"John von Neumann and John Smith and Black Brown, Peter", true, false);
-			String b = AuthorList.fixAuthor_lastNameFirstCommas("John von Neumann"
-				+ (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter", true, false);
-
-			// Check caching
-			assertEquals(a, b);
-			assertTrue(a == b);
-
-			assertEquals("Smith, John and Black Brown, Peter", AuthorList
-				.fixAuthor_lastNameFirstCommas("John Smith and Black Brown, Peter", false, false));
-			assertEquals("Smith, J. and Black Brown, P.", AuthorList.fixAuthor_lastNameFirstCommas(
-				"John Smith and Black Brown, Peter", true, false));
-
-			assertEquals("von Neumann, John, Smith, John and Black Brown, Peter", AuthorList
-				.fixAuthor_lastNameFirstCommas(
-					"John von Neumann and John Smith and Black Brown, Peter", false, false));
-			assertEquals("von Neumann, J., Smith, J. and Black Brown, P.", AuthorList
-				.fixAuthor_lastNameFirstCommas(
-					"John von Neumann and John Smith and Black Brown, Peter", true, false));
-
-			assertEquals("von Neumann, J. P.", AuthorList.fixAuthor_lastNameFirstCommas(
-				"John Peter von Neumann", true, false));
-		}
-		{ // Oxford Commas
-			assertEquals("", AuthorList.fixAuthor_lastNameFirstCommas("", true, true));
-			assertEquals("", AuthorList.fixAuthor_lastNameFirstCommas("", false, true));
-
-			assertEquals("Smith, John", AuthorList.fixAuthor_lastNameFirstCommas("John Smith",
-				false, true));
-			assertEquals("Smith, J.", AuthorList.fixAuthor_lastNameFirstCommas("John Smith", true,
-				true));
-
-			String a = AuthorList.fixAuthor_lastNameFirstCommas(
-				"John von Neumann and John Smith and Black Brown, Peter", true, true);
-			String b = AuthorList.fixAuthor_lastNameFirstCommas("John von Neumann"
-				+ (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter", true, true);
-
-			// Check caching
-			assertEquals(a, b);
-			assertTrue(a == b);
-
-			assertEquals("Smith, John and Black Brown, Peter", AuthorList
-				.fixAuthor_lastNameFirstCommas("John Smith and Black Brown, Peter", false, true));
-			assertEquals("Smith, J. and Black Brown, P.", AuthorList.fixAuthor_lastNameFirstCommas(
-				"John Smith and Black Brown, Peter", true, true));
-
-			assertEquals("von Neumann, John, Smith, John, and Black Brown, Peter", AuthorList
-				.fixAuthor_lastNameFirstCommas(
-					"John von Neumann and John Smith and Black Brown, Peter", false, true));
-			assertEquals("von Neumann, J., Smith, J., and Black Brown, P.", AuthorList
-				.fixAuthor_lastNameFirstCommas(
-					"John von Neumann and John Smith and Black Brown, Peter", true, true));
-
-			assertEquals("von Neumann, J. P.", AuthorList.fixAuthor_lastNameFirstCommas(
-				"John Peter von Neumann", true, true));
-		}
-	}
-
-	public void testFixAuthor_lastNameFirst() {
-
-		// Test helper method
-
-		assertEquals("Smith, John", AuthorList.fixAuthor_lastNameFirst("John Smith"));
-
-		assertEquals("Smith, John and Black Brown, Peter", AuthorList
-			.fixAuthor_lastNameFirst("John Smith and Black Brown, Peter"));
-
-		assertEquals("von Neumann, John and Smith, John and Black Brown, Peter", AuthorList
-			.fixAuthor_lastNameFirst("John von Neumann and John Smith and Black Brown, Peter"));
-
-		assertEquals("von Last, Jr, First", AuthorList
-			.fixAuthor_lastNameFirst("von Last, Jr ,First"));
-
-		assertTrue(AuthorList
-			.fixAuthor_lastNameFirst("John von Neumann and John Smith and Black Brown, Peter") == AuthorList
-			.fixAuthor_lastNameFirst("John von Neumann" + (0 == 1 ? "" : " and ")
-				+ "John Smith and Black Brown, Peter"));
-
-		// Test Abbreviation == false
-		assertEquals("Smith, John", AuthorList.fixAuthor_lastNameFirst("John Smith", false));
-
-		assertEquals("Smith, John and Black Brown, Peter", AuthorList.fixAuthor_lastNameFirst(
-			"John Smith and Black Brown, Peter", false));
-
-		assertEquals("von Neumann, John and Smith, John and Black Brown, Peter", AuthorList
-			.fixAuthor_lastNameFirst("John von Neumann and John Smith and Black Brown, Peter",
-				false));
-
-		assertEquals("von Last, Jr, First", AuthorList.fixAuthor_lastNameFirst(
-			"von Last, Jr ,First", false));
-
-		assertTrue(AuthorList.fixAuthor_lastNameFirst(
-			"John von Neumann and John Smith and Black Brown, Peter", false) == AuthorList
-			.fixAuthor_lastNameFirst("John von Neumann" + (0 == 1 ? "" : " and ")
-				+ "John Smith and Black Brown, Peter", false));
-
-		// Test Abbreviate == true
-		assertEquals("Smith, J.", AuthorList.fixAuthor_lastNameFirst("John Smith", true));
-
-		assertEquals("Smith, J. and Black Brown, P.", AuthorList.fixAuthor_lastNameFirst(
-			"John Smith and Black Brown, Peter", true));
-
-		assertEquals("von Neumann, J. and Smith, J. and Black Brown, P.",
-			AuthorList.fixAuthor_lastNameFirst(
-				"John von Neumann and John Smith and Black Brown, Peter", true));
-
-		assertEquals("von Last, Jr, F.", AuthorList.fixAuthor_lastNameFirst("von Last, Jr ,First",
-			true));
-
-		assertTrue(AuthorList.fixAuthor_lastNameFirst(
-			"John von Neumann and John Smith and Black Brown, Peter", true) == AuthorList
-			.fixAuthor_lastNameFirst("John von Neumann" + (0 == 1 ? "" : " and ")
-				+ "John Smith and Black Brown, Peter", true));
-
-	}
-
-	public void testFixAuthor_lastNameOnlyCommas() {
-
-		{ // No comma before and
-			assertEquals("", AuthorList.fixAuthor_lastNameOnlyCommas("", false));
-			assertEquals("Smith", AuthorList.fixAuthor_lastNameOnlyCommas("John Smith", false));
-			assertEquals("Smith", AuthorList.fixAuthor_lastNameOnlyCommas("Smith, Jr, John", false));
-
-			assertTrue(AuthorList.fixAuthor_lastNameOnlyCommas(
-				"John von Neumann and John Smith and Black Brown, Peter", false) == AuthorList
-				.fixAuthor_lastNameOnlyCommas("John von Neumann" + (0 == 1 ? "" : " and ")
-					+ "John Smith and Black Brown, Peter", false));
-
-			assertEquals("von Neumann, Smith and Black Brown", AuthorList
-				.fixAuthor_lastNameOnlyCommas(
-					"John von Neumann and John Smith and Black Brown, Peter", false));
-		}
-		{ // Oxford Comma
-			assertEquals("", AuthorList.fixAuthor_lastNameOnlyCommas("", true));
-			assertEquals("Smith", AuthorList.fixAuthor_lastNameOnlyCommas("John Smith", true));
-			assertEquals("Smith", AuthorList.fixAuthor_lastNameOnlyCommas("Smith, Jr, John", true));
-
-			assertTrue(AuthorList.fixAuthor_lastNameOnlyCommas(
-				"John von Neumann and John Smith and Black Brown, Peter", true) == AuthorList
-				.fixAuthor_lastNameOnlyCommas("John von Neumann" + (0 == 1 ? "" : " and ")
-					+ "John Smith and Black Brown, Peter", true));
-
-			assertEquals("von Neumann, Smith, and Black Brown", AuthorList
-				.fixAuthor_lastNameOnlyCommas(
-					"John von Neumann and John Smith and Black Brown, Peter", true));
-		}
-	}
-
-	public void testFixAuthorForAlphabetization() {
-		assertEquals("Smith, J.", AuthorList.fixAuthorForAlphabetization("John Smith"));
-		assertEquals("Neumann, J.", AuthorList.fixAuthorForAlphabetization("John von Neumann"));
-		assertEquals("Neumann, J.", AuthorList.fixAuthorForAlphabetization("J. von Neumann"));
-		assertEquals(
-			"Neumann, J. and Smith, J. and Black Brown, Jr., P.",
-			AuthorList
-				.fixAuthorForAlphabetization("John von Neumann and John Smith and de Black Brown, Jr., Peter"));
-	}
-
-	public static int size(String bibtex) {
-		return (AuthorList.getAuthorList(bibtex)).size();
-	}
-
-	public void testSize() {
-
-		assertEquals(0, size(""));
-		assertEquals(1, size("Bar"));
-		assertEquals(1, size("Foo Bar"));
-		assertEquals(1, size("Foo von Bar"));
-		assertEquals(1, size("von Bar, Foo"));
-		assertEquals(1, size("Bar, Foo"));
-		assertEquals(1, size("Bar, Jr., Foo"));
-		assertEquals(1, size("Bar, Foo"));
-		assertEquals(2, size("John Neumann and Foo Bar"));
-		assertEquals(2, size("John von Neumann and Bar, Jr, Foo"));
-
-		assertEquals(3, size("John von Neumann and John Smith and Black Brown, Peter"));
-
-		String s = "John von Neumann";
-		for (int i = 0; i < 25; i++) {
-			assertEquals(i + 1, size(s));
-			s += " and Albert Einstein";
-		}
-	}
-
-	public void testGetAuthor() {
-
-		try {
-			AuthorList.getAuthorList("").getAuthor(0);
-			fail();
-		} catch (Exception e) {
-		}
-
-		AuthorList.Author author = AuthorList.getAuthorList("John Smith and von Neumann, Jr, John")
-			.getAuthor(0);
-		assertEquals("John", author.getFirst());
-		assertEquals("J.", author.getFirstAbbr());
-		assertEquals("John Smith", author.getFirstLast(false));
-		assertEquals("J. Smith", author.getFirstLast(true));
-		assertEquals(null, author.getJr());
-		assertEquals("Smith", author.getLast());
-		assertEquals("Smith, John", author.getLastFirst(false));
-		assertEquals("Smith, J.", author.getLastFirst(true));
-		assertEquals("Smith", author.getLastOnly());
-		assertEquals("Smith, J.", author.getNameForAlphabetization());
-		assertEquals(null, author.getVon());
-
-		author = AuthorList.getAuthorList("Peter Black Brown").getAuthor(0);
-		assertEquals("Peter Black", author.getFirst());
-		assertEquals("P. B.", author.getFirstAbbr());
-		assertEquals("Peter Black Brown", author.getFirstLast(false));
-		assertEquals("P. B. Brown", author.getFirstLast(true));
-		assertEquals(null, author.getJr());
-		assertEquals(null, author.getVon());
-
-		author = AuthorList.getAuthorList("John Smith and von Neumann, Jr, John").getAuthor(1);
-		assertEquals("John", author.getFirst());
-		assertEquals("J.", author.getFirstAbbr());
-		assertEquals("John von Neumann, Jr", author.getFirstLast(false));
-		assertEquals("J. von Neumann, Jr", author.getFirstLast(true));
-		assertEquals("Jr", author.getJr());
-		assertEquals("Neumann", author.getLast());
-		assertEquals("von Neumann, Jr, John", author.getLastFirst(false));
-		assertEquals("von Neumann, Jr, J.", author.getLastFirst(true));
-		assertEquals("von Neumann", author.getLastOnly());
-		assertEquals("Neumann, Jr, J.", author.getNameForAlphabetization());
-		assertEquals("von", author.getVon());
-	}
-
-	public void testGetAuthorsNatbib() {
-		assertEquals("", AuthorList.getAuthorList("").getAuthorsNatbib());
-		assertEquals("Smith", AuthorList.getAuthorList("John Smith").getAuthorsNatbib());
-		assertEquals("Smith and Black Brown", AuthorList.getAuthorList(
-			"John Smith and Black Brown, Peter").getAuthorsNatbib());
-		assertEquals("von Neumann et al.", AuthorList.getAuthorList(
-			"John von Neumann and John Smith and Black Brown, Peter").getAuthorsNatbib());
-		
-		/*
-		 * [ 1465610 ] (Double-)Names containing hyphen (-) not handled correctly
-		 */
-		assertEquals("Last-Name et al.", AuthorList.getAuthorList(
-			"First Second Last-Name" + " and John Smith and Black Brown, Peter").getAuthorsNatbib());
-
-		// Test caching
-		AuthorList al = AuthorList
-			.getAuthorList("John von Neumann and John Smith and Black Brown, Peter");
-		assertTrue(al.getAuthorsNatbib() == al.getAuthorsNatbib());
-	}
-
-	public void testGetAuthorsLastOnly() {
-
-		{ // No comma before and
-			assertEquals("", AuthorList.getAuthorList("").getAuthorsLastOnly(false));
-			assertEquals("Smith", AuthorList.getAuthorList("John Smith").getAuthorsLastOnly(false));
-			assertEquals("Smith", AuthorList.getAuthorList("Smith, Jr, John").getAuthorsLastOnly(
-				false));
-
-			assertEquals("von Neumann, Smith and Black Brown", AuthorList.getAuthorList(
-				"John von Neumann and John Smith and Black Brown, Peter").getAuthorsLastOnly(false));
-		}
-		{ // Oxford comma
-			assertEquals("", AuthorList.getAuthorList("").getAuthorsLastOnly(true));
-			assertEquals("Smith", AuthorList.getAuthorList("John Smith").getAuthorsLastOnly(true));
-			assertEquals("Smith", AuthorList.getAuthorList("Smith, Jr, John").getAuthorsLastOnly(
-				true));
-
-			assertEquals("von Neumann, Smith, and Black Brown", AuthorList.getAuthorList(
-				"John von Neumann and John Smith and Black Brown, Peter").getAuthorsLastOnly(true));
-		}
-	}
-
-	public void testGetAuthorsLastFirst() {
-		{ // No commas before and
-			AuthorList al;
-
-			al = AuthorList.getAuthorList("");
-			assertEquals("", al.getAuthorsLastFirst(true, false));
-			assertEquals("", al.getAuthorsLastFirst(false, false));
-
-			al = AuthorList.getAuthorList("John Smith");
-			assertEquals("Smith, John", al.getAuthorsLastFirst(false, false));
-			assertEquals("Smith, J.", al.getAuthorsLastFirst(true, false));
-
-			al = AuthorList.getAuthorList("John Smith and Black Brown, Peter");
-			assertEquals("Smith, John and Black Brown, Peter", al.getAuthorsLastFirst(false, false));
-			assertEquals("Smith, J. and Black Brown, P.", al.getAuthorsLastFirst(true, false));
-
-			al = AuthorList.getAuthorList("John von Neumann and John Smith and Black Brown, Peter");
-			// Method description is different than code -> additional comma
-			// there
-			assertEquals("von Neumann, John, Smith, John and Black Brown, Peter", al
-				.getAuthorsLastFirst(false, false));
-			assertEquals("von Neumann, J., Smith, J. and Black Brown, P.", al.getAuthorsLastFirst(
-				true, false));
-
-			al = AuthorList.getAuthorList("John Peter von Neumann");
-			assertEquals("von Neumann, J. P.", al.getAuthorsLastFirst(true, false));
-		}
-		{ // Oxford comma
-			AuthorList al;
-
-			al = AuthorList.getAuthorList("");
-			assertEquals("", al.getAuthorsLastFirst(true, true));
-			assertEquals("", al.getAuthorsLastFirst(false, true));
-
-			al = AuthorList.getAuthorList("John Smith");
-			assertEquals("Smith, John", al.getAuthorsLastFirst(false, true));
-			assertEquals("Smith, J.", al.getAuthorsLastFirst(true, true));
-
-			al = AuthorList.getAuthorList("John Smith and Black Brown, Peter");
-			assertEquals("Smith, John and Black Brown, Peter", al.getAuthorsLastFirst(false, true));
-			assertEquals("Smith, J. and Black Brown, P.", al.getAuthorsLastFirst(true, true));
-
-			al = AuthorList.getAuthorList("John von Neumann and John Smith and Black Brown, Peter");
-			assertEquals("von Neumann, John, Smith, John, and Black Brown, Peter", al
-				.getAuthorsLastFirst(false, true));
-			assertEquals("von Neumann, J., Smith, J., and Black Brown, P.", al.getAuthorsLastFirst(
-				true, true));
-
-			al = AuthorList.getAuthorList("John Peter von Neumann");
-			assertEquals("von Neumann, J. P.", al.getAuthorsLastFirst(true, true));
-		}
-	}
-
-	public void testGetAuthorsLastFirstAnds() {
-		assertEquals("Smith, John", AuthorList.getAuthorList("John Smith").getAuthorsLastFirstAnds(
-			false));
-		assertEquals("Smith, John and Black Brown, Peter", AuthorList.getAuthorList(
-			"John Smith and Black Brown, Peter").getAuthorsLastFirstAnds(false));
-		assertEquals("von Neumann, John and Smith, John and Black Brown, Peter", AuthorList
-			.getAuthorList("John von Neumann and John Smith and Black Brown, Peter")
-			.getAuthorsLastFirstAnds(false));
-		assertEquals("von Last, Jr, First", AuthorList.getAuthorList("von Last, Jr ,First")
-			.getAuthorsLastFirstAnds(false));
-
-		assertEquals("Smith, J.", AuthorList.getAuthorList("John Smith").getAuthorsLastFirstAnds(
-			true));
-		assertEquals("Smith, J. and Black Brown, P.", AuthorList.getAuthorList(
-			"John Smith and Black Brown, Peter").getAuthorsLastFirstAnds(true));
-		assertEquals("von Neumann, J. and Smith, J. and Black Brown, P.", AuthorList.getAuthorList(
-			"John von Neumann and John Smith and Black Brown, Peter").getAuthorsLastFirstAnds(true));
-		assertEquals("von Last, Jr, F.", AuthorList.getAuthorList("von Last, Jr ,First")
-			.getAuthorsLastFirstAnds(true));
-
-	}
-
-	public void testGetAuthorsFirstFirst() {
-
-		AuthorList al;
-
-		al = AuthorList.getAuthorList("");
-		assertEquals("", al.getAuthorsFirstFirst(true, false));
-		assertEquals("", al.getAuthorsFirstFirst(false, false));
-		assertEquals("", al.getAuthorsFirstFirst(true, true));
-		assertEquals("", al.getAuthorsFirstFirst(false, true));
-
-		al = AuthorList.getAuthorList("John Smith");
-		assertEquals("John Smith", al.getAuthorsFirstFirst(false, false));
-		assertEquals("J. Smith", al.getAuthorsFirstFirst(true, false));
-		assertEquals("John Smith", al.getAuthorsFirstFirst(false, true));
-		assertEquals("J. Smith", al.getAuthorsFirstFirst(true, true));
-
-		al = AuthorList.getAuthorList("John Smith and Black Brown, Peter");
-		assertEquals("John Smith and Peter Black Brown", al.getAuthorsFirstFirst(false, false));
-		assertEquals("J. Smith and P. Black Brown", al.getAuthorsFirstFirst(true, false));
-		assertEquals("John Smith and Peter Black Brown", al.getAuthorsFirstFirst(false, true));
-		assertEquals("J. Smith and P. Black Brown", al.getAuthorsFirstFirst(true, true));
-
-		al = AuthorList.getAuthorList("John von Neumann and John Smith and Black Brown, Peter");
-		assertEquals("John von Neumann, John Smith and Peter Black Brown", al.getAuthorsFirstFirst(
-			false, false));
-		assertEquals("J. von Neumann, J. Smith and P. Black Brown", al.getAuthorsFirstFirst(true,
-			false));
-		assertEquals("John von Neumann, John Smith, and Peter Black Brown", al
-			.getAuthorsFirstFirst(false, true));
-		assertEquals("J. von Neumann, J. Smith, and P. Black Brown", al.getAuthorsFirstFirst(true,
-			true));
-
-		al = AuthorList.getAuthorList("John Peter von Neumann");
-		assertEquals("John Peter von Neumann", al.getAuthorsFirstFirst(false, false));
-		assertEquals("John Peter von Neumann", al.getAuthorsFirstFirst(false, true));
-		assertEquals("J. P. von Neumann", al.getAuthorsFirstFirst(true, false));
-		assertEquals("J. P. von Neumann", al.getAuthorsFirstFirst(true, true));
-	}
-
-	public void testGetAuthorsFirstFirstAnds() {
-		assertEquals("John Smith", AuthorList.getAuthorList("John Smith")
-			.getAuthorsFirstFirstAnds());
-		assertEquals("John Smith and Peter Black Brown", AuthorList.getAuthorList(
-			"John Smith and Black Brown, Peter").getAuthorsFirstFirstAnds());
-		assertEquals("John von Neumann and John Smith and Peter Black Brown", AuthorList
-			.getAuthorList("John von Neumann and John Smith and Black Brown, Peter")
-			.getAuthorsFirstFirstAnds());
-		assertEquals("First von Last, Jr. III", AuthorList
-			.getAuthorList("von Last, Jr. III, First").getAuthorsFirstFirstAnds());
-	}
-
-	public void testGetAuthorsForAlphabetization() {
-		assertEquals("Smith, J.", AuthorList.getAuthorList("John Smith")
-			.getAuthorsForAlphabetization());
-		assertEquals("Neumann, J.", AuthorList.getAuthorList("John von Neumann")
-			.getAuthorsForAlphabetization());
-		assertEquals("Neumann, J.", AuthorList.getAuthorList("J. von Neumann")
-			.getAuthorsForAlphabetization());
-		assertEquals("Neumann, J. and Smith, J. and Black Brown, Jr., P.", AuthorList
-			.getAuthorList("John von Neumann and John Smith and de Black Brown, Jr., Peter")
-			.getAuthorsForAlphabetization());
-	}
-	
-	public void testRemoveStartAndEndBraces() {
-		assertEquals("{A}bbb{c}", AuthorList.getAuthorList("{A}bbb{c}").getAuthorsLastOnly(false));
-		assertEquals("Vall{\\'e}e Poussin", AuthorList.getAuthorList("{Vall{\\'e}e Poussin}").getAuthorsLastOnly(false));
-		assertEquals("Poussin", AuthorList.getAuthorList("{Vall{\\'e}e} {Poussin}").getAuthorsLastOnly(false));
-		assertEquals("Poussin", AuthorList.getAuthorList("Vall{\\'e}e Poussin").getAuthorsLastOnly(false));
-		assertEquals("Lastname", AuthorList.getAuthorList("Firstname {Lastname}").getAuthorsLastOnly(false));
-		assertEquals("Firstname Lastname", AuthorList.getAuthorList("{Firstname Lastname}").getAuthorsLastOnly(false));
-	}
-
-}
+package tests.net.sf.jabref;
+
+import junit.framework.TestCase;
+import net.sf.jabref.AuthorList;
+
+/**
+ * 
+ * @see net.sf.jabref.AuthorList Class tested.
+ * 
+ * @author Christopher Oezbek <oezi at oezi.de>
+ * 
+ * @version 0.1 - Still fails for stuff in AuthorList that is ambiguous
+ */
+public class AuthorListTest extends TestCase {
+
+	public void testFixAuthor_Natbib() {
+		assertEquals("", AuthorList.fixAuthor_Natbib(""));
+		assertEquals("Smith", AuthorList.fixAuthor_Natbib("John Smith"));
+		assertEquals("Smith and Black Brown", AuthorList
+			.fixAuthor_Natbib("John Smith and Black Brown, Peter"));
+		assertEquals("von Neumann et al.", AuthorList
+			.fixAuthor_Natbib("John von Neumann and John Smith and Black Brown, Peter"));
+
+		// Is not cached!
+		assertTrue(AuthorList
+			.fixAuthor_Natbib("John von Neumann and John Smith and Black Brown, Peter") == AuthorList
+			.fixAuthor_Natbib("John von Neumann" + (0 == 1 ? "" : " and ")
+				+ "John Smith and Black Brown, Peter"));
+	}
+
+	public void testGetAuthorList() {
+		// Test caching in authorCache.
+		AuthorList al = AuthorList.getAuthorList("John Smith");
+		assertTrue(al == AuthorList.getAuthorList("John Smith"));
+		assertFalse(al == AuthorList.getAuthorList("Smith"));
+	}
+
+	public void testFixAuthor_firstNameFirstCommas() {
+
+		{ // No Commas
+			assertEquals("", AuthorList.fixAuthor_firstNameFirstCommas("", true, false));
+			assertEquals("", AuthorList.fixAuthor_firstNameFirstCommas("", false, false));
+
+			assertEquals("John Smith", AuthorList.fixAuthor_firstNameFirstCommas("John Smith",
+				false, false));
+			assertEquals("J. Smith", AuthorList.fixAuthor_firstNameFirstCommas("John Smith", true,
+				false));
+
+			// Check caching
+			assertTrue(AuthorList.fixAuthor_firstNameFirstCommas(
+				"John von Neumann and John Smith and Black Brown, Peter", true, false) == AuthorList
+				.fixAuthor_firstNameFirstCommas("John von Neumann" + (0 == 1 ? "" : " and ")
+					+ "John Smith and Black Brown, Peter", true, false));
+
+			assertEquals("John Smith and Peter Black Brown", AuthorList
+				.fixAuthor_firstNameFirstCommas("John Smith and Black Brown, Peter", false, false));
+			assertEquals("J. Smith and P. Black Brown", AuthorList.fixAuthor_firstNameFirstCommas(
+				"John Smith and Black Brown, Peter", true, false));
+
+			// Method description is different than code -> additional comma
+			// there
+			assertEquals("John von Neumann, John Smith and Peter Black Brown", AuthorList
+				.fixAuthor_firstNameFirstCommas(
+					"John von Neumann and John Smith and Black Brown, Peter", false, false));
+			assertEquals("J. von Neumann, J. Smith and P. Black Brown", AuthorList
+				.fixAuthor_firstNameFirstCommas(
+					"John von Neumann and John Smith and Black Brown, Peter", true, false));
+
+			assertEquals("J. P. von Neumann", AuthorList.fixAuthor_firstNameFirstCommas(
+				"John Peter von Neumann", true, false));
+		}
+		{ // Oxford Commas
+			assertEquals("", AuthorList.fixAuthor_firstNameFirstCommas("", true, true));
+			assertEquals("", AuthorList.fixAuthor_firstNameFirstCommas("", false, true));
+
+			assertEquals("John Smith", AuthorList.fixAuthor_firstNameFirstCommas("John Smith",
+				false, true));
+			assertEquals("J. Smith", AuthorList.fixAuthor_firstNameFirstCommas("John Smith", true,
+				true));
+
+			// Check caching
+			assertTrue(AuthorList.fixAuthor_firstNameFirstCommas(
+				"John von Neumann and John Smith and Black Brown, Peter", true, true) == AuthorList
+				.fixAuthor_firstNameFirstCommas("John von Neumann" + (0 == 1 ? "" : " and ")
+					+ "John Smith and Black Brown, Peter", true, true));
+
+			assertEquals("John Smith and Peter Black Brown", AuthorList
+				.fixAuthor_firstNameFirstCommas("John Smith and Black Brown, Peter", false, true));
+			assertEquals("J. Smith and P. Black Brown", AuthorList.fixAuthor_firstNameFirstCommas(
+				"John Smith and Black Brown, Peter", true, true));
+
+			// Method description is different than code -> additional comma
+			// there
+			assertEquals("John von Neumann, John Smith, and Peter Black Brown", AuthorList
+				.fixAuthor_firstNameFirstCommas(
+					"John von Neumann and John Smith and Black Brown, Peter", false, true));
+			assertEquals("J. von Neumann, J. Smith, and P. Black Brown", AuthorList
+				.fixAuthor_firstNameFirstCommas(
+					"John von Neumann and John Smith and Black Brown, Peter", true, true));
+
+			assertEquals("J. P. von Neumann", AuthorList.fixAuthor_firstNameFirstCommas(
+				"John Peter von Neumann", true, true));
+
+		}
+	}
+
+	public void testFixAuthor_firstNameFirst() {
+		assertEquals("John Smith", AuthorList.fixAuthor_firstNameFirst("John Smith"));
+
+		assertEquals("John Smith and Peter Black Brown", AuthorList
+			.fixAuthor_firstNameFirst("John Smith and Black Brown, Peter"));
+
+		assertEquals("John von Neumann and John Smith and Peter Black Brown", AuthorList
+			.fixAuthor_firstNameFirst("John von Neumann and John Smith and Black Brown, Peter"));
+
+		assertEquals("First von Last, Jr. III", AuthorList
+			.fixAuthor_firstNameFirst("von Last, Jr. III, First"));
+
+		// Check caching
+		assertTrue(AuthorList
+			.fixAuthor_firstNameFirst("John von Neumann and John Smith and Black Brown, Peter") == AuthorList
+			.fixAuthor_firstNameFirst("John von Neumann" + (0 == 1 ? "" : " and ")
+				+ "John Smith and Black Brown, Peter"));
+
+	}
+
+	public void testFixAuthor_lastNameFirstCommas() {
+
+		{ // No commas before and
+			assertEquals("", AuthorList.fixAuthor_lastNameFirstCommas("", true, false));
+			assertEquals("", AuthorList.fixAuthor_lastNameFirstCommas("", false, false));
+
+			assertEquals("Smith, John", AuthorList.fixAuthor_lastNameFirstCommas("John Smith",
+				false, false));
+			assertEquals("Smith, J.", AuthorList.fixAuthor_lastNameFirstCommas("John Smith", true,
+				false));
+
+			String a = AuthorList.fixAuthor_lastNameFirstCommas(
+				"John von Neumann and John Smith and Black Brown, Peter", true, false);
+			String b = AuthorList.fixAuthor_lastNameFirstCommas("John von Neumann"
+				+ (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter", true, false);
+
+			// Check caching
+			assertEquals(a, b);
+			assertTrue(a == b);
+
+			assertEquals("Smith, John and Black Brown, Peter", AuthorList
+				.fixAuthor_lastNameFirstCommas("John Smith and Black Brown, Peter", false, false));
+			assertEquals("Smith, J. and Black Brown, P.", AuthorList.fixAuthor_lastNameFirstCommas(
+				"John Smith and Black Brown, Peter", true, false));
+
+			assertEquals("von Neumann, John, Smith, John and Black Brown, Peter", AuthorList
+				.fixAuthor_lastNameFirstCommas(
+					"John von Neumann and John Smith and Black Brown, Peter", false, false));
+			assertEquals("von Neumann, J., Smith, J. and Black Brown, P.", AuthorList
+				.fixAuthor_lastNameFirstCommas(
+					"John von Neumann and John Smith and Black Brown, Peter", true, false));
+
+			assertEquals("von Neumann, J. P.", AuthorList.fixAuthor_lastNameFirstCommas(
+				"John Peter von Neumann", true, false));
+		}
+		{ // Oxford Commas
+			assertEquals("", AuthorList.fixAuthor_lastNameFirstCommas("", true, true));
+			assertEquals("", AuthorList.fixAuthor_lastNameFirstCommas("", false, true));
+
+			assertEquals("Smith, John", AuthorList.fixAuthor_lastNameFirstCommas("John Smith",
+				false, true));
+			assertEquals("Smith, J.", AuthorList.fixAuthor_lastNameFirstCommas("John Smith", true,
+				true));
+
+			String a = AuthorList.fixAuthor_lastNameFirstCommas(
+				"John von Neumann and John Smith and Black Brown, Peter", true, true);
+			String b = AuthorList.fixAuthor_lastNameFirstCommas("John von Neumann"
+				+ (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter", true, true);
+
+			// Check caching
+			assertEquals(a, b);
+			assertTrue(a == b);
+
+			assertEquals("Smith, John and Black Brown, Peter", AuthorList
+				.fixAuthor_lastNameFirstCommas("John Smith and Black Brown, Peter", false, true));
+			assertEquals("Smith, J. and Black Brown, P.", AuthorList.fixAuthor_lastNameFirstCommas(
+				"John Smith and Black Brown, Peter", true, true));
+
+			assertEquals("von Neumann, John, Smith, John, and Black Brown, Peter", AuthorList
+				.fixAuthor_lastNameFirstCommas(
+					"John von Neumann and John Smith and Black Brown, Peter", false, true));
+			assertEquals("von Neumann, J., Smith, J., and Black Brown, P.", AuthorList
+				.fixAuthor_lastNameFirstCommas(
+					"John von Neumann and John Smith and Black Brown, Peter", true, true));
+
+			assertEquals("von Neumann, J. P.", AuthorList.fixAuthor_lastNameFirstCommas(
+				"John Peter von Neumann", true, true));
+		}
+	}
+
+	public void testFixAuthor_lastNameFirst() {
+
+		// Test helper method
+
+		assertEquals("Smith, John", AuthorList.fixAuthor_lastNameFirst("John Smith"));
+
+		assertEquals("Smith, John and Black Brown, Peter", AuthorList
+			.fixAuthor_lastNameFirst("John Smith and Black Brown, Peter"));
+
+		assertEquals("von Neumann, John and Smith, John and Black Brown, Peter", AuthorList
+			.fixAuthor_lastNameFirst("John von Neumann and John Smith and Black Brown, Peter"));
+
+		assertEquals("von Last, Jr, First", AuthorList
+			.fixAuthor_lastNameFirst("von Last, Jr ,First"));
+
+		assertTrue(AuthorList
+			.fixAuthor_lastNameFirst("John von Neumann and John Smith and Black Brown, Peter") == AuthorList
+			.fixAuthor_lastNameFirst("John von Neumann" + (0 == 1 ? "" : " and ")
+				+ "John Smith and Black Brown, Peter"));
+
+		// Test Abbreviation == false
+		assertEquals("Smith, John", AuthorList.fixAuthor_lastNameFirst("John Smith", false));
+
+		assertEquals("Smith, John and Black Brown, Peter", AuthorList.fixAuthor_lastNameFirst(
+			"John Smith and Black Brown, Peter", false));
+
+		assertEquals("von Neumann, John and Smith, John and Black Brown, Peter", AuthorList
+			.fixAuthor_lastNameFirst("John von Neumann and John Smith and Black Brown, Peter",
+				false));
+
+		assertEquals("von Last, Jr, First", AuthorList.fixAuthor_lastNameFirst(
+			"von Last, Jr ,First", false));
+
+		assertTrue(AuthorList.fixAuthor_lastNameFirst(
+			"John von Neumann and John Smith and Black Brown, Peter", false) == AuthorList
+			.fixAuthor_lastNameFirst("John von Neumann" + (0 == 1 ? "" : " and ")
+				+ "John Smith and Black Brown, Peter", false));
+
+		// Test Abbreviate == true
+		assertEquals("Smith, J.", AuthorList.fixAuthor_lastNameFirst("John Smith", true));
+
+		assertEquals("Smith, J. and Black Brown, P.", AuthorList.fixAuthor_lastNameFirst(
+			"John Smith and Black Brown, Peter", true));
+
+		assertEquals("von Neumann, J. and Smith, J. and Black Brown, P.",
+			AuthorList.fixAuthor_lastNameFirst(
+				"John von Neumann and John Smith and Black Brown, Peter", true));
+
+		assertEquals("von Last, Jr, F.", AuthorList.fixAuthor_lastNameFirst("von Last, Jr ,First",
+			true));
+
+		assertTrue(AuthorList.fixAuthor_lastNameFirst(
+			"John von Neumann and John Smith and Black Brown, Peter", true) == AuthorList
+			.fixAuthor_lastNameFirst("John von Neumann" + (0 == 1 ? "" : " and ")
+				+ "John Smith and Black Brown, Peter", true));
+
+	}
+
+	public void testFixAuthor_lastNameOnlyCommas() {
+
+		{ // No comma before and
+			assertEquals("", AuthorList.fixAuthor_lastNameOnlyCommas("", false));
+			assertEquals("Smith", AuthorList.fixAuthor_lastNameOnlyCommas("John Smith", false));
+			assertEquals("Smith", AuthorList.fixAuthor_lastNameOnlyCommas("Smith, Jr, John", false));
+
+			assertTrue(AuthorList.fixAuthor_lastNameOnlyCommas(
+				"John von Neumann and John Smith and Black Brown, Peter", false) == AuthorList
+				.fixAuthor_lastNameOnlyCommas("John von Neumann" + (0 == 1 ? "" : " and ")
+					+ "John Smith and Black Brown, Peter", false));
+
+			assertEquals("von Neumann, Smith and Black Brown", AuthorList
+				.fixAuthor_lastNameOnlyCommas(
+					"John von Neumann and John Smith and Black Brown, Peter", false));
+		}
+		{ // Oxford Comma
+			assertEquals("", AuthorList.fixAuthor_lastNameOnlyCommas("", true));
+			assertEquals("Smith", AuthorList.fixAuthor_lastNameOnlyCommas("John Smith", true));
+			assertEquals("Smith", AuthorList.fixAuthor_lastNameOnlyCommas("Smith, Jr, John", true));
+
+			assertTrue(AuthorList.fixAuthor_lastNameOnlyCommas(
+				"John von Neumann and John Smith and Black Brown, Peter", true) == AuthorList
+				.fixAuthor_lastNameOnlyCommas("John von Neumann" + (0 == 1 ? "" : " and ")
+					+ "John Smith and Black Brown, Peter", true));
+
+			assertEquals("von Neumann, Smith, and Black Brown", AuthorList
+				.fixAuthor_lastNameOnlyCommas(
+					"John von Neumann and John Smith and Black Brown, Peter", true));
+		}
+	}
+
+	public void testFixAuthorForAlphabetization() {
+		assertEquals("Smith, J.", AuthorList.fixAuthorForAlphabetization("John Smith"));
+		assertEquals("Neumann, J.", AuthorList.fixAuthorForAlphabetization("John von Neumann"));
+		assertEquals("Neumann, J.", AuthorList.fixAuthorForAlphabetization("J. von Neumann"));
+		assertEquals(
+			"Neumann, J. and Smith, J. and Black Brown, Jr., P.",
+			AuthorList
+				.fixAuthorForAlphabetization("John von Neumann and John Smith and de Black Brown, Jr., Peter"));
+	}
+
+	public static int size(String bibtex) {
+		return (AuthorList.getAuthorList(bibtex)).size();
+	}
+
+	public void testSize() {
+
+		assertEquals(0, size(""));
+		assertEquals(1, size("Bar"));
+		assertEquals(1, size("Foo Bar"));
+		assertEquals(1, size("Foo von Bar"));
+		assertEquals(1, size("von Bar, Foo"));
+		assertEquals(1, size("Bar, Foo"));
+		assertEquals(1, size("Bar, Jr., Foo"));
+		assertEquals(1, size("Bar, Foo"));
+		assertEquals(2, size("John Neumann and Foo Bar"));
+		assertEquals(2, size("John von Neumann and Bar, Jr, Foo"));
+
+		assertEquals(3, size("John von Neumann and John Smith and Black Brown, Peter"));
+
+		String s = "John von Neumann";
+		for (int i = 0; i < 25; i++) {
+			assertEquals(i + 1, size(s));
+			s += " and Albert Einstein";
+		}
+	}
+
+	public void testGetAuthor() {
+
+		try {
+			AuthorList.getAuthorList("").getAuthor(0);
+			fail();
+		} catch (Exception e) {
+		}
+
+		AuthorList.Author author = AuthorList.getAuthorList("John Smith and von Neumann, Jr, John")
+			.getAuthor(0);
+		assertEquals("John", author.getFirst());
+		assertEquals("J.", author.getFirstAbbr());
+		assertEquals("John Smith", author.getFirstLast(false));
+		assertEquals("J. Smith", author.getFirstLast(true));
+		assertEquals(null, author.getJr());
+		assertEquals("Smith", author.getLast());
+		assertEquals("Smith, John", author.getLastFirst(false));
+		assertEquals("Smith, J.", author.getLastFirst(true));
+		assertEquals("Smith", author.getLastOnly());
+		assertEquals("Smith, J.", author.getNameForAlphabetization());
+		assertEquals(null, author.getVon());
+
+		author = AuthorList.getAuthorList("Peter Black Brown").getAuthor(0);
+		assertEquals("Peter Black", author.getFirst());
+		assertEquals("P. B.", author.getFirstAbbr());
+		assertEquals("Peter Black Brown", author.getFirstLast(false));
+		assertEquals("P. B. Brown", author.getFirstLast(true));
+		assertEquals(null, author.getJr());
+		assertEquals(null, author.getVon());
+
+		author = AuthorList.getAuthorList("John Smith and von Neumann, Jr, John").getAuthor(1);
+		assertEquals("John", author.getFirst());
+		assertEquals("J.", author.getFirstAbbr());
+		assertEquals("John von Neumann, Jr", author.getFirstLast(false));
+		assertEquals("J. von Neumann, Jr", author.getFirstLast(true));
+		assertEquals("Jr", author.getJr());
+		assertEquals("Neumann", author.getLast());
+		assertEquals("von Neumann, Jr, John", author.getLastFirst(false));
+		assertEquals("von Neumann, Jr, J.", author.getLastFirst(true));
+		assertEquals("von Neumann", author.getLastOnly());
+		assertEquals("Neumann, Jr, J.", author.getNameForAlphabetization());
+		assertEquals("von", author.getVon());
+	}
+
+	public void testGetAuthorsNatbib() {
+		assertEquals("", AuthorList.getAuthorList("").getAuthorsNatbib());
+		assertEquals("Smith", AuthorList.getAuthorList("John Smith").getAuthorsNatbib());
+		assertEquals("Smith and Black Brown", AuthorList.getAuthorList(
+			"John Smith and Black Brown, Peter").getAuthorsNatbib());
+		assertEquals("von Neumann et al.", AuthorList.getAuthorList(
+			"John von Neumann and John Smith and Black Brown, Peter").getAuthorsNatbib());
+		
+		/*
+		 * [ 1465610 ] (Double-)Names containing hyphen (-) not handled correctly
+		 */
+		assertEquals("Last-Name et al.", AuthorList.getAuthorList(
+			"First Second Last-Name" + " and John Smith and Black Brown, Peter").getAuthorsNatbib());
+
+		// Test caching
+		AuthorList al = AuthorList
+			.getAuthorList("John von Neumann and John Smith and Black Brown, Peter");
+		assertTrue(al.getAuthorsNatbib() == al.getAuthorsNatbib());
+	}
+
+	public void testGetAuthorsLastOnly() {
+
+		{ // No comma before and
+			assertEquals("", AuthorList.getAuthorList("").getAuthorsLastOnly(false));
+			assertEquals("Smith", AuthorList.getAuthorList("John Smith").getAuthorsLastOnly(false));
+			assertEquals("Smith", AuthorList.getAuthorList("Smith, Jr, John").getAuthorsLastOnly(
+				false));
+
+			assertEquals("von Neumann, Smith and Black Brown", AuthorList.getAuthorList(
+				"John von Neumann and John Smith and Black Brown, Peter").getAuthorsLastOnly(false));
+		}
+		{ // Oxford comma
+			assertEquals("", AuthorList.getAuthorList("").getAuthorsLastOnly(true));
+			assertEquals("Smith", AuthorList.getAuthorList("John Smith").getAuthorsLastOnly(true));
+			assertEquals("Smith", AuthorList.getAuthorList("Smith, Jr, John").getAuthorsLastOnly(
+				true));
+
+			assertEquals("von Neumann, Smith, and Black Brown", AuthorList.getAuthorList(
+				"John von Neumann and John Smith and Black Brown, Peter").getAuthorsLastOnly(true));
+		}
+	}
+
+	public void testGetAuthorsLastFirst() {
+		{ // No commas before and
+			AuthorList al;
+
+			al = AuthorList.getAuthorList("");
+			assertEquals("", al.getAuthorsLastFirst(true, false));
+			assertEquals("", al.getAuthorsLastFirst(false, false));
+
+			al = AuthorList.getAuthorList("John Smith");
+			assertEquals("Smith, John", al.getAuthorsLastFirst(false, false));
+			assertEquals("Smith, J.", al.getAuthorsLastFirst(true, false));
+
+			al = AuthorList.getAuthorList("John Smith and Black Brown, Peter");
+			assertEquals("Smith, John and Black Brown, Peter", al.getAuthorsLastFirst(false, false));
+			assertEquals("Smith, J. and Black Brown, P.", al.getAuthorsLastFirst(true, false));
+
+			al = AuthorList.getAuthorList("John von Neumann and John Smith and Black Brown, Peter");
+			// Method description is different than code -> additional comma
+			// there
+			assertEquals("von Neumann, John, Smith, John and Black Brown, Peter", al
+				.getAuthorsLastFirst(false, false));
+			assertEquals("von Neumann, J., Smith, J. and Black Brown, P.", al.getAuthorsLastFirst(
+				true, false));
+
+			al = AuthorList.getAuthorList("John Peter von Neumann");
+			assertEquals("von Neumann, J. P.", al.getAuthorsLastFirst(true, false));
+		}
+		{ // Oxford comma
+			AuthorList al;
+
+			al = AuthorList.getAuthorList("");
+			assertEquals("", al.getAuthorsLastFirst(true, true));
+			assertEquals("", al.getAuthorsLastFirst(false, true));
+
+			al = AuthorList.getAuthorList("John Smith");
+			assertEquals("Smith, John", al.getAuthorsLastFirst(false, true));
+			assertEquals("Smith, J.", al.getAuthorsLastFirst(true, true));
+
+			al = AuthorList.getAuthorList("John Smith and Black Brown, Peter");
+			assertEquals("Smith, John and Black Brown, Peter", al.getAuthorsLastFirst(false, true));
+			assertEquals("Smith, J. and Black Brown, P.", al.getAuthorsLastFirst(true, true));
+
+			al = AuthorList.getAuthorList("John von Neumann and John Smith and Black Brown, Peter");
+			assertEquals("von Neumann, John, Smith, John, and Black Brown, Peter", al
+				.getAuthorsLastFirst(false, true));
+			assertEquals("von Neumann, J., Smith, J., and Black Brown, P.", al.getAuthorsLastFirst(
+				true, true));
+
+			al = AuthorList.getAuthorList("John Peter von Neumann");
+			assertEquals("von Neumann, J. P.", al.getAuthorsLastFirst(true, true));
+		}
+	}
+
+	public void testGetAuthorsLastFirstAnds() {
+		assertEquals("Smith, John", AuthorList.getAuthorList("John Smith").getAuthorsLastFirstAnds(
+			false));
+		assertEquals("Smith, John and Black Brown, Peter", AuthorList.getAuthorList(
+			"John Smith and Black Brown, Peter").getAuthorsLastFirstAnds(false));
+		assertEquals("von Neumann, John and Smith, John and Black Brown, Peter", AuthorList
+			.getAuthorList("John von Neumann and John Smith and Black Brown, Peter")
+			.getAuthorsLastFirstAnds(false));
+		assertEquals("von Last, Jr, First", AuthorList.getAuthorList("von Last, Jr ,First")
+			.getAuthorsLastFirstAnds(false));
+
+		assertEquals("Smith, J.", AuthorList.getAuthorList("John Smith").getAuthorsLastFirstAnds(
+			true));
+		assertEquals("Smith, J. and Black Brown, P.", AuthorList.getAuthorList(
+			"John Smith and Black Brown, Peter").getAuthorsLastFirstAnds(true));
+		assertEquals("von Neumann, J. and Smith, J. and Black Brown, P.", AuthorList.getAuthorList(
+			"John von Neumann and John Smith and Black Brown, Peter").getAuthorsLastFirstAnds(true));
+		assertEquals("von Last, Jr, F.", AuthorList.getAuthorList("von Last, Jr ,First")
+			.getAuthorsLastFirstAnds(true));
+
+	}
+
+	public void testGetAuthorsFirstFirst() {
+
+		AuthorList al;
+
+		al = AuthorList.getAuthorList("");
+		assertEquals("", al.getAuthorsFirstFirst(true, false));
+		assertEquals("", al.getAuthorsFirstFirst(false, false));
+		assertEquals("", al.getAuthorsFirstFirst(true, true));
+		assertEquals("", al.getAuthorsFirstFirst(false, true));
+
+		al = AuthorList.getAuthorList("John Smith");
+		assertEquals("John Smith", al.getAuthorsFirstFirst(false, false));
+		assertEquals("J. Smith", al.getAuthorsFirstFirst(true, false));
+		assertEquals("John Smith", al.getAuthorsFirstFirst(false, true));
+		assertEquals("J. Smith", al.getAuthorsFirstFirst(true, true));
+
+		al = AuthorList.getAuthorList("John Smith and Black Brown, Peter");
+		assertEquals("John Smith and Peter Black Brown", al.getAuthorsFirstFirst(false, false));
+		assertEquals("J. Smith and P. Black Brown", al.getAuthorsFirstFirst(true, false));
+		assertEquals("John Smith and Peter Black Brown", al.getAuthorsFirstFirst(false, true));
+		assertEquals("J. Smith and P. Black Brown", al.getAuthorsFirstFirst(true, true));
+
+		al = AuthorList.getAuthorList("John von Neumann and John Smith and Black Brown, Peter");
+		assertEquals("John von Neumann, John Smith and Peter Black Brown", al.getAuthorsFirstFirst(
+			false, false));
+		assertEquals("J. von Neumann, J. Smith and P. Black Brown", al.getAuthorsFirstFirst(true,
+			false));
+		assertEquals("John von Neumann, John Smith, and Peter Black Brown", al
+			.getAuthorsFirstFirst(false, true));
+		assertEquals("J. von Neumann, J. Smith, and P. Black Brown", al.getAuthorsFirstFirst(true,
+			true));
+
+		al = AuthorList.getAuthorList("John Peter von Neumann");
+		assertEquals("John Peter von Neumann", al.getAuthorsFirstFirst(false, false));
+		assertEquals("John Peter von Neumann", al.getAuthorsFirstFirst(false, true));
+		assertEquals("J. P. von Neumann", al.getAuthorsFirstFirst(true, false));
+		assertEquals("J. P. von Neumann", al.getAuthorsFirstFirst(true, true));
+	}
+
+	public void testGetAuthorsFirstFirstAnds() {
+		assertEquals("John Smith", AuthorList.getAuthorList("John Smith")
+			.getAuthorsFirstFirstAnds());
+		assertEquals("John Smith and Peter Black Brown", AuthorList.getAuthorList(
+			"John Smith and Black Brown, Peter").getAuthorsFirstFirstAnds());
+		assertEquals("John von Neumann and John Smith and Peter Black Brown", AuthorList
+			.getAuthorList("John von Neumann and John Smith and Black Brown, Peter")
+			.getAuthorsFirstFirstAnds());
+		assertEquals("First von Last, Jr. III", AuthorList
+			.getAuthorList("von Last, Jr. III, First").getAuthorsFirstFirstAnds());
+	}
+
+	public void testGetAuthorsForAlphabetization() {
+		assertEquals("Smith, J.", AuthorList.getAuthorList("John Smith")
+			.getAuthorsForAlphabetization());
+		assertEquals("Neumann, J.", AuthorList.getAuthorList("John von Neumann")
+			.getAuthorsForAlphabetization());
+		assertEquals("Neumann, J.", AuthorList.getAuthorList("J. von Neumann")
+			.getAuthorsForAlphabetization());
+		assertEquals("Neumann, J. and Smith, J. and Black Brown, Jr., P.", AuthorList
+			.getAuthorList("John von Neumann and John Smith and de Black Brown, Jr., Peter")
+			.getAuthorsForAlphabetization());
+	}
+	
+	public void testRemoveStartAndEndBraces() {
+		assertEquals("{A}bbb{c}", AuthorList.getAuthorList("{A}bbb{c}").getAuthorsLastOnly(false));
+		assertEquals("Vall{\\'e}e Poussin", AuthorList.getAuthorList("{Vall{\\'e}e Poussin}").getAuthorsLastOnly(false));
+		assertEquals("Poussin", AuthorList.getAuthorList("{Vall{\\'e}e} {Poussin}").getAuthorsLastOnly(false));
+		assertEquals("Poussin", AuthorList.getAuthorList("Vall{\\'e}e Poussin").getAuthorsLastOnly(false));
+		assertEquals("Lastname", AuthorList.getAuthorList("Firstname {Lastname}").getAuthorsLastOnly(false));
+		assertEquals("Firstname Lastname", AuthorList.getAuthorList("{Firstname Lastname}").getAuthorsLastOnly(false));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/BibtexDatabaseTest.java b/src/java/tests/net/sf/jabref/BibtexDatabaseTest.java
index 902a739..8a54875 100644
--- a/src/java/tests/net/sf/jabref/BibtexDatabaseTest.java
+++ b/src/java/tests/net/sf/jabref/BibtexDatabaseTest.java
@@ -1,36 +1,36 @@
-package tests.net.sf.jabref;
-
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.imports.ParserResult;
-
-public class BibtexDatabaseTest extends TestCase {
-
-	/**
-	 * Some basic test cases for resolving strings.
-	 * 
-	 * @throws FileNotFoundException
-	 * @throws IOException
-	 */
-	public void testResolveStrings() throws FileNotFoundException, IOException{
-		
-		ParserResult result = BibtexParser.parse(new FileReader("src/tests/net/sf/jabref/util/twente.bib"));
-		
-		BibtexDatabase db = result.getDatabase();
-		
-		assertEquals("Arvind", db.resolveForStrings("#Arvind#"));
-		assertEquals("Patterson, David", db.resolveForStrings("#Patterson#"));
-		assertEquals("Arvind and Patterson, David", db.resolveForStrings("#Arvind# and #Patterson#"));
-		
-		// Strings that are not found return just the given string.
-		assertEquals("#unknown#", db.resolveForStrings("#unknown#"));
-		
-	}
-	
-	
-}
+package tests.net.sf.jabref;
+
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.imports.ParserResult;
+
+public class BibtexDatabaseTest extends TestCase {
+
+	/**
+	 * Some basic test cases for resolving strings.
+	 * 
+	 * @throws FileNotFoundException
+	 * @throws IOException
+	 */
+	public void testResolveStrings() throws FileNotFoundException, IOException{
+		
+		ParserResult result = BibtexParser.parse(new FileReader("src/tests/net/sf/jabref/util/twente.bib"));
+		
+		BibtexDatabase db = result.getDatabase();
+		
+		assertEquals("Arvind", db.resolveForStrings("#Arvind#"));
+		assertEquals("Patterson, David", db.resolveForStrings("#Patterson#"));
+		assertEquals("Arvind and Patterson, David", db.resolveForStrings("#Arvind# and #Patterson#"));
+		
+		// Strings that are not found return just the given string.
+		assertEquals("#unknown#", db.resolveForStrings("#unknown#"));
+		
+	}
+	
+	
+}
diff --git a/src/java/tests/net/sf/jabref/DuplicateCheckTest.java b/src/java/tests/net/sf/jabref/DuplicateCheckTest.java
index eab087d..13142b6 100644
--- a/src/java/tests/net/sf/jabref/DuplicateCheckTest.java
+++ b/src/java/tests/net/sf/jabref/DuplicateCheckTest.java
@@ -1,56 +1,56 @@
-package tests.net.sf.jabref;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.DuplicateCheck;
-import net.sf.jabref.Util;
-
-/**
- * Created by IntelliJ IDEA.
- * User: alver
- * Date: Nov 9, 2007
- * Time: 7:04:25 PM
- * To change this template use File | Settings | File Templates.
- */
-public class DuplicateCheckTest extends TestCase {
-
-    public void testDuplicateDetection() {
-
-        BibtexEntry one = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.ARTICLE);
-
-        BibtexEntry two = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.ARTICLE);
-
-        one.setField("author", "Billy Bob");
-        two.setField("author", "Billy Bob");
-        assertTrue(DuplicateCheck.isDuplicate(one, two));
-
-        two.setField("author", "James Joyce");
-        assertFalse(DuplicateCheck.isDuplicate(one, two));
-
-        two.setField("author", "Billy Bob");
-        two.setType(BibtexEntryType.BOOK);
-        assertFalse(DuplicateCheck.isDuplicate(one, two));
-
-        two.setType(BibtexEntryType.ARTICLE);
-        one.setField("year", "2005");
-        two.setField("year", "2005");
-        one.setField("title", "A title");
-        two.setField("title", "A title");
-        one.setField("journal", "A");
-        two.setField("journal", "A");
-        one.setField("number", "1");
-        two.setField("number", "1");
-        one.setField("volume", "21");
-        two.setField("volume", "21");
-        assertTrue(DuplicateCheck.isDuplicate(one, two));
-
-        two.setField("volume", "22");
-        assertTrue(DuplicateCheck.isDuplicate(one, two));
-
-        two.setField("title", "Another title");
-        two.setField("journal", "B");
-        assertFalse(DuplicateCheck.isDuplicate(one, two));
-    }
-
-}
+package tests.net.sf.jabref;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.DuplicateCheck;
+import net.sf.jabref.Util;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: alver
+ * Date: Nov 9, 2007
+ * Time: 7:04:25 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class DuplicateCheckTest extends TestCase {
+
+    public void testDuplicateDetection() {
+
+        BibtexEntry one = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.ARTICLE);
+
+        BibtexEntry two = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.ARTICLE);
+
+        one.setField("author", "Billy Bob");
+        two.setField("author", "Billy Bob");
+        assertTrue(DuplicateCheck.isDuplicate(one, two));
+
+        two.setField("author", "James Joyce");
+        assertFalse(DuplicateCheck.isDuplicate(one, two));
+
+        two.setField("author", "Billy Bob");
+        two.setType(BibtexEntryType.BOOK);
+        assertFalse(DuplicateCheck.isDuplicate(one, two));
+
+        two.setType(BibtexEntryType.ARTICLE);
+        one.setField("year", "2005");
+        two.setField("year", "2005");
+        one.setField("title", "A title");
+        two.setField("title", "A title");
+        one.setField("journal", "A");
+        two.setField("journal", "A");
+        one.setField("number", "1");
+        two.setField("number", "1");
+        one.setField("volume", "21");
+        two.setField("volume", "21");
+        assertTrue(DuplicateCheck.isDuplicate(one, two));
+
+        two.setField("volume", "22");
+        assertTrue(DuplicateCheck.isDuplicate(one, two));
+
+        two.setField("title", "Another title");
+        two.setField("journal", "B");
+        assertFalse(DuplicateCheck.isDuplicate(one, two));
+    }
+
+}
diff --git a/src/java/tests/net/sf/jabref/FileBasedTestCase.java b/src/java/tests/net/sf/jabref/FileBasedTestCase.java
index c7dd0c7..184977b 100644
--- a/src/java/tests/net/sf/jabref/FileBasedTestCase.java
+++ b/src/java/tests/net/sf/jabref/FileBasedTestCase.java
@@ -1,234 +1,234 @@
-package tests.net.sf.jabref;
-
-import java.io.File;
-import java.io.StringReader;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.imports.ParserResult;
-
-/**
- * A base class for Testing in JabRef that comes along with some useful
- * functions.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class FileBasedTestCase extends TestCase {
-
-	/**
-	 * Will check if two paths are the same.
-	 */
-	public static void assertEqualPaths(String path1, String path2) {
-
-		if (path1 == path2)
-			return;
-
-		if ((path1 == null || path2 == null) && path1 != path2)
-			fail("Expected: " + path1 + " but was: " + path2);
-
-		assertEquals(path1.replaceAll("\\\\", "/"), path2.replaceAll("\\\\", "/"));
-	}
-
-	/**
-	 * Creates a temp directory in the System temp directory.
-	 * 
-	 * Taken from
-	 * http://forum.java.sun.com/thread.jspa?threadID=470197&messageID=2169110
-	 * 
-	 * Author: jfbriere
-	 * 
-	 * @return returns null if directory could not created.
-	 */
-	public static File createTempDir(String prefix) {
-		return createTempDir(prefix, null);
-	}
-
-	/**
-	 * Creates a temp directory in a given directory.
-	 * 
-	 * Taken from
-	 * http://forum.java.sun.com/thread.jspa?threadID=470197&messageID=2169110
-	 * 
-	 * Author: jfbriere
-	 * 
-	 * @param directory
-	 *            MayBeNull - null indicates that the system tmp directory
-	 *            should be used.
-	 * 
-	 * @return returns null if directory could not created.
-	 */
-	public static File createTempDir(String prefix, File directory) {
-		try {
-			File tempFile = File.createTempFile(prefix, "", directory);
-
-			if (!tempFile.delete())
-				return null;
-			if (!tempFile.mkdir())
-				return null;
-
-			return tempFile;
-
-		} catch (Exception e) {
-			return null;
-		}
-	}
-
-	/**
-	 * Deletes a directory or file
-	 * 
-	 * Taken from
-	 * http://forum.java.sun.com/thread.jspa?threadID=470197&messageID=2169110
-	 * 
-	 * Author: jfbriere
-	 * 
-	 * @param file
-	 */
-	public static void deleteRecursive(File file) {
-		if (file.isDirectory()) {
-			File[] fileArray = file.listFiles();
-
-			if (fileArray != null)
-				for (int i = 0; i < fileArray.length; i++)
-					deleteRecursive(fileArray[i]);
-		}
-		file.delete();
-	}
-
-	static BibtexDatabase database;
-
-	static BibtexEntry entry;
-
-	File root;
-
-	private String oldPdfDirectory;
-
-	private boolean oldUseRegExp;
-
-	public static BibtexEntry getBibtexEntry() {
-
-		if (database == null) {
-
-			StringReader reader = new StringReader(
-				"@ARTICLE{HipKro03,\n"
-					+ "  author = {Eric von Hippel and Georg von Krogh},\n"
-					+ "  title = {Open Source Software and the \"Private-Collective\" Innovation Model: Issues for Organization Science},\n"
-					+ "  journal = {Organization Science},\n"
-					+ "  year = {2003},\n"
-					+ "  volume = {14},\n"
-					+ "  pages = {209--223},\n"
-					+ "  number = {2},\n"
-					+ "  address = {Institute for Operations Research and the Management Sciences (INFORMS), Linthicum, Maryland, USA},\n"
-					+ "  doi = {http://dx.doi.org/10.1287/orsc.14.2.209.14992}," + "\n"
-					+ "  issn = {1526-5455}," + "\n" + "  publisher = {INFORMS}\n" + "}");
-
-			BibtexParser parser = new BibtexParser(reader);
-			ParserResult result = null;
-			try {
-				result = parser.parse();
-			} catch (Exception e) {
-				fail();
-			}
-			database = result.getDatabase();
-			entry = database.getEntriesByKey("HipKro03")[0];
-		}
-		return entry;
-	}
-
-	public void setUp() throws Exception {
-
-		Globals.prefs = JabRefPreferences.getInstance();
-		oldUseRegExp = Globals.prefs.getBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY);
-		oldPdfDirectory = Globals.prefs.get("pdfDirectory");
-
-		Globals.prefs.putBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY, false);
-		
-		getBibtexEntry();
-		assertNotNull(database);
-		assertNotNull(entry);
-
-		// Create file structure
-		try {
-			root = createTempDir("UtilFindFileTest");
-
-			Globals.prefs.put("pdfDirectory", root.getPath());
-		
-			File subDir1 = new File(root, "Organization Science");
-			subDir1.mkdir();
-
-			File pdf1 = new File(subDir1, "HipKro03 - Hello.pdf");
-			pdf1.createNewFile();
-
-			File pdf1a = new File(root, "HipKro03 - Hello.pdf");
-			pdf1a.createNewFile();
-
-			File subDir2 = new File(root, "pdfs");
-			subDir2.mkdir();
-
-			File subsubDir1 = new File(subDir2, "sub");
-			subsubDir1.mkdir();
-
-			File pdf2 = new File(subsubDir1, "HipKro03-sub.pdf");
-			pdf2.createNewFile();
-
-			File dir2002 = new File(root, "2002");
-			dir2002.mkdir();
-
-			File dir2003 = new File(root, "2003");
-			dir2003.mkdir();
-
-			File pdf3 = new File(dir2003, "Paper by HipKro03.pdf");
-			pdf3.createNewFile();
-
-			File dirTest = new File(root, "test");
-			dirTest.mkdir();
-
-			File pdf4 = new File(dirTest, "HipKro03.pdf");
-			pdf4.createNewFile();
-
-			File pdf5 = new File(dirTest, ".TEST");
-			pdf5.createNewFile();
-
-			File pdf6 = new File(dirTest, "TEST[");
-			pdf6.createNewFile();
-
-			File pdf7 = new File(dirTest, "TE.ST");
-			pdf7.createNewFile();
-
-			File foo = new File(dirTest, "foo.dat");
-			foo.createNewFile();
-			
-			File graphicsDir = new File(root, "graphicsDir");
-			graphicsDir.mkdir();
-			
-			File graphicsSubDir = new File(graphicsDir, "subDir");
-			graphicsSubDir.mkdir();
-			
-			File jpg = new File(graphicsSubDir, "testHipKro03test.jpg");
-			jpg.createNewFile();
-
-			File png = new File(graphicsSubDir, "testHipKro03test.png");
-			png.createNewFile();
-			
-		} catch (Exception e) {
-			throw new RuntimeException();
-		}
-	}
-
-	public void tearDown() {
-		deleteRecursive(root);
-		Globals.prefs.putBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY, oldUseRegExp);
-		Globals.prefs.put("pdfDirectory", oldPdfDirectory);
-		// TODO: This is not a great way to do this, sure ;-)
-	}
-	
-	public void testVoid(){
-		// to remove warning
-	}
-	
-}
+package tests.net.sf.jabref;
+
+import java.io.File;
+import java.io.StringReader;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.imports.ParserResult;
+
+/**
+ * A base class for Testing in JabRef that comes along with some useful
+ * functions.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class FileBasedTestCase extends TestCase {
+
+	/**
+	 * Will check if two paths are the same.
+	 */
+	public static void assertEqualPaths(String path1, String path2) {
+
+		if (path1 == path2)
+			return;
+
+		if ((path1 == null || path2 == null) && path1 != path2)
+			fail("Expected: " + path1 + " but was: " + path2);
+
+		assertEquals(path1.replaceAll("\\\\", "/"), path2.replaceAll("\\\\", "/"));
+	}
+
+	/**
+	 * Creates a temp directory in the System temp directory.
+	 * 
+	 * Taken from
+	 * http://forum.java.sun.com/thread.jspa?threadID=470197&messageID=2169110
+	 * 
+	 * Author: jfbriere
+	 * 
+	 * @return returns null if directory could not created.
+	 */
+	public static File createTempDir(String prefix) {
+		return createTempDir(prefix, null);
+	}
+
+	/**
+	 * Creates a temp directory in a given directory.
+	 * 
+	 * Taken from
+	 * http://forum.java.sun.com/thread.jspa?threadID=470197&messageID=2169110
+	 * 
+	 * Author: jfbriere
+	 * 
+	 * @param directory
+	 *            MayBeNull - null indicates that the system tmp directory
+	 *            should be used.
+	 * 
+	 * @return returns null if directory could not created.
+	 */
+	public static File createTempDir(String prefix, File directory) {
+		try {
+			File tempFile = File.createTempFile(prefix, "", directory);
+
+			if (!tempFile.delete())
+				return null;
+			if (!tempFile.mkdir())
+				return null;
+
+			return tempFile;
+
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	/**
+	 * Deletes a directory or file
+	 * 
+	 * Taken from
+	 * http://forum.java.sun.com/thread.jspa?threadID=470197&messageID=2169110
+	 * 
+	 * Author: jfbriere
+	 * 
+	 * @param file
+	 */
+	public static void deleteRecursive(File file) {
+		if (file.isDirectory()) {
+			File[] fileArray = file.listFiles();
+
+			if (fileArray != null)
+				for (int i = 0; i < fileArray.length; i++)
+					deleteRecursive(fileArray[i]);
+		}
+		file.delete();
+	}
+
+	static BibtexDatabase database;
+
+	static BibtexEntry entry;
+
+	File root;
+
+	private String oldPdfDirectory;
+
+	private boolean oldUseRegExp;
+
+	public static BibtexEntry getBibtexEntry() {
+
+		if (database == null) {
+
+			StringReader reader = new StringReader(
+				"@ARTICLE{HipKro03,\n"
+					+ "  author = {Eric von Hippel and Georg von Krogh},\n"
+					+ "  title = {Open Source Software and the \"Private-Collective\" Innovation Model: Issues for Organization Science},\n"
+					+ "  journal = {Organization Science},\n"
+					+ "  year = {2003},\n"
+					+ "  volume = {14},\n"
+					+ "  pages = {209--223},\n"
+					+ "  number = {2},\n"
+					+ "  address = {Institute for Operations Research and the Management Sciences (INFORMS), Linthicum, Maryland, USA},\n"
+					+ "  doi = {http://dx.doi.org/10.1287/orsc.14.2.209.14992}," + "\n"
+					+ "  issn = {1526-5455}," + "\n" + "  publisher = {INFORMS}\n" + "}");
+
+			BibtexParser parser = new BibtexParser(reader);
+			ParserResult result = null;
+			try {
+				result = parser.parse();
+			} catch (Exception e) {
+				fail();
+			}
+			database = result.getDatabase();
+			entry = database.getEntriesByKey("HipKro03")[0];
+		}
+		return entry;
+	}
+
+	public void setUp() throws Exception {
+
+		Globals.prefs = JabRefPreferences.getInstance();
+		oldUseRegExp = Globals.prefs.getBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY);
+		oldPdfDirectory = Globals.prefs.get("pdfDirectory");
+
+		Globals.prefs.putBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY, false);
+		
+		getBibtexEntry();
+		assertNotNull(database);
+		assertNotNull(entry);
+
+		// Create file structure
+		try {
+			root = createTempDir("UtilFindFileTest");
+
+			Globals.prefs.put("pdfDirectory", root.getPath());
+		
+			File subDir1 = new File(root, "Organization Science");
+			subDir1.mkdir();
+
+			File pdf1 = new File(subDir1, "HipKro03 - Hello.pdf");
+			pdf1.createNewFile();
+
+			File pdf1a = new File(root, "HipKro03 - Hello.pdf");
+			pdf1a.createNewFile();
+
+			File subDir2 = new File(root, "pdfs");
+			subDir2.mkdir();
+
+			File subsubDir1 = new File(subDir2, "sub");
+			subsubDir1.mkdir();
+
+			File pdf2 = new File(subsubDir1, "HipKro03-sub.pdf");
+			pdf2.createNewFile();
+
+			File dir2002 = new File(root, "2002");
+			dir2002.mkdir();
+
+			File dir2003 = new File(root, "2003");
+			dir2003.mkdir();
+
+			File pdf3 = new File(dir2003, "Paper by HipKro03.pdf");
+			pdf3.createNewFile();
+
+			File dirTest = new File(root, "test");
+			dirTest.mkdir();
+
+			File pdf4 = new File(dirTest, "HipKro03.pdf");
+			pdf4.createNewFile();
+
+			File pdf5 = new File(dirTest, ".TEST");
+			pdf5.createNewFile();
+
+			File pdf6 = new File(dirTest, "TEST[");
+			pdf6.createNewFile();
+
+			File pdf7 = new File(dirTest, "TE.ST");
+			pdf7.createNewFile();
+
+			File foo = new File(dirTest, "foo.dat");
+			foo.createNewFile();
+			
+			File graphicsDir = new File(root, "graphicsDir");
+			graphicsDir.mkdir();
+			
+			File graphicsSubDir = new File(graphicsDir, "subDir");
+			graphicsSubDir.mkdir();
+			
+			File jpg = new File(graphicsSubDir, "testHipKro03test.jpg");
+			jpg.createNewFile();
+
+			File png = new File(graphicsSubDir, "testHipKro03test.png");
+			png.createNewFile();
+			
+		} catch (Exception e) {
+			throw new RuntimeException();
+		}
+	}
+
+	public void tearDown() {
+		deleteRecursive(root);
+		Globals.prefs.putBoolean(JabRefPreferences.USE_REG_EXP_SEARCH_KEY, oldUseRegExp);
+		Globals.prefs.put("pdfDirectory", oldPdfDirectory);
+		// TODO: This is not a great way to do this, sure ;-)
+	}
+	
+	public void testVoid(){
+		// to remove warning
+	}
+	
+}
diff --git a/src/java/tests/net/sf/jabref/JabRefTestCase.java b/src/java/tests/net/sf/jabref/JabRefTestCase.java
index d1fe8ed..8dcc500 100644
--- a/src/java/tests/net/sf/jabref/JabRefTestCase.java
+++ b/src/java/tests/net/sf/jabref/JabRefTestCase.java
@@ -1,23 +1,23 @@
-package tests.net.sf.jabref;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexEntry;
-
-public class JabRefTestCase extends TestCase {
-	
-	public void assertEquals(BibtexEntry e, BibtexEntry x){
-		assertEquals(e.getCiteKey(), x.getCiteKey());
-		assertEquals(e.getType(), x.getType());
-
-		assertEquals(e.getAllFields().size(), x.getAllFields().size());
-
-		for (String name : e.getAllFields()){
-			assertEquals(e.getField(name), x.getField(name));
-		}
-	}
-	
-	public void testVoid(){
-		// to remove warning
-	}
-	
-}
+package tests.net.sf.jabref;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexEntry;
+
+public class JabRefTestCase extends TestCase {
+	
+	public void assertEquals(BibtexEntry e, BibtexEntry x){
+		assertEquals(e.getCiteKey(), x.getCiteKey());
+		assertEquals(e.getType(), x.getType());
+
+		assertEquals(e.getAllFields().size(), x.getAllFields().size());
+
+		for (String name : e.getAllFields()){
+			assertEquals(e.getField(name), x.getField(name));
+		}
+	}
+	
+	public void testVoid(){
+		// to remove warning
+	}
+	
+}
diff --git a/src/java/tests/net/sf/jabref/SearchTextListenerTest.java b/src/java/tests/net/sf/jabref/SearchTextListenerTest.java
index d294d7b..c1d2a85 100644
--- a/src/java/tests/net/sf/jabref/SearchTextListenerTest.java
+++ b/src/java/tests/net/sf/jabref/SearchTextListenerTest.java
@@ -1,115 +1,115 @@
-package tests.net.sf.jabref;
-
-import java.util.ArrayList;
-
-import javax.swing.text.Highlighter;
-import javax.swing.text.Highlighter.Highlight;
-
-import net.sf.jabref.FieldTextArea;
-import net.sf.jabref.GUIGlobals;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-import junit.framework.TestCase;
-
-public class SearchTextListenerTest extends TestCase {
-	
-	
-	public void setUp() throws Exception {
-
-		Globals.prefs = JabRefPreferences.getInstance();
-		GUIGlobals.setUpIconTheme();
-	}
-	public void testHighlighting(){
-		
-		String content = "Test Word Content";
-		String contentToHighlight1 = "Word";
-		String contentToHighlight2 = "Content";
-		
-		FieldTextArea ta = new FieldTextArea("",content);
-
-		Highlighter highlighter = ta.getHighlighter();
-		Highlight[] highlight = highlighter.getHighlights();
-
-		//there is no area to highlight!
-		assertEquals("Expected no highlighting area ",0,highlight.length);
-		
-		//set up arraylist with "word" and inform the fieldtextarea
-		ArrayList<String> wordsToHighlight = new ArrayList<String>();
-		wordsToHighlight.add(contentToHighlight1);
-		ta.searchText(wordsToHighlight);
-				
-		 highlighter = ta.getHighlighter();
-		 highlight = highlighter.getHighlights();
-		
-		//there is one area to highlight!
-		assertEquals("Expected one highlighting area ",1,highlight.length);
-		//start of ... Word
-		assertEquals(content.indexOf(contentToHighlight1),highlight[0].getStartOffset());
-		
-		//end of ... word
-		assertEquals(content.indexOf(contentToHighlight1)+contentToHighlight1.length(),highlight[0].getEndOffset());
-		
-		//add another word "content" and refresh highlighting
-		wordsToHighlight.add(contentToHighlight2);
-		ta.searchText(wordsToHighlight);
-		highlighter = ta.getHighlighter();
-		highlight = highlighter.getHighlights();
-
-		//there are two areas to highlight!
-		assertEquals("Expected two highlighting areas ",2,highlight.length);
-
-		//start of ... content
-		assertEquals(content.indexOf(contentToHighlight2),highlight[1].getStartOffset());
-		
-		//end of ... content
-		assertEquals(content.indexOf(contentToHighlight2)+contentToHighlight2.length(),highlight[1].getEndOffset());
-		
-		//remove everything and check if highlighting is vanished
-		wordsToHighlight.clear();
-		ta.searchText(wordsToHighlight);
-		highlighter = ta.getHighlighter();
-		highlight = highlighter.getHighlights();
-		
-
-		//there should be none areas to highlight!
-		assertEquals("Expected no highlighting area ",0,highlight.length);
-	}
-	
-
-	public void testHighlightingContentIndependence(){
-
-		String content = "Test Word Content";
-		String contentToHighlight1 = "Word";
-		
-		FieldTextArea ta = new FieldTextArea("",content);		
-
-		String textOne = ta.getText();
-		
-		//set up arraylist with "word" and inform the fieldtextarea
-		ArrayList<String> wordsToHighlight = new ArrayList<String>();
-		wordsToHighlight.add(contentToHighlight1);
-		ta.searchText(wordsToHighlight);
-
-		String textTwo = ta.getText();
-		
-		//set up empty arraylist and inform the fieldtextarea
-		ArrayList<String> wordsToHighlight2 = new ArrayList<String>();
-		ta.searchText(wordsToHighlight2);		
-
-		String textThree = ta.getText();
-
-		assertEquals("Highlighting may not change content",textOne,textTwo);
-		assertEquals("Highlighting may not change content",textOne,textThree);
-	}
-	
-	public void testHighlightingInvalidParameter(){
-
-		String content = "Test Word Content";
-		String contentToHighlight1 = "Word";
-		
-		FieldTextArea ta = new FieldTextArea("",content);	
-		
-		//should not matter at all
-		ta.searchText(null);
-	}
-}
+package tests.net.sf.jabref;
+
+import java.util.ArrayList;
+
+import javax.swing.text.Highlighter;
+import javax.swing.text.Highlighter.Highlight;
+
+import net.sf.jabref.FieldTextArea;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+import junit.framework.TestCase;
+
+public class SearchTextListenerTest extends TestCase {
+	
+	
+	public void setUp() throws Exception {
+
+		Globals.prefs = JabRefPreferences.getInstance();
+		GUIGlobals.setUpIconTheme();
+	}
+	public void testHighlighting(){
+		
+		String content = "Test Word Content";
+		String contentToHighlight1 = "Word";
+		String contentToHighlight2 = "Content";
+		
+		FieldTextArea ta = new FieldTextArea("",content);
+
+		Highlighter highlighter = ta.getHighlighter();
+		Highlight[] highlight = highlighter.getHighlights();
+
+		//there is no area to highlight!
+		assertEquals("Expected no highlighting area ",0,highlight.length);
+		
+		//set up arraylist with "word" and inform the fieldtextarea
+		ArrayList<String> wordsToHighlight = new ArrayList<String>();
+		wordsToHighlight.add(contentToHighlight1);
+		ta.searchText(wordsToHighlight);
+				
+		 highlighter = ta.getHighlighter();
+		 highlight = highlighter.getHighlights();
+		
+		//there is one area to highlight!
+		assertEquals("Expected one highlighting area ",1,highlight.length);
+		//start of ... Word
+		assertEquals(content.indexOf(contentToHighlight1),highlight[0].getStartOffset());
+		
+		//end of ... word
+		assertEquals(content.indexOf(contentToHighlight1)+contentToHighlight1.length(),highlight[0].getEndOffset());
+		
+		//add another word "content" and refresh highlighting
+		wordsToHighlight.add(contentToHighlight2);
+		ta.searchText(wordsToHighlight);
+		highlighter = ta.getHighlighter();
+		highlight = highlighter.getHighlights();
+
+		//there are two areas to highlight!
+		assertEquals("Expected two highlighting areas ",2,highlight.length);
+
+		//start of ... content
+		assertEquals(content.indexOf(contentToHighlight2),highlight[1].getStartOffset());
+		
+		//end of ... content
+		assertEquals(content.indexOf(contentToHighlight2)+contentToHighlight2.length(),highlight[1].getEndOffset());
+		
+		//remove everything and check if highlighting is vanished
+		wordsToHighlight.clear();
+		ta.searchText(wordsToHighlight);
+		highlighter = ta.getHighlighter();
+		highlight = highlighter.getHighlights();
+		
+
+		//there should be none areas to highlight!
+		assertEquals("Expected no highlighting area ",0,highlight.length);
+	}
+	
+
+	public void testHighlightingContentIndependence(){
+
+		String content = "Test Word Content";
+		String contentToHighlight1 = "Word";
+		
+		FieldTextArea ta = new FieldTextArea("",content);		
+
+		String textOne = ta.getText();
+		
+		//set up arraylist with "word" and inform the fieldtextarea
+		ArrayList<String> wordsToHighlight = new ArrayList<String>();
+		wordsToHighlight.add(contentToHighlight1);
+		ta.searchText(wordsToHighlight);
+
+		String textTwo = ta.getText();
+		
+		//set up empty arraylist and inform the fieldtextarea
+		ArrayList<String> wordsToHighlight2 = new ArrayList<String>();
+		ta.searchText(wordsToHighlight2);		
+
+		String textThree = ta.getText();
+
+		assertEquals("Highlighting may not change content",textOne,textTwo);
+		assertEquals("Highlighting may not change content",textOne,textThree);
+	}
+	
+	public void testHighlightingInvalidParameter(){
+
+		String content = "Test Word Content";
+		String contentToHighlight1 = "Word";
+		
+		FieldTextArea ta = new FieldTextArea("",content);	
+		
+		//should not matter at all
+		ta.searchText(null);
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/TestUtils.java b/src/java/tests/net/sf/jabref/TestUtils.java
index 7b1f6fd..ded612c 100644
--- a/src/java/tests/net/sf/jabref/TestUtils.java
+++ b/src/java/tests/net/sf/jabref/TestUtils.java
@@ -1,40 +1,40 @@
-package tests.net.sf.jabref;
-
-import java.awt.Component;
-import java.awt.Container;
-
-/**
- * Provides helper methods for unit testing such as methods for making testing
- * of GUIs easier.
- * 
- * @author Dennis Hartrampf, Ines Moosdorf
- */
-public class TestUtils {
-	/**
-	 * Get a Component by name.
-	 * 
-	 * @param parent
-	 *            The parent Component, where to search in.
-	 * @param name
-	 *            The name of the Component to find.
-	 * @return The Component with the given name or null if no
-	 *         such Component.
-	 */
-	public static Component getChildNamed(Component parent, String name) {
-		if (name.equals(parent.getName())) {
-			return parent;
-		}
-
-		if (parent instanceof Container) {
-			Component[] children = ((Container) parent).getComponents();
-
-			for (int i = 0; i < children.length; ++i) {
-				Component child = getChildNamed(children[i], name);
-				if (child != null) {
-					return child;
-				}
-			}
-		}
-		return null;
-	}
-}
+package tests.net.sf.jabref;
+
+import java.awt.Component;
+import java.awt.Container;
+
+/**
+ * Provides helper methods for unit testing such as methods for making testing
+ * of GUIs easier.
+ * 
+ * @author Dennis Hartrampf, Ines Moosdorf
+ */
+public class TestUtils {
+	/**
+	 * Get a Component by name.
+	 * 
+	 * @param parent
+	 *            The parent Component, where to search in.
+	 * @param name
+	 *            The name of the Component to find.
+	 * @return The Component with the given name or null if no
+	 *         such Component.
+	 */
+	public static Component getChildNamed(Component parent, String name) {
+		if (name.equals(parent.getName())) {
+			return parent;
+		}
+
+		if (parent instanceof Container) {
+			Component[] children = ((Container) parent).getComponents();
+
+			for (int i = 0; i < children.length; ++i) {
+				Component child = getChildNamed(children[i], name);
+				if (child != null) {
+					return child;
+				}
+			}
+		}
+		return null;
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/UtilFindFileTest.java b/src/java/tests/net/sf/jabref/UtilFindFileTest.java
index dced24b..135a990 100644
--- a/src/java/tests/net/sf/jabref/UtilFindFileTest.java
+++ b/src/java/tests/net/sf/jabref/UtilFindFileTest.java
@@ -1,201 +1,201 @@
-package tests.net.sf.jabref;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Util;
-
-/**
- * Testing Util.findFile for finding files based on regular expressions.
- * 
- * @author Christopher Oezbek <oezi at oezi.de>
- */
-public class UtilFindFileTest extends FileBasedTestCase {
-
-	String findFile(String dir, String file) {
-		return Util.findFile(entry, database, dir, file, true);
-	}
-
-	/**
-	 * Test that more than one slash is taken to mean that a relative path is to
-	 * be returned.
-	 * 
-	 * @throws IOException
-	 */
-	public void testFindFileRelative() throws IOException {
-
-		// Most basic case
-		assertEqualPaths("HipKro03.pdf", findFile(root.getAbsolutePath() + "/test/",
-			"[bibtexkey].pdf"));
-
-		// Including directory
-		assertEqualPaths("test/HipKro03.pdf", findFile(root.getAbsolutePath(),
-			"test/[bibtexkey].pdf"));
-
-		// No relative paths
-		assertEqualPaths(new File(root, "test/HipKro03.pdf").getCanonicalPath(), findFile(null,
-			root.getAbsolutePath() + "/test/" + "[bibtexkey].pdf"));
-
-		// No relative paths
-		assertEqualPaths(new File(root, "test/HipKro03.pdf").getCanonicalPath(), Util.findFile(
-			entry, database, root.getAbsolutePath() + "/test/" + "[bibtexkey].pdf"));
-
-	}
-	
-	
-	
-
-	public void testFindPdf() throws IOException {
-
-		{
-			String pdf = Util.findPdf(entry, "pdf", root.getAbsolutePath());
-			assertEqualPaths("HipKro03 - Hello.pdf", pdf);
-
-			File fullPath = Util.expandFilename(pdf, root.getAbsolutePath());
-			assertTrue(fullPath.exists());
-		}
-		{
-			String pdf = Util.findPdf(entry, "pdf", root.getAbsolutePath() + "/pdfs/");
-
-			assertEqualPaths("sub/HipKro03-sub.pdf", pdf);
-
-			File fullPath = Util.expandFilename(pdf, root.getAbsolutePath() + "/pdfs/");
-			assertTrue(fullPath.exists());
-		}
-	}
-
-	public void testFindAssociatedFiles() throws IOException {
-		Collection<BibtexEntry> entries = Arrays.asList(new BibtexEntry[]{entry});
-		Collection<String> extensions = Arrays.asList(new String[]{"jpg", "pdf"});
-		Collection<File> dirs = Arrays.asList(new File[] { new File(root.getAbsoluteFile() + "/pdfs/"), new File(root.getAbsoluteFile() + "/graphicsDir/") });
-		
-		Map<BibtexEntry, List<File>> results = Util.findAssociatedFiles(entries, extensions, dirs);
-		
-		assertEquals(2, results.get(entry).size());
-		assertTrue(results.get(entry).contains(new File(root.getAbsoluteFile() + "/graphicsDir/subDir/testHipKro03test.jpg")));
-		assertFalse(results.get(entry).contains(new File(root.getAbsoluteFile() + "/graphicsDir/subDir/testHipKro03test.png")));
-		assertTrue(results.get(entry).contains(new File(root.getAbsoluteFile() + "/pdfs/sub/HipKro03-sub.pdf")));
-	}
-	
-	public void testFindPdfInMultiple() throws IOException {
-
-		{
-			String[] dirsToSearch = new String[] { root.getAbsolutePath(),
-				root.getAbsolutePath() + "/pdfs/" };
-			String pdf = Util.findPdf(entry, "pdf", dirsToSearch);
-			assertEqualPaths("HipKro03 - Hello.pdf", pdf);
-
-			File fullPath = Util.expandFilename(pdf, dirsToSearch);
-			assertTrue(fullPath.exists());
-			assertEqualPaths(root.getAbsolutePath() + "/HipKro03 - Hello.pdf", fullPath
-				.getAbsolutePath());
-
-			String tmp = dirsToSearch[1];
-			dirsToSearch[1] = dirsToSearch[0];
-			dirsToSearch[0] = tmp;
-
-			fullPath = Util.expandFilename(pdf, dirsToSearch);
-			assertTrue(fullPath.exists());
-			assertEqualPaths(root.getAbsolutePath() + "/HipKro03 - Hello.pdf", fullPath
-				.getAbsolutePath());
-
-			fullPath = Util.expandFilename(pdf, new String[] { dirsToSearch[0] });
-			assertEquals(null, fullPath);
-
-			fullPath = Util.expandFilename(pdf, new String[] { dirsToSearch[1] });
-			assertTrue(fullPath.exists());
-			assertEqualPaths(root.getAbsolutePath() + "/HipKro03 - Hello.pdf", fullPath
-				.getAbsolutePath());
-		}
-
-		{
-			String[] dirsToSearch = new String[] { root.getAbsolutePath() + "/pdfs/",
-				root.getAbsolutePath() };
-			String pdf = Util.findPdf(entry, "pdf", dirsToSearch);
-			assertEqualPaths("sub/HipKro03-sub.pdf", pdf);
-
-			File fullPath = Util.expandFilename(pdf, dirsToSearch);
-			assertTrue(fullPath.exists());
-			assertEqualPaths(root.getAbsolutePath() + "/pdfs/sub/HipKro03-sub.pdf", fullPath
-				.getAbsolutePath());
-
-			String tmp = dirsToSearch[1];
-			dirsToSearch[1] = dirsToSearch[0];
-			dirsToSearch[0] = tmp;
-
-			fullPath = Util.expandFilename(pdf, dirsToSearch);
-			assertTrue(fullPath.exists());
-			assertEqualPaths(root.getAbsolutePath() + "/pdfs/sub/HipKro03-sub.pdf", fullPath
-				.getAbsolutePath());
-
-			fullPath = Util.expandFilename(pdf, new String[] { dirsToSearch[0] });
-			assertEquals(null, fullPath);
-
-			fullPath = Util.expandFilename(pdf, new String[] { dirsToSearch[1] });
-			assertTrue(fullPath.exists());
-			assertEqualPaths(root.getAbsolutePath() + "/pdfs/sub/HipKro03-sub.pdf", fullPath
-				.getAbsolutePath());
-		}
-
-	}
-
-	public void testFindFile() throws IOException {
-
-		// Simple case
-		assertEqualPaths("HipKro03.pdf", Util.findFile(entry, database, root.getAbsolutePath()
-			+ "/test/", "[bibtexkey].pdf", true));
-
-		// Not found
-		assertEqualPaths(null, Util.findFile(entry, database, root.getAbsolutePath() + "/test/",
-			"Not there [bibtexkey].pdf", true));
-
-		// Test current dir
-		assertEqualPaths(new File(new File("."), "build.xml").getCanonicalPath(), Util.findFile(
-			entry, database, "./build.xml"));
-		assertEqualPaths("build.xml", Util.findFile(entry, database, ".", "build.xml", true));
-
-		// Test keys in path and regular expression in file
-		assertEqualPaths(new File(root, "/2003/Paper by HipKro03.pdf").getCanonicalPath(), Util
-			.findFile(entry, database, root.getAbsolutePath() + "/[year]/.*[bibtexkey].pdf"));
-
-		// Test . and ..
-		assertEqualPaths(new File(root, "/Organization Science/HipKro03 - Hello.pdf")
-			.getCanonicalPath(), Util.findFile(entry, database, root.getAbsolutePath()
-			+ "/[year]/../2003/.././././[journal]\\" + ".*[bibtexkey].*.pdf"));
-
-		// Test Escape
-		assertEqualPaths(new File(root, "/Organization Science/HipKro03 - Hello.pdf")
-			.getCanonicalPath(), Util.findFile(entry, database, root.getAbsolutePath() + "/*/"
-			+ "[bibtexkey] - Hello\\\\.pdf"));
-
-		assertEqualPaths("TE.ST", Util.findFile(entry, database, root.getAbsolutePath() + "/test/",
-			"TE\\\\.ST", true));
-		assertEqualPaths(".TEST", Util.findFile(entry, database, root.getAbsolutePath() + "/test/",
-			"\\\\.TEST", true));
-		assertEqualPaths("TEST[", Util.findFile(entry, database, root.getAbsolutePath() + "/test/",
-			"TEST\\\\[", true));
-
-		// Test *
-		assertEqualPaths(new File(root, "/Organization Science/HipKro03 - Hello.pdf")
-			.getCanonicalPath(), Util.findFile(entry, database, root.getAbsolutePath() + "/*/"
-			+ "[bibtexkey].+?.pdf"));
-
-		// Test **
-		assertEqualPaths(new File(root, "/pdfs/sub/HipKro03-sub.pdf").getCanonicalPath(), Util
-			.findFile(entry, database, root.getAbsolutePath() + "/**/" + "[bibtexkey]-sub.pdf"));
-
-		// Test ** - Find in level itself too
-		assertEqualPaths(new File(root, "/pdfs/sub/HipKro03-sub.pdf").getCanonicalPath(), Util
-			.findFile(entry, database, root.getAbsolutePath() + "/pdfs/sub/**/"
-				+ "[bibtexkey]-sub.pdf"));
-
-		// Test ** - Find lowest level first (Rest is Depth first)
-		assertEqualPaths(new File(root, "/HipKro03 - Hello.pdf").getCanonicalPath(), Util.findFile(
-			entry, database, root.getAbsolutePath() + "/**/" + "[bibtexkey].*Hello.pdf"));
-	}
-}
+package tests.net.sf.jabref;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Util;
+
+/**
+ * Testing Util.findFile for finding files based on regular expressions.
+ * 
+ * @author Christopher Oezbek <oezi at oezi.de>
+ */
+public class UtilFindFileTest extends FileBasedTestCase {
+
+	String findFile(String dir, String file) {
+		return Util.findFile(entry, database, dir, file, true);
+	}
+
+	/**
+	 * Test that more than one slash is taken to mean that a relative path is to
+	 * be returned.
+	 * 
+	 * @throws IOException
+	 */
+	public void testFindFileRelative() throws IOException {
+
+		// Most basic case
+		assertEqualPaths("HipKro03.pdf", findFile(root.getAbsolutePath() + "/test/",
+			"[bibtexkey].pdf"));
+
+		// Including directory
+		assertEqualPaths("test/HipKro03.pdf", findFile(root.getAbsolutePath(),
+			"test/[bibtexkey].pdf"));
+
+		// No relative paths
+		assertEqualPaths(new File(root, "test/HipKro03.pdf").getCanonicalPath(), findFile(null,
+			root.getAbsolutePath() + "/test/" + "[bibtexkey].pdf"));
+
+		// No relative paths
+		assertEqualPaths(new File(root, "test/HipKro03.pdf").getCanonicalPath(), Util.findFile(
+			entry, database, root.getAbsolutePath() + "/test/" + "[bibtexkey].pdf"));
+
+	}
+	
+	
+	
+
+	public void testFindPdf() throws IOException {
+
+		{
+			String pdf = Util.findPdf(entry, "pdf", root.getAbsolutePath());
+			assertEqualPaths("HipKro03 - Hello.pdf", pdf);
+
+			File fullPath = Util.expandFilename(pdf, root.getAbsolutePath());
+			assertTrue(fullPath.exists());
+		}
+		{
+			String pdf = Util.findPdf(entry, "pdf", root.getAbsolutePath() + "/pdfs/");
+
+			assertEqualPaths("sub/HipKro03-sub.pdf", pdf);
+
+			File fullPath = Util.expandFilename(pdf, root.getAbsolutePath() + "/pdfs/");
+			assertTrue(fullPath.exists());
+		}
+	}
+
+	public void testFindAssociatedFiles() throws IOException {
+		Collection<BibtexEntry> entries = Arrays.asList(new BibtexEntry[]{entry});
+		Collection<String> extensions = Arrays.asList(new String[]{"jpg", "pdf"});
+		Collection<File> dirs = Arrays.asList(new File[] { new File(root.getAbsoluteFile() + "/pdfs/"), new File(root.getAbsoluteFile() + "/graphicsDir/") });
+		
+		Map<BibtexEntry, List<File>> results = Util.findAssociatedFiles(entries, extensions, dirs);
+		
+		assertEquals(2, results.get(entry).size());
+		assertTrue(results.get(entry).contains(new File(root.getAbsoluteFile() + "/graphicsDir/subDir/testHipKro03test.jpg")));
+		assertFalse(results.get(entry).contains(new File(root.getAbsoluteFile() + "/graphicsDir/subDir/testHipKro03test.png")));
+		assertTrue(results.get(entry).contains(new File(root.getAbsoluteFile() + "/pdfs/sub/HipKro03-sub.pdf")));
+	}
+	
+	public void testFindPdfInMultiple() throws IOException {
+
+		{
+			String[] dirsToSearch = new String[] { root.getAbsolutePath(),
+				root.getAbsolutePath() + "/pdfs/" };
+			String pdf = Util.findPdf(entry, "pdf", dirsToSearch);
+			assertEqualPaths("HipKro03 - Hello.pdf", pdf);
+
+			File fullPath = Util.expandFilename(pdf, dirsToSearch);
+			assertTrue(fullPath.exists());
+			assertEqualPaths(root.getAbsolutePath() + "/HipKro03 - Hello.pdf", fullPath
+				.getAbsolutePath());
+
+			String tmp = dirsToSearch[1];
+			dirsToSearch[1] = dirsToSearch[0];
+			dirsToSearch[0] = tmp;
+
+			fullPath = Util.expandFilename(pdf, dirsToSearch);
+			assertTrue(fullPath.exists());
+			assertEqualPaths(root.getAbsolutePath() + "/HipKro03 - Hello.pdf", fullPath
+				.getAbsolutePath());
+
+			fullPath = Util.expandFilename(pdf, new String[] { dirsToSearch[0] });
+			assertEquals(null, fullPath);
+
+			fullPath = Util.expandFilename(pdf, new String[] { dirsToSearch[1] });
+			assertTrue(fullPath.exists());
+			assertEqualPaths(root.getAbsolutePath() + "/HipKro03 - Hello.pdf", fullPath
+				.getAbsolutePath());
+		}
+
+		{
+			String[] dirsToSearch = new String[] { root.getAbsolutePath() + "/pdfs/",
+				root.getAbsolutePath() };
+			String pdf = Util.findPdf(entry, "pdf", dirsToSearch);
+			assertEqualPaths("sub/HipKro03-sub.pdf", pdf);
+
+			File fullPath = Util.expandFilename(pdf, dirsToSearch);
+			assertTrue(fullPath.exists());
+			assertEqualPaths(root.getAbsolutePath() + "/pdfs/sub/HipKro03-sub.pdf", fullPath
+				.getAbsolutePath());
+
+			String tmp = dirsToSearch[1];
+			dirsToSearch[1] = dirsToSearch[0];
+			dirsToSearch[0] = tmp;
+
+			fullPath = Util.expandFilename(pdf, dirsToSearch);
+			assertTrue(fullPath.exists());
+			assertEqualPaths(root.getAbsolutePath() + "/pdfs/sub/HipKro03-sub.pdf", fullPath
+				.getAbsolutePath());
+
+			fullPath = Util.expandFilename(pdf, new String[] { dirsToSearch[0] });
+			assertEquals(null, fullPath);
+
+			fullPath = Util.expandFilename(pdf, new String[] { dirsToSearch[1] });
+			assertTrue(fullPath.exists());
+			assertEqualPaths(root.getAbsolutePath() + "/pdfs/sub/HipKro03-sub.pdf", fullPath
+				.getAbsolutePath());
+		}
+
+	}
+
+	public void testFindFile() throws IOException {
+
+		// Simple case
+		assertEqualPaths("HipKro03.pdf", Util.findFile(entry, database, root.getAbsolutePath()
+			+ "/test/", "[bibtexkey].pdf", true));
+
+		// Not found
+		assertEqualPaths(null, Util.findFile(entry, database, root.getAbsolutePath() + "/test/",
+			"Not there [bibtexkey].pdf", true));
+
+		// Test current dir
+		assertEqualPaths(new File(new File("."), "build.xml").getCanonicalPath(), Util.findFile(
+			entry, database, "./build.xml"));
+		assertEqualPaths("build.xml", Util.findFile(entry, database, ".", "build.xml", true));
+
+		// Test keys in path and regular expression in file
+		assertEqualPaths(new File(root, "/2003/Paper by HipKro03.pdf").getCanonicalPath(), Util
+			.findFile(entry, database, root.getAbsolutePath() + "/[year]/.*[bibtexkey].pdf"));
+
+		// Test . and ..
+		assertEqualPaths(new File(root, "/Organization Science/HipKro03 - Hello.pdf")
+			.getCanonicalPath(), Util.findFile(entry, database, root.getAbsolutePath()
+			+ "/[year]/../2003/.././././[journal]\\" + ".*[bibtexkey].*.pdf"));
+
+		// Test Escape
+		assertEqualPaths(new File(root, "/Organization Science/HipKro03 - Hello.pdf")
+			.getCanonicalPath(), Util.findFile(entry, database, root.getAbsolutePath() + "/*/"
+			+ "[bibtexkey] - Hello\\\\.pdf"));
+
+		assertEqualPaths("TE.ST", Util.findFile(entry, database, root.getAbsolutePath() + "/test/",
+			"TE\\\\.ST", true));
+		assertEqualPaths(".TEST", Util.findFile(entry, database, root.getAbsolutePath() + "/test/",
+			"\\\\.TEST", true));
+		assertEqualPaths("TEST[", Util.findFile(entry, database, root.getAbsolutePath() + "/test/",
+			"TEST\\\\[", true));
+
+		// Test *
+		assertEqualPaths(new File(root, "/Organization Science/HipKro03 - Hello.pdf")
+			.getCanonicalPath(), Util.findFile(entry, database, root.getAbsolutePath() + "/*/"
+			+ "[bibtexkey].+?.pdf"));
+
+		// Test **
+		assertEqualPaths(new File(root, "/pdfs/sub/HipKro03-sub.pdf").getCanonicalPath(), Util
+			.findFile(entry, database, root.getAbsolutePath() + "/**/" + "[bibtexkey]-sub.pdf"));
+
+		// Test ** - Find in level itself too
+		assertEqualPaths(new File(root, "/pdfs/sub/HipKro03-sub.pdf").getCanonicalPath(), Util
+			.findFile(entry, database, root.getAbsolutePath() + "/pdfs/sub/**/"
+				+ "[bibtexkey]-sub.pdf"));
+
+		// Test ** - Find lowest level first (Rest is Depth first)
+		assertEqualPaths(new File(root, "/HipKro03 - Hello.pdf").getCanonicalPath(), Util.findFile(
+			entry, database, root.getAbsolutePath() + "/**/" + "[bibtexkey].*Hello.pdf"));
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/UtilTest.java b/src/java/tests/net/sf/jabref/UtilTest.java
index 1059470..cb04fa8 100644
--- a/src/java/tests/net/sf/jabref/UtilTest.java
+++ b/src/java/tests/net/sf/jabref/UtilTest.java
@@ -1,474 +1,474 @@
-package tests.net.sf.jabref;
-
-import java.awt.Container;
-import java.awt.Dialog;
-import java.io.StringReader;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.util.*;
-
-import javax.swing.JDialog;
-import javax.swing.JWindow;
-
-import junit.framework.TestCase;
-import net.sf.jabref.*;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.imports.ParserResult;
-
-public class UtilTest extends TestCase {
-
-	public void testNCase() {
-		assertEquals("", Util.nCase(""));
-		assertEquals("Hello world", Util.nCase("Hello World"));
-		assertEquals("A", Util.nCase("a"));
-		assertEquals("Aa", Util.nCase("AA"));
-	}
-
-	public void testGetPublicationDate(){
-	
-		assertEquals("2003-02", Util.getPublicationDate(BibtexParser
-			.singleFromString("@ARTICLE{HipKro03, year = {2003}, month = #FEB# }")));
-		
-		assertEquals("2003-03", Util.getPublicationDate(BibtexParser
-			.singleFromString("@ARTICLE{HipKro03, year = {2003}, month = 3 }")));
-		
-		assertEquals("2003", Util.getPublicationDate(BibtexParser
-			.singleFromString("@ARTICLE{HipKro03, year = {2003}}")));
-		
-		assertEquals(null, Util.getPublicationDate(BibtexParser
-			.singleFromString("@ARTICLE{HipKro03, month = 3 }")));
-		
-		assertEquals(null, Util.getPublicationDate(BibtexParser
-			.singleFromString("@ARTICLE{HipKro03, author={bla}}")));
-
-		assertEquals("2003-12", Util.getPublicationDate(BibtexParser
-			.singleFromString("@ARTICLE{HipKro03, year = {03}, month = #DEC# }")));
-		
-	}
-
-	public void testCheckName() {
-		assertEquals("aa.bib", Util.checkName("aa"));
-		assertEquals(".bib", Util.checkName(""));
-		assertEquals("a.bib", Util.checkName("a.bib"));
-		assertEquals("a.bib", Util.checkName("a"));
-		assertEquals("a.bb.bib", Util.checkName("a.bb"));
-	}
-
-	public void testCreateNeutralId() {
-		
-		HashSet<String> set = new HashSet<String>();
-		for (int i = 0; i < 10000; i++){
-			String string = Util.createNeutralId();
-			assertFalse(set.contains(string));
-			set.add(string);
-		}
-		
-	}
-
-	public void testPlaceDialog() {
-		Dialog d = new JDialog();
-		d.setSize(50, 50);
-		Container c = new JWindow();
-		c.setBounds(100, 200, 100, 50);
-		
-		Util.placeDialog(d, c);
-		assertEquals(125, d.getX());
-		assertEquals(200, d.getY());
-		
-		// Test upper left corner
-		c.setBounds(0,0,100,100);
-		d.setSize(200, 200);
-		
-		Util.placeDialog(d, c);
-		assertEquals(0, d.getX());
-		assertEquals(0, d.getY());
-	}
-
-	public void testParseField() {
-	
-		assertEquals("", Util.parseField(""));
-		
-		// Three basic types (references, { } and " ")
-		assertEquals("#hallo#", Util.parseField("hallo"));
-		assertEquals("hallo", Util.parseField("{hallo}"));
-		assertEquals("bye", Util.parseField("\"bye\""));
-		
-		// Concatenation
-		assertEquals("longlonglonglong", Util.parseField("\"long\" # \"long\" # \"long\" # \"long\""));
-		
-		assertEquals("hallo#bye#", Util.parseField("{hallo} # bye"));
-	}
-
-	public void testShaveString() {
-		
-		assertEquals(null, Util.shaveString(null));
-		assertEquals("", Util.shaveString(""));
-		assertEquals("aaa", Util.shaveString("   aaa\t\t\n\r"));
-		assertEquals("a", Util.shaveString("  {a}    "));
-		assertEquals("a", Util.shaveString("  \"a\"    "));
-		assertEquals("{a}", Util.shaveString("  {{a}}    "));
-		assertEquals("{a}", Util.shaveString("  \"{a}\"    "));
-		assertEquals("\"{a\"}", Util.shaveString("  \"{a\"}    "));
-	}
-
-	public void testCheckLegalKey() {
-
-		assertEquals("AAAA", Util.checkLegalKey("AA AA"));
-		assertEquals("SPECIALCHARS", Util.checkLegalKey("SPECIAL CHARS#{\\\"}~,^"));
-		assertEquals("AeaeaAAA", Util.checkLegalKey("������"));
-		assertEquals("", Util.checkLegalKey("\n\t\r"));
-	}
-
-	public void testReplaceSpecialCharacters() {
-		// Shouldn't German � be resolved to Ae
-		assertEquals("AeaeaAAA", Util.replaceSpecialCharacters("������"));
-		assertEquals("Hallo Arger", Util.replaceSpecialCharacters("Hallo Arger"));
-	}
-
-	public void testJoin() {
-		String[] s = "ab/cd/ed".split("/");
-		assertEquals("ab\\cd\\ed", Util.join(s, "\\", 0, s.length));
-		
-		assertEquals("cd\\ed", Util.join(s, "\\", 1, s.length));
-		
-		assertEquals("ed", Util.join(s, "\\", 2, s.length));
-		
-		assertEquals("", Util.join(s, "\\", 3, s.length)); 
-		
-		assertEquals("", Util.join(new String[]{}, "\\", 0, 0));
-	}
-	
-	public void testStripBrackets() {
-		assertEquals("foo", Util.stripBrackets("[foo]"));
-		assertEquals("[foo]", Util.stripBrackets("[[foo]]"));
-		assertEquals("foo", Util.stripBrackets("foo]"));
-		assertEquals("foo", Util.stripBrackets("[foo"));
-		assertEquals("", Util.stripBrackets(""));
-		assertEquals("", Util.stripBrackets("[]"));
-		assertEquals("", Util.stripBrackets("["));
-		assertEquals("", Util.stripBrackets("]"));
-		assertEquals("f[]f", Util.stripBrackets("f[]f"));
-	
-		try {
-			Util.stripBrackets(null);
-			fail();
-		} catch(NullPointerException npe){
-			
-		}
-	}
-	
-	BibtexDatabase database;
-	BibtexEntry entry;
-	
-	public void setUp(){
-		
-		StringReader reader = new StringReader(
-				"@ARTICLE{HipKro03," + "\n" + 
-				"  author = {Eric von Hippel and Georg von Krogh}," + "\n" + 
-				"  title = {Open Source Software and the \"Private-Collective\" Innovation Model: Issues for Organization Science}," + "\n" + 
-				"  journal = {Organization Science}," + "\n" + 
-				"  year = {2003}," + "\n" + 
-				"  volume = {14}," + "\n" + 
-				"  pages = {209--223}," + "\n" + 
-				"  number = {2}," + "\n" + 
-				"  address = {Institute for Operations Research and the Management Sciences (INFORMS), Linthicum, Maryland, USA}," + "\n" + 
-				"  doi = {http://dx.doi.org/10.1287/orsc.14.2.209.14992}," + "\n" + 
-				"  issn = {1526-5455}," + "\n" + 
-				"  publisher = {INFORMS}" + "\n" + 
-				"}");
-
-		BibtexParser parser = new BibtexParser(reader); 
-		ParserResult result = null;
-		try {
-			result = parser.parse();
-		} catch (Exception e){
-			fail();
-		}
-		database = result.getDatabase();
-		entry = database.getEntriesByKey("HipKro03")[0];
-		
-		assertNotNull(database);
-		assertNotNull(entry);
-	}
-
-	public void testParseMethodCalls(){
-		
-		assertEquals(1, Util.parseMethodsCalls("bla").size());
-		assertEquals("bla", ((Util.parseMethodsCalls("bla").get(0)))[0]);
-		
-		assertEquals(1, Util.parseMethodsCalls("bla,").size());
-		assertEquals("bla", ((Util.parseMethodsCalls("bla,").get(0)))[0]);
-
-		assertEquals(1, Util.parseMethodsCalls("_bla.bla.blub,").size());
-		assertEquals("_bla.bla.blub", ((Util.parseMethodsCalls("_bla.bla.blub,").get(0)))[0]);
-
-		
-		assertEquals(2, Util.parseMethodsCalls("bla,foo").size());
-		assertEquals("bla", ((Util.parseMethodsCalls("bla,foo").get(0)))[0]);
-		assertEquals("foo", ((Util.parseMethodsCalls("bla,foo").get(1)))[0]);
-		
-		assertEquals(2, Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").size());
-		assertEquals("bla", ((Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(0)))[0]);
-		assertEquals("foo", ((Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(1)))[0]);
-		assertEquals("test", ((Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(0)))[1]);
-		assertEquals("fark", ((Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(1)))[1]);
-		
-		assertEquals(2, Util.parseMethodsCalls("bla(test),foo(fark)").size());
-		assertEquals("bla", ((Util.parseMethodsCalls("bla(test),foo(fark)").get(0)))[0]);
-		assertEquals("foo", ((Util.parseMethodsCalls("bla(test),foo(fark)").get(1)))[0]);
-		assertEquals("test", ((Util.parseMethodsCalls("bla(test),foo(fark)").get(0)))[1]);
-		assertEquals("fark", ((Util.parseMethodsCalls("bla(test),foo(fark)").get(1)))[1]);
-	}
-	
-	
-	public void testFieldAndFormat(){
-		assertEquals("Eric von Hippel and Georg von Krogh", Util.getFieldAndFormat("[author]", entry, database));
-		
-		assertEquals("Eric von Hippel and Georg von Krogh", Util.getFieldAndFormat("author", entry, database));
-		
-		assertEquals(null, Util.getFieldAndFormat("[unknownkey]", entry, database));
-		
-		assertEquals(null, Util.getFieldAndFormat("[:]", entry, database));
-		
-		assertEquals(null, Util.getFieldAndFormat("[:lower]", entry, database));
-		
-		assertEquals("eric von hippel and georg von krogh", Util.getFieldAndFormat("[author:lower]", entry, database));
-		
-		assertEquals("HipKro03", Util.getFieldAndFormat("[bibtexkey]", entry, database));
-		
-		assertEquals("HipKro03", Util.getFieldAndFormat("[bibtexkey:]", entry, database));
-	}
-	
-	public void testUserFieldAndFormat(){
-	
-		String[] names = Globals.prefs.getStringArray(NameFormatterTab.NAME_FORMATER_KEY);
-		if (names == null)
-			names = new String[]{};
-		
-		String[] formats = Globals.prefs.getStringArray(NameFormatterTab.NAME_FORMATTER_VALUE);
-		if (formats == null)
-			formats = new String[]{};
-		
-		try {
-		
-			List<String> f = new LinkedList<String>(Arrays.asList(formats));
-			List<String> n = new LinkedList<String>(Arrays.asList(names));
-			
-			n.add("testMe123454321");
-			f.add("*@*@test");
-
-			String[] newNames = n.toArray(new String[n.size()]);
-			String[] newFormats = f.toArray(new String[f.size()]);
-			
-			Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATER_KEY, newNames);
-			Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATTER_VALUE, newFormats);
-			
-			assertEquals("testtest", Util.getFieldAndFormat("[author:testMe123454321]", entry, database));
-		
-		} finally {
-			Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATER_KEY, names);
-			Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATTER_VALUE, formats);
-		}
-	}
-	
-	
-	
-	public void testExpandBrackets(){
-				
-		assertEquals("", Util.expandBrackets("", entry, database));
-		
-		assertEquals("dropped", Util.expandBrackets("drop[unknownkey]ped", entry, database));
-		
-		assertEquals("Eric von Hippel and Georg von Krogh", 
-				Util.expandBrackets("[author]", entry, database));
-		
-		assertEquals("Eric von Hippel and Georg von Krogh are two famous authors.", 
-				Util.expandBrackets("[author] are two famous authors.", entry, database));
-
-		assertEquals("Eric von Hippel and Georg von Krogh are two famous authors.", 
-				Util.expandBrackets("[author] are two famous authors.", entry, database));
-
-		assertEquals("Eric von Hippel and Georg von Krogh have published Open Source Software and the \"Private-Collective\" Innovation Model: Issues for Organization Science in Organization Science.", 
-				Util.expandBrackets("[author] have published [title] in [journal].", entry, database));
-	}
-
-    public void testSanitizeUrl() {
-    
-            assertEquals("http://www.vg.no", Util.sanitizeUrl("http://www.vg.no"));
-            assertEquals("http://www.vg.no/fil%20e.html",
-                    Util.sanitizeUrl("http://www.vg.no/fil e.html"));
-            assertEquals("http://www.vg.no/fil%20e.html",
-                    Util.sanitizeUrl("http://www.vg.no/fil%20e.html"));
-            assertEquals("www.vg.no/fil%20e.html",
-                    Util.sanitizeUrl("www.vg.no/fil%20e.html"));
-
-            assertEquals("www.vg.no/fil%20e.html",
-                Util.sanitizeUrl("\\url{www.vg.no/fil%20e.html}"));
-            
-            /**
-             * DOI Test cases
-             */
-            assertEquals("http://dx.doi.org/10.1109/VLHCC.2004.20", Util.sanitizeUrl("10.1109/VLHCC.2004.20"));
-            assertEquals("http://dx.doi.org/10.1109/VLHCC.2004.20", Util.sanitizeUrl("doi://10.1109/VLHCC.2004.20"));
-            assertEquals("http://dx.doi.org/10.1109/VLHCC.2004.20", Util.sanitizeUrl("doi:/10.1109/VLHCC.2004.20"));
-            assertEquals("http://dx.doi.org/10.1109/VLHCC.2004.20", Util.sanitizeUrl("doi:10.1109/VLHCC.2004.20"));
-    
-            /**
-             * Additional testcases provided by Hannes Restel and Micha Beckmann.
-             */
-            assertEquals("ftp://www.vg.no", Util.sanitizeUrl("ftp://www.vg.no"));
-            assertEquals("file://doof.txt", Util.sanitizeUrl("file://doof.txt"));            
-            assertEquals("file:///", Util.sanitizeUrl("file:///"));
-            assertEquals("/src/doof.txt", Util.sanitizeUrl("/src/doof.txt"));
-            assertEquals("/", Util.sanitizeUrl("/"));
-            assertEquals("/home/user/example.txt", Util.sanitizeUrl("/home/user/example.txt"));
-    }
-
-    public void test2to4DigitsYear(){
-    	assertEquals("1990", Util.toFourDigitYear("1990"));
-    	assertEquals("190", Util.toFourDigitYear("190"));
-    	assertEquals("1990", Util.toFourDigitYear("90", 1990));
-    	assertEquals("1990", Util.toFourDigitYear("90", 1991));
-    	assertEquals("2020", Util.toFourDigitYear("20", 1990));
-    	assertEquals("1921", Util.toFourDigitYear("21", 1990));
-    	assertEquals("1922", Util.toFourDigitYear("22", 1990));
-    	assertEquals("2022", Util.toFourDigitYear("22", 1992));
-    	assertEquals("1999", Util.toFourDigitYear("99", 2001));
-    	assertEquals("1931", Util.toFourDigitYear("1931", 2001));
-    	assertEquals("2031", Util.toFourDigitYear("31", 2001));
-    	assertEquals("1932", Util.toFourDigitYear("32", 2001));
-    	assertEquals("1944", Util.toFourDigitYear("44", 2001));
-    	assertEquals("2011", Util.toFourDigitYear("11", 2001));
-    	
-    	int thisYear = Calendar.getInstance().get(Calendar.YEAR);
-    	int d2 = thisYear % 100;
-
-    	NumberFormat f = new DecimalFormat("00");
-    	
-    	for (int i = 0; i <= 30; i++){
-    		assertTrue("" + i, thisYear <= Integer.parseInt(Util.toFourDigitYear(f.format((d2 + i) % 100))));
-    	}
-    	for (int i = 0; i < 70; i++){
-    		assertTrue("" + i, thisYear >= Integer.parseInt(Util.toFourDigitYear(f.format((d2 - i + 100) % 100))));
-    	}
-    }
-    
-    public void testToMonthNumber(){
-
-    	assertEquals(0, Util.getMonthNumber("jan"));
-    	assertEquals(1, Util.getMonthNumber("feb"));
-    	assertEquals(2, Util.getMonthNumber("mar"));
-    	assertEquals(3, Util.getMonthNumber("apr"));
-    	assertEquals(4, Util.getMonthNumber("may"));
-    	assertEquals(5, Util.getMonthNumber("jun"));
-    	assertEquals(6, Util.getMonthNumber("jul"));
-    	assertEquals(7, Util.getMonthNumber("aug"));
-    	assertEquals(8, Util.getMonthNumber("sep"));
-    	assertEquals(9, Util.getMonthNumber("oct"));
-    	assertEquals(10,Util.getMonthNumber("nov"));
-    	assertEquals(11,Util.getMonthNumber("dec"));
-    	
-    	assertEquals(0, Util.getMonthNumber("#jan#"));
-    	assertEquals(1, Util.getMonthNumber("#feb#"));
-    	assertEquals(2, Util.getMonthNumber("#mar#"));
-    	assertEquals(3, Util.getMonthNumber("#apr#"));
-    	assertEquals(4, Util.getMonthNumber("#may#"));
-    	assertEquals(5, Util.getMonthNumber("#jun#"));
-    	assertEquals(6, Util.getMonthNumber("#jul#"));
-    	assertEquals(7, Util.getMonthNumber("#aug#"));
-    	assertEquals(8, Util.getMonthNumber("#sep#"));
-    	assertEquals(9, Util.getMonthNumber("#oct#"));
-    	assertEquals(10,Util.getMonthNumber("#nov#"));
-    	assertEquals(11,Util.getMonthNumber("#dec#"));
-    	
-    	assertEquals(0, Util.getMonthNumber("January"));
-    	assertEquals(1, Util.getMonthNumber("February"));
-    	assertEquals(2, Util.getMonthNumber("March"));
-    	assertEquals(3, Util.getMonthNumber("April"));
-    	assertEquals(4, Util.getMonthNumber("May"));
-    	assertEquals(5, Util.getMonthNumber("June"));
-    	assertEquals(6, Util.getMonthNumber("July"));
-    	assertEquals(7, Util.getMonthNumber("August"));
-    	assertEquals(8, Util.getMonthNumber("September"));
-    	assertEquals(9, Util.getMonthNumber("October"));
-    	assertEquals(10,Util.getMonthNumber("November"));
-    	assertEquals(11,Util.getMonthNumber("Decembre"));
-
-    	assertEquals(0, Util.getMonthNumber("01"));
-    	assertEquals(1, Util.getMonthNumber("02"));
-    	assertEquals(2, Util.getMonthNumber("03"));
-    	assertEquals(3, Util.getMonthNumber("04"));
-    	assertEquals(4, Util.getMonthNumber("05"));
-    	assertEquals(5, Util.getMonthNumber("06"));
-    	assertEquals(6, Util.getMonthNumber("07"));
-    	assertEquals(7, Util.getMonthNumber("08"));
-    	assertEquals(8, Util.getMonthNumber("09"));
-    	assertEquals(9, Util.getMonthNumber("10"));
-    	
-    	assertEquals(0, Util.getMonthNumber("1"));
-    	assertEquals(1, Util.getMonthNumber("2"));
-    	assertEquals(2, Util.getMonthNumber("3"));
-    	assertEquals(3, Util.getMonthNumber("4"));
-    	assertEquals(4, Util.getMonthNumber("5"));
-    	assertEquals(5, Util.getMonthNumber("6"));
-    	assertEquals(6, Util.getMonthNumber("7"));
-    	assertEquals(7, Util.getMonthNumber("8"));
-    	assertEquals(8, Util.getMonthNumber("9"));
-    	    	
-    	assertEquals(10,Util.getMonthNumber("11"));
-    	assertEquals(11,Util.getMonthNumber("12"));
-
-    	assertEquals(-1,Util.getMonthNumber(";lkjasdf"));
-    	assertEquals(-1,Util.getMonthNumber("3.2"));
-    	assertEquals(-1,Util.getMonthNumber("#test#"));
-    	assertEquals(-1,Util.getMonthNumber(""));
-    }
-    
-    public void testToUpperCharFirst(){
-    	
-    	assertEquals("", Util.toUpperFirstLetter(""));
-    	assertEquals("A", Util.toUpperFirstLetter("a"));
-    	assertEquals("A", Util.toUpperFirstLetter("A"));
-    	assertEquals("An", Util.toUpperFirstLetter("an"));
-    	assertEquals("AN", Util.toUpperFirstLetter("AN"));
-    	assertEquals("TestTest", Util.toUpperFirstLetter("testTest"));
-        
-    }
-    
-    /**
-     * Tests Util.checkForDOI(...) for right functionality 
-     */
-	public void testCheckForDoi(){
-		assertEquals(true, Util.checkForDOIwithHTTPprefix("http://doi.acm.org/10.1145/1294928.1294933"));
-		assertEquals(true, Util.checkForDOIwithHTTPprefix("http://dx.doi.org/10.1007/978-3-642-15618-2_19"));	
-		assertEquals(true, Util.checkForDOIwithHTTPprefix("http://dx.doi.org/10.1000/182"));	
-		
-		assertEquals(false, Util.checkForDOIwithHTTPprefix("http://www.xyz.com"));	
-		assertEquals(false, Util.checkForDOIwithHTTPprefix("http://dx.doing.org/fjdlfdsjfdlfdj.htm"));	
-		assertEquals(false, Util.checkForDOIwithHTTPprefix("thfjtfjglkjjlkk�lm5476576658796"));	
-
-		assertEquals(true, Util.checkForDOIwithHTTPprefix("http://doii.acm.org/10.1145/1294928.1294933"));
-		assertEquals(true, Util.checkForDOIwithHTTPprefix("http://dx.ddoi.org/10.1007/978-3-642-15618-2_19"));	
-		assertEquals(true, Util.checkForDOIwithHTTPprefix("http://dx.eoi.org/10.1000/182"));	
-	}
-	
-    /**
-     * Tests Util.parseDOI(...) for right functionality 
-     */
-	public void testParseDoi(){
-		assertEquals("10.1145/1294928.1294933", Util.getDOI("http://doi.acm.org/10.1145/1294928.1294933"));
-		assertEquals("10.1145/1294928.1294933", Util.getDOI("http://doi.acm.net/10.1145/1294928.1294933"));
-		assertEquals("10.1145/1294928.1294933", Util.getDOI("http://doi.acm.com/10.1145/1294928.1294933"));
-		assertEquals("10.1145/1294928.1294933", Util.getDOI("http://doi.acm.de/10.1145/1294928.1294933"));
-		
-		assertEquals("10.1007/978-3-642-15618-2_19", Util.getDOI("http://dx.doi.org/10.1007/978-3-642-15618-2_19"));
-		assertEquals("10.1007/978-3-642-15618-2_19", Util.getDOI("http://dx.doi.net/10.1007/978-3-642-15618-2_19"));
-		assertEquals("10.1007/978-3-642-15618-2_19", Util.getDOI("http://dx.doi.com/10.1007/978-3-642-15618-2_19"));
-		assertEquals("10.1007/978-3-642-15618-2_19", Util.getDOI("http://dx.doi.de/10.1007/978-3-642-15618-2_19"));
-
-		assertEquals("10.1000/182", Util.getDOI("http://dx.doi.org/10.1000/182"));
-
-		assertEquals("10.4108/ICST.COLLABORATECOM2009.8275", Util.getDOI("http://dx.doi.org/10.4108/ICST.COLLABORATECOM2009.8275"));
-        assertEquals("10.1109/MIC.2012.43", Util.getDOI("http://doi.ieeecomputersociety.org/10.1109/MIC.2012.43"));
-	}
-}
+package tests.net.sf.jabref;
+
+import java.awt.Container;
+import java.awt.Dialog;
+import java.io.StringReader;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.*;
+
+import javax.swing.JDialog;
+import javax.swing.JWindow;
+
+import junit.framework.TestCase;
+import net.sf.jabref.*;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.imports.ParserResult;
+
+public class UtilTest extends TestCase {
+
+	public void testNCase() {
+		assertEquals("", Util.nCase(""));
+		assertEquals("Hello world", Util.nCase("Hello World"));
+		assertEquals("A", Util.nCase("a"));
+		assertEquals("Aa", Util.nCase("AA"));
+	}
+
+	public void testGetPublicationDate(){
+	
+		assertEquals("2003-02", Util.getPublicationDate(BibtexParser
+			.singleFromString("@ARTICLE{HipKro03, year = {2003}, month = #FEB# }")));
+		
+		assertEquals("2003-03", Util.getPublicationDate(BibtexParser
+			.singleFromString("@ARTICLE{HipKro03, year = {2003}, month = 3 }")));
+		
+		assertEquals("2003", Util.getPublicationDate(BibtexParser
+			.singleFromString("@ARTICLE{HipKro03, year = {2003}}")));
+		
+		assertEquals(null, Util.getPublicationDate(BibtexParser
+			.singleFromString("@ARTICLE{HipKro03, month = 3 }")));
+		
+		assertEquals(null, Util.getPublicationDate(BibtexParser
+			.singleFromString("@ARTICLE{HipKro03, author={bla}}")));
+
+		assertEquals("2003-12", Util.getPublicationDate(BibtexParser
+			.singleFromString("@ARTICLE{HipKro03, year = {03}, month = #DEC# }")));
+		
+	}
+
+	public void testCheckName() {
+		assertEquals("aa.bib", Util.checkName("aa"));
+		assertEquals(".bib", Util.checkName(""));
+		assertEquals("a.bib", Util.checkName("a.bib"));
+		assertEquals("a.bib", Util.checkName("a"));
+		assertEquals("a.bb.bib", Util.checkName("a.bb"));
+	}
+
+	public void testCreateNeutralId() {
+		
+		HashSet<String> set = new HashSet<String>();
+		for (int i = 0; i < 10000; i++){
+			String string = Util.createNeutralId();
+			assertFalse(set.contains(string));
+			set.add(string);
+		}
+		
+	}
+
+	public void testPlaceDialog() {
+		Dialog d = new JDialog();
+		d.setSize(50, 50);
+		Container c = new JWindow();
+		c.setBounds(100, 200, 100, 50);
+		
+		Util.placeDialog(d, c);
+		assertEquals(125, d.getX());
+		assertEquals(200, d.getY());
+		
+		// Test upper left corner
+		c.setBounds(0,0,100,100);
+		d.setSize(200, 200);
+		
+		Util.placeDialog(d, c);
+		assertEquals(0, d.getX());
+		assertEquals(0, d.getY());
+	}
+
+	public void testParseField() {
+	
+		assertEquals("", Util.parseField(""));
+		
+		// Three basic types (references, { } and " ")
+		assertEquals("#hallo#", Util.parseField("hallo"));
+		assertEquals("hallo", Util.parseField("{hallo}"));
+		assertEquals("bye", Util.parseField("\"bye\""));
+		
+		// Concatenation
+		assertEquals("longlonglonglong", Util.parseField("\"long\" # \"long\" # \"long\" # \"long\""));
+		
+		assertEquals("hallo#bye#", Util.parseField("{hallo} # bye"));
+	}
+
+	public void testShaveString() {
+		
+		assertEquals(null, Util.shaveString(null));
+		assertEquals("", Util.shaveString(""));
+		assertEquals("aaa", Util.shaveString("   aaa\t\t\n\r"));
+		assertEquals("a", Util.shaveString("  {a}    "));
+		assertEquals("a", Util.shaveString("  \"a\"    "));
+		assertEquals("{a}", Util.shaveString("  {{a}}    "));
+		assertEquals("{a}", Util.shaveString("  \"{a}\"    "));
+		assertEquals("\"{a\"}", Util.shaveString("  \"{a\"}    "));
+	}
+
+	public void testCheckLegalKey() {
+
+		assertEquals("AAAA", Util.checkLegalKey("AA AA"));
+		assertEquals("SPECIALCHARS", Util.checkLegalKey("SPECIAL CHARS#{\\\"}~,^"));
+		assertEquals("AeaeaAAA", Util.checkLegalKey("������"));
+		assertEquals("", Util.checkLegalKey("\n\t\r"));
+	}
+
+	public void testReplaceSpecialCharacters() {
+		// Shouldn't German � be resolved to Ae
+		assertEquals("AeaeaAAA", Util.replaceSpecialCharacters("������"));
+		assertEquals("Hallo Arger", Util.replaceSpecialCharacters("Hallo Arger"));
+	}
+
+	public void testJoin() {
+		String[] s = "ab/cd/ed".split("/");
+		assertEquals("ab\\cd\\ed", Util.join(s, "\\", 0, s.length));
+		
+		assertEquals("cd\\ed", Util.join(s, "\\", 1, s.length));
+		
+		assertEquals("ed", Util.join(s, "\\", 2, s.length));
+		
+		assertEquals("", Util.join(s, "\\", 3, s.length)); 
+		
+		assertEquals("", Util.join(new String[]{}, "\\", 0, 0));
+	}
+	
+	public void testStripBrackets() {
+		assertEquals("foo", Util.stripBrackets("[foo]"));
+		assertEquals("[foo]", Util.stripBrackets("[[foo]]"));
+		assertEquals("foo", Util.stripBrackets("foo]"));
+		assertEquals("foo", Util.stripBrackets("[foo"));
+		assertEquals("", Util.stripBrackets(""));
+		assertEquals("", Util.stripBrackets("[]"));
+		assertEquals("", Util.stripBrackets("["));
+		assertEquals("", Util.stripBrackets("]"));
+		assertEquals("f[]f", Util.stripBrackets("f[]f"));
+	
+		try {
+			Util.stripBrackets(null);
+			fail();
+		} catch(NullPointerException npe){
+			
+		}
+	}
+	
+	BibtexDatabase database;
+	BibtexEntry entry;
+	
+	public void setUp(){
+		
+		StringReader reader = new StringReader(
+				"@ARTICLE{HipKro03," + "\n" + 
+				"  author = {Eric von Hippel and Georg von Krogh}," + "\n" + 
+				"  title = {Open Source Software and the \"Private-Collective\" Innovation Model: Issues for Organization Science}," + "\n" + 
+				"  journal = {Organization Science}," + "\n" + 
+				"  year = {2003}," + "\n" + 
+				"  volume = {14}," + "\n" + 
+				"  pages = {209--223}," + "\n" + 
+				"  number = {2}," + "\n" + 
+				"  address = {Institute for Operations Research and the Management Sciences (INFORMS), Linthicum, Maryland, USA}," + "\n" + 
+				"  doi = {http://dx.doi.org/10.1287/orsc.14.2.209.14992}," + "\n" + 
+				"  issn = {1526-5455}," + "\n" + 
+				"  publisher = {INFORMS}" + "\n" + 
+				"}");
+
+		BibtexParser parser = new BibtexParser(reader); 
+		ParserResult result = null;
+		try {
+			result = parser.parse();
+		} catch (Exception e){
+			fail();
+		}
+		database = result.getDatabase();
+		entry = database.getEntriesByKey("HipKro03")[0];
+		
+		assertNotNull(database);
+		assertNotNull(entry);
+	}
+
+	public void testParseMethodCalls(){
+		
+		assertEquals(1, Util.parseMethodsCalls("bla").size());
+		assertEquals("bla", ((Util.parseMethodsCalls("bla").get(0)))[0]);
+		
+		assertEquals(1, Util.parseMethodsCalls("bla,").size());
+		assertEquals("bla", ((Util.parseMethodsCalls("bla,").get(0)))[0]);
+
+		assertEquals(1, Util.parseMethodsCalls("_bla.bla.blub,").size());
+		assertEquals("_bla.bla.blub", ((Util.parseMethodsCalls("_bla.bla.blub,").get(0)))[0]);
+
+		
+		assertEquals(2, Util.parseMethodsCalls("bla,foo").size());
+		assertEquals("bla", ((Util.parseMethodsCalls("bla,foo").get(0)))[0]);
+		assertEquals("foo", ((Util.parseMethodsCalls("bla,foo").get(1)))[0]);
+		
+		assertEquals(2, Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").size());
+		assertEquals("bla", ((Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(0)))[0]);
+		assertEquals("foo", ((Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(1)))[0]);
+		assertEquals("test", ((Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(0)))[1]);
+		assertEquals("fark", ((Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(1)))[1]);
+		
+		assertEquals(2, Util.parseMethodsCalls("bla(test),foo(fark)").size());
+		assertEquals("bla", ((Util.parseMethodsCalls("bla(test),foo(fark)").get(0)))[0]);
+		assertEquals("foo", ((Util.parseMethodsCalls("bla(test),foo(fark)").get(1)))[0]);
+		assertEquals("test", ((Util.parseMethodsCalls("bla(test),foo(fark)").get(0)))[1]);
+		assertEquals("fark", ((Util.parseMethodsCalls("bla(test),foo(fark)").get(1)))[1]);
+	}
+	
+	
+	public void testFieldAndFormat(){
+		assertEquals("Eric von Hippel and Georg von Krogh", Util.getFieldAndFormat("[author]", entry, database));
+		
+		assertEquals("Eric von Hippel and Georg von Krogh", Util.getFieldAndFormat("author", entry, database));
+		
+		assertEquals(null, Util.getFieldAndFormat("[unknownkey]", entry, database));
+		
+		assertEquals(null, Util.getFieldAndFormat("[:]", entry, database));
+		
+		assertEquals(null, Util.getFieldAndFormat("[:lower]", entry, database));
+		
+		assertEquals("eric von hippel and georg von krogh", Util.getFieldAndFormat("[author:lower]", entry, database));
+		
+		assertEquals("HipKro03", Util.getFieldAndFormat("[bibtexkey]", entry, database));
+		
+		assertEquals("HipKro03", Util.getFieldAndFormat("[bibtexkey:]", entry, database));
+	}
+	
+	public void testUserFieldAndFormat(){
+	
+		String[] names = Globals.prefs.getStringArray(NameFormatterTab.NAME_FORMATER_KEY);
+		if (names == null)
+			names = new String[]{};
+		
+		String[] formats = Globals.prefs.getStringArray(NameFormatterTab.NAME_FORMATTER_VALUE);
+		if (formats == null)
+			formats = new String[]{};
+		
+		try {
+		
+			List<String> f = new LinkedList<String>(Arrays.asList(formats));
+			List<String> n = new LinkedList<String>(Arrays.asList(names));
+			
+			n.add("testMe123454321");
+			f.add("*@*@test");
+
+			String[] newNames = n.toArray(new String[n.size()]);
+			String[] newFormats = f.toArray(new String[f.size()]);
+			
+			Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATER_KEY, newNames);
+			Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATTER_VALUE, newFormats);
+			
+			assertEquals("testtest", Util.getFieldAndFormat("[author:testMe123454321]", entry, database));
+		
+		} finally {
+			Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATER_KEY, names);
+			Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATTER_VALUE, formats);
+		}
+	}
+	
+	
+	
+	public void testExpandBrackets(){
+				
+		assertEquals("", Util.expandBrackets("", entry, database));
+		
+		assertEquals("dropped", Util.expandBrackets("drop[unknownkey]ped", entry, database));
+		
+		assertEquals("Eric von Hippel and Georg von Krogh", 
+				Util.expandBrackets("[author]", entry, database));
+		
+		assertEquals("Eric von Hippel and Georg von Krogh are two famous authors.", 
+				Util.expandBrackets("[author] are two famous authors.", entry, database));
+
+		assertEquals("Eric von Hippel and Georg von Krogh are two famous authors.", 
+				Util.expandBrackets("[author] are two famous authors.", entry, database));
+
+		assertEquals("Eric von Hippel and Georg von Krogh have published Open Source Software and the \"Private-Collective\" Innovation Model: Issues for Organization Science in Organization Science.", 
+				Util.expandBrackets("[author] have published [title] in [journal].", entry, database));
+	}
+
+    public void testSanitizeUrl() {
+    
+            assertEquals("http://www.vg.no", Util.sanitizeUrl("http://www.vg.no"));
+            assertEquals("http://www.vg.no/fil%20e.html",
+                    Util.sanitizeUrl("http://www.vg.no/fil e.html"));
+            assertEquals("http://www.vg.no/fil%20e.html",
+                    Util.sanitizeUrl("http://www.vg.no/fil%20e.html"));
+            assertEquals("www.vg.no/fil%20e.html",
+                    Util.sanitizeUrl("www.vg.no/fil%20e.html"));
+
+            assertEquals("www.vg.no/fil%20e.html",
+                Util.sanitizeUrl("\\url{www.vg.no/fil%20e.html}"));
+            
+            /**
+             * DOI Test cases
+             */
+            assertEquals("http://dx.doi.org/10.1109/VLHCC.2004.20", Util.sanitizeUrl("10.1109/VLHCC.2004.20"));
+            assertEquals("http://dx.doi.org/10.1109/VLHCC.2004.20", Util.sanitizeUrl("doi://10.1109/VLHCC.2004.20"));
+            assertEquals("http://dx.doi.org/10.1109/VLHCC.2004.20", Util.sanitizeUrl("doi:/10.1109/VLHCC.2004.20"));
+            assertEquals("http://dx.doi.org/10.1109/VLHCC.2004.20", Util.sanitizeUrl("doi:10.1109/VLHCC.2004.20"));
+    
+            /**
+             * Additional testcases provided by Hannes Restel and Micha Beckmann.
+             */
+            assertEquals("ftp://www.vg.no", Util.sanitizeUrl("ftp://www.vg.no"));
+            assertEquals("file://doof.txt", Util.sanitizeUrl("file://doof.txt"));            
+            assertEquals("file:///", Util.sanitizeUrl("file:///"));
+            assertEquals("/src/doof.txt", Util.sanitizeUrl("/src/doof.txt"));
+            assertEquals("/", Util.sanitizeUrl("/"));
+            assertEquals("/home/user/example.txt", Util.sanitizeUrl("/home/user/example.txt"));
+    }
+
+    public void test2to4DigitsYear(){
+    	assertEquals("1990", Util.toFourDigitYear("1990"));
+    	assertEquals("190", Util.toFourDigitYear("190"));
+    	assertEquals("1990", Util.toFourDigitYear("90", 1990));
+    	assertEquals("1990", Util.toFourDigitYear("90", 1991));
+    	assertEquals("2020", Util.toFourDigitYear("20", 1990));
+    	assertEquals("1921", Util.toFourDigitYear("21", 1990));
+    	assertEquals("1922", Util.toFourDigitYear("22", 1990));
+    	assertEquals("2022", Util.toFourDigitYear("22", 1992));
+    	assertEquals("1999", Util.toFourDigitYear("99", 2001));
+    	assertEquals("1931", Util.toFourDigitYear("1931", 2001));
+    	assertEquals("2031", Util.toFourDigitYear("31", 2001));
+    	assertEquals("1932", Util.toFourDigitYear("32", 2001));
+    	assertEquals("1944", Util.toFourDigitYear("44", 2001));
+    	assertEquals("2011", Util.toFourDigitYear("11", 2001));
+    	
+    	int thisYear = Calendar.getInstance().get(Calendar.YEAR);
+    	int d2 = thisYear % 100;
+
+    	NumberFormat f = new DecimalFormat("00");
+    	
+    	for (int i = 0; i <= 30; i++){
+    		assertTrue("" + i, thisYear <= Integer.parseInt(Util.toFourDigitYear(f.format((d2 + i) % 100))));
+    	}
+    	for (int i = 0; i < 70; i++){
+    		assertTrue("" + i, thisYear >= Integer.parseInt(Util.toFourDigitYear(f.format((d2 - i + 100) % 100))));
+    	}
+    }
+    
+    public void testToMonthNumber(){
+
+    	assertEquals(0, Util.getMonthNumber("jan"));
+    	assertEquals(1, Util.getMonthNumber("feb"));
+    	assertEquals(2, Util.getMonthNumber("mar"));
+    	assertEquals(3, Util.getMonthNumber("apr"));
+    	assertEquals(4, Util.getMonthNumber("may"));
+    	assertEquals(5, Util.getMonthNumber("jun"));
+    	assertEquals(6, Util.getMonthNumber("jul"));
+    	assertEquals(7, Util.getMonthNumber("aug"));
+    	assertEquals(8, Util.getMonthNumber("sep"));
+    	assertEquals(9, Util.getMonthNumber("oct"));
+    	assertEquals(10,Util.getMonthNumber("nov"));
+    	assertEquals(11,Util.getMonthNumber("dec"));
+    	
+    	assertEquals(0, Util.getMonthNumber("#jan#"));
+    	assertEquals(1, Util.getMonthNumber("#feb#"));
+    	assertEquals(2, Util.getMonthNumber("#mar#"));
+    	assertEquals(3, Util.getMonthNumber("#apr#"));
+    	assertEquals(4, Util.getMonthNumber("#may#"));
+    	assertEquals(5, Util.getMonthNumber("#jun#"));
+    	assertEquals(6, Util.getMonthNumber("#jul#"));
+    	assertEquals(7, Util.getMonthNumber("#aug#"));
+    	assertEquals(8, Util.getMonthNumber("#sep#"));
+    	assertEquals(9, Util.getMonthNumber("#oct#"));
+    	assertEquals(10,Util.getMonthNumber("#nov#"));
+    	assertEquals(11,Util.getMonthNumber("#dec#"));
+    	
+    	assertEquals(0, Util.getMonthNumber("January"));
+    	assertEquals(1, Util.getMonthNumber("February"));
+    	assertEquals(2, Util.getMonthNumber("March"));
+    	assertEquals(3, Util.getMonthNumber("April"));
+    	assertEquals(4, Util.getMonthNumber("May"));
+    	assertEquals(5, Util.getMonthNumber("June"));
+    	assertEquals(6, Util.getMonthNumber("July"));
+    	assertEquals(7, Util.getMonthNumber("August"));
+    	assertEquals(8, Util.getMonthNumber("September"));
+    	assertEquals(9, Util.getMonthNumber("October"));
+    	assertEquals(10,Util.getMonthNumber("November"));
+    	assertEquals(11,Util.getMonthNumber("Decembre"));
+
+    	assertEquals(0, Util.getMonthNumber("01"));
+    	assertEquals(1, Util.getMonthNumber("02"));
+    	assertEquals(2, Util.getMonthNumber("03"));
+    	assertEquals(3, Util.getMonthNumber("04"));
+    	assertEquals(4, Util.getMonthNumber("05"));
+    	assertEquals(5, Util.getMonthNumber("06"));
+    	assertEquals(6, Util.getMonthNumber("07"));
+    	assertEquals(7, Util.getMonthNumber("08"));
+    	assertEquals(8, Util.getMonthNumber("09"));
+    	assertEquals(9, Util.getMonthNumber("10"));
+    	
+    	assertEquals(0, Util.getMonthNumber("1"));
+    	assertEquals(1, Util.getMonthNumber("2"));
+    	assertEquals(2, Util.getMonthNumber("3"));
+    	assertEquals(3, Util.getMonthNumber("4"));
+    	assertEquals(4, Util.getMonthNumber("5"));
+    	assertEquals(5, Util.getMonthNumber("6"));
+    	assertEquals(6, Util.getMonthNumber("7"));
+    	assertEquals(7, Util.getMonthNumber("8"));
+    	assertEquals(8, Util.getMonthNumber("9"));
+    	    	
+    	assertEquals(10,Util.getMonthNumber("11"));
+    	assertEquals(11,Util.getMonthNumber("12"));
+
+    	assertEquals(-1,Util.getMonthNumber(";lkjasdf"));
+    	assertEquals(-1,Util.getMonthNumber("3.2"));
+    	assertEquals(-1,Util.getMonthNumber("#test#"));
+    	assertEquals(-1,Util.getMonthNumber(""));
+    }
+    
+    public void testToUpperCharFirst(){
+    	
+    	assertEquals("", Util.toUpperFirstLetter(""));
+    	assertEquals("A", Util.toUpperFirstLetter("a"));
+    	assertEquals("A", Util.toUpperFirstLetter("A"));
+    	assertEquals("An", Util.toUpperFirstLetter("an"));
+    	assertEquals("AN", Util.toUpperFirstLetter("AN"));
+    	assertEquals("TestTest", Util.toUpperFirstLetter("testTest"));
+        
+    }
+    
+    /**
+     * Tests Util.checkForDOI(...) for right functionality 
+     */
+	public void testCheckForDoi(){
+		assertEquals(true, Util.checkForDOIwithHTTPprefix("http://doi.acm.org/10.1145/1294928.1294933"));
+		assertEquals(true, Util.checkForDOIwithHTTPprefix("http://dx.doi.org/10.1007/978-3-642-15618-2_19"));	
+		assertEquals(true, Util.checkForDOIwithHTTPprefix("http://dx.doi.org/10.1000/182"));	
+		
+		assertEquals(false, Util.checkForDOIwithHTTPprefix("http://www.xyz.com"));	
+		assertEquals(false, Util.checkForDOIwithHTTPprefix("http://dx.doing.org/fjdlfdsjfdlfdj.htm"));	
+		assertEquals(false, Util.checkForDOIwithHTTPprefix("thfjtfjglkjjlkk�lm5476576658796"));	
+
+		assertEquals(true, Util.checkForDOIwithHTTPprefix("http://doii.acm.org/10.1145/1294928.1294933"));
+		assertEquals(true, Util.checkForDOIwithHTTPprefix("http://dx.ddoi.org/10.1007/978-3-642-15618-2_19"));	
+		assertEquals(true, Util.checkForDOIwithHTTPprefix("http://dx.eoi.org/10.1000/182"));	
+	}
+	
+    /**
+     * Tests Util.parseDOI(...) for right functionality 
+     */
+	public void testParseDoi(){
+		assertEquals("10.1145/1294928.1294933", Util.getDOI("http://doi.acm.org/10.1145/1294928.1294933"));
+		assertEquals("10.1145/1294928.1294933", Util.getDOI("http://doi.acm.net/10.1145/1294928.1294933"));
+		assertEquals("10.1145/1294928.1294933", Util.getDOI("http://doi.acm.com/10.1145/1294928.1294933"));
+		assertEquals("10.1145/1294928.1294933", Util.getDOI("http://doi.acm.de/10.1145/1294928.1294933"));
+		
+		assertEquals("10.1007/978-3-642-15618-2_19", Util.getDOI("http://dx.doi.org/10.1007/978-3-642-15618-2_19"));
+		assertEquals("10.1007/978-3-642-15618-2_19", Util.getDOI("http://dx.doi.net/10.1007/978-3-642-15618-2_19"));
+		assertEquals("10.1007/978-3-642-15618-2_19", Util.getDOI("http://dx.doi.com/10.1007/978-3-642-15618-2_19"));
+		assertEquals("10.1007/978-3-642-15618-2_19", Util.getDOI("http://dx.doi.de/10.1007/978-3-642-15618-2_19"));
+
+		assertEquals("10.1000/182", Util.getDOI("http://dx.doi.org/10.1000/182"));
+
+		assertEquals("10.4108/ICST.COLLABORATECOM2009.8275", Util.getDOI("http://dx.doi.org/10.4108/ICST.COLLABORATECOM2009.8275"));
+        assertEquals("10.1109/MIC.2012.43", Util.getDOI("http://doi.ieeecomputersociety.org/10.1109/MIC.2012.43"));
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/bst/AllTests.java b/src/java/tests/net/sf/jabref/bst/AllTests.java
index 5fd934b..a1ac963 100644
--- a/src/java/tests/net/sf/jabref/bst/AllTests.java
+++ b/src/java/tests/net/sf/jabref/bst/AllTests.java
@@ -1,21 +1,21 @@
-package tests.net.sf.jabref.bst;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite("Test for tests.net.sf.jabref.bst.test");
-		//$JUnit-BEGIN$
-		suite.addTestSuite(BibtexNameFormatterTest.class);
-		suite.addTestSuite(BibtexCaseChangerTest.class);
-		suite.addTestSuite(TestVM.class);
-		suite.addTestSuite(BibtexWidthTest.class);
-		suite.addTestSuite(TextPrefixFunctionTest.class);
-		suite.addTestSuite(BibtexPurifyTest.class);
-		//$JUnit-END$
-		return suite;
-	}
-
-}
+package tests.net.sf.jabref.bst;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for tests.net.sf.jabref.bst.test");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(BibtexNameFormatterTest.class);
+		suite.addTestSuite(BibtexCaseChangerTest.class);
+		suite.addTestSuite(TestVM.class);
+		suite.addTestSuite(BibtexWidthTest.class);
+		suite.addTestSuite(TextPrefixFunctionTest.class);
+		suite.addTestSuite(BibtexPurifyTest.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/bst/BibtexCaseChangerTest.java b/src/java/tests/net/sf/jabref/bst/BibtexCaseChangerTest.java
index 2ba3aa4..a9c16fb 100644
--- a/src/java/tests/net/sf/jabref/bst/BibtexCaseChangerTest.java
+++ b/src/java/tests/net/sf/jabref/bst/BibtexCaseChangerTest.java
@@ -1,125 +1,125 @@
-package tests.net.sf.jabref.bst;
-
-import net.sf.jabref.bst.BibtexCaseChanger;
-import net.sf.jabref.bst.Warn;
-import junit.framework.TestCase;
-
-public class BibtexCaseChangerTest extends TestCase {
-
-	public void testChangeCase() {
-
-		assertCaseChangerT("i", "i");
-		assertCaseChangerL("i", "i");
-		assertCaseChangerU("I", "i");
-		assertCaseChangerT("0i~ ", "0I~ ");
-		assertCaseChangerL("0i~ ", "0I~ ");
-		assertCaseChangerU("0I~ ", "0I~ ");
-		assertCaseChangerT("Hi hi ", "Hi Hi ");
-		assertCaseChangerL("hi hi ", "Hi Hi ");
-		assertCaseChangerU("HI HI ", "Hi Hi ");
-		assertCaseChangerT("{\\oe}", "{\\oe}");
-		assertCaseChangerL("{\\oe}", "{\\oe}");
-		assertCaseChangerU("{\\OE}", "{\\oe}");
-		assertCaseChangerT("Hi {\\oe   }hi ", "Hi {\\oe   }Hi ");
-		assertCaseChangerL("hi {\\oe   }hi ", "Hi {\\oe   }Hi ");
-		assertCaseChangerU("HI {\\OE   }HI ", "Hi {\\oe   }Hi ");
-		assertCaseChangerT(
-			"Jonathan meyer and charles louis xavier joseph de la vall{\\'e}e poussin",
-			"Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
-		assertCaseChangerL(
-			"jonathan meyer and charles louis xavier joseph de la vall{\\'e}e poussin",
-			"Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
-		assertCaseChangerU(
-			"JONATHAN MEYER AND CHARLES LOUIS XAVIER JOSEPH DE LA VALL{\\'E}E POUSSIN",
-			"Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
-		assertCaseChangerT("{\\'e}", "{\\'e}");
-		assertCaseChangerL("{\\'e}", "{\\'e}");
-		assertCaseChangerU("{\\'E}", "{\\'e}");
-		assertCaseChangerT("{\\'{E}}douard masterly", "{\\'{E}}douard Masterly");
-		assertCaseChangerL("{\\'{e}}douard masterly", "{\\'{E}}douard Masterly");
-		assertCaseChangerU("{\\'{E}}DOUARD MASTERLY", "{\\'{E}}douard Masterly");
-		assertCaseChangerT("Ulrich {\\\"{u}}nderwood and ned {\\~n}et and paul {\\={p}}ot",
-			"Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
-		assertCaseChangerL("ulrich {\\\"{u}}nderwood and ned {\\~n}et and paul {\\={p}}ot",
-			"Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
-		assertCaseChangerU("ULRICH {\\\"{U}}NDERWOOD AND NED {\\~N}ET AND PAUL {\\={P}}OT",
-			"Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
-		assertCaseChangerT("An {$O(n \\log n / \\! \\log\\log n)$} sorting algorithm",
-			"An {$O(n \\log n / \\! \\log\\log n)$} Sorting Algorithm");
-		assertCaseChangerL("an {$O(n \\log n / \\! \\log\\log n)$} sorting algorithm",
-			"An {$O(n \\log n / \\! \\log\\log n)$} Sorting Algorithm");
-		assertCaseChangerU("AN {$O(n \\log n / \\! \\log\\log n)$} SORTING ALGORITHM",
-			"An {$O(n \\log n / \\! \\log\\log n)$} Sorting Algorithm");
-
-		assertCaseChangerT("hallo", "hallo");
-		assertCaseChangerT("Hallo", "HAllo");
-		assertCaseChangerT("Hallo world", "HAllo World");
-		assertCaseChangerT("Hallo world. how", "HAllo WORLD. HOW");
-		assertCaseChangerT("Hallo {WORLD}. how", "HAllo {WORLD}. HOW");
-		assertCaseChangerT("Hallo {\\world}. how", "HAllo {\\WORLD}. HOW");
-
-		assertCaseChangerL("hallo", "hallo");
-		assertCaseChangerL("hallo", "HAllo");
-		assertCaseChangerL("hallo world", "HAllo World");
-		assertCaseChangerL("hallo world. how", "HAllo WORLD. HOW");
-		assertCaseChangerL("hallo {worLD}. how", "HAllo {worLD}. HOW");
-		assertCaseChangerL("hallo {\\world}. how", "HAllo {\\WORLD}. HOW");
-
-		assertCaseChangerU("HALLO", "hallo");
-		assertCaseChangerU("HALLO", "HAllo");
-		assertCaseChangerU("HALLO WORLD", "HAllo World");
-		assertCaseChangerU("HALLO WORLD. HOW", "HAllo World. How");
-		assertCaseChangerU("HALLO {worLD}. HOW", "HAllo {worLD}. how");
-		assertCaseChangerU("HALLO {\\WORLD}. HOW", "HAllo {\\woRld}. hoW");
-
-		assertCaseChangerT("On notions of information transfer in {VLSI} circuits",
-			"On Notions of Information Transfer in {VLSI} Circuits");
-
-	}
-
-	public void testColon() {
-
-		assertCaseChangerT("Hallo world: How", "HAllo WORLD: HOW");
-		assertCaseChangerT("Hallo world! how", "HAllo WORLD! HOW");
-		assertCaseChangerT("Hallo world? how", "HAllo WORLD? HOW");
-		assertCaseChangerT("Hallo world. how", "HAllo WORLD. HOW");
-		assertCaseChangerT("Hallo world, how", "HAllo WORLD, HOW");
-		assertCaseChangerT("Hallo world; how", "HAllo WORLD; HOW");
-		assertCaseChangerT("Hallo world- how", "HAllo WORLD- HOW");
-	}
-
-	private void assertCaseChangerT(final String string, final String string2) {
-		assertEquals(string, BibtexCaseChanger.changeCase(string2, 't', new Warn() {
-
-			public void warn(String s) {
-				fail("Should not Warn (" + s + ")! changeCase('t') should be " + string + " for "
-					+ string2);
-
-			}
-		}));
-
-	}
-
-	private void assertCaseChangerL(final String string, final String string2) {
-		assertEquals(string, BibtexCaseChanger.changeCase(string2, 'l', new Warn() {
-
-			public void warn(String s) {
-				fail("Should not Warn (" + s + ")! changeCase('l') should be " + string + " for "
-					+ string2);
-
-			}
-		}));
-
-	}
-
-	private void assertCaseChangerU(final String string, final String string2) {
-		assertEquals(string, BibtexCaseChanger.changeCase(string2, 'u', new Warn() {
-			public void warn(String s) {
-				fail("Should not Warn (" + s + ")! changeCase('u') should be " + string + " for "
-					+ string2);
-
-			}
-		}));
-
-	}
-}
+package tests.net.sf.jabref.bst;
+
+import net.sf.jabref.bst.BibtexCaseChanger;
+import net.sf.jabref.bst.Warn;
+import junit.framework.TestCase;
+
+public class BibtexCaseChangerTest extends TestCase {
+
+	public void testChangeCase() {
+
+		assertCaseChangerT("i", "i");
+		assertCaseChangerL("i", "i");
+		assertCaseChangerU("I", "i");
+		assertCaseChangerT("0i~ ", "0I~ ");
+		assertCaseChangerL("0i~ ", "0I~ ");
+		assertCaseChangerU("0I~ ", "0I~ ");
+		assertCaseChangerT("Hi hi ", "Hi Hi ");
+		assertCaseChangerL("hi hi ", "Hi Hi ");
+		assertCaseChangerU("HI HI ", "Hi Hi ");
+		assertCaseChangerT("{\\oe}", "{\\oe}");
+		assertCaseChangerL("{\\oe}", "{\\oe}");
+		assertCaseChangerU("{\\OE}", "{\\oe}");
+		assertCaseChangerT("Hi {\\oe   }hi ", "Hi {\\oe   }Hi ");
+		assertCaseChangerL("hi {\\oe   }hi ", "Hi {\\oe   }Hi ");
+		assertCaseChangerU("HI {\\OE   }HI ", "Hi {\\oe   }Hi ");
+		assertCaseChangerT(
+			"Jonathan meyer and charles louis xavier joseph de la vall{\\'e}e poussin",
+			"Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
+		assertCaseChangerL(
+			"jonathan meyer and charles louis xavier joseph de la vall{\\'e}e poussin",
+			"Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
+		assertCaseChangerU(
+			"JONATHAN MEYER AND CHARLES LOUIS XAVIER JOSEPH DE LA VALL{\\'E}E POUSSIN",
+			"Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
+		assertCaseChangerT("{\\'e}", "{\\'e}");
+		assertCaseChangerL("{\\'e}", "{\\'e}");
+		assertCaseChangerU("{\\'E}", "{\\'e}");
+		assertCaseChangerT("{\\'{E}}douard masterly", "{\\'{E}}douard Masterly");
+		assertCaseChangerL("{\\'{e}}douard masterly", "{\\'{E}}douard Masterly");
+		assertCaseChangerU("{\\'{E}}DOUARD MASTERLY", "{\\'{E}}douard Masterly");
+		assertCaseChangerT("Ulrich {\\\"{u}}nderwood and ned {\\~n}et and paul {\\={p}}ot",
+			"Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
+		assertCaseChangerL("ulrich {\\\"{u}}nderwood and ned {\\~n}et and paul {\\={p}}ot",
+			"Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
+		assertCaseChangerU("ULRICH {\\\"{U}}NDERWOOD AND NED {\\~N}ET AND PAUL {\\={P}}OT",
+			"Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
+		assertCaseChangerT("An {$O(n \\log n / \\! \\log\\log n)$} sorting algorithm",
+			"An {$O(n \\log n / \\! \\log\\log n)$} Sorting Algorithm");
+		assertCaseChangerL("an {$O(n \\log n / \\! \\log\\log n)$} sorting algorithm",
+			"An {$O(n \\log n / \\! \\log\\log n)$} Sorting Algorithm");
+		assertCaseChangerU("AN {$O(n \\log n / \\! \\log\\log n)$} SORTING ALGORITHM",
+			"An {$O(n \\log n / \\! \\log\\log n)$} Sorting Algorithm");
+
+		assertCaseChangerT("hallo", "hallo");
+		assertCaseChangerT("Hallo", "HAllo");
+		assertCaseChangerT("Hallo world", "HAllo World");
+		assertCaseChangerT("Hallo world. how", "HAllo WORLD. HOW");
+		assertCaseChangerT("Hallo {WORLD}. how", "HAllo {WORLD}. HOW");
+		assertCaseChangerT("Hallo {\\world}. how", "HAllo {\\WORLD}. HOW");
+
+		assertCaseChangerL("hallo", "hallo");
+		assertCaseChangerL("hallo", "HAllo");
+		assertCaseChangerL("hallo world", "HAllo World");
+		assertCaseChangerL("hallo world. how", "HAllo WORLD. HOW");
+		assertCaseChangerL("hallo {worLD}. how", "HAllo {worLD}. HOW");
+		assertCaseChangerL("hallo {\\world}. how", "HAllo {\\WORLD}. HOW");
+
+		assertCaseChangerU("HALLO", "hallo");
+		assertCaseChangerU("HALLO", "HAllo");
+		assertCaseChangerU("HALLO WORLD", "HAllo World");
+		assertCaseChangerU("HALLO WORLD. HOW", "HAllo World. How");
+		assertCaseChangerU("HALLO {worLD}. HOW", "HAllo {worLD}. how");
+		assertCaseChangerU("HALLO {\\WORLD}. HOW", "HAllo {\\woRld}. hoW");
+
+		assertCaseChangerT("On notions of information transfer in {VLSI} circuits",
+			"On Notions of Information Transfer in {VLSI} Circuits");
+
+	}
+
+	public void testColon() {
+
+		assertCaseChangerT("Hallo world: How", "HAllo WORLD: HOW");
+		assertCaseChangerT("Hallo world! how", "HAllo WORLD! HOW");
+		assertCaseChangerT("Hallo world? how", "HAllo WORLD? HOW");
+		assertCaseChangerT("Hallo world. how", "HAllo WORLD. HOW");
+		assertCaseChangerT("Hallo world, how", "HAllo WORLD, HOW");
+		assertCaseChangerT("Hallo world; how", "HAllo WORLD; HOW");
+		assertCaseChangerT("Hallo world- how", "HAllo WORLD- HOW");
+	}
+
+	private void assertCaseChangerT(final String string, final String string2) {
+		assertEquals(string, BibtexCaseChanger.changeCase(string2, 't', new Warn() {
+
+			public void warn(String s) {
+				fail("Should not Warn (" + s + ")! changeCase('t') should be " + string + " for "
+					+ string2);
+
+			}
+		}));
+
+	}
+
+	private void assertCaseChangerL(final String string, final String string2) {
+		assertEquals(string, BibtexCaseChanger.changeCase(string2, 'l', new Warn() {
+
+			public void warn(String s) {
+				fail("Should not Warn (" + s + ")! changeCase('l') should be " + string + " for "
+					+ string2);
+
+			}
+		}));
+
+	}
+
+	private void assertCaseChangerU(final String string, final String string2) {
+		assertEquals(string, BibtexCaseChanger.changeCase(string2, 'u', new Warn() {
+			public void warn(String s) {
+				fail("Should not Warn (" + s + ")! changeCase('u') should be " + string + " for "
+					+ string2);
+
+			}
+		}));
+
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/bst/BibtexNameFormatterTest.java b/src/java/tests/net/sf/jabref/bst/BibtexNameFormatterTest.java
index c32bf29..0db5b84 100644
--- a/src/java/tests/net/sf/jabref/bst/BibtexNameFormatterTest.java
+++ b/src/java/tests/net/sf/jabref/bst/BibtexNameFormatterTest.java
@@ -1,135 +1,135 @@
-package tests.net.sf.jabref.bst;
-
-import junit.framework.TestCase;
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.bst.BibtexNameFormatter;
-import net.sf.jabref.bst.Warn;
-
-public class BibtexNameFormatterTest extends TestCase {
-
-	public void testFormatName() {
-		{
-			AuthorList al = AuthorList
-				.getAuthorList("Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
-
-			assertEquals("de~laVall{\\'e}e~PoussinCharles Louis Xavier~Joseph", BibtexNameFormatter.formatName(al
-				.getAuthor(0), "{vv}{ll}{jj}{ff}", new Warn() {
-				public void warn(String s) {
-					fail(s);
-				}
-			}));
-		}
-		
-		{
-			AuthorList al = AuthorList
-				.getAuthorList("Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
-
-			assertEquals("de~la Vall{\\'e}e~Poussin, C.~L. X.~J.", BibtexNameFormatter.formatName(al
-				.getAuthor(0), "{vv~}{ll}{, jj}{, f.}", new Warn() {
-				public void warn(String s) {
-					fail(s);
-				}
-			}));
-		}
-
-		{
-			AuthorList al = AuthorList
-				.getAuthorList("Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
-
-			assertEquals("de~la Vall{\\'e}e~Poussin, C.~L. X.~J?", BibtexNameFormatter.formatName(al
-				.getAuthor(0), "{vv~}{ll}{, jj}{, f}?", new Warn() {
-				public void warn(String s) {
-					fail(s);
-				}
-			}));
-		}
-
-		{
-			AuthorList al = AuthorList
-				.getAuthorList("Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
-
-			assertEquals("dlVP", BibtexNameFormatter.formatName(al.getAuthor(0), "{v{}}{l{}}",
-				new Warn() {
-					public void warn(String s) {
-						fail(s);
-					}
-				}));
-		}
-		
-		assertNameFormatA("Meyer, J?", "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
-			assertNameFormatB("J.~Meyer", "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
-			assertNameFormatC("Jonathan Meyer", "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
-			assertNameFormatA("Masterly, {\\'{E}}?", "{\\'{E}}douard Masterly");
-			assertNameFormatB("{\\'{E}}.~Masterly", "{\\'{E}}douard Masterly");
-			assertNameFormatC("{\\'{E}}douard Masterly", "{\\'{E}}douard Masterly");
-			assertNameFormatA("{\\\"{U}}nderwood, U?", "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
-			assertNameFormatB("U.~{\\\"{U}}nderwood", "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
-			assertNameFormatC("Ulrich {\\\"{U}}nderwood", "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
-			assertNameFormatA("Victor, P.~{\\'E}?", "Paul {\\'E}mile Victor and and de la Cierva y Codorn{\\�\\i}u, Juan");
-			assertNameFormatB("P.~{\\'E}. Victor", "Paul {\\'E}mile Victor and and de la Cierva y Codorn{\\�\\i}u, Juan");
-			assertNameFormatC("Paul~{\\'E}mile Victor", "Paul {\\'E}mile Victor and and de la Cierva y Codorn{\\�\\i}u, Juan");
-		
-	}
-
-	private void assertNameFormat(String string, String string2, int which, String format){
-		assertEquals(string, BibtexNameFormatter.formatName(string2, which, format,
-			new Warn() {
-				public void warn(String s) {
-					fail(s);
-				}
-			}));
-	}
-	
-	private void assertNameFormatC(String string, String string2) {
-		assertNameFormat(string, string2, 1, "{ff }{vv }{ll}{ jj}");
-	}
-
-	private void assertNameFormatB(String string, String string2) {
-		assertNameFormat(string, string2, 1, "{f.~}{vv~}{ll}{, jj}");
-	}
-
-	private void assertNameFormatA(String string, String string2) {
-		assertNameFormat(string, string2, 1, "{vv~}{ll}{, jj}{, f}?");
-	}
-
-	public void testConsumeToMatchingBrace() {
-		{
-			StringBuffer sb = new StringBuffer();
-			assertEquals(6, BibtexNameFormatter.consumeToMatchingBrace(sb, "{HELLO} {WORLD}"
-				.toCharArray(), 0));
-			assertEquals("{HELLO}", sb.toString());
-		}
-		{
-			StringBuffer sb = new StringBuffer();
-			assertEquals(18, BibtexNameFormatter.consumeToMatchingBrace(sb, "{HE{L{}L}O} {WORLD}"
-				.toCharArray(), 12));
-			assertEquals("{WORLD}", sb.toString());
-		}
-		{
-			StringBuffer sb = new StringBuffer();
-			assertEquals(10, BibtexNameFormatter.consumeToMatchingBrace(sb, "{HE{L{}L}O} {WORLD}"
-				.toCharArray(), 0));
-			assertEquals("{HE{L{}L}O}", sb.toString());
-		}
-	}
-
-	public void testGetFirstCharOfString() {
-		assertEquals("C", BibtexNameFormatter.getFirstCharOfString("Charles"));
-		assertEquals("V", BibtexNameFormatter.getFirstCharOfString("Vall{\\'e}e"));
-		assertEquals("{\\'e}", BibtexNameFormatter.getFirstCharOfString("{\\'e}"));
-		assertEquals("{\\'e", BibtexNameFormatter.getFirstCharOfString("{\\'e"));
-		assertEquals("E", BibtexNameFormatter.getFirstCharOfString("{E"));
-	}
-
-	public void testNumberOfChars() {
-
-		assertEquals(6, BibtexNameFormatter.numberOfChars("Vall{\\'e}e", -1));
-		assertEquals(2, BibtexNameFormatter.numberOfChars("Vall{\\'e}e", 2));
-		assertEquals(1, BibtexNameFormatter.numberOfChars("Vall{\\'e}e", 1));
-		assertEquals(6, BibtexNameFormatter.numberOfChars("Vall{\\'e}e", 6));
-		assertEquals(6, BibtexNameFormatter.numberOfChars("Vall{\\'e}e", 7));
-		assertEquals(8, BibtexNameFormatter.numberOfChars("Vall{e}e", -1));
-		assertEquals(6, BibtexNameFormatter.numberOfChars("Vall{\\'e this will be skipped}e", -1));
-	}
-
-}
+package tests.net.sf.jabref.bst;
+
+import junit.framework.TestCase;
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.bst.BibtexNameFormatter;
+import net.sf.jabref.bst.Warn;
+
+public class BibtexNameFormatterTest extends TestCase {
+
+	public void testFormatName() {
+		{
+			AuthorList al = AuthorList
+				.getAuthorList("Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
+
+			assertEquals("de~laVall{\\'e}e~PoussinCharles Louis Xavier~Joseph", BibtexNameFormatter.formatName(al
+				.getAuthor(0), "{vv}{ll}{jj}{ff}", new Warn() {
+				public void warn(String s) {
+					fail(s);
+				}
+			}));
+		}
+		
+		{
+			AuthorList al = AuthorList
+				.getAuthorList("Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
+
+			assertEquals("de~la Vall{\\'e}e~Poussin, C.~L. X.~J.", BibtexNameFormatter.formatName(al
+				.getAuthor(0), "{vv~}{ll}{, jj}{, f.}", new Warn() {
+				public void warn(String s) {
+					fail(s);
+				}
+			}));
+		}
+
+		{
+			AuthorList al = AuthorList
+				.getAuthorList("Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
+
+			assertEquals("de~la Vall{\\'e}e~Poussin, C.~L. X.~J?", BibtexNameFormatter.formatName(al
+				.getAuthor(0), "{vv~}{ll}{, jj}{, f}?", new Warn() {
+				public void warn(String s) {
+					fail(s);
+				}
+			}));
+		}
+
+		{
+			AuthorList al = AuthorList
+				.getAuthorList("Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
+
+			assertEquals("dlVP", BibtexNameFormatter.formatName(al.getAuthor(0), "{v{}}{l{}}",
+				new Warn() {
+					public void warn(String s) {
+						fail(s);
+					}
+				}));
+		}
+		
+		assertNameFormatA("Meyer, J?", "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
+			assertNameFormatB("J.~Meyer", "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
+			assertNameFormatC("Jonathan Meyer", "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
+			assertNameFormatA("Masterly, {\\'{E}}?", "{\\'{E}}douard Masterly");
+			assertNameFormatB("{\\'{E}}.~Masterly", "{\\'{E}}douard Masterly");
+			assertNameFormatC("{\\'{E}}douard Masterly", "{\\'{E}}douard Masterly");
+			assertNameFormatA("{\\\"{U}}nderwood, U?", "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
+			assertNameFormatB("U.~{\\\"{U}}nderwood", "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
+			assertNameFormatC("Ulrich {\\\"{U}}nderwood", "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
+			assertNameFormatA("Victor, P.~{\\'E}?", "Paul {\\'E}mile Victor and and de la Cierva y Codorn{\\�\\i}u, Juan");
+			assertNameFormatB("P.~{\\'E}. Victor", "Paul {\\'E}mile Victor and and de la Cierva y Codorn{\\�\\i}u, Juan");
+			assertNameFormatC("Paul~{\\'E}mile Victor", "Paul {\\'E}mile Victor and and de la Cierva y Codorn{\\�\\i}u, Juan");
+		
+	}
+
+	private void assertNameFormat(String string, String string2, int which, String format){
+		assertEquals(string, BibtexNameFormatter.formatName(string2, which, format,
+			new Warn() {
+				public void warn(String s) {
+					fail(s);
+				}
+			}));
+	}
+	
+	private void assertNameFormatC(String string, String string2) {
+		assertNameFormat(string, string2, 1, "{ff }{vv }{ll}{ jj}");
+	}
+
+	private void assertNameFormatB(String string, String string2) {
+		assertNameFormat(string, string2, 1, "{f.~}{vv~}{ll}{, jj}");
+	}
+
+	private void assertNameFormatA(String string, String string2) {
+		assertNameFormat(string, string2, 1, "{vv~}{ll}{, jj}{, f}?");
+	}
+
+	public void testConsumeToMatchingBrace() {
+		{
+			StringBuffer sb = new StringBuffer();
+			assertEquals(6, BibtexNameFormatter.consumeToMatchingBrace(sb, "{HELLO} {WORLD}"
+				.toCharArray(), 0));
+			assertEquals("{HELLO}", sb.toString());
+		}
+		{
+			StringBuffer sb = new StringBuffer();
+			assertEquals(18, BibtexNameFormatter.consumeToMatchingBrace(sb, "{HE{L{}L}O} {WORLD}"
+				.toCharArray(), 12));
+			assertEquals("{WORLD}", sb.toString());
+		}
+		{
+			StringBuffer sb = new StringBuffer();
+			assertEquals(10, BibtexNameFormatter.consumeToMatchingBrace(sb, "{HE{L{}L}O} {WORLD}"
+				.toCharArray(), 0));
+			assertEquals("{HE{L{}L}O}", sb.toString());
+		}
+	}
+
+	public void testGetFirstCharOfString() {
+		assertEquals("C", BibtexNameFormatter.getFirstCharOfString("Charles"));
+		assertEquals("V", BibtexNameFormatter.getFirstCharOfString("Vall{\\'e}e"));
+		assertEquals("{\\'e}", BibtexNameFormatter.getFirstCharOfString("{\\'e}"));
+		assertEquals("{\\'e", BibtexNameFormatter.getFirstCharOfString("{\\'e"));
+		assertEquals("E", BibtexNameFormatter.getFirstCharOfString("{E"));
+	}
+
+	public void testNumberOfChars() {
+
+		assertEquals(6, BibtexNameFormatter.numberOfChars("Vall{\\'e}e", -1));
+		assertEquals(2, BibtexNameFormatter.numberOfChars("Vall{\\'e}e", 2));
+		assertEquals(1, BibtexNameFormatter.numberOfChars("Vall{\\'e}e", 1));
+		assertEquals(6, BibtexNameFormatter.numberOfChars("Vall{\\'e}e", 6));
+		assertEquals(6, BibtexNameFormatter.numberOfChars("Vall{\\'e}e", 7));
+		assertEquals(8, BibtexNameFormatter.numberOfChars("Vall{e}e", -1));
+		assertEquals(6, BibtexNameFormatter.numberOfChars("Vall{\\'e this will be skipped}e", -1));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/bst/BibtexPurifyTest.java b/src/java/tests/net/sf/jabref/bst/BibtexPurifyTest.java
index 265c634..2395678 100644
--- a/src/java/tests/net/sf/jabref/bst/BibtexPurifyTest.java
+++ b/src/java/tests/net/sf/jabref/bst/BibtexPurifyTest.java
@@ -1,27 +1,27 @@
-package tests.net.sf.jabref.bst;
-
-import net.sf.jabref.bst.BibtexPurify;
-import net.sf.jabref.bst.Warn;
-import junit.framework.TestCase;
-
-public class BibtexPurifyTest extends TestCase {
-
-	public void testPurify() {
-		assertPurify("i", "i");
-		assertPurify("0I  ", "0I~ ");
-		assertPurify("Hi Hi ", "Hi Hi ");
-		assertPurify("oe", "{\\oe}");
-		assertPurify("Hi oeHi ", "Hi {\\oe   }Hi ");
-		assertPurify("Jonathan Meyer and Charles Louis Xavier Joseph de la Vallee Poussin", "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
-		assertPurify("e", "{\\'e}");
-		assertPurify("Edouard Masterly", "{\\'{E}}douard Masterly");
-		assertPurify("Ulrich Underwood and Ned Net and Paul Pot", "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");}
-
-	private void assertPurify(final String string, final String string2) {
-		assertEquals(string, BibtexPurify.purify(string2, new Warn() {
-			public void warn(String s) {
-				fail("Should not Warn ("+s+")! purify should be " + string + " for " + string2);
-			}
-		}));
-	}
-}
+package tests.net.sf.jabref.bst;
+
+import net.sf.jabref.bst.BibtexPurify;
+import net.sf.jabref.bst.Warn;
+import junit.framework.TestCase;
+
+public class BibtexPurifyTest extends TestCase {
+
+	public void testPurify() {
+		assertPurify("i", "i");
+		assertPurify("0I  ", "0I~ ");
+		assertPurify("Hi Hi ", "Hi Hi ");
+		assertPurify("oe", "{\\oe}");
+		assertPurify("Hi oeHi ", "Hi {\\oe   }Hi ");
+		assertPurify("Jonathan Meyer and Charles Louis Xavier Joseph de la Vallee Poussin", "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
+		assertPurify("e", "{\\'e}");
+		assertPurify("Edouard Masterly", "{\\'{E}}douard Masterly");
+		assertPurify("Ulrich Underwood and Ned Net and Paul Pot", "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");}
+
+	private void assertPurify(final String string, final String string2) {
+		assertEquals(string, BibtexPurify.purify(string2, new Warn() {
+			public void warn(String s) {
+				fail("Should not Warn ("+s+")! purify should be " + string + " for " + string2);
+			}
+		}));
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/bst/BibtexWidthTest.java b/src/java/tests/net/sf/jabref/bst/BibtexWidthTest.java
index 44ee60b..261eceb 100644
--- a/src/java/tests/net/sf/jabref/bst/BibtexWidthTest.java
+++ b/src/java/tests/net/sf/jabref/bst/BibtexWidthTest.java
@@ -1,78 +1,78 @@
-package tests.net.sf.jabref.bst;
-
-import net.sf.jabref.bst.BibtexWidth;
-import net.sf.jabref.bst.Warn;
-import junit.framework.TestCase;
-
-/**
- * How to create these test using Bibtex:
- * 
- * Execute this charWidth.bst with the following charWidth.aux:
- * 
- * 
- * <code>
- ENTRY{}{}{}
- FUNCTION{test}
- {
- "i" width$ int.to.str$ write$ newline$
- "0I~ " width$ int.to.str$ write$ newline$
- "Hi Hi " width$ int.to.str$ write$ newline$
- "{\oe}" width$ int.to.str$ write$ newline$
- "Hi {\oe   }Hi " width$ int.to.str$ write$ newline$
- }
- READ
- EXECUTE{test}
- </code>
- * 
- * <code>
- \bibstyle{charWidth}
- \citation{canh05}
- \bibdata{test}
- \bibcite{canh05}{CMM{$^{+}$}05}
- </code>
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class BibtexWidthTest extends TestCase {
-
-	public void assertBibtexWidth(final int i, final String string) {
-		assertEquals(i, BibtexWidth.width(string, new Warn() {
-			public void warn(String s) {
-				fail("Should not Warn! Width should be " + i + " for " + string);
-			}
-		}));
-	}
-
-	public void testWidth() {
-
-		assertBibtexWidth(278, "i");
-
-		assertBibtexWidth(1639, "0I~ "); 
-
-		assertBibtexWidth(2612, "Hi Hi ");
-
-		assertBibtexWidth(778, "{\\oe}");
-
-		assertBibtexWidth(3390, "Hi {\\oe   }Hi ");
-		
-		assertBibtexWidth(444, "{\\'e}");
-		
-		assertBibtexWidth(19762, "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
-
-		assertBibtexWidth(7861, "{\\'{E}}douard Masterly");
-		
-		assertBibtexWidth(30514, "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
-	
-	}
-	
-
-	public void testGetCharWidth() {
-		assertEquals(500, BibtexWidth.getCharWidth('0'));
-		assertEquals(361, BibtexWidth.getCharWidth('I'));
-		assertEquals(500, BibtexWidth.getCharWidth('~'));
-		assertEquals(500, BibtexWidth.getCharWidth('}'));
-		assertEquals(278, BibtexWidth.getCharWidth(' '));
-	}
-}
+package tests.net.sf.jabref.bst;
+
+import net.sf.jabref.bst.BibtexWidth;
+import net.sf.jabref.bst.Warn;
+import junit.framework.TestCase;
+
+/**
+ * How to create these test using Bibtex:
+ * 
+ * Execute this charWidth.bst with the following charWidth.aux:
+ * 
+ * 
+ * <code>
+ ENTRY{}{}{}
+ FUNCTION{test}
+ {
+ "i" width$ int.to.str$ write$ newline$
+ "0I~ " width$ int.to.str$ write$ newline$
+ "Hi Hi " width$ int.to.str$ write$ newline$
+ "{\oe}" width$ int.to.str$ write$ newline$
+ "Hi {\oe   }Hi " width$ int.to.str$ write$ newline$
+ }
+ READ
+ EXECUTE{test}
+ </code>
+ * 
+ * <code>
+ \bibstyle{charWidth}
+ \citation{canh05}
+ \bibdata{test}
+ \bibcite{canh05}{CMM{$^{+}$}05}
+ </code>
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class BibtexWidthTest extends TestCase {
+
+	public void assertBibtexWidth(final int i, final String string) {
+		assertEquals(i, BibtexWidth.width(string, new Warn() {
+			public void warn(String s) {
+				fail("Should not Warn! Width should be " + i + " for " + string);
+			}
+		}));
+	}
+
+	public void testWidth() {
+
+		assertBibtexWidth(278, "i");
+
+		assertBibtexWidth(1639, "0I~ "); 
+
+		assertBibtexWidth(2612, "Hi Hi ");
+
+		assertBibtexWidth(778, "{\\oe}");
+
+		assertBibtexWidth(3390, "Hi {\\oe   }Hi ");
+		
+		assertBibtexWidth(444, "{\\'e}");
+		
+		assertBibtexWidth(19762, "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
+
+		assertBibtexWidth(7861, "{\\'{E}}douard Masterly");
+		
+		assertBibtexWidth(30514, "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
+	
+	}
+	
+
+	public void testGetCharWidth() {
+		assertEquals(500, BibtexWidth.getCharWidth('0'));
+		assertEquals(361, BibtexWidth.getCharWidth('I'));
+		assertEquals(500, BibtexWidth.getCharWidth('~'));
+		assertEquals(500, BibtexWidth.getCharWidth('}'));
+		assertEquals(278, BibtexWidth.getCharWidth(' '));
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/bst/TestVM.java b/src/java/tests/net/sf/jabref/bst/TestVM.java
index 18c39c5..fa22148 100644
--- a/src/java/tests/net/sf/jabref/bst/TestVM.java
+++ b/src/java/tests/net/sf/jabref/bst/TestVM.java
@@ -1,648 +1,648 @@
-package tests.net.sf.jabref.bst;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Collection;
-import java.util.Vector;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.bst.VM;
-import net.sf.jabref.bst.VMException;
-import net.sf.jabref.bst.VM.BstEntry;
-import net.sf.jabref.bst.VM.StackFunction;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.imports.ParserResult;
-
-import org.antlr.runtime.RecognitionException;
-
-
-public class TestVM extends TestCase {
-
-	public void testAbbrv() throws RecognitionException, IOException {
-		VM vm = new VM(new File("src/tests/net/sf/jabref/bst/abbrv.bst"));
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		v.add(t1BibtexEntry());
-		
-		String expected = "\\begin{thebibliography}{1}\\bibitem{canh05}K.~Crowston, H.~Annabi, J.~Howison, and C.~Masango.\\newblock Effective work practices for floss development: A model and  propositions.\\newblock In {\\em Hawaii International Conference On System Sciences (HICSS)}, 2005.\\end{thebibliography}";
-		
-		assertEquals(expected.replaceAll("\\s", ""), vm.run(v).replaceAll("\\s", ""));
-	}
-
-	public void testVMSimple() throws RecognitionException, IOException {
-
-		VM vm = new VM("" + "ENTRY  { " + "  address " + "  author " + "  title " + "  type "
-			+ "}  {}  { label }" + "INTEGERS { output.state before.all"
-			+ " mid.sentence after.sentence after.block }"
-			+ "FUNCTION {init.state.consts}{ #0 'before.all := "
-			+ " #1 'mid.sentence :=  #2 'after.sentence :=  #3 'after.block := } "
-			+ "STRINGS { s t } " + "READ");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		v.add(t1BibtexEntry());
-
-		vm.run(v);
-
-		assertEquals(2, vm.getStrings().size());
-		assertEquals(7, vm.getIntegers().size());
-		assertEquals(1, vm.getEntries().size());
-		assertEquals(5, (vm.getEntries().get(0)).getFields().size());
-		assertEquals(38, vm.getFunctions().size());
-
-	}
-
-	public void testLabel() throws RecognitionException, IOException {
-
-		VM vm = new VM("" + "ENTRY  { title }  {}  { label } "
-			+ "FUNCTION { test } { label #0 = title 'label := #5 label #6 pop$ } " + "READ "
-			+ "ITERATE { test }");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		v.add(t1BibtexEntry());
-
-		vm.run(v);
-
-		assertEquals("Effective work practices for floss development: A model and propositions", vm
-			.getStack().pop());
-
-	}
-
-	public void testQuote() throws RecognitionException, IOException {
-
-		VM vm = new VM("FUNCTION {a}{ quote$ quote$ * } EXECUTE {a}");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		vm.run(v);
-
-		assertEquals("\"\"", vm.getStack().pop());
-	}
-
-	public void testVMFunction1() throws RecognitionException, IOException {
-
-		VM vm = new VM("FUNCTION {init.state.consts}{ #0 'before.all := } ");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		vm.run(v);
-
-		assertEquals(38, vm.getFunctions().size());
-
-		assertTrue(vm.getFunctions().get("init.state.consts") instanceof StackFunction);
-
-		StackFunction fun = (StackFunction) vm.getFunctions().get("init.state.consts");
-		assertEquals(3, fun.getTree().getChildCount());
-	}
-
-	public void testVMExecuteSimple() throws RecognitionException, IOException {
-
-		{
-			VM vm = new VM("" + "INTEGERS { variable.a } "
-				+ "FUNCTION {init.state.consts}{ #5 'variable.a := } "
-				+ "EXECUTE {init.state.consts}");
-
-			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-			vm.run(v);
-			assertEquals(new Integer(5), vm.getIntegers().get("variable.a"));
-		}
-		{
-			VM vm = new VM("FUNCTION {a}{ #5 #5 = " + "#1 #2 = " + "#3 #4 < " + "#4 #3 < "
-				+ "#4 #4 < " + "#3 #4 > " + "#4 #3 > " + "#4 #4 > " + "\"H\" \"H\" = "
-				+ "\"H\" \"Ha\" = } " + "EXECUTE {a}");
-
-			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-			vm.run(v);
-
-			assertEquals(VM.FALSE, vm.getStack().pop());
-			assertEquals(VM.TRUE, vm.getStack().pop());
-			assertEquals(VM.FALSE, vm.getStack().pop());
-			assertEquals(VM.TRUE, vm.getStack().pop());
-			assertEquals(VM.FALSE, vm.getStack().pop());
-			assertEquals(VM.FALSE, vm.getStack().pop());
-			assertEquals(VM.FALSE, vm.getStack().pop());
-			assertEquals(VM.TRUE, vm.getStack().pop());
-			assertEquals(VM.FALSE, vm.getStack().pop());
-			assertEquals(VM.TRUE, vm.getStack().pop());
-			assertEquals(0, vm.getStack().size());
-		}
-	}
-
-	public void testVMIfSkipPop() throws RecognitionException, IOException {
-		VM vm = new VM("FUNCTION {not}	{   { #0 }	    { #1 }  if$	}"
-			+ "FUNCTION {and}	{   'skip$	    { pop$ #0 }	  if$	}"
-			+ "FUNCTION {or}	{   { pop$ #1 }	    'skip$	  if$	}" + "FUNCTION {test} { "
-			+ "#1 #1 and #0 #1 and #1 #0 and #0 #0 and " + "#0 not #1 not "
-			+ "#1 #1 or #0 #1 or #1 #0 or #0 #0 or }" + "EXECUTE {test}");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		vm.run(v);
-		assertEquals(VM.FALSE, vm.getStack().pop());
-		assertEquals(VM.TRUE, vm.getStack().pop());
-		assertEquals(VM.TRUE, vm.getStack().pop());
-		assertEquals(VM.TRUE, vm.getStack().pop());
-		assertEquals(VM.FALSE, vm.getStack().pop());
-		assertEquals(VM.TRUE, vm.getStack().pop());
-		assertEquals(VM.FALSE, vm.getStack().pop());
-		assertEquals(VM.FALSE, vm.getStack().pop());
-		assertEquals(VM.FALSE, vm.getStack().pop());
-		assertEquals(VM.TRUE, vm.getStack().pop());
-		assertEquals(0, vm.getStack().size());
-	}
-
-	public void testVMArithmetic() throws RecognitionException, IOException {
-		{
-			VM vm = new VM("FUNCTION {test} { " + "#1 #1 + #5 #2 - }" + "EXECUTE {test}");
-
-			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-			vm.run(v);
-			assertEquals(new Integer(3), vm.getStack().pop());
-			assertEquals(new Integer(2), vm.getStack().pop());
-			assertEquals(0, vm.getStack().size());
-		}
-		{
-			VM vm = new VM("FUNCTION {test} { " + "#1 \"HELLO\" + #5 #2 - }" + "EXECUTE {test}");
-
-			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-
-			try {
-				vm.run(v);
-				fail();
-			} catch (VMException e) {
-
-			}
-		}
-	}
-
-	public void testNumNames() throws RecognitionException, IOException {
-		{
-			VM vm = new VM("FUNCTION {test} { \"Johnny Foo and Mary Bar\" num.names$ }"
-				+ "EXECUTE {test}");
-
-			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-			vm.run(v);
-			assertEquals(new Integer(2), vm.getStack().pop());
-			assertEquals(0, vm.getStack().size());
-		}
-		{
-			VM vm = new VM("FUNCTION {test} { \"Johnny Foo { and } Mary Bar\" num.names$ }"
-				+ "EXECUTE {test}");
-
-			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-			vm.run(v);
-			assertEquals(new Integer(1), vm.getStack().pop());
-			assertEquals(0, vm.getStack().size());
-		}
-	}
-
-	public void testVMStringOps1() throws RecognitionException, IOException {
-		{
-			VM vm = new VM(
-				"FUNCTION {test} { \"H\" \"allo\" * \"Johnny\" add.period$ \"Johnny.\" add.period$"
-					+ "\"Johnny!\" add.period$ \"Johnny?\" add.period$ \"Johnny} }}}\" add.period$"
-					+ "\"Johnny!}\" add.period$ \"Johnny?}\" add.period$ \"Johnny.}\" add.period$ }"
-					+ "EXECUTE {test}");
-
-			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-			vm.run(v);
-			assertEquals("Johnny.}", vm.getStack().pop());
-			assertEquals("Johnny?}", vm.getStack().pop());
-			assertEquals("Johnny!}", vm.getStack().pop());
-			assertEquals("Johnny.}", vm.getStack().pop());
-			assertEquals("Johnny?", vm.getStack().pop());
-			assertEquals("Johnny!", vm.getStack().pop());
-			assertEquals("Johnny.", vm.getStack().pop());
-			assertEquals("Johnny.", vm.getStack().pop());
-			assertEquals("Hallo", vm.getStack().pop());
-			assertEquals(0, vm.getStack().size());
-		}
-	}
-
-	public void testSubstring() throws RecognitionException, IOException {
-		VM vm = new VM("FUNCTION {test} " + "{ \"123456789\" #2  #1  substring$ " + // 2
-			"  \"123456789\" #4 global.max$ substring$ " + // 456789
-			"  \"123456789\" #1  #9  substring$ " + // 123456789
-			"  \"123456789\" #1  #10 substring$ " + // 123456789
-			"  \"123456789\" #1  #99 substring$ " + // 123456789
-
-			"  \"123456789\" #-7 #3  substring$ " + // 123
-			"  \"123456789\" #-1 #1  substring$ " + // 9
-			"  \"123456789\" #-1 #3  substring$ " + // 789
-			"  \"123456789\" #-2 #2  substring$ " + // 78
-
-			"} EXECUTE {test} ");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		vm.run(v);
-		assertEquals("78", vm.getStack().pop());
-		assertEquals("789", vm.getStack().pop());
-		assertEquals("9", vm.getStack().pop());
-		assertEquals("123", vm.getStack().pop());
-
-		assertEquals("123456789", vm.getStack().pop());
-		assertEquals("123456789", vm.getStack().pop());
-		assertEquals("123456789", vm.getStack().pop());
-		assertEquals("456789", vm.getStack().pop());
-		assertEquals("2", vm.getStack().pop());
-		assertEquals(0, vm.getStack().size());
-	}
-
-	public void testEmpty() throws RecognitionException, IOException {
-		VM vm = new VM("ENTRY {title}{}{} READ STRINGS { s } FUNCTION {test} " + "{ s empty$ " + // FALSE
-			"\"\" empty$ " + // FALSE
-			"\"   \" empty$ " + // FALSE
-			" title empty$ " + // FALSE
-			" \" HALLO \" empty$ } ITERATE {test} ");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		v.add(bibtexString2BibtexEntry("@article{a, author=\"AAA\"}"));
-		vm.run(v);
-		assertEquals(VM.FALSE, vm.getStack().pop());
-		assertEquals(VM.TRUE, vm.getStack().pop());
-		assertEquals(VM.TRUE, vm.getStack().pop());
-		assertEquals(VM.TRUE, vm.getStack().pop());
-		assertEquals(VM.TRUE, vm.getStack().pop());
-		assertEquals(0, vm.getStack().size());
-	}
-
-	public void testDuplicateEmptyPopSwapIf() throws RecognitionException, IOException {
-		VM vm = new VM("FUNCTION {emphasize} " + "{ duplicate$ empty$ " + "  { pop$ \"\" } "
-			+ "  { \"{\\em \" swap$ * \"}\" * } " + "  if$ " + "} " + "FUNCTION {test} {"
-			+ "  \"\" emphasize " + "  \"Hello\" emphasize " + "}" + "EXECUTE {test} ");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		vm.run(v);
-		assertEquals("{\\em Hello}", vm.getStack().pop());
-		assertEquals("", vm.getStack().pop());
-		assertEquals(0, vm.getStack().size());
-	}
-
-	public void testChangeCase() throws RecognitionException, IOException {
-		VM vm = new VM(
-			"STRINGS { title } "
-				+ "READ "
-				+ "FUNCTION {format.title}"
-				+ " { duplicate$ empty$ "
-				+ "    { pop$ \"\" } "
-				+ "    { \"t\" change.case$ } "
-				+ "  if$ "
-				+ "} "
-				+ "FUNCTION {test} {"
-				+ "  \"hello world\" \"u\" change.case$ format.title "
-				+ "  \"Hello World\" format.title "
-				+ "  \"\" format.title "
-				+ "  \"{A}{D}/{C}ycle: {I}{B}{M}'s {F}ramework for {A}pplication {D}evelopment and {C}ase\" \"u\" change.case$ format.title "
-				+ "}" + "EXECUTE {test} ");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		vm.run(v);
-		assertEquals(
-			"{A}{D}/{C}ycle: {I}{B}{M}'s {F}ramework for {A}pplication {D}evelopment and {C}ase",
-			vm.getStack().pop());
-		assertEquals("", vm.getStack().pop());
-		assertEquals("Hello world", vm.getStack().pop());
-		assertEquals("Hello world", vm.getStack().pop());
-		assertEquals(0, vm.getStack().size());
-	}
-
-	public void testTextLength() throws RecognitionException, IOException {
-		VM vm = new VM("FUNCTION {test} {" + "  \"hello world\" text.length$ "
-			+ "  \"Hello {W}orld\" text.length$ " + "  \"\" text.length$ "
-			+ "  \"{A}{D}/{Cycle}\" text.length$ "
-			+ "  \"{\\This is one character}\" text.length$ "
-			+ "  \"{\\This {is} {one} {c{h}}aracter as well}\" text.length$ "
-			+ "  \"{\\And this too\" text.length$ " + "  \"These are {\\11}\" text.length$ " + "} "
-			+ "EXECUTE {test} ");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		vm.run(v);
-		assertEquals(new Integer(11), vm.getStack().pop());
-		assertEquals(new Integer(1), vm.getStack().pop());
-		assertEquals(new Integer(1), vm.getStack().pop());
-		assertEquals(new Integer(1), vm.getStack().pop());
-		assertEquals(new Integer(8), vm.getStack().pop());
-		assertEquals(new Integer(0), vm.getStack().pop());
-		assertEquals(new Integer(11), vm.getStack().pop());
-		assertEquals(new Integer(11), vm.getStack().pop());
-		assertEquals(0, vm.getStack().size());
-	}
-
-	public void testVMIntToStr() throws RecognitionException, IOException {
-		VM vm = new VM("FUNCTION {test} { #3 int.to.str$ #9999 int.to.str$}" + "EXECUTE {test}");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		vm.run(v);
-		assertEquals("9999", (String) vm.getStack().pop());
-		assertEquals("3", vm.getStack().pop());
-		assertEquals(0, vm.getStack().size());
-	}
-
-	public void testVMChrToInt() throws RecognitionException, IOException {
-		{
-			VM vm = new VM("FUNCTION {test} { \"H\" chr.to.int$ }" + "EXECUTE {test}");
-
-			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-			vm.run(v);
-			assertEquals(new Integer(72), vm.getStack().pop());
-			assertEquals(0, vm.getStack().size());
-		}
-		{
-			VM vm = new VM("FUNCTION {test} { \"H\" chr.to.int$ int.to.chr$ }" + "EXECUTE {test}");
-
-			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-			vm.run(v);
-			assertEquals("H", vm.getStack().pop());
-			assertEquals(0, vm.getStack().size());
-		}
-	}
-
-	public void testSort() throws RecognitionException, IOException {
-
-		VM vm = new VM("" + "ENTRY  { title }  { }  { label }"
-			+ "FUNCTION {presort} { cite$ 'sort.key$ := } ITERATE { presort } SORT");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		v.add(bibtexString2BibtexEntry("@article{a, author=\"AAA\"}"));
-		v.add(bibtexString2BibtexEntry("@article{b, author=\"BBB\"}"));
-		v.add(bibtexString2BibtexEntry("@article{d, author=\"DDD\"}"));
-		v.add(bibtexString2BibtexEntry("@article{c, author=\"CCC\"}"));
-		vm.run(v);
-
-		Vector<BstEntry> v2 = vm.getEntries();
-		assertEquals("a", v2.get(0).getBibtexEntry().getCiteKey());
-		assertEquals("b", v2.get(1).getBibtexEntry().getCiteKey());
-		assertEquals("c", v2.get(2).getBibtexEntry().getCiteKey());
-		assertEquals("d", v2.get(3).getBibtexEntry().getCiteKey());
-	}
-
-	public void testBuildIn() throws RecognitionException, IOException {
-		VM vm = new VM("EXECUTE {global.max$}");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		vm.run(v);
-
-		assertEquals(new Integer(Integer.MAX_VALUE), vm.getStack().pop());
-		assertTrue(vm.getStack().empty());
-	}
-
-	public void testVariables() throws RecognitionException, IOException {
-
-		VM vm = new VM(" STRINGS { t }                          "
-			+ " FUNCTION {not}	{ { #0 } { #1 }  if$ } "
-			+ " FUNCTION {n.dashify} { \"HELLO-WORLD\" 't := t empty$ not } "
-			+ " EXECUTE {n.dashify}                    ");
-
-		vm.run(new Vector<BibtexEntry>());
-
-		assertEquals(VM.TRUE, vm.getStack().pop());
-	}
-
-	public void testWhile() throws RecognitionException, IOException {
-
-		VM vm = new VM(
-			"STRINGS { t }            "
-				+ "FUNCTION {not}	{   "
-				+ " { #0 } { #1 }  if$ } "
-				+ "FUNCTION {n.dashify}              "
-				+ "{ \"HELLO-WORLD\"                 "
-				+ "  't :=                           "
-				+ " \"\"                                                 "
-				+ "	   { t empty$ not }                 "
-				+ "	   { t #1 #1 substring$ \"-\" =                      "
-				+ "	     { t #1 #2 substring$ \"--\" = not "
-				+ "	          { \"--\" *                                       "
-				+ "	            t #2 global.max$ substring$ 't :=                 "
-				+ "	          }                                                    "
-				+ "	          {   { t #1 #1 substring$ \"-\" = }                "
-				+ "	              { \"-\" *                                         "
-				+ "	                t #2 global.max$ substring$ 't :=               "
-				+ "	              }                                                  "
-				+ "	            while$                                                                  "
-				+ "	          }                                                                  "
-				+ "	        if$                                                                  "
-				+ "	      }                                                                  "
-				+ "	      { t #1 #1 substring$ *                                       "
-				+ "	        t #2 global.max$ substring$ 't :=                          "
-				+ "	      }                                                                  "
-				+ "	      if$                                                                  "
-				+ "	    }                                                                  "
-				+ "	  while$                                                                  "
-				+ "	}                                                                  "
-				+ " EXECUTE {n.dashify} ");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		vm.run(v);
-
-		assertEquals(1, vm.getStack().size());
-		assertEquals("HELLO--WORLD", vm.getStack().pop());
-	}
-
-	public void testType() throws RecognitionException, IOException {
-
-		VM vm = new VM(
-			""
-				+ "ENTRY  { title }  { }  { label }"
-				+ "FUNCTION {presort} { cite$ 'sort.key$ := } ITERATE { presort } SORT FUNCTION {test} { type$ } ITERATE { test }");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		v.add(bibtexString2BibtexEntry("@article{a, author=\"AAA\"}"));
-		v.add(bibtexString2BibtexEntry("@book{b, author=\"BBB\"}"));
-		v.add(bibtexString2BibtexEntry("@misc{c, author=\"CCC\"}"));
-		v.add(bibtexString2BibtexEntry("@inproceedings{d, author=\"DDD\"}"));
-		vm.run(v);
-
-		assertEquals(4, vm.getStack().size());
-		assertEquals("Inproceedings", vm.getStack().pop());
-		assertEquals("Misc", vm.getStack().pop());
-		assertEquals("Book", vm.getStack().pop());
-		assertEquals("Article", vm.getStack().pop());
-	}
-
-	public void testMissing() throws RecognitionException, IOException {
-
-		VM vm = new VM( // 
-			"ENTRY    { title }  { }  { label } " + //
-				"FUNCTION {presort} { cite$ 'sort.key$ := } " + //
-				"ITERATE  {presort} " + //
-				"READ SORT " + //
-				"FUNCTION {test}{ title missing$ cite$ } " + //
-				"ITERATE  { test }");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		v.add(t1BibtexEntry());
-		v.add(bibtexString2BibtexEntry("@article{test, author=\"No title\"}"));
-		vm.run(v);
-
-		assertEquals(4, vm.getStack().size());
-
-		assertEquals("test", vm.getStack().pop());
-		assertEquals(new Integer(1), vm.getStack().pop());
-		assertEquals("canh05", vm.getStack().pop());
-		assertEquals(new Integer(0), vm.getStack().pop());
-	}
-
-	public void testFormatName() throws RecognitionException, IOException {
-		{
-			VM vm = new VM(
-				"FUNCTION {format}{ \"Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin\" #1 \"{vv~}{ll}{, jj}{, f}?\" format.name$ }"
-					+ "EXECUTE {format}");
-
-			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-			vm.run(v);
-			assertEquals("de~la Vall{\\'e}e~Poussin, C.~L. X.~J?", (String) vm.getStack().pop());
-			assertEquals(0, vm.getStack().size());
-		}
-		{
-			VM vm = new VM("ENTRY  { author }  { }  { label } "
-				+ "FUNCTION {presort} { cite$ 'sort.key$ := } " + "ITERATE { presort } " + "READ "
-				+ "SORT " + "FUNCTION {format}{ author #2 \"{vv~}{ll}{, jj}{, f}?\" format.name$ }"
-				+ "ITERATE {format}");
-
-			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-			v.add(t1BibtexEntry());
-			v
-				.add(bibtexString2BibtexEntry("@book{test, author=\"Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin\"}"));
-			vm.run(v);
-			assertEquals("de~la Vall{\\'e}e~Poussin, C.~L. X.~J?", vm.getStack().pop());
-			assertEquals("Annabi, H?", vm.getStack().pop());
-			assertEquals(0, vm.getStack().size());
-		}
-	}
-
-	public void testCallType() throws RecognitionException, IOException {
-
-		VM vm = new VM(
-			"ENTRY  { title }  { }  { label } FUNCTION {presort} { cite$ 'sort.key$ := } ITERATE { presort } READ SORT "
-				+ "FUNCTION {inproceedings}{ \"InProceedings called on \" title * } "
-				+ "FUNCTION {book}{ \"Book called on \" title * } " + " ITERATE { call.type$ }");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		v.add(t1BibtexEntry());
-		v.add(bibtexString2BibtexEntry("@book{test, title=\"Test\"}"));
-		vm.run(v);
-
-		assertEquals(2, vm.getStack().size());
-
-		assertEquals("Book called on Test", vm.getStack().pop());
-		assertEquals(
-			"InProceedings called on Effective work practices for floss development: A model and propositions",
-			vm.getStack().pop());
-		assertEquals(0, vm.getStack().size());
-	}
-
-	public void testIterate() throws RecognitionException, IOException {
-
-		VM vm = new VM("" + "ENTRY  { " + "  address " + "  author " + "  title " + "  type "
-			+ "}  {}  { label } " + "FUNCTION {test}{ cite$ } " + "READ " + "ITERATE { test }");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		v.add(t1BibtexEntry());
-
-		v.add(bibtexString2BibtexEntry("@article{test, title=\"BLA\"}"));
-
-		vm.run(v);
-
-		assertEquals(2, vm.getStack().size());
-
-		String s1 = (String) vm.getStack().pop();
-		String s2 = (String) vm.getStack().pop();
-
-		if (s1.equals("canh05")) {
-			assertEquals("test", s2);
-		} else {
-			assertEquals("canh05", s2);
-			assertEquals("test", s1);
-		}
-	}
-
-	public void testWidth() throws RecognitionException, IOException {
-
-		VM vm = new VM("ENTRY  { " + "  address " + "  author " + "  title " + "  type "
-			+ "}  {}  { label } " + // 
-			"STRINGS { longest.label } " + //
-			"INTEGERS { number.label longest.label.width } " + //
-			"FUNCTION {initialize.longest.label} " + //
-			"{ \"\" 'longest.label := " + //
-			"  #1 'number.label := " + //
-			"  #0 'longest.label.width := " + // 
-			"} " + //
-			" " + //
-			"		FUNCTION {longest.label.pass} " + // 
-			"		{ number.label int.to.str$ 'label := " + // 
-			"		  number.label #1 + 'number.label := " + //
-			"		  label width$ longest.label.width > " + //
-			"		    { label 'longest.label := " + //
-			"		      label width$ 'longest.label.width := " + // 
-			"		    } " + //
-			"		    'skip$ " + // 
-			"		  if$ " + //
-			"		} " + //
-			" " + //
-			"		EXECUTE {initialize.longest.label} " + // 
-			" " + //
-			"		ITERATE {longest.label.pass} " + //
-			"FUNCTION {begin.bib} " + //
-			"{ preamble$ empty$" + //
-			"    'skip$" + //
-			"    { preamble$ write$ newline$ }" + //
-			"  if$" + //
-			"  \"\\begin{thebibliography}{\"  longest.label  * \"}\" *" + //
-			"}" + //
-			"EXECUTE {begin.bib}" + //
-			"");//
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		v.add(t1BibtexEntry());
-
-		vm.run(v);
-
-		assertTrue(vm.getIntegers().containsKey("longest.label.width"));
-		assertEquals("\\begin{thebibliography}{1}", vm.getStack().pop());
-	}
-
-	public void testVMSwap() throws RecognitionException, IOException {
-
-		VM vm = new VM("FUNCTION {a}{ #3 \"Hallo\" swap$ } EXECUTE { a }");
-
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		vm.run(v);
-
-		assertEquals(2, vm.getStack().size());
-		assertEquals(new Integer(3), vm.getStack().pop());
-		assertEquals("Hallo", vm.getStack().pop());
-	}
-
-	public static BibtexEntry bibtexString2BibtexEntry(String s) throws IOException {
-		ParserResult result = BibtexParser.parse(new StringReader(s));
-		Collection<BibtexEntry> c = result.getDatabase().getEntries();
-		assertEquals(1, c.size());
-		return c.iterator().next();
-	}
-
-	public static String bibtexEntry2BibtexString(BibtexEntry e) throws IOException {
-		StringWriter sw = new StringWriter();
-		e.write(sw, new net.sf.jabref.export.LatexFieldFormatter(), false);
-		return sw.getBuffer().toString();
-	}
-
-	/* TEST DATA */
-	public String t1BibtexString() {
-		return "@inproceedings{canh05,\n"
-			+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},\n"
-			+ "  title = {Effective work practices for floss development: A model and propositions},\n"
-			+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},\n"
-			+ "  year = {2005},\n" + "  owner = {oezbek},\n" + "  timestamp = {2006.05.29},\n"
-			+ "  url = {http://james.howison.name/publications.html}}\n";
-	}
-
-	public void testHypthenatedName() throws RecognitionException, IOException {
-		VM vm = new VM(new File("src/tests/net/sf/jabref/bst/abbrv.bst"));
-		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
-		v.add(bibtexString2BibtexEntry("@article{canh05, author = \"Jean-Paul Sartre\" }"));
-		assertTrue(vm.run(v).indexOf("J.-P. Sartre") != -1);
-	}
-
-	public BibtexEntry t1BibtexEntry() throws IOException {
-		return bibtexString2BibtexEntry(t1BibtexString());
-	}
-
-}
+package tests.net.sf.jabref.bst;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Collection;
+import java.util.Vector;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.bst.VM;
+import net.sf.jabref.bst.VMException;
+import net.sf.jabref.bst.VM.BstEntry;
+import net.sf.jabref.bst.VM.StackFunction;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.imports.ParserResult;
+
+import org.antlr.runtime.RecognitionException;
+
+
+public class TestVM extends TestCase {
+
+	public void testAbbrv() throws RecognitionException, IOException {
+		VM vm = new VM(new File("src/tests/net/sf/jabref/bst/abbrv.bst"));
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		v.add(t1BibtexEntry());
+		
+		String expected = "\\begin{thebibliography}{1}\\bibitem{canh05}K.~Crowston, H.~Annabi, J.~Howison, and C.~Masango.\\newblock Effective work practices for floss development: A model and  propositions.\\newblock In {\\em Hawaii International Conference On System Sciences (HICSS)}, 2005.\\end{thebibliography}";
+		
+		assertEquals(expected.replaceAll("\\s", ""), vm.run(v).replaceAll("\\s", ""));
+	}
+
+	public void testVMSimple() throws RecognitionException, IOException {
+
+		VM vm = new VM("" + "ENTRY  { " + "  address " + "  author " + "  title " + "  type "
+			+ "}  {}  { label }" + "INTEGERS { output.state before.all"
+			+ " mid.sentence after.sentence after.block }"
+			+ "FUNCTION {init.state.consts}{ #0 'before.all := "
+			+ " #1 'mid.sentence :=  #2 'after.sentence :=  #3 'after.block := } "
+			+ "STRINGS { s t } " + "READ");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		v.add(t1BibtexEntry());
+
+		vm.run(v);
+
+		assertEquals(2, vm.getStrings().size());
+		assertEquals(7, vm.getIntegers().size());
+		assertEquals(1, vm.getEntries().size());
+		assertEquals(5, (vm.getEntries().get(0)).getFields().size());
+		assertEquals(38, vm.getFunctions().size());
+
+	}
+
+	public void testLabel() throws RecognitionException, IOException {
+
+		VM vm = new VM("" + "ENTRY  { title }  {}  { label } "
+			+ "FUNCTION { test } { label #0 = title 'label := #5 label #6 pop$ } " + "READ "
+			+ "ITERATE { test }");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		v.add(t1BibtexEntry());
+
+		vm.run(v);
+
+		assertEquals("Effective work practices for floss development: A model and propositions", vm
+			.getStack().pop());
+
+	}
+
+	public void testQuote() throws RecognitionException, IOException {
+
+		VM vm = new VM("FUNCTION {a}{ quote$ quote$ * } EXECUTE {a}");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		vm.run(v);
+
+		assertEquals("\"\"", vm.getStack().pop());
+	}
+
+	public void testVMFunction1() throws RecognitionException, IOException {
+
+		VM vm = new VM("FUNCTION {init.state.consts}{ #0 'before.all := } ");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		vm.run(v);
+
+		assertEquals(38, vm.getFunctions().size());
+
+		assertTrue(vm.getFunctions().get("init.state.consts") instanceof StackFunction);
+
+		StackFunction fun = (StackFunction) vm.getFunctions().get("init.state.consts");
+		assertEquals(3, fun.getTree().getChildCount());
+	}
+
+	public void testVMExecuteSimple() throws RecognitionException, IOException {
+
+		{
+			VM vm = new VM("" + "INTEGERS { variable.a } "
+				+ "FUNCTION {init.state.consts}{ #5 'variable.a := } "
+				+ "EXECUTE {init.state.consts}");
+
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+			vm.run(v);
+			assertEquals(new Integer(5), vm.getIntegers().get("variable.a"));
+		}
+		{
+			VM vm = new VM("FUNCTION {a}{ #5 #5 = " + "#1 #2 = " + "#3 #4 < " + "#4 #3 < "
+				+ "#4 #4 < " + "#3 #4 > " + "#4 #3 > " + "#4 #4 > " + "\"H\" \"H\" = "
+				+ "\"H\" \"Ha\" = } " + "EXECUTE {a}");
+
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+			vm.run(v);
+
+			assertEquals(VM.FALSE, vm.getStack().pop());
+			assertEquals(VM.TRUE, vm.getStack().pop());
+			assertEquals(VM.FALSE, vm.getStack().pop());
+			assertEquals(VM.TRUE, vm.getStack().pop());
+			assertEquals(VM.FALSE, vm.getStack().pop());
+			assertEquals(VM.FALSE, vm.getStack().pop());
+			assertEquals(VM.FALSE, vm.getStack().pop());
+			assertEquals(VM.TRUE, vm.getStack().pop());
+			assertEquals(VM.FALSE, vm.getStack().pop());
+			assertEquals(VM.TRUE, vm.getStack().pop());
+			assertEquals(0, vm.getStack().size());
+		}
+	}
+
+	public void testVMIfSkipPop() throws RecognitionException, IOException {
+		VM vm = new VM("FUNCTION {not}	{   { #0 }	    { #1 }  if$	}"
+			+ "FUNCTION {and}	{   'skip$	    { pop$ #0 }	  if$	}"
+			+ "FUNCTION {or}	{   { pop$ #1 }	    'skip$	  if$	}" + "FUNCTION {test} { "
+			+ "#1 #1 and #0 #1 and #1 #0 and #0 #0 and " + "#0 not #1 not "
+			+ "#1 #1 or #0 #1 or #1 #0 or #0 #0 or }" + "EXECUTE {test}");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		vm.run(v);
+		assertEquals(VM.FALSE, vm.getStack().pop());
+		assertEquals(VM.TRUE, vm.getStack().pop());
+		assertEquals(VM.TRUE, vm.getStack().pop());
+		assertEquals(VM.TRUE, vm.getStack().pop());
+		assertEquals(VM.FALSE, vm.getStack().pop());
+		assertEquals(VM.TRUE, vm.getStack().pop());
+		assertEquals(VM.FALSE, vm.getStack().pop());
+		assertEquals(VM.FALSE, vm.getStack().pop());
+		assertEquals(VM.FALSE, vm.getStack().pop());
+		assertEquals(VM.TRUE, vm.getStack().pop());
+		assertEquals(0, vm.getStack().size());
+	}
+
+	public void testVMArithmetic() throws RecognitionException, IOException {
+		{
+			VM vm = new VM("FUNCTION {test} { " + "#1 #1 + #5 #2 - }" + "EXECUTE {test}");
+
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+			vm.run(v);
+			assertEquals(new Integer(3), vm.getStack().pop());
+			assertEquals(new Integer(2), vm.getStack().pop());
+			assertEquals(0, vm.getStack().size());
+		}
+		{
+			VM vm = new VM("FUNCTION {test} { " + "#1 \"HELLO\" + #5 #2 - }" + "EXECUTE {test}");
+
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+
+			try {
+				vm.run(v);
+				fail();
+			} catch (VMException e) {
+
+			}
+		}
+	}
+
+	public void testNumNames() throws RecognitionException, IOException {
+		{
+			VM vm = new VM("FUNCTION {test} { \"Johnny Foo and Mary Bar\" num.names$ }"
+				+ "EXECUTE {test}");
+
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+			vm.run(v);
+			assertEquals(new Integer(2), vm.getStack().pop());
+			assertEquals(0, vm.getStack().size());
+		}
+		{
+			VM vm = new VM("FUNCTION {test} { \"Johnny Foo { and } Mary Bar\" num.names$ }"
+				+ "EXECUTE {test}");
+
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+			vm.run(v);
+			assertEquals(new Integer(1), vm.getStack().pop());
+			assertEquals(0, vm.getStack().size());
+		}
+	}
+
+	public void testVMStringOps1() throws RecognitionException, IOException {
+		{
+			VM vm = new VM(
+				"FUNCTION {test} { \"H\" \"allo\" * \"Johnny\" add.period$ \"Johnny.\" add.period$"
+					+ "\"Johnny!\" add.period$ \"Johnny?\" add.period$ \"Johnny} }}}\" add.period$"
+					+ "\"Johnny!}\" add.period$ \"Johnny?}\" add.period$ \"Johnny.}\" add.period$ }"
+					+ "EXECUTE {test}");
+
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+			vm.run(v);
+			assertEquals("Johnny.}", vm.getStack().pop());
+			assertEquals("Johnny?}", vm.getStack().pop());
+			assertEquals("Johnny!}", vm.getStack().pop());
+			assertEquals("Johnny.}", vm.getStack().pop());
+			assertEquals("Johnny?", vm.getStack().pop());
+			assertEquals("Johnny!", vm.getStack().pop());
+			assertEquals("Johnny.", vm.getStack().pop());
+			assertEquals("Johnny.", vm.getStack().pop());
+			assertEquals("Hallo", vm.getStack().pop());
+			assertEquals(0, vm.getStack().size());
+		}
+	}
+
+	public void testSubstring() throws RecognitionException, IOException {
+		VM vm = new VM("FUNCTION {test} " + "{ \"123456789\" #2  #1  substring$ " + // 2
+			"  \"123456789\" #4 global.max$ substring$ " + // 456789
+			"  \"123456789\" #1  #9  substring$ " + // 123456789
+			"  \"123456789\" #1  #10 substring$ " + // 123456789
+			"  \"123456789\" #1  #99 substring$ " + // 123456789
+
+			"  \"123456789\" #-7 #3  substring$ " + // 123
+			"  \"123456789\" #-1 #1  substring$ " + // 9
+			"  \"123456789\" #-1 #3  substring$ " + // 789
+			"  \"123456789\" #-2 #2  substring$ " + // 78
+
+			"} EXECUTE {test} ");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		vm.run(v);
+		assertEquals("78", vm.getStack().pop());
+		assertEquals("789", vm.getStack().pop());
+		assertEquals("9", vm.getStack().pop());
+		assertEquals("123", vm.getStack().pop());
+
+		assertEquals("123456789", vm.getStack().pop());
+		assertEquals("123456789", vm.getStack().pop());
+		assertEquals("123456789", vm.getStack().pop());
+		assertEquals("456789", vm.getStack().pop());
+		assertEquals("2", vm.getStack().pop());
+		assertEquals(0, vm.getStack().size());
+	}
+
+	public void testEmpty() throws RecognitionException, IOException {
+		VM vm = new VM("ENTRY {title}{}{} READ STRINGS { s } FUNCTION {test} " + "{ s empty$ " + // FALSE
+			"\"\" empty$ " + // FALSE
+			"\"   \" empty$ " + // FALSE
+			" title empty$ " + // FALSE
+			" \" HALLO \" empty$ } ITERATE {test} ");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		v.add(bibtexString2BibtexEntry("@article{a, author=\"AAA\"}"));
+		vm.run(v);
+		assertEquals(VM.FALSE, vm.getStack().pop());
+		assertEquals(VM.TRUE, vm.getStack().pop());
+		assertEquals(VM.TRUE, vm.getStack().pop());
+		assertEquals(VM.TRUE, vm.getStack().pop());
+		assertEquals(VM.TRUE, vm.getStack().pop());
+		assertEquals(0, vm.getStack().size());
+	}
+
+	public void testDuplicateEmptyPopSwapIf() throws RecognitionException, IOException {
+		VM vm = new VM("FUNCTION {emphasize} " + "{ duplicate$ empty$ " + "  { pop$ \"\" } "
+			+ "  { \"{\\em \" swap$ * \"}\" * } " + "  if$ " + "} " + "FUNCTION {test} {"
+			+ "  \"\" emphasize " + "  \"Hello\" emphasize " + "}" + "EXECUTE {test} ");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		vm.run(v);
+		assertEquals("{\\em Hello}", vm.getStack().pop());
+		assertEquals("", vm.getStack().pop());
+		assertEquals(0, vm.getStack().size());
+	}
+
+	public void testChangeCase() throws RecognitionException, IOException {
+		VM vm = new VM(
+			"STRINGS { title } "
+				+ "READ "
+				+ "FUNCTION {format.title}"
+				+ " { duplicate$ empty$ "
+				+ "    { pop$ \"\" } "
+				+ "    { \"t\" change.case$ } "
+				+ "  if$ "
+				+ "} "
+				+ "FUNCTION {test} {"
+				+ "  \"hello world\" \"u\" change.case$ format.title "
+				+ "  \"Hello World\" format.title "
+				+ "  \"\" format.title "
+				+ "  \"{A}{D}/{C}ycle: {I}{B}{M}'s {F}ramework for {A}pplication {D}evelopment and {C}ase\" \"u\" change.case$ format.title "
+				+ "}" + "EXECUTE {test} ");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		vm.run(v);
+		assertEquals(
+			"{A}{D}/{C}ycle: {I}{B}{M}'s {F}ramework for {A}pplication {D}evelopment and {C}ase",
+			vm.getStack().pop());
+		assertEquals("", vm.getStack().pop());
+		assertEquals("Hello world", vm.getStack().pop());
+		assertEquals("Hello world", vm.getStack().pop());
+		assertEquals(0, vm.getStack().size());
+	}
+
+	public void testTextLength() throws RecognitionException, IOException {
+		VM vm = new VM("FUNCTION {test} {" + "  \"hello world\" text.length$ "
+			+ "  \"Hello {W}orld\" text.length$ " + "  \"\" text.length$ "
+			+ "  \"{A}{D}/{Cycle}\" text.length$ "
+			+ "  \"{\\This is one character}\" text.length$ "
+			+ "  \"{\\This {is} {one} {c{h}}aracter as well}\" text.length$ "
+			+ "  \"{\\And this too\" text.length$ " + "  \"These are {\\11}\" text.length$ " + "} "
+			+ "EXECUTE {test} ");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		vm.run(v);
+		assertEquals(new Integer(11), vm.getStack().pop());
+		assertEquals(new Integer(1), vm.getStack().pop());
+		assertEquals(new Integer(1), vm.getStack().pop());
+		assertEquals(new Integer(1), vm.getStack().pop());
+		assertEquals(new Integer(8), vm.getStack().pop());
+		assertEquals(new Integer(0), vm.getStack().pop());
+		assertEquals(new Integer(11), vm.getStack().pop());
+		assertEquals(new Integer(11), vm.getStack().pop());
+		assertEquals(0, vm.getStack().size());
+	}
+
+	public void testVMIntToStr() throws RecognitionException, IOException {
+		VM vm = new VM("FUNCTION {test} { #3 int.to.str$ #9999 int.to.str$}" + "EXECUTE {test}");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		vm.run(v);
+		assertEquals("9999", (String) vm.getStack().pop());
+		assertEquals("3", vm.getStack().pop());
+		assertEquals(0, vm.getStack().size());
+	}
+
+	public void testVMChrToInt() throws RecognitionException, IOException {
+		{
+			VM vm = new VM("FUNCTION {test} { \"H\" chr.to.int$ }" + "EXECUTE {test}");
+
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+			vm.run(v);
+			assertEquals(new Integer(72), vm.getStack().pop());
+			assertEquals(0, vm.getStack().size());
+		}
+		{
+			VM vm = new VM("FUNCTION {test} { \"H\" chr.to.int$ int.to.chr$ }" + "EXECUTE {test}");
+
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+			vm.run(v);
+			assertEquals("H", vm.getStack().pop());
+			assertEquals(0, vm.getStack().size());
+		}
+	}
+
+	public void testSort() throws RecognitionException, IOException {
+
+		VM vm = new VM("" + "ENTRY  { title }  { }  { label }"
+			+ "FUNCTION {presort} { cite$ 'sort.key$ := } ITERATE { presort } SORT");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		v.add(bibtexString2BibtexEntry("@article{a, author=\"AAA\"}"));
+		v.add(bibtexString2BibtexEntry("@article{b, author=\"BBB\"}"));
+		v.add(bibtexString2BibtexEntry("@article{d, author=\"DDD\"}"));
+		v.add(bibtexString2BibtexEntry("@article{c, author=\"CCC\"}"));
+		vm.run(v);
+
+		Vector<BstEntry> v2 = vm.getEntries();
+		assertEquals("a", v2.get(0).getBibtexEntry().getCiteKey());
+		assertEquals("b", v2.get(1).getBibtexEntry().getCiteKey());
+		assertEquals("c", v2.get(2).getBibtexEntry().getCiteKey());
+		assertEquals("d", v2.get(3).getBibtexEntry().getCiteKey());
+	}
+
+	public void testBuildIn() throws RecognitionException, IOException {
+		VM vm = new VM("EXECUTE {global.max$}");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		vm.run(v);
+
+		assertEquals(new Integer(Integer.MAX_VALUE), vm.getStack().pop());
+		assertTrue(vm.getStack().empty());
+	}
+
+	public void testVariables() throws RecognitionException, IOException {
+
+		VM vm = new VM(" STRINGS { t }                          "
+			+ " FUNCTION {not}	{ { #0 } { #1 }  if$ } "
+			+ " FUNCTION {n.dashify} { \"HELLO-WORLD\" 't := t empty$ not } "
+			+ " EXECUTE {n.dashify}                    ");
+
+		vm.run(new Vector<BibtexEntry>());
+
+		assertEquals(VM.TRUE, vm.getStack().pop());
+	}
+
+	public void testWhile() throws RecognitionException, IOException {
+
+		VM vm = new VM(
+			"STRINGS { t }            "
+				+ "FUNCTION {not}	{   "
+				+ " { #0 } { #1 }  if$ } "
+				+ "FUNCTION {n.dashify}              "
+				+ "{ \"HELLO-WORLD\"                 "
+				+ "  't :=                           "
+				+ " \"\"                                                 "
+				+ "	   { t empty$ not }                 "
+				+ "	   { t #1 #1 substring$ \"-\" =                      "
+				+ "	     { t #1 #2 substring$ \"--\" = not "
+				+ "	          { \"--\" *                                       "
+				+ "	            t #2 global.max$ substring$ 't :=                 "
+				+ "	          }                                                    "
+				+ "	          {   { t #1 #1 substring$ \"-\" = }                "
+				+ "	              { \"-\" *                                         "
+				+ "	                t #2 global.max$ substring$ 't :=               "
+				+ "	              }                                                  "
+				+ "	            while$                                                                  "
+				+ "	          }                                                                  "
+				+ "	        if$                                                                  "
+				+ "	      }                                                                  "
+				+ "	      { t #1 #1 substring$ *                                       "
+				+ "	        t #2 global.max$ substring$ 't :=                          "
+				+ "	      }                                                                  "
+				+ "	      if$                                                                  "
+				+ "	    }                                                                  "
+				+ "	  while$                                                                  "
+				+ "	}                                                                  "
+				+ " EXECUTE {n.dashify} ");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		vm.run(v);
+
+		assertEquals(1, vm.getStack().size());
+		assertEquals("HELLO--WORLD", vm.getStack().pop());
+	}
+
+	public void testType() throws RecognitionException, IOException {
+
+		VM vm = new VM(
+			""
+				+ "ENTRY  { title }  { }  { label }"
+				+ "FUNCTION {presort} { cite$ 'sort.key$ := } ITERATE { presort } SORT FUNCTION {test} { type$ } ITERATE { test }");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		v.add(bibtexString2BibtexEntry("@article{a, author=\"AAA\"}"));
+		v.add(bibtexString2BibtexEntry("@book{b, author=\"BBB\"}"));
+		v.add(bibtexString2BibtexEntry("@misc{c, author=\"CCC\"}"));
+		v.add(bibtexString2BibtexEntry("@inproceedings{d, author=\"DDD\"}"));
+		vm.run(v);
+
+		assertEquals(4, vm.getStack().size());
+		assertEquals("Inproceedings", vm.getStack().pop());
+		assertEquals("Misc", vm.getStack().pop());
+		assertEquals("Book", vm.getStack().pop());
+		assertEquals("Article", vm.getStack().pop());
+	}
+
+	public void testMissing() throws RecognitionException, IOException {
+
+		VM vm = new VM( // 
+			"ENTRY    { title }  { }  { label } " + //
+				"FUNCTION {presort} { cite$ 'sort.key$ := } " + //
+				"ITERATE  {presort} " + //
+				"READ SORT " + //
+				"FUNCTION {test}{ title missing$ cite$ } " + //
+				"ITERATE  { test }");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		v.add(t1BibtexEntry());
+		v.add(bibtexString2BibtexEntry("@article{test, author=\"No title\"}"));
+		vm.run(v);
+
+		assertEquals(4, vm.getStack().size());
+
+		assertEquals("test", vm.getStack().pop());
+		assertEquals(new Integer(1), vm.getStack().pop());
+		assertEquals("canh05", vm.getStack().pop());
+		assertEquals(new Integer(0), vm.getStack().pop());
+	}
+
+	public void testFormatName() throws RecognitionException, IOException {
+		{
+			VM vm = new VM(
+				"FUNCTION {format}{ \"Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin\" #1 \"{vv~}{ll}{, jj}{, f}?\" format.name$ }"
+					+ "EXECUTE {format}");
+
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+			vm.run(v);
+			assertEquals("de~la Vall{\\'e}e~Poussin, C.~L. X.~J?", (String) vm.getStack().pop());
+			assertEquals(0, vm.getStack().size());
+		}
+		{
+			VM vm = new VM("ENTRY  { author }  { }  { label } "
+				+ "FUNCTION {presort} { cite$ 'sort.key$ := } " + "ITERATE { presort } " + "READ "
+				+ "SORT " + "FUNCTION {format}{ author #2 \"{vv~}{ll}{, jj}{, f}?\" format.name$ }"
+				+ "ITERATE {format}");
+
+			Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+			v.add(t1BibtexEntry());
+			v
+				.add(bibtexString2BibtexEntry("@book{test, author=\"Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin\"}"));
+			vm.run(v);
+			assertEquals("de~la Vall{\\'e}e~Poussin, C.~L. X.~J?", vm.getStack().pop());
+			assertEquals("Annabi, H?", vm.getStack().pop());
+			assertEquals(0, vm.getStack().size());
+		}
+	}
+
+	public void testCallType() throws RecognitionException, IOException {
+
+		VM vm = new VM(
+			"ENTRY  { title }  { }  { label } FUNCTION {presort} { cite$ 'sort.key$ := } ITERATE { presort } READ SORT "
+				+ "FUNCTION {inproceedings}{ \"InProceedings called on \" title * } "
+				+ "FUNCTION {book}{ \"Book called on \" title * } " + " ITERATE { call.type$ }");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		v.add(t1BibtexEntry());
+		v.add(bibtexString2BibtexEntry("@book{test, title=\"Test\"}"));
+		vm.run(v);
+
+		assertEquals(2, vm.getStack().size());
+
+		assertEquals("Book called on Test", vm.getStack().pop());
+		assertEquals(
+			"InProceedings called on Effective work practices for floss development: A model and propositions",
+			vm.getStack().pop());
+		assertEquals(0, vm.getStack().size());
+	}
+
+	public void testIterate() throws RecognitionException, IOException {
+
+		VM vm = new VM("" + "ENTRY  { " + "  address " + "  author " + "  title " + "  type "
+			+ "}  {}  { label } " + "FUNCTION {test}{ cite$ } " + "READ " + "ITERATE { test }");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		v.add(t1BibtexEntry());
+
+		v.add(bibtexString2BibtexEntry("@article{test, title=\"BLA\"}"));
+
+		vm.run(v);
+
+		assertEquals(2, vm.getStack().size());
+
+		String s1 = (String) vm.getStack().pop();
+		String s2 = (String) vm.getStack().pop();
+
+		if (s1.equals("canh05")) {
+			assertEquals("test", s2);
+		} else {
+			assertEquals("canh05", s2);
+			assertEquals("test", s1);
+		}
+	}
+
+	public void testWidth() throws RecognitionException, IOException {
+
+		VM vm = new VM("ENTRY  { " + "  address " + "  author " + "  title " + "  type "
+			+ "}  {}  { label } " + // 
+			"STRINGS { longest.label } " + //
+			"INTEGERS { number.label longest.label.width } " + //
+			"FUNCTION {initialize.longest.label} " + //
+			"{ \"\" 'longest.label := " + //
+			"  #1 'number.label := " + //
+			"  #0 'longest.label.width := " + // 
+			"} " + //
+			" " + //
+			"		FUNCTION {longest.label.pass} " + // 
+			"		{ number.label int.to.str$ 'label := " + // 
+			"		  number.label #1 + 'number.label := " + //
+			"		  label width$ longest.label.width > " + //
+			"		    { label 'longest.label := " + //
+			"		      label width$ 'longest.label.width := " + // 
+			"		    } " + //
+			"		    'skip$ " + // 
+			"		  if$ " + //
+			"		} " + //
+			" " + //
+			"		EXECUTE {initialize.longest.label} " + // 
+			" " + //
+			"		ITERATE {longest.label.pass} " + //
+			"FUNCTION {begin.bib} " + //
+			"{ preamble$ empty$" + //
+			"    'skip$" + //
+			"    { preamble$ write$ newline$ }" + //
+			"  if$" + //
+			"  \"\\begin{thebibliography}{\"  longest.label  * \"}\" *" + //
+			"}" + //
+			"EXECUTE {begin.bib}" + //
+			"");//
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		v.add(t1BibtexEntry());
+
+		vm.run(v);
+
+		assertTrue(vm.getIntegers().containsKey("longest.label.width"));
+		assertEquals("\\begin{thebibliography}{1}", vm.getStack().pop());
+	}
+
+	public void testVMSwap() throws RecognitionException, IOException {
+
+		VM vm = new VM("FUNCTION {a}{ #3 \"Hallo\" swap$ } EXECUTE { a }");
+
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		vm.run(v);
+
+		assertEquals(2, vm.getStack().size());
+		assertEquals(new Integer(3), vm.getStack().pop());
+		assertEquals("Hallo", vm.getStack().pop());
+	}
+
+	public static BibtexEntry bibtexString2BibtexEntry(String s) throws IOException {
+		ParserResult result = BibtexParser.parse(new StringReader(s));
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
+		assertEquals(1, c.size());
+		return c.iterator().next();
+	}
+
+	public static String bibtexEntry2BibtexString(BibtexEntry e) throws IOException {
+		StringWriter sw = new StringWriter();
+		e.write(sw, new net.sf.jabref.export.LatexFieldFormatter(), false);
+		return sw.getBuffer().toString();
+	}
+
+	/* TEST DATA */
+	public String t1BibtexString() {
+		return "@inproceedings{canh05,\n"
+			+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},\n"
+			+ "  title = {Effective work practices for floss development: A model and propositions},\n"
+			+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},\n"
+			+ "  year = {2005},\n" + "  owner = {oezbek},\n" + "  timestamp = {2006.05.29},\n"
+			+ "  url = {http://james.howison.name/publications.html}}\n";
+	}
+
+	public void testHypthenatedName() throws RecognitionException, IOException {
+		VM vm = new VM(new File("src/tests/net/sf/jabref/bst/abbrv.bst"));
+		Vector<BibtexEntry> v = new Vector<BibtexEntry>();
+		v.add(bibtexString2BibtexEntry("@article{canh05, author = \"Jean-Paul Sartre\" }"));
+		assertTrue(vm.run(v).indexOf("J.-P. Sartre") != -1);
+	}
+
+	public BibtexEntry t1BibtexEntry() throws IOException {
+		return bibtexString2BibtexEntry(t1BibtexString());
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/bst/TextPrefixFunctionTest.java b/src/java/tests/net/sf/jabref/bst/TextPrefixFunctionTest.java
index a8d0153..5dc7d83 100644
--- a/src/java/tests/net/sf/jabref/bst/TextPrefixFunctionTest.java
+++ b/src/java/tests/net/sf/jabref/bst/TextPrefixFunctionTest.java
@@ -1,29 +1,29 @@
-package tests.net.sf.jabref.bst;
-
-import net.sf.jabref.bst.BibtexTextPrefix;
-import net.sf.jabref.bst.Warn;
-import junit.framework.TestCase;
-
-public class TextPrefixFunctionTest extends TestCase {
-	
-	public void testPrefix(){
-		assertPrefix("i", "i");
-		assertPrefix("0I~ ", "0I~ ");
-		assertPrefix("Hi Hi", "Hi Hi ");
-		assertPrefix("{\\oe}", "{\\oe}");
-		assertPrefix("Hi {\\oe   }H", "Hi {\\oe   }Hi ");
-		assertPrefix("Jonat", "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
-		assertPrefix("{\\'e}", "{\\'e}");
-		assertPrefix("{\\'{E}}doua", "{\\'{E}}douard Masterly");
-		assertPrefix("Ulric", "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
-	}
-
-	private void assertPrefix(final String string, final String string2) {
-		assertEquals(string, BibtexTextPrefix.textPrefix(5, string2, new Warn() {
-			public void warn(String s) {
-				fail("Should not Warn! text.prefix$ should be " + string + " for (5) " + string2);
-			}
-		}));
-	}
-
-}
+package tests.net.sf.jabref.bst;
+
+import net.sf.jabref.bst.BibtexTextPrefix;
+import net.sf.jabref.bst.Warn;
+import junit.framework.TestCase;
+
+public class TextPrefixFunctionTest extends TestCase {
+	
+	public void testPrefix(){
+		assertPrefix("i", "i");
+		assertPrefix("0I~ ", "0I~ ");
+		assertPrefix("Hi Hi", "Hi Hi ");
+		assertPrefix("{\\oe}", "{\\oe}");
+		assertPrefix("Hi {\\oe   }H", "Hi {\\oe   }Hi ");
+		assertPrefix("Jonat", "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin");
+		assertPrefix("{\\'e}", "{\\'e}");
+		assertPrefix("{\\'{E}}doua", "{\\'{E}}douard Masterly");
+		assertPrefix("Ulric", "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot");
+	}
+
+	private void assertPrefix(final String string, final String string2) {
+		assertEquals(string, BibtexTextPrefix.textPrefix(5, string2, new Warn() {
+			public void warn(String s) {
+				fail("Should not Warn! text.prefix$ should be " + string + " for (5) " + string2);
+			}
+		}));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/AllTests.java b/src/java/tests/net/sf/jabref/export/layout/AllTests.java
index 6f88a06..c3d50d0 100644
--- a/src/java/tests/net/sf/jabref/export/layout/AllTests.java
+++ b/src/java/tests/net/sf/jabref/export/layout/AllTests.java
@@ -1,19 +1,19 @@
-package tests.net.sf.jabref.export.layout;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite("Test for test.net.sf.jabref.layout");
-		//$JUnit-BEGIN$
-		suite.addTestSuite(HTMLCharsTest.class);
-		suite.addTestSuite(LayoutEntryTest.class);
-		suite.addTestSuite(LayoutTest.class);
-		suite.addTestSuite(RTFCharsTest.class);
-		//$JUnit-END$
-		return suite;
-	}
-
-}
+package tests.net.sf.jabref.export.layout;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for test.net.sf.jabref.layout");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(HTMLCharsTest.class);
+		suite.addTestSuite(LayoutEntryTest.class);
+		suite.addTestSuite(LayoutTest.class);
+		suite.addTestSuite(RTFCharsTest.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/HTMLCharsTest.java b/src/java/tests/net/sf/jabref/export/layout/HTMLCharsTest.java
index 0d968d3..88ecca8 100644
--- a/src/java/tests/net/sf/jabref/export/layout/HTMLCharsTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/HTMLCharsTest.java
@@ -1,49 +1,49 @@
-package tests.net.sf.jabref.export.layout;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.HTMLChars;
-
-public class HTMLCharsTest extends TestCase {
-
-	public void testBasicFormat() {
-
-		LayoutFormatter layout = new HTMLChars();
-
-		assertEquals("", layout.format(""));
-
-		assertEquals("hallo", layout.format("hallo"));
-
-		assertEquals("R�flexions sur le timing de la quantit�", layout
-			.format("R�flexions sur le timing de la quantit�"));
-
-		assertEquals("hállo", layout.format("h\\'allo"));
-		
-		assertEquals("ı ı", layout.format("\\i \\i"));
-		assertEquals("ı", layout.format("\\i"));
-		assertEquals("ı", layout.format("\\{i}"));
-		assertEquals("ıı", layout.format("\\i\\i"));
-		
-		assertEquals("Ŀı", layout.format("\\Lmidot\\i"));
-		
-		assertEquals("ñ ñ í ı ı", layout.format("\\~{n} \\~n \\'i \\i \\i"));
-	}
-
-	public void testLaTeXHighlighting() {
-
-		LayoutFormatter layout = new HTMLChars();
-
-		assertEquals("<em>hallo</em>", layout.format("\\emph{hallo}"));
-		assertEquals("<em>hallo</em>", layout.format("{\\emph hallo}"));
-
-		assertEquals("<em>hallo</em>", layout.format("\\textit{hallo}"));
-		assertEquals("<em>hallo</em>", layout.format("{\\textit hallo}"));
-
-		assertEquals("<b>hallo</b>", layout.format("\\textbf{hallo}"));
-		assertEquals("<b>hallo</b>", layout.format("{\\textbf hallo}"));
-	}
-
-	/*
-	 * Is missing a lot of test cases for the individual chars...
-	 */
+package tests.net.sf.jabref.export.layout;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.HTMLChars;
+
+public class HTMLCharsTest extends TestCase {
+
+	public void testBasicFormat() {
+
+		LayoutFormatter layout = new HTMLChars();
+
+		assertEquals("", layout.format(""));
+
+		assertEquals("hallo", layout.format("hallo"));
+
+		assertEquals("R�flexions sur le timing de la quantit�", layout
+			.format("R�flexions sur le timing de la quantit�"));
+
+		assertEquals("hállo", layout.format("h\\'allo"));
+		
+		assertEquals("ı ı", layout.format("\\i \\i"));
+		assertEquals("ı", layout.format("\\i"));
+		assertEquals("ı", layout.format("\\{i}"));
+		assertEquals("ıı", layout.format("\\i\\i"));
+		
+		assertEquals("Ŀı", layout.format("\\Lmidot\\i"));
+		
+		assertEquals("ñ ñ í ı ı", layout.format("\\~{n} \\~n \\'i \\i \\i"));
+	}
+
+	public void testLaTeXHighlighting() {
+
+		LayoutFormatter layout = new HTMLChars();
+
+		assertEquals("<em>hallo</em>", layout.format("\\emph{hallo}"));
+		assertEquals("<em>hallo</em>", layout.format("{\\emph hallo}"));
+
+		assertEquals("<em>hallo</em>", layout.format("\\textit{hallo}"));
+		assertEquals("<em>hallo</em>", layout.format("{\\textit hallo}"));
+
+		assertEquals("<b>hallo</b>", layout.format("\\textbf{hallo}"));
+		assertEquals("<b>hallo</b>", layout.format("{\\textbf hallo}"));
+	}
+
+	/*
+	 * Is missing a lot of test cases for the individual chars...
+	 */
 }
\ No newline at end of file
diff --git a/src/java/tests/net/sf/jabref/export/layout/LayoutEntryTest.java b/src/java/tests/net/sf/jabref/export/layout/LayoutEntryTest.java
index 8d6cea9..4794dd5 100644
--- a/src/java/tests/net/sf/jabref/export/layout/LayoutEntryTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/LayoutEntryTest.java
@@ -1,207 +1,207 @@
-package tests.net.sf.jabref.export.layout;
-
-import java.io.StringReader;
-import java.util.ArrayList;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.export.layout.Layout;
-import net.sf.jabref.export.layout.LayoutEntry;
-import net.sf.jabref.export.layout.LayoutHelper;
-import junit.framework.TestCase;
-
-/**
- * The test class LayoutEntryTest test the net.sf.jabref.export.layout.LayoutEntry.
- * Indirectly the net.sf.jabref.export.layout.Layout is testet too.
- * 
- * The LayoutEntry creates a human readable String assinged with html formaters.
- * To test the Highlighting Feature, an instance of LayoutEntry will be instatiated via Layout and LayoutHelper.
- * With these instance the doLayout() Method is called several times for each test case. 
- * To simulate a search, a BibtexEntry will be created, wich will be used by LayoutEntry.
- * The definiton of the search is set by
- * 
- * LayoutEntry.setWordsToHighlight(words); and 
- * Globals.prefs.putBoolean("caseSensitiveSearch", false);
- * 
- * There are five test cases:
- * - The shown result text has no words which should be highlighted.
- * - There is one word which will be highlighted ignoring case sensitivity.  
- * - There are two words which will be highlighted ignoring case sensitivity.
- * - There is one word which will be highlighted case sensitivity.
- * - There are more words which will be highlighted case sensitivity.
- * 
- * @author Arne
- *
- */
-
-public class LayoutEntryTest extends TestCase
-{
-	private BibtexEntry mBTE;
-	
-	/**
-	 * Initialize Preferences.
-	 */
-	protected void setUp() throws Exception
-	{
-		super.setUp();
-		if (Globals.prefs == null)
-		{
-			Globals.prefs = JabRefPreferences.getInstance();
-			Globals.prefs.putBoolean("highLightWords", Boolean.TRUE);
-		}
-		
-		// create Bibtext Entry
-		
-		mBTE = new BibtexEntry("testid");
-		mBTE.setField("abstract", "In this paper, we initiate a formal study of security on Android: Google's new open-source platform for mobile devices. Tags: Paper android google Open-Source Devices");
-		//  Specifically, we present a core typed language to describe Android applications, and to reason about their data-flow security properties. Our operational semantics and type system provide some necessary foundations to help both users and developers of Android applications deal with their security concerns.
-		mBTE.setField("keywords", "android, mobile devices, security");
-		mBTE.setField("posted-at", "2010-08-11 15:00:49");
-		mBTE.setField("location", "Dublin, Ireland");
-		mBTE.setField("bibtexkey", "chaudhuri-plas09");
-		mBTE.setField("pages", "1--7");
-		mBTE.setField("booktitle", "PLAS '09: Proceedings of the ACM SIGPLAN Fourth Workshop on Programming Languages and Analysis for Security");
-		mBTE.setField("citeulike-article-id", "7615801");
-		mBTE.setField("citeulike-linkout-1", "http://dx.doi.org/10.1145/1554339.1554341");
-		mBTE.setField("url", "http://dx.doi.org/10.1145/1554339.1554341");
-		mBTE.setField("publisher", "ACM");
-		mBTE.setField("timestamp", "2010.11.11");
-		mBTE.setField("author", "Chaudhuri, Avik");
-		mBTE.setField("title", "Language-based security on Android");
-		mBTE.setField("address", "New York, NY, USA");
-		mBTE.setField("priority", "2");
-		mBTE.setField("isbn", "978-1-60558-645-8");
-		mBTE.setField("owner", "Arne");
-		mBTE.setField("year", "2009");
-		mBTE.setField("citeulike-linkout-0", "http://portal.acm.org/citation.cfm?id=1554339.1554341");
-		mBTE.setField("doi", "10.1145/1554339.1554341");
-	}
-	
-	// helper Methods
-	
-	public String layout(String layoutFile, BibtexEntry entry, ArrayList<String> wordsToHighlight) throws Exception
-	{
-		StringReader sr = new StringReader(layoutFile.replaceAll("__NEWLINE__", "\n"));
-		Layout layout = new LayoutHelper(sr).getLayoutFromText(Globals.FORMATTER_PACKAGE);
-		StringBuffer sb = new StringBuffer();
-		sb.append(layout.doLayout(entry, null, wordsToHighlight));
-
-		return sb.toString();
-	}
-	
-	/*************************/
-	/****** tests Cases ******/
-	/*************************/
-	
-	/**
-	 * @throws Exception
-	 */
-	public void testNoHighlighting() throws Exception
-	{
-		// say that this bibtex object was found
-		mBTE.setSearchHit(true);
-		
-		// define the highlighting settings
-		Globals.prefs.putBoolean("caseSensitiveSearch", false);
-		
-		String result = this.layout("<font face=\"arial\">\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract}\\end{abstract}</font>", mBTE, new ArrayList<String>());
-		String expecting = "<font face=\"arial\"><BR><BR><b>Abstract: </b> In this paper, we initiate a formal study of security on Android: Google's new open-source platform for mobile devices. Tags: Paper android google Open-Source Devices</font>";
-		
-		assertEquals(expecting, result);
-	}
-	
-	/**
-	 * @throws Exception
-	 */
-	public void testHighlightingOneWordCaseInsesitive() throws Exception
-	{
-		// say that this bibtex object was found
-		mBTE.setSearchHit(true);
-		
-		// define the serach words
-		ArrayList<String> words = new ArrayList<String>();
-		words.add("google");
-		
-		// define the highlighting settings
-		Globals.prefs.putBoolean("caseSensitiveSearch", false);
-		
-		String result = this.layout("<font face=\"arial\">\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract}\\end{abstract}</font>", mBTE, words);
-		String containing = "<span style=\"background-color:#FF4500;\">Google</span>"; 
-		
-		// check
-		assertTrue(result.contains(containing));
-	}
-	
-	/**
-	 * @throws Exception
-	 */
-	public void testHighlightingTwoWordsCaseInsesitive() throws Exception
-	{
-		// say that this bibtex object was found
-		mBTE.setSearchHit(true);
-		
-		// define the serach words
-		ArrayList<String> words = new ArrayList<String>();
-		words.add("Android");
-		words.add("study");
-		
-		// define the highlighting settings
-		Globals.prefs.putBoolean("caseSensitiveSearch", false);
-		
-		String result = this.layout("<font face=\"arial\">\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract}\\end{abstract}</font>", mBTE, words);
-		
-		String containing = "<span style=\"background-color:#FF4500;\">Android</span>"; 
-		String containing2 = "<span style=\"background-color:#FF4500;\">study</span>";
-		
-		// check
-		assertTrue(result.contains(containing));
-		assertTrue(result.contains(containing2));
-	}
-
-	
-	/**
-	 * @throws Exception
-	 */
-	public void testHighlightingOneWordCaseSesitive() throws Exception
-	{
-		// say that this bibtex object was found
-		mBTE.setSearchHit(true);
-		
-		// define the serach words
-		ArrayList<String> words = new ArrayList<String>();
-		words.add("google");
-		
-		// define the highlighting settings
-		Globals.prefs.putBoolean("caseSensitiveSearch", true);
-		
-		String result = this.layout("<font face=\"arial\">\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract}\\end{abstract}</font>", mBTE, words);
-		String expected = "<font face=\"arial\"><BR><BR><b>Abstract: </b> In this paper, we initiate a formal study of security on Android: Google's new open-source platform for mobile devices. Tags: Paper android <span style=\"background-color:#FF4500;\">google</span> Open-Source Devices</font>";
-		
-		// check
-		assertEquals(expected, result);
-	}
-	
-	/**
-	 * @throws Exception
-	 */
-	public void testHighlightingMoreWordsCaseSesitive() throws Exception
-	{
-		// say that this bibtex object was found
-		mBTE.setSearchHit(true);
-		
-		// define the serach words
-		ArrayList<String> words = new ArrayList<String>();
-		words.add("Android");
-		words.add("study");
-		words.add("Open");
-		
-		// define the highlighting settings
-		Globals.prefs.putBoolean("caseSensitiveSearch", false);
-		
-		String result = this.layout("<font face=\"arial\">\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract}\\end{abstract}</font>", mBTE, words);
-		String expected = "<font face=\"arial\"><BR><BR><b>Abstract: </b> In this paper, we initiate a formal <span style=\"background-color:#FF4500;\">study</span> of security on <span style=\"background-color:#FF4500;\">Android</span>: Google's new <span style=\"background-color:#FF4500;\">open</span>-source platform for mobile devices. Tags: Paper <span style=\"background-color:#FF4500;\">android</span> google <span style=\"background-color:#FF4500;\">Open</span>-Source Devices</font>";
-		
-		// check
-		assertEquals(expected, result);
-	}
-}
+package tests.net.sf.jabref.export.layout;
+
+import java.io.StringReader;
+import java.util.ArrayList;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.export.layout.Layout;
+import net.sf.jabref.export.layout.LayoutEntry;
+import net.sf.jabref.export.layout.LayoutHelper;
+import junit.framework.TestCase;
+
+/**
+ * The test class LayoutEntryTest test the net.sf.jabref.export.layout.LayoutEntry.
+ * Indirectly the net.sf.jabref.export.layout.Layout is testet too.
+ * 
+ * The LayoutEntry creates a human readable String assinged with html formaters.
+ * To test the Highlighting Feature, an instance of LayoutEntry will be instatiated via Layout and LayoutHelper.
+ * With these instance the doLayout() Method is called several times for each test case. 
+ * To simulate a search, a BibtexEntry will be created, wich will be used by LayoutEntry.
+ * The definiton of the search is set by
+ * 
+ * LayoutEntry.setWordsToHighlight(words); and 
+ * Globals.prefs.putBoolean("caseSensitiveSearch", false);
+ * 
+ * There are five test cases:
+ * - The shown result text has no words which should be highlighted.
+ * - There is one word which will be highlighted ignoring case sensitivity.  
+ * - There are two words which will be highlighted ignoring case sensitivity.
+ * - There is one word which will be highlighted case sensitivity.
+ * - There are more words which will be highlighted case sensitivity.
+ * 
+ * @author Arne
+ *
+ */
+
+public class LayoutEntryTest extends TestCase
+{
+	private BibtexEntry mBTE;
+	
+	/**
+	 * Initialize Preferences.
+	 */
+	protected void setUp() throws Exception
+	{
+		super.setUp();
+		if (Globals.prefs == null)
+		{
+			Globals.prefs = JabRefPreferences.getInstance();
+			Globals.prefs.putBoolean("highLightWords", Boolean.TRUE);
+		}
+		
+		// create Bibtext Entry
+		
+		mBTE = new BibtexEntry("testid");
+		mBTE.setField("abstract", "In this paper, we initiate a formal study of security on Android: Google's new open-source platform for mobile devices. Tags: Paper android google Open-Source Devices");
+		//  Specifically, we present a core typed language to describe Android applications, and to reason about their data-flow security properties. Our operational semantics and type system provide some necessary foundations to help both users and developers of Android applications deal with their security concerns.
+		mBTE.setField("keywords", "android, mobile devices, security");
+		mBTE.setField("posted-at", "2010-08-11 15:00:49");
+		mBTE.setField("location", "Dublin, Ireland");
+		mBTE.setField("bibtexkey", "chaudhuri-plas09");
+		mBTE.setField("pages", "1--7");
+		mBTE.setField("booktitle", "PLAS '09: Proceedings of the ACM SIGPLAN Fourth Workshop on Programming Languages and Analysis for Security");
+		mBTE.setField("citeulike-article-id", "7615801");
+		mBTE.setField("citeulike-linkout-1", "http://dx.doi.org/10.1145/1554339.1554341");
+		mBTE.setField("url", "http://dx.doi.org/10.1145/1554339.1554341");
+		mBTE.setField("publisher", "ACM");
+		mBTE.setField("timestamp", "2010.11.11");
+		mBTE.setField("author", "Chaudhuri, Avik");
+		mBTE.setField("title", "Language-based security on Android");
+		mBTE.setField("address", "New York, NY, USA");
+		mBTE.setField("priority", "2");
+		mBTE.setField("isbn", "978-1-60558-645-8");
+		mBTE.setField("owner", "Arne");
+		mBTE.setField("year", "2009");
+		mBTE.setField("citeulike-linkout-0", "http://portal.acm.org/citation.cfm?id=1554339.1554341");
+		mBTE.setField("doi", "10.1145/1554339.1554341");
+	}
+	
+	// helper Methods
+	
+	public String layout(String layoutFile, BibtexEntry entry, ArrayList<String> wordsToHighlight) throws Exception
+	{
+		StringReader sr = new StringReader(layoutFile.replaceAll("__NEWLINE__", "\n"));
+		Layout layout = new LayoutHelper(sr).getLayoutFromText(Globals.FORMATTER_PACKAGE);
+		StringBuffer sb = new StringBuffer();
+		sb.append(layout.doLayout(entry, null, wordsToHighlight));
+
+		return sb.toString();
+	}
+	
+	/*************************/
+	/****** tests Cases ******/
+	/*************************/
+	
+	/**
+	 * @throws Exception
+	 */
+	public void testNoHighlighting() throws Exception
+	{
+		// say that this bibtex object was found
+		mBTE.setSearchHit(true);
+		
+		// define the highlighting settings
+		Globals.prefs.putBoolean("caseSensitiveSearch", false);
+		
+		String result = this.layout("<font face=\"arial\">\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract}\\end{abstract}</font>", mBTE, new ArrayList<String>());
+		String expecting = "<font face=\"arial\"><BR><BR><b>Abstract: </b> In this paper, we initiate a formal study of security on Android: Google's new open-source platform for mobile devices. Tags: Paper android google Open-Source Devices</font>";
+		
+		assertEquals(expecting, result);
+	}
+	
+	/**
+	 * @throws Exception
+	 */
+	public void testHighlightingOneWordCaseInsesitive() throws Exception
+	{
+		// say that this bibtex object was found
+		mBTE.setSearchHit(true);
+		
+		// define the serach words
+		ArrayList<String> words = new ArrayList<String>();
+		words.add("google");
+		
+		// define the highlighting settings
+		Globals.prefs.putBoolean("caseSensitiveSearch", false);
+		
+		String result = this.layout("<font face=\"arial\">\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract}\\end{abstract}</font>", mBTE, words);
+		String containing = "<span style=\"background-color:#FF4500;\">Google</span>"; 
+		
+		// check
+		assertTrue(result.contains(containing));
+	}
+	
+	/**
+	 * @throws Exception
+	 */
+	public void testHighlightingTwoWordsCaseInsesitive() throws Exception
+	{
+		// say that this bibtex object was found
+		mBTE.setSearchHit(true);
+		
+		// define the serach words
+		ArrayList<String> words = new ArrayList<String>();
+		words.add("Android");
+		words.add("study");
+		
+		// define the highlighting settings
+		Globals.prefs.putBoolean("caseSensitiveSearch", false);
+		
+		String result = this.layout("<font face=\"arial\">\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract}\\end{abstract}</font>", mBTE, words);
+		
+		String containing = "<span style=\"background-color:#FF4500;\">Android</span>"; 
+		String containing2 = "<span style=\"background-color:#FF4500;\">study</span>";
+		
+		// check
+		assertTrue(result.contains(containing));
+		assertTrue(result.contains(containing2));
+	}
+
+	
+	/**
+	 * @throws Exception
+	 */
+	public void testHighlightingOneWordCaseSesitive() throws Exception
+	{
+		// say that this bibtex object was found
+		mBTE.setSearchHit(true);
+		
+		// define the serach words
+		ArrayList<String> words = new ArrayList<String>();
+		words.add("google");
+		
+		// define the highlighting settings
+		Globals.prefs.putBoolean("caseSensitiveSearch", true);
+		
+		String result = this.layout("<font face=\"arial\">\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract}\\end{abstract}</font>", mBTE, words);
+		String expected = "<font face=\"arial\"><BR><BR><b>Abstract: </b> In this paper, we initiate a formal study of security on Android: Google's new open-source platform for mobile devices. Tags: Paper android <span style=\"background-color:#FF4500;\">google</span> Open-Source Devices</font>";
+		
+		// check
+		assertEquals(expected, result);
+	}
+	
+	/**
+	 * @throws Exception
+	 */
+	public void testHighlightingMoreWordsCaseSesitive() throws Exception
+	{
+		// say that this bibtex object was found
+		mBTE.setSearchHit(true);
+		
+		// define the serach words
+		ArrayList<String> words = new ArrayList<String>();
+		words.add("Android");
+		words.add("study");
+		words.add("Open");
+		
+		// define the highlighting settings
+		Globals.prefs.putBoolean("caseSensitiveSearch", false);
+		
+		String result = this.layout("<font face=\"arial\">\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract}\\end{abstract}</font>", mBTE, words);
+		String expected = "<font face=\"arial\"><BR><BR><b>Abstract: </b> In this paper, we initiate a formal <span style=\"background-color:#FF4500;\">study</span> of security on <span style=\"background-color:#FF4500;\">Android</span>: Google's new <span style=\"background-color:#FF4500;\">open</span>-source platform for mobile devices. Tags: Paper <span style=\"background-color:#FF4500;\">android</span> google <span style=\"background-color:#FF4500;\">Open</span>-Source Devices</font>";
+		
+		// check
+		assertEquals(expected, result);
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/LayoutTest.java b/src/java/tests/net/sf/jabref/export/layout/LayoutTest.java
index f8c1cc3..aa36f58 100644
--- a/src/java/tests/net/sf/jabref/export/layout/LayoutTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/LayoutTest.java
@@ -1,108 +1,108 @@
-package tests.net.sf.jabref.export.layout;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.Collection;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.export.layout.Layout;
-import net.sf.jabref.export.layout.LayoutHelper;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.imports.ParserResult;
-
-public class LayoutTest extends TestCase {
-
-	/**
-	 * Initialize Preferences.
-	 */
-	protected void setUp() throws Exception {
-		super.setUp();
-		if (Globals.prefs == null) {
-			Globals.prefs = JabRefPreferences.getInstance();
-		}
-	}
-
-	/**
-	 * Return Test data.
-	 */
-	public String t1BibtexString() {
-		return "@article{canh05,\n"
-			+ "  author = {This\nis\na\ntext},\n"
-			+ "  title = {Effective work practices for floss development: A model and propositions},\n"
-			+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},\n"
-			+ "  year = {2005},\n" + "  owner = {oezbek},\n" + "  timestamp = {2006.05.29},\n"
-			+ "  url = {http://james.howison.name/publications.html},\n" + "  abstract = {\\~{n}\n"
-			+ "\\~n\n" + "\\'i\n" + "\\i\n" + "\\i}\n" + "}\n";
-	}
-
-	public BibtexEntry t1BibtexEntry() throws IOException {
-		return bibtexString2BibtexEntry(t1BibtexString());
-	}
-
-	public static BibtexEntry bibtexString2BibtexEntry(String s) throws IOException {
-		ParserResult result = BibtexParser.parse(new StringReader(s));
-		Collection<BibtexEntry> c = result.getDatabase().getEntries();
-		assertEquals(1, c.size());
-		return c.iterator().next();
-	}
-
-	public String layout(String layoutFile, String entry) throws Exception {
-
-		BibtexEntry be = bibtexString2BibtexEntry(entry);
-		StringReader sr = new StringReader(layoutFile.replaceAll("__NEWLINE__", "\n"));
-		Layout layout = new LayoutHelper(sr).getLayoutFromText(Globals.FORMATTER_PACKAGE);
-		StringBuffer sb = new StringBuffer();
-		sb.append(layout.doLayout(be, null));
-
-		return sb.toString();
-	}
-
-	public void testLayoutBibtextype() throws Exception {
-		assertEquals("Other", layout("\\bibtextype", "@other{bla, author={This\nis\na\ntext}}"));
-		assertEquals("Article", layout("\\bibtextype", "@article{bla, author={This\nis\na\ntext}}"));
-		assertEquals("Misc", layout("\\bibtextype", "@misc{bla, author={This\nis\na\ntext}}"));
-	}
-
-	public void testHTMLChar() throws Exception {
-		String layoutText = layout("\\begin{author}\\format[HTMLChars]{\\author}\\end{author} ",
-			"@other{bla, author={This\nis\na\ntext}}");
-
-		assertEquals("This is a text ", layoutText);
-
-		layoutText = layout("\\begin{author}\\format[HTMLChars]{\\author}\\end{author}",
-			"@other{bla, author={This\nis\na\ntext}}");
-
-		assertEquals("This is a text", layoutText);
-
-		layoutText = layout("\\begin{author}\\format[HTMLChars]{\\author}\\end{author} ",
-			"@other{bla, author={This\nis\na\n\ntext}}");
-
-		assertEquals("This is a<p>text ", layoutText);
-	}
-	
-	public void testPluginLoading() throws Exception {
-		String layoutText = layout("\\begin{author}\\format[NameFormatter]{\\author}\\end{author}",
-			"@other{bla, author={Joe Doe and Jane, Moon}}");
-
-		assertEquals("Joe Doe, Moon Jane", layoutText);
-	}
-
-	/**
-	 * [ 1495181 ] Dotless i and tilde not handled in preview
-	 * 
-	 * @throws Exception
-	 */
-	public void testLayout() throws Exception {
-
-		String layoutText = layout(
-			"<font face=\"arial\">\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract}\\end{abstract}</font>",
-			t1BibtexString());
-
-		assertEquals(
-			"<font face=\"arial\"><BR><BR><b>Abstract: </b> ñ ñ í ı ı</font>",
-			layoutText);
-	}
-}
+package tests.net.sf.jabref.export.layout;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Collection;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.export.layout.Layout;
+import net.sf.jabref.export.layout.LayoutHelper;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.imports.ParserResult;
+
+public class LayoutTest extends TestCase {
+
+	/**
+	 * Initialize Preferences.
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		if (Globals.prefs == null) {
+			Globals.prefs = JabRefPreferences.getInstance();
+		}
+	}
+
+	/**
+	 * Return Test data.
+	 */
+	public String t1BibtexString() {
+		return "@article{canh05,\n"
+			+ "  author = {This\nis\na\ntext},\n"
+			+ "  title = {Effective work practices for floss development: A model and propositions},\n"
+			+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},\n"
+			+ "  year = {2005},\n" + "  owner = {oezbek},\n" + "  timestamp = {2006.05.29},\n"
+			+ "  url = {http://james.howison.name/publications.html},\n" + "  abstract = {\\~{n}\n"
+			+ "\\~n\n" + "\\'i\n" + "\\i\n" + "\\i}\n" + "}\n";
+	}
+
+	public BibtexEntry t1BibtexEntry() throws IOException {
+		return bibtexString2BibtexEntry(t1BibtexString());
+	}
+
+	public static BibtexEntry bibtexString2BibtexEntry(String s) throws IOException {
+		ParserResult result = BibtexParser.parse(new StringReader(s));
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
+		assertEquals(1, c.size());
+		return c.iterator().next();
+	}
+
+	public String layout(String layoutFile, String entry) throws Exception {
+
+		BibtexEntry be = bibtexString2BibtexEntry(entry);
+		StringReader sr = new StringReader(layoutFile.replaceAll("__NEWLINE__", "\n"));
+		Layout layout = new LayoutHelper(sr).getLayoutFromText(Globals.FORMATTER_PACKAGE);
+		StringBuffer sb = new StringBuffer();
+		sb.append(layout.doLayout(be, null));
+
+		return sb.toString();
+	}
+
+	public void testLayoutBibtextype() throws Exception {
+		assertEquals("Other", layout("\\bibtextype", "@other{bla, author={This\nis\na\ntext}}"));
+		assertEquals("Article", layout("\\bibtextype", "@article{bla, author={This\nis\na\ntext}}"));
+		assertEquals("Misc", layout("\\bibtextype", "@misc{bla, author={This\nis\na\ntext}}"));
+	}
+
+	public void testHTMLChar() throws Exception {
+		String layoutText = layout("\\begin{author}\\format[HTMLChars]{\\author}\\end{author} ",
+			"@other{bla, author={This\nis\na\ntext}}");
+
+		assertEquals("This is a text ", layoutText);
+
+		layoutText = layout("\\begin{author}\\format[HTMLChars]{\\author}\\end{author}",
+			"@other{bla, author={This\nis\na\ntext}}");
+
+		assertEquals("This is a text", layoutText);
+
+		layoutText = layout("\\begin{author}\\format[HTMLChars]{\\author}\\end{author} ",
+			"@other{bla, author={This\nis\na\n\ntext}}");
+
+		assertEquals("This is a<p>text ", layoutText);
+	}
+	
+	public void testPluginLoading() throws Exception {
+		String layoutText = layout("\\begin{author}\\format[NameFormatter]{\\author}\\end{author}",
+			"@other{bla, author={Joe Doe and Jane, Moon}}");
+
+		assertEquals("Joe Doe, Moon Jane", layoutText);
+	}
+
+	/**
+	 * [ 1495181 ] Dotless i and tilde not handled in preview
+	 * 
+	 * @throws Exception
+	 */
+	public void testLayout() throws Exception {
+
+		String layoutText = layout(
+			"<font face=\"arial\">\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract}\\end{abstract}</font>",
+			t1BibtexString());
+
+		assertEquals(
+			"<font face=\"arial\"><BR><BR><b>Abstract: </b> ñ ñ í ı ı</font>",
+			layoutText);
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/RTFCharsTest.java b/src/java/tests/net/sf/jabref/export/layout/RTFCharsTest.java
index 12ce481..986f05c 100644
--- a/src/java/tests/net/sf/jabref/export/layout/RTFCharsTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/RTFCharsTest.java
@@ -1,86 +1,86 @@
-package tests.net.sf.jabref.export.layout;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.RTFChars;
-
-public class RTFCharsTest extends TestCase {
-
-	public void testBasicFormat() {
-
-		LayoutFormatter layout = new RTFChars();
-
-		assertEquals("", layout.format(""));
-
-		assertEquals("hallo", layout.format("hallo"));
-
-		// We should be able to replace the ? with e
-		assertEquals("R\\u233?flexions sur le timing de la quantit\\u233?", layout.format("R�flexions sur le timing de la quantit�"));
-
-		assertEquals("h\\u225allo", layout.format("h\\'allo"));
-		assertEquals("h\\u225allo", layout.format("h\\'allo"));
-	}
-
-	public void testLaTeXHighlighting(){
-		
-		LayoutFormatter layout = new RTFChars();
-		
-		assertEquals("{\\i hallo}", layout.format("\\emph{hallo}"));
-		assertEquals("{\\i hallo}", layout.format("{\\emph hallo}"));
-
-		assertEquals("{\\i hallo}", layout.format("\\textit{hallo}"));
-		assertEquals("{\\i hallo}", layout.format("{\\textit hallo}"));
-
-		assertEquals("{\\b hallo}", layout.format("\\textbf{hallo}"));
-		assertEquals("{\\b hallo}", layout.format("{\\textbf hallo}"));
-	}
-	
-	public void testComplicated() {
-		LayoutFormatter layout = new RTFChars();
-
-		assertEquals("R\\u233eflexions sur le timing de la quantit\\u233e \\u230ae should be \\u230ae", layout.format("R�flexions sur le timing de la quantit� \\ae should be �"));
-
-		assertEquals("h\\u225all{\\uc2\\u339oe}", layout.format("h\\'all\\oe "));
-	}
-
-	public void testSpecialCharacters() {
-
-		LayoutFormatter layout = new RTFChars();
-
-		assertEquals("\\u243o", layout.format("\\'{o}")); // �
-		assertEquals("\\'f2", layout.format("\\`{o}")); // �
-		assertEquals("\\'f4", layout.format("\\^{o}")); // �
-		assertEquals("\\'f6", layout.format("\\\"{o}")); // �
-		assertEquals("\\u245o", layout.format("\\~{o}")); // �
-		assertEquals("\\u333o", layout.format("\\={o}"));
-		assertEquals("\\u334O", layout.format("\\u{o}"));
-		assertEquals("\\u231c", layout.format("\\c{c}")); // �
-		assertEquals("{\\uc2\\u339oe}", layout.format("\\oe"));
-		assertEquals("{\\uc2\\u338OE}", layout.format("\\OE"));
-		assertEquals("{\\uc2\\u230ae}", layout.format("\\ae")); // �
-		assertEquals("{\\uc2\\u198AE}", layout.format("\\AE")); // �
-
-		assertEquals("", layout.format("\\.{o}")); // ???
-		assertEquals("", layout.format("\\v{o}")); // ???
-		assertEquals("", layout.format("\\H{a}")); // � // ???
-		assertEquals("", layout.format("\\t{oo}"));
-		assertEquals("", layout.format("\\d{o}")); // ???
-		assertEquals("", layout.format("\\b{o}")); // ???
-		assertEquals("", layout.format("\\aa")); // �
-		assertEquals("", layout.format("\\AA")); // �
-		assertEquals("", layout.format("\\o")); // �
-		assertEquals("", layout.format("\\O")); // �
-		assertEquals("", layout.format("\\l"));
-		assertEquals("", layout.format("\\L"));
-		assertEquals("{\\uc2\\u223ss}", layout.format("\\ss")); // �
-		assertEquals("", layout.format("?`")); // �
-		assertEquals("", layout.format("!`")); // �
-
-		assertEquals("", layout.format("\\dag"));
-		assertEquals("", layout.format("\\ddag"));
-		assertEquals("", layout.format("\\S")); // �
-		assertEquals("", layout.format("\\P")); // �
-		assertEquals("", layout.format("\\copyright")); // �
-		assertEquals("", layout.format("\\pounds")); // �
-	}
-}
+package tests.net.sf.jabref.export.layout;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.RTFChars;
+
+public class RTFCharsTest extends TestCase {
+
+	public void testBasicFormat() {
+
+		LayoutFormatter layout = new RTFChars();
+
+		assertEquals("", layout.format(""));
+
+		assertEquals("hallo", layout.format("hallo"));
+
+		// We should be able to replace the ? with e
+		assertEquals("R\\u233?flexions sur le timing de la quantit\\u233?", layout.format("R�flexions sur le timing de la quantit�"));
+
+		assertEquals("h\\u225allo", layout.format("h\\'allo"));
+		assertEquals("h\\u225allo", layout.format("h\\'allo"));
+	}
+
+	public void testLaTeXHighlighting(){
+		
+		LayoutFormatter layout = new RTFChars();
+		
+		assertEquals("{\\i hallo}", layout.format("\\emph{hallo}"));
+		assertEquals("{\\i hallo}", layout.format("{\\emph hallo}"));
+
+		assertEquals("{\\i hallo}", layout.format("\\textit{hallo}"));
+		assertEquals("{\\i hallo}", layout.format("{\\textit hallo}"));
+
+		assertEquals("{\\b hallo}", layout.format("\\textbf{hallo}"));
+		assertEquals("{\\b hallo}", layout.format("{\\textbf hallo}"));
+	}
+	
+	public void testComplicated() {
+		LayoutFormatter layout = new RTFChars();
+
+		assertEquals("R\\u233eflexions sur le timing de la quantit\\u233e \\u230ae should be \\u230ae", layout.format("R�flexions sur le timing de la quantit� \\ae should be �"));
+
+		assertEquals("h\\u225all{\\uc2\\u339oe}", layout.format("h\\'all\\oe "));
+	}
+
+	public void testSpecialCharacters() {
+
+		LayoutFormatter layout = new RTFChars();
+
+		assertEquals("\\u243o", layout.format("\\'{o}")); // �
+		assertEquals("\\'f2", layout.format("\\`{o}")); // �
+		assertEquals("\\'f4", layout.format("\\^{o}")); // �
+		assertEquals("\\'f6", layout.format("\\\"{o}")); // �
+		assertEquals("\\u245o", layout.format("\\~{o}")); // �
+		assertEquals("\\u333o", layout.format("\\={o}"));
+		assertEquals("\\u334O", layout.format("\\u{o}"));
+		assertEquals("\\u231c", layout.format("\\c{c}")); // �
+		assertEquals("{\\uc2\\u339oe}", layout.format("\\oe"));
+		assertEquals("{\\uc2\\u338OE}", layout.format("\\OE"));
+		assertEquals("{\\uc2\\u230ae}", layout.format("\\ae")); // �
+		assertEquals("{\\uc2\\u198AE}", layout.format("\\AE")); // �
+
+		assertEquals("", layout.format("\\.{o}")); // ???
+		assertEquals("", layout.format("\\v{o}")); // ???
+		assertEquals("", layout.format("\\H{a}")); // � // ???
+		assertEquals("", layout.format("\\t{oo}"));
+		assertEquals("", layout.format("\\d{o}")); // ???
+		assertEquals("", layout.format("\\b{o}")); // ???
+		assertEquals("", layout.format("\\aa")); // �
+		assertEquals("", layout.format("\\AA")); // �
+		assertEquals("", layout.format("\\o")); // �
+		assertEquals("", layout.format("\\O")); // �
+		assertEquals("", layout.format("\\l"));
+		assertEquals("", layout.format("\\L"));
+		assertEquals("{\\uc2\\u223ss}", layout.format("\\ss")); // �
+		assertEquals("", layout.format("?`")); // �
+		assertEquals("", layout.format("!`")); // �
+
+		assertEquals("", layout.format("\\dag"));
+		assertEquals("", layout.format("\\ddag"));
+		assertEquals("", layout.format("\\S")); // �
+		assertEquals("", layout.format("\\P")); // �
+		assertEquals("", layout.format("\\copyright")); // �
+		assertEquals("", layout.format("\\pounds")); // �
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AllTests.java b/src/java/tests/net/sf/jabref/export/layout/format/AllTests.java
index 8d993f7..6645267 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AllTests.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AllTests.java
@@ -1,37 +1,37 @@
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite("Test for test.net.sf.jabref");
-		//$JUnit-BEGIN$
-		suite.addTestSuite(AuthorAbbreviatorTest.class);
-		suite.addTestSuite(AuthorLastFirstTest.class);
-		suite.addTestSuite(AuthorLastFirstAbbrOxfordCommasTest.class);
-		suite.addTestSuite(BibtexNameLayoutFormatterTest.class);
-		suite.addTestSuite(AuthorFirstAbbrLastOxfordCommasTest.class);
-		suite.addTestSuite(AuthorOrgSciTest.class);
-		suite.addTestSuite(AuthorLastFirstOxfordCommasTest.class);
-		suite.addTestSuite(AuthorFirstLastCommasTest.class);
-		suite.addTestSuite(NoSpaceBetweenAbbreviationsTest.class);
-		suite.addTestSuite(ResolvePDFTest.class);
-		suite.addTestSuite(DOICheckTest.class);
-		suite.addTestSuite(AuthorFirstAbbrLastCommasTest.class);
-		suite.addTestSuite(AuthorFirstLastOxfordCommasTest.class);
-		suite.addTestSuite(CompositeFormatTest.class);
-		suite.addTestSuite(AuthorFirstFirstTest.class);
-		suite.addTestSuite(AuthorLastFirstAbbrCommasTest.class);
-		suite.addTestSuite(AuthorLastFirstCommasTest.class);
-		suite.addTestSuite(AuthorAndsReplacerTest.class);
-		suite.addTestSuite(AuthorLastFirstAbbreviatorTester.class);
-		suite.addTestSuite(HTMLParagraphsTest.class);
-		suite.addTestSuite(AuthorAndsCommaReplacerTest.class);
-		suite.addTestSuite(RemoveTildeTest.class);
-		//$JUnit-END$
-		return suite;
-	}
-
-}
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for test.net.sf.jabref");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(AuthorAbbreviatorTest.class);
+		suite.addTestSuite(AuthorLastFirstTest.class);
+		suite.addTestSuite(AuthorLastFirstAbbrOxfordCommasTest.class);
+		suite.addTestSuite(BibtexNameLayoutFormatterTest.class);
+		suite.addTestSuite(AuthorFirstAbbrLastOxfordCommasTest.class);
+		suite.addTestSuite(AuthorOrgSciTest.class);
+		suite.addTestSuite(AuthorLastFirstOxfordCommasTest.class);
+		suite.addTestSuite(AuthorFirstLastCommasTest.class);
+		suite.addTestSuite(NoSpaceBetweenAbbreviationsTest.class);
+		suite.addTestSuite(ResolvePDFTest.class);
+		suite.addTestSuite(DOICheckTest.class);
+		suite.addTestSuite(AuthorFirstAbbrLastCommasTest.class);
+		suite.addTestSuite(AuthorFirstLastOxfordCommasTest.class);
+		suite.addTestSuite(CompositeFormatTest.class);
+		suite.addTestSuite(AuthorFirstFirstTest.class);
+		suite.addTestSuite(AuthorLastFirstAbbrCommasTest.class);
+		suite.addTestSuite(AuthorLastFirstCommasTest.class);
+		suite.addTestSuite(AuthorAndsReplacerTest.class);
+		suite.addTestSuite(AuthorLastFirstAbbreviatorTester.class);
+		suite.addTestSuite(HTMLParagraphsTest.class);
+		suite.addTestSuite(AuthorAndsCommaReplacerTest.class);
+		suite.addTestSuite(RemoveTildeTest.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorAbbreviatorTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorAbbreviatorTest.java
index 0c6c532..4f4f78b 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorAbbreviatorTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorAbbreviatorTest.java
@@ -1,55 +1,55 @@
-/*
- * Copyright (C) 2006 Jabref-Team
- * 
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorAbbreviator;
-import net.sf.jabref.export.layout.format.AuthorLastFirstAbbreviator;
-
-/**
- * 
- * Is the save as the AuthorLastFirstAbbreviator.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class AuthorAbbreviatorTest extends TestCase {
-
-	public void testFormat() {
-
-		LayoutFormatter a = new AuthorLastFirstAbbreviator();
-		LayoutFormatter b = new AuthorAbbreviator();
-
-		assertEquals(b.format(""), a.format(""));
-		assertEquals(b.format("Someone, Van Something"), a.format("Someone, Van Something"));
-		assertEquals(b.format("Smith, John"), a.format("Smith, John"));
-		assertEquals(b.format("von Neumann, John and Smith, John and Black Brown, Peter"), a
-			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
-
-	}
-
-}
+/*
+ * Copyright (C) 2006 Jabref-Team
+ * 
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorAbbreviator;
+import net.sf.jabref.export.layout.format.AuthorLastFirstAbbreviator;
+
+/**
+ * 
+ * Is the save as the AuthorLastFirstAbbreviator.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class AuthorAbbreviatorTest extends TestCase {
+
+	public void testFormat() {
+
+		LayoutFormatter a = new AuthorLastFirstAbbreviator();
+		LayoutFormatter b = new AuthorAbbreviator();
+
+		assertEquals(b.format(""), a.format(""));
+		assertEquals(b.format("Someone, Van Something"), a.format("Someone, Van Something"));
+		assertEquals(b.format("Smith, John"), a.format("Smith, John"));
+		assertEquals(b.format("von Neumann, John and Smith, John and Black Brown, Peter"), a
+			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
+
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorAndsCommaReplacerTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorAndsCommaReplacerTest.java
index c36fd82..1d059ca 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorAndsCommaReplacerTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorAndsCommaReplacerTest.java
@@ -1,61 +1,61 @@
-/*
- * Copyright (C) 2006 Jabref-Team
- * 
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorAndsCommaReplacer;
-
-/**
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class AuthorAndsCommaReplacerTest extends TestCase {
-
-	/**
-	 * Test method for
-	 * {@link net.sf.jabref.export.layout.format.AuthorAndsCommaReplacer#format(java.lang.String)}.
-	 */
-	public void testFormat() {
-
-		LayoutFormatter a = new AuthorAndsCommaReplacer();
-		
-		// Empty case
-		assertEquals("", a.format(""));
-
-		// Single Names don't change
-		assertEquals("Someone, Van Something", a.format("Someone, Van Something"));
-		
-		// Two names just an &
-		assertEquals("John von Neumann & Peter Black Brown",
-			a.format("John von Neumann and Peter Black Brown"));
-	
-		// Three names put a comma:
-		assertEquals("von Neumann, John, Smith, John & Black Brown, Peter",
-				a.format("von Neumann, John and Smith, John and Black Brown, Peter"));
-	}
-}
+/*
+ * Copyright (C) 2006 Jabref-Team
+ * 
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorAndsCommaReplacer;
+
+/**
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class AuthorAndsCommaReplacerTest extends TestCase {
+
+	/**
+	 * Test method for
+	 * {@link net.sf.jabref.export.layout.format.AuthorAndsCommaReplacer#format(java.lang.String)}.
+	 */
+	public void testFormat() {
+
+		LayoutFormatter a = new AuthorAndsCommaReplacer();
+		
+		// Empty case
+		assertEquals("", a.format(""));
+
+		// Single Names don't change
+		assertEquals("Someone, Van Something", a.format("Someone, Van Something"));
+		
+		// Two names just an &
+		assertEquals("John von Neumann & Peter Black Brown",
+			a.format("John von Neumann and Peter Black Brown"));
+	
+		// Three names put a comma:
+		assertEquals("von Neumann, John, Smith, John & Black Brown, Peter",
+				a.format("von Neumann, John and Smith, John and Black Brown, Peter"));
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorAndsReplacerTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorAndsReplacerTest.java
index 9fb010b..60c849d 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorAndsReplacerTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorAndsReplacerTest.java
@@ -1,64 +1,64 @@
-/*
- * Copyright (C) 2006 Jabref-Team
- * 
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorAndsReplacer;
-
-/**
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class AuthorAndsReplacerTest extends TestCase {
-
-	/**
-	 * Test method for
-	 * {@link net.sf.jabref.export.layout.format.AuthorAndsReplacer#format(java.lang.String)}.
-	 */
-	public void testFormat() {
-		LayoutFormatter a = new AuthorAndsReplacer();
-
-		// Empty case
-		assertEquals("", a.format(""));
-
-		// Single Names don't change
-		assertEquals("Someone, Van Something", a.format("Someone, Van Something"));
-
-		// Two names just an &
-		assertEquals("John Smith & Black Brown, Peter", a
-			.format("John Smith and Black Brown, Peter"));
-
-		// Three names put a comma:
-		assertEquals("von Neumann, John; Smith, John & Black Brown, Peter", a
-			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
-
-		assertEquals("John von Neumann; John Smith & Peter Black Brown", a
-			.format("John von Neumann and John Smith and Peter Black Brown"));
-	}
-
-}
+/*
+ * Copyright (C) 2006 Jabref-Team
+ * 
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorAndsReplacer;
+
+/**
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class AuthorAndsReplacerTest extends TestCase {
+
+	/**
+	 * Test method for
+	 * {@link net.sf.jabref.export.layout.format.AuthorAndsReplacer#format(java.lang.String)}.
+	 */
+	public void testFormat() {
+		LayoutFormatter a = new AuthorAndsReplacer();
+
+		// Empty case
+		assertEquals("", a.format(""));
+
+		// Single Names don't change
+		assertEquals("Someone, Van Something", a.format("Someone, Van Something"));
+
+		// Two names just an &
+		assertEquals("John Smith & Black Brown, Peter", a
+			.format("John Smith and Black Brown, Peter"));
+
+		// Three names put a comma:
+		assertEquals("von Neumann, John; Smith, John & Black Brown, Peter", a
+			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
+
+		assertEquals("John von Neumann; John Smith & Peter Black Brown", a
+			.format("John von Neumann and John Smith and Peter Black Brown"));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastCommasTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastCommasTest.java
index a3828bc..77da642 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastCommasTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastCommasTest.java
@@ -1,61 +1,61 @@
-/*
- * Copyright (C) 2006 Jabref-Team
- *               2003 Morten O. Alver, Nizar N. Batada
- * 
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorFirstAbbrLastCommas;
-
-/**
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- *
- */
-public class AuthorFirstAbbrLastCommasTest extends TestCase {
-
-	public void testFormat() {
-		LayoutFormatter a = new AuthorFirstAbbrLastCommas();
-
-		// Empty case
-		assertEquals("", a.format(""));
-
-		// Single Names
-		assertEquals("V. S. Someone", a.format("Someone, Van Something"));
-
-		// Two names
-		assertEquals("J. von Neumann and P. Black Brown", a
-			.format("John von Neumann and Black Brown, Peter"));
-
-		// Three names
-		assertEquals("J. von Neumann, J. Smith and P. Black Brown", a
-			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
-
-		assertEquals("J. von Neumann, J. Smith and P. Black Brown", a
-			.format("John von Neumann and John Smith and Black Brown, Peter"));
-	}
-
-}
+/*
+ * Copyright (C) 2006 Jabref-Team
+ *               2003 Morten O. Alver, Nizar N. Batada
+ * 
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorFirstAbbrLastCommas;
+
+/**
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ *
+ */
+public class AuthorFirstAbbrLastCommasTest extends TestCase {
+
+	public void testFormat() {
+		LayoutFormatter a = new AuthorFirstAbbrLastCommas();
+
+		// Empty case
+		assertEquals("", a.format(""));
+
+		// Single Names
+		assertEquals("V. S. Someone", a.format("Someone, Van Something"));
+
+		// Two names
+		assertEquals("J. von Neumann and P. Black Brown", a
+			.format("John von Neumann and Black Brown, Peter"));
+
+		// Three names
+		assertEquals("J. von Neumann, J. Smith and P. Black Brown", a
+			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
+
+		assertEquals("J. von Neumann, J. Smith and P. Black Brown", a
+			.format("John von Neumann and John Smith and Black Brown, Peter"));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastOxfordCommasTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastOxfordCommasTest.java
index 88bff51..ebd7f15 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastOxfordCommasTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastOxfordCommasTest.java
@@ -1,63 +1,63 @@
-/*
- * Copyright (C) 2006 Jabref-Team
- * 
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorFirstAbbrLastOxfordCommas;
-
-/**
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- *
- */
-public class AuthorFirstAbbrLastOxfordCommasTest extends TestCase {
-
-	/**
-	 * Test method for {@link net.sf.jabref.export.layout.format.AuthorFirstAbbrLastOxfordCommas#format(java.lang.String)}.
-	 */
-	public void testFormat() {
-		LayoutFormatter a = new AuthorFirstAbbrLastOxfordCommas();
-
-		// Empty case
-		assertEquals("", a.format(""));
-
-		// Single Names
-		assertEquals("V. S. Someone", a.format("Someone, Van Something"));
-
-		// Two names
-		assertEquals("J. von Neumann and P. Black Brown", a
-			.format("John von Neumann and Black Brown, Peter"));
-
-		// Three names
-		assertEquals("J. von Neumann, J. Smith, and P. Black Brown", a
-			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
-
-		assertEquals("J. von Neumann, J. Smith, and P. Black Brown", a
-			.format("John von Neumann and John Smith and Black Brown, Peter"));
-	}
-
-}
+/*
+ * Copyright (C) 2006 Jabref-Team
+ * 
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorFirstAbbrLastOxfordCommas;
+
+/**
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ *
+ */
+public class AuthorFirstAbbrLastOxfordCommasTest extends TestCase {
+
+	/**
+	 * Test method for {@link net.sf.jabref.export.layout.format.AuthorFirstAbbrLastOxfordCommas#format(java.lang.String)}.
+	 */
+	public void testFormat() {
+		LayoutFormatter a = new AuthorFirstAbbrLastOxfordCommas();
+
+		// Empty case
+		assertEquals("", a.format(""));
+
+		// Single Names
+		assertEquals("V. S. Someone", a.format("Someone, Van Something"));
+
+		// Two names
+		assertEquals("J. von Neumann and P. Black Brown", a
+			.format("John von Neumann and Black Brown, Peter"));
+
+		// Three names
+		assertEquals("J. von Neumann, J. Smith, and P. Black Brown", a
+			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
+
+		assertEquals("J. von Neumann, J. Smith, and P. Black Brown", a
+			.format("John von Neumann and John Smith and Black Brown, Peter"));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstFirstTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstFirstTest.java
index 7c326f0..aa957c6 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstFirstTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstFirstTest.java
@@ -1,48 +1,48 @@
-/*
- * Copyright (C) 2006 Jabref-Team
- * 
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.format.AuthorFirstFirst;
-
-/**
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class AuthorFirstFirstTest extends TestCase {
-
-	/**
-	 * Test method for
-	 * {@link net.sf.jabref.export.layout.format.AuthorFirstFirst#format(java.lang.String)}.
-	 */
-	public void testFormat() {
-		assertEquals("John von Neumann and John Smith and Peter Black Brown, Jr",
-			new AuthorFirstFirst()
-				.format("von Neumann,,John and John Smith and Black Brown, Jr, Peter"));
-	}
-
-}
+/*
+ * Copyright (C) 2006 Jabref-Team
+ * 
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.format.AuthorFirstFirst;
+
+/**
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class AuthorFirstFirstTest extends TestCase {
+
+	/**
+	 * Test method for
+	 * {@link net.sf.jabref.export.layout.format.AuthorFirstFirst#format(java.lang.String)}.
+	 */
+	public void testFormat() {
+		assertEquals("John von Neumann and John Smith and Peter Black Brown, Jr",
+			new AuthorFirstFirst()
+				.format("von Neumann,,John and John Smith and Black Brown, Jr, Peter"));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstLastCommasTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstLastCommasTest.java
index 5cc079b..12f352f 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstLastCommasTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstLastCommasTest.java
@@ -1,63 +1,63 @@
-/*
- * Copyright (C) 2006 Jabref-Team
- * 
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorFirstLastCommas;
-
-/**
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- *
- */
-public class AuthorFirstLastCommasTest extends TestCase {
-
-	/**
-	 * Test method for {@link net.sf.jabref.export.layout.format.AuthorFirstLastCommas#format(java.lang.String)}.
-	 */
-	public void testFormat() {
-		LayoutFormatter a = new AuthorFirstLastCommas();
-
-		// Empty case
-		assertEquals("", a.format(""));
-
-		// Single Names
-		assertEquals("Van Something Someone", a.format("Someone, Van Something"));
-
-		// Two names
-		assertEquals("John von Neumann and Peter Black Brown", a
-			.format("John von Neumann and Peter Black Brown"));
-
-		// Three names
-		assertEquals("John von Neumann, John Smith and Peter Black Brown", a
-			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
-
-		assertEquals("John von Neumann, John Smith and Peter Black Brown", a
-			.format("John von Neumann and John Smith and Black Brown, Peter"));
-	}
-
-}
+/*
+ * Copyright (C) 2006 Jabref-Team
+ * 
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorFirstLastCommas;
+
+/**
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ *
+ */
+public class AuthorFirstLastCommasTest extends TestCase {
+
+	/**
+	 * Test method for {@link net.sf.jabref.export.layout.format.AuthorFirstLastCommas#format(java.lang.String)}.
+	 */
+	public void testFormat() {
+		LayoutFormatter a = new AuthorFirstLastCommas();
+
+		// Empty case
+		assertEquals("", a.format(""));
+
+		// Single Names
+		assertEquals("Van Something Someone", a.format("Someone, Van Something"));
+
+		// Two names
+		assertEquals("John von Neumann and Peter Black Brown", a
+			.format("John von Neumann and Peter Black Brown"));
+
+		// Three names
+		assertEquals("John von Neumann, John Smith and Peter Black Brown", a
+			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
+
+		assertEquals("John von Neumann, John Smith and Peter Black Brown", a
+			.format("John von Neumann and John Smith and Black Brown, Peter"));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstLastOxfordCommasTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstLastOxfordCommasTest.java
index 3ef93ff..cc85c35 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstLastOxfordCommasTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstLastOxfordCommasTest.java
@@ -1,64 +1,64 @@
-/*
- * Copyright (C) 2006 Jabref-Team
- * 
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorFirstLastOxfordCommas;
-
-/**
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- *
- */
-public class AuthorFirstLastOxfordCommasTest extends TestCase {
-
-	/**
-	 * Test method for {@link net.sf.jabref.export.layout.format.AuthorFirstLastOxfordCommas#format(java.lang.String)}.
-	 */
-	public void testFormat() {
-		LayoutFormatter a = new AuthorFirstLastOxfordCommas();
-
-		// Empty case
-		assertEquals("", a.format(""));
-
-		// Single Names
-		assertEquals("Van Something Someone", a.format("Someone, Van Something"));
-
-		// Two names
-		assertEquals("John von Neumann and Peter Black Brown", a
-			.format("John von Neumann and Peter Black Brown"));
-
-		// Three names
-		assertEquals("John von Neumann, John Smith, and Peter Black Brown", a
-			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
-
-		assertEquals("John von Neumann, John Smith, and Peter Black Brown", a
-			.format("John von Neumann and John Smith and Black Brown, Peter"));
-	}
-
-
-}
+/*
+ * Copyright (C) 2006 Jabref-Team
+ * 
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorFirstLastOxfordCommas;
+
+/**
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ *
+ */
+public class AuthorFirstLastOxfordCommasTest extends TestCase {
+
+	/**
+	 * Test method for {@link net.sf.jabref.export.layout.format.AuthorFirstLastOxfordCommas#format(java.lang.String)}.
+	 */
+	public void testFormat() {
+		LayoutFormatter a = new AuthorFirstLastOxfordCommas();
+
+		// Empty case
+		assertEquals("", a.format(""));
+
+		// Single Names
+		assertEquals("Van Something Someone", a.format("Someone, Van Something"));
+
+		// Two names
+		assertEquals("John von Neumann and Peter Black Brown", a
+			.format("John von Neumann and Peter Black Brown"));
+
+		// Three names
+		assertEquals("John von Neumann, John Smith, and Peter Black Brown", a
+			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
+
+		assertEquals("John von Neumann, John Smith, and Peter Black Brown", a
+			.format("John von Neumann and John Smith and Black Brown, Peter"));
+	}
+
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrCommasTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrCommasTest.java
index 6e5fbcf..916a4d3 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrCommasTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrCommasTest.java
@@ -1,64 +1,64 @@
-/*
- * Copyright (C) 2006 Jabref-Team
- * 
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorLastFirstAbbrCommas;
-
-/**
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- *
- */
-public class AuthorLastFirstAbbrCommasTest extends TestCase {
-
-	/**
-	 * Test method for {@link net.sf.jabref.export.layout.format.AuthorLastFirstAbbrCommas#format(java.lang.String)}.
-	 */
-	public void testFormat() {
-			LayoutFormatter a = new AuthorLastFirstAbbrCommas();
-
-			// Empty case
-			assertEquals("", a.format(""));
-
-			// Single Names
-			assertEquals("Someone, V. S.", a.format("Van Something Someone"));
-
-			// Two names
-			assertEquals("von Neumann, J. and Black Brown, P.", a
-				.format("John von Neumann and Black Brown, Peter"));
-
-			// Three names
-			assertEquals("von Neumann, J., Smith, J. and Black Brown, P.", a
-				.format("von Neumann, John and Smith, John and Black Brown, Peter"));
-
-			assertEquals("von Neumann, J., Smith, J. and Black Brown, P.", a
-				.format("John von Neumann and John Smith and Black Brown, Peter"));
-		
-	}
-
-}
+/*
+ * Copyright (C) 2006 Jabref-Team
+ * 
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorLastFirstAbbrCommas;
+
+/**
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ *
+ */
+public class AuthorLastFirstAbbrCommasTest extends TestCase {
+
+	/**
+	 * Test method for {@link net.sf.jabref.export.layout.format.AuthorLastFirstAbbrCommas#format(java.lang.String)}.
+	 */
+	public void testFormat() {
+			LayoutFormatter a = new AuthorLastFirstAbbrCommas();
+
+			// Empty case
+			assertEquals("", a.format(""));
+
+			// Single Names
+			assertEquals("Someone, V. S.", a.format("Van Something Someone"));
+
+			// Two names
+			assertEquals("von Neumann, J. and Black Brown, P.", a
+				.format("John von Neumann and Black Brown, Peter"));
+
+			// Three names
+			assertEquals("von Neumann, J., Smith, J. and Black Brown, P.", a
+				.format("von Neumann, John and Smith, John and Black Brown, Peter"));
+
+			assertEquals("von Neumann, J., Smith, J. and Black Brown, P.", a
+				.format("John von Neumann and John Smith and Black Brown, Peter"));
+		
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrOxfordCommasTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrOxfordCommasTest.java
index 5c679b3..d65c67e 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrOxfordCommasTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrOxfordCommasTest.java
@@ -1,63 +1,63 @@
-/*
- * Copyright (C) 2006 Jabref-Team
- * 
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorLastFirstAbbrOxfordCommas;
-
-/**
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- *
- */
-public class AuthorLastFirstAbbrOxfordCommasTest extends TestCase {
-
-	/**
-	 * Test method for {@link net.sf.jabref.export.layout.format.AuthorLastFirstAbbrOxfordCommas#format(java.lang.String)}.
-	 */
-	public void testFormat() {
-		LayoutFormatter a = new AuthorLastFirstAbbrOxfordCommas();
-
-		// Empty case
-		assertEquals("", a.format(""));
-
-		// Single Names
-		assertEquals("Someone, V. S.", a.format("Van Something Someone"));
-
-		// Two names
-		assertEquals("von Neumann, J. and Black Brown, P.", a
-			.format("John von Neumann and Black Brown, Peter"));
-
-		// Three names
-		assertEquals("von Neumann, J., Smith, J., and Black Brown, P.", a
-			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
-
-		assertEquals("von Neumann, J., Smith, J., and Black Brown, P.", a
-			.format("John von Neumann and John Smith and Black Brown, Peter"));
-	}
-
-}
+/*
+ * Copyright (C) 2006 Jabref-Team
+ * 
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorLastFirstAbbrOxfordCommas;
+
+/**
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ *
+ */
+public class AuthorLastFirstAbbrOxfordCommasTest extends TestCase {
+
+	/**
+	 * Test method for {@link net.sf.jabref.export.layout.format.AuthorLastFirstAbbrOxfordCommas#format(java.lang.String)}.
+	 */
+	public void testFormat() {
+		LayoutFormatter a = new AuthorLastFirstAbbrOxfordCommas();
+
+		// Empty case
+		assertEquals("", a.format(""));
+
+		// Single Names
+		assertEquals("Someone, V. S.", a.format("Van Something Someone"));
+
+		// Two names
+		assertEquals("von Neumann, J. and Black Brown, P.", a
+			.format("John von Neumann and Black Brown, Peter"));
+
+		// Three names
+		assertEquals("von Neumann, J., Smith, J., and Black Brown, P.", a
+			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
+
+		assertEquals("von Neumann, J., Smith, J., and Black Brown, P.", a
+			.format("John von Neumann and John Smith and Black Brown, Peter"));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbreviatorTester.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbreviatorTester.java
index 446a89c..50194f8 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbreviatorTester.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbreviatorTester.java
@@ -1,100 +1,100 @@
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorLastFirstAbbreviator;
-
-/**
- * Test case  that verifies the functionalities of the
- * formater AuthorLastFirstAbbreviator.
- * 
- * @author Carlos Silla
- * @author Christopher Oezbek <oezi at oezi.de>
- */
-public class AuthorLastFirstAbbreviatorTester extends TestCase {
-
-	/**
-	 * Verifies the Abbreviation of one single author with a simple name.
-	 * 
-	 * Ex: Lastname, Name
-	 */
-	public void testOneAuthorSimpleName() {
-		String name = "Lastname, Name";
-		
-		AuthorLastFirstAbbreviator ab = new AuthorLastFirstAbbreviator();
-		
-		String result = ab.format(name);
-		
-		//Expected Results:
-		String expectedResult = "Lastname, N.";
-
-		//Verifies the functionality:				
-		Assert.assertEquals("Abbreviator Test", result, expectedResult);
-	}
-
-	/**
-	 * Verifies the Abbreviation of one single author with a common name.
-	 * 
-	 * Ex: Lastname, Name Middlename
-	 */
-	public void testOneAuthorCommonName() {
-		String name = "Lastname, Name Middlename";
-		
-		AuthorLastFirstAbbreviator ab = new AuthorLastFirstAbbreviator();
-		
-		String result = ab.format(name);
-		
-		//Expected Results:
-		String expectedResult = "Lastname, N. M.";
-		
-		//Verifies the functionality:				
-		Assert.assertEquals("Abbreviator Test", result, expectedResult);
-	}
-
-	/**
-	 * Verifies the Abbreviation of two single with a common name.
-	 * 
-	 * Ex: Lastname, Name Middlename
-	 */
-	public void testTwoAuthorsCommonName() {
-		String name = "Lastname, Name Middlename and Sobrenome, Nome Nomedomeio";
-		
-		AuthorLastFirstAbbreviator ab = new AuthorLastFirstAbbreviator();
-		
-		String result = ab.format(name);
-		
-		//Expected Results:
-		String expectedResult = "Lastname, N. M. and Sobrenome, N. N.";
-		
-		//Verifies the functionality:				
-		Assert.assertEquals("Abbreviator Test", result, expectedResult);
-	}
-
-
-	/**
-	 * Testcase for 
-	 * http://sourceforge.net/tracker/index.php?func=detail&aid=1466924&group_id=92314&atid=600306
-	 */
-	public void testJrAuthor(){
-		String name = "Other, Jr., Anthony N.";
-		assertEquals("Other, A. N.", abbreviate(name));
-	}
-
-	public void testFormat() {
-
-		LayoutFormatter a = new AuthorLastFirstAbbreviator();
-		
-		assertEquals("", a.format(""));
-		assertEquals("Someone, V. S.", a.format("Someone, Van Something"));
-		assertEquals("Smith, J.", a.format("Smith, John"));
-		assertEquals("von Neumann, J. and Smith, J. and Black Brown, P.",
-				a.format("von Neumann, John and Smith, John and Black Brown, Peter"));
-		
-	}
-	
-	protected String abbreviate(String name) {
-		return (new AuthorLastFirstAbbreviator()).format(name);
-	}
-	
-}
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorLastFirstAbbreviator;
+
+/**
+ * Test case  that verifies the functionalities of the
+ * formater AuthorLastFirstAbbreviator.
+ * 
+ * @author Carlos Silla
+ * @author Christopher Oezbek <oezi at oezi.de>
+ */
+public class AuthorLastFirstAbbreviatorTester extends TestCase {
+
+	/**
+	 * Verifies the Abbreviation of one single author with a simple name.
+	 * 
+	 * Ex: Lastname, Name
+	 */
+	public void testOneAuthorSimpleName() {
+		String name = "Lastname, Name";
+		
+		AuthorLastFirstAbbreviator ab = new AuthorLastFirstAbbreviator();
+		
+		String result = ab.format(name);
+		
+		//Expected Results:
+		String expectedResult = "Lastname, N.";
+
+		//Verifies the functionality:				
+		Assert.assertEquals("Abbreviator Test", result, expectedResult);
+	}
+
+	/**
+	 * Verifies the Abbreviation of one single author with a common name.
+	 * 
+	 * Ex: Lastname, Name Middlename
+	 */
+	public void testOneAuthorCommonName() {
+		String name = "Lastname, Name Middlename";
+		
+		AuthorLastFirstAbbreviator ab = new AuthorLastFirstAbbreviator();
+		
+		String result = ab.format(name);
+		
+		//Expected Results:
+		String expectedResult = "Lastname, N. M.";
+		
+		//Verifies the functionality:				
+		Assert.assertEquals("Abbreviator Test", result, expectedResult);
+	}
+
+	/**
+	 * Verifies the Abbreviation of two single with a common name.
+	 * 
+	 * Ex: Lastname, Name Middlename
+	 */
+	public void testTwoAuthorsCommonName() {
+		String name = "Lastname, Name Middlename and Sobrenome, Nome Nomedomeio";
+		
+		AuthorLastFirstAbbreviator ab = new AuthorLastFirstAbbreviator();
+		
+		String result = ab.format(name);
+		
+		//Expected Results:
+		String expectedResult = "Lastname, N. M. and Sobrenome, N. N.";
+		
+		//Verifies the functionality:				
+		Assert.assertEquals("Abbreviator Test", result, expectedResult);
+	}
+
+
+	/**
+	 * Testcase for 
+	 * http://sourceforge.net/tracker/index.php?func=detail&aid=1466924&group_id=92314&atid=600306
+	 */
+	public void testJrAuthor(){
+		String name = "Other, Jr., Anthony N.";
+		assertEquals("Other, A. N.", abbreviate(name));
+	}
+
+	public void testFormat() {
+
+		LayoutFormatter a = new AuthorLastFirstAbbreviator();
+		
+		assertEquals("", a.format(""));
+		assertEquals("Someone, V. S.", a.format("Someone, Van Something"));
+		assertEquals("Smith, J.", a.format("Smith, John"));
+		assertEquals("von Neumann, J. and Smith, J. and Black Brown, P.",
+				a.format("von Neumann, John and Smith, John and Black Brown, Peter"));
+		
+	}
+	
+	protected String abbreviate(String name) {
+		return (new AuthorLastFirstAbbreviator()).format(name);
+	}
+	
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstCommasTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstCommasTest.java
index 959df5c..d3fb15e 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstCommasTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstCommasTest.java
@@ -1,65 +1,65 @@
-/*
- * Copyright (C) 2006 Jabref-Team
- * 
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorLastFirstCommas;
-
-/**
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class AuthorLastFirstCommasTest extends TestCase {
-
-	/**
-	 * Test method for
-	 * {@link net.sf.jabref.export.layout.format.AuthorLastFirstCommas#format(java.lang.String)}.
-	 */
-	public void testFormat() {
-
-		LayoutFormatter a = new AuthorLastFirstCommas();
-
-		// Empty case
-		assertEquals("", a.format(""));
-
-		// Single Names
-		assertEquals("Someone, Van Something", a.format("Van Something Someone"));
-
-		// Two names
-		assertEquals("von Neumann, John and Black Brown, Peter", a
-			.format("John von Neumann and Black Brown, Peter"));
-
-		// Three names
-		assertEquals("von Neumann, John, Smith, John and Black Brown, Peter", a
-			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
-
-		assertEquals("von Neumann, John, Smith, John and Black Brown, Peter", a
-			.format("John von Neumann and John Smith and Black Brown, Peter"));
-	}
-
-}
+/*
+ * Copyright (C) 2006 Jabref-Team
+ * 
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorLastFirstCommas;
+
+/**
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class AuthorLastFirstCommasTest extends TestCase {
+
+	/**
+	 * Test method for
+	 * {@link net.sf.jabref.export.layout.format.AuthorLastFirstCommas#format(java.lang.String)}.
+	 */
+	public void testFormat() {
+
+		LayoutFormatter a = new AuthorLastFirstCommas();
+
+		// Empty case
+		assertEquals("", a.format(""));
+
+		// Single Names
+		assertEquals("Someone, Van Something", a.format("Van Something Someone"));
+
+		// Two names
+		assertEquals("von Neumann, John and Black Brown, Peter", a
+			.format("John von Neumann and Black Brown, Peter"));
+
+		// Three names
+		assertEquals("von Neumann, John, Smith, John and Black Brown, Peter", a
+			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
+
+		assertEquals("von Neumann, John, Smith, John and Black Brown, Peter", a
+			.format("John von Neumann and John Smith and Black Brown, Peter"));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstOxfordCommasTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstOxfordCommasTest.java
index 10511dd..6858b51 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstOxfordCommasTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstOxfordCommasTest.java
@@ -1,63 +1,63 @@
-/*
- * Copyright (C) 2006 Jabref-Team
- * 
- * All programs in this directory and subdirectories are published under the GNU
- * General Public License as described below.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Further information about the GNU GPL is available at:
- * http://www.gnu.org/copyleft/gpl.ja.html
- *
- */
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorLastFirstOxfordCommas;
-
-/**
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- *
- */
-public class AuthorLastFirstOxfordCommasTest extends TestCase {
-
-	/**
-	 * Test method for {@link net.sf.jabref.export.layout.format.AuthorLastFirstOxfordCommas#format(java.lang.String)}.
-	 */
-	public void testFormat() {
-		LayoutFormatter a = new AuthorLastFirstOxfordCommas();
-
-		// Empty case
-		assertEquals("", a.format(""));
-
-		// Single Names
-		assertEquals("Someone, Van Something", a.format("Van Something Someone"));
-
-		// Two names
-		assertEquals("von Neumann, John and Black Brown, Peter", a
-			.format("John von Neumann and Black Brown, Peter"));
-
-		// Three names
-		assertEquals("von Neumann, John, Smith, John, and Black Brown, Peter", a
-			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
-
-		assertEquals("von Neumann, John, Smith, John, and Black Brown, Peter", a
-			.format("John von Neumann and John Smith and Black Brown, Peter"));
-	}
-
-}
+/*
+ * Copyright (C) 2006 Jabref-Team
+ * 
+ * All programs in this directory and subdirectories are published under the GNU
+ * General Public License as described below.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Further information about the GNU GPL is available at:
+ * http://www.gnu.org/copyleft/gpl.ja.html
+ *
+ */
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorLastFirstOxfordCommas;
+
+/**
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ *
+ */
+public class AuthorLastFirstOxfordCommasTest extends TestCase {
+
+	/**
+	 * Test method for {@link net.sf.jabref.export.layout.format.AuthorLastFirstOxfordCommas#format(java.lang.String)}.
+	 */
+	public void testFormat() {
+		LayoutFormatter a = new AuthorLastFirstOxfordCommas();
+
+		// Empty case
+		assertEquals("", a.format(""));
+
+		// Single Names
+		assertEquals("Someone, Van Something", a.format("Van Something Someone"));
+
+		// Two names
+		assertEquals("von Neumann, John and Black Brown, Peter", a
+			.format("John von Neumann and Black Brown, Peter"));
+
+		// Three names
+		assertEquals("von Neumann, John, Smith, John, and Black Brown, Peter", a
+			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
+
+		assertEquals("von Neumann, John, Smith, John, and Black Brown, Peter", a
+			.format("John von Neumann and John Smith and Black Brown, Peter"));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstTest.java
index 102c0d2..9031cc8 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstTest.java
@@ -1,30 +1,30 @@
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorLastFirst;
-
-public class AuthorLastFirstTest extends TestCase {
-
-	public void testFormat() {
-		LayoutFormatter a = new AuthorLastFirst();
-
-		// Empty case
-		assertEquals("", a.format(""));
-
-		// Single Names
-		assertEquals("Someone, Van Something", a.format("Van Something Someone"));
-
-		// Two names
-		assertEquals("von Neumann, John and Black Brown, Peter", a
-			.format("John von Neumann and Black Brown, Peter"));
-
-		// Three names
-		assertEquals("von Neumann, John and Smith, John and Black Brown, Peter", a
-			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
-
-		assertEquals("von Neumann, John and Smith, John and Black Brown, Peter", a
-			.format("John von Neumann and John Smith and Black Brown, Peter"));
-	}
-
-}
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorLastFirst;
+
+public class AuthorLastFirstTest extends TestCase {
+
+	public void testFormat() {
+		LayoutFormatter a = new AuthorLastFirst();
+
+		// Empty case
+		assertEquals("", a.format(""));
+
+		// Single Names
+		assertEquals("Someone, Van Something", a.format("Van Something Someone"));
+
+		// Two names
+		assertEquals("von Neumann, John and Black Brown, Peter", a
+			.format("John von Neumann and Black Brown, Peter"));
+
+		// Three names
+		assertEquals("von Neumann, John and Smith, John and Black Brown, Peter", a
+			.format("von Neumann, John and Smith, John and Black Brown, Peter"));
+
+		assertEquals("von Neumann, John and Smith, John and Black Brown, Peter", a
+			.format("John von Neumann and John Smith and Black Brown, Peter"));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/AuthorOrgSciTest.java b/src/java/tests/net/sf/jabref/export/layout/format/AuthorOrgSciTest.java
index dd6b1b6..9ff47d8 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/AuthorOrgSciTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/AuthorOrgSciTest.java
@@ -1,33 +1,33 @@
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorOrgSci;
-import net.sf.jabref.export.layout.format.CompositeFormat;
-import net.sf.jabref.export.layout.format.NoSpaceBetweenAbbreviations;
-
-public class AuthorOrgSciTest extends TestCase {
-
-	protected void setUp() throws Exception {
-		super.setUp();
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-	}
-	
-	public void testOrgSci(){
-		LayoutFormatter f = new AuthorOrgSci();
-		
-		assertEquals("Flynn, J., S. Gartska", f.format("John Flynn and Sabine Gartska"));
-		assertEquals("Garvin, D. A.", f.format("David A. Garvin"));
-		assertEquals("Makridakis, S., S. C. Wheelwright, V. E. McGee", f.format("Sa Makridakis and Sa Ca Wheelwright and Va Ea McGee"));
-		
-	}
-	public void testOrgSciPlusAbbreviation(){
-		LayoutFormatter f = new CompositeFormat(new AuthorOrgSci(), new NoSpaceBetweenAbbreviations());
-		assertEquals("Flynn, J., S. Gartska", f.format("John Flynn and Sabine Gartska"));
-		assertEquals("Garvin, D.A.", f.format("David A. Garvin"));
-		assertEquals("Makridakis, S., S.C. Wheelwright, V.E. McGee", f.format("Sa Makridakis and Sa Ca Wheelwright and Va Ea McGee"));
-	}
-}
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorOrgSci;
+import net.sf.jabref.export.layout.format.CompositeFormat;
+import net.sf.jabref.export.layout.format.NoSpaceBetweenAbbreviations;
+
+public class AuthorOrgSciTest extends TestCase {
+
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+	
+	public void testOrgSci(){
+		LayoutFormatter f = new AuthorOrgSci();
+		
+		assertEquals("Flynn, J., S. Gartska", f.format("John Flynn and Sabine Gartska"));
+		assertEquals("Garvin, D. A.", f.format("David A. Garvin"));
+		assertEquals("Makridakis, S., S. C. Wheelwright, V. E. McGee", f.format("Sa Makridakis and Sa Ca Wheelwright and Va Ea McGee"));
+		
+	}
+	public void testOrgSciPlusAbbreviation(){
+		LayoutFormatter f = new CompositeFormat(new AuthorOrgSci(), new NoSpaceBetweenAbbreviations());
+		assertEquals("Flynn, J., S. Gartska", f.format("John Flynn and Sabine Gartska"));
+		assertEquals("Garvin, D.A.", f.format("David A. Garvin"));
+		assertEquals("Makridakis, S., S.C. Wheelwright, V.E. McGee", f.format("Sa Makridakis and Sa Ca Wheelwright and Va Ea McGee"));
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/BibtexNameLayoutFormatterTest.java b/src/java/tests/net/sf/jabref/export/layout/format/BibtexNameLayoutFormatterTest.java
index 026f5d2..1ead556 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/BibtexNameLayoutFormatterTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/BibtexNameLayoutFormatterTest.java
@@ -1,59 +1,59 @@
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.format.plugin.NameFormat;
-
-public class BibtexNameLayoutFormatterTest extends TestCase {
-
-	public void testFormatStringStringBibtexEntry() {
-		
-		NameFormat l = new NameFormat();
-		
-		assertEquals("Doe", l.format("Joe Doe", "1@*@{ll}", null));		
-		
-		assertEquals("moremoremoremore", l.format("Joe Doe and Mary Jane and Bruce Bar and Arthur Kay", 
-			"1@*@{ll}@@2 at 1..1@{ff}{ll}@2..2@ and {ff}{last}@@*@*@more", null));
-		
-		assertEquals("Doe", l.format("Joe Doe", 
-			"1@*@{ll}@@2 at 1..1@{ff}{ll}@2..2@ and {ff}{last}@@*@*@more", null));
-	
-		assertEquals("JoeDoe and MaryJ", l.format("Joe Doe and Mary Jane", 
-			"1@*@{ll}@@2 at 1..1@{ff}{ll}@2..2@ and {ff}{l}@@*@*@more", null));
-
-		assertEquals("Doe, Joe and Jane, M. and Kamp, J.~A.", l.format("Joe Doe and Mary Jane and John Arthur van Kamp", 
-			"1@*@{ll}, {ff}@@*@1@{ll}, {ff}@2..-1@ and {ll}, {f}.", null));
-	
-		assertEquals("Doe Joe and Jane, M. and Kamp, J.~A.", l.format("Joe Doe and Mary Jane and John Arthur van Kamp", 
-			"1@*@{ll}, {ff}@@*@1@{ll} {ff}@2..-1@ and {ll}, {f}.", null));
-		
-	}
-	
-	public void testFormat() {
-
-		NameFormat a = new NameFormat();
-
-		// Empty case
-		assertEquals("", a.format(""));
-
-		String formatString = "1 at 1@{vv }{ll}{ ff}@@2 at 1@{vv }{ll}{ ff}@2@ and {vv }{ll}{, ff}@@*@1@{vv }{ll}{ ff}@2..-2@, {vv }{ll}{, ff}@-1@ and {vv }{ll}{, ff}";
-		
-		// Single Names
-		assertEquals("Vandekamp Mary~Ann", a.format("Mary Ann Vandekamp", formatString, null));
-
-		// Two names
-		assertEquals("von Neumann John and Black~Brown, Peter", a
-			.format("John von Neumann and Black Brown, Peter",formatString, null));
-
-		// Three names
-		assertEquals("von Neumann John, Smith, John and Black~Brown, Peter", a
-			.format("von Neumann, John and Smith, John and Black Brown, Peter", formatString, null));
-
-		assertEquals("von Neumann John, Smith, John and Black~Brown, Peter", a
-			.format("John von Neumann and John Smith and Black Brown, Peter", formatString, null));
-		
-		// Four names
-		assertEquals("von Neumann John, Smith, John, Vandekamp, Mary~Ann and Black~Brown, Peter", a
-			.format("von Neumann, John and Smith, John and Vandekamp, Mary Ann and Black Brown, Peter", formatString, null));
-	}
-	
-}
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.format.plugin.NameFormat;
+
+public class BibtexNameLayoutFormatterTest extends TestCase {
+
+	public void testFormatStringStringBibtexEntry() {
+		
+		NameFormat l = new NameFormat();
+		
+		assertEquals("Doe", l.format("Joe Doe", "1@*@{ll}", null));		
+		
+		assertEquals("moremoremoremore", l.format("Joe Doe and Mary Jane and Bruce Bar and Arthur Kay", 
+			"1@*@{ll}@@2 at 1..1@{ff}{ll}@2..2@ and {ff}{last}@@*@*@more", null));
+		
+		assertEquals("Doe", l.format("Joe Doe", 
+			"1@*@{ll}@@2 at 1..1@{ff}{ll}@2..2@ and {ff}{last}@@*@*@more", null));
+	
+		assertEquals("JoeDoe and MaryJ", l.format("Joe Doe and Mary Jane", 
+			"1@*@{ll}@@2 at 1..1@{ff}{ll}@2..2@ and {ff}{l}@@*@*@more", null));
+
+		assertEquals("Doe, Joe and Jane, M. and Kamp, J.~A.", l.format("Joe Doe and Mary Jane and John Arthur van Kamp", 
+			"1@*@{ll}, {ff}@@*@1@{ll}, {ff}@2..-1@ and {ll}, {f}.", null));
+	
+		assertEquals("Doe Joe and Jane, M. and Kamp, J.~A.", l.format("Joe Doe and Mary Jane and John Arthur van Kamp", 
+			"1@*@{ll}, {ff}@@*@1@{ll} {ff}@2..-1@ and {ll}, {f}.", null));
+		
+	}
+	
+	public void testFormat() {
+
+		NameFormat a = new NameFormat();
+
+		// Empty case
+		assertEquals("", a.format(""));
+
+		String formatString = "1 at 1@{vv }{ll}{ ff}@@2 at 1@{vv }{ll}{ ff}@2@ and {vv }{ll}{, ff}@@*@1@{vv }{ll}{ ff}@2..-2@, {vv }{ll}{, ff}@-1@ and {vv }{ll}{, ff}";
+		
+		// Single Names
+		assertEquals("Vandekamp Mary~Ann", a.format("Mary Ann Vandekamp", formatString, null));
+
+		// Two names
+		assertEquals("von Neumann John and Black~Brown, Peter", a
+			.format("John von Neumann and Black Brown, Peter",formatString, null));
+
+		// Three names
+		assertEquals("von Neumann John, Smith, John and Black~Brown, Peter", a
+			.format("von Neumann, John and Smith, John and Black Brown, Peter", formatString, null));
+
+		assertEquals("von Neumann John, Smith, John and Black~Brown, Peter", a
+			.format("John von Neumann and John Smith and Black Brown, Peter", formatString, null));
+		
+		// Four names
+		assertEquals("von Neumann John, Smith, John, Vandekamp, Mary~Ann and Black~Brown, Peter", a
+			.format("von Neumann, John and Smith, John and Vandekamp, Mary Ann and Black Brown, Peter", formatString, null));
+	}
+	
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/CompositeFormatTest.java b/src/java/tests/net/sf/jabref/export/layout/format/CompositeFormatTest.java
index e4ca920..6987108 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/CompositeFormatTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/CompositeFormatTest.java
@@ -1,60 +1,60 @@
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.AuthorOrgSci;
-import net.sf.jabref.export.layout.format.CompositeFormat;
-import net.sf.jabref.export.layout.format.NoSpaceBetweenAbbreviations;
-
-public class CompositeFormatTest extends TestCase {
-
-	protected void setUp() throws Exception {
-		super.setUp();
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-	}
-
-	public void testComposite() {
-
-		{
-			LayoutFormatter f = new CompositeFormat();
-			assertEquals("No Change", f.format("No Change"));
-		}
-		{ 
-			LayoutFormatter f = new CompositeFormat(new LayoutFormatter[]{new LayoutFormatter(){
-
-				public String format(String fieldText) {
-					return fieldText + fieldText;
-				}
-				
-			}, new LayoutFormatter(){
-
-				public String format(String fieldText) {
-					return "A" + fieldText;
-				}
-				
-			}, new LayoutFormatter(){
-
-				public String format(String fieldText) {
-					return "B" + fieldText;
-				}
-				
-			}});
-			
-			assertEquals("BAff", f.format("f"));
-		}
-		
-		{
-			LayoutFormatter f = new CompositeFormat(new AuthorOrgSci(),
-				new NoSpaceBetweenAbbreviations());
-			LayoutFormatter first = new AuthorOrgSci();
-			LayoutFormatter second = new NoSpaceBetweenAbbreviations();
-			
-			assertEquals(second.format(first.format("John Flynn and Sabine Gartska")), f.format("John Flynn and Sabine Gartska"));
-			assertEquals(second.format(first.format("Sa Makridakis and Sa Ca Wheelwright and Va Ea McGee")), f.format("Sa Makridakis and Sa Ca Wheelwright and Va Ea McGee"));
-		}
-	}
-
-}
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.AuthorOrgSci;
+import net.sf.jabref.export.layout.format.CompositeFormat;
+import net.sf.jabref.export.layout.format.NoSpaceBetweenAbbreviations;
+
+public class CompositeFormatTest extends TestCase {
+
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	public void testComposite() {
+
+		{
+			LayoutFormatter f = new CompositeFormat();
+			assertEquals("No Change", f.format("No Change"));
+		}
+		{ 
+			LayoutFormatter f = new CompositeFormat(new LayoutFormatter[]{new LayoutFormatter(){
+
+				public String format(String fieldText) {
+					return fieldText + fieldText;
+				}
+				
+			}, new LayoutFormatter(){
+
+				public String format(String fieldText) {
+					return "A" + fieldText;
+				}
+				
+			}, new LayoutFormatter(){
+
+				public String format(String fieldText) {
+					return "B" + fieldText;
+				}
+				
+			}});
+			
+			assertEquals("BAff", f.format("f"));
+		}
+		
+		{
+			LayoutFormatter f = new CompositeFormat(new AuthorOrgSci(),
+				new NoSpaceBetweenAbbreviations());
+			LayoutFormatter first = new AuthorOrgSci();
+			LayoutFormatter second = new NoSpaceBetweenAbbreviations();
+			
+			assertEquals(second.format(first.format("John Flynn and Sabine Gartska")), f.format("John Flynn and Sabine Gartska"));
+			assertEquals(second.format(first.format("Sa Makridakis and Sa Ca Wheelwright and Va Ea McGee")), f.format("Sa Makridakis and Sa Ca Wheelwright and Va Ea McGee"));
+		}
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/DOICheckTest.java b/src/java/tests/net/sf/jabref/export/layout/format/DOICheckTest.java
index dceb88c..e8f176e 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/DOICheckTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/DOICheckTest.java
@@ -1,37 +1,37 @@
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.DOICheck;
-
-public class DOICheckTest extends TestCase {
-
-	public void testFormat() {
-		LayoutFormatter lf = new DOICheck();
-
-		assertEquals("", lf.format(""));
-		assertEquals(null, lf.format(null));
-		
-		assertEquals("http://dx.doi.org/10.1000/ISBN1-900512-44-0", lf
-			.format("10.1000/ISBN1-900512-44-0"));
-		assertEquals("http://dx.doi.org/10.1000/ISBN1-900512-44-0", lf
-			.format("http://dx.doi.org/10.1000/ISBN1-900512-44-0"));
-
-		assertEquals("http://doi.acm.org/10.1000/ISBN1-900512-44-0", lf
-			.format("http://doi.acm.org/10.1000/ISBN1-900512-44-0"));
-
-		assertEquals("http://doi.acm.org/10.1145/354401.354407", lf
-			.format("http://doi.acm.org/10.1145/354401.354407"));
-		assertEquals("http://dx.doi.org/10.1145/354401.354407", lf.format("10.1145/354401.354407"));
-
-		// Does not work if the string does not start with a 10
-		assertEquals("/10.1145/354401.354407", lf.format("/10.1145/354401.354407"));
-
-		// Obviously a wrong doi, but we still accept it.
-		assertEquals("http://dx.doi.org/10", lf.format("10"));
-
-		// Obviously a wrong doi, but we still accept it.
-		assertEquals("1", lf.format("1"));
-	}
-
-}
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.DOICheck;
+
+public class DOICheckTest extends TestCase {
+
+	public void testFormat() {
+		LayoutFormatter lf = new DOICheck();
+
+		assertEquals("", lf.format(""));
+		assertEquals(null, lf.format(null));
+		
+		assertEquals("http://dx.doi.org/10.1000/ISBN1-900512-44-0", lf
+			.format("10.1000/ISBN1-900512-44-0"));
+		assertEquals("http://dx.doi.org/10.1000/ISBN1-900512-44-0", lf
+			.format("http://dx.doi.org/10.1000/ISBN1-900512-44-0"));
+
+		assertEquals("http://doi.acm.org/10.1000/ISBN1-900512-44-0", lf
+			.format("http://doi.acm.org/10.1000/ISBN1-900512-44-0"));
+
+		assertEquals("http://doi.acm.org/10.1145/354401.354407", lf
+			.format("http://doi.acm.org/10.1145/354401.354407"));
+		assertEquals("http://dx.doi.org/10.1145/354401.354407", lf.format("10.1145/354401.354407"));
+
+		// Does not work if the string does not start with a 10
+		assertEquals("/10.1145/354401.354407", lf.format("/10.1145/354401.354407"));
+
+		// Obviously a wrong doi, but we still accept it.
+		assertEquals("http://dx.doi.org/10", lf.format("10"));
+
+		// Obviously a wrong doi, but we still accept it.
+		assertEquals("1", lf.format("1"));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/HTMLParagraphsTest.java b/src/java/tests/net/sf/jabref/export/layout/format/HTMLParagraphsTest.java
index f639774..838f1f2 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/HTMLParagraphsTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/HTMLParagraphsTest.java
@@ -1,21 +1,21 @@
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.HTMLParagraphs;
-
-public class HTMLParagraphsTest extends TestCase {
-
-	public void testFormat() {
-		
-		LayoutFormatter f = new HTMLParagraphs();
-		
-		assertEquals("", f.format(""));
-		assertEquals("<p>\nHello\n</p>", f.format("Hello"));
-		assertEquals("<p>\nHello\nWorld\n</p>", f.format("Hello\nWorld"));
-		assertEquals("<p>\nHello World\n</p>\n<p>\nWhat a lovely day\n</p>", f.format("Hello World\n   \nWhat a lovely day\n"));
-		assertEquals("<p>\nHello World\n</p>\n<p>\nCould not be any better\n</p>\n<p>\nWhat a lovely day\n</p>", f.format("Hello World\n \n\nCould not be any better\n\nWhat a lovely day\n"));
-		
-	}
-
-}
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.HTMLParagraphs;
+
+public class HTMLParagraphsTest extends TestCase {
+
+	public void testFormat() {
+		
+		LayoutFormatter f = new HTMLParagraphs();
+		
+		assertEquals("", f.format(""));
+		assertEquals("<p>\nHello\n</p>", f.format("Hello"));
+		assertEquals("<p>\nHello\nWorld\n</p>", f.format("Hello\nWorld"));
+		assertEquals("<p>\nHello World\n</p>\n<p>\nWhat a lovely day\n</p>", f.format("Hello World\n   \nWhat a lovely day\n"));
+		assertEquals("<p>\nHello World\n</p>\n<p>\nCould not be any better\n</p>\n<p>\nWhat a lovely day\n</p>", f.format("Hello World\n \n\nCould not be any better\n\nWhat a lovely day\n"));
+		
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/NoSpaceBetweenAbbreviationsTest.java b/src/java/tests/net/sf/jabref/export/layout/format/NoSpaceBetweenAbbreviationsTest.java
index 27db88f..ad3660f 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/NoSpaceBetweenAbbreviationsTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/NoSpaceBetweenAbbreviationsTest.java
@@ -1,26 +1,26 @@
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.NoSpaceBetweenAbbreviations;
-
-public class NoSpaceBetweenAbbreviationsTest extends TestCase {
-
-	protected void setUp() throws Exception {
-		super.setUp();
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-	}
-
-	public void testFormat() {
-		LayoutFormatter f = new NoSpaceBetweenAbbreviations();
-		assertEquals("", f.format(""));
-		assertEquals("John Meier", f.format("John Meier"));
-		assertEquals("J.F. Kennedy", f.format("J. F. Kennedy"));
-		assertEquals("J.R.R. Tolkien", f.format("J. R. R. Tolkien"));
-		assertEquals("J.R.R. Tolkien and J.F. Kennedy", f.format("J. R. R. Tolkien and J. F. Kennedy"));
-	}
-
-}
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.NoSpaceBetweenAbbreviations;
+
+public class NoSpaceBetweenAbbreviationsTest extends TestCase {
+
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	public void testFormat() {
+		LayoutFormatter f = new NoSpaceBetweenAbbreviations();
+		assertEquals("", f.format(""));
+		assertEquals("John Meier", f.format("John Meier"));
+		assertEquals("J.F. Kennedy", f.format("J. F. Kennedy"));
+		assertEquals("J.R.R. Tolkien", f.format("J. R. R. Tolkien"));
+		assertEquals("J.R.R. Tolkien and J.F. Kennedy", f.format("J. R. R. Tolkien and J. F. Kennedy"));
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/RemoveTildeTest.java b/src/java/tests/net/sf/jabref/export/layout/format/RemoveTildeTest.java
index 3b5fa2c..00d02b7 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/RemoveTildeTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/RemoveTildeTest.java
@@ -1,31 +1,31 @@
-package tests.net.sf.jabref.export.layout.format;
-
-import junit.framework.TestCase;
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.RemoveTilde;
-
-public class RemoveTildeTest extends TestCase {
-
-	public void testFormatString() {
-
-		LayoutFormatter l = new RemoveTilde();
-
-		assertEquals("", l.format(""));
-		
-		assertEquals("simple", l.format("simple"));
-		
-		assertEquals(" ", l.format("~"));
-		
-		assertEquals("   ", l.format("~~~"));
-		
-		assertEquals(" \\~ ", l.format("~\\~~"));
-		
-		assertEquals("\\\\ ", l.format("\\\\~"));
-		
-		assertEquals("Doe Joe and Jane, M. and Kamp, J. A.", l
-				.format("Doe Joe and Jane, M. and Kamp, J.~A."));
-		
-		assertEquals("T\\~olkien, J. R. R.", l
-				.format("T\\~olkien, J.~R.~R."));
-	}
-}
+package tests.net.sf.jabref.export.layout.format;
+
+import junit.framework.TestCase;
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.RemoveTilde;
+
+public class RemoveTildeTest extends TestCase {
+
+	public void testFormatString() {
+
+		LayoutFormatter l = new RemoveTilde();
+
+		assertEquals("", l.format(""));
+		
+		assertEquals("simple", l.format("simple"));
+		
+		assertEquals(" ", l.format("~"));
+		
+		assertEquals("   ", l.format("~~~"));
+		
+		assertEquals(" \\~ ", l.format("~\\~~"));
+		
+		assertEquals("\\\\ ", l.format("\\\\~"));
+		
+		assertEquals("Doe Joe and Jane, M. and Kamp, J. A.", l
+				.format("Doe Joe and Jane, M. and Kamp, J.~A."));
+		
+		assertEquals("T\\~olkien, J. R. R.", l
+				.format("T\\~olkien, J.~R.~R."));
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/export/layout/format/ResolvePDFTest.java b/src/java/tests/net/sf/jabref/export/layout/format/ResolvePDFTest.java
index 8211711..7d71ca6 100644
--- a/src/java/tests/net/sf/jabref/export/layout/format/ResolvePDFTest.java
+++ b/src/java/tests/net/sf/jabref/export/layout/format/ResolvePDFTest.java
@@ -1,52 +1,52 @@
-package tests.net.sf.jabref.export.layout.format;
-
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import net.sf.jabref.export.layout.LayoutFormatter;
-import net.sf.jabref.export.layout.format.ResolvePDF;
-import tests.net.sf.jabref.FileBasedTestCase;
-
-/**
- * Testing the PDF resolver.
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- *
- */
-public class ResolvePDFTest extends FileBasedTestCase {
-
-	public void setUp() throws Exception {
-		super.setUp();
-	}
-
-	public void tearDown() {
-		super.tearDown();
-	}
-
-	public void testFormat() throws URISyntaxException {
-		LayoutFormatter pdf = new ResolvePDF();
-
-		assertEquals("", pdf.format(""));
-		
-		/*
-		 * Check one that will be found
-		 */
-		String result = pdf.format("Organization Science\\HipKro03 - Hello.pdf");
-		assertTrue(result.startsWith("file:/"));
-		
-		assertTrue(result.endsWith("/Organization%20Science/HipKro03%20-%20Hello.pdf"));
-		
-		// Should not contain a backslash:
-		assertEquals(-1, result.indexOf('\\'));
-		
-		assertTrue(new File(new URI(result)).exists());
-		
-		/*
-		 * And one that is not to be found
-		 */
-		result = pdf.format("Organization Science/Does not exist.pdf");
-		assertEquals("Organization Science/Does not exist.pdf", result);
-	}
-}
+package tests.net.sf.jabref.export.layout.format;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.layout.format.ResolvePDF;
+import tests.net.sf.jabref.FileBasedTestCase;
+
+/**
+ * Testing the PDF resolver.
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ *
+ */
+public class ResolvePDFTest extends FileBasedTestCase {
+
+	public void setUp() throws Exception {
+		super.setUp();
+	}
+
+	public void tearDown() {
+		super.tearDown();
+	}
+
+	public void testFormat() throws URISyntaxException {
+		LayoutFormatter pdf = new ResolvePDF();
+
+		assertEquals("", pdf.format(""));
+		
+		/*
+		 * Check one that will be found
+		 */
+		String result = pdf.format("Organization Science\\HipKro03 - Hello.pdf");
+		assertTrue(result.startsWith("file:/"));
+		
+		assertTrue(result.endsWith("/Organization%20Science/HipKro03%20-%20Hello.pdf"));
+		
+		// Should not contain a backslash:
+		assertEquals(-1, result.indexOf('\\'));
+		
+		assertTrue(new File(new URI(result)).exists());
+		
+		/*
+		 * And one that is not to be found
+		 */
+		result = pdf.format("Organization Science/Does not exist.pdf");
+		assertEquals("Organization Science/Does not exist.pdf", result);
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/gui/AllTests.java b/src/java/tests/net/sf/jabref/gui/AllTests.java
index bd44fa8..6022d12 100644
--- a/src/java/tests/net/sf/jabref/gui/AllTests.java
+++ b/src/java/tests/net/sf/jabref/gui/AllTests.java
@@ -1,16 +1,16 @@
-package tests.net.sf.jabref.gui;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite("Test for tests.net.sf.jabref.gui");
-		//$JUnit-BEGIN$
-		suite.addTestSuite(AutoCompleterTest.class);
-		//$JUnit-END$
-		return suite;
-	}
-
-}
+package tests.net.sf.jabref.gui;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for tests.net.sf.jabref.gui");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(AutoCompleterTest.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/gui/AutoCompleterTest.java b/src/java/tests/net/sf/jabref/gui/AutoCompleterTest.java
index 858b239..67d3555 100644
--- a/src/java/tests/net/sf/jabref/gui/AutoCompleterTest.java
+++ b/src/java/tests/net/sf/jabref/gui/AutoCompleterTest.java
@@ -1,184 +1,184 @@
-package tests.net.sf.jabref.gui;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.EntryEditor;
-import net.sf.jabref.FieldEditor;
-import net.sf.jabref.FieldTextArea;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRef;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.autocompleter.AbstractAutoCompleter;
-import net.sf.jabref.autocompleter.AutoCompleterFactory;
-import net.sf.jabref.autocompleter.DefaultAutoCompleter;
-import net.sf.jabref.autocompleter.NameFieldAutoCompleter;
-import net.sf.jabref.imports.ParserResult;
-import tests.net.sf.jabref.testutils.TestUtils;
-
-/**
- * 
- * @author kahlert, cordes
- * 
- */
-public class AutoCompleterTest extends TestCase {
-
-	private static final String OTHER_FIELD = "title";
-	private static final String AUTHOR_FIELD = "author";
-	private static final String CROSSREF_FIELD = "crossref";
-	private static final String ENTIRE_FIELD = "journal";
-
-	public static final String PATH_TO_TEST_BIBTEX = "src/tests/net/sf/jabref/bibtexFiles/test.bib";
-
-	public void testAutoCompleterFactory() {
-		Globals.prefs = JabRefPreferences.getInstance();
-		AbstractAutoCompleter autoCompleter = AutoCompleterFactory.getFor(AUTHOR_FIELD);
-		assertTrue(autoCompleter instanceof NameFieldAutoCompleter);
-
-		autoCompleter = AutoCompleterFactory.getFor(OTHER_FIELD);
-		assertTrue(autoCompleter instanceof DefaultAutoCompleter);
-	}
-
-	public void testDefaultAutoCompleter() {
-		AbstractAutoCompleter autoCompleter = AutoCompleterFactory.getFor(OTHER_FIELD);
-		for (BibtexEntry entry : getDatabse().getEntries()) {
-			autoCompleter.addBibtexEntry(entry);
-		}
-		assertEquals("authentication", autoCompleter.complete("authentication")[0]);
-		assertEquals(1, autoCompleter.complete("authentication").length);
-		assertEquals("authentication", autoCompleter.complete("aut")[0]);
-		assertEquals(2, autoCompleter.complete("aut").length); // 1 for case-sensitive search, 2 for case insensitive search (Authornames also included)
-		assertEquals(1, autoCompleter.complete("Aut").length); // "Aut" triggers case-sensitive search, now only "Authornames" is returned 
-		assertEquals("context", autoCompleter.complete("con")[0]);
-		assertEquals(1, autoCompleter.complete("con").length);
-		assertEquals(0, autoCompleter.complete("osta").length);
-		assertEquals(0, autoCompleter.complete("osta").length);
-	}
-
-	public void testCrossRefCompleter() {
-		AbstractAutoCompleter autoCompleter = AutoCompleterFactory.getFor(CROSSREF_FIELD);
-		for (BibtexEntry entry : getDatabse().getEntries()) {
-			autoCompleter.addBibtexEntry(entry);
-		}
-		assertEquals("1102917", autoCompleter.complete("1102917")[0]);
-		assertEquals(1, autoCompleter.complete("1102917").length);
-		assertEquals("1102917", autoCompleter.complete("11029")[0]);
-		assertEquals(1, autoCompleter.complete("11029").length);
-		assertEquals(0, autoCompleter.complete("osta").length);
-		assertEquals(0, autoCompleter.complete("osta").length);
-	}
-
-	public void testEntireFieldCompleter() {
-		AbstractAutoCompleter autoCompleter = AutoCompleterFactory.getFor(ENTIRE_FIELD);
-		for (BibtexEntry entry : getDatabse().getEntries()) {
-			autoCompleter.addBibtexEntry(entry);
-		}
-		assertEquals("Personal Ubiquitous Comput.", autoCompleter.complete("Personal Ubiquitous Comput.")[0]);
-		assertEquals(1, autoCompleter.complete("Personal Ubiquitous Comput.").length);
-		assertEquals("Personal Ubiquitous Comput.", autoCompleter.complete("Pers")[0]);
-		assertEquals(1, autoCompleter.complete("Pers").length);
-		assertEquals(0, autoCompleter.complete("osta").length);
-		assertEquals(0, autoCompleter.complete("osta").length);
-	}
-
-	public void testNameFieldCompleter() {
-		Globals.prefs = JabRefPreferences.getInstance();
-		AbstractAutoCompleter autoCompleter = AutoCompleterFactory.getFor(AUTHOR_FIELD);
-		for (BibtexEntry entry : getDatabse().getEntries()) {
-			autoCompleter.addBibtexEntry(entry);
-		}
-		
-		// tweak preferences to match test cases
-		boolean oldAutocomplete = Globals.prefs.getBoolean("autoComplete");
-		Globals.prefs.putBoolean("autoComplete", Boolean.TRUE);
-		boolean oldAutoCompFF = Globals.prefs.getBoolean("autoCompLF");
-		Globals.prefs.putBoolean("autoCompFF", Boolean.FALSE);
-		boolean oldAutoCompLF = Globals.prefs.getBoolean("autoCompLF");
-		Globals.prefs.putBoolean("autoCompLF", Boolean.FALSE);
-		String oldACFM = Globals.prefs.get(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE);
-		Globals.prefs.put(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE, JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_BOTH);
-		
-		assertEquals("Kostakos, V.", autoCompleter.complete("Kostakos")[0]);
-		assertEquals(2, autoCompleter.complete("Kostakos").length);
-		assertEquals("Kostakos, V.", autoCompleter.complete("Kosta")[0]);
-		assertEquals(2, autoCompleter.complete("Kosta").length);
-		assertEquals("Kostakos, Vassilis", autoCompleter.complete("Kostakos, Va")[0]);
-		assertEquals(1, autoCompleter.complete("Kostakos, Va").length);
-		assertEquals("Vassilis Kostakos", autoCompleter.complete("Va")[0]);
-		assertEquals(1, autoCompleter.complete("Va").length);
-		assertEquals(0, autoCompleter.complete("osta").length);
-		assertEquals(0, autoCompleter.complete("osta").length);
-
-		assertEquals("Eric von Hippel", autoCompleter.complete("Eric")[0]);
-		assertEquals(1, autoCompleter.complete("Eric").length);
-		assertEquals("von Hippel, E.", autoCompleter.complete("von")[0]);
-		assertEquals(2, autoCompleter.complete("von").length);
-
-		assertEquals("Reagle, Jr., J. M.", autoCompleter.complete("Reagle")[0]);
-		assertEquals(2, autoCompleter.complete("Reagle").length);
-		assertEquals("Reagle, Jr., Joseph M.", autoCompleter.complete("Reagle, Jr., Jo")[0]);
-		assertEquals(1, autoCompleter.complete("Reagle, Jr., Jo").length);
-		assertEquals("Joseph M. Reagle, Jr.", autoCompleter.complete("Joseph")[0]);
-		assertEquals(1, autoCompleter.complete("Joseph").length);
-
-		assertEquals("van den Huevel, Jr., J. A.", autoCompleter.complete("van den")[0]);
-		assertEquals(2, autoCompleter.complete("van den").length);
-		assertEquals("Johan A van den Huevel, Jr.", autoCompleter.complete("Joh")[0]);
-		assertEquals(1, autoCompleter.complete("Joh").length);
-
-		assertEquals("Jr. Sherry, John F.", autoCompleter.complete("Jr. S")[0]);
-		assertEquals(1, autoCompleter.complete("Jr.").length);
-		assertEquals("Sherry, John F., J.", autoCompleter.complete("Sherry")[0]);
-		assertEquals(2, autoCompleter.complete("Sherry").length);
-		
-		// restore settings
-		Globals.prefs.putBoolean("autoComplete", oldAutocomplete);
-		Globals.prefs.putBoolean("autoCompFF", oldAutoCompFF);
-		Globals.prefs.putBoolean("autoCompLF", oldAutoCompLF);
-		Globals.prefs.put(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE, oldACFM);
-	}
-
-	public void testEntryEditorForNameFieldAutoCompleter() {
-		// construct an EntryEditor ...
-		JabRef jabref = TestUtils.getInitializedJabRef();
-		BibtexEntry bibtexEntry = new BibtexEntry();
-		bibtexEntry.setField("author", "Brigitte Laurant");
-		FieldEditor authorTextField = new FieldTextArea("author", "Hans Meiser");
-		EntryEditor editor = new EntryEditor(jabref.jrf, jabref.jrf.basePanel(), bibtexEntry);
-		// perform action ...
-		editor.storeFieldAction.actionPerformed(new ActionEvent(authorTextField, 0, ""));
-		// test content of stored words in autocompleter ...
-		AbstractAutoCompleter autoCompleter = jabref.jrf.basePanel().getAutoCompleter("author");
-		assertTrue(autoCompleter.indexContainsWord("Hans Meiser"));
-		assertTrue(autoCompleter.indexContainsWord("Meiser, Hans"));
-
-		TestUtils.closeJabRef();
-	}
-
-	public void testEntryEditorForFieldAnotherAutoCompleter() {
-		// construct an EntryEditor ...
-		JabRef jabref = TestUtils.getInitializedJabRef();
-		BibtexEntry bibtexEntry = new BibtexEntry();
-		bibtexEntry.setField("journal", "Testtext");
-		FieldEditor authorTextField = new FieldTextArea("journal", "New Testtext");
-		EntryEditor editor = new EntryEditor(jabref.jrf, jabref.jrf.basePanel(), bibtexEntry);
-		// perform action ...
-		editor.storeFieldAction.actionPerformed(new ActionEvent(authorTextField, 0, ""));
-		// test content of stored words in autocompleter ...
-		AbstractAutoCompleter autoCompleter = jabref.jrf.basePanel().getAutoCompleter("journal");
-		assertTrue(autoCompleter.indexContainsWord("New Testtext"));
-
-		TestUtils.closeJabRef();
-	}
-
-	private BibtexDatabase getDatabse() {
-		Globals.prefs = JabRefPreferences.getInstance();
-		File fileToLoad = new File(PATH_TO_TEST_BIBTEX);
-		ParserResult pr = JabRef.openBibFile(fileToLoad.getPath(), true);
-		BibtexDatabase filledDatabase = pr.getDatabase();
-		return filledDatabase;
-	}
-}
+package tests.net.sf.jabref.gui;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.EntryEditor;
+import net.sf.jabref.FieldEditor;
+import net.sf.jabref.FieldTextArea;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.autocompleter.AbstractAutoCompleter;
+import net.sf.jabref.autocompleter.AutoCompleterFactory;
+import net.sf.jabref.autocompleter.DefaultAutoCompleter;
+import net.sf.jabref.autocompleter.NameFieldAutoCompleter;
+import net.sf.jabref.imports.ParserResult;
+import tests.net.sf.jabref.testutils.TestUtils;
+
+/**
+ * 
+ * @author kahlert, cordes
+ * 
+ */
+public class AutoCompleterTest extends TestCase {
+
+	private static final String OTHER_FIELD = "title";
+	private static final String AUTHOR_FIELD = "author";
+	private static final String CROSSREF_FIELD = "crossref";
+	private static final String ENTIRE_FIELD = "journal";
+
+	public static final String PATH_TO_TEST_BIBTEX = "src/tests/net/sf/jabref/bibtexFiles/test.bib";
+
+	public void testAutoCompleterFactory() {
+		Globals.prefs = JabRefPreferences.getInstance();
+		AbstractAutoCompleter autoCompleter = AutoCompleterFactory.getFor(AUTHOR_FIELD);
+		assertTrue(autoCompleter instanceof NameFieldAutoCompleter);
+
+		autoCompleter = AutoCompleterFactory.getFor(OTHER_FIELD);
+		assertTrue(autoCompleter instanceof DefaultAutoCompleter);
+	}
+
+	public void testDefaultAutoCompleter() {
+		AbstractAutoCompleter autoCompleter = AutoCompleterFactory.getFor(OTHER_FIELD);
+		for (BibtexEntry entry : getDatabse().getEntries()) {
+			autoCompleter.addBibtexEntry(entry);
+		}
+		assertEquals("authentication", autoCompleter.complete("authentication")[0]);
+		assertEquals(1, autoCompleter.complete("authentication").length);
+		assertEquals("authentication", autoCompleter.complete("aut")[0]);
+		assertEquals(2, autoCompleter.complete("aut").length); // 1 for case-sensitive search, 2 for case insensitive search (Authornames also included)
+		assertEquals(1, autoCompleter.complete("Aut").length); // "Aut" triggers case-sensitive search, now only "Authornames" is returned 
+		assertEquals("context", autoCompleter.complete("con")[0]);
+		assertEquals(1, autoCompleter.complete("con").length);
+		assertEquals(0, autoCompleter.complete("osta").length);
+		assertEquals(0, autoCompleter.complete("osta").length);
+	}
+
+	public void testCrossRefCompleter() {
+		AbstractAutoCompleter autoCompleter = AutoCompleterFactory.getFor(CROSSREF_FIELD);
+		for (BibtexEntry entry : getDatabse().getEntries()) {
+			autoCompleter.addBibtexEntry(entry);
+		}
+		assertEquals("1102917", autoCompleter.complete("1102917")[0]);
+		assertEquals(1, autoCompleter.complete("1102917").length);
+		assertEquals("1102917", autoCompleter.complete("11029")[0]);
+		assertEquals(1, autoCompleter.complete("11029").length);
+		assertEquals(0, autoCompleter.complete("osta").length);
+		assertEquals(0, autoCompleter.complete("osta").length);
+	}
+
+	public void testEntireFieldCompleter() {
+		AbstractAutoCompleter autoCompleter = AutoCompleterFactory.getFor(ENTIRE_FIELD);
+		for (BibtexEntry entry : getDatabse().getEntries()) {
+			autoCompleter.addBibtexEntry(entry);
+		}
+		assertEquals("Personal Ubiquitous Comput.", autoCompleter.complete("Personal Ubiquitous Comput.")[0]);
+		assertEquals(1, autoCompleter.complete("Personal Ubiquitous Comput.").length);
+		assertEquals("Personal Ubiquitous Comput.", autoCompleter.complete("Pers")[0]);
+		assertEquals(1, autoCompleter.complete("Pers").length);
+		assertEquals(0, autoCompleter.complete("osta").length);
+		assertEquals(0, autoCompleter.complete("osta").length);
+	}
+
+	public void testNameFieldCompleter() {
+		Globals.prefs = JabRefPreferences.getInstance();
+		AbstractAutoCompleter autoCompleter = AutoCompleterFactory.getFor(AUTHOR_FIELD);
+		for (BibtexEntry entry : getDatabse().getEntries()) {
+			autoCompleter.addBibtexEntry(entry);
+		}
+		
+		// tweak preferences to match test cases
+		boolean oldAutocomplete = Globals.prefs.getBoolean("autoComplete");
+		Globals.prefs.putBoolean("autoComplete", Boolean.TRUE);
+		boolean oldAutoCompFF = Globals.prefs.getBoolean("autoCompLF");
+		Globals.prefs.putBoolean("autoCompFF", Boolean.FALSE);
+		boolean oldAutoCompLF = Globals.prefs.getBoolean("autoCompLF");
+		Globals.prefs.putBoolean("autoCompLF", Boolean.FALSE);
+		String oldACFM = Globals.prefs.get(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE);
+		Globals.prefs.put(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE, JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE_BOTH);
+		
+		assertEquals("Kostakos, V.", autoCompleter.complete("Kostakos")[0]);
+		assertEquals(2, autoCompleter.complete("Kostakos").length);
+		assertEquals("Kostakos, V.", autoCompleter.complete("Kosta")[0]);
+		assertEquals(2, autoCompleter.complete("Kosta").length);
+		assertEquals("Kostakos, Vassilis", autoCompleter.complete("Kostakos, Va")[0]);
+		assertEquals(1, autoCompleter.complete("Kostakos, Va").length);
+		assertEquals("Vassilis Kostakos", autoCompleter.complete("Va")[0]);
+		assertEquals(1, autoCompleter.complete("Va").length);
+		assertEquals(0, autoCompleter.complete("osta").length);
+		assertEquals(0, autoCompleter.complete("osta").length);
+
+		assertEquals("Eric von Hippel", autoCompleter.complete("Eric")[0]);
+		assertEquals(1, autoCompleter.complete("Eric").length);
+		assertEquals("von Hippel, E.", autoCompleter.complete("von")[0]);
+		assertEquals(2, autoCompleter.complete("von").length);
+
+		assertEquals("Reagle, Jr., J. M.", autoCompleter.complete("Reagle")[0]);
+		assertEquals(2, autoCompleter.complete("Reagle").length);
+		assertEquals("Reagle, Jr., Joseph M.", autoCompleter.complete("Reagle, Jr., Jo")[0]);
+		assertEquals(1, autoCompleter.complete("Reagle, Jr., Jo").length);
+		assertEquals("Joseph M. Reagle, Jr.", autoCompleter.complete("Joseph")[0]);
+		assertEquals(1, autoCompleter.complete("Joseph").length);
+
+		assertEquals("van den Huevel, Jr., J. A.", autoCompleter.complete("van den")[0]);
+		assertEquals(2, autoCompleter.complete("van den").length);
+		assertEquals("Johan A van den Huevel, Jr.", autoCompleter.complete("Joh")[0]);
+		assertEquals(1, autoCompleter.complete("Joh").length);
+
+		assertEquals("Jr. Sherry, John F.", autoCompleter.complete("Jr. S")[0]);
+		assertEquals(1, autoCompleter.complete("Jr.").length);
+		assertEquals("Sherry, John F., J.", autoCompleter.complete("Sherry")[0]);
+		assertEquals(2, autoCompleter.complete("Sherry").length);
+		
+		// restore settings
+		Globals.prefs.putBoolean("autoComplete", oldAutocomplete);
+		Globals.prefs.putBoolean("autoCompFF", oldAutoCompFF);
+		Globals.prefs.putBoolean("autoCompLF", oldAutoCompLF);
+		Globals.prefs.put(JabRefPreferences.AUTOCOMPLETE_FIRSTNAME_MODE, oldACFM);
+	}
+
+	public void testEntryEditorForNameFieldAutoCompleter() {
+		// construct an EntryEditor ...
+		JabRef jabref = TestUtils.getInitializedJabRef();
+		BibtexEntry bibtexEntry = new BibtexEntry();
+		bibtexEntry.setField("author", "Brigitte Laurant");
+		FieldEditor authorTextField = new FieldTextArea("author", "Hans Meiser");
+		EntryEditor editor = new EntryEditor(jabref.jrf, jabref.jrf.basePanel(), bibtexEntry);
+		// perform action ...
+		editor.storeFieldAction.actionPerformed(new ActionEvent(authorTextField, 0, ""));
+		// test content of stored words in autocompleter ...
+		AbstractAutoCompleter autoCompleter = jabref.jrf.basePanel().getAutoCompleter("author");
+		assertTrue(autoCompleter.indexContainsWord("Hans Meiser"));
+		assertTrue(autoCompleter.indexContainsWord("Meiser, Hans"));
+
+		TestUtils.closeJabRef();
+	}
+
+	public void testEntryEditorForFieldAnotherAutoCompleter() {
+		// construct an EntryEditor ...
+		JabRef jabref = TestUtils.getInitializedJabRef();
+		BibtexEntry bibtexEntry = new BibtexEntry();
+		bibtexEntry.setField("journal", "Testtext");
+		FieldEditor authorTextField = new FieldTextArea("journal", "New Testtext");
+		EntryEditor editor = new EntryEditor(jabref.jrf, jabref.jrf.basePanel(), bibtexEntry);
+		// perform action ...
+		editor.storeFieldAction.actionPerformed(new ActionEvent(authorTextField, 0, ""));
+		// test content of stored words in autocompleter ...
+		AbstractAutoCompleter autoCompleter = jabref.jrf.basePanel().getAutoCompleter("journal");
+		assertTrue(autoCompleter.indexContainsWord("New Testtext"));
+
+		TestUtils.closeJabRef();
+	}
+
+	private BibtexDatabase getDatabse() {
+		Globals.prefs = JabRefPreferences.getInstance();
+		File fileToLoad = new File(PATH_TO_TEST_BIBTEX);
+		ParserResult pr = JabRef.openBibFile(fileToLoad.getPath(), true);
+		BibtexDatabase filledDatabase = pr.getDatabase();
+		return filledDatabase;
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/imports/AllTests.java b/src/java/tests/net/sf/jabref/imports/AllTests.java
index 821a1d5..95dc687 100644
--- a/src/java/tests/net/sf/jabref/imports/AllTests.java
+++ b/src/java/tests/net/sf/jabref/imports/AllTests.java
@@ -1,20 +1,20 @@
-package tests.net.sf.jabref.imports;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite("Test for tests.net.sf.jabref.imports");
-		//$JUnit-BEGIN$
-		suite.addTestSuite(OAI2ImportTest.class);
-		suite.addTestSuite(IsiImporterTest.class);
-		suite.addTestSuite(CopacImporterTest.class);
-		suite.addTestSuite(BibtexParserTest.class);
-		suite.addTestSuite(GeneralFetcherTest.class);
-		//$JUnit-END$
-		return suite;
-	}
-
-}
+package tests.net.sf.jabref.imports;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for tests.net.sf.jabref.imports");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(OAI2ImportTest.class);
+		suite.addTestSuite(IsiImporterTest.class);
+		suite.addTestSuite(CopacImporterTest.class);
+		suite.addTestSuite(BibtexParserTest.class);
+		suite.addTestSuite(GeneralFetcherTest.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/imports/BibtexParserTest.java b/src/java/tests/net/sf/jabref/imports/BibtexParserTest.java
index f8bc3dc..cdad824 100644
--- a/src/java/tests/net/sf/jabref/imports/BibtexParserTest.java
+++ b/src/java/tests/net/sf/jabref/imports/BibtexParserTest.java
@@ -1,332 +1,332 @@
-package tests.net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Set;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.imports.ParserResult;
-
-/**
- * Test the BibtexParser
- * 
- * @version $revision: 1.1$ $date: $
- * 
- * @author Christopher Oezbek <oezi at oezi.de>
- */
-public class BibtexParserTest extends TestCase {
-
-	public void testParseReader() throws IOException {
-
-		ParserResult result = BibtexParser.parse(new StringReader(
-			"@article{test,author={Ed von Test}}"));
-
-		Collection<BibtexEntry> c = result.getDatabase().getEntries();
-		assertEquals(1, c.size());
-
-		BibtexEntry e = c.iterator().next();
-		assertEquals("test", e.getCiteKey());
-		assertEquals(2, e.getAllFields().size());
-		Set<String> o = e.getAllFields();
-		assertTrue(o.contains("author"));
-		assertEquals("Ed von Test", e.getField("author"));
-	}
-
-	public void testBibtexParser() {
-		try {
-			new BibtexParser(null);
-			fail("Should not accept null.");
-		} catch (NullPointerException npe) {
-
-		}
-	}
-
-	public void testIsRecognizedFormat() throws IOException {
-		assertTrue(BibtexParser
-			.isRecognizedFormat(new StringReader(
-				"This file was created with JabRef 2.1 beta 2."
-					+ "\n"
-					+ "Encoding: Cp1252"
-					+ "\n"
-					+ ""
-					+ "\n"
-					+ "@INPROCEEDINGS{CroAnnHow05,"
-					+ "\n"
-					+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
-					+ "\n"
-					+ "  title = {Effective work practices for floss development: A model and propositions},"
-					+ "\n"
-					+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},"
-					+ "\n" + "  year = {2005}," + "\n" + "  owner = {oezbek}," + "\n"
-					+ "  timestamp = {2006.05.29}," + "\n"
-					+ "  url = {http://james.howison.name/publications.html}" + "\n" + "}))")));
-
-		assertTrue(BibtexParser.isRecognizedFormat(new StringReader(
-			"This file was created with JabRef 2.1 beta 2." + "\n" + "Encoding: Cp1252" + "\n")));
-
-		assertTrue(BibtexParser
-			.isRecognizedFormat(new StringReader(
-				"@INPROCEEDINGS{CroAnnHow05,"
-					+ "\n"
-					+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
-					+ "\n"
-					+ "  title = {Effective work practices for floss development: A model and propositions},"
-					+ "\n"
-					+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},"
-					+ "\n" + "  year = {2005}," + "\n" + "  owner = {oezbek}," + "\n"
-					+ "  timestamp = {2006.05.29}," + "\n"
-					+ "  url = {http://james.howison.name/publications.html}" + "\n" + "}))")));
-
-		assertFalse(BibtexParser
-			.isRecognizedFormat(new StringReader(
-				"  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
-					+ "\n"
-					+ "  title = {Effective work practices for floss development: A model and propositions},"
-					+ "\n"
-					+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},"
-					+ "\n" + "  year = {2005}," + "\n" + "  owner = {oezbek}," + "\n"
-					+ "  timestamp = {2006.05.29}," + "\n"
-					+ "  url = {http://james.howison.name/publications.html}" + "\n" + "}))")));
-
-		assertFalse(BibtexParser.isRecognizedFormat(new StringReader(
-			"This was created with JabRef 2.1 beta 2." + "\n" + "Encoding: Cp1252" + "\n")));
-	}
-
-	public void testFromString() throws Exception {
-
-		{ // Simple case
-			Collection<BibtexEntry> c = BibtexParser.fromString("@article{test,author={Ed von Test}}");
-			assertEquals(1, c.size());
-
-			BibtexEntry e = c.iterator().next();
-			assertEquals("test", e.getCiteKey());
-			assertEquals(2, e.getAllFields().size());
-			assertTrue(e.getAllFields().contains("author"));
-			assertEquals("Ed von Test", e.getField("author"));
-		}
-		{ // Empty String
-			Collection<BibtexEntry> c = BibtexParser.fromString("");
-			assertEquals(0, c.size());
-
-		}
-		{ // Error
-			Collection<BibtexEntry> c = BibtexParser.fromString("@@article@@{{{{{{}");
-			assertEquals(null, c);
-		}
-
-	}
-
-	public void testFromSingle2() {
-		/**
-		 * More
-		 */
-		Collection<BibtexEntry> c = BibtexParser.fromString("@article{canh05,"
-			+ "  author = {Crowston, K. and Annabi, H.},\n" + "  title = {Title A}}\n"
-			+ "@inProceedings{foo," + "  author={Norton Bar}}");
-
-		assertEquals(2, c.size());
-
-		Iterator<BibtexEntry> i = c.iterator();
-		BibtexEntry a = i.next();
-		BibtexEntry b = i.next();
-
-		if (a.getCiteKey().equals("foo")) {
-			BibtexEntry tmp = a;
-			a = b;
-			b = tmp;
-		}
-
-		assertEquals("canh05", a.getCiteKey());
-		assertEquals("Crowston, K. and Annabi, H.", a.getField("author"));
-		assertEquals("Title A", a.getField("title"));
-		assertEquals(BibtexEntryType.ARTICLE, a.getType());
-
-		assertEquals("foo", b.getCiteKey());
-		assertEquals("Norton Bar", b.getField("author"));
-		assertEquals(BibtexEntryType.INPROCEEDINGS, b.getType());
-	}
-
-	public void testFromStringSingle() {
-		BibtexEntry a = BibtexParser.singleFromString("@article{canh05,"
-			+ "  author = {Crowston, K. and Annabi, H.},\n" + "  title = {Title A}}\n");
-
-		assertEquals("canh05", a.getCiteKey());
-		assertEquals("Crowston, K. and Annabi, H.", a.getField("author"));
-		assertEquals("Title A", a.getField("title"));
-		assertEquals(BibtexEntryType.ARTICLE, a.getType());
-		
-		BibtexEntry b = BibtexParser.singleFromString("@article{canh05,"
-			+ "  author = {Crowston, K. and Annabi, H.},\n" + "  title = {Title A}}\n"
-			+ "@inProceedings{foo," + "  author={Norton Bar}}");
-
-		if (!(b.getCiteKey().equals("canh05") || b.getCiteKey().equals("foo"))){
-			fail();
-		}
-	}
-
-	public void testParse() throws IOException {
-
-		// Test Standard parsing
-		BibtexParser parser = new BibtexParser(new StringReader(
-			"@article{test,author={Ed von Test}}"));
-		ParserResult result = parser.parse();
-
-		Collection<BibtexEntry> c = result.getDatabase().getEntries();
-		assertEquals(1, c.size());
-
-		BibtexEntry e = c.iterator().next();
-		assertEquals("test", e.getCiteKey());
-		assertEquals(2, e.getAllFields().size());
-		assertTrue(e.getAllFields().contains("author"));
-		assertEquals("Ed von Test", e.getField("author"));
-
-		// Calling parse again will return the same result
-		assertEquals(result, parser.parse());
-	}
-
-	public void testParse2() throws IOException {
-
-		BibtexParser parser = new BibtexParser(new StringReader(
-			"@article{test,author={Ed von Test}}"));
-		ParserResult result = parser.parse();
-
-		BibtexEntry e = new BibtexEntry("", BibtexEntryType.ARTICLE);
-		e.setField("author", "Ed von Test");
-		e.setField("bibtexkey", "test");
-
-		Collection<BibtexEntry> c = result.getDatabase().getEntries();
-		assertEquals(1, c.size());
-
-		BibtexEntry e2 = c.iterator().next();
-
-		assertNotSame(e.getId(), e2.getId());
-
-		for (String field : e.getAllFields()){
-			if (!e.getField(field.toString()).equals(e2.getField(field.toString()))) {
-				fail("e and e2 differ in field " + field.toString());
-			}
-		}
-	}
-
-	/**
-	 * Test for [ 1594123 ] Failure to import big numbers
-	 * 
-	 * Issue Reported by Ulf Martin.
-	 * 
-	 * @throws IOException
-	 */
-	public void testBigNumbers() throws IOException {
-
-		ParserResult result = BibtexParser.parse(new StringReader("@article{canh05,"
-			+ "isbn = 1234567890123456789,\n" + "isbn2 = {1234567890123456789},\n"
-			+ "small = 1234,\n" + "}"));
-
-		Collection<BibtexEntry> c = result.getDatabase().getEntries();
-		BibtexEntry e = c.iterator().next();
-
-		assertEquals("1234567890123456789", e.getField("isbn"));
-		assertEquals("1234567890123456789", e.getField("isbn2"));
-		assertEquals("1234", e.getField("small"));
-	}
-
-	public void testBigNumbers2() throws IOException {
-
-		ParserResult result = BibtexParser.parse(new StringReader(""
-			+ "@string{bourdieu = {Bourdieu, Pierre}}"
-			+ "@book{bourdieu-2002-questions-sociologie, " + "	Address = {Paris},"
-			+ "	Author = bourdieu," + "	Isbn = 2707318256," + "	Publisher = {Minuit},"
-			+ "	Title = {Questions de sociologie}," + "	Year = 2002" + "}"));
-
-		Collection<BibtexEntry> c = result.getDatabase().getEntries();
-		assertEquals(1, c.size());
-
-		BibtexEntry e = c.iterator().next();
-
-		assertEquals("bourdieu-2002-questions-sociologie", e.getCiteKey());
-		assertEquals(BibtexEntryType.BOOK, e.getType());
-		assertEquals("2707318256", e.getField("isbn"));
-		assertEquals("Paris", e.getField("address"));
-		assertEquals("Minuit", e.getField("publisher"));
-		assertEquals("Questions de sociologie", e.getField("title"));
-		assertEquals("#bourdieu#", e.getField("author"));
-		assertEquals("2002", e.getField("year"));
-	}
-
-	public void testNewlineHandling() throws IOException {
-
-		BibtexEntry e = BibtexParser.singleFromString("@article{canh05," +
-				"a = {a\nb}," +
-				"b = {a\n\nb}," +
-				"c = {a\n \nb}," +
-				"d = {a \n \n b},"
-			+ "title = {\nHallo \nWorld \nthis \n is\n\nnot \n\nan \n\n exercise \n \n.\n \n\n},\n"
-			+ "tabs = {\nHallo \tWorld \tthis \t is\t\tnot \t\tan \t\n exercise \t \n.\t \n\t},\n"
-			+ "file = {Bemerkung:H:\\bla\\ups  sala.pdf:PDF}, \n"
-			+ "}");
-		
-		assertEquals("canh05", e.getCiteKey());
-		assertEquals(BibtexEntryType.ARTICLE, e.getType());
-
-		assertEquals("a b", e.getField("a"));
-		assertEquals("a\nb", e.getField("b"));
-		assertEquals("a b", e.getField("c"));
-		assertEquals("a b", e.getField("d"));
-		
-		// I think the last \n is a bug in the parser...
-		assertEquals("Hallo World this is\nnot \nan \n exercise . \n\n", e.getField("title"));
-		assertEquals("Hallo World this isnot an exercise . ", e.getField("tabs"));
-	}
-	
-	/**
-	 * Test for [2022983]
-	 * 
-	 * @author Uwe Kuehn
-	 * @author Andrei Haralevich
-	 */
-	public void testFileNaming(){
-		BibtexEntry e = BibtexParser.singleFromString("@article{canh05," 
-			+ "title = {\nHallo \nWorld \nthis \n is\n\nnot \n\nan \n\n exercise \n \n.\n \n\n},\n"
-			+ "tabs = {\nHallo \tWorld \tthis \t is\t\tnot \t\tan \t\n exercise \t \n.\t \n\t},\n"
-			+ "file = {Bemerkung:H:\\bla\\ups  sala.pdf:PDF}, \n"
-			+ "}");
-		
-		assertEquals("Bemerkung:H:\\bla\\ups  sala.pdf:PDF", e.getField("file"));
-	}
-	
-	/**
-	 * Test for [2022983]
-	 * 
-	 * @author Uwe Kuehn
-	 * @author Andrei Haralevich
-	 */
-	public void testFileNaming1(){
-		BibtexEntry e = BibtexParser.singleFromString("@article{canh05," 
-			+ "title = {\nHallo \nWorld \nthis \n is\n\nnot \n\nan \n\n exercise \n \n.\n \n\n},\n"
-			+ "tabs = {\nHallo \tWorld \tthis \t is\t\tnot \t\tan \t\n exercise \t \n.\t \n\t},\n"
-			+ "file = {Bemerkung:H:\\bla\\ups  \tsala.pdf:PDF}, \n"
-			+ "}");
-		
-		assertEquals("Bemerkung:H:\\bla\\ups  sala.pdf:PDF", e.getField("file"));
-	}
-	
-	/**
-	 * Test for [2022983]
-	 * 
-	 * @author Uwe Kuehn
-	 * @author Andrei Haralevich
-	 */
-	public void testFileNaming3(){
-		BibtexEntry e = BibtexParser.singleFromString("@article{canh05," 
-			+ "title = {\nHallo \nWorld \nthis \n is\n\nnot \n\nan \n\n exercise \n \n.\n \n\n},\n"
-			+ "tabs = {\nHallo \tWorld \tthis \t is\t\tnot \t\tan \t\n exercise \t \n.\t \n\t},\n"
-			+ "file = {Bemerkung:H:\\bla\\ups \n\tsala.pdf:PDF}, \n"
-			+ "}");
-		
-		assertEquals("Bemerkung:H:\\bla\\ups  sala.pdf:PDF", e.getField("file"));
-	}
+package tests.net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.imports.ParserResult;
+
+/**
+ * Test the BibtexParser
+ * 
+ * @version $revision: 1.1$ $date: $
+ * 
+ * @author Christopher Oezbek <oezi at oezi.de>
+ */
+public class BibtexParserTest extends TestCase {
+
+	public void testParseReader() throws IOException {
+
+		ParserResult result = BibtexParser.parse(new StringReader(
+			"@article{test,author={Ed von Test}}"));
+
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
+		assertEquals(1, c.size());
+
+		BibtexEntry e = c.iterator().next();
+		assertEquals("test", e.getCiteKey());
+		assertEquals(2, e.getAllFields().size());
+		Set<String> o = e.getAllFields();
+		assertTrue(o.contains("author"));
+		assertEquals("Ed von Test", e.getField("author"));
+	}
+
+	public void testBibtexParser() {
+		try {
+			new BibtexParser(null);
+			fail("Should not accept null.");
+		} catch (NullPointerException npe) {
+
+		}
+	}
+
+	public void testIsRecognizedFormat() throws IOException {
+		assertTrue(BibtexParser
+			.isRecognizedFormat(new StringReader(
+				"This file was created with JabRef 2.1 beta 2."
+					+ "\n"
+					+ "Encoding: Cp1252"
+					+ "\n"
+					+ ""
+					+ "\n"
+					+ "@INPROCEEDINGS{CroAnnHow05,"
+					+ "\n"
+					+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
+					+ "\n"
+					+ "  title = {Effective work practices for floss development: A model and propositions},"
+					+ "\n"
+					+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},"
+					+ "\n" + "  year = {2005}," + "\n" + "  owner = {oezbek}," + "\n"
+					+ "  timestamp = {2006.05.29}," + "\n"
+					+ "  url = {http://james.howison.name/publications.html}" + "\n" + "}))")));
+
+		assertTrue(BibtexParser.isRecognizedFormat(new StringReader(
+			"This file was created with JabRef 2.1 beta 2." + "\n" + "Encoding: Cp1252" + "\n")));
+
+		assertTrue(BibtexParser
+			.isRecognizedFormat(new StringReader(
+				"@INPROCEEDINGS{CroAnnHow05,"
+					+ "\n"
+					+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
+					+ "\n"
+					+ "  title = {Effective work practices for floss development: A model and propositions},"
+					+ "\n"
+					+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},"
+					+ "\n" + "  year = {2005}," + "\n" + "  owner = {oezbek}," + "\n"
+					+ "  timestamp = {2006.05.29}," + "\n"
+					+ "  url = {http://james.howison.name/publications.html}" + "\n" + "}))")));
+
+		assertFalse(BibtexParser
+			.isRecognizedFormat(new StringReader(
+				"  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
+					+ "\n"
+					+ "  title = {Effective work practices for floss development: A model and propositions},"
+					+ "\n"
+					+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},"
+					+ "\n" + "  year = {2005}," + "\n" + "  owner = {oezbek}," + "\n"
+					+ "  timestamp = {2006.05.29}," + "\n"
+					+ "  url = {http://james.howison.name/publications.html}" + "\n" + "}))")));
+
+		assertFalse(BibtexParser.isRecognizedFormat(new StringReader(
+			"This was created with JabRef 2.1 beta 2." + "\n" + "Encoding: Cp1252" + "\n")));
+	}
+
+	public void testFromString() throws Exception {
+
+		{ // Simple case
+			Collection<BibtexEntry> c = BibtexParser.fromString("@article{test,author={Ed von Test}}");
+			assertEquals(1, c.size());
+
+			BibtexEntry e = c.iterator().next();
+			assertEquals("test", e.getCiteKey());
+			assertEquals(2, e.getAllFields().size());
+			assertTrue(e.getAllFields().contains("author"));
+			assertEquals("Ed von Test", e.getField("author"));
+		}
+		{ // Empty String
+			Collection<BibtexEntry> c = BibtexParser.fromString("");
+			assertEquals(0, c.size());
+
+		}
+		{ // Error
+			Collection<BibtexEntry> c = BibtexParser.fromString("@@article@@{{{{{{}");
+			assertEquals(null, c);
+		}
+
+	}
+
+	public void testFromSingle2() {
+		/**
+		 * More
+		 */
+		Collection<BibtexEntry> c = BibtexParser.fromString("@article{canh05,"
+			+ "  author = {Crowston, K. and Annabi, H.},\n" + "  title = {Title A}}\n"
+			+ "@inProceedings{foo," + "  author={Norton Bar}}");
+
+		assertEquals(2, c.size());
+
+		Iterator<BibtexEntry> i = c.iterator();
+		BibtexEntry a = i.next();
+		BibtexEntry b = i.next();
+
+		if (a.getCiteKey().equals("foo")) {
+			BibtexEntry tmp = a;
+			a = b;
+			b = tmp;
+		}
+
+		assertEquals("canh05", a.getCiteKey());
+		assertEquals("Crowston, K. and Annabi, H.", a.getField("author"));
+		assertEquals("Title A", a.getField("title"));
+		assertEquals(BibtexEntryType.ARTICLE, a.getType());
+
+		assertEquals("foo", b.getCiteKey());
+		assertEquals("Norton Bar", b.getField("author"));
+		assertEquals(BibtexEntryType.INPROCEEDINGS, b.getType());
+	}
+
+	public void testFromStringSingle() {
+		BibtexEntry a = BibtexParser.singleFromString("@article{canh05,"
+			+ "  author = {Crowston, K. and Annabi, H.},\n" + "  title = {Title A}}\n");
+
+		assertEquals("canh05", a.getCiteKey());
+		assertEquals("Crowston, K. and Annabi, H.", a.getField("author"));
+		assertEquals("Title A", a.getField("title"));
+		assertEquals(BibtexEntryType.ARTICLE, a.getType());
+		
+		BibtexEntry b = BibtexParser.singleFromString("@article{canh05,"
+			+ "  author = {Crowston, K. and Annabi, H.},\n" + "  title = {Title A}}\n"
+			+ "@inProceedings{foo," + "  author={Norton Bar}}");
+
+		if (!(b.getCiteKey().equals("canh05") || b.getCiteKey().equals("foo"))){
+			fail();
+		}
+	}
+
+	public void testParse() throws IOException {
+
+		// Test Standard parsing
+		BibtexParser parser = new BibtexParser(new StringReader(
+			"@article{test,author={Ed von Test}}"));
+		ParserResult result = parser.parse();
+
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
+		assertEquals(1, c.size());
+
+		BibtexEntry e = c.iterator().next();
+		assertEquals("test", e.getCiteKey());
+		assertEquals(2, e.getAllFields().size());
+		assertTrue(e.getAllFields().contains("author"));
+		assertEquals("Ed von Test", e.getField("author"));
+
+		// Calling parse again will return the same result
+		assertEquals(result, parser.parse());
+	}
+
+	public void testParse2() throws IOException {
+
+		BibtexParser parser = new BibtexParser(new StringReader(
+			"@article{test,author={Ed von Test}}"));
+		ParserResult result = parser.parse();
+
+		BibtexEntry e = new BibtexEntry("", BibtexEntryType.ARTICLE);
+		e.setField("author", "Ed von Test");
+		e.setField("bibtexkey", "test");
+
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
+		assertEquals(1, c.size());
+
+		BibtexEntry e2 = c.iterator().next();
+
+		assertNotSame(e.getId(), e2.getId());
+
+		for (String field : e.getAllFields()){
+			if (!e.getField(field.toString()).equals(e2.getField(field.toString()))) {
+				fail("e and e2 differ in field " + field.toString());
+			}
+		}
+	}
+
+	/**
+	 * Test for [ 1594123 ] Failure to import big numbers
+	 * 
+	 * Issue Reported by Ulf Martin.
+	 * 
+	 * @throws IOException
+	 */
+	public void testBigNumbers() throws IOException {
+
+		ParserResult result = BibtexParser.parse(new StringReader("@article{canh05,"
+			+ "isbn = 1234567890123456789,\n" + "isbn2 = {1234567890123456789},\n"
+			+ "small = 1234,\n" + "}"));
+
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
+		BibtexEntry e = c.iterator().next();
+
+		assertEquals("1234567890123456789", e.getField("isbn"));
+		assertEquals("1234567890123456789", e.getField("isbn2"));
+		assertEquals("1234", e.getField("small"));
+	}
+
+	public void testBigNumbers2() throws IOException {
+
+		ParserResult result = BibtexParser.parse(new StringReader(""
+			+ "@string{bourdieu = {Bourdieu, Pierre}}"
+			+ "@book{bourdieu-2002-questions-sociologie, " + "	Address = {Paris},"
+			+ "	Author = bourdieu," + "	Isbn = 2707318256," + "	Publisher = {Minuit},"
+			+ "	Title = {Questions de sociologie}," + "	Year = 2002" + "}"));
+
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
+		assertEquals(1, c.size());
+
+		BibtexEntry e = c.iterator().next();
+
+		assertEquals("bourdieu-2002-questions-sociologie", e.getCiteKey());
+		assertEquals(BibtexEntryType.BOOK, e.getType());
+		assertEquals("2707318256", e.getField("isbn"));
+		assertEquals("Paris", e.getField("address"));
+		assertEquals("Minuit", e.getField("publisher"));
+		assertEquals("Questions de sociologie", e.getField("title"));
+		assertEquals("#bourdieu#", e.getField("author"));
+		assertEquals("2002", e.getField("year"));
+	}
+
+	public void testNewlineHandling() throws IOException {
+
+		BibtexEntry e = BibtexParser.singleFromString("@article{canh05," +
+				"a = {a\nb}," +
+				"b = {a\n\nb}," +
+				"c = {a\n \nb}," +
+				"d = {a \n \n b},"
+			+ "title = {\nHallo \nWorld \nthis \n is\n\nnot \n\nan \n\n exercise \n \n.\n \n\n},\n"
+			+ "tabs = {\nHallo \tWorld \tthis \t is\t\tnot \t\tan \t\n exercise \t \n.\t \n\t},\n"
+			+ "file = {Bemerkung:H:\\bla\\ups  sala.pdf:PDF}, \n"
+			+ "}");
+		
+		assertEquals("canh05", e.getCiteKey());
+		assertEquals(BibtexEntryType.ARTICLE, e.getType());
+
+		assertEquals("a b", e.getField("a"));
+		assertEquals("a\nb", e.getField("b"));
+		assertEquals("a b", e.getField("c"));
+		assertEquals("a b", e.getField("d"));
+		
+		// I think the last \n is a bug in the parser...
+		assertEquals("Hallo World this is\nnot \nan \n exercise . \n\n", e.getField("title"));
+		assertEquals("Hallo World this isnot an exercise . ", e.getField("tabs"));
+	}
+	
+	/**
+	 * Test for [2022983]
+	 * 
+	 * @author Uwe Kuehn
+	 * @author Andrei Haralevich
+	 */
+	public void testFileNaming(){
+		BibtexEntry e = BibtexParser.singleFromString("@article{canh05," 
+			+ "title = {\nHallo \nWorld \nthis \n is\n\nnot \n\nan \n\n exercise \n \n.\n \n\n},\n"
+			+ "tabs = {\nHallo \tWorld \tthis \t is\t\tnot \t\tan \t\n exercise \t \n.\t \n\t},\n"
+			+ "file = {Bemerkung:H:\\bla\\ups  sala.pdf:PDF}, \n"
+			+ "}");
+		
+		assertEquals("Bemerkung:H:\\bla\\ups  sala.pdf:PDF", e.getField("file"));
+	}
+	
+	/**
+	 * Test for [2022983]
+	 * 
+	 * @author Uwe Kuehn
+	 * @author Andrei Haralevich
+	 */
+	public void testFileNaming1(){
+		BibtexEntry e = BibtexParser.singleFromString("@article{canh05," 
+			+ "title = {\nHallo \nWorld \nthis \n is\n\nnot \n\nan \n\n exercise \n \n.\n \n\n},\n"
+			+ "tabs = {\nHallo \tWorld \tthis \t is\t\tnot \t\tan \t\n exercise \t \n.\t \n\t},\n"
+			+ "file = {Bemerkung:H:\\bla\\ups  \tsala.pdf:PDF}, \n"
+			+ "}");
+		
+		assertEquals("Bemerkung:H:\\bla\\ups  sala.pdf:PDF", e.getField("file"));
+	}
+	
+	/**
+	 * Test for [2022983]
+	 * 
+	 * @author Uwe Kuehn
+	 * @author Andrei Haralevich
+	 */
+	public void testFileNaming3(){
+		BibtexEntry e = BibtexParser.singleFromString("@article{canh05," 
+			+ "title = {\nHallo \nWorld \nthis \n is\n\nnot \n\nan \n\n exercise \n \n.\n \n\n},\n"
+			+ "tabs = {\nHallo \tWorld \tthis \t is\t\tnot \t\tan \t\n exercise \t \n.\t \n\t},\n"
+			+ "file = {Bemerkung:H:\\bla\\ups \n\tsala.pdf:PDF}, \n"
+			+ "}");
+		
+		assertEquals("Bemerkung:H:\\bla\\ups  sala.pdf:PDF", e.getField("file"));
+	}
 }
\ No newline at end of file
diff --git a/src/java/tests/net/sf/jabref/imports/CopacImporterTest.java b/src/java/tests/net/sf/jabref/imports/CopacImporterTest.java
index 4f24211..a22efa7 100644
--- a/src/java/tests/net/sf/jabref/imports/CopacImporterTest.java
+++ b/src/java/tests/net/sf/jabref/imports/CopacImporterTest.java
@@ -1,81 +1,81 @@
-package tests.net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.util.List;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.OutputPrinterToNull;
-import net.sf.jabref.imports.CopacImporter;
-
-public class CopacImporterTest extends TestCase {
-	protected void setUp() throws Exception {
-		super.setUp();
-
-		if (Globals.prefs == null) {
-			Globals.prefs = JabRefPreferences.getInstance();
-		}
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-	}
-
-	public void testIsRecognizedFormat() throws IOException {
-
-        CopacImporter importer = new CopacImporter();
-		assertTrue(importer.isRecognizedFormat(CopacImporterTest.class
-			.getResourceAsStream("CopacImporterTest1.txt")));
-
-		assertTrue(importer.isRecognizedFormat(CopacImporterTest.class
-			.getResourceAsStream("CopacImporterTest2.txt")));
-
-		assertFalse(importer.isRecognizedFormat(CopacImporterTest.class
-			.getResourceAsStream("IsiImporterTest1.isi")));
-
-		assertFalse(importer.isRecognizedFormat(CopacImporterTest.class
-			.getResourceAsStream("IsiImporterTestINSPEC.isi")));
-
-		assertFalse(importer.isRecognizedFormat(CopacImporterTest.class
-			.getResourceAsStream("IsiImporterTestWOS.isi")));
-
-		assertFalse(importer.isRecognizedFormat(CopacImporterTest.class
-			.getResourceAsStream("IsiImporterTestMedline.isi")));
-	}
-
-	public void testImportEntries() throws IOException {
-		CopacImporter importer = new CopacImporter();
-
-		List<BibtexEntry> entries = importer.importEntries(CopacImporterTest.class
-			.getResourceAsStream("CopacImporterTest1.txt"), new OutputPrinterToNull());
-		assertEquals(1, entries.size());
-		BibtexEntry entry = entries.get(0);
-		
-		assertEquals("The SIS project : software reuse with a natural language approach", entry.getField("title"));
-		assertEquals(
-			"Prechelt, Lutz and Universit�t Karlsruhe. Fakult�t f�r Informatik",
-			entry.getField("author"));
-		assertEquals("Interner Bericht ; Nr.2/92", entry.getField("series"));
-		assertEquals("1992", entry.getField("year"));
-		assertEquals("Karlsruhe :  Universitat Karlsruhe, Fakultat fur Informatik", entry.getField("publisher"));
-		assertEquals(BibtexEntryType.BOOK, entry.getType());
-	}
-
-	public void testImportEntries2() throws IOException {
-		CopacImporter importer = new CopacImporter();
-
-		List<BibtexEntry> entries = importer.importEntries(CopacImporterTest.class
-			.getResourceAsStream("CopacImporterTest2.txt"), new OutputPrinterToNull());
-		assertEquals(2, entries.size());
-		BibtexEntry one = entries.get(0);
-		
-		assertEquals("Computing and operational research at the London Hospital", one.getField("title"));
-		
-		BibtexEntry two = entries.get(1);
-	
-		assertEquals("Real time systems : management and design", two.getField("title"));
-	}
-}
+package tests.net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.util.List;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.OutputPrinterToNull;
+import net.sf.jabref.imports.CopacImporter;
+
+public class CopacImporterTest extends TestCase {
+	protected void setUp() throws Exception {
+		super.setUp();
+
+		if (Globals.prefs == null) {
+			Globals.prefs = JabRefPreferences.getInstance();
+		}
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	public void testIsRecognizedFormat() throws IOException {
+
+        CopacImporter importer = new CopacImporter();
+		assertTrue(importer.isRecognizedFormat(CopacImporterTest.class
+			.getResourceAsStream("CopacImporterTest1.txt")));
+
+		assertTrue(importer.isRecognizedFormat(CopacImporterTest.class
+			.getResourceAsStream("CopacImporterTest2.txt")));
+
+		assertFalse(importer.isRecognizedFormat(CopacImporterTest.class
+			.getResourceAsStream("IsiImporterTest1.isi")));
+
+		assertFalse(importer.isRecognizedFormat(CopacImporterTest.class
+			.getResourceAsStream("IsiImporterTestINSPEC.isi")));
+
+		assertFalse(importer.isRecognizedFormat(CopacImporterTest.class
+			.getResourceAsStream("IsiImporterTestWOS.isi")));
+
+		assertFalse(importer.isRecognizedFormat(CopacImporterTest.class
+			.getResourceAsStream("IsiImporterTestMedline.isi")));
+	}
+
+	public void testImportEntries() throws IOException {
+		CopacImporter importer = new CopacImporter();
+
+		List<BibtexEntry> entries = importer.importEntries(CopacImporterTest.class
+			.getResourceAsStream("CopacImporterTest1.txt"), new OutputPrinterToNull());
+		assertEquals(1, entries.size());
+		BibtexEntry entry = entries.get(0);
+		
+		assertEquals("The SIS project : software reuse with a natural language approach", entry.getField("title"));
+		assertEquals(
+			"Prechelt, Lutz and Universit�t Karlsruhe. Fakult�t f�r Informatik",
+			entry.getField("author"));
+		assertEquals("Interner Bericht ; Nr.2/92", entry.getField("series"));
+		assertEquals("1992", entry.getField("year"));
+		assertEquals("Karlsruhe :  Universitat Karlsruhe, Fakultat fur Informatik", entry.getField("publisher"));
+		assertEquals(BibtexEntryType.BOOK, entry.getType());
+	}
+
+	public void testImportEntries2() throws IOException {
+		CopacImporter importer = new CopacImporter();
+
+		List<BibtexEntry> entries = importer.importEntries(CopacImporterTest.class
+			.getResourceAsStream("CopacImporterTest2.txt"), new OutputPrinterToNull());
+		assertEquals(2, entries.size());
+		BibtexEntry one = entries.get(0);
+		
+		assertEquals("Computing and operational research at the London Hospital", one.getField("title"));
+		
+		BibtexEntry two = entries.get(1);
+	
+		assertEquals("Real time systems : management and design", two.getField("title"));
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/imports/DatabaseFileLookupTest.java b/src/java/tests/net/sf/jabref/imports/DatabaseFileLookupTest.java
index 930f9a0..8e6d953 100644
--- a/src/java/tests/net/sf/jabref/imports/DatabaseFileLookupTest.java
+++ b/src/java/tests/net/sf/jabref/imports/DatabaseFileLookupTest.java
@@ -1,273 +1,273 @@
-package tests.net.sf.jabref.imports;
-
-import java.io.File;
-import java.io.FileReader;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Enumeration;
-import java.util.List;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.FindUnlinkedFilesDialog;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.FindUnlinkedFilesDialog.CheckableTreeNode;
-import net.sf.jabref.external.ExternalFileType;
-import net.sf.jabref.gui.FileListEntry;
-import net.sf.jabref.gui.FileListTableModel;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.imports.EntryFromPDFCreator;
-import net.sf.jabref.imports.ParserResult;
-import net.sf.jabref.imports.UnlinkedFilesCrawler;
-
-/**
- * 
- * @author Nosh&Dan
- * @version 09.11.2008 | 21:06:17
- * 
- */
-public class DatabaseFileLookupTest extends TestCase {
-
-	private BibtexDatabase database;
-	private Collection<BibtexEntry> entries;
-
-	private BibtexEntry entry1;
-	private BibtexEntry entry2;
-	
-	private File pdfDirectory;
-
-	private File fileInDatabase;
-	private File fileNotInDatabase;
-
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#setUp()
-	 */
-	protected void setUp() throws Exception {
-		super.setUp();
-
-		ParserResult result = BibtexParser.parse(new FileReader("src/tests/net/sf/jabref/util/unlinkedFilesTestBib.bib"));
-		database = result.getDatabase();
-		entries = database.getEntries();
-		
-		entry1 = database.getEntryByKey("entry1");
-		entry2 = database.getEntryByKey("entry2");
-		
-		pdfDirectory = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder");
-		
-		fileInDatabase = new File(pdfDirectory.getPath() + File.separator + "pdfInDatabase.pdf");
-		fileNotInDatabase = new File(pdfDirectory.getPath() + File.separator + "pdfNotInDatabase.pdf");
-		
-	}
-	
-	/**
-	 * Tests the prerequisites of this test-class itself.
-	 */
-	public void testTestDatabase() throws Exception {
-		assertEquals(2, database.getEntryCount());
-		assertEquals(2, entries.size());
-		assertNotNull(entry1);
-		assertNotNull(entry2);
-		
-		assertTrue(pdfDirectory.exists());
-		assertTrue(pdfDirectory.isDirectory());
-		assertTrue(fileInDatabase.exists());
-		assertTrue(fileInDatabase.isFile());
-		assertTrue(fileNotInDatabase.exists());
-		assertTrue(fileNotInDatabase.isFile());
-	}
-	
-	public void testInsertTestData() throws Exception {
-		
-		entry1 = new BibtexEntry();
-		JabRefPreferences jabRefPreferences = JabRefPreferences.getInstance();
-		ExternalFileType fileType = jabRefPreferences.getExternalFileTypeByExt("PDF");
-		FileListEntry fileListEntry = new FileListEntry("", fileInDatabase.getAbsolutePath(), fileType);
-
-		FileListTableModel model = new FileListTableModel();
-		model.addEntry(0, fileListEntry);
-
-		entry1.setField("file", model.getStringRepresentation());
-		
-		database.insertEntry(entry1);
-		
-		// #################### SETUP END ##################### //
-		
-		UnlinkedFilesCrawler crawler = new UnlinkedFilesCrawler(database);
-		CheckableTreeNode treeNode = crawler.searchDirectory(pdfDirectory, new EntryFromPDFCreator());
-		
-		assertNotNull(treeNode);
-		
-
-		/**
-		 * Select all nodes manually.
-		 */
-		Enumeration enumeration = treeNode.breadthFirstEnumeration();
-		while(enumeration.hasMoreElements()) {
-			CheckableTreeNode nextElement = (CheckableTreeNode) enumeration.nextElement();
-			nextElement.setSelected(true);
-		}
-		
-		List<File> resultList = getFileListFromNode(treeNode);
-		
-		assertFalse(resultList.isEmpty());
-		assertTrue(resultList.contains(fileNotInDatabase));
-		assertFalse(resultList.contains(fileInDatabase));
-	}
-	
-	/**
-	 * Connector-Method for the private method
-	 * {@link FindUnlinkedFilesDialog#getFileListFromNode()} of the dialog
-	 * {@link FindUnlinkedFilesDialog}. <br>
-	 * <br>
-	 * This method uses <b>reflection</b> to get access to that method.
-	 * 
-	 * @see FindUnlinkedFilesDialog#getFileListFromNode()
-	 */
-	private List<File> getFileListFromNode(CheckableTreeNode node) throws Exception {
-		return invokeMethod("getFileListFromNode", FindUnlinkedFilesDialog.class, node);
-	}
-
-	/**
-	 * Invokes a method in the supplied class with the given arguments, and
-	 * returnes the methods result in the desired type. <br>
-	 * <br>
-	 * The only requirement ist, that the type, on which the method is to be
-	 * called, has the default constructor. <br>
-	 * <br>
-	 * This method will create an instance of the provided class
-	 * <code>targetClass</code>, which is generally described by the generic
-	 * parameter <code>T</code> (for <i>Type</i>). The instance is created using
-	 * the <b>default constructor</b>. If the default constructor is not
-	 * declared, an Exception will be throwen. However, there is no requirement
-	 * on the visibility of the default constructor. <br>
-	 * Using this instance, the method specified by the string parameter
-	 * <code>methodName</code> will be invoked. Again, there is no requirement
-	 * on the visibility of the method. <br>
-	 * The method will be invoked, using the supplied parameter-list
-	 * <code>params</code>. <br>
-	 * <br>
-	 * The result will be returned as an object of the generic type
-	 * <code>R</code> (for <i>Result</i>), and as this type parameter
-	 * <code>R</code> is not further specified, the result my be any type and
-	 * does not need to be casted.
-	 * 
-	 * @param <R>
-	 *            The result type of the method. Does not need to be declared.
-	 * @param <T>
-	 *            The type, on which the method will be invoked.
-	 * @param methodName
-	 *            Method name to be invoked.
-	 * @param targetClass
-	 *            Class instance of the type, on which the method is to be
-	 *            invoked.
-	 * @param params
-	 *            Parameters for the invokation of the method.
-	 * @return The result of the method, that is invoked.
-	 */
-	@SuppressWarnings("unchecked")
-	public static <R, T> R invokeMethod(String methodName, Class<T> targetClass, Object... params) throws Exception {
-		T instance = getInstanceFromType(targetClass);
-		if (instance == null) {
-			throw new InstantiationException("The type '" + targetClass + "' could not be instantiated.");
-		}
-		Class<?>[] paramTypes = new Class<?>[params.length];
-		for (int i = 0; i < params.length; i++)
-			paramTypes[i] = params[i].getClass();
-		Method method = targetClass.getDeclaredMethod(methodName, paramTypes);
-		method.setAccessible(true);
-		return (R) method.invoke(instance, params);
-	}
-
-	private static <T> T getInstanceFromType(Class<T> targetClass) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
-		T instance = null;
-		try {
-			Constructor<? extends T> constructor;
-			constructor = targetClass.getDeclaredConstructor(new Class<?>[] {});
-			constructor.setAccessible(true);
-			instance = constructor.newInstance(new Object[] {});
-		} catch (Exception e) {
-			instance = getInstanceFromNonDefaultConstructor(targetClass);
-		}
-		return instance;
-	}
-	
-	@SuppressWarnings("unchecked")
-	private static <T> Constructor<? extends T>[] orderByParamCount(Constructor<? extends T>[] constructors) {
-		List<Constructor<? extends T>> list = Arrays.asList(constructors);
-		Collections.sort(list, new Comparator<Constructor<? extends T>>() {
-			public int compare(Constructor<? extends T> c1, Constructor<? extends T> c2) {
-				return new Integer(c1.getParameterTypes().length).compareTo(c2.getParameterTypes().length);
-			}
-		});
-		return new ArrayList<Constructor<? extends T>>(list).toArray(new Constructor[list.size()]);
-	}
-	
-	private static <T> T getInstanceFromNonDefaultConstructor(Class<T> targetClass) {
-		Constructor<?>[] constructors = targetClass.getDeclaredConstructors();
-		constructors = orderByParamCount(constructors);
-		for (int i = 0; i < constructors.length; i++) {
-			Constructor<?> constructor = constructors[i];
-			constructor.setAccessible(true);
-			Class<?>[] parameterTypes = constructor.getParameterTypes();
-			try {
-				/**
-				 * Trying to invoke constructor with <code>null</code> values.
-				 */
-				@SuppressWarnings("unchecked")
-				T instance = (T) constructor.newInstance(new Object[parameterTypes.length]);
-				return instance; 
-			} catch (Exception e) {
-			}
-			/**
-			 * Creating proper instances for the parameter types.
-			 */
-			Object[] arguments = createArguments(parameterTypes, targetClass);
-			if (arguments == null) {
-				continue;
-			}
-			try {
-				@SuppressWarnings("unchecked")
-				T instance = (T) constructor.newInstance(arguments);
-				return instance;
-			} catch (Exception e) {
-				continue;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Creates an argument-array for the type-array <code>parameterTypes</code>
-	 * by trying to instanciate every single parameter type. <br>
-	 * <br>
-	 * If one of the instanciation fails, the <code>null</code> value will be written
-	 * into the argument-array.
-	 * 
-	 * @param parameterTypes An Array of types, which shall be created.
-	 * @return An array of arguments.
-	 */
-	private static <T> Object[] createArguments(Class<?>[] parameterTypes, Class<T> targetClass) {
-		Object[] parameterValues = new Object[parameterTypes.length];
-		for (int i = 0; i < parameterTypes.length; i++) {
-			Class<?> typeClass = parameterTypes[i];
-			if (targetClass.equals(typeClass)) {
-				return null;
-			}
-			try {
-				parameterValues[i] = getInstanceFromType(typeClass);
-			}
-			catch (Exception e) {
-				parameterValues[i] = null;
-			}
-		}
-		return parameterValues;
-	}
-
-}
+package tests.net.sf.jabref.imports;
+
+import java.io.File;
+import java.io.FileReader;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Enumeration;
+import java.util.List;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.FindUnlinkedFilesDialog;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.FindUnlinkedFilesDialog.CheckableTreeNode;
+import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.gui.FileListEntry;
+import net.sf.jabref.gui.FileListTableModel;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.imports.EntryFromPDFCreator;
+import net.sf.jabref.imports.ParserResult;
+import net.sf.jabref.imports.UnlinkedFilesCrawler;
+
+/**
+ * 
+ * @author Nosh&Dan
+ * @version 09.11.2008 | 21:06:17
+ * 
+ */
+public class DatabaseFileLookupTest extends TestCase {
+
+	private BibtexDatabase database;
+	private Collection<BibtexEntry> entries;
+
+	private BibtexEntry entry1;
+	private BibtexEntry entry2;
+	
+	private File pdfDirectory;
+
+	private File fileInDatabase;
+	private File fileNotInDatabase;
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+
+		ParserResult result = BibtexParser.parse(new FileReader("src/tests/net/sf/jabref/util/unlinkedFilesTestBib.bib"));
+		database = result.getDatabase();
+		entries = database.getEntries();
+		
+		entry1 = database.getEntryByKey("entry1");
+		entry2 = database.getEntryByKey("entry2");
+		
+		pdfDirectory = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder");
+		
+		fileInDatabase = new File(pdfDirectory.getPath() + File.separator + "pdfInDatabase.pdf");
+		fileNotInDatabase = new File(pdfDirectory.getPath() + File.separator + "pdfNotInDatabase.pdf");
+		
+	}
+	
+	/**
+	 * Tests the prerequisites of this test-class itself.
+	 */
+	public void testTestDatabase() throws Exception {
+		assertEquals(2, database.getEntryCount());
+		assertEquals(2, entries.size());
+		assertNotNull(entry1);
+		assertNotNull(entry2);
+		
+		assertTrue(pdfDirectory.exists());
+		assertTrue(pdfDirectory.isDirectory());
+		assertTrue(fileInDatabase.exists());
+		assertTrue(fileInDatabase.isFile());
+		assertTrue(fileNotInDatabase.exists());
+		assertTrue(fileNotInDatabase.isFile());
+	}
+	
+	public void testInsertTestData() throws Exception {
+		
+		entry1 = new BibtexEntry();
+		JabRefPreferences jabRefPreferences = JabRefPreferences.getInstance();
+		ExternalFileType fileType = jabRefPreferences.getExternalFileTypeByExt("PDF");
+		FileListEntry fileListEntry = new FileListEntry("", fileInDatabase.getAbsolutePath(), fileType);
+
+		FileListTableModel model = new FileListTableModel();
+		model.addEntry(0, fileListEntry);
+
+		entry1.setField("file", model.getStringRepresentation());
+		
+		database.insertEntry(entry1);
+		
+		// #################### SETUP END ##################### //
+		
+		UnlinkedFilesCrawler crawler = new UnlinkedFilesCrawler(database);
+		CheckableTreeNode treeNode = crawler.searchDirectory(pdfDirectory, new EntryFromPDFCreator());
+		
+		assertNotNull(treeNode);
+		
+
+		/**
+		 * Select all nodes manually.
+		 */
+		Enumeration enumeration = treeNode.breadthFirstEnumeration();
+		while(enumeration.hasMoreElements()) {
+			CheckableTreeNode nextElement = (CheckableTreeNode) enumeration.nextElement();
+			nextElement.setSelected(true);
+		}
+		
+		List<File> resultList = getFileListFromNode(treeNode);
+		
+		assertFalse(resultList.isEmpty());
+		assertTrue(resultList.contains(fileNotInDatabase));
+		assertFalse(resultList.contains(fileInDatabase));
+	}
+	
+	/**
+	 * Connector-Method for the private method
+	 * {@link FindUnlinkedFilesDialog#getFileListFromNode()} of the dialog
+	 * {@link FindUnlinkedFilesDialog}. <br>
+	 * <br>
+	 * This method uses <b>reflection</b> to get access to that method.
+	 * 
+	 * @see FindUnlinkedFilesDialog#getFileListFromNode()
+	 */
+	private List<File> getFileListFromNode(CheckableTreeNode node) throws Exception {
+		return invokeMethod("getFileListFromNode", FindUnlinkedFilesDialog.class, node);
+	}
+
+	/**
+	 * Invokes a method in the supplied class with the given arguments, and
+	 * returnes the methods result in the desired type. <br>
+	 * <br>
+	 * The only requirement ist, that the type, on which the method is to be
+	 * called, has the default constructor. <br>
+	 * <br>
+	 * This method will create an instance of the provided class
+	 * <code>targetClass</code>, which is generally described by the generic
+	 * parameter <code>T</code> (for <i>Type</i>). The instance is created using
+	 * the <b>default constructor</b>. If the default constructor is not
+	 * declared, an Exception will be throwen. However, there is no requirement
+	 * on the visibility of the default constructor. <br>
+	 * Using this instance, the method specified by the string parameter
+	 * <code>methodName</code> will be invoked. Again, there is no requirement
+	 * on the visibility of the method. <br>
+	 * The method will be invoked, using the supplied parameter-list
+	 * <code>params</code>. <br>
+	 * <br>
+	 * The result will be returned as an object of the generic type
+	 * <code>R</code> (for <i>Result</i>), and as this type parameter
+	 * <code>R</code> is not further specified, the result my be any type and
+	 * does not need to be casted.
+	 * 
+	 * @param <R>
+	 *            The result type of the method. Does not need to be declared.
+	 * @param <T>
+	 *            The type, on which the method will be invoked.
+	 * @param methodName
+	 *            Method name to be invoked.
+	 * @param targetClass
+	 *            Class instance of the type, on which the method is to be
+	 *            invoked.
+	 * @param params
+	 *            Parameters for the invokation of the method.
+	 * @return The result of the method, that is invoked.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <R, T> R invokeMethod(String methodName, Class<T> targetClass, Object... params) throws Exception {
+		T instance = getInstanceFromType(targetClass);
+		if (instance == null) {
+			throw new InstantiationException("The type '" + targetClass + "' could not be instantiated.");
+		}
+		Class<?>[] paramTypes = new Class<?>[params.length];
+		for (int i = 0; i < params.length; i++)
+			paramTypes[i] = params[i].getClass();
+		Method method = targetClass.getDeclaredMethod(methodName, paramTypes);
+		method.setAccessible(true);
+		return (R) method.invoke(instance, params);
+	}
+
+	private static <T> T getInstanceFromType(Class<T> targetClass) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+		T instance = null;
+		try {
+			Constructor<? extends T> constructor;
+			constructor = targetClass.getDeclaredConstructor(new Class<?>[] {});
+			constructor.setAccessible(true);
+			instance = constructor.newInstance(new Object[] {});
+		} catch (Exception e) {
+			instance = getInstanceFromNonDefaultConstructor(targetClass);
+		}
+		return instance;
+	}
+	
+	@SuppressWarnings("unchecked")
+	private static <T> Constructor<? extends T>[] orderByParamCount(Constructor<? extends T>[] constructors) {
+		List<Constructor<? extends T>> list = Arrays.asList(constructors);
+		Collections.sort(list, new Comparator<Constructor<? extends T>>() {
+			public int compare(Constructor<? extends T> c1, Constructor<? extends T> c2) {
+				return new Integer(c1.getParameterTypes().length).compareTo(c2.getParameterTypes().length);
+			}
+		});
+		return new ArrayList<Constructor<? extends T>>(list).toArray(new Constructor[list.size()]);
+	}
+	
+	private static <T> T getInstanceFromNonDefaultConstructor(Class<T> targetClass) {
+		Constructor<?>[] constructors = targetClass.getDeclaredConstructors();
+		constructors = orderByParamCount(constructors);
+		for (int i = 0; i < constructors.length; i++) {
+			Constructor<?> constructor = constructors[i];
+			constructor.setAccessible(true);
+			Class<?>[] parameterTypes = constructor.getParameterTypes();
+			try {
+				/**
+				 * Trying to invoke constructor with <code>null</code> values.
+				 */
+				@SuppressWarnings("unchecked")
+				T instance = (T) constructor.newInstance(new Object[parameterTypes.length]);
+				return instance; 
+			} catch (Exception e) {
+			}
+			/**
+			 * Creating proper instances for the parameter types.
+			 */
+			Object[] arguments = createArguments(parameterTypes, targetClass);
+			if (arguments == null) {
+				continue;
+			}
+			try {
+				@SuppressWarnings("unchecked")
+				T instance = (T) constructor.newInstance(arguments);
+				return instance;
+			} catch (Exception e) {
+				continue;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Creates an argument-array for the type-array <code>parameterTypes</code>
+	 * by trying to instanciate every single parameter type. <br>
+	 * <br>
+	 * If one of the instanciation fails, the <code>null</code> value will be written
+	 * into the argument-array.
+	 * 
+	 * @param parameterTypes An Array of types, which shall be created.
+	 * @return An array of arguments.
+	 */
+	private static <T> Object[] createArguments(Class<?>[] parameterTypes, Class<T> targetClass) {
+		Object[] parameterValues = new Object[parameterTypes.length];
+		for (int i = 0; i < parameterTypes.length; i++) {
+			Class<?> typeClass = parameterTypes[i];
+			if (targetClass.equals(typeClass)) {
+				return null;
+			}
+			try {
+				parameterValues[i] = getInstanceFromType(typeClass);
+			}
+			catch (Exception e) {
+				parameterValues[i] = null;
+			}
+		}
+		return parameterValues;
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/imports/EntryFromFileCreatorManagerTest.java b/src/java/tests/net/sf/jabref/imports/EntryFromFileCreatorManagerTest.java
index 680f66e..678b811 100644
--- a/src/java/tests/net/sf/jabref/imports/EntryFromFileCreatorManagerTest.java
+++ b/src/java/tests/net/sf/jabref/imports/EntryFromFileCreatorManagerTest.java
@@ -1,86 +1,86 @@
-package tests.net.sf.jabref.imports;
-
-import java.io.File;
-import java.io.FileReader;
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexDatabase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.imports.EntryFromFileCreator;
-import net.sf.jabref.imports.EntryFromFileCreatorManager;
-import net.sf.jabref.imports.ParserResult;
-
-/**
- * 
- * @version 11.11.2008 | 21:51:54
- * 
- */
-public class EntryFromFileCreatorManagerTest extends TestCase {
-	
-	private BibtexDatabase database;
-
-	private File existingFile;
-	private File notExistingFile;
-	
-	private File pdfNotInDatabase;
-	
-	EntryFromFileCreatorManager manager1;
-	EntryFromFileCreatorManager manager2;
-
-	protected void setUp() throws Exception {
-		super.setUp();
-		
-		existingFile = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/pdfInDatabase.pdf");
-		notExistingFile = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/null.pdf");
-		
-		pdfNotInDatabase = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/pdfNotInDatabase.pdf");
-
-		manager1 = new EntryFromFileCreatorManager();
-		ParserResult result = BibtexParser.parse(new FileReader("src/tests/net/sf/jabref/util/unlinkedFilesTestBib.bib"));
-		database = result.getDatabase();
-	}
-
-	public void testGetCreator() throws Exception {
-		
-		EntryFromFileCreator creator = manager1.getEntryCreator(notExistingFile);
-		assertNull(creator);
-		
-		creator = manager1.getEntryCreator(existingFile);
-		assertNotNull(creator);
-		assertTrue(creator.accept(existingFile));
-	}
-
-	public void testAddEntrysFromFiles() throws Exception {
-		List<File> files = new ArrayList<File>();
-
-		files.add(pdfNotInDatabase);
-		files.add(notExistingFile);
-
-		manager2 = new EntryFromFileCreatorManager();
-		List<String> errors = manager2.addEntrysFromFiles(files, database, null, true);
-		
-		/**
-		 * One file doesn't exist, so adding it as an entry should lead to an
-		 * error message.
-		 */
-		assertEquals(1, errors.size());
-
-		boolean file1Found = false, file2Found = false;
-		for (BibtexEntry entry : database.getEntries()) {
-			String filesInfo = entry.getField("file");
-			if (filesInfo.contains(files.get(0).getName())) {
-				file1Found = true;
-			}
-			if (filesInfo.contains(files.get(1).getName())) {
-				file2Found = true;
-			}
-		}
-
-		assertTrue(file1Found);
-		assertFalse(file2Found);
-	}
-
-}
+package tests.net.sf.jabref.imports;
+
+import java.io.File;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.imports.EntryFromFileCreator;
+import net.sf.jabref.imports.EntryFromFileCreatorManager;
+import net.sf.jabref.imports.ParserResult;
+
+/**
+ * 
+ * @version 11.11.2008 | 21:51:54
+ * 
+ */
+public class EntryFromFileCreatorManagerTest extends TestCase {
+	
+	private BibtexDatabase database;
+
+	private File existingFile;
+	private File notExistingFile;
+	
+	private File pdfNotInDatabase;
+	
+	EntryFromFileCreatorManager manager1;
+	EntryFromFileCreatorManager manager2;
+
+	protected void setUp() throws Exception {
+		super.setUp();
+		
+		existingFile = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/pdfInDatabase.pdf");
+		notExistingFile = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/null.pdf");
+		
+		pdfNotInDatabase = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/pdfNotInDatabase.pdf");
+
+		manager1 = new EntryFromFileCreatorManager();
+		ParserResult result = BibtexParser.parse(new FileReader("src/tests/net/sf/jabref/util/unlinkedFilesTestBib.bib"));
+		database = result.getDatabase();
+	}
+
+	public void testGetCreator() throws Exception {
+		
+		EntryFromFileCreator creator = manager1.getEntryCreator(notExistingFile);
+		assertNull(creator);
+		
+		creator = manager1.getEntryCreator(existingFile);
+		assertNotNull(creator);
+		assertTrue(creator.accept(existingFile));
+	}
+
+	public void testAddEntrysFromFiles() throws Exception {
+		List<File> files = new ArrayList<File>();
+
+		files.add(pdfNotInDatabase);
+		files.add(notExistingFile);
+
+		manager2 = new EntryFromFileCreatorManager();
+		List<String> errors = manager2.addEntrysFromFiles(files, database, null, true);
+		
+		/**
+		 * One file doesn't exist, so adding it as an entry should lead to an
+		 * error message.
+		 */
+		assertEquals(1, errors.size());
+
+		boolean file1Found = false, file2Found = false;
+		for (BibtexEntry entry : database.getEntries()) {
+			String filesInfo = entry.getField("file");
+			if (filesInfo.contains(files.get(0).getName())) {
+				file1Found = true;
+			}
+			if (filesInfo.contains(files.get(1).getName())) {
+				file2Found = true;
+			}
+		}
+
+		assertTrue(file1Found);
+		assertFalse(file2Found);
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/imports/EntryFromPDFCreatorTest.java b/src/java/tests/net/sf/jabref/imports/EntryFromPDFCreatorTest.java
index 2c5cec1..58d15f8 100644
--- a/src/java/tests/net/sf/jabref/imports/EntryFromPDFCreatorTest.java
+++ b/src/java/tests/net/sf/jabref/imports/EntryFromPDFCreatorTest.java
@@ -1,52 +1,52 @@
-package tests.net.sf.jabref.imports;
-
-import java.io.File;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.imports.EntryFromPDFCreator;
-
-/**
- * 
- * @version 11.11.2008 | 22:16
- * 
- */
-public class EntryFromPDFCreatorTest extends TestCase {
-
-	private EntryFromPDFCreator entryCreator;
-	
-	private File existingPDF;
-	private File notExistingPDF;
-
-	protected void setUp() throws Exception {
-		// externalFileTypes are needed for the EntryFromPDFCreator      
-		JabRefPreferences.getInstance().updateExternalFileTypes();
-
-		
-		entryCreator = new EntryFromPDFCreator();
-		existingPDF = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/pdfNotInDatabase.pdf");
-		notExistingPDF = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/null.pdf");
-		
-	}
-
-	public void testPDFFileFilter() {
-
-		Assert.assertEquals(true, entryCreator.accept(new File("aPDF.pdf")));
-		Assert.assertEquals(true, entryCreator.accept(new File("aPDF.PDF")));
-		Assert.assertEquals(false, entryCreator.accept(new File("foo.jpg")));
-	}
-
-	public void testCreationOfEntry() {
-		
-		BibtexEntry entry = entryCreator.createEntry(notExistingPDF, false);
-		assertNull(entry);
-
-		entry = entryCreator.createEntry(existingPDF, false);
-		Assert.assertNotNull(entry);
-		Assert.assertTrue(entry.getField("file").endsWith(":PDF"));
-		Assert.assertEquals(existingPDF.getName(), entry.getField("title"));
-
-	}
+package tests.net.sf.jabref.imports;
+
+import java.io.File;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.imports.EntryFromPDFCreator;
+
+/**
+ * 
+ * @version 11.11.2008 | 22:16
+ * 
+ */
+public class EntryFromPDFCreatorTest extends TestCase {
+
+	private EntryFromPDFCreator entryCreator;
+	
+	private File existingPDF;
+	private File notExistingPDF;
+
+	protected void setUp() throws Exception {
+		// externalFileTypes are needed for the EntryFromPDFCreator      
+		JabRefPreferences.getInstance().updateExternalFileTypes();
+
+		
+		entryCreator = new EntryFromPDFCreator();
+		existingPDF = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/pdfNotInDatabase.pdf");
+		notExistingPDF = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/null.pdf");
+		
+	}
+
+	public void testPDFFileFilter() {
+
+		Assert.assertEquals(true, entryCreator.accept(new File("aPDF.pdf")));
+		Assert.assertEquals(true, entryCreator.accept(new File("aPDF.PDF")));
+		Assert.assertEquals(false, entryCreator.accept(new File("foo.jpg")));
+	}
+
+	public void testCreationOfEntry() {
+		
+		BibtexEntry entry = entryCreator.createEntry(notExistingPDF, false);
+		assertNull(entry);
+
+		entry = entryCreator.createEntry(existingPDF, false);
+		Assert.assertNotNull(entry);
+		Assert.assertTrue(entry.getField("file").endsWith(":PDF"));
+		Assert.assertEquals(existingPDF.getName(), entry.getField("title"));
+
+	}
 } 
\ No newline at end of file
diff --git a/src/java/tests/net/sf/jabref/imports/GeneralFetcherTest.java b/src/java/tests/net/sf/jabref/imports/GeneralFetcherTest.java
index 1cea225..485b8c3 100644
--- a/src/java/tests/net/sf/jabref/imports/GeneralFetcherTest.java
+++ b/src/java/tests/net/sf/jabref/imports/GeneralFetcherTest.java
@@ -1,68 +1,68 @@
-package tests.net.sf.jabref.imports;
-
-import javax.swing.JButton;
-import javax.swing.JTextField;
-
-import net.sf.jabref.imports.EntryFetcher;
-import tests.net.sf.jabref.TestUtils;
-
-import net.sf.jabref.JabRef;
-import net.sf.jabref.JabRefFrame;
-import net.sf.jabref.SidePaneManager;
-import net.sf.jabref.imports.ACMPortalFetcher;
-import net.sf.jabref.imports.GeneralFetcher;
-import junit.framework.TestCase;
-
-import java.util.ArrayList;
-
-/**
- * Tests GeneralFetcher
- * 
- * @author Dennis Hartrampf, Ines Moosdorf
- */
-public class GeneralFetcherTest extends TestCase {
-	static JabRefFrame jrf;
-	static SidePaneManager spm;
-	static GeneralFetcher gf;
-	static ACMPortalFetcher acmpf;
-
-	/**
-	 * Tests the reset-button. Types a text into tf, pushs reset and check tf's
-	 * text
-	 * 
-	 * @throws Exception
-	 */
-	public void testResetButton() throws Exception {
-		String testString = "test string";
-		JTextField tf = (JTextField) TestUtils.getChildNamed(gf, "tf");
-		assertNotNull(tf); // tf found?
-		tf.setText(testString);
-		tf.postActionEvent(); // send message
-		assertEquals(testString, tf.getText());
-		JButton reset = (JButton) TestUtils.getChildNamed(gf, "reset");
-		assertNotNull(reset); // reset found?
-		reset.doClick(); // "click" reset
-		assertEquals("", tf.getText());
-	}
-
-	/**
-	 * Get an instance of JabRef via its singleton and get a GeneralFetcher and an ACMPortalFetcher
-	 */
-	public void setUp() {
-		JabRef.main(new String[0]);
-		jrf = JabRef.singleton.jrf;
-		spm = jrf.sidePaneManager;
-		acmpf = new ACMPortalFetcher();
-        ArrayList<EntryFetcher> al = new ArrayList<EntryFetcher>();
-        al.add(acmpf);
-		gf = new GeneralFetcher(spm, jrf, al);
-	}
-
-	public void tearDown() {
-		gf = null;
-		acmpf = null;
-		spm = null;
-		jrf = null;
-	}
-
-}
+package tests.net.sf.jabref.imports;
+
+import javax.swing.JButton;
+import javax.swing.JTextField;
+
+import net.sf.jabref.imports.EntryFetcher;
+import tests.net.sf.jabref.TestUtils;
+
+import net.sf.jabref.JabRef;
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.SidePaneManager;
+import net.sf.jabref.imports.ACMPortalFetcher;
+import net.sf.jabref.imports.GeneralFetcher;
+import junit.framework.TestCase;
+
+import java.util.ArrayList;
+
+/**
+ * Tests GeneralFetcher
+ * 
+ * @author Dennis Hartrampf, Ines Moosdorf
+ */
+public class GeneralFetcherTest extends TestCase {
+	static JabRefFrame jrf;
+	static SidePaneManager spm;
+	static GeneralFetcher gf;
+	static ACMPortalFetcher acmpf;
+
+	/**
+	 * Tests the reset-button. Types a text into tf, pushs reset and check tf's
+	 * text
+	 * 
+	 * @throws Exception
+	 */
+	public void testResetButton() throws Exception {
+		String testString = "test string";
+		JTextField tf = (JTextField) TestUtils.getChildNamed(gf, "tf");
+		assertNotNull(tf); // tf found?
+		tf.setText(testString);
+		tf.postActionEvent(); // send message
+		assertEquals(testString, tf.getText());
+		JButton reset = (JButton) TestUtils.getChildNamed(gf, "reset");
+		assertNotNull(reset); // reset found?
+		reset.doClick(); // "click" reset
+		assertEquals("", tf.getText());
+	}
+
+	/**
+	 * Get an instance of JabRef via its singleton and get a GeneralFetcher and an ACMPortalFetcher
+	 */
+	public void setUp() {
+		JabRef.main(new String[0]);
+		jrf = JabRef.singleton.jrf;
+		spm = jrf.sidePaneManager;
+		acmpf = new ACMPortalFetcher();
+        ArrayList<EntryFetcher> al = new ArrayList<EntryFetcher>();
+        al.add(acmpf);
+		gf = new GeneralFetcher(spm, jrf, al);
+	}
+
+	public void tearDown() {
+		gf = null;
+		acmpf = null;
+		spm = null;
+		jrf = null;
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/imports/IsiImporterTest.java b/src/java/tests/net/sf/jabref/imports/IsiImporterTest.java
index 041a31e..06e14f1 100644
--- a/src/java/tests/net/sf/jabref/imports/IsiImporterTest.java
+++ b/src/java/tests/net/sf/jabref/imports/IsiImporterTest.java
@@ -1,370 +1,370 @@
-package tests.net.sf.jabref.imports;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.OutputPrinterToNull;
-import net.sf.jabref.imports.IsiImporter;
-
-/**
- * Test cases for the IsiImporter
- * 
- * @author $Author$
- * @version $Revision$ ($Date$)
- * 
- */
-public class IsiImporterTest extends TestCase {
-
-	protected void setUp() throws Exception {
-		super.setUp();
-
-		if (Globals.prefs == null) {
-			Globals.prefs = JabRefPreferences.getInstance();
-		}
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-	}
-
-	public void testIsRecognizedFormat() throws IOException {
-
-        IsiImporter importer = new IsiImporter();
-		assertTrue(importer.isRecognizedFormat(IsiImporterTest.class
-			.getResourceAsStream("IsiImporterTest1.isi")));
-
-		assertTrue(importer.isRecognizedFormat(IsiImporterTest.class
-			.getResourceAsStream("IsiImporterTestINSPEC.isi")));
-
-		assertTrue(importer.isRecognizedFormat(IsiImporterTest.class
-			.getResourceAsStream("IsiImporterTestWOS.isi")));
-
-		assertTrue(importer.isRecognizedFormat(IsiImporterTest.class
-			.getResourceAsStream("IsiImporterTestMedline.isi")));
-	}
-
-	public void testProcessSubSup() {
-
-		HashMap<String, String> hm = new HashMap<String, String>();
-		hm.put("title", "/sub 3/");
-		IsiImporter.processSubSup(hm);
-		assertEquals("$_3$", hm.get("title"));
-
-		hm.put("title", "/sub   3   /");
-		IsiImporter.processSubSup(hm);
-		assertEquals("$_3$", hm.get("title"));
-
-		hm.put("title", "/sub 31/");
-		IsiImporter.processSubSup(hm);
-		assertEquals("$_{31}$", hm.get("title"));
-
-		hm.put("abstract", "/sub 3/");
-		IsiImporter.processSubSup(hm);
-		assertEquals("$_3$", hm.get("abstract"));
-
-		hm.put("review", "/sub 31/");
-		IsiImporter.processSubSup(hm);
-		assertEquals("$_{31}$", hm.get("review"));
-
-		hm.put("title", "/sup 3/");
-		IsiImporter.processSubSup(hm);
-		assertEquals("$^3$", hm.get("title"));
-
-		hm.put("title", "/sup 31/");
-		IsiImporter.processSubSup(hm);
-		assertEquals("$^{31}$", hm.get("title"));
-
-		hm.put("abstract", "/sup 3/");
-		IsiImporter.processSubSup(hm);
-		assertEquals("$^3$", hm.get("abstract"));
-
-		hm.put("review", "/sup 31/");
-		IsiImporter.processSubSup(hm);
-		assertEquals("$^{31}$", hm.get("review"));
-
-		hm.put("title", "/sub $Hello/");
-		IsiImporter.processSubSup(hm);
-		assertEquals("$_{\\$Hello}$", hm.get("title"));
-	}
-
-	public void testImportEntries() throws IOException {
-		IsiImporter importer = new IsiImporter();
-
-		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
-			.getResourceAsStream("IsiImporterTest1.isi"), new OutputPrinterToNull());
-		assertEquals(1, entries.size());
-		BibtexEntry entry = entries.get(0);
-		assertEquals("Optical properties of MgO doped LiNbO$_3$ single crystals", entry
-			.getField("title"));
-		assertEquals(
-			"James Brown and James Marc Brown and Brown, J. M. and Brown, J. and Brown, J. M. and Brown, J.",
-			entry.getField("author"));
-
-		assertEquals(BibtexEntryType.ARTICLE, entry.getType());
-		assertEquals("Optical Materials", entry.getField("journal"));
-		assertEquals("2006", entry.getField("year"));
-		assertEquals("28", entry.getField("volume"));
-		assertEquals("5", entry.getField("number"));
-		assertEquals("467--72", entry.getField("pages"));
-
-		// What todo with PD and UT?
-	}
-
-	public void testImportEntriesINSPEC() throws IOException {
-		IsiImporter importer = new IsiImporter();
-
-		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
-			.getResourceAsStream("IsiImporterTestInspec.isi"), new OutputPrinterToNull());
-
-		assertEquals(2, entries.size());
-		BibtexEntry a = entries.get(0);
-		BibtexEntry b = entries.get(1);
-
-		if (a.getField("title").equals(
-			"Optical and photoelectric spectroscopy of photorefractive Sn$_2$P$_2$S$_6$ crystals")) {
-			BibtexEntry tmp = a;
-			a = b;
-			b = tmp;
-		}
-
-		// Check a
-		assertEquals(
-			"Second harmonic generation of continuous wave ultraviolet light and production of beta -BaB$_2$O$_4$ optical waveguides",
-			a.getField("title"));
-		assertEquals(BibtexEntryType.ARTICLE, a.getType());
-
-		assertEquals("Degl'Innocenti, R. and Guarino, A. and Poberaj, G. and Gunter, P.", a
-			.getField("author"));
-		assertEquals("Applied Physics Letters", a.getField("journal"));
-		assertEquals("2006", a.getField("year"));
-		assertEquals("#jul#", a.getField("month"));
-		assertEquals("89", a.getField("volume"));
-		assertEquals("4", a.getField("number"));
-
-		// JI Appl. Phys. Lett. (USA)
-
-		// BP 41103-1
-		// EP 41103-41103-3
-		// PS 41103-1-3
-		// assertEquals("41103-1-3", a.getField("pages"));
-
-		// LA English
-		assertEquals("We report on the generation of continuous-wave (cw) ultraviolet"
-			+ " (UV) laser light at lambda =278 nm by optical frequency doubling of"
-			+ " visible light in beta -BaB$_2$O$_4$ waveguides. Ridge-type "
-			+ "waveguides were produced by He$^+$ implantation, photolithography"
-			+ " masking, and plasma etching. The final waveguides have core dimension"
-			+ " of a few mu m$^2$ and show transmission losses of 5 dB/cm at 532 nm "
-			+ "and less than 10 dB/cm at 266 nm. In our first experiments, a second "
-			+ "harmonic power of 24 mu W has been generated at 278 nm in an 8 mm long "
-			+ "waveguide pumped by 153 mW at 556 nm.".replaceFirst("266", "\n"), a.getField(
-			"abstract").toString());
-		/*
-		 * DE Experimental/ barium compounds; ion implantation; optical harmonic
-		 * generation; optical losses; optical pumping; photolithography; solid
-		 * lasers; sputter etching; ultraviolet sources; waveguide lasers/
-		 * second harmonic generation; continuous-wave light; beta -BaB/sub
-		 * 2/O/sub 4/ optical waveguides; UV laser light; optical frequency
-		 * doubling; visible light; ridge-type waveguides; He/sup +/
-		 * implantation; photolithography masking; plasma etching; transmission
-		 * losses; optical pumping; 278 nm; 532 nm; 266 nm; 24 muW; 8 mm; 153
-		 * mW; 556 nm; BaB/sub 2/O/sub 4// A4265K Optical harmonic generation,
-		 * frequency conversion, parametric oscillation and amplification A4255R
-		 * Lasing action in other solids A4260B Design of specific laser systems
-		 * B4340K Optical harmonic generation, frequency conversion, parametric
-		 * oscillation and amplification B4320G Solid lasers/ wavelength
-		 * 2.78E-07 m; wavelength 5.32E-07 m; wavelength 2.66E-07 m; power
-		 * 2.4E-05 W; size 8.0E-03 m; power 1.53E-01 W; wavelength 5.56E-07 m/
-		 * BaB2O4/ss B2/ss Ba/ss O4/ss B/ss O/ss C1 Degl'Innocenti, R.; Guarino,
-		 * A.; Poberaj, G.; Gunter, P.; Nonlinear Opt. Lab., Inst. of Quantum
-		 * Electron., Zurich, Switzerland
-		 */
-		assertEquals("Aip", a.getField("publisher"));
-		// PV USA
-		// NR 11
-		// CO APPLAB
-		// SN 0003-6951
-		// ID
-		// 0003-6951/2006/89(4)/041103-1(3)/$23.00],[0003-6951(20060724)89:4L.41103:SHGC;1-T],[S0003-6951(06)22430-6],[10.1063/1.2234275]
-		// UT INSPEC:9027814
-
-		// Check B
-		assertEquals(
-			"Optical and photoelectric spectroscopy of photorefractive Sn$_2$P$_2$S$_6$ crystals",
-			b.getField("title").toString());
-		assertEquals(BibtexEntryType.ARTICLE, b.getType());
-	}
-
-	public void testImportEntriesWOS() throws IOException {
-		IsiImporter importer = new IsiImporter();
-
-		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
-			.getResourceAsStream("IsiImporterTestWOS.isi"), new OutputPrinterToNull());
-
-		assertEquals(2, entries.size());
-		BibtexEntry a = entries.get(0);
-		BibtexEntry b = entries.get(1);
-
-		if (a.getField("title").equals(
-			"Optical waveguides in Sn2P2S6 by low fluence MeV He+ ion implantation")) {
-			BibtexEntry tmp = a;
-			a = b;
-			b = tmp;
-		}
-
-		assertEquals("Optical and photoelectric spectroscopy of photorefractive Sn2P2S6 crystals",
-			a.getField("title"));
-		assertEquals("Optical waveguides in Sn2P2S6 by low fluence MeV He+ ion implantation", b
-			.getField("title"));
-
-		assertEquals("Journal Of Physics-Condensed Matter", a.getField("journal"));
-	}
-
-	public void testIsiAuthorsConvert() {
-		assertEquals(
-			"James Brown and James Marc Brown and Brown, J. M. and Brown, J. and Brown, J. M. and Brown, J.",
-			IsiImporter
-				.isiAuthorsConvert("James Brown and James Marc Brown and Brown, J.M. and Brown, J. and Brown, J.M. and Brown, J."));
-
-		assertEquals(
-			"Joffe, Hadine and Hall, Janet E. and Gruber, Staci and Sarmiento, Ingrid A. and Cohen, Lee S. and Yurgelun-Todd, Deborah and Martin, Kathryn A.",
-			IsiImporter
-				.isiAuthorsConvert("Joffe, Hadine; Hall, Janet E; Gruber, Staci; Sarmiento, Ingrid A; Cohen, Lee S; Yurgelun-Todd, Deborah; Martin, Kathryn A"));
-
-	}
-
-	public void testMonthConvert(){
-		
-		assertEquals("#jun#", IsiImporter.parseMonth("06"));
-		assertEquals("#jun#", IsiImporter.parseMonth("JUN"));
-		assertEquals("#jun#", IsiImporter.parseMonth("jUn"));
-		assertEquals("#may#", IsiImporter.parseMonth("MAY-JUN"));
-		assertEquals("#jun#", IsiImporter.parseMonth("2006 06"));
-		assertEquals("#jun#", IsiImporter.parseMonth("2006 06-07"));
-		assertEquals("#jul#", IsiImporter.parseMonth("2006 07 03"));
-		assertEquals("#may#", IsiImporter.parseMonth("2006 May-Jun"));
-	}
-	
-	public void testIsiAuthorConvert() {
-		assertEquals("James Brown", IsiImporter.isiAuthorConvert("James Brown"));
-		assertEquals("James Marc Brown", IsiImporter.isiAuthorConvert("James Marc Brown"));
-		assertEquals("Brown, J. M.", IsiImporter.isiAuthorConvert("Brown, J.M."));
-		assertEquals("Brown, J.", IsiImporter.isiAuthorConvert("Brown, J."));
-		assertEquals("Brown, J. M.", IsiImporter.isiAuthorConvert("Brown, JM"));
-		assertEquals("Brown, J.", IsiImporter.isiAuthorConvert("Brown, J"));
-		assertEquals("Brown, James", IsiImporter.isiAuthorConvert("Brown, James"));
-		assertEquals("Hall, Janet E.", IsiImporter.isiAuthorConvert("Hall, Janet E"));
-		assertEquals("", IsiImporter.isiAuthorConvert(""));
-	}
-
-	public void testGetExtensions() {
-		// new IsiImporter().getExtensions();
-	}
-
-	public void testGetIsCustomImporter() {
-		IsiImporter importer = new IsiImporter();
-		assertEquals(false, importer.getIsCustomImporter());
-	}
-
-	public void testImportIEEEExport() throws IOException {
-		IsiImporter importer = new IsiImporter();
-
-		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
-			.getResourceAsStream("IEEEImport1.txt"), new OutputPrinterToNull());
-
-		assertEquals(1, entries.size());
-		BibtexEntry a = entries.get(0);
-		
-		assertEquals(a.getType().getName(), BibtexEntryType.ARTICLE, a.getType());
-		assertEquals("Geoscience and Remote Sensing Letters, IEEE", a.getField("journal"));
-		assertEquals(
-			"Improving Urban Road Extraction in High-Resolution " +
-			"Images Exploiting Directional Filtering, Perceptual " +
-			"Grouping, and Simple Topological Concepts",
-			a.getField("title"));
-
-		assertEquals("4", a.getField("volume"));
-		assertEquals("3", a.getField("number"));
-		
-		assertEquals("1545-598X", a.getField("SN"));  
-
-		assertEquals("387--391", a.getField("pages"));
-
-		assertEquals("Gamba, P. and Dell'Acqua, F. and Lisini, G.", a.getField("author"));
-
-		assertEquals("2006", a.getField("year"));
-
-		assertEquals("Perceptual grouping, street extraction, urban remote sensing", a.getField("keywords"));
-
-		assertEquals("In this letter, the problem of detecting urban road " +
-				"networks from high-resolution optical/synthetic aperture " +
-				"radar (SAR) images is addressed. To this end, this letter " +
-				"exploits a priori knowledge about road direction " +
-				"distribution in urban areas. In particular, this letter " +
-				"presents an adaptive filtering procedure able to capture the " +
-				"predominant directions of these roads and enhance the " +
-				"extraction results. After road element extraction, to both " +
-				"discard redundant segments and avoid gaps, a special " +
-				"perceptual grouping algorithm is devised, exploiting " +
-				"colinearity as well as proximity concepts. Finally, the road " +
-				"network topology is considered, checking for road " +
-				"intersections and regularizing the overall patterns using " +
-				"these focal points. The proposed procedure was tested on a " +
-				"pair of very high resolution images, one from an optical " +
-				"sensor and one from a SAR sensor. The experiments show an " +
-				"increase in both the completeness and the quality indexes " +
-				"for the extracted road network.", a.getField("abstract"));
-		
-	}
-	
-	public void testImportEntriesMedline() throws IOException {
-		IsiImporter importer = new IsiImporter();
-
-		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
-			.getResourceAsStream("IsiImporterTestMedline.isi"), new OutputPrinterToNull());
-
-		assertEquals(2, entries.size());
-		BibtexEntry a = entries.get(0);
-		BibtexEntry b = entries.get(1);
-
-		if ((a.getField("title")).startsWith("Estrogen")) {
-			BibtexEntry tmp = a;
-			a = b;
-			b = tmp;
-		}
-
-		// Check A
-		assertEquals(
-			"Effects of modafinil on cognitive performance and alertness during sleep deprivation.",
-			a.getField("title"));
-
-		assertEquals("Wesensten, Nancy J.", a.getField("author"));
-		assertEquals("Curr Pharm Des", a.getField("journal"));
-		assertEquals("2006", a.getField("year"));
-		assertEquals(null, a.getField("month"));
-		assertEquals("12", a.getField("volume"));
-		assertEquals("20", a.getField("number"));
-		assertEquals("2457--71", a.getField("pages"));
-		assertEquals(BibtexEntryType.ARTICLE, a.getType());
-
-		// Check B
-		assertEquals(
-			"Estrogen therapy selectively enhances prefrontal cognitive processes: a randomized, double-blind, placebo-controlled study with functional magnetic resonance imaging in perimenopausal and recently postmenopausal women.",
-			b.getField("title").toString());
-		assertEquals(
-			"Joffe, Hadine and Hall, Janet E. and Gruber, Staci and Sarmiento, Ingrid A. and Cohen, Lee S. and Yurgelun-Todd, Deborah and Martin, Kathryn A.",
-			b.getField("author"));
-		assertEquals("2006", b.getField("year"));
-		assertEquals("#may#", b.getField("month"));
-		assertEquals("13", b.getField("volume"));
-		assertEquals("3", b.getField("number"));
-		assertEquals("411--22", b.getField("pages"));
-		assertEquals(BibtexEntryType.ARTICLE, b.getType());
-	}
-}
+package tests.net.sf.jabref.imports;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.OutputPrinterToNull;
+import net.sf.jabref.imports.IsiImporter;
+
+/**
+ * Test cases for the IsiImporter
+ * 
+ * @author $Author$
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class IsiImporterTest extends TestCase {
+
+	protected void setUp() throws Exception {
+		super.setUp();
+
+		if (Globals.prefs == null) {
+			Globals.prefs = JabRefPreferences.getInstance();
+		}
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	public void testIsRecognizedFormat() throws IOException {
+
+        IsiImporter importer = new IsiImporter();
+		assertTrue(importer.isRecognizedFormat(IsiImporterTest.class
+			.getResourceAsStream("IsiImporterTest1.isi")));
+
+		assertTrue(importer.isRecognizedFormat(IsiImporterTest.class
+			.getResourceAsStream("IsiImporterTestINSPEC.isi")));
+
+		assertTrue(importer.isRecognizedFormat(IsiImporterTest.class
+			.getResourceAsStream("IsiImporterTestWOS.isi")));
+
+		assertTrue(importer.isRecognizedFormat(IsiImporterTest.class
+			.getResourceAsStream("IsiImporterTestMedline.isi")));
+	}
+
+	public void testProcessSubSup() {
+
+		HashMap<String, String> hm = new HashMap<String, String>();
+		hm.put("title", "/sub 3/");
+		IsiImporter.processSubSup(hm);
+		assertEquals("$_3$", hm.get("title"));
+
+		hm.put("title", "/sub   3   /");
+		IsiImporter.processSubSup(hm);
+		assertEquals("$_3$", hm.get("title"));
+
+		hm.put("title", "/sub 31/");
+		IsiImporter.processSubSup(hm);
+		assertEquals("$_{31}$", hm.get("title"));
+
+		hm.put("abstract", "/sub 3/");
+		IsiImporter.processSubSup(hm);
+		assertEquals("$_3$", hm.get("abstract"));
+
+		hm.put("review", "/sub 31/");
+		IsiImporter.processSubSup(hm);
+		assertEquals("$_{31}$", hm.get("review"));
+
+		hm.put("title", "/sup 3/");
+		IsiImporter.processSubSup(hm);
+		assertEquals("$^3$", hm.get("title"));
+
+		hm.put("title", "/sup 31/");
+		IsiImporter.processSubSup(hm);
+		assertEquals("$^{31}$", hm.get("title"));
+
+		hm.put("abstract", "/sup 3/");
+		IsiImporter.processSubSup(hm);
+		assertEquals("$^3$", hm.get("abstract"));
+
+		hm.put("review", "/sup 31/");
+		IsiImporter.processSubSup(hm);
+		assertEquals("$^{31}$", hm.get("review"));
+
+		hm.put("title", "/sub $Hello/");
+		IsiImporter.processSubSup(hm);
+		assertEquals("$_{\\$Hello}$", hm.get("title"));
+	}
+
+	public void testImportEntries() throws IOException {
+		IsiImporter importer = new IsiImporter();
+
+		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
+			.getResourceAsStream("IsiImporterTest1.isi"), new OutputPrinterToNull());
+		assertEquals(1, entries.size());
+		BibtexEntry entry = entries.get(0);
+		assertEquals("Optical properties of MgO doped LiNbO$_3$ single crystals", entry
+			.getField("title"));
+		assertEquals(
+			"James Brown and James Marc Brown and Brown, J. M. and Brown, J. and Brown, J. M. and Brown, J.",
+			entry.getField("author"));
+
+		assertEquals(BibtexEntryType.ARTICLE, entry.getType());
+		assertEquals("Optical Materials", entry.getField("journal"));
+		assertEquals("2006", entry.getField("year"));
+		assertEquals("28", entry.getField("volume"));
+		assertEquals("5", entry.getField("number"));
+		assertEquals("467--72", entry.getField("pages"));
+
+		// What todo with PD and UT?
+	}
+
+	public void testImportEntriesINSPEC() throws IOException {
+		IsiImporter importer = new IsiImporter();
+
+		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
+			.getResourceAsStream("IsiImporterTestInspec.isi"), new OutputPrinterToNull());
+
+		assertEquals(2, entries.size());
+		BibtexEntry a = entries.get(0);
+		BibtexEntry b = entries.get(1);
+
+		if (a.getField("title").equals(
+			"Optical and photoelectric spectroscopy of photorefractive Sn$_2$P$_2$S$_6$ crystals")) {
+			BibtexEntry tmp = a;
+			a = b;
+			b = tmp;
+		}
+
+		// Check a
+		assertEquals(
+			"Second harmonic generation of continuous wave ultraviolet light and production of beta -BaB$_2$O$_4$ optical waveguides",
+			a.getField("title"));
+		assertEquals(BibtexEntryType.ARTICLE, a.getType());
+
+		assertEquals("Degl'Innocenti, R. and Guarino, A. and Poberaj, G. and Gunter, P.", a
+			.getField("author"));
+		assertEquals("Applied Physics Letters", a.getField("journal"));
+		assertEquals("2006", a.getField("year"));
+		assertEquals("#jul#", a.getField("month"));
+		assertEquals("89", a.getField("volume"));
+		assertEquals("4", a.getField("number"));
+
+		// JI Appl. Phys. Lett. (USA)
+
+		// BP 41103-1
+		// EP 41103-41103-3
+		// PS 41103-1-3
+		// assertEquals("41103-1-3", a.getField("pages"));
+
+		// LA English
+		assertEquals("We report on the generation of continuous-wave (cw) ultraviolet"
+			+ " (UV) laser light at lambda =278 nm by optical frequency doubling of"
+			+ " visible light in beta -BaB$_2$O$_4$ waveguides. Ridge-type "
+			+ "waveguides were produced by He$^+$ implantation, photolithography"
+			+ " masking, and plasma etching. The final waveguides have core dimension"
+			+ " of a few mu m$^2$ and show transmission losses of 5 dB/cm at 532 nm "
+			+ "and less than 10 dB/cm at 266 nm. In our first experiments, a second "
+			+ "harmonic power of 24 mu W has been generated at 278 nm in an 8 mm long "
+			+ "waveguide pumped by 153 mW at 556 nm.".replaceFirst("266", "\n"), a.getField(
+			"abstract").toString());
+		/*
+		 * DE Experimental/ barium compounds; ion implantation; optical harmonic
+		 * generation; optical losses; optical pumping; photolithography; solid
+		 * lasers; sputter etching; ultraviolet sources; waveguide lasers/
+		 * second harmonic generation; continuous-wave light; beta -BaB/sub
+		 * 2/O/sub 4/ optical waveguides; UV laser light; optical frequency
+		 * doubling; visible light; ridge-type waveguides; He/sup +/
+		 * implantation; photolithography masking; plasma etching; transmission
+		 * losses; optical pumping; 278 nm; 532 nm; 266 nm; 24 muW; 8 mm; 153
+		 * mW; 556 nm; BaB/sub 2/O/sub 4// A4265K Optical harmonic generation,
+		 * frequency conversion, parametric oscillation and amplification A4255R
+		 * Lasing action in other solids A4260B Design of specific laser systems
+		 * B4340K Optical harmonic generation, frequency conversion, parametric
+		 * oscillation and amplification B4320G Solid lasers/ wavelength
+		 * 2.78E-07 m; wavelength 5.32E-07 m; wavelength 2.66E-07 m; power
+		 * 2.4E-05 W; size 8.0E-03 m; power 1.53E-01 W; wavelength 5.56E-07 m/
+		 * BaB2O4/ss B2/ss Ba/ss O4/ss B/ss O/ss C1 Degl'Innocenti, R.; Guarino,
+		 * A.; Poberaj, G.; Gunter, P.; Nonlinear Opt. Lab., Inst. of Quantum
+		 * Electron., Zurich, Switzerland
+		 */
+		assertEquals("Aip", a.getField("publisher"));
+		// PV USA
+		// NR 11
+		// CO APPLAB
+		// SN 0003-6951
+		// ID
+		// 0003-6951/2006/89(4)/041103-1(3)/$23.00],[0003-6951(20060724)89:4L.41103:SHGC;1-T],[S0003-6951(06)22430-6],[10.1063/1.2234275]
+		// UT INSPEC:9027814
+
+		// Check B
+		assertEquals(
+			"Optical and photoelectric spectroscopy of photorefractive Sn$_2$P$_2$S$_6$ crystals",
+			b.getField("title").toString());
+		assertEquals(BibtexEntryType.ARTICLE, b.getType());
+	}
+
+	public void testImportEntriesWOS() throws IOException {
+		IsiImporter importer = new IsiImporter();
+
+		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
+			.getResourceAsStream("IsiImporterTestWOS.isi"), new OutputPrinterToNull());
+
+		assertEquals(2, entries.size());
+		BibtexEntry a = entries.get(0);
+		BibtexEntry b = entries.get(1);
+
+		if (a.getField("title").equals(
+			"Optical waveguides in Sn2P2S6 by low fluence MeV He+ ion implantation")) {
+			BibtexEntry tmp = a;
+			a = b;
+			b = tmp;
+		}
+
+		assertEquals("Optical and photoelectric spectroscopy of photorefractive Sn2P2S6 crystals",
+			a.getField("title"));
+		assertEquals("Optical waveguides in Sn2P2S6 by low fluence MeV He+ ion implantation", b
+			.getField("title"));
+
+		assertEquals("Journal Of Physics-Condensed Matter", a.getField("journal"));
+	}
+
+	public void testIsiAuthorsConvert() {
+		assertEquals(
+			"James Brown and James Marc Brown and Brown, J. M. and Brown, J. and Brown, J. M. and Brown, J.",
+			IsiImporter
+				.isiAuthorsConvert("James Brown and James Marc Brown and Brown, J.M. and Brown, J. and Brown, J.M. and Brown, J."));
+
+		assertEquals(
+			"Joffe, Hadine and Hall, Janet E. and Gruber, Staci and Sarmiento, Ingrid A. and Cohen, Lee S. and Yurgelun-Todd, Deborah and Martin, Kathryn A.",
+			IsiImporter
+				.isiAuthorsConvert("Joffe, Hadine; Hall, Janet E; Gruber, Staci; Sarmiento, Ingrid A; Cohen, Lee S; Yurgelun-Todd, Deborah; Martin, Kathryn A"));
+
+	}
+
+	public void testMonthConvert(){
+		
+		assertEquals("#jun#", IsiImporter.parseMonth("06"));
+		assertEquals("#jun#", IsiImporter.parseMonth("JUN"));
+		assertEquals("#jun#", IsiImporter.parseMonth("jUn"));
+		assertEquals("#may#", IsiImporter.parseMonth("MAY-JUN"));
+		assertEquals("#jun#", IsiImporter.parseMonth("2006 06"));
+		assertEquals("#jun#", IsiImporter.parseMonth("2006 06-07"));
+		assertEquals("#jul#", IsiImporter.parseMonth("2006 07 03"));
+		assertEquals("#may#", IsiImporter.parseMonth("2006 May-Jun"));
+	}
+	
+	public void testIsiAuthorConvert() {
+		assertEquals("James Brown", IsiImporter.isiAuthorConvert("James Brown"));
+		assertEquals("James Marc Brown", IsiImporter.isiAuthorConvert("James Marc Brown"));
+		assertEquals("Brown, J. M.", IsiImporter.isiAuthorConvert("Brown, J.M."));
+		assertEquals("Brown, J.", IsiImporter.isiAuthorConvert("Brown, J."));
+		assertEquals("Brown, J. M.", IsiImporter.isiAuthorConvert("Brown, JM"));
+		assertEquals("Brown, J.", IsiImporter.isiAuthorConvert("Brown, J"));
+		assertEquals("Brown, James", IsiImporter.isiAuthorConvert("Brown, James"));
+		assertEquals("Hall, Janet E.", IsiImporter.isiAuthorConvert("Hall, Janet E"));
+		assertEquals("", IsiImporter.isiAuthorConvert(""));
+	}
+
+	public void testGetExtensions() {
+		// new IsiImporter().getExtensions();
+	}
+
+	public void testGetIsCustomImporter() {
+		IsiImporter importer = new IsiImporter();
+		assertEquals(false, importer.getIsCustomImporter());
+	}
+
+	public void testImportIEEEExport() throws IOException {
+		IsiImporter importer = new IsiImporter();
+
+		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
+			.getResourceAsStream("IEEEImport1.txt"), new OutputPrinterToNull());
+
+		assertEquals(1, entries.size());
+		BibtexEntry a = entries.get(0);
+		
+		assertEquals(a.getType().getName(), BibtexEntryType.ARTICLE, a.getType());
+		assertEquals("Geoscience and Remote Sensing Letters, IEEE", a.getField("journal"));
+		assertEquals(
+			"Improving Urban Road Extraction in High-Resolution " +
+			"Images Exploiting Directional Filtering, Perceptual " +
+			"Grouping, and Simple Topological Concepts",
+			a.getField("title"));
+
+		assertEquals("4", a.getField("volume"));
+		assertEquals("3", a.getField("number"));
+		
+		assertEquals("1545-598X", a.getField("SN"));  
+
+		assertEquals("387--391", a.getField("pages"));
+
+		assertEquals("Gamba, P. and Dell'Acqua, F. and Lisini, G.", a.getField("author"));
+
+		assertEquals("2006", a.getField("year"));
+
+		assertEquals("Perceptual grouping, street extraction, urban remote sensing", a.getField("keywords"));
+
+		assertEquals("In this letter, the problem of detecting urban road " +
+				"networks from high-resolution optical/synthetic aperture " +
+				"radar (SAR) images is addressed. To this end, this letter " +
+				"exploits a priori knowledge about road direction " +
+				"distribution in urban areas. In particular, this letter " +
+				"presents an adaptive filtering procedure able to capture the " +
+				"predominant directions of these roads and enhance the " +
+				"extraction results. After road element extraction, to both " +
+				"discard redundant segments and avoid gaps, a special " +
+				"perceptual grouping algorithm is devised, exploiting " +
+				"colinearity as well as proximity concepts. Finally, the road " +
+				"network topology is considered, checking for road " +
+				"intersections and regularizing the overall patterns using " +
+				"these focal points. The proposed procedure was tested on a " +
+				"pair of very high resolution images, one from an optical " +
+				"sensor and one from a SAR sensor. The experiments show an " +
+				"increase in both the completeness and the quality indexes " +
+				"for the extracted road network.", a.getField("abstract"));
+		
+	}
+	
+	public void testImportEntriesMedline() throws IOException {
+		IsiImporter importer = new IsiImporter();
+
+		List<BibtexEntry> entries = importer.importEntries(IsiImporterTest.class
+			.getResourceAsStream("IsiImporterTestMedline.isi"), new OutputPrinterToNull());
+
+		assertEquals(2, entries.size());
+		BibtexEntry a = entries.get(0);
+		BibtexEntry b = entries.get(1);
+
+		if ((a.getField("title")).startsWith("Estrogen")) {
+			BibtexEntry tmp = a;
+			a = b;
+			b = tmp;
+		}
+
+		// Check A
+		assertEquals(
+			"Effects of modafinil on cognitive performance and alertness during sleep deprivation.",
+			a.getField("title"));
+
+		assertEquals("Wesensten, Nancy J.", a.getField("author"));
+		assertEquals("Curr Pharm Des", a.getField("journal"));
+		assertEquals("2006", a.getField("year"));
+		assertEquals(null, a.getField("month"));
+		assertEquals("12", a.getField("volume"));
+		assertEquals("20", a.getField("number"));
+		assertEquals("2457--71", a.getField("pages"));
+		assertEquals(BibtexEntryType.ARTICLE, a.getType());
+
+		// Check B
+		assertEquals(
+			"Estrogen therapy selectively enhances prefrontal cognitive processes: a randomized, double-blind, placebo-controlled study with functional magnetic resonance imaging in perimenopausal and recently postmenopausal women.",
+			b.getField("title").toString());
+		assertEquals(
+			"Joffe, Hadine and Hall, Janet E. and Gruber, Staci and Sarmiento, Ingrid A. and Cohen, Lee S. and Yurgelun-Todd, Deborah and Martin, Kathryn A.",
+			b.getField("author"));
+		assertEquals("2006", b.getField("year"));
+		assertEquals("#may#", b.getField("month"));
+		assertEquals("13", b.getField("volume"));
+		assertEquals("3", b.getField("number"));
+		assertEquals("411--22", b.getField("pages"));
+		assertEquals(BibtexEntryType.ARTICLE, b.getType());
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java b/src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java
index 43f0b37..9cb3e6b 100644
--- a/src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java
+++ b/src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java
@@ -1,172 +1,172 @@
-package tests.net.sf.jabref.imports;
-
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.Util;
-import net.sf.jabref.imports.OAI2Fetcher;
-import net.sf.jabref.imports.OAI2Handler;
-
-import org.xml.sax.SAXException;
-
-/**
- * Test for OAI2-Handler and Fetcher.
- * 
- * @author Ulrich Stärk
- * @author Christian Kopf
- * @author Christopher Oezbek
- * 
- * @version $Revision$ ($Date$)
- * 
- */
-public class OAI2ImportTest extends TestCase {
-
-	OAI2Handler handler;
-
-	BibtexEntry be;
-
-	protected SAXParserFactory parserFactory;
-
-	protected SAXParser saxParser;
-
-	protected void setUp() throws Exception {
-		parserFactory = SAXParserFactory.newInstance();
-		saxParser = parserFactory.newSAXParser();
-		be = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.getType("article"));
-		handler = new OAI2Handler(be);
-	}
-
-	public void testCorrectLineBreaks() {
-		assertEquals("Test this", OAI2Fetcher.correctLineBreaks("Test\nthis"));
-		assertEquals("Test this", OAI2Fetcher.correctLineBreaks("Test \n this"));
-		assertEquals("Test\nthis", OAI2Fetcher.correctLineBreaks("Test\n\nthis"));
-		assertEquals("Test\nthis", OAI2Fetcher.correctLineBreaks("Test\n    \nthis"));
-		assertEquals("Test\nthis", OAI2Fetcher.correctLineBreaks("  Test   \n   \n   this  "));
-	}
-
-	public void testParse() throws Throwable {
-		try {
-			saxParser.parse(this.getClass().getResourceAsStream("oai2.xml"), handler);
-			assertEquals("hep-ph/0408155", be.getField("eprint"));
-			assertEquals("G. F. Giudice and A. Riotto and A. Zaffaroni and J. L�pez-Pe�a",
-				be.getField("author"));
-			assertEquals("Nucl.Phys. B", be.getField("journal"));
-			assertEquals("710", be.getField("volume"));
-			assertEquals("2005", be.getField("year"));
-			assertEquals("511-525", be.getField("pages"));
-
-			// Citekey is only generated if the user says so in the import
-			// inspection dialog.
-			assertEquals(null, be.getCiteKey());
-
-			assertEquals("Heavy Particles from Inflation", be.getField("title"));
-			assertNotNull(be.getField("abstract"));
-			assertEquals("23 pages", be.getField("comments"));
-			assertEquals("CERN-PH-TH/2004-151", be.getField("reportno"));
-		} catch (SAXException e) {
-			throw e.getException();
-		}
-	}
-
-	public void testOai22xml() throws Exception {
-		try {
-			saxParser.parse(this.getClass().getResourceAsStream("oai22.xml"), handler);
-			assertEquals("2005", be.getField("year"));
-		} catch (SAXException e) {
-			throw e.getException();
-		}
-	}
-
-	public void testOai23xml() throws Throwable {
-		try {
-            saxParser.parse(this.getClass().getResourceAsStream("oai23.xml"), handler);
-			assertEquals("Javier L�pez Pe�a and Gabriel Navarro", be.getField("author").toString());
-		} catch (SAXException e) {
-			throw e.getException();
-		}
-
-	}
-
-	public void testUrlConstructor() {
-		OAI2Fetcher fetcher = new OAI2Fetcher();
-		assertEquals(
-			"http://export.arxiv.org/oai2?verb=GetRecord&identifier=oai%3AarXiv.org%3Ahep-ph%2F0408155&metadataPrefix=arXiv",
-			fetcher.constructUrl("hep-ph/0408155"));
-
-		assertEquals(
-			"http://export.arxiv.org/oai2?verb=GetRecord&identifier=oai%3AarXiv.org%3Amath%2F0612188&metadataPrefix=arXiv",
-			fetcher.constructUrl("math/0612188"));
-
-	}
-
-	public void testFixKey() {
-		assertEquals("", OAI2Fetcher.fixKey(""));
-		assertEquals("test", OAI2Fetcher.fixKey("test"));
-		assertEquals("math/0601001", OAI2Fetcher.fixKey("math.RA/0601001"));
-		assertEquals("math/0601001", OAI2Fetcher.fixKey("math.QA/0601001"));
-		assertEquals("hep-ph/0408155", OAI2Fetcher.fixKey("hep-ph/0408155"));
-		assertEquals("0709.3040v1", OAI2Fetcher.fixKey("arXiv:0709.3040v1"));
-		assertEquals("", OAI2Fetcher.fixKey("arXiv:"));
-	}
-
-	public void testOnline() throws InterruptedException {
-
-		{
-			OAI2Fetcher fetcher = new OAI2Fetcher();
-			be = fetcher.importOai2Entry("math.RA/0612188");
-			assertNotNull(be);
-
-			assertEquals("math/0612188", be.getField("eprint"));
-			assertEquals("On the classification and properties of noncommutative duplicates", be
-				.getField("title").toString());
-			assertEquals("Javier L�pez Pe�a and Gabriel Navarro", be.getField("author").toString());
-			assertEquals("2007", be.getField("year").toString());
-
-			Thread.sleep(20000);
-		}
-
-		{
-			OAI2Fetcher fetcher = new OAI2Fetcher();
-			be = fetcher.importOai2Entry("astro-ph/0702080");
-			assertNotNull(be);
-
-			assertEquals("astro-ph/0702080", be.getField("eprint"));
-			assertEquals(
-				"Magnetized Hypermassive Neutron Star Collapse: a candidate central engine for short-hard GRBs",
-				be.getField("title").toString());
-
-			Thread.sleep(20000);
-		}
-
-		{
-			OAI2Fetcher fetcher = new OAI2Fetcher();
-			be = fetcher.importOai2Entry("math.QA/0601001");
-			assertNotNull(be);
-
-			assertEquals("math/0601001", be.getField("eprint"));
-			Thread.sleep(20000);
-		}
-
-		{
-			OAI2Fetcher fetcher = new OAI2Fetcher();
-			be = fetcher.importOai2Entry("hep-ph/0408155");
-			assertNotNull(be);
-			
-			assertEquals("hep-ph/0408155", be.getField("eprint"));
-			  Thread.sleep(20000);
-        }
-
-        {
-            OAI2Fetcher fetcher = new OAI2Fetcher();
-            be = fetcher.importOai2Entry("0709.3040");
-            assertNotNull(be);
-            
-            assertEquals("2007", be.getField("year"));
-            assertEquals("#sep#", be.getField("month"));
-        }
-
-	}
-}
+package tests.net.sf.jabref.imports;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.Util;
+import net.sf.jabref.imports.OAI2Fetcher;
+import net.sf.jabref.imports.OAI2Handler;
+
+import org.xml.sax.SAXException;
+
+/**
+ * Test for OAI2-Handler and Fetcher.
+ * 
+ * @author Ulrich Stärk
+ * @author Christian Kopf
+ * @author Christopher Oezbek
+ * 
+ * @version $Revision$ ($Date$)
+ * 
+ */
+public class OAI2ImportTest extends TestCase {
+
+	OAI2Handler handler;
+
+	BibtexEntry be;
+
+	protected SAXParserFactory parserFactory;
+
+	protected SAXParser saxParser;
+
+	protected void setUp() throws Exception {
+		parserFactory = SAXParserFactory.newInstance();
+		saxParser = parserFactory.newSAXParser();
+		be = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.getType("article"));
+		handler = new OAI2Handler(be);
+	}
+
+	public void testCorrectLineBreaks() {
+		assertEquals("Test this", OAI2Fetcher.correctLineBreaks("Test\nthis"));
+		assertEquals("Test this", OAI2Fetcher.correctLineBreaks("Test \n this"));
+		assertEquals("Test\nthis", OAI2Fetcher.correctLineBreaks("Test\n\nthis"));
+		assertEquals("Test\nthis", OAI2Fetcher.correctLineBreaks("Test\n    \nthis"));
+		assertEquals("Test\nthis", OAI2Fetcher.correctLineBreaks("  Test   \n   \n   this  "));
+	}
+
+	public void testParse() throws Throwable {
+		try {
+			saxParser.parse(this.getClass().getResourceAsStream("oai2.xml"), handler);
+			assertEquals("hep-ph/0408155", be.getField("eprint"));
+			assertEquals("G. F. Giudice and A. Riotto and A. Zaffaroni and J. L�pez-Pe�a",
+				be.getField("author"));
+			assertEquals("Nucl.Phys. B", be.getField("journal"));
+			assertEquals("710", be.getField("volume"));
+			assertEquals("2005", be.getField("year"));
+			assertEquals("511-525", be.getField("pages"));
+
+			// Citekey is only generated if the user says so in the import
+			// inspection dialog.
+			assertEquals(null, be.getCiteKey());
+
+			assertEquals("Heavy Particles from Inflation", be.getField("title"));
+			assertNotNull(be.getField("abstract"));
+			assertEquals("23 pages", be.getField("comments"));
+			assertEquals("CERN-PH-TH/2004-151", be.getField("reportno"));
+		} catch (SAXException e) {
+			throw e.getException();
+		}
+	}
+
+	public void testOai22xml() throws Exception {
+		try {
+			saxParser.parse(this.getClass().getResourceAsStream("oai22.xml"), handler);
+			assertEquals("2005", be.getField("year"));
+		} catch (SAXException e) {
+			throw e.getException();
+		}
+	}
+
+	public void testOai23xml() throws Throwable {
+		try {
+            saxParser.parse(this.getClass().getResourceAsStream("oai23.xml"), handler);
+			assertEquals("Javier L�pez Pe�a and Gabriel Navarro", be.getField("author").toString());
+		} catch (SAXException e) {
+			throw e.getException();
+		}
+
+	}
+
+	public void testUrlConstructor() {
+		OAI2Fetcher fetcher = new OAI2Fetcher();
+		assertEquals(
+			"http://export.arxiv.org/oai2?verb=GetRecord&identifier=oai%3AarXiv.org%3Ahep-ph%2F0408155&metadataPrefix=arXiv",
+			fetcher.constructUrl("hep-ph/0408155"));
+
+		assertEquals(
+			"http://export.arxiv.org/oai2?verb=GetRecord&identifier=oai%3AarXiv.org%3Amath%2F0612188&metadataPrefix=arXiv",
+			fetcher.constructUrl("math/0612188"));
+
+	}
+
+	public void testFixKey() {
+		assertEquals("", OAI2Fetcher.fixKey(""));
+		assertEquals("test", OAI2Fetcher.fixKey("test"));
+		assertEquals("math/0601001", OAI2Fetcher.fixKey("math.RA/0601001"));
+		assertEquals("math/0601001", OAI2Fetcher.fixKey("math.QA/0601001"));
+		assertEquals("hep-ph/0408155", OAI2Fetcher.fixKey("hep-ph/0408155"));
+		assertEquals("0709.3040v1", OAI2Fetcher.fixKey("arXiv:0709.3040v1"));
+		assertEquals("", OAI2Fetcher.fixKey("arXiv:"));
+	}
+
+	public void testOnline() throws InterruptedException {
+
+		{
+			OAI2Fetcher fetcher = new OAI2Fetcher();
+			be = fetcher.importOai2Entry("math.RA/0612188");
+			assertNotNull(be);
+
+			assertEquals("math/0612188", be.getField("eprint"));
+			assertEquals("On the classification and properties of noncommutative duplicates", be
+				.getField("title").toString());
+			assertEquals("Javier L�pez Pe�a and Gabriel Navarro", be.getField("author").toString());
+			assertEquals("2007", be.getField("year").toString());
+
+			Thread.sleep(20000);
+		}
+
+		{
+			OAI2Fetcher fetcher = new OAI2Fetcher();
+			be = fetcher.importOai2Entry("astro-ph/0702080");
+			assertNotNull(be);
+
+			assertEquals("astro-ph/0702080", be.getField("eprint"));
+			assertEquals(
+				"Magnetized Hypermassive Neutron Star Collapse: a candidate central engine for short-hard GRBs",
+				be.getField("title").toString());
+
+			Thread.sleep(20000);
+		}
+
+		{
+			OAI2Fetcher fetcher = new OAI2Fetcher();
+			be = fetcher.importOai2Entry("math.QA/0601001");
+			assertNotNull(be);
+
+			assertEquals("math/0601001", be.getField("eprint"));
+			Thread.sleep(20000);
+		}
+
+		{
+			OAI2Fetcher fetcher = new OAI2Fetcher();
+			be = fetcher.importOai2Entry("hep-ph/0408155");
+			assertNotNull(be);
+			
+			assertEquals("hep-ph/0408155", be.getField("eprint"));
+			  Thread.sleep(20000);
+        }
+
+        {
+            OAI2Fetcher fetcher = new OAI2Fetcher();
+            be = fetcher.importOai2Entry("0709.3040");
+            assertNotNull(be);
+            
+            assertEquals("2007", be.getField("year"));
+            assertEquals("#sep#", be.getField("month"));
+        }
+
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/imports/UnlinkedFilesCrawlerTest.java b/src/java/tests/net/sf/jabref/imports/UnlinkedFilesCrawlerTest.java
index 608f8e4..3b27e76 100644
--- a/src/java/tests/net/sf/jabref/imports/UnlinkedFilesCrawlerTest.java
+++ b/src/java/tests/net/sf/jabref/imports/UnlinkedFilesCrawlerTest.java
@@ -1,58 +1,58 @@
-package tests.net.sf.jabref.imports;
-
-import java.io.File;
-
-import junit.framework.TestCase;
-
-/**
- * 
- * @author Nosh&Dan
- * @version 09.11.2008 | 19:41:40
- * 
- */
-public class UnlinkedFilesCrawlerTest extends TestCase {
-
-	private File fileInDatabase;
-	private File fileNotInDatabase;
-	
-	private File existingFolder;
-	private File notExistingFolder;
-	
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#setUp()
-	 */
-	protected void setUp() throws Exception {
-		super.setUp();
-		
-		fileInDatabase = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/pdfInDatabase.pdf");
-		fileNotInDatabase = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/pdfNotInDatabase.pdf");
-		
-		existingFolder = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder");
-		notExistingFolder = new File("notexistingfolder");
-	}
-	
-	/**
-	 * Tests the testing environment.
-	 */
-	public void testTestingEnvironment() {
-		
-		assertNotNull(existingFolder);
-		assertTrue(existingFolder.exists());
-		assertTrue(existingFolder.isDirectory());
-		
-		assertTrue(fileInDatabase.exists());
-		assertTrue(fileInDatabase.isFile());
-		
-		assertTrue(fileNotInDatabase.exists());
-		assertTrue(fileNotInDatabase.isFile());
-		
-	}
-	
-	public void testOpenNotExistingDirectory() {
-
-		assertNotNull(notExistingFolder);
-		assertFalse(notExistingFolder.exists());
-		
-	}
-
-}
+package tests.net.sf.jabref.imports;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+/**
+ * 
+ * @author Nosh&Dan
+ * @version 09.11.2008 | 19:41:40
+ * 
+ */
+public class UnlinkedFilesCrawlerTest extends TestCase {
+
+	private File fileInDatabase;
+	private File fileNotInDatabase;
+	
+	private File existingFolder;
+	private File notExistingFolder;
+	
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		
+		fileInDatabase = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/pdfInDatabase.pdf");
+		fileNotInDatabase = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder/pdfNotInDatabase.pdf");
+		
+		existingFolder = new File("src/tests/net/sf/jabref/imports/unlinkedFilesTestFolder");
+		notExistingFolder = new File("notexistingfolder");
+	}
+	
+	/**
+	 * Tests the testing environment.
+	 */
+	public void testTestingEnvironment() {
+		
+		assertNotNull(existingFolder);
+		assertTrue(existingFolder.exists());
+		assertTrue(existingFolder.isDirectory());
+		
+		assertTrue(fileInDatabase.exists());
+		assertTrue(fileInDatabase.isFile());
+		
+		assertTrue(fileNotInDatabase.exists());
+		assertTrue(fileNotInDatabase.isFile());
+		
+	}
+	
+	public void testOpenNotExistingDirectory() {
+
+		assertNotNull(notExistingFolder);
+		assertFalse(notExistingFolder.exists());
+		
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/imports/UnlinkedFilesTestSuite.java b/src/java/tests/net/sf/jabref/imports/UnlinkedFilesTestSuite.java
index 88a0f70..541291a 100644
--- a/src/java/tests/net/sf/jabref/imports/UnlinkedFilesTestSuite.java
+++ b/src/java/tests/net/sf/jabref/imports/UnlinkedFilesTestSuite.java
@@ -1,24 +1,24 @@
-package tests.net.sf.jabref.imports;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Runs all relevant test for the feature "Find unlinked files".
- * 
- * @author Nosh&Dan
- * @version 14.11.2008 | 00:26:19
- * 
- */
-public class UnlinkedFilesTestSuite {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite("Test for the feature \"Find unlinked files\".");
-		suite.addTestSuite(DatabaseFileLookupTest.class);
-		suite.addTestSuite(EntryFromFileCreatorManagerTest.class);
-		suite.addTestSuite(EntryFromPDFCreatorTest.class);
-		suite.addTestSuite(UnlinkedFilesCrawlerTest.class);
-		return suite;
-	}
-
-}
+package tests.net.sf.jabref.imports;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * Runs all relevant test for the feature "Find unlinked files".
+ * 
+ * @author Nosh&Dan
+ * @version 14.11.2008 | 00:26:19
+ * 
+ */
+public class UnlinkedFilesTestSuite {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for the feature \"Find unlinked files\".");
+		suite.addTestSuite(DatabaseFileLookupTest.class);
+		suite.addTestSuite(EntryFromFileCreatorManagerTest.class);
+		suite.addTestSuite(EntryFromPDFCreatorTest.class);
+		suite.addTestSuite(UnlinkedFilesCrawlerTest.class);
+		return suite;
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/search/AllTests.java b/src/java/tests/net/sf/jabref/search/AllTests.java
index 9908d1c..b4fbcac 100644
--- a/src/java/tests/net/sf/jabref/search/AllTests.java
+++ b/src/java/tests/net/sf/jabref/search/AllTests.java
@@ -1,16 +1,16 @@
-package tests.net.sf.jabref.search;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite("Test for tests.net.sf.jabref.search");
-		//$JUnit-BEGIN$
-		suite.addTestSuite(BasicSearchTest.class);
-		//$JUnit-END$
-		return suite;
-	}
-
-}
+package tests.net.sf.jabref.search;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for tests.net.sf.jabref.search");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(BasicSearchTest.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/search/BasicSearchTest.java b/src/java/tests/net/sf/jabref/search/BasicSearchTest.java
index b122935..ffaea4b 100644
--- a/src/java/tests/net/sf/jabref/search/BasicSearchTest.java
+++ b/src/java/tests/net/sf/jabref/search/BasicSearchTest.java
@@ -1,58 +1,58 @@
-package tests.net.sf.jabref.search;
-
-import junit.framework.TestCase;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.Util;
-import net.sf.jabref.search.BasicSearch;
-
-/**
- * Test case for BasicSearch.
- */
-public class BasicSearchTest extends TestCase {
-
-    public void testBasicSearchParsing() {
-
-        BibtexEntry be = makeBibtexEntry();
-        BasicSearch bsCaseSensitive = new BasicSearch(true, false);
-        BasicSearch bsCaseInsensitive = new BasicSearch(false, false);
-        BasicSearch bsCaseSensitiveRegexp = new BasicSearch(true, true);
-        BasicSearch bsCaseInsensitiveRegexp = new BasicSearch(false, true);
-
-        String query = "marine 2001 shields";
-        
-        assertEquals(0, bsCaseSensitive.applyRule(query, be));
-        assertEquals(1, bsCaseInsensitive.applyRule(query, be));
-        assertEquals(0, bsCaseSensitiveRegexp.applyRule(query, be));
-        assertEquals(1, bsCaseInsensitiveRegexp.applyRule(query, be));
-
-        query = "\"marine larviculture\"";
-
-        assertEquals(0, bsCaseSensitive.applyRule(query, be));
-        assertEquals(0, bsCaseInsensitive.applyRule(query, be));
-        assertEquals(0, bsCaseSensitiveRegexp.applyRule(query, be));
-        assertEquals(0, bsCaseInsensitiveRegexp.applyRule(query, be));
-
-        query = "\"marine [A-Za-z]* larviculture\"";
-
-        assertEquals(0, bsCaseSensitive.applyRule(query, be));
-        assertEquals(0, bsCaseInsensitive.applyRule(query, be));
-        assertEquals(0, bsCaseSensitiveRegexp.applyRule(query, be));
-        assertEquals(1, bsCaseInsensitiveRegexp.applyRule(query, be));
-
-        
-    }
-
-    public BibtexEntry makeBibtexEntry() {
-		BibtexEntry e = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.INCOLLECTION);
-		e.setField("title", "Marine finfish larviculture in Europe");
-		e.setField("bibtexkey", "shields01");
-		e.setField("year", "2001");
-		e
-			.setField(
-				"author",
-				"Kevin Shields");
-		return e;
-	}
-}
-
+package tests.net.sf.jabref.search;
+
+import junit.framework.TestCase;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.Util;
+import net.sf.jabref.search.BasicSearch;
+
+/**
+ * Test case for BasicSearch.
+ */
+public class BasicSearchTest extends TestCase {
+
+    public void testBasicSearchParsing() {
+
+        BibtexEntry be = makeBibtexEntry();
+        BasicSearch bsCaseSensitive = new BasicSearch(true, false);
+        BasicSearch bsCaseInsensitive = new BasicSearch(false, false);
+        BasicSearch bsCaseSensitiveRegexp = new BasicSearch(true, true);
+        BasicSearch bsCaseInsensitiveRegexp = new BasicSearch(false, true);
+
+        String query = "marine 2001 shields";
+        
+        assertEquals(0, bsCaseSensitive.applyRule(query, be));
+        assertEquals(1, bsCaseInsensitive.applyRule(query, be));
+        assertEquals(0, bsCaseSensitiveRegexp.applyRule(query, be));
+        assertEquals(1, bsCaseInsensitiveRegexp.applyRule(query, be));
+
+        query = "\"marine larviculture\"";
+
+        assertEquals(0, bsCaseSensitive.applyRule(query, be));
+        assertEquals(0, bsCaseInsensitive.applyRule(query, be));
+        assertEquals(0, bsCaseSensitiveRegexp.applyRule(query, be));
+        assertEquals(0, bsCaseInsensitiveRegexp.applyRule(query, be));
+
+        query = "\"marine [A-Za-z]* larviculture\"";
+
+        assertEquals(0, bsCaseSensitive.applyRule(query, be));
+        assertEquals(0, bsCaseInsensitive.applyRule(query, be));
+        assertEquals(0, bsCaseSensitiveRegexp.applyRule(query, be));
+        assertEquals(1, bsCaseInsensitiveRegexp.applyRule(query, be));
+
+        
+    }
+
+    public BibtexEntry makeBibtexEntry() {
+		BibtexEntry e = new BibtexEntry(Util.createNeutralId(), BibtexEntryType.INCOLLECTION);
+		e.setField("title", "Marine finfish larviculture in Europe");
+		e.setField("bibtexkey", "shields01");
+		e.setField("year", "2001");
+		e
+			.setField(
+				"author",
+				"Kevin Shields");
+		return e;
+	}
+}
+
diff --git a/src/java/tests/net/sf/jabref/testutils/TestUtils.java b/src/java/tests/net/sf/jabref/testutils/TestUtils.java
index ab599ae..5954e44 100644
--- a/src/java/tests/net/sf/jabref/testutils/TestUtils.java
+++ b/src/java/tests/net/sf/jabref/testutils/TestUtils.java
@@ -1,66 +1,66 @@
-package tests.net.sf.jabref.testutils;
-
-import java.security.Permission;
-
-import net.sf.jabref.JabRef;
-
-/**
- * UtilsClass for UnitTests.
- * 
- * @author kahlert, cordes
- * 
- */
-public class TestUtils {
-
-	public static final String PATH_TO_TEST_BIBTEX = "src/tests/net/sf/jabref/bibtexFiles/test.bib";	
-
-	/**
-	 * Returns a full configured and initialized instance of JabRef. As long as
-	 * {@link TestUtils#closeJabRef()} wasn't called this method returns the
-	 * same instance.
-	 * 
-	 * @see TestUtils#closeJabRef()
-	 */
-	public static JabRef getInitializedJabRef() {
-		disableSystemExit();
-		try {
-			String[] args = { "-p", " ", PATH_TO_TEST_BIBTEX };
-			JabRef.main(args);
-		} catch (ExitException e) {
-		} finally {
-			enableSystemExit();
-		}
-		JabRef jabref = JabRef.singleton;
-		return jabref;
-	}
-
-	/**
-	 * Closes the current instance of JabRef.
-	 */
-	public static void closeJabRef() {
-		JabRef jabref = JabRef.singleton;
-		if (jabref != null) {
-			jabref.jrf.dispose();
-		}
-	}
-
-	@SuppressWarnings("serial")
-	private static class ExitException extends SecurityException {
-	}
-
-	private static void disableSystemExit() {
-		final SecurityManager securityManager = new SecurityManager() {
-			public void checkPermission(Permission permission) {
-				if (permission.getName().contains("exitVM")) {
-					throw new ExitException();
-				}
-			}
-		};
-		System.setSecurityManager(securityManager);
-	}
-
-	private static void enableSystemExit() {
-		System.setSecurityManager(null);
-	}
-
-}
+package tests.net.sf.jabref.testutils;
+
+import java.security.Permission;
+
+import net.sf.jabref.JabRef;
+
+/**
+ * UtilsClass for UnitTests.
+ * 
+ * @author kahlert, cordes
+ * 
+ */
+public class TestUtils {
+
+	public static final String PATH_TO_TEST_BIBTEX = "src/tests/net/sf/jabref/bibtexFiles/test.bib";	
+
+	/**
+	 * Returns a full configured and initialized instance of JabRef. As long as
+	 * {@link TestUtils#closeJabRef()} wasn't called this method returns the
+	 * same instance.
+	 * 
+	 * @see TestUtils#closeJabRef()
+	 */
+	public static JabRef getInitializedJabRef() {
+		disableSystemExit();
+		try {
+			String[] args = { "-p", " ", PATH_TO_TEST_BIBTEX };
+			JabRef.main(args);
+		} catch (ExitException e) {
+		} finally {
+			enableSystemExit();
+		}
+		JabRef jabref = JabRef.singleton;
+		return jabref;
+	}
+
+	/**
+	 * Closes the current instance of JabRef.
+	 */
+	public static void closeJabRef() {
+		JabRef jabref = JabRef.singleton;
+		if (jabref != null) {
+			jabref.jrf.dispose();
+		}
+	}
+
+	@SuppressWarnings("serial")
+	private static class ExitException extends SecurityException {
+	}
+
+	private static void disableSystemExit() {
+		final SecurityManager securityManager = new SecurityManager() {
+			public void checkPermission(Permission permission) {
+				if (permission.getName().contains("exitVM")) {
+					throw new ExitException();
+				}
+			}
+		};
+		System.setSecurityManager(securityManager);
+	}
+
+	private static void enableSystemExit() {
+		System.setSecurityManager(null);
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/util/AllTests.java b/src/java/tests/net/sf/jabref/util/AllTests.java
index 41847ce..c2fabcb 100644
--- a/src/java/tests/net/sf/jabref/util/AllTests.java
+++ b/src/java/tests/net/sf/jabref/util/AllTests.java
@@ -1,18 +1,18 @@
-package tests.net.sf.jabref.util;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite("Test for tests.net.sf.jabref.util");
-		//$JUnit-BEGIN$
-		suite.addTestSuite(CaseChangerTest.class);
-		suite.addTestSuite(XMPUtilTest.class);
-		suite.addTestSuite(XMPSchemaBibtexTest.class);
-		//$JUnit-END$
-		return suite;
-	}
-
-}
+package tests.net.sf.jabref.util;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for tests.net.sf.jabref.util");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(CaseChangerTest.class);
+		suite.addTestSuite(XMPUtilTest.class);
+		suite.addTestSuite(XMPSchemaBibtexTest.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/util/CaseChangerTest.java b/src/java/tests/net/sf/jabref/util/CaseChangerTest.java
index 49a4101..6f1770e 100644
--- a/src/java/tests/net/sf/jabref/util/CaseChangerTest.java
+++ b/src/java/tests/net/sf/jabref/util/CaseChangerTest.java
@@ -1,58 +1,58 @@
-package tests.net.sf.jabref.util;
-
-import junit.framework.TestCase;
-import net.sf.jabref.util.CaseChanger;
-
-public class CaseChangerTest extends TestCase {
-
-	public void testNumberOfModes() {
-		
-		// If this fails we know there are new modes
-		assertEquals(4, CaseChanger.getNumModes());
-		assertEquals(4, CaseChanger.getModeNames().length);
-		
-		String[] modeNames = CaseChanger.getModeNames();
-		for (int i = 0; i < CaseChanger.getNumModes(); i++){
-			assertEquals(CaseChanger.getModeName(i), modeNames[i]);
-		}
-		assertEquals("lower", CaseChanger.getModeName(0));
-		assertEquals("UPPER", CaseChanger.getModeName(1));
-		assertEquals("Upper first", CaseChanger.getModeName(2));
-		assertEquals("Upper Each First", CaseChanger.getModeName(3));
-	}
-
-	public void testChangeCaseStringArrayInt() {
-		String[] s = new String[0];
-		assertEquals(0, CaseChanger.changeCase(s, 0).length);
-		
-		s = new String[]{"UPPER", "UPdownUPdown", "Mary has a little Lamb"};
-		
-		s = CaseChanger.changeCase(s,0);
-		assertEquals(3, s.length);
-		assertEquals("upper", s[0]);
-		assertEquals("updownupdown", s[1]);
-		assertEquals("mary has a little lamb", s[2]);
-	}
-
-	public void testChangeCaseStringInt() {
-
-		assertEquals("", CaseChanger.changeCase("", 0));
-		assertEquals("", CaseChanger.changeCase("", 1));
-		assertEquals("", CaseChanger.changeCase("", 2));
-		assertEquals("", CaseChanger.changeCase("", 3));
-		
-		assertEquals("lower", CaseChanger.changeCase("LOWER", 0));
-		assertEquals("LOWER", CaseChanger.changeCase("LOWER", 1));
-		assertEquals("UPPER", CaseChanger.changeCase("upper", 1));
-		assertEquals("UPPER", CaseChanger.changeCase("UPPER", 1));
-		
-		assertEquals("Upper first", CaseChanger.changeCase("upper First", 2));
-		
-		assertEquals("Upper Each First", CaseChanger.changeCase("upper each First", 3));
-	}
-	
-	public void testPreserveBrackets(){
-		
-		
-	}
-}
+package tests.net.sf.jabref.util;
+
+import junit.framework.TestCase;
+import net.sf.jabref.util.CaseChanger;
+
+public class CaseChangerTest extends TestCase {
+
+	public void testNumberOfModes() {
+		
+		// If this fails we know there are new modes
+		assertEquals(4, CaseChanger.getNumModes());
+		assertEquals(4, CaseChanger.getModeNames().length);
+		
+		String[] modeNames = CaseChanger.getModeNames();
+		for (int i = 0; i < CaseChanger.getNumModes(); i++){
+			assertEquals(CaseChanger.getModeName(i), modeNames[i]);
+		}
+		assertEquals("lower", CaseChanger.getModeName(0));
+		assertEquals("UPPER", CaseChanger.getModeName(1));
+		assertEquals("Upper first", CaseChanger.getModeName(2));
+		assertEquals("Upper Each First", CaseChanger.getModeName(3));
+	}
+
+	public void testChangeCaseStringArrayInt() {
+		String[] s = new String[0];
+		assertEquals(0, CaseChanger.changeCase(s, 0).length);
+		
+		s = new String[]{"UPPER", "UPdownUPdown", "Mary has a little Lamb"};
+		
+		s = CaseChanger.changeCase(s,0);
+		assertEquals(3, s.length);
+		assertEquals("upper", s[0]);
+		assertEquals("updownupdown", s[1]);
+		assertEquals("mary has a little lamb", s[2]);
+	}
+
+	public void testChangeCaseStringInt() {
+
+		assertEquals("", CaseChanger.changeCase("", 0));
+		assertEquals("", CaseChanger.changeCase("", 1));
+		assertEquals("", CaseChanger.changeCase("", 2));
+		assertEquals("", CaseChanger.changeCase("", 3));
+		
+		assertEquals("lower", CaseChanger.changeCase("LOWER", 0));
+		assertEquals("LOWER", CaseChanger.changeCase("LOWER", 1));
+		assertEquals("UPPER", CaseChanger.changeCase("upper", 1));
+		assertEquals("UPPER", CaseChanger.changeCase("UPPER", 1));
+		
+		assertEquals("Upper first", CaseChanger.changeCase("upper First", 2));
+		
+		assertEquals("Upper Each First", CaseChanger.changeCase("upper each First", 3));
+	}
+	
+	public void testPreserveBrackets(){
+		
+		
+	}
+}
diff --git a/src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java b/src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java
index 194730c..54ccac8 100644
--- a/src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java
+++ b/src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java
@@ -1,262 +1,262 @@
-package tests.net.sf.jabref.util;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.util.XMPSchemaBibtex;
-
-import org.apache.jempbox.impl.XMLUtil;
-import org.apache.jempbox.xmp.XMPMetadata;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-import tests.net.sf.jabref.FileBasedTestCase;
-import tests.net.sf.jabref.JabRefTestCase;
-
-public class XMPSchemaBibtexTest extends JabRefTestCase {
-
-	protected void setUp() throws Exception {
-		super.setUp();
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-	}
-
-	public void testXMPSchemaBibtexXMPMetadata() throws IOException {
-
-		XMPMetadata xmp = new XMPMetadata();
-		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
-
-		assertNotNull(bibtex.getElement());
-		assertEquals("rdf:Description", bibtex.getElement().getTagName());
-
-	}
-
-	public void testXMPSchemaBibtexElement()
-		throws ParserConfigurationException {
-		DocumentBuilderFactory builderFactory = DocumentBuilderFactory
-			.newInstance();
-		DocumentBuilder builder = builderFactory.newDocumentBuilder();
-		Element e = builder.newDocument().createElement("rdf:Description");
-
-		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(e, "bibtex");
-
-		assertEquals(e, bibtex.getElement());
-		assertEquals("rdf:Description", bibtex.getElement().getTagName());
-	}
-
-	public void testGetSetPersonList() throws IOException {
-		XMPMetadata xmp = new XMPMetadata();
-		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
-
-		bibtex.setPersonList("author", "Tom DeMarco and Kent Beck");
-
-		Element e = bibtex.getElement();
-
-		NodeList l1 = e.getElementsByTagName("bibtex:author");
-		assertEquals(1, l1.getLength());
-
-		NodeList l = e.getElementsByTagName("rdf:li");
-
-		assertEquals(2, l.getLength());
-
-		assertEquals("Tom DeMarco", XMLUtil
-			.getStringValue(((Element) l.item(0))));
-		assertEquals("Kent Beck", XMLUtil.getStringValue(((Element) l.item(1))));
-
-		List<String> authors = bibtex.getPersonList("author");
-		assertEquals(2, authors.size());
-
-		assertEquals("Tom DeMarco", authors.get(0));
-		assertEquals("Kent Beck", authors.get(1));
-	}
-
-	public void testSetGetTextPropertyString() throws IOException {
-		XMPMetadata xmp = new XMPMetadata();
-		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
-
-		bibtex.setTextProperty("title",
-			"The advanced Flux-Compensation for Delawney-Separation");
-
-		Element e = bibtex.getElement();
-		assertEquals("The advanced Flux-Compensation for Delawney-Separation",
-			e.getAttribute("bibtex:title"));
-
-		assertEquals("The advanced Flux-Compensation for Delawney-Separation",
-			bibtex.getTextProperty("title"));
-
-		bibtex.setTextProperty("title",
-			"The advanced Flux-Correlation for Delawney-Separation");
-
-		e = bibtex.getElement();
-		assertEquals("The advanced Flux-Correlation for Delawney-Separation", e
-			.getAttribute("bibtex:title"));
-
-		assertEquals("The advanced Flux-Correlation for Delawney-Separation",
-			bibtex.getTextProperty("title"));
-
-		bibtex
-			.setTextProperty(
-				"abstract",
-				"   The abstract\n can go \n \n on several \n lines with \n many \n\n empty ones in \n between.");
-		assertEquals(
-			"   The abstract\n can go \n \n on several \n lines with \n many \n\n empty ones in \n between.",
-			bibtex.getTextProperty("abstract"));
-	}
-
-	public void testSetGetBagListString() throws IOException {
-
-		XMPMetadata xmp = new XMPMetadata();
-		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
-
-		bibtex.addBagValue("author", "Tom DeMarco");
-		bibtex.addBagValue("author", "Kent Beck");
-		{
-
-			List<String> l = bibtex.getBagList("author");
-
-			assertEquals(2, l.size());
-
-			assertTrue(l.get(0).equals("Tom DeMarco")
-				|| l.get(1).equals("Tom DeMarco"));
-			assertTrue(l.get(0).equals("Kent Beck")
-				|| l.get(1).equals("Kent Beck"));
-		}
-		{
-			bibtex.removeBagValue("author", "Kent Beck");
-			List<String> l = bibtex.getBagList("author");
-			assertEquals(1, l.size());
-			assertTrue(l.get(0).equals("Tom DeMarco"));
-		}
-		{ // Already removed
-			bibtex.removeBagValue("author", "Kent Beck");
-			List<String> l = bibtex.getBagList("author");
-			assertEquals(1, l.size());
-			assertTrue(l.get(0).equals("Tom DeMarco"));
-		}
-		{ // Duplicates allowed!
-			bibtex.addBagValue("author", "Tom DeMarco");
-			List<String> l = bibtex.getBagList("author");
-			assertEquals(2, l.size());
-			assertTrue(l.get(0).equals("Tom DeMarco"));
-			assertTrue(l.get(1).equals("Tom DeMarco"));
-		}
-		{ // Removes both
-			bibtex.removeBagValue("author", "Tom DeMarco");
-			List<String> l = bibtex.getBagList("author");
-			assertEquals(0, l.size());
-		}
-	}
-
-	public void testGetSequenceListString() throws IOException {
-
-		XMPMetadata xmp = new XMPMetadata();
-		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
-
-		bibtex.addSequenceValue("author", "Tom DeMarco");
-		bibtex.addSequenceValue("author", "Kent Beck");
-		{
-
-			List<String> l = bibtex.getSequenceList("author");
-
-			assertEquals(2, l.size());
-
-			assertEquals("Tom DeMarco", l.get(0));
-			assertEquals("Kent Beck", l.get(1));
-		}
-		{
-			bibtex.removeSequenceValue("author", "Tom DeMarco");
-			List<String> l = bibtex.getSequenceList("author");
-			assertEquals(1, l.size());
-			assertTrue(l.get(0).equals("Kent Beck"));
-		}
-		{ // Already removed
-			bibtex.removeSequenceValue("author", "Tom DeMarco");
-			List<String> l = bibtex.getSequenceList("author");
-			assertEquals(1, l.size());
-			assertTrue(l.get(0).equals("Kent Beck"));
-		}
-		{ // Duplicates allowed!
-			bibtex.addSequenceValue("author", "Kent Beck");
-			List<String> l = bibtex.getSequenceList("author");
-			assertEquals(2, l.size());
-			assertTrue(l.get(0).equals("Kent Beck"));
-			assertTrue(l.get(1).equals("Kent Beck"));
-		}
-		{ // Remvoes all
-			bibtex.removeSequenceValue("author", "Kent Beck");
-			List<String> l = bibtex.getSequenceList("author");
-			assertEquals(0, l.size());
-		}
-	}
-
-	public void testSetRemoveGetSequenceDateListString() {
-		// We don't use this...
-	}
-
-	public void testGetAllProperties() throws IOException {
-		XMPMetadata xmp = new XMPMetadata();
-		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
-
-		bibtex.setTextProperty("title", "BlaBla Ta Ta\nHello World");
-		bibtex.setTextProperty("abstract", "BlaBla Ta Ta\nHello World");
-		bibtex.setTextProperty("review", "BlaBla Ta Ta\nHello World");
-		bibtex.setTextProperty("note", "BlaBla Ta Ta\nHello World");
-		bibtex.setPersonList("author", "Mouse, Mickey and Bond, James");
-
-		Map<String, String> s = XMPSchemaBibtex.getAllProperties(bibtex,
-			"bibtex");
-
-		assertEquals(5, s.size());
-		assertTrue(s.containsKey("title"));
-		assertTrue(s.containsKey("author"));
-
-		assertEquals("BlaBla Ta Ta Hello World", s.get("title"));
-		assertEquals("BlaBla Ta Ta\nHello World", s.get("abstract"));
-		assertEquals("BlaBla Ta Ta\nHello World", s.get("review"));
-		assertEquals("BlaBla Ta Ta\nHello World", s.get("note"));
-		assertEquals("Mickey Mouse and James Bond", s.get("author"));
-	}
-
-	public void testSetBibtexEntry() throws IOException {
-
-		XMPMetadata xmp = new XMPMetadata();
-		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
-
-		BibtexEntry e = FileBasedTestCase.getBibtexEntry();
-		bibtex.setBibtexEntry(e, null);
-
-		BibtexEntry e2 = bibtex.getBibtexEntry();
-
-		assertEquals(e, e2);
-	}
-
-	public void testGetTextContent() throws IOException {
-		String bibtexString = "<bibtex:year>2003</bibtex:year>\n"
-			+ "<bibtex:title>\n   "
-			+ "Beach sand convolution by surf-wave optimzation\n"
-			+ "</bibtex:title>\n"
-			+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
-
-		bibtexString = XMPUtilTest.bibtexXPacket(XMPUtilTest
-			.bibtexDescription(bibtexString));
-
-		Document d = XMLUtil.parse(new ByteArrayInputStream(bibtexString
-			.getBytes()));
-
-		assertEquals("Beach sand convolution by surf-wave optimzation",
-			XMPSchemaBibtex.getTextContent(
-				d.getElementsByTagName("bibtex:title").item(0)).trim());
-
-	}
-
-}
+package tests.net.sf.jabref.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.util.XMPSchemaBibtex;
+
+import org.apache.jempbox.impl.XMLUtil;
+import org.apache.jempbox.xmp.XMPMetadata;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import tests.net.sf.jabref.FileBasedTestCase;
+import tests.net.sf.jabref.JabRefTestCase;
+
+public class XMPSchemaBibtexTest extends JabRefTestCase {
+
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	public void testXMPSchemaBibtexXMPMetadata() throws IOException {
+
+		XMPMetadata xmp = new XMPMetadata();
+		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
+
+		assertNotNull(bibtex.getElement());
+		assertEquals("rdf:Description", bibtex.getElement().getTagName());
+
+	}
+
+	public void testXMPSchemaBibtexElement()
+		throws ParserConfigurationException {
+		DocumentBuilderFactory builderFactory = DocumentBuilderFactory
+			.newInstance();
+		DocumentBuilder builder = builderFactory.newDocumentBuilder();
+		Element e = builder.newDocument().createElement("rdf:Description");
+
+		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(e, "bibtex");
+
+		assertEquals(e, bibtex.getElement());
+		assertEquals("rdf:Description", bibtex.getElement().getTagName());
+	}
+
+	public void testGetSetPersonList() throws IOException {
+		XMPMetadata xmp = new XMPMetadata();
+		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
+
+		bibtex.setPersonList("author", "Tom DeMarco and Kent Beck");
+
+		Element e = bibtex.getElement();
+
+		NodeList l1 = e.getElementsByTagName("bibtex:author");
+		assertEquals(1, l1.getLength());
+
+		NodeList l = e.getElementsByTagName("rdf:li");
+
+		assertEquals(2, l.getLength());
+
+		assertEquals("Tom DeMarco", XMLUtil
+			.getStringValue(((Element) l.item(0))));
+		assertEquals("Kent Beck", XMLUtil.getStringValue(((Element) l.item(1))));
+
+		List<String> authors = bibtex.getPersonList("author");
+		assertEquals(2, authors.size());
+
+		assertEquals("Tom DeMarco", authors.get(0));
+		assertEquals("Kent Beck", authors.get(1));
+	}
+
+	public void testSetGetTextPropertyString() throws IOException {
+		XMPMetadata xmp = new XMPMetadata();
+		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
+
+		bibtex.setTextProperty("title",
+			"The advanced Flux-Compensation for Delawney-Separation");
+
+		Element e = bibtex.getElement();
+		assertEquals("The advanced Flux-Compensation for Delawney-Separation",
+			e.getAttribute("bibtex:title"));
+
+		assertEquals("The advanced Flux-Compensation for Delawney-Separation",
+			bibtex.getTextProperty("title"));
+
+		bibtex.setTextProperty("title",
+			"The advanced Flux-Correlation for Delawney-Separation");
+
+		e = bibtex.getElement();
+		assertEquals("The advanced Flux-Correlation for Delawney-Separation", e
+			.getAttribute("bibtex:title"));
+
+		assertEquals("The advanced Flux-Correlation for Delawney-Separation",
+			bibtex.getTextProperty("title"));
+
+		bibtex
+			.setTextProperty(
+				"abstract",
+				"   The abstract\n can go \n \n on several \n lines with \n many \n\n empty ones in \n between.");
+		assertEquals(
+			"   The abstract\n can go \n \n on several \n lines with \n many \n\n empty ones in \n between.",
+			bibtex.getTextProperty("abstract"));
+	}
+
+	public void testSetGetBagListString() throws IOException {
+
+		XMPMetadata xmp = new XMPMetadata();
+		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
+
+		bibtex.addBagValue("author", "Tom DeMarco");
+		bibtex.addBagValue("author", "Kent Beck");
+		{
+
+			List<String> l = bibtex.getBagList("author");
+
+			assertEquals(2, l.size());
+
+			assertTrue(l.get(0).equals("Tom DeMarco")
+				|| l.get(1).equals("Tom DeMarco"));
+			assertTrue(l.get(0).equals("Kent Beck")
+				|| l.get(1).equals("Kent Beck"));
+		}
+		{
+			bibtex.removeBagValue("author", "Kent Beck");
+			List<String> l = bibtex.getBagList("author");
+			assertEquals(1, l.size());
+			assertTrue(l.get(0).equals("Tom DeMarco"));
+		}
+		{ // Already removed
+			bibtex.removeBagValue("author", "Kent Beck");
+			List<String> l = bibtex.getBagList("author");
+			assertEquals(1, l.size());
+			assertTrue(l.get(0).equals("Tom DeMarco"));
+		}
+		{ // Duplicates allowed!
+			bibtex.addBagValue("author", "Tom DeMarco");
+			List<String> l = bibtex.getBagList("author");
+			assertEquals(2, l.size());
+			assertTrue(l.get(0).equals("Tom DeMarco"));
+			assertTrue(l.get(1).equals("Tom DeMarco"));
+		}
+		{ // Removes both
+			bibtex.removeBagValue("author", "Tom DeMarco");
+			List<String> l = bibtex.getBagList("author");
+			assertEquals(0, l.size());
+		}
+	}
+
+	public void testGetSequenceListString() throws IOException {
+
+		XMPMetadata xmp = new XMPMetadata();
+		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
+
+		bibtex.addSequenceValue("author", "Tom DeMarco");
+		bibtex.addSequenceValue("author", "Kent Beck");
+		{
+
+			List<String> l = bibtex.getSequenceList("author");
+
+			assertEquals(2, l.size());
+
+			assertEquals("Tom DeMarco", l.get(0));
+			assertEquals("Kent Beck", l.get(1));
+		}
+		{
+			bibtex.removeSequenceValue("author", "Tom DeMarco");
+			List<String> l = bibtex.getSequenceList("author");
+			assertEquals(1, l.size());
+			assertTrue(l.get(0).equals("Kent Beck"));
+		}
+		{ // Already removed
+			bibtex.removeSequenceValue("author", "Tom DeMarco");
+			List<String> l = bibtex.getSequenceList("author");
+			assertEquals(1, l.size());
+			assertTrue(l.get(0).equals("Kent Beck"));
+		}
+		{ // Duplicates allowed!
+			bibtex.addSequenceValue("author", "Kent Beck");
+			List<String> l = bibtex.getSequenceList("author");
+			assertEquals(2, l.size());
+			assertTrue(l.get(0).equals("Kent Beck"));
+			assertTrue(l.get(1).equals("Kent Beck"));
+		}
+		{ // Remvoes all
+			bibtex.removeSequenceValue("author", "Kent Beck");
+			List<String> l = bibtex.getSequenceList("author");
+			assertEquals(0, l.size());
+		}
+	}
+
+	public void testSetRemoveGetSequenceDateListString() {
+		// We don't use this...
+	}
+
+	public void testGetAllProperties() throws IOException {
+		XMPMetadata xmp = new XMPMetadata();
+		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
+
+		bibtex.setTextProperty("title", "BlaBla Ta Ta\nHello World");
+		bibtex.setTextProperty("abstract", "BlaBla Ta Ta\nHello World");
+		bibtex.setTextProperty("review", "BlaBla Ta Ta\nHello World");
+		bibtex.setTextProperty("note", "BlaBla Ta Ta\nHello World");
+		bibtex.setPersonList("author", "Mouse, Mickey and Bond, James");
+
+		Map<String, String> s = XMPSchemaBibtex.getAllProperties(bibtex,
+			"bibtex");
+
+		assertEquals(5, s.size());
+		assertTrue(s.containsKey("title"));
+		assertTrue(s.containsKey("author"));
+
+		assertEquals("BlaBla Ta Ta Hello World", s.get("title"));
+		assertEquals("BlaBla Ta Ta\nHello World", s.get("abstract"));
+		assertEquals("BlaBla Ta Ta\nHello World", s.get("review"));
+		assertEquals("BlaBla Ta Ta\nHello World", s.get("note"));
+		assertEquals("Mickey Mouse and James Bond", s.get("author"));
+	}
+
+	public void testSetBibtexEntry() throws IOException {
+
+		XMPMetadata xmp = new XMPMetadata();
+		XMPSchemaBibtex bibtex = new XMPSchemaBibtex(xmp);
+
+		BibtexEntry e = FileBasedTestCase.getBibtexEntry();
+		bibtex.setBibtexEntry(e, null);
+
+		BibtexEntry e2 = bibtex.getBibtexEntry();
+
+		assertEquals(e, e2);
+	}
+
+	public void testGetTextContent() throws IOException {
+		String bibtexString = "<bibtex:year>2003</bibtex:year>\n"
+			+ "<bibtex:title>\n   "
+			+ "Beach sand convolution by surf-wave optimzation\n"
+			+ "</bibtex:title>\n"
+			+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
+
+		bibtexString = XMPUtilTest.bibtexXPacket(XMPUtilTest
+			.bibtexDescription(bibtexString));
+
+		Document d = XMLUtil.parse(new ByteArrayInputStream(bibtexString
+			.getBytes()));
+
+		assertEquals("Beach sand convolution by surf-wave optimzation",
+			XMPSchemaBibtex.getTextContent(
+				d.getElementsByTagName("bibtex:title").item(0)).trim());
+
+	}
+
+}
diff --git a/src/java/tests/net/sf/jabref/util/XMPUtilTest.java b/src/java/tests/net/sf/jabref/util/XMPUtilTest.java
index 74571f5..2eb085e 100644
--- a/src/java/tests/net/sf/jabref/util/XMPUtilTest.java
+++ b/src/java/tests/net/sf/jabref/util/XMPUtilTest.java
@@ -1,1632 +1,1632 @@
-package tests.net.sf.jabref.util;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.PrintStream;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.TimeZone;
-
-import javax.xml.transform.TransformerException;
-
-import junit.framework.TestCase;
-import net.sf.jabref.AuthorList;
-import net.sf.jabref.BibtexEntry;
-import net.sf.jabref.BibtexEntryType;
-import net.sf.jabref.Globals;
-import net.sf.jabref.JabRefPreferences;
-import net.sf.jabref.Util;
-import net.sf.jabref.imports.BibtexParser;
-import net.sf.jabref.imports.ParserResult;
-import net.sf.jabref.util.EncryptionNotSupportedException;
-import net.sf.jabref.util.XMPSchemaBibtex;
-import net.sf.jabref.util.XMPUtil;
-
-import org.apache.jempbox.xmp.XMPMetadata;
-import org.apache.jempbox.xmp.XMPSchema;
-import org.apache.jempbox.xmp.XMPSchemaBasic;
-import org.apache.jempbox.xmp.XMPSchemaDublinCore;
-import org.apache.jempbox.xmp.XMPSchemaMediaManagement;
-import org.apache.pdfbox.exceptions.COSVisitorException;
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
-import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.common.PDMetadata;
-import org.apache.pdfbox.util.XMLUtil;
-
-/**
- * 
- * Limitations: The test suite only handles UTF8. Not UTF16.
- * 
- * @author Christopher Oezbek <oezi at oezi.de>
- */
-public class XMPUtilTest extends TestCase {
-
-	/**
-	 * Wrap bibtex-data (<bibtex:author>...) into an rdf:Description.
-	 * 
-	 * @param bibtex
-	 * @return
-	 */
-	public static String bibtexDescription(String bibtex) {
-		return "      <rdf:Description rdf:about='' xmlns:bibtex='http://jabref.sourceforge.net/bibteXMP/'>\n"
-				+ bibtex + "\n" + "      </rdf:Description>\n";
-	}
-
-	/**
-	 * Wrap bibtex-descriptions (rdf:Description) into the xpacket header.
-	 * 
-	 * @param bibtexDescriptions
-	 * @return
-	 */
-	public static String bibtexXPacket(String bibtexDescriptions) {
-
-		StringBuffer xmp = new StringBuffer();
-
-		xmp.append("<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>\n");
-		xmp.append("  <x:xmpmeta xmlns:x='adobe:ns:meta/'>\n");
-		xmp
-				.append("    <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/' xmlns:rdfs='http://www.w3.org/2000/01/rdf-schema#'>\n");
-
-		xmp.append(bibtexDescriptions);
-
-		xmp.append("    </rdf:RDF>\n");
-		xmp.append("  </x:xmpmeta>\n");
-		xmp.append("<?xpacket end='r'?>");
-
-		return xmp.toString();
-	}
-
-	/**
-	 * Write a manually constructed xmp-string to file
-	 * 
-	 * @param xmpString
-	 * @throws Exception
-	 */
-	public void writeManually(File tempFile, String xmpString) throws Exception {
-
-		PDDocument document = null;
-
-		try {
-			document = PDDocument.load(tempFile.getAbsoluteFile());
-			if (document.isEncrypted()) {
-				System.err
-						.println("Error: Cannot add metadata to encrypted document.");
-				System.exit(1);
-			}
-			PDDocumentCatalog catalog = document.getDocumentCatalog();
-
-			// Convert to UTF8 and make available for metadata.
-			ByteArrayOutputStream bs = new ByteArrayOutputStream();
-			OutputStreamWriter os = new OutputStreamWriter(bs, "UTF8");
-			os.write(xmpString);
-			os.close();
-			ByteArrayInputStream in = new ByteArrayInputStream(bs.toByteArray());
-
-			PDMetadata metadataStream = new PDMetadata(document, in, false);
-			catalog.setMetadata(metadataStream);
-
-			document.save(tempFile.getAbsolutePath());
-
-		} finally {
-			if (document != null)
-				document.close();
-		}
-	}
-
-	public static BibtexEntry bibtexString2BibtexEntry(String s)
-			throws IOException {
-		ParserResult result = BibtexParser.parse(new StringReader(s));
-		Collection<BibtexEntry> c = result.getDatabase().getEntries();
-		assertEquals(1, c.size());
-		return c.iterator().next();
-	}
-
-	public static String bibtexEntry2BibtexString(BibtexEntry e)
-			throws IOException {
-		StringWriter sw = new StringWriter();
-		e.write(sw, new net.sf.jabref.export.LatexFieldFormatter(), false);
-		return sw.getBuffer().toString();
-	}
-
-	/* TEST DATA */
-	public String t1BibtexString() {
-		return "@article{canh05,\n"
-				+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},\n"
-				+ "  title = {Effective work practices for floss development: A model and propositions},\n"
-				+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},\n"
-				+ "  year = {2005},\n" + "  owner = {oezbek},\n"
-				+ "  timestamp = {2006.05.29},\n"
-				+ "  url = {http://james.howison.name/publications.html}}\n";
-	}
-
-	public BibtexEntry t1BibtexEntry() throws IOException {
-		return bibtexString2BibtexEntry(t1BibtexString());
-	}
-
-	public String t2XMP() {
-		return "<rdf:Description rdf:about='' xmlns:bibtex='http://jabref.sourceforge.net/bibteXMP/' "
-				+ "bibtex:title='�pt�mz�t��n' "
-				+ "bibtex:bibtexkey='OezbekC06' "
-				+ "bibtex:entrytype='INCOLLECTION' "
-				+ "bibtex:year='2003' "
-				+ "bibtex:booktitle='Proceedings of the of the 25th International Conference on \n Software-Engineering (Portland, Oregon)' "
-				+ ">\n"
-				+ "<bibtex:pdf>YeKis03 - Towards.pdf</bibtex:pdf>\n"
-				+ "</rdf:Description>\n";
-	}
-
-	public String t2BibtexString() throws IOException {
-		return bibtexEntry2BibtexString(t2BibtexEntry());
-	}
-
-	public BibtexEntry t2BibtexEntry() {
-		BibtexEntry e = new BibtexEntry(Util.createNeutralId(),
-				BibtexEntryType.INCOLLECTION);
-		e.setField("title", "�pt�mz�t��n");
-		e.setField("bibtexkey", "OezbekC06");
-		e.setField("year", "2003");
-		e
-				.setField(
-						"booktitle",
-						"Proceedings of the of the 25th International Conference on Software-Engineering (Portland, Oregon)");
-		e.setField("pdf", "YeKis03 - Towards.pdf");
-		return e;
-	}
-
-	public BibtexEntry t3BibtexEntry() {
-		BibtexEntry e = new BibtexEntry();
-		e.setType(BibtexEntryType.INPROCEEDINGS);
-		e.setField("title", "Hypersonic ultra-sound");
-		e.setField("bibtexkey", "Clarkson06");
-		e.setField("author", "Kelly Clarkson and Ozzy Osbourne");
-		e.setField("journal", "International Journal of High Fidelity");
-		e.setField("booktitle", "Catch-22");
-		e.setField("editor", "Huey Duck and Dewey Duck and Louie Duck");
-		e.setField("pdf", "YeKis03 - Towards.pdf");
-		e.setField("keywords", "peanut,butter,jelly");
-		e.setField("year", "1982");
-		e.setField("month", "#jul#");
-		e
-				.setField(
-						"abstract",
-						"The success of the Linux operating system has demonstrated the viability of an alternative form of software development � open source software � that challenges traditional assumptions about software markets. Understanding what drives open source developers to participate in open source projects is crucial for assessing the impact of open source software. This article identifies two broad types of motivations that account for their participation in open source projects. The first  [...]
-		return e;
-	}
-
-	public String t3BibtexString() throws IOException {
-		return bibtexEntry2BibtexString(t3BibtexEntry());
-	}
-
-	public String t3XMP() {
-		return bibtexDescription("<bibtex:title>Hypersonic ultra-sound</bibtex:title>\n"
-				+ "<bibtex:author><rdf:Seq>\n"
-				+ "  <rdf:li>Kelly Clarkson</rdf:li>"
-				+ "  <rdf:li>Ozzy Osbourne</rdf:li>"
-				+ "</rdf:Seq></bibtex:author>"
-				+ "<bibtex:editor><rdf:Seq>"
-				+ "  <rdf:li>Huey Duck</rdf:li>"
-				+ "  <rdf:li>Dewey Duck</rdf:li>"
-				+ "  <rdf:li>Louie Duck</rdf:li>"
-				+ "</rdf:Seq></bibtex:editor>"
-				+ "<bibtex:bibtexkey>Clarkson06</bibtex:bibtexkey>"
-				+ "<bibtex:journal>International Journal of High Fidelity</bibtex:journal>"
-				+ "<bibtex:booktitle>Catch-22</bibtex:booktitle>"
-				+ "<bibtex:pdf>YeKis03 - Towards.pdf</bibtex:pdf>"
-				+ "<bibtex:keywords>peanut,butter,jelly</bibtex:keywords>"
-				+ "<bibtex:entrytype>Inproceedings</bibtex:entrytype>"
-				+ "<bibtex:year>1982</bibtex:year>"
-				+ "<bibtex:month>#jul#</bibtex:month>"
-				+ "<bibtex:abstract>The success of the Linux operating system has demonstrated the viability of an alternative form of software development � open source software � that challenges traditional assumptions about software markets. Understanding what drives open source developers to participate in open source projects is crucial for assessing the impact of open source software. This article identifies two broad types of motivations that account for their participation in open source pro [...]
-	}
-
-	/**
-	 * The PDF file that basically all operations are done upon.
-	 */
-	File pdfFile;
-
-	/**
-	 * Create a temporary PDF-file with a single empty page.
-	 */
-	public void setUp() throws IOException, COSVisitorException {
-
-		pdfFile = File.createTempFile("JabRef", ".pdf");
-
-		PDDocument pdf = null;
-		try {
-			pdf = new PDDocument();
-			pdf.addPage(new PDPage()); // Need page to open in Acrobat
-			pdf.save(pdfFile.getAbsolutePath());
-		} finally {
-			if (pdf != null)
-				pdf.close();
-		}
-
-		// Don't forget to initialize the preferences
-		if (Globals.prefs == null) {
-			Globals.prefs = JabRefPreferences.getInstance();
-		}
-
-		// Store Privacy Settings
-		prefs = JabRefPreferences.getInstance();
-
-		use = prefs.getBoolean("useXmpPrivacyFilter");
-		privacyFilters = prefs.getStringArray("xmpPrivacyFilters");
-
-		// The code assumes privacy filters to be off
-		prefs.putBoolean("useXmpPrivacyFilter", false);
-	}
-
-	JabRefPreferences prefs;
-
-	boolean use;
-
-	String[] privacyFilters;
-
-	/**
-	 * Delete the temporary file.
-	 */
-	public void tearDown() {
-		pdfFile.delete();
-
-		prefs.putBoolean("useXmpPrivacyFilter", use);
-		prefs.putStringArray("xmpPrivacyFilter", privacyFilters);
-	}
-
-	/**
-	 * Most basic test for reading.
-	 * 
-	 * @throws Exception
-	 */
-	public void testReadXMPSimple() throws Exception {
-
-		String bibtex = "<bibtex:year>2003</bibtex:year>\n"
-				+ "<bibtex:title>Beach sand convolution by surf-wave optimzation</bibtex:title>\n"
-				+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
-
-		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
-
-		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-		assertEquals(1, l.size());
-		BibtexEntry e = l.get(0);
-
-		assertNotNull(e);
-		assertEquals("OezbekC06", e.getCiteKey());
-		assertEquals("2003", e.getField("year"));
-		assertEquals("Beach sand convolution by surf-wave optimzation", e
-				.getField("title"));
-		assertEquals(BibtexEntryType.OTHER, e.getType());
-
-	}
-
-	/**
-	 * Is UTF8 handling working? This is because Java by default uses the
-	 * platform encoding or a special UTF-kind.
-	 * 
-	 * @throws Exception
-	 */
-	public void testReadXMPUTF8() throws Exception {
-
-		String bibtex = "<bibtex:year>2003</bibtex:year>\n"
-				+ "<bibtex:title>�pt�mz�t��n</bibtex:title>\n"
-				+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
-
-		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
-
-		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-		assertEquals(1, l.size());
-		BibtexEntry e = l.get(0);
-
-		assertNotNull(e);
-		assertEquals("OezbekC06", e.getCiteKey());
-		assertEquals("2003", e.getField("year"));
-		assertEquals("�pt�mz�t��n", e.getField("title"));
-		assertEquals(BibtexEntryType.OTHER, e.getType());
-	}
-
-	/**
-	 * Make sure that the privacy filter works.
-	 * 
-	 * @throws IOException
-	 *             Should not happen.
-	 * @throws TransformerException
-	 *             Should not happen.
-	 */
-	public void testPrivacyFilter() throws IOException, TransformerException {
-
-		{ // First set:
-			prefs.putBoolean("useXmpPrivacyFilter", true);
-			prefs.putStringArray("xmpPrivacyFilter",
-					new String[] { "author;title;note" });
-
-			BibtexEntry e = t1BibtexEntry();
-
-			XMPUtil.writeXMP(pdfFile, e, null);
-
-			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-			assertEquals(1, l.size());
-			BibtexEntry x = l.get(0);
-
-			Set<String> ts = x.getAllFields();
-
-			assertEquals(8, ts.size());
-
-			ts.contains("bibtextype");
-			ts.contains("bibtexkey");
-			ts.contains("booktitle");
-			ts.contains("year");
-			ts.contains("owner");
-			ts.contains("timestamp");
-			ts.contains("year");
-			ts.contains("url");
-		}
-		{ // First set:
-			prefs.putBoolean("useXmpPrivacyFilter", true);
-			prefs
-					.putStringArray(
-							"xmpPrivacyFilter",
-							new String[] { "author;title;note;booktitle;year;owner;timestamp" });
-
-			BibtexEntry e = t1BibtexEntry();
-
-			XMPUtil.writeXMP(pdfFile, e, null);
-
-			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-			assertEquals(1, l.size());
-			BibtexEntry x = l.get(0);
-			Set<String> ts = x.getAllFields();
-			assertEquals(8, ts.size());
-
-			ts.contains("bibtextype");
-			ts.contains("bibtexkey");
-			ts.contains("year");
-			ts.contains("url");
-		}
-
-	}
-
-	/**
-	 * Are authors and editors correctly read?
-	 * 
-	 * @throws Exception
-	 */
-	public void testReadXMPSeq() throws Exception {
-
-		String bibtex = "<bibtex:author><rdf:Seq>\n"
-				+ "  <rdf:li>Kelly Clarkson</rdf:li>"
-				+ "  <rdf:li>Ozzy Osbourne</rdf:li>"
-				+ "</rdf:Seq></bibtex:author>" + "<bibtex:editor><rdf:Seq>"
-				+ "  <rdf:li>Huey Duck</rdf:li>"
-				+ "  <rdf:li>Dewey Duck</rdf:li>"
-				+ "  <rdf:li>Louie Duck</rdf:li>"
-				+ "</rdf:Seq></bibtex:editor>"
-				+ "<bibtex:bibtexkey>Clarkson06</bibtex:bibtexkey>";
-
-		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
-
-		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-		assertEquals(1, l.size());
-		BibtexEntry e = l.get(0);
-
-		assertNotNull(e);
-		assertEquals("Clarkson06", e.getCiteKey());
-		assertEquals("Kelly Clarkson and Ozzy Osbourne", e.getField("author"));
-		assertEquals("Huey Duck and Dewey Duck and Louie Duck", e
-				.getField("editor"));
-		assertEquals(BibtexEntryType.OTHER, e.getType());
-	}
-
-	/**
-	 * Is the XMPEntryType correctly set?
-	 * 
-	 * @throws Exception
-	 */
-	public void testReadXMPEntryType() throws Exception {
-
-		String bibtex = "<bibtex:entrytype>ARticle</bibtex:entrytype>";
-
-		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
-
-		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-		assertEquals(1, l.size());
-		BibtexEntry e = l.get(0);
-
-		assertNotNull(e);
-		assertEquals(BibtexEntryType.ARTICLE, e.getType());
-	}
-
-	public static String readManually(File tempFile) throws IOException {
-
-		PDDocument document = null;
-
-		try {
-			document = PDDocument.load(tempFile.getAbsoluteFile());
-			if (document.isEncrypted()) {
-				System.err
-						.println("Error: Cannot add metadata to encrypted document.");
-				System.exit(1);
-			}
-			PDDocumentCatalog catalog = document.getDocumentCatalog();
-			PDMetadata meta = catalog.getMetadata();
-
-			if (meta == null) {
-				return null;
-			} else {
-				// PDMetadata.getInputStreamAsString() does not work
-
-				// Convert to UTF8 and make available for metadata.
-				InputStreamReader is = new InputStreamReader(meta
-						.createInputStream(), "UTF8");
-				return slurp(is).trim(); // Trim to kill padding end-newline.
-			}
-		} finally {
-			if (document != null)
-				document.close();
-		}
-	}
-
-	/**
-	 * Test whether the helper function work correctly.
-	 * 
-	 * @throws Exception
-	 */
-	public void testWriteReadManually() throws Exception {
-
-		String bibtex = "<bibtex:year>2003</bibtex:year>\n"
-				+ "<bibtex:title>�pt�mz�t��n</bibtex:title>\n"
-				+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
-
-		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
-		assertEquals(bibtexXPacket(bibtexDescription(bibtex)),
-				readManually(pdfFile));
-
-		bibtex = "<bibtex:author><rdf:Seq>\n"
-				+ "  <rdf:li>Kelly Clarkson</rdf:li>"
-				+ "  <rdf:li>Ozzy Osbourne</rdf:li>"
-				+ "</rdf:Seq></bibtex:author>" + "<bibtex:editor><rdf:Seq>"
-				+ "  <rdf:li>Huey Duck</rdf:li>"
-				+ "  <rdf:li>Dewey Duck</rdf:li>"
-				+ "  <rdf:li>Louie Duck</rdf:li>"
-				+ "</rdf:Seq></bibtex:editor>"
-				+ "<bibtex:bibtexkey>Clarkson06</bibtex:bibtexkey>";
-
-		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
-		assertEquals(bibtexXPacket(bibtexDescription(bibtex)),
-				readManually(pdfFile));
-	}
-
-	/**
-	 * Test that readXMP and writeXMP work together.
-	 * 
-	 * @throws Exception
-	 */
-	public void testReadWriteXMP() throws Exception {
-		ParserResult result = BibtexParser
-				.parse(new StringReader(
-						"@article{canh05,"
-								+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
-								+ "\n"
-								+ "  title = {Effective work practices for floss development: A model and propositions},"
-								+ "\n"
-								+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},"
-								+ "\n"
-								+ "  year = {2005},"
-								+ "\n"
-								+ "  owner = {oezbek},"
-								+ "\n"
-								+ "  timestamp = {2006.05.29},"
-								+ "\n"
-								+ "  url = {http://james.howison.name/publications.html}"
-								+ "\n" + "}"));
-
-		Collection<BibtexEntry> c = result.getDatabase().getEntries();
-		assertEquals(1, c.size());
-
-		BibtexEntry e = c.iterator().next();
-
-		XMPUtil.writeXMP(pdfFile, e, null);
-
-		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-		assertEquals(1, l.size());
-		BibtexEntry x = l.get(0);
-
-		assertEquals(e, x);
-	}
-
-	/**
-	 * Are newlines in the XML processed correctly?
-	 * 
-	 * @throws Exception
-	 */
-	public void testNewlineHandling() throws Exception {
-
-		{
-			String bibtex = "<bibtex:title>\nHallo\nWorld \nthis \n is\n\nnot \n\nan \n\n exercise \n \n.\n \n\n</bibtex:title>\n"
-					+ "<bibtex:tabs>\nHallo\tWorld \tthis \t is\t\tnot \t\tan \t\n exercise \t \n.\t \n\t</bibtex:tabs>\n"
-					+ "<bibtex:abstract>\n\nAbstract preserve\n\t Whitespace\n\n</bibtex:abstract>";
-
-			writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
-
-			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-			assertEquals(1, l.size());
-			BibtexEntry e = l.get(0);
-
-			assertNotNull(e);
-			assertEquals("Hallo World this is not an exercise .", e
-					.getField("title"));
-			assertEquals("Hallo World this is not an exercise .", e
-					.getField("tabs"));
-			assertEquals("\n\nAbstract preserve\n\t Whitespace\n\n", e
-					.getField("abstract"));
-		}
-	}
-
-	/**
-	 * Test whether XMP.readFile can deal with text-properties that are not
-	 * element-nodes, but attribute-nodes
-	 * 
-	 * @throws Exception
-	 */
-	public void testAttributeRead() throws Exception {
-
-		// test 1 has attributes
-		String bibtex = t2XMP();
-
-		writeManually(pdfFile, bibtexXPacket(bibtex));
-
-		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-		assertEquals(1, l.size());
-		BibtexEntry e = l.get(0);
-
-		assertEquals(t2BibtexEntry(), e);
-	}
-
-	public void testEmpty() throws Exception {
-
-		assertEquals(null, XMPUtil.readXMP(pdfFile));
-
-	}
-
-	/**
-	 * Tests whether writing BibTex.xmp will preserve existing XMP-descriptions.
-	 * 
-	 * @throws Exception
-	 *             (indicating an failure)
-	 */
-	public void testSimpleUpdate() throws Exception {
-
-		String s = " <rdf:Description rdf:about=''"
-				+ "  xmlns:xmp='http://ns.adobe.com/xap/1.0/'>"
-				+ "  <xmp:CreatorTool>Acrobat PDFMaker 7.0.7</xmp:CreatorTool>"
-				+ "  <xmp:ModifyDate>2006-08-07T18:50:24+02:00</xmp:ModifyDate>"
-				+ "  <xmp:CreateDate>2006-08-07T14:44:24+02:00</xmp:CreateDate>"
-				+ "  <xmp:MetadataDate>2006-08-07T18:50:24+02:00</xmp:MetadataDate>"
-				+ " </rdf:Description>"
-				+ ""
-				+ " <rdf:Description rdf:about=''"
-				+ "  xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'>"
-				+ "  <xapMM:DocumentID>uuid:843cd67d-495e-4c1e-a4cd-64178f6b3299</xapMM:DocumentID>"
-				+ "  <xapMM:InstanceID>uuid:1e56b4c0-6782-440d-ba76-d2b3d87547d1</xapMM:InstanceID>"
-				+ "  <xapMM:VersionID>" + "   <rdf:Seq>"
-				+ "    <rdf:li>17</rdf:li>" + "   </rdf:Seq>"
-				+ "  </xapMM:VersionID>" + " </rdf:Description>" + ""
-				+ " <rdf:Description rdf:about=''"
-				+ "  xmlns:dc='http://purl.org/dc/elements/1.1/'>"
-				+ "  <dc:format>application/pdf</dc:format>"
-				+ "</rdf:Description>";
-
-		writeManually(pdfFile, bibtexXPacket(s));
-
-		// Nothing there yet, but should not crash
-		assertNull(XMPUtil.readXMP(pdfFile));
-
-		s = " <rdf:Description rdf:about=''"
-				+ "  xmlns:xmp='http://ns.adobe.com/xap/1.0/'>"
-				+ "  <xmp:CreatorTool>Acrobat PDFMaker 7.0.7</xmp:CreatorTool>"
-				+ "  <xmp:ModifyDate>2006-08-07T18:50:24+02:00</xmp:ModifyDate>"
-				+ "  <xmp:CreateDate>2006-08-07T14:44:24+02:00</xmp:CreateDate>"
-				+ "  <xmp:MetadataDate>2006-08-07T18:50:24+02:00</xmp:MetadataDate>"
-				+ " </rdf:Description>"
-				+ ""
-				+ " <rdf:Description rdf:about=''"
-				+ "  xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'>"
-				+ "  <xapMM:DocumentID>uuid:843cd67d-495e-4c1e-a4cd-64178f6b3299</xapMM:DocumentID>"
-				+ "  <xapMM:InstanceID>uuid:1e56b4c0-6782-440d-ba76-d2b3d87547d1</xapMM:InstanceID>"
-				+ "  <xapMM:VersionID>" + "   <rdf:Seq>"
-				+ "    <rdf:li>17</rdf:li>" + "   </rdf:Seq>"
-				+ "  </xapMM:VersionID>" + " </rdf:Description>" + ""
-				+ " <rdf:Description rdf:about=''"
-				+ "  xmlns:dc='http://purl.org/dc/elements/1.1/'>"
-				+ "  <dc:format>application/pdf</dc:format>" + "  <dc:title>"
-				+ "   <rdf:Alt>"
-				+ "    <rdf:li xml:lang='x-default'>Questionnaire.pdf</rdf:li>"
-				+ "   </rdf:Alt>" + "  </dc:title>" + "" + "</rdf:Description>";
-
-		writeManually(pdfFile, bibtexXPacket(s));
-
-		// Title is Questionnaire.pdf so the DublinCore fallback should hit
-		// in...
-		assertEquals(1, XMPUtil.readXMP(pdfFile).size());
-
-		{
-			// Now write new packet and check if it was correctly written
-			XMPUtil.writeXMP(pdfFile, t1BibtexEntry(), null);
-
-			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-			assertEquals(1, l.size());
-			BibtexEntry e = l.get(0);
-
-			assertEquals(t1BibtexEntry(), e);
-
-			// This is what we really want to test: Is the rest of the
-			// descriptions still there?
-
-			PDDocument document = null;
-			try {
-				document = PDDocument.load(pdfFile.getAbsoluteFile());
-				if (document.isEncrypted()) {
-					throw new IOException(
-							"Error: Cannot read metadata from encrypted document.");
-				}
-				PDDocumentCatalog catalog = document.getDocumentCatalog();
-				PDMetadata metaRaw = catalog.getMetadata();
-
-				XMPMetadata meta;
-				if (metaRaw != null) {
-					meta = new XMPMetadata(XMLUtil.parse(metaRaw
-							.createInputStream()));
-				} else {
-					meta = new XMPMetadata();
-				}
-				meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
-						XMPSchemaBibtex.class);
-
-				List<XMPSchema> schemas = meta.getSchemas();
-
-				assertEquals(4, schemas.size());
-
-				schemas = meta
-						.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
-				assertEquals(1, schemas.size());
-
-				schemas = meta
-						.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
-				assertEquals(1, schemas.size());
-				XMPSchemaDublinCore dc = (XMPSchemaDublinCore) schemas.get(0);
-				assertEquals("application/pdf", dc.getFormat());
-
-				schemas = meta
-						.getSchemasByNamespaceURI(XMPSchemaBasic.NAMESPACE);
-				assertEquals(1, schemas.size());
-				XMPSchemaBasic bs = (XMPSchemaBasic) schemas.get(0);
-				assertEquals("Acrobat PDFMaker 7.0.7", bs.getCreatorTool());
-
-				Calendar c = Calendar.getInstance();
-				c.clear();
-				c.set(Calendar.YEAR, 2006);
-				c.set(Calendar.MONTH, Calendar.AUGUST);
-				c.set(Calendar.DATE, 7);
-				c.set(Calendar.HOUR, 14);
-				c.set(Calendar.MINUTE, 44);
-				c.set(Calendar.SECOND, 24);
-				c.setTimeZone(TimeZone.getTimeZone("GMT+2"));
-
-				Calendar other = bs.getCreateDate();
-
-				assertEquals(c.get(Calendar.YEAR), other.get(Calendar.YEAR));
-				assertEquals(c.get(Calendar.MONTH), other.get(Calendar.MONTH));
-				assertEquals(c.get(Calendar.DATE), other.get(Calendar.DATE));
-				assertEquals(c.get(Calendar.HOUR), other.get(Calendar.HOUR));
-				assertEquals(c.get(Calendar.MINUTE), other.get(Calendar.MINUTE));
-				assertEquals(c.get(Calendar.SECOND), other.get(Calendar.SECOND));
-				assertTrue(c.getTimeZone().hasSameRules(other.getTimeZone()));
-
-				schemas = meta
-						.getSchemasByNamespaceURI(XMPSchemaMediaManagement.NAMESPACE);
-				assertEquals(1, schemas.size());
-				XMPSchemaMediaManagement mm = (XMPSchemaMediaManagement) schemas
-						.get(0);
-				assertEquals("17", mm.getSequenceList("xapMM:VersionID").get(0));
-
-			} finally {
-				if (document != null) {
-					document.close();
-				}
-			}
-		}
-
-		{ // Now alter the Bibtex entry, write it and do all the checks again
-			BibtexEntry toSet = t1BibtexEntry();
-			toSet.setField("author", "Pokemon!");
-
-			XMPUtil.writeXMP(pdfFile, toSet, null);
-
-			List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-			assertEquals(1, l.size());
-			BibtexEntry e = (BibtexEntry) l.get(0);
-
-			assertEquals(toSet, e);
-
-			// This is what we really want to test: Is the rest of the
-			// descriptions still there?
-
-			PDDocument document = null;
-			try {
-				document = PDDocument.load(pdfFile.getAbsoluteFile());
-				if (document.isEncrypted()) {
-					throw new IOException(
-							"Error: Cannot read metadata from encrypted document.");
-				}
-				PDDocumentCatalog catalog = document.getDocumentCatalog();
-				PDMetadata metaRaw = catalog.getMetadata();
-
-				XMPMetadata meta;
-				if (metaRaw != null) {
-					meta = new XMPMetadata(XMLUtil.parse(metaRaw
-							.createInputStream()));
-				} else {
-					meta = new XMPMetadata();
-				}
-				meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
-						XMPSchemaBibtex.class);
-
-				List schemas = meta.getSchemas();
-
-				assertEquals(4, schemas.size());
-
-				schemas = meta
-						.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
-				assertEquals(1, schemas.size());
-
-				schemas = meta
-						.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
-				assertEquals(1, schemas.size());
-				XMPSchemaDublinCore dc = (XMPSchemaDublinCore) schemas.get(0);
-				assertEquals("application/pdf", dc.getFormat());
-
-				schemas = meta
-						.getSchemasByNamespaceURI(XMPSchemaBasic.NAMESPACE);
-				assertEquals(1, schemas.size());
-				XMPSchemaBasic bs = (XMPSchemaBasic) schemas.get(0);
-				assertEquals("Acrobat PDFMaker 7.0.7", bs.getCreatorTool());
-
-				Calendar c = Calendar.getInstance();
-				c.clear();
-				c.set(Calendar.YEAR, 2006);
-				c.set(Calendar.MONTH, 7);
-				c.set(Calendar.DATE, 7);
-				c.set(Calendar.HOUR, 14);
-				c.set(Calendar.MINUTE, 44);
-				c.set(Calendar.SECOND, 24);
-				c.setTimeZone(TimeZone.getTimeZone("GMT+2"));
-
-				Calendar other = bs.getCreateDate();
-
-				assertEquals(c.get(Calendar.YEAR), other.get(Calendar.YEAR));
-				assertEquals(c.get(Calendar.MONTH), other.get(Calendar.MONTH));
-				assertEquals(c.get(Calendar.DATE), other.get(Calendar.DATE));
-				assertEquals(c.get(Calendar.HOUR), other.get(Calendar.HOUR));
-				assertEquals(c.get(Calendar.MINUTE), other.get(Calendar.MINUTE));
-				assertEquals(c.get(Calendar.SECOND), other.get(Calendar.SECOND));
-				assertTrue(c.getTimeZone().hasSameRules(other.getTimeZone()));
-
-				schemas = meta
-						.getSchemasByNamespaceURI(XMPSchemaMediaManagement.NAMESPACE);
-				assertEquals(1, schemas.size());
-				XMPSchemaMediaManagement mm = (XMPSchemaMediaManagement) schemas
-						.get(0);
-				assertEquals("17", mm.getSequenceList("xapMM:VersionID").get(0));
-
-			} finally {
-				if (document != null) {
-					document.close();
-				}
-			}
-		}
-	}
-
-	/**
-	 * Is XML in text properties properly escaped?
-	 * 
-	 * @throws Exception
-	 * 
-	 */
-	public void testXMLEscape() throws Exception {
-		ParserResult result = BibtexParser
-				.parse(new StringReader(
-						"@article{canh05,"
-								+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
-								+ "\n"
-								+ "  title = {</bibtex:title> \" bla \" '' '' && &  for floss development: A model and propositions},"
-								+ "\n"
-								+ "  booktitle = {<randomXML>},"
-								+ "\n"
-								+ "  year = {2005},"
-								+ "\n"
-								+ "  owner = {oezbek},"
-								+ "\n"
-								+ "  timestamp = {2006.05.29},"
-								+ "\n"
-								+ "  url = {http://james.howison.name/publications.html}"
-								+ "\n" + "}"));
-
-		Collection<BibtexEntry> c = result.getDatabase().getEntries();
-		assertEquals(1, c.size());
-
-		BibtexEntry e = c.iterator().next();
-
-		XMPUtil.writeXMP(pdfFile, e, null);
-
-		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-		assertEquals(1, l.size());
-		BibtexEntry x = l.get(0);
-
-		assertEquals(e, x);
-	}
-
-	public void assertEquals(BibtexEntry expected, BibtexEntry actual) {
-		assertEquals(expected.getCiteKey(), actual.getCiteKey());
-		assertEquals(expected.getType(), actual.getType());
-
-		for (String field : expected.getAllFields()){
-		
-			if (field.toString().toLowerCase().equals("author")
-					|| field.toString().toLowerCase().equals("editor")) {
-
-				AuthorList expectedAuthors = AuthorList.getAuthorList(expected
-						.getField(field.toString()).toString());
-				AuthorList actualAuthors = AuthorList.getAuthorList(actual
-						.getField(field.toString()).toString());
-				assertEquals(expectedAuthors, actualAuthors);
-			} else {
-				assertEquals(
-						"" + field.toString(),
-						expected.getField(field.toString()).toString(), actual
-								.getField(field.toString()).toString());
-			}
-		}
-
-		assertEquals(expected.getAllFields().size(),
-				actual.getAllFields().size());
-	}
-
-	/**
-	 * 
-	 * @depends XMPUtilTest.testReadMultiple()
-	 */
-	public void testXMPreadString() throws Exception {
-
-		ParserResult result = BibtexParser.parse(new StringReader(
-				"@article{canh05,"
-						+ "  author = {Crowston, K. and Annabi, H.},\n"
-						+ "  title = {Title A}}\n" + "@inProceedings{foo,"
-						+ "  author={Norton Bar}}"));
-
-		Collection<BibtexEntry> c = result.getDatabase().getEntries();
-		assertEquals(2, c.size());
-
-		String xmp = XMPUtil.toXMP(c, null);
-
-		/* Test minimal syntaxical completeness */
-		assertTrue(0 < xmp.indexOf("xpacket"));
-		assertTrue(0 < xmp.indexOf("adobe:ns:meta"));
-		assertTrue(0 < xmp
-				.indexOf("<bibtex:bibtexkey>canh05</bibtex:bibtexkey>")
-				|| 0 < xmp.indexOf("bibtex:bibtexkey="));
-		assertTrue(0 < xmp.indexOf("<rdf:li>Norton Bar</rdf:li>"));
-		assertTrue(0 < xmp.indexOf("id='W5M0MpCehiHzreSzNTczkc9d'?>")
-				|| 0 < xmp.indexOf("id=\"W5M0MpCehiHzreSzNTczkc9d\"?>"));
-		assertTrue(0 < xmp
-				.indexOf("xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'")
-				|| 0 < xmp
-						.indexOf("xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\""));
-		assertTrue(0 < xmp.indexOf("<rdf:Description"));
-		assertTrue(0 < xmp.indexOf("<?xpacket end='w'?>")
-				|| 0 < xmp.indexOf("<?xpacket end=\"w\"?>"));
-
-		/* Test contents of string */
-		writeManually(pdfFile, xmp);
-
-		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
-
-		assertEquals(2, l.size());
-
-		BibtexEntry a = l.get(0);
-		BibtexEntry b = l.get(1);
-
-		if (a.getCiteKey().equals("foo")) {
-			BibtexEntry tmp = a;
-			a = b;
-			b = tmp;
-		}
-
-		assertEquals("canh05", a.getCiteKey());
-		assertEquals("K. Crowston and H. Annabi", a.getField("author"));
-		assertEquals("Title A", a.getField("title"));
-		assertEquals(BibtexEntryType.ARTICLE, a.getType());
-
-		assertEquals("foo", b.getCiteKey());
-		assertEquals("Norton Bar", b.getField("author"));
-		assertEquals(BibtexEntryType.INPROCEEDINGS, b.getType());
-	}
-
-	/**
-	 * Tests whether it is possible to read several BibtexEntries
-	 * 
-	 * @throws Exception
-	 * 
-	 */
-	public void testReadMultiple() throws Exception {
-
-		String bibtex = t2XMP() + t3XMP();
-		writeManually(pdfFile, bibtexXPacket(bibtex));
-
-		// Read from file
-		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
-
-		assertEquals(2, l.size());
-
-		BibtexEntry a = l.get(0);
-		BibtexEntry b = l.get(1);
-
-		if (a.getCiteKey().equals("Clarkson06")) {
-			BibtexEntry tmp = a;
-			a = b;
-			b = tmp;
-		}
-
-		assertEquals(t2BibtexEntry(), a);
-		assertEquals(t3BibtexEntry(), b);
-	}
-
-	/**
-	 * Tests whether it is possible to write several Bibtexentries
-	 * 
-	 * @throws TransformerException
-	 * @throws IOException
-	 * 
-	 */
-	public void testWriteMultiple() throws IOException, TransformerException {
-		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
-		l.add(t2BibtexEntry());
-		l.add(t3BibtexEntry());
-
-		XMPUtil.writeXMP(pdfFile, l, null, false);
-
-		l = XMPUtil.readXMP(pdfFile);
-
-		assertEquals(2, l.size());
-
-		BibtexEntry a = l.get(0);
-		BibtexEntry b = l.get(1);
-
-		if (a.getCiteKey().equals("Clarkson06")) {
-			BibtexEntry tmp = a;
-			a = b;
-			b = tmp;
-		}
-
-		assertEquals(t2BibtexEntry(), a);
-		assertEquals(t3BibtexEntry(), b);
-	}
-
-	public void testReadWriteDC() throws IOException, TransformerException {
-		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
-		l.add(t3BibtexEntry());
-
-		XMPUtil.writeXMP(pdfFile, l, null, true);
-
-		PDDocument document = PDDocument.load(pdfFile.getAbsoluteFile());
-		try {
-			if (document.isEncrypted()) {
-				System.err
-						.println("Error: Cannot add metadata to encrypted document.");
-				System.exit(1);
-			}
-
-			assertEquals("Kelly Clarkson and Ozzy Osbourne", document
-					.getDocumentInformation().getAuthor());
-			assertEquals("Hypersonic ultra-sound", document
-					.getDocumentInformation().getTitle());
-			assertEquals("Huey Duck and Dewey Duck and Louie Duck", document
-					.getDocumentInformation().getCustomMetadataValue(
-							"bibtex/editor"));
-			assertEquals("Clarkson06", document.getDocumentInformation()
-					.getCustomMetadataValue("bibtex/bibtexkey"));
-			assertEquals("peanut,butter,jelly", document
-					.getDocumentInformation().getKeywords());
-
-			assertEquals(t3BibtexEntry(), XMPUtil
-					.getBibtexEntryFromDocumentInformation(document
-							.getDocumentInformation()));
-
-			PDDocumentCatalog catalog = document.getDocumentCatalog();
-			PDMetadata metaRaw = catalog.getMetadata();
-
-			if (metaRaw == null) {
-				fail();
-				return;
-			}
-
-			XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw
-					.createInputStream()));
-			meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
-					XMPSchemaBibtex.class);
-
-			// Check Dublin Core
-			List<XMPSchema> schemas = meta
-					.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
-			assertEquals(1, schemas.size());
-
-			XMPSchemaDublinCore dcSchema = (XMPSchemaDublinCore) schemas
-					.iterator().next();
-			assertNotNull(dcSchema);
-
-			assertEquals("Hypersonic ultra-sound", dcSchema.getTitle());
-			assertEquals("1982-07", dcSchema.getSequenceList("dc:date").get(0));
-			assertEquals("Kelly Clarkson", dcSchema.getCreators().get(0));
-			assertEquals("Ozzy Osbourne", dcSchema.getCreators().get(1));
-			assertEquals("Huey Duck", dcSchema.getContributors().get(0));
-			assertEquals("Dewey Duck", dcSchema.getContributors().get(1));
-			assertEquals("Louie Duck", dcSchema.getContributors().get(2));
-			assertEquals("Inproceedings", dcSchema.getTypes().get(0));
-			assertEquals("bibtex/bibtexkey/Clarkson06", dcSchema
-					.getRelationships().get(0));
-			assertEquals("peanut", dcSchema.getSubjects().get(0));
-			assertEquals("butter", dcSchema.getSubjects().get(1));
-			assertEquals("jelly", dcSchema.getSubjects().get(2));
-
-			/**
-			 * Bibtexkey, Journal, pdf, booktitle
-			 */
-			assertEquals(4, dcSchema.getRelationships().size());
-
-			assertEquals(t3BibtexEntry(), XMPUtil
-					.getBibtexEntryFromDublinCore(dcSchema));
-
-		} finally {
-			document.close();
-		}
-
-	}
-
-	public void testWriteSingleUpdatesDCAndInfo() throws IOException,
-			TransformerException {
-		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
-		l.add(t3BibtexEntry());
-
-		XMPUtil.writeXMP(pdfFile, l, null, true);
-
-		PDDocument document = PDDocument.load(pdfFile.getAbsoluteFile());
-		try {
-			if (document.isEncrypted()) {
-				System.err
-						.println("Error: Cannot add metadata to encrypted document.");
-				System.exit(1);
-			}
-
-			assertEquals("Kelly Clarkson and Ozzy Osbourne", document
-					.getDocumentInformation().getAuthor());
-			assertEquals("Hypersonic ultra-sound", document
-					.getDocumentInformation().getTitle());
-			assertEquals("Huey Duck and Dewey Duck and Louie Duck", document
-					.getDocumentInformation().getCustomMetadataValue(
-							"bibtex/editor"));
-			assertEquals("Clarkson06", document.getDocumentInformation()
-					.getCustomMetadataValue("bibtex/bibtexkey"));
-			assertEquals("peanut,butter,jelly", document
-					.getDocumentInformation().getKeywords());
-
-			assertEquals(t3BibtexEntry(), XMPUtil
-					.getBibtexEntryFromDocumentInformation(document
-							.getDocumentInformation()));
-
-			PDDocumentCatalog catalog = document.getDocumentCatalog();
-			PDMetadata metaRaw = catalog.getMetadata();
-
-			if (metaRaw == null) {
-				fail();
-			}
-
-			XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw
-					.createInputStream()));
-			meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
-					XMPSchemaBibtex.class);
-
-			// Check Dublin Core
-			List<XMPSchema> schemas = meta
-					.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
-
-			assertEquals(1, schemas.size());
-
-			XMPSchemaDublinCore dcSchema = (XMPSchemaDublinCore) schemas
-					.iterator().next();
-			assertNotNull(dcSchema);
-
-			assertEquals("Hypersonic ultra-sound", dcSchema.getTitle());
-			assertEquals("1982-07", dcSchema.getSequenceList("dc:date").get(0));
-			assertEquals("Kelly Clarkson", dcSchema.getCreators().get(0));
-			assertEquals("Ozzy Osbourne", dcSchema.getCreators().get(1));
-			assertEquals("Huey Duck", dcSchema.getContributors().get(0));
-			assertEquals("Dewey Duck", dcSchema.getContributors().get(1));
-			assertEquals("Louie Duck", dcSchema.getContributors().get(2));
-			assertEquals("Inproceedings", dcSchema.getTypes().get(0));
-			assertEquals("bibtex/bibtexkey/Clarkson06", dcSchema
-					.getRelationships().get(0));
-			assertEquals("peanut", dcSchema.getSubjects().get(0));
-			assertEquals("butter", dcSchema.getSubjects().get(1));
-			assertEquals("jelly", dcSchema.getSubjects().get(2));
-
-			/**
-			 * Bibtexkey, Journal, pdf, booktitle
-			 */
-			assertEquals(4, dcSchema.getRelationships().size());
-
-			assertEquals(t3BibtexEntry(), XMPUtil
-					.getBibtexEntryFromDublinCore(dcSchema));
-
-		} finally {
-			document.close();
-		}
-
-	}
-
-	public void testReadRawXMP() throws Exception {
-
-		ParserResult result = BibtexParser
-				.parse(new StringReader(
-						"@article{canh05,"
-								+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},\n"
-								+ "  title = {Effective work practices for floss development: A model and propositions},\n"
-								+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},\n"
-								+ "  year = {2005},\n"
-								+ "  owner = {oezbek},\n"
-								+ "  timestamp = {2006.05.29},\n"
-								+ "  url = {http://james.howison.name/publications.html}}"));
-
-		Collection c = result.getDatabase().getEntries();
-		assertEquals(1, c.size());
-
-		BibtexEntry e = (BibtexEntry) c.iterator().next();
-
-		XMPUtil.writeXMP(pdfFile, e, null);
-
-		XMPMetadata metadata = XMPUtil.readRawXMP(pdfFile);
-
-		List<XMPSchema> schemas = metadata.getSchemas();
-		assertEquals(2, schemas.size());
-		schemas = metadata.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
-		assertEquals(1, schemas.size());
-		XMPSchemaBibtex bib = (XMPSchemaBibtex) schemas.get(0);
-
-		List<String> authors = bib.getSequenceList("author");
-		assertEquals(4, authors.size());
-		assertEquals("K. Crowston", authors.get(0));
-		assertEquals("H. Annabi", authors.get(1));
-		assertEquals("J. Howison", authors.get(2));
-		assertEquals("C. Masango", authors.get(3));
-
-		assertEquals("Article", bib.getTextProperty("entrytype"));
-		assertEquals(
-				"Effective work practices for floss development: A model and propositions",
-				bib.getTextProperty("title"));
-		assertEquals(
-				"Hawaii International Conference On System Sciences (HICSS)",
-				bib.getTextProperty("booktitle"));
-		assertEquals("2005", bib.getTextProperty("year"));
-		assertEquals("oezbek", bib.getTextProperty("owner"));
-		assertEquals("http://james.howison.name/publications.html", bib
-				.getTextProperty("url"));
-
-	}
-
-	/**
-	 * Test whether the command-line client works correctly with writing a
-	 * single entry
-	 * 
-	 * @throws Exception
-	 * 
-	 */
-	public void testCommandLineSingleBib() throws Exception {
-
-		// First check conversion from .bib to .xmp
-		File tempBib = File.createTempFile("JabRef", ".bib");
-		FileWriter fileWriter = null;
-		try {
-			fileWriter = new FileWriter(tempBib);
-			fileWriter.write(t1BibtexString());
-			fileWriter.close();
-
-			ByteArrayOutputStream s = new ByteArrayOutputStream();
-			PrintStream oldOut = System.out;
-			System.setOut(new PrintStream(s));
-			XMPUtil.main(new String[] { tempBib.getAbsolutePath() });
-			System.setOut(oldOut);
-			s.close();
-			String xmp = s.toString();
-
-			writeManually(pdfFile, xmp);
-
-			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
-			assertEquals(1, l.size());
-			assertEquals(t1BibtexEntry(), l.get(0));
-
-		} finally {
-			if (fileWriter != null)
-				fileWriter.close();
-			if (tempBib != null)
-				tempBib.delete();
-		}
-	}
-
-	/**
-	 * 
-	 * 
-	 * @depends XMPUtil.writeXMP
-	 * 
-	 */
-	public void testCommandLineSinglePdf() throws Exception {
-		{
-			// Write XMP to file
-
-			BibtexEntry e = t1BibtexEntry();
-
-			XMPUtil.writeXMP(pdfFile, e, null);
-
-			ByteArrayOutputStream s = new ByteArrayOutputStream();
-			PrintStream oldOut = System.out;
-			System.setOut(new PrintStream(s));
-			XMPUtil.main(new String[] { pdfFile.getAbsolutePath() });
-			System.setOut(oldOut);
-			s.close();
-			String bibtex = s.toString();
-
-			ParserResult result = BibtexParser.parse(new StringReader(bibtex));
-			Collection<BibtexEntry> c = result.getDatabase().getEntries();
-			assertEquals(1, c.size());
-			BibtexEntry x = c.iterator().next();
-
-			assertEquals(e, x);
-		}
-		{
-			// Write XMP to file
-			BibtexEntry e = t1BibtexEntry();
-
-			XMPUtil.writeXMP(pdfFile, e, null);
-
-			ByteArrayOutputStream s = new ByteArrayOutputStream();
-			PrintStream oldOut = System.out;
-			System.setOut(new PrintStream(s));
-			XMPUtil.main(new String[] { "-x", pdfFile.getAbsolutePath() });
-			System.setOut(oldOut);
-			s.close();
-			String xmp = s.toString();
-
-			/* Test minimal syntaxical completeness */
-			assertTrue(0 < xmp.indexOf("xpacket"));
-			assertTrue(0 < xmp.indexOf("adobe:ns:meta"));
-			assertTrue(0 < xmp
-					.indexOf("<bibtex:bibtexkey>canh05</bibtex:bibtexkey>")
-					|| 0 < xmp.indexOf("bibtex:bibtexkey="));
-			assertTrue(0 < xmp.indexOf("<rdf:li>K. Crowston</rdf:li>"));
-			assertTrue(0 < xmp.indexOf("id='W5M0MpCehiHzreSzNTczkc9d'?>")
-					|| 0 < xmp.indexOf("id=\"W5M0MpCehiHzreSzNTczkc9d\"?>"));
-			assertTrue(0 < xmp
-					.indexOf("xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'")
-					|| 0 < xmp
-							.indexOf("xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\""));
-			assertTrue(0 < xmp.indexOf("<rdf:Description"));
-			assertTrue(0 < xmp.indexOf("<?xpacket end='w'?>")
-					|| 0 < xmp.indexOf("<?xpacket end=\"w\"?>"));
-
-			/* Test contents of string */
-			writeManually(pdfFile, xmp);
-			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
-			assertEquals(1, l.size());
-
-			assertEquals(t1BibtexEntry(), l.get(0));
-		}
-	}
-
-	/**
-	 * Test whether the command-line client can pick one of several entries from
-	 * a bibtex file
-	 * 
-	 * @throws Exception
-	 * 
-	 */
-	public void testCommandLineByKey() throws Exception {
-
-		File tempBib = File.createTempFile("JabRef", ".bib");
-		FileWriter fileWriter = null;
-		try {
-			fileWriter = new FileWriter(tempBib);
-			fileWriter.write(t1BibtexString());
-			fileWriter.write(t2BibtexString());
-			fileWriter.close();
-
-			{ // First try canh05
-				ByteArrayOutputStream s = new ByteArrayOutputStream();
-				PrintStream oldOut = System.out;
-				System.setOut(new PrintStream(s));
-				XMPUtil.main(new String[] { "canh05",
-						tempBib.getAbsolutePath(), pdfFile.getAbsolutePath() });
-				System.setOut(oldOut);
-				s.close();
-
-				// PDF should be annotated:
-				List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
-				assertEquals(1, l.size());
-				assertEquals(t1BibtexEntry(), l.get(0));
-			}
-			{ // Now try OezbekC06
-				ByteArrayOutputStream s = new ByteArrayOutputStream();
-				PrintStream oldOut = System.out;
-				System.setOut(new PrintStream(s));
-				XMPUtil.main(new String[] { "OezbekC06",
-						tempBib.getAbsolutePath(), pdfFile.getAbsolutePath() });
-				System.setOut(oldOut);
-				s.close();
-				// PDF should be annotated:
-				List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
-				assertEquals(1, l.size());
-				assertEquals(t2BibtexEntry(), l.get(0));
-			}
-		} finally {
-			if (fileWriter != null)
-				fileWriter.close();
-
-			if (tempBib != null)
-				tempBib.delete();
-		}
-	}
-
-	/**
-	 * Test whether the command-line client can deal with several bibtex
-	 * entries.
-	 * 
-	 */
-	public void testCommandLineSeveral() throws Exception {
-
-		File tempBib = File.createTempFile("JabRef", ".bib");
-		FileWriter fileWriter = null;
-		try {
-			fileWriter = new FileWriter(tempBib);
-			fileWriter.write(t1BibtexString());
-			fileWriter.write(t3BibtexString());
-			fileWriter.close();
-
-			ByteArrayOutputStream s = new ByteArrayOutputStream();
-			PrintStream oldOut = System.out;
-			System.setOut(new PrintStream(s));
-			XMPUtil.main(new String[] { tempBib.getAbsolutePath(),
-					pdfFile.getAbsolutePath() });
-			System.setOut(oldOut);
-			s.close();
-
-			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
-
-			assertEquals(2, l.size());
-
-			BibtexEntry a = l.get(0);
-			BibtexEntry b = l.get(1);
-
-			if (a.getCiteKey().equals("Clarkson06")) {
-				BibtexEntry tmp = a;
-				a = b;
-				b = tmp;
-			}
-
-			BibtexEntry t1 = t1BibtexEntry();
-			BibtexEntry t3 = t3BibtexEntry();
-
-			// Writing and reading will resolve strings!
-			t3.setField("month", "July");
-
-			assertEquals(t1, a);
-			assertEquals(t3, b);
-
-		} finally {
-			if (fileWriter != null)
-				fileWriter.close();
-
-			if (tempBib != null)
-				tempBib.delete();
-		}
-	}
-
-	/**
-	 * Test that readXMP and writeXMP work together.
-	 * 
-	 * @throws Exception
-	 */
-	public void testResolveStrings() throws Exception {
-		ParserResult original = BibtexParser
-				.parse(new StringReader(
-						"@string{ crow = \"Crowston, K.\"}\n"
-								+ "@string{ anna = \"Annabi, H.\"}\n"
-								+ "@string{ howi = \"Howison, J.\"}\n"
-								+ "@string{ masa = \"Masango, C.\"}\n"
-								+ "@article{canh05,"
-								+ "  author = {#crow# and #anna# and #howi# and #masa#},"
-								+ "\n"
-								+ "  title = {Effective work practices for floss development: A model and propositions},"
-								+ "\n"
-								+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},"
-								+ "\n"
-								+ "  year = {2005},"
-								+ "\n"
-								+ "  owner = {oezbek},"
-								+ "\n"
-								+ "  timestamp = {2006.05.29},"
-								+ "\n"
-								+ "  url = {http://james.howison.name/publications.html}"
-								+ "\n" + "}"));
-
-		Collection<BibtexEntry> c = original.getDatabase().getEntries();
-		assertEquals(1, c.size());
-
-		BibtexEntry e = c.iterator().next();
-
-		XMPUtil.writeXMP(pdfFile, e, original.getDatabase());
-
-		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
-		assertEquals(1, l.size());
-		BibtexEntry x = l.get(0);
-
-		assertEquals(
-				AuthorList
-						.getAuthorList("Crowston, K. and Annabi, H. and Howison, J. and Masango, C."),
-				AuthorList.getAuthorList(x.getField("author").toString()));
-	}
-
-	/**
-	 * Test that we cannot use encrypted PDFs.
-	 */
-	public void testEncryption() throws Exception {
-
-		// // PDF was created using:
-		//
-		// PDDocument pdf = null;
-		// try {
-		// pdf = new PDDocument();
-		// pdf.addPage(new PDPage()); // Need page to open in Acrobat
-		// pdf.encrypt("hello", "world");
-		// pdf.save("d:/download/encrypted.pdf");
-		// } finally {
-		// if (pdf != null)
-		// pdf.close();
-		// }
-		//			
-
-		try {
-			XMPUtil.readXMP("src/tests/encrypted.pdf");
-			fail();
-		} catch (EncryptionNotSupportedException e) {
-		}
-
-		try {
-			XMPUtil.writeXMP("src/tests/encrypted.pdf", t1BibtexEntry(), null);
-			fail();
-		} catch (EncryptionNotSupportedException e) {
-		}
-	}
-
-	/**
-	 * A better testcase for resolveStrings. Makes sure that also the document
-	 * information and dublin core are written correctly.
-	 * 
-	 * Data was contributed by Philip K.F. H�lzenspies (p.k.f.holzenspies [at] utwente.nl).
-	 * 
-	 * @throws IOException
-	 * @throws FileNotFoundException
-	 * @throws TransformerException
-	 * 
-	 */
-	public void testResolveStrings2() throws FileNotFoundException,
-			IOException, TransformerException {
-
-		ParserResult result = BibtexParser.parse(new FileReader(
-				"src/tests/net/sf/jabref/util/twente.bib"));
-
-		assertEquals("Arvind", result.getDatabase().resolveForStrings(
-				"#Arvind#"));
-
-		AuthorList originalAuthors = AuthorList
-				.getAuthorList("Patterson, David and Arvind and Asanov\\'\\i{}c, Krste and Chiou, Derek and Hoe, James and Kozyrakis, Christos and Lu, S{hih-Lien} and Oskin, Mark and Rabaey, Jan and Wawrzynek, John");
-
-		try {
-			XMPUtil.writeXMP(pdfFile, result.getDatabase().getEntryByKey(
-					"Patterson06"), result.getDatabase());
-
-			// Test whether we the main function can load the bibtex correctly
-			BibtexEntry b = XMPUtil.readXMP(pdfFile).get(0);
-
-			assertEquals(originalAuthors, AuthorList.getAuthorList(b.getField(
-					"author").toString()));
-
-			// Next check from Document Information
-			PDDocument document = PDDocument.load(pdfFile.getAbsoluteFile());
-			try {
-
-				assertEquals(originalAuthors, AuthorList.getAuthorList(document
-						.getDocumentInformation().getAuthor()));
-
-				b = XMPUtil.getBibtexEntryFromDocumentInformation(document
-						.getDocumentInformation());
-				assertEquals(originalAuthors, AuthorList.getAuthorList(b
-						.getField("author").toString()));
-
-				// Now check from Dublin Core
-				PDDocumentCatalog catalog = document.getDocumentCatalog();
-				PDMetadata metaRaw = catalog.getMetadata();
-
-				if (metaRaw == null) {
-					fail();
-				}
-
-				XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw
-						.createInputStream()));
-				meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
-						XMPSchemaBibtex.class);
-
-				List<XMPSchema> schemas = meta
-						.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
-
-				assertEquals(1, schemas.size());
-
-				XMPSchemaDublinCore dcSchema = (XMPSchemaDublinCore) schemas
-						.iterator().next();
-				assertNotNull(dcSchema);
-
-				assertEquals("David Patterson", dcSchema.getCreators().get(0));
-				assertEquals("Arvind", dcSchema.getCreators().get(1));
-				assertEquals("Krste Asanov\\'\\i{}c", dcSchema.getCreators()
-						.get(2));
-
-				b = XMPUtil.getBibtexEntryFromDublinCore(dcSchema);
-				assertEquals(originalAuthors, AuthorList.getAuthorList(b
-						.getField("author").toString()));
-			} finally {
-				document.close();
-			}
-
-		} finally {
-			pdfFile.delete();
-		}
-	}
-
-	/**
-	 * Read the contents of a reader as one string
-	 * 
-	 * @param reader
-	 * @return
-	 * @throws IOException
-	 */
-	public static String slurp(Reader reader) throws IOException {
-		char[] chars = new char[4092];
-		StringBuffer totalBuffer = new StringBuffer();
-		int bytesRead;
-		while ((bytesRead = reader.read(chars)) != -1) {
-			if (bytesRead == 4092) {
-				totalBuffer.append(chars);
-			} else {
-				totalBuffer.append(new String(chars, 0, bytesRead));
-			}
-		}
-		return totalBuffer.toString();
-	}
-}
+package tests.net.sf.jabref.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintStream;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.TimeZone;
+
+import javax.xml.transform.TransformerException;
+
+import junit.framework.TestCase;
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.BibtexEntryType;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRefPreferences;
+import net.sf.jabref.Util;
+import net.sf.jabref.imports.BibtexParser;
+import net.sf.jabref.imports.ParserResult;
+import net.sf.jabref.util.EncryptionNotSupportedException;
+import net.sf.jabref.util.XMPSchemaBibtex;
+import net.sf.jabref.util.XMPUtil;
+
+import org.apache.jempbox.xmp.XMPMetadata;
+import org.apache.jempbox.xmp.XMPSchema;
+import org.apache.jempbox.xmp.XMPSchemaBasic;
+import org.apache.jempbox.xmp.XMPSchemaDublinCore;
+import org.apache.jempbox.xmp.XMPSchemaMediaManagement;
+import org.apache.pdfbox.exceptions.COSVisitorException;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.common.PDMetadata;
+import org.apache.pdfbox.util.XMLUtil;
+
+/**
+ * 
+ * Limitations: The test suite only handles UTF8. Not UTF16.
+ * 
+ * @author Christopher Oezbek <oezi at oezi.de>
+ */
+public class XMPUtilTest extends TestCase {
+
+	/**
+	 * Wrap bibtex-data (<bibtex:author>...) into an rdf:Description.
+	 * 
+	 * @param bibtex
+	 * @return
+	 */
+	public static String bibtexDescription(String bibtex) {
+		return "      <rdf:Description rdf:about='' xmlns:bibtex='http://jabref.sourceforge.net/bibteXMP/'>\n"
+				+ bibtex + "\n" + "      </rdf:Description>\n";
+	}
+
+	/**
+	 * Wrap bibtex-descriptions (rdf:Description) into the xpacket header.
+	 * 
+	 * @param bibtexDescriptions
+	 * @return
+	 */
+	public static String bibtexXPacket(String bibtexDescriptions) {
+
+		StringBuffer xmp = new StringBuffer();
+
+		xmp.append("<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>\n");
+		xmp.append("  <x:xmpmeta xmlns:x='adobe:ns:meta/'>\n");
+		xmp
+				.append("    <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/' xmlns:rdfs='http://www.w3.org/2000/01/rdf-schema#'>\n");
+
+		xmp.append(bibtexDescriptions);
+
+		xmp.append("    </rdf:RDF>\n");
+		xmp.append("  </x:xmpmeta>\n");
+		xmp.append("<?xpacket end='r'?>");
+
+		return xmp.toString();
+	}
+
+	/**
+	 * Write a manually constructed xmp-string to file
+	 * 
+	 * @param xmpString
+	 * @throws Exception
+	 */
+	public void writeManually(File tempFile, String xmpString) throws Exception {
+
+		PDDocument document = null;
+
+		try {
+			document = PDDocument.load(tempFile.getAbsoluteFile());
+			if (document.isEncrypted()) {
+				System.err
+						.println("Error: Cannot add metadata to encrypted document.");
+				System.exit(1);
+			}
+			PDDocumentCatalog catalog = document.getDocumentCatalog();
+
+			// Convert to UTF8 and make available for metadata.
+			ByteArrayOutputStream bs = new ByteArrayOutputStream();
+			OutputStreamWriter os = new OutputStreamWriter(bs, "UTF8");
+			os.write(xmpString);
+			os.close();
+			ByteArrayInputStream in = new ByteArrayInputStream(bs.toByteArray());
+
+			PDMetadata metadataStream = new PDMetadata(document, in, false);
+			catalog.setMetadata(metadataStream);
+
+			document.save(tempFile.getAbsolutePath());
+
+		} finally {
+			if (document != null)
+				document.close();
+		}
+	}
+
+	public static BibtexEntry bibtexString2BibtexEntry(String s)
+			throws IOException {
+		ParserResult result = BibtexParser.parse(new StringReader(s));
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
+		assertEquals(1, c.size());
+		return c.iterator().next();
+	}
+
+	public static String bibtexEntry2BibtexString(BibtexEntry e)
+			throws IOException {
+		StringWriter sw = new StringWriter();
+		e.write(sw, new net.sf.jabref.export.LatexFieldFormatter(), false);
+		return sw.getBuffer().toString();
+	}
+
+	/* TEST DATA */
+	public String t1BibtexString() {
+		return "@article{canh05,\n"
+				+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},\n"
+				+ "  title = {Effective work practices for floss development: A model and propositions},\n"
+				+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},\n"
+				+ "  year = {2005},\n" + "  owner = {oezbek},\n"
+				+ "  timestamp = {2006.05.29},\n"
+				+ "  url = {http://james.howison.name/publications.html}}\n";
+	}
+
+	public BibtexEntry t1BibtexEntry() throws IOException {
+		return bibtexString2BibtexEntry(t1BibtexString());
+	}
+
+	public String t2XMP() {
+		return "<rdf:Description rdf:about='' xmlns:bibtex='http://jabref.sourceforge.net/bibteXMP/' "
+				+ "bibtex:title='�pt�mz�t��n' "
+				+ "bibtex:bibtexkey='OezbekC06' "
+				+ "bibtex:entrytype='INCOLLECTION' "
+				+ "bibtex:year='2003' "
+				+ "bibtex:booktitle='Proceedings of the of the 25th International Conference on \n Software-Engineering (Portland, Oregon)' "
+				+ ">\n"
+				+ "<bibtex:pdf>YeKis03 - Towards.pdf</bibtex:pdf>\n"
+				+ "</rdf:Description>\n";
+	}
+
+	public String t2BibtexString() throws IOException {
+		return bibtexEntry2BibtexString(t2BibtexEntry());
+	}
+
+	public BibtexEntry t2BibtexEntry() {
+		BibtexEntry e = new BibtexEntry(Util.createNeutralId(),
+				BibtexEntryType.INCOLLECTION);
+		e.setField("title", "�pt�mz�t��n");
+		e.setField("bibtexkey", "OezbekC06");
+		e.setField("year", "2003");
+		e
+				.setField(
+						"booktitle",
+						"Proceedings of the of the 25th International Conference on Software-Engineering (Portland, Oregon)");
+		e.setField("pdf", "YeKis03 - Towards.pdf");
+		return e;
+	}
+
+	public BibtexEntry t3BibtexEntry() {
+		BibtexEntry e = new BibtexEntry();
+		e.setType(BibtexEntryType.INPROCEEDINGS);
+		e.setField("title", "Hypersonic ultra-sound");
+		e.setField("bibtexkey", "Clarkson06");
+		e.setField("author", "Kelly Clarkson and Ozzy Osbourne");
+		e.setField("journal", "International Journal of High Fidelity");
+		e.setField("booktitle", "Catch-22");
+		e.setField("editor", "Huey Duck and Dewey Duck and Louie Duck");
+		e.setField("pdf", "YeKis03 - Towards.pdf");
+		e.setField("keywords", "peanut,butter,jelly");
+		e.setField("year", "1982");
+		e.setField("month", "#jul#");
+		e
+				.setField(
+						"abstract",
+						"The success of the Linux operating system has demonstrated the viability of an alternative form of software development � open source software � that challenges traditional assumptions about software markets. Understanding what drives open source developers to participate in open source projects is crucial for assessing the impact of open source software. This article identifies two broad types of motivations that account for their participation in open source projects. The first  [...]
+		return e;
+	}
+
+	public String t3BibtexString() throws IOException {
+		return bibtexEntry2BibtexString(t3BibtexEntry());
+	}
+
+	public String t3XMP() {
+		return bibtexDescription("<bibtex:title>Hypersonic ultra-sound</bibtex:title>\n"
+				+ "<bibtex:author><rdf:Seq>\n"
+				+ "  <rdf:li>Kelly Clarkson</rdf:li>"
+				+ "  <rdf:li>Ozzy Osbourne</rdf:li>"
+				+ "</rdf:Seq></bibtex:author>"
+				+ "<bibtex:editor><rdf:Seq>"
+				+ "  <rdf:li>Huey Duck</rdf:li>"
+				+ "  <rdf:li>Dewey Duck</rdf:li>"
+				+ "  <rdf:li>Louie Duck</rdf:li>"
+				+ "</rdf:Seq></bibtex:editor>"
+				+ "<bibtex:bibtexkey>Clarkson06</bibtex:bibtexkey>"
+				+ "<bibtex:journal>International Journal of High Fidelity</bibtex:journal>"
+				+ "<bibtex:booktitle>Catch-22</bibtex:booktitle>"
+				+ "<bibtex:pdf>YeKis03 - Towards.pdf</bibtex:pdf>"
+				+ "<bibtex:keywords>peanut,butter,jelly</bibtex:keywords>"
+				+ "<bibtex:entrytype>Inproceedings</bibtex:entrytype>"
+				+ "<bibtex:year>1982</bibtex:year>"
+				+ "<bibtex:month>#jul#</bibtex:month>"
+				+ "<bibtex:abstract>The success of the Linux operating system has demonstrated the viability of an alternative form of software development � open source software � that challenges traditional assumptions about software markets. Understanding what drives open source developers to participate in open source projects is crucial for assessing the impact of open source software. This article identifies two broad types of motivations that account for their participation in open source pro [...]
+	}
+
+	/**
+	 * The PDF file that basically all operations are done upon.
+	 */
+	File pdfFile;
+
+	/**
+	 * Create a temporary PDF-file with a single empty page.
+	 */
+	public void setUp() throws IOException, COSVisitorException {
+
+		pdfFile = File.createTempFile("JabRef", ".pdf");
+
+		PDDocument pdf = null;
+		try {
+			pdf = new PDDocument();
+			pdf.addPage(new PDPage()); // Need page to open in Acrobat
+			pdf.save(pdfFile.getAbsolutePath());
+		} finally {
+			if (pdf != null)
+				pdf.close();
+		}
+
+		// Don't forget to initialize the preferences
+		if (Globals.prefs == null) {
+			Globals.prefs = JabRefPreferences.getInstance();
+		}
+
+		// Store Privacy Settings
+		prefs = JabRefPreferences.getInstance();
+
+		use = prefs.getBoolean("useXmpPrivacyFilter");
+		privacyFilters = prefs.getStringArray("xmpPrivacyFilters");
+
+		// The code assumes privacy filters to be off
+		prefs.putBoolean("useXmpPrivacyFilter", false);
+	}
+
+	JabRefPreferences prefs;
+
+	boolean use;
+
+	String[] privacyFilters;
+
+	/**
+	 * Delete the temporary file.
+	 */
+	public void tearDown() {
+		pdfFile.delete();
+
+		prefs.putBoolean("useXmpPrivacyFilter", use);
+		prefs.putStringArray("xmpPrivacyFilter", privacyFilters);
+	}
+
+	/**
+	 * Most basic test for reading.
+	 * 
+	 * @throws Exception
+	 */
+	public void testReadXMPSimple() throws Exception {
+
+		String bibtex = "<bibtex:year>2003</bibtex:year>\n"
+				+ "<bibtex:title>Beach sand convolution by surf-wave optimzation</bibtex:title>\n"
+				+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
+
+		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
+
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		assertEquals(1, l.size());
+		BibtexEntry e = l.get(0);
+
+		assertNotNull(e);
+		assertEquals("OezbekC06", e.getCiteKey());
+		assertEquals("2003", e.getField("year"));
+		assertEquals("Beach sand convolution by surf-wave optimzation", e
+				.getField("title"));
+		assertEquals(BibtexEntryType.OTHER, e.getType());
+
+	}
+
+	/**
+	 * Is UTF8 handling working? This is because Java by default uses the
+	 * platform encoding or a special UTF-kind.
+	 * 
+	 * @throws Exception
+	 */
+	public void testReadXMPUTF8() throws Exception {
+
+		String bibtex = "<bibtex:year>2003</bibtex:year>\n"
+				+ "<bibtex:title>�pt�mz�t��n</bibtex:title>\n"
+				+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
+
+		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
+
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		assertEquals(1, l.size());
+		BibtexEntry e = l.get(0);
+
+		assertNotNull(e);
+		assertEquals("OezbekC06", e.getCiteKey());
+		assertEquals("2003", e.getField("year"));
+		assertEquals("�pt�mz�t��n", e.getField("title"));
+		assertEquals(BibtexEntryType.OTHER, e.getType());
+	}
+
+	/**
+	 * Make sure that the privacy filter works.
+	 * 
+	 * @throws IOException
+	 *             Should not happen.
+	 * @throws TransformerException
+	 *             Should not happen.
+	 */
+	public void testPrivacyFilter() throws IOException, TransformerException {
+
+		{ // First set:
+			prefs.putBoolean("useXmpPrivacyFilter", true);
+			prefs.putStringArray("xmpPrivacyFilter",
+					new String[] { "author;title;note" });
+
+			BibtexEntry e = t1BibtexEntry();
+
+			XMPUtil.writeXMP(pdfFile, e, null);
+
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+			assertEquals(1, l.size());
+			BibtexEntry x = l.get(0);
+
+			Set<String> ts = x.getAllFields();
+
+			assertEquals(8, ts.size());
+
+			ts.contains("bibtextype");
+			ts.contains("bibtexkey");
+			ts.contains("booktitle");
+			ts.contains("year");
+			ts.contains("owner");
+			ts.contains("timestamp");
+			ts.contains("year");
+			ts.contains("url");
+		}
+		{ // First set:
+			prefs.putBoolean("useXmpPrivacyFilter", true);
+			prefs
+					.putStringArray(
+							"xmpPrivacyFilter",
+							new String[] { "author;title;note;booktitle;year;owner;timestamp" });
+
+			BibtexEntry e = t1BibtexEntry();
+
+			XMPUtil.writeXMP(pdfFile, e, null);
+
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+			assertEquals(1, l.size());
+			BibtexEntry x = l.get(0);
+			Set<String> ts = x.getAllFields();
+			assertEquals(8, ts.size());
+
+			ts.contains("bibtextype");
+			ts.contains("bibtexkey");
+			ts.contains("year");
+			ts.contains("url");
+		}
+
+	}
+
+	/**
+	 * Are authors and editors correctly read?
+	 * 
+	 * @throws Exception
+	 */
+	public void testReadXMPSeq() throws Exception {
+
+		String bibtex = "<bibtex:author><rdf:Seq>\n"
+				+ "  <rdf:li>Kelly Clarkson</rdf:li>"
+				+ "  <rdf:li>Ozzy Osbourne</rdf:li>"
+				+ "</rdf:Seq></bibtex:author>" + "<bibtex:editor><rdf:Seq>"
+				+ "  <rdf:li>Huey Duck</rdf:li>"
+				+ "  <rdf:li>Dewey Duck</rdf:li>"
+				+ "  <rdf:li>Louie Duck</rdf:li>"
+				+ "</rdf:Seq></bibtex:editor>"
+				+ "<bibtex:bibtexkey>Clarkson06</bibtex:bibtexkey>";
+
+		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
+
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		assertEquals(1, l.size());
+		BibtexEntry e = l.get(0);
+
+		assertNotNull(e);
+		assertEquals("Clarkson06", e.getCiteKey());
+		assertEquals("Kelly Clarkson and Ozzy Osbourne", e.getField("author"));
+		assertEquals("Huey Duck and Dewey Duck and Louie Duck", e
+				.getField("editor"));
+		assertEquals(BibtexEntryType.OTHER, e.getType());
+	}
+
+	/**
+	 * Is the XMPEntryType correctly set?
+	 * 
+	 * @throws Exception
+	 */
+	public void testReadXMPEntryType() throws Exception {
+
+		String bibtex = "<bibtex:entrytype>ARticle</bibtex:entrytype>";
+
+		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
+
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		assertEquals(1, l.size());
+		BibtexEntry e = l.get(0);
+
+		assertNotNull(e);
+		assertEquals(BibtexEntryType.ARTICLE, e.getType());
+	}
+
+	public static String readManually(File tempFile) throws IOException {
+
+		PDDocument document = null;
+
+		try {
+			document = PDDocument.load(tempFile.getAbsoluteFile());
+			if (document.isEncrypted()) {
+				System.err
+						.println("Error: Cannot add metadata to encrypted document.");
+				System.exit(1);
+			}
+			PDDocumentCatalog catalog = document.getDocumentCatalog();
+			PDMetadata meta = catalog.getMetadata();
+
+			if (meta == null) {
+				return null;
+			} else {
+				// PDMetadata.getInputStreamAsString() does not work
+
+				// Convert to UTF8 and make available for metadata.
+				InputStreamReader is = new InputStreamReader(meta
+						.createInputStream(), "UTF8");
+				return slurp(is).trim(); // Trim to kill padding end-newline.
+			}
+		} finally {
+			if (document != null)
+				document.close();
+		}
+	}
+
+	/**
+	 * Test whether the helper function work correctly.
+	 * 
+	 * @throws Exception
+	 */
+	public void testWriteReadManually() throws Exception {
+
+		String bibtex = "<bibtex:year>2003</bibtex:year>\n"
+				+ "<bibtex:title>�pt�mz�t��n</bibtex:title>\n"
+				+ "<bibtex:bibtexkey>OezbekC06</bibtex:bibtexkey>\n";
+
+		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
+		assertEquals(bibtexXPacket(bibtexDescription(bibtex)),
+				readManually(pdfFile));
+
+		bibtex = "<bibtex:author><rdf:Seq>\n"
+				+ "  <rdf:li>Kelly Clarkson</rdf:li>"
+				+ "  <rdf:li>Ozzy Osbourne</rdf:li>"
+				+ "</rdf:Seq></bibtex:author>" + "<bibtex:editor><rdf:Seq>"
+				+ "  <rdf:li>Huey Duck</rdf:li>"
+				+ "  <rdf:li>Dewey Duck</rdf:li>"
+				+ "  <rdf:li>Louie Duck</rdf:li>"
+				+ "</rdf:Seq></bibtex:editor>"
+				+ "<bibtex:bibtexkey>Clarkson06</bibtex:bibtexkey>";
+
+		writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
+		assertEquals(bibtexXPacket(bibtexDescription(bibtex)),
+				readManually(pdfFile));
+	}
+
+	/**
+	 * Test that readXMP and writeXMP work together.
+	 * 
+	 * @throws Exception
+	 */
+	public void testReadWriteXMP() throws Exception {
+		ParserResult result = BibtexParser
+				.parse(new StringReader(
+						"@article{canh05,"
+								+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
+								+ "\n"
+								+ "  title = {Effective work practices for floss development: A model and propositions},"
+								+ "\n"
+								+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},"
+								+ "\n"
+								+ "  year = {2005},"
+								+ "\n"
+								+ "  owner = {oezbek},"
+								+ "\n"
+								+ "  timestamp = {2006.05.29},"
+								+ "\n"
+								+ "  url = {http://james.howison.name/publications.html}"
+								+ "\n" + "}"));
+
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
+		assertEquals(1, c.size());
+
+		BibtexEntry e = c.iterator().next();
+
+		XMPUtil.writeXMP(pdfFile, e, null);
+
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		assertEquals(1, l.size());
+		BibtexEntry x = l.get(0);
+
+		assertEquals(e, x);
+	}
+
+	/**
+	 * Are newlines in the XML processed correctly?
+	 * 
+	 * @throws Exception
+	 */
+	public void testNewlineHandling() throws Exception {
+
+		{
+			String bibtex = "<bibtex:title>\nHallo\nWorld \nthis \n is\n\nnot \n\nan \n\n exercise \n \n.\n \n\n</bibtex:title>\n"
+					+ "<bibtex:tabs>\nHallo\tWorld \tthis \t is\t\tnot \t\tan \t\n exercise \t \n.\t \n\t</bibtex:tabs>\n"
+					+ "<bibtex:abstract>\n\nAbstract preserve\n\t Whitespace\n\n</bibtex:abstract>";
+
+			writeManually(pdfFile, bibtexXPacket(bibtexDescription(bibtex)));
+
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+			assertEquals(1, l.size());
+			BibtexEntry e = l.get(0);
+
+			assertNotNull(e);
+			assertEquals("Hallo World this is not an exercise .", e
+					.getField("title"));
+			assertEquals("Hallo World this is not an exercise .", e
+					.getField("tabs"));
+			assertEquals("\n\nAbstract preserve\n\t Whitespace\n\n", e
+					.getField("abstract"));
+		}
+	}
+
+	/**
+	 * Test whether XMP.readFile can deal with text-properties that are not
+	 * element-nodes, but attribute-nodes
+	 * 
+	 * @throws Exception
+	 */
+	public void testAttributeRead() throws Exception {
+
+		// test 1 has attributes
+		String bibtex = t2XMP();
+
+		writeManually(pdfFile, bibtexXPacket(bibtex));
+
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		assertEquals(1, l.size());
+		BibtexEntry e = l.get(0);
+
+		assertEquals(t2BibtexEntry(), e);
+	}
+
+	public void testEmpty() throws Exception {
+
+		assertEquals(null, XMPUtil.readXMP(pdfFile));
+
+	}
+
+	/**
+	 * Tests whether writing BibTex.xmp will preserve existing XMP-descriptions.
+	 * 
+	 * @throws Exception
+	 *             (indicating an failure)
+	 */
+	public void testSimpleUpdate() throws Exception {
+
+		String s = " <rdf:Description rdf:about=''"
+				+ "  xmlns:xmp='http://ns.adobe.com/xap/1.0/'>"
+				+ "  <xmp:CreatorTool>Acrobat PDFMaker 7.0.7</xmp:CreatorTool>"
+				+ "  <xmp:ModifyDate>2006-08-07T18:50:24+02:00</xmp:ModifyDate>"
+				+ "  <xmp:CreateDate>2006-08-07T14:44:24+02:00</xmp:CreateDate>"
+				+ "  <xmp:MetadataDate>2006-08-07T18:50:24+02:00</xmp:MetadataDate>"
+				+ " </rdf:Description>"
+				+ ""
+				+ " <rdf:Description rdf:about=''"
+				+ "  xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'>"
+				+ "  <xapMM:DocumentID>uuid:843cd67d-495e-4c1e-a4cd-64178f6b3299</xapMM:DocumentID>"
+				+ "  <xapMM:InstanceID>uuid:1e56b4c0-6782-440d-ba76-d2b3d87547d1</xapMM:InstanceID>"
+				+ "  <xapMM:VersionID>" + "   <rdf:Seq>"
+				+ "    <rdf:li>17</rdf:li>" + "   </rdf:Seq>"
+				+ "  </xapMM:VersionID>" + " </rdf:Description>" + ""
+				+ " <rdf:Description rdf:about=''"
+				+ "  xmlns:dc='http://purl.org/dc/elements/1.1/'>"
+				+ "  <dc:format>application/pdf</dc:format>"
+				+ "</rdf:Description>";
+
+		writeManually(pdfFile, bibtexXPacket(s));
+
+		// Nothing there yet, but should not crash
+		assertNull(XMPUtil.readXMP(pdfFile));
+
+		s = " <rdf:Description rdf:about=''"
+				+ "  xmlns:xmp='http://ns.adobe.com/xap/1.0/'>"
+				+ "  <xmp:CreatorTool>Acrobat PDFMaker 7.0.7</xmp:CreatorTool>"
+				+ "  <xmp:ModifyDate>2006-08-07T18:50:24+02:00</xmp:ModifyDate>"
+				+ "  <xmp:CreateDate>2006-08-07T14:44:24+02:00</xmp:CreateDate>"
+				+ "  <xmp:MetadataDate>2006-08-07T18:50:24+02:00</xmp:MetadataDate>"
+				+ " </rdf:Description>"
+				+ ""
+				+ " <rdf:Description rdf:about=''"
+				+ "  xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'>"
+				+ "  <xapMM:DocumentID>uuid:843cd67d-495e-4c1e-a4cd-64178f6b3299</xapMM:DocumentID>"
+				+ "  <xapMM:InstanceID>uuid:1e56b4c0-6782-440d-ba76-d2b3d87547d1</xapMM:InstanceID>"
+				+ "  <xapMM:VersionID>" + "   <rdf:Seq>"
+				+ "    <rdf:li>17</rdf:li>" + "   </rdf:Seq>"
+				+ "  </xapMM:VersionID>" + " </rdf:Description>" + ""
+				+ " <rdf:Description rdf:about=''"
+				+ "  xmlns:dc='http://purl.org/dc/elements/1.1/'>"
+				+ "  <dc:format>application/pdf</dc:format>" + "  <dc:title>"
+				+ "   <rdf:Alt>"
+				+ "    <rdf:li xml:lang='x-default'>Questionnaire.pdf</rdf:li>"
+				+ "   </rdf:Alt>" + "  </dc:title>" + "" + "</rdf:Description>";
+
+		writeManually(pdfFile, bibtexXPacket(s));
+
+		// Title is Questionnaire.pdf so the DublinCore fallback should hit
+		// in...
+		assertEquals(1, XMPUtil.readXMP(pdfFile).size());
+
+		{
+			// Now write new packet and check if it was correctly written
+			XMPUtil.writeXMP(pdfFile, t1BibtexEntry(), null);
+
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+			assertEquals(1, l.size());
+			BibtexEntry e = l.get(0);
+
+			assertEquals(t1BibtexEntry(), e);
+
+			// This is what we really want to test: Is the rest of the
+			// descriptions still there?
+
+			PDDocument document = null;
+			try {
+				document = PDDocument.load(pdfFile.getAbsoluteFile());
+				if (document.isEncrypted()) {
+					throw new IOException(
+							"Error: Cannot read metadata from encrypted document.");
+				}
+				PDDocumentCatalog catalog = document.getDocumentCatalog();
+				PDMetadata metaRaw = catalog.getMetadata();
+
+				XMPMetadata meta;
+				if (metaRaw != null) {
+					meta = new XMPMetadata(XMLUtil.parse(metaRaw
+							.createInputStream()));
+				} else {
+					meta = new XMPMetadata();
+				}
+				meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
+						XMPSchemaBibtex.class);
+
+				List<XMPSchema> schemas = meta.getSchemas();
+
+				assertEquals(4, schemas.size());
+
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
+				assertEquals(1, schemas.size());
+
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
+				assertEquals(1, schemas.size());
+				XMPSchemaDublinCore dc = (XMPSchemaDublinCore) schemas.get(0);
+				assertEquals("application/pdf", dc.getFormat());
+
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaBasic.NAMESPACE);
+				assertEquals(1, schemas.size());
+				XMPSchemaBasic bs = (XMPSchemaBasic) schemas.get(0);
+				assertEquals("Acrobat PDFMaker 7.0.7", bs.getCreatorTool());
+
+				Calendar c = Calendar.getInstance();
+				c.clear();
+				c.set(Calendar.YEAR, 2006);
+				c.set(Calendar.MONTH, Calendar.AUGUST);
+				c.set(Calendar.DATE, 7);
+				c.set(Calendar.HOUR, 14);
+				c.set(Calendar.MINUTE, 44);
+				c.set(Calendar.SECOND, 24);
+				c.setTimeZone(TimeZone.getTimeZone("GMT+2"));
+
+				Calendar other = bs.getCreateDate();
+
+				assertEquals(c.get(Calendar.YEAR), other.get(Calendar.YEAR));
+				assertEquals(c.get(Calendar.MONTH), other.get(Calendar.MONTH));
+				assertEquals(c.get(Calendar.DATE), other.get(Calendar.DATE));
+				assertEquals(c.get(Calendar.HOUR), other.get(Calendar.HOUR));
+				assertEquals(c.get(Calendar.MINUTE), other.get(Calendar.MINUTE));
+				assertEquals(c.get(Calendar.SECOND), other.get(Calendar.SECOND));
+				assertTrue(c.getTimeZone().hasSameRules(other.getTimeZone()));
+
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaMediaManagement.NAMESPACE);
+				assertEquals(1, schemas.size());
+				XMPSchemaMediaManagement mm = (XMPSchemaMediaManagement) schemas
+						.get(0);
+				assertEquals("17", mm.getSequenceList("xapMM:VersionID").get(0));
+
+			} finally {
+				if (document != null) {
+					document.close();
+				}
+			}
+		}
+
+		{ // Now alter the Bibtex entry, write it and do all the checks again
+			BibtexEntry toSet = t1BibtexEntry();
+			toSet.setField("author", "Pokemon!");
+
+			XMPUtil.writeXMP(pdfFile, toSet, null);
+
+			List l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+			assertEquals(1, l.size());
+			BibtexEntry e = (BibtexEntry) l.get(0);
+
+			assertEquals(toSet, e);
+
+			// This is what we really want to test: Is the rest of the
+			// descriptions still there?
+
+			PDDocument document = null;
+			try {
+				document = PDDocument.load(pdfFile.getAbsoluteFile());
+				if (document.isEncrypted()) {
+					throw new IOException(
+							"Error: Cannot read metadata from encrypted document.");
+				}
+				PDDocumentCatalog catalog = document.getDocumentCatalog();
+				PDMetadata metaRaw = catalog.getMetadata();
+
+				XMPMetadata meta;
+				if (metaRaw != null) {
+					meta = new XMPMetadata(XMLUtil.parse(metaRaw
+							.createInputStream()));
+				} else {
+					meta = new XMPMetadata();
+				}
+				meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
+						XMPSchemaBibtex.class);
+
+				List schemas = meta.getSchemas();
+
+				assertEquals(4, schemas.size());
+
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
+				assertEquals(1, schemas.size());
+
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaDublinCore.NAMESPACE);
+				assertEquals(1, schemas.size());
+				XMPSchemaDublinCore dc = (XMPSchemaDublinCore) schemas.get(0);
+				assertEquals("application/pdf", dc.getFormat());
+
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaBasic.NAMESPACE);
+				assertEquals(1, schemas.size());
+				XMPSchemaBasic bs = (XMPSchemaBasic) schemas.get(0);
+				assertEquals("Acrobat PDFMaker 7.0.7", bs.getCreatorTool());
+
+				Calendar c = Calendar.getInstance();
+				c.clear();
+				c.set(Calendar.YEAR, 2006);
+				c.set(Calendar.MONTH, 7);
+				c.set(Calendar.DATE, 7);
+				c.set(Calendar.HOUR, 14);
+				c.set(Calendar.MINUTE, 44);
+				c.set(Calendar.SECOND, 24);
+				c.setTimeZone(TimeZone.getTimeZone("GMT+2"));
+
+				Calendar other = bs.getCreateDate();
+
+				assertEquals(c.get(Calendar.YEAR), other.get(Calendar.YEAR));
+				assertEquals(c.get(Calendar.MONTH), other.get(Calendar.MONTH));
+				assertEquals(c.get(Calendar.DATE), other.get(Calendar.DATE));
+				assertEquals(c.get(Calendar.HOUR), other.get(Calendar.HOUR));
+				assertEquals(c.get(Calendar.MINUTE), other.get(Calendar.MINUTE));
+				assertEquals(c.get(Calendar.SECOND), other.get(Calendar.SECOND));
+				assertTrue(c.getTimeZone().hasSameRules(other.getTimeZone()));
+
+				schemas = meta
+						.getSchemasByNamespaceURI(XMPSchemaMediaManagement.NAMESPACE);
+				assertEquals(1, schemas.size());
+				XMPSchemaMediaManagement mm = (XMPSchemaMediaManagement) schemas
+						.get(0);
+				assertEquals("17", mm.getSequenceList("xapMM:VersionID").get(0));
+
+			} finally {
+				if (document != null) {
+					document.close();
+				}
+			}
+		}
+	}
+
+	/**
+	 * Is XML in text properties properly escaped?
+	 * 
+	 * @throws Exception
+	 * 
+	 */
+	public void testXMLEscape() throws Exception {
+		ParserResult result = BibtexParser
+				.parse(new StringReader(
+						"@article{canh05,"
+								+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},"
+								+ "\n"
+								+ "  title = {</bibtex:title> \" bla \" '' '' && &  for floss development: A model and propositions},"
+								+ "\n"
+								+ "  booktitle = {<randomXML>},"
+								+ "\n"
+								+ "  year = {2005},"
+								+ "\n"
+								+ "  owner = {oezbek},"
+								+ "\n"
+								+ "  timestamp = {2006.05.29},"
+								+ "\n"
+								+ "  url = {http://james.howison.name/publications.html}"
+								+ "\n" + "}"));
+
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
+		assertEquals(1, c.size());
+
+		BibtexEntry e = c.iterator().next();
+
+		XMPUtil.writeXMP(pdfFile, e, null);
+
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		assertEquals(1, l.size());
+		BibtexEntry x = l.get(0);
+
+		assertEquals(e, x);
+	}
+
+	public void assertEquals(BibtexEntry expected, BibtexEntry actual) {
+		assertEquals(expected.getCiteKey(), actual.getCiteKey());
+		assertEquals(expected.getType(), actual.getType());
+
+		for (String field : expected.getAllFields()){
+		
+			if (field.toString().toLowerCase().equals("author")
+					|| field.toString().toLowerCase().equals("editor")) {
+
+				AuthorList expectedAuthors = AuthorList.getAuthorList(expected
+						.getField(field.toString()).toString());
+				AuthorList actualAuthors = AuthorList.getAuthorList(actual
+						.getField(field.toString()).toString());
+				assertEquals(expectedAuthors, actualAuthors);
+			} else {
+				assertEquals(
+						"" + field.toString(),
+						expected.getField(field.toString()).toString(), actual
+								.getField(field.toString()).toString());
+			}
+		}
+
+		assertEquals(expected.getAllFields().size(),
+				actual.getAllFields().size());
+	}
+
+	/**
+	 * 
+	 * @depends XMPUtilTest.testReadMultiple()
+	 */
+	public void testXMPreadString() throws Exception {
+
+		ParserResult result = BibtexParser.parse(new StringReader(
+				"@article{canh05,"
+						+ "  author = {Crowston, K. and Annabi, H.},\n"
+						+ "  title = {Title A}}\n" + "@inProceedings{foo,"
+						+ "  author={Norton Bar}}"));
+
+		Collection<BibtexEntry> c = result.getDatabase().getEntries();
+		assertEquals(2, c.size());
+
+		String xmp = XMPUtil.toXMP(c, null);
+
+		/* Test minimal syntaxical completeness */
+		assertTrue(0 < xmp.indexOf("xpacket"));
+		assertTrue(0 < xmp.indexOf("adobe:ns:meta"));
+		assertTrue(0 < xmp
+				.indexOf("<bibtex:bibtexkey>canh05</bibtex:bibtexkey>")
+				|| 0 < xmp.indexOf("bibtex:bibtexkey="));
+		assertTrue(0 < xmp.indexOf("<rdf:li>Norton Bar</rdf:li>"));
+		assertTrue(0 < xmp.indexOf("id='W5M0MpCehiHzreSzNTczkc9d'?>")
+				|| 0 < xmp.indexOf("id=\"W5M0MpCehiHzreSzNTczkc9d\"?>"));
+		assertTrue(0 < xmp
+				.indexOf("xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'")
+				|| 0 < xmp
+						.indexOf("xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\""));
+		assertTrue(0 < xmp.indexOf("<rdf:Description"));
+		assertTrue(0 < xmp.indexOf("<?xpacket end='w'?>")
+				|| 0 < xmp.indexOf("<?xpacket end=\"w\"?>"));
+
+		/* Test contents of string */
+		writeManually(pdfFile, xmp);
+
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
+
+		assertEquals(2, l.size());
+
+		BibtexEntry a = l.get(0);
+		BibtexEntry b = l.get(1);
+
+		if (a.getCiteKey().equals("foo")) {
+			BibtexEntry tmp = a;
+			a = b;
+			b = tmp;
+		}
+
+		assertEquals("canh05", a.getCiteKey());
+		assertEquals("K. Crowston and H. Annabi", a.getField("author"));
+		assertEquals("Title A", a.getField("title"));
+		assertEquals(BibtexEntryType.ARTICLE, a.getType());
+
+		assertEquals("foo", b.getCiteKey());
+		assertEquals("Norton Bar", b.getField("author"));
+		assertEquals(BibtexEntryType.INPROCEEDINGS, b.getType());
+	}
+
+	/**
+	 * Tests whether it is possible to read several BibtexEntries
+	 * 
+	 * @throws Exception
+	 * 
+	 */
+	public void testReadMultiple() throws Exception {
+
+		String bibtex = t2XMP() + t3XMP();
+		writeManually(pdfFile, bibtexXPacket(bibtex));
+
+		// Read from file
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
+
+		assertEquals(2, l.size());
+
+		BibtexEntry a = l.get(0);
+		BibtexEntry b = l.get(1);
+
+		if (a.getCiteKey().equals("Clarkson06")) {
+			BibtexEntry tmp = a;
+			a = b;
+			b = tmp;
+		}
+
+		assertEquals(t2BibtexEntry(), a);
+		assertEquals(t3BibtexEntry(), b);
+	}
+
+	/**
+	 * Tests whether it is possible to write several Bibtexentries
+	 * 
+	 * @throws TransformerException
+	 * @throws IOException
+	 * 
+	 */
+	public void testWriteMultiple() throws IOException, TransformerException {
+		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
+		l.add(t2BibtexEntry());
+		l.add(t3BibtexEntry());
+
+		XMPUtil.writeXMP(pdfFile, l, null, false);
+
+		l = XMPUtil.readXMP(pdfFile);
+
+		assertEquals(2, l.size());
+
+		BibtexEntry a = l.get(0);
+		BibtexEntry b = l.get(1);
+
+		if (a.getCiteKey().equals("Clarkson06")) {
+			BibtexEntry tmp = a;
+			a = b;
+			b = tmp;
+		}
+
+		assertEquals(t2BibtexEntry(), a);
+		assertEquals(t3BibtexEntry(), b);
+	}
+
+	public void testReadWriteDC() throws IOException, TransformerException {
+		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
+		l.add(t3BibtexEntry());
+
+		XMPUtil.writeXMP(pdfFile, l, null, true);
+
+		PDDocument document = PDDocument.load(pdfFile.getAbsoluteFile());
+		try {
+			if (document.isEncrypted()) {
+				System.err
+						.println("Error: Cannot add metadata to encrypted document.");
+				System.exit(1);
+			}
+
+			assertEquals("Kelly Clarkson and Ozzy Osbourne", document
+					.getDocumentInformation().getAuthor());
+			assertEquals("Hypersonic ultra-sound", document
+					.getDocumentInformation().getTitle());
+			assertEquals("Huey Duck and Dewey Duck and Louie Duck", document
+					.getDocumentInformation().getCustomMetadataValue(
+							"bibtex/editor"));
+			assertEquals("Clarkson06", document.getDocumentInformation()
+					.getCustomMetadataValue("bibtex/bibtexkey"));
+			assertEquals("peanut,butter,jelly", document
+					.getDocumentInformation().getKeywords());
+
+			assertEquals(t3BibtexEntry(), XMPUtil
+					.getBibtexEntryFromDocumentInformation(document
+							.getDocumentInformation()));
+
+			PDDocumentCatalog catalog = document.getDocumentCatalog();
+			PDMetadata metaRaw = catalog.getMetadata();
+
+			if (metaRaw == null) {
+				fail();
+				return;
+			}
+
+			XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw
+					.createInputStream()));
+			meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
+					XMPSchemaBibtex.class);
+
+			// Check Dublin Core
+			List<XMPSchema> schemas = meta
+					.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
+			assertEquals(1, schemas.size());
+
+			XMPSchemaDublinCore dcSchema = (XMPSchemaDublinCore) schemas
+					.iterator().next();
+			assertNotNull(dcSchema);
+
+			assertEquals("Hypersonic ultra-sound", dcSchema.getTitle());
+			assertEquals("1982-07", dcSchema.getSequenceList("dc:date").get(0));
+			assertEquals("Kelly Clarkson", dcSchema.getCreators().get(0));
+			assertEquals("Ozzy Osbourne", dcSchema.getCreators().get(1));
+			assertEquals("Huey Duck", dcSchema.getContributors().get(0));
+			assertEquals("Dewey Duck", dcSchema.getContributors().get(1));
+			assertEquals("Louie Duck", dcSchema.getContributors().get(2));
+			assertEquals("Inproceedings", dcSchema.getTypes().get(0));
+			assertEquals("bibtex/bibtexkey/Clarkson06", dcSchema
+					.getRelationships().get(0));
+			assertEquals("peanut", dcSchema.getSubjects().get(0));
+			assertEquals("butter", dcSchema.getSubjects().get(1));
+			assertEquals("jelly", dcSchema.getSubjects().get(2));
+
+			/**
+			 * Bibtexkey, Journal, pdf, booktitle
+			 */
+			assertEquals(4, dcSchema.getRelationships().size());
+
+			assertEquals(t3BibtexEntry(), XMPUtil
+					.getBibtexEntryFromDublinCore(dcSchema));
+
+		} finally {
+			document.close();
+		}
+
+	}
+
+	public void testWriteSingleUpdatesDCAndInfo() throws IOException,
+			TransformerException {
+		List<BibtexEntry> l = new LinkedList<BibtexEntry>();
+		l.add(t3BibtexEntry());
+
+		XMPUtil.writeXMP(pdfFile, l, null, true);
+
+		PDDocument document = PDDocument.load(pdfFile.getAbsoluteFile());
+		try {
+			if (document.isEncrypted()) {
+				System.err
+						.println("Error: Cannot add metadata to encrypted document.");
+				System.exit(1);
+			}
+
+			assertEquals("Kelly Clarkson and Ozzy Osbourne", document
+					.getDocumentInformation().getAuthor());
+			assertEquals("Hypersonic ultra-sound", document
+					.getDocumentInformation().getTitle());
+			assertEquals("Huey Duck and Dewey Duck and Louie Duck", document
+					.getDocumentInformation().getCustomMetadataValue(
+							"bibtex/editor"));
+			assertEquals("Clarkson06", document.getDocumentInformation()
+					.getCustomMetadataValue("bibtex/bibtexkey"));
+			assertEquals("peanut,butter,jelly", document
+					.getDocumentInformation().getKeywords());
+
+			assertEquals(t3BibtexEntry(), XMPUtil
+					.getBibtexEntryFromDocumentInformation(document
+							.getDocumentInformation()));
+
+			PDDocumentCatalog catalog = document.getDocumentCatalog();
+			PDMetadata metaRaw = catalog.getMetadata();
+
+			if (metaRaw == null) {
+				fail();
+			}
+
+			XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw
+					.createInputStream()));
+			meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
+					XMPSchemaBibtex.class);
+
+			// Check Dublin Core
+			List<XMPSchema> schemas = meta
+					.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
+
+			assertEquals(1, schemas.size());
+
+			XMPSchemaDublinCore dcSchema = (XMPSchemaDublinCore) schemas
+					.iterator().next();
+			assertNotNull(dcSchema);
+
+			assertEquals("Hypersonic ultra-sound", dcSchema.getTitle());
+			assertEquals("1982-07", dcSchema.getSequenceList("dc:date").get(0));
+			assertEquals("Kelly Clarkson", dcSchema.getCreators().get(0));
+			assertEquals("Ozzy Osbourne", dcSchema.getCreators().get(1));
+			assertEquals("Huey Duck", dcSchema.getContributors().get(0));
+			assertEquals("Dewey Duck", dcSchema.getContributors().get(1));
+			assertEquals("Louie Duck", dcSchema.getContributors().get(2));
+			assertEquals("Inproceedings", dcSchema.getTypes().get(0));
+			assertEquals("bibtex/bibtexkey/Clarkson06", dcSchema
+					.getRelationships().get(0));
+			assertEquals("peanut", dcSchema.getSubjects().get(0));
+			assertEquals("butter", dcSchema.getSubjects().get(1));
+			assertEquals("jelly", dcSchema.getSubjects().get(2));
+
+			/**
+			 * Bibtexkey, Journal, pdf, booktitle
+			 */
+			assertEquals(4, dcSchema.getRelationships().size());
+
+			assertEquals(t3BibtexEntry(), XMPUtil
+					.getBibtexEntryFromDublinCore(dcSchema));
+
+		} finally {
+			document.close();
+		}
+
+	}
+
+	public void testReadRawXMP() throws Exception {
+
+		ParserResult result = BibtexParser
+				.parse(new StringReader(
+						"@article{canh05,"
+								+ "  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},\n"
+								+ "  title = {Effective work practices for floss development: A model and propositions},\n"
+								+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},\n"
+								+ "  year = {2005},\n"
+								+ "  owner = {oezbek},\n"
+								+ "  timestamp = {2006.05.29},\n"
+								+ "  url = {http://james.howison.name/publications.html}}"));
+
+		Collection c = result.getDatabase().getEntries();
+		assertEquals(1, c.size());
+
+		BibtexEntry e = (BibtexEntry) c.iterator().next();
+
+		XMPUtil.writeXMP(pdfFile, e, null);
+
+		XMPMetadata metadata = XMPUtil.readRawXMP(pdfFile);
+
+		List<XMPSchema> schemas = metadata.getSchemas();
+		assertEquals(2, schemas.size());
+		schemas = metadata.getSchemasByNamespaceURI(XMPSchemaBibtex.NAMESPACE);
+		assertEquals(1, schemas.size());
+		XMPSchemaBibtex bib = (XMPSchemaBibtex) schemas.get(0);
+
+		List<String> authors = bib.getSequenceList("author");
+		assertEquals(4, authors.size());
+		assertEquals("K. Crowston", authors.get(0));
+		assertEquals("H. Annabi", authors.get(1));
+		assertEquals("J. Howison", authors.get(2));
+		assertEquals("C. Masango", authors.get(3));
+
+		assertEquals("Article", bib.getTextProperty("entrytype"));
+		assertEquals(
+				"Effective work practices for floss development: A model and propositions",
+				bib.getTextProperty("title"));
+		assertEquals(
+				"Hawaii International Conference On System Sciences (HICSS)",
+				bib.getTextProperty("booktitle"));
+		assertEquals("2005", bib.getTextProperty("year"));
+		assertEquals("oezbek", bib.getTextProperty("owner"));
+		assertEquals("http://james.howison.name/publications.html", bib
+				.getTextProperty("url"));
+
+	}
+
+	/**
+	 * Test whether the command-line client works correctly with writing a
+	 * single entry
+	 * 
+	 * @throws Exception
+	 * 
+	 */
+	public void testCommandLineSingleBib() throws Exception {
+
+		// First check conversion from .bib to .xmp
+		File tempBib = File.createTempFile("JabRef", ".bib");
+		FileWriter fileWriter = null;
+		try {
+			fileWriter = new FileWriter(tempBib);
+			fileWriter.write(t1BibtexString());
+			fileWriter.close();
+
+			ByteArrayOutputStream s = new ByteArrayOutputStream();
+			PrintStream oldOut = System.out;
+			System.setOut(new PrintStream(s));
+			XMPUtil.main(new String[] { tempBib.getAbsolutePath() });
+			System.setOut(oldOut);
+			s.close();
+			String xmp = s.toString();
+
+			writeManually(pdfFile, xmp);
+
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
+			assertEquals(1, l.size());
+			assertEquals(t1BibtexEntry(), l.get(0));
+
+		} finally {
+			if (fileWriter != null)
+				fileWriter.close();
+			if (tempBib != null)
+				tempBib.delete();
+		}
+	}
+
+	/**
+	 * 
+	 * 
+	 * @depends XMPUtil.writeXMP
+	 * 
+	 */
+	public void testCommandLineSinglePdf() throws Exception {
+		{
+			// Write XMP to file
+
+			BibtexEntry e = t1BibtexEntry();
+
+			XMPUtil.writeXMP(pdfFile, e, null);
+
+			ByteArrayOutputStream s = new ByteArrayOutputStream();
+			PrintStream oldOut = System.out;
+			System.setOut(new PrintStream(s));
+			XMPUtil.main(new String[] { pdfFile.getAbsolutePath() });
+			System.setOut(oldOut);
+			s.close();
+			String bibtex = s.toString();
+
+			ParserResult result = BibtexParser.parse(new StringReader(bibtex));
+			Collection<BibtexEntry> c = result.getDatabase().getEntries();
+			assertEquals(1, c.size());
+			BibtexEntry x = c.iterator().next();
+
+			assertEquals(e, x);
+		}
+		{
+			// Write XMP to file
+			BibtexEntry e = t1BibtexEntry();
+
+			XMPUtil.writeXMP(pdfFile, e, null);
+
+			ByteArrayOutputStream s = new ByteArrayOutputStream();
+			PrintStream oldOut = System.out;
+			System.setOut(new PrintStream(s));
+			XMPUtil.main(new String[] { "-x", pdfFile.getAbsolutePath() });
+			System.setOut(oldOut);
+			s.close();
+			String xmp = s.toString();
+
+			/* Test minimal syntaxical completeness */
+			assertTrue(0 < xmp.indexOf("xpacket"));
+			assertTrue(0 < xmp.indexOf("adobe:ns:meta"));
+			assertTrue(0 < xmp
+					.indexOf("<bibtex:bibtexkey>canh05</bibtex:bibtexkey>")
+					|| 0 < xmp.indexOf("bibtex:bibtexkey="));
+			assertTrue(0 < xmp.indexOf("<rdf:li>K. Crowston</rdf:li>"));
+			assertTrue(0 < xmp.indexOf("id='W5M0MpCehiHzreSzNTczkc9d'?>")
+					|| 0 < xmp.indexOf("id=\"W5M0MpCehiHzreSzNTczkc9d\"?>"));
+			assertTrue(0 < xmp
+					.indexOf("xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'")
+					|| 0 < xmp
+							.indexOf("xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\""));
+			assertTrue(0 < xmp.indexOf("<rdf:Description"));
+			assertTrue(0 < xmp.indexOf("<?xpacket end='w'?>")
+					|| 0 < xmp.indexOf("<?xpacket end=\"w\"?>"));
+
+			/* Test contents of string */
+			writeManually(pdfFile, xmp);
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
+			assertEquals(1, l.size());
+
+			assertEquals(t1BibtexEntry(), l.get(0));
+		}
+	}
+
+	/**
+	 * Test whether the command-line client can pick one of several entries from
+	 * a bibtex file
+	 * 
+	 * @throws Exception
+	 * 
+	 */
+	public void testCommandLineByKey() throws Exception {
+
+		File tempBib = File.createTempFile("JabRef", ".bib");
+		FileWriter fileWriter = null;
+		try {
+			fileWriter = new FileWriter(tempBib);
+			fileWriter.write(t1BibtexString());
+			fileWriter.write(t2BibtexString());
+			fileWriter.close();
+
+			{ // First try canh05
+				ByteArrayOutputStream s = new ByteArrayOutputStream();
+				PrintStream oldOut = System.out;
+				System.setOut(new PrintStream(s));
+				XMPUtil.main(new String[] { "canh05",
+						tempBib.getAbsolutePath(), pdfFile.getAbsolutePath() });
+				System.setOut(oldOut);
+				s.close();
+
+				// PDF should be annotated:
+				List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
+				assertEquals(1, l.size());
+				assertEquals(t1BibtexEntry(), l.get(0));
+			}
+			{ // Now try OezbekC06
+				ByteArrayOutputStream s = new ByteArrayOutputStream();
+				PrintStream oldOut = System.out;
+				System.setOut(new PrintStream(s));
+				XMPUtil.main(new String[] { "OezbekC06",
+						tempBib.getAbsolutePath(), pdfFile.getAbsolutePath() });
+				System.setOut(oldOut);
+				s.close();
+				// PDF should be annotated:
+				List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
+				assertEquals(1, l.size());
+				assertEquals(t2BibtexEntry(), l.get(0));
+			}
+		} finally {
+			if (fileWriter != null)
+				fileWriter.close();
+
+			if (tempBib != null)
+				tempBib.delete();
+		}
+	}
+
+	/**
+	 * Test whether the command-line client can deal with several bibtex
+	 * entries.
+	 * 
+	 */
+	public void testCommandLineSeveral() throws Exception {
+
+		File tempBib = File.createTempFile("JabRef", ".bib");
+		FileWriter fileWriter = null;
+		try {
+			fileWriter = new FileWriter(tempBib);
+			fileWriter.write(t1BibtexString());
+			fileWriter.write(t3BibtexString());
+			fileWriter.close();
+
+			ByteArrayOutputStream s = new ByteArrayOutputStream();
+			PrintStream oldOut = System.out;
+			System.setOut(new PrintStream(s));
+			XMPUtil.main(new String[] { tempBib.getAbsolutePath(),
+					pdfFile.getAbsolutePath() });
+			System.setOut(oldOut);
+			s.close();
+
+			List<BibtexEntry> l = XMPUtil.readXMP(pdfFile);
+
+			assertEquals(2, l.size());
+
+			BibtexEntry a = l.get(0);
+			BibtexEntry b = l.get(1);
+
+			if (a.getCiteKey().equals("Clarkson06")) {
+				BibtexEntry tmp = a;
+				a = b;
+				b = tmp;
+			}
+
+			BibtexEntry t1 = t1BibtexEntry();
+			BibtexEntry t3 = t3BibtexEntry();
+
+			// Writing and reading will resolve strings!
+			t3.setField("month", "July");
+
+			assertEquals(t1, a);
+			assertEquals(t3, b);
+
+		} finally {
+			if (fileWriter != null)
+				fileWriter.close();
+
+			if (tempBib != null)
+				tempBib.delete();
+		}
+	}
+
+	/**
+	 * Test that readXMP and writeXMP work together.
+	 * 
+	 * @throws Exception
+	 */
+	public void testResolveStrings() throws Exception {
+		ParserResult original = BibtexParser
+				.parse(new StringReader(
+						"@string{ crow = \"Crowston, K.\"}\n"
+								+ "@string{ anna = \"Annabi, H.\"}\n"
+								+ "@string{ howi = \"Howison, J.\"}\n"
+								+ "@string{ masa = \"Masango, C.\"}\n"
+								+ "@article{canh05,"
+								+ "  author = {#crow# and #anna# and #howi# and #masa#},"
+								+ "\n"
+								+ "  title = {Effective work practices for floss development: A model and propositions},"
+								+ "\n"
+								+ "  booktitle = {Hawaii International Conference On System Sciences (HICSS)},"
+								+ "\n"
+								+ "  year = {2005},"
+								+ "\n"
+								+ "  owner = {oezbek},"
+								+ "\n"
+								+ "  timestamp = {2006.05.29},"
+								+ "\n"
+								+ "  url = {http://james.howison.name/publications.html}"
+								+ "\n" + "}"));
+
+		Collection<BibtexEntry> c = original.getDatabase().getEntries();
+		assertEquals(1, c.size());
+
+		BibtexEntry e = c.iterator().next();
+
+		XMPUtil.writeXMP(pdfFile, e, original.getDatabase());
+
+		List<BibtexEntry> l = XMPUtil.readXMP(pdfFile.getAbsoluteFile());
+		assertEquals(1, l.size());
+		BibtexEntry x = l.get(0);
+
+		assertEquals(
+				AuthorList
+						.getAuthorList("Crowston, K. and Annabi, H. and Howison, J. and Masango, C."),
+				AuthorList.getAuthorList(x.getField("author").toString()));
+	}
+
+	/**
+	 * Test that we cannot use encrypted PDFs.
+	 */
+	public void testEncryption() throws Exception {
+
+		// // PDF was created using:
+		//
+		// PDDocument pdf = null;
+		// try {
+		// pdf = new PDDocument();
+		// pdf.addPage(new PDPage()); // Need page to open in Acrobat
+		// pdf.encrypt("hello", "world");
+		// pdf.save("d:/download/encrypted.pdf");
+		// } finally {
+		// if (pdf != null)
+		// pdf.close();
+		// }
+		//			
+
+		try {
+			XMPUtil.readXMP("src/tests/encrypted.pdf");
+			fail();
+		} catch (EncryptionNotSupportedException e) {
+		}
+
+		try {
+			XMPUtil.writeXMP("src/tests/encrypted.pdf", t1BibtexEntry(), null);
+			fail();
+		} catch (EncryptionNotSupportedException e) {
+		}
+	}
+
+	/**
+	 * A better testcase for resolveStrings. Makes sure that also the document
+	 * information and dublin core are written correctly.
+	 * 
+	 * Data was contributed by Philip K.F. H�lzenspies (p.k.f.holzenspies [at] utwente.nl).
+	 * 
+	 * @throws IOException
+	 * @throws FileNotFoundException
+	 * @throws TransformerException
+	 * 
+	 */
+	public void testResolveStrings2() throws FileNotFoundException,
+			IOException, TransformerException {
+
+		ParserResult result = BibtexParser.parse(new FileReader(
+				"src/tests/net/sf/jabref/util/twente.bib"));
+
+		assertEquals("Arvind", result.getDatabase().resolveForStrings(
+				"#Arvind#"));
+
+		AuthorList originalAuthors = AuthorList
+				.getAuthorList("Patterson, David and Arvind and Asanov\\'\\i{}c, Krste and Chiou, Derek and Hoe, James and Kozyrakis, Christos and Lu, S{hih-Lien} and Oskin, Mark and Rabaey, Jan and Wawrzynek, John");
+
+		try {
+			XMPUtil.writeXMP(pdfFile, result.getDatabase().getEntryByKey(
+					"Patterson06"), result.getDatabase());
+
+			// Test whether we the main function can load the bibtex correctly
+			BibtexEntry b = XMPUtil.readXMP(pdfFile).get(0);
+
+			assertEquals(originalAuthors, AuthorList.getAuthorList(b.getField(
+					"author").toString()));
+
+			// Next check from Document Information
+			PDDocument document = PDDocument.load(pdfFile.getAbsoluteFile());
+			try {
+
+				assertEquals(originalAuthors, AuthorList.getAuthorList(document
+						.getDocumentInformation().getAuthor()));
+
+				b = XMPUtil.getBibtexEntryFromDocumentInformation(document
+						.getDocumentInformation());
+				assertEquals(originalAuthors, AuthorList.getAuthorList(b
+						.getField("author").toString()));
+
+				// Now check from Dublin Core
+				PDDocumentCatalog catalog = document.getDocumentCatalog();
+				PDMetadata metaRaw = catalog.getMetadata();
+
+				if (metaRaw == null) {
+					fail();
+				}
+
+				XMPMetadata meta = new XMPMetadata(XMLUtil.parse(metaRaw
+						.createInputStream()));
+				meta.addXMLNSMapping(XMPSchemaBibtex.NAMESPACE,
+						XMPSchemaBibtex.class);
+
+				List<XMPSchema> schemas = meta
+						.getSchemasByNamespaceURI("http://purl.org/dc/elements/1.1/");
+
+				assertEquals(1, schemas.size());
+
+				XMPSchemaDublinCore dcSchema = (XMPSchemaDublinCore) schemas
+						.iterator().next();
+				assertNotNull(dcSchema);
+
+				assertEquals("David Patterson", dcSchema.getCreators().get(0));
+				assertEquals("Arvind", dcSchema.getCreators().get(1));
+				assertEquals("Krste Asanov\\'\\i{}c", dcSchema.getCreators()
+						.get(2));
+
+				b = XMPUtil.getBibtexEntryFromDublinCore(dcSchema);
+				assertEquals(originalAuthors, AuthorList.getAuthorList(b
+						.getField("author").toString()));
+			} finally {
+				document.close();
+			}
+
+		} finally {
+			pdfFile.delete();
+		}
+	}
+
+	/**
+	 * Read the contents of a reader as one string
+	 * 
+	 * @param reader
+	 * @return
+	 * @throws IOException
+	 */
+	public static String slurp(Reader reader) throws IOException {
+		char[] chars = new char[4092];
+		StringBuffer totalBuffer = new StringBuffer();
+		int bytesRead;
+		while ((bytesRead = reader.read(chars)) != -1) {
+			if (bytesRead == 4092) {
+				totalBuffer.append(chars);
+			} else {
+				totalBuffer.append(new String(chars, 0, bytesRead));
+			}
+		}
+		return totalBuffer.toString();
+	}
+}
diff --git a/src/manuals/JabRef-UserManual.lyx b/src/manuals/JabRef-UserManual.lyx
index a11b26e..e9d63f5 100644
--- a/src/manuals/JabRef-UserManual.lyx
+++ b/src/manuals/JabRef-UserManual.lyx
@@ -1,229 +1,229 @@
-#LyX 1.3 created this file. For more info see http://www.lyx.org/
-\lyxformat 221
-\textclass article
-\begin_preamble
-\usepackage{fancyhdr}
-\usepackage{charter}
-\usepackage{bbm} % for symbols
-\usepackage{fullpage}
-\def\FileAuthor{ {\sc Batada, Shepp \& Siegmund} }
-\def\FileTitle{  }
-\fancyhead[L]{\small \FileTitle{}}
-\fancyhead[R]{\small \FileAuthor{}}
-\fancyfoot[L]{\small \today}
-%\pagestyle{fancy}
-%\setstretch{1.8} % table row height
-% \renewcommand{\baselinestretch}{2.0} %2.0} % triplespacing
-%\usepackage[nofiglist,notablist,nomarker]{endfloat}
-%\usepackage{pstricks}
-
-%\beamertemplateshadingbackground{red!5}{structure!5}
-%\usepackage{beamerthemeshadow}
- %\beamertemplatetransparentcovereddynamic
-%\beamertemplatetransparentcovered
-\newcommand{\E}[1]{\mathbf{\mathbbm{E}}\left[#1\right]}
-\newcommand{\V}[1]{\mathbf{Var}\left[#1\right]}
-\newcommand{\N}{\mathcal{N}}
-\newcommand{\ang}{\mathring{A}}
-\renewcommand{\P}[1]{\mathbf{\mathbbm{P}}\bigl(#1\bigr)}
-\usepackage{color}
-\newcommand{\jabref}{ {\color{red}J}ab{\color{blue}R}ef}
-\end_preamble
-\language english
-\inputencoding latin1
-\fontscheme default
-\graphics default
-\paperfontsize 11
-\spacing single 
-\papersize Default
-\paperpackage a4
-\use_geometry 0
-\use_amsmath 1
-\use_natbib 0
-\use_numerical_citations 0
-\paperorientation portrait
-\secnumdepth 4
-\tocdepth 3
-\paragraph_separation indent
-\defskip medskip
-\quotes_language english
-\quotes_times 2
-\papercolumns 1
-\papersides 1
-\paperpagestyle default
-
-\layout Title
-
-
-\begin_inset ERT
-status Collapsed
-
-\layout Standard
-
-\backslash 
-jabref
-\end_inset 
-
-\SpecialChar ~
-(1.2) User Manual 
-\layout Author
-
-Morten Alver and Nizar Batada
-\layout Date
-
-Feb 20, 2004
-\layout Standard
-
-
-\begin_inset LatexCommand \tableofcontents{}
-
-\end_inset 
-
-
-\layout Standard
-
-\layout Standard
-
-
-\begin_inset ERT
-status Collapsed
-
-\layout Standard
-
-\backslash 
-newpage
-\end_inset 
-
-
-\layout Section
-
-Revision
-\layout Enumerate
-
-Initial Draft: Nizar Batada Feb 20, 2004
-\layout Section
-
-About This Guide
-\layout Standard
-
-This manual is a brief introduction to some of the most useful features
- and functions of JabRef.
- Learning this short list of features will enable you to use the JabRef
- efficiently.
- This manual is not an exhaustive list of the capabilities of this software.
- JabRef is a result of merger between BibKeeper and JBibtexManager.
-\layout Standard
-
-Additional Information is available at : http://jabref.sourceforge.net and
- in help\SpecialChar \menuseparator
-Help content from the menu bar.
- 
-\layout Section
-
-Introduction to BibTeX 
-\layout Section
-
-Installation
-\layout Section
-
-Features
-\layout Subsection
-
-Import
-\layout Standard
-
-Following formats are supported.
- 
-\layout Enumerate
-
-Medline (XML) (also Fetch Medline)
-\layout Enumerate
-
-RIS
-\layout Enumerate
-
-Endnote
-\layout Enumerate
-
-Scifinder
-\layout Standard
-
-If you like other formats to be supported, please send an example file and
- put in a request at the sourceforge site.
-\layout Subsection
-
-Export
-\layout Subsection
-
-Editing
-\layout Subsection
-
-Grouping
-\layout Subsection
-
-Defining New Entry Types
-\layout Subsection
-
-Preamble and Strings
-\layout Subsection
-
-External Program
-\layout Section
-
-Customization
-\layout Subsection
-
-Table Display Content
-\layout Subsection
-
-Toolbar
-\layout Subsection
-
-Sidepanel
-\layout Subsection
-
-Appearance
-\layout Enumerate
-
-Fonts (see 
-\begin_inset LatexCommand \ref{sub:How-do-install-fonts}
-
-\end_inset 
-
- for instructions to install new fonts)
-\layout Section
-
-Keyboard Shortcuts
-\layout Section
-
-Limitations and Known Bugs
-\layout Section
-
-Future Additions
-\layout Subsection
-
-Shortcut customization
-\layout Section
-
-Feature Request and Bug Reports
-\layout Section
-
-Developing JabRef
-\layout Section
-
-Acknowledgements
-\layout Section
-
-FAQ
-\layout Subsection
-
-I don't know programing, is there any way I can contribute?
-\layout Subsection
-
-
-\begin_inset LatexCommand \label{sub:How-do-install-fonts}
-
-\end_inset 
-
-How do install new fonts
-\the_end
+#LyX 1.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 221
+\textclass article
+\begin_preamble
+\usepackage{fancyhdr}
+\usepackage{charter}
+\usepackage{bbm} % for symbols
+\usepackage{fullpage}
+\def\FileAuthor{ {\sc Batada, Shepp \& Siegmund} }
+\def\FileTitle{  }
+\fancyhead[L]{\small \FileTitle{}}
+\fancyhead[R]{\small \FileAuthor{}}
+\fancyfoot[L]{\small \today}
+%\pagestyle{fancy}
+%\setstretch{1.8} % table row height
+% \renewcommand{\baselinestretch}{2.0} %2.0} % triplespacing
+%\usepackage[nofiglist,notablist,nomarker]{endfloat}
+%\usepackage{pstricks}
+
+%\beamertemplateshadingbackground{red!5}{structure!5}
+%\usepackage{beamerthemeshadow}
+ %\beamertemplatetransparentcovereddynamic
+%\beamertemplatetransparentcovered
+\newcommand{\E}[1]{\mathbf{\mathbbm{E}}\left[#1\right]}
+\newcommand{\V}[1]{\mathbf{Var}\left[#1\right]}
+\newcommand{\N}{\mathcal{N}}
+\newcommand{\ang}{\mathring{A}}
+\renewcommand{\P}[1]{\mathbf{\mathbbm{P}}\bigl(#1\bigr)}
+\usepackage{color}
+\newcommand{\jabref}{ {\color{red}J}ab{\color{blue}R}ef}
+\end_preamble
+\language english
+\inputencoding latin1
+\fontscheme default
+\graphics default
+\paperfontsize 11
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 1
+\use_natbib 0
+\use_numerical_citations 0
+\paperorientation portrait
+\secnumdepth 4
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
+
+\backslash 
+jabref
+\end_inset 
+
+\SpecialChar ~
+(1.2) User Manual 
+\layout Author
+
+Morten Alver and Nizar Batada
+\layout Date
+
+Feb 20, 2004
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents{}
+
+\end_inset 
+
+
+\layout Standard
+
+\layout Standard
+
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
+
+\backslash 
+newpage
+\end_inset 
+
+
+\layout Section
+
+Revision
+\layout Enumerate
+
+Initial Draft: Nizar Batada Feb 20, 2004
+\layout Section
+
+About This Guide
+\layout Standard
+
+This manual is a brief introduction to some of the most useful features
+ and functions of JabRef.
+ Learning this short list of features will enable you to use the JabRef
+ efficiently.
+ This manual is not an exhaustive list of the capabilities of this software.
+ JabRef is a result of merger between BibKeeper and JBibtexManager.
+\layout Standard
+
+Additional Information is available at : http://jabref.sourceforge.net and
+ in help\SpecialChar \menuseparator
+Help content from the menu bar.
+ 
+\layout Section
+
+Introduction to BibTeX 
+\layout Section
+
+Installation
+\layout Section
+
+Features
+\layout Subsection
+
+Import
+\layout Standard
+
+Following formats are supported.
+ 
+\layout Enumerate
+
+Medline (XML) (also Fetch Medline)
+\layout Enumerate
+
+RIS
+\layout Enumerate
+
+Endnote
+\layout Enumerate
+
+Scifinder
+\layout Standard
+
+If you like other formats to be supported, please send an example file and
+ put in a request at the sourceforge site.
+\layout Subsection
+
+Export
+\layout Subsection
+
+Editing
+\layout Subsection
+
+Grouping
+\layout Subsection
+
+Defining New Entry Types
+\layout Subsection
+
+Preamble and Strings
+\layout Subsection
+
+External Program
+\layout Section
+
+Customization
+\layout Subsection
+
+Table Display Content
+\layout Subsection
+
+Toolbar
+\layout Subsection
+
+Sidepanel
+\layout Subsection
+
+Appearance
+\layout Enumerate
+
+Fonts (see 
+\begin_inset LatexCommand \ref{sub:How-do-install-fonts}
+
+\end_inset 
+
+ for instructions to install new fonts)
+\layout Section
+
+Keyboard Shortcuts
+\layout Section
+
+Limitations and Known Bugs
+\layout Section
+
+Future Additions
+\layout Subsection
+
+Shortcut customization
+\layout Section
+
+Feature Request and Bug Reports
+\layout Section
+
+Developing JabRef
+\layout Section
+
+Acknowledgements
+\layout Section
+
+FAQ
+\layout Subsection
+
+I don't know programing, is there any way I can contribute?
+\layout Subsection
+
+
+\begin_inset LatexCommand \label{sub:How-do-install-fonts}
+
+\end_inset 
+
+How do install new fonts
+\the_end
diff --git a/src/manuals/de/JabRef-UserManual_de.bib b/src/manuals/de/JabRef-UserManual_de.bib
index a8ffc89..3f94d35 100644
--- a/src/manuals/de/JabRef-UserManual_de.bib
+++ b/src/manuals/de/JabRef-UserManual_de.bib
@@ -1,77 +1,77 @@
-This file was created with JabRef 2.2.
-Encoding: ISO8859_1
-
- at PERIODICAL{Fenn2006,
-  author = {Fenn, J�rgen},
-  title = {Managing Citations and Your Bibliography with \bibtex{}},
-  journal = {The Prac\TeX{} Journal},
-  year = {2006},
-  gender = {sm},
-  number = {4},
-  annote = {Kurze Einf�hrung in die Verwaltung von Literaturdaten und die Benutzung
-	von \bibtex{}. Auch f�r Anf�nger geeignet; englisch.},
-  timestamp = {2006-12-09},
-  url = {http://www.tug.org/pracjourn/2006-4/fenn},
-}
-
- at UNPUBLISHED{Markey2005,
-  author = {Markey, Nicolas},
-  title = {Tame the BeaST},
-  note = {\ctan{info\slash{}bibtex\slash{}tamethebeast\slash{}}},
-  month = {6.\,} # mar,
-  year = {2005},
-  annote = {Ausf�hrliches Tutorium rund um Bib\TeX{}, von der Erstellung von
-	bib-Dateien �ber die Programmierung bis hin zu kleinen n�tzlichen
-	Tipps und Tricks und dem "`Missbrauch"' von Bib\TeX{} als Adressbuch
-	oder Glossar~\ldots{}; englisch.},
-  timestamp = {2007-02-01},
-  titleaddon = {The B to X of Bib\TeX}
-}
-
- at UNPUBLISHED{btxdoc,
-  author = {Oren Patashnik},
-  title = {Bib\TeX{}ing},
-  note = {\ctan{biblio\slash{}bibtex\slash{}contrib\slash{}doc\slash{}btxdoc.pdf}},
-  month = {8.\,} # feb,
-  year = {1988},
-  abstract = {Documentation for general {\BibTeX} users},
-  annote = {Einf�hrung in die Benutzung von Bib\TeX{}, vom Autor des Programms
-	selbst; englisch.},
-  timestamp = {2005-11-15}
-}
-
- at UNPUBLISHED{btxhak,
-  author = {Oren Patashnik},
-  title = {Designing Bib\TeX{} Styles},
-  note = {\ctan{biblio\slash{}bibtex\slash{}contrib\slash{}doc\slash{}btxhak.pdf}},
-  month = {8.\,} # feb,
-  year = {1988},
-  abstract = {The part of \BibTeX's documentation that's not meant for general users},
-  annote = {Einf�hrung in die Bib\TeX{}-Programmierung, vom Autor des Programms
-	selbst; englisch.},
-  timestamp = {2005-11-15}
-}
-
- at UNPUBLISHED{Raichle2002,
-  author = {Raichle, Bernd},
-  title = {Tutorium: Einf�hrung in die Bib\TeX{}-Programmierung},
-  url = {http://www.dante.de/dante/events/dante2002/handouts/raichle-bibtexprog.pdf},
-  year = {2002},
-  address = {Erlangen},
-  annote = {Kurze Einf�hrung in den Aufbau einer Bib\TeX{}"=Datei, wobei der
-   Schwerpunkt vor allem auf der Erstellung eines Bib\TeX{}"=Styles
-	(\texttt{.bst}) liegt. Auch die f�r Bib\TeX{} verwendete Programmiersprache
-	UPN (Umgekehrte Polnische Notation) wird erkl�rt; deutsch.},
-  timestamp = {2005-11-15}
-}
-
- at UNPUBLISHED{btxfaq,
-  author = {Shell, Michael and Hoadley, David},
-  title = {\bibtex{} Tips and FAQ},
-  note = {\ctan{biblio\slash{}bibtex\slash{}contrib\slash{}doc\slash{}btxFAQ.pdf}},
-  month = jan,
-  year = {2007},
-  annote = {Allgemeine Hinweise und Antworten auf h�ufig gestellte Fragen rund
-	um \bibtex{}; englisch.}
-}
-
+This file was created with JabRef 2.2.
+Encoding: ISO8859_1
+
+ at PERIODICAL{Fenn2006,
+  author = {Fenn, J�rgen},
+  title = {Managing Citations and Your Bibliography with \bibtex{}},
+  journal = {The Prac\TeX{} Journal},
+  year = {2006},
+  gender = {sm},
+  number = {4},
+  annote = {Kurze Einf�hrung in die Verwaltung von Literaturdaten und die Benutzung
+	von \bibtex{}. Auch f�r Anf�nger geeignet; englisch.},
+  timestamp = {2006-12-09},
+  url = {http://www.tug.org/pracjourn/2006-4/fenn},
+}
+
+ at UNPUBLISHED{Markey2005,
+  author = {Markey, Nicolas},
+  title = {Tame the BeaST},
+  note = {\ctan{info\slash{}bibtex\slash{}tamethebeast\slash{}}},
+  month = {6.\,} # mar,
+  year = {2005},
+  annote = {Ausf�hrliches Tutorium rund um Bib\TeX{}, von der Erstellung von
+	bib-Dateien �ber die Programmierung bis hin zu kleinen n�tzlichen
+	Tipps und Tricks und dem "`Missbrauch"' von Bib\TeX{} als Adressbuch
+	oder Glossar~\ldots{}; englisch.},
+  timestamp = {2007-02-01},
+  titleaddon = {The B to X of Bib\TeX}
+}
+
+ at UNPUBLISHED{btxdoc,
+  author = {Oren Patashnik},
+  title = {Bib\TeX{}ing},
+  note = {\ctan{biblio\slash{}bibtex\slash{}contrib\slash{}doc\slash{}btxdoc.pdf}},
+  month = {8.\,} # feb,
+  year = {1988},
+  abstract = {Documentation for general {\BibTeX} users},
+  annote = {Einf�hrung in die Benutzung von Bib\TeX{}, vom Autor des Programms
+	selbst; englisch.},
+  timestamp = {2005-11-15}
+}
+
+ at UNPUBLISHED{btxhak,
+  author = {Oren Patashnik},
+  title = {Designing Bib\TeX{} Styles},
+  note = {\ctan{biblio\slash{}bibtex\slash{}contrib\slash{}doc\slash{}btxhak.pdf}},
+  month = {8.\,} # feb,
+  year = {1988},
+  abstract = {The part of \BibTeX's documentation that's not meant for general users},
+  annote = {Einf�hrung in die Bib\TeX{}-Programmierung, vom Autor des Programms
+	selbst; englisch.},
+  timestamp = {2005-11-15}
+}
+
+ at UNPUBLISHED{Raichle2002,
+  author = {Raichle, Bernd},
+  title = {Tutorium: Einf�hrung in die Bib\TeX{}-Programmierung},
+  url = {http://www.dante.de/dante/events/dante2002/handouts/raichle-bibtexprog.pdf},
+  year = {2002},
+  address = {Erlangen},
+  annote = {Kurze Einf�hrung in den Aufbau einer Bib\TeX{}"=Datei, wobei der
+   Schwerpunkt vor allem auf der Erstellung eines Bib\TeX{}"=Styles
+	(\texttt{.bst}) liegt. Auch die f�r Bib\TeX{} verwendete Programmiersprache
+	UPN (Umgekehrte Polnische Notation) wird erkl�rt; deutsch.},
+  timestamp = {2005-11-15}
+}
+
+ at UNPUBLISHED{btxfaq,
+  author = {Shell, Michael and Hoadley, David},
+  title = {\bibtex{} Tips and FAQ},
+  note = {\ctan{biblio\slash{}bibtex\slash{}contrib\slash{}doc\slash{}btxFAQ.pdf}},
+  month = jan,
+  year = {2007},
+  annote = {Allgemeine Hinweise und Antworten auf h�ufig gestellte Fragen rund
+	um \bibtex{}; englisch.}
+}
+
diff --git a/src/manuals/de/JabRef-UserManual_de.tex b/src/manuals/de/JabRef-UserManual_de.tex
index b08216d..2869c05 100644
--- a/src/manuals/de/JabRef-UserManual_de.tex
+++ b/src/manuals/de/JabRef-UserManual_de.tex
@@ -1,3201 +1,3201 @@
-%%%%% To do %%%%%
-% DW 2007-12-03
-% - Wiki-Seite 'Translating JabRef' �bersetzen und einbinden
-% - [2.4 beta] Plugin.html erg�nzen 
-% - [2.4 beta?] SQLExport.html erg�nzen
-
-\documentclass[
-  fontsize=10pt,
-	headings=normal,
-	paper=a5,
-	pagesize,
-	ngerman
-]{scrartcl}
-\usepackage[T1]{fontenc}
-\usepackage[latin1]{inputenc}
-\usepackage{textcomp}
-\setcounter{secnumdepth}{2}
-\setcounter{tocdepth}{4}
-\usepackage{xspace}
-
-%%%%% author, version of file %%%%%
-\newcommand{\versiondate}{26.\,1.\,2010}%
-\def\FileAuthor{Dominik Wa�enhoven}
-\def\FileTitle{\jabrefversion{} Benutzerhandbuch}
-
-%%%%% Packages %%%%%
-\usepackage{array}
-\usepackage{longtable}
-\usepackage{amsmath}
-\usepackage{graphicx}
-\usepackage{setspace}
-\usepackage{amssymb}
-\usepackage{hanging}
-
-\makeatletter
-%%%%% LyX command %%%%%
-\providecommand{\LyX}{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\@\xspace}
-
-%%%%% Listings %%%%%
-\usepackage{listings}
-\lstset{%
-  frame=none,
-  %backgroundcolor=\color{pyellow},
-  language=[LaTeX]TeX,
-  basicstyle=\ttfamily,%\small,
-  commentstyle=\color{red},
-  keywordstyle=, % LaTeX-Befehle werden nicht fett dargestellt
-  numbers=none,%left/right
-  %numberstyle=\tiny\lnstyle,
-  %numbersep=5pt,
-  %numberblanklines=false,
-  breaklines=true,
-  %caption=\lstname,
-  xleftmargin=25pt,
-  xrightmargin=20pt,
-  escapeinside={(*}{*)},
-  belowskip=\medskipamount,
-  prebreak=\mbox{$\hookleftarrow$}% "geklaut" vom scrguide (KOMA-Script)
-}
-
-%%%%% Environment "revhist" (for revision history) %%%%%
-\newenvironment{revhist}[1]
-    {\subsection*{#1}
-     \list{--}{\setlength\itemsep{0pt}\setlength{\parsep}{0pt}}}
-    {\endlist}
-
-%%%%% PDF 1.2 for Acrobat 3 onwards %%%%%
-\pdfoptionpdfminorversion 2
-
-%%%%% Colors %%%%%
-\usepackage[dvipsnames]{xcolor}
-\definecolor{dkblue}{rgb}{0,0.1,0.5} % dark blue
-\definecolor{dkred}{rgb}{0.66,0.04,0.04} % dark red
-\definecolor{pyellow}{rgb}{1,0.97,0.75} % pale yellow
-
-%%%%% New commands %%%%%
-%%% JabRef "logo"
-\DeclareRobustCommand{\jabref}{%
-  \texorpdfstring{% TeX string
-	  \raisebox{-.32ex}{\color{dkred}J}\kern-.06em%
-	    \hbox{$\m at th$% %% force math size calculations
-	          \csname S@\f at size\endcsname
-	          \fontsize\sf at size\z@
-	          \math at fontsfalse\selectfont
-	          \color{orange}A\kern-.025emB}\-%
-	  \hbox{\kern-.06em\-R\hspace{-.08em}%
-	    \raisebox{.16ex}{$\m at th$% %% force math size calculations
-	          \csname S@\f at size\endcsname
-	          \fontsize\sf at size\z@
-	          \math at fontsfalse\selectfont
-	          E\kern-.025emF}}\xspace}%
-	  {JabRef\xspace}% PDF string
-}
-
-%%% version number
-\newcommand{\versionnr}{\texorpdfstring{2.4}{2.4}} %
-%%% JabRef logo with version nr
-\newcommand{\jabrefversion}{\jabref~\versionnr}
-%%% BibTeX logo
-\newcommand{\bibtex}{\texorpdfstring{Bib\kern-.125em\TeX\xspace}{BibTeX}}
-%%% for Menu references
-\newcommand{\menu}[1]{\texorpdfstring{{\color{dkred}\textit{#1}}}{#1}}
-%%% Menu separator
-\newcommand{\msep}{{\color{dkred}\textit{\guilsinglright}}\xspace}
-%%% yellow box with dark blue text
-\newcommand{\tip}[2][Tipp: ]{%
-  \begin{center}%
-  \colorbox{pyellow}{\parbox{0.85\textwidth}{%
-    \color{dkblue}\textit{#1}#2}}%
-  \end{center}%
-}%
-
-\newcommand{\verfasser}[1]{%
-  \begin{flushright}%
-  \colorbox{pyellow}{\parbox{0.7\textwidth}{%
-    \color{dkblue}\textit{Dieser Abschnitt stammt von #1}}}%
-  \end{flushright}%
-}%
-
-%%% for the FAQ 
-\newcounter{faq}
-\newcommand{\faq}[2]{\refstepcounter{faq}%
-  \medskip\noindent\colorbox{pyellow}{\parbox{0.9\textwidth}{%
-    \hangpara{0.11\textwidth}{1}%
-    \color{dkblue}Frage \thefaq: \textit{#1}}}\par\smallskip%
-  \begin{hangparas}{0.11\textwidth}{0}%
-    #2\par%
-  \end{hangparas}
-}%
-
-%%% for CTAN references
-\newcommand{\ctan}[1]{%
-  {\textsc{ctan}: \color{dkred}#1}%
-}
-
-%%%%% Headings %%%%%
-\usepackage{scrpage2}
-\pagestyle{scrheadings}
-\ihead{\FileTitle{} (\versiondate{})}
-\chead{}
-\ohead{\headmark}
-\ifoot{}
-\cfoot{\pagemark}
-\ofoot{}
-\automark[section]{section}
-
-%%%%% Fonts %%%%%
-\usepackage{charter}
-\addtokomafont{sectioning}{\rmfamily} % Headings with serifs
-\renewcommand{\headfont}{\normalfont\itshape} % Headlines italic, not slanted ***
-\usepackage[scaled=.83]{beramono}
-
-%%%%% Page Dimensions %%%%%
-\usepackage{typearea}
-\typearea{calc}
-
-%%%%% Other stuff %%%%%
-\deffootnote{1.5em}{1em}{\makebox[1.5em][l]{\thefootnotemark}}
-\usepackage{microtype} % micro typography
-
-%%%%% Mini TOCs %%%%%
-\usepackage{minitoc}
-\mtcsetrules{secttoc}{off}
-%\mtcsetdepth{secttoc}{3}
-\mtcsetfont{secttoc}{subsection}{}
-%\mtcsettitle{secttoc}{In diesem Abschnitt}
-%\mtcsettitlefont{secttoc}{\itshape}
-
-%%%%% Language %%%%%
-\usepackage{babel}
-
-%%%%% Bibliography %%%%%
-\usepackage{jurabib}
-\jurabibsetup{%
-  annote=true,
-  authorformat=year,
-  dotafter=bibentry
-}
-\renewcommand{\biblnfont}{}			% Autoren-Nachnamen (Standard: fett)
-\renewcommand{\bibfnfont}{}			% Autoren-Vornamen (Standard: fett)
-\renewcommand{\bibelnfont}{}			% Hrsg-Nachnamen (Standard: fett)
-\renewcommand{\bibefnfont}{}			% Hrsg-Vornamen (Standard: fett)
-\renewcommand{\bibtfont}{\textit}	% Titel (B�cher)
-\renewcommand{\bibbtfont}{\textit}	% Titel (Sammelwerke)
-\renewcommand{\bibjtfont}{\textit}	% Titel (Zeitschriften)
-\renewcommand{\bibpldelim}{(}			% runde Klammern bei...
-\renewcommand{\bibprdelim}{)}			% ...Zeitschriften (Jahr)
-\renewcommand{\ajtsep}{}				% kein Komma nach Zs-Titeln
-\renewcommand{\biburlprefix}{\jblangle\textsc{url: }}	% Klammer und Text vor einer URL (Standard: "URL: ")
-
-\renewcommand{\bib at heading}{\addsec[Literaturverzeichnis]{Kommentiertes Literaturverzeichnis}}
-
-%%%%% Hyperref %%%%%
-\usepackage{hyperref}
-\hypersetup{%
-breaklinks=true,%
-colorlinks=true,%
-linkcolor=dkblue,%
-urlcolor=dkblue,%
-citecolor=dkblue,%
-pdftitle={JabRef \versionnr{} Benutzerhandbuch},%
-pdfsubject={Einf�hrung in die Benutzung von JabRef},%
-pdfkeywords = {BibTeX, Bibliographie, Literaturverwaltung},%
-pdfauthor={\FileAuthor},%
-pdfstartview=FitH,%
-bookmarksopen=true,%
-bookmarksopenlevel=1,%
-}
-\urlstyle{rm}
-
-\hyphenation{
-LaTeX
-BibTeX
-Da-tei-na-men
-Me-n�-be-feh-le
-For-mat-erken-nung% verhindert Trennung "Formater-kennung"
-Werk-zeug-leis-te
-}
-
-\makeatother
-
-%%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%%
-\begin{document}
-
-\subject{\includegraphics[scale=.5]{../../images/JabRef-icon-48}}
-
-
-\title{\jabrefversion{}\\
-Benutzerhandbuch}
-
-
-\author{Dominik Wa�enhoven\\
-{\normalsize (\href{mailto:domwass at users.sourceforge.net}{domwass at users.sourceforge.net})}}
-
-
-\date{\small \versiondate}
-
-\maketitle
-
-\begin{abstract}
-\jabref ist eine grafische Java-Anwendung zur Bearbeitung von \bibtex{}-Dateien
-(.bib). Mit \jabref k�nnen Literaturangaben in Gruppen organisiert
-und mit einem einfachen Klick die Ansicht auf eine einzelne Gruppe,
-eine Schnittmenge von Gruppen oder die Gesamtmenge mehrerer Gruppen
-eingegrenzt werden. \jabref kann Literaturangaben sortieren (f�r
-alle Standard-\bibtex{}-Felder) und automatisch \bibtex{}-Keys erzeugen.
-Auch Links zu PDF-Dateien oder Webseiten k�nnen mit \jabref einfach
-erstellt werden.
-
-\jabref kann verschiedene Dateiformate importieren und exportieren,
-au�erdem k�nnen die Exportfilter angepasst werden. \jabref kann
-auch von der Kommandozeile gestartet werden, um von einem Importformat
-in ein Exportformat zu konvertieren, ohne die grafische Benutzeroberfl�che
-zu starten.
-\end{abstract}
-\begin{quote}
-\begin{spacing}{0.7}
-\begin{center}{\scriptsize Copyright \textcopyright{} 2005--2010, Dominik
-Wa�enhoven}
-\end{center}
-{\scriptsize Dieses Handbuch steht unter einer Creative Commons Namensnennung"=Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz (CC-by-sa). Die Lizenzbedingungen k�nnen unter
-\href{http://creativecommons.org/licenses/by-sa/3.0/de/}{http://creativecommons.org/licenses/by-sa/3.0/de}
-eingesehen werden.\par}\end{spacing}
-
-\end{quote}
-\thispagestyle{empty}
-
-\newpage
-\dosecttoc[e]
-\faketableofcontents{}
-
-\newpage
-
-\section{Einleitung}
-\secttoc
-
-\subsection{�ber dieses Handbuch}\label{subsec:about}
-
-Dieses Handbuch will eine kurze Einf�hrung zu den n�tzlichsten Funktionen
-von \jabref bieten, ohne dabei eine ersch�pfende Beschreibung aller
-Funktionalit�ten dieser Software zu liefern. \emph{}\jabref ist
-das Ergebnis der Verschmelzung von \emph{BibKeeper} und \emph{JBibtexManager}.
-Weitere Informationen gibt es im Programm selbst unter \menu{Hilfe} \msep{} \menu{Inhalt}
-sowie im Internet unter \url{http://jabref.sourceforge.net}. Wer dann immer noch keine Antwort auf seine Frage oder keine L�sung zu seinem Problem hat, kann �ber die Foren oder die Mailingliste auf der Projektseite bei Sourceforge weitere Hilfe bekommen (siehe dazu den Abschnitt \nameref{sec:faq}).
-
-Die Anleitungen basieren auf den Hilfeseiten des Programms. Da dieses
-Handbuch und die Hilfeseiten unabh�ngig voneinander gepflegt und aktualisiert
-werden, m�ssen die Beschreibungen jedoch nicht immer �bereinstimmen.
-Im Zweifel sind die Hilfeseiten des Programms aktueller als die hier
-vorgelegte Beschreibung.
-
-Am Anfang jedes Abschnitts sollte~(!) zun�chst stehen, wie man zur
-entsprechenden Funktion gelangt (d.\,h. �ber welches Men� und mit
-welchem Tastenk�rzel). Men�-Eintr�ge werden in einer kursiven, dunkelroten
-Schrift dargestellt (Beispiel: \menu{Men�} \msep{} \menu{Untermen�}).
-Besondere Hinweise und Tipps werden in einem gelb hinterlegten Kasten
-mit dunkelblauer Schrift dargestellt. Hyperlinks sind ebenfalls dunkelblau
-und anklickbar~-- das gilt sowohl f�r die Navigation innerhalb des
-Dokuments als auch f�r Links ins Internet.
-
-Wenn Ihnen in diesem Handbuch Fehler auf"|fallen oder wenn Sie Anregungen zum Handbuch haben, w�rde ich mich �ber eine kurze Nachricht per \href{mailto:domwass at users.sourceforge.net}{E-Mail} freuen. �ber den Stand und die einzelnen Versionen dieses Handbuchs gibt der Abschnitt ">\nameref{RevisionHistory}"< Auskunft.
-
-\subsection{Einf�hrung in \bibtex{}}
-
-\label{BibtexHelp}\tip[]{\jabref hilft Ihnen bei der Arbeit mit
-Ihren \bibtex{}-Dateien, aber es m�ssen dennoch Regeln beachtet werden,
-wenn Sie Ihre Eintr�ge bearbeiten. Nur so kann sichergestellt werden,
-dass \bibtex{} Ihre Datei richtig verarbeiten kann.}
-
-\noindent Im Folgenden k�nnen nur einige allgemeine Hinweise gegeben werden. Ausf�hrlichere Einf�hrungen und weitere Erl�uterungen zu \bibtex{} finden Sie bei den im \hyperlink{bibliography}{kommentierten Literaturverzeichnis} aufgef�hrten Beitr�gen.
-
-\subsubsection{\bibtex{}-Eintragstypen}
-\label{Eintragstypen}
-Je nachdem, ob sie ein Buch, einen Zeitschriftenartikel, einen Sammelband oder ein anderes Dokument referenzieren m�chten, h�lt \bibtex{} unterschiedliche Eintragstypen bereit. Hier folgt eine kurze Aufstellung der meist gebrauchten Eintragstypen.\footnote{Vgl. \cite[12--17]{Markey2005}; \cite[7--9]{btxdoc}.} Manche Paktete (wie ">jurabib"<) stellen weitere Eintragstypen zur Verf�gung, die Sie nat�rlich auch in \jabref verwenden k�nnen (mehr dazu im Abschnitt \nameref{CustomEntriesHelp}) [...]
-
-\begin{itemize}
-\item \emph{@article}\\
-Ein Artikel in einer Zeitschrift.
-\item \emph{@book}\\
-Ein Buch, von einem Verlag ver�ffentlicht.
-\item \emph{@booklet}\\
-Ein gedrucktes und gebundenes Buch ohne Verlag.
-\item \emph{@conference}\\
-Siehe \emph{@inproceedings}
-\item \emph{@inbook}\\
-Ein Teil eines Buches, z.\,B. ein Kapitel oder Abschnitt.
-\item \emph{@incollection}\\
-Ein Beitrag aus einem Buch, z.\,B. einem Sammelband.
-\item \emph{@inproceedings}\\
-Ein Artikel aus einem Tagungsbericht, der nicht zwangsl�ufig in einem Verlag erschienen ist.
-\item \emph{@manual}\\
-Eine Dokumentation oder ein Handbuch.
-\item \emph{@mastersthesis}\\
-Eine Diplom-/Magisterarbeit.
-\item \emph{@misc}\\
-Dieser Typ kann benutzt werden, wenn nichts anderes passt.
-\item \emph{@phdthesis}\\
-Eine (unver�ffentlichte) Dissertation.
-\item \emph{@proceedings}\\
-Ein Tagungsbericht.
-\item \emph{@techreport}\\
-Von einer Universit�t oder Institution (normalerweise in einer Reihe) ver�ffentlichter Bericht.
-\item \emph{@unpublished}\\
-Ein Dokument mit Autor und Titel, unver�ffentlicht.
-\end{itemize}
-
-\subsubsection{\bibtex{}-Felder}
-
-Es gibt viele unterschiedliche Felder in \bibtex{} und einige zus�tzliche Felder, die Sie in \jabref einsetzen k�nnen.
-Grunds�tzlich k�nnen Sie \LaTeX{}-Befehle in Feldern, die Text beinhalten, einsetzen. \bibtex{} wird Ihr Literaturverzeichnis automatisch formatieren und je nach \bibtex{} style (Stildatei .bst) Gro�buchstaben verkleinern. Um sicherzustellen, dass Anfangsbuchstaben gro� bleiben, m�ssen Sie die W�rter in geschweifte Klammern einschlie�en, wie im Wort \{Belgien\}.\footnote{Die meisten deutschen \bibtex{}-Stile behalten die Gro�buchstaben ohnehin bei.}
-
-Hinweise zu einigen Feldtypen:
-\begin{itemize}
-\item \emph{Bibtexkey}\\
-Eine eindeutige Bezeichnung, um sich in \LaTeX{}-Dokumenten auf den Eintrag beziehen zu k�nnen. Beachten Sie, dass der Bibtexkey genau mit dem Verweis im \LaTeX{}-Dokument �bereinstimmen muss (auch die Gro�-/Kleinschreibung).
-  \item \emph{address}\\
-    Der Ort des \emph{Verlags} oder einer anderen Institution.
-  \item \emph{annote}\\
-    Eine Anmerkung.
-Dieses Feld wird von den Standard-Bibliographiestilen nicht verwendet, kann aber bei einigen Stilen benutzt werden, um eine kommentierte Literaturliste zu erstellen.
-  \item \emph{author}\\
-    Dieses Feld sollte alle Autoren Ihres Eintrags enthalten. Die Namen werden durch das Wort \texttt{and} getrennt, auch wenn es mehr als zwei Autoren gibt. Jeder Name kann in zwei gleichwertigen Formen notiert werden:
-\begin{itemize}
-\item Donald E. Knuth \emph{oder} Knuth, Donald E.
-\item Eddie van Halen \emph{oder} van Halen, Eddie
-\end{itemize}
-Die zweite Form sollte f�r Autoren mit zwei oder mehr Nachnamen benutzt werden, um zwischen dem mittleren und dem Nachnamen zu unterscheiden.
-  \item \emph{booktitle}\\
-    Der Titel eines Buches, aus dem ein Teil zitiert wird. Falls Sie ein Buch zitieren wollen, nehmen Sie f�r den Titel stattdessen das \texttt{title}-Feld.
-  \item \emph{chapter}\\
-    Eine Kapitelnummer (oder Abschnittsnummer oder sonstige Nummer).
-  \item \emph{crossref}\\
-    Der \texttt{key} eines Eintrags, auf den ein Querverweis gesetzt wird. Damit lassen sich beispielsweise die Daten eines Sammelbandes in einem Eintrag f�r einen Aufsatztitel wiederverwenden, ohne sie bei jedem Aufsatztitel explizit einzutragen. Die Funktionalit�t von \texttt{crossref} ist jedoch nicht in jedem Fall praktikabel.
-  \item \emph{edition}\\
-    Die Auflage eines Buchs, z.\,B. \texttt{Zweite}. Die Ordnungszahl sollte mit einem Gro�buchstaben beginnen; sie wird von den Standardstilen gegebenenfalls in Kleinbuchstaben umgewandelt. Manche Stile verlangen hier eine Ziffer.
-  \item \emph{editor}\\
-    Dieses Feld ist analog zu dem \emph{author}-Feld.
-Falls zus�tzlich ein \texttt{author}-Feld angegeben wird, bezeichnet das \texttt{editor}-Feld den Herausgeber des Buches oder des Sammelbandes, in dem die referenzierte Literatur erschienen ist.
-  \item \emph{howpublished}\\
-    Die Art, wie ein Werk ver�ffentlicht wurde (meist au�erhalb eines Verlags). Das erste Wort sollte mit einem Gro�buchstaben beginnen.
-  \item \emph{institution}\\
-    Die f�rdernde Institutions eines technischen Reports.
-  \item \emph{journal}\\
-    Der Name einer Zeitschrift.
-Mit Hilfe von ">Strings"< k�nnen Zeitschriftentitel abgek�rzt werden. Zum Erstellen eines solchen Strings k�nnen Sie den \nameref{StringEditorHelp} benutzen oder die Funktionalit�t zur \nameref{JournalAbbreviations} %Abk�rzung von Zeitschriftentiteln 
-verwenden.
-  \item \emph{key}\\
-    Dieses Feld wird zur Sortierung, zur Erstellung von Labels (falls kein \texttt{author} vorhanden ist) und f�r Querverweise (\texttt{crossref}) verwendet. Verwechseln Sie dieses Feld nicht mit dem \texttt{Bibtexkey}, der f�r die \texttt{\textbackslash cite}-Kommandos gebraucht wird und am Anfang jedes Eintrags erscheint (im \bibtex{}"=Quelltext).
-  \item \emph{month}\\
-    Der Monat, in dem ein Werk ver�ffentlicht oder geschrieben wurde. Benutzen Sie am besten die englischen Abk�rzungen (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec).
-  \item \emph{note}\\
-    Zus�tzliche Informationen. Das erste Wort sollte mit einem Gro�buchstaben beginnen.
-  \item \emph{number}\\
-Die Nummer einer Zeitschrift, eines technischen Reports oder eines Bandes innerhalb einer Reihe (\texttt{series}). Zeitschriften haben oft eine Band- und Heftz�hlung, der Band entspricht dem \texttt{volume}-, das Heft dem \texttt{number}-Eintrag.
-  \item \emph{organization}\\
-    Die Organisation, die einen Konferenzband f�rdert.
-  \item \emph{pages}\\
-    Die Seitenzahl(en) oder der Seitenzahlbereich, z.\,B. \texttt{42-111} oder \texttt{7,41, 73-97} or \texttt{43+} (das \texttt{+} deutet auf folgende Seiten, die nicht einen einfachen Bereich umfassen).
-Ein einfacher Bindestrich (wie in \texttt{7-33}) wird in einen doppelten Bindestrich (\texttt{-{-}}) verwandelt, der in der Ausgabe als bis-Strich erscheint (also 7--33).
-  \item \emph{publisher}\\
-    Der Name des Verlags.
-  \item \emph{school}\\
-    Der Name einer Universit�t, an der eine Abschlussarbeit~-- z.\,B. eine Dissertation (\texttt{phdthesis}) oder Magisterarbeit (\texttt{mastersthesis})~-- geschrieben wurde.
-  \item \emph{series}\\
-    Der Name einer Reihe, in der ein Buch erschienen ist.
-Falls die B�cher einer Reihe nummeriert sind, wird die entsprechende Nummer im Feld \texttt{number} angegeben.
-  \item \emph{title}\\
-    Der Titel des Werkes. Die Gro�- und Kleinschreibung kann von den Bibliographiestilen und der benutzten Sprache abh�ngig sein (wobei sie mit deutschen Bibliographiestilen beibehalten wird). Worte, die auch bei Verwendung englischer Bibliographiestile gro� geschrieben werden sollen, m�ssen in geschweifte Klammern eingefasst werden (z.\,B. \texttt{A \{German\} title}).
-  \item \emph{type}\\
-    Der Typ eines technischen Reports, z.\,B. ">Research Note"<. Bei \emph{jurabib} wird dieses Feld auch f�r den Typ einer Abschlussarbeit verwendet.
-  \item \emph{volume}\\
-    Der Band (Jahrgang) einer Zeitschrift oder der Band eines Buches in einem mehrb�ndigen Werk.
-  \item \emph{year}\\
-    Das Jahr der Ver�ffentlichung (oder bei einem unver�ffentlichten Werk das Jahr, in dem es geschrieben wurde). Normalerweise sollte im \texttt{year}-Feld nur eine vierstellige Zahl stehen, z.\,B. \texttt{1984}. Die Standardstile k�nnen aber auch mit \texttt{year}-Eintr�gen umgehen, deren letzte vier Zeichen (ausgenommen Satzzeichen) Ziffern sind, beispielsweise \texttt{(um 1984)}.
-    Dieses Feld wird f�r die meisten Eintragstypen ben�tigt.
-\end{itemize}
-
-\subsubsection{Weitere Felder}
-
-Bibliographie-Stile f�r \bibtex{} wurden von vielen Leuten entwickelt,
-und einige haben weitere Felder erstellt. Es folgt eine kleine Auswahl.
-
-Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von \jabref unterst�tzt, k�nnen aber eingebunden werden (mehr dazu im Abschnitt \nameref{CustomEntriesHelp}).
-
-\begin{itemize}
-  \item \emph{affiliation*}\\
-    Die Zugeh�rigkeit eines Autors.
-  \item \emph{abstract}\\
-    Die Zusammenfassung eines Werks.
-  \item \emph{contents*}\\
-    Ein Inhaltsverzeichnis.
-  \item \emph{copyright*}\\
-    Copyright-Informationen.
-  \item \emph{doi}\\
-    Der \emph{Digital Object Identifier} ist eine permanente Kennung von Dokumenten.
-  \item \emph{eid}\\
-    Der EID \emph{(Electronic identifier)} wird f�r elektronische Zeitschriften benutzt, die auch im Druck erscheinen. Mit dieser Nummer, die die Seitenzahlen ersetzt, l�sst sich der Artikel in der gedruckten Ausgabe finden. Der EID wird manchmal auch \emph{citation number} genannt.
-  \item \emph{ISBN*}\\
-    Die Internationale Standardbuchnummer.
-  \item \emph{ISSN*}\\
-    Die Internationale Standardseriennummer (f�r Zeitschriften).
-  \item \emph{keywords}\\
-    Stichworte~-- sie k�nnen in \jabref gut zum Gruppieren verwendet werden.
-  \item \emph{language*}\\
-    Die Sprache des Werks.
-  \item \emph{location*}\\
-    Der Ort, der mit einem Werk in Verbindung steht, z.\,B. die Stadt, in der eine Konferenz stattgefunden hat.
-  \item \emph{LCCN*}\\
-    Die \emph{Library of Congress Call Number}.  Das Feld kann auch \texttt{lib-congress} hei�en.
-  \item \emph{mrnumber*}\\
-    Die \emph{Mathematical Reviews}-Nummer.
-  \item \emph{price*}\\
-    Der Preis.
-  \item \emph{size*}\\
-    Die physische Gr��e eines Dokuments.
-  \item \emph{url}\\
-    Der \emph{Uniform Resource Locator} (URL, ">einheitlicher Quellenanzeiger"<), der auf eine Webseite im Internet verweist.
-  \item \emph{urldate}\\
-    Das Datum, an dem eine Webseite zuletzt besucht wurde.
-\end{itemize}
-
-
-\clearpage 
-\section{Installation}
-\secttoc
-
-\subsection{System-Voraussetzungen}
-\label{subsec:System-Voraussetzungen}
-\jabref ist in Java programmiert und somit betriebssystemunabh�ngig,
-kann prinzipiell also unter Windows, Mac OS X, Linux und anderen UNIX-Systemen
-betrieben werden. Voraussetzung ist allerdings, dass die \emph{Java
-Virtual Machine} mindestens in der Version~1.5 installiert ist.\footnote{Bis zur Version 2.2 von \jabref reichte Java~1.4.2 aus.}
-Sie ist kostenlos und kann unter \url{http://java.sun.com/} heruntergeladen
-werden. Im Normalfall sollte das \emph{Java Runtime Environment} (JRE) ausreichen;
-nur wenn Sie \jabref kompilieren m�chten, ben�tigen Sie das \emph{Java
-Development Kit} (JDK).
-
-
-\subsection{Windows}
-
-
-\subsubsection{Installer (msi)}
-
-\jabref gibt es im Windows Installer-Format (\texttt{.msi}). Ein
-Doppelklick auf die MSI-Datei installiert \jabref und f�gt dem
-Startmen� eine Verkn�pfung hinzu. Falls Java nicht installiert ist,
-wird eine Warnmeldung ausgegeben.%
-\footnote{Die Windows-Installation wurde von Dale Visser erstellt, der dazu
-die folgenden \emph{Open-Source-Tools} benutzt hat: JSmooth, ein \texttt{.exe}
-wrapper f�r Java-Anwendungen (\url{http://jsmooth.sf.net/}); Wix,
-ein Tool zum Kompilieren von MSI-Dateien aus einer XML-Spezifikation
-(\url{http://wix.sf.net/}).%
-}
-
-
-\subsubsection{Batch-Datei (jar)}
-\label{subsub:jar}
-Wenn Sie die ausf�hrbare jar-Datei (\texttt{.jar}) heruntergeladen
-haben, probieren Sie zun�chst, ob ein Doppelklick darauf das Programm
-startet~-- dies funktioniert zumindest auf einigen Systemen. Falls
-\jabref nicht direkt startet (Windows also nicht wei�, was es mit
-einer jar-Datei anfangen soll), fahren Sie folgenderma�en fort:
-
-Erstellen Sie in dem Ordner, in dem Sie die Datei \emph{JabRef.jar}
-abgelegt haben, eine Batch-Datei mit dem Namen \emph{jabref-start.bat}.
-Diese Datei soll nur eine Zeile enthalten:
-
-\begin{lstlisting}
-start javaw -jar JabRef.jar
-\end{lstlisting}
-Mit einem Doppelklick auf die Batch-Datei starten Sie \jabref.
-
-
-\subsection{Starten von der Kommandozeile}\label{subsec:Starten-Kommandozeile}
-
-\begin{enumerate}
-\item mit dem \emph{Java Runtime Environment}:
-\begin{lstlisting}
-jre -new -jar <Pfad zur jar-Datei>
-\end{lstlisting}
-oder
-\begin{lstlisting}
-jrew -new -jar <Pfad zur jar-Datei>
-\end{lstlisting}
-\item mit dem \emph{Java Development Kit}:
-\begin{lstlisting}
-java -jar <Pfad zur jar-Datei>
-\end{lstlisting}
-\end{enumerate}
-Es wird empfohlen, \jabref mit Java 1.5 zu benutzen und die Option \lstinline{-Dswing.aatext=true}
-vor der Option \lstinline{-jar} einf�gen, um das Benutzen von Anti-Alias-Schriften
-im Programm zu erm�glichen.
-
-Die jar-Datei, die \jabref enth�lt, kann entpackt werden mit den
-Kommandos 
-\begin{lstlisting}
-jar xf <Pfad zur jar-Datei>
-\end{lstlisting}
-bzw. 
-\begin{lstlisting}
-jar xf <Pfad zur jar-Datei> <Liste der Dateien, die entpackt werden sollen>
-\end{lstlisting}
-Das Entpacken der jar-Datei ist nicht notwendig, um das Programm zu
-starten!
-
-Weitere Hinweise zur Installation finden Sie in der Datei INSTALL
-(zum Kompilieren aus den \emph{sourcen}) und auf der \href{http://jabref.sourceforge.net}{\jabref-Homepage}.
-
-
-\clearpage 
-\section{Funktionen}
-\secttoc
-\bigskip
-
-\noindent \label{JabRefHelp}\jabref ist ein Programm zur Verwaltung von
-\bibtex{}-Dateien. Es benutzt kein eigenes Dateiformat, d.\,h. dass
-Sie Ihre Dateien direkt im \bibtex{}-Format (Dateiendung \texttt{.bib})
-laden und speichern. Sie k�nnen aber auch bibliographische Datenbanken
-anderer Formate in \jabref importieren.
-
-\jabref unterst�tzt Sortier- und Suchfunktionen, um einen �berblick
-�ber den Inhalt Ihrer Datei zu bekommen. Sie k�nnen der Datei ganz
-einfach neue Eintr�ge hinzuf�gen, ohne sich daran erinnern zu m�ssen,
-welche Informationen ben�tigt werden. Au�erdem kann \jabref \bibtex{}-Keys
-automatisch generieren. \jabref ist sehr n�tzlich, wenn Sie \bibtex{}
-oder CiteMaker verwenden, kann aber auch f�r diejenigen sinnvoll sein,
-die andere Bibliographie-Systeme benutzen oder schlicht und einfach
-ihre Literaturquellen organisieren wollen.
-
-\subsection{Das Hauptfenster}
-
-\tip[]{Die meisten Men�funktionen, auf die im Folgenden hingewiesen
-wird, haben Tastenk�rzel, und viele Funktionen k�nnen �ber die Werk\-zeug\-leiste
-aufgerufen werden.}
-\label{BaseFrameHelp}Im Hauptfenster, in dem Sie mit Ihrer Datei
-arbeiten, befindet sich unter der Men�leiste und der Werkzeugleiste
-die Tableiste mit Tabs (Reitern) f�r jede Ihrer ge�ffneten Dateien.
-Wenn Sie einen dieser Tabs anklicken, erscheint eine Tabelle, die
-alle Datens�tze und einige der Datenfelder auf"|listet.
-
-Mit einem Doppelklick auf eine Tabellenzeile k�nnen Sie den Inhalt bearbeiten (der \nameref{EntryEditorHelp} wird ge�ffnet). Sie k�nnen mit den Pfeiltasten innerhalb der Tabelle navigieren. Wenn Sie einen Buchstaben dr�cken, springen Sie zu dem ersten Eintrag, der mit diesem Buchstaben beginnt (abh�ngig von der Spalte, nach der Sie die Tabelle sortiert haben).
-
-Die Sortierung der Tabelle erfolgt nach einem Feld Ihrer Wahl. Sie k�nnen das Standardverhalten unter \menu{Optionen \msep{} Einstellungen \msep{} Tabellenansicht} angeben. Um die Sortierreihenfolge schnell zu �ndern, klicken Sie einfach auf die Kopfzeile einer Spalte; damit haben Sie das prim�re Sortierkriterium definiert. Klicken Sie erneut auf den Spaltenkopf, um die Sortierrichtung umzukehren. Ein weiterer Klick sorgt daf�r, dass die Spalte nicht mehr zur Sortierung herangezogen wird [...]
-
-Welche Felder (Spalten) in der Tabelle angezeigt werden sollen, k�nnen
-Sie im \menu{Einstellungs}-Dialog ausw�hlen. Auch die Breite der
-Tabellenspalten kann eingestellt werden, indem man die Trennlinie
-zwischen den Spaltenk�pfen anklickt und nach links oder rechts verschiebt.
-Im \menu{Einstellungs}-Dialog k�nnen Sie festlegen, ob die Tabelle
-an die Bildschirmgr��e angepasst werden soll oder nicht. Aktivieren
-Sie diese Funktion, um sicherzustellen, dass Sie die gesamte Tabelle
-sehen k�nnen. Deaktivieren Sie diese Funktion, wenn mehr Informationen
-dargestellt werden sollen.
-
-Die Farbanzeige kann ebenfalls im \menu{Einstellungs}-Dialog ein-
-und ausgeschaltet werden. Die Farbanzeige illustriert, ob Ihre Daten
-vollst�ndig sind, indem sie die Zellen wie folgt darstellt:
-
-\begin{itemize}
-\item Eine \colorbox{red}{\textcolor{white}{rote}} Zelle in der linken Spalte kennzeichnet
-einen unvollst�ndigen Eintrag.
-\item Eine \colorbox{yellow}{gelbe} Zelle in der linken Spalte kennzeichnet
-einen Eintrag, der nicht alle ben�tigten Felder selbst enth�lt, der
-aber einen Querverweis enth�lt.
-\item Eine \colorbox{blue}{\textcolor{white}{blaue}} Zelle kennzeichnet ein ben�tigtes Feld.
-\item Eine \colorbox{green}{gr�ne} Zelle kennzeichnet ein optionales Feld.
-\item Eine farblose (wei�e) Zelle kennzeichnet ein Feld, das von \bibtex{}
-f�r diesen Eintragstyp nicht benutzt wird. Das Feld kann selbstverst�ndlich
-in \jabref bearbeitet werden.
-\end{itemize}
-
-\subsubsection{Einen neuen Eintrag hinzuf�gen}
-
-Es gibt verschiedene M�glichkeiten, einen neuen Eintrag hinzuzuf�gen.
-Im Men� \menu{BibTeX} f�hrt ein Klick auf \menu{Neuer Eintrag} zu
-einem Dialog, in dem Sie den Eintragstyp aus einer Liste w�hlen k�nnen.
-Um diesen Dialog zu umgehen, gibt es auch eigene Men�punkte f�r jeden
-Eintragstyp und au�erdem Tastenk�rzel f�r die g�ngigsten Typen.
-
-Wenn ein Eintrag hinzugef�gt wird, wird standardm��ig ein Editor f�r
-den Eintrag ge�ffnet. Sie k�nnen dieses Verhalten im \menu{Einstellungs}-Dialog
-abstellen.
-
-\tip[]{Wir empfehlen, sich die Tastenk�rzel f�r die Eintragstypen
-einzupr�gen, die Sie am h�ufigsten benutzen, z.\,B. STRG-SHIFT-A
-f�r einen Zeitschriftenaufsatz \emph{(article)}.}
-
-
-\subsubsection{Einen Eintrag bearbeiten}
-
-Um den \nameref{EntryEditorHelp} zur Bearbeitung
-eines existierenden Eintrags zu �ffnen, klicken Sie einfach doppelt
-auf die entsprechende Zeile oder markieren den Eintrag
-und dr�cken auf ENTER.
-
-
-\subsubsection{Einen \bibtex{}-String in einem Feld verwenden}
-
-In \jabref schreiben Sie den Inhalt aller Felder so, wie Sie es
-in einem Texteditor machen w�rden, mit einer Ausnahme: um einen String
-(eine Art Abk�rzung) zu verwenden, umschlie�en Sie den Namen des Strings
-mit je einem \#, z.\,B.
-
-\begin{lstlisting}
-#jan# 1997
-\end{lstlisting}
-was interpretiert wird als String mit dem Namen \texttt{jan} gefolgt
-von \texttt{1997}. Vergleichen Sie dazu auch die Hinweise zum \nameref{StringEditorHelp}.
-
-
-\subsection{\texorpdfstring{Eintrags"=Editor}{Eintrags-Editor}}
-
-\label{EntryEditorHelp}
-
-\begin{quote}
-\emph{Ge�ffnet wird der Eintrags"=Editor im Hauptfenster durch einen
-Doppelklick auf die linke Spalte eines Eintrags oder durch
-Dr�cken auf ENTER. Der Eintrags-Editor wird geschlossen, indem man
-auf ESC dr�ckt.}
-\end{quote}
-Im Eintrags-Editor k�nnen Sie alle relevanten Informationen eines
-Eintrags festlegen. Der Editor �berpr�ft den Eintragstyp und zeigt
-alle ben�tigten und optionalen Felder f�r den Gebrauch mit \bibtex{}
-an. Dar�ber hinaus gibt es einige Felder, die \emph{Allgemeine Felder}
-genannt werden und f�r alle Eintragstypen gelten.
-
-Sie k�nnen die Felder, die f�r die einzelnen Eintragstypen als ben�tigt
-und optional angesehen werden, und auch die Allgemeinen Felder anpassen.
-N�heres dazu erfahren Sie im Abschnitt \nameref{CustomEntriesHelp}.
-
-\subsubsection{Die Panels des Eintrags-Editors}
-
-Der Eintrags-Editor besteht in der Standardeinstellung aus f�nf Panels:
-\emph{Ben�tigte Felder}, \emph{Optionale Felder}, \emph{General},
-\emph{Abstract} und \emph{\bibtex{}"=Quelltext}, wobei \emph{General}
-und \emph{Abstract} vom Benutzer angepasst werden k�nnen (siehe dazu
-Abschnitt~\ref{GeneralFields}). In den ersten drei Panels k�nnen
-Sie mit TAB und SHIFT-TAB zwischen den einzelnen Feldern hin- und
-herwechseln. Zu einem anderen Panel gelangen Sie, indem Sie auf die
-Tabs klicken. Mit den folgenden Tastaturk�rzeln k�nnen Sie ebenfalls
-zwischen den Panels navigieren:
-
-\begin{itemize}
-\item STRG-TAB oder STRG-+ wechselt zum Panel rechts vom aktuellen Panel,
-\item STRG-SHIFT-TAB oder STRG-{-} (MINUS) wechselt dementsprechend zum
-Panel links vom aktuellen Panel.
-\end{itemize}
-Au�erdem k�nnen Sie zum n�chsten oder vorherigen Eintrag wechseln,
-indem Sie >>STRG-SHIFT-$\downarrow$<< bzw. >>STRG-SHIFT-$\uparrow$<<
-oder die Pfeil-Buttons in der linken Toolbar dr�cken.
-
-Das Panel \emph{\bibtex{}"=Quelltext} zeigt, wie der Eintrag aussehen
-wird, wenn die Datei im \texttt{bib}-Format gespeichert wird. Wenn
-Sie wollen, k�nnen Sie den \bibtex{}"=Quelltext direkt bearbeiten.
-Sobald Sie zu einem anderen Panel wechseln, STRG-S dr�cken oder den
-Eintrags-Editor schlie�en, wird \jabref versuchen, den Inhalt des
-Quelltext"=Panels zu analysieren. Falls dabei Probleme auftreten, werden
-Sie benachrichtigt und erhalten die M�glichkeit, den Eintrag noch
-einmal zu �berarbeiten oder den vorherigen Inhalt wiederherzustellen. (N�here
-Einzelheiten dazu finden Sie im Abschnitt \nameref{subsub:feldkonsistenz}.)
-Wenn in den \menu{Einstellungen} (unter \menu{Allgemein}) die Option
-\menu{Quelltext standardm��ig anzeigen} gew�hlt wurde, wird das Quelltext"=Panel
-beim �ffnen des Eintrags-Editors als erstes angezeigt. Wenn Sie lieber
-den Quelltext bearbeiten als die anderen Panels zu benutzen, sollten
-Sie diese Option w�hlen.
-
-\tip{Wenn Ihre Datei Felder enth�lt, die \jabref nicht kennt,
-erscheinen diese im Quelltext"=Panel.}
-
-\tip[Und noch ein Tipp: ]{Die \emph{PDF-} und \emph{URL}-Felder unterst�tzen
-Drag \& Drop. Sie k�nnen z.\,B. ein URL aus Ihrem Browser dort einf�gen.}
-
-
-\subsubsection{�berpr�fung der Feldkonsistenz}
-\label{subsub:feldkonsistenz}
-Wenn der Inhalt eines Feldes ge�ndert wird, �berpr�ft \jabref,
-ob der neue Inhalt akzeptiert werden kann. Bei Feldern, die von \bibtex{}
-genutzt werden, wird der Inhalt zum einen auf die richtige Klammerung
-mit geschweiften Klammern, aber auch auf die Benutzung des Zeichens
-\texttt{\#} hin �berpr�ft. Das >>hash<<-Symbol (im Deutschen oft
->>Doppelkreuz<< oder >>Raute<< genannt) darf \emph{nur} paarweise
-benutzt werden, um damit den Namen eines \bibtex{}-Strings einzuschlie�en.
-Beachten Sie, dass \jabref nicht �berpr�ft, ob der angef�hrte String
-tats�chlich vorhanden ist, da der \bibtex{}-Stil, den Sie benutzen, 
-eine beliebige Anzahl von Strings definieren kann, die \jabref nicht
-kennt.
-
-Falls die Inhalte nicht akzeptabel sind, wird das Feld mit roter Farbe
-hinterlegt, was auf einen Fehler hindeutet. In diesem Fall werden
-die �nderungen nicht gespeichert.
-
-
-\subsection{Integrit�tspr�fung}
-
-\begin{quote}
-\emph{Erreichbar �ber das Men� \menu{Extras \msep{} Datenbank durchsuchen
-\msep{} �berpr�fung der Integrit�t}.}
-\end{quote}
-Mit dieser Funktion �berpr�ft \jabref alle Eintr�ge auf deren G�ltigkeit
-und versucht Fehler aufzudecken. Mit dem \menu{�berpr�fen}-Button
-kann der Vorgang gestartet werden. Es wird eine Liste mit Hinweisen
-(Info-Icon) und m�glichen Fehlern (Ausrufezeichen-Icon) sowie dem
-entsprechenden \bibtex{}-Key erstellt. Wenn Sie einen Hinweis ausw�hlen,
-erscheint der Inhalt des Feldes, das beanstandet wird. Sie k�nnen
-nun den Feldinhalt ver�ndern und die Ver�nderungen mit Klick auf die
-Schaltfl�che \menu{�bernehmen} speichern.
-
-
-\subsection{\bibtex{}-Keys}
-
-Damit man sich in einem \LaTeX{}-Dokument auf einen Literaturverweis
-beziehen kann, braucht man einen eindeutigen \bibtex{}-Key. Eindeutig
-hei�t, dass er nur einmal vergeben sein darf. Es wird nach Gro�"~
-und Kleinschreibung unterschieden, \texttt{Yared1998} ist also nicht
-identisch mit \texttt{yared1998}. \jabref bietet einige M�glichkeiten,
-um auch bei gr��eren Datenbanken den �berblick �ber die \bibtex{}-Keys
-nicht zu verlieren.
-
-\tip{Falls Sie in einem \LaTeX{}-Dokument mehrere \bibtex{}-Dateien
-einbinden, m�ssen Sie selbst darauf achten, dass in den unterschiedlichen
-Dateien nicht mehrmals derselbe \bibtex{}-Key vergeben ist. Nutzen
-Sie deshalb am besten die Funktion \menu{Extras} \msep{} \menu{Neue Teildatei aus AUX-Datei}.}
-Der einfachste Weg, einen eindeutigen \bibtex{}-Key zu bekommen, ist
-das automatische Erzeugen, das Sie mit der Tastenkombination STRG-G
-oder mit dem Zauberstab-Button im Eintrags-Editor veranlassen k�nnen.
-Falls Sie sich nicht im Eintrags-Editor befinden, werden mit Hilfe
-von STRG-G oder dem Zauberstab-Button aus der Men�leiste f�r alle
-Eintr�ge der Datei \bibtex{}-Keys erzeugt. Falls dabei Keys �berschrieben
-werden, gibt \jabref eine Warnmeldung aus.
-
-Wie die \bibtex{}-Keys aussehen, die \jabref automatisch generiert,
-und wie Sie dieses Aussehen ver�ndern k�nnen, erfahren Sie im Abschnitt~\ref{LabelPatterns} \nameref{LabelPatterns}.
-
-
-\subsection{Suchfunktionen}
-
-\label{SearchHelp}
-\begin{quote}
-\emph{STRG-F �ffnet oder aktiviert den Suchdialog.
-Dr�ckt man mehrmals auf STRG-F, so werden die verschiedenen Suchmodi
-ausgew�hlt. STRG-SHIFT-F �ffnet oder aktiviert den Suchdialog
-und w�hlt gleichzeitig die direkte Suche aus. Bei der direkten Suche
-springt man mit STRG-F oder STRG-SHIFT-F zum n�chsten Treffer.}
-\end{quote}
-
-\subsubsection{Direkte Suche}
-
-Bei der direkten Suche sucht \jabref unmittelbar, wenn Sie einen
-Buchstaben eingeben. Die Statuszeile informiert Sie �ber den Sucherfolg.
-Mit STRG-F oder STRG-SHIFT-F wird zum n�chsten Vorkommen des aktuellen
-Suchbegriffs gesprungen. Falls es keine weiteren Vorkommen gibt, informiert
-die Statuszeile dar�ber. Bei erneuter Wiederholung startet die Suche
-vom Anfang der Datei. Die Suchreihenfolge richtet sich nach der aktuellen
-Sortierung Ihrer Datei. Um die direkte Suche zu verlassen, dr�cken
-Sie ESC oder klicken Sie auf \menu{Zur�cksetzen}.
-
-
-\subsubsection{Normale Suche}
-
-Hierbei sucht das Programm nach allen Vorkommen der W�rter ihres Suchausdrucks, sobald Sie ENTER dr�cken. Nur Eintr�ge, die alle W�rter enthalten, gelten als Treffer. Um nach festen Ausdr�cken zu suchen, m�ssen Sie die W�rter in doppelte Anf�hrungszeichen einfassen. Zum Beispiel findet die Suchanfrage \texttt{progress \textquotedbl marine acquaculture\textquotedbl} Eintr�ge, die sowohl das wort ">progress"< als auch den Ausdruck ">marine acquaculture"< aufweisen. Alle Eintr�ge, die keine [...]
-
-\subsubsection{Suchoptionen}
-
-Der \menu{Einstellungen}-Button im Suchdialog �ffnet ein Men�, in
-dem man mehrere Optionen (de)aktivieren kann: das Beachten von Gro�-
-und Kleinschreibung, das Nutzen regul�rer Ausdr�cke (siehe dazu den Abschnitt ">\nameref{search-regular-expressions}"<) sowie das Ausw�hlen
-der Suchergebnisse.
-
-\tip{Suchen Sie mit der Option \menu{Treffer ausw�hlen} und dr�cken
-anschlie�end STRG-M, so haben Sie alle Treffer markiert (vgl. Abschnitt ">\nameref{MarkingHelp}"<) und k�nnen z.\,B. eine weitere Suche durchf�hren,
-ohne die bisherigen Ergebnisse zu >>verlieren<<.}
-
-\subsubsection{Feldbezeichner und logische Operatoren}
-\label{SearchHelp_advanced}
-
-\tip[Achtung! ]{Die folgenden Hinweise gelten nicht f�r die direkte Suche.}
-Um nur einige bestimmte Felder zu durchsuchen
-und\slash{}oder logische Operatoren im Suchbegriff zu benutzen, wird
-eine spezielle Syntax zur Verf�gung gestellt. Um beispielsweise nach
-Eintr�gen mit dem Autor >>Miller<< zu suchen, geben Sie
-
-\begin{lstlisting}
-author = miller
-\end{lstlisting}
-in das Suchfeld ein. Falls der Suchbegriff Leerzeichen enth�lt, schlie�en
-Sie ihn in Anf�hrungszeichen ein. Benutzen Sie \emph{nie} Leerzeichen
-in dem Feldbezeichner. Mehrere Feldbezeichner werden durch >>|<<
-voneinander getrennt. Um beispielsweise nach Eintr�gen �ber Karl den
-Gro�en zu suchen, geben Sie Folgendes ein:
-
-\begin{lstlisting}
-title|keywords = "Karl der Gro�e"
-\end{lstlisting}
-Sie k�nnen die logischen Operatoren AND, OR und NOT sowie Klammern
-verwenden:
-
-\begin{lstlisting}
-(author = miller OR title|keywords = "Karl der Gro�e") AND NOT author = brown
-\end{lstlisting}
-\ldots{} sucht beispielsweise nach Eintr�gen, in denen entweder der
-Autor >>Miller<< hei�t oder im \emph{title}- oder \emph{keywords}-Feld
-der Begriff >>Karl der Gro�e<< steht; gleichzeitig werden die Eintr�ge
-mit dem Autor >>Brown<< nicht angezeigt.
-
-Das \texttt{=}-Zeichen ist eigentlich eine Abk�rzung f�r >>enth�lt<<
-\emph{(contains)}. Wenn man nach genauen Treffern suchen m�chte, muss
-man \texttt{==} oder \texttt{matches} (>>�bereinstimmen<<) eingeben.
-\texttt{!=} sucht nach Eintr�gen, bei denen der Suchbegriff \emph{nicht}
-enthalten ist. Um nach Eintr�gen eines bestimmten Typs zu suchen,
-gibt es ein Pseudofeld namens \emph{entrytype}:
-
-\begin{lstlisting}
-entrytype = thesis
-\end{lstlisting}
-\ldots{} findet Eintr�ge, deren Typ (wie in der Spalte \emph{Entrytype}
-dargestellt) das Wort >>thesis<< enth�lt (z.\,B. >>phdthesis<<
-und >>mastersthesis<<). Ebenso erlaubt das Pseudofeld \emph{bibtexkey}
-die Suche nach \bibtex{}-Keys, z.\,B.:
-
-\begin{lstlisting}
-bibtexkey = miller2005
-\end{lstlisting}
-
-\subsubsection{Suche mit regul�ren Ausdr�cken}
-\label{search-regular-expressions}
-\verfasser{Pedro J. Aphalo, zuerst ver�ffentlicht im \jabref{}-Wiki in englischer Sprache}
-
-\paragraph{Hintergrund}
-Regul�re Ausdr�cke (kurz ">regex"< f�r engl. ">regular expressions"<) definieren eine Sprache zum Spezifizieren von passendem Text, zum Beispiel bei Suchanfragen. \jabref{} nutzt regul�re Ausdr�cke, wie sie in Java definiert sind. Eine Dokumentation dazu findet sich unter \href{http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html}{http://java.sun.com\slash{}j2se\slash{}1.4.2\slash{}docs\slash{}api\slash{}java\slash{}util\slash{}regex\slash{}Pattern.html}.
-
-\tip[]{Die folgenden Beispiele sind alle in Kleinbuchstaben, damit werden aber auch Gro�buchstaben oder gemischte Varianten gefunden.}
-
-\paragraph{Suche nach Eintr�gen mit leerem oder fehlendem Feld}
-\tip[]{\texttt{.} bezeichnet irgendein Zeichen
-
-\texttt{+} hei�t ein- oder mehrmals}
-\begin{lstlisting}
-author != .+
-\end{lstlisting}
-
-\paragraph{Wortgrenzen beachten}
-\tip[]{\texttt{\textbackslash b} bezeichnet eine Wortgrenze
-
-\texttt{\textbackslash B} hei�t: keine Wortgrenze}
-\begin{lstlisting}
-keywords = \buv\b
-\end{lstlisting}
-findet ">uv"<, aber nicht ">lluvia"< (es findet allerdings ">uv-b"<)
-\begin{lstlisting}
-author = \bblack\b
-\end{lstlisting}
-findet ">black"<, aber weder ">blackwell"< noch ">blacker"<
-
-\begin{lstlisting}
-author == black
-\end{lstlisting} findet ">john black"< nicht, 
-\begin{lstlisting}
-author = \bblack\b
-\end{lstlisting} hingegen schon
-
-\begin{lstlisting}
-author = \bblack\B
-\end{lstlisting}
-findet ">blackwell"< und ">blacker"<, aber nicht ">black"<
-
-\paragraph{Suche mit optionaler Schreibweise}
-
-\tip[]{\texttt{?} bezeichnet keine oder eine Kopie des vorhergehenden Buchstaben
-
-\texttt{{n,m}} hei�t mindestens n, aber nicht mehr als m Kopien des vorhergehenden Buchstaben
-
-\texttt{[ ]} definiert eine Buchstabengruppe}
-
-\begin{lstlisting}
-title =neighbou?r
-\end{lstlisting}
-findet ">neighbour"< und ">neighbor"<, aber auch ">neighbours"< und ">neighbors"<, ">neighbouring"< und ">neighboring"< etc.
-
-\begin{lstlisting}
-title = neighbou?rs?\b
-\end{lstlisting}
-findet ">neighbour"< und ">neighbor"<, auch ">neighbours"< und ">neighbors"< , aber weder ">neighbouring"< noch ">neighboring"<.
-
-\begin{lstlisting}
-author = s[a�]nchez
-\end{lstlisting}
-findet ">sanchez"< und ">s�nchez"<
-
-\begin{lstlisting}
-abstract = model{1,2}ing
-\end{lstlisting}
-findet ">modeling"< und ">modelling"<
-
-\begin{lstlisting}
-abstract = modell?ing
-\end{lstlisting}
-findet ebenfalls ">modeling"< und ">modelling"<
-
-\paragraph{Das Problem von Anf�hrungszeichen (\texorpdfstring{\texttt{"}}{"}) in Suchausdr�cken}
-Sind regul�re Ausdr�cke ausgeschaltet, findet 
-\begin{lstlisting}
-author = {\"O}quist
-\end{lstlisting} nichts, auch wenn der Name in der Datenbank vorkommt. Ebensowenig wird bei aktivierten regul�ren Ausdr�cken 
-\begin{lstlisting}
-author = \{\\\"O\}quist
-\end{lstlisting} irgendetwas finden.
-
-\begin{lstlisting}
-author = \{\\\x22O\}quist
-\end{lstlisting}
-funktioniert bei aktivierten regul�ren Ausdr�cken f�r ">\texttt{\{\textbackslash "{}O\}quist}"<, weil \lstinline{\"} nicht als Aufhebung von \lstinline{"} wirkt, \lstinline{\x22} aber schon (also das Zeichen hexadezimal 22 in der ASCII-Tabelle).
-
-\begin{lstlisting}
-author = Bolh{\`a}r 
-\end{lstlisting}
-funktioniert mit ausgeschalteten regul�ren Ausdr�cken und
-
-\begin{lstlisting}
-author = Bolh\{\\`a\}r 
-\end{lstlisting}
-funktioniert mit aktivierten regul�ren Ausdr�cken.
-
-Einfache Anf�hrungszeichen (\texttt{'}) funktionieren ebenfalls.
-
-Es gibt also anscheinend eine Einschr�nkung, wie \lstinline{"} in der Eingabe behandelt wird, aber Sie k�nnen stattdessen \lstinline{\x22} nutzen, um dieses Problem zu umgehen. (Das Zeichen \lstinline{"} hat eine spezielle Bedeutung: es wird benutzt, um mehrere W�rter zu einer Phrase zu gruppieren, die exakt gefunden werden soll.)
-
-\subsection{Gruppen}
-
-Mit Gruppen k�nnen Sie Ihre \bibtex{}-Datei in einer Baumstruktur
-anordnen, vergleichbar mit einer Dateistruktur in Ordnern und Unterordnern.
-Die beiden Hauptunterschiede sind:
-
-\begin{enumerate}
-\item W�hrend eine Datei auf einer Festplatte immer in genau einem Ordner
-abgelegt ist, kann ein Literatureintrag in \jabref mehreren Gruppen
-angeh�ren.
-\item Gruppen benutzen bestimmte Kriterien, um ihren Inhalt dynamisch zu
-bestimmen. Neue Eintr�ge, die den Kriterien einer Gruppe entsprechen,
-geh�ren automatisch zu dieser Gruppe. Diese Funktionalit�t gibt es
-nicht in �blichen Dateisystemen, wohl aber in einigen E-Mail-Programmen
-(z.\,B. Thunderbird und Opera).
-\end{enumerate}
-Wenn Sie eine Gruppe ausw�hlen, werden die Eintr�ge dieser Gruppe
-angezeigt. Wenn Sie mehrere Gruppen ausw�hlen, werden entweder die
-Eintr�ge angezeigt, die in einer der Gruppen sind (Vereinigung), oder
-solche, die in allen Gruppen vorhanden sind (Schnittmenge)~-- das
-h�ngt von Ihren Einstellungen ab. All dies wird im Folgenden detailliert
-erl�utert.
-
-Gruppendefinitionen sind dateispezifisch; sie werden als \texttt{@COMMENT}-Block
-in der \texttt{bib}-Datei gespeichert und von allen Benutzern gemeinsam
-benutzt. (K�nftige Versionen von \jabref werden m�glicherweise
-benutzerabh�ngige Gruppen unterst�tzen.)
-
-
-\subsubsection{Die Gruppenansicht}
-\begin{quote}
-\emph{Die Gruppenansicht wird im linken Bereich des Bildschirms angezeigt.
-Sie kann mit der Tastenkombination STRG-SHIFT-G oder dem Gruppen-Button
-in der Toolbar ein- und ausgeblendet werden. Die Gruppenansicht verf�gt
-�ber mehrere Schaltfl�chen, aber die meisten Funktionen werden �ber
-das Kontextmen� angesteuert (also mit der rechten Maustaste). Drag\,\&\,Drop
-wird ebenfalls unterst�tzt.}
-\end{quote}
-
-
-\subsubsection{Einige kurze Beispiele}
-
-Sie m�chten vielleicht~\ldots{}
-
-\begin{itemize}
-\item [\ldots]\textbf{einfach nur eine Gruppe anlegen und ihr einige Eintr�ge
-zuordnen}
-
-
-Vergewissern Sie sich, dass die Gruppenansicht eingeschaltet ist.
-Dr�cken Sie auf den Button \menu{Neue Gruppe}, geben einen Namen
-f�r die Gruppe ein und dr�cken \menu{OK}. Sie k�nnen alle Einstellungen
-auf ihren Standardwerten belassen. Jetzt w�hlen Sie die Eintr�ge aus,
-die der Gruppe zugeordnet werden sollen, und ziehen diese mit der
-Maus auf die Gruppe oder w�hlen \menu{Zu Gruppe hinzuf�gen} aus dem
-Kontextmen�. Jetzt k�nnen Sie die Gruppe anklicken, um sich ihren
-Inhalt anzeigen zu lassen (das sollten die Eintr�ge sein, die Sie
-gerade hinzugef�gt haben).
-
-\item [\ldots]\textbf{das Feld} \textbf{\emph{keywords}} \textbf{benutzen,
-um die Eintr�ge zu gruppieren}
-
-
-Stellen Sie sicher, dass die Gruppenansicht aktiviert ist. Dr�cken
-Sie auf den Button \menu{Neue Gruppe}, geben einen Namen f�r die
-Gruppe ein und w�hlen die Option \menu{Dynamisches Gruppieren der Eintr�ge anhand eines Stichworts in einem Feld}.
-Geben Sie das Stichwort, nach dem gesucht werden soll, ein und dr�cken
-\menu{OK}. Jetzt k�nnen Sie die Gruppe anklicken, um sich ihren Inhalt
-anzeigen zu lassen (das sollten alle Eintr�ge sein, deren \emph{keywords}-Feld
-das Stichwort enth�lt, das Sie angegeben haben).
-
-\item [\ldots]\textbf{einen frei w�hlbaren Suchausdruck verwenden, um eine
-Gruppe zu definieren}
-
-
-Stellen Sie sicher, dass die Gruppenansicht aktiviert ist. Dr�cken
-Sie auf den Button \menu{Neue Gruppe}, geben einen Namen f�r die
-Gruppe ein und w�hlen die Option \menu{Dynamisches Gruppieren der Eintr�ge anhand eines beliebigen Suchausdrucks}.
-Geben Sie \texttt{author=smith} als Suchausdruck ein (ersetzen Sie
-\texttt{smith} mit einem Namen, der wirklich in Ihrer Datei vorkommt)
-und klicken \menu{OK}. Jetzt k�nnen Sie die Gruppe anklicken, um
-sich ihren Inhalt anzeigen zu lassen (das sollten alle Eintr�ge sein,
-deren \emph{author}-Feld den Namen beinhaltet, den Sie angegeben haben).
-
-\item [\ldots]\textbf{mehrere Gruppen kombinieren }
-
-
-Erstellen sie zwei unterschiedliche Gruppen (z.\,B. so wie oben beschrieben).
-Klicken Sie auf den Button \menu{Einstellungen} in der Gruppenansicht
-und w�hlen \menu{Vereinigung}. Jetzt w�hlen Sie beide Gruppen aus
-(dazu klicken Sie auf eine Gruppe und anschlie�end bei gedr�ckter
-STRG-Taste auf die andere Gruppe). Sie sollten jetzt alle Eintr�ge
-sehen, die in einer der beiden Gruppen aufgef�hrt sind. Klicken Sie
-noch einmal auf \menu{Einstellungen} und w�hlen \menu{Schnittmenge}
-aus. Nun sollten Sie nur die Eintr�ge sehen, die in beiden Gruppen
-enthalten sind (das k�nnen auch keine sein, oder aber genau dieselben
-Eintr�ge wie zuvor, sofern beide Gruppen dieselben Eintr�ge enthalten).
-
-\item [\ldots]\textbf{sehen, welche Gruppen sich �berschneiden}
-
-
-Mit \jabref k�nnen Sie ganz einfach herausfinden, welche Gruppen
-sich mit den aktuell ausgew�hlten Gruppen �berschneiden (d.\,h. welche
-Gruppen zumindest einen Eintrag enthalten, der auch in der aktuell
-ausgew�hlten Gruppe ist). Klicken Sie auf \menu{Einstellungen} und
-aktivieren die Option \menu{Sich �berschneidende Gruppen markieren}.
-W�hlen Sie dann eine Gruppe, die sich mit anderen �berschneidet. Diese
-anderen Gruppen sollten nun markiert sein.
-
-\end{itemize}
-
-\subsubsection{Arten von Gruppen}
-
-In \jabref gibt es vier verschiedene Arten von Gruppen:
-
-\begin{enumerate}
-\item Die Gruppe \emph{Alle Eintr�ge}, die~-- wie der Name vermuten l�sst~--
-alle Eintr�ge beinhaltet, ist immer vorhanden und kann weder ver�ndert
-noch gel�scht werden.
-\item \emph{Statische Gruppen} verhalten sich wie Ordner auf einer Festplatte
-und beinhalten nur die Eintr�ge, die Sie ihnen explizit zuweisen.
-\item \emph{Dynamische Gruppen basierend auf einem Stichwort} beinhalten
-Eintr�ge, die in einem bestimmten \bibtex{}-Feld (z.\,B. \emph{keywords})
-ein bestimmtes Stichwort (z.\,B. \emph{elektrisch}) aufweisen. Diese
-Methode ben�tigt kein manuelles Zuweisen der Eintr�ge, sondern nutzt
-die bereits in der Datei vorhandenen Informationen. Wenn alle Eintr�ge
-in Ihrer Datenbank passende Stichw�rter haben, k�nnte diese Art von
-Gruppe die beste Wahl f�r Sie sein.
-\item \emph{Dynamische Gruppen basierend auf einer freien Suche} beinhalten
-Eintr�ge, die mit einem bestimmten Suchausdruck �bereinstimmen. Dabei
-wird dieselbe Syntax verwendet wie beim Suchen (siehe Abschnitt~\ref{SearchHelp}).
-Diese Syntax (die auf S.\,\pageref{SearchHelp_advanced} genauer
-beschrieben wird) unterst�tzt logische Operatoren (AND, OR, NOT) und
-erlaubt es, in einem oder mehreren \bibtex{}-Feldern zu suchen. Dadurch
-ist eine flexiblere Definition von Gruppen m�glich als mit einer Stichwortsuche
-(z.\,B. \texttt{author=smith AND title=elektrisch}).
-\end{enumerate}
-Jede Gruppe, die Sie erstellen, ist von einer der drei letztgenannten
-Arten. Der Dialog \menu{Gruppe bearbeiten}, der mit einem Doppelklick
-auf eine Gruppe aufgerufen wird, zeigt eine kurze Beschreibung der
-ausgew�hlten Gruppe.
-
-
-\subsubsection{Gruppenstrukturen, Erstellen und L�schen von Gruppen}
-
-Die Gruppen sind~-- vergleichbar mit Datei-Ordnern~-- in einer Baumansicht
-strukturiert, in der die Gruppe \emph{Alle Eintr�ge} das Stammelement
-ist. Mit einem Rechtsklick auf eine Gruppe k�nnen Sie dem Baum eine
-neue Gruppe hinzuf�gen, entweder auf derselben Ebene wie die ausgew�hlte
-Gruppe oder als ihre Untergruppe. Der Button \menu{Neue Gruppe} erzeugt
-eine neue Untergruppe der Gruppe \emph{Alle Eintr�ge}, egal ob Sie
-gerade Gruppen ausgew�hlt haben oder nicht. Im Kontextmen� k�nnen
-Sie auch Gruppen und\slash{}oder Untergruppen l�schen, Untergruppen
-alphabetisch sortieren oder Gruppen an eine andere Stelle des Baums
-verschieben. Letzteres k�nnen Sie auch mit Drag\,\&\,Drop machen,
-allerdings mit der Einschr�nkung, dass bei Drag\,\&\,Drop die Reihenfolge
-der Untergruppen einer Gruppe nicht ver�ndert werden kann.
-
-Die Funktionen \menu{R�ckg�ngig} und \menu{Wiederholen} werden f�r
-alle Bearbeitungsschritte unterst�tzt.
-
-
-\paragraph{Statische Gruppen}
-
-Statische Gruppen werden nur durch manuelles Zuweisen von Eintr�gen
->>gef�ttert<<. Nachdem Sie eine statische Gruppe erstellt haben,
-w�hlen Sie die Eintr�ge aus, die Sie ihr zuweisen wollen, und nutzen
-entweder Drag\,\&\,Drop oder das Kontextmen� in der Tabelle, um
-die Zuweisung durchzuf�hren. Um Eintr�ge aus einer Gruppe zu entfernen,
-w�hlen Sie sie aus und benutzen das Kontextmen� in der Tabelle. Es
-k�nnen keine weiteren Optionen angegeben werden.
-
-Diese Methode des Gruppierens setzt voraus, dass alle Eintr�ge einen
-eindeutigen \bibtex{}-Key haben. Im Falle von fehlenden oder doppelten
-\bibtex{}-Keys kann das Zuweisen der betreffenden Eintr�ge in k�nftigen
-Sitzungen nicht korrekt wiederhergestellt werden.
-
-
-\paragraph{Dynamische Gruppen}
-
-Der Inhalt einer dynamischen Gruppe wird von einer logischen Bedingung
-bestimmt. Nur Eintr�ge, die dieser Bedingung entsprechen, geh�ren
-zu dieser Gruppe. Diese Methode nutzt die bereits in der Datei vorhandenen
-Informationen und wird aktualisiert, sobald Sie Ver�nderungen in der
-Datei vornehmen. Es gibt zwei m�gliche Arten von Bedingungen:
-
-\begin{enumerate}
-\item Ein Feld nach einem Stichwort durchsuchen
-
-
-Diese Methode gruppiert Eintr�ge, bei denen ein bestimmtes \bibtex{}-Feld
-(z.\,B. \emph{keywords}) einen bestimmten Suchausdruck (z.\,B. \emph{elektrisch})
-enth�lt. Damit dies funktioniert, muss das Feld, nach dem sortiert
-wird, nat�rlich in jedem Eintrag vorhanden und sein Inhalt fehlerfrei
-sein. Das obige Beispiel w�rde alle Eintr�ge zu einer Gruppe zusammenfassen,
-die sich auf etwas Elektrisches beziehen. Benutzt man das Feld \emph{author},
-kann man sich Eintr�ge eines bestimmten Autors gruppieren lassen,
-usw. Die Suche ist als reine Textsuche oder mit einem regul�ren Ausdruck
-m�glich. Im ersten Fall erlaubt \jabref das manuelle Zuweisen zu
-und Entfernen aus einer Gruppe; dazu f�gt \jabref den Suchausdruck
-dem entsprechenden Feld zu bzw. entfernt ihn daraus. Das macht nur
-f�r das Feld \emph{keywords} oder f�r selbstdefinierte Felder Sinn,
-aber offensichtlich nicht f�r Felder wie \emph{author} oder \emph{year}.
-
-\item Einen freien Suchausdruck verwenden
-
-
-Diese Vorgehensweise ist ganz �hnlich wie die eben beschriebene, aber
-statt nur ein Feld nach einem Suchausdruck zu durchsuchen, kann hierbei
-die Syntax der Suche (siehe S.\,\pageref{SearchHelp_advanced}) angewendet
-werden, die logische Operatoren (AND, OR, NOT) und die Suche in mehreren
-Feldern gleichzeitig unterst�tzt. So fasst z.\,B. die Suchanfrage
-\texttt{keywords=Regression AND NOT keywords=linear} Eintr�ge, die
-sich mit nicht-linearer Regression besch�ftigen, zu einer Gruppe zusammen.
-
-\end{enumerate}
-In der Gruppenansicht werden dynamische Gruppen standardm��ig \emph{kursiv}
-dargestellt. Dies kann unter \menu{Optionen} \msep{} \menu{Einstellungen}
-\msep{} \menu{Gruppen} abgestellt werden.
-
-
-\paragraph{Hierarchischer Kontext}
-
-Standardm��ig ist eine Gruppe \emph{unabh�ngig} von ihrer Position
-im Gruppenbaum. Ist eine Gruppe ausgew�hlt, wird nur der Inhalt dieser
-Gruppe angezeigt. Es ist jedoch~-- besonders beim Verwenden dynamischer
-Gruppen~-- oft n�tzlich, eine Untergruppe zu erstellen, die \emph{ihre
-Obergruppe einbezieht}. Wenn diese Untergruppe ausgew�hlt wird, werden alle Eintr�ge dieser
-Gruppe und ihrer Obergruppe angezeigt. Erstellen Sie z.\,B. eine
-Obergrupe, die Eintr�ge mit dem Stichwort \emph{Verteilung} enth�lt,
-sowie eine einbeziehende Untergruppe mit Eintr�gen, die das Stichwort
-\emph{Gau�} enthalten. Wenn Sie nun die Untergruppe ausw�hlen, werden
-alle Eintr�ge angezeigt, die beiden Bedingungen entsprechen, also
-alle, die mit Gau�'scher Verteilung zu tun haben. Indem Sie nun eine
-weitere Untergruppe f�r \emph{Laplace} anlegen, die dieselbe Obergruppe
-einbezieht, k�nnen Sie die Gruppierung einfach erweitern. Im Gruppenbaum
-haben solche Gruppen, die ihre Obergruppen einbeziehen, ein spezielles
-Icon. (Dieses Verhalten kann in den Einstellungen abgestellt werden.)
-
-Das logische Gegenst�ck zu einer solchen einbeziehenden Untergruppe
-ist eine Gruppe, die \emph{ihre Untergruppen ber�cksichtigt}.
-Wird sie ausgew�hlt, werden nicht nur die Eintr�ge dieser Gruppe,
-sondern auch diejenigen aller Untergruppen angezeigt. Im Gruppenbaum
-hat auch diese Art von Gruppen ein spezielles Icon. (Dieses Verhalten
-kann in den Einstellungen abgestellt werden.)
-
-
-\subsubsection{Eintr�ge einer Gruppe anzeigen, mehrere Gruppen kombinieren}
-
-Wenn Sie eine Gruppe ausw�hlen, werden die Eintr�ge, die dieser Gruppe
-zugeordnet sind, hervorgehoben und~-- je nach Einstellung (die mit
-einem Klick auf den \menu{Einstellungen}-Button vorgenommen werden
-kann)~-- an den Anfang der Tabelle verschoben und\slash{}oder ausgew�hlt.
-Diese Optionen entsprechen denen f�r die normale Suche (siehe Abschnitt~\ref{SearchHelp}).
-
-Wenn Sie meherere Gruppen ausw�hlen (indem Sie die STRG-Taste gedr�ckt
-halten und mehrere Gruppen anklicken), wird~-- je nach Einstellung~--
-entweder die Vereinigung oder die Schnittmenge ihrer Inhalte angezeigt.
-Damit k�nnen mehrere Bedingungen schnell miteinander kombiniert werden.
-Ein Beispiel: Wenn Sie eine statische Gruppe namens \emph{Sehr wichtig}
-haben, in der alle sehr wichtigen Eintr�ge sind, k�nnen Sie sich die
-sehr wichtigen Eintr�ge jeder anderen Gruppe anzeigen lassen, indem
-Sie beide Gruppen ausw�hlen (dazu muss \menu{Schnittmenge} in den
-Einstellungen aktiviert sein).
-
-
-\subsubsection{Gruppen und Suche}
-
-Wenn der Inhalt einer oder mehrerer Gruppen angezeigt wird, k�nnen
-Sie eine Suche innerhalb dieser Eintr�ge durchf�hren. Benutzen Sie
-dazu die normalen Suchfunktionen (siehe Abschnitt~\ref{SearchHelp}).
-
-
-\subsubsection{Sich �berschneidende Gruppen markieren}
-
-Der \menu{Einstellungen}-Button bietet eine Option zum Markieren
-von sich �berschneidenden Gruppen. Wenn diese Option aktiviert ist
-und Sie eine (oder mehrere) Gruppe(n) ausw�hlen, werden alle Gruppen
-markiert, die mindestens einen Eintrag enthalten, der auch der ausgew�hlten
-Gruppe zugeordnet ist. Damit k�nnen Sie schnell �berschneidungen zwischen
-den Eintr�gen verschiedener Gruppen erkennen. Sie k�nnten beispielsweise
-eine Gruppe mit dem Namen \emph{lesen} erstellen, die alle Eintr�ge
-enth�lt, die sie lesen wollen. Sobald Sie nun eine Gruppe ausw�hlen,
-wird die Gruppe \emph{lesen} markiert, sofern die ausgew�hlte Gruppe
-Eintr�ge enth�lt, die Sie noch lesen wollten.
-
-
-\subsubsection{Erweiterte Funktionen}
-
-Wenn Sie sich mit dem oben beschriebenen Gruppenkonzept vertraut gemacht
-haben, k�nnten die folgenden erweiterten Funktionen n�tzlich sein.
-
-
-\paragraph{Dynamische Gruppen automatisch erstellen}
-
-Mit einem Klick auf den Button \menu{Automatisch Gruppen f�r die Datei anlegen}
-k�nnen Sie ganz schnell passende Gruppen f�r Ihre Datei erzeugen.
-Diese Funktion sammelt alle W�rter eines bestimmten Felds Ihrer Wahl
-und erstellt eine Gruppe f�r jedes Wort. Das ist zum Beispiel n�tzlich,
-wenn Ihre Datei geeignete Stichworte f�r alle Eintr�ge enth�lt. Mit
-dem automatischen Erstellen von Gruppen basierend auf dem Feld \emph{keywords}
-k�nnen Sie also ohne gro�en Aufwand ein Grundger�st von Gruppen anlegen.
-
-Sie k�nnen auch Zeichen angeben, die ignoriert werden sollen, z.\,B.
-Kommas, die zwischen einzelnen Stichworten stehen. Diese werden als
-Worttrenner behandelt und nicht als Teile des Wortes selbst. Dieser
-Schritt ist wichtig, damit kombinierte Stichworte wie etwa \emph{Gau�'sche
-Verteilung} als semantische Einheit interpretiert werden k�nnen. (Sie
-k�nnen diese Option allerdings nicht verwenden, um ganze W�rter zu
-ignorieren. Sie m�ssen stattdessen die Gruppen, die Sie nicht wollen,
-nach dem automatischen Erstellen von Hand l�schen.)
-
-
-\paragraph{Ansicht aktualisieren}
-
-Der \menu{Aktualisieren}-Button in der Gruppenansicht aktualisiert
-die Tabelle in Bezug auf die aktuell ausgew�hlten Gruppen. Normalerweise
-erfolgt dies automatisch, aber in seltenen F�llen (z.\,B. nach einem
-R�ckg�ngig- oder Wiederholen"=Vorgang, der mit Gruppen zusammenh�ngt)
-ist ein h�ndisches Aktualisieren n�tig.
-
-
-\paragraph{Einbeziehende Unter- und Obergruppen mischen}
-
-Ist eine einbeziehende Gruppe die Untergruppe von einer Gruppe,
-die ihre Untergruppen ber�cksichtigt~-- hat sie also sozusagen Geschwister~--, 
-dann werden diese Geschwister ignoriert,
-sobald die einbeziehende Gruppe ausgew�hlt wird.
-
-
-\subsection{Markieren von Eintr�gen}
-\label{MarkingHelp}
-
-\begin{quote}
-\emph{Mit der Tastenkombination STRG-M k�nnen
-Sie Eintr�ge markieren und diese Markierung mit STRG-SHIFT-M wieder
-aufheben. Diese Aktionen sind auch im Men� \menu{Bearbeiten} zu finden.}
-\end{quote}
-Das Markieren ist nicht dasselbe wie das Ausw�hlen eines Eintrags.
-Markierte Eintr�ge verhalten sich in zweierlei Hinsicht anders als
-die restlichen Eintr�ge:
-
-\begin{enumerate}
-\item Markierte Eintr�ge werden immer mit einem gelben Hintergrund in der
-Tabelle angezeigt.
-\item Markierte Eintr�ge werden an den Anfang der Eintragsliste verschoben,
-falls Ihre Tabelle nicht nach Gruppen oder aufgrund einer Suche sortiert
-ist.
-\end{enumerate}
-Wenn Sie Ihre Datei speichern, werden die Markierungen beibehalten.
-Das Markieren von Eintr�gen ist z.\,B. n�tzlich, wenn Sie verschiedene
-Suchvorg�nge durchf�hren wollen, ohne das erste Suchergebnis zu verlieren,
-oder wenn Sie sich merken wollen, welche Artikel oder B�cher Sie noch
-einmal genauer ansehen m�ssen.
-
-
-\subsection{\texorpdfstring{String"=Editor}{String-Editor}}
-\label{StringEditorHelp}
-
-\begin{quote}
-\emph{Zugriff �ber das Men� \menu{BibTeX}} \msep{} \emph{\menu{Strings bearbeiten}
-oder durch Klick auf die Schaltfl�che \menu{Strings bearbeiten}.}
-\end{quote}
-\emph{Strings} sind das \bibtex{}-�quivalent zu Konstanten in einer
-Programmiersprache. Jeder String wird durch einen eindeutigen \emph{Namen}
-und einen \emph{Inhalt} festgelegt. Der Name kann an anderer Stelle
-in der Datei benutzt werden, um den Inhalt wiederzugeben.
-
-Ein Beispiel: Wenn viele Eintr�ge aus einer Zeitschrift stammen, deren
-Abk�rzung schwer zu behalten ist, wie etwa >>J. Theor. Biol.<< (Journal
-of Theroretical Biology), k�nnte ein String mit dem Namen >>JTB<<
-angelegt werden, um den Namen der Zeitschrift zu repr�sentieren. Statt
-nun in jedem Eintrag den exakten Namen der Zeitschrift einzutragen,
-gen�gt die Zeichenfolge \texttt{\#JTB\#} im Feld \emph{journal}, und
-es ist sichergestellt, dass der Name jedesmal in identischer Schreibweise
-ausgegeben wird.
-
-Der Verweis auf einen String kann an jeder Stelle eines Feldes erscheinen, 
-wobei der Name des Strings immer von einem Paar \texttt{\#}-Zeichen
-eingeschlossen werden muss. Diese Syntax gilt nur f�r \jabref und
-weicht ein wenig von der \bibtex{}-Syntax ab, die erzeugt wird, wenn
-Sie Ihre Datei speichern. Strings k�nnen f�r alle Standard-\bibtex{}-Felder verwendet werden.
-Unter \menu{Optionen \msep{} Einstellungen \msep{} Allgemein} k�nnen Sie im Bereich \menu{Datei} festlegen, ob Strings auch in Nicht-Standard-Feldern benutzt werden d�rfen. In diesem Fall k�nnen Sie Felder bestimmen, die von der Aufl�sung der Strings ausgenommen werden; hierbei wird empfohlen, das Feld \texttt{url} und andere Felder anzugeben, die das Zeichen \texttt{\#} enthalten k�nnen und die von \bibtex\slash\LaTeX{} verarbeitet werden k�nnen.
-
-In derselben Weise kann man auch im Inhalt eines Strings auf einen
-anderen String verweisen, vorausgesetzt, dass der String, auf den
-verwiesen wird, bereits \emph{vorher} definiert ist.
-
-W�hrend die Reihenfolge der Strings in Ihrer \bibtex{}-Datei in einigen
-F�llen wichtig ist, brauchen Sie sich bei der Benutzung von \jabref
-dar�ber keine Gedanken zu machen. Die Strings werden in alphabetischer
-Reihenfolge im String-Editor aufgelistet und in derselben Reihenfolge
-gespeichert, au�er wenn eine andere Reihenfolge von \bibtex{} verlangt
-wird.
-
-\subsection{Abk�rzung von Zeitschriftentiteln}
-\label{JournalAbbreviations}
-\begin{quote}
-\emph{Diese Funktion kann unter \menu{Optionen \msep{} Abk�rzungen der Zeitschriften verwalten} eingestellt werden.}
-\end{quote}
-\jabref kann automatisch zwischen Zeitschriftentiteln in abgek�rzter und ausf�hrlicher Form hin- und herschalten, sofern die Titel in einer Ihrer Zeitschriftenlisten enthalten ist. Sie k�nnen mehrere dieser Listen benutzen, die Sie als externe Textdateien anlegen.
-
-\subsubsection{Benutzungshinweise}
-
-Die Abk�rzung von Zeitschriftentiteln k�nnen Sie vom Eintragseditor oder vom Men� \menu{Extras} aus ein- und ausschalten. Im Eintragseditor benutzen Sie dazu den Button \menu{Abk�rzung an-/abschalten} neben dem \emph{Journal}-Feld. Es wird zwischen drei Modi hin- und hergeschaltet:
-\begin{itemize}
-    \item Kompletter Name, z.\,B. ">Aquacultural Engineering"<
-    \item \textls{ISO}-Abk�rzung, z.\,B. ">Aquacult. Eng."<
-    \item \textls{MEDLINE}-Abk�rzung, z.\,B. ">Aquacult Eng"<
-\end{itemize}
-Falls der Zeitschriftentitel sich nicht in Ihren Zeitschriftenlisten findet, wird das Feld nicht ver�ndert.
-
-Um die Zeitschriftentitel mehrerer Eintr�ge auf einmal zu konvertieren, k�nnen Sie eine beliebige Anzahl von Eintr�gen ausw�hlen und im Men� \menu{Extras} einen der Eintr�ge \menu{Zeitschriftentitel abk�rzen (ISO)}, \menu{Zeitschriftentitel abk�rzen (MEDLINE)} und \menu{Abk�rzung der Zeitschriften aufheben} w�hlen.
-Diese drei Aktionen sorgen daf�r, dass bei allen ausgew�hlten Eintr�gen die Zeitschriftentitel, die in den Zeitschriftenlisten gefunden werden konnten, abgek�rzt oder komplett ausgeschrieben werden.
-
-\subsubsection{Zeitschriftenlisten verwalten}
-
-Sie k�nnen mehrere Zeitschriftenlisten als externe Textdateien benutzen, die mit \jabref verlinkt sind. Die prim�re Liste kann in \jabref selbst verwaltet werden.
-
-\paragraph{Ihre pers�nliche Zeitschriften-Abk�rzungsliste}
-
-Ihre pers�nliche Liste verwalten Sie im oberen Teil des Dialogs \menu{Abk�rzung der Zeitschriftentitel}.
-W�hlen Sie \menu{Neue Datei} und geben einen Dateinamen ein oder klicken auf den \menu{Durchsuchen}-Button. Wenn Sie bereits eine Datei haben, die Sie als Grundlage nehmen wollen, w�hlen Sie stattdessen \menu{Bestehende Datei} und benutzen den \menu{Durchsuchen}-Button zum Ausw�hlen dieser Datei. Die Tabelle zeigt dann den Inhalt der Liste, die Sie ausgew�hlt haben.
-
-Sie k�nnen mit Hilfe der \menu{+} und \menu{--} Buttons an der rechten Seite Eintr�ge hinzuf�gen oder entfernen. F�r jeden Eintrag m�ssen Sie den vollst�ndigen Zeitschriftentitel und die ISO-Abk�rzung angeben (z.\,B. ">Aquacultural Engineering"< und ">Aquacult. Eng."<). Mit einem Doppelklick auf die Tabellenzeile k�nnen Sie die Eintr�ge bearbeiten.
-
-Sobald Sie auf \menu{OK} klicken (oder wenn Sie eine bestehende Datei ausgew�lt haben), enth�lt die Tabelle mindestens eine Zeile. Der Tabelleninhalt wird in die ausgew�hlte Datei geschrieben und die Zeitschriftenliste von \jabref wird aktualisiert.
-
-\paragraph{Externe Zeitschriftenlisten}
-
-Zus�tzlich zu Ihrer pers�nlichen Liste k�nnen Sie mehrere externe Listen verlinken. Diese Verkn�pfungen werden im unteren Teil des Dialogs \menu{Abk�rzung der Zeitschriftentitel} verwaltet. Externe Listen sind den pers�nlichen Listen �hnlich~-- der einzige Unterschied ist, dass Sie nicht mit \jabref selbst verwaltet werden k�nnen.
-
-Um eine externe Liste hinzuzuf�gen, klicken Sie zun�chst auf den \menu{+} Knopf, falls n�tig (das f�gt eine weitere Zeile hinzu). Dann benutzen Sie entweder den \menu{Durchsuchen}- oder den \menu{Herunterladen}-Button.
-    \begin{itemize}
-    \item Mit dem \menu{Durchsuchen}-Knopf k�nnen Sie eine auf Ihrem Computer bestehende Datei ausw�hlen.
-    \item Mit dem \menu{Herunterladen}-Knopf k�nnen Sie eine Liste aus dem Internet herunterladen, indem Sie einen URL angeben. Die Datei wird auf Ihrem Computer gespeichert und mit \jabref verlinkt.
-    Der URL ist standardm��ig die Adresse einer Zeitschriftenliste auf der \jabref-Homepage. Diese Liste ist unvollst�ndig, wird in Zukunft aber ausgebaut.
-    \end{itemize}
-Jeder Eintrag in Ihrer pers�nlichen Liste �berschreibt einen Eintrag mit demselben vollst�ndigen Zeitschriftentitel in einer Ihrer externen Listen. In �hnlicher Weise werden die externen Listen in der Reihenfolge, wie sie aufgelistet werden, abgearbeitet.
-
-\subsection{Wortauswahl verwalten}
-
-\label{ContentSelectorHelp}Diese Funktion erm�glicht es, eine Auswahl
-von oft benutzten W�rtern oder Phrasen zu speichern. In der Standardeinstellung
-ist sie f�r die Felder \emph{journal}, \emph{keywords} und \emph{publisher}
-aktiviert, aber Sie k�nnen die Funktion auch in anderen Feldern verwenden,
-indem Sie diese Felder im oberen Teil des Dialogs \menu{Extras} \msep{}
-\menu{Wortauswahl verwalten} hinzuf�gen.
-
-Die Wortauswahl gilt nur f�r die jeweilige Datei und wird daher zusammen
-mit den Literaturangaben in der \bibtex{}-Datei gespeichert. Jedes
-Feld mit Wortauswahl erh�lt im Eintrags-Editor einen gesonderten Bereich
-mit einer Auswahlliste und der Schaltfl�che \menu{Verwalten}. Wenn
-Sie die Auswahlliste mit der Maus anklicken, erscheint eine Liste
-der f�r dieses Feld verf�gbaren W�rter. Sobald Sie auf das gew�nschte
-Wort klicken, wird es in das entsprechende Feld geschrieben.
-
-Um ein neues Wort hinzuzuf�gen, schreiben Sie es einfach in das Auswahlfeld
-(�ber der Schaltfl�che \menu{Verwalten}) und dr�cken ENTER. Im Dialog
-\menu{Verwalten} k�nnen Sie hinzugef�gte W�rter auch wieder l�schen.
-
-
-\subsection{Import}
-
-\subsubsection{Import-Kontrollfenster}
-
-\label{ImportInspectionDialog}Beim Importieren neuer Eintr�ge aus
-einem unterst�tzten Format oder beim Herunterladen von Eintr�gen aus
-dem Internet werden diese Eintr�ge zun�chst im Import-Kontrollfenster
-gezeigt. Zu diesem Zeitpunkt wurden noch keine Eintr�ge zu einer ge�ffneten
-Datei hinzugef�gt.
-
-Im Kontrollfenster k�nnen Sie Eintr�ge entfernen, die nicht �bernommen
-werden sollen, und einige einfache Arbeiten durchf�hren wie etwa das
-Generieren von \bibtex{}-Keys f�r die Eintr�ge oder das Zuordnen von
-Eintr�gen zu Gruppen. Wenn Sie in eine bestehende Datei importieren,
-ist es oftmals leichter, diese Arbeiten durchzuf�hren, bevor die neuen
-Eintr�ge zwischen die bereits bestehenden sortiert wurden.
-
-\subsubsection[EndNote -> \jabref]{EndNote $\to$~\jabref}\label{subsubsec:endnote-jabref}
-
-EndNote hat einen Export-Stil \bibtex{}, der allerdings nicht alle
-Eintragstypen und Felder von \bibtex{} und auch nicht die zus�tzlich
-von \jabref genutzten Allgemeinen Felder (\emph{pdf}, \emph{owner},
-\emph{key} usw.) unterst�tzt. Falls Sie diese Felder nutzen wollen,
-verwenden Sie die EndNote Extras (\menu{Extras \msep{} EndNote Filter-Set entpacken}), extrahieren die Zip-Datei,
-die dabei erstellt wird und folgen den Anweisungen in der Datei \texttt{readme.txt}.
-
-\subsection{Export}
-\subsubsection[\jabref -> EndNote]{\jabref $\to$~EndNote}
-\label{EndnoteFilters}
-
-\begin{quote}
-\emph{\jabref kann Dateien so exportieren,
-dass EndNote sie lesen kann. Um diese Funktion zu nutzen, w�hlen Sie
-\menu{Datei \msep{} Exportieren}, dann bei \emph{Dateityp} \menu{Endnote} und
-geben den Namen der Export"=Datei an.}
-\end{quote}
-Der Standard"=Importfilter von EndNote kann nicht richtig mit mehreren
-Autoren oder Editoren umgehen. Es gibt zwei M�glichkeiten, um diese
-Schwierigkeit zu umgehen:
-
-\begin{enumerate}
-\item Benutzen Sie den eingebauten Filter und bessern Sie die Datei sp�ter
-aus.
-
-Um die Datei in EndNote zu �ffnen, erstellen Sie eine neue Datei oder
-�ffnen eine bestehende Datei in EndNote. Dann w�hlen Sie \menu{Datei}
-\msep{} \menu{Importieren}, klicken mit der Maus auf \menu{Datei w�hlen},
-w�hlen die aus \jabref exportierte Datei aus und dr�cken auf \menu{Ausw�hlen}.
-Anschlie�end dr�cken Sie auf \menu{Import Optionen} und w�hlen \menu{EndNote Import}.
-Mit einem Klick auf \menu{Importieren} starten Sie den Importvorgang.
-Anschlie�end gehen Sie zum Men�punkt \menu{Bearbeiten} \msep{} \menu{Text �ndern}
-und �ndern \emph{Any Field} in \emph{Author}. Geben Sie \lstinline{_and_}
-in das Suchfeld ein (die Unterstriche stehen f�r Leerzeichen) sowie ein RETURN-Zeichen
-in das Feld \emph{�ndern} (Option-Return unter Mac OS X, STRG-Return unter
-Windows XP). Dann klicken Sie auf \menu{�ndern}. Wiederholen Sie
-das Ganze f�r das Feld \emph{Secondary Author} (Zweiter Autor).
-
-\item Installieren Sie den \emph{EndNote Import from JabRef Filter}.
-
-Folgen Sie den Anweisungen im Abschnitt \nameref{EndNote_erweitert}. Um die Datei in
-EndNote zu �ffnen, erstellen Sie eine neue Datei oder �ffnen eine
-bestehende Datei in EndNote. Dann w�hlen Sie \menu{Datei} \msep{}
-\menu{Importieren}, klicken auf \menu{Datei w�hlen}, w�hlen die
-exportierte Datei aus und dr�cken auf \menu{Ausw�hlen}. Anschlie�end
-dr�cken Sie auf \menu{Import Optionen} und w�hlen \menu{EndNote Import from JabRef}.
-(Falls dieser Eintrag nicht erscheint, w�hlen Sie \menu{Weitere Filter}.
-Wenn er dann immer noch nicht erscheint, wurde der Filter nicht korrekt
-installiert.) Klicken Sie schlie�lich auf \menu{Importieren}, um
-den Importvorgang zu starten.
-
-\end{enumerate}
-Der EndNote Exportfilter ordnet \bibtex{}-Eintragstypen folgenden
-EndNote-Re\-fe\-renz\-ty\-pen zu:
-
-\medskip{}
-\begin{center}\begin{tabular}{ll}
-\textbf{\bibtex{}-Eintragstyp}&
-\textbf{Endnote-Referenztyp}\tabularnewline
-misc, other&
-Generic\tabularnewline
-unpublished&
-Manuscript\tabularnewline
-manual&
-Computer Program\tabularnewline
-article&
-Journal Article\tabularnewline
-book&
-Book\tabularnewline
-booklet&
-Personal Communication\tabularnewline
-inbook, incollection&
-Book Section\tabularnewline
-inproceedings&
-Conference Proceedings\tabularnewline
-techreport&
-Report\tabularnewline
-mastersthesis, phdthesis~&
-Thesis\tabularnewline
-\end{tabular} \end{center}
-\medskip{}
-
-\noindent In der Standardeinstellung geht der Exportfilter davon aus,
-dass Eintr�ge in den Feldern \emph{author} oder \emph{editor}, die
-geklammert sind, mehrere Autoren enthalten und ersetzt die Klammern
-durch ein angeh�ngtes Komma. Dadurch werden Eintr�ge, die \LaTeX{}-Befehle
-mit Klammern enthalten, als Eintrag mit mehreren Autoren gewertet
-und demzufolge unpassend formatiert.
-
-\subsubsection{Erweiterte Benutzung: EndNote Extras}
-
-\label{EndNote_erweitert}Einige Felder, die von \bibtex{} genutzt
-werden, geh�ren nicht zu EndNotes vorgegebenen Referenztypen. W�hrend
-der Import in \jabref und der Export nach \jabref ohne ein �ndern
-der Referenztypen funktioniert, werden die Feldnamen in EndNote nicht
-korrekt dargestellt (z.\,B. wird das PDF-Feld \emph{Custom 1} hei�en
-statt \emph{pdf}). Dar�ber hinaus k�nnen diese Felder bei neuen Eintr�gen
-in EndNote nicht genutzt werden, weil sie nicht im Eintragsdialog
-erscheinen. Der vorgegebene Importfilter von EndNote kann dar�berhinaus
-das Feld \emph{author} nicht richtig analysieren. Der \emph{EndNote
-Import from JabRef Filter} kann dies. Au�erdem erkennt dieser Filter
-ein Feld \texttt{endnotereftype}, das die vorgegebene Zuordnung �berschreibt.
-Um den Filter zu installieren, nutzen Sie die EndNote Extras
-(\menu{Extras \msep{} EndNote Filter-Set entpacken})
-und entpacken die Zip-Datei, die dabei erstellt wird. Dann folgen
-Sie den Angaben in der Datei \texttt{readme.txt}.
-
-\subsubsection{\jabref-Bibliographien in OpenOffice.org benutzen}
-\label{Export-OOo}
-\jabref kann Ihre Datei sowohl in das OpenOffice.org 1.1 \texttt{.sxc}"=Tabellenkalkulationsformat als auch in das OpenDocument \texttt{.ods}"=Tabellenkalkulationsformat, das von OpenOffice.org 2.0 benutzt wird, exportieren.
-
-In beiden F�llen besteht die exportierte Tabelle aus einem Arbeitsblatt, das die Eintr�ge in Reihen
-und die unterschiedlichen Felder in Spalten enth�lt. Die Reihenfolge und Benennung der Spalten ist kompatibel
-zu den Literaturverzeichnis-Funktionen von OpenOffice.org (OOo 1.1: \texttt{.sxc}, OOo 2.0: \texttt{.ods}).
-
-Je nach Ihrer Version von OpenOffice.org gibt es verschiedene
-    Vorgehensweisen, um JabRef zum Verwalten Ihrer bibliographischen
-    Datenbank zu benutzen:
-
-    \paragraph{Die exportierte Datei als bibliographische Datenbank in
-    OpenOffice.org 2.3 und 2.4 benutzen}
-
-    Mit folgenden Schritten k�nnen Sie eine aus \jabref exportierte
-    Tabelle als bibliographische Datenbank benutzen:
-
-  \begin{itemize}
-	  \item Exportieren Sie in \jabref Ihre Datei in das \texttt{.ods}-Format
-    \item �ffnen Sie OpenOffice.org Writer
-    \item W�hlen Sie \menu{Bearbeiten} \msep{} \menu{Datenbank austauschen}. Klicken Sie auf
-    \menu{Durchsuchen} und w�hlen die Datei, die Sie in das \texttt{.ods}-Format
-    exportiert haben.
-    \item Klicken Sie auf das \menu{+} vor dem Namen der Datenbank, anschlie�end
-    auf den angezeigten Dateinamen und schlie�lich auf den Knopf \menu{Festlegen}.
-    \item W�hlen Sie \menu{Extras} \msep{} \menu{Optionen} \msep{} \menu{OpenOffice.org Base} \msep{}
-    \menu{Datenbanken}. In diesem Fenster sollte die Datenbank, die Sie gerade
-    importiert haben, angezeigt werden. Die Standard-Datenbank f�r Bibliographien
-    von OOo sollte ebenfalls angezeigt werden (Bibliography).
-    \item Klicken Sie auf \menu{Bearbeiten} und �ndern Sie den Namen der Datenbank
-    \emph{Bibliography}, z.\,B. zu \emph{Bibliography-old} (denn OpenOffice.org
-    kann nicht mit mehreren bibliographischen Datenbanken arbeiten).
-    \item W�hlen Sie anschlie�end Ihre bibliographische Datenbank und benennen Sie sie um in
-    \emph{Bibliography} (achten Sie auf einen Gro�buchstaben am Anfang des Namens).
-  \end{itemize}
-    Nach diesen Schritten sollte Ihre bibliographische Datenbank zur Benutzung
-    mit OpenOffice.org bereit sein. Um das zu pr�fen, w�hlen Sie \menu{Einf�gen} \msep{}
-    \menu{Verzeichnisse} \msep{} \menu{Literaturverzeichniseintrag\ldots}. Im folgenden Dialog sollten
-    in der Dropdownliste (unter \menu{Kurzbezeichnung}) die \bibtex-Keys Ihrer
-    Datenbank erscheinen.
-
-\paragraph{Die exportierte Datei als Bibliographiedatenbank in OpenOffice 2.0, 2.1 oder 2.2 benutzen}
-Gehen Sie folgenderma�en vor, um eine Tabelle, die von \jabref exportiert wurde, als Bibliographiedatenbank in OpenOffice.org zu benutzen:
-
-\begin{itemize}
-\item Exportieren Sie Ihre Datenbank in das \texttt{.ods} -Format.
-\item Starten Sie OpenOffice.org.
-\item W�hlen Sie \menu{Extras} \msep{} \menu{Optionen} \msep{} \menu{OpenOffice.org Base} \msep{} \menu{Datenbanken}.
-\item Bearbeiten Sie die \emph{Bibliography}-Datenbank und �ndern ihren Namen z.\,B. in \emph{Bibliographie-alt}.
-\item Schlie�en Sie das Fenster \menu{Optionen} und gehen Sie zu \menu{Datei} \msep{} \menu{Neu} \msep{} \menu{Datenbank}.
-\item Dann w�hlen Sie \menu{Verbindung zu einer bestehenden Datenbank herstellen}, nehmen \menu{Tabellendokument} als
-    Datenbanktyp und w�hlen die \texttt{.ods}-Datei, die Sie exportiert haben.
-\item Klicken Sie auf \menu{Fertig stellen} und w�hlen den Namen \emph{Bibliography} im Speicherdialog.
-\end{itemize}
-Anschlie�end w�hlen Sie \menu{Extras} \msep{} \menu{Literaturdatenbank}. Ihre Datenbank sollte nun angezeigt werden.
-
-\paragraph{Eine exportierte Datei als Datenbank in OpenOffice 1.1.x benutzen}
-
-\begin{itemize}
-\item Exportieren Sie Ihre Datei in das \texttt{.sxc}-Format.
-\item Starten Sie OpenOffice.org.
-\item W�hlen Sie \menu{Extras} \msep{} \menu{Datenquellen}.
-\item W�hlen Sie die \emph{Bibliography}-Datei und �ndern ihren Namen beispielsweise in \emph{Bibliographie-alt}. 
-\item Dr�cken Sie \menu{Anwenden}.
-\item Klicken Sie \menu{Neue Datenquelle}. Ein neuer Eintrag erscheint. �ndern Sie den Namen zu \emph{Bibliography}.
-\item �ndern Sie den \menu{Dateityp} zu \menu{Tabelle}. Klicken Sie den \menu{\ldots}-Button in der Zeile \menu{Datenquellen URL}. W�hlen Sie die \texttt{.sxc}-Datei, die Sie exportiert haben.
-\item Klicken Sie auf \menu{OK}, um das Fenster \menu{Datenquellen} zu schlie�en.
-\end{itemize}
-Anschlie�end w�hlen Sie \menu{Extras} \msep{} \menu{Literaturdatenbank}.
-Ihre Datenbank sollte nun angezeigt werden.
-
-\subsubsection{Klartext-Import}
-
-\begin{quote}
-\emph{Sie k�nnen aus einfachen Text-Dateien oder der Zwischenablage
-einen Importvorgang starten, indem Sie \menu{BibTeX}} \msep{} \emph{\menu{Neuer Eintrag aus Klartext}
-oder die Tastenkombination STRG-SHIFT-N w�hlen.}
-\end{quote}
-Dieser Dialog erm�glicht das schnelle Einf�gen von Eintr�gen aus normalem
-Text. W�hlen Sie zun�chst aus, welcher Eintragstyp erstellt werden
-soll. F�gen Sie dann einfach Text aus der Zwischenablage ein (�ber das
-Kontextmen� im Textfeld mit der Wasserzeichenschrift >>Text einf�gen<<
-oder �ber den Button \menu{Einf�gen}). Alternativ k�nnen Sie �ber den Button
-\menu{Datei �ffnen} eine Datei ausw�hlen, um sie in den Dialog zu laden.
-
-Jetzt markieren Sie z.\,B. den Textbereich, der zum Titel des neuen
-Eintrags werden soll, und f�hren im rechten Teil des Dialogfensters
-im Bereich \menu{Verf�gbare BibTeX"=Felder} einen Doppelklick auf \emph{title} aus.
-So gehen Sie f�r alle weiteren Felder des neuen Eintrags vor. Sie
-k�nnen einem Feld nat�rlich auch mehrere Textbereiche zuordnen. Achten
-Sie dazu darauf, dass die Option \menu{anf�gen} aktiviert ist, ansonsten
-wird bei jedem neuen Zuweisen von Textbereichen das Feld �berschrieben
-(Option \menu{�berschreiben}).
-
-Bereits zugewiesene Textteile werden im Tab \menu{Importtext} blau
-hervorgehoben. Um zu kontrollieren, welche Textbereiche Sie einem
-bestimmten \bibtex{}-Feld zugewiesen haben, w�hlen Sie das Feld im
-rechten Bereich aus; der zugeordnete Text wird nun rot hervorgehoben.
-
-Sie k�nnen sich das Ergebnis des Importvorgangs jederzeit im Tab \menu{BibTeX"=Quelltext}
-des Importdialogs ansehen. Hier k�nnen keine �nderungen vorgenommen
-werden; das ist erst m�glich, sobald der Text tats�chlich importiert
-und ein neuer Eintrag angelegt wurde. Auf m�gliche Fehler werden Sie
-im Tab \menu{Hinweise und Warnungen} aufmerksam gemacht.
-
-Haben Sie alle Textstellen den gew�nschten \bibtex{}-Feldern zugewiesen,
-klicken Sie auf die Schaltfl�che \menu{�bernehmen}. Nun erstellt
-\jabref den neuen Eintrag, der allerdings noch keinen \bibtex{}-Key
-hat.
-
-\subsection{Links zu PDF- und \texorpdfstring{PS"=Dateien}{PS-Dateien}, URLs und DOIs}
-\label{ExternalFiles}
-
-\tip[Anmerkung: ]{Ab \jabref 2.3 gibt es ein verbessertes System f�r Links zu externen Dateien; siehe dazu den Abschnitt ">\nameref{FileLinks}"<.}
-
-\noindent Mit \jabref k�nnen Sie Ihre Eintr�ge mit
-den entsprechenden PDF- oder PS-Dateien, die sich auf Ihrem Computer
-befinden, verlinken. Ebenso ist es m�glich, Dateien im Internet �ber
-einen URL oder DOI zu verlinken.
-
-
-\subsubsection{Externe Betrachter einrichten}
-
-\jabref ben�tigt Informationen dar�ber, welche Programme es f�r
-PDF- und PS"=Dateien und Internetseiten benutzen soll. In der Standardeinstellung
-werden sie auf Werte gesetzt, die wahrscheinlich zu Ihrem Betriebssystem
-passen, so dass eine gute Chance besteht, dass Sie diese Werte nicht
-zu ver�ndern brauchen.
-
-\begin{quote}
-\emph{Um die Einstellungen der externen Programme zu �ndern, �ffnen
-Sie den Unterpunkt \menu{Externe Programme} im Dialog \menu{Optionen}}
-\msep{} \emph{\menu{Einstellungen}.}
-\end{quote}
-
-\subsubsection{Externe Dateien oder Links �ffnen}
-
-Es gibt verschiedene M�glichkeiten, wie man externe Dateien oder Internetseiten
-aus \jabref �ffnen kann. Im Eintrags-Editor k�nnen Sie einfach
-auf das Textfeld, das einen DOI oder URL enth�lt, doppelklicken. In
-der Tabellenansicht k�nnen Sie einen Eintrag ausw�hlen und die Men�eintr�ge
-(unter \menu{Extras}), die Tastenkombinationen (in der Standardeinstellung
-F4 f�r PDF/PS und F3 f�r DOI/URL) oder das Kontextmen� (mit der rechten
-Maustaste) benutzen, um die Datei oder Internetseite zu �ffnen. Schlie�lich
-k�nnen Sie auch auf ein PDF-, PS-, URL- oder DOI-Icon in der Tabelle
-klicken.
-
-In der Standardeinstellung zeigt die Tabellenansicht zwei Spalten
-mit Icons f�r die Eintr�ge, die mit externen Dateien oder URLs verlinkt
-sind. Beide Spalten k�nnen im Unterpunkt \menu{Tabellenansicht} des
-Dialogs \menu{Optionen} \msep{} \menu{Einstellungen} ausgeblendet
-werden. Die zweite Spalte zeigt Icons f�r PDF- oder PS-Dateien (nur
-PDF, wenn beide vorhanden sind), die dritte Spalte zeigt Icons f�r
-URL oder DOI (nur URL, wenn beide vorhanden sind).
-
-
-\subsubsection{Der Standard-Ordner f�r PDF-Dateien}
-
-PDF-Dateien erhalten von \jabref eine >>Spezialbehandlung<<,
-um das Verlinken mit den entsprechenden Eintr�gen so einfach wie m�glich
-zu gestalten. Um diese >>Spezialbehandlung<< nutzen zu k�nnen, m�ssen
-Sie im Unterpunkt \menu{Externe Programme} des Dialogs \menu{Optionen}
-\msep{} \menu{Einstellungen} einen Ordner als Standard-Ordner f�r
-Ihre PDF-Dateien angeben. Alle PDF-Dateien, die in diesem Ordner oder
-einem Unterordner gespeichert sind, werden mit einer relativen Pfadangabe
-referenziert, so dass Sie problemlos PDF-Verzeichnisse verschieben
-oder mit mehreren Benutzern von verschiedenen Netzwerkarbeitspl�tzen
-aus an derselben Datei arbeiten k�nnen.
-
-Wenn Sie Ihren PDF-Dateien dann noch Namen geben, die mit dem \bibtex{}-Key
-des entsprechenden Eintrags �bereinstimmen (abgesehen von der Dateiendung \texttt{.pdf}), 
-sucht \jabref in Ihrem Standard-PDF-Ordner und dessen
-Unterordnern nach der richtigen PDF-Datei. Sobald die korrekt benannte
-PDF-Datei sich dort befindet, klicken Sie auf die Schaltfl�che \menu{Auto}
-neben dem PDF-Feld im Eintrags-Editor. Wenn die PDF-Datei gefunden
-wird, wird das Feld entsprechend gesetzt.
-
-Wenn Sie eine PDF-Datei wie beschrieben benennen, k�nnen Sie sie auch
-�ffnen, ohne das PDF-Feld �berhaupt zu benutzen. Der Nachteil ist
-in diesem Fall allerdings, dass das PDF-Icon in der Tabellenansicht
-nicht angezeigt wird, solange das PDF-Feld leer bleibt.
-
-\subsubsection{Dateispezifische PDF- und PS-Verzeichnisse}
-
-Sie k�nnen f�r jede Datei eigene PDF- und PS-Verzeichnisse angeben \emph{(}\menu{Datei \msep{} Eigenschaften der Datei}\emph{)}. Diese Verzeichnisse ersetzen dann die Standardverzeichnisse.
-
-\subsubsection{Die Suche mit regul�ren Ausdr�cken f�r automatische Verkn�pfungen nutzen}
-\label{RegularExpressionSearch}
-
-Wenn Sie Dateinamen verwenden, die dem bibtexkey erg�nzt um die Dateiendung entsprechen, findet \jabref diese Dateien automatisch.
-
-Ab Version~2.2 ist mit Hilfe von regul�ren Ausdr�cken eine gr��ere Flexibilit�t beim Benennen der Dateien gew�hrleistet. In den meisten F�llen d�rfte das Standardverhalten bereits ausreichend sein.
-
-In den Einstellungen zu externen Programmen \emph{(}\menu{Optionen \msep{} Einstellungen \msep{} Externe Programme}\emph{)} findet sich eine Option ">Suche mit regul�rem Ausdruck benutzen"<. Wenn Sie diese Option aktivieren, k�nnen Sie f�r die Suche in PDF-Verzeichnissen einen eigenen regul�ren Ausdruck angeben.
-
-Die folgende Syntax wird verwendet:
-
-\begin{labeling}{MextensionM}
-  \item [\texttt{*}] Suche in allen direkten Unterverzeichnissen, NICHT im aktuellen Verzeichnis und in Unterverzeichnissen zweiter oder tieferer Ebene.
-  \item [\texttt{**}] Rekursive Suche in allen Unterverzeichnissen UND im aktuellen Verzeichnis.
-  \item [\texttt{.}] Das aktuelle Verzeichnis.
-  \item [\texttt{..}] Das Elternverzeichnis (eine Ebene h�her).
-  \item [\texttt{{[}title{]}}] Alle Ausdr�cke in eckigen Klammern werden durch den Inhalt des entsprechenden Felds ersetzt.
-  \item [\texttt{{[}extension{]}}] Wird durch die Dateiendung des Feldes, das Sie benutzen, ersetzt.
-  \item Anderer Text wird als regul�rer Ausdruck interpretiert. Aber Vorsicht: \emph{backslashes} m�ssen mit einem weiteren \emph{backslash} \emph{escaped} werden (\texttt{\textbackslash\textbackslash}), damit sie nicht mit Separatoren in Pfad-Angaben verwechselt werden.
-\end{labeling}
-Der Standard ist \lstinline{**/.*[bibtexkey].*\\.[extension]}. Damit wird in allen Unterverzeichnissen des Ordners der entsprechenden Dateiendung (z.\,B. das PDF-Verzeichnis) nach allen Dateien mit der richtigen Dateiendung gesucht, die den bibtexkey in ihrem Namen haben.
-
-\subsection{Links zu externen Dateien (ab Version 2.3)}
-\label{FileLinks}
-
-\jabref l�sst Sie Ihre Eintr�ge mit Dateien jeden Typs verlinken, die Sie auf Ihrem System gespeichert haben. Au�erdem sind Links zu Dokumenten im Internet in der Form eines URL oder eines DOI m�glich. Jedem Eintrag kann eine beliebige Anzahl von Datei-Links zugeordnet werden und jede verlinkte Datei kann schnell aus JabRef heraus ge�ffnet werden.
-
-Was \bibtex angeht, werden die Datei"=Links eines Eintrags in ein einzelnes Feld geschrieben. In \jabref erscheinen sie aber als editierbare Liste von Links, die im Eintrags"=Editor zug�nglich sind.
-
-\subsubsection{Einrichten der Dateitypen}
-
-F�r jeden Datei"=Link muss ein Dateityp gew�hlt werden, damit das richtige Programm zum �ffnen der Datei und das entsprechende Icon gefunden werden. Die Liste der Dateitypen k�nnen Sie einsehen und bearbeiten, indem Sie \menu{Optionen \msep Externe Dateitypen verwalten} w�hlen oder auf die Schaltfl�che \menu{Externe Dateitypen verwalten} im Bereich \menu{Externe Programme} des Einstellungs"=Dialogs klicken.
-
-Ein Dateityp besteht aus einem Namen, einem graphischen Icon, einer Dateierweiterung und einer Anwendung zum �ffnen der Dateien. Wenn Sie Windows benutzen, k�nnen Sie den Namen der Anwendung weglassen, wenn Sie das Standardprogramm verwenden wollen.
-
-\subsubsection{\texorpdfstring{Datei"=Links}{Datei-Links} zu einem Eintrag hinzuf�gen}
-
-Wenn bei den Allgemeinen Feldern (siehe Abschnitt~\ref{GeneralFields}) das Feld \texttt{file} eingetragen ist, k�nnen Sie die Liste der externen Links im \nameref{EntryEditorHelp} bearbeiten. Der Editor hat dann Schaltfl�chen zum Einf�gen, Bearbeiten, L�schen und Sortieren der Links.
-
-Eine Datei kann mit Hilfe der \menu{Auto}"=Schaltfl�che automatisch verlinkt werden, falls sie in Ihrem Dateiverzeichnis (\menu{Einstellungen \msep Externe Programme \msep Links zu externen Dateien \msep Hauptverzeichnis}) oder einem Unterordner liegt, eine Dateierweiterung hat, die \jabref bekannt ist, und einen Namen hat, der mit dem BibTeX"=Key des Eintrags �bereinstimmt. Die Regeln, nach denen Dateinamen mit BibTeX"=Keys automatisch verkn�pft werden, k�nnen eingestellt werden unter \ [...]
-
-Um eine Datei herunterzuladen und mit einem Eintrag zu verlinken, benutzen Sie die Schaltfl�che \menu{Download} im Eintrags"=Editor. Es erscheint ein Dialog, in dem Sie den URL eingeben m�ssen. Die Datei wird dann in Ihr Hauptverzeichnis gespeichert, anhand des BibTeX-Keys benannt und mit dem Eintrag verkn�pft.
-
-\subsubsection{Externe Dateien �ffnen}
-
-Es gibt mehrere M�glichkeiten, externe Dateien oder Internetseiten zu �ffnen. In der Tabellenansicht k�nnen Sie einen Eintrag ausw�hlen und mit dem Men�, einem Tastenk�rzel oder dem Kontextmen� den ersten externen Link �ffnen. Falls in der Tabellenansicht die Spalte \texttt{file} angezeigt wird (\menu{Einstellungen \msep Tabellenansicht \msep Spezielle Spalten \msep Datei"=Spalten anzeigen}), k�nnen Sie auch auf das Icon klicken, um den ersten Link eines Eintrags zu �ffnen. Um weitere Li [...]
-
-\subsection{XMP-Metadaten}
-\label{XMPHelp}
-
-XMP ist ein Standard, der von Adobe Systems entwickelt wurde, um Metadaten (Daten, die Informationen �ber andere Daten enthalten) in Dateien zu speichern. Ein bekanntes Beispiel f�r Metadaten sind ID3-Tags, die zur Beschreibung von K�nstlern, Albumtiteln und Liednamen einer MP3-Datei verwendet werden. Mit Hilfe von Metadaten k�nnen MP3-Dateien unabh�ngig von ihrem Dateinamen identifiziert und z.B. von MP3-Playern ausgelesen und angezeigt werden.
-
-Mit der XMP-Unterst�tzung versucht das \jabref-Team, die Vorteile von Metadaten in die Welt der Literaturmanager einzuf�hren. Sie k�nnen \menu{XMP schreiben} im \menu{Allgemein}-Tab des Eintragseditors w�hlen und damit alle \bibtex{}"=Informationen in die verlinkte PDF-Datei schreiben. Wenn Sie diese PDF-Datei mit anderen austauschen, k�nnen diese die Datei in das \jabref-Fenster ziehen und haben damit alle Informationen zur Verf�gung, die Sie eingegeben haben.
-
-\subsubsection{Benutzung}
-
-Um die XMP-Funktionen in \jabref zu nutzen, gehen Sie folgenderma�en vor:
-
-\begin{itemize}
-  \item Zum \emph{Importieren einer einzelnen PDF-Datei mit Metadaten} w�hlen Sie \menu{Datei \msep{} Importieren in {[}neue{|}aktuelle{]} Datenbank} und im anschlie�enden Dialog als Dateiformat \menu{PDF mit XMP-Anmerkungen} aus. Sie k�nnen die PDF-Datei stattdessen auch mit der Maus auf das Hauptfenster von \jabref ziehen.
-  \item Um \emph{bibliographische Informationen in eine verlinkte PDF-Datei zu schreiben}, klicken Sie auf \menu{XMP schreiben} im \menu{Allgemein}-Tab des Eintragseditors (neben dem \emph{pdf}"=Feld).
-  \item Wenn Sie \emph{alle PDFs einer Datei mit Metadaten versehen} wollen, w�hlen Sie \menu{Extras \msep{} XMP-Metadaten in PDFs schreiben}.
-  \item Um zu �berpr�fen, ob das Schreiben der Metadaten funktioniert hat, �ffnen Sie die Datei in Adobe Acrobat und w�hlen \menu{Datei \msep{} Dokumenteigenschaften} und dann unter dem Reiter \menu{Beschreibung} die Schaltfl�che \menu{Zus�tzliche Metadaten}. Wenn Sie links ">Erweitert"< ausw�hlen, sollten Sie im rechten Teil des Dialogs einen Eintrag \texttt{http://jabref.sourceforge.net\slash bibteXMP} sehen, der die entsprechenden Metadaten enth�lt. Dies geht nur mit dem Vollprogramm  [...]
-  \item Wer kein Adobe Acrobat zur Verf�gung hat, kann stattdessen das Programm ">pdfinfo"<\footnote{Dieses Programm ist Teil von \href{http://www.foolabs.com/xpdf/}{Xpdf} und \href{http://poppler.freedesktop.org/}{Poppler}.} verwenden, um die XMP-Metadaten zu �berpr�fen. Rufen Sie dazu auf der Kommandozeile einfach \lstinline{pdfinfo -meta <PDF-Datei>} auf, dann werden die entsprechenden Metadaten angezeigt.
-\end{itemize}
-
-\subsubsection{bibteXMP Dateiformat}
-
-XMP nutzt zum Speichern der Daten eine Teilmenge des \emph{Resource Description Framework} (RDF). F�r \jabref wird ein neues Metadatenformat benutzt, das \bibtex{} sehr gut abbildet. Alle Felder und Werte werden in Knoten eines XML-Dokuments verwandelt. Nur Autoren und Herausgeber werden als \texttt{rdf:Seq}-Strukturen gespeichert, so dass die trennenden ">and"< weggelassen werden k�nnen. Alle Strings und crossrefs werden in den Metadaten aufgel�st.
- 
-Das folgende einfache Minimal-Schema wird benutzt:
-\begin{itemize}
-  \item Der \bibtex{}-Key wird als \texttt{bibtexkey} gespeichert.
-  \item Der Eintragstyp wird als \texttt{entrytype} gespeichert.
-  \item \texttt{author} und \texttt{editor} sind kodiert als \texttt{rdf:Seq}, wobei die einzelnen Autoren und Herausgeber als \texttt{rdf:li}s dargestellt werden.
-  \item Alle anderen Felder werden unter ihrem Feld-Namen gespeichert.
-\end{itemize}
-
-Es folgt ein Beispiel:
-\begin{lstlisting}
- at INPROCEEDINGS{CroAnnHow05,
-  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
-  title = {Effective work practices for floss development: A model and propositions},
-  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
-  year = {2005},
-  owner = {oezbek},
-  timestamp = {2006.05.29},
-  url = {http://james.howison.name/publications.html}
-}
-\end{lstlisting}
-
-wird umgewandelt in
-
-\begin{lstlisting}
-<rdf:Description xmlns:bibtex="http://jabref.sourceforge.net/bibteXMP/"
-    bibtex:bibtexkey="CroAnnHow05"
-    bibtex:year="2005"
-    bibtex:title="Effective work practices for floss development: A model and propositions"
-    bibtex:owner="oezbek"
-    bibtex:url="http://james.howison.name/publications.html"
-    bibtex:booktitle="Hawaii International Conference On System Sciences (HICSS)"
-    bibtex:timestamp="2006.05.29">
-        <bibtex:author>
-            <rdf:Seq>
-                <rdf:li>K. Crowston</rdf:li>
-                <rdf:li>H. Annabi</rdf:li>
-                <rdf:li>J. Howison</rdf:li>
-                <rdf:li>C. Masango</rdf:li>
-            </rdf:Seq>
-        </bibtex:author>
-    <bibtex:entrytype>Inproceedings</bibtex:entrytype>
-</rdf:Description>
-\end{lstlisting}
-
-Wenn Sie bibteXMP parsen m�chten, beachten Sie, dass in RDF Attribut-Wert-Paare auch als Knoten wiedergegeben werden k�nnen und vice versa.
-
-\subsubsection{Weiterf�hrende Links}
-
-Einige Links zu XMP und PDFs mit Anmerkungen (englisch):
-
-\begin{itemize}
-  \item James Howison's Blog \href{http://freelancepropaganda.com/themp/}{">Themp---Managing Academic Papers like MP3s"<}
-  \item \href{http://www.xml.com/pub/a/2004/09/22/xmp.html}{XML.com-Artikel} zu XMP
-  \item \href{http://jempbox.org}{JempBox} und \href{http://pdfbox.org}{PDFBox} von Ben Litchfield (Java libraries zum Zugriff auf die PDFs und die Metadaten)
-  \item Gute \href{http://episteme.arstechnica.com/eve/ubb.x/a/tpc/f/8300945231/m/377001889631}{Diskussion bei ArsTechnica} zum Management von PDFs.
-  \item \href{http://partners.adobe.com/public/developer/en/xmp/sdk/xmpspecification.pdf}{Adobe XMP Spezifikation}
-\end{itemize}
-
-\subsection{\jabref und Online-Datenbanken}
-
-\subsubsection{CiteSeer}
-
-\label{CiteSeerHelp}
-\tip[]{CiteSeer ist eine digitale Bibliothek und Suchmaschine f�r wissenschaftliche Literatur, vornehmlich zu den Bereichen Computer und Informatik.}
-Mit \jabref lassen sich Informationen zu einer bestimmten
-Literaturangabe aus der CiteSeer-Datenbank herunterladen. Um diesen
-Vorgang zu starten, f�gen Sie Ihrer Datei einen neuen Eintrag hinzu
-und belegen das Feld \emph{citeseerurl} mit einem Link zur entsprechenden
-Inhaltsseite auf CiteSeer. Das Feld \emph{citeseerurl} muss in einem
-der folgenden Formate eingegeben werden:
-
-\begin{lstlisting}
-http://citeseer.ist.psu.edu/DDDDDD[.html] % oder
-oai:CiteSeerPSU:DDDDDD                    % oder
-DDDDDD
-\end{lstlisting}
-wobei DDDDDD eine Ziffernfolge darstellt. Um diese Ziffernfolge f�r
-einen CiteSeer-Eintrag zu finden, gehen Sie auf die Dokumentseite
-der Literaturangabe des Formats \texttt{http://citeseer.ist.psu.edu/}\texttt{\emph{nameYearTitle}}\texttt{.html}
-und klicken den (Update)"=Link f�r diese Literaturangabe. Die URL
-f�r den Update-Link beinhaltet die numerische ID f�r diese Literaturangabe.
-
-Sobald Sie das Feld \emph{citeseerurl} belegt haben, k�nnen Sie die
-CiteSeer-Felder herunterladen, indem Sie \menu{BibTeX} \msep{} \menu{Felder von CiteSeer importieren}
-ausw�hlen. Achten Sie darauf, dass Sie die Zeile(n) ausgew�hlt haben,
-die Sie aktualisieren wollen.
-
-\paragraph{Eine Datei mit zitierenden Literaturangaben erzeugen}
-
-Mit einem Satz von Literaturangaben k�nnen Sie eine Liste der Dokumente
-erzeugen, die die einzelnen Literaturangaben ihrerseits zitieren. Dazu
-muss jede Literaturangabe der entsprechenden Datenbank-Datei ein
-ausgef�lltes citeseerurl-Feld besitzen, dessen Inhalt dem oben
-beschriebenen Format entspricht. Sie k�nnen diese Funktion nutzen, indem
-Sie \menu{Zitierende Literatur von CiteSeer abrufen} ausw�hlen.
-
-\subsubsection{Medline}
-\label{MedlineHelp}
-
-\tip[]{MEDLINE ist die wichtigste Datenbank der \emph{U.\,S. National Library of Medicine}. Sie enth�lt Literaturangaben von Zeitschriftenartikeln der Lebenswissenschaften, vornehmlich der Biomedizin.
-\jabref kann Literaturangaben der Medline"=Datenbank
-herunterladen. Um diese Funktion zu nutzen, w�hlen Sie \menu{Extras
-\msep{} Medline abrufen}, so dass der Medline-Dialog im linken
-Seitenfeld erscheint.}
-Es gibt zwei M�glichkeiten, die Auswahl der Eintr�ge vorzunehmen,
-die heruntergeladen werden sollen:
-
-\begin{enumerate}
-\item Geben Sie eine oder mehr Medline IDs (getrennt durch Komma/Semikolon)
-in das Textfeld ein.
-\item Geben Sie Namen oder W�rter ein, nach denen gesucht werden soll. Sie
-k�nnen dazu die Operatoren \texttt{AND} und \texttt{OR} sowie Klammern
-benutzen, um Ihren Suchbegriff zu verfeinern.
-\end{enumerate}
-In beiden F�llen dr�cken Sie dann ENTER oder die Schaltfl�che \menu{Abrufen}.
-Wenn Sie eine Textsuche durchf�hren, wird Ihnen die Anzahl der gefundenen
-Eintr�ge angezeigt, und Sie k�nnen w�hlen, wie viele Sie herunterladen
-m�chten.
-
-Die abgerufenen Eintr�ge werden Ihrer zu diesem Zeitpunkt aktivierten
-Datei zugeordnet.
-
-\subsubsection{IEEEXplore}
-\label{IEEEXploreHelp}
-
-\tip[]{IEEEXplore bietet Zugang zu Literatur in den Bereichen Elektrotechnik, Informatik und Elektronik.}
-\jabref kann Literaturangaben der IEEEXplore-Datenbank herunterladen.
-Um diese Funktion zu nutzen, w�hlen Sie \menu{Internet \msep{} IEEEXplore abfragen}
-und geben in dem Dialog, der im linken Bildschirmbereich erscheint, Ihre
-Suchausdr�cke ein. Dr�cken Sie anschlie�end die
-ENTER-Taste oder den \menu{Abrufen}-Button.
-
-Die Suche wird im G�ste-Modus durchgef�hrt, es werden also maximal 100 Ergebnisse
-angezeigt.
-
-Sie k�nnen die \emph{abstracts} zusammen mit den Literaturangaben herunterladen,
-indem Sie einen Haken bei \menu{Abstracts ber�cksichtigen} setzen. Das verursacht
-eine deutlich h�here Anzahl von Netzwerk-Anfragen; um die Webseite von IEEEXplore
-nicht �berm��ig zu belasten, l�dt \jabref \emph{abstracts} nur bei einer Suche,
-deren Ergebnis eine bestimmte Trefferanzahl nicht �bersteigt.
-
-\subsubsection{Benutzung eines Proxy-Servers}
-
-Wenn Sie einen HTTP-Proxy-Server benutzen m�ssen, �bergeben Sie den
-Servernamen und die Portnummer an Java. Diese Umgebungseinstellungen
-sind dokumentiert unter
-\href{http://java.sun.com/j2se/1.4.2/docs/guide/net/properties.html}{http://java.sun.com/j2se/1.4.2/docs/guide/net/proper\allowbreak ties.html}
-
-\begin{lstlisting}
-java -Dhttp.proxyHost="hostname" -Dhttp.proxyPort="portnumber"
-\end{lstlisting}
-
-\subsection{\jabref mit mehreren Benutzern verwenden}
-
-\jabref bietet einige Funktionen, die besonders dann von Nutzen
-sind, wenn eine Datenbank von mehreren Benutzern~-- z.\,B. �ber
-ein Netzwerk~-- bearbeitet wird. Das sind vor allem die Felder \emph{owner}
-und \emph{timestamp}.
-
-
-\subsubsection{Zeitstempel \emph{(timestamp)}}
-\label{TimeStampHelp}
-
-\begin{quote}
-\emph{Die Benutzung des Zeitstempels kann unter
-\menu{Einstellungen}} \msep{} \emph{\menu{Allgemein} an- und
-abgestellt sowie ver�ndert werden.}
-\end{quote}
-\jabref kann automatisch das Feld \emph{timestamp} setzen, das
-das Datum enth�lt, an dem der Eintrag zur Datei hinzugef�gt wurde.
-Die Formatierung des Zeitstempels wird von einem Ausdruck mit Bezeichnern
-bestimmt, die die Position verschiedener Bestandteile des Datums angeben.
-Es folgen einige der verf�gbaren Bezeichner (die Beispiele in Klammern
-beziehen sich auf Mittwoch, den 14. September 2005, 17:45 Uhr):
-
-\begin{labeling}{00.00.0000}
-\item [\texttt{yy}]Jahr (05)
-\item [\texttt{yyyy}]Jahr (2005)
-\item [\texttt{MM}]Monat (09)
-\item [\texttt{dd}]Tag (14)
-\item [\texttt{HH}]Stunde (17)
-\item [\texttt{mm}]Minute (45)
-\end{labeling}
-Diese Bezeichner k�nnen mit Interpunktion und Leerzeichen kombiniert
-werden. Hier einige Beispiele:
-
-\begin{labeling}{dd.MM.yyyy-HH:m}
-\item [\texttt{yyyy.MM.dd}]$\to$ 2005.09.14
-\item [\texttt{yy-MM-dd}]$\to$ 05-09-14
-\item [\texttt{dd.MM.yyyy~HH:mm}]$\to$ 14.09.2005 17:45
-\end{labeling}
-
-\subsubsection{Besitzer \emph{(owner)}}
-
-\label{OwnerHelp}\jabref kann allen neuen Eintr�gen, die zu einer
-Datei hinzugef�gt oder in sie importiert werden, Ihren Benutzernamen
-beigeben. Diese Funktion k�nnen Sie im Men� \menu{Einstellungen}
-\msep{} \menu{Allgemein} ein- und ausschalten. Dort k�nnen Sie auch
-den Namen angeben, der in den Eintr�gen erscheinen soll.
-
-In der Standardeinstellung wird Ihr (System-)Benutzername verwendet.
-Der Name wird in dem Feld \emph{owner} eingetragen, das in der Standardeinstellung
-im Tab \emph{General fields} des Eintragseditors angezeigt wird.
-
-
-\subsection{\jabref von der Kommandozeile}
-
-\label{CommandLine}Obwohl \jabref in erster Linie ein Programm
-mit grafischer Benutzeroberfl�che ist, bietet es einige n�tzliche
-Optionen f�r die Kommandozeile und kann sogar Dateikonvertierungen
-durchf�hren, ohne die grafische Benutzeroberfl�che zu �ffnen.
-
-Sie k�nnen eine oder mehrere \bibtex{}-Dateien laden, indem Sie auf
-der Kommandozeile die entsprechenden Dateinamen auflisten. Achten
-Sie darauf, alle gew�nschten Optionen anzugeben, bevor Sie die Dateinamen
-anf�gen. Au�erdem m�ssen Sie sich vergewissern, dass der erste Dateiname
-nicht als Argument einer Option missverstanden werden kann~-- falls
-eine Bool'sche Option wie \texttt{-n} oder \texttt{-l} direkt vor
-einem Dateinamen steht, m�ssen Sie also \texttt{true} als Argument
-angeben. Das Beispielkommando:
-
-\begin{lstlisting}
-jabref -o filetoexport.xml,docbook -n true original.bib
-\end{lstlisting}
-l�dt die Datei \texttt{original.bib}, exportiert sie in das Docbook-Format,
-speichert sie unter dem Namen \texttt{filetoexport.xml} und unterdr�ckt
-das Laden der grafischen Oberfl�che. Das Word \emph{true} verhindert,
-dass der Dateiname als Argument der Option \texttt{-n} interpretiert
-wird.
-
-
-\subsubsection{Kommandozeilen-Optionen}
-\label{kommandozeilenoptionen}
-Im folgenden werden die wichtigsten Optionen und Befehle f�r die Kommandozeile
-vorgestellt.
-
-\begin{itemize}
-\item Hilfe: \texttt{-h}
-
-Diese Option veranlasst \jabref, eine Zusammenfassung der Kommandozeilen"=Optionen
-anzuzeigen und das Programm unmittelbar darauf zu schlie�en.
-
-\item Kein GUI-Modus: \texttt{-n}
-
-Diese Option unterdr�ckt sowohl das \jabref-Fenster als auch den
-Er�ffnungsbildschirm, der normalerweise beim Programmstart angezeigt
-wird. Das Programm wird beendet, sobald die Kommandozeilen-Optionen
-abgearbeitet wurden.
-Diese Option ist n�tzlich, um Dateikonvertierungen von der Kommandozeile
-oder mit Hilfe eines Scripts durchzuf�hren.
-
-\item Sitzung laden: \texttt{-l}
-
-Diese Option veranlasst \jabref, eine gespeicherte Sitzung zu laden,
-sofern eine vorhanden ist, bevor sich das Hauptfenster �ffnet.
-
-\item Datei importieren: \texttt{-i Dateiname{[},Importformat{]}}
-
-Bei dieser Option importiert oder l�dt \jabref eine bestimmte Datei.
-Wenn nur ein Dateiname angegeben wird oder ein Komma und ein {*}-Zeichen
-hinter dem Dateinamen stehen, versucht \jabref, das Dateiformat
-automatisch zu erkennen. Das sollte bei allen \bibtex{}-Dateien ebenso
-funktionieren wie bei Dateien, die in einem der von \jabref unterst�tzten
-Importformate vorliegen. Wenn dem Dateinamen ein Komma und ein Importformat
-folgen, wird der angegebene Importfilter benutzt. Mit der Option \texttt{-h}
-k�nnen Sie sich eine Liste der verf�gbaren Importformate anzeigen
-lassen.
-
-Wenn Sie zus�tzlich eine Export-Option angeben, wird der Import immer
-zuerst ausgef�hrt, bevor die importierte oder geladene Datei an den
-Exportfilter �bergeben wird. Falls die grafische Oberfl�che nicht
-mit der Option \texttt{-n} unterdr�ckt wird, werden alle geladenen
-oder importierten Dateien im Hauptfenster von \jabref angezeigt.
-
-Die Option \texttt{-i} kann nur einmal angegeben werden und nimmt
-als Argument maximal eine Datei.
-
-\item Datei exportieren: \texttt{-o Dateiname{[},Exportformat{]}}
-
-Diese Option veranlasst \jabref, eine Datei zu speichern oder zu
-exportieren, die von derselben Kommandozeile geladen oder importiert
-wurde. Wenn eine Datei mit der Option \texttt{-i} importiert wurde,
-wird diese Datei exportiert. Ansonsten wird die Datei exportiert,
-die \emph{zuletzt}~-- ohne die Option \texttt{-i}~-- angegeben (und
-erfolgreich geladen) wurde.
-
-Wird nur ein Dateiname angegeben, so wird diese Datei im \bibtex{}-Format
-gespeichert. Wenn dem Dateinamen ein Komma und ein Exportformat folgen,
-wird der angegebene Exportfilter benutzt. Auf diese Weise wird auch
-ein benutzerdefinierter Exportfilter angewendet; wenn der Name sowohl
-auf einen Standard-Exportfilter, als auch auf einen benutzerdefinierten
-Exportfilter zutrifft, wird der benutzerdefinierte verwendet.
-
-Mit der Option \texttt{-h} k�nnen Sie sich eine Liste der verf�gbaren
-Exportformate anzeigen lassen.
-
-Falls die Option \texttt{-n} nicht aufgerufen wurde, wird jeder Exportvorgang
-durchgef�hrt, bevor das \jabref-Fenster ge�ffnet wird. Dort werden
-dann die importierten Dateien angezeigt.
-
-Die Option \texttt{-o} kann nur einmal angegeben werden und nimmt
-als Argument maximal eine Datei.
-
-\item Einstellungen exportieren: \texttt{-x Dateiname}
-
-Mit dieser Option k�nnen Sie \jabref veranlassen, alle Benutzer"=Einstellungen
-in eine XML-Datei zu speichern. Nach dem Export startet \jabref
-normal.
-
-\item Einstellungen importieren: \texttt{-p Dateiname}
-
-Mit dieser Option importiert \jabref Benutzer-Einstellungen, die
-mit der Option \texttt{-x} exportiert wurden. Nach dem Import startet
-\jabref normal.
-
-\item Nur benutzte Eintr�ge exportieren:\\ \texttt{-a Dateiname{[}.aux{]},neueBibDatei{[}.bib{]}}
-
-Manchmal ist es n�tzlich, eine \bibtex{}-Datei zu haben, die nur die
-benutzten Eintr�ge enth�lt. Eine Liste dieser benutzten Eintr�ge findet
-sich in einer .aux-Datei (sobald Sie \LaTeX{} aufgerufen haben). \jabref
-kann diese Datei analysieren, um eine neue \bibtex{}-Datei zu erstellen,
-die nur die bekannten und benutzten Eintr�ge enth�lt. Das bedeutet,
-dass ein Eintrag, der in der Standard-\bibtex{}-Datei nicht definiert
-ist, auch nicht in die neue Datei geschrieben werden kann.
-
-\item Aus dem Internet abrufen:\\ \lstinline{--fetch==Name des Fetchers:Suchausdruck}
-
-Die \emph{Fetcher}, also die direkte Suche in Online-Datenbanken,
-die Sie im Men� \menu{Internet} finden, k�nnen auch von der Kommandozeile
-aus gestartet werden. Nutzen Sie dazu die Option \lstinline{--fetch} und geben
-sowohl den Namen des Fetchers (z.B. ">ieee"<, ">medline"< oder ">jstor"<)
-als auch den Suchausdruck oder die ID des gesuchten Mediums an. Beachten
-Sie, dass einige Fetcher eine graphische Oberfl�che (GUI) anzeigen,
-falls Sie eine R�ckmeldung von Ihnen brauchen. Um eine �bersicht der
-verf�gbaren Fetcher zu erhalten, geben Sie \texttt{-{-}fetch} ohne
-Parameter ein.
-
-\end{itemize}
-
-\subsubsection{Externer Zugriff}
-\label{RemoteHelp}
-\begin{quote}
-\emph{Diese Funktion kann unter \menu{Optionen \msep{} Einstellungen \msep{} Erweitert} verwaltet werden.}
-\end{quote}
-
-\tip[]{Beachten Sie, dass das Aktivieren dieser Funktion mit Windows XP SP2 (und m�glicherweise auch mit anderen Konfigurationen) zu einer Meldung f�hren kann, die besagt, dass bestimmte Funktionen des Programms von der Windows-Firewall geblockt wurden. Sie k�nnen die Firewall anweisen, weiterhin zu blocken, denn die Firewall beeintr�chtigt den Externen Zugriff von \jabref nicht.}
-Falls das Abh�ren von externen Zugriffen aktiviert ist, versucht \jabref beim Programmstart, den entsprechenden Port abzuh�ren. Das bedeutet, dass andere Anwendungen Informationen durch diesen Port an \jabref senden k�nnen. \jabref akzeptiert dabei nur lokale Verbindungen, um das Risiko eines Eingriffs von au�erhalb auszuschlie�en.
-
-Mit dem externen Zugriff kann eine zweite Instanz von \jabref erkennen, dass eine erste Instanz bereits l�uft. In diesem Fall leitet die zweite Instanz ihre Kommandozeilen"=Optionen an die erste Instanz weiter und beendet sich selbst direkt im Anschluss~-- sofern die zweite Instanz nicht ausdr�cklich instruiert wurde, im Stand-Alone-Modus (als selbst�ndige Instanz) zu starten.
-
-Die erste \jabref-Instanz liest die Kommandozeilenoptionen und f�hrt die erforderlichen Aktionen aus, z.\,B. das Lesen oder Importieren einer Datei oder das Anh�ngen einer Datei an die aktive Datenbank. Falls eine Datei mit der Option \texttt{-{-}importToOpen} importiert wird, werden die Eintr�ge an die aktive Datei angeh�ngt. Falls keine Datei ge�ffnet ist, wird eine neue Datei angelegt.
-
-\clearpage 
-\section{Anpassung}
-\secttoc
-
-\subsection{Eintragstypen}
-
-\label{CustomEntriesHelp}
-
-\begin{quote}
-\emph{Um Eintragstypen anzupassen, w�hlen Sie den Men�punkt \menu{Optionen}}
-\msep{} \emph{\menu{Eintragstypen anpassen}.}
-\end{quote}
-Wenn Sie einen Eintragstyp anpassen, definieren Sie sowohl sein Erscheinungsbild
-im Eintragseditor als auch die Bedingungen, nach denen \jabref
-einen Eintrag als vollst�ndig akzeptiert. Sie k�nnen die bestehenden
-Eintragstypen ver�ndern und neue hinzuf�gen.
-
-Beachten Sie, dass in diesem Dialog keine �nderungen gespeichert werden,
-solange Sie nicht auf \menu{�bernehmen} oder \menu{OK} klicken.
-Wenn Sie \menu{Abbrechen} anklicken oder einfach den Dialog schlie�en,
-gehen die bislang nicht �bernommenen �nderungen verloren.
-
-
-\subsubsection{Der Dialog \menu{Eintragstypen anpassen}}
-
-Der Dialog \menu{Eintragstypen anpassen} ist in drei Hauptbereiche
-unterteilt. Im linken Bereich k�nnen Sie den Eintragstyp ausw�hlen,
-den Sie bearbeiten wollen, und neue Eintragstypen hinzuf�gen. Im mittleren
-Bereich werden die Einstellungen f�r die ben�tigten Felder des ausgew�hlten
-Eintragstyps vorgenommen und im rechten Bereich diejenigen der optionalen
-Felder.
-
-
-\subsubsection{Eintragstypen hinzuf�gen und l�schen}
-
-Die derzeit verf�gbaren Eintragstypen werden im linken Bereich des
-Dialogfensters aufgelistet. Wenn Sie einen Eintragstyp ausw�hlen,
-werden die anderen Bereiche aktualisiert und zeigen die ben�tigten
-und optionalen Felder dieses Eintragstyps.
-
-Um einen neuen Eintragstyp hinzuzuf�gen, geben Sie einfach seinen
-Namen in das Textfeld unter der Typliste ein und klicken \menu{Hinzuf�gen}.
-Der neue Eintragstyp wird zur Liste hinzugef�gt und zur Bearbeitung
-ausgew�hlt.
-
-Um einen eigenen Eintragstyp zu entfernen, w�hlen Sie ihn aus und
-klicken auf \menu{L�schen}. Dieser Vorgang ist nur f�r eigene Eintragstypen
-verf�gbar, die nicht nur Abwandlungen der Standard-Typen sind. Die
-Standard-Eintragstypen k�nnen nicht gel�scht werden.
-
-Um einem Eintragstyp seinen Standardwert zur�ckzugeben, w�hlen Sie
-ihn aus und dr�cken auf \menu{Standard}. Dieser Vorgang ist nur f�r
-Standard-Typen verf�gbar, die bearbeitet wurden.
-
-
-\subsubsection{Eintragstypen bearbeiten}
-
-Wenn ein Eintragstyp ausgew�hlt ist, werden die derzeitigen ben�tigten
-und optionalen Felder im mittleren und rechten Bereich des Dialogfensters
-aufgelistet. Das Vorgehen beim Bearbeiten dieser Listen ist f�r die
-ben�tigten und optionalen Felder identisch.
-
-Um ein neues Feld hinzuzuf�gen, bearbeiten Sie das Textfeld unterhalb
-der Liste oder w�hlen einen Feldnamen aus dem Dropdown-Men� und klicken
-auf \menu{Hinzuf�gen}. Der gew�hlte Feldname erscheint am Ende der
-Liste.
-
-Um eines oder mehrere Felder zu l�schen, w�hlen Sie sie in der Liste
-aus und klicken auf \menu{L�schen}. Die Reihenfolge der Felder k�nnen
-Sie �ndern, indem Sie einen Feldnamen ausw�hlen und die Pfeil"=Buttons
-benutzen, um das Feld nach oben oder nach unten zu verschieben.
-
-Es gibt eine Beschr�nkung beim Anpassen der Eintragstypen; bestimmte
-Typen haben eine ">und/oder"<"=Bedingung in ihren ben�tigten Feldern. Ein
-\emph{book}-Eintrag ist beispielsweise komplett, wenn entweder das
-Feld \emph{author} oder \emph{editor} oder beide gesetzt sind. Diese
-Art von Bedingung kann in einem angepassten Eintragstyp nicht realisiert
-werden.
-
-
-\subsection{Allgemeine Felder festlegen}
-
-\label{GeneralFields}Sie k�nnen dem Eintragseditor eine beliebige
-Anzahl von Tabs hinzuf�gen, die bei allen Eintragstypen sichtbar sind.
-W�hlen Sie dazu den Men�eintrag \menu{Optionen} \msep{} \menu{Allgemeine Felder festlegen}.
-
-Jede Zeile repr�sentiert einen Tab. Der Anfang der Zeile steht f�r
-den Namen des Tabs, gefolgt von einem Doppelpunkt. Anschlie�end listen
-Sie die einzelnen Felder auf, die der Tab enthalten soll, und trennen
-sie jeweils durch ein Semikolon.
-
-Das Beispiel
-
-\begin{lstlisting}
-Allgemeine Felder:url;keywords;doi;pdf
-Zusammenfassung:abstract;annote
-\end{lstlisting}
-ergibt somit einen Tab mit dem Namen >>Allgemeine Felder<<, der
-die Felder \emph{url}, \emph{keywords}, \emph{doi} und \emph{pdf}
-enth�lt, sowie einen zweiten Tab namens >>Zusammenfassung<< mit
-den Feldern \emph{abstract} und \emph{annote}.
-
-
-\subsection{Automatische Erstellung von \texorpdfstring{\bibtex{}"=Keys}{BibTeX-Keys}}
-\label{LabelPatterns}
-\begin{quote}
-\emph{Unter \menu{Optionen \msep{} Einstellungen \msep{} BibTeX"=Key"=Muster} 
-kann man die Felder bestimmen, die zur automatischen Generierung der
-\bibtex{}"=Keys herangezogen werden.}
-\end{quote}
-\jabref verwendet ein Standardmuster zur Generierung von \bibtex{}"=Keys, das Keys wie z.\,B.
-\texttt{Yared1998} erzeugt. Falls der \bibtex{}-Key in der ge�ffneten
-Datei nicht eindeutig sein sollte, wird einer der Buchstaben a-z angef�gt,
-bis ein eindeutiger Key gefunden ist. Dementsprechend k�nnten die
-Labels wie folgt aussehen:
-
-\begin{lstlisting}
-Yared1998
-Yared1998a
-Yared1998b
-(*\ldots*)
-\end{lstlisting}
-Um das Aussehen der \bibtex{}-Keys zu bestimmen, benutzt \jabref
-Feldmarken. Das Key"=Muster kann f�r jeden der vorgegebenen Eintragstypen
-bestimmt werden. Es kann beliebigen Text enthalten, unabh�ngig von
-und zus�tzlich zu den Feldmarken, die angeben, dass ein bestimmtes
-Feld des Eintrags an dieser Stelle des Keys eingef�gt werden soll.
-Eine Feldmarke besteht gew�hnlich aus dem Feldnamen in eckigen Klammern,
-z.\,B. \texttt{{[}volume{]}}. Wenn dieses Feld zum Zeitpunkt der
-Erstellung des Keys leer ist, wird kein Text eingef�gt.
-
-Es gibt au�erdem mehrere spezielle Feldmarken, die nur einen bestimmten
-Teil aus einem Feld extrahieren. Sie werden unten aufgelistet. Nat�rlich
-k�nnen Sie auch neue spezielle Feldmarken vorschlagen.
-
-
-\subsubsection{Spezielle Feldmarken}
-\label{subsub:SpezielleFeldmarken}
-
-\begin{labeling}{auth.auth.eaMM}
-\item [\texttt{{[}auth{]}}]Der Nachname des ersten Autors.
-\item [\texttt{{[}authors{]}}]Die Nachnamen aller Autoren.
-\item [\texttt{{[}authorsN{]}}]Die Nachnamen von bis zu N Autoren. Falls
-es mehr Autoren gibt, wird EtAl angeh�ngt.
-\item [\texttt{{[}authIniN{]}}]Der Anfang des Nachnamens von jedem Autoren,
-wobei nicht mehr als N Buchstaben verwendet werden.
-\item [\texttt{{[}authorIni{]}}]Die ersten 5 Buchstaben des Nachnamens
-des ersten Autors und die Initialen der Nachnamen der restlichen Autoren.
-\item [\texttt{{[}authN{]}}]Die ersten N Buchstaben des Nachnamens des
-ersten Autors.
-\item [\texttt{{[}authN\_M{]}}]Die ersten N Buchstaben des Nachnamens des
-M-ten Autors.
-\item [\texttt{{[}auth.auth.ea{]}}]Die Nachnamen der beiden ersten Autoren
-und \texttt{.ea}, falls es mehr als zwei Autoren sind.
-\item [\texttt{{[}auth.etal{]}}]Der Nachname des ersten Autors und der Nachname des zweiten Autors bei zwei Autoren bzw. \texttt{.etal} bei mehr als zwei Autoren.
-\item [\texttt{{[}authshort{]}}]Der Nachname bei einem Autor; der erste
-Buchstabe der Nachnamen von bis zu drei Autoren, falls mehr als ein
-Autor vorhanden ist. Ein Plus (+) wird angeh�ngt, falls es mehr als
-drei Autoren gibt.
-\end{labeling}
-
-\tip[Anmerkung: ]{Falls es keinen Autor gibt (etwa bei einem Buch mit Herausgeber), benutzen die genannten \texttt{{[}auth\ldots{]}}"=Feldmarken den oder die Herausgeber, die im editor"=Feld angegeben wurden. Also werden die Herausgeber eines Buches ohne Autor f�r die Label"=Erstellung wie Autoren behandelt. Falls Sie dieses Verhalten nicht w�nschen und die Feldmarke stattdessen bei einem leeren author"=Feld zu nichts expandieren soll, m�ssen Sie stattdessen >>pureauth<< verwenden, z.\,B [...]
-
-\begin{labeling}{veryshorttitleMM}
-\item [\texttt{{[}edtr{]}}]Der Nachname des ersten Herausgebers.
-\item [\texttt{{[}editors{]}}]Die Nachnamen aller Herausgeber.
-\item [\texttt{{[}edtrIniN{]}}]Der Anfang des Nachnamens von jedem Herausgeber,
-wobei nicht mehr als N Buchstaben verwendet werden.
-\item [\texttt{{[}editorIni{]}}]Die ersten 5 Buchstaben des Nachnamens
-des Herausgebers und die Initialen der Nachnamen der restlichen Herausgeber.
-\item [\texttt{{[}edtrN{]}}]Die ersten N Buchstaben des Nachnamens des
-ersten Herausgebers.
-\item [\texttt{{[}edtrN\_M{]}}]Die ersten N Buchstaben des Nachnamens des
-M-ten Herausgebers.
-\item [\texttt{{[}edtr.edtr.ea{]}}]Der Nachname der ersten beiden Herausgeber
-und \texttt{.ea}, falls es mehr als zwei Herausgeber sind.
-\item [\texttt{{[}edtrshort{]}}]Der Nachname bei einem Herausgeber; der
-erste Buchstabe der Nachnamen von bis zu drei Herausgebern, falls
-mehr als ein Herausgeber vorhanden ist. Ein Plus (+) wird angeh�ngt,
-falls es mehr als drei Herausgeber gibt.
-\item [\texttt{{[}firstpage{]}}]Die erste Seitenzahl einer Ver�ffentlichung
-(pages).
-\item [\texttt{{[}keywordN{]}}]Stichwort Nummer N aus dem Feld ">keywords"<, gesetzt den Fall, dass die Stichworte durch Komma oder Semikolon voneinander getrennt sind.
-\item [\texttt{{[}lastpage{]}}]Die letzte Seitenzahl einer Ver�ffentlichung
-(pages).
-\item [\texttt{{[}shorttitle{]}}]Die ersten 3 Worte eines Titels (title).
-\item [\texttt{{[}shortyear{]}}]Die letzten 2 Ziffern des Jahrgangs (year).
-\item [\texttt{{[}veryshorttitle{]}}]Die ersten beiden Worte des Titels
-(title), wobei >>the<<, >>a<< und >>an<< ausgelassen werden.
-\end{labeling}
-Hinter einem Feldnamen (oder einem der oben aufgef�hrten Pseudo"=Feldnamen)
-kann ein Modifikator stehen. Modifikatoren werden in der Reihenfolge
-angewendet, in der sie angegeben wurden.
-
-\begin{labeling}{00.00.0000}
-\item [\texttt{:abbr}]K�rzt den Text, der von einem Feldnamen oder speziellen
-Feldmarken gebildet wird. Nur der erste Buchstabe und weitere Buchstaben,
-die auf ein Leerzeichen folgen, werden ber�cksichtigt. So w�rde beispielsweise
-\texttt{[journal:abbr]} die Zeitschrift >>Journal of Fish Biology<< zu
->>JoFB<< wandeln.
-\item [\texttt{:lower}]Wandelt den von der Feldmarke eingef�gten Text in
-Kleinbuchstaben. So wird beispielsweise bei \texttt{{[}auth:lower{]}}
-der Nachname des ersten Autors in Kleinbuchstaben ausgegeben.
-\end{labeling}
-Das Standardmuster, das \bibtex{}-Keys wie \texttt{Yared1998}
-erzeugt, ist \texttt{{[}auth{]}{[}year{]}}. Wenn Sie keine Key-Muster
-f�r einen bestimmten Eintragstyp angeben, wird dieses vorgegebene
-Muster verwendet. Sie k�nnen das vorgegebene Muster nat�rlich ebenfalls
-anpassen%~-- seine Einstellung befindet sich �ber der Liste der Eintragstypen
-%im Tab \menu{Key-Muster} des Dialogs \menu{Einstellungen}
-.
-
-Beachten Sie, dass \jabref Umlaute und Buchstaben mit Akzenten
-sowie das � beim Erstellen von \bibtex{}-Keys ver�ndert, um m�glichen
-Problemen vorzubeugen. Hierzu einige Beispiele:
-
-\begin{lstlisting}
-D�az Iba�ez (*$\to$*) DiazIbanez
-Str�mb�ck   (*$\to$*) Stroembaeck
-Wa�enhoven  (*$\to$*) Wassenhoven
-\end{lstlisting}
-
-\subsubsection{Ersetzen eines regul�ren Ausdrucks}
-
-Nachdem das Key"=Muster angewendet wurde, um einen \bibtex{}"=Key zu erstellen, k�nnen Sie den Key"=Generator nach einem bestimmten regul�ren Ausdruck suchen und diesen durch eine Zeichenfolge ersetzen lassen. Der regul�re Ausdruck und die Zeichenfolge, die ihn ersetzen soll, werden in den Textfeldern unter der Liste der Key"=Muster eingegeben. Falls das Feld zur Ersetzung des regul�ren Ausdrucks leer ist, werden die mit der Suche �bereinstimmenden regul�ren Ausdr�cke einfach gel�scht.
-
-\subsection{Eintragsvorschau}
-
-\label{PreviewHelp}Die Eintragsvorschau wird mit denselben Mechanismen
-erstellt, die auch bei den Exportfiltern angewendet werden. Bei der
-Vorschau durchl�uft ein Eintrag eins von zwei m�glichen Layouts (die
-sie mit F9 wechseln k�nnen) und erstellt HTML-Code, der im Vorschaudialog
-am unteren Bildschirmrand angezeigt wird.
-
-Aussehen und Inhalt der Vorschau k�nnen mit derselben Syntax ver�ndert
-werden, die f�r die Anpassung der Exportfilter verwendet wird (siehe
-Abschnitt~\ref{CustomExports}).
-
-\subsection{Exportfilter}
-
-\label{CustomExports}Mit \jabref k�nnen Sie Ihre eigenen Exportfilter
-definieren und genau so wie die Standard"=Exportfilter benutzen. Ein
-Exportfilter wird durch eine oder mehrere \emph{Layout"=Dateien} definiert,
-die mittels eingebauter Formatierprogramme das Format der exportierten
-Dateien festlegen. Ihre Layout-Datei m�ssen Sie in einem separaten
-Text\-editor erstellen.
-
-
-\subsubsection{Hinzuf�gen eines Exportfilters}\label{subsubsec:Hinzufuegen-Exportfilter}
-
-Die einzige Voraussetzung f�r einen Exportfilter ist, dass eine Datei
-mit der Endung \texttt{.layout} vorhanden ist. Um einen neuen, eigenen
-Exportfilter hinzuzuf�gen, �ffnen Sie das Dialogfenster \menu{Optionen}
-\msep{} \menu{Verwalte externe Exportfilter} und klicken auf die
-Schaltfl�che \menu{Neu}. Es �ffnet sich ein neues Fenster, in dem
-Sie einen Namen (der als Auswahl im Dateityp"=Dropdownmen� erscheint, wenn man \menu{Datei \msep{} Exportieren} im \jabref"=Hauptfenster w�hlt), eine Pfadangabe zur \texttt{.layout}-Datei und die
-gew�nschte Dateiendung f�r den Exportfilter angeben k�nnen. Wenn Sie
-den Exportfilter benutzen, wird diese Endung im Datei"=Dialog automatisch
-vorgeschlagen.
-
-
-\subsubsection{Das Erstellen des Exportfilters}
-
-Um einen Eindruck zu bekommen, wie Exportfilter auszusehen haben,
-suchen Sie am besten auf unserer Homepage nach dem Paket, das die
-Layout"=Dateien der Standard"=Exportfilter enth�lt.
-
-Nehmen wir einmal an, dass wir einen HTML-Exportfilter erstellen wollen.
-Der Exportfilter muss lediglich aus einer einzigen \texttt{.layout}-Datei
-bestehen, die in diesem Fall \texttt{html.layout} genannt werden k�nnte.
-Sie k�nnen dar�ber hinaus auch zwei Dateien mit den Namen \texttt{html.begin.layout}
-und \texttt{html.end.layout} anlegen. Die erste dieser beiden Dateien
-enth�lt den Kopfteil der Ausgabe, die zweite den Fu�teil. \jabref
-sucht jedesmal wenn der Exportfilter benutzt wird nach diesen Dateien
-und f�gt sie~-- falls sie gefunden werden~-- w�rtlich vor bzw. nach
-den einzelnen Eintr�gen in die Ausgabe ein.
-
-\tip[]{Beachten Sie, dass sich diese Dateien in demselben Verzeichnis
-wie \texttt{html.layout} befinden und die Namensbestandteile \texttt{.begin}
-bzw. \texttt{.end} enthalten m�ssen.}
-
-\noindent In unserem Beispiel-Exportfilter k�nnten diese Dateien folgenderma�en
-aussehen:
-
-\begin{lstlisting}[title=html.begin.layout]
-<HTML>
-<BODY text="#275856">
-<basefont size="4" color="#2F4958" face="arial">
-\end{lstlisting}
-\begin{lstlisting}[title=html.end.layout]
-</BODY>
-</HTML>
-\end{lstlisting}
-Die Datei \texttt{html.layout} stellt die \emph{Standard}"=Formatvorlage
-f�r den Export eines einzelnen Eintrags bereit. Falls Sie unterschiedliche
-Formatvorlagen f�r verschiedene Eintragstypen anwenden wollen, m�ssen
-Sie typspezifische \texttt{.layout}"=Dateien erstellen. Diese
-m�ssen sich ebenfalls in demselben Verzeichnis wie die Haupt"=Layout"=Datei
-befinden und den Namensbestandteil \texttt{.entrytype} enthalten.
-Der Name des Eintragstyps muss komplett in Kleinbuchstaben geschrieben
-werden. In unserem Beispiel wollen wir eine Formatvorlage f�r Eintr�ge
-des Typs \emph{book} haben, die in der Datei \texttt{html.book.layout}
-abgelegt wird. F�r eine Dissertation w�rden wir die Datei \texttt{html.phdthesis.layout}
-anlegen~-- und so weiter. Diese Dateien sind der Standard"=Layout"=Datei
-sehr �hnlich, nur dass sie lediglich f�r Eintr�ge des entsprechenden
-Typs genutzt werden. Achten Sie darauf, dass die Standard"=Layout"=Datei
-so allgemein gehalten wird, dass sie die meisten Eintragstypen abdeckt.
-
-
-\paragraph{Das Format der Layout-Datei}
-
-Layout"=Dateien werden mit einem einfachen mark\-up"=Format erstellt,
-bei dem die Kommandos mit einem >>backslash<< (\texttt{\textbackslash{}})
-eingeleitet werden. Alle Textbestandteile, die nicht als Kommando
-identifiziert werden, gelangen direkt in die Ausgabedatei.
-
-
-\paragraph{Feldkommandos}
-
-Ein beliebiges Wort, vor dem ein backslash steht, z.\,B. \texttt{\textbackslash{}author},
-\texttt{\textbackslash{}editor,} \texttt{\textbackslash{}title} oder
-\texttt{\textbackslash{}year}, wird als Verweis auf das entsprechende
-Feld ausgewertet, das dann direkt in die Ausgabe kopiert wird.
-
-
-\paragraph{Feldformatierer}
-\label{par:Feldformatierer}
-
-Oft muss der Feldinhalt vor der Ausgabe verarbeitet werden. Dies wird
-mit Hilfe eines \emph{Feldformatierers} gemacht~-- einer java class,
-die eine Methode zur Verarbeitung des Feldinhaltes enth�lt.
-
-Ein Formatierer wird angewendet, indem man das Kommando \texttt{\textbackslash{}format}
-gefolgt vom Namen des Formatierers in eckigen Klammern und dem Feldnamen
-in geschweiften Klammern einf�gt, z.\,B.:
-
-\begin{lstlisting}
-\format[ToLowerCase]{\author}
-\end{lstlisting}
-Sie k�nnen auch mehrere Formatierer angeben, getrennt durch Kommas.
-Diese werden nacheinander aufgerufen, und zwar von links nach rechts.
-Das Kommando
-
-\begin{lstlisting}
-\format[ToLowerCase,HTMLChars]{\author}
-\end{lstlisting}
-ruft z.\,B. zun�chst den Formatierer \emph{ToLowerCase} auf, \emph{HTMLChars}
-formatiert anschlie�end das Ergebnis. Auf diese Weise k�nnen Sie eine
-beliebige Anzahl an Formatierern auflisten.
-
-\jabref bietet die folgenden Formatierer, wobei einige von anderen
-abh�ngen:
-
-\begin{labeling}{MMMM}
-\item [\texttt{HTMLChars}]ersetzt \TeX{}-spezifische Sonderzeichen wie
-       \texttt{\{\textbackslash{}\textasciicircum{}a\}} oder \texttt{\{\textbackslash{}\char`\"{}\{o\}\}}
-       durch ihre HTML"=Entsprechungen und �bersetzt die \LaTeX"=Befehle \texttt{\textbackslash emph}, 
-       \lstinline{\textit}, \lstinline{\textbf} in ihre HTML"=Entsprechungen.
-\item [\texttt{HTMLParagraphs}]interpretiert zwei aufeinanderfolgende Zeilenumbr�che 
-       (z.\,B. \lstinline{\n\n}) als Beginn eines neuen Absatzes und erstellt dementsprechend
-       Absatz-HTML-Tags.
-\item [\texttt{XMLChars}]ersetzt \TeX{}-spezifische Sonderzeichen wie       
-       \texttt{\{\textbackslash{}\textasciicircum{}a\}}
-       oder \texttt{\{\textbackslash{}\char`\"{}\{o\}\}} durch ihre XML-Entsprechungen.
-\item [\texttt{CreateDocBookAuthors}]formatiert das author-Feld im DocBook-Stil.
-\item [\texttt{CreateDocBookEditors}]\emph{Dokumentation folgt.}
-\item [\texttt{CurrentDate}]gibt das aktuelle Datum aus. Ohne Argument gibt dieser Formatierer 
-       das aktuelle Datum im Format ">JJJJ.MM.TT HH:MM:SS Z"< (Datum, Zeit und Zeitzone) aus.
-       Mit einem anderen Format-String als Argument kann das Datum angepasst werden. So ergibt
-       \lstinline{\format[CurrentDate]}\texttt{\{}\lstinline{yyyy.MM.dd}\texttt{\}} nur das 
-       Datum, z.\,B. ">2005.11.30"<.
-\item [\texttt{AuthorFirstFirst}]formatiert die Felder \emph{author}/\emph{editor}
-       mit den Vornamen zuerst.
-\item [\texttt{AuthorFirstFirstCommas} oder \texttt{AuthorFirstLastCommas}]formatiert die Felder
-       \emph{author}/\emph{editor} mit den Vornamen zuerst und abgetrennt durch Kommas.
-\item [\texttt{AuthorFirstLastOxfordCommas}] ist �hnlich wie \lstinline{AuthorFirstLastCommas}, 
-       au�er dass das ">and"< zwischen den letzten beiden Namen durch ein Komma eingeleitet
-       wird.
-\item [\texttt{AuthorFirstAbbrLastCommas}]formatiert die
-       Felder \emph{author}/\emph{editor} mit abgek�rzten Vornamen, abgetrennt durch
-       Kommas, mit einem ">and"< zwischen den letzten beiden Namen.
-\item [\texttt{AuthorFirstAbbrLastOxfordCommas}]�hnlich wie \texttt{AuthorFirstAbbrLastCommas}, 
-       au�er dass das ">and"< zwischen den letzten beiden Namen durch ein Komma eingeleitet wird.
-\item [\texttt{AuthorLastFirst}]formatiert die Felder \emph{author}/\emph{editor}
-       mit den Nachnamen zuerst.
-\item [\texttt{AuthorLastFirstAbbreviator}]k�rzt die Vornamen aller Autoren.
-       Dieser Formatierer kann nur angewendet werden, wenn \texttt{AuthorLastFirst}
-       bereits benutzt wurde.
-\item [\texttt{AuthorLastFirstCommas}]formatiert die Felder
-       \emph{author}/\emph{editor} mit den Nachnamen zuerst, abgetrennt durch Kommas,
-       mit einem ">and"< zwischen den letzten beiden Namen.
-\item [\texttt{AuthorLastFirstOxfordCommas}]�hnlich wie
-        \texttt{AuthorLastFirstCommas}, nur dass das ">and"<
-        zwischen den letzten beiden Namen durch ein Komma eingeleitet wird.
-\item [\texttt{AuthorLastFirstAbbrCommas}]formatiert die Felder
-        \emph{author}/\emph{editor} mit Nachnamen zuerst und abgek�rzten Vornamen,
-        abgetrennt durch Kommas, mit einem ">and"< zwischen den letzten
-        beiden Namen.
-\item [\texttt{AuthorLastFirstAbbrOxfordCommas}]�hnlich wie
-        \texttt{AuthorLastFirstAbbrCommas}, au�er dass das ">and"<
-        zwischen den letzten beiden Namen durch ein Komma eingeleitet wird.
-\item [\texttt{AuthorAndsReplacer}]ersetzt >>and<< zwischen den Namen
-       durch >>;<<, zwischen den letzten beiden Autoren steht >>\&<<.
-\item [\texttt{AuthorAndsCommaReplacer}]ersetzt >>and<< zwischen den
-       Namen durch ein Komma (,) sowie >>\&<< zwischen den beiden letzten.
-\item [\texttt{AuthorOrgSci}]Der erste Autor erscheint als "Nachname, Vorname", 
-       alle anderen als "Vorname Nachname". Vornamen werden abgek�rzt.
-\item [\texttt{AuthorAbbreviator}]\emph{Dokumentation folgt.}
-\item [\texttt{AuthorNatBib}]formatiert Autorennamen im Natbib-Stil, also nur mit Nachnamen;
-       zwei Autoren werden durch ein ">and"< voneinander getrennt, bei mehr als zwei 
-       Autoren wird der erste angegeben, gefolgt von ">et al."<
-\item [\texttt{NoSpaceBetweenAbbreviations}]Leerzeichen zwischen mehreren abgek�rzten 
-       Vornamen werden gel�scht.
-\item [\texttt{FileLink(Dateityp)}] Wenn kein Argument angegeben
-        wird, gibt dieser Formatierer den ersten externen Dateityp aus, der
-        in dem Feld ">file"< angegeben ist. Dieser Formatierer nimmt den Namen 
-        eines Dateityps als optionales
-        Argument, das in Klammern nach dem Namen des Formatierers angegeben
-        wird. So wird etwa mit \texttt{\textbackslash format[FileLink(pdf)] \{%
-        \textbackslash file\}}
-        der Dateityp \lstinline{pdf} als Argument angegeben. Wenn ein Argument
-        mitgegeben wird, w�hlt der Formatierer den ersten Dateilink des
-        entsprechenden Typs. Im Beispiel wird der Pfad zum ersten PDF"=Link
-        ausgegeben.
-\item [\texttt{FormatPagesForHTML}]ersetzt >>\texttt{-{}-}<< durch >>\texttt{-}<<.
-\item [\texttt{FormatPagesForXML}]ersetzt >>\texttt{-{}-}<< durch einen
-       XML en-dash (>>--<<).
-\item [\texttt{Replace(regexp,ersetzedurch)}]f�hrt eine Ersetzung
-       mit einem Regul�ren Ausdruck durch. Um diesen Formatierer zu
-       benutzen, muss ein zweiteiliges Argument mitgegeben werden. Die Teile
-       werden durch ein Komma getrennt. Will man ein Komma ausgeben lassen,
-       muss man es maskieren (\lstinline{\,}).
-       Der erste Teil ist der Regul�re Ausdruck, nach dem gesucht wird.
-       Er wird normal geschrieben, ohne Backslashes (\lstinline{\}) zu maskieren.\footnote{%
-       Eine Beschreibung von Regul�ren Ausdr�cken ist hier zu finden:
-       \url{http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html}.}
-       Der zweite Teil ist der Text, der f�r alle Treffer eingesetzt werden soll.
-\item [\texttt{RemoveBrackets}]entfernt alle geschweiften Klammern (>>\{<<
-       und >>\}<<).
-\item [\texttt{RemoveBracketsAddComma}]\emph{Dokumentation folgt.}
-\item [\texttt{RemoveWhitespace}]l�scht alle Leerzeichen.
-\item [\texttt{RemoveLatexCommands}]entfernt \LaTeX-Befehle wie \lstinline{\emph},
-       \lstinline{\textbf} etc. Zusammen mit \texttt{HTMLChars}
-       oder \texttt{XMLChars} sollte dieser Formatierer zuletzt aufgerufen
-       werden.
-\item [\texttt{RemoveTilde}]ersetzt das Tilde-Zeichen (\lstinline{~}), das in \LaTeX\ als festes
-       Leerzeichen dient, durch ein normales Leerzeichen. N�tzlich in Kombination mit dem
-       Namens"=Formatierer (siehe Abschnitt \nameref{NameFormatter}).
-\item [\texttt{ToLowerCase}]macht aus allen Buchstaben Kleinbuchstaben.
-\item [\texttt{ToUpperCase}]macht aus allen Buchstaben Gro�buchstaben.
-\item [\texttt{GetOpenOfficeType}]gibt die Nummer wieder,
-        die vom bibliographischen System von OpenOffice.org (Versionen
-        1.x und 2.x) benutzt wird, um den Typ dieses Eintrags zu
-        bezeichnen.
-\item [\texttt{RTFChars}]ersetzt alle \TeX-spezifischen
-        Sonderzeichen (z.B. \texttt{\{\textbackslash\^{}a\}} oder 
-        \texttt{\{\textbackslash \textquotedbl\{o\}\}}) durch ihre
-        RTF"=Entsprechung und �bersetzt \LaTeX-Befehle wie \lstinline{\emph}, 
-        \lstinline{\textit}, \lstinline{\textbf} in ihre RTF"=Entsprechungen.
-\end{labeling}
-Falls keiner der verf�gbaren Formatierer das Ergebnis erzielt, das
-Sie erreichen m�chten, k�nnen Sie Ihren eigenen Formatierer hinzuf�gen,
-indem Sie das \lstinline{net.sf.jabref.export.layout.LayoutFormatter}-Interface
-implementieren. Wenn Sie in das Paket \lstinline{net.sf.jabref.export.layout.format} Ihre Klasse (class) einf�gen, k�nnen Sie den Formatierer mit seinem Klassennamen aufrufen,
-so wie auch die Standard"=Formatierer. Ansonsten m�ssen Sie den Formatierer
-mit seinem vollen Namen aufrufen (inklusive Paketname). In jedem Fall
-muss der Formatierer in ihrem classpath sein, wenn Sie \jabref
-starten.
-
-\paragraph{Eigene \texorpdfstring{Namens"=Formatierer}{Namens-Formatierer} verwenden}
-\label{NameFormatter}
-
-Mit \jabref~2.2 ist es jetzt m�glich, eigene Namens"=Formatierer zu definieren. Dazu wird die Syntax der Bibliographie"=Stile (bst) verwendet. Das erlaubt �u�erste Flexibilit�t, ist allerdings aufw�ndig in der Schreibweise.
-
-Sie k�nnen unter \menu{Optionen \msep Einstellungen \msep Namens"=Formatierer} Ihren eigenen Formatierer schreiben. Benutzen Sie das folgende Format:
-\begin{lstlisting}
-  <Fall1>@<Bereich11>@<Format>@<Bereich12>@<Format>@<Bereich13>(*\ldots*)@@<br>
-  <Fall2>@<Bereich21>@(*\ldots*)
-\end{lstlisting}
-Dieses Format teilt die Aufgabe, eine Liste von Autoren zu formatieren, in unterschiedliche F�lle abh�ngig von der Zahl der Autoren (das ist n�tig, weil manche Formate sich je nach der Zahl der Autoren unterscheiden). Die einzelnen F�lle werden durch \texttt{@@} voneinander getrennt und enthalten Anweisungen, wie jeder einzelne Autor in diesem Fall zu formatieren ist. Diese Anweisungen werden durch \texttt{@} getrennt.
-
-F�lle werden durch Ganzzahlen (1, 2, 3, etc.) oder das Zeichen \texttt{*} (alle Autoren) definiert. Sie geben die nachfolgenden Anweisungen an den Formatierer weiter, falls weniger oder gleich viele Autoren vorhanden sind.
-
-Bereiche sind entweder \texttt{<Ganzzahl>..<Ganzzahl>}, \texttt{<Ganzzahl>} oder das Zeichen \texttt{*}. Die Liste der Autoren f�ngt bei 1 an. Die Ganzzahlen k�nnen einen negativen Wert haben, um vom letzten Autor der Liste zu starten, wobei -1 der Wert f�r den letzten Autor ist.
-
-Als Beispiel dient die Autorenliste ">Joe Doe and Mary Jane and Bruce Bar and Arthur Kay"<:
-\begin{itemize}
-  \item 1..3 betrifft Joe, Mary und Bruce
-  \item 4..4 betrifft Arthur 
-  \item * betrifft alle
-  \item 2..-1 betrifft Mary, Bruce und Arthur
-\end{itemize}
-
-Die \texttt{<Format>}-Strings nutzen das BibTeX-Namensschema: Die vier Buchstaben v, f, l, j stehen f�r die Namensteile von, Vorname (first), Nachname (last) und Junior und werden in geschweiften Klammern gesetzt. Ein einzelner Buchstabe v, f, l, j bedeutet, dass der Name abgek�rzt werden soll. Wenn einer dieser Buchstaben oder Buchstabenpaare vorkommen, gibt \jabref alle entsprechenden Namen (eventuell abgek�rzt) aus, aber der Ausdruck in geschweiften Klammern wird nur ausgegeben, wenn  [...]
-
-Beispielsweise wird beim Format ">\texttt{\{ll\} \{vv \{von Part\}\} \{ff\}}"< die Autorenliste ">Mary Kay and John von Neumann"< von \jabref als ">Kay~~Mary"< (mit zwei Leerzeichen) und ">Neumann von von Part John"< ausgegeben.
-
-Zwei weitere Beispiele sollen das Ganze verdeutlichen; die Dokumentation von \bibtex gibt weitere Hinweise.
-
-Kurzes Beispiel: ">\texttt{\{ll\}, \{f.\}}"< formatiert ">\lstinline{Joe Doe}"< als ">\lstinline{Doe, J.}"<
-
-Ausf�hrliches Beispiel: Um 
-\begin{quote}
-">Joe Doe and Mary Jane and Bruce Bar and Arthur Kay"<
-\end{quote}
-als
-\begin{quote}
-">Doe, J., Jane, M., Bar, B. and Kay, A."<
-\end{quote}
-zu formatieren, nutzt man
-\begin{lstlisting}
-1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll}, {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll}, {f}.
-\end{lstlisting}
-Falls jemand eine bessere Dokumentation hierzu verfassen m�chte: Wenden Sie sich einfach an die \jabref"=Maililnglisten!
-
-\paragraph{Bedingte Ausgabe}
-
-Manche statische Ausgabe macht nur Sinn, wenn ein bestimmtes Feld
-nicht leer ist. Wenn wir z.\,B. hinter den Namen der Editoren den
-Text \texttt{(Hrsg.)} haben wollen, brauchen wir Folgendes:
-
-\begin{lstlisting}
-\format[HTMLChars,AuthorFirstFirst]{\editor} (Hrsg.)
-\end{lstlisting}
-Wenn nun aber das \emph{editor}-Feld leer ist~-- m�glicherweise ist
-es f�r den Eintrag, der exportiert werden soll, nicht erforderlich~--,
-dann w�rde das \texttt{(Hrsg.)} dennoch erscheinen. Das kann man mit
-den Kommandos \texttt{\textbackslash{}begin} und \texttt{\textbackslash{}end}
-verhindern:
-
-\begin{lstlisting}
-\begin{editor}
-\format[HTMLChars,AuthorFirstFirst]{\editor} (Hrsg.)
-\end{editor}
-\end{lstlisting}
-Die Kommandos \texttt{\textbackslash{}begin} und \texttt{\textbackslash{}end}
-sorgen daf�r, dass der Text, den sie einschlie�en, nur dann ausgegeben
-wird, wenn das Feld, auf das in den geschweiften Klammern verwiesen
-wird, f�r den zu exportierenden Eintrag definiert und damit nicht
-leer ist.
-
-\tip{Das Benutzen der Kommandos \texttt{\textbackslash{}begin} und
-\texttt{\textbackslash{}end} ist ein Schl�ssel zum Erstellen von Layout-Dateien,
-die mit einer Vielzahl von Eintragstypen umgehen k�nnen.}
-
-
-\paragraph{Gruppierte Ausgabe}
-
-Wenn Sie Ihre Eintr�ge auf der Basis eines bestimmten Feldes gruppieren
-wollen, benutzen Sie die Kommandos f�r die gruppierte Ausgabe. Die
-gruppierte Ausgabe ist der bedingten Ausgabe sehr �hnlich, au�er dass
-der Text zwischen den Kommandos nur ausgegeben wird, wenn das Feld,
-auf das in den geschweiften Klammern verwiesen wird, unterschiedliche
-Werte enth�lt.
-
-Nehmen wir zum Beispiel an, dass wir die Ausgabe nach dem \emph{keyword}
-(Stichwort) gruppieren wollen. Bevor die Datei exportiert wird, m�ssen
-die Eintr�ge nach dem \emph{keyword} sortiert worden sein. Dann benutzen
-Sie die folgenden Kommandos, um nach \emph{keyword} zu gruppieren:
-
-\begin{lstlisting}
-\begingroup{keywords}
-New Category: \format[HTMLChars]{\keywords}
-\endgroup{keywords}
-\end{lstlisting}
-
-\subsection{Importfilter}
-
-\noindent \jabref bietet Ihnen die M�glichkeit, ganz �hnlich den Standard-Importern, eigene Importer 
-zu definieren und zu benutzen. Man definiert einen Importer durch eine oder mehrere Java"=\emph{Klassen},
-die Dateiinhalte aus einem sogenannten \emph{Input stream} lesen
-und daraus \bibtex{}-Eintr�ge erzeugen. Sie k�nnen vorkompilierte Importer einbinden, die Sie vielleicht 
-von SourceForge erhalten haben (siehe Abschnitt ">\nameref{subsec:Ihre-Arbeit}"<). Sie k�nnen auch
-mit Grundkenntnissen der Java"=Programmierung eigene Importer f�r Referenzquellen, die f�r Sie wichtig sind,
-erstellen oder neue, verbesserte Versionen existierender Importer einbinden, ohne \jabref neu zu
-kompilieren.
-
-\paragraph{Vorrangsregeln}
-
-Externe Importfilter haben Vorrang vor Standard-Importern. So k�nnen Sie mit Ihren Importern
-die existierenden Importer in der automatischen Formaterkennung und an der Kommandozeile in \jabref �berschreiben. Externe Importfilter selbst sind dann nach Namen sortiert.
-
-\subsubsection{Einen externen Importfilter hinzuf�gen}
-
-Stellen Sie sicher, dass Sie den Importer in kompilierter Form haben (eine oder mehrere
-\texttt{.class} Dateien) und dass die Klassendateien
-in einer Verzeichnisstruktur entsprechend ihrer Package"=Struktur liegen. 
-Um einen neuen externen Importfilter hinzuzuf�gen, �ffnen Sie den Dialog 
-\menu{Optionen \msep{} Verwalte externe Importfilter}, und klicken Sie auf
-\menu{Aus Klassenpfad hinzuf�gen}. Ein Dateiauswahl"=Fenster erscheint, 
-mit dem Sie den Klassenpfad des Importers w�hlen, das hei�t den obersten Ordner,
-in dem die Package"=Struktur Ihres Importers beginnt. In einem zweiten Dateiauswahl"=Fenster
-w�hlen Sie die \emph{.class}"=Datei Ihres Importers, die von \texttt{\textbackslash{}ImportFormat} abgeleitet
-ist. Wenn Sie \menu{Klasse ausw�hlen} klicken, erscheint Ihr neuer Importer
-in der Liste der externen Importfilter. Alle externen Importfilter erscheinen in den
-\jabref"=Untermen�s \menu{Datei \msep{} Importieren \msep{} Externe Importfilter} und 
-\menu{Datei \msep{} Importieren und Anh�ngen \msep{} Externe Importfilter}.
-
-\tip[Bitte beachten Sie: ]{Wenn Sie die Klassen in ein anderes Verzeichnis verschieben,
-m�ssen Sie den Importer entfernen und neu hinzuf�gen. Wenn Sie einen Importfilter
-mit einem bereits vorhandenen Namen registrieren, ersetzt \jabref den vorhandenen
-externen Importfilter. Auch wenn es in manchen F�llen m�glich ist, einen schon registrierten
-Importer zu aktualisieren ohne \jabref neu zu starten (n�mlich dann,
-wenn der Importer nicht im Klassenpfad von \jabref ist), empfehlen wir, grunds�tzlich
-\jabref neu zu starten, wenn Sie ein Update eines externen Importers durchgef�hrt haben.
-Sie k�nnen auch Importer aus ZIP- oder JAR-Archiven registrieren, w�hlen Sie einfach
-\emph{\menu{Aus Archiv-Datei hinzuf�gen}}, dann das ZIP- oder JAR-Archiv und dann den Eintrag
-(Klassendatei), der den neuen Importer darstellt.}
-
-\subsubsection{Einen Importfilter entwickeln}
-
-Bitte schauen Sie auf unseren Download-Seiten nach Beispielen und n�tzlichen Dateien zur 
-Entwicklung Ihres Importfilters.
-
-\paragraph{Ein einfaches Beispiel}
-
-Angenommen, wir wollen Dateien der folgenden Form importieren:
-\begin{lstlisting}
-1936;John Maynard Keynes;The General Theory of Employment, Interest and Money
-2003;Boldrin & Levine;Case Against Intellectual Monopoly
-2004;ROBERT HUNT AND JAMES BESSEN;The Software Patent Experiment
-\end{lstlisting}
-
-\subparagraph{SimpleCsvImporter Erstellen}
-
-Erzeugen Sie in einem Text"=Editor eine Klasse, die von \texttt{ImportFormat} abgeleitet
-ist und die folgende Methoden implementiert:\\
-\texttt{getFormatName()}, 
-\texttt{isRecognizedFormat()}
-und \texttt{importEntries()}.\\
-Hier ein Beispiel:
-\begin{lstlisting}
-import java.io.*;
-import java.util.*;
-import net.sf.jabref.*;
-import net.sf.jabref.imports.ImportFormat;
-import net.sf.jabref.imports.ImportFormatReader;
-
-public class SimpleCsvImporter extends ImportFormat {
-
-  public String getFormatName() {
-    return "Simple CSV Importer";
-  }
-
-  public boolean isRecognizedFormat(InputStream stream) throws IOException {
-    return true; // this is discouraged except for demonstration purposes
-  }
-
-  public List importEntries(InputStream stream) throws IOException {
-  	ArrayList bibitems = new ArrayList();
-    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
-
-    String line = in.readLine();
-    while (line != null) {
-      if (!"".equals(line.trim())) {
-        String[] fields = line.split(";");
-        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
-        be.setType(BibtexEntryType.getType("techreport"));
-        be.setField("year", fields[0]);
-        be.setField("author", fields[1]);
-        be.setField("title", fields[2]);
-        bibitems.add(be);
-        line = in.readLine();
-      }
-    }
-    return bibitems;
-  }
-}
-\end{lstlisting}
-
-\subparagraph{SimpleCsvImporter �bersetzen}
-
-Beachten Sie, dass die Beispielklasse im Default"=Package liegt. Angenommen, sie liegt unter
-\\\lstinline{/meinpfad/SimpleCsvImporter.java}, die Datei \texttt{JabRef-2.0.jar} ist im gleichen Verzeichnis wie
-\lstinline{SimpleCsvImporter.java} und Java ist in Ihrem Kommandopfad. 
-Kompilieren Sie die Klasse mit JSDK 1.4 zum Beispiel mit folgendem Kommandozeilen"=Aufruf: 
-\begin{lstlisting}
-javac -classpath JabRef-2.0.jar SimpleCsvImporter.java
-\end{lstlisting}
-Nun sollte dort auch eine Datei \texttt{/mypath/SimpleCsvImporter.class} liegen.
-
-\subparagraph{SimpleCsvImporter registrieren}
-
-�ffnen Sie in \jabref \menu{Optionen} \msep{} \menu{Verwaltung externer Importfilter} und klicken Sie
-auf \menu{Aus Klassenpfad hinzuf�gen}. Navigieren Sie nach \texttt{/meinpfad} und 
-klicken Sie \menu{Klassenpfad ausw�hlen}. W�hlen Sie anschlie�end die Datei \texttt{SimpleCsvImporter.class}
-und klicken Sie \menu{Klasse ausw�hlen}. Ihr Importfilter sollte nun in der Liste der
-externen Importfilter unter dem Namen >>Simple CSV Importer<< erscheinen und,
-sobald Sie \menu{Schlie�en} gew�hlt haben, auch in den Untermen�s \menu{Datei} \msep{} \menu{Importieren} \msep{} 
-\menu{Externe Importfilter} und \menu{Datei} \msep{} \menu{Importieren und Anh�ngen} \msep{} \menu{Externe Importfilter} 
-des \jabref-Hauptfensters auftauchen.
-
-\subsection{Teilen Sie Ihre Arbeit mit anderen}
-\label{subsec:Ihre-Arbeit}
-Mit externen Layout-Dateien und Importfiltern ist es einfach, Ihre eigenen Export-Formate und Importfilter
-mit anderen Anwendern gemeinsam zu benutzen. Falls Sie einen Exportfilter oder einen Importfilter
-f�r ein Format erstellt haben, das noch nicht von \jabref unterst�tzt wird,
-oder falls Sie einen bestehenden Exportfilter oder Importfilter verbessern, m�chten
-wir Sie ermutigen, Ihre Arbeit auf der \href{http://sourceforge.net/projects/jabref/}{SourceForge.net"=Seite} bereitzustellen.
-Dasselbe gilt f�r Formatierklassen, die Sie schreiben. Wir w�rden
-uns freuen, eine Sammlung von bereitgestellten Layout"=Dateien verteilen
-zu k�nnen oder die Standard"=Exportfilter, -Formatierer und -Importfilter
-zu erweitern.
-
-\clearpage 
-\section{Tastenk�rzel}
-
-Die Men�s k�nnen alle �ber Tastenk�rzel angesteuert werden, die meisten
-Men�befehle ebenfalls. Das ist immer am unterstrichenen Buchstaben
-sichtbar.
-
-Es folgt ein �berblick �ber die wichtigsten Tastenk�rzel ohne Anspruch
-auf Vollst�ndigkeit~\ldots{}
-
-\begin{longtable}{p{66mm}p{33mm}}
-\textbf{Datei (Forts.)}&
-\tabularnewline
-\endhead
-\textbf{Datei}&
-\tabularnewline
-\endfirsthead
-Datei �ffnen&
-STRG-O\tabularnewline
-Datei speichern&
-STRG-S\tabularnewline
-Datei speichern unter~\ldots{}&
-STRG-SHIFT-S\tabularnewline
-Datei schlie�en&
-STRG-W\tabularnewline
-Sitzung speichern&
-F11\tabularnewline
-Sitzung laden&
-F12\tabularnewline
-\jabref beenden&
-STRG-Q\tabularnewline
-\end{longtable}
-
-\begin{longtable}{p{66mm}p{33mm}}
-\textbf{Bearbeiten (Forts.)}&
-\tabularnewline
-\endhead
-\textbf{Bearbeiten}&
-\tabularnewline
-\endfirsthead
-Neuer Eintrag&
-STRG-N\tabularnewline
-Neuer Eintrag -- Article&
-STRG-SHIFT-A\tabularnewline
-Neuer Eintrag -- Book&
-STRG-SHIFT-B\tabularnewline
-Neuer Eintrag -- Phdthesis&
-STRG-SHIFT-T\tabularnewline
-Neuer Eintrag -- Inbook&
-STRG-SHIFT-I\tabularnewline
-Neuer Eintrag -- Mastersthesis&
-STRG-SHIFT-M\tabularnewline
-Neuer Eintrag -- Proceedings&
-STRG-SHIFT-P\tabularnewline
-Neuer Eintrag -- Unpublished&
-STRG-SHIFT-U\tabularnewline
-Neuer Eintrag aus Klartext&
-STRG-SHIFT-N\tabularnewline
-Eintrag bearbeiten&
-STRG-E\tabularnewline
-\bibtex{}-Keys generieren&
-STRG-G\tabularnewline
-R�ckg�ngig&
-STRG-Y\tabularnewline
-Wiederholen&
-STRG-Z\tabularnewline
-Ausschneiden&
-STRG-X\tabularnewline
-Kopieren&
-STRG-C\tabularnewline
-Einf�gen&
-STRG-V\tabularnewline
-L�schen&
-Entf\tabularnewline
-Alles ausw�hlen&
-STRG-A\tabularnewline
-\texttt{\textbackslash{}cite\{BibTeX-Key\}} kopieren&
-STRG-K\tabularnewline
-Eintr�ge markieren&
-STRG-M\tabularnewline
-Markierung l�schen&
-STRG-SHIFT-M\tabularnewline
-Pr�ambel bearbeiten&
-STRG-P\tabularnewline
-Strings bearbeiten&
-STRG-T\tabularnewline
-\end{longtable}
-
-\begin{longtable}{p{66mm}p{33mm}}
-\textbf{Ansicht / Navigation (Forts.)}&
-\tabularnewline
-\endhead
-\textbf{Ansicht / Navigation}&
-\tabularnewline
-\endfirsthead
-Zur n�chsten ge�ffneten Datei springen&
-STRG-Bild ab\tabularnewline
-Zum vorherigen TAB springen&
-STRG-Bild auf\tabularnewline
-Gruppendialog ein-/ausblenden&
-STRG-SHIFT-G\tabularnewline
-Eintragsvorschau ein-/ausblenden&
-STRG-F9\tabularnewline
-Layout der Eintragsvorschau wechseln&
-F9\tabularnewline
-\end{longtable}
-
-\begin{longtable}{p{66mm}p{33mm}}
-\textbf{Externe Programme / Internet (Forts.)}&
-\tabularnewline
-\endhead
-\textbf{Externe Programme / Internet}&
-\tabularnewline
-\endfirsthead
-Literaturangaben in \LyX einf�gen&
-STRG-L\tabularnewline
-Literaturangaben in WinEdt einf�gen&
-STRG-SHIFT-W\tabularnewline
-URL/DOI �ffnen&
-F3\tabularnewline
-PDF/PS �ffnen&
-F4\tabularnewline
-PDF-Links synchronisieren&
-SHIFT-F4\tabularnewline
-PS-Links synchronisieren&
-STRG-F4\tabularnewline
-Medline abrufen&
-F5\tabularnewline
-CiteSeer abrufen&
-F6\tabularnewline
-Literaturangaben von CiteSeer abrufen&
-F7\tabularnewline
-\end{longtable}
-
-\begin{longtable}{p{66mm}p{33mm}}
-\textbf{Extras / Sonstiges (Forts.)}&
-\tabularnewline
-\endhead
-\textbf{Extras / Sonstiges}&
-\tabularnewline
-\endfirsthead
-Suchen&
-STRG-F\tabularnewline
-Weitersuchen&
-STRG-SHIFT-F\tabularnewline
-Suchen \& Ersetzen&
-STRG-R\tabularnewline
-Hilfe&
-F1\tabularnewline
-\end{longtable}
-
-\clearpage 
-\section[Fragen und Antworten]{H�ufige Fragen und Antworten}\label{sec:faq}
-%\secttoc
-
-Die folgenden Fragen und Antworten sind der \href{http://jabref.sourceforge.net/faq.php}{\jabref-Homepage} entnommen. Falls Sie dar�ber hinaus Fragen haben, die das Handbuch nicht beantworten konnte, haben Sie folgende M�glichkeiten, zu einer Antwort zu kommen:
-\begin{enumerate}
-	\item Durchsuchen Sie die \href{http://sourceforge.net/forum/?group_id=92314}{Foren} auf der Projektseite bei Sourceforge.
-	\item Durchsuchen Sie das \href{http://sourceforge.net/mailarchive/forum.php?forum_name=jabref-users}{Archiv} der \jabref-Mailingliste.
-	\item Stellen Sie Ihre Frage in einem der Foren oder auf der \href{http://sourceforge.net/mail/?group_id=92314}{\jabref-Mailingliste}.
-\end{enumerate}
-
-\faq{L�uft \jabref unter freiem Java (Classpath, Kaffee GCJ etc.)?}{Am 13.~November~2006 hat Sun sein Java unter die GNU General Public License (Version~2) gestellt, so dass die Antwort ">Ja"< lautet. Ansonsten ist zu sagen, dass eine unserer Abh�ngigkeiten derzeit zu einem Absturz f�hrt, wenn mit einer anderen Java API als der von Sun gearbeitet wird. Das gilt f�r Version 0.92 von Classpath.}
-
-\faq{\label{faq-linux}\jabref startet nicht unter Linux. Was kann ich tun?}{\jabref l�uft unter Linux, wenn Sie eine Java Runtime Environment (JRE) von Sun in der Version~1.4.2 oder einer neueren Version verwenden. Falls \jabref dennoch nicht starten sollte, k�nnen Sie folgende Fehlersuche durchf�hren:
-Starten Sie \texttt{java -{-}version} von der Kommandozeile. Falls dabei kein Produkt von Sun Microsystems verwendet wird (sondern beispielsweise angezeigt wird, dass Sie GCJ VM verwenden), selbst wenn Sie die JRE von Sun installiert haben, m�ssen Sie Ihr Setup anpassen. Da das Vorgehen daf�r sehr von Ihrer Linux-Distribution abh�ngt, k�nnen wir keine Hinweise f�r jede m�gliche Konstellation geben.
-Unter Debian/Ubuntu k�nnen Sie die Einstellungen anpassen, indem Sie \texttt{sudo update-alternatives -{-}config java} aufrufen (dazu brauchen Sie admin-Rechte). In dem Dialog, der daraufhin erscheint, w�hlen Sie die Sun JDK oder JRE. Alternativ k�nnen Sie auch nach der Java-Programmdatei suchen und diese direkt ausf�hren. In Ubuntu findet man Java gew�hnlich unter \texttt{/usr\slash{}lib\slash{}jvm\slash{}java-1.5.0-sun\slash{}jre\slash{}bin\slash{}java}.
-Wenn Sie keine admin-Rechte auf dem Computer haben, k�nnen Sie die Sun JRE in ihrem Home-Verzeichnis installieren. Sie m�ssen dann darauf achten, dass Sie die richtige Programmdatei aufrufen. Wenn Sie die JRE z.\,B. in einen Ordner namens ">java"< in ihrem Home-Verzeichnis installiert haben, geben Sie \texttt{\texttildelow{}/java/jre/bin/java -jar JabRef-2.1.jar} (bzw. die entsprechende Versionsnummer) in der Kommandozeile ein.}
-
-\clearpage\faq{Ich arbeite unter Ubuntu und \jabref startet, wenn ich auf das Icon klicke, aber nicht von der Kommandozeile. Wo liegt das Problem?}{Sie haben mehrere Java Virtual Machines installiert und von der Kommandozeile wird die falsche gew�hlt. Schauen Sie unter Frage \ref{faq-linux} nach, wie Sie die Einstellungen �ndern k�nnen.}
-
-\faq{Wie kann ich verhindern, dass \jabref beim Speichern der .bib"=Datei in bestimmten Feldern (wie \texttt{title}) Zeilenumbr�che einf�gt?}{�fnnen Sie \menu{Optionen \msep{} Einstellungen}. Im Bereich \menu{Allgemein} gibt es die Option \menu{Beim Speichern keinen Zeilenumbruch in den folgenden Feldern einf�gen}. Diese Option enth�lt eine Liste von Feldnamen. In Feldern, die Sie dieser Liste hinzuf�gen (abgetrennt mit einem Semikolon) wird beim Speichern kein Zeilenumbruch hinzugef�gt.}
-
-\faq{Mein Virenscanner sagt mir, dass \jabref ein Virus ist. Ist der Server gef�hrdet?}{Nein, aber der Windows"=Installer benutzt das \href{http://nsis.sourceforge.net/}{Nullsoft Scriptable Install System (NSIS)} in der Version~2.18 (seit \jabref~2.1), das ungl�cklicherweise Installer produziert, die von einigen Virenscannern als Virus eingesch�tzt werden. Wenn Sie mehr dar�ber erfahren wollen, sehen Sie sich die \href{http://forums.winamp.com/showthread.php?postid=1977648}{Diskussion im [...]
-
-Als Workaround und falls Sie Bedenken haben, den Installer zu benutzen, k�nnen Sie immer die plattformunabh�ngige jar"=Datei benutzen (siehe dazu Abschnitt ">\nameref{subsub:jar}"<).}
-
-\clearpage 
-\section{Entwicklung}
-\secttoc
-\bigskip
-
-\noindent \jabref ist ein \emph{Open Source} Projekt, das hei�t, dass jede(r)
-dazu beitragen kann, das Programm zu verbessern und weiterzuentwickeln.
-Wenn Sie Anregungen, W�nsche oder Fragen haben, ist die erste Anlaufstelle
-die \href{http://sourceforge.net/projects/jabref/}{Projektseite bei \emph{Sourceforge}}.
-Dort gibt es Foren, in denen Sie Ihre Fragen stellen k�nnen, und eine
-Mailingliste rund um \jabref. Auch Ihre W�nsche \emph{(Feature
-Requests)} und Fehlermeldungen \emph{(Bug Reports)} k�nnen Sie dort
-loswerden. Um sich direkt als Entwickler einzubringen, wenden Sie
-sich an einen der beiden Maintainer (Morten O. Alver und Nizar N.
-Batada)~-- die E-Mail-Adressen finden Sie auf der Projektseite bei
-\emph{Sourceforge}. Sie brauchen lediglich einen Sourceforge-Login,
-der dann f�r das Projekt freigeschaltet werden kann.
-
-
-\subsection{Beschr�nkungen und bekannte Probleme (Bugs)}
-
-\begin{quote}
-\emph{Da sich die Software schneller entwickelt als dieses Handbuch, muss an dieser Stelle auf die \href{http://sourceforge.net/projects/jabref/}{Projektseite bei Sourceforge} verwiesen werden.}
-\end{quote}
-
-\subsection{Danksagung}
-
-Neben den Entwicklern, die die Hilfe"=Seiten des Programms geschrieben haben, danke ich Robert Bitsche, Daniel F�rderer, Thomas Fritz, Tim Hoffmann, Axel Junge, Jan Suhr und Tobias Wolf f�r ihre hilfreichen Tipps und Anmerkungen zum Handbuch.
-
-Seit den Anf�ngen als \emph{BibKeeper} (von Morten O.~Alver) und \emph{JBibtexManager} (von Nizar N.~Batada) haben
-zahlreiche Personen dazu beigetragen, dass \jabrefversion{} zu dem
-geworden ist, was es ist. Wer zum Entwicklerteam geh�rt und wer alles zum Programm beigetragen hat, k�nnen Sie im Programm unter \menu{Hilfe \msep{} �ber JabRef} nachsehen.
-
-\subsection{Lizenz}
-
-\jabref ist frei verf�gbar unter den Bedingungen der \href{http://www.gnu.org/copyleft/gpl.html}{GNU General Public License}. Es gibt unterschiedliche Softwarepakete, die von \jabref genutzt werden. Wenn Sie sich �ber die Lizenzbestimmungen dieser Fremdsoftware informieren wollen, schauen Sie bitte unter \menu{Hilfe \msep{} �ber JabRef} nach.
-
-\appendix
-\newpage
-\nocite{*}
-\hypertarget{bibliography}{}
-\bibliographystyle{jurabib}
-\bibliography{JabRef-UserManual_de}
-
-
-\newpage
-\addsec[Versionsgeschichte]{Versionsgeschichte dieses Handbuchs}
-
-\label{RevisionHistory}
-
-%\begin{revhist}{\versiondate}%endg�ltiges Datum}
-%\item �nderung
-%\end{revhist}
-
-\begin{revhist}{\versiondate}%26.\,1.\,2010}
-\item Lizenz ge�ndert
-\item Format von A4 auf A5 ge�ndert (bessere Bildschirmlesbarkeit)
-\item Abschnitte ">\nameref{Export-OOo}"< und ">\nameref{CustomExports}"< aktualisiert
-\item Abschnitte ">\nameref{search-regular-expressions}"< und ">\nameref{kommandozeilenoptionen}"< erg�nzt
-\item Versionsnummer (2.4) angepasst
-\item Kleinere �nderungen
-\end{revhist}
-
-\begin{revhist}{1.\,12.\,2007}
-\item Abschnitt ">\nameref{NameFormatter}"< hinzugef�gt
-\item Abschnitte ">\nameref{par:Feldformatierer}"< und ">\nameref{subsub:SpezielleFeldmarken}"< erg�nzt
-\end{revhist}
-
-\begin{revhist}{4.\,7.\,2007}
-\item Abschnitt ">\nameref{FileLinks}"< hinzugef�gt
-\item Abschnitt ">Links zu externen Dateien"< in \nameref{ExternalFiles} umbenannt
-\item Kleine �nderungen
-\end{revhist}
-
-\begin{revhist}{8.\,6.\,2007}
-\item Abschnitt ">Import und Export"< in zwei Abschnitte unterteilt
-\item Abschnitt ">\nameref{sec:faq}"< erg�nzt
-\item Abschnitte ">\nameref{EntryEditorHelp}"< und ">\nameref{subsec:System-Voraussetzungen}"< angepasst
-\item Fehler im Abschnitt ">\nameref{PreviewHelp}"< korrigiert
-\item Versionsnummer angepasst
-\item Beschreibung der Felder ">doi"< und ">eid"< hinzugef�gt
-\item Fehler im Link zum Mail-Archiv beseitigt
-\item Einleitung leicht erg�nzt
-\item Generelle �berarbeitung des Dokuments
-\end{revhist}
-
-\begin{revhist}{18.\,4.\,2007}
-\item Abschnitte ">\nameref{LabelPatterns}"<, ">\nameref{StringEditorHelp}"< und ">\nameref{par:Feldformatierer}"< aktualisiert
-\item Fehler in Abschnitt ">\nameref{subsec:Starten-Kommandozeile}"< entfernt
-\item \jabref-Logo ge�ndert
-\item Ein paar Kleinigkeiten
-\end{revhist}
-
-\begin{revhist}{20.\,3.\,2007}
-\item Abschnitt ">\nameref{subsubsec:Hinzufuegen-Exportfilter}"< angepasst
-\item Kleinere �nderungen
-\end{revhist}
-
-\begin{revhist}{1.\,2.\,2007}
-\item Abschnitte ">\nameref{EndnoteFilters}"<, ">\nameref{subsubsec:endnote-jabref}"<, ">\nameref{subsec:about}"< und ">\nameref{sec:faq}"< �berarbeitet
-\item Literaturverzeichnis um Eintrag von \cite{btxfaq} erg�nzt
-\item Und noch ein paar kleine �nderungen
-\end{revhist}
-
-\begin{revhist}{19.\,1.\,2007}
-\item Abschnitt ">\nameref{Eintragstypen}"< hinzugef�gt
-\item Grafik auf Titelseite ausgetauscht
-\item Ein paar kleinere �nderungen
-\end{revhist}
-
-\begin{revhist}{10.\,12.\,2006}
-\item Abschnitt ">XMP-Metadaten"< leicht verbessert
-\item FAQ zu freien Java-APIs aktualisiert (Suns Java ist jetzt selbst frei)
-\item Wie immer: kleinere �nderungen
-\end{revhist}
-
-\begin{revhist}{9.\,12.\,2006}
-\item Abschnitte ">Weitere Hilfen"< in ">H�ufige Fragen und Antworten (FAQ)"< umbenannt
-\item FAQs von der Homepage �bersetzt und integriert
-\item Literaturverzeichnis um Eintrag von \cite{Fenn2006} erg�nzt
-\item Ein paar kleinere �nderungen
-\end{revhist}
-
-\begin{revhist}{30.\,11.\,2006}
-\item Abschnitte ">Weitere Hilfen"< hinzugef�gt
-\end{revhist}
-
-\begin{revhist}{28.\,11.\,2006}
-\item Abschnitte ">Abk�rzung von Zeitschriftentiteln"<, ">XMP-Metadaten"<, ">IEEExplore"< und ">Externer Zugriff"< hinzugef�gt
-\item Abschnitte ">Einf�hrung in \bibtex{}"<, ">Das Hauptfenster"<, ">Links zu externen Dateien"< und ">Jabref und Online-Datenbanken"< erweitert
-\item Abschnitt ">Suchfunktionen"< aktualisiert
-\item Abschnitt ">Entwicklung"< gek�rzt
-\item Paket ">listings"< eingebunden (ersetzt Umgebung ">lyxcode"<)
-\item Typewriter-Schrift \texttt{beramono} eingesetzt
-\item Einige kleinere �nderungen
-\end{revhist}
-
-\begin{revhist}{30.\,1.\,2006}
-\item Abschnitt >>\jabref-Bibliographien in OpenOffice.org benutzen<< aktualisiert
-\item Abschnitt zur Erzeugung der \bibtex{}-Keys aktualisiert
-\item Neues Kapitel (>>Externe Importfilter<<), geschrieben von Andreas Rudert
-\item Einige kleinere �nderungen
-\end{revhist}
-
-\begin{revhist}{6.\,12.\,2005}
-\item Lizenzbedingungen f�r das Handbuch hinzugef�gt
-\item von PDF~1.4 auf PDF~1.2 umgestellt
-\item mehrere kleinere �nderungen
-\end{revhist}
-
-\begin{revhist}{16.\,11.\,2005}
-\item Erstentwurf von Dominik Wa�enhoven, basierend
-auf dem unver�ffentlichten englischen \emph{Initial Draft} von Nizar Batada (20.\,2.\,2004)
-und den Hilfeseiten des Programms
-\end{revhist}
-
-\end{document}
+%%%%% To do %%%%%
+% DW 2007-12-03
+% - Wiki-Seite 'Translating JabRef' �bersetzen und einbinden
+% - [2.4 beta] Plugin.html erg�nzen 
+% - [2.4 beta?] SQLExport.html erg�nzen
+
+\documentclass[
+  fontsize=10pt,
+	headings=normal,
+	paper=a5,
+	pagesize,
+	ngerman
+]{scrartcl}
+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}
+\usepackage{textcomp}
+\setcounter{secnumdepth}{2}
+\setcounter{tocdepth}{4}
+\usepackage{xspace}
+
+%%%%% author, version of file %%%%%
+\newcommand{\versiondate}{26.\,1.\,2010}%
+\def\FileAuthor{Dominik Wa�enhoven}
+\def\FileTitle{\jabrefversion{} Benutzerhandbuch}
+
+%%%%% Packages %%%%%
+\usepackage{array}
+\usepackage{longtable}
+\usepackage{amsmath}
+\usepackage{graphicx}
+\usepackage{setspace}
+\usepackage{amssymb}
+\usepackage{hanging}
+
+\makeatletter
+%%%%% LyX command %%%%%
+\providecommand{\LyX}{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\@\xspace}
+
+%%%%% Listings %%%%%
+\usepackage{listings}
+\lstset{%
+  frame=none,
+  %backgroundcolor=\color{pyellow},
+  language=[LaTeX]TeX,
+  basicstyle=\ttfamily,%\small,
+  commentstyle=\color{red},
+  keywordstyle=, % LaTeX-Befehle werden nicht fett dargestellt
+  numbers=none,%left/right
+  %numberstyle=\tiny\lnstyle,
+  %numbersep=5pt,
+  %numberblanklines=false,
+  breaklines=true,
+  %caption=\lstname,
+  xleftmargin=25pt,
+  xrightmargin=20pt,
+  escapeinside={(*}{*)},
+  belowskip=\medskipamount,
+  prebreak=\mbox{$\hookleftarrow$}% "geklaut" vom scrguide (KOMA-Script)
+}
+
+%%%%% Environment "revhist" (for revision history) %%%%%
+\newenvironment{revhist}[1]
+    {\subsection*{#1}
+     \list{--}{\setlength\itemsep{0pt}\setlength{\parsep}{0pt}}}
+    {\endlist}
+
+%%%%% PDF 1.2 for Acrobat 3 onwards %%%%%
+\pdfoptionpdfminorversion 2
+
+%%%%% Colors %%%%%
+\usepackage[dvipsnames]{xcolor}
+\definecolor{dkblue}{rgb}{0,0.1,0.5} % dark blue
+\definecolor{dkred}{rgb}{0.66,0.04,0.04} % dark red
+\definecolor{pyellow}{rgb}{1,0.97,0.75} % pale yellow
+
+%%%%% New commands %%%%%
+%%% JabRef "logo"
+\DeclareRobustCommand{\jabref}{%
+  \texorpdfstring{% TeX string
+	  \raisebox{-.32ex}{\color{dkred}J}\kern-.06em%
+	    \hbox{$\m at th$% %% force math size calculations
+	          \csname S@\f at size\endcsname
+	          \fontsize\sf at size\z@
+	          \math at fontsfalse\selectfont
+	          \color{orange}A\kern-.025emB}\-%
+	  \hbox{\kern-.06em\-R\hspace{-.08em}%
+	    \raisebox{.16ex}{$\m at th$% %% force math size calculations
+	          \csname S@\f at size\endcsname
+	          \fontsize\sf at size\z@
+	          \math at fontsfalse\selectfont
+	          E\kern-.025emF}}\xspace}%
+	  {JabRef\xspace}% PDF string
+}
+
+%%% version number
+\newcommand{\versionnr}{\texorpdfstring{2.4}{2.4}} %
+%%% JabRef logo with version nr
+\newcommand{\jabrefversion}{\jabref~\versionnr}
+%%% BibTeX logo
+\newcommand{\bibtex}{\texorpdfstring{Bib\kern-.125em\TeX\xspace}{BibTeX}}
+%%% for Menu references
+\newcommand{\menu}[1]{\texorpdfstring{{\color{dkred}\textit{#1}}}{#1}}
+%%% Menu separator
+\newcommand{\msep}{{\color{dkred}\textit{\guilsinglright}}\xspace}
+%%% yellow box with dark blue text
+\newcommand{\tip}[2][Tipp: ]{%
+  \begin{center}%
+  \colorbox{pyellow}{\parbox{0.85\textwidth}{%
+    \color{dkblue}\textit{#1}#2}}%
+  \end{center}%
+}%
+
+\newcommand{\verfasser}[1]{%
+  \begin{flushright}%
+  \colorbox{pyellow}{\parbox{0.7\textwidth}{%
+    \color{dkblue}\textit{Dieser Abschnitt stammt von #1}}}%
+  \end{flushright}%
+}%
+
+%%% for the FAQ 
+\newcounter{faq}
+\newcommand{\faq}[2]{\refstepcounter{faq}%
+  \medskip\noindent\colorbox{pyellow}{\parbox{0.9\textwidth}{%
+    \hangpara{0.11\textwidth}{1}%
+    \color{dkblue}Frage \thefaq: \textit{#1}}}\par\smallskip%
+  \begin{hangparas}{0.11\textwidth}{0}%
+    #2\par%
+  \end{hangparas}
+}%
+
+%%% for CTAN references
+\newcommand{\ctan}[1]{%
+  {\textsc{ctan}: \color{dkred}#1}%
+}
+
+%%%%% Headings %%%%%
+\usepackage{scrpage2}
+\pagestyle{scrheadings}
+\ihead{\FileTitle{} (\versiondate{})}
+\chead{}
+\ohead{\headmark}
+\ifoot{}
+\cfoot{\pagemark}
+\ofoot{}
+\automark[section]{section}
+
+%%%%% Fonts %%%%%
+\usepackage{charter}
+\addtokomafont{sectioning}{\rmfamily} % Headings with serifs
+\renewcommand{\headfont}{\normalfont\itshape} % Headlines italic, not slanted ***
+\usepackage[scaled=.83]{beramono}
+
+%%%%% Page Dimensions %%%%%
+\usepackage{typearea}
+\typearea{calc}
+
+%%%%% Other stuff %%%%%
+\deffootnote{1.5em}{1em}{\makebox[1.5em][l]{\thefootnotemark}}
+\usepackage{microtype} % micro typography
+
+%%%%% Mini TOCs %%%%%
+\usepackage{minitoc}
+\mtcsetrules{secttoc}{off}
+%\mtcsetdepth{secttoc}{3}
+\mtcsetfont{secttoc}{subsection}{}
+%\mtcsettitle{secttoc}{In diesem Abschnitt}
+%\mtcsettitlefont{secttoc}{\itshape}
+
+%%%%% Language %%%%%
+\usepackage{babel}
+
+%%%%% Bibliography %%%%%
+\usepackage{jurabib}
+\jurabibsetup{%
+  annote=true,
+  authorformat=year,
+  dotafter=bibentry
+}
+\renewcommand{\biblnfont}{}			% Autoren-Nachnamen (Standard: fett)
+\renewcommand{\bibfnfont}{}			% Autoren-Vornamen (Standard: fett)
+\renewcommand{\bibelnfont}{}			% Hrsg-Nachnamen (Standard: fett)
+\renewcommand{\bibefnfont}{}			% Hrsg-Vornamen (Standard: fett)
+\renewcommand{\bibtfont}{\textit}	% Titel (B�cher)
+\renewcommand{\bibbtfont}{\textit}	% Titel (Sammelwerke)
+\renewcommand{\bibjtfont}{\textit}	% Titel (Zeitschriften)
+\renewcommand{\bibpldelim}{(}			% runde Klammern bei...
+\renewcommand{\bibprdelim}{)}			% ...Zeitschriften (Jahr)
+\renewcommand{\ajtsep}{}				% kein Komma nach Zs-Titeln
+\renewcommand{\biburlprefix}{\jblangle\textsc{url: }}	% Klammer und Text vor einer URL (Standard: "URL: ")
+
+\renewcommand{\bib at heading}{\addsec[Literaturverzeichnis]{Kommentiertes Literaturverzeichnis}}
+
+%%%%% Hyperref %%%%%
+\usepackage{hyperref}
+\hypersetup{%
+breaklinks=true,%
+colorlinks=true,%
+linkcolor=dkblue,%
+urlcolor=dkblue,%
+citecolor=dkblue,%
+pdftitle={JabRef \versionnr{} Benutzerhandbuch},%
+pdfsubject={Einf�hrung in die Benutzung von JabRef},%
+pdfkeywords = {BibTeX, Bibliographie, Literaturverwaltung},%
+pdfauthor={\FileAuthor},%
+pdfstartview=FitH,%
+bookmarksopen=true,%
+bookmarksopenlevel=1,%
+}
+\urlstyle{rm}
+
+\hyphenation{
+LaTeX
+BibTeX
+Da-tei-na-men
+Me-n�-be-feh-le
+For-mat-erken-nung% verhindert Trennung "Formater-kennung"
+Werk-zeug-leis-te
+}
+
+\makeatother
+
+%%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%%
+\begin{document}
+
+\subject{\includegraphics[scale=.5]{../../images/JabRef-icon-48}}
+
+
+\title{\jabrefversion{}\\
+Benutzerhandbuch}
+
+
+\author{Dominik Wa�enhoven\\
+{\normalsize (\href{mailto:domwass at users.sourceforge.net}{domwass at users.sourceforge.net})}}
+
+
+\date{\small \versiondate}
+
+\maketitle
+
+\begin{abstract}
+\jabref ist eine grafische Java-Anwendung zur Bearbeitung von \bibtex{}-Dateien
+(.bib). Mit \jabref k�nnen Literaturangaben in Gruppen organisiert
+und mit einem einfachen Klick die Ansicht auf eine einzelne Gruppe,
+eine Schnittmenge von Gruppen oder die Gesamtmenge mehrerer Gruppen
+eingegrenzt werden. \jabref kann Literaturangaben sortieren (f�r
+alle Standard-\bibtex{}-Felder) und automatisch \bibtex{}-Keys erzeugen.
+Auch Links zu PDF-Dateien oder Webseiten k�nnen mit \jabref einfach
+erstellt werden.
+
+\jabref kann verschiedene Dateiformate importieren und exportieren,
+au�erdem k�nnen die Exportfilter angepasst werden. \jabref kann
+auch von der Kommandozeile gestartet werden, um von einem Importformat
+in ein Exportformat zu konvertieren, ohne die grafische Benutzeroberfl�che
+zu starten.
+\end{abstract}
+\begin{quote}
+\begin{spacing}{0.7}
+\begin{center}{\scriptsize Copyright \textcopyright{} 2005--2010, Dominik
+Wa�enhoven}
+\end{center}
+{\scriptsize Dieses Handbuch steht unter einer Creative Commons Namensnennung"=Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz (CC-by-sa). Die Lizenzbedingungen k�nnen unter
+\href{http://creativecommons.org/licenses/by-sa/3.0/de/}{http://creativecommons.org/licenses/by-sa/3.0/de}
+eingesehen werden.\par}\end{spacing}
+
+\end{quote}
+\thispagestyle{empty}
+
+\newpage
+\dosecttoc[e]
+\faketableofcontents{}
+
+\newpage
+
+\section{Einleitung}
+\secttoc
+
+\subsection{�ber dieses Handbuch}\label{subsec:about}
+
+Dieses Handbuch will eine kurze Einf�hrung zu den n�tzlichsten Funktionen
+von \jabref bieten, ohne dabei eine ersch�pfende Beschreibung aller
+Funktionalit�ten dieser Software zu liefern. \emph{}\jabref ist
+das Ergebnis der Verschmelzung von \emph{BibKeeper} und \emph{JBibtexManager}.
+Weitere Informationen gibt es im Programm selbst unter \menu{Hilfe} \msep{} \menu{Inhalt}
+sowie im Internet unter \url{http://jabref.sourceforge.net}. Wer dann immer noch keine Antwort auf seine Frage oder keine L�sung zu seinem Problem hat, kann �ber die Foren oder die Mailingliste auf der Projektseite bei Sourceforge weitere Hilfe bekommen (siehe dazu den Abschnitt \nameref{sec:faq}).
+
+Die Anleitungen basieren auf den Hilfeseiten des Programms. Da dieses
+Handbuch und die Hilfeseiten unabh�ngig voneinander gepflegt und aktualisiert
+werden, m�ssen die Beschreibungen jedoch nicht immer �bereinstimmen.
+Im Zweifel sind die Hilfeseiten des Programms aktueller als die hier
+vorgelegte Beschreibung.
+
+Am Anfang jedes Abschnitts sollte~(!) zun�chst stehen, wie man zur
+entsprechenden Funktion gelangt (d.\,h. �ber welches Men� und mit
+welchem Tastenk�rzel). Men�-Eintr�ge werden in einer kursiven, dunkelroten
+Schrift dargestellt (Beispiel: \menu{Men�} \msep{} \menu{Untermen�}).
+Besondere Hinweise und Tipps werden in einem gelb hinterlegten Kasten
+mit dunkelblauer Schrift dargestellt. Hyperlinks sind ebenfalls dunkelblau
+und anklickbar~-- das gilt sowohl f�r die Navigation innerhalb des
+Dokuments als auch f�r Links ins Internet.
+
+Wenn Ihnen in diesem Handbuch Fehler auf"|fallen oder wenn Sie Anregungen zum Handbuch haben, w�rde ich mich �ber eine kurze Nachricht per \href{mailto:domwass at users.sourceforge.net}{E-Mail} freuen. �ber den Stand und die einzelnen Versionen dieses Handbuchs gibt der Abschnitt ">\nameref{RevisionHistory}"< Auskunft.
+
+\subsection{Einf�hrung in \bibtex{}}
+
+\label{BibtexHelp}\tip[]{\jabref hilft Ihnen bei der Arbeit mit
+Ihren \bibtex{}-Dateien, aber es m�ssen dennoch Regeln beachtet werden,
+wenn Sie Ihre Eintr�ge bearbeiten. Nur so kann sichergestellt werden,
+dass \bibtex{} Ihre Datei richtig verarbeiten kann.}
+
+\noindent Im Folgenden k�nnen nur einige allgemeine Hinweise gegeben werden. Ausf�hrlichere Einf�hrungen und weitere Erl�uterungen zu \bibtex{} finden Sie bei den im \hyperlink{bibliography}{kommentierten Literaturverzeichnis} aufgef�hrten Beitr�gen.
+
+\subsubsection{\bibtex{}-Eintragstypen}
+\label{Eintragstypen}
+Je nachdem, ob sie ein Buch, einen Zeitschriftenartikel, einen Sammelband oder ein anderes Dokument referenzieren m�chten, h�lt \bibtex{} unterschiedliche Eintragstypen bereit. Hier folgt eine kurze Aufstellung der meist gebrauchten Eintragstypen.\footnote{Vgl. \cite[12--17]{Markey2005}; \cite[7--9]{btxdoc}.} Manche Paktete (wie ">jurabib"<) stellen weitere Eintragstypen zur Verf�gung, die Sie nat�rlich auch in \jabref verwenden k�nnen (mehr dazu im Abschnitt \nameref{CustomEntriesHelp}) [...]
+
+\begin{itemize}
+\item \emph{@article}\\
+Ein Artikel in einer Zeitschrift.
+\item \emph{@book}\\
+Ein Buch, von einem Verlag ver�ffentlicht.
+\item \emph{@booklet}\\
+Ein gedrucktes und gebundenes Buch ohne Verlag.
+\item \emph{@conference}\\
+Siehe \emph{@inproceedings}
+\item \emph{@inbook}\\
+Ein Teil eines Buches, z.\,B. ein Kapitel oder Abschnitt.
+\item \emph{@incollection}\\
+Ein Beitrag aus einem Buch, z.\,B. einem Sammelband.
+\item \emph{@inproceedings}\\
+Ein Artikel aus einem Tagungsbericht, der nicht zwangsl�ufig in einem Verlag erschienen ist.
+\item \emph{@manual}\\
+Eine Dokumentation oder ein Handbuch.
+\item \emph{@mastersthesis}\\
+Eine Diplom-/Magisterarbeit.
+\item \emph{@misc}\\
+Dieser Typ kann benutzt werden, wenn nichts anderes passt.
+\item \emph{@phdthesis}\\
+Eine (unver�ffentlichte) Dissertation.
+\item \emph{@proceedings}\\
+Ein Tagungsbericht.
+\item \emph{@techreport}\\
+Von einer Universit�t oder Institution (normalerweise in einer Reihe) ver�ffentlichter Bericht.
+\item \emph{@unpublished}\\
+Ein Dokument mit Autor und Titel, unver�ffentlicht.
+\end{itemize}
+
+\subsubsection{\bibtex{}-Felder}
+
+Es gibt viele unterschiedliche Felder in \bibtex{} und einige zus�tzliche Felder, die Sie in \jabref einsetzen k�nnen.
+Grunds�tzlich k�nnen Sie \LaTeX{}-Befehle in Feldern, die Text beinhalten, einsetzen. \bibtex{} wird Ihr Literaturverzeichnis automatisch formatieren und je nach \bibtex{} style (Stildatei .bst) Gro�buchstaben verkleinern. Um sicherzustellen, dass Anfangsbuchstaben gro� bleiben, m�ssen Sie die W�rter in geschweifte Klammern einschlie�en, wie im Wort \{Belgien\}.\footnote{Die meisten deutschen \bibtex{}-Stile behalten die Gro�buchstaben ohnehin bei.}
+
+Hinweise zu einigen Feldtypen:
+\begin{itemize}
+\item \emph{Bibtexkey}\\
+Eine eindeutige Bezeichnung, um sich in \LaTeX{}-Dokumenten auf den Eintrag beziehen zu k�nnen. Beachten Sie, dass der Bibtexkey genau mit dem Verweis im \LaTeX{}-Dokument �bereinstimmen muss (auch die Gro�-/Kleinschreibung).
+  \item \emph{address}\\
+    Der Ort des \emph{Verlags} oder einer anderen Institution.
+  \item \emph{annote}\\
+    Eine Anmerkung.
+Dieses Feld wird von den Standard-Bibliographiestilen nicht verwendet, kann aber bei einigen Stilen benutzt werden, um eine kommentierte Literaturliste zu erstellen.
+  \item \emph{author}\\
+    Dieses Feld sollte alle Autoren Ihres Eintrags enthalten. Die Namen werden durch das Wort \texttt{and} getrennt, auch wenn es mehr als zwei Autoren gibt. Jeder Name kann in zwei gleichwertigen Formen notiert werden:
+\begin{itemize}
+\item Donald E. Knuth \emph{oder} Knuth, Donald E.
+\item Eddie van Halen \emph{oder} van Halen, Eddie
+\end{itemize}
+Die zweite Form sollte f�r Autoren mit zwei oder mehr Nachnamen benutzt werden, um zwischen dem mittleren und dem Nachnamen zu unterscheiden.
+  \item \emph{booktitle}\\
+    Der Titel eines Buches, aus dem ein Teil zitiert wird. Falls Sie ein Buch zitieren wollen, nehmen Sie f�r den Titel stattdessen das \texttt{title}-Feld.
+  \item \emph{chapter}\\
+    Eine Kapitelnummer (oder Abschnittsnummer oder sonstige Nummer).
+  \item \emph{crossref}\\
+    Der \texttt{key} eines Eintrags, auf den ein Querverweis gesetzt wird. Damit lassen sich beispielsweise die Daten eines Sammelbandes in einem Eintrag f�r einen Aufsatztitel wiederverwenden, ohne sie bei jedem Aufsatztitel explizit einzutragen. Die Funktionalit�t von \texttt{crossref} ist jedoch nicht in jedem Fall praktikabel.
+  \item \emph{edition}\\
+    Die Auflage eines Buchs, z.\,B. \texttt{Zweite}. Die Ordnungszahl sollte mit einem Gro�buchstaben beginnen; sie wird von den Standardstilen gegebenenfalls in Kleinbuchstaben umgewandelt. Manche Stile verlangen hier eine Ziffer.
+  \item \emph{editor}\\
+    Dieses Feld ist analog zu dem \emph{author}-Feld.
+Falls zus�tzlich ein \texttt{author}-Feld angegeben wird, bezeichnet das \texttt{editor}-Feld den Herausgeber des Buches oder des Sammelbandes, in dem die referenzierte Literatur erschienen ist.
+  \item \emph{howpublished}\\
+    Die Art, wie ein Werk ver�ffentlicht wurde (meist au�erhalb eines Verlags). Das erste Wort sollte mit einem Gro�buchstaben beginnen.
+  \item \emph{institution}\\
+    Die f�rdernde Institutions eines technischen Reports.
+  \item \emph{journal}\\
+    Der Name einer Zeitschrift.
+Mit Hilfe von ">Strings"< k�nnen Zeitschriftentitel abgek�rzt werden. Zum Erstellen eines solchen Strings k�nnen Sie den \nameref{StringEditorHelp} benutzen oder die Funktionalit�t zur \nameref{JournalAbbreviations} %Abk�rzung von Zeitschriftentiteln 
+verwenden.
+  \item \emph{key}\\
+    Dieses Feld wird zur Sortierung, zur Erstellung von Labels (falls kein \texttt{author} vorhanden ist) und f�r Querverweise (\texttt{crossref}) verwendet. Verwechseln Sie dieses Feld nicht mit dem \texttt{Bibtexkey}, der f�r die \texttt{\textbackslash cite}-Kommandos gebraucht wird und am Anfang jedes Eintrags erscheint (im \bibtex{}"=Quelltext).
+  \item \emph{month}\\
+    Der Monat, in dem ein Werk ver�ffentlicht oder geschrieben wurde. Benutzen Sie am besten die englischen Abk�rzungen (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec).
+  \item \emph{note}\\
+    Zus�tzliche Informationen. Das erste Wort sollte mit einem Gro�buchstaben beginnen.
+  \item \emph{number}\\
+Die Nummer einer Zeitschrift, eines technischen Reports oder eines Bandes innerhalb einer Reihe (\texttt{series}). Zeitschriften haben oft eine Band- und Heftz�hlung, der Band entspricht dem \texttt{volume}-, das Heft dem \texttt{number}-Eintrag.
+  \item \emph{organization}\\
+    Die Organisation, die einen Konferenzband f�rdert.
+  \item \emph{pages}\\
+    Die Seitenzahl(en) oder der Seitenzahlbereich, z.\,B. \texttt{42-111} oder \texttt{7,41, 73-97} or \texttt{43+} (das \texttt{+} deutet auf folgende Seiten, die nicht einen einfachen Bereich umfassen).
+Ein einfacher Bindestrich (wie in \texttt{7-33}) wird in einen doppelten Bindestrich (\texttt{-{-}}) verwandelt, der in der Ausgabe als bis-Strich erscheint (also 7--33).
+  \item \emph{publisher}\\
+    Der Name des Verlags.
+  \item \emph{school}\\
+    Der Name einer Universit�t, an der eine Abschlussarbeit~-- z.\,B. eine Dissertation (\texttt{phdthesis}) oder Magisterarbeit (\texttt{mastersthesis})~-- geschrieben wurde.
+  \item \emph{series}\\
+    Der Name einer Reihe, in der ein Buch erschienen ist.
+Falls die B�cher einer Reihe nummeriert sind, wird die entsprechende Nummer im Feld \texttt{number} angegeben.
+  \item \emph{title}\\
+    Der Titel des Werkes. Die Gro�- und Kleinschreibung kann von den Bibliographiestilen und der benutzten Sprache abh�ngig sein (wobei sie mit deutschen Bibliographiestilen beibehalten wird). Worte, die auch bei Verwendung englischer Bibliographiestile gro� geschrieben werden sollen, m�ssen in geschweifte Klammern eingefasst werden (z.\,B. \texttt{A \{German\} title}).
+  \item \emph{type}\\
+    Der Typ eines technischen Reports, z.\,B. ">Research Note"<. Bei \emph{jurabib} wird dieses Feld auch f�r den Typ einer Abschlussarbeit verwendet.
+  \item \emph{volume}\\
+    Der Band (Jahrgang) einer Zeitschrift oder der Band eines Buches in einem mehrb�ndigen Werk.
+  \item \emph{year}\\
+    Das Jahr der Ver�ffentlichung (oder bei einem unver�ffentlichten Werk das Jahr, in dem es geschrieben wurde). Normalerweise sollte im \texttt{year}-Feld nur eine vierstellige Zahl stehen, z.\,B. \texttt{1984}. Die Standardstile k�nnen aber auch mit \texttt{year}-Eintr�gen umgehen, deren letzte vier Zeichen (ausgenommen Satzzeichen) Ziffern sind, beispielsweise \texttt{(um 1984)}.
+    Dieses Feld wird f�r die meisten Eintragstypen ben�tigt.
+\end{itemize}
+
+\subsubsection{Weitere Felder}
+
+Bibliographie-Stile f�r \bibtex{} wurden von vielen Leuten entwickelt,
+und einige haben weitere Felder erstellt. Es folgt eine kleine Auswahl.
+
+Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von \jabref unterst�tzt, k�nnen aber eingebunden werden (mehr dazu im Abschnitt \nameref{CustomEntriesHelp}).
+
+\begin{itemize}
+  \item \emph{affiliation*}\\
+    Die Zugeh�rigkeit eines Autors.
+  \item \emph{abstract}\\
+    Die Zusammenfassung eines Werks.
+  \item \emph{contents*}\\
+    Ein Inhaltsverzeichnis.
+  \item \emph{copyright*}\\
+    Copyright-Informationen.
+  \item \emph{doi}\\
+    Der \emph{Digital Object Identifier} ist eine permanente Kennung von Dokumenten.
+  \item \emph{eid}\\
+    Der EID \emph{(Electronic identifier)} wird f�r elektronische Zeitschriften benutzt, die auch im Druck erscheinen. Mit dieser Nummer, die die Seitenzahlen ersetzt, l�sst sich der Artikel in der gedruckten Ausgabe finden. Der EID wird manchmal auch \emph{citation number} genannt.
+  \item \emph{ISBN*}\\
+    Die Internationale Standardbuchnummer.
+  \item \emph{ISSN*}\\
+    Die Internationale Standardseriennummer (f�r Zeitschriften).
+  \item \emph{keywords}\\
+    Stichworte~-- sie k�nnen in \jabref gut zum Gruppieren verwendet werden.
+  \item \emph{language*}\\
+    Die Sprache des Werks.
+  \item \emph{location*}\\
+    Der Ort, der mit einem Werk in Verbindung steht, z.\,B. die Stadt, in der eine Konferenz stattgefunden hat.
+  \item \emph{LCCN*}\\
+    Die \emph{Library of Congress Call Number}.  Das Feld kann auch \texttt{lib-congress} hei�en.
+  \item \emph{mrnumber*}\\
+    Die \emph{Mathematical Reviews}-Nummer.
+  \item \emph{price*}\\
+    Der Preis.
+  \item \emph{size*}\\
+    Die physische Gr��e eines Dokuments.
+  \item \emph{url}\\
+    Der \emph{Uniform Resource Locator} (URL, ">einheitlicher Quellenanzeiger"<), der auf eine Webseite im Internet verweist.
+  \item \emph{urldate}\\
+    Das Datum, an dem eine Webseite zuletzt besucht wurde.
+\end{itemize}
+
+
+\clearpage 
+\section{Installation}
+\secttoc
+
+\subsection{System-Voraussetzungen}
+\label{subsec:System-Voraussetzungen}
+\jabref ist in Java programmiert und somit betriebssystemunabh�ngig,
+kann prinzipiell also unter Windows, Mac OS X, Linux und anderen UNIX-Systemen
+betrieben werden. Voraussetzung ist allerdings, dass die \emph{Java
+Virtual Machine} mindestens in der Version~1.5 installiert ist.\footnote{Bis zur Version 2.2 von \jabref reichte Java~1.4.2 aus.}
+Sie ist kostenlos und kann unter \url{http://java.sun.com/} heruntergeladen
+werden. Im Normalfall sollte das \emph{Java Runtime Environment} (JRE) ausreichen;
+nur wenn Sie \jabref kompilieren m�chten, ben�tigen Sie das \emph{Java
+Development Kit} (JDK).
+
+
+\subsection{Windows}
+
+
+\subsubsection{Installer (msi)}
+
+\jabref gibt es im Windows Installer-Format (\texttt{.msi}). Ein
+Doppelklick auf die MSI-Datei installiert \jabref und f�gt dem
+Startmen� eine Verkn�pfung hinzu. Falls Java nicht installiert ist,
+wird eine Warnmeldung ausgegeben.%
+\footnote{Die Windows-Installation wurde von Dale Visser erstellt, der dazu
+die folgenden \emph{Open-Source-Tools} benutzt hat: JSmooth, ein \texttt{.exe}
+wrapper f�r Java-Anwendungen (\url{http://jsmooth.sf.net/}); Wix,
+ein Tool zum Kompilieren von MSI-Dateien aus einer XML-Spezifikation
+(\url{http://wix.sf.net/}).%
+}
+
+
+\subsubsection{Batch-Datei (jar)}
+\label{subsub:jar}
+Wenn Sie die ausf�hrbare jar-Datei (\texttt{.jar}) heruntergeladen
+haben, probieren Sie zun�chst, ob ein Doppelklick darauf das Programm
+startet~-- dies funktioniert zumindest auf einigen Systemen. Falls
+\jabref nicht direkt startet (Windows also nicht wei�, was es mit
+einer jar-Datei anfangen soll), fahren Sie folgenderma�en fort:
+
+Erstellen Sie in dem Ordner, in dem Sie die Datei \emph{JabRef.jar}
+abgelegt haben, eine Batch-Datei mit dem Namen \emph{jabref-start.bat}.
+Diese Datei soll nur eine Zeile enthalten:
+
+\begin{lstlisting}
+start javaw -jar JabRef.jar
+\end{lstlisting}
+Mit einem Doppelklick auf die Batch-Datei starten Sie \jabref.
+
+
+\subsection{Starten von der Kommandozeile}\label{subsec:Starten-Kommandozeile}
+
+\begin{enumerate}
+\item mit dem \emph{Java Runtime Environment}:
+\begin{lstlisting}
+jre -new -jar <Pfad zur jar-Datei>
+\end{lstlisting}
+oder
+\begin{lstlisting}
+jrew -new -jar <Pfad zur jar-Datei>
+\end{lstlisting}
+\item mit dem \emph{Java Development Kit}:
+\begin{lstlisting}
+java -jar <Pfad zur jar-Datei>
+\end{lstlisting}
+\end{enumerate}
+Es wird empfohlen, \jabref mit Java 1.5 zu benutzen und die Option \lstinline{-Dswing.aatext=true}
+vor der Option \lstinline{-jar} einf�gen, um das Benutzen von Anti-Alias-Schriften
+im Programm zu erm�glichen.
+
+Die jar-Datei, die \jabref enth�lt, kann entpackt werden mit den
+Kommandos 
+\begin{lstlisting}
+jar xf <Pfad zur jar-Datei>
+\end{lstlisting}
+bzw. 
+\begin{lstlisting}
+jar xf <Pfad zur jar-Datei> <Liste der Dateien, die entpackt werden sollen>
+\end{lstlisting}
+Das Entpacken der jar-Datei ist nicht notwendig, um das Programm zu
+starten!
+
+Weitere Hinweise zur Installation finden Sie in der Datei INSTALL
+(zum Kompilieren aus den \emph{sourcen}) und auf der \href{http://jabref.sourceforge.net}{\jabref-Homepage}.
+
+
+\clearpage 
+\section{Funktionen}
+\secttoc
+\bigskip
+
+\noindent \label{JabRefHelp}\jabref ist ein Programm zur Verwaltung von
+\bibtex{}-Dateien. Es benutzt kein eigenes Dateiformat, d.\,h. dass
+Sie Ihre Dateien direkt im \bibtex{}-Format (Dateiendung \texttt{.bib})
+laden und speichern. Sie k�nnen aber auch bibliographische Datenbanken
+anderer Formate in \jabref importieren.
+
+\jabref unterst�tzt Sortier- und Suchfunktionen, um einen �berblick
+�ber den Inhalt Ihrer Datei zu bekommen. Sie k�nnen der Datei ganz
+einfach neue Eintr�ge hinzuf�gen, ohne sich daran erinnern zu m�ssen,
+welche Informationen ben�tigt werden. Au�erdem kann \jabref \bibtex{}-Keys
+automatisch generieren. \jabref ist sehr n�tzlich, wenn Sie \bibtex{}
+oder CiteMaker verwenden, kann aber auch f�r diejenigen sinnvoll sein,
+die andere Bibliographie-Systeme benutzen oder schlicht und einfach
+ihre Literaturquellen organisieren wollen.
+
+\subsection{Das Hauptfenster}
+
+\tip[]{Die meisten Men�funktionen, auf die im Folgenden hingewiesen
+wird, haben Tastenk�rzel, und viele Funktionen k�nnen �ber die Werk\-zeug\-leiste
+aufgerufen werden.}
+\label{BaseFrameHelp}Im Hauptfenster, in dem Sie mit Ihrer Datei
+arbeiten, befindet sich unter der Men�leiste und der Werkzeugleiste
+die Tableiste mit Tabs (Reitern) f�r jede Ihrer ge�ffneten Dateien.
+Wenn Sie einen dieser Tabs anklicken, erscheint eine Tabelle, die
+alle Datens�tze und einige der Datenfelder auf"|listet.
+
+Mit einem Doppelklick auf eine Tabellenzeile k�nnen Sie den Inhalt bearbeiten (der \nameref{EntryEditorHelp} wird ge�ffnet). Sie k�nnen mit den Pfeiltasten innerhalb der Tabelle navigieren. Wenn Sie einen Buchstaben dr�cken, springen Sie zu dem ersten Eintrag, der mit diesem Buchstaben beginnt (abh�ngig von der Spalte, nach der Sie die Tabelle sortiert haben).
+
+Die Sortierung der Tabelle erfolgt nach einem Feld Ihrer Wahl. Sie k�nnen das Standardverhalten unter \menu{Optionen \msep{} Einstellungen \msep{} Tabellenansicht} angeben. Um die Sortierreihenfolge schnell zu �ndern, klicken Sie einfach auf die Kopfzeile einer Spalte; damit haben Sie das prim�re Sortierkriterium definiert. Klicken Sie erneut auf den Spaltenkopf, um die Sortierrichtung umzukehren. Ein weiterer Klick sorgt daf�r, dass die Spalte nicht mehr zur Sortierung herangezogen wird [...]
+
+Welche Felder (Spalten) in der Tabelle angezeigt werden sollen, k�nnen
+Sie im \menu{Einstellungs}-Dialog ausw�hlen. Auch die Breite der
+Tabellenspalten kann eingestellt werden, indem man die Trennlinie
+zwischen den Spaltenk�pfen anklickt und nach links oder rechts verschiebt.
+Im \menu{Einstellungs}-Dialog k�nnen Sie festlegen, ob die Tabelle
+an die Bildschirmgr��e angepasst werden soll oder nicht. Aktivieren
+Sie diese Funktion, um sicherzustellen, dass Sie die gesamte Tabelle
+sehen k�nnen. Deaktivieren Sie diese Funktion, wenn mehr Informationen
+dargestellt werden sollen.
+
+Die Farbanzeige kann ebenfalls im \menu{Einstellungs}-Dialog ein-
+und ausgeschaltet werden. Die Farbanzeige illustriert, ob Ihre Daten
+vollst�ndig sind, indem sie die Zellen wie folgt darstellt:
+
+\begin{itemize}
+\item Eine \colorbox{red}{\textcolor{white}{rote}} Zelle in der linken Spalte kennzeichnet
+einen unvollst�ndigen Eintrag.
+\item Eine \colorbox{yellow}{gelbe} Zelle in der linken Spalte kennzeichnet
+einen Eintrag, der nicht alle ben�tigten Felder selbst enth�lt, der
+aber einen Querverweis enth�lt.
+\item Eine \colorbox{blue}{\textcolor{white}{blaue}} Zelle kennzeichnet ein ben�tigtes Feld.
+\item Eine \colorbox{green}{gr�ne} Zelle kennzeichnet ein optionales Feld.
+\item Eine farblose (wei�e) Zelle kennzeichnet ein Feld, das von \bibtex{}
+f�r diesen Eintragstyp nicht benutzt wird. Das Feld kann selbstverst�ndlich
+in \jabref bearbeitet werden.
+\end{itemize}
+
+\subsubsection{Einen neuen Eintrag hinzuf�gen}
+
+Es gibt verschiedene M�glichkeiten, einen neuen Eintrag hinzuzuf�gen.
+Im Men� \menu{BibTeX} f�hrt ein Klick auf \menu{Neuer Eintrag} zu
+einem Dialog, in dem Sie den Eintragstyp aus einer Liste w�hlen k�nnen.
+Um diesen Dialog zu umgehen, gibt es auch eigene Men�punkte f�r jeden
+Eintragstyp und au�erdem Tastenk�rzel f�r die g�ngigsten Typen.
+
+Wenn ein Eintrag hinzugef�gt wird, wird standardm��ig ein Editor f�r
+den Eintrag ge�ffnet. Sie k�nnen dieses Verhalten im \menu{Einstellungs}-Dialog
+abstellen.
+
+\tip[]{Wir empfehlen, sich die Tastenk�rzel f�r die Eintragstypen
+einzupr�gen, die Sie am h�ufigsten benutzen, z.\,B. STRG-SHIFT-A
+f�r einen Zeitschriftenaufsatz \emph{(article)}.}
+
+
+\subsubsection{Einen Eintrag bearbeiten}
+
+Um den \nameref{EntryEditorHelp} zur Bearbeitung
+eines existierenden Eintrags zu �ffnen, klicken Sie einfach doppelt
+auf die entsprechende Zeile oder markieren den Eintrag
+und dr�cken auf ENTER.
+
+
+\subsubsection{Einen \bibtex{}-String in einem Feld verwenden}
+
+In \jabref schreiben Sie den Inhalt aller Felder so, wie Sie es
+in einem Texteditor machen w�rden, mit einer Ausnahme: um einen String
+(eine Art Abk�rzung) zu verwenden, umschlie�en Sie den Namen des Strings
+mit je einem \#, z.\,B.
+
+\begin{lstlisting}
+#jan# 1997
+\end{lstlisting}
+was interpretiert wird als String mit dem Namen \texttt{jan} gefolgt
+von \texttt{1997}. Vergleichen Sie dazu auch die Hinweise zum \nameref{StringEditorHelp}.
+
+
+\subsection{\texorpdfstring{Eintrags"=Editor}{Eintrags-Editor}}
+
+\label{EntryEditorHelp}
+
+\begin{quote}
+\emph{Ge�ffnet wird der Eintrags"=Editor im Hauptfenster durch einen
+Doppelklick auf die linke Spalte eines Eintrags oder durch
+Dr�cken auf ENTER. Der Eintrags-Editor wird geschlossen, indem man
+auf ESC dr�ckt.}
+\end{quote}
+Im Eintrags-Editor k�nnen Sie alle relevanten Informationen eines
+Eintrags festlegen. Der Editor �berpr�ft den Eintragstyp und zeigt
+alle ben�tigten und optionalen Felder f�r den Gebrauch mit \bibtex{}
+an. Dar�ber hinaus gibt es einige Felder, die \emph{Allgemeine Felder}
+genannt werden und f�r alle Eintragstypen gelten.
+
+Sie k�nnen die Felder, die f�r die einzelnen Eintragstypen als ben�tigt
+und optional angesehen werden, und auch die Allgemeinen Felder anpassen.
+N�heres dazu erfahren Sie im Abschnitt \nameref{CustomEntriesHelp}.
+
+\subsubsection{Die Panels des Eintrags-Editors}
+
+Der Eintrags-Editor besteht in der Standardeinstellung aus f�nf Panels:
+\emph{Ben�tigte Felder}, \emph{Optionale Felder}, \emph{General},
+\emph{Abstract} und \emph{\bibtex{}"=Quelltext}, wobei \emph{General}
+und \emph{Abstract} vom Benutzer angepasst werden k�nnen (siehe dazu
+Abschnitt~\ref{GeneralFields}). In den ersten drei Panels k�nnen
+Sie mit TAB und SHIFT-TAB zwischen den einzelnen Feldern hin- und
+herwechseln. Zu einem anderen Panel gelangen Sie, indem Sie auf die
+Tabs klicken. Mit den folgenden Tastaturk�rzeln k�nnen Sie ebenfalls
+zwischen den Panels navigieren:
+
+\begin{itemize}
+\item STRG-TAB oder STRG-+ wechselt zum Panel rechts vom aktuellen Panel,
+\item STRG-SHIFT-TAB oder STRG-{-} (MINUS) wechselt dementsprechend zum
+Panel links vom aktuellen Panel.
+\end{itemize}
+Au�erdem k�nnen Sie zum n�chsten oder vorherigen Eintrag wechseln,
+indem Sie >>STRG-SHIFT-$\downarrow$<< bzw. >>STRG-SHIFT-$\uparrow$<<
+oder die Pfeil-Buttons in der linken Toolbar dr�cken.
+
+Das Panel \emph{\bibtex{}"=Quelltext} zeigt, wie der Eintrag aussehen
+wird, wenn die Datei im \texttt{bib}-Format gespeichert wird. Wenn
+Sie wollen, k�nnen Sie den \bibtex{}"=Quelltext direkt bearbeiten.
+Sobald Sie zu einem anderen Panel wechseln, STRG-S dr�cken oder den
+Eintrags-Editor schlie�en, wird \jabref versuchen, den Inhalt des
+Quelltext"=Panels zu analysieren. Falls dabei Probleme auftreten, werden
+Sie benachrichtigt und erhalten die M�glichkeit, den Eintrag noch
+einmal zu �berarbeiten oder den vorherigen Inhalt wiederherzustellen. (N�here
+Einzelheiten dazu finden Sie im Abschnitt \nameref{subsub:feldkonsistenz}.)
+Wenn in den \menu{Einstellungen} (unter \menu{Allgemein}) die Option
+\menu{Quelltext standardm��ig anzeigen} gew�hlt wurde, wird das Quelltext"=Panel
+beim �ffnen des Eintrags-Editors als erstes angezeigt. Wenn Sie lieber
+den Quelltext bearbeiten als die anderen Panels zu benutzen, sollten
+Sie diese Option w�hlen.
+
+\tip{Wenn Ihre Datei Felder enth�lt, die \jabref nicht kennt,
+erscheinen diese im Quelltext"=Panel.}
+
+\tip[Und noch ein Tipp: ]{Die \emph{PDF-} und \emph{URL}-Felder unterst�tzen
+Drag \& Drop. Sie k�nnen z.\,B. ein URL aus Ihrem Browser dort einf�gen.}
+
+
+\subsubsection{�berpr�fung der Feldkonsistenz}
+\label{subsub:feldkonsistenz}
+Wenn der Inhalt eines Feldes ge�ndert wird, �berpr�ft \jabref,
+ob der neue Inhalt akzeptiert werden kann. Bei Feldern, die von \bibtex{}
+genutzt werden, wird der Inhalt zum einen auf die richtige Klammerung
+mit geschweiften Klammern, aber auch auf die Benutzung des Zeichens
+\texttt{\#} hin �berpr�ft. Das >>hash<<-Symbol (im Deutschen oft
+>>Doppelkreuz<< oder >>Raute<< genannt) darf \emph{nur} paarweise
+benutzt werden, um damit den Namen eines \bibtex{}-Strings einzuschlie�en.
+Beachten Sie, dass \jabref nicht �berpr�ft, ob der angef�hrte String
+tats�chlich vorhanden ist, da der \bibtex{}-Stil, den Sie benutzen, 
+eine beliebige Anzahl von Strings definieren kann, die \jabref nicht
+kennt.
+
+Falls die Inhalte nicht akzeptabel sind, wird das Feld mit roter Farbe
+hinterlegt, was auf einen Fehler hindeutet. In diesem Fall werden
+die �nderungen nicht gespeichert.
+
+
+\subsection{Integrit�tspr�fung}
+
+\begin{quote}
+\emph{Erreichbar �ber das Men� \menu{Extras \msep{} Datenbank durchsuchen
+\msep{} �berpr�fung der Integrit�t}.}
+\end{quote}
+Mit dieser Funktion �berpr�ft \jabref alle Eintr�ge auf deren G�ltigkeit
+und versucht Fehler aufzudecken. Mit dem \menu{�berpr�fen}-Button
+kann der Vorgang gestartet werden. Es wird eine Liste mit Hinweisen
+(Info-Icon) und m�glichen Fehlern (Ausrufezeichen-Icon) sowie dem
+entsprechenden \bibtex{}-Key erstellt. Wenn Sie einen Hinweis ausw�hlen,
+erscheint der Inhalt des Feldes, das beanstandet wird. Sie k�nnen
+nun den Feldinhalt ver�ndern und die Ver�nderungen mit Klick auf die
+Schaltfl�che \menu{�bernehmen} speichern.
+
+
+\subsection{\bibtex{}-Keys}
+
+Damit man sich in einem \LaTeX{}-Dokument auf einen Literaturverweis
+beziehen kann, braucht man einen eindeutigen \bibtex{}-Key. Eindeutig
+hei�t, dass er nur einmal vergeben sein darf. Es wird nach Gro�"~
+und Kleinschreibung unterschieden, \texttt{Yared1998} ist also nicht
+identisch mit \texttt{yared1998}. \jabref bietet einige M�glichkeiten,
+um auch bei gr��eren Datenbanken den �berblick �ber die \bibtex{}-Keys
+nicht zu verlieren.
+
+\tip{Falls Sie in einem \LaTeX{}-Dokument mehrere \bibtex{}-Dateien
+einbinden, m�ssen Sie selbst darauf achten, dass in den unterschiedlichen
+Dateien nicht mehrmals derselbe \bibtex{}-Key vergeben ist. Nutzen
+Sie deshalb am besten die Funktion \menu{Extras} \msep{} \menu{Neue Teildatei aus AUX-Datei}.}
+Der einfachste Weg, einen eindeutigen \bibtex{}-Key zu bekommen, ist
+das automatische Erzeugen, das Sie mit der Tastenkombination STRG-G
+oder mit dem Zauberstab-Button im Eintrags-Editor veranlassen k�nnen.
+Falls Sie sich nicht im Eintrags-Editor befinden, werden mit Hilfe
+von STRG-G oder dem Zauberstab-Button aus der Men�leiste f�r alle
+Eintr�ge der Datei \bibtex{}-Keys erzeugt. Falls dabei Keys �berschrieben
+werden, gibt \jabref eine Warnmeldung aus.
+
+Wie die \bibtex{}-Keys aussehen, die \jabref automatisch generiert,
+und wie Sie dieses Aussehen ver�ndern k�nnen, erfahren Sie im Abschnitt~\ref{LabelPatterns} \nameref{LabelPatterns}.
+
+
+\subsection{Suchfunktionen}
+
+\label{SearchHelp}
+\begin{quote}
+\emph{STRG-F �ffnet oder aktiviert den Suchdialog.
+Dr�ckt man mehrmals auf STRG-F, so werden die verschiedenen Suchmodi
+ausgew�hlt. STRG-SHIFT-F �ffnet oder aktiviert den Suchdialog
+und w�hlt gleichzeitig die direkte Suche aus. Bei der direkten Suche
+springt man mit STRG-F oder STRG-SHIFT-F zum n�chsten Treffer.}
+\end{quote}
+
+\subsubsection{Direkte Suche}
+
+Bei der direkten Suche sucht \jabref unmittelbar, wenn Sie einen
+Buchstaben eingeben. Die Statuszeile informiert Sie �ber den Sucherfolg.
+Mit STRG-F oder STRG-SHIFT-F wird zum n�chsten Vorkommen des aktuellen
+Suchbegriffs gesprungen. Falls es keine weiteren Vorkommen gibt, informiert
+die Statuszeile dar�ber. Bei erneuter Wiederholung startet die Suche
+vom Anfang der Datei. Die Suchreihenfolge richtet sich nach der aktuellen
+Sortierung Ihrer Datei. Um die direkte Suche zu verlassen, dr�cken
+Sie ESC oder klicken Sie auf \menu{Zur�cksetzen}.
+
+
+\subsubsection{Normale Suche}
+
+Hierbei sucht das Programm nach allen Vorkommen der W�rter ihres Suchausdrucks, sobald Sie ENTER dr�cken. Nur Eintr�ge, die alle W�rter enthalten, gelten als Treffer. Um nach festen Ausdr�cken zu suchen, m�ssen Sie die W�rter in doppelte Anf�hrungszeichen einfassen. Zum Beispiel findet die Suchanfrage \texttt{progress \textquotedbl marine acquaculture\textquotedbl} Eintr�ge, die sowohl das wort ">progress"< als auch den Ausdruck ">marine acquaculture"< aufweisen. Alle Eintr�ge, die keine [...]
+
+\subsubsection{Suchoptionen}
+
+Der \menu{Einstellungen}-Button im Suchdialog �ffnet ein Men�, in
+dem man mehrere Optionen (de)aktivieren kann: das Beachten von Gro�-
+und Kleinschreibung, das Nutzen regul�rer Ausdr�cke (siehe dazu den Abschnitt ">\nameref{search-regular-expressions}"<) sowie das Ausw�hlen
+der Suchergebnisse.
+
+\tip{Suchen Sie mit der Option \menu{Treffer ausw�hlen} und dr�cken
+anschlie�end STRG-M, so haben Sie alle Treffer markiert (vgl. Abschnitt ">\nameref{MarkingHelp}"<) und k�nnen z.\,B. eine weitere Suche durchf�hren,
+ohne die bisherigen Ergebnisse zu >>verlieren<<.}
+
+\subsubsection{Feldbezeichner und logische Operatoren}
+\label{SearchHelp_advanced}
+
+\tip[Achtung! ]{Die folgenden Hinweise gelten nicht f�r die direkte Suche.}
+Um nur einige bestimmte Felder zu durchsuchen
+und\slash{}oder logische Operatoren im Suchbegriff zu benutzen, wird
+eine spezielle Syntax zur Verf�gung gestellt. Um beispielsweise nach
+Eintr�gen mit dem Autor >>Miller<< zu suchen, geben Sie
+
+\begin{lstlisting}
+author = miller
+\end{lstlisting}
+in das Suchfeld ein. Falls der Suchbegriff Leerzeichen enth�lt, schlie�en
+Sie ihn in Anf�hrungszeichen ein. Benutzen Sie \emph{nie} Leerzeichen
+in dem Feldbezeichner. Mehrere Feldbezeichner werden durch >>|<<
+voneinander getrennt. Um beispielsweise nach Eintr�gen �ber Karl den
+Gro�en zu suchen, geben Sie Folgendes ein:
+
+\begin{lstlisting}
+title|keywords = "Karl der Gro�e"
+\end{lstlisting}
+Sie k�nnen die logischen Operatoren AND, OR und NOT sowie Klammern
+verwenden:
+
+\begin{lstlisting}
+(author = miller OR title|keywords = "Karl der Gro�e") AND NOT author = brown
+\end{lstlisting}
+\ldots{} sucht beispielsweise nach Eintr�gen, in denen entweder der
+Autor >>Miller<< hei�t oder im \emph{title}- oder \emph{keywords}-Feld
+der Begriff >>Karl der Gro�e<< steht; gleichzeitig werden die Eintr�ge
+mit dem Autor >>Brown<< nicht angezeigt.
+
+Das \texttt{=}-Zeichen ist eigentlich eine Abk�rzung f�r >>enth�lt<<
+\emph{(contains)}. Wenn man nach genauen Treffern suchen m�chte, muss
+man \texttt{==} oder \texttt{matches} (>>�bereinstimmen<<) eingeben.
+\texttt{!=} sucht nach Eintr�gen, bei denen der Suchbegriff \emph{nicht}
+enthalten ist. Um nach Eintr�gen eines bestimmten Typs zu suchen,
+gibt es ein Pseudofeld namens \emph{entrytype}:
+
+\begin{lstlisting}
+entrytype = thesis
+\end{lstlisting}
+\ldots{} findet Eintr�ge, deren Typ (wie in der Spalte \emph{Entrytype}
+dargestellt) das Wort >>thesis<< enth�lt (z.\,B. >>phdthesis<<
+und >>mastersthesis<<). Ebenso erlaubt das Pseudofeld \emph{bibtexkey}
+die Suche nach \bibtex{}-Keys, z.\,B.:
+
+\begin{lstlisting}
+bibtexkey = miller2005
+\end{lstlisting}
+
+\subsubsection{Suche mit regul�ren Ausdr�cken}
+\label{search-regular-expressions}
+\verfasser{Pedro J. Aphalo, zuerst ver�ffentlicht im \jabref{}-Wiki in englischer Sprache}
+
+\paragraph{Hintergrund}
+Regul�re Ausdr�cke (kurz ">regex"< f�r engl. ">regular expressions"<) definieren eine Sprache zum Spezifizieren von passendem Text, zum Beispiel bei Suchanfragen. \jabref{} nutzt regul�re Ausdr�cke, wie sie in Java definiert sind. Eine Dokumentation dazu findet sich unter \href{http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html}{http://java.sun.com\slash{}j2se\slash{}1.4.2\slash{}docs\slash{}api\slash{}java\slash{}util\slash{}regex\slash{}Pattern.html}.
+
+\tip[]{Die folgenden Beispiele sind alle in Kleinbuchstaben, damit werden aber auch Gro�buchstaben oder gemischte Varianten gefunden.}
+
+\paragraph{Suche nach Eintr�gen mit leerem oder fehlendem Feld}
+\tip[]{\texttt{.} bezeichnet irgendein Zeichen
+
+\texttt{+} hei�t ein- oder mehrmals}
+\begin{lstlisting}
+author != .+
+\end{lstlisting}
+
+\paragraph{Wortgrenzen beachten}
+\tip[]{\texttt{\textbackslash b} bezeichnet eine Wortgrenze
+
+\texttt{\textbackslash B} hei�t: keine Wortgrenze}
+\begin{lstlisting}
+keywords = \buv\b
+\end{lstlisting}
+findet ">uv"<, aber nicht ">lluvia"< (es findet allerdings ">uv-b"<)
+\begin{lstlisting}
+author = \bblack\b
+\end{lstlisting}
+findet ">black"<, aber weder ">blackwell"< noch ">blacker"<
+
+\begin{lstlisting}
+author == black
+\end{lstlisting} findet ">john black"< nicht, 
+\begin{lstlisting}
+author = \bblack\b
+\end{lstlisting} hingegen schon
+
+\begin{lstlisting}
+author = \bblack\B
+\end{lstlisting}
+findet ">blackwell"< und ">blacker"<, aber nicht ">black"<
+
+\paragraph{Suche mit optionaler Schreibweise}
+
+\tip[]{\texttt{?} bezeichnet keine oder eine Kopie des vorhergehenden Buchstaben
+
+\texttt{{n,m}} hei�t mindestens n, aber nicht mehr als m Kopien des vorhergehenden Buchstaben
+
+\texttt{[ ]} definiert eine Buchstabengruppe}
+
+\begin{lstlisting}
+title =neighbou?r
+\end{lstlisting}
+findet ">neighbour"< und ">neighbor"<, aber auch ">neighbours"< und ">neighbors"<, ">neighbouring"< und ">neighboring"< etc.
+
+\begin{lstlisting}
+title = neighbou?rs?\b
+\end{lstlisting}
+findet ">neighbour"< und ">neighbor"<, auch ">neighbours"< und ">neighbors"< , aber weder ">neighbouring"< noch ">neighboring"<.
+
+\begin{lstlisting}
+author = s[a�]nchez
+\end{lstlisting}
+findet ">sanchez"< und ">s�nchez"<
+
+\begin{lstlisting}
+abstract = model{1,2}ing
+\end{lstlisting}
+findet ">modeling"< und ">modelling"<
+
+\begin{lstlisting}
+abstract = modell?ing
+\end{lstlisting}
+findet ebenfalls ">modeling"< und ">modelling"<
+
+\paragraph{Das Problem von Anf�hrungszeichen (\texorpdfstring{\texttt{"}}{"}) in Suchausdr�cken}
+Sind regul�re Ausdr�cke ausgeschaltet, findet 
+\begin{lstlisting}
+author = {\"O}quist
+\end{lstlisting} nichts, auch wenn der Name in der Datenbank vorkommt. Ebensowenig wird bei aktivierten regul�ren Ausdr�cken 
+\begin{lstlisting}
+author = \{\\\"O\}quist
+\end{lstlisting} irgendetwas finden.
+
+\begin{lstlisting}
+author = \{\\\x22O\}quist
+\end{lstlisting}
+funktioniert bei aktivierten regul�ren Ausdr�cken f�r ">\texttt{\{\textbackslash "{}O\}quist}"<, weil \lstinline{\"} nicht als Aufhebung von \lstinline{"} wirkt, \lstinline{\x22} aber schon (also das Zeichen hexadezimal 22 in der ASCII-Tabelle).
+
+\begin{lstlisting}
+author = Bolh{\`a}r 
+\end{lstlisting}
+funktioniert mit ausgeschalteten regul�ren Ausdr�cken und
+
+\begin{lstlisting}
+author = Bolh\{\\`a\}r 
+\end{lstlisting}
+funktioniert mit aktivierten regul�ren Ausdr�cken.
+
+Einfache Anf�hrungszeichen (\texttt{'}) funktionieren ebenfalls.
+
+Es gibt also anscheinend eine Einschr�nkung, wie \lstinline{"} in der Eingabe behandelt wird, aber Sie k�nnen stattdessen \lstinline{\x22} nutzen, um dieses Problem zu umgehen. (Das Zeichen \lstinline{"} hat eine spezielle Bedeutung: es wird benutzt, um mehrere W�rter zu einer Phrase zu gruppieren, die exakt gefunden werden soll.)
+
+\subsection{Gruppen}
+
+Mit Gruppen k�nnen Sie Ihre \bibtex{}-Datei in einer Baumstruktur
+anordnen, vergleichbar mit einer Dateistruktur in Ordnern und Unterordnern.
+Die beiden Hauptunterschiede sind:
+
+\begin{enumerate}
+\item W�hrend eine Datei auf einer Festplatte immer in genau einem Ordner
+abgelegt ist, kann ein Literatureintrag in \jabref mehreren Gruppen
+angeh�ren.
+\item Gruppen benutzen bestimmte Kriterien, um ihren Inhalt dynamisch zu
+bestimmen. Neue Eintr�ge, die den Kriterien einer Gruppe entsprechen,
+geh�ren automatisch zu dieser Gruppe. Diese Funktionalit�t gibt es
+nicht in �blichen Dateisystemen, wohl aber in einigen E-Mail-Programmen
+(z.\,B. Thunderbird und Opera).
+\end{enumerate}
+Wenn Sie eine Gruppe ausw�hlen, werden die Eintr�ge dieser Gruppe
+angezeigt. Wenn Sie mehrere Gruppen ausw�hlen, werden entweder die
+Eintr�ge angezeigt, die in einer der Gruppen sind (Vereinigung), oder
+solche, die in allen Gruppen vorhanden sind (Schnittmenge)~-- das
+h�ngt von Ihren Einstellungen ab. All dies wird im Folgenden detailliert
+erl�utert.
+
+Gruppendefinitionen sind dateispezifisch; sie werden als \texttt{@COMMENT}-Block
+in der \texttt{bib}-Datei gespeichert und von allen Benutzern gemeinsam
+benutzt. (K�nftige Versionen von \jabref werden m�glicherweise
+benutzerabh�ngige Gruppen unterst�tzen.)
+
+
+\subsubsection{Die Gruppenansicht}
+\begin{quote}
+\emph{Die Gruppenansicht wird im linken Bereich des Bildschirms angezeigt.
+Sie kann mit der Tastenkombination STRG-SHIFT-G oder dem Gruppen-Button
+in der Toolbar ein- und ausgeblendet werden. Die Gruppenansicht verf�gt
+�ber mehrere Schaltfl�chen, aber die meisten Funktionen werden �ber
+das Kontextmen� angesteuert (also mit der rechten Maustaste). Drag\,\&\,Drop
+wird ebenfalls unterst�tzt.}
+\end{quote}
+
+
+\subsubsection{Einige kurze Beispiele}
+
+Sie m�chten vielleicht~\ldots{}
+
+\begin{itemize}
+\item [\ldots]\textbf{einfach nur eine Gruppe anlegen und ihr einige Eintr�ge
+zuordnen}
+
+
+Vergewissern Sie sich, dass die Gruppenansicht eingeschaltet ist.
+Dr�cken Sie auf den Button \menu{Neue Gruppe}, geben einen Namen
+f�r die Gruppe ein und dr�cken \menu{OK}. Sie k�nnen alle Einstellungen
+auf ihren Standardwerten belassen. Jetzt w�hlen Sie die Eintr�ge aus,
+die der Gruppe zugeordnet werden sollen, und ziehen diese mit der
+Maus auf die Gruppe oder w�hlen \menu{Zu Gruppe hinzuf�gen} aus dem
+Kontextmen�. Jetzt k�nnen Sie die Gruppe anklicken, um sich ihren
+Inhalt anzeigen zu lassen (das sollten die Eintr�ge sein, die Sie
+gerade hinzugef�gt haben).
+
+\item [\ldots]\textbf{das Feld} \textbf{\emph{keywords}} \textbf{benutzen,
+um die Eintr�ge zu gruppieren}
+
+
+Stellen Sie sicher, dass die Gruppenansicht aktiviert ist. Dr�cken
+Sie auf den Button \menu{Neue Gruppe}, geben einen Namen f�r die
+Gruppe ein und w�hlen die Option \menu{Dynamisches Gruppieren der Eintr�ge anhand eines Stichworts in einem Feld}.
+Geben Sie das Stichwort, nach dem gesucht werden soll, ein und dr�cken
+\menu{OK}. Jetzt k�nnen Sie die Gruppe anklicken, um sich ihren Inhalt
+anzeigen zu lassen (das sollten alle Eintr�ge sein, deren \emph{keywords}-Feld
+das Stichwort enth�lt, das Sie angegeben haben).
+
+\item [\ldots]\textbf{einen frei w�hlbaren Suchausdruck verwenden, um eine
+Gruppe zu definieren}
+
+
+Stellen Sie sicher, dass die Gruppenansicht aktiviert ist. Dr�cken
+Sie auf den Button \menu{Neue Gruppe}, geben einen Namen f�r die
+Gruppe ein und w�hlen die Option \menu{Dynamisches Gruppieren der Eintr�ge anhand eines beliebigen Suchausdrucks}.
+Geben Sie \texttt{author=smith} als Suchausdruck ein (ersetzen Sie
+\texttt{smith} mit einem Namen, der wirklich in Ihrer Datei vorkommt)
+und klicken \menu{OK}. Jetzt k�nnen Sie die Gruppe anklicken, um
+sich ihren Inhalt anzeigen zu lassen (das sollten alle Eintr�ge sein,
+deren \emph{author}-Feld den Namen beinhaltet, den Sie angegeben haben).
+
+\item [\ldots]\textbf{mehrere Gruppen kombinieren }
+
+
+Erstellen sie zwei unterschiedliche Gruppen (z.\,B. so wie oben beschrieben).
+Klicken Sie auf den Button \menu{Einstellungen} in der Gruppenansicht
+und w�hlen \menu{Vereinigung}. Jetzt w�hlen Sie beide Gruppen aus
+(dazu klicken Sie auf eine Gruppe und anschlie�end bei gedr�ckter
+STRG-Taste auf die andere Gruppe). Sie sollten jetzt alle Eintr�ge
+sehen, die in einer der beiden Gruppen aufgef�hrt sind. Klicken Sie
+noch einmal auf \menu{Einstellungen} und w�hlen \menu{Schnittmenge}
+aus. Nun sollten Sie nur die Eintr�ge sehen, die in beiden Gruppen
+enthalten sind (das k�nnen auch keine sein, oder aber genau dieselben
+Eintr�ge wie zuvor, sofern beide Gruppen dieselben Eintr�ge enthalten).
+
+\item [\ldots]\textbf{sehen, welche Gruppen sich �berschneiden}
+
+
+Mit \jabref k�nnen Sie ganz einfach herausfinden, welche Gruppen
+sich mit den aktuell ausgew�hlten Gruppen �berschneiden (d.\,h. welche
+Gruppen zumindest einen Eintrag enthalten, der auch in der aktuell
+ausgew�hlten Gruppe ist). Klicken Sie auf \menu{Einstellungen} und
+aktivieren die Option \menu{Sich �berschneidende Gruppen markieren}.
+W�hlen Sie dann eine Gruppe, die sich mit anderen �berschneidet. Diese
+anderen Gruppen sollten nun markiert sein.
+
+\end{itemize}
+
+\subsubsection{Arten von Gruppen}
+
+In \jabref gibt es vier verschiedene Arten von Gruppen:
+
+\begin{enumerate}
+\item Die Gruppe \emph{Alle Eintr�ge}, die~-- wie der Name vermuten l�sst~--
+alle Eintr�ge beinhaltet, ist immer vorhanden und kann weder ver�ndert
+noch gel�scht werden.
+\item \emph{Statische Gruppen} verhalten sich wie Ordner auf einer Festplatte
+und beinhalten nur die Eintr�ge, die Sie ihnen explizit zuweisen.
+\item \emph{Dynamische Gruppen basierend auf einem Stichwort} beinhalten
+Eintr�ge, die in einem bestimmten \bibtex{}-Feld (z.\,B. \emph{keywords})
+ein bestimmtes Stichwort (z.\,B. \emph{elektrisch}) aufweisen. Diese
+Methode ben�tigt kein manuelles Zuweisen der Eintr�ge, sondern nutzt
+die bereits in der Datei vorhandenen Informationen. Wenn alle Eintr�ge
+in Ihrer Datenbank passende Stichw�rter haben, k�nnte diese Art von
+Gruppe die beste Wahl f�r Sie sein.
+\item \emph{Dynamische Gruppen basierend auf einer freien Suche} beinhalten
+Eintr�ge, die mit einem bestimmten Suchausdruck �bereinstimmen. Dabei
+wird dieselbe Syntax verwendet wie beim Suchen (siehe Abschnitt~\ref{SearchHelp}).
+Diese Syntax (die auf S.\,\pageref{SearchHelp_advanced} genauer
+beschrieben wird) unterst�tzt logische Operatoren (AND, OR, NOT) und
+erlaubt es, in einem oder mehreren \bibtex{}-Feldern zu suchen. Dadurch
+ist eine flexiblere Definition von Gruppen m�glich als mit einer Stichwortsuche
+(z.\,B. \texttt{author=smith AND title=elektrisch}).
+\end{enumerate}
+Jede Gruppe, die Sie erstellen, ist von einer der drei letztgenannten
+Arten. Der Dialog \menu{Gruppe bearbeiten}, der mit einem Doppelklick
+auf eine Gruppe aufgerufen wird, zeigt eine kurze Beschreibung der
+ausgew�hlten Gruppe.
+
+
+\subsubsection{Gruppenstrukturen, Erstellen und L�schen von Gruppen}
+
+Die Gruppen sind~-- vergleichbar mit Datei-Ordnern~-- in einer Baumansicht
+strukturiert, in der die Gruppe \emph{Alle Eintr�ge} das Stammelement
+ist. Mit einem Rechtsklick auf eine Gruppe k�nnen Sie dem Baum eine
+neue Gruppe hinzuf�gen, entweder auf derselben Ebene wie die ausgew�hlte
+Gruppe oder als ihre Untergruppe. Der Button \menu{Neue Gruppe} erzeugt
+eine neue Untergruppe der Gruppe \emph{Alle Eintr�ge}, egal ob Sie
+gerade Gruppen ausgew�hlt haben oder nicht. Im Kontextmen� k�nnen
+Sie auch Gruppen und\slash{}oder Untergruppen l�schen, Untergruppen
+alphabetisch sortieren oder Gruppen an eine andere Stelle des Baums
+verschieben. Letzteres k�nnen Sie auch mit Drag\,\&\,Drop machen,
+allerdings mit der Einschr�nkung, dass bei Drag\,\&\,Drop die Reihenfolge
+der Untergruppen einer Gruppe nicht ver�ndert werden kann.
+
+Die Funktionen \menu{R�ckg�ngig} und \menu{Wiederholen} werden f�r
+alle Bearbeitungsschritte unterst�tzt.
+
+
+\paragraph{Statische Gruppen}
+
+Statische Gruppen werden nur durch manuelles Zuweisen von Eintr�gen
+>>gef�ttert<<. Nachdem Sie eine statische Gruppe erstellt haben,
+w�hlen Sie die Eintr�ge aus, die Sie ihr zuweisen wollen, und nutzen
+entweder Drag\,\&\,Drop oder das Kontextmen� in der Tabelle, um
+die Zuweisung durchzuf�hren. Um Eintr�ge aus einer Gruppe zu entfernen,
+w�hlen Sie sie aus und benutzen das Kontextmen� in der Tabelle. Es
+k�nnen keine weiteren Optionen angegeben werden.
+
+Diese Methode des Gruppierens setzt voraus, dass alle Eintr�ge einen
+eindeutigen \bibtex{}-Key haben. Im Falle von fehlenden oder doppelten
+\bibtex{}-Keys kann das Zuweisen der betreffenden Eintr�ge in k�nftigen
+Sitzungen nicht korrekt wiederhergestellt werden.
+
+
+\paragraph{Dynamische Gruppen}
+
+Der Inhalt einer dynamischen Gruppe wird von einer logischen Bedingung
+bestimmt. Nur Eintr�ge, die dieser Bedingung entsprechen, geh�ren
+zu dieser Gruppe. Diese Methode nutzt die bereits in der Datei vorhandenen
+Informationen und wird aktualisiert, sobald Sie Ver�nderungen in der
+Datei vornehmen. Es gibt zwei m�gliche Arten von Bedingungen:
+
+\begin{enumerate}
+\item Ein Feld nach einem Stichwort durchsuchen
+
+
+Diese Methode gruppiert Eintr�ge, bei denen ein bestimmtes \bibtex{}-Feld
+(z.\,B. \emph{keywords}) einen bestimmten Suchausdruck (z.\,B. \emph{elektrisch})
+enth�lt. Damit dies funktioniert, muss das Feld, nach dem sortiert
+wird, nat�rlich in jedem Eintrag vorhanden und sein Inhalt fehlerfrei
+sein. Das obige Beispiel w�rde alle Eintr�ge zu einer Gruppe zusammenfassen,
+die sich auf etwas Elektrisches beziehen. Benutzt man das Feld \emph{author},
+kann man sich Eintr�ge eines bestimmten Autors gruppieren lassen,
+usw. Die Suche ist als reine Textsuche oder mit einem regul�ren Ausdruck
+m�glich. Im ersten Fall erlaubt \jabref das manuelle Zuweisen zu
+und Entfernen aus einer Gruppe; dazu f�gt \jabref den Suchausdruck
+dem entsprechenden Feld zu bzw. entfernt ihn daraus. Das macht nur
+f�r das Feld \emph{keywords} oder f�r selbstdefinierte Felder Sinn,
+aber offensichtlich nicht f�r Felder wie \emph{author} oder \emph{year}.
+
+\item Einen freien Suchausdruck verwenden
+
+
+Diese Vorgehensweise ist ganz �hnlich wie die eben beschriebene, aber
+statt nur ein Feld nach einem Suchausdruck zu durchsuchen, kann hierbei
+die Syntax der Suche (siehe S.\,\pageref{SearchHelp_advanced}) angewendet
+werden, die logische Operatoren (AND, OR, NOT) und die Suche in mehreren
+Feldern gleichzeitig unterst�tzt. So fasst z.\,B. die Suchanfrage
+\texttt{keywords=Regression AND NOT keywords=linear} Eintr�ge, die
+sich mit nicht-linearer Regression besch�ftigen, zu einer Gruppe zusammen.
+
+\end{enumerate}
+In der Gruppenansicht werden dynamische Gruppen standardm��ig \emph{kursiv}
+dargestellt. Dies kann unter \menu{Optionen} \msep{} \menu{Einstellungen}
+\msep{} \menu{Gruppen} abgestellt werden.
+
+
+\paragraph{Hierarchischer Kontext}
+
+Standardm��ig ist eine Gruppe \emph{unabh�ngig} von ihrer Position
+im Gruppenbaum. Ist eine Gruppe ausgew�hlt, wird nur der Inhalt dieser
+Gruppe angezeigt. Es ist jedoch~-- besonders beim Verwenden dynamischer
+Gruppen~-- oft n�tzlich, eine Untergruppe zu erstellen, die \emph{ihre
+Obergruppe einbezieht}. Wenn diese Untergruppe ausgew�hlt wird, werden alle Eintr�ge dieser
+Gruppe und ihrer Obergruppe angezeigt. Erstellen Sie z.\,B. eine
+Obergrupe, die Eintr�ge mit dem Stichwort \emph{Verteilung} enth�lt,
+sowie eine einbeziehende Untergruppe mit Eintr�gen, die das Stichwort
+\emph{Gau�} enthalten. Wenn Sie nun die Untergruppe ausw�hlen, werden
+alle Eintr�ge angezeigt, die beiden Bedingungen entsprechen, also
+alle, die mit Gau�'scher Verteilung zu tun haben. Indem Sie nun eine
+weitere Untergruppe f�r \emph{Laplace} anlegen, die dieselbe Obergruppe
+einbezieht, k�nnen Sie die Gruppierung einfach erweitern. Im Gruppenbaum
+haben solche Gruppen, die ihre Obergruppen einbeziehen, ein spezielles
+Icon. (Dieses Verhalten kann in den Einstellungen abgestellt werden.)
+
+Das logische Gegenst�ck zu einer solchen einbeziehenden Untergruppe
+ist eine Gruppe, die \emph{ihre Untergruppen ber�cksichtigt}.
+Wird sie ausgew�hlt, werden nicht nur die Eintr�ge dieser Gruppe,
+sondern auch diejenigen aller Untergruppen angezeigt. Im Gruppenbaum
+hat auch diese Art von Gruppen ein spezielles Icon. (Dieses Verhalten
+kann in den Einstellungen abgestellt werden.)
+
+
+\subsubsection{Eintr�ge einer Gruppe anzeigen, mehrere Gruppen kombinieren}
+
+Wenn Sie eine Gruppe ausw�hlen, werden die Eintr�ge, die dieser Gruppe
+zugeordnet sind, hervorgehoben und~-- je nach Einstellung (die mit
+einem Klick auf den \menu{Einstellungen}-Button vorgenommen werden
+kann)~-- an den Anfang der Tabelle verschoben und\slash{}oder ausgew�hlt.
+Diese Optionen entsprechen denen f�r die normale Suche (siehe Abschnitt~\ref{SearchHelp}).
+
+Wenn Sie meherere Gruppen ausw�hlen (indem Sie die STRG-Taste gedr�ckt
+halten und mehrere Gruppen anklicken), wird~-- je nach Einstellung~--
+entweder die Vereinigung oder die Schnittmenge ihrer Inhalte angezeigt.
+Damit k�nnen mehrere Bedingungen schnell miteinander kombiniert werden.
+Ein Beispiel: Wenn Sie eine statische Gruppe namens \emph{Sehr wichtig}
+haben, in der alle sehr wichtigen Eintr�ge sind, k�nnen Sie sich die
+sehr wichtigen Eintr�ge jeder anderen Gruppe anzeigen lassen, indem
+Sie beide Gruppen ausw�hlen (dazu muss \menu{Schnittmenge} in den
+Einstellungen aktiviert sein).
+
+
+\subsubsection{Gruppen und Suche}
+
+Wenn der Inhalt einer oder mehrerer Gruppen angezeigt wird, k�nnen
+Sie eine Suche innerhalb dieser Eintr�ge durchf�hren. Benutzen Sie
+dazu die normalen Suchfunktionen (siehe Abschnitt~\ref{SearchHelp}).
+
+
+\subsubsection{Sich �berschneidende Gruppen markieren}
+
+Der \menu{Einstellungen}-Button bietet eine Option zum Markieren
+von sich �berschneidenden Gruppen. Wenn diese Option aktiviert ist
+und Sie eine (oder mehrere) Gruppe(n) ausw�hlen, werden alle Gruppen
+markiert, die mindestens einen Eintrag enthalten, der auch der ausgew�hlten
+Gruppe zugeordnet ist. Damit k�nnen Sie schnell �berschneidungen zwischen
+den Eintr�gen verschiedener Gruppen erkennen. Sie k�nnten beispielsweise
+eine Gruppe mit dem Namen \emph{lesen} erstellen, die alle Eintr�ge
+enth�lt, die sie lesen wollen. Sobald Sie nun eine Gruppe ausw�hlen,
+wird die Gruppe \emph{lesen} markiert, sofern die ausgew�hlte Gruppe
+Eintr�ge enth�lt, die Sie noch lesen wollten.
+
+
+\subsubsection{Erweiterte Funktionen}
+
+Wenn Sie sich mit dem oben beschriebenen Gruppenkonzept vertraut gemacht
+haben, k�nnten die folgenden erweiterten Funktionen n�tzlich sein.
+
+
+\paragraph{Dynamische Gruppen automatisch erstellen}
+
+Mit einem Klick auf den Button \menu{Automatisch Gruppen f�r die Datei anlegen}
+k�nnen Sie ganz schnell passende Gruppen f�r Ihre Datei erzeugen.
+Diese Funktion sammelt alle W�rter eines bestimmten Felds Ihrer Wahl
+und erstellt eine Gruppe f�r jedes Wort. Das ist zum Beispiel n�tzlich,
+wenn Ihre Datei geeignete Stichworte f�r alle Eintr�ge enth�lt. Mit
+dem automatischen Erstellen von Gruppen basierend auf dem Feld \emph{keywords}
+k�nnen Sie also ohne gro�en Aufwand ein Grundger�st von Gruppen anlegen.
+
+Sie k�nnen auch Zeichen angeben, die ignoriert werden sollen, z.\,B.
+Kommas, die zwischen einzelnen Stichworten stehen. Diese werden als
+Worttrenner behandelt und nicht als Teile des Wortes selbst. Dieser
+Schritt ist wichtig, damit kombinierte Stichworte wie etwa \emph{Gau�'sche
+Verteilung} als semantische Einheit interpretiert werden k�nnen. (Sie
+k�nnen diese Option allerdings nicht verwenden, um ganze W�rter zu
+ignorieren. Sie m�ssen stattdessen die Gruppen, die Sie nicht wollen,
+nach dem automatischen Erstellen von Hand l�schen.)
+
+
+\paragraph{Ansicht aktualisieren}
+
+Der \menu{Aktualisieren}-Button in der Gruppenansicht aktualisiert
+die Tabelle in Bezug auf die aktuell ausgew�hlten Gruppen. Normalerweise
+erfolgt dies automatisch, aber in seltenen F�llen (z.\,B. nach einem
+R�ckg�ngig- oder Wiederholen"=Vorgang, der mit Gruppen zusammenh�ngt)
+ist ein h�ndisches Aktualisieren n�tig.
+
+
+\paragraph{Einbeziehende Unter- und Obergruppen mischen}
+
+Ist eine einbeziehende Gruppe die Untergruppe von einer Gruppe,
+die ihre Untergruppen ber�cksichtigt~-- hat sie also sozusagen Geschwister~--, 
+dann werden diese Geschwister ignoriert,
+sobald die einbeziehende Gruppe ausgew�hlt wird.
+
+
+\subsection{Markieren von Eintr�gen}
+\label{MarkingHelp}
+
+\begin{quote}
+\emph{Mit der Tastenkombination STRG-M k�nnen
+Sie Eintr�ge markieren und diese Markierung mit STRG-SHIFT-M wieder
+aufheben. Diese Aktionen sind auch im Men� \menu{Bearbeiten} zu finden.}
+\end{quote}
+Das Markieren ist nicht dasselbe wie das Ausw�hlen eines Eintrags.
+Markierte Eintr�ge verhalten sich in zweierlei Hinsicht anders als
+die restlichen Eintr�ge:
+
+\begin{enumerate}
+\item Markierte Eintr�ge werden immer mit einem gelben Hintergrund in der
+Tabelle angezeigt.
+\item Markierte Eintr�ge werden an den Anfang der Eintragsliste verschoben,
+falls Ihre Tabelle nicht nach Gruppen oder aufgrund einer Suche sortiert
+ist.
+\end{enumerate}
+Wenn Sie Ihre Datei speichern, werden die Markierungen beibehalten.
+Das Markieren von Eintr�gen ist z.\,B. n�tzlich, wenn Sie verschiedene
+Suchvorg�nge durchf�hren wollen, ohne das erste Suchergebnis zu verlieren,
+oder wenn Sie sich merken wollen, welche Artikel oder B�cher Sie noch
+einmal genauer ansehen m�ssen.
+
+
+\subsection{\texorpdfstring{String"=Editor}{String-Editor}}
+\label{StringEditorHelp}
+
+\begin{quote}
+\emph{Zugriff �ber das Men� \menu{BibTeX}} \msep{} \emph{\menu{Strings bearbeiten}
+oder durch Klick auf die Schaltfl�che \menu{Strings bearbeiten}.}
+\end{quote}
+\emph{Strings} sind das \bibtex{}-�quivalent zu Konstanten in einer
+Programmiersprache. Jeder String wird durch einen eindeutigen \emph{Namen}
+und einen \emph{Inhalt} festgelegt. Der Name kann an anderer Stelle
+in der Datei benutzt werden, um den Inhalt wiederzugeben.
+
+Ein Beispiel: Wenn viele Eintr�ge aus einer Zeitschrift stammen, deren
+Abk�rzung schwer zu behalten ist, wie etwa >>J. Theor. Biol.<< (Journal
+of Theroretical Biology), k�nnte ein String mit dem Namen >>JTB<<
+angelegt werden, um den Namen der Zeitschrift zu repr�sentieren. Statt
+nun in jedem Eintrag den exakten Namen der Zeitschrift einzutragen,
+gen�gt die Zeichenfolge \texttt{\#JTB\#} im Feld \emph{journal}, und
+es ist sichergestellt, dass der Name jedesmal in identischer Schreibweise
+ausgegeben wird.
+
+Der Verweis auf einen String kann an jeder Stelle eines Feldes erscheinen, 
+wobei der Name des Strings immer von einem Paar \texttt{\#}-Zeichen
+eingeschlossen werden muss. Diese Syntax gilt nur f�r \jabref und
+weicht ein wenig von der \bibtex{}-Syntax ab, die erzeugt wird, wenn
+Sie Ihre Datei speichern. Strings k�nnen f�r alle Standard-\bibtex{}-Felder verwendet werden.
+Unter \menu{Optionen \msep{} Einstellungen \msep{} Allgemein} k�nnen Sie im Bereich \menu{Datei} festlegen, ob Strings auch in Nicht-Standard-Feldern benutzt werden d�rfen. In diesem Fall k�nnen Sie Felder bestimmen, die von der Aufl�sung der Strings ausgenommen werden; hierbei wird empfohlen, das Feld \texttt{url} und andere Felder anzugeben, die das Zeichen \texttt{\#} enthalten k�nnen und die von \bibtex\slash\LaTeX{} verarbeitet werden k�nnen.
+
+In derselben Weise kann man auch im Inhalt eines Strings auf einen
+anderen String verweisen, vorausgesetzt, dass der String, auf den
+verwiesen wird, bereits \emph{vorher} definiert ist.
+
+W�hrend die Reihenfolge der Strings in Ihrer \bibtex{}-Datei in einigen
+F�llen wichtig ist, brauchen Sie sich bei der Benutzung von \jabref
+dar�ber keine Gedanken zu machen. Die Strings werden in alphabetischer
+Reihenfolge im String-Editor aufgelistet und in derselben Reihenfolge
+gespeichert, au�er wenn eine andere Reihenfolge von \bibtex{} verlangt
+wird.
+
+\subsection{Abk�rzung von Zeitschriftentiteln}
+\label{JournalAbbreviations}
+\begin{quote}
+\emph{Diese Funktion kann unter \menu{Optionen \msep{} Abk�rzungen der Zeitschriften verwalten} eingestellt werden.}
+\end{quote}
+\jabref kann automatisch zwischen Zeitschriftentiteln in abgek�rzter und ausf�hrlicher Form hin- und herschalten, sofern die Titel in einer Ihrer Zeitschriftenlisten enthalten ist. Sie k�nnen mehrere dieser Listen benutzen, die Sie als externe Textdateien anlegen.
+
+\subsubsection{Benutzungshinweise}
+
+Die Abk�rzung von Zeitschriftentiteln k�nnen Sie vom Eintragseditor oder vom Men� \menu{Extras} aus ein- und ausschalten. Im Eintragseditor benutzen Sie dazu den Button \menu{Abk�rzung an-/abschalten} neben dem \emph{Journal}-Feld. Es wird zwischen drei Modi hin- und hergeschaltet:
+\begin{itemize}
+    \item Kompletter Name, z.\,B. ">Aquacultural Engineering"<
+    \item \textls{ISO}-Abk�rzung, z.\,B. ">Aquacult. Eng."<
+    \item \textls{MEDLINE}-Abk�rzung, z.\,B. ">Aquacult Eng"<
+\end{itemize}
+Falls der Zeitschriftentitel sich nicht in Ihren Zeitschriftenlisten findet, wird das Feld nicht ver�ndert.
+
+Um die Zeitschriftentitel mehrerer Eintr�ge auf einmal zu konvertieren, k�nnen Sie eine beliebige Anzahl von Eintr�gen ausw�hlen und im Men� \menu{Extras} einen der Eintr�ge \menu{Zeitschriftentitel abk�rzen (ISO)}, \menu{Zeitschriftentitel abk�rzen (MEDLINE)} und \menu{Abk�rzung der Zeitschriften aufheben} w�hlen.
+Diese drei Aktionen sorgen daf�r, dass bei allen ausgew�hlten Eintr�gen die Zeitschriftentitel, die in den Zeitschriftenlisten gefunden werden konnten, abgek�rzt oder komplett ausgeschrieben werden.
+
+\subsubsection{Zeitschriftenlisten verwalten}
+
+Sie k�nnen mehrere Zeitschriftenlisten als externe Textdateien benutzen, die mit \jabref verlinkt sind. Die prim�re Liste kann in \jabref selbst verwaltet werden.
+
+\paragraph{Ihre pers�nliche Zeitschriften-Abk�rzungsliste}
+
+Ihre pers�nliche Liste verwalten Sie im oberen Teil des Dialogs \menu{Abk�rzung der Zeitschriftentitel}.
+W�hlen Sie \menu{Neue Datei} und geben einen Dateinamen ein oder klicken auf den \menu{Durchsuchen}-Button. Wenn Sie bereits eine Datei haben, die Sie als Grundlage nehmen wollen, w�hlen Sie stattdessen \menu{Bestehende Datei} und benutzen den \menu{Durchsuchen}-Button zum Ausw�hlen dieser Datei. Die Tabelle zeigt dann den Inhalt der Liste, die Sie ausgew�hlt haben.
+
+Sie k�nnen mit Hilfe der \menu{+} und \menu{--} Buttons an der rechten Seite Eintr�ge hinzuf�gen oder entfernen. F�r jeden Eintrag m�ssen Sie den vollst�ndigen Zeitschriftentitel und die ISO-Abk�rzung angeben (z.\,B. ">Aquacultural Engineering"< und ">Aquacult. Eng."<). Mit einem Doppelklick auf die Tabellenzeile k�nnen Sie die Eintr�ge bearbeiten.
+
+Sobald Sie auf \menu{OK} klicken (oder wenn Sie eine bestehende Datei ausgew�lt haben), enth�lt die Tabelle mindestens eine Zeile. Der Tabelleninhalt wird in die ausgew�hlte Datei geschrieben und die Zeitschriftenliste von \jabref wird aktualisiert.
+
+\paragraph{Externe Zeitschriftenlisten}
+
+Zus�tzlich zu Ihrer pers�nlichen Liste k�nnen Sie mehrere externe Listen verlinken. Diese Verkn�pfungen werden im unteren Teil des Dialogs \menu{Abk�rzung der Zeitschriftentitel} verwaltet. Externe Listen sind den pers�nlichen Listen �hnlich~-- der einzige Unterschied ist, dass Sie nicht mit \jabref selbst verwaltet werden k�nnen.
+
+Um eine externe Liste hinzuzuf�gen, klicken Sie zun�chst auf den \menu{+} Knopf, falls n�tig (das f�gt eine weitere Zeile hinzu). Dann benutzen Sie entweder den \menu{Durchsuchen}- oder den \menu{Herunterladen}-Button.
+    \begin{itemize}
+    \item Mit dem \menu{Durchsuchen}-Knopf k�nnen Sie eine auf Ihrem Computer bestehende Datei ausw�hlen.
+    \item Mit dem \menu{Herunterladen}-Knopf k�nnen Sie eine Liste aus dem Internet herunterladen, indem Sie einen URL angeben. Die Datei wird auf Ihrem Computer gespeichert und mit \jabref verlinkt.
+    Der URL ist standardm��ig die Adresse einer Zeitschriftenliste auf der \jabref-Homepage. Diese Liste ist unvollst�ndig, wird in Zukunft aber ausgebaut.
+    \end{itemize}
+Jeder Eintrag in Ihrer pers�nlichen Liste �berschreibt einen Eintrag mit demselben vollst�ndigen Zeitschriftentitel in einer Ihrer externen Listen. In �hnlicher Weise werden die externen Listen in der Reihenfolge, wie sie aufgelistet werden, abgearbeitet.
+
+\subsection{Wortauswahl verwalten}
+
+\label{ContentSelectorHelp}Diese Funktion erm�glicht es, eine Auswahl
+von oft benutzten W�rtern oder Phrasen zu speichern. In der Standardeinstellung
+ist sie f�r die Felder \emph{journal}, \emph{keywords} und \emph{publisher}
+aktiviert, aber Sie k�nnen die Funktion auch in anderen Feldern verwenden,
+indem Sie diese Felder im oberen Teil des Dialogs \menu{Extras} \msep{}
+\menu{Wortauswahl verwalten} hinzuf�gen.
+
+Die Wortauswahl gilt nur f�r die jeweilige Datei und wird daher zusammen
+mit den Literaturangaben in der \bibtex{}-Datei gespeichert. Jedes
+Feld mit Wortauswahl erh�lt im Eintrags-Editor einen gesonderten Bereich
+mit einer Auswahlliste und der Schaltfl�che \menu{Verwalten}. Wenn
+Sie die Auswahlliste mit der Maus anklicken, erscheint eine Liste
+der f�r dieses Feld verf�gbaren W�rter. Sobald Sie auf das gew�nschte
+Wort klicken, wird es in das entsprechende Feld geschrieben.
+
+Um ein neues Wort hinzuzuf�gen, schreiben Sie es einfach in das Auswahlfeld
+(�ber der Schaltfl�che \menu{Verwalten}) und dr�cken ENTER. Im Dialog
+\menu{Verwalten} k�nnen Sie hinzugef�gte W�rter auch wieder l�schen.
+
+
+\subsection{Import}
+
+\subsubsection{Import-Kontrollfenster}
+
+\label{ImportInspectionDialog}Beim Importieren neuer Eintr�ge aus
+einem unterst�tzten Format oder beim Herunterladen von Eintr�gen aus
+dem Internet werden diese Eintr�ge zun�chst im Import-Kontrollfenster
+gezeigt. Zu diesem Zeitpunkt wurden noch keine Eintr�ge zu einer ge�ffneten
+Datei hinzugef�gt.
+
+Im Kontrollfenster k�nnen Sie Eintr�ge entfernen, die nicht �bernommen
+werden sollen, und einige einfache Arbeiten durchf�hren wie etwa das
+Generieren von \bibtex{}-Keys f�r die Eintr�ge oder das Zuordnen von
+Eintr�gen zu Gruppen. Wenn Sie in eine bestehende Datei importieren,
+ist es oftmals leichter, diese Arbeiten durchzuf�hren, bevor die neuen
+Eintr�ge zwischen die bereits bestehenden sortiert wurden.
+
+\subsubsection[EndNote -> \jabref]{EndNote $\to$~\jabref}\label{subsubsec:endnote-jabref}
+
+EndNote hat einen Export-Stil \bibtex{}, der allerdings nicht alle
+Eintragstypen und Felder von \bibtex{} und auch nicht die zus�tzlich
+von \jabref genutzten Allgemeinen Felder (\emph{pdf}, \emph{owner},
+\emph{key} usw.) unterst�tzt. Falls Sie diese Felder nutzen wollen,
+verwenden Sie die EndNote Extras (\menu{Extras \msep{} EndNote Filter-Set entpacken}), extrahieren die Zip-Datei,
+die dabei erstellt wird und folgen den Anweisungen in der Datei \texttt{readme.txt}.
+
+\subsection{Export}
+\subsubsection[\jabref -> EndNote]{\jabref $\to$~EndNote}
+\label{EndnoteFilters}
+
+\begin{quote}
+\emph{\jabref kann Dateien so exportieren,
+dass EndNote sie lesen kann. Um diese Funktion zu nutzen, w�hlen Sie
+\menu{Datei \msep{} Exportieren}, dann bei \emph{Dateityp} \menu{Endnote} und
+geben den Namen der Export"=Datei an.}
+\end{quote}
+Der Standard"=Importfilter von EndNote kann nicht richtig mit mehreren
+Autoren oder Editoren umgehen. Es gibt zwei M�glichkeiten, um diese
+Schwierigkeit zu umgehen:
+
+\begin{enumerate}
+\item Benutzen Sie den eingebauten Filter und bessern Sie die Datei sp�ter
+aus.
+
+Um die Datei in EndNote zu �ffnen, erstellen Sie eine neue Datei oder
+�ffnen eine bestehende Datei in EndNote. Dann w�hlen Sie \menu{Datei}
+\msep{} \menu{Importieren}, klicken mit der Maus auf \menu{Datei w�hlen},
+w�hlen die aus \jabref exportierte Datei aus und dr�cken auf \menu{Ausw�hlen}.
+Anschlie�end dr�cken Sie auf \menu{Import Optionen} und w�hlen \menu{EndNote Import}.
+Mit einem Klick auf \menu{Importieren} starten Sie den Importvorgang.
+Anschlie�end gehen Sie zum Men�punkt \menu{Bearbeiten} \msep{} \menu{Text �ndern}
+und �ndern \emph{Any Field} in \emph{Author}. Geben Sie \lstinline{_and_}
+in das Suchfeld ein (die Unterstriche stehen f�r Leerzeichen) sowie ein RETURN-Zeichen
+in das Feld \emph{�ndern} (Option-Return unter Mac OS X, STRG-Return unter
+Windows XP). Dann klicken Sie auf \menu{�ndern}. Wiederholen Sie
+das Ganze f�r das Feld \emph{Secondary Author} (Zweiter Autor).
+
+\item Installieren Sie den \emph{EndNote Import from JabRef Filter}.
+
+Folgen Sie den Anweisungen im Abschnitt \nameref{EndNote_erweitert}. Um die Datei in
+EndNote zu �ffnen, erstellen Sie eine neue Datei oder �ffnen eine
+bestehende Datei in EndNote. Dann w�hlen Sie \menu{Datei} \msep{}
+\menu{Importieren}, klicken auf \menu{Datei w�hlen}, w�hlen die
+exportierte Datei aus und dr�cken auf \menu{Ausw�hlen}. Anschlie�end
+dr�cken Sie auf \menu{Import Optionen} und w�hlen \menu{EndNote Import from JabRef}.
+(Falls dieser Eintrag nicht erscheint, w�hlen Sie \menu{Weitere Filter}.
+Wenn er dann immer noch nicht erscheint, wurde der Filter nicht korrekt
+installiert.) Klicken Sie schlie�lich auf \menu{Importieren}, um
+den Importvorgang zu starten.
+
+\end{enumerate}
+Der EndNote Exportfilter ordnet \bibtex{}-Eintragstypen folgenden
+EndNote-Re\-fe\-renz\-ty\-pen zu:
+
+\medskip{}
+\begin{center}\begin{tabular}{ll}
+\textbf{\bibtex{}-Eintragstyp}&
+\textbf{Endnote-Referenztyp}\tabularnewline
+misc, other&
+Generic\tabularnewline
+unpublished&
+Manuscript\tabularnewline
+manual&
+Computer Program\tabularnewline
+article&
+Journal Article\tabularnewline
+book&
+Book\tabularnewline
+booklet&
+Personal Communication\tabularnewline
+inbook, incollection&
+Book Section\tabularnewline
+inproceedings&
+Conference Proceedings\tabularnewline
+techreport&
+Report\tabularnewline
+mastersthesis, phdthesis~&
+Thesis\tabularnewline
+\end{tabular} \end{center}
+\medskip{}
+
+\noindent In der Standardeinstellung geht der Exportfilter davon aus,
+dass Eintr�ge in den Feldern \emph{author} oder \emph{editor}, die
+geklammert sind, mehrere Autoren enthalten und ersetzt die Klammern
+durch ein angeh�ngtes Komma. Dadurch werden Eintr�ge, die \LaTeX{}-Befehle
+mit Klammern enthalten, als Eintrag mit mehreren Autoren gewertet
+und demzufolge unpassend formatiert.
+
+\subsubsection{Erweiterte Benutzung: EndNote Extras}
+
+\label{EndNote_erweitert}Einige Felder, die von \bibtex{} genutzt
+werden, geh�ren nicht zu EndNotes vorgegebenen Referenztypen. W�hrend
+der Import in \jabref und der Export nach \jabref ohne ein �ndern
+der Referenztypen funktioniert, werden die Feldnamen in EndNote nicht
+korrekt dargestellt (z.\,B. wird das PDF-Feld \emph{Custom 1} hei�en
+statt \emph{pdf}). Dar�ber hinaus k�nnen diese Felder bei neuen Eintr�gen
+in EndNote nicht genutzt werden, weil sie nicht im Eintragsdialog
+erscheinen. Der vorgegebene Importfilter von EndNote kann dar�berhinaus
+das Feld \emph{author} nicht richtig analysieren. Der \emph{EndNote
+Import from JabRef Filter} kann dies. Au�erdem erkennt dieser Filter
+ein Feld \texttt{endnotereftype}, das die vorgegebene Zuordnung �berschreibt.
+Um den Filter zu installieren, nutzen Sie die EndNote Extras
+(\menu{Extras \msep{} EndNote Filter-Set entpacken})
+und entpacken die Zip-Datei, die dabei erstellt wird. Dann folgen
+Sie den Angaben in der Datei \texttt{readme.txt}.
+
+\subsubsection{\jabref-Bibliographien in OpenOffice.org benutzen}
+\label{Export-OOo}
+\jabref kann Ihre Datei sowohl in das OpenOffice.org 1.1 \texttt{.sxc}"=Tabellenkalkulationsformat als auch in das OpenDocument \texttt{.ods}"=Tabellenkalkulationsformat, das von OpenOffice.org 2.0 benutzt wird, exportieren.
+
+In beiden F�llen besteht die exportierte Tabelle aus einem Arbeitsblatt, das die Eintr�ge in Reihen
+und die unterschiedlichen Felder in Spalten enth�lt. Die Reihenfolge und Benennung der Spalten ist kompatibel
+zu den Literaturverzeichnis-Funktionen von OpenOffice.org (OOo 1.1: \texttt{.sxc}, OOo 2.0: \texttt{.ods}).
+
+Je nach Ihrer Version von OpenOffice.org gibt es verschiedene
+    Vorgehensweisen, um JabRef zum Verwalten Ihrer bibliographischen
+    Datenbank zu benutzen:
+
+    \paragraph{Die exportierte Datei als bibliographische Datenbank in
+    OpenOffice.org 2.3 und 2.4 benutzen}
+
+    Mit folgenden Schritten k�nnen Sie eine aus \jabref exportierte
+    Tabelle als bibliographische Datenbank benutzen:
+
+  \begin{itemize}
+	  \item Exportieren Sie in \jabref Ihre Datei in das \texttt{.ods}-Format
+    \item �ffnen Sie OpenOffice.org Writer
+    \item W�hlen Sie \menu{Bearbeiten} \msep{} \menu{Datenbank austauschen}. Klicken Sie auf
+    \menu{Durchsuchen} und w�hlen die Datei, die Sie in das \texttt{.ods}-Format
+    exportiert haben.
+    \item Klicken Sie auf das \menu{+} vor dem Namen der Datenbank, anschlie�end
+    auf den angezeigten Dateinamen und schlie�lich auf den Knopf \menu{Festlegen}.
+    \item W�hlen Sie \menu{Extras} \msep{} \menu{Optionen} \msep{} \menu{OpenOffice.org Base} \msep{}
+    \menu{Datenbanken}. In diesem Fenster sollte die Datenbank, die Sie gerade
+    importiert haben, angezeigt werden. Die Standard-Datenbank f�r Bibliographien
+    von OOo sollte ebenfalls angezeigt werden (Bibliography).
+    \item Klicken Sie auf \menu{Bearbeiten} und �ndern Sie den Namen der Datenbank
+    \emph{Bibliography}, z.\,B. zu \emph{Bibliography-old} (denn OpenOffice.org
+    kann nicht mit mehreren bibliographischen Datenbanken arbeiten).
+    \item W�hlen Sie anschlie�end Ihre bibliographische Datenbank und benennen Sie sie um in
+    \emph{Bibliography} (achten Sie auf einen Gro�buchstaben am Anfang des Namens).
+  \end{itemize}
+    Nach diesen Schritten sollte Ihre bibliographische Datenbank zur Benutzung
+    mit OpenOffice.org bereit sein. Um das zu pr�fen, w�hlen Sie \menu{Einf�gen} \msep{}
+    \menu{Verzeichnisse} \msep{} \menu{Literaturverzeichniseintrag\ldots}. Im folgenden Dialog sollten
+    in der Dropdownliste (unter \menu{Kurzbezeichnung}) die \bibtex-Keys Ihrer
+    Datenbank erscheinen.
+
+\paragraph{Die exportierte Datei als Bibliographiedatenbank in OpenOffice 2.0, 2.1 oder 2.2 benutzen}
+Gehen Sie folgenderma�en vor, um eine Tabelle, die von \jabref exportiert wurde, als Bibliographiedatenbank in OpenOffice.org zu benutzen:
+
+\begin{itemize}
+\item Exportieren Sie Ihre Datenbank in das \texttt{.ods} -Format.
+\item Starten Sie OpenOffice.org.
+\item W�hlen Sie \menu{Extras} \msep{} \menu{Optionen} \msep{} \menu{OpenOffice.org Base} \msep{} \menu{Datenbanken}.
+\item Bearbeiten Sie die \emph{Bibliography}-Datenbank und �ndern ihren Namen z.\,B. in \emph{Bibliographie-alt}.
+\item Schlie�en Sie das Fenster \menu{Optionen} und gehen Sie zu \menu{Datei} \msep{} \menu{Neu} \msep{} \menu{Datenbank}.
+\item Dann w�hlen Sie \menu{Verbindung zu einer bestehenden Datenbank herstellen}, nehmen \menu{Tabellendokument} als
+    Datenbanktyp und w�hlen die \texttt{.ods}-Datei, die Sie exportiert haben.
+\item Klicken Sie auf \menu{Fertig stellen} und w�hlen den Namen \emph{Bibliography} im Speicherdialog.
+\end{itemize}
+Anschlie�end w�hlen Sie \menu{Extras} \msep{} \menu{Literaturdatenbank}. Ihre Datenbank sollte nun angezeigt werden.
+
+\paragraph{Eine exportierte Datei als Datenbank in OpenOffice 1.1.x benutzen}
+
+\begin{itemize}
+\item Exportieren Sie Ihre Datei in das \texttt{.sxc}-Format.
+\item Starten Sie OpenOffice.org.
+\item W�hlen Sie \menu{Extras} \msep{} \menu{Datenquellen}.
+\item W�hlen Sie die \emph{Bibliography}-Datei und �ndern ihren Namen beispielsweise in \emph{Bibliographie-alt}. 
+\item Dr�cken Sie \menu{Anwenden}.
+\item Klicken Sie \menu{Neue Datenquelle}. Ein neuer Eintrag erscheint. �ndern Sie den Namen zu \emph{Bibliography}.
+\item �ndern Sie den \menu{Dateityp} zu \menu{Tabelle}. Klicken Sie den \menu{\ldots}-Button in der Zeile \menu{Datenquellen URL}. W�hlen Sie die \texttt{.sxc}-Datei, die Sie exportiert haben.
+\item Klicken Sie auf \menu{OK}, um das Fenster \menu{Datenquellen} zu schlie�en.
+\end{itemize}
+Anschlie�end w�hlen Sie \menu{Extras} \msep{} \menu{Literaturdatenbank}.
+Ihre Datenbank sollte nun angezeigt werden.
+
+\subsubsection{Klartext-Import}
+
+\begin{quote}
+\emph{Sie k�nnen aus einfachen Text-Dateien oder der Zwischenablage
+einen Importvorgang starten, indem Sie \menu{BibTeX}} \msep{} \emph{\menu{Neuer Eintrag aus Klartext}
+oder die Tastenkombination STRG-SHIFT-N w�hlen.}
+\end{quote}
+Dieser Dialog erm�glicht das schnelle Einf�gen von Eintr�gen aus normalem
+Text. W�hlen Sie zun�chst aus, welcher Eintragstyp erstellt werden
+soll. F�gen Sie dann einfach Text aus der Zwischenablage ein (�ber das
+Kontextmen� im Textfeld mit der Wasserzeichenschrift >>Text einf�gen<<
+oder �ber den Button \menu{Einf�gen}). Alternativ k�nnen Sie �ber den Button
+\menu{Datei �ffnen} eine Datei ausw�hlen, um sie in den Dialog zu laden.
+
+Jetzt markieren Sie z.\,B. den Textbereich, der zum Titel des neuen
+Eintrags werden soll, und f�hren im rechten Teil des Dialogfensters
+im Bereich \menu{Verf�gbare BibTeX"=Felder} einen Doppelklick auf \emph{title} aus.
+So gehen Sie f�r alle weiteren Felder des neuen Eintrags vor. Sie
+k�nnen einem Feld nat�rlich auch mehrere Textbereiche zuordnen. Achten
+Sie dazu darauf, dass die Option \menu{anf�gen} aktiviert ist, ansonsten
+wird bei jedem neuen Zuweisen von Textbereichen das Feld �berschrieben
+(Option \menu{�berschreiben}).
+
+Bereits zugewiesene Textteile werden im Tab \menu{Importtext} blau
+hervorgehoben. Um zu kontrollieren, welche Textbereiche Sie einem
+bestimmten \bibtex{}-Feld zugewiesen haben, w�hlen Sie das Feld im
+rechten Bereich aus; der zugeordnete Text wird nun rot hervorgehoben.
+
+Sie k�nnen sich das Ergebnis des Importvorgangs jederzeit im Tab \menu{BibTeX"=Quelltext}
+des Importdialogs ansehen. Hier k�nnen keine �nderungen vorgenommen
+werden; das ist erst m�glich, sobald der Text tats�chlich importiert
+und ein neuer Eintrag angelegt wurde. Auf m�gliche Fehler werden Sie
+im Tab \menu{Hinweise und Warnungen} aufmerksam gemacht.
+
+Haben Sie alle Textstellen den gew�nschten \bibtex{}-Feldern zugewiesen,
+klicken Sie auf die Schaltfl�che \menu{�bernehmen}. Nun erstellt
+\jabref den neuen Eintrag, der allerdings noch keinen \bibtex{}-Key
+hat.
+
+\subsection{Links zu PDF- und \texorpdfstring{PS"=Dateien}{PS-Dateien}, URLs und DOIs}
+\label{ExternalFiles}
+
+\tip[Anmerkung: ]{Ab \jabref 2.3 gibt es ein verbessertes System f�r Links zu externen Dateien; siehe dazu den Abschnitt ">\nameref{FileLinks}"<.}
+
+\noindent Mit \jabref k�nnen Sie Ihre Eintr�ge mit
+den entsprechenden PDF- oder PS-Dateien, die sich auf Ihrem Computer
+befinden, verlinken. Ebenso ist es m�glich, Dateien im Internet �ber
+einen URL oder DOI zu verlinken.
+
+
+\subsubsection{Externe Betrachter einrichten}
+
+\jabref ben�tigt Informationen dar�ber, welche Programme es f�r
+PDF- und PS"=Dateien und Internetseiten benutzen soll. In der Standardeinstellung
+werden sie auf Werte gesetzt, die wahrscheinlich zu Ihrem Betriebssystem
+passen, so dass eine gute Chance besteht, dass Sie diese Werte nicht
+zu ver�ndern brauchen.
+
+\begin{quote}
+\emph{Um die Einstellungen der externen Programme zu �ndern, �ffnen
+Sie den Unterpunkt \menu{Externe Programme} im Dialog \menu{Optionen}}
+\msep{} \emph{\menu{Einstellungen}.}
+\end{quote}
+
+\subsubsection{Externe Dateien oder Links �ffnen}
+
+Es gibt verschiedene M�glichkeiten, wie man externe Dateien oder Internetseiten
+aus \jabref �ffnen kann. Im Eintrags-Editor k�nnen Sie einfach
+auf das Textfeld, das einen DOI oder URL enth�lt, doppelklicken. In
+der Tabellenansicht k�nnen Sie einen Eintrag ausw�hlen und die Men�eintr�ge
+(unter \menu{Extras}), die Tastenkombinationen (in der Standardeinstellung
+F4 f�r PDF/PS und F3 f�r DOI/URL) oder das Kontextmen� (mit der rechten
+Maustaste) benutzen, um die Datei oder Internetseite zu �ffnen. Schlie�lich
+k�nnen Sie auch auf ein PDF-, PS-, URL- oder DOI-Icon in der Tabelle
+klicken.
+
+In der Standardeinstellung zeigt die Tabellenansicht zwei Spalten
+mit Icons f�r die Eintr�ge, die mit externen Dateien oder URLs verlinkt
+sind. Beide Spalten k�nnen im Unterpunkt \menu{Tabellenansicht} des
+Dialogs \menu{Optionen} \msep{} \menu{Einstellungen} ausgeblendet
+werden. Die zweite Spalte zeigt Icons f�r PDF- oder PS-Dateien (nur
+PDF, wenn beide vorhanden sind), die dritte Spalte zeigt Icons f�r
+URL oder DOI (nur URL, wenn beide vorhanden sind).
+
+
+\subsubsection{Der Standard-Ordner f�r PDF-Dateien}
+
+PDF-Dateien erhalten von \jabref eine >>Spezialbehandlung<<,
+um das Verlinken mit den entsprechenden Eintr�gen so einfach wie m�glich
+zu gestalten. Um diese >>Spezialbehandlung<< nutzen zu k�nnen, m�ssen
+Sie im Unterpunkt \menu{Externe Programme} des Dialogs \menu{Optionen}
+\msep{} \menu{Einstellungen} einen Ordner als Standard-Ordner f�r
+Ihre PDF-Dateien angeben. Alle PDF-Dateien, die in diesem Ordner oder
+einem Unterordner gespeichert sind, werden mit einer relativen Pfadangabe
+referenziert, so dass Sie problemlos PDF-Verzeichnisse verschieben
+oder mit mehreren Benutzern von verschiedenen Netzwerkarbeitspl�tzen
+aus an derselben Datei arbeiten k�nnen.
+
+Wenn Sie Ihren PDF-Dateien dann noch Namen geben, die mit dem \bibtex{}-Key
+des entsprechenden Eintrags �bereinstimmen (abgesehen von der Dateiendung \texttt{.pdf}), 
+sucht \jabref in Ihrem Standard-PDF-Ordner und dessen
+Unterordnern nach der richtigen PDF-Datei. Sobald die korrekt benannte
+PDF-Datei sich dort befindet, klicken Sie auf die Schaltfl�che \menu{Auto}
+neben dem PDF-Feld im Eintrags-Editor. Wenn die PDF-Datei gefunden
+wird, wird das Feld entsprechend gesetzt.
+
+Wenn Sie eine PDF-Datei wie beschrieben benennen, k�nnen Sie sie auch
+�ffnen, ohne das PDF-Feld �berhaupt zu benutzen. Der Nachteil ist
+in diesem Fall allerdings, dass das PDF-Icon in der Tabellenansicht
+nicht angezeigt wird, solange das PDF-Feld leer bleibt.
+
+\subsubsection{Dateispezifische PDF- und PS-Verzeichnisse}
+
+Sie k�nnen f�r jede Datei eigene PDF- und PS-Verzeichnisse angeben \emph{(}\menu{Datei \msep{} Eigenschaften der Datei}\emph{)}. Diese Verzeichnisse ersetzen dann die Standardverzeichnisse.
+
+\subsubsection{Die Suche mit regul�ren Ausdr�cken f�r automatische Verkn�pfungen nutzen}
+\label{RegularExpressionSearch}
+
+Wenn Sie Dateinamen verwenden, die dem bibtexkey erg�nzt um die Dateiendung entsprechen, findet \jabref diese Dateien automatisch.
+
+Ab Version~2.2 ist mit Hilfe von regul�ren Ausdr�cken eine gr��ere Flexibilit�t beim Benennen der Dateien gew�hrleistet. In den meisten F�llen d�rfte das Standardverhalten bereits ausreichend sein.
+
+In den Einstellungen zu externen Programmen \emph{(}\menu{Optionen \msep{} Einstellungen \msep{} Externe Programme}\emph{)} findet sich eine Option ">Suche mit regul�rem Ausdruck benutzen"<. Wenn Sie diese Option aktivieren, k�nnen Sie f�r die Suche in PDF-Verzeichnissen einen eigenen regul�ren Ausdruck angeben.
+
+Die folgende Syntax wird verwendet:
+
+\begin{labeling}{MextensionM}
+  \item [\texttt{*}] Suche in allen direkten Unterverzeichnissen, NICHT im aktuellen Verzeichnis und in Unterverzeichnissen zweiter oder tieferer Ebene.
+  \item [\texttt{**}] Rekursive Suche in allen Unterverzeichnissen UND im aktuellen Verzeichnis.
+  \item [\texttt{.}] Das aktuelle Verzeichnis.
+  \item [\texttt{..}] Das Elternverzeichnis (eine Ebene h�her).
+  \item [\texttt{{[}title{]}}] Alle Ausdr�cke in eckigen Klammern werden durch den Inhalt des entsprechenden Felds ersetzt.
+  \item [\texttt{{[}extension{]}}] Wird durch die Dateiendung des Feldes, das Sie benutzen, ersetzt.
+  \item Anderer Text wird als regul�rer Ausdruck interpretiert. Aber Vorsicht: \emph{backslashes} m�ssen mit einem weiteren \emph{backslash} \emph{escaped} werden (\texttt{\textbackslash\textbackslash}), damit sie nicht mit Separatoren in Pfad-Angaben verwechselt werden.
+\end{labeling}
+Der Standard ist \lstinline{**/.*[bibtexkey].*\\.[extension]}. Damit wird in allen Unterverzeichnissen des Ordners der entsprechenden Dateiendung (z.\,B. das PDF-Verzeichnis) nach allen Dateien mit der richtigen Dateiendung gesucht, die den bibtexkey in ihrem Namen haben.
+
+\subsection{Links zu externen Dateien (ab Version 2.3)}
+\label{FileLinks}
+
+\jabref l�sst Sie Ihre Eintr�ge mit Dateien jeden Typs verlinken, die Sie auf Ihrem System gespeichert haben. Au�erdem sind Links zu Dokumenten im Internet in der Form eines URL oder eines DOI m�glich. Jedem Eintrag kann eine beliebige Anzahl von Datei-Links zugeordnet werden und jede verlinkte Datei kann schnell aus JabRef heraus ge�ffnet werden.
+
+Was \bibtex angeht, werden die Datei"=Links eines Eintrags in ein einzelnes Feld geschrieben. In \jabref erscheinen sie aber als editierbare Liste von Links, die im Eintrags"=Editor zug�nglich sind.
+
+\subsubsection{Einrichten der Dateitypen}
+
+F�r jeden Datei"=Link muss ein Dateityp gew�hlt werden, damit das richtige Programm zum �ffnen der Datei und das entsprechende Icon gefunden werden. Die Liste der Dateitypen k�nnen Sie einsehen und bearbeiten, indem Sie \menu{Optionen \msep Externe Dateitypen verwalten} w�hlen oder auf die Schaltfl�che \menu{Externe Dateitypen verwalten} im Bereich \menu{Externe Programme} des Einstellungs"=Dialogs klicken.
+
+Ein Dateityp besteht aus einem Namen, einem graphischen Icon, einer Dateierweiterung und einer Anwendung zum �ffnen der Dateien. Wenn Sie Windows benutzen, k�nnen Sie den Namen der Anwendung weglassen, wenn Sie das Standardprogramm verwenden wollen.
+
+\subsubsection{\texorpdfstring{Datei"=Links}{Datei-Links} zu einem Eintrag hinzuf�gen}
+
+Wenn bei den Allgemeinen Feldern (siehe Abschnitt~\ref{GeneralFields}) das Feld \texttt{file} eingetragen ist, k�nnen Sie die Liste der externen Links im \nameref{EntryEditorHelp} bearbeiten. Der Editor hat dann Schaltfl�chen zum Einf�gen, Bearbeiten, L�schen und Sortieren der Links.
+
+Eine Datei kann mit Hilfe der \menu{Auto}"=Schaltfl�che automatisch verlinkt werden, falls sie in Ihrem Dateiverzeichnis (\menu{Einstellungen \msep Externe Programme \msep Links zu externen Dateien \msep Hauptverzeichnis}) oder einem Unterordner liegt, eine Dateierweiterung hat, die \jabref bekannt ist, und einen Namen hat, der mit dem BibTeX"=Key des Eintrags �bereinstimmt. Die Regeln, nach denen Dateinamen mit BibTeX"=Keys automatisch verkn�pft werden, k�nnen eingestellt werden unter \ [...]
+
+Um eine Datei herunterzuladen und mit einem Eintrag zu verlinken, benutzen Sie die Schaltfl�che \menu{Download} im Eintrags"=Editor. Es erscheint ein Dialog, in dem Sie den URL eingeben m�ssen. Die Datei wird dann in Ihr Hauptverzeichnis gespeichert, anhand des BibTeX-Keys benannt und mit dem Eintrag verkn�pft.
+
+\subsubsection{Externe Dateien �ffnen}
+
+Es gibt mehrere M�glichkeiten, externe Dateien oder Internetseiten zu �ffnen. In der Tabellenansicht k�nnen Sie einen Eintrag ausw�hlen und mit dem Men�, einem Tastenk�rzel oder dem Kontextmen� den ersten externen Link �ffnen. Falls in der Tabellenansicht die Spalte \texttt{file} angezeigt wird (\menu{Einstellungen \msep Tabellenansicht \msep Spezielle Spalten \msep Datei"=Spalten anzeigen}), k�nnen Sie auch auf das Icon klicken, um den ersten Link eines Eintrags zu �ffnen. Um weitere Li [...]
+
+\subsection{XMP-Metadaten}
+\label{XMPHelp}
+
+XMP ist ein Standard, der von Adobe Systems entwickelt wurde, um Metadaten (Daten, die Informationen �ber andere Daten enthalten) in Dateien zu speichern. Ein bekanntes Beispiel f�r Metadaten sind ID3-Tags, die zur Beschreibung von K�nstlern, Albumtiteln und Liednamen einer MP3-Datei verwendet werden. Mit Hilfe von Metadaten k�nnen MP3-Dateien unabh�ngig von ihrem Dateinamen identifiziert und z.B. von MP3-Playern ausgelesen und angezeigt werden.
+
+Mit der XMP-Unterst�tzung versucht das \jabref-Team, die Vorteile von Metadaten in die Welt der Literaturmanager einzuf�hren. Sie k�nnen \menu{XMP schreiben} im \menu{Allgemein}-Tab des Eintragseditors w�hlen und damit alle \bibtex{}"=Informationen in die verlinkte PDF-Datei schreiben. Wenn Sie diese PDF-Datei mit anderen austauschen, k�nnen diese die Datei in das \jabref-Fenster ziehen und haben damit alle Informationen zur Verf�gung, die Sie eingegeben haben.
+
+\subsubsection{Benutzung}
+
+Um die XMP-Funktionen in \jabref zu nutzen, gehen Sie folgenderma�en vor:
+
+\begin{itemize}
+  \item Zum \emph{Importieren einer einzelnen PDF-Datei mit Metadaten} w�hlen Sie \menu{Datei \msep{} Importieren in {[}neue{|}aktuelle{]} Datenbank} und im anschlie�enden Dialog als Dateiformat \menu{PDF mit XMP-Anmerkungen} aus. Sie k�nnen die PDF-Datei stattdessen auch mit der Maus auf das Hauptfenster von \jabref ziehen.
+  \item Um \emph{bibliographische Informationen in eine verlinkte PDF-Datei zu schreiben}, klicken Sie auf \menu{XMP schreiben} im \menu{Allgemein}-Tab des Eintragseditors (neben dem \emph{pdf}"=Feld).
+  \item Wenn Sie \emph{alle PDFs einer Datei mit Metadaten versehen} wollen, w�hlen Sie \menu{Extras \msep{} XMP-Metadaten in PDFs schreiben}.
+  \item Um zu �berpr�fen, ob das Schreiben der Metadaten funktioniert hat, �ffnen Sie die Datei in Adobe Acrobat und w�hlen \menu{Datei \msep{} Dokumenteigenschaften} und dann unter dem Reiter \menu{Beschreibung} die Schaltfl�che \menu{Zus�tzliche Metadaten}. Wenn Sie links ">Erweitert"< ausw�hlen, sollten Sie im rechten Teil des Dialogs einen Eintrag \texttt{http://jabref.sourceforge.net\slash bibteXMP} sehen, der die entsprechenden Metadaten enth�lt. Dies geht nur mit dem Vollprogramm  [...]
+  \item Wer kein Adobe Acrobat zur Verf�gung hat, kann stattdessen das Programm ">pdfinfo"<\footnote{Dieses Programm ist Teil von \href{http://www.foolabs.com/xpdf/}{Xpdf} und \href{http://poppler.freedesktop.org/}{Poppler}.} verwenden, um die XMP-Metadaten zu �berpr�fen. Rufen Sie dazu auf der Kommandozeile einfach \lstinline{pdfinfo -meta <PDF-Datei>} auf, dann werden die entsprechenden Metadaten angezeigt.
+\end{itemize}
+
+\subsubsection{bibteXMP Dateiformat}
+
+XMP nutzt zum Speichern der Daten eine Teilmenge des \emph{Resource Description Framework} (RDF). F�r \jabref wird ein neues Metadatenformat benutzt, das \bibtex{} sehr gut abbildet. Alle Felder und Werte werden in Knoten eines XML-Dokuments verwandelt. Nur Autoren und Herausgeber werden als \texttt{rdf:Seq}-Strukturen gespeichert, so dass die trennenden ">and"< weggelassen werden k�nnen. Alle Strings und crossrefs werden in den Metadaten aufgel�st.
+ 
+Das folgende einfache Minimal-Schema wird benutzt:
+\begin{itemize}
+  \item Der \bibtex{}-Key wird als \texttt{bibtexkey} gespeichert.
+  \item Der Eintragstyp wird als \texttt{entrytype} gespeichert.
+  \item \texttt{author} und \texttt{editor} sind kodiert als \texttt{rdf:Seq}, wobei die einzelnen Autoren und Herausgeber als \texttt{rdf:li}s dargestellt werden.
+  \item Alle anderen Felder werden unter ihrem Feld-Namen gespeichert.
+\end{itemize}
+
+Es folgt ein Beispiel:
+\begin{lstlisting}
+ at INPROCEEDINGS{CroAnnHow05,
+  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
+  title = {Effective work practices for floss development: A model and propositions},
+  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
+  year = {2005},
+  owner = {oezbek},
+  timestamp = {2006.05.29},
+  url = {http://james.howison.name/publications.html}
+}
+\end{lstlisting}
+
+wird umgewandelt in
+
+\begin{lstlisting}
+<rdf:Description xmlns:bibtex="http://jabref.sourceforge.net/bibteXMP/"
+    bibtex:bibtexkey="CroAnnHow05"
+    bibtex:year="2005"
+    bibtex:title="Effective work practices for floss development: A model and propositions"
+    bibtex:owner="oezbek"
+    bibtex:url="http://james.howison.name/publications.html"
+    bibtex:booktitle="Hawaii International Conference On System Sciences (HICSS)"
+    bibtex:timestamp="2006.05.29">
+        <bibtex:author>
+            <rdf:Seq>
+                <rdf:li>K. Crowston</rdf:li>
+                <rdf:li>H. Annabi</rdf:li>
+                <rdf:li>J. Howison</rdf:li>
+                <rdf:li>C. Masango</rdf:li>
+            </rdf:Seq>
+        </bibtex:author>
+    <bibtex:entrytype>Inproceedings</bibtex:entrytype>
+</rdf:Description>
+\end{lstlisting}
+
+Wenn Sie bibteXMP parsen m�chten, beachten Sie, dass in RDF Attribut-Wert-Paare auch als Knoten wiedergegeben werden k�nnen und vice versa.
+
+\subsubsection{Weiterf�hrende Links}
+
+Einige Links zu XMP und PDFs mit Anmerkungen (englisch):
+
+\begin{itemize}
+  \item James Howison's Blog \href{http://freelancepropaganda.com/themp/}{">Themp---Managing Academic Papers like MP3s"<}
+  \item \href{http://www.xml.com/pub/a/2004/09/22/xmp.html}{XML.com-Artikel} zu XMP
+  \item \href{http://jempbox.org}{JempBox} und \href{http://pdfbox.org}{PDFBox} von Ben Litchfield (Java libraries zum Zugriff auf die PDFs und die Metadaten)
+  \item Gute \href{http://episteme.arstechnica.com/eve/ubb.x/a/tpc/f/8300945231/m/377001889631}{Diskussion bei ArsTechnica} zum Management von PDFs.
+  \item \href{http://partners.adobe.com/public/developer/en/xmp/sdk/xmpspecification.pdf}{Adobe XMP Spezifikation}
+\end{itemize}
+
+\subsection{\jabref und Online-Datenbanken}
+
+\subsubsection{CiteSeer}
+
+\label{CiteSeerHelp}
+\tip[]{CiteSeer ist eine digitale Bibliothek und Suchmaschine f�r wissenschaftliche Literatur, vornehmlich zu den Bereichen Computer und Informatik.}
+Mit \jabref lassen sich Informationen zu einer bestimmten
+Literaturangabe aus der CiteSeer-Datenbank herunterladen. Um diesen
+Vorgang zu starten, f�gen Sie Ihrer Datei einen neuen Eintrag hinzu
+und belegen das Feld \emph{citeseerurl} mit einem Link zur entsprechenden
+Inhaltsseite auf CiteSeer. Das Feld \emph{citeseerurl} muss in einem
+der folgenden Formate eingegeben werden:
+
+\begin{lstlisting}
+http://citeseer.ist.psu.edu/DDDDDD[.html] % oder
+oai:CiteSeerPSU:DDDDDD                    % oder
+DDDDDD
+\end{lstlisting}
+wobei DDDDDD eine Ziffernfolge darstellt. Um diese Ziffernfolge f�r
+einen CiteSeer-Eintrag zu finden, gehen Sie auf die Dokumentseite
+der Literaturangabe des Formats \texttt{http://citeseer.ist.psu.edu/}\texttt{\emph{nameYearTitle}}\texttt{.html}
+und klicken den (Update)"=Link f�r diese Literaturangabe. Die URL
+f�r den Update-Link beinhaltet die numerische ID f�r diese Literaturangabe.
+
+Sobald Sie das Feld \emph{citeseerurl} belegt haben, k�nnen Sie die
+CiteSeer-Felder herunterladen, indem Sie \menu{BibTeX} \msep{} \menu{Felder von CiteSeer importieren}
+ausw�hlen. Achten Sie darauf, dass Sie die Zeile(n) ausgew�hlt haben,
+die Sie aktualisieren wollen.
+
+\paragraph{Eine Datei mit zitierenden Literaturangaben erzeugen}
+
+Mit einem Satz von Literaturangaben k�nnen Sie eine Liste der Dokumente
+erzeugen, die die einzelnen Literaturangaben ihrerseits zitieren. Dazu
+muss jede Literaturangabe der entsprechenden Datenbank-Datei ein
+ausgef�lltes citeseerurl-Feld besitzen, dessen Inhalt dem oben
+beschriebenen Format entspricht. Sie k�nnen diese Funktion nutzen, indem
+Sie \menu{Zitierende Literatur von CiteSeer abrufen} ausw�hlen.
+
+\subsubsection{Medline}
+\label{MedlineHelp}
+
+\tip[]{MEDLINE ist die wichtigste Datenbank der \emph{U.\,S. National Library of Medicine}. Sie enth�lt Literaturangaben von Zeitschriftenartikeln der Lebenswissenschaften, vornehmlich der Biomedizin.
+\jabref kann Literaturangaben der Medline"=Datenbank
+herunterladen. Um diese Funktion zu nutzen, w�hlen Sie \menu{Extras
+\msep{} Medline abrufen}, so dass der Medline-Dialog im linken
+Seitenfeld erscheint.}
+Es gibt zwei M�glichkeiten, die Auswahl der Eintr�ge vorzunehmen,
+die heruntergeladen werden sollen:
+
+\begin{enumerate}
+\item Geben Sie eine oder mehr Medline IDs (getrennt durch Komma/Semikolon)
+in das Textfeld ein.
+\item Geben Sie Namen oder W�rter ein, nach denen gesucht werden soll. Sie
+k�nnen dazu die Operatoren \texttt{AND} und \texttt{OR} sowie Klammern
+benutzen, um Ihren Suchbegriff zu verfeinern.
+\end{enumerate}
+In beiden F�llen dr�cken Sie dann ENTER oder die Schaltfl�che \menu{Abrufen}.
+Wenn Sie eine Textsuche durchf�hren, wird Ihnen die Anzahl der gefundenen
+Eintr�ge angezeigt, und Sie k�nnen w�hlen, wie viele Sie herunterladen
+m�chten.
+
+Die abgerufenen Eintr�ge werden Ihrer zu diesem Zeitpunkt aktivierten
+Datei zugeordnet.
+
+\subsubsection{IEEEXplore}
+\label{IEEEXploreHelp}
+
+\tip[]{IEEEXplore bietet Zugang zu Literatur in den Bereichen Elektrotechnik, Informatik und Elektronik.}
+\jabref kann Literaturangaben der IEEEXplore-Datenbank herunterladen.
+Um diese Funktion zu nutzen, w�hlen Sie \menu{Internet \msep{} IEEEXplore abfragen}
+und geben in dem Dialog, der im linken Bildschirmbereich erscheint, Ihre
+Suchausdr�cke ein. Dr�cken Sie anschlie�end die
+ENTER-Taste oder den \menu{Abrufen}-Button.
+
+Die Suche wird im G�ste-Modus durchgef�hrt, es werden also maximal 100 Ergebnisse
+angezeigt.
+
+Sie k�nnen die \emph{abstracts} zusammen mit den Literaturangaben herunterladen,
+indem Sie einen Haken bei \menu{Abstracts ber�cksichtigen} setzen. Das verursacht
+eine deutlich h�here Anzahl von Netzwerk-Anfragen; um die Webseite von IEEEXplore
+nicht �berm��ig zu belasten, l�dt \jabref \emph{abstracts} nur bei einer Suche,
+deren Ergebnis eine bestimmte Trefferanzahl nicht �bersteigt.
+
+\subsubsection{Benutzung eines Proxy-Servers}
+
+Wenn Sie einen HTTP-Proxy-Server benutzen m�ssen, �bergeben Sie den
+Servernamen und die Portnummer an Java. Diese Umgebungseinstellungen
+sind dokumentiert unter
+\href{http://java.sun.com/j2se/1.4.2/docs/guide/net/properties.html}{http://java.sun.com/j2se/1.4.2/docs/guide/net/proper\allowbreak ties.html}
+
+\begin{lstlisting}
+java -Dhttp.proxyHost="hostname" -Dhttp.proxyPort="portnumber"
+\end{lstlisting}
+
+\subsection{\jabref mit mehreren Benutzern verwenden}
+
+\jabref bietet einige Funktionen, die besonders dann von Nutzen
+sind, wenn eine Datenbank von mehreren Benutzern~-- z.\,B. �ber
+ein Netzwerk~-- bearbeitet wird. Das sind vor allem die Felder \emph{owner}
+und \emph{timestamp}.
+
+
+\subsubsection{Zeitstempel \emph{(timestamp)}}
+\label{TimeStampHelp}
+
+\begin{quote}
+\emph{Die Benutzung des Zeitstempels kann unter
+\menu{Einstellungen}} \msep{} \emph{\menu{Allgemein} an- und
+abgestellt sowie ver�ndert werden.}
+\end{quote}
+\jabref kann automatisch das Feld \emph{timestamp} setzen, das
+das Datum enth�lt, an dem der Eintrag zur Datei hinzugef�gt wurde.
+Die Formatierung des Zeitstempels wird von einem Ausdruck mit Bezeichnern
+bestimmt, die die Position verschiedener Bestandteile des Datums angeben.
+Es folgen einige der verf�gbaren Bezeichner (die Beispiele in Klammern
+beziehen sich auf Mittwoch, den 14. September 2005, 17:45 Uhr):
+
+\begin{labeling}{00.00.0000}
+\item [\texttt{yy}]Jahr (05)
+\item [\texttt{yyyy}]Jahr (2005)
+\item [\texttt{MM}]Monat (09)
+\item [\texttt{dd}]Tag (14)
+\item [\texttt{HH}]Stunde (17)
+\item [\texttt{mm}]Minute (45)
+\end{labeling}
+Diese Bezeichner k�nnen mit Interpunktion und Leerzeichen kombiniert
+werden. Hier einige Beispiele:
+
+\begin{labeling}{dd.MM.yyyy-HH:m}
+\item [\texttt{yyyy.MM.dd}]$\to$ 2005.09.14
+\item [\texttt{yy-MM-dd}]$\to$ 05-09-14
+\item [\texttt{dd.MM.yyyy~HH:mm}]$\to$ 14.09.2005 17:45
+\end{labeling}
+
+\subsubsection{Besitzer \emph{(owner)}}
+
+\label{OwnerHelp}\jabref kann allen neuen Eintr�gen, die zu einer
+Datei hinzugef�gt oder in sie importiert werden, Ihren Benutzernamen
+beigeben. Diese Funktion k�nnen Sie im Men� \menu{Einstellungen}
+\msep{} \menu{Allgemein} ein- und ausschalten. Dort k�nnen Sie auch
+den Namen angeben, der in den Eintr�gen erscheinen soll.
+
+In der Standardeinstellung wird Ihr (System-)Benutzername verwendet.
+Der Name wird in dem Feld \emph{owner} eingetragen, das in der Standardeinstellung
+im Tab \emph{General fields} des Eintragseditors angezeigt wird.
+
+
+\subsection{\jabref von der Kommandozeile}
+
+\label{CommandLine}Obwohl \jabref in erster Linie ein Programm
+mit grafischer Benutzeroberfl�che ist, bietet es einige n�tzliche
+Optionen f�r die Kommandozeile und kann sogar Dateikonvertierungen
+durchf�hren, ohne die grafische Benutzeroberfl�che zu �ffnen.
+
+Sie k�nnen eine oder mehrere \bibtex{}-Dateien laden, indem Sie auf
+der Kommandozeile die entsprechenden Dateinamen auflisten. Achten
+Sie darauf, alle gew�nschten Optionen anzugeben, bevor Sie die Dateinamen
+anf�gen. Au�erdem m�ssen Sie sich vergewissern, dass der erste Dateiname
+nicht als Argument einer Option missverstanden werden kann~-- falls
+eine Bool'sche Option wie \texttt{-n} oder \texttt{-l} direkt vor
+einem Dateinamen steht, m�ssen Sie also \texttt{true} als Argument
+angeben. Das Beispielkommando:
+
+\begin{lstlisting}
+jabref -o filetoexport.xml,docbook -n true original.bib
+\end{lstlisting}
+l�dt die Datei \texttt{original.bib}, exportiert sie in das Docbook-Format,
+speichert sie unter dem Namen \texttt{filetoexport.xml} und unterdr�ckt
+das Laden der grafischen Oberfl�che. Das Word \emph{true} verhindert,
+dass der Dateiname als Argument der Option \texttt{-n} interpretiert
+wird.
+
+
+\subsubsection{Kommandozeilen-Optionen}
+\label{kommandozeilenoptionen}
+Im folgenden werden die wichtigsten Optionen und Befehle f�r die Kommandozeile
+vorgestellt.
+
+\begin{itemize}
+\item Hilfe: \texttt{-h}
+
+Diese Option veranlasst \jabref, eine Zusammenfassung der Kommandozeilen"=Optionen
+anzuzeigen und das Programm unmittelbar darauf zu schlie�en.
+
+\item Kein GUI-Modus: \texttt{-n}
+
+Diese Option unterdr�ckt sowohl das \jabref-Fenster als auch den
+Er�ffnungsbildschirm, der normalerweise beim Programmstart angezeigt
+wird. Das Programm wird beendet, sobald die Kommandozeilen-Optionen
+abgearbeitet wurden.
+Diese Option ist n�tzlich, um Dateikonvertierungen von der Kommandozeile
+oder mit Hilfe eines Scripts durchzuf�hren.
+
+\item Sitzung laden: \texttt{-l}
+
+Diese Option veranlasst \jabref, eine gespeicherte Sitzung zu laden,
+sofern eine vorhanden ist, bevor sich das Hauptfenster �ffnet.
+
+\item Datei importieren: \texttt{-i Dateiname{[},Importformat{]}}
+
+Bei dieser Option importiert oder l�dt \jabref eine bestimmte Datei.
+Wenn nur ein Dateiname angegeben wird oder ein Komma und ein {*}-Zeichen
+hinter dem Dateinamen stehen, versucht \jabref, das Dateiformat
+automatisch zu erkennen. Das sollte bei allen \bibtex{}-Dateien ebenso
+funktionieren wie bei Dateien, die in einem der von \jabref unterst�tzten
+Importformate vorliegen. Wenn dem Dateinamen ein Komma und ein Importformat
+folgen, wird der angegebene Importfilter benutzt. Mit der Option \texttt{-h}
+k�nnen Sie sich eine Liste der verf�gbaren Importformate anzeigen
+lassen.
+
+Wenn Sie zus�tzlich eine Export-Option angeben, wird der Import immer
+zuerst ausgef�hrt, bevor die importierte oder geladene Datei an den
+Exportfilter �bergeben wird. Falls die grafische Oberfl�che nicht
+mit der Option \texttt{-n} unterdr�ckt wird, werden alle geladenen
+oder importierten Dateien im Hauptfenster von \jabref angezeigt.
+
+Die Option \texttt{-i} kann nur einmal angegeben werden und nimmt
+als Argument maximal eine Datei.
+
+\item Datei exportieren: \texttt{-o Dateiname{[},Exportformat{]}}
+
+Diese Option veranlasst \jabref, eine Datei zu speichern oder zu
+exportieren, die von derselben Kommandozeile geladen oder importiert
+wurde. Wenn eine Datei mit der Option \texttt{-i} importiert wurde,
+wird diese Datei exportiert. Ansonsten wird die Datei exportiert,
+die \emph{zuletzt}~-- ohne die Option \texttt{-i}~-- angegeben (und
+erfolgreich geladen) wurde.
+
+Wird nur ein Dateiname angegeben, so wird diese Datei im \bibtex{}-Format
+gespeichert. Wenn dem Dateinamen ein Komma und ein Exportformat folgen,
+wird der angegebene Exportfilter benutzt. Auf diese Weise wird auch
+ein benutzerdefinierter Exportfilter angewendet; wenn der Name sowohl
+auf einen Standard-Exportfilter, als auch auf einen benutzerdefinierten
+Exportfilter zutrifft, wird der benutzerdefinierte verwendet.
+
+Mit der Option \texttt{-h} k�nnen Sie sich eine Liste der verf�gbaren
+Exportformate anzeigen lassen.
+
+Falls die Option \texttt{-n} nicht aufgerufen wurde, wird jeder Exportvorgang
+durchgef�hrt, bevor das \jabref-Fenster ge�ffnet wird. Dort werden
+dann die importierten Dateien angezeigt.
+
+Die Option \texttt{-o} kann nur einmal angegeben werden und nimmt
+als Argument maximal eine Datei.
+
+\item Einstellungen exportieren: \texttt{-x Dateiname}
+
+Mit dieser Option k�nnen Sie \jabref veranlassen, alle Benutzer"=Einstellungen
+in eine XML-Datei zu speichern. Nach dem Export startet \jabref
+normal.
+
+\item Einstellungen importieren: \texttt{-p Dateiname}
+
+Mit dieser Option importiert \jabref Benutzer-Einstellungen, die
+mit der Option \texttt{-x} exportiert wurden. Nach dem Import startet
+\jabref normal.
+
+\item Nur benutzte Eintr�ge exportieren:\\ \texttt{-a Dateiname{[}.aux{]},neueBibDatei{[}.bib{]}}
+
+Manchmal ist es n�tzlich, eine \bibtex{}-Datei zu haben, die nur die
+benutzten Eintr�ge enth�lt. Eine Liste dieser benutzten Eintr�ge findet
+sich in einer .aux-Datei (sobald Sie \LaTeX{} aufgerufen haben). \jabref
+kann diese Datei analysieren, um eine neue \bibtex{}-Datei zu erstellen,
+die nur die bekannten und benutzten Eintr�ge enth�lt. Das bedeutet,
+dass ein Eintrag, der in der Standard-\bibtex{}-Datei nicht definiert
+ist, auch nicht in die neue Datei geschrieben werden kann.
+
+\item Aus dem Internet abrufen:\\ \lstinline{--fetch==Name des Fetchers:Suchausdruck}
+
+Die \emph{Fetcher}, also die direkte Suche in Online-Datenbanken,
+die Sie im Men� \menu{Internet} finden, k�nnen auch von der Kommandozeile
+aus gestartet werden. Nutzen Sie dazu die Option \lstinline{--fetch} und geben
+sowohl den Namen des Fetchers (z.B. ">ieee"<, ">medline"< oder ">jstor"<)
+als auch den Suchausdruck oder die ID des gesuchten Mediums an. Beachten
+Sie, dass einige Fetcher eine graphische Oberfl�che (GUI) anzeigen,
+falls Sie eine R�ckmeldung von Ihnen brauchen. Um eine �bersicht der
+verf�gbaren Fetcher zu erhalten, geben Sie \texttt{-{-}fetch} ohne
+Parameter ein.
+
+\end{itemize}
+
+\subsubsection{Externer Zugriff}
+\label{RemoteHelp}
+\begin{quote}
+\emph{Diese Funktion kann unter \menu{Optionen \msep{} Einstellungen \msep{} Erweitert} verwaltet werden.}
+\end{quote}
+
+\tip[]{Beachten Sie, dass das Aktivieren dieser Funktion mit Windows XP SP2 (und m�glicherweise auch mit anderen Konfigurationen) zu einer Meldung f�hren kann, die besagt, dass bestimmte Funktionen des Programms von der Windows-Firewall geblockt wurden. Sie k�nnen die Firewall anweisen, weiterhin zu blocken, denn die Firewall beeintr�chtigt den Externen Zugriff von \jabref nicht.}
+Falls das Abh�ren von externen Zugriffen aktiviert ist, versucht \jabref beim Programmstart, den entsprechenden Port abzuh�ren. Das bedeutet, dass andere Anwendungen Informationen durch diesen Port an \jabref senden k�nnen. \jabref akzeptiert dabei nur lokale Verbindungen, um das Risiko eines Eingriffs von au�erhalb auszuschlie�en.
+
+Mit dem externen Zugriff kann eine zweite Instanz von \jabref erkennen, dass eine erste Instanz bereits l�uft. In diesem Fall leitet die zweite Instanz ihre Kommandozeilen"=Optionen an die erste Instanz weiter und beendet sich selbst direkt im Anschluss~-- sofern die zweite Instanz nicht ausdr�cklich instruiert wurde, im Stand-Alone-Modus (als selbst�ndige Instanz) zu starten.
+
+Die erste \jabref-Instanz liest die Kommandozeilenoptionen und f�hrt die erforderlichen Aktionen aus, z.\,B. das Lesen oder Importieren einer Datei oder das Anh�ngen einer Datei an die aktive Datenbank. Falls eine Datei mit der Option \texttt{-{-}importToOpen} importiert wird, werden die Eintr�ge an die aktive Datei angeh�ngt. Falls keine Datei ge�ffnet ist, wird eine neue Datei angelegt.
+
+\clearpage 
+\section{Anpassung}
+\secttoc
+
+\subsection{Eintragstypen}
+
+\label{CustomEntriesHelp}
+
+\begin{quote}
+\emph{Um Eintragstypen anzupassen, w�hlen Sie den Men�punkt \menu{Optionen}}
+\msep{} \emph{\menu{Eintragstypen anpassen}.}
+\end{quote}
+Wenn Sie einen Eintragstyp anpassen, definieren Sie sowohl sein Erscheinungsbild
+im Eintragseditor als auch die Bedingungen, nach denen \jabref
+einen Eintrag als vollst�ndig akzeptiert. Sie k�nnen die bestehenden
+Eintragstypen ver�ndern und neue hinzuf�gen.
+
+Beachten Sie, dass in diesem Dialog keine �nderungen gespeichert werden,
+solange Sie nicht auf \menu{�bernehmen} oder \menu{OK} klicken.
+Wenn Sie \menu{Abbrechen} anklicken oder einfach den Dialog schlie�en,
+gehen die bislang nicht �bernommenen �nderungen verloren.
+
+
+\subsubsection{Der Dialog \menu{Eintragstypen anpassen}}
+
+Der Dialog \menu{Eintragstypen anpassen} ist in drei Hauptbereiche
+unterteilt. Im linken Bereich k�nnen Sie den Eintragstyp ausw�hlen,
+den Sie bearbeiten wollen, und neue Eintragstypen hinzuf�gen. Im mittleren
+Bereich werden die Einstellungen f�r die ben�tigten Felder des ausgew�hlten
+Eintragstyps vorgenommen und im rechten Bereich diejenigen der optionalen
+Felder.
+
+
+\subsubsection{Eintragstypen hinzuf�gen und l�schen}
+
+Die derzeit verf�gbaren Eintragstypen werden im linken Bereich des
+Dialogfensters aufgelistet. Wenn Sie einen Eintragstyp ausw�hlen,
+werden die anderen Bereiche aktualisiert und zeigen die ben�tigten
+und optionalen Felder dieses Eintragstyps.
+
+Um einen neuen Eintragstyp hinzuzuf�gen, geben Sie einfach seinen
+Namen in das Textfeld unter der Typliste ein und klicken \menu{Hinzuf�gen}.
+Der neue Eintragstyp wird zur Liste hinzugef�gt und zur Bearbeitung
+ausgew�hlt.
+
+Um einen eigenen Eintragstyp zu entfernen, w�hlen Sie ihn aus und
+klicken auf \menu{L�schen}. Dieser Vorgang ist nur f�r eigene Eintragstypen
+verf�gbar, die nicht nur Abwandlungen der Standard-Typen sind. Die
+Standard-Eintragstypen k�nnen nicht gel�scht werden.
+
+Um einem Eintragstyp seinen Standardwert zur�ckzugeben, w�hlen Sie
+ihn aus und dr�cken auf \menu{Standard}. Dieser Vorgang ist nur f�r
+Standard-Typen verf�gbar, die bearbeitet wurden.
+
+
+\subsubsection{Eintragstypen bearbeiten}
+
+Wenn ein Eintragstyp ausgew�hlt ist, werden die derzeitigen ben�tigten
+und optionalen Felder im mittleren und rechten Bereich des Dialogfensters
+aufgelistet. Das Vorgehen beim Bearbeiten dieser Listen ist f�r die
+ben�tigten und optionalen Felder identisch.
+
+Um ein neues Feld hinzuzuf�gen, bearbeiten Sie das Textfeld unterhalb
+der Liste oder w�hlen einen Feldnamen aus dem Dropdown-Men� und klicken
+auf \menu{Hinzuf�gen}. Der gew�hlte Feldname erscheint am Ende der
+Liste.
+
+Um eines oder mehrere Felder zu l�schen, w�hlen Sie sie in der Liste
+aus und klicken auf \menu{L�schen}. Die Reihenfolge der Felder k�nnen
+Sie �ndern, indem Sie einen Feldnamen ausw�hlen und die Pfeil"=Buttons
+benutzen, um das Feld nach oben oder nach unten zu verschieben.
+
+Es gibt eine Beschr�nkung beim Anpassen der Eintragstypen; bestimmte
+Typen haben eine ">und/oder"<"=Bedingung in ihren ben�tigten Feldern. Ein
+\emph{book}-Eintrag ist beispielsweise komplett, wenn entweder das
+Feld \emph{author} oder \emph{editor} oder beide gesetzt sind. Diese
+Art von Bedingung kann in einem angepassten Eintragstyp nicht realisiert
+werden.
+
+
+\subsection{Allgemeine Felder festlegen}
+
+\label{GeneralFields}Sie k�nnen dem Eintragseditor eine beliebige
+Anzahl von Tabs hinzuf�gen, die bei allen Eintragstypen sichtbar sind.
+W�hlen Sie dazu den Men�eintrag \menu{Optionen} \msep{} \menu{Allgemeine Felder festlegen}.
+
+Jede Zeile repr�sentiert einen Tab. Der Anfang der Zeile steht f�r
+den Namen des Tabs, gefolgt von einem Doppelpunkt. Anschlie�end listen
+Sie die einzelnen Felder auf, die der Tab enthalten soll, und trennen
+sie jeweils durch ein Semikolon.
+
+Das Beispiel
+
+\begin{lstlisting}
+Allgemeine Felder:url;keywords;doi;pdf
+Zusammenfassung:abstract;annote
+\end{lstlisting}
+ergibt somit einen Tab mit dem Namen >>Allgemeine Felder<<, der
+die Felder \emph{url}, \emph{keywords}, \emph{doi} und \emph{pdf}
+enth�lt, sowie einen zweiten Tab namens >>Zusammenfassung<< mit
+den Feldern \emph{abstract} und \emph{annote}.
+
+
+\subsection{Automatische Erstellung von \texorpdfstring{\bibtex{}"=Keys}{BibTeX-Keys}}
+\label{LabelPatterns}
+\begin{quote}
+\emph{Unter \menu{Optionen \msep{} Einstellungen \msep{} BibTeX"=Key"=Muster} 
+kann man die Felder bestimmen, die zur automatischen Generierung der
+\bibtex{}"=Keys herangezogen werden.}
+\end{quote}
+\jabref verwendet ein Standardmuster zur Generierung von \bibtex{}"=Keys, das Keys wie z.\,B.
+\texttt{Yared1998} erzeugt. Falls der \bibtex{}-Key in der ge�ffneten
+Datei nicht eindeutig sein sollte, wird einer der Buchstaben a-z angef�gt,
+bis ein eindeutiger Key gefunden ist. Dementsprechend k�nnten die
+Labels wie folgt aussehen:
+
+\begin{lstlisting}
+Yared1998
+Yared1998a
+Yared1998b
+(*\ldots*)
+\end{lstlisting}
+Um das Aussehen der \bibtex{}-Keys zu bestimmen, benutzt \jabref
+Feldmarken. Das Key"=Muster kann f�r jeden der vorgegebenen Eintragstypen
+bestimmt werden. Es kann beliebigen Text enthalten, unabh�ngig von
+und zus�tzlich zu den Feldmarken, die angeben, dass ein bestimmtes
+Feld des Eintrags an dieser Stelle des Keys eingef�gt werden soll.
+Eine Feldmarke besteht gew�hnlich aus dem Feldnamen in eckigen Klammern,
+z.\,B. \texttt{{[}volume{]}}. Wenn dieses Feld zum Zeitpunkt der
+Erstellung des Keys leer ist, wird kein Text eingef�gt.
+
+Es gibt au�erdem mehrere spezielle Feldmarken, die nur einen bestimmten
+Teil aus einem Feld extrahieren. Sie werden unten aufgelistet. Nat�rlich
+k�nnen Sie auch neue spezielle Feldmarken vorschlagen.
+
+
+\subsubsection{Spezielle Feldmarken}
+\label{subsub:SpezielleFeldmarken}
+
+\begin{labeling}{auth.auth.eaMM}
+\item [\texttt{{[}auth{]}}]Der Nachname des ersten Autors.
+\item [\texttt{{[}authors{]}}]Die Nachnamen aller Autoren.
+\item [\texttt{{[}authorsN{]}}]Die Nachnamen von bis zu N Autoren. Falls
+es mehr Autoren gibt, wird EtAl angeh�ngt.
+\item [\texttt{{[}authIniN{]}}]Der Anfang des Nachnamens von jedem Autoren,
+wobei nicht mehr als N Buchstaben verwendet werden.
+\item [\texttt{{[}authorIni{]}}]Die ersten 5 Buchstaben des Nachnamens
+des ersten Autors und die Initialen der Nachnamen der restlichen Autoren.
+\item [\texttt{{[}authN{]}}]Die ersten N Buchstaben des Nachnamens des
+ersten Autors.
+\item [\texttt{{[}authN\_M{]}}]Die ersten N Buchstaben des Nachnamens des
+M-ten Autors.
+\item [\texttt{{[}auth.auth.ea{]}}]Die Nachnamen der beiden ersten Autoren
+und \texttt{.ea}, falls es mehr als zwei Autoren sind.
+\item [\texttt{{[}auth.etal{]}}]Der Nachname des ersten Autors und der Nachname des zweiten Autors bei zwei Autoren bzw. \texttt{.etal} bei mehr als zwei Autoren.
+\item [\texttt{{[}authshort{]}}]Der Nachname bei einem Autor; der erste
+Buchstabe der Nachnamen von bis zu drei Autoren, falls mehr als ein
+Autor vorhanden ist. Ein Plus (+) wird angeh�ngt, falls es mehr als
+drei Autoren gibt.
+\end{labeling}
+
+\tip[Anmerkung: ]{Falls es keinen Autor gibt (etwa bei einem Buch mit Herausgeber), benutzen die genannten \texttt{{[}auth\ldots{]}}"=Feldmarken den oder die Herausgeber, die im editor"=Feld angegeben wurden. Also werden die Herausgeber eines Buches ohne Autor f�r die Label"=Erstellung wie Autoren behandelt. Falls Sie dieses Verhalten nicht w�nschen und die Feldmarke stattdessen bei einem leeren author"=Feld zu nichts expandieren soll, m�ssen Sie stattdessen >>pureauth<< verwenden, z.\,B [...]
+
+\begin{labeling}{veryshorttitleMM}
+\item [\texttt{{[}edtr{]}}]Der Nachname des ersten Herausgebers.
+\item [\texttt{{[}editors{]}}]Die Nachnamen aller Herausgeber.
+\item [\texttt{{[}edtrIniN{]}}]Der Anfang des Nachnamens von jedem Herausgeber,
+wobei nicht mehr als N Buchstaben verwendet werden.
+\item [\texttt{{[}editorIni{]}}]Die ersten 5 Buchstaben des Nachnamens
+des Herausgebers und die Initialen der Nachnamen der restlichen Herausgeber.
+\item [\texttt{{[}edtrN{]}}]Die ersten N Buchstaben des Nachnamens des
+ersten Herausgebers.
+\item [\texttt{{[}edtrN\_M{]}}]Die ersten N Buchstaben des Nachnamens des
+M-ten Herausgebers.
+\item [\texttt{{[}edtr.edtr.ea{]}}]Der Nachname der ersten beiden Herausgeber
+und \texttt{.ea}, falls es mehr als zwei Herausgeber sind.
+\item [\texttt{{[}edtrshort{]}}]Der Nachname bei einem Herausgeber; der
+erste Buchstabe der Nachnamen von bis zu drei Herausgebern, falls
+mehr als ein Herausgeber vorhanden ist. Ein Plus (+) wird angeh�ngt,
+falls es mehr als drei Herausgeber gibt.
+\item [\texttt{{[}firstpage{]}}]Die erste Seitenzahl einer Ver�ffentlichung
+(pages).
+\item [\texttt{{[}keywordN{]}}]Stichwort Nummer N aus dem Feld ">keywords"<, gesetzt den Fall, dass die Stichworte durch Komma oder Semikolon voneinander getrennt sind.
+\item [\texttt{{[}lastpage{]}}]Die letzte Seitenzahl einer Ver�ffentlichung
+(pages).
+\item [\texttt{{[}shorttitle{]}}]Die ersten 3 Worte eines Titels (title).
+\item [\texttt{{[}shortyear{]}}]Die letzten 2 Ziffern des Jahrgangs (year).
+\item [\texttt{{[}veryshorttitle{]}}]Die ersten beiden Worte des Titels
+(title), wobei >>the<<, >>a<< und >>an<< ausgelassen werden.
+\end{labeling}
+Hinter einem Feldnamen (oder einem der oben aufgef�hrten Pseudo"=Feldnamen)
+kann ein Modifikator stehen. Modifikatoren werden in der Reihenfolge
+angewendet, in der sie angegeben wurden.
+
+\begin{labeling}{00.00.0000}
+\item [\texttt{:abbr}]K�rzt den Text, der von einem Feldnamen oder speziellen
+Feldmarken gebildet wird. Nur der erste Buchstabe und weitere Buchstaben,
+die auf ein Leerzeichen folgen, werden ber�cksichtigt. So w�rde beispielsweise
+\texttt{[journal:abbr]} die Zeitschrift >>Journal of Fish Biology<< zu
+>>JoFB<< wandeln.
+\item [\texttt{:lower}]Wandelt den von der Feldmarke eingef�gten Text in
+Kleinbuchstaben. So wird beispielsweise bei \texttt{{[}auth:lower{]}}
+der Nachname des ersten Autors in Kleinbuchstaben ausgegeben.
+\end{labeling}
+Das Standardmuster, das \bibtex{}-Keys wie \texttt{Yared1998}
+erzeugt, ist \texttt{{[}auth{]}{[}year{]}}. Wenn Sie keine Key-Muster
+f�r einen bestimmten Eintragstyp angeben, wird dieses vorgegebene
+Muster verwendet. Sie k�nnen das vorgegebene Muster nat�rlich ebenfalls
+anpassen%~-- seine Einstellung befindet sich �ber der Liste der Eintragstypen
+%im Tab \menu{Key-Muster} des Dialogs \menu{Einstellungen}
+.
+
+Beachten Sie, dass \jabref Umlaute und Buchstaben mit Akzenten
+sowie das � beim Erstellen von \bibtex{}-Keys ver�ndert, um m�glichen
+Problemen vorzubeugen. Hierzu einige Beispiele:
+
+\begin{lstlisting}
+D�az Iba�ez (*$\to$*) DiazIbanez
+Str�mb�ck   (*$\to$*) Stroembaeck
+Wa�enhoven  (*$\to$*) Wassenhoven
+\end{lstlisting}
+
+\subsubsection{Ersetzen eines regul�ren Ausdrucks}
+
+Nachdem das Key"=Muster angewendet wurde, um einen \bibtex{}"=Key zu erstellen, k�nnen Sie den Key"=Generator nach einem bestimmten regul�ren Ausdruck suchen und diesen durch eine Zeichenfolge ersetzen lassen. Der regul�re Ausdruck und die Zeichenfolge, die ihn ersetzen soll, werden in den Textfeldern unter der Liste der Key"=Muster eingegeben. Falls das Feld zur Ersetzung des regul�ren Ausdrucks leer ist, werden die mit der Suche �bereinstimmenden regul�ren Ausdr�cke einfach gel�scht.
+
+\subsection{Eintragsvorschau}
+
+\label{PreviewHelp}Die Eintragsvorschau wird mit denselben Mechanismen
+erstellt, die auch bei den Exportfiltern angewendet werden. Bei der
+Vorschau durchl�uft ein Eintrag eins von zwei m�glichen Layouts (die
+sie mit F9 wechseln k�nnen) und erstellt HTML-Code, der im Vorschaudialog
+am unteren Bildschirmrand angezeigt wird.
+
+Aussehen und Inhalt der Vorschau k�nnen mit derselben Syntax ver�ndert
+werden, die f�r die Anpassung der Exportfilter verwendet wird (siehe
+Abschnitt~\ref{CustomExports}).
+
+\subsection{Exportfilter}
+
+\label{CustomExports}Mit \jabref k�nnen Sie Ihre eigenen Exportfilter
+definieren und genau so wie die Standard"=Exportfilter benutzen. Ein
+Exportfilter wird durch eine oder mehrere \emph{Layout"=Dateien} definiert,
+die mittels eingebauter Formatierprogramme das Format der exportierten
+Dateien festlegen. Ihre Layout-Datei m�ssen Sie in einem separaten
+Text\-editor erstellen.
+
+
+\subsubsection{Hinzuf�gen eines Exportfilters}\label{subsubsec:Hinzufuegen-Exportfilter}
+
+Die einzige Voraussetzung f�r einen Exportfilter ist, dass eine Datei
+mit der Endung \texttt{.layout} vorhanden ist. Um einen neuen, eigenen
+Exportfilter hinzuzuf�gen, �ffnen Sie das Dialogfenster \menu{Optionen}
+\msep{} \menu{Verwalte externe Exportfilter} und klicken auf die
+Schaltfl�che \menu{Neu}. Es �ffnet sich ein neues Fenster, in dem
+Sie einen Namen (der als Auswahl im Dateityp"=Dropdownmen� erscheint, wenn man \menu{Datei \msep{} Exportieren} im \jabref"=Hauptfenster w�hlt), eine Pfadangabe zur \texttt{.layout}-Datei und die
+gew�nschte Dateiendung f�r den Exportfilter angeben k�nnen. Wenn Sie
+den Exportfilter benutzen, wird diese Endung im Datei"=Dialog automatisch
+vorgeschlagen.
+
+
+\subsubsection{Das Erstellen des Exportfilters}
+
+Um einen Eindruck zu bekommen, wie Exportfilter auszusehen haben,
+suchen Sie am besten auf unserer Homepage nach dem Paket, das die
+Layout"=Dateien der Standard"=Exportfilter enth�lt.
+
+Nehmen wir einmal an, dass wir einen HTML-Exportfilter erstellen wollen.
+Der Exportfilter muss lediglich aus einer einzigen \texttt{.layout}-Datei
+bestehen, die in diesem Fall \texttt{html.layout} genannt werden k�nnte.
+Sie k�nnen dar�ber hinaus auch zwei Dateien mit den Namen \texttt{html.begin.layout}
+und \texttt{html.end.layout} anlegen. Die erste dieser beiden Dateien
+enth�lt den Kopfteil der Ausgabe, die zweite den Fu�teil. \jabref
+sucht jedesmal wenn der Exportfilter benutzt wird nach diesen Dateien
+und f�gt sie~-- falls sie gefunden werden~-- w�rtlich vor bzw. nach
+den einzelnen Eintr�gen in die Ausgabe ein.
+
+\tip[]{Beachten Sie, dass sich diese Dateien in demselben Verzeichnis
+wie \texttt{html.layout} befinden und die Namensbestandteile \texttt{.begin}
+bzw. \texttt{.end} enthalten m�ssen.}
+
+\noindent In unserem Beispiel-Exportfilter k�nnten diese Dateien folgenderma�en
+aussehen:
+
+\begin{lstlisting}[title=html.begin.layout]
+<HTML>
+<BODY text="#275856">
+<basefont size="4" color="#2F4958" face="arial">
+\end{lstlisting}
+\begin{lstlisting}[title=html.end.layout]
+</BODY>
+</HTML>
+\end{lstlisting}
+Die Datei \texttt{html.layout} stellt die \emph{Standard}"=Formatvorlage
+f�r den Export eines einzelnen Eintrags bereit. Falls Sie unterschiedliche
+Formatvorlagen f�r verschiedene Eintragstypen anwenden wollen, m�ssen
+Sie typspezifische \texttt{.layout}"=Dateien erstellen. Diese
+m�ssen sich ebenfalls in demselben Verzeichnis wie die Haupt"=Layout"=Datei
+befinden und den Namensbestandteil \texttt{.entrytype} enthalten.
+Der Name des Eintragstyps muss komplett in Kleinbuchstaben geschrieben
+werden. In unserem Beispiel wollen wir eine Formatvorlage f�r Eintr�ge
+des Typs \emph{book} haben, die in der Datei \texttt{html.book.layout}
+abgelegt wird. F�r eine Dissertation w�rden wir die Datei \texttt{html.phdthesis.layout}
+anlegen~-- und so weiter. Diese Dateien sind der Standard"=Layout"=Datei
+sehr �hnlich, nur dass sie lediglich f�r Eintr�ge des entsprechenden
+Typs genutzt werden. Achten Sie darauf, dass die Standard"=Layout"=Datei
+so allgemein gehalten wird, dass sie die meisten Eintragstypen abdeckt.
+
+
+\paragraph{Das Format der Layout-Datei}
+
+Layout"=Dateien werden mit einem einfachen mark\-up"=Format erstellt,
+bei dem die Kommandos mit einem >>backslash<< (\texttt{\textbackslash{}})
+eingeleitet werden. Alle Textbestandteile, die nicht als Kommando
+identifiziert werden, gelangen direkt in die Ausgabedatei.
+
+
+\paragraph{Feldkommandos}
+
+Ein beliebiges Wort, vor dem ein backslash steht, z.\,B. \texttt{\textbackslash{}author},
+\texttt{\textbackslash{}editor,} \texttt{\textbackslash{}title} oder
+\texttt{\textbackslash{}year}, wird als Verweis auf das entsprechende
+Feld ausgewertet, das dann direkt in die Ausgabe kopiert wird.
+
+
+\paragraph{Feldformatierer}
+\label{par:Feldformatierer}
+
+Oft muss der Feldinhalt vor der Ausgabe verarbeitet werden. Dies wird
+mit Hilfe eines \emph{Feldformatierers} gemacht~-- einer java class,
+die eine Methode zur Verarbeitung des Feldinhaltes enth�lt.
+
+Ein Formatierer wird angewendet, indem man das Kommando \texttt{\textbackslash{}format}
+gefolgt vom Namen des Formatierers in eckigen Klammern und dem Feldnamen
+in geschweiften Klammern einf�gt, z.\,B.:
+
+\begin{lstlisting}
+\format[ToLowerCase]{\author}
+\end{lstlisting}
+Sie k�nnen auch mehrere Formatierer angeben, getrennt durch Kommas.
+Diese werden nacheinander aufgerufen, und zwar von links nach rechts.
+Das Kommando
+
+\begin{lstlisting}
+\format[ToLowerCase,HTMLChars]{\author}
+\end{lstlisting}
+ruft z.\,B. zun�chst den Formatierer \emph{ToLowerCase} auf, \emph{HTMLChars}
+formatiert anschlie�end das Ergebnis. Auf diese Weise k�nnen Sie eine
+beliebige Anzahl an Formatierern auflisten.
+
+\jabref bietet die folgenden Formatierer, wobei einige von anderen
+abh�ngen:
+
+\begin{labeling}{MMMM}
+\item [\texttt{HTMLChars}]ersetzt \TeX{}-spezifische Sonderzeichen wie
+       \texttt{\{\textbackslash{}\textasciicircum{}a\}} oder \texttt{\{\textbackslash{}\char`\"{}\{o\}\}}
+       durch ihre HTML"=Entsprechungen und �bersetzt die \LaTeX"=Befehle \texttt{\textbackslash emph}, 
+       \lstinline{\textit}, \lstinline{\textbf} in ihre HTML"=Entsprechungen.
+\item [\texttt{HTMLParagraphs}]interpretiert zwei aufeinanderfolgende Zeilenumbr�che 
+       (z.\,B. \lstinline{\n\n}) als Beginn eines neuen Absatzes und erstellt dementsprechend
+       Absatz-HTML-Tags.
+\item [\texttt{XMLChars}]ersetzt \TeX{}-spezifische Sonderzeichen wie       
+       \texttt{\{\textbackslash{}\textasciicircum{}a\}}
+       oder \texttt{\{\textbackslash{}\char`\"{}\{o\}\}} durch ihre XML-Entsprechungen.
+\item [\texttt{CreateDocBookAuthors}]formatiert das author-Feld im DocBook-Stil.
+\item [\texttt{CreateDocBookEditors}]\emph{Dokumentation folgt.}
+\item [\texttt{CurrentDate}]gibt das aktuelle Datum aus. Ohne Argument gibt dieser Formatierer 
+       das aktuelle Datum im Format ">JJJJ.MM.TT HH:MM:SS Z"< (Datum, Zeit und Zeitzone) aus.
+       Mit einem anderen Format-String als Argument kann das Datum angepasst werden. So ergibt
+       \lstinline{\format[CurrentDate]}\texttt{\{}\lstinline{yyyy.MM.dd}\texttt{\}} nur das 
+       Datum, z.\,B. ">2005.11.30"<.
+\item [\texttt{AuthorFirstFirst}]formatiert die Felder \emph{author}/\emph{editor}
+       mit den Vornamen zuerst.
+\item [\texttt{AuthorFirstFirstCommas} oder \texttt{AuthorFirstLastCommas}]formatiert die Felder
+       \emph{author}/\emph{editor} mit den Vornamen zuerst und abgetrennt durch Kommas.
+\item [\texttt{AuthorFirstLastOxfordCommas}] ist �hnlich wie \lstinline{AuthorFirstLastCommas}, 
+       au�er dass das ">and"< zwischen den letzten beiden Namen durch ein Komma eingeleitet
+       wird.
+\item [\texttt{AuthorFirstAbbrLastCommas}]formatiert die
+       Felder \emph{author}/\emph{editor} mit abgek�rzten Vornamen, abgetrennt durch
+       Kommas, mit einem ">and"< zwischen den letzten beiden Namen.
+\item [\texttt{AuthorFirstAbbrLastOxfordCommas}]�hnlich wie \texttt{AuthorFirstAbbrLastCommas}, 
+       au�er dass das ">and"< zwischen den letzten beiden Namen durch ein Komma eingeleitet wird.
+\item [\texttt{AuthorLastFirst}]formatiert die Felder \emph{author}/\emph{editor}
+       mit den Nachnamen zuerst.
+\item [\texttt{AuthorLastFirstAbbreviator}]k�rzt die Vornamen aller Autoren.
+       Dieser Formatierer kann nur angewendet werden, wenn \texttt{AuthorLastFirst}
+       bereits benutzt wurde.
+\item [\texttt{AuthorLastFirstCommas}]formatiert die Felder
+       \emph{author}/\emph{editor} mit den Nachnamen zuerst, abgetrennt durch Kommas,
+       mit einem ">and"< zwischen den letzten beiden Namen.
+\item [\texttt{AuthorLastFirstOxfordCommas}]�hnlich wie
+        \texttt{AuthorLastFirstCommas}, nur dass das ">and"<
+        zwischen den letzten beiden Namen durch ein Komma eingeleitet wird.
+\item [\texttt{AuthorLastFirstAbbrCommas}]formatiert die Felder
+        \emph{author}/\emph{editor} mit Nachnamen zuerst und abgek�rzten Vornamen,
+        abgetrennt durch Kommas, mit einem ">and"< zwischen den letzten
+        beiden Namen.
+\item [\texttt{AuthorLastFirstAbbrOxfordCommas}]�hnlich wie
+        \texttt{AuthorLastFirstAbbrCommas}, au�er dass das ">and"<
+        zwischen den letzten beiden Namen durch ein Komma eingeleitet wird.
+\item [\texttt{AuthorAndsReplacer}]ersetzt >>and<< zwischen den Namen
+       durch >>;<<, zwischen den letzten beiden Autoren steht >>\&<<.
+\item [\texttt{AuthorAndsCommaReplacer}]ersetzt >>and<< zwischen den
+       Namen durch ein Komma (,) sowie >>\&<< zwischen den beiden letzten.
+\item [\texttt{AuthorOrgSci}]Der erste Autor erscheint als "Nachname, Vorname", 
+       alle anderen als "Vorname Nachname". Vornamen werden abgek�rzt.
+\item [\texttt{AuthorAbbreviator}]\emph{Dokumentation folgt.}
+\item [\texttt{AuthorNatBib}]formatiert Autorennamen im Natbib-Stil, also nur mit Nachnamen;
+       zwei Autoren werden durch ein ">and"< voneinander getrennt, bei mehr als zwei 
+       Autoren wird der erste angegeben, gefolgt von ">et al."<
+\item [\texttt{NoSpaceBetweenAbbreviations}]Leerzeichen zwischen mehreren abgek�rzten 
+       Vornamen werden gel�scht.
+\item [\texttt{FileLink(Dateityp)}] Wenn kein Argument angegeben
+        wird, gibt dieser Formatierer den ersten externen Dateityp aus, der
+        in dem Feld ">file"< angegeben ist. Dieser Formatierer nimmt den Namen 
+        eines Dateityps als optionales
+        Argument, das in Klammern nach dem Namen des Formatierers angegeben
+        wird. So wird etwa mit \texttt{\textbackslash format[FileLink(pdf)] \{%
+        \textbackslash file\}}
+        der Dateityp \lstinline{pdf} als Argument angegeben. Wenn ein Argument
+        mitgegeben wird, w�hlt der Formatierer den ersten Dateilink des
+        entsprechenden Typs. Im Beispiel wird der Pfad zum ersten PDF"=Link
+        ausgegeben.
+\item [\texttt{FormatPagesForHTML}]ersetzt >>\texttt{-{}-}<< durch >>\texttt{-}<<.
+\item [\texttt{FormatPagesForXML}]ersetzt >>\texttt{-{}-}<< durch einen
+       XML en-dash (>>--<<).
+\item [\texttt{Replace(regexp,ersetzedurch)}]f�hrt eine Ersetzung
+       mit einem Regul�ren Ausdruck durch. Um diesen Formatierer zu
+       benutzen, muss ein zweiteiliges Argument mitgegeben werden. Die Teile
+       werden durch ein Komma getrennt. Will man ein Komma ausgeben lassen,
+       muss man es maskieren (\lstinline{\,}).
+       Der erste Teil ist der Regul�re Ausdruck, nach dem gesucht wird.
+       Er wird normal geschrieben, ohne Backslashes (\lstinline{\}) zu maskieren.\footnote{%
+       Eine Beschreibung von Regul�ren Ausdr�cken ist hier zu finden:
+       \url{http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html}.}
+       Der zweite Teil ist der Text, der f�r alle Treffer eingesetzt werden soll.
+\item [\texttt{RemoveBrackets}]entfernt alle geschweiften Klammern (>>\{<<
+       und >>\}<<).
+\item [\texttt{RemoveBracketsAddComma}]\emph{Dokumentation folgt.}
+\item [\texttt{RemoveWhitespace}]l�scht alle Leerzeichen.
+\item [\texttt{RemoveLatexCommands}]entfernt \LaTeX-Befehle wie \lstinline{\emph},
+       \lstinline{\textbf} etc. Zusammen mit \texttt{HTMLChars}
+       oder \texttt{XMLChars} sollte dieser Formatierer zuletzt aufgerufen
+       werden.
+\item [\texttt{RemoveTilde}]ersetzt das Tilde-Zeichen (\lstinline{~}), das in \LaTeX\ als festes
+       Leerzeichen dient, durch ein normales Leerzeichen. N�tzlich in Kombination mit dem
+       Namens"=Formatierer (siehe Abschnitt \nameref{NameFormatter}).
+\item [\texttt{ToLowerCase}]macht aus allen Buchstaben Kleinbuchstaben.
+\item [\texttt{ToUpperCase}]macht aus allen Buchstaben Gro�buchstaben.
+\item [\texttt{GetOpenOfficeType}]gibt die Nummer wieder,
+        die vom bibliographischen System von OpenOffice.org (Versionen
+        1.x und 2.x) benutzt wird, um den Typ dieses Eintrags zu
+        bezeichnen.
+\item [\texttt{RTFChars}]ersetzt alle \TeX-spezifischen
+        Sonderzeichen (z.B. \texttt{\{\textbackslash\^{}a\}} oder 
+        \texttt{\{\textbackslash \textquotedbl\{o\}\}}) durch ihre
+        RTF"=Entsprechung und �bersetzt \LaTeX-Befehle wie \lstinline{\emph}, 
+        \lstinline{\textit}, \lstinline{\textbf} in ihre RTF"=Entsprechungen.
+\end{labeling}
+Falls keiner der verf�gbaren Formatierer das Ergebnis erzielt, das
+Sie erreichen m�chten, k�nnen Sie Ihren eigenen Formatierer hinzuf�gen,
+indem Sie das \lstinline{net.sf.jabref.export.layout.LayoutFormatter}-Interface
+implementieren. Wenn Sie in das Paket \lstinline{net.sf.jabref.export.layout.format} Ihre Klasse (class) einf�gen, k�nnen Sie den Formatierer mit seinem Klassennamen aufrufen,
+so wie auch die Standard"=Formatierer. Ansonsten m�ssen Sie den Formatierer
+mit seinem vollen Namen aufrufen (inklusive Paketname). In jedem Fall
+muss der Formatierer in ihrem classpath sein, wenn Sie \jabref
+starten.
+
+\paragraph{Eigene \texorpdfstring{Namens"=Formatierer}{Namens-Formatierer} verwenden}
+\label{NameFormatter}
+
+Mit \jabref~2.2 ist es jetzt m�glich, eigene Namens"=Formatierer zu definieren. Dazu wird die Syntax der Bibliographie"=Stile (bst) verwendet. Das erlaubt �u�erste Flexibilit�t, ist allerdings aufw�ndig in der Schreibweise.
+
+Sie k�nnen unter \menu{Optionen \msep Einstellungen \msep Namens"=Formatierer} Ihren eigenen Formatierer schreiben. Benutzen Sie das folgende Format:
+\begin{lstlisting}
+  <Fall1>@<Bereich11>@<Format>@<Bereich12>@<Format>@<Bereich13>(*\ldots*)@@<br>
+  <Fall2>@<Bereich21>@(*\ldots*)
+\end{lstlisting}
+Dieses Format teilt die Aufgabe, eine Liste von Autoren zu formatieren, in unterschiedliche F�lle abh�ngig von der Zahl der Autoren (das ist n�tig, weil manche Formate sich je nach der Zahl der Autoren unterscheiden). Die einzelnen F�lle werden durch \texttt{@@} voneinander getrennt und enthalten Anweisungen, wie jeder einzelne Autor in diesem Fall zu formatieren ist. Diese Anweisungen werden durch \texttt{@} getrennt.
+
+F�lle werden durch Ganzzahlen (1, 2, 3, etc.) oder das Zeichen \texttt{*} (alle Autoren) definiert. Sie geben die nachfolgenden Anweisungen an den Formatierer weiter, falls weniger oder gleich viele Autoren vorhanden sind.
+
+Bereiche sind entweder \texttt{<Ganzzahl>..<Ganzzahl>}, \texttt{<Ganzzahl>} oder das Zeichen \texttt{*}. Die Liste der Autoren f�ngt bei 1 an. Die Ganzzahlen k�nnen einen negativen Wert haben, um vom letzten Autor der Liste zu starten, wobei -1 der Wert f�r den letzten Autor ist.
+
+Als Beispiel dient die Autorenliste ">Joe Doe and Mary Jane and Bruce Bar and Arthur Kay"<:
+\begin{itemize}
+  \item 1..3 betrifft Joe, Mary und Bruce
+  \item 4..4 betrifft Arthur 
+  \item * betrifft alle
+  \item 2..-1 betrifft Mary, Bruce und Arthur
+\end{itemize}
+
+Die \texttt{<Format>}-Strings nutzen das BibTeX-Namensschema: Die vier Buchstaben v, f, l, j stehen f�r die Namensteile von, Vorname (first), Nachname (last) und Junior und werden in geschweiften Klammern gesetzt. Ein einzelner Buchstabe v, f, l, j bedeutet, dass der Name abgek�rzt werden soll. Wenn einer dieser Buchstaben oder Buchstabenpaare vorkommen, gibt \jabref alle entsprechenden Namen (eventuell abgek�rzt) aus, aber der Ausdruck in geschweiften Klammern wird nur ausgegeben, wenn  [...]
+
+Beispielsweise wird beim Format ">\texttt{\{ll\} \{vv \{von Part\}\} \{ff\}}"< die Autorenliste ">Mary Kay and John von Neumann"< von \jabref als ">Kay~~Mary"< (mit zwei Leerzeichen) und ">Neumann von von Part John"< ausgegeben.
+
+Zwei weitere Beispiele sollen das Ganze verdeutlichen; die Dokumentation von \bibtex gibt weitere Hinweise.
+
+Kurzes Beispiel: ">\texttt{\{ll\}, \{f.\}}"< formatiert ">\lstinline{Joe Doe}"< als ">\lstinline{Doe, J.}"<
+
+Ausf�hrliches Beispiel: Um 
+\begin{quote}
+">Joe Doe and Mary Jane and Bruce Bar and Arthur Kay"<
+\end{quote}
+als
+\begin{quote}
+">Doe, J., Jane, M., Bar, B. and Kay, A."<
+\end{quote}
+zu formatieren, nutzt man
+\begin{lstlisting}
+1@*@{ll}, {f}.@@2 at 1@{ll}, {f}. at 2@ and {ll}, {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}. at -1@ and {ll}, {f}.
+\end{lstlisting}
+Falls jemand eine bessere Dokumentation hierzu verfassen m�chte: Wenden Sie sich einfach an die \jabref"=Maililnglisten!
+
+\paragraph{Bedingte Ausgabe}
+
+Manche statische Ausgabe macht nur Sinn, wenn ein bestimmtes Feld
+nicht leer ist. Wenn wir z.\,B. hinter den Namen der Editoren den
+Text \texttt{(Hrsg.)} haben wollen, brauchen wir Folgendes:
+
+\begin{lstlisting}
+\format[HTMLChars,AuthorFirstFirst]{\editor} (Hrsg.)
+\end{lstlisting}
+Wenn nun aber das \emph{editor}-Feld leer ist~-- m�glicherweise ist
+es f�r den Eintrag, der exportiert werden soll, nicht erforderlich~--,
+dann w�rde das \texttt{(Hrsg.)} dennoch erscheinen. Das kann man mit
+den Kommandos \texttt{\textbackslash{}begin} und \texttt{\textbackslash{}end}
+verhindern:
+
+\begin{lstlisting}
+\begin{editor}
+\format[HTMLChars,AuthorFirstFirst]{\editor} (Hrsg.)
+\end{editor}
+\end{lstlisting}
+Die Kommandos \texttt{\textbackslash{}begin} und \texttt{\textbackslash{}end}
+sorgen daf�r, dass der Text, den sie einschlie�en, nur dann ausgegeben
+wird, wenn das Feld, auf das in den geschweiften Klammern verwiesen
+wird, f�r den zu exportierenden Eintrag definiert und damit nicht
+leer ist.
+
+\tip{Das Benutzen der Kommandos \texttt{\textbackslash{}begin} und
+\texttt{\textbackslash{}end} ist ein Schl�ssel zum Erstellen von Layout-Dateien,
+die mit einer Vielzahl von Eintragstypen umgehen k�nnen.}
+
+
+\paragraph{Gruppierte Ausgabe}
+
+Wenn Sie Ihre Eintr�ge auf der Basis eines bestimmten Feldes gruppieren
+wollen, benutzen Sie die Kommandos f�r die gruppierte Ausgabe. Die
+gruppierte Ausgabe ist der bedingten Ausgabe sehr �hnlich, au�er dass
+der Text zwischen den Kommandos nur ausgegeben wird, wenn das Feld,
+auf das in den geschweiften Klammern verwiesen wird, unterschiedliche
+Werte enth�lt.
+
+Nehmen wir zum Beispiel an, dass wir die Ausgabe nach dem \emph{keyword}
+(Stichwort) gruppieren wollen. Bevor die Datei exportiert wird, m�ssen
+die Eintr�ge nach dem \emph{keyword} sortiert worden sein. Dann benutzen
+Sie die folgenden Kommandos, um nach \emph{keyword} zu gruppieren:
+
+\begin{lstlisting}
+\begingroup{keywords}
+New Category: \format[HTMLChars]{\keywords}
+\endgroup{keywords}
+\end{lstlisting}
+
+\subsection{Importfilter}
+
+\noindent \jabref bietet Ihnen die M�glichkeit, ganz �hnlich den Standard-Importern, eigene Importer 
+zu definieren und zu benutzen. Man definiert einen Importer durch eine oder mehrere Java"=\emph{Klassen},
+die Dateiinhalte aus einem sogenannten \emph{Input stream} lesen
+und daraus \bibtex{}-Eintr�ge erzeugen. Sie k�nnen vorkompilierte Importer einbinden, die Sie vielleicht 
+von SourceForge erhalten haben (siehe Abschnitt ">\nameref{subsec:Ihre-Arbeit}"<). Sie k�nnen auch
+mit Grundkenntnissen der Java"=Programmierung eigene Importer f�r Referenzquellen, die f�r Sie wichtig sind,
+erstellen oder neue, verbesserte Versionen existierender Importer einbinden, ohne \jabref neu zu
+kompilieren.
+
+\paragraph{Vorrangsregeln}
+
+Externe Importfilter haben Vorrang vor Standard-Importern. So k�nnen Sie mit Ihren Importern
+die existierenden Importer in der automatischen Formaterkennung und an der Kommandozeile in \jabref �berschreiben. Externe Importfilter selbst sind dann nach Namen sortiert.
+
+\subsubsection{Einen externen Importfilter hinzuf�gen}
+
+Stellen Sie sicher, dass Sie den Importer in kompilierter Form haben (eine oder mehrere
+\texttt{.class} Dateien) und dass die Klassendateien
+in einer Verzeichnisstruktur entsprechend ihrer Package"=Struktur liegen. 
+Um einen neuen externen Importfilter hinzuzuf�gen, �ffnen Sie den Dialog 
+\menu{Optionen \msep{} Verwalte externe Importfilter}, und klicken Sie auf
+\menu{Aus Klassenpfad hinzuf�gen}. Ein Dateiauswahl"=Fenster erscheint, 
+mit dem Sie den Klassenpfad des Importers w�hlen, das hei�t den obersten Ordner,
+in dem die Package"=Struktur Ihres Importers beginnt. In einem zweiten Dateiauswahl"=Fenster
+w�hlen Sie die \emph{.class}"=Datei Ihres Importers, die von \texttt{\textbackslash{}ImportFormat} abgeleitet
+ist. Wenn Sie \menu{Klasse ausw�hlen} klicken, erscheint Ihr neuer Importer
+in der Liste der externen Importfilter. Alle externen Importfilter erscheinen in den
+\jabref"=Untermen�s \menu{Datei \msep{} Importieren \msep{} Externe Importfilter} und 
+\menu{Datei \msep{} Importieren und Anh�ngen \msep{} Externe Importfilter}.
+
+\tip[Bitte beachten Sie: ]{Wenn Sie die Klassen in ein anderes Verzeichnis verschieben,
+m�ssen Sie den Importer entfernen und neu hinzuf�gen. Wenn Sie einen Importfilter
+mit einem bereits vorhandenen Namen registrieren, ersetzt \jabref den vorhandenen
+externen Importfilter. Auch wenn es in manchen F�llen m�glich ist, einen schon registrierten
+Importer zu aktualisieren ohne \jabref neu zu starten (n�mlich dann,
+wenn der Importer nicht im Klassenpfad von \jabref ist), empfehlen wir, grunds�tzlich
+\jabref neu zu starten, wenn Sie ein Update eines externen Importers durchgef�hrt haben.
+Sie k�nnen auch Importer aus ZIP- oder JAR-Archiven registrieren, w�hlen Sie einfach
+\emph{\menu{Aus Archiv-Datei hinzuf�gen}}, dann das ZIP- oder JAR-Archiv und dann den Eintrag
+(Klassendatei), der den neuen Importer darstellt.}
+
+\subsubsection{Einen Importfilter entwickeln}
+
+Bitte schauen Sie auf unseren Download-Seiten nach Beispielen und n�tzlichen Dateien zur 
+Entwicklung Ihres Importfilters.
+
+\paragraph{Ein einfaches Beispiel}
+
+Angenommen, wir wollen Dateien der folgenden Form importieren:
+\begin{lstlisting}
+1936;John Maynard Keynes;The General Theory of Employment, Interest and Money
+2003;Boldrin & Levine;Case Against Intellectual Monopoly
+2004;ROBERT HUNT AND JAMES BESSEN;The Software Patent Experiment
+\end{lstlisting}
+
+\subparagraph{SimpleCsvImporter Erstellen}
+
+Erzeugen Sie in einem Text"=Editor eine Klasse, die von \texttt{ImportFormat} abgeleitet
+ist und die folgende Methoden implementiert:\\
+\texttt{getFormatName()}, 
+\texttt{isRecognizedFormat()}
+und \texttt{importEntries()}.\\
+Hier ein Beispiel:
+\begin{lstlisting}
+import java.io.*;
+import java.util.*;
+import net.sf.jabref.*;
+import net.sf.jabref.imports.ImportFormat;
+import net.sf.jabref.imports.ImportFormatReader;
+
+public class SimpleCsvImporter extends ImportFormat {
+
+  public String getFormatName() {
+    return "Simple CSV Importer";
+  }
+
+  public boolean isRecognizedFormat(InputStream stream) throws IOException {
+    return true; // this is discouraged except for demonstration purposes
+  }
+
+  public List importEntries(InputStream stream) throws IOException {
+  	ArrayList bibitems = new ArrayList();
+    BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
+
+    String line = in.readLine();
+    while (line != null) {
+      if (!"".equals(line.trim())) {
+        String[] fields = line.split(";");
+        BibtexEntry be = new BibtexEntry(Util.createNeutralId());
+        be.setType(BibtexEntryType.getType("techreport"));
+        be.setField("year", fields[0]);
+        be.setField("author", fields[1]);
+        be.setField("title", fields[2]);
+        bibitems.add(be);
+        line = in.readLine();
+      }
+    }
+    return bibitems;
+  }
+}
+\end{lstlisting}
+
+\subparagraph{SimpleCsvImporter �bersetzen}
+
+Beachten Sie, dass die Beispielklasse im Default"=Package liegt. Angenommen, sie liegt unter
+\\\lstinline{/meinpfad/SimpleCsvImporter.java}, die Datei \texttt{JabRef-2.0.jar} ist im gleichen Verzeichnis wie
+\lstinline{SimpleCsvImporter.java} und Java ist in Ihrem Kommandopfad. 
+Kompilieren Sie die Klasse mit JSDK 1.4 zum Beispiel mit folgendem Kommandozeilen"=Aufruf: 
+\begin{lstlisting}
+javac -classpath JabRef-2.0.jar SimpleCsvImporter.java
+\end{lstlisting}
+Nun sollte dort auch eine Datei \texttt{/mypath/SimpleCsvImporter.class} liegen.
+
+\subparagraph{SimpleCsvImporter registrieren}
+
+�ffnen Sie in \jabref \menu{Optionen} \msep{} \menu{Verwaltung externer Importfilter} und klicken Sie
+auf \menu{Aus Klassenpfad hinzuf�gen}. Navigieren Sie nach \texttt{/meinpfad} und 
+klicken Sie \menu{Klassenpfad ausw�hlen}. W�hlen Sie anschlie�end die Datei \texttt{SimpleCsvImporter.class}
+und klicken Sie \menu{Klasse ausw�hlen}. Ihr Importfilter sollte nun in der Liste der
+externen Importfilter unter dem Namen >>Simple CSV Importer<< erscheinen und,
+sobald Sie \menu{Schlie�en} gew�hlt haben, auch in den Untermen�s \menu{Datei} \msep{} \menu{Importieren} \msep{} 
+\menu{Externe Importfilter} und \menu{Datei} \msep{} \menu{Importieren und Anh�ngen} \msep{} \menu{Externe Importfilter} 
+des \jabref-Hauptfensters auftauchen.
+
+\subsection{Teilen Sie Ihre Arbeit mit anderen}
+\label{subsec:Ihre-Arbeit}
+Mit externen Layout-Dateien und Importfiltern ist es einfach, Ihre eigenen Export-Formate und Importfilter
+mit anderen Anwendern gemeinsam zu benutzen. Falls Sie einen Exportfilter oder einen Importfilter
+f�r ein Format erstellt haben, das noch nicht von \jabref unterst�tzt wird,
+oder falls Sie einen bestehenden Exportfilter oder Importfilter verbessern, m�chten
+wir Sie ermutigen, Ihre Arbeit auf der \href{http://sourceforge.net/projects/jabref/}{SourceForge.net"=Seite} bereitzustellen.
+Dasselbe gilt f�r Formatierklassen, die Sie schreiben. Wir w�rden
+uns freuen, eine Sammlung von bereitgestellten Layout"=Dateien verteilen
+zu k�nnen oder die Standard"=Exportfilter, -Formatierer und -Importfilter
+zu erweitern.
+
+\clearpage 
+\section{Tastenk�rzel}
+
+Die Men�s k�nnen alle �ber Tastenk�rzel angesteuert werden, die meisten
+Men�befehle ebenfalls. Das ist immer am unterstrichenen Buchstaben
+sichtbar.
+
+Es folgt ein �berblick �ber die wichtigsten Tastenk�rzel ohne Anspruch
+auf Vollst�ndigkeit~\ldots{}
+
+\begin{longtable}{p{66mm}p{33mm}}
+\textbf{Datei (Forts.)}&
+\tabularnewline
+\endhead
+\textbf{Datei}&
+\tabularnewline
+\endfirsthead
+Datei �ffnen&
+STRG-O\tabularnewline
+Datei speichern&
+STRG-S\tabularnewline
+Datei speichern unter~\ldots{}&
+STRG-SHIFT-S\tabularnewline
+Datei schlie�en&
+STRG-W\tabularnewline
+Sitzung speichern&
+F11\tabularnewline
+Sitzung laden&
+F12\tabularnewline
+\jabref beenden&
+STRG-Q\tabularnewline
+\end{longtable}
+
+\begin{longtable}{p{66mm}p{33mm}}
+\textbf{Bearbeiten (Forts.)}&
+\tabularnewline
+\endhead
+\textbf{Bearbeiten}&
+\tabularnewline
+\endfirsthead
+Neuer Eintrag&
+STRG-N\tabularnewline
+Neuer Eintrag -- Article&
+STRG-SHIFT-A\tabularnewline
+Neuer Eintrag -- Book&
+STRG-SHIFT-B\tabularnewline
+Neuer Eintrag -- Phdthesis&
+STRG-SHIFT-T\tabularnewline
+Neuer Eintrag -- Inbook&
+STRG-SHIFT-I\tabularnewline
+Neuer Eintrag -- Mastersthesis&
+STRG-SHIFT-M\tabularnewline
+Neuer Eintrag -- Proceedings&
+STRG-SHIFT-P\tabularnewline
+Neuer Eintrag -- Unpublished&
+STRG-SHIFT-U\tabularnewline
+Neuer Eintrag aus Klartext&
+STRG-SHIFT-N\tabularnewline
+Eintrag bearbeiten&
+STRG-E\tabularnewline
+\bibtex{}-Keys generieren&
+STRG-G\tabularnewline
+R�ckg�ngig&
+STRG-Y\tabularnewline
+Wiederholen&
+STRG-Z\tabularnewline
+Ausschneiden&
+STRG-X\tabularnewline
+Kopieren&
+STRG-C\tabularnewline
+Einf�gen&
+STRG-V\tabularnewline
+L�schen&
+Entf\tabularnewline
+Alles ausw�hlen&
+STRG-A\tabularnewline
+\texttt{\textbackslash{}cite\{BibTeX-Key\}} kopieren&
+STRG-K\tabularnewline
+Eintr�ge markieren&
+STRG-M\tabularnewline
+Markierung l�schen&
+STRG-SHIFT-M\tabularnewline
+Pr�ambel bearbeiten&
+STRG-P\tabularnewline
+Strings bearbeiten&
+STRG-T\tabularnewline
+\end{longtable}
+
+\begin{longtable}{p{66mm}p{33mm}}
+\textbf{Ansicht / Navigation (Forts.)}&
+\tabularnewline
+\endhead
+\textbf{Ansicht / Navigation}&
+\tabularnewline
+\endfirsthead
+Zur n�chsten ge�ffneten Datei springen&
+STRG-Bild ab\tabularnewline
+Zum vorherigen TAB springen&
+STRG-Bild auf\tabularnewline
+Gruppendialog ein-/ausblenden&
+STRG-SHIFT-G\tabularnewline
+Eintragsvorschau ein-/ausblenden&
+STRG-F9\tabularnewline
+Layout der Eintragsvorschau wechseln&
+F9\tabularnewline
+\end{longtable}
+
+\begin{longtable}{p{66mm}p{33mm}}
+\textbf{Externe Programme / Internet (Forts.)}&
+\tabularnewline
+\endhead
+\textbf{Externe Programme / Internet}&
+\tabularnewline
+\endfirsthead
+Literaturangaben in \LyX einf�gen&
+STRG-L\tabularnewline
+Literaturangaben in WinEdt einf�gen&
+STRG-SHIFT-W\tabularnewline
+URL/DOI �ffnen&
+F3\tabularnewline
+PDF/PS �ffnen&
+F4\tabularnewline
+PDF-Links synchronisieren&
+SHIFT-F4\tabularnewline
+PS-Links synchronisieren&
+STRG-F4\tabularnewline
+Medline abrufen&
+F5\tabularnewline
+CiteSeer abrufen&
+F6\tabularnewline
+Literaturangaben von CiteSeer abrufen&
+F7\tabularnewline
+\end{longtable}
+
+\begin{longtable}{p{66mm}p{33mm}}
+\textbf{Extras / Sonstiges (Forts.)}&
+\tabularnewline
+\endhead
+\textbf{Extras / Sonstiges}&
+\tabularnewline
+\endfirsthead
+Suchen&
+STRG-F\tabularnewline
+Weitersuchen&
+STRG-SHIFT-F\tabularnewline
+Suchen \& Ersetzen&
+STRG-R\tabularnewline
+Hilfe&
+F1\tabularnewline
+\end{longtable}
+
+\clearpage 
+\section[Fragen und Antworten]{H�ufige Fragen und Antworten}\label{sec:faq}
+%\secttoc
+
+Die folgenden Fragen und Antworten sind der \href{http://jabref.sourceforge.net/faq.php}{\jabref-Homepage} entnommen. Falls Sie dar�ber hinaus Fragen haben, die das Handbuch nicht beantworten konnte, haben Sie folgende M�glichkeiten, zu einer Antwort zu kommen:
+\begin{enumerate}
+	\item Durchsuchen Sie die \href{http://sourceforge.net/forum/?group_id=92314}{Foren} auf der Projektseite bei Sourceforge.
+	\item Durchsuchen Sie das \href{http://sourceforge.net/mailarchive/forum.php?forum_name=jabref-users}{Archiv} der \jabref-Mailingliste.
+	\item Stellen Sie Ihre Frage in einem der Foren oder auf der \href{http://sourceforge.net/mail/?group_id=92314}{\jabref-Mailingliste}.
+\end{enumerate}
+
+\faq{L�uft \jabref unter freiem Java (Classpath, Kaffee GCJ etc.)?}{Am 13.~November~2006 hat Sun sein Java unter die GNU General Public License (Version~2) gestellt, so dass die Antwort ">Ja"< lautet. Ansonsten ist zu sagen, dass eine unserer Abh�ngigkeiten derzeit zu einem Absturz f�hrt, wenn mit einer anderen Java API als der von Sun gearbeitet wird. Das gilt f�r Version 0.92 von Classpath.}
+
+\faq{\label{faq-linux}\jabref startet nicht unter Linux. Was kann ich tun?}{\jabref l�uft unter Linux, wenn Sie eine Java Runtime Environment (JRE) von Sun in der Version~1.4.2 oder einer neueren Version verwenden. Falls \jabref dennoch nicht starten sollte, k�nnen Sie folgende Fehlersuche durchf�hren:
+Starten Sie \texttt{java -{-}version} von der Kommandozeile. Falls dabei kein Produkt von Sun Microsystems verwendet wird (sondern beispielsweise angezeigt wird, dass Sie GCJ VM verwenden), selbst wenn Sie die JRE von Sun installiert haben, m�ssen Sie Ihr Setup anpassen. Da das Vorgehen daf�r sehr von Ihrer Linux-Distribution abh�ngt, k�nnen wir keine Hinweise f�r jede m�gliche Konstellation geben.
+Unter Debian/Ubuntu k�nnen Sie die Einstellungen anpassen, indem Sie \texttt{sudo update-alternatives -{-}config java} aufrufen (dazu brauchen Sie admin-Rechte). In dem Dialog, der daraufhin erscheint, w�hlen Sie die Sun JDK oder JRE. Alternativ k�nnen Sie auch nach der Java-Programmdatei suchen und diese direkt ausf�hren. In Ubuntu findet man Java gew�hnlich unter \texttt{/usr\slash{}lib\slash{}jvm\slash{}java-1.5.0-sun\slash{}jre\slash{}bin\slash{}java}.
+Wenn Sie keine admin-Rechte auf dem Computer haben, k�nnen Sie die Sun JRE in ihrem Home-Verzeichnis installieren. Sie m�ssen dann darauf achten, dass Sie die richtige Programmdatei aufrufen. Wenn Sie die JRE z.\,B. in einen Ordner namens ">java"< in ihrem Home-Verzeichnis installiert haben, geben Sie \texttt{\texttildelow{}/java/jre/bin/java -jar JabRef-2.1.jar} (bzw. die entsprechende Versionsnummer) in der Kommandozeile ein.}
+
+\clearpage\faq{Ich arbeite unter Ubuntu und \jabref startet, wenn ich auf das Icon klicke, aber nicht von der Kommandozeile. Wo liegt das Problem?}{Sie haben mehrere Java Virtual Machines installiert und von der Kommandozeile wird die falsche gew�hlt. Schauen Sie unter Frage \ref{faq-linux} nach, wie Sie die Einstellungen �ndern k�nnen.}
+
+\faq{Wie kann ich verhindern, dass \jabref beim Speichern der .bib"=Datei in bestimmten Feldern (wie \texttt{title}) Zeilenumbr�che einf�gt?}{�fnnen Sie \menu{Optionen \msep{} Einstellungen}. Im Bereich \menu{Allgemein} gibt es die Option \menu{Beim Speichern keinen Zeilenumbruch in den folgenden Feldern einf�gen}. Diese Option enth�lt eine Liste von Feldnamen. In Feldern, die Sie dieser Liste hinzuf�gen (abgetrennt mit einem Semikolon) wird beim Speichern kein Zeilenumbruch hinzugef�gt.}
+
+\faq{Mein Virenscanner sagt mir, dass \jabref ein Virus ist. Ist der Server gef�hrdet?}{Nein, aber der Windows"=Installer benutzt das \href{http://nsis.sourceforge.net/}{Nullsoft Scriptable Install System (NSIS)} in der Version~2.18 (seit \jabref~2.1), das ungl�cklicherweise Installer produziert, die von einigen Virenscannern als Virus eingesch�tzt werden. Wenn Sie mehr dar�ber erfahren wollen, sehen Sie sich die \href{http://forums.winamp.com/showthread.php?postid=1977648}{Diskussion im [...]
+
+Als Workaround und falls Sie Bedenken haben, den Installer zu benutzen, k�nnen Sie immer die plattformunabh�ngige jar"=Datei benutzen (siehe dazu Abschnitt ">\nameref{subsub:jar}"<).}
+
+\clearpage 
+\section{Entwicklung}
+\secttoc
+\bigskip
+
+\noindent \jabref ist ein \emph{Open Source} Projekt, das hei�t, dass jede(r)
+dazu beitragen kann, das Programm zu verbessern und weiterzuentwickeln.
+Wenn Sie Anregungen, W�nsche oder Fragen haben, ist die erste Anlaufstelle
+die \href{http://sourceforge.net/projects/jabref/}{Projektseite bei \emph{Sourceforge}}.
+Dort gibt es Foren, in denen Sie Ihre Fragen stellen k�nnen, und eine
+Mailingliste rund um \jabref. Auch Ihre W�nsche \emph{(Feature
+Requests)} und Fehlermeldungen \emph{(Bug Reports)} k�nnen Sie dort
+loswerden. Um sich direkt als Entwickler einzubringen, wenden Sie
+sich an einen der beiden Maintainer (Morten O. Alver und Nizar N.
+Batada)~-- die E-Mail-Adressen finden Sie auf der Projektseite bei
+\emph{Sourceforge}. Sie brauchen lediglich einen Sourceforge-Login,
+der dann f�r das Projekt freigeschaltet werden kann.
+
+
+\subsection{Beschr�nkungen und bekannte Probleme (Bugs)}
+
+\begin{quote}
+\emph{Da sich die Software schneller entwickelt als dieses Handbuch, muss an dieser Stelle auf die \href{http://sourceforge.net/projects/jabref/}{Projektseite bei Sourceforge} verwiesen werden.}
+\end{quote}
+
+\subsection{Danksagung}
+
+Neben den Entwicklern, die die Hilfe"=Seiten des Programms geschrieben haben, danke ich Robert Bitsche, Daniel F�rderer, Thomas Fritz, Tim Hoffmann, Axel Junge, Jan Suhr und Tobias Wolf f�r ihre hilfreichen Tipps und Anmerkungen zum Handbuch.
+
+Seit den Anf�ngen als \emph{BibKeeper} (von Morten O.~Alver) und \emph{JBibtexManager} (von Nizar N.~Batada) haben
+zahlreiche Personen dazu beigetragen, dass \jabrefversion{} zu dem
+geworden ist, was es ist. Wer zum Entwicklerteam geh�rt und wer alles zum Programm beigetragen hat, k�nnen Sie im Programm unter \menu{Hilfe \msep{} �ber JabRef} nachsehen.
+
+\subsection{Lizenz}
+
+\jabref ist frei verf�gbar unter den Bedingungen der \href{http://www.gnu.org/copyleft/gpl.html}{GNU General Public License}. Es gibt unterschiedliche Softwarepakete, die von \jabref genutzt werden. Wenn Sie sich �ber die Lizenzbestimmungen dieser Fremdsoftware informieren wollen, schauen Sie bitte unter \menu{Hilfe \msep{} �ber JabRef} nach.
+
+\appendix
+\newpage
+\nocite{*}
+\hypertarget{bibliography}{}
+\bibliographystyle{jurabib}
+\bibliography{JabRef-UserManual_de}
+
+
+\newpage
+\addsec[Versionsgeschichte]{Versionsgeschichte dieses Handbuchs}
+
+\label{RevisionHistory}
+
+%\begin{revhist}{\versiondate}%endg�ltiges Datum}
+%\item �nderung
+%\end{revhist}
+
+\begin{revhist}{\versiondate}%26.\,1.\,2010}
+\item Lizenz ge�ndert
+\item Format von A4 auf A5 ge�ndert (bessere Bildschirmlesbarkeit)
+\item Abschnitte ">\nameref{Export-OOo}"< und ">\nameref{CustomExports}"< aktualisiert
+\item Abschnitte ">\nameref{search-regular-expressions}"< und ">\nameref{kommandozeilenoptionen}"< erg�nzt
+\item Versionsnummer (2.4) angepasst
+\item Kleinere �nderungen
+\end{revhist}
+
+\begin{revhist}{1.\,12.\,2007}
+\item Abschnitt ">\nameref{NameFormatter}"< hinzugef�gt
+\item Abschnitte ">\nameref{par:Feldformatierer}"< und ">\nameref{subsub:SpezielleFeldmarken}"< erg�nzt
+\end{revhist}
+
+\begin{revhist}{4.\,7.\,2007}
+\item Abschnitt ">\nameref{FileLinks}"< hinzugef�gt
+\item Abschnitt ">Links zu externen Dateien"< in \nameref{ExternalFiles} umbenannt
+\item Kleine �nderungen
+\end{revhist}
+
+\begin{revhist}{8.\,6.\,2007}
+\item Abschnitt ">Import und Export"< in zwei Abschnitte unterteilt
+\item Abschnitt ">\nameref{sec:faq}"< erg�nzt
+\item Abschnitte ">\nameref{EntryEditorHelp}"< und ">\nameref{subsec:System-Voraussetzungen}"< angepasst
+\item Fehler im Abschnitt ">\nameref{PreviewHelp}"< korrigiert
+\item Versionsnummer angepasst
+\item Beschreibung der Felder ">doi"< und ">eid"< hinzugef�gt
+\item Fehler im Link zum Mail-Archiv beseitigt
+\item Einleitung leicht erg�nzt
+\item Generelle �berarbeitung des Dokuments
+\end{revhist}
+
+\begin{revhist}{18.\,4.\,2007}
+\item Abschnitte ">\nameref{LabelPatterns}"<, ">\nameref{StringEditorHelp}"< und ">\nameref{par:Feldformatierer}"< aktualisiert
+\item Fehler in Abschnitt ">\nameref{subsec:Starten-Kommandozeile}"< entfernt
+\item \jabref-Logo ge�ndert
+\item Ein paar Kleinigkeiten
+\end{revhist}
+
+\begin{revhist}{20.\,3.\,2007}
+\item Abschnitt ">\nameref{subsubsec:Hinzufuegen-Exportfilter}"< angepasst
+\item Kleinere �nderungen
+\end{revhist}
+
+\begin{revhist}{1.\,2.\,2007}
+\item Abschnitte ">\nameref{EndnoteFilters}"<, ">\nameref{subsubsec:endnote-jabref}"<, ">\nameref{subsec:about}"< und ">\nameref{sec:faq}"< �berarbeitet
+\item Literaturverzeichnis um Eintrag von \cite{btxfaq} erg�nzt
+\item Und noch ein paar kleine �nderungen
+\end{revhist}
+
+\begin{revhist}{19.\,1.\,2007}
+\item Abschnitt ">\nameref{Eintragstypen}"< hinzugef�gt
+\item Grafik auf Titelseite ausgetauscht
+\item Ein paar kleinere �nderungen
+\end{revhist}
+
+\begin{revhist}{10.\,12.\,2006}
+\item Abschnitt ">XMP-Metadaten"< leicht verbessert
+\item FAQ zu freien Java-APIs aktualisiert (Suns Java ist jetzt selbst frei)
+\item Wie immer: kleinere �nderungen
+\end{revhist}
+
+\begin{revhist}{9.\,12.\,2006}
+\item Abschnitte ">Weitere Hilfen"< in ">H�ufige Fragen und Antworten (FAQ)"< umbenannt
+\item FAQs von der Homepage �bersetzt und integriert
+\item Literaturverzeichnis um Eintrag von \cite{Fenn2006} erg�nzt
+\item Ein paar kleinere �nderungen
+\end{revhist}
+
+\begin{revhist}{30.\,11.\,2006}
+\item Abschnitte ">Weitere Hilfen"< hinzugef�gt
+\end{revhist}
+
+\begin{revhist}{28.\,11.\,2006}
+\item Abschnitte ">Abk�rzung von Zeitschriftentiteln"<, ">XMP-Metadaten"<, ">IEEExplore"< und ">Externer Zugriff"< hinzugef�gt
+\item Abschnitte ">Einf�hrung in \bibtex{}"<, ">Das Hauptfenster"<, ">Links zu externen Dateien"< und ">Jabref und Online-Datenbanken"< erweitert
+\item Abschnitt ">Suchfunktionen"< aktualisiert
+\item Abschnitt ">Entwicklung"< gek�rzt
+\item Paket ">listings"< eingebunden (ersetzt Umgebung ">lyxcode"<)
+\item Typewriter-Schrift \texttt{beramono} eingesetzt
+\item Einige kleinere �nderungen
+\end{revhist}
+
+\begin{revhist}{30.\,1.\,2006}
+\item Abschnitt >>\jabref-Bibliographien in OpenOffice.org benutzen<< aktualisiert
+\item Abschnitt zur Erzeugung der \bibtex{}-Keys aktualisiert
+\item Neues Kapitel (>>Externe Importfilter<<), geschrieben von Andreas Rudert
+\item Einige kleinere �nderungen
+\end{revhist}
+
+\begin{revhist}{6.\,12.\,2005}
+\item Lizenzbedingungen f�r das Handbuch hinzugef�gt
+\item von PDF~1.4 auf PDF~1.2 umgestellt
+\item mehrere kleinere �nderungen
+\end{revhist}
+
+\begin{revhist}{16.\,11.\,2005}
+\item Erstentwurf von Dominik Wa�enhoven, basierend
+auf dem unver�ffentlichten englischen \emph{Initial Draft} von Nizar Batada (20.\,2.\,2004)
+und den Hilfeseiten des Programms
+\end{revhist}
+
+\end{document}
diff --git a/src/osx/osxadapter/OSXAdapter.java b/src/osx/osxadapter/OSXAdapter.java
index 8d8ea27..1b4be1f 100644
--- a/src/osx/osxadapter/OSXAdapter.java
+++ b/src/osx/osxadapter/OSXAdapter.java
@@ -1,133 +1,133 @@
-/*
-  File:    OSXAdapter.java
-
-  Description:A single class with clear, static entry points for hooking existing preferences,
-        about, quit functionality from an existing Java app into handlers for the Mac OS X
-        application menu.  Useful for developers looking to support
-        multiple platforms with a single codebase, and support Mac OS X features with
-        minimal impact.
-
-        This sample is designed for Java 1.4.1 and later on Mac OS X.
-
-  Author:    mdrance
-
-  Copyright:   � Copyright 2003 Apple Computer, Inc. All rights reserved.
-
-  Disclaimer:  IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc.
-        ("Apple") in consideration of your agreement to the following terms, and your
-        use, installation, modification or redistribution of this Apple software
-        constitutes acceptance of these terms.  If you do not agree with these terms,
-        please do not use, install, modify or redistribute this Apple software.
-
-        In consideration of your agreement to abide by the following terms, and subject
-        to these terms, Apple grants you a personal, non-exclusive license, under Apple's
-        copyrights in this original Apple software (the "Apple Software"), to use,
-        reproduce, modify and redistribute the Apple Software, with or without
-        modifications, in source and/or binary forms; provided that if you redistribute
-        the Apple Software in its entirety and without modifications, you must retain
-        this notice and the following text and disclaimers in all such redistributions of
-        the Apple Software.  Neither the name, trademarks, service marks or logos of
-        Apple Computer, Inc. may be used to endorse or promote products derived from the
-        Apple Software without specific prior written permission from Apple.  Except as
-        expressly stated in this notice, no other rights or licenses, express or implied,
-        are granted by Apple herein, including but not limited to any patent rights that
-        may be infringed by your derivative works or by other works in which the Apple
-        Software may be incorporated.
-
-        The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
-        WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
-        WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-        PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
-        COMBINATION WITH YOUR PRODUCTS.
-
-        IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
-        CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-        GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-        ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
-        OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
-        (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
-        ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-  Change History (most recent first):
-    04092003  mdrance    added comments
-
-*/
-/*package osxadapter;
-
-import net.sf.jabref.JabRefFrame;
-import com.apple.eawt.*;
-
-public class OSXAdapter extends ApplicationAdapter {
-
-  // pseudo-singleton model; no point in making multiple instances
-  // of the EAWT application or our adapter
-  private static OSXAdapter            theAdapter;
-  private static com.apple.eawt.Application    theApplication;
-
-  // reference to the app where the existing quit, about, prefs code is
-  private JabRefFrame mainApp;
-
-  private OSXAdapter (JabRefFrame inApp) {
-    mainApp = inApp;
-  }
-
-  // implemented handler methods.  These are basically hooks into existing
-  // functionality from the main app, as if it came over from another platform.
-  public void handleAbout(ApplicationEvent ae) {
-    if (mainApp != null) {
-      ae.setHandled(true);
-      mainApp.about();
-    } else {
-      throw new IllegalStateException("handleAbout: MyApp instance detached from listener");
-    }
-  }
-
-  public void handlePreferences(ApplicationEvent ae) {
-    if (mainApp != null) {
-      mainApp.preferences();
-      ae.setHandled(true);
-    } else {
-      throw new IllegalStateException("handlePreferences: MyApp instance detached from listener");
-    }
-  }
-
-  public void handleQuit(ApplicationEvent ae) {
-    if (mainApp != null) {
-      /*
-      /  You MUST setHandled(false) if you want to delay or cancel the quit.
-      /  This is important for cross-platform development -- have a universal quit
-      /  routine that chooses whether or not to quit, so the functionality is identical
-      /  on all platforms.  This example simply cancels the AppleEvent-based quit and
-      /  defers to that universal method.
-      *//*
-      ae.setHandled(false);
-      mainApp.quit();
-    } else {
-      throw new IllegalStateException("handleQuit: MyApp instance detached from listener");
-    }
-  }
-
-
-  // The main entry-point for this functionality.  This is the only method
-  // that needs to be called at runtime, and it can easily be done using
-  // reflection (see MyApp.java)
-  public static void registerMacOSXApplication(JabRefFrame inApp) {
-    if (theApplication == null) {
-      theApplication = new com.apple.eawt.Application();
-    }
-
-    if (theAdapter == null) {
-      theAdapter = new OSXAdapter(inApp);
-    }
-    theApplication.addApplicationListener(theAdapter);
-  }
-
-  // Another static entry point for EAWT functionality.  Enables the
-  // "Preferences..." menu item in the application menu.
-  public static void enablePrefs(boolean enabled) {
-    if (theApplication == null) {
-      theApplication = new com.apple.eawt.Application();
-    }
-    theApplication.setEnabledPreferencesMenu(enabled);
-  }
-}   */
+/*
+  File:    OSXAdapter.java
+
+  Description:A single class with clear, static entry points for hooking existing preferences,
+        about, quit functionality from an existing Java app into handlers for the Mac OS X
+        application menu.  Useful for developers looking to support
+        multiple platforms with a single codebase, and support Mac OS X features with
+        minimal impact.
+
+        This sample is designed for Java 1.4.1 and later on Mac OS X.
+
+  Author:    mdrance
+
+  Copyright:   � Copyright 2003 Apple Computer, Inc. All rights reserved.
+
+  Disclaimer:  IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc.
+        ("Apple") in consideration of your agreement to the following terms, and your
+        use, installation, modification or redistribution of this Apple software
+        constitutes acceptance of these terms.  If you do not agree with these terms,
+        please do not use, install, modify or redistribute this Apple software.
+
+        In consideration of your agreement to abide by the following terms, and subject
+        to these terms, Apple grants you a personal, non-exclusive license, under Apple's
+        copyrights in this original Apple software (the "Apple Software"), to use,
+        reproduce, modify and redistribute the Apple Software, with or without
+        modifications, in source and/or binary forms; provided that if you redistribute
+        the Apple Software in its entirety and without modifications, you must retain
+        this notice and the following text and disclaimers in all such redistributions of
+        the Apple Software.  Neither the name, trademarks, service marks or logos of
+        Apple Computer, Inc. may be used to endorse or promote products derived from the
+        Apple Software without specific prior written permission from Apple.  Except as
+        expressly stated in this notice, no other rights or licenses, express or implied,
+        are granted by Apple herein, including but not limited to any patent rights that
+        may be infringed by your derivative works or by other works in which the Apple
+        Software may be incorporated.
+
+        The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
+        WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+        WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+        PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
+        COMBINATION WITH YOUR PRODUCTS.
+
+        IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+        CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+        GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+        ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
+        OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
+        (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
+        ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+  Change History (most recent first):
+    04092003  mdrance    added comments
+
+*/
+/*package osxadapter;
+
+import net.sf.jabref.JabRefFrame;
+import com.apple.eawt.*;
+
+public class OSXAdapter extends ApplicationAdapter {
+
+  // pseudo-singleton model; no point in making multiple instances
+  // of the EAWT application or our adapter
+  private static OSXAdapter            theAdapter;
+  private static com.apple.eawt.Application    theApplication;
+
+  // reference to the app where the existing quit, about, prefs code is
+  private JabRefFrame mainApp;
+
+  private OSXAdapter (JabRefFrame inApp) {
+    mainApp = inApp;
+  }
+
+  // implemented handler methods.  These are basically hooks into existing
+  // functionality from the main app, as if it came over from another platform.
+  public void handleAbout(ApplicationEvent ae) {
+    if (mainApp != null) {
+      ae.setHandled(true);
+      mainApp.about();
+    } else {
+      throw new IllegalStateException("handleAbout: MyApp instance detached from listener");
+    }
+  }
+
+  public void handlePreferences(ApplicationEvent ae) {
+    if (mainApp != null) {
+      mainApp.preferences();
+      ae.setHandled(true);
+    } else {
+      throw new IllegalStateException("handlePreferences: MyApp instance detached from listener");
+    }
+  }
+
+  public void handleQuit(ApplicationEvent ae) {
+    if (mainApp != null) {
+      /*
+      /  You MUST setHandled(false) if you want to delay or cancel the quit.
+      /  This is important for cross-platform development -- have a universal quit
+      /  routine that chooses whether or not to quit, so the functionality is identical
+      /  on all platforms.  This example simply cancels the AppleEvent-based quit and
+      /  defers to that universal method.
+      *//*
+      ae.setHandled(false);
+      mainApp.quit();
+    } else {
+      throw new IllegalStateException("handleQuit: MyApp instance detached from listener");
+    }
+  }
+
+
+  // The main entry-point for this functionality.  This is the only method
+  // that needs to be called at runtime, and it can easily be done using
+  // reflection (see MyApp.java)
+  public static void registerMacOSXApplication(JabRefFrame inApp) {
+    if (theApplication == null) {
+      theApplication = new com.apple.eawt.Application();
+    }
+
+    if (theAdapter == null) {
+      theAdapter = new OSXAdapter(inApp);
+    }
+    theApplication.addApplicationListener(theAdapter);
+  }
+
+  // Another static entry point for EAWT functionality.  Enables the
+  // "Preferences..." menu item in the application menu.
+  public static void enablePrefs(boolean enabled) {
+    if (theApplication == null) {
+      theApplication = new com.apple.eawt.Application();
+    }
+    theApplication.setEnabledPreferencesMenu(enabled);
+  }
+}   */
diff --git a/src/plugins/net.sf.jabref.core/plugin.xml b/src/plugins/net.sf.jabref.core/plugin.xml
index 1d7d66d..fcf96ae 100644
--- a/src/plugins/net.sf.jabref.core/plugin.xml
+++ b/src/plugins/net.sf.jabref.core/plugin.xml
@@ -1,272 +1,272 @@
-<?xml version="1.0" ?>
-<!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 1.0" "http://jpf.sourceforge.net/plugin_1_0.dtd">
-<plugin id="net.sf.jabref.core" version="2.4b1"
-	class="net.sf.jabref.plugin.core.JabRefPlugin">
-
-	<attributes>
-		<!-- output the resulting code directly into the source directory -->
-		<attribute id="jpfcodegen">
-			<attribute id="targetDir" value="../../java/" />
-		</attribute>
-
-	</attributes>
-
-	<!-- The code of the core plugin and all its extensions is in the src/java folder.
-	     If you write your own plug-in that has resource files or 
-		 code you will need a runtime section with nested library section here. -->
-
-	<!-- To extend JabRef with an ImportFormat use the following extension point -->
-	<extension-point id="ImportFormat">
-		<parameter-def type="string" id="importFormat"
-			custom-data="net.sf.jabref.imports.ImportFormat" />
-		<parameter-def type="string" id="name" />
-		<parameter-def type="string" id="description"
-			multiplicity="none-or-one" />
-	</extension-point>
-
-	<extension id="MedlineImporter" plugin-id="net.sf.jabref.core"
-		point-id="ImportFormat">
-		<parameter id="importFormat"
-			value="net.sf.jabref.imports.MedlineImporter" />
-		<parameter id="name" value="Medline Importer" />
-		<parameter id="description"
-			value="Import format for Medline references." />
-	</extension>
-
-	<!-- To extend JabRef with an Entry Fetcher use the following extension point -->
-	<extension-point id="EntryFetcher">
-		<parameter-def type="string" id="entryFetcher"
-			custom-data="net.sf.jabref.imports.EntryFetcher" />
-		<parameter-def type="string" id="name" />
-		<parameter-def type="string" id="description"
-			multiplicity="none-or-one" />
-	</extension-point>
-
-	<extension id="IEEEFetcher" plugin-id="net.sf.jabref.core"
-		point-id="EntryFetcher">
-		<parameter id="entryFetcher"
-			value="net.sf.jabref.imports.IEEEXploreFetcher" />
-		<parameter id="name" value="IEEEXplore Entry Fetcher" />
-		<parameter id="description"
-			value="Fetch Entries from IEEE Xplore." />
-	</extension>
-
-    <!-- ACM Portal Fetcher disabled as the current implementation gets users banned -->
-    <extension id="ACMPortalFetcher" plugin-id="net.sf.jabref.core"
-		point-id="EntryFetcher">
-		<parameter id="entryFetcher"
-			value="net.sf.jabref.imports.ACMPortalFetcher" />
-		<parameter id="name" value="ACM Portal Entry Fetcher" />
-		<parameter id="description"
-			value="Fetch Entries from ACM Portal." />
-	</extension>
-
-	<extension id="CiteSeerFetcher" plugin-id="net.sf.jabref.core"
-		point-id="EntryFetcher">
-		<parameter id="entryFetcher"
-			value="net.sf.jabref.imports.CiteSeerEntryFetcher" />
-		<parameter id="name" value="Citeseer Entry Fetcher" />
-		<parameter id="description"
-			value="Fetch Entries from Citeseer." />
-	</extension>
-
-        <extension id="DiVAtoBibTexFetcher" plugin-id="net.sf.jabref.core"
-		point-id="EntryFetcher">
-		<parameter id="entryFetcher"
-			value="net.sf.jabref.imports.DiVAtoBibTeXFetcher" />
-		<parameter id="name" value="DiVA" />
-		<parameter id="description"
-			value="Fetch entries from DiVA." />
-	</extension>
-
-        <extension id="DOItoBibTexFetcher" plugin-id="net.sf.jabref.core"
-		point-id="EntryFetcher">
-		<parameter id="entryFetcher"
-			value="net.sf.jabref.imports.DOItoBibTeXFetcher" />
-		<parameter id="name" value="DOI to BibTeX Fetcher" />
-		<parameter id="description"
-			value="Fetch entries based on DOI." />
-	</extension>
-
-	<extension id="OAI2Fetcher" plugin-id="net.sf.jabref.core"
-		point-id="EntryFetcher">
-		<parameter id="entryFetcher"
-			value="net.sf.jabref.imports.OAI2Fetcher" />
-		<parameter id="name" value="OAI2 Entry Fetcher" />
-		<parameter id="description"
-			value="Fetch Entries from OAI2 Archives like ArXiv." />
-	</extension>
-
-	<extension id="ADSFetcher" plugin-id="net.sf.jabref.core"
-		point-id="EntryFetcher">
-		<parameter id="entryFetcher"
-			value="net.sf.jabref.imports.ADSFetcher" />
-		<parameter id="name" value="ADS Entry Fetcher" />
-		<parameter id="description"
-			value="Fetch Entries from ADS." />
-	</extension>
-
-	<extension id="SPIRESFetcher" plugin-id="net.sf.jabref.core"
-		point-id="EntryFetcher">
-		<parameter id="entryFetcher"
-			value="net.sf.jabref.imports.SPIRESFetcher" />
-		<parameter id="name" value="SPIRES Entry Fetcher" />
-		<parameter id="description"
-			value="Fetch Entries from SLAC SPIRES Database." />
-	</extension>
-
-	<extension id="INSPIREFetcher" plugin-id="net.sf.jabref.core"
-		point-id="EntryFetcher">
-		<parameter id="entryFetcher"
-			value="net.sf.jabref.imports.INSPIREFetcher" />
-		<parameter id="name" value="INSPIRE Entry Fetcher" />
-		<parameter id="description"
-			value="Fetch Entries from SLAC INSPIRE Database." />
-	</extension>
-
-	<extension id="MedlineFetcher" plugin-id="net.sf.jabref.core"
-		point-id="EntryFetcher">
-		<parameter id="entryFetcher"
-			value="net.sf.jabref.imports.MedlineFetcher" />
-		<parameter id="name" value="Medline Entry Fetcher" />
-		<parameter id="description"
-			value="Fetch Entries from Medline." />
-	</extension>
-
-	<extension id="JSTORFetcher" plugin-id="net.sf.jabref.core"
-		point-id="EntryFetcher">
-		<parameter id="entryFetcher"
-			value="net.sf.jabref.imports.JSTORFetcher2" />
-		<parameter id="name" value="JSTOR Entry Fetcher" />
-		<parameter id="description"
-			value="Fetch Entries from JSTOR." />
-	</extension>
-
-    <extension id="CiteSeerXFetcher" plugin-id="net.sf.jabref.core"
-	       point-id="EntryFetcher">
-      <parameter id="entryFetcher"
-		 value="net.sf.jabref.imports.CiteSeerXFetcher" />
-      <parameter id="name" value="CiteSeerX Entry Fetcher" />
-      <parameter id="description"
-		 value="Fetch Entries from CiteSeer." />
-    </extension>
-    
-    <extension id="DBLPFetcher" plugin-id="net.sf.jabref.core"
-       point-id="EntryFetcher">
-      <parameter id="entryFetcher"
-        value="net.sf.jabref.imports.DBLPFetcher" />
-      <parameter id="name" value="DBLP Entry Fetcher" />
-      <parameter id="description"
-        value="Fetch Entries from DBLP." />
-    </extension>
-
-    <extension id="ISBNtoBibTeXFetcher" plugin-id="net.sf.jabref.core"
-       point-id="EntryFetcher">
-      <parameter id="entryFetcher"
-        value="net.sf.jabref.imports.fetcher.ISBNtoBibTeXFetcher" />
-      <parameter id="name" value="ISBN to BibTeX Fetcher" />
-      <parameter id="description"
-        value="Fetch entries based on ISBN." />
-    </extension>
-
-    <extension id="GoogleScholarFetcher" plugin-id="net.sf.jabref.core"
-		point-id="EntryFetcher">
-      <parameter id="entryFetcher"
-		 value="net.sf.jabref.imports.GoogleScholarFetcher" />
-      <parameter id="name" value="Google Scholar Entry Fetcher" />
-      <parameter id="description"
-		 value="Fetch Entries from Google Scholar." />
-    </extension>
-    <!--<extension id="ScienceDirectFetcher" plugin-id="net.sf.jabref.core"
-        point-id="EntryFetcher">
-        <parameter id="entryFetcher"
-            value="net.sf.jabref.imports.ScienceDirectFetcher" />
-        <parameter id="name" value="ScienceDirect Entry Fetcher" />
-        <parameter id="description"
-            value="Fetch Entries from ScienceDirect." />
-    </extension>-->
-
-    <!-- To extend JabRef with an Layout Formatters use the following extension point -->
-	<extension-point id="LayoutFormatter">
-		<parameter-def type="string" id="layoutFormatter"
-			custom-data="net.sf.jabref.export.layout.LayoutFormatter" />
-		<!-- A human readable description of what the formatter does. -->
-		<parameter-def type="string" id="description"
-			multiplicity="none-or-one" />
-		<!-- An id used by JabRef to identify the formatter from text. If none is given, assumed to be the id of the extension. -->
-		<parameter-def type="string" id="name"
-			multiplicity="none-or-one" />
-	</extension-point>
- 
-	<extension id="NameFormatter" plugin-id="net.sf.jabref.core"
-		point-id="LayoutFormatter">
-		<parameter id="layoutFormatter"
-			value="net.sf.jabref.export.layout.format.plugin.NameFormat" />
-		<parameter id="description"
-			value="Format according to Bibtex name.format$ method. Define in preferences." />
-	</extension>
-	
-	<!-- To extend JabRef with an Full Export Format use the following extension point -->
-	<extension-point id="ExportFormat">
-		<!-- 
-			The class given in this string needs to implement the 
-			IExportFormat interface.
-		 
-		 	Caution: Only the method performExport will be called 
-		 	of this class. The other methods will be automatically 
-		 	filled by the plug-in framework according to the values
-		 	given below (this allows us to initialize lazyly). 
-		 --> 
-		<parameter-def type="string" id="exportFormat"
-			custom-data="net.sf.jabref.export.IExportFormat" />
-		<!-- Name of this export format to display to the user -->
-		<parameter-def type="string" id="displayName" />
-		<!-- Identifier to use as a parameter on the console -->
-		<parameter-def type="string" id="consoleName" />
-		<!-- file extension this export format should use -->
-		<parameter-def type="string" id="extension" />
-	</extension-point>
-
-	<!-- Format Provider -->
-	<extension-point id="ExportFormatProvider">
-		<parameter-def type="string" id="formatProvider"
-			custom-data="net.sf.jabref.export.IExportFormatProvider" />
-		<!-- Name of this export format to display to the user -->
-		<parameter-def type="string" id="name" />
-		<!-- Identifier to use as a parameter on the console -->
-		<parameter-def type="string" id="description" />
-	</extension-point>
-	
-	<!-- To extend JabRef with an Template based Export Format use the following extension point -->
-	<extension-point id="ExportFormatTemplate">
-		<!-- Name of this export format to display to the user -->
-		<parameter-def type="string" id="displayName" />
-		<!-- Identifier to use as a parameter on the console -->
-		<parameter-def type="string" id="consoleName" />
-		<!-- file name of the layout file to use -->
-		<parameter-def type="string" id="layoutFilename" />
-		<!-- directory from which to load the extension -->
-		<parameter-def type="resource" id="dir" />
-		<!-- file extension this export format should use -->
-		<parameter-def type="string" id="extension" />
-        <!-- character encoding override, if needed -->
-        <parameter-def type="string" id="encoding" multiplicity="none-or-one" />
-	</extension-point>
-
-    <extension-point id="PushToApplication">
-        <parameter-def type="string" id="pushToApp"
-                       custom-data="net.sf.jabref.external.PushToApplication" />
-       <parameter-def type="string" id="name" />
-       <parameter-def type="string" id="description"
-               multiplicity="none-or-one" />
-    </extension-point>
-
-    <extension-point id="SidePanePlugin">
-        <parameter-def type="string" id="sidePanePlugin"
-                       custom-data="net.sf.jabref.plugin.SidePanePlugin" />
-       <parameter-def type="string" id="name" />
-       <parameter-def type="string" id="description"
-               multiplicity="none-or-one" />
-    </extension-point>
-
-</plugin>
+<?xml version="1.0" ?>
+<!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 1.0" "http://jpf.sourceforge.net/plugin_1_0.dtd">
+<plugin id="net.sf.jabref.core" version="2.4b1"
+	class="net.sf.jabref.plugin.core.JabRefPlugin">
+
+	<attributes>
+		<!-- output the resulting code directly into the source directory -->
+		<attribute id="jpfcodegen">
+			<attribute id="targetDir" value="../../java/" />
+		</attribute>
+
+	</attributes>
+
+	<!-- The code of the core plugin and all its extensions is in the src/java folder.
+	     If you write your own plug-in that has resource files or 
+		 code you will need a runtime section with nested library section here. -->
+
+	<!-- To extend JabRef with an ImportFormat use the following extension point -->
+	<extension-point id="ImportFormat">
+		<parameter-def type="string" id="importFormat"
+			custom-data="net.sf.jabref.imports.ImportFormat" />
+		<parameter-def type="string" id="name" />
+		<parameter-def type="string" id="description"
+			multiplicity="none-or-one" />
+	</extension-point>
+
+	<extension id="MedlineImporter" plugin-id="net.sf.jabref.core"
+		point-id="ImportFormat">
+		<parameter id="importFormat"
+			value="net.sf.jabref.imports.MedlineImporter" />
+		<parameter id="name" value="Medline Importer" />
+		<parameter id="description"
+			value="Import format for Medline references." />
+	</extension>
+
+	<!-- To extend JabRef with an Entry Fetcher use the following extension point -->
+	<extension-point id="EntryFetcher">
+		<parameter-def type="string" id="entryFetcher"
+			custom-data="net.sf.jabref.imports.EntryFetcher" />
+		<parameter-def type="string" id="name" />
+		<parameter-def type="string" id="description"
+			multiplicity="none-or-one" />
+	</extension-point>
+
+	<extension id="IEEEFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.IEEEXploreFetcher" />
+		<parameter id="name" value="IEEEXplore Entry Fetcher" />
+		<parameter id="description"
+			value="Fetch Entries from IEEE Xplore." />
+	</extension>
+
+    <!-- ACM Portal Fetcher disabled as the current implementation gets users banned -->
+    <extension id="ACMPortalFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.ACMPortalFetcher" />
+		<parameter id="name" value="ACM Portal Entry Fetcher" />
+		<parameter id="description"
+			value="Fetch Entries from ACM Portal." />
+	</extension>
+
+	<extension id="CiteSeerFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.CiteSeerEntryFetcher" />
+		<parameter id="name" value="Citeseer Entry Fetcher" />
+		<parameter id="description"
+			value="Fetch Entries from Citeseer." />
+	</extension>
+
+        <extension id="DiVAtoBibTexFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.DiVAtoBibTeXFetcher" />
+		<parameter id="name" value="DiVA" />
+		<parameter id="description"
+			value="Fetch entries from DiVA." />
+	</extension>
+
+        <extension id="DOItoBibTexFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.DOItoBibTeXFetcher" />
+		<parameter id="name" value="DOI to BibTeX Fetcher" />
+		<parameter id="description"
+			value="Fetch entries based on DOI." />
+	</extension>
+
+	<extension id="OAI2Fetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.OAI2Fetcher" />
+		<parameter id="name" value="OAI2 Entry Fetcher" />
+		<parameter id="description"
+			value="Fetch Entries from OAI2 Archives like ArXiv." />
+	</extension>
+
+	<extension id="ADSFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.ADSFetcher" />
+		<parameter id="name" value="ADS Entry Fetcher" />
+		<parameter id="description"
+			value="Fetch Entries from ADS." />
+	</extension>
+
+	<extension id="SPIRESFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.SPIRESFetcher" />
+		<parameter id="name" value="SPIRES Entry Fetcher" />
+		<parameter id="description"
+			value="Fetch Entries from SLAC SPIRES Database." />
+	</extension>
+
+	<extension id="INSPIREFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.INSPIREFetcher" />
+		<parameter id="name" value="INSPIRE Entry Fetcher" />
+		<parameter id="description"
+			value="Fetch Entries from SLAC INSPIRE Database." />
+	</extension>
+
+	<extension id="MedlineFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.MedlineFetcher" />
+		<parameter id="name" value="Medline Entry Fetcher" />
+		<parameter id="description"
+			value="Fetch Entries from Medline." />
+	</extension>
+
+	<extension id="JSTORFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+		<parameter id="entryFetcher"
+			value="net.sf.jabref.imports.JSTORFetcher2" />
+		<parameter id="name" value="JSTOR Entry Fetcher" />
+		<parameter id="description"
+			value="Fetch Entries from JSTOR." />
+	</extension>
+
+    <extension id="CiteSeerXFetcher" plugin-id="net.sf.jabref.core"
+	       point-id="EntryFetcher">
+      <parameter id="entryFetcher"
+		 value="net.sf.jabref.imports.CiteSeerXFetcher" />
+      <parameter id="name" value="CiteSeerX Entry Fetcher" />
+      <parameter id="description"
+		 value="Fetch Entries from CiteSeer." />
+    </extension>
+    
+    <extension id="DBLPFetcher" plugin-id="net.sf.jabref.core"
+       point-id="EntryFetcher">
+      <parameter id="entryFetcher"
+        value="net.sf.jabref.imports.DBLPFetcher" />
+      <parameter id="name" value="DBLP Entry Fetcher" />
+      <parameter id="description"
+        value="Fetch Entries from DBLP." />
+    </extension>
+
+    <extension id="ISBNtoBibTeXFetcher" plugin-id="net.sf.jabref.core"
+       point-id="EntryFetcher">
+      <parameter id="entryFetcher"
+        value="net.sf.jabref.imports.fetcher.ISBNtoBibTeXFetcher" />
+      <parameter id="name" value="ISBN to BibTeX Fetcher" />
+      <parameter id="description"
+        value="Fetch entries based on ISBN." />
+    </extension>
+
+    <extension id="GoogleScholarFetcher" plugin-id="net.sf.jabref.core"
+		point-id="EntryFetcher">
+      <parameter id="entryFetcher"
+		 value="net.sf.jabref.imports.GoogleScholarFetcher" />
+      <parameter id="name" value="Google Scholar Entry Fetcher" />
+      <parameter id="description"
+		 value="Fetch Entries from Google Scholar." />
+    </extension>
+    <!--<extension id="ScienceDirectFetcher" plugin-id="net.sf.jabref.core"
+        point-id="EntryFetcher">
+        <parameter id="entryFetcher"
+            value="net.sf.jabref.imports.ScienceDirectFetcher" />
+        <parameter id="name" value="ScienceDirect Entry Fetcher" />
+        <parameter id="description"
+            value="Fetch Entries from ScienceDirect." />
+    </extension>-->
+
+    <!-- To extend JabRef with an Layout Formatters use the following extension point -->
+	<extension-point id="LayoutFormatter">
+		<parameter-def type="string" id="layoutFormatter"
+			custom-data="net.sf.jabref.export.layout.LayoutFormatter" />
+		<!-- A human readable description of what the formatter does. -->
+		<parameter-def type="string" id="description"
+			multiplicity="none-or-one" />
+		<!-- An id used by JabRef to identify the formatter from text. If none is given, assumed to be the id of the extension. -->
+		<parameter-def type="string" id="name"
+			multiplicity="none-or-one" />
+	</extension-point>
+ 
+	<extension id="NameFormatter" plugin-id="net.sf.jabref.core"
+		point-id="LayoutFormatter">
+		<parameter id="layoutFormatter"
+			value="net.sf.jabref.export.layout.format.plugin.NameFormat" />
+		<parameter id="description"
+			value="Format according to Bibtex name.format$ method. Define in preferences." />
+	</extension>
+	
+	<!-- To extend JabRef with an Full Export Format use the following extension point -->
+	<extension-point id="ExportFormat">
+		<!-- 
+			The class given in this string needs to implement the 
+			IExportFormat interface.
+		 
+		 	Caution: Only the method performExport will be called 
+		 	of this class. The other methods will be automatically 
+		 	filled by the plug-in framework according to the values
+		 	given below (this allows us to initialize lazyly). 
+		 --> 
+		<parameter-def type="string" id="exportFormat"
+			custom-data="net.sf.jabref.export.IExportFormat" />
+		<!-- Name of this export format to display to the user -->
+		<parameter-def type="string" id="displayName" />
+		<!-- Identifier to use as a parameter on the console -->
+		<parameter-def type="string" id="consoleName" />
+		<!-- file extension this export format should use -->
+		<parameter-def type="string" id="extension" />
+	</extension-point>
+
+	<!-- Format Provider -->
+	<extension-point id="ExportFormatProvider">
+		<parameter-def type="string" id="formatProvider"
+			custom-data="net.sf.jabref.export.IExportFormatProvider" />
+		<!-- Name of this export format to display to the user -->
+		<parameter-def type="string" id="name" />
+		<!-- Identifier to use as a parameter on the console -->
+		<parameter-def type="string" id="description" />
+	</extension-point>
+	
+	<!-- To extend JabRef with an Template based Export Format use the following extension point -->
+	<extension-point id="ExportFormatTemplate">
+		<!-- Name of this export format to display to the user -->
+		<parameter-def type="string" id="displayName" />
+		<!-- Identifier to use as a parameter on the console -->
+		<parameter-def type="string" id="consoleName" />
+		<!-- file name of the layout file to use -->
+		<parameter-def type="string" id="layoutFilename" />
+		<!-- directory from which to load the extension -->
+		<parameter-def type="resource" id="dir" />
+		<!-- file extension this export format should use -->
+		<parameter-def type="string" id="extension" />
+        <!-- character encoding override, if needed -->
+        <parameter-def type="string" id="encoding" multiplicity="none-or-one" />
+	</extension-point>
+
+    <extension-point id="PushToApplication">
+        <parameter-def type="string" id="pushToApp"
+                       custom-data="net.sf.jabref.external.PushToApplication" />
+       <parameter-def type="string" id="name" />
+       <parameter-def type="string" id="description"
+               multiplicity="none-or-one" />
+    </extension-point>
+
+    <extension-point id="SidePanePlugin">
+        <parameter-def type="string" id="sidePanePlugin"
+                       custom-data="net.sf.jabref.plugin.SidePanePlugin" />
+       <parameter-def type="string" id="name" />
+       <parameter-def type="string" id="description"
+               multiplicity="none-or-one" />
+    </extension-point>
+
+</plugin>
diff --git a/src/plugins/net.sf.jabref.export.misq/build.xml b/src/plugins/net.sf.jabref.export.misq/build.xml
index 9ac7093..0baade4 100644
--- a/src/plugins/net.sf.jabref.export.misq/build.xml
+++ b/src/plugins/net.sf.jabref.export.misq/build.xml
@@ -1,29 +1,29 @@
-<?xml version="1.0"?>
-<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-   Example Ant build file how to create a jar for distribution 
-   for an export plugin.
-
-   Version:  $Revision$
-             $Date$
-             $Author$
-
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
-<project name="net.sf.jabref.export.misq" default="jar" basedir=".">
-
-	<!-- Properties -->
-	<property name="version" value="1.0" />
-	<property name="jar" value="../${ant.project.name}-${version}.jar" />
-
-	<!-- Jars up project -->
-	<target name="jar">
-		<jar destfile="${jar}">
-			<fileset dir="."/>
-		</jar>
-	</target>
-
-	<target name="clean" description="Clean project">
-		<delete file="${jar}" />
-	</target>
-
-</project>
+<?xml version="1.0"?>
+<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+   Example Ant build file how to create a jar for distribution 
+   for an export plugin.
+
+   Version:  $Revision$
+             $Date$
+             $Author$
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
+<project name="net.sf.jabref.export.misq" default="jar" basedir=".">
+
+	<!-- Properties -->
+	<property name="version" value="1.0" />
+	<property name="jar" value="../${ant.project.name}-${version}.jar" />
+
+	<!-- Jars up project -->
+	<target name="jar">
+		<jar destfile="${jar}">
+			<fileset dir="."/>
+		</jar>
+	</target>
+
+	<target name="clean" description="Clean project">
+		<delete file="${jar}" />
+	</target>
+
+</project>
diff --git a/src/plugins/net.sf.jabref.export.misq/plugin.xml b/src/plugins/net.sf.jabref.export.misq/plugin.xml
index 1ed29c3..ad9f6aa 100644
--- a/src/plugins/net.sf.jabref.export.misq/plugin.xml
+++ b/src/plugins/net.sf.jabref.export.misq/plugin.xml
@@ -1,22 +1,22 @@
-<?xml version="1.0" ?>
-<!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 1.0" "http://jpf.sourceforge.net/plugin_1_0.dtd">
-<plugin id="net.sf.jabref.export.misq" version="1.0">
-	
-	<requires>
-		<import plugin-id="net.sf.jabref.core"/>
-	</requires>
-	
-	<runtime>
-		<library type="resources" path="templates/" id="templates"/>
-	</runtime>
-	
-	<extension id="MISQuarterly" plugin-id="net.sf.jabref.core"
-		point-id="ExportFormatTemplate">
-		<parameter id="displayName" value="MIS Quarterly" />
-		<parameter id="consoleName" value="misq" />
-		<parameter id="layoutFilename" value="misq" />
-		<parameter id="dir" value="templates/"/>
-		<parameter id="extension" value=".rtf" />
-	</extension>
-
+<?xml version="1.0" ?>
+<!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 1.0" "http://jpf.sourceforge.net/plugin_1_0.dtd">
+<plugin id="net.sf.jabref.export.misq" version="1.0">
+	
+	<requires>
+		<import plugin-id="net.sf.jabref.core"/>
+	</requires>
+	
+	<runtime>
+		<library type="resources" path="templates/" id="templates"/>
+	</runtime>
+	
+	<extension id="MISQuarterly" plugin-id="net.sf.jabref.core"
+		point-id="ExportFormatTemplate">
+		<parameter id="displayName" value="MIS Quarterly" />
+		<parameter id="consoleName" value="misq" />
+		<parameter id="layoutFilename" value="misq" />
+		<parameter id="dir" value="templates/"/>
+		<parameter id="extension" value=".rtf" />
+	</extension>
+
 </plugin>
\ No newline at end of file
diff --git a/src/plugins/net.sf.jabref.export.misq/templates/misq.article.layout b/src/plugins/net.sf.jabref.export.misq/templates/misq.article.layout
index c0e48d0..67106d2 100644
--- a/src/plugins/net.sf.jabref.export.misq/templates/misq.article.layout
+++ b/src/plugins/net.sf.jabref.export.misq/templates/misq.article.layout
@@ -1,18 +1,18 @@
-\format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\author}
- "\format[RTFChars]{\title}," }{\\i \format[RTFChars]{\journal}}{
- (
-\begin{volume}
-\volume
-\end{volume}
-\begin{number}
-:\number
-\end{number}
-)
-\begin{year}
-, \year
-\end{year}
-\begin{pages}
-, pp. \pages
-\end{pages}.
-\\par
-\\par
+\format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\author}
+ "\format[RTFChars]{\title}," }{\\i \format[RTFChars]{\journal}}{
+ (
+\begin{volume}
+\volume
+\end{volume}
+\begin{number}
+:\number
+\end{number}
+)
+\begin{year}
+, \year
+\end{year}
+\begin{pages}
+, pp. \pages
+\end{pages}.
+\\par
+\\par
diff --git a/src/plugins/net.sf.jabref.export.misq/templates/misq.begin.layout b/src/plugins/net.sf.jabref.export.misq/templates/misq.begin.layout
index 92c728c..c28880f 100644
--- a/src/plugins/net.sf.jabref.export.misq/templates/misq.begin.layout
+++ b/src/plugins/net.sf.jabref.export.misq/templates/misq.begin.layout
@@ -1,3 +1,3 @@
-{\\rtf1\\ansi\\ansicpg1251\\uc1\\deff0\\stshfdbch0\\stshfloch0\\stshfhich0\\stshfbi0\\deflang1049\\deflangfe1049{\\fonttbl{\\f0\\froman\\fcharset204\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\f39\\froman\\fcharset0\\fprq2 Times New Roman;}
-{\\f37\\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\f40\\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\f41\\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\f42\\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}
-{\\f43\\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}{\\f44\\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\f45\\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}}{
+{\\rtf1\\ansi\\ansicpg1251\\uc1\\deff0\\stshfdbch0\\stshfloch0\\stshfhich0\\stshfbi0\\deflang1049\\deflangfe1049{\\fonttbl{\\f0\\froman\\fcharset204\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\f39\\froman\\fcharset0\\fprq2 Times New Roman;}
+{\\f37\\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\f40\\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\f41\\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\f42\\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}
+{\\f43\\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}{\\f44\\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\f45\\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}}{
diff --git a/src/plugins/net.sf.jabref.export.misq/templates/misq.book.layout b/src/plugins/net.sf.jabref.export.misq/templates/misq.book.layout
index abaf0e2..1cb7cfa 100644
--- a/src/plugins/net.sf.jabref.export.misq/templates/misq.book.layout
+++ b/src/plugins/net.sf.jabref.export.misq/templates/misq.book.layout
@@ -1,21 +1,21 @@
-\begin{author}
-\format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\author} 
-\end{author}
-\begin{editor}
-, \format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\editor}, (eds.) 
-\end{editor}
-}{\\i \format[RTFChars]{\title}}{
-\begin{volume}
-, Vol. \volume
-\end{volume}
-\begin{publisher}
-, \format[RTFChars]{\publisher}
-\end{publisher}
-\begin{address}
-, \format[RTFChars]{\address}
-\end{address}
-\begin{year}
-, \format[RTFChars]{\year}
-\end{year}.
-\\par
-\\par
+\begin{author}
+\format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\author} 
+\end{author}
+\begin{editor}
+, \format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\editor}, (eds.) 
+\end{editor}
+}{\\i \format[RTFChars]{\title}}{
+\begin{volume}
+, Vol. \volume
+\end{volume}
+\begin{publisher}
+, \format[RTFChars]{\publisher}
+\end{publisher}
+\begin{address}
+, \format[RTFChars]{\address}
+\end{address}
+\begin{year}
+, \format[RTFChars]{\year}
+\end{year}.
+\\par
+\\par
diff --git a/src/plugins/net.sf.jabref.export.misq/templates/misq.layout b/src/plugins/net.sf.jabref.export.misq/templates/misq.layout
index 377c62b..27ea1f7 100644
--- a/src/plugins/net.sf.jabref.export.misq/templates/misq.layout
+++ b/src/plugins/net.sf.jabref.export.misq/templates/misq.layout
@@ -1,40 +1,40 @@
-\format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\author} 
-"\format[RTFChars]{\title}"
-\begin{journal}
-, }{\\i \format[RTFChars]{\journal}} {\volume}{
-\end{journal}
-\begin{number}
-(\number)
-\end{number}
-\begin{editor}
-, }{\\i in }{\format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\editor}, ed.,
-\end{editor}
-\begin{booktitle}
-'\format[RTFChars]{\booktitle}'
-\end{booktitle}
-\begin{organization}
-, \organization
-\end{organization}
-\begin{institution}
-, Technical report, \institution
-\end{institution}
-\begin{publisher}
-, \format[RTFChars]{\publisher}
-\end{publisher}
-\begin{howpublished}
-, \howpublished
-\end{howpublished}
-\begin{address}
-, \format[RTFChars]{\address}
-\end{address}
-\begin{note}
-, \note
-\end{note}
-\begin{year}
-, \year
-\end{year}
-\begin{pages}
-, pp. \pages
-\end{pages}.
-\\par
-\\par
+\format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\author} 
+"\format[RTFChars]{\title}"
+\begin{journal}
+, }{\\i \format[RTFChars]{\journal}} {\volume}{
+\end{journal}
+\begin{number}
+(\number)
+\end{number}
+\begin{editor}
+, }{\\i in }{\format[RTFChars,AuthorLastFirst,AuthorLastFirstAbbrCommas]{\editor}, ed.,
+\end{editor}
+\begin{booktitle}
+'\format[RTFChars]{\booktitle}'
+\end{booktitle}
+\begin{organization}
+, \organization
+\end{organization}
+\begin{institution}
+, Technical report, \institution
+\end{institution}
+\begin{publisher}
+, \format[RTFChars]{\publisher}
+\end{publisher}
+\begin{howpublished}
+, \howpublished
+\end{howpublished}
+\begin{address}
+, \format[RTFChars]{\address}
+\end{address}
+\begin{note}
+, \note
+\end{note}
+\begin{year}
+, \year
+\end{year}
+\begin{pages}
+, pp. \pages
+\end{pages}.
+\\par
+\\par
diff --git a/src/plugins/net.sf.jabref.export.misq/templates/readme.txt b/src/plugins/net.sf.jabref.export.misq/templates/readme.txt
index 1ea7ab8..4121208 100644
--- a/src/plugins/net.sf.jabref.export.misq/templates/readme.txt
+++ b/src/plugins/net.sf.jabref.export.misq/templates/readme.txt
@@ -1,13 +1,13 @@
-
-******************************************************
-*******                                       ********
-*******  Readme: MIS Quarterly Export Filter  ********
-*******                                       ******** 
-*******           for JabRef                  ********
-*******                                       ********
-*******           version 1.0                 ********
-*******            2007-06-12                 ********
-*******                                       ******** 
-******************************************************
-
+
+******************************************************
+*******                                       ********
+*******  Readme: MIS Quarterly Export Filter  ********
+*******                                       ******** 
+*******           for JabRef                  ********
+*******                                       ********
+*******           version 1.0                 ********
+*******            2007-06-12                 ********
+*******                                       ******** 
+******************************************************
+
 Written by Matthias St�rmer - mstuermer[at]ethz.ch
\ No newline at end of file
diff --git a/src/plugins/readme.txt b/src/plugins/readme.txt
index b303883..5fd0e27 100644
--- a/src/plugins/readme.txt
+++ b/src/plugins/readme.txt
@@ -1,9 +1,9 @@
-Plugins for JabRef that are supposed to be distributed with the system should go here.
-
-At the moment we need an ugly hack in 
-
-net.sf.jabref.plugin.PluginCore.java
-
-to add all plugins manually. Since they are loaded from the resulting JabRef jar.
-
+Plugins for JabRef that are supposed to be distributed with the system should go here.
+
+At the moment we need an ugly hack in 
+
+net.sf.jabref.plugin.PluginCore.java
+
+to add all plugins manually. Since they are loaded from the resulting JabRef jar.
+
 To work around this issue, one can add all extension directly to the core plugin instead. 
\ No newline at end of file
diff --git a/src/resource/.gitignore b/src/resource/.gitignore
deleted file mode 100644
index 7664704..0000000
--- a/src/resource/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.bak
\ No newline at end of file
diff --git a/src/resource/IEEEJournalList.txt b/src/resource/IEEEJournalList.txt
index d9a8e73..724335c 100644
--- a/src/resource/IEEEJournalList.txt
+++ b/src/resource/IEEEJournalList.txt
@@ -1,348 +1,348 @@
-IEEE Journals
-
-
-
-aerospace and military
-IEEE Transactions on Aerospace and Electronic Systems=#IEEE_J_AES#
-IEEE Transactions on Aerospace and Navigational Electronics=#IEEE_J_ANE#
-IEEE Transactions on Aeronautical and Navigational Electronics=#IEEE_J_ANNE#
-IEEE Transactions on Aerospace=#IEEE_J_AS#
-IEEE Transactions on Airborne Electronics=#IEEE_J_AIRE#
-IEEE Transactions on Military Electronics=#IEEE_J_MIL#
-
-
-
-autos, transportation and vehicles (non-aerospace)
-IEEE Transactions on Intelligent Transportation Systems=#IEEE_J_ITS#
-IEEE Transactions on Vehicular Technology=#IEEE_J_VT#
-IEEE Transactions on Vehicular Communications=#IEEE_J_VC#
-
-
-
-circuits, signals, systems, audio and controls
-IEEE Signal Processing Letters=#IEEE_J_SPL#
-IEEE Transactions on Acoustics, Speech and Signal Processing=#IEEE_J_ASSP#
-IEEE Transactions on Acoustics, Speech, and Signal Processing=#IEEE_J_ASSP#
-IEEE Transactions on Audio=#IEEE_J_AU#
-IEEE Transactions on Audio and Electroacoustics=#IEEE_J_AUEA#
-IEEE Transactions on Automatic Control=#IEEE_J_AC#
-IEEE Transactions on Circuits and Systems=#IEEE_J_CAS#
-IEEE Transactions on Circuits and Systems for Video Technology=#IEEE_J_CASVT#
-IEEE Transactions on Circuits and Systems I: Fundamental Theory and Applications=#IEEE_J_CASI#
-IEEE Transactions on Circuits and Systems II: Analog and Digital Signal Processing=#IEEE_J_CASII#
-in 2004 CASI and CASII renamed part title to CASI_RP and CASII_EB, respectively.
-IEEE Transactions on Circuits and Systems I: Regular Papers=#IEEE_J_CASI_RP#
-IEEE Transactions on Circuits and Systems II: Express Briefs=#IEEE_J_CASII_EB#
-IEEE Transactions on Circuit Theory=#IEEE_J_CT#
-IEEE Transactions on Control Systems Technology=#IEEE_J_CST#
-IEEE Transactions on Signal Processing=#IEEE_J_SP#
-IEEE Transactions on Sonics and Ultrasonics=#IEEE_J_SU#
-IEEE Transactions on Speech and Audio Processing=#IEEE_J_SAP#
-IEEE Journal of Selected Topics in Signal Processing=#IEEE_J_STSP#
-IEEE Systems Journal=#IEEE_J_SYST#
-IEEE Transactions on Ultrasonics Engineering=#IEEE_J_UE#
-Aaron Chen: "," missing
-IEEE Transactions on Ultrasonics, Ferroelectrics and Frequency Control=#IEEE_J_UFFC#
-IEEE Transactions on Ultrasonics, Ferroelectrics, and Frequency Control=#IEEE_J_UFFC#
-
-
-
-communications
-IEEE Communications Letters=#IEEE_J_COML#
-IEEE Journal on Selected Areas in Communications=#IEEE_J_JSAC#
-IEEE Transactions on Communications=#IEEE_J_COM#
-IEEE Transactions on Communication Technology=#IEEE_J_COMT#
-IEEE Transactions on Wireless Communications=#IEEE_J_WCOM#
-
-
-
-components, packaging and manufacturing
-IEEE Transactions on Advanced Packaging=#IEEE_J_ADVP#
-IEEE Transactions on Components, Hybrids and Manufacturing Technology=#IEEE_J_CHMT#
-IEEE Transactions on Components, Packaging and Manufacturing Technology, Part A=#IEEE_J_CPMTA#
-IEEE Transactions on Components, Packaging and Manufacturing Technology, Part B: Advanced Packaging=#IEEE_J_CPMTB#
-IEEE Transactions on Components, Packaging and Manufacturing Technology, Part C: Manufacturing=#IEEE_J_CPMTC#
-IEEE Transactions on Components and Packaging Technology=#IEEE_J_CAPT#
-IEEE Transactions on Components and Packaging Technologies=#IEEE_J_CAPTS#
-IEEE Transactions on Component Parts=#IEEE_J_CPART#
-IEEE Transactions on Electronics Packaging Manufacturing=#IEEE_J_EPM#
-IEEE Transactions on Manufacturing Technology=#IEEE_J_MFT#
-IEEE Transactions on Parts, Hybrids and Packaging=#IEEE_J_PHP#
-IEEE Transactions on Parts, Materials and Packaging=#IEEE_J_PMP#
-
-
-
-CAD
-IEEE Journal on Technology in Computer Aided Design=#IEEE_J_TCAD#
-IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems=#IEEE_J_CAD#
-
-
-
-coding, data, information, knowledge
-IEEE Transactions on Information Theory=#IEEE_J_IT#
-IEEE Transactions on Knowledge and Data Engineering=#IEEE_J_KDE#
-
-
-
-computers, computation, networking and software
-Aaron Chen:
-Transactions on Computers=#IEEE_J_C#
-IEEE Transactions on Computers=#IEEE_J_C#
-IEEE Computer Architecture Letters=#IEEE_J_CAL#
-IEEE Transactions on Dependable and Secure Computing=#IEEE_J_DSC#
-IEEE Transactions on Electronic Computers=#IEEE_J_ECOMP#
-IEEE Transactions on Evolutionary Computation=#IEEE_J_EVC#
-IEEE Transactions on Fuzzy Systems=#IEEE_J_FUZZ#
-IEEE Transactions on Information Forensics and Security=#IEEE_J_IFS#
-IEEE Transactions on Mobile Computing=#IEEE_J_MC#
-IEEE/ACM Transactions on Networking=#IEEE_J_NET#
-IEEE Transactions on Neural Networks=#IEEE_J_NN#
-IEEE Transactions on Network and Service Management=#IEEE_J_NSM#
-IEEE Transactions on Parallel and Distributed Systems=#IEEE_J_PDS#
-IEEE Transactions on Services Computing=#IEEE_J_SC#
-IEEE Transactions on Software Engineering=#IEEE_J_SE#
-
-
-
-computer graphics, imaging, and multimedia
-IEEE/OSA Journal of Display Technology=#IEEE_J_JDT#
-IEEE Transactions on Image Processing=#IEEE_J_IP#
-IEEE Transactions on Multimedia=#IEEE_J_MM#
-IEEE Transactions on Visualization and Computer Graphics=#IEEE_J_VCG#
-
-
-
-cybernetics, ergonomics, robots, man-machine, and automation
-IEEE Transactions on Automation Science and Engineering=#IEEE_J_ASE#
-IEEE Journal of Robotics and Automation=#IEEE_J_JRA#
-IEEE Transactions on Haptics=#IEEE_J_H#
-IEEE Transactions on Human Factors in Electronics=#IEEE_J_HFE#
-IEEE Transactions on Man-Machine Systems=#IEEE_J_MMS#
-IEEE Transactions on Pattern Analysis and Machine Intelligence=#IEEE_J_PAMI#
-in 1989 JRA became RA
-in August 2004, RA split into ASE and RO
-IEEE Transactions on Robotics and Automation=#IEEE_J_RA#
-IEEE Transactions on Robotics=#IEEE_J_RO#
-Aaron Chen: "," missing
-IEEE Transactions on Systems, Man and Cybernetics=#IEEE_J_SMC#
-IEEE Transactions on Systems, Man, and Cybernetics=#IEEE_J_SMC#
-IEEE Transactions on Systems, Man, and Cybernetics, Part A: Systems and Humans=#IEEE_J_SMCA#
-IEEE Transactions on Systems, Man, and Cybernetics, Part B: Cybernetics=#IEEE_J_SMCB#
-IEEE Transactions on Systems, Man, and Cybernetics, Part C: Applications and Reviews=#IEEE_J_SMCC#
-IEEE Transactions on Systems Science and Cybernetics=#IEEE_J_SSC#
-
-
-
-earth, wind, fire and water
-IEEE Transactions on Geoscience Electronics=#IEEE_J_GE#
-IEEE Transactions on Geoscience and Remote Sensing=#IEEE_J_GRS#
-IEEE Geoscience and Remote Sensing Letters=#IEEE_J_GRSL#
-IEEE Journal of Oceanic Engineering=#IEEE_J_OE#
-IEEE Journal of Selected Topics on Applied Observations and Remote Sensing=#IEEE_J_STARS#
-
-
-
-education, engineering, history, IEEE, professional
-Canadian Journal of Electrical and Computer Engineering=#IEEE_J_CJECE#
-Proceedings of the IEEE=#IEEE_J_PROC#
-IEEE Transactions on Education=#IEEE_J_EDU#
-IEEE Transactions on Engineering Management=#IEEE_J_EM#
-IEEE Transactions on Engineering Writing and Speech=#IEEE_J_EWS#
-IEEE Transactions on Learning Technologies=#IEEE_J_LT#
-IEEE Transactions on Professional Communication=#IEEE_J_PC#
-
-
-
-electromagnetics, antennas, EMI, magnetics and microwave
-IEEE Antennas and Wireless Propagation Letters=#IEEE_J_AWPL#
-IEEE Microwave and Guided Wave Letters=#IEEE_J_MGWL#
-IEEE Microwave and Wireless Components Letters=#IEEE_J_MWCL#
-IEEE Transactions on Antennas and Propagation=#IEEE_J_AP#
-IEEE Transactions on Electromagnetic Compatibility=#IEEE_J_EMC#
-IEEE Transactions on Magnetics=#IEEE_J_MAG#
-IEEE Transactions on Microwave Theory and Techniques=#IEEE_J_MTT#
-IEEE Transactions on Radio Frequency Interference=#IEEE_J_RFI#
-IEEE Translation Journal on Magnetics in Japan=#IEEE_J_TJMJ#
-
-
-
-energy and power
-IEEE Transactions on Energy Conversion=#IEEE_J_EC#
-IEEE Power Electronics Letters=#IEEE_J_PEL#
-IEEE Transactions on Power Apparatus and Systems=#IEEE_J_PWRAS#
-IEEE Transactions on Power Delivery=#IEEE_J_PWRD#
-IEEE Transactions on Power Electronics=#IEEE_J_PWRE#
-IEEE Transactions on Power Systems=#IEEE_J_PWRS#
-
-
-
-industrial, commercial and consumer
-IEEE Transactions on Applications and Industry=#IEEE_J_APPIND#
-IEEE Transactions on Broadcasting=#IEEE_J_BC#
-IEEE Transactions on Broadcast and Television Receivers=#IEEE_J_BCTV#
-IEEE Transactions on Consumer Electronics=#IEEE_J_CE#
-IEEE Transactions on Industrial Electronics=#IEEE_J_IE#
-IEEE Transactions on Industrial Electronics and Control Instrumentation=#IEEE_J_IECI#
-IEEE Transactions on Industry Applications=#IEEE_J_IA#
-IEEE Transactions on Industry and General Applications=#IEEE_J_IGA#
-IEEE Transactions on Industrial Informatics=#IEEE_J_IINF#
-IEEE Journal of Product Safety Engineering=#IEEE_J_PSE#
-
-
-
-instrumentation and measurement
-IEEE Transactions on Instrumentation and Measurement=#IEEE_J_IM#
-
-
-
-insulation and materials
-IEEE/TMS Journal of Electronic Materials=#IEEE_J_JEM#
-IEEE Transactions on Dielectrics and Electrical Insulation=#IEEE_J_DEI#
-IEEE Transactions on Electrical Insulation=#IEEE_J_EI#
-
-
-
-mechanical
-IEEE/ASME Transactions on Mechatronics=#IEEE_J_MECH#
-IEEE/ASME Journal of Microelectromechanical Systems=#IEEE_J_MEMS#
-Aaron Chen: IEEE/ASME missing (Thanks to Adam Schofield)
-Journal of Microelectromechanical Systems=#IEEE_J_MEMS#
-
-
-
-medical and biological
-IEEE Transactions on Biomedical Circuits and Systems=#IEEE_J_BCAS#
-IEEE Transactions on Biomedical Engineering=#IEEE_J_BME#
-Note: The B-ME journal later dropped the hyphen and became the BME.
-IEEE Transactions on Bio-Medical Engineering=#IEEE_J_B-ME#
-IEEE Transactions on Bio-Medical Electronics=#IEEE_J_BMELC#
-IEEE/ACM Transactions on Computational Biology and Bioinformatics=#IEEE_J_CBB#
-IEEE Transactions on Information Technology in Biomedicine=#IEEE_J_ITBM#
-IEEE Transactions on Medical Electronics=#IEEE_J_ME#
-IEEE Transactions on Medical Imaging=#IEEE_J_MI#
-IEEE Transactions on NanoBioscience=#IEEE_J_NB#
-IEEE Transactions on Neural Systems and Rehabilitation Engineering=#IEEE_J_NSRE#
-IEEE Reviews in Biomedical Engineering=#IEEE_J_RBME#
-IEEE Transactions on Rehabilitation Engineering=#IEEE_J_RE#
-
-
-
-optics, lightwave and photonics
-IEEE Photonics Technology Letters=#IEEE_J_PTL#
-Aaron Chen: "IEEE/OSA" Missing
-Journal of Lightwave Technology=#IEEE_J_JLT#
-IEEE/OSA Journal of Lightwave Technology=#IEEE_J_JLT#
-
-
-
-physics, electrons, nanotechnology, nuclear and quantum electronics
-IEEE Electron Device Letters=#IEEE_J_EDL#
-IEEE Journal of Quantum Electronics=#IEEE_J_JQE#
-IEEE Journal of Selected Topics in Quantum Electronics=#IEEE_J_JSTQE#
-IEEE Transactions on Electron Devices=#IEEE_J_ED#
-IEEE Transactions on Nanotechnology=#IEEE_J_NANO#
-IEEE Transactions on Nuclear Science=#IEEE_J_NS#
-IEEE Transactions on Plasma Science=#IEEE_J_PS#
-
-
-
-reliability
-IEEE Transactions on Device and Materials Reliability=#IEEE_J_DMR#
-IEEE Transactions on Reliability=#IEEE_J_R#
-
-
-
-semiconductors, superconductors, electrochemical and solid state
-IEEE/ECS Electrochemical and Solid-State Letters=#IEEE_J_ESSL#
-IEEE Journal of Solid-State Circuits=#IEEE_J_JSSC#
-IEEE Transactions on Applied Superconductivity=#IEEE_J_ASC#
-IEEE Transactions on Semiconductor Manufacturing=#IEEE_J_SM#
-
-
-
-sensors
-IEEE Sensors Journal=#IEEE_J_SENSOR#
-
-
-
-VLSI
-IEEE Transactions on Very Large Scale Integration (VLSI) Systems=#IEEE_J_VLSI#
-
-
-
-
-
-
-IEEE Magazines
-
-
-
-IEEE Aerospace and Electronics Systems Magazine=#IEEE_M_AES#
-IEEE Annals of the History of Computing=#IEEE_M_HIST#
-IEEE Antennas and Propagation Magazine=#IEEE_M_AP#
-IEEE ASSP Magazine=#IEEE_M_ASSP#
-IEEE Circuits and Devices Magazine=#IEEE_M_CD#
-IEEE Circuits and Systems Magazine=#IEEE_M_CAS#
-IEEE Communications Magazine=#IEEE_M_COM#
-IEEE Communications Society Magazine=#IEEE_M_COMSOC#
-IEEE Computational Intelligence Magazine=#IEEE_M_CIM#
-CSEM changed to CSE in 1999
-IEEE Computing in Science and Engineering=#IEEE_M_CSE#
-IEEE Computational Science and Engineering Magazine=#IEEE_M_CSEM#
-IEEE Computer=#IEEE_M_C#
-IEEE Computer Applications in Power=#IEEE_M_CAP#
-IEEE Computer Graphics and Applications=#IEEE_M_CGA#
-IEEE Concurrency=#IEEE_M_CONC#
-IEEE Control Systems=#IEEE_M_CS#
-IEEE Control Systems Magazine=#IEEE_M_CS#
-IEEE Design and Test of Computers=#IEEE_M_DTC#
-IEEE Electrical Insulation Magazine=#IEEE_M_EI#
-IEEE ElectroTechnology Review=#IEEE_M_ETR#
-IEEE Engineering in Medicine and Biology Magazine=#IEEE_M_EMB#
-IEEE Engineering Management Review=#IEEE_M_EMR#
-IEEE Expert=#IEEE_M_EXP#
-IEEE Industry Applications Magazine=#IEEE_M_IA#
-IEEE Industrial Electronics Magazine=#IEEE_M_IE#
-IEEE Instrumentation and Measurement Magazine=#IEEE_M_IM#
-IEEE Intelligent Systems=#IEEE_M_IS#
-IEEE Intelligent Transportation Systems Magazine=#IEEE_M_ITS#
-IEEE Internet Computing=#IEEE_M_IC#
-IEEE IT Professional=#IEEE_M_ITP#
-IEEE Micro=#IEEE_M_MICRO#
-IEEE Microwave Magazine=#IEEE_M_MW#
-IEEE Multimedia=#IEEE_M_MM#
-IEEE Nanotechnology Magazine=#IEEE_M_NANO#
-IEEE Network=#IEEE_M_NET#
-IEEE Personal Communications Magazine=#IEEE_M_PCOM#
-IEEE Potentials=#IEEE_M_POT#
-CAP and PER merged to form PE in 2003
-IEEE Power and Energy Magazine=#IEEE_M_PE#
-IEEE Power Engineering Review=#IEEE_M_PER#
-IEEE Pervasive Computing=#IEEE_M_PVC#
-IEEE Robotics and Automation Magazine=#IEEE_M_RA#
-IEEE Security and Privacy=#IEEE_M_SAP#
-IEEE Signal Processing Magazine=#IEEE_M_SP#
-IEEE Software=#IEEE_M_S#
-IEEE Spectrum=#IEEE_M_SPECT#
-IEEE Technology and Society Magazine=#IEEE_M_TS#
-IEEE Vehicular Technology Magazine=#IEEE_M_VT#
-IEEE Wireless Communications=#IEEE_M_WC#
-Aaron Chen: "Magazine" missing
-IEEE Wireless Communications Magazine=#IEEE_M_WC#
-Today's Engineer=#IEEE_M_TODAY#
-
-
-
-
-
-
-IEEE Online Publications
-
-
-
-IEEE Communications Surveys and Tutorials=#IEEE_O_CSTO#
-IEEE Distributed Systems Online=#IEEE_O_DSO#
-
-
-
-
+IEEE Journals
+
+
+
+aerospace and military
+IEEE Transactions on Aerospace and Electronic Systems=#IEEE_J_AES#
+IEEE Transactions on Aerospace and Navigational Electronics=#IEEE_J_ANE#
+IEEE Transactions on Aeronautical and Navigational Electronics=#IEEE_J_ANNE#
+IEEE Transactions on Aerospace=#IEEE_J_AS#
+IEEE Transactions on Airborne Electronics=#IEEE_J_AIRE#
+IEEE Transactions on Military Electronics=#IEEE_J_MIL#
+
+
+
+autos, transportation and vehicles (non-aerospace)
+IEEE Transactions on Intelligent Transportation Systems=#IEEE_J_ITS#
+IEEE Transactions on Vehicular Technology=#IEEE_J_VT#
+IEEE Transactions on Vehicular Communications=#IEEE_J_VC#
+
+
+
+circuits, signals, systems, audio and controls
+IEEE Signal Processing Letters=#IEEE_J_SPL#
+IEEE Transactions on Acoustics, Speech and Signal Processing=#IEEE_J_ASSP#
+IEEE Transactions on Acoustics, Speech, and Signal Processing=#IEEE_J_ASSP#
+IEEE Transactions on Audio=#IEEE_J_AU#
+IEEE Transactions on Audio and Electroacoustics=#IEEE_J_AUEA#
+IEEE Transactions on Automatic Control=#IEEE_J_AC#
+IEEE Transactions on Circuits and Systems=#IEEE_J_CAS#
+IEEE Transactions on Circuits and Systems for Video Technology=#IEEE_J_CASVT#
+IEEE Transactions on Circuits and Systems I: Fundamental Theory and Applications=#IEEE_J_CASI#
+IEEE Transactions on Circuits and Systems II: Analog and Digital Signal Processing=#IEEE_J_CASII#
+in 2004 CASI and CASII renamed part title to CASI_RP and CASII_EB, respectively.
+IEEE Transactions on Circuits and Systems I: Regular Papers=#IEEE_J_CASI_RP#
+IEEE Transactions on Circuits and Systems II: Express Briefs=#IEEE_J_CASII_EB#
+IEEE Transactions on Circuit Theory=#IEEE_J_CT#
+IEEE Transactions on Control Systems Technology=#IEEE_J_CST#
+IEEE Transactions on Signal Processing=#IEEE_J_SP#
+IEEE Transactions on Sonics and Ultrasonics=#IEEE_J_SU#
+IEEE Transactions on Speech and Audio Processing=#IEEE_J_SAP#
+IEEE Journal of Selected Topics in Signal Processing=#IEEE_J_STSP#
+IEEE Systems Journal=#IEEE_J_SYST#
+IEEE Transactions on Ultrasonics Engineering=#IEEE_J_UE#
+Aaron Chen: "," missing
+IEEE Transactions on Ultrasonics, Ferroelectrics and Frequency Control=#IEEE_J_UFFC#
+IEEE Transactions on Ultrasonics, Ferroelectrics, and Frequency Control=#IEEE_J_UFFC#
+
+
+
+communications
+IEEE Communications Letters=#IEEE_J_COML#
+IEEE Journal on Selected Areas in Communications=#IEEE_J_JSAC#
+IEEE Transactions on Communications=#IEEE_J_COM#
+IEEE Transactions on Communication Technology=#IEEE_J_COMT#
+IEEE Transactions on Wireless Communications=#IEEE_J_WCOM#
+
+
+
+components, packaging and manufacturing
+IEEE Transactions on Advanced Packaging=#IEEE_J_ADVP#
+IEEE Transactions on Components, Hybrids and Manufacturing Technology=#IEEE_J_CHMT#
+IEEE Transactions on Components, Packaging and Manufacturing Technology, Part A=#IEEE_J_CPMTA#
+IEEE Transactions on Components, Packaging and Manufacturing Technology, Part B: Advanced Packaging=#IEEE_J_CPMTB#
+IEEE Transactions on Components, Packaging and Manufacturing Technology, Part C: Manufacturing=#IEEE_J_CPMTC#
+IEEE Transactions on Components and Packaging Technology=#IEEE_J_CAPT#
+IEEE Transactions on Components and Packaging Technologies=#IEEE_J_CAPTS#
+IEEE Transactions on Component Parts=#IEEE_J_CPART#
+IEEE Transactions on Electronics Packaging Manufacturing=#IEEE_J_EPM#
+IEEE Transactions on Manufacturing Technology=#IEEE_J_MFT#
+IEEE Transactions on Parts, Hybrids and Packaging=#IEEE_J_PHP#
+IEEE Transactions on Parts, Materials and Packaging=#IEEE_J_PMP#
+
+
+
+CAD
+IEEE Journal on Technology in Computer Aided Design=#IEEE_J_TCAD#
+IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems=#IEEE_J_CAD#
+
+
+
+coding, data, information, knowledge
+IEEE Transactions on Information Theory=#IEEE_J_IT#
+IEEE Transactions on Knowledge and Data Engineering=#IEEE_J_KDE#
+
+
+
+computers, computation, networking and software
+Aaron Chen:
+Transactions on Computers=#IEEE_J_C#
+IEEE Transactions on Computers=#IEEE_J_C#
+IEEE Computer Architecture Letters=#IEEE_J_CAL#
+IEEE Transactions on Dependable and Secure Computing=#IEEE_J_DSC#
+IEEE Transactions on Electronic Computers=#IEEE_J_ECOMP#
+IEEE Transactions on Evolutionary Computation=#IEEE_J_EVC#
+IEEE Transactions on Fuzzy Systems=#IEEE_J_FUZZ#
+IEEE Transactions on Information Forensics and Security=#IEEE_J_IFS#
+IEEE Transactions on Mobile Computing=#IEEE_J_MC#
+IEEE/ACM Transactions on Networking=#IEEE_J_NET#
+IEEE Transactions on Neural Networks=#IEEE_J_NN#
+IEEE Transactions on Network and Service Management=#IEEE_J_NSM#
+IEEE Transactions on Parallel and Distributed Systems=#IEEE_J_PDS#
+IEEE Transactions on Services Computing=#IEEE_J_SC#
+IEEE Transactions on Software Engineering=#IEEE_J_SE#
+
+
+
+computer graphics, imaging, and multimedia
+IEEE/OSA Journal of Display Technology=#IEEE_J_JDT#
+IEEE Transactions on Image Processing=#IEEE_J_IP#
+IEEE Transactions on Multimedia=#IEEE_J_MM#
+IEEE Transactions on Visualization and Computer Graphics=#IEEE_J_VCG#
+
+
+
+cybernetics, ergonomics, robots, man-machine, and automation
+IEEE Transactions on Automation Science and Engineering=#IEEE_J_ASE#
+IEEE Journal of Robotics and Automation=#IEEE_J_JRA#
+IEEE Transactions on Haptics=#IEEE_J_H#
+IEEE Transactions on Human Factors in Electronics=#IEEE_J_HFE#
+IEEE Transactions on Man-Machine Systems=#IEEE_J_MMS#
+IEEE Transactions on Pattern Analysis and Machine Intelligence=#IEEE_J_PAMI#
+in 1989 JRA became RA
+in August 2004, RA split into ASE and RO
+IEEE Transactions on Robotics and Automation=#IEEE_J_RA#
+IEEE Transactions on Robotics=#IEEE_J_RO#
+Aaron Chen: "," missing
+IEEE Transactions on Systems, Man and Cybernetics=#IEEE_J_SMC#
+IEEE Transactions on Systems, Man, and Cybernetics=#IEEE_J_SMC#
+IEEE Transactions on Systems, Man, and Cybernetics, Part A: Systems and Humans=#IEEE_J_SMCA#
+IEEE Transactions on Systems, Man, and Cybernetics, Part B: Cybernetics=#IEEE_J_SMCB#
+IEEE Transactions on Systems, Man, and Cybernetics, Part C: Applications and Reviews=#IEEE_J_SMCC#
+IEEE Transactions on Systems Science and Cybernetics=#IEEE_J_SSC#
+
+
+
+earth, wind, fire and water
+IEEE Transactions on Geoscience Electronics=#IEEE_J_GE#
+IEEE Transactions on Geoscience and Remote Sensing=#IEEE_J_GRS#
+IEEE Geoscience and Remote Sensing Letters=#IEEE_J_GRSL#
+IEEE Journal of Oceanic Engineering=#IEEE_J_OE#
+IEEE Journal of Selected Topics on Applied Observations and Remote Sensing=#IEEE_J_STARS#
+
+
+
+education, engineering, history, IEEE, professional
+Canadian Journal of Electrical and Computer Engineering=#IEEE_J_CJECE#
+Proceedings of the IEEE=#IEEE_J_PROC#
+IEEE Transactions on Education=#IEEE_J_EDU#
+IEEE Transactions on Engineering Management=#IEEE_J_EM#
+IEEE Transactions on Engineering Writing and Speech=#IEEE_J_EWS#
+IEEE Transactions on Learning Technologies=#IEEE_J_LT#
+IEEE Transactions on Professional Communication=#IEEE_J_PC#
+
+
+
+electromagnetics, antennas, EMI, magnetics and microwave
+IEEE Antennas and Wireless Propagation Letters=#IEEE_J_AWPL#
+IEEE Microwave and Guided Wave Letters=#IEEE_J_MGWL#
+IEEE Microwave and Wireless Components Letters=#IEEE_J_MWCL#
+IEEE Transactions on Antennas and Propagation=#IEEE_J_AP#
+IEEE Transactions on Electromagnetic Compatibility=#IEEE_J_EMC#
+IEEE Transactions on Magnetics=#IEEE_J_MAG#
+IEEE Transactions on Microwave Theory and Techniques=#IEEE_J_MTT#
+IEEE Transactions on Radio Frequency Interference=#IEEE_J_RFI#
+IEEE Translation Journal on Magnetics in Japan=#IEEE_J_TJMJ#
+
+
+
+energy and power
+IEEE Transactions on Energy Conversion=#IEEE_J_EC#
+IEEE Power Electronics Letters=#IEEE_J_PEL#
+IEEE Transactions on Power Apparatus and Systems=#IEEE_J_PWRAS#
+IEEE Transactions on Power Delivery=#IEEE_J_PWRD#
+IEEE Transactions on Power Electronics=#IEEE_J_PWRE#
+IEEE Transactions on Power Systems=#IEEE_J_PWRS#
+
+
+
+industrial, commercial and consumer
+IEEE Transactions on Applications and Industry=#IEEE_J_APPIND#
+IEEE Transactions on Broadcasting=#IEEE_J_BC#
+IEEE Transactions on Broadcast and Television Receivers=#IEEE_J_BCTV#
+IEEE Transactions on Consumer Electronics=#IEEE_J_CE#
+IEEE Transactions on Industrial Electronics=#IEEE_J_IE#
+IEEE Transactions on Industrial Electronics and Control Instrumentation=#IEEE_J_IECI#
+IEEE Transactions on Industry Applications=#IEEE_J_IA#
+IEEE Transactions on Industry and General Applications=#IEEE_J_IGA#
+IEEE Transactions on Industrial Informatics=#IEEE_J_IINF#
+IEEE Journal of Product Safety Engineering=#IEEE_J_PSE#
+
+
+
+instrumentation and measurement
+IEEE Transactions on Instrumentation and Measurement=#IEEE_J_IM#
+
+
+
+insulation and materials
+IEEE/TMS Journal of Electronic Materials=#IEEE_J_JEM#
+IEEE Transactions on Dielectrics and Electrical Insulation=#IEEE_J_DEI#
+IEEE Transactions on Electrical Insulation=#IEEE_J_EI#
+
+
+
+mechanical
+IEEE/ASME Transactions on Mechatronics=#IEEE_J_MECH#
+IEEE/ASME Journal of Microelectromechanical Systems=#IEEE_J_MEMS#
+Aaron Chen: IEEE/ASME missing (Thanks to Adam Schofield)
+Journal of Microelectromechanical Systems=#IEEE_J_MEMS#
+
+
+
+medical and biological
+IEEE Transactions on Biomedical Circuits and Systems=#IEEE_J_BCAS#
+IEEE Transactions on Biomedical Engineering=#IEEE_J_BME#
+Note: The B-ME journal later dropped the hyphen and became the BME.
+IEEE Transactions on Bio-Medical Engineering=#IEEE_J_B-ME#
+IEEE Transactions on Bio-Medical Electronics=#IEEE_J_BMELC#
+IEEE/ACM Transactions on Computational Biology and Bioinformatics=#IEEE_J_CBB#
+IEEE Transactions on Information Technology in Biomedicine=#IEEE_J_ITBM#
+IEEE Transactions on Medical Electronics=#IEEE_J_ME#
+IEEE Transactions on Medical Imaging=#IEEE_J_MI#
+IEEE Transactions on NanoBioscience=#IEEE_J_NB#
+IEEE Transactions on Neural Systems and Rehabilitation Engineering=#IEEE_J_NSRE#
+IEEE Reviews in Biomedical Engineering=#IEEE_J_RBME#
+IEEE Transactions on Rehabilitation Engineering=#IEEE_J_RE#
+
+
+
+optics, lightwave and photonics
+IEEE Photonics Technology Letters=#IEEE_J_PTL#
+Aaron Chen: "IEEE/OSA" Missing
+Journal of Lightwave Technology=#IEEE_J_JLT#
+IEEE/OSA Journal of Lightwave Technology=#IEEE_J_JLT#
+
+
+
+physics, electrons, nanotechnology, nuclear and quantum electronics
+IEEE Electron Device Letters=#IEEE_J_EDL#
+IEEE Journal of Quantum Electronics=#IEEE_J_JQE#
+IEEE Journal of Selected Topics in Quantum Electronics=#IEEE_J_JSTQE#
+IEEE Transactions on Electron Devices=#IEEE_J_ED#
+IEEE Transactions on Nanotechnology=#IEEE_J_NANO#
+IEEE Transactions on Nuclear Science=#IEEE_J_NS#
+IEEE Transactions on Plasma Science=#IEEE_J_PS#
+
+
+
+reliability
+IEEE Transactions on Device and Materials Reliability=#IEEE_J_DMR#
+IEEE Transactions on Reliability=#IEEE_J_R#
+
+
+
+semiconductors, superconductors, electrochemical and solid state
+IEEE/ECS Electrochemical and Solid-State Letters=#IEEE_J_ESSL#
+IEEE Journal of Solid-State Circuits=#IEEE_J_JSSC#
+IEEE Transactions on Applied Superconductivity=#IEEE_J_ASC#
+IEEE Transactions on Semiconductor Manufacturing=#IEEE_J_SM#
+
+
+
+sensors
+IEEE Sensors Journal=#IEEE_J_SENSOR#
+
+
+
+VLSI
+IEEE Transactions on Very Large Scale Integration (VLSI) Systems=#IEEE_J_VLSI#
+
+
+
+
+
+
+IEEE Magazines
+
+
+
+IEEE Aerospace and Electronics Systems Magazine=#IEEE_M_AES#
+IEEE Annals of the History of Computing=#IEEE_M_HIST#
+IEEE Antennas and Propagation Magazine=#IEEE_M_AP#
+IEEE ASSP Magazine=#IEEE_M_ASSP#
+IEEE Circuits and Devices Magazine=#IEEE_M_CD#
+IEEE Circuits and Systems Magazine=#IEEE_M_CAS#
+IEEE Communications Magazine=#IEEE_M_COM#
+IEEE Communications Society Magazine=#IEEE_M_COMSOC#
+IEEE Computational Intelligence Magazine=#IEEE_M_CIM#
+CSEM changed to CSE in 1999
+IEEE Computing in Science and Engineering=#IEEE_M_CSE#
+IEEE Computational Science and Engineering Magazine=#IEEE_M_CSEM#
+IEEE Computer=#IEEE_M_C#
+IEEE Computer Applications in Power=#IEEE_M_CAP#
+IEEE Computer Graphics and Applications=#IEEE_M_CGA#
+IEEE Concurrency=#IEEE_M_CONC#
+IEEE Control Systems=#IEEE_M_CS#
+IEEE Control Systems Magazine=#IEEE_M_CS#
+IEEE Design and Test of Computers=#IEEE_M_DTC#
+IEEE Electrical Insulation Magazine=#IEEE_M_EI#
+IEEE ElectroTechnology Review=#IEEE_M_ETR#
+IEEE Engineering in Medicine and Biology Magazine=#IEEE_M_EMB#
+IEEE Engineering Management Review=#IEEE_M_EMR#
+IEEE Expert=#IEEE_M_EXP#
+IEEE Industry Applications Magazine=#IEEE_M_IA#
+IEEE Industrial Electronics Magazine=#IEEE_M_IE#
+IEEE Instrumentation and Measurement Magazine=#IEEE_M_IM#
+IEEE Intelligent Systems=#IEEE_M_IS#
+IEEE Intelligent Transportation Systems Magazine=#IEEE_M_ITS#
+IEEE Internet Computing=#IEEE_M_IC#
+IEEE IT Professional=#IEEE_M_ITP#
+IEEE Micro=#IEEE_M_MICRO#
+IEEE Microwave Magazine=#IEEE_M_MW#
+IEEE Multimedia=#IEEE_M_MM#
+IEEE Nanotechnology Magazine=#IEEE_M_NANO#
+IEEE Network=#IEEE_M_NET#
+IEEE Personal Communications Magazine=#IEEE_M_PCOM#
+IEEE Potentials=#IEEE_M_POT#
+CAP and PER merged to form PE in 2003
+IEEE Power and Energy Magazine=#IEEE_M_PE#
+IEEE Power Engineering Review=#IEEE_M_PER#
+IEEE Pervasive Computing=#IEEE_M_PVC#
+IEEE Robotics and Automation Magazine=#IEEE_M_RA#
+IEEE Security and Privacy=#IEEE_M_SAP#
+IEEE Signal Processing Magazine=#IEEE_M_SP#
+IEEE Software=#IEEE_M_S#
+IEEE Spectrum=#IEEE_M_SPECT#
+IEEE Technology and Society Magazine=#IEEE_M_TS#
+IEEE Vehicular Technology Magazine=#IEEE_M_VT#
+IEEE Wireless Communications=#IEEE_M_WC#
+Aaron Chen: "Magazine" missing
+IEEE Wireless Communications Magazine=#IEEE_M_WC#
+Today's Engineer=#IEEE_M_TODAY#
+
+
+
+
+
+
+IEEE Online Publications
+
+
+
+IEEE Communications Surveys and Tutorials=#IEEE_O_CSTO#
+IEEE Distributed Systems Online=#IEEE_O_DSO#
+
+
+
+
diff --git a/src/resource/Icons.properties b/src/resource/Icons.properties
index 7c38f62..4c27ec2 100644
--- a/src/resource/Icons.properties
+++ b/src/resource/Icons.properties
@@ -1,69 +1,69 @@
-jabrefIcon=JabRef-icon.png
-
-new=filenew.png
-open=fileopen.png
-save=document-save.png
-saveAs=document-save-as.png
-edit=editor.png
-undo=edit-undo.png
-redo=edit-redo.png
-editPreamble=preamble.png
-copy=edit-copy.png
-paste=edit-paste.png
-cut=edit-cut.png
-about=help-about.png
-loadSession=user-home.png
-preferences=preferences.png
-help=help-browser.png
-helpSmall=help-browser.png
-helpContents=contents.png
-delete=edit-delete.png
-markEntries=mark.png
-unmarkEntries=unmark.png
-search=search.png
-incSearch=search.png
-toggleSearch=search.png
-editStrings=strings.png
-toggleGroups=grouping_morten.png
-togglePreview=edit-find.png
-makeKey=wizard.png
-openFile=pdf-new.png
-openUrl=emblem-web.png
-pdfSmall=pdf.png
-www=emblem-web.png
-wwwSmall=emblem-web-small.png
-citeseer=wwwciteseer.png
-doiSmall=doismall.png
-psSmall=postscript.png
-groupsHighlightAny=groupsHighlightAny.png
-groupsHighlightAll=groupsHighlightAll.png
-add=add.png
-remove=remove.png
-close=fileclose.png
-close2=fileclose2.png
-integrityCheck=integrity.png
-medline=emblem-web.png
-left=go-previous.png
-right=go-next.png
-up=go-up.png
-down=go-down.png
-required=reqIcon.png
-optional=optIcon.png
-general=genIcon.png
-abstract=absIcon.png
-source=viewsource.gif
-duplicate=duplicate.png
-emacs=emacs.png
-lyx=lyx2.png
-winedt=winedt.png
-refresh=view-refresh.png
-autoGroup=preferences.png
-integrityWarn=messageWarn.png
-integrityFail=messageFail.png
-integrityInfo=messageInfo.png
-complete=completeItem.png
-wrong=wrongItem.png
-groupIncluding=groupIncluding.png
-groupRefining=groupRefining.png
-dbConnect=database_connect.png
-dbExport=database_save.png
+jabrefIcon=JabRef-icon.png
+
+new=filenew.png
+open=fileopen.png
+save=document-save.png
+saveAs=document-save-as.png
+edit=editor.png
+undo=edit-undo.png
+redo=edit-redo.png
+editPreamble=preamble.png
+copy=edit-copy.png
+paste=edit-paste.png
+cut=edit-cut.png
+about=help-about.png
+loadSession=user-home.png
+preferences=preferences.png
+help=help-browser.png
+helpSmall=help-browser.png
+helpContents=contents.png
+delete=edit-delete.png
+markEntries=mark.png
+unmarkEntries=unmark.png
+search=search.png
+incSearch=search.png
+toggleSearch=search.png
+editStrings=strings.png
+toggleGroups=grouping_morten.png
+togglePreview=edit-find.png
+makeKey=wizard.png
+openFile=pdf-new.png
+openUrl=emblem-web.png
+pdfSmall=pdf.png
+www=emblem-web.png
+wwwSmall=emblem-web-small.png
+citeseer=wwwciteseer.png
+doiSmall=doismall.png
+psSmall=postscript.png
+groupsHighlightAny=groupsHighlightAny.png
+groupsHighlightAll=groupsHighlightAll.png
+add=add.png
+remove=remove.png
+close=fileclose.png
+close2=fileclose2.png
+integrityCheck=integrity.png
+medline=emblem-web.png
+left=go-previous.png
+right=go-next.png
+up=go-up.png
+down=go-down.png
+required=reqIcon.png
+optional=optIcon.png
+general=genIcon.png
+abstract=absIcon.png
+source=viewsource.gif
+duplicate=duplicate.png
+emacs=emacs.png
+lyx=lyx2.png
+winedt=winedt.png
+refresh=view-refresh.png
+autoGroup=preferences.png
+integrityWarn=messageWarn.png
+integrityFail=messageFail.png
+integrityInfo=messageInfo.png
+complete=completeItem.png
+wrong=wrongItem.png
+groupIncluding=groupIncluding.png
+groupRefining=groupRefining.png
+dbConnect=database_connect.png
+dbExport=database_save.png
diff --git a/src/resource/IntegrityMessage.properties b/src/resource/IntegrityMessage.properties
index a89f6b8..07a61d0 100644
--- a/src/resource/IntegrityMessage.properties
+++ b/src/resource/IntegrityMessage.properties
@@ -1,11 +1,11 @@
-#! created/edited by Popeye version 0.51 sunshine (popeye.sourceforge.net)
-
-ITEXT_1=there are hints
-ITEXT_1001=warning
-ITEXT_2001=failure
-ITEXT_1010=beginning of $FIELD field
-ITEXT_1011=bad end ($FIELD field)
-ITEXT_1012=something could be wrong in $FIELD field
-ITEXT_10=There are large capitals without any mask {} into the $FIELD field
-ITEXT_11=$FIELD field should be contain a four digit number
-ITEXT_2010=unexpected closing } into $FIELD field
+#! created/edited by Popeye version 0.51 sunshine (popeye.sourceforge.net)
+
+ITEXT_1=there are hints
+ITEXT_1001=warning
+ITEXT_2001=failure
+ITEXT_1010=beginning of $FIELD field
+ITEXT_1011=bad end ($FIELD field)
+ITEXT_1012=something could be wrong in $FIELD field
+ITEXT_10=There are large capitals without any mask {} into the $FIELD field
+ITEXT_11=$FIELD field should be contain a four digit number
+ITEXT_2010=unexpected closing } into $FIELD field
diff --git a/src/resource/IntegrityMessage_da.properties b/src/resource/IntegrityMessage_da.properties
index c604fb5..5bef607 100644
--- a/src/resource/IntegrityMessage_da.properties
+++ b/src/resource/IntegrityMessage_da.properties
@@ -1,12 +1,12 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-ITEXT_1=der er tips
-ITEXT_1001=advarsel
-ITEXT_2001=fejl
-ITEXT_1010=begyndelsen p\u00e5 $FIELD-feltet
-ITEXT_1011=forkert afsluting ($FIELD-feltet)
-ITEXT_1012=der kan v\u00e6re noget galt i $FIELD-feltet
-ITEXT_10=Der er store bogstaver uden maskering {} i $FIELD-feltet
-ITEXT_11=$FIELD-feltet burde indeholde et firecifret tal
-ITEXT_2010=uventet afsluttende } i $FIELD-feltet
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+ITEXT_1=der er tips
+ITEXT_1001=advarsel
+ITEXT_2001=fejl
+ITEXT_1010=begyndelsen p\u00e5 $FIELD-feltet
+ITEXT_1011=forkert afsluting ($FIELD-feltet)
+ITEXT_1012=der kan v\u00e6re noget galt i $FIELD-feltet
+ITEXT_10=Der er store bogstaver uden maskering {} i $FIELD-feltet
+ITEXT_11=$FIELD-feltet burde indeholde et firecifret tal
+ITEXT_2010=uventet afsluttende } i $FIELD-feltet
diff --git a/src/resource/IntegrityMessage_de.properties b/src/resource/IntegrityMessage_de.properties
index 5e54584..8761a57 100644
--- a/src/resource/IntegrityMessage_de.properties
+++ b/src/resource/IntegrityMessage_de.properties
@@ -1,13 +1,13 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-
-ITEXT_1=Hinweise vorhanden
-ITEXT_1001=Warnung
-ITEXT_2001=Fehler
-ITEXT_1010=Anfang des $FIELD Feldes fehlerhaft?
-ITEXT_1011=Ende des $FIELD Feldes mit Fehlern?
-ITEXT_1012=Im $FIELD Feld sind wahrscheinlich Fehler!
-ITEXT_10=Im $FIELD Feld existieren unmaskierte {} Gro\u00dfbuchstaben!
-ITEXT_11=Das $FIELD Feld sollte 4-stellige Zahlen enthalten!
-ITEXT_2010=Unerwartetes schlie\u00dfendes } im $FIELD Feld!
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+
+ITEXT_1=Hinweise vorhanden
+ITEXT_1001=Warnung
+ITEXT_2001=Fehler
+ITEXT_1010=Anfang des $FIELD Feldes fehlerhaft?
+ITEXT_1011=Ende des $FIELD Feldes mit Fehlern?
+ITEXT_1012=Im $FIELD Feld sind wahrscheinlich Fehler!
+ITEXT_10=Im $FIELD Feld existieren unmaskierte {} Gro\u00dfbuchstaben!
+ITEXT_11=Das $FIELD Feld sollte 4-stellige Zahlen enthalten!
+ITEXT_2010=Unerwartetes schlie\u00dfendes } im $FIELD Feld!
diff --git a/src/resource/IntegrityMessage_en.properties b/src/resource/IntegrityMessage_en.properties
index a89f6b8..07a61d0 100644
--- a/src/resource/IntegrityMessage_en.properties
+++ b/src/resource/IntegrityMessage_en.properties
@@ -1,11 +1,11 @@
-#! created/edited by Popeye version 0.51 sunshine (popeye.sourceforge.net)
-
-ITEXT_1=there are hints
-ITEXT_1001=warning
-ITEXT_2001=failure
-ITEXT_1010=beginning of $FIELD field
-ITEXT_1011=bad end ($FIELD field)
-ITEXT_1012=something could be wrong in $FIELD field
-ITEXT_10=There are large capitals without any mask {} into the $FIELD field
-ITEXT_11=$FIELD field should be contain a four digit number
-ITEXT_2010=unexpected closing } into $FIELD field
+#! created/edited by Popeye version 0.51 sunshine (popeye.sourceforge.net)
+
+ITEXT_1=there are hints
+ITEXT_1001=warning
+ITEXT_2001=failure
+ITEXT_1010=beginning of $FIELD field
+ITEXT_1011=bad end ($FIELD field)
+ITEXT_1012=something could be wrong in $FIELD field
+ITEXT_10=There are large capitals without any mask {} into the $FIELD field
+ITEXT_11=$FIELD field should be contain a four digit number
+ITEXT_2010=unexpected closing } into $FIELD field
diff --git a/src/resource/IntegrityMessage_fr.properties b/src/resource/IntegrityMessage_fr.properties
index 0eeaa39..786f2db 100644
--- a/src/resource/IntegrityMessage_fr.properties
+++ b/src/resource/IntegrityMessage_fr.properties
@@ -1,11 +1,11 @@
-#! created/edited by Popeye version 0.51 sunshine (popeye.sourceforge.net)
-
-ITEXT_1=il y a des suggestions
-ITEXT_1001=avertissement
-ITEXT_2001=\u00e9chec
-ITEXT_1010=d\u00e9but du champ $FIELD
-ITEXT_1011=mauvaise terminaison (champ $FIELD)
-ITEXT_1012=Il pourrait y avoir une erreur dans le champ $FIELD
-ITEXT_10=Il y a des majuscules non encadr\u00e9es par des accolades dans le champ $FIELD
-ITEXT_11=Le champ $FIELD devrait contenir un nombre \u00e0 4 chiffres
-ITEXT_2010=accolade fermante inattendue dans le champ $FIELD
+#! created/edited by Popeye version 0.51 sunshine (popeye.sourceforge.net)
+
+ITEXT_1=il y a des suggestions
+ITEXT_1001=avertissement
+ITEXT_2001=\u00e9chec
+ITEXT_1010=d\u00e9but du champ $FIELD
+ITEXT_1011=mauvaise terminaison (champ $FIELD)
+ITEXT_1012=Il pourrait y avoir une erreur dans le champ $FIELD
+ITEXT_10=Il y a des majuscules non encadr\u00e9es par des accolades dans le champ $FIELD
+ITEXT_11=Le champ $FIELD devrait contenir un nombre \u00e0 4 chiffres
+ITEXT_2010=accolade fermante inattendue dans le champ $FIELD
diff --git a/src/resource/IntegrityMessage_in.properties b/src/resource/IntegrityMessage_in.properties
index 797bbc7..afee718 100644
--- a/src/resource/IntegrityMessage_in.properties
+++ b/src/resource/IntegrityMessage_in.properties
@@ -1,12 +1,12 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-ITEXT_1=Ada beberapa saran
-ITEXT_10=Ada_beberapa_huruf_besar_tanpa_kurung_kurawal_{}_dalam_area
-ITEXT_1001=peringatan
-ITEXT_1010=permulaan dari area $FIELD
-ITEXT_1011=kesalahan di akhir (area $FIELD)
-ITEXT_1012=ada kemungkinan kesalahan di area $FIELD
-ITEXT_11=Area $FIELD harus berisi paling tidak empat angka
-ITEXT_2001=kesalahan
-ITEXT_2010=ada penutup kurawal } yang tidak diinginkan dalam area
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+ITEXT_1=Ada beberapa saran
+ITEXT_10=Ada_beberapa_huruf_besar_tanpa_kurung_kurawal_{}_dalam_area
+ITEXT_1001=peringatan
+ITEXT_1010=permulaan dari area $FIELD
+ITEXT_1011=kesalahan di akhir (area $FIELD)
+ITEXT_1012=ada kemungkinan kesalahan di area $FIELD
+ITEXT_11=Area $FIELD harus berisi paling tidak empat angka
+ITEXT_2001=kesalahan
+ITEXT_2010=ada penutup kurawal } yang tidak diinginkan dalam area
diff --git a/src/resource/IntegrityMessage_it.properties b/src/resource/IntegrityMessage_it.properties
index 5aa57af..670ff72 100644
--- a/src/resource/IntegrityMessage_it.properties
+++ b/src/resource/IntegrityMessage_it.properties
@@ -1,11 +1,11 @@
-#! created/edited by Popeye version 0.51 sunshine (popeye.sourceforge.net)
-
-ITEXT_1=suggerimenti
-ITEXT_1001=avvertenza
-ITEXT_2001=fallito
-ITEXT_1010=inizio del campo $FIELD
-ITEXT_1011=terminatore errato (campo $FIELD)
-ITEXT_1012=possibile errore nel campo $FIELD
-ITEXT_10=Il campo $FIELD contiene maiuscole non mascherate da {}
-ITEXT_11=Il campo $FIELD deve contenere un numero a 4 cifre
-ITEXT_2010=Il campo $FIELD contiene una parentesi graffa chiusa inattesa
+#! created/edited by Popeye version 0.51 sunshine (popeye.sourceforge.net)
+
+ITEXT_1=suggerimenti
+ITEXT_1001=avvertenza
+ITEXT_2001=fallito
+ITEXT_1010=inizio del campo $FIELD
+ITEXT_1011=terminatore errato (campo $FIELD)
+ITEXT_1012=possibile errore nel campo $FIELD
+ITEXT_10=Il campo $FIELD contiene maiuscole non mascherate da {}
+ITEXT_11=Il campo $FIELD deve contenere un numero a 4 cifre
+ITEXT_2010=Il campo $FIELD contiene una parentesi graffa chiusa inattesa
diff --git a/src/resource/IntegrityMessage_ja.properties b/src/resource/IntegrityMessage_ja.properties
index 800bbbc..7fc0fb3 100644
--- a/src/resource/IntegrityMessage_ja.properties
+++ b/src/resource/IntegrityMessage_ja.properties
@@ -1,13 +1,13 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-
-ITEXT_1=\u30d2\u30f3\u30c8\u304c\u3042\u308a\u307e\u3059
-ITEXT_1001=\u8b66\u544a
-ITEXT_2001=\u5931\u6557
-ITEXT_1010=$FIELD \u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u5148\u982d
-ITEXT_1011=\u7570\u5e38\u7d42\u4e86\uff08$FIELD \u30d5\u30a3\u30fc\u30eb\u30c9\uff09
-ITEXT_1012=$FIELD \u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u304a\u304b\u3057\u304f\u306a\u3063\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059
-ITEXT_10=$FIELD \u30d5\u30a3\u30fc\u30eb\u30c9\u306b{}\u3067\u30de\u30b9\u30af\u3055\u308c\u3066\u3044\u306a\u3044\u5927\u6587\u5b57\u304c\u3042\u308a\u307e\u3059
-ITEXT_11=$FIELD \u30d5\u30a3\u30fc\u30eb\u30c9\u306f4\u6841\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093
-ITEXT_2010=$FIELD \u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u4e88\u671f\u3057\u306a\u3044\u9589\u3058\u62ec\u5f27}\u304c\u3042\u308a\u307e\u3059
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+
+ITEXT_1=\u30d2\u30f3\u30c8\u304c\u3042\u308a\u307e\u3059
+ITEXT_1001=\u8b66\u544a
+ITEXT_2001=\u5931\u6557
+ITEXT_1010=$FIELD \u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u5148\u982d
+ITEXT_1011=\u7570\u5e38\u7d42\u4e86\uff08$FIELD \u30d5\u30a3\u30fc\u30eb\u30c9\uff09
+ITEXT_1012=$FIELD \u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u304a\u304b\u3057\u304f\u306a\u3063\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059
+ITEXT_10=$FIELD \u30d5\u30a3\u30fc\u30eb\u30c9\u306b{}\u3067\u30de\u30b9\u30af\u3055\u308c\u3066\u3044\u306a\u3044\u5927\u6587\u5b57\u304c\u3042\u308a\u307e\u3059
+ITEXT_11=$FIELD \u30d5\u30a3\u30fc\u30eb\u30c9\u306f4\u6841\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093
+ITEXT_2010=$FIELD \u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u4e88\u671f\u3057\u306a\u3044\u9589\u3058\u62ec\u5f27}\u304c\u3042\u308a\u307e\u3059
diff --git a/src/resource/IntegrityMessage_nl.properties b/src/resource/IntegrityMessage_nl.properties
index 6be22c6..6aba346 100644
--- a/src/resource/IntegrityMessage_nl.properties
+++ b/src/resource/IntegrityMessage_nl.properties
@@ -1,11 +1,11 @@
-#! created/edited by Gert Renckens, Dutch translation v0.12, last update: 20061102 (e-mail: gert (dot) renckens (at) student (dot) uhasselt (dot) be)
-
-ITEXT_1=Er zijn hints
-ITEXT_1001=Waarschuwing
-ITEXT_2001=Mislukking!
-ITEXT_1010=Begin van $FIELD veld
-ITEXT_1011=Verkeerd einde ($FIELD veld)
-ITEXT_1012=Er kan iets mis zijn in het $FIELD veld
-ITEXT_10=Er zijn hoofdletters zonder een {} masker in het $FIELD veld
-ITEXT_11=$FIELD veld moet een getal bestaande uit 4 cijfers bevatten
-ITEXT_2010=onverwachte sluitings } in het $FIELD veld
+#! created/edited by Gert Renckens, Dutch translation v0.12, last update: 20061102 (e-mail: gert (dot) renckens (at) student (dot) uhasselt (dot) be)
+
+ITEXT_1=Er zijn hints
+ITEXT_1001=Waarschuwing
+ITEXT_2001=Mislukking!
+ITEXT_1010=Begin van $FIELD veld
+ITEXT_1011=Verkeerd einde ($FIELD veld)
+ITEXT_1012=Er kan iets mis zijn in het $FIELD veld
+ITEXT_10=Er zijn hoofdletters zonder een {} masker in het $FIELD veld
+ITEXT_11=$FIELD veld moet een getal bestaande uit 4 cijfers bevatten
+ITEXT_2010=onverwachte sluitings } in het $FIELD veld
diff --git a/src/resource/IntegrityMessage_no.properties b/src/resource/IntegrityMessage_no.properties
index 3862e0e..5022074 100644
--- a/src/resource/IntegrityMessage_no.properties
+++ b/src/resource/IntegrityMessage_no.properties
@@ -1,11 +1,11 @@
-#! created/edited by Popeye version 0.51 sunshine (popeye.sourceforge.net)
-
-ITEXT_1=det er tips
-ITEXT_1001=advarsel
-ITEXT_2001=feil
-ITEXT_1010=begynnelsen p\u00e5 $FIELD-feltet
-ITEXT_1011=feil avsluting ($FIELD-feltet)
-ITEXT_1012=noe kan v\u00e6re galt i $FIELD-feltet
-ITEXT_10=Det er store bokstaver uten maskering {} inne i $FIELD-feltet
-ITEXT_11=$FIELD-feltet burde inneholde et firesifret tall
-ITEXT_2010=uventet avsluttende } inne i $FIELD-feltet
+#! created/edited by Popeye version 0.51 sunshine (popeye.sourceforge.net)
+
+ITEXT_1=det er tips
+ITEXT_1001=advarsel
+ITEXT_2001=feil
+ITEXT_1010=begynnelsen p\u00e5 $FIELD-feltet
+ITEXT_1011=feil avsluting ($FIELD-feltet)
+ITEXT_1012=noe kan v\u00e6re galt i $FIELD-feltet
+ITEXT_10=Det er store bokstaver uten maskering {} inne i $FIELD-feltet
+ITEXT_11=$FIELD-feltet burde inneholde et firesifret tall
+ITEXT_2010=uventet avsluttende } inne i $FIELD-feltet
diff --git a/src/resource/IntegrityMessage_tr.properties b/src/resource/IntegrityMessage_tr.properties
index 1a38e04..c5b819a 100644
--- a/src/resource/IntegrityMessage_tr.properties
+++ b/src/resource/IntegrityMessage_tr.properties
@@ -1,12 +1,12 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-ITEXT_1=ipu\u00e7lar\u0131 var
-ITEXT_1001=uyar\u0131
-ITEXT_2001=ba\u015far\u0131s\u0131z
-ITEXT_1010=$FIELD alan\u0131n\u0131n ba\u015flang\u0131c\u0131
-ITEXT_1011=k\u00f6t\u00fc son ($FIELD alan\u0131)
-ITEXT_1012=$FIELD alan\u0131nda bir yanl\u0131\u015fl\u0131k olabilir
-ITEXT_10=$FIELD alan\u0131 i\u00e7inde maskesiz {} b\u00fcy\u00fck harfler mevcut
-ITEXT_11=$FIELD alan\u0131 d\u00f6rt basamakl\u0131 bir say\u0131 i\u00e7ermeli
-ITEXT_2010=$FIELD alan\u0131 i\u00e7inde beklenmeyen kapanma }
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+ITEXT_1=ipu\u00e7lar\u0131 var
+ITEXT_1001=uyar\u0131
+ITEXT_2001=ba\u015far\u0131s\u0131z
+ITEXT_1010=$FIELD alan\u0131n\u0131n ba\u015flang\u0131c\u0131
+ITEXT_1011=k\u00f6t\u00fc son ($FIELD alan\u0131)
+ITEXT_1012=$FIELD alan\u0131nda bir yanl\u0131\u015fl\u0131k olabilir
+ITEXT_10=$FIELD alan\u0131 i\u00e7inde maskesiz {} b\u00fcy\u00fck harfler mevcut
+ITEXT_11=$FIELD alan\u0131 d\u00f6rt basamakl\u0131 bir say\u0131 i\u00e7ermeli
+ITEXT_2010=$FIELD alan\u0131 i\u00e7inde beklenmeyen kapanma }
diff --git a/src/resource/IntegrityMessage_vi.properties b/src/resource/IntegrityMessage_vi.properties
old mode 100755
new mode 100644
index f7e4a3c..d07d9f2
--- a/src/resource/IntegrityMessage_vi.properties
+++ b/src/resource/IntegrityMessage_vi.properties
@@ -1,13 +1,13 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-
-ITEXT_1=c\u00f3_c\u00e1c_g\u1ee3i_\u00fd
-ITEXT_1001=c\u1ea3nh_b\u00e1o
-ITEXT_2001=th\u1ea5t_b\u1ea1i
-ITEXT_1010=b\u1eaft_\u0111\u1ea7u_c\u1ee7a_tr\u01b0\u1eddng_$FIELD
-ITEXT_1011=k\u1ebft_th\u00fac_l\u1ed7i_(tr\u01b0\u1eddng_$FIEL)
-ITEXT_1012=c\u00f3_th\u1ec3_c\u00f3_th\u1ee9_g\u00ec_l\u1ed7i_trong_tr\u01b0\u1eddng_$FIELD
-ITEXT_10=C\u00f3_nh\u1eefng_ch\u1eef_vi\u1ebft_hoa_l\u1edbn_kh\u00f4ng_c\u00f3_m\u1eb7t_n\u1ea1_{}_\u1edf_trong_tr\u01b0\u1eddng_$FIELD
-ITEXT_11=Tr\u01b0\u1eddng_$FIELD_ph\u1ea3i_ch\u1ee9a_m\u1ed9t_con_s\u1ed1_c\u00f3_b\u1ed1n_ch\u1eef_s\u1ed1
-ITEXT_2010=l\u1ed7i_k\u00fd_hi\u1ec7u_}_kh\u00f4ng_mong_\u0111\u1ee3i_trong_tr\u01b0\u1eddng_$FIELD
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+
+ITEXT_1=c\u00f3_c\u00e1c_g\u1ee3i_\u00fd
+ITEXT_1001=c\u1ea3nh_b\u00e1o
+ITEXT_2001=th\u1ea5t_b\u1ea1i
+ITEXT_1010=b\u1eaft_\u0111\u1ea7u_c\u1ee7a_tr\u01b0\u1eddng_$FIELD
+ITEXT_1011=k\u1ebft_th\u00fac_l\u1ed7i_(tr\u01b0\u1eddng_$FIEL)
+ITEXT_1012=c\u00f3_th\u1ec3_c\u00f3_th\u1ee9_g\u00ec_l\u1ed7i_trong_tr\u01b0\u1eddng_$FIELD
+ITEXT_10=C\u00f3_nh\u1eefng_ch\u1eef_vi\u1ebft_hoa_l\u1edbn_kh\u00f4ng_c\u00f3_m\u1eb7t_n\u1ea1_{}_\u1edf_trong_tr\u01b0\u1eddng_$FIELD
+ITEXT_11=Tr\u01b0\u1eddng_$FIELD_ph\u1ea3i_ch\u1ee9a_m\u1ed9t_con_s\u1ed1_c\u00f3_b\u1ed1n_ch\u1eef_s\u1ed1
+ITEXT_2010=l\u1ed7i_k\u00fd_hi\u1ec7u_}_kh\u00f4ng_mong_\u0111\u1ee3i_trong_tr\u01b0\u1eddng_$FIELD
diff --git a/src/resource/IntegrityMessage_zh.properties b/src/resource/IntegrityMessage_zh.properties
index ff680fc..6736bcc 100644
--- a/src/resource/IntegrityMessage_zh.properties
+++ b/src/resource/IntegrityMessage_zh.properties
@@ -1,12 +1,12 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-ITEXT_1=\u4e0b\u9762\u662f\u63d0\u793a
-ITEXT_1001=\u8b66\u544a
-ITEXT_2001=\u5931\u8d25
-ITEXT_1010=$FIELD \u57df\u7684\u5f00\u5934
-ITEXT_1011=\u5f02\u5e38\u7ed3\u5c3e ($FIELD \u57df)
-ITEXT_1012=$FIELD \u57df\u7684\u5185\u5bb9\u53ef\u80fd\u6709\u95ee\u9898
-ITEXT_10=$FIELD \u4e2d\u53d1\u73b0\u672a\u88ab\u5305\u542b\u5728"{}"\u4e2d\u7684\u5927\u5199\u5b57\u7b26
-ITEXT_11=$FIELD \u57df\u5e94\u8be5\u5305\u542b\u56db\u4e2a\u5b57\u7b26\u7684\u6570\u5b57
-ITEXT_2010=$FIELD \u57df\u4e2d\u53d1\u73b0\u610f\u5916\u7684\u7ed3\u675f"}"
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+ITEXT_1=\u4e0b\u9762\u662f\u63d0\u793a
+ITEXT_1001=\u8b66\u544a
+ITEXT_2001=\u5931\u8d25
+ITEXT_1010=$FIELD \u57df\u7684\u5f00\u5934
+ITEXT_1011=\u5f02\u5e38\u7ed3\u5c3e ($FIELD \u57df)
+ITEXT_1012=$FIELD \u57df\u7684\u5185\u5bb9\u53ef\u80fd\u6709\u95ee\u9898
+ITEXT_10=$FIELD \u4e2d\u53d1\u73b0\u672a\u88ab\u5305\u542b\u5728"{}"\u4e2d\u7684\u5927\u5199\u5b57\u7b26
+ITEXT_11=$FIELD \u57df\u5e94\u8be5\u5305\u542b\u56db\u4e2a\u5b57\u7b26\u7684\u6570\u5b57
+ITEXT_2010=$FIELD \u57df\u4e2d\u53d1\u73b0\u610f\u5916\u7684\u7ed3\u675f"}"
diff --git a/src/resource/JabRef_da.properties b/src/resource/JabRef_da.properties
index 67b665c..c1cd561 100644
--- a/src/resource/JabRef_da.properties
+++ b/src/resource/JabRef_da.properties
@@ -1,1662 +1,1662 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-%0_contains_the_Regular_Expression_<b>%1</b>=%0_indeholder_regul\u00e6rudtrykket_<b>%1</b>
-%0_contains_the_term_<b>%1</b>=%0_indeholder_udtrykket_<b>%1</b>
-%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_indeholder_ikke_regul\u00e6rudtrykket_<b>%1</b>
-%0_doesn't_contain_the_term_<b>%1</b>=%0_indeholder_ikke_udtrykket_<b>%1</b>
-%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_matcher_ikke_regul\u00e6rudtrykket_<b>%1</b>
-%0_doesn't_match_the_term_<b>%1</b>=%0_matcher_ikke_udtrykket_<b>%1</b>
-%0_export_successful=%0-eksport_lykkedes
-%0_field_set=%0-felt_sat
-%0_matches_the_Regular_Expression_<b>%1</b>=%0_matcher_regul\u00e6rudtrykket_<b>%1</b>
-%0_matches_the_term_<b>%1</b>=%0_matcher_udtrykket_<b>%1</b>
-<field_name>=<feltnavn>
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Kunne_ikke_finde_filen_'%0'<BR>linket_til_fra_posten_'%1'</HTML>
-<no_field>=<ingen_felter>
-<select>=<v\u00e6lg>
-<select_word>=<v\u00e6lg_ord>
-A_string_with_this_label_already_exists=Der_findes_allerede_en_streng_med_dette_navn
-Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Forkort_tidsskriftsnavn_for_de_valgte_poster_(ISO-forkortelse)
-Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Forkort_tidsskriftsnavn_for_de_valgte_poster_(MEDLINE-forkortelse)
-Abbreviate_names=Forkort_navn
-Abbreviated_%0_journal_names.=Fortkortet_%0_tidsskriftsnavn.
-Abbreviation=Forkortelse
-About_JabRef=Om_JabRef
-Abstract=Sammendrag
-Accept=Accepter
-Accept_change=Accepter_\u00e6ndring
-Action=Handling
-Add=Tilf\u00f8j
-Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Tilf\u00f8j_en_(kompileret)_egendefineret_ImportFormat-klasse_fra_en_classpath._\nStien_beh\u00f8ver_ikke_at_v\u00e6re_p\u00e5_JabRefs_classpath.
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Tilf\u00f8j_en_kompileret_ImportFormat-klasse_fra_en_ZIP-fil._ZIP-filen_beh\u00f8ver_ikke_at_v\u00e6re_i_din_classpath.
-add_entries_to_group=tilf\u00f8j_poster_til_gruppe
-Add_entry_selection_to_this_group=F\u00f8j_valgte_poster_til_denne_gruppe
-Add_from_folder=Tilf\u00f8j_fra_mappe
-Add_from_jar=Tilf\u00f8j_fra_jar-fil
-add_group=tilf\u00f8j_gruppe
-Add_Group=Tilf\u00f8j_gruppe
-Add_new=Tilf\u00f8j_ny
-Add_Subgroup=Tilf\u00f8j_undergruppe
-Add_to_group=Tilf\u00f8j_i_gruppe
-Added_group_"%0".=Tilf\u00f8jede_gruppe_"%0".
-Added_new=Tilf\u00f8jede_ny
-Added_string=Tilf\u00f8jede_streng
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Desuden,_poster_hvis_<b>%0</b>-felt_ikke_indeholder_<b>%1</b>_kan_f\u00 [...]
-Advanced=Avanceret
-All_custom_file_types_will_be_lost._Proceed?=Alle_egendefinerede_filtyper_vil_blive_slettet._Forts\u00e6t?
-All_Entries=Alle_poster
-All_entries=Alle_poster
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Alle_posterne_af_denne_type_vil_blive_klassificeret_som_typel\u00f8se._Forts\u00e6t?
-All_fields=Alle_felter
-All_subgroups_(recursively)=Alle_undergrupper_(rekursivt)
-Allow_editing_in_table_cells=Tillad_redigering_af_celler_i_tabellen
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=En_fejl_opstod_ved_hentning_fra_OIA2-kilde_(%0):
-An_Exception_ocurred_while_accessing_'%0'=En_fejl_opstod_ved_l\u00e6sning_af_'%0'
-An_SAXException_ocurred_while_parsing_'%0'\:=En_SAXException_forekom_ved_l\u00e6sning_af_'%0':
-and=og
-and_inside_the_JabRef-jar\:=og_i_JabRef-jar\:
-and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=og_klassen_skal_v\u00e6re_tilg\u00e6ngelig_i_CLASSPATH_n\u00e6ste_gang,_du_starter_JabRef.
-any_field_that_matches_the_regular_expression_<b>%0</b>=ethvert_felt_som_matcher_regul\u00e6rudtrykket_<b>%0</b>
-Appearance=Udseende
-Append=Tilf\u00f8j
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Tilf\u00f8j_indhold_fra_en_BibTeX-database_i_den_\u00e5bne_database
-Append_database=F\u00f8j_til_database
-append_the_selected_text_to_bibtex_key=tilf\u00f8j_den_valgte_tekst_til_BibTeX-n\u00f8glen
-Application=Applikation
-Apply=Udf\u00f8r
-Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argumenterne_sendt_til_allerede_aktiv_JabRef-instans._Afslutter.
-Assign_entry_selection_exclusively_to_this_group=F\u00f8j_valgte_poster_eksklusivt_til_denne_gruppe
-Assign_new_file=Tildel_ny_fil
-Assign_the_original_group's_entries_to_this_group?=F\u00f8j_den_oprindelige_gruppes_poster_til_denne_gruppe?
-Assigned_%0_entries_to_group_"%1".=Tilf\u00f8jede_%0_poster_til_gruppen_"%1".
-Assigned_1_entry_to_group_"%0".=Tilf\u00f8jede_1_post_til_gruppen_"%0".
-At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=Plug-in'en_'net.sf.jabref.core'_skal_v\u00e6re_tilstede.
-Attach_%0_file=Tilf\u00f8j_%0-fil
-Attach_URL=Tilf\u00f8j_URL
-Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Fors\u00f8g_at_s\u00e6tte_%0-link_automatisk_for_dine_poster._Dette_virker,_hvis_en_%0-fil_i_dit_%0-bibliotek_eller_et_underbibliotek<BR>har_navn_lignende_en_posts_BibTeX-n\u00f8gle,_plus_efternavn.
-Attempting_SQL_export...=Fors\u00f8ger_SQL-eksport...
-Auto=Auto
-Autodetect_format=Autodetekter_format
-Autogenerate_BibTeX_key=Autogenerer_BibTeX-n\u00f8gle
-Autogenerate_BibTeX_keys=Autogenerer_BibTeX-n\u00f8gler
-Autogenerate_groups=Autogenerer_grupper
-autogenerate_keys=autogenerer_n\u00f8gler
-
-Autolink_files_with_names_starting_with_the_BibTeX_key=Autolink_filer_med_navn_som_starter_med_BibTeX-n\u00f8glen
-Autolink_only_files_that_match_the_BibTeX_key=Autolink_kun_filer_med_navn_som_svarer_til_BibTeX-n\u00f8glen
-Automatically_create_groups=Generer_grupper_automatisk
-Automatically_create_groups_for_database.=Generer_grupper_for_databasen.
-Automatically_created_groups=Genererede_grupper_automatisk
-Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Skjul_automatisk_grupperingspanel_n\u00e5r_du_skifter_til_en_database,_som_ikke_indeholder_grupper
-
-Automatically_remove_exact_duplicates=Fjern_eksakte_dubletter_automatisk
-Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Vis_automatisk_grupperingspanel_n\u00e5r_du_skifter_til_en_database,_som_indeholder_grupper
-Autoset=S\u00e6t_automatisk
-Autoset_%0_field=Automatisk_udfyldning_af_%0-felt
-Autoset_%0_links._Allow_overwriting_existing_links.=S\u00e6t_%0-links_automatisk._Tillad_overskrivning_af_eksisterende_links.
-Autoset_%0_links._Do_not_overwrite_existing_links.=S\u00e6t_%0-links_automatisk._Overskriv_ikke_eksisterende_links.
-Autoset_external_links=S\u00e6t_links_automatisk
-Autosetting_links=S\u00e6tter_links_automatisk
-AUX_file_import=AUX-fil_import
-Available_export_formats=Tilg\u00e6ngelige_eksportformater
-Available_fields=Tilg\u00e6ngelige_felter
-Available_import_formats=Tilg\u00e6ngelige_importformater
-Background_color_for_optional_fields=Baggrundsfarve_for_valgfrie_felter
-Background_color_for_required_fields=Baggrundsfarve_for_obligatoriske_felter
-Backup_old_file_when_saving=Lav_sikkerhedskopi_ved_gemning
-Beta_version=Betaversion
-Bibkey_to_filename_conversion=Konvertering_af_BibTeX-n\u00f8gle_til_filnavn
-BibTeX_key=BibTeX-n\u00f8gle
-BibTeX_key_is_unique.=BibTeX-n\u00f8glen_er_unik
-BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX-n\u00f8gle_er_ikke_sat._Angiv_et_navn_for_den_hentede_file
-BibTeX_source=BibTeX-kilde
-BibTeXML=BibTeXML
-Binding=Genvejstast
-Broken_link=Ugyldigt_link
-Browse=Gennemse
-by=med
-Calling_external_viewer...=Kalder_eksternt_program...
-Cancel=Annuller
-Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Kan_ikke_f\u00f8je_poster_til_en_gruppe_uden_at_generere_n\u00f8gler._Vil_du_generere_n\u00f8gler_nu?
-Cannot_merge_this_change=Kan_ikke_inkorporere_denne_\u00e6ndring
-Cannot_move_group_"%0"_down.=Kan_ikke_flytte_gruppen_"%0"_ned.
-Cannot_move_group_"%0"_left.=Kan_ikke_flytte_gruppen_"%0"_til_venstre.
-Cannot_move_group_"%0"_right.=Kan_ikke_flytte_gruppen_"%0"_til_h\u00f8jre.
-Cannot_move_group_"%0"_up.=Kan_ikke_flytte_gruppen_"%0"_op.
-case_insensitive=skelner_ikke_mellem_store_og_sm\u00e5_bogstaver
-case_sensitive=skelner_mellem_store_og_sm\u00e5_bogstaver
-Case_sensitive=Skeln_mellem_store_og_sm\u00e5_bogstaver
-change_assignment_of_entries=\u00e6ndre_tildeling_af_poster
-Change_case=\u00c6ndre_store/sm\u00e5_bogstaver
-Change_entry_type=\u00c6ndre_posttype
-
-Change_file_type=\u00c6ndre_filtype
-change_key=\u00e6ndre_n\u00f8gle
-Change_of_Grouping_Method=\u00c6ndre_grupperingsmetode
-change_preamble=\u00c6ndre_pr\u00e6ambel
-change_string_content=\u00e6ndre_strengdefinition
-change_string_name=\u00e6ndre_navn_p\u00e5_streng
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=\u00c6ndre_ops\u00e6tning_for_tabelkollonner_og_generelle_felter_for_anvende_den_nye_funktion
-change_type=\u00e6ndre_type
-changed_=\u00e6ndret_
-Changed_font_settings=\u00e6ndrede_skrifttypeindstillinger
-Changed_language_settings=\u00c6ndrede_sprogindstillinger
-Changed_look_and_feel_settings=\u00c6ndrede_brugerfladeindstillinger
-Changed_preamble=\u00c6ndrede_pr\u00e6ambel
-Changed_type_to=\u00c6ndrede_type_til
-Characters_to_ignore=Ignorer_f\u00f8lgende_tegn
-Check_existing_%0_links=Tjek_eksisterende_%0-links
-Check_links=Tjek_eksterne_links
-Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=V\u00e6lg_URL_som_skal_hentes._Den_forh\u00e5ndsvalgte_adresse_henviser_til_en_liste_gjort_tilg\u00e6ngelig_af_JabRef-udviklerne.
-Cite_command=Citations-kommando
-Class_name=Klassenavn
-Clear=Ryd
-clear_all_groups=fjern_alle_grupper
-Clear_field=Ryd_felt
-
-Clear_fields=Ryd_felter
-Clear_highlight=Ryd_fremh\u00e6vning
-Close=Luk
-Close_dialog=Luk_dialog
-Close_the_current_database=Luk_denne_database
-Close_the_help_window=Luk_hj\u00e6lp-vinduet
-Close_window=Luk_vindue
-Closed_database=Lukkede_database
-Collapse_subtree=Luk_forgrening
-Color_codes_for_required_and_optional_fields=Farvekoder_for_n\u00f8dvendige_og_valgfrie_felter
-Color_for_marking_incomplete_entries=Farve_til_markering_af_ufuldst\u00e6ndige_poster
-Column_width=Kolonnebredde
-Command_line_id=Kommandolinje-id
-Complete_record=Komplet_post
-Connect=Tilslut
-Connect_to_SQL_database=Tilslut_til_SQL-database
-Connect_to_SQL_Database=Tilslut_til_SQL-Database
-Connection_to_IEEEXplore_failed=Tilslutning_til_IEEExplore_mislykkedes
-Contained_in=Indeholdt_i
-Content=Indhold
-Copied=Kopierede
-Copied_cell_contents=Kopierede_indhold_af_cellen
-Copied_key=Kopierede_n\u00f8gle
-Copied_keys=Kopierede_n\u00f8gler
-Copy=Kopier
-Copy_BibTeX_key=Kopier_BibTeX-n\u00f8gle
-Copy_file_to_file_directory.=Kopier_fil_til_filbibliotek.
-Copy_files_to_file_directory.=Kopier_filer_til_filbibliotek.
-
-Copy_to_clipboard=Kopier_til_udklipsholder
-Could_not_call_executable=Kunne_ikke_kalde_programfilen
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Kunne_ikke_kontakte_en_igangv\u00e6rende_gnuserv-proces._Kontroller_at_Emacs_eller_XEmacs_k\u00f8rer<BR>og_at_serveren_er_startet_(med_kommandoen_'gnuserv-start').
-Could_not_connect_to_host_=Kunne_ikke_forbinde_til_v\u00e6rt_
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Kunne_ikke_forbinde_til_Vim-server._Tjek_at_Vim_kj\u00f8rer<BR>med_korrekt_servernavn.
-Could_not_export_file=Kunne_ikke_eksportere
-Could_not_export_preferences=Kunne_ikke_eksportere_indstillinger
-# I have reformulated the following lines, because the 1st person form is not suitable:
-Could_not_find_a_suitable_import_format.=Fandt_ikke_noget_passende_importformat.
-
-Could_not_find_directory_for_%0-files\:_%1=Kunne_ikke_finde_bibliotek_til_%0-filer:_%1
-Could_not_find_image_file=Kunne_ikke_finde_billede
-Could_not_find_layout_file=Fandt_ikke_layoutfil
-Could_not_import_preferences=Kunne_ikke_importere_indstillinger
-Could_not_instantiate_%0=Kunne_ikke_instantiere_%0
-Could_not_instantiate_%0_%1=Kunne_ikke_instantiere_%0_%1
-
-Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Kunne_ikke_instantiere_%0._Har_du_valgt_korrekt_pakke-sti?
-
-Could_not_open_link=Kunne_ikke_\u00e5bne_link
-Could_not_parse_number_of_hits=Kunne_ikke_tolke_antal_af_match
-Could_not_print_preview=Kunne_ikke_printe_forh\u00e5ndsvisning
-Could_not_run_the_'vim'_program.=Kunne_ikke_k\u00f8re_'vim'-programmet
-Could_not_save_file=Kunne_ikke_gemme_fil
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Kunne_ikke_gemme_fil._Tegnkodingen_'%0'_er_ikke_underst\u00f8ttet.
-Create_group=Opret_gruppe
-Created_groups.=Oprettede_grupper.
-
-crossreferenced_entries_included=refererede_poster_inkluderet
-Current_content=Nuv\u00e6rende_indhold
-Current_value=Nuv\u00e6rende_v\u00e6rdi
-Custom_entry_types=Brugerdefinerede_posttyper
-Custom_entry_types_found_in_file=Fandt_brugerdefinerede_posttyper_i_filen
-Custom_icon_theme=Brugerdefineret_ikons\u00e6t
-Custom_icon_theme_file=Ikons\u00e6t-fil
-Custom_importers=Brugerdefinerede_importformater
-Customize_entry_types=Tilpas_posttyper
-Customize_key_bindings=Ops\u00e6tning_af_genvejstaster
-Cut=Klip
-cut_entries=klippede_poster
-cut_entry=klip_post
-Cut_pr=Klippede
-Database_\:=Database:
-Database_encoding=Tegnkoding_for_database
-Database_has_changed._Do_you_want_to_save_before_closing?=Databasen_er_\u00e6ndret._Vil_du_gemme,_f\u00f8r_du_lukker_den?
-Database_properties=Databaseegenskaber
-Date_format=Datoformat
-Default=Standard
-Default_encoding=Standard_kodning
-Default_grouping_field=Standardfelt_for_gruppering
-Default_look_and_feel=Standard-udseende
-Default_pattern=Standardm\u00f8nster
-Default_sort_criteria=Standard_sorteringskriterier
-Define_'%0'=Definer_'%0'
-Delete=Slet
-Delete_custom_format=Slet_brugerdefineret_type
-delete_entries=slet_poster
-Delete_entry=Slet_post
-delete_entry=slet_post
-Delete_multiple_entries=Slet_flere_poster
-Delete_rows=Slet_r\u00e6kker
-Delete_strings=Slet_strenge
-Deleted=Slettet
-Delimit_fields_with_semicolon,_ex.=Afgr\u00e6ns_felter_med_semikolon,_f.eks.
-Descending=Faldende
-Description=Beskrivelse
-Deselect_all=V\u00e6lg_ingen
-Deselect_all_duplicates=Frav\u00e6lg_alle_dubletter
-Details=Detaljer
-Disable_entry_editor_when_multiple_entries_are_selected=Deaktiver_postredigering_n\u00e5r_flere_poster_er_valgt
-Disable_this_confirmation_dialog=Deaktiver_denne_kontroldialog
-Disable_this_warning_dialog=Deaktiver_denne_advarselsdialog
-Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Vis_alle_poster_indeholdt_i_mindst_en_af_de_valgte_grupper.
-Display_all_error_messages=Vis_alle_fejlmeddelelser
-Display_help_on_command_line_options=Vis_kommandolinjehj\u00e6lp
-Display_imported_entries_in_an_inspection_window_before_they_are_added.=Vis_importerede_poster_i_et_inspektionsvindue_f\u00f8r_de_tilf\u00f8jes.
-Display_only_entries_belonging_to_all_selected_groups.=Vis_kun_poster_indeholdt_i_alle_valgte_grupper.
-
-Display_version=Vis_versionsnummer
-Displaying_no_groups=Viser_ingen_grupper
-Do_not_abbreviate_names=Forkort_ikke_navn
-Do_not_autoset=S\u00e6t_ikke_links_automatisk
-Do_not_import_entry=Importer_ikke_post
-Do_not_open_any_files_at_startup=\u00c5bn_ingen_filer_ved_opstart
-Do_not_overwrite_existing_keys=Overskriv_ikke_eksisterende_n\u00f8gler
-Do_not_show_splash_window_at_startup=Vis_ikke_JabRef-opstartsvindue
-Do_not_show_these_options_in_the_future=Vis_ikke_disse_valg_igen
-Do_not_wrap_the_following_fields_when_saving=Introducer_ikke_linjeskift_i_f\u00f8lgende_felter_ved_gemning
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Skriv_ikke_f\u00f8lgende_felter_til_XMP-metadata:
-
-Do_you_want_JabRef_to_do_the_following_operations?=Skal_JabRef_udf\u00f8re_de_f\u00f8lgende_operationer?
-DocBook=DocBook
-Down=Ned
-Download=Download
-Download_completed=Download_fuldf\u00f8rt
-Download_file=Download_fil
-Downloading...=Downloader...
-
-Drag_and_Drop_Error=Fejl_ved_tr\u00e6k-og-slip
-Drop_%0=Slip_%0
-duplicate_BibTeX_key=dubleret_BibTeX-n\u00f8gle
-Duplicate_BibTeX_key.=Dubleret_BibTeX-n\u00f8gle.
-Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=BibTeX-n\u00f8glen_er_ikke_unik._Gruppering_kan_fejle_for_denne_post.
-Duplicate_Key_Warning=Advarsel:_Ikke-unik_n\u00f8gle
-Duplicate_pairs_found=Dubletpar_fundet
-duplicate_removal=fjernelse_af_dubletter
-Duplicate_string_name=Ikke-unikt_navn_p\u00e5_streng
-Duplicates_found=Dubletter_fundet
-Duplicates_removed=Dubletter_fjernet
-Dynamic_groups=Dynamiske_grupper
-Dynamically_group_entries_by_a_free-form_search_expression=Grupper_poster_dynamisk_ved_hj\u00e6lp_af_et_standard_s\u00f8geudtryk
-Dynamically_group_entries_by_searching_a_field_for_a_keyword=Grupper_poster_dynamisk_ved_at_s\u00f8ge_efter_n\u00f8gleord_i_et_felt
-Each_line_must_be_on_the_following_form=Hver_linje_skal_v\u00e6re_p\u00e5_f\u00f8lgende_form
-Edit=Rediger
-Edit_custom_export=Rediger_eksternt_eksportfilter
-Edit_entry=Rediger_post
-Edit_file_link=Rediger_link
-Edit_file_type=Rediger_filtype
-Edit_group=Rediger_gruppe
-Edit_journal=Rediger_journal
-Edit_preamble=Rediger_pr\u00e6ambel
-Edit_strings=Rediger_tekststrenge
-Editor_options=Alternativer_for_redigering
-empty_BibTeX_key=tom_BibTeX-n\u00f8gle
-Empty_BibTeX_key.=Tom_BibTeX-n\u00f8gle
-Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Tom_BibTeX-n\u00f8gle._Gruppering_kan_fejle_for_denne_post.
-empty_database=tom_database
-Enable_source_editing=Tillad_redigering_af_kildekode
-Enable_word/name_autocompletion=Aktiver_autokomplettering_af_navn/ord
-Endnote=Endnote
-Enter_URL=Skriv_URL
-Enter_URL_to_download=Skriv_URL_som_skal_hentes
-entries=poster
-Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Poster_kan_ikke_manuelt_tilf\u00f8jes_eller_fjernes_fra_denne_gruppe.
-Entries_exported_to_clipboard=Poster_eksporteret_til_udklipsholder
-entries_have_undefined_BibTeX_key=poster_har_udefineret_BibTeX-n\u00f8gle
-entries_into_new_database=poster_i_ny_database
-entry=post
-Entry_editor=Postredigering
-
-Entry_in_current_database=Post_i_aktuelle_database
-Entry_in_import=Post_i_import
-Entry_preview=Forh\u00e5ndsvisning
-Entry_table=Hovedtabel
-Entry_table_columns=Tabelkolonner
-Entry_type=Posttype
-Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Navn_p\u00e5_typer_kan_ikke_indeholde_mellemrum_eller_nogle_af_f\u00f8lgende_tegn
-Entry_types=Posttyper
-Error=Fejl
-Error\:_=Fejl:_
-
-Error_converting_Bibtex_to_XMP\:_%0=Fejl_ved_konvertering_af_BibTeX_til_XMP:_%0
-Error_converting_XMP_to_'%0'...=Fejl_ved_konvertering_af_XMP_for_'%0'...
-Error_exporting_to_clipboard=Fejl_ved_eksport_til_udklipsholder
-Error_in_field=Fejl_i_felt
-Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Fejl_ved_opstart_af_plugin-system._Starter_uden_-_funktionalitet_mangler_m\u00e5ske.
-Error_occured_when_parsing_entry=En_fejl_opstod_ved_l\u00e6sning_af_post
-Error_opening_file=Fejl_ved_\u00e5bning_af_fil
-Error_setting_field=Problem_med_at_s\u00e6tte_felt
-Error_while_converting_BibtexEntry_to_XMP_%0=Fejl_ved_konvertering_af_BibTeX-posten_til_XMP_%0
-Error_while_downloading_file\:=Fejl_under_hentning_af_fil:
-Error_while_fetching_from_OIA2=Fejl_ved_hentning_fra_OIA2
-Error_while_writing=En_fejl_opstod_ved_skrivning
-
-Error_writing_to_%0_file(s).=Fejl_ved_skrivning_til_%0_fil(er).
-Error_writing_XMP_to_file\:_%0=Fejl_ved_skrivning_af_XMP_til_filen_'%0'
-
-Establishing_SQL_connection...=Etablerer_SQL-forbindelse...
-Exceptions=Fejlinformation
-Existing_file=Eksisterende_fil
-exists._Overwrite_file?=eksisterer._Erstat_filen?
-exists._Overwrite?=eksisterer._Overskriv?
-Expand_subtree=\u00c5bn_forgrening
-Export=Eksporter
-Export_name=Navn_p\u00e5_filter
-Export_preferences=Eksporter_indstillinger
-Export_preferences_to_file=Eksporter_indstillinger_til_fil
-Export_properties=Egenskaber_for_eksportfilter
-Export_to_clipboard=Eksporter_til_udklipsholder
-Export_to_SQL_database=Eksporter_til_SQL-database
-Exporting=Eksporterer
-Extension=Efternavn
-External_changes=Eksterne_\u00e6ndringer
-
-External_file_links=Eksterne_links
-External_files=Eksterne_filer
-External_programs=Eksterne_programmer
-External_viewer_called=Eksternt_program_kaldt
-Failed_to_read_groups_data_(unsupported_version\:_%0)=Kunne_ikke_l\u00e6se_gruppedata_(ikke-underst\u00f8ttet_version:_%0)
-Fetch=Hent
-Field=Felt
-field=felt
-# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
-Field_content=Indhold_i_felt
-Field_name=Feltnavn
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Feltnavn_kan_ikke_indeholde_mellemrum_eller_f\u00f8lgende_tegn
-Field_sizes=Feltst\u00f8rrelser
-
-Field_to_filter=Felt_som_skal_filtreres
-Field_to_group_by=Grupperingsfelt
-Fields=Felter
-File=Fil
-file=fil
-
-File_'%0'_is_already_open.=Filen_'%0'_er_allerede_\u00e5ben.
-File_'%0'_not_found=Filen_'%0'_ikke_fundet
-File_changed=Fil_\u00e6ndret
-File_directory_is_'%0'\:=Filbiblioteket_er_'%0':
-
-File_directory_is_not_set_or_does_not_exist!=Filbiblioteket_er_ikke_sat_eller_eksisterer_ikke!
-
-File_download=Filhentning
-File_exists=Filen_eksisterer
-File_extension=Efternavn_p\u00e5_filer
-
-File_has_been_updated_externally._What_do_you_want_to_do?=Filen_er_blevet_\u00e6ndret_eksternt._Hvad_vil_du_g\u00f8re?
-File_not_found=Fil_ikke_fundet
-File_type=Filtype
-File_updated_externally=Filen_er_blevet_\u00e6ndret_eksternt
-filename=filnavn
-Files_opened=Filer_\u00e5bnet
-
-Filter=Filter
-
-Finished_autosetting_external_links.=Fuldf\u00f8rte_automatisk_udfyldning_af_eksterne_links.
-Finished_synchronizing_%0_links._Entries_changed%c_%1.=Fuldf\u00f8rte_synkronisering_af_%0-links._Poster_\u00e6ndret%c_%1.
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Fuldf\u00f8rte_skrivning_af_XMP-metadata._Skrev_til_%0_fil(er).
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Fuldf\u00f8rte_skrivning_af_XMP_for_%0-fil_(sprang_over_%1,_%2_fejl).
-First_select_the_entries_you_want_keys_to_be_generated_for.=V\u00e6lg_f\u00f8rst_hvilke_poster_du_vil_generere_n\u00f8gler_for.
-Fit_table_horizontally_on_screen=Tilpas_tabelbredden_horisontalt
-Float=Flyt
-Float_marked_entries=Sorter_m\u00e6rkede_poster_\u00f8verst
-Font_Family=Skrifttype-familie
-Font_Preview=Skrifttype-forh\u00e5ndsvisning
-Font_Size=Skriftst\u00f8rrelse
-Font_Style=Skrifttype-stil
-FontSelector=Skrifttypev\u00e6lger
-for=for
-Format_of_author_and_editor_names=Formattering_af_forfatter-_og_redakt\u00f8rnavn
-Format_String=Formatstreng
-Format_used=Format_brugt
-Formatter_Name=Navn_p\u00e5_formatering
-Formatter_not_found=Ukendt_formatering
-found=fundet
-Found_%0_plugin(s)=%0_plugin(s)_fundet
-found_in_aux_file=fundet_i_aux-fil
-Full_name=Fuldt_navn
-General=Generelt
-General_fields=Generelle_felter
-Generate=Generer
-Generate_BibTeX_key=Generer_BibTeX-n\u00f8gle
-Generate_keys=Generer_n\u00f8gler
-Generate_keys_before_saving_(for_entries_without_a_key)=Generer_n\u00f8gler_f\u00f8r_gemning_(for_poster_uden_n\u00f8gle)
-
-Generate_keys_for_imported_entries=Generer_automatisk_n\u00f8gler_for_importerede_poster
-Generate_now=Generer_nu
-Generated_BibTeX_key_for=Genererede_BibTeX-n\u00f8gle_for
-Generating_BibTeX_key_for=Genererer_BibTeX-n\u00f8gle_for
-Grab=Fang_genvejstast
-Gray_out_entries_not_in_group_selection=Skraver_poster_udenfor_valgte_grupper
-Gray_out_non-hits=Skraver_ikke-tr\u00e6ffere
-Gray_out_non-matching_entries=Skraver_ikke-tr\u00e6ffere
-Group_properties=Gruppeegenskaber
-
-grouping_may_not_work_for_this_entry=gruppering_kan_fejle_for_denne_post
-Groups=Gruppering
-Harvard_RTF=Harvard_RTF
-Have_you_chosen_the_correct_package_path?=Har_du_valgt_korrekt_pakke-sti?
-Help=Hj\u00e6lp
-
-Help_contents=Oversigt_over_hj\u00e6lpefiler
-Help_on_groups=Hj\u00e6lp_om_grupper
-Help_on_key_patterns=Hj\u00e6lp_om_n\u00f8glegenerering
-Help_on_Preview_Settings=Hj\u00e6lp_om_indstillinger_for_forh\u00e5ndsvisning
-Help_on_Regular_Expression_Search=Hj\u00e6lp_om_s\u00f8gning_med_regul\u00e6re_udtryk
-Hide_non-hits=Skjul_ikke-tr\u00e6ffere
-Hide_non-matching_entries=Skjul_ikke-tr\u00e6ffende_poster
-
-Hierarchical_context=Gruppehierarki
-Highlight=Fremh\u00e6v
-Highlight_groups_matching_all_selected_entries=Fremh\u00e6v_grupper_som_indeholder_alle_valgte_poster
-Highlight_groups_matching_any_selected_entry=Fremh\u00e6v_grupper_som_indeholder_mindst_en_af_de_valgte_poster
-Highlight_overlapping_groups=Fremh\u00e6v_overlappende_grupper
-Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Hint%c_For_kun_at_s\u00f8ge_i_specifikke_felter,_skriv_f.eks.%c<p><tt>author%esmith_and_title%eelectrical</tt>
-HTML=HTML
-
-HTML_table=HTML-tabel
-HTML_table_(with_Abstract_&_BibTeX)=HTML-tabell_(med_Abstract_&_BibTeX)
-Icon=Ikon
-Ignore=Ignorer
-Immediate_subgroups=N\u00e6rmeste_undergrupper
-Import=Importer
-Import_and_keep_old_entry=Importer_og_behold_den_gamle_post
-Import_and_remove_old_entry=Importer_og_fjern_den_gamle_post
-Import_entries=Importer_poster
-Import_failed=Import_mislykkedes
-Import_file=Importer_fil
-Import_group_definitions=Importer_gruppedefinitioner
-Import_name=Navn_p\u00e5_import
-Import_preferences=Importer_indstillinger
-Import_preferences_from_file=Importer_indstillinger_fra_fil
-Import_strings=Importer_strenge
-Import_to_open_tab=Importer_til_\u00e5bent_faneblad
-Import_word_selector_definitions=Importer_definitioner_for_hurtigv\u00e6lgere
-Imported_database=Importerede_database
-Imported_entries=Importerede_poster
-Imported_from_database=Importerede_fra_databasen
-ImportFormat_class=ImportFormat-klasse
-Importing=Importerer
-Importing_in_unknown_format=Importerer_ukendt_format
-In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=I_JabRef_bruges_#-tegn_parvis_for_at_indikere_strenge.
-Include_abstracts=Inkluder_abstracts
-Include_entries=Inkluder_poster
-Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Inkluder_undergrupper:_Vis_poster_indeholdt_i_denne_gruppe_eller_en_undergruppe
-Incremental=Inkrementel
-Incremental_search=Inkrementel_s\u00f8gning
-Incremental_search_failed._Repeat_to_search_from_top.=Inkrementel_s\u00f8gning_fejlede._Gentag_s\u00f8gning_fra_toppen.
-Independent_group\:_When_selected,_view_only_this_group's_entries=Uafh\u00e6ngig_gruppe:_Vis_kun_denne_gruppes_poster
-Initially_show_groups_tree_expanded=Vis_gruppetr\u00e6et_ekspanderet_som_udgangspunkt
-Input=Input
-Input_error=Inputfejl
-Insert=Tilf\u00f8j
-Insert_rows=Tilf\u00f8j_r\u00e6kker
-Insert_selected_citations_into_LyX/Kile=Send_valgte_poster_til_LyX/Kile
-Insert_selected_citations_into_WinEdt=Send_valgte_poster_til_WinEdt
-insert_string_=inds\u00e6t_streng_
-Insert_URL=Inds\u00e6t_URL
-integrity=integritet
-Integrity_check=Integritetstjek
-Intersection=F\u00e6llesm\u00e6nge
-Invalid_BibTeX_key=Ugyldig_BibTeX-n\u00f8gle
-Invalid_date_format=Ugyldigt_datoformat
-Invalid_URL=Ugyldig_URL
-Inverted=Inverteret
-is_a_standard_type.=er_en_standardtype.
-ISO_abbreviation=ISO-forkortelse
-Item_list_for_field=Ordliste_for_felt
-jabref=jabref
-JabRef_help=JabRef-hj\u00e6lp
-JabRef_preferences=JabRef-indstillinger
-Journal_abbreviations=Tidsskriftsforkortelser
-Journal_list_preview=Forh\u00e5ndsvisning_af_tidsskriftsliste
-Journal_name=Tidsskriftsnavn
-Keep=Behold
-Keep_both=Behold_begge
-Keep_lower=Behold_nederste
-Keep_upper=Behold_\u00f8verste
-Key_bindings=Genvejstaster
-Key_bindings_changed=Genvejstaster_\u00e6ndret
-Key_generator_settings=Indstillinger_for_n\u00f8glegenerering
-Key_pattern=M\u00f8nster
-keys_in_database=n\u00f8gler_i_databasen
-Keyword=N\u00f8gleord
-Label=Navn
-Language=Sprog
-Last_modified=Sidst_\u00e6ndret
-LaTeX_AUX_file=LaTeX_AUX-fil
-Leave_file_in_its_current_directory.=Lad_filen_ligge_i_biblioteket,_den_ligger_i_nu.
-
-Leave_files_in_their_current_directory.=La_filerne_ligge_i_biblioteket,_de_ligger_i_nu.
-Left=Venstre
-License=Licens
-Limit_to_fields=Begr\u00e6ns_til_f\u00f8lgende_felter
-Limit_to_selected_entries=Begr\u00e6ns_til_valgte_poster
-
-Link=Link
-Link_local_file=Link_til_lokal_fil
-
-Link_to_file_%0=Link_til_filen_%0
-Listen_for_remote_operation_on_port=Lyt_efter_fjernoperationer_p\u00e5_port
-Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Hent_og_gem_indstillinger_fra/til_jabref.xml_ved_opstart_(memory_stick-tilstand)
-Load_session=Hent_session
-Loading_session...=Henter_session...
-localhost=localhost
-Look_and_feel=Udseende
-Looking_for_pdf...=Leder_efter_pdf...
-lower=sm\u00e5_bogstaver
-Main_file_directory=Hovedbibliotek
-
-Main_layout_file=Hoved-layoutfil
-Main_PDF_directory=Hovedbibliotek_for_PDF-filer
-Main_PS_directory=Hovedbibliotek_for_PS-filer
-Manage=Ops\u00e6t
-Manage_custom_exports=Ops\u00e6t_eksterne_eksportfiltre
-Manage_custom_imports=Ops\u00e6t_eksterne_importfiltre
-Manage_external_file_types=Ops\u00e6t_eksterne_filtyper
-Manage_journal_abbreviations=Ops\u00e6t_tidsskriftsforkortelser
-Mark_entries=M\u00e6rk_poster
-Mark_entry=M\u00e6rk_post
-Mark_new_entries_with_addition_date=M\u00e6rk_nye_poster_med_dato
-Mark_new_entries_with_owner_name=M\u00e6rk_nye_poster_med_navn_p\u00e5_ejer
-Marked_selected=M\u00e6rkede_valgte_poster
-Memory_Stick_Mode=Memory_Stick-tilstand
-Menu_and_label_font_size=St\u00f8rrelse_p\u00e5_menuskrifttyper
-Merged_external_changes=Inkorporerede_eksterne_\u00e6ndringer
-Messages=Meddelelser
-Messages_and_Hints=Meddelelser_og_advarsler
-Modification_of_field=\u00c6ndring_af_felt
-Modified_group_"%0".=\u00e6ndrede_gruppen_"%0".
-Modified_groups=\u00e6ndrede_grupper
-Modified_string=\u00e6ndrede_streng
-Modify=\u00c6ndre
-modify_group=\u00e6ndre_gruppe
-MODS=MODS
-Move=Flyt
-Move_down=Flyt_ned
-Move_entries_in_group_selection_to_the_top=Flyt_poster_i_valgte_grupper_til_toppen
-Move_external_links_to_'file'_field=Flyt_eksterne_links_til_'file'-feltet
-Move_files_to_file_directory.=Flyt_filer_til_bibliotek.
-move_group=flyt_gruppe
-Move_string_down=Flyt_streng_ned
-Move_string_up=Flyt_streng_op
-Move_up=Flyt_op
-Moved_group_"%0".=Flyttede_gruppen_"%0".
-MS_Office_2007=MS_Office_2007
-MySQL=MySQL
-MySQL_database=MySQL_database
-Name=Navn
-Name_formatter=Navneformatering
-Natbib_style=Natbib-stil
-
-nested_aux_files='nestede'_aux-filer
-New=Ny
-new=ny
-New_BibTeX_database=Ny_BibTeX-database
-New_BibTeX_entry=Ny_BibTeX-post
-New_BibTeX_subdatabase=Ny_BibTeX-deldatabase
-New_content=Nyt_indhold
-New_database_created.=Opprettede_ny_database.
-New_field_value=Ny_v\u00e6rdi
-New_file=Ny_fil
-New_file_link_(INSERT)=Nyt_link_(INSERT)
-New_group=Ny_gruppe
-New_string=Ny_streng
-Next_entry=N\u00e6ste_post
-No_%0_found=Fandt_ingen_%0
-No_actual_changes_found.=Ingen_reelle_\u00e6ndringer_fundet.
-no_base-bibtex-file_specified=ingen_basis-bibtexfil_specificeret
-no_database_generated=ingen_database_genereret
-No_duplicates_found=Ingen_dubletter_fundet
-No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Ingen_poster_fundet._Kontroller_at_du_bruger_korrekt_importfilter.
-No_entries_found_for_the_search_string_'%0'=Fandt_ingen_poster_for_s\u00f8geteksten_'%0'
-No_entries_imported.=Ingen_poster_importeret.
-No_entries_or_multiple_entries_selected.=Ingen_eller_flere_poster_valgt.
-No_entries_selected=Ingen_poster_valgt
-No_entries_selected.=Ingen_poster_valgt.
-No_exceptions_have_ocurred.=Der_er_ikke_sket_nogen_undtagelser.
-No_files_found.=Ingen_filer_fundet.
-No_GUI._Only_process_command_line_options.=Ingen_GUI._Processer_kun_kommandolinjevalg.
-No_journal_names_could_be_abbreviated.=Ingen_tidsskriftsnavne_kunne_forkortes.
-No_journal_names_could_be_unabbreviated.=Ingen_tidsskriftsnavne_kunne_ekspanderes.
-
-No_PDF_linked=Ingen_PDF_linket
-No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Ingen_pdf_eller_ps_defineret_og_fandt_ingen_filer_med_navn_svarende_til_BibTeX-n\u00f8glen
-No_plugins_were_found_in_the_following_folders\:=Ingen_plugins_blev_fundet_i_f\u00f8lgende_foldere:
-No_references_found=Ingen_referencer_fundet
-No_saved_session_found.=Fandt_ingen_gemt_tilstand.
-No_url_defined=Ingen_URL_er_defineret
-No_XMP_metadata_found_in_=Ingen_XMP-metadata_fundet_i_
-not=ikke
-not_found=ikke_fundet
-Not_saved_(empty_session)=Tilstand_ikke_gemt_(ingen_filer_\u00e5bne)
-Note_that_the_entry_causing_the_problem_has_been_selected.=Legg_m\u00e6rke_til_at_posten,_som_skaber_problemet,_er_blevet_valgt.
-Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Bem\u00e6rk_at_du_skal_specificere_det_fuldst\u00e6ndige_klassenavn_for_udseendet,
-Nothing_to_redo=Ingenting_at_gentage
-Nothing_to_undo=Ingenting_at_fortryde
-# The next is used like in "References found: 1  Number of references to fetch?"
-Number_of_references_to_fetch?=Antal_referencer_som_skal_hentes?
-occurences=forekomster
-OK=OK
-Ok=OK
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Et_eller_flere_links_er_af_typen_'%0',_som_er_udefineret._Hvad_vil_du_g\u00f8re?
-One_or_more_keys_will_be_overwritten._Continue?=En_eller_flere_n\u00f8gler_vil_blive_overskrevet._Forts\u00e6t?
-Only_one_item_is_supported=Kun_et_element_af_gangen_underst\u00f8ttes
-Open=\u00c5bn
-Open_BibTeX_database=\u00c5bn_BibTeX-database
-Open_database=\u00c5bn_database
-Open_editor_when_a_new_entry_is_created=Start_redigering_n\u00e5r_en_ny_post_oprettes
-Open_file=\u00c5bn_fil
-Open_last_edited_databases_at_startup=\u00c5bn_sidst_viste_databaser_ved_opstart
-Open_PDF_or_PS=\u00c5bn_PDF_eller_PS
-Open_right-click_menu_with_Ctrl+left_button=\u00c5bn_h\u00f8jreklikmenu_med_Ctrl+venstre_knap
-Open_URL_or_DOI=\u00c5bn_URL_eller_DOI
-OpenDocument_Spreadsheet=OpenDocument-regneark
-Opened_database=\u00c5bnede_database
-Opening=\u00c5bner
-Opening_preferences...=\u00c5bner_indstillinger...
-
-OpenOffice_Calc=OpenOffice_Calc
-OpenOffice_CSV=OpenOffice_CSV
-Operation_canceled.\n=Operationen_afbrudt.\n
-Operation_not_supported=Operation_ikke_underst\u00f8ttet
-Optional_fields=Valgfri_felter
-Options=Valg
-or=eller
-out_of=af
-Output=Output
-Output_or_export_file=Gem_eller_eksporter_fil
-Override=Tilsides\u00e6t
-Override_default_file_directories=Tilsides\u00e6t_standard_fil-biblioteker
-
-Override_default_font_settings=Tilsides\u00e6t_standardskrifttyper
-override_the_bibtex_key_by_the_selected_text=tilsides\u00e6t_BibTeX-n\u00f8glen_til_fordel_for_den_valgte_n\u00f8gle
-Overwrite=Overskriv
-Overwrite_existing_field_values=Overskriv_eksisterende_v\u00e6rdier
-Overwrite_keys=Overskriv_n\u00f8gler
-pairs_processed=par_revideret
-Password_\:=Kodeord:
-Paste=Inds\u00e6t
-paste_entries=inds\u00e6t_poster
-paste_entry=inds\u00e6t_post
-Paste_from_clipboard=Inds\u00e6t_fra_udklipsholder
-Pasted=Indsat
-
-Path_to_%0_not_defined=Sti_til_%0_ikke_defineret
-Path_to_LatexEditor_(LEd.exe)=Sti_til_LatexEditor_(LEd.exe)
-Path_to_LyX_pipe=Sti_til_LyX-pipe
-
-Path_to_Vim=Sti_til_Vim
-Path_to_WinEdt.exe=Sti_til_WinEdt.exe
-PDF_directory=PDF-bibliotek
-PDF_does_not_exist=PDF-filen_findes_ikke
-Personal_journal_list=Personlig_tidsskriftsliste
-Plain_text_import=Import_fra_ren_tekst
-Please_check_your_network_connection_to_this_machine.=Tjek_venligst_maskinens_netv\u00e6rksforbindelse.
-Please_enter_a_name_for_the_group.=Skriv_et_navn_til_gruppen.
-Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Skriv_et_s\u00f8geudtryk._For_eksempel,_for_at_s\u00f8ge_i_alle_felter_efter_<b>Olsen</b>,_skriv%c<p><tt>olsen</tt><p>For_at_s\u00f8ge_i_<b>Author</b>-feltet_efter_<b>Olsen</b>_og_i_<b>Title</b>-feltet_efter_<b>electrical</b>,_sk [...]
-Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Skriv_venligsts_feltet_som_skal_s\u00f8ges_i_(f.eks._<b>keywords</b>)_og_n\u00f8gleordet_at_s\u00f8ge_efter_(f.eks._<b>electrical</b>).
-Please_enter_the_string's_label=Skriv_et_navn_for_strengen
-Please_select_an_importer=V\u00e6lg_venligst_et_importformat
-Please_select_an_importer.=V\u00e6lg_venligst_et_importfilter.
-Please_select_exactly_one_group_to_move.=V\u00e6lg_pr\u00e6cis_\u00e9n_gruppe_til_flytning.
-Please_specify_the_=Angiv_venligst_
-Possible_duplicate_entries=Mulige_dubletter
-Possible_duplicate_of_existing_entry._Click_to_resolve.=Mulig_dublet_af_eksisterende_post._Klik_for_at_l\u00f8se_problemet.
-Preamble=Pr\u00e6ambel
-Preferences=Indstillinger
-Preferences_recorded.=Indstillinger_gemt.
-Preview=Forh\u00e5ndsvisning
-Previous_entry=Forrige_post
-Primary_sort_criterion=Prim\u00e6rt_sorteringskriterium
-Print_Preview=Udskriftsvisning
-Printing_Entry_Preview=Udskriver_forh\u00e5ndsvisning_af_post
-Problem_with_parsing_entry=Problem_med_at_l\u00e6se_post
-Processing_=Arbejder_
-Program_output=Output_fra_program
-PS_directory=PS-bibliotek
-Push_entries_to_external_application_(%0)=Send_poster_til_eksternt_program_(%0)
-Push_selection_to_Emacs=Send_valgte_poster_til_Emacs
-Push_selection_to_LyX/Kile=Send_valgte_poster_til_LyX/Kile
-Push_selection_to_Vim=Send_valgte_poster_til_Vim
-Push_selection_to_WinEdt=Send_valgte_poster_til_WinEdt
-Push_to_LatexEditor=Send_til_LatexEditor
-Pushed_citations_to_%0=Referencer_sendt_til_%0
-Pushed_citations_to_Emacs=Referencer_sendt_til_Emacs
-Pushed_citations_to_Vim=Referencer_sendt_til_Vim
-Pushed_citations_to_WinEdt=Referencer_sendt_til_WinEdt
-Pushed_the_citations_for_the_following_rows_to=Referencer_for_de_f\u00f8lgende_r\u00e6kker_sendt_til
-Quit_JabRef=Afslut_JabRef
-Quit_synchronization=Afslut_synkronisering
-Raw_source=Kilde
-Really_delete_the_selected=Vil_du_slette_de_valgte
-Rearrange_tabs_alphabetically_by_title=Omarranger_faneblade_alfabetisk_efter_titel
-Redo=Gentag
-Reference_database=Referencedatabase
-# The next two lines are used like in "References found: 1  Number of references to fetch?"
-References_found=Referencer_fundet
-Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Undergruppe:_Vis_poster_indeholdt_b\u00e5de_i_denne_gruppe_og_gruppe_over
-Refresh_view=Opdater
-Regular_Expression=Regul\u00e6rudtryk
-Remember_these_entry_types?=Husk_disse_posttyper?
-Remote_operation=Fjernstyring
-Remote_server_port=Port_til_fjernstyring
-Remove=Fjern
-Remove_all?=Fjern_alle?
-Remove_all_subgroups=Fjern_undergrupper
-Remove_all_subgroups_of_"%0"?=Fjern_alle_undergrupper_af_"%0"?
-Remove_double_braces_around_BibTeX_fields_when_loading.=Fjern_dobbelte_kr\u00f8llede_parenteser_omkring_BibTeX-felter_ved_indl\u00e6sning.
-Remove_duplicates=Fjern_dubletter
-Remove_entry_from_import=Fjern_post_fra_import
-Remove_entry_selection_from_this_group=Fjern_valgte_poster_fra_denne_gruppe
-Remove_entry_type=Slet_posttype
-Remove_file_link_(DELETE)=Slet_link_(DELETE)
-remove_from_group=fjern_fra_gruppe
-Remove_from_group=Fjern_fra_gruppe
-Remove_group=Fjern_gruppe
-Remove_group,_keep_subgroups=Fjern_gruppe,_behold_undergrupper
-Remove_group_"%0"?=Fjern_gruppen_"%0"?
-Remove_group_"%0"_and_its_subgroups?=Fjern_gruppen_"%0"_og_dens_undergrupper?
-remove_group_(keep_subgroups)=fjern_gruppe_(behold_undergrupper)
-remove_group_and_subgroups=fjern_gruppe_og_undergrupper
-Remove_group_and_subgroups=Fjern_gruppe_og_undergrupper
-Remove_link=Slet_link
-Remove_old_entry=Fjern_gammel_post
-Remove_selected_strings=Slet_valgte_strenge
-remove_string_=slet_streng_
-Removed_group_"%0".=Fjernede_gruppen_"%0"
-Removed_group_"%0"_and_its_subgroups.=Fjernede_gruppen_"%0"_og_dens_undergrupper
-Removed_string=Streng_fjernet
-
-Renamed_string=\u00e6ndrede_navn_p\u00e5_streng
-Replace=Erstat
-Replace_(regular_expression)=Erstat_(regul\u00e6rudtryk)
-Replace_string=Erstat_streng
-Replace_with=Erstat_med
-Replaced=Erstattet
-Required_fields=Obligatoriske_felter
-Reset_all=Nulstil_alle
-Reset_file_type_definitons=Genopret_oprindelige_filtyper
-Resolve_strings_for_all_fields_except=Sl\u00e5_strenge_op_for_alle_felter_undtagen
-Resolve_strings_for_standard_BibTeX_fields_only=Sl\u00e5_kun_strenge_op_for_standard_BibTeX-felter
-resolved=l\u00f8st
-Results=Resultater
-Revert_to_original_source=Ret_tilbage_til_oprindelig_kildekode
-Review=Kommentarer
-Review_changes=Gennemse_\u00e6ndringer
-Right=H\u00f8jre
-root=root
-Save=Gem
-Save_all_finished.=Alle_databaser_gemt
-
-Save_all_open_databases=Gem_alle_\u00e5bne_databaser
-Save_before_closing=Gem_f\u00f8r_databasen_lukkes
-Save_database=Gem_database
-Save_database_as_...=Gem_database_som_...
-Save_entries_in_their_original_order=Gem_poster_i_oprindelig_r\u00e6kkef\u00f8lge
-Save_failed=Gemning_mislykkedes
-Save_failed_during_backup_creation=Gemning_mislykkedes_ved_oprettelse_af_sikkerhedskopi
-Save_failed_while_committing_changes=Gemning_mislykkedes_ved_inddatering_af_\u00e6ndringer
-Save_ordered_by_author/editor/year=Gem_sorteret_efter_author/editor/year
-Save_selected_as_...=Gem_valgte_som_...
-Saved_database=Database_gemt
-Saved_selected_to=Gemte_valgte_i
-Saved_session=Tilstand_gemt
-Saving=Gemmer
-Saving_all_databases...=Gemmer_alle_databaser...
-Saving_database=Gemmer_database
-# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
-Scan=S\u00f8g
-Search=S\u00f8g
-Search_All_Fields=S\u00f8g_i_alle_felter
-Search_all_fields=S\u00f8g_i_alle_felter
-Search_error=Fejl_ved_s\u00f8gning
-Search_expression=S\u00f8geudtryk
-Search_for=S\u00f8g_efter
-Search_general_fields=S\u00f8g_i_generelle_felter
-Search_IEEEXplore=S\u00f8g_i_IEEEXplore
-
-Search_IEEExplore=S\u00f8g_i_IEEExplore
-Search_optional_fields=S\u00f8g_i_valgfrie_felter
-Search_required_fields=S\u00f8g_i_obligatoriske_felter
-Search_Specified_Field(s)=S\u00f8g_specificerede_felt(er)
-Searched_database._Global_number_of_hits=Database_gennems\u00f8gt._Globalt_antal_match
-Searched_database._Number_of_hits=Database_gennems\u00f8gt._Antal_match
-Searching_for_%0_file=S\u00f8ger_efter_%0-fil
-Searching_for_duplicates...=S\u00f8ger_efter_dubletter...
-
-Searching_for_files=S\u00f8ger_efter_filer
-Secondary_sort_criterion=Sekund\u00e6rt_sorteringskriterium
-Select=V\u00e6lg
-Select_a_Zip-archive=V\u00e6lg_ZIP-fil
-Select_action=V\u00e6lg_handling
-Select_all=V\u00e6lg_alle
-Select_Classpath_of_New_Importer=V\u00e6lg_classpath_for_nyt_importformat
-Select_encoding=V\u00e6lg_tegnkodning
-Select_entries_in_group_selection=V\u00e6lg_poster_i_valgte_grupper
-Select_entry_type=V\u00e6lg_posttype
-Select_external_application=V\u00e6lg_ekstern_applikation
-Select_file_from_ZIP-archive=V\u00e6lg_fil_fra_ZIP-fil
-Select_format=V\u00e6lg_format
-Select_icon=V\u00e6lg_ikon
-Select_matches=V\u00e6lg_match
-Select_new_ImportFormat_Subclass=V\u00e6lg_klasse_til_nyt_importformat
-Select_the_tree_nodes_to_view_and_accept_or_reject_changes=V\u00e6lg_forgreningerne_for_at_inspicere_og_acceptere_eller_forkaste_\u00e6ndringer
-Selected_entries=Valgte_poster
-Selector_enabled_fields=Felter_med_ordliste
-Server_Hostname_\:=Server_v\u00e6rtsnavn:
-Server_Type_\:=Server-type:
-
-Set_field=S\u00e6t_felt
-Set_fields=S\u00e6t_felter
-Set_general_fields=Tilpas_generelle_felter
-Set_main_external_file_directory=S\u00e6t_hovedbibliotek_for_eksterne_links
-Set_table_font=V\u00e6lg_tabelskrifttype
-Settings=Indstillinger
-Setup_selectors=Ops\u00e6t_ordlister
-Short_form=Kort_form
-Shortcut=Genvej
-Show/edit_BibTeX_source=Vis/rediger_BibTeX-kilde
-Show_'Firstname_Lastname'=Vis_'Fornavn_Efternavn'
-Show_'Lastname,_Firstname'=Vis_'Efternavn,_Fornavn'
-Show_BibTeX_source_by_default=Vis_BibTeX-kode_som_standard
-Show_BibTeX_source_panel=Vis_BibTeX-kilde-panel
-Show_confirmation_dialog_when_deleting_entries=Vis_dialog_for_at_bekr\u00e6fte_sletning_af_poster
-Show_description=Vis_beskrivelse
-Show_dynamic_groups_in_<i>italics</i>=Vis_dynamiske_grupper_i_<i>kursiv</i>
-Show_entries_*not*_in_group_selection=Vis_poster_*udenfor*_valgte_grupper
-
-Show_file_column=Vis_'file'-kolonne
-Show_icons_for_groups=Vis_ikoner_for_grupper
-Show_last_names_only=Vis_kun_efternavn
-Show_names_unchanged=Vis_navn_u\u00e6ndret
-Show_one_less_rows=Vis_en_r\u00e6kke_mindre
-Show_one_more_row=Vis_en_r\u00e6kke_mere
-Show_optional_fields=Vis_valgfrie_felter
-Show_PDF/PS_column=Vis_PDF/PS-kolonne
-Show_required_fields=Vis_obligatoriske_felter
-Show_URL/DOI_column=Vis_URL/DOI-kolonne
-Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Vis_advarsel_n\u00e5r_en_ikke-unik_BibTeX-n\u00f8gle_indtastes
-Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Vis_dialogboks_med_advarsel_n\u00e5r_en_tom_BibTeX-n\u00f8gle_indtastes
-Simple_HTML=Simpel_HTML
-Size=St\u00f8rrelse
-Skip=Spring_over
-Skipped_-_No_PDF_linked=Sprang_over_-_ingen_PDF-fil_linket
-Skipped_-_PDF_does_not_exist=Sprang_over_-_PDF-filen_findes_ikke
-
-Skipped_entry.=Sprang_over_post.
-Sort_alphabetically=Sorter_alfabetisk
-Sort_Automatically=Sorter_automatisk
-
-Sort_order=Sortering
-sort_subgroups=sorter_undergrupper
-Sorted_all_subgroups_recursively.=Sorterede_alle_undergrupper_rekursivt.
-Sorted_immediate_subgroups.=Sorterede_n\u00e6rmeste_undergrupper.
-source_edit=redigering_af_kilde
-Special_Name_Formatters=Specielle_navneformateringer
-Special_table_columns=Specielle_kolonner
-SQL_connection_established.=SQL-forbindelse_oprettet.
-Start_incremental_search=Start_inkrementel_s\u00f8gning
-Start_search=Start_s\u00f8gning
-Starting_import=Starter_import
-Statically_group_entries_by_manual_assignment=Grupper_poster_statisk_ved_manuel_tildeling
-Status=Status
-Stop=Stop
-Store_journal_abbreviations=Gem_tidsskriftsforkortelser
-Store_string=Gem_streng
-Store_the_following_fields_with_braces_around_capital_letters=Gem_de_f\u00f8lgende_felter_med_kr\u00f8llede_parenteser_om_store_bogstaver
-Stored_entry=Post_gemt
-Strings=Strenge
-Strings_for_database=Strenge_for_database
-Subdatabase_from_aux=Deldatabase_fra_aux-fil
-Suggest=Foresl\u00e5
-Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Skifter_mellem_fuldt_og_forkortet_tidsskriftsnavn_hvis_navnet_er_kendt.
-Synchronize_%0_links=Synkroniser_%0-links
-Synchronize_file_links=Synkroniser_eksterne_links
-Synchronizing_%0_links...=Synkroniserer_%0-links...
-Table_appearance=Tabelops\u00e6tning
-Table_background_color=Baggrundsfarve_for_tabel
-Table_grid_color=Farve_p\u00e5_linjer_i_tabel
-Table_text_color=Tekstfarve_i_tabel
-Tabname=Navn_p\u00e5_faneblad
-Target_file_cannot_be_a_directory.=Angivet_fil_kan_ikke_v\u00e6re_et_bibliotek.
-Tertiary_sort_criterion=Terti\u00e6rt_sorteringskriterium
-Test=Test
-Text_Input_Area=Indtastningsfelt
-The_#_character_is_not_allowed_in_BibTeX_fields=#-tegnet_er_ikke_tilladt_i_BibTeX-felter
-#The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Applikationen_'%0'_associeret_med_filtypen_'%1'_kunne_ikke_startes.
-The_chosen_date_format_for_new_entries_is_not_valid=Det_valgte_datoformat_er_ugyldigt
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Den_valgte_tegnkodning_'%0'_kunne_ikke_kode_de_f\u00f8lgende_tegn:_
-The_CiteSeer_fetch_operation_returned_zero_results.=Hentning_fra_CiteSeerX_gav_ingen_resultater.
-The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=Denne_version_tilbyder_en_ny_m\u00e5de_at_h\u00e5ndtere_links_til_eksterne_filer.<br>For_at_benytte_dette,_skal_dine_links_\u00e6ndres_til_det_nye_format,_og<br>JabRef_skal_konfigureres_til_at_vise_de_nye_links.
-the_field_<b>%0</b>=feltet_<b>%0</b>
-The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Filen<BR>'%0'<BR>er_blevet_\u00e6ndret<BR>eksternt!
-The_group_"%0"_already_contains_the_selection.=Gruppen_"%0"_indeholder_allerede_de_valgte_poster.
-The_label_of_the_string_can_not_be_a_number.=Navnet_p\u00e5_strengen_kan_ikke_v\u00e6re_et_tal.
-The_label_of_the_string_can_not_contain_spaces.=Navnet_p\u00e5_strengen_kan_ikke_indeholde_mellemrum.
-The_label_of_the_string_can_not_contain_the_'#'_character.=Navnet_p\u00e5_strengen_kan_ikke_indeholde_tegnet_'#'.
-The_output_option_depends_on_a_valid_import_option.=Output-indstillingen_er_afh\u00e6ngig_af_en_gyldig_import-indstilling.
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=PDF-filen_indeholder_en_eller_flere_BibTeX-poster.\nVil_du_importere_disse_som_nye_poster_i_den_\u00e5bne_database?
-The_regular_expression_<b>%0</b>_is_invalid%c=Regul\u00e6rudtrykket_<b>%0</b>_er_ugyldigt%c
-The_search_is_case_insensitive.=S\u00f8gningen_skelner_ikke_mellem_store_og_sm\u00e5_bogstaver.
-The_search_is_case_sensitive.=S\u00f8gningen_skelner_mellem_store_og_sm\u00e5_bogstaver.
-The_string_has_been_removed_locally=Strengen_er_blevet_slettet_lokalt
-There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Der_findes_mulige_dubletter_(m\u00e6rket_med_et_'D'-ikon)_som_ikke_er_blevet_h\u00e5ndteret._Forts\u00e6t?
-this_button_will_update=denne_knap_vil_opdatere
-This_database_was_written_using_an_older_version_of_JabRef.=Denne_database_blev_gemt_i_en_\u00e6ldre_version_af_JabRef.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Denne_post_har_ingen_BibTeX-n\u00f8gle._Generer_n\u00f8gle_nu?
-This_entry_is_incomplete=Denne_post_er_ufuldst\u00e6ndig
-This_entry_type_cannot_be_removed.=Denne_posttype_kan_ikke_slettes.
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Dette_eksterne_link_er_af_typen_'%0',_som_er_udefineret._Hvad_vil_du_g\u00f8re?
-This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Denne_gruppe_indeholder_poster_baseret_p\u00e5_manuel_tildeling._Poster_kan_tildeles_til_denne_gruppe_ved_at_v\u00e6l [...]
-This_group_contains_entries_in_which=Denne_gruppe_indeholder_poster_hvor
-This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Denne_gruppen_indeholder_poster,_som_stemmer_med_regul\u00e6rudtrykket_<b>%0</b>_i_et_hvilket_som_helst_felt
-This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Denne_gruppe_indeholder_poster,_som_har_teksten_<b>%0</b>_i_et_hvilket_som_helst_felt
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Denne_gruppe_indeholder_poster_hvis_<b>%0</b>-felt_indeholder_n\u00f8gleordet_<b>%1</b>
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Denne_gruppe_indeholder_poster,_hvis_<b>%0</b>-felt_stemmer_med_regul\u00e6rudtrykket_<b>%1</b>
-This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Dette_er_et_enkelt_klip-og-inds\u00e6t-vindue._Indtast_eller_kopier_f\u00f8rst_tekst_til_indtastningsfeltet._Derefter_kan_du_markere_tekst_og_tildele_den_til_et_BibTeX-felt.
-
-This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dette_f\u00e5r_JabRef_til_at_sl\u00e5_hvert_%0-link_op_og_tjekke,_om_filen_eksisterer._Hvis_ikke_vil_du_f\u00e5_mulighed_for_at<br>l\u00f8se_problemet.
-#This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dette_f\u00e5r_JabRef_til_at_unders\u00f8ge_hvert_%0-link_og_tjekke,_om_filen_eksisterer._Hvis_ikke_vil_du_f\u00e5_mulighed<BR>for_at_l\u00f8se_problemet.
-This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Denne_operation_kr\u00e6ver,_at_alle_valgte_poster_har_definerede_BibTeX-n\u00f8gler.
-This_operation_requires_at_least_one_entry.=Denne_operation_kr\u00e6ver_mindst_en_post.
-This_operation_requires_one_or_more_entries_to_be_selected.=Denne_operation_kr\u00e6ver,_at_en_eller_flere_poster_er_valgt.
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Denne_operation_vil_flytte_alle_eskterne_links_fra_'pdf'-_og_'ps'-felterne_til_'%0'-feltet._Forts\u00e6t?
-To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=For_at_s\u00e6tte_op,_g\u00e5_til_<B>V\u00e6rkt\u00f8jer_->_Ops\u00e6t_tidsskriftsforkortelser</b>
-Toggle_abbreviation=Forkort/ekspander
-Toggle_entry_preview=Vis/skjul_forh\u00e5ndsvisning
-Toggle_groups_interface=Vis/skjul_grupperingspanel
-Toggle_search_panel=Vis/skjul_s\u00f8gepanel
-Try_different_encoding=Pr\u00f8v_en_anden_tegnkodning
-Type_set_to_'other'=Type_sat_til_'other'
-Unabbreviate_journal_names_of_the_selected_entries=Ekspander_tidsskriftsnavn_for_de_valgte_poster
-Unabbreviated_%0_journal_names.=Ekspanderede_%0_tidsskriftsnavn.
-unable_to_access_LyX-pipe=ingen_adgang_til_LyX-pipe
-Unable_to_create_graphical_interface=Kunne_ikke_oprette_grafisk_brugerflade
-Unable_to_open_file.=Kan_ikke_\u00e5bne_fil.
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Kan_ikke_\u00e5bne_link._Applikationen_'%0'_associeret_med_filtypen_'%1'_kunne_ikke_kaldes.
-Unable_to_read_default_icon_theme.=Kunne_ikke_l\u00e6se_standard-ikons\u00e6tfil.
-Unable_to_read_icon_theme_file=Kunne_ikke_l\u00e6se_ikons\u00e6tfil
-unable_to_write_to=kunne_ikke_skrive_til
-Undefined_file_type=Udefineret_filtype
-Undo=Fortryd
-Union=Foreningsm\u00e6ngde
-Unknown_bibtex_entries=Ukendte_BibTeX-poster
-unknown_edit=ukendt_\u00e6ndring
-unknown_entry_type=ukendt_posttype
-Unknown_export_format=Ukendt_eksportformat
-Unmark_all=Fjern_m\u00e6rkning_fra_alle
-Unmark_entries=Fjern_m\u00e6rkning
-Unmark_entry=Fjern_m\u00e6rkning
-Unmarked_selected=M\u00e6rkning_fjernet_fra_valgte_poster
-Unpack_EndNote_filter_set=Udpak_EndNote-filters\u00e6t
-Unpacked_file.=Fil_udpakket.
-Unsupported_version_of_class_%0\:_%1=Ikke-underst\u00f8ttet_version_af_klassen_%0:_%1
-untitled=uden_navn
-Up=Op
-Update_to_current_column_widths=Brug_nuv\u00e6rende_kolonnebredder
-Updated_group_selection=Gruppevalg_opdateret
-Upgrade_external_links=Opgrader_eksterne_links
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Opgrader_eksterne_PDF-_og_PS-links_til_at_bruge_'%0'-feltet.
-Upgrade_file=Opgrader_fil
-Upgrade_old_external_file_links_to_use_the_new_feature=Opgrader_gamle_eksterne_links_for_at_bruge_den_nye_funktion
-Upgraded_links.=Links_opgraderet.
-UPPER=STORE_BOGSTAVER
-Upper_Each_First=Stort_Forbogstav
-Upper_first=Stort_f\u00f8rste_forbogstav
-usage=brug
-Use_antialiasing_font=Brug_udglattet_skrifttype
-Use_autocompletion_for_the_following_fields=Brug_autoudfyldning_for_f\u00f8lgende_felter
-Use_custom_icon_theme=Benyt_brugerdefineret_ikons\u00e6t
-Use_default_viewer=Brug_standardprogram_for_filtypen
-Use_inspection_window_also_when_a_single_entry_is_imported.=Brug_ogs\u00e5_inspektionsvindue,_n\u00e5r_kun_\u00e9n_post_importeres.
-Use_native_file_dialog=Brug_system-fildialog
-Use_other_look_and_feel=Brug_andet_udseende
-Use_Regular_Expression_Search=Brug_s\u00f8gning_med_regul\u00e6rudtryk
-Use_regular_expressions=Brug_regul\u00e6rudtryk
-Use_the_following_delimiter_character(s)=Brug_f\u00f8lgende_separatortegn
-Username_\:=Brugernavn:
-Value_cleared_externally=V\u00e6rdi_slettet_eksternt
-Value_set_externally=V\u00e6rdi_sat_eksternt
-verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=kontroller_at_LyX_k\u00f8rer,_og_at_den_angivne_lyxpipe_stemmer
-View=Vis
-Vim_Server_Name=Navn_p\u00e5_Vim-server
-Waiting_for_ArXiv...=Venter_p\u00e5_ArXiv
-Warn_about_unresolved_duplicates_when_closing_inspection_window=Advar_om_dubletter_som_ikke_er_blevet_h\u00e5ndteret,_n\u00e5r_inspektionsvinduet_lukkes
-Warn_before_overwriting_existing_keys=Advar_f\u00f8r_eksisterende_n\u00f8gler_overskrives
-Warning=Advarsel
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Advarsel:_Kunne_ikke_fuldf\u00f8re_reparation_af_filen;_filen_kan_v\u00e6re_\u00f8delagt._Fejlmeddelelse
-Warning_there_is_a_duplicate_key=Advarsel:_Der_findes_en_identisk_BibTeX-n\u00f8gle
-Warnings=Advarsler
-web_link=link
-
-What_do_you_want_to_do?=Hvad_vil_du_g\u00f8re?
-When_adding/removing_keywords,_separate_them_by=N\u00e5r_n\u00f8gleord_tilf\u00f8jes_eller_fjernes,_adskil_dem_med
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Skriver_XMP-metadata_til_PDF-filerne_linket_fra_de_valgte_poster.
-with=med
-Word=Ord
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=Skriv_BibTeX-posten_som_XMP-metadata_til_PDF.
-Write_XMP=Skriv_XMP
-Write_XMP-metadata=Skriv_XMP-metadata
-Write_XMP-metadata_for_all_PDFs_in_current_database?=Skriv_XMP-metadata_for_alle_PDFer_i_denne_database?
-
-Writing_XMP=Skriver_XMP
-Writing_XMP_metadata...=Skriver_XMP-metadata...
-Writing_XMP_metadata_for_selected_entries...=Skriver_XMP-metadata_for_de_valgte_poster...
-Writing_XMP_to_'%0'...=Skriver_XMP_til_'%0'
-Wrong_file_format=Forkert_filformat
-Wrote_XMP-metadata=Skrev_XMP-metadata
-Wrote_XMP_to_'%0'.=Skrev_XMP_til_'%0'
-
-XMP-annotated_PDF=XMP-annoteret_PDF
-XMP_Export_Privacy_Settings=Indstillinger_for_XMP-eksport
-XMP_metadata=XMP-metadata
-XMP_metadata_found_in_PDF\:_%0=XMP-metadata_fundet_i_PDF:_%0
-You_must_restart_JabRef_for_this_to_come_into_effect.=Du_skal_genstarte_JabRef_for,_at_dette_skal_tr\u00e6de_i_kraft.
-You_have_changed_the_language_setting.=Du_har_valgt_et_nyt_sprog.
-You_have_changed_the_look_and_feel_setting.=Du_har_\u00e6ndret_indstillingen_for_udseende.
-You_have_cleared_this_field._Original_value=Du_har_slettet_dette_felt._Oprindelig_v\u00e6rdi
-
-You_have_entered_an_invalid_search_'%0'.=Ugyldigt_s\u00f8geudtryk_'%0'.
-You_must_choose_a_file_name_to_store_journal_abbreviations=Du_skal_v\u00e6lge_et_filnavn_for_at_gemme_tidsskriftsforkortelser
-You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Du_skal_genstarte_JabRef_for,_at_de_nye_genvejstaster_skal_fungere.
-You_must_set_both_BibTeX_key_and_%0_directory=Du_skal_angive_b\u00e5de_BibTeX-n\u00f8gle_og_%0-bibliotek
-Your_new_key_bindings_have_been_stored.=Dine_nye_genvejstaster_er_blevet_gemt.
-The_following_fetchers_are_available\:=F\u00f8lgende_hentev\u00e6rkt\u00f8jer_er_tilg\u00e6ngelige:
-Could_not_find_fetcher_'%0'=Kunne_ikke_finde_hentev\u00e6rkt\u00f8jet_'%0'
-Running_Query_'%0'_with_fetcher_'%1'.=K\u00f8rer_foresp\u00f8rgsel_'%0'_med_hentev\u00e6rkt\u00f8jet_'%1'.
-Please_wait!=Vent_venligst!
-Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=Foresp\u00f8rgsel_'%0'_med_hentev\u00e6rkt\u00f8jet_'%1'_returnerede_ingen_resultater.
-Open_SPIRES_entry=\u00c5bn_SPIRES_post
-Move/Rename_file=Flyt/omd\u00f8b_fil
-File_moved=Fil_flyttet
-Move_file_failed=Flytning_af_fil_mislykkedes
-Could_not_move_file=Kunne_ikke_flytte_fil
-Could_not_find_file_'%0'.=Kunne_ikke_finde_filen_'%0'.
-Move/rename_file=Flyt/omd\u00f8b_fil
-Number_of_entries_successfully_imported=Antal_poster_korrekt_importeret
-Import_canceled_by_user=Import_afbrudt_af_bruger
-Progress\:_%0_of_%1=Fremskridt:_%0_af_%1
-Error_while_fetching_from_JSTOR=Fejl_under_hentning_fra_JSTOR
-Fetching_Medline_by_id...=Henter_fra_Medline_via_ID...
-Fetching_Medline_by_term...=Henter_fra_Medline_via_udtryk...
-Medline_import_canceled=Medline-import_afbrudt
-Please_enter_a_valid_number=Indtast_venligst_et_gyldigt_tal
-Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Indtast_venligst_en_kommasepareret_liste_af_Medline_IDer_(numre)_eller_s\u00f8geudtryk.
-An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=Fejl_under_hentning_fra_SPIRES_kilde_(%0)\:
-Error_while_fetching_from_Spires\:_=Fejl_under_hentning_fra_SPIRES\:_
-Connect_to_external_SQL_database=Tilslut_til_ekstern_SQL-database
-Export_to_external_SQL_database=Eksporter_til_ekstern_SQL-database
-
-Show_results_in_dialog=Vis_resultater_i_dialog
-Global_search=Global_s\u00f8gning
-Show_search_results_in_a_window=Vis_s\u00f8geresultater_i_et_vindue
-Search_results=S\u00f8geresultater
-Move_file_to_file_directory?=Flyt_fil_til_filbibliotek?
-Rename_to_'%0'=Omd\u00f8b_til_'%0'
-Move_to_file_directory=Flyt_til_filbibliotek
-
-You_have_changed_the_menu_and_label_font_size.=Du_har_\u00e6ndret_menu-_og_tekst-skriftst\u00f8rrelsen.
-
-Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Databasen_er_beskyttet._Kan_ikke_gemme_f\u00f8r_eksterne_\u00e6ndringer_er_gennemset.
-Protected_database=Beskyttet_database
-Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=N\u00e6gt_at_gemme_database_f\u00f8r_eksterne_\u00e6ndringer_er_gennemset.
-Database_protection=Database-beskyttelse
-Unable_to_save_database=Kan_ikke_gemme_database
-BibTeX_key_generator=BibTeX-n\u00f8glegenerator
-Unable_to_open_link.=Kan_ikke_\u00e5bne_link.
-Search_JSTOR=S\u00f8g_i_JSTOR
-Attempting_SQL_import...=Fors\u00f8ger_SQL-import...
-BibO_RDF=BibO_RDF
-HTML_parser=HTML-fortolker
-Move_the_keyboard_focus_to_the_entry_table=Flyt_tastatur-fokus_til_hovedtabellen
-MIME_type=MIME-type
-
-This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Denne_funktion_tillader,_at_flere_filer_kan_\u00e5bnes_eller_importeres_i_en_allerede_k\u00f8rende_JabRef<BR>i_stedet_for_at_\u00e5bne_programmet_p\u00e5ny._For_eksempel_er_dette_prak [...]
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Bem\u00e6rk_at_disse_indstillinger_kun_bruges_til_de_for\u00e6ldede_<b>pdf</b>-_og_<b>ps</b>-felter.<br>Det_skulle_v\u00e6re_tilstr\u00e6kkeligt_for_de_fleste_at_benytte_<b>Hovedbibliotek</b>-indstillingen_ovenfor.
-Legacy_file_fields=For\u00e6ldede_fil-felter
-
-This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dette_f\u00e5r_JabRef_til_at_sl\u00e5_hver_%0-endelse_op_og_tjekke,_om_filen_eksisterer._Hvis_ikke_vil_du_f\u00e5_mulighed_for_at<br>l\u00f8se_problemet.
-
-Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=K\u00f8r_hentev\u00e6rkt\u00f8j,_f.eks._"--fetch\=Medline\:cancer"
-
-The_ACM_Digital_Library=ACM_Digital_Library
-Reset=Nulstil
-
-Use_IEEE_LaTeX_abbreviations=Brug_IEEE-LaTeX-forkortelser
-The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
-Search_ACM_Portal=S\u00f8g_p\u00e5_ACM-portalen
-Connection_to_ACM_Portal_failed=Kunne_ikke_oprette_forbindelse_til_ACM-portalen
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=S\u00f8g_efter_en_matchende_fil,_n\u00e5r_der_\u00e5bnes_et_fil-link,_der_ikke_er_defineret
-Settings_for_%0=Indstillinger_for_%0
-Insert_selected_citations_into_Vim=Inds\u00e6t_valgte_referencer_i_Vim
-RIS=RIS
-Assign_exclusively_to_group=Tilf\u00f8j_udelukkende_til_gruppe
-Bad_Request_'%0'.=Ugyldig_foresp\u00f8rgsel_'%0'
-
-Mark_entries_imported_into_an_existing_database=M\u00e6rk_poster_som_importeres_til_en_eksisterende_database
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Fjern_m\u00e6rkning_fra_alle_poster_f\u00f8r_import_af_nye_poster_til_en_eksisterende_database
-
-Forward=Frem
-Back=Tilbage
-Sort_the_following_fields_as_numeric_fields=Sorter_f\u00f8lgende_felter_som_numeriske_felter
-Line_%0\:_Found_corrupted_BibTeX-key.=Linje_%0\:_Fandt_\u00f8delagt_BibTeX-n\u00f8gle.
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Linje_%0\:_Fandt_\u00f8delagt_BibTeX-n\u00f8gle_(indeholder_blanktegn).
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Linje_%0\:_Fandt_\u00f8delagt_BibTeX-n\u00f8gle_(manglende_komma).
-Finished_downloading_full_text_document=Download_af_fuldtekst-dokument_afsluttet
-Unable_to_find_full_text_document_in_the_linked_web_page.=Kunne_ikke_finde_fuldtekst-dokument_p\u00e5_den_linkede_webside.
-Connection_error_when_trying_to_find_full_text_document.=Forbindelsesfejl_under_fors\u00f8g_p\u00e5_at_finde_fuldtekst-dokument.
-This_entry_provides_no_URL_or_DOI_links.=Denne_post_indeholder_ingen_URL-_eller_DOI-links.
-Full_text_article_download_failed=Download_af_fuldtekst-dokument_mislykkedes
-Update_to_current_column_order=Brug_nuv\u00e6rende_kolonner\u00e6kkef\u00f8lge
-
-Rename_field=Omd\u00f8b_felt
-Set/clear/rename_fields=S\u00e6t/ryd/omd\u00f8b_felter
-Rename_field_to\:=Omd\u00f8b_felt_til_\:
-Move_contents_of_a_field_into_a_field_with_a_different_name=Flyt_indhold_af_et_felt_til_et_felt_med_et_andet_navn
-You_can_only_rename_one_field_at_a_time=Du_kan_kun_omd\u00f8be_et_felt_ad_gangen
-Remove_all_broken_links=Fjern_alle_\u00f8delagte_links
-
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Kan_ikke_bruge_port_%0_til_fjernstyring;_et_andet_program_bruger_den_m\u00e5ske._Pr\u00f8v_en_anden_port.
-
-Plugin_installer=Plugin-installationsprogram
-Unable_to_create_plugin_directory=Kan_ikke_oprette_pluginbibliotek
-Unable_to_copy_file=Kan_ikke_kopiere_fil
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Plugin_installeret._Genstart_JabRef_for_at_indl\u00e6se_den_nye_plugin.
-Unable_to_create_user_plugin_directory=Kan_ikke_oprette_bruger-pluginbibliotek
-Plugin_installation_failed.=Installation_af_plugin_mislykkedes.
-The_same_version_of_this_plugin_is_already_installed.=Samme_version_af_denne_plugin_er_allerede_installeret.
-A_newer_version_of_this_plugin_is_already_installed.=En_nyere_version_af_denne_plugin_er_allerede_installeret.
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=En_eller_flere_\u00e6ldre_versioner_af_denne_plugin_er_allerede_installeret._Skal_de_\u00e6ldre_slettes?
-Old_versions_deleted_successfully.=\u00c6ldre_versioner_korrekt_slettet.
-
-Install_plugin=Installer_plugin
-Download_plugin=Download_plugin
-Plugin_manager=Plugin-administration
-Delete_the_%0_selected_plugins?=Slet_de_%0_valgte_plugins?
-Delete_plugins=Slet_plugins
-Delete_the_selected_plugin?=Slet_den_valgte_plugin?
-Delete_plugin=Slet_plugin
-Enter_download_URL=Indtast_URL_til_download
-Plugin_name=Pluginnavn
-Version=Version
-Unknown=Ukendt
-Not_loaded=Ikke_indl\u00e6st
-Loaded=Indl\u00e6st
-Could_not_determine_version_of_=Kunne_ikke_fastsl\u00e5_version_af_
-Install_anyway?=Installer_alligevel?
-
-Looking_for_full_text_document...=S\u00f8ger_efter_tekstdokument...
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=F\u00f8lg_DOI-_eller_URL-link_og_fors\u00f8g_at_lokalisere_PDF-tekstdokument
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Kunne_ikke_finde_tekstdokument._Ingen_s\u00f8gealgoritme_defineret_for_webstedet_'%0'.
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=PDF-link_fundet,_men_forkert_MIME-type_modtaget._Dette_kan_indikere,_at_du_ikke_har_adgang_til_tekstdokumentet.
-
-Autosave=Automatisk_sikkerhedskopi
-Prompt_before_recovering_a_database_from_an_autosave_file=Sp\u00f8rg_f\u00f8r_en_database_genskabes_fra_en_automatisk_sikkerhedskopi.
-Autosave_interval_(minutes)=Automatisk_sikkerhedskopi-interval
-Do_you_want_to_recover_the_database_from_the_autosave_file?=Vil_du_genskabe_databasen_fra_sikkerhedskopien?
-Recover_from_autosave=Genskab_fra_sikkerhedskopi
-%0_warnings=%0_advarsler
-
-Save_in_current_table_sort_order=Gem_med_nuv\u00e6rende_tabel-sortering
-Export_in_current_table_sort_order=Eksporter_med_nuv\u00e6rende_tabel-sortering
-Export_ordered_by_author/editor/year=Eksporter_sorteret_efter_forfatter/redakt\u00f8r/\u00e5r
-Export_entries_in_their_original_order=Eksporter_poster_med_den_oprindelige_sortering
-Error_opening_file_'%0'.=Fejl_ved_\u00e5bning_af_filen_'%0'.
-Autosave_of_file_'%0'=Sikkerhedskopi_af_filen_'%0'
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Fejl_ved_\u00e5bning_af_sikkerhedskopi_af_'%0'._Fors\u00f8ger_at_\u00e5bne_'%0'_i_stedet.
-
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugins_installeret_i_dit_bruger-pluginbibliotek_(%0):
-Plugins_installed_in_other_locations\:=Plugins_installeret_andre_steder:
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=Plugins'ene_slettes,_n\u00e6ste_gang_JabRef_starter.
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=Plugin'en_slettes,_n\u00e6ste_gang_JabRef_starter.
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=\u00c6ldre_plugin-versioner_slettes,_n\u00e6ste_gang_JabRef_starter.
-
-Formatter_not_found\:_%0=Formatering_ikke_fundet:_%0
-The_following_formatters_could_not_be_found=De_f\u00f8lgende_formateringer_kunne_ikke_findes
-
-Clear_inputarea=Ryd_inputomr\u00e5de
-Automatically_set_file_links_for_this_entry=S\u00e6t_automatisk_fil-links_for_denne_post
-Could_not_save,_file_locked_by_another_JabRef_instance.=Kunne_ikke_gemme,_filen_er_l\u00e5st_af_en_anden_k\u00f8rende_JabRef.
-File_is_locked_by_another_JabRef_instance.=Filen_er_l\u00e5st_af_en_anden_k\u00f8rende_JabRef.
-Do_you_want_to_override_the_file_lock?=Vil_du_ignorere,_at_filen_er_l\u00e5st?
-File_locked=Fil_l\u00e5st
-Current_tmp_value=Aktuel_tmp-v\u00e6rdi
-Metadata_change=Metadata-\u00e6ndring
-Changes_have_been_made_to_the_following_metadata_elements=Der_er_\u00e6ndringer_i_f\u00f8lgende_metadata-elementer
-
-Generate_groups_for_author_last_names=Generer_grupper_for_forfatteres_efternavne
-Generate_groups_for_editor_last_names=Generer_grupper_for_redakt\u00f8rers_efternavne
-Generate_groups_from_keywords_in_a_BibTeX_field=Generer_grupper_ud_fra_n\u00f8gleord_i_et_BibTeX-felt
-Enforce_legal_characters_in_BibTeX_keys=H\u00e5ndh\u00e6v_tilladte_tegn_i_BibTex-n\u00f8gler
-The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Tegnet_#_er_ikke_tilladt_i_BibTeX-tekststrenge,_medmindre_det_skrives_som_'\\#'.
-Before_saving,_please_edit_any_strings_containing_the_#_character.=Ret_venligst_tekststrenge_indeholdende_#-tegnet,_f\u00f8r_du_gemmer.
-
-Save_without_backup?=Gem_uden_sikkerhedskopi?
-Unable_to_create_backup=Kan_ikke_oprette_sikkerhedskopi
-
-File_directory_is_not_set_or_does_not_exist.=Filbibliotek_er_ikke_specificeret_eller_eksisterer_ikke.
-Move_file_to_file_directory.=Flyt_fil_til_filbibliotek.
-Rename_file_to=Omd\u00f8b_fil_til
-<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Alle_poster</b>_(denne_gruppe_kan_ikke_redigeres_eller_flyttes)
-static_group=statisk_gruppe
-dynamic_group=dynamisk_gruppe
-refines_supergroup=afgr\u00e6nser_overgruppen
-includes_subgroups=inkluderer_undergrupper
-contains=indeholder
-search_expression=s\u00f8ge-udtry
-
-Disable_file_renaming_in_non-native_file_dialog=Deaktiver_omd\u00f8bning_af_filer_i_fil-dialogboks
-File_dialog=Fil-dialogboks
-No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Ingen_poster_fundet._Det_ser_ud_til,_at_du_ikke_har_adgang_til_at_s\u00f8ge_i_JStor.
-Search_ScienceDirect=S\u00f8g_i_ScienceDirect
-Error_while_fetching_from_ScienceDirect=Fejl_under_hentning_fra_ScienceDirect
-
-Error_initializing_custom_export_format_from_string_'%0'=Fejl_ved_initialisering_af_brugerdefineret_eksportformat_fra_tekststrengen_'%0'
-
-BibLaTeX_mode=BibLaTeX-tilstand
-Optional_fields_2=Valgfri_felter_2
-Please_wait=Vent_venligst
-Waiting_for_save_operation_to_finish=Venter_p\u00e5_gemme-operation
-Resolving_duplicate_BibTeX_keys...=Udreder_dublerede_BibTeX-n\u00f8gler...
-Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Udredning_af_dublerede_BibTeX-n\u00f8gler_afsluttet._%0_poster_\u00e6ndret.
-This_database_contains_one_or_more_duplicated_BibTeX_keys.=Denne_database_indeholder_en_eller_flere_dublerede_BibTeX-n\u00f8gler.
-Do_you_want_to_resolve_duplicate_keys_now?=Vil_du_udrede_dublerede_BibTeX-n\u00f8gler_nu?
-
-Find_and_remove_duplicate_BibTeX_keys=Find_og_fjern_dublederede_BibTeX-n\u00f8gler
-Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Forventet_syntaks_for_--fetch='<navn_p\u00e5_hentev\u00e6rkt\u00f8j>:<foresp\u00f8rgsel>'
-Duplicate_BibTeX_key=Dubleret_BibTeX-n\u00f8gle
-Duplicate_key=Dubleret_n\u00f8gle
-Generate_key=Generer_n\u00f8gle
-Import_marking_color=Farve_til_m\u00e6rkning_af_importerede_poster
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_poster_fundet._For_at_reducere_serverbelastningen_vil_kun_%1_poster_blive_hentet._Det_vil_g\u00e5_meget_langsomt_for_g\u00f8re_ACM_glade.
-BibTeX_importer=BibTeX-import\u00f8r
-Always_add_letter_(a,_b,_...)_to_generated_keys=Tilf\u00f8j_altid_bogstav_(a,_b,_...)_til_genererede_n\u00f8gler
-
-Ensure_unique_keys_using_letters_(a,_b,_...)=Garant\u00e9r_unikke_n\u00f8gler_med_bogstaver_(a,_b,_...)
-Ensure_unique_keys_using_letters_(b,_c,_...)=Garant\u00e9r_unikke_n\u00f8gler_med_bogstaver_(b,_c,_...)
-Entry_editor_active_background_color=Aktiv_baggrundsfarve_i_postredigering
-Entry_editor_background_color=Baggrundsfarve_i_postredigering
-Entry_editor_font_color=Tekstfarve_i_postredigering
-Entry_editor_invalid_field_color=Farve_p\u00e5_ugyldige_felter_i_postredigering
-
-Table_and_entry_editor_colors=Farver_i_tabel_og_postredigering
-
-An_autosave_file_was_found_for_this_database._This_could_indicate_=En_automatisk_sikkerhedskopi_af_denne_database_blev_fundet._Det_kunne_indikere_
-that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=at_JabRef_ikke_lukkede_korrekt_ned,_sidst_filen_var_i_brug.
-General_file_directory=Generelt_filbibliotek
-User-specific_file_directory=Brugerspecifikt_filbibliotek
-Error_setting_look_and_feel=Fejl_i_indstilling_af_"look_and_feel"
-Search_failed\:_illegal_search_expression=S\u00f8gning_fejlede:_illegalt_s\u00f8geudtryk
-Show_ArXiv_column=Vis_ArXiv-kolonne
-<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Udpak_zip-filen_med_import-/eksport-filtre_til_Endnote,<BR>for_optimal_interoperabilitet_med_JabRef</HTML>
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Fremh\u00e6v_grupper_der_indeholder_poster,_som_er_med_i_en_af_de_valgte_grupper
-
-You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=Der_skal_indtastes_et_heltal_i_intervallet_1025-65535_i_tekstfeltet_til
-Automatically_open_browse_dialog_when_creating_new_file_link=\u00c5bn_automatisk_fildialog_n\u00e5r_nyt_link_oprettes
-
-# Mr. dLib strings:
-Import_Metadata_from\:=Importer_metadata_fra:
-Choose_the_source_for_the_metadata_import=V\u00e6lg_kilde_for_import_af_metadata
-Create_entry_based_on_XMP_data=Opret_post_baseret_p\u00e5_XMP-data
-Create_entry_based_on_data_fetched_from=Opret_post_baseret_p\u00e5_data_fra
-Create_blank_entry_linking_the_PDF=Opret_tom_post_med_link_til_PDF-filen
-Only_attach_PDF=Tilf\u00f8j_kun_PDF
-Mr._dLib_Metadata_Entries_Associated_With\:=Mr._dLib_metadata_poster_associeret_med:
-Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr._dLib_metadata_poster_associeret_med_PDF-fil
-Title=Titel
-Author(s)=Forfatter(e)
-Published_Year=Udgivelses\u00e5r
-No_metadata_found.=Ingen_metadata_fundet.
-Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib_web-servicen_er_midlertidigt_utilg\u00e6ngelig.
-Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib_web-servicen_er_midlertidigt_nede._Pr\u00f8v_venligst_igen_senere.
-You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Du_er_ikke_forbundet_til_Internettet._For_at_tilg\u00e5_Mr._dLib_web-servicen_kr\u00e6ves_en_Internetforbindelse.
-No_Internet_Connection.=Ingen_Internetforbindelse.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Denne_version_af_JabRef_pr\u00f8ver_at_tilg\u00e5_en_version_af_Mr._dLib_web-servicen,_som_ikke_l\u00e6ngere_er_tilg\u00e6ngelig.\nSe_venligst_http://jabref.sourceforge.net_eller_http://www.mr-dlib.org_for_mere_information_og_opdateringer.
-Web_Service_Version_Outdated=Web-service-version_for\u00e6ldet
-The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Mr._dLib_web-service-versionen,_du_pr\u00f8ver_at_tilg\u00e5,_er_for\u00e6ldet.
-Update_empty_fields_with_data_fetched_from=Opdater_tomme_felter_med_data_hentet_fra
-Create_New_Entry=Opret_ny_post
-Update_Existing_Entry=Opdater_eksisterende_post
-Mr._dLib=Mr._dLib
-More_information=Mere_information
-Fetching_Metadata...=Henter_metadata...
-Metadata=Metadata
-Autocomplete_names_in_'Firstname_Lastname'_format_only=Autofuldf\u00f8r_kun_navne_i_formatet_'Fornavn_Efternavn'
-Autocomplete_names_in_'Lastname,_Firstname'_format_only=Autofuldf\u00f8r_kun_navne_i_formatet_'Efternavn,_Fornavn'
-Autocomplete_names_in_both_formats=Autofuldf\u00f8r_navne_i_begge_formater
-Marking_color_%0=M\u00e6rkningsfarve_%0
-The_name_'comment'_can_not_be_used_as_an_entry_type_name.=Navnet_'comment'_kan_ikke_bruges_som_navn_p\u00e5_en_posttype.
-You_must_enter_an_integer_value_in_the_text_field_for=Der_skal_indtastes_et_heltal_i_tekstfeltet_til
-File_directory=Filbibliotek
-Send_as_email=Send_som_email
-References=Referencer
-Sending_of_emails=Afsendelse_af_emails
-Subject_for_sending_an_email_with_references=Emne_for_afsendelse_af_en_email_med_referencer
-Automatically_open_folders_of_attached_files=\u00c5bn_automatisk_biblioteker_for_vedh\u00e6ftede_filer
-Create_entry_based_on_content=Opret_post_baseret_p\u00e5_indhold
-Store_choice_as_default=Gem_valg_som_standard
-Do_not_show_this_box_again_for_this_import=Vis_ikke_denne_dialogboks_igen_for_denne_import
-Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Brug_altid_denne_PDF-importstil_(og_sp\u00f8rg_ikke_for_hver_enkelt_import)
-Error_creating_email=Fejl_ved_oprettelse_af_email
-Could_not_open_directory=Kunne_ikke_\u00e5bne_bibliotek
-Entries_added_to_an_email=Poster_tilf\u00f8jet_til_en_email
-exportFormat=Eksportformat
-Output_file_missing=Output-fil_mangler
-No_search_matches.=Ingen_s\u00f8geresultater.
-The_output_option_depends_on_a_valid_input_option.=Outputindstilling_kr\u00e6ver_en_gyldig_inputindstilling.
-Default_import_style_for_drag&drop_of_PDFs=Standard_importstil_for_tr\u00e6k&slip_af_PDFer
-Default_PDF_file_link_action=Standard_PDF_fillink-handling
-File_name_format_pattern=Filnavn-formatskabelon
-PostgreSQL_database=PostgreSQL-database
-DIN_1505=DIN_1505
-Wrong_Format=Forkert_format
-Path_to_gnuclient_or_emacsclient=Sti_til_gnuclient_eller_emacsclient
-Additional_parameters=Yderligere_parametre
-Encrypted_documents_are_not_supported=Krypterede_dokumenter_underst\u00f8ttes_ikke
-Cite_selected_entries=Referer_valgte_poster
-Cite_selected_entries_with_in-text_citation=Referer_valgte_poster_med_reference_i_teksten
-Cite_special=Specialreference
-Extra_information_(e.g._page_number)=Ekstra_information_(f.eks._sidenr.)
-Manage_citations=Administrer_referencer
-Problem_modifying_citation=Der_opstod_et_problem_med_at_\u00e6ndre_referencen
-Citation=Reference
-Context=Kontekst
-Extra_information=Ekstra_information
-Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=Kunne_ikke_udrede_BibTeX-post_for_referencen_'%0'.
-Styles=Stile
-Select_style=V\u00e6lg_stil
-This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Dette_er_listen_over_tilg\u00e6ngelige_stile._V\u00e6lg_den_du_\u00f8nsker_at_bruge.
-Journals=Tidsskrifter
-Cite=Referer
-Cite_in-text=Referer_i_teksten
-Insert_empty_citation=Inds\u00e6t_tom_reference
-Merge_citations=Sammenf\u00f8j_referencer
-Manual_connect=Manuel_tilslutning
-Select_Writer_document=V\u00e6lg_Writer-dokument
-Sync_OO_bibliography=Synkroniser_med_OO-bibliografi
-OpenOffice=OpenOffice
-Select_which_open_Writer_document_to_work_on=V\u00e6lg_hvilket_\u00e5bent_Writer-dokument_du_vil_arbejde_p\u00e5
-Connected_to_document=Forbundet_til_dokument
-Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Inds\u00e6t_en_reference_uden_tekst_(referencen_optr\u00e6der_i_referencelisten)
-Cite_selected_entries_with_extra_information=Referer_valgte_poster_med_ekstra_information
-Ensure_that_the_bibliography_is_up-to-date=S\u00f8rg_for_at_bibliografien_er_opdateret
-Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=Dit_OpenOffice-dokument_refererer_til_BibTeX-n\u00f8glen_'%0',_som_ikke_kunne_findes_i_din_aktuelle_database.
-Unable_to_synchronize_bibliography=Kunne_ikke_synkronisere_bibliografi
-Combine_pairs_of_citations_that_are_separated_by_spaces_only=Kombiner_referencepar_der_kun_er_adskilt_med_mellemrum
-Autodetection_failed=Autodetektion_fejlede
-Connecting=Tilslutter
-Please_wait...=Vent_venligst...
-Unable_to_connect=Kunne_ikke_tilslutte
-Set_connection_parameters=Ops\u00e6t_forbindelsesindstillinger
-Path_to_OpenOffice_directory=Sti_til_OpenOffice-bibliotek
-Path_to_OpenOffice_executable=Sti_til_OpenOffice-programfil
-Path_to_OpenOffice_library_dir=Sti_til_OpenOffice-biblioteksfil
-Autodetect=Autodetekter
-Connection_lost=Forbindelse_tabt
-The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Afsnitsformatet_styres_af_indstillingen_'ReferenceParagraphFormat'_eller_'ReferenceHeaderParagraphFormat'_i_stil-filen.
-The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Tegnformatet_styres_af_referenceindstillingen_'CitationCharacterFormat'_i_stil-filen.
-Automatically_sync_bibliography_when_inserting_citations=Synkroniser_automatisk_bibliografi_n\u00e5r_der_inds\u00e6ttes_referencer
-Look_up_BibTeX_entries_in_the_active_tab_only=Sl\u00e5_kun_BibTeX-poster_op_i_det_aktive_faneblad
-Look_up_BibTeX_entries_in_all_open_databases=Sl\u00e5_BibTeX-poster_op_i_alle_\u00e5bne_databaser
-Use_in-parenthesis_citation=Brug_referencer_i_parentes
-Use_in-text_citation=Brug_referencer_i_teksten
-Autodetecting_paths...=Autodetekterer_stier
-Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=Kunne_ikke_autodetektere_OpenOffice-installation._V\u00e6lg_venligst_installationsbibliotek_manuelt.
-Could_not_find_OpenOffice_installation=Kunne_ikke_finde_OpenOffice-installation
-Directories=Biblioteker
-Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Fandt_mere_end_en_OpenOffice-programfil._V\u00e6lg_venligst_hvilken_der_skal_tilsluttes_til:
-Choose_OpenOffice_executable=V\u00e6lg_OpenOffice-programfil
-Select_document=V\u00e6lg_dokument
-Edit_Group_Membership=Rediger_gruppemedlemsskab
-PostgreSQL=PostgreSQL
-Highlight_Words=Fremh\u00e6v_ord
-JSTOR_import_cancelled=JSTOR_import_afbrudt
-HTML_list=HTML-liste
-Click_group_to_toggle_membership_of_selected_entries=Klik_p\u00e5_gruppe_for_at_\u00e6ndre_medlemsskab_for_de_valgte_poster
-Use_EMACS_23_insertion_string=Brug_EMACS_23-inds\u00e6tningstekststreng
-Normalize_to_BibTeX_name_format=
-If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=
-Could_not_open_%0=Kunne_ikke_\u00e5bne_%0
-Unknown_import_format=
-Open_INSPIRE_entry=
-An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=
-Error_while_fetching_from_Inspire\:_=
-Web_search=
-Autocomplete_names=
-You_must_select_either_a_valid_style_file,_or_use_the_default_style.=
-
-Default_style=
-Choose_style_file_directly=
-Choose_from_a_directory=
-No_directory_defined_for_%0-files=
-Allow_file_links_relative_to_each_bib_file's_location=
-Style_selection=
-The_panel_below_shows_the_definition_of_the_default_style.=
-If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=
-
-Default_style_(author-year_citations)=
-Default_style_(numerical_citations)=
-No_valid_style_file_defined=
-Choose_pattern=
-Use_the_bib_file_location_as_primary_file_directory=
-Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=
-Built-in_journal_list=
-OpenOffice/LibreOffice_connection=
-You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=
-JabRef_includes_a_built-in_list_of_journal_abbreviations.=
-You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=
-You_must_select_either_a_valid_style_file,_or_use_a_default_style.=
-Show=
-
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=
-Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=
-
-This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=
-You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=
-First_select_entries_to_clean_up.=
-Cleanup_entry=
-Autogenerate_PDF_Names=
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=
-File_rename_failed_for=
-You_have_toggled_the_BibLaTeX_mode.=
-Use_full_firstname_whenever_possible=
-Use_abbreviated_firstname_whenever_possible=
-Use_abbreviated_and_full_firstname=
-Autocompletion_options=
-Autocomplete_after_following_number_of_characters=
-Name_format_used_for_autocompletion=
-Treatment_of_first_names=
-No_icon_found_for_%0=
-Cleanup_entries=
-Automatically_assign_new_entry_to_selected_groups=
-Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
-Format_content_of_month_field_to_#mon#=
-Ensure_that_page_ranges_are_of_the_form_num1--num2=
-Make_paths_of_linked_files_relative_(if_possible)=
-Rename_PDFs_to_given_file_name_format_pattern=
-Rename_only_PDFs_having_a_relative_path=
-What_would_you_like_to_clean_up?=
-Doing_a_cleanup_for_%0_entries...=
-No_entry_needed_a_clean_up=
-One_entry_needed_a_clean_up=
-%0_entries_needed_a_clean_up=
-Imported_=
-Error_importing_from_database=
-Minimize_to_system_tray=
-Incomplete_search_results=
-%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=
-
-Error_downloading_file_'%0'=
-Download_failed=
-%0_databases_will_be_imported=
-Importing_cancelled=
-There_are_no_available_databases_to_be_imported=
-Import_from_SQL_database=
-Imported_%0_databases_successfully=
-<_CREATE_NEW_DATABASE_>=
-Remove_Selected=
-SQL_Database_Exporter=
-Select_target_SQL_database\:=
-SQL_Database_Importer=
-Please_select_which_JabRef_databases_do_you_want_to_import\:=
-
-Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
-Attach_file=
-
-Setting_all_preferences_to_default_values.=
-Resetting_preference_key_'%0'=
-Unknown_preference_key_'%0'=
-Unable_to_clear_preferences.=
-
-Reset_preferences_(key1,key2,..._or_'all')=
-Find_unlinked_files=
-Select_All=
-Unselect_All=
-Expand_All=
-Collapse_All=
-Select_Directory=
-Choose_Directory=
-Use_the_selected_directory_to_start_with_the_search.=
-Browse...=
-Opens_the_file_browser.=
-Scan_directory=
-Searches_the_selected_directory_for_unlinked_files.=
-Starts_the_import_of_bibtex_entries.=
-Leave_this_dialog.=
-Create_directory_based_keywords=
-Creates_keywords_in_created_entrys_with_directory_pathnames=
-Select_a_directory_where_the_search_shall_start.=
-Select_file_type\:=
-These_files_are_not_linked_in_the_active_database.=
-Entry_type_to_be_created\:=
-Searching_file_system...=
-Importing_into_Database...=
-Select_directory=
-Select_files=
-Bibtex_entry_creation=
-<No_selection>=
-Push_selection_to_TeXstudio=
-Path_to_TeXstudio=
-Program_'%0'_not_found=
-Pushed_citations_to_TeXstudio=
-Unable_to_connect_to_freecite_online_service.=
-Parse_with_FreeCite=
-Insert_selected_citations_into_TeXstudio=
-The_current_BibTeX_key_will_be_overwritten._Continue?=
-Overwrite_key=
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
-Bibtex_key_patterns=
-Changed_special_field_settings=
-Clear_priority=
-Clear_rank=
-Compact_rank=
-Convert_1st,_2nd,_..._to_real_superscripts=
-Dropped_comment_from_database=
-Enable_PDF_preview=
-Enable_special_fields=
-Five_stars=
-Four_stars=
-Help_on_special_fields=
-Keywords_of_selected_entries=
-Manage_content_selectors=
-Manage_keywords=
-Marked_entries'_quality_as_good=
-Marked_entries_as_relevant=
-No_priority_information=
-No_rank_information=
-One_star=
-Priority=
-Priority_high=
-Priority_low=
-Priority_medium=
-Quality=
-Rank=
-Relevance=
-Set_priority=
-Set_priority_to_high=
-Set_priority_to_low=
-Set_priority_to_medium=
-Set_rank_to_five_stars=
-Set_rank_to_four_stars=
-Set_rank_to_one_star=
-Set_rank_to_three_stars=
-Set_rank_to_two_stars=
-Show_one_letter_heading_for_icon_columns=
-Show_priority=
-Show_quality=
-Show_rank=
-Show_relevance=
-Synchronize_with_keywords=
-Synchronized_special_fields_based_on_keywords=
-Three_stars=
-Toggle_relevance=
-Toogle_quality_assured=
-Two_stars=
-Update_keywords=
-Write_values_of_special_fields_as_separate_fields_to_BibTeX=
-You_have_changed_settings_for_special_fields.=
-no_preview_available=
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
-A_string_with_that_label_already_exists=
-Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
-Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
-Created_group_"%0".=
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
-If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
-Import_Metadata_From_PDF=
-Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
-Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
-Removed_all_subgroups_of_group_"%0".=
-To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
-Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
-Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
-Use_the_following_delimiter_character(s)\:=
-When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
-Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-
-Error_fetching_from_Google_Scholar=
-Run_HTML_converter_on_title=
-Searching...=
-You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
-Confirm_selection=
-Unknown_DOI\:_'%0'.=
-Get_BibTeX_entry_from_DOI=
-Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
-Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
-Import_conversions=
-Run_filter_on_title_keeping_the_case_of_selected_words=
-Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
-Please_enter_a_search_string=
-Please_open_or_start_a_new_database_before_searching=
-An_Error_occurred_while_fetching_from_ADS_(%0)\:=
-Error_while_fetching_from_ADS=
-Error_while_fetching_from_OAI2=
-An_Error_occurred_while_parsing_abstract=
-Unknown_DiVA_entry\:_'%0'.=
-Get_BibTeX_entry_from_DiVA=
-Log=
-Remove_unneccessary_$,_{,_and_}=
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+%0_contains_the_Regular_Expression_<b>%1</b>=%0_indeholder_regul\u00e6rudtrykket_<b>%1</b>
+%0_contains_the_term_<b>%1</b>=%0_indeholder_udtrykket_<b>%1</b>
+%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_indeholder_ikke_regul\u00e6rudtrykket_<b>%1</b>
+%0_doesn't_contain_the_term_<b>%1</b>=%0_indeholder_ikke_udtrykket_<b>%1</b>
+%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_matcher_ikke_regul\u00e6rudtrykket_<b>%1</b>
+%0_doesn't_match_the_term_<b>%1</b>=%0_matcher_ikke_udtrykket_<b>%1</b>
+%0_export_successful=%0-eksport_lykkedes
+%0_field_set=%0-felt_sat
+%0_matches_the_Regular_Expression_<b>%1</b>=%0_matcher_regul\u00e6rudtrykket_<b>%1</b>
+%0_matches_the_term_<b>%1</b>=%0_matcher_udtrykket_<b>%1</b>
+<field_name>=<feltnavn>
+<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Kunne_ikke_finde_filen_'%0'<BR>linket_til_fra_posten_'%1'</HTML>
+<no_field>=<ingen_felter>
+<select>=<v\u00e6lg>
+<select_word>=<v\u00e6lg_ord>
+A_string_with_this_label_already_exists=Der_findes_allerede_en_streng_med_dette_navn
+Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Forkort_tidsskriftsnavn_for_de_valgte_poster_(ISO-forkortelse)
+Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Forkort_tidsskriftsnavn_for_de_valgte_poster_(MEDLINE-forkortelse)
+Abbreviate_names=Forkort_navn
+Abbreviated_%0_journal_names.=Fortkortet_%0_tidsskriftsnavn.
+Abbreviation=Forkortelse
+About_JabRef=Om_JabRef
+Abstract=Sammendrag
+Accept=Accepter
+Accept_change=Accepter_\u00e6ndring
+Action=Handling
+Add=Tilf\u00f8j
+Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Tilf\u00f8j_en_(kompileret)_egendefineret_ImportFormat-klasse_fra_en_classpath._\nStien_beh\u00f8ver_ikke_at_v\u00e6re_p\u00e5_JabRefs_classpath.
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Tilf\u00f8j_en_kompileret_ImportFormat-klasse_fra_en_ZIP-fil._ZIP-filen_beh\u00f8ver_ikke_at_v\u00e6re_i_din_classpath.
+add_entries_to_group=tilf\u00f8j_poster_til_gruppe
+Add_entry_selection_to_this_group=F\u00f8j_valgte_poster_til_denne_gruppe
+Add_from_folder=Tilf\u00f8j_fra_mappe
+Add_from_jar=Tilf\u00f8j_fra_jar-fil
+add_group=tilf\u00f8j_gruppe
+Add_Group=Tilf\u00f8j_gruppe
+Add_new=Tilf\u00f8j_ny
+Add_Subgroup=Tilf\u00f8j_undergruppe
+Add_to_group=Tilf\u00f8j_i_gruppe
+Added_group_"%0".=Tilf\u00f8jede_gruppe_"%0".
+Added_new=Tilf\u00f8jede_ny
+Added_string=Tilf\u00f8jede_streng
+Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Desuden,_poster_hvis_<b>%0</b>-felt_ikke_indeholder_<b>%1</b>_kan_f\u00 [...]
+Advanced=Avanceret
+All_custom_file_types_will_be_lost._Proceed?=Alle_egendefinerede_filtyper_vil_blive_slettet._Forts\u00e6t?
+All_Entries=Alle_poster
+All_entries=Alle_poster
+All_entries_of_this_type_will_be_declared_typeless._Continue?=Alle_posterne_af_denne_type_vil_blive_klassificeret_som_typel\u00f8se._Forts\u00e6t?
+All_fields=Alle_felter
+All_subgroups_(recursively)=Alle_undergrupper_(rekursivt)
+Allow_editing_in_table_cells=Tillad_redigering_af_celler_i_tabellen
+An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=En_fejl_opstod_ved_hentning_fra_OIA2-kilde_(%0):
+An_Exception_ocurred_while_accessing_'%0'=En_fejl_opstod_ved_l\u00e6sning_af_'%0'
+An_SAXException_ocurred_while_parsing_'%0'\:=En_SAXException_forekom_ved_l\u00e6sning_af_'%0':
+and=og
+and_inside_the_JabRef-jar\:=og_i_JabRef-jar\:
+and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=og_klassen_skal_v\u00e6re_tilg\u00e6ngelig_i_CLASSPATH_n\u00e6ste_gang,_du_starter_JabRef.
+any_field_that_matches_the_regular_expression_<b>%0</b>=ethvert_felt_som_matcher_regul\u00e6rudtrykket_<b>%0</b>
+Appearance=Udseende
+Append=Tilf\u00f8j
+Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Tilf\u00f8j_indhold_fra_en_BibTeX-database_i_den_\u00e5bne_database
+Append_database=F\u00f8j_til_database
+append_the_selected_text_to_bibtex_key=tilf\u00f8j_den_valgte_tekst_til_BibTeX-n\u00f8glen
+Application=Applikation
+Apply=Udf\u00f8r
+Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argumenterne_sendt_til_allerede_aktiv_JabRef-instans._Afslutter.
+Assign_entry_selection_exclusively_to_this_group=F\u00f8j_valgte_poster_eksklusivt_til_denne_gruppe
+Assign_new_file=Tildel_ny_fil
+Assign_the_original_group's_entries_to_this_group?=F\u00f8j_den_oprindelige_gruppes_poster_til_denne_gruppe?
+Assigned_%0_entries_to_group_"%1".=Tilf\u00f8jede_%0_poster_til_gruppen_"%1".
+Assigned_1_entry_to_group_"%0".=Tilf\u00f8jede_1_post_til_gruppen_"%0".
+At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=Plug-in'en_'net.sf.jabref.core'_skal_v\u00e6re_tilstede.
+Attach_%0_file=Tilf\u00f8j_%0-fil
+Attach_URL=Tilf\u00f8j_URL
+Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Fors\u00f8g_at_s\u00e6tte_%0-link_automatisk_for_dine_poster._Dette_virker,_hvis_en_%0-fil_i_dit_%0-bibliotek_eller_et_underbibliotek<BR>har_navn_lignende_en_posts_BibTeX-n\u00f8gle,_plus_efternavn.
+Attempting_SQL_export...=Fors\u00f8ger_SQL-eksport...
+Auto=Auto
+Autodetect_format=Autodetekter_format
+Autogenerate_BibTeX_key=Autogenerer_BibTeX-n\u00f8gle
+Autogenerate_BibTeX_keys=Autogenerer_BibTeX-n\u00f8gler
+Autogenerate_groups=Autogenerer_grupper
+autogenerate_keys=autogenerer_n\u00f8gler
+
+Autolink_files_with_names_starting_with_the_BibTeX_key=Autolink_filer_med_navn_som_starter_med_BibTeX-n\u00f8glen
+Autolink_only_files_that_match_the_BibTeX_key=Autolink_kun_filer_med_navn_som_svarer_til_BibTeX-n\u00f8glen
+Automatically_create_groups=Generer_grupper_automatisk
+Automatically_create_groups_for_database.=Generer_grupper_for_databasen.
+Automatically_created_groups=Genererede_grupper_automatisk
+Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Skjul_automatisk_grupperingspanel_n\u00e5r_du_skifter_til_en_database,_som_ikke_indeholder_grupper
+
+Automatically_remove_exact_duplicates=Fjern_eksakte_dubletter_automatisk
+Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Vis_automatisk_grupperingspanel_n\u00e5r_du_skifter_til_en_database,_som_indeholder_grupper
+Autoset=S\u00e6t_automatisk
+Autoset_%0_field=Automatisk_udfyldning_af_%0-felt
+Autoset_%0_links._Allow_overwriting_existing_links.=S\u00e6t_%0-links_automatisk._Tillad_overskrivning_af_eksisterende_links.
+Autoset_%0_links._Do_not_overwrite_existing_links.=S\u00e6t_%0-links_automatisk._Overskriv_ikke_eksisterende_links.
+Autoset_external_links=S\u00e6t_links_automatisk
+Autosetting_links=S\u00e6tter_links_automatisk
+AUX_file_import=AUX-fil_import
+Available_export_formats=Tilg\u00e6ngelige_eksportformater
+Available_fields=Tilg\u00e6ngelige_felter
+Available_import_formats=Tilg\u00e6ngelige_importformater
+Background_color_for_optional_fields=Baggrundsfarve_for_valgfrie_felter
+Background_color_for_required_fields=Baggrundsfarve_for_obligatoriske_felter
+Backup_old_file_when_saving=Lav_sikkerhedskopi_ved_gemning
+Beta_version=Betaversion
+Bibkey_to_filename_conversion=Konvertering_af_BibTeX-n\u00f8gle_til_filnavn
+BibTeX_key=BibTeX-n\u00f8gle
+BibTeX_key_is_unique.=BibTeX-n\u00f8glen_er_unik
+BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX-n\u00f8gle_er_ikke_sat._Angiv_et_navn_for_den_hentede_file
+BibTeX_source=BibTeX-kilde
+BibTeXML=BibTeXML
+Binding=Genvejstast
+Broken_link=Ugyldigt_link
+Browse=Gennemse
+by=med
+Calling_external_viewer...=Kalder_eksternt_program...
+Cancel=Annuller
+Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Kan_ikke_f\u00f8je_poster_til_en_gruppe_uden_at_generere_n\u00f8gler._Vil_du_generere_n\u00f8gler_nu?
+Cannot_merge_this_change=Kan_ikke_inkorporere_denne_\u00e6ndring
+Cannot_move_group_"%0"_down.=Kan_ikke_flytte_gruppen_"%0"_ned.
+Cannot_move_group_"%0"_left.=Kan_ikke_flytte_gruppen_"%0"_til_venstre.
+Cannot_move_group_"%0"_right.=Kan_ikke_flytte_gruppen_"%0"_til_h\u00f8jre.
+Cannot_move_group_"%0"_up.=Kan_ikke_flytte_gruppen_"%0"_op.
+case_insensitive=skelner_ikke_mellem_store_og_sm\u00e5_bogstaver
+case_sensitive=skelner_mellem_store_og_sm\u00e5_bogstaver
+Case_sensitive=Skeln_mellem_store_og_sm\u00e5_bogstaver
+change_assignment_of_entries=\u00e6ndre_tildeling_af_poster
+Change_case=\u00c6ndre_store/sm\u00e5_bogstaver
+Change_entry_type=\u00c6ndre_posttype
+
+Change_file_type=\u00c6ndre_filtype
+change_key=\u00e6ndre_n\u00f8gle
+Change_of_Grouping_Method=\u00c6ndre_grupperingsmetode
+change_preamble=\u00c6ndre_pr\u00e6ambel
+change_string_content=\u00e6ndre_strengdefinition
+change_string_name=\u00e6ndre_navn_p\u00e5_streng
+Change_table_column_and_General_fields_settings_to_use_the_new_feature=\u00c6ndre_ops\u00e6tning_for_tabelkollonner_og_generelle_felter_for_anvende_den_nye_funktion
+change_type=\u00e6ndre_type
+changed_=\u00e6ndret_
+Changed_font_settings=\u00e6ndrede_skrifttypeindstillinger
+Changed_language_settings=\u00c6ndrede_sprogindstillinger
+Changed_look_and_feel_settings=\u00c6ndrede_brugerfladeindstillinger
+Changed_preamble=\u00c6ndrede_pr\u00e6ambel
+Changed_type_to=\u00c6ndrede_type_til
+Characters_to_ignore=Ignorer_f\u00f8lgende_tegn
+Check_existing_%0_links=Tjek_eksisterende_%0-links
+Check_links=Tjek_eksterne_links
+Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=V\u00e6lg_URL_som_skal_hentes._Den_forh\u00e5ndsvalgte_adresse_henviser_til_en_liste_gjort_tilg\u00e6ngelig_af_JabRef-udviklerne.
+Cite_command=Citations-kommando
+Class_name=Klassenavn
+Clear=Ryd
+clear_all_groups=fjern_alle_grupper
+Clear_field=Ryd_felt
+
+Clear_fields=Ryd_felter
+Clear_highlight=Ryd_fremh\u00e6vning
+Close=Luk
+Close_dialog=Luk_dialog
+Close_the_current_database=Luk_denne_database
+Close_the_help_window=Luk_hj\u00e6lp-vinduet
+Close_window=Luk_vindue
+Closed_database=Lukkede_database
+Collapse_subtree=Luk_forgrening
+Color_codes_for_required_and_optional_fields=Farvekoder_for_n\u00f8dvendige_og_valgfrie_felter
+Color_for_marking_incomplete_entries=Farve_til_markering_af_ufuldst\u00e6ndige_poster
+Column_width=Kolonnebredde
+Command_line_id=Kommandolinje-id
+Complete_record=Komplet_post
+Connect=Tilslut
+Connect_to_SQL_database=Tilslut_til_SQL-database
+Connect_to_SQL_Database=Tilslut_til_SQL-Database
+Connection_to_IEEEXplore_failed=Tilslutning_til_IEEExplore_mislykkedes
+Contained_in=Indeholdt_i
+Content=Indhold
+Copied=Kopierede
+Copied_cell_contents=Kopierede_indhold_af_cellen
+Copied_key=Kopierede_n\u00f8gle
+Copied_keys=Kopierede_n\u00f8gler
+Copy=Kopier
+Copy_BibTeX_key=Kopier_BibTeX-n\u00f8gle
+Copy_file_to_file_directory.=Kopier_fil_til_filbibliotek.
+Copy_files_to_file_directory.=Kopier_filer_til_filbibliotek.
+
+Copy_to_clipboard=Kopier_til_udklipsholder
+Could_not_call_executable=Kunne_ikke_kalde_programfilen
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Kunne_ikke_kontakte_en_igangv\u00e6rende_gnuserv-proces._Kontroller_at_Emacs_eller_XEmacs_k\u00f8rer<BR>og_at_serveren_er_startet_(med_kommandoen_'gnuserv-start').
+Could_not_connect_to_host_=Kunne_ikke_forbinde_til_v\u00e6rt_
+Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Kunne_ikke_forbinde_til_Vim-server._Tjek_at_Vim_kj\u00f8rer<BR>med_korrekt_servernavn.
+Could_not_export_file=Kunne_ikke_eksportere
+Could_not_export_preferences=Kunne_ikke_eksportere_indstillinger
+# I have reformulated the following lines, because the 1st person form is not suitable:
+Could_not_find_a_suitable_import_format.=Fandt_ikke_noget_passende_importformat.
+
+Could_not_find_directory_for_%0-files\:_%1=Kunne_ikke_finde_bibliotek_til_%0-filer:_%1
+Could_not_find_image_file=Kunne_ikke_finde_billede
+Could_not_find_layout_file=Fandt_ikke_layoutfil
+Could_not_import_preferences=Kunne_ikke_importere_indstillinger
+Could_not_instantiate_%0=Kunne_ikke_instantiere_%0
+Could_not_instantiate_%0_%1=Kunne_ikke_instantiere_%0_%1
+
+Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Kunne_ikke_instantiere_%0._Har_du_valgt_korrekt_pakke-sti?
+
+Could_not_open_link=Kunne_ikke_\u00e5bne_link
+Could_not_parse_number_of_hits=Kunne_ikke_tolke_antal_af_match
+Could_not_print_preview=Kunne_ikke_printe_forh\u00e5ndsvisning
+Could_not_run_the_'vim'_program.=Kunne_ikke_k\u00f8re_'vim'-programmet
+Could_not_save_file=Kunne_ikke_gemme_fil
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Kunne_ikke_gemme_fil._Tegnkodingen_'%0'_er_ikke_underst\u00f8ttet.
+Create_group=Opret_gruppe
+Created_groups.=Oprettede_grupper.
+
+crossreferenced_entries_included=refererede_poster_inkluderet
+Current_content=Nuv\u00e6rende_indhold
+Current_value=Nuv\u00e6rende_v\u00e6rdi
+Custom_entry_types=Brugerdefinerede_posttyper
+Custom_entry_types_found_in_file=Fandt_brugerdefinerede_posttyper_i_filen
+Custom_icon_theme=Brugerdefineret_ikons\u00e6t
+Custom_icon_theme_file=Ikons\u00e6t-fil
+Custom_importers=Brugerdefinerede_importformater
+Customize_entry_types=Tilpas_posttyper
+Customize_key_bindings=Ops\u00e6tning_af_genvejstaster
+Cut=Klip
+cut_entries=klippede_poster
+cut_entry=klip_post
+Cut_pr=Klippede
+Database_\:=Database:
+Database_encoding=Tegnkoding_for_database
+Database_has_changed._Do_you_want_to_save_before_closing?=Databasen_er_\u00e6ndret._Vil_du_gemme,_f\u00f8r_du_lukker_den?
+Database_properties=Databaseegenskaber
+Date_format=Datoformat
+Default=Standard
+Default_encoding=Standard_kodning
+Default_grouping_field=Standardfelt_for_gruppering
+Default_look_and_feel=Standard-udseende
+Default_pattern=Standardm\u00f8nster
+Default_sort_criteria=Standard_sorteringskriterier
+Define_'%0'=Definer_'%0'
+Delete=Slet
+Delete_custom_format=Slet_brugerdefineret_type
+delete_entries=slet_poster
+Delete_entry=Slet_post
+delete_entry=slet_post
+Delete_multiple_entries=Slet_flere_poster
+Delete_rows=Slet_r\u00e6kker
+Delete_strings=Slet_strenge
+Deleted=Slettet
+Delimit_fields_with_semicolon,_ex.=Afgr\u00e6ns_felter_med_semikolon,_f.eks.
+Descending=Faldende
+Description=Beskrivelse
+Deselect_all=V\u00e6lg_ingen
+Deselect_all_duplicates=Frav\u00e6lg_alle_dubletter
+Details=Detaljer
+Disable_entry_editor_when_multiple_entries_are_selected=Deaktiver_postredigering_n\u00e5r_flere_poster_er_valgt
+Disable_this_confirmation_dialog=Deaktiver_denne_kontroldialog
+Disable_this_warning_dialog=Deaktiver_denne_advarselsdialog
+Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Vis_alle_poster_indeholdt_i_mindst_en_af_de_valgte_grupper.
+Display_all_error_messages=Vis_alle_fejlmeddelelser
+Display_help_on_command_line_options=Vis_kommandolinjehj\u00e6lp
+Display_imported_entries_in_an_inspection_window_before_they_are_added.=Vis_importerede_poster_i_et_inspektionsvindue_f\u00f8r_de_tilf\u00f8jes.
+Display_only_entries_belonging_to_all_selected_groups.=Vis_kun_poster_indeholdt_i_alle_valgte_grupper.
+
+Display_version=Vis_versionsnummer
+Displaying_no_groups=Viser_ingen_grupper
+Do_not_abbreviate_names=Forkort_ikke_navn
+Do_not_autoset=S\u00e6t_ikke_links_automatisk
+Do_not_import_entry=Importer_ikke_post
+Do_not_open_any_files_at_startup=\u00c5bn_ingen_filer_ved_opstart
+Do_not_overwrite_existing_keys=Overskriv_ikke_eksisterende_n\u00f8gler
+Do_not_show_splash_window_at_startup=Vis_ikke_JabRef-opstartsvindue
+Do_not_show_these_options_in_the_future=Vis_ikke_disse_valg_igen
+Do_not_wrap_the_following_fields_when_saving=Introducer_ikke_linjeskift_i_f\u00f8lgende_felter_ved_gemning
+Do_not_write_the_following_fields_to_XMP_Metadata\:=Skriv_ikke_f\u00f8lgende_felter_til_XMP-metadata:
+
+Do_you_want_JabRef_to_do_the_following_operations?=Skal_JabRef_udf\u00f8re_de_f\u00f8lgende_operationer?
+DocBook=DocBook
+Down=Ned
+Download=Download
+Download_completed=Download_fuldf\u00f8rt
+Download_file=Download_fil
+Downloading...=Downloader...
+
+Drag_and_Drop_Error=Fejl_ved_tr\u00e6k-og-slip
+Drop_%0=Slip_%0
+duplicate_BibTeX_key=dubleret_BibTeX-n\u00f8gle
+Duplicate_BibTeX_key.=Dubleret_BibTeX-n\u00f8gle.
+Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=BibTeX-n\u00f8glen_er_ikke_unik._Gruppering_kan_fejle_for_denne_post.
+Duplicate_Key_Warning=Advarsel:_Ikke-unik_n\u00f8gle
+Duplicate_pairs_found=Dubletpar_fundet
+duplicate_removal=fjernelse_af_dubletter
+Duplicate_string_name=Ikke-unikt_navn_p\u00e5_streng
+Duplicates_found=Dubletter_fundet
+Duplicates_removed=Dubletter_fjernet
+Dynamic_groups=Dynamiske_grupper
+Dynamically_group_entries_by_a_free-form_search_expression=Grupper_poster_dynamisk_ved_hj\u00e6lp_af_et_standard_s\u00f8geudtryk
+Dynamically_group_entries_by_searching_a_field_for_a_keyword=Grupper_poster_dynamisk_ved_at_s\u00f8ge_efter_n\u00f8gleord_i_et_felt
+Each_line_must_be_on_the_following_form=Hver_linje_skal_v\u00e6re_p\u00e5_f\u00f8lgende_form
+Edit=Rediger
+Edit_custom_export=Rediger_eksternt_eksportfilter
+Edit_entry=Rediger_post
+Edit_file_link=Rediger_link
+Edit_file_type=Rediger_filtype
+Edit_group=Rediger_gruppe
+Edit_journal=Rediger_journal
+Edit_preamble=Rediger_pr\u00e6ambel
+Edit_strings=Rediger_tekststrenge
+Editor_options=Alternativer_for_redigering
+empty_BibTeX_key=tom_BibTeX-n\u00f8gle
+Empty_BibTeX_key.=Tom_BibTeX-n\u00f8gle
+Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Tom_BibTeX-n\u00f8gle._Gruppering_kan_fejle_for_denne_post.
+empty_database=tom_database
+Enable_source_editing=Tillad_redigering_af_kildekode
+Enable_word/name_autocompletion=Aktiver_autokomplettering_af_navn/ord
+Endnote=Endnote
+Enter_URL=Skriv_URL
+Enter_URL_to_download=Skriv_URL_som_skal_hentes
+entries=poster
+Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Poster_kan_ikke_manuelt_tilf\u00f8jes_eller_fjernes_fra_denne_gruppe.
+Entries_exported_to_clipboard=Poster_eksporteret_til_udklipsholder
+entries_have_undefined_BibTeX_key=poster_har_udefineret_BibTeX-n\u00f8gle
+entries_into_new_database=poster_i_ny_database
+entry=post
+Entry_editor=Postredigering
+
+Entry_in_current_database=Post_i_aktuelle_database
+Entry_in_import=Post_i_import
+Entry_preview=Forh\u00e5ndsvisning
+Entry_table=Hovedtabel
+Entry_table_columns=Tabelkolonner
+Entry_type=Posttype
+Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Navn_p\u00e5_typer_kan_ikke_indeholde_mellemrum_eller_nogle_af_f\u00f8lgende_tegn
+Entry_types=Posttyper
+Error=Fejl
+Error\:_=Fejl:_
+
+Error_converting_Bibtex_to_XMP\:_%0=Fejl_ved_konvertering_af_BibTeX_til_XMP:_%0
+Error_converting_XMP_to_'%0'...=Fejl_ved_konvertering_af_XMP_for_'%0'...
+Error_exporting_to_clipboard=Fejl_ved_eksport_til_udklipsholder
+Error_in_field=Fejl_i_felt
+Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Fejl_ved_opstart_af_plugin-system._Starter_uden_-_funktionalitet_mangler_m\u00e5ske.
+Error_occured_when_parsing_entry=En_fejl_opstod_ved_l\u00e6sning_af_post
+Error_opening_file=Fejl_ved_\u00e5bning_af_fil
+Error_setting_field=Problem_med_at_s\u00e6tte_felt
+Error_while_converting_BibtexEntry_to_XMP_%0=Fejl_ved_konvertering_af_BibTeX-posten_til_XMP_%0
+Error_while_downloading_file\:=Fejl_under_hentning_af_fil:
+Error_while_fetching_from_OIA2=Fejl_ved_hentning_fra_OIA2
+Error_while_writing=En_fejl_opstod_ved_skrivning
+
+Error_writing_to_%0_file(s).=Fejl_ved_skrivning_til_%0_fil(er).
+Error_writing_XMP_to_file\:_%0=Fejl_ved_skrivning_af_XMP_til_filen_'%0'
+
+Establishing_SQL_connection...=Etablerer_SQL-forbindelse...
+Exceptions=Fejlinformation
+Existing_file=Eksisterende_fil
+exists._Overwrite_file?=eksisterer._Erstat_filen?
+exists._Overwrite?=eksisterer._Overskriv?
+Expand_subtree=\u00c5bn_forgrening
+Export=Eksporter
+Export_name=Navn_p\u00e5_filter
+Export_preferences=Eksporter_indstillinger
+Export_preferences_to_file=Eksporter_indstillinger_til_fil
+Export_properties=Egenskaber_for_eksportfilter
+Export_to_clipboard=Eksporter_til_udklipsholder
+Export_to_SQL_database=Eksporter_til_SQL-database
+Exporting=Eksporterer
+Extension=Efternavn
+External_changes=Eksterne_\u00e6ndringer
+
+External_file_links=Eksterne_links
+External_files=Eksterne_filer
+External_programs=Eksterne_programmer
+External_viewer_called=Eksternt_program_kaldt
+Failed_to_read_groups_data_(unsupported_version\:_%0)=Kunne_ikke_l\u00e6se_gruppedata_(ikke-underst\u00f8ttet_version:_%0)
+Fetch=Hent
+Field=Felt
+field=felt
+# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
+Field_content=Indhold_i_felt
+Field_name=Feltnavn
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Feltnavn_kan_ikke_indeholde_mellemrum_eller_f\u00f8lgende_tegn
+Field_sizes=Feltst\u00f8rrelser
+
+Field_to_filter=Felt_som_skal_filtreres
+Field_to_group_by=Grupperingsfelt
+Fields=Felter
+File=Fil
+file=fil
+
+File_'%0'_is_already_open.=Filen_'%0'_er_allerede_\u00e5ben.
+File_'%0'_not_found=Filen_'%0'_ikke_fundet
+File_changed=Fil_\u00e6ndret
+File_directory_is_'%0'\:=Filbiblioteket_er_'%0':
+
+File_directory_is_not_set_or_does_not_exist!=Filbiblioteket_er_ikke_sat_eller_eksisterer_ikke!
+
+File_download=Filhentning
+File_exists=Filen_eksisterer
+File_extension=Efternavn_p\u00e5_filer
+
+File_has_been_updated_externally._What_do_you_want_to_do?=Filen_er_blevet_\u00e6ndret_eksternt._Hvad_vil_du_g\u00f8re?
+File_not_found=Fil_ikke_fundet
+File_type=Filtype
+File_updated_externally=Filen_er_blevet_\u00e6ndret_eksternt
+filename=filnavn
+Files_opened=Filer_\u00e5bnet
+
+Filter=Filter
+
+Finished_autosetting_external_links.=Fuldf\u00f8rte_automatisk_udfyldning_af_eksterne_links.
+Finished_synchronizing_%0_links._Entries_changed%c_%1.=Fuldf\u00f8rte_synkronisering_af_%0-links._Poster_\u00e6ndret%c_%1.
+Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Fuldf\u00f8rte_skrivning_af_XMP-metadata._Skrev_til_%0_fil(er).
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Fuldf\u00f8rte_skrivning_af_XMP_for_%0-fil_(sprang_over_%1,_%2_fejl).
+First_select_the_entries_you_want_keys_to_be_generated_for.=V\u00e6lg_f\u00f8rst_hvilke_poster_du_vil_generere_n\u00f8gler_for.
+Fit_table_horizontally_on_screen=Tilpas_tabelbredden_horisontalt
+Float=Flyt
+Float_marked_entries=Sorter_m\u00e6rkede_poster_\u00f8verst
+Font_Family=Skrifttype-familie
+Font_Preview=Skrifttype-forh\u00e5ndsvisning
+Font_Size=Skriftst\u00f8rrelse
+Font_Style=Skrifttype-stil
+FontSelector=Skrifttypev\u00e6lger
+for=for
+Format_of_author_and_editor_names=Formattering_af_forfatter-_og_redakt\u00f8rnavn
+Format_String=Formatstreng
+Format_used=Format_brugt
+Formatter_Name=Navn_p\u00e5_formatering
+Formatter_not_found=Ukendt_formatering
+found=fundet
+Found_%0_plugin(s)=%0_plugin(s)_fundet
+found_in_aux_file=fundet_i_aux-fil
+Full_name=Fuldt_navn
+General=Generelt
+General_fields=Generelle_felter
+Generate=Generer
+Generate_BibTeX_key=Generer_BibTeX-n\u00f8gle
+Generate_keys=Generer_n\u00f8gler
+Generate_keys_before_saving_(for_entries_without_a_key)=Generer_n\u00f8gler_f\u00f8r_gemning_(for_poster_uden_n\u00f8gle)
+
+Generate_keys_for_imported_entries=Generer_automatisk_n\u00f8gler_for_importerede_poster
+Generate_now=Generer_nu
+Generated_BibTeX_key_for=Genererede_BibTeX-n\u00f8gle_for
+Generating_BibTeX_key_for=Genererer_BibTeX-n\u00f8gle_for
+Grab=Fang_genvejstast
+Gray_out_entries_not_in_group_selection=Skraver_poster_udenfor_valgte_grupper
+Gray_out_non-hits=Skraver_ikke-tr\u00e6ffere
+Gray_out_non-matching_entries=Skraver_ikke-tr\u00e6ffere
+Group_properties=Gruppeegenskaber
+
+grouping_may_not_work_for_this_entry=gruppering_kan_fejle_for_denne_post
+Groups=Gruppering
+Harvard_RTF=Harvard_RTF
+Have_you_chosen_the_correct_package_path?=Har_du_valgt_korrekt_pakke-sti?
+Help=Hj\u00e6lp
+
+Help_contents=Oversigt_over_hj\u00e6lpefiler
+Help_on_groups=Hj\u00e6lp_om_grupper
+Help_on_key_patterns=Hj\u00e6lp_om_n\u00f8glegenerering
+Help_on_Preview_Settings=Hj\u00e6lp_om_indstillinger_for_forh\u00e5ndsvisning
+Help_on_Regular_Expression_Search=Hj\u00e6lp_om_s\u00f8gning_med_regul\u00e6re_udtryk
+Hide_non-hits=Skjul_ikke-tr\u00e6ffere
+Hide_non-matching_entries=Skjul_ikke-tr\u00e6ffende_poster
+
+Hierarchical_context=Gruppehierarki
+Highlight=Fremh\u00e6v
+Highlight_groups_matching_all_selected_entries=Fremh\u00e6v_grupper_som_indeholder_alle_valgte_poster
+Highlight_groups_matching_any_selected_entry=Fremh\u00e6v_grupper_som_indeholder_mindst_en_af_de_valgte_poster
+Highlight_overlapping_groups=Fremh\u00e6v_overlappende_grupper
+Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Hint%c_For_kun_at_s\u00f8ge_i_specifikke_felter,_skriv_f.eks.%c<p><tt>author%esmith_and_title%eelectrical</tt>
+HTML=HTML
+
+HTML_table=HTML-tabel
+HTML_table_(with_Abstract_&_BibTeX)=HTML-tabell_(med_Abstract_&_BibTeX)
+Icon=Ikon
+Ignore=Ignorer
+Immediate_subgroups=N\u00e6rmeste_undergrupper
+Import=Importer
+Import_and_keep_old_entry=Importer_og_behold_den_gamle_post
+Import_and_remove_old_entry=Importer_og_fjern_den_gamle_post
+Import_entries=Importer_poster
+Import_failed=Import_mislykkedes
+Import_file=Importer_fil
+Import_group_definitions=Importer_gruppedefinitioner
+Import_name=Navn_p\u00e5_import
+Import_preferences=Importer_indstillinger
+Import_preferences_from_file=Importer_indstillinger_fra_fil
+Import_strings=Importer_strenge
+Import_to_open_tab=Importer_til_\u00e5bent_faneblad
+Import_word_selector_definitions=Importer_definitioner_for_hurtigv\u00e6lgere
+Imported_database=Importerede_database
+Imported_entries=Importerede_poster
+Imported_from_database=Importerede_fra_databasen
+ImportFormat_class=ImportFormat-klasse
+Importing=Importerer
+Importing_in_unknown_format=Importerer_ukendt_format
+In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=I_JabRef_bruges_#-tegn_parvis_for_at_indikere_strenge.
+Include_abstracts=Inkluder_abstracts
+Include_entries=Inkluder_poster
+Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Inkluder_undergrupper:_Vis_poster_indeholdt_i_denne_gruppe_eller_en_undergruppe
+Incremental=Inkrementel
+Incremental_search=Inkrementel_s\u00f8gning
+Incremental_search_failed._Repeat_to_search_from_top.=Inkrementel_s\u00f8gning_fejlede._Gentag_s\u00f8gning_fra_toppen.
+Independent_group\:_When_selected,_view_only_this_group's_entries=Uafh\u00e6ngig_gruppe:_Vis_kun_denne_gruppes_poster
+Initially_show_groups_tree_expanded=Vis_gruppetr\u00e6et_ekspanderet_som_udgangspunkt
+Input=Input
+Input_error=Inputfejl
+Insert=Tilf\u00f8j
+Insert_rows=Tilf\u00f8j_r\u00e6kker
+Insert_selected_citations_into_LyX/Kile=Send_valgte_poster_til_LyX/Kile
+Insert_selected_citations_into_WinEdt=Send_valgte_poster_til_WinEdt
+insert_string_=inds\u00e6t_streng_
+Insert_URL=Inds\u00e6t_URL
+integrity=integritet
+Integrity_check=Integritetstjek
+Intersection=F\u00e6llesm\u00e6nge
+Invalid_BibTeX_key=Ugyldig_BibTeX-n\u00f8gle
+Invalid_date_format=Ugyldigt_datoformat
+Invalid_URL=Ugyldig_URL
+Inverted=Inverteret
+is_a_standard_type.=er_en_standardtype.
+ISO_abbreviation=ISO-forkortelse
+Item_list_for_field=Ordliste_for_felt
+jabref=jabref
+JabRef_help=JabRef-hj\u00e6lp
+JabRef_preferences=JabRef-indstillinger
+Journal_abbreviations=Tidsskriftsforkortelser
+Journal_list_preview=Forh\u00e5ndsvisning_af_tidsskriftsliste
+Journal_name=Tidsskriftsnavn
+Keep=Behold
+Keep_both=Behold_begge
+Keep_lower=Behold_nederste
+Keep_upper=Behold_\u00f8verste
+Key_bindings=Genvejstaster
+Key_bindings_changed=Genvejstaster_\u00e6ndret
+Key_generator_settings=Indstillinger_for_n\u00f8glegenerering
+Key_pattern=M\u00f8nster
+keys_in_database=n\u00f8gler_i_databasen
+Keyword=N\u00f8gleord
+Label=Navn
+Language=Sprog
+Last_modified=Sidst_\u00e6ndret
+LaTeX_AUX_file=LaTeX_AUX-fil
+Leave_file_in_its_current_directory.=Lad_filen_ligge_i_biblioteket,_den_ligger_i_nu.
+
+Leave_files_in_their_current_directory.=La_filerne_ligge_i_biblioteket,_de_ligger_i_nu.
+Left=Venstre
+License=Licens
+Limit_to_fields=Begr\u00e6ns_til_f\u00f8lgende_felter
+Limit_to_selected_entries=Begr\u00e6ns_til_valgte_poster
+
+Link=Link
+Link_local_file=Link_til_lokal_fil
+
+Link_to_file_%0=Link_til_filen_%0
+Listen_for_remote_operation_on_port=Lyt_efter_fjernoperationer_p\u00e5_port
+Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Hent_og_gem_indstillinger_fra/til_jabref.xml_ved_opstart_(memory_stick-tilstand)
+Load_session=Hent_session
+Loading_session...=Henter_session...
+localhost=localhost
+Look_and_feel=Udseende
+Looking_for_pdf...=Leder_efter_pdf...
+lower=sm\u00e5_bogstaver
+Main_file_directory=Hovedbibliotek
+
+Main_layout_file=Hoved-layoutfil
+Main_PDF_directory=Hovedbibliotek_for_PDF-filer
+Main_PS_directory=Hovedbibliotek_for_PS-filer
+Manage=Ops\u00e6t
+Manage_custom_exports=Ops\u00e6t_eksterne_eksportfiltre
+Manage_custom_imports=Ops\u00e6t_eksterne_importfiltre
+Manage_external_file_types=Ops\u00e6t_eksterne_filtyper
+Manage_journal_abbreviations=Ops\u00e6t_tidsskriftsforkortelser
+Mark_entries=M\u00e6rk_poster
+Mark_entry=M\u00e6rk_post
+Mark_new_entries_with_addition_date=M\u00e6rk_nye_poster_med_dato
+Mark_new_entries_with_owner_name=M\u00e6rk_nye_poster_med_navn_p\u00e5_ejer
+Marked_selected=M\u00e6rkede_valgte_poster
+Memory_Stick_Mode=Memory_Stick-tilstand
+Menu_and_label_font_size=St\u00f8rrelse_p\u00e5_menuskrifttyper
+Merged_external_changes=Inkorporerede_eksterne_\u00e6ndringer
+Messages=Meddelelser
+Messages_and_Hints=Meddelelser_og_advarsler
+Modification_of_field=\u00c6ndring_af_felt
+Modified_group_"%0".=\u00e6ndrede_gruppen_"%0".
+Modified_groups=\u00e6ndrede_grupper
+Modified_string=\u00e6ndrede_streng
+Modify=\u00c6ndre
+modify_group=\u00e6ndre_gruppe
+MODS=MODS
+Move=Flyt
+Move_down=Flyt_ned
+Move_entries_in_group_selection_to_the_top=Flyt_poster_i_valgte_grupper_til_toppen
+Move_external_links_to_'file'_field=Flyt_eksterne_links_til_'file'-feltet
+Move_files_to_file_directory.=Flyt_filer_til_bibliotek.
+move_group=flyt_gruppe
+Move_string_down=Flyt_streng_ned
+Move_string_up=Flyt_streng_op
+Move_up=Flyt_op
+Moved_group_"%0".=Flyttede_gruppen_"%0".
+MS_Office_2007=MS_Office_2007
+MySQL=MySQL
+MySQL_database=MySQL_database
+Name=Navn
+Name_formatter=Navneformatering
+Natbib_style=Natbib-stil
+
+nested_aux_files='nestede'_aux-filer
+New=Ny
+new=ny
+New_BibTeX_database=Ny_BibTeX-database
+New_BibTeX_entry=Ny_BibTeX-post
+New_BibTeX_subdatabase=Ny_BibTeX-deldatabase
+New_content=Nyt_indhold
+New_database_created.=Opprettede_ny_database.
+New_field_value=Ny_v\u00e6rdi
+New_file=Ny_fil
+New_file_link_(INSERT)=Nyt_link_(INSERT)
+New_group=Ny_gruppe
+New_string=Ny_streng
+Next_entry=N\u00e6ste_post
+No_%0_found=Fandt_ingen_%0
+No_actual_changes_found.=Ingen_reelle_\u00e6ndringer_fundet.
+no_base-bibtex-file_specified=ingen_basis-bibtexfil_specificeret
+no_database_generated=ingen_database_genereret
+No_duplicates_found=Ingen_dubletter_fundet
+No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Ingen_poster_fundet._Kontroller_at_du_bruger_korrekt_importfilter.
+No_entries_found_for_the_search_string_'%0'=Fandt_ingen_poster_for_s\u00f8geteksten_'%0'
+No_entries_imported.=Ingen_poster_importeret.
+No_entries_or_multiple_entries_selected.=Ingen_eller_flere_poster_valgt.
+No_entries_selected=Ingen_poster_valgt
+No_entries_selected.=Ingen_poster_valgt.
+No_exceptions_have_ocurred.=Der_er_ikke_sket_nogen_undtagelser.
+No_files_found.=Ingen_filer_fundet.
+No_GUI._Only_process_command_line_options.=Ingen_GUI._Processer_kun_kommandolinjevalg.
+No_journal_names_could_be_abbreviated.=Ingen_tidsskriftsnavne_kunne_forkortes.
+No_journal_names_could_be_unabbreviated.=Ingen_tidsskriftsnavne_kunne_ekspanderes.
+
+No_PDF_linked=Ingen_PDF_linket
+No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Ingen_pdf_eller_ps_defineret_og_fandt_ingen_filer_med_navn_svarende_til_BibTeX-n\u00f8glen
+No_plugins_were_found_in_the_following_folders\:=Ingen_plugins_blev_fundet_i_f\u00f8lgende_foldere:
+No_references_found=Ingen_referencer_fundet
+No_saved_session_found.=Fandt_ingen_gemt_tilstand.
+No_url_defined=Ingen_URL_er_defineret
+No_XMP_metadata_found_in_=Ingen_XMP-metadata_fundet_i_
+not=ikke
+not_found=ikke_fundet
+Not_saved_(empty_session)=Tilstand_ikke_gemt_(ingen_filer_\u00e5bne)
+Note_that_the_entry_causing_the_problem_has_been_selected.=Legg_m\u00e6rke_til_at_posten,_som_skaber_problemet,_er_blevet_valgt.
+Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Bem\u00e6rk_at_du_skal_specificere_det_fuldst\u00e6ndige_klassenavn_for_udseendet,
+Nothing_to_redo=Ingenting_at_gentage
+Nothing_to_undo=Ingenting_at_fortryde
+# The next is used like in "References found: 1  Number of references to fetch?"
+Number_of_references_to_fetch?=Antal_referencer_som_skal_hentes?
+occurences=forekomster
+OK=OK
+Ok=OK
+One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Et_eller_flere_links_er_af_typen_'%0',_som_er_udefineret._Hvad_vil_du_g\u00f8re?
+One_or_more_keys_will_be_overwritten._Continue?=En_eller_flere_n\u00f8gler_vil_blive_overskrevet._Forts\u00e6t?
+Only_one_item_is_supported=Kun_et_element_af_gangen_underst\u00f8ttes
+Open=\u00c5bn
+Open_BibTeX_database=\u00c5bn_BibTeX-database
+Open_database=\u00c5bn_database
+Open_editor_when_a_new_entry_is_created=Start_redigering_n\u00e5r_en_ny_post_oprettes
+Open_file=\u00c5bn_fil
+Open_last_edited_databases_at_startup=\u00c5bn_sidst_viste_databaser_ved_opstart
+Open_PDF_or_PS=\u00c5bn_PDF_eller_PS
+Open_right-click_menu_with_Ctrl+left_button=\u00c5bn_h\u00f8jreklikmenu_med_Ctrl+venstre_knap
+Open_URL_or_DOI=\u00c5bn_URL_eller_DOI
+OpenDocument_Spreadsheet=OpenDocument-regneark
+Opened_database=\u00c5bnede_database
+Opening=\u00c5bner
+Opening_preferences...=\u00c5bner_indstillinger...
+
+OpenOffice_Calc=OpenOffice_Calc
+OpenOffice_CSV=OpenOffice_CSV
+Operation_canceled.\n=Operationen_afbrudt.\n
+Operation_not_supported=Operation_ikke_underst\u00f8ttet
+Optional_fields=Valgfri_felter
+Options=Valg
+or=eller
+out_of=af
+Output=Output
+Output_or_export_file=Gem_eller_eksporter_fil
+Override=Tilsides\u00e6t
+Override_default_file_directories=Tilsides\u00e6t_standard_fil-biblioteker
+
+Override_default_font_settings=Tilsides\u00e6t_standardskrifttyper
+override_the_bibtex_key_by_the_selected_text=tilsides\u00e6t_BibTeX-n\u00f8glen_til_fordel_for_den_valgte_n\u00f8gle
+Overwrite=Overskriv
+Overwrite_existing_field_values=Overskriv_eksisterende_v\u00e6rdier
+Overwrite_keys=Overskriv_n\u00f8gler
+pairs_processed=par_revideret
+Password_\:=Kodeord:
+Paste=Inds\u00e6t
+paste_entries=inds\u00e6t_poster
+paste_entry=inds\u00e6t_post
+Paste_from_clipboard=Inds\u00e6t_fra_udklipsholder
+Pasted=Indsat
+
+Path_to_%0_not_defined=Sti_til_%0_ikke_defineret
+Path_to_LatexEditor_(LEd.exe)=Sti_til_LatexEditor_(LEd.exe)
+Path_to_LyX_pipe=Sti_til_LyX-pipe
+
+Path_to_Vim=Sti_til_Vim
+Path_to_WinEdt.exe=Sti_til_WinEdt.exe
+PDF_directory=PDF-bibliotek
+PDF_does_not_exist=PDF-filen_findes_ikke
+Personal_journal_list=Personlig_tidsskriftsliste
+Plain_text_import=Import_fra_ren_tekst
+Please_check_your_network_connection_to_this_machine.=Tjek_venligst_maskinens_netv\u00e6rksforbindelse.
+Please_enter_a_name_for_the_group.=Skriv_et_navn_til_gruppen.
+Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Skriv_et_s\u00f8geudtryk._For_eksempel,_for_at_s\u00f8ge_i_alle_felter_efter_<b>Olsen</b>,_skriv%c<p><tt>olsen</tt><p>For_at_s\u00f8ge_i_<b>Author</b>-feltet_efter_<b>Olsen</b>_og_i_<b>Title</b>-feltet_efter_<b>electrical</b>,_sk [...]
+Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Skriv_venligsts_feltet_som_skal_s\u00f8ges_i_(f.eks._<b>keywords</b>)_og_n\u00f8gleordet_at_s\u00f8ge_efter_(f.eks._<b>electrical</b>).
+Please_enter_the_string's_label=Skriv_et_navn_for_strengen
+Please_select_an_importer=V\u00e6lg_venligst_et_importformat
+Please_select_an_importer.=V\u00e6lg_venligst_et_importfilter.
+Please_select_exactly_one_group_to_move.=V\u00e6lg_pr\u00e6cis_\u00e9n_gruppe_til_flytning.
+Please_specify_the_=Angiv_venligst_
+Possible_duplicate_entries=Mulige_dubletter
+Possible_duplicate_of_existing_entry._Click_to_resolve.=Mulig_dublet_af_eksisterende_post._Klik_for_at_l\u00f8se_problemet.
+Preamble=Pr\u00e6ambel
+Preferences=Indstillinger
+Preferences_recorded.=Indstillinger_gemt.
+Preview=Forh\u00e5ndsvisning
+Previous_entry=Forrige_post
+Primary_sort_criterion=Prim\u00e6rt_sorteringskriterium
+Print_Preview=Udskriftsvisning
+Printing_Entry_Preview=Udskriver_forh\u00e5ndsvisning_af_post
+Problem_with_parsing_entry=Problem_med_at_l\u00e6se_post
+Processing_=Arbejder_
+Program_output=Output_fra_program
+PS_directory=PS-bibliotek
+Push_entries_to_external_application_(%0)=Send_poster_til_eksternt_program_(%0)
+Push_selection_to_Emacs=Send_valgte_poster_til_Emacs
+Push_selection_to_LyX/Kile=Send_valgte_poster_til_LyX/Kile
+Push_selection_to_Vim=Send_valgte_poster_til_Vim
+Push_selection_to_WinEdt=Send_valgte_poster_til_WinEdt
+Push_to_LatexEditor=Send_til_LatexEditor
+Pushed_citations_to_%0=Referencer_sendt_til_%0
+Pushed_citations_to_Emacs=Referencer_sendt_til_Emacs
+Pushed_citations_to_Vim=Referencer_sendt_til_Vim
+Pushed_citations_to_WinEdt=Referencer_sendt_til_WinEdt
+Pushed_the_citations_for_the_following_rows_to=Referencer_for_de_f\u00f8lgende_r\u00e6kker_sendt_til
+Quit_JabRef=Afslut_JabRef
+Quit_synchronization=Afslut_synkronisering
+Raw_source=Kilde
+Really_delete_the_selected=Vil_du_slette_de_valgte
+Rearrange_tabs_alphabetically_by_title=Omarranger_faneblade_alfabetisk_efter_titel
+Redo=Gentag
+Reference_database=Referencedatabase
+# The next two lines are used like in "References found: 1  Number of references to fetch?"
+References_found=Referencer_fundet
+Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Undergruppe:_Vis_poster_indeholdt_b\u00e5de_i_denne_gruppe_og_gruppe_over
+Refresh_view=Opdater
+Regular_Expression=Regul\u00e6rudtryk
+Remember_these_entry_types?=Husk_disse_posttyper?
+Remote_operation=Fjernstyring
+Remote_server_port=Port_til_fjernstyring
+Remove=Fjern
+Remove_all?=Fjern_alle?
+Remove_all_subgroups=Fjern_undergrupper
+Remove_all_subgroups_of_"%0"?=Fjern_alle_undergrupper_af_"%0"?
+Remove_double_braces_around_BibTeX_fields_when_loading.=Fjern_dobbelte_kr\u00f8llede_parenteser_omkring_BibTeX-felter_ved_indl\u00e6sning.
+Remove_duplicates=Fjern_dubletter
+Remove_entry_from_import=Fjern_post_fra_import
+Remove_entry_selection_from_this_group=Fjern_valgte_poster_fra_denne_gruppe
+Remove_entry_type=Slet_posttype
+Remove_file_link_(DELETE)=Slet_link_(DELETE)
+remove_from_group=fjern_fra_gruppe
+Remove_from_group=Fjern_fra_gruppe
+Remove_group=Fjern_gruppe
+Remove_group,_keep_subgroups=Fjern_gruppe,_behold_undergrupper
+Remove_group_"%0"?=Fjern_gruppen_"%0"?
+Remove_group_"%0"_and_its_subgroups?=Fjern_gruppen_"%0"_og_dens_undergrupper?
+remove_group_(keep_subgroups)=fjern_gruppe_(behold_undergrupper)
+remove_group_and_subgroups=fjern_gruppe_og_undergrupper
+Remove_group_and_subgroups=Fjern_gruppe_og_undergrupper
+Remove_link=Slet_link
+Remove_old_entry=Fjern_gammel_post
+Remove_selected_strings=Slet_valgte_strenge
+remove_string_=slet_streng_
+Removed_group_"%0".=Fjernede_gruppen_"%0"
+Removed_group_"%0"_and_its_subgroups.=Fjernede_gruppen_"%0"_og_dens_undergrupper
+Removed_string=Streng_fjernet
+
+Renamed_string=\u00e6ndrede_navn_p\u00e5_streng
+Replace=Erstat
+Replace_(regular_expression)=Erstat_(regul\u00e6rudtryk)
+Replace_string=Erstat_streng
+Replace_with=Erstat_med
+Replaced=Erstattet
+Required_fields=Obligatoriske_felter
+Reset_all=Nulstil_alle
+Reset_file_type_definitons=Genopret_oprindelige_filtyper
+Resolve_strings_for_all_fields_except=Sl\u00e5_strenge_op_for_alle_felter_undtagen
+Resolve_strings_for_standard_BibTeX_fields_only=Sl\u00e5_kun_strenge_op_for_standard_BibTeX-felter
+resolved=l\u00f8st
+Results=Resultater
+Revert_to_original_source=Ret_tilbage_til_oprindelig_kildekode
+Review=Kommentarer
+Review_changes=Gennemse_\u00e6ndringer
+Right=H\u00f8jre
+root=root
+Save=Gem
+Save_all_finished.=Alle_databaser_gemt
+
+Save_all_open_databases=Gem_alle_\u00e5bne_databaser
+Save_before_closing=Gem_f\u00f8r_databasen_lukkes
+Save_database=Gem_database
+Save_database_as_...=Gem_database_som_...
+Save_entries_in_their_original_order=Gem_poster_i_oprindelig_r\u00e6kkef\u00f8lge
+Save_failed=Gemning_mislykkedes
+Save_failed_during_backup_creation=Gemning_mislykkedes_ved_oprettelse_af_sikkerhedskopi
+Save_failed_while_committing_changes=Gemning_mislykkedes_ved_inddatering_af_\u00e6ndringer
+Save_ordered_by_author/editor/year=Gem_sorteret_efter_author/editor/year
+Save_selected_as_...=Gem_valgte_som_...
+Saved_database=Database_gemt
+Saved_selected_to=Gemte_valgte_i
+Saved_session=Tilstand_gemt
+Saving=Gemmer
+Saving_all_databases...=Gemmer_alle_databaser...
+Saving_database=Gemmer_database
+# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
+Scan=S\u00f8g
+Search=S\u00f8g
+Search_All_Fields=S\u00f8g_i_alle_felter
+Search_all_fields=S\u00f8g_i_alle_felter
+Search_error=Fejl_ved_s\u00f8gning
+Search_expression=S\u00f8geudtryk
+Search_for=S\u00f8g_efter
+Search_general_fields=S\u00f8g_i_generelle_felter
+Search_IEEEXplore=S\u00f8g_i_IEEEXplore
+
+Search_IEEExplore=S\u00f8g_i_IEEExplore
+Search_optional_fields=S\u00f8g_i_valgfrie_felter
+Search_required_fields=S\u00f8g_i_obligatoriske_felter
+Search_Specified_Field(s)=S\u00f8g_specificerede_felt(er)
+Searched_database._Global_number_of_hits=Database_gennems\u00f8gt._Globalt_antal_match
+Searched_database._Number_of_hits=Database_gennems\u00f8gt._Antal_match
+Searching_for_%0_file=S\u00f8ger_efter_%0-fil
+Searching_for_duplicates...=S\u00f8ger_efter_dubletter...
+
+Searching_for_files=S\u00f8ger_efter_filer
+Secondary_sort_criterion=Sekund\u00e6rt_sorteringskriterium
+Select=V\u00e6lg
+Select_a_Zip-archive=V\u00e6lg_ZIP-fil
+Select_action=V\u00e6lg_handling
+Select_all=V\u00e6lg_alle
+Select_Classpath_of_New_Importer=V\u00e6lg_classpath_for_nyt_importformat
+Select_encoding=V\u00e6lg_tegnkodning
+Select_entries_in_group_selection=V\u00e6lg_poster_i_valgte_grupper
+Select_entry_type=V\u00e6lg_posttype
+Select_external_application=V\u00e6lg_ekstern_applikation
+Select_file_from_ZIP-archive=V\u00e6lg_fil_fra_ZIP-fil
+Select_format=V\u00e6lg_format
+Select_icon=V\u00e6lg_ikon
+Select_matches=V\u00e6lg_match
+Select_new_ImportFormat_Subclass=V\u00e6lg_klasse_til_nyt_importformat
+Select_the_tree_nodes_to_view_and_accept_or_reject_changes=V\u00e6lg_forgreningerne_for_at_inspicere_og_acceptere_eller_forkaste_\u00e6ndringer
+Selected_entries=Valgte_poster
+Selector_enabled_fields=Felter_med_ordliste
+Server_Hostname_\:=Server_v\u00e6rtsnavn:
+Server_Type_\:=Server-type:
+
+Set_field=S\u00e6t_felt
+Set_fields=S\u00e6t_felter
+Set_general_fields=Tilpas_generelle_felter
+Set_main_external_file_directory=S\u00e6t_hovedbibliotek_for_eksterne_links
+Set_table_font=V\u00e6lg_tabelskrifttype
+Settings=Indstillinger
+Setup_selectors=Ops\u00e6t_ordlister
+Short_form=Kort_form
+Shortcut=Genvej
+Show/edit_BibTeX_source=Vis/rediger_BibTeX-kilde
+Show_'Firstname_Lastname'=Vis_'Fornavn_Efternavn'
+Show_'Lastname,_Firstname'=Vis_'Efternavn,_Fornavn'
+Show_BibTeX_source_by_default=Vis_BibTeX-kode_som_standard
+Show_BibTeX_source_panel=Vis_BibTeX-kilde-panel
+Show_confirmation_dialog_when_deleting_entries=Vis_dialog_for_at_bekr\u00e6fte_sletning_af_poster
+Show_description=Vis_beskrivelse
+Show_dynamic_groups_in_<i>italics</i>=Vis_dynamiske_grupper_i_<i>kursiv</i>
+Show_entries_*not*_in_group_selection=Vis_poster_*udenfor*_valgte_grupper
+
+Show_file_column=Vis_'file'-kolonne
+Show_icons_for_groups=Vis_ikoner_for_grupper
+Show_last_names_only=Vis_kun_efternavn
+Show_names_unchanged=Vis_navn_u\u00e6ndret
+Show_one_less_rows=Vis_en_r\u00e6kke_mindre
+Show_one_more_row=Vis_en_r\u00e6kke_mere
+Show_optional_fields=Vis_valgfrie_felter
+Show_PDF/PS_column=Vis_PDF/PS-kolonne
+Show_required_fields=Vis_obligatoriske_felter
+Show_URL/DOI_column=Vis_URL/DOI-kolonne
+Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Vis_advarsel_n\u00e5r_en_ikke-unik_BibTeX-n\u00f8gle_indtastes
+Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Vis_dialogboks_med_advarsel_n\u00e5r_en_tom_BibTeX-n\u00f8gle_indtastes
+Simple_HTML=Simpel_HTML
+Size=St\u00f8rrelse
+Skip=Spring_over
+Skipped_-_No_PDF_linked=Sprang_over_-_ingen_PDF-fil_linket
+Skipped_-_PDF_does_not_exist=Sprang_over_-_PDF-filen_findes_ikke
+
+Skipped_entry.=Sprang_over_post.
+Sort_alphabetically=Sorter_alfabetisk
+Sort_Automatically=Sorter_automatisk
+
+Sort_order=Sortering
+sort_subgroups=sorter_undergrupper
+Sorted_all_subgroups_recursively.=Sorterede_alle_undergrupper_rekursivt.
+Sorted_immediate_subgroups.=Sorterede_n\u00e6rmeste_undergrupper.
+source_edit=redigering_af_kilde
+Special_Name_Formatters=Specielle_navneformateringer
+Special_table_columns=Specielle_kolonner
+SQL_connection_established.=SQL-forbindelse_oprettet.
+Start_incremental_search=Start_inkrementel_s\u00f8gning
+Start_search=Start_s\u00f8gning
+Starting_import=Starter_import
+Statically_group_entries_by_manual_assignment=Grupper_poster_statisk_ved_manuel_tildeling
+Status=Status
+Stop=Stop
+Store_journal_abbreviations=Gem_tidsskriftsforkortelser
+Store_string=Gem_streng
+Store_the_following_fields_with_braces_around_capital_letters=Gem_de_f\u00f8lgende_felter_med_kr\u00f8llede_parenteser_om_store_bogstaver
+Stored_entry=Post_gemt
+Strings=Strenge
+Strings_for_database=Strenge_for_database
+Subdatabase_from_aux=Deldatabase_fra_aux-fil
+Suggest=Foresl\u00e5
+Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Skifter_mellem_fuldt_og_forkortet_tidsskriftsnavn_hvis_navnet_er_kendt.
+Synchronize_%0_links=Synkroniser_%0-links
+Synchronize_file_links=Synkroniser_eksterne_links
+Synchronizing_%0_links...=Synkroniserer_%0-links...
+Table_appearance=Tabelops\u00e6tning
+Table_background_color=Baggrundsfarve_for_tabel
+Table_grid_color=Farve_p\u00e5_linjer_i_tabel
+Table_text_color=Tekstfarve_i_tabel
+Tabname=Navn_p\u00e5_faneblad
+Target_file_cannot_be_a_directory.=Angivet_fil_kan_ikke_v\u00e6re_et_bibliotek.
+Tertiary_sort_criterion=Terti\u00e6rt_sorteringskriterium
+Test=Test
+Text_Input_Area=Indtastningsfelt
+The_#_character_is_not_allowed_in_BibTeX_fields=#-tegnet_er_ikke_tilladt_i_BibTeX-felter
+#The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Applikationen_'%0'_associeret_med_filtypen_'%1'_kunne_ikke_startes.
+The_chosen_date_format_for_new_entries_is_not_valid=Det_valgte_datoformat_er_ugyldigt
+
+The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Den_valgte_tegnkodning_'%0'_kunne_ikke_kode_de_f\u00f8lgende_tegn:_
+The_CiteSeer_fetch_operation_returned_zero_results.=Hentning_fra_CiteSeerX_gav_ingen_resultater.
+The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=Denne_version_tilbyder_en_ny_m\u00e5de_at_h\u00e5ndtere_links_til_eksterne_filer.<br>For_at_benytte_dette,_skal_dine_links_\u00e6ndres_til_det_nye_format,_og<br>JabRef_skal_konfigureres_til_at_vise_de_nye_links.
+the_field_<b>%0</b>=feltet_<b>%0</b>
+The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Filen<BR>'%0'<BR>er_blevet_\u00e6ndret<BR>eksternt!
+The_group_"%0"_already_contains_the_selection.=Gruppen_"%0"_indeholder_allerede_de_valgte_poster.
+The_label_of_the_string_can_not_be_a_number.=Navnet_p\u00e5_strengen_kan_ikke_v\u00e6re_et_tal.
+The_label_of_the_string_can_not_contain_spaces.=Navnet_p\u00e5_strengen_kan_ikke_indeholde_mellemrum.
+The_label_of_the_string_can_not_contain_the_'#'_character.=Navnet_p\u00e5_strengen_kan_ikke_indeholde_tegnet_'#'.
+The_output_option_depends_on_a_valid_import_option.=Output-indstillingen_er_afh\u00e6ngig_af_en_gyldig_import-indstilling.
+The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=PDF-filen_indeholder_en_eller_flere_BibTeX-poster.\nVil_du_importere_disse_som_nye_poster_i_den_\u00e5bne_database?
+The_regular_expression_<b>%0</b>_is_invalid%c=Regul\u00e6rudtrykket_<b>%0</b>_er_ugyldigt%c
+The_search_is_case_insensitive.=S\u00f8gningen_skelner_ikke_mellem_store_og_sm\u00e5_bogstaver.
+The_search_is_case_sensitive.=S\u00f8gningen_skelner_mellem_store_og_sm\u00e5_bogstaver.
+The_string_has_been_removed_locally=Strengen_er_blevet_slettet_lokalt
+There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Der_findes_mulige_dubletter_(m\u00e6rket_med_et_'D'-ikon)_som_ikke_er_blevet_h\u00e5ndteret._Forts\u00e6t?
+this_button_will_update=denne_knap_vil_opdatere
+This_database_was_written_using_an_older_version_of_JabRef.=Denne_database_blev_gemt_i_en_\u00e6ldre_version_af_JabRef.
+This_entry_has_no_BibTeX_key._Generate_key_now?=Denne_post_har_ingen_BibTeX-n\u00f8gle._Generer_n\u00f8gle_nu?
+This_entry_is_incomplete=Denne_post_er_ufuldst\u00e6ndig
+This_entry_type_cannot_be_removed.=Denne_posttype_kan_ikke_slettes.
+This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Dette_eksterne_link_er_af_typen_'%0',_som_er_udefineret._Hvad_vil_du_g\u00f8re?
+This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Denne_gruppe_indeholder_poster_baseret_p\u00e5_manuel_tildeling._Poster_kan_tildeles_til_denne_gruppe_ved_at_v\u00e6l [...]
+This_group_contains_entries_in_which=Denne_gruppe_indeholder_poster_hvor
+This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Denne_gruppen_indeholder_poster,_som_stemmer_med_regul\u00e6rudtrykket_<b>%0</b>_i_et_hvilket_som_helst_felt
+This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Denne_gruppe_indeholder_poster,_som_har_teksten_<b>%0</b>_i_et_hvilket_som_helst_felt
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Denne_gruppe_indeholder_poster_hvis_<b>%0</b>-felt_indeholder_n\u00f8gleordet_<b>%1</b>
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Denne_gruppe_indeholder_poster,_hvis_<b>%0</b>-felt_stemmer_med_regul\u00e6rudtrykket_<b>%1</b>
+This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Dette_er_et_enkelt_klip-og-inds\u00e6t-vindue._Indtast_eller_kopier_f\u00f8rst_tekst_til_indtastningsfeltet._Derefter_kan_du_markere_tekst_og_tildele_den_til_et_BibTeX-felt.
+
+This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dette_f\u00e5r_JabRef_til_at_sl\u00e5_hvert_%0-link_op_og_tjekke,_om_filen_eksisterer._Hvis_ikke_vil_du_f\u00e5_mulighed_for_at<br>l\u00f8se_problemet.
+#This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dette_f\u00e5r_JabRef_til_at_unders\u00f8ge_hvert_%0-link_og_tjekke,_om_filen_eksisterer._Hvis_ikke_vil_du_f\u00e5_mulighed<BR>for_at_l\u00f8se_problemet.
+This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Denne_operation_kr\u00e6ver,_at_alle_valgte_poster_har_definerede_BibTeX-n\u00f8gler.
+This_operation_requires_at_least_one_entry.=Denne_operation_kr\u00e6ver_mindst_en_post.
+This_operation_requires_one_or_more_entries_to_be_selected.=Denne_operation_kr\u00e6ver,_at_en_eller_flere_poster_er_valgt.
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Denne_operation_vil_flytte_alle_eskterne_links_fra_'pdf'-_og_'ps'-felterne_til_'%0'-feltet._Forts\u00e6t?
+To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=For_at_s\u00e6tte_op,_g\u00e5_til_<B>V\u00e6rkt\u00f8jer_->_Ops\u00e6t_tidsskriftsforkortelser</b>
+Toggle_abbreviation=Forkort/ekspander
+Toggle_entry_preview=Vis/skjul_forh\u00e5ndsvisning
+Toggle_groups_interface=Vis/skjul_grupperingspanel
+Toggle_search_panel=Vis/skjul_s\u00f8gepanel
+Try_different_encoding=Pr\u00f8v_en_anden_tegnkodning
+Type_set_to_'other'=Type_sat_til_'other'
+Unabbreviate_journal_names_of_the_selected_entries=Ekspander_tidsskriftsnavn_for_de_valgte_poster
+Unabbreviated_%0_journal_names.=Ekspanderede_%0_tidsskriftsnavn.
+unable_to_access_LyX-pipe=ingen_adgang_til_LyX-pipe
+Unable_to_create_graphical_interface=Kunne_ikke_oprette_grafisk_brugerflade
+Unable_to_open_file.=Kan_ikke_\u00e5bne_fil.
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Kan_ikke_\u00e5bne_link._Applikationen_'%0'_associeret_med_filtypen_'%1'_kunne_ikke_kaldes.
+Unable_to_read_default_icon_theme.=Kunne_ikke_l\u00e6se_standard-ikons\u00e6tfil.
+Unable_to_read_icon_theme_file=Kunne_ikke_l\u00e6se_ikons\u00e6tfil
+unable_to_write_to=kunne_ikke_skrive_til
+Undefined_file_type=Udefineret_filtype
+Undo=Fortryd
+Union=Foreningsm\u00e6ngde
+Unknown_bibtex_entries=Ukendte_BibTeX-poster
+unknown_edit=ukendt_\u00e6ndring
+unknown_entry_type=ukendt_posttype
+Unknown_export_format=Ukendt_eksportformat
+Unmark_all=Fjern_m\u00e6rkning_fra_alle
+Unmark_entries=Fjern_m\u00e6rkning
+Unmark_entry=Fjern_m\u00e6rkning
+Unmarked_selected=M\u00e6rkning_fjernet_fra_valgte_poster
+Unpack_EndNote_filter_set=Udpak_EndNote-filters\u00e6t
+Unpacked_file.=Fil_udpakket.
+Unsupported_version_of_class_%0\:_%1=Ikke-underst\u00f8ttet_version_af_klassen_%0:_%1
+untitled=uden_navn
+Up=Op
+Update_to_current_column_widths=Brug_nuv\u00e6rende_kolonnebredder
+Updated_group_selection=Gruppevalg_opdateret
+Upgrade_external_links=Opgrader_eksterne_links
+Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Opgrader_eksterne_PDF-_og_PS-links_til_at_bruge_'%0'-feltet.
+Upgrade_file=Opgrader_fil
+Upgrade_old_external_file_links_to_use_the_new_feature=Opgrader_gamle_eksterne_links_for_at_bruge_den_nye_funktion
+Upgraded_links.=Links_opgraderet.
+UPPER=STORE_BOGSTAVER
+Upper_Each_First=Stort_Forbogstav
+Upper_first=Stort_f\u00f8rste_forbogstav
+usage=brug
+Use_antialiasing_font=Brug_udglattet_skrifttype
+Use_autocompletion_for_the_following_fields=Brug_autoudfyldning_for_f\u00f8lgende_felter
+Use_custom_icon_theme=Benyt_brugerdefineret_ikons\u00e6t
+Use_default_viewer=Brug_standardprogram_for_filtypen
+Use_inspection_window_also_when_a_single_entry_is_imported.=Brug_ogs\u00e5_inspektionsvindue,_n\u00e5r_kun_\u00e9n_post_importeres.
+Use_native_file_dialog=Brug_system-fildialog
+Use_other_look_and_feel=Brug_andet_udseende
+Use_Regular_Expression_Search=Brug_s\u00f8gning_med_regul\u00e6rudtryk
+Use_regular_expressions=Brug_regul\u00e6rudtryk
+Use_the_following_delimiter_character(s)=Brug_f\u00f8lgende_separatortegn
+Username_\:=Brugernavn:
+Value_cleared_externally=V\u00e6rdi_slettet_eksternt
+Value_set_externally=V\u00e6rdi_sat_eksternt
+verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=kontroller_at_LyX_k\u00f8rer,_og_at_den_angivne_lyxpipe_stemmer
+View=Vis
+Vim_Server_Name=Navn_p\u00e5_Vim-server
+Waiting_for_ArXiv...=Venter_p\u00e5_ArXiv
+Warn_about_unresolved_duplicates_when_closing_inspection_window=Advar_om_dubletter_som_ikke_er_blevet_h\u00e5ndteret,_n\u00e5r_inspektionsvinduet_lukkes
+Warn_before_overwriting_existing_keys=Advar_f\u00f8r_eksisterende_n\u00f8gler_overskrives
+Warning=Advarsel
+Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Advarsel:_Kunne_ikke_fuldf\u00f8re_reparation_af_filen;_filen_kan_v\u00e6re_\u00f8delagt._Fejlmeddelelse
+Warning_there_is_a_duplicate_key=Advarsel:_Der_findes_en_identisk_BibTeX-n\u00f8gle
+Warnings=Advarsler
+web_link=link
+
+What_do_you_want_to_do?=Hvad_vil_du_g\u00f8re?
+When_adding/removing_keywords,_separate_them_by=N\u00e5r_n\u00f8gleord_tilf\u00f8jes_eller_fjernes,_adskil_dem_med
+Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Skriver_XMP-metadata_til_PDF-filerne_linket_fra_de_valgte_poster.
+with=med
+Word=Ord
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=Skriv_BibTeX-posten_som_XMP-metadata_til_PDF.
+Write_XMP=Skriv_XMP
+Write_XMP-metadata=Skriv_XMP-metadata
+Write_XMP-metadata_for_all_PDFs_in_current_database?=Skriv_XMP-metadata_for_alle_PDFer_i_denne_database?
+
+Writing_XMP=Skriver_XMP
+Writing_XMP_metadata...=Skriver_XMP-metadata...
+Writing_XMP_metadata_for_selected_entries...=Skriver_XMP-metadata_for_de_valgte_poster...
+Writing_XMP_to_'%0'...=Skriver_XMP_til_'%0'
+Wrong_file_format=Forkert_filformat
+Wrote_XMP-metadata=Skrev_XMP-metadata
+Wrote_XMP_to_'%0'.=Skrev_XMP_til_'%0'
+
+XMP-annotated_PDF=XMP-annoteret_PDF
+XMP_Export_Privacy_Settings=Indstillinger_for_XMP-eksport
+XMP_metadata=XMP-metadata
+XMP_metadata_found_in_PDF\:_%0=XMP-metadata_fundet_i_PDF:_%0
+You_must_restart_JabRef_for_this_to_come_into_effect.=Du_skal_genstarte_JabRef_for,_at_dette_skal_tr\u00e6de_i_kraft.
+You_have_changed_the_language_setting.=Du_har_valgt_et_nyt_sprog.
+You_have_changed_the_look_and_feel_setting.=Du_har_\u00e6ndret_indstillingen_for_udseende.
+You_have_cleared_this_field._Original_value=Du_har_slettet_dette_felt._Oprindelig_v\u00e6rdi
+
+You_have_entered_an_invalid_search_'%0'.=Ugyldigt_s\u00f8geudtryk_'%0'.
+You_must_choose_a_file_name_to_store_journal_abbreviations=Du_skal_v\u00e6lge_et_filnavn_for_at_gemme_tidsskriftsforkortelser
+You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Du_skal_genstarte_JabRef_for,_at_de_nye_genvejstaster_skal_fungere.
+You_must_set_both_BibTeX_key_and_%0_directory=Du_skal_angive_b\u00e5de_BibTeX-n\u00f8gle_og_%0-bibliotek
+Your_new_key_bindings_have_been_stored.=Dine_nye_genvejstaster_er_blevet_gemt.
+The_following_fetchers_are_available\:=F\u00f8lgende_hentev\u00e6rkt\u00f8jer_er_tilg\u00e6ngelige:
+Could_not_find_fetcher_'%0'=Kunne_ikke_finde_hentev\u00e6rkt\u00f8jet_'%0'
+Running_Query_'%0'_with_fetcher_'%1'.=K\u00f8rer_foresp\u00f8rgsel_'%0'_med_hentev\u00e6rkt\u00f8jet_'%1'.
+Please_wait!=Vent_venligst!
+Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=Foresp\u00f8rgsel_'%0'_med_hentev\u00e6rkt\u00f8jet_'%1'_returnerede_ingen_resultater.
+Open_SPIRES_entry=\u00c5bn_SPIRES_post
+Move/Rename_file=Flyt/omd\u00f8b_fil
+File_moved=Fil_flyttet
+Move_file_failed=Flytning_af_fil_mislykkedes
+Could_not_move_file=Kunne_ikke_flytte_fil
+Could_not_find_file_'%0'.=Kunne_ikke_finde_filen_'%0'.
+Move/rename_file=Flyt/omd\u00f8b_fil
+Number_of_entries_successfully_imported=Antal_poster_korrekt_importeret
+Import_canceled_by_user=Import_afbrudt_af_bruger
+Progress\:_%0_of_%1=Fremskridt:_%0_af_%1
+Error_while_fetching_from_JSTOR=Fejl_under_hentning_fra_JSTOR
+Fetching_Medline_by_id...=Henter_fra_Medline_via_ID...
+Fetching_Medline_by_term...=Henter_fra_Medline_via_udtryk...
+Medline_import_canceled=Medline-import_afbrudt
+Please_enter_a_valid_number=Indtast_venligst_et_gyldigt_tal
+Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Indtast_venligst_en_kommasepareret_liste_af_Medline_IDer_(numre)_eller_s\u00f8geudtryk.
+An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=Fejl_under_hentning_fra_SPIRES_kilde_(%0)\:
+Error_while_fetching_from_Spires\:_=Fejl_under_hentning_fra_SPIRES\:_
+Connect_to_external_SQL_database=Tilslut_til_ekstern_SQL-database
+Export_to_external_SQL_database=Eksporter_til_ekstern_SQL-database
+
+Show_results_in_dialog=Vis_resultater_i_dialog
+Global_search=Global_s\u00f8gning
+Show_search_results_in_a_window=Vis_s\u00f8geresultater_i_et_vindue
+Search_results=S\u00f8geresultater
+Move_file_to_file_directory?=Flyt_fil_til_filbibliotek?
+Rename_to_'%0'=Omd\u00f8b_til_'%0'
+Move_to_file_directory=Flyt_til_filbibliotek
+
+You_have_changed_the_menu_and_label_font_size.=Du_har_\u00e6ndret_menu-_og_tekst-skriftst\u00f8rrelsen.
+
+Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Databasen_er_beskyttet._Kan_ikke_gemme_f\u00f8r_eksterne_\u00e6ndringer_er_gennemset.
+Protected_database=Beskyttet_database
+Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=N\u00e6gt_at_gemme_database_f\u00f8r_eksterne_\u00e6ndringer_er_gennemset.
+Database_protection=Database-beskyttelse
+Unable_to_save_database=Kan_ikke_gemme_database
+BibTeX_key_generator=BibTeX-n\u00f8glegenerator
+Unable_to_open_link.=Kan_ikke_\u00e5bne_link.
+Search_JSTOR=S\u00f8g_i_JSTOR
+Attempting_SQL_import...=Fors\u00f8ger_SQL-import...
+BibO_RDF=BibO_RDF
+HTML_parser=HTML-fortolker
+Move_the_keyboard_focus_to_the_entry_table=Flyt_tastatur-fokus_til_hovedtabellen
+MIME_type=MIME-type
+
+This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Denne_funktion_tillader,_at_flere_filer_kan_\u00e5bnes_eller_importeres_i_en_allerede_k\u00f8rende_JabRef<BR>i_stedet_for_at_\u00e5bne_programmet_p\u00e5ny._For_eksempel_er_dette_prak [...]
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Bem\u00e6rk_at_disse_indstillinger_kun_bruges_til_de_for\u00e6ldede_<b>pdf</b>-_og_<b>ps</b>-felter.<br>Det_skulle_v\u00e6re_tilstr\u00e6kkeligt_for_de_fleste_at_benytte_<b>Hovedbibliotek</b>-indstillingen_ovenfor.
+Legacy_file_fields=For\u00e6ldede_fil-felter
+
+This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dette_f\u00e5r_JabRef_til_at_sl\u00e5_hver_%0-endelse_op_og_tjekke,_om_filen_eksisterer._Hvis_ikke_vil_du_f\u00e5_mulighed_for_at<br>l\u00f8se_problemet.
+
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=K\u00f8r_hentev\u00e6rkt\u00f8j,_f.eks._"--fetch\=Medline\:cancer"
+
+The_ACM_Digital_Library=ACM_Digital_Library
+Reset=Nulstil
+
+Use_IEEE_LaTeX_abbreviations=Brug_IEEE-LaTeX-forkortelser
+The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
+Search_ACM_Portal=S\u00f8g_p\u00e5_ACM-portalen
+Connection_to_ACM_Portal_failed=Kunne_ikke_oprette_forbindelse_til_ACM-portalen
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=S\u00f8g_efter_en_matchende_fil,_n\u00e5r_der_\u00e5bnes_et_fil-link,_der_ikke_er_defineret
+Settings_for_%0=Indstillinger_for_%0
+Insert_selected_citations_into_Vim=Inds\u00e6t_valgte_referencer_i_Vim
+RIS=RIS
+Assign_exclusively_to_group=Tilf\u00f8j_udelukkende_til_gruppe
+Bad_Request_'%0'.=Ugyldig_foresp\u00f8rgsel_'%0'
+
+Mark_entries_imported_into_an_existing_database=M\u00e6rk_poster_som_importeres_til_en_eksisterende_database
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Fjern_m\u00e6rkning_fra_alle_poster_f\u00f8r_import_af_nye_poster_til_en_eksisterende_database
+
+Forward=Frem
+Back=Tilbage
+Sort_the_following_fields_as_numeric_fields=Sorter_f\u00f8lgende_felter_som_numeriske_felter
+Line_%0\:_Found_corrupted_BibTeX-key.=Linje_%0\:_Fandt_\u00f8delagt_BibTeX-n\u00f8gle.
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Linje_%0\:_Fandt_\u00f8delagt_BibTeX-n\u00f8gle_(indeholder_blanktegn).
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Linje_%0\:_Fandt_\u00f8delagt_BibTeX-n\u00f8gle_(manglende_komma).
+Finished_downloading_full_text_document=Download_af_fuldtekst-dokument_afsluttet
+Unable_to_find_full_text_document_in_the_linked_web_page.=Kunne_ikke_finde_fuldtekst-dokument_p\u00e5_den_linkede_webside.
+Connection_error_when_trying_to_find_full_text_document.=Forbindelsesfejl_under_fors\u00f8g_p\u00e5_at_finde_fuldtekst-dokument.
+This_entry_provides_no_URL_or_DOI_links.=Denne_post_indeholder_ingen_URL-_eller_DOI-links.
+Full_text_article_download_failed=Download_af_fuldtekst-dokument_mislykkedes
+Update_to_current_column_order=Brug_nuv\u00e6rende_kolonner\u00e6kkef\u00f8lge
+
+Rename_field=Omd\u00f8b_felt
+Set/clear/rename_fields=S\u00e6t/ryd/omd\u00f8b_felter
+Rename_field_to\:=Omd\u00f8b_felt_til_\:
+Move_contents_of_a_field_into_a_field_with_a_different_name=Flyt_indhold_af_et_felt_til_et_felt_med_et_andet_navn
+You_can_only_rename_one_field_at_a_time=Du_kan_kun_omd\u00f8be_et_felt_ad_gangen
+Remove_all_broken_links=Fjern_alle_\u00f8delagte_links
+
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Kan_ikke_bruge_port_%0_til_fjernstyring;_et_andet_program_bruger_den_m\u00e5ske._Pr\u00f8v_en_anden_port.
+
+Plugin_installer=Plugin-installationsprogram
+Unable_to_create_plugin_directory=Kan_ikke_oprette_pluginbibliotek
+Unable_to_copy_file=Kan_ikke_kopiere_fil
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Plugin_installeret._Genstart_JabRef_for_at_indl\u00e6se_den_nye_plugin.
+Unable_to_create_user_plugin_directory=Kan_ikke_oprette_bruger-pluginbibliotek
+Plugin_installation_failed.=Installation_af_plugin_mislykkedes.
+The_same_version_of_this_plugin_is_already_installed.=Samme_version_af_denne_plugin_er_allerede_installeret.
+A_newer_version_of_this_plugin_is_already_installed.=En_nyere_version_af_denne_plugin_er_allerede_installeret.
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=En_eller_flere_\u00e6ldre_versioner_af_denne_plugin_er_allerede_installeret._Skal_de_\u00e6ldre_slettes?
+Old_versions_deleted_successfully.=\u00c6ldre_versioner_korrekt_slettet.
+
+Install_plugin=Installer_plugin
+Download_plugin=Download_plugin
+Plugin_manager=Plugin-administration
+Delete_the_%0_selected_plugins?=Slet_de_%0_valgte_plugins?
+Delete_plugins=Slet_plugins
+Delete_the_selected_plugin?=Slet_den_valgte_plugin?
+Delete_plugin=Slet_plugin
+Enter_download_URL=Indtast_URL_til_download
+Plugin_name=Pluginnavn
+Version=Version
+Unknown=Ukendt
+Not_loaded=Ikke_indl\u00e6st
+Loaded=Indl\u00e6st
+Could_not_determine_version_of_=Kunne_ikke_fastsl\u00e5_version_af_
+Install_anyway?=Installer_alligevel?
+
+Looking_for_full_text_document...=S\u00f8ger_efter_tekstdokument...
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=F\u00f8lg_DOI-_eller_URL-link_og_fors\u00f8g_at_lokalisere_PDF-tekstdokument
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Kunne_ikke_finde_tekstdokument._Ingen_s\u00f8gealgoritme_defineret_for_webstedet_'%0'.
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=PDF-link_fundet,_men_forkert_MIME-type_modtaget._Dette_kan_indikere,_at_du_ikke_har_adgang_til_tekstdokumentet.
+
+Autosave=Automatisk_sikkerhedskopi
+Prompt_before_recovering_a_database_from_an_autosave_file=Sp\u00f8rg_f\u00f8r_en_database_genskabes_fra_en_automatisk_sikkerhedskopi.
+Autosave_interval_(minutes)=Automatisk_sikkerhedskopi-interval
+Do_you_want_to_recover_the_database_from_the_autosave_file?=Vil_du_genskabe_databasen_fra_sikkerhedskopien?
+Recover_from_autosave=Genskab_fra_sikkerhedskopi
+%0_warnings=%0_advarsler
+
+Save_in_current_table_sort_order=Gem_med_nuv\u00e6rende_tabel-sortering
+Export_in_current_table_sort_order=Eksporter_med_nuv\u00e6rende_tabel-sortering
+Export_ordered_by_author/editor/year=Eksporter_sorteret_efter_forfatter/redakt\u00f8r/\u00e5r
+Export_entries_in_their_original_order=Eksporter_poster_med_den_oprindelige_sortering
+Error_opening_file_'%0'.=Fejl_ved_\u00e5bning_af_filen_'%0'.
+Autosave_of_file_'%0'=Sikkerhedskopi_af_filen_'%0'
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Fejl_ved_\u00e5bning_af_sikkerhedskopi_af_'%0'._Fors\u00f8ger_at_\u00e5bne_'%0'_i_stedet.
+
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugins_installeret_i_dit_bruger-pluginbibliotek_(%0):
+Plugins_installed_in_other_locations\:=Plugins_installeret_andre_steder:
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=Plugins'ene_slettes,_n\u00e6ste_gang_JabRef_starter.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=Plugin'en_slettes,_n\u00e6ste_gang_JabRef_starter.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=\u00c6ldre_plugin-versioner_slettes,_n\u00e6ste_gang_JabRef_starter.
+
+Formatter_not_found\:_%0=Formatering_ikke_fundet:_%0
+The_following_formatters_could_not_be_found=De_f\u00f8lgende_formateringer_kunne_ikke_findes
+
+Clear_inputarea=Ryd_inputomr\u00e5de
+Automatically_set_file_links_for_this_entry=S\u00e6t_automatisk_fil-links_for_denne_post
+Could_not_save,_file_locked_by_another_JabRef_instance.=Kunne_ikke_gemme,_filen_er_l\u00e5st_af_en_anden_k\u00f8rende_JabRef.
+File_is_locked_by_another_JabRef_instance.=Filen_er_l\u00e5st_af_en_anden_k\u00f8rende_JabRef.
+Do_you_want_to_override_the_file_lock?=Vil_du_ignorere,_at_filen_er_l\u00e5st?
+File_locked=Fil_l\u00e5st
+Current_tmp_value=Aktuel_tmp-v\u00e6rdi
+Metadata_change=Metadata-\u00e6ndring
+Changes_have_been_made_to_the_following_metadata_elements=Der_er_\u00e6ndringer_i_f\u00f8lgende_metadata-elementer
+
+Generate_groups_for_author_last_names=Generer_grupper_for_forfatteres_efternavne
+Generate_groups_for_editor_last_names=Generer_grupper_for_redakt\u00f8rers_efternavne
+Generate_groups_from_keywords_in_a_BibTeX_field=Generer_grupper_ud_fra_n\u00f8gleord_i_et_BibTeX-felt
+Enforce_legal_characters_in_BibTeX_keys=H\u00e5ndh\u00e6v_tilladte_tegn_i_BibTex-n\u00f8gler
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Tegnet_#_er_ikke_tilladt_i_BibTeX-tekststrenge,_medmindre_det_skrives_som_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Ret_venligst_tekststrenge_indeholdende_#-tegnet,_f\u00f8r_du_gemmer.
+
+Save_without_backup?=Gem_uden_sikkerhedskopi?
+Unable_to_create_backup=Kan_ikke_oprette_sikkerhedskopi
+
+File_directory_is_not_set_or_does_not_exist.=Filbibliotek_er_ikke_specificeret_eller_eksisterer_ikke.
+Move_file_to_file_directory.=Flyt_fil_til_filbibliotek.
+Rename_file_to=Omd\u00f8b_fil_til
+<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Alle_poster</b>_(denne_gruppe_kan_ikke_redigeres_eller_flyttes)
+static_group=statisk_gruppe
+dynamic_group=dynamisk_gruppe
+refines_supergroup=afgr\u00e6nser_overgruppen
+includes_subgroups=inkluderer_undergrupper
+contains=indeholder
+search_expression=s\u00f8ge-udtry
+
+Disable_file_renaming_in_non-native_file_dialog=Deaktiver_omd\u00f8bning_af_filer_i_fil-dialogboks
+File_dialog=Fil-dialogboks
+No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Ingen_poster_fundet._Det_ser_ud_til,_at_du_ikke_har_adgang_til_at_s\u00f8ge_i_JStor.
+Search_ScienceDirect=S\u00f8g_i_ScienceDirect
+Error_while_fetching_from_ScienceDirect=Fejl_under_hentning_fra_ScienceDirect
+
+Error_initializing_custom_export_format_from_string_'%0'=Fejl_ved_initialisering_af_brugerdefineret_eksportformat_fra_tekststrengen_'%0'
+
+BibLaTeX_mode=BibLaTeX-tilstand
+Optional_fields_2=Valgfri_felter_2
+Please_wait=Vent_venligst
+Waiting_for_save_operation_to_finish=Venter_p\u00e5_gemme-operation
+Resolving_duplicate_BibTeX_keys...=Udreder_dublerede_BibTeX-n\u00f8gler...
+Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Udredning_af_dublerede_BibTeX-n\u00f8gler_afsluttet._%0_poster_\u00e6ndret.
+This_database_contains_one_or_more_duplicated_BibTeX_keys.=Denne_database_indeholder_en_eller_flere_dublerede_BibTeX-n\u00f8gler.
+Do_you_want_to_resolve_duplicate_keys_now?=Vil_du_udrede_dublerede_BibTeX-n\u00f8gler_nu?
+
+Find_and_remove_duplicate_BibTeX_keys=Find_og_fjern_dublederede_BibTeX-n\u00f8gler
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Forventet_syntaks_for_--fetch='<navn_p\u00e5_hentev\u00e6rkt\u00f8j>:<foresp\u00f8rgsel>'
+Duplicate_BibTeX_key=Dubleret_BibTeX-n\u00f8gle
+Duplicate_key=Dubleret_n\u00f8gle
+Generate_key=Generer_n\u00f8gle
+Import_marking_color=Farve_til_m\u00e6rkning_af_importerede_poster
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_poster_fundet._For_at_reducere_serverbelastningen_vil_kun_%1_poster_blive_hentet._Det_vil_g\u00e5_meget_langsomt_for_g\u00f8re_ACM_glade.
+BibTeX_importer=BibTeX-import\u00f8r
+Always_add_letter_(a,_b,_...)_to_generated_keys=Tilf\u00f8j_altid_bogstav_(a,_b,_...)_til_genererede_n\u00f8gler
+
+Ensure_unique_keys_using_letters_(a,_b,_...)=Garant\u00e9r_unikke_n\u00f8gler_med_bogstaver_(a,_b,_...)
+Ensure_unique_keys_using_letters_(b,_c,_...)=Garant\u00e9r_unikke_n\u00f8gler_med_bogstaver_(b,_c,_...)
+Entry_editor_active_background_color=Aktiv_baggrundsfarve_i_postredigering
+Entry_editor_background_color=Baggrundsfarve_i_postredigering
+Entry_editor_font_color=Tekstfarve_i_postredigering
+Entry_editor_invalid_field_color=Farve_p\u00e5_ugyldige_felter_i_postredigering
+
+Table_and_entry_editor_colors=Farver_i_tabel_og_postredigering
+
+An_autosave_file_was_found_for_this_database._This_could_indicate_=En_automatisk_sikkerhedskopi_af_denne_database_blev_fundet._Det_kunne_indikere_
+that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=at_JabRef_ikke_lukkede_korrekt_ned,_sidst_filen_var_i_brug.
+General_file_directory=Generelt_filbibliotek
+User-specific_file_directory=Brugerspecifikt_filbibliotek
+Error_setting_look_and_feel=Fejl_i_indstilling_af_"look_and_feel"
+Search_failed\:_illegal_search_expression=S\u00f8gning_fejlede:_illegalt_s\u00f8geudtryk
+Show_ArXiv_column=Vis_ArXiv-kolonne
+<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Udpak_zip-filen_med_import-/eksport-filtre_til_Endnote,<BR>for_optimal_interoperabilitet_med_JabRef</HTML>
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Fremh\u00e6v_grupper_der_indeholder_poster,_som_er_med_i_en_af_de_valgte_grupper
+
+You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=Der_skal_indtastes_et_heltal_i_intervallet_1025-65535_i_tekstfeltet_til
+Automatically_open_browse_dialog_when_creating_new_file_link=\u00c5bn_automatisk_fildialog_n\u00e5r_nyt_link_oprettes
+
+# Mr. dLib strings:
+Import_Metadata_from\:=Importer_metadata_fra:
+Choose_the_source_for_the_metadata_import=V\u00e6lg_kilde_for_import_af_metadata
+Create_entry_based_on_XMP_data=Opret_post_baseret_p\u00e5_XMP-data
+Create_entry_based_on_data_fetched_from=Opret_post_baseret_p\u00e5_data_fra
+Create_blank_entry_linking_the_PDF=Opret_tom_post_med_link_til_PDF-filen
+Only_attach_PDF=Tilf\u00f8j_kun_PDF
+Mr._dLib_Metadata_Entries_Associated_With\:=Mr._dLib_metadata_poster_associeret_med:
+Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr._dLib_metadata_poster_associeret_med_PDF-fil
+Title=Titel
+Author(s)=Forfatter(e)
+Published_Year=Udgivelses\u00e5r
+No_metadata_found.=Ingen_metadata_fundet.
+Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib_web-servicen_er_midlertidigt_utilg\u00e6ngelig.
+Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib_web-servicen_er_midlertidigt_nede._Pr\u00f8v_venligst_igen_senere.
+You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Du_er_ikke_forbundet_til_Internettet._For_at_tilg\u00e5_Mr._dLib_web-servicen_kr\u00e6ves_en_Internetforbindelse.
+No_Internet_Connection.=Ingen_Internetforbindelse.
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Denne_version_af_JabRef_pr\u00f8ver_at_tilg\u00e5_en_version_af_Mr._dLib_web-servicen,_som_ikke_l\u00e6ngere_er_tilg\u00e6ngelig.\nSe_venligst_http://jabref.sourceforge.net_eller_http://www.mr-dlib.org_for_mere_information_og_opdateringer.
+Web_Service_Version_Outdated=Web-service-version_for\u00e6ldet
+The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Mr._dLib_web-service-versionen,_du_pr\u00f8ver_at_tilg\u00e5,_er_for\u00e6ldet.
+Update_empty_fields_with_data_fetched_from=Opdater_tomme_felter_med_data_hentet_fra
+Create_New_Entry=Opret_ny_post
+Update_Existing_Entry=Opdater_eksisterende_post
+Mr._dLib=Mr._dLib
+More_information=Mere_information
+Fetching_Metadata...=Henter_metadata...
+Metadata=Metadata
+Autocomplete_names_in_'Firstname_Lastname'_format_only=Autofuldf\u00f8r_kun_navne_i_formatet_'Fornavn_Efternavn'
+Autocomplete_names_in_'Lastname,_Firstname'_format_only=Autofuldf\u00f8r_kun_navne_i_formatet_'Efternavn,_Fornavn'
+Autocomplete_names_in_both_formats=Autofuldf\u00f8r_navne_i_begge_formater
+Marking_color_%0=M\u00e6rkningsfarve_%0
+The_name_'comment'_can_not_be_used_as_an_entry_type_name.=Navnet_'comment'_kan_ikke_bruges_som_navn_p\u00e5_en_posttype.
+You_must_enter_an_integer_value_in_the_text_field_for=Der_skal_indtastes_et_heltal_i_tekstfeltet_til
+File_directory=Filbibliotek
+Send_as_email=Send_som_email
+References=Referencer
+Sending_of_emails=Afsendelse_af_emails
+Subject_for_sending_an_email_with_references=Emne_for_afsendelse_af_en_email_med_referencer
+Automatically_open_folders_of_attached_files=\u00c5bn_automatisk_biblioteker_for_vedh\u00e6ftede_filer
+Create_entry_based_on_content=Opret_post_baseret_p\u00e5_indhold
+Store_choice_as_default=Gem_valg_som_standard
+Do_not_show_this_box_again_for_this_import=Vis_ikke_denne_dialogboks_igen_for_denne_import
+Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Brug_altid_denne_PDF-importstil_(og_sp\u00f8rg_ikke_for_hver_enkelt_import)
+Error_creating_email=Fejl_ved_oprettelse_af_email
+Could_not_open_directory=Kunne_ikke_\u00e5bne_bibliotek
+Entries_added_to_an_email=Poster_tilf\u00f8jet_til_en_email
+exportFormat=Eksportformat
+Output_file_missing=Output-fil_mangler
+No_search_matches.=Ingen_s\u00f8geresultater.
+The_output_option_depends_on_a_valid_input_option.=Outputindstilling_kr\u00e6ver_en_gyldig_inputindstilling.
+Default_import_style_for_drag&drop_of_PDFs=Standard_importstil_for_tr\u00e6k&slip_af_PDFer
+Default_PDF_file_link_action=Standard_PDF_fillink-handling
+File_name_format_pattern=Filnavn-formatskabelon
+PostgreSQL_database=PostgreSQL-database
+DIN_1505=DIN_1505
+Wrong_Format=Forkert_format
+Path_to_gnuclient_or_emacsclient=Sti_til_gnuclient_eller_emacsclient
+Additional_parameters=Yderligere_parametre
+Encrypted_documents_are_not_supported=Krypterede_dokumenter_underst\u00f8ttes_ikke
+Cite_selected_entries=Referer_valgte_poster
+Cite_selected_entries_with_in-text_citation=Referer_valgte_poster_med_reference_i_teksten
+Cite_special=Specialreference
+Extra_information_(e.g._page_number)=Ekstra_information_(f.eks._sidenr.)
+Manage_citations=Administrer_referencer
+Problem_modifying_citation=Der_opstod_et_problem_med_at_\u00e6ndre_referencen
+Citation=Reference
+Context=Kontekst
+Extra_information=Ekstra_information
+Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=Kunne_ikke_udrede_BibTeX-post_for_referencen_'%0'.
+Styles=Stile
+Select_style=V\u00e6lg_stil
+This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Dette_er_listen_over_tilg\u00e6ngelige_stile._V\u00e6lg_den_du_\u00f8nsker_at_bruge.
+Journals=Tidsskrifter
+Cite=Referer
+Cite_in-text=Referer_i_teksten
+Insert_empty_citation=Inds\u00e6t_tom_reference
+Merge_citations=Sammenf\u00f8j_referencer
+Manual_connect=Manuel_tilslutning
+Select_Writer_document=V\u00e6lg_Writer-dokument
+Sync_OO_bibliography=Synkroniser_med_OO-bibliografi
+OpenOffice=OpenOffice
+Select_which_open_Writer_document_to_work_on=V\u00e6lg_hvilket_\u00e5bent_Writer-dokument_du_vil_arbejde_p\u00e5
+Connected_to_document=Forbundet_til_dokument
+Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Inds\u00e6t_en_reference_uden_tekst_(referencen_optr\u00e6der_i_referencelisten)
+Cite_selected_entries_with_extra_information=Referer_valgte_poster_med_ekstra_information
+Ensure_that_the_bibliography_is_up-to-date=S\u00f8rg_for_at_bibliografien_er_opdateret
+Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=Dit_OpenOffice-dokument_refererer_til_BibTeX-n\u00f8glen_'%0',_som_ikke_kunne_findes_i_din_aktuelle_database.
+Unable_to_synchronize_bibliography=Kunne_ikke_synkronisere_bibliografi
+Combine_pairs_of_citations_that_are_separated_by_spaces_only=Kombiner_referencepar_der_kun_er_adskilt_med_mellemrum
+Autodetection_failed=Autodetektion_fejlede
+Connecting=Tilslutter
+Please_wait...=Vent_venligst...
+Unable_to_connect=Kunne_ikke_tilslutte
+Set_connection_parameters=Ops\u00e6t_forbindelsesindstillinger
+Path_to_OpenOffice_directory=Sti_til_OpenOffice-bibliotek
+Path_to_OpenOffice_executable=Sti_til_OpenOffice-programfil
+Path_to_OpenOffice_library_dir=Sti_til_OpenOffice-biblioteksfil
+Autodetect=Autodetekter
+Connection_lost=Forbindelse_tabt
+The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Afsnitsformatet_styres_af_indstillingen_'ReferenceParagraphFormat'_eller_'ReferenceHeaderParagraphFormat'_i_stil-filen.
+The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Tegnformatet_styres_af_referenceindstillingen_'CitationCharacterFormat'_i_stil-filen.
+Automatically_sync_bibliography_when_inserting_citations=Synkroniser_automatisk_bibliografi_n\u00e5r_der_inds\u00e6ttes_referencer
+Look_up_BibTeX_entries_in_the_active_tab_only=Sl\u00e5_kun_BibTeX-poster_op_i_det_aktive_faneblad
+Look_up_BibTeX_entries_in_all_open_databases=Sl\u00e5_BibTeX-poster_op_i_alle_\u00e5bne_databaser
+Use_in-parenthesis_citation=Brug_referencer_i_parentes
+Use_in-text_citation=Brug_referencer_i_teksten
+Autodetecting_paths...=Autodetekterer_stier
+Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=Kunne_ikke_autodetektere_OpenOffice-installation._V\u00e6lg_venligst_installationsbibliotek_manuelt.
+Could_not_find_OpenOffice_installation=Kunne_ikke_finde_OpenOffice-installation
+Directories=Biblioteker
+Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Fandt_mere_end_en_OpenOffice-programfil._V\u00e6lg_venligst_hvilken_der_skal_tilsluttes_til:
+Choose_OpenOffice_executable=V\u00e6lg_OpenOffice-programfil
+Select_document=V\u00e6lg_dokument
+Edit_Group_Membership=Rediger_gruppemedlemsskab
+PostgreSQL=PostgreSQL
+Highlight_Words=Fremh\u00e6v_ord
+JSTOR_import_cancelled=JSTOR_import_afbrudt
+HTML_list=HTML-liste
+Click_group_to_toggle_membership_of_selected_entries=Klik_p\u00e5_gruppe_for_at_\u00e6ndre_medlemsskab_for_de_valgte_poster
+Use_EMACS_23_insertion_string=Brug_EMACS_23-inds\u00e6tningstekststreng
+Normalize_to_BibTeX_name_format=
+If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=
+Could_not_open_%0=Kunne_ikke_\u00e5bne_%0
+Unknown_import_format=
+Open_INSPIRE_entry=
+An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=
+Error_while_fetching_from_Inspire\:_=
+Web_search=
+Autocomplete_names=
+You_must_select_either_a_valid_style_file,_or_use_the_default_style.=
+
+Default_style=
+Choose_style_file_directly=
+Choose_from_a_directory=
+No_directory_defined_for_%0-files=
+Allow_file_links_relative_to_each_bib_file's_location=
+Style_selection=
+The_panel_below_shows_the_definition_of_the_default_style.=
+If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=
+
+Default_style_(author-year_citations)=
+Default_style_(numerical_citations)=
+No_valid_style_file_defined=
+Choose_pattern=
+Use_the_bib_file_location_as_primary_file_directory=
+Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=
+Built-in_journal_list=
+OpenOffice/LibreOffice_connection=
+You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=
+JabRef_includes_a_built-in_list_of_journal_abbreviations.=
+You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=
+You_must_select_either_a_valid_style_file,_or_use_a_default_style.=
+Show=
+
+This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=
+Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=
+
+This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=
+You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=
+First_select_entries_to_clean_up.=
+Cleanup_entry=
+Autogenerate_PDF_Names=
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=
+File_rename_failed_for=
+You_have_toggled_the_BibLaTeX_mode.=
+Use_full_firstname_whenever_possible=
+Use_abbreviated_firstname_whenever_possible=
+Use_abbreviated_and_full_firstname=
+Autocompletion_options=
+Autocomplete_after_following_number_of_characters=
+Name_format_used_for_autocompletion=
+Treatment_of_first_names=
+No_icon_found_for_%0=
+Cleanup_entries=
+Automatically_assign_new_entry_to_selected_groups=
+Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
+Format_content_of_month_field_to_#mon#=
+Ensure_that_page_ranges_are_of_the_form_num1--num2=
+Make_paths_of_linked_files_relative_(if_possible)=
+Rename_PDFs_to_given_file_name_format_pattern=
+Rename_only_PDFs_having_a_relative_path=
+What_would_you_like_to_clean_up?=
+Doing_a_cleanup_for_%0_entries...=
+No_entry_needed_a_clean_up=
+One_entry_needed_a_clean_up=
+%0_entries_needed_a_clean_up=
+Imported_=
+Error_importing_from_database=
+Minimize_to_system_tray=
+Incomplete_search_results=
+%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=
+
+Error_downloading_file_'%0'=
+Download_failed=
+%0_databases_will_be_imported=
+Importing_cancelled=
+There_are_no_available_databases_to_be_imported=
+Import_from_SQL_database=
+Imported_%0_databases_successfully=
+<_CREATE_NEW_DATABASE_>=
+Remove_Selected=
+SQL_Database_Exporter=
+Select_target_SQL_database\:=
+SQL_Database_Importer=
+Please_select_which_JabRef_databases_do_you_want_to_import\:=
+
+Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
+Attach_file=
+
+Setting_all_preferences_to_default_values.=
+Resetting_preference_key_'%0'=
+Unknown_preference_key_'%0'=
+Unable_to_clear_preferences.=
+
+Reset_preferences_(key1,key2,..._or_'all')=
+Find_unlinked_files=
+Select_All=
+Unselect_All=
+Expand_All=
+Collapse_All=
+Select_Directory=
+Choose_Directory=
+Use_the_selected_directory_to_start_with_the_search.=
+Browse...=
+Opens_the_file_browser.=
+Scan_directory=
+Searches_the_selected_directory_for_unlinked_files.=
+Starts_the_import_of_bibtex_entries.=
+Leave_this_dialog.=
+Create_directory_based_keywords=
+Creates_keywords_in_created_entrys_with_directory_pathnames=
+Select_a_directory_where_the_search_shall_start.=
+Select_file_type\:=
+These_files_are_not_linked_in_the_active_database.=
+Entry_type_to_be_created\:=
+Searching_file_system...=
+Importing_into_Database...=
+Select_directory=
+Select_files=
+Bibtex_entry_creation=
+<No_selection>=
+Push_selection_to_TeXstudio=
+Path_to_TeXstudio=
+Program_'%0'_not_found=
+Pushed_citations_to_TeXstudio=
+Unable_to_connect_to_freecite_online_service.=
+Parse_with_FreeCite=
+Insert_selected_citations_into_TeXstudio=
+The_current_BibTeX_key_will_be_overwritten._Continue?=
+Overwrite_key=
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
+An_Error_occurred_while_fetching_from_ADS_(%0)\:=
+Error_while_fetching_from_ADS=
+Error_while_fetching_from_OAI2=
+An_Error_occurred_while_parsing_abstract=
+Unknown_DiVA_entry\:_'%0'.=
+Get_BibTeX_entry_from_DiVA=
+Log=
+Remove_unneccessary_$,_{,_and_}=
diff --git a/src/resource/JabRef_de.properties b/src/resource/JabRef_de.properties
index ec0f68a..ee240db 100644
--- a/src/resource/JabRef_de.properties
+++ b/src/resource/JabRef_de.properties
@@ -1,2450 +1,2450 @@
-#!
-#! created/edited by Popeye version 0.55 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-
-%0_contains_the_Regular_Expression_<b>%1</b>=%0_den_regul\u00e4ren_Ausdruck_<b>%1</b>_enth\u00e4lt
-
-%0_contains_the_term_<b>%1</b>=%0_den_Ausdruck_<b>%1</b>_enth\u00e4lt
-
-%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_nicht_den_regul\u00e4ren_Ausdruck_<b>%1</b>_enth\u00e4lt
-
-%0_doesn't_contain_the_term_<b>%1</b>=%0_nicht_den_Ausdruck_<b>%1</b>_enth\u00e4lt
-
-%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_nicht_exakt_dem_regul\u00e4ren_Ausdruck_<b>%1</b>_entspricht
-
-%0_doesn't_match_the_term_<b>%1</b>=%0_nicht_exakt_dem_Ausdruck_<b>%1</b>_entspricht
-
-%0_export_successful=%0-Export_erfolgreich
-
-%0_field_set=%0-Feld_erstellt
-
-%0_matches_the_Regular_Expression_<b>%1</b>=%0_exakt_dem_regul\u00e4ren_Ausdruck_<b>%1</b>_entspricht
-
-%0_matches_the_term_<b>%1</b>=%0_exakt_dem_Ausdruck_<b>%1</b>_entspricht
-
-<field_name>=<Feldname>
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Die_Datei_'%0',_die_vom_Eintrag<BR>'%1'_verlinkt_wird,_wurde_nicht_gefunden</HTML>
-
-<no_field>=<kein_Feld>
-
-<select>=<ausw\u00e4hlen>
-
-<select_word>=<Wort_ausw\u00e4hlen>
-A_string_with_this_label_already_exists=Ein_String_mit_diesem_Label_ist_bereits_vorhanden
-Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Zeitschriftentitel_der_ausgew\u00e4hlten_Eintr\u00e4ge_abk\u00fcrzen_(ISO-Abk\u00fcrzung)
-Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Zeitschriftentitel_der_ausgew\u00e4hlten_Eintr\u00e4ge_abk\u00fcrzen_(MEDLINE-Abk\u00fcrzung)
-
-Abbreviate_names=Namen_abk\u00fcrzen
-Abbreviated_%0_journal_names.=%0_Zeitschriftentitel_abgek\u00fcrzt.
-
-Abbreviation=Abk\u00fcrzung
-
-About_JabRef=\u00dcber_JabRef
-
-Abstract=Zusammenfassung
-
-Accept=\u00dcbernehmen
-
-Accept_change=\u00c4nderung_akzeptieren
-
-Action=Aktion
-
-Add=Hinzuf\u00fcgen
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=F\u00fcge_eine_(kompilierte)_externe_ImportFormat_Klasse_aus_einem_Verzeichnis_hinzu._\nDas_Verzeichnis_muss_nicht_im_Klassenpfad_von_JabRef_enthalten_sein.
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=F\u00fcge_eine_(kompilierte)_externe_ImportFormat_Klasse_aus_Verzeichnis_hinzu._\nDas_Verzeichnis_muss_nicht_im_Klassenpfad_von_JabRef_enthalten_sein.
-
-add_entries_to_group=Eintr\u00e4ge_zu_Gruppe_hinzuf\u00fcgen
-
-Add_entry_selection_to_this_group=Ausgew\u00e4hlte_Eintr\u00e4ge_zu_dieser_Gruppe_hinzuf\u00fcgen
-
-Add_from_folder=Aus_Klassenpfad_hinzuf\u00fcgen
-
-Add_from_jar=Aus_Archiv-Datei_hinzuf\u00fcgen
-
-add_group=Gruppe_hinzuf\u00fcgen
-
-Add_Group=Gruppe_hinzuf\u00fcgen
-
-Add_new=Neu
-
-Add_Subgroup=Untergruppe_hinzuf\u00fcgen
-
-Add_to_group=Zu_Gruppe_hinzuf\u00fcgen
-
-Added_group_"%0".=Gruppe_"%0"_hinzugef\u00fcgt.
-
-Added_new=Neu_hinzugef\u00fcgt
-
-Added_string=String_hinzugef\u00fcgt
-
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Zus\u00e4tzlich_k\u00f6nnen_Eintr\u00e4ge,_deren_Feld_<b>%0</b>_nicht_< [...]
-
-Advanced=Erweitert
-All_custom_file_types_will_be_lost._Proceed?=Alle_angepassten_Dateitypen_gehen_verloren._Fortfahren?
-
-All_Entries=Alle_Eintr\u00e4ge
-
-All_entries=Alle_Eintr\u00e4ge
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Alle_Eintr\u00e4ge_dieses_Typs_werden_als_'ohne_Typ'_angesehen._Fortfahren?
-
-All_fields=Alle_Felder
-
-All_subgroups_(recursively)=Alle_Untergruppen_(rekursiv)
-
-Allow_editing_in_table_cells=Bearbeiten_in_der_Tabelle_zulassen
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Fehler_beim_Abrufen_der_OAI2-Quelle_(%0):
-An_Exception_ocurred_while_accessing_'%0'=Fehler_beim_Zugriff_auf_'%0'
-An_SAXException_ocurred_while_parsing_'%0'\:=Beim_Parsen_von_'%0'_ist_eine_SAX-Exception_aufgetreten:
-
-and=und
-and_inside_the_JabRef-jar\:=und_in_JabRef-jar:
-
-and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=Au\u00dferdem_muss_die_Klasse_beim_n\u00e4chsten_Start_von_JabRef_durch_den_"Classpath"_erreichbar_sein.
-
-any_field_that_matches_the_regular_expression_<b>%0</b>=ein_beliebiges_Feld,_auf_das_der_regul\u00e4re_Ausdruck_<b>%0</b>_passt,
-
-Appearance=Erscheinungsbild
-
-Append=anf\u00fcgen
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Inhalt_einer_BibTeX-Datei_an_die_aktuelle_Datei_anh\u00e4ngen
-
-Append_database=Datei_anh\u00e4ngen
-
-append_the_selected_text_to_bibtex_key=ausgew\u00e4hlten_Text_an_BibTeX-Key_anh\u00e4ngen
-Application=Anwendung
-
-Apply=\u00dcbernehmen
-
-Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argumente_wurden_der_laufenden_JabRef-Instanz_\u00fcbergeben._Schlie\u00dfen_l\u00e4uft.
-
-Assign_entry_selection_exclusively_to_this_group=Ausgew\u00e4hlte_Eintr\u00e4ge_ausschlie\u00dflich_dieser_Gruppe_zuordnen
-
-Assign_new_file=Neue_Datei_zuordnen
-
-Assign_the_original_group's_entries_to_this_group?=Eintr\u00e4ge_der_urspr\u00fcnglichen_Gruppe_zu_dieser_Gruppe_hinzuf\u00fcgen?
-
-Assigned_%0_entries_to_group_"%1".=%0_Eintr\u00e4ge_zu_Gruppe_"%1"_hinzugef\u00fcgt.
-
-Assigned_1_entry_to_group_"%0".=1_Eintrag_zu_Gruppe_"%0"_hinzugef\u00fcgt.
-At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=Zumindest_das_Plugin_'net.sf.jabref.core'_muss_vorhanden_sein.
-
-Attach_%0_file=Datei_%0_anf\u00fcgen
-
-Attach_URL=URL_anf\u00fcgen
-
-Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Versucht,_%0-Links_f\u00fcr_die_Eintr\u00e4ge_automatisch_zuzuordnen._Dies_funktioniert,_wenn_der_Name_einer_%0-Datei_im_%0-Verzeichnis_oder_einem_Unterverzeichnis<BR>identisch_ist_mit_dem_BibTeX-Key_eines_Eintrags_(erweitert_um_die_jeweilige_Dateiendung).
-Attempting_SQL_export...=Versuche_SQL-Export...
-
-Auto=Auto
-
-Autodetect_format=Format_automatisch_erkennen
-
-Autogenerate_BibTeX_key=BibTeX-Key_automatisch_generieren
-Autogenerate_BibTeX_keys=BibTeX-Keys_automatisch_generieren
-
-Autogenerate_groups=Gruppen_automatisch_erstellen
-
-autogenerate_keys=BibTeX-Keys_automatisch_generieren
-
-
-Autolink_files_with_names_starting_with_the_BibTeX_key=Dateien,_deren_Namen_mit_dem_BibTeX-Key_beginnen,_automatisch_verlinken
-Autolink_only_files_that_match_the_BibTeX_key=Nur_Dateien_verlinken,_deren_Namen_dem_BibTeX-Key_entsprechen
-
-Automatically_create_groups=Gruppen_automatisch_erstellen
-
-Automatically_create_groups_for_database.=Automatisch_Gruppen_f\u00fcr_die_Datei_anlegen.
-
-Automatically_created_groups=Automatisch_erzeugte_Gruppen
-
-Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Gruppenansicht_automatisch_ausblenden,_wenn_zu_einer_Datei_ohne_Gruppen_gewechselt_wird
-
-
-Automatically_remove_exact_duplicates=Exakte_Duplikate_automatisch_l\u00f6schen
-
-Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Gruppenansicht_automatisch_einblenden,_wenn_zu_einer_Datei_mit_Gruppen_gewechselt_wird
-
-Autoset=Automatisch_zuordnen
-
-Autoset_%0_field=Feld_%0_automatisch_setzen
-
-Autoset_%0_links._Allow_overwriting_existing_links.=%0_Links_automatisch_zuordnen._Vorhandene_Links_\u00fcberschreiben.
-
-Autoset_%0_links._Do_not_overwrite_existing_links.=%0_Links_automatisch_zuordnen._Vorhandene_Links_nicht_\u00fcberschreiben.
-Autoset_external_links=Externe_Links_werden_automatisch_gesetzt
-Autosetting_links=Links_werden_automatisch_gesetzt
-
-AUX_file_import=AUX_Datei_Import
-
-Available_export_formats=Verf\u00fcgbare_Exportformate
-
-Available_fields=Verf\u00fcgbare_BibTeX-Felder
-
-Available_import_formats=Verf\u00fcgbare_Importformate
-
-Background_color_for_optional_fields=Hintergrundfarbe_f\u00fcr_optionale_Felder
-
-Background_color_for_required_fields=Hintergrundfarbe_f\u00fcr_ben\u00f6tigte_Felder
-
-Backup_old_file_when_saving=Beim_Speichern_ein_Backup_der_alten_Datei_anlegen
-Beta_version=Beta-Version
-
-Bibkey_to_filename_conversion=Konvertierung_von_BibTeX-Key_zu_Dateiname
-
-BibTeX_key=BibTeX-Key
-
-BibTeX_key_is_unique.=Der_BibTeX-Key_ist_eindeutig.
-
-BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Kein_BibTeX-Key_vorhanden._Bitte_Dateinamen_zum_Download_angeben
-
-BibTeX_source=BibTeX-Quelltext
-
-BibTeXML=BibTeXML
-
-Binding=Tastenk\u00fcrzel
-Broken_link=Ung\u00fcltiger_Link
-
-Browse=Durchsuchen
-
-by=durch
-
-Calling_external_viewer...=Externes_Anzeigeprogramm_wird_aufgerufen
-
-Cancel=Abbrechen
-
-Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Eintr\u00e4ge_k\u00f6nnen_einer_Gruppe_nicht_hinzugef\u00fcgt_werden,_ohne_Keys_zu_generieren._Sollen_die_Keys_jetzt_generiert_werden?
-
-Cannot_merge_this_change=Kann_diese_\u00c4nderung_nicht_einf\u00fcgen
-
-Cannot_move_group_"%0"_down.=Gruppe_"%0"_kann_nicht_nach_unten_bewegt_werden.
-
-Cannot_move_group_"%0"_left.=Gruppe_"%0"_kann_nicht_nach_links_bewegt_werden.
-
-Cannot_move_group_"%0"_right.=Gruppe_"%0"_kann_nicht_nach_rechts_bewegt_werden.
-
-Cannot_move_group_"%0"_up.=Gruppe_"%0"_kann_nicht_nach_oben_bewegt_werden.
-
-case_insensitive=Gro\u00df-/Kleinschreibung_wird_nicht_unterschieden
-
-case_sensitive=Gro\u00df-/Kleinschreibung_wird_unterschieden
-
-Case_sensitive=Gro\u00df-/Kleinschreibung_unterscheiden
-
-change_assignment_of_entries=\u00c4nderung_der_zugewiesenen_Eintr\u00e4ge
-
-# The following are for case change in right-click menu in entry editor. The last four
-# illustrate the four variations of capitalization
-Change_case=Gro\u00df-_und_Kleinschreibung
-
-Change_entry_type=Eintragstyp_\u00e4ndern
-
-Change_file_type=Dateityp_\u00e4ndern
-
-change_key=BibTeX-Key_\u00e4ndern
-
-Change_of_Grouping_Method=\u00c4ndern_der_Gruppierungsmethode
-
-change_preamble=Pr\u00e4ambel_\u00e4ndern
-
-change_string_content=Inhalt_des_Strings_\u00e4ndern
-
-change_string_name=Namen_des_Strings_\u00e4ndern
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=Tabellenspalte_und_Einstellungen_der_Allgemeinen_Felder_\u00e4ndern,_um_die_neue_Funktion_zu_nutzen
-
-change_type=Typ_\u00e4ndern
-
-changed_=ge\u00e4ndert_
-
-Changed_font_settings=Schrifteinstellungen_ge\u00e4ndert
-
-Changed_language_settings=Spracheinstellungen_ge\u00e4ndert.
-
-Changed_look_and_feel_settings="Look_and_Feel"-Einstellungen_ge\u00e4ndert
-
-Changed_preamble=Pr\u00e4ambel_ge\u00e4ndert
-
-Changed_type_to=Typ_ge\u00e4ndert_zu
-
-Characters_to_ignore=Folgende_Zeichen_ignorieren
-
-Check_existing_%0_links=Existierende_%0-Links_\u00fcberpr\u00fcfen
-
-Check_links=Links_\u00fcberpr\u00fcfen
-
-Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=URL_zum_Herunterladen_ausw\u00e4hlen._Der_Standardwert_f\u00fchrt_zu_einer_Liste,_die_von_den_JabRef-Entwicklern_zur_Verf\u00fcgung_gestellt_wird.
-Cite_command=Cite-Befehl
-
-Class_name=Klassenname
-
-Clear=Zur\u00fccksetzen
-
-clear_all_groups=Alle_Gruppen_l\u00f6schen
-
-Clear_field=Feld_l\u00f6schen
-
-Clear_fields=Felder_l\u00f6schen
-
-Clear_highlight=Markierten_l\u00f6schen
-
-Close=Schlie\u00dfen
-
-Close_dialog=Dialog_schlie\u00dfen
-
-Close_the_current_database=Aktuelle_Datei_schlie\u00dfen
-
-Close_the_help_window=Hilfefenster_schlie\u00dfen
-
-Close_window=Fenster_schlie\u00dfen
-
-Closed_database=Datei_geschlossen
-
-Collapse_subtree=Unterbaum_zuklappen
-
-Color_codes_for_required_and_optional_fields=Farbanzeige_f\u00fcr_ben\u00f6tigte_und_optionale_Felder
-
-Color_for_marking_incomplete_entries=Farbe_zum_Markieren_unvollst\u00e4ndiger_Eintr\u00e4ge
-
-Column_width=Spaltenbreite
-
-Command_line_id=Kommandozeilen_ID
-
-Complete_record=Kompletter_Eintrag
-Connect=Verbinden
-Connect_to_SQL_database=Mit_SQL-Datenbank_verbinden
-Connect_to_SQL_Database=Mit_SQL-Datenbank_verbinden
-Connection_to_IEEEXplore_failed=Verbindung_zu_IEEEXplore_fehlgeschlagen
-
-Contained_in=Enthalten_in
-
-Content=Inhalt
-
-Copied=Kopiert
-
-Copied_cell_contents=Zelleninhalt_kopiert
-
-Copied_key=BibTeX-Key_kopiert
-
-Copied_keys=BibTeX-Keys_kopiert
-
-Copy=Kopieren
-
-Copy_BibTeX_key=BibTeX-Key_kopieren
-Copy_file_to_file_directory.=Datei_in_das_Dateiverzeichnis_kopieren.
-Copy_files_to_file_directory.=Dateien_in_das_Dateiverzeichnis_kopieren.
-
-Copy_to_clipboard=In_die_Zwischenablage_kopieren
-
-Could_not_call_executable=Konnte_das_Programm_nicht_aufrufen
-
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Konnte_zu_keinem_aktiven_gnuserv-Prozess_verbinden._Vergewissern_Sie_sich,_dass_(X)Emacs_l\u00e4uft,<BR>und_dass_der_Server_gestartet_wurde_(mit_dem_Befehl_'gnuserv-start').
-
-# I have reformulated the following lines, because the 1st person form is not suitable:
-Could_not_connect_to_host_=Verbindung_zum_Host_fehlgeschlagen
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Verbindung_zum_Vim-Server_fehlgeschlagen._Vergewissern_Sie_sich,<br>dass_Vim_mit_korrektem_Servernamen_l\u00e4uft.
-
-Could_not_export_file=Konnte_Datei_nicht_exportieren
-
-Could_not_export_preferences=Einstellungen_konnten_nicht_exportiert_werden
-
-Could_not_find_a_suitable_import_format.=Kein_passendes_Importformat_gefunden.
-Could_not_find_directory_for_%0-files\:_%1=Verzeichnis_f\u00fcr_%0-Dateien_wurde_nicht_gefunden:_%1
-Could_not_find_image_file=Bilddatei_nicht_gefunden.
-
-Could_not_find_layout_file=Keine_Layoutdatei_gefunden
-
-Could_not_import_preferences=Einstellungen_konnten_nicht_importiert_werden
-
-Could_not_instantiate_%0=Konnte_Importer_nicht_erzeugen_%0
-Could_not_instantiate_%0_%1=Konnte_Importer_nicht_erzeugen_%0_%1
-
-Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Konnte_%0_nicht_realisieren._Haben_Sie_den_richtigen_Paket-Pfad_angegeben?
-
-Could_not_open_link=Link_konnte_nicht_ge\u00f6ffnet_werden
-
-Could_not_parse_number_of_hits=Anzahl_der_Treffer_konnte_nicht_ermittelt_werden
-Could_not_print_preview=Druckvorschau_fehlgeschlagen
-Could_not_run_the_'vim'_program.=Das_Programm_'vim'_konnte_nicht_gestartet_werden.
-
-Could_not_save_file=Datei_konnte_nicht_gespeichert_werden
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Die_Datei_konnte_nicht_gespeichert_werden._Die_Zeichenkodierung_'%0'_wird_nicht_unterst\u00fctzt.
-
-Create_group=Gruppe_anlegen
-
-Created_groups.=Gruppen_erstellt.
-
-crossreferenced_entries_included=Inklusive_querverwiesenen_Eintr\u00e4gen
-
-Current_content=Aktueller_Inhalt
-
-Current_value=Aktueller_Wert
-
-Custom_entry_types=Benutzerdefinierte_Eintragstypen
-
-Custom_entry_types_found_in_file=Benutzerdefinierte_Eintragstypen_gefunden
-Custom_icon_theme=Pers\u00f6nliches_Icon-Theme
-Custom_icon_theme_file=Datei_des_pers\u00f6nlichen_Icon-Themes
-
-Custom_importers=Externe_Importfilter
-
-Customize_entry_types=Eintragstypen_anpassen
-
-Customize_key_bindings=Tastenk\u00fcrzel_anpassen
-
-Cut=Ausschneiden
-
-cut_entries=Eintr\u00e4ge_ausschneiden
-
-cut_entry=Eintrag_ausschneiden
-
-Cut_pr=Ausschneiden
-Database_\:=Datenbank:
-
-Database_encoding=Zeichenkodierung_der_Datei
-
-Database_has_changed._Do_you_want_to_save_before_closing?=Die_Datei_wurde_ge\u00e4ndert._Wollen_Sie_vor_dem_Beenden_speichern?
-
-Database_properties=Eigenschaften_der_Datei
-
-Date_format=Datumsformat
-
-Default=Standard
-
-Default_encoding=Standard-Zeichenkodierung
-
-Default_grouping_field=Standard_Gruppierungs-Feld
-
-Default_look_and_feel=Standard_"look_and_feel"
-
-Default_pattern=Standardmuster
-
-Default_sort_criteria=Standard-Sortierkriterium
-Define_'%0'=Definiere_'%0'
-
-Delete=L\u00f6schen
-
-Delete_custom_format=Format_des_Eintragstyps_l\u00f6schen
-
-# I have reformulated the following lines, because the 1st person form is not suitable:
-# (Folgende_URL_konnte_nicht_analysiert_werden)
-delete_entries=Eintr\u00e4ge_l\u00f6schen
-
-Delete_entry=Eintrag_l\u00f6schen
-
-delete_entry=Eintrag_l\u00f6schen
-
-Delete_multiple_entries=Mehrere_Eintr\u00e4ge_l\u00f6schen
-
-Delete_rows=Zeilen_l\u00f6schen
-
-Delete_strings=Strings_l\u00f6schen
-
-Deleted=Gel\u00f6scht
-
-Delimit_fields_with_semicolon,_ex.=Felder_mit_Semikolon_abgrenzen,_z.B.
-
-Descending=Absteigend
-
-Description=Beschreibung
-
-Deselect_all=Auswahl_aufheben
-Deselect_all_duplicates=Auswahl_der_Duplikate_aufheben
-
-Details=Details
-
-Disable_entry_editor_when_multiple_entries_are_selected=Eintragseditor_sperren,_wenn_mehrere_Eintr\u00e4ge_ausgew\u00e4hlt_sind
-
-Disable_this_confirmation_dialog=Diesen_Best\u00e4tigungsdialog_deaktivieren
-
-Disable_this_warning_dialog=Diese_Warnmeldung_deaktivieren
-
-Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Alle_Eintr\u00e4ge_anzeigen,_die_zu_einer_oder_mehreren_der_ausgew\u00e4hlten_Gruppen_geh\u00f6ren.
-
-Display_all_error_messages=Zeige_alle_Fehlermeldugen
-
-Display_help_on_command_line_options=Zeige_Kommandozeilenhilfe
-
-Display_imported_entries_in_an_inspection_window_before_they_are_added.=Importierte_Eintr\u00e4ge_im_Kontrollfenster_anzeigen,_bevor_sie_hinzugef\u00fcgt_werden
-
-Display_only_entries_belonging_to_all_selected_groups.=Nur_Eintr\u00e4ge_anzeigen,_die_zu_allen_ausgew\u00e4hlten_Gruppen_geh\u00f6ren.
-
-Display_version=Version_anzeigen
-
-Displaying_no_groups=Keine_Gruppen_anzeigen
-
-Do_not_abbreviate_names=Namen_nicht_abk\u00fcrzen
-
-Do_not_autoset=Nicht_automatisch_zuordnen
-
-Do_not_import_entry=Eintrag_nicht_importieren
-
-Do_not_open_any_files_at_startup=Keine_Dateien_beim_Start_\u00f6ffnen
-
-Do_not_overwrite_existing_keys=Existierende_Keys_nicht_\u00fcberschreiben
-Do_not_show_splash_window_at_startup=Er\u00f6ffnungsbildschirm_beim_Programmstart_nicht_anzeigen
-Do_not_show_these_options_in_the_future=Diese_Optionen_in_Zukunft_nicht_anzeigen
-
-Do_not_wrap_the_following_fields_when_saving=Beim_Speichern_keinen_Zeilenumbruch_in_den_folgenden_Feldern_einf\u00fcgen
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Folgende_Felder_nicht_in_die_XMP-Metadaten_schreiben:
-
-Do_you_want_JabRef_to_do_the_following_operations?=Soll_JabRef_die_folgenden_Vorg\u00e4nge_durchf\u00fchren?
-
-DocBook=DocBook
-
-Down=Abw\u00e4rts
-
-Download=Herunterladen
-
-Download_completed=Download_beendet
-
-Download_file=Datei_herunterladen
-
-Downloading...=Download_l\u00e4uft
-Drag_and_Drop_Error='Drag_&_Drop'-Fehler
-Drop_%0=%0_streichen
-
-duplicate_BibTeX_key=doppelter_BibTeX-Key
-
-Duplicate_BibTeX_key.=Doppelter_BibTeX-Key.
-
-Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Doppelter_BibTeX-Key._Es_kann_sein,_dass_die_Gruppierung_f\u00fcr_diesen_Eintrag_nicht_funktioniert.
-
-Duplicate_Key_Warning=Warnung:_Key_bereits_vorhanden
-
-Duplicate_pairs_found=Doppelte_Eintr\u00e4ge_gefunden
-
-duplicate_removal=Duplikate_entfernen
-
-Duplicate_string_name=Doppelter_String-Name
-
-Duplicates_found=Doppelte_Eintr\u00e4ge_gefunden
-
-Duplicates_removed=Doppelte_Eintr\u00e4ge_gel\u00f6scht
-
-Dynamic_groups=Dynamische_Gruppen
-
-Dynamically_group_entries_by_a_free-form_search_expression=Dynamisches_Gruppieren_der_Eintr\u00e4ge_anhand_eines_beliebigen_Suchausdrucks
-
-Dynamically_group_entries_by_searching_a_field_for_a_keyword=Dynamisches_Gruppieren_der_Eintr\u00e4ge_anhand_eines_Stichworts_in_einem_Feld
-
-Each_line_must_be_on_the_following_form=Jede_Zeile_muss_das_folgende_Format_aufweisen
-
-Edit=Bearbeiten
-
-Edit_custom_export=Bearbeite_externen_Exportfilter
-Edit_entry=Eintrag_bearbeiten
-Edit_file_link=Link_bearbeiten
-Edit_file_type=Dateityp_bearbeiten
-
-Edit_group=Gruppe_bearbeiten
-
-Edit_journal=Zeitschrift_bearbeiten
-
-Edit_preamble=Pr\u00e4ambel_bearbeiten
-Edit_strings=Strings_bearbeiten
-Editor_options=Herausgeber-Optionen
-
-empty_BibTeX_key=leerer_BibTeX-Key
-
-Empty_BibTeX_key.=Leerer_BibTeX-Key.
-
-Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Leerer_BibTeX-Key._Es_kann_sein,_dass_die_Gruppierung_f\u00fcr_diesen_Eintrag_nicht_funktioniert.
-
-empty_database=leere_Datenbank
-
-Enable_source_editing=Bearbeiten_von_Sourcecode_zulassen
-Enable_word/name_autocompletion=Autovervollst\u00e4ndigung_aktivieren
-
-Endnote=Endnote
-
-Enter_URL=URL_eingeben
-
-Enter_URL_to_download=URL_f\u00fcr_den_Download_eingeben
-
-entries=Eintr\u00e4ge
-
-Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Ein_manuelles_Hinzuf\u00fcgen_oder_Entfernen_von_Eintr\u00e4gen_ist_f\u00fcr_diese_Gruppe_nicht_m\u00f6glich.
-
-Entries_exported_to_clipboard=Eintr\u00e4ge_in_die_Zwischenablage_kopiert
-
-entries_have_undefined_BibTeX_key=Eintr\u00e4ge_haben_einen_unbestimmten_BibTeX-Key
-
-entries_into_new_database=Eintr\u00e4ge_in_neue_Datei
-
-entry=Eintrag
-
-Entry_editor=Eintragseditor
-
-Entry_in_current_database=Eintrag_in_aktueller_Datenbank
-
-Entry_in_import=Eintrag_in_Importierung
-
-Entry_preview=Eintragsvorschau
-
-Entry_table=Tabellenansicht
-
-Entry_table_columns=Spaltenanordnung
-
-Entry_type=Eintragstyp
-
-Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Namen_von_Eintragstypen_d\u00fcrfen_weder_Leerzeichen_noch_die_folgenden_Zeichen_enthalten
-
-Entry_types=Eintragstypen
-
-Error=Fehler
-Error\:_=Fehler:_
-Error_converting_Bibtex_to_XMP\:_%0=Fehler_beim_Konvertieren_von_BibTeX_nach_XMP:_%0
-Error_converting_XMP_to_'%0'...=Fehler_beim_Konvertieren_von_XMP_nach_'%0'...
-Error_exporting_to_clipboard=Fehler_beim_Exportieren_in_die_Zwischenablage
-
-##Error:_check_your_External_viewer_settings_in_Preferences=Fehler:_\u00fcberpr\u00fcfen_Sie_Ihre_Einstellungen_zu_Externen_Programmen
-Error_in_field=Fehler_in_Feld
-Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Fehler_beim_Starten_des_Plugin-Systems._Start_erfolgt_ohne_Plugins,_einige_Funktionen_k\u00f6nnten_fehlen.
-Error_occured_when_parsing_entry=Fehler_beim_Analysieren_des_Eintrags
-
-Error_opening_file=Fehler_beim_\u00d6ffnen_der_Datei
-
-Error_setting_field=Fehler_beim_Erstellen_des_Feldes
-Error_while_converting_BibtexEntry_to_XMP_%0=Fehler_beim_Konvertieren_des_BibTeX-Eintrags_nach_XMP_%0
-Error_while_downloading_file\:=Fehler_beim_Herunterladen_der_Datei:
-Error_while_fetching_from_OIA2=Fehler_beim_Abrufen_von_OIA2
-Error_while_writing=Fehler_beim_Schreiben
-
-Error_writing_to_%0_file(s).=Fehler_beim_Schreiben_in_%0_Datei(en).
-Error_writing_XMP_to_file\:_%0=Fehler_beim_Schreiben_von_XMP_in_die_Datei_%0
-
-Establishing_SQL_connection...=SQL-Verbindung_wird_aufgebaut...
-
-Exceptions=Ausnahmen
-
-Existing_file=Bestehende_Datei
-
-exists._Overwrite_file?=existiert._Ersetzen?
-exists._Overwrite?=ist_vorhanden._\u00dcberschreiben?
-
-Expand_subtree=Unterbaum_aufklappen
-
-Export=Exportieren
-
-Export_name=Filtername
-
-Export_preferences=Einstellungen_exportieren
-
-Export_preferences_to_file=Exportiere_Einstellungen_in_Datei
-
-Export_properties=Eigenschaften_f\u00fcr_Exportfilter
-
-Export_to_clipboard=In_die_Zwischenablage_kopieren
-Export_to_SQL_database=Export_in_SQL-Datenbank
-
-Exporting=Exportiere
-Extension=Erweiterung
-
-External_changes=Externe_\u00c4nderungen
-
-External_file_links=Links_zu_externen_Dateien
-
-External_files=Externe_Dateien
-
-External_programs=Externe_Programme
-
-External_viewer_called=Externer_Betrachter_aufgerufen
-
-Failed_to_read_groups_data_(unsupported_version\:_%0)=Gruppen_konnten_nicht_eingelesen_werden_(nicht_unterst\u00fctzte_Version:_%0)
-
-Fetch=Abrufen
-
-Field=Feld
-
-field=Feld
-
-# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
-Field_content=Feldinhalt
-
-Field_name=Feldname
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Feldbezeichnungen_d\u00fcrfen_keine_Leerzeichen_enthalten_und_keine_der_folgenden_Zeichen
-
-Field_sizes=Feldgr\u00f6\u00dfen
-
-Field_to_filter=Feld_f\u00fcr_Filter
-
-Field_to_group_by=Sortierfeld
-
-Fields=Felder
-
-File=Datei
-
-file=Datei
-
-File_'%0'_is_already_open.=Datei_'%0'_ist_bereits_ge\u00f6ffnet.
-
-File_'%0'_not_found=Datei_'%0'_nicht_gefunden
-
-File_changed=Datei_ge\u00e4ndert
-File_directory_is_'%0'\:=Dateiverzeichnis_ist_'%0':
-
-File_directory_is_not_set_or_does_not_exist!=Dateiverzeichnis_ist_nicht_gesetzt_oder_existiert_nicht
-File_download=Datei-Download
-File_exists=Datei_ist_vorhanden
-
-File_extension=Dateiendung
-
-File_has_been_updated_externally._What_do_you_want_to_do?=Die_Datei_wurde_extern_aktualisiert._Was_wollen_Sie_tun?
-
-File_not_found=Datei_nicht_gefunden
-File_type=Dateityp
-
-File_updated_externally=Datei_extern_ge\u00e4ndert
-
-filename=Dateiname
-
-Files_opened=Dateien_ge\u00f6ffnet
-
-Filter=Filter
-
-Finished_autosetting_external_links.=Automatische_Einstellung_externer_Links_abgeschlossen.
-
-Finished_synchronizing_%0_links._Entries_changed%c_%1.=Synchronisierung_von_%0_Links_abgeschlossen._Ge\u00e4nderte_Eintr\u00e4ge%c_%1.
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Schreiben_der_XMP-Metadaten_in_%0_Datei(en)_beendet.
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Schreiben_der_XMP-Metadaten_f\u00fcr_Datei_%0_beendet_(%1_\u00fcbersprungen,_%2_Fehler).
-
-First_select_the_entries_you_want_keys_to_be_generated_for.=W\u00e4hlen_Sie_zuerst_die_Eintr\u00e4ge_aus,_f\u00fcr_die_Keys_erstellt_werden_sollen.
-
-Fit_table_horizontally_on_screen=Tabelle_horizontal_dem_Bildschirm_anpassen
-
-Float=Oben_einsortieren
-
-Float_marked_entries=Markierte_Eintr\u00e4ge_zuoberst_anzeigen
-
-Font_Family=Schriftart
-
-Font_Preview=Vorschau
-
-Font_Size=Schriftgr\u00f6\u00dfe
-
-Font_Style=Schriftstil
-
-FontSelector=Schriften_w\u00e4hlen
-
-for=f\u00fcr
-
-Format_of_author_and_editor_names=Format_der_Autoren-_und_Hrsg.-Namen
-Format_String=Formatier-Ausdruck
-
-Format_used=benutztes_Format
-Formatter_Name=Name_des_Formatierers
-
-Formatter_not_found=Formatierer_nicht_gefunden
-
-found=gefunden
-Found_%0_plugin(s)=%0_Plugin(s)_gefunden
-
-found_in_aux_file=gefundene_Schl\u00fcssel_in_AUX_Datei
-
-Full_name=Kompletter_Name
-
-General=Allgemein
-
-General_fields=Allgemeine_Felder
-
-Generate=Erzeugen
-
-Generate_BibTeX_key=BibTeX-Key_generieren
-
-Generate_keys=Erstelle_Key
-
-Generate_keys_before_saving_(for_entries_without_a_key)=Keys_vor_dem_Speichern_erstellen_(f\u00fcr_Einr\u00e4ge_ohne_Key)
-
-
-Generate_keys_for_imported_entries=Keys_f\u00fcr_importierte_Eintr\u00e4ge_generieren
-
-Generate_now=Jetzt_generieren
-
-Generated_BibTeX_key_for=BibTeX-Key_erzeugt_f\u00fcr
-
-Generating_BibTeX_key_for=Erzeuge_BibTeX-Key_f\u00fcr
-
-Grab=Tastenk\u00fcrzel_holen
-
-Gray_out_entries_not_in_group_selection=Eintr\u00e4ge_ausblenden,_die_nicht_in_der_Gruppenauswahl_sind
-
-Gray_out_non-hits=Nicht-Treffer_grau_einf\u00e4rben
-
-Gray_out_non-matching_entries=Nicht_\u00fcbereinstimmende_Eintr\u00e4ge_ausblenden
-
-Group_properties=Gruppeneigenschaften
-
-grouping_may_not_work_for_this_entry=Dieser_Eintrag_unterst\u00fctzt_m\u00f6glicherweise_keine_Gruppierung
-
-Groups=Gruppen
-
-Harvard_RTF=Harvard_RTF
-
-Have_you_chosen_the_correct_package_path?=Habe_Sie_den_richtigen_Klassenpfad_gew\u00e4hlt?
-
-Help=Hilfe
-
-Help_contents=Hilfe_-_Inhalt
-
-Help_on_groups=Hilfe_zu_Gruppen
-
-Help_on_key_patterns=Hilfe_zu_BibTeX-Key-Mustern
-Help_on_Preview_Settings=Hilfe_zu_den_Einstellungen_der_Vorschau
-Help_on_Regular_Expression_Search=Hilfe_zur_Suche_mit_regul\u00e4rem_Ausdruck
-
-Hide_non-hits=Nicht-Treffer_ausblenden
-
-Hide_non-matching_entries=Nicht_passende_Eintr\u00e4ge_verbergen
-
-Hierarchical_context=Hierarchischer_Kontext
-
-Highlight=Markieren
-Highlight_groups_matching_all_selected_entries=Gruppen_markieren,_die_alle_selektierten_Eintr\u00e4ge_enthalten
-Highlight_groups_matching_any_selected_entry=Gruppen_markieren,_die_mindestens_einen_der_selektierten_Eintr\u00e4ge_enthalten
-
-Highlight_overlapping_groups=Sich_\u00fcberschneidende_Gruppen_markieren
-
-Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Hinweis%c_Um_ausschlie\u00dflich_bestimmte_Felder_zu_durchsuchen,_geben_Sie_z.B._ein%c<p><tt>author%esmith_and_title%eelectrical</tt>
-
-HTML=HTML
-
-HTML_table=HTML-Tabelle
-
-HTML_table_(with_Abstract_&_BibTeX)=HTML-Tabelle_(mit_Abstract_&_BibTeX)
-Icon=Icon
-
-Ignore=Ignorieren
-
-Immediate_subgroups=Direkte_Untergruppen
-
-Import=Importieren
-
-Import_and_keep_old_entry=Importieren_und_alten_Eintrag_behalten
-
-Import_and_remove_old_entry=Importieren_und_alten_Eintrag_l\u00f6schen
-
-Import_entries=Eintr\u00e4ge_importieren
-
-Import_failed=Import_fehlgeschlagen
-
-Import_file=Importiere_Datei
-
-Import_group_definitions=Gruppendefinitionen_importieren
-
-Import_name=Name_des_Importfilters
-
-Import_preferences=Einstellungen_importieren
-
-Import_preferences_from_file=Importiere_Einstellungen_aus_Datei
-
-Import_strings=Strings_importieren
-
-Import_to_open_tab=In_ge\u00f6ffnetes_Tab_importieren
-
-Import_word_selector_definitions=Wortauswahldefinitionen_importieren
-
-Imported_database=Datei_importiert
-
-Imported_entries=Eintr\u00e4ge_importiert
-
-Imported_from_database=Importiert_aus_Datei
-
-ImportFormat_class=ImportFormat_Klasse
-
-Importing=Importiere
-
-Importing_in_unknown_format=Importiere_ein_unbekanntes_Format
-
-In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=Benutzen_Sie_in_JabRef_das_Zeichen_#_paarweise,_um_einen_String_(Abk\u00fcrzung)_anzugeben.
-
-Include_abstracts=Abstracts_ber\u00fccksichtigen
-Include_entries=Eintr\u00e4ge_einschlie\u00dfen
-
-Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Untergruppen_ber\u00fccksichtigen\:_Eintr\u00e4ge_dieser_Gruppe_und_ihrer_Untergruppen_anzeigen
-
-Incremental=Direkt
-
-Incremental_search=Weitersuchen
-
-Incremental_search_failed._Repeat_to_search_from_top.=Direkte_Suche_fehlgeschlagen._Wiederhole_die_Suche_vom_Anfang_der_Datenbank.
-
-Independent_group\:_When_selected,_view_only_this_group's_entries=Unabh\u00e4ngige_Gruppen\:_Nur_die_Eintr\u00e4ge_dieser_Gruppe_anzeigen
-
-Initially_show_groups_tree_expanded=Baumansicht_der_Gruppen_standardm\u00e4\u00dfig_aufklappen
-
-Input=Bearbeitungsoptionen
-
-Input_error=Eingabefehler
-
-Insert=einf\u00fcgen
-
-Insert_rows=Zeilen_einf\u00fcgen
-
-Insert_selected_citations_into_LyX/Kile=Ausgew\u00e4hlte_Literaturangaben_in_LyX/Kile_einf\u00fcgen
-
-Insert_selected_citations_into_WinEdt=Ausgew\u00e4hlte_Literaturangaben_in_WinEdt_einf\u00fcgen
-
-insert_string_=String_einf\u00fcgen_
-
-Insert_URL=URL_einf\u00fcgen
-
-integrity=Integrit\u00e4t
-
-# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
-Integrity_check=Integrit\u00e4ts\u00fcberpr\u00fcfung
-
-Intersection=Schnittmenge
-
-Invalid_BibTeX_key=Ung\u00fcltiger_BibTeX-Key
-
-Invalid_date_format=Ung\u00fcltiges_Datumsformat
-
-Invalid_URL=Ung\u00fcltige_URL
-
-Inverted=Invertiert
-
-is_a_standard_type.=ist_ein_Standardtyp
-
-ISO_abbreviation=ISO-Abk\u00fcrzung
-
-Item_list_for_field=Wortliste_f\u00fcr_Feld
-jabref=jabref
-
-JabRef_help=JabRef_Hilfe
-
-JabRef_preferences=JabRef_Einstellungen
-
-Journal_abbreviations=Abk\u00fcrzung_der_Zeitschriftentitel
-
-Journal_list_preview=Vorschau_der_Zeitschriftenliste
-
-Journal_name=Zeitschriftentitel
-
-Keep=Behalten
-
-Keep_both=Beide_behalten
-
-Keep_lower=Unteren_behalten
-
-Keep_upper=Oberen_behalten
-
-Key_bindings=Tastenk\u00fcrzel
-
-Key_bindings_changed=Tastenk\u00fcrzel_ge\u00e4ndert
-
-Key_generator_settings=Einstellungen_des_Key-Generators
-
-Key_pattern=BibTeX-Key-Muster
-
-keys_in_database=Keys_in_der_Datenbank
-
-Keyword=Stichwort
-
-Label=Name
-
-Language=Sprache
-
-Last_modified=zuletzt_ge\u00e4ndert
-
-LaTeX_AUX_file=LaTeX_AUX-Datei
-Leave_file_in_its_current_directory.=Datei_im_aktuellen_Verzeichnis_lassen.
-Leave_files_in_their_current_directory.=Dateien_im_aktuellen_Verzeichnis_lassen.
-
-Left=Links
-
-License=Lizenz
-
-Limit_to_fields=Auf_folgende_Felder_begrenzen
-
-Limit_to_selected_entries=Auf_ausgew\u00e4hlte_Eintr\u00e4ge_begrenzen
-
-Link=Link
-Link_local_file=Link_zu_lokaler_Datei
-Link_to_file_%0=Link_zur_Datei_%0
-
-Listen_for_remote_operation_on_port=Port_nach_externem_Zugriff_abh\u00f6ren
-Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Einstellungen_beim_Start_laden_von/speichern_in_jabref.xml_(Memory_Stick-Modus)
-
-Load_session=Sitzung_laden
-
-Loading_session...=Lade_Sitzung...
-localhost=localhost
-
-Look_and_feel=Aussehen
-Looking_for_pdf...=Suche_nach_pdf...
-lower=kleinbuchstaben
-Main_file_directory=Standard-Verzeichnis_f\u00fcr_Dateien
-
-Main_layout_file=Haupt-Layoutdatei
-
-Main_PDF_directory=Standard-Verzeichnis_f\u00fcr_PDF-Dateien
-
-Main_PS_directory=Standard-Verzeichnis_f\u00fcr_PS-Dateien
-
-Manage=Verwalten
-
-Manage_custom_exports=Verwalte_externe_Exportfilter
-
-Manage_custom_imports=Verwalte_externe_Importfilter
-Manage_external_file_types=Externe_Dateitypen_verwalten
-
-Manage_journal_abbreviations=Abk\u00fcrzungen_der_Zeitschriften_verwalten
-
-Mark_entries=Eintr\u00e4ge_markieren
-
-Mark_entry=Eintrag_markieren
-
-Mark_new_entries_with_addition_date=Neue_Eintr\u00e4ge_mit_Datum_versehen
-
-Mark_new_entries_with_owner_name=Neue_Eintr\u00e4ge_mit_Namen_des_Besitzers_versehen
-
-# These are status line messages when marking/unmarking entries:
-Marked_selected=Ausgew\u00e4hlte_markiert
-Memory_Stick_Mode=Memory_Stick-Modus
-
-Menu_and_label_font_size=Schriftgr\u00f6\u00dfe_in_Men\u00fcs
-
-Merged_external_changes=Externe_\u00c4nderungen_eingef\u00fcgt
-
-Messages=Mitteilungen
-
-Messages_and_Hints=Hinweise_und_Warnungen
-
-Modification_of_field=\u00c4nderung_des_Felds
-
-Modified_group_"%0".=Gruppe_"%0"_ge\u00e4ndert.
-
-Modified_groups=Ge\u00e4nderte_Gruppen
-
-Modified_string=Ver\u00e4nderter_String
-
-Modify=Bearbeiten
-
-modify_group=Gruppe_bearbeiten
-
-MODS=MODS
-
-Move=Verschieben
-
-Move_down=Nach_unten
-
-Move_entries_in_group_selection_to_the_top=Sortiere_Eintr\u00e4ge_der_Gruppenauswahl_nach_oben
-Move_external_links_to_'file'_field=Externe_Links_in_das_Feld_'file'_verschieben
-Move_files_to_file_directory.=Dateien_in_das_Dateiverzeichnis_verschieben.
-
-move_group=Gruppe_verschieben
-
-Move_string_down=String_nach_unten
-
-Move_string_up=String_nach_oben
-
-Move_up=Nach_oben
-
-Moved_group_"%0".=Gruppe_"%0"_verschoben.
-MS_Office_2007=MS_Office_2007
-MySQL=MySQL
-MySQL_database=MySQL-Datenbank
-
-Name=Name
-Name_formatter=Namens-Formatierer
-
-Natbib_style=Natbib-Stil
-
-nested_aux_files=referenzierte_AUX_Dateien
-
-New=Neu
-
-new=neu
-
-New_BibTeX_database=Neue_BibTeX-Datei
-
-New_BibTeX_entry=Neuer_BibTeX-Eintrag
-
-New_BibTeX_subdatabase=Neue_BibTeX-Teildatei
-
-New_content=Neuer_Inhalt
-
-New_database_created.=Neue_Datei_angelegt.
-New_field_value=Neuer_Feldwert
-
-New_file=Neue_Datei
-New_file_link_(INSERT)=Neuer_Dateilink_(INSERT)
-
-New_group=Neue_Gruppe
-
-New_string=Neuer_String
-
-Next_entry=N\u00e4chster_Eintrag
-
-No_%0_found=Kein_%0_gefunden
-
-No_actual_changes_found.=Keine_aktuellen_\u00c4nderungen_gefunden.
-
-no_base-bibtex-file_specified=keine_Bibtex-Datei_angegeben!
-
-no_database_generated=keine_Datenbank_erstellt_und_geschrieben
-
-No_duplicates_found=Keine_doppelten_Eintr\u00e4ge_gefunden
-
-No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Keine_Eintr\u00e4ge_gefunden._Bitte_vergewissern_Sie_sich,_dass_Sie_den_richtigen_Importfilter_benutzen.
-
-No_entries_found_for_the_search_string_'%0'=F\u00fcr_den_Suchausdruck_'%0'_wurden_keine_Eintr\u00e4ge_gefunden
-
-No_entries_imported.=Keine_Eintr\u00e4ge_importiert.
-
-No_entries_or_multiple_entries_selected.=Keine_oder_mehrere_Eintr\u00e4ge_ausgew\u00e4hlt.
-
-No_entries_selected=Keine_Eintr\u00e4ge_ausgew\u00e4hlt.
-No_entries_selected.=Keine_Eintr\u00e4ge_ausgew\u00e4hlt.
-
-No_exceptions_have_ocurred.=Es_sind_keine_Ausnahmen_aufgetreten.
-No_files_found.=Keine_Dateien_gefunden.
-
-No_GUI._Only_process_command_line_options.=Kein_GUI._Nur_Kommandozeilenbefehle_ausf\u00fchren.
-
-No_journal_names_could_be_abbreviated.=Es_konnten_keine_Zeitschriftentitel_abgek\u00fcrzt_werden.
-
-No_journal_names_could_be_unabbreviated.=Das_Aufheben_der_Abk\u00fcrzung_konnte_bei_keiner_Zeitschrift_durchgef\u00fchrt_werden.
-
-No_PDF_linked=Kein_PDF_verlinkt
-
-No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Sie_haben_keine_PDF-_oder_PS-Datei_angegeben_und_es_wurde_keine_Datei_gefunden,_die_mit_dem_BibTeX-Key_\u00fcbereinstimmt.
-No_plugins_were_found_in_the_following_folders\:=In_den_folgenden_Ordnern_wurden_keine_Plugins_gefunden:
-
-No_references_found=Keine_Literaturangaben_gefunden
-
-No_saved_session_found.=Keine_gespeicherte_Sitzung_gefunden.
-
-No_url_defined=Keine_URL_angegeben
-No_XMP_metadata_found_in_=Keine_XMP-Metadaten_gefunden_in_
-
-not=nicht
-
-not_found=davon_nicht_gefunden
-
-Not_saved_(empty_session)=Nicht_gespeichert_(leere_Sitzung)
-
-Note_that_the_entry_causing_the_problem_has_been_selected.=Der_Eintrag,_der_das_Problem_verursacht,_wurde_ausgew\u00e4hlt.
-
-Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Es_muss_der_volle_Klassenname_f\u00fcr_das_zu_verwendende_"look_and_feel"_angegeben_werden.
-
-Nothing_to_redo=Wiederholen_nicht_m\u00f6glich
-
-Nothing_to_undo=R\u00fcckg\u00e4ngig_nicht_m\u00f6glich
-
-# The next is used like in "References found: 1  Number of references to fetch?"
-Number_of_references_to_fetch?=Anzahl_der_abzurufenden_Literaturangaben?
-
-occurences=Ausdr\u00fccke
-
-OK=OK
-
-Ok=OK
-
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Mindestens_ein_Dateilink_ist_vom_Typ_'%0',_der_nicht_definiert_ist._Was_wollen_Sie_tun?
-
-One_or_more_keys_will_be_overwritten._Continue?=Einer_oder_mehrere_Keys_werden_\u00fcberschrieben._Fortsetzen?
-Only_one_item_is_supported=Nur_ein_Element_wird_unterst\u00fctzt
-
-Open=\u00d6ffnen
-
-Open_BibTeX_database=BibTeX-Datei_\u00f6ffnen
-
-Open_database=Datei_\u00f6ffnen
-
-Open_editor_when_a_new_entry_is_created=Eintragseditor_\u00f6ffnen,_wenn_ein_neuer_Eintrag_angelegt_wird
-
-Open_file=Datei_\u00f6ffnen
-
-Open_last_edited_databases_at_startup=Beim_Starten_von_JabRef_die_letzten_bearbeiteten_Dateien_\u00f6ffnen
-
-Open_PDF_or_PS=PDF_oder_PS_\u00f6ffnen
-
-Open_right-click_menu_with_Ctrl+left_button=Kontextmen\u00fc_mit_Strg_+_linker_Maustaste_\u00f6ffnen
-
-Open_URL_or_DOI=URL_oder_DOI_\u00f6ffnen
-OpenDocument_Spreadsheet=OpenDocument-Tabelle
-
-Opened_database=Datei_ge\u00f6ffnet
-
-Opening=\u00d6ffne
-
-Opening_preferences...=\u00d6ffne_Voreinstellungen...
-
-OpenOffice_Calc=OpenOffice_Calc
-OpenOffice_CSV=OpenOffice_CSV
-Operation_canceled.\n=Vorgang_abgebrochen.\n
-Operation_not_supported=Vorgang_nicht_unterst\u00fctzt
-
-Optional_fields=Optionale_Felder
-
-Options=Optionen
-
-or=oder
-
-out_of=von
-
-Output=Ausgabe
-
-Output_or_export_file=Speichere_oder_exportiere_Datei
-
-Override=\u00fcberschreiben
-
-Override_default_file_directories=Standard-Verzeichnisse_\u00fcberschreiben
-
-Override_default_font_settings=Standardschrifteinstellungen_\u00fcberschreiben
-
-override_the_bibtex_key_by_the_selected_text=BibTeX-Key_mit_ausgew\u00e4hltem_Text_\u00fcberschreiben
-
-Overwrite=\u00dcberschreiben
-Overwrite_existing_field_values=Bestehende_Feldwerte_\u00fcberschreiben
-
-Overwrite_keys=Keys_\u00fcberschreiben
-
-pairs_processed=Paare_\u00fcberarbeitet
-Password_\:=Passwort:
-
-Paste=Einf\u00fcgen
-
-paste_entries=Eintr\u00e4ge_einf\u00fcgen
-
-paste_entry=Eintrag_einf\u00fcgen
-Paste_from_clipboard=Aus_der_Zwischenablage_einf\u00fcgen
-
-Pasted=Eingef\u00fcgt
-Path_to_%0_not_defined=Pfad_zu_%0_nicht_definiert
-
-Path_to_LatexEditor_(LEd.exe)=Pfad_zu_LatexEditor_(LEd.exe)
-
-Path_to_LyX_pipe=Pfad_zur_LyX-pipe
-
-Path_to_Vim=Pfad_zu_Vim
-
-Path_to_WinEdt.exe=Pfad_zu_WinEdt
-
-PDF_directory=PDF-Verzeichnis
-PDF_does_not_exist=PDF_existiert_nicht
-
-Personal_journal_list=Pers\u00f6nliche_Zeitschriftenliste
-
-Plain_text_import=Klartext_importieren
-
-Please_check_your_network_connection_to_this_machine.=Bitte_\u00fcberpr\u00fcfen_Sie_die_Netzwerkverbindung_ihres_Computers.
-
-Please_enter_a_name_for_the_group.=Bitte_geben_Sie_einen_Namen_f\u00fcr_die_Gruppe_ein.
-
-Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Bitte_geben_Sie_einen_Suchausdruck_ein._Um_zum_Beispiel_alle_Felder_nach_<b>Smith</b>_zu_durchsuchen,_geben_Sie_ein%c<p><tt>smith</tt><p>Um_das_Feld_<b>Author</b>_nach_<b>Smith</b>_und_das_Feld_<b>Title</b>_nach_<b>electrical</b> [...]
-
-Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Bitte_geben_Sie_das_zu_durchsuchende_Feld_(z.B._<b>keywords</b>)_und_das_darin_zu_suchende_Stichwort_(z.B._<b>elektrisch</b>)_ein.
-
-Please_enter_the_string's_label=Geben_Sie_bitte_den_Namen_des_Strings_ein.
-
-Please_select_an_importer=Bitte_Importer_ausw\u00e4hlen
-
-Please_select_an_importer.=Bitte_Importer_ausw\u00e4hlen.
-
-Please_select_exactly_one_group_to_move.=Bitte_genau_eine_zu_bewegende_Gruppe_ausw\u00e4hlen.
-Please_specify_the_=Bitte_geben_Sie_folgendes_an:_
-
-Possible_duplicate_entries=M\u00f6gliche_doppelte_Eintr\u00e4ge
-
-Possible_duplicate_of_existing_entry._Click_to_resolve.=M\u00f6glicherweise_doppelter_Eintrag._Klicken_um_Konflikt_zu_l\u00f6sen
-
-Preamble=Pr\u00e4ambel
-
-Preferences=Einstellungen
-
-Preferences_recorded.=Einstellungen_gespeichert.
-
-Preview=Vorschau
-
-Previous_entry=Vorheriger_Eintrag
-
-Primary_sort_criterion=Prim\u00e4res_Sortierkriterium
-Print_Preview=Druckvorschau
-Printing_Entry_Preview=Eintragsvorschau_drucken
-
-Problem_with_parsing_entry=Problem_beim_Analysieren_des_Eintrags
-Processing_=Bearbeite_
-
-Program_output=Programmausgabe
-
-PS_directory=PS-Verzeichnis
-Push_entries_to_external_application_(%0)=Eintr\u00e4ge_in_externe_Anwendung_einf\u00fcgen_(%0)
-
-Push_selection_to_Emacs=Auswahl_in_Emacs_einf\u00fcgen
-
-Push_selection_to_LyX/Kile=Auswahl_in_LyX/Kile_einf\u00fcgen
-Push_selection_to_Vim=Auswahl_in_Vim_einf\u00fcgen
-
-Push_selection_to_WinEdt=Auswahl_in_WinEdt_einf\u00fcgen
-
-Push_to_LatexEditor=In_LatexEditor_einf\u00fcgen
-Pushed_citations_to_%0=Eintr\u00e4ge_in_%0_eingef\u00fcgt
-
-Pushed_citations_to_Emacs=Literaturangaben_in_Emacs_eingef\u00fcgt
-Pushed_citations_to_Vim=Literaturangaben_in_Vim_eingef\u00fcgt
-
-Pushed_citations_to_WinEdt=Literaturangaben_in_WinEdt_eingef\u00fcgt
-
-Pushed_the_citations_for_the_following_rows_to=Literaturangaben_der_folgenden_Zeilen_eingef\u00fcgt_in
-
-Quit_JabRef=JabRef_beenden
-
-Quit_synchronization=Synchronisation_beenden
-
-Raw_source=Importtext
-
-Really_delete_the_selected=Wirklich_l\u00f6schen:
-
-Rearrange_tabs_alphabetically_by_title=Tabs_alphabetisch_nach_Titel_sortieren
-
-Redo=Wiederholen
-
-Reference_database=Referenz-Datenbank
-
-# The next two lines are used like in "References found: 1  Number of references to fetch?"
-References_found=Literaturangaben_gefunden
-
-Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Obergruppe_einbeziehen\:_Eintr\u00e4ge_aus_dieser_Gruppe_und_ihrer_\u00fcbergeordneten_Gruppe_anzeigen
-
-Refresh_view=Ansicht_aktualisieren
-
-Regular_Expression=Regul\u00e4rer_Ausdruck
-
-Remember_these_entry_types?=Diese_Eintragstypen_behalten?
-
-Remote_operation=Externer_Zugriff
-
-Remote_server_port=Externer_Server-Port
-
-Remove=L\u00f6schen
-
-Remove_all?=Alle_l\u00f6schen?
-
-Remove_all_subgroups=Untergruppen_entfernen
-
-Remove_all_subgroups_of_"%0"?=Alle_Untergruppen_von_"%0"_entfernen?
-
-Remove_double_braces_around_BibTeX_fields_when_loading.=Beim_Laden_doppelte_geschweifte_Klammern_um_BibTeX-Felder_entfernen
-
-Remove_duplicates=Doppelte_Eintr\u00e4ge_l\u00f6schen
-
-Remove_entry_from_import=Eintrag_von_Importierung_entfernen
-
-Remove_entry_selection_from_this_group=Ausgew\u00e4hlte_Eintr\u00e4ge_aus_dieser_Gruppe_entfernen
-
-Remove_entry_type=Eintragstyp_l\u00f6schen
-Remove_file_link_(DELETE)=Dateilink_entfernen_(DELETE)
-
-remove_from_group=aus_der_Gruppe_entfernen
-
-Remove_from_group=Aus_Gruppe_entfernen
-
-Remove_group=Gruppe_l\u00f6schen
-
-Remove_group,_keep_subgroups=Gruppe_l\u00f6schen,_Untergruppen_behalten
-
-Remove_group_"%0"?=Gruppe_"%0"_l\u00f6schen?
-
-Remove_group_"%0"_and_its_subgroups?=Gruppe_"%0"_inklusive_Untergruppen_l\u00f6schen?
-
-remove_group_(keep_subgroups)=Gruppe_l\u00f6schen_(Untergruppen_behalten)
-
-remove_group_and_subgroups=Gruppe_inklusive_Untergruppen_l\u00f6schen
-
-Remove_group_and_subgroups=Gruppe_und_Untergruppen_l\u00f6schen
-
-Remove_link=Link_l\u00f6schen
-
-Remove_old_entry=Alten_Eintrag_entfernen
-
-Remove_selected_strings=Ausgew\u00e4hlte_Strings_entfernen
-
-remove_string_=String_l\u00f6schen_
-
-Removed_group_"%0".=Gruppe_"%0"_gel\u00f6scht.
-
-Removed_group_"%0"_and_its_subgroups.=Gruppe_"%0"_inklusive_Untergruppen_gel\u00f6scht.
-
-Removed_string=String_gel\u00f6scht
-
-Renamed_string=String_umbenannt
-
-Replace=Ersetzen
-
-Replace_(regular_expression)=Ersetzen_(regul\u00e4rer_Ausdruck)
-
-Replace_string=String_ersetzen
-
-Replace_with=Ersetzen_durch
-
-Replaced=Ersetzt:
-
-Required_fields=Ben\u00f6tigte_Felder
-
-Reset_all=Alle_zur\u00fccksetzen
-Reset_file_type_definitons=Definitionen_der_Dateitypen_zur\u00fccksetzen
-
-Resolve_strings_for_all_fields_except=Strings_aufl\u00f6sen_f\u00fcr_alle_Felder_au\u00dfer
-Resolve_strings_for_standard_BibTeX_fields_only=Strings_nur_f\u00fcr_Standard-BibTeX-Felder_aufl\u00f6sen
-
-resolved=davon_aufgel\u00f6st
-
-Results=Ergebnisse
-
-Revert_to_original_source=Original_wiederherstellen
-
-Review=\u00dcberpr\u00fcfung
-
-Review_changes=\u00c4nderungen_\u00fcberpr\u00fcfen
-
-Right=Rechts
-root=root
-
-Save=Speichern
-Save_all_finished.=Speichern_aller_Dateien_beendet
-
-Save_all_open_databases=Alle_ge\u00f6ffneten_Dateien_speichern
-
-Save_before_closing=Speichern_vor_dem_Beenden
-
-Save_database=Datei_speichern
-Save_database_as_...=Datei_speichern_unter_...
-
-Save_entries_in_their_original_order=Eintr\u00e4ge_in_urspr\u00fcnglicher_Reihenfolge_abspeichern
-
-Save_failed=Fehler_beim_Speichern
-
-Save_failed_during_backup_creation=W\u00e4hrend_der_Erstellung_des_Backups_ist_das_Speichern_fehlgeschlagen
-
-Save_failed_while_committing_changes=W\u00e4hrend_die_\u00c4nderungen_\u00fcbermittelt_wurden,_ist_das_Speichern_fehlgeschlagen
-
-Save_ordered_by_author/editor/year=Speichern_sortiert_nach_author/editor/year
-Save_selected_as_...=Auswahl_speichern_unter_...
-
-Saved_database=Datei_gespeichert
-
-Saved_selected_to=Auswahl_gespeichert_unter
-
-Saved_session=Sitzung_gespeichert
-
-Saving=Speichere
-Saving_all_databases...=Alle_Dateien_werden_gespeichert...
-
-Saving_database=Speichere_Datei
-
-Scan=\u00dcberpr\u00fcfen
-
-Search=Suchen
-
-Search_All_Fields=Durchsuche_alle_Felder
-
-Search_all_fields=Alle_Felder_durchsuchen
-
-Search_error=Suchfehler
-
-Search_expression=Suchausdruck
-
-Search_for=Suchen_nach
-
-Search_general_fields=Allgemeine_Felder_durchsuchen
-
-Search_IEEEXplore=IEEEXplore_durchsuchen
-Search_IEEExplore=IEEExplore-Suche
-
-Search_optional_fields=Optionale_Felder_durchsuchen
-
-Search_required_fields=Ben\u00f6tigte_Felder_durchsuchen
-
-Search_Specified_Field(s)=Durchsuche_diese(s)_Feld(er)
-
-Searched_database._Global_number_of_hits=Datenbank_durchsucht._Anzahl_Treffer
-
-Searched_database._Number_of_hits=Datei_durchsucht._Anzahl_der_Treffer
-
-Searching_for_%0_file=Suche_nach_%0-Datei
-
-Searching_for_duplicates...=Suche_nach_doppelten_Eintr\u00e4gen...
-
-Searching_for_files=Suche_nach_Dateien
-
-Secondary_sort_criterion=Zweites_Sortierkriterium
-
-Select=Ausw\u00e4hlen
-
-Select_a_Zip-archive=ZIP-Archiv_ausw\u00e4hlen
-
-Select_action=Aktion_w\u00e4hlen
-
-Select_all=Alle_ausw\u00e4hlen
-
-Select_Classpath_of_New_Importer=Klassenpfad_ausw\u00e4hlen
-
-Select_encoding=Kodierung_w\u00e4hlen
-
-Select_entries_in_group_selection=W\u00e4hle_Eintr\u00e4ge_in_Gruppenauswahl
-
-Select_entry_type=Eintragstyp_ausw\u00e4hlen
-Select_external_application=Externe_Anwendung_ausw\u00e4hlen
-
-Select_file_from_ZIP-archive=Eintrag_aus_der_ZIP-Archiv_ausw\u00e4hlen
-
-Select_format=Format_w\u00e4hlen
-Select_icon=Icon_ausw\u00e4hlen
-
-Select_matches=Treffer_ausw\u00e4hlen
-
-Select_new_ImportFormat_Subclass=Klasse_ausw\u00e4hlen
-
-Select_the_tree_nodes_to_view_and_accept_or_reject_changes=W\u00e4hlen_Sie_die_Verzweigungen_aus,_um_die_\u00c4nderungen_zu_sehen_und_anzunehmen_oder_zu_verwerfen
-Selected_entries=Ausgew\u00e4hlte_Eintr\u00e4ge
-
-Selector_enabled_fields=Felder_mit_Wortliste
-Server_Hostname_\:=Hostname_des_Servers:
-Server_Type_\:=Servertyp
-
-Set_field=Setze_Feld
-Set_fields=Felder_setzen
-
-Set_general_fields=Allgemeine_Felder_festlegen
-Set_main_external_file_directory=Standard-Verzeichnis_f\u00fcr_externe_Dateien_bestimmen
-
-Set_table_font=Tabellenschriftart_ausw\u00e4hlen
-
-Settings=Einstellungen
-
-Setup_selectors=Wortlisten_verwalten
-
-Short_form=Kurzform
-
-Shortcut=Tastenk\u00fcrzel
-
-Show/edit_BibTeX_source=BibTeX-Quelltextpanel_anzeigen
-
-Show_'Firstname_Lastname'='Vorname_Nachname'_anzeigen
-
-Show_'Lastname,_Firstname'='Nachname,_Vorname'_anzeigen
-
-Show_BibTeX_source_by_default=Quelltextpanel_standardm\u00e4\u00dfig_anzeigen
-
-Show_BibTeX_source_panel=BibTeX-Quelltextpanel_anzeigen
-
-Show_confirmation_dialog_when_deleting_entries=Dialog_zum_L\u00f6schen_von_Eintr\u00e4gen_anzeigen
-
-Show_description=Beschreibung_anzeigen
-
-Show_dynamic_groups_in_<i>italics</i>=Dynamische_Gruppen_<i>kursiv</i>_anzeigen
-
-Show_entries_*not*_in_group_selection=Zeige_Eintr\u00e4ge,_die_*nicht*_in_der_Gruppenauswahl_sind
-
-Show_file_column=Datei-Spalte_anzeigen
-
-Show_icons_for_groups=Gruppen-Icon_anzeigen
-Show_last_names_only=Zeige_nur_Nachnamen
-
-Show_names_unchanged=Namen_unver\u00e4ndert_anzeigen
-
-Show_one_less_rows=Zeige_eine_Zeile_weniger
-
-Show_one_more_row=Zeige_eine_Zeile_mehr
-
-Show_optional_fields=Optionale_Felder_anzeigen
-
-Show_PDF/PS_column=PDF/PS-Spalte_anzeigen
-
-Show_required_fields=Ben\u00f6tigte_Felder_anzeigen
-
-Show_URL/DOI_column=URL/DOI-Spalte_anzeigen
-
-Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Warnmeldung_bei_doppeltem_BibTeX-Key_anzeigen
-
-Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Warnmeldung_bei_leerem_BibTeX-Key_anzeigen
-
-Simple_HTML=Einfaches_HTML
-
-Size=Gr\u00f6\u00dfe
-
-Skip=\u00dcberspringen
-Skipped_-_No_PDF_linked=\u00dcbersprungen_-_Kein_PDF_verlinkt
-Skipped_-_PDF_does_not_exist=\u00dcbersprungen_-_PDF_exisitert_nicht
-
-Skipped_entry.=Eintrag_\u00fcbersprungen.
-
-Sort_alphabetically=Alphabetisch_sortieren
-
-Sort_Automatically=Automatisch_sortieren
-
-Sort_order=Sortierung
-
-sort_subgroups=Untergruppen_sortieren
-
-Sorted_all_subgroups_recursively.=Alle_Untergruppen_rekursiv_sortiert.
-
-Sorted_immediate_subgroups.=Alle_direkten_Untergruppen_sortiert.
-
-source_edit=Quelltextbearbeitung
-Special_Name_Formatters=Spezielle_Namens-Formatierer
-
-Special_table_columns=Spezielle_Spalten
-SQL_connection_established.=SQL-Verbindung_hergestellt.
-
-Start_incremental_search=Weitersuchen_(bei_direkter_Suche)
-
-Start_search=Suche_starten
-
-Starting_import=Starte_Import
-
-Statically_group_entries_by_manual_assignment=Statisches_Gruppieren_der_Eintr\u00e4ge_durch_manuelle_Zuweisung
-
-Status=Status
-
-Stop=Stop
-
-Store_journal_abbreviations=Abk\u00fcrzungen_der_Zeitschriften_speichern
-
-Store_string=String_speichern
-
-Store_the_following_fields_with_braces_around_capital_letters=Die_folgenden_Felder_mit_geschweiften_Klammern_um_die_Gro\u00dfbuchstaben_speichern
-
-Stored_entry=Eintrag_gespeichert
-
-Strings=Ersetzen
-
-Strings_for_database=Strings_f\u00fcr_die_Datei
-
-Subdatabase_from_aux=Teildatenbank_aus_aux-Datei
-
-Suggest=Vorschlag
-
-#### These lines were changed:
-Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Wechselt_zwischen_vollem_und_abgek\u00fcrztem_Zeitschriftentitel_falls_bekannt.
-
-Synchronize_%0_links=%0-Links_synchronisieren
-Synchronize_file_links=Links_zu_Dateien_synchronisieren
-
-Synchronizing_%0_links...=Synchronisiere_%0-Links...
-
-Table_appearance=Erscheinungsbild_der_Tabelle
-
-Table_background_color=Hintergrundfarbe_der_Tabelle
-
-Table_grid_color=Farbe_des_Tabellenrasters
-
-Table_text_color=Textfarbe_der_Tabelle
-
-Tabname=Tab-Name
-Target_file_cannot_be_a_directory.=Die_Zieldatei_darf_kein_Verzeichnis_sein.
-
-Tertiary_sort_criterion=Drittes_Sortierkriterium
-
-Test=Test
-
-Text_Input_Area=Text_einf\u00fcgen
-
-The_#_character_is_not_allowed_in_BibTeX_fields=Das_Zeichen_#_ist_in_BibTeX-Feldern_nicht_erlaubt
-
-The_chosen_date_format_for_new_entries_is_not_valid=Das_Datumsformat_f\u00fcr_neue_Eintr\u00e4ge_ist_nicht_g\u00fcltig
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Die_gew\u00e4hlte_Kodierung_'%0'_konnte_folgende_Buchstaben_nicht_darstellen:_
-
-The_CiteSeer_fetch_operation_returned_zero_results.=Das_Importieren_von_CiteSeerX_ergab_keine_Ergebnisse.
-
-The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=Die_aktuelle_Version_hat_eine_neue_Methode,_Links_zu_externen_Dateien_zu_behandeln.<br>Um_sie_zu_nutzen,_m\u00fcssen_Ihre_Links_in_das_neue_Format_\u00fcbertragen_werden<br>und_JabRef_muss_konfiguriert_werden,_um_die_neuen_Links_anzuzeigen.
-
-the_field_<b>%0</b>=das_Feld_<b>%0</b>
-
-The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Die_Datei<BR>_'%0'_<BR>wurde_von_einem_externen_Programm_ver\u00e4ndert!
-
-The_group_"%0"_already_contains_the_selection.=Die_Gruppe_"%0"_enth\u00e4lt_bereits_diese_Auswahl.
-
-The_label_of_the_string_can_not_be_a_number.=Der_Name_des_Strings_darf_keine_Zahl_sein.
-
-The_label_of_the_string_can_not_contain_spaces.=Der_Name_des_Strings_darf_keine_Leerzeichen_enthalten.
-
-The_label_of_the_string_can_not_contain_the_'#'_character.=Der_Name_des_Strings_darf_nicht_das_Zeichen_'#'_enthalten.
-
-The_output_option_depends_on_a_valid_import_option.=Die_Ausgabe-Option_beruht_auf_einer_g\u00fcltigen_Import-Option.
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=Die_PDF-Datei_enth\u00e4lt_mindestens_einen_BibTeX-Datensatz.\nWollen_Sie_diese(n)_als_neue_Eintr\u00e4ge_in_die_aktuelle_Datei_importieren?
-
-The_regular_expression_<b>%0</b>_is_invalid%c=Der_regul\u00e4re_Ausdruck_<b>%0</b>_ist_ung\u00fcltig%c
-
-The_search_is_case_insensitive.=Gro\u00df-/Kleinschreibung_wird_nicht_unterschieden.
-
-The_search_is_case_sensitive.=Gro\u00df-/Kleinschreibung_wird_unterschieden.
-
-The_string_has_been_removed_locally=Der_String_wurde_lokal_entfernt
-
-There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Es_gibt_m\u00f6gliche_Duplikate_(markiert_mit_'D'),_die_nicht_gekl\u00e4rt_werden_konnten._Fortfahren?
-
-this_button_will_update=Dieser_Button_\u00e4ndert_die_verwendete<BR>Spaltenbreite_in_der_Tabelle_der_Eintr\u00e4ge
-This_database_was_written_using_an_older_version_of_JabRef.=Diese_Datei_wurde_mit_einer_\u00e4lteren_JabRef-Version_erstellt.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Dieser_Eintrag_hat_keinen_BibTeX-Key._Soll_jetzt_einer_erstellt_werden?
-
-This_entry_is_incomplete=Dieser_Eintrag_ist_unvollst\u00e4ndig
-
-This_entry_type_cannot_be_removed.=Dieser_Eintragstyp_kann_nicht_entfernt_werden.
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Dies_ist_ein_externer_Link_des_Typs_'%0',_der_nicht_definiert_ist._Was_wollen_Sie_tun?
-
-This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Diese_Gruppe_enth\u00e4lt_manuell_zugewiesene_Eintr\u00e4ge._Eintr\u00e4ge_k\u00f6nnen_dieser_Gruppe_zugewiesen_werde [...]
-
-This_group_contains_entries_in_which=Diese_Gruppe_enth\u00e4lt_Eintr\u00e4ge,_bei_denen
-
-This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Diese_Gruppe_enth\u00e4lt_Eintr\u00e4ge,_in_denen_ein_beliebiges_Feld_den_regul\u00e4ren_Ausdruck_<b>%0</b>_enth\u00e4lt.
-
-This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Diese_Gruppe_enth\u00e4lt_Eintr\u00e4ge,_in_denen_ein_beliebiges_Feld_den_Ausdruck_<b>%0</b>_enth\u00e4lt.
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Diese_Gruppe_enth\u00e4lt_Eintrage,_deren_Feld_<b>%0</b>_das_Stichwort_<b>%1</b>_enth\u00e4lt
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Diese_Gruppe_enth\u00e4lt_Eintrage,_deren_Feld_<b>%0</b>_den_regul\u00e4ren_Ausdruck_<b>%1</b>_enth\u00e4lt
-
-This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Dies_ist_ein_einfacher_Copy_&_Paste_Dialog_zum_Einf\u00fcgen_von_Feldern_aus_normalem_Text.
-This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=JabRef_untersucht_damit_jeden_%0-Link_und_\u00fcberpr\u00fcft,_ob_die_Datei_existiert._Falls_nicht,_werden_Ihnen_Optionen_gegeben,<BR>um_das_Problem_zu_l\u00f6sen.
-
-This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=F\u00fcr_diesen_Vorgang_m\u00fcssen_alle_ausgew\u00e4hlen_Eintr\u00e4ge_einen_BibTeX-Key_haben.
-This_operation_requires_at_least_one_entry.=Dieser_Vorgang_ben\u00f6tigt_mindestens_einen_Eintrag.
-
-This_operation_requires_one_or_more_entries_to_be_selected.=F\u00fcr_diesen_Vorgang_muss_mindestens_ein_Eintrag_ausgew\u00e4hlt_sein.
-
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Alle_externen_Links_werden_aus_den_PDF-_und_PS-Feldern_in_das_Feld_'%0'_verschoben._Fortfahren?
-
-To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Einstellungen_unter_<B>Optionen_->_Einstellungen_der_Zeitschriften_verwalten</B>
-
-Toggle_abbreviation=Abk\u00fcrzung_an-/abschalten
-Toggle_entry_preview=Eintragsvorschau_ein-/ausblenden
-Toggle_groups_interface=Gruppenansicht_ein-/ausblenden
-Toggle_search_panel=Suchdialog_ein-/ausblenden
-
-Try_different_encoding=Versuchen_Sie_es_mit_einer_anderen_Kodierung
-
-Type_set_to_'other'=Typ_als_'other'_deklariert
-Unabbreviate_journal_names_of_the_selected_entries=Abk\u00fcrzung_der_Zeitschriftentitel_der_ausgew\u00e4hlten_Eintr\u00e4ge_aufheben
-Unabbreviated_%0_journal_names.=Bei_%0_Zeitschriftentiteln_wurde_die_Abk\u00fcrzung_aufgehoben.
-
-unable_to_access_LyX-pipe=LyX-pipe_nicht_gefunden
-
-Unable_to_create_graphical_interface=Grafische_Benutzeroberfl\u00e4che_konnte_nicht_erzeugt_werden
-Unable_to_open_file.=Datei_kann_nicht_ge\u00f6ffnet_werden.
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=\u00d6ffnen_des_Links_nicht_m\u00f6glich._Die_Anwendung_'%0',_die_dem_Dateityp_'%1'_zugeordnet_ist,_konnte_nicht_aufgerufen_werden.
-Unable_to_read_default_icon_theme.=Datei_des_Standard-Icon-Themes_nicht_lesbar.
-Unable_to_read_icon_theme_file=Datei_des_pers\u00f6nlichen_Icon-Themes_nicht_lesbar
-
-unable_to_write_to=konnte_nicht_speichern_auf
-Undefined_file_type=Unbekannter_Dateityp
-
-Undo=R\u00fcckg\u00e4ngig
-
-Union=Vereinigung
-
-Unknown_bibtex_entries=Unbekannte_BibTeX_Eintr\u00e4ge
-
-unknown_edit=unbekannter_Bearbeitungsschritt
-
-unknown_entry_type=unbekannter_Eintragstyp
-
-Unknown_export_format=Unbekanntes_Export-Format
-
-Unmark_all=S\u00e4mtliche_Markierungen_aufheben
-
-Unmark_entries=Markierung_aufheben
-
-Unmark_entry=Markierung_aufheben
-
-Unmarked_selected=Markierung_f\u00fcr_ausgew\u00e4hlte_Eintr\u00e4ge_aufgehoben
-
-Unpack_EndNote_filter_set=Entpacke_EndNote_Filter-Set
-
-Unpacked_file.=Datei_entpackt.
-
-Unsupported_version_of_class_%0\:_%1=Nicht_unterst\u00fctzte_Version_der_Klasse_%0:_%1
-
-untitled=ohne_Titel
-
-Up=Hoch
-
-Update_to_current_column_widths=Aktuelle_Spaltenbreiten_verwenden
-
-Updated_group_selection=Gruppenauswahl_aktualisiert
-Upgrade_external_links=Externe_Links_aktualisieren
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Externe_PDF/PS-Links_aktualisieren,_um_das_Feld_'%0'_zu_benutzen.
-Upgrade_file=Datei_aktualisiert
-Upgrade_old_external_file_links_to_use_the_new_feature=Alte_Links_zu_externen_Dateien_aktualisieren,_um_die_neue_Funktion_zu_nutzen
-Upgraded_links.=Links_aktualisiert.
-UPPER=GROSSBUCHSTABEN
-Upper_Each_First=Jeden_Ersten_Buchstaben_Gro\u00df
-Upper_first=Ersten_Buchstaben_gro\u00df
-
-usage=Benutzung
-
-Use_antialiasing_font=Antialias-Schrift_benutzen
-Use_autocompletion_for_the_following_fields=Autovervollst\u00e4ndigung_f\u00fcr_folgende_Felder_benutzen
-Use_custom_icon_theme=Angepasstes_Icon-Theme_verwenden
-Use_default_viewer=Standard-Anwendung_benutzen
-
-Use_inspection_window_also_when_a_single_entry_is_imported.=Kontrollfenster_benutzen,_auch_wenn_nur_ein_Eintrag_importiert_wird
-
-Use_native_file_dialog=Plattformabh\u00e4ngigen_Dateidialog_verwenden
-
-Use_other_look_and_feel=anderes_"look_and_feel"_benutzen
-Use_Regular_Expression_Search=Suche_mit_regul\u00e4rem_Ausdruck_benutzen
-
-Use_regular_expressions=Regul\u00e4re_Ausdr\u00fccke_benutzen
-
-Use_the_following_delimiter_character(s)=Folgende(s)_Trennzeichen_benutzen
-Username_\:=Benutzername:
-
-Value_cleared_externally=Wert_extern_gel\u00f6scht
-
-Value_set_externally=Wert_extern_gesetzt
-
-verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=\u00fcberpr\u00fcfen_Sie,_ob_LyX_l\u00e4uft_und_ob_die_Angaben_zur_lyxpipe_stimmen
-
-View=Ansicht
-Vim_Server_Name=Vim_Server-Name
-
-Waiting_for_ArXiv...=Warte_auf_ArXiv...
-
-Warn_about_unresolved_duplicates_when_closing_inspection_window=Warnung_zu_ungekl\u00e4rten_Duplikaten_ausgeben,_wenn_das_Kontrollfenster_geschlossen_wird
-
-Warn_before_overwriting_existing_keys=Vor_dem_\u00dcberschreiben_von_existierenden_Keys_warnen
-
-Warning=Warnung
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Achtung:_Dateiwiederherstellung_konnte_nicht_durchgef\u00fchrt_werden;_die_Datei_k\u00f6nnte_besch\u00e4digt_sein._Fehlermeldung
-
-Warning_there_is_a_duplicate_key=Achtung!_Es_ist_ein_doppelter_Key_vorhanden
-
-Warnings=Warnungen
-
-web_link=Web-Link
-
-What_do_you_want_to_do?=Was_m\u00f6chten_Sie_tun?
-
-When_adding/removing_keywords,_separate_them_by=Trennzeichen_zwischen_Stichw\u00f6rtern_im_Gruppierungs-Feld
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Schreibe_XMP-Metadaten_in_die_PDFs,_die_mit_den_ausgew\u00e4hlten_Eintr\u00e4gen_verlinkt_sind.
-
-with=mit
-
-Word=Wort
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=BibTeX-Eintrag_als_XMP-Metadaten_ins_PDF_schreiben.
-Write_XMP=XMP_schreiben
-Write_XMP-metadata=Schreibe_XMP-Metadaten
-Write_XMP-metadata_for_all_PDFs_in_current_database?=XMP-Metadaten_f\u00fcr_alle_PDFs_der_aktuellen_Datei_schreiben?
-
-Writing_XMP=Schreibe_XMP
-Writing_XMP_metadata...=XMP-Metadaten_werden_geschrieben...
-Writing_XMP_metadata_for_selected_entries...=XMP-Metadaten_f\u00fcr_ausgew\u00e4hlte_Eintr\u00e4ge_werden_geschrieben...
-Writing_XMP_to_'%0'...=Schreibe_XMP_in_'%0'...
-
-Wrong_file_format=Falsches_Dateiformat
-Wrote_XMP-metadata=XMP-Metadaten_geschrieben
-Wrote_XMP_to_'%0'.=XMP_in_'%0'_geschrieben.
-
-XMP-annotated_PDF=PDF_mit_XMP-Anmerkungen
-XMP_Export_Privacy_Settings=Sicherheitseinstellungen_f\u00fcr_den_XMP-Export
-
-XMP_metadata=XMP-Metadaten
-XMP_metadata_found_in_PDF\:_%0=XMP-Metadaten_gefunden_im_PDF:_%0
-
-You_must_restart_JabRef_for_this_to_come_into_effect.=Sie_m\u00fcssen_JabRef_neu_starten,_damit_diese_\u00c4nderungen_in_Kraft_treten.
-You_have_changed_the_language_setting.=Sie_haben_die_Spracheinstellung_ge\u00e4ndert.
-You_have_changed_the_look_and_feel_setting.=Sie_haben_die_Einstellungen_des_Erscheinungsbildes_('look_and_feel')_ge\u00e4ndert.
-
-You_have_cleared_this_field._Original_value=Sie_haben_dieses_Feld_gel\u00f6scht._Urspr\u00fcnglicher_Wert
-
-You_have_entered_an_invalid_search_'%0'.=Sie_haben_eine_ung\u00fcltige_Suche_'%0'_eingegeben.
-
-You_must_choose_a_file_name_to_store_journal_abbreviations=Sie_m\u00fcssen_einen_Dateinamen_w\u00e4hlen,_um_die_Abk\u00fcrzungen_der_Zeitschriften_zu_speichern
-
-You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Sie_m\u00fcssen_JabRef_neu_starten,_damit_die_Tastenk\u00fcrzel_funktionieren.
-
-You_must_set_both_BibTeX_key_and_%0_directory=Sie_m\u00fcssen_sowohl_den_BibTeX-Key_als_auch_das_%0-Verzeichnis_angeben
-
-Your_new_key_bindings_have_been_stored.=Ihre_neuen_Tastenk\u00fcrzel_wurden_gespeichert.
-The_following_fetchers_are_available\:=Folgende_Recherchetools_stehen_zur_Verf\u00fcgung:
-Could_not_find_fetcher_'%0'=Recherchetool_'%0'_konnte_nicht_gefunden_werden
-Running_Query_'%0'_with_fetcher_'%1'.=Abfrage_'%0'_wird_mit_dem_Recherchetool_'%1'_durchgef\u00fchrt.
-Please_wait!=Bitte_warten!
-Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=Die_Abfrage_'%0'_mit_dem_Recherchetool_'%1'_lieferte_keine_Ergebnisse.
-Open_SPIRES_entry=SPIRES-Eintrag_\u00f6ffnen
-Move/Rename_file=Datei_verschieben/umbenennen
-File_moved=Datei_verschoben
-Move_file_failed=Fehler_beim_Verschieben_der_Datei
-Could_not_move_file=Datei_konnte_nicht_verschoben_werden
-Could_not_find_file_'%0'.=Datei_'%0'_nicht_gefunden.
-Move/rename_file=Datei_verschieben/umbenennen
-Number_of_entries_successfully_imported=Zahl_der_erfolgreich_importierten_Eintr\u00e4ge
-Import_canceled_by_user=Import_durch_Benutzer_abgebrochen
-Progress\:_%0_of_%1=Fortschritt:_%0_von_%1
-Error_while_fetching_from_JSTOR=Fehler_beim_Abrufen_von_JSTOR
-
-Fetching_Medline_by_id...=Rufe_Medline_mittels_ID_ab...
-
-Fetching_Medline_by_term...=Rufe_Medline_mittels_Suchbegriff_ab...
-Medline_import_canceled=Medline-Import_abgebrochen
-Please_enter_a_valid_number=Bitte_geben_Sie_eine_g\u00fcltige_Zahl_ein
-Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Bitte_geben_Sie_eine_durch_Kommas_unterteilte_Liste_von_Medline-IDs_(Zahlen)_oder_Suchausdr\u00fccken_ein.
-An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=Fehler_beim_Abruf_der_SPIRES-Quelle_(%0)\:
-Error_while_fetching_from_Spires\:_=Fehler_beim_Abruf_von_SPIRES\:_
-Connect_to_external_SQL_database=Mit_externer_SQL-Datenbank_verbinden
-Export_to_external_SQL_database=Export_in_externe_SQL-Datenbank
-
-Show_results_in_dialog=Ergebnisse_im_Dialogfenster_anzeigen
-Global_search=Globale_Suche
-Show_search_results_in_a_window=Suchergebnisse_in_einem_Fenster_anzeigen
-Search_results=Suchergebnisse
-Move_file_to_file_directory?=Datei_in_Dateiverzeichnis_verschieben?
-Rename_to_'%0'=Umbenennen_in_'%0'
-Move_to_file_directory=In_Dateiverzeichnis_verschieben
-
-You_have_changed_the_menu_and_label_font_size.=Sie_haben_die_Schriftgr\u00f6\u00dfe_f\u00fcr_Men\u00fcs_und_Label_ge\u00e4ndert.
-
-Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Die_Datei_ist_gesch\u00fctzt._Speichern_nicht_m\u00f6glich,_bis_externe_\u00c4nderungen_gepr\u00fcft_wurden.
-Protected_database=Gesch\u00fctzte_Datei
-Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Die_Datei_kann_nicht_gespeichert_werden,_bis_externe_\u00c4nderungen_gepr\u00fcft_wurden.
-
-Database_protection=Dateischutz
-Unable_to_save_database=Speichern_der_Datei_nicht_m\u00f6glich
-BibTeX_key_generator=BibTeX-Key-Generator
-Unable_to_open_link.=\u00d6ffnen_des_Links_nicht_m\u00f6glich
-Search_JSTOR=JSTOR_durchsuchen
-Attempting_SQL_import...=Versuche,_SQL_zu_importieren...
-BibO_RDF=BibO_RDF
-HTML_parser=HTML-Parser
-
-Move_the_keyboard_focus_to_the_entry_table=Tastatur-Fokus_auf_die_Tabelle_setzen
-MIME_type=MIME-Typ
-
-This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Diese_Funktion_\u00f6ffnet_neue_oder_importierte_Dateien_in_einer_bereits_laufenden_Instanz_von_JabRef<BR>und_nicht_in_einem_neuen_Fenster._Das_ist_beispielsweise_n\u00fctzlich,<BR>we [...]
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Beachten_Sie,_dass_diese_Einstellungen_nur_f\u00fcr_die_obsoleten_<b>pdf</b>-_und_<b>ps</b>-Felder_genutzt_werden.<BR>F\u00fcr_die_meisten_Benutzer_reicht_es_aus,_das_<b>Standard-Verzeichnis_f\u00fcr_Dateien</b>_zu_setzen.
-Legacy_file_fields=Obsolete_Datei-Felder
-
-This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=JabRef_sucht_nach_jeder_%0-Dateiendung_und_\u00fcberpr\u00fcft,_ob_die_Datei_existiert.<br>Falls_nicht,_erhalten_Sie_Optionen,_um_das_Problem_zu_l\u00f6sen.
-
-Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Recherche_starten,_z.B._"--fetch=Medline:cancer"
-
-The_ACM_Digital_Library=ACM_Digital_Library
-Reset=Zur\u00fccksetzen
-
-Use_IEEE_LaTeX_abbreviations=Benutze_IEEE-LaTeX-Abk\u00fcrzungen
-The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
-Search_ACM_Portal=Suche_im_ACM-Portal
-Connection_to_ACM_Portal_failed=Verbindung_zum_ACM-Portal_fehlgeschlagen
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=Beim_\u00d6ffnen_des_Dateilinks_die_passende_Datei_suchen,_falls_keine_verlinkt_ist
-Settings_for_%0=Einstellungen_f\u00fcr_%0
-Insert_selected_citations_into_Vim=Ausgew\u00e4hlte_Eintr\u00e4ge_in_Vim_einf\u00fcgen
-RIS=RIS
-Assign_exclusively_to_group=Ausschlie\u00dflich_der_Gruppe_zuordnen
-Bad_Request_'%0'.=Fehlerhafte_Anfrage_'%0'.
-
-Mark_entries_imported_into_an_existing_database=Eintr\u00e4ge,_die_in_eine_Tabelle_importiert_werden,_markieren
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Markierung_aller_Eintr\u00e4ge_aufheben,_bevor_neue_Eintr\u00e4ge_importiert_werden
-
-Forward=Vor
-Back=Zur\u00fcck
-Sort_the_following_fields_as_numeric_fields=Sortiere_folgende_Felder_als_numerische_Felder
-Line_%0\:_Found_corrupted_BibTeX-key.=Zeile_%=\:_Besch\u00e4digter_BibTeX-Key_gefunden.
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Zeile_%0\:_Besch\u00e4digter_BibTeX-Key_gefunden_(enth\u00e4lt_Leerzeichen).
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Zeile_%0\:_Besch\u00e4digter_BibTeX-Key_gefunden_(Komma_fehlt).
-Finished_downloading_full_text_document=Herunterladen_des_Volltext-Dokuments_abgeschlossen
-Unable_to_find_full_text_document_in_the_linked_web_page.=Das_Volltext-Dokument_konnte_auf_der_verlinkten_Internetseite_nicht_gefunden_werden.
-Connection_error_when_trying_to_find_full_text_document.=Verbindungsfehler_beim_Versuch,_das_Volltext-Dokument_zu_finden.
-This_entry_provides_no_URL_or_DOI_links.=Dieser_Eintrag_enth\u00e4lt_keine_URL-_oder_DOI-Links.
-Full_text_article_download_failed=Herunterladen_des_Volltext-Beitrags_fehlgeschlagen
-Update_to_current_column_order=Aktuelle_Spaltenanordnung_verwenden
-
-Rename_field=Feld_umbenennen
-Set/clear/rename_fields=Felder_setzen/l\u00f6schen/umbenennen
-Rename_field_to\:=Feld_umbenennen\:
-Move_contents_of_a_field_into_a_field_with_a_different_name=Inhalt_eines_Felds_in_ein_Feld_mit_anderem_Namen_verschieben
-
-You_can_only_rename_one_field_at_a_time=Sie_k\u00f6nnen_nur_eine_Datei_auf_einmal_umbenennen
-Remove_all_broken_links=Alle_ung\u00fcltigen_Links_l\u00f6schen
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Port_%0_konnte_nicht_f\u00fcr_externen_Zugriff_genutzt_werden;_er_wird_m\u00f6glicherweise_von_einer_anderen_Anwendung_benutzt._Versuchen_Sie_einen_anderen_Port.
-
-Plugin_installer=Plugin-Installationsprogramm
-Unable_to_create_plugin_directory=Plugin-Verzeichnis_konnte_nicht_erstellt_werden
-Unable_to_copy_file=Datei_konnte_nicht_kopiert_werden
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Plugin_erfolgreich_installiert._Sie_m\u00fcssen_JabRef_neu_starten,_damit_das_Plugin_geladen_wird.
-Unable_to_create_user_plugin_directory=Benutzerspezifisches_Plugin-Verzeichnis_konnte_nicht_erstellt_werden
-Plugin_installation_failed.=Installation_des_Plugins_fehlgeschlagen.
-The_same_version_of_this_plugin_is_already_installed.=Diese_Version_des_Plugins_ist_bereits_installiert.
-A_newer_version_of_this_plugin_is_already_installed.=Eine_neuere_Version_des_Plugins_ist_bereits_installiert.
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Eine_oder_mehrere_\u00e4ltere_Version(en)_dieses_Plugins_ist_bereits_installiert._Alte_Version(en)_l\u00f6schen?
-Old_versions_deleted_successfully.=Alte_Version(en)_erfolgreich_gel\u00f6scht.
-
-Install_plugin=Plugin_installieren
-Download_plugin=Plugin_herunterladen
-Plugin_manager=Plugin-Manager
-Delete_the_%0_selected_plugins?=%0_ausgew\u00e4hlte_Plugins_l\u00f6schen?
-Delete_plugins=L\u00f6sche_Plugins
-Delete_the_selected_plugin?=Ausgew\u00e4hlte_Plugins_l\u00f6schen?
-Delete_plugin=L\u00f6sche_Plugin
-Enter_download_URL=Download-URL_eingeben
-Plugin_name=Plugin-Name
-Version=Version
-Unknown=Unbekannt
-Not_loaded=Nicht_geladen
-Loaded=Geladen
-Could_not_determine_version_of_=Version_konnte_nicht_bestimmt_werden_von
-Install_anyway?=Trotzdem_installieren?
-
-Looking_for_full_text_document...=Suche_Volltext-Dokument...
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Folge_DOI-_oder_URL-Link_und_versuche,_PDF-Volltext_zu_lokalisieren
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Volltext-Dokument_konnte_nicht_gefunden_werden._F\u00fcr_die_Webseite_'0%'_ist_kein_Suchalgorithmus_definiert.
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=PDF-Link_gefunden,_aber_es_wurde_ein_falscher_MIME-Typ_\u00fcbertragen._M\u00f6glicherweise_haben_Sie_keinen_Zugang_zum_Volltext-Dokument.
-
-Autosave=Automatische_Sicherung
-Prompt_before_recovering_a_database_from_an_autosave_file=Best\u00e4tigen,_wenn_eine_Datei_aus_einer_automatischen_Sicherung_wiederhergestellt_werden_soll
-Autosave_interval_(minutes)=Intervall_f\u00fcr_automatische_Sicherung_(Minuten)
-Do_you_want_to_recover_the_database_from_the_autosave_file?=Wollen_Sie_die_Datei_aus_der_automatischen_Sicherung_wiederherstellen?
-Recover_from_autosave=Wiederherstellen_aus_automatischer_Sicherung
-%0_warnings=%0_Warnungen
-Save_in_current_table_sort_order=Speichern_sortiert_nach_der_aktuellen_Tabelle
-Export_in_current_table_sort_order=Exportieren_sortiert_nach_der_aktuellen_Tabelle
-Export_ordered_by_author/editor/year=Exportieren_sortiert_nach_author/editor/year
-Export_entries_in_their_original_order=Eintr\u00e4ge_in_urspr\u00fcnglicher_Reihenfolge_exportieren
-
-Error_opening_file_'%0'.=Fehler_beim_\u00d6ffnen_der_Datei_'%0'.
-Autosave_of_file_'%0'=Automatische_Sicherung_der_Datei_'%0'
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Fehler_beim_\u00d6ffnen_der_automatischen_Sicherung_von_'%0'._Stattdessen_wird_versucht,_'%0'_zu_\u00f6ffnen.
-
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugins,_die_in_Ihrem_Plugin-Verzeichnis_(%0)_installiert_wurden:
-Plugins_installed_in_other_locations\:=Plugins,_die_in_anderen_Verzeichnissen_installiert_wurden:
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=Die_Plugins_werden_beim_n\u00e4chsten_Start_von_JabRef_entfernt.
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=Das_Plugin_wird_beim_n\u00e4chsten_Start_von_JabRef_entfernt.
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Alte_Plugin-Versionen_werden_beim_n\u00e4chsten_Start_von_JabRef_entfernt.
-Formatter_not_found\:_%0=Formatierer_nicht_gefunden:_%0
-The_following_formatters_could_not_be_found=Die_folgenden_Formatierer_konnten_nicht_gefunden_werden
-
-Clear_inputarea=Eingabefeld_l\u00f6schen
-
-Automatically_set_file_links_for_this_entry=Dateilinks_f\u00fcr_diesen_Eintrag_automatisch_festlegen
-Could_not_save,_file_locked_by_another_JabRef_instance.=Speichern_nicht_m\u00f6glich,_die_Datei_wird_von_einer_anderen_JabRef-Instanz_verwendet.
-File_is_locked_by_another_JabRef_instance.=Die_Datei_ist_durch_eine_andere_JabRef-Instanz_gesperrt.
-Do_you_want_to_override_the_file_lock?=Wollen_Sie_die_Datei_trotz_Sperre_\u00fcberschreiben?
-File_locked=Datei_gesperrt
-Current_tmp_value=Derzeitiger_tmp-Wert
-Metadata_change=Metadaten-\u00c4nderung
-Changes_have_been_made_to_the_following_metadata_elements=An_den_folgenden_Metadaten_wurden_\u00c4nderungen_vorgenommen
-
-Generate_groups_for_author_last_names=Erstelle_Gruppen_f\u00fcr_Nachnamen_der_Autoren
-Generate_groups_for_editor_last_names=Erstelle_Gruppen_f\u00fcr_Nachnamen_der_Herausgeber
-Generate_groups_from_keywords_in_a_BibTeX_field=Erstelle_Gruppen_aus_den_Stichw\u00f6rtern_eines_BibTeX-Feldes
-Enforce_legal_characters_in_BibTeX_keys=Erzwinge_erlaubte_Zeichen_in_BibTeX-Keys
-The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Das_Zeichen_#_ist_in_BibTeX-Keys_nicht_erlaubt,_au\u00dfer_es_ist_mit_einem_Escape-Zeichen_versehen_wie_in_'\\#'.
-Before_saving,_please_edit_any_strings_containing_the_#_character.=Entfernen_Sie_vor_dem_Speichern_alle_Ausdr\u00fccke,_in_denen_das_Zeichen_#_vorkommt.
-
-Save_without_backup?=Ohne_Backup_Speichern?
-Unable_to_create_backup=Erstellen_des_Backups_fehlgeschlagen
-
-File_directory_is_not_set_or_does_not_exist.=Dateiverzeichnis_wurde_nicht_angegeben_oder_existiert_nicht
-Move_file_to_file_directory.=Datei_ins_Dateiverzeichnis_verschieben
-Rename_file_to=Datei_umbenennen_in
-<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Alle_Eintr\u00e4ge</b>_(diese_Gruppe_kann_nicht_ver\u00e4ndert_oder_gel\u00f6scht_werden)
-static_group=statische_Gruppe
-dynamic_group=dynamische_Gruppe
-refines_supergroup=bezieht_die_Obergruppe_mit_ein
-includes_subgroups=ber\u00fccksichtigt_Untergruppen
-contains=enth\u00e4lt
-search_expression=Suchausdruck
-
-Disable_file_renaming_in_non-native_file_dialog=Umbenennen_von_Dateien_im_plattformunabh\u00e4ngigen_Dateidialog_deaktivieren
-File_dialog=Dateidialog
-No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Keine_Eintr\u00e4ge_gefunden._Anscheinend_haben_Sie_keine_Erlaubnis,_in_JStor_zu_suchen.
-
-Search_ScienceDirect=ScienceDirect_durchsuchen
-Error_while_fetching_from_ScienceDirect=Fehler_beim_Abrufen_von_ScienceDirect
-
-Error_initializing_custom_export_format_from_string_'%0'=Fehler_beim_Initialisieren_des_externen_Export-Format_aus_der_Zeichenkette_'%0'
-
-BibLaTeX_mode=BibLaTeX-Modus
-Optional_fields_2=Optionale_Felder_2
-Please_wait=Bitte_warten
-Waiting_for_save_operation_to_finish=Das_Ende_des_Speichervorgangs_wird_abgewartet
-Resolving_duplicate_BibTeX_keys...=Beseitige_doppelte_BibTeX-Keys...
-Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Beseitigen_doppelter_BibTeX-Keys_abgeschlossen._%0_Eintr\u00e4ge_ge\u00e4ndert.
-This_database_contains_one_or_more_duplicated_BibTeX_keys.=Diese_Datei_enth\u00e4lt_einen_oder_mehrere_doppelte_BibTeX-Keys.
-Do_you_want_to_resolve_duplicate_keys_now?=Wollen_Sie_die_doppelten_Eintr\u00e4ge_jetzt_beseitigen?
-
-Find_and_remove_duplicate_BibTeX_keys=Finde_und_entferne_doppelte_BibTeX-Keys
-Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Erwartete_Syntax_f\u00fcr_--fetch='<Name_des_Fetchers>:<Anfrage>'
-Duplicate_BibTeX_key=Doppelter_BibTeX-Key
-Duplicate_key=Doppelter_Key
-Generate_key=Key_erstellen
-
-Import_marking_color=Farbe_zum_Markieren_von_importierten_Eintr\u00e4gen
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_Eintr\u00e4ge_gefunden._Um_die_Serverlast_zu_verringern,_werden_nur_%1_Datens\u00e4tze_heruntergeladen._Es_wird_sehr_langsam_sein,_um_keine_Probleme_mit_ACM_zu_bekommen.
-BibTeX_importer=BibTeX-Import-Filter
-
-Always_add_letter_(a,_b,_...)_to_generated_keys=Immer_einen_Buchstaben_(a,_b,_...)_zum_BibTeX-Key_hinzuf\u00fcgen
-Ensure_unique_keys_using_letters_(a,_b,_...)=Eindeutige_Keys_mit_Buchstaben_(a,_b,_...)_sicherstellen
-Ensure_unique_keys_using_letters_(b,_c,_...)=Eindeutige_Keys_mit_Buchstaben_(b,_c,_...)_sicherstellen
-Entry_editor_active_background_color=Aktive_Hintergrundfarbe_des_Eintragseditors
-Entry_editor_background_color=Hintergrundfarbe_des_Eintragseditors
-Entry_editor_font_color=Schriftfarbe_des_Eintragseditors
-Entry_editor_invalid_field_color=Farbe_f\u00fcr_ung\u00fclte_Felder_im_Eintragseditor
-Table_and_entry_editor_colors=Tabellen-_und_Eintragseditor-Farben
-
-An_autosave_file_was_found_for_this_database._This_could_indicate_=Es_wurde_eine_automatische_Sicherheitskopie_dieser_Datei_gefunden._Das_k\u00f6nnte_darauf_hindeuten,_
-that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=dass_JabRef_nicht_korrekt_beendet_wurde,_als_diese_Datei_zuletzt_in_Gebrauch_war.
-General_file_directory=Standard-Dateiverzeichnis
-User-specific_file_directory=Benutzerdefiniertes_Dateiverzeichnis
-Error_setting_look_and_feel=Fehler_in_den_Look_and_Feel-Einstellungen
-Search_failed\:_illegal_search_expression=Suche_fehlgeschlagen\:_Ung\u00fcltiger_Suchausdruck
-Show_ArXiv_column=ArXiv-Spalte_anzeigen
-<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Entpacke_die_Zip-Datei_mit_den_Import-/Export-Filtern_f\u00fcr_Endnote,_<BR>um_eine_optimale_Interfunktion_mit_JabRef_zu_gew\u00e4hrleisten.
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Gruppen_hervorheben,_die_Eintr\u00e4ge_in_einer_der_ausgew\u00e4hlten_Gruppen_enthalten
-
-You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=Sie_m\u00fcssen_einen_Zahlwert_zwischen_1025_und_65535_eintragen_in_das_Textfeld_f\u00fcr
-Automatically_open_browse_dialog_when_creating_new_file_link=Beim_Erstellen_eines_neuen_Datei-Links_den_Durchsuchen-Dialog_automatisch_\u00f6ffnen
-Import_Metadata_from\:=Metadaten_importieren_von:
-Choose_the_source_for_the_metadata_import=Quelle_zum_Import_von_Metadaten_w\u00e4hlen
-Create_entry_based_on_XMP_data=Eintrag_aus_XMP-Daten_erstellen
-Create_entry_based_on_data_fetched_from=Eintrag_erstellen_aus_Daten_von
-Create_blank_entry_linking_the_PDF=Leeren_Eintrag_erstellen_mit_Link_zum_PDF
-Only_attach_PDF=Nur_PDF_anh\u00e4ngen
-Mr._dLib_Metadata_Entries_Associated_With\:=Mr._dLib_Metadaten-Eintr\u00e4ge_verkn\u00fcfen_mit:
-Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr._dLib_Metadaten-Eintr\u00e4ge_mit_PDF-Datei_verkn\u00fcpfen
-Title=Titel
-Author(s)=Autor(en)
-Published_Year=Erscheinungsjahr
-No_metadata_found.=Keine_Metadaten_gefunden.
-Mr._dLib_web_service_is_temporarily_unavailable.=Der_Mr._dLib_Web-Service_ist_derzeit_nicht_verf\u00fcgbar.
-Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Der_Mr._dLib_Web-Service_ist_derzeit_nicht_erreichbar._Bitte_versuchen_Sie_es_sp\u00e4ter_erneut.
-You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Sie_sind_nicht_mit_dem_Internet_verbunden._Um_auf_den_Mr._dLib_Web-Service_zuzugreifen,_ist_eine_Internetverbindung_erforderlich.
-No_Internet_Connection.=Keine_Internetverbindung.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Diese_JabRef-Version_versucht,_auf_eine_alte_Version_des_Mr._dLib_Web-Service_zuzugreifen,_die_nicht_mehr_funktioniert.\nBitte_besuchen_Sie_http://jabref.sourceforge.net_oder_http://www.mr-dlib.org_f\u00fcr_weitere_Informationen_und_Updates.
-Web_Service_Version_Outdated=Veraltete_Version_des_Web-Service
-The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Die_Version_des_Mr._dLib_Web-Service,_auf_die_Sie_zugreifen_wollen,_ist_veraltet.
-Update_empty_fields_with_data_fetched_from=Leere_Felder_aktualisieren_mit_Daten_von
-Create_New_Entry=Neuen_Eintrag_erstellen
-Update_Existing_Entry=Bestehenden_Eintrag_aktualisieren
-Mr._dLib=Mr._dLib
-More_information=Weitere_Informationen
-Fetching_Metadata...=Lade_Metadaten...
-Metadata=Metadaten
-Autocomplete_names_in_'Firstname_Lastname'_format_only=Automatische_Vervollst\u00e4ndigung_von_Namen_nur_im_Format_'Vorname_Nachname'
-Autocomplete_names_in_'Lastname,_Firstname'_format_only=Automatische_Vervollst\u00e4ndigung_von_Namen_nur_im_Format_'Nachname,_Vorname'
-Autocomplete_names_in_both_formats=Automatische_Vervollst\u00e4ndigung_von_Namen_in_beiden_Formaten
-Marking_color_%0=Markierungsfarbe_%0
-The_name_'comment'_can_not_be_used_as_an_entry_type_name.=Der_Name_'comment'_kann_nicht_als_Name_f\u00fcr_einen_Eintragstyp_verwendet_werden.
-You_must_enter_an_integer_value_in_the_text_field_for=Sie_m\u00fcssen_einen_Zahlwert_eintragen_im_Textfeld_f\u00fcr
-File_directory=Dateiverzeichnis
-Send_as_email=Als_E-Mail_senden
-References=Literaturverweise
-Sending_of_emails=Senden_der_E-Mails
-Subject_for_sending_an_email_with_references=Betreff_zum_Senden_einer_E-Mail_mit_Literaturverweisen
-Automatically_open_folders_of_attached_files=Ordner_mit_angeh\u00e4ngten_Dateien_automatisch_\u00f6ffnen
-Create_entry_based_on_content=Eintrag_anhand_von_Inhalt_erstellen
-Store_choice_as_default=Auswahl_als_Standard_speichern
-Do_not_show_this_box_again_for_this_import=Dialog_f\u00fcr_diesen_Import_nicht_wieder_anzeigen
-Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Immer_diesen_PDF-Importstil_benutzen_(nicht_bei_jedem_Import_nachfragen)
-Error_creating_email=Fehler_beim_Erstellen_der_E-Mail
-Could_not_open_directory=Ordner_konnte_nicht_ge\u00f6ffnet_werden
-Entries_added_to_an_email=Eintr\u00e4ge_zur_E-Mail_hinzugef\u00fcgt
-exportFormat=Exportformat
-Output_file_missing=Ausgabedatei_fehlt
-No_search_matches.=Keine_\u00dcbereinstimmungen_gefunden.
-The_output_option_depends_on_a_valid_input_option.=Die_Ausgabeoption_ben\u00f6tigt_eine_g\u00fcltige_Eingabeoption.
-Default_import_style_for_drag&drop_of_PDFs=Standard-Importstil_f\u00fcr_Drag&Drop_von_PDFs
-Default_PDF_file_link_action=Standardaktion_f\u00fcr_PDF-Dateiverweise
-File_name_format_pattern=Formatmuster_f\u00fcr_Dateinamen
-PostgreSQL_database=PostgreSQL-Datenbank
-DIN_1505=DIN_1505
-Wrong_Format=Falsches_Format
-Path_to_gnuclient_or_emacsclient=Pfad_zu_gnuclient_oder_emacsclient
-Additional_parameters=Weitere_Parameter
-Encrypted_documents_are_not_supported=Verschl\u00fcsselte_Dateien_werden_nicht_unterst\u00fctzt
-Cite_selected_entries=Ausgew\u00e4hlte_Eintr\u00e4ge_zitieren
-Cite_selected_entries_with_in-text_citation=Ausgew\u00e4hlte_Eintr\u00e4ge_im_Text_zitieren
-Cite_special=Spezielles_Zitieren
-Extra_information_(e.g._page_number)=Zusatzinformation_(z.B._Seitenzahl)
-Manage_citations=Literaturverweise_verwalten
-Problem_modifying_citation=Problem_beim_\u00c4ndern_des_Literaturverweises
-Citation=Literaturverweis
-Context=Kontext
-Extra_information=Zusatzinformation
-Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=BibTeX-Eintrag_f\u00fcr_Verweismarker_'0%'_konnte_nicht_aufgel\u00f6st_werden.
-Styles=Stile
-Select_style=Stil_w\u00e4hlen
-This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Dies_ist_die_Liste_der_verf\u00fcgbaren_Stile._W\u00e4hlen_Sie_aus,_welchen_Sie_benutzen_m\u00f6chten.
-Journals=Zeitschriften
-Cite=Zitieren
-Cite_in-text=Im_Text_zitieren
-Insert_empty_citation=Leeren_Verweis_einf\u00fcgen
-Merge_citations=Literaturverweise_zusammenf\u00fchren
-Manual_connect=Manuelle_Verbindung
-Select_Writer_document=Writer-Dokument_w\u00e4hlen
-Sync_OO_bibliography=OO-Bibliographie_synchronisieren
-OpenOffice=OpenOffice
-Select_which_open_Writer_document_to_work_on=Bitte_w\u00e4hlen_Sie,_mit_welchem_ge\u00f6ffneten_Writer-Dokument_Sie_arbeiten_m\u00f6chten
-Connected_to_document=Verbindung_zum_Dokument_hergestellt
-Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Literaturverweis_ohne_Text_einf\u00fcgen_(der_Eintrag_wird_in_der_Literaturliste_erscheinen)
-Cite_selected_entries_with_extra_information=Ausgew\u00e4hlte_Eintr\u00e4ge_mit_Zusatzinformation_zitieren
-Ensure_that_the_bibliography_is_up-to-date=Sicherstellen,_dass_die_Bibliographie_aktuell_ist
-Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=Ihr_OpenOffice-Dokument_verweist_auf_den_BibTeX-Key_'0%',_der_in_der_aktuellen_Datei_nicht_gefunden_wurde.
-Unable_to_synchronize_bibliography=Synchronisieren_der_Bibliographie_fehlgeschlagen
-Combine_pairs_of_citations_that_are_separated_by_spaces_only=Verbinde_Paare_von_Literaturverweisen,_die_nur_durch_Leerzeichen_voneinander_getrennt_sind
-Autodetection_failed=Automatische_Erkennung_fehlgeschlagen
-Connecting=Verbindung_wird_hergestellt
-Please_wait...=Bitte_warten...
-Unable_to_connect=Verbindung_fehlgeschlagen
-Set_connection_parameters=Verbindungsparameter_einstellen
-Path_to_OpenOffice_directory=Pfad_zum_OpenOffice-Ordner
-Path_to_OpenOffice_executable=Pfad_zum_OpenOffice-Programm
-Path_to_OpenOffice_library_dir=Pfad_zu_OpenOffice_Library-Ordner
-Autodetect=Automatische_Erkennung
-Connection_lost=Verbindung_verloren
-The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Das_Abschnittsformat_wird_von_der_Eigenschaft_'ReferenceParagraphFormat'_oder_'ReferenceHeaderParagraphFormat'_in_der_Stildatei_bestimmt.
-The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Das_Zeichenformat_wird_von_der_Eigenschaft_'CitationCharacterFormat'_in_der_Stildatei_bestimmt.
-Automatically_sync_bibliography_when_inserting_citations=Bibliographie_beim_Einf\u00fcgen_von_Literaturverweisen_automatisch_synchronisieren
-Look_up_BibTeX_entries_in_the_active_tab_only=BibTeX-Eintr\u00e4ge_nur_im_aktiven_Tab_suchen
-Look_up_BibTeX_entries_in_all_open_databases=BibTeX-Eintr\u00e4ge_in_allen_ge\u00f6ffneten_Dateien_suchen
-Use_in-parenthesis_citation=Literaturverweise_in_Klammern_setzen
-Use_in-text_citation=In-Text-Zitierweise_benutzen
-Autodetecting_paths...=Automatische_Erkennung_der_Pfade...
-Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=Die_OpenOffice-Installation_konnte_nicht_automatisch_gefunden_werden._Bitte_w\u00e4hlen_Sie_den_Installationspfad_manuell.
-Could_not_find_OpenOffice_installation=Die_OpenOffice-Installation_konnte_nicht_gefunden_werden
-Directories=Ordner
-Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Es_wurden_mehrere_OpenOffice-Programme_gefunden._Bitte_w\u00e4hlen_Sie,_zu_welchem_die_Verbindung_aufgebaut_werden_soll:
-Choose_OpenOffice_executable=OpenOffice-Programm_w\u00e4hlen
-Select_document=Datei_w\u00e4hlen
-Edit_Group_Membership=Gruppenzugeh\u00f6rigkeit_bearbeiten
-PostgreSQL=PostgreSQL
-
-Highlight_Words=W\u00f6rter_markieren
-JSTOR_import_cancelled=JSTOR-Import_abgebrochen
-HTML_list=HTML-Liste
-Click_group_to_toggle_membership_of_selected_entries=Gruppe_anklicken,_um_die_Zugeh\u00f6rigkeit_der_ausgew\u00e4hlten_Eintr\u00e4ge_zu_\u00e4ndern
-Use_EMACS_23_insertion_string=EMACS_23_Einf\u00fcgungs-Ausdruck_benutzen
-Normalize_to_BibTeX_name_format=Ins_BibTeX-Namensformat_normalisieren
-If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=Diese_Namensliste_soll_nach_M\u00f6glichkeit_so_normalisiert_werden,_dass_sie_sich_nach_der_\u00fcblichen_BibTeX-Namensformatierung_richtet
-Could_not_open_%0=%0_konnte_nicht_ge\u00f6ffnet_werden
-Unknown_import_format=Unbekanntes_Import-Format
-Open_INSPIRE_entry=INSPIRE-Eintrag_\u00f6ffnen
-An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=Beim_Abrufen_von_INSPIRE_ist_ein_Fehler_aufgetreten_(%0)\:
-Error_while_fetching_from_Inspire\:_=Fehler_beim_Abrufen_von_INSPIRE\:
-Web_search=Internetrecherche
-Autocomplete_names=Namen_automatisch_vervollst\u00e4ndigen
-You_must_select_either_a_valid_style_file,_or_use_the_default_style.=Sie_m\u00fcssen_entweder_eine_g\u00fcltige_Stildatei_ausw\u00e4hlen_oder_den_Standard-Stil_nutzen.
-Default_style=Standard-Stil
-Choose_style_file_directly=Stildatei_direkt_w\u00e4hlen
-Choose_from_a_directory=Aus_einem_Ordner_w\u00e4hlen
-
-No_directory_defined_for_%0-files=Kein_Verzeichnis_f\u00fcr_%0-Dateien_definiert
-Allow_file_links_relative_to_each_bib_file's_location=Dateilinks_relativ_zum_Pfad_der_bib-Datei_erlauben
-Style_selection=Stil-Auswahl
-The_panel_below_shows_the_definition_of_the_default_style.=Das_Fenster_unten_zeigt_die_Definition_des_Standard-Stils.
-If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=Wenn_Sie_es_als_Vorlage_f\u00fcr_einen_neuen_Stil_verwenden_wollen,_k\u00f6nnen_Sie_den_Inhalt_in_eine_neue_.jstyle-Datei_kopieren
-
-Default_style_(author-year_citations)=Standard-Stil_(Autor-Jahr-Verweise)
-Default_style_(numerical_citations)=Standard-Stil_(numerische_Verweise)
-No_valid_style_file_defined=Keine_g\u00fcltige_Stildatei_angegeben
-Choose_pattern=Muster_w\u00e4hlen
-Use_the_bib_file_location_as_primary_file_directory=Pfad_der_bib-Datei_als_prim\u00e4res_Dateiverzeichnis_verwenden
-Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=Das_gnuclient/emacsclient-Programm_konnte_nicht_gestartet_werden._Vergewissern_Sie_sich,_dass_das_emacsclient/gnuclient-Programm_installiert_und_im_PATH_enthalten_ist.
-Built-in_journal_list=Integrierte_Zeitschriften-Liste
-OpenOffice/LibreOffice_connection=OpenOffice/LibreOffice-Verbindung
-You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=Sie_k\u00f6nnen_zus\u00e4tzliche_Zeitschriftennamen_hinzuf\u00fcgen,_indem_Sie_eine_pers\u00f6nliche_Zeitschriftenliste_anlegen<br>_oder_bestehende_Zeitschriftenlisten_verlinken.
-JabRef_includes_a_built-in_list_of_journal_abbreviations.=JabRef_verf\u00fcgt_\u00fcber_eine_integrierte_Liste_von_Abk\u00fcrzungen_f\u00fcr_Zeitschriften.
-You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=Sie_m\u00fcssen_entweder_eine_g\u00fcltige_Stildatei_ausw\u00e4hlen_oder_einen_der_Standard-Stile_benutzen._
-You_must_select_either_a_valid_style_file,_or_use_a_default_style.=Sie_m\u00fcssen_entweder_eine_g\u00fcltige_Stildatei_ausw\u00e4hlen_oder_einen_Standard-Stil_benutzen._
-Show=Zeigen
-
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=Dieser_Dialog_ermöglicht_das_schnelle_Einfügen_von_Einträgen_aus_normalen_Text._Die_gewünschten_Textstellen<br>werden_markiert_und_z.B._durch_Doppelklick_einem_selektierten_BibTeX_Eintrag_zugeordnet.
-Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=Die_Java_Bouncy_Castle-Bibliothek_wurde_nicht_gefunden._Bitte_laden_Sie_sie_herunter_und_installieren_sie._Mehr_Informationen_unter_http://www.bouncycastle.org/.
-
-This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=Diese_Funktion_erstellt_eine_neue_Datei_basierend_auf_den_Eintr\u00e4gen,_die_von_einem_bestehenden_LaTeX-Dokument_ben\u00f6tigt_werden.
-You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=Sie_m\u00fcssen_eine_Ihrer_ge\u00f6ffneten_Dateien,_von_denen_Eintr\u00e4ge_genommen_werden_sollen,_sowie_die_AUX-Datei,_die_von_LaTeX_beim_Kompilieren_Ihres_Dokuments_erstellt_wird,_ausw\u00e4hlen.
-
-First_select_entries_to_clean_up.=W\u00e4hlen_Sie_zuerst_die_Eintr\u00e4ge_aus,_f\u00fcr_die_ein_Cleanup_durchgef\u00fchrt_werden_soll.
-Cleanup_entry=Eintrag_aufr\u00e4umen
-Autogenerate_PDF_Names=Automatische_PDF_Umbenennung
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=Automatische_PDF_Umbenennung_kann_nicht_r\u00fcckg\u00e4ngig_gemacht_werden._Fortfahren?
-File_rename_failed_for=Dateiumbenennung_schlug_fehl_f\u00fcr
-You_have_toggled_the_BibLaTeX_mode.=Sie_haben_den_BibLaTeX-Modus_de/aktiviert.
-Use_full_firstname_whenever_possible=Den_ganzen_Vornamen_nutzen,_wenn_m\u00f6glich
-Use_abbreviated_firstname_whenever_possible=Den_abgek\u00fcrzten_Vornamen_benutzen,_wenn_m\u00f6glich
-Use_abbreviated_and_full_firstname=Abgek\u00fcrzte_und_ganze_Vornamen_verwenden
-Autocompletion_options=Autovervollst\u00e4ndigungs-Optionen
-Autocomplete_after_following_number_of_characters=Autovervollst\u00e4ndigung_nach_der_folgenden_Anzahl_an_Zeichen
-Name_format_used_for_autocompletion=Namensformat_f\u00fcr_die_Autovervollst\u00e4ndigung
-Treatment_of_first_names=Behandlung_von_Vornamen
-No_icon_found_for_%0=Kein_Icon_gefunden_f\u00fcr_%0
-Cleanup_entries=Eintr\u00e4ge_werden_aufger\u00e4umt
-Automatically_assign_new_entry_to_selected_groups=Neuen_Eintrag_automatisch_den_ausgew\u00e4hlten_Gruppen_zuordnen
-Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=DOIs_von_den_Feldern_note_und_URL_ins_DOI-Feld_verschieben_und_das_http-Pr\u00e4fix_l\u00f6schen
-Format_content_of_month_field_to_#mon#=Inhalt_des_month-Feldes_zu_#mon#_umformatieren
-Ensure_that_page_ranges_are_of_the_form_num1--num2=Sicherstellen,_dass_Seitenbereiche_im_Format_S1--S2_sind
-Make_paths_of_linked_files_relative_(if_possible)=Pfade_verlinkter_Dateien_zu_relativen_Pfaden_\u00e4ndern_(falls_m\u00f6glich)
-Rename_PDFs_to_given_file_name_format_pattern=PDFs_entsprechend_dem_vorgegebenen_Namensformat_umbenennen
-Rename_only_PDFs_having_a_relative_path=Nur_PDFs_mit_einem_relativen_Pfad_umbenennen
-What_would_you_like_to_clean_up?=Was_w\u00fcrden_Sie_gerne_aufr\u00e4umen=
-Doing_a_cleanup_for_%0_entries...=Aufr\u00e4umen_von_%0_Eintr\u00e4gen...
-No_entry_needed_a_clean_up=Aufr\u00e4umen_bei_keinem_Eintrag_n\u00f6tig
-One_entry_needed_a_clean_up=Aufr\u00e4umen_bei_einem_Eintrag_n\u00f6tig
-%0_entries_needed_a_clean_up=Aufr\u00e4umen_bei_%0_Eintr\u00e4gen_n\u00f6tig
-Imported_=Importiert_wurden_
-Error_importing_from_database=Fehler_beim_Import_von_der_Datei
-Minimize_to_system_tray=In_den_Infobereich_minimieren
-
-Incomplete_search_results=Unvollst\u00e4ndiges_Suchergebnis
-%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=Es_wurden_%0_Eintr\u00e4ge_gefunden,_aber_nur_%1_konnten_gekl\u00e4rt_werden.
-
-Error_downloading_file_'%0'=Fehler_beim_Herunterladen_der_Datei_'%0'
-Download_failed=Download_fehlgeschlagen
-%0_databases_will_be_imported=%0_Dateien_werden_importiert
-
-Importing_cancelled=Import_abgebrochen
-There_are_no_available_databases_to_be_imported=Es_stehen_keine_Dateien_zum_Import_zur_Verf\u00fcgung
-Import_from_SQL_database=Import_von_einer_SQL-Datenbank
-Imported_%0_databases_successfully=%0_Dateien_wurden_erfolgreich_importiert
-<_CREATE_NEW_DATABASE_>=<_NEUE_DATENBANK_ERSTELLEN_>
-Remove_Selected=Ausgew\u00e4hlte_l\u00f6schen
-SQL_Database_Exporter=SQL-Datenbank-Exporter
-Select_target_SQL_database\:=W\u00e4hlen_Sie_die_SQL-Zieldatenbank:
-SQL_Database_Importer=SQL-Datenbank-Importer
-Please_select_which_JabRef_databases_do_you_want_to_import\:=Bitte_w\u00e4hlen_Sie,_welche_JabRef-Dateien_Sie_importieren_wollen:
-Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=Der_Gruppenbaum_konnte_nicht_geparsed_werden._Wenn_Sie_die_BibTeX-Datei_speichern,_gehen_alle_Gruppen_verloren.
-Attach_file=Datei_anh\u00e4ngen
-
-Setting_all_preferences_to_default_values.=Alle_Einstellungen_auf_die_Standard-Werte_setzen.
-Resetting_preference_key_'%0'=Einstellung_'0%'_zur\u00fccksetzen
-Unknown_preference_key_'%0'=Unbekannte_Einstellung_'0%'
-Unable_to_clear_preferences.=Einstellungen_konnten_nicht_zur\u00fcckgesetzt_werden.
-
-Reset_preferences_(key1,key2,..._or_'all')=Einstellungen_zur\u00fccksetzen_(key1,key2,..._oder_'all')
-Find_unlinked_files=Nicht_verlinkte_Dateien_finden
-Select_All=Alle_ausw\u00e4hlen
-Unselect_All=Auswahl_aufheben
-Expand_All=Alle_aufklappen
-Collapse_All=Alle_einklappen
-Select_Directory=Ordner_ausw\u00e4hlen
-Choose_Directory=Ordner_w\u00e4hlen
-Use_the_selected_directory_to_start_with_the_search.=Den_ausgew\u00e4hlten_Ordner_f\u00fcr_die_Suche_benutzen.
-Browse...=Durchsuchen...
-Opens_the_file_browser.=\u00d6ffnet_den_Dateimanager.
-Scan_directory=Ordner_durchsuchen
-Searches_the_selected_directory_for_unlinked_files.=Sucht_im_ausgew\u00e4hlten_Ordner_nach_nicht-verlinkten_Dateien.
-Starts_the_import_of_bibtex_entries.=Startet_den_Import_von_BibTeX-Eintr\u00e4gen.
-Leave_this_dialog.=Verlasse_diesen_Dialog.
-Create_directory_based_keywords=Erstelle_Stichworte,_die_auf_Ordnern_basieren
-Creates_keywords_in_created_entrys_with_directory_pathnames=Erstellt_Stichworte_in_erstellten_Eintr\u00e4gen_mit_Ordner-Pfadnamen
-Select_a_directory_where_the_search_shall_start.=Verzeichnis_w\u00e4hlen,_in_dem_die_Suche_starten_soll.
-Select_file_type\:=Dateityp_w\u00e4hlen:
-These_files_are_not_linked_in_the_active_database.=Diese_Dateien_sind_in_der_aktiven_Datenbank_nicht_verlinkt.
-Entry_type_to_be_created\:=Eintragstyp,_der_erstellt_werden_soll:
-Searching_file_system...=Dateisystem_wird_durchsucht...
-Importing_into_Database...=Importieren_in_die_Datei...
-Select_directory=Verzeichnis_w\u00e4hlen
-Select_files=Dateien_w\u00e4hlen
-Bibtex_entry_creation=Erstellung_eines_BibTeX-Eintrags
-<No_selection>=<Keine_Auswahl>
-Push_selection_to_TeXstudio=Auswahl_in_TeXstudio_einf\u00fcgen
-Path_to_TeXstudio=Pfad_zu_TeXstudio
-Program_'%0'_not_found=Programm_'%0'_nicht_gefunden
-Pushed_citations_to_TeXstudio=Literaturverweise_in_TeXstudio_eingef\u00fcgt
-Unable_to_connect_to_freecite_online_service.=Verbindung_zu_FreeCite_konnte_nicht_hergestellt_werden.
-Parse_with_FreeCite=Mit_FreeCite_parsen
-Insert_selected_citations_into_TeXstudio=Ausgew\u00e4hlte_Eintr\u00e4ge_in_TeXstudio_einf\u00fcgen
-The_current_BibTeX_key_will_be_overwritten._Continue?=Der_aktuelle_BibTeX-Key_wird_\u00fcberschrieben._Fortfahren?
-Overwrite_key=Key_\u00fcberschreiben
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Der_existierende_Key_wird_nicht_\u00fcberschrieben._Um_diese_Einstellung_zu_\u00e4ndern,_\u00f6ffnen_Sie_Optionen_->_Einstellungen_->_BibTeX-Key-Generator
-How_would_you_like_to_link_to_'%0'?=Wie_m\u00f6chten_Sie_zu_'%0'_verlinken?
-
-Bibtex_key_patterns=BibTeX-Key-Muster
-Changed_special_field_settings=Einstellungen_f\u00fcr_spezielle_Felder_ge\u00e4ndert
-Clear_priority=Priorit\u00e4t_aufheben
-Clear_rank=Rang_aufheben
-Compact_rank=Kompakter_Rang
-Convert_1st,_2nd,_..._to_real_superscripts=1st,_2nd,_..._in_hochgestellte_Buchstaben_konvertieren
-Dropped_comment_from_database=Kommentar_aus_Datei_gel\u00f6scht
-Enable_PDF_preview=PDF-Vorschau_aktivieren
-Enable_special_fields=Spezielle_Felder_aktivieren
-Five_stars=F\u00fcnf_Sterne
-Four_stars=Vier_Sterne
-Help_on_special_fields=Hilfe_zu_speziellen_Feldern
-Keywords_of_selected_entries=Stichworte_der_ausgew\u00e4hlten_Eintr\u00e4ge
-Manage_content_selectors=Inhaltsauswahl_verwalten
-Manage_keywords=Stichworte_verwalten
-Marked_entries'_quality_as_good=Qualit\u00e4t_der_Eintr\u00e4ge_als_gut_markieren
-Marked_entries_as_relevant=Eintr\u00e4ge_als_relevant_markieren
-No_priority_information=Keine_Informationen_zur_Priorit\u00e4t
-No_rank_information=Keine_Informationen_zum_Rang
-One_star=Ein_Stern
-Priority=Priorit\u00e4t
-Priority_high=Hohe_Priorit\u00e4t
-Priority_low=Niedrige_Priorit\u00e4t
-Priority_medium=Mittlere_Priorit\u00e4t
-Quality=Qualit\u00e4t
-Rank=Rang
-Relevance=Relevanz
-Set_priority=Priort\u00e4t_setzen
-Set_priority_to_high=Priorit\u00e4t_auf_hoch_setzen
-Set_priority_to_low=Priorit\u00e4t_auf_niedrig_setzen
-Set_priority_to_medium=Priorit\u00e4t_auf_mittel_setzen
-Set_rank_to_five_stars=Rang_auf_f\u00fcnf_Sterne_setzen
-Set_rank_to_four_stars=Rang_auf_vier_Sterne_setzen
-Set_rank_to_one_star=Rang_auf_einen_Stern_setzen
-Set_rank_to_three_stars=Rang_auf_drei_Sterne_setzen
-Set_rank_to_two_stars=Rang_auf_zwei_Sterne_setzen
-Show_one_letter_heading_for_icon_columns=\u00dcberschrift_mit_einem_Buchstaben_f\u00fcr_Spalten_mit_Icons_anzeigen
-Show_priority=Priorit\u00e4t_anzeigen
-Show_quality=Qualit\u00e4t_anzeigen
-Show_rank=Rang_anzeigen
-Show_relevance=Relevanz_anzeigen
-Synchronize_with_keywords=Mit_Stichworten_synchronisieren
-Synchronized_special_fields_based_on_keywords=Spezielle_Felder_wurden_mit_den_Stichworten_synchronisiert
-Three_stars=Drei_Sterne
-Toggle_relevance=Relevanz_ein-/ausschalten
-Toogle_quality_assured=Qualit\u00e4t_ein-/ausschalten
-Two_stars=Zwei_Sterne
-Update_keywords=Stichworte_aktualisieren
-Write_values_of_special_fields_as_separate_fields_to_BibTeX=Werte_von_speziellen_Feldern_als_separate_Felder_in_die_BibTeX-Datei_schreiben
-You_have_changed_settings_for_special_fields.=Sie_haben_die_Einstellungen_f\u00fcr_spezielle_Felder_ge\u00e4ndert.
-no_preview_available=keine_Vorschau_verf\u00fcgbar
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_Eintr\u00e4ge_gefunden._Um_die_Serverlast_zu_reduzieren,_werden_nur_%1_heruntergeladen.
-A_string_with_that_label_already_exists=Ein_String_mit_diesem_Label_ist_bereits_vorhanden
-Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=Verbindung_zu_OpenOffice_verloren._Bitte_stellen_Sie_sicher,_dass_OpenOffice_l\u00e4uft,_und_versuchen_Sie,_erneut_zu_verbinden.
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Eintrag_korrigieren_und_Editor_erneut_\u00f6ffnen,_um_den_Quelltext_anzuzeigen/zu_bearbeiten.
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=Keine_Verbindung_zu_einem_laufenden_gnuserv-Prozess_m\u00f6glich._Vergewissern_Sie_sich,_dass_Emacs_oder_XEmacs_l\u00e4uft<BR>und_dass_der_Server_gestartet_wurde_(mit_dem_Befehl_'server-start'/'gnuserv-start').
-Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=Verbindung_zu_OpenOffice_fehlgeschlagen.\nVergewissern_Sie_sich,_dass_Sie_OpenOffice_mit_Java-Unterst\u00fctzung_installiert_haben.\nBei_manueller_Verbindung_\u00fcberpr\u00fcfen_Sie_bitte_die_Programm-_und_Library-Pfade.\n\nFehlermeldung:_
-Created_group_"%0".=Gruppe_"%0"_wurde_erstellt.
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Die_Datei_wurde_extern_ge\u00e4ndert._Sind_Sie_sicher,_dass_Sie_speichern_m\u00f6chten?
-If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=Falls_bei_einem_eingef\u00fcgten_oder_importierten_Eintrag_das_Feld_bereits_belegt_ist,_\u00fcberschreiben.
-Import_Metadata_From_PDF=Metadaten_aus_PDF_importieren
-Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Keine_Verbindung_zu_einem_Writer-Dokument._Bitte_vergewissern_Sie_sich,_dass_ein_Dokument_ge\u00f6ffnet_ist,_und_benutzen_Sie_die_Schaltfl\u00e4che_'Writer-Dokument_w\u00e4hlen',_um_eine_Verbindung_herzustellen.
-Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=Bitte_beachten_Sie,_dass_dies_eine_fr\u00fche_Beta-Version_ist._Benutzen_Sie_sie_nicht,_ohne_ihre_Dateien_vorher_zu_sichern.
-Removed_all_subgroups_of_group_"%0".=Alle_Untergruppen_der_Gruppe_"%0"_wurden_entfernt.
-To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=Um_den_USB-Stick-Modus_zu_deaktivieren,_benennen_Sie_die_Datei_jabref.xml_in_demselben_Ordner_als_JabRef_oder_l\u00f6schen_Sie_sie.
-Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Verbindung_fehlgeschlagen._Ein_m\u00f6glicher_Grund_ist,_dass_JabRef_und_OpenOffice/LibreOffice_nicht_beide_im_32-bit_oder_64-bit_Modus_laufen.
-Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Name_und_Version_des_Plugins_konnten_nicht_ermittelt_werden._Dies_ist_m\u00f6glicherweise_kein_g\u00fcltiges_JabRef-Plugin.
-Use_the_following_delimiter_character(s)\:=Benutzen_Sie_die_folgenden_Trennzeichen:
-When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=Beim_Herunterladen_von_Dateien_oder_beim_Verschieben_von_verlinkten_Dateien_in_das_Dateiverzeichnis_soll_der_Pfad_der_bib-Datei_benutzt_werden,_nicht_das_oben_definierte_Dateiverzeichnis
-Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Ihre_Stildatei_legt_das_Zeichenformat_'%0'_fest,_das_in_Ihrem_aktuellen_OpenOffice-Dokument_nicht_definiert_ist.
-Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Ihre_Stildatei_legt_das_Abschnittsformat_'%0'_fest,_das_in_Ihrem_aktuellen_OpenOffice-Dokument_nicht_definiert_ist.
-
-Error_fetching_from_Google_Scholar=Fehler_beim_Abrufen_von_Google_Scholar
-Run_HTML_converter_on_title=Titel_mit_HTML-Konvertierer_bearbeiten
-Searching...=Suche_l\u00e4uft...
-You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=Sie_haben_mehr_als_%0_Eintr\u00e4ge_zum_Download_ausgew\u00e4hlt._Einige_Webseiten_k\u00f6nnten_zu_viele_Downloads_blockieren._M\u00f6chten_Sie_fortfahren?
-Confirm_selection=Auswahl_best\u00e4tigen
-Unknown_DOI\:_'%0'.=Unbekannter_DOI:_'0%'.
-Get_BibTeX_entry_from_DOI=BibTeX-Eintrag_aus_DOI_erstellen
-Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Hoch-_und_tiefgestellte_Zeichen_in_eine_Gleichung_konvertieren_und_nicht_als_Text_darstellen
-Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Nach_der_Suche_{}_zu_festgesetzten_Titelworten_hinzuf\u00fcgen,_um_Gro\u00df-/Kleinschreibung_beizubehalten
-Import_conversions=Konvertierungen_importieren
-Run_filter_on_title_keeping_the_case_of_selected_words=Filter_\u00fcber_Titel_laufen_lassen,_Gro\u00df-/Kleinschreibung_der_ausgew\u00e4hlten_Worte_unver\u00e4ndert_lassen
-Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=Zeitweilige_Fehler_auf_dem_IEEE_Xplore-Server._Bitte_versuchen_Sie_es_sp\u00e4ter_erneut.
-Please_enter_a_search_string=Bitte_geben_Sie_eine_Suchphrase_ein
-Please_open_or_start_a_new_database_before_searching=Bitte_\u00f6ffnen_Sie_eine_Datei_oder_legen_Sie_eine_neue_an,_bevor_Sie_suchen
-An_Error_occurred_while_fetching_from_ADS_(%0)\:=Beim_Abrufen_von_ADS_ist_ein_Fehler_aufgetreten_(%0):
-Error_while_fetching_from_ADS=Fehler_beim_Abrufen_von_ADS
-Error_while_fetching_from_OAI2=Fehler_beim_Abrufen_von_OAI2
-An_Error_occurred_while_parsing_abstract=Beim_Parsen_der_Zusammenfassung_ist_ein_Fehler_aufgetreten
-Unknown_DiVA_entry\:_'%0'.=Unbekannter_DiVA-Eintrag:_'0%'.
-Get_BibTeX_entry_from_DiVA=BibTeX-Eintrag_aus_DiVA_erstellen
-Log=Protokoll
-Remove_unneccessary_$,_{,_and_}=\u00dcberfl\u00fcssige_$,_{_und_}_entfernen
+#!
+#! created/edited by Popeye version 0.55 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+
+%0_contains_the_Regular_Expression_<b>%1</b>=%0_den_regul\u00e4ren_Ausdruck_<b>%1</b>_enth\u00e4lt
+
+%0_contains_the_term_<b>%1</b>=%0_den_Ausdruck_<b>%1</b>_enth\u00e4lt
+
+%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_nicht_den_regul\u00e4ren_Ausdruck_<b>%1</b>_enth\u00e4lt
+
+%0_doesn't_contain_the_term_<b>%1</b>=%0_nicht_den_Ausdruck_<b>%1</b>_enth\u00e4lt
+
+%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_nicht_exakt_dem_regul\u00e4ren_Ausdruck_<b>%1</b>_entspricht
+
+%0_doesn't_match_the_term_<b>%1</b>=%0_nicht_exakt_dem_Ausdruck_<b>%1</b>_entspricht
+
+%0_export_successful=%0-Export_erfolgreich
+
+%0_field_set=%0-Feld_erstellt
+
+%0_matches_the_Regular_Expression_<b>%1</b>=%0_exakt_dem_regul\u00e4ren_Ausdruck_<b>%1</b>_entspricht
+
+%0_matches_the_term_<b>%1</b>=%0_exakt_dem_Ausdruck_<b>%1</b>_entspricht
+
+<field_name>=<Feldname>
+<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Die_Datei_'%0',_die_vom_Eintrag<BR>'%1'_verlinkt_wird,_wurde_nicht_gefunden</HTML>
+
+<no_field>=<kein_Feld>
+
+<select>=<ausw\u00e4hlen>
+
+<select_word>=<Wort_ausw\u00e4hlen>
+A_string_with_this_label_already_exists=Ein_String_mit_diesem_Label_ist_bereits_vorhanden
+Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Zeitschriftentitel_der_ausgew\u00e4hlten_Eintr\u00e4ge_abk\u00fcrzen_(ISO-Abk\u00fcrzung)
+Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Zeitschriftentitel_der_ausgew\u00e4hlten_Eintr\u00e4ge_abk\u00fcrzen_(MEDLINE-Abk\u00fcrzung)
+
+Abbreviate_names=Namen_abk\u00fcrzen
+Abbreviated_%0_journal_names.=%0_Zeitschriftentitel_abgek\u00fcrzt.
+
+Abbreviation=Abk\u00fcrzung
+
+About_JabRef=\u00dcber_JabRef
+
+Abstract=Zusammenfassung
+
+Accept=\u00dcbernehmen
+
+Accept_change=\u00c4nderung_akzeptieren
+
+Action=Aktion
+
+Add=Hinzuf\u00fcgen
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=F\u00fcge_eine_(kompilierte)_externe_ImportFormat_Klasse_aus_einem_Verzeichnis_hinzu._\nDas_Verzeichnis_muss_nicht_im_Klassenpfad_von_JabRef_enthalten_sein.
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=F\u00fcge_eine_(kompilierte)_externe_ImportFormat_Klasse_aus_Verzeichnis_hinzu._\nDas_Verzeichnis_muss_nicht_im_Klassenpfad_von_JabRef_enthalten_sein.
+
+add_entries_to_group=Eintr\u00e4ge_zu_Gruppe_hinzuf\u00fcgen
+
+Add_entry_selection_to_this_group=Ausgew\u00e4hlte_Eintr\u00e4ge_zu_dieser_Gruppe_hinzuf\u00fcgen
+
+Add_from_folder=Aus_Klassenpfad_hinzuf\u00fcgen
+
+Add_from_jar=Aus_Archiv-Datei_hinzuf\u00fcgen
+
+add_group=Gruppe_hinzuf\u00fcgen
+
+Add_Group=Gruppe_hinzuf\u00fcgen
+
+Add_new=Neu
+
+Add_Subgroup=Untergruppe_hinzuf\u00fcgen
+
+Add_to_group=Zu_Gruppe_hinzuf\u00fcgen
+
+Added_group_"%0".=Gruppe_"%0"_hinzugef\u00fcgt.
+
+Added_new=Neu_hinzugef\u00fcgt
+
+Added_string=String_hinzugef\u00fcgt
+
+Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Zus\u00e4tzlich_k\u00f6nnen_Eintr\u00e4ge,_deren_Feld_<b>%0</b>_nicht_< [...]
+
+Advanced=Erweitert
+All_custom_file_types_will_be_lost._Proceed?=Alle_angepassten_Dateitypen_gehen_verloren._Fortfahren?
+
+All_Entries=Alle_Eintr\u00e4ge
+
+All_entries=Alle_Eintr\u00e4ge
+All_entries_of_this_type_will_be_declared_typeless._Continue?=Alle_Eintr\u00e4ge_dieses_Typs_werden_als_'ohne_Typ'_angesehen._Fortfahren?
+
+All_fields=Alle_Felder
+
+All_subgroups_(recursively)=Alle_Untergruppen_(rekursiv)
+
+Allow_editing_in_table_cells=Bearbeiten_in_der_Tabelle_zulassen
+An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Fehler_beim_Abrufen_der_OAI2-Quelle_(%0):
+An_Exception_ocurred_while_accessing_'%0'=Fehler_beim_Zugriff_auf_'%0'
+An_SAXException_ocurred_while_parsing_'%0'\:=Beim_Parsen_von_'%0'_ist_eine_SAX-Exception_aufgetreten:
+
+and=und
+and_inside_the_JabRef-jar\:=und_in_JabRef-jar:
+
+and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=Au\u00dferdem_muss_die_Klasse_beim_n\u00e4chsten_Start_von_JabRef_durch_den_"Classpath"_erreichbar_sein.
+
+any_field_that_matches_the_regular_expression_<b>%0</b>=ein_beliebiges_Feld,_auf_das_der_regul\u00e4re_Ausdruck_<b>%0</b>_passt,
+
+Appearance=Erscheinungsbild
+
+Append=anf\u00fcgen
+Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Inhalt_einer_BibTeX-Datei_an_die_aktuelle_Datei_anh\u00e4ngen
+
+Append_database=Datei_anh\u00e4ngen
+
+append_the_selected_text_to_bibtex_key=ausgew\u00e4hlten_Text_an_BibTeX-Key_anh\u00e4ngen
+Application=Anwendung
+
+Apply=\u00dcbernehmen
+
+Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argumente_wurden_der_laufenden_JabRef-Instanz_\u00fcbergeben._Schlie\u00dfen_l\u00e4uft.
+
+Assign_entry_selection_exclusively_to_this_group=Ausgew\u00e4hlte_Eintr\u00e4ge_ausschlie\u00dflich_dieser_Gruppe_zuordnen
+
+Assign_new_file=Neue_Datei_zuordnen
+
+Assign_the_original_group's_entries_to_this_group?=Eintr\u00e4ge_der_urspr\u00fcnglichen_Gruppe_zu_dieser_Gruppe_hinzuf\u00fcgen?
+
+Assigned_%0_entries_to_group_"%1".=%0_Eintr\u00e4ge_zu_Gruppe_"%1"_hinzugef\u00fcgt.
+
+Assigned_1_entry_to_group_"%0".=1_Eintrag_zu_Gruppe_"%0"_hinzugef\u00fcgt.
+At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=Zumindest_das_Plugin_'net.sf.jabref.core'_muss_vorhanden_sein.
+
+Attach_%0_file=Datei_%0_anf\u00fcgen
+
+Attach_URL=URL_anf\u00fcgen
+
+Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Versucht,_%0-Links_f\u00fcr_die_Eintr\u00e4ge_automatisch_zuzuordnen._Dies_funktioniert,_wenn_der_Name_einer_%0-Datei_im_%0-Verzeichnis_oder_einem_Unterverzeichnis<BR>identisch_ist_mit_dem_BibTeX-Key_eines_Eintrags_(erweitert_um_die_jeweilige_Dateiendung).
+Attempting_SQL_export...=Versuche_SQL-Export...
+
+Auto=Auto
+
+Autodetect_format=Format_automatisch_erkennen
+
+Autogenerate_BibTeX_key=BibTeX-Key_automatisch_generieren
+Autogenerate_BibTeX_keys=BibTeX-Keys_automatisch_generieren
+
+Autogenerate_groups=Gruppen_automatisch_erstellen
+
+autogenerate_keys=BibTeX-Keys_automatisch_generieren
+
+
+Autolink_files_with_names_starting_with_the_BibTeX_key=Dateien,_deren_Namen_mit_dem_BibTeX-Key_beginnen,_automatisch_verlinken
+Autolink_only_files_that_match_the_BibTeX_key=Nur_Dateien_verlinken,_deren_Namen_dem_BibTeX-Key_entsprechen
+
+Automatically_create_groups=Gruppen_automatisch_erstellen
+
+Automatically_create_groups_for_database.=Automatisch_Gruppen_f\u00fcr_die_Datei_anlegen.
+
+Automatically_created_groups=Automatisch_erzeugte_Gruppen
+
+Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Gruppenansicht_automatisch_ausblenden,_wenn_zu_einer_Datei_ohne_Gruppen_gewechselt_wird
+
+
+Automatically_remove_exact_duplicates=Exakte_Duplikate_automatisch_l\u00f6schen
+
+Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Gruppenansicht_automatisch_einblenden,_wenn_zu_einer_Datei_mit_Gruppen_gewechselt_wird
+
+Autoset=Automatisch_zuordnen
+
+Autoset_%0_field=Feld_%0_automatisch_setzen
+
+Autoset_%0_links._Allow_overwriting_existing_links.=%0_Links_automatisch_zuordnen._Vorhandene_Links_\u00fcberschreiben.
+
+Autoset_%0_links._Do_not_overwrite_existing_links.=%0_Links_automatisch_zuordnen._Vorhandene_Links_nicht_\u00fcberschreiben.
+Autoset_external_links=Externe_Links_werden_automatisch_gesetzt
+Autosetting_links=Links_werden_automatisch_gesetzt
+
+AUX_file_import=AUX_Datei_Import
+
+Available_export_formats=Verf\u00fcgbare_Exportformate
+
+Available_fields=Verf\u00fcgbare_BibTeX-Felder
+
+Available_import_formats=Verf\u00fcgbare_Importformate
+
+Background_color_for_optional_fields=Hintergrundfarbe_f\u00fcr_optionale_Felder
+
+Background_color_for_required_fields=Hintergrundfarbe_f\u00fcr_ben\u00f6tigte_Felder
+
+Backup_old_file_when_saving=Beim_Speichern_ein_Backup_der_alten_Datei_anlegen
+Beta_version=Beta-Version
+
+Bibkey_to_filename_conversion=Konvertierung_von_BibTeX-Key_zu_Dateiname
+
+BibTeX_key=BibTeX-Key
+
+BibTeX_key_is_unique.=Der_BibTeX-Key_ist_eindeutig.
+
+BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Kein_BibTeX-Key_vorhanden._Bitte_Dateinamen_zum_Download_angeben
+
+BibTeX_source=BibTeX-Quelltext
+
+BibTeXML=BibTeXML
+
+Binding=Tastenk\u00fcrzel
+Broken_link=Ung\u00fcltiger_Link
+
+Browse=Durchsuchen
+
+by=durch
+
+Calling_external_viewer...=Externes_Anzeigeprogramm_wird_aufgerufen
+
+Cancel=Abbrechen
+
+Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Eintr\u00e4ge_k\u00f6nnen_einer_Gruppe_nicht_hinzugef\u00fcgt_werden,_ohne_Keys_zu_generieren._Sollen_die_Keys_jetzt_generiert_werden?
+
+Cannot_merge_this_change=Kann_diese_\u00c4nderung_nicht_einf\u00fcgen
+
+Cannot_move_group_"%0"_down.=Gruppe_"%0"_kann_nicht_nach_unten_bewegt_werden.
+
+Cannot_move_group_"%0"_left.=Gruppe_"%0"_kann_nicht_nach_links_bewegt_werden.
+
+Cannot_move_group_"%0"_right.=Gruppe_"%0"_kann_nicht_nach_rechts_bewegt_werden.
+
+Cannot_move_group_"%0"_up.=Gruppe_"%0"_kann_nicht_nach_oben_bewegt_werden.
+
+case_insensitive=Gro\u00df-/Kleinschreibung_wird_nicht_unterschieden
+
+case_sensitive=Gro\u00df-/Kleinschreibung_wird_unterschieden
+
+Case_sensitive=Gro\u00df-/Kleinschreibung_unterscheiden
+
+change_assignment_of_entries=\u00c4nderung_der_zugewiesenen_Eintr\u00e4ge
+
+# The following are for case change in right-click menu in entry editor. The last four
+# illustrate the four variations of capitalization
+Change_case=Gro\u00df-_und_Kleinschreibung
+
+Change_entry_type=Eintragstyp_\u00e4ndern
+
+Change_file_type=Dateityp_\u00e4ndern
+
+change_key=BibTeX-Key_\u00e4ndern
+
+Change_of_Grouping_Method=\u00c4ndern_der_Gruppierungsmethode
+
+change_preamble=Pr\u00e4ambel_\u00e4ndern
+
+change_string_content=Inhalt_des_Strings_\u00e4ndern
+
+change_string_name=Namen_des_Strings_\u00e4ndern
+Change_table_column_and_General_fields_settings_to_use_the_new_feature=Tabellenspalte_und_Einstellungen_der_Allgemeinen_Felder_\u00e4ndern,_um_die_neue_Funktion_zu_nutzen
+
+change_type=Typ_\u00e4ndern
+
+changed_=ge\u00e4ndert_
+
+Changed_font_settings=Schrifteinstellungen_ge\u00e4ndert
+
+Changed_language_settings=Spracheinstellungen_ge\u00e4ndert.
+
+Changed_look_and_feel_settings="Look_and_Feel"-Einstellungen_ge\u00e4ndert
+
+Changed_preamble=Pr\u00e4ambel_ge\u00e4ndert
+
+Changed_type_to=Typ_ge\u00e4ndert_zu
+
+Characters_to_ignore=Folgende_Zeichen_ignorieren
+
+Check_existing_%0_links=Existierende_%0-Links_\u00fcberpr\u00fcfen
+
+Check_links=Links_\u00fcberpr\u00fcfen
+
+Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=URL_zum_Herunterladen_ausw\u00e4hlen._Der_Standardwert_f\u00fchrt_zu_einer_Liste,_die_von_den_JabRef-Entwicklern_zur_Verf\u00fcgung_gestellt_wird.
+Cite_command=Cite-Befehl
+
+Class_name=Klassenname
+
+Clear=Zur\u00fccksetzen
+
+clear_all_groups=Alle_Gruppen_l\u00f6schen
+
+Clear_field=Feld_l\u00f6schen
+
+Clear_fields=Felder_l\u00f6schen
+
+Clear_highlight=Markierten_l\u00f6schen
+
+Close=Schlie\u00dfen
+
+Close_dialog=Dialog_schlie\u00dfen
+
+Close_the_current_database=Aktuelle_Datei_schlie\u00dfen
+
+Close_the_help_window=Hilfefenster_schlie\u00dfen
+
+Close_window=Fenster_schlie\u00dfen
+
+Closed_database=Datei_geschlossen
+
+Collapse_subtree=Unterbaum_zuklappen
+
+Color_codes_for_required_and_optional_fields=Farbanzeige_f\u00fcr_ben\u00f6tigte_und_optionale_Felder
+
+Color_for_marking_incomplete_entries=Farbe_zum_Markieren_unvollst\u00e4ndiger_Eintr\u00e4ge
+
+Column_width=Spaltenbreite
+
+Command_line_id=Kommandozeilen_ID
+
+Complete_record=Kompletter_Eintrag
+Connect=Verbinden
+Connect_to_SQL_database=Mit_SQL-Datenbank_verbinden
+Connect_to_SQL_Database=Mit_SQL-Datenbank_verbinden
+Connection_to_IEEEXplore_failed=Verbindung_zu_IEEEXplore_fehlgeschlagen
+
+Contained_in=Enthalten_in
+
+Content=Inhalt
+
+Copied=Kopiert
+
+Copied_cell_contents=Zelleninhalt_kopiert
+
+Copied_key=BibTeX-Key_kopiert
+
+Copied_keys=BibTeX-Keys_kopiert
+
+Copy=Kopieren
+
+Copy_BibTeX_key=BibTeX-Key_kopieren
+Copy_file_to_file_directory.=Datei_in_das_Dateiverzeichnis_kopieren.
+Copy_files_to_file_directory.=Dateien_in_das_Dateiverzeichnis_kopieren.
+
+Copy_to_clipboard=In_die_Zwischenablage_kopieren
+
+Could_not_call_executable=Konnte_das_Programm_nicht_aufrufen
+
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Konnte_zu_keinem_aktiven_gnuserv-Prozess_verbinden._Vergewissern_Sie_sich,_dass_(X)Emacs_l\u00e4uft,<BR>und_dass_der_Server_gestartet_wurde_(mit_dem_Befehl_'gnuserv-start').
+
+# I have reformulated the following lines, because the 1st person form is not suitable:
+Could_not_connect_to_host_=Verbindung_zum_Host_fehlgeschlagen
+Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Verbindung_zum_Vim-Server_fehlgeschlagen._Vergewissern_Sie_sich,<br>dass_Vim_mit_korrektem_Servernamen_l\u00e4uft.
+
+Could_not_export_file=Konnte_Datei_nicht_exportieren
+
+Could_not_export_preferences=Einstellungen_konnten_nicht_exportiert_werden
+
+Could_not_find_a_suitable_import_format.=Kein_passendes_Importformat_gefunden.
+Could_not_find_directory_for_%0-files\:_%1=Verzeichnis_f\u00fcr_%0-Dateien_wurde_nicht_gefunden:_%1
+Could_not_find_image_file=Bilddatei_nicht_gefunden.
+
+Could_not_find_layout_file=Keine_Layoutdatei_gefunden
+
+Could_not_import_preferences=Einstellungen_konnten_nicht_importiert_werden
+
+Could_not_instantiate_%0=Konnte_Importer_nicht_erzeugen_%0
+Could_not_instantiate_%0_%1=Konnte_Importer_nicht_erzeugen_%0_%1
+
+Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Konnte_%0_nicht_realisieren._Haben_Sie_den_richtigen_Paket-Pfad_angegeben?
+
+Could_not_open_link=Link_konnte_nicht_ge\u00f6ffnet_werden
+
+Could_not_parse_number_of_hits=Anzahl_der_Treffer_konnte_nicht_ermittelt_werden
+Could_not_print_preview=Druckvorschau_fehlgeschlagen
+Could_not_run_the_'vim'_program.=Das_Programm_'vim'_konnte_nicht_gestartet_werden.
+
+Could_not_save_file=Datei_konnte_nicht_gespeichert_werden
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Die_Datei_konnte_nicht_gespeichert_werden._Die_Zeichenkodierung_'%0'_wird_nicht_unterst\u00fctzt.
+
+Create_group=Gruppe_anlegen
+
+Created_groups.=Gruppen_erstellt.
+
+crossreferenced_entries_included=Inklusive_querverwiesenen_Eintr\u00e4gen
+
+Current_content=Aktueller_Inhalt
+
+Current_value=Aktueller_Wert
+
+Custom_entry_types=Benutzerdefinierte_Eintragstypen
+
+Custom_entry_types_found_in_file=Benutzerdefinierte_Eintragstypen_gefunden
+Custom_icon_theme=Pers\u00f6nliches_Icon-Theme
+Custom_icon_theme_file=Datei_des_pers\u00f6nlichen_Icon-Themes
+
+Custom_importers=Externe_Importfilter
+
+Customize_entry_types=Eintragstypen_anpassen
+
+Customize_key_bindings=Tastenk\u00fcrzel_anpassen
+
+Cut=Ausschneiden
+
+cut_entries=Eintr\u00e4ge_ausschneiden
+
+cut_entry=Eintrag_ausschneiden
+
+Cut_pr=Ausschneiden
+Database_\:=Datenbank:
+
+Database_encoding=Zeichenkodierung_der_Datei
+
+Database_has_changed._Do_you_want_to_save_before_closing?=Die_Datei_wurde_ge\u00e4ndert._Wollen_Sie_vor_dem_Beenden_speichern?
+
+Database_properties=Eigenschaften_der_Datei
+
+Date_format=Datumsformat
+
+Default=Standard
+
+Default_encoding=Standard-Zeichenkodierung
+
+Default_grouping_field=Standard_Gruppierungs-Feld
+
+Default_look_and_feel=Standard_"look_and_feel"
+
+Default_pattern=Standardmuster
+
+Default_sort_criteria=Standard-Sortierkriterium
+Define_'%0'=Definiere_'%0'
+
+Delete=L\u00f6schen
+
+Delete_custom_format=Format_des_Eintragstyps_l\u00f6schen
+
+# I have reformulated the following lines, because the 1st person form is not suitable:
+# (Folgende_URL_konnte_nicht_analysiert_werden)
+delete_entries=Eintr\u00e4ge_l\u00f6schen
+
+Delete_entry=Eintrag_l\u00f6schen
+
+delete_entry=Eintrag_l\u00f6schen
+
+Delete_multiple_entries=Mehrere_Eintr\u00e4ge_l\u00f6schen
+
+Delete_rows=Zeilen_l\u00f6schen
+
+Delete_strings=Strings_l\u00f6schen
+
+Deleted=Gel\u00f6scht
+
+Delimit_fields_with_semicolon,_ex.=Felder_mit_Semikolon_abgrenzen,_z.B.
+
+Descending=Absteigend
+
+Description=Beschreibung
+
+Deselect_all=Auswahl_aufheben
+Deselect_all_duplicates=Auswahl_der_Duplikate_aufheben
+
+Details=Details
+
+Disable_entry_editor_when_multiple_entries_are_selected=Eintragseditor_sperren,_wenn_mehrere_Eintr\u00e4ge_ausgew\u00e4hlt_sind
+
+Disable_this_confirmation_dialog=Diesen_Best\u00e4tigungsdialog_deaktivieren
+
+Disable_this_warning_dialog=Diese_Warnmeldung_deaktivieren
+
+Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Alle_Eintr\u00e4ge_anzeigen,_die_zu_einer_oder_mehreren_der_ausgew\u00e4hlten_Gruppen_geh\u00f6ren.
+
+Display_all_error_messages=Zeige_alle_Fehlermeldugen
+
+Display_help_on_command_line_options=Zeige_Kommandozeilenhilfe
+
+Display_imported_entries_in_an_inspection_window_before_they_are_added.=Importierte_Eintr\u00e4ge_im_Kontrollfenster_anzeigen,_bevor_sie_hinzugef\u00fcgt_werden
+
+Display_only_entries_belonging_to_all_selected_groups.=Nur_Eintr\u00e4ge_anzeigen,_die_zu_allen_ausgew\u00e4hlten_Gruppen_geh\u00f6ren.
+
+Display_version=Version_anzeigen
+
+Displaying_no_groups=Keine_Gruppen_anzeigen
+
+Do_not_abbreviate_names=Namen_nicht_abk\u00fcrzen
+
+Do_not_autoset=Nicht_automatisch_zuordnen
+
+Do_not_import_entry=Eintrag_nicht_importieren
+
+Do_not_open_any_files_at_startup=Keine_Dateien_beim_Start_\u00f6ffnen
+
+Do_not_overwrite_existing_keys=Existierende_Keys_nicht_\u00fcberschreiben
+Do_not_show_splash_window_at_startup=Er\u00f6ffnungsbildschirm_beim_Programmstart_nicht_anzeigen
+Do_not_show_these_options_in_the_future=Diese_Optionen_in_Zukunft_nicht_anzeigen
+
+Do_not_wrap_the_following_fields_when_saving=Beim_Speichern_keinen_Zeilenumbruch_in_den_folgenden_Feldern_einf\u00fcgen
+Do_not_write_the_following_fields_to_XMP_Metadata\:=Folgende_Felder_nicht_in_die_XMP-Metadaten_schreiben:
+
+Do_you_want_JabRef_to_do_the_following_operations?=Soll_JabRef_die_folgenden_Vorg\u00e4nge_durchf\u00fchren?
+
+DocBook=DocBook
+
+Down=Abw\u00e4rts
+
+Download=Herunterladen
+
+Download_completed=Download_beendet
+
+Download_file=Datei_herunterladen
+
+Downloading...=Download_l\u00e4uft
+Drag_and_Drop_Error='Drag_&_Drop'-Fehler
+Drop_%0=%0_streichen
+
+duplicate_BibTeX_key=doppelter_BibTeX-Key
+
+Duplicate_BibTeX_key.=Doppelter_BibTeX-Key.
+
+Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Doppelter_BibTeX-Key._Es_kann_sein,_dass_die_Gruppierung_f\u00fcr_diesen_Eintrag_nicht_funktioniert.
+
+Duplicate_Key_Warning=Warnung:_Key_bereits_vorhanden
+
+Duplicate_pairs_found=Doppelte_Eintr\u00e4ge_gefunden
+
+duplicate_removal=Duplikate_entfernen
+
+Duplicate_string_name=Doppelter_String-Name
+
+Duplicates_found=Doppelte_Eintr\u00e4ge_gefunden
+
+Duplicates_removed=Doppelte_Eintr\u00e4ge_gel\u00f6scht
+
+Dynamic_groups=Dynamische_Gruppen
+
+Dynamically_group_entries_by_a_free-form_search_expression=Dynamisches_Gruppieren_der_Eintr\u00e4ge_anhand_eines_beliebigen_Suchausdrucks
+
+Dynamically_group_entries_by_searching_a_field_for_a_keyword=Dynamisches_Gruppieren_der_Eintr\u00e4ge_anhand_eines_Stichworts_in_einem_Feld
+
+Each_line_must_be_on_the_following_form=Jede_Zeile_muss_das_folgende_Format_aufweisen
+
+Edit=Bearbeiten
+
+Edit_custom_export=Bearbeite_externen_Exportfilter
+Edit_entry=Eintrag_bearbeiten
+Edit_file_link=Link_bearbeiten
+Edit_file_type=Dateityp_bearbeiten
+
+Edit_group=Gruppe_bearbeiten
+
+Edit_journal=Zeitschrift_bearbeiten
+
+Edit_preamble=Pr\u00e4ambel_bearbeiten
+Edit_strings=Strings_bearbeiten
+Editor_options=Herausgeber-Optionen
+
+empty_BibTeX_key=leerer_BibTeX-Key
+
+Empty_BibTeX_key.=Leerer_BibTeX-Key.
+
+Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Leerer_BibTeX-Key._Es_kann_sein,_dass_die_Gruppierung_f\u00fcr_diesen_Eintrag_nicht_funktioniert.
+
+empty_database=leere_Datenbank
+
+Enable_source_editing=Bearbeiten_von_Sourcecode_zulassen
+Enable_word/name_autocompletion=Autovervollst\u00e4ndigung_aktivieren
+
+Endnote=Endnote
+
+Enter_URL=URL_eingeben
+
+Enter_URL_to_download=URL_f\u00fcr_den_Download_eingeben
+
+entries=Eintr\u00e4ge
+
+Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Ein_manuelles_Hinzuf\u00fcgen_oder_Entfernen_von_Eintr\u00e4gen_ist_f\u00fcr_diese_Gruppe_nicht_m\u00f6glich.
+
+Entries_exported_to_clipboard=Eintr\u00e4ge_in_die_Zwischenablage_kopiert
+
+entries_have_undefined_BibTeX_key=Eintr\u00e4ge_haben_einen_unbestimmten_BibTeX-Key
+
+entries_into_new_database=Eintr\u00e4ge_in_neue_Datei
+
+entry=Eintrag
+
+Entry_editor=Eintragseditor
+
+Entry_in_current_database=Eintrag_in_aktueller_Datenbank
+
+Entry_in_import=Eintrag_in_Importierung
+
+Entry_preview=Eintragsvorschau
+
+Entry_table=Tabellenansicht
+
+Entry_table_columns=Spaltenanordnung
+
+Entry_type=Eintragstyp
+
+Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Namen_von_Eintragstypen_d\u00fcrfen_weder_Leerzeichen_noch_die_folgenden_Zeichen_enthalten
+
+Entry_types=Eintragstypen
+
+Error=Fehler
+Error\:_=Fehler:_
+Error_converting_Bibtex_to_XMP\:_%0=Fehler_beim_Konvertieren_von_BibTeX_nach_XMP:_%0
+Error_converting_XMP_to_'%0'...=Fehler_beim_Konvertieren_von_XMP_nach_'%0'...
+Error_exporting_to_clipboard=Fehler_beim_Exportieren_in_die_Zwischenablage
+
+##Error:_check_your_External_viewer_settings_in_Preferences=Fehler:_\u00fcberpr\u00fcfen_Sie_Ihre_Einstellungen_zu_Externen_Programmen
+Error_in_field=Fehler_in_Feld
+Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Fehler_beim_Starten_des_Plugin-Systems._Start_erfolgt_ohne_Plugins,_einige_Funktionen_k\u00f6nnten_fehlen.
+Error_occured_when_parsing_entry=Fehler_beim_Analysieren_des_Eintrags
+
+Error_opening_file=Fehler_beim_\u00d6ffnen_der_Datei
+
+Error_setting_field=Fehler_beim_Erstellen_des_Feldes
+Error_while_converting_BibtexEntry_to_XMP_%0=Fehler_beim_Konvertieren_des_BibTeX-Eintrags_nach_XMP_%0
+Error_while_downloading_file\:=Fehler_beim_Herunterladen_der_Datei:
+Error_while_fetching_from_OIA2=Fehler_beim_Abrufen_von_OIA2
+Error_while_writing=Fehler_beim_Schreiben
+
+Error_writing_to_%0_file(s).=Fehler_beim_Schreiben_in_%0_Datei(en).
+Error_writing_XMP_to_file\:_%0=Fehler_beim_Schreiben_von_XMP_in_die_Datei_%0
+
+Establishing_SQL_connection...=SQL-Verbindung_wird_aufgebaut...
+
+Exceptions=Ausnahmen
+
+Existing_file=Bestehende_Datei
+
+exists._Overwrite_file?=existiert._Ersetzen?
+exists._Overwrite?=ist_vorhanden._\u00dcberschreiben?
+
+Expand_subtree=Unterbaum_aufklappen
+
+Export=Exportieren
+
+Export_name=Filtername
+
+Export_preferences=Einstellungen_exportieren
+
+Export_preferences_to_file=Exportiere_Einstellungen_in_Datei
+
+Export_properties=Eigenschaften_f\u00fcr_Exportfilter
+
+Export_to_clipboard=In_die_Zwischenablage_kopieren
+Export_to_SQL_database=Export_in_SQL-Datenbank
+
+Exporting=Exportiere
+Extension=Erweiterung
+
+External_changes=Externe_\u00c4nderungen
+
+External_file_links=Links_zu_externen_Dateien
+
+External_files=Externe_Dateien
+
+External_programs=Externe_Programme
+
+External_viewer_called=Externer_Betrachter_aufgerufen
+
+Failed_to_read_groups_data_(unsupported_version\:_%0)=Gruppen_konnten_nicht_eingelesen_werden_(nicht_unterst\u00fctzte_Version:_%0)
+
+Fetch=Abrufen
+
+Field=Feld
+
+field=Feld
+
+# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
+Field_content=Feldinhalt
+
+Field_name=Feldname
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Feldbezeichnungen_d\u00fcrfen_keine_Leerzeichen_enthalten_und_keine_der_folgenden_Zeichen
+
+Field_sizes=Feldgr\u00f6\u00dfen
+
+Field_to_filter=Feld_f\u00fcr_Filter
+
+Field_to_group_by=Sortierfeld
+
+Fields=Felder
+
+File=Datei
+
+file=Datei
+
+File_'%0'_is_already_open.=Datei_'%0'_ist_bereits_ge\u00f6ffnet.
+
+File_'%0'_not_found=Datei_'%0'_nicht_gefunden
+
+File_changed=Datei_ge\u00e4ndert
+File_directory_is_'%0'\:=Dateiverzeichnis_ist_'%0':
+
+File_directory_is_not_set_or_does_not_exist!=Dateiverzeichnis_ist_nicht_gesetzt_oder_existiert_nicht
+File_download=Datei-Download
+File_exists=Datei_ist_vorhanden
+
+File_extension=Dateiendung
+
+File_has_been_updated_externally._What_do_you_want_to_do?=Die_Datei_wurde_extern_aktualisiert._Was_wollen_Sie_tun?
+
+File_not_found=Datei_nicht_gefunden
+File_type=Dateityp
+
+File_updated_externally=Datei_extern_ge\u00e4ndert
+
+filename=Dateiname
+
+Files_opened=Dateien_ge\u00f6ffnet
+
+Filter=Filter
+
+Finished_autosetting_external_links.=Automatische_Einstellung_externer_Links_abgeschlossen.
+
+Finished_synchronizing_%0_links._Entries_changed%c_%1.=Synchronisierung_von_%0_Links_abgeschlossen._Ge\u00e4nderte_Eintr\u00e4ge%c_%1.
+Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Schreiben_der_XMP-Metadaten_in_%0_Datei(en)_beendet.
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Schreiben_der_XMP-Metadaten_f\u00fcr_Datei_%0_beendet_(%1_\u00fcbersprungen,_%2_Fehler).
+
+First_select_the_entries_you_want_keys_to_be_generated_for.=W\u00e4hlen_Sie_zuerst_die_Eintr\u00e4ge_aus,_f\u00fcr_die_Keys_erstellt_werden_sollen.
+
+Fit_table_horizontally_on_screen=Tabelle_horizontal_dem_Bildschirm_anpassen
+
+Float=Oben_einsortieren
+
+Float_marked_entries=Markierte_Eintr\u00e4ge_zuoberst_anzeigen
+
+Font_Family=Schriftart
+
+Font_Preview=Vorschau
+
+Font_Size=Schriftgr\u00f6\u00dfe
+
+Font_Style=Schriftstil
+
+FontSelector=Schriften_w\u00e4hlen
+
+for=f\u00fcr
+
+Format_of_author_and_editor_names=Format_der_Autoren-_und_Hrsg.-Namen
+Format_String=Formatier-Ausdruck
+
+Format_used=benutztes_Format
+Formatter_Name=Name_des_Formatierers
+
+Formatter_not_found=Formatierer_nicht_gefunden
+
+found=gefunden
+Found_%0_plugin(s)=%0_Plugin(s)_gefunden
+
+found_in_aux_file=gefundene_Schl\u00fcssel_in_AUX_Datei
+
+Full_name=Kompletter_Name
+
+General=Allgemein
+
+General_fields=Allgemeine_Felder
+
+Generate=Erzeugen
+
+Generate_BibTeX_key=BibTeX-Key_generieren
+
+Generate_keys=Erstelle_Key
+
+Generate_keys_before_saving_(for_entries_without_a_key)=Keys_vor_dem_Speichern_erstellen_(f\u00fcr_Einr\u00e4ge_ohne_Key)
+
+
+Generate_keys_for_imported_entries=Keys_f\u00fcr_importierte_Eintr\u00e4ge_generieren
+
+Generate_now=Jetzt_generieren
+
+Generated_BibTeX_key_for=BibTeX-Key_erzeugt_f\u00fcr
+
+Generating_BibTeX_key_for=Erzeuge_BibTeX-Key_f\u00fcr
+
+Grab=Tastenk\u00fcrzel_holen
+
+Gray_out_entries_not_in_group_selection=Eintr\u00e4ge_ausblenden,_die_nicht_in_der_Gruppenauswahl_sind
+
+Gray_out_non-hits=Nicht-Treffer_grau_einf\u00e4rben
+
+Gray_out_non-matching_entries=Nicht_\u00fcbereinstimmende_Eintr\u00e4ge_ausblenden
+
+Group_properties=Gruppeneigenschaften
+
+grouping_may_not_work_for_this_entry=Dieser_Eintrag_unterst\u00fctzt_m\u00f6glicherweise_keine_Gruppierung
+
+Groups=Gruppen
+
+Harvard_RTF=Harvard_RTF
+
+Have_you_chosen_the_correct_package_path?=Habe_Sie_den_richtigen_Klassenpfad_gew\u00e4hlt?
+
+Help=Hilfe
+
+Help_contents=Hilfe_-_Inhalt
+
+Help_on_groups=Hilfe_zu_Gruppen
+
+Help_on_key_patterns=Hilfe_zu_BibTeX-Key-Mustern
+Help_on_Preview_Settings=Hilfe_zu_den_Einstellungen_der_Vorschau
+Help_on_Regular_Expression_Search=Hilfe_zur_Suche_mit_regul\u00e4rem_Ausdruck
+
+Hide_non-hits=Nicht-Treffer_ausblenden
+
+Hide_non-matching_entries=Nicht_passende_Eintr\u00e4ge_verbergen
+
+Hierarchical_context=Hierarchischer_Kontext
+
+Highlight=Markieren
+Highlight_groups_matching_all_selected_entries=Gruppen_markieren,_die_alle_selektierten_Eintr\u00e4ge_enthalten
+Highlight_groups_matching_any_selected_entry=Gruppen_markieren,_die_mindestens_einen_der_selektierten_Eintr\u00e4ge_enthalten
+
+Highlight_overlapping_groups=Sich_\u00fcberschneidende_Gruppen_markieren
+
+Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Hinweis%c_Um_ausschlie\u00dflich_bestimmte_Felder_zu_durchsuchen,_geben_Sie_z.B._ein%c<p><tt>author%esmith_and_title%eelectrical</tt>
+
+HTML=HTML
+
+HTML_table=HTML-Tabelle
+
+HTML_table_(with_Abstract_&_BibTeX)=HTML-Tabelle_(mit_Abstract_&_BibTeX)
+Icon=Icon
+
+Ignore=Ignorieren
+
+Immediate_subgroups=Direkte_Untergruppen
+
+Import=Importieren
+
+Import_and_keep_old_entry=Importieren_und_alten_Eintrag_behalten
+
+Import_and_remove_old_entry=Importieren_und_alten_Eintrag_l\u00f6schen
+
+Import_entries=Eintr\u00e4ge_importieren
+
+Import_failed=Import_fehlgeschlagen
+
+Import_file=Importiere_Datei
+
+Import_group_definitions=Gruppendefinitionen_importieren
+
+Import_name=Name_des_Importfilters
+
+Import_preferences=Einstellungen_importieren
+
+Import_preferences_from_file=Importiere_Einstellungen_aus_Datei
+
+Import_strings=Strings_importieren
+
+Import_to_open_tab=In_ge\u00f6ffnetes_Tab_importieren
+
+Import_word_selector_definitions=Wortauswahldefinitionen_importieren
+
+Imported_database=Datei_importiert
+
+Imported_entries=Eintr\u00e4ge_importiert
+
+Imported_from_database=Importiert_aus_Datei
+
+ImportFormat_class=ImportFormat_Klasse
+
+Importing=Importiere
+
+Importing_in_unknown_format=Importiere_ein_unbekanntes_Format
+
+In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=Benutzen_Sie_in_JabRef_das_Zeichen_#_paarweise,_um_einen_String_(Abk\u00fcrzung)_anzugeben.
+
+Include_abstracts=Abstracts_ber\u00fccksichtigen
+Include_entries=Eintr\u00e4ge_einschlie\u00dfen
+
+Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Untergruppen_ber\u00fccksichtigen\:_Eintr\u00e4ge_dieser_Gruppe_und_ihrer_Untergruppen_anzeigen
+
+Incremental=Direkt
+
+Incremental_search=Weitersuchen
+
+Incremental_search_failed._Repeat_to_search_from_top.=Direkte_Suche_fehlgeschlagen._Wiederhole_die_Suche_vom_Anfang_der_Datenbank.
+
+Independent_group\:_When_selected,_view_only_this_group's_entries=Unabh\u00e4ngige_Gruppen\:_Nur_die_Eintr\u00e4ge_dieser_Gruppe_anzeigen
+
+Initially_show_groups_tree_expanded=Baumansicht_der_Gruppen_standardm\u00e4\u00dfig_aufklappen
+
+Input=Bearbeitungsoptionen
+
+Input_error=Eingabefehler
+
+Insert=einf\u00fcgen
+
+Insert_rows=Zeilen_einf\u00fcgen
+
+Insert_selected_citations_into_LyX/Kile=Ausgew\u00e4hlte_Literaturangaben_in_LyX/Kile_einf\u00fcgen
+
+Insert_selected_citations_into_WinEdt=Ausgew\u00e4hlte_Literaturangaben_in_WinEdt_einf\u00fcgen
+
+insert_string_=String_einf\u00fcgen_
+
+Insert_URL=URL_einf\u00fcgen
+
+integrity=Integrit\u00e4t
+
+# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
+Integrity_check=Integrit\u00e4ts\u00fcberpr\u00fcfung
+
+Intersection=Schnittmenge
+
+Invalid_BibTeX_key=Ung\u00fcltiger_BibTeX-Key
+
+Invalid_date_format=Ung\u00fcltiges_Datumsformat
+
+Invalid_URL=Ung\u00fcltige_URL
+
+Inverted=Invertiert
+
+is_a_standard_type.=ist_ein_Standardtyp
+
+ISO_abbreviation=ISO-Abk\u00fcrzung
+
+Item_list_for_field=Wortliste_f\u00fcr_Feld
+jabref=jabref
+
+JabRef_help=JabRef_Hilfe
+
+JabRef_preferences=JabRef_Einstellungen
+
+Journal_abbreviations=Abk\u00fcrzung_der_Zeitschriftentitel
+
+Journal_list_preview=Vorschau_der_Zeitschriftenliste
+
+Journal_name=Zeitschriftentitel
+
+Keep=Behalten
+
+Keep_both=Beide_behalten
+
+Keep_lower=Unteren_behalten
+
+Keep_upper=Oberen_behalten
+
+Key_bindings=Tastenk\u00fcrzel
+
+Key_bindings_changed=Tastenk\u00fcrzel_ge\u00e4ndert
+
+Key_generator_settings=Einstellungen_des_Key-Generators
+
+Key_pattern=BibTeX-Key-Muster
+
+keys_in_database=Keys_in_der_Datenbank
+
+Keyword=Stichwort
+
+Label=Name
+
+Language=Sprache
+
+Last_modified=zuletzt_ge\u00e4ndert
+
+LaTeX_AUX_file=LaTeX_AUX-Datei
+Leave_file_in_its_current_directory.=Datei_im_aktuellen_Verzeichnis_lassen.
+Leave_files_in_their_current_directory.=Dateien_im_aktuellen_Verzeichnis_lassen.
+
+Left=Links
+
+License=Lizenz
+
+Limit_to_fields=Auf_folgende_Felder_begrenzen
+
+Limit_to_selected_entries=Auf_ausgew\u00e4hlte_Eintr\u00e4ge_begrenzen
+
+Link=Link
+Link_local_file=Link_zu_lokaler_Datei
+Link_to_file_%0=Link_zur_Datei_%0
+
+Listen_for_remote_operation_on_port=Port_nach_externem_Zugriff_abh\u00f6ren
+Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Einstellungen_beim_Start_laden_von/speichern_in_jabref.xml_(Memory_Stick-Modus)
+
+Load_session=Sitzung_laden
+
+Loading_session...=Lade_Sitzung...
+localhost=localhost
+
+Look_and_feel=Aussehen
+Looking_for_pdf...=Suche_nach_pdf...
+lower=kleinbuchstaben
+Main_file_directory=Standard-Verzeichnis_f\u00fcr_Dateien
+
+Main_layout_file=Haupt-Layoutdatei
+
+Main_PDF_directory=Standard-Verzeichnis_f\u00fcr_PDF-Dateien
+
+Main_PS_directory=Standard-Verzeichnis_f\u00fcr_PS-Dateien
+
+Manage=Verwalten
+
+Manage_custom_exports=Verwalte_externe_Exportfilter
+
+Manage_custom_imports=Verwalte_externe_Importfilter
+Manage_external_file_types=Externe_Dateitypen_verwalten
+
+Manage_journal_abbreviations=Abk\u00fcrzungen_der_Zeitschriften_verwalten
+
+Mark_entries=Eintr\u00e4ge_markieren
+
+Mark_entry=Eintrag_markieren
+
+Mark_new_entries_with_addition_date=Neue_Eintr\u00e4ge_mit_Datum_versehen
+
+Mark_new_entries_with_owner_name=Neue_Eintr\u00e4ge_mit_Namen_des_Besitzers_versehen
+
+# These are status line messages when marking/unmarking entries:
+Marked_selected=Ausgew\u00e4hlte_markiert
+Memory_Stick_Mode=Memory_Stick-Modus
+
+Menu_and_label_font_size=Schriftgr\u00f6\u00dfe_in_Men\u00fcs
+
+Merged_external_changes=Externe_\u00c4nderungen_eingef\u00fcgt
+
+Messages=Mitteilungen
+
+Messages_and_Hints=Hinweise_und_Warnungen
+
+Modification_of_field=\u00c4nderung_des_Felds
+
+Modified_group_"%0".=Gruppe_"%0"_ge\u00e4ndert.
+
+Modified_groups=Ge\u00e4nderte_Gruppen
+
+Modified_string=Ver\u00e4nderter_String
+
+Modify=Bearbeiten
+
+modify_group=Gruppe_bearbeiten
+
+MODS=MODS
+
+Move=Verschieben
+
+Move_down=Nach_unten
+
+Move_entries_in_group_selection_to_the_top=Sortiere_Eintr\u00e4ge_der_Gruppenauswahl_nach_oben
+Move_external_links_to_'file'_field=Externe_Links_in_das_Feld_'file'_verschieben
+Move_files_to_file_directory.=Dateien_in_das_Dateiverzeichnis_verschieben.
+
+move_group=Gruppe_verschieben
+
+Move_string_down=String_nach_unten
+
+Move_string_up=String_nach_oben
+
+Move_up=Nach_oben
+
+Moved_group_"%0".=Gruppe_"%0"_verschoben.
+MS_Office_2007=MS_Office_2007
+MySQL=MySQL
+MySQL_database=MySQL-Datenbank
+
+Name=Name
+Name_formatter=Namens-Formatierer
+
+Natbib_style=Natbib-Stil
+
+nested_aux_files=referenzierte_AUX_Dateien
+
+New=Neu
+
+new=neu
+
+New_BibTeX_database=Neue_BibTeX-Datei
+
+New_BibTeX_entry=Neuer_BibTeX-Eintrag
+
+New_BibTeX_subdatabase=Neue_BibTeX-Teildatei
+
+New_content=Neuer_Inhalt
+
+New_database_created.=Neue_Datei_angelegt.
+New_field_value=Neuer_Feldwert
+
+New_file=Neue_Datei
+New_file_link_(INSERT)=Neuer_Dateilink_(INSERT)
+
+New_group=Neue_Gruppe
+
+New_string=Neuer_String
+
+Next_entry=N\u00e4chster_Eintrag
+
+No_%0_found=Kein_%0_gefunden
+
+No_actual_changes_found.=Keine_aktuellen_\u00c4nderungen_gefunden.
+
+no_base-bibtex-file_specified=keine_Bibtex-Datei_angegeben!
+
+no_database_generated=keine_Datenbank_erstellt_und_geschrieben
+
+No_duplicates_found=Keine_doppelten_Eintr\u00e4ge_gefunden
+
+No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Keine_Eintr\u00e4ge_gefunden._Bitte_vergewissern_Sie_sich,_dass_Sie_den_richtigen_Importfilter_benutzen.
+
+No_entries_found_for_the_search_string_'%0'=F\u00fcr_den_Suchausdruck_'%0'_wurden_keine_Eintr\u00e4ge_gefunden
+
+No_entries_imported.=Keine_Eintr\u00e4ge_importiert.
+
+No_entries_or_multiple_entries_selected.=Keine_oder_mehrere_Eintr\u00e4ge_ausgew\u00e4hlt.
+
+No_entries_selected=Keine_Eintr\u00e4ge_ausgew\u00e4hlt.
+No_entries_selected.=Keine_Eintr\u00e4ge_ausgew\u00e4hlt.
+
+No_exceptions_have_ocurred.=Es_sind_keine_Ausnahmen_aufgetreten.
+No_files_found.=Keine_Dateien_gefunden.
+
+No_GUI._Only_process_command_line_options.=Kein_GUI._Nur_Kommandozeilenbefehle_ausf\u00fchren.
+
+No_journal_names_could_be_abbreviated.=Es_konnten_keine_Zeitschriftentitel_abgek\u00fcrzt_werden.
+
+No_journal_names_could_be_unabbreviated.=Das_Aufheben_der_Abk\u00fcrzung_konnte_bei_keiner_Zeitschrift_durchgef\u00fchrt_werden.
+
+No_PDF_linked=Kein_PDF_verlinkt
+
+No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Sie_haben_keine_PDF-_oder_PS-Datei_angegeben_und_es_wurde_keine_Datei_gefunden,_die_mit_dem_BibTeX-Key_\u00fcbereinstimmt.
+No_plugins_were_found_in_the_following_folders\:=In_den_folgenden_Ordnern_wurden_keine_Plugins_gefunden:
+
+No_references_found=Keine_Literaturangaben_gefunden
+
+No_saved_session_found.=Keine_gespeicherte_Sitzung_gefunden.
+
+No_url_defined=Keine_URL_angegeben
+No_XMP_metadata_found_in_=Keine_XMP-Metadaten_gefunden_in_
+
+not=nicht
+
+not_found=davon_nicht_gefunden
+
+Not_saved_(empty_session)=Nicht_gespeichert_(leere_Sitzung)
+
+Note_that_the_entry_causing_the_problem_has_been_selected.=Der_Eintrag,_der_das_Problem_verursacht,_wurde_ausgew\u00e4hlt.
+
+Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Es_muss_der_volle_Klassenname_f\u00fcr_das_zu_verwendende_"look_and_feel"_angegeben_werden.
+
+Nothing_to_redo=Wiederholen_nicht_m\u00f6glich
+
+Nothing_to_undo=R\u00fcckg\u00e4ngig_nicht_m\u00f6glich
+
+# The next is used like in "References found: 1  Number of references to fetch?"
+Number_of_references_to_fetch?=Anzahl_der_abzurufenden_Literaturangaben?
+
+occurences=Ausdr\u00fccke
+
+OK=OK
+
+Ok=OK
+
+One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Mindestens_ein_Dateilink_ist_vom_Typ_'%0',_der_nicht_definiert_ist._Was_wollen_Sie_tun?
+
+One_or_more_keys_will_be_overwritten._Continue?=Einer_oder_mehrere_Keys_werden_\u00fcberschrieben._Fortsetzen?
+Only_one_item_is_supported=Nur_ein_Element_wird_unterst\u00fctzt
+
+Open=\u00d6ffnen
+
+Open_BibTeX_database=BibTeX-Datei_\u00f6ffnen
+
+Open_database=Datei_\u00f6ffnen
+
+Open_editor_when_a_new_entry_is_created=Eintragseditor_\u00f6ffnen,_wenn_ein_neuer_Eintrag_angelegt_wird
+
+Open_file=Datei_\u00f6ffnen
+
+Open_last_edited_databases_at_startup=Beim_Starten_von_JabRef_die_letzten_bearbeiteten_Dateien_\u00f6ffnen
+
+Open_PDF_or_PS=PDF_oder_PS_\u00f6ffnen
+
+Open_right-click_menu_with_Ctrl+left_button=Kontextmen\u00fc_mit_Strg_+_linker_Maustaste_\u00f6ffnen
+
+Open_URL_or_DOI=URL_oder_DOI_\u00f6ffnen
+OpenDocument_Spreadsheet=OpenDocument-Tabelle
+
+Opened_database=Datei_ge\u00f6ffnet
+
+Opening=\u00d6ffne
+
+Opening_preferences...=\u00d6ffne_Voreinstellungen...
+
+OpenOffice_Calc=OpenOffice_Calc
+OpenOffice_CSV=OpenOffice_CSV
+Operation_canceled.\n=Vorgang_abgebrochen.\n
+Operation_not_supported=Vorgang_nicht_unterst\u00fctzt
+
+Optional_fields=Optionale_Felder
+
+Options=Optionen
+
+or=oder
+
+out_of=von
+
+Output=Ausgabe
+
+Output_or_export_file=Speichere_oder_exportiere_Datei
+
+Override=\u00fcberschreiben
+
+Override_default_file_directories=Standard-Verzeichnisse_\u00fcberschreiben
+
+Override_default_font_settings=Standardschrifteinstellungen_\u00fcberschreiben
+
+override_the_bibtex_key_by_the_selected_text=BibTeX-Key_mit_ausgew\u00e4hltem_Text_\u00fcberschreiben
+
+Overwrite=\u00dcberschreiben
+Overwrite_existing_field_values=Bestehende_Feldwerte_\u00fcberschreiben
+
+Overwrite_keys=Keys_\u00fcberschreiben
+
+pairs_processed=Paare_\u00fcberarbeitet
+Password_\:=Passwort:
+
+Paste=Einf\u00fcgen
+
+paste_entries=Eintr\u00e4ge_einf\u00fcgen
+
+paste_entry=Eintrag_einf\u00fcgen
+Paste_from_clipboard=Aus_der_Zwischenablage_einf\u00fcgen
+
+Pasted=Eingef\u00fcgt
+Path_to_%0_not_defined=Pfad_zu_%0_nicht_definiert
+
+Path_to_LatexEditor_(LEd.exe)=Pfad_zu_LatexEditor_(LEd.exe)
+
+Path_to_LyX_pipe=Pfad_zur_LyX-pipe
+
+Path_to_Vim=Pfad_zu_Vim
+
+Path_to_WinEdt.exe=Pfad_zu_WinEdt
+
+PDF_directory=PDF-Verzeichnis
+PDF_does_not_exist=PDF_existiert_nicht
+
+Personal_journal_list=Pers\u00f6nliche_Zeitschriftenliste
+
+Plain_text_import=Klartext_importieren
+
+Please_check_your_network_connection_to_this_machine.=Bitte_\u00fcberpr\u00fcfen_Sie_die_Netzwerkverbindung_ihres_Computers.
+
+Please_enter_a_name_for_the_group.=Bitte_geben_Sie_einen_Namen_f\u00fcr_die_Gruppe_ein.
+
+Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Bitte_geben_Sie_einen_Suchausdruck_ein._Um_zum_Beispiel_alle_Felder_nach_<b>Smith</b>_zu_durchsuchen,_geben_Sie_ein%c<p><tt>smith</tt><p>Um_das_Feld_<b>Author</b>_nach_<b>Smith</b>_und_das_Feld_<b>Title</b>_nach_<b>electrical</b> [...]
+
+Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Bitte_geben_Sie_das_zu_durchsuchende_Feld_(z.B._<b>keywords</b>)_und_das_darin_zu_suchende_Stichwort_(z.B._<b>elektrisch</b>)_ein.
+
+Please_enter_the_string's_label=Geben_Sie_bitte_den_Namen_des_Strings_ein.
+
+Please_select_an_importer=Bitte_Importer_ausw\u00e4hlen
+
+Please_select_an_importer.=Bitte_Importer_ausw\u00e4hlen.
+
+Please_select_exactly_one_group_to_move.=Bitte_genau_eine_zu_bewegende_Gruppe_ausw\u00e4hlen.
+Please_specify_the_=Bitte_geben_Sie_folgendes_an:_
+
+Possible_duplicate_entries=M\u00f6gliche_doppelte_Eintr\u00e4ge
+
+Possible_duplicate_of_existing_entry._Click_to_resolve.=M\u00f6glicherweise_doppelter_Eintrag._Klicken_um_Konflikt_zu_l\u00f6sen
+
+Preamble=Pr\u00e4ambel
+
+Preferences=Einstellungen
+
+Preferences_recorded.=Einstellungen_gespeichert.
+
+Preview=Vorschau
+
+Previous_entry=Vorheriger_Eintrag
+
+Primary_sort_criterion=Prim\u00e4res_Sortierkriterium
+Print_Preview=Druckvorschau
+Printing_Entry_Preview=Eintragsvorschau_drucken
+
+Problem_with_parsing_entry=Problem_beim_Analysieren_des_Eintrags
+Processing_=Bearbeite_
+
+Program_output=Programmausgabe
+
+PS_directory=PS-Verzeichnis
+Push_entries_to_external_application_(%0)=Eintr\u00e4ge_in_externe_Anwendung_einf\u00fcgen_(%0)
+
+Push_selection_to_Emacs=Auswahl_in_Emacs_einf\u00fcgen
+
+Push_selection_to_LyX/Kile=Auswahl_in_LyX/Kile_einf\u00fcgen
+Push_selection_to_Vim=Auswahl_in_Vim_einf\u00fcgen
+
+Push_selection_to_WinEdt=Auswahl_in_WinEdt_einf\u00fcgen
+
+Push_to_LatexEditor=In_LatexEditor_einf\u00fcgen
+Pushed_citations_to_%0=Eintr\u00e4ge_in_%0_eingef\u00fcgt
+
+Pushed_citations_to_Emacs=Literaturangaben_in_Emacs_eingef\u00fcgt
+Pushed_citations_to_Vim=Literaturangaben_in_Vim_eingef\u00fcgt
+
+Pushed_citations_to_WinEdt=Literaturangaben_in_WinEdt_eingef\u00fcgt
+
+Pushed_the_citations_for_the_following_rows_to=Literaturangaben_der_folgenden_Zeilen_eingef\u00fcgt_in
+
+Quit_JabRef=JabRef_beenden
+
+Quit_synchronization=Synchronisation_beenden
+
+Raw_source=Importtext
+
+Really_delete_the_selected=Wirklich_l\u00f6schen:
+
+Rearrange_tabs_alphabetically_by_title=Tabs_alphabetisch_nach_Titel_sortieren
+
+Redo=Wiederholen
+
+Reference_database=Referenz-Datenbank
+
+# The next two lines are used like in "References found: 1  Number of references to fetch?"
+References_found=Literaturangaben_gefunden
+
+Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Obergruppe_einbeziehen\:_Eintr\u00e4ge_aus_dieser_Gruppe_und_ihrer_\u00fcbergeordneten_Gruppe_anzeigen
+
+Refresh_view=Ansicht_aktualisieren
+
+Regular_Expression=Regul\u00e4rer_Ausdruck
+
+Remember_these_entry_types?=Diese_Eintragstypen_behalten?
+
+Remote_operation=Externer_Zugriff
+
+Remote_server_port=Externer_Server-Port
+
+Remove=L\u00f6schen
+
+Remove_all?=Alle_l\u00f6schen?
+
+Remove_all_subgroups=Untergruppen_entfernen
+
+Remove_all_subgroups_of_"%0"?=Alle_Untergruppen_von_"%0"_entfernen?
+
+Remove_double_braces_around_BibTeX_fields_when_loading.=Beim_Laden_doppelte_geschweifte_Klammern_um_BibTeX-Felder_entfernen
+
+Remove_duplicates=Doppelte_Eintr\u00e4ge_l\u00f6schen
+
+Remove_entry_from_import=Eintrag_von_Importierung_entfernen
+
+Remove_entry_selection_from_this_group=Ausgew\u00e4hlte_Eintr\u00e4ge_aus_dieser_Gruppe_entfernen
+
+Remove_entry_type=Eintragstyp_l\u00f6schen
+Remove_file_link_(DELETE)=Dateilink_entfernen_(DELETE)
+
+remove_from_group=aus_der_Gruppe_entfernen
+
+Remove_from_group=Aus_Gruppe_entfernen
+
+Remove_group=Gruppe_l\u00f6schen
+
+Remove_group,_keep_subgroups=Gruppe_l\u00f6schen,_Untergruppen_behalten
+
+Remove_group_"%0"?=Gruppe_"%0"_l\u00f6schen?
+
+Remove_group_"%0"_and_its_subgroups?=Gruppe_"%0"_inklusive_Untergruppen_l\u00f6schen?
+
+remove_group_(keep_subgroups)=Gruppe_l\u00f6schen_(Untergruppen_behalten)
+
+remove_group_and_subgroups=Gruppe_inklusive_Untergruppen_l\u00f6schen
+
+Remove_group_and_subgroups=Gruppe_und_Untergruppen_l\u00f6schen
+
+Remove_link=Link_l\u00f6schen
+
+Remove_old_entry=Alten_Eintrag_entfernen
+
+Remove_selected_strings=Ausgew\u00e4hlte_Strings_entfernen
+
+remove_string_=String_l\u00f6schen_
+
+Removed_group_"%0".=Gruppe_"%0"_gel\u00f6scht.
+
+Removed_group_"%0"_and_its_subgroups.=Gruppe_"%0"_inklusive_Untergruppen_gel\u00f6scht.
+
+Removed_string=String_gel\u00f6scht
+
+Renamed_string=String_umbenannt
+
+Replace=Ersetzen
+
+Replace_(regular_expression)=Ersetzen_(regul\u00e4rer_Ausdruck)
+
+Replace_string=String_ersetzen
+
+Replace_with=Ersetzen_durch
+
+Replaced=Ersetzt:
+
+Required_fields=Ben\u00f6tigte_Felder
+
+Reset_all=Alle_zur\u00fccksetzen
+Reset_file_type_definitons=Definitionen_der_Dateitypen_zur\u00fccksetzen
+
+Resolve_strings_for_all_fields_except=Strings_aufl\u00f6sen_f\u00fcr_alle_Felder_au\u00dfer
+Resolve_strings_for_standard_BibTeX_fields_only=Strings_nur_f\u00fcr_Standard-BibTeX-Felder_aufl\u00f6sen
+
+resolved=davon_aufgel\u00f6st
+
+Results=Ergebnisse
+
+Revert_to_original_source=Original_wiederherstellen
+
+Review=\u00dcberpr\u00fcfung
+
+Review_changes=\u00c4nderungen_\u00fcberpr\u00fcfen
+
+Right=Rechts
+root=root
+
+Save=Speichern
+Save_all_finished.=Speichern_aller_Dateien_beendet
+
+Save_all_open_databases=Alle_ge\u00f6ffneten_Dateien_speichern
+
+Save_before_closing=Speichern_vor_dem_Beenden
+
+Save_database=Datei_speichern
+Save_database_as_...=Datei_speichern_unter_...
+
+Save_entries_in_their_original_order=Eintr\u00e4ge_in_urspr\u00fcnglicher_Reihenfolge_abspeichern
+
+Save_failed=Fehler_beim_Speichern
+
+Save_failed_during_backup_creation=W\u00e4hrend_der_Erstellung_des_Backups_ist_das_Speichern_fehlgeschlagen
+
+Save_failed_while_committing_changes=W\u00e4hrend_die_\u00c4nderungen_\u00fcbermittelt_wurden,_ist_das_Speichern_fehlgeschlagen
+
+Save_ordered_by_author/editor/year=Speichern_sortiert_nach_author/editor/year
+Save_selected_as_...=Auswahl_speichern_unter_...
+
+Saved_database=Datei_gespeichert
+
+Saved_selected_to=Auswahl_gespeichert_unter
+
+Saved_session=Sitzung_gespeichert
+
+Saving=Speichere
+Saving_all_databases...=Alle_Dateien_werden_gespeichert...
+
+Saving_database=Speichere_Datei
+
+Scan=\u00dcberpr\u00fcfen
+
+Search=Suchen
+
+Search_All_Fields=Durchsuche_alle_Felder
+
+Search_all_fields=Alle_Felder_durchsuchen
+
+Search_error=Suchfehler
+
+Search_expression=Suchausdruck
+
+Search_for=Suchen_nach
+
+Search_general_fields=Allgemeine_Felder_durchsuchen
+
+Search_IEEEXplore=IEEEXplore_durchsuchen
+Search_IEEExplore=IEEExplore-Suche
+
+Search_optional_fields=Optionale_Felder_durchsuchen
+
+Search_required_fields=Ben\u00f6tigte_Felder_durchsuchen
+
+Search_Specified_Field(s)=Durchsuche_diese(s)_Feld(er)
+
+Searched_database._Global_number_of_hits=Datenbank_durchsucht._Anzahl_Treffer
+
+Searched_database._Number_of_hits=Datei_durchsucht._Anzahl_der_Treffer
+
+Searching_for_%0_file=Suche_nach_%0-Datei
+
+Searching_for_duplicates...=Suche_nach_doppelten_Eintr\u00e4gen...
+
+Searching_for_files=Suche_nach_Dateien
+
+Secondary_sort_criterion=Zweites_Sortierkriterium
+
+Select=Ausw\u00e4hlen
+
+Select_a_Zip-archive=ZIP-Archiv_ausw\u00e4hlen
+
+Select_action=Aktion_w\u00e4hlen
+
+Select_all=Alle_ausw\u00e4hlen
+
+Select_Classpath_of_New_Importer=Klassenpfad_ausw\u00e4hlen
+
+Select_encoding=Kodierung_w\u00e4hlen
+
+Select_entries_in_group_selection=W\u00e4hle_Eintr\u00e4ge_in_Gruppenauswahl
+
+Select_entry_type=Eintragstyp_ausw\u00e4hlen
+Select_external_application=Externe_Anwendung_ausw\u00e4hlen
+
+Select_file_from_ZIP-archive=Eintrag_aus_der_ZIP-Archiv_ausw\u00e4hlen
+
+Select_format=Format_w\u00e4hlen
+Select_icon=Icon_ausw\u00e4hlen
+
+Select_matches=Treffer_ausw\u00e4hlen
+
+Select_new_ImportFormat_Subclass=Klasse_ausw\u00e4hlen
+
+Select_the_tree_nodes_to_view_and_accept_or_reject_changes=W\u00e4hlen_Sie_die_Verzweigungen_aus,_um_die_\u00c4nderungen_zu_sehen_und_anzunehmen_oder_zu_verwerfen
+Selected_entries=Ausgew\u00e4hlte_Eintr\u00e4ge
+
+Selector_enabled_fields=Felder_mit_Wortliste
+Server_Hostname_\:=Hostname_des_Servers:
+Server_Type_\:=Servertyp
+
+Set_field=Setze_Feld
+Set_fields=Felder_setzen
+
+Set_general_fields=Allgemeine_Felder_festlegen
+Set_main_external_file_directory=Standard-Verzeichnis_f\u00fcr_externe_Dateien_bestimmen
+
+Set_table_font=Tabellenschriftart_ausw\u00e4hlen
+
+Settings=Einstellungen
+
+Setup_selectors=Wortlisten_verwalten
+
+Short_form=Kurzform
+
+Shortcut=Tastenk\u00fcrzel
+
+Show/edit_BibTeX_source=BibTeX-Quelltextpanel_anzeigen
+
+Show_'Firstname_Lastname'='Vorname_Nachname'_anzeigen
+
+Show_'Lastname,_Firstname'='Nachname,_Vorname'_anzeigen
+
+Show_BibTeX_source_by_default=Quelltextpanel_standardm\u00e4\u00dfig_anzeigen
+
+Show_BibTeX_source_panel=BibTeX-Quelltextpanel_anzeigen
+
+Show_confirmation_dialog_when_deleting_entries=Dialog_zum_L\u00f6schen_von_Eintr\u00e4gen_anzeigen
+
+Show_description=Beschreibung_anzeigen
+
+Show_dynamic_groups_in_<i>italics</i>=Dynamische_Gruppen_<i>kursiv</i>_anzeigen
+
+Show_entries_*not*_in_group_selection=Zeige_Eintr\u00e4ge,_die_*nicht*_in_der_Gruppenauswahl_sind
+
+Show_file_column=Datei-Spalte_anzeigen
+
+Show_icons_for_groups=Gruppen-Icon_anzeigen
+Show_last_names_only=Zeige_nur_Nachnamen
+
+Show_names_unchanged=Namen_unver\u00e4ndert_anzeigen
+
+Show_one_less_rows=Zeige_eine_Zeile_weniger
+
+Show_one_more_row=Zeige_eine_Zeile_mehr
+
+Show_optional_fields=Optionale_Felder_anzeigen
+
+Show_PDF/PS_column=PDF/PS-Spalte_anzeigen
+
+Show_required_fields=Ben\u00f6tigte_Felder_anzeigen
+
+Show_URL/DOI_column=URL/DOI-Spalte_anzeigen
+
+Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Warnmeldung_bei_doppeltem_BibTeX-Key_anzeigen
+
+Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Warnmeldung_bei_leerem_BibTeX-Key_anzeigen
+
+Simple_HTML=Einfaches_HTML
+
+Size=Gr\u00f6\u00dfe
+
+Skip=\u00dcberspringen
+Skipped_-_No_PDF_linked=\u00dcbersprungen_-_Kein_PDF_verlinkt
+Skipped_-_PDF_does_not_exist=\u00dcbersprungen_-_PDF_exisitert_nicht
+
+Skipped_entry.=Eintrag_\u00fcbersprungen.
+
+Sort_alphabetically=Alphabetisch_sortieren
+
+Sort_Automatically=Automatisch_sortieren
+
+Sort_order=Sortierung
+
+sort_subgroups=Untergruppen_sortieren
+
+Sorted_all_subgroups_recursively.=Alle_Untergruppen_rekursiv_sortiert.
+
+Sorted_immediate_subgroups.=Alle_direkten_Untergruppen_sortiert.
+
+source_edit=Quelltextbearbeitung
+Special_Name_Formatters=Spezielle_Namens-Formatierer
+
+Special_table_columns=Spezielle_Spalten
+SQL_connection_established.=SQL-Verbindung_hergestellt.
+
+Start_incremental_search=Weitersuchen_(bei_direkter_Suche)
+
+Start_search=Suche_starten
+
+Starting_import=Starte_Import
+
+Statically_group_entries_by_manual_assignment=Statisches_Gruppieren_der_Eintr\u00e4ge_durch_manuelle_Zuweisung
+
+Status=Status
+
+Stop=Stop
+
+Store_journal_abbreviations=Abk\u00fcrzungen_der_Zeitschriften_speichern
+
+Store_string=String_speichern
+
+Store_the_following_fields_with_braces_around_capital_letters=Die_folgenden_Felder_mit_geschweiften_Klammern_um_die_Gro\u00dfbuchstaben_speichern
+
+Stored_entry=Eintrag_gespeichert
+
+Strings=Ersetzen
+
+Strings_for_database=Strings_f\u00fcr_die_Datei
+
+Subdatabase_from_aux=Teildatenbank_aus_aux-Datei
+
+Suggest=Vorschlag
+
+#### These lines were changed:
+Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Wechselt_zwischen_vollem_und_abgek\u00fcrztem_Zeitschriftentitel_falls_bekannt.
+
+Synchronize_%0_links=%0-Links_synchronisieren
+Synchronize_file_links=Links_zu_Dateien_synchronisieren
+
+Synchronizing_%0_links...=Synchronisiere_%0-Links...
+
+Table_appearance=Erscheinungsbild_der_Tabelle
+
+Table_background_color=Hintergrundfarbe_der_Tabelle
+
+Table_grid_color=Farbe_des_Tabellenrasters
+
+Table_text_color=Textfarbe_der_Tabelle
+
+Tabname=Tab-Name
+Target_file_cannot_be_a_directory.=Die_Zieldatei_darf_kein_Verzeichnis_sein.
+
+Tertiary_sort_criterion=Drittes_Sortierkriterium
+
+Test=Test
+
+Text_Input_Area=Text_einf\u00fcgen
+
+The_#_character_is_not_allowed_in_BibTeX_fields=Das_Zeichen_#_ist_in_BibTeX-Feldern_nicht_erlaubt
+
+The_chosen_date_format_for_new_entries_is_not_valid=Das_Datumsformat_f\u00fcr_neue_Eintr\u00e4ge_ist_nicht_g\u00fcltig
+
+The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Die_gew\u00e4hlte_Kodierung_'%0'_konnte_folgende_Buchstaben_nicht_darstellen:_
+
+The_CiteSeer_fetch_operation_returned_zero_results.=Das_Importieren_von_CiteSeerX_ergab_keine_Ergebnisse.
+
+The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=Die_aktuelle_Version_hat_eine_neue_Methode,_Links_zu_externen_Dateien_zu_behandeln.<br>Um_sie_zu_nutzen,_m\u00fcssen_Ihre_Links_in_das_neue_Format_\u00fcbertragen_werden<br>und_JabRef_muss_konfiguriert_werden,_um_die_neuen_Links_anzuzeigen.
+
+the_field_<b>%0</b>=das_Feld_<b>%0</b>
+
+The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Die_Datei<BR>_'%0'_<BR>wurde_von_einem_externen_Programm_ver\u00e4ndert!
+
+The_group_"%0"_already_contains_the_selection.=Die_Gruppe_"%0"_enth\u00e4lt_bereits_diese_Auswahl.
+
+The_label_of_the_string_can_not_be_a_number.=Der_Name_des_Strings_darf_keine_Zahl_sein.
+
+The_label_of_the_string_can_not_contain_spaces.=Der_Name_des_Strings_darf_keine_Leerzeichen_enthalten.
+
+The_label_of_the_string_can_not_contain_the_'#'_character.=Der_Name_des_Strings_darf_nicht_das_Zeichen_'#'_enthalten.
+
+The_output_option_depends_on_a_valid_import_option.=Die_Ausgabe-Option_beruht_auf_einer_g\u00fcltigen_Import-Option.
+The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=Die_PDF-Datei_enth\u00e4lt_mindestens_einen_BibTeX-Datensatz.\nWollen_Sie_diese(n)_als_neue_Eintr\u00e4ge_in_die_aktuelle_Datei_importieren?
+
+The_regular_expression_<b>%0</b>_is_invalid%c=Der_regul\u00e4re_Ausdruck_<b>%0</b>_ist_ung\u00fcltig%c
+
+The_search_is_case_insensitive.=Gro\u00df-/Kleinschreibung_wird_nicht_unterschieden.
+
+The_search_is_case_sensitive.=Gro\u00df-/Kleinschreibung_wird_unterschieden.
+
+The_string_has_been_removed_locally=Der_String_wurde_lokal_entfernt
+
+There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Es_gibt_m\u00f6gliche_Duplikate_(markiert_mit_'D'),_die_nicht_gekl\u00e4rt_werden_konnten._Fortfahren?
+
+this_button_will_update=Dieser_Button_\u00e4ndert_die_verwendete<BR>Spaltenbreite_in_der_Tabelle_der_Eintr\u00e4ge
+This_database_was_written_using_an_older_version_of_JabRef.=Diese_Datei_wurde_mit_einer_\u00e4lteren_JabRef-Version_erstellt.
+This_entry_has_no_BibTeX_key._Generate_key_now?=Dieser_Eintrag_hat_keinen_BibTeX-Key._Soll_jetzt_einer_erstellt_werden?
+
+This_entry_is_incomplete=Dieser_Eintrag_ist_unvollst\u00e4ndig
+
+This_entry_type_cannot_be_removed.=Dieser_Eintragstyp_kann_nicht_entfernt_werden.
+This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Dies_ist_ein_externer_Link_des_Typs_'%0',_der_nicht_definiert_ist._Was_wollen_Sie_tun?
+
+This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Diese_Gruppe_enth\u00e4lt_manuell_zugewiesene_Eintr\u00e4ge._Eintr\u00e4ge_k\u00f6nnen_dieser_Gruppe_zugewiesen_werde [...]
+
+This_group_contains_entries_in_which=Diese_Gruppe_enth\u00e4lt_Eintr\u00e4ge,_bei_denen
+
+This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Diese_Gruppe_enth\u00e4lt_Eintr\u00e4ge,_in_denen_ein_beliebiges_Feld_den_regul\u00e4ren_Ausdruck_<b>%0</b>_enth\u00e4lt.
+
+This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Diese_Gruppe_enth\u00e4lt_Eintr\u00e4ge,_in_denen_ein_beliebiges_Feld_den_Ausdruck_<b>%0</b>_enth\u00e4lt.
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Diese_Gruppe_enth\u00e4lt_Eintrage,_deren_Feld_<b>%0</b>_das_Stichwort_<b>%1</b>_enth\u00e4lt
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Diese_Gruppe_enth\u00e4lt_Eintrage,_deren_Feld_<b>%0</b>_den_regul\u00e4ren_Ausdruck_<b>%1</b>_enth\u00e4lt
+
+This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Dies_ist_ein_einfacher_Copy_&_Paste_Dialog_zum_Einf\u00fcgen_von_Feldern_aus_normalem_Text.
+This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=JabRef_untersucht_damit_jeden_%0-Link_und_\u00fcberpr\u00fcft,_ob_die_Datei_existiert._Falls_nicht,_werden_Ihnen_Optionen_gegeben,<BR>um_das_Problem_zu_l\u00f6sen.
+
+This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=F\u00fcr_diesen_Vorgang_m\u00fcssen_alle_ausgew\u00e4hlen_Eintr\u00e4ge_einen_BibTeX-Key_haben.
+This_operation_requires_at_least_one_entry.=Dieser_Vorgang_ben\u00f6tigt_mindestens_einen_Eintrag.
+
+This_operation_requires_one_or_more_entries_to_be_selected.=F\u00fcr_diesen_Vorgang_muss_mindestens_ein_Eintrag_ausgew\u00e4hlt_sein.
+
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Alle_externen_Links_werden_aus_den_PDF-_und_PS-Feldern_in_das_Feld_'%0'_verschoben._Fortfahren?
+
+To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Einstellungen_unter_<B>Optionen_->_Einstellungen_der_Zeitschriften_verwalten</B>
+
+Toggle_abbreviation=Abk\u00fcrzung_an-/abschalten
+Toggle_entry_preview=Eintragsvorschau_ein-/ausblenden
+Toggle_groups_interface=Gruppenansicht_ein-/ausblenden
+Toggle_search_panel=Suchdialog_ein-/ausblenden
+
+Try_different_encoding=Versuchen_Sie_es_mit_einer_anderen_Kodierung
+
+Type_set_to_'other'=Typ_als_'other'_deklariert
+Unabbreviate_journal_names_of_the_selected_entries=Abk\u00fcrzung_der_Zeitschriftentitel_der_ausgew\u00e4hlten_Eintr\u00e4ge_aufheben
+Unabbreviated_%0_journal_names.=Bei_%0_Zeitschriftentiteln_wurde_die_Abk\u00fcrzung_aufgehoben.
+
+unable_to_access_LyX-pipe=LyX-pipe_nicht_gefunden
+
+Unable_to_create_graphical_interface=Grafische_Benutzeroberfl\u00e4che_konnte_nicht_erzeugt_werden
+Unable_to_open_file.=Datei_kann_nicht_ge\u00f6ffnet_werden.
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=\u00d6ffnen_des_Links_nicht_m\u00f6glich._Die_Anwendung_'%0',_die_dem_Dateityp_'%1'_zugeordnet_ist,_konnte_nicht_aufgerufen_werden.
+Unable_to_read_default_icon_theme.=Datei_des_Standard-Icon-Themes_nicht_lesbar.
+Unable_to_read_icon_theme_file=Datei_des_pers\u00f6nlichen_Icon-Themes_nicht_lesbar
+
+unable_to_write_to=konnte_nicht_speichern_auf
+Undefined_file_type=Unbekannter_Dateityp
+
+Undo=R\u00fcckg\u00e4ngig
+
+Union=Vereinigung
+
+Unknown_bibtex_entries=Unbekannte_BibTeX_Eintr\u00e4ge
+
+unknown_edit=unbekannter_Bearbeitungsschritt
+
+unknown_entry_type=unbekannter_Eintragstyp
+
+Unknown_export_format=Unbekanntes_Export-Format
+
+Unmark_all=S\u00e4mtliche_Markierungen_aufheben
+
+Unmark_entries=Markierung_aufheben
+
+Unmark_entry=Markierung_aufheben
+
+Unmarked_selected=Markierung_f\u00fcr_ausgew\u00e4hlte_Eintr\u00e4ge_aufgehoben
+
+Unpack_EndNote_filter_set=Entpacke_EndNote_Filter-Set
+
+Unpacked_file.=Datei_entpackt.
+
+Unsupported_version_of_class_%0\:_%1=Nicht_unterst\u00fctzte_Version_der_Klasse_%0:_%1
+
+untitled=ohne_Titel
+
+Up=Hoch
+
+Update_to_current_column_widths=Aktuelle_Spaltenbreiten_verwenden
+
+Updated_group_selection=Gruppenauswahl_aktualisiert
+Upgrade_external_links=Externe_Links_aktualisieren
+Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Externe_PDF/PS-Links_aktualisieren,_um_das_Feld_'%0'_zu_benutzen.
+Upgrade_file=Datei_aktualisiert
+Upgrade_old_external_file_links_to_use_the_new_feature=Alte_Links_zu_externen_Dateien_aktualisieren,_um_die_neue_Funktion_zu_nutzen
+Upgraded_links.=Links_aktualisiert.
+UPPER=GROSSBUCHSTABEN
+Upper_Each_First=Jeden_Ersten_Buchstaben_Gro\u00df
+Upper_first=Ersten_Buchstaben_gro\u00df
+
+usage=Benutzung
+
+Use_antialiasing_font=Antialias-Schrift_benutzen
+Use_autocompletion_for_the_following_fields=Autovervollst\u00e4ndigung_f\u00fcr_folgende_Felder_benutzen
+Use_custom_icon_theme=Angepasstes_Icon-Theme_verwenden
+Use_default_viewer=Standard-Anwendung_benutzen
+
+Use_inspection_window_also_when_a_single_entry_is_imported.=Kontrollfenster_benutzen,_auch_wenn_nur_ein_Eintrag_importiert_wird
+
+Use_native_file_dialog=Plattformabh\u00e4ngigen_Dateidialog_verwenden
+
+Use_other_look_and_feel=anderes_"look_and_feel"_benutzen
+Use_Regular_Expression_Search=Suche_mit_regul\u00e4rem_Ausdruck_benutzen
+
+Use_regular_expressions=Regul\u00e4re_Ausdr\u00fccke_benutzen
+
+Use_the_following_delimiter_character(s)=Folgende(s)_Trennzeichen_benutzen
+Username_\:=Benutzername:
+
+Value_cleared_externally=Wert_extern_gel\u00f6scht
+
+Value_set_externally=Wert_extern_gesetzt
+
+verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=\u00fcberpr\u00fcfen_Sie,_ob_LyX_l\u00e4uft_und_ob_die_Angaben_zur_lyxpipe_stimmen
+
+View=Ansicht
+Vim_Server_Name=Vim_Server-Name
+
+Waiting_for_ArXiv...=Warte_auf_ArXiv...
+
+Warn_about_unresolved_duplicates_when_closing_inspection_window=Warnung_zu_ungekl\u00e4rten_Duplikaten_ausgeben,_wenn_das_Kontrollfenster_geschlossen_wird
+
+Warn_before_overwriting_existing_keys=Vor_dem_\u00dcberschreiben_von_existierenden_Keys_warnen
+
+Warning=Warnung
+Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Achtung:_Dateiwiederherstellung_konnte_nicht_durchgef\u00fchrt_werden;_die_Datei_k\u00f6nnte_besch\u00e4digt_sein._Fehlermeldung
+
+Warning_there_is_a_duplicate_key=Achtung!_Es_ist_ein_doppelter_Key_vorhanden
+
+Warnings=Warnungen
+
+web_link=Web-Link
+
+What_do_you_want_to_do?=Was_m\u00f6chten_Sie_tun?
+
+When_adding/removing_keywords,_separate_them_by=Trennzeichen_zwischen_Stichw\u00f6rtern_im_Gruppierungs-Feld
+Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Schreibe_XMP-Metadaten_in_die_PDFs,_die_mit_den_ausgew\u00e4hlten_Eintr\u00e4gen_verlinkt_sind.
+
+with=mit
+
+Word=Wort
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=BibTeX-Eintrag_als_XMP-Metadaten_ins_PDF_schreiben.
+Write_XMP=XMP_schreiben
+Write_XMP-metadata=Schreibe_XMP-Metadaten
+Write_XMP-metadata_for_all_PDFs_in_current_database?=XMP-Metadaten_f\u00fcr_alle_PDFs_der_aktuellen_Datei_schreiben?
+
+Writing_XMP=Schreibe_XMP
+Writing_XMP_metadata...=XMP-Metadaten_werden_geschrieben...
+Writing_XMP_metadata_for_selected_entries...=XMP-Metadaten_f\u00fcr_ausgew\u00e4hlte_Eintr\u00e4ge_werden_geschrieben...
+Writing_XMP_to_'%0'...=Schreibe_XMP_in_'%0'...
+
+Wrong_file_format=Falsches_Dateiformat
+Wrote_XMP-metadata=XMP-Metadaten_geschrieben
+Wrote_XMP_to_'%0'.=XMP_in_'%0'_geschrieben.
+
+XMP-annotated_PDF=PDF_mit_XMP-Anmerkungen
+XMP_Export_Privacy_Settings=Sicherheitseinstellungen_f\u00fcr_den_XMP-Export
+
+XMP_metadata=XMP-Metadaten
+XMP_metadata_found_in_PDF\:_%0=XMP-Metadaten_gefunden_im_PDF:_%0
+
+You_must_restart_JabRef_for_this_to_come_into_effect.=Sie_m\u00fcssen_JabRef_neu_starten,_damit_diese_\u00c4nderungen_in_Kraft_treten.
+You_have_changed_the_language_setting.=Sie_haben_die_Spracheinstellung_ge\u00e4ndert.
+You_have_changed_the_look_and_feel_setting.=Sie_haben_die_Einstellungen_des_Erscheinungsbildes_('look_and_feel')_ge\u00e4ndert.
+
+You_have_cleared_this_field._Original_value=Sie_haben_dieses_Feld_gel\u00f6scht._Urspr\u00fcnglicher_Wert
+
+You_have_entered_an_invalid_search_'%0'.=Sie_haben_eine_ung\u00fcltige_Suche_'%0'_eingegeben.
+
+You_must_choose_a_file_name_to_store_journal_abbreviations=Sie_m\u00fcssen_einen_Dateinamen_w\u00e4hlen,_um_die_Abk\u00fcrzungen_der_Zeitschriften_zu_speichern
+
+You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Sie_m\u00fcssen_JabRef_neu_starten,_damit_die_Tastenk\u00fcrzel_funktionieren.
+
+You_must_set_both_BibTeX_key_and_%0_directory=Sie_m\u00fcssen_sowohl_den_BibTeX-Key_als_auch_das_%0-Verzeichnis_angeben
+
+Your_new_key_bindings_have_been_stored.=Ihre_neuen_Tastenk\u00fcrzel_wurden_gespeichert.
+The_following_fetchers_are_available\:=Folgende_Recherchetools_stehen_zur_Verf\u00fcgung:
+Could_not_find_fetcher_'%0'=Recherchetool_'%0'_konnte_nicht_gefunden_werden
+Running_Query_'%0'_with_fetcher_'%1'.=Abfrage_'%0'_wird_mit_dem_Recherchetool_'%1'_durchgef\u00fchrt.
+Please_wait!=Bitte_warten!
+Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=Die_Abfrage_'%0'_mit_dem_Recherchetool_'%1'_lieferte_keine_Ergebnisse.
+Open_SPIRES_entry=SPIRES-Eintrag_\u00f6ffnen
+Move/Rename_file=Datei_verschieben/umbenennen
+File_moved=Datei_verschoben
+Move_file_failed=Fehler_beim_Verschieben_der_Datei
+Could_not_move_file=Datei_konnte_nicht_verschoben_werden
+Could_not_find_file_'%0'.=Datei_'%0'_nicht_gefunden.
+Move/rename_file=Datei_verschieben/umbenennen
+Number_of_entries_successfully_imported=Zahl_der_erfolgreich_importierten_Eintr\u00e4ge
+Import_canceled_by_user=Import_durch_Benutzer_abgebrochen
+Progress\:_%0_of_%1=Fortschritt:_%0_von_%1
+Error_while_fetching_from_JSTOR=Fehler_beim_Abrufen_von_JSTOR
+
+Fetching_Medline_by_id...=Rufe_Medline_mittels_ID_ab...
+
+Fetching_Medline_by_term...=Rufe_Medline_mittels_Suchbegriff_ab...
+Medline_import_canceled=Medline-Import_abgebrochen
+Please_enter_a_valid_number=Bitte_geben_Sie_eine_g\u00fcltige_Zahl_ein
+Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Bitte_geben_Sie_eine_durch_Kommas_unterteilte_Liste_von_Medline-IDs_(Zahlen)_oder_Suchausdr\u00fccken_ein.
+An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=Fehler_beim_Abruf_der_SPIRES-Quelle_(%0)\:
+Error_while_fetching_from_Spires\:_=Fehler_beim_Abruf_von_SPIRES\:_
+Connect_to_external_SQL_database=Mit_externer_SQL-Datenbank_verbinden
+Export_to_external_SQL_database=Export_in_externe_SQL-Datenbank
+
+Show_results_in_dialog=Ergebnisse_im_Dialogfenster_anzeigen
+Global_search=Globale_Suche
+Show_search_results_in_a_window=Suchergebnisse_in_einem_Fenster_anzeigen
+Search_results=Suchergebnisse
+Move_file_to_file_directory?=Datei_in_Dateiverzeichnis_verschieben?
+Rename_to_'%0'=Umbenennen_in_'%0'
+Move_to_file_directory=In_Dateiverzeichnis_verschieben
+
+You_have_changed_the_menu_and_label_font_size.=Sie_haben_die_Schriftgr\u00f6\u00dfe_f\u00fcr_Men\u00fcs_und_Label_ge\u00e4ndert.
+
+Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Die_Datei_ist_gesch\u00fctzt._Speichern_nicht_m\u00f6glich,_bis_externe_\u00c4nderungen_gepr\u00fcft_wurden.
+Protected_database=Gesch\u00fctzte_Datei
+Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Die_Datei_kann_nicht_gespeichert_werden,_bis_externe_\u00c4nderungen_gepr\u00fcft_wurden.
+
+Database_protection=Dateischutz
+Unable_to_save_database=Speichern_der_Datei_nicht_m\u00f6glich
+BibTeX_key_generator=BibTeX-Key-Generator
+Unable_to_open_link.=\u00d6ffnen_des_Links_nicht_m\u00f6glich
+Search_JSTOR=JSTOR_durchsuchen
+Attempting_SQL_import...=Versuche,_SQL_zu_importieren...
+BibO_RDF=BibO_RDF
+HTML_parser=HTML-Parser
+
+Move_the_keyboard_focus_to_the_entry_table=Tastatur-Fokus_auf_die_Tabelle_setzen
+MIME_type=MIME-Typ
+
+This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Diese_Funktion_\u00f6ffnet_neue_oder_importierte_Dateien_in_einer_bereits_laufenden_Instanz_von_JabRef<BR>und_nicht_in_einem_neuen_Fenster._Das_ist_beispielsweise_n\u00fctzlich,<BR>we [...]
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Beachten_Sie,_dass_diese_Einstellungen_nur_f\u00fcr_die_obsoleten_<b>pdf</b>-_und_<b>ps</b>-Felder_genutzt_werden.<BR>F\u00fcr_die_meisten_Benutzer_reicht_es_aus,_das_<b>Standard-Verzeichnis_f\u00fcr_Dateien</b>_zu_setzen.
+Legacy_file_fields=Obsolete_Datei-Felder
+
+This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=JabRef_sucht_nach_jeder_%0-Dateiendung_und_\u00fcberpr\u00fcft,_ob_die_Datei_existiert.<br>Falls_nicht,_erhalten_Sie_Optionen,_um_das_Problem_zu_l\u00f6sen.
+
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Recherche_starten,_z.B._"--fetch=Medline:cancer"
+
+The_ACM_Digital_Library=ACM_Digital_Library
+Reset=Zur\u00fccksetzen
+
+Use_IEEE_LaTeX_abbreviations=Benutze_IEEE-LaTeX-Abk\u00fcrzungen
+The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
+Search_ACM_Portal=Suche_im_ACM-Portal
+Connection_to_ACM_Portal_failed=Verbindung_zum_ACM-Portal_fehlgeschlagen
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=Beim_\u00d6ffnen_des_Dateilinks_die_passende_Datei_suchen,_falls_keine_verlinkt_ist
+Settings_for_%0=Einstellungen_f\u00fcr_%0
+Insert_selected_citations_into_Vim=Ausgew\u00e4hlte_Eintr\u00e4ge_in_Vim_einf\u00fcgen
+RIS=RIS
+Assign_exclusively_to_group=Ausschlie\u00dflich_der_Gruppe_zuordnen
+Bad_Request_'%0'.=Fehlerhafte_Anfrage_'%0'.
+
+Mark_entries_imported_into_an_existing_database=Eintr\u00e4ge,_die_in_eine_Tabelle_importiert_werden,_markieren
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Markierung_aller_Eintr\u00e4ge_aufheben,_bevor_neue_Eintr\u00e4ge_importiert_werden
+
+Forward=Vor
+Back=Zur\u00fcck
+Sort_the_following_fields_as_numeric_fields=Sortiere_folgende_Felder_als_numerische_Felder
+Line_%0\:_Found_corrupted_BibTeX-key.=Zeile_%=\:_Besch\u00e4digter_BibTeX-Key_gefunden.
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Zeile_%0\:_Besch\u00e4digter_BibTeX-Key_gefunden_(enth\u00e4lt_Leerzeichen).
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Zeile_%0\:_Besch\u00e4digter_BibTeX-Key_gefunden_(Komma_fehlt).
+Finished_downloading_full_text_document=Herunterladen_des_Volltext-Dokuments_abgeschlossen
+Unable_to_find_full_text_document_in_the_linked_web_page.=Das_Volltext-Dokument_konnte_auf_der_verlinkten_Internetseite_nicht_gefunden_werden.
+Connection_error_when_trying_to_find_full_text_document.=Verbindungsfehler_beim_Versuch,_das_Volltext-Dokument_zu_finden.
+This_entry_provides_no_URL_or_DOI_links.=Dieser_Eintrag_enth\u00e4lt_keine_URL-_oder_DOI-Links.
+Full_text_article_download_failed=Herunterladen_des_Volltext-Beitrags_fehlgeschlagen
+Update_to_current_column_order=Aktuelle_Spaltenanordnung_verwenden
+
+Rename_field=Feld_umbenennen
+Set/clear/rename_fields=Felder_setzen/l\u00f6schen/umbenennen
+Rename_field_to\:=Feld_umbenennen\:
+Move_contents_of_a_field_into_a_field_with_a_different_name=Inhalt_eines_Felds_in_ein_Feld_mit_anderem_Namen_verschieben
+
+You_can_only_rename_one_field_at_a_time=Sie_k\u00f6nnen_nur_eine_Datei_auf_einmal_umbenennen
+Remove_all_broken_links=Alle_ung\u00fcltigen_Links_l\u00f6schen
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Port_%0_konnte_nicht_f\u00fcr_externen_Zugriff_genutzt_werden;_er_wird_m\u00f6glicherweise_von_einer_anderen_Anwendung_benutzt._Versuchen_Sie_einen_anderen_Port.
+
+Plugin_installer=Plugin-Installationsprogramm
+Unable_to_create_plugin_directory=Plugin-Verzeichnis_konnte_nicht_erstellt_werden
+Unable_to_copy_file=Datei_konnte_nicht_kopiert_werden
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Plugin_erfolgreich_installiert._Sie_m\u00fcssen_JabRef_neu_starten,_damit_das_Plugin_geladen_wird.
+Unable_to_create_user_plugin_directory=Benutzerspezifisches_Plugin-Verzeichnis_konnte_nicht_erstellt_werden
+Plugin_installation_failed.=Installation_des_Plugins_fehlgeschlagen.
+The_same_version_of_this_plugin_is_already_installed.=Diese_Version_des_Plugins_ist_bereits_installiert.
+A_newer_version_of_this_plugin_is_already_installed.=Eine_neuere_Version_des_Plugins_ist_bereits_installiert.
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Eine_oder_mehrere_\u00e4ltere_Version(en)_dieses_Plugins_ist_bereits_installiert._Alte_Version(en)_l\u00f6schen?
+Old_versions_deleted_successfully.=Alte_Version(en)_erfolgreich_gel\u00f6scht.
+
+Install_plugin=Plugin_installieren
+Download_plugin=Plugin_herunterladen
+Plugin_manager=Plugin-Manager
+Delete_the_%0_selected_plugins?=%0_ausgew\u00e4hlte_Plugins_l\u00f6schen?
+Delete_plugins=L\u00f6sche_Plugins
+Delete_the_selected_plugin?=Ausgew\u00e4hlte_Plugins_l\u00f6schen?
+Delete_plugin=L\u00f6sche_Plugin
+Enter_download_URL=Download-URL_eingeben
+Plugin_name=Plugin-Name
+Version=Version
+Unknown=Unbekannt
+Not_loaded=Nicht_geladen
+Loaded=Geladen
+Could_not_determine_version_of_=Version_konnte_nicht_bestimmt_werden_von
+Install_anyway?=Trotzdem_installieren?
+
+Looking_for_full_text_document...=Suche_Volltext-Dokument...
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Folge_DOI-_oder_URL-Link_und_versuche,_PDF-Volltext_zu_lokalisieren
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Volltext-Dokument_konnte_nicht_gefunden_werden._F\u00fcr_die_Webseite_'0%'_ist_kein_Suchalgorithmus_definiert.
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=PDF-Link_gefunden,_aber_es_wurde_ein_falscher_MIME-Typ_\u00fcbertragen._M\u00f6glicherweise_haben_Sie_keinen_Zugang_zum_Volltext-Dokument.
+
+Autosave=Automatische_Sicherung
+Prompt_before_recovering_a_database_from_an_autosave_file=Best\u00e4tigen,_wenn_eine_Datei_aus_einer_automatischen_Sicherung_wiederhergestellt_werden_soll
+Autosave_interval_(minutes)=Intervall_f\u00fcr_automatische_Sicherung_(Minuten)
+Do_you_want_to_recover_the_database_from_the_autosave_file?=Wollen_Sie_die_Datei_aus_der_automatischen_Sicherung_wiederherstellen?
+Recover_from_autosave=Wiederherstellen_aus_automatischer_Sicherung
+%0_warnings=%0_Warnungen
+Save_in_current_table_sort_order=Speichern_sortiert_nach_der_aktuellen_Tabelle
+Export_in_current_table_sort_order=Exportieren_sortiert_nach_der_aktuellen_Tabelle
+Export_ordered_by_author/editor/year=Exportieren_sortiert_nach_author/editor/year
+Export_entries_in_their_original_order=Eintr\u00e4ge_in_urspr\u00fcnglicher_Reihenfolge_exportieren
+
+Error_opening_file_'%0'.=Fehler_beim_\u00d6ffnen_der_Datei_'%0'.
+Autosave_of_file_'%0'=Automatische_Sicherung_der_Datei_'%0'
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Fehler_beim_\u00d6ffnen_der_automatischen_Sicherung_von_'%0'._Stattdessen_wird_versucht,_'%0'_zu_\u00f6ffnen.
+
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugins,_die_in_Ihrem_Plugin-Verzeichnis_(%0)_installiert_wurden:
+Plugins_installed_in_other_locations\:=Plugins,_die_in_anderen_Verzeichnissen_installiert_wurden:
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=Die_Plugins_werden_beim_n\u00e4chsten_Start_von_JabRef_entfernt.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=Das_Plugin_wird_beim_n\u00e4chsten_Start_von_JabRef_entfernt.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Alte_Plugin-Versionen_werden_beim_n\u00e4chsten_Start_von_JabRef_entfernt.
+Formatter_not_found\:_%0=Formatierer_nicht_gefunden:_%0
+The_following_formatters_could_not_be_found=Die_folgenden_Formatierer_konnten_nicht_gefunden_werden
+
+Clear_inputarea=Eingabefeld_l\u00f6schen
+
+Automatically_set_file_links_for_this_entry=Dateilinks_f\u00fcr_diesen_Eintrag_automatisch_festlegen
+Could_not_save,_file_locked_by_another_JabRef_instance.=Speichern_nicht_m\u00f6glich,_die_Datei_wird_von_einer_anderen_JabRef-Instanz_verwendet.
+File_is_locked_by_another_JabRef_instance.=Die_Datei_ist_durch_eine_andere_JabRef-Instanz_gesperrt.
+Do_you_want_to_override_the_file_lock?=Wollen_Sie_die_Datei_trotz_Sperre_\u00fcberschreiben?
+File_locked=Datei_gesperrt
+Current_tmp_value=Derzeitiger_tmp-Wert
+Metadata_change=Metadaten-\u00c4nderung
+Changes_have_been_made_to_the_following_metadata_elements=An_den_folgenden_Metadaten_wurden_\u00c4nderungen_vorgenommen
+
+Generate_groups_for_author_last_names=Erstelle_Gruppen_f\u00fcr_Nachnamen_der_Autoren
+Generate_groups_for_editor_last_names=Erstelle_Gruppen_f\u00fcr_Nachnamen_der_Herausgeber
+Generate_groups_from_keywords_in_a_BibTeX_field=Erstelle_Gruppen_aus_den_Stichw\u00f6rtern_eines_BibTeX-Feldes
+Enforce_legal_characters_in_BibTeX_keys=Erzwinge_erlaubte_Zeichen_in_BibTeX-Keys
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Das_Zeichen_#_ist_in_BibTeX-Keys_nicht_erlaubt,_au\u00dfer_es_ist_mit_einem_Escape-Zeichen_versehen_wie_in_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Entfernen_Sie_vor_dem_Speichern_alle_Ausdr\u00fccke,_in_denen_das_Zeichen_#_vorkommt.
+
+Save_without_backup?=Ohne_Backup_Speichern?
+Unable_to_create_backup=Erstellen_des_Backups_fehlgeschlagen
+
+File_directory_is_not_set_or_does_not_exist.=Dateiverzeichnis_wurde_nicht_angegeben_oder_existiert_nicht
+Move_file_to_file_directory.=Datei_ins_Dateiverzeichnis_verschieben
+Rename_file_to=Datei_umbenennen_in
+<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Alle_Eintr\u00e4ge</b>_(diese_Gruppe_kann_nicht_ver\u00e4ndert_oder_gel\u00f6scht_werden)
+static_group=statische_Gruppe
+dynamic_group=dynamische_Gruppe
+refines_supergroup=bezieht_die_Obergruppe_mit_ein
+includes_subgroups=ber\u00fccksichtigt_Untergruppen
+contains=enth\u00e4lt
+search_expression=Suchausdruck
+
+Disable_file_renaming_in_non-native_file_dialog=Umbenennen_von_Dateien_im_plattformunabh\u00e4ngigen_Dateidialog_deaktivieren
+File_dialog=Dateidialog
+No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Keine_Eintr\u00e4ge_gefunden._Anscheinend_haben_Sie_keine_Erlaubnis,_in_JStor_zu_suchen.
+
+Search_ScienceDirect=ScienceDirect_durchsuchen
+Error_while_fetching_from_ScienceDirect=Fehler_beim_Abrufen_von_ScienceDirect
+
+Error_initializing_custom_export_format_from_string_'%0'=Fehler_beim_Initialisieren_des_externen_Export-Format_aus_der_Zeichenkette_'%0'
+
+BibLaTeX_mode=BibLaTeX-Modus
+Optional_fields_2=Optionale_Felder_2
+Please_wait=Bitte_warten
+Waiting_for_save_operation_to_finish=Das_Ende_des_Speichervorgangs_wird_abgewartet
+Resolving_duplicate_BibTeX_keys...=Beseitige_doppelte_BibTeX-Keys...
+Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Beseitigen_doppelter_BibTeX-Keys_abgeschlossen._%0_Eintr\u00e4ge_ge\u00e4ndert.
+This_database_contains_one_or_more_duplicated_BibTeX_keys.=Diese_Datei_enth\u00e4lt_einen_oder_mehrere_doppelte_BibTeX-Keys.
+Do_you_want_to_resolve_duplicate_keys_now?=Wollen_Sie_die_doppelten_Eintr\u00e4ge_jetzt_beseitigen?
+
+Find_and_remove_duplicate_BibTeX_keys=Finde_und_entferne_doppelte_BibTeX-Keys
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Erwartete_Syntax_f\u00fcr_--fetch='<Name_des_Fetchers>:<Anfrage>'
+Duplicate_BibTeX_key=Doppelter_BibTeX-Key
+Duplicate_key=Doppelter_Key
+Generate_key=Key_erstellen
+
+Import_marking_color=Farbe_zum_Markieren_von_importierten_Eintr\u00e4gen
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_Eintr\u00e4ge_gefunden._Um_die_Serverlast_zu_verringern,_werden_nur_%1_Datens\u00e4tze_heruntergeladen._Es_wird_sehr_langsam_sein,_um_keine_Probleme_mit_ACM_zu_bekommen.
+BibTeX_importer=BibTeX-Import-Filter
+
+Always_add_letter_(a,_b,_...)_to_generated_keys=Immer_einen_Buchstaben_(a,_b,_...)_zum_BibTeX-Key_hinzuf\u00fcgen
+Ensure_unique_keys_using_letters_(a,_b,_...)=Eindeutige_Keys_mit_Buchstaben_(a,_b,_...)_sicherstellen
+Ensure_unique_keys_using_letters_(b,_c,_...)=Eindeutige_Keys_mit_Buchstaben_(b,_c,_...)_sicherstellen
+Entry_editor_active_background_color=Aktive_Hintergrundfarbe_des_Eintragseditors
+Entry_editor_background_color=Hintergrundfarbe_des_Eintragseditors
+Entry_editor_font_color=Schriftfarbe_des_Eintragseditors
+Entry_editor_invalid_field_color=Farbe_f\u00fcr_ung\u00fclte_Felder_im_Eintragseditor
+Table_and_entry_editor_colors=Tabellen-_und_Eintragseditor-Farben
+
+An_autosave_file_was_found_for_this_database._This_could_indicate_=Es_wurde_eine_automatische_Sicherheitskopie_dieser_Datei_gefunden._Das_k\u00f6nnte_darauf_hindeuten,_
+that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=dass_JabRef_nicht_korrekt_beendet_wurde,_als_diese_Datei_zuletzt_in_Gebrauch_war.
+General_file_directory=Standard-Dateiverzeichnis
+User-specific_file_directory=Benutzerdefiniertes_Dateiverzeichnis
+Error_setting_look_and_feel=Fehler_in_den_Look_and_Feel-Einstellungen
+Search_failed\:_illegal_search_expression=Suche_fehlgeschlagen\:_Ung\u00fcltiger_Suchausdruck
+Show_ArXiv_column=ArXiv-Spalte_anzeigen
+<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Entpacke_die_Zip-Datei_mit_den_Import-/Export-Filtern_f\u00fcr_Endnote,_<BR>um_eine_optimale_Interfunktion_mit_JabRef_zu_gew\u00e4hrleisten.
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Gruppen_hervorheben,_die_Eintr\u00e4ge_in_einer_der_ausgew\u00e4hlten_Gruppen_enthalten
+
+You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=Sie_m\u00fcssen_einen_Zahlwert_zwischen_1025_und_65535_eintragen_in_das_Textfeld_f\u00fcr
+Automatically_open_browse_dialog_when_creating_new_file_link=Beim_Erstellen_eines_neuen_Datei-Links_den_Durchsuchen-Dialog_automatisch_\u00f6ffnen
+Import_Metadata_from\:=Metadaten_importieren_von:
+Choose_the_source_for_the_metadata_import=Quelle_zum_Import_von_Metadaten_w\u00e4hlen
+Create_entry_based_on_XMP_data=Eintrag_aus_XMP-Daten_erstellen
+Create_entry_based_on_data_fetched_from=Eintrag_erstellen_aus_Daten_von
+Create_blank_entry_linking_the_PDF=Leeren_Eintrag_erstellen_mit_Link_zum_PDF
+Only_attach_PDF=Nur_PDF_anh\u00e4ngen
+Mr._dLib_Metadata_Entries_Associated_With\:=Mr._dLib_Metadaten-Eintr\u00e4ge_verkn\u00fcfen_mit:
+Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr._dLib_Metadaten-Eintr\u00e4ge_mit_PDF-Datei_verkn\u00fcpfen
+Title=Titel
+Author(s)=Autor(en)
+Published_Year=Erscheinungsjahr
+No_metadata_found.=Keine_Metadaten_gefunden.
+Mr._dLib_web_service_is_temporarily_unavailable.=Der_Mr._dLib_Web-Service_ist_derzeit_nicht_verf\u00fcgbar.
+Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Der_Mr._dLib_Web-Service_ist_derzeit_nicht_erreichbar._Bitte_versuchen_Sie_es_sp\u00e4ter_erneut.
+You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Sie_sind_nicht_mit_dem_Internet_verbunden._Um_auf_den_Mr._dLib_Web-Service_zuzugreifen,_ist_eine_Internetverbindung_erforderlich.
+No_Internet_Connection.=Keine_Internetverbindung.
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Diese_JabRef-Version_versucht,_auf_eine_alte_Version_des_Mr._dLib_Web-Service_zuzugreifen,_die_nicht_mehr_funktioniert.\nBitte_besuchen_Sie_http://jabref.sourceforge.net_oder_http://www.mr-dlib.org_f\u00fcr_weitere_Informationen_und_Updates.
+Web_Service_Version_Outdated=Veraltete_Version_des_Web-Service
+The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Die_Version_des_Mr._dLib_Web-Service,_auf_die_Sie_zugreifen_wollen,_ist_veraltet.
+Update_empty_fields_with_data_fetched_from=Leere_Felder_aktualisieren_mit_Daten_von
+Create_New_Entry=Neuen_Eintrag_erstellen
+Update_Existing_Entry=Bestehenden_Eintrag_aktualisieren
+Mr._dLib=Mr._dLib
+More_information=Weitere_Informationen
+Fetching_Metadata...=Lade_Metadaten...
+Metadata=Metadaten
+Autocomplete_names_in_'Firstname_Lastname'_format_only=Automatische_Vervollst\u00e4ndigung_von_Namen_nur_im_Format_'Vorname_Nachname'
+Autocomplete_names_in_'Lastname,_Firstname'_format_only=Automatische_Vervollst\u00e4ndigung_von_Namen_nur_im_Format_'Nachname,_Vorname'
+Autocomplete_names_in_both_formats=Automatische_Vervollst\u00e4ndigung_von_Namen_in_beiden_Formaten
+Marking_color_%0=Markierungsfarbe_%0
+The_name_'comment'_can_not_be_used_as_an_entry_type_name.=Der_Name_'comment'_kann_nicht_als_Name_f\u00fcr_einen_Eintragstyp_verwendet_werden.
+You_must_enter_an_integer_value_in_the_text_field_for=Sie_m\u00fcssen_einen_Zahlwert_eintragen_im_Textfeld_f\u00fcr
+File_directory=Dateiverzeichnis
+Send_as_email=Als_E-Mail_senden
+References=Literaturverweise
+Sending_of_emails=Senden_der_E-Mails
+Subject_for_sending_an_email_with_references=Betreff_zum_Senden_einer_E-Mail_mit_Literaturverweisen
+Automatically_open_folders_of_attached_files=Ordner_mit_angeh\u00e4ngten_Dateien_automatisch_\u00f6ffnen
+Create_entry_based_on_content=Eintrag_anhand_von_Inhalt_erstellen
+Store_choice_as_default=Auswahl_als_Standard_speichern
+Do_not_show_this_box_again_for_this_import=Dialog_f\u00fcr_diesen_Import_nicht_wieder_anzeigen
+Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Immer_diesen_PDF-Importstil_benutzen_(nicht_bei_jedem_Import_nachfragen)
+Error_creating_email=Fehler_beim_Erstellen_der_E-Mail
+Could_not_open_directory=Ordner_konnte_nicht_ge\u00f6ffnet_werden
+Entries_added_to_an_email=Eintr\u00e4ge_zur_E-Mail_hinzugef\u00fcgt
+exportFormat=Exportformat
+Output_file_missing=Ausgabedatei_fehlt
+No_search_matches.=Keine_\u00dcbereinstimmungen_gefunden.
+The_output_option_depends_on_a_valid_input_option.=Die_Ausgabeoption_ben\u00f6tigt_eine_g\u00fcltige_Eingabeoption.
+Default_import_style_for_drag&drop_of_PDFs=Standard-Importstil_f\u00fcr_Drag&Drop_von_PDFs
+Default_PDF_file_link_action=Standardaktion_f\u00fcr_PDF-Dateiverweise
+File_name_format_pattern=Formatmuster_f\u00fcr_Dateinamen
+PostgreSQL_database=PostgreSQL-Datenbank
+DIN_1505=DIN_1505
+Wrong_Format=Falsches_Format
+Path_to_gnuclient_or_emacsclient=Pfad_zu_gnuclient_oder_emacsclient
+Additional_parameters=Weitere_Parameter
+Encrypted_documents_are_not_supported=Verschl\u00fcsselte_Dateien_werden_nicht_unterst\u00fctzt
+Cite_selected_entries=Ausgew\u00e4hlte_Eintr\u00e4ge_zitieren
+Cite_selected_entries_with_in-text_citation=Ausgew\u00e4hlte_Eintr\u00e4ge_im_Text_zitieren
+Cite_special=Spezielles_Zitieren
+Extra_information_(e.g._page_number)=Zusatzinformation_(z.B._Seitenzahl)
+Manage_citations=Literaturverweise_verwalten
+Problem_modifying_citation=Problem_beim_\u00c4ndern_des_Literaturverweises
+Citation=Literaturverweis
+Context=Kontext
+Extra_information=Zusatzinformation
+Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=BibTeX-Eintrag_f\u00fcr_Verweismarker_'0%'_konnte_nicht_aufgel\u00f6st_werden.
+Styles=Stile
+Select_style=Stil_w\u00e4hlen
+This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Dies_ist_die_Liste_der_verf\u00fcgbaren_Stile._W\u00e4hlen_Sie_aus,_welchen_Sie_benutzen_m\u00f6chten.
+Journals=Zeitschriften
+Cite=Zitieren
+Cite_in-text=Im_Text_zitieren
+Insert_empty_citation=Leeren_Verweis_einf\u00fcgen
+Merge_citations=Literaturverweise_zusammenf\u00fchren
+Manual_connect=Manuelle_Verbindung
+Select_Writer_document=Writer-Dokument_w\u00e4hlen
+Sync_OO_bibliography=OO-Bibliographie_synchronisieren
+OpenOffice=OpenOffice
+Select_which_open_Writer_document_to_work_on=Bitte_w\u00e4hlen_Sie,_mit_welchem_ge\u00f6ffneten_Writer-Dokument_Sie_arbeiten_m\u00f6chten
+Connected_to_document=Verbindung_zum_Dokument_hergestellt
+Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Literaturverweis_ohne_Text_einf\u00fcgen_(der_Eintrag_wird_in_der_Literaturliste_erscheinen)
+Cite_selected_entries_with_extra_information=Ausgew\u00e4hlte_Eintr\u00e4ge_mit_Zusatzinformation_zitieren
+Ensure_that_the_bibliography_is_up-to-date=Sicherstellen,_dass_die_Bibliographie_aktuell_ist
+Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=Ihr_OpenOffice-Dokument_verweist_auf_den_BibTeX-Key_'0%',_der_in_der_aktuellen_Datei_nicht_gefunden_wurde.
+Unable_to_synchronize_bibliography=Synchronisieren_der_Bibliographie_fehlgeschlagen
+Combine_pairs_of_citations_that_are_separated_by_spaces_only=Verbinde_Paare_von_Literaturverweisen,_die_nur_durch_Leerzeichen_voneinander_getrennt_sind
+Autodetection_failed=Automatische_Erkennung_fehlgeschlagen
+Connecting=Verbindung_wird_hergestellt
+Please_wait...=Bitte_warten...
+Unable_to_connect=Verbindung_fehlgeschlagen
+Set_connection_parameters=Verbindungsparameter_einstellen
+Path_to_OpenOffice_directory=Pfad_zum_OpenOffice-Ordner
+Path_to_OpenOffice_executable=Pfad_zum_OpenOffice-Programm
+Path_to_OpenOffice_library_dir=Pfad_zu_OpenOffice_Library-Ordner
+Autodetect=Automatische_Erkennung
+Connection_lost=Verbindung_verloren
+The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Das_Abschnittsformat_wird_von_der_Eigenschaft_'ReferenceParagraphFormat'_oder_'ReferenceHeaderParagraphFormat'_in_der_Stildatei_bestimmt.
+The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Das_Zeichenformat_wird_von_der_Eigenschaft_'CitationCharacterFormat'_in_der_Stildatei_bestimmt.
+Automatically_sync_bibliography_when_inserting_citations=Bibliographie_beim_Einf\u00fcgen_von_Literaturverweisen_automatisch_synchronisieren
+Look_up_BibTeX_entries_in_the_active_tab_only=BibTeX-Eintr\u00e4ge_nur_im_aktiven_Tab_suchen
+Look_up_BibTeX_entries_in_all_open_databases=BibTeX-Eintr\u00e4ge_in_allen_ge\u00f6ffneten_Dateien_suchen
+Use_in-parenthesis_citation=Literaturverweise_in_Klammern_setzen
+Use_in-text_citation=In-Text-Zitierweise_benutzen
+Autodetecting_paths...=Automatische_Erkennung_der_Pfade...
+Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=Die_OpenOffice-Installation_konnte_nicht_automatisch_gefunden_werden._Bitte_w\u00e4hlen_Sie_den_Installationspfad_manuell.
+Could_not_find_OpenOffice_installation=Die_OpenOffice-Installation_konnte_nicht_gefunden_werden
+Directories=Ordner
+Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Es_wurden_mehrere_OpenOffice-Programme_gefunden._Bitte_w\u00e4hlen_Sie,_zu_welchem_die_Verbindung_aufgebaut_werden_soll:
+Choose_OpenOffice_executable=OpenOffice-Programm_w\u00e4hlen
+Select_document=Datei_w\u00e4hlen
+Edit_Group_Membership=Gruppenzugeh\u00f6rigkeit_bearbeiten
+PostgreSQL=PostgreSQL
+
+Highlight_Words=W\u00f6rter_markieren
+JSTOR_import_cancelled=JSTOR-Import_abgebrochen
+HTML_list=HTML-Liste
+Click_group_to_toggle_membership_of_selected_entries=Gruppe_anklicken,_um_die_Zugeh\u00f6rigkeit_der_ausgew\u00e4hlten_Eintr\u00e4ge_zu_\u00e4ndern
+Use_EMACS_23_insertion_string=EMACS_23_Einf\u00fcgungs-Ausdruck_benutzen
+Normalize_to_BibTeX_name_format=Ins_BibTeX-Namensformat_normalisieren
+If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=Diese_Namensliste_soll_nach_M\u00f6glichkeit_so_normalisiert_werden,_dass_sie_sich_nach_der_\u00fcblichen_BibTeX-Namensformatierung_richtet
+Could_not_open_%0=%0_konnte_nicht_ge\u00f6ffnet_werden
+Unknown_import_format=Unbekanntes_Import-Format
+Open_INSPIRE_entry=INSPIRE-Eintrag_\u00f6ffnen
+An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=Beim_Abrufen_von_INSPIRE_ist_ein_Fehler_aufgetreten_(%0)\:
+Error_while_fetching_from_Inspire\:_=Fehler_beim_Abrufen_von_INSPIRE\:
+Web_search=Internetrecherche
+Autocomplete_names=Namen_automatisch_vervollst\u00e4ndigen
+You_must_select_either_a_valid_style_file,_or_use_the_default_style.=Sie_m\u00fcssen_entweder_eine_g\u00fcltige_Stildatei_ausw\u00e4hlen_oder_den_Standard-Stil_nutzen.
+Default_style=Standard-Stil
+Choose_style_file_directly=Stildatei_direkt_w\u00e4hlen
+Choose_from_a_directory=Aus_einem_Ordner_w\u00e4hlen
+
+No_directory_defined_for_%0-files=Kein_Verzeichnis_f\u00fcr_%0-Dateien_definiert
+Allow_file_links_relative_to_each_bib_file's_location=Dateilinks_relativ_zum_Pfad_der_bib-Datei_erlauben
+Style_selection=Stil-Auswahl
+The_panel_below_shows_the_definition_of_the_default_style.=Das_Fenster_unten_zeigt_die_Definition_des_Standard-Stils.
+If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=Wenn_Sie_es_als_Vorlage_f\u00fcr_einen_neuen_Stil_verwenden_wollen,_k\u00f6nnen_Sie_den_Inhalt_in_eine_neue_.jstyle-Datei_kopieren
+
+Default_style_(author-year_citations)=Standard-Stil_(Autor-Jahr-Verweise)
+Default_style_(numerical_citations)=Standard-Stil_(numerische_Verweise)
+No_valid_style_file_defined=Keine_g\u00fcltige_Stildatei_angegeben
+Choose_pattern=Muster_w\u00e4hlen
+Use_the_bib_file_location_as_primary_file_directory=Pfad_der_bib-Datei_als_prim\u00e4res_Dateiverzeichnis_verwenden
+Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=Das_gnuclient/emacsclient-Programm_konnte_nicht_gestartet_werden._Vergewissern_Sie_sich,_dass_das_emacsclient/gnuclient-Programm_installiert_und_im_PATH_enthalten_ist.
+Built-in_journal_list=Integrierte_Zeitschriften-Liste
+OpenOffice/LibreOffice_connection=OpenOffice/LibreOffice-Verbindung
+You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=Sie_k\u00f6nnen_zus\u00e4tzliche_Zeitschriftennamen_hinzuf\u00fcgen,_indem_Sie_eine_pers\u00f6nliche_Zeitschriftenliste_anlegen<br>_oder_bestehende_Zeitschriftenlisten_verlinken.
+JabRef_includes_a_built-in_list_of_journal_abbreviations.=JabRef_verf\u00fcgt_\u00fcber_eine_integrierte_Liste_von_Abk\u00fcrzungen_f\u00fcr_Zeitschriften.
+You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=Sie_m\u00fcssen_entweder_eine_g\u00fcltige_Stildatei_ausw\u00e4hlen_oder_einen_der_Standard-Stile_benutzen._
+You_must_select_either_a_valid_style_file,_or_use_a_default_style.=Sie_m\u00fcssen_entweder_eine_g\u00fcltige_Stildatei_ausw\u00e4hlen_oder_einen_Standard-Stil_benutzen._
+Show=Zeigen
+
+This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=Dieser_Dialog_ermöglicht_das_schnelle_Einfügen_von_Einträgen_aus_normalen_Text._Die_gewünschten_Textstellen<br>werden_markiert_und_z.B._durch_Doppelklick_einem_selektierten_BibTeX_Eintrag_zugeordnet.
+Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=Die_Java_Bouncy_Castle-Bibliothek_wurde_nicht_gefunden._Bitte_laden_Sie_sie_herunter_und_installieren_sie._Mehr_Informationen_unter_http://www.bouncycastle.org/.
+
+This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=Diese_Funktion_erstellt_eine_neue_Datei_basierend_auf_den_Eintr\u00e4gen,_die_von_einem_bestehenden_LaTeX-Dokument_ben\u00f6tigt_werden.
+You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=Sie_m\u00fcssen_eine_Ihrer_ge\u00f6ffneten_Dateien,_von_denen_Eintr\u00e4ge_genommen_werden_sollen,_sowie_die_AUX-Datei,_die_von_LaTeX_beim_Kompilieren_Ihres_Dokuments_erstellt_wird,_ausw\u00e4hlen.
+
+First_select_entries_to_clean_up.=W\u00e4hlen_Sie_zuerst_die_Eintr\u00e4ge_aus,_f\u00fcr_die_ein_Cleanup_durchgef\u00fchrt_werden_soll.
+Cleanup_entry=Eintrag_aufr\u00e4umen
+Autogenerate_PDF_Names=Automatische_PDF_Umbenennung
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=Automatische_PDF_Umbenennung_kann_nicht_r\u00fcckg\u00e4ngig_gemacht_werden._Fortfahren?
+File_rename_failed_for=Dateiumbenennung_schlug_fehl_f\u00fcr
+You_have_toggled_the_BibLaTeX_mode.=Sie_haben_den_BibLaTeX-Modus_de/aktiviert.
+Use_full_firstname_whenever_possible=Den_ganzen_Vornamen_nutzen,_wenn_m\u00f6glich
+Use_abbreviated_firstname_whenever_possible=Den_abgek\u00fcrzten_Vornamen_benutzen,_wenn_m\u00f6glich
+Use_abbreviated_and_full_firstname=Abgek\u00fcrzte_und_ganze_Vornamen_verwenden
+Autocompletion_options=Autovervollst\u00e4ndigungs-Optionen
+Autocomplete_after_following_number_of_characters=Autovervollst\u00e4ndigung_nach_der_folgenden_Anzahl_an_Zeichen
+Name_format_used_for_autocompletion=Namensformat_f\u00fcr_die_Autovervollst\u00e4ndigung
+Treatment_of_first_names=Behandlung_von_Vornamen
+No_icon_found_for_%0=Kein_Icon_gefunden_f\u00fcr_%0
+Cleanup_entries=Eintr\u00e4ge_werden_aufger\u00e4umt
+Automatically_assign_new_entry_to_selected_groups=Neuen_Eintrag_automatisch_den_ausgew\u00e4hlten_Gruppen_zuordnen
+Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=DOIs_von_den_Feldern_note_und_URL_ins_DOI-Feld_verschieben_und_das_http-Pr\u00e4fix_l\u00f6schen
+Format_content_of_month_field_to_#mon#=Inhalt_des_month-Feldes_zu_#mon#_umformatieren
+Ensure_that_page_ranges_are_of_the_form_num1--num2=Sicherstellen,_dass_Seitenbereiche_im_Format_S1--S2_sind
+Make_paths_of_linked_files_relative_(if_possible)=Pfade_verlinkter_Dateien_zu_relativen_Pfaden_\u00e4ndern_(falls_m\u00f6glich)
+Rename_PDFs_to_given_file_name_format_pattern=PDFs_entsprechend_dem_vorgegebenen_Namensformat_umbenennen
+Rename_only_PDFs_having_a_relative_path=Nur_PDFs_mit_einem_relativen_Pfad_umbenennen
+What_would_you_like_to_clean_up?=Was_w\u00fcrden_Sie_gerne_aufr\u00e4umen=
+Doing_a_cleanup_for_%0_entries...=Aufr\u00e4umen_von_%0_Eintr\u00e4gen...
+No_entry_needed_a_clean_up=Aufr\u00e4umen_bei_keinem_Eintrag_n\u00f6tig
+One_entry_needed_a_clean_up=Aufr\u00e4umen_bei_einem_Eintrag_n\u00f6tig
+%0_entries_needed_a_clean_up=Aufr\u00e4umen_bei_%0_Eintr\u00e4gen_n\u00f6tig
+Imported_=Importiert_wurden_
+Error_importing_from_database=Fehler_beim_Import_von_der_Datei
+Minimize_to_system_tray=In_den_Infobereich_minimieren
+
+Incomplete_search_results=Unvollst\u00e4ndiges_Suchergebnis
+%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=Es_wurden_%0_Eintr\u00e4ge_gefunden,_aber_nur_%1_konnten_gekl\u00e4rt_werden.
+
+Error_downloading_file_'%0'=Fehler_beim_Herunterladen_der_Datei_'%0'
+Download_failed=Download_fehlgeschlagen
+%0_databases_will_be_imported=%0_Dateien_werden_importiert
+
+Importing_cancelled=Import_abgebrochen
+There_are_no_available_databases_to_be_imported=Es_stehen_keine_Dateien_zum_Import_zur_Verf\u00fcgung
+Import_from_SQL_database=Import_von_einer_SQL-Datenbank
+Imported_%0_databases_successfully=%0_Dateien_wurden_erfolgreich_importiert
+<_CREATE_NEW_DATABASE_>=<_NEUE_DATENBANK_ERSTELLEN_>
+Remove_Selected=Ausgew\u00e4hlte_l\u00f6schen
+SQL_Database_Exporter=SQL-Datenbank-Exporter
+Select_target_SQL_database\:=W\u00e4hlen_Sie_die_SQL-Zieldatenbank:
+SQL_Database_Importer=SQL-Datenbank-Importer
+Please_select_which_JabRef_databases_do_you_want_to_import\:=Bitte_w\u00e4hlen_Sie,_welche_JabRef-Dateien_Sie_importieren_wollen:
+Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=Der_Gruppenbaum_konnte_nicht_geparsed_werden._Wenn_Sie_die_BibTeX-Datei_speichern,_gehen_alle_Gruppen_verloren.
+Attach_file=Datei_anh\u00e4ngen
+
+Setting_all_preferences_to_default_values.=Alle_Einstellungen_auf_die_Standard-Werte_setzen.
+Resetting_preference_key_'%0'=Einstellung_'0%'_zur\u00fccksetzen
+Unknown_preference_key_'%0'=Unbekannte_Einstellung_'0%'
+Unable_to_clear_preferences.=Einstellungen_konnten_nicht_zur\u00fcckgesetzt_werden.
+
+Reset_preferences_(key1,key2,..._or_'all')=Einstellungen_zur\u00fccksetzen_(key1,key2,..._oder_'all')
+Find_unlinked_files=Nicht_verlinkte_Dateien_finden
+Select_All=Alle_ausw\u00e4hlen
+Unselect_All=Auswahl_aufheben
+Expand_All=Alle_aufklappen
+Collapse_All=Alle_einklappen
+Select_Directory=Ordner_ausw\u00e4hlen
+Choose_Directory=Ordner_w\u00e4hlen
+Use_the_selected_directory_to_start_with_the_search.=Den_ausgew\u00e4hlten_Ordner_f\u00fcr_die_Suche_benutzen.
+Browse...=Durchsuchen...
+Opens_the_file_browser.=\u00d6ffnet_den_Dateimanager.
+Scan_directory=Ordner_durchsuchen
+Searches_the_selected_directory_for_unlinked_files.=Sucht_im_ausgew\u00e4hlten_Ordner_nach_nicht-verlinkten_Dateien.
+Starts_the_import_of_bibtex_entries.=Startet_den_Import_von_BibTeX-Eintr\u00e4gen.
+Leave_this_dialog.=Verlasse_diesen_Dialog.
+Create_directory_based_keywords=Erstelle_Stichworte,_die_auf_Ordnern_basieren
+Creates_keywords_in_created_entrys_with_directory_pathnames=Erstellt_Stichworte_in_erstellten_Eintr\u00e4gen_mit_Ordner-Pfadnamen
+Select_a_directory_where_the_search_shall_start.=Verzeichnis_w\u00e4hlen,_in_dem_die_Suche_starten_soll.
+Select_file_type\:=Dateityp_w\u00e4hlen:
+These_files_are_not_linked_in_the_active_database.=Diese_Dateien_sind_in_der_aktiven_Datenbank_nicht_verlinkt.
+Entry_type_to_be_created\:=Eintragstyp,_der_erstellt_werden_soll:
+Searching_file_system...=Dateisystem_wird_durchsucht...
+Importing_into_Database...=Importieren_in_die_Datei...
+Select_directory=Verzeichnis_w\u00e4hlen
+Select_files=Dateien_w\u00e4hlen
+Bibtex_entry_creation=Erstellung_eines_BibTeX-Eintrags
+<No_selection>=<Keine_Auswahl>
+Push_selection_to_TeXstudio=Auswahl_in_TeXstudio_einf\u00fcgen
+Path_to_TeXstudio=Pfad_zu_TeXstudio
+Program_'%0'_not_found=Programm_'%0'_nicht_gefunden
+Pushed_citations_to_TeXstudio=Literaturverweise_in_TeXstudio_eingef\u00fcgt
+Unable_to_connect_to_freecite_online_service.=Verbindung_zu_FreeCite_konnte_nicht_hergestellt_werden.
+Parse_with_FreeCite=Mit_FreeCite_parsen
+Insert_selected_citations_into_TeXstudio=Ausgew\u00e4hlte_Eintr\u00e4ge_in_TeXstudio_einf\u00fcgen
+The_current_BibTeX_key_will_be_overwritten._Continue?=Der_aktuelle_BibTeX-Key_wird_\u00fcberschrieben._Fortfahren?
+Overwrite_key=Key_\u00fcberschreiben
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Der_existierende_Key_wird_nicht_\u00fcberschrieben._Um_diese_Einstellung_zu_\u00e4ndern,_\u00f6ffnen_Sie_Optionen_->_Einstellungen_->_BibTeX-Key-Generator
+How_would_you_like_to_link_to_'%0'?=Wie_m\u00f6chten_Sie_zu_'%0'_verlinken?
+
+Bibtex_key_patterns=BibTeX-Key-Muster
+Changed_special_field_settings=Einstellungen_f\u00fcr_spezielle_Felder_ge\u00e4ndert
+Clear_priority=Priorit\u00e4t_aufheben
+Clear_rank=Rang_aufheben
+Compact_rank=Kompakter_Rang
+Convert_1st,_2nd,_..._to_real_superscripts=1st,_2nd,_..._in_hochgestellte_Buchstaben_konvertieren
+Dropped_comment_from_database=Kommentar_aus_Datei_gel\u00f6scht
+Enable_PDF_preview=PDF-Vorschau_aktivieren
+Enable_special_fields=Spezielle_Felder_aktivieren
+Five_stars=F\u00fcnf_Sterne
+Four_stars=Vier_Sterne
+Help_on_special_fields=Hilfe_zu_speziellen_Feldern
+Keywords_of_selected_entries=Stichworte_der_ausgew\u00e4hlten_Eintr\u00e4ge
+Manage_content_selectors=Inhaltsauswahl_verwalten
+Manage_keywords=Stichworte_verwalten
+Marked_entries'_quality_as_good=Qualit\u00e4t_der_Eintr\u00e4ge_als_gut_markieren
+Marked_entries_as_relevant=Eintr\u00e4ge_als_relevant_markieren
+No_priority_information=Keine_Informationen_zur_Priorit\u00e4t
+No_rank_information=Keine_Informationen_zum_Rang
+One_star=Ein_Stern
+Priority=Priorit\u00e4t
+Priority_high=Hohe_Priorit\u00e4t
+Priority_low=Niedrige_Priorit\u00e4t
+Priority_medium=Mittlere_Priorit\u00e4t
+Quality=Qualit\u00e4t
+Rank=Rang
+Relevance=Relevanz
+Set_priority=Priort\u00e4t_setzen
+Set_priority_to_high=Priorit\u00e4t_auf_hoch_setzen
+Set_priority_to_low=Priorit\u00e4t_auf_niedrig_setzen
+Set_priority_to_medium=Priorit\u00e4t_auf_mittel_setzen
+Set_rank_to_five_stars=Rang_auf_f\u00fcnf_Sterne_setzen
+Set_rank_to_four_stars=Rang_auf_vier_Sterne_setzen
+Set_rank_to_one_star=Rang_auf_einen_Stern_setzen
+Set_rank_to_three_stars=Rang_auf_drei_Sterne_setzen
+Set_rank_to_two_stars=Rang_auf_zwei_Sterne_setzen
+Show_one_letter_heading_for_icon_columns=\u00dcberschrift_mit_einem_Buchstaben_f\u00fcr_Spalten_mit_Icons_anzeigen
+Show_priority=Priorit\u00e4t_anzeigen
+Show_quality=Qualit\u00e4t_anzeigen
+Show_rank=Rang_anzeigen
+Show_relevance=Relevanz_anzeigen
+Synchronize_with_keywords=Mit_Stichworten_synchronisieren
+Synchronized_special_fields_based_on_keywords=Spezielle_Felder_wurden_mit_den_Stichworten_synchronisiert
+Three_stars=Drei_Sterne
+Toggle_relevance=Relevanz_ein-/ausschalten
+Toogle_quality_assured=Qualit\u00e4t_ein-/ausschalten
+Two_stars=Zwei_Sterne
+Update_keywords=Stichworte_aktualisieren
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=Werte_von_speziellen_Feldern_als_separate_Felder_in_die_BibTeX-Datei_schreiben
+You_have_changed_settings_for_special_fields.=Sie_haben_die_Einstellungen_f\u00fcr_spezielle_Felder_ge\u00e4ndert.
+no_preview_available=keine_Vorschau_verf\u00fcgbar
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_Eintr\u00e4ge_gefunden._Um_die_Serverlast_zu_reduzieren,_werden_nur_%1_heruntergeladen.
+A_string_with_that_label_already_exists=Ein_String_mit_diesem_Label_ist_bereits_vorhanden
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=Verbindung_zu_OpenOffice_verloren._Bitte_stellen_Sie_sicher,_dass_OpenOffice_l\u00e4uft,_und_versuchen_Sie,_erneut_zu_verbinden.
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Eintrag_korrigieren_und_Editor_erneut_\u00f6ffnen,_um_den_Quelltext_anzuzeigen/zu_bearbeiten.
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=Keine_Verbindung_zu_einem_laufenden_gnuserv-Prozess_m\u00f6glich._Vergewissern_Sie_sich,_dass_Emacs_oder_XEmacs_l\u00e4uft<BR>und_dass_der_Server_gestartet_wurde_(mit_dem_Befehl_'server-start'/'gnuserv-start').
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=Verbindung_zu_OpenOffice_fehlgeschlagen.\nVergewissern_Sie_sich,_dass_Sie_OpenOffice_mit_Java-Unterst\u00fctzung_installiert_haben.\nBei_manueller_Verbindung_\u00fcberpr\u00fcfen_Sie_bitte_die_Programm-_und_Library-Pfade.\n\nFehlermeldung:_
+Created_group_"%0".=Gruppe_"%0"_wurde_erstellt.
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Die_Datei_wurde_extern_ge\u00e4ndert._Sind_Sie_sicher,_dass_Sie_speichern_m\u00f6chten?
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=Falls_bei_einem_eingef\u00fcgten_oder_importierten_Eintrag_das_Feld_bereits_belegt_ist,_\u00fcberschreiben.
+Import_Metadata_From_PDF=Metadaten_aus_PDF_importieren
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Keine_Verbindung_zu_einem_Writer-Dokument._Bitte_vergewissern_Sie_sich,_dass_ein_Dokument_ge\u00f6ffnet_ist,_und_benutzen_Sie_die_Schaltfl\u00e4che_'Writer-Dokument_w\u00e4hlen',_um_eine_Verbindung_herzustellen.
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=Bitte_beachten_Sie,_dass_dies_eine_fr\u00fche_Beta-Version_ist._Benutzen_Sie_sie_nicht,_ohne_ihre_Dateien_vorher_zu_sichern.
+Removed_all_subgroups_of_group_"%0".=Alle_Untergruppen_der_Gruppe_"%0"_wurden_entfernt.
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=Um_den_USB-Stick-Modus_zu_deaktivieren,_benennen_Sie_die_Datei_jabref.xml_in_demselben_Ordner_als_JabRef_oder_l\u00f6schen_Sie_sie.
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Verbindung_fehlgeschlagen._Ein_m\u00f6glicher_Grund_ist,_dass_JabRef_und_OpenOffice/LibreOffice_nicht_beide_im_32-bit_oder_64-bit_Modus_laufen.
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Name_und_Version_des_Plugins_konnten_nicht_ermittelt_werden._Dies_ist_m\u00f6glicherweise_kein_g\u00fcltiges_JabRef-Plugin.
+Use_the_following_delimiter_character(s)\:=Benutzen_Sie_die_folgenden_Trennzeichen:
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=Beim_Herunterladen_von_Dateien_oder_beim_Verschieben_von_verlinkten_Dateien_in_das_Dateiverzeichnis_soll_der_Pfad_der_bib-Datei_benutzt_werden,_nicht_das_oben_definierte_Dateiverzeichnis
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Ihre_Stildatei_legt_das_Zeichenformat_'%0'_fest,_das_in_Ihrem_aktuellen_OpenOffice-Dokument_nicht_definiert_ist.
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Ihre_Stildatei_legt_das_Abschnittsformat_'%0'_fest,_das_in_Ihrem_aktuellen_OpenOffice-Dokument_nicht_definiert_ist.
+
+Error_fetching_from_Google_Scholar=Fehler_beim_Abrufen_von_Google_Scholar
+Run_HTML_converter_on_title=Titel_mit_HTML-Konvertierer_bearbeiten
+Searching...=Suche_l\u00e4uft...
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=Sie_haben_mehr_als_%0_Eintr\u00e4ge_zum_Download_ausgew\u00e4hlt._Einige_Webseiten_k\u00f6nnten_zu_viele_Downloads_blockieren._M\u00f6chten_Sie_fortfahren?
+Confirm_selection=Auswahl_best\u00e4tigen
+Unknown_DOI\:_'%0'.=Unbekannter_DOI:_'0%'.
+Get_BibTeX_entry_from_DOI=BibTeX-Eintrag_aus_DOI_erstellen
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Hoch-_und_tiefgestellte_Zeichen_in_eine_Gleichung_konvertieren_und_nicht_als_Text_darstellen
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Nach_der_Suche_{}_zu_festgesetzten_Titelworten_hinzuf\u00fcgen,_um_Gro\u00df-/Kleinschreibung_beizubehalten
+Import_conversions=Konvertierungen_importieren
+Run_filter_on_title_keeping_the_case_of_selected_words=Filter_\u00fcber_Titel_laufen_lassen,_Gro\u00df-/Kleinschreibung_der_ausgew\u00e4hlten_Worte_unver\u00e4ndert_lassen
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=Zeitweilige_Fehler_auf_dem_IEEE_Xplore-Server._Bitte_versuchen_Sie_es_sp\u00e4ter_erneut.
+Please_enter_a_search_string=Bitte_geben_Sie_eine_Suchphrase_ein
+Please_open_or_start_a_new_database_before_searching=Bitte_\u00f6ffnen_Sie_eine_Datei_oder_legen_Sie_eine_neue_an,_bevor_Sie_suchen
+An_Error_occurred_while_fetching_from_ADS_(%0)\:=Beim_Abrufen_von_ADS_ist_ein_Fehler_aufgetreten_(%0):
+Error_while_fetching_from_ADS=Fehler_beim_Abrufen_von_ADS
+Error_while_fetching_from_OAI2=Fehler_beim_Abrufen_von_OAI2
+An_Error_occurred_while_parsing_abstract=Beim_Parsen_der_Zusammenfassung_ist_ein_Fehler_aufgetreten
+Unknown_DiVA_entry\:_'%0'.=Unbekannter_DiVA-Eintrag:_'0%'.
+Get_BibTeX_entry_from_DiVA=BibTeX-Eintrag_aus_DiVA_erstellen
+Log=Protokoll
+Remove_unneccessary_$,_{,_and_}=\u00dcberfl\u00fcssige_$,_{_und_}_entfernen
diff --git a/src/resource/JabRef_en.properties b/src/resource/JabRef_en.properties
index 75cb7f9..8e0f696 100644
--- a/src/resource/JabRef_en.properties
+++ b/src/resource/JabRef_en.properties
@@ -1,2435 +1,2435 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-
-%0_contains_the_Regular_Expression_<b>%1</b>=%0%0 contains_the_Regular_Expression_<b>%1</b>
-
-%0_contains_the_term_<b>%1</b>=%0 contains_the_term_<b>%1</b>
-
-%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_doesn't_contain_the_Regular_Expression_<b>%1</b>
-
-%0_doesn't_contain_the_term_<b>%1</b>=%0_doesn't_contain_the_term_<b>%1</b>
-
-%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_doesn't_match_the_Regular_Expression_<b>%1</b>
-
-%0_doesn't_match_the_term_<b>%1</b>=%0_doesn't_match_the_term_<b>%1</b>
-
-%0_export_successful=%0_export_successful
-
-%0_field_set=%0_field_set
-
-%0_matches_the_Regular_Expression_<b>%1</b>=%0_matches_the_Regular_Expression_<b>%1</b>
-
-%0_matches_the_term_<b>%1</b>=%0_matches_the_term_<b>%1</b>
-
-<field_name>=<field_name>
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>
-
-<no_field>=<no_field>
-
-<select>=<select>
-
-<select_word>=<select_word>
-A_string_with_this_label_already_exists=A_string_with_that_label_already_exists
-Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)
-Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)
-
-Abbreviate_names=Abbreviate_names
-Abbreviated_%0_journal_names.=Abbreviated_%0_journal_names.
-
-Abbreviation=Abbreviation
-
-About_JabRef=About_JabRef
-
-Abstract=Abstract
-
-Accept=Accept
-
-Accept_change=Accept_change
-
-Action=Action
-
-Add=Add
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.
-
-add_entries_to_group=add_entries_to_group
-
-Add_entry_selection_to_this_group=Add_entry_selection_to_this_group
-
-Add_from_folder=Add_from_folder
-
-Add_from_jar=Add_from_jar
-
-add_group=add_group
-
-Add_Group=Add_group
-
-Add_new=Add_new
-
-Add_Subgroup=Add_subgroup
-
-Add_to_group=Add_to_group
-
-Added_group_"%0".=Added_group_"%0".
-
-Added_new=Added_new
-
-Added_string=Added_string
-
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>& [...]
-
-Advanced=Advanced
-All_custom_file_types_will_be_lost._Proceed?=All_custom_file_types_will_be_lost._Proceed?
-
-All_Entries=All_Entries
-
-All_entries=All_entries
-All_entries_of_this_type_will_be_declared_typeless._Continue?=All_entries_of_this_type_will_be_declared_typeless._Continue?
-
-All_fields=All_fields
-
-All_subgroups_(recursively)=All_subgroups_(recursively)
-
-Allow_editing_in_table_cells=Allow_editing_in_table_cells
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=An_Error_occurred_while_fetching_from_OAI2_source_(%0):
-An_Exception_ocurred_while_accessing_'%0'=An_Exception_occurred_while_accessing_'%0'
-An_SAXException_ocurred_while_parsing_'%0'\:=An_SAXException_occurred_while_parsing_'%0':
-
-and= and
-and_inside_the_JabRef-jar\:=and_inside_the_JabRef-jar:
-
-and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.
-
-any_field_that_matches_the_regular_expression_<b>%0</b>=any_field_that_matches_the_Regular_Expression_<b>%0</b>
-
-Appearance=Appearance
-
-Append=Append
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database
-
-Append_database=Append_database
-
-append_the_selected_text_to_bibtex_key=append_the_selected_text_to_bibtex_key
-Application=Application
-
-Apply=Apply
-
-Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Arguments_passed_on_to_running_JabRef_instance._Shutting_down.
-
-Assign_entry_selection_exclusively_to_this_group=Assign_entry_selection_exclusively_to_this_group
-
-Assign_new_file=Assign_new_file
-
-Assign_the_original_group's_entries_to_this_group?=Assign_the_original_group's_entries_to_this_group?
-
-Assigned_%0_entries_to_group_"%1".=Assigned_%0_entries_to_group_"%1".
-
-Assigned_1_entry_to_group_"%0".=Assigned_1_entry_to_group_"%0".
-At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.
-
-Attach_%0_file=Attach_%0_file
-
-Attach_URL=Attach_URL
-
-Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.
-Attempting_SQL_export...=Attempting_SQL_export...
-
-Auto=Auto
-
-Autodetect_format=Autodetect_format
-
-Autogenerate_BibTeX_key=Autogenerate_BibTeX_key
-Autogenerate_BibTeX_keys=Autogenerate_BibTeX_keys
-
-Autogenerate_groups=Autogenerate_groups
-
-autogenerate_keys=autogenerate_keys
-Autolink_files_with_names_starting_with_the_BibTeX_key=Autolink_files_with_names_starting_with_the_BibTeX_key
-
-Autolink_only_files_that_match_the_BibTeX_key=Autolink_only_files_that_match_the_BibTeX_key
-
-Automatically_create_groups=Automatically_create_groups
-
-Automatically_create_groups_for_database.=Automatically_create_groups_for_database.
-
-Automatically_created_groups=Automatically_created_groups
-
-Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups
-
-Automatically_remove_exact_duplicates=Automatically_remove_exact_duplicates
-
-Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups
-
-Autoset=Autoset
-
-Autoset_%0_field=Autoset_%0_field
-
-Autoset_%0_links._Allow_overwriting_existing_links.=Autoset_%0_links._Allow_overwriting_existing_links.
-
-Autoset_%0_links._Do_not_overwrite_existing_links.=Autoset_%0_links._Do_not_overwrite_existing_links.
-Autoset_external_links=Autoset_external_links
-Autosetting_links=Autosetting_links
-
-AUX_file_import=AUX_file_import
-
-Available_export_formats=Available_export_formats
-
-Available_fields=Allowed_BibTeX_fields
-
-Available_import_formats=Available_import_formats
-
-Background_color_for_optional_fields=Background_color_for_optional_fields
-
-Background_color_for_required_fields=Background_color_for_required_fields
-
-Backup_old_file_when_saving=Backup_old_file_when_saving
-Beta_version=Beta_version
-
-Bibkey_to_filename_conversion=Bibkey_to_filename_conversion
-
-BibTeX_key=BibTeX_key
-
-BibTeX_key_is_unique.=BibTeX_key_is_unique.
-
-BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file
-
-BibTeX_source=BibTeX_source
-
-BibTeXML=BibTeXML
-
-Binding=Binding
-Broken_link=Broken_link
-
-Browse=Browse
-
-by=by
-
-Calling_external_viewer...=Calling_external_viewer...
-
-Cancel=Cancel
-
-Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?
-
-Cannot_merge_this_change=Cannot_merge_this_change
-
-Cannot_move_group_"%0"_down.=Cannot_move_group_"%0"_down.
-
-Cannot_move_group_"%0"_left.=Cannot_move_group_"%0"_left.
-
-Cannot_move_group_"%0"_right.=Cannot_move_group_"%0"_right.
-
-Cannot_move_group_"%0"_up.=Cannot_move_group_"%0"_up.
-
-case_insensitive=case_insensitive
-
-case_sensitive=case_sensitive
-
-Case_sensitive=Case_sensitive
-
-change_assignment_of_entries=change_assignment_of_entries
-
-Change_case=Change_case
-
-Change_entry_type=Change_entry_type
-Change_file_type=Change_file_type
-
-change_key=change_key
-
-Change_of_Grouping_Method=Change_of_Grouping_Method
-
-change_preamble=change_preamble
-
-change_string_content=change_string_content
-
-change_string_name=change_string_name
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=Change_table_column_and_General_fields_settings_to_use_the_new_feature
-
-change_type=change_type
-
-changed_=changed_
-
-Changed_font_settings=Changed_font_settings
-
-Changed_language_settings=Changed_language_settings
-
-Changed_look_and_feel_settings=Changed_look_and_feel_settings
-
-Changed_preamble=Changed_preamble
-
-Changed_type_to=Changed_type_to
-
-Characters_to_ignore=Characters_to_ignore
-
-Check_existing_%0_links=Check_existing_%0_links
-
-Check_links=Check_links
-
-Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.
-Cite_command=Cite_command
-
-Class_name=Class_name
-
-Clear=Clear
-
-clear_all_groups=clear_all_groups
-
-Clear_field=Clear_field
-Clear_fields=Clear_fields
-
-Clear_highlight=Clear_highlight
-
-Close=Close
-
-Close_dialog=Close_dialog
-
-Close_the_current_database=Close_the_current_database
-
-Close_the_help_window=Close_the_help_window
-
-Close_window=Close_window
-
-Closed_database=Closed_database
-
-Collapse_subtree=Collapse_subtree
-
-Color_codes_for_required_and_optional_fields=Color_codes_for_required_and_optional_fields
-
-Color_for_marking_incomplete_entries=Color_for_marking_incomplete_entries
-
-Column_width=Column_width
-
-Command_line_id=Command_line_id
-
-Complete_record=Complete_record
-Connect=Connect
-Connect_to_SQL_database=Connect_to_SQL_database
-Connect_to_SQL_Database=Connect_to_SQL_Database
-Connection_to_IEEEXplore_failed=Connection_to_IEEEXplore_failed
-
-Contained_in=Contained_in
-
-Content=Content
-
-Copied=Copied
-
-Copied_cell_contents=Copied_cell_contents
-
-Copied_key=Copied_key
-
-Copied_keys=Copied_keys
-
-Copy=Copy
-
-Copy_BibTeX_key=Copy_BibTeX_key
-Copy_file_to_file_directory.=Copy_file_to_file_directory.
-Copy_files_to_file_directory.=Copy_files_to_file_directory.
-
-Copy_to_clipboard=Copy_to_clipboard
-
-Could_not_call_executable=Could_not_call_executable
-
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').
-
-Could_not_connect_to_host_=Could_not_connect_to_host_
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.
-
-Could_not_export_file=Could_not_export_file
-
-Could_not_export_preferences=Could_not_export_preferences
-
-Could_not_find_a_suitable_import_format.=Could_not_find_a_suitable_import_format.
-Could_not_find_directory_for_%0-files\:_%1=Could_not_find_directory_for_%0-files:_%1
-Could_not_find_image_file=Could_not_find_image_file
-
-Could_not_find_layout_file=Could_not_find_layout_file
-
-Could_not_import_preferences=Could_not_import_preferences
-
-Could_not_instantiate_%0=Could_not_instantiate_%0
-Could_not_instantiate_%0_%1=Could_not_instantiate_%0_%1
-Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?
-Could_not_open_link=Could_not_open_link
-
-Could_not_parse_number_of_hits=Could_not_parse_number_of_hits
-Could_not_print_preview=Could_not_print_preview
-
-Could_not_run_the_'vim'_program.=Could_not_run_the_'vim'_program.
-
-Could_not_save_file=Could_not_save_file
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Could_not_save_file._Character_encoding_'%0'_is_not_supported.
-
-Create_group=Create_group
-
-Created_groups.=Created_groups.
-
-crossreferenced_entries_included=crossreferenced_entries_included
-
-Current_content=Current_content
-
-Current_value=Current_value
-
-Custom_entry_types=Custom_entry_types
-
-Custom_entry_types_found_in_file=Custom_entry_types_found_in_file
-Custom_icon_theme=Custom_icon_theme
-Custom_icon_theme_file=Custom_icon_theme_file
-
-Custom_importers=Custom_importers
-
-Customize_entry_types=Customize_entry_types
-
-Customize_key_bindings=Customize_key_bindings
-
-Cut=Cut
-
-cut_entries=cut_entries
-
-cut_entry=cut_entry
-
-Cut_pr=Cut
-Database_\:=Database:
-
-Database_encoding=Database_encoding
-
-Database_has_changed._Do_you_want_to_save_before_closing?=Database_has_changed._Do_you_want_to_save_before_closing?
-
-Database_properties=Database_properties
-
-Date_format=Date_format
-
-Default=Default
-
-Default_encoding=Default_encoding
-
-Default_grouping_field=Default_grouping_field
-
-Default_look_and_feel=Default_look_and_feel
-
-Default_pattern=Default_pattern
-
-Default_sort_criteria=Default_sort_criteria
-Define_'%0'=Define_'%0'
-
-Delete=Delete
-
-Delete_custom_format=Delete_custom_format
-
-delete_entries=delete_entries
-
-Delete_entry=Delete_entry
-
-delete_entry=delete_entry
-
-Delete_multiple_entries=Delete_multiple_entries
-
-Delete_rows=Delete_rows
-
-Delete_strings=Delete_strings
-
-Deleted=Deleted
-
-Delimit_fields_with_semicolon,_ex.=Delimit_fields_with_semicolon,_ex.
-
-Descending=Descending
-
-Description=Description
-
-Deselect_all=Deselect_all
-Deselect_all_duplicates=Deselect_all_duplicates
-
-Details=Details
-
-Disable_entry_editor_when_multiple_entries_are_selected=Disable_entry_editor_when_multiple_entries_are_selected
-
-Disable_this_confirmation_dialog=Disable_this_confirmation_dialog
-
-Disable_this_warning_dialog=Disable_this_warning_dialog
-
-Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.
-
-Display_all_error_messages=Display_all_error_messages
-
-Display_help_on_command_line_options=Display_help_on_command_line_options
-
-Display_imported_entries_in_an_inspection_window_before_they_are_added.=Display_imported_entries_in_an_inspection_window_before_they_are_added.
-
-Display_only_entries_belonging_to_all_selected_groups.=Display_only_entries_belonging_to_all_selected_groups.
-Display_version=Display_version
-
-Displaying_no_groups=Displaying_no_groups
-
-Do_not_abbreviate_names=Do_not_abbreviate_names
-
-Do_not_autoset=Do_not_autoset
-
-Do_not_import_entry=Do_not_import_entry
-
-Do_not_open_any_files_at_startup=Do_not_open_any_files_at_startup
-
-Do_not_overwrite_existing_keys=Do_not_overwrite_existing_keys
-Do_not_show_splash_window_at_startup=Do_not_show_splash_window_at_startup
-Do_not_show_these_options_in_the_future=Do_not_show_these_options_in_the_future
-
-Do_not_wrap_the_following_fields_when_saving=Do_not_wrap_the_following_fields_when_saving
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Do_not_write_the_following_fields_to_XMP_Metadata:
-
-Do_you_want_JabRef_to_do_the_following_operations?=Do_you_want_JabRef_to_do_the_following_operations?
-
-DocBook=DocBook
-
-Down=Down
-
-Download=Download
-
-Download_completed=Download_completed
-
-Download_file=Download_file
-
-Downloading...=Downloading...
-Drag_and_Drop_Error=Drag_and_Drop_Error
-Drop_%0=Drop_%0
-
-duplicate_BibTeX_key=duplicate_BibTeX_key
-
-Duplicate_BibTeX_key.=Duplicate_BibTeX_key.
-
-Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.
-
-Duplicate_Key_Warning=Duplicate_Key_Warning
-
-Duplicate_pairs_found=Duplicate_pairs_found
-
-duplicate_removal=duplicate_removal
-
-Duplicate_string_name=Duplicate_string_name
-
-Duplicates_found=Duplicates_found
-
-Duplicates_removed=Duplicates_removed
-
-Dynamic_groups=Dynamic_groups
-
-Dynamically_group_entries_by_a_free-form_search_expression=Dynamically_group_entries_by_a_free-form_search_expression
-
-Dynamically_group_entries_by_searching_a_field_for_a_keyword=Dynamically_group_entries_by_searching_a_field_for_a_keyword
-
-Each_line_must_be_on_the_following_form=Each_line_must_be_on_the_following_form
-
-Edit=Edit
-
-Edit_custom_export=Edit_custom_export
-Edit_entry=Edit_entry
-Edit_file_link=Edit_file_link
-Edit_file_type=Edit_file_type
-
-Edit_group=Edit_Group
-
-Edit_journal=Edit_journal
-
-Edit_preamble=Edit_preamble
-Edit_strings=Edit_strings
-Editor_options=Editor_options
-
-empty_BibTeX_key=empty_BibTeX_key
-
-Empty_BibTeX_key.=Empty_BibTeX_key.
-
-Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.
-
-empty_database=empty_database
-
-Enable_source_editing=Enable_source_editing
-Enable_word/name_autocompletion=Enable_word/name_autocompletion
-
-Endnote=Endnote
-
-Enter_URL=Enter_URL
-
-Enter_URL_to_download=Enter_URL_to_download
-
-entries=entries
-
-Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.
-
-Entries_exported_to_clipboard=Entries_exported_to_clipboard
-
-entries_have_undefined_BibTeX_key=entries_have_undefined_BibTeX_key
-
-entries_into_new_database=entries_into_new_database
-
-entry=entry
-
-Entry_editor=Entry_editor
-
-Entry_in_current_database=Entry_in_current_database
-
-Entry_in_import=Entry_in_import
-
-Entry_preview=Entry_preview
-
-Entry_table=Entry_table
-
-Entry_table_columns=Entry_table_columns
-
-Entry_type=Entry_type
-
-Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters
-
-Entry_types=Entry_types
-
-Error=Error
-Error\:_=Error:_
-Error_converting_Bibtex_to_XMP\:_%0=Error_converting_Bibtex_to_XMP:_%0
-Error_converting_XMP_to_'%0'...=Error_converting_XMP_to_'%0'...
-Error_exporting_to_clipboard=Error_exporting_to_clipboard
-
-##Error:_check_your_External_viewer_settings_in_Preferences=Error:_check_your_External_viewer_settings_in_Preferences
-Error_in_field=Error_in_field
-Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.
-Error_occured_when_parsing_entry=Error_occurred_when_parsing_entry
-
-Error_opening_file=Error_opening_file
-
-Error_setting_field=Error_setting_field
-Error_while_converting_BibtexEntry_to_XMP_%0=Error_while_converting_BibtexEntry_to_XMP_%0
-Error_while_downloading_file\:=Error_while_downloading_file:
-Error_while_fetching_from_OIA2=Error_while_fetching_from_OIA2
-Error_while_writing=Error_while_writing
-Error_writing_to_%0_file(s).=Error_writing_to_%0_file(s).
-Error_writing_XMP_to_file\:_%0=Error_writing_XMP_to_file:_%0
-
-
-Establishing_SQL_connection...=Establishing_SQL_connection...
-Exceptions=Exceptions
-
-Existing_file=Existing_file
-
-exists._Overwrite_file?=exists._Overwrite_file?
-exists._Overwrite?=exists._Overwrite?
-
-Expand_subtree=Expand_subtree
-
-#previousentrynottranslated.Toviewit,openGroupinterfaceandclickonthe"newgroup"button
-Export=Export
-
-Export_name=Export_name
-
-Export_preferences=Export_preferences
-
-Export_preferences_to_file=Export_preferences_to_file
-
-Export_properties=Export_properties
-
-Export_to_clipboard=Export_to_clipboard
-Export_to_SQL_database=Export_to_SQL_database
-
-Exporting=Exporting
-Extension=Extension
-
-External_changes=External_changes
-
-External_file_links=External_file_links
-
-External_files=External_files
-
-External_programs=External_programs
-
-External_viewer_called=External_viewer_called
-
-Failed_to_read_groups_data_(unsupported_version\:_%0)=Failed_to_read_groups_data_(unsupported_version:_%0)
-
-Fetch=Fetch
-
-Field=Field
-
-field=field
-
-#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
-Field_content=Field_content
-
-Field_name=Field_name
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters
-
-Field_sizes=Field_sizes
-Field_to_filter=Field_to_filter
-
-Field_to_group_by=Field_to_group_by
-
-Fields=Fields
-
-File=File
-
-file=file
-
-File_'%0'_is_already_open.=File_'%0'_is_already_open.
-
-File_'%0'_not_found=File_'%0'_not_found
-
-File_changed=File_changed
-File_directory_is_'%0'\:=File_directory_is_'%0':
-
-File_directory_is_not_set_or_does_not_exist!=File_directory_is_not_set_or_does_not_exist!
-File_download=File_download
-File_exists=File_exists
-
-File_extension=File_extension
-File_has_been_updated_externally._What_do_you_want_to_do?=File_has_been_updated_externally._What_do_you_want_to_do?
-
-File_not_found=File_not_found
-File_type=File_type
-
-File_updated_externally=File_updated_externally
-
-filename=filename
-
-Files_opened=Files_opened
-
-Filter=Filter
-
-Finished_autosetting_external_links.=Finished_autosetting_external_links.
-
-Finished_synchronizing_%0_links._Entries_changed%c_%1.=Finished_synchronizing_%0_links._Entries_changed%c_%1.
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Finished_writing_XMP-metadata._Wrote_to_%0_file(s).
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).
-
-First_select_the_entries_you_want_keys_to_be_generated_for.=First_select_the_entries_you_want_keys_to_be_generated_for.
-
-Fit_table_horizontally_on_screen=Fit_table_horizontally_on_screen
-
-Float=Float
-Float_marked_entries=Float_marked_entries
-
-Font_Family=Font_Family
-
-Font_Preview=Font_Preview
-
-Font_Size=Font_Size
-
-Font_Style=Font_Style
-
-FontSelector=FontSelector
-
-for=for
-
-Format_of_author_and_editor_names=Format_of_author_and_editor_names
-Format_String=Format_String
-
-Format_used=Format_used
-Formatter_Name=Formatter_Name
-
-Formatter_not_found=Formatter_not_found
-
-found=found
-Found_%0_plugin(s)=Found_%0_plugin(s)
-
-found_in_aux_file=found_in_aux_file
-
-Full_name=Full_name
-
-General=General
-
-General_fields=General_fields
-
-Generate=Generate
-
-Generate_BibTeX_key=Generate_BibTeX_key
-
-Generate_keys=Generate_keys
-
-Generate_keys_before_saving_(for_entries_without_a_key)=Generate_keys_before_saving_(for_entries_without_a_key)
-Generate_keys_for_imported_entries=Generate_keys_for_imported_entries
-
-Generate_now=Generate_now
-
-Generated_BibTeX_key_for=Generated_BibTeX_key_for
-
-Generating_BibTeX_key_for=Generating_BibTeX_key_for
-
-Grab=Grab
-
-Gray_out_entries_not_in_group_selection=Gray_out_entries_not_in_group_selection
-
-Gray_out_non-hits=Gray_out_non-hits
-
-Gray_out_non-matching_entries=Gray_out_non-matching_entries
-
-Group_properties=Group_properties
-
-grouping_may_not_work_for_this_entry=grouping_may_not_work_for_this_entry
-
-Groups=Groups
-
-Harvard_RTF=Harvard_RTF
-
-Have_you_chosen_the_correct_package_path?=Have_you_chosen_the_correct_package_path?
-
-Help=Help
-
-Help_contents=Help_contents
-
-Help_on_groups=Help_on_groups
-
-Help_on_key_patterns=Help_on_key_patterns
-Help_on_Preview_Settings=Help_on_Preview_Settings
-Help_on_Regular_Expression_Search=Help_on_Regular_Expression_Search
-
-Hide_non-hits=Hide_non-hits
-
-Hide_non-matching_entries=Hide_non-matching_entries
-
-Hierarchical_context=Hierarchical_context
-
-Highlight=Highlight
-Highlight_groups_matching_all_selected_entries=Highlight_groups_matching_all_selected_entries
-Highlight_groups_matching_any_selected_entry=Highlight_groups_matching_any_selected_entry
-
-Highlight_overlapping_groups=Highlight_overlapping_groups
-
-Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>
-
-HTML=HTML
-HTML_table=HTML_table
-HTML_table_(with_Abstract_&_BibTeX)=HTML_table_(with_Abstract_&_BibTeX)
-Icon=Icon
-
-Ignore=Ignore
-
-Immediate_subgroups=Immediate_subgroups
-
-Import=Import
-
-Import_and_keep_old_entry=Import_and_keep_old_entry
-
-Import_and_remove_old_entry=Import_and_remove_old_entry
-
-Import_entries=Import_entries
-
-Import_failed=Import_failed
-
-Import_file=Import_file
-
-Import_group_definitions=Import_group_definitions
-
-Import_name=Import_name
-
-Import_preferences=Import_preferences
-
-Import_preferences_from_file=Import_preferences_from_file
-
-Import_strings=Import_strings
-
-Import_to_open_tab=Import_to_open_tab
-
-Import_word_selector_definitions=Import_word_selector_definitions
-
-Imported_database=Imported_database
-
-Imported_entries=Imported_entries
-
-Imported_from_database=Imported_from_database
-
-ImportFormat_class=ImportFormat_class
-
-Importing=Importing
-
-Importing_in_unknown_format=Importing_in_unknown_format
-
-In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.
-
-Include_abstracts=Include_abstracts
-Include_entries=Include_entries
-
-Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Include_subgroups:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups
-
-Incremental=Incremental
-
-Incremental_search=Incremental_search
-
-Incremental_search_failed._Repeat_to_search_from_top.=Incremental_search_failed._Repeat_to_search_from_top.
-
-Independent_group\:_When_selected,_view_only_this_group's_entries=Independent_group:_When_selected,_view_only_this_group's_entries
-
-Initially_show_groups_tree_expanded=Initially_show_groups_tree_expanded
-
-Input=Work_options
-
-Input_error=Input_error
-
-Insert=Insert
-
-Insert_rows=Insert_rows
-
-Insert_selected_citations_into_LyX/Kile=Insert_selected_citations_into_LyX/Kile
-
-Insert_selected_citations_into_WinEdt=Insert_selected_citations_into_WinEdt
-
-insert_string_=insert_string_
-
-Insert_URL=Insert_URL
-
-integrity=integrity
-
-#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
-Integrity_check=Integrity_check
-
-Intersection=Intersection
-
-Invalid_BibTeX_key=Invalid_BibTeX_key
-
-Invalid_date_format=Invalid_date_format
-
-Invalid_URL=Invalid_URL
-
-Inverted=Inverted
-
-is_a_standard_type.=is_a_standard_type.
-
-ISO_abbreviation=ISO_abbreviation
-
-Item_list_for_field=Item_list_for_field
-jabref=jabref
-
-JabRef_help=JabRef_help
-
-JabRef_preferences=JabRef_preferences
-
-Journal_abbreviations=Journal_abbreviations
-
-Journal_list_preview=Journal_list_preview
-
-Journal_name=Journal_name
-
-Keep=Keep
-
-Keep_both=Keep_both
-
-Keep_lower=Keep_lower
-
-Keep_upper=Keep_upper
-
-Key_bindings=Key_bindings
-
-Key_bindings_changed=Key_bindings_changed
-
-Key_generator_settings=Key_generator_settings
-
-Key_pattern=Key_pattern
-
-keys_in_database=keys_in_database
-
-#nottranslated.Toviewit,usemenu"Tools|NewBibTeXfilefromAUxfile",andlaunchtheactiononanon-existantauxfile.
-Keyword=Keyword
-
-Label=Label
-
-Language=Language
-
-Last_modified=Last_modified
-
-LaTeX_AUX_file=LaTeX_AUX_file
-Leave_file_in_its_current_directory.=Leave_file_in_its_current_directory.
-Leave_files_in_their_current_directory.=Leave_files_in_their_current_directory.
-
-Left=Left
-
-License=License
-
-Limit_to_fields=Limit_to_fields
-
-Limit_to_selected_entries=Limit_to_selected_entries
-
-Link=Link
-Link_local_file=Link_local_file
-Link_to_file_%0=Link_to_file_%0
-
-Listen_for_remote_operation_on_port=Listen_for_remote_operation_on_port
-Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)
-
-Load_session=Load_session
-
-Loading_session...=Loading_session...
-localhost=localhost
-
-Look_and_feel=Look_and_feel
-Looking_for_pdf...=Looking_for_pdf...
-lower=lower
-Main_file_directory=Main_file_directory
-
-Main_layout_file=Main_layout_file
-
-Main_PDF_directory=Main_PDF_directory
-
-Main_PS_directory=Main_PS_directory
-
-Manage=Manage
-
-Manage_custom_exports=Manage_custom_exports
-
-Manage_custom_imports=Manage_custom_imports
-Manage_external_file_types=Manage_external_file_types
-
-Manage_journal_abbreviations=Manage_journal_abbreviations
-
-Mark_entries=Mark_entries
-
-Mark_entry=Mark_entry
-
-Mark_new_entries_with_addition_date=Mark_new_entries_with_addition_date
-
-Mark_new_entries_with_owner_name=Mark_new_entries_with_owner_name
-
-Marked_selected=Marked_selected
-Memory_Stick_Mode=Memory_Stick_Mode
-
-Menu_and_label_font_size=Menu_and_label_font_size
-
-Merged_external_changes=Merged_external_changes
-
-Messages=Messages
-
-Messages_and_Hints=Hints_and_Warnings
-
-Modification_of_field=Modification_of_field
-
-Modified_group_"%0".=Modified_group_"%0".
-
-Modified_groups=Modified_groups
-
-Modified_string=Modified_string
-
-Modify=Modify
-
-modify_group=modify_group
-
-MODS=MODS
-
-Move=Move
-
-Move_down=Move_down
-
-Move_entries_in_group_selection_to_the_top=Move_entries_in_group_selection_to_the_top
-Move_external_links_to_'file'_field=Move_external_links_to_'file'_field
-Move_files_to_file_directory.=Move_files_to_file_directory
-
-move_group=move_group
-
-Move_string_down=Move_string_down
-
-Move_string_up=Move_string_up
-
-Move_up=Move_up
-
-Moved_group_"%0".=Moved_group_"%0".
-MS_Office_2007=MS_Office_2007
-MySQL=MySQL
-MySQL_database=MySQL_database
-
-Name=Name
-Name_formatter=Name_formatter
-
-Natbib_style=Natbib_style
-
-nested_aux_files=nested_aux_files
-
-New=New
-
-new=new
-
-New_BibTeX_database=New_BibTeX_database
-
-New_BibTeX_entry=New_BibTeX_entry
-
-New_BibTeX_subdatabase=New_BibTeX_subdatabase
-
-New_content=New_content
-
-New_database_created.=New_database_created.
-New_field_value=New_field_value
-
-New_file=New_file
-New_file_link_(INSERT)=New_file_link_(INSERT)
-
-New_group=New_group
-
-New_string=New_string
-
-Next_entry=Next_entry
-
-No_%0_found=No_%0_found
-
-No_actual_changes_found.=No_actual_changes_found.
-
-no_base-bibtex-file_specified=no_base-bibtex-file_specified!
-
-no_database_generated=no_database_generated
-
-No_duplicates_found=No_duplicates_found
-
-No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.
-
-
-No_entries_found_for_the_search_string_'%0'=No_entries_found_for_the_search_string_'%0'
-
-No_entries_imported.=No_entries_imported.
-
-No_entries_or_multiple_entries_selected.=No_entries_or_multiple_entries_selected.
-
-No_entries_selected=No_entries_selected
-No_entries_selected.=No_entries_selected.
-
-No_exceptions_have_ocurred.=No_exceptions_have_occurred.
-No_files_found.=No_files_found.
-
-No_GUI._Only_process_command_line_options.=No_GUI._Only_process_command_line_options.
-
-No_journal_names_could_be_abbreviated.=No_journal_names_could_be_abbreviated.
-
-No_journal_names_could_be_unabbreviated.=No_journal_names_could_be_unabbreviated.
-No_PDF_linked=No_PDF_linked
-
-No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found
-No_plugins_were_found_in_the_following_folders\:=No_plugins_were_found_in_the_following_folders:
-
-No_references_found=No_references_found
-
-No_saved_session_found.=No_saved_session_found.
-
-No_url_defined=No_url_defined
-No_XMP_metadata_found_in_=No_XMP_metadata_found_in_
-
-not=not
-
-not_found=not_found
-
-Not_saved_(empty_session)=Not_saved_(empty_session)
-
-Note_that_the_entry_causing_the_problem_has_been_selected.=Note_that_the_entry_causing_the_problem_has_been_selected.
-
-Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,
-
-Nothing_to_redo=Nothing_to_redo
-
-Nothing_to_undo=Nothing_to_undo
-
-#Thenextisusedlikein"Referencesfound:1Numberofreferencestofetch?"
-Number_of_references_to_fetch?=Number_of_references_to_fetch?
-
-occurences=occurences
-
-OK=OK
-
-Ok=OK
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?
-
-One_or_more_keys_will_be_overwritten._Continue?=One_or_more_keys_will_be_overwritten._Continue?
-Only_one_item_is_supported=Only_one_item_is_supported
-
-Open=Open
-
-Open_BibTeX_database=Open_BibTeX_database
-
-Open_database=Open_database
-
-Open_editor_when_a_new_entry_is_created=Open_editor_when_a_new_entry_is_created
-
-Open_file=Open_file
-
-Open_last_edited_databases_at_startup=Open_last_edited_databases_at_startup
-
-Open_PDF_or_PS=Open_PDF_or_PS
-
-Open_right-click_menu_with_Ctrl+left_button=Open_right-click_menu_with_Ctrl+left_button
-
-Open_URL_or_DOI=Open_URL_or_DOI
-OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
-
-Opened_database=Opened_database
-
-Opening=Opening
-
-Opening_preferences...=Opening_preferences...
-
-OpenOffice_Calc=OpenOffice_Calc
-OpenOffice_CSV=OpenOffice_CSV
-Operation_canceled.\n=Operation_canceled.\n
-Operation_not_supported=Operation_not_supported
-
-Optional_fields=Optional_fields
-
-Options=Options
-
-or=or
-
-out_of=out_of
-Output=Output
-
-Output_or_export_file=Output_or_export_file
-
-Override=Override
-
-Override_default_file_directories=Override_default_file_directories
-
-Override_default_font_settings=Override_default_font_settings
-
-override_the_bibtex_key_by_the_selected_text=override_the_bibtex_key_by_the_selected_text
-
-
-Overwrite=Overwrite
-Overwrite_existing_field_values=Overwrite_existing_field_values
-
-Overwrite_keys=Overwrite_keys
-
-pairs_processed=pairs_processed
-Password_\:=Password:
-
-Paste=Paste
-
-paste_entries=paste_entries
-
-paste_entry=paste_entry
-Paste_from_clipboard=Paste_from_clipboard
-
-Pasted=Pasted
-
-Path_to_%0_not_defined=Path_to_%0_not_defined
-
-Path_to_LatexEditor_(LEd.exe)=Path_to_LatexEditor_(LEd.exe)
-
-Path_to_LyX_pipe=Path_to_LyX_pipe
-
-Path_to_Vim=Path_to_Vim
-
-Path_to_WinEdt.exe=Path_to_WinEdt.exe
-
-PDF_directory=PDF_directory
-PDF_does_not_exist=PDF_does_not_exist
-
-Personal_journal_list=Personal_journal_list
-
-Plain_text_import=Plain_text_import
-
-Please_check_your_network_connection_to_this_machine.=Please_check_your_network_connection_to_this_machine.
-
-Please_enter_a_name_for_the_group.=Please_enter_a_name_for_the_group.
-
-Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author% [...]
-
-Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).
-
-Please_enter_the_string's_label=Please_enter_the_string's_label
-
-Please_select_an_importer=Please_select_an_importer
-
-Please_select_an_importer.=Please_select_an_importer.
-
-Please_select_exactly_one_group_to_move.=Please_select_exactly_one_group_to_move.
-Please_specify_the_=Please_specify_the_
-
-Possible_duplicate_entries=Possible_duplicate_entries
-
-Possible_duplicate_of_existing_entry._Click_to_resolve.=Possible_duplicate_of_existing_entry._Click_to_resolve.
-
-Preamble=Preamble
-
-Preferences=Preferences
-
-Preferences_recorded.=Preferences_recorded.
-
-Preview=Preview
-
-Previous_entry=Previous_entry
-
-Primary_sort_criterion=Primary_sort_criterion
-Print_Preview=Print_Preview
-Printing_Entry_Preview=Printing_Entry_Preview
-
-Problem_with_parsing_entry=Problem_with_parsing_entry
-Processing_=Processing_
-Program_output=Program_output
-
-PS_directory=PS_directory
-Push_entries_to_external_application_(%0)=Push_entries_to_external_application_(%0)
-
-Push_selection_to_Emacs=Push_selection_to_Emacs
-
-Push_selection_to_LyX/Kile=Push_selection_to_LyX/Kile
-Push_selection_to_Vim=Push_selection_to_Vim
-
-Push_selection_to_WinEdt=Push_selection_to_WinEdt
-
-Push_to_LatexEditor=Push_to_LatexEditor
-Pushed_citations_to_%0=Pushed_citations_to_%0
-
-Pushed_citations_to_Emacs=Pushed_citations_to_Emacs
-Pushed_citations_to_Vim=Pushed_citations_to_Vim
-
-Pushed_citations_to_WinEdt=Pushed_citations_to_WinEdt
-
-Pushed_the_citations_for_the_following_rows_to=Pushed_the_citations_for_the_following_rows_to
-
-Quit_JabRef=Quit_JabRef
-
-Quit_synchronization=Quit_synchronization
-
-Raw_source=Raw_source
-
-Really_delete_the_selected=Really_delete_the_selected
-
-Rearrange_tabs_alphabetically_by_title=Rearrange_tabs_alphabetically_by_title
-
-Redo=Redo
-
-Reference_database=Reference_database
-
-#Thenexttwolinesareusedlikein"Referencesfound:1Numberofreferencestofetch?"
-References_found=References_found
-
-Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Refine_supergroup:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup
-
-Refresh_view=Refresh_view
-
-Regular_Expression=Regular_Expression
-
-Remember_these_entry_types?=Remember_these_entry_types?
-
-Remote_operation=Remote_operation
-
-Remote_server_port=Remote_server_port
-
-Remove=Remove
-
-Remove_all?=Remove_all?
-
-Remove_all_subgroups=Remove_subgroups
-
-Remove_all_subgroups_of_"%0"?=Remove_all_subgroups_of_"%0"?
-
-Remove_double_braces_around_BibTeX_fields_when_loading.=Remove_double_braces_around_BibTeX_fields_when_loading.
-
-Remove_duplicates=Remove_duplicates
-
-Remove_entry_from_import=Remove_entry_from_import
-
-Remove_entry_selection_from_this_group=Remove_entry_selection_from_this_group
-
-Remove_entry_type=Remove_entry_type
-Remove_file_link_(DELETE)=Remove_file_link_(DELETE)
-
-remove_from_group=remove_from_group
-
-Remove_from_group=Remove_from_group
-
-Remove_group=Remove_group
-
-Remove_group,_keep_subgroups=Remove_group,_keep_subgroups
-
-Remove_group_"%0"?=Remove_group_"%0"?
-
-Remove_group_"%0"_and_its_subgroups?=Remove_group_"%0"_and_its_subgroups?
-
-remove_group_(keep_subgroups)=remove_group_(keep_subgroups)
-
-remove_group_and_subgroups=remove_group_and_subgroups
-
-Remove_group_and_subgroups=Remove_group_and_subgroups
-
-Remove_link=Remove_link
-
-Remove_old_entry=Remove_old_entry
-
-Remove_selected_strings=Remove_selected_strings
-
-remove_string_=remove_string_
-
-Removed_group_"%0".=Removed_group_"%0".
-
-Removed_group_"%0"_and_its_subgroups.=Removed_group_"%0"_and_its_subgroups.
-
-Removed_string=Removed_string
-
-Renamed_string=Renamed_string
-
-Replace=Replace
-
-Replace_(regular_expression)=Replace_(regular_expression)
-
-Replace_string=Replace_string
-
-Replace_with=Replace_with
-
-Replaced=Replaced
-
-Required_fields=Required_fields
-
-Reset_all=Reset_all
-Reset_file_type_definitons=Reset_file_type_definitions
-
-Resolve_strings_for_all_fields_except=Resolve_strings_for_all_fields_except
-Resolve_strings_for_standard_BibTeX_fields_only=Resolve_strings_for_standard_BibTeX_fields_only
-
-resolved=resolved
-
-Results=Results
-
-Revert_to_original_source=Revert_to_original_source
-
-Review=Review
-
-Review_changes=Review_changes
-
-Right=Right
-root=root
-
-Save=Save
-Save_all_finished.=Save_all_finished.
-
-Save_all_open_databases=Save_all_open_databases
-
-Save_before_closing=Save_before_closing
-
-Save_database=Save_database
-Save_database_as_...=Save_database_as_...
-
-Save_entries_in_their_original_order=Save_entries_in_their_original_order
-
-Save_failed=Save_failed
-
-Save_failed_during_backup_creation=Save_failed_during_backup_creation
-
-Save_failed_while_committing_changes=Save_failed_while_committing_changes
-
-Save_ordered_by_author/editor/year=Save_ordered_by_author/editor/year
-Save_selected_as_...=Save_selected_as_...
-
-Saved_database=Saved_database
-
-Saved_selected_to=Saved_selected_to
-
-Saved_session=Saved_session
-
-Saving=Saving
-Saving_all_databases...=Saving_all_databases...
-
-Saving_database=Saving_database
-
-Scan=Scan
-
-Search=Search
-
-Search_All_Fields=Search_All_Fields
-
-Search_all_fields=Search_all_fields
-
-Search_error=Search_error
-
-Search_expression=Search_expression
-
-Search_for=Search_for
-
-Search_general_fields=Search_general_fields
-
-Search_IEEEXplore=Search_IEEEXplore
-Search_IEEExplore=Search_IEEExplore
-
-Search_optional_fields=Search_optional_fields
-
-Search_required_fields=Search_required_fields
-
-Search_Specified_Field(s)=Search_Specified_Field(s)
-
-Searched_database._Global_number_of_hits=Searched_database._Global_number_of_hits
-
-Searched_database._Number_of_hits=Searched_database._Number_of_hits
-
-Searching_for_%0_file=Searching_for_%0_file
-
-Searching_for_duplicates...=Searching_for_duplicates...
-
-Searching_for_files=Searching_for_files
-
-Secondary_sort_criterion=Secondary_sort_criterion
-
-Select=Select
-
-Select_a_Zip-archive=Select_a_Zip-archive
-
-Select_action=Select_action
-
-Select_all=Select_all
-
-Select_Classpath_of_New_Importer=Select_Classpath_of_New_Importer
-
-Select_encoding=Select_encoding
-
-Select_entries_in_group_selection=Select_entries_in_group_selection
-
-Select_entry_type=Select_entry_type
-Select_external_application=Select_external_application
-
-Select_file_from_ZIP-archive=Select_file_from_ZIP-archive
-
-Select_format=Select_format
-Select_icon=Select_icon
-
-Select_matches=Select_matches
-
-Select_new_ImportFormat_Subclass=Select_new_ImportFormat_Subclass
-
-Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Select_the_tree_nodes_to_view_and_accept_or_reject_changes
-Selected_entries=Selected_entries
-
-Selector_enabled_fields=Selector_enabled_fields
-Server_Hostname_\:=Server_Hostname:
-Server_Type_\:=Server_Type:
-Set_field=Set_field
-Set_fields=Set_fields
-
-Set_general_fields=Set_general_fields
-Set_main_external_file_directory=Set_main_external_file_directory
-
-Set_table_font=Set_table_font
-
-Settings=Settings
-
-Setup_selectors=Setup_selectors
-
-Short_form=Short_form
-
-Shortcut=Shortcut
-
-Show/edit_BibTeX_source=Show/edit_BibTeX_source
-
-Show_'Firstname_Lastname'=Show_'Firstname_Lastname'
-
-Show_'Lastname,_Firstname'=Show_'Lastname,_Firstname'
-
-Show_BibTeX_source_by_default=Show_BibTeX_source_by_default
-
-Show_BibTeX_source_panel=Show_BibTeX_source_panel
-
-Show_confirmation_dialog_when_deleting_entries=Show_confirmation_dialog_when_deleting_entries
-
-Show_description=Show_description
-
-Show_dynamic_groups_in_<i>italics</i>=Show_dynamic_groups_in_<i>italics</i>
-
-Show_entries_*not*_in_group_selection=Show_entries_*not*_in_group_selection
-
-Show_file_column=Show_file_column
-
-Show_icons_for_groups=Show_icons_for_groups
-Show_last_names_only=Show_last_names_only
-
-Show_names_unchanged=Show_names_unchanged
-
-Show_one_less_rows=Show_one_less_rows
-
-Show_one_more_row=Show_one_more_row
-
-Show_optional_fields=Show_optional_field
-
-Show_PDF/PS_column=Show_PDF/PS_column
-
-Show_required_fields=Show_required_fields
-
-Show_URL/DOI_column=Show_URL/DOI_column
-
-Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered
-
-Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Show_warning_dialog_when_an_empty_BibTeX_key_is_entered
-
-Simple_HTML=Simple_HTML
-
-Size=Size
-
-Skip=Skip
-Skipped_-_No_PDF_linked=Skipped_-_No_PDF_linked
-Skipped_-_PDF_does_not_exist=Skipped_-_PDF_does_not_exist
-
-Skipped_entry.=Skipped_entry.
-
-Sort_alphabetically=Sort_alphabetically
-
-Sort_Automatically=Sort_automatically
-
-Sort_order=Sort_order
-
-sort_subgroups=sort_subgroups
-
-Sorted_all_subgroups_recursively.=Sorted_all_subgroups_recursively.
-
-Sorted_immediate_subgroups.=Sorted_immediate_subgroups.
-
-source_edit=source_edit
-Special_Name_Formatters=Special_Name_Formatters
-
-Special_table_columns=Special_table_columns
-SQL_connection_established.=SQL_connection_established.
-
-Start_incremental_search=Start_incremental_search
-
-Start_search=Start_search
-Starting_import=Starting_import
-
-Statically_group_entries_by_manual_assignment=Statically_group_entries_by_manual_assignment
-
-Status=Status
-
-Stop=Stop
-
-Store_journal_abbreviations=Store_journal_abbreviations
-
-Store_string=Store_string
-
-Store_the_following_fields_with_braces_around_capital_letters=Store_the_following_fields_with_braces_around_capital_letters
-
-Stored_entry=Stored_entry
-
-Strings=Strings
-
-Strings_for_database=Strings_for_database
-
-Subdatabase_from_aux=Subdatabase_from_aux
-
-Suggest=Suggest
-
-Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.
-
-Synchronize_%0_links=Synchronize_%0_links
-Synchronize_file_links=Synchronize_file_links
-
-Synchronizing_%0_links...=Synchronizing_%0_links...
-
-Table_appearance=Table_appearance
-
-Table_background_color=Table_background_color
-
-Table_grid_color=Table_grid_color
-
-Table_text_color=Table_text_color
-
-Tabname=Tabname
-Target_file_cannot_be_a_directory.=Target_file_cannot_be_a_directory.
-
-Tertiary_sort_criterion=Tertiary_sort_criterion
-
-Test=Test
-
-Text_Input_Area=paste_text_here
-
-The_#_character_is_not_allowed_in_BibTeX_fields=The_#_character_is_not_allowed_in_BibTeX_fields
-
-The_chosen_date_format_for_new_entries_is_not_valid=The_chosen_date_format_for_new_entries_is_not_valid
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=The_chosen_encoding_'%0'_could_not_encode_the_following_characters:_
-
-The_CiteSeer_fetch_operation_returned_zero_results.=The_CiteSeerX_fetch_operation_returned_zero_results.
-
-
-The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.
-
-the_field_<b>%0</b>=the_field_<b>%0</b>
-
-The_file<BR>'%0'<BR>has_been_modified<BR>externally!=The_file<BR>'%0'<BR>has_been_modified<BR>externally!
-
-The_group_"%0"_already_contains_the_selection.=The_group_"%0"_already_contains_the_selection.
-
-The_label_of_the_string_can_not_be_a_number.=The_label_of_the_string_can_not_be_a_number.
-
-The_label_of_the_string_can_not_contain_spaces.=The_label_of_the_string_can_not_contain_spaces.
-
-The_label_of_the_string_can_not_contain_the_'#'_character.=The_label_of_the_string_can_not_contain_the_'#'_character.
-
-The_output_option_depends_on_a_valid_import_option.=The_output_option_depends_on_a_valid_import_option.
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?
-
-The_regular_expression_<b>%0</b>_is_invalid%c=The_Regular_Expression_<b>%0</b>_is_invalid%c
-
-The_search_is_case_insensitive.=The_search_is_case_insensitive.
-
-The_search_is_case_sensitive.=The_search_is_case_sensitive.
-
-The_string_has_been_removed_locally=The_string_has_been_removed_locally
-
-There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?
-
-this_button_will_update=this_button_will_update
-This_database_was_written_using_an_older_version_of_JabRef.=This_database_was_written_using_an_older_version_of_JabRef.
-
-This_entry_has_no_BibTeX_key._Generate_key_now?=This_entry_has_no_BibTeX_key._Generate_key_now?
-
-This_entry_is_incomplete=This_entry_is_incomplete
-
-This_entry_type_cannot_be_removed.=This_entry_type_cannot_be_removed.
-
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?
-
-This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_ [...]
-
-This_group_contains_entries_in_which=This_group_contains_entries_in_which
-
-This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=This_group_contains_entries_in_which_any_field_contains_the_Regular_Expression_<b>%0</b> 
-
-This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b> 
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b> 
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=This_group_contains_entries_whose_<b>%0</b>_field_contains_the_Regular_Expression_<b>%1</b> 
-
-This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.
-This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.
-
-This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.
-This_operation_requires_at_least_one_entry.=This_operation_requires_at_least_one_entry.
-
-This_operation_requires_one_or_more_entries_to_be_selected.=This_operation_requires_one_or_more_entries_to_be_selected.
-
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?
-
-To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=To_set_up,_go_to_<B>Options_->_Manage_journal_abbreviations</B>
-
-Toggle_abbreviation=Toggle_abbreviation
-Toggle_entry_preview=Toggle_entry_preview
-Toggle_groups_interface=Toggle_groups_interface
-Toggle_search_panel=Toggle_search_panel
-
-Try_different_encoding=Try_different_encoding
-
-Type_set_to_'other'=Type_set_to_'other'
-Unabbreviate_journal_names_of_the_selected_entries=Unabbreviate_journal_names_of_the_selected_entries
-Unabbreviated_%0_journal_names.=Unabbreviated_%0_journal_names.
-
-unable_to_access_LyX-pipe=unable_to_access_LyX-pipe
-
-Unable_to_create_graphical_interface=Unable_to_create_graphical_interface
-
-Unable_to_open_file.=Unable_to_open_file.
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.
-Unable_to_read_default_icon_theme.=Unable_to_read_default_icon_theme.
-Unable_to_read_icon_theme_file=Unable_to_read_icon_theme_file
-
-unable_to_write_to=unable_to_write_to
-Undefined_file_type=Undefined_file_type
-
-Undo=Undo
-
-Union=Union
-
-Unknown_bibtex_entries=Unknown_bibtex_entries
-
-unknown_edit=unknown_edit
-
-unknown_entry_type=unknown_entry_type
-
-Unknown_export_format=Unknown_export_format
-
-Unmark_all=Unmark_all
-
-Unmark_entries=Unmark_entries
-
-Unmark_entry=Unmark_entry
-
-Unmarked_selected=Unmarked_selected
-
-Unpack_EndNote_filter_set=Unpack_EndNote_filter_set
-
-Unpacked_file.=Unpacked_file.
-
-Unsupported_version_of_class_%0\:_%1=Unsupported_version_of_class_%0:_%1
-
-untitled=untitled
-
-Up=Up
-
-Update_to_current_column_widths=Update_to_current_column_widths
-
-Updated_group_selection=Updated_group_selection
-Upgrade_external_links=Upgrade_external_links
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.
-Upgrade_file=Upgrade_file
-Upgrade_old_external_file_links_to_use_the_new_feature=Upgrade_old_external_file_links_to_use_the_new_feature
-Upgraded_links.=Upgraded_links.
-UPPER=UPPER
-Upper_Each_First=Upper_Each_First
-Upper_first=Upper_first
-
-usage=usage
-
-Use_antialiasing_font=Use_antialiasing_font
-Use_autocompletion_for_the_following_fields=Use_autocompletion_for_the_following_fields
-Use_custom_icon_theme=Use_custom_icon_theme
-Use_default_viewer=Use_default_viewer
-
-Use_inspection_window_also_when_a_single_entry_is_imported.=Use_inspection_window_also_when_a_single_entry_is_imported.
-Use_native_file_dialog=Use_native_file_dialog
-
-Use_other_look_and_feel=Use_other_look_and_feel
-Use_Regular_Expression_Search=Use_Regular_Expression_Search
-
-Use_regular_expressions=Use_Regular_Expressions
-
-Use_the_following_delimiter_character(s)=Use_the_following_delimiter_character(s)
-Username_\:=Username:
-
-Value_cleared_externally=Value_cleared_externally
-
-Value_set_externally=Value_set_externally
-
-verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid
-
-View=View
-Vim_Server_Name=Vim_Server_Name
-
-Waiting_for_ArXiv...=Waiting_for_ArXiv...
-
-Warn_about_unresolved_duplicates_when_closing_inspection_window=Warn_about_unresolved_duplicates_when_closing_inspection_window
-
-Warn_before_overwriting_existing_keys=Warn_before_overwriting_existing_keys
-
-Warning=Warning
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Warning:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message
-
-Warning_there_is_a_duplicate_key=Warning_there_is_a_duplicate_key
-
-Warnings=Warnings
-
-web_link=web_link
-
-What_do_you_want_to_do?=What_do_you_want_to_do?
-
-When_adding/removing_keywords,_separate_them_by=When_adding/removing_keywords,_separate_them_by
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.
-
-with=with
-
-Word=Word
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=Write_BibtexEntry_as_XMP-metadata_to_PDF.
-
-Write_XMP=Write_XMP
-Write_XMP-metadata=Write_XMP-metadata
-Write_XMP-metadata_for_all_PDFs_in_current_database?=Write_XMP-metadata_for_all_PDFs_in_current_database?
-Writing_XMP=Writing_XMP
-Writing_XMP_metadata...=Writing_XMP_metadata...
-Writing_XMP_metadata_for_selected_entries...=Writing_XMP_metadata_for_selected_entries...
-Writing_XMP_to_'%0'...=Writing_XMP_to_'%0'...
-
-Wrong_file_format=Wrong_file_format
-
-Wrote_XMP-metadata=Wrote_XMP-metadata
-Wrote_XMP_to_'%0'.=Wrote_XMP_to_'%0'.
-
-XMP-annotated_PDF=XMP-annotated_PDF
-XMP_Export_Privacy_Settings=XMP_Export_Privacy_Settings
-XMP_metadata=XMP_metadata
-XMP_metadata_found_in_PDF\:_%0=XMP_metadata_found_in_PDF:_%0
-You_must_restart_JabRef_for_this_to_come_into_effect.=You_must_restart_JabRef_for_this_to_come_into_effect.
-You_have_changed_the_language_setting.=You_have_changed_the_language_setting.
-
-You_have_changed_the_look_and_feel_setting.=You_have_changed_the_look_and_feel_setting.
-
-You_have_cleared_this_field._Original_value=You_have_cleared_this_field._Original_value
-
-You_have_entered_an_invalid_search_'%0'.=You_have_entered_an_invalid_search_'%0'.
-
-You_must_choose_a_file_name_to_store_journal_abbreviations=You_must_choose_a_file_name_to_store_journal_abbreviations
-
-You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.
-
-You_must_set_both_BibTeX_key_and_%0_directory=You_must_set_both_BibTeX_key_and_%0_directory
-
-Your_new_key_bindings_have_been_stored.=Your_new_key_bindings_have_been_stored.
-
-
-The_following_fetchers_are_available\:=The_following_fetchers_are_available:
-Could_not_find_fetcher_'%0'=Could_not_find_fetcher_'%0'
-Running_Query_'%0'_with_fetcher_'%1'.=Running_Query_'%0'_with_fetcher_'%1'.
-Please_wait!=Please_wait!
-Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.
-Open_SPIRES_entry=Open_SPIRES_entry
-Move/Rename_file=Move/Rename_file
-File_moved=File_moved
-Move_file_failed=Move_file_failed
-Could_not_move_file=Could_not_move_file
-Could_not_find_file_'%0'.=Could_not_find_file_'%0'.
-Move/rename_file=Move/rename_file
-Number_of_entries_successfully_imported=Number_of_entries_successfully_imported
-Import_canceled_by_user=Import_canceled_by_user
-Progress\:_%0_of_%1=Progress:_%0_of_%1
-Error_while_fetching_from_JSTOR=Error_while_fetching_from_JSTOR
-
-Fetching_Medline_by_id...=Fetching_Medline_by_id...
-
-Fetching_Medline_by_term...=Fetching_Medline_by_term...
-Medline_import_canceled=Medline_import_canceled
-Please_enter_a_valid_number=Please_enter_a_valid_number
-Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.
-An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:
-Error_while_fetching_from_Spires\:_=Error_while_fetching_from_Spires\:_
-Connect_to_external_SQL_database=Connect_to_external_SQL_database
-Export_to_external_SQL_database=Export_to_external_SQL_database
-
-Show_results_in_dialog=Show_results_in_dialog
-Global_search=Global_search
-Show_search_results_in_a_window=Show_search_results_in_a_window
-Search_results=Search_results
-Move_file_to_file_directory?=Move_file_to_file_directory?
-Rename_to_'%0'=Rename_to_'%0'
-Move_to_file_directory=Move_to_file_directory
-You_have_changed_the_menu_and_label_font_size.=You_have_changed_the_menu_and_label_font_size.
-
-Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.
-Protected_database=Protected_database
-Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Refuse_to_save_the_database_before_external_changes_have_been_reviewed.
-Database_protection=Database_protection
-Unable_to_save_database=Unable_to_save_database
-
-BibTeX_key_generator=BibTeX_key_generator
-Unable_to_open_link.=Unable_to_open_link.
-Search_JSTOR=Search_JSTOR
-Attempting_SQL_import...=Attempting_SQL_import...
-BibO_RDF=BibO_RDF
-HTML_parser=HTML_parser
-
-Move_the_keyboard_focus_to_the_entry_table=Move_the_keyboard_focus_to_the_entry_table
-MIME_type=MIME_type
-
-This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in [...]
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.
-Legacy_file_fields=Legacy_file_fields
-
-This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.
-Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Run_Fetcher,_e.g._"--fetch=Medline:cancer"
-
-The_ACM_Digital_Library=The_ACM_Digital_Library
-Reset=Reset
-
-Use_IEEE_LaTeX_abbreviations=Use_IEEE_LaTeX_abbreviations
-The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
-Search_ACM_Portal=Search_ACM_Portal
-Connection_to_ACM_Portal_failed=Connection_to_ACM_Portal_failed
-
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=When_opening_file_link,_search_for_matching_file_if_no_link_is_defined
-Settings_for_%0=Settings_for_%0
-Insert_selected_citations_into_Vim=Insert_selected_citations_into_Vim
-RIS=RIS
-
-Assign_exclusively_to_group=Assign_exclusively_to_group
-
-Bad_Request_'%0'.=Bad_Request_'%0'.
-
-Mark_entries_imported_into_an_existing_database=Mark_entries_imported_into_an_existing_database
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Unmark_all_entries_before_importing_new_entries_into_an_existing_database
-
-Forward=Forward
-Back=Back
-Sort_the_following_fields_as_numeric_fields=Sort_the_following_fields_as_numeric_fields
-Line_%0\:_Found_corrupted_BibTeX-key.=Line_%0\:_Found_corrupted_BibTeX-key.
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).
-Finished_downloading_full_text_document=Finished_downloading_full_text_document
-Unable_to_find_full_text_document_in_the_linked_web_page.=Unable_to_find_full_text_document_in_the_linked_web_page.
-Connection_error_when_trying_to_find_full_text_document.=Connection_error_when_trying_to_find_full_text_document.
-This_entry_provides_no_URL_or_DOI_links.=This_entry_provides_no_URL_or_DOI_links.
-Full_text_article_download_failed=Full_text_article_download_failed
-Update_to_current_column_order=Update_to_current_column_order
-
-Rename_field=Rename_field
-Set/clear/rename_fields=Set/clear/rename_fields
-Rename_field_to\:=Rename_field_to_\:
-Move_contents_of_a_field_into_a_field_with_a_different_name=Move_contents_of_a_field_into_a_field_with_a_different_name
-You_can_only_rename_one_field_at_a_time=You_can_only_rename_one_field_at_a_time
-
-Remove_all_broken_links=Remove_all_broken_links
-
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.
-
-Plugin_installer=Plugin_installer
-Unable_to_create_plugin_directory=Unable_to_create_plugin_directory
-Unable_to_copy_file=Unable_to_copy_file
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.
-Unable_to_create_user_plugin_directory=Unable_to_create_user_plugin_directory
-Plugin_installation_failed.=Plugin_installation_failed.
-The_same_version_of_this_plugin_is_already_installed.=The_same_version_of_this_plugin_is_already_installed.
-A_newer_version_of_this_plugin_is_already_installed.=A_newer_version_of_this_plugin_is_already_installed.
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?
-Old_versions_deleted_successfully.=Old_versions_deleted_successfully.
-
-
-Install_plugin=Install_plugin
-Download_plugin=Download_plugin
-Plugin_manager=Plugin_manager
-Delete_the_%0_selected_plugins?=Delete_the_%0_selected_plugins?
-Delete_plugins=Delete_plugins
-Delete_the_selected_plugin?=Delete_the_selected_plugin?
-Delete_plugin=Delete_plugin
-Enter_download_URL=Enter_download_URL
-Plugin_name=Plugin_name
-Version=Version
-Unknown=Unknown
-Not_loaded=Not_loaded
-Loaded=Loaded
-Could_not_determine_version_of_=Could_not_determine_version_of_
-Install_anyway?=Install_anyway?
-
-Looking_for_full_text_document...=Looking_for_full_text_document...
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.
-
-Autosave=Autosave
-Prompt_before_recovering_a_database_from_an_autosave_file=Prompt_before_recovering_a_database_from_an_autosave_file
-Autosave_interval_(minutes)=Autosave_interval_(minutes)
-Do_you_want_to_recover_the_database_from_the_autosave_file?=Do_you_want_to_recover_the_database_from_the_autosave_file?
-Recover_from_autosave=Recover_from_autosave
-%0_warnings=%0_warnings
-
-Save_in_current_table_sort_order=Save_in_current_table_sort_order
-Export_in_current_table_sort_order=Export_in_current_table_sort_order
-Export_ordered_by_author/editor/year=Export_ordered_by_author/editor/year
-Export_entries_in_their_original_order=Export_entries_in_their_original_order
-Error_opening_file_'%0'.=Error_opening_file_'%0'.
-Autosave_of_file_'%0'=Autosave_of_file_'%0'
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.
-
-
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugins_installed_in_your_user_plugin_directory_(%0):
-Plugins_installed_in_other_locations\:=Plugins_installed_in_other_locations:
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=Plugins_will_be_deleted_next_time_JabRef_starts_up.
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=Plugin_will_be_deleted_next_time_JabRef_starts_up.
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.
-Formatter_not_found\:_%0=Formatter_not_found\:_%0
-The_following_formatters_could_not_be_found=The_following_formatters_could_not_be_found
-
-Clear_inputarea=Clear_inputarea
-
-Automatically_set_file_links_for_this_entry=Automatically_set_file_links_for_this_entry
-Could_not_save,_file_locked_by_another_JabRef_instance.=Could_not_save,_file_locked_by_another_JabRef_instance.
-File_is_locked_by_another_JabRef_instance.=File_is_locked_by_another_JabRef_instance.
-Do_you_want_to_override_the_file_lock?=Do_you_want_to_override_the_file_lock?
-File_locked=File_locked
-Current_tmp_value=Current_tmp_value
-Metadata_change=Metadata_change
-Changes_have_been_made_to_the_following_metadata_elements=Changes_have_been_made_to_the_following_metadata_elements
-
-Generate_groups_for_author_last_names=Generate_groups_for_author_last_names
-Generate_groups_for_editor_last_names=Generate_groups_for_editor_last_names
-Generate_groups_from_keywords_in_a_BibTeX_field=Generate_groups_from_keywords_in_a_BibTeX_field
-Enforce_legal_characters_in_BibTeX_keys=Enforce_legal_characters_in_BibTeX_keys
-The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.
-Before_saving,_please_edit_any_strings_containing_the_#_character.=Before_saving,_please_edit_any_strings_containing_the_#_character.
-
-Save_without_backup?=Save_without_backup?
-Unable_to_create_backup=Unable_to_create_backup
-
-File_directory_is_not_set_or_does_not_exist.=File_directory_is_not_set_or_does_not_exist.
-Move_file_to_file_directory.=Move_file_to_file_directory.
-Rename_file_to=Rename_file_to
-<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)
-static_group=static_group
-includes_subgroups=includes_subgroups
-refines_supergroup=refines_supergroup
-dynamic_group=dynamic_group
-contains=contains
-search_expression=search_expression
-
-Disable_file_renaming_in_non-native_file_dialog=Disable_file_renaming_in_non-native_file_dialog
-File_dialog=File_dialog
-No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.
-
-Search_ScienceDirect=Search_ScienceDirect
-Error_while_fetching_from_ScienceDirect=Error_while_fetching_from_ScienceDirect
-
-Error_initializing_custom_export_format_from_string_'%0'=Error_initializing_custom_export_format_from_string_'%0'
-BibLaTeX_mode=BibLaTeX_mode
-Optional_fields_2=Optional_fields_2
-Please_wait=Please_wait
-Waiting_for_save_operation_to_finish=Waiting_for_save_operation_to_finish
-Resolving_duplicate_BibTeX_keys...=Resolving_duplicate_BibTeX_keys...
-Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.
-This_database_contains_one_or_more_duplicated_BibTeX_keys.=This_database_contains_one_or_more_duplicated_BibTeX_keys.
-Do_you_want_to_resolve_duplicate_keys_now?=Do_you_want_to_resolve_duplicate_keys_now?
-
-Find_and_remove_duplicate_BibTeX_keys=Find_and_remove_duplicate_BibTeX_keys
-Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Expected_syntax_for_--fetch='<name_of_fetcher>:<query>'
-Duplicate_BibTeX_key=Duplicate_BibTeX_key
-Duplicate_key=Duplicate_key
-Generate_key=Generate_key
-Import_marking_color=Import_marking_color
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.
-BibTeX_importer=BibTeX_importer
-Always_add_letter_(a,_b,_...)_to_generated_keys=Always_add_letter_(a,_b,_...)_to_generated_keys
-
-Ensure_unique_keys_using_letters_(a,_b,_...)=Ensure_unique_keys_using_letters_(a,_b,_...)
-Ensure_unique_keys_using_letters_(b,_c,_...)=Ensure_unique_keys_using_letters_(b,_c,_...)
-Entry_editor_active_background_color=Entry_editor_active_background_color
-Entry_editor_background_color=Entry_editor_background_color
-Entry_editor_font_color=Entry_editor_font_color
-Entry_editor_invalid_field_color=Entry_editor_invalid_field_color
-
-Table_and_entry_editor_colors=Table_and_entry_editor_colors
-
-An_autosave_file_was_found_for_this_database._This_could_indicate_=An_autosave_file_was_found_for_this_database._This_could_indicate_
-that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.
-General_file_directory=General_file_directory
-User-specific_file_directory=User-specific_file_directory
-Error_setting_look_and_feel=Error_setting_look_and_feel
-Search_failed\:_illegal_search_expression=Search_failed:_illegal_search_expression
-Show_ArXiv_column=Show_ArXiv_column
-<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group
-
-You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for
-Automatically_open_browse_dialog_when_creating_new_file_link=Automatically_open_browse_dialog_when_creating_new_file_link
-Import_Metadata_from\:=Import_metadata_from:
-Choose_the_source_for_the_metadata_import=Choose_the_source_for_the_metadata_import
-Create_entry_based_on_XMP_data=Create_entry_based_on_XMP_data
-Create_entry_based_on_data_fetched_from=Create_entry_based_on_data_fetched_from
-Create_blank_entry_linking_the_PDF=Create_blank_entry_linking_the_PDF
-Only_attach_PDF=Only_attach_PDF
-Mr._dLib_Metadata_Entries_Associated_With\:=Mr._dLib_Metadata_Entries_Associated_With:
-Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr._dLib_Metadata_Entries_Associated_With_PDF_File
-Title=Title
-Author(s)=Author(s)
-Published_Year=Published_Year
-No_metadata_found.=No_metadata_found.
-Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib_web_service_is_temporarily_unavailable.
-Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.
-You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.
-No_Internet_Connection.=_No_Internet_Connection.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http://jabref.sourceforge.net_or_http://www.mr-dlib.org_for_more_information_and_updates.
-Web_Service_Version_Outdated=Web_Service_Version_Outdated
-The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.
-Update_empty_fields_with_data_fetched_from=Update_empty_fields_with_data_fetched_from
-Create_New_Entry=Create_New_Entry
-Update_Existing_Entry=Update_Existing_Entry
-Mr._dLib=Mr._dLib
-More_information=More_Information
-Fetching_Metadata...=Fetching_Metadata...
-Metadata=Metadata
-Autocomplete_names_in_'Firstname_Lastname'_format_only=Autocomplete_names_in_'Firstname_Lastname'_format_only
-Autocomplete_names_in_'Lastname,_Firstname'_format_only=Autocomplete_names_in_'Lastname,_Firstname'_format_only
-Autocomplete_names_in_both_formats=Autocomplete_names_in_both_formats
-Marking_color_%0=Marking_color_%0
-The_name_'comment'_can_not_be_used_as_an_entry_type_name.=The_name_'comment'_can_not_be_used_as_an_entry_type_name.
-You_must_enter_an_integer_value_in_the_text_field_for=You_must_enter_an_integer_value_in_the_text_field_for
-File_directory=File_directory
-Send_as_email=Send_as_email
-References=References
-Sending_of_emails=Sending_of_emails
-Subject_for_sending_an_email_with_references=Subject_for_sending_an_email_with_references
-Automatically_open_folders_of_attached_files=Automatically_open_folders_of_attached_files
-Create_entry_based_on_content=Create_entry_based_on_content
-Store_choice_as_default=Store_choice_as_default
-Do_not_show_this_box_again_for_this_import=Do_not_show_this_box_again_for_this_import
-Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)
-Error_creating_email=Error_creating_email
-Could_not_open_directory=Could_not_open_directory
-Entries_added_to_an_email=Entries_added_to_an_email
-exportFormat=exportFormat
-Output_file_missing=Output_file_missing
-No_search_matches.=No_search_matches.
-The_output_option_depends_on_a_valid_input_option.=The_output_option_depends_on_a_valid_input_option.
-Default_import_style_for_drag&drop_of_PDFs=Default_import_style_for_drag&drop_of_PDFs
-Default_PDF_file_link_action=Default_PDF_file_link_action
-File_name_format_pattern=File_name_format_pattern
-PostgreSQL_database=PostgreSQL_database
-DIN_1505=DIN_1505
-Wrong_Format=Wrong_Format
-Path_to_gnuclient_or_emacsclient=Path_to_gnuclient_or_emacsclient
-Additional_parameters=Additional_parameters
-Encrypted_documents_are_not_supported=Encrypted_documents_are_not_supported
-Cite_selected_entries=Cite_selected_entries_between_parenthesis
-Cite_selected_entries_with_in-text_citation=Cite_selected_entries_with_in-text_citation
-Cite_special=Cite_special
-Extra_information_(e.g._page_number)=Extra_information_(e.g._page_number)
-Manage_citations=Manage_citations
-Problem_modifying_citation=Problem_modifying_citation
-Citation=Citation
-Context=Context
-Extra_information=Extra_information
-Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.
-Styles=Styles
-Select_style=Select_style
-This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.
-Journals=Journals
-Cite=Cite
-Cite_in-text=Cite_in-text
-Insert_empty_citation=Insert_empty_citation
-Merge_citations=Merge_citations
-Manual_connect=Manual_connect
-Select_Writer_document=Select_Writer_document
-Sync_OO_bibliography=Sync_OO_bibliography
-OpenOffice=OpenOffice
-Select_which_open_Writer_document_to_work_on=Select_which_open_Writer_document_to_work_on
-Connected_to_document=Connected_to_document
-Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)
-Cite_selected_entries_with_extra_information=Cite_selected_entries_with_extra_information
-Ensure_that_the_bibliography_is_up-to-date=Ensure_that_the_bibliography_is_up-to-date
-Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.
-Unable_to_synchronize_bibliography=Unable_to_synchronize_bibliography
-Combine_pairs_of_citations_that_are_separated_by_spaces_only=Combine_pairs_of_citations_that_are_separated_by_spaces_only
-Autodetection_failed=Autodetection_failed
-Connecting=Connecting
-Please_wait...=Please_wait...
-Unable_to_connect=Unable_to_connect
-Set_connection_parameters=Set_connection_parameters
-Path_to_OpenOffice_directory=Path_to_OpenOffice_directory
-Path_to_OpenOffice_executable=Path_to_OpenOffice_executable
-Path_to_OpenOffice_library_dir=Path_to_OpenOffice_library_dir
-Autodetect=Autodetect
-Connection_lost=Connection_lost
-The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.
-The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.
-Automatically_sync_bibliography_when_inserting_citations=Automatically_sync_bibliography_when_inserting_citations
-Look_up_BibTeX_entries_in_the_active_tab_only=Look_up_BibTeX_entries_in_the_active_tab_only
-Look_up_BibTeX_entries_in_all_open_databases=Look_up_BibTeX_entries_in_all_open_databases
-Use_in-parenthesis_citation=Use_in-parenthesis_citation
-Use_in-text_citation=Use_in-text_citation
-Autodetecting_paths...=Autodetecting_paths...
-Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.
-Could_not_find_OpenOffice_installation=Could_not_find_OpenOffice_installation
-Directories=Directories
-Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to:
-Choose_OpenOffice_executable=Choose_OpenOffice_executable
-Select_document=Select_document
-Edit_Group_Membership=Edit_Group_Membership
-PostgreSQL=PostgreSQL
-
-Highlight_Words=Highlight_Words
-JSTOR_import_cancelled=JSTOR_import_cancelled
-HTML_list=HTML_list
-Click_group_to_toggle_membership_of_selected_entries=Click_group_to_toggle_membership_of_selected_entries
-Use_EMACS_23_insertion_string=Use_EMACS_23_insertion_string
-
-Normalize_to_BibTeX_name_format=Normalize_to_BibTeX_name_format
-If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting
-Could_not_open_%0=Could_not_open_%0
-Unknown_import_format=Unknown_import_format
-Open_INSPIRE_entry=Open_INSPIRE_entry
-An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:
-Error_while_fetching_from_Inspire\:_=Error_while_fetching_from_Inspire\:_
-Web_search=Web_search
-Autocomplete_names=Autocomplete_names
-You_must_select_either_a_valid_style_file,_or_use_the_default_style.=You_must_select_either_a_valid_style_file,_or_use_the_default_style.
-Default_style=Default_style
-Choose_style_file_directly=Choose_style_file_directly
-Choose_from_a_directory=Choose_from_a_directory
-No_directory_defined_for_%0-files=No_directory_defined_for_%0-files
-Allow_file_links_relative_to_each_bib_file's_location=Allow_file_links_relative_to_each_bib_file's_location
-Style_selection=Style_selection
-The_panel_below_shows_the_definition_of_the_default_style.=The_panel_below_shows_the_definition_of_the_default_style.
-If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file
-Default_style_(author-year_citations)=Default_style_(author-year_citations)
-Default_style_(numerical_citations)=Default_style_(numerical_citations)
-No_valid_style_file_defined=No_valid_style_file_defined
-Choose_pattern=Choose_pattern
-Use_the_bib_file_location_as_primary_file_directory=Use_the_bib_file_location_as_primary_file_directory
-Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.
-Built-in_journal_list=Built-in_journal_list
-OpenOffice/LibreOffice_connection=OpenOffice/LibreOffice_connection
-You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.
-JabRef_includes_a_built-in_list_of_journal_abbreviations.=JabRef_includes_a_built-in_list_of_journal_abbreviations.
-You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.
-You_must_select_either_a_valid_style_file,_or_use_a_default_style.=You_must_select_either_a_valid_style_file,_or_use_a_default_style.
-Show=Show
-
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.
-Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http://www.bouncycastle.org/.
-This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.
-You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.
-
-First_select_entries_to_clean_up.=First_select_entries_to_clean_up.
-Cleanup_entry=Cleanup_entry
-Autogenerate_PDF_Names=Autogenerate_PDF_Names
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=Auto-generating_PDF-Names_does_not_support_undo._Continue?
-File_rename_failed_for=File_rename_failed_for
-You_have_toggled_the_BibLaTeX_mode.=You_have_toggled_the_BibLaTeX_mode.
-
-Use_full_firstname_whenever_possible=Use_full_firstname_whenever_possible
-Use_abbreviated_firstname_whenever_possible=Use_abbreviated_firstname_whenever_possible
-Use_abbreviated_and_full_firstname=Use_abbreviated_and_full_firstname
-Autocompletion_options=Autocompletion_options
-Autocomplete_after_following_number_of_characters=Autocomplete_after_following_number_of_characters
-Name_format_used_for_autocompletion=Name_format_used_for_autocompletion
-Treatment_of_first_names=Treatment_of_first_names
-No_icon_found_for_%0=No_icon_found_for_%0
-Cleanup_entries=Cleanup_entries
-Automatically_assign_new_entry_to_selected_groups=Automatically_assign_new_entry_to_selected_groups
-
-Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix
-Format_content_of_month_field_to_#mon#=Format_content_of_month_field_to_#mon#
-Ensure_that_page_ranges_are_of_the_form_num1--num2=Ensure_that_page_ranges_are_of_the_form_num1--num2
-Make_paths_of_linked_files_relative_(if_possible)=Make_paths_of_linked_files_relative_(if_possible)
-Rename_PDFs_to_given_file_name_format_pattern=Rename_PDFs_to_given_file_name_format_pattern
-Rename_only_PDFs_having_a_relative_path=Rename_only_PDFs_having_a_relative_path
-What_would_you_like_to_clean_up?=What_would_you_like_to_clean_up?
-Doing_a_cleanup_for_%0_entries...=Doing_a_cleanup_for_%0_entries...
-No_entry_needed_a_clean_up=No_entry_needed_a_clean_up
-One_entry_needed_a_clean_up=One_entry_needed_a_clean_up
-%0_entries_needed_a_clean_up=%0_entries_needed_a_clean_up
-Imported_=Imported_
-Error_importing_from_database=Error_importing_from_database
-%0_databases_will_be_imported=%0_databases_will_be_imported
-Imported_%0_databases_successfully=Imported_%0_databases_successfully
-Minimize_to_system_tray=Minimize_to_system_tray
-
-Incomplete_search_results=Incomplete_search_results
-%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.
-
-Error_downloading_file_'%0'=Error_downloading_file_'%0'
-Download_failed=Download_failed
-
-Importing_cancelled=Importing_cancelled
-There_are_no_available_databases_to_be_imported=There_are_no_available_databases_to_be_imported
-Import_from_SQL_database=Import_from_SQL_database
-<_CREATE_NEW_DATABASE_>=<_CREATE_NEW_DATABASE_>
-Remove_Selected=Remove_Selected
-SQL_Database_Exporter=SQL_Database_Exporter
-Select_target_SQL_database\:=Select_target_SQL_database:
-SQL_Database_Importer=SQL_Database_Importer
-Please_select_which_JabRef_databases_do_you_want_to_import\:=Please_select_which_JabRef_databases_do_you_want_to_import:
-
-Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.
-Attach_file=Attach_file
-Setting_all_preferences_to_default_values.=Setting_all_preferences_to_default_values.
-Resetting_preference_key_'%0'=Resetting_preference_key_'%0'
-Unknown_preference_key_'%0'=Unknown_preference_key_'%0'
-Unable_to_clear_preferences.=Unable_to_clear_preferences.
-
-Reset_preferences_(key1,key2,..._or_'all')=Reset_preferences_(key1,key2,..._or_'all')
-Find_unlinked_files=Find_unlinked_files
-Select_All=Select_All
-Unselect_All=Unselect_All
-Expand_All=Expand_All
-Collapse_All=Collapse_All
-Select_Directory=Select_Directory
-Choose_Directory=Choose_Directory
-Use_the_selected_directory_to_start_with_the_search.=Use_the_selected_directory_to_start_with_the_search.
-Browse...=Browse...
-Opens_the_file_browser.=Opens_the_file_browser.
-Scan_directory=Scan_directory
-Searches_the_selected_directory_for_unlinked_files.=Searches_the_selected_directory_for_unlinked_files.
-Starts_the_import_of_bibtex_entries.=Starts_the_import_of_BibTeX_entries.
-Leave_this_dialog.=Leave_this_dialog.
-Create_directory_based_keywords=Create_directory_based_keywords
-Creates_keywords_in_created_entrys_with_directory_pathnames=Creates_keywords_in_created_entrys_with_directory_pathnames
-Select_a_directory_where_the_search_shall_start.=Select_a_directory_where_the_search_shall_start.
-Select_file_type\:=Select_file_type:
-These_files_are_not_linked_in_the_active_database.=These_files_are_not_linked_in_the_active_database.
-Entry_type_to_be_created\:=Entry_type_to_be_created:
-Searching_file_system...=Searching_file_system...
-Importing_into_Database...=Importing_into_Database...
-Select_directory=Select_directory
-Select_files=Select_files
-Bibtex_entry_creation=BibTeX_entry_creation
-<No_selection>=<No_selection>
-Push_selection_to_TeXstudio=Push_selection_to_TeXstudio
-Path_to_TeXstudio=Path_to_TeXstudio
-Program_'%0'_not_found=Program_'%0'_not_found
-Pushed_citations_to_TeXstudio=Pushed_citations_to_TeXstudio
-Unable_to_connect_to_freecite_online_service.=Unable_to_connect_to_FreeCite_online_service.
-Parse_with_FreeCite=Parse_with_FreeCite
-Insert_selected_citations_into_TeXstudio=Insert_selected_citations_into_TeXstudio
-The_current_BibTeX_key_will_be_overwritten._Continue?=The_current_BibTeX_key_will_be_overwritten._Continue?
-Overwrite_key=Overwrite_key
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator
-How_would_you_like_to_link_to_'%0'?=How_would_you_like_to_link_to_'%0'?
-Marked_entries_as_relevant=Marked_entries_as_relevant
-Marked_entries'_quality_as_good=Marked_entries'_quality_as_good
-Set_priority=Set_priority
-no_preview_available=no_preview_available
-Enable_PDF_preview=Enable_PDF_preview
-Show_one_letter_heading_for_icon_columns=Show_one_letter_heading_for_icon_columns
-Help_on_special_fields=Help_on_special_fields
-Enable_special_fields=Enable_special_fields
-Show_rank=Show_rank
-Compact_rank=Compact_rank
-Show_quality=Show_quality
-Show_priority=Show_priority
-Show_relevance=Show_relevance
-Synchronize_with_keywords=Synchronize_with_keywords
-Write_values_of_special_fields_as_separate_fields_to_BibTeX=Write_values_of_special_fields_as_separate_fields_to_BibTeX
-You_have_changed_settings_for_special_fields.=You_have_changed_settings_for_special_fields.
-Changed_special_field_settings=Changed_special_field_settings
-Bibtex_key_patterns=Bibtex_key_patterns
-Convert_1st,_2nd,_..._to_real_superscripts=Convert_1st,_2nd,_..._to_real_superscripts
-Manage_content_selectors=Manage_content_selectors
-Dropped_comment_from_database=Dropped_comment_from_database
-Synchronized_special_fields_based_on_keywords=Synchronized_special_fields_based_on_keywords
-Clear_priority=Clear_priority
-No_priority_information=No_priority_information
-Set_priority_to_high=Set_priority_to_high
-Priority_high=Priority_high
-Set_priority_to_medium=Set_priority_to_medium
-Priority_medium=Priority_medium
-Set_priority_to_low=Set_priority_to_low
-Priority_low=Priority_low
-Priority=Priority
-Toogle_quality_assured=Toogle_quality_assured
-Quality=Quality
-Rank=Rank
-Clear_rank=Clear_rank
-No_rank_information=No_rank_information
-Set_rank_to_one_star=Set_rank_to_one_star
-One_star=One_star
-Set_rank_to_two_stars=Set_rank_to_two_stars
-Two_stars=Two_stars
-Set_rank_to_three_stars=Set_rank_to_three_stars
-Three_stars=Three_stars
-Set_rank_to_four_stars=Set_rank_to_four_stars
-Four_stars=Four_stars
-Set_rank_to_five_stars=Set_rank_to_five_stars
-Five_stars=Five_stars
-Toggle_relevance=Toggle_relevance
-Relevance=Relevance
-Manage_keywords=Manage_keywords
-Keywords_of_selected_entries=Keywords_of_selected_entries
-Update_keywords=Update_keywords
-
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Correct_the_entry,_and_reopen_editor_to_display/edit_source.
-When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above
-If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.
-To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.
-Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!
-A_string_with_that_label_already_exists=A_string_with_that_label_already_exists
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=File_has_been_updated_externally._Are_you_sure_you_want_to_save?
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').
-Use_the_following_delimiter_character(s)\:=Use_the_following_delimiter_character(s):
-Created_group_"%0".=Created_group_"%0".
-Removed_all_subgroups_of_group_"%0".=Removed_all_subgroups_of_group_"%0".
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.
-Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.
-Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message:_
-Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.
-Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.
-Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.
-Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.
-Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.
-Import_Metadata_From_PDF=Import_Metadata_From_PDF
-
-Run_HTML_converter_on_title=Run_HTML_converter_on_title
-Searching...=Searching...
-Error_fetching_from_Google_Scholar=Error_fetching_from_Google_Scholar
-You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?
-Confirm_selection=Confirm_selection
-Unknown_DOI\:_'%0'.=Unknown_DOI:_'%0'.
-Get_BibTeX_entry_from_DOI=Get_BibTeX_entry_from_DOI
-Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text
-Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case
-Import_conversions=Import_conversions
-Run_filter_on_title_keeping_the_case_of_selected_words=Run_filter_on_title_keeping_the_case_of_selected_words
-Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.
-Please_enter_a_search_string=Please_enter_a_search_string
-Please_open_or_start_a_new_database_before_searching=Please_open_or_start_a_new_database_before_searching
-An_Error_occurred_while_fetching_from_ADS_(%0)\:=An_Error_occurred_while_fetching_from_ADS_(%0):
-Error_while_fetching_from_ADS=Error_while_fetching_from_ADS
-Error_while_fetching_from_OAI2=Error_while_fetching_from_OAI2
-An_Error_occurred_while_parsing_abstract=An_Error_occurred_while_parsing_abstract
-Unknown_DiVA_entry\:_'%0'.=Unknown_DiVA_entry:_'%0'.
-Get_BibTeX_entry_from_DiVA=Get_BibTeX_entry_from_DiVA
-Log=Log
-Remove_unneccessary_$,_{,_and_}=Remove_unneccessary_$,_{,_and_}
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+
+%0_contains_the_Regular_Expression_<b>%1</b>=%0%0 contains_the_Regular_Expression_<b>%1</b>
+
+%0_contains_the_term_<b>%1</b>=%0 contains_the_term_<b>%1</b>
+
+%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_doesn't_contain_the_Regular_Expression_<b>%1</b>
+
+%0_doesn't_contain_the_term_<b>%1</b>=%0_doesn't_contain_the_term_<b>%1</b>
+
+%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_doesn't_match_the_Regular_Expression_<b>%1</b>
+
+%0_doesn't_match_the_term_<b>%1</b>=%0_doesn't_match_the_term_<b>%1</b>
+
+%0_export_successful=%0_export_successful
+
+%0_field_set=%0_field_set
+
+%0_matches_the_Regular_Expression_<b>%1</b>=%0_matches_the_Regular_Expression_<b>%1</b>
+
+%0_matches_the_term_<b>%1</b>=%0_matches_the_term_<b>%1</b>
+
+<field_name>=<field_name>
+<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>
+
+<no_field>=<no_field>
+
+<select>=<select>
+
+<select_word>=<select_word>
+A_string_with_this_label_already_exists=A_string_with_that_label_already_exists
+Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)
+Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)
+
+Abbreviate_names=Abbreviate_names
+Abbreviated_%0_journal_names.=Abbreviated_%0_journal_names.
+
+Abbreviation=Abbreviation
+
+About_JabRef=About_JabRef
+
+Abstract=Abstract
+
+Accept=Accept
+
+Accept_change=Accept_change
+
+Action=Action
+
+Add=Add
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.
+
+add_entries_to_group=add_entries_to_group
+
+Add_entry_selection_to_this_group=Add_entry_selection_to_this_group
+
+Add_from_folder=Add_from_folder
+
+Add_from_jar=Add_from_jar
+
+add_group=add_group
+
+Add_Group=Add_group
+
+Add_new=Add_new
+
+Add_Subgroup=Add_subgroup
+
+Add_to_group=Add_to_group
+
+Added_group_"%0".=Added_group_"%0".
+
+Added_new=Added_new
+
+Added_string=Added_string
+
+Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>& [...]
+
+Advanced=Advanced
+All_custom_file_types_will_be_lost._Proceed?=All_custom_file_types_will_be_lost._Proceed?
+
+All_Entries=All_Entries
+
+All_entries=All_entries
+All_entries_of_this_type_will_be_declared_typeless._Continue?=All_entries_of_this_type_will_be_declared_typeless._Continue?
+
+All_fields=All_fields
+
+All_subgroups_(recursively)=All_subgroups_(recursively)
+
+Allow_editing_in_table_cells=Allow_editing_in_table_cells
+An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=An_Error_occurred_while_fetching_from_OAI2_source_(%0):
+An_Exception_ocurred_while_accessing_'%0'=An_Exception_occurred_while_accessing_'%0'
+An_SAXException_ocurred_while_parsing_'%0'\:=An_SAXException_occurred_while_parsing_'%0':
+
+and= and
+and_inside_the_JabRef-jar\:=and_inside_the_JabRef-jar:
+
+and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.
+
+any_field_that_matches_the_regular_expression_<b>%0</b>=any_field_that_matches_the_Regular_Expression_<b>%0</b>
+
+Appearance=Appearance
+
+Append=Append
+Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database
+
+Append_database=Append_database
+
+append_the_selected_text_to_bibtex_key=append_the_selected_text_to_bibtex_key
+Application=Application
+
+Apply=Apply
+
+Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Arguments_passed_on_to_running_JabRef_instance._Shutting_down.
+
+Assign_entry_selection_exclusively_to_this_group=Assign_entry_selection_exclusively_to_this_group
+
+Assign_new_file=Assign_new_file
+
+Assign_the_original_group's_entries_to_this_group?=Assign_the_original_group's_entries_to_this_group?
+
+Assigned_%0_entries_to_group_"%1".=Assigned_%0_entries_to_group_"%1".
+
+Assigned_1_entry_to_group_"%0".=Assigned_1_entry_to_group_"%0".
+At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.
+
+Attach_%0_file=Attach_%0_file
+
+Attach_URL=Attach_URL
+
+Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.
+Attempting_SQL_export...=Attempting_SQL_export...
+
+Auto=Auto
+
+Autodetect_format=Autodetect_format
+
+Autogenerate_BibTeX_key=Autogenerate_BibTeX_key
+Autogenerate_BibTeX_keys=Autogenerate_BibTeX_keys
+
+Autogenerate_groups=Autogenerate_groups
+
+autogenerate_keys=autogenerate_keys
+Autolink_files_with_names_starting_with_the_BibTeX_key=Autolink_files_with_names_starting_with_the_BibTeX_key
+
+Autolink_only_files_that_match_the_BibTeX_key=Autolink_only_files_that_match_the_BibTeX_key
+
+Automatically_create_groups=Automatically_create_groups
+
+Automatically_create_groups_for_database.=Automatically_create_groups_for_database.
+
+Automatically_created_groups=Automatically_created_groups
+
+Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups
+
+Automatically_remove_exact_duplicates=Automatically_remove_exact_duplicates
+
+Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups
+
+Autoset=Autoset
+
+Autoset_%0_field=Autoset_%0_field
+
+Autoset_%0_links._Allow_overwriting_existing_links.=Autoset_%0_links._Allow_overwriting_existing_links.
+
+Autoset_%0_links._Do_not_overwrite_existing_links.=Autoset_%0_links._Do_not_overwrite_existing_links.
+Autoset_external_links=Autoset_external_links
+Autosetting_links=Autosetting_links
+
+AUX_file_import=AUX_file_import
+
+Available_export_formats=Available_export_formats
+
+Available_fields=Allowed_BibTeX_fields
+
+Available_import_formats=Available_import_formats
+
+Background_color_for_optional_fields=Background_color_for_optional_fields
+
+Background_color_for_required_fields=Background_color_for_required_fields
+
+Backup_old_file_when_saving=Backup_old_file_when_saving
+Beta_version=Beta_version
+
+Bibkey_to_filename_conversion=Bibkey_to_filename_conversion
+
+BibTeX_key=BibTeX_key
+
+BibTeX_key_is_unique.=BibTeX_key_is_unique.
+
+BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file
+
+BibTeX_source=BibTeX_source
+
+BibTeXML=BibTeXML
+
+Binding=Binding
+Broken_link=Broken_link
+
+Browse=Browse
+
+by=by
+
+Calling_external_viewer...=Calling_external_viewer...
+
+Cancel=Cancel
+
+Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?
+
+Cannot_merge_this_change=Cannot_merge_this_change
+
+Cannot_move_group_"%0"_down.=Cannot_move_group_"%0"_down.
+
+Cannot_move_group_"%0"_left.=Cannot_move_group_"%0"_left.
+
+Cannot_move_group_"%0"_right.=Cannot_move_group_"%0"_right.
+
+Cannot_move_group_"%0"_up.=Cannot_move_group_"%0"_up.
+
+case_insensitive=case_insensitive
+
+case_sensitive=case_sensitive
+
+Case_sensitive=Case_sensitive
+
+change_assignment_of_entries=change_assignment_of_entries
+
+Change_case=Change_case
+
+Change_entry_type=Change_entry_type
+Change_file_type=Change_file_type
+
+change_key=change_key
+
+Change_of_Grouping_Method=Change_of_Grouping_Method
+
+change_preamble=change_preamble
+
+change_string_content=change_string_content
+
+change_string_name=change_string_name
+Change_table_column_and_General_fields_settings_to_use_the_new_feature=Change_table_column_and_General_fields_settings_to_use_the_new_feature
+
+change_type=change_type
+
+changed_=changed_
+
+Changed_font_settings=Changed_font_settings
+
+Changed_language_settings=Changed_language_settings
+
+Changed_look_and_feel_settings=Changed_look_and_feel_settings
+
+Changed_preamble=Changed_preamble
+
+Changed_type_to=Changed_type_to
+
+Characters_to_ignore=Characters_to_ignore
+
+Check_existing_%0_links=Check_existing_%0_links
+
+Check_links=Check_links
+
+Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.
+Cite_command=Cite_command
+
+Class_name=Class_name
+
+Clear=Clear
+
+clear_all_groups=clear_all_groups
+
+Clear_field=Clear_field
+Clear_fields=Clear_fields
+
+Clear_highlight=Clear_highlight
+
+Close=Close
+
+Close_dialog=Close_dialog
+
+Close_the_current_database=Close_the_current_database
+
+Close_the_help_window=Close_the_help_window
+
+Close_window=Close_window
+
+Closed_database=Closed_database
+
+Collapse_subtree=Collapse_subtree
+
+Color_codes_for_required_and_optional_fields=Color_codes_for_required_and_optional_fields
+
+Color_for_marking_incomplete_entries=Color_for_marking_incomplete_entries
+
+Column_width=Column_width
+
+Command_line_id=Command_line_id
+
+Complete_record=Complete_record
+Connect=Connect
+Connect_to_SQL_database=Connect_to_SQL_database
+Connect_to_SQL_Database=Connect_to_SQL_Database
+Connection_to_IEEEXplore_failed=Connection_to_IEEEXplore_failed
+
+Contained_in=Contained_in
+
+Content=Content
+
+Copied=Copied
+
+Copied_cell_contents=Copied_cell_contents
+
+Copied_key=Copied_key
+
+Copied_keys=Copied_keys
+
+Copy=Copy
+
+Copy_BibTeX_key=Copy_BibTeX_key
+Copy_file_to_file_directory.=Copy_file_to_file_directory.
+Copy_files_to_file_directory.=Copy_files_to_file_directory.
+
+Copy_to_clipboard=Copy_to_clipboard
+
+Could_not_call_executable=Could_not_call_executable
+
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').
+
+Could_not_connect_to_host_=Could_not_connect_to_host_
+Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.
+
+Could_not_export_file=Could_not_export_file
+
+Could_not_export_preferences=Could_not_export_preferences
+
+Could_not_find_a_suitable_import_format.=Could_not_find_a_suitable_import_format.
+Could_not_find_directory_for_%0-files\:_%1=Could_not_find_directory_for_%0-files:_%1
+Could_not_find_image_file=Could_not_find_image_file
+
+Could_not_find_layout_file=Could_not_find_layout_file
+
+Could_not_import_preferences=Could_not_import_preferences
+
+Could_not_instantiate_%0=Could_not_instantiate_%0
+Could_not_instantiate_%0_%1=Could_not_instantiate_%0_%1
+Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?
+Could_not_open_link=Could_not_open_link
+
+Could_not_parse_number_of_hits=Could_not_parse_number_of_hits
+Could_not_print_preview=Could_not_print_preview
+
+Could_not_run_the_'vim'_program.=Could_not_run_the_'vim'_program.
+
+Could_not_save_file=Could_not_save_file
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Could_not_save_file._Character_encoding_'%0'_is_not_supported.
+
+Create_group=Create_group
+
+Created_groups.=Created_groups.
+
+crossreferenced_entries_included=crossreferenced_entries_included
+
+Current_content=Current_content
+
+Current_value=Current_value
+
+Custom_entry_types=Custom_entry_types
+
+Custom_entry_types_found_in_file=Custom_entry_types_found_in_file
+Custom_icon_theme=Custom_icon_theme
+Custom_icon_theme_file=Custom_icon_theme_file
+
+Custom_importers=Custom_importers
+
+Customize_entry_types=Customize_entry_types
+
+Customize_key_bindings=Customize_key_bindings
+
+Cut=Cut
+
+cut_entries=cut_entries
+
+cut_entry=cut_entry
+
+Cut_pr=Cut
+Database_\:=Database:
+
+Database_encoding=Database_encoding
+
+Database_has_changed._Do_you_want_to_save_before_closing?=Database_has_changed._Do_you_want_to_save_before_closing?
+
+Database_properties=Database_properties
+
+Date_format=Date_format
+
+Default=Default
+
+Default_encoding=Default_encoding
+
+Default_grouping_field=Default_grouping_field
+
+Default_look_and_feel=Default_look_and_feel
+
+Default_pattern=Default_pattern
+
+Default_sort_criteria=Default_sort_criteria
+Define_'%0'=Define_'%0'
+
+Delete=Delete
+
+Delete_custom_format=Delete_custom_format
+
+delete_entries=delete_entries
+
+Delete_entry=Delete_entry
+
+delete_entry=delete_entry
+
+Delete_multiple_entries=Delete_multiple_entries
+
+Delete_rows=Delete_rows
+
+Delete_strings=Delete_strings
+
+Deleted=Deleted
+
+Delimit_fields_with_semicolon,_ex.=Delimit_fields_with_semicolon,_ex.
+
+Descending=Descending
+
+Description=Description
+
+Deselect_all=Deselect_all
+Deselect_all_duplicates=Deselect_all_duplicates
+
+Details=Details
+
+Disable_entry_editor_when_multiple_entries_are_selected=Disable_entry_editor_when_multiple_entries_are_selected
+
+Disable_this_confirmation_dialog=Disable_this_confirmation_dialog
+
+Disable_this_warning_dialog=Disable_this_warning_dialog
+
+Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.
+
+Display_all_error_messages=Display_all_error_messages
+
+Display_help_on_command_line_options=Display_help_on_command_line_options
+
+Display_imported_entries_in_an_inspection_window_before_they_are_added.=Display_imported_entries_in_an_inspection_window_before_they_are_added.
+
+Display_only_entries_belonging_to_all_selected_groups.=Display_only_entries_belonging_to_all_selected_groups.
+Display_version=Display_version
+
+Displaying_no_groups=Displaying_no_groups
+
+Do_not_abbreviate_names=Do_not_abbreviate_names
+
+Do_not_autoset=Do_not_autoset
+
+Do_not_import_entry=Do_not_import_entry
+
+Do_not_open_any_files_at_startup=Do_not_open_any_files_at_startup
+
+Do_not_overwrite_existing_keys=Do_not_overwrite_existing_keys
+Do_not_show_splash_window_at_startup=Do_not_show_splash_window_at_startup
+Do_not_show_these_options_in_the_future=Do_not_show_these_options_in_the_future
+
+Do_not_wrap_the_following_fields_when_saving=Do_not_wrap_the_following_fields_when_saving
+Do_not_write_the_following_fields_to_XMP_Metadata\:=Do_not_write_the_following_fields_to_XMP_Metadata:
+
+Do_you_want_JabRef_to_do_the_following_operations?=Do_you_want_JabRef_to_do_the_following_operations?
+
+DocBook=DocBook
+
+Down=Down
+
+Download=Download
+
+Download_completed=Download_completed
+
+Download_file=Download_file
+
+Downloading...=Downloading...
+Drag_and_Drop_Error=Drag_and_Drop_Error
+Drop_%0=Drop_%0
+
+duplicate_BibTeX_key=duplicate_BibTeX_key
+
+Duplicate_BibTeX_key.=Duplicate_BibTeX_key.
+
+Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.
+
+Duplicate_Key_Warning=Duplicate_Key_Warning
+
+Duplicate_pairs_found=Duplicate_pairs_found
+
+duplicate_removal=duplicate_removal
+
+Duplicate_string_name=Duplicate_string_name
+
+Duplicates_found=Duplicates_found
+
+Duplicates_removed=Duplicates_removed
+
+Dynamic_groups=Dynamic_groups
+
+Dynamically_group_entries_by_a_free-form_search_expression=Dynamically_group_entries_by_a_free-form_search_expression
+
+Dynamically_group_entries_by_searching_a_field_for_a_keyword=Dynamically_group_entries_by_searching_a_field_for_a_keyword
+
+Each_line_must_be_on_the_following_form=Each_line_must_be_on_the_following_form
+
+Edit=Edit
+
+Edit_custom_export=Edit_custom_export
+Edit_entry=Edit_entry
+Edit_file_link=Edit_file_link
+Edit_file_type=Edit_file_type
+
+Edit_group=Edit_Group
+
+Edit_journal=Edit_journal
+
+Edit_preamble=Edit_preamble
+Edit_strings=Edit_strings
+Editor_options=Editor_options
+
+empty_BibTeX_key=empty_BibTeX_key
+
+Empty_BibTeX_key.=Empty_BibTeX_key.
+
+Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.
+
+empty_database=empty_database
+
+Enable_source_editing=Enable_source_editing
+Enable_word/name_autocompletion=Enable_word/name_autocompletion
+
+Endnote=Endnote
+
+Enter_URL=Enter_URL
+
+Enter_URL_to_download=Enter_URL_to_download
+
+entries=entries
+
+Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.
+
+Entries_exported_to_clipboard=Entries_exported_to_clipboard
+
+entries_have_undefined_BibTeX_key=entries_have_undefined_BibTeX_key
+
+entries_into_new_database=entries_into_new_database
+
+entry=entry
+
+Entry_editor=Entry_editor
+
+Entry_in_current_database=Entry_in_current_database
+
+Entry_in_import=Entry_in_import
+
+Entry_preview=Entry_preview
+
+Entry_table=Entry_table
+
+Entry_table_columns=Entry_table_columns
+
+Entry_type=Entry_type
+
+Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters
+
+Entry_types=Entry_types
+
+Error=Error
+Error\:_=Error:_
+Error_converting_Bibtex_to_XMP\:_%0=Error_converting_Bibtex_to_XMP:_%0
+Error_converting_XMP_to_'%0'...=Error_converting_XMP_to_'%0'...
+Error_exporting_to_clipboard=Error_exporting_to_clipboard
+
+##Error:_check_your_External_viewer_settings_in_Preferences=Error:_check_your_External_viewer_settings_in_Preferences
+Error_in_field=Error_in_field
+Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.
+Error_occured_when_parsing_entry=Error_occurred_when_parsing_entry
+
+Error_opening_file=Error_opening_file
+
+Error_setting_field=Error_setting_field
+Error_while_converting_BibtexEntry_to_XMP_%0=Error_while_converting_BibtexEntry_to_XMP_%0
+Error_while_downloading_file\:=Error_while_downloading_file:
+Error_while_fetching_from_OIA2=Error_while_fetching_from_OIA2
+Error_while_writing=Error_while_writing
+Error_writing_to_%0_file(s).=Error_writing_to_%0_file(s).
+Error_writing_XMP_to_file\:_%0=Error_writing_XMP_to_file:_%0
+
+
+Establishing_SQL_connection...=Establishing_SQL_connection...
+Exceptions=Exceptions
+
+Existing_file=Existing_file
+
+exists._Overwrite_file?=exists._Overwrite_file?
+exists._Overwrite?=exists._Overwrite?
+
+Expand_subtree=Expand_subtree
+
+#previousentrynottranslated.Toviewit,openGroupinterfaceandclickonthe"newgroup"button
+Export=Export
+
+Export_name=Export_name
+
+Export_preferences=Export_preferences
+
+Export_preferences_to_file=Export_preferences_to_file
+
+Export_properties=Export_properties
+
+Export_to_clipboard=Export_to_clipboard
+Export_to_SQL_database=Export_to_SQL_database
+
+Exporting=Exporting
+Extension=Extension
+
+External_changes=External_changes
+
+External_file_links=External_file_links
+
+External_files=External_files
+
+External_programs=External_programs
+
+External_viewer_called=External_viewer_called
+
+Failed_to_read_groups_data_(unsupported_version\:_%0)=Failed_to_read_groups_data_(unsupported_version:_%0)
+
+Fetch=Fetch
+
+Field=Field
+
+field=field
+
+#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
+Field_content=Field_content
+
+Field_name=Field_name
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters
+
+Field_sizes=Field_sizes
+Field_to_filter=Field_to_filter
+
+Field_to_group_by=Field_to_group_by
+
+Fields=Fields
+
+File=File
+
+file=file
+
+File_'%0'_is_already_open.=File_'%0'_is_already_open.
+
+File_'%0'_not_found=File_'%0'_not_found
+
+File_changed=File_changed
+File_directory_is_'%0'\:=File_directory_is_'%0':
+
+File_directory_is_not_set_or_does_not_exist!=File_directory_is_not_set_or_does_not_exist!
+File_download=File_download
+File_exists=File_exists
+
+File_extension=File_extension
+File_has_been_updated_externally._What_do_you_want_to_do?=File_has_been_updated_externally._What_do_you_want_to_do?
+
+File_not_found=File_not_found
+File_type=File_type
+
+File_updated_externally=File_updated_externally
+
+filename=filename
+
+Files_opened=Files_opened
+
+Filter=Filter
+
+Finished_autosetting_external_links.=Finished_autosetting_external_links.
+
+Finished_synchronizing_%0_links._Entries_changed%c_%1.=Finished_synchronizing_%0_links._Entries_changed%c_%1.
+Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Finished_writing_XMP-metadata._Wrote_to_%0_file(s).
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).
+
+First_select_the_entries_you_want_keys_to_be_generated_for.=First_select_the_entries_you_want_keys_to_be_generated_for.
+
+Fit_table_horizontally_on_screen=Fit_table_horizontally_on_screen
+
+Float=Float
+Float_marked_entries=Float_marked_entries
+
+Font_Family=Font_Family
+
+Font_Preview=Font_Preview
+
+Font_Size=Font_Size
+
+Font_Style=Font_Style
+
+FontSelector=FontSelector
+
+for=for
+
+Format_of_author_and_editor_names=Format_of_author_and_editor_names
+Format_String=Format_String
+
+Format_used=Format_used
+Formatter_Name=Formatter_Name
+
+Formatter_not_found=Formatter_not_found
+
+found=found
+Found_%0_plugin(s)=Found_%0_plugin(s)
+
+found_in_aux_file=found_in_aux_file
+
+Full_name=Full_name
+
+General=General
+
+General_fields=General_fields
+
+Generate=Generate
+
+Generate_BibTeX_key=Generate_BibTeX_key
+
+Generate_keys=Generate_keys
+
+Generate_keys_before_saving_(for_entries_without_a_key)=Generate_keys_before_saving_(for_entries_without_a_key)
+Generate_keys_for_imported_entries=Generate_keys_for_imported_entries
+
+Generate_now=Generate_now
+
+Generated_BibTeX_key_for=Generated_BibTeX_key_for
+
+Generating_BibTeX_key_for=Generating_BibTeX_key_for
+
+Grab=Grab
+
+Gray_out_entries_not_in_group_selection=Gray_out_entries_not_in_group_selection
+
+Gray_out_non-hits=Gray_out_non-hits
+
+Gray_out_non-matching_entries=Gray_out_non-matching_entries
+
+Group_properties=Group_properties
+
+grouping_may_not_work_for_this_entry=grouping_may_not_work_for_this_entry
+
+Groups=Groups
+
+Harvard_RTF=Harvard_RTF
+
+Have_you_chosen_the_correct_package_path?=Have_you_chosen_the_correct_package_path?
+
+Help=Help
+
+Help_contents=Help_contents
+
+Help_on_groups=Help_on_groups
+
+Help_on_key_patterns=Help_on_key_patterns
+Help_on_Preview_Settings=Help_on_Preview_Settings
+Help_on_Regular_Expression_Search=Help_on_Regular_Expression_Search
+
+Hide_non-hits=Hide_non-hits
+
+Hide_non-matching_entries=Hide_non-matching_entries
+
+Hierarchical_context=Hierarchical_context
+
+Highlight=Highlight
+Highlight_groups_matching_all_selected_entries=Highlight_groups_matching_all_selected_entries
+Highlight_groups_matching_any_selected_entry=Highlight_groups_matching_any_selected_entry
+
+Highlight_overlapping_groups=Highlight_overlapping_groups
+
+Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>
+
+HTML=HTML
+HTML_table=HTML_table
+HTML_table_(with_Abstract_&_BibTeX)=HTML_table_(with_Abstract_&_BibTeX)
+Icon=Icon
+
+Ignore=Ignore
+
+Immediate_subgroups=Immediate_subgroups
+
+Import=Import
+
+Import_and_keep_old_entry=Import_and_keep_old_entry
+
+Import_and_remove_old_entry=Import_and_remove_old_entry
+
+Import_entries=Import_entries
+
+Import_failed=Import_failed
+
+Import_file=Import_file
+
+Import_group_definitions=Import_group_definitions
+
+Import_name=Import_name
+
+Import_preferences=Import_preferences
+
+Import_preferences_from_file=Import_preferences_from_file
+
+Import_strings=Import_strings
+
+Import_to_open_tab=Import_to_open_tab
+
+Import_word_selector_definitions=Import_word_selector_definitions
+
+Imported_database=Imported_database
+
+Imported_entries=Imported_entries
+
+Imported_from_database=Imported_from_database
+
+ImportFormat_class=ImportFormat_class
+
+Importing=Importing
+
+Importing_in_unknown_format=Importing_in_unknown_format
+
+In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.
+
+Include_abstracts=Include_abstracts
+Include_entries=Include_entries
+
+Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Include_subgroups:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups
+
+Incremental=Incremental
+
+Incremental_search=Incremental_search
+
+Incremental_search_failed._Repeat_to_search_from_top.=Incremental_search_failed._Repeat_to_search_from_top.
+
+Independent_group\:_When_selected,_view_only_this_group's_entries=Independent_group:_When_selected,_view_only_this_group's_entries
+
+Initially_show_groups_tree_expanded=Initially_show_groups_tree_expanded
+
+Input=Work_options
+
+Input_error=Input_error
+
+Insert=Insert
+
+Insert_rows=Insert_rows
+
+Insert_selected_citations_into_LyX/Kile=Insert_selected_citations_into_LyX/Kile
+
+Insert_selected_citations_into_WinEdt=Insert_selected_citations_into_WinEdt
+
+insert_string_=insert_string_
+
+Insert_URL=Insert_URL
+
+integrity=integrity
+
+#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
+Integrity_check=Integrity_check
+
+Intersection=Intersection
+
+Invalid_BibTeX_key=Invalid_BibTeX_key
+
+Invalid_date_format=Invalid_date_format
+
+Invalid_URL=Invalid_URL
+
+Inverted=Inverted
+
+is_a_standard_type.=is_a_standard_type.
+
+ISO_abbreviation=ISO_abbreviation
+
+Item_list_for_field=Item_list_for_field
+jabref=jabref
+
+JabRef_help=JabRef_help
+
+JabRef_preferences=JabRef_preferences
+
+Journal_abbreviations=Journal_abbreviations
+
+Journal_list_preview=Journal_list_preview
+
+Journal_name=Journal_name
+
+Keep=Keep
+
+Keep_both=Keep_both
+
+Keep_lower=Keep_lower
+
+Keep_upper=Keep_upper
+
+Key_bindings=Key_bindings
+
+Key_bindings_changed=Key_bindings_changed
+
+Key_generator_settings=Key_generator_settings
+
+Key_pattern=Key_pattern
+
+keys_in_database=keys_in_database
+
+#nottranslated.Toviewit,usemenu"Tools|NewBibTeXfilefromAUxfile",andlaunchtheactiononanon-existantauxfile.
+Keyword=Keyword
+
+Label=Label
+
+Language=Language
+
+Last_modified=Last_modified
+
+LaTeX_AUX_file=LaTeX_AUX_file
+Leave_file_in_its_current_directory.=Leave_file_in_its_current_directory.
+Leave_files_in_their_current_directory.=Leave_files_in_their_current_directory.
+
+Left=Left
+
+License=License
+
+Limit_to_fields=Limit_to_fields
+
+Limit_to_selected_entries=Limit_to_selected_entries
+
+Link=Link
+Link_local_file=Link_local_file
+Link_to_file_%0=Link_to_file_%0
+
+Listen_for_remote_operation_on_port=Listen_for_remote_operation_on_port
+Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)
+
+Load_session=Load_session
+
+Loading_session...=Loading_session...
+localhost=localhost
+
+Look_and_feel=Look_and_feel
+Looking_for_pdf...=Looking_for_pdf...
+lower=lower
+Main_file_directory=Main_file_directory
+
+Main_layout_file=Main_layout_file
+
+Main_PDF_directory=Main_PDF_directory
+
+Main_PS_directory=Main_PS_directory
+
+Manage=Manage
+
+Manage_custom_exports=Manage_custom_exports
+
+Manage_custom_imports=Manage_custom_imports
+Manage_external_file_types=Manage_external_file_types
+
+Manage_journal_abbreviations=Manage_journal_abbreviations
+
+Mark_entries=Mark_entries
+
+Mark_entry=Mark_entry
+
+Mark_new_entries_with_addition_date=Mark_new_entries_with_addition_date
+
+Mark_new_entries_with_owner_name=Mark_new_entries_with_owner_name
+
+Marked_selected=Marked_selected
+Memory_Stick_Mode=Memory_Stick_Mode
+
+Menu_and_label_font_size=Menu_and_label_font_size
+
+Merged_external_changes=Merged_external_changes
+
+Messages=Messages
+
+Messages_and_Hints=Hints_and_Warnings
+
+Modification_of_field=Modification_of_field
+
+Modified_group_"%0".=Modified_group_"%0".
+
+Modified_groups=Modified_groups
+
+Modified_string=Modified_string
+
+Modify=Modify
+
+modify_group=modify_group
+
+MODS=MODS
+
+Move=Move
+
+Move_down=Move_down
+
+Move_entries_in_group_selection_to_the_top=Move_entries_in_group_selection_to_the_top
+Move_external_links_to_'file'_field=Move_external_links_to_'file'_field
+Move_files_to_file_directory.=Move_files_to_file_directory
+
+move_group=move_group
+
+Move_string_down=Move_string_down
+
+Move_string_up=Move_string_up
+
+Move_up=Move_up
+
+Moved_group_"%0".=Moved_group_"%0".
+MS_Office_2007=MS_Office_2007
+MySQL=MySQL
+MySQL_database=MySQL_database
+
+Name=Name
+Name_formatter=Name_formatter
+
+Natbib_style=Natbib_style
+
+nested_aux_files=nested_aux_files
+
+New=New
+
+new=new
+
+New_BibTeX_database=New_BibTeX_database
+
+New_BibTeX_entry=New_BibTeX_entry
+
+New_BibTeX_subdatabase=New_BibTeX_subdatabase
+
+New_content=New_content
+
+New_database_created.=New_database_created.
+New_field_value=New_field_value
+
+New_file=New_file
+New_file_link_(INSERT)=New_file_link_(INSERT)
+
+New_group=New_group
+
+New_string=New_string
+
+Next_entry=Next_entry
+
+No_%0_found=No_%0_found
+
+No_actual_changes_found.=No_actual_changes_found.
+
+no_base-bibtex-file_specified=no_base-bibtex-file_specified!
+
+no_database_generated=no_database_generated
+
+No_duplicates_found=No_duplicates_found
+
+No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.
+
+
+No_entries_found_for_the_search_string_'%0'=No_entries_found_for_the_search_string_'%0'
+
+No_entries_imported.=No_entries_imported.
+
+No_entries_or_multiple_entries_selected.=No_entries_or_multiple_entries_selected.
+
+No_entries_selected=No_entries_selected
+No_entries_selected.=No_entries_selected.
+
+No_exceptions_have_ocurred.=No_exceptions_have_occurred.
+No_files_found.=No_files_found.
+
+No_GUI._Only_process_command_line_options.=No_GUI._Only_process_command_line_options.
+
+No_journal_names_could_be_abbreviated.=No_journal_names_could_be_abbreviated.
+
+No_journal_names_could_be_unabbreviated.=No_journal_names_could_be_unabbreviated.
+No_PDF_linked=No_PDF_linked
+
+No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found
+No_plugins_were_found_in_the_following_folders\:=No_plugins_were_found_in_the_following_folders:
+
+No_references_found=No_references_found
+
+No_saved_session_found.=No_saved_session_found.
+
+No_url_defined=No_url_defined
+No_XMP_metadata_found_in_=No_XMP_metadata_found_in_
+
+not=not
+
+not_found=not_found
+
+Not_saved_(empty_session)=Not_saved_(empty_session)
+
+Note_that_the_entry_causing_the_problem_has_been_selected.=Note_that_the_entry_causing_the_problem_has_been_selected.
+
+Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,
+
+Nothing_to_redo=Nothing_to_redo
+
+Nothing_to_undo=Nothing_to_undo
+
+#Thenextisusedlikein"Referencesfound:1Numberofreferencestofetch?"
+Number_of_references_to_fetch?=Number_of_references_to_fetch?
+
+occurences=occurences
+
+OK=OK
+
+Ok=OK
+One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?
+
+One_or_more_keys_will_be_overwritten._Continue?=One_or_more_keys_will_be_overwritten._Continue?
+Only_one_item_is_supported=Only_one_item_is_supported
+
+Open=Open
+
+Open_BibTeX_database=Open_BibTeX_database
+
+Open_database=Open_database
+
+Open_editor_when_a_new_entry_is_created=Open_editor_when_a_new_entry_is_created
+
+Open_file=Open_file
+
+Open_last_edited_databases_at_startup=Open_last_edited_databases_at_startup
+
+Open_PDF_or_PS=Open_PDF_or_PS
+
+Open_right-click_menu_with_Ctrl+left_button=Open_right-click_menu_with_Ctrl+left_button
+
+Open_URL_or_DOI=Open_URL_or_DOI
+OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
+
+Opened_database=Opened_database
+
+Opening=Opening
+
+Opening_preferences...=Opening_preferences...
+
+OpenOffice_Calc=OpenOffice_Calc
+OpenOffice_CSV=OpenOffice_CSV
+Operation_canceled.\n=Operation_canceled.\n
+Operation_not_supported=Operation_not_supported
+
+Optional_fields=Optional_fields
+
+Options=Options
+
+or=or
+
+out_of=out_of
+Output=Output
+
+Output_or_export_file=Output_or_export_file
+
+Override=Override
+
+Override_default_file_directories=Override_default_file_directories
+
+Override_default_font_settings=Override_default_font_settings
+
+override_the_bibtex_key_by_the_selected_text=override_the_bibtex_key_by_the_selected_text
+
+
+Overwrite=Overwrite
+Overwrite_existing_field_values=Overwrite_existing_field_values
+
+Overwrite_keys=Overwrite_keys
+
+pairs_processed=pairs_processed
+Password_\:=Password:
+
+Paste=Paste
+
+paste_entries=paste_entries
+
+paste_entry=paste_entry
+Paste_from_clipboard=Paste_from_clipboard
+
+Pasted=Pasted
+
+Path_to_%0_not_defined=Path_to_%0_not_defined
+
+Path_to_LatexEditor_(LEd.exe)=Path_to_LatexEditor_(LEd.exe)
+
+Path_to_LyX_pipe=Path_to_LyX_pipe
+
+Path_to_Vim=Path_to_Vim
+
+Path_to_WinEdt.exe=Path_to_WinEdt.exe
+
+PDF_directory=PDF_directory
+PDF_does_not_exist=PDF_does_not_exist
+
+Personal_journal_list=Personal_journal_list
+
+Plain_text_import=Plain_text_import
+
+Please_check_your_network_connection_to_this_machine.=Please_check_your_network_connection_to_this_machine.
+
+Please_enter_a_name_for_the_group.=Please_enter_a_name_for_the_group.
+
+Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author% [...]
+
+Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).
+
+Please_enter_the_string's_label=Please_enter_the_string's_label
+
+Please_select_an_importer=Please_select_an_importer
+
+Please_select_an_importer.=Please_select_an_importer.
+
+Please_select_exactly_one_group_to_move.=Please_select_exactly_one_group_to_move.
+Please_specify_the_=Please_specify_the_
+
+Possible_duplicate_entries=Possible_duplicate_entries
+
+Possible_duplicate_of_existing_entry._Click_to_resolve.=Possible_duplicate_of_existing_entry._Click_to_resolve.
+
+Preamble=Preamble
+
+Preferences=Preferences
+
+Preferences_recorded.=Preferences_recorded.
+
+Preview=Preview
+
+Previous_entry=Previous_entry
+
+Primary_sort_criterion=Primary_sort_criterion
+Print_Preview=Print_Preview
+Printing_Entry_Preview=Printing_Entry_Preview
+
+Problem_with_parsing_entry=Problem_with_parsing_entry
+Processing_=Processing_
+Program_output=Program_output
+
+PS_directory=PS_directory
+Push_entries_to_external_application_(%0)=Push_entries_to_external_application_(%0)
+
+Push_selection_to_Emacs=Push_selection_to_Emacs
+
+Push_selection_to_LyX/Kile=Push_selection_to_LyX/Kile
+Push_selection_to_Vim=Push_selection_to_Vim
+
+Push_selection_to_WinEdt=Push_selection_to_WinEdt
+
+Push_to_LatexEditor=Push_to_LatexEditor
+Pushed_citations_to_%0=Pushed_citations_to_%0
+
+Pushed_citations_to_Emacs=Pushed_citations_to_Emacs
+Pushed_citations_to_Vim=Pushed_citations_to_Vim
+
+Pushed_citations_to_WinEdt=Pushed_citations_to_WinEdt
+
+Pushed_the_citations_for_the_following_rows_to=Pushed_the_citations_for_the_following_rows_to
+
+Quit_JabRef=Quit_JabRef
+
+Quit_synchronization=Quit_synchronization
+
+Raw_source=Raw_source
+
+Really_delete_the_selected=Really_delete_the_selected
+
+Rearrange_tabs_alphabetically_by_title=Rearrange_tabs_alphabetically_by_title
+
+Redo=Redo
+
+Reference_database=Reference_database
+
+#Thenexttwolinesareusedlikein"Referencesfound:1Numberofreferencestofetch?"
+References_found=References_found
+
+Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Refine_supergroup:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup
+
+Refresh_view=Refresh_view
+
+Regular_Expression=Regular_Expression
+
+Remember_these_entry_types?=Remember_these_entry_types?
+
+Remote_operation=Remote_operation
+
+Remote_server_port=Remote_server_port
+
+Remove=Remove
+
+Remove_all?=Remove_all?
+
+Remove_all_subgroups=Remove_subgroups
+
+Remove_all_subgroups_of_"%0"?=Remove_all_subgroups_of_"%0"?
+
+Remove_double_braces_around_BibTeX_fields_when_loading.=Remove_double_braces_around_BibTeX_fields_when_loading.
+
+Remove_duplicates=Remove_duplicates
+
+Remove_entry_from_import=Remove_entry_from_import
+
+Remove_entry_selection_from_this_group=Remove_entry_selection_from_this_group
+
+Remove_entry_type=Remove_entry_type
+Remove_file_link_(DELETE)=Remove_file_link_(DELETE)
+
+remove_from_group=remove_from_group
+
+Remove_from_group=Remove_from_group
+
+Remove_group=Remove_group
+
+Remove_group,_keep_subgroups=Remove_group,_keep_subgroups
+
+Remove_group_"%0"?=Remove_group_"%0"?
+
+Remove_group_"%0"_and_its_subgroups?=Remove_group_"%0"_and_its_subgroups?
+
+remove_group_(keep_subgroups)=remove_group_(keep_subgroups)
+
+remove_group_and_subgroups=remove_group_and_subgroups
+
+Remove_group_and_subgroups=Remove_group_and_subgroups
+
+Remove_link=Remove_link
+
+Remove_old_entry=Remove_old_entry
+
+Remove_selected_strings=Remove_selected_strings
+
+remove_string_=remove_string_
+
+Removed_group_"%0".=Removed_group_"%0".
+
+Removed_group_"%0"_and_its_subgroups.=Removed_group_"%0"_and_its_subgroups.
+
+Removed_string=Removed_string
+
+Renamed_string=Renamed_string
+
+Replace=Replace
+
+Replace_(regular_expression)=Replace_(regular_expression)
+
+Replace_string=Replace_string
+
+Replace_with=Replace_with
+
+Replaced=Replaced
+
+Required_fields=Required_fields
+
+Reset_all=Reset_all
+Reset_file_type_definitons=Reset_file_type_definitions
+
+Resolve_strings_for_all_fields_except=Resolve_strings_for_all_fields_except
+Resolve_strings_for_standard_BibTeX_fields_only=Resolve_strings_for_standard_BibTeX_fields_only
+
+resolved=resolved
+
+Results=Results
+
+Revert_to_original_source=Revert_to_original_source
+
+Review=Review
+
+Review_changes=Review_changes
+
+Right=Right
+root=root
+
+Save=Save
+Save_all_finished.=Save_all_finished.
+
+Save_all_open_databases=Save_all_open_databases
+
+Save_before_closing=Save_before_closing
+
+Save_database=Save_database
+Save_database_as_...=Save_database_as_...
+
+Save_entries_in_their_original_order=Save_entries_in_their_original_order
+
+Save_failed=Save_failed
+
+Save_failed_during_backup_creation=Save_failed_during_backup_creation
+
+Save_failed_while_committing_changes=Save_failed_while_committing_changes
+
+Save_ordered_by_author/editor/year=Save_ordered_by_author/editor/year
+Save_selected_as_...=Save_selected_as_...
+
+Saved_database=Saved_database
+
+Saved_selected_to=Saved_selected_to
+
+Saved_session=Saved_session
+
+Saving=Saving
+Saving_all_databases...=Saving_all_databases...
+
+Saving_database=Saving_database
+
+Scan=Scan
+
+Search=Search
+
+Search_All_Fields=Search_All_Fields
+
+Search_all_fields=Search_all_fields
+
+Search_error=Search_error
+
+Search_expression=Search_expression
+
+Search_for=Search_for
+
+Search_general_fields=Search_general_fields
+
+Search_IEEEXplore=Search_IEEEXplore
+Search_IEEExplore=Search_IEEExplore
+
+Search_optional_fields=Search_optional_fields
+
+Search_required_fields=Search_required_fields
+
+Search_Specified_Field(s)=Search_Specified_Field(s)
+
+Searched_database._Global_number_of_hits=Searched_database._Global_number_of_hits
+
+Searched_database._Number_of_hits=Searched_database._Number_of_hits
+
+Searching_for_%0_file=Searching_for_%0_file
+
+Searching_for_duplicates...=Searching_for_duplicates...
+
+Searching_for_files=Searching_for_files
+
+Secondary_sort_criterion=Secondary_sort_criterion
+
+Select=Select
+
+Select_a_Zip-archive=Select_a_Zip-archive
+
+Select_action=Select_action
+
+Select_all=Select_all
+
+Select_Classpath_of_New_Importer=Select_Classpath_of_New_Importer
+
+Select_encoding=Select_encoding
+
+Select_entries_in_group_selection=Select_entries_in_group_selection
+
+Select_entry_type=Select_entry_type
+Select_external_application=Select_external_application
+
+Select_file_from_ZIP-archive=Select_file_from_ZIP-archive
+
+Select_format=Select_format
+Select_icon=Select_icon
+
+Select_matches=Select_matches
+
+Select_new_ImportFormat_Subclass=Select_new_ImportFormat_Subclass
+
+Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Select_the_tree_nodes_to_view_and_accept_or_reject_changes
+Selected_entries=Selected_entries
+
+Selector_enabled_fields=Selector_enabled_fields
+Server_Hostname_\:=Server_Hostname:
+Server_Type_\:=Server_Type:
+Set_field=Set_field
+Set_fields=Set_fields
+
+Set_general_fields=Set_general_fields
+Set_main_external_file_directory=Set_main_external_file_directory
+
+Set_table_font=Set_table_font
+
+Settings=Settings
+
+Setup_selectors=Setup_selectors
+
+Short_form=Short_form
+
+Shortcut=Shortcut
+
+Show/edit_BibTeX_source=Show/edit_BibTeX_source
+
+Show_'Firstname_Lastname'=Show_'Firstname_Lastname'
+
+Show_'Lastname,_Firstname'=Show_'Lastname,_Firstname'
+
+Show_BibTeX_source_by_default=Show_BibTeX_source_by_default
+
+Show_BibTeX_source_panel=Show_BibTeX_source_panel
+
+Show_confirmation_dialog_when_deleting_entries=Show_confirmation_dialog_when_deleting_entries
+
+Show_description=Show_description
+
+Show_dynamic_groups_in_<i>italics</i>=Show_dynamic_groups_in_<i>italics</i>
+
+Show_entries_*not*_in_group_selection=Show_entries_*not*_in_group_selection
+
+Show_file_column=Show_file_column
+
+Show_icons_for_groups=Show_icons_for_groups
+Show_last_names_only=Show_last_names_only
+
+Show_names_unchanged=Show_names_unchanged
+
+Show_one_less_rows=Show_one_less_rows
+
+Show_one_more_row=Show_one_more_row
+
+Show_optional_fields=Show_optional_field
+
+Show_PDF/PS_column=Show_PDF/PS_column
+
+Show_required_fields=Show_required_fields
+
+Show_URL/DOI_column=Show_URL/DOI_column
+
+Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered
+
+Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Show_warning_dialog_when_an_empty_BibTeX_key_is_entered
+
+Simple_HTML=Simple_HTML
+
+Size=Size
+
+Skip=Skip
+Skipped_-_No_PDF_linked=Skipped_-_No_PDF_linked
+Skipped_-_PDF_does_not_exist=Skipped_-_PDF_does_not_exist
+
+Skipped_entry.=Skipped_entry.
+
+Sort_alphabetically=Sort_alphabetically
+
+Sort_Automatically=Sort_automatically
+
+Sort_order=Sort_order
+
+sort_subgroups=sort_subgroups
+
+Sorted_all_subgroups_recursively.=Sorted_all_subgroups_recursively.
+
+Sorted_immediate_subgroups.=Sorted_immediate_subgroups.
+
+source_edit=source_edit
+Special_Name_Formatters=Special_Name_Formatters
+
+Special_table_columns=Special_table_columns
+SQL_connection_established.=SQL_connection_established.
+
+Start_incremental_search=Start_incremental_search
+
+Start_search=Start_search
+Starting_import=Starting_import
+
+Statically_group_entries_by_manual_assignment=Statically_group_entries_by_manual_assignment
+
+Status=Status
+
+Stop=Stop
+
+Store_journal_abbreviations=Store_journal_abbreviations
+
+Store_string=Store_string
+
+Store_the_following_fields_with_braces_around_capital_letters=Store_the_following_fields_with_braces_around_capital_letters
+
+Stored_entry=Stored_entry
+
+Strings=Strings
+
+Strings_for_database=Strings_for_database
+
+Subdatabase_from_aux=Subdatabase_from_aux
+
+Suggest=Suggest
+
+Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.
+
+Synchronize_%0_links=Synchronize_%0_links
+Synchronize_file_links=Synchronize_file_links
+
+Synchronizing_%0_links...=Synchronizing_%0_links...
+
+Table_appearance=Table_appearance
+
+Table_background_color=Table_background_color
+
+Table_grid_color=Table_grid_color
+
+Table_text_color=Table_text_color
+
+Tabname=Tabname
+Target_file_cannot_be_a_directory.=Target_file_cannot_be_a_directory.
+
+Tertiary_sort_criterion=Tertiary_sort_criterion
+
+Test=Test
+
+Text_Input_Area=paste_text_here
+
+The_#_character_is_not_allowed_in_BibTeX_fields=The_#_character_is_not_allowed_in_BibTeX_fields
+
+The_chosen_date_format_for_new_entries_is_not_valid=The_chosen_date_format_for_new_entries_is_not_valid
+
+The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=The_chosen_encoding_'%0'_could_not_encode_the_following_characters:_
+
+The_CiteSeer_fetch_operation_returned_zero_results.=The_CiteSeerX_fetch_operation_returned_zero_results.
+
+
+The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.
+
+the_field_<b>%0</b>=the_field_<b>%0</b>
+
+The_file<BR>'%0'<BR>has_been_modified<BR>externally!=The_file<BR>'%0'<BR>has_been_modified<BR>externally!
+
+The_group_"%0"_already_contains_the_selection.=The_group_"%0"_already_contains_the_selection.
+
+The_label_of_the_string_can_not_be_a_number.=The_label_of_the_string_can_not_be_a_number.
+
+The_label_of_the_string_can_not_contain_spaces.=The_label_of_the_string_can_not_contain_spaces.
+
+The_label_of_the_string_can_not_contain_the_'#'_character.=The_label_of_the_string_can_not_contain_the_'#'_character.
+
+The_output_option_depends_on_a_valid_import_option.=The_output_option_depends_on_a_valid_import_option.
+The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?
+
+The_regular_expression_<b>%0</b>_is_invalid%c=The_Regular_Expression_<b>%0</b>_is_invalid%c
+
+The_search_is_case_insensitive.=The_search_is_case_insensitive.
+
+The_search_is_case_sensitive.=The_search_is_case_sensitive.
+
+The_string_has_been_removed_locally=The_string_has_been_removed_locally
+
+There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?
+
+this_button_will_update=this_button_will_update
+This_database_was_written_using_an_older_version_of_JabRef.=This_database_was_written_using_an_older_version_of_JabRef.
+
+This_entry_has_no_BibTeX_key._Generate_key_now?=This_entry_has_no_BibTeX_key._Generate_key_now?
+
+This_entry_is_incomplete=This_entry_is_incomplete
+
+This_entry_type_cannot_be_removed.=This_entry_type_cannot_be_removed.
+
+This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?
+
+This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_ [...]
+
+This_group_contains_entries_in_which=This_group_contains_entries_in_which
+
+This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=This_group_contains_entries_in_which_any_field_contains_the_Regular_Expression_<b>%0</b> 
+
+This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b> 
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b> 
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=This_group_contains_entries_whose_<b>%0</b>_field_contains_the_Regular_Expression_<b>%1</b> 
+
+This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.
+This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.
+
+This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.
+This_operation_requires_at_least_one_entry.=This_operation_requires_at_least_one_entry.
+
+This_operation_requires_one_or_more_entries_to_be_selected.=This_operation_requires_one_or_more_entries_to_be_selected.
+
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?
+
+To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=To_set_up,_go_to_<B>Options_->_Manage_journal_abbreviations</B>
+
+Toggle_abbreviation=Toggle_abbreviation
+Toggle_entry_preview=Toggle_entry_preview
+Toggle_groups_interface=Toggle_groups_interface
+Toggle_search_panel=Toggle_search_panel
+
+Try_different_encoding=Try_different_encoding
+
+Type_set_to_'other'=Type_set_to_'other'
+Unabbreviate_journal_names_of_the_selected_entries=Unabbreviate_journal_names_of_the_selected_entries
+Unabbreviated_%0_journal_names.=Unabbreviated_%0_journal_names.
+
+unable_to_access_LyX-pipe=unable_to_access_LyX-pipe
+
+Unable_to_create_graphical_interface=Unable_to_create_graphical_interface
+
+Unable_to_open_file.=Unable_to_open_file.
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.
+Unable_to_read_default_icon_theme.=Unable_to_read_default_icon_theme.
+Unable_to_read_icon_theme_file=Unable_to_read_icon_theme_file
+
+unable_to_write_to=unable_to_write_to
+Undefined_file_type=Undefined_file_type
+
+Undo=Undo
+
+Union=Union
+
+Unknown_bibtex_entries=Unknown_bibtex_entries
+
+unknown_edit=unknown_edit
+
+unknown_entry_type=unknown_entry_type
+
+Unknown_export_format=Unknown_export_format
+
+Unmark_all=Unmark_all
+
+Unmark_entries=Unmark_entries
+
+Unmark_entry=Unmark_entry
+
+Unmarked_selected=Unmarked_selected
+
+Unpack_EndNote_filter_set=Unpack_EndNote_filter_set
+
+Unpacked_file.=Unpacked_file.
+
+Unsupported_version_of_class_%0\:_%1=Unsupported_version_of_class_%0:_%1
+
+untitled=untitled
+
+Up=Up
+
+Update_to_current_column_widths=Update_to_current_column_widths
+
+Updated_group_selection=Updated_group_selection
+Upgrade_external_links=Upgrade_external_links
+Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.
+Upgrade_file=Upgrade_file
+Upgrade_old_external_file_links_to_use_the_new_feature=Upgrade_old_external_file_links_to_use_the_new_feature
+Upgraded_links.=Upgraded_links.
+UPPER=UPPER
+Upper_Each_First=Upper_Each_First
+Upper_first=Upper_first
+
+usage=usage
+
+Use_antialiasing_font=Use_antialiasing_font
+Use_autocompletion_for_the_following_fields=Use_autocompletion_for_the_following_fields
+Use_custom_icon_theme=Use_custom_icon_theme
+Use_default_viewer=Use_default_viewer
+
+Use_inspection_window_also_when_a_single_entry_is_imported.=Use_inspection_window_also_when_a_single_entry_is_imported.
+Use_native_file_dialog=Use_native_file_dialog
+
+Use_other_look_and_feel=Use_other_look_and_feel
+Use_Regular_Expression_Search=Use_Regular_Expression_Search
+
+Use_regular_expressions=Use_Regular_Expressions
+
+Use_the_following_delimiter_character(s)=Use_the_following_delimiter_character(s)
+Username_\:=Username:
+
+Value_cleared_externally=Value_cleared_externally
+
+Value_set_externally=Value_set_externally
+
+verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid
+
+View=View
+Vim_Server_Name=Vim_Server_Name
+
+Waiting_for_ArXiv...=Waiting_for_ArXiv...
+
+Warn_about_unresolved_duplicates_when_closing_inspection_window=Warn_about_unresolved_duplicates_when_closing_inspection_window
+
+Warn_before_overwriting_existing_keys=Warn_before_overwriting_existing_keys
+
+Warning=Warning
+Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Warning:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message
+
+Warning_there_is_a_duplicate_key=Warning_there_is_a_duplicate_key
+
+Warnings=Warnings
+
+web_link=web_link
+
+What_do_you_want_to_do?=What_do_you_want_to_do?
+
+When_adding/removing_keywords,_separate_them_by=When_adding/removing_keywords,_separate_them_by
+Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.
+
+with=with
+
+Word=Word
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=Write_BibtexEntry_as_XMP-metadata_to_PDF.
+
+Write_XMP=Write_XMP
+Write_XMP-metadata=Write_XMP-metadata
+Write_XMP-metadata_for_all_PDFs_in_current_database?=Write_XMP-metadata_for_all_PDFs_in_current_database?
+Writing_XMP=Writing_XMP
+Writing_XMP_metadata...=Writing_XMP_metadata...
+Writing_XMP_metadata_for_selected_entries...=Writing_XMP_metadata_for_selected_entries...
+Writing_XMP_to_'%0'...=Writing_XMP_to_'%0'...
+
+Wrong_file_format=Wrong_file_format
+
+Wrote_XMP-metadata=Wrote_XMP-metadata
+Wrote_XMP_to_'%0'.=Wrote_XMP_to_'%0'.
+
+XMP-annotated_PDF=XMP-annotated_PDF
+XMP_Export_Privacy_Settings=XMP_Export_Privacy_Settings
+XMP_metadata=XMP_metadata
+XMP_metadata_found_in_PDF\:_%0=XMP_metadata_found_in_PDF:_%0
+You_must_restart_JabRef_for_this_to_come_into_effect.=You_must_restart_JabRef_for_this_to_come_into_effect.
+You_have_changed_the_language_setting.=You_have_changed_the_language_setting.
+
+You_have_changed_the_look_and_feel_setting.=You_have_changed_the_look_and_feel_setting.
+
+You_have_cleared_this_field._Original_value=You_have_cleared_this_field._Original_value
+
+You_have_entered_an_invalid_search_'%0'.=You_have_entered_an_invalid_search_'%0'.
+
+You_must_choose_a_file_name_to_store_journal_abbreviations=You_must_choose_a_file_name_to_store_journal_abbreviations
+
+You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.
+
+You_must_set_both_BibTeX_key_and_%0_directory=You_must_set_both_BibTeX_key_and_%0_directory
+
+Your_new_key_bindings_have_been_stored.=Your_new_key_bindings_have_been_stored.
+
+
+The_following_fetchers_are_available\:=The_following_fetchers_are_available:
+Could_not_find_fetcher_'%0'=Could_not_find_fetcher_'%0'
+Running_Query_'%0'_with_fetcher_'%1'.=Running_Query_'%0'_with_fetcher_'%1'.
+Please_wait!=Please_wait!
+Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.
+Open_SPIRES_entry=Open_SPIRES_entry
+Move/Rename_file=Move/Rename_file
+File_moved=File_moved
+Move_file_failed=Move_file_failed
+Could_not_move_file=Could_not_move_file
+Could_not_find_file_'%0'.=Could_not_find_file_'%0'.
+Move/rename_file=Move/rename_file
+Number_of_entries_successfully_imported=Number_of_entries_successfully_imported
+Import_canceled_by_user=Import_canceled_by_user
+Progress\:_%0_of_%1=Progress:_%0_of_%1
+Error_while_fetching_from_JSTOR=Error_while_fetching_from_JSTOR
+
+Fetching_Medline_by_id...=Fetching_Medline_by_id...
+
+Fetching_Medline_by_term...=Fetching_Medline_by_term...
+Medline_import_canceled=Medline_import_canceled
+Please_enter_a_valid_number=Please_enter_a_valid_number
+Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.
+An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:
+Error_while_fetching_from_Spires\:_=Error_while_fetching_from_Spires\:_
+Connect_to_external_SQL_database=Connect_to_external_SQL_database
+Export_to_external_SQL_database=Export_to_external_SQL_database
+
+Show_results_in_dialog=Show_results_in_dialog
+Global_search=Global_search
+Show_search_results_in_a_window=Show_search_results_in_a_window
+Search_results=Search_results
+Move_file_to_file_directory?=Move_file_to_file_directory?
+Rename_to_'%0'=Rename_to_'%0'
+Move_to_file_directory=Move_to_file_directory
+You_have_changed_the_menu_and_label_font_size.=You_have_changed_the_menu_and_label_font_size.
+
+Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.
+Protected_database=Protected_database
+Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Refuse_to_save_the_database_before_external_changes_have_been_reviewed.
+Database_protection=Database_protection
+Unable_to_save_database=Unable_to_save_database
+
+BibTeX_key_generator=BibTeX_key_generator
+Unable_to_open_link.=Unable_to_open_link.
+Search_JSTOR=Search_JSTOR
+Attempting_SQL_import...=Attempting_SQL_import...
+BibO_RDF=BibO_RDF
+HTML_parser=HTML_parser
+
+Move_the_keyboard_focus_to_the_entry_table=Move_the_keyboard_focus_to_the_entry_table
+MIME_type=MIME_type
+
+This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in [...]
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.
+Legacy_file_fields=Legacy_file_fields
+
+This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Run_Fetcher,_e.g._"--fetch=Medline:cancer"
+
+The_ACM_Digital_Library=The_ACM_Digital_Library
+Reset=Reset
+
+Use_IEEE_LaTeX_abbreviations=Use_IEEE_LaTeX_abbreviations
+The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
+Search_ACM_Portal=Search_ACM_Portal
+Connection_to_ACM_Portal_failed=Connection_to_ACM_Portal_failed
+
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=When_opening_file_link,_search_for_matching_file_if_no_link_is_defined
+Settings_for_%0=Settings_for_%0
+Insert_selected_citations_into_Vim=Insert_selected_citations_into_Vim
+RIS=RIS
+
+Assign_exclusively_to_group=Assign_exclusively_to_group
+
+Bad_Request_'%0'.=Bad_Request_'%0'.
+
+Mark_entries_imported_into_an_existing_database=Mark_entries_imported_into_an_existing_database
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Unmark_all_entries_before_importing_new_entries_into_an_existing_database
+
+Forward=Forward
+Back=Back
+Sort_the_following_fields_as_numeric_fields=Sort_the_following_fields_as_numeric_fields
+Line_%0\:_Found_corrupted_BibTeX-key.=Line_%0\:_Found_corrupted_BibTeX-key.
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).
+Finished_downloading_full_text_document=Finished_downloading_full_text_document
+Unable_to_find_full_text_document_in_the_linked_web_page.=Unable_to_find_full_text_document_in_the_linked_web_page.
+Connection_error_when_trying_to_find_full_text_document.=Connection_error_when_trying_to_find_full_text_document.
+This_entry_provides_no_URL_or_DOI_links.=This_entry_provides_no_URL_or_DOI_links.
+Full_text_article_download_failed=Full_text_article_download_failed
+Update_to_current_column_order=Update_to_current_column_order
+
+Rename_field=Rename_field
+Set/clear/rename_fields=Set/clear/rename_fields
+Rename_field_to\:=Rename_field_to_\:
+Move_contents_of_a_field_into_a_field_with_a_different_name=Move_contents_of_a_field_into_a_field_with_a_different_name
+You_can_only_rename_one_field_at_a_time=You_can_only_rename_one_field_at_a_time
+
+Remove_all_broken_links=Remove_all_broken_links
+
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.
+
+Plugin_installer=Plugin_installer
+Unable_to_create_plugin_directory=Unable_to_create_plugin_directory
+Unable_to_copy_file=Unable_to_copy_file
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.
+Unable_to_create_user_plugin_directory=Unable_to_create_user_plugin_directory
+Plugin_installation_failed.=Plugin_installation_failed.
+The_same_version_of_this_plugin_is_already_installed.=The_same_version_of_this_plugin_is_already_installed.
+A_newer_version_of_this_plugin_is_already_installed.=A_newer_version_of_this_plugin_is_already_installed.
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?
+Old_versions_deleted_successfully.=Old_versions_deleted_successfully.
+
+
+Install_plugin=Install_plugin
+Download_plugin=Download_plugin
+Plugin_manager=Plugin_manager
+Delete_the_%0_selected_plugins?=Delete_the_%0_selected_plugins?
+Delete_plugins=Delete_plugins
+Delete_the_selected_plugin?=Delete_the_selected_plugin?
+Delete_plugin=Delete_plugin
+Enter_download_URL=Enter_download_URL
+Plugin_name=Plugin_name
+Version=Version
+Unknown=Unknown
+Not_loaded=Not_loaded
+Loaded=Loaded
+Could_not_determine_version_of_=Could_not_determine_version_of_
+Install_anyway?=Install_anyway?
+
+Looking_for_full_text_document...=Looking_for_full_text_document...
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.
+
+Autosave=Autosave
+Prompt_before_recovering_a_database_from_an_autosave_file=Prompt_before_recovering_a_database_from_an_autosave_file
+Autosave_interval_(minutes)=Autosave_interval_(minutes)
+Do_you_want_to_recover_the_database_from_the_autosave_file?=Do_you_want_to_recover_the_database_from_the_autosave_file?
+Recover_from_autosave=Recover_from_autosave
+%0_warnings=%0_warnings
+
+Save_in_current_table_sort_order=Save_in_current_table_sort_order
+Export_in_current_table_sort_order=Export_in_current_table_sort_order
+Export_ordered_by_author/editor/year=Export_ordered_by_author/editor/year
+Export_entries_in_their_original_order=Export_entries_in_their_original_order
+Error_opening_file_'%0'.=Error_opening_file_'%0'.
+Autosave_of_file_'%0'=Autosave_of_file_'%0'
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.
+
+
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugins_installed_in_your_user_plugin_directory_(%0):
+Plugins_installed_in_other_locations\:=Plugins_installed_in_other_locations:
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=Plugins_will_be_deleted_next_time_JabRef_starts_up.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=Plugin_will_be_deleted_next_time_JabRef_starts_up.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.
+Formatter_not_found\:_%0=Formatter_not_found\:_%0
+The_following_formatters_could_not_be_found=The_following_formatters_could_not_be_found
+
+Clear_inputarea=Clear_inputarea
+
+Automatically_set_file_links_for_this_entry=Automatically_set_file_links_for_this_entry
+Could_not_save,_file_locked_by_another_JabRef_instance.=Could_not_save,_file_locked_by_another_JabRef_instance.
+File_is_locked_by_another_JabRef_instance.=File_is_locked_by_another_JabRef_instance.
+Do_you_want_to_override_the_file_lock?=Do_you_want_to_override_the_file_lock?
+File_locked=File_locked
+Current_tmp_value=Current_tmp_value
+Metadata_change=Metadata_change
+Changes_have_been_made_to_the_following_metadata_elements=Changes_have_been_made_to_the_following_metadata_elements
+
+Generate_groups_for_author_last_names=Generate_groups_for_author_last_names
+Generate_groups_for_editor_last_names=Generate_groups_for_editor_last_names
+Generate_groups_from_keywords_in_a_BibTeX_field=Generate_groups_from_keywords_in_a_BibTeX_field
+Enforce_legal_characters_in_BibTeX_keys=Enforce_legal_characters_in_BibTeX_keys
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Before_saving,_please_edit_any_strings_containing_the_#_character.
+
+Save_without_backup?=Save_without_backup?
+Unable_to_create_backup=Unable_to_create_backup
+
+File_directory_is_not_set_or_does_not_exist.=File_directory_is_not_set_or_does_not_exist.
+Move_file_to_file_directory.=Move_file_to_file_directory.
+Rename_file_to=Rename_file_to
+<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)
+static_group=static_group
+includes_subgroups=includes_subgroups
+refines_supergroup=refines_supergroup
+dynamic_group=dynamic_group
+contains=contains
+search_expression=search_expression
+
+Disable_file_renaming_in_non-native_file_dialog=Disable_file_renaming_in_non-native_file_dialog
+File_dialog=File_dialog
+No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.
+
+Search_ScienceDirect=Search_ScienceDirect
+Error_while_fetching_from_ScienceDirect=Error_while_fetching_from_ScienceDirect
+
+Error_initializing_custom_export_format_from_string_'%0'=Error_initializing_custom_export_format_from_string_'%0'
+BibLaTeX_mode=BibLaTeX_mode
+Optional_fields_2=Optional_fields_2
+Please_wait=Please_wait
+Waiting_for_save_operation_to_finish=Waiting_for_save_operation_to_finish
+Resolving_duplicate_BibTeX_keys...=Resolving_duplicate_BibTeX_keys...
+Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.
+This_database_contains_one_or_more_duplicated_BibTeX_keys.=This_database_contains_one_or_more_duplicated_BibTeX_keys.
+Do_you_want_to_resolve_duplicate_keys_now?=Do_you_want_to_resolve_duplicate_keys_now?
+
+Find_and_remove_duplicate_BibTeX_keys=Find_and_remove_duplicate_BibTeX_keys
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Expected_syntax_for_--fetch='<name_of_fetcher>:<query>'
+Duplicate_BibTeX_key=Duplicate_BibTeX_key
+Duplicate_key=Duplicate_key
+Generate_key=Generate_key
+Import_marking_color=Import_marking_color
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.
+BibTeX_importer=BibTeX_importer
+Always_add_letter_(a,_b,_...)_to_generated_keys=Always_add_letter_(a,_b,_...)_to_generated_keys
+
+Ensure_unique_keys_using_letters_(a,_b,_...)=Ensure_unique_keys_using_letters_(a,_b,_...)
+Ensure_unique_keys_using_letters_(b,_c,_...)=Ensure_unique_keys_using_letters_(b,_c,_...)
+Entry_editor_active_background_color=Entry_editor_active_background_color
+Entry_editor_background_color=Entry_editor_background_color
+Entry_editor_font_color=Entry_editor_font_color
+Entry_editor_invalid_field_color=Entry_editor_invalid_field_color
+
+Table_and_entry_editor_colors=Table_and_entry_editor_colors
+
+An_autosave_file_was_found_for_this_database._This_could_indicate_=An_autosave_file_was_found_for_this_database._This_could_indicate_
+that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.
+General_file_directory=General_file_directory
+User-specific_file_directory=User-specific_file_directory
+Error_setting_look_and_feel=Error_setting_look_and_feel
+Search_failed\:_illegal_search_expression=Search_failed:_illegal_search_expression
+Show_ArXiv_column=Show_ArXiv_column
+<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group
+
+You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for
+Automatically_open_browse_dialog_when_creating_new_file_link=Automatically_open_browse_dialog_when_creating_new_file_link
+Import_Metadata_from\:=Import_metadata_from:
+Choose_the_source_for_the_metadata_import=Choose_the_source_for_the_metadata_import
+Create_entry_based_on_XMP_data=Create_entry_based_on_XMP_data
+Create_entry_based_on_data_fetched_from=Create_entry_based_on_data_fetched_from
+Create_blank_entry_linking_the_PDF=Create_blank_entry_linking_the_PDF
+Only_attach_PDF=Only_attach_PDF
+Mr._dLib_Metadata_Entries_Associated_With\:=Mr._dLib_Metadata_Entries_Associated_With:
+Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr._dLib_Metadata_Entries_Associated_With_PDF_File
+Title=Title
+Author(s)=Author(s)
+Published_Year=Published_Year
+No_metadata_found.=No_metadata_found.
+Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib_web_service_is_temporarily_unavailable.
+Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.
+You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.
+No_Internet_Connection.=_No_Internet_Connection.
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http://jabref.sourceforge.net_or_http://www.mr-dlib.org_for_more_information_and_updates.
+Web_Service_Version_Outdated=Web_Service_Version_Outdated
+The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.
+Update_empty_fields_with_data_fetched_from=Update_empty_fields_with_data_fetched_from
+Create_New_Entry=Create_New_Entry
+Update_Existing_Entry=Update_Existing_Entry
+Mr._dLib=Mr._dLib
+More_information=More_Information
+Fetching_Metadata...=Fetching_Metadata...
+Metadata=Metadata
+Autocomplete_names_in_'Firstname_Lastname'_format_only=Autocomplete_names_in_'Firstname_Lastname'_format_only
+Autocomplete_names_in_'Lastname,_Firstname'_format_only=Autocomplete_names_in_'Lastname,_Firstname'_format_only
+Autocomplete_names_in_both_formats=Autocomplete_names_in_both_formats
+Marking_color_%0=Marking_color_%0
+The_name_'comment'_can_not_be_used_as_an_entry_type_name.=The_name_'comment'_can_not_be_used_as_an_entry_type_name.
+You_must_enter_an_integer_value_in_the_text_field_for=You_must_enter_an_integer_value_in_the_text_field_for
+File_directory=File_directory
+Send_as_email=Send_as_email
+References=References
+Sending_of_emails=Sending_of_emails
+Subject_for_sending_an_email_with_references=Subject_for_sending_an_email_with_references
+Automatically_open_folders_of_attached_files=Automatically_open_folders_of_attached_files
+Create_entry_based_on_content=Create_entry_based_on_content
+Store_choice_as_default=Store_choice_as_default
+Do_not_show_this_box_again_for_this_import=Do_not_show_this_box_again_for_this_import
+Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)
+Error_creating_email=Error_creating_email
+Could_not_open_directory=Could_not_open_directory
+Entries_added_to_an_email=Entries_added_to_an_email
+exportFormat=exportFormat
+Output_file_missing=Output_file_missing
+No_search_matches.=No_search_matches.
+The_output_option_depends_on_a_valid_input_option.=The_output_option_depends_on_a_valid_input_option.
+Default_import_style_for_drag&drop_of_PDFs=Default_import_style_for_drag&drop_of_PDFs
+Default_PDF_file_link_action=Default_PDF_file_link_action
+File_name_format_pattern=File_name_format_pattern
+PostgreSQL_database=PostgreSQL_database
+DIN_1505=DIN_1505
+Wrong_Format=Wrong_Format
+Path_to_gnuclient_or_emacsclient=Path_to_gnuclient_or_emacsclient
+Additional_parameters=Additional_parameters
+Encrypted_documents_are_not_supported=Encrypted_documents_are_not_supported
+Cite_selected_entries=Cite_selected_entries_between_parenthesis
+Cite_selected_entries_with_in-text_citation=Cite_selected_entries_with_in-text_citation
+Cite_special=Cite_special
+Extra_information_(e.g._page_number)=Extra_information_(e.g._page_number)
+Manage_citations=Manage_citations
+Problem_modifying_citation=Problem_modifying_citation
+Citation=Citation
+Context=Context
+Extra_information=Extra_information
+Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.
+Styles=Styles
+Select_style=Select_style
+This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.
+Journals=Journals
+Cite=Cite
+Cite_in-text=Cite_in-text
+Insert_empty_citation=Insert_empty_citation
+Merge_citations=Merge_citations
+Manual_connect=Manual_connect
+Select_Writer_document=Select_Writer_document
+Sync_OO_bibliography=Sync_OO_bibliography
+OpenOffice=OpenOffice
+Select_which_open_Writer_document_to_work_on=Select_which_open_Writer_document_to_work_on
+Connected_to_document=Connected_to_document
+Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)
+Cite_selected_entries_with_extra_information=Cite_selected_entries_with_extra_information
+Ensure_that_the_bibliography_is_up-to-date=Ensure_that_the_bibliography_is_up-to-date
+Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.
+Unable_to_synchronize_bibliography=Unable_to_synchronize_bibliography
+Combine_pairs_of_citations_that_are_separated_by_spaces_only=Combine_pairs_of_citations_that_are_separated_by_spaces_only
+Autodetection_failed=Autodetection_failed
+Connecting=Connecting
+Please_wait...=Please_wait...
+Unable_to_connect=Unable_to_connect
+Set_connection_parameters=Set_connection_parameters
+Path_to_OpenOffice_directory=Path_to_OpenOffice_directory
+Path_to_OpenOffice_executable=Path_to_OpenOffice_executable
+Path_to_OpenOffice_library_dir=Path_to_OpenOffice_library_dir
+Autodetect=Autodetect
+Connection_lost=Connection_lost
+The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.
+The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.
+Automatically_sync_bibliography_when_inserting_citations=Automatically_sync_bibliography_when_inserting_citations
+Look_up_BibTeX_entries_in_the_active_tab_only=Look_up_BibTeX_entries_in_the_active_tab_only
+Look_up_BibTeX_entries_in_all_open_databases=Look_up_BibTeX_entries_in_all_open_databases
+Use_in-parenthesis_citation=Use_in-parenthesis_citation
+Use_in-text_citation=Use_in-text_citation
+Autodetecting_paths...=Autodetecting_paths...
+Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.
+Could_not_find_OpenOffice_installation=Could_not_find_OpenOffice_installation
+Directories=Directories
+Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to:
+Choose_OpenOffice_executable=Choose_OpenOffice_executable
+Select_document=Select_document
+Edit_Group_Membership=Edit_Group_Membership
+PostgreSQL=PostgreSQL
+
+Highlight_Words=Highlight_Words
+JSTOR_import_cancelled=JSTOR_import_cancelled
+HTML_list=HTML_list
+Click_group_to_toggle_membership_of_selected_entries=Click_group_to_toggle_membership_of_selected_entries
+Use_EMACS_23_insertion_string=Use_EMACS_23_insertion_string
+
+Normalize_to_BibTeX_name_format=Normalize_to_BibTeX_name_format
+If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting
+Could_not_open_%0=Could_not_open_%0
+Unknown_import_format=Unknown_import_format
+Open_INSPIRE_entry=Open_INSPIRE_entry
+An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:
+Error_while_fetching_from_Inspire\:_=Error_while_fetching_from_Inspire\:_
+Web_search=Web_search
+Autocomplete_names=Autocomplete_names
+You_must_select_either_a_valid_style_file,_or_use_the_default_style.=You_must_select_either_a_valid_style_file,_or_use_the_default_style.
+Default_style=Default_style
+Choose_style_file_directly=Choose_style_file_directly
+Choose_from_a_directory=Choose_from_a_directory
+No_directory_defined_for_%0-files=No_directory_defined_for_%0-files
+Allow_file_links_relative_to_each_bib_file's_location=Allow_file_links_relative_to_each_bib_file's_location
+Style_selection=Style_selection
+The_panel_below_shows_the_definition_of_the_default_style.=The_panel_below_shows_the_definition_of_the_default_style.
+If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file
+Default_style_(author-year_citations)=Default_style_(author-year_citations)
+Default_style_(numerical_citations)=Default_style_(numerical_citations)
+No_valid_style_file_defined=No_valid_style_file_defined
+Choose_pattern=Choose_pattern
+Use_the_bib_file_location_as_primary_file_directory=Use_the_bib_file_location_as_primary_file_directory
+Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.
+Built-in_journal_list=Built-in_journal_list
+OpenOffice/LibreOffice_connection=OpenOffice/LibreOffice_connection
+You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.
+JabRef_includes_a_built-in_list_of_journal_abbreviations.=JabRef_includes_a_built-in_list_of_journal_abbreviations.
+You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.
+You_must_select_either_a_valid_style_file,_or_use_a_default_style.=You_must_select_either_a_valid_style_file,_or_use_a_default_style.
+Show=Show
+
+This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.
+Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http://www.bouncycastle.org/.
+This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.
+You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.
+
+First_select_entries_to_clean_up.=First_select_entries_to_clean_up.
+Cleanup_entry=Cleanup_entry
+Autogenerate_PDF_Names=Autogenerate_PDF_Names
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=Auto-generating_PDF-Names_does_not_support_undo._Continue?
+File_rename_failed_for=File_rename_failed_for
+You_have_toggled_the_BibLaTeX_mode.=You_have_toggled_the_BibLaTeX_mode.
+
+Use_full_firstname_whenever_possible=Use_full_firstname_whenever_possible
+Use_abbreviated_firstname_whenever_possible=Use_abbreviated_firstname_whenever_possible
+Use_abbreviated_and_full_firstname=Use_abbreviated_and_full_firstname
+Autocompletion_options=Autocompletion_options
+Autocomplete_after_following_number_of_characters=Autocomplete_after_following_number_of_characters
+Name_format_used_for_autocompletion=Name_format_used_for_autocompletion
+Treatment_of_first_names=Treatment_of_first_names
+No_icon_found_for_%0=No_icon_found_for_%0
+Cleanup_entries=Cleanup_entries
+Automatically_assign_new_entry_to_selected_groups=Automatically_assign_new_entry_to_selected_groups
+
+Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix
+Format_content_of_month_field_to_#mon#=Format_content_of_month_field_to_#mon#
+Ensure_that_page_ranges_are_of_the_form_num1--num2=Ensure_that_page_ranges_are_of_the_form_num1--num2
+Make_paths_of_linked_files_relative_(if_possible)=Make_paths_of_linked_files_relative_(if_possible)
+Rename_PDFs_to_given_file_name_format_pattern=Rename_PDFs_to_given_file_name_format_pattern
+Rename_only_PDFs_having_a_relative_path=Rename_only_PDFs_having_a_relative_path
+What_would_you_like_to_clean_up?=What_would_you_like_to_clean_up?
+Doing_a_cleanup_for_%0_entries...=Doing_a_cleanup_for_%0_entries...
+No_entry_needed_a_clean_up=No_entry_needed_a_clean_up
+One_entry_needed_a_clean_up=One_entry_needed_a_clean_up
+%0_entries_needed_a_clean_up=%0_entries_needed_a_clean_up
+Imported_=Imported_
+Error_importing_from_database=Error_importing_from_database
+%0_databases_will_be_imported=%0_databases_will_be_imported
+Imported_%0_databases_successfully=Imported_%0_databases_successfully
+Minimize_to_system_tray=Minimize_to_system_tray
+
+Incomplete_search_results=Incomplete_search_results
+%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.
+
+Error_downloading_file_'%0'=Error_downloading_file_'%0'
+Download_failed=Download_failed
+
+Importing_cancelled=Importing_cancelled
+There_are_no_available_databases_to_be_imported=There_are_no_available_databases_to_be_imported
+Import_from_SQL_database=Import_from_SQL_database
+<_CREATE_NEW_DATABASE_>=<_CREATE_NEW_DATABASE_>
+Remove_Selected=Remove_Selected
+SQL_Database_Exporter=SQL_Database_Exporter
+Select_target_SQL_database\:=Select_target_SQL_database:
+SQL_Database_Importer=SQL_Database_Importer
+Please_select_which_JabRef_databases_do_you_want_to_import\:=Please_select_which_JabRef_databases_do_you_want_to_import:
+
+Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.
+Attach_file=Attach_file
+Setting_all_preferences_to_default_values.=Setting_all_preferences_to_default_values.
+Resetting_preference_key_'%0'=Resetting_preference_key_'%0'
+Unknown_preference_key_'%0'=Unknown_preference_key_'%0'
+Unable_to_clear_preferences.=Unable_to_clear_preferences.
+
+Reset_preferences_(key1,key2,..._or_'all')=Reset_preferences_(key1,key2,..._or_'all')
+Find_unlinked_files=Find_unlinked_files
+Select_All=Select_All
+Unselect_All=Unselect_All
+Expand_All=Expand_All
+Collapse_All=Collapse_All
+Select_Directory=Select_Directory
+Choose_Directory=Choose_Directory
+Use_the_selected_directory_to_start_with_the_search.=Use_the_selected_directory_to_start_with_the_search.
+Browse...=Browse...
+Opens_the_file_browser.=Opens_the_file_browser.
+Scan_directory=Scan_directory
+Searches_the_selected_directory_for_unlinked_files.=Searches_the_selected_directory_for_unlinked_files.
+Starts_the_import_of_bibtex_entries.=Starts_the_import_of_BibTeX_entries.
+Leave_this_dialog.=Leave_this_dialog.
+Create_directory_based_keywords=Create_directory_based_keywords
+Creates_keywords_in_created_entrys_with_directory_pathnames=Creates_keywords_in_created_entrys_with_directory_pathnames
+Select_a_directory_where_the_search_shall_start.=Select_a_directory_where_the_search_shall_start.
+Select_file_type\:=Select_file_type:
+These_files_are_not_linked_in_the_active_database.=These_files_are_not_linked_in_the_active_database.
+Entry_type_to_be_created\:=Entry_type_to_be_created:
+Searching_file_system...=Searching_file_system...
+Importing_into_Database...=Importing_into_Database...
+Select_directory=Select_directory
+Select_files=Select_files
+Bibtex_entry_creation=BibTeX_entry_creation
+<No_selection>=<No_selection>
+Push_selection_to_TeXstudio=Push_selection_to_TeXstudio
+Path_to_TeXstudio=Path_to_TeXstudio
+Program_'%0'_not_found=Program_'%0'_not_found
+Pushed_citations_to_TeXstudio=Pushed_citations_to_TeXstudio
+Unable_to_connect_to_freecite_online_service.=Unable_to_connect_to_FreeCite_online_service.
+Parse_with_FreeCite=Parse_with_FreeCite
+Insert_selected_citations_into_TeXstudio=Insert_selected_citations_into_TeXstudio
+The_current_BibTeX_key_will_be_overwritten._Continue?=The_current_BibTeX_key_will_be_overwritten._Continue?
+Overwrite_key=Overwrite_key
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator
+How_would_you_like_to_link_to_'%0'?=How_would_you_like_to_link_to_'%0'?
+Marked_entries_as_relevant=Marked_entries_as_relevant
+Marked_entries'_quality_as_good=Marked_entries'_quality_as_good
+Set_priority=Set_priority
+no_preview_available=no_preview_available
+Enable_PDF_preview=Enable_PDF_preview
+Show_one_letter_heading_for_icon_columns=Show_one_letter_heading_for_icon_columns
+Help_on_special_fields=Help_on_special_fields
+Enable_special_fields=Enable_special_fields
+Show_rank=Show_rank
+Compact_rank=Compact_rank
+Show_quality=Show_quality
+Show_priority=Show_priority
+Show_relevance=Show_relevance
+Synchronize_with_keywords=Synchronize_with_keywords
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=Write_values_of_special_fields_as_separate_fields_to_BibTeX
+You_have_changed_settings_for_special_fields.=You_have_changed_settings_for_special_fields.
+Changed_special_field_settings=Changed_special_field_settings
+Bibtex_key_patterns=Bibtex_key_patterns
+Convert_1st,_2nd,_..._to_real_superscripts=Convert_1st,_2nd,_..._to_real_superscripts
+Manage_content_selectors=Manage_content_selectors
+Dropped_comment_from_database=Dropped_comment_from_database
+Synchronized_special_fields_based_on_keywords=Synchronized_special_fields_based_on_keywords
+Clear_priority=Clear_priority
+No_priority_information=No_priority_information
+Set_priority_to_high=Set_priority_to_high
+Priority_high=Priority_high
+Set_priority_to_medium=Set_priority_to_medium
+Priority_medium=Priority_medium
+Set_priority_to_low=Set_priority_to_low
+Priority_low=Priority_low
+Priority=Priority
+Toogle_quality_assured=Toogle_quality_assured
+Quality=Quality
+Rank=Rank
+Clear_rank=Clear_rank
+No_rank_information=No_rank_information
+Set_rank_to_one_star=Set_rank_to_one_star
+One_star=One_star
+Set_rank_to_two_stars=Set_rank_to_two_stars
+Two_stars=Two_stars
+Set_rank_to_three_stars=Set_rank_to_three_stars
+Three_stars=Three_stars
+Set_rank_to_four_stars=Set_rank_to_four_stars
+Four_stars=Four_stars
+Set_rank_to_five_stars=Set_rank_to_five_stars
+Five_stars=Five_stars
+Toggle_relevance=Toggle_relevance
+Relevance=Relevance
+Manage_keywords=Manage_keywords
+Keywords_of_selected_entries=Keywords_of_selected_entries
+Update_keywords=Update_keywords
+
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Correct_the_entry,_and_reopen_editor_to_display/edit_source.
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!
+A_string_with_that_label_already_exists=A_string_with_that_label_already_exists
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=File_has_been_updated_externally._Are_you_sure_you_want_to_save?
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').
+Use_the_following_delimiter_character(s)\:=Use_the_following_delimiter_character(s):
+Created_group_"%0".=Created_group_"%0".
+Removed_all_subgroups_of_group_"%0".=Removed_all_subgroups_of_group_"%0".
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message:_
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.
+Import_Metadata_From_PDF=Import_Metadata_From_PDF
+
+Run_HTML_converter_on_title=Run_HTML_converter_on_title
+Searching...=Searching...
+Error_fetching_from_Google_Scholar=Error_fetching_from_Google_Scholar
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?
+Confirm_selection=Confirm_selection
+Unknown_DOI\:_'%0'.=Unknown_DOI:_'%0'.
+Get_BibTeX_entry_from_DOI=Get_BibTeX_entry_from_DOI
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case
+Import_conversions=Import_conversions
+Run_filter_on_title_keeping_the_case_of_selected_words=Run_filter_on_title_keeping_the_case_of_selected_words
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.
+Please_enter_a_search_string=Please_enter_a_search_string
+Please_open_or_start_a_new_database_before_searching=Please_open_or_start_a_new_database_before_searching
+An_Error_occurred_while_fetching_from_ADS_(%0)\:=An_Error_occurred_while_fetching_from_ADS_(%0):
+Error_while_fetching_from_ADS=Error_while_fetching_from_ADS
+Error_while_fetching_from_OAI2=Error_while_fetching_from_OAI2
+An_Error_occurred_while_parsing_abstract=An_Error_occurred_while_parsing_abstract
+Unknown_DiVA_entry\:_'%0'.=Unknown_DiVA_entry:_'%0'.
+Get_BibTeX_entry_from_DiVA=Get_BibTeX_entry_from_DiVA
+Log=Log
+Remove_unneccessary_$,_{,_and_}=Remove_unneccessary_$,_{,_and_}
diff --git a/src/resource/JabRef_fr.properties b/src/resource/JabRef_fr.properties
index 0c5772a..3116eba 100644
--- a/src/resource/JabRef_fr.properties
+++ b/src/resource/JabRef_fr.properties
@@ -1,1601 +1,1601 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-%0_contains_the_Regular_Expression_<b>%1</b>=%0 contient_l'expression_r\u00e9guli\u00e8re_<b>%1</b>
-%0_contains_the_term_<b>%1</b>=%0 contient_le_terme_<b>%1</b>
-%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_ne_contient_pas_l'expression_r\u00e9guli\u00e8re_<b>%1</b>
-%0_doesn't_contain_the_term_<b>%1</b>=%0_ne_contient_pas_le_terme_<b>%1</b>
-%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_ne_correspond_pas_\u00e0_l'expression_r\u00e9guli\u00e8re_<b>%1</b>
-%0_doesn't_match_the_term_<b>%1</b>=%0_ne_correspond_pas_au_terme_<b>%1</b>
-
-%0_export_successful=%0_:_Exportation_r\u00e9ussie
-%0_field_set=D\u00e9finition_du_champ_%0
-%0_matches_the_Regular_Expression_<b>%1</b>=%0_correspond_\u00e0_l'expression_r\u00e9guli\u00e8re_<b>%1</b>
-%0_matches_the_term_<b>%1</b>=%0_correspond_au_terme_<b>%1</b>
-<field_name>=<nom_de_champ>
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Le_fichier_'%0'_n'a_pas_pu_\u00eatre_trouv\u00e9_<BR>\u00e0_partir_du_lien_de_l'entr\u00e9e_'%1'</HTML>
-<no_field>=<pas_de_champ>
-<select>=<s\u00e9lectionner>
-<select_word>=<entrer_le_mot-clef>
-A_string_with_this_label_already_exists=Une_cha\u00eene_avec_ce_nom_existe_d\u00e9j\u00e0
-Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Abr\u00e9ger_les_noms_de_journaux_des_entr\u00e9es_s\u00e9lectionn\u00e9es_(abr\u00e9viations_ISO)
-Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Abr\u00e9ger_les_noms_de_journaux_des_entr\u00e9es_s\u00e9lectionn\u00e9es_(abr\u00e9viations_MEDLINE)
-Abbreviate_names=Abr\u00e9ger_les_noms
-Abbreviated_%0_journal_names.=%0_noms_de_journaux_abr\u00e9g\u00e9s.
-Abbreviation=Abr\u00e9viation
-About_JabRef=A_propos_de_JabRef
-Abstract=R\u00e9sum\u00e9
-Accept=Valider
-Accept_change=Accepter_la_modification
-Action=Action
-Add=Ajouter
-Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Ajouter_une_classe_ImportFormat_personnalis\u00e9e_(compil\u00e9e)_\u00e0_partir_d'un_chemin_de_classe._\nLe_chemin_n'a_pas_besoin_d'\u00eatre_dans_le_chemin_de_classe_de_JabRef.
-Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Ajouter_une_classe_ImportFormat_personnalis\u00e9e_(compil\u00e9e)_\u00e0_partir_d'une_archive_ZIP._\nL'archive_ZIP_n'a_pas_besoin_d'\u00eatre_dans_le_chemin_de_classe_de_JabRef.
-add_entries_to_group=ajouter_des_entr\u00e9es_au_groupe
-Add_entry_selection_to_this_group=Ajouter_les_entr\u00e9es_s\u00e9lectionn\u00e9es_\u00e0_ce_groupe
-Add_from_folder=Ajouter_\u00e0_partir_du_r\u00e9pertoire
-Add_from_jar=Ajouter_\u00e0_partir_de_jar
-add_group=ajouter_un_groupe
-Add_Group=Ajouter_un_groupe
-Add_new=Ajouter_nouvelle
-Add_Subgroup=Ajouter_un_sous-groupe
-Add_to_group=Ajouter_au_groupe
-Added_group_"%0".=Groupe_"%0"_ajout\u00e9.
-Added_new=Nouvel_ajout
-Added_string=Cha\u00eene_ajout\u00e9e
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=De_plus,_des_entr\u00e9es_dont_le_champ_<b>%0</b>_ne_contient_pas_<b>%1 [...]
-Advanced=Avanc\u00e9
-All_custom_file_types_will_be_lost._Proceed?=Tous_les_types_de_fichiers_personnalis\u00e9s_seront_perdus._Continuer_?
-All_Entries=Toutes_les_entr\u00e9es
-All_entries=Toutes_les_entr\u00e9es
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Toutes_les_entr\u00e9es_de_ce_type_seront_d\u00e9clar\u00e9es_'sans_type'._Continuer_?
-All_fields=Tous_les_champs
-All_subgroups_(recursively)=Tous_les_sous-groupes_(r\u00e9cursivement)
-Allow_editing_in_table_cells=Autoriser_l'\u00e9dition_dans_les_cellules_de_la_table
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Une_erreur_est_survenue_lors_de_la_recherche_\u00e0_partir_de_la_source_OAI2_(%0)_:
-An_Exception_ocurred_while_accessing_'%0'=Une_Exception_est_survenue_lors_de_l'acc\u00e8s_\u00e0_'%0'
-An_SAXException_ocurred_while_parsing_'%0'\:=Une_Exception_SAX_est_survenue_pendant_le_traitement_de_'%0'_:
-and=_et
-and_inside_the_JabRef-jar\:=et_dans_le_jar_de_JabRef_:
-and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=et_la_classe_doit_\u00eatre_disponible_dans_votre_chemin_de_classe_la_prochaine_fois_que_vous_d\u00e9marrez_JabRef.
-any_field_that_matches_the_regular_expression_<b>%0</b>=tout_champ_qui_correspond_\u00e0_l'expression_r\u00e9guli\u00e8re_<b>%0</b>
-Appearance=Aspect
-Append=Ajouter
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Ajouter_le_contenu_d'une_base_BibTeX_\u00e0_la_base_actuelle
-Append_database=Joindre_\u00e0_la_base
-append_the_selected_text_to_bibtex_key=ajouter_le_texte_s\u00e9lectionn\u00e9_\u00e0_la_clef_BibTeX
-Application=Application
-Apply=Appliquer
-Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Arguments_transmis_\u00e0_l'instance_JabRef_active.
-Assign_entry_selection_exclusively_to_this_group=Assigner_les_entr\u00e9es_s\u00e9lectionn\u00e9es_uniquement_\u00e0_ce_groupe
-Assign_new_file=Assigner_un_nouveau_fichier
-Assign_the_original_group's_entries_to_this_group?=Assigner_les_entr\u00e9es_originales_du_groupe_\u00e0_ce_groupe_?
-Assigned_%0_entries_to_group_"%1".=%0_entr\u00e9es_ajout\u00e9es_au_groupe_"%1".
-Assigned_1_entry_to_group_"%0".=Une_entr\u00e9e_ajout\u00e9e_au_groupe_"%0".
-At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=Au_moins_le_greffon_'net.sf.jabref.core'_devrait_\u00eatre_ici.
-Attach_%0_file=Attacher_le_fichier_%0
-Attach_URL=Attacher_l'URL
-Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Cela_tente_de_d\u00e9finir_automatiquement_les_liens_%0_de_vos_entr\u00e9es.<BR>La_d\u00e9finition_automatique_fonctionne_si_un_fichier_%0_dans_votre_r\u00e9pertoire_%0<BR>ou_dans_un_sous-r\u00e9pertoire_porte_le_m\u00eame_nom_que_la_clef_d'une_entr\u00e9e_BibTeX,<BR>_l'extension_en_plus.
-Attempting_SQL_export...=Tentative_d'exportation_SQL...
-Auto=Auto
-Autodetect_format=D\u00e9tection_automatique_du_format
-Autogenerate_BibTeX_key=Cr\u00e9ation_automatique_des_clefs_BibTeX
-Autogenerate_BibTeX_keys=Cr\u00e9ation_automatique_des_clefs_BibTeX
-Autogenerate_groups=Cr\u00e9ation_automatique_des_groupes
-autogenerate_keys=cr\u00e9ation_automatique_des_clefs
-Autolink_files_with_names_starting_with_the_BibTeX_key=Lier_automatiquement_les_fichiers_commen\u00e7ant_par_la_clef_BibTeX
-Autolink_only_files_that_match_the_BibTeX_key=Lier_automatiquement_les_fichiers_correspondant_exactement_\u00e0_la_clef_BibTeX
-Automatically_create_groups=Cr\u00e9er_automatiquement_des_groupes
-Automatically_create_groups_for_database.=Cr\u00e9er_automatiquement_des_groupes_pour_la_base.
-Automatically_created_groups=Groupes_cr\u00e9\u00e9s_automatiquement
-Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Masquer_automatiquement_l'interface_des_groupes_lors_de_l'affichage_d'une_base_de_donn\u00e9es_qui_ne_contient_pas_de_groupes
-Automatically_remove_exact_duplicates=Supprimer_automatiquement_les_doublons_identiques
-Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Afficher_automatiquement_l'interface_des_groupes_lors_de_l'affichage_d'une_base_de_donn\u00e9es_qui_contient_des_groupes
-Autoset=D\u00e9finir_automatiquement
-Autoset_%0_field=Auto-d\u00e9finition_du_champ_%0
-Autoset_%0_links._Allow_overwriting_existing_links.=D\u00e9finir_automatiquement_les_liens_%0._Ecraser_les_liens_existants.
-Autoset_%0_links._Do_not_overwrite_existing_links.=D\u00e9finir_automatiquement_les_liens_%0._Ne_pas_\u00e9craser_les_liens_existants.
-Autoset_external_links=D\u00e9finir_automatiquement_les_liens_externes
-Autosetting_links=D\u00e9finition_automatique_des_liens
-AUX_file_import=Importation_de_fichier_AUX
-Available_export_formats=Formats_d'exportation_disponibles
-Available_fields=Champs_BibTeX_disponibles
-Available_import_formats=Formats_d'importation_disponibles
-Background_color_for_optional_fields=Couleur_d'arri\u00e8re-plan_pour_les_champs_optionnels
-Background_color_for_required_fields=Couleur_d'arri\u00e8re-plan_pour_les_champs_requis
-Backup_old_file_when_saving=Cr\u00e9er_une_copie_de_sauvegarde_lors_de_l'enregistrement
-Beta_version=Version_Beta
-Bibkey_to_filename_conversion=Conversion_de_la_clef_BibTeX_en_nom_de_fichier
-BibTeX_key=Clef_BibTeX
-BibTeX_key_is_unique.=La_clef_BibTeX_est_unique.
-BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Clef_BibTeX_ind\u00e9finie._Entrer_un_nom_pour_le_fichier_t\u00e9l\u00e9charg\u00e9
-BibTeX_source=Source_BibTeX
-BibTeXML=BibTeXML
-Binding=Affectation
-Broken_link=Lien_invalide
-Browse=Explorer
-by=par_
-Calling_external_viewer...=Lancement_de_l'afficheur_externe...
-Cancel=Annuler
-Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Les_entr\u00e9es_ne_peuvent_pas_\u00eatre_ajout\u00e9es_au_groupe_sans_g\u00e9n\u00e9rer_des_clefs._Voulez-vous_g\u00e9n\u00e9rer_des_clefs_maintenant_?
-Cannot_merge_this_change=Cette_modification_ne_peut_pas_\u00eatre_fusionn\u00e9e
-Cannot_move_group_"%0"_down.=Le_groupe_"%0"_ne_peut_pas_\u00eatre_d\u00e9plac\u00e9_vers_le_bas.
-Cannot_move_group_"%0"_left.=Le_groupe_"%0"_ne_peut_pas_\u00eatre_d\u00e9plac\u00e9_vers_la_gauche.
-Cannot_move_group_"%0"_right.=Le_groupe_"%0"_ne_peut_pas_\u00eatre_d\u00e9plac\u00e9_vers_la_droite.
-Cannot_move_group_"%0"_up.=Le_groupe_"%0"_ne_peut_pas_\u00eatre_d\u00e9plac\u00e9_vers_le_haut
-case_insensitive=insensible_\u00e0_la_casse
-case_sensitive=sensible_\u00e0_la_casse
-Case_sensitive=Sensible_\u00e0_la_casse
-change_assignment_of_entries=changer_l'assignation_des_entr\u00e9es
-Change_case=Changer_la_casse
-Change_entry_type=Changer_le_type_d'entr\u00e9e
-Change_file_type=Changer_le_type_de_fichier
-change_key=changer_la_clef
-Change_of_Grouping_Method=Changement_de_la_M\u00e9thode_de_Groupement
-change_preamble=changer_le_pr\u00e9ambule
-change_string_content=changer_le_contenu_de_la_cha\u00eene
-change_string_name=changer_le_nom_de_la_cha\u00eene
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=Modifier_les_colonnes_de_la_table_et_les_param\u00e8tres_des_champs_g\u00e9n\u00e9raux_pour_utiliser_cette_nouvelle_fonction
-change_type=changer_le_type
-changed_=chang\u00e9_
-Changed_font_settings=Param\u00e8tres_de_police_modifi\u00e9s
-Changed_language_settings=Param\u00e8tres_linguistiques_modifi\u00e9s
-Changed_look_and_feel_settings=Changer_les_param\u00e8tres_d'apparence
-Changed_preamble=Pr\u00e9ambule_modifi\u00e9
-Changed_type_to=Type_modifi\u00e9_en
-Characters_to_ignore=Caract\u00e8res_\u00e0_ignorer_
-Check_existing_%0_links=V\u00e9rifier_les_liens_%0_existants
-Check_links=V\u00e9rifier_les_liens
-Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Choisir_l'URL_de_t\u00e9l\u00e9chargement._La_valeur_par_d\u00e9faut_pointe_vers_une_liste_fournie_par_les_d\u00e9veloppeurs_de_JabRef
-Cite_command=Commande_Cite
-Class_name=Nom_de_classe
-Clear=Vider
-clear_all_groups=Vider_tous_les_groupes
-Clear_field=Vider_le_champ
-Clear_fields=Vider_les_champs
-Clear_highlight=Vider_surlignements
-Close=Fermer
-Close_dialog=Fermer_la_fen\u00eatre
-Close_the_current_database=Fermer_la_base_courante
-Close_the_help_window=Fermer_la_fen\u00eatre_d'aide
-Close_window=Fermer_la_fen\u00eatre
-Closed_database=Base_ferm\u00e9e
-Collapse_subtree=Masquer_le_sous-arbre
-Color_codes_for_required_and_optional_fields=Codes_de_couleurs_pour_les_champs_requis_et_optionnels
-Color_for_marking_incomplete_entries=Couleur_pour_marquer_les_entr\u00e9es_incompl\u00e8tes
-Column_width=Largeur_de_colonne
-Command_line_id=Identifiant_de_la_ligne_de_commande
-Complete_record=Compl\u00e9ter_l'enregistrement
-Connect=Connexion_automatique
-Connect_to_SQL_database=Se_connecter_\u00e0_une_base_SQL
-Connect_to_SQL_Database=Se_connecter_\u00e0_une_base_SQL
-Connection_to_IEEEXplore_failed=Echec_de_la_connexion_\u00e0_IEEEXplore
-Contained_in=Contenu_dans
-Content=Contenu
-Copied=Copi\u00e9
-Copied_cell_contents=Contenu_des_cellules_copi\u00e9
-Copied_key=Clef_copi\u00e9e
-Copied_keys=Clefs_copi\u00e9es
-Copy=Copier
-Copy_BibTeX_key=Copier_la_clef_BibTeX
-Copy_file_to_file_directory.=Copier_le_fichier_vers_le_r\u00e9pertoire_de_fichiers.
-Copy_files_to_file_directory.=Copier_les_fichiers_vers_le_r\u00e9pertoire_de_fichiers.
-Copy_to_clipboard=Copier_dans_le_presse-papier
-Could_not_call_executable=L'ex\u00e9cutable_n'a_pas_pu_\u00eatre_lanc\u00e9
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=La_connexion_\u00e0_un_processus_gnuserv_actif_a_\u00e9chou\u00e9._Assurez-vous_qu'Emacs_ou_XEmacs_soit_actif,<BR>et_que_le_serveur_a_\u00e9t\u00e9_d\u00e9marr\u00e9_(avec_la_commande_'gnuserv-start').
-Could_not_connect_to_host_=La_connexion_\u00e0_l'ordinateur_h\u00f4te_a_\u00e9chou\u00e9_
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=La_connexion_au_serveur_Vim_a_\u00e9chou\u00e9._Assurez-vous_que_Vim_tourne<BR>avec_le_bon_nom_de_serveur.
-Could_not_export_file=Le_fichier_n'a_pas_pu_\u00eatre_export\u00e9
-Could_not_export_preferences=L'exportation_des_pr\u00e9f\u00e9rences_a_\u00e9chou\u00e9
-Could_not_find_a_suitable_import_format.=Un_format_d'importation_convenable_n'a_pas_pu_\u00eatre_trouv\u00e9
-Could_not_find_directory_for_%0-files\:_%1=Le_r\u00e9pertoire_n'a_pas_pu_\u00eatre_trouv\u00e9_pour_les_fichiers_%0_:_%1
-Could_not_find_image_file=Le_fichier_image_n'a_pas_\u00e9t\u00e9_trouv\u00e9
-Could_not_find_layout_file=Fichier_de_mise_en_page_non_trouv\u00e9
-Could_not_import_preferences=L'importation_des_pr\u00e9f\u00e9rences_a_\u00e9chou\u00e9_
-Could_not_instantiate_%0=N'a_pas_pu_initialiser_%0
-Could_not_instantiate_%0_%1=N'a_pas_pu_initialiser_%0_%1
-Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=%0_a_\u00e9chou\u00e9._Avez-vous_choisi_le_chemin_de_paquetage_correct_?
-Could_not_open_link=Le_lien_n'a_pas_pu_\u00eatre_ouvert
-Could_not_parse_number_of_hits=Le_nombre_de_r\u00e9sultats_n'a_pas_pu_\u00eatre_trait\u00e9
-Could_not_print_preview=Echec_de_l'impression_de_l'aper\u00e7u
-Could_not_run_the_'vim'_program.=Le_programme_'vim'_n'a_pas_pu_\u00eatre_lanc\u00e9.
-Could_not_save_file=Le_fichier_n'a_pas_pu_\u00eatre_enregistr\u00e9_
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Le_fichier_n'a_pas_pu_\u00eatre_enregistr\u00e9._L'encodage_de_caract\u00e8res_'%0'_n'est_pas_support\u00e9.
-Create_group=Cr\u00e9er_le_groupe
-Created_groups.=Groupes_cr\u00e9\u00e9s.
-crossreferenced_entries_included=Entr\u00e9es_avec_r\u00e9f\u00e9rences_crois\u00e9es_incluses
-Current_content=Contenu_actuel
-Current_value=Valeur_actuelle_
-Custom_entry_types=Types_d'entr\u00e9es_personnalis\u00e9es
-Custom_entry_types_found_in_file=Types_d'entr\u00e9es_personnalis\u00e9es_trouv\u00e9es_dans_le_fichier
-Custom_icon_theme=Th\u00e8me_d'ic\u00f4nes_personnalis\u00e9
-Custom_icon_theme_file=Fichier_de_th\u00e8me_d'ic\u00f4nes_personnalis\u00e9
-Custom_importers=Filtres_d'importation_personnalis\u00e9s
-Customize_entry_types=Personnaliser_les_types_d'entr\u00e9es
-Customize_key_bindings=Personnaliser_les_affectations_de_touches
-Cut=Couper
-cut_entries=Couper_les_entr\u00e9es
-cut_entry=supprimer_l'entr\u00e9e
-Cut_pr=Couper
-Database_\:=Base_de_donn\u00e9es_:
-Database_encoding=Encodage_de_la_base_de_donn\u00e9es
-Database_has_changed._Do_you_want_to_save_before_closing?=Base_modifi\u00e9e._Voulez-vous_l'enregistrer_avant_de_fermer_?
-Database_properties=Propri\u00e9t\u00e9s_de_la_base_de_donn\u00e9es
-Date_format=Format_de_date_
-Default=D\u00e9faut
-Default_encoding=Encodage_par_d\u00e9faut_
-Default_grouping_field=Champ_par_d\u00e9faut_pour_les_groupes_
-Default_look_and_feel=Apparence_par_d\u00e9faut_
-Default_pattern=Mod\u00e8le_par_d\u00e9faut
-Default_sort_criteria=Crit\u00e8re_de_tri_par_d\u00e9faut
-Define_'%0'=D\u00e9finir_'%0'
-Delete=Supprimer
-Delete_custom_format=Supprimer_le_format_personnalis\u00e9
-delete_entries=effacer_les_entr\u00e9es
-Delete_entry=Supprimer_l'entr\u00e9e
-delete_entry=effacer_l'entr\u00e9e
-Delete_multiple_entries=Effacer_plusieurs_entr\u00e9es
-Delete_rows=Supprimer_des_lignes
-Delete_strings=Supprimer_les_cha\u00eenes
-Deleted=Supprim\u00e9
-Delimit_fields_with_semicolon,_ex.=D\u00e9limiter_les_champs_par_des_points-virgules,_ex.
-Descending=Descendant
-Description=Description
-Deselect_all=Tout_d\u00e9s\u00e9lectionner
-Deselect_all_duplicates=D\u00e9s\u00e9lectionner_tous_les_doublons
-Details=D\u00e9tails
-Disable_entry_editor_when_multiple_entries_are_selected=D\u00e9sactiver_l'\u00e9diteur_en_cas_de_s\u00e9lections_multiples
-Disable_this_confirmation_dialog=D\u00e9sactiver_cette_demande_de_confirmation
-Disable_this_warning_dialog=D\u00e9sactiver_ce_message_d'avertissement
-Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Afficher_toutes_les_entr\u00e9es_appartenant_\u00e0_au_moins_un_des_groupes_s\u00e9lectionn\u00e9s.
-Display_all_error_messages=Afficher_tous_les_messages_d'erreur
-Display_help_on_command_line_options=Afficher_l'aide_sur_les_options_de_la_ligne_de_commande
-Display_imported_entries_in_an_inspection_window_before_they_are_added.=Afficher_les_entr\u00e9es_import\u00e9es_dans_une_fen\u00eatre_d'inspection_avant_de_les_ajouter.
-Display_only_entries_belonging_to_all_selected_groups.=Afficher_uniquement_les_entr\u00e9es_appartenant_\u00e0_tous_les_groupes_s\u00e9lectionn\u00e9s.
-Display_version=Afficher_la_version
-Displaying_no_groups=Pas_de_groupes_\u00e0_afficher
-Do_not_abbreviate_names=Ne_pas_abr\u00e9ger_les_noms
-Do_not_autoset=Ne_pas_d\u00e9finir_automatiquement.
-Do_not_import_entry=Ne_pas_importer_l'entr\u00e9e
-Do_not_open_any_files_at_startup=N'ouvrir_aucun_fichier_au_d\u00e9marrage
-Do_not_overwrite_existing_keys=Ne_pas_\u00e9craser_de_clefs_existantes
-Do_not_show_splash_window_at_startup=Ne_pas_montrer_l'\u00e9cran_de_garde_lors_du_lancement
-Do_not_show_these_options_in_the_future=Ne_pas_afficher_ces_options_\u00e0_l'avenir
-Do_not_wrap_the_following_fields_when_saving=Ne_pas_renvoyer_\u00e0_la_ligne_les_champs_suivants_lors_de_l'enregistrement_
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Ne_pas_\u00e9crire_les_champs_suivants_dans_les_m\u00e9tadonn\u00e9es_XMP_:
-Do_you_want_JabRef_to_do_the_following_operations?=Voulez-vous_que_JabRef_fasse_les_op\u00e9rations_suivantes_?
-DocBook=DocBook
-Down=Bas
-Download=T\u00e9l\u00e9charger
-Download_completed=T\u00e9l\u00e9chargement_termin\u00e9
-Download_file=T\u00e9l\u00e9charger_le_fichier
-Downloading...=T\u00e9l\u00e9chargement...
-Drag_and_Drop_Error=Erreur_de_Glisser-D\u00e9poser
-Drop_%0=D\u00e9poser_%0
-duplicate_BibTeX_key=Clef_BibTeX_dupliqu\u00e9e
-Duplicate_BibTeX_key.=Dupliquer_la_clef_BibTeX.
-Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Clef_BibTeX_dupliqu\u00e9e._Les_groupes_pourraient_ne_pas_fonctionner_pour_cette_entr\u00e9e.
-Duplicate_Key_Warning=Avertissement_:_Clef_dupliqu\u00e9e
-Duplicate_pairs_found=Doublons_trouv\u00e9s
-duplicate_removal=Suppression_des_doublons
-Duplicate_string_name=Dupliquer_le_nom_de_cha\u00eene
-Duplicates_found=Doublons_trouv\u00e9s
-Duplicates_removed=Doublons_supprim\u00e9s
-Dynamic_groups=Groupes_dynamiques
-Dynamically_group_entries_by_a_free-form_search_expression=Grouper_dynamiquement_les_entr\u00e9es_en_utilisant_une_expression_de_recherche_de_forme_libre
-Dynamically_group_entries_by_searching_a_field_for_a_keyword=Grouper_dynamiquement_les_entr\u00e9es_en_cherchant_un_mot-clef_dans_un_champ
-Each_line_must_be_on_the_following_form=Chaque_ligne_doit_\u00ea_de_la_forme_suivante
-Edit=Editer
-Edit_custom_export=Editer_l'exportation_personnalis\u00e9e
-Edit_entry=Editer_l'entr\u00e9e
-Edit_file_link=Editer_le_lien_de_fichier
-Edit_file_type=Editer_le_type_de_fichier
-Edit_group=Editer_le_groupe
-Edit_journal=Editer_le_journal
-Edit_preamble=Editer_le_pr\u00e9ambule
-Edit_strings=Editer_les_cha\u00eenes
-Editor_options=Options_d'\u00e9diteur
-empty_BibTeX_key=Clef_BibTeX_vide
-Empty_BibTeX_key.=Clef_BibTeX_vide.
-Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Clef_BibTeX_vide._La_gestion_des_groupes_pourrait_ne_plus_fonctionner_pour_cette_entr\u00e9e.
-empty_database=base_vide
-Enable_source_editing=Autoriser_l'\u00e9dition_du_source
-Enable_word/name_autocompletion=Autoriser_l'auto-g\u00e9n\u00e9ration_des_mots/noms
-Endnote=Endnote
-Enter_URL=Entrer_l'URL
-Enter_URL_to_download=Entrer_l'URL_de_t\u00e9l\u00e9chargement
-entries=entr\u00e9es
-Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Des_entr\u00e9es_ne_peuvent_pas_\u00eatre_ajout\u00e9es_ou_supprim\u00e9es_manuellement_de_ce_groupe.
-Entries_exported_to_clipboard=Entr\u00e9es_export\u00e9es_vers_le_presse-papiers
-entries_have_undefined_BibTeX_key=Des_entr\u00e9es_ont_des_clefs_BibTeX_non_d\u00e9finies
-entries_into_new_database=entr\u00e9es_dans_la_nouvelle_base
-entry=entr\u00e9e
-Entry_editor=Editeur_d'entr\u00e9e
-Entry_in_current_database=Entr\u00e9e_dans_la_base_de_donn\u00e9es_actuelle
-Entry_in_import=Entr\u00e9e_dans_l'importation
-Entry_preview=Aper\u00e7u_de_l'entr\u00e9e
-Entry_table=Table_des_entr\u00e9es
-Entry_table_columns=Colonnes_de_la_table_des_entr\u00e9es
-Entry_type=Type_d'entr\u00e9e
-Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Les_noms_de_type_d'entr\u00e9e_ne_peuvent_pas_contenir_d'espace_et_les_caract\u00e8res_suivants
-Entry_types=Types_d'entr\u00e9es
-Error=Erreur
-Error\:_=Erreur_:_
-Error_converting_Bibtex_to_XMP\:_%0=Erreur_lors_de_la_conversion_de_BibTeX_en_XMP_:_%0
-Error_converting_XMP_to_'%0'...=Erreur_lors_de_la_conversion_d'XMP_en_'%0'
-Error_exporting_to_clipboard=Erreur_lors_de_l'exportation_vers_le_presse-papiers
-Error_in_field=Erreur_dans_le_champ
-Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Erreur_au_lancement_du_syst\u00e8me_de_greffon._D\u00e9marrage_sans_greffon,_certaines_fonctionalit\u00e9s_pourraient_\u00eatre_absentes.
-Error_occured_when_parsing_entry=Une_erreur_est_survenue_pendant_le_traitement_de_l'entr\u00e9e
-Error_opening_file=Erreur_lors_de_l'ouverture_du_fichier
-Error_setting_field=Erreur_de_configuration_du_champ
-Error_while_converting_BibtexEntry_to_XMP_%0=Erreur_lors_de_la_conversion_de_l'entr\u00e9e_BibTeX_en_XMP_%0
-Error_while_downloading_file\:=Erreur_lors_du_t\u00e9l\u00e9chargement_du_fichier_:
-Error_while_fetching_from_OIA2=Erreur_lors_de_la_recherche_OIA2
-Error_while_writing=Erreur_lors_de_l'\u00e9criture
-Error_writing_to_%0_file(s).=Erreur_lors_de_l'\u00e9criture_de_%0_fichier(s).
-Error_writing_XMP_to_file\:_%0=Erreur_lors_de_l'\u00e9criture_des_XMP_dans_le_fichier_%0
-Establishing_SQL_connection...=Etablissement_de_la_connexion_SQL...
-Exceptions=Exceptions
-Existing_file=Fichier_existant
-exists._Overwrite_file?=existe._Ecraser_le_fichier_?
-exists._Overwrite?=existe._Ecraser_?
-Expand_subtree=D\u00e9velopper_le_sous-arbre
-Export=Exporter
-Export_name=Nom_de_l'exportation
-Export_preferences=Exporter_les_pr\u00e9f\u00e9rences
-Export_preferences_to_file=Exporter_les_pr\u00e9f\u00e9rences_vers_un_fichier
-Export_properties=Propri\u00e9t\u00e9s_de_l'exportation
-Export_to_clipboard=Exporter_vers_le_presse-papiers
-Export_to_SQL_database=Exporter_vers_une_base_SQL
-Exporting=Exportation_en_cours
-Extension=Extension
-External_changes=Modifications_externes
-External_file_links=Liens_vers_les_fichiers_externes
-External_files=Fichiers_externes
-External_programs=Programmes_externes
-External_viewer_called=Afficheur_externe_lanc\u00e9
-Failed_to_read_groups_data_(unsupported_version\:_%0)=La_lecture_des_donn\u00e9es_des_groupes_a_\u00e9chou\u00e9_(version_non_support\u00e9e_:_%0)
-Fetch=Rechercher
-Field=Champ
-field=Champ
-Field_content=Contenu_du_champ
-Field_name=Nom_du_champ_
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Les_noms_de_champs_ne_peuvent_pas_contenir_d'espace_ou_l'un_des_caract\u00e8res_suivants
-Field_sizes=Tailles_des_champs
-Field_to_filter=Champ_vers_filtre
-Field_to_group_by=Champ_\u00e0_grouper_par
-Fields=Champs
-File=Fichier
-file=fichier
-File_'%0'_is_already_open.=Le_fichier_'%0'_est_d\u00e9j\u00e0_ouvert.
-File_'%0'_not_found=Fichier_'%0'_non_trouv\u00e9
-File_changed=Fichier_chang\u00e9
-File_directory_is_'%0'\:=Le_r\u00e9pertoire_de_fichier_est_'%0'_:
-File_directory_is_not_set_or_does_not_exist!=Le_r\u00e9pertoire_de_fichiers_n'est_pas_configur\u00e9_ou_n'existe_pas_!
-File_download=T\u00e9l\u00e9chargement_de_fichier
-File_exists=Le_fichier_existe
-File_extension=Extension_de_fichier
-File_has_been_updated_externally._What_do_you_want_to_do?=Le_fichier_a_\u00e9t\u00e9_mis_\u00e0_jour_externalement._Que_voulez-vous_faire_?
-File_not_found=Fichier_non_trouv\u00e9
-File_type=Type_de_fichier
-File_updated_externally=Fichier_mis_\u00e0_jour_externalement
-filename=nom_de_fichier
-Files_opened=Fichiers_ouverts
-Filter=Filtre
-Finished_autosetting_external_links.=La_d\u00e9finition_automatique_des_liens_externes_est_termin\u00e9e.
-Finished_synchronizing_%0_links._Entries_changed%c_%1.=Synchronisation_des_liens_%0_termin\u00e9e._Entr\u00e9es_modifi\u00e9es%c_%1.
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Ecriture_des_m\u00e9ta-donn\u00e9es_XMP_termin\u00e9e._Ecriture_de_%0_fichier(s).
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Fin_de_l'\u00e9criture_des_XMP_pour_%0_fichiers_(%1_pass\u00e9s,_%2_erreurs).
-First_select_the_entries_you_want_keys_to_be_generated_for.=Commencez_par_s\u00e9lectionner_les_entr\u00e9es_pour_lesquelles_vous_voulez_que_des_clefs_soient_g\u00e9n\u00e9r\u00e9es.
-Fit_table_horizontally_on_screen=Ajuster_horizontalement_la_table_\u00e0_l'\u00e9cran
-Float=Flottante
-Float_marked_entries=Entr\u00e9es_marqu\u00e9es_flottantes
-Font_Family=Famille_de_police
-Font_Preview=Pr\u00e9visualisation_de_la_police
-Font_Size=Taille_de_police
-Font_Style=Style_de_police
-FontSelector=S\u00e9lecteur_de_police
-for=pour
-Format_of_author_and_editor_names=Format_des_noms_d'auteurs_et_d'\u00e9diteurs
-Format_String=Cha\u00eene_de_format
-Format_used=Format_utilis\u00e9
-Formatter_Name=Nom_de_formateur
-Formatter_not_found=Formateur_non_trouv\u00e9
-found=trouv\u00e9
-Found_%0_plugin(s)=%0_greffon(s)_trouv\u00e9(s)
-found_in_aux_file=trouv\u00e9es_dans_le_fichier_aux
-Full_name=Nom_complet
-General=G\u00e9n\u00e9ral
-General_fields=Champs_g\u00e9n\u00e9raux
-Generate=Cr\u00e9er
-Generate_BibTeX_key=Cr\u00e9er_la_clef_BibTeX
-Generate_keys=G\u00e9n\u00e9rer_les_clefs
-Generate_keys_before_saving_(for_entries_without_a_key)=G\u00e9n\u00e9rer_les_clefs_avant_d'enregistrer_(pour_les_entr\u00e9es_sans_clef)
-Generate_keys_for_imported_entries=G\u00e9n\u00e9rer_les_clefs_pour_les_entr\u00e9es_import\u00e9es
-Generate_now=G\u00e9n\u00e9rer_maintenant
-Generated_BibTeX_key_for=Cr\u00e9ation_termin\u00e9e_de_la_clef_BibTeX_pour
-Generating_BibTeX_key_for=Cr\u00e9ation_en_cours_d'une_clef_BibTeX_pour
-Grab=Rechercher
-Gray_out_entries_not_in_group_selection=Griser_les_entr\u00e9es_hors_de_la_s\u00e9lection
-Gray_out_non-hits=Griser_les_entr\u00e9es_non_correspondantes
-Gray_out_non-matching_entries=Griser_les_entr\u00e9es_non_correspondantes
-Group_properties=Propri\u00e9t\u00e9s_du_groupe
-grouping_may_not_work_for_this_entry=Les_groupes_pourraient_ne_pas_fonctionner_pour_cette_entr\u00e9e.
-Groups=Groupes
-Harvard_RTF=Harvard_RTF
-Have_you_chosen_the_correct_package_path?=Avez-vous_choisi_le_bon_chemin_pour_le_paquetage_?
-Help=Aide
-Help_contents=Contenu_de_l'aide
-Help_on_groups=Aide_sur_les_groupes
-Help_on_key_patterns=Aide_sur_le_param\u00e9trage_des_clefs
-Help_on_Preview_Settings=Aide_sur_les_param\u00e8tres_de_l'aper\u00e7u
-Help_on_Regular_Expression_Search=Aide_sur_la_recherche_d'une_expression_r\u00e9guli\u00e8re
-Hide_non-hits=Masquer_les_entr\u00e9es_non_correspondantes
-Hide_non-matching_entries=Masquer_les_entr\u00e9es_non_correspondantes
-Hierarchical_context=Type_de_hi\u00e9rarchie
-Highlight=Surlign\u00e9e
-Highlight_groups_matching_all_selected_entries=Surligner_les_groupes_correspondant_\u00e0_toutes_les_entr\u00e9es_s\u00e9lectionn\u00e9es
-Highlight_groups_matching_any_selected_entry=Surligner_les_groupes_correspondant_\u00e0_au_moins_une_des_entr\u00e9es_s\u00e9lectionn\u00e9es
-Highlight_overlapping_groups=Surligner_les_groupes_se_chevauchant
-Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Astuce%c_Pour_chercher_uniquement_dans_des_champs_sp\u00e9cifiques,_entrez_par_exemple%c<p><tt>author%esmith_and_title%e\u00e9lectrique</tt>
-HTML=HTML
-HTML_table=Tableau_HTML
-HTML_table_(with_Abstract_&_BibTeX)=Tableau_HTML_(avec_R\u00e9sum\u00e9_&_BibTeX)
-Icon=Ic\u00f4ne
-Ignore=Ignorer
-Immediate_subgroups=Uniquement_les_sous-groupes_directs
-Import=Importer
-Import_and_keep_old_entry=Importer_et_conserver_l'ancienne_entr\u00e9e
-Import_and_remove_old_entry=Importer_et_supprimer_l'ancienne_entr\u00e9e
-Import_entries=Importer_les_entr\u00e9es
-Import_failed=L'importation_a_\u00e9chou\u00e9e
-Import_file=Fichier_\u00e0_importer
-Import_group_definitions=Importer_les_d\u00e9finitions_de_groupe
-Import_name=nom_Import
-Import_preferences=Importer_les_pr\u00e9f\u00e9rences
-Import_preferences_from_file=Importer_les_pr\u00e9f\u00e9rences_depuis_un_fichier
-Import_strings=Importer_les_cha\u00eenes
-Import_to_open_tab=Importer_dans_l'onglet_ouvert
-Import_word_selector_definitions=Importer_les_d\u00e9finitions_des_s\u00e9lecteurs_de_mots
-Imported_database=Base_import\u00e9e
-Imported_entries=Entr\u00e9es_import\u00e9es
-Imported_from_database=Import\u00e9_\u00e0_partir_de_la_base_de_donn\u00e9es
-ImportFormat_class=Classe_ImportFormat
-Importing=Importation_en_cours
-Importing_in_unknown_format=Importation_dans_un_format_inconnu
-In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=Dans_JabRef,_utiliser_une_paire_de_#_pour_d\u00e9limiter_une_cha\u00eene.
-Include_abstracts=Inclure_les_r\u00e9sum\u00e9s
-Include_entries=Entr\u00e9es_affect\u00e9es
-Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Inclut_les_sous-groupes_\:_Quand_s\u00e9lectionn\u00e9,_afficher_les_entr\u00e9es_contenues_dans_ce_groupe_ou_ses_sous-groupes
-Incremental=Incr\u00e9mentale
-Incremental_search=Recherche_incr\u00e9mentale
-Incremental_search_failed._Repeat_to_search_from_top.=La_recherche_incr\u00e9mentale_n'a_pas_abouti._R\u00e9p\u00e9ter_depuis_le_d\u00e9but.
-Independent_group\:_When_selected,_view_only_this_group's_entries=Groupe_ind\u00e9pendant_\:_Quand_s\u00e9lectionn\u00e9,_afficher_uniquement_les_entr\u00e9es_de_ce_groupe
-Initially_show_groups_tree_expanded=Afficher_au_d\u00e9part_l'arbre_des_groupes_d\u00e9velopp\u00e9
-Input=Attribution_des_champs
-Input_error=Entr\u00e9e_erron\u00e9e
-Insert=Ins\u00e9rer
-Insert_rows=Ins\u00e9rer_des_lignes
-Insert_selected_citations_into_LyX/Kile=Envoyer_les_citations_s\u00e9lectionn\u00e9es_dans_LyX/Kile
-Insert_selected_citations_into_WinEdt=Envoyer_les_citations_s\u00e9lectionn\u00e9es_dans_&WinEdt
-insert_string_=ins\u00e9rer_la_cha\u00eene
-Insert_URL=Ins\u00e9rer_l'URL
-integrity=int\u00e9grit\u00e9
-Integrity_check=V\u00e9rification_d'int\u00e9grit\u00e9
-Intersection=Intersection
-Invalid_BibTeX_key=Clef_BibTeX_invalide
-Invalid_date_format=Format_de_date_invalide
-Invalid_URL=URL_invalide
-Inverted=Compl\u00e9mentaire
-is_a_standard_type.=est_un_type_standard.
-ISO_abbreviation=Abr\u00e9viation_ISO
-Item_list_for_field=Liste_des_choix_pour_le_champ
-jabref=jabref
-JabRef_help=Aide_de_JabRef
-JabRef_preferences=Pr\u00e9f\u00e9rences_pour_JabRef
-Journal_abbreviations=Abr\u00e9viations_de_journaux
-Journal_list_preview=Pr\u00e9visualisation_de_la_liste_des_journaux
-Journal_name=Nom_du_journal
-Keep=Garder
-Keep_both=Garder_les_deux
-Keep_lower=Garder_celui_du_bas
-Keep_upper=Garder_celui_du_haut
-Key_bindings=Affectations_des_touches
-Key_bindings_changed=Affectations_des_touches_modifi\u00e9es
-Key_generator_settings=Param\u00e9trage_du_g\u00e9n\u00e9rateur_de_clef
-Key_pattern=Param\u00e9trage_des_clefs
-keys_in_database=clefs_dans_la_base_de_donn\u00e9es
-Keyword=Mot-clef
-Label=Nom_du_champ
-Language=Langue_
-Last_modified=Dernier_modifi\u00e9
-LaTeX_AUX_file=Fichier_LaTeX_AUX
-Leave_file_in_its_current_directory.=Laisser_le_fichier_dans_son_r\u00e9pertoire_courant
-Leave_files_in_their_current_directory.=Laisser_les_fichiers_dans_le_r\u00e9pertoire_courant
-Left=Gauche
-License=Licence
-Limit_to_fields=Restreindre_aux_champs
-Limit_to_selected_entries=Restreindre_aux_seules_entr\u00e9es_s\u00e9lectionn\u00e9es
-Link=Lien
-Link_local_file=Lier_le_fichier_local
-Link_to_file_%0=Lien_vers_le_fichier_%0
-Listen_for_remote_operation_on_port=Ecouter_le_port_pour_des_op\u00e9rations_\u00e0_distance_
-Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Charger_et_enregistrer_les_pr\u00e9f\u00e9rences_de/vers_jabref.xml_au_d\u00e9marrage_(mode_clef_m\u00e9moire)
-Load_session=Charger_la_session
-Loading_session...=Chargement_de_la_session...
-localhost=localhost
-Look_and_feel=Apparence
-Looking_for_pdf...=Recherche_de_pdf...
-lower=minuscule
-Main_file_directory=R\u00e9pertoire_de_fichiers_principal_
-Main_layout_file=Principal_fichier_de_mise_en_page
-Main_PDF_directory=R\u00e9pertoire_PDF_principal_
-Main_PS_directory=R\u00e9pertoire_PS_principal_
-Manage=G\u00e9rer
-Manage_custom_exports=G\u00e9rer_les_exportations_personnalis\u00e9es
-Manage_custom_imports=G\u00e9rer_les_importations_personnalis\u00e9es
-Manage_external_file_types=G\u00e9rer_les_types_de_fichiers_externes
-Manage_journal_abbreviations=G\u00e9rer_les_abr\u00e9viations_de_journaux
-Mark_entries=Etiqueter_ces_entr\u00e9es
-Mark_entry=Etiqueter_l'entr\u00e9e
-Mark_new_entries_with_addition_date=Enregistrer_la_date_d'ajout_pour_les_nouvelles_entr\u00e9es
-Mark_new_entries_with_owner_name=Nouvelles_entr\u00e9es_attribu\u00e9es_au_propri\u00e9taire_
-Marked_selected=Etiquetage_de_la_s\u00e9lection
-Memory_Stick_Mode=Mode_Clef_M\u00e9moire
-Menu_and_label_font_size=Taille_de_police_pour_les_menus_et_les_champs_
-Merged_external_changes=Fusionner_les_modifications_externes
-Messages=Messages
-Messages_and_Hints=Avertissements_et_Suggestions
-Modification_of_field=Modification_du_champ
-Modified_group_"%0".=Groupe_"%0"_modifi\u00e9.
-Modified_groups=Groupes_modifi\u00e9s
-Modified_string=Cha\u00eene_modifi\u00e9e
-Modify=Modifier
-modify_group=Modifier_le_groupe
-MODS=MODS
-Move=D\u00e9placer
-Move_down=D\u00e9placer_vers_le_bas
-Move_entries_in_group_selection_to_the_top=D\u00e9placer_les_entr\u00e9es_s\u00e9lectionn\u00e9es_en_haut
-Move_external_links_to_'file'_field=D\u00e9placer_les_liens_externes_vers_le_champ_'fichier'
-Move_files_to_file_directory.=D\u00e9placer_les_fichiers_vers_le_r\u00e9pertoire_de_fichiers.
-move_group=d\u00e9placer_le_groupe
-Move_string_down=D\u00e9placer_la_cha\u00eene_vers_le_bas
-Move_string_up=D\u00e9placer_la_cha\u00eene_vers_le_haut
-Move_up=D\u00e9placer_vers_le_haut
-Moved_group_"%0".=Groupe_"%0"_d\u00e9plac\u00e9.
-MS_Office_2007=MS_Office_2007
-MySQL=MySQL
-MySQL_database=Base_de_donn\u00e9es_MySQL
-Name=Nom
-Name_formatter=Formateur_de_nom
-Natbib_style=Style_Natbib
-nested_aux_files=fichiers_AUX_imbriqu\u00e9s
-New=Nouveau
-new=nouveau
-New_BibTeX_database=Nouvelle_base_BibTeX
-New_BibTeX_entry=Nouvelle_entr\u00e9e_BibTeX
-New_BibTeX_subdatabase=Nouveau_fichier_BibTeX
-New_content=Nouveau_contenu
-New_database_created.=Nouvelle_base_cr\u00e9\u00e9e.
-New_field_value=Nouvelle_valeur_du_champ
-New_file=Nouveau_fichier
-New_file_link_(INSERT)=Nouveau_lien_de_fichier_(INSERT)
-New_group=Nouveau_groupe
-New_string=Nouvelle_cha\u00eene
-Next_entry=Entr\u00e9e_suivante
-No_%0_found=Pas_de_%0_trouv\u00e9
-No_actual_changes_found.=Pas_de_changements_trouv\u00e9s.
-no_base-bibtex-file_specified=fichier_BibTeX_non_sp\u00e9cifi\u00e9_!
-no_database_generated=pas_de_base_cr\u00e9\u00e9e
-No_duplicates_found=Pas_de_doublons_trouv\u00e9s
-No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Pas_d'entr\u00e9es_trouv\u00e9es._Assurez-vous,_SVP,_que_vous_utilisez_le_filtre_d'importation_appropri\u00e9.
-No_entries_found_for_the_search_string_'%0'=Pas_d'entr\u00e9e_pour_la_cha\u00eene_de_recherche_'%0'
-No_entries_imported.=Pas_d'entr\u00e9es_import\u00e9es.
-No_entries_or_multiple_entries_selected.=Pas_d'entr\u00e9e_s\u00e9lectionn\u00e9e_ou_s\u00e9lection_de_plusieurs_entr\u00e9es.
-No_entries_selected=Pas_d'entr\u00e9es_s\u00e9lectionn\u00e9es
-No_entries_selected.=Pas_d'entr\u00e9es_s\u00e9lectionn\u00e9es.
-No_exceptions_have_ocurred.=Aucune_exception_n'est_survenue.
-No_files_found.=Fichiers_non_trouv\u00e9s.
-No_GUI._Only_process_command_line_options.=Pas_d'interface_utilisateur._Traitement_limit\u00e9_aux_options_de_la_ligne_de_commande.
-No_journal_names_could_be_abbreviated.=Aucun_nom_de_journal_n'a_pu_\u00eatre_abr\u00e9g\u00e9.
-No_journal_names_could_be_unabbreviated.=Aucun_nom_de_journal_n'a_pu_\u00eatre_d\u00e9velopp\u00e9.
-No_PDF_linked=Pas_de_PDF_li\u00e9
-No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=PDF_ou_PS_non_d\u00e9fini_et_fichier_correspondant_\u00e0_la_clef_BibTeX_non_trouv\u00e9
-No_plugins_were_found_in_the_following_folders\:=Aucun_greffon_n'a_\u00e9t\u00e9_trouv\u00e9_dans_les_r\u00e9pertoires_suivants_:
-No_references_found=Aucune_r\u00e9f\u00e9rence_trouv\u00e9e
-No_saved_session_found.=Pas_trouv\u00e9_de_session_enregistr\u00e9e.
-No_url_defined=Pas_d'URL_d\u00e9finie
-No_XMP_metadata_found_in_=Pas_de_m\u00e9tadonn\u00e9es_XMP_trouv\u00e9es_dans_
-not=non
-not_found=non_trouv\u00e9
-Not_saved_(empty_session)=Pas_d'enregistrement_(session_vide)
-Note_that_the_entry_causing_the_problem_has_been_selected.=Noter_que_l'entr\u00e9e_responsable_du_probl\u00e8me_a_\u00e9t\u00e9_s\u00e9lectionn\u00e9e.
-Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Notez_que_vous_devez_sp\u00e9cifier_le_nom_de_classe_complet_pour_l'apparence,
-Nothing_to_redo=Rien_\u00e0_r\u00e9p\u00e9ter
-Nothing_to_undo=Rien_\u00e0_annuler
-Number_of_references_to_fetch?=Nombre_de_r\u00e9f\u00e9rences_\u00e0_r\u00e9cup\u00e9rer_?
-occurences=occurrences
-OK=OK
-Ok=Ok
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Un_ou_plusieurs_liens_de_fichier_sont_du_type_'%0',_qui_est_ind\u00e9fini._Que_voulez-vous_faire_?
-One_or_more_keys_will_be_overwritten._Continue?=Une_ou_plusieurs_clefs_seront_\u00e9cras\u00e9es._Continuer_?
-Only_one_item_is_supported=Un_seul_objet_est_support\u00e9
-Open=Ouvrir
-Open_BibTeX_database=Ouvrir_une_base_BibTeX
-Open_database=Ouvrir_une_base
-Open_editor_when_a_new_entry_is_created=Ouvrir_l'\u00e9diteur_quand_une_nouvelle_entr\u00e9e_est_cr\u00e9\u00e9e
-Open_file=Ouvrir_le_fichier
-Open_last_edited_databases_at_startup=Ouvrir_les_fichiers_de_la_derni\u00e8re_session_au_d\u00e9marrage
-Open_PDF_or_PS=Ouvrir_PDF_ou_PS
-Open_right-click_menu_with_Ctrl+left_button=D\u00e9rouler_le_menu_contextuel_avec_Ctrl+clic_gauche
-Open_URL_or_DOI=Ouvrir_URL_ou_DOI
-OpenDocument_Spreadsheet=Tableur_OpenDocument
-Opened_database=Base_ouverte
-Opening=Ouverture_en_cours
-Opening_preferences...=Ouverture_des_pr\u00e9f\u00e9rences_en_cours...
-OpenOffice_Calc=OpenOffice_Calc
-OpenOffice_CSV=OpenOffice_CSV
-Operation_canceled.\n=Op\u00e9ration_annul\u00e9e.\n
-Operation_not_supported=Op\u00e9ration_non_support\u00e9e
-Optional_fields=Champs_optionnels
-Options=Options
-or=ou
-out_of=sur
-Output=Sortie
-Output_or_export_file=Fichier_de_sortie_ou_d'exportation
-Override=Remplacer
-Override_default_file_directories=Remplacer_les_r\u00e9pertoires_de_fichier_par_d\u00e9faut
-Override_default_font_settings=Se_substituer_aux_param\u00e8tres_de_police_par_d\u00e9faut
-override_the_bibtex_key_by_the_selected_text=remplacer_la_clef_BibTeX_par_le_texte_s\u00e9lectionn\u00e9
-Overwrite=Ecraser
-Overwrite_existing_field_values=Ecraser_les_valeurs_existantes_du_champ
-Overwrite_keys=Ecraser_les_clefs
-pairs_processed=paires_trait\u00e9es
-Password_\:=Mot_de_passe_:
-Paste=Coller
-paste_entries=Coller_les_entr\u00e9es
-paste_entry=Coller_l'entr\u00e9e
-Paste_from_clipboard=Coller_depuis_le_presse-papier
-Pasted=Coll\u00e9
-Path_to_%0_not_defined=Chemin_vers_%0_non_d\u00e9fini
-Path_to_LatexEditor_(LEd.exe)=Chemin_vers_LatexEditor_(LEd.exe)_
-Path_to_LyX_pipe=Chemin_du_canal_de_transmission_LyX_
-Path_to_Vim=Chemin_de_Vim_
-Path_to_WinEdt.exe=Chemin_de_WinEdt.exe_
-PDF_directory=R\u00e9pertoire_PDF
-PDF_does_not_exist=Le_PDF_n'existe_pas
-Personal_journal_list=Liste_personnelle_de_journaux
-Plain_text_import=Importation_de_texte_brut
-Please_check_your_network_connection_to_this_machine.=SVP,_v\u00e9rifiez_votre_connexion_r\u00e9seau_\u00e0_cette_machine.
-Please_enter_a_name_for_the_group.=SVP,_entrez_un_nom_pour_le_groupe.
-Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=SVP,_entrez_un_terme_\u00e0_recherche._Par_exemple,_pour_rechercher_<b>Smith</b>_dans_tout_les_champs,_entrez %c<p><tt>smith</tt><p>Pour_rechercher_<b>Smith</b>_dans_le_champ_<b>Author</b>_et_<b>\u00e9lectrique</b>_dans_le_c [...]
-Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=SVP,_entrez_le_champ_de_recherche_(par_ex._<b>keywords</b>)_et_le_mot-clef_\u00e0_rechercher_(par_ex._<b>\u00e9lectrique</b>).
-Please_enter_the_string's_label=SVP,_entrez_le_nom_de_la_cha\u00eene
-Please_select_an_importer=S\u00e9lectionner_un_filtre_d'importation,_SVP
-Please_select_an_importer.=S\u00e9lectionner_un_filtre_d'importation,_SVP.
-Please_select_exactly_one_group_to_move.=SVP,_s\u00e9lectionnez_uniquement_un_groupe_\u00e0_d\u00e9placer.
-Please_specify_the_=Merci_de_sp\u00e9cifier_le_
-Possible_duplicate_entries=Entr\u00e9es_potentiellement_dupliqu\u00e9es
-Possible_duplicate_of_existing_entry._Click_to_resolve.=Duplication_possible_d'une_entr\u00e9e_existante._Cliquer_pour_v\u00e9rifier.
-Preamble=Pr\u00e9ambule
-Preferences=Pr\u00e9f\u00e9rences
-Preferences_recorded.=Pr\u00e9f\u00e9rences_enregistr\u00e9es.
-Preview=Aper\u00e7u
-Previous_entry=Entr\u00e9e_pr\u00e9c\u00e9dente
-Primary_sort_criterion=Crit\u00e8re_de_tri_principal
-Print_Preview=Imprimer_l'aper\u00e7u
-Printing_Entry_Preview=Impression_de_l'aper\u00e7u_de_l'entr\u00e9e
-Problem_with_parsing_entry=Probl\u00e8me_de_traitement_d'une_entr\u00e9e
-Processing_=Traitement_de_
-Program_output=Sortie_du_programme
-PS_directory=R\u00e9pertoire_PS
-Push_entries_to_external_application_(%0)=Envoyer_les_entr\u00e9es_vers_l'application_externe_(%0)
-Push_selection_to_Emacs=Envoyer_la_s\u00e9lection_dans_Emacs
-Push_selection_to_LyX/Kile=Envoyer_la_s\u00e9lection_dans_LyX/Kile
-Push_selection_to_Vim=Envoyer_la_s\u00e9lection_dans_Vim
-Push_selection_to_WinEdt=Envoyer_la_s\u00e9lection_dans_WinEdt
-Push_to_LatexEditor=Envoyer_vers_LaTeXEditor
-Pushed_citations_to_%0=Envoyer_les_citations_vers_%0
-Pushed_citations_to_Emacs=Envoyer_les_citations_dans_Emacs
-Pushed_citations_to_Vim=Envoyer_les_citations_dans_Vim
-Pushed_citations_to_WinEdt=Citations_envoy\u00e9es_vers_WinEdt
-Pushed_the_citations_for_the_following_rows_to=Envoyer_les_citations_pour_les_lignes_suivantes_vers
-Quit_JabRef=Quitter_JabRef
-Quit_synchronization=Quitter_la_synchronisation
-Raw_source=Texte_brut
-Really_delete_the_selected=Voulez-vous_vraiment_supprimer_cette
-Rearrange_tabs_alphabetically_by_title=Classer_les_onglets_par_ordre_alphab\u00e9tique
-Redo=R\u00e9p\u00e9ter
-Reference_database=Base_de_r\u00e9f\u00e9rence
-References_found=R\u00e9f\u00e9rences_trouv\u00e9es
-Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Raffine_le_super-groupe_\:_Quand_s\u00e9lectionn\u00e9,_afficher_les_entr\u00e9es_contenues_\u00e0_la_fois_dans_ce_groupe_et_son_super-groupe
-Refresh_view=Rafra\u00eechir_la_vue
-Regular_Expression=Expression_r\u00e9guli\u00e8re
-Remember_these_entry_types?=Se_souvenir_de_ces_types_d'entr\u00e9es_?
-Remote_operation=Acc\u00e8s_\u00e0_distance
-Remote_server_port=Port_du_serveur_d'acc\u00e8s_\u00e0_distance
-Remove=Supprimer
-Remove_all?=Tout_supprimer_?
-Remove_all_subgroups=Supprimer_les_sous-groupes
-Remove_all_subgroups_of_"%0"?=Supprimer_tous_les_sous-groupes_de_"%0"_?
-Remove_double_braces_around_BibTeX_fields_when_loading.=Supprimer_les_doubles_accolades_autour_des_champs_BibTeX_\u00e0_l'ouverture
-Remove_duplicates=Supprimer_les_doublons
-Remove_entry_from_import=Supprimer_l'entr\u00e9e_de_l'importation
-Remove_entry_selection_from_this_group=Supprimer_les_entr\u00e9es_s\u00e9lectionn\u00e9es_de_ce_groupe
-Remove_entry_type=Supprimer_le_type_d'entr\u00e9e
-Remove_file_link_(DELETE)=Supprimer_le_lien_de_fichier_(DELETE)
-remove_from_group=supprimer_du_groupe
-Remove_from_group=Supprimer_du_groupe
-Remove_group=Supprimer_le_groupe
-Remove_group,_keep_subgroups=Supprimer_le_groupe,_garder_les_sous-groupes
-Remove_group_"%0"?=Supprimer_le_groupe_"%0"_?
-Remove_group_"%0"_and_its_subgroups?=Supprimer_le_groupe_"%0"_et_ses_sous-groupes_?
-remove_group_(keep_subgroups)=supprimer_le_groupe_(garder_les_sous-groupes)
-remove_group_and_subgroups=supprimer_le_groupe_et_les_sous-groupes
-Remove_group_and_subgroups=Supprimer_le_groupe_et_les_sous-groupes
-Remove_link=Supprimer_le_lien
-Remove_old_entry=Supprimer_l'ancienne_entr\u00e9e
-Remove_selected_strings=Supprimer_les_cha\u00eenes_s\u00e9lectionn\u00e9es
-remove_string_=enlever_la_cha\u00eene_
-Removed_group_"%0".=Groupe_"%0"_supprim\u00e9.
-Removed_group_"%0"_and_its_subgroups.=Groupe_"%0"_et_ses_sous-groupes_supprim\u00e9s.
-Removed_string=Cha\u00eene_supprim\u00e9e
-Renamed_string=Cha\u00eene_renomm\u00e9e
-Replace=Remplacer
-Replace_(regular_expression)=Remplacer_(expression_r\u00e9guli\u00e8re)_
-Replace_string=Remplacer_la_cha\u00eene
-Replace_with=Remplacer_par
-Replaced=Remplac\u00e9
-Required_fields=Champs_requis
-Reset_all=R\u00e9tablir_les_options_pr\u00e9c\u00e9dentes
-Reset_file_type_definitons=R\u00e9tablir_les_d\u00e9finitions_de_type_de_fichier
-Resolve_strings_for_all_fields_except=Traiter_les_cha\u00eenes_pour_tous_les_champs_sauf
-Resolve_strings_for_standard_BibTeX_fields_only=Traiter_les_cha\u00eenes_pour_les_champs_BibTeX_standard_uniquement
-resolved=r\u00e9solu
-Results=R\u00e9sultats
-Revert_to_original_source=R\u00e9tablir_le_contenu_initial
-Review=Remarques
-Review_changes=Revoir_les_changements
-Right=Droite
-root=root
-Save=Enregistrer
-Save_all_finished.=Enregistrement_de_tout_termin\u00e9e.
-Save_all_open_databases=Enregistrement_toutes_les_bases_ouvertes
-Save_before_closing=Enregistrement_avant_fermeture
-Save_database=Enregistrement_la_base
-Save_database_as_...=Enregistrement_la_base_sous...
-Save_entries_in_their_original_order=Enregistrement_les_entr\u00e9es_dans_leur_ordre_original
-Save_failed=Echec_de_l'enregistrement
-Save_failed_during_backup_creation=L'enregistrement_a_\u00e9chou\u00e9_durant_la_cr\u00e9ation_de_la_copie_de_secours
-Save_failed_while_committing_changes=L'enregistrement_a_\u00e9chou\u00e9_lors_de_la_soumission_des_changements
-Save_ordered_by_author/editor/year=Enregistrer_les_entr\u00e9es_selon_author/editor/year
-Save_selected_as_...=Enregistrer_la_s\u00e9lection_sous...
-Saved_database=Base_enregistr\u00e9e
-Saved_selected_to=S\u00e9lection_enregistr\u00e9e_dans
-Saved_session=Session_enregistr\u00e9e
-Saving=Enregistrement_en_cours
-Saving_all_databases...=Enregistrement_de_toutes_les_bases...
-Saving_database=Enregistrement_de_la_base_en_cours
-Scan=D\u00e9marrer
-Search=Recherche
-Search_All_Fields=Recherche_dans_tous_les_champs
-Search_all_fields=Recherche_dans_tous_les_champs
-Search_error=Erreur_de_recherche
-Search_expression=Expression_\u00e0_rechercher_
-Search_for=Rechercher
-Search_general_fields=Recherche_dans_les_champs_g\u00e9n\u00e9raux
-Search_IEEEXplore=Recherche_IEEEXplore
-Search_IEEExplore=Recherche_IEEExplore
-Search_optional_fields=Recherche_dans_les_champs_optionnels
-Search_required_fields=Recherche_dans_les_champs_requis
-Search_Specified_Field(s)=Recherche_dans_les_champs_sp\u00e9cifi\u00e9s
-Searched_database._Global_number_of_hits=Recherche_effectu\u00e9e._Nombre_total_de_r\u00e9sultats
-Searched_database._Number_of_hits=Recherche_effectu\u00e9e._Nombre_de_r\u00e9sultats_trouv\u00e9s
-Searching_for_%0_file=Recherche_de_%0
-Searching_for_duplicates...=Recherche_des_doublons_en_cours...
-Searching_for_files=Recherche_de_fichiers...
-Secondary_sort_criterion=Crit\u00e8re_secondaire_de_tri
-Select=S\u00e9lectionner
-Select_a_Zip-archive=S\u00e9lectionner_une_archive_ZIP
-Select_action=S\u00e9lectionner_l'op\u00e9ration
-Select_all=Tout_s\u00e9lectionner
-Select_Classpath_of_New_Importer=S\u00e9lectionner_le_chemin_de_classe_du_nouveau_fil7tre_d'importation
-Select_encoding=S\u00e9lectionner_l'encodage
-Select_entries_in_group_selection=S\u00e9lectionner_les_entr\u00e9es_dans_la_s\u00e9lection
-Select_entry_type=S\u00e9lectionner_un_type_d'entr\u00e9e
-Select_external_application=S\u00e9lectionner_une_application_externe
-Select_file_from_ZIP-archive=S\u00e9lectionner_un_fichier_depuis_une_archive_ZIP
-Select_format=S\u00e9lectionner_le_format
-Select_icon=S\u00e9lectionner_un_ic\u00f4ne
-Select_matches=S\u00e9lectionner_les_correspondances
-Select_new_ImportFormat_Subclass=S\u00e9lectionner_une_nouvelle_sous-classe_ImportFormat
-Select_the_tree_nodes_to_view_and_accept_or_reject_changes=S\u00e9lectionner_les_noeuds_de_l'arborescence_pour_voir,_et_accepter_ou_rejeter,_les_modifications
-Selected_entries=Les_entr\u00e9es_s\u00e9lectionn\u00e9es
-Selector_enabled_fields=Champs_de_s\u00e9lecteur_actifs
-Server_Hostname_\:=Nom_de_l'h\u00f4te_du_serveur_:
-Server_Type_\:=Type_de_serveur_:
-Set_field=Configurer_le_champ
-Set_fields=Configurer_les_champs
-Set_general_fields=D\u00e9finir_les_champs_g\u00e9n\u00e9raux
-Set_main_external_file_directory=D\u00e9finir_le_r\u00e9pertoire_principal_des_fichiers_externes
-Set_table_font=D\u00e9finir_la_police_de_la_table
-Settings=Param\u00e8tres
-Setup_selectors=G\u00e9rer_les_s\u00e9lecteurs
-Short_form=Forme_courte
-Shortcut=Raccourci
-Show/edit_BibTeX_source=Montrer/\u00e9diter_le_source_BibTeX
-Show_'Firstname_Lastname'=Ordre_d'affichage_'Pr\u00e9nom_Nom'
-Show_'Lastname,_Firstname'=Ordre_d'affichage_'Nom,_Pr\u00e9nom'
-Show_BibTeX_source_by_default=Par_d\u00e9faut,_afficher_l'onglet_Source_BibTeX
-Show_BibTeX_source_panel=Afficher_l'onglet_"Source_BibTeX"
-Show_confirmation_dialog_when_deleting_entries=Demander_une_confirmation_lors_de_la_suppression_d'entr\u00e9es
-Show_description=Montrer_la_description
-Show_dynamic_groups_in_<i>italics</i>=Afficher_les_groupes_dynamiques_en_<i>italique</i>
-Show_entries_*not*_in_group_selection=Montrer_les_entr\u00e9es_*non*_s\u00e9lectionn\u00e9es
-Show_file_column=Afficher_la_colonne_Fichier
-Show_icons_for_groups=Afficher_les_ic\u00f4nes_pour_les_groupes
-Show_last_names_only=Afficher_uniquement_les_noms_propres
-Show_names_unchanged=Ordre_des_noms_inchang\u00e9
-Show_one_less_rows=Afficher_une_ligne_de_moins
-Show_one_more_row=Afficher_une_ligne_de_plus
-Show_optional_fields=Montrer_les_champs_optionnels
-Show_PDF/PS_column=Afficher_la_colonne_PDF/PS
-Show_required_fields=Montrer_les_champs_requis
-Show_URL/DOI_column=Afficher_la_colonne_URL/DOI
-Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Afficher_un_message_d'avertissement_quand_une_clef_BibTeX_d\u00e9j\u00e0_existante_est_entr\u00e9e
-Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Afficher_une_fen\u00eatre_d'avertissement_quand_une_clef_BibTeX_vide_est_entr\u00e9e
-Simple_HTML=HTML_(simple)
-Size=Taille
-Skip=Passer
-Skipped_-_No_PDF_linked=Saut\u00e9_-_Pas_de_PDF_li\u00e9
-Skipped_-_PDF_does_not_exist=Omis_-_Le_PDF_n'existe_pas
-Skipped_entry.=Entr\u00e9e_omise
-Sort_alphabetically=Classer_alphab\u00e9tiquement
-Sort_Automatically=Trier_automatiquement
-Sort_order=Ordre_de_tri
-sort_subgroups=trier_les_sous-groupes
-Sorted_all_subgroups_recursively.=Tous_les_sous-groupes_r\u00e9cursivement_tri\u00e9s.
-Sorted_immediate_subgroups.=Sous-groupes_directs_tri\u00e9s.
-source_edit=\u00e9dition_du_source
-Special_Name_Formatters=Formateurs_de_nom_sp\u00e9ciaux
-Special_table_columns=Colonnes_de_tableau_particuli\u00e8res
-SQL_connection_established.=Connexion_SQL_\u00e9tablie.
-Start_incremental_search=D\u00e9marrer_la_recherche_incr\u00e9mentale
-Start_search=D\u00e9buter_la_recherche
-Starting_import=D\u00e9but_d'importation
-Statically_group_entries_by_manual_assignment=Grouper_manuellement_les_entr\u00e9es
-Status=Etat
-Stop=Arr\u00eat
-Store_journal_abbreviations=Stocker_les_abr\u00e9viations_de_journaux
-Store_string=Enregistrer_la_cha\u00eene
-Store_the_following_fields_with_braces_around_capital_letters=Stocker_les_champs_suivants_avec_des_accolades_autour_des_lettres_capitales_
-Stored_entry=Entr\u00e9e_enregistr\u00e9e
-Strings=Cha\u00eene
-Strings_for_database=Cha\u00eenes_pour_la_base
-Subdatabase_from_aux=BibTeX_\u00e0_partir_de_LaTex_aux
-Suggest=Sugg\u00e9rer
-Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Basculer_entre_les_noms_de_journaux_d\u00e9velopp\u00e9s_et_abr\u00e9g\u00e9s_si_le_nom_de_journal_est_connu.
-Synchronize_%0_links=Synchroniser_les_liens_%0
-Synchronize_file_links=Synchroniser_les_liens_vers_les_fichiers
-Synchronizing_%0_links...=Synchronisation_des_liens_%0...
-Table_appearance=Apparence_de_la_table
-Table_background_color=Couleur_d'arri\u00e8re-plan_de_la_table
-Table_grid_color=Couleur_de_la_grille_de_la_table
-Table_text_color=Couleur_du_texte_de_la_table
-Tabname=Nom_d'onglet
-Target_file_cannot_be_a_directory.=Le_fichier_cible_ne_peut_pas_\u00eatre_un_r\u00e9pertoire.
-Tertiary_sort_criterion=Crit\u00e8re_tertiaire_de_tri
-Test=Test
-Text_Input_Area=Zone_de_saisie_du_texte
-The_#_character_is_not_allowed_in_BibTeX_fields=Le_caract\u00e8re_#_est_interdit_dans_un_champ_BibTeX
-The_chosen_date_format_for_new_entries_is_not_valid=Le_format_de_date_choisi_pour_les_nouvelles_entr\u00e9es_n'est_pas_valide
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=L'encodage_'%0'_choisi_ne_peut_pas_encoder_les_caract\u00e8res_suivants_:_
-The_CiteSeer_fetch_operation_returned_zero_results.=La_recherche_CiteSeerX_n'a_retourn\u00e9_aucun_r\u00e9sultat.
-The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=La_version_actuelle_a_une_nouvelle_fa\u00e7on_de_g\u00e9rer_les_liens_vers_des_fichiers_externes.<br>Pour_en_profiter,_vos_liens_doivent_\u00eatre_convertis_en_un_autre_format<br>et_JabRef_doit_\u00eatre_configur\u00e9_pour_afficher_les_nouveaux_liens.
-the_field_<b>%0</b>=le_champ_<b>%0</b>
-The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Le_fichier<BR>'%0'<BR>a_\u00e9t\u00e9_modifi\u00e9_<BR>externalement !
-The_group_"%0"_already_contains_the_selection.=Le_groupe_"%0"_contient_d\u00e9j\u00e0_la_s\u00e9lection.
-The_label_of_the_string_can_not_be_a_number.=L'intitul\u00e9_de_la_cha\u00eene_ne_peut_\u00eatre_un_nombre.
-The_label_of_the_string_can_not_contain_spaces.=Un_nom_de_cha\u00eene_ne_peut_pas_contenir_d'espaces.
-The_label_of_the_string_can_not_contain_the_'#'_character.=Le_nom_de_la_cha\u00eene_ne_peut_pas_contenir_le_caract\u00e8re_'#'.
-The_output_option_depends_on_a_valid_import_option.=L'option_de_sortie_d\u00e9pend_d'une_option_d'importation_valide.
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=Le_PDF_contient_un_ou_plusieurs_enregistrements_BibTeX.\nVoulez-vous_les_importer_comme_de_nouvelles_entr\u00e9es_dans_la_base_de_donn\u00e9es_actuelle_?
-The_regular_expression_<b>%0</b>_is_invalid%c=L'expression_r\u00e9guli\u00e8re_<b>%0</b>_est_invalide%c
-The_search_is_case_insensitive.=La_recherche_n'est_pas_sensible_\u00e0_la_casse.
-The_search_is_case_sensitive.=La_recherche_est_sensible_\u00e0_la_casse.
-The_string_has_been_removed_locally=La_cha\u00eene_a_\u00e9t\u00e9_supprim\u00e9e_localement
-There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Il_y_a_des_doublons_potentiels_(marqu\u00e9_avec_un_ic\u00f4ne_'D')_qui_n'ont_pas_\u00e9t\u00e9_trait\u00e9s._Continuer_?
-this_button_will_update=Ce_bouton_sera_mis_\u00e0_jour
-This_database_was_written_using_an_older_version_of_JabRef.=Cette_base_a_\u00e9t\u00e9_\u00e9crite_par_une_version_ant\u00e9rieure_de_JabRef.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Cette_entr\u00e9e_n'a_pas_de_clef_BibTeX._En_g\u00e9n\u00e9rer_une_maintenant_?
-This_entry_is_incomplete=Cette_entr\u00e9e_est_incompl\u00e8te
-This_entry_type_cannot_be_removed.=Ce_type_d'entr\u00e9e_ne_peut_pas_\u00eatre_supprim\u00e9.
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Ce_lien_externe_est_du_type_'%0',_qui_est_ind\u00e9fini._Que_voulez-vous_faire_?
-This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Ce_groupe_contient_des_entr\u00e9es_bas\u00e9es_sur_un_ajout_manuel._Des_entr\u00e9es_peuvent_\u00eatre_ajout\u00e9es [...]
-This_group_contains_entries_in_which=Ce_groupe_contient_des_entr\u00e9es_pour_lesquelles
-This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Ce_groupe_contient_des_entr\u00e9es_dans_lesquelles_un_champ_contient_l'expression_r\u00e9guli\u00e8re_<b>%0</b> 
-This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Ce_groupe_contient_des_entr\u00e9es_dans_lesquelles_un_champ_contient_le_terme_<b>%0</b> 
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Ce_groupe_contient_des_entr\u00e9es_dont_le_champ_<b>%0</b>_contient_le_mot-clef_<b>%1</b> 
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Ce_groupe_contient_des_entr\u00e9es_dont_le_champ_<b>%0</b>_contient_l'expression_r\u00e9guli\u00e8re_<b>%1</b> 
-This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Ceci_est_simplement_une_fen\u00eatre_de_copier-coller_pour_importer_certains_champs_\u00e0_partir_d'un_texte_normal
-This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=JabRef_cherche_chaque_%0_lien_et_v\u00e9rifie_si_le_fichier_existe._Si_non,_des_options_vous_seront_propos\u00e9es<BR>pour_r\u00e9soudre_le_probl\u00e8me.
-This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Cette_op\u00e9ration_n\u00e9cessite_que_toutes_les_entr\u00e9es_s\u00e9lectionn\u00e9es_aient_des_clefs_BibTeX_d\u00e9finies
-This_operation_requires_at_least_one_entry.=Cette_op\u00e9ration_n\u00e9cessite_au_moins_une_entr\u00e9e.
-This_operation_requires_one_or_more_entries_to_be_selected.=Cette_op\u00e9ration_n\u00e9cessite_qu'une_ou_plusieurs_entr\u00e9es_soient_s\u00e9lectionn\u00e9es.
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Ceci_d\u00e9placera_tous_les_liens_externes_des_champs_'pdf'_et_'ps'_dans_le_champ_'%0'._Continuer_?
-To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Pour_configurer,_voir_<B>Options_->_G\u00e9rer_les_abr\u00e9viations_de_journaux</B>
-Toggle_abbreviation=Afficher/Masquer_l'abr\u00e9viation
-Toggle_entry_preview=Afficher/Masquer_l'aper\u00e7u
-Toggle_groups_interface=Afficher/Masquer_l'interface_des_groupes
-Toggle_search_panel=Afficher/Masquer_la_fen\u00eatre_de_recherche
-Try_different_encoding=Essayer_un_encodage_diff\u00e9rent
-Type_set_to_'other'=Type_configur\u00e9_comme_'other'_(autre)
-Unabbreviate_journal_names_of_the_selected_entries=D\u00e9velopper_les_noms_de_journaux_des_entr\u00e9es_s\u00e9lectionn\u00e9es
-Unabbreviated_%0_journal_names.=%0_noms_de_journaux_d\u00e9velopp\u00e9s.
-unable_to_access_LyX-pipe=Impossible_d'acc\u00e9der_au_canal_de_transmission_LyX
-Unable_to_create_graphical_interface=Impossible_de_cr\u00e9er_l'interface_graphique
-Unable_to_open_file.=Impossible_d'ouvrir_le_fichier
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Impossible_d'ouvrir_un_lien._L'application_'%0'_associ\u00e9e_avec_le_type_de_fichier_'%1'_n'a_pu_\u00eatre_appel\u00e9e.
-Unable_to_read_default_icon_theme.=Impossible_de_lire_le_th\u00e8me_d'ic\u00f4nes_par_d\u00e9faut
-Unable_to_read_icon_theme_file=Impossible_de_lire_le_fichier_de_th\u00e8me_d'ic\u00f4nes
-unable_to_write_to=Impossible_d'\u00e9crire_sur
-Undefined_file_type=Type_de_fichier_ind\u00e9fini
-Undo=Annuler
-Union=Union
-Unknown_bibtex_entries=Entr\u00e9es_BibTeX_inconnues
-unknown_edit=\u00e9dition_inconnue
-unknown_entry_type=type_d'entr\u00e9e_inconnue
-Unknown_export_format=Format_d'exportation_inconnu
-Unmark_all=Tout_d\u00e9s\u00e9tiqueter
-Unmark_entries=D\u00e9s\u00e9tiqueter_ces_entr\u00e9es
-Unmark_entry=D\u00e9s\u00e9tiqueter_l'entr\u00e9e
-Unmarked_selected=D\u00e9s\u00e9tiquetage_de_la_s\u00e9lection
-Unpack_EndNote_filter_set=D\u00e9compacter_la_s\u00e9rie_de_filtres_EndNote
-Unpacked_file.=Fichier_d\u00e9compact\u00e9.
-Unsupported_version_of_class_%0\:_%1=Version_non_support\u00e9e_de_la_classe_%0_:_%1
-untitled=sans_titre
-Up=Haut
-Update_to_current_column_widths=Figer_les_largeurs_actuelles_des_colonnes
-Updated_group_selection=S\u00e9lection_de_groupe_mise_\u00e0_jour
-Upgrade_external_links=Mettre_\u00e0_jour_les_liens_externes
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Mettre_\u00e0_jour_les_liens_externes_PDF/PS_pour_utiliser_le_champ_'%0'.
-Upgrade_file=Mettre_\u00e0_jour_le_fichier
-Upgrade_old_external_file_links_to_use_the_new_feature=Mettre_\u00e0_jour_les_anciens_liens_vers_les_fichiers_externes_pour_utiliser_cette_nouvelle_fonction
-Upgraded_links.=Liens_mis_\u00e0_jour.
-UPPER=MAJUSCULE
-Upper_Each_First=Majuscule_Chaque_Premi\u00e8re
-Upper_first=Majuscule_premi\u00e8re
-usage=usage
-Use_antialiasing_font=Utiliser_une_police_liss\u00e9e
-Use_autocompletion_for_the_following_fields=Utiliser_l'auto-g\u00e9n\u00e9ration_pour_les_champs_suivants
-Use_custom_icon_theme=Utiliser_un_th\u00e8me_d'ic\u00f4nes_personnalis\u00e9
-Use_default_viewer=Utiliser_l'afficheur_par_d\u00e9faut
-Use_inspection_window_also_when_a_single_entry_is_imported.=Utiliser_la_fen\u00eatre_d'inspection_m\u00eame_quand_une_seule_entr\u00e9e_est_import\u00e9e.
-Use_native_file_dialog=Utiliser_le_s\u00e9lectionneur_de_fichiers_natif
-Use_other_look_and_feel=Utiliser_une_autre_apparence
-Use_Regular_Expression_Search=Utiliser_l'expression_r\u00e9guli\u00e8re_pour_la_recherche
-Use_regular_expressions=Utiliser_les_expressions_r\u00e9guli\u00e8res
-Use_the_following_delimiter_character(s)=Utiliser_le(s)_caract\u00e8re(s)_de_s\u00e9paration_suivant(s)
-Username_\:=Nom_d'utilisateur_:
-Value_cleared_externally=Valeur_supprim\u00e9e_externalement
-Value_set_externally=Valeur_param\u00e9tr\u00e9e_externalement_
-verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=v\u00e9rifier_que_LyX_tourne_et_que_le_canal_de_transmission_LyX_est_valide
-View=Aper\u00e7u
-Vim_Server_Name=Nom_du_serveur_Vim_
-Waiting_for_ArXiv...=Attente_de_ArXiv...
-Warn_about_unresolved_duplicates_when_closing_inspection_window=Avertir_des_doublons_non_r\u00e9solus_lors_de_la_fermeture_de_la_fen\u00eatre_d'inspection
-Warn_before_overwriting_existing_keys=Avertir_avant_d'\u00e9craser_des_clefs_existantes
-Warning=Avertissement
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Avertissement_:_La_r\u00e9paration_du_fichier_n'a_pas_pu_\u00eatre_termin\u00e9e_;_votre_fichier_peut_avoir_\u00e9t\u00e9_corrompu._Message_d'erreur
-Warning_there_is_a_duplicate_key=Avertissement_%c_il_y_a_une_clef_dupliqu\u00e9e
-Warnings=Messages_d'avertissement
-web_link=Lien_internet
-What_do_you_want_to_do?=Que_voulez-vous_faire_?
-When_adding/removing_keywords,_separate_them_by=Lors_de_l'ajout/suppression_de_mots-clef,_les_s\u00e9parer_avec_
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Ecrit_les_m\u00e9tadonn\u00e9es_XMP_dans_les_PDFs_li\u00e9s_aux_entr\u00e9es_s\u00e9lectionn\u00e9es
-with=avec
-Word=Mot
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=Ecrire_l'entr\u00e9e_BibTeX_comme_des_m\u00e9tadonn\u00e9es_XMP_dans_un_PDF
-Write_XMP=Ecrire_XMP
-Write_XMP-metadata=Ecrire_les_m\u00e9tadonn\u00e9es_XMP
-Write_XMP-metadata_for_all_PDFs_in_current_database?=Ecrire_les_m\u00e9tadonn\u00e9es_XMP_pour_tous_les_PDFs_dans_la_base_courante_?
-Writing_XMP=Ecriture_XMP
-Writing_XMP_metadata...=Ecriture_des_m\u00e9tadonn\u00e9es_XMP
-Writing_XMP_metadata_for_selected_entries...=Ecriture_des_m\u00e9tadonn\u00e9es_XMP_pour_les_entr\u00e9es_s\u00e9lectionn\u00e9es
-Writing_XMP_to_'%0'...=Ecriture_des_XMP_dans_'%0'...
-Wrong_file_format=Format_de_fichier_incorrect
-Wrote_XMP-metadata=M\u00e9ta-donn\u00e9es_XMP_\u00e9crites
-Wrote_XMP_to_'%0'.=XMP_\u00e9crites_dans_'%0'.
-XMP-annotated_PDF=PDF_avec_annotations_XMP
-XMP_Export_Privacy_Settings=Param\u00e8tres_de_confidentialit\u00e9_pour_l'exportation_XMP
-XMP_metadata=M\u00e9tadonn\u00e9es_XMP
-XMP_metadata_found_in_PDF\:_%0=M\u00e9tadonn\u00e9es_XMP_trouv\u00e9es_dans_le_PDF:_%0
-You_must_restart_JabRef_for_this_to_come_into_effect.=Vous_devez_red\u00e9marrer_JabRef_pour_que_ce_changement_prenne_effet.
-You_have_changed_the_language_setting.=Vous_avez_modifi\u00e9_la_langue.
-You_have_changed_the_look_and_feel_setting.=Vous_avez_chang\u00e9_les_param\u00e8tres_d'apparence.
-You_have_cleared_this_field._Original_value=Vous_avez_vid\u00e9_ce_champ._Valeur_originale
-You_have_entered_an_invalid_search_'%0'.=Vous_avez_entr\u00e9_une_recherche_invalide_'%0'.
-You_must_choose_a_file_name_to_store_journal_abbreviations=Vous_devez_choisir_un_nom_de_fichier_pour_stocker_les_abr\u00e9viations_de_journaux
-You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Vous_devez_relancer_JabRef_pour_que_les_nouvelles_affectations_des_touches_soient_activ\u00e9es
-You_must_set_both_BibTeX_key_and_%0_directory=Vous_devez_d\u00e9finir_\u00e0_la_fois_la_clef_BibTeX_et_le_r\u00e9pertoire_%0
-Your_new_key_bindings_have_been_stored.=Votre_nouvelle_affectation_de_touche_a_\u00e9t\u00e9_enregistr\u00e9e
-The_following_fetchers_are_available\:=Les_outils_de_recherche_suivants_sont_disponible_:
-Could_not_find_fetcher_'%0'=L'outil_de_recherche_'%0'_n'a_pas_pu_\u00eatre_trouv\u00e9
-Running_Query_'%0'_with_fetcher_'%1'.=Execution_de_la_requ\u00eate_'%0'_avec_l'outil_de_recherche_'%1'.
-Please_wait!=Attendez_SVP_!
-Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=Le_requ\u00eate_'%0'_pour_l'outil_de_recherche_'%1'_n'a_retourn\u00e9_aucun_r\u00e9sultats.
-Open_SPIRES_entry=Ouvrir_l'entr\u00e9e_SPIRES
-Move/Rename_file=D\u00e9placer/Renommer_le_fichier
-File_moved=Fichier_d\u00e9plac\u00e9
-Move_file_failed=Echec_du_d\u00e9placement_du_fichier
-Could_not_move_file=Le_fichier_n'a_pas_pu_\u00eatre_d\u00e9plac\u00e9
-Could_not_find_file_'%0'.=Le_fichier_'%0'_n'a_pas_pu_\u00eatre_trouv\u00e9.
-Move/rename_file=D\u00e9placer/renommer_le_fichier
-Number_of_entries_successfully_imported=Nombre_d'entr\u00e9es_import\u00e9es_avec_succ\u00e8s
-Import_canceled_by_user=Importation_interrompue_par_l'utilisateur
-Progress\:_%0_of_%1=Progr\u00e8s_:_%0_de_%1
-Error_while_fetching_from_JSTOR=Erreur_au_cours_de_la_recherche_JSTOR
-Fetching_Medline_by_id...=Recherche_sur_Medline_par_id...
-Fetching_Medline_by_term...=Recherche_sur_Medline_par_terme...
-Medline_import_canceled=Importation_Medline_annul\u00e9e
-Please_enter_a_valid_number=SVP,_entrez_un_nombre_valide
-Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=SVP,_entrez_une_liste_s\u00e9par\u00e9e_par_des_virgules_d'ID_Medline_(nombres)_ou_de_termes_de_recherche.
-An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=Une_erreur_est_survenue_lors_de_la_recherche_\u00e0_partir_de_la_source_SPIRES_(%0)\:
-Error_while_fetching_from_Spires\:_=Erreur_lors_de_la_recherche_SPIRES\:_
-Connect_to_external_SQL_database=Se_connecter_\u00e0_une_base_SQL_externe
-Export_to_external_SQL_database=Exporter_vers_une_base_SQL_externe
-Show_results_in_dialog=Nouvelle_fen\u00eatre
-Global_search=Recherche_globale
-Show_search_results_in_a_window=Afficher_les_r\u00e9sultats_de_recherche_dans_une_fen\u00eatre
-Search_results=R\u00e9sultats_de_la_recherche
-Move_file_to_file_directory?=D\u00e9placer_le_fichier_vers_le_r\u00e9pertoire_de_fichiers_?
-Rename_to_'%0'=Renommer_vers_'%0'
-Move_to_file_directory=D\u00e9placer_vers_le_r\u00e9pertoire_de_fichiers
-You_have_changed_the_menu_and_label_font_size.=Vous_avez_modifi\u00e9_la_taille_de_police_des_menus_et_des_\u00e9tiquettes.
-Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=La_base_est_prot\u00e9g\u00e9e._L'enregistrement_ne_peut_\u00eatre_effectu\u00e9_tant_que_les_changements_externes_n'auront_pas_\u00e9t\u00e9_v\u00e9rifi\u00e9s.
-Protected_database=Base_prot\u00e9g\u00e9e
-Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Refuser_d'enregistrer_la_base_tant_que_les_changements_externes_ne_sont_pas_v\u00e9rifi\u00e9s.
-Database_protection=Protection_de_la_base
-Unable_to_save_database=Impossible_d'enregistrer_la_base
-BibTeX_key_generator=G\u00e9n\u00e9rateur_de_clefs_BibTeX
-Unable_to_open_link.=Impossible_d'ouvrir_un_lien.
-Search_JSTOR=Recherche_JSTOR
-Attempting_SQL_import...=Tentative_d'importation_SQL...
-BibO_RDF=BibO_RDF
-HTML_parser=Analyseur_syntaxique_HTML
-Move_the_keyboard_focus_to_the_entry_table=D\u00e9placer_le_curseur_vers_la_table_des_entr\u00e9es
-MIME_type=Type_MIME
-This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Cette_fonction_permet_aux_nouveaux_fichiers_d'\u00eatre_ouverts_ou_import\u00e9s_dans_une_fen\u00eatre_JabRef_d\u00e9j\u00e0_active<BR>au_lieu_d'ouvrir_une_nouvelle_fen\u00eatre._Par_ [...]
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Noter_que_ces_param\u00e8tres_sont_utilis\u00e9s_uniquement_pour_les_champs_obsol\u00e8tes_<b>pdf</b>_et_<b>ps</b>.<br>Pour_la_plupart_des_utilisateurs,_param\u00e9trer_le_<b>R\u00e9pertoire_de_fichiers_principal</b>_devrait_suffire.
-Legacy_file_fields=Champs_de_fichiers_obsol\u00e8tes
-This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=JabRef_cherche_chaque_%0_extension_et_v\u00e9rifie_si_le_fichier_existe._Si_non,_des_options_vous_seront_propos\u00e9es<BR>pour_r\u00e9soudre_le_probl\u00e8me.
-Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Lance_une_recherche,_par._ex._"--fetch=Medline\:cancer"
-The_ACM_Digital_Library=La_Biblioth\u00e8que_Num\u00e9rique_ACM
-Reset=R\u00e9initialiser
-Use_IEEE_LaTeX_abbreviations=Utiliser_les_abbr\u00e9viations_LaTeX_IEEE
-The_Guide_to_Computing_Literature=Le_Guide_de_la_Litt\u00e9rature_Informatique
-Search_ACM_Portal=Recherche_dans_le_portail_ACM
-Connection_to_ACM_Portal_failed=Echec_de_la_connexion_au_portail_ACM
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=A_l'ouverture_d'un_lien_de_fichier,_rechercher_un_fichier_correspondant_si_aucun_lien_n'est_d\u00e9fini
-Settings_for_%0=Param\u00e8tres_pour_%0
-Insert_selected_citations_into_Vim=Envoyer_les_citations_s\u00e9lectionn\u00e9es_dans_Vim
-RIS=RIS
-Assign_exclusively_to_group=Assigner_uniquement_au_groupe
-Bad_Request_'%0'.=Requ\u00eate_erronn\u00e9e_'%0'.
-
-Mark_entries_imported_into_an_existing_database=Etiqueter_les_entr\u00e9es_import\u00e9es_dans_une_base_existante
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=D\u00e9s\u00e9tiqueter_toutes_les_entr\u00e9es_avant_d'importer_de_nouvelles_entr\u00e9es_dans_une_base_existante
-
-Forward=Suivant
-Back=Pr\u00e9c\u00e9dent
-Sort_the_following_fields_as_numeric_fields=Trier_les_champs_suivants_comme_des_champs_num\u00e9riques
-Line_%0\:_Found_corrupted_BibTeX-key.=Ligne_%0_\:_Clef_BibTeX_corrompue_trouv\u00e9e.
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Ligne_%0_\:_Clef_BibTeX_corrompue_trouv\u00e9e_(contient_des_espaces).
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Ligne_%0_\:_Clef_BibTeX_corrompue_trouv\u00e9e_(virgule_manquante).
-Finished_downloading_full_text_document=T\u00e9l\u00e9chargement_du_document_cit\u00e9_termin\u00e9
-Unable_to_find_full_text_document_in_the_linked_web_page.=Impossible_de_trouver_le_document_cit\u00e9_dans_la_page_web_li\u00e9e.
-Connection_error_when_trying_to_find_full_text_document.=Erreur_de_connexion_lors_de_la_recherche_du_document_cit\u00e9.
-This_entry_provides_no_URL_or_DOI_links.=Cette_entr\u00e9e_ne_fournit_pas_de_liens_URL_ou_DOI.
-Full_text_article_download_failed=Echec_du_t\u00e9l\u00e9chargement_du_document_cit\u00e9
-Update_to_current_column_order=Enregistrer_l'ordre_actuel_des_colonnes
-
-Rename_field=Renommer_le_champ
-Set/clear/rename_fields=D\u00e9finir/vider/renommer_les_champs
-Rename_field_to\:=Renommer_le_champ_en_:
-Move_contents_of_a_field_into_a_field_with_a_different_name=D\u00e9placer_le_contenu_d'un_champ_vers_un_champ_d'un_nom_diff\u00e9rent
-
-You_can_only_rename_one_field_at_a_time=Vou_pouvez_supprimer_uniquement_un_champ_\u00e0_la_fois
-Remove_all_broken_links=Supprimer_tous_les_liens_invalides
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Le_port_%0_ne_peut_pas_\u00eatre_utilis\u00e9_pour_une_op\u00e9ration_\u00e0_distance_;_une_autre_application_pourrait_\u00eatre_en_train_de_l'utiliser._Essayer_de_sp\u00e9cifier_un_autre_port.
-
-Plugin_installer=Installeur_de_greffon
-Unable_to_create_plugin_directory=Impossible_de_cr\u00e9er_un_r\u00e9pertoire_de_greffon
-Unable_to_copy_file=Impossible_de_copier_un_fichier
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Greffon_install\u00e9_correctement._Vous_devez_red\u00e9marrer_JabRef_pour_charger_le_nouveau_greffon.
-Unable_to_create_user_plugin_directory=Impossible_de_cr\u00e9er_un_r\u00e9pertoire_de_greffon_utilisateur
-Plugin_installation_failed.=Echec_de_l'installation_du_greffon.
-The_same_version_of_this_plugin_is_already_installed.=La_m\u00eame_version_de_ce_greffon_est_d\u00e9j\u00e0_install\u00e9e.
-A_newer_version_of_this_plugin_is_already_installed.=Une_version_plus_r\u00e9cente_de_ce_greffon_est_d\u00e9j\u00e0_install\u00e9e.
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Une_ou_plusieurs_versions_plus_anciennes_de_ce_greffon_sont_install\u00e9es._Supprimer_les_anciennes_versions ?
-Old_versions_deleted_successfully.=Anciennes_versions_supprim\u00e9es_avec_succ\u00e8s.
-
-Install_plugin=Installer_un_greffon
-Download_plugin=T\u00e9l\u00e9charger_un_greffon
-Plugin_manager=Gestionnaire_de_greffons
-Delete_the_%0_selected_plugins?=Supprimer_les_%0_greffons_s\u00e9lectionn\u00e9s ?
-Delete_plugins=Suppression_des_greffons
-Delete_the_selected_plugin?=Supprimer_le_greffon_s\u00e9lectionn\u00e9 ?
-Delete_plugin=Suppression_du_greffon
-Enter_download_URL=Entrer_l'URL_de_t\u00e9l\u00e9chargement
-Plugin_name=Nom_du_greffon
-Version=Version
-Unknown=Inconnu
-Not_loaded=Non_charg\u00e9
-Loaded=Charg\u00e9
-Could_not_determine_version_of_=Echec_de_la_d\u00e9termination_de_la_version_de_
-Install_anyway?=Install\u00e9_quand_m\u00eame ?
-
-Looking_for_full_text_document...=T\u00e9l\u00e9chargement_du_document_cit\u00e9
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Suit_le_DOI_ou_le_lien_URL_et_tente_de_localiser_le_fichier_PDF_du_document_cit\u00e9
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Impossible_de_trouver_le_fichier_PDF_du_document_cit\u00e9._Aucun_algorithme_n'est_d\u00e9fini_pour_le_site_internet_'%0'.
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Lien_PDF_trouv\u00e9,_mais_r\u00e9ception_d'un_mauvais_type_MIME._Cela_pourrait_indiquer_que_vous_n'avez_pas_acc\u00e8s_au_fichier_PDF_du_document_cit\u00e9.
-
-Autosave=Sauvegarde_automatique
-Prompt_before_recovering_a_database_from_an_autosave_file=Demander_avant_la_r\u00e9cup\u00e9ration_d'une_base_de_donn\u00e9es_\u00e0_partir_d'une_sauvegarde_automatique
-Autosave_interval_(minutes)=Intervalle_de_sauvegarde_automatique_(minutes)
-Do_you_want_to_recover_the_database_from_the_autosave_file?=Voulez-vous_r\u00e9cup\u00e9rer_une_base_de_donn\u00e9es_\u00e0_partir_de_la_sauvegarde_automatique_?
-Recover_from_autosave=R\u00e9cup\u00e9ration_\u00e0_partir_d'une_sauvegarde_automatique
-%0_warnings=%0_messages_d'avertissement
-
-Save_in_current_table_sort_order=Enregistrer_dans_l'ordre_de_tri_actuel_de_la_table
-Export_in_current_table_sort_order=Exporter_dans_l'ordre_de_tri_actuel_de_la_table
-Export_ordered_by_author/editor/year=Exporter_selon_l'ordre_author/editor/year
-Export_entries_in_their_original_order=Exporter_les_entr\u00e9es_dans_leur_l'ordre_original
-Error_opening_file_'%0'.=Erreur_lors_de_l'ouverture_du_fichier_'%0'.
-Autosave_of_file_'%0'=Sauvegarde_automatique_du_fichier_'%0'
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Erreur_lors_de_la_sauvegarde_automatique_de_'%0'._A_la_place,_essai_d'ouverture_de_'%0'.
-
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=Greffons_install\u00e9s_dans_votre_r\u00e9pertoire_personnel_de_greffons_(%0)_:
-Plugins_installed_in_other_locations\:=Greffons_install\u00e9s_dans_d'autres_r\u00e9pertoires_:
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=Les_greffons_seront_supprim\u00e9s_au_prochain_d\u00e9marrage_de_JabRef.
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=Le_greffon_sera_supprim\u00e9_au_prochain_d\u00e9marrage_de_JabRef.
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Les_anciennes_versions_de_greffons_seront_supprim\u00e9es_au_prochain_d\u00e9marrage_de_JabRef.
-
-Formatter_not_found\:_%0=Formateur_non_trouv\u00e9_:_%0
-The_following_formatters_could_not_be_found=Les_formateurs_suivants_n'ont_pas_\u00e9t\u00e9_trouv\u00e9s
-
-Clear_inputarea=Vider_la_zone_de_saisie
-
-Automatically_set_file_links_for_this_entry=D\u00e9finir_automatiquement_les_liens_de_fichier_pour_cette_entr\u00e9e
-Could_not_save,_file_locked_by_another_JabRef_instance.=Echec_de_l'enregistrement,_le_fichier_est_verrouill\u00e9_par_une_autre_instance_de_JabRef.
-File_is_locked_by_another_JabRef_instance.=Le_fichier_est_verrouill\u00e9_par_une_autre_instance_de_JabRef.
-Do_you_want_to_override_the_file_lock?=Voulez-vous_outrepasser_le_verrouillage_du_fichier_?
-File_locked=Fichier_verrouill\u00e9
-Current_tmp_value=Valeur_tmp_actuelle
-Metadata_change=Changement_dans_les_m\u00e9tadonn\u00e9es
-Changes_have_been_made_to_the_following_metadata_elements=Des_modifications_ont_\u00e9t\u00e9_faites_aux_\u00e9l\u00e9ments_de_m\u00e9tadonn\u00e9es_suivants
-
-Generate_groups_for_author_last_names=Cr\u00e9ation_de_groupes_pour_les_noms_d'auteurs
-Generate_groups_for_editor_last_names=Cr\u00e9ation_de_groupes_pour_les_noms_d'\u00e9diteurs
-Generate_groups_from_keywords_in_a_BibTeX_field=Cr\u00e9ation_de_groupes_\u00e0_partir_de_mots-clefs_d'un_champ_BibTeX
-Enforce_legal_characters_in_BibTeX_keys=Imposer_des_caract\u00e8res_l\u00e9gaux_dans_les_clefs_BibTeX
-The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Le_caract\u00e8re_#_n'est_pas_autoris\u00e9_dans_les_cha\u00eenes_BibTeX_\u00e0_moins_d'\u00eatre_\u00e9chapp\u00e9_comme_dans_'\\#'.
-Before_saving,_please_edit_any_strings_containing_the_#_character.=Avant_l'enregistrement,_SVP,_\u00e9ditez_toute_cha\u00eene_contenant_le_caract\u00e8re_#.
-
-Save_without_backup?=Enregistrer_sans_sauvegarde_de_secours?
-Unable_to_create_backup=Impossible_de_cr\u00e9er_une_sauvegarde_de_secours
-
-File_directory_is_not_set_or_does_not_exist.=Le_r\u00e9pertoire_de_fichiers_n'est_pas_configur\u00e9_ou_n'existe_pas.
-Move_file_to_file_directory.=D\u00e9placer_le_fichier_vers_le_r\u00e9pertoire_de_fichiers.
-Rename_file_to=Renommer_le_fichier_en
-<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Toutes_les_entr\u00e9es</b>_(ce_groupe_ne_peut_pas_\u00eatre_\u00e9dit\u00e9_ou_supprim\u00e9)
-static_group=groupe_statique
-dynamic_group=groupe_dynamique
-refines_supergroup=raffinant_le_super-groupe
-includes_subgroups=incluant_les_sous-groupes
-contains=contient
-search_expression=expression_de_recherche
-
-Disable_file_renaming_in_non-native_file_dialog=D\u00e9sactiver_le_renommage_des_fichiers_pour_les_fen\u00eatres_de_fichier_non-native
-File_dialog=Fen\u00eatre_de_fichiers
-No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Pas_d'entr\u00e9es_trouv\u00e9es._Il_semble_que_vous_n'avez_pas_acc\u00e8s_\u00e0_la_recherche_JStor
-
-Search_ScienceDirect=Recherche_ScienceDirect
-Error_while_fetching_from_ScienceDirect=Erreur_lors_de_la_recherche_ScienceDirect_
-
-Error_initializing_custom_export_format_from_string_'%0'=Erreur_lors_de_l'initialisation_du_format_d'exportation_personnalis\u00e9_\u00e0_partir_de_la_cha\u00eene_'%0'
-
-BibLaTeX_mode=mode_BibLaTeX
-Optional_fields_2=Champs_optionnels_2
-Please_wait=Patientez,_s'il_vous_pla\u00eet
-Waiting_for_save_operation_to_finish=Attente_de_la_fin_de_l'op\u00e9ration_de_sauvegarde
-Resolving_duplicate_BibTeX_keys...=Traitement_des_clefs_BibTeX_dupliqu\u00e9es...
-Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Traitement_des_clefs_BibTeX_dupliqu\u00e9es_termin\u00e9._%0_entr\u00e9es_modifi\u00e9es.
-This_database_contains_one_or_more_duplicated_BibTeX_keys.=Cette_base_contient_au_moins_une_clef_BibTeX_dupliqu\u00e9e.
-Do_you_want_to_resolve_duplicate_keys_now?=Voulez-vous_traiter_les_clefs_dupliqu\u00e9es_maintenant_?
-
-Find_and_remove_duplicate_BibTeX_keys=Recherche_et_supprime_les_clefs_BibTeX_dupliqu\u00e9es
-Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Syntaxe_attendue_pour_--fetch='<name_of_fetcher>:<query>'
-Duplicate_BibTeX_key=Clef_BibTeX_dupliqu\u00e9e
-Duplicate_key=Clef_dupliqu\u00e9e
-Generate_key=G\u00e9n\u00e9rer_une_clef
-Import_marking_color=Importer_les_couleurs_de_marquage
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_entr\u00e9es_trouv\u00e9es._Pour_r\u00e9duire_la_charge_du_serveur,_seulement_%1_seront_t\u00e9l\u00e9charg\u00e9es._Cela_sera_tr\u00e8s_lent_pour_ne_pas_poser_de_probl\u00e8me_avec_ACM.
-BibTeX_importer=Filtres_d'importation_BibTeX
-Always_add_letter_(a,_b,_...)_to_generated_keys=Toujours_ajouter_une_lettre_(a,_b,_...)_aux_clefs_g\u00e9n\u00e9r\u00e9es
-
-Ensure_unique_keys_using_letters_(a,_b,_...)=Assurer_l'unicit\u00e9_des_clefs_(a,_b,_...)
-Ensure_unique_keys_using_letters_(b,_c,_...)=Assurer_l'unicit\u00e9_des_clefs_(b,_c,_...)
-Entry_editor_active_background_color=Couleur_du_fond_actif_de_l'\u00e9diteur_d'entr\u00e9es
-Entry_editor_background_color=Couleur_du_fond_de_l'\u00e9diteur_d'entr\u00e9es
-Entry_editor_font_color=Couleur_de_la_police_de_l'\u00e9diteur_d'entr\u00e9es
-Entry_editor_invalid_field_color=Couleur_de_champ_invalide_de_l'\u00e9diteur_d'entr\u00e9es
-
-Table_and_entry_editor_colors=Couleurs_de_la_table_et_de_l'\u00e9diteur_d'entr\u00e9es
-
-An_autosave_file_was_found_for_this_database._This_could_indicate_=Un_fichier_de_sauvegarde_automatique_a_\u00e9t\u00e9_trouv\u00e9_pour_cette_base_de_donn\u00e9es._Cela_pourrait_indiquer_
-that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=que_JabRef_ne_s'est_pas_arr\u00e9t\u00e9_proprement_lors_de_la_derni\u00e8re_utilisation_de_ce_fichier.
-General_file_directory=R\u00e9pertoire_g\u00e9n\u00e9ral
-User-specific_file_directory=R\u00e9pertoire_sp\u00e9cifique_\u00e0_l'utilisateur
-Error_setting_look_and_feel=Erreur_dans_les_param\u00e8tres_d'apparence
-Search_failed\:_illegal_search_expression=Echec_de_la_recherche_:_Expression_de_recherche_ill\u00e9gale
-Show_ArXiv_column=Montrer_la_colonne_ArXiv
-<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>D\u00e9compacter_le_fichier_zip_contenant_les_filtres_d'importation/exportation_pour_Endnote,<BR>pour_une_interop\u00e9rabilit\u00e9_optimale_avec_JabRef</HTML>
-
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Surligner_les_groupes_qui_contiennent_des_entr\u00e9es_contenues_dans_un_des_groupes_s\u00e9lectionn\u00e9s
-
-
-You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=Vous_devez_entrer_dans_le_champ_texte_une_valeur_enti\u00e8re_comprise_entre_1025_et_65535_pour
-Automatically_open_browse_dialog_when_creating_new_file_link=Ouvrir_automatiquement_la_fen\u00eatre_de_navigation_lors_de_la_cr\u00e9ation_d'un_nouveau_lien_de_fichier
-
-Import_Metadata_from\:=Importer_les_m\u00e9tadonn\u00e9es_depuis:
-Choose_the_source_for_the_metadata_import=Choisir_la_source_pour_l'importation_des_m\u00e9tadonn\u00e9es
-Create_entry_based_on_XMP_data=Cr\u00e9er_une_entr\u00e9e_bas\u00e9e_sur_les_donn\u00e9es_XMP
-Create_entry_based_on_data_fetched_from=Cr\u00e9er_une_entr\u00e9e_bas\u00e9e_sur_les_donn\u00e9es_r\u00e9cup\u00e9r\u00e9es_depuis
-Create_blank_entry_linking_the_PDF=Cr\u00e9er_une_entr\u00e9e_vide_li\u00e9e_au_PDF
-Only_attach_PDF=Lier_uniquement_le_PDF
-Mr._dLib_Metadata_Entries_Associated_With\:=Entr\u00e9es_de_m\u00e9tadonn\u00e9es_Mr._dLib_associ\u00e9es_avec_:
-Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Entr\u00e9es_de_m\u00e9tadonn\u00e9es_Mr._dLib_associ\u00e9e_avec_un_fichier_PDF
-Title=Titre
-Author(s)=Auteur(s)
-Published_Year=Ann\u00e9e_de_publication
-No_metadata_found.=Aucune_m\u00e9tadonn\u00e9e_trouv\u00e9e.
-Mr._dLib_web_service_is_temporarily_unavailable.=Le_service_Web_Mr._dLib_est_temporairement_indisponible.
-Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Le_service_Web_Mr._dLib_est_temporairement_arr\u00e9t\u00e9._Essayer_plus_tard_SVP.
-You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Vous_n'\u00eates_pas_connect\u00e9_\u00e0_internet._Pour_acc\u00e9der_au_service_web_Mr._dLib,_une_connexion_internet_est_n\u00e9cessaire.
-No_Internet_Connection.=_Pas_de_connexion_internet.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Cette_version_de_JabRef_tente_d'acc\u00e9der_\u00e0_une_ancienne_version_du_service_web_Mr._dLib_qui_n'est_plus_en_service._This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nSVP,_allez_sur_http://jabref.sourceforge. [...]
-Web_Service_Version_Outdated=Version_de_service_web_d\u00e9pass\u00e9e
-The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=La_version_avec_laquelle_vous_essayez_d'acc\u00e9der_au_service_web_Mr._dLib_est_d\u00e9pass\u00e9e.
-Update_empty_fields_with_data_fetched_from=Mettre_\u00e0_jour_les_champs_vides_\u00e0_partir_des_donn\u00e9es_r\u00e9cup\u00e9r\u00e9es_depuis
-Create_New_Entry=Cr\u00e9er_une_nouvelle_entr\u00e9e
-Update_Existing_Entry=Mettre_\u00e0_jour_une_entr\u00e9e_existante
-Mr._dLib=Mr._dLib
-More_information=Plus_d'information
-Fetching_Metadata...=R\u00e9cup\u00e9ration_des_m\u00e9tadonn\u00e9es...
-Metadata=M\u00e9tadonn\u00e9es
-Autocomplete_names_in_'Firstname_Lastname'_format_only=Compl\u00e9tion_automatique_des_noms_uniquement_dans_le_format_'Pr\u00e9nom_Nom'
-Autocomplete_names_in_'Lastname,_Firstname'_format_only=Compl\u00e9tion_automatique_des_noms_uniquement_dans_le_format_'Nom,_Pr\u00e9nom'
-Autocomplete_names_in_both_formats=Compl\u00e9tion_automatique_des_noms_dans_les_2_formats
-Marking_color_%0=Marquage_de_la_couleur_%0
-
-The_name_'comment'_can_not_be_used_as_an_entry_type_name.=Le_nom_'comment'_ne_peut_pas_\u00eatre_utilis\u00e9_comme_nom_de_type_d'entr\u00e9e.
-You_must_enter_an_integer_value_in_the_text_field_for=Vous_devez_entrer_une_valeur_enti\u00e8re_dans_le_champ_texte_pour
-File_directory=R\u00e9pertoire_de_fichiers
-Send_as_email=Exp\u00e9dier_par_courriel
-References=R\u00e9f\u00e9rences
-Sending_of_emails=Envoi_des_courriels
-Subject_for_sending_an_email_with_references=Sujet_pour_l'envoi_d'un_courriel_avec_des_r\u00e9f\u00e9rences
-Automatically_open_folders_of_attached_files=Ouvrir_automatiquement_les_r\u00e9pertoires_des_fichiers_attach\u00e9s
-Create_entry_based_on_content=Cr\u00e9er_une_entr\u00e9e_sur_la_base_du_contenu
-Store_choice_as_default=Enregistrer_comme_choix_par_d\u00e9faut
-Do_not_show_this_box_again_for_this_import=Ne_plus_afficher_cette_bo\u00eete_de_dialogue_pour_cette_importation
-Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Toujours_utiliser_ce_style_d'importation_PDF_(et_ne_plus_demander_\u00e0_chaque_importation)
-Error_creating_email=Erreur_lors_de_la_cr\u00e9ation_du_courriel
-Could_not_open_directory=Le_r\u00e9pertoire_n'a_pas_pu_\u00eatre_ouvert
-Entries_added_to_an_email=Entr\u00e9es_ajout\u00e9es_\u00e0_un_courriel
-exportFormat=Format_d'exportation
-Output_file_missing=Fichier_de_sortie_manquant
-No_search_matches.=Recherche_sans_correspondance.
-The_output_option_depends_on_a_valid_input_option.=L'option_de_sortie_d\u00e9pend_d'une_option_d'entr\u00e9e_valide.
-Default_import_style_for_drag&drop_of_PDFs=Style_d'importation_par_d\u00e9faut_pour_le_glisser-d\u00e9placer_des_PDFs
-Default_PDF_file_link_action=Action_par_d\u00e9faut_pour_les_liens_vers_les_fichiers_PDF
-File_name_format_pattern=Mod\u00e8le_de_format_de_nom_de_fichier
-PostgreSQL_database=Base_de_donn\u00e9es_PostgreSQL
-DIN_1505=DIN_1505
-Wrong_Format=Mauvais_format
-Path_to_gnuclient_or_emacsclient=Chemin_vers_gnuclient_ou_emacsclient
-Additional_parameters=Param\u00e8tres_additionnels
-Encrypted_documents_are_not_supported=Les_documents_crypt\u00e9s_ne_sont_pas_pris_en_charge
-Cite_selected_entries=Citer_les_entr\u00e9es_s\u00e9lectionn\u00e9es_entre_parenth\u00e8ses
-Cite_selected_entries_with_in-text_citation=Citer_les_entr\u00e9es_s\u00e9lectionn\u00e9es_comme_incluse_dans_le_texte
-Cite_special=Citer_(cas_particuliers)
-Extra_information_(e.g._page_number)=Informations_compl\u00e9mentaires_(ex_:_num\u00e9ro_de_page)_
-Manage_citations=G\u00e9rer_les_citations
-Problem_modifying_citation=Probl\u00e8me_lors_de_la_modification_de_la_citation
-Citation=Citation
-Context=Context
-Extra_information=Informations_compl\u00e9mentaires
-Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=L'entr\u00e9e_BibTeX_pour_la_marqueur_de_citation_'%0'_n'a_pas_pu_\u00eatre_trait\u00e9e.
-Styles=Styles
-Select_style=S\u00e9lectionner_le_style
-This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Voici_la_liste_des_styles_disponibles._S\u00e9lectionnez_celui_que_vous_voulez_utiliser.
-Journals=Journaux
-Cite=Citer_entre_parenth\u00e8ses
-Cite_in-text=Citer_directement_dans_le_texte
-Insert_empty_citation=Ins\u00e9rer_des_citations_vides
-Merge_citations=Fusionner_des_citations
-Manual_connect=Connexion_manuelle
-Select_Writer_document=S\u00e9lectionner_le_document_Writer
-Sync_OO_bibliography=Synchroniser_la_bibliographie_OO
-OpenOffice=OpenOffice/LibreOffice
-Select_which_open_Writer_document_to_work_on=S\u00e9lectionner_le_document_Writer_ouvert_sur_lequel_travailler
-Connected_to_document=Connect\u00e9_au_document
-Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Ins\u00e9rer_une_citation_sans_texte_(l'entr\u00e9e_apparaitra_dans_la_liste_des_r\u00e9f\u00e9rences)
-Cite_selected_entries_with_extra_information=Citer_les_entr\u00e9es_s\u00e9lectionn\u00e9es_avec_des_informations_compl\u00e9mentaires
-Ensure_that_the_bibliography_is_up-to-date=Assure_que_la_bibliographie_est_\u00e0_jour.
-Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=Votre_document_OpenOffice_appelle_la_clef_BibTeX_'%0',_qui_n'a_pas_pu_\u00eatre_trouv\u00e9e_dans_votre_base_actuelle.
-Unable_to_synchronize_bibliography=Impossible_de_synchroniser_la_bibliographie
-Combine_pairs_of_citations_that_are_separated_by_spaces_only=Combiner_les_paires_de_citations_qui_ne_sont_s\u00e9par\u00e9es_que_par_des_espaces
-Autodetection_failed=La_d\u00e9tection_automatique_a_\u00e9chou\u00e9e
-Connecting=Connexion_en_cours
-Please_wait...=Patientez_s'il_vous_plait...
-Unable_to_connect=Connexion_impossible
-Set_connection_parameters=D\u00e9finir_les_param\u00e8tres_de_connexion
-Path_to_OpenOffice_directory=Chemin_vers_le_r\u00e9pertoire_d'OpenOffice
-Path_to_OpenOffice_executable=Chemin_vers_l'ex\u00e9cutable_d'OpenOffice
-Path_to_OpenOffice_library_dir=Chemin_vers_le_r\u00e9pertoire_biblioth\u00e8que_d'OpenOffice
-Autodetect=D\u00e9tecter_automatiquement
-Connection_lost=Connexion_perdue
-The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Le_format_de_paragraphe_est_control\u00e9_par_le_propri\u00e9t\u00e9_'ReferenceParagraphFormat'_ou_'ReferenceHeaderParagraphFormat'_du_fichier_de_style.
-The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Le_format_de_caract\u00e8res_est_control\u00e9_par_la_propri\u00e9t\u00e9_de_citation_'CitationCharacterFormat'_du_fichier_de_style.
-Automatically_sync_bibliography_when_inserting_citations=Synchroniser_automatiquement_la_bibliographie_lors_de_l'insertion_de_citations
-Look_up_BibTeX_entries_in_the_active_tab_only=Rechercher_les_entr\u00e9es_BibTeX_uniquement_dans_l'onglet_actif
-Look_up_BibTeX_entries_in_all_open_databases=Rechercher_les_entr\u00e9es_BibTeX_dans_toutes_les_bases_ouvertes
-Use_in-parenthesis_citation=Utiliser_une_citation_entre_parenth\u00e8ses
-Use_in-text_citation=Utiliser_une_citation_incluse_dans_le_texte
-Autodetecting_paths...=Autod\u00e9tection_des_chemins...
-Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=L'installation_d'OpenOffice_n'a_pas_pu_\u00eatre_d\u00e9tect\u00e9e_automatiquement._SVP,_choisissez_le_r\u00e9pertoire_d'installation_manuellement.
-Could_not_find_OpenOffice_installation=L'installation_d'OpenOffice_n'a_pas_pu_\u00eatre_trouv\u00e9e
-Directories=R\u00e9pertoires
-Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Plus_d'un_ex\u00e9cutable_OpenOffice_a_\u00e9t\u00e9_trouv\u00e9._SVP,_choisissez_celui_auquel_il_faut_se_connecter_:
-Choose_OpenOffice_executable=Choisissez_l'ex\u00e9cutable_OpenOffice
-Select_document=S\u00e9lectionner_un_document
-Edit_Group_Membership=Editer_l'appartenance_aux_groupes
-PostgreSQL=PostgreSQL
-Highlight_Words=Surligner_les_mots
-JSTOR_import_cancelled=Importation_JSTOR_annul\u00e9e
-HTML_list=Liste_HTML
-Click_group_to_toggle_membership_of_selected_entries=Cliquer_sur_un_groupe_pour_inverser_l'appartenance_des_entr\u00e9es_s\u00e9lectionn\u00e9es
-Use_EMACS_23_insertion_string=Utiliser_la_cha\u00eene_d'insertion_d'EMACS_23
-Normalize_to_BibTeX_name_format=Normaliser_au_format_de_noms_BibTeX
-If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=Si_possible,_normaliser_cette_liste_de_noms_afin_de_correspondre_au_formatage_des_noms_au_standard_BibTeX
-Could_not_open_%0=%0_n'a_pas_pu_\u00eatre_ouvert
-Unknown_import_format=Format_d'importation_inconnu
-Open_INSPIRE_entry=Ouvrir_l'entr\u00e9e_INSPIRE
-An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=Une_erreur_est_survenue_lors_de_la_recherche_\u00e0_partir_de_la_source_INSPIRE_(%0)_:
-Error_while_fetching_from_Inspire\:_=Erreur_lors_d'une_recherche_sur_INSPIRE_:_
-Web_search=Recherche_web
-Autocomplete_names=Compl\u00e9tion_automatique_des_noms
-You_must_select_either_a_valid_style_file,_or_use_the_default_style.=Vous_devez_s\u00e9lectionner_soit_un_style_de_fichier_valide,_soit_utiliser_le_style_par_d\u00e9faut.
-Default_style=Style_par_d\u00e9faut
-Choose_style_file_directly=Choisir_directement_le_style_de_fichier_
-Choose_from_a_directory=Choisir_\u00e0_partir_d'un_r\u00e9pertoire_
-No_directory_defined_for_%0-files=Aucun_r\u00e9pertoire_n'est_d\u00e9fini_pour_les_fichiers_%0
-Allow_file_links_relative_to_each_bib_file's_location=Autoriser_les_liens_de_fichier_relatif_\u00e0_chaque_r\u00e9pertoire_de_fichier_BibTeX
-Style_selection=S\u00e9lection_du_style
-The_panel_below_shows_the_definition_of_the_default_style.=La_fen\u00eatre_ci-dessous_montre_la_d\u00e9finition_du_style_par_d\u00e9faut.
-If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=Si_vous_voulez_l'utiliser_comme_mod\u00e8le_pour_un_nouveau_style,_vous_pouvez_copier_le_contenu_dans_un_nouveau_fichier_.jstyle
-
-Default_style_(author-year_citations)=Style_par_d\u00e9faut_(citations_auteur-ann\u00e9e)
-Default_style_(numerical_citations)=Style_par_d\u00e9faut_(citations_num\u00e9riques)
-No_valid_style_file_defined=Aucun_style_de_fichier_valide_n'est_d\u00e9fini
-Choose_pattern=Choisissez_un_mod\u00e8le
-Use_the_bib_file_location_as_primary_file_directory=Utiliser_le_r\u00e9pertoire_du_fichier_bib_comme_r\u00e9pertoire_principal_de_fichiers
-Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=Le_programme_gnuclient/emacsclient_n'a_pas_pu_\u00eatre_lanc\u00e9._Assurez-vous_que_les_programmes_gnuclient/emacsclient_sont_install\u00e9s_et_disponible_dans_le_PATH.
-Built-in_journal_list=Liste_de_journaux_interne
-OpenOffice/LibreOffice_connection=Connexion_OpenOffice/LibreOffice
-You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=Vous_pouvez_ajouter_des_noms_de_journaux_suppl\u00e9mentaires_en_param\u00e9trant_une_liste_de_journaux_personnelle<br>_ou_en_cr\u00e9ant_des_liens_vers_des_listes_de_journaux_externes
-JabRef_includes_a_built-in_list_of_journal_abbreviations.=JabRef_int\u00e8gre_une_liste_d'abr\u00e9viations_de_journaux.
-You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=Vous_devez_s\u00e9lectionner_soit_un_style_de_fichier_valide,_soit_utiliser_un_des_styles_par_d\u00e9faut.
-You_must_select_either_a_valid_style_file,_or_use_a_default_style.=Vous_devez_s\u00e9lectionner_soit_un_style_de_fichier_valide,_soit_utiliser_un_style_par_d\u00e9faut
-
-Show=Afficher
-
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=Ceci_est_simplement_une_fenêtre_de_copier-coller._Commencez_par_charger_ou_coller_du_texte_dans_la_zone_de_saisie_de_texte.<br>Ensuite,_vous_pouvez_sélectionner_des_portions_de_texte_et_les_attribuer_à_des_champs_BibTeX.
-Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=Biblioth\u00e8que_Java_Bouncy_Castle_library_non_trouv\u00e9._S'il_vous_plait,_t\u00e9l\u00e9chargez_e__installez-l\u00e0._Pour_plus_d'informations,_voir_http://www.bouncycastle.org/.
-
-This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=Cette_fonction_g\u00e9n\u00e8re_une_nouvelle_base_de_donn\u00e9es_bas\u00e9es_sur_les_entr\u00e9es_requises_par_un_document_LaTeX_existant.
-You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=Vous_devez_s\u00e9lectionnner_une_de_vos_bases_de_donn\u00e9es_ouvertes_\u00e0_partir_de_laquelle_choisir_vos_entre\u00e9es,_ainsi_que_le_fichier_AUX_produit_par_LaTeX_lors_de_la_compilation_du_document.
-First_select_entries_to_clean_up.=Commencez_par_s\u00e9lectionner_les_entr\u00e9es_\u00e0_nettoyer
-Cleanup_entry=Nettoyage_des_entr\u00e9es
-Autogenerate_PDF_Names=G\u00e9n\u00e9ration_automatique_des_noms_des_PDF
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=La_g\u00e9n\u00e9ration_automatique_des_noms_des_PDF_ne_peut_pas_\u00eatre_annul\u00e9e._Continuer?
-File_rename_failed_for=Le_renommage_des_fichiers_a_\u00e9chouer_pour
-You_have_toggled_the_BibLaTeX_mode.=Vous_avez_activ\u00e9_le_mode_BibLaTeX
-Use_full_firstname_whenever_possible=Utiliser_le_pr\u00e9nom_en_entier_quand_c'est_possible
-Use_abbreviated_firstname_whenever_possible=Utiliser_le_pr\u00e9nom_abr\u00e9g\u00e9_quand_c'est_possible
-Use_abbreviated_and_full_firstname=Utiliser_le_pr\u00e9nom_abr\u00e9g\u00e9_et_entier
-Autocompletion_options=Options_de_la_compl\u00e9tion_automatique
-Autocomplete_after_following_number_of_characters=Compl\u00e9tion_automatique_apr\u00e8s_un_nombre_de_caract\u00e8res_\u00e9gal_\u00e0
-Name_format_used_for_autocompletion=Format_de_nom_utilis\u00e9_pour_la_compl\u00e9tion_automatique
-Treatment_of_first_names=Traitement_des_pr\u00e9noms
-No_icon_found_for_%0=Aucun_ic\u00f4ne_trouv\u00e9_pour_%0
-Cleanup_entries=Entr\u00e9es_nettoy\u00e9es
-Automatically_assign_new_entry_to_selected_groups=Assigner_automatiquement_les_nouvelles_entr\u00e9es_aux_groupes_s\u00e9lectionn\u00e9s
-Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=D\u00e9placer_les_DOIs_des_champs_note_et_URL_vers_le_champ_DOI,_et_supprimer_le_prefix_http
-Format_content_of_month_field_to_#mon#=Formater_le_contenu_du_champ_mois_en_#mon#
-Ensure_that_page_ranges_are_of_the_form_num1--num2=S'assurer_que_les_gammes_de_pages_sont_au_format_nb1--nb2
-Make_paths_of_linked_files_relative_(if_possible)=Rendre_relatifs_les_chemins_des_fichiers_li\u00e9s_(si_possible)
-Rename_PDFs_to_given_file_name_format_pattern=Renommer_les_PDF_selon_le_mod\u00e8le_donn\u00e9_de_format_de_nom_de_fichier
-Rename_only_PDFs_having_a_relative_path=Renommer_uniquement_les_PDF_ayant_un_chemin_relatif
-What_would_you_like_to_clean_up?=Voulez-vous_lancer_le_nettoyage_?
-Doing_a_cleanup_for_%0_entries...=Nettoyage_en_cours_pour_%0_entr\u00e9es...
-No_entry_needed_a_clean_up=Aucune_entr\u00e9e_ne_n\u00e9cessitait_un_nettoyage
-One_entry_needed_a_clean_up=Une_entr\u00e9e_n\u00e9cessitait_un_nettoyage
-%0_entries_needed_a_clean_up=%0_entr\u00e9es_n\u00e9cessitaient_un_nettoyage
-Imported_=Import\u00e9_
-Error_importing_from_database=Erreur_d'importation_\u00e0_partir_de_la_base_de_donn\u00e9es
-
-Minimize_to_system_tray=Minimiser_vers_la_barre_des_t\u00e2ches
-
-Incomplete_search_results=R\u00e9sultats_de_recherche_incomplets
-%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=%0_entr\u00e9es_ont_\u00e9t\u00e9_trouv\u00e9es,_mais_seulement_%1_ont_pu_\u00eatre_trait\u00e9es.
-
-Error_downloading_file_'%0'=Erreur_lors_du_t\u00e9l\u00e9chargement_du_fichier_'%0'
-Download_failed=Echec_du_t\u00e9l\u00e9chargement
-
-%0_databases_will_be_imported=%0_bases_de_donn\u00e9es_seront_import\u00e9es
-Importing_cancelled=Importation_annul\u00e9e
-There_are_no_available_databases_to_be_imported=Il_n'y_a_pas_de_base_de_donn\u00e9es_\u00e0_importer
-Import_from_SQL_database=Importer_\u00e0_partir_d'une_base_SQL
-Imported_%0_databases_successfully=%0_bases_ont_\u00e9t\u00e9_import\u00e9es_avec_succ\u00e8s
-<_CREATE_NEW_DATABASE_>=<_CREER_UNE_NOUVELLE_BASE_>
-Remove_Selected=Supprimer_la_s\u00e9lection
-SQL_Database_Exporter=Exporteur_de_base_SQL
-Select_target_SQL_database\:=S\u00e9lectionner_la_base_SQL_cible_:
-SQL_Database_Importer=Importeur_de_base_SQL
-Please_select_which_JabRef_databases_do_you_want_to_import\:=SVP,_s\u00e9lectionnez_les_bases_JabRef_\u00e0_importer_:
-
-Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=L'arbre_des_groupes_n'a_pu_\u00eatre_analys\u00e9._Si_vous_sauvez_la_base_BibTeX,_tous_les_groupes_seront_perdus.
-Attach_file=Attachez_un_fichier
-
-Setting_all_preferences_to_default_values.=Initialiser_la_configuration_aux_valeurs_par_d\u00e9faut.
-Resetting_preference_key_'%0'=R\u00e9initialiser_la_clef_de_configuration_'%0'
-Unknown_preference_key_'%0'=Clef_de_configuration_'%0'_inconnue
-Unable_to_clear_preferences.=Impossible_d'initialiser_la_configuration.
-
-Reset_preferences_(key1,key2,..._or_'all')=R\u00e9initialiser_la_configuration_(clef1,_clef2,..._ou_'toutes')
-Find_unlinked_files=Trouver_les_fichiers_non_li\u00e9s
-Select_All=Tout_s\u00e9lectionner
-Unselect_All=Tout_d\u00e9s\u00e9lectionner
-Expand_All=Tout_\u00e9tendre
-Collapse_All=Tout_masquer
-Select_Directory=S\u00e9lectionner_un_r\u00e9pertoire
-Choose_Directory=Choisir_un_r\u00e9pertoire
-Use_the_selected_directory_to_start_with_the_search.=Utiliser_le_r\u00e9pertoire_s\u00e9lectionn\u00e9_pour_lancer_la_recherche.
-Browse...=Naviguer...
-Opens_the_file_browser.=Ouvre_l'explorateur_de_fichier.
-Scan_directory=Examiner_le_r\u00e9pertoire
-Searches_the_selected_directory_for_unlinked_files.=Rechercher_les_fichiers_non_li\u00e9s_dans_le_r\u00e9pertoire_s\u00e9lectionn\u00e9
-Starts_the_import_of_bibtex_entries.=D\u00e9buter_l'importation_des_entr\u00e9es_BibTeX
-Leave_this_dialog.=Quitter_cette_fen\u00eatre_de_dialogue.
-Create_directory_based_keywords=Cr\u00e9er_les_mots-clefs_selon_le_r\u00e9pertoire
-Creates_keywords_in_created_entrys_with_directory_pathnames=Ajoute_des_mot-clefs_dans_les_r\u00e9pertoires_selon_les_chemins_de_r\u00e9pertoire
-Select_a_directory_where_the_search_shall_start.=S\u00e9lectionner_un_r\u00e9pertoire_o\u00f9_d\u00e9butera_la_recherche
-Select_file_type\:=S\u00e9lectionner_le_type_de_fichier_:
-These_files_are_not_linked_in_the_active_database.=Ces_fichiers_ne_sont_pas_li\u00e9s_dans_la_base_active.
-Entry_type_to_be_created\:=Type_d'entr\u00e9e_\u00e0_cr\u00e9er_:
-Searching_file_system...=Recherche_dans_le_syst\u00e8me_de_fichiers...
-Importing_into_Database...=Importation_dans_une_base_de_donn\u00e9es...
-Select_directory=S\u00e9lectionner_un_r\u00e9pertoire
-Select_files=S\u00e9lectionner_des_fichiers
-Bibtex_entry_creation=Cr\u00e9ation_d'un_entr\u00e9e_BibTeX
-<No_selection>=<Pas_de_s\u00e9lection>
-Push_selection_to_TeXstudio=Envoyer_la_s\u00e9lection_vers_TeXstudio
-Path_to_TeXstudio=Chemin_vers_TeXstudio
-Program_'%0'_not_found=Programme_'%0'_non_trouv\u00e9
-Pushed_citations_to_TeXstudio=Citations_envoy\u00e9es_vers_TeXstudio
-Unable_to_connect_to_freecite_online_service.=Impossible_de_se_connecter_au_service_en_ligne_FreeCite
-Parse_with_FreeCite=Analyse_avec_FreeCite
-Insert_selected_citations_into_TeXstudio=Envoyer_les_citations_s\u00e9lectionn\u00e9es_dans_TeXstudio
-The_current_BibTeX_key_will_be_overwritten._Continue?=La_clef_BibTeX_courante_sera_\u00e9craser._Continuer_?
-Overwrite_key=Ecraser_la_clef
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Pas_d'\u00e9crasement_de_clefs_existantes._Pour_changer_ce_param\u00e9trage,_ouvrir_Options_->_Pr\u00e9f\u00e9rences_->_G\u00e9n\u00e9rateur_de_clefs_BibTeX
-How_would_you_like_to_link_to_'%0'?=Quel_type_de_lien_souhaitez-vous_vers_'%0'_?
-Bibtex_key_patterns=Mod\u00e8les_de_clef_BibTeX
-Changed_special_field_settings=Param\u00e8tres_de_champs_sp\u00e9ciaux_modifi\u00e9s
-Clear_priority=R\u00e9initialiser_la_priorit\u00e9
-Clear_rank=R\u00e9initialiser_le_rang
-Compact_rank=Compacter_le_rang
-Convert_1st,_2nd,_..._to_real_superscripts=Convertir_1er,__2nd,_..._en_vrais_exposants
-Dropped_comment_from_database=Commentaires_supprim\u00e9s_de_la_base
-Enable_PDF_preview=Autoriser_la_pr\u00e9visualisation_des_PDF
-Enable_special_fields=Autoriser_les_champs_sp\u00e9ciaux
-Five_stars=Cinq_\u00e9toiles
-Four_stars=Quatre_\u00e9toiles
-Help_on_special_fields=Aide_sur_les_champs_sp\u00e9ciaux
-Keywords_of_selected_entries=Mots-clefs_des_entr\u00e9es_s\u00e9lectionn\u00e9s
-Manage_content_selectors=G\u00e9rer_les_s\u00e9lecteurs_de_contenu
-Manage_keywords=G\u00e9rer_les_mots-clefs
-Marked_entries'_quality_as_good=Marquer_la_qualit\u00e9_des_entr\u00e9es_comme_bonne
-Marked_entries_as_relevant=Marquer_les_entr\u00e9es_comme_pertinente
-No_priority_information=Pas_d'information_sur_la_priorit\u00e9
-No_rank_information=Pas_d'information_sur_le_rang
-One_star=Une_\u00e9toile
-Priority=Priorit\u00e9
-Priority_high=Priorit\u00e9_forte
-Priority_low=Priorit\u00e9_faible
-Priority_medium=Priorit\u00e9_interm\u00e9diaire
-Quality=Qualt\u00e9
-Rank=Rang
-Relevance=Pertinence
-Set_priority=D\u00e9finir_la_priorit\u00e9
-Set_priority_to_high=D\u00e9finir_la_priorit\u00e9_comme_forte
-Set_priority_to_low=D\u00e9finir_la_priorit\u00e9_comme_faible
-Set_priority_to_medium=D\u00e9finir_la_priorit\u00e9_comme_interm\u00e9diaire
-Set_rank_to_five_stars=D\u00e9finir_le_rang_comme_cinq_\u00e9toiles
-Set_rank_to_four_stars=D\u00e9finir_le_rang_comme_quatre_\u00e9toiles
-Set_rank_to_one_star=D\u00e9finir_le_rang_comme_une_\u00e9toile
-Set_rank_to_three_stars=D\u00e9finir_le_rang_comme_trois_\u00e9toiles
-Set_rank_to_two_stars=D\u00e9finir_le_rang_comme_deux_\u00e9toiles
-Show_one_letter_heading_for_icon_columns=Montrer_un_ent\u00eate_d'une_lettre_pour_les_colonnes_d'ic\u00f4nes
-Show_priority=Montrer_la_priorit\u00e9
-Show_quality=Montrer_la_qualit\u00e9
-Show_rank=Montrer_le_rang
-Show_relevance=Montrer_la_pertinence
-Synchronize_with_keywords=Synchroniser_avec_les_mots-clefs
-Synchronized_special_fields_based_on_keywords=Champs_sp\u00e9ciaux_synchronis\u00e9s_sur_la_base_des_mots-clefs
-Three_stars=Trois_\u00e9toiles
-Toggle_relevance=Afficher/Masquer_la_pertinence
-Toogle_quality_assured=Afficher/Masquer_la_qualit\u00e9_\u00e9valu\u00e9e
-Two_stars=Deux_\u00e9toiles
-Update_keywords=Mettre_\u00e0_jour_les_mots-clefs
-Write_values_of_special_fields_as_separate_fields_to_BibTeX=Ecrire_les_valeurs_des_champs_sp\u00e9ciaux_dans_des_champs_BibTeX_s\u00e9par\u00e9s
-You_have_changed_settings_for_special_fields.=Vous_avez_modifier_les_param\u00e8tres_pour_les_champs_sp\u00e9ciaux.
-no_preview_available=Pr\u00e9visualisation_non_disponible
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_entr\u00e9es_trouv\u00e9es._Pour_r\u00e9duire_la_charge_du_serveur,_seulement_%1_seront_t\u00e9l\u00e9charg\u00e9es.
-A_string_with_that_label_already_exists=Une_chaine_avec_cette_\u00e9tiquette_existe_d\u00e9ja
-Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=La_connexion_\u00e0_OpenOffice_a_\u00e9t\u00e9_perdue._S'il_vous_plait,_assurez-vous_qu'OpenOffice_soit_lanc\u00e9,_et_essayez_de_vous_reconnecter.
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Corrigez_l'entr\u00e9e_et_r\u00e9-ouvrez_l'\u00e9diteur_pour_afficher/\u00e9diter_la_source.
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=La_connexion_\u00e0_un_processus_gnuserv_actif_a_\u00e9chou\u00e9._Assurez-vous_que_Emacs_ou_XEmacs_soit_lanc\u00e9,<BR>et_que_le_serveur_a_\u00e9t\u00e9_d\u00e9marr\u00e9_(en_lan\u00e7ant_la_commande_'server-start'/'gnuserv-start').
-Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=La_connexion_\u00e0_OpenOffice_n'a_pas_pu_\u00eatre_lanc\u00e9e.\nAssurez-vous_qu'OpenOffice_est_install\u00e9_avec_le_support_Java.\\nEn_cas_de_connexion_manuelle,_v\u00e9rifiez_les_chemins_du_programme_et_de_la_biblioth\u00e8que.\n\nMessage_d'erreur_\:_
-Created_group_"%0".=Groupe_"%0"_cr\u00e9\u00e9.
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Le_fichier_a_\u00e9t\u00e9_mis_\u00e0_jour_par_ailleurs._Etes-vous_s\u00fbr_que_vous_voulez_sauver_?
-If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=Si_une_entr\u00e9e_coll\u00e9e_ou_import\u00e9e_a_le_champ_d\u00e9j\u00e0_param\u00e9tr\u00e9,_\u00e9craser.
-Import_Metadata_From_PDF=Importer_les_m\u00e9ta-donn\u00e9es_\u00e0_partir_du_PDF
-Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Pas_de_connexion_\u00e0_un_document_Writer._S'il_vous_plait,_assurez-vous_qu'un_document_est_ouvert_et_utiliser_le_bouton_'S\u00e9lectionner_un_document_Writer'_pour_vous_y_connecter.
-Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=Notez_s'il_vous_plait_qu'il_s'agit_d'une_version_b\u00e9ta_pr\u00e9liminaire._Ne_l'utilisez_pas_sans_archiver_vos_fichiers_!
-Removed_all_subgroups_of_group_"%0".=Tous_les_sous-groupes_du_groupe_"%0"_ont_\u00e9t\u00e9_supprim\u00e9s.
-To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=Pour_d\u00e9sactiver_le_mode_Memory-stick,_renommer_ou_supprimer_le_fichier_jabref.xml_dans_le_m\u00eame_r\u00e9pertoire_que_JabRef
-Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Connexion_impossible._Une_raison_potentielle_est_que_JabRef_et_OpenOffice/LibreOffice_ne_fonctionnent_pas_tous_les_deux_soit_en_mode_32_bits,_soit_en_mode_64_bits.
-Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Impossible_de_d\u00e9terminer_le_nom_et_la_version_du_greffon._Ce_pourrait_ne_pas_\u00eatre_un_greffon_JabRef_valide.
-Use_the_following_delimiter_character(s)\:=Utiliser_le(s)_caract\u00e8re(s)_de_d\u00e9limitation_suivant\:
-When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=Lors_du_t\u00e9l\u00e9chargement_de_fichiers_ou_du_d\u00e9placement_de_fichiers_li\u00e9es_vers_le_r\u00e9pertoire_de_fichiers,_pr\u00e9f\u00e9rez_l'emplacement_du_fichier_bib_au_r\u00e9pertoire_ci-dessus
-Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Votre_fichier_de_style_sp\u00e9cifie_le_format_de_caract\u00e8re_'%0',_qui_n'est_pas_d\u00e9fini_dans_votre_document_OpenOffice_actuel.
-Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Votre_fichier_de_style_sp\u00e9cifie_le_format_de_paragraphe_'%0',_qui_n'est_pas_d\u00e9fini_dans_votre_document_OpenOffice_actuel.
-
-Error_fetching_from_Google_Scholar=Erreur_au_cours_de_la_recherche_Google_Scholar
-Run_HTML_converter_on_title=Lancer_le_convertisseur_HTML_sur_le_titre
-Searching...=Recherche...
-You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=Vous_avez_s\u00e9lectionn\u00e9_plus_de_%0_entr\u00e9es_\u00e0_t\u00e9l\u00e9charger._Certains_sites_web_pourraient_vous_bloquer_si_vous_effectuez_de_trop_nombreux_et_rapides_t\u00e9l\u00e9chargements._Voulez-vous_continuer?
-Confirm_selection=Confirmez_la_s\u00e9lection
-Get_BibTeX_entry_from_DOI=Obtenir_l'entr\u00e9e_BibTeX_\u00e0_partir_du_DOI
-Unknown_DOI\:_'%0'.=DOI_inconnu_:_'%0'.
-Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Conversion_des_indices_et_exposants_en_\u00e9quations_plut\u00f4t_qu'en_texte
-Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Ajouter_{}_aux_mots_du_titre_sp\u00e9cifi\u00e9s_lors_d'une_recherche_pour_pr\u00e9server_la_casse_correcte
-Import_conversions=Importer_les_conversions
-Run_filter_on_title_keeping_the_case_of_selected_words=Lancer_un_filtre_sur_le_titre_en_pr\u00e9servant_la_casse_des_mots_s\u00e9lectionn\u00e9s
-Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=Erreurs_intermittentes_sur_le_serveur_IEEE_Xplore_server._R\u00e9-essayez_dans_un_moment_s'il_vous_plait.
-Please_enter_a_search_string=Entrez_s'il_vous_plait_une_chaine_de_recherche
-Please_open_or_start_a_new_database_before_searching=S'il_vous_plait,_ouvrez_ou_cr\u00e9er_une_nouvelle_base_avant_la_recherche
-An_Error_occurred_while_fetching_from_ADS_(%0)\:=Une_erreur_est_survenue_lors_de_la_recherche_ADS_(%0)_:
-Error_while_fetching_from_ADS=Erreur_lors_de_la_recherche_ADS
-Error_while_fetching_from_OAI2=Erreur_lors_de_la_recherche_OAI2
-An_Error_occurred_while_parsing_abstract=Une_erreur_est_survenue_pendant_le_traitement_du_r\u00e9sum\u00e9
-Unknown_DiVA_entry\:_'%0'.=Entr\u00e9e_DiVA_inconnue\:_'%0'.
-Get_BibTeX_entry_from_DiVA=Obtenir_l'entr\u00e9e_BibTeX_\u00e0_partir_de_DiVA
-Log=Message
-Remove_unneccessary_$,_{,_and_}=Suppression_des_$,_{,_et_}_inutiles
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+%0_contains_the_Regular_Expression_<b>%1</b>=%0 contient_l'expression_r\u00e9guli\u00e8re_<b>%1</b>
+%0_contains_the_term_<b>%1</b>=%0 contient_le_terme_<b>%1</b>
+%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_ne_contient_pas_l'expression_r\u00e9guli\u00e8re_<b>%1</b>
+%0_doesn't_contain_the_term_<b>%1</b>=%0_ne_contient_pas_le_terme_<b>%1</b>
+%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_ne_correspond_pas_\u00e0_l'expression_r\u00e9guli\u00e8re_<b>%1</b>
+%0_doesn't_match_the_term_<b>%1</b>=%0_ne_correspond_pas_au_terme_<b>%1</b>
+
+%0_export_successful=%0_:_Exportation_r\u00e9ussie
+%0_field_set=D\u00e9finition_du_champ_%0
+%0_matches_the_Regular_Expression_<b>%1</b>=%0_correspond_\u00e0_l'expression_r\u00e9guli\u00e8re_<b>%1</b>
+%0_matches_the_term_<b>%1</b>=%0_correspond_au_terme_<b>%1</b>
+<field_name>=<nom_de_champ>
+<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Le_fichier_'%0'_n'a_pas_pu_\u00eatre_trouv\u00e9_<BR>\u00e0_partir_du_lien_de_l'entr\u00e9e_'%1'</HTML>
+<no_field>=<pas_de_champ>
+<select>=<s\u00e9lectionner>
+<select_word>=<entrer_le_mot-clef>
+A_string_with_this_label_already_exists=Une_cha\u00eene_avec_ce_nom_existe_d\u00e9j\u00e0
+Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Abr\u00e9ger_les_noms_de_journaux_des_entr\u00e9es_s\u00e9lectionn\u00e9es_(abr\u00e9viations_ISO)
+Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Abr\u00e9ger_les_noms_de_journaux_des_entr\u00e9es_s\u00e9lectionn\u00e9es_(abr\u00e9viations_MEDLINE)
+Abbreviate_names=Abr\u00e9ger_les_noms
+Abbreviated_%0_journal_names.=%0_noms_de_journaux_abr\u00e9g\u00e9s.
+Abbreviation=Abr\u00e9viation
+About_JabRef=A_propos_de_JabRef
+Abstract=R\u00e9sum\u00e9
+Accept=Valider
+Accept_change=Accepter_la_modification
+Action=Action
+Add=Ajouter
+Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Ajouter_une_classe_ImportFormat_personnalis\u00e9e_(compil\u00e9e)_\u00e0_partir_d'un_chemin_de_classe._\nLe_chemin_n'a_pas_besoin_d'\u00eatre_dans_le_chemin_de_classe_de_JabRef.
+Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Ajouter_une_classe_ImportFormat_personnalis\u00e9e_(compil\u00e9e)_\u00e0_partir_d'une_archive_ZIP._\nL'archive_ZIP_n'a_pas_besoin_d'\u00eatre_dans_le_chemin_de_classe_de_JabRef.
+add_entries_to_group=ajouter_des_entr\u00e9es_au_groupe
+Add_entry_selection_to_this_group=Ajouter_les_entr\u00e9es_s\u00e9lectionn\u00e9es_\u00e0_ce_groupe
+Add_from_folder=Ajouter_\u00e0_partir_du_r\u00e9pertoire
+Add_from_jar=Ajouter_\u00e0_partir_de_jar
+add_group=ajouter_un_groupe
+Add_Group=Ajouter_un_groupe
+Add_new=Ajouter_nouvelle
+Add_Subgroup=Ajouter_un_sous-groupe
+Add_to_group=Ajouter_au_groupe
+Added_group_"%0".=Groupe_"%0"_ajout\u00e9.
+Added_new=Nouvel_ajout
+Added_string=Cha\u00eene_ajout\u00e9e
+Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=De_plus,_des_entr\u00e9es_dont_le_champ_<b>%0</b>_ne_contient_pas_<b>%1 [...]
+Advanced=Avanc\u00e9
+All_custom_file_types_will_be_lost._Proceed?=Tous_les_types_de_fichiers_personnalis\u00e9s_seront_perdus._Continuer_?
+All_Entries=Toutes_les_entr\u00e9es
+All_entries=Toutes_les_entr\u00e9es
+All_entries_of_this_type_will_be_declared_typeless._Continue?=Toutes_les_entr\u00e9es_de_ce_type_seront_d\u00e9clar\u00e9es_'sans_type'._Continuer_?
+All_fields=Tous_les_champs
+All_subgroups_(recursively)=Tous_les_sous-groupes_(r\u00e9cursivement)
+Allow_editing_in_table_cells=Autoriser_l'\u00e9dition_dans_les_cellules_de_la_table
+An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Une_erreur_est_survenue_lors_de_la_recherche_\u00e0_partir_de_la_source_OAI2_(%0)_:
+An_Exception_ocurred_while_accessing_'%0'=Une_Exception_est_survenue_lors_de_l'acc\u00e8s_\u00e0_'%0'
+An_SAXException_ocurred_while_parsing_'%0'\:=Une_Exception_SAX_est_survenue_pendant_le_traitement_de_'%0'_:
+and=_et
+and_inside_the_JabRef-jar\:=et_dans_le_jar_de_JabRef_:
+and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=et_la_classe_doit_\u00eatre_disponible_dans_votre_chemin_de_classe_la_prochaine_fois_que_vous_d\u00e9marrez_JabRef.
+any_field_that_matches_the_regular_expression_<b>%0</b>=tout_champ_qui_correspond_\u00e0_l'expression_r\u00e9guli\u00e8re_<b>%0</b>
+Appearance=Aspect
+Append=Ajouter
+Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Ajouter_le_contenu_d'une_base_BibTeX_\u00e0_la_base_actuelle
+Append_database=Joindre_\u00e0_la_base
+append_the_selected_text_to_bibtex_key=ajouter_le_texte_s\u00e9lectionn\u00e9_\u00e0_la_clef_BibTeX
+Application=Application
+Apply=Appliquer
+Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Arguments_transmis_\u00e0_l'instance_JabRef_active.
+Assign_entry_selection_exclusively_to_this_group=Assigner_les_entr\u00e9es_s\u00e9lectionn\u00e9es_uniquement_\u00e0_ce_groupe
+Assign_new_file=Assigner_un_nouveau_fichier
+Assign_the_original_group's_entries_to_this_group?=Assigner_les_entr\u00e9es_originales_du_groupe_\u00e0_ce_groupe_?
+Assigned_%0_entries_to_group_"%1".=%0_entr\u00e9es_ajout\u00e9es_au_groupe_"%1".
+Assigned_1_entry_to_group_"%0".=Une_entr\u00e9e_ajout\u00e9e_au_groupe_"%0".
+At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=Au_moins_le_greffon_'net.sf.jabref.core'_devrait_\u00eatre_ici.
+Attach_%0_file=Attacher_le_fichier_%0
+Attach_URL=Attacher_l'URL
+Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Cela_tente_de_d\u00e9finir_automatiquement_les_liens_%0_de_vos_entr\u00e9es.<BR>La_d\u00e9finition_automatique_fonctionne_si_un_fichier_%0_dans_votre_r\u00e9pertoire_%0<BR>ou_dans_un_sous-r\u00e9pertoire_porte_le_m\u00eame_nom_que_la_clef_d'une_entr\u00e9e_BibTeX,<BR>_l'extension_en_plus.
+Attempting_SQL_export...=Tentative_d'exportation_SQL...
+Auto=Auto
+Autodetect_format=D\u00e9tection_automatique_du_format
+Autogenerate_BibTeX_key=Cr\u00e9ation_automatique_des_clefs_BibTeX
+Autogenerate_BibTeX_keys=Cr\u00e9ation_automatique_des_clefs_BibTeX
+Autogenerate_groups=Cr\u00e9ation_automatique_des_groupes
+autogenerate_keys=cr\u00e9ation_automatique_des_clefs
+Autolink_files_with_names_starting_with_the_BibTeX_key=Lier_automatiquement_les_fichiers_commen\u00e7ant_par_la_clef_BibTeX
+Autolink_only_files_that_match_the_BibTeX_key=Lier_automatiquement_les_fichiers_correspondant_exactement_\u00e0_la_clef_BibTeX
+Automatically_create_groups=Cr\u00e9er_automatiquement_des_groupes
+Automatically_create_groups_for_database.=Cr\u00e9er_automatiquement_des_groupes_pour_la_base.
+Automatically_created_groups=Groupes_cr\u00e9\u00e9s_automatiquement
+Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Masquer_automatiquement_l'interface_des_groupes_lors_de_l'affichage_d'une_base_de_donn\u00e9es_qui_ne_contient_pas_de_groupes
+Automatically_remove_exact_duplicates=Supprimer_automatiquement_les_doublons_identiques
+Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Afficher_automatiquement_l'interface_des_groupes_lors_de_l'affichage_d'une_base_de_donn\u00e9es_qui_contient_des_groupes
+Autoset=D\u00e9finir_automatiquement
+Autoset_%0_field=Auto-d\u00e9finition_du_champ_%0
+Autoset_%0_links._Allow_overwriting_existing_links.=D\u00e9finir_automatiquement_les_liens_%0._Ecraser_les_liens_existants.
+Autoset_%0_links._Do_not_overwrite_existing_links.=D\u00e9finir_automatiquement_les_liens_%0._Ne_pas_\u00e9craser_les_liens_existants.
+Autoset_external_links=D\u00e9finir_automatiquement_les_liens_externes
+Autosetting_links=D\u00e9finition_automatique_des_liens
+AUX_file_import=Importation_de_fichier_AUX
+Available_export_formats=Formats_d'exportation_disponibles
+Available_fields=Champs_BibTeX_disponibles
+Available_import_formats=Formats_d'importation_disponibles
+Background_color_for_optional_fields=Couleur_d'arri\u00e8re-plan_pour_les_champs_optionnels
+Background_color_for_required_fields=Couleur_d'arri\u00e8re-plan_pour_les_champs_requis
+Backup_old_file_when_saving=Cr\u00e9er_une_copie_de_sauvegarde_lors_de_l'enregistrement
+Beta_version=Version_Beta
+Bibkey_to_filename_conversion=Conversion_de_la_clef_BibTeX_en_nom_de_fichier
+BibTeX_key=Clef_BibTeX
+BibTeX_key_is_unique.=La_clef_BibTeX_est_unique.
+BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Clef_BibTeX_ind\u00e9finie._Entrer_un_nom_pour_le_fichier_t\u00e9l\u00e9charg\u00e9
+BibTeX_source=Source_BibTeX
+BibTeXML=BibTeXML
+Binding=Affectation
+Broken_link=Lien_invalide
+Browse=Explorer
+by=par_
+Calling_external_viewer...=Lancement_de_l'afficheur_externe...
+Cancel=Annuler
+Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Les_entr\u00e9es_ne_peuvent_pas_\u00eatre_ajout\u00e9es_au_groupe_sans_g\u00e9n\u00e9rer_des_clefs._Voulez-vous_g\u00e9n\u00e9rer_des_clefs_maintenant_?
+Cannot_merge_this_change=Cette_modification_ne_peut_pas_\u00eatre_fusionn\u00e9e
+Cannot_move_group_"%0"_down.=Le_groupe_"%0"_ne_peut_pas_\u00eatre_d\u00e9plac\u00e9_vers_le_bas.
+Cannot_move_group_"%0"_left.=Le_groupe_"%0"_ne_peut_pas_\u00eatre_d\u00e9plac\u00e9_vers_la_gauche.
+Cannot_move_group_"%0"_right.=Le_groupe_"%0"_ne_peut_pas_\u00eatre_d\u00e9plac\u00e9_vers_la_droite.
+Cannot_move_group_"%0"_up.=Le_groupe_"%0"_ne_peut_pas_\u00eatre_d\u00e9plac\u00e9_vers_le_haut
+case_insensitive=insensible_\u00e0_la_casse
+case_sensitive=sensible_\u00e0_la_casse
+Case_sensitive=Sensible_\u00e0_la_casse
+change_assignment_of_entries=changer_l'assignation_des_entr\u00e9es
+Change_case=Changer_la_casse
+Change_entry_type=Changer_le_type_d'entr\u00e9e
+Change_file_type=Changer_le_type_de_fichier
+change_key=changer_la_clef
+Change_of_Grouping_Method=Changement_de_la_M\u00e9thode_de_Groupement
+change_preamble=changer_le_pr\u00e9ambule
+change_string_content=changer_le_contenu_de_la_cha\u00eene
+change_string_name=changer_le_nom_de_la_cha\u00eene
+Change_table_column_and_General_fields_settings_to_use_the_new_feature=Modifier_les_colonnes_de_la_table_et_les_param\u00e8tres_des_champs_g\u00e9n\u00e9raux_pour_utiliser_cette_nouvelle_fonction
+change_type=changer_le_type
+changed_=chang\u00e9_
+Changed_font_settings=Param\u00e8tres_de_police_modifi\u00e9s
+Changed_language_settings=Param\u00e8tres_linguistiques_modifi\u00e9s
+Changed_look_and_feel_settings=Changer_les_param\u00e8tres_d'apparence
+Changed_preamble=Pr\u00e9ambule_modifi\u00e9
+Changed_type_to=Type_modifi\u00e9_en
+Characters_to_ignore=Caract\u00e8res_\u00e0_ignorer_
+Check_existing_%0_links=V\u00e9rifier_les_liens_%0_existants
+Check_links=V\u00e9rifier_les_liens
+Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Choisir_l'URL_de_t\u00e9l\u00e9chargement._La_valeur_par_d\u00e9faut_pointe_vers_une_liste_fournie_par_les_d\u00e9veloppeurs_de_JabRef
+Cite_command=Commande_Cite
+Class_name=Nom_de_classe
+Clear=Vider
+clear_all_groups=Vider_tous_les_groupes
+Clear_field=Vider_le_champ
+Clear_fields=Vider_les_champs
+Clear_highlight=Vider_surlignements
+Close=Fermer
+Close_dialog=Fermer_la_fen\u00eatre
+Close_the_current_database=Fermer_la_base_courante
+Close_the_help_window=Fermer_la_fen\u00eatre_d'aide
+Close_window=Fermer_la_fen\u00eatre
+Closed_database=Base_ferm\u00e9e
+Collapse_subtree=Masquer_le_sous-arbre
+Color_codes_for_required_and_optional_fields=Codes_de_couleurs_pour_les_champs_requis_et_optionnels
+Color_for_marking_incomplete_entries=Couleur_pour_marquer_les_entr\u00e9es_incompl\u00e8tes
+Column_width=Largeur_de_colonne
+Command_line_id=Identifiant_de_la_ligne_de_commande
+Complete_record=Compl\u00e9ter_l'enregistrement
+Connect=Connexion_automatique
+Connect_to_SQL_database=Se_connecter_\u00e0_une_base_SQL
+Connect_to_SQL_Database=Se_connecter_\u00e0_une_base_SQL
+Connection_to_IEEEXplore_failed=Echec_de_la_connexion_\u00e0_IEEEXplore
+Contained_in=Contenu_dans
+Content=Contenu
+Copied=Copi\u00e9
+Copied_cell_contents=Contenu_des_cellules_copi\u00e9
+Copied_key=Clef_copi\u00e9e
+Copied_keys=Clefs_copi\u00e9es
+Copy=Copier
+Copy_BibTeX_key=Copier_la_clef_BibTeX
+Copy_file_to_file_directory.=Copier_le_fichier_vers_le_r\u00e9pertoire_de_fichiers.
+Copy_files_to_file_directory.=Copier_les_fichiers_vers_le_r\u00e9pertoire_de_fichiers.
+Copy_to_clipboard=Copier_dans_le_presse-papier
+Could_not_call_executable=L'ex\u00e9cutable_n'a_pas_pu_\u00eatre_lanc\u00e9
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=La_connexion_\u00e0_un_processus_gnuserv_actif_a_\u00e9chou\u00e9._Assurez-vous_qu'Emacs_ou_XEmacs_soit_actif,<BR>et_que_le_serveur_a_\u00e9t\u00e9_d\u00e9marr\u00e9_(avec_la_commande_'gnuserv-start').
+Could_not_connect_to_host_=La_connexion_\u00e0_l'ordinateur_h\u00f4te_a_\u00e9chou\u00e9_
+Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=La_connexion_au_serveur_Vim_a_\u00e9chou\u00e9._Assurez-vous_que_Vim_tourne<BR>avec_le_bon_nom_de_serveur.
+Could_not_export_file=Le_fichier_n'a_pas_pu_\u00eatre_export\u00e9
+Could_not_export_preferences=L'exportation_des_pr\u00e9f\u00e9rences_a_\u00e9chou\u00e9
+Could_not_find_a_suitable_import_format.=Un_format_d'importation_convenable_n'a_pas_pu_\u00eatre_trouv\u00e9
+Could_not_find_directory_for_%0-files\:_%1=Le_r\u00e9pertoire_n'a_pas_pu_\u00eatre_trouv\u00e9_pour_les_fichiers_%0_:_%1
+Could_not_find_image_file=Le_fichier_image_n'a_pas_\u00e9t\u00e9_trouv\u00e9
+Could_not_find_layout_file=Fichier_de_mise_en_page_non_trouv\u00e9
+Could_not_import_preferences=L'importation_des_pr\u00e9f\u00e9rences_a_\u00e9chou\u00e9_
+Could_not_instantiate_%0=N'a_pas_pu_initialiser_%0
+Could_not_instantiate_%0_%1=N'a_pas_pu_initialiser_%0_%1
+Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=%0_a_\u00e9chou\u00e9._Avez-vous_choisi_le_chemin_de_paquetage_correct_?
+Could_not_open_link=Le_lien_n'a_pas_pu_\u00eatre_ouvert
+Could_not_parse_number_of_hits=Le_nombre_de_r\u00e9sultats_n'a_pas_pu_\u00eatre_trait\u00e9
+Could_not_print_preview=Echec_de_l'impression_de_l'aper\u00e7u
+Could_not_run_the_'vim'_program.=Le_programme_'vim'_n'a_pas_pu_\u00eatre_lanc\u00e9.
+Could_not_save_file=Le_fichier_n'a_pas_pu_\u00eatre_enregistr\u00e9_
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Le_fichier_n'a_pas_pu_\u00eatre_enregistr\u00e9._L'encodage_de_caract\u00e8res_'%0'_n'est_pas_support\u00e9.
+Create_group=Cr\u00e9er_le_groupe
+Created_groups.=Groupes_cr\u00e9\u00e9s.
+crossreferenced_entries_included=Entr\u00e9es_avec_r\u00e9f\u00e9rences_crois\u00e9es_incluses
+Current_content=Contenu_actuel
+Current_value=Valeur_actuelle_
+Custom_entry_types=Types_d'entr\u00e9es_personnalis\u00e9es
+Custom_entry_types_found_in_file=Types_d'entr\u00e9es_personnalis\u00e9es_trouv\u00e9es_dans_le_fichier
+Custom_icon_theme=Th\u00e8me_d'ic\u00f4nes_personnalis\u00e9
+Custom_icon_theme_file=Fichier_de_th\u00e8me_d'ic\u00f4nes_personnalis\u00e9
+Custom_importers=Filtres_d'importation_personnalis\u00e9s
+Customize_entry_types=Personnaliser_les_types_d'entr\u00e9es
+Customize_key_bindings=Personnaliser_les_affectations_de_touches
+Cut=Couper
+cut_entries=Couper_les_entr\u00e9es
+cut_entry=supprimer_l'entr\u00e9e
+Cut_pr=Couper
+Database_\:=Base_de_donn\u00e9es_:
+Database_encoding=Encodage_de_la_base_de_donn\u00e9es
+Database_has_changed._Do_you_want_to_save_before_closing?=Base_modifi\u00e9e._Voulez-vous_l'enregistrer_avant_de_fermer_?
+Database_properties=Propri\u00e9t\u00e9s_de_la_base_de_donn\u00e9es
+Date_format=Format_de_date_
+Default=D\u00e9faut
+Default_encoding=Encodage_par_d\u00e9faut_
+Default_grouping_field=Champ_par_d\u00e9faut_pour_les_groupes_
+Default_look_and_feel=Apparence_par_d\u00e9faut_
+Default_pattern=Mod\u00e8le_par_d\u00e9faut
+Default_sort_criteria=Crit\u00e8re_de_tri_par_d\u00e9faut
+Define_'%0'=D\u00e9finir_'%0'
+Delete=Supprimer
+Delete_custom_format=Supprimer_le_format_personnalis\u00e9
+delete_entries=effacer_les_entr\u00e9es
+Delete_entry=Supprimer_l'entr\u00e9e
+delete_entry=effacer_l'entr\u00e9e
+Delete_multiple_entries=Effacer_plusieurs_entr\u00e9es
+Delete_rows=Supprimer_des_lignes
+Delete_strings=Supprimer_les_cha\u00eenes
+Deleted=Supprim\u00e9
+Delimit_fields_with_semicolon,_ex.=D\u00e9limiter_les_champs_par_des_points-virgules,_ex.
+Descending=Descendant
+Description=Description
+Deselect_all=Tout_d\u00e9s\u00e9lectionner
+Deselect_all_duplicates=D\u00e9s\u00e9lectionner_tous_les_doublons
+Details=D\u00e9tails
+Disable_entry_editor_when_multiple_entries_are_selected=D\u00e9sactiver_l'\u00e9diteur_en_cas_de_s\u00e9lections_multiples
+Disable_this_confirmation_dialog=D\u00e9sactiver_cette_demande_de_confirmation
+Disable_this_warning_dialog=D\u00e9sactiver_ce_message_d'avertissement
+Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Afficher_toutes_les_entr\u00e9es_appartenant_\u00e0_au_moins_un_des_groupes_s\u00e9lectionn\u00e9s.
+Display_all_error_messages=Afficher_tous_les_messages_d'erreur
+Display_help_on_command_line_options=Afficher_l'aide_sur_les_options_de_la_ligne_de_commande
+Display_imported_entries_in_an_inspection_window_before_they_are_added.=Afficher_les_entr\u00e9es_import\u00e9es_dans_une_fen\u00eatre_d'inspection_avant_de_les_ajouter.
+Display_only_entries_belonging_to_all_selected_groups.=Afficher_uniquement_les_entr\u00e9es_appartenant_\u00e0_tous_les_groupes_s\u00e9lectionn\u00e9s.
+Display_version=Afficher_la_version
+Displaying_no_groups=Pas_de_groupes_\u00e0_afficher
+Do_not_abbreviate_names=Ne_pas_abr\u00e9ger_les_noms
+Do_not_autoset=Ne_pas_d\u00e9finir_automatiquement.
+Do_not_import_entry=Ne_pas_importer_l'entr\u00e9e
+Do_not_open_any_files_at_startup=N'ouvrir_aucun_fichier_au_d\u00e9marrage
+Do_not_overwrite_existing_keys=Ne_pas_\u00e9craser_de_clefs_existantes
+Do_not_show_splash_window_at_startup=Ne_pas_montrer_l'\u00e9cran_de_garde_lors_du_lancement
+Do_not_show_these_options_in_the_future=Ne_pas_afficher_ces_options_\u00e0_l'avenir
+Do_not_wrap_the_following_fields_when_saving=Ne_pas_renvoyer_\u00e0_la_ligne_les_champs_suivants_lors_de_l'enregistrement_
+Do_not_write_the_following_fields_to_XMP_Metadata\:=Ne_pas_\u00e9crire_les_champs_suivants_dans_les_m\u00e9tadonn\u00e9es_XMP_:
+Do_you_want_JabRef_to_do_the_following_operations?=Voulez-vous_que_JabRef_fasse_les_op\u00e9rations_suivantes_?
+DocBook=DocBook
+Down=Bas
+Download=T\u00e9l\u00e9charger
+Download_completed=T\u00e9l\u00e9chargement_termin\u00e9
+Download_file=T\u00e9l\u00e9charger_le_fichier
+Downloading...=T\u00e9l\u00e9chargement...
+Drag_and_Drop_Error=Erreur_de_Glisser-D\u00e9poser
+Drop_%0=D\u00e9poser_%0
+duplicate_BibTeX_key=Clef_BibTeX_dupliqu\u00e9e
+Duplicate_BibTeX_key.=Dupliquer_la_clef_BibTeX.
+Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Clef_BibTeX_dupliqu\u00e9e._Les_groupes_pourraient_ne_pas_fonctionner_pour_cette_entr\u00e9e.
+Duplicate_Key_Warning=Avertissement_:_Clef_dupliqu\u00e9e
+Duplicate_pairs_found=Doublons_trouv\u00e9s
+duplicate_removal=Suppression_des_doublons
+Duplicate_string_name=Dupliquer_le_nom_de_cha\u00eene
+Duplicates_found=Doublons_trouv\u00e9s
+Duplicates_removed=Doublons_supprim\u00e9s
+Dynamic_groups=Groupes_dynamiques
+Dynamically_group_entries_by_a_free-form_search_expression=Grouper_dynamiquement_les_entr\u00e9es_en_utilisant_une_expression_de_recherche_de_forme_libre
+Dynamically_group_entries_by_searching_a_field_for_a_keyword=Grouper_dynamiquement_les_entr\u00e9es_en_cherchant_un_mot-clef_dans_un_champ
+Each_line_must_be_on_the_following_form=Chaque_ligne_doit_\u00ea_de_la_forme_suivante
+Edit=Editer
+Edit_custom_export=Editer_l'exportation_personnalis\u00e9e
+Edit_entry=Editer_l'entr\u00e9e
+Edit_file_link=Editer_le_lien_de_fichier
+Edit_file_type=Editer_le_type_de_fichier
+Edit_group=Editer_le_groupe
+Edit_journal=Editer_le_journal
+Edit_preamble=Editer_le_pr\u00e9ambule
+Edit_strings=Editer_les_cha\u00eenes
+Editor_options=Options_d'\u00e9diteur
+empty_BibTeX_key=Clef_BibTeX_vide
+Empty_BibTeX_key.=Clef_BibTeX_vide.
+Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Clef_BibTeX_vide._La_gestion_des_groupes_pourrait_ne_plus_fonctionner_pour_cette_entr\u00e9e.
+empty_database=base_vide
+Enable_source_editing=Autoriser_l'\u00e9dition_du_source
+Enable_word/name_autocompletion=Autoriser_l'auto-g\u00e9n\u00e9ration_des_mots/noms
+Endnote=Endnote
+Enter_URL=Entrer_l'URL
+Enter_URL_to_download=Entrer_l'URL_de_t\u00e9l\u00e9chargement
+entries=entr\u00e9es
+Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Des_entr\u00e9es_ne_peuvent_pas_\u00eatre_ajout\u00e9es_ou_supprim\u00e9es_manuellement_de_ce_groupe.
+Entries_exported_to_clipboard=Entr\u00e9es_export\u00e9es_vers_le_presse-papiers
+entries_have_undefined_BibTeX_key=Des_entr\u00e9es_ont_des_clefs_BibTeX_non_d\u00e9finies
+entries_into_new_database=entr\u00e9es_dans_la_nouvelle_base
+entry=entr\u00e9e
+Entry_editor=Editeur_d'entr\u00e9e
+Entry_in_current_database=Entr\u00e9e_dans_la_base_de_donn\u00e9es_actuelle
+Entry_in_import=Entr\u00e9e_dans_l'importation
+Entry_preview=Aper\u00e7u_de_l'entr\u00e9e
+Entry_table=Table_des_entr\u00e9es
+Entry_table_columns=Colonnes_de_la_table_des_entr\u00e9es
+Entry_type=Type_d'entr\u00e9e
+Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Les_noms_de_type_d'entr\u00e9e_ne_peuvent_pas_contenir_d'espace_et_les_caract\u00e8res_suivants
+Entry_types=Types_d'entr\u00e9es
+Error=Erreur
+Error\:_=Erreur_:_
+Error_converting_Bibtex_to_XMP\:_%0=Erreur_lors_de_la_conversion_de_BibTeX_en_XMP_:_%0
+Error_converting_XMP_to_'%0'...=Erreur_lors_de_la_conversion_d'XMP_en_'%0'
+Error_exporting_to_clipboard=Erreur_lors_de_l'exportation_vers_le_presse-papiers
+Error_in_field=Erreur_dans_le_champ
+Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Erreur_au_lancement_du_syst\u00e8me_de_greffon._D\u00e9marrage_sans_greffon,_certaines_fonctionalit\u00e9s_pourraient_\u00eatre_absentes.
+Error_occured_when_parsing_entry=Une_erreur_est_survenue_pendant_le_traitement_de_l'entr\u00e9e
+Error_opening_file=Erreur_lors_de_l'ouverture_du_fichier
+Error_setting_field=Erreur_de_configuration_du_champ
+Error_while_converting_BibtexEntry_to_XMP_%0=Erreur_lors_de_la_conversion_de_l'entr\u00e9e_BibTeX_en_XMP_%0
+Error_while_downloading_file\:=Erreur_lors_du_t\u00e9l\u00e9chargement_du_fichier_:
+Error_while_fetching_from_OIA2=Erreur_lors_de_la_recherche_OIA2
+Error_while_writing=Erreur_lors_de_l'\u00e9criture
+Error_writing_to_%0_file(s).=Erreur_lors_de_l'\u00e9criture_de_%0_fichier(s).
+Error_writing_XMP_to_file\:_%0=Erreur_lors_de_l'\u00e9criture_des_XMP_dans_le_fichier_%0
+Establishing_SQL_connection...=Etablissement_de_la_connexion_SQL...
+Exceptions=Exceptions
+Existing_file=Fichier_existant
+exists._Overwrite_file?=existe._Ecraser_le_fichier_?
+exists._Overwrite?=existe._Ecraser_?
+Expand_subtree=D\u00e9velopper_le_sous-arbre
+Export=Exporter
+Export_name=Nom_de_l'exportation
+Export_preferences=Exporter_les_pr\u00e9f\u00e9rences
+Export_preferences_to_file=Exporter_les_pr\u00e9f\u00e9rences_vers_un_fichier
+Export_properties=Propri\u00e9t\u00e9s_de_l'exportation
+Export_to_clipboard=Exporter_vers_le_presse-papiers
+Export_to_SQL_database=Exporter_vers_une_base_SQL
+Exporting=Exportation_en_cours
+Extension=Extension
+External_changes=Modifications_externes
+External_file_links=Liens_vers_les_fichiers_externes
+External_files=Fichiers_externes
+External_programs=Programmes_externes
+External_viewer_called=Afficheur_externe_lanc\u00e9
+Failed_to_read_groups_data_(unsupported_version\:_%0)=La_lecture_des_donn\u00e9es_des_groupes_a_\u00e9chou\u00e9_(version_non_support\u00e9e_:_%0)
+Fetch=Rechercher
+Field=Champ
+field=Champ
+Field_content=Contenu_du_champ
+Field_name=Nom_du_champ_
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Les_noms_de_champs_ne_peuvent_pas_contenir_d'espace_ou_l'un_des_caract\u00e8res_suivants
+Field_sizes=Tailles_des_champs
+Field_to_filter=Champ_vers_filtre
+Field_to_group_by=Champ_\u00e0_grouper_par
+Fields=Champs
+File=Fichier
+file=fichier
+File_'%0'_is_already_open.=Le_fichier_'%0'_est_d\u00e9j\u00e0_ouvert.
+File_'%0'_not_found=Fichier_'%0'_non_trouv\u00e9
+File_changed=Fichier_chang\u00e9
+File_directory_is_'%0'\:=Le_r\u00e9pertoire_de_fichier_est_'%0'_:
+File_directory_is_not_set_or_does_not_exist!=Le_r\u00e9pertoire_de_fichiers_n'est_pas_configur\u00e9_ou_n'existe_pas_!
+File_download=T\u00e9l\u00e9chargement_de_fichier
+File_exists=Le_fichier_existe
+File_extension=Extension_de_fichier
+File_has_been_updated_externally._What_do_you_want_to_do?=Le_fichier_a_\u00e9t\u00e9_mis_\u00e0_jour_externalement._Que_voulez-vous_faire_?
+File_not_found=Fichier_non_trouv\u00e9
+File_type=Type_de_fichier
+File_updated_externally=Fichier_mis_\u00e0_jour_externalement
+filename=nom_de_fichier
+Files_opened=Fichiers_ouverts
+Filter=Filtre
+Finished_autosetting_external_links.=La_d\u00e9finition_automatique_des_liens_externes_est_termin\u00e9e.
+Finished_synchronizing_%0_links._Entries_changed%c_%1.=Synchronisation_des_liens_%0_termin\u00e9e._Entr\u00e9es_modifi\u00e9es%c_%1.
+Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Ecriture_des_m\u00e9ta-donn\u00e9es_XMP_termin\u00e9e._Ecriture_de_%0_fichier(s).
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Fin_de_l'\u00e9criture_des_XMP_pour_%0_fichiers_(%1_pass\u00e9s,_%2_erreurs).
+First_select_the_entries_you_want_keys_to_be_generated_for.=Commencez_par_s\u00e9lectionner_les_entr\u00e9es_pour_lesquelles_vous_voulez_que_des_clefs_soient_g\u00e9n\u00e9r\u00e9es.
+Fit_table_horizontally_on_screen=Ajuster_horizontalement_la_table_\u00e0_l'\u00e9cran
+Float=Flottante
+Float_marked_entries=Entr\u00e9es_marqu\u00e9es_flottantes
+Font_Family=Famille_de_police
+Font_Preview=Pr\u00e9visualisation_de_la_police
+Font_Size=Taille_de_police
+Font_Style=Style_de_police
+FontSelector=S\u00e9lecteur_de_police
+for=pour
+Format_of_author_and_editor_names=Format_des_noms_d'auteurs_et_d'\u00e9diteurs
+Format_String=Cha\u00eene_de_format
+Format_used=Format_utilis\u00e9
+Formatter_Name=Nom_de_formateur
+Formatter_not_found=Formateur_non_trouv\u00e9
+found=trouv\u00e9
+Found_%0_plugin(s)=%0_greffon(s)_trouv\u00e9(s)
+found_in_aux_file=trouv\u00e9es_dans_le_fichier_aux
+Full_name=Nom_complet
+General=G\u00e9n\u00e9ral
+General_fields=Champs_g\u00e9n\u00e9raux
+Generate=Cr\u00e9er
+Generate_BibTeX_key=Cr\u00e9er_la_clef_BibTeX
+Generate_keys=G\u00e9n\u00e9rer_les_clefs
+Generate_keys_before_saving_(for_entries_without_a_key)=G\u00e9n\u00e9rer_les_clefs_avant_d'enregistrer_(pour_les_entr\u00e9es_sans_clef)
+Generate_keys_for_imported_entries=G\u00e9n\u00e9rer_les_clefs_pour_les_entr\u00e9es_import\u00e9es
+Generate_now=G\u00e9n\u00e9rer_maintenant
+Generated_BibTeX_key_for=Cr\u00e9ation_termin\u00e9e_de_la_clef_BibTeX_pour
+Generating_BibTeX_key_for=Cr\u00e9ation_en_cours_d'une_clef_BibTeX_pour
+Grab=Rechercher
+Gray_out_entries_not_in_group_selection=Griser_les_entr\u00e9es_hors_de_la_s\u00e9lection
+Gray_out_non-hits=Griser_les_entr\u00e9es_non_correspondantes
+Gray_out_non-matching_entries=Griser_les_entr\u00e9es_non_correspondantes
+Group_properties=Propri\u00e9t\u00e9s_du_groupe
+grouping_may_not_work_for_this_entry=Les_groupes_pourraient_ne_pas_fonctionner_pour_cette_entr\u00e9e.
+Groups=Groupes
+Harvard_RTF=Harvard_RTF
+Have_you_chosen_the_correct_package_path?=Avez-vous_choisi_le_bon_chemin_pour_le_paquetage_?
+Help=Aide
+Help_contents=Contenu_de_l'aide
+Help_on_groups=Aide_sur_les_groupes
+Help_on_key_patterns=Aide_sur_le_param\u00e9trage_des_clefs
+Help_on_Preview_Settings=Aide_sur_les_param\u00e8tres_de_l'aper\u00e7u
+Help_on_Regular_Expression_Search=Aide_sur_la_recherche_d'une_expression_r\u00e9guli\u00e8re
+Hide_non-hits=Masquer_les_entr\u00e9es_non_correspondantes
+Hide_non-matching_entries=Masquer_les_entr\u00e9es_non_correspondantes
+Hierarchical_context=Type_de_hi\u00e9rarchie
+Highlight=Surlign\u00e9e
+Highlight_groups_matching_all_selected_entries=Surligner_les_groupes_correspondant_\u00e0_toutes_les_entr\u00e9es_s\u00e9lectionn\u00e9es
+Highlight_groups_matching_any_selected_entry=Surligner_les_groupes_correspondant_\u00e0_au_moins_une_des_entr\u00e9es_s\u00e9lectionn\u00e9es
+Highlight_overlapping_groups=Surligner_les_groupes_se_chevauchant
+Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Astuce%c_Pour_chercher_uniquement_dans_des_champs_sp\u00e9cifiques,_entrez_par_exemple%c<p><tt>author%esmith_and_title%e\u00e9lectrique</tt>
+HTML=HTML
+HTML_table=Tableau_HTML
+HTML_table_(with_Abstract_&_BibTeX)=Tableau_HTML_(avec_R\u00e9sum\u00e9_&_BibTeX)
+Icon=Ic\u00f4ne
+Ignore=Ignorer
+Immediate_subgroups=Uniquement_les_sous-groupes_directs
+Import=Importer
+Import_and_keep_old_entry=Importer_et_conserver_l'ancienne_entr\u00e9e
+Import_and_remove_old_entry=Importer_et_supprimer_l'ancienne_entr\u00e9e
+Import_entries=Importer_les_entr\u00e9es
+Import_failed=L'importation_a_\u00e9chou\u00e9e
+Import_file=Fichier_\u00e0_importer
+Import_group_definitions=Importer_les_d\u00e9finitions_de_groupe
+Import_name=nom_Import
+Import_preferences=Importer_les_pr\u00e9f\u00e9rences
+Import_preferences_from_file=Importer_les_pr\u00e9f\u00e9rences_depuis_un_fichier
+Import_strings=Importer_les_cha\u00eenes
+Import_to_open_tab=Importer_dans_l'onglet_ouvert
+Import_word_selector_definitions=Importer_les_d\u00e9finitions_des_s\u00e9lecteurs_de_mots
+Imported_database=Base_import\u00e9e
+Imported_entries=Entr\u00e9es_import\u00e9es
+Imported_from_database=Import\u00e9_\u00e0_partir_de_la_base_de_donn\u00e9es
+ImportFormat_class=Classe_ImportFormat
+Importing=Importation_en_cours
+Importing_in_unknown_format=Importation_dans_un_format_inconnu
+In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=Dans_JabRef,_utiliser_une_paire_de_#_pour_d\u00e9limiter_une_cha\u00eene.
+Include_abstracts=Inclure_les_r\u00e9sum\u00e9s
+Include_entries=Entr\u00e9es_affect\u00e9es
+Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Inclut_les_sous-groupes_\:_Quand_s\u00e9lectionn\u00e9,_afficher_les_entr\u00e9es_contenues_dans_ce_groupe_ou_ses_sous-groupes
+Incremental=Incr\u00e9mentale
+Incremental_search=Recherche_incr\u00e9mentale
+Incremental_search_failed._Repeat_to_search_from_top.=La_recherche_incr\u00e9mentale_n'a_pas_abouti._R\u00e9p\u00e9ter_depuis_le_d\u00e9but.
+Independent_group\:_When_selected,_view_only_this_group's_entries=Groupe_ind\u00e9pendant_\:_Quand_s\u00e9lectionn\u00e9,_afficher_uniquement_les_entr\u00e9es_de_ce_groupe
+Initially_show_groups_tree_expanded=Afficher_au_d\u00e9part_l'arbre_des_groupes_d\u00e9velopp\u00e9
+Input=Attribution_des_champs
+Input_error=Entr\u00e9e_erron\u00e9e
+Insert=Ins\u00e9rer
+Insert_rows=Ins\u00e9rer_des_lignes
+Insert_selected_citations_into_LyX/Kile=Envoyer_les_citations_s\u00e9lectionn\u00e9es_dans_LyX/Kile
+Insert_selected_citations_into_WinEdt=Envoyer_les_citations_s\u00e9lectionn\u00e9es_dans_&WinEdt
+insert_string_=ins\u00e9rer_la_cha\u00eene
+Insert_URL=Ins\u00e9rer_l'URL
+integrity=int\u00e9grit\u00e9
+Integrity_check=V\u00e9rification_d'int\u00e9grit\u00e9
+Intersection=Intersection
+Invalid_BibTeX_key=Clef_BibTeX_invalide
+Invalid_date_format=Format_de_date_invalide
+Invalid_URL=URL_invalide
+Inverted=Compl\u00e9mentaire
+is_a_standard_type.=est_un_type_standard.
+ISO_abbreviation=Abr\u00e9viation_ISO
+Item_list_for_field=Liste_des_choix_pour_le_champ
+jabref=jabref
+JabRef_help=Aide_de_JabRef
+JabRef_preferences=Pr\u00e9f\u00e9rences_pour_JabRef
+Journal_abbreviations=Abr\u00e9viations_de_journaux
+Journal_list_preview=Pr\u00e9visualisation_de_la_liste_des_journaux
+Journal_name=Nom_du_journal
+Keep=Garder
+Keep_both=Garder_les_deux
+Keep_lower=Garder_celui_du_bas
+Keep_upper=Garder_celui_du_haut
+Key_bindings=Affectations_des_touches
+Key_bindings_changed=Affectations_des_touches_modifi\u00e9es
+Key_generator_settings=Param\u00e9trage_du_g\u00e9n\u00e9rateur_de_clef
+Key_pattern=Param\u00e9trage_des_clefs
+keys_in_database=clefs_dans_la_base_de_donn\u00e9es
+Keyword=Mot-clef
+Label=Nom_du_champ
+Language=Langue_
+Last_modified=Dernier_modifi\u00e9
+LaTeX_AUX_file=Fichier_LaTeX_AUX
+Leave_file_in_its_current_directory.=Laisser_le_fichier_dans_son_r\u00e9pertoire_courant
+Leave_files_in_their_current_directory.=Laisser_les_fichiers_dans_le_r\u00e9pertoire_courant
+Left=Gauche
+License=Licence
+Limit_to_fields=Restreindre_aux_champs
+Limit_to_selected_entries=Restreindre_aux_seules_entr\u00e9es_s\u00e9lectionn\u00e9es
+Link=Lien
+Link_local_file=Lier_le_fichier_local
+Link_to_file_%0=Lien_vers_le_fichier_%0
+Listen_for_remote_operation_on_port=Ecouter_le_port_pour_des_op\u00e9rations_\u00e0_distance_
+Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Charger_et_enregistrer_les_pr\u00e9f\u00e9rences_de/vers_jabref.xml_au_d\u00e9marrage_(mode_clef_m\u00e9moire)
+Load_session=Charger_la_session
+Loading_session...=Chargement_de_la_session...
+localhost=localhost
+Look_and_feel=Apparence
+Looking_for_pdf...=Recherche_de_pdf...
+lower=minuscule
+Main_file_directory=R\u00e9pertoire_de_fichiers_principal_
+Main_layout_file=Principal_fichier_de_mise_en_page
+Main_PDF_directory=R\u00e9pertoire_PDF_principal_
+Main_PS_directory=R\u00e9pertoire_PS_principal_
+Manage=G\u00e9rer
+Manage_custom_exports=G\u00e9rer_les_exportations_personnalis\u00e9es
+Manage_custom_imports=G\u00e9rer_les_importations_personnalis\u00e9es
+Manage_external_file_types=G\u00e9rer_les_types_de_fichiers_externes
+Manage_journal_abbreviations=G\u00e9rer_les_abr\u00e9viations_de_journaux
+Mark_entries=Etiqueter_ces_entr\u00e9es
+Mark_entry=Etiqueter_l'entr\u00e9e
+Mark_new_entries_with_addition_date=Enregistrer_la_date_d'ajout_pour_les_nouvelles_entr\u00e9es
+Mark_new_entries_with_owner_name=Nouvelles_entr\u00e9es_attribu\u00e9es_au_propri\u00e9taire_
+Marked_selected=Etiquetage_de_la_s\u00e9lection
+Memory_Stick_Mode=Mode_Clef_M\u00e9moire
+Menu_and_label_font_size=Taille_de_police_pour_les_menus_et_les_champs_
+Merged_external_changes=Fusionner_les_modifications_externes
+Messages=Messages
+Messages_and_Hints=Avertissements_et_Suggestions
+Modification_of_field=Modification_du_champ
+Modified_group_"%0".=Groupe_"%0"_modifi\u00e9.
+Modified_groups=Groupes_modifi\u00e9s
+Modified_string=Cha\u00eene_modifi\u00e9e
+Modify=Modifier
+modify_group=Modifier_le_groupe
+MODS=MODS
+Move=D\u00e9placer
+Move_down=D\u00e9placer_vers_le_bas
+Move_entries_in_group_selection_to_the_top=D\u00e9placer_les_entr\u00e9es_s\u00e9lectionn\u00e9es_en_haut
+Move_external_links_to_'file'_field=D\u00e9placer_les_liens_externes_vers_le_champ_'fichier'
+Move_files_to_file_directory.=D\u00e9placer_les_fichiers_vers_le_r\u00e9pertoire_de_fichiers.
+move_group=d\u00e9placer_le_groupe
+Move_string_down=D\u00e9placer_la_cha\u00eene_vers_le_bas
+Move_string_up=D\u00e9placer_la_cha\u00eene_vers_le_haut
+Move_up=D\u00e9placer_vers_le_haut
+Moved_group_"%0".=Groupe_"%0"_d\u00e9plac\u00e9.
+MS_Office_2007=MS_Office_2007
+MySQL=MySQL
+MySQL_database=Base_de_donn\u00e9es_MySQL
+Name=Nom
+Name_formatter=Formateur_de_nom
+Natbib_style=Style_Natbib
+nested_aux_files=fichiers_AUX_imbriqu\u00e9s
+New=Nouveau
+new=nouveau
+New_BibTeX_database=Nouvelle_base_BibTeX
+New_BibTeX_entry=Nouvelle_entr\u00e9e_BibTeX
+New_BibTeX_subdatabase=Nouveau_fichier_BibTeX
+New_content=Nouveau_contenu
+New_database_created.=Nouvelle_base_cr\u00e9\u00e9e.
+New_field_value=Nouvelle_valeur_du_champ
+New_file=Nouveau_fichier
+New_file_link_(INSERT)=Nouveau_lien_de_fichier_(INSERT)
+New_group=Nouveau_groupe
+New_string=Nouvelle_cha\u00eene
+Next_entry=Entr\u00e9e_suivante
+No_%0_found=Pas_de_%0_trouv\u00e9
+No_actual_changes_found.=Pas_de_changements_trouv\u00e9s.
+no_base-bibtex-file_specified=fichier_BibTeX_non_sp\u00e9cifi\u00e9_!
+no_database_generated=pas_de_base_cr\u00e9\u00e9e
+No_duplicates_found=Pas_de_doublons_trouv\u00e9s
+No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Pas_d'entr\u00e9es_trouv\u00e9es._Assurez-vous,_SVP,_que_vous_utilisez_le_filtre_d'importation_appropri\u00e9.
+No_entries_found_for_the_search_string_'%0'=Pas_d'entr\u00e9e_pour_la_cha\u00eene_de_recherche_'%0'
+No_entries_imported.=Pas_d'entr\u00e9es_import\u00e9es.
+No_entries_or_multiple_entries_selected.=Pas_d'entr\u00e9e_s\u00e9lectionn\u00e9e_ou_s\u00e9lection_de_plusieurs_entr\u00e9es.
+No_entries_selected=Pas_d'entr\u00e9es_s\u00e9lectionn\u00e9es
+No_entries_selected.=Pas_d'entr\u00e9es_s\u00e9lectionn\u00e9es.
+No_exceptions_have_ocurred.=Aucune_exception_n'est_survenue.
+No_files_found.=Fichiers_non_trouv\u00e9s.
+No_GUI._Only_process_command_line_options.=Pas_d'interface_utilisateur._Traitement_limit\u00e9_aux_options_de_la_ligne_de_commande.
+No_journal_names_could_be_abbreviated.=Aucun_nom_de_journal_n'a_pu_\u00eatre_abr\u00e9g\u00e9.
+No_journal_names_could_be_unabbreviated.=Aucun_nom_de_journal_n'a_pu_\u00eatre_d\u00e9velopp\u00e9.
+No_PDF_linked=Pas_de_PDF_li\u00e9
+No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=PDF_ou_PS_non_d\u00e9fini_et_fichier_correspondant_\u00e0_la_clef_BibTeX_non_trouv\u00e9
+No_plugins_were_found_in_the_following_folders\:=Aucun_greffon_n'a_\u00e9t\u00e9_trouv\u00e9_dans_les_r\u00e9pertoires_suivants_:
+No_references_found=Aucune_r\u00e9f\u00e9rence_trouv\u00e9e
+No_saved_session_found.=Pas_trouv\u00e9_de_session_enregistr\u00e9e.
+No_url_defined=Pas_d'URL_d\u00e9finie
+No_XMP_metadata_found_in_=Pas_de_m\u00e9tadonn\u00e9es_XMP_trouv\u00e9es_dans_
+not=non
+not_found=non_trouv\u00e9
+Not_saved_(empty_session)=Pas_d'enregistrement_(session_vide)
+Note_that_the_entry_causing_the_problem_has_been_selected.=Noter_que_l'entr\u00e9e_responsable_du_probl\u00e8me_a_\u00e9t\u00e9_s\u00e9lectionn\u00e9e.
+Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Notez_que_vous_devez_sp\u00e9cifier_le_nom_de_classe_complet_pour_l'apparence,
+Nothing_to_redo=Rien_\u00e0_r\u00e9p\u00e9ter
+Nothing_to_undo=Rien_\u00e0_annuler
+Number_of_references_to_fetch?=Nombre_de_r\u00e9f\u00e9rences_\u00e0_r\u00e9cup\u00e9rer_?
+occurences=occurrences
+OK=OK
+Ok=Ok
+One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Un_ou_plusieurs_liens_de_fichier_sont_du_type_'%0',_qui_est_ind\u00e9fini._Que_voulez-vous_faire_?
+One_or_more_keys_will_be_overwritten._Continue?=Une_ou_plusieurs_clefs_seront_\u00e9cras\u00e9es._Continuer_?
+Only_one_item_is_supported=Un_seul_objet_est_support\u00e9
+Open=Ouvrir
+Open_BibTeX_database=Ouvrir_une_base_BibTeX
+Open_database=Ouvrir_une_base
+Open_editor_when_a_new_entry_is_created=Ouvrir_l'\u00e9diteur_quand_une_nouvelle_entr\u00e9e_est_cr\u00e9\u00e9e
+Open_file=Ouvrir_le_fichier
+Open_last_edited_databases_at_startup=Ouvrir_les_fichiers_de_la_derni\u00e8re_session_au_d\u00e9marrage
+Open_PDF_or_PS=Ouvrir_PDF_ou_PS
+Open_right-click_menu_with_Ctrl+left_button=D\u00e9rouler_le_menu_contextuel_avec_Ctrl+clic_gauche
+Open_URL_or_DOI=Ouvrir_URL_ou_DOI
+OpenDocument_Spreadsheet=Tableur_OpenDocument
+Opened_database=Base_ouverte
+Opening=Ouverture_en_cours
+Opening_preferences...=Ouverture_des_pr\u00e9f\u00e9rences_en_cours...
+OpenOffice_Calc=OpenOffice_Calc
+OpenOffice_CSV=OpenOffice_CSV
+Operation_canceled.\n=Op\u00e9ration_annul\u00e9e.\n
+Operation_not_supported=Op\u00e9ration_non_support\u00e9e
+Optional_fields=Champs_optionnels
+Options=Options
+or=ou
+out_of=sur
+Output=Sortie
+Output_or_export_file=Fichier_de_sortie_ou_d'exportation
+Override=Remplacer
+Override_default_file_directories=Remplacer_les_r\u00e9pertoires_de_fichier_par_d\u00e9faut
+Override_default_font_settings=Se_substituer_aux_param\u00e8tres_de_police_par_d\u00e9faut
+override_the_bibtex_key_by_the_selected_text=remplacer_la_clef_BibTeX_par_le_texte_s\u00e9lectionn\u00e9
+Overwrite=Ecraser
+Overwrite_existing_field_values=Ecraser_les_valeurs_existantes_du_champ
+Overwrite_keys=Ecraser_les_clefs
+pairs_processed=paires_trait\u00e9es
+Password_\:=Mot_de_passe_:
+Paste=Coller
+paste_entries=Coller_les_entr\u00e9es
+paste_entry=Coller_l'entr\u00e9e
+Paste_from_clipboard=Coller_depuis_le_presse-papier
+Pasted=Coll\u00e9
+Path_to_%0_not_defined=Chemin_vers_%0_non_d\u00e9fini
+Path_to_LatexEditor_(LEd.exe)=Chemin_vers_LatexEditor_(LEd.exe)_
+Path_to_LyX_pipe=Chemin_du_canal_de_transmission_LyX_
+Path_to_Vim=Chemin_de_Vim_
+Path_to_WinEdt.exe=Chemin_de_WinEdt.exe_
+PDF_directory=R\u00e9pertoire_PDF
+PDF_does_not_exist=Le_PDF_n'existe_pas
+Personal_journal_list=Liste_personnelle_de_journaux
+Plain_text_import=Importation_de_texte_brut
+Please_check_your_network_connection_to_this_machine.=SVP,_v\u00e9rifiez_votre_connexion_r\u00e9seau_\u00e0_cette_machine.
+Please_enter_a_name_for_the_group.=SVP,_entrez_un_nom_pour_le_groupe.
+Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=SVP,_entrez_un_terme_\u00e0_recherche._Par_exemple,_pour_rechercher_<b>Smith</b>_dans_tout_les_champs,_entrez %c<p><tt>smith</tt><p>Pour_rechercher_<b>Smith</b>_dans_le_champ_<b>Author</b>_et_<b>\u00e9lectrique</b>_dans_le_c [...]
+Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=SVP,_entrez_le_champ_de_recherche_(par_ex._<b>keywords</b>)_et_le_mot-clef_\u00e0_rechercher_(par_ex._<b>\u00e9lectrique</b>).
+Please_enter_the_string's_label=SVP,_entrez_le_nom_de_la_cha\u00eene
+Please_select_an_importer=S\u00e9lectionner_un_filtre_d'importation,_SVP
+Please_select_an_importer.=S\u00e9lectionner_un_filtre_d'importation,_SVP.
+Please_select_exactly_one_group_to_move.=SVP,_s\u00e9lectionnez_uniquement_un_groupe_\u00e0_d\u00e9placer.
+Please_specify_the_=Merci_de_sp\u00e9cifier_le_
+Possible_duplicate_entries=Entr\u00e9es_potentiellement_dupliqu\u00e9es
+Possible_duplicate_of_existing_entry._Click_to_resolve.=Duplication_possible_d'une_entr\u00e9e_existante._Cliquer_pour_v\u00e9rifier.
+Preamble=Pr\u00e9ambule
+Preferences=Pr\u00e9f\u00e9rences
+Preferences_recorded.=Pr\u00e9f\u00e9rences_enregistr\u00e9es.
+Preview=Aper\u00e7u
+Previous_entry=Entr\u00e9e_pr\u00e9c\u00e9dente
+Primary_sort_criterion=Crit\u00e8re_de_tri_principal
+Print_Preview=Imprimer_l'aper\u00e7u
+Printing_Entry_Preview=Impression_de_l'aper\u00e7u_de_l'entr\u00e9e
+Problem_with_parsing_entry=Probl\u00e8me_de_traitement_d'une_entr\u00e9e
+Processing_=Traitement_de_
+Program_output=Sortie_du_programme
+PS_directory=R\u00e9pertoire_PS
+Push_entries_to_external_application_(%0)=Envoyer_les_entr\u00e9es_vers_l'application_externe_(%0)
+Push_selection_to_Emacs=Envoyer_la_s\u00e9lection_dans_Emacs
+Push_selection_to_LyX/Kile=Envoyer_la_s\u00e9lection_dans_LyX/Kile
+Push_selection_to_Vim=Envoyer_la_s\u00e9lection_dans_Vim
+Push_selection_to_WinEdt=Envoyer_la_s\u00e9lection_dans_WinEdt
+Push_to_LatexEditor=Envoyer_vers_LaTeXEditor
+Pushed_citations_to_%0=Envoyer_les_citations_vers_%0
+Pushed_citations_to_Emacs=Envoyer_les_citations_dans_Emacs
+Pushed_citations_to_Vim=Envoyer_les_citations_dans_Vim
+Pushed_citations_to_WinEdt=Citations_envoy\u00e9es_vers_WinEdt
+Pushed_the_citations_for_the_following_rows_to=Envoyer_les_citations_pour_les_lignes_suivantes_vers
+Quit_JabRef=Quitter_JabRef
+Quit_synchronization=Quitter_la_synchronisation
+Raw_source=Texte_brut
+Really_delete_the_selected=Voulez-vous_vraiment_supprimer_cette
+Rearrange_tabs_alphabetically_by_title=Classer_les_onglets_par_ordre_alphab\u00e9tique
+Redo=R\u00e9p\u00e9ter
+Reference_database=Base_de_r\u00e9f\u00e9rence
+References_found=R\u00e9f\u00e9rences_trouv\u00e9es
+Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Raffine_le_super-groupe_\:_Quand_s\u00e9lectionn\u00e9,_afficher_les_entr\u00e9es_contenues_\u00e0_la_fois_dans_ce_groupe_et_son_super-groupe
+Refresh_view=Rafra\u00eechir_la_vue
+Regular_Expression=Expression_r\u00e9guli\u00e8re
+Remember_these_entry_types?=Se_souvenir_de_ces_types_d'entr\u00e9es_?
+Remote_operation=Acc\u00e8s_\u00e0_distance
+Remote_server_port=Port_du_serveur_d'acc\u00e8s_\u00e0_distance
+Remove=Supprimer
+Remove_all?=Tout_supprimer_?
+Remove_all_subgroups=Supprimer_les_sous-groupes
+Remove_all_subgroups_of_"%0"?=Supprimer_tous_les_sous-groupes_de_"%0"_?
+Remove_double_braces_around_BibTeX_fields_when_loading.=Supprimer_les_doubles_accolades_autour_des_champs_BibTeX_\u00e0_l'ouverture
+Remove_duplicates=Supprimer_les_doublons
+Remove_entry_from_import=Supprimer_l'entr\u00e9e_de_l'importation
+Remove_entry_selection_from_this_group=Supprimer_les_entr\u00e9es_s\u00e9lectionn\u00e9es_de_ce_groupe
+Remove_entry_type=Supprimer_le_type_d'entr\u00e9e
+Remove_file_link_(DELETE)=Supprimer_le_lien_de_fichier_(DELETE)
+remove_from_group=supprimer_du_groupe
+Remove_from_group=Supprimer_du_groupe
+Remove_group=Supprimer_le_groupe
+Remove_group,_keep_subgroups=Supprimer_le_groupe,_garder_les_sous-groupes
+Remove_group_"%0"?=Supprimer_le_groupe_"%0"_?
+Remove_group_"%0"_and_its_subgroups?=Supprimer_le_groupe_"%0"_et_ses_sous-groupes_?
+remove_group_(keep_subgroups)=supprimer_le_groupe_(garder_les_sous-groupes)
+remove_group_and_subgroups=supprimer_le_groupe_et_les_sous-groupes
+Remove_group_and_subgroups=Supprimer_le_groupe_et_les_sous-groupes
+Remove_link=Supprimer_le_lien
+Remove_old_entry=Supprimer_l'ancienne_entr\u00e9e
+Remove_selected_strings=Supprimer_les_cha\u00eenes_s\u00e9lectionn\u00e9es
+remove_string_=enlever_la_cha\u00eene_
+Removed_group_"%0".=Groupe_"%0"_supprim\u00e9.
+Removed_group_"%0"_and_its_subgroups.=Groupe_"%0"_et_ses_sous-groupes_supprim\u00e9s.
+Removed_string=Cha\u00eene_supprim\u00e9e
+Renamed_string=Cha\u00eene_renomm\u00e9e
+Replace=Remplacer
+Replace_(regular_expression)=Remplacer_(expression_r\u00e9guli\u00e8re)_
+Replace_string=Remplacer_la_cha\u00eene
+Replace_with=Remplacer_par
+Replaced=Remplac\u00e9
+Required_fields=Champs_requis
+Reset_all=R\u00e9tablir_les_options_pr\u00e9c\u00e9dentes
+Reset_file_type_definitons=R\u00e9tablir_les_d\u00e9finitions_de_type_de_fichier
+Resolve_strings_for_all_fields_except=Traiter_les_cha\u00eenes_pour_tous_les_champs_sauf
+Resolve_strings_for_standard_BibTeX_fields_only=Traiter_les_cha\u00eenes_pour_les_champs_BibTeX_standard_uniquement
+resolved=r\u00e9solu
+Results=R\u00e9sultats
+Revert_to_original_source=R\u00e9tablir_le_contenu_initial
+Review=Remarques
+Review_changes=Revoir_les_changements
+Right=Droite
+root=root
+Save=Enregistrer
+Save_all_finished.=Enregistrement_de_tout_termin\u00e9e.
+Save_all_open_databases=Enregistrement_toutes_les_bases_ouvertes
+Save_before_closing=Enregistrement_avant_fermeture
+Save_database=Enregistrement_la_base
+Save_database_as_...=Enregistrement_la_base_sous...
+Save_entries_in_their_original_order=Enregistrement_les_entr\u00e9es_dans_leur_ordre_original
+Save_failed=Echec_de_l'enregistrement
+Save_failed_during_backup_creation=L'enregistrement_a_\u00e9chou\u00e9_durant_la_cr\u00e9ation_de_la_copie_de_secours
+Save_failed_while_committing_changes=L'enregistrement_a_\u00e9chou\u00e9_lors_de_la_soumission_des_changements
+Save_ordered_by_author/editor/year=Enregistrer_les_entr\u00e9es_selon_author/editor/year
+Save_selected_as_...=Enregistrer_la_s\u00e9lection_sous...
+Saved_database=Base_enregistr\u00e9e
+Saved_selected_to=S\u00e9lection_enregistr\u00e9e_dans
+Saved_session=Session_enregistr\u00e9e
+Saving=Enregistrement_en_cours
+Saving_all_databases...=Enregistrement_de_toutes_les_bases...
+Saving_database=Enregistrement_de_la_base_en_cours
+Scan=D\u00e9marrer
+Search=Recherche
+Search_All_Fields=Recherche_dans_tous_les_champs
+Search_all_fields=Recherche_dans_tous_les_champs
+Search_error=Erreur_de_recherche
+Search_expression=Expression_\u00e0_rechercher_
+Search_for=Rechercher
+Search_general_fields=Recherche_dans_les_champs_g\u00e9n\u00e9raux
+Search_IEEEXplore=Recherche_IEEEXplore
+Search_IEEExplore=Recherche_IEEExplore
+Search_optional_fields=Recherche_dans_les_champs_optionnels
+Search_required_fields=Recherche_dans_les_champs_requis
+Search_Specified_Field(s)=Recherche_dans_les_champs_sp\u00e9cifi\u00e9s
+Searched_database._Global_number_of_hits=Recherche_effectu\u00e9e._Nombre_total_de_r\u00e9sultats
+Searched_database._Number_of_hits=Recherche_effectu\u00e9e._Nombre_de_r\u00e9sultats_trouv\u00e9s
+Searching_for_%0_file=Recherche_de_%0
+Searching_for_duplicates...=Recherche_des_doublons_en_cours...
+Searching_for_files=Recherche_de_fichiers...
+Secondary_sort_criterion=Crit\u00e8re_secondaire_de_tri
+Select=S\u00e9lectionner
+Select_a_Zip-archive=S\u00e9lectionner_une_archive_ZIP
+Select_action=S\u00e9lectionner_l'op\u00e9ration
+Select_all=Tout_s\u00e9lectionner
+Select_Classpath_of_New_Importer=S\u00e9lectionner_le_chemin_de_classe_du_nouveau_fil7tre_d'importation
+Select_encoding=S\u00e9lectionner_l'encodage
+Select_entries_in_group_selection=S\u00e9lectionner_les_entr\u00e9es_dans_la_s\u00e9lection
+Select_entry_type=S\u00e9lectionner_un_type_d'entr\u00e9e
+Select_external_application=S\u00e9lectionner_une_application_externe
+Select_file_from_ZIP-archive=S\u00e9lectionner_un_fichier_depuis_une_archive_ZIP
+Select_format=S\u00e9lectionner_le_format
+Select_icon=S\u00e9lectionner_un_ic\u00f4ne
+Select_matches=S\u00e9lectionner_les_correspondances
+Select_new_ImportFormat_Subclass=S\u00e9lectionner_une_nouvelle_sous-classe_ImportFormat
+Select_the_tree_nodes_to_view_and_accept_or_reject_changes=S\u00e9lectionner_les_noeuds_de_l'arborescence_pour_voir,_et_accepter_ou_rejeter,_les_modifications
+Selected_entries=Les_entr\u00e9es_s\u00e9lectionn\u00e9es
+Selector_enabled_fields=Champs_de_s\u00e9lecteur_actifs
+Server_Hostname_\:=Nom_de_l'h\u00f4te_du_serveur_:
+Server_Type_\:=Type_de_serveur_:
+Set_field=Configurer_le_champ
+Set_fields=Configurer_les_champs
+Set_general_fields=D\u00e9finir_les_champs_g\u00e9n\u00e9raux
+Set_main_external_file_directory=D\u00e9finir_le_r\u00e9pertoire_principal_des_fichiers_externes
+Set_table_font=D\u00e9finir_la_police_de_la_table
+Settings=Param\u00e8tres
+Setup_selectors=G\u00e9rer_les_s\u00e9lecteurs
+Short_form=Forme_courte
+Shortcut=Raccourci
+Show/edit_BibTeX_source=Montrer/\u00e9diter_le_source_BibTeX
+Show_'Firstname_Lastname'=Ordre_d'affichage_'Pr\u00e9nom_Nom'
+Show_'Lastname,_Firstname'=Ordre_d'affichage_'Nom,_Pr\u00e9nom'
+Show_BibTeX_source_by_default=Par_d\u00e9faut,_afficher_l'onglet_Source_BibTeX
+Show_BibTeX_source_panel=Afficher_l'onglet_"Source_BibTeX"
+Show_confirmation_dialog_when_deleting_entries=Demander_une_confirmation_lors_de_la_suppression_d'entr\u00e9es
+Show_description=Montrer_la_description
+Show_dynamic_groups_in_<i>italics</i>=Afficher_les_groupes_dynamiques_en_<i>italique</i>
+Show_entries_*not*_in_group_selection=Montrer_les_entr\u00e9es_*non*_s\u00e9lectionn\u00e9es
+Show_file_column=Afficher_la_colonne_Fichier
+Show_icons_for_groups=Afficher_les_ic\u00f4nes_pour_les_groupes
+Show_last_names_only=Afficher_uniquement_les_noms_propres
+Show_names_unchanged=Ordre_des_noms_inchang\u00e9
+Show_one_less_rows=Afficher_une_ligne_de_moins
+Show_one_more_row=Afficher_une_ligne_de_plus
+Show_optional_fields=Montrer_les_champs_optionnels
+Show_PDF/PS_column=Afficher_la_colonne_PDF/PS
+Show_required_fields=Montrer_les_champs_requis
+Show_URL/DOI_column=Afficher_la_colonne_URL/DOI
+Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Afficher_un_message_d'avertissement_quand_une_clef_BibTeX_d\u00e9j\u00e0_existante_est_entr\u00e9e
+Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Afficher_une_fen\u00eatre_d'avertissement_quand_une_clef_BibTeX_vide_est_entr\u00e9e
+Simple_HTML=HTML_(simple)
+Size=Taille
+Skip=Passer
+Skipped_-_No_PDF_linked=Saut\u00e9_-_Pas_de_PDF_li\u00e9
+Skipped_-_PDF_does_not_exist=Omis_-_Le_PDF_n'existe_pas
+Skipped_entry.=Entr\u00e9e_omise
+Sort_alphabetically=Classer_alphab\u00e9tiquement
+Sort_Automatically=Trier_automatiquement
+Sort_order=Ordre_de_tri
+sort_subgroups=trier_les_sous-groupes
+Sorted_all_subgroups_recursively.=Tous_les_sous-groupes_r\u00e9cursivement_tri\u00e9s.
+Sorted_immediate_subgroups.=Sous-groupes_directs_tri\u00e9s.
+source_edit=\u00e9dition_du_source
+Special_Name_Formatters=Formateurs_de_nom_sp\u00e9ciaux
+Special_table_columns=Colonnes_de_tableau_particuli\u00e8res
+SQL_connection_established.=Connexion_SQL_\u00e9tablie.
+Start_incremental_search=D\u00e9marrer_la_recherche_incr\u00e9mentale
+Start_search=D\u00e9buter_la_recherche
+Starting_import=D\u00e9but_d'importation
+Statically_group_entries_by_manual_assignment=Grouper_manuellement_les_entr\u00e9es
+Status=Etat
+Stop=Arr\u00eat
+Store_journal_abbreviations=Stocker_les_abr\u00e9viations_de_journaux
+Store_string=Enregistrer_la_cha\u00eene
+Store_the_following_fields_with_braces_around_capital_letters=Stocker_les_champs_suivants_avec_des_accolades_autour_des_lettres_capitales_
+Stored_entry=Entr\u00e9e_enregistr\u00e9e
+Strings=Cha\u00eene
+Strings_for_database=Cha\u00eenes_pour_la_base
+Subdatabase_from_aux=BibTeX_\u00e0_partir_de_LaTex_aux
+Suggest=Sugg\u00e9rer
+Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Basculer_entre_les_noms_de_journaux_d\u00e9velopp\u00e9s_et_abr\u00e9g\u00e9s_si_le_nom_de_journal_est_connu.
+Synchronize_%0_links=Synchroniser_les_liens_%0
+Synchronize_file_links=Synchroniser_les_liens_vers_les_fichiers
+Synchronizing_%0_links...=Synchronisation_des_liens_%0...
+Table_appearance=Apparence_de_la_table
+Table_background_color=Couleur_d'arri\u00e8re-plan_de_la_table
+Table_grid_color=Couleur_de_la_grille_de_la_table
+Table_text_color=Couleur_du_texte_de_la_table
+Tabname=Nom_d'onglet
+Target_file_cannot_be_a_directory.=Le_fichier_cible_ne_peut_pas_\u00eatre_un_r\u00e9pertoire.
+Tertiary_sort_criterion=Crit\u00e8re_tertiaire_de_tri
+Test=Test
+Text_Input_Area=Zone_de_saisie_du_texte
+The_#_character_is_not_allowed_in_BibTeX_fields=Le_caract\u00e8re_#_est_interdit_dans_un_champ_BibTeX
+The_chosen_date_format_for_new_entries_is_not_valid=Le_format_de_date_choisi_pour_les_nouvelles_entr\u00e9es_n'est_pas_valide
+The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=L'encodage_'%0'_choisi_ne_peut_pas_encoder_les_caract\u00e8res_suivants_:_
+The_CiteSeer_fetch_operation_returned_zero_results.=La_recherche_CiteSeerX_n'a_retourn\u00e9_aucun_r\u00e9sultat.
+The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=La_version_actuelle_a_une_nouvelle_fa\u00e7on_de_g\u00e9rer_les_liens_vers_des_fichiers_externes.<br>Pour_en_profiter,_vos_liens_doivent_\u00eatre_convertis_en_un_autre_format<br>et_JabRef_doit_\u00eatre_configur\u00e9_pour_afficher_les_nouveaux_liens.
+the_field_<b>%0</b>=le_champ_<b>%0</b>
+The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Le_fichier<BR>'%0'<BR>a_\u00e9t\u00e9_modifi\u00e9_<BR>externalement !
+The_group_"%0"_already_contains_the_selection.=Le_groupe_"%0"_contient_d\u00e9j\u00e0_la_s\u00e9lection.
+The_label_of_the_string_can_not_be_a_number.=L'intitul\u00e9_de_la_cha\u00eene_ne_peut_\u00eatre_un_nombre.
+The_label_of_the_string_can_not_contain_spaces.=Un_nom_de_cha\u00eene_ne_peut_pas_contenir_d'espaces.
+The_label_of_the_string_can_not_contain_the_'#'_character.=Le_nom_de_la_cha\u00eene_ne_peut_pas_contenir_le_caract\u00e8re_'#'.
+The_output_option_depends_on_a_valid_import_option.=L'option_de_sortie_d\u00e9pend_d'une_option_d'importation_valide.
+The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=Le_PDF_contient_un_ou_plusieurs_enregistrements_BibTeX.\nVoulez-vous_les_importer_comme_de_nouvelles_entr\u00e9es_dans_la_base_de_donn\u00e9es_actuelle_?
+The_regular_expression_<b>%0</b>_is_invalid%c=L'expression_r\u00e9guli\u00e8re_<b>%0</b>_est_invalide%c
+The_search_is_case_insensitive.=La_recherche_n'est_pas_sensible_\u00e0_la_casse.
+The_search_is_case_sensitive.=La_recherche_est_sensible_\u00e0_la_casse.
+The_string_has_been_removed_locally=La_cha\u00eene_a_\u00e9t\u00e9_supprim\u00e9e_localement
+There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Il_y_a_des_doublons_potentiels_(marqu\u00e9_avec_un_ic\u00f4ne_'D')_qui_n'ont_pas_\u00e9t\u00e9_trait\u00e9s._Continuer_?
+this_button_will_update=Ce_bouton_sera_mis_\u00e0_jour
+This_database_was_written_using_an_older_version_of_JabRef.=Cette_base_a_\u00e9t\u00e9_\u00e9crite_par_une_version_ant\u00e9rieure_de_JabRef.
+This_entry_has_no_BibTeX_key._Generate_key_now?=Cette_entr\u00e9e_n'a_pas_de_clef_BibTeX._En_g\u00e9n\u00e9rer_une_maintenant_?
+This_entry_is_incomplete=Cette_entr\u00e9e_est_incompl\u00e8te
+This_entry_type_cannot_be_removed.=Ce_type_d'entr\u00e9e_ne_peut_pas_\u00eatre_supprim\u00e9.
+This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Ce_lien_externe_est_du_type_'%0',_qui_est_ind\u00e9fini._Que_voulez-vous_faire_?
+This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Ce_groupe_contient_des_entr\u00e9es_bas\u00e9es_sur_un_ajout_manuel._Des_entr\u00e9es_peuvent_\u00eatre_ajout\u00e9es [...]
+This_group_contains_entries_in_which=Ce_groupe_contient_des_entr\u00e9es_pour_lesquelles
+This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Ce_groupe_contient_des_entr\u00e9es_dans_lesquelles_un_champ_contient_l'expression_r\u00e9guli\u00e8re_<b>%0</b> 
+This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Ce_groupe_contient_des_entr\u00e9es_dans_lesquelles_un_champ_contient_le_terme_<b>%0</b> 
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Ce_groupe_contient_des_entr\u00e9es_dont_le_champ_<b>%0</b>_contient_le_mot-clef_<b>%1</b> 
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Ce_groupe_contient_des_entr\u00e9es_dont_le_champ_<b>%0</b>_contient_l'expression_r\u00e9guli\u00e8re_<b>%1</b> 
+This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Ceci_est_simplement_une_fen\u00eatre_de_copier-coller_pour_importer_certains_champs_\u00e0_partir_d'un_texte_normal
+This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=JabRef_cherche_chaque_%0_lien_et_v\u00e9rifie_si_le_fichier_existe._Si_non,_des_options_vous_seront_propos\u00e9es<BR>pour_r\u00e9soudre_le_probl\u00e8me.
+This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Cette_op\u00e9ration_n\u00e9cessite_que_toutes_les_entr\u00e9es_s\u00e9lectionn\u00e9es_aient_des_clefs_BibTeX_d\u00e9finies
+This_operation_requires_at_least_one_entry.=Cette_op\u00e9ration_n\u00e9cessite_au_moins_une_entr\u00e9e.
+This_operation_requires_one_or_more_entries_to_be_selected.=Cette_op\u00e9ration_n\u00e9cessite_qu'une_ou_plusieurs_entr\u00e9es_soient_s\u00e9lectionn\u00e9es.
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Ceci_d\u00e9placera_tous_les_liens_externes_des_champs_'pdf'_et_'ps'_dans_le_champ_'%0'._Continuer_?
+To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Pour_configurer,_voir_<B>Options_->_G\u00e9rer_les_abr\u00e9viations_de_journaux</B>
+Toggle_abbreviation=Afficher/Masquer_l'abr\u00e9viation
+Toggle_entry_preview=Afficher/Masquer_l'aper\u00e7u
+Toggle_groups_interface=Afficher/Masquer_l'interface_des_groupes
+Toggle_search_panel=Afficher/Masquer_la_fen\u00eatre_de_recherche
+Try_different_encoding=Essayer_un_encodage_diff\u00e9rent
+Type_set_to_'other'=Type_configur\u00e9_comme_'other'_(autre)
+Unabbreviate_journal_names_of_the_selected_entries=D\u00e9velopper_les_noms_de_journaux_des_entr\u00e9es_s\u00e9lectionn\u00e9es
+Unabbreviated_%0_journal_names.=%0_noms_de_journaux_d\u00e9velopp\u00e9s.
+unable_to_access_LyX-pipe=Impossible_d'acc\u00e9der_au_canal_de_transmission_LyX
+Unable_to_create_graphical_interface=Impossible_de_cr\u00e9er_l'interface_graphique
+Unable_to_open_file.=Impossible_d'ouvrir_le_fichier
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Impossible_d'ouvrir_un_lien._L'application_'%0'_associ\u00e9e_avec_le_type_de_fichier_'%1'_n'a_pu_\u00eatre_appel\u00e9e.
+Unable_to_read_default_icon_theme.=Impossible_de_lire_le_th\u00e8me_d'ic\u00f4nes_par_d\u00e9faut
+Unable_to_read_icon_theme_file=Impossible_de_lire_le_fichier_de_th\u00e8me_d'ic\u00f4nes
+unable_to_write_to=Impossible_d'\u00e9crire_sur
+Undefined_file_type=Type_de_fichier_ind\u00e9fini
+Undo=Annuler
+Union=Union
+Unknown_bibtex_entries=Entr\u00e9es_BibTeX_inconnues
+unknown_edit=\u00e9dition_inconnue
+unknown_entry_type=type_d'entr\u00e9e_inconnue
+Unknown_export_format=Format_d'exportation_inconnu
+Unmark_all=Tout_d\u00e9s\u00e9tiqueter
+Unmark_entries=D\u00e9s\u00e9tiqueter_ces_entr\u00e9es
+Unmark_entry=D\u00e9s\u00e9tiqueter_l'entr\u00e9e
+Unmarked_selected=D\u00e9s\u00e9tiquetage_de_la_s\u00e9lection
+Unpack_EndNote_filter_set=D\u00e9compacter_la_s\u00e9rie_de_filtres_EndNote
+Unpacked_file.=Fichier_d\u00e9compact\u00e9.
+Unsupported_version_of_class_%0\:_%1=Version_non_support\u00e9e_de_la_classe_%0_:_%1
+untitled=sans_titre
+Up=Haut
+Update_to_current_column_widths=Figer_les_largeurs_actuelles_des_colonnes
+Updated_group_selection=S\u00e9lection_de_groupe_mise_\u00e0_jour
+Upgrade_external_links=Mettre_\u00e0_jour_les_liens_externes
+Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Mettre_\u00e0_jour_les_liens_externes_PDF/PS_pour_utiliser_le_champ_'%0'.
+Upgrade_file=Mettre_\u00e0_jour_le_fichier
+Upgrade_old_external_file_links_to_use_the_new_feature=Mettre_\u00e0_jour_les_anciens_liens_vers_les_fichiers_externes_pour_utiliser_cette_nouvelle_fonction
+Upgraded_links.=Liens_mis_\u00e0_jour.
+UPPER=MAJUSCULE
+Upper_Each_First=Majuscule_Chaque_Premi\u00e8re
+Upper_first=Majuscule_premi\u00e8re
+usage=usage
+Use_antialiasing_font=Utiliser_une_police_liss\u00e9e
+Use_autocompletion_for_the_following_fields=Utiliser_l'auto-g\u00e9n\u00e9ration_pour_les_champs_suivants
+Use_custom_icon_theme=Utiliser_un_th\u00e8me_d'ic\u00f4nes_personnalis\u00e9
+Use_default_viewer=Utiliser_l'afficheur_par_d\u00e9faut
+Use_inspection_window_also_when_a_single_entry_is_imported.=Utiliser_la_fen\u00eatre_d'inspection_m\u00eame_quand_une_seule_entr\u00e9e_est_import\u00e9e.
+Use_native_file_dialog=Utiliser_le_s\u00e9lectionneur_de_fichiers_natif
+Use_other_look_and_feel=Utiliser_une_autre_apparence
+Use_Regular_Expression_Search=Utiliser_l'expression_r\u00e9guli\u00e8re_pour_la_recherche
+Use_regular_expressions=Utiliser_les_expressions_r\u00e9guli\u00e8res
+Use_the_following_delimiter_character(s)=Utiliser_le(s)_caract\u00e8re(s)_de_s\u00e9paration_suivant(s)
+Username_\:=Nom_d'utilisateur_:
+Value_cleared_externally=Valeur_supprim\u00e9e_externalement
+Value_set_externally=Valeur_param\u00e9tr\u00e9e_externalement_
+verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=v\u00e9rifier_que_LyX_tourne_et_que_le_canal_de_transmission_LyX_est_valide
+View=Aper\u00e7u
+Vim_Server_Name=Nom_du_serveur_Vim_
+Waiting_for_ArXiv...=Attente_de_ArXiv...
+Warn_about_unresolved_duplicates_when_closing_inspection_window=Avertir_des_doublons_non_r\u00e9solus_lors_de_la_fermeture_de_la_fen\u00eatre_d'inspection
+Warn_before_overwriting_existing_keys=Avertir_avant_d'\u00e9craser_des_clefs_existantes
+Warning=Avertissement
+Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Avertissement_:_La_r\u00e9paration_du_fichier_n'a_pas_pu_\u00eatre_termin\u00e9e_;_votre_fichier_peut_avoir_\u00e9t\u00e9_corrompu._Message_d'erreur
+Warning_there_is_a_duplicate_key=Avertissement_%c_il_y_a_une_clef_dupliqu\u00e9e
+Warnings=Messages_d'avertissement
+web_link=Lien_internet
+What_do_you_want_to_do?=Que_voulez-vous_faire_?
+When_adding/removing_keywords,_separate_them_by=Lors_de_l'ajout/suppression_de_mots-clef,_les_s\u00e9parer_avec_
+Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Ecrit_les_m\u00e9tadonn\u00e9es_XMP_dans_les_PDFs_li\u00e9s_aux_entr\u00e9es_s\u00e9lectionn\u00e9es
+with=avec
+Word=Mot
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=Ecrire_l'entr\u00e9e_BibTeX_comme_des_m\u00e9tadonn\u00e9es_XMP_dans_un_PDF
+Write_XMP=Ecrire_XMP
+Write_XMP-metadata=Ecrire_les_m\u00e9tadonn\u00e9es_XMP
+Write_XMP-metadata_for_all_PDFs_in_current_database?=Ecrire_les_m\u00e9tadonn\u00e9es_XMP_pour_tous_les_PDFs_dans_la_base_courante_?
+Writing_XMP=Ecriture_XMP
+Writing_XMP_metadata...=Ecriture_des_m\u00e9tadonn\u00e9es_XMP
+Writing_XMP_metadata_for_selected_entries...=Ecriture_des_m\u00e9tadonn\u00e9es_XMP_pour_les_entr\u00e9es_s\u00e9lectionn\u00e9es
+Writing_XMP_to_'%0'...=Ecriture_des_XMP_dans_'%0'...
+Wrong_file_format=Format_de_fichier_incorrect
+Wrote_XMP-metadata=M\u00e9ta-donn\u00e9es_XMP_\u00e9crites
+Wrote_XMP_to_'%0'.=XMP_\u00e9crites_dans_'%0'.
+XMP-annotated_PDF=PDF_avec_annotations_XMP
+XMP_Export_Privacy_Settings=Param\u00e8tres_de_confidentialit\u00e9_pour_l'exportation_XMP
+XMP_metadata=M\u00e9tadonn\u00e9es_XMP
+XMP_metadata_found_in_PDF\:_%0=M\u00e9tadonn\u00e9es_XMP_trouv\u00e9es_dans_le_PDF:_%0
+You_must_restart_JabRef_for_this_to_come_into_effect.=Vous_devez_red\u00e9marrer_JabRef_pour_que_ce_changement_prenne_effet.
+You_have_changed_the_language_setting.=Vous_avez_modifi\u00e9_la_langue.
+You_have_changed_the_look_and_feel_setting.=Vous_avez_chang\u00e9_les_param\u00e8tres_d'apparence.
+You_have_cleared_this_field._Original_value=Vous_avez_vid\u00e9_ce_champ._Valeur_originale
+You_have_entered_an_invalid_search_'%0'.=Vous_avez_entr\u00e9_une_recherche_invalide_'%0'.
+You_must_choose_a_file_name_to_store_journal_abbreviations=Vous_devez_choisir_un_nom_de_fichier_pour_stocker_les_abr\u00e9viations_de_journaux
+You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Vous_devez_relancer_JabRef_pour_que_les_nouvelles_affectations_des_touches_soient_activ\u00e9es
+You_must_set_both_BibTeX_key_and_%0_directory=Vous_devez_d\u00e9finir_\u00e0_la_fois_la_clef_BibTeX_et_le_r\u00e9pertoire_%0
+Your_new_key_bindings_have_been_stored.=Votre_nouvelle_affectation_de_touche_a_\u00e9t\u00e9_enregistr\u00e9e
+The_following_fetchers_are_available\:=Les_outils_de_recherche_suivants_sont_disponible_:
+Could_not_find_fetcher_'%0'=L'outil_de_recherche_'%0'_n'a_pas_pu_\u00eatre_trouv\u00e9
+Running_Query_'%0'_with_fetcher_'%1'.=Execution_de_la_requ\u00eate_'%0'_avec_l'outil_de_recherche_'%1'.
+Please_wait!=Attendez_SVP_!
+Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=Le_requ\u00eate_'%0'_pour_l'outil_de_recherche_'%1'_n'a_retourn\u00e9_aucun_r\u00e9sultats.
+Open_SPIRES_entry=Ouvrir_l'entr\u00e9e_SPIRES
+Move/Rename_file=D\u00e9placer/Renommer_le_fichier
+File_moved=Fichier_d\u00e9plac\u00e9
+Move_file_failed=Echec_du_d\u00e9placement_du_fichier
+Could_not_move_file=Le_fichier_n'a_pas_pu_\u00eatre_d\u00e9plac\u00e9
+Could_not_find_file_'%0'.=Le_fichier_'%0'_n'a_pas_pu_\u00eatre_trouv\u00e9.
+Move/rename_file=D\u00e9placer/renommer_le_fichier
+Number_of_entries_successfully_imported=Nombre_d'entr\u00e9es_import\u00e9es_avec_succ\u00e8s
+Import_canceled_by_user=Importation_interrompue_par_l'utilisateur
+Progress\:_%0_of_%1=Progr\u00e8s_:_%0_de_%1
+Error_while_fetching_from_JSTOR=Erreur_au_cours_de_la_recherche_JSTOR
+Fetching_Medline_by_id...=Recherche_sur_Medline_par_id...
+Fetching_Medline_by_term...=Recherche_sur_Medline_par_terme...
+Medline_import_canceled=Importation_Medline_annul\u00e9e
+Please_enter_a_valid_number=SVP,_entrez_un_nombre_valide
+Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=SVP,_entrez_une_liste_s\u00e9par\u00e9e_par_des_virgules_d'ID_Medline_(nombres)_ou_de_termes_de_recherche.
+An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=Une_erreur_est_survenue_lors_de_la_recherche_\u00e0_partir_de_la_source_SPIRES_(%0)\:
+Error_while_fetching_from_Spires\:_=Erreur_lors_de_la_recherche_SPIRES\:_
+Connect_to_external_SQL_database=Se_connecter_\u00e0_une_base_SQL_externe
+Export_to_external_SQL_database=Exporter_vers_une_base_SQL_externe
+Show_results_in_dialog=Nouvelle_fen\u00eatre
+Global_search=Recherche_globale
+Show_search_results_in_a_window=Afficher_les_r\u00e9sultats_de_recherche_dans_une_fen\u00eatre
+Search_results=R\u00e9sultats_de_la_recherche
+Move_file_to_file_directory?=D\u00e9placer_le_fichier_vers_le_r\u00e9pertoire_de_fichiers_?
+Rename_to_'%0'=Renommer_vers_'%0'
+Move_to_file_directory=D\u00e9placer_vers_le_r\u00e9pertoire_de_fichiers
+You_have_changed_the_menu_and_label_font_size.=Vous_avez_modifi\u00e9_la_taille_de_police_des_menus_et_des_\u00e9tiquettes.
+Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=La_base_est_prot\u00e9g\u00e9e._L'enregistrement_ne_peut_\u00eatre_effectu\u00e9_tant_que_les_changements_externes_n'auront_pas_\u00e9t\u00e9_v\u00e9rifi\u00e9s.
+Protected_database=Base_prot\u00e9g\u00e9e
+Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Refuser_d'enregistrer_la_base_tant_que_les_changements_externes_ne_sont_pas_v\u00e9rifi\u00e9s.
+Database_protection=Protection_de_la_base
+Unable_to_save_database=Impossible_d'enregistrer_la_base
+BibTeX_key_generator=G\u00e9n\u00e9rateur_de_clefs_BibTeX
+Unable_to_open_link.=Impossible_d'ouvrir_un_lien.
+Search_JSTOR=Recherche_JSTOR
+Attempting_SQL_import...=Tentative_d'importation_SQL...
+BibO_RDF=BibO_RDF
+HTML_parser=Analyseur_syntaxique_HTML
+Move_the_keyboard_focus_to_the_entry_table=D\u00e9placer_le_curseur_vers_la_table_des_entr\u00e9es
+MIME_type=Type_MIME
+This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Cette_fonction_permet_aux_nouveaux_fichiers_d'\u00eatre_ouverts_ou_import\u00e9s_dans_une_fen\u00eatre_JabRef_d\u00e9j\u00e0_active<BR>au_lieu_d'ouvrir_une_nouvelle_fen\u00eatre._Par_ [...]
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Noter_que_ces_param\u00e8tres_sont_utilis\u00e9s_uniquement_pour_les_champs_obsol\u00e8tes_<b>pdf</b>_et_<b>ps</b>.<br>Pour_la_plupart_des_utilisateurs,_param\u00e9trer_le_<b>R\u00e9pertoire_de_fichiers_principal</b>_devrait_suffire.
+Legacy_file_fields=Champs_de_fichiers_obsol\u00e8tes
+This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=JabRef_cherche_chaque_%0_extension_et_v\u00e9rifie_si_le_fichier_existe._Si_non,_des_options_vous_seront_propos\u00e9es<BR>pour_r\u00e9soudre_le_probl\u00e8me.
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Lance_une_recherche,_par._ex._"--fetch=Medline\:cancer"
+The_ACM_Digital_Library=La_Biblioth\u00e8que_Num\u00e9rique_ACM
+Reset=R\u00e9initialiser
+Use_IEEE_LaTeX_abbreviations=Utiliser_les_abbr\u00e9viations_LaTeX_IEEE
+The_Guide_to_Computing_Literature=Le_Guide_de_la_Litt\u00e9rature_Informatique
+Search_ACM_Portal=Recherche_dans_le_portail_ACM
+Connection_to_ACM_Portal_failed=Echec_de_la_connexion_au_portail_ACM
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=A_l'ouverture_d'un_lien_de_fichier,_rechercher_un_fichier_correspondant_si_aucun_lien_n'est_d\u00e9fini
+Settings_for_%0=Param\u00e8tres_pour_%0
+Insert_selected_citations_into_Vim=Envoyer_les_citations_s\u00e9lectionn\u00e9es_dans_Vim
+RIS=RIS
+Assign_exclusively_to_group=Assigner_uniquement_au_groupe
+Bad_Request_'%0'.=Requ\u00eate_erronn\u00e9e_'%0'.
+
+Mark_entries_imported_into_an_existing_database=Etiqueter_les_entr\u00e9es_import\u00e9es_dans_une_base_existante
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=D\u00e9s\u00e9tiqueter_toutes_les_entr\u00e9es_avant_d'importer_de_nouvelles_entr\u00e9es_dans_une_base_existante
+
+Forward=Suivant
+Back=Pr\u00e9c\u00e9dent
+Sort_the_following_fields_as_numeric_fields=Trier_les_champs_suivants_comme_des_champs_num\u00e9riques
+Line_%0\:_Found_corrupted_BibTeX-key.=Ligne_%0_\:_Clef_BibTeX_corrompue_trouv\u00e9e.
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Ligne_%0_\:_Clef_BibTeX_corrompue_trouv\u00e9e_(contient_des_espaces).
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Ligne_%0_\:_Clef_BibTeX_corrompue_trouv\u00e9e_(virgule_manquante).
+Finished_downloading_full_text_document=T\u00e9l\u00e9chargement_du_document_cit\u00e9_termin\u00e9
+Unable_to_find_full_text_document_in_the_linked_web_page.=Impossible_de_trouver_le_document_cit\u00e9_dans_la_page_web_li\u00e9e.
+Connection_error_when_trying_to_find_full_text_document.=Erreur_de_connexion_lors_de_la_recherche_du_document_cit\u00e9.
+This_entry_provides_no_URL_or_DOI_links.=Cette_entr\u00e9e_ne_fournit_pas_de_liens_URL_ou_DOI.
+Full_text_article_download_failed=Echec_du_t\u00e9l\u00e9chargement_du_document_cit\u00e9
+Update_to_current_column_order=Enregistrer_l'ordre_actuel_des_colonnes
+
+Rename_field=Renommer_le_champ
+Set/clear/rename_fields=D\u00e9finir/vider/renommer_les_champs
+Rename_field_to\:=Renommer_le_champ_en_:
+Move_contents_of_a_field_into_a_field_with_a_different_name=D\u00e9placer_le_contenu_d'un_champ_vers_un_champ_d'un_nom_diff\u00e9rent
+
+You_can_only_rename_one_field_at_a_time=Vou_pouvez_supprimer_uniquement_un_champ_\u00e0_la_fois
+Remove_all_broken_links=Supprimer_tous_les_liens_invalides
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Le_port_%0_ne_peut_pas_\u00eatre_utilis\u00e9_pour_une_op\u00e9ration_\u00e0_distance_;_une_autre_application_pourrait_\u00eatre_en_train_de_l'utiliser._Essayer_de_sp\u00e9cifier_un_autre_port.
+
+Plugin_installer=Installeur_de_greffon
+Unable_to_create_plugin_directory=Impossible_de_cr\u00e9er_un_r\u00e9pertoire_de_greffon
+Unable_to_copy_file=Impossible_de_copier_un_fichier
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Greffon_install\u00e9_correctement._Vous_devez_red\u00e9marrer_JabRef_pour_charger_le_nouveau_greffon.
+Unable_to_create_user_plugin_directory=Impossible_de_cr\u00e9er_un_r\u00e9pertoire_de_greffon_utilisateur
+Plugin_installation_failed.=Echec_de_l'installation_du_greffon.
+The_same_version_of_this_plugin_is_already_installed.=La_m\u00eame_version_de_ce_greffon_est_d\u00e9j\u00e0_install\u00e9e.
+A_newer_version_of_this_plugin_is_already_installed.=Une_version_plus_r\u00e9cente_de_ce_greffon_est_d\u00e9j\u00e0_install\u00e9e.
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Une_ou_plusieurs_versions_plus_anciennes_de_ce_greffon_sont_install\u00e9es._Supprimer_les_anciennes_versions ?
+Old_versions_deleted_successfully.=Anciennes_versions_supprim\u00e9es_avec_succ\u00e8s.
+
+Install_plugin=Installer_un_greffon
+Download_plugin=T\u00e9l\u00e9charger_un_greffon
+Plugin_manager=Gestionnaire_de_greffons
+Delete_the_%0_selected_plugins?=Supprimer_les_%0_greffons_s\u00e9lectionn\u00e9s ?
+Delete_plugins=Suppression_des_greffons
+Delete_the_selected_plugin?=Supprimer_le_greffon_s\u00e9lectionn\u00e9 ?
+Delete_plugin=Suppression_du_greffon
+Enter_download_URL=Entrer_l'URL_de_t\u00e9l\u00e9chargement
+Plugin_name=Nom_du_greffon
+Version=Version
+Unknown=Inconnu
+Not_loaded=Non_charg\u00e9
+Loaded=Charg\u00e9
+Could_not_determine_version_of_=Echec_de_la_d\u00e9termination_de_la_version_de_
+Install_anyway?=Install\u00e9_quand_m\u00eame ?
+
+Looking_for_full_text_document...=T\u00e9l\u00e9chargement_du_document_cit\u00e9
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Suit_le_DOI_ou_le_lien_URL_et_tente_de_localiser_le_fichier_PDF_du_document_cit\u00e9
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Impossible_de_trouver_le_fichier_PDF_du_document_cit\u00e9._Aucun_algorithme_n'est_d\u00e9fini_pour_le_site_internet_'%0'.
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Lien_PDF_trouv\u00e9,_mais_r\u00e9ception_d'un_mauvais_type_MIME._Cela_pourrait_indiquer_que_vous_n'avez_pas_acc\u00e8s_au_fichier_PDF_du_document_cit\u00e9.
+
+Autosave=Sauvegarde_automatique
+Prompt_before_recovering_a_database_from_an_autosave_file=Demander_avant_la_r\u00e9cup\u00e9ration_d'une_base_de_donn\u00e9es_\u00e0_partir_d'une_sauvegarde_automatique
+Autosave_interval_(minutes)=Intervalle_de_sauvegarde_automatique_(minutes)
+Do_you_want_to_recover_the_database_from_the_autosave_file?=Voulez-vous_r\u00e9cup\u00e9rer_une_base_de_donn\u00e9es_\u00e0_partir_de_la_sauvegarde_automatique_?
+Recover_from_autosave=R\u00e9cup\u00e9ration_\u00e0_partir_d'une_sauvegarde_automatique
+%0_warnings=%0_messages_d'avertissement
+
+Save_in_current_table_sort_order=Enregistrer_dans_l'ordre_de_tri_actuel_de_la_table
+Export_in_current_table_sort_order=Exporter_dans_l'ordre_de_tri_actuel_de_la_table
+Export_ordered_by_author/editor/year=Exporter_selon_l'ordre_author/editor/year
+Export_entries_in_their_original_order=Exporter_les_entr\u00e9es_dans_leur_l'ordre_original
+Error_opening_file_'%0'.=Erreur_lors_de_l'ouverture_du_fichier_'%0'.
+Autosave_of_file_'%0'=Sauvegarde_automatique_du_fichier_'%0'
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Erreur_lors_de_la_sauvegarde_automatique_de_'%0'._A_la_place,_essai_d'ouverture_de_'%0'.
+
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=Greffons_install\u00e9s_dans_votre_r\u00e9pertoire_personnel_de_greffons_(%0)_:
+Plugins_installed_in_other_locations\:=Greffons_install\u00e9s_dans_d'autres_r\u00e9pertoires_:
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=Les_greffons_seront_supprim\u00e9s_au_prochain_d\u00e9marrage_de_JabRef.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=Le_greffon_sera_supprim\u00e9_au_prochain_d\u00e9marrage_de_JabRef.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Les_anciennes_versions_de_greffons_seront_supprim\u00e9es_au_prochain_d\u00e9marrage_de_JabRef.
+
+Formatter_not_found\:_%0=Formateur_non_trouv\u00e9_:_%0
+The_following_formatters_could_not_be_found=Les_formateurs_suivants_n'ont_pas_\u00e9t\u00e9_trouv\u00e9s
+
+Clear_inputarea=Vider_la_zone_de_saisie
+
+Automatically_set_file_links_for_this_entry=D\u00e9finir_automatiquement_les_liens_de_fichier_pour_cette_entr\u00e9e
+Could_not_save,_file_locked_by_another_JabRef_instance.=Echec_de_l'enregistrement,_le_fichier_est_verrouill\u00e9_par_une_autre_instance_de_JabRef.
+File_is_locked_by_another_JabRef_instance.=Le_fichier_est_verrouill\u00e9_par_une_autre_instance_de_JabRef.
+Do_you_want_to_override_the_file_lock?=Voulez-vous_outrepasser_le_verrouillage_du_fichier_?
+File_locked=Fichier_verrouill\u00e9
+Current_tmp_value=Valeur_tmp_actuelle
+Metadata_change=Changement_dans_les_m\u00e9tadonn\u00e9es
+Changes_have_been_made_to_the_following_metadata_elements=Des_modifications_ont_\u00e9t\u00e9_faites_aux_\u00e9l\u00e9ments_de_m\u00e9tadonn\u00e9es_suivants
+
+Generate_groups_for_author_last_names=Cr\u00e9ation_de_groupes_pour_les_noms_d'auteurs
+Generate_groups_for_editor_last_names=Cr\u00e9ation_de_groupes_pour_les_noms_d'\u00e9diteurs
+Generate_groups_from_keywords_in_a_BibTeX_field=Cr\u00e9ation_de_groupes_\u00e0_partir_de_mots-clefs_d'un_champ_BibTeX
+Enforce_legal_characters_in_BibTeX_keys=Imposer_des_caract\u00e8res_l\u00e9gaux_dans_les_clefs_BibTeX
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Le_caract\u00e8re_#_n'est_pas_autoris\u00e9_dans_les_cha\u00eenes_BibTeX_\u00e0_moins_d'\u00eatre_\u00e9chapp\u00e9_comme_dans_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Avant_l'enregistrement,_SVP,_\u00e9ditez_toute_cha\u00eene_contenant_le_caract\u00e8re_#.
+
+Save_without_backup?=Enregistrer_sans_sauvegarde_de_secours?
+Unable_to_create_backup=Impossible_de_cr\u00e9er_une_sauvegarde_de_secours
+
+File_directory_is_not_set_or_does_not_exist.=Le_r\u00e9pertoire_de_fichiers_n'est_pas_configur\u00e9_ou_n'existe_pas.
+Move_file_to_file_directory.=D\u00e9placer_le_fichier_vers_le_r\u00e9pertoire_de_fichiers.
+Rename_file_to=Renommer_le_fichier_en
+<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Toutes_les_entr\u00e9es</b>_(ce_groupe_ne_peut_pas_\u00eatre_\u00e9dit\u00e9_ou_supprim\u00e9)
+static_group=groupe_statique
+dynamic_group=groupe_dynamique
+refines_supergroup=raffinant_le_super-groupe
+includes_subgroups=incluant_les_sous-groupes
+contains=contient
+search_expression=expression_de_recherche
+
+Disable_file_renaming_in_non-native_file_dialog=D\u00e9sactiver_le_renommage_des_fichiers_pour_les_fen\u00eatres_de_fichier_non-native
+File_dialog=Fen\u00eatre_de_fichiers
+No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Pas_d'entr\u00e9es_trouv\u00e9es._Il_semble_que_vous_n'avez_pas_acc\u00e8s_\u00e0_la_recherche_JStor
+
+Search_ScienceDirect=Recherche_ScienceDirect
+Error_while_fetching_from_ScienceDirect=Erreur_lors_de_la_recherche_ScienceDirect_
+
+Error_initializing_custom_export_format_from_string_'%0'=Erreur_lors_de_l'initialisation_du_format_d'exportation_personnalis\u00e9_\u00e0_partir_de_la_cha\u00eene_'%0'
+
+BibLaTeX_mode=mode_BibLaTeX
+Optional_fields_2=Champs_optionnels_2
+Please_wait=Patientez,_s'il_vous_pla\u00eet
+Waiting_for_save_operation_to_finish=Attente_de_la_fin_de_l'op\u00e9ration_de_sauvegarde
+Resolving_duplicate_BibTeX_keys...=Traitement_des_clefs_BibTeX_dupliqu\u00e9es...
+Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Traitement_des_clefs_BibTeX_dupliqu\u00e9es_termin\u00e9._%0_entr\u00e9es_modifi\u00e9es.
+This_database_contains_one_or_more_duplicated_BibTeX_keys.=Cette_base_contient_au_moins_une_clef_BibTeX_dupliqu\u00e9e.
+Do_you_want_to_resolve_duplicate_keys_now?=Voulez-vous_traiter_les_clefs_dupliqu\u00e9es_maintenant_?
+
+Find_and_remove_duplicate_BibTeX_keys=Recherche_et_supprime_les_clefs_BibTeX_dupliqu\u00e9es
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Syntaxe_attendue_pour_--fetch='<name_of_fetcher>:<query>'
+Duplicate_BibTeX_key=Clef_BibTeX_dupliqu\u00e9e
+Duplicate_key=Clef_dupliqu\u00e9e
+Generate_key=G\u00e9n\u00e9rer_une_clef
+Import_marking_color=Importer_les_couleurs_de_marquage
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_entr\u00e9es_trouv\u00e9es._Pour_r\u00e9duire_la_charge_du_serveur,_seulement_%1_seront_t\u00e9l\u00e9charg\u00e9es._Cela_sera_tr\u00e8s_lent_pour_ne_pas_poser_de_probl\u00e8me_avec_ACM.
+BibTeX_importer=Filtres_d'importation_BibTeX
+Always_add_letter_(a,_b,_...)_to_generated_keys=Toujours_ajouter_une_lettre_(a,_b,_...)_aux_clefs_g\u00e9n\u00e9r\u00e9es
+
+Ensure_unique_keys_using_letters_(a,_b,_...)=Assurer_l'unicit\u00e9_des_clefs_(a,_b,_...)
+Ensure_unique_keys_using_letters_(b,_c,_...)=Assurer_l'unicit\u00e9_des_clefs_(b,_c,_...)
+Entry_editor_active_background_color=Couleur_du_fond_actif_de_l'\u00e9diteur_d'entr\u00e9es
+Entry_editor_background_color=Couleur_du_fond_de_l'\u00e9diteur_d'entr\u00e9es
+Entry_editor_font_color=Couleur_de_la_police_de_l'\u00e9diteur_d'entr\u00e9es
+Entry_editor_invalid_field_color=Couleur_de_champ_invalide_de_l'\u00e9diteur_d'entr\u00e9es
+
+Table_and_entry_editor_colors=Couleurs_de_la_table_et_de_l'\u00e9diteur_d'entr\u00e9es
+
+An_autosave_file_was_found_for_this_database._This_could_indicate_=Un_fichier_de_sauvegarde_automatique_a_\u00e9t\u00e9_trouv\u00e9_pour_cette_base_de_donn\u00e9es._Cela_pourrait_indiquer_
+that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=que_JabRef_ne_s'est_pas_arr\u00e9t\u00e9_proprement_lors_de_la_derni\u00e8re_utilisation_de_ce_fichier.
+General_file_directory=R\u00e9pertoire_g\u00e9n\u00e9ral
+User-specific_file_directory=R\u00e9pertoire_sp\u00e9cifique_\u00e0_l'utilisateur
+Error_setting_look_and_feel=Erreur_dans_les_param\u00e8tres_d'apparence
+Search_failed\:_illegal_search_expression=Echec_de_la_recherche_:_Expression_de_recherche_ill\u00e9gale
+Show_ArXiv_column=Montrer_la_colonne_ArXiv
+<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>D\u00e9compacter_le_fichier_zip_contenant_les_filtres_d'importation/exportation_pour_Endnote,<BR>pour_une_interop\u00e9rabilit\u00e9_optimale_avec_JabRef</HTML>
+
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Surligner_les_groupes_qui_contiennent_des_entr\u00e9es_contenues_dans_un_des_groupes_s\u00e9lectionn\u00e9s
+
+
+You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=Vous_devez_entrer_dans_le_champ_texte_une_valeur_enti\u00e8re_comprise_entre_1025_et_65535_pour
+Automatically_open_browse_dialog_when_creating_new_file_link=Ouvrir_automatiquement_la_fen\u00eatre_de_navigation_lors_de_la_cr\u00e9ation_d'un_nouveau_lien_de_fichier
+
+Import_Metadata_from\:=Importer_les_m\u00e9tadonn\u00e9es_depuis:
+Choose_the_source_for_the_metadata_import=Choisir_la_source_pour_l'importation_des_m\u00e9tadonn\u00e9es
+Create_entry_based_on_XMP_data=Cr\u00e9er_une_entr\u00e9e_bas\u00e9e_sur_les_donn\u00e9es_XMP
+Create_entry_based_on_data_fetched_from=Cr\u00e9er_une_entr\u00e9e_bas\u00e9e_sur_les_donn\u00e9es_r\u00e9cup\u00e9r\u00e9es_depuis
+Create_blank_entry_linking_the_PDF=Cr\u00e9er_une_entr\u00e9e_vide_li\u00e9e_au_PDF
+Only_attach_PDF=Lier_uniquement_le_PDF
+Mr._dLib_Metadata_Entries_Associated_With\:=Entr\u00e9es_de_m\u00e9tadonn\u00e9es_Mr._dLib_associ\u00e9es_avec_:
+Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Entr\u00e9es_de_m\u00e9tadonn\u00e9es_Mr._dLib_associ\u00e9e_avec_un_fichier_PDF
+Title=Titre
+Author(s)=Auteur(s)
+Published_Year=Ann\u00e9e_de_publication
+No_metadata_found.=Aucune_m\u00e9tadonn\u00e9e_trouv\u00e9e.
+Mr._dLib_web_service_is_temporarily_unavailable.=Le_service_Web_Mr._dLib_est_temporairement_indisponible.
+Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Le_service_Web_Mr._dLib_est_temporairement_arr\u00e9t\u00e9._Essayer_plus_tard_SVP.
+You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Vous_n'\u00eates_pas_connect\u00e9_\u00e0_internet._Pour_acc\u00e9der_au_service_web_Mr._dLib,_une_connexion_internet_est_n\u00e9cessaire.
+No_Internet_Connection.=_Pas_de_connexion_internet.
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Cette_version_de_JabRef_tente_d'acc\u00e9der_\u00e0_une_ancienne_version_du_service_web_Mr._dLib_qui_n'est_plus_en_service._This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nSVP,_allez_sur_http://jabref.sourceforge. [...]
+Web_Service_Version_Outdated=Version_de_service_web_d\u00e9pass\u00e9e
+The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=La_version_avec_laquelle_vous_essayez_d'acc\u00e9der_au_service_web_Mr._dLib_est_d\u00e9pass\u00e9e.
+Update_empty_fields_with_data_fetched_from=Mettre_\u00e0_jour_les_champs_vides_\u00e0_partir_des_donn\u00e9es_r\u00e9cup\u00e9r\u00e9es_depuis
+Create_New_Entry=Cr\u00e9er_une_nouvelle_entr\u00e9e
+Update_Existing_Entry=Mettre_\u00e0_jour_une_entr\u00e9e_existante
+Mr._dLib=Mr._dLib
+More_information=Plus_d'information
+Fetching_Metadata...=R\u00e9cup\u00e9ration_des_m\u00e9tadonn\u00e9es...
+Metadata=M\u00e9tadonn\u00e9es
+Autocomplete_names_in_'Firstname_Lastname'_format_only=Compl\u00e9tion_automatique_des_noms_uniquement_dans_le_format_'Pr\u00e9nom_Nom'
+Autocomplete_names_in_'Lastname,_Firstname'_format_only=Compl\u00e9tion_automatique_des_noms_uniquement_dans_le_format_'Nom,_Pr\u00e9nom'
+Autocomplete_names_in_both_formats=Compl\u00e9tion_automatique_des_noms_dans_les_2_formats
+Marking_color_%0=Marquage_de_la_couleur_%0
+
+The_name_'comment'_can_not_be_used_as_an_entry_type_name.=Le_nom_'comment'_ne_peut_pas_\u00eatre_utilis\u00e9_comme_nom_de_type_d'entr\u00e9e.
+You_must_enter_an_integer_value_in_the_text_field_for=Vous_devez_entrer_une_valeur_enti\u00e8re_dans_le_champ_texte_pour
+File_directory=R\u00e9pertoire_de_fichiers
+Send_as_email=Exp\u00e9dier_par_courriel
+References=R\u00e9f\u00e9rences
+Sending_of_emails=Envoi_des_courriels
+Subject_for_sending_an_email_with_references=Sujet_pour_l'envoi_d'un_courriel_avec_des_r\u00e9f\u00e9rences
+Automatically_open_folders_of_attached_files=Ouvrir_automatiquement_les_r\u00e9pertoires_des_fichiers_attach\u00e9s
+Create_entry_based_on_content=Cr\u00e9er_une_entr\u00e9e_sur_la_base_du_contenu
+Store_choice_as_default=Enregistrer_comme_choix_par_d\u00e9faut
+Do_not_show_this_box_again_for_this_import=Ne_plus_afficher_cette_bo\u00eete_de_dialogue_pour_cette_importation
+Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Toujours_utiliser_ce_style_d'importation_PDF_(et_ne_plus_demander_\u00e0_chaque_importation)
+Error_creating_email=Erreur_lors_de_la_cr\u00e9ation_du_courriel
+Could_not_open_directory=Le_r\u00e9pertoire_n'a_pas_pu_\u00eatre_ouvert
+Entries_added_to_an_email=Entr\u00e9es_ajout\u00e9es_\u00e0_un_courriel
+exportFormat=Format_d'exportation
+Output_file_missing=Fichier_de_sortie_manquant
+No_search_matches.=Recherche_sans_correspondance.
+The_output_option_depends_on_a_valid_input_option.=L'option_de_sortie_d\u00e9pend_d'une_option_d'entr\u00e9e_valide.
+Default_import_style_for_drag&drop_of_PDFs=Style_d'importation_par_d\u00e9faut_pour_le_glisser-d\u00e9placer_des_PDFs
+Default_PDF_file_link_action=Action_par_d\u00e9faut_pour_les_liens_vers_les_fichiers_PDF
+File_name_format_pattern=Mod\u00e8le_de_format_de_nom_de_fichier
+PostgreSQL_database=Base_de_donn\u00e9es_PostgreSQL
+DIN_1505=DIN_1505
+Wrong_Format=Mauvais_format
+Path_to_gnuclient_or_emacsclient=Chemin_vers_gnuclient_ou_emacsclient
+Additional_parameters=Param\u00e8tres_additionnels
+Encrypted_documents_are_not_supported=Les_documents_crypt\u00e9s_ne_sont_pas_pris_en_charge
+Cite_selected_entries=Citer_les_entr\u00e9es_s\u00e9lectionn\u00e9es_entre_parenth\u00e8ses
+Cite_selected_entries_with_in-text_citation=Citer_les_entr\u00e9es_s\u00e9lectionn\u00e9es_comme_incluse_dans_le_texte
+Cite_special=Citer_(cas_particuliers)
+Extra_information_(e.g._page_number)=Informations_compl\u00e9mentaires_(ex_:_num\u00e9ro_de_page)_
+Manage_citations=G\u00e9rer_les_citations
+Problem_modifying_citation=Probl\u00e8me_lors_de_la_modification_de_la_citation
+Citation=Citation
+Context=Context
+Extra_information=Informations_compl\u00e9mentaires
+Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=L'entr\u00e9e_BibTeX_pour_la_marqueur_de_citation_'%0'_n'a_pas_pu_\u00eatre_trait\u00e9e.
+Styles=Styles
+Select_style=S\u00e9lectionner_le_style
+This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Voici_la_liste_des_styles_disponibles._S\u00e9lectionnez_celui_que_vous_voulez_utiliser.
+Journals=Journaux
+Cite=Citer_entre_parenth\u00e8ses
+Cite_in-text=Citer_directement_dans_le_texte
+Insert_empty_citation=Ins\u00e9rer_des_citations_vides
+Merge_citations=Fusionner_des_citations
+Manual_connect=Connexion_manuelle
+Select_Writer_document=S\u00e9lectionner_le_document_Writer
+Sync_OO_bibliography=Synchroniser_la_bibliographie_OO
+OpenOffice=OpenOffice/LibreOffice
+Select_which_open_Writer_document_to_work_on=S\u00e9lectionner_le_document_Writer_ouvert_sur_lequel_travailler
+Connected_to_document=Connect\u00e9_au_document
+Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Ins\u00e9rer_une_citation_sans_texte_(l'entr\u00e9e_apparaitra_dans_la_liste_des_r\u00e9f\u00e9rences)
+Cite_selected_entries_with_extra_information=Citer_les_entr\u00e9es_s\u00e9lectionn\u00e9es_avec_des_informations_compl\u00e9mentaires
+Ensure_that_the_bibliography_is_up-to-date=Assure_que_la_bibliographie_est_\u00e0_jour.
+Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=Votre_document_OpenOffice_appelle_la_clef_BibTeX_'%0',_qui_n'a_pas_pu_\u00eatre_trouv\u00e9e_dans_votre_base_actuelle.
+Unable_to_synchronize_bibliography=Impossible_de_synchroniser_la_bibliographie
+Combine_pairs_of_citations_that_are_separated_by_spaces_only=Combiner_les_paires_de_citations_qui_ne_sont_s\u00e9par\u00e9es_que_par_des_espaces
+Autodetection_failed=La_d\u00e9tection_automatique_a_\u00e9chou\u00e9e
+Connecting=Connexion_en_cours
+Please_wait...=Patientez_s'il_vous_plait...
+Unable_to_connect=Connexion_impossible
+Set_connection_parameters=D\u00e9finir_les_param\u00e8tres_de_connexion
+Path_to_OpenOffice_directory=Chemin_vers_le_r\u00e9pertoire_d'OpenOffice
+Path_to_OpenOffice_executable=Chemin_vers_l'ex\u00e9cutable_d'OpenOffice
+Path_to_OpenOffice_library_dir=Chemin_vers_le_r\u00e9pertoire_biblioth\u00e8que_d'OpenOffice
+Autodetect=D\u00e9tecter_automatiquement
+Connection_lost=Connexion_perdue
+The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Le_format_de_paragraphe_est_control\u00e9_par_le_propri\u00e9t\u00e9_'ReferenceParagraphFormat'_ou_'ReferenceHeaderParagraphFormat'_du_fichier_de_style.
+The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Le_format_de_caract\u00e8res_est_control\u00e9_par_la_propri\u00e9t\u00e9_de_citation_'CitationCharacterFormat'_du_fichier_de_style.
+Automatically_sync_bibliography_when_inserting_citations=Synchroniser_automatiquement_la_bibliographie_lors_de_l'insertion_de_citations
+Look_up_BibTeX_entries_in_the_active_tab_only=Rechercher_les_entr\u00e9es_BibTeX_uniquement_dans_l'onglet_actif
+Look_up_BibTeX_entries_in_all_open_databases=Rechercher_les_entr\u00e9es_BibTeX_dans_toutes_les_bases_ouvertes
+Use_in-parenthesis_citation=Utiliser_une_citation_entre_parenth\u00e8ses
+Use_in-text_citation=Utiliser_une_citation_incluse_dans_le_texte
+Autodetecting_paths...=Autod\u00e9tection_des_chemins...
+Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=L'installation_d'OpenOffice_n'a_pas_pu_\u00eatre_d\u00e9tect\u00e9e_automatiquement._SVP,_choisissez_le_r\u00e9pertoire_d'installation_manuellement.
+Could_not_find_OpenOffice_installation=L'installation_d'OpenOffice_n'a_pas_pu_\u00eatre_trouv\u00e9e
+Directories=R\u00e9pertoires
+Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Plus_d'un_ex\u00e9cutable_OpenOffice_a_\u00e9t\u00e9_trouv\u00e9._SVP,_choisissez_celui_auquel_il_faut_se_connecter_:
+Choose_OpenOffice_executable=Choisissez_l'ex\u00e9cutable_OpenOffice
+Select_document=S\u00e9lectionner_un_document
+Edit_Group_Membership=Editer_l'appartenance_aux_groupes
+PostgreSQL=PostgreSQL
+Highlight_Words=Surligner_les_mots
+JSTOR_import_cancelled=Importation_JSTOR_annul\u00e9e
+HTML_list=Liste_HTML
+Click_group_to_toggle_membership_of_selected_entries=Cliquer_sur_un_groupe_pour_inverser_l'appartenance_des_entr\u00e9es_s\u00e9lectionn\u00e9es
+Use_EMACS_23_insertion_string=Utiliser_la_cha\u00eene_d'insertion_d'EMACS_23
+Normalize_to_BibTeX_name_format=Normaliser_au_format_de_noms_BibTeX
+If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=Si_possible,_normaliser_cette_liste_de_noms_afin_de_correspondre_au_formatage_des_noms_au_standard_BibTeX
+Could_not_open_%0=%0_n'a_pas_pu_\u00eatre_ouvert
+Unknown_import_format=Format_d'importation_inconnu
+Open_INSPIRE_entry=Ouvrir_l'entr\u00e9e_INSPIRE
+An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=Une_erreur_est_survenue_lors_de_la_recherche_\u00e0_partir_de_la_source_INSPIRE_(%0)_:
+Error_while_fetching_from_Inspire\:_=Erreur_lors_d'une_recherche_sur_INSPIRE_:_
+Web_search=Recherche_web
+Autocomplete_names=Compl\u00e9tion_automatique_des_noms
+You_must_select_either_a_valid_style_file,_or_use_the_default_style.=Vous_devez_s\u00e9lectionner_soit_un_style_de_fichier_valide,_soit_utiliser_le_style_par_d\u00e9faut.
+Default_style=Style_par_d\u00e9faut
+Choose_style_file_directly=Choisir_directement_le_style_de_fichier_
+Choose_from_a_directory=Choisir_\u00e0_partir_d'un_r\u00e9pertoire_
+No_directory_defined_for_%0-files=Aucun_r\u00e9pertoire_n'est_d\u00e9fini_pour_les_fichiers_%0
+Allow_file_links_relative_to_each_bib_file's_location=Autoriser_les_liens_de_fichier_relatif_\u00e0_chaque_r\u00e9pertoire_de_fichier_BibTeX
+Style_selection=S\u00e9lection_du_style
+The_panel_below_shows_the_definition_of_the_default_style.=La_fen\u00eatre_ci-dessous_montre_la_d\u00e9finition_du_style_par_d\u00e9faut.
+If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=Si_vous_voulez_l'utiliser_comme_mod\u00e8le_pour_un_nouveau_style,_vous_pouvez_copier_le_contenu_dans_un_nouveau_fichier_.jstyle
+
+Default_style_(author-year_citations)=Style_par_d\u00e9faut_(citations_auteur-ann\u00e9e)
+Default_style_(numerical_citations)=Style_par_d\u00e9faut_(citations_num\u00e9riques)
+No_valid_style_file_defined=Aucun_style_de_fichier_valide_n'est_d\u00e9fini
+Choose_pattern=Choisissez_un_mod\u00e8le
+Use_the_bib_file_location_as_primary_file_directory=Utiliser_le_r\u00e9pertoire_du_fichier_bib_comme_r\u00e9pertoire_principal_de_fichiers
+Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=Le_programme_gnuclient/emacsclient_n'a_pas_pu_\u00eatre_lanc\u00e9._Assurez-vous_que_les_programmes_gnuclient/emacsclient_sont_install\u00e9s_et_disponible_dans_le_PATH.
+Built-in_journal_list=Liste_de_journaux_interne
+OpenOffice/LibreOffice_connection=Connexion_OpenOffice/LibreOffice
+You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=Vous_pouvez_ajouter_des_noms_de_journaux_suppl\u00e9mentaires_en_param\u00e9trant_une_liste_de_journaux_personnelle<br>_ou_en_cr\u00e9ant_des_liens_vers_des_listes_de_journaux_externes
+JabRef_includes_a_built-in_list_of_journal_abbreviations.=JabRef_int\u00e8gre_une_liste_d'abr\u00e9viations_de_journaux.
+You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=Vous_devez_s\u00e9lectionner_soit_un_style_de_fichier_valide,_soit_utiliser_un_des_styles_par_d\u00e9faut.
+You_must_select_either_a_valid_style_file,_or_use_a_default_style.=Vous_devez_s\u00e9lectionner_soit_un_style_de_fichier_valide,_soit_utiliser_un_style_par_d\u00e9faut
+
+Show=Afficher
+
+This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=Ceci_est_simplement_une_fenêtre_de_copier-coller._Commencez_par_charger_ou_coller_du_texte_dans_la_zone_de_saisie_de_texte.<br>Ensuite,_vous_pouvez_sélectionner_des_portions_de_texte_et_les_attribuer_à_des_champs_BibTeX.
+Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=Biblioth\u00e8que_Java_Bouncy_Castle_library_non_trouv\u00e9._S'il_vous_plait,_t\u00e9l\u00e9chargez_e__installez-l\u00e0._Pour_plus_d'informations,_voir_http://www.bouncycastle.org/.
+
+This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=Cette_fonction_g\u00e9n\u00e8re_une_nouvelle_base_de_donn\u00e9es_bas\u00e9es_sur_les_entr\u00e9es_requises_par_un_document_LaTeX_existant.
+You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=Vous_devez_s\u00e9lectionnner_une_de_vos_bases_de_donn\u00e9es_ouvertes_\u00e0_partir_de_laquelle_choisir_vos_entre\u00e9es,_ainsi_que_le_fichier_AUX_produit_par_LaTeX_lors_de_la_compilation_du_document.
+First_select_entries_to_clean_up.=Commencez_par_s\u00e9lectionner_les_entr\u00e9es_\u00e0_nettoyer
+Cleanup_entry=Nettoyage_des_entr\u00e9es
+Autogenerate_PDF_Names=G\u00e9n\u00e9ration_automatique_des_noms_des_PDF
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=La_g\u00e9n\u00e9ration_automatique_des_noms_des_PDF_ne_peut_pas_\u00eatre_annul\u00e9e._Continuer?
+File_rename_failed_for=Le_renommage_des_fichiers_a_\u00e9chouer_pour
+You_have_toggled_the_BibLaTeX_mode.=Vous_avez_activ\u00e9_le_mode_BibLaTeX
+Use_full_firstname_whenever_possible=Utiliser_le_pr\u00e9nom_en_entier_quand_c'est_possible
+Use_abbreviated_firstname_whenever_possible=Utiliser_le_pr\u00e9nom_abr\u00e9g\u00e9_quand_c'est_possible
+Use_abbreviated_and_full_firstname=Utiliser_le_pr\u00e9nom_abr\u00e9g\u00e9_et_entier
+Autocompletion_options=Options_de_la_compl\u00e9tion_automatique
+Autocomplete_after_following_number_of_characters=Compl\u00e9tion_automatique_apr\u00e8s_un_nombre_de_caract\u00e8res_\u00e9gal_\u00e0
+Name_format_used_for_autocompletion=Format_de_nom_utilis\u00e9_pour_la_compl\u00e9tion_automatique
+Treatment_of_first_names=Traitement_des_pr\u00e9noms
+No_icon_found_for_%0=Aucun_ic\u00f4ne_trouv\u00e9_pour_%0
+Cleanup_entries=Entr\u00e9es_nettoy\u00e9es
+Automatically_assign_new_entry_to_selected_groups=Assigner_automatiquement_les_nouvelles_entr\u00e9es_aux_groupes_s\u00e9lectionn\u00e9s
+Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=D\u00e9placer_les_DOIs_des_champs_note_et_URL_vers_le_champ_DOI,_et_supprimer_le_prefix_http
+Format_content_of_month_field_to_#mon#=Formater_le_contenu_du_champ_mois_en_#mon#
+Ensure_that_page_ranges_are_of_the_form_num1--num2=S'assurer_que_les_gammes_de_pages_sont_au_format_nb1--nb2
+Make_paths_of_linked_files_relative_(if_possible)=Rendre_relatifs_les_chemins_des_fichiers_li\u00e9s_(si_possible)
+Rename_PDFs_to_given_file_name_format_pattern=Renommer_les_PDF_selon_le_mod\u00e8le_donn\u00e9_de_format_de_nom_de_fichier
+Rename_only_PDFs_having_a_relative_path=Renommer_uniquement_les_PDF_ayant_un_chemin_relatif
+What_would_you_like_to_clean_up?=Voulez-vous_lancer_le_nettoyage_?
+Doing_a_cleanup_for_%0_entries...=Nettoyage_en_cours_pour_%0_entr\u00e9es...
+No_entry_needed_a_clean_up=Aucune_entr\u00e9e_ne_n\u00e9cessitait_un_nettoyage
+One_entry_needed_a_clean_up=Une_entr\u00e9e_n\u00e9cessitait_un_nettoyage
+%0_entries_needed_a_clean_up=%0_entr\u00e9es_n\u00e9cessitaient_un_nettoyage
+Imported_=Import\u00e9_
+Error_importing_from_database=Erreur_d'importation_\u00e0_partir_de_la_base_de_donn\u00e9es
+
+Minimize_to_system_tray=Minimiser_vers_la_barre_des_t\u00e2ches
+
+Incomplete_search_results=R\u00e9sultats_de_recherche_incomplets
+%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=%0_entr\u00e9es_ont_\u00e9t\u00e9_trouv\u00e9es,_mais_seulement_%1_ont_pu_\u00eatre_trait\u00e9es.
+
+Error_downloading_file_'%0'=Erreur_lors_du_t\u00e9l\u00e9chargement_du_fichier_'%0'
+Download_failed=Echec_du_t\u00e9l\u00e9chargement
+
+%0_databases_will_be_imported=%0_bases_de_donn\u00e9es_seront_import\u00e9es
+Importing_cancelled=Importation_annul\u00e9e
+There_are_no_available_databases_to_be_imported=Il_n'y_a_pas_de_base_de_donn\u00e9es_\u00e0_importer
+Import_from_SQL_database=Importer_\u00e0_partir_d'une_base_SQL
+Imported_%0_databases_successfully=%0_bases_ont_\u00e9t\u00e9_import\u00e9es_avec_succ\u00e8s
+<_CREATE_NEW_DATABASE_>=<_CREER_UNE_NOUVELLE_BASE_>
+Remove_Selected=Supprimer_la_s\u00e9lection
+SQL_Database_Exporter=Exporteur_de_base_SQL
+Select_target_SQL_database\:=S\u00e9lectionner_la_base_SQL_cible_:
+SQL_Database_Importer=Importeur_de_base_SQL
+Please_select_which_JabRef_databases_do_you_want_to_import\:=SVP,_s\u00e9lectionnez_les_bases_JabRef_\u00e0_importer_:
+
+Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=L'arbre_des_groupes_n'a_pu_\u00eatre_analys\u00e9._Si_vous_sauvez_la_base_BibTeX,_tous_les_groupes_seront_perdus.
+Attach_file=Attachez_un_fichier
+
+Setting_all_preferences_to_default_values.=Initialiser_la_configuration_aux_valeurs_par_d\u00e9faut.
+Resetting_preference_key_'%0'=R\u00e9initialiser_la_clef_de_configuration_'%0'
+Unknown_preference_key_'%0'=Clef_de_configuration_'%0'_inconnue
+Unable_to_clear_preferences.=Impossible_d'initialiser_la_configuration.
+
+Reset_preferences_(key1,key2,..._or_'all')=R\u00e9initialiser_la_configuration_(clef1,_clef2,..._ou_'toutes')
+Find_unlinked_files=Trouver_les_fichiers_non_li\u00e9s
+Select_All=Tout_s\u00e9lectionner
+Unselect_All=Tout_d\u00e9s\u00e9lectionner
+Expand_All=Tout_\u00e9tendre
+Collapse_All=Tout_masquer
+Select_Directory=S\u00e9lectionner_un_r\u00e9pertoire
+Choose_Directory=Choisir_un_r\u00e9pertoire
+Use_the_selected_directory_to_start_with_the_search.=Utiliser_le_r\u00e9pertoire_s\u00e9lectionn\u00e9_pour_lancer_la_recherche.
+Browse...=Naviguer...
+Opens_the_file_browser.=Ouvre_l'explorateur_de_fichier.
+Scan_directory=Examiner_le_r\u00e9pertoire
+Searches_the_selected_directory_for_unlinked_files.=Rechercher_les_fichiers_non_li\u00e9s_dans_le_r\u00e9pertoire_s\u00e9lectionn\u00e9
+Starts_the_import_of_bibtex_entries.=D\u00e9buter_l'importation_des_entr\u00e9es_BibTeX
+Leave_this_dialog.=Quitter_cette_fen\u00eatre_de_dialogue.
+Create_directory_based_keywords=Cr\u00e9er_les_mots-clefs_selon_le_r\u00e9pertoire
+Creates_keywords_in_created_entrys_with_directory_pathnames=Ajoute_des_mot-clefs_dans_les_r\u00e9pertoires_selon_les_chemins_de_r\u00e9pertoire
+Select_a_directory_where_the_search_shall_start.=S\u00e9lectionner_un_r\u00e9pertoire_o\u00f9_d\u00e9butera_la_recherche
+Select_file_type\:=S\u00e9lectionner_le_type_de_fichier_:
+These_files_are_not_linked_in_the_active_database.=Ces_fichiers_ne_sont_pas_li\u00e9s_dans_la_base_active.
+Entry_type_to_be_created\:=Type_d'entr\u00e9e_\u00e0_cr\u00e9er_:
+Searching_file_system...=Recherche_dans_le_syst\u00e8me_de_fichiers...
+Importing_into_Database...=Importation_dans_une_base_de_donn\u00e9es...
+Select_directory=S\u00e9lectionner_un_r\u00e9pertoire
+Select_files=S\u00e9lectionner_des_fichiers
+Bibtex_entry_creation=Cr\u00e9ation_d'un_entr\u00e9e_BibTeX
+<No_selection>=<Pas_de_s\u00e9lection>
+Push_selection_to_TeXstudio=Envoyer_la_s\u00e9lection_vers_TeXstudio
+Path_to_TeXstudio=Chemin_vers_TeXstudio
+Program_'%0'_not_found=Programme_'%0'_non_trouv\u00e9
+Pushed_citations_to_TeXstudio=Citations_envoy\u00e9es_vers_TeXstudio
+Unable_to_connect_to_freecite_online_service.=Impossible_de_se_connecter_au_service_en_ligne_FreeCite
+Parse_with_FreeCite=Analyse_avec_FreeCite
+Insert_selected_citations_into_TeXstudio=Envoyer_les_citations_s\u00e9lectionn\u00e9es_dans_TeXstudio
+The_current_BibTeX_key_will_be_overwritten._Continue?=La_clef_BibTeX_courante_sera_\u00e9craser._Continuer_?
+Overwrite_key=Ecraser_la_clef
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Pas_d'\u00e9crasement_de_clefs_existantes._Pour_changer_ce_param\u00e9trage,_ouvrir_Options_->_Pr\u00e9f\u00e9rences_->_G\u00e9n\u00e9rateur_de_clefs_BibTeX
+How_would_you_like_to_link_to_'%0'?=Quel_type_de_lien_souhaitez-vous_vers_'%0'_?
+Bibtex_key_patterns=Mod\u00e8les_de_clef_BibTeX
+Changed_special_field_settings=Param\u00e8tres_de_champs_sp\u00e9ciaux_modifi\u00e9s
+Clear_priority=R\u00e9initialiser_la_priorit\u00e9
+Clear_rank=R\u00e9initialiser_le_rang
+Compact_rank=Compacter_le_rang
+Convert_1st,_2nd,_..._to_real_superscripts=Convertir_1er,__2nd,_..._en_vrais_exposants
+Dropped_comment_from_database=Commentaires_supprim\u00e9s_de_la_base
+Enable_PDF_preview=Autoriser_la_pr\u00e9visualisation_des_PDF
+Enable_special_fields=Autoriser_les_champs_sp\u00e9ciaux
+Five_stars=Cinq_\u00e9toiles
+Four_stars=Quatre_\u00e9toiles
+Help_on_special_fields=Aide_sur_les_champs_sp\u00e9ciaux
+Keywords_of_selected_entries=Mots-clefs_des_entr\u00e9es_s\u00e9lectionn\u00e9s
+Manage_content_selectors=G\u00e9rer_les_s\u00e9lecteurs_de_contenu
+Manage_keywords=G\u00e9rer_les_mots-clefs
+Marked_entries'_quality_as_good=Marquer_la_qualit\u00e9_des_entr\u00e9es_comme_bonne
+Marked_entries_as_relevant=Marquer_les_entr\u00e9es_comme_pertinente
+No_priority_information=Pas_d'information_sur_la_priorit\u00e9
+No_rank_information=Pas_d'information_sur_le_rang
+One_star=Une_\u00e9toile
+Priority=Priorit\u00e9
+Priority_high=Priorit\u00e9_forte
+Priority_low=Priorit\u00e9_faible
+Priority_medium=Priorit\u00e9_interm\u00e9diaire
+Quality=Qualt\u00e9
+Rank=Rang
+Relevance=Pertinence
+Set_priority=D\u00e9finir_la_priorit\u00e9
+Set_priority_to_high=D\u00e9finir_la_priorit\u00e9_comme_forte
+Set_priority_to_low=D\u00e9finir_la_priorit\u00e9_comme_faible
+Set_priority_to_medium=D\u00e9finir_la_priorit\u00e9_comme_interm\u00e9diaire
+Set_rank_to_five_stars=D\u00e9finir_le_rang_comme_cinq_\u00e9toiles
+Set_rank_to_four_stars=D\u00e9finir_le_rang_comme_quatre_\u00e9toiles
+Set_rank_to_one_star=D\u00e9finir_le_rang_comme_une_\u00e9toile
+Set_rank_to_three_stars=D\u00e9finir_le_rang_comme_trois_\u00e9toiles
+Set_rank_to_two_stars=D\u00e9finir_le_rang_comme_deux_\u00e9toiles
+Show_one_letter_heading_for_icon_columns=Montrer_un_ent\u00eate_d'une_lettre_pour_les_colonnes_d'ic\u00f4nes
+Show_priority=Montrer_la_priorit\u00e9
+Show_quality=Montrer_la_qualit\u00e9
+Show_rank=Montrer_le_rang
+Show_relevance=Montrer_la_pertinence
+Synchronize_with_keywords=Synchroniser_avec_les_mots-clefs
+Synchronized_special_fields_based_on_keywords=Champs_sp\u00e9ciaux_synchronis\u00e9s_sur_la_base_des_mots-clefs
+Three_stars=Trois_\u00e9toiles
+Toggle_relevance=Afficher/Masquer_la_pertinence
+Toogle_quality_assured=Afficher/Masquer_la_qualit\u00e9_\u00e9valu\u00e9e
+Two_stars=Deux_\u00e9toiles
+Update_keywords=Mettre_\u00e0_jour_les_mots-clefs
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=Ecrire_les_valeurs_des_champs_sp\u00e9ciaux_dans_des_champs_BibTeX_s\u00e9par\u00e9s
+You_have_changed_settings_for_special_fields.=Vous_avez_modifier_les_param\u00e8tres_pour_les_champs_sp\u00e9ciaux.
+no_preview_available=Pr\u00e9visualisation_non_disponible
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_entr\u00e9es_trouv\u00e9es._Pour_r\u00e9duire_la_charge_du_serveur,_seulement_%1_seront_t\u00e9l\u00e9charg\u00e9es.
+A_string_with_that_label_already_exists=Une_chaine_avec_cette_\u00e9tiquette_existe_d\u00e9ja
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=La_connexion_\u00e0_OpenOffice_a_\u00e9t\u00e9_perdue._S'il_vous_plait,_assurez-vous_qu'OpenOffice_soit_lanc\u00e9,_et_essayez_de_vous_reconnecter.
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Corrigez_l'entr\u00e9e_et_r\u00e9-ouvrez_l'\u00e9diteur_pour_afficher/\u00e9diter_la_source.
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=La_connexion_\u00e0_un_processus_gnuserv_actif_a_\u00e9chou\u00e9._Assurez-vous_que_Emacs_ou_XEmacs_soit_lanc\u00e9,<BR>et_que_le_serveur_a_\u00e9t\u00e9_d\u00e9marr\u00e9_(en_lan\u00e7ant_la_commande_'server-start'/'gnuserv-start').
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=La_connexion_\u00e0_OpenOffice_n'a_pas_pu_\u00eatre_lanc\u00e9e.\nAssurez-vous_qu'OpenOffice_est_install\u00e9_avec_le_support_Java.\\nEn_cas_de_connexion_manuelle,_v\u00e9rifiez_les_chemins_du_programme_et_de_la_biblioth\u00e8que.\n\nMessage_d'erreur_\:_
+Created_group_"%0".=Groupe_"%0"_cr\u00e9\u00e9.
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Le_fichier_a_\u00e9t\u00e9_mis_\u00e0_jour_par_ailleurs._Etes-vous_s\u00fbr_que_vous_voulez_sauver_?
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=Si_une_entr\u00e9e_coll\u00e9e_ou_import\u00e9e_a_le_champ_d\u00e9j\u00e0_param\u00e9tr\u00e9,_\u00e9craser.
+Import_Metadata_From_PDF=Importer_les_m\u00e9ta-donn\u00e9es_\u00e0_partir_du_PDF
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Pas_de_connexion_\u00e0_un_document_Writer._S'il_vous_plait,_assurez-vous_qu'un_document_est_ouvert_et_utiliser_le_bouton_'S\u00e9lectionner_un_document_Writer'_pour_vous_y_connecter.
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=Notez_s'il_vous_plait_qu'il_s'agit_d'une_version_b\u00e9ta_pr\u00e9liminaire._Ne_l'utilisez_pas_sans_archiver_vos_fichiers_!
+Removed_all_subgroups_of_group_"%0".=Tous_les_sous-groupes_du_groupe_"%0"_ont_\u00e9t\u00e9_supprim\u00e9s.
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=Pour_d\u00e9sactiver_le_mode_Memory-stick,_renommer_ou_supprimer_le_fichier_jabref.xml_dans_le_m\u00eame_r\u00e9pertoire_que_JabRef
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Connexion_impossible._Une_raison_potentielle_est_que_JabRef_et_OpenOffice/LibreOffice_ne_fonctionnent_pas_tous_les_deux_soit_en_mode_32_bits,_soit_en_mode_64_bits.
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Impossible_de_d\u00e9terminer_le_nom_et_la_version_du_greffon._Ce_pourrait_ne_pas_\u00eatre_un_greffon_JabRef_valide.
+Use_the_following_delimiter_character(s)\:=Utiliser_le(s)_caract\u00e8re(s)_de_d\u00e9limitation_suivant\:
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=Lors_du_t\u00e9l\u00e9chargement_de_fichiers_ou_du_d\u00e9placement_de_fichiers_li\u00e9es_vers_le_r\u00e9pertoire_de_fichiers,_pr\u00e9f\u00e9rez_l'emplacement_du_fichier_bib_au_r\u00e9pertoire_ci-dessus
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Votre_fichier_de_style_sp\u00e9cifie_le_format_de_caract\u00e8re_'%0',_qui_n'est_pas_d\u00e9fini_dans_votre_document_OpenOffice_actuel.
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Votre_fichier_de_style_sp\u00e9cifie_le_format_de_paragraphe_'%0',_qui_n'est_pas_d\u00e9fini_dans_votre_document_OpenOffice_actuel.
+
+Error_fetching_from_Google_Scholar=Erreur_au_cours_de_la_recherche_Google_Scholar
+Run_HTML_converter_on_title=Lancer_le_convertisseur_HTML_sur_le_titre
+Searching...=Recherche...
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=Vous_avez_s\u00e9lectionn\u00e9_plus_de_%0_entr\u00e9es_\u00e0_t\u00e9l\u00e9charger._Certains_sites_web_pourraient_vous_bloquer_si_vous_effectuez_de_trop_nombreux_et_rapides_t\u00e9l\u00e9chargements._Voulez-vous_continuer?
+Confirm_selection=Confirmez_la_s\u00e9lection
+Get_BibTeX_entry_from_DOI=Obtenir_l'entr\u00e9e_BibTeX_\u00e0_partir_du_DOI
+Unknown_DOI\:_'%0'.=DOI_inconnu_:_'%0'.
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Conversion_des_indices_et_exposants_en_\u00e9quations_plut\u00f4t_qu'en_texte
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Ajouter_{}_aux_mots_du_titre_sp\u00e9cifi\u00e9s_lors_d'une_recherche_pour_pr\u00e9server_la_casse_correcte
+Import_conversions=Importer_les_conversions
+Run_filter_on_title_keeping_the_case_of_selected_words=Lancer_un_filtre_sur_le_titre_en_pr\u00e9servant_la_casse_des_mots_s\u00e9lectionn\u00e9s
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=Erreurs_intermittentes_sur_le_serveur_IEEE_Xplore_server._R\u00e9-essayez_dans_un_moment_s'il_vous_plait.
+Please_enter_a_search_string=Entrez_s'il_vous_plait_une_chaine_de_recherche
+Please_open_or_start_a_new_database_before_searching=S'il_vous_plait,_ouvrez_ou_cr\u00e9er_une_nouvelle_base_avant_la_recherche
+An_Error_occurred_while_fetching_from_ADS_(%0)\:=Une_erreur_est_survenue_lors_de_la_recherche_ADS_(%0)_:
+Error_while_fetching_from_ADS=Erreur_lors_de_la_recherche_ADS
+Error_while_fetching_from_OAI2=Erreur_lors_de_la_recherche_OAI2
+An_Error_occurred_while_parsing_abstract=Une_erreur_est_survenue_pendant_le_traitement_du_r\u00e9sum\u00e9
+Unknown_DiVA_entry\:_'%0'.=Entr\u00e9e_DiVA_inconnue\:_'%0'.
+Get_BibTeX_entry_from_DiVA=Obtenir_l'entr\u00e9e_BibTeX_\u00e0_partir_de_DiVA
+Log=Message
+Remove_unneccessary_$,_{,_and_}=Suppression_des_$,_{,_et_}_inutiles
diff --git a/src/resource/JabRef_in.properties b/src/resource/JabRef_in.properties
index aaff48e..d65ec0e 100644
--- a/src/resource/JabRef_in.properties
+++ b/src/resource/JabRef_in.properties
@@ -1,1572 +1,1572 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-%0_contains_the_Regular_Expression_<b>%1</b>=%0_mengandung_Ekspresi_Reguler_<b>%1</b>
-%0_contains_the_term_<b>%1</b>=%_mengandung_istilah_<b>%1</b>
-%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_tidak_mengandung_Ekspresi_Reguler_<b>%1</b>
-%0_doesn't_contain_the_term_<b>%1</b>=%0_tidak_mengandung_istilah_<b>%1</b>
-%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_tidak_sesuai_dengan_Ekspresi_Reguler_<b>%1</b>
-%0_doesn't_match_the_term_<b>%1</b>=%0_tidak_sesuai_dengan_istilah_<b>%1</b>
-%0_export_successful=%0_ekspor_berhasil
-%0_field_set=%0_bidang_ditetapkan
-%0_matches_the_Regular_Expression_<b>%1</b>=%0_sesuai_dengan_Ekspresi_Reguler_<b>%1</b>
-%0_matches_the_term_<b>%1</b>=%0_sesuai_dengan_istilah_<b>%1</b>
-<field_name>=<nama_bidang>
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>tidak_bisa_menemukan_berkas_'%0'<BR>tautan_dari_entri_'%1'</HTML>
-<no_field>=<tanpa_bidang>
-<select>=<pilih>
-<select_word>=<pilih_kata>
-A_string_with_this_label_already_exists=String_dengan_label_tadi_sudah_ada
-Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Singkat_nama_jurnal_dari_entri_pilihan_(Singkatan_ISO)
-Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Singkat_nama_jurnal_dari_entri_pilihan_(Singkatan_MEDLINE)
-Abbreviate_names=Singkat_nama
-Abbreviated_%0_journal_names.=Aingkatan_%0_nama_jurnal.
-Abbreviation=Singkatan
-About_JabRef=Tentang_JabRef
-Abstract=Abstrak
-Accept=Terima
-Accept_change=Terima_perubahan
-Action=Aksi
-Add=Tambah
-Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Tambah_kelas_ImportFormat_dari_lokasi_class._\nLokasi_tidak_harus_pada_lokasi_kelas_JabRef.
-Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Tambah_suaian_kelas_ImportFormat_dari_arsip_Zip.\nLokasi_arsip_Zip_tidak_harus_dalam_lokasi_kelas_JabRef.
-add_entries_to_group=tambah_entri_ke_grup
-Add_entry_selection_to_this_group=Tambah_entri_pilihan_ke_grup_ini
-Add_from_folder=Tambah_dari_folder
-Add_from_jar=Tambah_dari_jar
-add_group=tambah_grup
-Add_Group=Tambah_Grup
-Add_new=Tambah_baru
-Add_Subgroup=Tambah_Anak_Grup
-Add_to_group=Tambah_ke_grup
-Added_group_"%0".=Grup_ditambahkan_"%0".
-Added_new=Ditambahkan_baru
-Added_string=Ditambahkan_string
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Tambahan,_entri_bidang_<b>%0</b>_yang_tidak_mengandung<b>%1</b>_dapat_d [...]
-Advanced=Tingkat_lanjut
-All_custom_file_types_will_be_lost._Proceed?=Semua_berkas_tipe_suaian_akan_hilang._Teruskan?
-All_Entries=Semua_Entri
-All_entries=Semua_entri
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Semua_entri_tipe_ini_akan_dinyatakan_sebagai_tanpa_tipe._Teruskan?
-All_fields=Semua_bidang
-All_subgroups_(recursively)=Semua_anak_grup_(rekursif)
-Allow_editing_in_table_cells=Ijinkan_menyunting_dalam_sel_tabel
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Kesalahan_terjadi_ketika_mengambil_dari_sumber_OAI2_(%0)\:
-An_Exception_ocurred_while_accessing_'%0'=Kesalahan_terjadi_ketika_mengakses_'%0'
-An_SAXException_ocurred_while_parsing_'%0'\:=SAXException_terjadi_ketika_mengurai_'%0'\:
-and=dan
-and_inside_the_JabRef-jar\:=dan_didalam_JabRef-jar\:
-and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=dan_kelas_tersebut_harus_dinyatakan_di_lokasi_kelas_waktu_menjalankan_JabRef.
-any_field_that_matches_the_regular_expression_<b>%0</b>=bidang_yang_sesuai_dengan_ekspresi_reguler_<b>%0</b>
-Appearance=Penampilan
-Append=Menambah
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Menambah_isi_dari_basisdata_BibTeX_ke_basisdata_yang_sedang_dilihat_sekarang
-Append_database=Menambah_basisdata
-append_the_selected_text_to_bibtex_key=menambah_teks_pilihan_ke_kunci_bibtex
-Application=Aplikasi
-Apply=Terapkan
-Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argumen_dimasukkan_pada_JabRef_yang_sedang_dibuka._Dimatikan.
-Assign_entry_selection_exclusively_to_this_group=Terapkan_pilihan_entri_hanya_ke_grup_ini
-Assign_new_file=Terapkan_ke_berkas_baru
-Assign_the_original_group's_entries_to_this_group?=Terapkan_entri_grup_asli_ke_grup_ini?
-Assigned_%0_entries_to_group_"%1".=Diterapkan_%0_entri_ke_grup_"%1".
-Assigned_1_entry_to_group_"%0".=Diterapkan_1_entri_ke_grup_"%0".
-At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=Paling_tidak_plugin_'net.sf.jabref.core'_harus_ada.
-Attach_%0_file=Lampirkan_berkas_%0
-Attach_URL=Lampirkan_URL
-Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Mencoba_atur_otomatis_%0_tautan_untuk_entri_anda._Pengaturan_otomatis_berfungsi_jika_berkas_%0_di_folder_%0_atau_subfolder<BR>diberi_nama_sama_dengan_kunci_BibTeX,_tambah_ekstensi.
-Attempting_SQL_export...=Seang_proses_ekspor_SQL...
-Auto=Otomatis
-Autodetect_format=Deteksi_format_otomatis_
-Autogenerate_BibTeX_key=Kunci_BibTeX_dibuat_otomatis
-Autogenerate_BibTeX_keys=Kunci_BibTeX_dibuat_otomatis
-Autogenerate_groups=Grup_dibuat_otomatis
-autogenerate_keys=kunci_dibuat_otomatis
-Autolink_files_with_names_starting_with_the_BibTeX_key=Tautan_otomatis_berkas_dgn_nama_yang_sama_kunci_BibTeX
-Autolink_only_files_that_match_the_BibTeX_key=Tautan_otomatis_hanya_pada_berkas_sesuai_dgn_kunci_BibTeX
-Automatically_create_groups=Otomatis_membuat_grup
-Automatically_create_groups_for_database.=Otomatis_membuat_grup_untuk_basisdata.
-Automatically_created_groups=Grup_yang_dibuat_otomatis
-Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Otomatis_sembunyikan_antarmuka_grup_ketika_merubah_ke_basisdata_yang_tidak_punya_grup
-Automatically_remove_exact_duplicates=Otomatis_menghapus_yang_sama
-Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Otomatis_menampilkan_antarmuka_grup_ketika_merubah_ke_basisdata_yang_mempunyai_grup
-Autoset=Pengaturan_otomatis
-Autoset_%0_field=Pengaturan_otomatis_bidang_%0
-Autoset_%0_links._Allow_overwriting_existing_links.=Pengaturan_otomatis_%0_tautan._Mengijinkan_menindih_tautan_yang_ada.
-Autoset_%0_links._Do_not_overwrite_existing_links.=Pengatuean_otomatis_%0_tautan._Tidak_boleh_menindih_tautan_yang_ada.
-Autoset_external_links=Pengaturan_otomatis_tautan_eksternal
-Autosetting_links=Pengaturan_otomatis_tautan
-AUX_file_import=Impor_berkas_AUX
-Available_export_formats=Format_ekspor_yang_dikenal
-Available_fields=Bidang_tersedia
-Available_import_formats=Format_impor_yang_dikenal
-Background_color_for_optional_fields=Latar_bidang_tambahan
-Background_color_for_required_fields=Latar_bidang_utama
-Backup_old_file_when_saving=Cadangan_berkas_lama_ketika_menyimpan
-Beta_version=Versi_Beta
-Bibkey_to_filename_conversion=Konversi_Bibkey_ke_nama_berkas
-BibTeX_key=Kunci_BibTeX
-BibTeX_key_is_unique.=Kunci_BibTeX_tidak_boleh_sama.
-BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Kunci_BibTeX_belum_ditentukan._Tulis_nama_untuk_berkas_muat_turun
-BibTeX_source=Sumber_BibTeX
-BibTeXML=BibTeXML
-Binding=Gabung
-Broken_link=Tautan_rusak
-Browse=Jelajah
-by=oleh
-Calling_external_viewer...=Memanggil_penampil_eksternal
-Cancel=Batal
-Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Tidak_bisa_menambah_entri_ke_grup_tanpa_membuat_kunci._Membuat_kunci_sekarang?
-Cannot_merge_this_change=Tidak_bisa_menggagung_perubahan_ini
-Cannot_move_group_"%0"_down.=Tidak_bisa_meggeser_grup_"%0"_kebawah.
-Cannot_move_group_"%0"_left.=Tidak_bisa_meggeser_grup_"%0"_kekiri.
-Cannot_move_group_"%0"_right.=Tidak_bisa_meggeser_grup_"%0"_kekanan.
-Cannot_move_group_"%0"_up.=Tidak_bisa_meggeser_grup_"%0"_keatas.
-case_insensitive=huruf_besar_kecil_tidak_penting
-case_sensitive=memperhitungkan_huruf_besar_kecil
-Case_sensitive=Huruf_besar_kecil_tidak_penting
-change_assignment_of_entries=merubah_penugasan_entri
-Change_case=Merubah_huruf_besar/kecil
-Change_entry_type=Merubah_tipe_entri
-Change_file_type=Merubah_tipe_berkas
-change_key=merubah_kunci
-Change_of_Grouping_Method=Metubah_Metode_Grup
-change_preamble=merubah_preamble
-change_string_content=merubah_isi_string
-change_string_name=merubah_nama_string
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=Merubah_kolom_tabel_dan_pengaturan_umum_bidang_dengan_menerapkan_fitur_baru
-change_type=merubah_tipe
-changed_=dirubah_
-Changed_font_settings=Pengaturan_huruf_berubah
-Changed_language_settings=Pengaturan_bahasa_berubah
-Changed_look_and_feel_settings=Pengaturan_penampilan_berubah
-Changed_preamble=Preamble_berubah
-Changed_type_to=Merubah_tipe_ke
-Characters_to_ignore=Karakter_diabaikan
-Check_existing_%0_links=Periksa_%0_tautan_yang_sudah_ada
-Check_links=Periksa_tautan
-Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Pilih_URL_untuk_dimuaturun._Daftar_bawaan_diberikan_oleh_pengembang_JabRef.
-Cite_command=Perintah_acuan
-Class_name=Nama_kelas
-Clear=Bersihkan
-clear_all_groups=bersihkan_semua_grup
-Clear_field=Bersihkan_bidang
-Clear_fields=Bersihkan_beberapa_bidang
-Clear_highlight=Bersihkan_highlight
-Close=Tutup
-Close_dialog=Tutup_dialog
-Close_the_current_database=Tutup_basisdata_yang_sekarang
-Close_the_help_window=Tutup_jendela_bantuan
-Close_window=Tutup_jendela
-Closed_database=Basisdata_ditutup
-Collapse_subtree=Tutup_cabang_pohon
-Color_codes_for_required_and_optional_fields=Kode_warna_untuk_bidang_utama_dan_tambahan
-Color_for_marking_incomplete_entries=Tanda_untuk_entri_kosong
-Column_width=Lebar_kolom
-Command_line_id=id_perintah_baris
-Complete_record=Selesai_merekam
-Connect=Menghubungi
-Connect_to_SQL_database=Menghubungi_basisdata_SQL
-Connect_to_SQL_Database=Menghubungi_Basisdata_SQL
-Connection_to_IEEEXplore_failed=Koneksi_ke_IEEEXplore_gagal
-Contained_in=Terkandung_di
-Content=Isi
-Copied=Disalin
-Copied_cell_contents=Isi_sel_disalin
-Copied_key=Kunci_disalin
-Copied_keys=Kunci_disalin
-Copy=Salin
-Copy_BibTeX_key=Salin_kunci_bibTeX
-Copy_file_to_file_directory.=Salin_berkas_ke_direktori_berkas.
-Copy_files_to_file_directory.=Salin_berkas_ke_direktori_berkas.
-Copy_to_clipboard=Salin_ke_papan_klip
-Could_not_call_executable=Tidak_bisa_memanggil_yang_bisa_dijalankan
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Tidak_bisa_menghubungi_ke_proses_gnuserv_yang_berjalan._Pastikan_Emacs_atau_XEmacs_sedang_berjalan,<BR>dan_server_sudah_dijalankan_(dengan_perintah_'gnuserv-start').
-Could_not_connect_to_host_=Tidak_bisa_menghubungi_host
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Tidak_bisa_menghubungi_server_Vim._Pastikan_Vim_sedang_berjalan<BR>dengan_nama_server_yang_sah.
-Could_not_export_file=Tidak_bisa_ekspor_berkas
-Could_not_export_preferences=Tidak_bisa_ekspor_preferensi
-Could_not_find_a_suitable_import_format.=Tidak_bisa_menemukan_format_impor_yang_sesuai.
-Could_not_find_directory_for_%0-files\:_%1=Tidak_bisa_menemukan_direktori_untuk_%0-berkas\:_%1
-Could_not_find_image_file=Tidak_bisa_menemukan_berkas_gambar
-Could_not_find_layout_file=Tidak_bisa_menemukan_berkas_tataletak
-Could_not_import_preferences=Tidak_bisa_impor_preferensi
-Could_not_instantiate_%0=Tidak_bisa_instansiasi_%0
-Could_not_instantiate_%0_%1=Tidak_bisa_instansiasi_%0_%1
-Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Tidak_bisa_instansiasi_%0._Apakah_anda_sudah_memilih_lokasi_paket_yang_benar?
-Could_not_open_link=Tidak_bisa_membuka_tautan
-Could_not_parse_number_of_hits=Tidak_bisa_mengurai_beberapa_hits
-Could_not_print_preview=Tidak_bisa_mencetak_pratampilan
-Could_not_run_the_'vim'_program.=Tidak_bisa_menjalankan_program_'vim'.
-Could_not_save_file=Tidak_bisa_membuka_berkas
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Tidak_bisa_menyimpan_berkas._Enkoding_karakter_'%0'_tidak_didukung.
-Create_group=Membuat_grup
-Created_groups.=Grup_dibuat.
-crossreferenced_entries_included=entri_referensi_silang_diikutkan
-Current_content=Isi_sekarang
-Current_value=Angka_sekarang
-Custom_entry_types=Tipe_entri_suaian
-Custom_entry_types_found_in_file=Tipe_entri_suaian_ditemukan_dalam_berkas
-Custom_icon_theme=Tema_ikon_suaian
-Custom_icon_theme_file=Berkas_tema_ikon_suaian_
-Custom_importers=Pengimpor_atursendiri
-Customize_entry_types=Tipe_entri_ubahsuai
-Customize_key_bindings=Ubahsuai_kunci_gabungan
-Cut=Potong
-cut_entries=potong_entri
-cut_entry=potong_entri
-Cut_pr=Potong_pr
-Database_\:=Basisdata_\:
-Database_encoding=Enkoding_basisdata
-Database_has_changed._Do_you_want_to_save_before_closing?=Basisdata_sudah_berubah._Apakah_ingin_menyimpan_sebelum_menutup?
-Database_properties=Properti_basisdata
-Date_format=Format_tanggal
-Default=Bawaan
-Default_encoding=Enkoding_bawaan
-Default_grouping_field=Bidang_grup_bawaan
-Default_look_and_feel=Penampilan_artistik_bawaan
-Default_pattern=Pola_bawaan
-Default_sort_criteria=Kriteria_pengurutan_bawaan
-Define_'%0'=Mendefinisi_'%0'
-Delete=Hapus
-Delete_custom_format=Menghapus_format_suaian
-delete_entries=hapus_entri
-Delete_entry=Hapus_entri
-delete_entry=hapus_entri
-Delete_multiple_entries=Hapus_entri_berganda
-Delete_rows=Hapus_baris
-Delete_strings=Hapus_string
-Deleted=Dihapus
-Delimit_fields_with_semicolon,_ex.=Batas_bidang_dengan_titik_koma,_misal,
-Descending=Urutan_menurun
-Description=Deskripsi
-Deselect_all=Lepas_semua_pilihan
-Deselect_all_duplicates=Lepas_semua_pilihan_duplikasi
-Details=Perincian
-Disable_entry_editor_when_multiple_entries_are_selected=Penyunting_entri_tidak_aktif_ketika_beberapa_entri_dipilih
-Disable_this_confirmation_dialog=Dialog_konfirmasi_ini_tidak_aktif
-Disable_this_warning_dialog=Dialog_peringatan_ini_tidak_aktif
-Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Tampilkan_semua_entri_yang_ada_di_grup_pilihan.
-Display_all_error_messages=Tampilkan_semua_pesan_kesalahan
-Display_help_on_command_line_options=Tampilkan_bantuan_pada_opsi_perindah_baris
-Display_imported_entries_in_an_inspection_window_before_they_are_added.=Tampilkan_entri_impor_di_jendela_inspeksi_sebelum_ditambahkan
-Display_only_entries_belonging_to_all_selected_groups.=Tampilkan_entri_hanya_yang_ada_di_grup_pilihan.
-Display_version=Tampilkan_versi
-Displaying_no_groups=Grup_tidak_ditampilkan
-Do_not_abbreviate_names=Jangan_singkat_nama
-Do_not_autoset=Jangan_pengaturan_otomatis
-Do_not_import_entry=Jangan_impor_entri
-Do_not_open_any_files_at_startup=Jangan_buka_berkas_saat_menjalankan
-Do_not_overwrite_existing_keys=Jangan_menindih_kunci_yang_ada
-Do_not_show_splash_window_at_startup=Jangan_menampilkan_jendela_info_ketika_memulai
-Do_not_show_these_options_in_the_future=Untuk_selanjutnya_Jangan__tampilkan_ini_lagi
-Do_not_wrap_the_following_fields_when_saving=Jangan_lipat_bidang_berikut_ketika_menyimpan
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Jangan_menulis_bidang_dibawah_pada_Metadata_XMP\:
-Do_you_want_JabRef_to_do_the_following_operations?=Apakah_anda_ingin_JabRef_melakukan_proses_berikut?
-DocBook=DocBook
-Down=Kebawah
-Download=Muaturun
-Download_completed=Muaturun_selesai
-Download_file=Muaturun_berkas
-Downloading...=Sedang_muaturun...
-Drag_and_Drop_Error=Kesalahan_Seret_dan_Letak
-Drop_%0=Letakkan_%0
-duplicate_BibTeX_key=kunci_BibTeX_sama
-Duplicate_BibTeX_key.=Kunci_BibTeX_sama.
-Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Kunci_BibTeX_sama._Entri_ini_tidak_bisa_untuk_grup.
-Duplicate_Key_Warning=Peringatan_Kunci_Sama
-Duplicate_pairs_found=Ditemukan_pasangan_sama
-duplicate_removal=penghapus_yang_sama
-Duplicate_string_name=Nama_string_sama
-Duplicates_found=Ditemukan_ada_yang_sama
-Duplicates_removed=Yang_sama_dihapus
-Dynamic_groups=Grup_dinamik
-Dynamically_group_entries_by_a_free-form_search_expression=Entri_grup_dinamik_dengan_ekspresi_pencarian_bebas
-Dynamically_group_entries_by_searching_a_field_for_a_keyword=Entri_grup_dinamk_dengan_pencarian_bidang_dari_katakunci
-Each_line_must_be_on_the_following_form=Setiap_baris_harus_menurut_bentuk_berikut
-Edit=Sunting
-Edit_custom_export=Sunting_ekspor_atursendiri
-Edit_entry=Sunting_entri
-Edit_file_link=Sunting_berkas_tautan
-Edit_file_type=Sunting_tipe_berkas
-Edit_group=Sunting_grup
-Edit_journal=Sunting_jurnal
-Edit_preamble=Sunting_preamble
-Edit_strings=Sunting_string
-Editor_options=Pilihan_Penyunting
-empty_BibTeX_key=kunci_BibTeX_kosong
-Empty_BibTeX_key.=Kinci_BibTeX_kosong.
-Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Kunci_BibTeX_kosong._Grup_tidak_bisa_menggunakan_entri_ini.
-empty_database=basisdata_kosong
-Enable_source_editing=Aktifkan_penyuntingan_sumber
-Enable_word/name_autocompletion=Otomatis_melengkapi_kata/nama
-Endnote=Endnote
-Enter_URL=Tulis_URL
-Enter_URL_to_download=Tulis_URL_untuk_muaturun
-entries=entri
-Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Entri_tidak_bisa_diterapkan_secara_manual_atau_dihapus_dari_grup_ini.
-Entries_exported_to_clipboard=Entri_diekspor_ke_papan_klip
-entries_have_undefined_BibTeX_key=entri_belum_mempunyai_kunci_BibTeX
-entries_into_new_database=entri_ke_basisdata_baru
-entry=entri
-Entry_editor=Penyunting_entri
-Entry_in_current_database=Entri_di_basisdata_sekarang
-Entry_in_import=Entri_dalam_impor
-Entry_preview=Pratampilan_entri
-Entry_table=Tabel_entri
-Entry_table_columns=Kolom_tabel_entri
-Entry_type=Tipe_entri
-Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Entri_tipe_nama_tidak_diijinkan_mengandung_spasi_kosong_atau_karakter_berikut
-Entry_types=Tipe_entri
-Error=Kesalahan
-Error\:_=Kesalahan\:_
-Error_converting_Bibtex_to_XMP\:_%0=Kesalahan_merubah_Bibtex_ke_XMP:_%0
-Error_converting_XMP_to_'%0'...=Kesalahan_merubah_XMP_ke_'%0'...
-Error_exporting_to_clipboard=Kesalahan_mengekspor_ke_papan_klip
-Error_in_field=Kesalahan_dalam_bidang
-Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Ada_kesalahan_ketika_menjalankan_sistem_plugin._Tetap_menjalankan_tetapi_fungsinya_tidak_sempurna.
-Error_occured_when_parsing_entry=Kesalahan_terjadi_ketika_mengurai_entri
-Error_opening_file=Kesalahan_ketika_membuka_berkas
-Error_setting_field=Kesalahan_pengaturan_bidang
-Error_while_converting_BibtexEntry_to_XMP_%0=Kesalahan_ketika_merubah_BibtexEntry_ke_XMP_%0
-Error_while_downloading_file\:=Kesalahan_ketika_muaturun_berkas\:
-Error_while_fetching_from_OIA2=Kesalahan_ketika_mengambil_dari_OIA2
-Error_while_writing=Kesalahan_ketika_menulis
-Error_writing_to_%0_file(s).=Kesalahan_menulis_ke_berkas_%0.
-Error_writing_XMP_to_file\:_%0=Kesalahan_ketika_menulis_XMP_ke_berkas\:_%0
-Establishing_SQL_connection...=Sedang_membuat_koneksi_SQL...
-Exceptions=Perkecualian
-Existing_file=Berkas_yang_ada
-exists._Overwrite_file?=sudah_ada._Berkas_ditindih?
-exists._Overwrite?=sudah_ada._Ditindih?
-Expand_subtree=Paparkan_cabang
-Export=Ekspor
-Export_name=Ekspor_nama
-Export_preferences=Preferensi_Ekspor
-Export_preferences_to_file=Ekspor_preferensi_ke_berkas
-Export_properties=Ekspor_properti
-Export_to_clipboard=Ekspor_ke_papan_klip
-Export_to_SQL_database=Ekspor_ke_basisdata_eksternal
-Exporting=Proses_mengekspor
-Extension=Ekstensi
-External_changes=Perubahan_eksternal
-External_file_links=Tautan_berkas_eksternal
-External_files=Berkas_eksternal
-External_programs=Program_eksternal
-External_viewer_called=Penampil_eksternal_dijalankan
-Failed_to_read_groups_data_(unsupported_version\:_%0)=Gagal_membaca_data_grup_(versi_tidak_didukung:_%0)
-Fetch=Mengambil
-Field=Bidang
-field=bidang
-Field_content=Isi_bidang
-Field_name=Nama_bidang
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Nama_bidang_tidak_diijinkan_mengandung_spasi_kosong_atau_karakter_berikut
-Field_sizes=Ukuran_bidang
-Field_to_filter=Bidang_ditapis
-Field_to_group_by=Bidang_ke_grup_berdasar
-Fields=Bidang
-File=Berkas
-file=berkas
-File_'%0'_is_already_open.=Berkas_'%0'_sudah_dibuka
-File_'%0'_not_found=Berkas_'%0'_tidak_ditemukan
-File_changed=Berkas_sudah_diubah
-File_directory_is_'%0'\:=Lokasi_berkas_adalah_'%0'\:
-File_directory_is_not_set_or_does_not_exist!=Lokasi_berkas_belum_ditentukan_atau_tidak_ada!
-File_download=Berkas_muatturun
-File_exists=Berkas_ada
-File_extension=Ekstensi_berkas
-File_has_been_updated_externally._What_do_you_want_to_do?=Berkas_diperbarui_dengan_program_eksternal._Apakah_yang_and_inginkan?
-File_not_found=Berkas_tidak_ditemukan
-File_type=Tipe_berkas
-File_updated_externally=Berkas_diperbarui_secara_eksternal
-filename=nama_berkas
-Files_opened=Berkas_dibuka
-Filter=Penapis
-Finished_autosetting_external_links.=Selesai_pengaturan_otomatis_tautan_eksternal.
-Finished_synchronizing_%0_links._Entries_changed%c_%1.=Selesai_menyelaraskan_%0_tautan._Entri_diubah%c_%1.
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Selesai_menulis_XMP-metadata._Ditulis_ke_berkas_%0.
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Selesai_menulis_XMP_untuk_berkas_%0_(%1_dilewati,_%2_kesalahan).
-First_select_the_entries_you_want_keys_to_be_generated_for.=Pertama_pilih_entri_yang_anda_kehendaki_untuk_dibuat_kunci.
-Fit_table_horizontally_on_screen=Sesuaikan_ukuran_tabel_horisontal_sesuai_layar
-Float=Ambangan
-Float_marked_entries=Ambangan_ditandai_sebagai_entri
-Font_Family=Keluarga_Huruf
-Font_Preview=Pratampilan_Huruf
-Font_Size=Ukuran_Huruf
-Font_Style=Corak_huruf
-FontSelector=PemilihHuruf
-for=untuk
-Format_of_author_and_editor_names=Format_nama_penulis_dan_penyunting
-Format_String=Format_String
-Format_used=Format_digunakan
-Formatter_Name=Nama_Pemformat
-Formatter_not_found=Pemformat_tidak_ditemukan
-found=ditemukan
-Found_%0_plugin(s)=Ditemukan_%0_plugin
-found_in_aux_file=ditemukan_dalam_berkas_aux
-Full_name=Nama_lengkap
-General=Umum
-General_fields=Bidang_umum
-Generate=Membuat
-Generate_BibTeX_key=Membuat_kunci_BibTeX
-Generate_keys=Membuat_kunci
-Generate_keys_before_saving_(for_entries_without_a_key)=Buat_kunci_sebelum_menyimpan_(untuk_entri_tanpa_kunci)
-Generate_keys_for_imported_entries=Buat_kunci_untuk_entri_impor
-Generate_now=Membuat_sekarang
-Generated_BibTeX_key_for=Kunci_BibTeX_dibuat_untuk
-Generating_BibTeX_key_for=Membuat_kunci_BibTeX_untuk
-Grab=Ambil
-Gray_out_entries_not_in_group_selection=Kelabukan_entri_yang_tidak_dalam_pilihan_grup
-Gray_out_non-hits=Kelabukan_non-hits
-Gray_out_non-matching_entries=Kelabukan_entri_yang_tidak_sesuai
-Group_properties=Properti_grup
-grouping_may_not_work_for_this_entry=Entri_ini_tidak_akan_berfungsi_dalam_grup
-Groups=Grup
-Harvard_RTF=Harcard_RTF
-Have_you_chosen_the_correct_package_path?=Apakah_anda_sudah_memilih_lokasi_paket_yang_tepat?
-Help=Bantuan
-Help_contents=Daftar_isi_bantuan
-Help_on_groups=Bantuan_untuk_grup
-Help_on_key_patterns=Bantuan_untuk_pola_kunci
-Help_on_Preview_Settings=Bantuan_untuk_Pengaturan_Pratampilan
-Help_on_Regular_Expression_Search=Bantuan_untuk_Pencarian_Ekspresi_Reguler
-Hide_non-hits=Sembunyikan_non-hits
-Hide_non-matching_entries=Sembunyikan_entri_yang_tidak_sesuai
-Hierarchical_context=Konteks_berhirarki
-Highlight=Warnakan
-Highlight_groups_matching_all_selected_entries=Warnakan_grup_yang_sesuai_dengan_semua_entri_pilihan
-Highlight_groups_matching_any_selected_entry=Warnakan_grup_yang_sesuai_dengan_entri_pilihan
-Highlight_overlapping_groups=Warnakan_grup_yang_bertindih
-Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Sarant%c_untuk_mencari_hanya_bidang_tertentu,_misal_tulis%c<p><tt>author%esmith_dan_title%eelectrical</tt>
-HTML=HTML
-HTML_table=Tabel_HTML
-HTML_table_(with_Abstract_&_BibTeX)=Tabel_HTML_(dengan_Abstrak_dan_BibTeX)
-Icon=Ikon
-Ignore=Abaikan
-Immediate_subgroups=sub-grup_seketika
-Import=Impor
-Import_and_keep_old_entry=Impor_dan_pertahankan_entri_lama
-Import_and_remove_old_entry=Impor_dan_hapus_entri_lama
-Import_entries=Impor_entri
-Import_failed=Impor_gagal
-Import_file=Impor_berkas
-Import_group_definitions=Impor_definisi_grup
-Import_name=Impor_nama
-Import_preferences=Preferensi_Impor
-Import_preferences_from_file=Impor_preferensi_dari_berkas
-Import_strings=Impor_string
-Import_to_open_tab=Impor_ke_tab_yang_dibuka
-Import_word_selector_definitions=Impor_definisi_pemilih_kata
-Imported_database=basisdata_diimpor
-Imported_entries=entri_diimpor
-Imported_from_database=diimpor_dari_basisdata
-ImportFormat_class=kelas_ImportFormat
-Importing=Sedang_mengimpor
-Importing_in_unknown_format=Mengimpor_pada_format_tidak_dikenal
-In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=Di_JabRef,_gunakan_pasangan_karakter_#_untuk_menandai_string.
-Include_abstracts=Termasuk_abstrak
-Include_entries=Termasuk_entri
-Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Termasuk_sub-grup\:_Ketika_dipilih,_lihat_entri_yang_ada_di_grup_atau_sub-grup_ini.
-Incremental=Bertahap
-Incremental_search=Pencarian_bertahap
-Incremental_search_failed._Repeat_to_search_from_top.=Pencarian_bertahap_gagal._Ulangi_pencarian_dari_atas.
-Independent_group\:_When_selected,_view_only_this_group's_entries=Grup_bebas\:_Ketika_dipilih,_lihat_hanya_entri_grup_ini
-Initially_show_groups_tree_expanded=Awalnya_grup_tampil_dengan_detail_dibuka
-Input=Masukan
-Input_error=Kesalahan_masukan
-Insert=Sisipkan
-Insert_rows=Sisipkan_baris
-Insert_selected_citations_into_LyX/Kile=Sisipkan_acuan_pilihan_ke_LyX/Kile
-Insert_selected_citations_into_WinEdt=Sisipkan_acuan_pilihan_ke_WinEdt
-insert_string_=sisipkan_string_
-Insert_URL=Sisipkan_URL
-integrity=integritas
-Integrity_check=periksa_integritas
-Intersection=Interseksi
-Invalid_BibTeX_key=Kunci_BibTeX_salah
-Invalid_date_format=Format_hari_salah
-Invalid_URL=URL_salah
-Inverted=Dibalik
-is_a_standard_type.=adalah_tipe_standar.
-ISO_abbreviation=Singkatan_ISO
-Item_list_for_field=daftar_item_untuk_bidang
-jabref=jabref
-JabRef_help=Petunjuk_menggunakan_JabRef
-JabRef_preferences=Preferensi_JabRef
-Journal_abbreviations=Singkatan_nama_Jurnal
-Journal_list_preview=Tampilkan_daftar_Jurnal
-Journal_name=Nama_Jurnal
-Keep=Tetap
-Keep_both=Tetap_keduanya
-Keep_lower=Tetap_atas
-Keep_upper=Tetap_bawah
-Key_bindings=Gabungan_kunci
-Key_bindings_changed=Gabungan_kunci_berubah
-Key_generator_settings=Pengaturan_pembuat_kunci
-Key_pattern=Pola_kunci
-keys_in_database=daftar_kunci_di_basisdata
-Keyword=katakunci
-Label=Label
-Language=Bahasa
-Last_modified=Terakhir_diubah
-LaTeX_AUX_file=berkas_LaTeX_AUX
-Leave_file_in_its_current_directory.=Tinggalkan_berkas_di_direktori_yg_sekarang.
-Leave_files_in_their_current_directory.=Tinggalkan_berkas_di_direktori_yg_sekarang.
-Left=Kiri
-License=Lisensi
-Limit_to_fields=Batasi_ke_bidang
-Limit_to_selected_entries=Batasi_ke_entri_pilihan
-Link=Tautan
-Link_local_file=Tautan_berkas_lokal
-Link_to_file_%0=Tautan_ke_berkas_%0
-Listen_for_remote_operation_on_port=Menggunakan_operasi_jarak_jauh_pada_port
-Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Muat_dan_Simpan_preferensi_dari/ke_jabref.xml_ketika_memulai_(mode_pena_simpan)
-Load_session=Sesi_muat
-Loading_session...=Sesi_pemuatan...
-localhost=host_lokal
-Look_and_feel=Penampilan_artistik
-Looking_for_pdf...=Sedang_mencari_pdf...
-lower=bawah
-Main_file_directory=Lokasi_berkas_utama
-Main_layout_file=Berkas_tataletak_utama
-Main_PDF_directory=Lokasi_utama_PDF
-Main_PS_directory=Lokasi_utama_PS
-Manage=Mengatur
-Manage_custom_exports=Mengatur_ekspor_atursendiri
-Manage_custom_imports=Mengatur_impor_atursendiri
-Manage_external_file_types=Pengaturan_program_eksternal
-Manage_journal_abbreviations=Pengaturan_singkatan_jurnal
-Mark_entries=Tandai_entri
-Mark_entry=Tandai_entri
-Mark_new_entries_with_addition_date=Tandai_entri_baru_dengan_tambahan_tanggal
-Mark_new_entries_with_owner_name=Tandai_entri_baru_dengan_nama_pemilik
-Marked_selected=Tandai_pilihan
-Memory_Stick_Mode=Mode_Pena_Simpan
-Menu_and_label_font_size=Ukuran_huruf_menu_dan_label
-Merged_external_changes=Menggabung_perubahan_eksternal
-Messages=Pesan
-Messages_and_Hints=Pesan_dan_Saran
-Modification_of_field=Modifikasi_bidang
-Modified_group_"%0".=Grup_dimodifikasi_"%0".
-Modified_groups=Grup_dimodifikasi
-Modified_string=String_dimodifikasi
-Modify=Memodifikasi
-modify_group=memodifikasi_grup
-MODS=MODS
-Move=Memindah
-Move_down=Pindah_kebawah
-Move_entries_in_group_selection_to_the_top=Pindah_entri_dalam_grup_pilihan_ke_atas
-Move_external_links_to_'file'_field=Pindah_tautan_eksternal_ke_bidang_'berkas'
-Move_files_to_file_directory.=Pindah_berkas_ke_direktori_berkas.
-move_group=pindah_grup
-Move_string_down=Pindah_string_kebawah
-Move_string_up=Pindah_string_keatas
-Move_up=Pindah_keatas
-Moved_group_"%0".=Grup_dipindah_"%0".
-MS_Office_2007=MS_Office_2007
-MySQL=MySQL
-MySQL_database=basisdata_MySQL
-Name=Nama
-Name_formatter=Pemformat_nama
-Natbib_style=Gaya_Natbib
-nested_aux_files=berkas_aux_bertingkat
-New=Baru
-new=baru
-New_BibTeX_database=Basisdata_BibTeX_baru
-New_BibTeX_entry=Entri_BibTeX_baru
-New_BibTeX_subdatabase=Anak_basisdata_BibTeX_baru
-New_content=Isi_baru
-New_database_created.=Basisdata_baru_selesai_dibuat.
-New_field_value=Isi_bidang_baru
-New_file=Berkas_baru
-New_file_link_(INSERT)=Tautan_berkas_baru_(SISIPAN)
-New_group=Grup_baru
-New_string=String_baru
-Next_entry=Entri_berikutnya
-No_%0_found=Berkas_%0_tidak_ada
-No_actual_changes_found.=Tidak_ada_perubahan.
-no_base-bibtex-file_specified=tidak_ada_berkas_berbasis_bibtex_dinyatakan
-no_database_generated=tidak_ada_basisdata_dibuat
-No_duplicates_found=Tidak_ditemukan_duplikasi
-No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Entri_tidak_ditemukan._Pastikan_anda_menggunakan_penapis_impor_yang_tepat.
-No_entries_found_for_the_search_string_'%0'=Tidak_adan_entri_ditemukan_untuk_pencarian_string_'%0'
-No_entries_imported.=Tidak_ada_entri_yang_diimpor.
-No_entries_or_multiple_entries_selected.=Tidak_ada_satu_entri_pun_yang_dipilih.
-No_entries_selected=Tidak_ada_entri_yang_dipilih
-No_entries_selected.=Tidak_ada_entri_yang_dipilih.
-No_exceptions_have_ocurred.=Tidak_ada_perkecualian_yang_terjadi.
-No_files_found.=Berkas_tidak_ditemukan.
-No_GUI._Only_process_command_line_options.=Tidak_ada_GUI._Hanya_menggunakan_perintah_baris.
-No_journal_names_could_be_abbreviated.=Tidak_ada_nama_jurnal_yang_bisa_disingkat.
-No_journal_names_could_be_unabbreviated.=Tidak_ada_ada_nama_jurnal_yang_bisa_dipanjangkan.
-No_PDF_linked=Tidak_ada_tautan_PDF
-No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=pdf_atau_ps_belum_didefinisikan,_dan_tidak_ada_berkas_yang_sesuai_dgn_kunci_BibTeX
-No_plugins_were_found_in_the_following_folders\:=Plugin_tidak_ditemukan_di_lokasi_berikut\:
-No_references_found=Referensi_tidak_ditemukan
-No_saved_session_found.=Tidak_ditemukan_sesi_yang_disimpan.
-No_url_defined=Tidak_ada_URL_didefinisikan
-No_XMP_metadata_found_in_=Tidak_ada_XMP_metadata_ditemukan_di_
-not=tidak
-not_found=tidak_ditemukan
-Not_saved_(empty_session)=Tidak_disimpan_(sesi_kosong)
-Note_that_the_entry_causing_the_problem_has_been_selected.=Catatan,_entri_yang_bermasalah_sudah_dipilih.
-Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Anda_harus_menyatakan_nama_kelas_spesifik_yang_akan_digunakan
-Nothing_to_redo=Tidak_ada_yang_dibatalkan
-Nothing_to_undo=Tidak_ada_yang_dikembalikan
-Number_of_references_to_fetch?=Nomor_referensi_yang_diambil?
-occurences=kali
-OK=OK
-Ok=Ok
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Satu_atau_lebih_tautan_berkas_dari_tipe_'%0',_yang_tidak_didefinisikan._Apa_yang_anda_inginkan?
-One_or_more_keys_will_be_overwritten._Continue?=Satu_atau_lebih_kunci_akan_ditindih._Teruskan?
-Only_one_item_is_supported=Hanya_satu_saja_yang_didukung
-Open=Buka
-Open_BibTeX_database=Buka_basisdata_BibTeX
-Open_database=Buka_basisdata
-Open_editor_when_a_new_entry_is_created=Buka_penyunting_ketika_entri_baru_dibuat
-Open_file=Buka_berkas
-Open_last_edited_databases_at_startup=Buka_basisdata_terakhir_ketika_memulai
-Open_PDF_or_PS=Buka_PDF_atau_PS
-Open_right-click_menu_with_Ctrl+left_button=Buka_menu_klik_kanan_dengan_tombol_Ctrl+kiri
-Open_URL_or_DOI=Buka_URL_atau_DOI
-OpenDocument_Spreadsheet=Lembarkerja_OpenDocument
-Opened_database=Basisdata_dibuka
-Opening=Membuka
-Opening_preferences...=Membuka_preferensi...
-OpenOffice_Calc=OpenOffice_Calc
-OpenOffice_CSV=OpenOffice_CVS
-Operation_canceled.\n=Operasi_dibatalkan.\n
-Operation_not_supported=Operasi_tidak_didukung
-Optional_fields=Bidang_tambahan
-Options=Pilihan
-or=atau
-out_of=dari
-Output=Keluaran
-Output_or_export_file=Keluaran_atau_berkas_ekspor
-Override=Ganti
-Override_default_file_directories=Ganti_direktori_berkas_bawaan
-Override_default_font_settings=Ganti_ukuran_huruf_bawaan
-override_the_bibtex_key_by_the_selected_text=ganti_kunci_bibtex_dengan_pilihan_teks
-Overwrite=Tindih
-Overwrite_existing_field_values=Tindih_isi_bidang_yang_ada
-Overwrite_keys=Tindih_kunci
-pairs_processed=proses_berpasangan
-Password_\:=Katalaluan_\:
-Paste=Tempel
-paste_entries=tempel_entri
-paste_entry=tempel_entri
-Paste_from_clipboard=Tempel_dari_papan_klip
-Pasted=Ditempel
-Path_to_%0_not_defined=Lokasi_%0_tidak_ada
-Path_to_LatexEditor_(LEd.exe)=Lokasi_LatexEditor_(LEd.exe)
-Path_to_LyX_pipe=Lokasi_pipa_LyX
-Path_to_Vim=Lokasi_Vim
-Path_to_WinEdt.exe=Lokasi_WinEdt.exe
-PDF_directory=Lokasi_PDF
-PDF_does_not_exist=PDF_tidak_ada
-Personal_journal_list=Daftar_jurnal_pribadi
-Plain_text_import=Impor_teks_normal
-Please_check_your_network_connection_to_this_machine.=Mohon_periksa_koneksi_jaringan_ke_mesin_ini.
-Please_enter_a_name_for_the_group.=Tuliskan_nama_untuk_grup.
-Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Tuliskan_kata_pencarian._Contoh,_untuk_mencari_di_semua_bidang_<b>Smith</b>,_tulis%c<p><tt>smith</tt><p>Untuk_mencari_pada_bidang_<b>Author</b>_untuk_<b>Smith</b>_dan_pada_bidang_<b>Title</b>_untuk_<b>electrical</b>,_tulis%c<p><t [...]
-Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Tulis_bidang_pencarian_(misal_<b>keywords</b>)_dan_katakunci_untuk_mencari_(misal_<b>electrical</b>).
-Please_enter_the_string's_label=Tuliskan_label_string
-Please_select_an_importer=Silahkan_pilih_pengimpor
-Please_select_an_importer.=Silahkan_pilih_pengimpor.
-Please_select_exactly_one_group_to_move.=Silahkan_pilih_satu_grup_yang_akan_dipindah.
-Please_specify_the_=Silahkan_nyatakan_
-Possible_duplicate_entries=Mungkin_entri_sama
-Possible_duplicate_of_existing_entry._Click_to_resolve.=Mungkin_entri_sama_dengan_lainnya._Klik_untuk_menyelesaikan.
-Preamble=Preambel
-Preferences=Preferensi
-Preferences_recorded.=Preferensi_disimpan.
-Preview=Pratampilan
-Previous_entry=Entri_sebelumnya
-Primary_sort_criterion=Kriteria_pertama
-Print_Preview=Cetak_Pratampilan
-Printing_Entry_Preview=Mencetak_pratampilan_entri
-Problem_with_parsing_entry=Permasalahan_dengan_penguraian_entri
-Processing_=Memroses_
-Program_output=Keluaran_program
-PS_directory=Direktori_PS
-Push_entries_to_external_application_(%0)=Kirim_entri_ke_aplikasi_eksternal_(%0)
-Push_selection_to_Emacs=Kirim_pilihan_ke_Emacs
-Push_selection_to_LyX/Kile=Kirim_pilihan_ke_LyX/Kile
-Push_selection_to_Vim=Kirim_pilihan_ke_Vim
-Push_selection_to_WinEdt=Kirim_pilihan_ke_WinEdt
-Push_to_LatexEditor=Kirim_pilihan_ke_LatexEditor
-Pushed_citations_to_%0=Kirim_acuan_ke_%0
-Pushed_citations_to_Emacs=Kirim_acuan_ke_Emacs
-Pushed_citations_to_Vim=Kirim_acuan_ke_Vim
-Pushed_citations_to_WinEdt=Kirim_acuan_ke_WinEdt
-Pushed_the_citations_for_the_following_rows_to=Kirim_acuan_dari_baris_berikut_ke
-Quit_JabRef=Keluar_JabRef
-Quit_synchronization=Keluar_sinkronisasi
-Raw_source=Sumber_asli
-Really_delete_the_selected=Ingin_menghapus_pilihan
-Rearrange_tabs_alphabetically_by_title=Mengatur_tab_judul_berdasarkan_alfabet
-Redo=Mengembalikan
-Reference_database=Basisdata_acuan
-References_found=Acuan_ditemukan
-Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Perbaiki_supergrup\:_Ketika_dipilih,_lihat_entri_yang_ada_di_grup_ini_dan_supergrup
-Refresh_view=Segarkan_tampilan
-Regular_Expression=Ekspresi_reguler
-Remember_these_entry_types?=Ingat_tipe_entri_ini?
-Remote_operation=Penggunaan_jarak_jauh
-Remote_server_port=Port_server_jauh
-Remove=Hapus
-Remove_all?=Hapus_semua?
-Remove_all_subgroups=Hapus_semua_sub-grup
-Remove_all_subgroups_of_"%0"?=Hapus_semua_sub-grup_dari_"%0"?
-Remove_double_braces_around_BibTeX_fields_when_loading.=Hapus_kurung_kurawal_ganda_pada_bidang_BibTeX_ketika_memuat
-Remove_duplicates=Hapus_yang_sama
-Remove_entry_from_import=Hapus_entri_dari_impor
-Remove_entry_selection_from_this_group=Hapus_entri_pilihan_dari_grup_ini
-Remove_entry_type=Hapus_tipe_entri
-Remove_file_link_(DELETE)=Hapus_tautan_berkas_(HAPUS)
-remove_from_group=hapus_dari_grup
-Remove_from_group=Hapus_dari_grup
-Remove_group=Hapus_grup
-Remove_group,_keep_subgroups=Hapus_grup,_sub-grup_tetap
-Remove_group_"%0"?=Hapus_grup_"%0"?
-Remove_group_"%0"_and_its_subgroups?=Hapus_grup_"%0"_dan_sub-grup_nya?
-remove_group_(keep_subgroups)=hapus_grup_(pertahankan_sub-grup)
-remove_group_and_subgroups=hapus_grup_dan_sub-grup
-Remove_group_and_subgroups=Hapus_grup_dan_sub-grup
-Remove_link=Hapus_tautan
-Remove_old_entry=Hapus_entri_lama
-Remove_selected_strings=Hapus_string_pilihan
-remove_string_=hapus_string_
-Removed_group_"%0".=Hapus_grup_"%0".
-Removed_group_"%0"_and_its_subgroups.=Hapus_grup_"%0"_dan_sub-grup_nya.
-Removed_string=Hapus_string
-Renamed_string=Ganti_nama_string
-Replace=Ganti
-Replace_(regular_expression)=Ganti_(ekspresi_reguler)
-Replace_string=Ganti_string
-Replace_with=Ganti_dengan
-Replaced=Diganti
-Required_fields=Bidang_diperlukan
-Reset_all=Atur_ulang_semua
-Reset_file_type_definitons=Atur_ulang_definisi_tipe_berkas
-Resolve_strings_for_all_fields_except=Selesaikan_masalah_string_untuk_semua_bidang_kecuali
-Resolve_strings_for_standard_BibTeX_fields_only=Selesaikan_masalah_string_hanya_pada_bidang_BibTeX_standar
-resolved=sudah_diselesaikan
-Results=Hasil
-Revert_to_original_source=Kembalikan_ke_sumber_asli
-Review=Periksa_ulang
-Review_changes=Periksa_ulang_perubahan
-Right=Kanan
-root=root
-Save=Simpan
-Save_all_finished.=Simpan_semua_selesai.
-Save_all_open_databases=Simpan_semua_basisdata_yang_dibuka
-Save_before_closing=Simpan_sebelum_menutup
-Save_database=Simpan_basisdata
-Save_database_as_...=Simpan_basisdata_sebagai...
-Save_entries_in_their_original_order=Simpan_entri_pada_urutan_aslinya
-Save_failed=Gagal_menyimpan
-Save_failed_during_backup_creation=Gagal_menyimpan_waktu_membuat_cadangan
-Save_failed_while_committing_changes=Gagal_menyimpan_waktu_memasukkan_perubahan
-Save_ordered_by_author/editor/year=Simpan_berdasar_urutan_penulis/penyunting/tahun
-Save_selected_as_...=Simpan_pilihan_sebagai...
-Saved_database=Basisdata_disimpan
-Saved_selected_to=Simpan_pilihan_ke
-Saved_session=Sesi_disimpan
-Saving=Menyimpan
-Saving_all_databases...=Menyimpan_semua_basisdata...
-Saving_database=Menyimpan_basisdata
-Scan=Pindai
-Search=Cari
-Search_All_Fields=Pencarian_Semua_Bidang
-Search_all_fields=Pencarian_semua_bidang
-Search_error=Kesalahan_pencarian
-Search_expression=Ekspresi_pencarian
-Search_for=Mencari
-Search_general_fields=Mencari_bidang_umum
-Search_IEEEXplore=Pencarian_IEEEXplore
-Search_IEEExplore=Pencarian_IEEEXplore
-Search_optional_fields=Pencarian_bidang_tambahan
-Search_required_fields=Pencarian_bidang_utama
-Search_Specified_Field(s)=Pencarian_Bidang_Tertentu
-Searched_database._Global_number_of_hits=Basisdata_dicari._Jumlah_hit_global
-Searched_database._Number_of_hits=Basisdata_dicari._Jumlah_hit
-Searching_for_%0_file=Mencari_berkas_%0
-Searching_for_duplicates...=pencarian_hal_yang_sama...
-Searching_for_files=Mencari_berkas
-Secondary_sort_criterion=Kriteria_kedua
-Select=Pilih
-Select_a_Zip-archive=Pilih_arsip_Zip
-Select_action=Pilih_aksi
-Select_all=Pilih_semua
-Select_Classpath_of_New_Importer=Pilih_Classpath_dari_Pengimpor_Baru
-Select_encoding=Pilih_enkoding
-Select_entries_in_group_selection=Pilih_entri_dalam_grup_pilihan
-Select_entry_type=Pilih_tipe_entri
-Select_external_application=Pilih_aplikasi_eksternal
-Select_file_from_ZIP-archive=Pilih_berkas_dari_arsip_ZIP
-Select_format=Pilih_format
-Select_icon=Pilih_ikon
-Select_matches=Pilih_matches
-Select_new_ImportFormat_Subclass=Pilih_ImportFormat_Subclass_baru
-Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Pilih_tiga_nodal_untuk_melihat,_menerima_atau_menolak_perubahan
-Selected_entries=Entri_pilihan
-Selector_enabled_fields=Pemilih_entri_aktif
-Server_Hostname_\:=Nama_Host_Server_\:
-Server_Type_\:=Tipe_Server_\:
-Set_field=Pilih_bidang
-Set_fields=Pilih_beberapa_bidang
-Set_general_fields=Pilih_bidang_umum
-Set_main_external_file_directory=Tetapkan_direktori_utama_berkas_eksternal
-Set_table_font=Tetapkan_huruf_tabel
-Settings=Pengaturan
-Setup_selectors=Pengaturan_pengisian_kata
-Short_form=Bentuk_singkat
-Shortcut=Pintasan
-Show/edit_BibTeX_source=Tampil/Sunting_sumber_BibTeX
-Show_'Firstname_Lastname'=Tampil_'Depan_Belakang'
-Show_'Lastname,_Firstname'=Tampil_'Belakang_Depan'
-Show_BibTeX_source_by_default=Tampilkan_sumber_BibTeX_sebagai_bawaan
-Show_BibTeX_source_panel=Tampilkan_panel_sumber_BibTeX
-Show_confirmation_dialog_when_deleting_entries=Tampilkan_dialog_konfirmasi_jika_menghapus_entri
-Show_description=Tampilkan_deskripsi
-Show_dynamic_groups_in_<i>italics</i>=Tampilkan_grup_dinamik_dengan_huruf_<i>miring</i>
-Show_entries_*not*_in_group_selection=Tampilkan_entri_*tidak*_dalam_pilihan_grup
-Show_file_column=Tampilkan_kolom_berkas
-Show_icons_for_groups=Tampilkan_ikon_untuk_grup
-Show_last_names_only=Tampil_hanya_nama_belakang
-Show_names_unchanged=Nama_apa_adanya
-Show_one_less_rows=Tampilkan_satu_baris_kurang
-Show_one_more_row=Tampilkan_satu_baris_lebih
-Show_optional_fields=Tampilkan_bidang_tambahan
-Show_PDF/PS_column=Tampilkan_kolom_PD/PS
-Show_required_fields=Tampilkan_bidang_utama
-Show_URL/DOI_column=Tampilkan_kolom_URL/DOI
-Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Tampilkan_dialog_peringatan_jika_menuliskan_kunci_BibTeX_yang_sudah_ada
-Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Tampilkan_dialog_peringatan_ketika_tidak_menulis_kunci_BibTeX
-Simple_HTML=HTML_sederhana
-Size=Ukuran
-Skip=Lompat
-Skipped_-_No_PDF_linked=Dilompati_-_Tanpa_tautan_PDF
-Skipped_-_PDF_does_not_exist=Dilompati_-_PDF_tidak_ada
-Skipped_entry.=Entri_dilompati.
-Sort_alphabetically=Urut_alfabet
-Sort_Automatically=Urut_otomatis
-Sort_order=Cara_urutan
-sort_subgroups=urut_sub-grup
-Sorted_all_subgroups_recursively.=Diurutkan_semua_sub-grup_secara_rekursif
-Sorted_immediate_subgroups.=Diurutkan_sub-grup_seketika.
-source_edit=sunting_sumber
-Special_Name_Formatters=Pemformat_Nama_Spesial
-Special_table_columns=Kolom_tabe_khusus
-SQL_connection_established.=Koneksi_SQL_diadakan.
-Start_incremental_search=Pencarian_bertahap_dimulai
-Start_search=Pencarian_dimulai
-Starting_import=Memulai_impor
-Statically_group_entries_by_manual_assignment=Entri_grup_statik_secara_penerapan_manual
-Status=Status
-Stop=Berhenti
-Store_journal_abbreviations=Simpan_singkatan_jurnal
-Store_string=Simpan_string
-Store_the_following_fields_with_braces_around_capital_letters=Simpan_bidang_berikut_dengan_kurawal_melingkupi_huruf_besar
-Stored_entry=Entri_yang_disimpan
-Strings=String
-Strings_for_database=String_untuk_basisdata
-Subdatabase_from_aux=Sub-basisdata_dari_aux
-Suggest=Saran
-Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Menukar_antara_nama_jurnal_penuh_dan_singkatan_jika_nama_jurnal_diketahui.
-Synchronize_%0_links=Sinkronkan_%0_tautan
-Synchronize_file_links=Sinkronkan_tautan_berkas
-Synchronizing_%0_links...=Sinkronisasi_%0_tautan...
-Table_appearance=Penampilan_tabel
-Table_background_color=Latar_tabel
-Table_grid_color=Jejaring
-Table_text_color=Teks
-Tabname=Nama_tab
-Target_file_cannot_be_a_directory.=Berkas_target_tidak_boleh_nama_folder
-Tertiary_sort_criterion=Kriteria_ketiga
-Test=Coba_lihat
-Text_Input_Area=Area_Masukan_Teks
-The_#_character_is_not_allowed_in_BibTeX_fields=Karakter_#_tidak_diijinkan_dalam_bidang_BibTeX
-The_chosen_date_format_for_new_entries_is_not_valid=Format_hari_yang_dipilih_untuk_entri_baru_tidak_sah
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Enkoding_yang_dipilih_'%0'_tidak_bisa_digunakan_untuk_karakter_berikut\:_
-The_CiteSeer_fetch_operation_returned_zero_results.=Operasi_pengambilan_CiteSeerX_tidak_membuahkan_hasil.
-The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=Versi_sekarang_mempunyaia_fitur_pengaturan_tautan_untuk_berkas_luar.<br>Untuk_memanfaatkan,_tautan_anda_harus_diubah_ke_format_baru,_dan<br>JabRef_di_konfigurasi_ulang_untuk_menampilkan_tautan.
-the_field_<b>%0</b>=bidang_<b>%0</b>
-The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Berkas<BR>'%0'<BR>telah_diubah<BR>oleh_program_eksternal!
-The_group_"%0"_already_contains_the_selection.=Grup_"%0"_sudah_mengandung_pilihan.
-The_label_of_the_string_can_not_be_a_number.=Label_untuk_string_tidak_boleh_berupa_angka.
-The_label_of_the_string_can_not_contain_spaces.=Label_untuk_string_tidak_boleh_ada_spasi.
-The_label_of_the_string_can_not_contain_the_'#'_character.=Label_string_tidak_boleh_mengandung_karakter_'#'.
-The_output_option_depends_on_a_valid_import_option.=Pilihan_keluaran_tergantung_dari_pilihan_impor_yang_sah.
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=PDF_mengandung_satu_atau_beberapa_data_bibtex.\nApakah_anda_ingin_impor_sebagai_entri_baru_pada_basisdata_sekarang?
-The_regular_expression_<b>%0</b>_is_invalid%c=Ekspresi_reguler_<b>%0</b>_tidak_sah%c
-The_search_is_case_insensitive.=Pencarian_tidak_meperhitungkan_huruf_besar_kecil.
-The_search_is_case_sensitive.=Pencarian_meperhitungkan_huruf_besar_kecil.
-The_string_has_been_removed_locally=String_sudah_dihapus_secara_lokal
-There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Ada_kemungkinan_sama_(ditandai_dengan_ikon_'D')_yang_belum_diselesaikan._Teruskan?
-this_button_will_update=Tombol_ini_akan_memperbarui
-This_database_was_written_using_an_older_version_of_JabRef.=Basisdata_ini_ditulis_dengan_JabRef_versi_lama.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Entri_ini_belum_mempunyai_kunci_BibTeX._Membuat_kunci_sekarang?
-This_entry_is_incomplete=Entri_belum_lengkap
-This_entry_type_cannot_be_removed.=Tipe_entri_tidak_bisa_dihapus.
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Tautan_eksternal_dari_tipe_'%0',_yang_belum_didefinisikan._Apa_yang_akan_anda_lakukan?
-This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Grup_ini_mempunyai_entri_berdasar_dari_pengisian_manual._Entri_dapat_dituliskan_dalam_grup_ini_dengan_cara_memilih_en [...]
-This_group_contains_entries_in_which=Grup_ini_memiliki_entri_dimana
-This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Grup_ini_memiliki_entri_dimana_setiap_bidang_mempunyai_ekspresi_reguler_<b>%0</b>
-This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Grup_ini_memiliki_entri_dimana_semua_bidang_mempunyai_istilah_<b>%0</>
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Grup_ini_memiliki_entri_dimana_bidang_<b>%0</b>_memiliki_katakunci_<b>%1</b>
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Grup_ini_memiliki_entri_dimana_bidang_<b>%0</b>_mempunyai_ekspresi_reguler_<b>%1</b>
-This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Ini_hanyalah_dialog_sederhana_salin_dan_tempelkan_untuk_impor_beberapa_beidang_dari_teks_normal.
-This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Ini_membuat_JabRef_mencari_disemua_tautan_%0_dan_memeriksa_apakah_ada_berkas._Jika_tidak,_anda_diberi_pilihan_<BR>untuk_mengatasi_masalah.
-This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Operasi_ini_memerlukan_semua_entri_mempunyai_kunci_BibTeX.
-This_operation_requires_at_least_one_entry.=Operasi_ini_memerlukan_paling_tidak_satu_entri.
-This_operation_requires_one_or_more_entries_to_be_selected.=Operasi_ini_memerlukan_satu_atau_lebih_entri_yang_dipilih.
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Ini_akan_memindah_semua_tautan_eksternal_dari_bidang_'pdf'_dan_'ps'_ke_bidang_'%0'._Diteruskan?
-To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Untuk_mengatur,_dari_<B>AlatBantuan_->_Pengaturan_singkatan_jurnal</B>
-Toggle_abbreviation=Gunakan_singkatan
-Toggle_entry_preview=Gunakan_pratampilan_entri
-Toggle_groups_interface=Gunakan_antarmuka_grup
-Toggle_search_panel=Gunakan_panel_pencarian
-Try_different_encoding=Coba_enkoding_lain
-Type_set_to_'other'=Ubah_tipe_ke_'lainnya'
-Unabbreviate_journal_names_of_the_selected_entries=Nama_jurnal_tidak_disingkat_dari_entri_pilihan
-Unabbreviated_%0_journal_names.=%0_nama_jurnal_tidak_disingkat.
-unable_to_access_LyX-pipe=tidak_bisa_berhubungan_dengan_pipa_LyX
-Unable_to_create_graphical_interface=Tidak_bisa_membuat_antarmuka_grafik
-Unable_to_open_file.=Tidak_bisa_membuka_berkas.
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Tidak_bisa_membuka_tautan._Aplikasi_'%0'_yang_berkaitan_dengan_berkas_tipe_'%0'_tidak_bisa_dimuat.
-Unable_to_read_default_icon_theme.=Tidak_bisa_membaca_tema_ikon_bawaan.
-Unable_to_read_icon_theme_file=Tidak_bisa_membaca_berkas_tema_ikon
-unable_to_write_to=tidak_bisa_menulis_ke
-Undefined_file_type=tipe_berkas_tidak_terdefinisi
-Undo=Batalkan
-Union=Menyatu
-Unknown_bibtex_entries=Entri_bibtex_tidak_dikenal
-unknown_edit=suntingan_tidak_dikenal
-unknown_entry_type=tipe_entri_tidak_dikenal
-Unknown_export_format=format_ekspor_tidak_dikenal
-Unmark_all=Hilangkan_tanda_semua
-Unmark_entries=Hilangkan_tanda_entri
-Unmark_entry=Hilangkan_tanda_entri
-Unmarked_selected=Hilangkan_tanda_pilihan
-Unpack_EndNote_filter_set=Membuka_tapisan_EndNote
-Unpacked_file.=Mengeluarkan_berkas.
-Unsupported_version_of_class_%0\:_%1=Versi_kelas_tidak_didukung_%0:_%1
-untitled=tanpa_judul
-Up=Naik
-Update_to_current_column_widths=Perbarui_sesuai_lebar_kolom_sekarang
-Updated_group_selection=Pilihan_grup_diperbarui
-Upgrade_external_links=Naiktaraf_tautan_eksternal
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Perbarui_tautan_eksternal_PDF/PS_untuk_digunakan_bidang_'%0'.
-Upgrade_file=Naiktaraf_berkas
-Upgrade_old_external_file_links_to_use_the_new_feature=Naiktaraf_tautan_berkas_eksternal_lama_untuk_digunakan_di_fitur_baru
-Upgraded_links.=Naiktaraf_tautan.
-UPPER=ATAS
-Upper_Each_First=Utamakan_setiap_atas
-Upper_first=Dahulukan_atas
-usage=penggunaan
-Use_antialiasing_font=Gunakan_huruf_antialiasing
-Use_autocompletion_for_the_following_fields=Gunakan_otomatis_melengkapi_pada_bidang_berikut
-Use_custom_icon_theme=Gunakan_tema_ikon_atursendiri
-Use_default_viewer=Gunakan_penampil_bawaan
-Use_inspection_window_also_when_a_single_entry_is_imported.=Gunakan_jendela_inspeksi_juga_untuk_entri_tunggal_impor
-Use_native_file_dialog=Gunakan_dialog_berkas_asli
-Use_other_look_and_feel=Gunakan_gaya_penampilan_lain
-Use_Regular_Expression_Search=Gunakan_ekspresi_pencarian_biasa
-Use_regular_expressions=Gunakan_ekspresi_reguler
-Use_the_following_delimiter_character(s)=Gunakan_karakter_pembatas_berikut
-Username_\:=Nama_pengguna_\:
-Value_cleared_externally=Isi_dihapus_dari_luar
-Value_set_externally=Isi_diatur_dari_luar
-verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=pastikan_LyX_sedang_dijalankan_dan_pipalyx_nya_benar
-View=Tampilkan
-Vim_Server_Name=Nama_Server_Vim
-Waiting_for_ArXiv...=Menunggu_ArXiv...
-Warn_about_unresolved_duplicates_when_closing_inspection_window=Peringatkan_jika_masih_ada_duplikasi_ketika_menutup_dialog
-Warn_before_overwriting_existing_keys=Peringatan_sebelum_menindih_kunci
-Warning=Peringatan
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Peringatan\:_tidak_bisa_menyelesaikan_perbaikan_berkas:_berkas_anda_mungkin_rusak._Pesan_kesalahan
-Warning_there_is_a_duplicate_key=Peringatan_ada_kunci_yang_sama
-Warnings=Peringatan
-web_link=tautan_web
-What_do_you_want_to_do?=Apa_yang_anda_inginkan?
-When_adding/removing_keywords,_separate_them_by=Ketika_menambah/menghapus_katakunci,_pisahkan_dengan_tanda
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Akan_menulis_metadata_XMP_ke_tautan_PDF_dari_entri_pilihan.
-with=dan
-Word=Word
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=Menulis_BibtexEntry_sebagai_XMP-metadata_ke_PDF.
-Write_XMP=Menulis_XMP
-Write_XMP-metadata=Menulis_XMP-metadata
-Write_XMP-metadata_for_all_PDFs_in_current_database?=Menulis_XMP-metadata_untuk_semua_PDF_di_basisdata_sekarang?
-Writing_XMP=Sedang_menulis_XMP
-Writing_XMP_metadata...=Sedang_menulis_XMP_metadata...
-Writing_XMP_metadata_for_selected_entries...=Sedang_menulis_XMP_metadata_untuk_entri_pilihan...
-Writing_XMP_to_'%0'...=Sedang_menulis_XMP_ke_'%0'...
-Wrong_file_format=Format_berkas_salah
-Wrote_XMP-metadata=XMP-metadata_ditulis
-Wrote_XMP_to_'%0'.=Selesai_ditulis_XMP_ke_'%0'.
-XMP-annotated_PDF=XMP-annotated_PDF
-XMP_Export_Privacy_Settings=Pengaturan_Info_Ekspor_XMP
-XMP_metadata=Metadata_XMP
-XMP_metadata_found_in_PDF\:_%0=XMP_metadata_ditemukan_di_PDF\:_%0
-You_must_restart_JabRef_for_this_to_come_into_effect.=Anda_harus_menjalankan_ulang_JabRef_agar_berfungsi.
-You_have_changed_the_language_setting.=Anda_telah_mengganti_pengaturan_bahasa.
-You_have_changed_the_look_and_feel_setting.=
-You_have_cleared_this_field._Original_value=Anda_sudah_membersihkan_bidang_ini._Isi_aslinya
-You_have_entered_an_invalid_search_'%0'.=Anda_telah_menulis_pencarian_yang_salah_'%0'.
-You_must_choose_a_file_name_to_store_journal_abbreviations=Anda_harus_memilih_nama_berkas_untuk_menyimpan_singkatan_jurnal
-You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Anda_harus_menjalankan_ulang_JabRef_agar_gabungan_kunci_dapat_berfungsi.
-You_must_set_both_BibTeX_key_and_%0_directory=Anda_harus_menentukan_kunci_BibTeX_dan_ditektori_%0
-Your_new_key_bindings_have_been_stored.=Gabungan_kunci_anda_sudah_disimpan.
-The_following_fetchers_are_available\:=Pengambil_berikut_tersedia\:
-Could_not_find_fetcher_'%0'=Tidak_bisa_menemukan_pengambil_'%0'
-Running_Query_'%0'_with_fetcher_'%1'.=Jalankan_Kueri_'%0'_dengan_pengambil_'%1'.
-Please_wait!=Mohon_tunggu!
-Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=Kueri_'%0'_dengan_pengambil_'%1'_tidak_ada_hasilnya.
-Open_SPIRES_entry=Buka_entri_SPIRES
-Move/Rename_file=Memindah/Menamai_berkas
-File_moved=Berkas_dipindah
-Move_file_failed=Gagal_memindah_berkas
-Could_not_move_file=Tidak_bisa_meindah_berkas
-Could_not_find_file_'%0'.=Tidak_bisa_menemukan_berkas_'%0'.
-Move/rename_file=Memindah/menamai_berkas
-Number_of_entries_successfully_imported=Jumlah_entri_yang_berhasil_diimpor
-Import_canceled_by_user=Impor_dibatalkan_oleh_pengguna
-Progress\:_%0_of_%1=Berlangsung:_%0_of_%1
-Error_while_fetching_from_JSTOR=Kesalahan_ketika_mengambil_dari_JSTOR
-Fetching_Medline_by_id...=mengambil_Medline_berdasar_id...
-Fetching_Medline_by_term...=Mengambil_Medline_berdasar_istilah...
-Medline_import_canceled=Impor_Medline_dibatalkan
-Please_enter_a_valid_number=Tuliskan_nomor_yang_benar
-Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Gunakan_pemisah_koma_dari_ID_Medline_(angka)_atau_cari_istilah.
-An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=Kesalahan_terjadi_ketika_mengambil_dari_sumber_SPIRES_
-Error_while_fetching_from_Spires\:_=Kesalahan_ketika_mengambil_dari_Spires\:_
-Connect_to_external_SQL_database=Menghubungi_basis_data_SQL_eksternal
-Export_to_external_SQL_database=Ekspor_ke_basisdata_SQL_eksternal
-Show_results_in_dialog=Tampilkan_hasil_di_dialog
-Global_search=Pencarian_global
-Show_search_results_in_a_window=Tampilkan_hasil_pencarian_di_jendela
-Search_results=Hasil_pencarian
-Move_file_to_file_directory?=Pindah_berkas_ke_direktori_berkas?
-Rename_to_'%0'=Ganti_nama_menjadi_'%0'
-Move_to_file_directory=Pindah_ke_direntori_berkas
-You_have_changed_the_menu_and_label_font_size.=
-Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Basisdata_dilindungi._Tidak_bisa_disimpan_sebelum_perubahan_eksternal_diperiksa.
-Protected_database=Basisdata_terlindungi
-Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Menolak_menyimpan_basisdata_sebelum_perubahan_eksternal_diperiksa.
-Database_protection=Perlindungan_basisdata
-Unable_to_save_database=Tidak_bisa_menyimpan_basisdata
-BibTeX_key_generator=Pembuat_kunci_BibTeX
-Unable_to_open_link.=Tidak_bisa_membuka_tautan.
-Search_JSTOR=Pencarian_JSTOR
-Attempting_SQL_import...=Mencoba_impor_SQL...
-BibO_RDF=BibO_RDF
-HTML_parser=Pengurai_HTML
-Move_the_keyboard_focus_to_the_entry_table=Pindah_fokus_papanketik_ke_tabel_entri
-MIME_type=Tipe_MIME
-This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Fitur_ini_memungkinkan_berkas_baru_atau_impor_ke_jendela_JabRef_yang_aktif<br>bukan_membuat_baru._Hal_ini_berguna_ketika_anda_membuka_berkas_di_JabRef<br>dari_halaman_web.<br>Hal_ini_ [...]
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Pengaturan_ini_hanya_mengatur_bidang_legasi_<b>pdf</b>_dan_<b>ps</b>_saja._<br>Pengguna_biasanya_cukup_mengatur_<b>Lokasi_berkas_utama</b>_diatas.
-Legacy_file_fields=Bidang_berkas_legasi
-This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Ini_membuat_JabRef_mencari_disemua_ekstensi_%0_dan_memeriksa_apakah_ada_berkas._Jika_tidak,_anda_diberi_pilihan_<BR>untuk_mengatasi_masalah.
-Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Jalankan_Pengambil,_misal._"--fetch=Medline\:cancer"
-The_ACM_Digital_Library=Pustaka_ACM_Dijital
-Reset=Atur_ulang
-Use_IEEE_LaTeX_abbreviations=Gunakan_singkatan_IEEE_LaTeX
-The_Guide_to_Computing_Literature=Panduan_untuk_Computing_Literature
-Search_ACM_Portal=Pencarian_Portal_ACM
-Connection_to_ACM_Portal_failed=Koneksi_ke_Portal_ACM_gagal
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=Ketika_membuka_tautan_berkas,_cari_berkas_yang_sesuai
-Settings_for_%0=Pengaturan_untuk
-Insert_selected_citations_into_Vim=Sisipkan_acuan_pilihan_ke_Vim
-RIS=RIS
-Assign_exclusively_to_group=Diterapkan_hanya_pada_grup
-Bad_Request_'%0'.=Permintaan_salah_'%0'.
-Mark_entries_imported_into_an_existing_database=Tandai_entri_impor_di_basisdata_yang_sudah_ada
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Hilangkan_tanda_semua_entri_sebelum_mengimpor_entri_baru_ke_basisdata
-Forward=Maju
-Back=Kembali
-Sort_the_following_fields_as_numeric_fields=Urutkan_bidang_berikut_sepeerti_angka
-Line_%0\:_Found_corrupted_BibTeX-key.=Baris_%0\:_Ditemukan_kunci_BibTeX_ada_kesalahan.
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Baris_%0\:_Ditemukan_kunci_BibTeX_ada_kesalahan_(mengandung_spasi_kosong).
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Baris_%0\:_Ditemukan_kunci_BibTeX_ada_kesalahan_(tidak_ada_koma).
-Finished_downloading_full_text_document=Selesai_muaturun_dokumen_teks_lengkap
-Unable_to_find_full_text_document_in_the_linked_web_page.=Tidak_bisa_menemukan_dokumen_teks_lengkap_di_tautan_halaman_web.
-Connection_error_when_trying_to_find_full_text_document.=Kesalahan_koneksi_ketika_mencari_dokumen_teks_penuh.
-This_entry_provides_no_URL_or_DOI_links.=Entri_belum_mempunyai_tautan_URL_atau_DOI.
-Full_text_article_download_failed=Gagal_muaturun_artikel_teks_lengkap
-Update_to_current_column_order=Perbarui_sebuai_urutan_kolom_sekarang
-Rename_field=Ganti_nama_bidang
-Set/clear/rename_fields=Pilih/hapus/namai_ulang_bidang
-Rename_field_to\:=Ganti_nama_bidang_menjadi\:
-Move_contents_of_a_field_into_a_field_with_a_different_name=Pindah_isi_dari_bidang_ke_bidang_lain_dengan_nama_lain
-You_can_only_rename_one_field_at_a_time=Anda_bisa_mengganti_nama_satu_bidang_dalam_satu_waktu
-Remove_all_broken_links=Hapus_semua_tautan_rusak?
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Tidak_bisa_memakai_port_%0_untuk_operasi_jauh;_aplikasi_lain_mungkin_sedang_menggunakan._Coba_port_lain.
-Plugin_installer=Pemasang_plugin
-Unable_to_create_plugin_directory=TIdak_bisa_membuat_direktori_plugin
-Unable_to_copy_file=TIdak_bisa_menyalin_berkas
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Plugin_berhasil_dipasang._Anda_harus_menjalankan_ulang_JabRef_untuk_memuat_plugin_baru.
-Unable_to_create_user_plugin_directory=Tidak_bisa_membuat_direktori_plugin_pengguna
-Plugin_installation_failed.=Pemasangan_plugin_gagal.
-The_same_version_of_this_plugin_is_already_installed.=Versi_yang_sama_dari_plugin_sudah_dipasang.
-A_newer_version_of_this_plugin_is_already_installed.=Versi_terbaru_dari_plugin_ini_sudah_dipasang.
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Satu_atau_lebih_versi_lama_dari_plugin_ini_dipasang._Hapus_versi_lama?
-Old_versions_deleted_successfully.=Versi_lama_berhasil_dihapus.
-Install_plugin=Pasang_Plugin
-Download_plugin=Muaturun_plugin
-Plugin_manager=Pengelola_plugin
-Delete_the_%0_selected_plugins?=Menghapus_%0_plugin_pilihan?
-Delete_plugins=Hapus_plugin
-Delete_the_selected_plugin?=Hapus_plugin_pilihan?
-Delete_plugin=Hapus_plugin
-Enter_download_URL=Tulis_URL_muaturun
-Plugin_name=Nama_plugin
-Version=Versi
-Unknown=Tidak_dikenal
-Not_loaded=Tidak_dimuat
-Loaded=Dimuat
-Could_not_determine_version_of_=Tidak_bisa_menentukan_versi_dari_
-Install_anyway?=Tetap_pasang?
-Looking_for_full_text_document...=Sedang_mencari_dokumen_teks_lengkap...
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Ikuti_tautan_DOI_atau_URL_dan_temukan_dokumen_PDF_lengkap
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Tidak_bisa_menemukan_artikel_teks_lengkap._Tidak_ada_algoritma_pencarian_didefinisakn_untuk_situs_'%0'.
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Menemukan_tautan_pdf,_tetapi_menerima_tipe_MIME_yang_salah._Menunjukkan_bahwa_anda_tidak_mempunyai_akses_artikel_teks_lengkap.
-Autosave=Simpan_otomatis
-Prompt_before_recovering_a_database_from_an_autosave_file=Ingatkan_ketika_ambil_ulang_basisdata_dari_berkas_simpanan_otomatis
-Autosave_interval_(minutes)=Interval_waktu_menyimpan_otomatis_(menit)
-Do_you_want_to_recover_the_database_from_the_autosave_file?=Apakah_anda_ingin_mengembalikan_basisdata_dari_berkas_simpan_otomatis?
-Recover_from_autosave=Mengambil_uland_dari_simpan_otomatis
-%0_warnings=%0_peringatan
-Save_in_current_table_sort_order=Simpan_menurut_tabel_urutan_sekarang
-Export_in_current_table_sort_order=Ekspor_menurut_tabel_urutan_sekarang
-Export_ordered_by_author/editor/year=Ekspor_dengan_urutan_penulis/penyunting/tahun
-Export_entries_in_their_original_order=Ekspor_entri_dengan_urutan_aslinya
-Error_opening_file_'%0'.=Kesalahan_ketika_membuka_berkas_'%0'.
-Autosave_of_file_'%0'=Menyimpan_otomatis_berkas_'%0'
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Kesalahan_ketika_membuka_simpanan_otomatis_'%0'._Gantinya_memuat_'%0'.
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugin_dipasang_di_direktori_pengguna_plugin_(%0)\:
-Plugins_installed_in_other_locations\:=Plugin_dipasang_di_lokasi_lain\:
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=Plugin_akan_dihapus_saat_JabRef_dijalankan_ulang.
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=Plugin_akan_dihapus_saat_JabRef_dijalankan_ulang.
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Versi_plugin_lama_akan_dihapus_ketika_JabRef_dijalankan_ulang.
-Formatter_not_found\:_%0=Pemformat_tidak_ditemukan\:_%0
-The_following_formatters_could_not_be_found=Pemformat_berikut_tidak_bisa_ditemukan
-Clear_inputarea=Bersihkan_area_masukan
-Automatically_set_file_links_for_this_entry=Otomatis_membuat_tautan_berkas_untuk_entri_ini
-Could_not_save,_file_locked_by_another_JabRef_instance.=Tidak_bisa_menyimpan,_berkas_dikunci_oleh_Jabref_yang_jalan.
-File_is_locked_by_another_JabRef_instance.=Berkas_dikunci_oleh_JabRef_lain.
-Do_you_want_to_override_the_file_lock?=Apakah_anda_ingin_menindih_kunci_berkas?
-File_locked=Berkas_dikunci
-Current_tmp_value=Angka_tmp_sekarang
-Metadata_change=Perubahan_Metadata
-Changes_have_been_made_to_the_following_metadata_elements=Perubahan_telah_dilakukan_pada_elemen_metadata_berikut
-Generate_groups_for_author_last_names=Membuat_grup_untuk_nama_belakang_penulis
-Generate_groups_for_editor_last_names=Membuat_grup_untuk_nama_belakang_penyunting
-Generate_groups_from_keywords_in_a_BibTeX_field=Membuat_grup_dari_katakunci_di_bidang_BibTeX
-Enforce_legal_characters_in_BibTeX_keys=Menggunakan_karakter_legal_untuk_kunci_BibTeX
-The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Karakter_#_tidak_diijinkan_dalam_string_BibTeX_kecuali_escape_seperti_dalam_'\\#'.
-Before_saving,_please_edit_any_strings_containing_the_#_character.=Sebelum_menyimpan,_mohon_ubah_string_yang_mengandung_karakter_#.
-Save_without_backup?=Simpan_tanpa_cadangan?
-Unable_to_create_backup=Tidak_bisa_membuat_cadangan
-File_directory_is_not_set_or_does_not_exist.=Lokasi_berkas_belum_ditentukan_atau_tidak_ada.
-Move_file_to_file_directory.=Pindah_berkas_ke_direktori_berkas.
-Rename_file_to=Ganti_nama_berkas_menjadi
-<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Semua_Entri</b>_(grup_ini_tidak_bisa_diubah_atau_dihapus)
-static_group=grup_statik
-dynamic_group=grup_dinamik
-refines_supergroup=memperbaiki_supergrup
-includes_subgroups=termasuk_subgrup
-contains=kandungan
-search_expression=ekspresi_pencarian
-Disable_file_renaming_in_non-native_file_dialog=Penamaan_ulang_berkas_tidak_aktif_pada_dialog_berkas_bukan_asli
-File_dialog=Dialog_berkas
-No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Entri_tidak_ditemukan._Tampaknya_anda_tidak_mempunyai_akses_pencarian_JStor.
-Search_ScienceDirect=Pencarian_ScienceDirect
-Error_while_fetching_from_ScienceDirect=Kesalahan_ketika_mengambil_dari_ScienceDirect
-Error_initializing_custom_export_format_from_string_'%0'=Ada_kesalahan_menentukan_format_ekspor_atursendiri_dari_string_'%0'
-BibLaTeX_mode=Mode_BibLaTeX
-Optional_fields_2=Bidang_tambahan_2
-Please_wait=Mohon_tunggu
-Waiting_for_save_operation_to_finish=Menunggu_proses_menyimpan_selesai
-Resolving_duplicate_BibTeX_keys...=Mengatasi_masalah_kunci_BibTeX_sama...
-Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Selesai_mengatasi_masalah_kunci_BibTeX_sama._%0_entri_diubah.
-This_database_contains_one_or_more_duplicated_BibTeX_keys.=Basisdata_ini_mempunyai_satu_atau_lebih_kunci_BibTeX_yang_sama.
-Do_you_want_to_resolve_duplicate_keys_now?=Apakah_anda_ingin_menyelesaikan_masalah_kunci_sama_sekarang?
-Find_and_remove_duplicate_BibTeX_keys=Temukan_dan_hapus_kunci_BibTeX_yang_sama
-Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Sintaks_yang_diharapkan_untuk_--fetch='<name_of_fetcher>:<query>'
-Duplicate_BibTeX_key=kunci_BibTeX_sama
-Duplicate_key=Kunci_sama
-Generate_key=Membuat_kunci
-Import_marking_color=Tanda_impor
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_entri_ditemukan._Untuk_mengurangi_beban,_hanya_%1_akan_dimuaturun._Akan_lambat,_agar_ACM_gembira.
-BibTeX_importer=Penimpor_BibTeX
-Always_add_letter_(a,_b,_...)_to_generated_keys=Selalu_tambah_huruf_(a,_b,_...)_untuk_kunci
-Ensure_unique_keys_using_letters_(a,_b,_...)=Pastikan_kunci_unik_dengan_huruf_(a,_b,_...)
-Ensure_unique_keys_using_letters_(b,_c,_...)=Pastikan_kunci_unik_dengan_huruf_(b,c,_...)
-Entry_editor_active_background_color=Latar_penyunting_entri_aktif
-Entry_editor_background_color=Latar_penyunting_entri
-Entry_editor_font_color=Huruf_penyunting_entri
-Entry_editor_invalid_field_color=Entri_bidang_tidak_valid
-Table_and_entry_editor_colors=Warna_tabel_dan_penyunting_entri
-An_autosave_file_was_found_for_this_database._This_could_indicate_=Berkas_hasil_simpan_otomatis_ditemukan_dalam_basisdata_ini._Hal_ini_dapat_berindikasi_
-that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=bahwa_JabRef_tidak_ditutup_dengan_benar_waktu_menggunakan_berkas.
-General_file_directory=Direktori_berkas_umum
-User-specific_file_directory=Direktori_berkas_khusus_pengguna
-Error_setting_look_and_feel=Kesalahan_pengaturan_penampilan
-Search_failed\:_illegal_search_expression=Pencarian_gagal\:_ekspresi_pencarian_tidak_benar
-Show_ArXiv_column=Tampilkan_kolom_ArXiv
-<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Menguraikan_berkas_zip_yang_mengandung_tapisan_impor/ekspor_untukEndnote,<BR>agar_dapat_optimal_digunakan_dengan_JabRef</HTML>
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Warnakan_grup_yang_mengandung_entri_pada_grup_yang_dipilih
-
-You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=Anda_harus_memasukkan_angka_bulat_antara_1025-65535_di_bidang_teks
-Automatically_open_browse_dialog_when_creating_new_file_link=Otomatis_membuka_dialog_jelajah_ketika_membuat_tautan_berkas_baru
-
-Import_Metadata_from\:=Impor_Metadata_dari\:
-Choose_the_source_for_the_metadata_import=Pilih_sumber_untuk_impor_metadata
-Create_entry_based_on_XMP_data=Membuat_entri_berasal_data_XMP
-Create_entry_based_on_data_fetched_from=Membuat_entri_berasal_dari_data_terurai
-Create_blank_entry_linking_the_PDF=Membuat_entri_kosong_tautan_PDF
-Only_attach_PDF=Hanya_lampirkan_PDF
-Mr._dLib_Metadata_Entries_Associated_With\:=Mr._dLib_Entri_Metadata_Berhubungan_dengan\:
-Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr._dLib_Entri_Metadata_Berhubungan_Dengan_Berkas_PDF
-Title=Judul
-Author(s)=Penulis
-Published_Year=Tahun_Publikasi
-No_metadata_found.=Tidak_ditemukan_metadata.
-Mr._dLib_web_service_is_temporarily_unavailable.=Layanan_web_Mr._dLib_sementara_tidak_tersedia.
-Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Layanan_web_Mr._dLib_sementara_tidak_ada._Coba_lagi_di_lain_waktu.
-You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Anda_tidak_terbubung_ke_Internet._Akses_layanan_web_Mr._dLib_memerlukan_sambungan_internet.
-No_Internet_Connection.=Konesksi_Internet_Tidak_Ada.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Vesi_JabRef_ini_sedang_mencoba_mengakses_layanan_web_Mr._dLib_versi_lama_yang_sudah_tidak_jalan.\nSilahkan_kunjungi_http\://jabref.sourceforge.net_atau_http\://www.mr-dlib.org_untuk_informasi_lanjut_dan_pembaruan.
-Web_Service_Version_Outdated=Versi_Layanan_Web_Kedaluarsa
-The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Versi_layanan_web_Mr.dLib_yang_anda_akses_sudah_kedaluarsa.
-Update_empty_fields_with_data_fetched_from=Perbarui_bidang_kosong_dengan_data_dari_yang_diurai
-Create_New_Entry=membuat_Entri_Baru
-Update_Existing_Entry=Perbarui_Entri_Yang_Sudah_Ada
-Mr._dLib=Mr._dLib
-More_information=Informasi_lain
-Fetching_Metadata...=Proses_Menguraikan_Metadata..
-Metadata=Metadata
-Autocomplete_names_in_'Firstname_Lastname'_format_only=Nama_isian_otomatis_hanya_untuk_format_'Namadepan_Namaakhir'
-Autocomplete_names_in_'Lastname,_Firstname'_format_only=Nama_isian_otomatis_hanya_untuk_format_'Namaakhir,_Namadepan'
-Autocomplete_names_in_both_formats=Nama_isian_otomatis_untuk_kedua_format
-Marking_color_%0=Tanda_warna_%0
-The_name_'comment'_can_not_be_used_as_an_entry_type_name.=Nama_'kometar'_tidak_dapat_digunakan_sebagai_tipe_nama_entri.
-You_must_enter_an_integer_value_in_the_text_field_for=Anda_harus_menggunakan_bilangan_bulat_di_bidang_teks_untuk
-File_directory=Direktori_berkas
-Send_as_email=Kirim_sebagai_email
-References=Referensi
-Sending_of_emails=Sedang_Mengirim_email
-Subject_for_sending_an_email_with_references=Subyek_untuk_mengirim_email_dengan_referensi
-Automatically_open_folders_of_attached_files=Otomatis_membuka_direktori_lampiran_berkas
-Create_entry_based_on_content=Membuat_entri_dari_isi_kandungan
-Store_choice_as_default=Simpan_pilihan_sebagai_bawaan
-Do_not_show_this_box_again_for_this_import=Tidak_menampilkan_kotak_ini_lagi_saat_impor
-Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Selalu_menggunakan_Impor_PDF_(tidak_menanyakan_lagi_ketika_impor)
-Error_creating_email=Gagal_menulis_email
-Could_not_open_directory=Tidak_bisa_membuka_direktori
-Entries_added_to_an_email=Entri_ditambahkan_di_emel
-exportFormat=FormatEkspor
-Output_file_missing=Berkas_keluaran_hilang
-No_search_matches.=Carian_tidak_ditemukan.
-The_output_option_depends_on_a_valid_input_option.=Pilihan_keluaran_tergantung_dari_pilihan_masukan_yang_tepat.
-Default_import_style_for_drag&drop_of_PDFs=Gaya_impor_bawaan_PDF_untuk_seret_dan_masuk
-Default_PDF_file_link_action=Aksi_tautan_PDF_bawaan
-File_name_format_pattern=Pola_format_nama_berkas
-PostgreSQL_database=Basisdata_PostgreSQL
-DIN_1505=DIN_1505
-Wrong_Format=Format_Salah
-Path_to_gnuclient_or_emacsclient=Lokasi_gnuclient_atau_emacsclient
-Additional_parameters=Parameter_tambahan
-Encrypted_documents_are_not_supported=Dokumen_terenkripsi_tidak_didukung
-Cite_selected_entries=Entri_acuan_pilihan
-Cite_selected_entries_with_in-text_citation=Entri_acuan_pilihan_dengan_acuan_dalam_teks
-Cite_special=Acuan_spesial
-Extra_information_(e.g._page_number)=Informasi_ekstra_(misal,_nomor_halaman)
-Manage_citations=Pengelolaan_acuan
-Problem_modifying_citation=Perubahan_acuan_bermasalah
-Citation=Acuan
-Context=Konteks
-Extra_information=Informasi_ekstra
-Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=Tidak_bisa_memperbaiki_entri_BibTeX_untuk_penanda_acuan_'%0'.
-Styles=Gaya
-Select_style=Pilih_gaya
-This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Ini_adalah_daftar_gaya_yang_tersedia._Pilih_salah_satu_yang_akan_dipakai.
-Journals=Jurnal
-Cite=Acuan
-Cite_in-text=Acuan_dalam_teks
-Insert_empty_citation=Sisipkan_acuan_kosong
-Merge_citations=Gabung_acuan
-Manual_connect=Penautan_manual
-Select_Writer_document=Pilih_penyunting_dokumen
-Sync_OO_bibliography=Sinkr_bibliografi_OO
-OpenOffice=OpenOffice
-Select_which_open_Writer_document_to_work_on=Pilih_penyunting_open_Writer_yang_digunakan
-Connected_to_document=Ditautkan_ke_dokumen
-Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Sisipkan_acuan_tanpa_teks_(entri_akan_muncul_dalam_daftar_acuan)
-Cite_selected_entries_with_extra_information=Acu_entri_pilihan_dengan_informasi_ekstra
-Ensure_that_the_bibliography_is_up-to-date=Pastikan_bahwa_bibliografi_adalah_yang_mutakhir
-Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=Acuan_dokumen_OpenOffice_dengan_kunci_BibTeX_'%0',_yang_tidak_ditemukan_dalam_basisdata_sekarang.
-Unable_to_synchronize_bibliography=Tidak_bisa_mensinkronkan_bibliografi
-Combine_pairs_of_citations_that_are_separated_by_spaces_only=Menggabungkan_pasangan_acuan_yang_dipisahkan_hanya_dengan_spasi
-Autodetection_failed=Deteksi_otomatis_gagal
-Connecting=Sedang_menyambungkan
-Please_wait...=Mohon_tunggu...
-Unable_to_connect=Tidak_bisa_tersambung
-Set_connection_parameters=Atur_parameter_sambungan
-Path_to_OpenOffice_directory=Lokasi_direktori_OpenOffice
-Path_to_OpenOffice_executable=Lokasi_program_OpenOffice
-Path_to_OpenOffice_library_dir=Lokasi_pustaka_OpenOffice
-Autodetect=DeteksiOtomatis
-Connection_lost=Sambungan_terlepas
-The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Format_paragraf_diatur_melalui_'FormatAcuanParagraf'_atau_'KepalaAcuan'
-The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Format_karakter_iatur_melalui_pengaturan_acauan_'FormatKarakterAcuan'_dalam_berkas_gaya.
-Automatically_sync_bibliography_when_inserting_citations=Otomatis_sinkr_bibliografi_ketika_menyisipkan_acuan
-Look_up_BibTeX_entries_in_the_active_tab_only=Mencari_entri_BibTeX_hanya_di_basisdata_yang_aktif
-Look_up_BibTeX_entries_in_all_open_databases=Mencari_entri_BibTeX_di_semua_basisdata_yang_dibuka
-Use_in-parenthesis_citation=Menggunakan_acauan_dalam_tanda_petik
-Use_in-text_citation=Menggunakan_acuan_dalam_teks
-Autodetecting_paths...=Deteksi_otomatis_lokasi...
-Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=Tidak_bisa_mengenal_instalasis_OpenOffice._Mohon_tuliskan_direktori_instalasi_secara_manual.
-Could_not_find_OpenOffice_installation=Tidak_bisa_menemukan_instalasi_OpenOffice
-Directories=Daftar_Direktori
-Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Menemukan_lebih_dari_satu_program_OpenOffice._Pilih_salah_satu_yang_akan_disambung
-Choose_OpenOffice_executable=Pilih_program_OpenOffice
-Select_document=Pilih_dokumen
-Edit_Group_Membership=Sunting_Aggota_Grup
-PostgreSQL=PostgreSQL
-Highlight_Words=Tandai_Kata
-JSTOR_import_cancelled=Impor_JSTOR_dibatalkan
-HTML_list=Daftar_HTML
-Click_group_to_toggle_membership_of_selected_entries=Klik_grup_untuk_masuk_ke_anggota_dari_entri_pilihan
-Use_EMACS_23_insertion_string=Gunakan_EMACS_23_sisipan_karakter
-Normalize_to_BibTeX_name_format=Menyesuaikan_ke_nama_format_BibTeX
-If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=Jika_memungkinkan,_sesuaikan_daftar_nama_untuk_mengikuti_format_penamaan_BibTeX
-Could_not_open_%0=Tidak_bisa_membuka_%0
-Unknown_import_format=Format_impor_tidak_dikenal
-Open_INSPIRE_entry=Buka_entri_INSPIRE
-An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=Terjadi_kesalahan_ketika_mengambik_sumber_INSPIRE_(%0)\:
-Error_while_fetching_from_Inspire\:_=Terjadi_kesalahan_ketika_mengambil_dari_Inspire\:_
-Web_search=Pencarian_Web
-Autocomplete_names=Pengisian_otomatis_nama
-You_must_select_either_a_valid_style_file,_or_use_the_default_style.=Anda_harus_memilih_gaya_berkas_yang_sah,_atau_gunakan_gaya_bawaan.
-
-Default_style=Gaya_bawaan
-Choose_style_file_directly=Pilih_gaya_berkas_secara_langsung
-Choose_from_a_directory=Pilih_dari_satu_direktori
-No_directory_defined_for_%0-files=Direktori_tidak_dinyatakan_untuk_berkas_%0
-Allow_file_links_relative_to_each_bib_file's_location=Membolehkan_lokasi_tautan_berkas_relatif_untuk_tiap-tiap_berkas_bib
-Style_selection=Pilihan_gaya
-The_panel_below_shows_the_definition_of_the_default_style.=Panel_dibawah_menampilkan_definisi_dari_gaya_bawaan
-If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=Jika_anda_menginginkan_sebagai_templet_untuk_gaya_baru,_anda_bisa_menyalin_isi_ke_berkas_baru_.jstyle
-
-Default_style_(author-year_citations)=
-Default_style_(numerical_citations)=
-No_valid_style_file_defined=
-Choose_pattern=
-Use_the_bib_file_location_as_primary_file_directory=
-Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=
-Built-in_journal_list=
-OpenOffice/LibreOffice_connection=
-You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=
-JabRef_includes_a_built-in_list_of_journal_abbreviations.=
-You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=
-You_must_select_either_a_valid_style_file,_or_use_a_default_style.=
-
-Show=
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=
-Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=
-
-This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=
-You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=
-First_select_entries_to_clean_up.=
-Cleanup_entry=
-Autogenerate_PDF_Names=
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=
-File_rename_failed_for=
-You_have_toggled_the_BibLaTeX_mode.=
-Use_full_firstname_whenever_possible=
-Use_abbreviated_firstname_whenever_possible=
-Use_abbreviated_and_full_firstname=
-Autocompletion_options=
-Autocomplete_after_following_number_of_characters=
-Name_format_used_for_autocompletion=
-Treatment_of_first_names=
-No_icon_found_for_%0=
-Cleanup_entries=
-Automatically_assign_new_entry_to_selected_groups=
-Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
-Format_content_of_month_field_to_#mon#=
-Ensure_that_page_ranges_are_of_the_form_num1--num2=
-Make_paths_of_linked_files_relative_(if_possible)=
-Rename_PDFs_to_given_file_name_format_pattern=
-Rename_only_PDFs_having_a_relative_path=
-What_would_you_like_to_clean_up?=
-Doing_a_cleanup_for_%0_entries...=
-No_entry_needed_a_clean_up=
-One_entry_needed_a_clean_up=
-%0_entries_needed_a_clean_up=
-Imported_=
-Error_importing_from_database=
-Minimize_to_system_tray=
-
-Incomplete_search_results=
-%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=
-
-Error_downloading_file_'%0'=
-Download_failed=
-
-%0_databases_will_be_imported=
-Importing_cancelled=
-There_are_no_available_databases_to_be_imported=
-Import_from_SQL_database=
-Imported_%0_databases_successfully=
-<_CREATE_NEW_DATABASE_>=
-Remove_Selected=
-SQL_Database_Exporter=
-Select_target_SQL_database\:=
-SQL_Database_Importer=
-Please_select_which_JabRef_databases_do_you_want_to_import\:=
-
-Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
-Attach_file=
-
-Setting_all_preferences_to_default_values.=
-Resetting_preference_key_'%0'=
-Unknown_preference_key_'%0'=
-Unable_to_clear_preferences.=
-
-Reset_preferences_(key1,key2,..._or_'all')=
-Find_unlinked_files=
-Select_All=
-Unselect_All=
-Expand_All=
-Collapse_All=
-Select_Directory=
-Choose_Directory=
-Use_the_selected_directory_to_start_with_the_search.=
-Browse...=
-Opens_the_file_browser.=
-Scan_directory=
-Searches_the_selected_directory_for_unlinked_files.=
-Starts_the_import_of_bibtex_entries.=
-Leave_this_dialog.=
-Create_directory_based_keywords=
-Creates_keywords_in_created_entrys_with_directory_pathnames=
-Select_a_directory_where_the_search_shall_start.=
-Select_file_type\:=
-These_files_are_not_linked_in_the_active_database.=
-Entry_type_to_be_created\:=
-Searching_file_system...=
-Importing_into_Database...=
-Select_directory=
-Select_files=
-Bibtex_entry_creation=
-<No_selection>=
-Push_selection_to_TeXstudio=
-Path_to_TeXstudio=
-Program_'%0'_not_found=
-Pushed_citations_to_TeXstudio=
-Unable_to_connect_to_freecite_online_service.=
-Parse_with_FreeCite=
-Insert_selected_citations_into_TeXstudio=
-The_current_BibTeX_key_will_be_overwritten._Continue?=
-Overwrite_key=
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
-Bibtex_key_patterns=
-Changed_special_field_settings=
-Clear_priority=
-Clear_rank=
-Compact_rank=
-Convert_1st,_2nd,_..._to_real_superscripts=
-Dropped_comment_from_database=
-Enable_PDF_preview=
-Enable_special_fields=
-Five_stars=
-Four_stars=
-Help_on_special_fields=
-Keywords_of_selected_entries=
-Manage_content_selectors=
-Manage_keywords=
-Marked_entries'_quality_as_good=
-Marked_entries_as_relevant=
-No_priority_information=
-No_rank_information=
-One_star=
-Priority=
-Priority_high=
-Priority_low=
-Priority_medium=
-Quality=
-Rank=
-Relevance=
-Set_priority=
-Set_priority_to_high=
-Set_priority_to_low=
-Set_priority_to_medium=
-Set_rank_to_five_stars=
-Set_rank_to_four_stars=
-Set_rank_to_one_star=
-Set_rank_to_three_stars=
-Set_rank_to_two_stars=
-Show_one_letter_heading_for_icon_columns=
-Show_priority=
-Show_quality=
-Show_rank=
-Show_relevance=
-Synchronize_with_keywords=
-Synchronized_special_fields_based_on_keywords=
-Three_stars=
-Toggle_relevance=
-Toogle_quality_assured=
-Two_stars=
-Update_keywords=
-Write_values_of_special_fields_as_separate_fields_to_BibTeX=
-You_have_changed_settings_for_special_fields.=
-no_preview_available=
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
-A_string_with_that_label_already_exists=
-Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
-Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
-Created_group_"%0".=
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
-If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
-Import_Metadata_From_PDF=
-Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
-Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
-Removed_all_subgroups_of_group_"%0".=
-To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
-Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
-Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
-Use_the_following_delimiter_character(s)\:=
-When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
-Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-
-Error_fetching_from_Google_Scholar=
-Run_HTML_converter_on_title=
-Searching...=
-You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
-Confirm_selection=
-Unknown_DOI\:_'%0'.=
-Get_BibTeX_entry_from_DOI=
-Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
-Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
-Import_conversions=
-Run_filter_on_title_keeping_the_case_of_selected_words=
-Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
-Please_enter_a_search_string=
-Please_open_or_start_a_new_database_before_searching=
-An_Error_occurred_while_fetching_from_ADS_(%0)\:=
-Error_while_fetching_from_ADS=
-Error_while_fetching_from_OAI2=
-An_Error_occurred_while_parsing_abstract=
-Unknown_DiVA_entry\:_'%0'.=
-Get_BibTeX_entry_from_DiVA=
-Log=
-Remove_unneccessary_$,_{,_and_}=
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+%0_contains_the_Regular_Expression_<b>%1</b>=%0_mengandung_Ekspresi_Reguler_<b>%1</b>
+%0_contains_the_term_<b>%1</b>=%_mengandung_istilah_<b>%1</b>
+%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_tidak_mengandung_Ekspresi_Reguler_<b>%1</b>
+%0_doesn't_contain_the_term_<b>%1</b>=%0_tidak_mengandung_istilah_<b>%1</b>
+%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_tidak_sesuai_dengan_Ekspresi_Reguler_<b>%1</b>
+%0_doesn't_match_the_term_<b>%1</b>=%0_tidak_sesuai_dengan_istilah_<b>%1</b>
+%0_export_successful=%0_ekspor_berhasil
+%0_field_set=%0_bidang_ditetapkan
+%0_matches_the_Regular_Expression_<b>%1</b>=%0_sesuai_dengan_Ekspresi_Reguler_<b>%1</b>
+%0_matches_the_term_<b>%1</b>=%0_sesuai_dengan_istilah_<b>%1</b>
+<field_name>=<nama_bidang>
+<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>tidak_bisa_menemukan_berkas_'%0'<BR>tautan_dari_entri_'%1'</HTML>
+<no_field>=<tanpa_bidang>
+<select>=<pilih>
+<select_word>=<pilih_kata>
+A_string_with_this_label_already_exists=String_dengan_label_tadi_sudah_ada
+Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Singkat_nama_jurnal_dari_entri_pilihan_(Singkatan_ISO)
+Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Singkat_nama_jurnal_dari_entri_pilihan_(Singkatan_MEDLINE)
+Abbreviate_names=Singkat_nama
+Abbreviated_%0_journal_names.=Aingkatan_%0_nama_jurnal.
+Abbreviation=Singkatan
+About_JabRef=Tentang_JabRef
+Abstract=Abstrak
+Accept=Terima
+Accept_change=Terima_perubahan
+Action=Aksi
+Add=Tambah
+Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Tambah_kelas_ImportFormat_dari_lokasi_class._\nLokasi_tidak_harus_pada_lokasi_kelas_JabRef.
+Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Tambah_suaian_kelas_ImportFormat_dari_arsip_Zip.\nLokasi_arsip_Zip_tidak_harus_dalam_lokasi_kelas_JabRef.
+add_entries_to_group=tambah_entri_ke_grup
+Add_entry_selection_to_this_group=Tambah_entri_pilihan_ke_grup_ini
+Add_from_folder=Tambah_dari_folder
+Add_from_jar=Tambah_dari_jar
+add_group=tambah_grup
+Add_Group=Tambah_Grup
+Add_new=Tambah_baru
+Add_Subgroup=Tambah_Anak_Grup
+Add_to_group=Tambah_ke_grup
+Added_group_"%0".=Grup_ditambahkan_"%0".
+Added_new=Ditambahkan_baru
+Added_string=Ditambahkan_string
+Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Tambahan,_entri_bidang_<b>%0</b>_yang_tidak_mengandung<b>%1</b>_dapat_d [...]
+Advanced=Tingkat_lanjut
+All_custom_file_types_will_be_lost._Proceed?=Semua_berkas_tipe_suaian_akan_hilang._Teruskan?
+All_Entries=Semua_Entri
+All_entries=Semua_entri
+All_entries_of_this_type_will_be_declared_typeless._Continue?=Semua_entri_tipe_ini_akan_dinyatakan_sebagai_tanpa_tipe._Teruskan?
+All_fields=Semua_bidang
+All_subgroups_(recursively)=Semua_anak_grup_(rekursif)
+Allow_editing_in_table_cells=Ijinkan_menyunting_dalam_sel_tabel
+An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Kesalahan_terjadi_ketika_mengambil_dari_sumber_OAI2_(%0)\:
+An_Exception_ocurred_while_accessing_'%0'=Kesalahan_terjadi_ketika_mengakses_'%0'
+An_SAXException_ocurred_while_parsing_'%0'\:=SAXException_terjadi_ketika_mengurai_'%0'\:
+and=dan
+and_inside_the_JabRef-jar\:=dan_didalam_JabRef-jar\:
+and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=dan_kelas_tersebut_harus_dinyatakan_di_lokasi_kelas_waktu_menjalankan_JabRef.
+any_field_that_matches_the_regular_expression_<b>%0</b>=bidang_yang_sesuai_dengan_ekspresi_reguler_<b>%0</b>
+Appearance=Penampilan
+Append=Menambah
+Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Menambah_isi_dari_basisdata_BibTeX_ke_basisdata_yang_sedang_dilihat_sekarang
+Append_database=Menambah_basisdata
+append_the_selected_text_to_bibtex_key=menambah_teks_pilihan_ke_kunci_bibtex
+Application=Aplikasi
+Apply=Terapkan
+Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argumen_dimasukkan_pada_JabRef_yang_sedang_dibuka._Dimatikan.
+Assign_entry_selection_exclusively_to_this_group=Terapkan_pilihan_entri_hanya_ke_grup_ini
+Assign_new_file=Terapkan_ke_berkas_baru
+Assign_the_original_group's_entries_to_this_group?=Terapkan_entri_grup_asli_ke_grup_ini?
+Assigned_%0_entries_to_group_"%1".=Diterapkan_%0_entri_ke_grup_"%1".
+Assigned_1_entry_to_group_"%0".=Diterapkan_1_entri_ke_grup_"%0".
+At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=Paling_tidak_plugin_'net.sf.jabref.core'_harus_ada.
+Attach_%0_file=Lampirkan_berkas_%0
+Attach_URL=Lampirkan_URL
+Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Mencoba_atur_otomatis_%0_tautan_untuk_entri_anda._Pengaturan_otomatis_berfungsi_jika_berkas_%0_di_folder_%0_atau_subfolder<BR>diberi_nama_sama_dengan_kunci_BibTeX,_tambah_ekstensi.
+Attempting_SQL_export...=Seang_proses_ekspor_SQL...
+Auto=Otomatis
+Autodetect_format=Deteksi_format_otomatis_
+Autogenerate_BibTeX_key=Kunci_BibTeX_dibuat_otomatis
+Autogenerate_BibTeX_keys=Kunci_BibTeX_dibuat_otomatis
+Autogenerate_groups=Grup_dibuat_otomatis
+autogenerate_keys=kunci_dibuat_otomatis
+Autolink_files_with_names_starting_with_the_BibTeX_key=Tautan_otomatis_berkas_dgn_nama_yang_sama_kunci_BibTeX
+Autolink_only_files_that_match_the_BibTeX_key=Tautan_otomatis_hanya_pada_berkas_sesuai_dgn_kunci_BibTeX
+Automatically_create_groups=Otomatis_membuat_grup
+Automatically_create_groups_for_database.=Otomatis_membuat_grup_untuk_basisdata.
+Automatically_created_groups=Grup_yang_dibuat_otomatis
+Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Otomatis_sembunyikan_antarmuka_grup_ketika_merubah_ke_basisdata_yang_tidak_punya_grup
+Automatically_remove_exact_duplicates=Otomatis_menghapus_yang_sama
+Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Otomatis_menampilkan_antarmuka_grup_ketika_merubah_ke_basisdata_yang_mempunyai_grup
+Autoset=Pengaturan_otomatis
+Autoset_%0_field=Pengaturan_otomatis_bidang_%0
+Autoset_%0_links._Allow_overwriting_existing_links.=Pengaturan_otomatis_%0_tautan._Mengijinkan_menindih_tautan_yang_ada.
+Autoset_%0_links._Do_not_overwrite_existing_links.=Pengatuean_otomatis_%0_tautan._Tidak_boleh_menindih_tautan_yang_ada.
+Autoset_external_links=Pengaturan_otomatis_tautan_eksternal
+Autosetting_links=Pengaturan_otomatis_tautan
+AUX_file_import=Impor_berkas_AUX
+Available_export_formats=Format_ekspor_yang_dikenal
+Available_fields=Bidang_tersedia
+Available_import_formats=Format_impor_yang_dikenal
+Background_color_for_optional_fields=Latar_bidang_tambahan
+Background_color_for_required_fields=Latar_bidang_utama
+Backup_old_file_when_saving=Cadangan_berkas_lama_ketika_menyimpan
+Beta_version=Versi_Beta
+Bibkey_to_filename_conversion=Konversi_Bibkey_ke_nama_berkas
+BibTeX_key=Kunci_BibTeX
+BibTeX_key_is_unique.=Kunci_BibTeX_tidak_boleh_sama.
+BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Kunci_BibTeX_belum_ditentukan._Tulis_nama_untuk_berkas_muat_turun
+BibTeX_source=Sumber_BibTeX
+BibTeXML=BibTeXML
+Binding=Gabung
+Broken_link=Tautan_rusak
+Browse=Jelajah
+by=oleh
+Calling_external_viewer...=Memanggil_penampil_eksternal
+Cancel=Batal
+Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Tidak_bisa_menambah_entri_ke_grup_tanpa_membuat_kunci._Membuat_kunci_sekarang?
+Cannot_merge_this_change=Tidak_bisa_menggagung_perubahan_ini
+Cannot_move_group_"%0"_down.=Tidak_bisa_meggeser_grup_"%0"_kebawah.
+Cannot_move_group_"%0"_left.=Tidak_bisa_meggeser_grup_"%0"_kekiri.
+Cannot_move_group_"%0"_right.=Tidak_bisa_meggeser_grup_"%0"_kekanan.
+Cannot_move_group_"%0"_up.=Tidak_bisa_meggeser_grup_"%0"_keatas.
+case_insensitive=huruf_besar_kecil_tidak_penting
+case_sensitive=memperhitungkan_huruf_besar_kecil
+Case_sensitive=Huruf_besar_kecil_tidak_penting
+change_assignment_of_entries=merubah_penugasan_entri
+Change_case=Merubah_huruf_besar/kecil
+Change_entry_type=Merubah_tipe_entri
+Change_file_type=Merubah_tipe_berkas
+change_key=merubah_kunci
+Change_of_Grouping_Method=Metubah_Metode_Grup
+change_preamble=merubah_preamble
+change_string_content=merubah_isi_string
+change_string_name=merubah_nama_string
+Change_table_column_and_General_fields_settings_to_use_the_new_feature=Merubah_kolom_tabel_dan_pengaturan_umum_bidang_dengan_menerapkan_fitur_baru
+change_type=merubah_tipe
+changed_=dirubah_
+Changed_font_settings=Pengaturan_huruf_berubah
+Changed_language_settings=Pengaturan_bahasa_berubah
+Changed_look_and_feel_settings=Pengaturan_penampilan_berubah
+Changed_preamble=Preamble_berubah
+Changed_type_to=Merubah_tipe_ke
+Characters_to_ignore=Karakter_diabaikan
+Check_existing_%0_links=Periksa_%0_tautan_yang_sudah_ada
+Check_links=Periksa_tautan
+Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Pilih_URL_untuk_dimuaturun._Daftar_bawaan_diberikan_oleh_pengembang_JabRef.
+Cite_command=Perintah_acuan
+Class_name=Nama_kelas
+Clear=Bersihkan
+clear_all_groups=bersihkan_semua_grup
+Clear_field=Bersihkan_bidang
+Clear_fields=Bersihkan_beberapa_bidang
+Clear_highlight=Bersihkan_highlight
+Close=Tutup
+Close_dialog=Tutup_dialog
+Close_the_current_database=Tutup_basisdata_yang_sekarang
+Close_the_help_window=Tutup_jendela_bantuan
+Close_window=Tutup_jendela
+Closed_database=Basisdata_ditutup
+Collapse_subtree=Tutup_cabang_pohon
+Color_codes_for_required_and_optional_fields=Kode_warna_untuk_bidang_utama_dan_tambahan
+Color_for_marking_incomplete_entries=Tanda_untuk_entri_kosong
+Column_width=Lebar_kolom
+Command_line_id=id_perintah_baris
+Complete_record=Selesai_merekam
+Connect=Menghubungi
+Connect_to_SQL_database=Menghubungi_basisdata_SQL
+Connect_to_SQL_Database=Menghubungi_Basisdata_SQL
+Connection_to_IEEEXplore_failed=Koneksi_ke_IEEEXplore_gagal
+Contained_in=Terkandung_di
+Content=Isi
+Copied=Disalin
+Copied_cell_contents=Isi_sel_disalin
+Copied_key=Kunci_disalin
+Copied_keys=Kunci_disalin
+Copy=Salin
+Copy_BibTeX_key=Salin_kunci_bibTeX
+Copy_file_to_file_directory.=Salin_berkas_ke_direktori_berkas.
+Copy_files_to_file_directory.=Salin_berkas_ke_direktori_berkas.
+Copy_to_clipboard=Salin_ke_papan_klip
+Could_not_call_executable=Tidak_bisa_memanggil_yang_bisa_dijalankan
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Tidak_bisa_menghubungi_ke_proses_gnuserv_yang_berjalan._Pastikan_Emacs_atau_XEmacs_sedang_berjalan,<BR>dan_server_sudah_dijalankan_(dengan_perintah_'gnuserv-start').
+Could_not_connect_to_host_=Tidak_bisa_menghubungi_host
+Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Tidak_bisa_menghubungi_server_Vim._Pastikan_Vim_sedang_berjalan<BR>dengan_nama_server_yang_sah.
+Could_not_export_file=Tidak_bisa_ekspor_berkas
+Could_not_export_preferences=Tidak_bisa_ekspor_preferensi
+Could_not_find_a_suitable_import_format.=Tidak_bisa_menemukan_format_impor_yang_sesuai.
+Could_not_find_directory_for_%0-files\:_%1=Tidak_bisa_menemukan_direktori_untuk_%0-berkas\:_%1
+Could_not_find_image_file=Tidak_bisa_menemukan_berkas_gambar
+Could_not_find_layout_file=Tidak_bisa_menemukan_berkas_tataletak
+Could_not_import_preferences=Tidak_bisa_impor_preferensi
+Could_not_instantiate_%0=Tidak_bisa_instansiasi_%0
+Could_not_instantiate_%0_%1=Tidak_bisa_instansiasi_%0_%1
+Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Tidak_bisa_instansiasi_%0._Apakah_anda_sudah_memilih_lokasi_paket_yang_benar?
+Could_not_open_link=Tidak_bisa_membuka_tautan
+Could_not_parse_number_of_hits=Tidak_bisa_mengurai_beberapa_hits
+Could_not_print_preview=Tidak_bisa_mencetak_pratampilan
+Could_not_run_the_'vim'_program.=Tidak_bisa_menjalankan_program_'vim'.
+Could_not_save_file=Tidak_bisa_membuka_berkas
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Tidak_bisa_menyimpan_berkas._Enkoding_karakter_'%0'_tidak_didukung.
+Create_group=Membuat_grup
+Created_groups.=Grup_dibuat.
+crossreferenced_entries_included=entri_referensi_silang_diikutkan
+Current_content=Isi_sekarang
+Current_value=Angka_sekarang
+Custom_entry_types=Tipe_entri_suaian
+Custom_entry_types_found_in_file=Tipe_entri_suaian_ditemukan_dalam_berkas
+Custom_icon_theme=Tema_ikon_suaian
+Custom_icon_theme_file=Berkas_tema_ikon_suaian_
+Custom_importers=Pengimpor_atursendiri
+Customize_entry_types=Tipe_entri_ubahsuai
+Customize_key_bindings=Ubahsuai_kunci_gabungan
+Cut=Potong
+cut_entries=potong_entri
+cut_entry=potong_entri
+Cut_pr=Potong_pr
+Database_\:=Basisdata_\:
+Database_encoding=Enkoding_basisdata
+Database_has_changed._Do_you_want_to_save_before_closing?=Basisdata_sudah_berubah._Apakah_ingin_menyimpan_sebelum_menutup?
+Database_properties=Properti_basisdata
+Date_format=Format_tanggal
+Default=Bawaan
+Default_encoding=Enkoding_bawaan
+Default_grouping_field=Bidang_grup_bawaan
+Default_look_and_feel=Penampilan_artistik_bawaan
+Default_pattern=Pola_bawaan
+Default_sort_criteria=Kriteria_pengurutan_bawaan
+Define_'%0'=Mendefinisi_'%0'
+Delete=Hapus
+Delete_custom_format=Menghapus_format_suaian
+delete_entries=hapus_entri
+Delete_entry=Hapus_entri
+delete_entry=hapus_entri
+Delete_multiple_entries=Hapus_entri_berganda
+Delete_rows=Hapus_baris
+Delete_strings=Hapus_string
+Deleted=Dihapus
+Delimit_fields_with_semicolon,_ex.=Batas_bidang_dengan_titik_koma,_misal,
+Descending=Urutan_menurun
+Description=Deskripsi
+Deselect_all=Lepas_semua_pilihan
+Deselect_all_duplicates=Lepas_semua_pilihan_duplikasi
+Details=Perincian
+Disable_entry_editor_when_multiple_entries_are_selected=Penyunting_entri_tidak_aktif_ketika_beberapa_entri_dipilih
+Disable_this_confirmation_dialog=Dialog_konfirmasi_ini_tidak_aktif
+Disable_this_warning_dialog=Dialog_peringatan_ini_tidak_aktif
+Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Tampilkan_semua_entri_yang_ada_di_grup_pilihan.
+Display_all_error_messages=Tampilkan_semua_pesan_kesalahan
+Display_help_on_command_line_options=Tampilkan_bantuan_pada_opsi_perindah_baris
+Display_imported_entries_in_an_inspection_window_before_they_are_added.=Tampilkan_entri_impor_di_jendela_inspeksi_sebelum_ditambahkan
+Display_only_entries_belonging_to_all_selected_groups.=Tampilkan_entri_hanya_yang_ada_di_grup_pilihan.
+Display_version=Tampilkan_versi
+Displaying_no_groups=Grup_tidak_ditampilkan
+Do_not_abbreviate_names=Jangan_singkat_nama
+Do_not_autoset=Jangan_pengaturan_otomatis
+Do_not_import_entry=Jangan_impor_entri
+Do_not_open_any_files_at_startup=Jangan_buka_berkas_saat_menjalankan
+Do_not_overwrite_existing_keys=Jangan_menindih_kunci_yang_ada
+Do_not_show_splash_window_at_startup=Jangan_menampilkan_jendela_info_ketika_memulai
+Do_not_show_these_options_in_the_future=Untuk_selanjutnya_Jangan__tampilkan_ini_lagi
+Do_not_wrap_the_following_fields_when_saving=Jangan_lipat_bidang_berikut_ketika_menyimpan
+Do_not_write_the_following_fields_to_XMP_Metadata\:=Jangan_menulis_bidang_dibawah_pada_Metadata_XMP\:
+Do_you_want_JabRef_to_do_the_following_operations?=Apakah_anda_ingin_JabRef_melakukan_proses_berikut?
+DocBook=DocBook
+Down=Kebawah
+Download=Muaturun
+Download_completed=Muaturun_selesai
+Download_file=Muaturun_berkas
+Downloading...=Sedang_muaturun...
+Drag_and_Drop_Error=Kesalahan_Seret_dan_Letak
+Drop_%0=Letakkan_%0
+duplicate_BibTeX_key=kunci_BibTeX_sama
+Duplicate_BibTeX_key.=Kunci_BibTeX_sama.
+Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Kunci_BibTeX_sama._Entri_ini_tidak_bisa_untuk_grup.
+Duplicate_Key_Warning=Peringatan_Kunci_Sama
+Duplicate_pairs_found=Ditemukan_pasangan_sama
+duplicate_removal=penghapus_yang_sama
+Duplicate_string_name=Nama_string_sama
+Duplicates_found=Ditemukan_ada_yang_sama
+Duplicates_removed=Yang_sama_dihapus
+Dynamic_groups=Grup_dinamik
+Dynamically_group_entries_by_a_free-form_search_expression=Entri_grup_dinamik_dengan_ekspresi_pencarian_bebas
+Dynamically_group_entries_by_searching_a_field_for_a_keyword=Entri_grup_dinamk_dengan_pencarian_bidang_dari_katakunci
+Each_line_must_be_on_the_following_form=Setiap_baris_harus_menurut_bentuk_berikut
+Edit=Sunting
+Edit_custom_export=Sunting_ekspor_atursendiri
+Edit_entry=Sunting_entri
+Edit_file_link=Sunting_berkas_tautan
+Edit_file_type=Sunting_tipe_berkas
+Edit_group=Sunting_grup
+Edit_journal=Sunting_jurnal
+Edit_preamble=Sunting_preamble
+Edit_strings=Sunting_string
+Editor_options=Pilihan_Penyunting
+empty_BibTeX_key=kunci_BibTeX_kosong
+Empty_BibTeX_key.=Kinci_BibTeX_kosong.
+Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Kunci_BibTeX_kosong._Grup_tidak_bisa_menggunakan_entri_ini.
+empty_database=basisdata_kosong
+Enable_source_editing=Aktifkan_penyuntingan_sumber
+Enable_word/name_autocompletion=Otomatis_melengkapi_kata/nama
+Endnote=Endnote
+Enter_URL=Tulis_URL
+Enter_URL_to_download=Tulis_URL_untuk_muaturun
+entries=entri
+Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Entri_tidak_bisa_diterapkan_secara_manual_atau_dihapus_dari_grup_ini.
+Entries_exported_to_clipboard=Entri_diekspor_ke_papan_klip
+entries_have_undefined_BibTeX_key=entri_belum_mempunyai_kunci_BibTeX
+entries_into_new_database=entri_ke_basisdata_baru
+entry=entri
+Entry_editor=Penyunting_entri
+Entry_in_current_database=Entri_di_basisdata_sekarang
+Entry_in_import=Entri_dalam_impor
+Entry_preview=Pratampilan_entri
+Entry_table=Tabel_entri
+Entry_table_columns=Kolom_tabel_entri
+Entry_type=Tipe_entri
+Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Entri_tipe_nama_tidak_diijinkan_mengandung_spasi_kosong_atau_karakter_berikut
+Entry_types=Tipe_entri
+Error=Kesalahan
+Error\:_=Kesalahan\:_
+Error_converting_Bibtex_to_XMP\:_%0=Kesalahan_merubah_Bibtex_ke_XMP:_%0
+Error_converting_XMP_to_'%0'...=Kesalahan_merubah_XMP_ke_'%0'...
+Error_exporting_to_clipboard=Kesalahan_mengekspor_ke_papan_klip
+Error_in_field=Kesalahan_dalam_bidang
+Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Ada_kesalahan_ketika_menjalankan_sistem_plugin._Tetap_menjalankan_tetapi_fungsinya_tidak_sempurna.
+Error_occured_when_parsing_entry=Kesalahan_terjadi_ketika_mengurai_entri
+Error_opening_file=Kesalahan_ketika_membuka_berkas
+Error_setting_field=Kesalahan_pengaturan_bidang
+Error_while_converting_BibtexEntry_to_XMP_%0=Kesalahan_ketika_merubah_BibtexEntry_ke_XMP_%0
+Error_while_downloading_file\:=Kesalahan_ketika_muaturun_berkas\:
+Error_while_fetching_from_OIA2=Kesalahan_ketika_mengambil_dari_OIA2
+Error_while_writing=Kesalahan_ketika_menulis
+Error_writing_to_%0_file(s).=Kesalahan_menulis_ke_berkas_%0.
+Error_writing_XMP_to_file\:_%0=Kesalahan_ketika_menulis_XMP_ke_berkas\:_%0
+Establishing_SQL_connection...=Sedang_membuat_koneksi_SQL...
+Exceptions=Perkecualian
+Existing_file=Berkas_yang_ada
+exists._Overwrite_file?=sudah_ada._Berkas_ditindih?
+exists._Overwrite?=sudah_ada._Ditindih?
+Expand_subtree=Paparkan_cabang
+Export=Ekspor
+Export_name=Ekspor_nama
+Export_preferences=Preferensi_Ekspor
+Export_preferences_to_file=Ekspor_preferensi_ke_berkas
+Export_properties=Ekspor_properti
+Export_to_clipboard=Ekspor_ke_papan_klip
+Export_to_SQL_database=Ekspor_ke_basisdata_eksternal
+Exporting=Proses_mengekspor
+Extension=Ekstensi
+External_changes=Perubahan_eksternal
+External_file_links=Tautan_berkas_eksternal
+External_files=Berkas_eksternal
+External_programs=Program_eksternal
+External_viewer_called=Penampil_eksternal_dijalankan
+Failed_to_read_groups_data_(unsupported_version\:_%0)=Gagal_membaca_data_grup_(versi_tidak_didukung:_%0)
+Fetch=Mengambil
+Field=Bidang
+field=bidang
+Field_content=Isi_bidang
+Field_name=Nama_bidang
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Nama_bidang_tidak_diijinkan_mengandung_spasi_kosong_atau_karakter_berikut
+Field_sizes=Ukuran_bidang
+Field_to_filter=Bidang_ditapis
+Field_to_group_by=Bidang_ke_grup_berdasar
+Fields=Bidang
+File=Berkas
+file=berkas
+File_'%0'_is_already_open.=Berkas_'%0'_sudah_dibuka
+File_'%0'_not_found=Berkas_'%0'_tidak_ditemukan
+File_changed=Berkas_sudah_diubah
+File_directory_is_'%0'\:=Lokasi_berkas_adalah_'%0'\:
+File_directory_is_not_set_or_does_not_exist!=Lokasi_berkas_belum_ditentukan_atau_tidak_ada!
+File_download=Berkas_muatturun
+File_exists=Berkas_ada
+File_extension=Ekstensi_berkas
+File_has_been_updated_externally._What_do_you_want_to_do?=Berkas_diperbarui_dengan_program_eksternal._Apakah_yang_and_inginkan?
+File_not_found=Berkas_tidak_ditemukan
+File_type=Tipe_berkas
+File_updated_externally=Berkas_diperbarui_secara_eksternal
+filename=nama_berkas
+Files_opened=Berkas_dibuka
+Filter=Penapis
+Finished_autosetting_external_links.=Selesai_pengaturan_otomatis_tautan_eksternal.
+Finished_synchronizing_%0_links._Entries_changed%c_%1.=Selesai_menyelaraskan_%0_tautan._Entri_diubah%c_%1.
+Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Selesai_menulis_XMP-metadata._Ditulis_ke_berkas_%0.
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Selesai_menulis_XMP_untuk_berkas_%0_(%1_dilewati,_%2_kesalahan).
+First_select_the_entries_you_want_keys_to_be_generated_for.=Pertama_pilih_entri_yang_anda_kehendaki_untuk_dibuat_kunci.
+Fit_table_horizontally_on_screen=Sesuaikan_ukuran_tabel_horisontal_sesuai_layar
+Float=Ambangan
+Float_marked_entries=Ambangan_ditandai_sebagai_entri
+Font_Family=Keluarga_Huruf
+Font_Preview=Pratampilan_Huruf
+Font_Size=Ukuran_Huruf
+Font_Style=Corak_huruf
+FontSelector=PemilihHuruf
+for=untuk
+Format_of_author_and_editor_names=Format_nama_penulis_dan_penyunting
+Format_String=Format_String
+Format_used=Format_digunakan
+Formatter_Name=Nama_Pemformat
+Formatter_not_found=Pemformat_tidak_ditemukan
+found=ditemukan
+Found_%0_plugin(s)=Ditemukan_%0_plugin
+found_in_aux_file=ditemukan_dalam_berkas_aux
+Full_name=Nama_lengkap
+General=Umum
+General_fields=Bidang_umum
+Generate=Membuat
+Generate_BibTeX_key=Membuat_kunci_BibTeX
+Generate_keys=Membuat_kunci
+Generate_keys_before_saving_(for_entries_without_a_key)=Buat_kunci_sebelum_menyimpan_(untuk_entri_tanpa_kunci)
+Generate_keys_for_imported_entries=Buat_kunci_untuk_entri_impor
+Generate_now=Membuat_sekarang
+Generated_BibTeX_key_for=Kunci_BibTeX_dibuat_untuk
+Generating_BibTeX_key_for=Membuat_kunci_BibTeX_untuk
+Grab=Ambil
+Gray_out_entries_not_in_group_selection=Kelabukan_entri_yang_tidak_dalam_pilihan_grup
+Gray_out_non-hits=Kelabukan_non-hits
+Gray_out_non-matching_entries=Kelabukan_entri_yang_tidak_sesuai
+Group_properties=Properti_grup
+grouping_may_not_work_for_this_entry=Entri_ini_tidak_akan_berfungsi_dalam_grup
+Groups=Grup
+Harvard_RTF=Harcard_RTF
+Have_you_chosen_the_correct_package_path?=Apakah_anda_sudah_memilih_lokasi_paket_yang_tepat?
+Help=Bantuan
+Help_contents=Daftar_isi_bantuan
+Help_on_groups=Bantuan_untuk_grup
+Help_on_key_patterns=Bantuan_untuk_pola_kunci
+Help_on_Preview_Settings=Bantuan_untuk_Pengaturan_Pratampilan
+Help_on_Regular_Expression_Search=Bantuan_untuk_Pencarian_Ekspresi_Reguler
+Hide_non-hits=Sembunyikan_non-hits
+Hide_non-matching_entries=Sembunyikan_entri_yang_tidak_sesuai
+Hierarchical_context=Konteks_berhirarki
+Highlight=Warnakan
+Highlight_groups_matching_all_selected_entries=Warnakan_grup_yang_sesuai_dengan_semua_entri_pilihan
+Highlight_groups_matching_any_selected_entry=Warnakan_grup_yang_sesuai_dengan_entri_pilihan
+Highlight_overlapping_groups=Warnakan_grup_yang_bertindih
+Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Sarant%c_untuk_mencari_hanya_bidang_tertentu,_misal_tulis%c<p><tt>author%esmith_dan_title%eelectrical</tt>
+HTML=HTML
+HTML_table=Tabel_HTML
+HTML_table_(with_Abstract_&_BibTeX)=Tabel_HTML_(dengan_Abstrak_dan_BibTeX)
+Icon=Ikon
+Ignore=Abaikan
+Immediate_subgroups=sub-grup_seketika
+Import=Impor
+Import_and_keep_old_entry=Impor_dan_pertahankan_entri_lama
+Import_and_remove_old_entry=Impor_dan_hapus_entri_lama
+Import_entries=Impor_entri
+Import_failed=Impor_gagal
+Import_file=Impor_berkas
+Import_group_definitions=Impor_definisi_grup
+Import_name=Impor_nama
+Import_preferences=Preferensi_Impor
+Import_preferences_from_file=Impor_preferensi_dari_berkas
+Import_strings=Impor_string
+Import_to_open_tab=Impor_ke_tab_yang_dibuka
+Import_word_selector_definitions=Impor_definisi_pemilih_kata
+Imported_database=basisdata_diimpor
+Imported_entries=entri_diimpor
+Imported_from_database=diimpor_dari_basisdata
+ImportFormat_class=kelas_ImportFormat
+Importing=Sedang_mengimpor
+Importing_in_unknown_format=Mengimpor_pada_format_tidak_dikenal
+In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=Di_JabRef,_gunakan_pasangan_karakter_#_untuk_menandai_string.
+Include_abstracts=Termasuk_abstrak
+Include_entries=Termasuk_entri
+Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Termasuk_sub-grup\:_Ketika_dipilih,_lihat_entri_yang_ada_di_grup_atau_sub-grup_ini.
+Incremental=Bertahap
+Incremental_search=Pencarian_bertahap
+Incremental_search_failed._Repeat_to_search_from_top.=Pencarian_bertahap_gagal._Ulangi_pencarian_dari_atas.
+Independent_group\:_When_selected,_view_only_this_group's_entries=Grup_bebas\:_Ketika_dipilih,_lihat_hanya_entri_grup_ini
+Initially_show_groups_tree_expanded=Awalnya_grup_tampil_dengan_detail_dibuka
+Input=Masukan
+Input_error=Kesalahan_masukan
+Insert=Sisipkan
+Insert_rows=Sisipkan_baris
+Insert_selected_citations_into_LyX/Kile=Sisipkan_acuan_pilihan_ke_LyX/Kile
+Insert_selected_citations_into_WinEdt=Sisipkan_acuan_pilihan_ke_WinEdt
+insert_string_=sisipkan_string_
+Insert_URL=Sisipkan_URL
+integrity=integritas
+Integrity_check=periksa_integritas
+Intersection=Interseksi
+Invalid_BibTeX_key=Kunci_BibTeX_salah
+Invalid_date_format=Format_hari_salah
+Invalid_URL=URL_salah
+Inverted=Dibalik
+is_a_standard_type.=adalah_tipe_standar.
+ISO_abbreviation=Singkatan_ISO
+Item_list_for_field=daftar_item_untuk_bidang
+jabref=jabref
+JabRef_help=Petunjuk_menggunakan_JabRef
+JabRef_preferences=Preferensi_JabRef
+Journal_abbreviations=Singkatan_nama_Jurnal
+Journal_list_preview=Tampilkan_daftar_Jurnal
+Journal_name=Nama_Jurnal
+Keep=Tetap
+Keep_both=Tetap_keduanya
+Keep_lower=Tetap_atas
+Keep_upper=Tetap_bawah
+Key_bindings=Gabungan_kunci
+Key_bindings_changed=Gabungan_kunci_berubah
+Key_generator_settings=Pengaturan_pembuat_kunci
+Key_pattern=Pola_kunci
+keys_in_database=daftar_kunci_di_basisdata
+Keyword=katakunci
+Label=Label
+Language=Bahasa
+Last_modified=Terakhir_diubah
+LaTeX_AUX_file=berkas_LaTeX_AUX
+Leave_file_in_its_current_directory.=Tinggalkan_berkas_di_direktori_yg_sekarang.
+Leave_files_in_their_current_directory.=Tinggalkan_berkas_di_direktori_yg_sekarang.
+Left=Kiri
+License=Lisensi
+Limit_to_fields=Batasi_ke_bidang
+Limit_to_selected_entries=Batasi_ke_entri_pilihan
+Link=Tautan
+Link_local_file=Tautan_berkas_lokal
+Link_to_file_%0=Tautan_ke_berkas_%0
+Listen_for_remote_operation_on_port=Menggunakan_operasi_jarak_jauh_pada_port
+Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Muat_dan_Simpan_preferensi_dari/ke_jabref.xml_ketika_memulai_(mode_pena_simpan)
+Load_session=Sesi_muat
+Loading_session...=Sesi_pemuatan...
+localhost=host_lokal
+Look_and_feel=Penampilan_artistik
+Looking_for_pdf...=Sedang_mencari_pdf...
+lower=bawah
+Main_file_directory=Lokasi_berkas_utama
+Main_layout_file=Berkas_tataletak_utama
+Main_PDF_directory=Lokasi_utama_PDF
+Main_PS_directory=Lokasi_utama_PS
+Manage=Mengatur
+Manage_custom_exports=Mengatur_ekspor_atursendiri
+Manage_custom_imports=Mengatur_impor_atursendiri
+Manage_external_file_types=Pengaturan_program_eksternal
+Manage_journal_abbreviations=Pengaturan_singkatan_jurnal
+Mark_entries=Tandai_entri
+Mark_entry=Tandai_entri
+Mark_new_entries_with_addition_date=Tandai_entri_baru_dengan_tambahan_tanggal
+Mark_new_entries_with_owner_name=Tandai_entri_baru_dengan_nama_pemilik
+Marked_selected=Tandai_pilihan
+Memory_Stick_Mode=Mode_Pena_Simpan
+Menu_and_label_font_size=Ukuran_huruf_menu_dan_label
+Merged_external_changes=Menggabung_perubahan_eksternal
+Messages=Pesan
+Messages_and_Hints=Pesan_dan_Saran
+Modification_of_field=Modifikasi_bidang
+Modified_group_"%0".=Grup_dimodifikasi_"%0".
+Modified_groups=Grup_dimodifikasi
+Modified_string=String_dimodifikasi
+Modify=Memodifikasi
+modify_group=memodifikasi_grup
+MODS=MODS
+Move=Memindah
+Move_down=Pindah_kebawah
+Move_entries_in_group_selection_to_the_top=Pindah_entri_dalam_grup_pilihan_ke_atas
+Move_external_links_to_'file'_field=Pindah_tautan_eksternal_ke_bidang_'berkas'
+Move_files_to_file_directory.=Pindah_berkas_ke_direktori_berkas.
+move_group=pindah_grup
+Move_string_down=Pindah_string_kebawah
+Move_string_up=Pindah_string_keatas
+Move_up=Pindah_keatas
+Moved_group_"%0".=Grup_dipindah_"%0".
+MS_Office_2007=MS_Office_2007
+MySQL=MySQL
+MySQL_database=basisdata_MySQL
+Name=Nama
+Name_formatter=Pemformat_nama
+Natbib_style=Gaya_Natbib
+nested_aux_files=berkas_aux_bertingkat
+New=Baru
+new=baru
+New_BibTeX_database=Basisdata_BibTeX_baru
+New_BibTeX_entry=Entri_BibTeX_baru
+New_BibTeX_subdatabase=Anak_basisdata_BibTeX_baru
+New_content=Isi_baru
+New_database_created.=Basisdata_baru_selesai_dibuat.
+New_field_value=Isi_bidang_baru
+New_file=Berkas_baru
+New_file_link_(INSERT)=Tautan_berkas_baru_(SISIPAN)
+New_group=Grup_baru
+New_string=String_baru
+Next_entry=Entri_berikutnya
+No_%0_found=Berkas_%0_tidak_ada
+No_actual_changes_found.=Tidak_ada_perubahan.
+no_base-bibtex-file_specified=tidak_ada_berkas_berbasis_bibtex_dinyatakan
+no_database_generated=tidak_ada_basisdata_dibuat
+No_duplicates_found=Tidak_ditemukan_duplikasi
+No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Entri_tidak_ditemukan._Pastikan_anda_menggunakan_penapis_impor_yang_tepat.
+No_entries_found_for_the_search_string_'%0'=Tidak_adan_entri_ditemukan_untuk_pencarian_string_'%0'
+No_entries_imported.=Tidak_ada_entri_yang_diimpor.
+No_entries_or_multiple_entries_selected.=Tidak_ada_satu_entri_pun_yang_dipilih.
+No_entries_selected=Tidak_ada_entri_yang_dipilih
+No_entries_selected.=Tidak_ada_entri_yang_dipilih.
+No_exceptions_have_ocurred.=Tidak_ada_perkecualian_yang_terjadi.
+No_files_found.=Berkas_tidak_ditemukan.
+No_GUI._Only_process_command_line_options.=Tidak_ada_GUI._Hanya_menggunakan_perintah_baris.
+No_journal_names_could_be_abbreviated.=Tidak_ada_nama_jurnal_yang_bisa_disingkat.
+No_journal_names_could_be_unabbreviated.=Tidak_ada_ada_nama_jurnal_yang_bisa_dipanjangkan.
+No_PDF_linked=Tidak_ada_tautan_PDF
+No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=pdf_atau_ps_belum_didefinisikan,_dan_tidak_ada_berkas_yang_sesuai_dgn_kunci_BibTeX
+No_plugins_were_found_in_the_following_folders\:=Plugin_tidak_ditemukan_di_lokasi_berikut\:
+No_references_found=Referensi_tidak_ditemukan
+No_saved_session_found.=Tidak_ditemukan_sesi_yang_disimpan.
+No_url_defined=Tidak_ada_URL_didefinisikan
+No_XMP_metadata_found_in_=Tidak_ada_XMP_metadata_ditemukan_di_
+not=tidak
+not_found=tidak_ditemukan
+Not_saved_(empty_session)=Tidak_disimpan_(sesi_kosong)
+Note_that_the_entry_causing_the_problem_has_been_selected.=Catatan,_entri_yang_bermasalah_sudah_dipilih.
+Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Anda_harus_menyatakan_nama_kelas_spesifik_yang_akan_digunakan
+Nothing_to_redo=Tidak_ada_yang_dibatalkan
+Nothing_to_undo=Tidak_ada_yang_dikembalikan
+Number_of_references_to_fetch?=Nomor_referensi_yang_diambil?
+occurences=kali
+OK=OK
+Ok=Ok
+One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Satu_atau_lebih_tautan_berkas_dari_tipe_'%0',_yang_tidak_didefinisikan._Apa_yang_anda_inginkan?
+One_or_more_keys_will_be_overwritten._Continue?=Satu_atau_lebih_kunci_akan_ditindih._Teruskan?
+Only_one_item_is_supported=Hanya_satu_saja_yang_didukung
+Open=Buka
+Open_BibTeX_database=Buka_basisdata_BibTeX
+Open_database=Buka_basisdata
+Open_editor_when_a_new_entry_is_created=Buka_penyunting_ketika_entri_baru_dibuat
+Open_file=Buka_berkas
+Open_last_edited_databases_at_startup=Buka_basisdata_terakhir_ketika_memulai
+Open_PDF_or_PS=Buka_PDF_atau_PS
+Open_right-click_menu_with_Ctrl+left_button=Buka_menu_klik_kanan_dengan_tombol_Ctrl+kiri
+Open_URL_or_DOI=Buka_URL_atau_DOI
+OpenDocument_Spreadsheet=Lembarkerja_OpenDocument
+Opened_database=Basisdata_dibuka
+Opening=Membuka
+Opening_preferences...=Membuka_preferensi...
+OpenOffice_Calc=OpenOffice_Calc
+OpenOffice_CSV=OpenOffice_CVS
+Operation_canceled.\n=Operasi_dibatalkan.\n
+Operation_not_supported=Operasi_tidak_didukung
+Optional_fields=Bidang_tambahan
+Options=Pilihan
+or=atau
+out_of=dari
+Output=Keluaran
+Output_or_export_file=Keluaran_atau_berkas_ekspor
+Override=Ganti
+Override_default_file_directories=Ganti_direktori_berkas_bawaan
+Override_default_font_settings=Ganti_ukuran_huruf_bawaan
+override_the_bibtex_key_by_the_selected_text=ganti_kunci_bibtex_dengan_pilihan_teks
+Overwrite=Tindih
+Overwrite_existing_field_values=Tindih_isi_bidang_yang_ada
+Overwrite_keys=Tindih_kunci
+pairs_processed=proses_berpasangan
+Password_\:=Katalaluan_\:
+Paste=Tempel
+paste_entries=tempel_entri
+paste_entry=tempel_entri
+Paste_from_clipboard=Tempel_dari_papan_klip
+Pasted=Ditempel
+Path_to_%0_not_defined=Lokasi_%0_tidak_ada
+Path_to_LatexEditor_(LEd.exe)=Lokasi_LatexEditor_(LEd.exe)
+Path_to_LyX_pipe=Lokasi_pipa_LyX
+Path_to_Vim=Lokasi_Vim
+Path_to_WinEdt.exe=Lokasi_WinEdt.exe
+PDF_directory=Lokasi_PDF
+PDF_does_not_exist=PDF_tidak_ada
+Personal_journal_list=Daftar_jurnal_pribadi
+Plain_text_import=Impor_teks_normal
+Please_check_your_network_connection_to_this_machine.=Mohon_periksa_koneksi_jaringan_ke_mesin_ini.
+Please_enter_a_name_for_the_group.=Tuliskan_nama_untuk_grup.
+Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Tuliskan_kata_pencarian._Contoh,_untuk_mencari_di_semua_bidang_<b>Smith</b>,_tulis%c<p><tt>smith</tt><p>Untuk_mencari_pada_bidang_<b>Author</b>_untuk_<b>Smith</b>_dan_pada_bidang_<b>Title</b>_untuk_<b>electrical</b>,_tulis%c<p><t [...]
+Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Tulis_bidang_pencarian_(misal_<b>keywords</b>)_dan_katakunci_untuk_mencari_(misal_<b>electrical</b>).
+Please_enter_the_string's_label=Tuliskan_label_string
+Please_select_an_importer=Silahkan_pilih_pengimpor
+Please_select_an_importer.=Silahkan_pilih_pengimpor.
+Please_select_exactly_one_group_to_move.=Silahkan_pilih_satu_grup_yang_akan_dipindah.
+Please_specify_the_=Silahkan_nyatakan_
+Possible_duplicate_entries=Mungkin_entri_sama
+Possible_duplicate_of_existing_entry._Click_to_resolve.=Mungkin_entri_sama_dengan_lainnya._Klik_untuk_menyelesaikan.
+Preamble=Preambel
+Preferences=Preferensi
+Preferences_recorded.=Preferensi_disimpan.
+Preview=Pratampilan
+Previous_entry=Entri_sebelumnya
+Primary_sort_criterion=Kriteria_pertama
+Print_Preview=Cetak_Pratampilan
+Printing_Entry_Preview=Mencetak_pratampilan_entri
+Problem_with_parsing_entry=Permasalahan_dengan_penguraian_entri
+Processing_=Memroses_
+Program_output=Keluaran_program
+PS_directory=Direktori_PS
+Push_entries_to_external_application_(%0)=Kirim_entri_ke_aplikasi_eksternal_(%0)
+Push_selection_to_Emacs=Kirim_pilihan_ke_Emacs
+Push_selection_to_LyX/Kile=Kirim_pilihan_ke_LyX/Kile
+Push_selection_to_Vim=Kirim_pilihan_ke_Vim
+Push_selection_to_WinEdt=Kirim_pilihan_ke_WinEdt
+Push_to_LatexEditor=Kirim_pilihan_ke_LatexEditor
+Pushed_citations_to_%0=Kirim_acuan_ke_%0
+Pushed_citations_to_Emacs=Kirim_acuan_ke_Emacs
+Pushed_citations_to_Vim=Kirim_acuan_ke_Vim
+Pushed_citations_to_WinEdt=Kirim_acuan_ke_WinEdt
+Pushed_the_citations_for_the_following_rows_to=Kirim_acuan_dari_baris_berikut_ke
+Quit_JabRef=Keluar_JabRef
+Quit_synchronization=Keluar_sinkronisasi
+Raw_source=Sumber_asli
+Really_delete_the_selected=Ingin_menghapus_pilihan
+Rearrange_tabs_alphabetically_by_title=Mengatur_tab_judul_berdasarkan_alfabet
+Redo=Mengembalikan
+Reference_database=Basisdata_acuan
+References_found=Acuan_ditemukan
+Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Perbaiki_supergrup\:_Ketika_dipilih,_lihat_entri_yang_ada_di_grup_ini_dan_supergrup
+Refresh_view=Segarkan_tampilan
+Regular_Expression=Ekspresi_reguler
+Remember_these_entry_types?=Ingat_tipe_entri_ini?
+Remote_operation=Penggunaan_jarak_jauh
+Remote_server_port=Port_server_jauh
+Remove=Hapus
+Remove_all?=Hapus_semua?
+Remove_all_subgroups=Hapus_semua_sub-grup
+Remove_all_subgroups_of_"%0"?=Hapus_semua_sub-grup_dari_"%0"?
+Remove_double_braces_around_BibTeX_fields_when_loading.=Hapus_kurung_kurawal_ganda_pada_bidang_BibTeX_ketika_memuat
+Remove_duplicates=Hapus_yang_sama
+Remove_entry_from_import=Hapus_entri_dari_impor
+Remove_entry_selection_from_this_group=Hapus_entri_pilihan_dari_grup_ini
+Remove_entry_type=Hapus_tipe_entri
+Remove_file_link_(DELETE)=Hapus_tautan_berkas_(HAPUS)
+remove_from_group=hapus_dari_grup
+Remove_from_group=Hapus_dari_grup
+Remove_group=Hapus_grup
+Remove_group,_keep_subgroups=Hapus_grup,_sub-grup_tetap
+Remove_group_"%0"?=Hapus_grup_"%0"?
+Remove_group_"%0"_and_its_subgroups?=Hapus_grup_"%0"_dan_sub-grup_nya?
+remove_group_(keep_subgroups)=hapus_grup_(pertahankan_sub-grup)
+remove_group_and_subgroups=hapus_grup_dan_sub-grup
+Remove_group_and_subgroups=Hapus_grup_dan_sub-grup
+Remove_link=Hapus_tautan
+Remove_old_entry=Hapus_entri_lama
+Remove_selected_strings=Hapus_string_pilihan
+remove_string_=hapus_string_
+Removed_group_"%0".=Hapus_grup_"%0".
+Removed_group_"%0"_and_its_subgroups.=Hapus_grup_"%0"_dan_sub-grup_nya.
+Removed_string=Hapus_string
+Renamed_string=Ganti_nama_string
+Replace=Ganti
+Replace_(regular_expression)=Ganti_(ekspresi_reguler)
+Replace_string=Ganti_string
+Replace_with=Ganti_dengan
+Replaced=Diganti
+Required_fields=Bidang_diperlukan
+Reset_all=Atur_ulang_semua
+Reset_file_type_definitons=Atur_ulang_definisi_tipe_berkas
+Resolve_strings_for_all_fields_except=Selesaikan_masalah_string_untuk_semua_bidang_kecuali
+Resolve_strings_for_standard_BibTeX_fields_only=Selesaikan_masalah_string_hanya_pada_bidang_BibTeX_standar
+resolved=sudah_diselesaikan
+Results=Hasil
+Revert_to_original_source=Kembalikan_ke_sumber_asli
+Review=Periksa_ulang
+Review_changes=Periksa_ulang_perubahan
+Right=Kanan
+root=root
+Save=Simpan
+Save_all_finished.=Simpan_semua_selesai.
+Save_all_open_databases=Simpan_semua_basisdata_yang_dibuka
+Save_before_closing=Simpan_sebelum_menutup
+Save_database=Simpan_basisdata
+Save_database_as_...=Simpan_basisdata_sebagai...
+Save_entries_in_their_original_order=Simpan_entri_pada_urutan_aslinya
+Save_failed=Gagal_menyimpan
+Save_failed_during_backup_creation=Gagal_menyimpan_waktu_membuat_cadangan
+Save_failed_while_committing_changes=Gagal_menyimpan_waktu_memasukkan_perubahan
+Save_ordered_by_author/editor/year=Simpan_berdasar_urutan_penulis/penyunting/tahun
+Save_selected_as_...=Simpan_pilihan_sebagai...
+Saved_database=Basisdata_disimpan
+Saved_selected_to=Simpan_pilihan_ke
+Saved_session=Sesi_disimpan
+Saving=Menyimpan
+Saving_all_databases...=Menyimpan_semua_basisdata...
+Saving_database=Menyimpan_basisdata
+Scan=Pindai
+Search=Cari
+Search_All_Fields=Pencarian_Semua_Bidang
+Search_all_fields=Pencarian_semua_bidang
+Search_error=Kesalahan_pencarian
+Search_expression=Ekspresi_pencarian
+Search_for=Mencari
+Search_general_fields=Mencari_bidang_umum
+Search_IEEEXplore=Pencarian_IEEEXplore
+Search_IEEExplore=Pencarian_IEEEXplore
+Search_optional_fields=Pencarian_bidang_tambahan
+Search_required_fields=Pencarian_bidang_utama
+Search_Specified_Field(s)=Pencarian_Bidang_Tertentu
+Searched_database._Global_number_of_hits=Basisdata_dicari._Jumlah_hit_global
+Searched_database._Number_of_hits=Basisdata_dicari._Jumlah_hit
+Searching_for_%0_file=Mencari_berkas_%0
+Searching_for_duplicates...=pencarian_hal_yang_sama...
+Searching_for_files=Mencari_berkas
+Secondary_sort_criterion=Kriteria_kedua
+Select=Pilih
+Select_a_Zip-archive=Pilih_arsip_Zip
+Select_action=Pilih_aksi
+Select_all=Pilih_semua
+Select_Classpath_of_New_Importer=Pilih_Classpath_dari_Pengimpor_Baru
+Select_encoding=Pilih_enkoding
+Select_entries_in_group_selection=Pilih_entri_dalam_grup_pilihan
+Select_entry_type=Pilih_tipe_entri
+Select_external_application=Pilih_aplikasi_eksternal
+Select_file_from_ZIP-archive=Pilih_berkas_dari_arsip_ZIP
+Select_format=Pilih_format
+Select_icon=Pilih_ikon
+Select_matches=Pilih_matches
+Select_new_ImportFormat_Subclass=Pilih_ImportFormat_Subclass_baru
+Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Pilih_tiga_nodal_untuk_melihat,_menerima_atau_menolak_perubahan
+Selected_entries=Entri_pilihan
+Selector_enabled_fields=Pemilih_entri_aktif
+Server_Hostname_\:=Nama_Host_Server_\:
+Server_Type_\:=Tipe_Server_\:
+Set_field=Pilih_bidang
+Set_fields=Pilih_beberapa_bidang
+Set_general_fields=Pilih_bidang_umum
+Set_main_external_file_directory=Tetapkan_direktori_utama_berkas_eksternal
+Set_table_font=Tetapkan_huruf_tabel
+Settings=Pengaturan
+Setup_selectors=Pengaturan_pengisian_kata
+Short_form=Bentuk_singkat
+Shortcut=Pintasan
+Show/edit_BibTeX_source=Tampil/Sunting_sumber_BibTeX
+Show_'Firstname_Lastname'=Tampil_'Depan_Belakang'
+Show_'Lastname,_Firstname'=Tampil_'Belakang_Depan'
+Show_BibTeX_source_by_default=Tampilkan_sumber_BibTeX_sebagai_bawaan
+Show_BibTeX_source_panel=Tampilkan_panel_sumber_BibTeX
+Show_confirmation_dialog_when_deleting_entries=Tampilkan_dialog_konfirmasi_jika_menghapus_entri
+Show_description=Tampilkan_deskripsi
+Show_dynamic_groups_in_<i>italics</i>=Tampilkan_grup_dinamik_dengan_huruf_<i>miring</i>
+Show_entries_*not*_in_group_selection=Tampilkan_entri_*tidak*_dalam_pilihan_grup
+Show_file_column=Tampilkan_kolom_berkas
+Show_icons_for_groups=Tampilkan_ikon_untuk_grup
+Show_last_names_only=Tampil_hanya_nama_belakang
+Show_names_unchanged=Nama_apa_adanya
+Show_one_less_rows=Tampilkan_satu_baris_kurang
+Show_one_more_row=Tampilkan_satu_baris_lebih
+Show_optional_fields=Tampilkan_bidang_tambahan
+Show_PDF/PS_column=Tampilkan_kolom_PD/PS
+Show_required_fields=Tampilkan_bidang_utama
+Show_URL/DOI_column=Tampilkan_kolom_URL/DOI
+Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Tampilkan_dialog_peringatan_jika_menuliskan_kunci_BibTeX_yang_sudah_ada
+Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Tampilkan_dialog_peringatan_ketika_tidak_menulis_kunci_BibTeX
+Simple_HTML=HTML_sederhana
+Size=Ukuran
+Skip=Lompat
+Skipped_-_No_PDF_linked=Dilompati_-_Tanpa_tautan_PDF
+Skipped_-_PDF_does_not_exist=Dilompati_-_PDF_tidak_ada
+Skipped_entry.=Entri_dilompati.
+Sort_alphabetically=Urut_alfabet
+Sort_Automatically=Urut_otomatis
+Sort_order=Cara_urutan
+sort_subgroups=urut_sub-grup
+Sorted_all_subgroups_recursively.=Diurutkan_semua_sub-grup_secara_rekursif
+Sorted_immediate_subgroups.=Diurutkan_sub-grup_seketika.
+source_edit=sunting_sumber
+Special_Name_Formatters=Pemformat_Nama_Spesial
+Special_table_columns=Kolom_tabe_khusus
+SQL_connection_established.=Koneksi_SQL_diadakan.
+Start_incremental_search=Pencarian_bertahap_dimulai
+Start_search=Pencarian_dimulai
+Starting_import=Memulai_impor
+Statically_group_entries_by_manual_assignment=Entri_grup_statik_secara_penerapan_manual
+Status=Status
+Stop=Berhenti
+Store_journal_abbreviations=Simpan_singkatan_jurnal
+Store_string=Simpan_string
+Store_the_following_fields_with_braces_around_capital_letters=Simpan_bidang_berikut_dengan_kurawal_melingkupi_huruf_besar
+Stored_entry=Entri_yang_disimpan
+Strings=String
+Strings_for_database=String_untuk_basisdata
+Subdatabase_from_aux=Sub-basisdata_dari_aux
+Suggest=Saran
+Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Menukar_antara_nama_jurnal_penuh_dan_singkatan_jika_nama_jurnal_diketahui.
+Synchronize_%0_links=Sinkronkan_%0_tautan
+Synchronize_file_links=Sinkronkan_tautan_berkas
+Synchronizing_%0_links...=Sinkronisasi_%0_tautan...
+Table_appearance=Penampilan_tabel
+Table_background_color=Latar_tabel
+Table_grid_color=Jejaring
+Table_text_color=Teks
+Tabname=Nama_tab
+Target_file_cannot_be_a_directory.=Berkas_target_tidak_boleh_nama_folder
+Tertiary_sort_criterion=Kriteria_ketiga
+Test=Coba_lihat
+Text_Input_Area=Area_Masukan_Teks
+The_#_character_is_not_allowed_in_BibTeX_fields=Karakter_#_tidak_diijinkan_dalam_bidang_BibTeX
+The_chosen_date_format_for_new_entries_is_not_valid=Format_hari_yang_dipilih_untuk_entri_baru_tidak_sah
+The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Enkoding_yang_dipilih_'%0'_tidak_bisa_digunakan_untuk_karakter_berikut\:_
+The_CiteSeer_fetch_operation_returned_zero_results.=Operasi_pengambilan_CiteSeerX_tidak_membuahkan_hasil.
+The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=Versi_sekarang_mempunyaia_fitur_pengaturan_tautan_untuk_berkas_luar.<br>Untuk_memanfaatkan,_tautan_anda_harus_diubah_ke_format_baru,_dan<br>JabRef_di_konfigurasi_ulang_untuk_menampilkan_tautan.
+the_field_<b>%0</b>=bidang_<b>%0</b>
+The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Berkas<BR>'%0'<BR>telah_diubah<BR>oleh_program_eksternal!
+The_group_"%0"_already_contains_the_selection.=Grup_"%0"_sudah_mengandung_pilihan.
+The_label_of_the_string_can_not_be_a_number.=Label_untuk_string_tidak_boleh_berupa_angka.
+The_label_of_the_string_can_not_contain_spaces.=Label_untuk_string_tidak_boleh_ada_spasi.
+The_label_of_the_string_can_not_contain_the_'#'_character.=Label_string_tidak_boleh_mengandung_karakter_'#'.
+The_output_option_depends_on_a_valid_import_option.=Pilihan_keluaran_tergantung_dari_pilihan_impor_yang_sah.
+The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=PDF_mengandung_satu_atau_beberapa_data_bibtex.\nApakah_anda_ingin_impor_sebagai_entri_baru_pada_basisdata_sekarang?
+The_regular_expression_<b>%0</b>_is_invalid%c=Ekspresi_reguler_<b>%0</b>_tidak_sah%c
+The_search_is_case_insensitive.=Pencarian_tidak_meperhitungkan_huruf_besar_kecil.
+The_search_is_case_sensitive.=Pencarian_meperhitungkan_huruf_besar_kecil.
+The_string_has_been_removed_locally=String_sudah_dihapus_secara_lokal
+There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Ada_kemungkinan_sama_(ditandai_dengan_ikon_'D')_yang_belum_diselesaikan._Teruskan?
+this_button_will_update=Tombol_ini_akan_memperbarui
+This_database_was_written_using_an_older_version_of_JabRef.=Basisdata_ini_ditulis_dengan_JabRef_versi_lama.
+This_entry_has_no_BibTeX_key._Generate_key_now?=Entri_ini_belum_mempunyai_kunci_BibTeX._Membuat_kunci_sekarang?
+This_entry_is_incomplete=Entri_belum_lengkap
+This_entry_type_cannot_be_removed.=Tipe_entri_tidak_bisa_dihapus.
+This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Tautan_eksternal_dari_tipe_'%0',_yang_belum_didefinisikan._Apa_yang_akan_anda_lakukan?
+This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Grup_ini_mempunyai_entri_berdasar_dari_pengisian_manual._Entri_dapat_dituliskan_dalam_grup_ini_dengan_cara_memilih_en [...]
+This_group_contains_entries_in_which=Grup_ini_memiliki_entri_dimana
+This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Grup_ini_memiliki_entri_dimana_setiap_bidang_mempunyai_ekspresi_reguler_<b>%0</b>
+This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Grup_ini_memiliki_entri_dimana_semua_bidang_mempunyai_istilah_<b>%0</>
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Grup_ini_memiliki_entri_dimana_bidang_<b>%0</b>_memiliki_katakunci_<b>%1</b>
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Grup_ini_memiliki_entri_dimana_bidang_<b>%0</b>_mempunyai_ekspresi_reguler_<b>%1</b>
+This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Ini_hanyalah_dialog_sederhana_salin_dan_tempelkan_untuk_impor_beberapa_beidang_dari_teks_normal.
+This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Ini_membuat_JabRef_mencari_disemua_tautan_%0_dan_memeriksa_apakah_ada_berkas._Jika_tidak,_anda_diberi_pilihan_<BR>untuk_mengatasi_masalah.
+This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Operasi_ini_memerlukan_semua_entri_mempunyai_kunci_BibTeX.
+This_operation_requires_at_least_one_entry.=Operasi_ini_memerlukan_paling_tidak_satu_entri.
+This_operation_requires_one_or_more_entries_to_be_selected.=Operasi_ini_memerlukan_satu_atau_lebih_entri_yang_dipilih.
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Ini_akan_memindah_semua_tautan_eksternal_dari_bidang_'pdf'_dan_'ps'_ke_bidang_'%0'._Diteruskan?
+To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Untuk_mengatur,_dari_<B>AlatBantuan_->_Pengaturan_singkatan_jurnal</B>
+Toggle_abbreviation=Gunakan_singkatan
+Toggle_entry_preview=Gunakan_pratampilan_entri
+Toggle_groups_interface=Gunakan_antarmuka_grup
+Toggle_search_panel=Gunakan_panel_pencarian
+Try_different_encoding=Coba_enkoding_lain
+Type_set_to_'other'=Ubah_tipe_ke_'lainnya'
+Unabbreviate_journal_names_of_the_selected_entries=Nama_jurnal_tidak_disingkat_dari_entri_pilihan
+Unabbreviated_%0_journal_names.=%0_nama_jurnal_tidak_disingkat.
+unable_to_access_LyX-pipe=tidak_bisa_berhubungan_dengan_pipa_LyX
+Unable_to_create_graphical_interface=Tidak_bisa_membuat_antarmuka_grafik
+Unable_to_open_file.=Tidak_bisa_membuka_berkas.
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Tidak_bisa_membuka_tautan._Aplikasi_'%0'_yang_berkaitan_dengan_berkas_tipe_'%0'_tidak_bisa_dimuat.
+Unable_to_read_default_icon_theme.=Tidak_bisa_membaca_tema_ikon_bawaan.
+Unable_to_read_icon_theme_file=Tidak_bisa_membaca_berkas_tema_ikon
+unable_to_write_to=tidak_bisa_menulis_ke
+Undefined_file_type=tipe_berkas_tidak_terdefinisi
+Undo=Batalkan
+Union=Menyatu
+Unknown_bibtex_entries=Entri_bibtex_tidak_dikenal
+unknown_edit=suntingan_tidak_dikenal
+unknown_entry_type=tipe_entri_tidak_dikenal
+Unknown_export_format=format_ekspor_tidak_dikenal
+Unmark_all=Hilangkan_tanda_semua
+Unmark_entries=Hilangkan_tanda_entri
+Unmark_entry=Hilangkan_tanda_entri
+Unmarked_selected=Hilangkan_tanda_pilihan
+Unpack_EndNote_filter_set=Membuka_tapisan_EndNote
+Unpacked_file.=Mengeluarkan_berkas.
+Unsupported_version_of_class_%0\:_%1=Versi_kelas_tidak_didukung_%0:_%1
+untitled=tanpa_judul
+Up=Naik
+Update_to_current_column_widths=Perbarui_sesuai_lebar_kolom_sekarang
+Updated_group_selection=Pilihan_grup_diperbarui
+Upgrade_external_links=Naiktaraf_tautan_eksternal
+Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Perbarui_tautan_eksternal_PDF/PS_untuk_digunakan_bidang_'%0'.
+Upgrade_file=Naiktaraf_berkas
+Upgrade_old_external_file_links_to_use_the_new_feature=Naiktaraf_tautan_berkas_eksternal_lama_untuk_digunakan_di_fitur_baru
+Upgraded_links.=Naiktaraf_tautan.
+UPPER=ATAS
+Upper_Each_First=Utamakan_setiap_atas
+Upper_first=Dahulukan_atas
+usage=penggunaan
+Use_antialiasing_font=Gunakan_huruf_antialiasing
+Use_autocompletion_for_the_following_fields=Gunakan_otomatis_melengkapi_pada_bidang_berikut
+Use_custom_icon_theme=Gunakan_tema_ikon_atursendiri
+Use_default_viewer=Gunakan_penampil_bawaan
+Use_inspection_window_also_when_a_single_entry_is_imported.=Gunakan_jendela_inspeksi_juga_untuk_entri_tunggal_impor
+Use_native_file_dialog=Gunakan_dialog_berkas_asli
+Use_other_look_and_feel=Gunakan_gaya_penampilan_lain
+Use_Regular_Expression_Search=Gunakan_ekspresi_pencarian_biasa
+Use_regular_expressions=Gunakan_ekspresi_reguler
+Use_the_following_delimiter_character(s)=Gunakan_karakter_pembatas_berikut
+Username_\:=Nama_pengguna_\:
+Value_cleared_externally=Isi_dihapus_dari_luar
+Value_set_externally=Isi_diatur_dari_luar
+verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=pastikan_LyX_sedang_dijalankan_dan_pipalyx_nya_benar
+View=Tampilkan
+Vim_Server_Name=Nama_Server_Vim
+Waiting_for_ArXiv...=Menunggu_ArXiv...
+Warn_about_unresolved_duplicates_when_closing_inspection_window=Peringatkan_jika_masih_ada_duplikasi_ketika_menutup_dialog
+Warn_before_overwriting_existing_keys=Peringatan_sebelum_menindih_kunci
+Warning=Peringatan
+Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Peringatan\:_tidak_bisa_menyelesaikan_perbaikan_berkas:_berkas_anda_mungkin_rusak._Pesan_kesalahan
+Warning_there_is_a_duplicate_key=Peringatan_ada_kunci_yang_sama
+Warnings=Peringatan
+web_link=tautan_web
+What_do_you_want_to_do?=Apa_yang_anda_inginkan?
+When_adding/removing_keywords,_separate_them_by=Ketika_menambah/menghapus_katakunci,_pisahkan_dengan_tanda
+Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Akan_menulis_metadata_XMP_ke_tautan_PDF_dari_entri_pilihan.
+with=dan
+Word=Word
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=Menulis_BibtexEntry_sebagai_XMP-metadata_ke_PDF.
+Write_XMP=Menulis_XMP
+Write_XMP-metadata=Menulis_XMP-metadata
+Write_XMP-metadata_for_all_PDFs_in_current_database?=Menulis_XMP-metadata_untuk_semua_PDF_di_basisdata_sekarang?
+Writing_XMP=Sedang_menulis_XMP
+Writing_XMP_metadata...=Sedang_menulis_XMP_metadata...
+Writing_XMP_metadata_for_selected_entries...=Sedang_menulis_XMP_metadata_untuk_entri_pilihan...
+Writing_XMP_to_'%0'...=Sedang_menulis_XMP_ke_'%0'...
+Wrong_file_format=Format_berkas_salah
+Wrote_XMP-metadata=XMP-metadata_ditulis
+Wrote_XMP_to_'%0'.=Selesai_ditulis_XMP_ke_'%0'.
+XMP-annotated_PDF=XMP-annotated_PDF
+XMP_Export_Privacy_Settings=Pengaturan_Info_Ekspor_XMP
+XMP_metadata=Metadata_XMP
+XMP_metadata_found_in_PDF\:_%0=XMP_metadata_ditemukan_di_PDF\:_%0
+You_must_restart_JabRef_for_this_to_come_into_effect.=Anda_harus_menjalankan_ulang_JabRef_agar_berfungsi.
+You_have_changed_the_language_setting.=Anda_telah_mengganti_pengaturan_bahasa.
+You_have_changed_the_look_and_feel_setting.=
+You_have_cleared_this_field._Original_value=Anda_sudah_membersihkan_bidang_ini._Isi_aslinya
+You_have_entered_an_invalid_search_'%0'.=Anda_telah_menulis_pencarian_yang_salah_'%0'.
+You_must_choose_a_file_name_to_store_journal_abbreviations=Anda_harus_memilih_nama_berkas_untuk_menyimpan_singkatan_jurnal
+You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Anda_harus_menjalankan_ulang_JabRef_agar_gabungan_kunci_dapat_berfungsi.
+You_must_set_both_BibTeX_key_and_%0_directory=Anda_harus_menentukan_kunci_BibTeX_dan_ditektori_%0
+Your_new_key_bindings_have_been_stored.=Gabungan_kunci_anda_sudah_disimpan.
+The_following_fetchers_are_available\:=Pengambil_berikut_tersedia\:
+Could_not_find_fetcher_'%0'=Tidak_bisa_menemukan_pengambil_'%0'
+Running_Query_'%0'_with_fetcher_'%1'.=Jalankan_Kueri_'%0'_dengan_pengambil_'%1'.
+Please_wait!=Mohon_tunggu!
+Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=Kueri_'%0'_dengan_pengambil_'%1'_tidak_ada_hasilnya.
+Open_SPIRES_entry=Buka_entri_SPIRES
+Move/Rename_file=Memindah/Menamai_berkas
+File_moved=Berkas_dipindah
+Move_file_failed=Gagal_memindah_berkas
+Could_not_move_file=Tidak_bisa_meindah_berkas
+Could_not_find_file_'%0'.=Tidak_bisa_menemukan_berkas_'%0'.
+Move/rename_file=Memindah/menamai_berkas
+Number_of_entries_successfully_imported=Jumlah_entri_yang_berhasil_diimpor
+Import_canceled_by_user=Impor_dibatalkan_oleh_pengguna
+Progress\:_%0_of_%1=Berlangsung:_%0_of_%1
+Error_while_fetching_from_JSTOR=Kesalahan_ketika_mengambil_dari_JSTOR
+Fetching_Medline_by_id...=mengambil_Medline_berdasar_id...
+Fetching_Medline_by_term...=Mengambil_Medline_berdasar_istilah...
+Medline_import_canceled=Impor_Medline_dibatalkan
+Please_enter_a_valid_number=Tuliskan_nomor_yang_benar
+Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Gunakan_pemisah_koma_dari_ID_Medline_(angka)_atau_cari_istilah.
+An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=Kesalahan_terjadi_ketika_mengambil_dari_sumber_SPIRES_
+Error_while_fetching_from_Spires\:_=Kesalahan_ketika_mengambil_dari_Spires\:_
+Connect_to_external_SQL_database=Menghubungi_basis_data_SQL_eksternal
+Export_to_external_SQL_database=Ekspor_ke_basisdata_SQL_eksternal
+Show_results_in_dialog=Tampilkan_hasil_di_dialog
+Global_search=Pencarian_global
+Show_search_results_in_a_window=Tampilkan_hasil_pencarian_di_jendela
+Search_results=Hasil_pencarian
+Move_file_to_file_directory?=Pindah_berkas_ke_direktori_berkas?
+Rename_to_'%0'=Ganti_nama_menjadi_'%0'
+Move_to_file_directory=Pindah_ke_direntori_berkas
+You_have_changed_the_menu_and_label_font_size.=
+Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Basisdata_dilindungi._Tidak_bisa_disimpan_sebelum_perubahan_eksternal_diperiksa.
+Protected_database=Basisdata_terlindungi
+Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Menolak_menyimpan_basisdata_sebelum_perubahan_eksternal_diperiksa.
+Database_protection=Perlindungan_basisdata
+Unable_to_save_database=Tidak_bisa_menyimpan_basisdata
+BibTeX_key_generator=Pembuat_kunci_BibTeX
+Unable_to_open_link.=Tidak_bisa_membuka_tautan.
+Search_JSTOR=Pencarian_JSTOR
+Attempting_SQL_import...=Mencoba_impor_SQL...
+BibO_RDF=BibO_RDF
+HTML_parser=Pengurai_HTML
+Move_the_keyboard_focus_to_the_entry_table=Pindah_fokus_papanketik_ke_tabel_entri
+MIME_type=Tipe_MIME
+This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Fitur_ini_memungkinkan_berkas_baru_atau_impor_ke_jendela_JabRef_yang_aktif<br>bukan_membuat_baru._Hal_ini_berguna_ketika_anda_membuka_berkas_di_JabRef<br>dari_halaman_web.<br>Hal_ini_ [...]
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Pengaturan_ini_hanya_mengatur_bidang_legasi_<b>pdf</b>_dan_<b>ps</b>_saja._<br>Pengguna_biasanya_cukup_mengatur_<b>Lokasi_berkas_utama</b>_diatas.
+Legacy_file_fields=Bidang_berkas_legasi
+This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Ini_membuat_JabRef_mencari_disemua_ekstensi_%0_dan_memeriksa_apakah_ada_berkas._Jika_tidak,_anda_diberi_pilihan_<BR>untuk_mengatasi_masalah.
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Jalankan_Pengambil,_misal._"--fetch=Medline\:cancer"
+The_ACM_Digital_Library=Pustaka_ACM_Dijital
+Reset=Atur_ulang
+Use_IEEE_LaTeX_abbreviations=Gunakan_singkatan_IEEE_LaTeX
+The_Guide_to_Computing_Literature=Panduan_untuk_Computing_Literature
+Search_ACM_Portal=Pencarian_Portal_ACM
+Connection_to_ACM_Portal_failed=Koneksi_ke_Portal_ACM_gagal
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=Ketika_membuka_tautan_berkas,_cari_berkas_yang_sesuai
+Settings_for_%0=Pengaturan_untuk
+Insert_selected_citations_into_Vim=Sisipkan_acuan_pilihan_ke_Vim
+RIS=RIS
+Assign_exclusively_to_group=Diterapkan_hanya_pada_grup
+Bad_Request_'%0'.=Permintaan_salah_'%0'.
+Mark_entries_imported_into_an_existing_database=Tandai_entri_impor_di_basisdata_yang_sudah_ada
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Hilangkan_tanda_semua_entri_sebelum_mengimpor_entri_baru_ke_basisdata
+Forward=Maju
+Back=Kembali
+Sort_the_following_fields_as_numeric_fields=Urutkan_bidang_berikut_sepeerti_angka
+Line_%0\:_Found_corrupted_BibTeX-key.=Baris_%0\:_Ditemukan_kunci_BibTeX_ada_kesalahan.
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Baris_%0\:_Ditemukan_kunci_BibTeX_ada_kesalahan_(mengandung_spasi_kosong).
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Baris_%0\:_Ditemukan_kunci_BibTeX_ada_kesalahan_(tidak_ada_koma).
+Finished_downloading_full_text_document=Selesai_muaturun_dokumen_teks_lengkap
+Unable_to_find_full_text_document_in_the_linked_web_page.=Tidak_bisa_menemukan_dokumen_teks_lengkap_di_tautan_halaman_web.
+Connection_error_when_trying_to_find_full_text_document.=Kesalahan_koneksi_ketika_mencari_dokumen_teks_penuh.
+This_entry_provides_no_URL_or_DOI_links.=Entri_belum_mempunyai_tautan_URL_atau_DOI.
+Full_text_article_download_failed=Gagal_muaturun_artikel_teks_lengkap
+Update_to_current_column_order=Perbarui_sebuai_urutan_kolom_sekarang
+Rename_field=Ganti_nama_bidang
+Set/clear/rename_fields=Pilih/hapus/namai_ulang_bidang
+Rename_field_to\:=Ganti_nama_bidang_menjadi\:
+Move_contents_of_a_field_into_a_field_with_a_different_name=Pindah_isi_dari_bidang_ke_bidang_lain_dengan_nama_lain
+You_can_only_rename_one_field_at_a_time=Anda_bisa_mengganti_nama_satu_bidang_dalam_satu_waktu
+Remove_all_broken_links=Hapus_semua_tautan_rusak?
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Tidak_bisa_memakai_port_%0_untuk_operasi_jauh;_aplikasi_lain_mungkin_sedang_menggunakan._Coba_port_lain.
+Plugin_installer=Pemasang_plugin
+Unable_to_create_plugin_directory=TIdak_bisa_membuat_direktori_plugin
+Unable_to_copy_file=TIdak_bisa_menyalin_berkas
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Plugin_berhasil_dipasang._Anda_harus_menjalankan_ulang_JabRef_untuk_memuat_plugin_baru.
+Unable_to_create_user_plugin_directory=Tidak_bisa_membuat_direktori_plugin_pengguna
+Plugin_installation_failed.=Pemasangan_plugin_gagal.
+The_same_version_of_this_plugin_is_already_installed.=Versi_yang_sama_dari_plugin_sudah_dipasang.
+A_newer_version_of_this_plugin_is_already_installed.=Versi_terbaru_dari_plugin_ini_sudah_dipasang.
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Satu_atau_lebih_versi_lama_dari_plugin_ini_dipasang._Hapus_versi_lama?
+Old_versions_deleted_successfully.=Versi_lama_berhasil_dihapus.
+Install_plugin=Pasang_Plugin
+Download_plugin=Muaturun_plugin
+Plugin_manager=Pengelola_plugin
+Delete_the_%0_selected_plugins?=Menghapus_%0_plugin_pilihan?
+Delete_plugins=Hapus_plugin
+Delete_the_selected_plugin?=Hapus_plugin_pilihan?
+Delete_plugin=Hapus_plugin
+Enter_download_URL=Tulis_URL_muaturun
+Plugin_name=Nama_plugin
+Version=Versi
+Unknown=Tidak_dikenal
+Not_loaded=Tidak_dimuat
+Loaded=Dimuat
+Could_not_determine_version_of_=Tidak_bisa_menentukan_versi_dari_
+Install_anyway?=Tetap_pasang?
+Looking_for_full_text_document...=Sedang_mencari_dokumen_teks_lengkap...
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Ikuti_tautan_DOI_atau_URL_dan_temukan_dokumen_PDF_lengkap
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Tidak_bisa_menemukan_artikel_teks_lengkap._Tidak_ada_algoritma_pencarian_didefinisakn_untuk_situs_'%0'.
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Menemukan_tautan_pdf,_tetapi_menerima_tipe_MIME_yang_salah._Menunjukkan_bahwa_anda_tidak_mempunyai_akses_artikel_teks_lengkap.
+Autosave=Simpan_otomatis
+Prompt_before_recovering_a_database_from_an_autosave_file=Ingatkan_ketika_ambil_ulang_basisdata_dari_berkas_simpanan_otomatis
+Autosave_interval_(minutes)=Interval_waktu_menyimpan_otomatis_(menit)
+Do_you_want_to_recover_the_database_from_the_autosave_file?=Apakah_anda_ingin_mengembalikan_basisdata_dari_berkas_simpan_otomatis?
+Recover_from_autosave=Mengambil_uland_dari_simpan_otomatis
+%0_warnings=%0_peringatan
+Save_in_current_table_sort_order=Simpan_menurut_tabel_urutan_sekarang
+Export_in_current_table_sort_order=Ekspor_menurut_tabel_urutan_sekarang
+Export_ordered_by_author/editor/year=Ekspor_dengan_urutan_penulis/penyunting/tahun
+Export_entries_in_their_original_order=Ekspor_entri_dengan_urutan_aslinya
+Error_opening_file_'%0'.=Kesalahan_ketika_membuka_berkas_'%0'.
+Autosave_of_file_'%0'=Menyimpan_otomatis_berkas_'%0'
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Kesalahan_ketika_membuka_simpanan_otomatis_'%0'._Gantinya_memuat_'%0'.
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugin_dipasang_di_direktori_pengguna_plugin_(%0)\:
+Plugins_installed_in_other_locations\:=Plugin_dipasang_di_lokasi_lain\:
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=Plugin_akan_dihapus_saat_JabRef_dijalankan_ulang.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=Plugin_akan_dihapus_saat_JabRef_dijalankan_ulang.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Versi_plugin_lama_akan_dihapus_ketika_JabRef_dijalankan_ulang.
+Formatter_not_found\:_%0=Pemformat_tidak_ditemukan\:_%0
+The_following_formatters_could_not_be_found=Pemformat_berikut_tidak_bisa_ditemukan
+Clear_inputarea=Bersihkan_area_masukan
+Automatically_set_file_links_for_this_entry=Otomatis_membuat_tautan_berkas_untuk_entri_ini
+Could_not_save,_file_locked_by_another_JabRef_instance.=Tidak_bisa_menyimpan,_berkas_dikunci_oleh_Jabref_yang_jalan.
+File_is_locked_by_another_JabRef_instance.=Berkas_dikunci_oleh_JabRef_lain.
+Do_you_want_to_override_the_file_lock?=Apakah_anda_ingin_menindih_kunci_berkas?
+File_locked=Berkas_dikunci
+Current_tmp_value=Angka_tmp_sekarang
+Metadata_change=Perubahan_Metadata
+Changes_have_been_made_to_the_following_metadata_elements=Perubahan_telah_dilakukan_pada_elemen_metadata_berikut
+Generate_groups_for_author_last_names=Membuat_grup_untuk_nama_belakang_penulis
+Generate_groups_for_editor_last_names=Membuat_grup_untuk_nama_belakang_penyunting
+Generate_groups_from_keywords_in_a_BibTeX_field=Membuat_grup_dari_katakunci_di_bidang_BibTeX
+Enforce_legal_characters_in_BibTeX_keys=Menggunakan_karakter_legal_untuk_kunci_BibTeX
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Karakter_#_tidak_diijinkan_dalam_string_BibTeX_kecuali_escape_seperti_dalam_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Sebelum_menyimpan,_mohon_ubah_string_yang_mengandung_karakter_#.
+Save_without_backup?=Simpan_tanpa_cadangan?
+Unable_to_create_backup=Tidak_bisa_membuat_cadangan
+File_directory_is_not_set_or_does_not_exist.=Lokasi_berkas_belum_ditentukan_atau_tidak_ada.
+Move_file_to_file_directory.=Pindah_berkas_ke_direktori_berkas.
+Rename_file_to=Ganti_nama_berkas_menjadi
+<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Semua_Entri</b>_(grup_ini_tidak_bisa_diubah_atau_dihapus)
+static_group=grup_statik
+dynamic_group=grup_dinamik
+refines_supergroup=memperbaiki_supergrup
+includes_subgroups=termasuk_subgrup
+contains=kandungan
+search_expression=ekspresi_pencarian
+Disable_file_renaming_in_non-native_file_dialog=Penamaan_ulang_berkas_tidak_aktif_pada_dialog_berkas_bukan_asli
+File_dialog=Dialog_berkas
+No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Entri_tidak_ditemukan._Tampaknya_anda_tidak_mempunyai_akses_pencarian_JStor.
+Search_ScienceDirect=Pencarian_ScienceDirect
+Error_while_fetching_from_ScienceDirect=Kesalahan_ketika_mengambil_dari_ScienceDirect
+Error_initializing_custom_export_format_from_string_'%0'=Ada_kesalahan_menentukan_format_ekspor_atursendiri_dari_string_'%0'
+BibLaTeX_mode=Mode_BibLaTeX
+Optional_fields_2=Bidang_tambahan_2
+Please_wait=Mohon_tunggu
+Waiting_for_save_operation_to_finish=Menunggu_proses_menyimpan_selesai
+Resolving_duplicate_BibTeX_keys...=Mengatasi_masalah_kunci_BibTeX_sama...
+Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Selesai_mengatasi_masalah_kunci_BibTeX_sama._%0_entri_diubah.
+This_database_contains_one_or_more_duplicated_BibTeX_keys.=Basisdata_ini_mempunyai_satu_atau_lebih_kunci_BibTeX_yang_sama.
+Do_you_want_to_resolve_duplicate_keys_now?=Apakah_anda_ingin_menyelesaikan_masalah_kunci_sama_sekarang?
+Find_and_remove_duplicate_BibTeX_keys=Temukan_dan_hapus_kunci_BibTeX_yang_sama
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Sintaks_yang_diharapkan_untuk_--fetch='<name_of_fetcher>:<query>'
+Duplicate_BibTeX_key=kunci_BibTeX_sama
+Duplicate_key=Kunci_sama
+Generate_key=Membuat_kunci
+Import_marking_color=Tanda_impor
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_entri_ditemukan._Untuk_mengurangi_beban,_hanya_%1_akan_dimuaturun._Akan_lambat,_agar_ACM_gembira.
+BibTeX_importer=Penimpor_BibTeX
+Always_add_letter_(a,_b,_...)_to_generated_keys=Selalu_tambah_huruf_(a,_b,_...)_untuk_kunci
+Ensure_unique_keys_using_letters_(a,_b,_...)=Pastikan_kunci_unik_dengan_huruf_(a,_b,_...)
+Ensure_unique_keys_using_letters_(b,_c,_...)=Pastikan_kunci_unik_dengan_huruf_(b,c,_...)
+Entry_editor_active_background_color=Latar_penyunting_entri_aktif
+Entry_editor_background_color=Latar_penyunting_entri
+Entry_editor_font_color=Huruf_penyunting_entri
+Entry_editor_invalid_field_color=Entri_bidang_tidak_valid
+Table_and_entry_editor_colors=Warna_tabel_dan_penyunting_entri
+An_autosave_file_was_found_for_this_database._This_could_indicate_=Berkas_hasil_simpan_otomatis_ditemukan_dalam_basisdata_ini._Hal_ini_dapat_berindikasi_
+that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=bahwa_JabRef_tidak_ditutup_dengan_benar_waktu_menggunakan_berkas.
+General_file_directory=Direktori_berkas_umum
+User-specific_file_directory=Direktori_berkas_khusus_pengguna
+Error_setting_look_and_feel=Kesalahan_pengaturan_penampilan
+Search_failed\:_illegal_search_expression=Pencarian_gagal\:_ekspresi_pencarian_tidak_benar
+Show_ArXiv_column=Tampilkan_kolom_ArXiv
+<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Menguraikan_berkas_zip_yang_mengandung_tapisan_impor/ekspor_untukEndnote,<BR>agar_dapat_optimal_digunakan_dengan_JabRef</HTML>
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Warnakan_grup_yang_mengandung_entri_pada_grup_yang_dipilih
+
+You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=Anda_harus_memasukkan_angka_bulat_antara_1025-65535_di_bidang_teks
+Automatically_open_browse_dialog_when_creating_new_file_link=Otomatis_membuka_dialog_jelajah_ketika_membuat_tautan_berkas_baru
+
+Import_Metadata_from\:=Impor_Metadata_dari\:
+Choose_the_source_for_the_metadata_import=Pilih_sumber_untuk_impor_metadata
+Create_entry_based_on_XMP_data=Membuat_entri_berasal_data_XMP
+Create_entry_based_on_data_fetched_from=Membuat_entri_berasal_dari_data_terurai
+Create_blank_entry_linking_the_PDF=Membuat_entri_kosong_tautan_PDF
+Only_attach_PDF=Hanya_lampirkan_PDF
+Mr._dLib_Metadata_Entries_Associated_With\:=Mr._dLib_Entri_Metadata_Berhubungan_dengan\:
+Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr._dLib_Entri_Metadata_Berhubungan_Dengan_Berkas_PDF
+Title=Judul
+Author(s)=Penulis
+Published_Year=Tahun_Publikasi
+No_metadata_found.=Tidak_ditemukan_metadata.
+Mr._dLib_web_service_is_temporarily_unavailable.=Layanan_web_Mr._dLib_sementara_tidak_tersedia.
+Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Layanan_web_Mr._dLib_sementara_tidak_ada._Coba_lagi_di_lain_waktu.
+You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Anda_tidak_terbubung_ke_Internet._Akses_layanan_web_Mr._dLib_memerlukan_sambungan_internet.
+No_Internet_Connection.=Konesksi_Internet_Tidak_Ada.
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Vesi_JabRef_ini_sedang_mencoba_mengakses_layanan_web_Mr._dLib_versi_lama_yang_sudah_tidak_jalan.\nSilahkan_kunjungi_http\://jabref.sourceforge.net_atau_http\://www.mr-dlib.org_untuk_informasi_lanjut_dan_pembaruan.
+Web_Service_Version_Outdated=Versi_Layanan_Web_Kedaluarsa
+The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Versi_layanan_web_Mr.dLib_yang_anda_akses_sudah_kedaluarsa.
+Update_empty_fields_with_data_fetched_from=Perbarui_bidang_kosong_dengan_data_dari_yang_diurai
+Create_New_Entry=membuat_Entri_Baru
+Update_Existing_Entry=Perbarui_Entri_Yang_Sudah_Ada
+Mr._dLib=Mr._dLib
+More_information=Informasi_lain
+Fetching_Metadata...=Proses_Menguraikan_Metadata..
+Metadata=Metadata
+Autocomplete_names_in_'Firstname_Lastname'_format_only=Nama_isian_otomatis_hanya_untuk_format_'Namadepan_Namaakhir'
+Autocomplete_names_in_'Lastname,_Firstname'_format_only=Nama_isian_otomatis_hanya_untuk_format_'Namaakhir,_Namadepan'
+Autocomplete_names_in_both_formats=Nama_isian_otomatis_untuk_kedua_format
+Marking_color_%0=Tanda_warna_%0
+The_name_'comment'_can_not_be_used_as_an_entry_type_name.=Nama_'kometar'_tidak_dapat_digunakan_sebagai_tipe_nama_entri.
+You_must_enter_an_integer_value_in_the_text_field_for=Anda_harus_menggunakan_bilangan_bulat_di_bidang_teks_untuk
+File_directory=Direktori_berkas
+Send_as_email=Kirim_sebagai_email
+References=Referensi
+Sending_of_emails=Sedang_Mengirim_email
+Subject_for_sending_an_email_with_references=Subyek_untuk_mengirim_email_dengan_referensi
+Automatically_open_folders_of_attached_files=Otomatis_membuka_direktori_lampiran_berkas
+Create_entry_based_on_content=Membuat_entri_dari_isi_kandungan
+Store_choice_as_default=Simpan_pilihan_sebagai_bawaan
+Do_not_show_this_box_again_for_this_import=Tidak_menampilkan_kotak_ini_lagi_saat_impor
+Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Selalu_menggunakan_Impor_PDF_(tidak_menanyakan_lagi_ketika_impor)
+Error_creating_email=Gagal_menulis_email
+Could_not_open_directory=Tidak_bisa_membuka_direktori
+Entries_added_to_an_email=Entri_ditambahkan_di_emel
+exportFormat=FormatEkspor
+Output_file_missing=Berkas_keluaran_hilang
+No_search_matches.=Carian_tidak_ditemukan.
+The_output_option_depends_on_a_valid_input_option.=Pilihan_keluaran_tergantung_dari_pilihan_masukan_yang_tepat.
+Default_import_style_for_drag&drop_of_PDFs=Gaya_impor_bawaan_PDF_untuk_seret_dan_masuk
+Default_PDF_file_link_action=Aksi_tautan_PDF_bawaan
+File_name_format_pattern=Pola_format_nama_berkas
+PostgreSQL_database=Basisdata_PostgreSQL
+DIN_1505=DIN_1505
+Wrong_Format=Format_Salah
+Path_to_gnuclient_or_emacsclient=Lokasi_gnuclient_atau_emacsclient
+Additional_parameters=Parameter_tambahan
+Encrypted_documents_are_not_supported=Dokumen_terenkripsi_tidak_didukung
+Cite_selected_entries=Entri_acuan_pilihan
+Cite_selected_entries_with_in-text_citation=Entri_acuan_pilihan_dengan_acuan_dalam_teks
+Cite_special=Acuan_spesial
+Extra_information_(e.g._page_number)=Informasi_ekstra_(misal,_nomor_halaman)
+Manage_citations=Pengelolaan_acuan
+Problem_modifying_citation=Perubahan_acuan_bermasalah
+Citation=Acuan
+Context=Konteks
+Extra_information=Informasi_ekstra
+Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=Tidak_bisa_memperbaiki_entri_BibTeX_untuk_penanda_acuan_'%0'.
+Styles=Gaya
+Select_style=Pilih_gaya
+This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Ini_adalah_daftar_gaya_yang_tersedia._Pilih_salah_satu_yang_akan_dipakai.
+Journals=Jurnal
+Cite=Acuan
+Cite_in-text=Acuan_dalam_teks
+Insert_empty_citation=Sisipkan_acuan_kosong
+Merge_citations=Gabung_acuan
+Manual_connect=Penautan_manual
+Select_Writer_document=Pilih_penyunting_dokumen
+Sync_OO_bibliography=Sinkr_bibliografi_OO
+OpenOffice=OpenOffice
+Select_which_open_Writer_document_to_work_on=Pilih_penyunting_open_Writer_yang_digunakan
+Connected_to_document=Ditautkan_ke_dokumen
+Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Sisipkan_acuan_tanpa_teks_(entri_akan_muncul_dalam_daftar_acuan)
+Cite_selected_entries_with_extra_information=Acu_entri_pilihan_dengan_informasi_ekstra
+Ensure_that_the_bibliography_is_up-to-date=Pastikan_bahwa_bibliografi_adalah_yang_mutakhir
+Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=Acuan_dokumen_OpenOffice_dengan_kunci_BibTeX_'%0',_yang_tidak_ditemukan_dalam_basisdata_sekarang.
+Unable_to_synchronize_bibliography=Tidak_bisa_mensinkronkan_bibliografi
+Combine_pairs_of_citations_that_are_separated_by_spaces_only=Menggabungkan_pasangan_acuan_yang_dipisahkan_hanya_dengan_spasi
+Autodetection_failed=Deteksi_otomatis_gagal
+Connecting=Sedang_menyambungkan
+Please_wait...=Mohon_tunggu...
+Unable_to_connect=Tidak_bisa_tersambung
+Set_connection_parameters=Atur_parameter_sambungan
+Path_to_OpenOffice_directory=Lokasi_direktori_OpenOffice
+Path_to_OpenOffice_executable=Lokasi_program_OpenOffice
+Path_to_OpenOffice_library_dir=Lokasi_pustaka_OpenOffice
+Autodetect=DeteksiOtomatis
+Connection_lost=Sambungan_terlepas
+The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Format_paragraf_diatur_melalui_'FormatAcuanParagraf'_atau_'KepalaAcuan'
+The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Format_karakter_iatur_melalui_pengaturan_acauan_'FormatKarakterAcuan'_dalam_berkas_gaya.
+Automatically_sync_bibliography_when_inserting_citations=Otomatis_sinkr_bibliografi_ketika_menyisipkan_acuan
+Look_up_BibTeX_entries_in_the_active_tab_only=Mencari_entri_BibTeX_hanya_di_basisdata_yang_aktif
+Look_up_BibTeX_entries_in_all_open_databases=Mencari_entri_BibTeX_di_semua_basisdata_yang_dibuka
+Use_in-parenthesis_citation=Menggunakan_acauan_dalam_tanda_petik
+Use_in-text_citation=Menggunakan_acuan_dalam_teks
+Autodetecting_paths...=Deteksi_otomatis_lokasi...
+Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=Tidak_bisa_mengenal_instalasis_OpenOffice._Mohon_tuliskan_direktori_instalasi_secara_manual.
+Could_not_find_OpenOffice_installation=Tidak_bisa_menemukan_instalasi_OpenOffice
+Directories=Daftar_Direktori
+Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Menemukan_lebih_dari_satu_program_OpenOffice._Pilih_salah_satu_yang_akan_disambung
+Choose_OpenOffice_executable=Pilih_program_OpenOffice
+Select_document=Pilih_dokumen
+Edit_Group_Membership=Sunting_Aggota_Grup
+PostgreSQL=PostgreSQL
+Highlight_Words=Tandai_Kata
+JSTOR_import_cancelled=Impor_JSTOR_dibatalkan
+HTML_list=Daftar_HTML
+Click_group_to_toggle_membership_of_selected_entries=Klik_grup_untuk_masuk_ke_anggota_dari_entri_pilihan
+Use_EMACS_23_insertion_string=Gunakan_EMACS_23_sisipan_karakter
+Normalize_to_BibTeX_name_format=Menyesuaikan_ke_nama_format_BibTeX
+If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=Jika_memungkinkan,_sesuaikan_daftar_nama_untuk_mengikuti_format_penamaan_BibTeX
+Could_not_open_%0=Tidak_bisa_membuka_%0
+Unknown_import_format=Format_impor_tidak_dikenal
+Open_INSPIRE_entry=Buka_entri_INSPIRE
+An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=Terjadi_kesalahan_ketika_mengambik_sumber_INSPIRE_(%0)\:
+Error_while_fetching_from_Inspire\:_=Terjadi_kesalahan_ketika_mengambil_dari_Inspire\:_
+Web_search=Pencarian_Web
+Autocomplete_names=Pengisian_otomatis_nama
+You_must_select_either_a_valid_style_file,_or_use_the_default_style.=Anda_harus_memilih_gaya_berkas_yang_sah,_atau_gunakan_gaya_bawaan.
+
+Default_style=Gaya_bawaan
+Choose_style_file_directly=Pilih_gaya_berkas_secara_langsung
+Choose_from_a_directory=Pilih_dari_satu_direktori
+No_directory_defined_for_%0-files=Direktori_tidak_dinyatakan_untuk_berkas_%0
+Allow_file_links_relative_to_each_bib_file's_location=Membolehkan_lokasi_tautan_berkas_relatif_untuk_tiap-tiap_berkas_bib
+Style_selection=Pilihan_gaya
+The_panel_below_shows_the_definition_of_the_default_style.=Panel_dibawah_menampilkan_definisi_dari_gaya_bawaan
+If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=Jika_anda_menginginkan_sebagai_templet_untuk_gaya_baru,_anda_bisa_menyalin_isi_ke_berkas_baru_.jstyle
+
+Default_style_(author-year_citations)=
+Default_style_(numerical_citations)=
+No_valid_style_file_defined=
+Choose_pattern=
+Use_the_bib_file_location_as_primary_file_directory=
+Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=
+Built-in_journal_list=
+OpenOffice/LibreOffice_connection=
+You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=
+JabRef_includes_a_built-in_list_of_journal_abbreviations.=
+You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=
+You_must_select_either_a_valid_style_file,_or_use_a_default_style.=
+
+Show=
+This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=
+Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=
+
+This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=
+You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=
+First_select_entries_to_clean_up.=
+Cleanup_entry=
+Autogenerate_PDF_Names=
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=
+File_rename_failed_for=
+You_have_toggled_the_BibLaTeX_mode.=
+Use_full_firstname_whenever_possible=
+Use_abbreviated_firstname_whenever_possible=
+Use_abbreviated_and_full_firstname=
+Autocompletion_options=
+Autocomplete_after_following_number_of_characters=
+Name_format_used_for_autocompletion=
+Treatment_of_first_names=
+No_icon_found_for_%0=
+Cleanup_entries=
+Automatically_assign_new_entry_to_selected_groups=
+Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
+Format_content_of_month_field_to_#mon#=
+Ensure_that_page_ranges_are_of_the_form_num1--num2=
+Make_paths_of_linked_files_relative_(if_possible)=
+Rename_PDFs_to_given_file_name_format_pattern=
+Rename_only_PDFs_having_a_relative_path=
+What_would_you_like_to_clean_up?=
+Doing_a_cleanup_for_%0_entries...=
+No_entry_needed_a_clean_up=
+One_entry_needed_a_clean_up=
+%0_entries_needed_a_clean_up=
+Imported_=
+Error_importing_from_database=
+Minimize_to_system_tray=
+
+Incomplete_search_results=
+%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=
+
+Error_downloading_file_'%0'=
+Download_failed=
+
+%0_databases_will_be_imported=
+Importing_cancelled=
+There_are_no_available_databases_to_be_imported=
+Import_from_SQL_database=
+Imported_%0_databases_successfully=
+<_CREATE_NEW_DATABASE_>=
+Remove_Selected=
+SQL_Database_Exporter=
+Select_target_SQL_database\:=
+SQL_Database_Importer=
+Please_select_which_JabRef_databases_do_you_want_to_import\:=
+
+Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
+Attach_file=
+
+Setting_all_preferences_to_default_values.=
+Resetting_preference_key_'%0'=
+Unknown_preference_key_'%0'=
+Unable_to_clear_preferences.=
+
+Reset_preferences_(key1,key2,..._or_'all')=
+Find_unlinked_files=
+Select_All=
+Unselect_All=
+Expand_All=
+Collapse_All=
+Select_Directory=
+Choose_Directory=
+Use_the_selected_directory_to_start_with_the_search.=
+Browse...=
+Opens_the_file_browser.=
+Scan_directory=
+Searches_the_selected_directory_for_unlinked_files.=
+Starts_the_import_of_bibtex_entries.=
+Leave_this_dialog.=
+Create_directory_based_keywords=
+Creates_keywords_in_created_entrys_with_directory_pathnames=
+Select_a_directory_where_the_search_shall_start.=
+Select_file_type\:=
+These_files_are_not_linked_in_the_active_database.=
+Entry_type_to_be_created\:=
+Searching_file_system...=
+Importing_into_Database...=
+Select_directory=
+Select_files=
+Bibtex_entry_creation=
+<No_selection>=
+Push_selection_to_TeXstudio=
+Path_to_TeXstudio=
+Program_'%0'_not_found=
+Pushed_citations_to_TeXstudio=
+Unable_to_connect_to_freecite_online_service.=
+Parse_with_FreeCite=
+Insert_selected_citations_into_TeXstudio=
+The_current_BibTeX_key_will_be_overwritten._Continue?=
+Overwrite_key=
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
+An_Error_occurred_while_fetching_from_ADS_(%0)\:=
+Error_while_fetching_from_ADS=
+Error_while_fetching_from_OAI2=
+An_Error_occurred_while_parsing_abstract=
+Unknown_DiVA_entry\:_'%0'.=
+Get_BibTeX_entry_from_DiVA=
+Log=
+Remove_unneccessary_$,_{,_and_}=
diff --git a/src/resource/JabRef_it.properties b/src/resource/JabRef_it.properties
index f93327d..2af4c93 100644
--- a/src/resource/JabRef_it.properties
+++ b/src/resource/JabRef_it.properties
@@ -1,1686 +1,1686 @@
-#!
-#! edited by Eclipse PropertiesEditor
-#! encoding:ISO-8859-1
-%0_contains_the_Regular_Expression_<b>%1</b>=%0_contiene_l'Espressione_Regolare_<b>%1</b>
-%0_contains_the_term_<b>%1</b>=%0_contiene_il_termine_<b>%1</b>
-%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_non_contiene_l'Espressione_Regolare_<b>%1</b>
-%0_doesn't_contain_the_term_<b>%1</b>=%0_non_contiene_il_termine_<b>%1</b>
-%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_non_corrisponde_all'Espressione_Regolare_<b>%1</b>
-%0_doesn't_match_the_term_<b>%1</b>=%0_non_corrisponde_al_termine_<b>%1</b>
-
-%0_export_successful=%0_esportazioni_riuscite
-%0_field_set=Definizione_del_campo_%0
-%0_matches_the_Regular_Expression_<b>%1</b>=%0_corrisponde_all'Espressione_Regolare_<b>%1</b>
-%0_matches_the_term_<b>%1</b>=%0_corrisponde_al_termine_<b>%1</b>
-<field_name>=<nome_del_campo>
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Non_\u00e8_stato_trovato_il_file_'%0'_<BR>collegato_alla_voce_'%1'</HTML>
-<no_field>=<nessun_campo>
-<select>=<seleziona>
-<select_word>=<select_word>
-A_string_with_this_label_already_exists=Una_stringa_con_questa_etichetta_esiste_gi\u00e0
-Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Abbrevia_i_nomi_dei_giornali_delle_voci_selezionate_(abbreviazioni_ISO)
-Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Abbrevia_i_nomi_dei_giornali_delle_voci_selezionate_(abbreviazioni_MEDLINE)
-Abbreviate_names=Abbrevia_i_nomi
-Abbreviated_%0_journal_names.=%0_nomi_di_riviste_abbreviati.
-Abbreviation=Abbreviazione
-About_JabRef=Informazioni_su_JabRef
-Abstract=Riassunto
-Accept=Accetta
-Accept_change=Accetta_la_modifica
-Action=Azione
-Add=Aggiungi
-Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Aggiungi_una_classe_ImportFormat_personalizzata_(compilata)_da_un_percorso._\nIl_percorso_non_deve_necessariamente_essere_nel_classpath_di_JabRef.
-Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Aggiungi_una_classe_ImportFormat_personalizzata_(compilata)_da_un_archivio_ZIP._\nL'archivio_ZIP_non_deve_necessariamente_essere_nel_classpath_di_JabRef.
-add_entries_to_group=aggiungi_voci_ad_un_gruppo
-Add_entry_selection_to_this_group=Aggiungi_le_voci_selezionate_a_questo_gruppo
-Add_from_folder=Aggiungi_da_una_cartella
-Add_from_jar=Aggiungi_da_un_file_jar
-add_group=aggiungi_un_gruppo
-Add_Group=Aggiungi_un_gruppo
-Add_new=Aggiungi_nuovo
-Add_Subgroup=Aggiungi_un_sottogruppo
-Add_to_group=Aggiungi_al_gruppo
-Added_group_"%0".=Aggiunto_gruppo_"%0".
-Added_new=Aggiunto_nuovo
-Added_string=Aggiunta_stringa
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Inoltre,_le_voci_il_cui_campo_<b>%0</b>_non_contiene_<b>%1</b>_possono_ [...]
-Advanced=Avanzate
-All_custom_file_types_will_be_lost._Proceed?=Tutti_i_tipi_di_file_personalizzati_andranno_perduti._Continuare?
-All_Entries=Tutte_le_voci
-All_entries=Tutte_le_voci
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Tutte_le_voci_di_questo_tipo_saranno_definite_'senza_tipo'._Continuare?
-All_fields=Tutti_i_campi
-All_subgroups_(recursively)=Tutti_i_sottogruppi_(ricorsivamente)
-Allow_editing_in_table_cells=Consenti_la_modifica_nelle_celle_della_tabella
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Si_\u00e8_verificato_un_errore_durante_il_recupero_dalla_fonte_OAI2_(%0):
-An_Exception_ocurred_while_accessing_'%0'=Eccezione_durante_l'accesso_a_'%0'
-An_SAXException_ocurred_while_parsing_'%0'\:=Eccezione_SAX_durante_l'elaborazione_di_'%0':
-and=e
-and_inside_the_JabRef-jar\:=e_nel_file_jar_di_JabRef:
-and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=e_la_classe_deve_essere_nel_tuo_"classpath"_al_successivo_avvio_di_JabRef.
-any_field_that_matches_the_regular_expression_<b>%0</b>=qualsiasi_campo_che_corrisponda_all'espressione_regolare_<b>%0</b>
-Appearance=Aspetto
-Append=Accoda
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Accoda_il_contenuto_di_un_database_BibTeX_al_database_corrente
-Append_database=Accoda_database
-append_the_selected_text_to_bibtex_key=accoda_il_testo_selezionato_alla_chiave_BibTeX
-Application=Applicazione
-Apply=Applica
-Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argomenti_passati_all'istanza_attiva_di_JabRef._Chiusura_in_corso.
-Assign_entry_selection_exclusively_to_this_group=Assegna_le_voci_selezionate_esclusivamente_a_questo_gruppo
-Assign_new_file=Assegna_un_nuovo_file
-Assign_the_original_group's_entries_to_this_group?=Assegnare_le_voci_originali_del_gruppo_a_questo_gruppo?_
-Assigned_%0_entries_to_group_"%1".=Assegnate_%0_voci_al_gruppo_"%1".
-Assigned_1_entry_to_group_"%0".=Una_voce_assegnata_al_gruppo_"%0".
-At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=Almeno_il_plug-in_'net.sf.jabref.core'_dovrebbe_essere_qui.
-Attach_%0_file=Allega_%0_file
-Attach_URL=Allega_URL
-Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Tentativo_di_definire_automaticamente_%0_collegamenti_per_le_tue_voci._La_definizione_avviene_automaticamente_se_un_file_%0_nella_cartella_%0_o_sottocartella<BR>ha_lo_stesso_nome_della_chiave_di_una_voce_BibTeX,_a_meno_dell'estensione.
-Attempting_SQL_export...=Tentativo_di_esportazione_SQL...
-Auto=Auto
-Autodetect_format=Rivelamento_automatico_del_formato
-Autogenerate_BibTeX_key=Generazione_automatica_della_chiave_BibTeX
-Autogenerate_BibTeX_keys=Generazione_automatica_delle_chiavi_BibTeX
-Autogenerate_groups=Generazione_automatica_dei_gruppi
-autogenerate_keys=generazione_automatica_delle_chiavi
-
-
-Autolink_files_with_names_starting_with_the_BibTeX_key=Collegare_automaticamente_i_file_con_nome_che_inizia_con_la_chiave_BibTeX
-Autolink_only_files_that_match_the_BibTeX_key=Collegare_automaticamente_solo_i_file_con_nome_corrispondente_alla_chiave_BibTeX
-Automatically_create_groups=Crea_automaticamente_i_gruppi
-Automatically_create_groups_for_database.=Crea_automaticamente_i_gruppi_per_il_database
-Automatically_created_groups=Gruppi_creati_automaticamente
-Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Nascondi_automaticamente_l'interfaccia_dei_gruppi_nel_passare_ad_un_database_che_non_contiene_gruppi
-
-Automatically_remove_exact_duplicates=Rimuovi_automaticamente_i_duplicati_esatti
-Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Mostra_automaticamente_l'interfaccia_dei_gruppi_nel_passare_ad_un_database_che_contiene_gruppi
-Autoset=Definisci_automaticamente
-Autoset_%0_field=Definisci_automaticamente_il_campo_%0
-Autoset_%0_links._Allow_overwriting_existing_links.=Definisci_automaticamente_%0_collegamenti._Consenti_la_sovrascrittura_dei_collegamenti_esistenti.
-Autoset_%0_links._Do_not_overwrite_existing_links.=Definisci_automaticamente_%0_collegamenti._Non_consentire_la_sovrascrittura_dei_collegamenti_esistenti.
-Autoset_external_links=Impostazione_automatica_dei_collegamenti_esterni
-Autosetting_links=Impostazione_automatica_dei_collegamenti
-AUX_file_import=Importa_file_AUX
-Available_export_formats=Formati_di_esportazione_disponibili
-Available_fields=Campi_BibTeX_disponibili
-Available_import_formats=Formati_di_importazione_disponibili
-Background_color_for_optional_fields=Colore_di_sfondo_per_i_campi_facoltativi
-Background_color_for_required_fields=Colore_di_sfondo_per_i_campi_obbligatori
-Backup_old_file_when_saving=Fare_una_copia_di_backup_del_vecchio_file_quando_viene_salvato
-Beta_version=Versione_Beta
-Bibkey_to_filename_conversion=Conversione_della_chiave_BibTeX_in_nome_del_file
-BibTeX_key=Chiave_BibTeX
-BibTeX_key_is_unique.=La_chiave_BibTeX_\u00e8_unica.
-BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Chiave_BibTeX_non_definita._Inserire_un_nome_per_il_file_scaricato
-BibTeX_source=Sorgente_BibTeX
-BibTeXML=BibTeXML
-# Usually used the english word.
-Binding=Binding
-Broken_link=Collegamento_interrotto
-Browse=Sfoglia
-# Unsure how to translate out of context
-by=da
-Calling_external_viewer...=Chiamata_a_visualizzatore_esterno...
-Cancel=Annulla
-Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Le_voci_non_possono_essere_inserite_in_un_gruppo_se_prive_di_chiave._Generare_le_chiavi_ora?
-Cannot_merge_this_change=Questa_modifica_non__pu\u00f2_essere_incorporata
-Cannot_move_group_"%0"_down.=Impossibile_spostare_il_gruppo_"%0"_in_gi\u00f9
-Cannot_move_group_"%0"_left.=Impossibile_spostare_il_gruppo_"%0"_a_sinistra
-Cannot_move_group_"%0"_right.=Impossibile_spostare_il_gruppo_"%0"_a_destra
-Cannot_move_group_"%0"_up.=Impossibile_spostare_il_gruppo_"%0"_in_su
-case_insensitive=non_distingue__maiuscole_e_minuscole
-case_sensitive=distingue__maiuscole_e_minuscole
-Case_sensitive=Distingue__maiuscole_e_minuscole
-change_assignment_of_entries=modifica_l'assegnazione_delle_voci
-Change_case=Inverti_maiuscolo/minuscolo
-Change_entry_type=Cambia_tipo_di_voce
-
-Change_file_type=Cambia_il_tipo_di_file
-change_key=modifica_la_chiave_BibTeX
-Change_of_Grouping_Method=Cambia_Metodo_di_Raggruppamento
-change_preamble=modifica_il_preambolo
-change_string_content=modifica_il_contenuto_della_stringa
-change_string_name=modifica_il_nome_della_stringa
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=Modificare_le_colonne_della_tabella_e_le_impostazioni_dei_campi_generali_per_utilizzare_la_nuova_funzione
-change_type=cambia_tipo
-changed_=cambiato_
-Changed_font_settings=Parametri_dei_font_modificati
-Changed_language_settings=Parametri_della_lingua_modificati
-Changed_look_and_feel_settings=Parametri_del_"Look-and-Feel"_modificati
-Changed_preamble=Preambolo_modificato
-Changed_type_to=Tipo_cambiato_in_
-Characters_to_ignore=Caratteri_da_ignorare
-# Unsure. Is %0 the number of links?
-Check_existing_%0_links=Verificare_i_%0_collegamenti_esistenti
-Check_links=Verificare_i_collegamenti
-Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Scegliere_l'URL_da_scaricare._Il_valore_predefinito_punta_ad_una_lista_fornita_dagli_sviluppatori_di_JabRef
-Cite_command=Comando_Cite
-Class_name=Nome_della_classe
-Clear=Svuota
-clear_all_groups=svuota_tutti_i_gruppi
-Clear_field=Svuota_il_campo
-
-Clear_fields=Annulla_i_campi
-# Unsure the translation below
-Clear_highlight=Rimuovi_l'evidenziazione
-Close=Chiudi
-Close_dialog=Chiudi_la_finestra_di_dialogo
-Close_the_current_database=Chiudi_il_database_corrente
-Close_the_help_window=Chiudi_la_finestra_di_aiuto
-Close_window=Chiudi_la_finestra
-Closed_database=Database_chiuso
-Collapse_subtree=Collassa_il_sotto-albero
-Color_codes_for_required_and_optional_fields=Codifica_a_colori_per_campi_obbligatori_e_opzionali
-Color_for_marking_incomplete_entries=Colore_per_contrassegnare_voci_incomplete
-Column_width=Larghezza_della_colonna
-Command_line_id=Identificativo_della_riga_di_comando
-# Not sure: "Registrazione completa" ?
-Complete_record=Completa_la_registrazione
-Connect=Connessione
-Connect_to_SQL_database=Connessione_ad_un_database_SQL
-Connect_to_SQL_Database=Connessione_ad_un_Database_SQL
-Connection_to_IEEEXplore_failed=Connessione_a_IEEEXplore_fallita
-Contained_in=Contenuto_in
-Content=Contenuto
-Copied=Copiato
-Copied_cell_contents=Contenuto_delle_celle_copiato
-Copied_key=Chiave_BibTeX_copiata
-Copied_keys=Chiavi_BibTeX_copiate
-Copy=Copia
-Copy_BibTeX_key=Copia_chiave_BibTeX
-Copy_file_to_file_directory.=Copia_il_file_nella_cartella_dei_file.
-Copy_files_to_file_directory.=Copia_i_file_nella_cartella_dei_file.
-Copy_to_clipboard=Copia_negli_appunti
-Could_not_call_executable=Non_\u00e8_possibile_effetuare_la_chiamata_dell'eseguibile
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Impossibile_la_connessione_a_un_processo_gnuserv_in_esecuzione._Accertarsi_che_Emacs_o_XEmacs_siano_in_esecuzione,<BR>e_che_il_server_sia_stato_avviato_(con_il_comando_'gnuserv-start').
-Could_not_connect_to_host_=Impossibile_connettersi_all'host_
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Impossibile_stabilire_la_connessione_al_server_Vim.<BR>Assicurarsi_che_Vim_sia_in_esecuzione_con_il_nome_di_server_corretto.
-Could_not_export_file=Impossibile_esportare_il_file
-Could_not_export_preferences=Impossibile_esportare_le_preferenze
-Could_not_find_a_suitable_import_format.=Impossibile_trovare_un_formato_di_importazione_adeguato
-Could_not_find_directory_for_%0-files\:_%1=Impossibile_trovare_la_cartella_per_i_file_%0:_%1
-Could_not_find_image_file=Il_file_di_immagini_non_\u00e8_stato_trovato
-Could_not_find_layout_file=Impossibile_trovare_il_file_di_layout
-Could_not_import_preferences=Impossibile_importare_le_preferenze
-Could_not_instantiate_%0=Impossibile_inizializzare_%0
-Could_not_instantiate_%0_%1=Impossibile_inizializzare_%0_%1
-Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Impossibile_inizializzare_%0._Verificare_il_"package_path".
-
-
-Could_not_open_link=Impossibile_aprire_il_collegamento
-Could_not_parse_number_of_hits=Impossibile_determinare_il_numero_di_risultati
-Could_not_print_preview=Impossibile_visualizzare_l'anteprima_di_stampa
-Could_not_run_the_'vim'_program.=Impossibile_eseguire_il_programma_'vim'.
-Could_not_save_file=Impossibile_salvare_il_file
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Impossibile_salvare_il_file._La_codifica_dei_caratteri_'%0'_non_\u00e8_supportata.
-Create_group=Crea_gruppo
-Created_groups.=Gruppi_creati
-crossreferenced_entries_included=Incluse_le_voci_con_riferimenti_incrociati
-Current_content=Contenuto_corrente
-Current_value=Valore_corrente
-Custom_entry_types=Tipi_di_voce_personalizzati
-Custom_entry_types_found_in_file=Tipi_di_voce_personalizzati_trovati_nel_file
-Custom_icon_theme=Tema_di_icone_personalizzato
-Custom_icon_theme_file=File_di_tema_di_icone_personalizzato
-Custom_importers=Importazioni_personalizzate
-Customize_entry_types=Personalizza_tipi_di_voce
-Customize_key_bindings=Personalizza_combinazioni_di_tasti
-Cut=Taglia
-cut_entries=Taglia_voci
-cut_entry=taglia_voce
-Cut_pr=Taglia
-Database_\:=Database:
-Database_encoding=Codifica_database
-Database_has_changed._Do_you_want_to_save_before_closing?=Il_database_\u00e8_stato_modificato._Vuoi_salvare_prima_di_chiudere?
-Database_properties=Propriet\u00e0_del_database
-Date_format=Formato_data
-Default=Predefinito
-Default_encoding=Codifica_predefinita
-Default_grouping_field=Campo_di_raggruppamento_predefinito
-Default_look_and_feel="Look-and-Feel"_predefinito
-Default_pattern=Modello_predefinito
-Default_sort_criteria=Criterio_di_ordinamento_predefinito
-Define_'%0'=Definisci_'%0'
-Delete=Cancella
-Delete_custom_format=Cancella_i_formati_personalizzati
-delete_entries=Cancella_le_voci
-Delete_entry=Cancella_la_voce
-delete_entry=cancella_la_voce
-Delete_multiple_entries=Cancella_pi\u00f9_voci
-Delete_rows=Cancella_voci
-Delete_strings=Cancella_stringhe
-Deleted=Cancellato
-Delimit_fields_with_semicolon,_ex.=Campi_delimitati_da_punto_e_virgola,_ex.
-Descending=Discendente
-Description=Descrizione
-Deselect_all=Deseleziona_tutto
-Deselect_all_duplicates=Deseleziona_tutti_i_duplicati
-Details=Dettagli
-Disable_entry_editor_when_multiple_entries_are_selected=Disabilita_la_modifica_in_caso_di_selezioni_multiple
-Disable_this_confirmation_dialog=Disabilita_la_richiesta_di_conferma
-Disable_this_warning_dialog=Disabilita_questo_messaggio_di_avvertimento
-Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Mostra_tutte_le_voci_appartenenti_a_uno_o_pi\u00f9_gruppi_tra_quelli_selezionati.
-Display_all_error_messages=Mostra_tutti_i_messaggi_di_errore
-Display_help_on_command_line_options=Mostra_l'aiuto_sulle_opzioni_della_riga_di_comando
-Display_imported_entries_in_an_inspection_window_before_they_are_added.=Mostra_le_voci_importate_in_una_finestra_d'anteprima_prima_di_aggiungerle.
-Display_only_entries_belonging_to_all_selected_groups.=Mostra_solo_le_voci_appartenenti_a_tutti_i_gruppi_selezionati.
-
-Display_version=Versione
-Displaying_no_groups=Nessun_gruppo_da_visualizzare
-Do_not_abbreviate_names=Non_abbreviare_i_nomi
-Do_not_autoset=Non_effettuare_definizioni_automatiche
-Do_not_import_entry=Non_importare_la_voce
-Do_not_open_any_files_at_startup=Non_aprire_nessun_file_all'avvio
-Do_not_overwrite_existing_keys=Non_sovrascrivere_chiavi_esistenti
-Do_not_show_splash_window_at_startup=Non_mostrare_la_schermata_d'avvio
-Do_not_show_these_options_in_the_future=Non_mostrare_queste_opzioni_in_futuro
-Do_not_wrap_the_following_fields_when_saving=Non_mandare_a_capo_i_campi_seguenti_salvando_il_file
-
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Non_scrivere_i_dati_dei_campi_seguenti_nei_metadati_XMP:
-
-Do_you_want_JabRef_to_do_the_following_operations?=Vuoi_che_JabRef_esegua_le_operazioni_seguenti?
-DocBook=DocBook
-Down=Gi\u00f9
-Download=Download
-Download_completed=Download_terminato
-Download_file=Scarica_il_file
-Downloading...=Download_in_corso...
-Drag_and_Drop_Error=Errore_di_'Drag_&_Drop'
-# Check translation below
-Drop_%0=Rilascia_%0
-duplicate_BibTeX_key=chiave_BibTeX_duplicata
-Duplicate_BibTeX_key.=Chiave_BibTeX_duplicata.
-Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Chiave_BibTeX_duplicata._I_raggruppamenti_potrebbero_non_essere_corretti_per_questa_voce.
-Duplicate_Key_Warning=Attenzione:_chiave_duplicata
-Duplicate_pairs_found=Trovati_doppioni
-duplicate_removal=rimozione_di_doppioni
-Duplicate_string_name=Nome_di_stringa_duplicato
-Duplicates_found=Trovati_doppioni
-Duplicates_removed=Doppioni_rimossi
-Dynamic_groups=Gruppi_dinamici
-
-Dynamically_group_entries_by_a_free-form_search_expression=Raggruppa_dinamicamente_le_voci_utilizzando_una_espressione_di_ricerca_in_formato_libero
-Dynamically_group_entries_by_searching_a_field_for_a_keyword=Raggruppa_dinamicamente_le_voci_ricercando_una_parola_chiave_in_un_campo
-Each_line_must_be_on_the_following_form=Ciascuna_linea_deve_essere_nel_formato_seguente
-Edit=Modifica
-Edit_custom_export=Modifica_l'esportazione_personalizzata
-Edit_entry=Modifica_voce
-Edit_file_link=Modifica_il_collegamento_al_file
-Edit_file_type=Modifica_il_tipo_di_file
-Edit_group=Modifica_il_gruppo
-Edit_journal=Modifica_la_rivista
-Edit_preamble=Modifica_il_preambolo
-Edit_strings=Modifica_le_stringhe
-Editor_options=Opzioni_dell'editor
-empty_BibTeX_key=chiave_BibTeX_vuota
-Empty_BibTeX_key.=Chiave_BibTeX_vuota
-Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Chiave_BibTeX_vuota._La_gestione_dei_gruppi_potrebbe_non_funzionare_per_questa_voce.
-empty_database=database_vuoto
-Enable_source_editing=Abilita_la_modifica_del_codice_sorgente
-Enable_word/name_autocompletion=Abilita_autocompletamento_di_parole/nomi
-Endnote=Endnote
-Enter_URL=Immettere_l'URL
-Enter_URL_to_download=Immettere_l'URL_da_scaricare
-entries=voci
-Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Le_voci_non_possono_essere_inserite_o_rimosse_manualmente_da_questo_gruppo.
-Entries_exported_to_clipboard=Voci_esportate_negli_appunti
-entries_have_undefined_BibTeX_key=Delle_voci_hanno_chiavi_BibTeX_non_definite
-entries_into_new_database=voci_in_un_nuovo_database
-entry=voce
-Entry_editor=Modifica_voci
-
-Entry_in_current_database=Voce_nel_database_corrente
-Entry_in_import=Voce_nell'importazione
-Entry_preview=Anteprima_della_voce
-Entry_table=Tabella_delle_voci
-Entry_table_columns=Colonne_della_tabella_delle_voci
-Entry_type=Tipo_di_voce
-Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=I_nomi_dei_tipi_di_voce_non_possono_contenere_spazi_o_i_caratteri_seguenti
-Entry_types=Tipi_di_voce
-Error=Errore
-
-Error\:_=Errore:_
-Error_converting_Bibtex_to_XMP\:_%0=Errore_durante_la_conversione_della_voce_BibTeX_in_XMP:_%0
-Error_converting_XMP_to_'%0'...=Errore_durante_la_conversione_dei_metadati_XMP_in_'%0'...
-Error_exporting_to_clipboard=Errore_durante_l'esportazione_negli_appunti
-Error_in_field=Errore_nel_campo
-Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Errore_all'avvio_del_sistema_di_plug-in._Avvio_senza_plug-in._Alcune_funzionalit\u00e0_potrebbero_essere_assenti.
-Error_occured_when_parsing_entry=Errore_durante_l'elaborazione_della_voce
-Error_opening_file=Errore_all'apertura_del_file
-Error_setting_field=Errore_nell'impostazione_del_campo
-Error_while_converting_BibtexEntry_to_XMP_%0=Errore_durante_la_conversione_della_voce_BibTeX_in_XMP_%0
-Error_while_downloading_file\:=Errore_nel_corso_del_download_del_file:
-Error_while_fetching_from_OIA2=Errore_durante_una_ricerca_da_OIA2
-Error_while_writing=Errore_durante_la_scrittura
-
-Error_writing_to_%0_file(s).=Errore_di_scrittura_di_%0_file.
-Error_writing_XMP_to_file\:_%0=Errore_durante_la_scrittura_dei_metadati_XMP_nel_file:_%0_
-Establishing_SQL_connection...=Connessione_SQL_in_corso...
-Exceptions=Eccezioni
-Existing_file=File_esistente
-exists._Overwrite_file?=esiste._Sovrascrivere_il_file?
-exists._Overwrite?=esiste._Sovrascrivere?
-Expand_subtree=Espandere_il_sotto-albero
-Export=Esporta
-Export_name=Esporta_nome
-Export_preferences=Esporta_preferenze
-Export_preferences_to_file=Esporta_preferenze_in_un_file
-Export_properties=Esporta_propriet\u00e0
-Export_to_clipboard=Esporta_negli_appunti
-Export_to_SQL_database=Esporta_in_un_database_SQL
-Exporting=Esportazione_in_corso
-Extension=Estensione
-External_changes=Modifiche_esterne
-
-External_file_links=Collegamenti_a_file_esterni
-External_files=File_esterni
-External_programs=Programmi_esterni
-External_viewer_called=Chiamata_a_visualizzatore_esterno
-Failed_to_read_groups_data_(unsupported_version\:_%0)=La_lettura_dei_dati_dei_gruppi_\u00e8_fallita_(versione_non_supportata:_%0)
-Fetch=Recupera
-Field=Campo
-field=campo
-Field_content=Contenuto_del_campo
-Field_name=Nome_del_campo
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=I_nomi_dei_campi_non_possono_contenere_spazi_o_i_caratteri_seguenti
-Field_sizes=Dimensioni_dei_campi
-
-Field_to_filter=Campi_da_filtrare
-Field_to_group_by=Campo_di_raggruppamento
-Fields=Campi
-File=File
-file=file
-
-File_'%0'_is_already_open.=Il_file_'%0'__\u00e8_gi\u00e0_aperto.
-File_'%0'_not_found=File_'%0'_non_trovato
-File_changed=File_modificato
-File_directory_is_'%0'\:=La_cartella_dei_file_\u00e8_'%0':
-
-File_directory_is_not_set_or_does_not_exist!=La_cartella_dei_file_non_\u00e8_impostata_o_non_esiste!
-File_download=Download_di_file
-File_exists=Il_file_esiste
-File_extension=Estensione_del_file
-
-File_has_been_updated_externally._What_do_you_want_to_do?=Il_file_\u00e8_stato_aggiornato_da_un'applicazione_esterna._Cosa_vuoi_fare?
-File_not_found=File_non_trovato
-File_type=Tipo_di_file
-File_updated_externally=File_aggiornato_esternamente
-filename=nome_del_file
-Files_opened=File_aperti
-Filter=Filtro
-
-Finished_autosetting_external_links.=Impostazione_automatica_dei_collegamenti_esterni_terminata.
-
-Finished_synchronizing_%0_links._Entries_changed%c_%1.=Sincronizzazione_di_%0_collegamenti:_Voci_cambiate%c_%1.
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Scrittura_dei_metadati_XMP_terminata._Scrittura_eseguita_su_%0_file.
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Terminata_la_scrittura_di_metadati_XMP_per_%0_file_(%1_saltati,_%2_errori).
-First_select_the_entries_you_want_keys_to_be_generated_for.=Selezionare_dapprima_le_voci_per_le_quali_si_vogliono_generare_le_chiavi.
-Fit_table_horizontally_on_screen=Adatta_la_tabella_allo_schermo_orizontalmente
-Float=Galleggiante
-Float_marked_entries=Voci_evidenziate_sempre_in_alto
-Font_Family=Famiglia_di_font
-Font_Preview=Anteprima_font
-Font_Size=Dimensione_font
-Font_Style=Stile_font
-FontSelector=Selettore_dei_font
-for=per
-Format_of_author_and_editor_names=Formato_dei_nomi_di_autori_e_curatori
-Format_String=Stringa_di_formattazione
-Format_used=Formato_utilizzato
-Formatter_Name=Nome_della_formattazione
-Formatter_not_found=Formattazione_non_trovata
-found=trovato
-Found_%0_plugin(s)=Trovati_%0_plug-in
-found_in_aux_file=trovate_nel_file_AUX
-Full_name=Nome_completo
-General=Generale
-General_fields=Campi_generali
-Generate=Genera
-Generate_BibTeX_key=Genera_la_chiave_BibTeX
-Generate_keys=Genera_le_chiavi
-Generate_keys_before_saving_(for_entries_without_a_key)=Genera_le_chiavi_prima_di_salvare_(per_le_voci_senza_chiave)
-
-
-Generate_keys_for_imported_entries=Genera_chiavi_per_le_voci_importate
-Generate_now=Genera_ora
-Generated_BibTeX_key_for=Generata_la_chiave_BibTeX_per
-Generating_BibTeX_key_for=Generazione_in_corso_della_chiave_BibTeX_per
-## Check below
-Grab=Assegna
-Gray_out_entries_not_in_group_selection=Evidenzia_in_grigio_le_voci_fuori_dai_gruppi_selezionati
-Gray_out_non-hits=Disattiva_le_voci_non_corrispondenti
-Gray_out_non-matching_entries=Disattiva_le_voci_non_corrispondenti
-Group_properties=Propriet\u00e0_del_gruppo
-
-grouping_may_not_work_for_this_entry=Il_raggruppamento_potrebbe_non_funzionare_per_queste_voci
-Groups=Gruppi
-Harvard_RTF=Harvard_RTF
-Have_you_chosen_the_correct_package_path?=Il_classpath_\u00e8_corretto?
-Help=Aiuto
-
-Help_contents=Contenuti_dell'aiuto
-Help_on_groups=Aiuto_sui_gruppi
-Help_on_key_patterns=Aiuto_sulla_composizione_delle_chiavi
-Help_on_Preview_Settings=Aiuto_sui_parametri_di_anteprima
-Help_on_Regular_Expression_Search=Aiuto_sulla_ricerca_di_un'espressione_regolare
-Hide_non-hits=Nascondi_le_voci_non_corrispondenti
-Hide_non-matching_entries=Nascondi_le_voci_non_corrispondenti
-
-Hierarchical_context=Contesto_gerarchico
-Highlight=Evidenzia
-Highlight_groups_matching_all_selected_entries=Evidenzia_i_gruppi_corrispondenti_a_tutte_le_voci_selezionate
-Highlight_groups_matching_any_selected_entry=Evidenzia_i_gruppi_corrispondenti_almeno_ad_una_delle_voci_selezionate
-Highlight_overlapping_groups=Evidenzia_gruppi_con_voci_in__comune
-Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Suggerimento%c_Per_ricercare_in_un_campo_specifico_digitare,_per_esempio%c<p><tt>author%esmith_and_title%eelectrical</tt>
-HTML=HTML
-
-HTML_table=Tabella_HTML
-
-HTML_table_(with_Abstract_&_BibTeX)=Tabella_HTML_(con_riassunto_e_BibTeX)
-Icon=Icona
-Ignore=Ignora
-Immediate_subgroups=Sottogruppi_diretti
-Import=Importa
-Import_and_keep_old_entry=Importa_e_mantieni_le_vecchie_voci
-Import_and_remove_old_entry=Importa_e_rimuovi_le_vecchie_voci
-Import_entries=Importa_voci
-Import_failed=Importazione_fallita
-Import_file=Importa_file
-Import_group_definitions=Importa_definizioni_di_gruppo
-Import_name=Importa_nome
-Import_preferences=Importa_preferenze
-Import_preferences_from_file=Importa_preferenze_da_un_file
-Import_strings=Importa_stringhe
-Import_to_open_tab=Importa_nella_scheda_aperta
-Import_word_selector_definitions=Importa_le_definizioni_per_la_selezione_di_parole
-Imported_database=Database_importato
-Imported_entries=Voci_importate
-Imported_from_database=Importato_dal_database
-ImportFormat_class=Classe_ImportFormat
-Importing=Importazione_in_corso
-Importing_in_unknown_format=Importazione_in_formato_sconosciuto
-In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=In_JabRef,_utilizzare_una_coppia_di_caratteri_#_per_delimitare_una_stringa.
-Include_abstracts=Includi_il_riassunto
-Include_entries=Includi_voci
-Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Includi_i_sottogruppi:_Quando_selezionato,_mostra_le_voci_contenute_in_questo_gruppo_e_nei_suoi_sottogruppi
-Incremental=Incrementale
-Incremental_search=Ricerca_incrementale
-Incremental_search_failed._Repeat_to_search_from_top.=Ricerca_incrementale_fallita._Ripetere_la_ricerca_dall'inizio.
-Independent_group\:_When_selected,_view_only_this_group's_entries=Gruppo_indipendente:_Quando_selezionato,_mostra_solo_le_voci_di_questo_gruppo
-Initially_show_groups_tree_expanded=Inizialmente_mostra_l'albero_dei_gruppi_espanso
-Input=Attribuzione_dei_campi
-Input_error=Voce_errata
-Insert=Inserisci
-Insert_rows=Inserisci_righe
-Insert_selected_citations_into_LyX/Kile=Inserisci_le_citazioni_selezionate_in_LyX/Kile
-Insert_selected_citations_into_WinEdt=Inserisci_le_citazioni_selezionate_in_WinEdt
-insert_string_=Inserisci_stringa_
-Insert_URL=Inserisci_URL
-integrity=Integrit\u00e0
-Integrity_check=Verifica_di_integrit\u00e0
-Intersection=Intersezione
-Invalid_BibTeX_key=Chiave_BibTeX_non_valida
-Invalid_date_format=Formato_data_non_valido
-Invalid_URL=URL_non_valido
-Inverted=Complemantare
-is_a_standard_type.=\u00e8_un_tipo_standard
-ISO_abbreviation=Abbreviazione_ISO
-Item_list_for_field=Lista_di_campi
-jabref=jabref
-JabRef_help=Aiuto_di_JabRef
-JabRef_preferences=Preferenze_JabRef
-Journal_abbreviations=Abbreviazioni_riviste
-Journal_list_preview=Anteprima_della_lista_delle_riviste
-Journal_name=Nome_della_rivista
-Keep=Mantieni
-Keep_both=Mantieni_entrambi
-Keep_lower=Mantieni_quello_sotto
-Keep_upper=Mantieni_quello_sopra
-Key_bindings=Combinazioni_di_tasti
-Key_bindings_changed=Combinazioni_di_tasti_modificate
-Key_generator_settings=Impostazioni_per_la_generazione_delle_chiavi
-Key_pattern=Modello_delle_chiavi
-keys_in_database=Chiavi_in_database
-Keyword=Parola_Chiave
-##_check:_Nome_del_campo_(fr)?
-Label=Etichetta
-Language=Lingua
-Last_modified=Ultimo_modificato
-LaTeX_AUX_file=File_AUX_LaTeX
-Leave_file_in_its_current_directory.=Lascia_il_file_nella_cartella_corrente
-
-Leave_files_in_their_current_directory.=Lascia_i_file_nella_cartella_corrente
-Left=Sinistra
-License=Licenza
-Limit_to_fields=Restrizioni_ai_campi
-Limit_to_selected_entries=Restrizioni_alle_voci_selezionate
-
-Link=Collegamento
-Link_local_file=Collegamento_al_file_locale
-Link_to_file_%0=Collegamento_al_file_%0
-Listen_for_remote_operation_on_port=Porta_in_ascolto_per_operazioni_remote
-Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Carica_e_salva_le_preferenze_da/in_jabref.xml_all'avvio_(modalit\u00e0_chiavetta_di_memoria)
-Load_session=Carica_sessione
-Loading_session...=Caricamento_sessione...
-localhost=localhost
-Look_and_feel=Aspetto
-Looking_for_pdf...=Ricerca_del_file_pdf...
-lower=minuscolo
-Main_file_directory=Cartella_dei_file_principale
-
-Main_layout_file=File_di_layout_principale
-Main_PDF_directory=Cartella_file_PDF_principale
-Main_PS_directory=Cartella_file_PS_principale
-Manage=Gestione
-Manage_custom_exports=Gestione_delle_esportazioni_personalizzate
-Manage_custom_imports=Gestione_delle_importazioni_personalizzate
-Manage_external_file_types=Gestione_dei_tipi_di_file_esterni
-Manage_journal_abbreviations=Gestione_delle_abbreviazioni_delle_riviste
-Mark_entries=Contrassegna_voci
-Mark_entry=Contrassegna_voce
-Mark_new_entries_with_addition_date=Contrassegna_le_nuove_voci_con_la_data_di_aggiunta
-Mark_new_entries_with_owner_name=Contrassegna_le_nuove_voci_con_il_nome_del_proprietario
-Marked_selected=Contrassegna_la_selezione
-Memory_Stick_Mode=Modalit\u00e0_chiavetta_di_memoria
-Menu_and_label_font_size=Dimensione_del_font_di_menu_ed_etichette
-Merged_external_changes=Incorpora_modifiche_esterne
-Messages=Messaggi
-Messages_and_Hints=Avvertimenti_e_Suggerimenti
-Modification_of_field=Modifica_del_campo
-Modified_group_"%0".=Gruppo_"%0"_modificato.
-Modified_groups=Gruppi_modificati
-Modified_string=Stringa_modificata
-Modify=Modifica
-modify_group=Modifica_gruppo
-MODS=MODS
-Move=Sposta
-Move_down=Sposta_in_gi\u00f9
-Move_entries_in_group_selection_to_the_top=Sposta_le_voci_selezionate_in_su
-Move_external_links_to_'file'_field=Sposta_i_collegamenti_esterni_nel_campo_'file'
-Move_files_to_file_directory.=Sposta_i_file_nella_cartella_dei_file.
-move_group=sposta_gruppo
-Move_string_down=Sposta_la_stringa_in_gi\u00f9
-Move_string_up=Sposta_la_stringa_in_su
-Move_up=Sposta_in_su
-Moved_group_"%0".=Spostato_gruppo_"%0".
-MS_Office_2007=MS_Office_2007
-MySQL=MySQL
-MySQL_database=Database_MySQL
-Name=Nome
-Name_formatter=Formattazione_dei_nomi
-Natbib_style=Stile_Natbib
-
-nested_aux_files=File_AUX_nidificati
-New=Nuovo
-new=nuovo
-New_BibTeX_database=Nuovo_database_BibTeX
-New_BibTeX_entry=Nuova_voce_BibTeX
-New_BibTeX_subdatabase=Nuovo_subdatabase_BibTeX
-New_content=Nuovo_contenuto
-New_database_created.=Nuovo_database_creato
-New_field_value=Nuovo_valore_del_campo
-New_file=Nuovo_file
-New_file_link_(INSERT)=Nuovo_collegamento_a_file_(INSERT)
-New_group=Nuovo_gruppo
-New_string=Nuova_stringa
-Next_entry=Voce_successiva
-No_%0_found=Nessun_%0_trovato
-No_actual_changes_found.=Nessun_cambiamento_trovato.
-no_base-bibtex-file_specified=nessun_database_BibTeX_specificato!
-no_database_generated=nessun_database_creato
-No_duplicates_found=Nessun_duplicato_trovato
-No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Nessuna_voce_trovata._Verificare_che_si_stia_utilizzando_il_filtro_di_importazione_appropriato.
-
-No_entries_found_for_the_search_string_'%0'=Nessuna_voce_trovata_in_base_alla_stringa_di_ricerca_'%0'
-No_entries_imported.=Nessuna_voce_importata
-No_entries_or_multiple_entries_selected.=Nessuna_voce_selezionata_o_voci_multiple_selezionate.
-No_entries_selected=Nessuna_voce_selezionata
-No_entries_selected.=Nessuna_voce_selezionata
-No_exceptions_have_ocurred.=Non_si_\u00e8_verificata_nessuna_eccezione
-No_files_found.=Nessun_file_trovato.
-No_GUI._Only_process_command_line_options.=Senza_interfaccia_grafica._Elaborate_solo_le_opzioni_della_riga_di_comando.
-No_journal_names_could_be_abbreviated.=Nessun_nome_di_rivista_pu\u00f2_essere_abbreviato.
-No_journal_names_could_be_unabbreviated.=Nessuna_abbreviazione_di_rivista_pu\u00f2_essere_estesa.
-
-No_PDF_linked=Nessun_file_PDF_collegato
-No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Nessun_PDF_o_PS_definito,_e_nessun_file_corrispondente_alla_chiave_BibTeX_trovato.
-No_plugins_were_found_in_the_following_folders\:=Nessun_plug-in_trovato_nelle_cartelle_seguenti:
-No_references_found=Nessun_riferimento_trovato
-No_saved_session_found.=Nessuna_sessione_salvata_trovata.
-No_url_defined=Nessun_URL_trovato
-No_XMP_metadata_found_in_=Non_sono_stati_trovati_metadati_XMP_in_
-not=no
-not_found=non_trovato
-Not_saved_(empty_session)=Non_salvato_(sessione_vuota)
-Note_that_the_entry_causing_the_problem_has_been_selected.=Nota:_la_voce_responsabile_del_problema_\u00e8_stata_selezionata.
-Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Nota:_\u00e8_necessario_specificare_il_nome_di_classe_completo_per_il_"Look-and-Feel",
-Nothing_to_redo=Niente_da_ripetere
-Nothing_to_undo=Niente_da_annullare
-Number_of_references_to_fetch?=Numero_di_riferimenti_da_recuperare?
-occurences=ricorrenze
-OK=OK
-Ok=Ok
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Uno_o_pi\u00f9_collegamenti_a_file_sono_del_tipo_'%0',_non_definito._Come_procedere?
-One_or_more_keys_will_be_overwritten._Continue?=Una_o_pi\u00f9_chiavi_saranno_sovrascritte._Continuare?
-Only_one_item_is_supported=Un_solo_elemento_\u00e8_supportato
-Open=Apri
-Open_BibTeX_database=Apri_database_BibTeX
-Open_database=Apri_database
-Open_editor_when_a_new_entry_is_created=Apri_per_modifiche_quando_una_nuova_voce_viene_creata
-Open_file=Apri_file
-Open_last_edited_databases_at_startup=All'avvio_apri_i_database_aperti_nella_sessione_precedente
-Open_PDF_or_PS=Apri__PDF_o_PS
-Open_right-click_menu_with_Ctrl+left_button=Mostra_il_menu_contestuale_con_Ctrl_+_pulsante_sinistro
-Open_URL_or_DOI=Apri_URL_o_DOI
-OpenDocument_Spreadsheet=Foglio_elettronico_OpenDocument
-Opened_database=Database_aperto
-Opening=Apertura_in_corso
-Opening_preferences...=Apertura_delle_preferenze_in_corso...
-
-
-OpenOffice_Calc=OpenOffice_Calc
-OpenOffice_CSV=OpenOffice_CSV
-Operation_canceled.\n=Operazione_annullata.\n
-Operation_not_supported=Operazione_non_supportata
-Optional_fields=Campi_opzionali
-Options=Opzioni
-or=o
-out_of=di
-Output=Output
-Output_or_export_file=File_di_salvataggio_o_esportazione
-##_check
-Override=Sovrascrivi
-Override_default_file_directories=Alternative_alle_cartelle_di_file_predefinite
-Override_default_font_settings=Ignora_le_impostazioni_dei_font_predefinite
-##_check
-override_the_bibtex_key_by_the_selected_text=Sovrascrivi_la_chiave_BibTeX_con_il_testo_selezionato
-Overwrite=Sovrascrivi
-Overwrite_existing_field_values=Sovrascrivi_i_valori_esistenti_del_campo
-##_check
-Overwrite_keys=Sovrascrivi_chiavi
-pairs_processed=coppie_elaborate
-Password_\:=Password:
-Paste=Incolla
-paste_entries=incolla_voci
-paste_entry=incolla_voce
-
-Paste_from_clipboard=Incolla_dagli_appunti
-Pasted=Incollato
-
-Path_to_%0_not_defined=Percorso_per_%0_non_definito
-
-Path_to_LatexEditor_(LEd.exe)=Percorso_per_LatexEditor_(LEd.exe)
-Path_to_LyX_pipe=Percorso_per_la_pipe_LyX
-
-Path_to_Vim=Percorso_per_Vim
-Path_to_WinEdt.exe=Percorso_per_WinEdt.exe
-PDF_directory=Cartella_dei_file_PDF
-PDF_does_not_exist=Il_file_PDF_non_esiste
-Personal_journal_list=Lista_di_riviste_personale
-Plain_text_import=Importazione_da_solo_testo
-Please_check_your_network_connection_to_this_machine.=Verificare_la_connessione_di_rete_di_questa_macchina.
-Please_enter_a_name_for_the_group.=Immettere_un_nome_per_il_gruppo
-Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Immettere_un_termine_di_ricerca._Per_esempio,_per_ricercare_in_tutti_i_campi_<b>Smith</b>,_imettere%c<p><tt>smith</tt><p>_Per_ricercare_nel_campo_<b>Author</b>_il_termine_<b>Smith</b>_e_nel_campo_<b>Title</b>_il_termine_<b>electr [...]
-Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Immettere_il_cmpo_di_ricerca_(es._<b>keywords</b>)_e_la_parola_chiave_da_ricercare_(es._<b>electrical</b>).
-Please_enter_the_string's_label=Immettere_l'etichetta_della_stringa
-Please_select_an_importer=Selezionare_un_filtro_di_importazione
-Please_select_an_importer.=Selezionare_un_filtro_di_importazione.
-Please_select_exactly_one_group_to_move.=Selezionare_un_solo_gruppo_da_spostare.
-Please_specify_the_=Specificare_il_
-Possible_duplicate_entries=Voci_potenzialmente_duplicate
-Possible_duplicate_of_existing_entry._Click_to_resolve.=Possibile_duplicazione_di_una_voce_esistente._Cliccare_per_effettuare_la_verifica.
-Preamble=Preambolo
-Preferences=Preferenze
-Preferences_recorded.=Preferenze_registrate.
-Preview=Anteprima
-Previous_entry=Voce_precedente
-Primary_sort_criterion=Criterio_di_ordinamento_principale
-Print_Preview=Stampa_l'anteprima
-Printing_Entry_Preview=Stampa_dell'anteprima_della_voce
-Problem_with_parsing_entry=Problema_di_analisi_di_una_voce
-Processing_=Elaborazione_di_
-Program_output=Output_del_programma
-PS_directory=Cartella_dei_file_PS
-Push_entries_to_external_application_(%0)=Invia_le_voci_selezionate_all'applicazione_esterna_(%0)
-Push_selection_to_Emacs=Invia_la_selezione_a_Emacs
-Push_selection_to_LyX/Kile=Invia_la_selezione_a_LyX/Kile
-Push_selection_to_Vim=Invia_le_voci_selezionate_a_Vim
-Push_selection_to_WinEdt=Invia_la_selezione_a_WinEdt
-Push_to_LatexEditor=Invia_a_LaTeXEditor
-Pushed_citations_to_%0=Citazioni_inviate_a_%0
-Pushed_citations_to_Emacs=Citazioni_inviate_a_Emacs
-Pushed_citations_to_Vim=Citazioni_inviate_a_Vim
-Pushed_citations_to_WinEdt=Citazioni_inviate_a_WinEdt
-Pushed_the_citations_for_the_following_rows_to=Inviate_le_citazioni_delle_righe_seguenti_a
-Quit_JabRef=Chiudi_JabRef
-Quit_synchronization=Chiudi_sincronizzazione
-##check
-Raw_source=Solo_testo
-Really_delete_the_selected=Sicuri_di_voler_cancellare:_
-Rearrange_tabs_alphabetically_by_title=Ordina_alfabeticamente_le_schede
-Redo=Ripeti
-Reference_database=Database_di_riferimenti
-References_found=Riferimenti_trovati
-Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Perfeziona_il_super-gruppo:_Quando_selezionato,_mostra_le_voci_contenute_sia_in_questo_gruppo_sia_nel_suo_super-gruppo
-Refresh_view=Aggiorna_la_vista
-Regular_Expression=Espressione_regolare
-Remember_these_entry_types?=Ricordare_questo_tipo_di_voce?
-Remote_operation=Accesso_remoto
-Remote_server_port=Porta_del_server_remoto
-Remove=Rimuovi
-##_check_(tutte?)
-Remove_all?=Rimuovi_tutti
-Remove_all_subgroups=Rimuovi_tutti_i_sottogruppi
-Remove_all_subgroups_of_"%0"?=Rimuovere_tutti_i_sottogruppi_di_"%0"?
-Remove_double_braces_around_BibTeX_fields_when_loading.=Rimuovi_le_doppie_parentesi_graffe_che_racchiudono_i_campi_BibTex_all'apertura
-Remove_duplicates=Rimuovi_i_duplicati
-Remove_entry_from_import=Rimuovi_la_voce_dall'importazione
-Remove_entry_selection_from_this_group=Rimuovi_le_voci_selezionate_da_questo_gruppo
-Remove_entry_type=Rimuovi_il_tipo_di_voce
-Remove_file_link_(DELETE)=Rimuovi_collegamento_a_file_(DELETE)
-remove_from_group=rimuovi_dal_gruppo
-Remove_from_group=Rimuovi_dal_gruppo
-Remove_group=Rimuovi_gruppo
-Remove_group,_keep_subgroups=Rimuovi_gruppo,_mantieni_i_sottogruppi
-Remove_group_"%0"?=Rimuovere_il_gruppo_"%0"?
-Remove_group_"%0"_and_its_subgroups?=Rimuovere_il_gruppo_"%0"_ed_i_suoi_sottogruppi?
-remove_group_(keep_subgroups)=rimuovi_gruppo_(mantieni_i_sottogruppi)
-remove_group_and_subgroups=rimuovi_gruppo_e_sottogruppi
-Remove_group_and_subgroups=Rimuovi_gruppo_e_sottogruppi
-
-Remove_link=Rimuovere_il_collegamento
-Remove_old_entry=Rimuovi_vecchia_voce
-Remove_selected_strings=Rimuovi_le_stringhe_selezionate
-remove_string_=rimuovi_stringa_
-Removed_group_"%0".=Rimosso_gruppo_"%0".
-Removed_group_"%0"_and_its_subgroups.=Rimosso_gruppo_"%0"_e_suoi_sottogruppi.
-Removed_string=Stringa_rimossa
-Renamed_string=Stringa_rinominata
-Replace=Sostituisci
-Replace_(regular_expression)=Sostituisci_(espressione_regolare)
-Replace_string=Sostituisci_stringa
-Replace_with=Sostituisci_con
-Replaced=Sostituito
-Required_fields=Campo_obbligatorio
-Reset_all=Reimposta_tutto
-Reset_file_type_definitons=Ristabilisci_le_definizioni_originali_dei_tipi_di_file
-
-Resolve_strings_for_all_fields_except=Risolve_le_stringhe_per_tutti_i_campi_tranne
-Resolve_strings_for_standard_BibTeX_fields_only=Risolve_le_stringhe_solo_per_i_campi_BibTeX_standard
-resolved=risolto
-Results=Risultati
-Revert_to_original_source=Ripristina_il_contenuto_iniziale
-##_check_Rivista?_Verifica?
-Review=Rivedi
-Review_changes=Rivedi_le_modifiche
-Right=Destra
-root=root
-Save=Salva
-Save_all_finished.=Terminato_il_salvataggio_di_tutti_i_database.
-
-Save_all_open_databases=Salva_tutti_i_database_aperti
-Save_before_closing=Salva_prima_di_chiudere
-Save_database=Salva_il_database
-Save_database_as_...=Salva_il_database_come...
-Save_entries_in_their_original_order=Salva_le_voci_nel_loro_ordine_originale
-Save_failed=Salvataggio_fallito
-Save_failed_during_backup_creation=Salvataggio_fallito_durante_la_creazione_della_copia_di_backup
-Save_failed_while_committing_changes=Salvataggio_fallito_nel_rendere_definitivi_i_cambiamenti
-Save_ordered_by_author/editor/year=Salvare_in_ordine_per_author/editor/year
-Save_selected_as_...=Salva_la_selezione_come...
-Saved_database=Database_salvato
-Saved_selected_to=Salvata_la_selezione_in
-Saved_session=Sessione_salvata
-Saving=Salvataggio_in_corso
-Saving_all_databases...=Salvataggio_di_tutti_i_database...
-Saving_database=Salvataggio_del_database_in_corso
-##_check
-Scan=Scansione
-Search=Ricerca
-Search_All_Fields=Ricerca_in_tutti_i_campi
-Search_all_fields=Ricerca_in_tutti_i_campi
-Search_error=Errore_di_ricerca
-Search_expression=Espressione_di_ricerca
-Search_for=Ricerca
-Search_general_fields=Ricerca_nei_campi_generali
-Search_IEEEXplore=Ricerca_IEEEXplore
-Search_IEEExplore=Ricerca_in_IEEExplore
-Search_optional_fields=Ricerca_nei_campi_opzionali
-Search_required_fields=Ricerca_nei_campi_obbligatori
-Search_Specified_Field(s)=Ricerca_nei_campi_specificati
-Searched_database._Global_number_of_hits=Ricerca_effettuata._Numero_totale_di_risultati
-Searched_database._Number_of_hits=Ricerca_effettuata._Numero_di_risultati_trovati
-Searching_for_%0_file=Ricerca_file_%0
-Searching_for_duplicates...=Ricerca_di_duplicati_in_corso...
-
-Searching_for_files=Ricerca_dei_file
-Secondary_sort_criterion=Criterio_di_ordinamento_secondario
-Select=Seleziona
-Select_a_Zip-archive=Seleziona_un_archivio_Zip
-Select_action=Seleziona_l'operazione
-Select_all=Seleziona_tutto
-Select_Classpath_of_New_Importer=Seleziona_il_classpath_del_nuovo_filtro_di_importazione
-Select_encoding=Seleziona_la_codifica
-Select_entries_in_group_selection=Seleziona_le_voci_nella_selezione_dei_gruppi
-Select_entry_type=Seleziona_un_tipo_di_voce
-Select_external_application=Seleziona_un'applicazione_esterna
-Select_file_from_ZIP-archive=Seleziona_un_file_da_un_archivio_Zip
-Select_format=Seleziona_il_formato
-Select_icon=Seleziona_l'icona
-Select_matches=Seleziona_le_corrispondenze
-Select_new_ImportFormat_Subclass=Seleziona_una_nuova_sottoclasse_ImportFormat
-Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Selezionare_i_nodi_dell'albero_per_vedere_ed_accettare_o_rifiutare_le_modifiche
-Selected_entries=Voci_selezionate
-##_check
-Selector_enabled_fields=Campi_con_selezione_attivata
-Server_Hostname_\:=Hostname_del_server:
-Server_Type_\:=Tipo_di_server:
-
-Set_field=Imposta_il_campo
-Set_fields=Imposta_i_campi
-Set_general_fields=Definisci_i_campi_generali
-Set_main_external_file_directory=Impostare_la_cartella_principale_dei_file_esterni
-Set_table_font=Definisci_i_font_della_tabella
-Settings=Parametri
-##_check
-Setup_selectors=Definisci_i_selettori
-Short_form=Forma_breve
-Shortcut=Scorciatoia
-Show/edit_BibTeX_source=Mostra/Modifica_codice_sorgente_BibTeX
-Show_'Firstname_Lastname'=Mostra_'Nome_Cognome'
-Show_'Lastname,_Firstname'=Mostra_'Cognome,_Nome'
-Show_BibTeX_source_by_default=Mostra_il_codice_sorgente_BibTeX_per_impostazione_predefinita
-Show_BibTeX_source_panel=Mostra_la_scheda_"Sorgente_BibTeX"
-Show_confirmation_dialog_when_deleting_entries=Chiedere_conferma_della_cancellazione_di_una_voce
-Show_description=Mostra_descrizione
-Show_dynamic_groups_in_<i>italics</i>=Mostra_gruppi_dinamici_in_<i>corsivo</i>
-Show_entries_*not*_in_group_selection=Mostra_le_voci_*non*_comprese_nei_gruppi_selezionati
-
-Show_file_column=Visualizza_la_colonna_File
-Show_icons_for_groups=Mostra_le_icone_per_i_gruppi
-Show_last_names_only=Mostra_solo_i_cognomi
-Show_names_unchanged=Mostra_i_nomi_immodificati
-Show_one_less_rows=Mostra_una_riga_in_meno
-Show_one_more_row=Mostra_una_riga_in_pi\u00f9
-Show_optional_fields=Mostra_i_campi_opzionali
-Show_PDF/PS_column=Mostra_colonna_PDF/PS
-Show_required_fields=Mostra_i_campi_obbligatori
-Show_URL/DOI_column=Mostra_colonna_URL/DOI
-Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Mostra_un_messaggio_di_avverimento_quando_viene_immessa_una_chiave_BibTeX_gi\u00e0_esistente
-Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Mostra_un_messaggio_di_avverimento_quando_viene_immessa_una_chiave_BibTeX_vuota
-Simple_HTML=HTML_semplice
-Size=Dimensione
-Skip=Salta
-Skipped_-_No_PDF_linked=Saltato_-_Nessun_file_PDF_collegato
-Skipped_-_PDF_does_not_exist=Saltato_-_Il_file_PDF_non_esiste
-
-Skipped_entry.=Voce_saltata
-Sort_alphabetically=Ordina_alfabeticamente
-Sort_Automatically=Ordina_automaticamente
-
-Sort_order=Ordinamento
-sort_subgroups=ordina_i_sottogruppi
-Sorted_all_subgroups_recursively.=Ordina_tutti_i_sottogruppi_ricorsivamente.
-Sorted_immediate_subgroups.=Ordinati_i_sottogruppi_immediati.
-source_edit=modifica_sorgente
-Special_Name_Formatters=Formattazioni_speciali_dei_nomi
-Special_table_columns=Colonne_di_tabella_speciali
-SQL_connection_established.=Connessione_SQL_stabilita.
-Start_incremental_search=Inizia_la_ricerca_incrementale
-Start_search=Inizia_la_ricerca
-Starting_import=Inizio_importazione
-Statically_group_entries_by_manual_assignment=Raggruppa_manualmente_le_voci
-Status=Stato
-Stop=Arresta
-Store_journal_abbreviations=Registra_le_abbreviazioni_delle_riviste
-Store_string=Registra_la_stringa
-Store_the_following_fields_with_braces_around_capital_letters=Registra_i_seguenti_campi_con_lettere_maiuscole_tra_parentesi_graffe_addizionali
-Stored_entry=Voce_registrata
-Strings=Stringa
-Strings_for_database=Stringhe_per_il_database
-Subdatabase_from_aux=Subdatabase_da_file_LaTeX_AUX
-Suggest=Suggerisci
-Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Alterna_nomi_completi_e_nomi_abbreviati_per_le_riviste_delle_quali_\u00e8_noto_il_nome.
-
-Synchronize_%0_links=Sincronizza_%0_collegamenti
-Synchronize_file_links=Sincronizza_il_collegamento_ai_file
-Synchronizing_%0_links...=Sincronizzazione_di_%0_collegamenti_in_corso...
-Table_appearance=Aspetto_della_tabella
-Table_background_color=Colore_di_sfondo_della_tabella
-Table_grid_color=Colore_della_griglia_della_tabella
-Table_text_color=Colore_del_testo_della_tabella
-Tabname=Nome_della_scheda
-Target_file_cannot_be_a_directory.=L'oggetto_deve_essere_un_file,_non_una_cartella.
-Tertiary_sort_criterion=Criterio_di_ordinamento_terziario
-Test=Test
-Text_Input_Area=Area_di_inserimento_testo
-The_#_character_is_not_allowed_in_BibTeX_fields=Il_carattere_'#'_non_\u00e8_permesso_nei_campi_BibTeX
-The_chosen_date_format_for_new_entries_is_not_valid=Il_formato_di_data_scelto_per_le_nuove_voci_non_\u00e8_valido
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=La_codifica_scelta_'%0'_non_pu\u00f2_codificare_i_caratteri_seguenti:_
-The_CiteSeer_fetch_operation_returned_zero_results.=La_ricerca_CiteSeerX_non_ha_fornito_risultati.
-
-The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=La_versione_attuale_dispone_di_una_nuova_modalit\u00e0_di_gestione_dei_collegamenti_ai_file_esterni.<BR>Per_poterla_sfruttare,_i_collegamenti_devono_essere_convertiti_nel_nuovo_formato<BR>e_JabRef_deve_essere_configurato_per_mostrare_i_nuovi_collegamenti.
-the_field_<b>%0</b>=il_campo_<b>%0</b>
-The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Il_file_<BR>'%0'<BR>_\u00e8_stato_modificato_da_un'applicazione_esterna
-The_group_"%0"_already_contains_the_selection.=Il_gruppo_"%0"_contiene_gi\u00e0_la_selezione.
-The_label_of_the_string_can_not_be_a_number.=L'etichetta_della_stringa_non_pu\u00f2_essere_un_numero.
-The_label_of_the_string_can_not_contain_spaces.=L'etichetta_della_stringa_non_pu\u00f2_contenere_spazi.
-The_label_of_the_string_can_not_contain_the_'#'_character.=L'etichetta_della_stringa_non_pu\u00f2_contenere_il_carattere_'#'
-The_output_option_depends_on_a_valid_import_option.=L'opzione_di_output_dipende_da_una_opzione_di_importazione_valida.
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=Il_file_PDF_contiene_uno_o_pi\u00f9_record_BibTeX.\nVuoi_importarli_come_nuove_voci_nel_database_corrente?
-The_regular_expression_<b>%0</b>_is_invalid%c=L'espressione_regolare_<b>%0</b>_non_\u00e8_valida%c
-The_search_is_case_insensitive.=La_ricerca_non_distingue_maiuscole_e_minuscole.
-The_search_is_case_sensitive.=La_ricerca_distingue_maiuscole_e_minuscole.
-The_string_has_been_removed_locally=La_stringa_\u00e8_stata_rimossa_localmente
-There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Ci_sono_dei_potenziali_duplicati_(contrassegnati_con_una_icona_'D')_che_non_possono_essere_risolti._Continuare?
-this_button_will_update=questo_bottone_aggiorner\u00e0
-This_database_was_written_using_an_older_version_of_JabRef.=Questo_database_\u00e8_stato_generato_da_una_versione_precedente_di_JabRef.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Questa_voce_\u00e8_priva_di_una_chiave_BibTeX._Generarla_ora?
-This_entry_is_incomplete=La_voce_\u00e8_incompleta
-This_entry_type_cannot_be_removed.=Questo_tipo_di_voce_non_pu\u00f2_essere_eliminato.
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Questo_collegamento_\u00e8_di_tipo_'%0',_ancora_indefinito._Cosa_vuoi_fare?
-This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Questo_gruppo_contiene_voci_assegnate_manualmente._Altre_voci_possono_essere_assegnate_a_questo_gruppo_selezionandole [...]
-This_group_contains_entries_in_which=Questo_gruppo_contiene_voci_in_cui
-This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Questo_gruppo_contiene_voci_in_cui_uno_dei_campi_contiene_l'espressione_regolare_<b>%0</b>
-This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Questo_gruppo_contiene_voci_in_cui_uno_dei_campi_contiene_il_termine_<b>%0</b>
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Questo_gruppo_contiene_voci_in_cui_il_campo_<b>%0</b>__contiene_la_keyword_<b>%1</b>
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Questo_gruppo_contiene_voci_in_cui_il_campo_<b>%0</b>__contiene_l'espressione_regolare_<b>%1</b>
-This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Questo_\u00e8_un_semplice_dialogo_taglia_e_copia_per_importare_dei_campi_da_testo_normale
-This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Per_ciascuno_dei_%0_collegamenti,_JabRef_verificher\u00e0_l'esistenza_del_file.<BR>In_caso_negativo_proporr\u00e0_delle_opzioni_per_la_risoluzione_del_problema.
-This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Per_questa_operazione_\u00e8_necessario_che_tutte_le_voci_selezionate_abbiano_la_chiave_BibTeX_definita
-This_operation_requires_at_least_one_entry.=Questa_operazione_richiede_almeno_una_voce.
-This_operation_requires_one_or_more_entries_to_be_selected.=Per_questa_operazione_una_o_pi\u00f9_voci_devono_essere_selezionate
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Questa_azione_sposter\u00e0_tutti_i_collegamenti_dai_campi_'pdf'_e_'ps'_al_campo_'%0'._Procedere?
-To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Per_configurare_vedi_<B>Strumenti_->_Gestione_delle_abbreviazioni_delle_riviste</B>
-Toggle_abbreviation=Mostra/Nascondi_l'abbreviazione
-Toggle_entry_preview=Mostra/Nascondi_l'anteprima
-Toggle_groups_interface=Mostra/Nascondi_l'interfaccia_dei_gruppi
-Toggle_search_panel=Mostra/Nascondi_il_pannello_di_ricerca
-Try_different_encoding=Prova_codifiche_differenti
-Type_set_to_'other'=Tipo_configurato_come_'other'
-Unabbreviate_journal_names_of_the_selected_entries=Mostra_il_nome_completo_delle_riviste_per_le_voci_selezionate
-Unabbreviated_%0_journal_names.=%0_nomi_di_riviste_per_esteso.
-unable_to_access_LyX-pipe=impossibile_accedere_alla_'pipe'_LyX
-Unable_to_create_graphical_interface=Impossibile_creare_l'interfaccia_grafica
-Unable_to_open_file.=Impossibile_aprire_il_file
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Impossibile_aprire_il_collegamento._L'applicazione_'%0'_associata_con_il_tipo_di_file_'%1'_non_pu\u00f2_essere_aperta.
-Unable_to_read_default_icon_theme.=Impossibile_leggere_il_file_di_tema_di_icone_predefinito
-Unable_to_read_icon_theme_file=Impossibile_leggere_il_file_di_tema_di_icone
-unable_to_write_to=Impossibile_scrivere_su
-Undefined_file_type=Tipo_di_file_non_definito
-Undo=Annulla
-Union=Unione
-Unknown_bibtex_entries=Voci_BibTeX_sconosciute
-##_check
-unknown_edit=modifica_sconosciuta
-unknown_entry_type=tipo_di_voce_sconosciuto
-Unknown_export_format=Formato_di_esportazione_sconosciuto
-Unmark_all=Rimuovi_tutti_i_contrassegni
-Unmark_entries=Rimuovi_i_contrassegni_dalle_voci
-Unmark_entry=Rimuovi_il_contrassegno_dalla_voce
-Unmarked_selected=Rimuovi_i_contrassegni_dalla_selezione
-Unpack_EndNote_filter_set=Scompattare_i_filtri_EndNote
-Unpacked_file.=File_scompattato.
-Unsupported_version_of_class_%0\:_%1=Versione_non_supportata_della_classe_%0:_%1
-untitled=senza_titolo
-##check:_Alto?
-Up=Su
-Update_to_current_column_widths=Aggiorna_la_larghezza_delle_colonne_ai_valori_correnti
-Updated_group_selection=Selezione_di_gruppo_aggiornata
-Upgrade_external_links=Aggiorna_i_collegamenti_esterni
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Aggiornare_i_collegamenti_esterni_PDF/PS_per_utilizzare_il_campo_'%0'.
-Upgrade_file=Aggiornamento_del_file
-Upgrade_old_external_file_links_to_use_the_new_feature=Aggiornare_i_vecchi_collegamenti_ai_file_esterni_per_utilizzare_la_nuova_funzione
-Upgraded_links.=Collegamenti_aggiornati.
-UPPER=MAIUSCOLO
-Upper_Each_First=Prime_Lettere_In_Maiuscolo
-Upper_first=Prima_lettera_in_maiuscolo
-usage=uso
-Use_antialiasing_font=Usa_font_con_antialising
-Use_autocompletion_for_the_following_fields=Usa_l'autocompletamento_per_i_seguenti_campi
-Use_custom_icon_theme=Utilizza_un_tema_di_icone_personalizzato
-Use_default_viewer=Usa_il_visualizzatore_predefinito
-Use_inspection_window_also_when_a_single_entry_is_imported.=Usa_la_finestra_di_ispezione_anche_per_l'importazione_di_una_singola_voce.
-Use_native_file_dialog=Usa_finestra_di_dialogo_File_nativa
-Use_other_look_and_feel=Usa_un_altro_"Look-and-Feel"
-Use_Regular_Expression_Search=Ricerca_l'espressione_regolare
-Use_regular_expressions=Utilizza_espressioni_regolari
-Use_the_following_delimiter_character(s)=Utilizza_i_caratteri_di_delimitazione_seguenti
-Username_\:=Username:
-Value_cleared_externally=Valore_cancellato_esternamente
-Value_set_externally=Valore_impostato_esternamente
-verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=verifica_che_LyX_sia_in_esecuzione_e_che_la_lyxpipe_sia_valida
-View=Visualizza
-Vim_Server_Name=Nome_del_server_Vim
-
-Waiting_for_ArXiv...=In_attesa_di_ArXiv...
-Warn_about_unresolved_duplicates_when_closing_inspection_window=Avverti_della_presenza_di_doppioni_non_risolti_alla_chiusura_della_finestra_di_ispezione
-Warn_before_overwriting_existing_keys=Avverti_prima_di_sovrascrivere_chiavi_esistenti
-Warning=Avvertimento
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Attenzione:_non_\u00e8_stato_possibile_completare_la_riparazione_del_file;_il_file_potrebbe_essere_corrotto._Messaggio_di_errore
-Warning_there_is_a_duplicate_key=Avvertimento!_Una_delle_chiavi_\u00e8_duplicata
-Warnings=Avvertimenti
-web_link=Collegamenti_Internet
-
-
-What_do_you_want_to_do?=Cosa_vuoi_fare?
-When_adding/removing_keywords,_separate_them_by=All'aggiunta/rimozione_di_keyword_separarle_con
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Scrive_i_metadati_XMP_nei_file_PDF_collegati_alle_voci_selezionate
-with=con
-Word=Parola
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=Scrivi_voce_BibTeX_come_metadati_XMP_in_un_file_PDF.
-Write_XMP=Scrivi_XMP
-Write_XMP-metadata=Scrivi_i_metadati_XMP
-Write_XMP-metadata_for_all_PDFs_in_current_database?=Scrivere_i_metadati_XMP_per_tutti_i_file_PDF_del_database_corrente?
-
-Writing_XMP=Scrittura_XMP
-Writing_XMP_metadata...=Scrittura_dei_metadati_XMP...
-Writing_XMP_metadata_for_selected_entries...=Scrittura_dei_metadati_XMP_per_le_voci_selezionate
-Writing_XMP_to_'%0'...=Scrittura_dei_metadati_XMP_in_'%0'...
-Wrong_file_format=Formato_di_file_errato
-Wrote_XMP-metadata=Metadati_XMP_scritti
-Wrote_XMP_to_'%0'.=Scritti_i_metadati_XMP_in_'%0'.
-
-XMP-annotated_PDF=PDF_con_annotazioni_XMP
-XMP_Export_Privacy_Settings=Impostazioni_per_la_riservatezza_dei_dati_XMP_esportati
-
-XMP_metadata=Metadati_XMP
-XMP_metadata_found_in_PDF\:_%0=Metadati_XMP_trovati_nel_file_PDF:_%0
-You_must_restart_JabRef_for_this_to_come_into_effect.=Riavviare_Jabref_per_rendere_effettiva_la_modifica.
-You_have_changed_the_language_setting.=La_lingua_\u00e8_stata_modificata.
-You_have_changed_the_look_and_feel_setting.=Le_impostazioni_dell'aspetto_dell'applicazione_sono_stati_cambiati.
-You_have_cleared_this_field._Original_value=Il_campo_\u00e8_stato_annullato._Valore_originale
-
-You_have_entered_an_invalid_search_'%0'.=\u00c8_stata_inserita_una_ricerca_non_valida_'%0'.
-You_must_choose_a_file_name_to_store_journal_abbreviations=Scegliere_un_nome_per_il_file_in_cui_registrare_le_abbreviazioni_delle_riviste
-You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Riavviare_Jabref_per_rendere_operative_le_nuove_assegnazioni_di_tasti.
-You_must_set_both_BibTeX_key_and_%0_directory=Definire_sia_la_chiave_BibTex,_sia_la_cartella_%0
-Your_new_key_bindings_have_been_stored.=La_nuova_assegnazione_di_tasti_\u00e8_stata_salvata.
-The_following_fetchers_are_available\:=Le_utilit\u00e0_di_ricerca_seguenti_sono_disponibili:
-Could_not_find_fetcher_'%0'=Impossibile_trovare_l'utilit\u00e0_di_ricerca_'%0'_
-Running_Query_'%0'_with_fetcher_'%1'.=Esecuzione_della_query_'%0'_con_l'utilit\u00e0_di_ricerca_'%1'.
-Please_wait!=Attendere,_prego!
-Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=La_query_'%0'_con_l'utilit\u00e0_di_ricerca_'%1'_non_ha_prodotto_alcun_risultato.
-Open_SPIRES_entry=Apri_la_voce_SPIRES
-Move/Rename_file=Sposta/Rinomina_il_file
-File_moved=File_spostato
-Move_file_failed=Spostamento_del_file_fallito
-Could_not_move_file=Impossibile_spostare_il_file
-Could_not_find_file_'%0'.=Impossibile_trovare_il_file_'%0'.
-Move/rename_file=Sposta/rinomina_il_file
-Number_of_entries_successfully_imported=Numero_di_voci_importate_con_successo
-Import_canceled_by_user=Importazione_interrotta_dall'utente
-Progress\:_%0_of_%1=Stato_d'avanzamento:_%0_di_%1
-Error_while_fetching_from_JSTOR=Errore_durante_la_ricerca_JSTOR
-Fetching_Medline_by_id...=Recupero_da_Medline_per_id...
-Fetching_Medline_by_term...=Recupero_da_Medline_per_termine...
-Medline_import_canceled=Importazione_da_Medline_annullata
-Please_enter_a_valid_number=Inserire_un_numero_valido
-Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Inserire_una_lista_separata_da_virgole_di_ID_Medline_(numeri)_o_termini_di_ricerca.
-An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=Si_\u00e8_verificato_un_errore_durante_il_recupero_dalla_fonte_SPIRES_(%0):
-Error_while_fetching_from_Spires\:_=Errore_durante_il_recupero_da_SPIRES:_
-Connect_to_external_SQL_database=Connessione_ad_un_database_SQL_esterno
-Export_to_external_SQL_database=Esportazione_su_un_database_SQL_esterno
-
-Show_results_in_dialog=Mostra_i_risultati_in_una_finestra_di_dialogo
-Global_search=Ricerca_globale
-Show_search_results_in_a_window=Mostra_i_risultati_della_ricerca_in_una_finestra
-Search_results=Risultati_della_ricerca
-Move_file_to_file_directory?=Spostare_i_file_nella_cartella_dei_file_principale?
-Rename_to_'%0'=Rinomina_in_'%0'
-Move_to_file_directory=Sposta_nella_cartella_dei_file_principale
-
-You_have_changed_the_menu_and_label_font_size.=Sono_state_modificate_le_dimensioni_del_carattere_di_menu_ed_etichette.
-
-Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Il_database_\u00e8_protetto._Le_modifiche_esterne_devono_evvere_state_riviste_prima_di_poter_salvare.
-Protected_database=Database_protetto
-Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Rifiuta_di_salvare_prima_che_le_modifiche_esterne_siano_state_riviste.
-Database_protection=Protezione_del_database
-Unable_to_save_database=Impossibile_salvare_il_database
-BibTeX_key_generator=Generatore_di_chiavi_BibTeX
-Unable_to_open_link.=Impossibile_aprire_il_collegamento.
-Search_JSTOR=Ricerca_JSTOR
-Attempting_SQL_import...=Tentativo_di_importazione_SQL...
-BibO_RDF=BibO_RDF
-HTML_parser=Parser_HTML
-
-Move_the_keyboard_focus_to_the_entry_table=Sposta_il_cursore_nella_tabella_delle_voci
-MIME_type=Tipo_MIME
-
-This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Questa_funzione_permette_l'apertura_o_l'importazione_di_nuovi_file_in_una_istanza_di_JabRef_gi\u00e0_aperta<BR>invece_di_aprirne_una_nuova._Per_esempio,_ci\u00f2_\u00e8_utile_quando_u [...]
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Si_noti_che_queste_impostazioni_sono_usate_solo_per_i_campi_obsoleti_<B>pdf</B>_e_<B>ps</B>.<BR>Per_la_generalit\u00e0_degli_utenti,_l'impostazione_del_parametro_<B>Cartella_dei_file_principale</B>_dovrebbe_essere_sufficiente.
-Legacy_file_fields=Campi_file_obsoleti
-
-This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Per_ciascuna_delle_%0_estensioni,_JabRef_verificher\u00e0_l'esistenza_del_file.<BR>In_caso_negativo_proporr\u00e0_delle_opzioni_per_la_risoluzione_del_problema.
-
-Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Lanciare_una_ricerca,_es._"--fetch=Medline:cancer"
-
-The_ACM_Digital_Library=ACM_Digital_Library
-Reset=Reinizializza
-
-Use_IEEE_LaTeX_abbreviations=Usa_le_abbreviazioni_LaTeX_IEEE
-The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
-Search_ACM_Portal=Ricerca_nel_portale_ACM
-Connection_to_ACM_Portal_failed=Connessione_al_portale_ACM_fallita
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=All'apertura_di_un_collegamento_ad_un_file,_ricercare_un_file_corrispondente_se_non_ne_\u00e8_definito_uno.
-Settings_for_%0=Parametri__per_%0
-Insert_selected_citations_into_Vim=Inviare_le_citazioni_selezionate_a_Vim
-RIS=RIS
-Assign_exclusively_to_group=Assegna_esclusivamente_al_gruppo
-Bad_Request_'%0'.=Richiesta_erronea_'%0'.
-Mark_entries_imported_into_an_existing_database=Contrassegna_le_voci_importate_in_un_database_preesistente
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Rimuovi_tutti_i_contrassegni_prima_di_importare_nuove_voci_in_un_database_preesistente
-Forward=Successivo
-Back=Precedente
-Sort_the_following_fields_as_numeric_fields=Ordina_i_campi_seguenti_come_campi_numerici
-Line_%0\:_Found_corrupted_BibTeX-key.=Riga_%0\:_chiave_BibTeX_corrotta.
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Riga_%0\:_chiave_BibTeX_corrotta_(contiene_spazi).
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Riga_%0\:_chiave_BibTeX_corrotta_(virgola_mancante).
-Finished_downloading_full_text_document=Terminato_il_download_del_documento_citato
-Unable_to_find_full_text_document_in_the_linked_web_page.=Impossibile_trovare_il_documento_citato_nella_pagina_web_collegata.
-Connection_error_when_trying_to_find_full_text_document.=Errore_di_connessione_nel_corso_della_ricerca_del_documento_citato
-This_entry_provides_no_URL_or_DOI_links.=Questa_voce_non_fornisce_collegamenti_URL_o_DOI.
-Full_text_article_download_failed=Fallito_il_download_del_documento_citato
-Update_to_current_column_order=Salvare_l'ordine_delle_colonne_attuale
-
-Rename_field=Rinomina_il_campo
-Set/clear/rename_fields=Imposta/svuota/rinomina_i_campi
-Rename_field_to\:=Rinomina_il_campo_in\:
-Move_contents_of_a_field_into_a_field_with_a_different_name=Sposta_il_contenuto_di_un_campo_in_un_campo_con_nome_diverso
-
-You_can_only_rename_one_field_at_a_time=\u00c8_possibile_rinominare_solo_un_campo_per_volta
-Remove_all_broken_links=Rimuovere_tutti_i_collegamenti_non_validi
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Impossibile_utilizzare_la_porta_%0_per_operazioni_remote;_la_porta_potrebbe_essere_in_uso_da_parte_di_un'altra_applicazione._Provare_a_specificare_una_porta_diversa.
-
-Plugin_installer=Installazione_di_plugin
-Unable_to_create_plugin_directory=Impossibile_creare_una_cartella_dei_plugin
-Unable_to_copy_file=Impossibile_copiare_un_file
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Plugin_installato_correttamente._\u00c8_necessario_riavviare_JabRef_per_caricare_il_nuovo_plugin.
-Unable_to_create_user_plugin_directory=Impossibile_creare_una_cartella_utente_del_plugin
-Plugin_installation_failed.=Installazione_del_plugn_fallita.
-The_same_version_of_this_plugin_is_already_installed.=La_stessa_versione_del_plugin_\u00e8_gi\u00e0_installata.
-A_newer_version_of_this_plugin_is_already_installed.=Una_versione_pi\u00f9_recente_del_plugin_\u00e8_gi\u00e0_installata.
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Una_o_pi\u00f9_versioni_pi\u00f9_vecchie_del_plugin_sono_installate._Cancellare_le_vecchie_versioni?
-Old_versions_deleted_successfully.=La_cancellazione_delle_vecchie_versioni_\u00e8_riuscita.
-
-Install_plugin=Installa_plugin
-Download_plugin=Scarica_plugin
-Plugin_manager=Gestione_plugin
-Delete_the_%0_selected_plugins?=Cancellare_i_%0_plugin_selezionati?
-Delete_plugins=Cancella_plugin
-Delete_the_selected_plugin?=Cancellare_i_plugin_selezionati?
-Delete_plugin=Cancella_plugin
-Enter_download_URL=Inserire_lo_URL_di_download
-Plugin_name=Nome_del_plugin
-Version=Versione
-Unknown=Sconosciuto
-Not_loaded=Non_caricato
-Loaded=Caricato
-Could_not_determine_version_of_=Impossibile_determinare_la_versione_di_
-Install_anyway?=Installare_comunque?
-
-Looking_for_full_text_document...=Ricerca_del_documento_citato
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Segui_i_collegamenti_DOI_e_URL_prova_a_localizzare_il_file_PDF_del_documento_citato
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Impossibile_torvare_il_file_PDF_del_documento_citato._Nessun_algoritmo_di_ricerca_definito_per_il_sito_internet_'%0'.
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Trovato_il_collegamento_al_file_PDF,_ma_il_tipo_MIME_ricevuto_non_\u00e8_corretto._Ci\u00f2_potrebbe_indicare_che_non_si_ha_permessi_di_accesso_al_file_PDF_del_documento_citato.
-
-Autosave=Salvataggio_automatico
-Prompt_before_recovering_a_database_from_an_autosave_file=Richiedere_conferma_prima_del_recupero_di_un_database_da_un_salvataggio_automatico
-Autosave_interval_(minutes)=Intervallo_di_salvataggio_automatico_(minuti)
-Do_you_want_to_recover_the_database_from_the_autosave_file?=Recuperare_il_database_dal_salvataggio_automatico?
-Recover_from_autosave=Recupero_da_salvataggio_automatico
-%0_warnings=%0_avvertimenti
-
-Save_in_current_table_sort_order=Salvare_nell'ordine_corrente_della_tabella
-Export_in_current_table_sort_order=Esportare_nell'ordine_corrente_della_tabella
-Export_ordered_by_author/editor/year=Esportare_secondo_l'ordine_author/editor/year
-Export_entries_in_their_original_order=Esportare_le_voci_nell'ordine_originale
-Error_opening_file_'%0'.=Errore_nell'apertura_del_file_'%0'.
-Autosave_of_file_'%0'=Salvataggio_automatico_del_file_'%0'
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Errore_nell'apertura_del_salvataggio_automatico_di_'%0'._Tentativo_di_apertura_di_'%0'.
-
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugin_installati_nella_cartella_dei_plugin_dell'utente_(%0):
-Plugins_installed_in_other_locations\:=Plugin_installati_in_altre_cartelle:
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=I_plugin_verranno_cancellati_al_prossimo_avvio_di_JabRef.
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=Il_plugin_verr\u00e0_cancellato_al_prossimo_avvio_di_JabRef.
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Le_vecchie_versioni_del_plugin_verranno_cancellate_al_prossimo_avvio_di_JabRef.
-
-Formatter_not_found\:_%0=Formattazione_non_trovata\:_%0
-The_following_formatters_could_not_be_found=Le_seguenti_formattazioni_non_sono_state_trovate
-
-Clear_inputarea=Svuota_l'area_di_inserimento
-
-Automatically_set_file_links_for_this_entry=Definire_automaticamente_i_collegamenti_ai_file_per_questa_voce
-Could_not_save,_file_locked_by_another_JabRef_instance.=Impossibile_salvare,_il_file_\u00e8_bloccato_da_un'altra_istanza_di_JabRef.
-File_is_locked_by_another_JabRef_instance.=Il_file_\u00e8_bloccato_da_un'altra_istanza_di_JabRef.
-Do_you_want_to_override_the_file_lock?=Vuoi_ignorare_il_blocco_del_file?
-File_locked=File_bloccato
-Current_tmp_value=Variabile_"tmp"_corrente
-Metadata_change=Modifica_dei_metadati
-Changes_have_been_made_to_the_following_metadata_elements=Sono_stati_modificati_i_seguenti_elementi_dei_metadati
-
-Generate_groups_for_author_last_names=Genera_gruppi_in_base_al_cognome_dell'autore
-Generate_groups_for_editor_last_names=Genera_gruppi_in_base_al_cognome_del_curatore
-Generate_groups_from_keywords_in_a_BibTeX_field=Genera_gruppi_in_base_alle_parole_chiave_in_un_campo_BibTeX
-Enforce_legal_characters_in_BibTeX_keys=Imponi_l'utilizzo_dei_soli_caratteri_conformi_alla_sintassi_nelle_chiavi_BibTeX
-The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Il_carattere_#_non_\u00e8_consentito_nelle_stringhe_BibTeX_se_non_protetto_da_un_carattere_di_"escape"_come_in_'\\#'.
-Before_saving,_please_edit_any_strings_containing_the_#_character.=Prima_di_salvare,_modificare_le_stringhe_contenenti_il_carattere_#.
-
-Save_without_backup?=Salvare_senza_backup?
-Unable_to_create_backup=Impossibile_creare_un_backup
-## line below is a duplicate? 
-File_directory_is_not_set_or_does_not_exist.=La_cartella_dei_file_non_\u00e8_configurata_o_non_esiste.
-## end note
-
-Move_file_to_file_directory.=Sposta_il_file_nella_cartella_dei_file.
-Rename_file_to=Rinomina_il_file_in_
-<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Tutte_le_voci</b>_(questo_gruppo_non_pu\u00f2_essere_modificato_o_rimosso)
-static_group=gruppo_statico
-dynamic_group=gruppo_dinamico
-refines_supergroup=ridefinisce_il_super-gruppo
-includes_subgroups=include_il_super-gruppo
-contains=contiene
-search_expression=espressione_di_ricerc
-
-Disable_file_renaming_in_non-native_file_dialog=Disattivare_la_possibilit\u00e0_di_rinominare_i_file_nelle_finestre_di_dialogo_file_non_native
-File_dialog=Finestra_di_dialogo_file
-No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Nessuna_voce_trovata._\u00c8_possibile_non_si_disponga_dell'accesso_alla_ricerca_su_JStor
-
-Search_ScienceDirect=Ricerca_in_ScienceDirect
-Error_while_fetching_from_ScienceDirect=Errore_nel_recupero_dei_dati_da_ScienceDirect
-
-Error_initializing_custom_export_format_from_string_'%0'=Errore_di_inizializzazione_del_formato_di_esportazione_personalizzato_dalla_stringa_'%0'
-
-BibLaTeX_mode=modalit\u00e0_BibLaTeX
-Optional_fields_2=Campi_opzionali_2
-Please_wait=Attendere,_prego.
-Waiting_for_save_operation_to_finish=In_attesa_del_termine_del_salvataggio
-Resolving_duplicate_BibTeX_keys...=Risoluzione_delle_chiavi_BibTeX_duplicate...
-Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Terminata_la_risoluzione_delle_chiavi_BibTeX_duplicate._%0_voci_modificate.
-This_database_contains_one_or_more_duplicated_BibTeX_keys.=Questo_database_contiene_una_o_pi\u00f9_chiavi_BibTeX_duplicate.
-Do_you_want_to_resolve_duplicate_keys_now?=Vuoi_effettuare_la_risoluzione_delle_chiavi_duplicate_ora?
-
-Find_and_remove_duplicate_BibTeX_keys=Trova_e_rimuovi_le_chiavi_BibTeX_duplicate
-Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Sintassi_attesa_per_--fetch='<name_of_fetcher>:<query>'
-Duplicate_BibTeX_key=Chiave_BibTeX_duplicata
-Duplicate_key=Chiave_duplicata
-Generate_key=Genera_una_chiave
-Import_marking_color=Colore_per_contrassegnare_le_voci_importate
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_voci_trovate._Per_ridurre_il_carico_sul_server_ne_saranno_scaricate_solo_%1._Il_processo_sar\u00e0_piuttosto_lento,_in_modo_da_non_creare_problemi_ad_ACM.
-
-BibTeX_importer=Filtro_di_importazione_BibTeX
-Always_add_letter_(a,_b,_...)_to_generated_keys=Aggiungi_sempre_una_lettera_(a,_b,_...)_alle_chiavi_generate
-
-Ensure_unique_keys_using_letters_(a,_b,_...)=Assicura_l'unicit\u00e0_delle_chiavi_con_l'uso_di_lettere_(a,_b,_...)
-Ensure_unique_keys_using_letters_(b,_c,_...)=Assicura_l'unicit\u00e0_delle_chiavi_con_l'uso_di_lettere_(b,_c,_...)
-Entry_editor_active_background_color=Colore_dello_sfondo_quando_attivo_l'editor_delle_voci
-Entry_editor_background_color=Colore_dello_sfondo_dell'editor_delle_voci
-Entry_editor_font_color=Colore_del_font_dell'editor_delle_voci
-Entry_editor_invalid_field_color=Colore_del_campo_non_valido_nell'editor_delle_voci
-
-Table_and_entry_editor_colors=Colori_della_tabella_e_dell'editor_delle_voci
-
-An_autosave_file_was_found_for_this_database._This_could_indicate_=Un_file_di_savataggio_automatico_\u00e8_stato_trovato_per_questo_database._Questo_pu\u00f2_indicare_
-that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=che_JabRef_non_\u00e8_stato_chiuso_correttamente_l'ultima_volta_che_il_file_\u00e8_stato_utilizzato.
-General_file_directory=Cartella_dei_file_generale
-User-specific_file_directory=Cartella_dei_file_specifica_dell'utente
-Error_setting_look_and_feel=Errore_nell'impostazione_del_"Look-and-Feel"
-Search_failed\:_illegal_search_expression=Ricerca_fallita:_espressione_di_ricerca_illegale
-Show_ArXiv_column=Mostra_la_colonna_ArXiv
-<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Decomprimi_il_file_zip_contenente_i_filtri_di_importazione/esportazione_per_Endnote,<BR>per_una_interoperabilit\u00e0_ottimale_con_JabRef</HTML>
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Evidenzia_i_gruppi_contenenti_voci_incluse_in_uno_dei_gruppi_selezionati
-You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=\u00c8_necessario_inserire_un_intero_nell'intervallo_1025-65535_nel_campo_di_testo_per
-Automatically_open_browse_dialog_when_creating_new_file_link=Apri_automaticamente_la_finestra_di_dialogo_"Sfoglia"_quando_viene_creato_un_nuovo_collegamento_ad_un_file
-
-Import_Metadata_from\:=Importa_i_Metadati_da:
-Choose_the_source_for_the_metadata_import=Scegli_la_sorgente_dei_metadati_da_importare
-Create_entry_based_on_XMP_data=Crea_una_nuova_voce_in_base_ai_dati_XMP
-Create_entry_based_on_data_fetched_from=Crea_una_nuova_voce_in_base_ai_dati_recuperati_da
-Create_blank_entry_linking_the_PDF=Crea_una_voce_vuota_collegata_al_file_PDF
-Only_attach_PDF=Allega_solo_il_file_PDF
-Mr._dLib_Metadata_Entries_Associated_With\:=Metadati_di_Mr._dLib_associati_con:
-Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Metadati_di_Mr._dLib_associati_con_il_file_PDF
-Title=Titolo
-Author(s)=Autori
-Published_Year=Anno_di_pubblicazione
-No_metadata_found.=Nessun_metadato_trovato.
-Mr._dLib_web_service_is_temporarily_unavailable.=Il_servizio_web_Mr._dLib_\u00e8_temporaneamente_non_disponibile.
-Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Il_servizio_web_Mr._dLib_\u00e8_temporaneamente_non_disponibile._Si_prega_di_riprovare_pi\u00f9_tardi.
-You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Non_sei_connesso_a_Internet._Per_accedere_al_servizio_web_Mr._dLib_\u00e8_necassaria_una_connessione_ad_Internet_attiva.
-No_Internet_Connection.=Nessuna_connessione_a_Internet.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Questa_versione_di_JabRef_sta_tentando_di_accedere_ad_una_vecchia_versione_del_servizio_web_Mr._dLib_non_pi\u00f9_funzionante.\nVisita_http://jabref.sourceforge.net_oppure_http://www.mr-dlib.org_per_maggiori_informazioni_e_aggiornamenti.
-Web_Service_Version_Outdated=Versione_del_servizio_web_obsoleta
-The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=La_versione_del_servizio_web_Mr._dLib_a_cui_stai_tentando_di_accedere_\u00e8_obsoleta.
-Update_empty_fields_with_data_fetched_from=Aggiorna_i_campi_vuoti_con_i_dati_recuperati_da
-Create_New_Entry=Crea_una_nuova_voce
-Update_Existing_Entry=Aggiorna_la_voce_esistente
-Mr._dLib=Mr._dLib
-More_information=Ulteriori_informazioni
-Fetching_Metadata...=Recupero_dei_metadati...
-Metadata=Metadati
-Autocomplete_names_in_'Firstname_Lastname'_format_only=Autocompletamento_dei_nomi_solo_nel_formato_'Firstname_Lastname'
-Autocomplete_names_in_'Lastname,_Firstname'_format_only=Autocompletamento_dei_nomi_solo_nel_formato_'Lastname,_Firstname'
-Autocomplete_names_in_both_formats=Autocompletamento_dei_nomi_in_entrambi_i_formati
-Marking_color_%0=Colore_di_contrassegno_%0
-The_name_'comment'_can_not_be_used_as_an_entry_type_name.=Il_nome_'comment'_non_pu\u00f2_essere_utilizzato_come_nome_di_tipo_di_voce.
-You_must_enter_an_integer_value_in_the_text_field_for=Inserire_un_numero_intero_nel_campo_di_testo_per
-File_directory=Cartella_dei_file
-Send_as_email=Invia_come_email
-References=Riferimenti
-Sending_of_emails=Invio_di_email
-Subject_for_sending_an_email_with_references=Oggetto_per_l'invio_di_email_con_riferimenti
-Automatically_open_folders_of_attached_files=Apri_automaticamente_le_cartelle_dei_file_allegati
-Create_entry_based_on_content=Crea_una_voce_in_base_al_contenuto
-Store_choice_as_default=Salva_la_scelta_come_predefinita
-Do_not_show_this_box_again_for_this_import=Non_mostrare_nuovamente_questo_dialogo_per_questa_importazione
-Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Usa_sempre_questa_modalit\u00e0_di_importazione_PDF_(non_chiedere_per_ogni_importazione)
-Error_creating_email=Errore_nella_creazione_della_email
-Could_not_open_directory=Impossibile_aprire_la_cartella
-Entries_added_to_an_email=Voci_aggiunte_ad_un'email
-exportFormat=Formato_di_esportazione
-Output_file_missing=File_di_output_mancante
-No_search_matches.=Nessuna_corrispondenza_per_la_ricerca.
-The_output_option_depends_on_a_valid_input_option.=L'opzione_di_output_dipende_da_un'opzione_di_input_valida.
-Default_import_style_for_drag&drop_of_PDFs=Modalit\u00e0_di_importazione_predefinita_per_il_drag&drop_dei_file_PDF
-Default_PDF_file_link_action=Azione_predefinita_per_il_collegamento_ai_file_PDF
-File_name_format_pattern=Modello_del_formato_dei_nomi_dei_file
-PostgreSQL_database=Database_PostgreSQL
-DIN_1505=DIN_1505
-Wrong_Format=Formato_errato
-Path_to_gnuclient_or_emacsclient=Percorso_per_gnuclient_o_emacsclient
-Additional_parameters=Parametri_addizionali
-Encrypted_documents_are_not_supported=I_documenti_criptati_non_sono_gestiti
-Cite_selected_entries=Cita_le_voci_selezionate
-Cite_selected_entries_with_in-text_citation=Cita_le_voci_selezionate_con_citazione_inclusa_nel_testo
-Cite_special=Citazione_speciale
-Extra_information_(e.g._page_number)=Informazione_aggiuntiva_(es._numero_di_pagina)
-Manage_citations=Gestione_delle_citazioni
-Problem_modifying_citation=Problema_nella_modifica_della_citazione
-Citation=Citazione
-Context=Contesto
-Extra_information=Informazione_aggiuntiva
-Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=Impossibile_risolvere_la_voce_BibTeX_per_l'identificativo_di_citazione_'%0'.
-Styles=Stili
-Select_style=Seleziona_stile
-This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Lista_degli_stili_disponibili._Selezionare_quello_che_si_intende_utilizzare
-Journals=Riviste
-Cite=Cita
-Cite_in-text=Citazione_inclusa_nel_testo
-Insert_empty_citation=Inserisci_una_citazione_vuota
-Merge_citations=Accorpa_citazioni
-Manual_connect=Connessione_manuale
-Select_Writer_document=Selezionare_il_documento_Writer
-Sync_OO_bibliography=Sincronizza_la_bibliografia_OO
-OpenOffice=OpenOffice
-Select_which_open_Writer_document_to_work_on=Selezionare_il_documento_Writer_aperto_su_cui_lavorare
-Connected_to_document=Connesso_al_documento
-Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Inserire_una_citazione_senza_testo_(la_voce_comparir\u00e0_nella_lista_dei_riferimenti)
-Cite_selected_entries_with_extra_information=Cita_le_voci_selezionate_con_informazioni_aggiuntive
-Ensure_that_the_bibliography_is_up-to-date=Assicura_che_la_bibliografia_sia_aggiornata
-Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=Il_tuo_documento_OpenOffice_fa_riferimento_alla_chiave_BibTeX_'%0',_non_presente_nel_database_corrente.
-Unable_to_synchronize_bibliography=Impossiblile_sincronizzare_la_bibliografia
-Combine_pairs_of_citations_that_are_separated_by_spaces_only=Combina_le_coppie_di_citazioni_separate_solo_da_spazi
-Autodetection_failed=Autorilevamento_non_riuscito
-Connecting=Connessione_in_corso
-Please_wait...=Attendere...
-Unable_to_connect=Impossibile_connettersi
-Set_connection_parameters=Imposta_i_parametri_di_connessione
-Path_to_OpenOffice_directory=Percorso_per_la_cartella_OpenOffice
-Path_to_OpenOffice_executable=Percorso_per_il_file_eseguibile_OpenOffice
-Path_to_OpenOffice_library_dir=Percorso_per_la_cartella_della_libreria_OpenOffice
-Autodetect=Autorilevamento
-Connection_lost=Connessione_perduta
-The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Il_formato_del_paragrafo_\u00e8_controllato_dalle_propriet\u00e0_'ReferenceParagraphFormat'_o_'ReferenceHeaderParagraphFormat'_nel_file_di_stile.
-The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Il_formato_del_carattere_\u00e8_controllato_dalla_propriet\u00e0_della_citazione_'CitationCharacterFormat'_nel_file_di_stile.
-Automatically_sync_bibliography_when_inserting_citations=Sincronizza_automaticamente_la_bibliografia_all'inserimento_delle_citazioni
-Look_up_BibTeX_entries_in_the_active_tab_only=Ricerca_le_voci_BibTeX_solo_nella_scheda_attiva
-Look_up_BibTeX_entries_in_all_open_databases=Ricerca_le_voci_BibTeX_in_tutti_i_database_aperti
-Use_in-parenthesis_citation=Usa_citazione_tra_parentesi
-Use_in-text_citation=Usa_citazione_inclusa_nel_testo
-Autodetecting_paths...=Autorilevamento_dei_percorsi...
-Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=Impossibile_rilevare_l'installazione_OpenOffice._Impostare_manualmente_la_cartella_di_installazione.
-Could_not_find_OpenOffice_installation=Impossibile_trovare_l'installazione_OpenOffice
-Directories=Cartelle
-Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Trovati_pi\u00f9_di_un_file_eseguibile_OpenOffice._Selezionare_quello_al_quale_connettersi:
-Choose_OpenOffice_executable=Scegliere_file_eseguibile_OpenOffice
-Select_document=Selezionare_il_documento
-Edit_Group_Membership=Modifica_l'appartenenza_ai_gruppi
-PostgreSQL=PostgreSQL
-Highlight_Words=Evidenzia_le_parole
-JSTOR_import_cancelled=Inportazione_da_JSTOR_annullata
-HTML_list=Lista_HTML
-Click_group_to_toggle_membership_of_selected_entries=Cliccare_sul_gruppo_per_invertire_l'appartenenza_delle_voci_selezionate
-Use_EMACS_23_insertion_string=Usa_la_stringa_di_inserimento_EMACS_23
-Normalize_to_BibTeX_name_format=Normalizzare_con_il_formato_dei_nomi_BibTeX
-If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=Se_possiblile,_normalizzare_questa_lista_di_nomi_in_accordo_con_lo_standard_di_formattazione_dei_nomi_BibTeX
-Could_not_open_%0=Impossiblie_aprire_%0
-Unknown_import_format=Formato_di_importazione_sconosciuto
-Open_INSPIRE_entry=Apri_la_voce_INSPIRE
-An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=Si_\u00e8_verificato_un_errore_durante_il_recupero_dalla_fonte_INSPIRE_(%0):
-Error_while_fetching_from_Inspire\:_=Errore_nel_recupero_dei_dati_da_INSPIRE:
-Web_search=Ricerca_sul_Web
-Autocomplete_names=Autocompletamento_dei_nomi
-You_must_select_either_a_valid_style_file,_or_use_the_default_style.=Selezionare_un_file_di_stile_valido_oppure_utilizzare_lo_stile_predefinito
-
-Default_style=Stile_predefinito
-Choose_style_file_directly=Scegliere_la_cartella_dei_file_di_stile
-Choose_from_a_directory=Scegliere_da_una_cartella
-No_directory_defined_for_%0-files=Nessuna_cartella_impostata_per_i_file_%0
-Allow_file_links_relative_to_each_bib_file's_location=Consenti_il_collegamento_dei_file_relativo_alla_posizione_di_ciascun_file_BibTeX
-Style_selection=Selezione_dello_stile
-The_panel_below_shows_the_definition_of_the_default_style.=Il_pannello_sottostante_mostra_la_definizione_dello_stile_predefinito.
-If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=Per_utilizzarlo_come_modello_per_un_nuovo_stile,_\u00e8_possibile_copiare_il_contenuto_in_un_file_.jstyle_nuovo
-
-Default_style_(author-year_citations)=Stile_predefinito_(citazione_autore-anno)
-Default_style_(numerical_citations)=Stile_predefinito_(citazione_numerica)
-No_valid_style_file_defined=Nessun_file_di_stile_valido_definito
-Choose_pattern=Sceglire_un_modello
-Use_the_bib_file_location_as_primary_file_directory=Utilizza_la_posizione_del_file_BibTex_come_cartella_dei_file_principale
-Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=Impossibile_eseguire_il_programma_gnuclient/emacsclient._Assicurarsi_che_il_programma_gnuclient/emacsclient_sia_installato_e_disponibile_nel_PATH.
-Built-in_journal_list=Lista_di_riviste_interna
-OpenOffice/LibreOffice_connection=Connessione_a_OpenOffice/LibreOffice
-You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=\u00c8_possibile_aggiungere_altri_nomi_di_riviste_creando_una_lista_personale,<BR>oppure_creando_un_collegamento_a_liste_di_riviste_esterne.
-JabRef_includes_a_built-in_list_of_journal_abbreviations.=JabRef_include_una_lista_interna_di_abbreviazioni_di_nomi_di_riviste.
-You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=Selezionare_un_file_di_stile_valido_oppure_utilizzare_uno_degli_stili_predefiniti.
-You_must_select_either_a_valid_style_file,_or_use_a_default_style.=Selezionare_un_file_di_stile_valido_oppure_utilizzare_uno_stile_predefinito.
-Show=Mostra
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=Questo_\u00e8_un_semplice_dialogo_di_copia_e_incolla._Prima_carica_o_incolla_il_testo_nell'area_di_inserimento_di_testo.<BR>Quindi_\u00e8_possibile_selezionare_parti_del_testo_e_assegnarle_ai_campi_BibTeX.
-Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=La_libreria_Java_Bouncy_Castle_non_\u00e8_stata_trovata._\u00c8_necessario_scaricarla_ed_installarla._Per_ulteriori_informazioni_vedi_http://www.bouncycastle.org/.
-
-First_select_entries_to_clean_up.=Selezionare_le_voci_da_ripulire.
-Cleanup_entry=Ripulisci_voce
-Autogenerate_PDF_Names=Genera_automaticamente_i_nomi_dei_file_PDF
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=La_generazione_automatica_dei_nomi_dei_file_PDF_non_pu\u00f2_essere_annullata._Continuare?
-File_rename_failed_for=Rinominazione_dei_file_fallita_per
-You_have_toggled_the_BibLaTeX_mode.=Attivata_la_modalit\u00e0_BibLaTeX.
-Use_full_firstname_whenever_possible=Usa_nome_completo_quando_possibile
-Use_abbreviated_firstname_whenever_possible=Usa_nome_abbreviato_quando_possibile
-Use_abbreviated_and_full_firstname=Usa_nome_abbreviato_e_completo
-Autocompletion_options=Opzioni_di_autocompletamento
-Autocomplete_after_following_number_of_characters=Attiva_autocompletamento_dopo_il_seguente_numero_di_caratteri
-Name_format_used_for_autocompletion=Formato_dei_nomi_usato_per_l'autocompletamento
-Treatment_of_first_names=Gestione_dei_nomi
-No_icon_found_for_%0=Nessuna_icona_trovata_per_%0
-Cleanup_entries=Ripulisci_voci
-Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=Sposta_i_DOI_dai_campi_note_e_URL_al_campo_DOI_e_rimuovi_il_prefisso_'http'
-Format_content_of_month_field_to_#mon#=Formatta_il_contenuto_del_campo_'month'_nella_forma_'#mon#'
-Ensure_that_page_ranges_are_of_the_form_num1--num2=Assicura_che_gli_intervalli_di_pagine_siano_nella_forma_'num1--num2'
-Make_paths_of_linked_files_relative_(if_possible)=Rendi_relativi_i_percorsi_dei_file_collegati_(se_possibile)
-Rename_PDFs_to_given_file_name_format_pattern=Rinomina_i_file_PDF_secondo_il_modello_di_nome_dei_file
-Rename_only_PDFs_having_a_relative_path=Rinomina_solo_i_file_PDF_con_un_percorso_relativo
-What_would_you_like_to_clean_up?=Cosa_si_vuole_ripulire?
-Doing_a_cleanup_for_%0_entries...=Ripulitura_per_%0_voci...
-No_entry_needed_a_clean_up=Nessuna_voce_necessita_ripulitura
-One_entry_needed_a_clean_up=Una_voce_necessita_ripulitura
-%0_entries_needed_a_clean_up=%0_voci_necessitano_ripulitura
-Imported_=Importato
-Minimize_to_system_tray=Minimizza_nell'area_di_notifica
-
-This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=Questa_funzione_genera_un_nuovo_database_basato_sulle_voci_necessarie_in_un_documento_LaTeX_esistente.
-You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=\u00c8_necessario_selezionare_uno_dei_database_aperti_da_cui_scegliere_le_voci,_cos\u00ec_come_il_file_AUX_prodotto_da_LaTeX_nel_compilare_il_documento.
-Automatically_assign_new_entry_to_selected_groups=Assegna_automaticamente_la_nuova_voce_ai_gruppi_selezionati
-Error_importing_from_database=Errore_di_importazione_dal_database
-
-Incomplete_search_results=Risultati_della_ricerca_incompleti
-%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=Trovate_%0_voci,_ma_\u00e8_stato_possibile_risolvere_solo_%1_di_queste.
-
-Error_downloading_file_'%0'=Errore_nel_corso_del_download_del_file_'%0'
-Download_failed=Download_fallito
-
-%0_databases_will_be_imported=%0_database_saranno_importati
-Importing_cancelled=Importazione_annullata
-There_are_no_available_databases_to_be_imported=Non_sono_disponibili_database_da_importare
-Import_from_SQL_database=Importa_da_un_database_SQL
-Imported_%0_databases_successfully=Importati_con_successo_%0_database
-<_CREATE_NEW_DATABASE_>=<_CREA_NUOVO_DATABASE_>
-Remove_Selected=Rimuovi_la_selezione
-SQL_Database_Exporter=Esportazione_database_SQL
-Select_target_SQL_database\:=Seleziona_il_database_SQL_di_destinazione:
-SQL_Database_Importer=Importazione_database_SQL
-Please_select_which_JabRef_databases_do_you_want_to_import\:=Selezionare_il_database_JabRef_da_importare:
-
-Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=Impossibile_analizzare_l'albero_dei_gruppi._Salvando_il_database_BibTeX_i_gruppi_saranno_persi.
-Attach_file=Allega_file
-
-Setting_all_preferences_to_default_values.=Imposta_tutte_le_preferenze_ai_valori_predefiniti.
-Resetting_preference_key_'%0'=Reimposta_la_chiave_delle_preferenze_'%0'
-Unknown_preference_key_'%0'=Chiave_delle_preferenze_sconosciuta_'%0'
-Unable_to_clear_preferences.=Impossibile_reimpostatare_le_preferenze.
-
-Reset_preferences_(key1,key2,..._or_'all')=Reimposta_le_preferenze_(chiave1,chiave2,..._oppure_'all')
-Find_unlinked_files=Trovati_file_non_collegati
-Select_All=Seleziona_tutto
-Unselect_All=Deseleziona_tutto
-Expand_All=Espandi_tutto
-Collapse_All=Comprimi_tutto
-Select_Directory=Seleziona_cartella
-Choose_Directory=Scegli_cartella
-Use_the_selected_directory_to_start_with_the_search.=Usa_la_cartella_selezionata_per_iniziare_la_ricerca.
-Browse...=Sfoglia...
-Opens_the_file_browser.=Apre_il_dialogo_di_selezione_dei_file.
-Scan_directory=Analizza_la_cartella
-Searches_the_selected_directory_for_unlinked_files.=Ricerca_nella_cartella_selezionata_file_non_collegati.
-Starts_the_import_of_bibtex_entries.=Inizia_l'importazione_delle_voci_bibtex
-Leave_this_dialog.=Abbandona_questo_dialogo.
-Create_directory_based_keywords=Crea_parole_chiave_in_base_al_nome_delle_cartelle
-Creates_keywords_in_created_entrys_with_directory_pathnames=Crea_parole_chiave_nelle_voci_generate_in_base_al_percorso_delle_cartelle
-Select_a_directory_where_the_search_shall_start.=Seleziona_una_cartella_dalla_quale_iniziare_la_ricerca.
-Select_file_type\:=Seleziona_il_tipo_di_file:
-These_files_are_not_linked_in_the_active_database.=Questi_file_non_sono_collegati_nel_database_attivo.
-Entry_type_to_be_created\:=Tipo_di_voci_da_creare:
-Searching_file_system...=Ricerca_nel_filesystem...
-Importing_into_Database...=Importazione_nel_database
-Select_directory=Seleziona_cartella
-Select_files=Seleziona_file
-Bibtex_entry_creation=Creazione_della_voce_BibTex
-<No_selection>=<Nessuna_selezione>
-Push_selection_to_TeXstudio=Invia_la_selezione_a_TeXstudio
-Path_to_TeXstudio=Invia_a_TeXstudio
-Program_'%0'_not_found=Programma_'%0'_non_trovato
-Pushed_citations_to_TeXstudio=Inviate_le_citazioni_a_TeXstudio
-Unable_to_connect_to_freecite_online_service.=Impossibile_connettersi_al_servizio_online_FreeCite.
-Parse_with_FreeCite=Analizza_con_FreeCite
-Insert_selected_citations_into_TeXstudio=Inserisci_le_citazioni_selezionate_in_TeXstudio
-The_current_BibTeX_key_will_be_overwritten._Continue?=La_chiave_BibTeX_corrente_sar\u00e0_sovrascritta._Continuare?
-Overwrite_key=Sovrascrivi_chiave
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Le_chiavi_esistenti_non_vengono_sovrascritte._Per_cambiare_questa_impostazione,_aprire_Opzioni_->_Preferenze_->_Generatore_di_chiavi_BibTeX
-How_would_you_like_to_link_to_'%0'?=Come_vuoi_collegare_a_'%0'?
-Bibtex_key_patterns=Modelli_delle_chiavi_BibTeX
-Changed_special_field_settings=Cambiate_le_impostazioni_dei_campi_speciali
-Clear_priority=Azzera_le_priorit\u00e0
-# not sure how to translate 'rank': voto, punteggio, valutazione, grado, rango?
-Clear_rank=Azzera_la_valutazione
-Compact_rank=Compatta_la_valutazione
-Convert_1st,_2nd,_..._to_real_superscripts=Converti_1st,_2nd,_..._in_apici
-Dropped_comment_from_database=Cancellato_il_commento_dal_database
-Enable_PDF_preview=Abilita_anteprima_PDF
-Enable_special_fields=Abilita_campi_speciali
-Five_stars=Cinque_stelle
-Four_stars=Quattro_stelle
-Help_on_special_fields=Aiuto_sui_campi_speciali
-Keywords_of_selected_entries=Parole_chiave_delle_voci_selezionate
-Manage_content_selectors=Gestione_dei_selettori_dei_contenuti
-Manage_keywords=Gestione_delle_parole_chiave
-Marked_entries'_quality_as_good=Qualit\u00e0_delle_voci_contrassegnata_come_'buona'
-Marked_entries_as_relevant=Voci_contrassegnate_come_'attinenti'
-No_priority_information=Nessuna_informazione_di_priorit\u00e0
-No_rank_information=Nessuna_informazione_sulla_valutazione
-One_star=Una_stella
-Priority=Priorit\u00e0
-Priority_high=Priorit\u00e0_alta
-Priority_low=Priorit\u00e0_bassa
-Priority_medium=Priorit\u00e0_media
-Quality=Qualit\u00e0
-Rank=Valutazione
-Relevance=Attinenza
-Set_priority=Assegna_priorit\u00e0
-Set_priority_to_high=Assegna_priorit\u00e0_alta
-Set_priority_to_low=Assegna_priorit\u00e0_bassa
-Set_priority_to_medium=Assegna_priorit\u00e0_media
-Set_rank_to_five_stars=Assegna_valutazione_di_cinque_stelle
-Set_rank_to_four_stars=Assegna_valutazione_di_quattro_stelle
-Set_rank_to_one_star=Assegna_valutazione_di_una_stella
-Set_rank_to_three_stars=Assegna_valutazione_di_tre_stelle
-Set_rank_to_two_stars=Assegna_valutazione_di_due_stelle
-Show_one_letter_heading_for_icon_columns=Mostra_intestazione_ad_una_lettera_per_le_colonne_di_icone
-Show_priority=Mostra_priorit\u00e0
-Show_quality=Mostra_qualit\u00e0
-Show_rank=Mostra_valutazione
-Show_relevance=Mostra_attinenza
-Synchronize_with_keywords=Sincronizza_con_le_parole_chiave
-Synchronized_special_fields_based_on_keywords=Sincronizzati_i_campi_speciali_in_base_alle_parole_chiave.
-Three_stars=Tre_stelle
-# 'toggle' translated as in German translation
-Toggle_relevance=Mostra/Nascondi_attinenza
-Toogle_quality_assured=Mostra/Nascondi_qualit\u00e0
-Two_stars=Due_stelle
-Update_keywords=Aggiorna_parole_chiave
-Write_values_of_special_fields_as_separate_fields_to_BibTeX=Scrivi_i_valori_dei_campi_speciali_come_campi_separati_nelle_voci_BibTeX
-You_have_changed_settings_for_special_fields.=Sono_state_modificate_le_impostazioni_per_i_campi_speciali.
-no_preview_available=Nessuna_anteprima_disponibile
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=Trovate_%0_voci._Per_ridurre_il_carico_sul_server_ne_saranno_scaricate_solo_%1.
-A_string_with_that_label_already_exists=Una_stringa_con_questa_etichetta_esiste_gi\u00e0.
-Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=Perduta_la_connessione_con_OpenOffice._Assicurarsi_che_OpenOffice_sia_in_esecuzione_e_provare_a_riconnettersi.
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Correggi_la_voce_e_riapri_l'editor_per_mostrare/modificare_il_codice_sorgente.
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=Impossibile_la_connessione_a_un_processo_gnuserv_in_esecuzione._Accertarsi_che_Emacs_o_XEmacs_siano_in_esecuzione,<BR>e_che_il_server_sia_stato_avviato_(con_il_comando_'server-start'/'gnuserv-start').
-Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=Impossibile_la_connessione_ad_OpenOffice.\nAssicurarsi_che_OpenOffice_sia_installato_con_supporto_per_Java.\nSe_si_effettua_la_connessione_manualmente_verificare_i_percorsi_al_programma_e_alla_libreria.\n\nMessaggio_di_errore:_
-Created_group_"%0".=Creato_il_gruppo_"%0".
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Il_file_\u00e8_stato_aggiornato_esternamente._Sicuro_di_voler_salvare?
-If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=Se_la_voce_incollata_o_importata_ha_il_campo_gi\u00e0_impostato,_sovrascrivere.
-Import_Metadata_From_PDF=Importa_metadati_dal_file_PDF
-Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Non_connesso_ad_alcun_documento_Writer._Assicurarsi_che_un_documento_sia_aperto_e_connetterlo_con_il_bottone_"Selezionare_il_documento_Writer".
-Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=Questa_\u00e8_una_prima_versione_beta._Non_utilizzarla_senza_aver_fatto_un_backup_dei_file!
-Removed_all_subgroups_of_group_"%0".=Eliminati_tutti_i_sottogruppi_del_gruppo_"%0".
-To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=Per_disabilitare_la_modalit\u00e0_chiavetta_di_memoria_rinominare_o_cancellare_il_file_"jabref.xml"_che_si_trova_nella_cartella_di_installazione_di_JabRef.
-Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Impossibile_connettersi._Una_possibile_ragione_\u00e8_il_fatto_che_JabRef_e_OpenOffice/LibreOffice_non_vengono_eseguiti_nella_stessa_modalit\u00e0_a_32_o_64_bit.
-Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Impossibile_determinare_nome_e_versione_del_plugin._Potrebbe_non_essere_un_plugin_di_JabRef_valido.
-Use_the_following_delimiter_character(s)\:=Usa_i_seguenti_caratteri_di_delimitazione:
-When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=Quando_si_scaricano_i_file_o_si_spostano_i_file_collegati,_preferire_la_posizione_del_file_BibTeX_alla_cartella_impostata_sopra.
-Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Il_file_di_stile_specifica_il_formato_di_carattere_"%0"_che_non_\u00e8_tuttavia_definito_nel_documento_OpenOffice_corrente.
-Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Il_file_di_stile_specifica_il_formato_di_paragrafo_"%0"_che_non_\u00e8_tuttavia_definito_nel_documento_OpenOffice_corrente.
-
-Error_fetching_from_Google_Scholar=Errore_nel_recupero_dei_dati_da_Google_Scholar
-Run_HTML_converter_on_title=Eseguire_la_conversione_HTML_sul_titolo
-Searching...=Ricerca_in_corso...
-You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=Sono_state_selezionate_pi\u00f9_di_%0_voci_da_scaricare._Alcuni_siti_potrebbero_bloccare_la_connessione_se_si_eseguono_scaricamenti_troppo_numerosi_e_rapidi._Continuare?
-Confirm_selection=Conferma_la_selezione
-Unknown_DOI\:_'%0'.=DOI sconosciuto:
-Get_BibTeX_entry_from_DOI=Recupera_la_voce_BibTeX_dal_DOI
-Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Conversione_di_apici_e_pedici_in_equazioni_piuttosto_che_in_testo.
-Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Aggiungere_{}_alle_parole_del_titolo_specificate_per_mantenere_la_corretta_capitalizzazione_nella_ricerca.
-Import_conversions=Importare_le_conversioni
-Run_filter_on_title_keeping_the_case_of_selected_words=Eseguire_il_filtro_sul_titolo_preservando_la_capitalizzazione_delle_parole_selezionate
-Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=Errori_intermittenti_sul_server_IEEE_Xplore._Riprovare_pi\u00f9_tardi.
-Please_enter_a_search_string=Inserire_una_stringa_di_ricerca
-Please_open_or_start_a_new_database_before_searching=Aprire_o_creare_un_nuovo_database_prima_di_effettuare_la_ricerca
-An_Error_occurred_while_fetching_from_ADS_(%0)\:=Si_\u00e8_verificato_un_errore_durante_il_recupero_da_ADS_(%0):
-Error_while_fetching_from_ADS=Errore_nel_recupero_dei_dati_da_ADS
-Error_while_fetching_from_OAI2=Errore_nel_recupero_dei_dati_da_OAI2
-An_Error_occurred_while_parsing_abstract=Si_\u00e8_verificato_un_errore_durante_l'elaborazione_del_riassunto
-Unknown_DiVA_entry\:_'%0'.=Voce_DiVA_sconosciuta:_'%0'
-Get_BibTeX_entry_from_DiVA=Recupera_la_voce_BibTeX_da_DiVA
-Log=Registro
-Remove_unneccessary_$,_{,_and_}=
+#!
+#! edited by Eclipse PropertiesEditor
+#! encoding:ISO-8859-1
+%0_contains_the_Regular_Expression_<b>%1</b>=%0_contiene_l'Espressione_Regolare_<b>%1</b>
+%0_contains_the_term_<b>%1</b>=%0_contiene_il_termine_<b>%1</b>
+%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_non_contiene_l'Espressione_Regolare_<b>%1</b>
+%0_doesn't_contain_the_term_<b>%1</b>=%0_non_contiene_il_termine_<b>%1</b>
+%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_non_corrisponde_all'Espressione_Regolare_<b>%1</b>
+%0_doesn't_match_the_term_<b>%1</b>=%0_non_corrisponde_al_termine_<b>%1</b>
+
+%0_export_successful=%0_esportazioni_riuscite
+%0_field_set=Definizione_del_campo_%0
+%0_matches_the_Regular_Expression_<b>%1</b>=%0_corrisponde_all'Espressione_Regolare_<b>%1</b>
+%0_matches_the_term_<b>%1</b>=%0_corrisponde_al_termine_<b>%1</b>
+<field_name>=<nome_del_campo>
+<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Non_\u00e8_stato_trovato_il_file_'%0'_<BR>collegato_alla_voce_'%1'</HTML>
+<no_field>=<nessun_campo>
+<select>=<seleziona>
+<select_word>=<select_word>
+A_string_with_this_label_already_exists=Una_stringa_con_questa_etichetta_esiste_gi\u00e0
+Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Abbrevia_i_nomi_dei_giornali_delle_voci_selezionate_(abbreviazioni_ISO)
+Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Abbrevia_i_nomi_dei_giornali_delle_voci_selezionate_(abbreviazioni_MEDLINE)
+Abbreviate_names=Abbrevia_i_nomi
+Abbreviated_%0_journal_names.=%0_nomi_di_riviste_abbreviati.
+Abbreviation=Abbreviazione
+About_JabRef=Informazioni_su_JabRef
+Abstract=Riassunto
+Accept=Accetta
+Accept_change=Accetta_la_modifica
+Action=Azione
+Add=Aggiungi
+Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Aggiungi_una_classe_ImportFormat_personalizzata_(compilata)_da_un_percorso._\nIl_percorso_non_deve_necessariamente_essere_nel_classpath_di_JabRef.
+Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Aggiungi_una_classe_ImportFormat_personalizzata_(compilata)_da_un_archivio_ZIP._\nL'archivio_ZIP_non_deve_necessariamente_essere_nel_classpath_di_JabRef.
+add_entries_to_group=aggiungi_voci_ad_un_gruppo
+Add_entry_selection_to_this_group=Aggiungi_le_voci_selezionate_a_questo_gruppo
+Add_from_folder=Aggiungi_da_una_cartella
+Add_from_jar=Aggiungi_da_un_file_jar
+add_group=aggiungi_un_gruppo
+Add_Group=Aggiungi_un_gruppo
+Add_new=Aggiungi_nuovo
+Add_Subgroup=Aggiungi_un_sottogruppo
+Add_to_group=Aggiungi_al_gruppo
+Added_group_"%0".=Aggiunto_gruppo_"%0".
+Added_new=Aggiunto_nuovo
+Added_string=Aggiunta_stringa
+Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Inoltre,_le_voci_il_cui_campo_<b>%0</b>_non_contiene_<b>%1</b>_possono_ [...]
+Advanced=Avanzate
+All_custom_file_types_will_be_lost._Proceed?=Tutti_i_tipi_di_file_personalizzati_andranno_perduti._Continuare?
+All_Entries=Tutte_le_voci
+All_entries=Tutte_le_voci
+All_entries_of_this_type_will_be_declared_typeless._Continue?=Tutte_le_voci_di_questo_tipo_saranno_definite_'senza_tipo'._Continuare?
+All_fields=Tutti_i_campi
+All_subgroups_(recursively)=Tutti_i_sottogruppi_(ricorsivamente)
+Allow_editing_in_table_cells=Consenti_la_modifica_nelle_celle_della_tabella
+An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=Si_\u00e8_verificato_un_errore_durante_il_recupero_dalla_fonte_OAI2_(%0):
+An_Exception_ocurred_while_accessing_'%0'=Eccezione_durante_l'accesso_a_'%0'
+An_SAXException_ocurred_while_parsing_'%0'\:=Eccezione_SAX_durante_l'elaborazione_di_'%0':
+and=e
+and_inside_the_JabRef-jar\:=e_nel_file_jar_di_JabRef:
+and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=e_la_classe_deve_essere_nel_tuo_"classpath"_al_successivo_avvio_di_JabRef.
+any_field_that_matches_the_regular_expression_<b>%0</b>=qualsiasi_campo_che_corrisponda_all'espressione_regolare_<b>%0</b>
+Appearance=Aspetto
+Append=Accoda
+Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Accoda_il_contenuto_di_un_database_BibTeX_al_database_corrente
+Append_database=Accoda_database
+append_the_selected_text_to_bibtex_key=accoda_il_testo_selezionato_alla_chiave_BibTeX
+Application=Applicazione
+Apply=Applica
+Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argomenti_passati_all'istanza_attiva_di_JabRef._Chiusura_in_corso.
+Assign_entry_selection_exclusively_to_this_group=Assegna_le_voci_selezionate_esclusivamente_a_questo_gruppo
+Assign_new_file=Assegna_un_nuovo_file
+Assign_the_original_group's_entries_to_this_group?=Assegnare_le_voci_originali_del_gruppo_a_questo_gruppo?_
+Assigned_%0_entries_to_group_"%1".=Assegnate_%0_voci_al_gruppo_"%1".
+Assigned_1_entry_to_group_"%0".=Una_voce_assegnata_al_gruppo_"%0".
+At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=Almeno_il_plug-in_'net.sf.jabref.core'_dovrebbe_essere_qui.
+Attach_%0_file=Allega_%0_file
+Attach_URL=Allega_URL
+Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Tentativo_di_definire_automaticamente_%0_collegamenti_per_le_tue_voci._La_definizione_avviene_automaticamente_se_un_file_%0_nella_cartella_%0_o_sottocartella<BR>ha_lo_stesso_nome_della_chiave_di_una_voce_BibTeX,_a_meno_dell'estensione.
+Attempting_SQL_export...=Tentativo_di_esportazione_SQL...
+Auto=Auto
+Autodetect_format=Rivelamento_automatico_del_formato
+Autogenerate_BibTeX_key=Generazione_automatica_della_chiave_BibTeX
+Autogenerate_BibTeX_keys=Generazione_automatica_delle_chiavi_BibTeX
+Autogenerate_groups=Generazione_automatica_dei_gruppi
+autogenerate_keys=generazione_automatica_delle_chiavi
+
+
+Autolink_files_with_names_starting_with_the_BibTeX_key=Collegare_automaticamente_i_file_con_nome_che_inizia_con_la_chiave_BibTeX
+Autolink_only_files_that_match_the_BibTeX_key=Collegare_automaticamente_solo_i_file_con_nome_corrispondente_alla_chiave_BibTeX
+Automatically_create_groups=Crea_automaticamente_i_gruppi
+Automatically_create_groups_for_database.=Crea_automaticamente_i_gruppi_per_il_database
+Automatically_created_groups=Gruppi_creati_automaticamente
+Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Nascondi_automaticamente_l'interfaccia_dei_gruppi_nel_passare_ad_un_database_che_non_contiene_gruppi
+
+Automatically_remove_exact_duplicates=Rimuovi_automaticamente_i_duplicati_esatti
+Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Mostra_automaticamente_l'interfaccia_dei_gruppi_nel_passare_ad_un_database_che_contiene_gruppi
+Autoset=Definisci_automaticamente
+Autoset_%0_field=Definisci_automaticamente_il_campo_%0
+Autoset_%0_links._Allow_overwriting_existing_links.=Definisci_automaticamente_%0_collegamenti._Consenti_la_sovrascrittura_dei_collegamenti_esistenti.
+Autoset_%0_links._Do_not_overwrite_existing_links.=Definisci_automaticamente_%0_collegamenti._Non_consentire_la_sovrascrittura_dei_collegamenti_esistenti.
+Autoset_external_links=Impostazione_automatica_dei_collegamenti_esterni
+Autosetting_links=Impostazione_automatica_dei_collegamenti
+AUX_file_import=Importa_file_AUX
+Available_export_formats=Formati_di_esportazione_disponibili
+Available_fields=Campi_BibTeX_disponibili
+Available_import_formats=Formati_di_importazione_disponibili
+Background_color_for_optional_fields=Colore_di_sfondo_per_i_campi_facoltativi
+Background_color_for_required_fields=Colore_di_sfondo_per_i_campi_obbligatori
+Backup_old_file_when_saving=Fare_una_copia_di_backup_del_vecchio_file_quando_viene_salvato
+Beta_version=Versione_Beta
+Bibkey_to_filename_conversion=Conversione_della_chiave_BibTeX_in_nome_del_file
+BibTeX_key=Chiave_BibTeX
+BibTeX_key_is_unique.=La_chiave_BibTeX_\u00e8_unica.
+BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Chiave_BibTeX_non_definita._Inserire_un_nome_per_il_file_scaricato
+BibTeX_source=Sorgente_BibTeX
+BibTeXML=BibTeXML
+# Usually used the english word.
+Binding=Binding
+Broken_link=Collegamento_interrotto
+Browse=Sfoglia
+# Unsure how to translate out of context
+by=da
+Calling_external_viewer...=Chiamata_a_visualizzatore_esterno...
+Cancel=Annulla
+Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Le_voci_non_possono_essere_inserite_in_un_gruppo_se_prive_di_chiave._Generare_le_chiavi_ora?
+Cannot_merge_this_change=Questa_modifica_non__pu\u00f2_essere_incorporata
+Cannot_move_group_"%0"_down.=Impossibile_spostare_il_gruppo_"%0"_in_gi\u00f9
+Cannot_move_group_"%0"_left.=Impossibile_spostare_il_gruppo_"%0"_a_sinistra
+Cannot_move_group_"%0"_right.=Impossibile_spostare_il_gruppo_"%0"_a_destra
+Cannot_move_group_"%0"_up.=Impossibile_spostare_il_gruppo_"%0"_in_su
+case_insensitive=non_distingue__maiuscole_e_minuscole
+case_sensitive=distingue__maiuscole_e_minuscole
+Case_sensitive=Distingue__maiuscole_e_minuscole
+change_assignment_of_entries=modifica_l'assegnazione_delle_voci
+Change_case=Inverti_maiuscolo/minuscolo
+Change_entry_type=Cambia_tipo_di_voce
+
+Change_file_type=Cambia_il_tipo_di_file
+change_key=modifica_la_chiave_BibTeX
+Change_of_Grouping_Method=Cambia_Metodo_di_Raggruppamento
+change_preamble=modifica_il_preambolo
+change_string_content=modifica_il_contenuto_della_stringa
+change_string_name=modifica_il_nome_della_stringa
+Change_table_column_and_General_fields_settings_to_use_the_new_feature=Modificare_le_colonne_della_tabella_e_le_impostazioni_dei_campi_generali_per_utilizzare_la_nuova_funzione
+change_type=cambia_tipo
+changed_=cambiato_
+Changed_font_settings=Parametri_dei_font_modificati
+Changed_language_settings=Parametri_della_lingua_modificati
+Changed_look_and_feel_settings=Parametri_del_"Look-and-Feel"_modificati
+Changed_preamble=Preambolo_modificato
+Changed_type_to=Tipo_cambiato_in_
+Characters_to_ignore=Caratteri_da_ignorare
+# Unsure. Is %0 the number of links?
+Check_existing_%0_links=Verificare_i_%0_collegamenti_esistenti
+Check_links=Verificare_i_collegamenti
+Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Scegliere_l'URL_da_scaricare._Il_valore_predefinito_punta_ad_una_lista_fornita_dagli_sviluppatori_di_JabRef
+Cite_command=Comando_Cite
+Class_name=Nome_della_classe
+Clear=Svuota
+clear_all_groups=svuota_tutti_i_gruppi
+Clear_field=Svuota_il_campo
+
+Clear_fields=Annulla_i_campi
+# Unsure the translation below
+Clear_highlight=Rimuovi_l'evidenziazione
+Close=Chiudi
+Close_dialog=Chiudi_la_finestra_di_dialogo
+Close_the_current_database=Chiudi_il_database_corrente
+Close_the_help_window=Chiudi_la_finestra_di_aiuto
+Close_window=Chiudi_la_finestra
+Closed_database=Database_chiuso
+Collapse_subtree=Collassa_il_sotto-albero
+Color_codes_for_required_and_optional_fields=Codifica_a_colori_per_campi_obbligatori_e_opzionali
+Color_for_marking_incomplete_entries=Colore_per_contrassegnare_voci_incomplete
+Column_width=Larghezza_della_colonna
+Command_line_id=Identificativo_della_riga_di_comando
+# Not sure: "Registrazione completa" ?
+Complete_record=Completa_la_registrazione
+Connect=Connessione
+Connect_to_SQL_database=Connessione_ad_un_database_SQL
+Connect_to_SQL_Database=Connessione_ad_un_Database_SQL
+Connection_to_IEEEXplore_failed=Connessione_a_IEEEXplore_fallita
+Contained_in=Contenuto_in
+Content=Contenuto
+Copied=Copiato
+Copied_cell_contents=Contenuto_delle_celle_copiato
+Copied_key=Chiave_BibTeX_copiata
+Copied_keys=Chiavi_BibTeX_copiate
+Copy=Copia
+Copy_BibTeX_key=Copia_chiave_BibTeX
+Copy_file_to_file_directory.=Copia_il_file_nella_cartella_dei_file.
+Copy_files_to_file_directory.=Copia_i_file_nella_cartella_dei_file.
+Copy_to_clipboard=Copia_negli_appunti
+Could_not_call_executable=Non_\u00e8_possibile_effetuare_la_chiamata_dell'eseguibile
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Impossibile_la_connessione_a_un_processo_gnuserv_in_esecuzione._Accertarsi_che_Emacs_o_XEmacs_siano_in_esecuzione,<BR>e_che_il_server_sia_stato_avviato_(con_il_comando_'gnuserv-start').
+Could_not_connect_to_host_=Impossibile_connettersi_all'host_
+Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Impossibile_stabilire_la_connessione_al_server_Vim.<BR>Assicurarsi_che_Vim_sia_in_esecuzione_con_il_nome_di_server_corretto.
+Could_not_export_file=Impossibile_esportare_il_file
+Could_not_export_preferences=Impossibile_esportare_le_preferenze
+Could_not_find_a_suitable_import_format.=Impossibile_trovare_un_formato_di_importazione_adeguato
+Could_not_find_directory_for_%0-files\:_%1=Impossibile_trovare_la_cartella_per_i_file_%0:_%1
+Could_not_find_image_file=Il_file_di_immagini_non_\u00e8_stato_trovato
+Could_not_find_layout_file=Impossibile_trovare_il_file_di_layout
+Could_not_import_preferences=Impossibile_importare_le_preferenze
+Could_not_instantiate_%0=Impossibile_inizializzare_%0
+Could_not_instantiate_%0_%1=Impossibile_inizializzare_%0_%1
+Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Impossibile_inizializzare_%0._Verificare_il_"package_path".
+
+
+Could_not_open_link=Impossibile_aprire_il_collegamento
+Could_not_parse_number_of_hits=Impossibile_determinare_il_numero_di_risultati
+Could_not_print_preview=Impossibile_visualizzare_l'anteprima_di_stampa
+Could_not_run_the_'vim'_program.=Impossibile_eseguire_il_programma_'vim'.
+Could_not_save_file=Impossibile_salvare_il_file
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Impossibile_salvare_il_file._La_codifica_dei_caratteri_'%0'_non_\u00e8_supportata.
+Create_group=Crea_gruppo
+Created_groups.=Gruppi_creati
+crossreferenced_entries_included=Incluse_le_voci_con_riferimenti_incrociati
+Current_content=Contenuto_corrente
+Current_value=Valore_corrente
+Custom_entry_types=Tipi_di_voce_personalizzati
+Custom_entry_types_found_in_file=Tipi_di_voce_personalizzati_trovati_nel_file
+Custom_icon_theme=Tema_di_icone_personalizzato
+Custom_icon_theme_file=File_di_tema_di_icone_personalizzato
+Custom_importers=Importazioni_personalizzate
+Customize_entry_types=Personalizza_tipi_di_voce
+Customize_key_bindings=Personalizza_combinazioni_di_tasti
+Cut=Taglia
+cut_entries=Taglia_voci
+cut_entry=taglia_voce
+Cut_pr=Taglia
+Database_\:=Database:
+Database_encoding=Codifica_database
+Database_has_changed._Do_you_want_to_save_before_closing?=Il_database_\u00e8_stato_modificato._Vuoi_salvare_prima_di_chiudere?
+Database_properties=Propriet\u00e0_del_database
+Date_format=Formato_data
+Default=Predefinito
+Default_encoding=Codifica_predefinita
+Default_grouping_field=Campo_di_raggruppamento_predefinito
+Default_look_and_feel="Look-and-Feel"_predefinito
+Default_pattern=Modello_predefinito
+Default_sort_criteria=Criterio_di_ordinamento_predefinito
+Define_'%0'=Definisci_'%0'
+Delete=Cancella
+Delete_custom_format=Cancella_i_formati_personalizzati
+delete_entries=Cancella_le_voci
+Delete_entry=Cancella_la_voce
+delete_entry=cancella_la_voce
+Delete_multiple_entries=Cancella_pi\u00f9_voci
+Delete_rows=Cancella_voci
+Delete_strings=Cancella_stringhe
+Deleted=Cancellato
+Delimit_fields_with_semicolon,_ex.=Campi_delimitati_da_punto_e_virgola,_ex.
+Descending=Discendente
+Description=Descrizione
+Deselect_all=Deseleziona_tutto
+Deselect_all_duplicates=Deseleziona_tutti_i_duplicati
+Details=Dettagli
+Disable_entry_editor_when_multiple_entries_are_selected=Disabilita_la_modifica_in_caso_di_selezioni_multiple
+Disable_this_confirmation_dialog=Disabilita_la_richiesta_di_conferma
+Disable_this_warning_dialog=Disabilita_questo_messaggio_di_avvertimento
+Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Mostra_tutte_le_voci_appartenenti_a_uno_o_pi\u00f9_gruppi_tra_quelli_selezionati.
+Display_all_error_messages=Mostra_tutti_i_messaggi_di_errore
+Display_help_on_command_line_options=Mostra_l'aiuto_sulle_opzioni_della_riga_di_comando
+Display_imported_entries_in_an_inspection_window_before_they_are_added.=Mostra_le_voci_importate_in_una_finestra_d'anteprima_prima_di_aggiungerle.
+Display_only_entries_belonging_to_all_selected_groups.=Mostra_solo_le_voci_appartenenti_a_tutti_i_gruppi_selezionati.
+
+Display_version=Versione
+Displaying_no_groups=Nessun_gruppo_da_visualizzare
+Do_not_abbreviate_names=Non_abbreviare_i_nomi
+Do_not_autoset=Non_effettuare_definizioni_automatiche
+Do_not_import_entry=Non_importare_la_voce
+Do_not_open_any_files_at_startup=Non_aprire_nessun_file_all'avvio
+Do_not_overwrite_existing_keys=Non_sovrascrivere_chiavi_esistenti
+Do_not_show_splash_window_at_startup=Non_mostrare_la_schermata_d'avvio
+Do_not_show_these_options_in_the_future=Non_mostrare_queste_opzioni_in_futuro
+Do_not_wrap_the_following_fields_when_saving=Non_mandare_a_capo_i_campi_seguenti_salvando_il_file
+
+Do_not_write_the_following_fields_to_XMP_Metadata\:=Non_scrivere_i_dati_dei_campi_seguenti_nei_metadati_XMP:
+
+Do_you_want_JabRef_to_do_the_following_operations?=Vuoi_che_JabRef_esegua_le_operazioni_seguenti?
+DocBook=DocBook
+Down=Gi\u00f9
+Download=Download
+Download_completed=Download_terminato
+Download_file=Scarica_il_file
+Downloading...=Download_in_corso...
+Drag_and_Drop_Error=Errore_di_'Drag_&_Drop'
+# Check translation below
+Drop_%0=Rilascia_%0
+duplicate_BibTeX_key=chiave_BibTeX_duplicata
+Duplicate_BibTeX_key.=Chiave_BibTeX_duplicata.
+Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Chiave_BibTeX_duplicata._I_raggruppamenti_potrebbero_non_essere_corretti_per_questa_voce.
+Duplicate_Key_Warning=Attenzione:_chiave_duplicata
+Duplicate_pairs_found=Trovati_doppioni
+duplicate_removal=rimozione_di_doppioni
+Duplicate_string_name=Nome_di_stringa_duplicato
+Duplicates_found=Trovati_doppioni
+Duplicates_removed=Doppioni_rimossi
+Dynamic_groups=Gruppi_dinamici
+
+Dynamically_group_entries_by_a_free-form_search_expression=Raggruppa_dinamicamente_le_voci_utilizzando_una_espressione_di_ricerca_in_formato_libero
+Dynamically_group_entries_by_searching_a_field_for_a_keyword=Raggruppa_dinamicamente_le_voci_ricercando_una_parola_chiave_in_un_campo
+Each_line_must_be_on_the_following_form=Ciascuna_linea_deve_essere_nel_formato_seguente
+Edit=Modifica
+Edit_custom_export=Modifica_l'esportazione_personalizzata
+Edit_entry=Modifica_voce
+Edit_file_link=Modifica_il_collegamento_al_file
+Edit_file_type=Modifica_il_tipo_di_file
+Edit_group=Modifica_il_gruppo
+Edit_journal=Modifica_la_rivista
+Edit_preamble=Modifica_il_preambolo
+Edit_strings=Modifica_le_stringhe
+Editor_options=Opzioni_dell'editor
+empty_BibTeX_key=chiave_BibTeX_vuota
+Empty_BibTeX_key.=Chiave_BibTeX_vuota
+Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Chiave_BibTeX_vuota._La_gestione_dei_gruppi_potrebbe_non_funzionare_per_questa_voce.
+empty_database=database_vuoto
+Enable_source_editing=Abilita_la_modifica_del_codice_sorgente
+Enable_word/name_autocompletion=Abilita_autocompletamento_di_parole/nomi
+Endnote=Endnote
+Enter_URL=Immettere_l'URL
+Enter_URL_to_download=Immettere_l'URL_da_scaricare
+entries=voci
+Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Le_voci_non_possono_essere_inserite_o_rimosse_manualmente_da_questo_gruppo.
+Entries_exported_to_clipboard=Voci_esportate_negli_appunti
+entries_have_undefined_BibTeX_key=Delle_voci_hanno_chiavi_BibTeX_non_definite
+entries_into_new_database=voci_in_un_nuovo_database
+entry=voce
+Entry_editor=Modifica_voci
+
+Entry_in_current_database=Voce_nel_database_corrente
+Entry_in_import=Voce_nell'importazione
+Entry_preview=Anteprima_della_voce
+Entry_table=Tabella_delle_voci
+Entry_table_columns=Colonne_della_tabella_delle_voci
+Entry_type=Tipo_di_voce
+Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=I_nomi_dei_tipi_di_voce_non_possono_contenere_spazi_o_i_caratteri_seguenti
+Entry_types=Tipi_di_voce
+Error=Errore
+
+Error\:_=Errore:_
+Error_converting_Bibtex_to_XMP\:_%0=Errore_durante_la_conversione_della_voce_BibTeX_in_XMP:_%0
+Error_converting_XMP_to_'%0'...=Errore_durante_la_conversione_dei_metadati_XMP_in_'%0'...
+Error_exporting_to_clipboard=Errore_durante_l'esportazione_negli_appunti
+Error_in_field=Errore_nel_campo
+Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Errore_all'avvio_del_sistema_di_plug-in._Avvio_senza_plug-in._Alcune_funzionalit\u00e0_potrebbero_essere_assenti.
+Error_occured_when_parsing_entry=Errore_durante_l'elaborazione_della_voce
+Error_opening_file=Errore_all'apertura_del_file
+Error_setting_field=Errore_nell'impostazione_del_campo
+Error_while_converting_BibtexEntry_to_XMP_%0=Errore_durante_la_conversione_della_voce_BibTeX_in_XMP_%0
+Error_while_downloading_file\:=Errore_nel_corso_del_download_del_file:
+Error_while_fetching_from_OIA2=Errore_durante_una_ricerca_da_OIA2
+Error_while_writing=Errore_durante_la_scrittura
+
+Error_writing_to_%0_file(s).=Errore_di_scrittura_di_%0_file.
+Error_writing_XMP_to_file\:_%0=Errore_durante_la_scrittura_dei_metadati_XMP_nel_file:_%0_
+Establishing_SQL_connection...=Connessione_SQL_in_corso...
+Exceptions=Eccezioni
+Existing_file=File_esistente
+exists._Overwrite_file?=esiste._Sovrascrivere_il_file?
+exists._Overwrite?=esiste._Sovrascrivere?
+Expand_subtree=Espandere_il_sotto-albero
+Export=Esporta
+Export_name=Esporta_nome
+Export_preferences=Esporta_preferenze
+Export_preferences_to_file=Esporta_preferenze_in_un_file
+Export_properties=Esporta_propriet\u00e0
+Export_to_clipboard=Esporta_negli_appunti
+Export_to_SQL_database=Esporta_in_un_database_SQL
+Exporting=Esportazione_in_corso
+Extension=Estensione
+External_changes=Modifiche_esterne
+
+External_file_links=Collegamenti_a_file_esterni
+External_files=File_esterni
+External_programs=Programmi_esterni
+External_viewer_called=Chiamata_a_visualizzatore_esterno
+Failed_to_read_groups_data_(unsupported_version\:_%0)=La_lettura_dei_dati_dei_gruppi_\u00e8_fallita_(versione_non_supportata:_%0)
+Fetch=Recupera
+Field=Campo
+field=campo
+Field_content=Contenuto_del_campo
+Field_name=Nome_del_campo
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=I_nomi_dei_campi_non_possono_contenere_spazi_o_i_caratteri_seguenti
+Field_sizes=Dimensioni_dei_campi
+
+Field_to_filter=Campi_da_filtrare
+Field_to_group_by=Campo_di_raggruppamento
+Fields=Campi
+File=File
+file=file
+
+File_'%0'_is_already_open.=Il_file_'%0'__\u00e8_gi\u00e0_aperto.
+File_'%0'_not_found=File_'%0'_non_trovato
+File_changed=File_modificato
+File_directory_is_'%0'\:=La_cartella_dei_file_\u00e8_'%0':
+
+File_directory_is_not_set_or_does_not_exist!=La_cartella_dei_file_non_\u00e8_impostata_o_non_esiste!
+File_download=Download_di_file
+File_exists=Il_file_esiste
+File_extension=Estensione_del_file
+
+File_has_been_updated_externally._What_do_you_want_to_do?=Il_file_\u00e8_stato_aggiornato_da_un'applicazione_esterna._Cosa_vuoi_fare?
+File_not_found=File_non_trovato
+File_type=Tipo_di_file
+File_updated_externally=File_aggiornato_esternamente
+filename=nome_del_file
+Files_opened=File_aperti
+Filter=Filtro
+
+Finished_autosetting_external_links.=Impostazione_automatica_dei_collegamenti_esterni_terminata.
+
+Finished_synchronizing_%0_links._Entries_changed%c_%1.=Sincronizzazione_di_%0_collegamenti:_Voci_cambiate%c_%1.
+Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Scrittura_dei_metadati_XMP_terminata._Scrittura_eseguita_su_%0_file.
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Terminata_la_scrittura_di_metadati_XMP_per_%0_file_(%1_saltati,_%2_errori).
+First_select_the_entries_you_want_keys_to_be_generated_for.=Selezionare_dapprima_le_voci_per_le_quali_si_vogliono_generare_le_chiavi.
+Fit_table_horizontally_on_screen=Adatta_la_tabella_allo_schermo_orizontalmente
+Float=Galleggiante
+Float_marked_entries=Voci_evidenziate_sempre_in_alto
+Font_Family=Famiglia_di_font
+Font_Preview=Anteprima_font
+Font_Size=Dimensione_font
+Font_Style=Stile_font
+FontSelector=Selettore_dei_font
+for=per
+Format_of_author_and_editor_names=Formato_dei_nomi_di_autori_e_curatori
+Format_String=Stringa_di_formattazione
+Format_used=Formato_utilizzato
+Formatter_Name=Nome_della_formattazione
+Formatter_not_found=Formattazione_non_trovata
+found=trovato
+Found_%0_plugin(s)=Trovati_%0_plug-in
+found_in_aux_file=trovate_nel_file_AUX
+Full_name=Nome_completo
+General=Generale
+General_fields=Campi_generali
+Generate=Genera
+Generate_BibTeX_key=Genera_la_chiave_BibTeX
+Generate_keys=Genera_le_chiavi
+Generate_keys_before_saving_(for_entries_without_a_key)=Genera_le_chiavi_prima_di_salvare_(per_le_voci_senza_chiave)
+
+
+Generate_keys_for_imported_entries=Genera_chiavi_per_le_voci_importate
+Generate_now=Genera_ora
+Generated_BibTeX_key_for=Generata_la_chiave_BibTeX_per
+Generating_BibTeX_key_for=Generazione_in_corso_della_chiave_BibTeX_per
+## Check below
+Grab=Assegna
+Gray_out_entries_not_in_group_selection=Evidenzia_in_grigio_le_voci_fuori_dai_gruppi_selezionati
+Gray_out_non-hits=Disattiva_le_voci_non_corrispondenti
+Gray_out_non-matching_entries=Disattiva_le_voci_non_corrispondenti
+Group_properties=Propriet\u00e0_del_gruppo
+
+grouping_may_not_work_for_this_entry=Il_raggruppamento_potrebbe_non_funzionare_per_queste_voci
+Groups=Gruppi
+Harvard_RTF=Harvard_RTF
+Have_you_chosen_the_correct_package_path?=Il_classpath_\u00e8_corretto?
+Help=Aiuto
+
+Help_contents=Contenuti_dell'aiuto
+Help_on_groups=Aiuto_sui_gruppi
+Help_on_key_patterns=Aiuto_sulla_composizione_delle_chiavi
+Help_on_Preview_Settings=Aiuto_sui_parametri_di_anteprima
+Help_on_Regular_Expression_Search=Aiuto_sulla_ricerca_di_un'espressione_regolare
+Hide_non-hits=Nascondi_le_voci_non_corrispondenti
+Hide_non-matching_entries=Nascondi_le_voci_non_corrispondenti
+
+Hierarchical_context=Contesto_gerarchico
+Highlight=Evidenzia
+Highlight_groups_matching_all_selected_entries=Evidenzia_i_gruppi_corrispondenti_a_tutte_le_voci_selezionate
+Highlight_groups_matching_any_selected_entry=Evidenzia_i_gruppi_corrispondenti_almeno_ad_una_delle_voci_selezionate
+Highlight_overlapping_groups=Evidenzia_gruppi_con_voci_in__comune
+Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Suggerimento%c_Per_ricercare_in_un_campo_specifico_digitare,_per_esempio%c<p><tt>author%esmith_and_title%eelectrical</tt>
+HTML=HTML
+
+HTML_table=Tabella_HTML
+
+HTML_table_(with_Abstract_&_BibTeX)=Tabella_HTML_(con_riassunto_e_BibTeX)
+Icon=Icona
+Ignore=Ignora
+Immediate_subgroups=Sottogruppi_diretti
+Import=Importa
+Import_and_keep_old_entry=Importa_e_mantieni_le_vecchie_voci
+Import_and_remove_old_entry=Importa_e_rimuovi_le_vecchie_voci
+Import_entries=Importa_voci
+Import_failed=Importazione_fallita
+Import_file=Importa_file
+Import_group_definitions=Importa_definizioni_di_gruppo
+Import_name=Importa_nome
+Import_preferences=Importa_preferenze
+Import_preferences_from_file=Importa_preferenze_da_un_file
+Import_strings=Importa_stringhe
+Import_to_open_tab=Importa_nella_scheda_aperta
+Import_word_selector_definitions=Importa_le_definizioni_per_la_selezione_di_parole
+Imported_database=Database_importato
+Imported_entries=Voci_importate
+Imported_from_database=Importato_dal_database
+ImportFormat_class=Classe_ImportFormat
+Importing=Importazione_in_corso
+Importing_in_unknown_format=Importazione_in_formato_sconosciuto
+In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=In_JabRef,_utilizzare_una_coppia_di_caratteri_#_per_delimitare_una_stringa.
+Include_abstracts=Includi_il_riassunto
+Include_entries=Includi_voci
+Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Includi_i_sottogruppi:_Quando_selezionato,_mostra_le_voci_contenute_in_questo_gruppo_e_nei_suoi_sottogruppi
+Incremental=Incrementale
+Incremental_search=Ricerca_incrementale
+Incremental_search_failed._Repeat_to_search_from_top.=Ricerca_incrementale_fallita._Ripetere_la_ricerca_dall'inizio.
+Independent_group\:_When_selected,_view_only_this_group's_entries=Gruppo_indipendente:_Quando_selezionato,_mostra_solo_le_voci_di_questo_gruppo
+Initially_show_groups_tree_expanded=Inizialmente_mostra_l'albero_dei_gruppi_espanso
+Input=Attribuzione_dei_campi
+Input_error=Voce_errata
+Insert=Inserisci
+Insert_rows=Inserisci_righe
+Insert_selected_citations_into_LyX/Kile=Inserisci_le_citazioni_selezionate_in_LyX/Kile
+Insert_selected_citations_into_WinEdt=Inserisci_le_citazioni_selezionate_in_WinEdt
+insert_string_=Inserisci_stringa_
+Insert_URL=Inserisci_URL
+integrity=Integrit\u00e0
+Integrity_check=Verifica_di_integrit\u00e0
+Intersection=Intersezione
+Invalid_BibTeX_key=Chiave_BibTeX_non_valida
+Invalid_date_format=Formato_data_non_valido
+Invalid_URL=URL_non_valido
+Inverted=Complemantare
+is_a_standard_type.=\u00e8_un_tipo_standard
+ISO_abbreviation=Abbreviazione_ISO
+Item_list_for_field=Lista_di_campi
+jabref=jabref
+JabRef_help=Aiuto_di_JabRef
+JabRef_preferences=Preferenze_JabRef
+Journal_abbreviations=Abbreviazioni_riviste
+Journal_list_preview=Anteprima_della_lista_delle_riviste
+Journal_name=Nome_della_rivista
+Keep=Mantieni
+Keep_both=Mantieni_entrambi
+Keep_lower=Mantieni_quello_sotto
+Keep_upper=Mantieni_quello_sopra
+Key_bindings=Combinazioni_di_tasti
+Key_bindings_changed=Combinazioni_di_tasti_modificate
+Key_generator_settings=Impostazioni_per_la_generazione_delle_chiavi
+Key_pattern=Modello_delle_chiavi
+keys_in_database=Chiavi_in_database
+Keyword=Parola_Chiave
+##_check:_Nome_del_campo_(fr)?
+Label=Etichetta
+Language=Lingua
+Last_modified=Ultimo_modificato
+LaTeX_AUX_file=File_AUX_LaTeX
+Leave_file_in_its_current_directory.=Lascia_il_file_nella_cartella_corrente
+
+Leave_files_in_their_current_directory.=Lascia_i_file_nella_cartella_corrente
+Left=Sinistra
+License=Licenza
+Limit_to_fields=Restrizioni_ai_campi
+Limit_to_selected_entries=Restrizioni_alle_voci_selezionate
+
+Link=Collegamento
+Link_local_file=Collegamento_al_file_locale
+Link_to_file_%0=Collegamento_al_file_%0
+Listen_for_remote_operation_on_port=Porta_in_ascolto_per_operazioni_remote
+Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Carica_e_salva_le_preferenze_da/in_jabref.xml_all'avvio_(modalit\u00e0_chiavetta_di_memoria)
+Load_session=Carica_sessione
+Loading_session...=Caricamento_sessione...
+localhost=localhost
+Look_and_feel=Aspetto
+Looking_for_pdf...=Ricerca_del_file_pdf...
+lower=minuscolo
+Main_file_directory=Cartella_dei_file_principale
+
+Main_layout_file=File_di_layout_principale
+Main_PDF_directory=Cartella_file_PDF_principale
+Main_PS_directory=Cartella_file_PS_principale
+Manage=Gestione
+Manage_custom_exports=Gestione_delle_esportazioni_personalizzate
+Manage_custom_imports=Gestione_delle_importazioni_personalizzate
+Manage_external_file_types=Gestione_dei_tipi_di_file_esterni
+Manage_journal_abbreviations=Gestione_delle_abbreviazioni_delle_riviste
+Mark_entries=Contrassegna_voci
+Mark_entry=Contrassegna_voce
+Mark_new_entries_with_addition_date=Contrassegna_le_nuove_voci_con_la_data_di_aggiunta
+Mark_new_entries_with_owner_name=Contrassegna_le_nuove_voci_con_il_nome_del_proprietario
+Marked_selected=Contrassegna_la_selezione
+Memory_Stick_Mode=Modalit\u00e0_chiavetta_di_memoria
+Menu_and_label_font_size=Dimensione_del_font_di_menu_ed_etichette
+Merged_external_changes=Incorpora_modifiche_esterne
+Messages=Messaggi
+Messages_and_Hints=Avvertimenti_e_Suggerimenti
+Modification_of_field=Modifica_del_campo
+Modified_group_"%0".=Gruppo_"%0"_modificato.
+Modified_groups=Gruppi_modificati
+Modified_string=Stringa_modificata
+Modify=Modifica
+modify_group=Modifica_gruppo
+MODS=MODS
+Move=Sposta
+Move_down=Sposta_in_gi\u00f9
+Move_entries_in_group_selection_to_the_top=Sposta_le_voci_selezionate_in_su
+Move_external_links_to_'file'_field=Sposta_i_collegamenti_esterni_nel_campo_'file'
+Move_files_to_file_directory.=Sposta_i_file_nella_cartella_dei_file.
+move_group=sposta_gruppo
+Move_string_down=Sposta_la_stringa_in_gi\u00f9
+Move_string_up=Sposta_la_stringa_in_su
+Move_up=Sposta_in_su
+Moved_group_"%0".=Spostato_gruppo_"%0".
+MS_Office_2007=MS_Office_2007
+MySQL=MySQL
+MySQL_database=Database_MySQL
+Name=Nome
+Name_formatter=Formattazione_dei_nomi
+Natbib_style=Stile_Natbib
+
+nested_aux_files=File_AUX_nidificati
+New=Nuovo
+new=nuovo
+New_BibTeX_database=Nuovo_database_BibTeX
+New_BibTeX_entry=Nuova_voce_BibTeX
+New_BibTeX_subdatabase=Nuovo_subdatabase_BibTeX
+New_content=Nuovo_contenuto
+New_database_created.=Nuovo_database_creato
+New_field_value=Nuovo_valore_del_campo
+New_file=Nuovo_file
+New_file_link_(INSERT)=Nuovo_collegamento_a_file_(INSERT)
+New_group=Nuovo_gruppo
+New_string=Nuova_stringa
+Next_entry=Voce_successiva
+No_%0_found=Nessun_%0_trovato
+No_actual_changes_found.=Nessun_cambiamento_trovato.
+no_base-bibtex-file_specified=nessun_database_BibTeX_specificato!
+no_database_generated=nessun_database_creato
+No_duplicates_found=Nessun_duplicato_trovato
+No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Nessuna_voce_trovata._Verificare_che_si_stia_utilizzando_il_filtro_di_importazione_appropriato.
+
+No_entries_found_for_the_search_string_'%0'=Nessuna_voce_trovata_in_base_alla_stringa_di_ricerca_'%0'
+No_entries_imported.=Nessuna_voce_importata
+No_entries_or_multiple_entries_selected.=Nessuna_voce_selezionata_o_voci_multiple_selezionate.
+No_entries_selected=Nessuna_voce_selezionata
+No_entries_selected.=Nessuna_voce_selezionata
+No_exceptions_have_ocurred.=Non_si_\u00e8_verificata_nessuna_eccezione
+No_files_found.=Nessun_file_trovato.
+No_GUI._Only_process_command_line_options.=Senza_interfaccia_grafica._Elaborate_solo_le_opzioni_della_riga_di_comando.
+No_journal_names_could_be_abbreviated.=Nessun_nome_di_rivista_pu\u00f2_essere_abbreviato.
+No_journal_names_could_be_unabbreviated.=Nessuna_abbreviazione_di_rivista_pu\u00f2_essere_estesa.
+
+No_PDF_linked=Nessun_file_PDF_collegato
+No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Nessun_PDF_o_PS_definito,_e_nessun_file_corrispondente_alla_chiave_BibTeX_trovato.
+No_plugins_were_found_in_the_following_folders\:=Nessun_plug-in_trovato_nelle_cartelle_seguenti:
+No_references_found=Nessun_riferimento_trovato
+No_saved_session_found.=Nessuna_sessione_salvata_trovata.
+No_url_defined=Nessun_URL_trovato
+No_XMP_metadata_found_in_=Non_sono_stati_trovati_metadati_XMP_in_
+not=no
+not_found=non_trovato
+Not_saved_(empty_session)=Non_salvato_(sessione_vuota)
+Note_that_the_entry_causing_the_problem_has_been_selected.=Nota:_la_voce_responsabile_del_problema_\u00e8_stata_selezionata.
+Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Nota:_\u00e8_necessario_specificare_il_nome_di_classe_completo_per_il_"Look-and-Feel",
+Nothing_to_redo=Niente_da_ripetere
+Nothing_to_undo=Niente_da_annullare
+Number_of_references_to_fetch?=Numero_di_riferimenti_da_recuperare?
+occurences=ricorrenze
+OK=OK
+Ok=Ok
+One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Uno_o_pi\u00f9_collegamenti_a_file_sono_del_tipo_'%0',_non_definito._Come_procedere?
+One_or_more_keys_will_be_overwritten._Continue?=Una_o_pi\u00f9_chiavi_saranno_sovrascritte._Continuare?
+Only_one_item_is_supported=Un_solo_elemento_\u00e8_supportato
+Open=Apri
+Open_BibTeX_database=Apri_database_BibTeX
+Open_database=Apri_database
+Open_editor_when_a_new_entry_is_created=Apri_per_modifiche_quando_una_nuova_voce_viene_creata
+Open_file=Apri_file
+Open_last_edited_databases_at_startup=All'avvio_apri_i_database_aperti_nella_sessione_precedente
+Open_PDF_or_PS=Apri__PDF_o_PS
+Open_right-click_menu_with_Ctrl+left_button=Mostra_il_menu_contestuale_con_Ctrl_+_pulsante_sinistro
+Open_URL_or_DOI=Apri_URL_o_DOI
+OpenDocument_Spreadsheet=Foglio_elettronico_OpenDocument
+Opened_database=Database_aperto
+Opening=Apertura_in_corso
+Opening_preferences...=Apertura_delle_preferenze_in_corso...
+
+
+OpenOffice_Calc=OpenOffice_Calc
+OpenOffice_CSV=OpenOffice_CSV
+Operation_canceled.\n=Operazione_annullata.\n
+Operation_not_supported=Operazione_non_supportata
+Optional_fields=Campi_opzionali
+Options=Opzioni
+or=o
+out_of=di
+Output=Output
+Output_or_export_file=File_di_salvataggio_o_esportazione
+##_check
+Override=Sovrascrivi
+Override_default_file_directories=Alternative_alle_cartelle_di_file_predefinite
+Override_default_font_settings=Ignora_le_impostazioni_dei_font_predefinite
+##_check
+override_the_bibtex_key_by_the_selected_text=Sovrascrivi_la_chiave_BibTeX_con_il_testo_selezionato
+Overwrite=Sovrascrivi
+Overwrite_existing_field_values=Sovrascrivi_i_valori_esistenti_del_campo
+##_check
+Overwrite_keys=Sovrascrivi_chiavi
+pairs_processed=coppie_elaborate
+Password_\:=Password:
+Paste=Incolla
+paste_entries=incolla_voci
+paste_entry=incolla_voce
+
+Paste_from_clipboard=Incolla_dagli_appunti
+Pasted=Incollato
+
+Path_to_%0_not_defined=Percorso_per_%0_non_definito
+
+Path_to_LatexEditor_(LEd.exe)=Percorso_per_LatexEditor_(LEd.exe)
+Path_to_LyX_pipe=Percorso_per_la_pipe_LyX
+
+Path_to_Vim=Percorso_per_Vim
+Path_to_WinEdt.exe=Percorso_per_WinEdt.exe
+PDF_directory=Cartella_dei_file_PDF
+PDF_does_not_exist=Il_file_PDF_non_esiste
+Personal_journal_list=Lista_di_riviste_personale
+Plain_text_import=Importazione_da_solo_testo
+Please_check_your_network_connection_to_this_machine.=Verificare_la_connessione_di_rete_di_questa_macchina.
+Please_enter_a_name_for_the_group.=Immettere_un_nome_per_il_gruppo
+Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Immettere_un_termine_di_ricerca._Per_esempio,_per_ricercare_in_tutti_i_campi_<b>Smith</b>,_imettere%c<p><tt>smith</tt><p>_Per_ricercare_nel_campo_<b>Author</b>_il_termine_<b>Smith</b>_e_nel_campo_<b>Title</b>_il_termine_<b>electr [...]
+Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Immettere_il_cmpo_di_ricerca_(es._<b>keywords</b>)_e_la_parola_chiave_da_ricercare_(es._<b>electrical</b>).
+Please_enter_the_string's_label=Immettere_l'etichetta_della_stringa
+Please_select_an_importer=Selezionare_un_filtro_di_importazione
+Please_select_an_importer.=Selezionare_un_filtro_di_importazione.
+Please_select_exactly_one_group_to_move.=Selezionare_un_solo_gruppo_da_spostare.
+Please_specify_the_=Specificare_il_
+Possible_duplicate_entries=Voci_potenzialmente_duplicate
+Possible_duplicate_of_existing_entry._Click_to_resolve.=Possibile_duplicazione_di_una_voce_esistente._Cliccare_per_effettuare_la_verifica.
+Preamble=Preambolo
+Preferences=Preferenze
+Preferences_recorded.=Preferenze_registrate.
+Preview=Anteprima
+Previous_entry=Voce_precedente
+Primary_sort_criterion=Criterio_di_ordinamento_principale
+Print_Preview=Stampa_l'anteprima
+Printing_Entry_Preview=Stampa_dell'anteprima_della_voce
+Problem_with_parsing_entry=Problema_di_analisi_di_una_voce
+Processing_=Elaborazione_di_
+Program_output=Output_del_programma
+PS_directory=Cartella_dei_file_PS
+Push_entries_to_external_application_(%0)=Invia_le_voci_selezionate_all'applicazione_esterna_(%0)
+Push_selection_to_Emacs=Invia_la_selezione_a_Emacs
+Push_selection_to_LyX/Kile=Invia_la_selezione_a_LyX/Kile
+Push_selection_to_Vim=Invia_le_voci_selezionate_a_Vim
+Push_selection_to_WinEdt=Invia_la_selezione_a_WinEdt
+Push_to_LatexEditor=Invia_a_LaTeXEditor
+Pushed_citations_to_%0=Citazioni_inviate_a_%0
+Pushed_citations_to_Emacs=Citazioni_inviate_a_Emacs
+Pushed_citations_to_Vim=Citazioni_inviate_a_Vim
+Pushed_citations_to_WinEdt=Citazioni_inviate_a_WinEdt
+Pushed_the_citations_for_the_following_rows_to=Inviate_le_citazioni_delle_righe_seguenti_a
+Quit_JabRef=Chiudi_JabRef
+Quit_synchronization=Chiudi_sincronizzazione
+##check
+Raw_source=Solo_testo
+Really_delete_the_selected=Sicuri_di_voler_cancellare:_
+Rearrange_tabs_alphabetically_by_title=Ordina_alfabeticamente_le_schede
+Redo=Ripeti
+Reference_database=Database_di_riferimenti
+References_found=Riferimenti_trovati
+Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Perfeziona_il_super-gruppo:_Quando_selezionato,_mostra_le_voci_contenute_sia_in_questo_gruppo_sia_nel_suo_super-gruppo
+Refresh_view=Aggiorna_la_vista
+Regular_Expression=Espressione_regolare
+Remember_these_entry_types?=Ricordare_questo_tipo_di_voce?
+Remote_operation=Accesso_remoto
+Remote_server_port=Porta_del_server_remoto
+Remove=Rimuovi
+##_check_(tutte?)
+Remove_all?=Rimuovi_tutti
+Remove_all_subgroups=Rimuovi_tutti_i_sottogruppi
+Remove_all_subgroups_of_"%0"?=Rimuovere_tutti_i_sottogruppi_di_"%0"?
+Remove_double_braces_around_BibTeX_fields_when_loading.=Rimuovi_le_doppie_parentesi_graffe_che_racchiudono_i_campi_BibTex_all'apertura
+Remove_duplicates=Rimuovi_i_duplicati
+Remove_entry_from_import=Rimuovi_la_voce_dall'importazione
+Remove_entry_selection_from_this_group=Rimuovi_le_voci_selezionate_da_questo_gruppo
+Remove_entry_type=Rimuovi_il_tipo_di_voce
+Remove_file_link_(DELETE)=Rimuovi_collegamento_a_file_(DELETE)
+remove_from_group=rimuovi_dal_gruppo
+Remove_from_group=Rimuovi_dal_gruppo
+Remove_group=Rimuovi_gruppo
+Remove_group,_keep_subgroups=Rimuovi_gruppo,_mantieni_i_sottogruppi
+Remove_group_"%0"?=Rimuovere_il_gruppo_"%0"?
+Remove_group_"%0"_and_its_subgroups?=Rimuovere_il_gruppo_"%0"_ed_i_suoi_sottogruppi?
+remove_group_(keep_subgroups)=rimuovi_gruppo_(mantieni_i_sottogruppi)
+remove_group_and_subgroups=rimuovi_gruppo_e_sottogruppi
+Remove_group_and_subgroups=Rimuovi_gruppo_e_sottogruppi
+
+Remove_link=Rimuovere_il_collegamento
+Remove_old_entry=Rimuovi_vecchia_voce
+Remove_selected_strings=Rimuovi_le_stringhe_selezionate
+remove_string_=rimuovi_stringa_
+Removed_group_"%0".=Rimosso_gruppo_"%0".
+Removed_group_"%0"_and_its_subgroups.=Rimosso_gruppo_"%0"_e_suoi_sottogruppi.
+Removed_string=Stringa_rimossa
+Renamed_string=Stringa_rinominata
+Replace=Sostituisci
+Replace_(regular_expression)=Sostituisci_(espressione_regolare)
+Replace_string=Sostituisci_stringa
+Replace_with=Sostituisci_con
+Replaced=Sostituito
+Required_fields=Campo_obbligatorio
+Reset_all=Reimposta_tutto
+Reset_file_type_definitons=Ristabilisci_le_definizioni_originali_dei_tipi_di_file
+
+Resolve_strings_for_all_fields_except=Risolve_le_stringhe_per_tutti_i_campi_tranne
+Resolve_strings_for_standard_BibTeX_fields_only=Risolve_le_stringhe_solo_per_i_campi_BibTeX_standard
+resolved=risolto
+Results=Risultati
+Revert_to_original_source=Ripristina_il_contenuto_iniziale
+##_check_Rivista?_Verifica?
+Review=Rivedi
+Review_changes=Rivedi_le_modifiche
+Right=Destra
+root=root
+Save=Salva
+Save_all_finished.=Terminato_il_salvataggio_di_tutti_i_database.
+
+Save_all_open_databases=Salva_tutti_i_database_aperti
+Save_before_closing=Salva_prima_di_chiudere
+Save_database=Salva_il_database
+Save_database_as_...=Salva_il_database_come...
+Save_entries_in_their_original_order=Salva_le_voci_nel_loro_ordine_originale
+Save_failed=Salvataggio_fallito
+Save_failed_during_backup_creation=Salvataggio_fallito_durante_la_creazione_della_copia_di_backup
+Save_failed_while_committing_changes=Salvataggio_fallito_nel_rendere_definitivi_i_cambiamenti
+Save_ordered_by_author/editor/year=Salvare_in_ordine_per_author/editor/year
+Save_selected_as_...=Salva_la_selezione_come...
+Saved_database=Database_salvato
+Saved_selected_to=Salvata_la_selezione_in
+Saved_session=Sessione_salvata
+Saving=Salvataggio_in_corso
+Saving_all_databases...=Salvataggio_di_tutti_i_database...
+Saving_database=Salvataggio_del_database_in_corso
+##_check
+Scan=Scansione
+Search=Ricerca
+Search_All_Fields=Ricerca_in_tutti_i_campi
+Search_all_fields=Ricerca_in_tutti_i_campi
+Search_error=Errore_di_ricerca
+Search_expression=Espressione_di_ricerca
+Search_for=Ricerca
+Search_general_fields=Ricerca_nei_campi_generali
+Search_IEEEXplore=Ricerca_IEEEXplore
+Search_IEEExplore=Ricerca_in_IEEExplore
+Search_optional_fields=Ricerca_nei_campi_opzionali
+Search_required_fields=Ricerca_nei_campi_obbligatori
+Search_Specified_Field(s)=Ricerca_nei_campi_specificati
+Searched_database._Global_number_of_hits=Ricerca_effettuata._Numero_totale_di_risultati
+Searched_database._Number_of_hits=Ricerca_effettuata._Numero_di_risultati_trovati
+Searching_for_%0_file=Ricerca_file_%0
+Searching_for_duplicates...=Ricerca_di_duplicati_in_corso...
+
+Searching_for_files=Ricerca_dei_file
+Secondary_sort_criterion=Criterio_di_ordinamento_secondario
+Select=Seleziona
+Select_a_Zip-archive=Seleziona_un_archivio_Zip
+Select_action=Seleziona_l'operazione
+Select_all=Seleziona_tutto
+Select_Classpath_of_New_Importer=Seleziona_il_classpath_del_nuovo_filtro_di_importazione
+Select_encoding=Seleziona_la_codifica
+Select_entries_in_group_selection=Seleziona_le_voci_nella_selezione_dei_gruppi
+Select_entry_type=Seleziona_un_tipo_di_voce
+Select_external_application=Seleziona_un'applicazione_esterna
+Select_file_from_ZIP-archive=Seleziona_un_file_da_un_archivio_Zip
+Select_format=Seleziona_il_formato
+Select_icon=Seleziona_l'icona
+Select_matches=Seleziona_le_corrispondenze
+Select_new_ImportFormat_Subclass=Seleziona_una_nuova_sottoclasse_ImportFormat
+Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Selezionare_i_nodi_dell'albero_per_vedere_ed_accettare_o_rifiutare_le_modifiche
+Selected_entries=Voci_selezionate
+##_check
+Selector_enabled_fields=Campi_con_selezione_attivata
+Server_Hostname_\:=Hostname_del_server:
+Server_Type_\:=Tipo_di_server:
+
+Set_field=Imposta_il_campo
+Set_fields=Imposta_i_campi
+Set_general_fields=Definisci_i_campi_generali
+Set_main_external_file_directory=Impostare_la_cartella_principale_dei_file_esterni
+Set_table_font=Definisci_i_font_della_tabella
+Settings=Parametri
+##_check
+Setup_selectors=Definisci_i_selettori
+Short_form=Forma_breve
+Shortcut=Scorciatoia
+Show/edit_BibTeX_source=Mostra/Modifica_codice_sorgente_BibTeX
+Show_'Firstname_Lastname'=Mostra_'Nome_Cognome'
+Show_'Lastname,_Firstname'=Mostra_'Cognome,_Nome'
+Show_BibTeX_source_by_default=Mostra_il_codice_sorgente_BibTeX_per_impostazione_predefinita
+Show_BibTeX_source_panel=Mostra_la_scheda_"Sorgente_BibTeX"
+Show_confirmation_dialog_when_deleting_entries=Chiedere_conferma_della_cancellazione_di_una_voce
+Show_description=Mostra_descrizione
+Show_dynamic_groups_in_<i>italics</i>=Mostra_gruppi_dinamici_in_<i>corsivo</i>
+Show_entries_*not*_in_group_selection=Mostra_le_voci_*non*_comprese_nei_gruppi_selezionati
+
+Show_file_column=Visualizza_la_colonna_File
+Show_icons_for_groups=Mostra_le_icone_per_i_gruppi
+Show_last_names_only=Mostra_solo_i_cognomi
+Show_names_unchanged=Mostra_i_nomi_immodificati
+Show_one_less_rows=Mostra_una_riga_in_meno
+Show_one_more_row=Mostra_una_riga_in_pi\u00f9
+Show_optional_fields=Mostra_i_campi_opzionali
+Show_PDF/PS_column=Mostra_colonna_PDF/PS
+Show_required_fields=Mostra_i_campi_obbligatori
+Show_URL/DOI_column=Mostra_colonna_URL/DOI
+Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Mostra_un_messaggio_di_avverimento_quando_viene_immessa_una_chiave_BibTeX_gi\u00e0_esistente
+Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Mostra_un_messaggio_di_avverimento_quando_viene_immessa_una_chiave_BibTeX_vuota
+Simple_HTML=HTML_semplice
+Size=Dimensione
+Skip=Salta
+Skipped_-_No_PDF_linked=Saltato_-_Nessun_file_PDF_collegato
+Skipped_-_PDF_does_not_exist=Saltato_-_Il_file_PDF_non_esiste
+
+Skipped_entry.=Voce_saltata
+Sort_alphabetically=Ordina_alfabeticamente
+Sort_Automatically=Ordina_automaticamente
+
+Sort_order=Ordinamento
+sort_subgroups=ordina_i_sottogruppi
+Sorted_all_subgroups_recursively.=Ordina_tutti_i_sottogruppi_ricorsivamente.
+Sorted_immediate_subgroups.=Ordinati_i_sottogruppi_immediati.
+source_edit=modifica_sorgente
+Special_Name_Formatters=Formattazioni_speciali_dei_nomi
+Special_table_columns=Colonne_di_tabella_speciali
+SQL_connection_established.=Connessione_SQL_stabilita.
+Start_incremental_search=Inizia_la_ricerca_incrementale
+Start_search=Inizia_la_ricerca
+Starting_import=Inizio_importazione
+Statically_group_entries_by_manual_assignment=Raggruppa_manualmente_le_voci
+Status=Stato
+Stop=Arresta
+Store_journal_abbreviations=Registra_le_abbreviazioni_delle_riviste
+Store_string=Registra_la_stringa
+Store_the_following_fields_with_braces_around_capital_letters=Registra_i_seguenti_campi_con_lettere_maiuscole_tra_parentesi_graffe_addizionali
+Stored_entry=Voce_registrata
+Strings=Stringa
+Strings_for_database=Stringhe_per_il_database
+Subdatabase_from_aux=Subdatabase_da_file_LaTeX_AUX
+Suggest=Suggerisci
+Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Alterna_nomi_completi_e_nomi_abbreviati_per_le_riviste_delle_quali_\u00e8_noto_il_nome.
+
+Synchronize_%0_links=Sincronizza_%0_collegamenti
+Synchronize_file_links=Sincronizza_il_collegamento_ai_file
+Synchronizing_%0_links...=Sincronizzazione_di_%0_collegamenti_in_corso...
+Table_appearance=Aspetto_della_tabella
+Table_background_color=Colore_di_sfondo_della_tabella
+Table_grid_color=Colore_della_griglia_della_tabella
+Table_text_color=Colore_del_testo_della_tabella
+Tabname=Nome_della_scheda
+Target_file_cannot_be_a_directory.=L'oggetto_deve_essere_un_file,_non_una_cartella.
+Tertiary_sort_criterion=Criterio_di_ordinamento_terziario
+Test=Test
+Text_Input_Area=Area_di_inserimento_testo
+The_#_character_is_not_allowed_in_BibTeX_fields=Il_carattere_'#'_non_\u00e8_permesso_nei_campi_BibTeX
+The_chosen_date_format_for_new_entries_is_not_valid=Il_formato_di_data_scelto_per_le_nuove_voci_non_\u00e8_valido
+
+The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=La_codifica_scelta_'%0'_non_pu\u00f2_codificare_i_caratteri_seguenti:_
+The_CiteSeer_fetch_operation_returned_zero_results.=La_ricerca_CiteSeerX_non_ha_fornito_risultati.
+
+The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=La_versione_attuale_dispone_di_una_nuova_modalit\u00e0_di_gestione_dei_collegamenti_ai_file_esterni.<BR>Per_poterla_sfruttare,_i_collegamenti_devono_essere_convertiti_nel_nuovo_formato<BR>e_JabRef_deve_essere_configurato_per_mostrare_i_nuovi_collegamenti.
+the_field_<b>%0</b>=il_campo_<b>%0</b>
+The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Il_file_<BR>'%0'<BR>_\u00e8_stato_modificato_da_un'applicazione_esterna
+The_group_"%0"_already_contains_the_selection.=Il_gruppo_"%0"_contiene_gi\u00e0_la_selezione.
+The_label_of_the_string_can_not_be_a_number.=L'etichetta_della_stringa_non_pu\u00f2_essere_un_numero.
+The_label_of_the_string_can_not_contain_spaces.=L'etichetta_della_stringa_non_pu\u00f2_contenere_spazi.
+The_label_of_the_string_can_not_contain_the_'#'_character.=L'etichetta_della_stringa_non_pu\u00f2_contenere_il_carattere_'#'
+The_output_option_depends_on_a_valid_import_option.=L'opzione_di_output_dipende_da_una_opzione_di_importazione_valida.
+The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=Il_file_PDF_contiene_uno_o_pi\u00f9_record_BibTeX.\nVuoi_importarli_come_nuove_voci_nel_database_corrente?
+The_regular_expression_<b>%0</b>_is_invalid%c=L'espressione_regolare_<b>%0</b>_non_\u00e8_valida%c
+The_search_is_case_insensitive.=La_ricerca_non_distingue_maiuscole_e_minuscole.
+The_search_is_case_sensitive.=La_ricerca_distingue_maiuscole_e_minuscole.
+The_string_has_been_removed_locally=La_stringa_\u00e8_stata_rimossa_localmente
+There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Ci_sono_dei_potenziali_duplicati_(contrassegnati_con_una_icona_'D')_che_non_possono_essere_risolti._Continuare?
+this_button_will_update=questo_bottone_aggiorner\u00e0
+This_database_was_written_using_an_older_version_of_JabRef.=Questo_database_\u00e8_stato_generato_da_una_versione_precedente_di_JabRef.
+This_entry_has_no_BibTeX_key._Generate_key_now?=Questa_voce_\u00e8_priva_di_una_chiave_BibTeX._Generarla_ora?
+This_entry_is_incomplete=La_voce_\u00e8_incompleta
+This_entry_type_cannot_be_removed.=Questo_tipo_di_voce_non_pu\u00f2_essere_eliminato.
+This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Questo_collegamento_\u00e8_di_tipo_'%0',_ancora_indefinito._Cosa_vuoi_fare?
+This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Questo_gruppo_contiene_voci_assegnate_manualmente._Altre_voci_possono_essere_assegnate_a_questo_gruppo_selezionandole [...]
+This_group_contains_entries_in_which=Questo_gruppo_contiene_voci_in_cui
+This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Questo_gruppo_contiene_voci_in_cui_uno_dei_campi_contiene_l'espressione_regolare_<b>%0</b>
+This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Questo_gruppo_contiene_voci_in_cui_uno_dei_campi_contiene_il_termine_<b>%0</b>
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Questo_gruppo_contiene_voci_in_cui_il_campo_<b>%0</b>__contiene_la_keyword_<b>%1</b>
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Questo_gruppo_contiene_voci_in_cui_il_campo_<b>%0</b>__contiene_l'espressione_regolare_<b>%1</b>
+This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Questo_\u00e8_un_semplice_dialogo_taglia_e_copia_per_importare_dei_campi_da_testo_normale
+This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Per_ciascuno_dei_%0_collegamenti,_JabRef_verificher\u00e0_l'esistenza_del_file.<BR>In_caso_negativo_proporr\u00e0_delle_opzioni_per_la_risoluzione_del_problema.
+This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Per_questa_operazione_\u00e8_necessario_che_tutte_le_voci_selezionate_abbiano_la_chiave_BibTeX_definita
+This_operation_requires_at_least_one_entry.=Questa_operazione_richiede_almeno_una_voce.
+This_operation_requires_one_or_more_entries_to_be_selected.=Per_questa_operazione_una_o_pi\u00f9_voci_devono_essere_selezionate
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Questa_azione_sposter\u00e0_tutti_i_collegamenti_dai_campi_'pdf'_e_'ps'_al_campo_'%0'._Procedere?
+To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Per_configurare_vedi_<B>Strumenti_->_Gestione_delle_abbreviazioni_delle_riviste</B>
+Toggle_abbreviation=Mostra/Nascondi_l'abbreviazione
+Toggle_entry_preview=Mostra/Nascondi_l'anteprima
+Toggle_groups_interface=Mostra/Nascondi_l'interfaccia_dei_gruppi
+Toggle_search_panel=Mostra/Nascondi_il_pannello_di_ricerca
+Try_different_encoding=Prova_codifiche_differenti
+Type_set_to_'other'=Tipo_configurato_come_'other'
+Unabbreviate_journal_names_of_the_selected_entries=Mostra_il_nome_completo_delle_riviste_per_le_voci_selezionate
+Unabbreviated_%0_journal_names.=%0_nomi_di_riviste_per_esteso.
+unable_to_access_LyX-pipe=impossibile_accedere_alla_'pipe'_LyX
+Unable_to_create_graphical_interface=Impossibile_creare_l'interfaccia_grafica
+Unable_to_open_file.=Impossibile_aprire_il_file
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Impossibile_aprire_il_collegamento._L'applicazione_'%0'_associata_con_il_tipo_di_file_'%1'_non_pu\u00f2_essere_aperta.
+Unable_to_read_default_icon_theme.=Impossibile_leggere_il_file_di_tema_di_icone_predefinito
+Unable_to_read_icon_theme_file=Impossibile_leggere_il_file_di_tema_di_icone
+unable_to_write_to=Impossibile_scrivere_su
+Undefined_file_type=Tipo_di_file_non_definito
+Undo=Annulla
+Union=Unione
+Unknown_bibtex_entries=Voci_BibTeX_sconosciute
+##_check
+unknown_edit=modifica_sconosciuta
+unknown_entry_type=tipo_di_voce_sconosciuto
+Unknown_export_format=Formato_di_esportazione_sconosciuto
+Unmark_all=Rimuovi_tutti_i_contrassegni
+Unmark_entries=Rimuovi_i_contrassegni_dalle_voci
+Unmark_entry=Rimuovi_il_contrassegno_dalla_voce
+Unmarked_selected=Rimuovi_i_contrassegni_dalla_selezione
+Unpack_EndNote_filter_set=Scompattare_i_filtri_EndNote
+Unpacked_file.=File_scompattato.
+Unsupported_version_of_class_%0\:_%1=Versione_non_supportata_della_classe_%0:_%1
+untitled=senza_titolo
+##check:_Alto?
+Up=Su
+Update_to_current_column_widths=Aggiorna_la_larghezza_delle_colonne_ai_valori_correnti
+Updated_group_selection=Selezione_di_gruppo_aggiornata
+Upgrade_external_links=Aggiorna_i_collegamenti_esterni
+Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Aggiornare_i_collegamenti_esterni_PDF/PS_per_utilizzare_il_campo_'%0'.
+Upgrade_file=Aggiornamento_del_file
+Upgrade_old_external_file_links_to_use_the_new_feature=Aggiornare_i_vecchi_collegamenti_ai_file_esterni_per_utilizzare_la_nuova_funzione
+Upgraded_links.=Collegamenti_aggiornati.
+UPPER=MAIUSCOLO
+Upper_Each_First=Prime_Lettere_In_Maiuscolo
+Upper_first=Prima_lettera_in_maiuscolo
+usage=uso
+Use_antialiasing_font=Usa_font_con_antialising
+Use_autocompletion_for_the_following_fields=Usa_l'autocompletamento_per_i_seguenti_campi
+Use_custom_icon_theme=Utilizza_un_tema_di_icone_personalizzato
+Use_default_viewer=Usa_il_visualizzatore_predefinito
+Use_inspection_window_also_when_a_single_entry_is_imported.=Usa_la_finestra_di_ispezione_anche_per_l'importazione_di_una_singola_voce.
+Use_native_file_dialog=Usa_finestra_di_dialogo_File_nativa
+Use_other_look_and_feel=Usa_un_altro_"Look-and-Feel"
+Use_Regular_Expression_Search=Ricerca_l'espressione_regolare
+Use_regular_expressions=Utilizza_espressioni_regolari
+Use_the_following_delimiter_character(s)=Utilizza_i_caratteri_di_delimitazione_seguenti
+Username_\:=Username:
+Value_cleared_externally=Valore_cancellato_esternamente
+Value_set_externally=Valore_impostato_esternamente
+verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=verifica_che_LyX_sia_in_esecuzione_e_che_la_lyxpipe_sia_valida
+View=Visualizza
+Vim_Server_Name=Nome_del_server_Vim
+
+Waiting_for_ArXiv...=In_attesa_di_ArXiv...
+Warn_about_unresolved_duplicates_when_closing_inspection_window=Avverti_della_presenza_di_doppioni_non_risolti_alla_chiusura_della_finestra_di_ispezione
+Warn_before_overwriting_existing_keys=Avverti_prima_di_sovrascrivere_chiavi_esistenti
+Warning=Avvertimento
+Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Attenzione:_non_\u00e8_stato_possibile_completare_la_riparazione_del_file;_il_file_potrebbe_essere_corrotto._Messaggio_di_errore
+Warning_there_is_a_duplicate_key=Avvertimento!_Una_delle_chiavi_\u00e8_duplicata
+Warnings=Avvertimenti
+web_link=Collegamenti_Internet
+
+
+What_do_you_want_to_do?=Cosa_vuoi_fare?
+When_adding/removing_keywords,_separate_them_by=All'aggiunta/rimozione_di_keyword_separarle_con
+Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Scrive_i_metadati_XMP_nei_file_PDF_collegati_alle_voci_selezionate
+with=con
+Word=Parola
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=Scrivi_voce_BibTeX_come_metadati_XMP_in_un_file_PDF.
+Write_XMP=Scrivi_XMP
+Write_XMP-metadata=Scrivi_i_metadati_XMP
+Write_XMP-metadata_for_all_PDFs_in_current_database?=Scrivere_i_metadati_XMP_per_tutti_i_file_PDF_del_database_corrente?
+
+Writing_XMP=Scrittura_XMP
+Writing_XMP_metadata...=Scrittura_dei_metadati_XMP...
+Writing_XMP_metadata_for_selected_entries...=Scrittura_dei_metadati_XMP_per_le_voci_selezionate
+Writing_XMP_to_'%0'...=Scrittura_dei_metadati_XMP_in_'%0'...
+Wrong_file_format=Formato_di_file_errato
+Wrote_XMP-metadata=Metadati_XMP_scritti
+Wrote_XMP_to_'%0'.=Scritti_i_metadati_XMP_in_'%0'.
+
+XMP-annotated_PDF=PDF_con_annotazioni_XMP
+XMP_Export_Privacy_Settings=Impostazioni_per_la_riservatezza_dei_dati_XMP_esportati
+
+XMP_metadata=Metadati_XMP
+XMP_metadata_found_in_PDF\:_%0=Metadati_XMP_trovati_nel_file_PDF:_%0
+You_must_restart_JabRef_for_this_to_come_into_effect.=Riavviare_Jabref_per_rendere_effettiva_la_modifica.
+You_have_changed_the_language_setting.=La_lingua_\u00e8_stata_modificata.
+You_have_changed_the_look_and_feel_setting.=Le_impostazioni_dell'aspetto_dell'applicazione_sono_stati_cambiati.
+You_have_cleared_this_field._Original_value=Il_campo_\u00e8_stato_annullato._Valore_originale
+
+You_have_entered_an_invalid_search_'%0'.=\u00c8_stata_inserita_una_ricerca_non_valida_'%0'.
+You_must_choose_a_file_name_to_store_journal_abbreviations=Scegliere_un_nome_per_il_file_in_cui_registrare_le_abbreviazioni_delle_riviste
+You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Riavviare_Jabref_per_rendere_operative_le_nuove_assegnazioni_di_tasti.
+You_must_set_both_BibTeX_key_and_%0_directory=Definire_sia_la_chiave_BibTex,_sia_la_cartella_%0
+Your_new_key_bindings_have_been_stored.=La_nuova_assegnazione_di_tasti_\u00e8_stata_salvata.
+The_following_fetchers_are_available\:=Le_utilit\u00e0_di_ricerca_seguenti_sono_disponibili:
+Could_not_find_fetcher_'%0'=Impossibile_trovare_l'utilit\u00e0_di_ricerca_'%0'_
+Running_Query_'%0'_with_fetcher_'%1'.=Esecuzione_della_query_'%0'_con_l'utilit\u00e0_di_ricerca_'%1'.
+Please_wait!=Attendere,_prego!
+Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=La_query_'%0'_con_l'utilit\u00e0_di_ricerca_'%1'_non_ha_prodotto_alcun_risultato.
+Open_SPIRES_entry=Apri_la_voce_SPIRES
+Move/Rename_file=Sposta/Rinomina_il_file
+File_moved=File_spostato
+Move_file_failed=Spostamento_del_file_fallito
+Could_not_move_file=Impossibile_spostare_il_file
+Could_not_find_file_'%0'.=Impossibile_trovare_il_file_'%0'.
+Move/rename_file=Sposta/rinomina_il_file
+Number_of_entries_successfully_imported=Numero_di_voci_importate_con_successo
+Import_canceled_by_user=Importazione_interrotta_dall'utente
+Progress\:_%0_of_%1=Stato_d'avanzamento:_%0_di_%1
+Error_while_fetching_from_JSTOR=Errore_durante_la_ricerca_JSTOR
+Fetching_Medline_by_id...=Recupero_da_Medline_per_id...
+Fetching_Medline_by_term...=Recupero_da_Medline_per_termine...
+Medline_import_canceled=Importazione_da_Medline_annullata
+Please_enter_a_valid_number=Inserire_un_numero_valido
+Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Inserire_una_lista_separata_da_virgole_di_ID_Medline_(numeri)_o_termini_di_ricerca.
+An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=Si_\u00e8_verificato_un_errore_durante_il_recupero_dalla_fonte_SPIRES_(%0):
+Error_while_fetching_from_Spires\:_=Errore_durante_il_recupero_da_SPIRES:_
+Connect_to_external_SQL_database=Connessione_ad_un_database_SQL_esterno
+Export_to_external_SQL_database=Esportazione_su_un_database_SQL_esterno
+
+Show_results_in_dialog=Mostra_i_risultati_in_una_finestra_di_dialogo
+Global_search=Ricerca_globale
+Show_search_results_in_a_window=Mostra_i_risultati_della_ricerca_in_una_finestra
+Search_results=Risultati_della_ricerca
+Move_file_to_file_directory?=Spostare_i_file_nella_cartella_dei_file_principale?
+Rename_to_'%0'=Rinomina_in_'%0'
+Move_to_file_directory=Sposta_nella_cartella_dei_file_principale
+
+You_have_changed_the_menu_and_label_font_size.=Sono_state_modificate_le_dimensioni_del_carattere_di_menu_ed_etichette.
+
+Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Il_database_\u00e8_protetto._Le_modifiche_esterne_devono_evvere_state_riviste_prima_di_poter_salvare.
+Protected_database=Database_protetto
+Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Rifiuta_di_salvare_prima_che_le_modifiche_esterne_siano_state_riviste.
+Database_protection=Protezione_del_database
+Unable_to_save_database=Impossibile_salvare_il_database
+BibTeX_key_generator=Generatore_di_chiavi_BibTeX
+Unable_to_open_link.=Impossibile_aprire_il_collegamento.
+Search_JSTOR=Ricerca_JSTOR
+Attempting_SQL_import...=Tentativo_di_importazione_SQL...
+BibO_RDF=BibO_RDF
+HTML_parser=Parser_HTML
+
+Move_the_keyboard_focus_to_the_entry_table=Sposta_il_cursore_nella_tabella_delle_voci
+MIME_type=Tipo_MIME
+
+This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Questa_funzione_permette_l'apertura_o_l'importazione_di_nuovi_file_in_una_istanza_di_JabRef_gi\u00e0_aperta<BR>invece_di_aprirne_una_nuova._Per_esempio,_ci\u00f2_\u00e8_utile_quando_u [...]
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Si_noti_che_queste_impostazioni_sono_usate_solo_per_i_campi_obsoleti_<B>pdf</B>_e_<B>ps</B>.<BR>Per_la_generalit\u00e0_degli_utenti,_l'impostazione_del_parametro_<B>Cartella_dei_file_principale</B>_dovrebbe_essere_sufficiente.
+Legacy_file_fields=Campi_file_obsoleti
+
+This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Per_ciascuna_delle_%0_estensioni,_JabRef_verificher\u00e0_l'esistenza_del_file.<BR>In_caso_negativo_proporr\u00e0_delle_opzioni_per_la_risoluzione_del_problema.
+
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Lanciare_una_ricerca,_es._"--fetch=Medline:cancer"
+
+The_ACM_Digital_Library=ACM_Digital_Library
+Reset=Reinizializza
+
+Use_IEEE_LaTeX_abbreviations=Usa_le_abbreviazioni_LaTeX_IEEE
+The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
+Search_ACM_Portal=Ricerca_nel_portale_ACM
+Connection_to_ACM_Portal_failed=Connessione_al_portale_ACM_fallita
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=All'apertura_di_un_collegamento_ad_un_file,_ricercare_un_file_corrispondente_se_non_ne_\u00e8_definito_uno.
+Settings_for_%0=Parametri__per_%0
+Insert_selected_citations_into_Vim=Inviare_le_citazioni_selezionate_a_Vim
+RIS=RIS
+Assign_exclusively_to_group=Assegna_esclusivamente_al_gruppo
+Bad_Request_'%0'.=Richiesta_erronea_'%0'.
+Mark_entries_imported_into_an_existing_database=Contrassegna_le_voci_importate_in_un_database_preesistente
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Rimuovi_tutti_i_contrassegni_prima_di_importare_nuove_voci_in_un_database_preesistente
+Forward=Successivo
+Back=Precedente
+Sort_the_following_fields_as_numeric_fields=Ordina_i_campi_seguenti_come_campi_numerici
+Line_%0\:_Found_corrupted_BibTeX-key.=Riga_%0\:_chiave_BibTeX_corrotta.
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Riga_%0\:_chiave_BibTeX_corrotta_(contiene_spazi).
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Riga_%0\:_chiave_BibTeX_corrotta_(virgola_mancante).
+Finished_downloading_full_text_document=Terminato_il_download_del_documento_citato
+Unable_to_find_full_text_document_in_the_linked_web_page.=Impossibile_trovare_il_documento_citato_nella_pagina_web_collegata.
+Connection_error_when_trying_to_find_full_text_document.=Errore_di_connessione_nel_corso_della_ricerca_del_documento_citato
+This_entry_provides_no_URL_or_DOI_links.=Questa_voce_non_fornisce_collegamenti_URL_o_DOI.
+Full_text_article_download_failed=Fallito_il_download_del_documento_citato
+Update_to_current_column_order=Salvare_l'ordine_delle_colonne_attuale
+
+Rename_field=Rinomina_il_campo
+Set/clear/rename_fields=Imposta/svuota/rinomina_i_campi
+Rename_field_to\:=Rinomina_il_campo_in\:
+Move_contents_of_a_field_into_a_field_with_a_different_name=Sposta_il_contenuto_di_un_campo_in_un_campo_con_nome_diverso
+
+You_can_only_rename_one_field_at_a_time=\u00c8_possibile_rinominare_solo_un_campo_per_volta
+Remove_all_broken_links=Rimuovere_tutti_i_collegamenti_non_validi
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Impossibile_utilizzare_la_porta_%0_per_operazioni_remote;_la_porta_potrebbe_essere_in_uso_da_parte_di_un'altra_applicazione._Provare_a_specificare_una_porta_diversa.
+
+Plugin_installer=Installazione_di_plugin
+Unable_to_create_plugin_directory=Impossibile_creare_una_cartella_dei_plugin
+Unable_to_copy_file=Impossibile_copiare_un_file
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Plugin_installato_correttamente._\u00c8_necessario_riavviare_JabRef_per_caricare_il_nuovo_plugin.
+Unable_to_create_user_plugin_directory=Impossibile_creare_una_cartella_utente_del_plugin
+Plugin_installation_failed.=Installazione_del_plugn_fallita.
+The_same_version_of_this_plugin_is_already_installed.=La_stessa_versione_del_plugin_\u00e8_gi\u00e0_installata.
+A_newer_version_of_this_plugin_is_already_installed.=Una_versione_pi\u00f9_recente_del_plugin_\u00e8_gi\u00e0_installata.
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Una_o_pi\u00f9_versioni_pi\u00f9_vecchie_del_plugin_sono_installate._Cancellare_le_vecchie_versioni?
+Old_versions_deleted_successfully.=La_cancellazione_delle_vecchie_versioni_\u00e8_riuscita.
+
+Install_plugin=Installa_plugin
+Download_plugin=Scarica_plugin
+Plugin_manager=Gestione_plugin
+Delete_the_%0_selected_plugins?=Cancellare_i_%0_plugin_selezionati?
+Delete_plugins=Cancella_plugin
+Delete_the_selected_plugin?=Cancellare_i_plugin_selezionati?
+Delete_plugin=Cancella_plugin
+Enter_download_URL=Inserire_lo_URL_di_download
+Plugin_name=Nome_del_plugin
+Version=Versione
+Unknown=Sconosciuto
+Not_loaded=Non_caricato
+Loaded=Caricato
+Could_not_determine_version_of_=Impossibile_determinare_la_versione_di_
+Install_anyway?=Installare_comunque?
+
+Looking_for_full_text_document...=Ricerca_del_documento_citato
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Segui_i_collegamenti_DOI_e_URL_prova_a_localizzare_il_file_PDF_del_documento_citato
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Impossibile_torvare_il_file_PDF_del_documento_citato._Nessun_algoritmo_di_ricerca_definito_per_il_sito_internet_'%0'.
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Trovato_il_collegamento_al_file_PDF,_ma_il_tipo_MIME_ricevuto_non_\u00e8_corretto._Ci\u00f2_potrebbe_indicare_che_non_si_ha_permessi_di_accesso_al_file_PDF_del_documento_citato.
+
+Autosave=Salvataggio_automatico
+Prompt_before_recovering_a_database_from_an_autosave_file=Richiedere_conferma_prima_del_recupero_di_un_database_da_un_salvataggio_automatico
+Autosave_interval_(minutes)=Intervallo_di_salvataggio_automatico_(minuti)
+Do_you_want_to_recover_the_database_from_the_autosave_file?=Recuperare_il_database_dal_salvataggio_automatico?
+Recover_from_autosave=Recupero_da_salvataggio_automatico
+%0_warnings=%0_avvertimenti
+
+Save_in_current_table_sort_order=Salvare_nell'ordine_corrente_della_tabella
+Export_in_current_table_sort_order=Esportare_nell'ordine_corrente_della_tabella
+Export_ordered_by_author/editor/year=Esportare_secondo_l'ordine_author/editor/year
+Export_entries_in_their_original_order=Esportare_le_voci_nell'ordine_originale
+Error_opening_file_'%0'.=Errore_nell'apertura_del_file_'%0'.
+Autosave_of_file_'%0'=Salvataggio_automatico_del_file_'%0'
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Errore_nell'apertura_del_salvataggio_automatico_di_'%0'._Tentativo_di_apertura_di_'%0'.
+
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugin_installati_nella_cartella_dei_plugin_dell'utente_(%0):
+Plugins_installed_in_other_locations\:=Plugin_installati_in_altre_cartelle:
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=I_plugin_verranno_cancellati_al_prossimo_avvio_di_JabRef.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=Il_plugin_verr\u00e0_cancellato_al_prossimo_avvio_di_JabRef.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Le_vecchie_versioni_del_plugin_verranno_cancellate_al_prossimo_avvio_di_JabRef.
+
+Formatter_not_found\:_%0=Formattazione_non_trovata\:_%0
+The_following_formatters_could_not_be_found=Le_seguenti_formattazioni_non_sono_state_trovate
+
+Clear_inputarea=Svuota_l'area_di_inserimento
+
+Automatically_set_file_links_for_this_entry=Definire_automaticamente_i_collegamenti_ai_file_per_questa_voce
+Could_not_save,_file_locked_by_another_JabRef_instance.=Impossibile_salvare,_il_file_\u00e8_bloccato_da_un'altra_istanza_di_JabRef.
+File_is_locked_by_another_JabRef_instance.=Il_file_\u00e8_bloccato_da_un'altra_istanza_di_JabRef.
+Do_you_want_to_override_the_file_lock?=Vuoi_ignorare_il_blocco_del_file?
+File_locked=File_bloccato
+Current_tmp_value=Variabile_"tmp"_corrente
+Metadata_change=Modifica_dei_metadati
+Changes_have_been_made_to_the_following_metadata_elements=Sono_stati_modificati_i_seguenti_elementi_dei_metadati
+
+Generate_groups_for_author_last_names=Genera_gruppi_in_base_al_cognome_dell'autore
+Generate_groups_for_editor_last_names=Genera_gruppi_in_base_al_cognome_del_curatore
+Generate_groups_from_keywords_in_a_BibTeX_field=Genera_gruppi_in_base_alle_parole_chiave_in_un_campo_BibTeX
+Enforce_legal_characters_in_BibTeX_keys=Imponi_l'utilizzo_dei_soli_caratteri_conformi_alla_sintassi_nelle_chiavi_BibTeX
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Il_carattere_#_non_\u00e8_consentito_nelle_stringhe_BibTeX_se_non_protetto_da_un_carattere_di_"escape"_come_in_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Prima_di_salvare,_modificare_le_stringhe_contenenti_il_carattere_#.
+
+Save_without_backup?=Salvare_senza_backup?
+Unable_to_create_backup=Impossibile_creare_un_backup
+## line below is a duplicate? 
+File_directory_is_not_set_or_does_not_exist.=La_cartella_dei_file_non_\u00e8_configurata_o_non_esiste.
+## end note
+
+Move_file_to_file_directory.=Sposta_il_file_nella_cartella_dei_file.
+Rename_file_to=Rinomina_il_file_in_
+<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Tutte_le_voci</b>_(questo_gruppo_non_pu\u00f2_essere_modificato_o_rimosso)
+static_group=gruppo_statico
+dynamic_group=gruppo_dinamico
+refines_supergroup=ridefinisce_il_super-gruppo
+includes_subgroups=include_il_super-gruppo
+contains=contiene
+search_expression=espressione_di_ricerc
+
+Disable_file_renaming_in_non-native_file_dialog=Disattivare_la_possibilit\u00e0_di_rinominare_i_file_nelle_finestre_di_dialogo_file_non_native
+File_dialog=Finestra_di_dialogo_file
+No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Nessuna_voce_trovata._\u00c8_possibile_non_si_disponga_dell'accesso_alla_ricerca_su_JStor
+
+Search_ScienceDirect=Ricerca_in_ScienceDirect
+Error_while_fetching_from_ScienceDirect=Errore_nel_recupero_dei_dati_da_ScienceDirect
+
+Error_initializing_custom_export_format_from_string_'%0'=Errore_di_inizializzazione_del_formato_di_esportazione_personalizzato_dalla_stringa_'%0'
+
+BibLaTeX_mode=modalit\u00e0_BibLaTeX
+Optional_fields_2=Campi_opzionali_2
+Please_wait=Attendere,_prego.
+Waiting_for_save_operation_to_finish=In_attesa_del_termine_del_salvataggio
+Resolving_duplicate_BibTeX_keys...=Risoluzione_delle_chiavi_BibTeX_duplicate...
+Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Terminata_la_risoluzione_delle_chiavi_BibTeX_duplicate._%0_voci_modificate.
+This_database_contains_one_or_more_duplicated_BibTeX_keys.=Questo_database_contiene_una_o_pi\u00f9_chiavi_BibTeX_duplicate.
+Do_you_want_to_resolve_duplicate_keys_now?=Vuoi_effettuare_la_risoluzione_delle_chiavi_duplicate_ora?
+
+Find_and_remove_duplicate_BibTeX_keys=Trova_e_rimuovi_le_chiavi_BibTeX_duplicate
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=Sintassi_attesa_per_--fetch='<name_of_fetcher>:<query>'
+Duplicate_BibTeX_key=Chiave_BibTeX_duplicata
+Duplicate_key=Chiave_duplicata
+Generate_key=Genera_una_chiave
+Import_marking_color=Colore_per_contrassegnare_le_voci_importate
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_voci_trovate._Per_ridurre_il_carico_sul_server_ne_saranno_scaricate_solo_%1._Il_processo_sar\u00e0_piuttosto_lento,_in_modo_da_non_creare_problemi_ad_ACM.
+
+BibTeX_importer=Filtro_di_importazione_BibTeX
+Always_add_letter_(a,_b,_...)_to_generated_keys=Aggiungi_sempre_una_lettera_(a,_b,_...)_alle_chiavi_generate
+
+Ensure_unique_keys_using_letters_(a,_b,_...)=Assicura_l'unicit\u00e0_delle_chiavi_con_l'uso_di_lettere_(a,_b,_...)
+Ensure_unique_keys_using_letters_(b,_c,_...)=Assicura_l'unicit\u00e0_delle_chiavi_con_l'uso_di_lettere_(b,_c,_...)
+Entry_editor_active_background_color=Colore_dello_sfondo_quando_attivo_l'editor_delle_voci
+Entry_editor_background_color=Colore_dello_sfondo_dell'editor_delle_voci
+Entry_editor_font_color=Colore_del_font_dell'editor_delle_voci
+Entry_editor_invalid_field_color=Colore_del_campo_non_valido_nell'editor_delle_voci
+
+Table_and_entry_editor_colors=Colori_della_tabella_e_dell'editor_delle_voci
+
+An_autosave_file_was_found_for_this_database._This_could_indicate_=Un_file_di_savataggio_automatico_\u00e8_stato_trovato_per_questo_database._Questo_pu\u00f2_indicare_
+that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=che_JabRef_non_\u00e8_stato_chiuso_correttamente_l'ultima_volta_che_il_file_\u00e8_stato_utilizzato.
+General_file_directory=Cartella_dei_file_generale
+User-specific_file_directory=Cartella_dei_file_specifica_dell'utente
+Error_setting_look_and_feel=Errore_nell'impostazione_del_"Look-and-Feel"
+Search_failed\:_illegal_search_expression=Ricerca_fallita:_espressione_di_ricerca_illegale
+Show_ArXiv_column=Mostra_la_colonna_ArXiv
+<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Decomprimi_il_file_zip_contenente_i_filtri_di_importazione/esportazione_per_Endnote,<BR>per_una_interoperabilit\u00e0_ottimale_con_JabRef</HTML>
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Evidenzia_i_gruppi_contenenti_voci_incluse_in_uno_dei_gruppi_selezionati
+You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=\u00c8_necessario_inserire_un_intero_nell'intervallo_1025-65535_nel_campo_di_testo_per
+Automatically_open_browse_dialog_when_creating_new_file_link=Apri_automaticamente_la_finestra_di_dialogo_"Sfoglia"_quando_viene_creato_un_nuovo_collegamento_ad_un_file
+
+Import_Metadata_from\:=Importa_i_Metadati_da:
+Choose_the_source_for_the_metadata_import=Scegli_la_sorgente_dei_metadati_da_importare
+Create_entry_based_on_XMP_data=Crea_una_nuova_voce_in_base_ai_dati_XMP
+Create_entry_based_on_data_fetched_from=Crea_una_nuova_voce_in_base_ai_dati_recuperati_da
+Create_blank_entry_linking_the_PDF=Crea_una_voce_vuota_collegata_al_file_PDF
+Only_attach_PDF=Allega_solo_il_file_PDF
+Mr._dLib_Metadata_Entries_Associated_With\:=Metadati_di_Mr._dLib_associati_con:
+Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Metadati_di_Mr._dLib_associati_con_il_file_PDF
+Title=Titolo
+Author(s)=Autori
+Published_Year=Anno_di_pubblicazione
+No_metadata_found.=Nessun_metadato_trovato.
+Mr._dLib_web_service_is_temporarily_unavailable.=Il_servizio_web_Mr._dLib_\u00e8_temporaneamente_non_disponibile.
+Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Il_servizio_web_Mr._dLib_\u00e8_temporaneamente_non_disponibile._Si_prega_di_riprovare_pi\u00f9_tardi.
+You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Non_sei_connesso_a_Internet._Per_accedere_al_servizio_web_Mr._dLib_\u00e8_necassaria_una_connessione_ad_Internet_attiva.
+No_Internet_Connection.=Nessuna_connessione_a_Internet.
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Questa_versione_di_JabRef_sta_tentando_di_accedere_ad_una_vecchia_versione_del_servizio_web_Mr._dLib_non_pi\u00f9_funzionante.\nVisita_http://jabref.sourceforge.net_oppure_http://www.mr-dlib.org_per_maggiori_informazioni_e_aggiornamenti.
+Web_Service_Version_Outdated=Versione_del_servizio_web_obsoleta
+The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=La_versione_del_servizio_web_Mr._dLib_a_cui_stai_tentando_di_accedere_\u00e8_obsoleta.
+Update_empty_fields_with_data_fetched_from=Aggiorna_i_campi_vuoti_con_i_dati_recuperati_da
+Create_New_Entry=Crea_una_nuova_voce
+Update_Existing_Entry=Aggiorna_la_voce_esistente
+Mr._dLib=Mr._dLib
+More_information=Ulteriori_informazioni
+Fetching_Metadata...=Recupero_dei_metadati...
+Metadata=Metadati
+Autocomplete_names_in_'Firstname_Lastname'_format_only=Autocompletamento_dei_nomi_solo_nel_formato_'Firstname_Lastname'
+Autocomplete_names_in_'Lastname,_Firstname'_format_only=Autocompletamento_dei_nomi_solo_nel_formato_'Lastname,_Firstname'
+Autocomplete_names_in_both_formats=Autocompletamento_dei_nomi_in_entrambi_i_formati
+Marking_color_%0=Colore_di_contrassegno_%0
+The_name_'comment'_can_not_be_used_as_an_entry_type_name.=Il_nome_'comment'_non_pu\u00f2_essere_utilizzato_come_nome_di_tipo_di_voce.
+You_must_enter_an_integer_value_in_the_text_field_for=Inserire_un_numero_intero_nel_campo_di_testo_per
+File_directory=Cartella_dei_file
+Send_as_email=Invia_come_email
+References=Riferimenti
+Sending_of_emails=Invio_di_email
+Subject_for_sending_an_email_with_references=Oggetto_per_l'invio_di_email_con_riferimenti
+Automatically_open_folders_of_attached_files=Apri_automaticamente_le_cartelle_dei_file_allegati
+Create_entry_based_on_content=Crea_una_voce_in_base_al_contenuto
+Store_choice_as_default=Salva_la_scelta_come_predefinita
+Do_not_show_this_box_again_for_this_import=Non_mostrare_nuovamente_questo_dialogo_per_questa_importazione
+Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Usa_sempre_questa_modalit\u00e0_di_importazione_PDF_(non_chiedere_per_ogni_importazione)
+Error_creating_email=Errore_nella_creazione_della_email
+Could_not_open_directory=Impossibile_aprire_la_cartella
+Entries_added_to_an_email=Voci_aggiunte_ad_un'email
+exportFormat=Formato_di_esportazione
+Output_file_missing=File_di_output_mancante
+No_search_matches.=Nessuna_corrispondenza_per_la_ricerca.
+The_output_option_depends_on_a_valid_input_option.=L'opzione_di_output_dipende_da_un'opzione_di_input_valida.
+Default_import_style_for_drag&drop_of_PDFs=Modalit\u00e0_di_importazione_predefinita_per_il_drag&drop_dei_file_PDF
+Default_PDF_file_link_action=Azione_predefinita_per_il_collegamento_ai_file_PDF
+File_name_format_pattern=Modello_del_formato_dei_nomi_dei_file
+PostgreSQL_database=Database_PostgreSQL
+DIN_1505=DIN_1505
+Wrong_Format=Formato_errato
+Path_to_gnuclient_or_emacsclient=Percorso_per_gnuclient_o_emacsclient
+Additional_parameters=Parametri_addizionali
+Encrypted_documents_are_not_supported=I_documenti_criptati_non_sono_gestiti
+Cite_selected_entries=Cita_le_voci_selezionate
+Cite_selected_entries_with_in-text_citation=Cita_le_voci_selezionate_con_citazione_inclusa_nel_testo
+Cite_special=Citazione_speciale
+Extra_information_(e.g._page_number)=Informazione_aggiuntiva_(es._numero_di_pagina)
+Manage_citations=Gestione_delle_citazioni
+Problem_modifying_citation=Problema_nella_modifica_della_citazione
+Citation=Citazione
+Context=Contesto
+Extra_information=Informazione_aggiuntiva
+Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=Impossibile_risolvere_la_voce_BibTeX_per_l'identificativo_di_citazione_'%0'.
+Styles=Stili
+Select_style=Seleziona_stile
+This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Lista_degli_stili_disponibili._Selezionare_quello_che_si_intende_utilizzare
+Journals=Riviste
+Cite=Cita
+Cite_in-text=Citazione_inclusa_nel_testo
+Insert_empty_citation=Inserisci_una_citazione_vuota
+Merge_citations=Accorpa_citazioni
+Manual_connect=Connessione_manuale
+Select_Writer_document=Selezionare_il_documento_Writer
+Sync_OO_bibliography=Sincronizza_la_bibliografia_OO
+OpenOffice=OpenOffice
+Select_which_open_Writer_document_to_work_on=Selezionare_il_documento_Writer_aperto_su_cui_lavorare
+Connected_to_document=Connesso_al_documento
+Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Inserire_una_citazione_senza_testo_(la_voce_comparir\u00e0_nella_lista_dei_riferimenti)
+Cite_selected_entries_with_extra_information=Cita_le_voci_selezionate_con_informazioni_aggiuntive
+Ensure_that_the_bibliography_is_up-to-date=Assicura_che_la_bibliografia_sia_aggiornata
+Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=Il_tuo_documento_OpenOffice_fa_riferimento_alla_chiave_BibTeX_'%0',_non_presente_nel_database_corrente.
+Unable_to_synchronize_bibliography=Impossiblile_sincronizzare_la_bibliografia
+Combine_pairs_of_citations_that_are_separated_by_spaces_only=Combina_le_coppie_di_citazioni_separate_solo_da_spazi
+Autodetection_failed=Autorilevamento_non_riuscito
+Connecting=Connessione_in_corso
+Please_wait...=Attendere...
+Unable_to_connect=Impossibile_connettersi
+Set_connection_parameters=Imposta_i_parametri_di_connessione
+Path_to_OpenOffice_directory=Percorso_per_la_cartella_OpenOffice
+Path_to_OpenOffice_executable=Percorso_per_il_file_eseguibile_OpenOffice
+Path_to_OpenOffice_library_dir=Percorso_per_la_cartella_della_libreria_OpenOffice
+Autodetect=Autorilevamento
+Connection_lost=Connessione_perduta
+The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Il_formato_del_paragrafo_\u00e8_controllato_dalle_propriet\u00e0_'ReferenceParagraphFormat'_o_'ReferenceHeaderParagraphFormat'_nel_file_di_stile.
+The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Il_formato_del_carattere_\u00e8_controllato_dalla_propriet\u00e0_della_citazione_'CitationCharacterFormat'_nel_file_di_stile.
+Automatically_sync_bibliography_when_inserting_citations=Sincronizza_automaticamente_la_bibliografia_all'inserimento_delle_citazioni
+Look_up_BibTeX_entries_in_the_active_tab_only=Ricerca_le_voci_BibTeX_solo_nella_scheda_attiva
+Look_up_BibTeX_entries_in_all_open_databases=Ricerca_le_voci_BibTeX_in_tutti_i_database_aperti
+Use_in-parenthesis_citation=Usa_citazione_tra_parentesi
+Use_in-text_citation=Usa_citazione_inclusa_nel_testo
+Autodetecting_paths...=Autorilevamento_dei_percorsi...
+Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=Impossibile_rilevare_l'installazione_OpenOffice._Impostare_manualmente_la_cartella_di_installazione.
+Could_not_find_OpenOffice_installation=Impossibile_trovare_l'installazione_OpenOffice
+Directories=Cartelle
+Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Trovati_pi\u00f9_di_un_file_eseguibile_OpenOffice._Selezionare_quello_al_quale_connettersi:
+Choose_OpenOffice_executable=Scegliere_file_eseguibile_OpenOffice
+Select_document=Selezionare_il_documento
+Edit_Group_Membership=Modifica_l'appartenenza_ai_gruppi
+PostgreSQL=PostgreSQL
+Highlight_Words=Evidenzia_le_parole
+JSTOR_import_cancelled=Inportazione_da_JSTOR_annullata
+HTML_list=Lista_HTML
+Click_group_to_toggle_membership_of_selected_entries=Cliccare_sul_gruppo_per_invertire_l'appartenenza_delle_voci_selezionate
+Use_EMACS_23_insertion_string=Usa_la_stringa_di_inserimento_EMACS_23
+Normalize_to_BibTeX_name_format=Normalizzare_con_il_formato_dei_nomi_BibTeX
+If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=Se_possiblile,_normalizzare_questa_lista_di_nomi_in_accordo_con_lo_standard_di_formattazione_dei_nomi_BibTeX
+Could_not_open_%0=Impossiblie_aprire_%0
+Unknown_import_format=Formato_di_importazione_sconosciuto
+Open_INSPIRE_entry=Apri_la_voce_INSPIRE
+An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=Si_\u00e8_verificato_un_errore_durante_il_recupero_dalla_fonte_INSPIRE_(%0):
+Error_while_fetching_from_Inspire\:_=Errore_nel_recupero_dei_dati_da_INSPIRE:
+Web_search=Ricerca_sul_Web
+Autocomplete_names=Autocompletamento_dei_nomi
+You_must_select_either_a_valid_style_file,_or_use_the_default_style.=Selezionare_un_file_di_stile_valido_oppure_utilizzare_lo_stile_predefinito
+
+Default_style=Stile_predefinito
+Choose_style_file_directly=Scegliere_la_cartella_dei_file_di_stile
+Choose_from_a_directory=Scegliere_da_una_cartella
+No_directory_defined_for_%0-files=Nessuna_cartella_impostata_per_i_file_%0
+Allow_file_links_relative_to_each_bib_file's_location=Consenti_il_collegamento_dei_file_relativo_alla_posizione_di_ciascun_file_BibTeX
+Style_selection=Selezione_dello_stile
+The_panel_below_shows_the_definition_of_the_default_style.=Il_pannello_sottostante_mostra_la_definizione_dello_stile_predefinito.
+If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=Per_utilizzarlo_come_modello_per_un_nuovo_stile,_\u00e8_possibile_copiare_il_contenuto_in_un_file_.jstyle_nuovo
+
+Default_style_(author-year_citations)=Stile_predefinito_(citazione_autore-anno)
+Default_style_(numerical_citations)=Stile_predefinito_(citazione_numerica)
+No_valid_style_file_defined=Nessun_file_di_stile_valido_definito
+Choose_pattern=Sceglire_un_modello
+Use_the_bib_file_location_as_primary_file_directory=Utilizza_la_posizione_del_file_BibTex_come_cartella_dei_file_principale
+Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=Impossibile_eseguire_il_programma_gnuclient/emacsclient._Assicurarsi_che_il_programma_gnuclient/emacsclient_sia_installato_e_disponibile_nel_PATH.
+Built-in_journal_list=Lista_di_riviste_interna
+OpenOffice/LibreOffice_connection=Connessione_a_OpenOffice/LibreOffice
+You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=\u00c8_possibile_aggiungere_altri_nomi_di_riviste_creando_una_lista_personale,<BR>oppure_creando_un_collegamento_a_liste_di_riviste_esterne.
+JabRef_includes_a_built-in_list_of_journal_abbreviations.=JabRef_include_una_lista_interna_di_abbreviazioni_di_nomi_di_riviste.
+You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=Selezionare_un_file_di_stile_valido_oppure_utilizzare_uno_degli_stili_predefiniti.
+You_must_select_either_a_valid_style_file,_or_use_a_default_style.=Selezionare_un_file_di_stile_valido_oppure_utilizzare_uno_stile_predefinito.
+Show=Mostra
+This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=Questo_\u00e8_un_semplice_dialogo_di_copia_e_incolla._Prima_carica_o_incolla_il_testo_nell'area_di_inserimento_di_testo.<BR>Quindi_\u00e8_possibile_selezionare_parti_del_testo_e_assegnarle_ai_campi_BibTeX.
+Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=La_libreria_Java_Bouncy_Castle_non_\u00e8_stata_trovata._\u00c8_necessario_scaricarla_ed_installarla._Per_ulteriori_informazioni_vedi_http://www.bouncycastle.org/.
+
+First_select_entries_to_clean_up.=Selezionare_le_voci_da_ripulire.
+Cleanup_entry=Ripulisci_voce
+Autogenerate_PDF_Names=Genera_automaticamente_i_nomi_dei_file_PDF
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=La_generazione_automatica_dei_nomi_dei_file_PDF_non_pu\u00f2_essere_annullata._Continuare?
+File_rename_failed_for=Rinominazione_dei_file_fallita_per
+You_have_toggled_the_BibLaTeX_mode.=Attivata_la_modalit\u00e0_BibLaTeX.
+Use_full_firstname_whenever_possible=Usa_nome_completo_quando_possibile
+Use_abbreviated_firstname_whenever_possible=Usa_nome_abbreviato_quando_possibile
+Use_abbreviated_and_full_firstname=Usa_nome_abbreviato_e_completo
+Autocompletion_options=Opzioni_di_autocompletamento
+Autocomplete_after_following_number_of_characters=Attiva_autocompletamento_dopo_il_seguente_numero_di_caratteri
+Name_format_used_for_autocompletion=Formato_dei_nomi_usato_per_l'autocompletamento
+Treatment_of_first_names=Gestione_dei_nomi
+No_icon_found_for_%0=Nessuna_icona_trovata_per_%0
+Cleanup_entries=Ripulisci_voci
+Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=Sposta_i_DOI_dai_campi_note_e_URL_al_campo_DOI_e_rimuovi_il_prefisso_'http'
+Format_content_of_month_field_to_#mon#=Formatta_il_contenuto_del_campo_'month'_nella_forma_'#mon#'
+Ensure_that_page_ranges_are_of_the_form_num1--num2=Assicura_che_gli_intervalli_di_pagine_siano_nella_forma_'num1--num2'
+Make_paths_of_linked_files_relative_(if_possible)=Rendi_relativi_i_percorsi_dei_file_collegati_(se_possibile)
+Rename_PDFs_to_given_file_name_format_pattern=Rinomina_i_file_PDF_secondo_il_modello_di_nome_dei_file
+Rename_only_PDFs_having_a_relative_path=Rinomina_solo_i_file_PDF_con_un_percorso_relativo
+What_would_you_like_to_clean_up?=Cosa_si_vuole_ripulire?
+Doing_a_cleanup_for_%0_entries...=Ripulitura_per_%0_voci...
+No_entry_needed_a_clean_up=Nessuna_voce_necessita_ripulitura
+One_entry_needed_a_clean_up=Una_voce_necessita_ripulitura
+%0_entries_needed_a_clean_up=%0_voci_necessitano_ripulitura
+Imported_=Importato
+Minimize_to_system_tray=Minimizza_nell'area_di_notifica
+
+This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=Questa_funzione_genera_un_nuovo_database_basato_sulle_voci_necessarie_in_un_documento_LaTeX_esistente.
+You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=\u00c8_necessario_selezionare_uno_dei_database_aperti_da_cui_scegliere_le_voci,_cos\u00ec_come_il_file_AUX_prodotto_da_LaTeX_nel_compilare_il_documento.
+Automatically_assign_new_entry_to_selected_groups=Assegna_automaticamente_la_nuova_voce_ai_gruppi_selezionati
+Error_importing_from_database=Errore_di_importazione_dal_database
+
+Incomplete_search_results=Risultati_della_ricerca_incompleti
+%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=Trovate_%0_voci,_ma_\u00e8_stato_possibile_risolvere_solo_%1_di_queste.
+
+Error_downloading_file_'%0'=Errore_nel_corso_del_download_del_file_'%0'
+Download_failed=Download_fallito
+
+%0_databases_will_be_imported=%0_database_saranno_importati
+Importing_cancelled=Importazione_annullata
+There_are_no_available_databases_to_be_imported=Non_sono_disponibili_database_da_importare
+Import_from_SQL_database=Importa_da_un_database_SQL
+Imported_%0_databases_successfully=Importati_con_successo_%0_database
+<_CREATE_NEW_DATABASE_>=<_CREA_NUOVO_DATABASE_>
+Remove_Selected=Rimuovi_la_selezione
+SQL_Database_Exporter=Esportazione_database_SQL
+Select_target_SQL_database\:=Seleziona_il_database_SQL_di_destinazione:
+SQL_Database_Importer=Importazione_database_SQL
+Please_select_which_JabRef_databases_do_you_want_to_import\:=Selezionare_il_database_JabRef_da_importare:
+
+Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=Impossibile_analizzare_l'albero_dei_gruppi._Salvando_il_database_BibTeX_i_gruppi_saranno_persi.
+Attach_file=Allega_file
+
+Setting_all_preferences_to_default_values.=Imposta_tutte_le_preferenze_ai_valori_predefiniti.
+Resetting_preference_key_'%0'=Reimposta_la_chiave_delle_preferenze_'%0'
+Unknown_preference_key_'%0'=Chiave_delle_preferenze_sconosciuta_'%0'
+Unable_to_clear_preferences.=Impossibile_reimpostatare_le_preferenze.
+
+Reset_preferences_(key1,key2,..._or_'all')=Reimposta_le_preferenze_(chiave1,chiave2,..._oppure_'all')
+Find_unlinked_files=Trovati_file_non_collegati
+Select_All=Seleziona_tutto
+Unselect_All=Deseleziona_tutto
+Expand_All=Espandi_tutto
+Collapse_All=Comprimi_tutto
+Select_Directory=Seleziona_cartella
+Choose_Directory=Scegli_cartella
+Use_the_selected_directory_to_start_with_the_search.=Usa_la_cartella_selezionata_per_iniziare_la_ricerca.
+Browse...=Sfoglia...
+Opens_the_file_browser.=Apre_il_dialogo_di_selezione_dei_file.
+Scan_directory=Analizza_la_cartella
+Searches_the_selected_directory_for_unlinked_files.=Ricerca_nella_cartella_selezionata_file_non_collegati.
+Starts_the_import_of_bibtex_entries.=Inizia_l'importazione_delle_voci_bibtex
+Leave_this_dialog.=Abbandona_questo_dialogo.
+Create_directory_based_keywords=Crea_parole_chiave_in_base_al_nome_delle_cartelle
+Creates_keywords_in_created_entrys_with_directory_pathnames=Crea_parole_chiave_nelle_voci_generate_in_base_al_percorso_delle_cartelle
+Select_a_directory_where_the_search_shall_start.=Seleziona_una_cartella_dalla_quale_iniziare_la_ricerca.
+Select_file_type\:=Seleziona_il_tipo_di_file:
+These_files_are_not_linked_in_the_active_database.=Questi_file_non_sono_collegati_nel_database_attivo.
+Entry_type_to_be_created\:=Tipo_di_voci_da_creare:
+Searching_file_system...=Ricerca_nel_filesystem...
+Importing_into_Database...=Importazione_nel_database
+Select_directory=Seleziona_cartella
+Select_files=Seleziona_file
+Bibtex_entry_creation=Creazione_della_voce_BibTex
+<No_selection>=<Nessuna_selezione>
+Push_selection_to_TeXstudio=Invia_la_selezione_a_TeXstudio
+Path_to_TeXstudio=Invia_a_TeXstudio
+Program_'%0'_not_found=Programma_'%0'_non_trovato
+Pushed_citations_to_TeXstudio=Inviate_le_citazioni_a_TeXstudio
+Unable_to_connect_to_freecite_online_service.=Impossibile_connettersi_al_servizio_online_FreeCite.
+Parse_with_FreeCite=Analizza_con_FreeCite
+Insert_selected_citations_into_TeXstudio=Inserisci_le_citazioni_selezionate_in_TeXstudio
+The_current_BibTeX_key_will_be_overwritten._Continue?=La_chiave_BibTeX_corrente_sar\u00e0_sovrascritta._Continuare?
+Overwrite_key=Sovrascrivi_chiave
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Le_chiavi_esistenti_non_vengono_sovrascritte._Per_cambiare_questa_impostazione,_aprire_Opzioni_->_Preferenze_->_Generatore_di_chiavi_BibTeX
+How_would_you_like_to_link_to_'%0'?=Come_vuoi_collegare_a_'%0'?
+Bibtex_key_patterns=Modelli_delle_chiavi_BibTeX
+Changed_special_field_settings=Cambiate_le_impostazioni_dei_campi_speciali
+Clear_priority=Azzera_le_priorit\u00e0
+# not sure how to translate 'rank': voto, punteggio, valutazione, grado, rango?
+Clear_rank=Azzera_la_valutazione
+Compact_rank=Compatta_la_valutazione
+Convert_1st,_2nd,_..._to_real_superscripts=Converti_1st,_2nd,_..._in_apici
+Dropped_comment_from_database=Cancellato_il_commento_dal_database
+Enable_PDF_preview=Abilita_anteprima_PDF
+Enable_special_fields=Abilita_campi_speciali
+Five_stars=Cinque_stelle
+Four_stars=Quattro_stelle
+Help_on_special_fields=Aiuto_sui_campi_speciali
+Keywords_of_selected_entries=Parole_chiave_delle_voci_selezionate
+Manage_content_selectors=Gestione_dei_selettori_dei_contenuti
+Manage_keywords=Gestione_delle_parole_chiave
+Marked_entries'_quality_as_good=Qualit\u00e0_delle_voci_contrassegnata_come_'buona'
+Marked_entries_as_relevant=Voci_contrassegnate_come_'attinenti'
+No_priority_information=Nessuna_informazione_di_priorit\u00e0
+No_rank_information=Nessuna_informazione_sulla_valutazione
+One_star=Una_stella
+Priority=Priorit\u00e0
+Priority_high=Priorit\u00e0_alta
+Priority_low=Priorit\u00e0_bassa
+Priority_medium=Priorit\u00e0_media
+Quality=Qualit\u00e0
+Rank=Valutazione
+Relevance=Attinenza
+Set_priority=Assegna_priorit\u00e0
+Set_priority_to_high=Assegna_priorit\u00e0_alta
+Set_priority_to_low=Assegna_priorit\u00e0_bassa
+Set_priority_to_medium=Assegna_priorit\u00e0_media
+Set_rank_to_five_stars=Assegna_valutazione_di_cinque_stelle
+Set_rank_to_four_stars=Assegna_valutazione_di_quattro_stelle
+Set_rank_to_one_star=Assegna_valutazione_di_una_stella
+Set_rank_to_three_stars=Assegna_valutazione_di_tre_stelle
+Set_rank_to_two_stars=Assegna_valutazione_di_due_stelle
+Show_one_letter_heading_for_icon_columns=Mostra_intestazione_ad_una_lettera_per_le_colonne_di_icone
+Show_priority=Mostra_priorit\u00e0
+Show_quality=Mostra_qualit\u00e0
+Show_rank=Mostra_valutazione
+Show_relevance=Mostra_attinenza
+Synchronize_with_keywords=Sincronizza_con_le_parole_chiave
+Synchronized_special_fields_based_on_keywords=Sincronizzati_i_campi_speciali_in_base_alle_parole_chiave.
+Three_stars=Tre_stelle
+# 'toggle' translated as in German translation
+Toggle_relevance=Mostra/Nascondi_attinenza
+Toogle_quality_assured=Mostra/Nascondi_qualit\u00e0
+Two_stars=Due_stelle
+Update_keywords=Aggiorna_parole_chiave
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=Scrivi_i_valori_dei_campi_speciali_come_campi_separati_nelle_voci_BibTeX
+You_have_changed_settings_for_special_fields.=Sono_state_modificate_le_impostazioni_per_i_campi_speciali.
+no_preview_available=Nessuna_anteprima_disponibile
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=Trovate_%0_voci._Per_ridurre_il_carico_sul_server_ne_saranno_scaricate_solo_%1.
+A_string_with_that_label_already_exists=Una_stringa_con_questa_etichetta_esiste_gi\u00e0.
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=Perduta_la_connessione_con_OpenOffice._Assicurarsi_che_OpenOffice_sia_in_esecuzione_e_provare_a_riconnettersi.
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Correggi_la_voce_e_riapri_l'editor_per_mostrare/modificare_il_codice_sorgente.
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=Impossibile_la_connessione_a_un_processo_gnuserv_in_esecuzione._Accertarsi_che_Emacs_o_XEmacs_siano_in_esecuzione,<BR>e_che_il_server_sia_stato_avviato_(con_il_comando_'server-start'/'gnuserv-start').
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=Impossibile_la_connessione_ad_OpenOffice.\nAssicurarsi_che_OpenOffice_sia_installato_con_supporto_per_Java.\nSe_si_effettua_la_connessione_manualmente_verificare_i_percorsi_al_programma_e_alla_libreria.\n\nMessaggio_di_errore:_
+Created_group_"%0".=Creato_il_gruppo_"%0".
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Il_file_\u00e8_stato_aggiornato_esternamente._Sicuro_di_voler_salvare?
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=Se_la_voce_incollata_o_importata_ha_il_campo_gi\u00e0_impostato,_sovrascrivere.
+Import_Metadata_From_PDF=Importa_metadati_dal_file_PDF
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Non_connesso_ad_alcun_documento_Writer._Assicurarsi_che_un_documento_sia_aperto_e_connetterlo_con_il_bottone_"Selezionare_il_documento_Writer".
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=Questa_\u00e8_una_prima_versione_beta._Non_utilizzarla_senza_aver_fatto_un_backup_dei_file!
+Removed_all_subgroups_of_group_"%0".=Eliminati_tutti_i_sottogruppi_del_gruppo_"%0".
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=Per_disabilitare_la_modalit\u00e0_chiavetta_di_memoria_rinominare_o_cancellare_il_file_"jabref.xml"_che_si_trova_nella_cartella_di_installazione_di_JabRef.
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Impossibile_connettersi._Una_possibile_ragione_\u00e8_il_fatto_che_JabRef_e_OpenOffice/LibreOffice_non_vengono_eseguiti_nella_stessa_modalit\u00e0_a_32_o_64_bit.
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Impossibile_determinare_nome_e_versione_del_plugin._Potrebbe_non_essere_un_plugin_di_JabRef_valido.
+Use_the_following_delimiter_character(s)\:=Usa_i_seguenti_caratteri_di_delimitazione:
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=Quando_si_scaricano_i_file_o_si_spostano_i_file_collegati,_preferire_la_posizione_del_file_BibTeX_alla_cartella_impostata_sopra.
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Il_file_di_stile_specifica_il_formato_di_carattere_"%0"_che_non_\u00e8_tuttavia_definito_nel_documento_OpenOffice_corrente.
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Il_file_di_stile_specifica_il_formato_di_paragrafo_"%0"_che_non_\u00e8_tuttavia_definito_nel_documento_OpenOffice_corrente.
+
+Error_fetching_from_Google_Scholar=Errore_nel_recupero_dei_dati_da_Google_Scholar
+Run_HTML_converter_on_title=Eseguire_la_conversione_HTML_sul_titolo
+Searching...=Ricerca_in_corso...
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=Sono_state_selezionate_pi\u00f9_di_%0_voci_da_scaricare._Alcuni_siti_potrebbero_bloccare_la_connessione_se_si_eseguono_scaricamenti_troppo_numerosi_e_rapidi._Continuare?
+Confirm_selection=Conferma_la_selezione
+Unknown_DOI\:_'%0'.=DOI sconosciuto:
+Get_BibTeX_entry_from_DOI=Recupera_la_voce_BibTeX_dal_DOI
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Conversione_di_apici_e_pedici_in_equazioni_piuttosto_che_in_testo.
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Aggiungere_{}_alle_parole_del_titolo_specificate_per_mantenere_la_corretta_capitalizzazione_nella_ricerca.
+Import_conversions=Importare_le_conversioni
+Run_filter_on_title_keeping_the_case_of_selected_words=Eseguire_il_filtro_sul_titolo_preservando_la_capitalizzazione_delle_parole_selezionate
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=Errori_intermittenti_sul_server_IEEE_Xplore._Riprovare_pi\u00f9_tardi.
+Please_enter_a_search_string=Inserire_una_stringa_di_ricerca
+Please_open_or_start_a_new_database_before_searching=Aprire_o_creare_un_nuovo_database_prima_di_effettuare_la_ricerca
+An_Error_occurred_while_fetching_from_ADS_(%0)\:=Si_\u00e8_verificato_un_errore_durante_il_recupero_da_ADS_(%0):
+Error_while_fetching_from_ADS=Errore_nel_recupero_dei_dati_da_ADS
+Error_while_fetching_from_OAI2=Errore_nel_recupero_dei_dati_da_OAI2
+An_Error_occurred_while_parsing_abstract=Si_\u00e8_verificato_un_errore_durante_l'elaborazione_del_riassunto
+Unknown_DiVA_entry\:_'%0'.=Voce_DiVA_sconosciuta:_'%0'
+Get_BibTeX_entry_from_DiVA=Recupera_la_voce_BibTeX_da_DiVA
+Log=Registro
+Remove_unneccessary_$,_{,_and_}=
diff --git a/src/resource/JabRef_ja.properties b/src/resource/JabRef_ja.properties
index 11a8c9c..5a55ef4 100644
--- a/src/resource/JabRef_ja.properties
+++ b/src/resource/JabRef_ja.properties
@@ -1,2435 +1,2460 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-
-%0_contains_the_Regular_Expression_<b>%1</b>=%0\u306b\u306f\u3001\u6b63\u898f\u8868\u73fe<b>%1</b>\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059
-
-%0_contains_the_term_<b>%1</b>=%0\u306b\u306f\u3001\u7528\u8a9e<b>%1</b>\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059
-
-%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0\u306b\u306f\u3001\u6b63\u898f\u8868\u73fe<b>%1</b>\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093
-
-%0_doesn't_contain_the_term_<b>%1</b>=%0\u306b\u306f\u3001\u7528\u8a9e<b>%1</b>\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093
-
-%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0\u306f\u6b63\u898f\u8868\u73fe<b>%1</b>\u3068\u4e00\u81f4\u3057\u307e\u305b\u3093
-
-%0_doesn't_match_the_term_<b>%1</b>=%0\u306f\u7528\u8a9e<b>%1</b>\u306b\u4e00\u81f4\u3057\u307e\u305b\u3093
-
-%0_export_successful=%0\u500b\u306e\u66f8\u304d\u51fa\u3057\u306b\u6210\u529f\u3057\u307e\u3057\u305f
-
-%0_field_set=%0\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a\u3057\u307e\u3057\u305f
-
-%0_matches_the_Regular_Expression_<b>%1</b>=%0\u306f\u6b63\u898f\u8868\u73fe<b>%1</b>\u306b\u4e00\u81f4\u3057\u307e\u3059
-
-%0_matches_the_term_<b>%1</b>=%0\u306f\u9805\u76ee<b>%1</b>\u306b\u4e00\u81f4\u3057\u307e\u3059
-
-<field_name>=<\u30d5\u30a3\u30fc\u30eb\u30c9\u540d>
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>\u9805\u76ee\u300c%1\u300d\u304b\u3089\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u308b\u30d5\u30a1\u30a4\u30eb<BR>\u300c%0\u300d\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f</HTML>
-
-<no_field>=<no_field>
-
-<select>=<\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044>
-
-<select_word>=<\u5358\u8a9e\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044>
-A_string_with_this_label_already_exists=\u3053\u306e\u30e9\u30d9\u30eb\u306e\u6587\u5b57\u5217\u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059
-Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=\u9078\u629e\u9805\u76ee\u306e\u5b66\u8853\u8a8c\u540d\u3092\u77ed\u7e2e\u5f62\u306b\u3057\u307e\u3059\uff08ISO\u5f0f\u77ed\u7e2e\u5f62\uff09
-Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=\u9078\u629e\u9805\u76ee\u306e\u5b66\u8853\u8a8c\u540d\u3092\u77ed\u7e2e\u5f62\u306b\u3057\u307e\u3059\uff08MEDLINE\u5f0f\u77ed\u7e2e\u5f62\uff09
-
-Abbreviate_names=\u540d\u524d\u3092\u77ed\u7e2e\u5f62\u306b
-Abbreviated_%0_journal_names.=%0\u500b\u306e\u8a8c\u540d\u3092\u7565\u8a9e\u5316\u3057\u307e\u3057\u305f\u3002
-
-Abbreviation=\u77ed\u7e2e\u5f62
-
-About_JabRef=JabRef\u306b\u3064\u3044\u3066
-
-Abstract=\u6982\u8981
-
-Accept=\u53d7\u3051\u4ed8\u3051\u308b
-
-Accept_change=\u5909\u66f4\u3092\u53d7\u3051\u4ed8\u3051\u308b
-
-Action=\u30a2\u30af\u30b7\u30e7\u30f3
-
-Add=\u8ffd\u52a0
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=\uff08\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u305f\uff09\u30ab\u30b9\u30bf\u30e0ImportFormat\u30af\u30e9\u30b9\u3092\u30af\u30e9\u30b9\u30d1\u30b9\u304b\u3089\u8ffd\u52a0\u3057\u307e\u3059\u3002\n\u3053\u306e\u30d1\u30b9\u306f\u3001JabRef\u306e\u30af\u30e9\u30b9\u30d1\u30b9\u306b\u3042\u308b\u3068\u306f\u9650\u308a\u307e\u305b\u3093\u3002
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=\uff08\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u305f\uff09\u30ab\u30b9\u30bf\u30e0ImportFormat\u30af\u30e9\u30b9\u3092Zip\u66f8\u5eab\u304b\u3089\u8ffd\u52a0\u3057\u307e\u3059\u3002\n\u3053\u306eZip\u66f8\u5eab\u306f\u3001JabRef\u306e\u30af\u30e9\u30b9\u30d1\u30b9\u306b\u3042\u308b\u3068\u306f\u9650\u308a\u307e\u305b\u3093\u3002
-
-add_entries_to_group=\u9805\u76ee\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0
-
-Add_entry_selection_to_this_group=\u9078\u629e\u9805\u76ee\u3092\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0
-
-Add_from_folder=\u30d5\u30a9\u30eb\u30c0\u304b\u3089\u8ffd\u52a0
-
-Add_from_jar=jar\u304b\u3089\u8ffd\u52a0
-
-add_group=\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0
-
-Add_Group=\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0
-
-Add_new=\u65b0\u898f\u8ffd\u52a0
-
-Add_Subgroup=\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0
-
-Add_to_group=\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0
-
-Added_group_"%0".=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002
-
-Added_new=\u65b0\u898f\u306b\u8ffd\u52a0\u3057\u307e\u3057\u305f:
-
-Added_string=\u6587\u5b57\u5217\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f:
-
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=\u3055\u3089\u306b\u3001<b>%0</b>\u30d5\u30a3\u30fc\u30eb\u30c9\u306b<b [...]
-
-Advanced=\u8a73\u7d30\u8a2d\u5b9a
-All_custom_file_types_will_be_lost._Proceed?=\u500b\u4eba\u8a2d\u5b9a\u306e\u30d5\u30a1\u30a4\u30eb\u578b\u306f\u3059\u3079\u3066\u5931\u308f\u308c\u307e\u3059\u3002\u7d9a\u3051\u307e\u3059\u304b\uff1f
-
-All_Entries=\u5168\u9805\u76ee
-
-All_entries=\u5168\u9805\u76ee
-All_entries_of_this_type_will_be_declared_typeless._Continue?=\u3053\u306e\u578b\u306e\u9805\u76ee\u306f\u3059\u3079\u3066\u578b\u306a\u3057\u3068\u5ba3\u8a00\u3055\u308c\u307e\u3059\u3002\u7d9a\u3051\u307e\u3059\u304b\uff1f
-
-All_fields=\u5168\u30d5\u30a3\u30fc\u30eb\u30c9
-
-All_subgroups_(recursively)=\u5168\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\uff08\u518d\u5e30\u7684\u306b\uff09
-
-Allow_editing_in_table_cells=\u8868\u30bb\u30eb\u4e2d\u3067\u306e\u7de8\u96c6\u3092\u8a31\u53ef\u3059\u308b
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=OAI2\u30bd\u30fc\u30b9\u304b\u3089\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f_(%0):
-An_Exception_ocurred_while_accessing_'%0'=\u300c%0\u300d\u306b\u30a2\u30af\u30bb\u30b9\u4e2d\u306b\u4f8b\u5916\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f:
-An_SAXException_ocurred_while_parsing_'%0'\:=\u300c%0\u300d\u3092\u89e3\u6790\u4e2d\u306bSAX\u4f8b\u5916\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f:
-
-and=\u304a\u3088\u3073
-and_inside_the_JabRef-jar\:=\u304a\u3088\u3073JabRef-jar\u5185\u90e8:
-
-and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=\u307e\u305f\u3001\u6b21\u56deJabRef\u3092\u8d77\u52d5\u3057\u305f\u3068\u304d\u306b\u3001\u304a\u4f7f\u3044\u306e\u30af\u30e9\u30b9\u30d1\u30b9\u4e2d\u3067\u30af\u30e9\u30b9\u304c\u5229\u7528\u53ef\u80fd\u306b\u306a\u3063\u3066\u3044\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
-
-any_field_that_matches_the_regular_expression_<b>%0</b>=\u6b63\u898f\u8868\u73fe<b>%0</b>\u306b\u4e00\u81f4\u3059\u308b\u30d5\u30a3\u30fc\u30eb\u30c9\u3059\u3079\u3066
-
-Appearance=\u5916\u89b3
-
-Append=\u8ffd\u52a0
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=BibTeX\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u3001\u73fe\u5728\u8868\u793a\u3057\u3066\u3044\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5185\u5bb9\u3092\u8ffd\u52a0\u3059\u308b
-
-Append_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u8ffd\u52a0
-
-append_the_selected_text_to_bibtex_key=\u9078\u629e\u3057\u305f\u30c6\u30ad\u30b9\u30c8\u3092bibtex\u30ad\u30fc\u306b\u8ffd\u52a0
-Application=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3
-
-Apply=\u9069\u7528
-
-Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=\u5f15\u6570\u306f\u5b9f\u884c\u4e2d\u306eJabRef\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u6e21\u3055\u308c\u307e\u3057\u305f\u3002\u7d42\u4e86\u3057\u307e\u3059\u3002
-
-Assign_entry_selection_exclusively_to_this_group=\u9078\u629e\u9805\u76ee\u3092\u6392\u4ed6\u7684\u306b\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u5272\u308a\u5f53\u3066\u307e\u3059
-
-Assign_new_file=\u65b0\u898f\u30d5\u30a1\u30a4\u30eb\u3092\u5272\u308a\u5f53\u3066
-
-Assign_the_original_group's_entries_to_this_group?=\u5143\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u9805\u76ee\u3092\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u5272\u308a\u5f53\u3066\u307e\u3059\u304b\uff1f
-
-Assigned_%0_entries_to_group_"%1".=%0\u9805\u76ee\u3092\u30b0\u30eb\u30fc\u30d7\u300c%1\u300d\u306b\u5272\u308a\u5f53\u3066\u307e\u3057\u305f\u3002
-
-Assigned_1_entry_to_group_"%0".=1\u9805\u76ee\u3092\u30b0\u30eb\u30fc\u30d7\u300c%1\u300d\u306b\u5272\u308a\u5f53\u3066\u307e\u3057\u305f\u3002
-At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=\u5c11\u306a\u304f\u3068\u3082\u3001\u30d7\u30e9\u30b0\u30a4\u30f3\u300cnet.sf.jabref.core\u300d\u304c\u305d\u3053\u306b\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
-
-Attach_%0_file=%0\u30d5\u30a1\u30a4\u30eb\u3092\u6dfb\u4ed8
-
-Attach_URL=URL\u3092\u6dfb\u4ed8
-
-Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=\u3053\u308c\u306f\u3001\u4f7f\u7528\u4e2d\u306e\u9805\u76ee\u306e%0\u30ea\u30f3\u30af\u3092\u81ea\u52d5\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u81ea\u52d5\u8a2d\u5b9a\u306f\u3001%0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306a\u3044\u3057\u4e0b\u5c64\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e<BR>%0\u30d5\u30a1\u30a4\u30 [...]
-Attempting_SQL_export...=SQL\u3078\u306e\u66f8\u304d\u51fa\u3057\u3092\u8a66\u307f\u3066\u3044\u307e\u3059...
-
-Auto=\u81ea\u52d5
-
-Autodetect_format=\u66f8\u5f0f\u3092\u81ea\u52d5\u691c\u51fa
-
-Autogenerate_BibTeX_key=BibTeX\u30ad\u30fc\u3092\u81ea\u52d5\u751f\u6210
-Autogenerate_BibTeX_keys=BibTeX\u30ad\u30fc\u3092\u81ea\u52d5\u751f\u6210
-
-Autogenerate_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u81ea\u52d5\u751f\u6210
-
-autogenerate_keys=\u30ad\u30fc\u3092\u81ea\u52d5\u751f\u6210
-Autolink_files_with_names_starting_with_the_BibTeX_key=BibTeX\u30ad\u30fc\u3067\u59cb\u307e\u308b\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u6301\u3064\u30d5\u30a1\u30a4\u30eb\u3092\u81ea\u52d5\u30ea\u30f3\u30af
-
-Autolink_only_files_that_match_the_BibTeX_key=BibTeX\u30ad\u30fc\u306b\u4e00\u81f4\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u3092\u81ea\u52d5\u30ea\u30f3\u30af
-
-Automatically_create_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u81ea\u52d5\u751f\u6210
-
-Automatically_create_groups_for_database.=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7528\u306e\u30b0\u30eb\u30fc\u30d7\u3092\u81ea\u52d5\u751f\u6210\u3059\u308b\u3002
-
-Automatically_created_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u81ea\u52d5\u751f\u6210\u3057\u307e\u3057\u305f
-
-Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u542b\u307e\u306a\u3044\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5207\u308a\u66ff\u3048\u305f\u969b\u3001\u30b0\u30eb\u30fc\u30d7\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u81ea\u52d5\u7684\u306b\u975e\u8868\u793a
-
-Automatically_remove_exact_duplicates=\u5b8c\u5168\u306a\u91cd\u8907\u3092\u81ea\u52d5\u7684\u306b\u524a\u9664\u3059\u308b
-
-Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u542b\u3080\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5207\u308a\u66ff\u3048\u305f\u969b\u3001\u30b0\u30eb\u30fc\u30d7\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u81ea\u52d5\u7684\u306b\u8868\u793a
-
-Autoset=\u81ea\u52d5\u8a2d\u5b9a
-
-Autoset_%0_field=%0\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u81ea\u52d5\u8a2d\u5b9a
-
-Autoset_%0_links._Allow_overwriting_existing_links.=%0\u30ea\u30f3\u30af\u3092\u81ea\u52d5\u8a2d\u5b9a\u3059\u308b\u3002\u65e2\u5b58\u30ea\u30f3\u30af\u306e\u4e0a\u66f8\u304d\u3092\u8a31\u53ef\u3059\u308b\u3002
-
-Autoset_%0_links._Do_not_overwrite_existing_links.=%0\u30ea\u30f3\u30af\u3092\u81ea\u52d5\u8a2d\u5b9a\u3059\u308b\u3002\u65e2\u5b58\u30ea\u30f3\u30af\u306f\u4e0a\u66f8\u304d\u3057\u306a\u3044\u3002
-Autoset_external_links=\u5916\u90e8\u30ea\u30f3\u30af\u306e\u81ea\u52d5\u8a2d\u5b9a
-Autosetting_links=\u30ea\u30f3\u30af\u3092\u81ea\u52d5\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059
-
-AUX_file_import=AUX\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f
-
-Available_export_formats=\u4f7f\u7528\u3067\u304d\u308b\u66f8\u304d\u51fa\u3057\u66f8\u5f0f
-
-Available_fields=\u4f7f\u7528\u3067\u304d\u308bBibTeX\u30d5\u30a3\u30fc\u30eb\u30c9
-
-Available_import_formats=\u4f7f\u7528\u3067\u304d\u308b\u8aad\u307f\u8fbc\u307f\u66f8\u5f0f
-
-Background_color_for_optional_fields=\u975e\u5fc5\u9808\u9805\u76ee\u306e\u80cc\u666f\u8272
-
-Background_color_for_required_fields=\u5fc5\u9808\u9805\u76ee\u306e\u80cc\u666f\u8272
-
-Backup_old_file_when_saving=\u4fdd\u5b58\u6642\u306b\u65e7\u30d5\u30a1\u30a4\u30eb\u3092\u30d0\u30c3\u30af\u30a2\u30c3\u30d7
-Beta_version=\u30d9\u30fc\u30bf\u7248
-
-Bibkey_to_filename_conversion=Bibkey\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u540d\u3078\u306e\u5909\u63db
-
-BibTeX_key=BibTeX\u30ad\u30fc
-
-BibTeX_key_is_unique.=BibTeX\u30ad\u30fc\u306f\u4e00\u610f\u3067\u3059\u3002
-
-BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX\u30ad\u30fc\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306b\u4ed8\u3051\u308b\u540d\u79f0\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-BibTeX_source=BibTeX\u30bd\u30fc\u30b9
-
-BibTeXML=BibTeXML
-
-Binding=Binding
-Broken_link=\u58ca\u308c\u305f\u30ea\u30f3\u30af
-
-Browse=\u4e00\u89a7
-
-by=\u7f6e\u63db\u6587\u5b57\u5217
-
-Calling_external_viewer...=\u5916\u90e8\u30d3\u30e5\u30fc\u30a2\u30fc\u3092\u547c\u3073\u51fa\u3057\u3066\u3044\u307e\u3059...
-
-Cancel=\u53d6\u6d88
-
-Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=\u30ad\u30fc\u3092\u751f\u6210\u3057\u306a\u3051\u308c\u3070\u9805\u76ee\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u3053\u3067\u30ad\u30fc\u3092\u751f\u6210\u3057\u307e\u3059\u304b\uff1f
-
-Cannot_merge_this_change=\u3053\u306e\u5909\u66f4\u3092\u7d71\u5408\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
-
-Cannot_move_group_"%0"_down.=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u4e0b\u306b\u52d5\u304b\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-
-Cannot_move_group_"%0"_left.=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u5de6\u306b\u52d5\u304b\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-
-Cannot_move_group_"%0"_right.=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u53f3\u306b\u52d5\u304b\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-
-Cannot_move_group_"%0"_up.=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u4e0a\u306b\u52d5\u304b\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-
-case_insensitive=\u5927\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3057\u306a\u3044
-
-case_sensitive=\u5927\u5c0f\u6587\u5b57\u3092\u533a\u5225
-
-Case_sensitive=\u5927\u5c0f\u6587\u5b57\u3092\u533a\u5225
-
-change_assignment_of_entries=\u9805\u76ee\u306e\u5272\u308a\u5f53\u3066\u3092\u5909\u66f4
-
-Change_case=\u5927\u5c0f\u6587\u5b57\u3092\u5207\u308a\u66ff\u3048
-
-Change_entry_type=\u9805\u76ee\u578b\u3092\u5909\u66f4
-Change_file_type=\u30d5\u30a1\u30a4\u30eb\u578b\u3092\u5909\u66f4
-
-change_key=\u30ad\u30fc\u3092\u5909\u66f4
-
-Change_of_Grouping_Method=\u30b0\u30eb\u30fc\u30d7\u6cd5\u3092\u5909\u66f4
-
-change_preamble=\u30d7\u30ea\u30a2\u30f3\u30d6\u30eb\u3092\u5909\u66f4
-
-change_string_content=\u6587\u5b57\u5217\u306e\u5185\u5bb9\u3092\u5909\u66f4
-
-change_string_name=\u6587\u5b57\u5217\u540d\u3092\u5909\u66f4
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=\u65b0\u3057\u3044\u6a5f\u80fd\u3092\u7528\u3044\u308b\u305f\u3081\u306b\u3001\u8868\u5217\u3068\u6c4e\u7528\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u8a2d\u5b9a\u3092\u5909\u66f4
-
-change_type=\u578b\u3092\u5909\u66f4
-
-changed_=\u4ee5\u4e0b\u3092\u5909\u66f4\u3057\u307e\u3057\u305f:_
-
-Changed_font_settings=\u30d5\u30a9\u30f3\u30c8\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u307e\u3057\u305f
-
-Changed_language_settings=\u8a00\u8a9e\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u307e\u3057\u305f
-
-Changed_look_and_feel_settings=\u30eb\u30c3\u30af\u30a2\u30f3\u30c9\u30d5\u30a3\u30fc\u30eb\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u307e\u3057\u305f
-
-Changed_preamble=\u30d7\u30ea\u30a2\u30f3\u30d6\u30eb\u3092\u5909\u66f4\u3057\u307e\u3057\u305f
-
-Changed_type_to=\u4ee5\u4e0b\u306e\u578b\u306b\u5909\u66f4\u3057\u307e\u3057\u305f:
-
-Characters_to_ignore=\u7121\u8996\u3059\u308b\u6587\u5b57
-
-Check_existing_%0_links=\u65e2\u5b58\u306e%0\u30ea\u30f3\u30af\u3092\u78ba\u8a8d
-
-Check_links=\u30ea\u30f3\u30af\u3092\u78ba\u8a8d
-
-Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308bURL\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65e2\u5b9a\u5024\u306f\u3001JabRef\u958b\u767a\u8005\u304c\u63d0\u4f9b\u3059\u308b\u30ea\u30b9\u30c8\u3092\u6307\u3057\u3066\u3044\u307e\u3059\u3002
-Cite_command=Cite\u30b3\u30de\u30f3\u30c9
-
-Class_name=\u30af\u30e9\u30b9\u540d
-
-Clear=\u6d88\u53bb
-
-clear_all_groups=\u5168\u30b0\u30eb\u30fc\u30d7\u3092\u6d88\u53bb
-
-Clear_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u6d88\u53bb
-Clear_fields=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u6d88\u53bb
-
-Clear_highlight=\u7740\u8272\u3092\u89e3\u9664
-
-Close=\u9589\u3058\u308b
-
-Close_dialog=\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u9589\u3058\u308b
-
-Close_the_current_database=\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u9589\u3058\u308b
-
-Close_the_help_window=\u30d8\u30eb\u30d7\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u308b
-
-Close_window=\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u308b
-
-Closed_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u9589\u3058\u307e\u3057\u305f
-
-Collapse_subtree=\u4e0b\u5c64\u30c4\u30ea\u30fc\u3092\u9589\u3058\u308b
-
-Color_codes_for_required_and_optional_fields=\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9\u3068\u975e\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u30b3\u30fc\u30c9\u306b\u7740\u8272
-
-Color_for_marking_incomplete_entries=\u4e0d\u5b8c\u5168\u306a\u9805\u76ee\u3092\u30de\u30fc\u30af\u3059\u308b\u306e\u306b\u4f7f\u7528\u3059\u308b\u8272
-
-Column_width=\u5217\u5e45
-
-Command_line_id=\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3ID
-
-Complete_record=\u30ec\u30b3\u30fc\u30c9\u3092\u5b8c\u6210\u3059\u308b
-Connect=\u63a5\u7d9a
-Connect_to_SQL_database=SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a
-Connect_to_SQL_Database=SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a
-Connection_to_IEEEXplore_failed=IEEEXPlore\u3078\u306e\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f
-
-Contained_in=\u6240\u5728
-
-Content=\u5185\u5bb9
-
-Copied=\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f:
-
-Copied_cell_contents=\u30bb\u30eb\u306e\u5185\u5bb9\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f
-
-Copied_key=\u30ad\u30fc\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f
-
-Copied_keys=\u30ad\u30fc\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f
-
-Copy=\u30b3\u30d4\u30fc
-
-Copy_BibTeX_key=BibTeX\u30ad\u30fc\u3092\u30b3\u30d4\u30fc
-Copy_file_to_file_directory.=\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002
-Copy_files_to_file_directory.=\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002
-
-Copy_to_clipboard=\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002
-
-Could_not_call_executable=\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u3092\u547c\u3073\u51fa\u305b\u307e\u305b\u3093\u3067\u3057\u305f
-
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=\u5b9f\u884c\u4e2d\u306egnuserv\u30d7\u30ed\u30bb\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002Emacs\u3042\u308b\u3044\u306fXEmacs\u304c\u5b9f\u884c\u4e2d\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3001<BR>\uff08\u300cgnuserv-start\u300d\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u [...]
-
-Could_not_connect_to_host_=\u4ee5\u4e0b\u306e\u30db\u30b9\u30c8\u306b\u63a5\u7d9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:_
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Vim\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002Vim\u304c\u6b63\u3057\u3044\u30b5\u30fc\u30d0\u30fc\u540d\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-Could_not_export_file=\u30d5\u30a1\u30a4\u30eb\u3092\u66f8\u304d\u51fa\u305b\u307e\u305b\u3093\u3067\u3057\u305f
-
-Could_not_export_preferences=\u8a2d\u5b9a\u3092\u66f8\u304d\u51fa\u305b\u307e\u305b\u3093\u3067\u3057\u305f
-
-Could_not_find_a_suitable_import_format.=\u9069\u5207\u306a\u8aad\u307f\u8fbc\u307f\u66f8\u5f0f\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-Could_not_find_directory_for_%0-files\:_%1=%0\u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:_%1
-Could_not_find_image_file=\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f
-
-Could_not_find_layout_file=\u30ec\u30a4\u30a2\u30a6\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f
-
-Could_not_import_preferences=\u8a2d\u5b9a\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f
-
-Could_not_instantiate_%0=%0\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
-Could_not_instantiate_%0_%1=%0_%1\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
-
-Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=%0\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u6b63\u3057\u3044\u30d1\u30c3\u30b1\u30fc\u30b8\u30d1\u30b9\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u304b\uff1f
-Could_not_open_link=\u30ea\u30f3\u30af\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f
-
-Could_not_parse_number_of_hits=\u30d2\u30c3\u30c8\u6570\u3092\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
-Could_not_print_preview=\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u5370\u5237\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
-Could_not_run_the_'vim'_program.=\u300cvim\u300d\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-
-Could_not_save_file=\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u300c%0\u300d\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-
-Create_group=\u30b0\u30eb\u30fc\u30d7\u3092\u751f\u6210
-
-Created_groups.=\u30b0\u30eb\u30fc\u30d7\u3092\u751f\u6210\u3057\u307e\u3057\u305f\u3002
-
-crossreferenced_entries_included=\u76f8\u4e92\u53c2\u7167\u3057\u3066\u3044\u308b\u9805\u76ee\u3092\u53d6\u308a\u8fbc\u307f\u307e\u3057\u305f
-
-Current_content=\u73fe\u5728\u306e\u5185\u5bb9
-
-Current_value=\u73fe\u5728\u5024
-
-Custom_entry_types=\u500b\u4eba\u8a2d\u5b9a\u306e\u9805\u76ee\u578b
-
-Custom_entry_types_found_in_file=\u500b\u4eba\u8a2d\u5b9a\u306e\u9805\u76ee\u578b\u304c\u30d5\u30a1\u30a4\u30eb\u4e2d\u306b\u898b\u3064\u304b\u308a\u307e\u3057\u305f
-Custom_icon_theme=\u500b\u4eba\u8a2d\u5b9a\u306e\u30a2\u30a4\u30b3\u30f3\u30c6\u30fc\u30de
-Custom_icon_theme_file=\u500b\u4eba\u8a2d\u5b9a\u306e\u30a2\u30a4\u30b3\u30f3\u30c6\u30fc\u30de\u30d5\u30a1\u30a4\u30eb
-
-Custom_importers=\u500b\u4eba\u8a2d\u5b9a\u306e\u8aad\u307f\u8fbc\u307f
-
-Customize_entry_types=\u9805\u76ee\u578b\u3092\u500b\u4eba\u8a2d\u5b9a\u3059\u308b
-
-Customize_key_bindings=\u30ad\u30fc\u5272\u308a\u5f53\u3066\u3092\u500b\u4eba\u8a2d\u5b9a\u3059\u308b
-
-Cut=\u5207\u308a\u53d6\u308a
-
-cut_entries=\u9805\u76ee\u3092\u5207\u308a\u53d6\u308a
-
-cut_entry=\u9805\u76ee\u3092\u5207\u308a\u53d6\u308a
-
-Cut_pr=\u5207\u308a\u53d6\u308a\u307e\u3057\u305f:
-Database_\:=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9:
-
-Database_encoding=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0
-
-Database_has_changed._Do_you_want_to_save_before_closing?=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5909\u66f4\u304c\u52a0\u3048\u3089\u308c\u307e\u3057\u305f\u3002\u9589\u3058\u308b\u524d\u306b\u4fdd\u5b58\u3057\u307e\u3059\u304b\uff1f
-
-Database_properties=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7279\u6027
-
-Date_format=\u65e5\u4ed8\u66f8\u5f0f
-
-Default=\u65e2\u5b9a\u5024
-
-Default_encoding=\u65e2\u5b9a\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0
-
-Default_grouping_field=\u65e2\u5b9a\u306e\u30b0\u30eb\u30fc\u30d7\u5316\u30d5\u30a3\u30fc\u30eb\u30c9
-
-Default_look_and_feel=\u65e2\u5b9a\u306e\u30eb\u30c3\u30af\u30a2\u30f3\u30c9\u30d5\u30a3\u30fc\u30eb
-
-Default_pattern=\u65e2\u5b9a\u30d1\u30bf\u30fc\u30f3
-
-Default_sort_criteria=\u65e2\u5b9a\u306e\u6574\u5e8f\u57fa\u6e96
-Define_'%0'=\u300c'%0\u300d\u3092\u5b9a\u7fa9
-
-Delete=\u524a\u9664
-
-Delete_custom_format=\u500b\u4eba\u8a2d\u5b9a\u306e\u66f8\u5f0f\u3092\u524a\u9664
-
-delete_entries=\u9805\u76ee\u3092\u524a\u9664
-
-Delete_entry=\u9805\u76ee\u3092\u524a\u9664
-
-delete_entry=\u9805\u76ee\u3092\u524a\u9664
-
-Delete_multiple_entries=\u8907\u6570\u9805\u76ee\u3092\u524a\u9664
-
-Delete_rows=\u884c\u3092\u524a\u9664
-
-Delete_strings=\u6587\u5b57\u5217\u3092\u524a\u9664
-
-Deleted=\u524a\u9664\u3057\u307e\u3057\u305f:
-
-Delimit_fields_with_semicolon,_ex.=\u5404\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u30bb\u30df\u30b3\u30ed\u30f3\u3067\u533a\u5207\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b
-
-Descending=\u964d\u9806
-
-Description=\u8aac\u660e
-
-Deselect_all=\u3059\u3079\u3066\u9078\u629e\u89e3\u9664
-Deselect_all_duplicates=\u91cd\u8907\u3092\u3059\u3079\u3066\u524a\u9664
-
-Details=\u8a73\u7d30
-
-Disable_entry_editor_when_multiple_entries_are_selected=\u8907\u6570\u306e\u9805\u76ee\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u3068\u304d\u306b\u306f\u3001\u9805\u76ee\u30a8\u30c7\u30a3\u30bf\u3092\u7121\u52b9\u306b\u3059\u308b
-
-Disable_this_confirmation_dialog=\u3053\u306e\u78ba\u8a8d\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u3082\u3046\u8868\u793a\u3057\u306a\u3044
-
-Disable_this_warning_dialog=\u3053\u306e\u8b66\u544a\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u3082\u3046\u8868\u793a\u3057\u306a\u3044
-
-Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=\u9078\u629e\u3057\u305f\u30b0\u30eb\u30fc\u30d7\u306e\u4e00\u3064\u4ee5\u4e0a\u306b\u5c5e\u3059\u308b\u9805\u76ee\u3092\u3059\u3079\u3066\u8868\u793a\u3059\u308b\u3002
-
-Display_all_error_messages=\u5168\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a
-
-Display_help_on_command_line_options=\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u95a2\u3059\u308b\u30d8\u30eb\u30d7\u3092\u8868\u793a
-
-Display_imported_entries_in_an_inspection_window_before_they_are_added.=\u8aad\u307f\u8fbc\u307f\u9805\u76ee\u3092\u8ffd\u52a0\u3059\u308b\u524d\u306b\u7cbe\u67fb\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a\u3059\u308b
-
-Display_only_entries_belonging_to_all_selected_groups.=\u9078\u629e\u3057\u305f\u30b0\u30eb\u30fc\u30d7\u5168\u3066\u306b\u5c5e\u3059\u308b\u9805\u76ee\u306e\u307f\u8868\u793a\u3059\u308b\u3002
-Display_version=\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u8868\u793a
-
-Displaying_no_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u8868\u793a\u3057\u306a\u3044
-
-Do_not_abbreviate_names=\u540d\u524d\u3092\u7565\u3055\u306a\u3044
-
-Do_not_autoset=\u81ea\u52d5\u8a2d\u5b9a\u3057\u306a\u3044
-
-Do_not_import_entry=\u9805\u76ee\u3092\u8aad\u307f\u8fbc\u307e\u306a\u3044
-
-Do_not_open_any_files_at_startup=\u8d77\u52d5\u6642\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304b\u306a\u3044
-
-Do_not_overwrite_existing_keys=\u65e2\u5b58\u306e\u30ad\u30fc\u306f\u4e0a\u66f8\u304d\u3057\u306a\u3044
-Do_not_show_splash_window_at_startup=\u8d77\u52d5\u6642\u306b\u30b9\u30d7\u30e9\u30c3\u30b7\u30e5\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u8868\u793a\u3057\u306a\u3044
-Do_not_show_these_options_in_the_future=\u3053\u308c\u3089\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3082\u3046\u8868\u793a\u3057\u306a\u3044
-
-Do_not_wrap_the_following_fields_when_saving=\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u4fdd\u5b58\u6642\u306b\u6539\u884c\u3057\u306a\u3044
-Do_not_write_the_following_fields_to_XMP_Metadata\:=\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306fXMP\u30e1\u30bf\u30c7\u30fc\u30bf\u306b\u66f8\u304d\u8fbc\u307e\u306a\u3044:
-
-Do_you_want_JabRef_to_do_the_following_operations?=JabRef\u306b\u4ee5\u4e0b\u306e\u64cd\u4f5c\u3092\u3055\u305b\u307e\u3059\u304b\uff1f
-
-DocBook=DocBook
-
-Down=\u4e0b\u3052\u308b
-
-Download=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
-
-Download_completed=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f
-
-Download_file=\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
-
-Downloading...=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u4e2d\u3067\u3059\u2026
-Drag_and_Drop_Error=\u30c9\u30e9\u30c3\u30b0\u30a2\u30f3\u30c9\u30c9\u30ed\u30c3\u30d7\u30a8\u30e9\u30fc
-Drop_%0=%0\u3092\u30c9\u30ed\u30c3\u30d7
-
-duplicate_BibTeX_key=\u91cd\u8907BibTeX\u30ad\u30fc
-
-Duplicate_BibTeX_key.=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u3067\u3059\u3002
-
-Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u3067\u3059\u3002\u3053\u306e\u9805\u76ee\u306e\u30b0\u30eb\u30fc\u30d7\u5316\u306f\u52d5\u4f5c\u3057\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
-
-Duplicate_Key_Warning=\u91cd\u8907\u30ad\u30fc\u306e\u8b66\u544a
-
-Duplicate_pairs_found=\u91cd\u8907\u5bfe\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f
-
-duplicate_removal=\u91cd\u8907\u3092\u524a\u9664
-
-Duplicate_string_name=\u91cd\u8907\u3057\u305f\u6587\u5b57\u5217\u540d
-
-Duplicates_found=\u91cd\u8907\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f
-
-Duplicates_removed=\u91cd\u8907\u3092\u524a\u9664\u3057\u307e\u3057\u305f
-
-Dynamic_groups=\u52d5\u7684\u30b0\u30eb\u30fc\u30d7
-
-Dynamically_group_entries_by_a_free-form_search_expression=\u81ea\u7531\u578b\u691c\u7d22\u8868\u73fe\u3067\u52d5\u7684\u306b\u30b0\u30eb\u30fc\u30d7\u5316
-
-Dynamically_group_entries_by_searching_a_field_for_a_keyword=\u30d5\u30a3\u30fc\u30eb\u30c9\u4e2d\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u691c\u7d22\u3057\u3066\u52d5\u7684\u306b\u30b0\u30eb\u30fc\u30d7\u5316
-
-Each_line_must_be_on_the_following_form=\u5404\u884c\u306f\u4ee5\u4e0b\u306e\u5f62\u3067\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093
-
-Edit=\u7de8\u96c6
-
-Edit_custom_export=\u500b\u4eba\u8a2d\u5b9a\u306e\u66f8\u304d\u51fa\u3057\u3092\u7de8\u96c6
-Edit_entry=\u9805\u76ee\u3092\u7de8\u96c6
-Edit_file_link=\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u7de8\u96c6
-Edit_file_type=\u30d5\u30a1\u30a4\u30eb\u578b\u3092\u7de8\u96c6
-
-Edit_group=\u30b0\u30eb\u30fc\u30d7\u3092\u7de8\u96c6
-
-Edit_journal=\u5b66\u8853\u8a8c\u3092\u7de8\u96c6
-
-Edit_preamble=\u30d7\u30ea\u30a2\u30f3\u30d6\u30eb\u3092\u7de8\u96c6
-Edit_strings=\u6587\u5b57\u5217\u3092\u7de8\u96c6
-Editor_options=\u30a8\u30c7\u30a3\u30bf\u30aa\u30d7\u30b7\u30e7\u30f3
-
-empty_BibTeX_key=BibTeX\u30ad\u30fc\u3092\u7a7a\u306b\u3059\u308b
-
-Empty_BibTeX_key.=BibTeX\u30ad\u30fc\u3092\u7a7a\u306b\u3059\u308b\u3002
-
-Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=BibTeX\u30ad\u30fc\u3092\u7a7a\u306b\u3057\u307e\u3059\u3002\u3053\u306e\u9805\u76ee\u306b\u5bfe\u3057\u3066\u306f\u30b0\u30eb\u30fc\u30d7\u5316\u306f\u6a5f\u80fd\u3057\u306a\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002
-
-empty_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u7a7a\u3067\u3059
-
-Enable_source_editing=\u30bd\u30fc\u30b9\u7de8\u96c6\u3092\u6709\u52b9\u306b\u3059\u308b
-Enable_word/name_autocompletion=\u5358\u8a9e\u3068\u540d\u79f0\u306e\u81ea\u52d5\u88dc\u5b8c\u3092\u6709\u52b9\u306b\u3059\u308b
-
-Endnote=Endnote
-
-Enter_URL=URL\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
-
-Enter_URL_to_download=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308bURL\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
-
-entries=\u9805\u76ee
-
-Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=\u9805\u76ee\u3092\u624b\u52d5\u3067\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u3078\u5272\u308a\u5f53\u3066\u305f\u308a\u3001\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u524a\u9664\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-
-Entries_exported_to_clipboard=\u9805\u76ee\u3092\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u66f8\u304d\u51fa\u3057\u307e\u3057\u305f:
-
-entries_have_undefined_BibTeX_key=\u9805\u76ee\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044BibTeX\u30ad\u30fc\u304c\u3042\u308a\u307e\u3059
-
-entries_into_new_database=\u9805\u76ee\u3092\u65b0\u898f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078
-
-entry=\u9805\u76ee
-
-Entry_editor=\u9805\u76ee\u30a8\u30c7\u30a3\u30bf
-
-Entry_in_current_database=\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u4e2d\u306e\u9805\u76ee
-
-Entry_in_import=\u8aad\u307f\u8fbc\u307f\u4e2d\u306e\u9805\u76ee
-
-Entry_preview=\u9805\u76ee\u30d7\u30ec\u30d3\u30e5\u30fc
-
-Entry_table=\u9805\u76ee\u8868
-
-Entry_table_columns=\u9805\u76ee\u8868\u306e\u5217
-
-Entry_type=\u9805\u76ee\u578b
-
-Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=\u9805\u76ee\u578b\u540d\u306b\u306f\u3001\u30b9\u30da\u30fc\u30b9\u3084\u4ee5\u4e0b\u306e\u6587\u5b57\u304c\u542b\u307e\u308c\u3066\u306f\u306a\u308a\u307e\u305b\u3093
-
-Entry_types=\u9805\u76ee\u578b
-
-Error=\u30a8\u30e9\u30fc
-Error\:_=\u30a8\u30e9\u30fc:_
-Error_converting_Bibtex_to_XMP\:_%0=Bibtex\u304b\u3089XMP\u3078\u306e\u5909\u63db\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f:_%0
-Error_converting_XMP_to_'%0'...=XMP\u3092\u300c'%0\u300d\u306b\u5909\u63db\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f...
-Error_exporting_to_clipboard=\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u66f8\u304d\u51fa\u3057\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f
-
-##Error:_check_your_External_viewer_settings_in_Preferences=Error:_check_your_External_viewer_settings_in_Preferences
-Error_in_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30a8\u30e9\u30fc\u767a\u751f
-Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=\u30d7\u30e9\u30b0\u30a4\u30f3\u30b7\u30b9\u30c6\u30e0\u8d77\u52d5\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f\u3002\u30d7\u30e9\u30b0\u30a4\u30f3\u306a\u3057\u3067\u8d77\u52d5\u3057\u307e\u3059\u304c\u3001\u3044\u304f\u3064\u304b\u306e\u6a5f\u80fd\u306f\u52d5\u4f5c\u3057\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
-Error_occured_when_parsing_entry=\u9805\u76ee\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f
-
-Error_opening_file=\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u969b\u306b\u30a8\u30e9\u30fc\u767a\u751f
-
-Error_setting_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u8a2d\u5b9a\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f
-Error_while_converting_BibtexEntry_to_XMP_%0=BibtexEntry\u3092XMP\u300c%0\u300d\u306b\u5909\u63db\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f
-Error_while_downloading_file\:=\u4ee5\u4e0b\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f:
-Error_while_fetching_from_OIA2=OIA2\u304b\u3089\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f
-Error_while_writing=\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f
-Error_writing_to_%0_file(s).=%0\u30d5\u30a1\u30a4\u30eb\u3092\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f
-Error_writing_XMP_to_file\:_%0=XMP\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f:_%0
-
-
-Establishing_SQL_connection...=SQL\u63a5\u7d9a\u3092\u78ba\u7acb\u3057\u3066\u3044\u307e\u3059...
-Exceptions=\u4f8b\u5916
-
-Existing_file=\u65e2\u5b58\u30d5\u30a1\u30a4\u30eb
-
-exists._Overwrite_file?=\u306f\u5b58\u5728\u3057\u307e\u3059\u3002\u30d5\u30a1\u30a4\u30eb\u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b\uff1f
-exists._Overwrite?=\u306f\u5b58\u5728\u3057\u307e\u3059\u3002\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b\uff1f
-
-Expand_subtree=\u4e0b\u5c64\u30c4\u30ea\u30fc\u3092\u958b\u304f
-
-#previousentrynottranslated.Toviewit,openGroupinterfaceandclickonthe"newgroup"button
-Export=\u66f8\u304d\u51fa\u3059
-
-Export_name=\u66f8\u304d\u51fa\u3057\u306e\u540d\u79f0
-
-Export_preferences=\u8a2d\u5b9a\u3092\u66f8\u304d\u51fa\u3059
-
-Export_preferences_to_file=\u8a2d\u5b9a\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u51fa\u3059
-
-Export_properties=\u7279\u6027\u3092\u66f8\u304d\u51fa\u3059
-
-Export_to_clipboard=\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u66f8\u304d\u51fa\u3059
-Export_to_SQL_database=SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u66f8\u304d\u51fa\u3059
-
-Exporting=\u66f8\u304d\u51fa\u3057\u4e2d
-Extension=\u62e1\u5f35\u5b50
-
-External_changes=\u5916\u90e8\u306e\u5909\u66f4
-
-External_file_links=\u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af
-
-External_files=\u5916\u90e8\u30d5\u30a1\u30a4\u30eb
-
-External_programs=\u5916\u90e8\u30d7\u30ed\u30b0\u30e9\u30e0
-
-External_viewer_called=\u5916\u90e8\u30d3\u30e5\u30fc\u30a2\u304c\u547c\u3073\u51fa\u3055\u308c\u307e\u3057\u305f
-
-Failed_to_read_groups_data_(unsupported_version\:_%0)=\u30b0\u30eb\u30fc\u30d7\u30c7\u30fc\u30bf\u3092\u8aad\u3081\u307e\u305b\u3093\u3067\u3057\u305f\uff08\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u7248:_%0\uff09
-
-Fetch=\u53d6\u5f97
-
-Field=\u30d5\u30a3\u30fc\u30eb\u30c9
-
-field=\u30d5\u30a3\u30fc\u30eb\u30c9
-
-#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
-Field_content=\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u5185\u5bb9
-
-Field_name=\u30d5\u30a3\u30fc\u30eb\u30c9\u540d
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=\u30d5\u30a3\u30fc\u30eb\u30c9\u540d\u306b\u306f\u3001\u30b9\u30da\u30fc\u30b9\u3084\u4ee5\u4e0b\u306e\u6587\u5b57\u3092\u4f7f\u3046\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093
-
-Field_sizes=\u30d5\u30a3\u30fc\u30eb\u30c9\u9577
-Field_to_filter=\u30d5\u30a3\u30eb\u30bf\u3092\u639b\u3051\u308b\u30d5\u30a3\u30fc\u30eb\u30c9
-
-Field_to_group_by=\u30b0\u30eb\u30fc\u30d7\u5316\u3059\u308b\u30d5\u30a3\u30fc\u30eb\u30c9
-
-Fields=\u30d5\u30a3\u30fc\u30eb\u30c9
-
-File=\u30d5\u30a1\u30a4\u30eb
-
-file=\u30d5\u30a1\u30a4\u30eb
-
-File_'%0'_is_already_open.=\u30d5\u30a1\u30a4\u30eb\u300c%0\u300d\u306f\u65e2\u306b\u958b\u304b\u308c\u3066\u3044\u307e\u3059\u3002
-
-File_'%0'_not_found=\u30d5\u30a1\u30a4\u30eb\u300c%0\u300d\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
-
-File_changed=\u30d5\u30a1\u30a4\u30eb\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f
-File_directory_is_'%0'\:=\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u300c%0\u300d\u3067\u3059:
-
-File_directory_is_not_set_or_does_not_exist!=\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u304b\u5b58\u5728\u3057\u307e\u305b\u3093\uff01
-File_download=\u30d5\u30a1\u30a4\u30eb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
-File_exists=\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u3059
-
-File_extension=\u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50
-File_has_been_updated_externally._What_do_you_want_to_do?=\u30d5\u30a1\u30a4\u30eb\u304c\u5916\u90e8\u304b\u3089\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f\u3002\u3069\u3046\u3057\u307e\u3059\u304b\uff1f
-
-File_not_found=\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
-File_type=\u30d5\u30a1\u30a4\u30eb\u578b
-
-File_updated_externally=\u30d5\u30a1\u30a4\u30eb\u304c\u5916\u90e8\u304b\u3089\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f
-
-filename=\u30d5\u30a1\u30a4\u30eb\u540d
-
-Files_opened=\u30d5\u30a1\u30a4\u30eb\u306f\u958b\u304b\u308c\u3066\u3044\u307e\u3059
-
-Filter=\u30d5\u30a3\u30eb\u30bf
-
-Finished_autosetting_external_links.=\u5916\u90e8\u30ea\u30f3\u30af\u306e\u81ea\u52d5\u8a2d\u5b9a\u304c\u7d42\u4e86\u3057\u307e\u3057\u305f
-
-Finished_synchronizing_%0_links._Entries_changed%c_%1.=%0\u30ea\u30f3\u30af\u306e\u540c\u671f\u3057\u7d42\u3048\u307e\u3057\u305f\u3002\u5909\u66f4\u3055\u308c\u305f\u9805\u76ee%c_%1\u3002
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=XMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u307f\u7d42\u308f\u308a\u307e\u3057\u305f\u3002%0\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u307f\u307e\u3057\u305f\u3002
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=XMP\u3092%0\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u307f\u7d42\u308f\u308a\u307e\u3057\u305f\uff08%1\u30b9\u30ad\u30c3\u30d7\u30fb%2\u30a8\u30e9\u30fc\uff09\u3002
-
-First_select_the_entries_you_want_keys_to_be_generated_for.=\u30ad\u30fc\u3092\u751f\u6210\u3055\u305b\u305f\u3044\u9805\u76ee\u3092\u307e\u305a\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-Fit_table_horizontally_on_screen=\u8868\u3092\u753b\u9762\u4e0a\u306e\u6c34\u5e73\u65b9\u5411\u306b\u5408\u308f\u305b\u3066\u8868\u793a
-
-Float=\u30d5\u30ed\u30fc\u30c8
-Float_marked_entries=\u30de\u30fc\u30af\u3057\u305f\u9805\u76ee\u3092\u4e0a\u90e8\u3078
-
-Font_Family=\u30d5\u30a9\u30f3\u30c8\u65cf
-
-Font_Preview=\u30d5\u30a9\u30f3\u30c8\u30d7\u30ec\u30d3\u30e5\u30fc
-
-Font_Size=\u30d5\u30a9\u30f3\u30c8\u5bf8\u6cd5
-
-Font_Style=\u30d5\u30a9\u30f3\u30c8\u69d8\u5f0f
-
-FontSelector=\u30d5\u30a9\u30f3\u30c8\u306e\u9078\u629e
-
-for=;_\u5bfe\u8c61:
-
-Format_of_author_and_editor_names=\u8457\u8005\u540d\u3068\u7de8\u96c6\u8005\u540d\u306e\u66f8\u5f0f
-Format_String=\u6574\u5f62\u6587\u5b57\u5217
-
-Format_used=\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u66f8\u5f0f
-Formatter_Name=\u6574\u5f62\u5b9a\u7fa9\u306e\u540d\u79f0
-
-Formatter_not_found=\u6574\u5f62\u5b50\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
-
-found=\u691c\u51fa
-Found_%0_plugin(s)=%0\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u691c\u51fa
-
-found_in_aux_file=aux\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u51fa
-
-Full_name=\u59d3\u540d
-
-General=\u4e00\u822c
-
-General_fields=\u6c4e\u7528\u30d5\u30a3\u30fc\u30eb\u30c9
-
-Generate=\u751f\u6210
-
-Generate_BibTeX_key=BibTeX\u30ad\u30fc\u3092\u751f\u6210
-
-Generate_keys=\u30ad\u30fc\u3092\u751f\u6210
-
-Generate_keys_before_saving_(for_entries_without_a_key)=\u4fdd\u5b58\u524d\u306b\u30ad\u30fc\u3092\u751f\u6210\uff08\u30ad\u30fc\u306e\u306a\u3044\u9805\u76ee\u306b\u5bfe\u3057\u3066\uff09
-Generate_keys_for_imported_entries=\u8aad\u307f\u8fbc\u3093\u3060\u9805\u76ee\u306b\u30ad\u30fc\u3092\u751f\u6210
-
-Generate_now=\u3044\u307e\u751f\u6210\u3059\u308b
-
-Generated_BibTeX_key_for=\u4ee5\u4e0b\u306e\u9805\u76ee\u306eBibTeX\u30ad\u30fc\u3092\u751f\u6210\u3057\u307e\u3057\u305f:
-
-Generating_BibTeX_key_for=\u4ee5\u4e0b\u306e\u9805\u76ee\u306eBibTeX\u30ad\u30fc\u3092\u751f\u6210\u3057\u3066\u3044\u307e\u3059:
-
-Grab=\u5165\u624b
-
-Gray_out_entries_not_in_group_selection=\u30b0\u30eb\u30fc\u30d7\u9078\u629e\u306b\u306a\u3044\u9805\u76ee\u3092\u6de1\u8272\u5316\u3059\u308b
-
-Gray_out_non-hits=\u5408\u81f4\u3057\u306a\u3044\u3082\u306e\u3092\u6de1\u8272\u5316
-
-Gray_out_non-matching_entries=\u4e00\u81f4\u3057\u306a\u3044\u9805\u76ee\u3092\u6de1\u8272\u5316\u3059\u308b
-
-Group_properties=\u30b0\u30eb\u30fc\u30d7\u7279\u6027
-
-grouping_may_not_work_for_this_entry=\u3053\u306e\u9805\u76ee\u306b\u5bfe\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u5316\u306f\u52d5\u4f5c\u3057\u306a\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093
-
-Groups=\u30b0\u30eb\u30fc\u30d7
-
-Harvard_RTF=Harvard_RTF
-
-Have_you_chosen_the_correct_package_path?=\u6b63\u3057\u3044\u30d1\u30c3\u30b1\u30fc\u30b8\u30d1\u30b9\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u304b\uff1f
-
-Help=\u30d8\u30eb\u30d7
-
-Help_contents=\u30d8\u30eb\u30d7\u76ee\u6b21
-
-Help_on_groups=\u30b0\u30eb\u30fc\u30d7\u306b\u95a2\u3059\u308b\u30d8\u30eb\u30d7
-
-Help_on_key_patterns=\u30ad\u30fc\u30d1\u30bf\u30fc\u30f3\u306b\u95a2\u3059\u308b\u30d8\u30eb\u30d7
-Help_on_Preview_Settings=\u30d7\u30ec\u30d3\u30e5\u30fc\u8a2d\u5b9a\u306b\u95a2\u3059\u308b\u30d8\u30eb\u30d7
-Help_on_Regular_Expression_Search=\u6b63\u898f\u8868\u73fe\u691c\u7d22\u306b\u95a2\u3059\u308b\u30d8\u30eb\u30d7
-
-Hide_non-hits=\u5408\u81f4\u3057\u306a\u3044\u3082\u306e\u3092\u975e\u8868\u793a
-
-Hide_non-matching_entries=\u4e00\u81f4\u3057\u306a\u3044\u9805\u76ee\u3092\u975e\u8868\u793a
-
-Hierarchical_context=\u968e\u5c64\u30b3\u30f3\u30c6\u30af\u30b9\u30c8
-
-Highlight=\u7740\u8272
-Highlight_groups_matching_all_selected_entries=\u5168\u9078\u629e\u9805\u76ee\u306b\u4e00\u81f4\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u3092\u7740\u8272
-Highlight_groups_matching_any_selected_entry=\u4efb\u610f\u306e\u9078\u629e\u9805\u76ee\u306b\u4e00\u81f4\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u3092\u7740\u8272
-
-Highlight_overlapping_groups=\u91cd\u8907\u306e\u3042\u308b\u30b0\u30eb\u30fc\u30d7\u3092\u7740\u8272
-
-Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=\u30d2\u30f3\u30c8%c_\u7279\u5b9a\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u307f\u3092\u691c\u7d22\u3059\u308b\u306b\u306f\u3001\u305f\u3068\u3048\u3070%c<p><tt>author%esmith_and_title%eelectrical</tt>\u3068\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
-
-HTML=HTML
-HTML_table=HTML_table
-HTML_table_(with_Abstract_&_BibTeX)=HTML_table_(with_Abstract_&_BibTeX)
-Icon=\u30a2\u30a4\u30b3\u30f3
-
-Ignore=\u7121\u8996
-
-Immediate_subgroups=\u76f4\u4e0b\u306e\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7
-
-Import=\u8aad\u307f\u8fbc\u307f
-
-Import_and_keep_old_entry=\u8aad\u307f\u8fbc\u307f\u3092\u884c\u3044\u3001\u65e7\u9805\u76ee\u306f\u7dad\u6301
-
-Import_and_remove_old_entry=\u8aad\u307f\u8fbc\u307f\u3092\u884c\u3044\u3001\u65e7\u9805\u76ee\u306f\u524a\u9664
-
-Import_entries=\u9805\u76ee\u306e\u8aad\u307f\u8fbc\u307f
-
-Import_failed=\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f
-
-Import_file=\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f
-
-Import_group_definitions=\u30b0\u30eb\u30fc\u30d7\u5b9a\u7fa9\u3092\u8aad\u307f\u8fbc\u307f
-
-Import_name=\u8aad\u307f\u8fbc\u307f\u306e\u540d\u79f0
-
-Import_preferences=\u8a2d\u5b9a\u3092\u8aad\u307f\u8fbc\u3080
-
-Import_preferences_from_file=\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8a2d\u5b9a\u3092\u8aad\u307f\u8fbc\u307f
-
-Import_strings=\u6587\u5b57\u5217\u3092\u8aad\u307f\u8fbc\u307f
-
-Import_to_open_tab=\u8aad\u307f\u8fbc\u3093\u3067\u30bf\u30d6\u3092\u958b\u304f
-
-Import_word_selector_definitions=\u5358\u8a9e\u9078\u629e\u30e1\u30cb\u30e5\u30fc\u306e\u5b9a\u7fa9\u3092\u8aad\u307f\u8fbc\u307f
-
-Imported_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3057\u305f:
-
-Imported_entries=\u9805\u76ee\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3057\u305f:
-
-Imported_from_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u8aad\u307f\u8fbc\u307f\u307e\u3057\u305f:
-
-ImportFormat_class=ImportFormat\u30af\u30e9\u30b9
-
-Importing=\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059
-
-Importing_in_unknown_format=\u672a\u77e5\u306e\u66f8\u5f0f\u3067\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059
-
-In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=JabRef\u3067\u306f\u3001\u6587\u5b57\u5217\u3092\u8868\u3059\u306b\u306f\u4e00\u5bfe\u306e#\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-Include_abstracts=\u6982\u8981\u3092\u53d6\u308a\u8fbc\u3080
-Include_entries=\u9805\u76ee\u3092\u542b\u3081\u308b
-
-Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u306e\u53d6\u308a\u8fbc\u307f\uff1a\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u3084\u305d\u306e\u914d\u4e0b\u306e\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u9805\u76ee\u3092\u8868\u793a
-
-Incremental=\u9010\u8a9e\u7684
-
-Incremental_search=\u9010\u8a9e\u691c\u7d22
-
-Incremental_search_failed._Repeat_to_search_from_top.=\u9010\u8a9e\u691c\u7d22\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u6700\u521d\u304b\u3089\u691c\u7d22\u3059\u308b\u5834\u5408\u306f\u3001\u3082\u3046\u4e00\u5ea6\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-Independent_group\:_When_selected,_view_only_this_group's_entries=\u5358\u72ec\u30b0\u30eb\u30fc\u30d7\uff1a\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u9805\u76ee\u306e\u307f\u3092\u8868\u793a
-
-Initially_show_groups_tree_expanded=\u6700\u521d\u306b\u30b0\u30eb\u30fc\u30d7\u30c4\u30ea\u30fc\u3092\u5c55\u958b\u3057\u305f\u72b6\u614b\u3067\u8868\u793a
-
-Input=\u5165\u529b
-
-Input_error=\u5165\u529b\u30a8\u30e9\u30fc
-
-Insert=\u633f\u5165
-
-Insert_rows=\u884c\u3092\u633f\u5165
-
-Insert_selected_citations_into_LyX/Kile=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092LyX/Kile\u306b\u633f\u5165
-
-Insert_selected_citations_into_WinEdt=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092WinEdt\u306b\u633f\u5165
-
-insert_string_=\u4ee5\u4e0b\u306e\u6587\u5b57\u5217\u3092\u633f\u5165
-
-Insert_URL=URL\u3092\u633f\u5165
-
-integrity=\u6574\u5408\u6027
-
-#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
-Integrity_check=\u6574\u5408\u6027\u691c\u67fb
-
-Intersection=\u8ad6\u7406\u7a4d
-
-Invalid_BibTeX_key=\u7121\u52b9\u306aBibTeX\u30ad\u30fc\u3067\u3059
-
-Invalid_date_format=\u7121\u52b9\u306a\u65e5\u4ed8\u66f8\u5f0f\u3067\u3059
-
-Invalid_URL=\u7121\u52b9\u306aURL\u3067\u3059
-
-Inverted=\u5426\u5b9a
-
-is_a_standard_type.=\u306f\u6a19\u6e96\u578b\u3067\u3059\u3002
-
-ISO_abbreviation=ISO\u77ed\u7e2e\u5f62
-
-Item_list_for_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u9805\u76ee\u4e00\u89a7
-jabref=jabref
-
-JabRef_help=JabRef\u30d8\u30eb\u30d7
-
-JabRef_preferences=JabRef\u306e\u8a2d\u5b9a
-
-Journal_abbreviations=\u8a8c\u540d\u77ed\u7e2e\u5f62
-
-Journal_list_preview=\u5b66\u8853\u8a8c\u540d\u8868\u306e\u30d7\u30ec\u30d3\u30e5\u30fc
-
-Journal_name=\u5b66\u8853\u8a8c\u540d
-
-Keep=\u7dad\u6301
-
-Keep_both=\u4e21\u8005\u3092\u7dad\u6301
-
-Keep_lower=\u4e0b\u3092\u7dad\u6301
-
-Keep_upper=\u4e0a\u3092\u7dad\u6301
-
-Key_bindings=\u30ad\u30fc\u5272\u308a\u5f53\u3066
-
-Key_bindings_changed=\u30ad\u30fc\u5272\u308a\u5f53\u3066\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f
-
-Key_generator_settings=\u30ad\u30fc\u751f\u6210\u30c4\u30fc\u30eb\u306e\u8a2d\u5b9a
-
-Key_pattern=\u30ad\u30fc\u30d1\u30bf\u30fc\u30f3
-
-keys_in_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u4e2d\u306e\u30ad\u30fc
-
-#nottranslated.Toviewit,usemenu"Tools|NewBibTeXfilefromAUxfile",andlaunchtheactiononanon-existantauxfile.
-Keyword=\u30ad\u30fc\u30ef\u30fc\u30c9
-
-Label=\u30e9\u30d9\u30eb
-
-Language=\u8a00\u8a9e
-
-Last_modified=\u6700\u7d42\u4fee\u6b63\u65e5\u6642
-
-LaTeX_AUX_file=LaTeX_AUX\u30d5\u30a1\u30a4\u30eb
-Leave_file_in_its_current_directory.=\u30d5\u30a1\u30a4\u30eb\u3092\u73fe\u5728\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u7f6e\u3044\u3066\u304a\u304f\u3002
-Leave_files_in_their_current_directory.=\u30d5\u30a1\u30a4\u30eb\u3092\u73fe\u5728\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u7f6e\u3044\u3066\u304a\u304f\u3002
-
-Left=\u5de6
-
-License=\u30e9\u30a4\u30bb\u30f3\u30b9
-
-Limit_to_fields=\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u5236\u9650
-
-Limit_to_selected_entries=\u9078\u629e\u9805\u76ee\u306b\u5236\u9650
-
-Link=\u30ea\u30f3\u30af
-Link_local_file=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u3092\u30ea\u30f3\u30af
-Link_to_file_%0=\u30d5\u30a1\u30a4\u30eb%0\u3078\u306e\u30ea\u30f3\u30af
-
-Listen_for_remote_operation_on_port=\u4ee5\u4e0b\u306e\u30dd\u30fc\u30c8\u3067\u30ea\u30e2\u30fc\u30c8\u64cd\u4f5c\u3092\u5f85\u3061\u53d7\u3051\u308b
-Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=\u8d77\u52d5\u6642\u306bjabref.xml\u306e\u8aad\u307f\u8fbc\u307f\u3068\u4fdd\u5b58\u3092\u884c\u3046\uff08\u30e1\u30e2\u30ea\u30fc\u30b9\u30c6\u30a3\u30c3\u30af\u30e2\u30fc\u30c9\uff09
-
-Load_session=\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u8aad\u307f\u8fbc\u307f
-
-Loading_session...=\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...
-localhost=\u30ed\u30fc\u30ab\u30eb\u30db\u30b9\u30c8
-
-Look_and_feel=\u30eb\u30c3\u30af\u30a2\u30f3\u30c9\u30d5\u30a3\u30fc\u30eb
-Looking_for_pdf...=PDF\u3092\u63a2\u3057\u3066\u3044\u307e\u3059...
-lower=\u4e0b\u3052\u308b
-Main_file_directory=\u57fa\u672c\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
-
-Main_layout_file=\u57fa\u672c\u30ec\u30a4\u30a2\u30a6\u30c8\u30d5\u30a1\u30a4\u30eb
-
-Main_PDF_directory=\u57fa\u672cPDF\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
-
-Main_PS_directory=\u57fa\u672cPS\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
-
-Manage=\u7ba1\u7406
-
-Manage_custom_exports=\u500b\u4eba\u8a2d\u5b9a\u66f8\u304d\u51fa\u3057\u306e\u7ba1\u7406
-
-Manage_custom_imports=\u500b\u4eba\u8a2d\u5b9a\u8aad\u307f\u8fbc\u307f\u306e\u7ba1\u7406
-Manage_external_file_types=\u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u578b\u306e\u7ba1\u7406
-
-Manage_journal_abbreviations=\u5b66\u8853\u8a8c\u540d\u77ed\u7e2e\u5f62\u306e\u7ba1\u7406
-
-Mark_entries=\u9805\u76ee\u3092\u30de\u30fc\u30af
-
-Mark_entry=\u9805\u76ee\u3092\u30de\u30fc\u30af
-
-Mark_new_entries_with_addition_date=\u65b0\u898f\u9805\u76ee\u306b\u8ffd\u52a0\u306e\u65e5\u4ed8\u3092\u8a18\u8f09
-
-Mark_new_entries_with_owner_name=\u65b0\u898f\u9805\u76ee\u306b\u30aa\u30fc\u30ca\u30fc\u540d\u3092\u8a18\u8f09
-
-Marked_selected=\u9078\u629e\u3057\u305f\u3082\u306e\u3092\u30de\u30fc\u30af\u3057\u307e\u3057\u305f:
-Memory_Stick_Mode=\u30e1\u30e2\u30ea\u30fc\u30b9\u30c6\u30a3\u30c3\u30af\u30e2\u30fc\u30c9
-
-Menu_and_label_font_size=\u30e1\u30cb\u30e5\u30fc\u3068\u30e9\u30d9\u30eb\u306e\u30d5\u30a9\u30f3\u30c8\u5bf8\u6cd5
-
-Merged_external_changes=\u5916\u90e8\u304b\u3089\u306e\u5909\u66f4\u3092\u7d71\u5408\u3057\u307e\u3057\u305f
-
-Messages=\u30e1\u30c3\u30bb\u30fc\u30b8
-
-Messages_and_Hints=\u30e1\u30c3\u30bb\u30fc\u30b8\u3068\u30d2\u30f3\u30c8
-
-Modification_of_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u4fee\u6b63
-
-Modified_group_"%0".=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u4fee\u6b63\u3057\u307e\u3057\u305f\u3002
-
-Modified_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u4fee\u6b63\u3057\u307e\u3057\u305f
-
-Modified_string=\u6587\u5b57\u5217\u3092\u4fee\u6b63\u3057\u307e\u3057\u305f
-
-Modify=\u4fee\u6b63
-
-modify_group=\u30b0\u30eb\u30fc\u30d7\u3092\u4fee\u6b63
-
-MODS=MODS
-
-Move=\u79fb\u52d5
-
-Move_down=\u4e0b\u3052\u308b
-
-Move_entries_in_group_selection_to_the_top=\u30b0\u30eb\u30fc\u30d7\u9078\u629e\u4e2d\u306e\u9805\u76ee\u3092\u4e0a\u306b\u79fb\u52d5
-Move_external_links_to_'file'_field=\u5916\u90e8\u30ea\u30f3\u30af\u3092\u300c\u30d5\u30a1\u30a4\u30eb\u300d\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u79fb\u52d5
-Move_files_to_file_directory.=\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
-
-move_group=\u30b0\u30eb\u30fc\u30d7\u3092\u79fb\u52d5
-
-Move_string_down=\u6587\u5b57\u5217\u3092\u4e0b\u306b\u79fb\u52d5
-
-Move_string_up=\u6587\u5b57\u5217\u3092\u4e0a\u306b\u79fb\u52d5
-
-Move_up=\u4e0a\u3052\u308b
-
-Moved_group_"%0".=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u79fb\u52d5\u3057\u307e\u3057\u305f\u3002
-MS_Office_2007=MS_Office_2007
-MySQL=MySQL
-MySQL_database=MySQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
-
-Name=\u540d\u79f0
-Name_formatter=\u540d\u524d\u306e\u6574\u5f62
-
-Natbib_style=Natbib\u69d8\u5f0f
-
-nested_aux_files=\u5165\u308c\u5b50\u306b\u306a\u3063\u3066\u3044\u308baux\u30d5\u30a1\u30a4\u30eb
-
-New=\u65b0\u898f
-
-new=\u65b0\u898f
-
-New_BibTeX_database=\u65b0\u898fBibTeX\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
-
-New_BibTeX_entry=\u65b0\u898fBibTeX\u9805\u76ee
-
-New_BibTeX_subdatabase=\u65b0\u898fBibTeX\u526f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
-
-New_content=\u65b0\u898f\u5185\u5bb9
-
-New_database_created.=\u65b0\u898f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002
-New_field_value=\u65b0\u898f\u30d5\u30a3\u30fc\u30eb\u30c9\u5024
-
-New_file=\u65b0\u898f\u30d5\u30a1\u30a4\u30eb
-New_file_link_(INSERT)=\u65b0\u898f\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\uff08INSERT\uff09
-
-New_group=\u65b0\u898f\u30b0\u30eb\u30fc\u30d7
-
-New_string=\u65b0\u898f\u6587\u5b57\u5217
-
-Next_entry=\u6b21\u306e\u9805\u76ee
-
-No_%0_found=%0\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
-
-No_actual_changes_found.=\u5b9f\u969b\u306b\u5909\u66f4\u3055\u308c\u3066\u3044\u308b\u3068\u3053\u308d\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-
-no_base-bibtex-file_specified=\u30d9\u30fc\u30b9\u3068\u306a\u308bBibTeX\u30d5\u30a1\u30a4\u30eb\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093
-
-no_database_generated=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u751f\u6210\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f
-
-No_duplicates_found=\u91cd\u8907\u306f\u691c\u51fa\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f
-
-No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=\u9805\u76ee\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u6b63\u3057\u3044\u8aad\u307f\u8fbc\u307f\u30d5\u30a3\u30eb\u30bf\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-
-No_entries_found_for_the_search_string_'%0'=\u691c\u7d22\u6587\u5b57\u5217\u300c%0\u300d\u306b\u4e00\u81f4\u3059\u308b\u9805\u76ee\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-
-No_entries_imported.=\u9805\u76ee\u306f\u8aad\u307f\u8fbc\u307e\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-
-No_entries_or_multiple_entries_selected.=\u9805\u76ee\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-
-No_entries_selected=\u9805\u76ee\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093
-No_entries_selected.=\u9805\u76ee\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-
-No_exceptions_have_ocurred.=\u4f8b\u5916\u30a8\u30e9\u30fc\u306f\u767a\u751f\u3057\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-No_files_found.=\u30d5\u30a1\u30a4\u30eb\u304c\u307f\u3064\u304b\u308a\u307e\u305b\u3093\u3002
-
-No_GUI._Only_process_command_line_options.=GUI\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u307f\u51e6\u7406\u3057\u307e\u3059\u3002
-
-No_journal_names_could_be_abbreviated.=\u5b66\u8853\u8a8c\u540d\u3092\u77ed\u7e2e\u5f62\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-
-No_journal_names_could_be_unabbreviated.=\u5b66\u8853\u8a8c\u540d\u3092\u975e\u77ed\u7e2e\u5f62\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-No_PDF_linked=PDF\u306f\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u307e\u305b\u3093
-
-No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=PDF\u3084PS\u306e\u5b9a\u7fa9\u306f\u306a\u304f\u3001BibTeX\u30ad\u30fc\u306b\u4e00\u81f4\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3082\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
-No_plugins_were_found_in_the_following_folders\:=\u4ee5\u4e0b\u306e\u30d5\u30a9\u30eb\u30c0\u306b\u306f\u30d7\u30e9\u30b0\u30a4\u30f3\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f:
-
-No_references_found=\u53c2\u7167\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
-
-No_saved_session_found.=\u4fdd\u5b58\u3055\u308c\u305f\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u691c\u51fa\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-
-No_url_defined=URL\u306f\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093
-No_XMP_metadata_found_in_=\u4ee5\u4e0b\u306e\u5834\u6240\u306b\u306fXMP\u30e1\u30bf\u30c7\u30fc\u30bf\u306f\u3042\u308a\u307e\u305b\u3093:_
-
-not=not
-
-not_found=\u898b\u3064\u304b\u308a\u307e\u305b\u3093
-
-Not_saved_(empty_session)=\u4fdd\u5b58\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff08\u7a7a\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\uff09
-
-Note_that_the_entry_causing_the_problem_has_been_selected.=\u554f\u984c\u3092\u5f15\u304d\u8d77\u3053\u3059\u9805\u76ee\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=\u30eb\u30c3\u30af\u30a2\u30f3\u30c9\u30d5\u30a3\u30fc\u30eb\u306b\u306f\u3001\u5b8c\u5168\u306b\u6709\u52b9\u306a\u30af\u30e9\u30b9\u540d\u3092\u6307\u5b9a\u3057\u306a\u304f\u3066\u306f\u306a\u3089\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3001
-
-Nothing_to_redo=\u7e70\u308a\u8fd4\u3059\u3079\u304d\u3082\u306e\u304c\u3042\u308a\u307e\u305b\u3093
-
-Nothing_to_undo=\u53d6\u308a\u6d88\u3059\u3079\u304d\u3082\u306e\u304c\u3042\u308a\u307e\u305b\u3093
-
-#Thenextisusedlikein"Referencesfound:1Numberofreferencestofetch?"
-Number_of_references_to_fetch?=\u53d6\u5f97\u3059\u308b\u53c2\u7167\u6570\uff1f
-
-occurences=\u500b
-
-OK=OK
-
-Ok=OK
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=\u4e00\u3064\u306a\u3044\u3057\u305d\u308c\u4ee5\u4e0a\u306e\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u304c\u3001\u672a\u5b9a\u7fa9\u306e\u300c%0\u300d\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u3069\u3046\u3057\u307e\u3059\u304b\uff1f
-
-One_or_more_keys_will_be_overwritten._Continue?=\u4e00\u3064\u306a\u3044\u3057\u305d\u308c\u4ee5\u4e0a\u306e\u30ad\u30fc\u304c\u4e0a\u66f8\u304d\u3055\u308c\u307e\u3059\u3002\u7d9a\u3051\u307e\u3059\u304b\uff1f
-Only_one_item_is_supported=\u4e00\u9805\u76ee\u306e\u307f\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059
-
-Open=\u958b\u304f
-
-Open_BibTeX_database=BibTeX\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u304f
-
-Open_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u304f
-
-Open_editor_when_a_new_entry_is_created=\u65b0\u898f\u9805\u76ee\u3092\u751f\u6210\u3057\u305f\u969b\u306b\u30a8\u30c7\u30a3\u30bf\u3092\u958b\u304f
-
-Open_file=\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f
-
-Open_last_edited_databases_at_startup=\u8d77\u52d5\u6642\u306b\u6700\u5f8c\u306b\u7de8\u96c6\u3057\u3066\u3044\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u304f
-
-Open_PDF_or_PS=PDF\u307e\u305f\u306fPS\u3092\u958b\u304f
-
-Open_right-click_menu_with_Ctrl+left_button=Ctrl+\u5de6\u30dc\u30bf\u30f3\u3067\u53f3\u30af\u30ea\u30c3\u30af\u30e1\u30cb\u30e5\u30fc\u3092\u958b\u304f
-
-Open_URL_or_DOI=URL\u307e\u305f\u306fDOI\u3092\u958b\u304f
-OpenDocument_Spreadsheet=OpenDocument\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8
-
-Opened_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u304d\u307e\u3057\u305f
-
-Opening=\u958b\u3044\u3066\u3044\u307e\u3059
-
-Opening_preferences...=\u8a2d\u5b9a\u3092\u958b\u3044\u3066\u3044\u307e\u3059...
-
-OpenOffice_Calc=OpenOffice_Calc
-OpenOffice_CSV=OpenOffice_CSV
-Operation_canceled.\n=\u64cd\u4f5c\u306f\u53d6\u308a\u6d88\u3055\u308c\u307e\u3057\u305f\u3002\n
-Operation_not_supported=\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093
-
-Optional_fields=\u975e\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9
-
-Options=\u30aa\u30d7\u30b7\u30e7\u30f3
-
-or=or
-
-out_of=out_of
-Output=\u51fa\u529b
-
-Output_or_export_file=\u30d5\u30a1\u30a4\u30eb\u3092\u51fa\u529b\u3059\u308b\u304b\u66f8\u304d\u51fa\u3059
-
-Override=\u4e0a\u66f8\u304d
-
-Override_default_file_directories=\u65e2\u5b9a\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4e0a\u66f8\u304d
-
-Override_default_font_settings=\u65e2\u5b9a\u30d5\u30a9\u30f3\u30c8\u8a2d\u5b9a\u3092\u4e0a\u66f8\u304d
-
-override_the_bibtex_key_by_the_selected_text=BibTeX\u30ad\u30fc\u3092\u9078\u629e\u3057\u305f\u6587\u5b57\u5217\u3067\u4e0a\u66f8\u304d
-
-
-Overwrite=\u4e0a\u66f8\u304d
-Overwrite_existing_field_values=\u65e2\u5b58\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u5024\u3092\u4e0a\u66f8\u304d
-
-Overwrite_keys=\u30ad\u30fc\u306e\u4e0a\u66f8\u304d
-
-pairs_processed=\u5bfe\u304c\u51e6\u7406\u3055\u308c\u307e\u3057\u305f
-Password_\:=\u30d1\u30b9\u30ef\u30fc\u30c9:
-
-Paste=\u8cbc\u308a\u4ed8\u3051
-
-paste_entries=\u9805\u76ee\u3092\u8cbc\u308a\u4ed8\u3051
-
-paste_entry=\u9805\u76ee\u3092\u8cbc\u308a\u4ed8\u3051
-Paste_from_clipboard=\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u304b\u3089\u8cbc\u308a\u4ed8\u3051
-
-Pasted=\u8cbc\u308a\u4ed8\u3051\u307e\u3057\u305f:
-
-Path_to_%0_not_defined=%0\u3078\u306e\u30d1\u30b9\u306f\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093
-
-Path_to_LatexEditor_(LEd.exe)=LatexEditor_(LEd.exe)_\u3078\u306e\u30d1\u30b9
-
-Path_to_LyX_pipe=LyX\u30d1\u30a4\u30d7\u3078\u306e\u30d1\u30b9
-
-Path_to_Vim=Vim\u3078\u306e\u30d1\u30b9
-
-Path_to_WinEdt.exe=WinEdt.exe\u3078\u306e\u30d1\u30b9
-
-PDF_directory=PDF\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
-PDF_does_not_exist=PDF\u304c\u5b58\u5728\u3057\u307e\u305b\u3093
-
-Personal_journal_list=\u500b\u4eba\u7528\u5b66\u8853\u8a8c\u540d\u8868
-
-Plain_text_import=\u5e73\u6587\u8aad\u307f\u8fbc\u307f
-
-Please_check_your_network_connection_to_this_machine.=\u3053\u306e\u30de\u30b7\u30f3\u3078\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u63a5\u7d9a\u3092\u691c\u67fb\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-Please_enter_a_name_for_the_group.=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u7528\u306e\u540d\u79f0\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=\u691c\u7d22\u9805\u76ee\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305f\u3068\u3048\u3070\u3001<b>Smith</b>\u306e\u3059\u3079\u3066\u306e\u9805\u76ee\u3092\u691c\u7d22\u3059\u308b\u306b\u306f\u3001<p><tt>smith< [...]
-
-Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=\u691c\u7d22\u3059\u308b\u30d5\u30a3\u30fc\u30eb\u30c9\uff08\u4f8b\uff1a<b>keywords</b>\uff09\u3068\u305d\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u5185\u3067\u691c\u7d22\u3057\u305f\u3044\u30ad\u30fc\u30ef\u30fc\u30c9\uff08\u4f8b\uff1a<b>electrical</b>\uff09\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-Please_enter_the_string's_label=\u6587\u5b57\u5217\u306e\u30e9\u30d9\u30eb\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-Please_select_an_importer=\u8aad\u307f\u8fbc\u307f\u6cd5\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-
-Please_select_an_importer.=\u8aad\u307f\u8fbc\u307f\u6cd5\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-Please_select_exactly_one_group_to_move.=\u79fb\u52d5\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u3092\u4e00\u3064\u3060\u3051\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Please_specify_the_=\u4ee5\u4e0b\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044:_
-
-Possible_duplicate_entries=\u6f5c\u5728\u7684\u306a\u91cd\u8907\u9805\u76ee
-
-Possible_duplicate_of_existing_entry._Click_to_resolve.=\u65e2\u5b58\u9805\u76ee\u3068\u91cd\u8907\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u89e3\u6d88\u3059\u308b\u306b\u306f\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-Preamble=\u30d7\u30ea\u30a2\u30f3\u30d6\u30eb
-
-Preferences=\u8a2d\u5b9a
-
-Preferences_recorded.=\u8a2d\u5b9a\u304c\u8a18\u9332\u3055\u308c\u307e\u3057\u305f\u3002
-
-Preview=\u30d7\u30ec\u30d3\u30e5\u30fc
-
-Previous_entry=\u524d\u306e\u9805\u76ee
-
-Primary_sort_criterion=\u7b2c\u4e00\u6574\u5e8f\u57fa\u6e96
-Print_Preview=\u5370\u5237\u30d7\u30ec\u30d3\u30e5\u30fc
-Printing_Entry_Preview=\u9805\u76ee\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u5370\u5237\u3057\u3066\u3044\u307e\u3059
-
-Problem_with_parsing_entry=\u9805\u76ee\u3092\u89e3\u6790\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f
-Processing_=\u4ee5\u4e0b\u3092\u51e6\u7406\u4e2d\u3067\u3059:_
-Program_output=\u30d7\u30ed\u30b0\u30e9\u30e0\u51fa\u529b
-
-PS_directory=PS\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
-Push_entries_to_external_application_(%0)=\u9805\u76ee\u3092\u5916\u90e8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u9001\u308a\u8fbc\u3080_(%0)
-
-Push_selection_to_Emacs=\u9078\u629e\u90e8\u3092Emacs\u306b\u9001\u308a\u8fbc\u3080
-
-Push_selection_to_LyX/Kile=\u9078\u629e\u90e8\u3092LyX/Kile\u306b\u9001\u308a\u8fbc\u3080
-Push_selection_to_Vim=\u9078\u629e\u90e8\u3092Vim\u306b\u9001\u308a\u8fbc\u3080
-
-Push_selection_to_WinEdt=\u9078\u629e\u90e8\u3092WinEdt\u306b\u9001\u308a\u8fbc\u3080
-
-Push_to_LatexEditor=LatexEditor\u306b\u9001\u308a\u8fbc\u3080
-Pushed_citations_to_%0=\u5f15\u7528\u3092%0\u306b\u9001\u308a\u8fbc\u307f\u307e\u3057\u305f
-
-Pushed_citations_to_Emacs=\u5f15\u7528\u3092Emacs\u306b\u9001\u308a\u8fbc\u307f\u307e\u3057\u305f
-Pushed_citations_to_Vim=\u5f15\u7528\u3092Vim\u306b\u9001\u308a\u8fbc\u307f\u307e\u3057\u305f
-
-Pushed_citations_to_WinEdt=\u5f15\u7528\u3092WinEdt\u306b\u9001\u308a\u8fbc\u307f\u307e\u3057\u305f
-
-Pushed_the_citations_for_the_following_rows_to=\u4ee5\u4e0b\u306e\u884c\u306e\u5f15\u7528\u3092\u3053\u3053\u306b\u9001\u308a\u8fbc\u307f\u307e\u3057\u305f:
-
-Quit_JabRef=JabRef\u3092\u7d42\u4e86
-
-Quit_synchronization=\u52d5\u6a5f\u3092\u7d42\u4e86\u3059\u308b
-
-Raw_source=\u5143\u306e\u30bd\u30fc\u30b9
-
-Really_delete_the_selected=\u672c\u5f53\u306b\u4ee5\u4e0b\u306e\u9078\u629e\u3092\u524a\u9664\u3057\u307e\u3059\u304b:_
-
-Rearrange_tabs_alphabetically_by_title=\u30bf\u30d6\u3092\u30bf\u30a4\u30c8\u30eb\u3067\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8\u9806\u306b\u6574\u5e8f
-
-Redo=\u7e70\u308a\u8fd4\u3057
-
-Reference_database=\u53c2\u7167\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
-
-#Thenexttwolinesareusedlikein"Referencesfound:1Numberofreferencestofetch?"
-References_found=\u53c2\u7167\u3092\u691c\u51fa
-
-Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=\u4e0a\u5c64\u30b0\u30eb\u30fc\u30d7\u306e\u7d5e\u308a\u8fbc\u307f\uff1a\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u3068\u305d\u306e\u4e0a\u5c64\u30b0\u30eb\u30fc\u30d7\u306e\u4e21\u65b9\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u9805\u76ee\u3092\u8868\u793a
-
-Refresh_view=\u8868\u793a\u3092\u66f4\u65b0
-
-Regular_Expression=\u6b63\u898f\u8868\u73fe
-
-Remember_these_entry_types?=\u3053\u308c\u3089\u306e\u9805\u76ee\u578b\u3092\u8a18\u61b6\u3057\u307e\u3059\u304b\uff1f
-
-Remote_operation=\u30ea\u30e2\u30fc\u30c8\u64cd\u4f5c
-
-Remote_server_port=\u30ea\u30e2\u30fc\u30c8\u30b5\u30fc\u30d0\u30fc\u306e\u30dd\u30fc\u30c8
-
-Remove=\u524a\u9664
-
-Remove_all?=\u3059\u3079\u3066\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
-
-Remove_all_subgroups=\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664
-
-Remove_all_subgroups_of_"%0"?=\u300c%0\u300d\u306e\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u3059\u3079\u3066\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
-
-Remove_double_braces_around_BibTeX_fields_when_loading.=\u8aad\u307f\u8fbc\u307f\u6642\u306bBibTeX\u30d5\u30a3\u30fc\u30eb\u30c9\u5468\u56f2\u306e\u4e8c\u91cd\u6ce2\u62ec\u5f27\u3092\u53d6\u308a\u9664\u304f
-
-Remove_duplicates=\u91cd\u8907\u5206\u3092\u524a\u9664
-
-Remove_entry_from_import=\u8aad\u307f\u8fbc\u307f\u5206\u304b\u3089\u9805\u76ee\u3092\u524a\u9664
-
-Remove_entry_selection_from_this_group=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u9078\u629e\u9805\u76ee\u3092\u524a\u9664
-
-Remove_entry_type=\u9805\u76ee\u578b\u3092\u524a\u9664
-Remove_file_link_(DELETE)=\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u524a\u9664\uff08DELETE\uff09
-
-remove_from_group=\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u524a\u9664
-
-Remove_from_group=\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u524a\u9664
-
-Remove_group=\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664
-
-Remove_group,_keep_subgroups=\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664\u3057\u3001\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u306f\u7dad\u6301
-
-Remove_group_"%0"?=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
-
-Remove_group_"%0"_and_its_subgroups?=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3068\u305d\u306e\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
-
-remove_group_(keep_subgroups)=\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664\uff08\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u306f\u7dad\u6301\uff09
-
-remove_group_and_subgroups=\u30b0\u30eb\u30fc\u30d7\u3068\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664
-
-Remove_group_and_subgroups=\u30b0\u30eb\u30fc\u30d7\u3068\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664
-
-Remove_link=\u30ea\u30f3\u30af\u3092\u524a\u9664
-
-Remove_old_entry=\u65e7\u9805\u76ee\u3092\u524a\u9664
-
-Remove_selected_strings=\u9078\u629e\u3057\u305f\u6587\u5b57\u5217\u3092\u524a\u9664\u3059\u308b
-
-remove_string_=\u4ee5\u4e0b\u306e\u6587\u5b57\u5217\u3092\u524a\u9664:_
-
-Removed_group_"%0".=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u524a\u9664\u3057\u307e\u3057\u305f\u3002
-
-Removed_group_"%0"_and_its_subgroups.=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3068\u305d\u306e\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664\u3057\u307e\u3057\u305f\u3002
-
-Removed_string=\u6587\u5b57\u5217\u3092\u524a\u9664\u3057\u307e\u3057\u305f
-
-Renamed_string=\u6587\u5b57\u5217\u3092\u6539\u540d\u3057\u307e\u3057\u305f
-
-Replace=\u7f6e\u63db
-
-Replace_(regular_expression)=\u7f6e\u63db\u5bfe\u8c61\uff08\u6b63\u898f\u8868\u73fe\uff09
-
-Replace_string=\u6587\u5b57\u5217\u3092\u7f6e\u63db
-
-Replace_with=\u7f6e\u63db\u6587\u5b57\u5217
-
-Replaced=\u7f6e\u63db\u3057\u307e\u3057\u305f
-
-Required_fields=\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9
-
-Reset_all=\u3059\u3079\u3066\u30ea\u30bb\u30c3\u30c8
-Reset_file_type_definitons=\u30d5\u30a1\u30a4\u30eb\u578b\u5b9a\u7fa9\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u307e\u3057\u305f
-
-Resolve_strings_for_all_fields_except=\u6587\u5b57\u5217\u3092\u4ee5\u4e0b\u3092\u9664\u3044\u305f\u5168\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u5c55\u958b\u3059\u308b
-Resolve_strings_for_standard_BibTeX_fields_only=\u6587\u5b57\u5217\u3092BibTeX\u6a19\u6e96\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u306e\u307f\u5c55\u958b\u3059\u308b
-
-resolved=\u89e3\u6d88\u3057\u307e\u3057\u305f
-
-Results=\u7d50\u679c
-
-Revert_to_original_source=\u5143\u306e\u30bd\u30fc\u30b9\u306b\u5fa9\u5e30\u3059\u308b
-
-Review=\u8ad6\u8a55
-
-Review_changes=\u5909\u66f4\u3092\u691c\u67fb\u3059\u308b
-
-Right=\u53f3
-root=root
-
-Save=\u4fdd\u5b58
-Save_all_finished.=\u4fdd\u5b58\u304c\u3059\u3079\u3066\u7d42\u308f\u308a\u307e\u3057\u305f\u3002
-
-Save_all_open_databases=\u3059\u3079\u3066\u306e\u958b\u304b\u308c\u3066\u3044\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58
-
-Save_before_closing=\u9589\u3058\u308b\u524d\u306b\u4fdd\u5b58
-
-Save_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58
-Save_database_as_...=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58...
-
-Save_entries_in_their_original_order=\u9805\u76ee\u3092\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u9806\u5e8f\u3067\u4fdd\u5b58
-
-Save_failed=\u4fdd\u5b58\u306b\u5931\u6557
-
-Save_failed_during_backup_creation=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u4f5c\u6210\u4e2d\u306b\u4fdd\u5b58\u306b\u5931\u6557
-
-Save_failed_while_committing_changes=\u5909\u66f4\u3092\u30b3\u30df\u30c3\u30c8\u4e2d\u306b\u4fdd\u5b58\u306b\u5931\u6557
-
-Save_ordered_by_author/editor/year=author/editor/year\u3067\u6574\u5e8f\u3057\u3066\u4fdd\u5b58
-Save_selected_as_...=\u9078\u629e\u90e8\u306b\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58...
-
-Saved_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58\u3057\u307e\u3057\u305f
-
-Saved_selected_to=\u9078\u629e\u90e8\u3092\u4ee5\u4e0b\u306b\u4fdd\u5b58\u3057\u307e\u3057\u305f:
-
-Saved_session=\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u4fdd\u5b58\u3057\u307e\u3057\u305f
-
-Saving=\u4fdd\u5b58\u3057\u3066\u3044\u307e\u3059
-Saving_all_databases...=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u3059\u3079\u3066\u4fdd\u5b58\u3057\u3066\u3044\u307e\u3059...
-
-Saving_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58\u3057\u3066\u3044\u307e\u3059
-
-Scan=\u30b9\u30ad\u30e3\u30f3
-
-Search=\u691c\u7d22
-
-Search_All_Fields=\u5168\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u691c\u7d22
-
-Search_all_fields=\u5168\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u691c\u7d22
-
-Search_error=\u691c\u7d22\u30a8\u30e9\u30fc
-
-Search_expression=\u691c\u7d22\u8868\u73fe
-
-Search_for=\u691c\u7d22\u5bfe\u8c61
-
-Search_general_fields=\u6c4e\u7528\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u691c\u7d22
-
-Search_IEEEXplore=IEEEXplore\u3092\u691c\u7d22
-Search_IEEExplore=IEEEXplore\u3092\u691c\u7d22
-
-Search_optional_fields=\u975e\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u691c\u7d22
-
-Search_required_fields=\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u691c\u7d22
-
-Search_Specified_Field(s)=\u6307\u5b9a\u3057\u305f\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u691c\u7d22
-
-Searched_database._Global_number_of_hits=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u691c\u7d22\u3057\u307e\u3057\u305f\u3002\u5168\u4f53\u306e\u8a72\u5f53\u6570
-
-Searched_database._Number_of_hits=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u691c\u7d22\u3057\u307e\u3057\u305f\u3002\u8a72\u5f53\u6570
-
-Searching_for_%0_file=%0\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3057\u3066\u3044\u307e\u3059
-
-Searching_for_duplicates...=\u91cd\u8907\u3092\u691c\u7d22\u3057\u3066\u3044\u307e\u3059...
-
-Searching_for_files=\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3057\u3066\u3044\u307e\u3059
-
-Secondary_sort_criterion=\u7b2c\u4e8c\u6574\u5e8f\u57fa\u6e96
-
-Select=\u9078\u629e
-
-Select_a_Zip-archive=Zip\u66f8\u5eab\u3092\u9078\u629e
-
-Select_action=\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u9078\u629e
-
-Select_all=\u3059\u3079\u3066\u9078\u629e
-
-Select_Classpath_of_New_Importer=\u65b0\u3057\u3044\u8aad\u307f\u8fbc\u307f\u306e\u30af\u30e9\u30b9\u30d1\u30b9\u3092\u9078\u629e
-
-Select_encoding=\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u9078\u629e
-
-Select_entries_in_group_selection=\u30b0\u30eb\u30fc\u30d7\u9078\u629e\u306b\u3042\u308b\u9805\u76ee\u3092\u9078\u629e\u3059\u308b
-
-Select_entry_type=\u9805\u76ee\u578b\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-Select_external_application=\u5916\u90e8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u9078\u629e
-
-Select_file_from_ZIP-archive=ZIP\u66f8\u5eab\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-
-Select_format=\u66f8\u5f0f\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-Select_icon=\u30a2\u30a4\u30b3\u30f3\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-
-Select_matches=\u4e00\u81f4\u3057\u305f\u3082\u306e\u3092\u9078\u629e
-
-Select_new_ImportFormat_Subclass=\u65b0\u3057\u3044ImportFormat\u30b5\u30d6\u30af\u30e9\u30b9\u3092\u9078\u629e
-
-Select_the_tree_nodes_to_view_and_accept_or_reject_changes=\u30c4\u30ea\u30fc\u30ce\u30fc\u30c9\u3092\u9078\u629e\u3057\u3066\u8868\u793a\u3055\u305b\u3001\u5909\u66f4\u3092\u53d7\u8afe\u306a\u3044\u3057\u62d2\u5426\u3057\u3066\u304f\u3060\u3055\u3044
-Selected_entries=\u9078\u629e\u3057\u305f\u9805\u76ee
-
-Selector_enabled_fields=\u30bb\u30ec\u30af\u30bf\u304c\u6709\u52b9\u306b\u3057\u305f\u30d5\u30a3\u30fc\u30eb\u30c9
-Server_Hostname_\:=\u30b5\u30fc\u30d0\u30fc\u30db\u30b9\u30c8\u540d:
-Server_Type_\:=\u30b5\u30fc\u30d0\u30fc\u578b:
-Set_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a
-Set_fields=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a
-
-Set_general_fields=\u6c4e\u7528\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a
-Set_main_external_file_directory=\u4e3b\u5e79\u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044
-
-Set_table_font=\u8868\u30d5\u30a9\u30f3\u30c8\u3092\u8a2d\u5b9a
-
-Settings=\u8a2d\u5b9a
-
-Setup_selectors=\u9078\u629e\u30e1\u30cb\u30e5\u30fc\u3092\u8a2d\u5b9a
-
-Short_form=\u77ed\u7e2e\u5f62
-
-Shortcut=\u77ed\u7d61
-
-Show/edit_BibTeX_source=BibTeX\u30bd\u30fc\u30b9\u3092\u8868\u793a\u30fb\u7de8\u96c6
-
-Show_'Firstname_Lastname'=\u300c\u540d_\u59d3\u300d\u3068\u8868\u793a
-
-Show_'Lastname,_Firstname'=\u300c\u59d3,_\u540d\u300d\u3068\u8868\u793a
-
-Show_BibTeX_source_by_default=\u65e2\u5b9a\u3067BibTeX\u30bd\u30fc\u30b9\u3092\u8868\u793a
-
-Show_BibTeX_source_panel=BibTeX\u30bd\u30fc\u30b9\u30d1\u30cd\u30eb\u3092\u8868\u793a
-
-Show_confirmation_dialog_when_deleting_entries=\u9805\u76ee\u3092\u524a\u9664\u3059\u308b\u969b\u306b\u78ba\u8a8d\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u8868\u793a
-
-Show_description=\u8aac\u660e\u3092\u8868\u793a
-
-Show_dynamic_groups_in_<i>italics</i>=\u52d5\u7684\u30b0\u30eb\u30fc\u30d7\u3092<i>\u30a4\u30bf\u30ea\u30c3\u30af\u4f53</i>\u3067\u8868\u793a
-
-Show_entries_*not*_in_group_selection=\u30b0\u30eb\u30fc\u30d7\u9078\u629e\u306b\u300c\u306a\u3044\u300d\u9805\u76ee\u3092\u8868\u793a\u3059\u308b
-
-Show_file_column=\u30d5\u30a1\u30a4\u30eb\u5217\u3092\u8868\u793a
-
-Show_icons_for_groups=\u30b0\u30eb\u30fc\u30d7\u306b\u30a2\u30a4\u30b3\u30f3\u3092\u8868\u793a
-Show_last_names_only=\u59d3\u306e\u307f\u3092\u8868\u793a\u3059\u308b
-
-Show_names_unchanged=\u6c0f\u540d\u3092\u305d\u306e\u307e\u307e\u8868\u793a
-
-Show_one_less_rows=\u8868\u793a\u3092\u4e00\u884c\u5206\u72ed\u3081\u308b
-
-Show_one_more_row=\u8868\u793a\u3092\u4e00\u884c\u5206\u5e83\u3052\u308b
-
-Show_optional_fields=\u975e\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8868\u793a
-
-Show_PDF/PS_column=PDF/PS\u5217\u3092\u8868\u793a
-
-Show_required_fields=\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8868\u793a
-
-Show_URL/DOI_column=URL/DOI\u5217\u3092\u8868\u793a
-
-Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u304c\u5165\u529b\u3055\u308c\u305f\u969b\u306b\u8b66\u544a\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u8868\u793a
-
-Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=\u7a7a\u306eBibTeX\u30ad\u30fc\u304c\u5165\u529b\u3055\u308c\u305f\u969b\u306b\u8b66\u544a\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u8868\u793a
-
-Simple_HTML=\u5358\u7d14\u306aHTML
-
-Size=\u30b5\u30a4\u30ba
-
-Skip=\u30b9\u30ad\u30c3\u30d7
-Skipped_-_No_PDF_linked=\u8df3\u3070\u3057\u307e\u3057\u305f_-_PDF\u304c\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u307e\u305b\u3093
-Skipped_-_PDF_does_not_exist=\u8df3\u3070\u3057\u307e\u3057\u305f_-_PDF\u304c\u5b58\u5728\u3057\u307e\u305b\u3093
-
-Skipped_entry.=\u9805\u76ee\u3092\u8df3\u3070\u3057\u307e\u3057\u305f\u3002
-
-Sort_alphabetically=\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8\u9806\u306b\u6574\u5e8f
-
-Sort_Automatically=\u81ea\u52d5\u6574\u5e8f
-
-Sort_order=\u6574\u5e8f
-
-sort_subgroups=\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u6574\u5e8f
-
-Sorted_all_subgroups_recursively.=\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u3059\u3079\u3066\u518d\u5e30\u7684\u306b\u6574\u5e8f\u3057\u307e\u3057\u305f\u3002
-
-Sorted_immediate_subgroups.=\u76f4\u4e0b\u306e\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u6574\u5e8f\u3057\u307e\u3057\u305f\u3002
-
-source_edit=\u30bd\u30fc\u30b9\u306e\u7de8\u96c6
-Special_Name_Formatters=\u540d\u524d\u306e\u6574\u5f62\u306e\u5b9a\u7fa9
-
-Special_table_columns=\u7279\u6b8a\u306a\u8868\u5217
-SQL_connection_established.=SQL\u63a5\u7d9a\u304c\u78ba\u7acb\u3057\u307e\u3057\u305f\u3002
-
-Start_incremental_search=\u9010\u8a9e\u691c\u7d22\u3092\u958b\u59cb
-
-Start_search=\u691c\u7d22\u3092\u958b\u59cb
-Starting_import=\u8aad\u307f\u8fbc\u307f\u3092\u958b\u59cb
-
-Statically_group_entries_by_manual_assignment=\u624b\u52d5\u5272\u308a\u5f53\u3066\u306b\u3088\u3063\u3066\u9759\u7684\u306b\u9805\u76ee\u3092\u30b0\u30eb\u30fc\u30d7\u5316
-
-Status=\u72b6\u614b
-
-Stop=\u505c\u6b62
-
-Store_journal_abbreviations=\u5b66\u8853\u8a8c\u540d\u306e\u77ed\u7e2e\u5f62\u3092\u4fdd\u7ba1
-
-Store_string=\u6587\u5b57\u5217\u3092\u4fdd\u7ba1
-
-Store_the_following_fields_with_braces_around_capital_letters=\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u3001\u5927\u6587\u5b57\u306e\u5468\u56f2\u3092\u4e2d\u62ec\u5f27\u3067\u56f2\u3063\u3066\u4fdd\u5b58
-
-Stored_entry=\u9805\u76ee\u3092\u4fdd\u7ba1
-
-Strings=\u6587\u5b57\u5217
-
-Strings_for_database=\u53f3\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u7528\u3044\u308b\u6587\u5b57\u5217
-
-Subdatabase_from_aux=aux\u304b\u3089\u526f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
-
-Suggest=\u5019\u88dc
-
-Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=\u5b66\u8853\u8a8c\u540d\u304c\u65e2\u77e5\u306e\u5834\u5408\u306f\u3001\u5b8c\u5168\u306a\u5b66\u8853\u8a8c\u540d\u3068\u77ed\u7e2e\u5f62\u3092\u5207\u308a\u66ff\u3048\u308b\u3002
-
-Synchronize_%0_links=%0\u30ea\u30f3\u30af\u3092\u540c\u671f
-Synchronize_file_links=\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u540c\u671f
-
-Synchronizing_%0_links...=%0\u30ea\u30f3\u30af\u3092\u540c\u671f...
-
-Table_appearance=\u8868\u306e\u5916\u89b3
-
-Table_background_color=\u8868\u306e\u80cc\u666f\u8272
-
-Table_grid_color=\u8868\u306e\u7f6b\u7dda\u8272
-
-Table_text_color=\u8868\u306e\u6587\u5b57\u8272
-
-Tabname=\u30bf\u30d6\u540d
-Target_file_cannot_be_a_directory.=\u30bf\u30fc\u30b2\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u3042\u3063\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
-
-Tertiary_sort_criterion=\u7b2c\u4e09\u6574\u5e8f\u57fa\u6e96
-
-Test=\u78ba\u8a8d
-
-Text_Input_Area=\u30c6\u30ad\u30b9\u30c8\u3092\u3053\u3053\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044
-
-The_#_character_is_not_allowed_in_BibTeX_fields=#\u6587\u5b57\u306fBibTeX\u30d5\u30a3\u30fc\u30eb\u30c9\u4e2d\u3067\u306f\u4f7f\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
-
-The_chosen_date_format_for_new_entries_is_not_valid=\u65b0\u898f\u9805\u76ee\u306b\u9078\u629e\u3057\u305f\u65e5\u4ed8\u66f8\u5f0f\u306f\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=\u9078\u629e\u3057\u305f\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u300c%0\u300d\u306f\u3001\u4ee5\u4e0b\u306e\u6587\u5b57\u3092\u30a8\u30f3\u30b3\u30fc\u30c9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:_
-
-The_CiteSeer_fetch_operation_returned_zero_results.=CiteSeerX\u304b\u3089\u306e\u53d6\u5f97\u64cd\u4f5c\u306f\u3001\u8a72\u5f530\u4ef6\u3068\u56de\u7b54\u3057\u307e\u3057\u305f\u3002
-
-
-The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=\u73fe\u5728\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u3001\u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30ea\u30f3\u30af\u3092\u53d6\u308a\u6271\u3046\u306e\u306b\u65b0\u3057\u3044\u65b9\u6cd5\u3092\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002<br>\u3053\u308c\u3092\u5229\u [...]
-
-the_field_<b>%0</b>=\u30d5\u30a3\u30fc\u30eb\u30c9<b>%0</b>
-
-The_file<BR>'%0'<BR>has_been_modified<BR>externally!=\u30d5\u30a1\u30a4\u30eb<BR>'%0'<BR>\u306f\u5916\u90e8\u304b\u3089<BR>\u4fee\u6b63\u3055\u308c\u307e\u3057\u305f\uff01
-
-The_group_"%0"_already_contains_the_selection.=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u306b\u306f\u65e2\u306b\u9078\u629e\u3057\u305f\u3082\u306e\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
-
-The_label_of_the_string_can_not_be_a_number.=\u6587\u5b57\u5217\u306e\u30e9\u30d9\u30eb\u306f\u6570\u5b57\u3067\u3042\u3063\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
-
-The_label_of_the_string_can_not_contain_spaces.=\u6587\u5b57\u5217\u306e\u30e9\u30d9\u30eb\u306b\u306f\u30b9\u30da\u30fc\u30b9\u3092\u5165\u308c\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
-
-The_label_of_the_string_can_not_contain_the_'#'_character.=\u6587\u5b57\u5217\u306e\u30e9\u30d9\u30eb\u306b\u306f\u300c#\u300d\u6587\u5b57\u3092\u5165\u308c\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
-
-The_output_option_depends_on_a_valid_import_option.=\u3053\u306e\u51fa\u529b\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3001\u6709\u52b9\u306a\u8aad\u307f\u8fbc\u307f\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=\u3053\u306ePDF\u306f\u3001BibTeX\u30ec\u30b3\u30fc\u30c9\u3092\u542b\u3093\u3067\u3044\u307e\u3059\u3002\n\u3053\u308c\u3089\u3092\u3001\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u65b0\u898f\u9805\u76ee\u3068\u3057\u3066\u8aad\u307f\u8fbc\u307f\u307e\u3059\u304b\uff1f
-
-The_regular_expression_<b>%0</b>_is_invalid%c=\u6b63\u898f\u8868\u73fe<b>%0</b>\u306f\u7121\u52b9\u3067\u3059%c
-
-The_search_is_case_insensitive.=\u691c\u7d22\u306f\u5927\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3057\u307e\u305b\u3093\u3002
-
-The_search_is_case_sensitive.=\u691c\u7d22\u306f\u5927\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3057\u307e\u3059\u3002
-
-The_string_has_been_removed_locally=\u6587\u5b57\u5217\u306f\u30ed\u30fc\u30ab\u30eb\u3067\u524a\u9664\u3055\u308c\u307e\u3057\u305f
-
-There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=\u89e3\u6d88\u3055\u308c\u3066\u3044\u306a\u3044\u91cd\u8907\u3068\u601d\u308f\u308c\u308b\u3082\u306e\u304c\u5b58\u5728\u3057\u307e\u3059\uff08\u300cD\u300d\u30a2\u30a4\u30b3\u30f3\u3067\u30de\u30fc\u30af\u3055\u308c\u3066\u3044\u307e\u3059\uff09\u3002\u5148\u306b\u9032\u307f\u307e\u3059\u304b\uff1f
-
-this_button_will_update=\u3053\u306e\u30dc\u30bf\u30f3\u306f\u53f3\u306e\u3082\u306e\u3092\u66f4\u65b0\u3057\u307e\u3059
-This_database_was_written_using_an_older_version_of_JabRef.=\u3053\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u3001JabRef\u65e7\u7248\u3092\u4f7f\u7528\u3057\u3066\u66f8\u304d\u8fbc\u307e\u308c\u3066\u3044\u307e\u3059\u3002
-
-This_entry_has_no_BibTeX_key._Generate_key_now?=\u3053\u306e\u9805\u76ee\u306b\u306fBibTeX\u30ad\u30fc\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u3044\u307e\u751f\u6210\u3057\u307e\u3059\u304b\uff1f
-
-This_entry_is_incomplete=\u3053\u306e\u9805\u76ee\u306f\u4e0d\u5b8c\u5168\u3067\u3059
-
-This_entry_type_cannot_be_removed.=\u3053\u306e\u9805\u76ee\u578b\u306f\u89e3\u6d88\u3067\u304d\u307e\u305b\u3093\u3002
-
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=\u3053\u306e\u5916\u90e8\u30ea\u30f3\u30af\u306f\u300c%0\u300d\u578b\u3067\u3059\u304c\u3001\u3053\u308c\u306f\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u3069\u3046\u3057\u307e\u3059\u304b\uff1f
-
-This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306f\u3001\u624b\u52d5\u5272\u308a\u5f53\u3066\u306b\u3088\u308b\u9805\u76ee\u3 [...]
-
-This_group_contains_entries_in_which=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u9805\u76ee\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059
-
-This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u306f\u3001\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u3069\u308c\u304b\u306b\u6b63\u898f\u8868\u73fe<b>%0</b>\u3092\u542b\u3093\u3067\u3044\u308b\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\u3002
-
-This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u306f\u3001\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u3069\u308c\u304b\u306b\u7528\u8a9e<b>%0</b>\u3092\u542b\u3093\u3067\u3044\u308b\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\u3002
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u306f\u3001<b>%0</b>\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30ad\u30fc\u30ef\u30fc\u30c9<b>%1</b>\u3092\u542b\u3093\u3067\u3044\u308b\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\u3002
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u306f\u3001<b>%0</b>\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u6b63\u898f\u8868\u73fe<b>%1</b>\u3092\u542b\u3093\u3067\u3044\u308b\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\u3002
-
-This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=\u3053\u308c\u306f\u3001\u901a\u5e38\u306e\u30c6\u30ad\u30b9\u30c8\u304b\u3089\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8aad\u307f\u8fbc\u3080\u305f\u3081\u306e\u3001\u30b3\u30d4\u30fc\u30a2\u30f3\u30c9\u30da\u30fc\u30b9\u30c8\u7528\u30c0\u30a4\u30a2\u30ed\u30b0\u3067\u3059\u3002
-This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u3053\u308c\u3092\u6709\u52b9\u306b\u3059\u308b\u3068\u3001JabRef\u306f\u5404%0\u30ea\u30f3\u30af\u3092\u8abf\u3079\u3001\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u304b\u3069\u3046\u304b\u78ba\u8a8d\u3057\u307e\u3059\u3002<BR>\u3082\u3057\u5b58\u5728\u3057\u306a\u3051\u308c\u3070\u3001\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u9078\u629e\u80a2\u [...]
-
-This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=\u3053\u306e\u64cd\u4f5c\u3092\u884c\u3046\u306b\u306f\u3001\u9078\u629e\u3055\u308c\u305f\u5168\u9805\u76ee\u306bBibTeX\u30ad\u30fc\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-This_operation_requires_at_least_one_entry.=\u3053\u306e\u64cd\u4f5c\u3092\u884c\u3046\u306b\u306f\u30011\u3064\u4ee5\u4e0a\u306e\u9805\u76ee\u304c\u5fc5\u8981\u3067\u3059\u3002
-
-This_operation_requires_one_or_more_entries_to_be_selected.=\u3053\u306e\u64cd\u4f5c\u3092\u884c\u3046\u306b\u306f\u30011\u3064\u4ee5\u4e0a\u306e\u9805\u76ee\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=\u3053\u306e\u64cd\u4f5c\u306f\u3001\u5916\u90e8\u30ea\u30f3\u30af\u3092\u3059\u3079\u3066\u3001\u300cpdf\u300d\u304a\u3088\u3073\u300cps\u300d\u30d5\u30a3\u30fc\u30eb\u30c9\u304b\u3089\u300c%0\u300d\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002\u7d9a\u3051\u307e\u3059\u304b\uff1f
-
-To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001<B>\u30aa\u30d7\u30b7\u30e7\u30f3\u2192\u5b66\u8853\u8a8c\u7565\u8a9e\u306e\u7ba1\u7406</B>\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-Toggle_abbreviation=\u77ed\u7e2e\u5f62/\u975e\u77ed\u7e2e\u5f62\u306e\u5207\u66ff
-Toggle_entry_preview=\u9805\u76ee\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u5165\u5207
-Toggle_groups_interface=\u30b0\u30eb\u30fc\u30d7\u5236\u5fa1\u76e4\u3092\u5165\u5207
-Toggle_search_panel=\u691c\u7d22\u30d1\u30cd\u30eb\u3092\u5165\u5207
-
-Try_different_encoding=\u5225\u306e\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u8a66\u3059
-
-Type_set_to_'other'=\u578b\u3092\u300cother\u300d\u306b\u8a2d\u5b9a\u3057\u307e\u3057\u305f
-Unabbreviate_journal_names_of_the_selected_entries=\u9078\u629e\u3057\u305f\u9805\u76ee\u306e\u8a8c\u540d\u3092\u975e\u77ed\u7e2e\u5f62\u306b\u3059\u308b
-Unabbreviated_%0_journal_names.=%0\u500b\u306e\u8a8c\u540d\u3092\u975e\u77ed\u7e2e\u5f62\u306b\u3057\u307e\u3057\u305f
-
-unable_to_access_LyX-pipe=LyX\u30d1\u30a4\u30d7\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093
-
-Unable_to_create_graphical_interface=\u30b0\u30e9\u30d5\u30a3\u30ab\u30eb\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
-
-Unable_to_open_file.=\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=\u30ea\u30f3\u30af\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u578b\u300c%1\u300d\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u300c%0\u300d\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-Unable_to_read_default_icon_theme.=\u65e2\u5b9a\u30a2\u30a4\u30b3\u30f3\u30c6\u30fc\u30de\u3092\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-Unable_to_read_icon_theme_file=\u30a2\u30a4\u30b3\u30f3\u30c6\u30fc\u30de\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
-
-unable_to_write_to=\u4ee5\u4e0b\u306b\u66f8\u304d\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:
-Undefined_file_type=\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u578b
-
-Undo=\u53d6\u308a\u6d88\u3057
-
-Union=\u8ad6\u7406\u548c
-
-Unknown_bibtex_entries=\u8a8d\u8b58\u3055\u308c\u306a\u304b\u3063\u305fBibTeX\u9805\u76ee
-
-unknown_edit=\u77e5\u3089\u306a\u3044\u7de8\u96c6
-
-unknown_entry_type=\u77e5\u3089\u306a\u3044\u9805\u76ee\u578b\u3067\u3059
-
-Unknown_export_format=\u77e5\u3089\u306a\u3044\u66f8\u304d\u51fa\u3057\u66f8\u5f0f\u3067\u3059
-
-Unmark_all=\u3059\u3079\u3066\u306e\u30de\u30fc\u30af\u3092\u89e3\u9664
-
-Unmark_entries=\u9805\u76ee\u306e\u30de\u30fc\u30af\u3092\u5916\u3059
-
-Unmark_entry=\u9805\u76ee\u306e\u30de\u30fc\u30af\u3092\u5916\u3059
-
-Unmarked_selected=\u9078\u629e\u3057\u305f\u3082\u306e\u306e\u30de\u30fc\u30af\u3092\u5916\u3057\u307e\u3057\u305f:
-
-Unpack_EndNote_filter_set=EndNote\u30d5\u30a3\u30eb\u30bf\u30bb\u30c3\u30c8\u3092\u89e3\u51cd
-
-Unpacked_file.=\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u51cd\u3057\u307e\u3057\u305f\u3002
-
-Unsupported_version_of_class_%0\:_%1=\u30af\u30e9\u30b9%0\u306e\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u7248:_%1
-
-untitled=\u30bf\u30a4\u30c8\u30eb\u306a\u3057
-
-Up=\u4e0a
-
-Update_to_current_column_widths=\u73fe\u5728\u306e\u5217\u5e45\u306b\u66f4\u65b0
-
-Updated_group_selection=\u30b0\u30eb\u30fc\u30d7\u9078\u629e\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f
-Upgrade_external_links=\u5916\u90e8\u30ea\u30f3\u30af\u3092\u66f4\u65b0
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=\u5916\u90e8PDF/PS\u30ea\u30f3\u30af\u3092\u300c%0\u300d\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u66f4\u65b0
-Upgrade_file=\u30d5\u30a1\u30a4\u30eb\u3092\u66f4\u65b0
-Upgrade_old_external_file_links_to_use_the_new_feature=\u53e4\u3044\u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u65b0\u6a5f\u80fd\u3092\u5229\u7528\u3059\u308b\u3088\u3046\u306b\u66f4\u65b0
-Upgraded_links.=\u30ea\u30f3\u30af\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f\u3002
-UPPER=UPPER
-Upper_Each_First=Upper_Each_First
-Upper_first=Upper_first
-
-usage=\u4f7f\u7528\u6cd5
-
-Use_antialiasing_font=\u30a2\u30f3\u30c1\u30a8\u30a4\u30ea\u30a2\u30b9\u30d5\u30a9\u30f3\u30c8\u3092\u4f7f\u7528\u3059\u308b
-Use_autocompletion_for_the_following_fields=\u53f3\u8a18\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u81ea\u52d5\u88dc\u5b8c\u3092\u4f7f\u7528
-Use_custom_icon_theme=\u500b\u4eba\u8a2d\u5b9a\u306e\u30a2\u30a4\u30b3\u30f3\u30c6\u30fc\u30de\u3092\u4f7f\u7528
-Use_default_viewer=\u65e2\u5b9a\u30d3\u30e5\u30fc\u30a2\u3092\u4f7f\u7528
-
-Use_inspection_window_also_when_a_single_entry_is_imported.=\u9805\u76ee\u304c\u3072\u3068\u3064\u3060\u3051\u8aad\u307f\u8fbc\u307e\u308c\u305f\u3068\u304d\u306b\u3082\u7cbe\u67fb\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u4f7f\u7528\u3059\u308b
-Use_native_file_dialog=\u30cd\u30a4\u30c6\u30a3\u30d6\u306a\u30d5\u30a1\u30a4\u30eb\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u4f7f\u7528
-
-Use_other_look_and_feel=\u5225\u306e\u30eb\u30c3\u30af\u30a2\u30f3\u30c9\u30d5\u30a3\u30fc\u30eb\u3092\u4f7f\u7528\u3059\u308b
-Use_Regular_Expression_Search=\u6b63\u898f\u8868\u73fe\u691c\u7d22\u3092\u4f7f\u7528
-
-Use_regular_expressions=\u6b63\u898f\u8868\u73fe\u3092\u4f7f\u7528
-
-Use_the_following_delimiter_character(s)=\u53f3\u306e\u533a\u5207\u308a\u6587\u5b57\u3092\u4f7f\u7528
-Username_\:=\u30e6\u30fc\u30b6\u30fc\u540d:
-
-Value_cleared_externally=\u5916\u90e8\u304b\u3089\u5024\u304c\u6d88\u53bb\u3055\u308c\u307e\u3057\u305f
-
-Value_set_externally=\u5916\u90e8\u304b\u3089\u5024\u304c\u8a2d\u5b9a\u3055\u308c\u307e\u3057\u305f
-
-verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=LyX\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u3066\u3001lyxpipe\u304c\u6709\u52b9\u3068\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044
-
-View=\u8868\u793a
-Vim_Server_Name=Vim\u30b5\u30fc\u30d0\u30fc\u540d
-
-Waiting_for_ArXiv...=ArXiv\u306e\u5fdc\u7b54\u3092\u5f85\u3063\u3066\u3044\u307e\u3059...
-
-Warn_about_unresolved_duplicates_when_closing_inspection_window=\u7cbe\u67fb\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u308b\u969b\u306b\u89e3\u6d88\u3055\u308c\u3066\u3044\u306a\u3044\u91cd\u8907\u9805\u76ee\u306b\u5bfe\u3057\u3066\u8b66\u544a\u3059\u308b
-
-Warn_before_overwriting_existing_keys=\u65e2\u5b58\u306e\u30ad\u30fc\u3092\u4e0a\u66f8\u304d\u3059\u308b\u524d\u306b\u8b66\u544a
-
-Warning=\u8b66\u544a
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=\u8b66\u544a:_\u30d5\u30a1\u30a4\u30eb\u4fee\u5fa9\u3092\u5b8c\u9042\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u306f\u7834\u640d\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8
-
-Warning_there_is_a_duplicate_key=\u8b66\u544a:_\u91cd\u8907\u30ad\u30fc\u304c\u3042\u308a\u307e\u3059
-
-Warnings=\u8b66\u544a
-
-web_link=\u30a6\u30a7\u30d6\u30ea\u30f3\u30af
-
-What_do_you_want_to_do?=\u3069\u3046\u3057\u307e\u3059\u304b\uff1f
-
-When_adding/removing_keywords,_separate_them_by=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u8ffd\u52a0\u30fb\u524a\u9664\u3059\u308b\u969b\u3001\u305d\u308c\u3089\u3092\u4ee5\u4e0b\u306e\u6587\u5b57\u3067\u533a\u5207\u308b
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=\u9078\u629e\u3057\u305f\u9805\u76ee\u304b\u3089\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u308bPDF\u306bXMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u307f\u307e\u3059\u3002
-
-with=with
-
-Word=Word
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=PDF\u306bBibtexEntry\u3092XMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3068\u3057\u3066\u66f8\u304d\u8fbc\u3080\u3002
-
-Write_XMP=XMP\u3092\u66f8\u304d\u8fbc\u3080
-Write_XMP-metadata=XMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u3080
-Write_XMP-metadata_for_all_PDFs_in_current_database?=\u73fe\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u5168PDF\u306bXMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u307f\u307e\u3059\u304b\uff1f
-Writing_XMP=XMP\u3092\u66f8\u304d\u8fbc\u3093\u3067\u3044\u307e\u3059
-Writing_XMP_metadata...=XMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u3093\u3067\u3044\u307e\u3059...
-Writing_XMP_metadata_for_selected_entries...=\u9078\u629e\u3057\u305f\u9805\u76ee\u306bXMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u3093\u3067\u3044\u307e\u3059...
-Writing_XMP_to_'%0'...=\u300c%0\u300d\u306bXMP\u3092\u66f8\u304d\u8fbc\u3093\u3067\u3044\u307e\u3059...
-
-Wrong_file_format=\u8aa4\u3063\u305f\u30d5\u30a1\u30a4\u30eb\u66f8\u5f0f\u3067\u3059
-
-Wrote_XMP-metadata=XMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u307f\u307e\u3057\u305f
-Wrote_XMP_to_'%0'.=XMP\u3092\u300c%0\u300d\u306b\u66f8\u304d\u8fbc\u307f\u307e\u3057\u305f\u3002
-
-XMP-annotated_PDF=XMP\u6ce8\u91c8\u4ed8\u304dPDF
-XMP_Export_Privacy_Settings=XMP\u66f8\u304d\u51fa\u3057\u306e\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u8a2d\u5b9a
-XMP_metadata=XMP\u30e1\u30bf\u30c7\u30fc\u30bf
-XMP_metadata_found_in_PDF\:_%0=PDF\u4e2d\u306bXMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u691c\u51fa\u3057\u307e\u3057\u305f:_%0
-You_must_restart_JabRef_for_this_to_come_into_effect.=
-You_have_changed_the_language_setting.=\u8a00\u8a9e\u8a2d\u5b9a\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u3002
-You_have_changed_the_look_and_feel_setting.=\u6982\u89b3\u306e\u8a2d\u5b9a\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u3002\uff51
-
-You_have_cleared_this_field._Original_value=\u3053\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u6d88\u53bb\u3057\u307e\u3057\u305f\u3002\u5143\u306e\u5024
-
-You_have_entered_an_invalid_search_'%0'.=\u7121\u52b9\u306a\u691c\u7d22\u300c%0\u300d\u3092\u5165\u529b\u3057\u307e\u3057\u305f\u3002
-
-You_must_choose_a_file_name_to_store_journal_abbreviations=\u8a8c\u540d\u77ed\u7e2e\u5f62\u3092\u4fdd\u7ba1\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u9078\u3070\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093
-
-You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=\u65b0\u3057\u3044\u30ad\u30fc\u5272\u308a\u5f53\u3066\u304c\u6b63\u3057\u304f\u6a5f\u80fd\u3059\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u306b\u306f\u3001JabRef\u3092\u518d\u8d77\u52d5\u3057\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
-
-You_must_set_both_BibTeX_key_and_%0_directory=BibTeX\u30ad\u30fc\u3068%0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e21\u65b9\u3092\u8a2d\u5b9a\u3057\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093
-
-Your_new_key_bindings_have_been_stored.=\u65b0\u3057\u3044\u30ad\u30fc\u5272\u308a\u5f53\u3066\u304c\u4fdd\u7ba1\u3055\u308c\u307e\u3057\u305f\u3002
-
-
-The_following_fetchers_are_available\:=\u4ee5\u4e0b\u306e\u53d6\u5f97\u5b50\u304c\u4f7f\u7528\u3067\u304d\u307e\u3059:
-Could_not_find_fetcher_'%0'=\u53d6\u5f97\u5b50\u300c%0\u300d\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f
-Running_Query_'%0'_with_fetcher_'%1'.=\u53d6\u5f97\u5b50\u300c%1\u300d\u3092\u4f7f\u7528\u3057\u3066\u3001\u30af\u30a8\u30ea\u300c%0\u300d\u3092\u5b9f\u884c\u3057\u3066\u3044\u307e\u3059\u3002
-Please_wait!=\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\uff01
-Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=\u53d6\u5f97\u5b50\u300c%1\u300d\u3092\u4f7f\u7528\u3057\u305f\u30af\u30a8\u30ea\u300c%0\u300d\u306f\u3001\u7d50\u679c\u3092\u4f55\u3082\u8fd4\u3057\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-Open_SPIRES_entry=SPIRES\u9805\u76ee\u3092\u958b\u304f
-Move/Rename_file=\u30d5\u30a1\u30a4\u30eb\u306e\u79fb\u52d5\u30fb\u6539\u540d
-File_moved=\u30d5\u30a1\u30a4\u30eb\u3092\u79fb\u52d5\u3057\u307e\u3057\u305f
-Move_file_failed=\u30d5\u30a1\u30a4\u30eb\u306e\u79fb\u52d5\u306b\u5931\u6557
-Could_not_move_file=\u30d5\u30a1\u30a4\u30eb\u3092\u79fb\u52d5\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
-Could_not_find_file_'%0'.=\u30d5\u30a1\u30a4\u30eb\u300c%0\u300d\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-Move/rename_file=\u30d5\u30a1\u30a4\u30eb\u306e\u79fb\u52d5\u30fb\u6539\u540d
-Number_of_entries_successfully_imported=\u8aad\u307f\u8fbc\u307f\u306b\u6210\u529f\u3057\u305f\u9805\u76ee\u6570
-Import_canceled_by_user=\u8aad\u307f\u8fbc\u307f\u306f\u30e6\u30fc\u30b6\u30fc\u306b\u3088\u3063\u3066\u53d6\u308a\u6d88\u3055\u308c\u307e\u3057\u305f
-Progress\:_%0_of_%1=\u9032\u6357\u72b6\u6cc1:_%1\u306e\u3046\u3061%0
-Error_while_fetching_from_JSTOR=JSTOR\u304b\u3089\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f
-
-Fetching_Medline_by_id...=Medline\u304b\u3089ID\u9806\u3067\u53d6\u5f97\u4e2d...
-
-Fetching_Medline_by_term...=Medline\u304b\u3089term\u9806\u3067\u53d6\u5f97\u4e2d...
-Medline_import_canceled=Medline\u304b\u3089\u306e\u8aad\u307f\u8fbc\u307f\u3092\u53d6\u308a\u6d88\u3057\u307e\u3057\u305f
-Please_enter_a_valid_number=\u6709\u52b9\u306a\u6570\u5024\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
-Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=\u30b3\u30f3\u30de\u533a\u5207\u308a\u3067Medline_ID_(\u756a\u53f7)\u306a\u3044\u3057\u306f\u691c\u7d22\u9805\u76ee\u306e\u4e00\u89a7\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=SPIRES\u30bd\u30fc\u30b9\u304b\u3089\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f_(%0):
-Error_while_fetching_from_Spires\:_=Spires\u304b\u3089\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f\:_
-Connect_to_external_SQL_database=\u5916\u90e8SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a
-Export_to_external_SQL_database=\u5916\u90e8SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u66f8\u304d\u51fa\u3059
-
-Show_results_in_dialog=\u7d50\u679c\u3092\u30c0\u30a4\u30a2\u30ed\u30b0\u306b\u8868\u793a
-Global_search=\u5927\u57df\u691c\u7d22
-Show_search_results_in_a_window=\u691c\u7d22\u7d50\u679c\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8868\u793a
-Search_results=\u7d50\u679c\u3092\u691c\u7d22
-Move_file_to_file_directory?=\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u307e\u3059\u304b\uff1f
-Rename_to_'%0'=\u300c%0\u300d\u306b\u6539\u540d
-Move_to_file_directory=\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5
-You_have_changed_the_menu_and_label_font_size.=
-
-Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u4fdd\u8b77\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5916\u90e8\u304b\u3089\u306e\u5909\u66f4\u3092\u691c\u67fb\u3057\u306a\u3044\u9650\u308a\u3001\u4fdd\u5b58\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-Protected_database=\u4fdd\u8b77\u3055\u308c\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
-Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=\u5916\u90e8\u304b\u3089\u306e\u5909\u66f4\u3092\u5be9\u67fb\u3059\u308b\u307e\u3067\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58\u3059\u308b\u3053\u3068\u3092\u62d2\u7d76\u3059\u308b
-Database_protection=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u4fdd\u8b77
-Unable_to_save_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
-
-BibTeX_key_generator=BibTeX\u30ad\u30fc\u306e\u751f\u6210
-Unable_to_open_link.=\u30ea\u30f3\u30af\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-Search_JSTOR=JSTOR\u3092\u691c\u7d22
-Attempting_SQL_import...=SQL\u304b\u3089\u306e\u8aad\u307f\u8fbc\u307f\u3092\u8a66\u307f\u3066\u3044\u307e\u3059...
-BibO_RDF=BibO_RDF
-HTML_parser=HTML\u304b\u3089\u89e3\u6790
-
-Move_the_keyboard_focus_to_the_entry_table=\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u30d5\u30a9\u30fc\u30ab\u30b9\u3092\u9805\u76ee\u8868\u306b\u79fb\u52d5
-MIME_type=MIME\u578b
-
-This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=\u3053\u306e\u6a5f\u80fd\u306f\u3001\u65b0\u898f\u30d5\u30a1\u30a4\u30eb\u3092\u3001\u65b0\u3057\u3044JabRef\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u958b\u304b\u306a\u3044\u3067\u3 [...]
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u306f\u3001\u5ec3\u6b62\u3055\u308c\u305f<b>pdf</b>\u30fb<b>ps</b>\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u307f\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<br>\u307b\u3068\u3093\u3069\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u3068\u3063\u3066\u306f\u3001\u4e0a\u306e<b>\u57fa\u672c\u30d5\u30a [...]
-Legacy_file_fields=\u5ec3\u6b62\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u30d5\u30a3\u30fc\u30eb\u30c9
-
-This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u3053\u308c\u3092\u6709\u52b9\u306b\u3059\u308b\u3068\u3001JabRef\u306f\u5404%0\u62e1\u5f35\u5b50\u3092\u8abf\u3079\u3001\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u304b\u3069\u3046\u304b\u78ba\u8a8d\u3057\u307e\u3059\u3002<BR>\u3082\u3057\u5b58\u5728\u3057\u306a\u3051\u308c\u3070\u3001\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u9078\u629e\u8 [...]
-Run_Fetcher,_e.g._"--fetch=Medline\:cancer"=\u53d6\u5f97\u5b50\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044,_\u4f8b:_"--fetch\=Medline\:cancer"
-
-The_ACM_Digital_Library=ACM\u30c7\u30b8\u30bf\u30eb\u30e9\u30a4\u30d6\u30e9\u30ea
-Reset=\u30ea\u30bb\u30c3\u30c8
-
-Use_IEEE_LaTeX_abbreviations=IEEE\u306eLaTeX\u7565\u8a9e\u3092\u4f7f\u7528
-The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
-Search_ACM_Portal=ACM_Portal\u3092\u691c\u7d22
-Connection_to_ACM_Portal_failed=ACM_Portal\u3078\u306e\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f
-
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u958b\u304f\u969b\u3001\u30ea\u30f3\u30af\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u3001\u4e00\u81f4\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3059\u308b
-Settings_for_%0=\u300c%0\u300d\u306e\u8a2d\u5b9a
-Insert_selected_citations_into_Vim=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092Vim\u306b\u633f\u5165
-RIS=RIS
-
-Assign_exclusively_to_group=\u6392\u4ed6\u7684\u306b\u30b0\u30eb\u30fc\u30d7\u306b\u5272\u308a\u5f53\u3066
-
-Bad_Request_'%0'.=\u4e0d\u6b63\u30ea\u30af\u30a8\u30b9\u30c8\u300c%0\u300d
-
-Mark_entries_imported_into_an_existing_database=\u65e2\u5b58\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8aad\u307f\u8fbc\u3093\u3060\u9805\u76ee\u3092\u30de\u30fc\u30af\u3059\u308b
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=\u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u65b0\u898f\u9805\u76ee\u3092\u8aad\u307f\u8fbc\u3080\u524d\u306b\u5168\u9805\u76ee\u306e\u30de\u30fc\u30af\u3092\u89e3\u9664\u3059\u308b
-
-Forward=\u9032\u3080
-Back=\u623b\u308b
-Sort_the_following_fields_as_numeric_fields=\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u6570\u5024\u30d5\u30a3\u30fc\u30eb\u30c9\u3068\u3057\u3066\u6574\u5e8f
-Line_%0\:_Found_corrupted_BibTeX-key.=%0\u884c\u3081\:_\u7834\u640d\u3057\u305fBibTeX\u30ad\u30fc\u3092\u767a\u898b\u3057\u307e\u3057\u305f\u3002
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=%0\u884c\u3081\:_\u7834\u640d\u3057\u305fBibTeX\u30ad\u30fc\u3092\u767a\u898b\u3057\u307e\u3057\u305f\uff08\u7a7a\u767d\u304c\u5165\u3063\u3066\u3044\u308b\uff09\u3002
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=%0\u884c\u3081\:_\u7834\u640d\u3057\u305fBibTeX\u30ad\u30fc\u3092\u767a\u898b\u3057\u307e\u3057\u305f\uff08\u30b3\u30f3\u30de\u304c\u6b20\u843d\uff09\u3002
-Finished_downloading_full_text_document=\u6587\u66f8\u672c\u4f53\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u304c\u7d42\u4e86\u3057\u307e\u3057\u305f
-Unable_to_find_full_text_document_in_the_linked_web_page.=\u30ea\u30f3\u30af\u5148\u306e\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u306b\u8ad6\u6587\u672c\u4f53\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-Connection_error_when_trying_to_find_full_text_document.=\u5b8c\u5168\u306a\u30c6\u30ad\u30b9\u30c8\u6587\u66f8\u3092\u691c\u7d22\u4e2d\u306b\u63a5\u7d9a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
-This_entry_provides_no_URL_or_DOI_links.=\u3053\u306e\u9805\u76ee\u306b\u306f\u3001URL\u3084DOI\u30ea\u30f3\u30af\u304c\u3042\u308a\u307e\u305b\u3093\u3002
-Full_text_article_download_failed=\u8ad6\u6587\u672c\u4f53\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f
-Update_to_current_column_order=\u73fe\u5728\u306e\u5217\u9806\u306b\u66f4\u65b0
-
-Rename_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u6539\u540d\u3057\u307e\u3057\u305f
-Set/clear/rename_fields=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a/\u6d88\u53bb/\u540d\u79f0\u5909\u66f4
-Rename_field_to\:=\u30d5\u30a3\u30fc\u30eb\u30c9\u540d\u3092\u4ee5\u4e0b\u306b\u5909\u66f4\:
-Move_contents_of_a_field_into_a_field_with_a_different_name=\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u5185\u5bb9\u3092\u5225\u540d\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u79fb\u52d5\u3059\u308b
-You_can_only_rename_one_field_at_a_time=\u4e00\u5ea6\u306b\u6539\u540d\u3067\u304d\u308b\u306e\u306f\u3072\u3068\u3064\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3060\u3051\u3067\u3059
-
-Remove_all_broken_links=\u7834\u640d\u3057\u305f\u30ea\u30f3\u30af\u3092\u3059\u3079\u3066\u524a\u9664
-
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=\u30ea\u30e2\u30fc\u30c8\u64cd\u4f5c\u7528\u306b%0\u30dd\u30fc\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002\u5225\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u4f7f\u7528\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u5225\u306e\u30dd\u30fc\u30c8\u3092\u6307\u5b9a\u3057\u3066\u307f\u3066\u304 [...]
-
-Plugin_installer=\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u5c0e\u5165
-Unable_to_create_plugin_directory=\u30d7\u30e9\u30b0\u30a4\u30f3\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
-Unable_to_copy_file=\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u6b63\u3057\u304f\u5c0e\u5165\u3055\u308c\u307e\u3057\u305f\u3002\u65b0\u3057\u3044\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u8aad\u307f\u8fbc\u3080\u306b\u306f\u3001JabRef\u3092\u518d\u8d77\u52d5\u3057\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
-Unable_to_create_user_plugin_directory=\u30e6\u30fc\u30b6\u30fc\u30d7\u30e9\u30b0\u30a4\u30f3\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
-Plugin_installation_failed.=\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u5c0e\u5165\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
-The_same_version_of_this_plugin_is_already_installed.=\u3053\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u540c\u3058\u7248\u304c\u65e2\u306b\u5c0e\u5165\u3055\u308c\u3066\u3044\u307e\u3059\u3002
-A_newer_version_of_this_plugin_is_already_installed.=\u3053\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u65b0\u3057\u3044\u7248\u304c\u65e2\u306b\u5c0e\u5165\u3055\u308c\u3066\u3044\u307e\u3059\u3002
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=\u3053\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u3001\u4e00\u3064\u306a\u3044\u3057\u305d\u308c\u4ee5\u4e0a\u306e\u65e7\u7248\u304c\u5c0e\u5165\u6e08\u307f\u3067\u3059\u3002\u65e7\u7248\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
-Old_versions_deleted_successfully.=\u65e7\u7248\u304c\u6210\u529f\u88cf\u306b\u524a\u9664\u3055\u308c\u307e\u3057\u305f\u3002
-
-
-Install_plugin=\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u5c0e\u5165
-Download_plugin=\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
-Plugin_manager=\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u7ba1\u7406
-Delete_the_%0_selected_plugins?=%0\u500b\u306e\u9078\u629e\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
-Delete_plugins=\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u524a\u9664
-Delete_the_selected_plugin?=\u9078\u629e\u3057\u305f\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
-Delete_plugin=\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u524a\u9664
-Enter_download_URL=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9URL\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
-Plugin_name=\u30d7\u30e9\u30b0\u30a4\u30f3\u540d
-Version=\u30d0\u30fc\u30b8\u30e7\u30f3
-Unknown=\u77e5\u308a\u307e\u305b\u3093
-Not_loaded=\u8aad\u307f\u8fbc\u307e\u308c\u307e\u305b\u3093\u3067\u3057\u305f
-Loaded=\u8aad\u307f\u8fbc\u307f\u307e\u3057\u305f
-Could_not_determine_version_of_=\u4ee5\u4e0b\u306e\u7248\u3092\u7279\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:_
-Install_anyway?=\u69cb\u308f\u305a\u5c0e\u5165\u3057\u307e\u3059\u304b\uff1f
-
-Looking_for_full_text_document...=\u6587\u66f8\u672c\u4f53\u3092\u63a2\u3057\u3066\u3044\u307e\u3059...
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=DOI\u307e\u305f\u306fURL\u30ea\u30f3\u30af\u3092\u305f\u3069\u3063\u3066PDF\u6587\u66f8\u672c\u4f53\u306e\u5834\u6240\u306e\u7279\u5b9a\u3092\u8a66\u307f\u307e\u3059
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=\u8ad6\u6587\u672c\u4f53\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u300c%0\u300d\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u7528\u306e\u691c\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=PDF\u30ea\u30f3\u30af\u3092\u691c\u51fa\u3057\u307e\u3057\u305f\u304c\u3001\u4e0d\u6b63\u306aMIME\u578b\u3092\u53d7\u4fe1\u3057\u307e\u3057\u305f\u3002\u8ad6\u6587\u672c\u4f53\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u304c\u306a\u3044\u305f\u3081\u3067\u3042\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002
-
-Autosave=\u81ea\u52d5\u4fdd\u5b58
-Prompt_before_recovering_a_database_from_an_autosave_file=\u81ea\u52d5\u4fdd\u5b58\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u56de\u5fa9\u3059\u308b\u524d\u306b\u78ba\u8a8d\u3092\u4fc3\u3059
-Autosave_interval_(minutes)=\u81ea\u52d5\u4fdd\u5b58\u306e\u9593\u9694\uff08\u5206\uff09
-Do_you_want_to_recover_the_database_from_the_autosave_file?=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u81ea\u52d5\u4fdd\u5b58\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u56de\u5fa9\u3057\u307e\u3059\u304b\uff1f
-Recover_from_autosave=\u81ea\u52d5\u4fdd\u5b58\u304b\u3089\u5fa9\u5e30
-%0_warnings=%0\u500b\u306e\u8b66\u544a\u3042\u308a
-
-Save_in_current_table_sort_order=\u73fe\u5728\u306e\u8868\u3067\u306e\u6574\u5e8f\u9806\u3067\u4fdd\u5b58
-Export_in_current_table_sort_order=\u73fe\u5728\u306e\u8868\u3067\u306e\u6574\u5e8f\u9806\u3067\u66f8\u304d\u51fa\u3057
-Export_ordered_by_author/editor/year=author/editor/year\u3067\u6574\u5e8f\u3057\u3066\u66f8\u304d\u51fa\u3057
-Export_entries_in_their_original_order=\u9805\u76ee\u3092\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u9806\u5e8f\u3067\u66f8\u304d\u51fa\u3057
-Error_opening_file_'%0'.=\u30d5\u30a1\u30a4\u30eb\u300c%0\u300d\u3092\u958b\u304f\u969b\u306b\u30a8\u30e9\u30fc\u767a\u751f
-Autosave_of_file_'%0'=\u300c%0\u300d\u30d5\u30a1\u30a4\u30eb\u306e\u81ea\u52d5\u4fdd\u5b58
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=\u300c%0\u300d\u306e\u81ea\u52d5\u4fdd\u5b58\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u4ee3\u308f\u308a\u306b\u300c%0\u300d\u3092\u8aad\u307f\u8fbc\u3093\u3067\u307f\u3066\u304f\u3060\u3055\u3044\u3002
-
-
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=\u30e6\u30fc\u30b6\u30fc\u7528\u30d7\u30e9\u30b0\u30a4\u30f3\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u5c0e\u5165\u3057\u305f\u30d7\u30e9\u30b0\u30a4\u30f3_(%0):
-Plugins_installed_in_other_locations\:=\u4ed6\u306e\u5834\u6240\u306b\u5c0e\u5165\u3057\u305f\u30d7\u30e9\u30b0\u30a4\u30f3:
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u6b21\u56deJabRef\u3092\u8d77\u52d5\u3057\u305f\u969b\u306b\u524a\u9664\u3055\u308c\u307e\u3059\u3002
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u6b21\u56deJabRef\u3092\u8d77\u52d5\u3057\u305f\u969b\u306b\u524a\u9664\u3055\u308c\u307e\u3059\u3002
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=\u65e7\u7248\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u3001\u6b21\u56deJabRef\u3092\u8d77\u52d5\u3057\u305f\u3068\u304d\u306b\u524a\u9664\u3055\u308c\u307e\u3059\u3002
-Formatter_not_found\:_%0=\u6574\u5f62\u5b50\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\:_%0
-The_following_formatters_could_not_be_found=\u4ee5\u4e0b\u306e\u6574\u5f62\u5b50\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
-
-Clear_inputarea=\u5165\u529b\u9818\u57df\u3092\u4e00\u6383
-
-Automatically_set_file_links_for_this_entry=\u3053\u306e\u9805\u76ee\u306b\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u81ea\u52d5\u7684\u306b\u8a2d\u5b9a
-Could_not_save,_file_locked_by_another_JabRef_instance.=\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u304c\u4ed6\u306eJabRef\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u3088\u3063\u3066\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u3059\u3002
-File_is_locked_by_another_JabRef_instance.=\u30d5\u30a1\u30a4\u30eb\u304c\u3082\u3046\u3072\u3068\u3064\u306eJabRef\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u3088\u3063\u3066\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u3059\u3002
-Do_you_want_to_override_the_file_lock?=\u30d5\u30a1\u30a4\u30eb\u30ed\u30c3\u30af\u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b\uff1f
-File_locked=\u30d5\u30a1\u30a4\u30eb\u304c\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u3059
-Current_tmp_value=\u73fe\u5728\u306etmp\u5024
-Metadata_change=\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u5909\u66f4
-Changes_have_been_made_to_the_following_metadata_elements=\u4ee5\u4e0b\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u8981\u7d20\u306b\u5909\u66f4\u3092\u52a0\u3048\u307e\u3057\u305f
-
-Generate_groups_for_author_last_names=\u8457\u8005\u306e\u59d3\u3067\u30b0\u30eb\u30fc\u30d7\u3092\u751f\u6210\u3059\u308b
-Generate_groups_for_editor_last_names=\u7de8\u96c6\u8005\u306e\u59d3\u3067\u30b0\u30eb\u30fc\u30d7\u3092\u751f\u6210\u3059\u308b
-Generate_groups_from_keywords_in_a_BibTeX_field=BibTeX\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u304b\u3089\u30b0\u30eb\u30fc\u30d7\u3092\u751f\u6210\u3059\u308b
-Enforce_legal_characters_in_BibTeX_keys=BibTeX\u30ad\u30fc\u3067\u898f\u5247\u306b\u5247\u3063\u305f\u6587\u5b57\u306e\u4f7f\u7528\u3092\u5f37\u5236\u3059\u308b
-The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=#\u6587\u5b57\u306f\u3001\u300c\\#\u300d\u306e\u3088\u3046\u306b\u30a8\u30b9\u30b1\u30fc\u30d7\u3057\u306a\u3044\u9650\u308a\u306f\u3001BibTeX\u30d5\u30a3\u30fc\u30eb\u30c9\u4e2d\u3067\u306f\u4f7f\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-Before_saving,_please_edit_any_strings_containing_the_#_character.=\u4fdd\u5b58\u524d\u306b\u3001#\u6587\u5b57\u3092\u542b\u3080\u6587\u5b57\u5217\u3092\u5168\u3066\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-
-Save_without_backup?=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u53d6\u3089\u305a\u306b\u4fdd\u5b58\u3057\u307e\u3059\u304b\uff1f
-Unable_to_create_backup=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
-
-File_directory_is_not_set_or_does_not_exist.=\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u304b\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
-Move_file_to_file_directory.=\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
-Rename_file_to=\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u4ee5\u4e0b\u306b\u6539\u540d:
-<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>\u5168\u9805\u76ee</b>\uff08\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306f\u7de8\u96c6\u3057\u305f\u308a\u524a\u9664\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\uff09
-static_group=\u9759\u7684\u30b0\u30eb\u30fc\u30d7
-dynamic_group=\u52d5\u7684\u30b0\u30eb\u30fc\u30d7
-refines_supergroup=\u4e0a\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u7d5e\u308a\u8fbc\u3080
-includes_subgroups=\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u542b\u3080
-contains=contains
-search_expression=\u691c\u7d22\u8868\u73fe:
-
-Disable_file_renaming_in_non-native_file_dialog=\u30cd\u30a4\u30c6\u30a3\u30d6\u3067\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u30c0\u30a4\u30a2\u30ed\u30b0\u3067\u30d5\u30a1\u30a4\u30eb\u306e\u540d\u79f0\u5909\u66f4\u3092\u3067\u304d\u306a\u304f\u3059\u308b
-File_dialog=\u30d5\u30a1\u30a4\u30eb\u30c0\u30a4\u30a2\u30ed\u30b0
-No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=\u9805\u76ee\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002JStor\u3092\u691c\u7d22\u3059\u308b\u305f\u3081\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u304c\u306a\u3044\u3088\u3046\u3067\u3059\u3002
-
-Search_ScienceDirect=ScienceDirect\u3092\u691c\u7d22
-Error_while_fetching_from_ScienceDirect=ScienceDirect\u304b\u3089\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f
-
-Error_initializing_custom_export_format_from_string_'%0'=\u6587\u5b57\u5217\u300c%0\u300d\u304b\u3089\u500b\u4eba\u8a2d\u5b9a\u306e\u66f8\u304d\u51fa\u3057\u66f8\u5f0f\u3092\u521d\u671f\u5316\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f
-
-
-BibLaTeX_mode=BibLaTeX\u30e2\u30fc\u30c9
-Optional_fields_2=\u975e\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c92
-Please_wait=\u304a\u5f85\u3061\u304f\u3060\u3055\u3044
-Waiting_for_save_operation_to_finish=\u4fdd\u5b58\u64cd\u4f5c\u304c\u7d42\u4e86\u3059\u308b\u306e\u3092\u5f85\u3063\u3066\u3044\u307e\u3059
-Resolving_duplicate_BibTeX_keys...=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u3092\u89e3\u6c7a...
-Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u3092\u89e3\u6d88\u3057\u7d42\u308f\u308a\u307e\u3057\u305f\u3002%0\u9805\u76ee\u3092\u4fee\u6b63\u3057\u307e\u3057\u305f\u3002
-This_database_contains_one_or_more_duplicated_BibTeX_keys.=\u3053\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u306f\u30011\u3064\u306a\u3044\u3057\u8907\u6570\u306e\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u304c\u3042\u308a\u307e\u3059\u3002
-Do_you_want_to_resolve_duplicate_keys_now?=\u91cd\u8907\u3057\u305f\u30ad\u30fc\u3092\u76f4\u3061\u306b\u89e3\u6d88\u3057\u307e\u3059\u304b\uff1f
-Find_and_remove_duplicate_BibTeX_keys=\u91cd\u8907BibTeX\u30ad\u30fc\u3092\u691c\u51fa\u3057\u3066\u524a\u9664
-Expected_syntax_for_--fetch='<name_of_fetcher>\:<query>'=\u53f3\u8a18\u306b\u671f\u5f85\u3055\u308c\u308b\u6587\u6cd5:_--fetch='<name_of_fetcher>:<query>'
-Duplicate_BibTeX_key=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc
-Duplicate_key=\u91cd\u8907\u30ad\u30fc
-Generate_key=\u30ad\u30fc\u3092\u751f\u6210
-Import_marking_color=\u8aad\u307f\u8fbc\u307f\u30de\u30fc\u30ab\u30fc\u8272
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0\u9805\u76ee\u3092\u691c\u51fa\u3057\u307e\u3057\u305f\u3002\u30b5\u30fc\u30d0\u30fc\u8ca0\u8377\u3092\u639b\u3051\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u306b\u3001%1\u306e\u307f\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002ACM\u306b\u8ff7\u60d1\u3092\u304b\u3051\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u306e\u3067\u3001\u304b\u306a\u308a [...]
-BibTeX_importer=BibTeX\u304b\u3089\u8aad\u307f\u8fbc\u307f
-Always_add_letter_(a,_b,_...)_to_generated_keys=\u30ad\u30fc\u751f\u6210\u6642\u306b\u5e38\u306b(a,_,b,_\u2026)\u306a\u3069\u306e\u6587\u5b57\u3092\u4ed8\u52a0
-Ensure_unique_keys_using_letters_(a,_b,_...)=(a,_,b,_\u2026)\u306a\u3069\u306e\u6587\u5b57\u3092\u4f7f\u7528\u3057\u3066\u30ad\u30fc\u304c\u552f\u4e00\u3067\u3042\u308b\u3053\u3068\u3092\u4fdd\u8a3c
-Ensure_unique_keys_using_letters_(b,_c,_...)=(b,_,c,_\u2026)\u306a\u3069\u306e\u6587\u5b57\u3092\u4f7f\u7528\u3057\u3066\u30ad\u30fc\u304c\u552f\u4e00\u3067\u3042\u308b\u3053\u3068\u3092\u4fdd\u8a3c
-Entry_editor_active_background_color=\u9805\u76ee\u30a8\u30c7\u30a3\u30bf\u306e\u30a2\u30af\u30c6\u30a3\u30d6\u80cc\u666f\u8272
-Entry_editor_background_color=\u9805\u76ee\u30a8\u30c7\u30a3\u30bf\u306e\u80cc\u666f\u8272
-Entry_editor_font_color=\u9805\u76ee\u30a8\u30c7\u30a3\u30bf\u306e\u30d5\u30a9\u30f3\u30c8\u8272
-Entry_editor_invalid_field_color=\u9805\u76ee\u30a8\u30c7\u30a3\u30bf\u306e\u7121\u52b9\u30d5\u30a3\u30fc\u30eb\u30c9\u8272
-Table_and_entry_editor_colors=\u8868\u304a\u3088\u3073\u9805\u76ee\u30a8\u30c7\u30a3\u30bf\u8272
-An_autosave_file_was_found_for_this_database._This_could_indicate_=\u3053\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u81ea\u52d5\u4fdd\u5b58\u30d5\u30a1\u30a4\u30eb\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u308c\u306f\u3001\u6700\u5f8c\u306b\u3053\u306e
-that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=\u30d5\u30a1\u30a4\u30eb\u304c\u4f7f\u7528\u3055\u308c\u305f\u969b\u306bJabRef\u304c\u6b63\u5e38\u306b\u7d42\u4e86\u3057\u306a\u304b\u3063\u305f\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002
-General_file_directory=\u4e00\u822c\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
-User-specific_file_directory=\u30e6\u30fc\u30b6\u30fc\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
-Error_setting_look_and_feel=\u30a8\u30e9\u30fc\u8a2d\u5b9a\u306e\u64cd\u4f5c\u6027
-Search_failed\:_illegal_search_expression=\u691c\u7d22\u306b\u5931\u6557:_\u8aa4\u3063\u305f\u691c\u7d22\u8868\u73fe\u3067\u3059
-Show_ArXiv_column=ArXiv\u5217\u3092\u8868\u793a
-
-<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>JabRef\u3068\u306e\u6700\u9069\u306a\u9023\u643a\u306e\u305f\u3081\u306b\u3001Endnote\u7528\u306e\u8aad\u307f\u8fbc\u307f\u30fb\u66f8\u304d\u51fa\u3057\u30d5\u30a3\u30eb\u30bf\u304c<BR>\u5165\u3063\u3066\u3044\u308bzip\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u51cd\u3057\u307e\u3059\u3002</HTML>
-
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=\u73fe\u5728\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u30b0\u30eb\u30fc\u30d7\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u9805\u76ee\u3092\u6301\u3064\u30b0\u30eb\u30fc\u30d7\u3092\u7740\u8272
-
-You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=\u30c6\u30ad\u30b9\u30c8\u30d5\u30a3\u30fc\u30eb\u30c9\u306b1025\u301c65535\u306e\u9593\u306e\u6574\u6570\u5024\u3092\u5165\u529b\u3057\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\uff1a
-
-
-Automatically_open_browse_dialog_when_creating_new_file_link=\u65b0\u3057\u304f\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u4f5c\u6210\u3059\u308b\u969b\u3001\u81ea\u52d5\u7684\u306b\u30d6\u30e9\u30a6\u30ba\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u958b\u304f
-Import_Metadata_from\:=\u53f3\u8a18\u304b\u3089\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u307f:
-Choose_the_source_for_the_metadata_import=\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3080\u30bd\u30fc\u30b9\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044
-Create_entry_based_on_XMP_data=XMP\u30c7\u30fc\u30bf\u306b\u57fa\u3065\u3044\u3066\u9805\u76ee\u3092\u751f\u6210
-Create_entry_based_on_data_fetched_from=\u53f3\u8a18\u304b\u3089\u53d6\u308a\u8fbc\u3093\u3060\u30c7\u30fc\u30bf\u306b\u57fa\u3065\u3044\u3066\u9805\u76ee\u3092\u751f\u6210
-Create_blank_entry_linking_the_PDF=PDF\u306b\u30ea\u30f3\u30af\u3057\u305f\u7a7a\u306e\u9805\u76ee\u3092\u751f\u6210
-Only_attach_PDF=PDF\u3092\u6dfb\u4ed8\u3057\u3066\u304f\u3060\u3055\u3044
-Mr._dLib_Metadata_Entries_Associated_With\:=\u53f3\u8a18\u306b\u95a2\u9023\u3065\u3051\u3089\u308c\u305fMr._dLib\u30e1\u30bf\u30c7\u30fc\u30bf\u9805\u76ee
-Mr._dLib_Metadata_Entries_Associated_With_PDF_File=PDF\u30d5\u30a1\u30a4\u30eb\u306b\u95a2\u9023\u3065\u3051\u3089\u308c\u305fMr._dLib\u30e1\u30bf\u30c7\u30fc\u30bf\u9805\u76ee
-Title=\u30bf\u30a4\u30c8\u30eb
-Author(s)=\u8457\u8005
-Published_Year=\u767a\u884c\u5e74
-No_metadata_found.=\u30e1\u30bf\u30c7\u30fc\u30bf\u304c\u3042\u308a\u307e\u305b\u3093\u3002
-Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u304c\u4e00\u6642\u7684\u306b\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002
-Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u304c\u4e00\u6642\u7684\u306b\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u5f8c\u3067\u5b9f\u884c\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002
-You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306b\u63a5\u7d9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002Mr._dLib\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3078\u306e\u63a5\u7d9a\u304c\u5fc5\u8981\u3067\u3059\u3002
-No_Internet_Connection.=\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306b\u63a5\u7d9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=JabRef\u73fe\u884c\u7248\u304c\u3001\u3082\u306f\u3084\u6a5f\u80fd\u3057\u3066\u3044\u306a\u3044Mr._dLib\u306e\u65e7\u7248\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059\u3002\n\u8a73\u7d30\u306a\u [...]
-Web_Service_Version_Outdated=\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u65e7\u304f\u306a\u3063\u3066\u3044\u307e\u3059
-The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=\u30a2\u30af\u30bb\u30b9\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308bMr._dLib\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u65e7\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002
-Update_empty_fields_with_data_fetched_from=\u4ee5\u4e0b\u304b\u3089\u53d6\u5f97\u3057\u305f\u30c7\u30fc\u30bf\u3067\u7a7a\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u66f4\u65b0\u3059\u308b\uff1a
-Create_New_Entry=\u65b0\u898f\u9805\u76ee\u3092\u4f5c\u6210
-Update_Existing_Entry=\u65e2\u5b58\u9805\u76ee\u3092\u66f4\u65b0
-Mr._dLib=Mr._dLib
-More_information=\u8a73\u3057\u3044\u60c5\u5831
-Fetching_Metadata...=\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u3066\u3044\u307e\u3059...
-Metadata=\u30e1\u30bf\u30c7\u30fc\u30bf
-
-Autocomplete_names_in_'Firstname_Lastname'_format_only=\u300c\u540d_\u59d3\u300d\u5f62\u5f0f\u306e\u540d\u524d\u306e\u307f\u81ea\u52d5\u88dc\u5b8c
-Autocomplete_names_in_'Lastname,_Firstname'_format_only=\u300c\u59d3,_\u540d\u300d\u5f62\u5f0f\u306e\u540d\u524d\u306e\u307f\u81ea\u52d5\u88dc\u5b8c
-Autocomplete_names_in_both_formats=\u4e21\u65b9\u306e\u5f62\u5f0f\u3068\u3082\u81ea\u52d5\u88dc\u5b8c
-Marking_color_%0=\u30de\u30fc\u30ab\u30fc\u8272_%0
-The_name_'comment'_can_not_be_used_as_an_entry_type_name.=\u300ccomment\u300d\u3068\u3044\u3046\u540d\u524d\u306f\u3001\u9805\u76ee\u578b\u540d\u3068\u3057\u3066\u306f\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-You_must_enter_an_integer_value_in_the_text_field_for=\u53f3\u8a18\u306e\u30c6\u30ad\u30b9\u30c8\u30d5\u30a3\u30fc\u30eb\u30c9\u4e2d\u306b\u306f\u6574\u6570\u5024\u3092\u5165\u529b\u3057\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093:
-
-File_directory=\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
-Send_as_email=\u96fb\u5b50\u30e1\u30fc\u30eb\u3068\u3057\u3066\u9001\u308b
-References=\u66f8\u8a8c\u60c5\u5831
-Sending_of_emails=\u96fb\u5b50\u30e1\u30fc\u30eb\u306e\u9001\u4ed8
-Subject_for_sending_an_email_with_references=\u66f8\u8a8c\u60c5\u5831\u3092\u6dfb\u4ed8\u3057\u305f\u96fb\u5b50\u30e1\u30fc\u30eb\u306e\u4ef6\u540d
-Automatically_open_folders_of_attached_files=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u306e\u30d5\u30a9\u30eb\u30c0\u3092\u81ea\u52d5\u7684\u306b\u958b\u304f
-Create_entry_based_on_content=\u5185\u5bb9\u306b\u57fa\u3065\u3044\u3066\u9805\u76ee\u3092\u751f\u6210\u3059\u308b
-Store_choice_as_default=\u9078\u629e\u3092\u65e2\u5b9a\u5024\u3068\u3057\u3066\u4fdd\u7ba1\u3059\u308b
-Do_not_show_this_box_again_for_this_import=\u3053\u306e\u8aad\u307f\u8fbc\u307f\u306b\u306f\u3053\u306e\u30dc\u30c3\u30af\u30b9\u3092\u3082\u3046\u8868\u793a\u3057\u306a\u3044
-Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=\u3053\u306ePDF\u53d6\u8fbc\u307f\u65b9\u6cd5\u3092\u5e38\u306b\u7528\u3044\u308b(\u305d\u3057\u3066\u8aad\u307f\u8fbc\u307f\u6bce\u306b\u5c0b\u306d\u306a\u3044)
-Error_creating_email=\u96fb\u5b50\u30e1\u30fc\u30eb\u3092\u751f\u6210\u3059\u308b\u969b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
-Could_not_open_directory=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
-Entries_added_to_an_email=\u9805\u76ee\u304c\u96fb\u5b50\u30e1\u30fc\u30eb\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f
-exportFormat=exportFormat
-Output_file_missing=\u51fa\u529b\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u5f53\u305f\u308a\u307e\u305b\u3093
-No_search_matches.=\u691c\u7d22\u6761\u4ef6\u306b\u4e00\u81f4\u3059\u308b\u3082\u306e\u304c\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-The_output_option_depends_on_a_valid_input_option.=\u51fa\u529b\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3001\u5165\u529b\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u3046\u3061\u3001\u6709\u52b9\u306a\u3082\u306e\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002
-Default_import_style_for_drag&drop_of_PDFs=PDF\u30d5\u30a1\u30a4\u30eb\u306e\u30c9\u30e9\u30c3\u30b0\uff06\u30c9\u30ed\u30c3\u30d7\u306b\u5bfe\u3059\u308b\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5\u306e\u65e2\u5b9a\u5024
-Default_PDF_file_link_action=PDF\u30d5\u30a1\u30a4\u30eb\u306e\u30ea\u30f3\u30af\u65b9\u6cd5\u306e\u65e2\u5b9a\u5024
-File_name_format_pattern=\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u66f8\u5f0f\u30d1\u30bf\u30fc\u30f3
-PostgreSQL_database=PostgreSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
-DIN_1505=DIN_1505
-Wrong_Format=\u66f8\u5f0f\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059
-Path_to_gnuclient_or_emacsclient=gnuclient\u82e5\u3057\u304f\u306femacsclient\u3078\u306e\u30d1\u30b9
-Additional_parameters=\u8ffd\u52a0\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc
-Encrypted_documents_are_not_supported=\u6697\u53f7\u5316\u3055\u308c\u305f\u6587\u66f8\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093
-Cite_selected_entries=\u9078\u629e\u3057\u305f\u9805\u76ee\u3092\u5f15\u7528
-Cite_selected_entries_with_in-text_citation=\u9078\u629e\u3057\u305f\u9805\u76ee\u3092\u672c\u6587\u5185\u306e\u5f15\u7528\u3068\u3057\u3066\u5f15\u7528\u3059\u308b
-Cite_special=\u7279\u6b8a\u306a\u5f15\u7528
-Extra_information_(e.g._page_number)=\u8ffd\u52a0\u60c5\u5831_(\u4f8b:\u30da\u30fc\u30b8\u756a\u53f7)
-Manage_citations=\u5f15\u7528\u3092\u7ba1\u7406
-Problem_modifying_citation=\u5f15\u7528\u3092\u4fee\u6b63\u3059\u308b\u306e\u306b\u554f\u984c\u767a\u751f
-Citation=\u5f15\u7528
-Context=\u6587\u8108
-Extra_information=\u8ffd\u52a0\u60c5\u5831
-Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=\u5f15\u7528\u30de\u30fc\u30ab\u30fc\u300c%0\u300d\u306b\u5bfe\u3057\u3066BibTeX\u9805\u76ee\u3092\u5f53\u3066\u306f\u3081\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-Styles=\u66f8\u5f0f
-Select_style=\u66f8\u5f0f\u306e\u9078\u629e
-This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=\u4f7f\u7528\u3067\u304d\u308b\u66f8\u5f0f\u306e\u4e00\u89a7\u3067\u3059\u3002\u4f7f\u3044\u305f\u3044\u3082\u306e\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Journals=\u5b66\u8853\u8a8c
-Cite=\u5f15\u7528
-Cite_in-text=\u6587\u4e2d\u3078\u306e\u5f15\u7528
-Insert_empty_citation=\u7a7a\u306e\u5f15\u7528\u3092\u633f\u5165
-Merge_citations=\u5f15\u7528\u3092\u7d71\u5408
-Manual_connect=\u624b\u52d5\u63a5\u7d9a
-Select_Writer_document=Writer\u6587\u66f8\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-Sync_OO_bibliography=OO\u66f8\u8a8c\u60c5\u5831\u3092\u540c\u671f
-OpenOffice=OpenOffice/LibreOffice
-Select_which_open_Writer_document_to_work_on=\u4f5c\u696d\u306b\u3069\u306eWriter\u6587\u66f8\u3092\u958b\u304f\u304b\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-Connected_to_document=\u6587\u66f8\u306b\u63a5\u7d9a\u3057\u307e\u3057\u305f
-Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=\u8868\u793a\u306a\u3057\u3067\u5f15\u7528\u3092\u633f\u5165_(\u9805\u76ee\u306f\u53c2\u8003\u6587\u732e\u4e00\u89a7\u306b\u306e\u307f\u8868\u793a\u3055\u308c\u307e\u3059)
-Cite_selected_entries_with_extra_information=\u9078\u629e\u3057\u305f\u9805\u76ee\u3092\u8ffd\u52a0\u60c5\u5831\u3068\u3068\u3082\u306b\u5f15\u7528
-Ensure_that_the_bibliography_is_up-to-date=\u66f8\u8a8c\u60c5\u5831\u304c\u6700\u65b0\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b
-Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=\u304a\u4f7f\u3044\u306eOpenOffice\u6587\u66f8\u304cBibTeX\u9375\u300c%0\u300d\u3092\u53c2\u7167\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u4e2d\u306b\u306f\u898b\u5f53\u305f\u308a\u307e\u305b\u3093\u3002
-Unable_to_synchronize_bibliography=\u66f8\u8a8c\u60c5\u5831\u3092\u540c\u671f\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
-Combine_pairs_of_citations_that_are_separated_by_spaces_only=\u7a7a\u767d\u3067\u533a\u5207\u3089\u308c\u3066\u3044\u308b\u5f15\u7528\u306e\u30da\u30a2\u306e\u307f\u3092\u9023\u7d50\u3057\u3066\u304f\u3060\u3055\u3044
-Autodetection_failed=\u81ea\u52d5\u691c\u51fa\u306b\u5931\u6557\u3057\u307e\u3057\u305f
-Connecting=\u63a5\u7d9a\u3057\u3066\u3044\u307e\u3059
-Please_wait...=\u304a\u5f85\u3061\u304f\u3060\u3055\u3044...
-Unable_to_connect=\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
-Set_connection_parameters=\u63a5\u7d9a\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044
-Path_to_OpenOffice_directory=OpenOffice\u8f9e\u66f8\u3078\u306e\u30d1\u30b9
-Path_to_OpenOffice_executable=OpenOffice\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30d1\u30b9
-Path_to_OpenOffice_library_dir=OpenOffice\u30e9\u30a4\u30d6\u30e9\u30ea \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3078\u306e\u30d1\u30b9
-Autodetect=\u81ea\u52d5\u691c\u51fa
-Connection_lost=\u63a5\u7d9a\u304c\u5931\u308f\u308c\u307e\u3057\u305f
-The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=\u6bb5\u843d\u306e\u66f8\u5f0f\u306f\u3001\u66f8\u5f0f\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u300cReferenceParagraphFormat\u300d\u7279\u6027\u3082\u3057\u304f\u306f\u300cReferenceHeaderParagraphFormat\u300d\u7279\u6027\u3067\u5236\u5fa1\u3055\u308c\u3066\u3044\u307e\u3059\u3002
-The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=\u6587\u5b57\u66f8\u5f0f\u306f\u3001\u66f8\u5f0f\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u5f15\u7528\u7279\u6027\u300cCitationCharacterFormat\u300d\u3067\u5236\u5fa1\u3055\u308c\u3066\u3044\u307e\u3059\u3002
-Automatically_sync_bibliography_when_inserting_citations=\u5f15\u7528\u3092\u633f\u5165\u3059\u308b\u969b\u3001\u66f8\u8a8c\u60c5\u5831\u3092\u81ea\u52d5\u7684\u306b\u540c\u671f
-Look_up_BibTeX_entries_in_the_active_tab_only=\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30bf\u30d6\u306eBibTeX\u9805\u76ee\u306e\u307f\u3092\u691c\u7d22
-Look_up_BibTeX_entries_in_all_open_databases=\u958b\u304b\u308c\u3066\u3044\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3059\u3079\u3066\u306eBibTeX\u9805\u76ee\u3092\u691c\u7d22
-Use_in-parenthesis_citation=\u62ec\u5f27\u4ed8\u304d\u306e\u5f15\u7528\u3092\u4f7f\u7528
-Use_in-text_citation=\u6587\u4e2d\u3078\u306e\u5f15\u7528\u3092\u4f7f\u7528
-Autodetecting_paths...=\u30d1\u30b9\u3092\u81ea\u52d5\u691c\u51fa\u3057\u3066\u3044\u307e\u3059...
-Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=OpenOffice\u306e\u5c0e\u5165\u72b6\u614b\u3092\u81ea\u52d5\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u5c0e\u5165\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u624b\u52d5\u3067\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Could_not_find_OpenOffice_installation=\u5c0e\u5165\u6e08\u307f\u306eOpenOffice\u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
-Directories=\u8f9e\u66f8
-Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=2\u3064\u4ee5\u4e0a\u306eOpenOffice\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002\u3069\u3061\u3089\u306b\u63a5\u7d9a\u3059\u308b\u304b\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\:
-Choose_OpenOffice_executable=OpenOffice\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e
-Select_document=\u6587\u66f8\u3092\u9078\u629e
-Edit_Group_Membership=\u30b0\u30eb\u30fc\u30d7\u53c2\u52a0\u72b6\u614b\u3092\u7de8\u96c6
-PostgreSQL=PostgreSQL
-Highlight_Words=\u5358\u8a9e\u3092\u7740\u8272
-JSTOR_import_cancelled=JSTOR\u306e\u8aad\u307f\u8fbc\u307f\u304c\u53d6\u308a\u6d88\u3055\u308c\u307e\u3057\u305f
-HTML_list=HTML\u4e00\u89a7
-Click_group_to_toggle_membership_of_selected_entries=
-Use_EMACS_23_insertion_string=
-Normalize_to_BibTeX_name_format=
-If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=
-Could_not_open_%0=
-Unknown_import_format=
-Open_INSPIRE_entry=
-An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=
-Error_while_fetching_from_Inspire\:_=
-Web_search=\u30a6\u30a7\u30d6\u691c\u7d22
-Autocomplete_names=\u540d\u524d\u3092\u81ea\u52d5\u88dc\u5b8c
-You_must_select_either_a_valid_style_file,_or_use_the_default_style.=\u6709\u52b9\u306a\u66f8\u5f0f\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002\u305d\u3046\u3067\u306a\u3051\u308c\u3070\u65e2\u5b9a\u306e\u66f8\u5f0f\u304c\u7528\u3044\u3089\u308c\u307e\u3059\u3002
-Default_style=\u65e2\u5b9a\u66f8\u5f0f
-Choose_style_file_directly=\u66f8\u5f0f\u30d5\u30a1\u30a4\u30eb\u3092\u76f4\u63a5\u9078\u629e
-Choose_from_a_directory=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304b\u3089\u9078\u629e
-No_directory_defined_for_%0-files=
-Allow_file_links_relative_to_each_bib_file's_location=\u5404bib\u30d5\u30a1\u30a4\u30eb\u306e\u5834\u6240\u304b\u3089\u76f8\u5bfe\u30d1\u30b9\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u30ea\u30f3\u30af\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef
-Style_selection=\u66f8\u5f0f\u306e\u9078\u629e
-The_panel_below_shows_the_definition_of_the_default_style.=\u4e0b\u8a18\u306e\u30d1\u30cd\u30eb\u306f\u3001\u65e2\u5b9a\u66f8\u5f0f\u306e\u5b9a\u7fa9\u3092\u8868\u793a\u3057\u3066\u3044\u307e\u3059\u3002
-If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=
-
-Default_style_(author-year_citations)=\u65e2\u5b9a\u66f8\u5f0f\uff08\u8457\u8005\u540d-\u767a\u884c\u5e74\uff09
-Default_style_(numerical_citations)=\u65e2\u5b9a\u66f8\u5f0f\uff08\u9023\u756a\u5f15\u7528\uff09
-No_valid_style_file_defined=
-Choose_pattern=
-Use_the_bib_file_location_as_primary_file_directory=bib\u30d5\u30a1\u30a4\u30eb\u306e\u5834\u6240\u3092\u4e3b\u8981\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3068\u3057\u3066\u4f7f\u7528
-Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=
-Built-in_journal_list=
-OpenOffice/LibreOffice_connection=
-You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=
-JabRef_includes_a_built-in_list_of_journal_abbreviations.=
-You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=
-You_must_select_either_a_valid_style_file,_or_use_a_default_style.=
-Show=\u8868\u793a
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=
-Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=
-
-This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=
-You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=
-First_select_entries_to_clean_up.=
-Cleanup_entry=
-Autogenerate_PDF_Names=
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=
-File_rename_failed_for=
-You_have_toggled_the_BibLaTeX_mode.=BibLaTeX\u30e2\u30fc\u30c9\u3068\u5207\u308a\u66ff\u3048\u307e\u3057\u305f\u3002
-Use_full_firstname_whenever_possible=\u53ef\u80fd\u306a\u5834\u5408\u306f\u5e38\u306b\u5b8c\u5168\u306a\u30d5\u30a1\u30fc\u30b9\u30c8\u30cd\u30fc\u30e0\u3092\u4f7f\u7528
-Use_abbreviated_firstname_whenever_possible=\u53ef\u80fd\u306a\u5834\u5408\u306f\u5e38\u306b\u77ed\u7e2e\u3057\u305f\u30d5\u30a1\u30fc\u30b9\u30c8\u30cd\u30fc\u30e0\u3092\u4f7f\u7528
-Use_abbreviated_and_full_firstname=\u77ed\u7e2e\u3057\u305f\u30d5\u30a1\u30fc\u30b9\u30c8\u30cd\u30fc\u30e0\u3068\u5b8c\u5168\u306a\u30d5\u30a1\u30fc\u30b9\u30c8\u30cd\u30fc\u30e0\u3092\u4e21\u65b9\u4f7f\u7528
-Autocompletion_options=\u81ea\u52d5\u88dc\u5b8c\u30aa\u30d7\u30b7\u30e7\u30f3
-Autocomplete_after_following_number_of_characters=\u53f3\u8a18\u306e\u6587\u5b57\u6570\u4ee5\u4e0a\u3067\u81ea\u52d5\u88dc\u5b8c
-Name_format_used_for_autocompletion=\u81ea\u52d5\u88dc\u5b8c\u306b\u4f7f\u7528\u3055\u308c\u308b\u6c0f\u540d\u306e\u66f8\u5f0f
-Treatment_of_first_names=\u540d(first_name)\u306e\u53d6\u308a\u6271\u3044
-No_icon_found_for_%0=%0\u306e\u30a2\u30a4\u30b3\u30f3\u304c\u898b\u5f53\u305f\u308a\u307e\u305b\u3093
-Cleanup_entries=\u9805\u76ee\u3092\u6d88\u53bb
-Automatically_assign_new_entry_to_selected_groups=\u9078\u629e\u3057\u305f\u30b0\u30eb\u30fc\u30d7\u306b\u81ea\u52d5\u7684\u306b\u65b0\u898f\u9805\u76ee\u3092\u5272\u308a\u5f53\u3066\u308b
-Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
-Format_content_of_month_field_to_#mon#=
-Ensure_that_page_ranges_are_of_the_form_num1--num2=
-Make_paths_of_linked_files_relative_(if_possible)=
-Rename_PDFs_to_given_file_name_format_pattern=
-Rename_only_PDFs_having_a_relative_path=
-What_would_you_like_to_clean_up?=
-Doing_a_cleanup_for_%0_entries...=
-No_entry_needed_a_clean_up=
-One_entry_needed_a_clean_up=
-%0_entries_needed_a_clean_up=
-Imported_=\u53f3\u8a18\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3057\u305f\:_
-Error_importing_from_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8aad\u307f\u8fbc\u307f\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f
-Minimize_to_system_tray=\u30b7\u30b9\u30c6\u30e0\u30c8\u30ec\u30a4\u306b\u6700\u5c0f\u5316
-
-Incomplete_search_results=
-%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=
-
-Error_downloading_file_'%0'=
-Download_failed=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f
-
-%0_databases_will_be_imported=
-Importing_cancelled=
-There_are_no_available_databases_to_be_imported=
-Import_from_SQL_database=
-Imported_%0_databases_successfully=
-<_CREATE_NEW_DATABASE_>=
-Remove_Selected=
-SQL_Database_Exporter=
-Select_target_SQL_database\:=
-SQL_Database_Importer=
-Please_select_which_JabRef_databases_do_you_want_to_import\:=
-
-Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
-Attach_file=\u30d5\u30a1\u30a4\u30eb\u3092\u6dfb\u4ed8
-
-Setting_all_preferences_to_default_values.=
-Resetting_preference_key_'%0'=
-Unknown_preference_key_'%0'=
-Unable_to_clear_preferences.=
-
-Reset_preferences_(key1,key2,..._or_'all')=
-Find_unlinked_files=
-Select_All=\u3059\u3079\u3066\u3092\u9078\u629e
-Unselect_All=\u3059\u3079\u3066\u306e\u9078\u629e\u3092\u89e3\u9664
-Expand_All=
-Collapse_All=
-Select_Directory=
-Choose_Directory=
-Use_the_selected_directory_to_start_with_the_search.=
-Browse...=
-Opens_the_file_browser.=
-Scan_directory=
-Searches_the_selected_directory_for_unlinked_files.=
-Starts_the_import_of_bibtex_entries.=
-Leave_this_dialog.=
-Create_directory_based_keywords=
-Creates_keywords_in_created_entrys_with_directory_pathnames=
-Select_a_directory_where_the_search_shall_start.=
-Select_file_type\:=
-These_files_are_not_linked_in_the_active_database.=
-Entry_type_to_be_created\:=
-Searching_file_system...=
-Importing_into_Database...=
-Select_directory=\u8f9e\u66f8\u3092\u9078\u629e
-Select_files=\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e
-Bibtex_entry_creation=BibTeX\u9805\u76ee\u306e\u5f15\u7528
-<No_selection>=<\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093>
-Push_selection_to_TeXstudio=
-Path_to_TeXstudio=TeXstudio\u306e\u30d1\u30b9
-Program_'%0'_not_found=
-Pushed_citations_to_TeXstudio=
-Unable_to_connect_to_freecite_online_service.=
-Parse_with_FreeCite=
-Insert_selected_citations_into_TeXstudio=
-The_current_BibTeX_key_will_be_overwritten._Continue?=
-Overwrite_key=\u30ad\u30fc\u3092\u4e0a\u66f8\u304d
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
-Bibtex_key_patterns=BibTeX\u9375\u30d1\u30bf\u30fc\u30f3
-Changed_special_field_settings=
-Clear_priority=\u512a\u5148\u5ea6\u3092\u6d88\u53bb
-Clear_rank=\u8a55\u4fa1\u3092\u6d88\u53bb
-Compact_rank=\u8a55\u4fa1\u3092\u7c21\u7d20\u8868\u793a
-Convert_1st,_2nd,_..._to_real_superscripts=
-Dropped_comment_from_database=
-Enable_PDF_preview=PDF\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u6709\u52b9\u306b\u3059\u308b
-Enable_special_fields=\u7279\u6b8a\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4f7f\u7528\u3059\u308b
-Five_stars=\u4e94\u3064\u661f
-Four_stars=\u56db\u3064\u661f
-Help_on_special_fields=\u7279\u6b8a\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u30d8\u30eb\u30d7
-Keywords_of_selected_entries=\u9078\u629e\u3057\u305f\u9805\u76ee\u306e\u30ad\u30fc\u30ef\u30fc\u30c9
-Manage_content_selectors=
-Manage_keywords=\u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u7ba1\u7406
-Marked_entries'_quality_as_good=\u9805\u76ee\u306e\u54c1\u8cea\u3092\u826f\u597d\u3068\u3057\u3066\u30de\u30fc\u30af\u3057\u307e\u3057\u305f
-Marked_entries_as_relevant=\u9805\u76ee\u3092\u95a2\u9023\u6027\u304c\u3042\u308b\u3082\u306e\u3068\u3057\u3066\u30de\u30fc\u30af\u3057\u307e\u3057\u305f
-No_priority_information=\u512a\u5148\u5ea6\u306e\u60c5\u5831\u304c\u3042\u308a\u307e\u305b\u3093
-No_rank_information=\u8a55\u4fa1\u306e\u60c5\u5831\u304c\u3042\u308a\u307e\u305b\u3093
-One_star=\u4e00\u3064\u661f
-Priority=\u512a\u5148\u5ea6
-Priority_high=\u512a\u5148\u5ea6\u9ad8
-Priority_low=\u512a\u5148\u5ea6\u4e2d
-Priority_medium=\u512a\u5148\u5ea6\u4f4e
-Quality=\u54c1\u8cea
-Rank=\u8a55\u4fa1
-Relevance=\u95a2\u9023\u6027
-Set_priority=\u512a\u5148\u5ea6\u3092\u8a2d\u5b9a
-Set_priority_to_high=\u512a\u5148\u5ea6\u3092\u9ad8\u306b\u8a2d\u5b9a
-Set_priority_to_low=\u512a\u5148\u5ea6\u3092\u4f4e\u306b\u8a2d\u5b9a
-Set_priority_to_medium=\u512a\u5148\u5ea6\u3092\u4e2d\u306b\u8a2d\u5b9a
-Set_rank_to_five_stars=\u8a55\u4fa1\u3092\u4e94\u3064\u661f\u306b\u8a2d\u5b9a
-Set_rank_to_four_stars=\u8a55\u4fa1\u3092\u56db\u3064\u661f\u306b\u8a2d\u5b9a
-Set_rank_to_one_star=\u8a55\u4fa1\u3092\u4e00\u3064\u661f\u306b\u8a2d\u5b9a
-Set_rank_to_three_stars=\u8a55\u4fa1\u3092\u4e09\u3064\u661f\u306b\u8a2d\u5b9a
-Set_rank_to_two_stars=\u8a55\u4fa1\u3092\u4e8c\u3064\u661f\u306b\u8a2d\u5b9a
-Show_one_letter_heading_for_icon_columns=\u30a2\u30a4\u30b3\u30f3\u5217\u306e\u898b\u51fa\u3057\u306b1\u6587\u5b57\u4ed8\u3051\u52a0\u3048\u308b
-Show_priority=\u512a\u5148\u5ea6\u3092\u8868\u793a
-Show_quality=\u54c1\u8cea\u3092\u8868\u793a
-Show_rank=\u8a55\u4fa1\u3092\u8868\u793a
-Show_relevance=\u95a2\u9023\u6027\u3092\u8868\u793a
-Synchronize_with_keywords=\u30ad\u30fc\u30ef\u30fc\u30c9\u3068\u540c\u671f
-Synchronized_special_fields_based_on_keywords=\u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u57fa\u3065\u3044\u3066\u540c\u671f\u3055\u308c\u308b\u7279\u6b8a\u30d5\u30a3\u30fc\u30eb\u30c9
-Three_stars=\u4e09\u3064\u661f
-Toggle_relevance=\u95a2\u9023\u6027\u3092\u5165\u5207
-Toogle_quality_assured=\u54c1\u8cea\u691c\u67fb\u6e08\u307f\u3092\u5165\u5207
-Two_stars=\u4e8c\u3064\u661f
-Update_keywords=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u66f4\u65b0
-Write_values_of_special_fields_as_separate_fields_to_BibTeX=
-You_have_changed_settings_for_special_fields.=
-no_preview_available=\u30d7\u30ec\u30d3\u30e5\u30fc\u304c\u3042\u308a\u307e\u305b\u3093
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
-A_string_with_that_label_already_exists=\u305d\u306e\u30e9\u30d9\u30eb\u3092\u6301\u3064\u6587\u5b57\u5217\u306f\u65e2\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059
-Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=\u9805\u76ee\u3092\u4fee\u6b63\u3057\u3066\u30a8\u30c7\u30a3\u30bf\u3092\u518d\u5ea6\u958b\u304d\u3001\u30bd\u30fc\u30b9\u3092\u8868\u793a\u3082\u3057\u304f\u306f\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=\u5b9f\u884c\u4e2d\u306egnuserv\u30d7\u30ed\u30bb\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002Emacs\u3042\u308b\u3044\u306fXEmacs\u304c\u5b9f\u884c\u4e2d\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3001<BR>\uff08\u300cserver-start\u300d\u307e\u305f\u306f\u300c [...]
-Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=\u5b9f\u884c\u4e2d\u306eOpenOffice\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\nOpenOffice\u304cJava\u30b5\u30dd\u30fc\u30c8\u3068\u3068\u3082\u306b\u5c0e\u5165\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u624b\u52d5\ [...]
-Created_group_"%0".=
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
-If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
-Import_Metadata_From_PDF=
-Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
-Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
-Removed_all_subgroups_of_group_"%0".=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u306e\u5168\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664\u3057\u307e\u3057\u305f
-To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
-Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
-Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
-Use_the_following_delimiter_character(s)\:=
-When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
-Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-
-Error_fetching_from_Google_Scholar=
-Run_HTML_converter_on_title=
-Searching...=\u691c\u7d22\u4e2d...
-You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
-Confirm_selection=\u9078\u629e\u7bc4\u56f2\u3092\u78ba\u8a8d
-Unknown_DOI\:_'%0'.=\u300c%0\u300d\u306f\u65e2\u77e5\u306eDOI\u3067\u306f\u3042\u308a\u307e\u305b\u3093
-Get_BibTeX_entry_from_DOI=DOI\u304b\u3089BibTeX\u9805\u76ee\u3092\u53d6\u5f97
-Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=\u4e0a\u6dfb\u5b57\u53ca\u3073\u4e0b\u6dfb\u5b57\u3092\u30c6\u30ad\u30b9\u30c8\u3067\u306f\u306a\u304f\u6570\u5f0f\u306b\u5909\u63db\u3059\u308b
-Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=\u5927\u5c0f\u6587\u5b57\u3092\u6b63\u3057\u304f\u7dad\u6301\u3059\u308b\u305f\u3081\u3001\u691c\u7d22\u4e2d\u306b\u6307\u5b9a\u3057\u305f\u30bf\u30a4\u30c8\u30eb\u8a9e\u306b{}\u3092\u4ed8\u3051\u52a0\u3048\u308b
-Import_conversions=\u8aad\u307f\u8fbc\u307f\u6642\u5909\u63db
-Run_filter_on_title_keeping_the_case_of_selected_words=
-Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
-Please_enter_a_search_string=\u691c\u7d22\u6587\u5b57\u5217\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
-Please_open_or_start_a_new_database_before_searching=
-An_Error_occurred_while_fetching_from_ADS_(%0)\:=
-Error_while_fetching_from_ADS=
-Error_while_fetching_from_OAI2=
-An_Error_occurred_while_parsing_abstract=
-Unknown_DiVA_entry\:_'%0'.=
-Get_BibTeX_entry_from_DiVA=DiVA\u304b\u3089BibTeX\u9805\u76ee\u3092\u53d6\u5f97
-Log=\u30ed\u30b0
-Remove_unneccessary_$,_{,_and_}=\u4e0d\u8981\u306a$/{/}\u3092\u6d88\u53bb\u3057\u3066\u304f\u3060\u3055\u3044
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+
+%0_contains_the_Regular_Expression_<b>%1</b>=%0\u306b\u306f\u3001\u6b63\u898f\u8868\u73fe<b>%1</b>\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059
+
+%0_contains_the_term_<b>%1</b>=%0\u306b\u306f\u3001\u7528\u8a9e<b>%1</b>\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059
+
+%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0\u306b\u306f\u3001\u6b63\u898f\u8868\u73fe<b>%1</b>\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093
+
+%0_doesn't_contain_the_term_<b>%1</b>=%0\u306b\u306f\u3001\u7528\u8a9e<b>%1</b>\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093
+
+%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0\u306f\u6b63\u898f\u8868\u73fe<b>%1</b>\u3068\u4e00\u81f4\u3057\u307e\u305b\u3093
+
+%0_doesn't_match_the_term_<b>%1</b>=%0\u306f\u7528\u8a9e<b>%1</b>\u306b\u4e00\u81f4\u3057\u307e\u305b\u3093
+
+%0_export_successful=%0\u500b\u306e\u66f8\u304d\u51fa\u3057\u306b\u6210\u529f\u3057\u307e\u3057\u305f
+
+%0_field_set=%0\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a\u3057\u307e\u3057\u305f
+
+%0_matches_the_Regular_Expression_<b>%1</b>=%0\u306f\u6b63\u898f\u8868\u73fe<b>%1</b>\u306b\u4e00\u81f4\u3057\u307e\u3059
+
+%0_matches_the_term_<b>%1</b>=%0\u306f\u9805\u76ee<b>%1</b>\u306b\u4e00\u81f4\u3057\u307e\u3059
+
+<field_name>=<\u30d5\u30a3\u30fc\u30eb\u30c9\u540d>
+<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>\u9805\u76ee\u300c%1\u300d\u304b\u3089\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u308b\u30d5\u30a1\u30a4\u30eb<BR>\u300c%0\u300d\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f</HTML>
+
+<no_field>=<no_field>
+
+<select>=<\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044>
+
+<select_word>=<\u5358\u8a9e\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044>
+A_string_with_this_label_already_exists=\u3053\u306e\u30e9\u30d9\u30eb\u306e\u6587\u5b57\u5217\u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059
+Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=\u9078\u629e\u9805\u76ee\u306e\u5b66\u8853\u8a8c\u540d\u3092\u77ed\u7e2e\u5f62\u306b\u3057\u307e\u3059\uff08ISO\u5f0f\u77ed\u7e2e\u5f62\uff09
+Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=\u9078\u629e\u9805\u76ee\u306e\u5b66\u8853\u8a8c\u540d\u3092\u77ed\u7e2e\u5f62\u306b\u3057\u307e\u3059\uff08MEDLINE\u5f0f\u77ed\u7e2e\u5f62\uff09
+
+Abbreviate_names=\u540d\u524d\u3092\u77ed\u7e2e\u5f62\u306b
+Abbreviated_%0_journal_names.=%0\u500b\u306e\u8a8c\u540d\u3092\u7565\u8a9e\u5316\u3057\u307e\u3057\u305f\u3002
+
+Abbreviation=\u77ed\u7e2e\u5f62
+
+About_JabRef=JabRef\u306b\u3064\u3044\u3066
+
+Abstract=\u6982\u8981
+
+Accept=\u53d7\u3051\u4ed8\u3051\u308b
+
+Accept_change=\u5909\u66f4\u3092\u53d7\u3051\u4ed8\u3051\u308b
+
+Action=\u30a2\u30af\u30b7\u30e7\u30f3
+
+Add=\u8ffd\u52a0
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=\uff08\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u305f\uff09\u30ab\u30b9\u30bf\u30e0ImportFormat\u30af\u30e9\u30b9\u3092\u30af\u30e9\u30b9\u30d1\u30b9\u304b\u3089\u8ffd\u52a0\u3057\u307e\u3059\u3002\n\u3053\u306e\u30d1\u30b9\u306f\u3001JabRef\u306e\u30af\u30e9\u30b9\u30d1\u30b9\u306b\u3042\u308b\u3068\u306f\u9650\u308a\u307e\u305b\u3093\u3002
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=\uff08\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u305f\uff09\u30ab\u30b9\u30bf\u30e0ImportFormat\u30af\u30e9\u30b9\u3092Zip\u66f8\u5eab\u304b\u3089\u8ffd\u52a0\u3057\u307e\u3059\u3002\n\u3053\u306eZip\u66f8\u5eab\u306f\u3001JabRef\u306e\u30af\u30e9\u30b9\u30d1\u30b9\u306b\u3042\u308b\u3068\u306f\u9650\u308a\u307e\u305b\u3093\u3002
+
+add_entries_to_group=\u9805\u76ee\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0
+
+Add_entry_selection_to_this_group=\u9078\u629e\u9805\u76ee\u3092\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0
+
+Add_from_folder=\u30d5\u30a9\u30eb\u30c0\u304b\u3089\u8ffd\u52a0
+
+Add_from_jar=jar\u304b\u3089\u8ffd\u52a0
+
+add_group=\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0
+
+Add_Group=\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0
+
+Add_new=\u65b0\u898f\u8ffd\u52a0
+
+Add_Subgroup=\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0
+
+Add_to_group=\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0
+
+Added_group_"%0".=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002
+
+Added_new=\u65b0\u898f\u306b\u8ffd\u52a0\u3057\u307e\u3057\u305f:
+
+Added_string=\u6587\u5b57\u5217\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f:
+
+Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=\u3055\u3089\u306b\u3001<b>%0</b>\u30d5\u30a3\u30fc\u30eb\u30c9\u306b<b [...]
+
+Advanced=\u8a73\u7d30\u8a2d\u5b9a
+All_custom_file_types_will_be_lost._Proceed?=\u500b\u4eba\u8a2d\u5b9a\u306e\u30d5\u30a1\u30a4\u30eb\u578b\u306f\u3059\u3079\u3066\u5931\u308f\u308c\u307e\u3059\u3002\u7d9a\u3051\u307e\u3059\u304b\uff1f
+
+All_Entries=\u5168\u9805\u76ee
+
+All_entries=\u5168\u9805\u76ee
+All_entries_of_this_type_will_be_declared_typeless._Continue?=\u3053\u306e\u578b\u306e\u9805\u76ee\u306f\u3059\u3079\u3066\u578b\u306a\u3057\u3068\u5ba3\u8a00\u3055\u308c\u307e\u3059\u3002\u7d9a\u3051\u307e\u3059\u304b\uff1f
+
+All_fields=\u5168\u30d5\u30a3\u30fc\u30eb\u30c9
+
+All_subgroups_(recursively)=\u5168\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\uff08\u518d\u5e30\u7684\u306b\uff09
+
+Allow_editing_in_table_cells=\u8868\u30bb\u30eb\u4e2d\u3067\u306e\u7de8\u96c6\u3092\u8a31\u53ef\u3059\u308b
+An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=OAI2\u30bd\u30fc\u30b9\u304b\u3089\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f_(%0):
+An_Exception_ocurred_while_accessing_'%0'=\u300c%0\u300d\u306b\u30a2\u30af\u30bb\u30b9\u4e2d\u306b\u4f8b\u5916\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f:
+An_SAXException_ocurred_while_parsing_'%0'\:=\u300c%0\u300d\u3092\u89e3\u6790\u4e2d\u306bSAX\u4f8b\u5916\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f:
+
+and=\u304a\u3088\u3073
+and_inside_the_JabRef-jar\:=\u304a\u3088\u3073JabRef-jar\u5185\u90e8:
+
+and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=\u307e\u305f\u3001\u6b21\u56deJabRef\u3092\u8d77\u52d5\u3057\u305f\u3068\u304d\u306b\u3001\u304a\u4f7f\u3044\u306e\u30af\u30e9\u30b9\u30d1\u30b9\u4e2d\u3067\u30af\u30e9\u30b9\u304c\u5229\u7528\u53ef\u80fd\u306b\u306a\u3063\u3066\u3044\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
+
+any_field_that_matches_the_regular_expression_<b>%0</b>=\u6b63\u898f\u8868\u73fe<b>%0</b>\u306b\u4e00\u81f4\u3059\u308b\u30d5\u30a3\u30fc\u30eb\u30c9\u3059\u3079\u3066
+
+Appearance=\u5916\u89b3
+
+Append=\u8ffd\u52a0
+Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=BibTeX\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u3001\u73fe\u5728\u8868\u793a\u3057\u3066\u3044\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5185\u5bb9\u3092\u8ffd\u52a0\u3059\u308b
+
+Append_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u8ffd\u52a0
+
+append_the_selected_text_to_bibtex_key=\u9078\u629e\u3057\u305f\u30c6\u30ad\u30b9\u30c8\u3092bibtex\u30ad\u30fc\u306b\u8ffd\u52a0
+Application=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3
+
+Apply=\u9069\u7528
+
+Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=\u5f15\u6570\u306f\u5b9f\u884c\u4e2d\u306eJabRef\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u6e21\u3055\u308c\u307e\u3057\u305f\u3002\u7d42\u4e86\u3057\u307e\u3059\u3002
+
+Assign_entry_selection_exclusively_to_this_group=\u9078\u629e\u9805\u76ee\u3092\u6392\u4ed6\u7684\u306b\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u5272\u308a\u5f53\u3066\u307e\u3059
+
+Assign_new_file=\u65b0\u898f\u30d5\u30a1\u30a4\u30eb\u3092\u5272\u308a\u5f53\u3066
+
+Assign_the_original_group's_entries_to_this_group?=\u5143\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u9805\u76ee\u3092\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u5272\u308a\u5f53\u3066\u307e\u3059\u304b\uff1f
+
+Assigned_%0_entries_to_group_"%1".=%0\u9805\u76ee\u3092\u30b0\u30eb\u30fc\u30d7\u300c%1\u300d\u306b\u5272\u308a\u5f53\u3066\u307e\u3057\u305f\u3002
+
+Assigned_1_entry_to_group_"%0".=1\u9805\u76ee\u3092\u30b0\u30eb\u30fc\u30d7\u300c%1\u300d\u306b\u5272\u308a\u5f53\u3066\u307e\u3057\u305f\u3002
+At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=\u5c11\u306a\u304f\u3068\u3082\u3001\u30d7\u30e9\u30b0\u30a4\u30f3\u300cnet.sf.jabref.core\u300d\u304c\u305d\u3053\u306b\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
+
+Attach_%0_file=%0\u30d5\u30a1\u30a4\u30eb\u3092\u6dfb\u4ed8
+
+Attach_URL=URL\u3092\u6dfb\u4ed8
+
+Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=\u3053\u308c\u306f\u3001\u4f7f\u7528\u4e2d\u306e\u9805\u76ee\u306e%0\u30ea\u30f3\u30af\u3092\u81ea\u52d5\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u81ea\u52d5\u8a2d\u5b9a\u306f\u3001%0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306a\u3044\u3057\u4e0b\u5c64\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e<BR>%0\u30d5\u30a1\u30a4\u30 [...]
+Attempting_SQL_export...=SQL\u3078\u306e\u66f8\u304d\u51fa\u3057\u3092\u8a66\u307f\u3066\u3044\u307e\u3059...
+
+Auto=\u81ea\u52d5
+
+Autodetect_format=\u66f8\u5f0f\u3092\u81ea\u52d5\u691c\u51fa
+
+Autogenerate_BibTeX_key=BibTeX\u30ad\u30fc\u3092\u81ea\u52d5\u751f\u6210
+Autogenerate_BibTeX_keys=BibTeX\u30ad\u30fc\u3092\u81ea\u52d5\u751f\u6210
+
+Autogenerate_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u81ea\u52d5\u751f\u6210
+
+autogenerate_keys=\u30ad\u30fc\u3092\u81ea\u52d5\u751f\u6210
+Autolink_files_with_names_starting_with_the_BibTeX_key=BibTeX\u30ad\u30fc\u3067\u59cb\u307e\u308b\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u6301\u3064\u30d5\u30a1\u30a4\u30eb\u3092\u81ea\u52d5\u30ea\u30f3\u30af
+
+Autolink_only_files_that_match_the_BibTeX_key=BibTeX\u30ad\u30fc\u306b\u4e00\u81f4\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u3092\u81ea\u52d5\u30ea\u30f3\u30af
+
+Automatically_create_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u81ea\u52d5\u751f\u6210
+
+Automatically_create_groups_for_database.=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30b0\u30eb\u30fc\u30d7\u3092\u81ea\u52d5\u751f\u6210
+
+Automatically_created_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u81ea\u52d5\u751f\u6210\u3057\u307e\u3057\u305f
+
+Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u542b\u307e\u306a\u3044\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5207\u308a\u66ff\u3048\u305f\u969b\u3001\u30b0\u30eb\u30fc\u30d7\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u81ea\u52d5\u7684\u306b\u975e\u8868\u793a
+
+Automatically_remove_exact_duplicates=\u5b8c\u5168\u306a\u91cd\u8907\u3092\u81ea\u52d5\u7684\u306b\u524a\u9664\u3059\u308b
+
+Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u542b\u3080\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5207\u308a\u66ff\u3048\u305f\u969b\u3001\u30b0\u30eb\u30fc\u30d7\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u81ea\u52d5\u7684\u306b\u8868\u793a
+
+Autoset=\u81ea\u52d5\u8a2d\u5b9a
+
+Autoset_%0_field=%0\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u81ea\u52d5\u8a2d\u5b9a
+
+Autoset_%0_links._Allow_overwriting_existing_links.=%0\u30ea\u30f3\u30af\u3092\u81ea\u52d5\u8a2d\u5b9a\u3059\u308b\u3002\u65e2\u5b58\u30ea\u30f3\u30af\u306e\u4e0a\u66f8\u304d\u3092\u8a31\u53ef\u3059\u308b\u3002
+
+Autoset_%0_links._Do_not_overwrite_existing_links.=%0\u30ea\u30f3\u30af\u3092\u81ea\u52d5\u8a2d\u5b9a\u3059\u308b\u3002\u65e2\u5b58\u30ea\u30f3\u30af\u306f\u4e0a\u66f8\u304d\u3057\u306a\u3044\u3002
+Autoset_external_links=\u5916\u90e8\u30ea\u30f3\u30af\u306e\u81ea\u52d5\u8a2d\u5b9a
+Autosetting_links=\u30ea\u30f3\u30af\u3092\u81ea\u52d5\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059
+
+AUX_file_import=AUX\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f
+
+Available_export_formats=\u4f7f\u7528\u3067\u304d\u308b\u66f8\u304d\u51fa\u3057\u66f8\u5f0f
+
+Available_fields=\u4f7f\u7528\u3067\u304d\u308bBibTeX\u30d5\u30a3\u30fc\u30eb\u30c9
+
+Available_import_formats=\u4f7f\u7528\u3067\u304d\u308b\u8aad\u307f\u8fbc\u307f\u66f8\u5f0f
+
+Background_color_for_optional_fields=\u975e\u5fc5\u9808\u9805\u76ee\u306e\u80cc\u666f\u8272
+
+Background_color_for_required_fields=\u5fc5\u9808\u9805\u76ee\u306e\u80cc\u666f\u8272
+
+Backup_old_file_when_saving=\u4fdd\u5b58\u6642\u306b\u65e7\u30d5\u30a1\u30a4\u30eb\u3092\u30d0\u30c3\u30af\u30a2\u30c3\u30d7
+Beta_version=\u30d9\u30fc\u30bf\u7248
+
+Bibkey_to_filename_conversion=Bibkey\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u540d\u3078\u306e\u5909\u63db
+
+BibTeX_key=BibTeX\u30ad\u30fc
+
+BibTeX_key_is_unique.=BibTeX\u30ad\u30fc\u306f\u4e00\u610f\u3067\u3059\u3002
+
+BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX\u30ad\u30fc\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306b\u4ed8\u3051\u308b\u540d\u79f0\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+BibTeX_source=BibTeX\u30bd\u30fc\u30b9
+
+BibTeXML=BibTeXML
+
+Binding=Binding
+Broken_link=\u58ca\u308c\u305f\u30ea\u30f3\u30af
+
+Browse=\u4e00\u89a7
+
+by=\u7f6e\u63db\u6587\u5b57\u5217
+
+Calling_external_viewer...=\u5916\u90e8\u30d3\u30e5\u30fc\u30a2\u30fc\u3092\u547c\u3073\u51fa\u3057\u3066\u3044\u307e\u3059...
+
+Cancel=\u53d6\u6d88
+
+Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=\u30ad\u30fc\u3092\u751f\u6210\u3057\u306a\u3051\u308c\u3070\u9805\u76ee\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u3053\u3067\u30ad\u30fc\u3092\u751f\u6210\u3057\u307e\u3059\u304b\uff1f
+
+Cannot_merge_this_change=\u3053\u306e\u5909\u66f4\u3092\u7d71\u5408\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
+
+Cannot_move_group_"%0"_down.=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u4e0b\u306b\u52d5\u304b\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
+
+Cannot_move_group_"%0"_left.=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u5de6\u306b\u52d5\u304b\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
+
+Cannot_move_group_"%0"_right.=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u53f3\u306b\u52d5\u304b\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
+
+Cannot_move_group_"%0"_up.=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u4e0a\u306b\u52d5\u304b\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
+
+case_insensitive=\u5927\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3057\u306a\u3044
+
+case_sensitive=\u5927\u5c0f\u6587\u5b57\u3092\u533a\u5225
+
+Case_sensitive=\u5927\u5c0f\u6587\u5b57\u3092\u533a\u5225
+
+change_assignment_of_entries=\u9805\u76ee\u306e\u5272\u308a\u5f53\u3066\u3092\u5909\u66f4
+
+Change_case=\u5927\u5c0f\u6587\u5b57\u3092\u5207\u308a\u66ff\u3048
+
+Change_entry_type=\u9805\u76ee\u578b\u3092\u5909\u66f4
+Change_file_type=\u30d5\u30a1\u30a4\u30eb\u578b\u3092\u5909\u66f4
+
+change_key=\u30ad\u30fc\u3092\u5909\u66f4
+
+Change_of_Grouping_Method=\u30b0\u30eb\u30fc\u30d7\u6cd5\u3092\u5909\u66f4
+
+change_preamble=\u30d7\u30ea\u30a2\u30f3\u30d6\u30eb\u3092\u5909\u66f4
+
+change_string_content=\u6587\u5b57\u5217\u306e\u5185\u5bb9\u3092\u5909\u66f4
+
+change_string_name=\u6587\u5b57\u5217\u540d\u3092\u5909\u66f4
+Change_table_column_and_General_fields_settings_to_use_the_new_feature=\u65b0\u3057\u3044\u6a5f\u80fd\u3092\u7528\u3044\u308b\u305f\u3081\u306b\u3001\u8868\u5217\u3068\u6c4e\u7528\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u8a2d\u5b9a\u3092\u5909\u66f4
+
+change_type=\u578b\u3092\u5909\u66f4
+
+changed_=\u4ee5\u4e0b\u3092\u5909\u66f4\u3057\u307e\u3057\u305f:_
+
+Changed_font_settings=\u30d5\u30a9\u30f3\u30c8\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u307e\u3057\u305f
+
+Changed_language_settings=\u8a00\u8a9e\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u307e\u3057\u305f
+
+Changed_look_and_feel_settings=\u64cd\u4f5c\u6027\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u307e\u3057\u305f
+
+Changed_preamble=\u30d7\u30ea\u30a2\u30f3\u30d6\u30eb\u3092\u5909\u66f4\u3057\u307e\u3057\u305f
+
+Changed_type_to=\u4ee5\u4e0b\u306e\u578b\u306b\u5909\u66f4\u3057\u307e\u3057\u305f:
+
+Characters_to_ignore=\u7121\u8996\u3059\u308b\u6587\u5b57
+
+Check_existing_%0_links=\u65e2\u5b58\u306e%0\u30ea\u30f3\u30af\u3092\u78ba\u8a8d
+
+Check_links=\u30ea\u30f3\u30af\u3092\u78ba\u8a8d
+
+Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308bURL\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65e2\u5b9a\u5024\u306f\u3001JabRef\u958b\u767a\u8005\u304c\u63d0\u4f9b\u3059\u308b\u30ea\u30b9\u30c8\u3092\u6307\u3057\u3066\u3044\u307e\u3059\u3002
+Cite_command=Cite\u30b3\u30de\u30f3\u30c9
+
+Class_name=\u30af\u30e9\u30b9\u540d
+
+Clear=\u6d88\u53bb
+
+clear_all_groups=\u5168\u30b0\u30eb\u30fc\u30d7\u3092\u6d88\u53bb
+
+Clear_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u6d88\u53bb
+Clear_fields=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u6d88\u53bb
+
+Clear_highlight=\u7740\u8272\u3092\u89e3\u9664
+
+Close=\u9589\u3058\u308b
+
+Close_dialog=\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u9589\u3058\u308b
+
+Close_the_current_database=\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u9589\u3058\u308b
+
+Close_the_help_window=\u30d8\u30eb\u30d7\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u308b
+
+Close_window=\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u308b
+
+Closed_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u9589\u3058\u307e\u3057\u305f
+
+Collapse_subtree=\u4e0b\u5c64\u30c4\u30ea\u30fc\u3092\u9589\u3058\u308b
+
+Color_codes_for_required_and_optional_fields=\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9\u3068\u975e\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u30b3\u30fc\u30c9\u306b\u7740\u8272
+
+Color_for_marking_incomplete_entries=\u4e0d\u5b8c\u5168\u306a\u9805\u76ee\u3092\u6a19\u8b58\u3059\u308b\u306e\u306b\u4f7f\u7528\u3059\u308b\u8272
+
+Column_width=\u5217\u5e45
+
+Command_line_id=\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3ID
+
+Complete_record=\u30ec\u30b3\u30fc\u30c9\u3092\u5b8c\u6210\u3059\u308b
+Connect=\u63a5\u7d9a
+Connect_to_SQL_database=SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a
+Connect_to_SQL_Database=SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a
+Connection_to_IEEEXplore_failed=IEEEXPlore\u3078\u306e\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f
+
+Contained_in=\u6240\u5728
+
+Content=\u5185\u5bb9
+
+Copied=\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f:
+
+Copied_cell_contents=\u30bb\u30eb\u306e\u5185\u5bb9\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f
+
+Copied_key=\u30ad\u30fc\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f
+
+Copied_keys=\u30ad\u30fc\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f
+
+Copy=\u30b3\u30d4\u30fc
+
+Copy_BibTeX_key=BibTeX\u30ad\u30fc\u3092\u30b3\u30d4\u30fc
+Copy_file_to_file_directory.=\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002
+Copy_files_to_file_directory.=\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002
+
+Copy_to_clipboard=\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002
+
+Could_not_call_executable=\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u3092\u547c\u3073\u51fa\u305b\u307e\u305b\u3093\u3067\u3057\u305f
+
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=\u5b9f\u884c\u4e2d\u306egnuserv\u30d7\u30ed\u30bb\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002Emacs\u3042\u308b\u3044\u306fXEmacs\u304c\u5b9f\u884c\u4e2d\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3001<BR>\uff08\u300cgnuserv-start\u300d\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u [...]
+
+Could_not_connect_to_host_=\u4ee5\u4e0b\u306e\u30db\u30b9\u30c8\u306b\u63a5\u7d9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:_
+Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Vim\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002Vim\u304c\u6b63\u3057\u3044\u30b5\u30fc\u30d0\u30fc\u540d\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Could_not_export_file=\u30d5\u30a1\u30a4\u30eb\u3092\u66f8\u304d\u51fa\u305b\u307e\u305b\u3093\u3067\u3057\u305f
+
+Could_not_export_preferences=\u8a2d\u5b9a\u3092\u66f8\u304d\u51fa\u305b\u307e\u305b\u3093\u3067\u3057\u305f
+
+Could_not_find_a_suitable_import_format.=\u9069\u5207\u306a\u8aad\u307f\u8fbc\u307f\u66f8\u5f0f\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+Could_not_find_directory_for_%0-files\:_%1=%0\u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:_%1
+Could_not_find_image_file=\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f
+
+Could_not_find_layout_file=\u30ec\u30a4\u30a2\u30a6\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f
+
+Could_not_import_preferences=\u8a2d\u5b9a\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f
+
+Could_not_instantiate_%0=%0\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+Could_not_instantiate_%0_%1=%0_%1\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+
+Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=%0\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u6b63\u3057\u3044\u30d1\u30c3\u30b1\u30fc\u30b8\u30d1\u30b9\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u304b\uff1f
+Could_not_open_link=\u30ea\u30f3\u30af\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f
+
+Could_not_parse_number_of_hits=\u30d2\u30c3\u30c8\u6570\u3092\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+Could_not_print_preview=\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u5370\u5237\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+Could_not_run_the_'vim'_program.=\u300cvim\u300d\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+
+Could_not_save_file=\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u300c%0\u300d\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
+
+Create_group=\u30b0\u30eb\u30fc\u30d7\u3092\u751f\u6210
+
+Created_groups.=\u30b0\u30eb\u30fc\u30d7\u3092\u751f\u6210\u3057\u307e\u3057\u305f\u3002
+
+crossreferenced_entries_included=\u76f8\u4e92\u53c2\u7167\u3057\u3066\u3044\u308b\u9805\u76ee\u3092\u53d6\u308a\u8fbc\u307f\u307e\u3057\u305f
+
+Current_content=\u73fe\u5728\u306e\u5185\u5bb9
+
+Current_value=\u73fe\u5728\u5024
+
+Custom_entry_types=\u500b\u4eba\u8a2d\u5b9a\u306e\u9805\u76ee\u578b
+
+Custom_entry_types_found_in_file=\u500b\u4eba\u8a2d\u5b9a\u306e\u9805\u76ee\u578b\u304c\u30d5\u30a1\u30a4\u30eb\u4e2d\u306b\u898b\u3064\u304b\u308a\u307e\u3057\u305f
+Custom_icon_theme=\u500b\u4eba\u8a2d\u5b9a\u306e\u30a2\u30a4\u30b3\u30f3\u30c6\u30fc\u30de
+Custom_icon_theme_file=\u500b\u4eba\u8a2d\u5b9a\u306e\u30a2\u30a4\u30b3\u30f3\u30c6\u30fc\u30de\u30d5\u30a1\u30a4\u30eb
+
+Custom_importers=\u500b\u4eba\u8a2d\u5b9a\u306e\u8aad\u307f\u8fbc\u307f
+
+Customize_entry_types=\u9805\u76ee\u578b\u3092\u500b\u4eba\u8a2d\u5b9a\u3059\u308b
+
+Customize_key_bindings=\u30ad\u30fc\u5272\u308a\u5f53\u3066\u3092\u500b\u4eba\u8a2d\u5b9a\u3059\u308b
+
+Cut=\u5207\u308a\u53d6\u308a
+
+cut_entries=\u9805\u76ee\u3092\u5207\u308a\u53d6\u308a
+
+cut_entry=\u9805\u76ee\u3092\u5207\u308a\u53d6\u308a
+
+Cut_pr=\u5207\u308a\u53d6\u308a\u307e\u3057\u305f:
+Database_\:=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9:
+
+Database_encoding=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0
+
+Database_has_changed._Do_you_want_to_save_before_closing?=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5909\u66f4\u304c\u52a0\u3048\u3089\u308c\u307e\u3057\u305f\u3002\u9589\u3058\u308b\u524d\u306b\u4fdd\u5b58\u3057\u307e\u3059\u304b\uff1f
+
+Database_properties=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7279\u6027
+
+Date_format=\u65e5\u4ed8\u66f8\u5f0f
+
+Default=\u65e2\u5b9a\u5024
+
+Default_encoding=\u65e2\u5b9a\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0
+
+Default_grouping_field=\u65e2\u5b9a\u306e\u30b0\u30eb\u30fc\u30d7\u5316\u30d5\u30a3\u30fc\u30eb\u30c9
+
+Default_look_and_feel=\u65e2\u5b9a\u306e\u64cd\u4f5c\u6027
+
+Default_pattern=\u65e2\u5b9a\u30d1\u30bf\u30fc\u30f3
+
+Default_sort_criteria=\u65e2\u5b9a\u306e\u6574\u5e8f\u57fa\u6e96
+Define_'%0'=\u300c'%0\u300d\u3092\u5b9a\u7fa9
+
+Delete=\u524a\u9664
+
+Delete_custom_format=\u500b\u4eba\u8a2d\u5b9a\u306e\u66f8\u5f0f\u3092\u524a\u9664
+
+delete_entries=\u9805\u76ee\u3092\u524a\u9664
+
+Delete_entry=\u9805\u76ee\u3092\u524a\u9664
+
+delete_entry=\u9805\u76ee\u3092\u524a\u9664
+
+Delete_multiple_entries=\u8907\u6570\u9805\u76ee\u3092\u524a\u9664
+
+Delete_rows=\u884c\u3092\u524a\u9664
+
+Delete_strings=\u6587\u5b57\u5217\u3092\u524a\u9664
+
+Deleted=\u524a\u9664\u3057\u307e\u3057\u305f:
+
+Delimit_fields_with_semicolon,_ex.=\u5404\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u30bb\u30df\u30b3\u30ed\u30f3\u3067\u533a\u5207\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b
+
+Descending=\u964d\u9806
+
+Description=\u8aac\u660e
+
+Deselect_all=\u3059\u3079\u3066\u9078\u629e\u89e3\u9664
+Deselect_all_duplicates=\u91cd\u8907\u3092\u3059\u3079\u3066\u524a\u9664
+
+Details=\u8a73\u7d30
+
+Disable_entry_editor_when_multiple_entries_are_selected=\u8907\u6570\u306e\u9805\u76ee\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u3068\u304d\u306b\u306f\u3001\u9805\u76ee\u30a8\u30c7\u30a3\u30bf\u3092\u7121\u52b9\u306b\u3059\u308b
+
+Disable_this_confirmation_dialog=\u3053\u306e\u78ba\u8a8d\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u3082\u3046\u8868\u793a\u3057\u306a\u3044
+
+Disable_this_warning_dialog=\u3053\u306e\u8b66\u544a\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u3082\u3046\u8868\u793a\u3057\u306a\u3044
+
+Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=\u9078\u629e\u3057\u305f\u30b0\u30eb\u30fc\u30d7\u306e\u4e00\u3064\u4ee5\u4e0a\u306b\u5c5e\u3059\u308b\u9805\u76ee\u3092\u3059\u3079\u3066\u8868\u793a\u3059\u308b\u3002
+
+Display_all_error_messages=\u5168\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a
+
+Display_help_on_command_line_options=\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u95a2\u3059\u308b\u30d8\u30eb\u30d7\u3092\u8868\u793a
+
+Display_imported_entries_in_an_inspection_window_before_they_are_added.=\u8aad\u307f\u8fbc\u307f\u9805\u76ee\u3092\u8ffd\u52a0\u3059\u308b\u524d\u306b\u7cbe\u67fb\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a\u3059\u308b
+
+Display_only_entries_belonging_to_all_selected_groups.=\u9078\u629e\u3057\u305f\u30b0\u30eb\u30fc\u30d7\u5168\u3066\u306b\u5c5e\u3059\u308b\u9805\u76ee\u306e\u307f\u8868\u793a\u3059\u308b\u3002
+Display_version=\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u8868\u793a
+
+Displaying_no_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u8868\u793a\u3057\u306a\u3044
+
+Do_not_abbreviate_names=\u540d\u524d\u3092\u7565\u3055\u306a\u3044
+
+Do_not_autoset=\u81ea\u52d5\u8a2d\u5b9a\u3057\u306a\u3044
+
+Do_not_import_entry=\u9805\u76ee\u3092\u8aad\u307f\u8fbc\u307e\u306a\u3044
+
+Do_not_open_any_files_at_startup=\u8d77\u52d5\u6642\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304b\u306a\u3044
+
+Do_not_overwrite_existing_keys=\u65e2\u5b58\u306e\u30ad\u30fc\u306f\u4e0a\u66f8\u304d\u3057\u306a\u3044
+Do_not_show_splash_window_at_startup=\u8d77\u52d5\u6642\u306b\u30b9\u30d7\u30e9\u30c3\u30b7\u30e5\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u8868\u793a\u3057\u306a\u3044
+Do_not_show_these_options_in_the_future=\u3053\u308c\u3089\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3082\u3046\u8868\u793a\u3057\u306a\u3044
+
+Do_not_wrap_the_following_fields_when_saving=\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u4fdd\u5b58\u6642\u306b\u6539\u884c\u3057\u306a\u3044
+Do_not_write_the_following_fields_to_XMP_Metadata\:=\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306fXMP\u30e1\u30bf\u30c7\u30fc\u30bf\u306b\u66f8\u304d\u8fbc\u307e\u306a\u3044:
+
+Do_you_want_JabRef_to_do_the_following_operations?=JabRef\u306b\u4ee5\u4e0b\u306e\u64cd\u4f5c\u3092\u3055\u305b\u307e\u3059\u304b\uff1f
+
+DocBook=DocBook
+
+Down=\u4e0b\u3052\u308b
+
+Download=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
+
+Download_completed=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f
+
+Download_file=\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
+
+Downloading...=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u4e2d\u3067\u3059\u2026
+Drag_and_Drop_Error=\u30c9\u30e9\u30c3\u30b0\u30a2\u30f3\u30c9\u30c9\u30ed\u30c3\u30d7\u30a8\u30e9\u30fc
+Drop_%0=%0\u3092\u30c9\u30ed\u30c3\u30d7
+
+duplicate_BibTeX_key=\u91cd\u8907BibTeX\u30ad\u30fc
+
+Duplicate_BibTeX_key.=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u3067\u3059\u3002
+
+Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u3067\u3059\u3002\u3053\u306e\u9805\u76ee\u306e\u30b0\u30eb\u30fc\u30d7\u5316\u306f\u52d5\u4f5c\u3057\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
+
+Duplicate_Key_Warning=\u91cd\u8907\u30ad\u30fc\u306e\u8b66\u544a
+
+Duplicate_pairs_found=\u91cd\u8907\u5bfe\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f
+
+duplicate_removal=\u91cd\u8907\u3092\u524a\u9664
+
+Duplicate_string_name=\u91cd\u8907\u3057\u305f\u6587\u5b57\u5217\u540d
+
+Duplicates_found=\u91cd\u8907\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f
+
+Duplicates_removed=\u91cd\u8907\u3092\u524a\u9664\u3057\u307e\u3057\u305f
+
+Dynamic_groups=\u52d5\u7684\u30b0\u30eb\u30fc\u30d7
+
+Dynamically_group_entries_by_a_free-form_search_expression=\u81ea\u7531\u578b\u691c\u7d22\u8868\u73fe\u3067\u52d5\u7684\u306b\u30b0\u30eb\u30fc\u30d7\u5316
+
+Dynamically_group_entries_by_searching_a_field_for_a_keyword=\u30d5\u30a3\u30fc\u30eb\u30c9\u4e2d\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u691c\u7d22\u3057\u3066\u52d5\u7684\u306b\u30b0\u30eb\u30fc\u30d7\u5316
+
+Each_line_must_be_on_the_following_form=\u5404\u884c\u306f\u4ee5\u4e0b\u306e\u5f62\u3067\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093
+
+Edit=\u7de8\u96c6
+
+Edit_custom_export=\u500b\u4eba\u8a2d\u5b9a\u306e\u66f8\u304d\u51fa\u3057\u3092\u7de8\u96c6
+Edit_entry=\u9805\u76ee\u3092\u7de8\u96c6
+Edit_file_link=\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u7de8\u96c6
+Edit_file_type=\u30d5\u30a1\u30a4\u30eb\u578b\u3092\u7de8\u96c6
+
+Edit_group=\u30b0\u30eb\u30fc\u30d7\u3092\u7de8\u96c6
+
+Edit_journal=\u5b66\u8853\u8a8c\u3092\u7de8\u96c6
+
+Edit_preamble=\u30d7\u30ea\u30a2\u30f3\u30d6\u30eb\u3092\u7de8\u96c6
+Edit_strings=\u6587\u5b57\u5217\u3092\u7de8\u96c6
+Editor_options=\u30a8\u30c7\u30a3\u30bf\u30aa\u30d7\u30b7\u30e7\u30f3
+
+empty_BibTeX_key=BibTeX\u30ad\u30fc\u3092\u7a7a\u306b\u3059\u308b
+
+Empty_BibTeX_key.=BibTeX\u30ad\u30fc\u3092\u7a7a\u306b\u3059\u308b\u3002
+
+Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=BibTeX\u30ad\u30fc\u3092\u7a7a\u306b\u3057\u307e\u3059\u3002\u3053\u306e\u9805\u76ee\u306b\u5bfe\u3057\u3066\u306f\u30b0\u30eb\u30fc\u30d7\u5316\u306f\u6a5f\u80fd\u3057\u306a\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002
+
+empty_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u7a7a\u3067\u3059
+
+Enable_source_editing=\u30bd\u30fc\u30b9\u7de8\u96c6\u3092\u6709\u52b9\u306b\u3059\u308b
+Enable_word/name_autocompletion=\u5358\u8a9e\u3068\u540d\u79f0\u306e\u81ea\u52d5\u88dc\u5b8c\u3092\u6709\u52b9\u306b\u3059\u308b
+
+Endnote=Endnote
+
+Enter_URL=URL\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
+
+Enter_URL_to_download=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308bURL\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
+
+entries=\u9805\u76ee
+
+Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=\u9805\u76ee\u3092\u624b\u52d5\u3067\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u3078\u5272\u308a\u5f53\u3066\u305f\u308a\u3001\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u524a\u9664\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
+
+Entries_exported_to_clipboard=\u9805\u76ee\u3092\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u66f8\u304d\u51fa\u3057\u307e\u3057\u305f:
+
+entries_have_undefined_BibTeX_key=\u9805\u76ee\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044BibTeX\u30ad\u30fc\u304c\u3042\u308a\u307e\u3059
+
+entries_into_new_database=\u9805\u76ee\u3092\u65b0\u898f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078
+
+entry=\u9805\u76ee
+
+Entry_editor=\u9805\u76ee\u30a8\u30c7\u30a3\u30bf
+
+Entry_in_current_database=\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u4e2d\u306e\u9805\u76ee
+
+Entry_in_import=\u8aad\u307f\u8fbc\u307f\u4e2d\u306e\u9805\u76ee
+
+Entry_preview=\u9805\u76ee\u30d7\u30ec\u30d3\u30e5\u30fc
+
+Entry_table=\u9805\u76ee\u8868
+
+Entry_table_columns=\u9805\u76ee\u8868\u306e\u5217
+
+Entry_type=\u9805\u76ee\u578b
+
+Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=\u9805\u76ee\u578b\u540d\u306b\u306f\u3001\u30b9\u30da\u30fc\u30b9\u3084\u4ee5\u4e0b\u306e\u6587\u5b57\u304c\u542b\u307e\u308c\u3066\u306f\u306a\u308a\u307e\u305b\u3093
+
+Entry_types=\u9805\u76ee\u578b
+
+Error=\u30a8\u30e9\u30fc
+Error\:_=\u30a8\u30e9\u30fc:_
+Error_converting_Bibtex_to_XMP\:_%0=Bibtex\u304b\u3089XMP\u3078\u306e\u5909\u63db\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f:_%0
+Error_converting_XMP_to_'%0'...=XMP\u3092\u300c'%0\u300d\u306b\u5909\u63db\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f...
+Error_exporting_to_clipboard=\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u66f8\u304d\u51fa\u3057\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f
+
+##Error:_check_your_External_viewer_settings_in_Preferences=Error:_check_your_External_viewer_settings_in_Preferences
+Error_in_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30a8\u30e9\u30fc\u767a\u751f
+Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=\u30d7\u30e9\u30b0\u30a4\u30f3\u30b7\u30b9\u30c6\u30e0\u8d77\u52d5\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f\u3002\u30d7\u30e9\u30b0\u30a4\u30f3\u306a\u3057\u3067\u8d77\u52d5\u3057\u307e\u3059\u304c\u3001\u3044\u304f\u3064\u304b\u306e\u6a5f\u80fd\u306f\u52d5\u4f5c\u3057\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
+Error_occured_when_parsing_entry=\u9805\u76ee\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f
+
+Error_opening_file=\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u969b\u306b\u30a8\u30e9\u30fc\u767a\u751f
+
+Error_setting_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u8a2d\u5b9a\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f
+Error_while_converting_BibtexEntry_to_XMP_%0=BibtexEntry\u3092XMP\u300c%0\u300d\u306b\u5909\u63db\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f
+Error_while_downloading_file\:=\u4ee5\u4e0b\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f:
+Error_while_fetching_from_OIA2=OIA2\u304b\u3089\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f
+Error_while_writing=\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f
+Error_writing_to_%0_file(s).=%0\u30d5\u30a1\u30a4\u30eb\u3092\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f
+Error_writing_XMP_to_file\:_%0=XMP\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f:_%0
+
+
+Establishing_SQL_connection...=SQL\u63a5\u7d9a\u3092\u78ba\u7acb\u3057\u3066\u3044\u307e\u3059...
+Exceptions=\u4f8b\u5916
+
+Existing_file=\u65e2\u5b58\u30d5\u30a1\u30a4\u30eb
+
+exists._Overwrite_file?=\u306f\u5b58\u5728\u3057\u307e\u3059\u3002\u30d5\u30a1\u30a4\u30eb\u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b\uff1f
+exists._Overwrite?=\u306f\u5b58\u5728\u3057\u307e\u3059\u3002\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b\uff1f
+
+Expand_subtree=\u4e0b\u5c64\u30c4\u30ea\u30fc\u3092\u958b\u304f
+
+#previousentrynottranslated.Toviewit,openGroupinterfaceandclickonthe"newgroup"button
+Export=\u66f8\u304d\u51fa\u3059
+
+Export_name=\u66f8\u304d\u51fa\u3057\u306e\u540d\u79f0
+
+Export_preferences=\u8a2d\u5b9a\u3092\u66f8\u304d\u51fa\u3059
+
+Export_preferences_to_file=\u8a2d\u5b9a\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u51fa\u3059
+
+Export_properties=\u7279\u6027\u3092\u66f8\u304d\u51fa\u3059
+
+Export_to_clipboard=\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u66f8\u304d\u51fa\u3059
+Export_to_SQL_database=SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u66f8\u304d\u51fa\u3059
+
+Exporting=\u66f8\u304d\u51fa\u3057\u4e2d
+Extension=\u62e1\u5f35\u5b50
+
+External_changes=\u5916\u90e8\u306e\u5909\u66f4
+
+External_file_links=\u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af
+
+External_files=\u5916\u90e8\u30d5\u30a1\u30a4\u30eb
+
+External_programs=\u5916\u90e8\u30d7\u30ed\u30b0\u30e9\u30e0
+
+External_viewer_called=\u5916\u90e8\u30d3\u30e5\u30fc\u30a2\u304c\u547c\u3073\u51fa\u3055\u308c\u307e\u3057\u305f
+
+Failed_to_read_groups_data_(unsupported_version\:_%0)=\u30b0\u30eb\u30fc\u30d7\u30c7\u30fc\u30bf\u3092\u8aad\u3081\u307e\u305b\u3093\u3067\u3057\u305f\uff08\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u7248:_%0\uff09
+
+Fetch=\u53d6\u5f97
+
+Field=\u30d5\u30a3\u30fc\u30eb\u30c9
+
+field=\u30d5\u30a3\u30fc\u30eb\u30c9
+
+#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
+Field_content=\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u5185\u5bb9
+
+Field_name=\u30d5\u30a3\u30fc\u30eb\u30c9\u540d
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=\u30d5\u30a3\u30fc\u30eb\u30c9\u540d\u306b\u306f\u3001\u30b9\u30da\u30fc\u30b9\u3084\u4ee5\u4e0b\u306e\u6587\u5b57\u3092\u4f7f\u3046\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093
+
+Field_sizes=\u30d5\u30a3\u30fc\u30eb\u30c9\u9577
+Field_to_filter=\u30d5\u30a3\u30eb\u30bf\u3092\u639b\u3051\u308b\u30d5\u30a3\u30fc\u30eb\u30c9
+
+Field_to_group_by=\u30b0\u30eb\u30fc\u30d7\u5316\u3059\u308b\u30d5\u30a3\u30fc\u30eb\u30c9
+
+Fields=\u30d5\u30a3\u30fc\u30eb\u30c9
+
+File=\u30d5\u30a1\u30a4\u30eb
+
+file=\u30d5\u30a1\u30a4\u30eb
+
+File_'%0'_is_already_open.=\u30d5\u30a1\u30a4\u30eb\u300c%0\u300d\u306f\u65e2\u306b\u958b\u304b\u308c\u3066\u3044\u307e\u3059\u3002
+
+File_'%0'_not_found=\u30d5\u30a1\u30a4\u30eb\u300c%0\u300d\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
+
+File_changed=\u30d5\u30a1\u30a4\u30eb\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f
+File_directory_is_'%0'\:=\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u300c%0\u300d\u3067\u3059:
+
+File_directory_is_not_set_or_does_not_exist!=\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u304b\u5b58\u5728\u3057\u307e\u305b\u3093\uff01
+File_download=\u30d5\u30a1\u30a4\u30eb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
+File_exists=\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u3059
+
+File_extension=\u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50
+File_has_been_updated_externally._What_do_you_want_to_do?=\u30d5\u30a1\u30a4\u30eb\u304c\u5916\u90e8\u304b\u3089\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f\u3002\u3069\u3046\u3057\u307e\u3059\u304b\uff1f
+
+File_not_found=\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
+File_type=\u30d5\u30a1\u30a4\u30eb\u578b
+
+File_updated_externally=\u30d5\u30a1\u30a4\u30eb\u304c\u5916\u90e8\u304b\u3089\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f
+
+filename=\u30d5\u30a1\u30a4\u30eb\u540d
+
+Files_opened=\u30d5\u30a1\u30a4\u30eb\u306f\u958b\u304b\u308c\u3066\u3044\u307e\u3059
+
+Filter=\u30d5\u30a3\u30eb\u30bf
+
+Finished_autosetting_external_links.=\u5916\u90e8\u30ea\u30f3\u30af\u306e\u81ea\u52d5\u8a2d\u5b9a\u304c\u7d42\u4e86\u3057\u307e\u3057\u305f
+
+Finished_synchronizing_%0_links._Entries_changed%c_%1.=%0\u30ea\u30f3\u30af\u306e\u540c\u671f\u3057\u7d42\u3048\u307e\u3057\u305f\u3002\u5909\u66f4\u3055\u308c\u305f\u9805\u76ee%c_%1\u3002
+Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=XMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u307f\u7d42\u308f\u308a\u307e\u3057\u305f\u3002%0\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u307f\u307e\u3057\u305f\u3002
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=XMP\u3092%0\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u307f\u7d42\u308f\u308a\u307e\u3057\u305f\uff08%1\u30b9\u30ad\u30c3\u30d7\u30fb%2\u30a8\u30e9\u30fc\uff09\u3002
+
+First_select_the_entries_you_want_keys_to_be_generated_for.=\u30ad\u30fc\u3092\u751f\u6210\u3055\u305b\u305f\u3044\u9805\u76ee\u3092\u307e\u305a\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Fit_table_horizontally_on_screen=\u8868\u3092\u753b\u9762\u4e0a\u306e\u6c34\u5e73\u65b9\u5411\u306b\u5408\u308f\u305b\u3066\u8868\u793a
+
+Float=\u4e0a\u90e8\u306b\u8868\u793a
+Float_marked_entries=\u6a19\u8b58\u3092\u4ed8\u3051\u305f\u9805\u76ee\u3092\u4e0a\u90e8\u3078
+
+Font_Family=\u30d5\u30a9\u30f3\u30c8\u65cf
+
+Font_Preview=\u30d5\u30a9\u30f3\u30c8\u30d7\u30ec\u30d3\u30e5\u30fc
+
+Font_Size=\u30d5\u30a9\u30f3\u30c8\u5bf8\u6cd5
+
+Font_Style=\u30d5\u30a9\u30f3\u30c8\u69d8\u5f0f
+
+FontSelector=\u30d5\u30a9\u30f3\u30c8\u306e\u9078\u629e
+
+for=;_\u5bfe\u8c61:
+
+Format_of_author_and_editor_names=\u8457\u8005\u540d\u3068\u7de8\u96c6\u8005\u540d\u306e\u66f8\u5f0f
+Format_String=\u6574\u5f62\u6587\u5b57\u5217
+
+Format_used=\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u66f8\u5f0f
+Formatter_Name=\u6574\u5f62\u5b9a\u7fa9\u306e\u540d\u79f0
+
+Formatter_not_found=\u6574\u5f62\u5b50\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
+
+found=\u691c\u51fa
+Found_%0_plugin(s)=%0\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u691c\u51fa
+
+found_in_aux_file=aux\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u51fa
+
+Full_name=\u59d3\u540d
+
+General=\u4e00\u822c
+
+General_fields=\u6c4e\u7528\u30d5\u30a3\u30fc\u30eb\u30c9
+
+Generate=\u751f\u6210
+
+Generate_BibTeX_key=BibTeX\u30ad\u30fc\u3092\u751f\u6210
+
+Generate_keys=\u30ad\u30fc\u3092\u751f\u6210
+
+Generate_keys_before_saving_(for_entries_without_a_key)=\u4fdd\u5b58\u524d\u306b\u30ad\u30fc\u3092\u751f\u6210\uff08\u30ad\u30fc\u306e\u306a\u3044\u9805\u76ee\u306b\u5bfe\u3057\u3066\uff09
+Generate_keys_for_imported_entries=\u8aad\u307f\u8fbc\u3093\u3060\u9805\u76ee\u306b\u30ad\u30fc\u3092\u751f\u6210
+
+Generate_now=\u3044\u307e\u751f\u6210\u3059\u308b
+
+Generated_BibTeX_key_for=\u4ee5\u4e0b\u306e\u9805\u76ee\u306eBibTeX\u30ad\u30fc\u3092\u751f\u6210\u3057\u307e\u3057\u305f:
+
+Generating_BibTeX_key_for=\u4ee5\u4e0b\u306e\u9805\u76ee\u306eBibTeX\u30ad\u30fc\u3092\u751f\u6210\u3057\u3066\u3044\u307e\u3059:
+
+Grab=\u5165\u624b
+
+Gray_out_entries_not_in_group_selection=\u30b0\u30eb\u30fc\u30d7\u9078\u629e\u306b\u306a\u3044\u9805\u76ee\u3092\u6de1\u8272\u5316\u3059\u308b
+
+Gray_out_non-hits=\u5408\u81f4\u3057\u306a\u3044\u3082\u306e\u3092\u6de1\u8272\u5316
+
+Gray_out_non-matching_entries=\u4e00\u81f4\u3057\u306a\u3044\u9805\u76ee\u3092\u6de1\u8272\u5316\u3059\u308b
+
+Group_properties=\u30b0\u30eb\u30fc\u30d7\u7279\u6027
+
+grouping_may_not_work_for_this_entry=\u3053\u306e\u9805\u76ee\u306b\u5bfe\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u5316\u306f\u52d5\u4f5c\u3057\u306a\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093
+
+Groups=\u30b0\u30eb\u30fc\u30d7
+
+Harvard_RTF=Harvard_RTF
+
+Have_you_chosen_the_correct_package_path?=\u6b63\u3057\u3044\u30d1\u30c3\u30b1\u30fc\u30b8\u30d1\u30b9\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u304b\uff1f
+
+Help=\u30d8\u30eb\u30d7
+
+Help_contents=\u30d8\u30eb\u30d7\u76ee\u6b21
+
+Help_on_groups=\u30b0\u30eb\u30fc\u30d7\u306b\u95a2\u3059\u308b\u30d8\u30eb\u30d7
+
+Help_on_key_patterns=\u30ad\u30fc\u30d1\u30bf\u30fc\u30f3\u306b\u95a2\u3059\u308b\u30d8\u30eb\u30d7
+Help_on_Preview_Settings=\u30d7\u30ec\u30d3\u30e5\u30fc\u8a2d\u5b9a\u306b\u95a2\u3059\u308b\u30d8\u30eb\u30d7
+Help_on_Regular_Expression_Search=\u6b63\u898f\u8868\u73fe\u691c\u7d22\u306b\u95a2\u3059\u308b\u30d8\u30eb\u30d7
+
+Hide_non-hits=\u5408\u81f4\u3057\u306a\u3044\u3082\u306e\u3092\u975e\u8868\u793a
+
+Hide_non-matching_entries=\u4e00\u81f4\u3057\u306a\u3044\u9805\u76ee\u3092\u975e\u8868\u793a
+
+Hierarchical_context=\u968e\u5c64\u30b3\u30f3\u30c6\u30af\u30b9\u30c8
+
+Highlight=\u7740\u8272
+Highlight_groups_matching_all_selected_entries=\u5168\u9078\u629e\u9805\u76ee\u306b\u4e00\u81f4\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u3092\u7740\u8272
+Highlight_groups_matching_any_selected_entry=\u4efb\u610f\u306e\u9078\u629e\u9805\u76ee\u306b\u4e00\u81f4\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u3092\u7740\u8272
+
+Highlight_overlapping_groups=\u91cd\u8907\u306e\u3042\u308b\u30b0\u30eb\u30fc\u30d7\u3092\u7740\u8272
+
+Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=\u30d2\u30f3\u30c8%c_\u7279\u5b9a\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u307f\u3092\u691c\u7d22\u3059\u308b\u306b\u306f\u3001\u305f\u3068\u3048\u3070%c<p><tt>author%esmith_and_title%eelectrical</tt>\u3068\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
+
+HTML=HTML
+HTML_table=HTML_table
+HTML_table_(with_Abstract_&_BibTeX)=HTML_table_(with_Abstract_&_BibTeX)
+Icon=\u30a2\u30a4\u30b3\u30f3
+
+Ignore=\u7121\u8996
+
+Immediate_subgroups=\u76f4\u4e0b\u306e\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7
+
+Import=\u8aad\u307f\u8fbc\u307f
+
+Import_and_keep_old_entry=\u8aad\u307f\u8fbc\u307f\u3092\u884c\u3044\u3001\u65e7\u9805\u76ee\u306f\u7dad\u6301
+
+Import_and_remove_old_entry=\u8aad\u307f\u8fbc\u307f\u3092\u884c\u3044\u3001\u65e7\u9805\u76ee\u306f\u524a\u9664
+
+Import_entries=\u9805\u76ee\u306e\u8aad\u307f\u8fbc\u307f
+
+Import_failed=\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f
+
+Import_file=\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f
+
+Import_group_definitions=\u30b0\u30eb\u30fc\u30d7\u5b9a\u7fa9\u3092\u8aad\u307f\u8fbc\u307f
+
+Import_name=\u8aad\u307f\u8fbc\u307f\u306e\u540d\u79f0
+
+Import_preferences=\u8a2d\u5b9a\u3092\u8aad\u307f\u8fbc\u3080
+
+Import_preferences_from_file=\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8a2d\u5b9a\u3092\u8aad\u307f\u8fbc\u307f
+
+Import_strings=\u6587\u5b57\u5217\u3092\u8aad\u307f\u8fbc\u307f
+
+Import_to_open_tab=\u8aad\u307f\u8fbc\u3093\u3067\u30bf\u30d6\u3092\u958b\u304f
+
+Import_word_selector_definitions=\u5358\u8a9e\u9078\u629e\u30e1\u30cb\u30e5\u30fc\u306e\u5b9a\u7fa9\u3092\u8aad\u307f\u8fbc\u307f
+
+Imported_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3057\u305f:
+
+Imported_entries=\u9805\u76ee\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3057\u305f:
+
+Imported_from_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u8aad\u307f\u8fbc\u307f\u307e\u3057\u305f:
+
+ImportFormat_class=ImportFormat\u30af\u30e9\u30b9
+
+Importing=\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059
+
+Importing_in_unknown_format=\u672a\u77e5\u306e\u66f8\u5f0f\u3067\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059
+
+In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=JabRef\u3067\u306f\u3001\u6587\u5b57\u5217\u3092\u8868\u3059\u306b\u306f\u4e00\u5bfe\u306e#\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Include_abstracts=\u6982\u8981\u3092\u53d6\u308a\u8fbc\u3080
+Include_entries=\u9805\u76ee\u3092\u542b\u3081\u308b
+
+Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u306e\u53d6\u308a\u8fbc\u307f\uff1a\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u3084\u305d\u306e\u914d\u4e0b\u306e\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u9805\u76ee\u3092\u8868\u793a
+
+Incremental=\u9010\u8a9e\u7684
+
+Incremental_search=\u9010\u8a9e\u691c\u7d22
+
+Incremental_search_failed._Repeat_to_search_from_top.=\u9010\u8a9e\u691c\u7d22\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u6700\u521d\u304b\u3089\u691c\u7d22\u3059\u308b\u5834\u5408\u306f\u3001\u3082\u3046\u4e00\u5ea6\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Independent_group\:_When_selected,_view_only_this_group's_entries=\u72ec\u7acb\u30b0\u30eb\u30fc\u30d7\uff1a\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u9805\u76ee\u306e\u307f\u3092\u8868\u793a
+
+Initially_show_groups_tree_expanded=\u6700\u521d\u306b\u30b0\u30eb\u30fc\u30d7\u30c4\u30ea\u30fc\u3092\u5c55\u958b\u3057\u305f\u72b6\u614b\u3067\u8868\u793a
+
+Input=\u5165\u529b
+
+Input_error=\u5165\u529b\u30a8\u30e9\u30fc
+
+Insert=\u633f\u5165
+
+Insert_rows=\u884c\u3092\u633f\u5165
+
+Insert_selected_citations_into_LyX/Kile=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092LyX/Kile\u306b\u633f\u5165
+
+Insert_selected_citations_into_WinEdt=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092WinEdt\u306b\u633f\u5165
+
+insert_string_=\u4ee5\u4e0b\u306e\u6587\u5b57\u5217\u3092\u633f\u5165
+
+Insert_URL=URL\u3092\u633f\u5165
+
+integrity=\u6574\u5408\u6027
+
+#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
+Integrity_check=\u6574\u5408\u6027\u691c\u67fb
+
+Intersection=\u8ad6\u7406\u7a4d
+
+Invalid_BibTeX_key=\u7121\u52b9\u306aBibTeX\u30ad\u30fc\u3067\u3059
+
+Invalid_date_format=\u7121\u52b9\u306a\u65e5\u4ed8\u66f8\u5f0f\u3067\u3059
+
+Invalid_URL=\u7121\u52b9\u306aURL\u3067\u3059
+
+Inverted=\u5426\u5b9a
+
+is_a_standard_type.=\u306f\u6a19\u6e96\u578b\u3067\u3059\u3002
+
+ISO_abbreviation=ISO\u77ed\u7e2e\u5f62
+
+Item_list_for_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u9805\u76ee\u4e00\u89a7
+jabref=jabref
+
+JabRef_help=JabRef\u30d8\u30eb\u30d7
+
+JabRef_preferences=JabRef\u306e\u8a2d\u5b9a
+
+Journal_abbreviations=\u8a8c\u540d\u77ed\u7e2e\u5f62
+
+Journal_list_preview=\u5b66\u8853\u8a8c\u540d\u8868\u306e\u30d7\u30ec\u30d3\u30e5\u30fc
+
+Journal_name=\u5b66\u8853\u8a8c\u540d
+
+Keep=\u7dad\u6301
+
+Keep_both=\u4e21\u8005\u3092\u7dad\u6301
+
+Keep_lower=\u4e0b\u3092\u7dad\u6301
+
+Keep_upper=\u4e0a\u3092\u7dad\u6301
+
+Key_bindings=\u30ad\u30fc\u5272\u308a\u5f53\u3066
+
+Key_bindings_changed=\u30ad\u30fc\u5272\u308a\u5f53\u3066\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f
+
+Key_generator_settings=\u30ad\u30fc\u751f\u6210\u30c4\u30fc\u30eb\u306e\u8a2d\u5b9a
+
+Key_pattern=\u30ad\u30fc\u30d1\u30bf\u30fc\u30f3
+
+keys_in_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u4e2d\u306e\u30ad\u30fc
+
+#nottranslated.Toviewit,usemenu"Tools|NewBibTeXfilefromAUxfile",andlaunchtheactiononanon-existantauxfile.
+Keyword=\u30ad\u30fc\u30ef\u30fc\u30c9
+
+Label=\u30e9\u30d9\u30eb
+
+Language=\u8a00\u8a9e
+
+Last_modified=\u6700\u7d42\u4fee\u6b63\u65e5\u6642
+
+LaTeX_AUX_file=LaTeX_AUX\u30d5\u30a1\u30a4\u30eb
+Leave_file_in_its_current_directory.=\u30d5\u30a1\u30a4\u30eb\u3092\u73fe\u5728\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u7f6e\u3044\u3066\u304a\u304f\u3002
+Leave_files_in_their_current_directory.=\u30d5\u30a1\u30a4\u30eb\u3092\u73fe\u5728\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u7f6e\u3044\u3066\u304a\u304f\u3002
+
+Left=\u5de6
+
+License=\u30e9\u30a4\u30bb\u30f3\u30b9
+
+Limit_to_fields=\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u5236\u9650
+
+Limit_to_selected_entries=\u9078\u629e\u9805\u76ee\u306b\u5236\u9650
+
+Link=\u30ea\u30f3\u30af
+Link_local_file=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u3092\u30ea\u30f3\u30af
+Link_to_file_%0=\u30d5\u30a1\u30a4\u30eb%0\u3078\u306e\u30ea\u30f3\u30af
+
+Listen_for_remote_operation_on_port=\u4ee5\u4e0b\u306e\u30dd\u30fc\u30c8\u3067\u30ea\u30e2\u30fc\u30c8\u64cd\u4f5c\u3092\u5f85\u3061\u53d7\u3051\u308b
+Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=\u8d77\u52d5\u6642\u306bjabref.xml\u306e\u8aad\u307f\u8fbc\u307f\u3068\u4fdd\u5b58\u3092\u884c\u3046\uff08\u30e1\u30e2\u30ea\u30fc\u30b9\u30c6\u30a3\u30c3\u30af\u30e2\u30fc\u30c9\uff09
+
+Load_session=\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u8aad\u307f\u8fbc\u307f
+
+Loading_session...=\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...
+localhost=\u30ed\u30fc\u30ab\u30eb\u30db\u30b9\u30c8
+
+Look_and_feel=\u64cd\u4f5c\u6027
+Looking_for_pdf...=PDF\u3092\u63a2\u3057\u3066\u3044\u307e\u3059...
+lower=\u4e0b\u3052\u308b
+Main_file_directory=\u57fa\u672c\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
+
+Main_layout_file=\u57fa\u672c\u30ec\u30a4\u30a2\u30a6\u30c8\u30d5\u30a1\u30a4\u30eb
+
+Main_PDF_directory=\u57fa\u672cPDF\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
+
+Main_PS_directory=\u57fa\u672cPS\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
+
+Manage=\u7ba1\u7406
+
+Manage_custom_exports=\u500b\u4eba\u8a2d\u5b9a\u66f8\u304d\u51fa\u3057\u306e\u7ba1\u7406
+
+Manage_custom_imports=\u500b\u4eba\u8a2d\u5b9a\u8aad\u307f\u8fbc\u307f\u306e\u7ba1\u7406
+Manage_external_file_types=\u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u578b\u306e\u7ba1\u7406
+
+Manage_journal_abbreviations=\u5b66\u8853\u8a8c\u540d\u77ed\u7e2e\u5f62\u306e\u7ba1\u7406
+
+Mark_entries=\u9805\u76ee\u3092\u6a19\u8b58
+
+Mark_entry=\u9805\u76ee\u3092\u6a19\u8b58
+
+Mark_new_entries_with_addition_date=\u65b0\u898f\u9805\u76ee\u306b\u8ffd\u52a0\u306e\u65e5\u4ed8\u3092\u8a18\u8f09
+
+Mark_new_entries_with_owner_name=\u65b0\u898f\u9805\u76ee\u306b\u30aa\u30fc\u30ca\u30fc\u540d\u3092\u8a18\u8f09
+
+Marked_selected=\u9078\u629e\u90e8\u3092\u6a19\u8b58\u3057\u307e\u3057\u305f:
+Memory_Stick_Mode=\u30e1\u30e2\u30ea\u30fc\u30b9\u30c6\u30a3\u30c3\u30af\u30e2\u30fc\u30c9
+
+Menu_and_label_font_size=\u30e1\u30cb\u30e5\u30fc\u3068\u30e9\u30d9\u30eb\u306e\u30d5\u30a9\u30f3\u30c8\u5bf8\u6cd5
+
+Merged_external_changes=\u5916\u90e8\u304b\u3089\u306e\u5909\u66f4\u3092\u7d71\u5408\u3057\u307e\u3057\u305f
+
+Messages=\u30e1\u30c3\u30bb\u30fc\u30b8
+
+Messages_and_Hints=\u30e1\u30c3\u30bb\u30fc\u30b8\u3068\u30d2\u30f3\u30c8
+
+Modification_of_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u4fee\u6b63
+
+Modified_group_"%0".=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u4fee\u6b63\u3057\u307e\u3057\u305f\u3002
+
+Modified_groups=\u30b0\u30eb\u30fc\u30d7\u3092\u4fee\u6b63\u3057\u307e\u3057\u305f
+
+Modified_string=\u6587\u5b57\u5217\u3092\u4fee\u6b63\u3057\u307e\u3057\u305f
+
+Modify=\u4fee\u6b63
+
+modify_group=\u30b0\u30eb\u30fc\u30d7\u3092\u4fee\u6b63
+
+MODS=MODS
+
+Move=\u79fb\u52d5
+
+Move_down=\u4e0b\u3052\u308b
+
+Move_entries_in_group_selection_to_the_top=\u30b0\u30eb\u30fc\u30d7\u9078\u629e\u4e2d\u306e\u9805\u76ee\u3092\u4e0a\u306b\u79fb\u52d5
+Move_external_links_to_'file'_field=\u5916\u90e8\u30ea\u30f3\u30af\u3092\u300c\u30d5\u30a1\u30a4\u30eb\u300d\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u79fb\u52d5
+Move_files_to_file_directory.=\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
+
+move_group=\u30b0\u30eb\u30fc\u30d7\u3092\u79fb\u52d5
+
+Move_string_down=\u6587\u5b57\u5217\u3092\u4e0b\u306b\u79fb\u52d5
+
+Move_string_up=\u6587\u5b57\u5217\u3092\u4e0a\u306b\u79fb\u52d5
+
+Move_up=\u4e0a\u3052\u308b
+
+Moved_group_"%0".=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u79fb\u52d5\u3057\u307e\u3057\u305f\u3002
+MS_Office_2007=MS_Office_2007
+MySQL=MySQL
+MySQL_database=MySQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
+
+Name=\u540d\u79f0
+Name_formatter=\u540d\u524d\u306e\u6574\u5f62
+
+Natbib_style=Natbib\u69d8\u5f0f
+
+nested_aux_files=\u5165\u308c\u5b50\u306b\u306a\u3063\u3066\u3044\u308baux\u30d5\u30a1\u30a4\u30eb
+
+New=\u65b0\u898f
+
+new=\u65b0\u898f
+
+New_BibTeX_database=\u65b0\u898fBibTeX\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
+
+New_BibTeX_entry=\u65b0\u898fBibTeX\u9805\u76ee
+
+New_BibTeX_subdatabase=\u65b0\u898fBibTeX\u526f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
+
+New_content=\u65b0\u898f\u5185\u5bb9
+
+New_database_created.=\u65b0\u898f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002
+New_field_value=\u65b0\u898f\u30d5\u30a3\u30fc\u30eb\u30c9\u5024
+
+New_file=\u65b0\u898f\u30d5\u30a1\u30a4\u30eb
+New_file_link_(INSERT)=\u65b0\u898f\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\uff08INSERT\uff09
+
+New_group=\u65b0\u898f\u30b0\u30eb\u30fc\u30d7
+
+New_string=\u65b0\u898f\u6587\u5b57\u5217
+
+Next_entry=\u6b21\u306e\u9805\u76ee
+
+No_%0_found=%0\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
+
+No_actual_changes_found.=\u5b9f\u969b\u306b\u5909\u66f4\u3055\u308c\u3066\u3044\u308b\u3068\u3053\u308d\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+
+no_base-bibtex-file_specified=\u30d9\u30fc\u30b9\u3068\u306a\u308bBibTeX\u30d5\u30a1\u30a4\u30eb\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093
+
+no_database_generated=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u751f\u6210\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f
+
+No_duplicates_found=\u91cd\u8907\u306f\u691c\u51fa\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f
+
+No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=\u9805\u76ee\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u6b63\u3057\u3044\u8aad\u307f\u8fbc\u307f\u30d5\u30a3\u30eb\u30bf\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+
+No_entries_found_for_the_search_string_'%0'=\u691c\u7d22\u6587\u5b57\u5217\u300c%0\u300d\u306b\u4e00\u81f4\u3059\u308b\u9805\u76ee\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+
+No_entries_imported.=\u9805\u76ee\u306f\u8aad\u307f\u8fbc\u307e\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+
+No_entries_or_multiple_entries_selected.=\u9805\u76ee\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
+
+No_entries_selected=\u9805\u76ee\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093
+No_entries_selected.=\u9805\u76ee\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
+
+No_exceptions_have_ocurred.=\u4f8b\u5916\u30a8\u30e9\u30fc\u306f\u767a\u751f\u3057\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+No_files_found.=\u30d5\u30a1\u30a4\u30eb\u304c\u307f\u3064\u304b\u308a\u307e\u305b\u3093\u3002
+
+No_GUI._Only_process_command_line_options.=GUI\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u307f\u51e6\u7406\u3057\u307e\u3059\u3002
+
+No_journal_names_could_be_abbreviated.=\u5b66\u8853\u8a8c\u540d\u3092\u77ed\u7e2e\u5f62\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+
+No_journal_names_could_be_unabbreviated.=\u5b66\u8853\u8a8c\u540d\u3092\u975e\u77ed\u7e2e\u5f62\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+No_PDF_linked=PDF\u306f\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u307e\u305b\u3093
+
+No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=PDF\u3084PS\u306e\u5b9a\u7fa9\u306f\u306a\u304f\u3001BibTeX\u30ad\u30fc\u306b\u4e00\u81f4\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3082\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
+No_plugins_were_found_in_the_following_folders\:=\u4ee5\u4e0b\u306e\u30d5\u30a9\u30eb\u30c0\u306b\u306f\u30d7\u30e9\u30b0\u30a4\u30f3\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f:
+
+No_references_found=\u53c2\u7167\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
+
+No_saved_session_found.=\u4fdd\u5b58\u3055\u308c\u305f\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u691c\u51fa\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+
+No_url_defined=URL\u306f\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093
+No_XMP_metadata_found_in_=\u4ee5\u4e0b\u306e\u5834\u6240\u306b\u306fXMP\u30e1\u30bf\u30c7\u30fc\u30bf\u306f\u3042\u308a\u307e\u305b\u3093:_
+
+not=not
+
+not_found=\u898b\u3064\u304b\u308a\u307e\u305b\u3093
+
+Not_saved_(empty_session)=\u4fdd\u5b58\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff08\u7a7a\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\uff09
+
+Note_that_the_entry_causing_the_problem_has_been_selected.=\u554f\u984c\u3092\u5f15\u304d\u8d77\u3053\u3059\u9805\u76ee\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=\u64cd\u4f5c\u6027(look&feel)\u306b\u306f\u3001\u5b8c\u5168\u306b\u6709\u52b9\u306a\u30af\u30e9\u30b9\u540d\u3092\u6307\u5b9a\u3057\u306a\u304f\u3066\u306f\u306a\u3089\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Nothing_to_redo=\u7e70\u308a\u8fd4\u3059\u3079\u304d\u3082\u306e\u304c\u3042\u308a\u307e\u305b\u3093
+
+Nothing_to_undo=\u53d6\u308a\u6d88\u3059\u3079\u304d\u3082\u306e\u304c\u3042\u308a\u307e\u305b\u3093
+
+#Thenextisusedlikein"Referencesfound:1Numberofreferencestofetch?"
+Number_of_references_to_fetch?=\u53d6\u5f97\u3059\u308b\u53c2\u7167\u6570\uff1f
+
+occurences=\u500b
+
+OK=OK
+
+Ok=OK
+One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=\u4e00\u3064\u306a\u3044\u3057\u305d\u308c\u4ee5\u4e0a\u306e\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u304c\u3001\u672a\u5b9a\u7fa9\u306e\u300c%0\u300d\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u3069\u3046\u3057\u307e\u3059\u304b\uff1f
+
+One_or_more_keys_will_be_overwritten._Continue?=\u4e00\u3064\u306a\u3044\u3057\u305d\u308c\u4ee5\u4e0a\u306e\u30ad\u30fc\u304c\u4e0a\u66f8\u304d\u3055\u308c\u307e\u3059\u3002\u7d9a\u3051\u307e\u3059\u304b\uff1f
+Only_one_item_is_supported=\u4e00\u9805\u76ee\u306e\u307f\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059
+
+Open=\u958b\u304f
+
+Open_BibTeX_database=BibTeX\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u304f
+
+Open_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u304f
+
+Open_editor_when_a_new_entry_is_created=\u65b0\u898f\u9805\u76ee\u3092\u751f\u6210\u3057\u305f\u969b\u306b\u30a8\u30c7\u30a3\u30bf\u3092\u958b\u304f
+
+Open_file=\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f
+
+Open_last_edited_databases_at_startup=\u8d77\u52d5\u6642\u306b\u6700\u5f8c\u306b\u7de8\u96c6\u3057\u3066\u3044\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u304f
+
+Open_PDF_or_PS=PDF\u307e\u305f\u306fPS\u3092\u958b\u304f
+
+Open_right-click_menu_with_Ctrl+left_button=Ctrl+\u5de6\u30dc\u30bf\u30f3\u3067\u53f3\u30af\u30ea\u30c3\u30af\u30e1\u30cb\u30e5\u30fc\u3092\u958b\u304f
+
+Open_URL_or_DOI=URL\u307e\u305f\u306fDOI\u3092\u958b\u304f
+OpenDocument_Spreadsheet=OpenDocument\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8
+
+Opened_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u304d\u307e\u3057\u305f
+
+Opening=\u958b\u3044\u3066\u3044\u307e\u3059
+
+Opening_preferences...=\u8a2d\u5b9a\u3092\u958b\u3044\u3066\u3044\u307e\u3059...
+
+OpenOffice_Calc=OpenOffice_Calc
+OpenOffice_CSV=OpenOffice_CSV
+Operation_canceled.\n=\u64cd\u4f5c\u306f\u53d6\u308a\u6d88\u3055\u308c\u307e\u3057\u305f\u3002\n
+Operation_not_supported=\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093
+
+Optional_fields=\u975e\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9
+
+Options=\u30aa\u30d7\u30b7\u30e7\u30f3
+
+or=or
+
+out_of=out_of
+Output=\u51fa\u529b
+
+Output_or_export_file=\u30d5\u30a1\u30a4\u30eb\u3092\u51fa\u529b\u3059\u308b\u304b\u66f8\u304d\u51fa\u3059
+
+Override=\u4e0a\u66f8\u304d
+
+Override_default_file_directories=\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u65e2\u5b9a\u5024\u306e\u4e0a\u66f8\u304d
+
+Override_default_font_settings=\u65e2\u5b9a\u30d5\u30a9\u30f3\u30c8\u8a2d\u5b9a\u3092\u4e0a\u66f8\u304d
+
+override_the_bibtex_key_by_the_selected_text=BibTeX\u30ad\u30fc\u3092\u9078\u629e\u3057\u305f\u6587\u5b57\u5217\u3067\u4e0a\u66f8\u304d
+
+
+Overwrite=\u4e0a\u66f8\u304d
+Overwrite_existing_field_values=\u65e2\u5b58\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u5024\u3092\u4e0a\u66f8\u304d
+
+Overwrite_keys=\u30ad\u30fc\u306e\u4e0a\u66f8\u304d
+
+pairs_processed=\u5bfe\u304c\u51e6\u7406\u3055\u308c\u307e\u3057\u305f
+Password_\:=\u30d1\u30b9\u30ef\u30fc\u30c9:
+
+Paste=\u8cbc\u308a\u4ed8\u3051
+
+paste_entries=\u9805\u76ee\u3092\u8cbc\u308a\u4ed8\u3051
+
+paste_entry=\u9805\u76ee\u3092\u8cbc\u308a\u4ed8\u3051
+Paste_from_clipboard=\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u304b\u3089\u8cbc\u308a\u4ed8\u3051
+
+Pasted=\u8cbc\u308a\u4ed8\u3051\u307e\u3057\u305f:
+
+Path_to_%0_not_defined=%0\u3078\u306e\u30d1\u30b9\u306f\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093
+
+Path_to_LatexEditor_(LEd.exe)=LatexEditor_(LEd.exe)_\u3078\u306e\u30d1\u30b9
+
+Path_to_LyX_pipe=LyX\u30d1\u30a4\u30d7\u3078\u306e\u30d1\u30b9
+
+Path_to_Vim=Vim\u3078\u306e\u30d1\u30b9
+
+Path_to_WinEdt.exe=WinEdt.exe\u3078\u306e\u30d1\u30b9
+
+PDF_directory=PDF\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
+PDF_does_not_exist=PDF\u304c\u5b58\u5728\u3057\u307e\u305b\u3093
+
+Personal_journal_list=\u500b\u4eba\u7528\u5b66\u8853\u8a8c\u540d\u8868
+
+Plain_text_import=\u5e73\u6587\u8aad\u307f\u8fbc\u307f
+
+Please_check_your_network_connection_to_this_machine.=\u3053\u306e\u30de\u30b7\u30f3\u3078\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u63a5\u7d9a\u3092\u691c\u67fb\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Please_enter_a_name_for_the_group.=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u7528\u306e\u540d\u79f0\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=\u691c\u7d22\u9805\u76ee\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305f\u3068\u3048\u3070\u3001<b>Smith</b>\u306e\u3059\u3079\u3066\u306e\u9805\u76ee\u3092\u691c\u7d22\u3059\u308b\u306b\u306f\u3001<p><tt>smith< [...]
+
+Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=\u691c\u7d22\u3059\u308b\u30d5\u30a3\u30fc\u30eb\u30c9\uff08\u4f8b\uff1a<b>keywords</b>\uff09\u3068\u305d\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u5185\u3067\u691c\u7d22\u3057\u305f\u3044\u30ad\u30fc\u30ef\u30fc\u30c9\uff08\u4f8b\uff1a<b>electrical</b>\uff09\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Please_enter_the_string's_label=\u6587\u5b57\u5217\u306e\u30e9\u30d9\u30eb\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Please_select_an_importer=\u8aad\u307f\u8fbc\u307f\u6cd5\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
+
+Please_select_an_importer.=\u8aad\u307f\u8fbc\u307f\u6cd5\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Please_select_exactly_one_group_to_move.=\u79fb\u52d5\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u3092\u4e00\u3064\u3060\u3051\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Please_specify_the_=\u4ee5\u4e0b\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044:_
+
+Possible_duplicate_entries=\u6f5c\u5728\u7684\u306a\u91cd\u8907\u9805\u76ee
+
+Possible_duplicate_of_existing_entry._Click_to_resolve.=\u65e2\u5b58\u9805\u76ee\u3068\u91cd\u8907\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u89e3\u6d88\u3059\u308b\u306b\u306f\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Preamble=\u30d7\u30ea\u30a2\u30f3\u30d6\u30eb
+
+Preferences=\u8a2d\u5b9a
+
+Preferences_recorded.=\u8a2d\u5b9a\u304c\u8a18\u9332\u3055\u308c\u307e\u3057\u305f\u3002
+
+Preview=\u30d7\u30ec\u30d3\u30e5\u30fc
+
+Previous_entry=\u524d\u306e\u9805\u76ee
+
+Primary_sort_criterion=\u7b2c\u4e00\u6574\u5e8f\u57fa\u6e96
+Print_Preview=\u5370\u5237\u30d7\u30ec\u30d3\u30e5\u30fc
+Printing_Entry_Preview=\u9805\u76ee\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u5370\u5237\u3057\u3066\u3044\u307e\u3059
+
+Problem_with_parsing_entry=\u9805\u76ee\u3092\u89e3\u6790\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f
+Processing_=\u4ee5\u4e0b\u3092\u51e6\u7406\u4e2d\u3067\u3059:_
+Program_output=\u30d7\u30ed\u30b0\u30e9\u30e0\u51fa\u529b
+
+PS_directory=PS\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
+Push_entries_to_external_application_(%0)=\u9805\u76ee\u3092\u5916\u90e8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u9001\u308a\u8fbc\u3080_(%0)
+
+Push_selection_to_Emacs=\u9078\u629e\u90e8\u3092Emacs\u306b\u9001\u308a\u8fbc\u3080
+
+Push_selection_to_LyX/Kile=\u9078\u629e\u90e8\u3092LyX/Kile\u306b\u9001\u308a\u8fbc\u3080
+Push_selection_to_Vim=\u9078\u629e\u90e8\u3092Vim\u306b\u9001\u308a\u8fbc\u3080
+
+Push_selection_to_WinEdt=\u9078\u629e\u90e8\u3092WinEdt\u306b\u9001\u308a\u8fbc\u3080
+
+Push_to_LatexEditor=LatexEditor\u306b\u9001\u308a\u8fbc\u3080
+Pushed_citations_to_%0=\u5f15\u7528\u3092%0\u306b\u9001\u308a\u8fbc\u307f\u307e\u3057\u305f
+
+Pushed_citations_to_Emacs=\u5f15\u7528\u3092Emacs\u306b\u9001\u308a\u8fbc\u307f\u307e\u3057\u305f
+Pushed_citations_to_Vim=\u5f15\u7528\u3092Vim\u306b\u9001\u308a\u8fbc\u307f\u307e\u3057\u305f
+
+Pushed_citations_to_WinEdt=\u5f15\u7528\u3092WinEdt\u306b\u9001\u308a\u8fbc\u307f\u307e\u3057\u305f
+
+Pushed_the_citations_for_the_following_rows_to=\u4ee5\u4e0b\u306e\u884c\u306e\u5f15\u7528\u3092\u3053\u3053\u306b\u9001\u308a\u8fbc\u307f\u307e\u3057\u305f:
+
+Quit_JabRef=JabRef\u3092\u7d42\u4e86
+
+Quit_synchronization=\u52d5\u6a5f\u3092\u7d42\u4e86\u3059\u308b
+
+Raw_source=\u5143\u306e\u30bd\u30fc\u30b9
+
+Really_delete_the_selected=\u672c\u5f53\u306b\u4ee5\u4e0b\u306e\u9078\u629e\u3092\u524a\u9664\u3057\u307e\u3059\u304b:_
+
+Rearrange_tabs_alphabetically_by_title=\u30bf\u30d6\u3092\u30bf\u30a4\u30c8\u30eb\u3067\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8\u9806\u306b\u6574\u5e8f
+
+Redo=\u7e70\u308a\u8fd4\u3057
+
+Reference_database=\u53c2\u7167\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
+
+#Thenexttwolinesareusedlikein"Referencesfound:1Numberofreferencestofetch?"
+References_found=\u53c2\u7167\u3092\u691c\u51fa
+
+Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=\u4e0a\u5c64\u30b0\u30eb\u30fc\u30d7\u306e\u7d5e\u308a\u8fbc\u307f\uff1a\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u3068\u305d\u306e\u4e0a\u5c64\u30b0\u30eb\u30fc\u30d7\u306e\u4e21\u65b9\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u9805\u76ee\u3092\u8868\u793a
+
+Refresh_view=\u8868\u793a\u3092\u66f4\u65b0
+
+Regular_Expression=\u6b63\u898f\u8868\u73fe
+
+Remember_these_entry_types?=\u3053\u308c\u3089\u306e\u9805\u76ee\u578b\u3092\u8a18\u61b6\u3057\u307e\u3059\u304b\uff1f
+
+Remote_operation=\u30ea\u30e2\u30fc\u30c8\u64cd\u4f5c
+
+Remote_server_port=\u30ea\u30e2\u30fc\u30c8\u30b5\u30fc\u30d0\u30fc\u306e\u30dd\u30fc\u30c8
+
+Remove=\u524a\u9664
+
+Remove_all?=\u3059\u3079\u3066\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
+
+Remove_all_subgroups=\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664
+
+Remove_all_subgroups_of_"%0"?=\u300c%0\u300d\u306e\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u3059\u3079\u3066\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
+
+Remove_double_braces_around_BibTeX_fields_when_loading.=\u8aad\u307f\u8fbc\u307f\u6642\u306bBibTeX\u30d5\u30a3\u30fc\u30eb\u30c9\u5468\u56f2\u306e\u4e8c\u91cd\u6ce2\u62ec\u5f27\u3092\u53d6\u308a\u9664\u304f
+
+Remove_duplicates=\u91cd\u8907\u5206\u3092\u524a\u9664
+
+Remove_entry_from_import=\u8aad\u307f\u8fbc\u307f\u5206\u304b\u3089\u9805\u76ee\u3092\u524a\u9664
+
+Remove_entry_selection_from_this_group=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u9078\u629e\u9805\u76ee\u3092\u524a\u9664
+
+Remove_entry_type=\u9805\u76ee\u578b\u3092\u524a\u9664
+Remove_file_link_(DELETE)=\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u524a\u9664\uff08DELETE\uff09
+
+remove_from_group=\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u524a\u9664
+
+Remove_from_group=\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u524a\u9664
+
+Remove_group=\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664
+
+Remove_group,_keep_subgroups=\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664\u3057\u3001\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u306f\u7dad\u6301
+
+Remove_group_"%0"?=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
+
+Remove_group_"%0"_and_its_subgroups?=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3068\u305d\u306e\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
+
+remove_group_(keep_subgroups)=\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664\uff08\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u306f\u7dad\u6301\uff09
+
+remove_group_and_subgroups=\u30b0\u30eb\u30fc\u30d7\u3068\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664
+
+Remove_group_and_subgroups=\u30b0\u30eb\u30fc\u30d7\u3068\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664
+
+Remove_link=\u30ea\u30f3\u30af\u3092\u524a\u9664
+
+Remove_old_entry=\u65e7\u9805\u76ee\u3092\u524a\u9664
+
+Remove_selected_strings=\u9078\u629e\u3057\u305f\u6587\u5b57\u5217\u3092\u524a\u9664\u3059\u308b
+
+remove_string_=\u4ee5\u4e0b\u306e\u6587\u5b57\u5217\u3092\u524a\u9664:_
+
+Removed_group_"%0".=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u524a\u9664\u3057\u307e\u3057\u305f\u3002
+
+Removed_group_"%0"_and_its_subgroups.=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3068\u305d\u306e\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664\u3057\u307e\u3057\u305f\u3002
+
+Removed_string=\u6587\u5b57\u5217\u3092\u524a\u9664\u3057\u307e\u3057\u305f
+
+Renamed_string=\u6587\u5b57\u5217\u3092\u6539\u540d\u3057\u307e\u3057\u305f
+
+Replace=\u7f6e\u63db
+
+Replace_(regular_expression)=\u7f6e\u63db\u5bfe\u8c61\uff08\u6b63\u898f\u8868\u73fe\uff09
+
+Replace_string=\u6587\u5b57\u5217\u3092\u7f6e\u63db
+
+Replace_with=\u7f6e\u63db\u6587\u5b57\u5217
+
+Replaced=\u7f6e\u63db\u3057\u307e\u3057\u305f
+
+Required_fields=\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9
+
+Reset_all=\u3059\u3079\u3066\u30ea\u30bb\u30c3\u30c8
+Reset_file_type_definitons=\u30d5\u30a1\u30a4\u30eb\u578b\u5b9a\u7fa9\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u307e\u3057\u305f
+
+Resolve_strings_for_all_fields_except=\u6587\u5b57\u5217\u3092\u4ee5\u4e0b\u3092\u9664\u3044\u305f\u5168\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u5c55\u958b\u3059\u308b
+Resolve_strings_for_standard_BibTeX_fields_only=\u6587\u5b57\u5217\u3092BibTeX\u6a19\u6e96\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u306e\u307f\u5c55\u958b\u3059\u308b
+
+resolved=\u89e3\u6d88\u3057\u307e\u3057\u305f
+
+Results=\u7d50\u679c
+
+Revert_to_original_source=\u5143\u306e\u30bd\u30fc\u30b9\u306b\u5fa9\u5e30\u3059\u308b
+
+Review=\u8ad6\u8a55
+
+Review_changes=\u5909\u66f4\u3092\u691c\u67fb\u3059\u308b
+
+Right=\u53f3
+root=root
+
+Save=\u4fdd\u5b58
+Save_all_finished.=\u4fdd\u5b58\u304c\u3059\u3079\u3066\u7d42\u308f\u308a\u307e\u3057\u305f\u3002
+
+Save_all_open_databases=\u3059\u3079\u3066\u306e\u958b\u304b\u308c\u3066\u3044\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58
+
+Save_before_closing=\u9589\u3058\u308b\u524d\u306b\u4fdd\u5b58
+
+Save_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58
+Save_database_as_...=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58...
+
+Save_entries_in_their_original_order=\u9805\u76ee\u3092\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u9806\u5e8f\u3067\u4fdd\u5b58
+
+Save_failed=\u4fdd\u5b58\u306b\u5931\u6557
+
+Save_failed_during_backup_creation=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u4f5c\u6210\u4e2d\u306b\u4fdd\u5b58\u306b\u5931\u6557
+
+Save_failed_while_committing_changes=\u5909\u66f4\u3092\u30b3\u30df\u30c3\u30c8\u4e2d\u306b\u4fdd\u5b58\u306b\u5931\u6557
+
+Save_ordered_by_author/editor/year=author/editor/year\u3067\u6574\u5e8f\u3057\u3066\u4fdd\u5b58
+Save_selected_as_...=\u9078\u629e\u90e8\u306b\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58...
+
+Saved_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58\u3057\u307e\u3057\u305f
+
+Saved_selected_to=\u9078\u629e\u90e8\u3092\u4ee5\u4e0b\u306b\u4fdd\u5b58\u3057\u307e\u3057\u305f:
+
+Saved_session=\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u4fdd\u5b58\u3057\u307e\u3057\u305f
+
+Saving=\u4fdd\u5b58\u3057\u3066\u3044\u307e\u3059
+Saving_all_databases...=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u3059\u3079\u3066\u4fdd\u5b58\u3057\u3066\u3044\u307e\u3059...
+
+Saving_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58\u3057\u3066\u3044\u307e\u3059
+
+Scan=\u30b9\u30ad\u30e3\u30f3
+
+Search=\u691c\u7d22
+
+Search_All_Fields=\u5168\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u691c\u7d22
+
+Search_all_fields=\u5168\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u691c\u7d22
+
+Search_error=\u691c\u7d22\u30a8\u30e9\u30fc
+
+Search_expression=\u691c\u7d22\u8868\u73fe
+
+Search_for=\u691c\u7d22\u5bfe\u8c61
+
+Search_general_fields=\u6c4e\u7528\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u691c\u7d22
+
+Search_IEEEXplore=IEEEXplore\u3092\u691c\u7d22
+Search_IEEExplore=IEEEXplore\u3092\u691c\u7d22
+
+Search_optional_fields=\u975e\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u691c\u7d22
+
+Search_required_fields=\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u691c\u7d22
+
+Search_Specified_Field(s)=\u6307\u5b9a\u3057\u305f\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u691c\u7d22
+
+Searched_database._Global_number_of_hits=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u691c\u7d22\u3057\u307e\u3057\u305f\u3002\u5168\u4f53\u306e\u8a72\u5f53\u6570
+
+Searched_database._Number_of_hits=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u691c\u7d22\u3057\u307e\u3057\u305f\u3002\u8a72\u5f53\u6570
+
+Searching_for_%0_file=%0\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3057\u3066\u3044\u307e\u3059
+
+Searching_for_duplicates...=\u91cd\u8907\u3092\u691c\u7d22\u3057\u3066\u3044\u307e\u3059...
+
+Searching_for_files=\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3057\u3066\u3044\u307e\u3059
+
+Secondary_sort_criterion=\u7b2c\u4e8c\u6574\u5e8f\u57fa\u6e96
+
+Select=\u9078\u629e
+
+Select_a_Zip-archive=Zip\u66f8\u5eab\u3092\u9078\u629e
+
+Select_action=\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u9078\u629e
+
+Select_all=\u3059\u3079\u3066\u9078\u629e
+
+Select_Classpath_of_New_Importer=\u65b0\u3057\u3044\u8aad\u307f\u8fbc\u307f\u306e\u30af\u30e9\u30b9\u30d1\u30b9\u3092\u9078\u629e
+
+Select_encoding=\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u9078\u629e
+
+Select_entries_in_group_selection=\u30b0\u30eb\u30fc\u30d7\u9078\u629e\u306b\u3042\u308b\u9805\u76ee\u3092\u9078\u629e\u3059\u308b
+
+Select_entry_type=\u9805\u76ee\u578b\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
+Select_external_application=\u5916\u90e8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u9078\u629e
+
+Select_file_from_ZIP-archive=ZIP\u66f8\u5eab\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
+
+Select_format=\u66f8\u5f0f\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
+Select_icon=\u30a2\u30a4\u30b3\u30f3\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
+
+Select_matches=\u4e00\u81f4\u3057\u305f\u3082\u306e\u3092\u9078\u629e
+
+Select_new_ImportFormat_Subclass=\u65b0\u3057\u3044ImportFormat\u30b5\u30d6\u30af\u30e9\u30b9\u3092\u9078\u629e
+
+Select_the_tree_nodes_to_view_and_accept_or_reject_changes=\u30c4\u30ea\u30fc\u30ce\u30fc\u30c9\u3092\u9078\u629e\u3057\u3066\u8868\u793a\u3055\u305b\u3001\u5909\u66f4\u3092\u53d7\u8afe\u306a\u3044\u3057\u62d2\u5426\u3057\u3066\u304f\u3060\u3055\u3044
+Selected_entries=\u9078\u629e\u3057\u305f\u9805\u76ee
+
+Selector_enabled_fields=\u30bb\u30ec\u30af\u30bf\u304c\u6709\u52b9\u306b\u3057\u305f\u30d5\u30a3\u30fc\u30eb\u30c9
+Server_Hostname_\:=\u30b5\u30fc\u30d0\u30fc\u30db\u30b9\u30c8\u540d:
+Server_Type_\:=\u30b5\u30fc\u30d0\u30fc\u578b:
+Set_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a
+Set_fields=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a
+
+Set_general_fields=\u6c4e\u7528\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a
+Set_main_external_file_directory=\u4e3b\u5e79\u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044
+
+Set_table_font=\u8868\u30d5\u30a9\u30f3\u30c8\u3092\u8a2d\u5b9a
+
+Settings=\u8a2d\u5b9a
+
+Setup_selectors=\u9078\u629e\u30e1\u30cb\u30e5\u30fc\u3092\u8a2d\u5b9a
+
+Short_form=\u77ed\u7e2e\u5f62
+
+Shortcut=\u77ed\u7d61
+
+Show/edit_BibTeX_source=BibTeX\u30bd\u30fc\u30b9\u3092\u8868\u793a\u30fb\u7de8\u96c6
+
+Show_'Firstname_Lastname'=\u300c\u540d_\u59d3\u300d\u3068\u8868\u793a
+
+Show_'Lastname,_Firstname'=\u300c\u59d3,_\u540d\u300d\u3068\u8868\u793a
+
+Show_BibTeX_source_by_default=\u65e2\u5b9a\u3067BibTeX\u30bd\u30fc\u30b9\u3092\u8868\u793a
+
+Show_BibTeX_source_panel=BibTeX\u30bd\u30fc\u30b9\u30d1\u30cd\u30eb\u3092\u8868\u793a
+
+Show_confirmation_dialog_when_deleting_entries=\u9805\u76ee\u3092\u524a\u9664\u3059\u308b\u969b\u306b\u78ba\u8a8d\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u8868\u793a
+
+Show_description=\u8aac\u660e\u3092\u8868\u793a
+
+Show_dynamic_groups_in_<i>italics</i>=\u52d5\u7684\u30b0\u30eb\u30fc\u30d7\u3092<i>\u30a4\u30bf\u30ea\u30c3\u30af\u4f53</i>\u3067\u8868\u793a
+
+Show_entries_*not*_in_group_selection=\u30b0\u30eb\u30fc\u30d7\u9078\u629e\u306b\u300c\u306a\u3044\u300d\u9805\u76ee\u3092\u8868\u793a\u3059\u308b
+
+Show_file_column=\u30d5\u30a1\u30a4\u30eb\u5217\u3092\u8868\u793a
+
+Show_icons_for_groups=\u30b0\u30eb\u30fc\u30d7\u306b\u30a2\u30a4\u30b3\u30f3\u3092\u8868\u793a
+Show_last_names_only=\u59d3\u306e\u307f\u3092\u8868\u793a\u3059\u308b
+
+Show_names_unchanged=\u6c0f\u540d\u3092\u305d\u306e\u307e\u307e\u8868\u793a
+
+Show_one_less_rows=\u8868\u793a\u3092\u4e00\u884c\u5206\u72ed\u3081\u308b
+
+Show_one_more_row=\u8868\u793a\u3092\u4e00\u884c\u5206\u5e83\u3052\u308b
+
+Show_optional_fields=\u975e\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8868\u793a
+
+Show_PDF/PS_column=PDF/PS\u5217\u3092\u8868\u793a
+
+Show_required_fields=\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8868\u793a
+
+Show_URL/DOI_column=URL/DOI\u5217\u3092\u8868\u793a
+
+Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u304c\u5165\u529b\u3055\u308c\u305f\u969b\u306b\u8b66\u544a\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u8868\u793a
+
+Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=\u7a7a\u306eBibTeX\u30ad\u30fc\u304c\u5165\u529b\u3055\u308c\u305f\u969b\u306b\u8b66\u544a\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u8868\u793a
+
+Simple_HTML=\u5358\u7d14\u306aHTML
+
+Size=\u30b5\u30a4\u30ba
+
+Skip=\u30b9\u30ad\u30c3\u30d7
+Skipped_-_No_PDF_linked=\u8df3\u3070\u3057\u307e\u3057\u305f_-_PDF\u304c\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u307e\u305b\u3093
+Skipped_-_PDF_does_not_exist=\u8df3\u3070\u3057\u307e\u3057\u305f_-_PDF\u304c\u5b58\u5728\u3057\u307e\u305b\u3093
+
+Skipped_entry.=\u9805\u76ee\u3092\u8df3\u3070\u3057\u307e\u3057\u305f\u3002
+
+Sort_alphabetically=\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8\u9806\u306b\u6574\u5e8f
+
+Sort_Automatically=\u81ea\u52d5\u6574\u5e8f
+
+Sort_order=\u6574\u5e8f
+
+sort_subgroups=\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u6574\u5e8f
+
+Sorted_all_subgroups_recursively.=\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u3059\u3079\u3066\u518d\u5e30\u7684\u306b\u6574\u5e8f\u3057\u307e\u3057\u305f\u3002
+
+Sorted_immediate_subgroups.=\u76f4\u4e0b\u306e\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u6574\u5e8f\u3057\u307e\u3057\u305f\u3002
+
+source_edit=\u30bd\u30fc\u30b9\u306e\u7de8\u96c6
+Special_Name_Formatters=\u540d\u524d\u306e\u6574\u5f62\u306e\u5b9a\u7fa9
+
+Special_table_columns=\u7279\u6b8a\u306a\u8868\u5217
+SQL_connection_established.=SQL\u63a5\u7d9a\u304c\u78ba\u7acb\u3057\u307e\u3057\u305f\u3002
+
+Start_incremental_search=\u9010\u8a9e\u691c\u7d22\u3092\u958b\u59cb
+
+Start_search=\u691c\u7d22\u3092\u958b\u59cb
+Starting_import=\u8aad\u307f\u8fbc\u307f\u3092\u958b\u59cb
+
+Statically_group_entries_by_manual_assignment=\u624b\u52d5\u5272\u308a\u5f53\u3066\u306b\u3088\u3063\u3066\u9759\u7684\u306b\u9805\u76ee\u3092\u30b0\u30eb\u30fc\u30d7\u5316
+
+Status=\u72b6\u614b
+
+Stop=\u505c\u6b62
+
+Store_journal_abbreviations=\u5b66\u8853\u8a8c\u540d\u306e\u77ed\u7e2e\u5f62\u3092\u4fdd\u7ba1
+
+Store_string=\u6587\u5b57\u5217\u3092\u4fdd\u7ba1
+
+Store_the_following_fields_with_braces_around_capital_letters=\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u3001\u5927\u6587\u5b57\u306e\u5468\u56f2\u3092\u4e2d\u62ec\u5f27\u3067\u56f2\u3063\u3066\u4fdd\u5b58
+
+Stored_entry=\u9805\u76ee\u3092\u4fdd\u7ba1
+
+Strings=\u6587\u5b57\u5217
+
+Strings_for_database=\u53f3\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u7528\u3044\u308b\u6587\u5b57\u5217
+
+Subdatabase_from_aux=aux\u304b\u3089\u526f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
+
+Suggest=\u5019\u88dc
+
+Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=\u5b66\u8853\u8a8c\u540d\u304c\u65e2\u77e5\u306e\u5834\u5408\u306f\u3001\u5b8c\u5168\u306a\u5b66\u8853\u8a8c\u540d\u3068\u77ed\u7e2e\u5f62\u3092\u5207\u308a\u66ff\u3048\u308b\u3002
+
+Synchronize_%0_links=%0\u30ea\u30f3\u30af\u3092\u540c\u671f
+Synchronize_file_links=\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u540c\u671f
+
+Synchronizing_%0_links...=%0\u30ea\u30f3\u30af\u3092\u540c\u671f...
+
+Table_appearance=\u8868\u306e\u5916\u89b3
+
+Table_background_color=\u8868\u306e\u80cc\u666f\u8272
+
+Table_grid_color=\u8868\u306e\u7f6b\u7dda\u8272
+
+Table_text_color=\u8868\u306e\u6587\u5b57\u8272
+
+Tabname=\u30bf\u30d6\u540d
+Target_file_cannot_be_a_directory.=\u30bf\u30fc\u30b2\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u3042\u3063\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
+
+Tertiary_sort_criterion=\u7b2c\u4e09\u6574\u5e8f\u57fa\u6e96
+
+Test=\u78ba\u8a8d
+
+Text_Input_Area=\u30c6\u30ad\u30b9\u30c8\u3092\u3053\u3053\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044
+
+The_#_character_is_not_allowed_in_BibTeX_fields=#\u6587\u5b57\u306fBibTeX\u30d5\u30a3\u30fc\u30eb\u30c9\u4e2d\u3067\u306f\u4f7f\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
+
+The_chosen_date_format_for_new_entries_is_not_valid=\u65b0\u898f\u9805\u76ee\u306b\u9078\u629e\u3057\u305f\u65e5\u4ed8\u66f8\u5f0f\u306f\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093
+
+The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=\u9078\u629e\u3057\u305f\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u300c%0\u300d\u306f\u3001\u4ee5\u4e0b\u306e\u6587\u5b57\u3092\u30a8\u30f3\u30b3\u30fc\u30c9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:_
+
+The_CiteSeer_fetch_operation_returned_zero_results.=CiteSeerX\u304b\u3089\u306e\u53d6\u5f97\u64cd\u4f5c\u306f\u3001\u8a72\u5f530\u4ef6\u3068\u56de\u7b54\u3057\u307e\u3057\u305f\u3002
+
+
+The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=\u73fe\u5728\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u3001\u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30ea\u30f3\u30af\u3092\u53d6\u308a\u6271\u3046\u306e\u306b\u65b0\u3057\u3044\u65b9\u6cd5\u3092\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002<br>\u3053\u308c\u3092\u5229\u [...]
+
+the_field_<b>%0</b>=\u30d5\u30a3\u30fc\u30eb\u30c9<b>%0</b>
+
+The_file<BR>'%0'<BR>has_been_modified<BR>externally!=\u30d5\u30a1\u30a4\u30eb<BR>'%0'<BR>\u306f\u5916\u90e8\u304b\u3089<BR>\u4fee\u6b63\u3055\u308c\u307e\u3057\u305f\uff01
+
+The_group_"%0"_already_contains_the_selection.=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u306b\u306f\u65e2\u306b\u9078\u629e\u3057\u305f\u3082\u306e\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
+
+The_label_of_the_string_can_not_be_a_number.=\u6587\u5b57\u5217\u306e\u30e9\u30d9\u30eb\u306f\u6570\u5b57\u3067\u3042\u3063\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
+
+The_label_of_the_string_can_not_contain_spaces.=\u6587\u5b57\u5217\u306e\u30e9\u30d9\u30eb\u306b\u306f\u30b9\u30da\u30fc\u30b9\u3092\u5165\u308c\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
+
+The_label_of_the_string_can_not_contain_the_'#'_character.=\u6587\u5b57\u5217\u306e\u30e9\u30d9\u30eb\u306b\u306f\u300c#\u300d\u6587\u5b57\u3092\u5165\u308c\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
+
+The_output_option_depends_on_a_valid_import_option.=\u3053\u306e\u51fa\u529b\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3001\u6709\u52b9\u306a\u8aad\u307f\u8fbc\u307f\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002
+The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=\u3053\u306ePDF\u306f\u3001BibTeX\u30ec\u30b3\u30fc\u30c9\u3092\u542b\u3093\u3067\u3044\u307e\u3059\u3002\n\u3053\u308c\u3089\u3092\u3001\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u65b0\u898f\u9805\u76ee\u3068\u3057\u3066\u8aad\u307f\u8fbc\u307f\u307e\u3059\u304b\uff1f
+
+The_regular_expression_<b>%0</b>_is_invalid%c=\u6b63\u898f\u8868\u73fe<b>%0</b>\u306f\u7121\u52b9\u3067\u3059%c
+
+The_search_is_case_insensitive.=\u691c\u7d22\u306f\u5927\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3057\u307e\u305b\u3093\u3002
+
+The_search_is_case_sensitive.=\u691c\u7d22\u306f\u5927\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3057\u307e\u3059\u3002
+
+The_string_has_been_removed_locally=\u6587\u5b57\u5217\u306f\u30ed\u30fc\u30ab\u30eb\u3067\u524a\u9664\u3055\u308c\u307e\u3057\u305f
+
+There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=\u89e3\u6d88\u3055\u308c\u3066\u3044\u306a\u3044\u91cd\u8907\u3068\u601d\u308f\u308c\u308b\u3082\u306e\u304c\u5b58\u5728\u3057\u307e\u3059\uff08\u300cD\u300d\u30a2\u30a4\u30b3\u30f3\u3067\u6a19\u8b58\u3055\u308c\u3066\u3044\u307e\u3059\uff09\u3002\u5148\u306b\u9032\u307f\u307e\u3059\u304b\uff1f
+
+this_button_will_update=\u3053\u306e\u30dc\u30bf\u30f3\u306f\u53f3\u306e\u3082\u306e\u3092\u66f4\u65b0\u3057\u307e\u3059
+This_database_was_written_using_an_older_version_of_JabRef.=\u3053\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u3001JabRef\u65e7\u7248\u3092\u4f7f\u7528\u3057\u3066\u66f8\u304d\u8fbc\u307e\u308c\u3066\u3044\u307e\u3059\u3002
+
+This_entry_has_no_BibTeX_key._Generate_key_now?=\u3053\u306e\u9805\u76ee\u306b\u306fBibTeX\u30ad\u30fc\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u3044\u307e\u751f\u6210\u3057\u307e\u3059\u304b\uff1f
+
+This_entry_is_incomplete=\u3053\u306e\u9805\u76ee\u306f\u4e0d\u5b8c\u5168\u3067\u3059
+
+This_entry_type_cannot_be_removed.=\u3053\u306e\u9805\u76ee\u578b\u306f\u89e3\u6d88\u3067\u304d\u307e\u305b\u3093\u3002
+
+This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=\u3053\u306e\u5916\u90e8\u30ea\u30f3\u30af\u306f\u300c%0\u300d\u578b\u3067\u3059\u304c\u3001\u3053\u308c\u306f\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u3069\u3046\u3057\u307e\u3059\u304b\uff1f
+
+This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306f\u3001\u624b\u52d5\u5272\u308a\u5f53\u3066\u306b\u3088\u308b\u9805\u76ee\u3 [...]
+
+This_group_contains_entries_in_which=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u9805\u76ee\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059
+
+This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u306f\u3001\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u3069\u308c\u304b\u306b\u6b63\u898f\u8868\u73fe<b>%0</b>\u3092\u542b\u3093\u3067\u3044\u308b\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\u3002
+
+This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u306f\u3001\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u3069\u308c\u304b\u306b\u7528\u8a9e<b>%0</b>\u3092\u542b\u3093\u3067\u3044\u308b\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\u3002
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u306f\u3001<b>%0</b>\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30ad\u30fc\u30ef\u30fc\u30c9<b>%1</b>\u3092\u542b\u3093\u3067\u3044\u308b\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\u3002
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u306f\u3001<b>%0</b>\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u6b63\u898f\u8868\u73fe<b>%1</b>\u3092\u542b\u3093\u3067\u3044\u308b\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\u3002
+
+This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=\u3053\u308c\u306f\u3001\u901a\u5e38\u306e\u30c6\u30ad\u30b9\u30c8\u304b\u3089\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8aad\u307f\u8fbc\u3080\u305f\u3081\u306e\u3001\u30b3\u30d4\u30fc\u30a2\u30f3\u30c9\u30da\u30fc\u30b9\u30c8\u7528\u30c0\u30a4\u30a2\u30ed\u30b0\u3067\u3059\u3002
+This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u3053\u308c\u3092\u6709\u52b9\u306b\u3059\u308b\u3068\u3001JabRef\u306f\u5404%0\u30ea\u30f3\u30af\u3092\u8abf\u3079\u3001\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u304b\u3069\u3046\u304b\u78ba\u8a8d\u3057\u307e\u3059\u3002<BR>\u3082\u3057\u5b58\u5728\u3057\u306a\u3051\u308c\u3070\u3001\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u9078\u629e\u80a2\u [...]
+
+This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=\u3053\u306e\u64cd\u4f5c\u3092\u884c\u3046\u306b\u306f\u3001\u9078\u629e\u3055\u308c\u305f\u5168\u9805\u76ee\u306bBibTeX\u30ad\u30fc\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
+This_operation_requires_at_least_one_entry.=\u3053\u306e\u64cd\u4f5c\u3092\u884c\u3046\u306b\u306f\u30011\u3064\u4ee5\u4e0a\u306e\u9805\u76ee\u304c\u5fc5\u8981\u3067\u3059\u3002
+
+This_operation_requires_one_or_more_entries_to_be_selected.=\u3053\u306e\u64cd\u4f5c\u3092\u884c\u3046\u306b\u306f\u30011\u3064\u4ee5\u4e0a\u306e\u9805\u76ee\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
+
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=\u3053\u306e\u64cd\u4f5c\u306f\u3001\u5916\u90e8\u30ea\u30f3\u30af\u3092\u3059\u3079\u3066\u3001\u300cpdf\u300d\u304a\u3088\u3073\u300cps\u300d\u30d5\u30a3\u30fc\u30eb\u30c9\u304b\u3089\u300c%0\u300d\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002\u7d9a\u3051\u307e\u3059\u304b\uff1f
+
+To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001<B>\u30aa\u30d7\u30b7\u30e7\u30f3\u2192\u5b66\u8853\u8a8c\u7565\u8a9e\u306e\u7ba1\u7406</B>\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Toggle_abbreviation=\u77ed\u7e2e\u5f62/\u975e\u77ed\u7e2e\u5f62\u306e\u5207\u66ff
+Toggle_entry_preview=\u9805\u76ee\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u5165\u5207
+Toggle_groups_interface=\u30b0\u30eb\u30fc\u30d7\u5236\u5fa1\u76e4\u3092\u5165\u5207
+Toggle_search_panel=\u691c\u7d22\u30d1\u30cd\u30eb\u3092\u5165\u5207
+
+Try_different_encoding=\u5225\u306e\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u8a66\u3059
+
+Type_set_to_'other'=\u578b\u3092\u300cother\u300d\u306b\u8a2d\u5b9a\u3057\u307e\u3057\u305f
+Unabbreviate_journal_names_of_the_selected_entries=\u9078\u629e\u3057\u305f\u9805\u76ee\u306e\u8a8c\u540d\u3092\u975e\u77ed\u7e2e\u5f62\u306b\u3059\u308b
+Unabbreviated_%0_journal_names.=%0\u500b\u306e\u8a8c\u540d\u3092\u975e\u77ed\u7e2e\u5f62\u306b\u3057\u307e\u3057\u305f
+
+unable_to_access_LyX-pipe=LyX\u30d1\u30a4\u30d7\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093
+
+Unable_to_create_graphical_interface=\u30b0\u30e9\u30d5\u30a3\u30ab\u30eb\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
+
+Unable_to_open_file.=\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=\u30ea\u30f3\u30af\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u578b\u300c%1\u300d\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u300c%0\u300d\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+Unable_to_read_default_icon_theme.=\u65e2\u5b9a\u30a2\u30a4\u30b3\u30f3\u30c6\u30fc\u30de\u3092\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+Unable_to_read_icon_theme_file=\u30a2\u30a4\u30b3\u30f3\u30c6\u30fc\u30de\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+
+unable_to_write_to=\u4ee5\u4e0b\u306b\u66f8\u304d\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:
+Undefined_file_type=\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u578b
+
+Undo=\u53d6\u308a\u6d88\u3057
+
+Union=\u8ad6\u7406\u548c
+
+Unknown_bibtex_entries=\u8a8d\u8b58\u3055\u308c\u306a\u304b\u3063\u305fBibTeX\u9805\u76ee
+
+unknown_edit=\u77e5\u3089\u306a\u3044\u7de8\u96c6
+
+unknown_entry_type=\u77e5\u3089\u306a\u3044\u9805\u76ee\u578b\u3067\u3059
+
+Unknown_export_format=\u77e5\u3089\u306a\u3044\u66f8\u304d\u51fa\u3057\u66f8\u5f0f\u3067\u3059
+
+Unmark_all=\u3059\u3079\u3066\u306e\u6a19\u8b58\u3092\u89e3\u9664
+
+Unmark_entries=\u9805\u76ee\u306e\u6a19\u8b58\u3092\u5916\u3059
+
+Unmark_entry=\u9805\u76ee\u306e\u6a19\u8b58\u3092\u5916\u3059
+
+Unmarked_selected=\u9078\u629e\u90e8\u306e\u6a19\u8b58\u3092\u5916\u3057\u307e\u3057\u305f:
+
+Unpack_EndNote_filter_set=EndNote\u30d5\u30a3\u30eb\u30bf\u30bb\u30c3\u30c8\u3092\u89e3\u51cd
+
+Unpacked_file.=\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u51cd\u3057\u307e\u3057\u305f\u3002
+
+Unsupported_version_of_class_%0\:_%1=\u30af\u30e9\u30b9%0\u306e\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u7248:_%1
+
+untitled=\u30bf\u30a4\u30c8\u30eb\u306a\u3057
+
+Up=\u4e0a
+
+Update_to_current_column_widths=\u73fe\u5728\u306e\u5217\u5e45\u306b\u66f4\u65b0
+
+Updated_group_selection=\u30b0\u30eb\u30fc\u30d7\u9078\u629e\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f
+Upgrade_external_links=\u5916\u90e8\u30ea\u30f3\u30af\u3092\u66f4\u65b0
+Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=\u5916\u90e8PDF/PS\u30ea\u30f3\u30af\u3092\u300c%0\u300d\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u66f4\u65b0
+Upgrade_file=\u30d5\u30a1\u30a4\u30eb\u3092\u66f4\u65b0
+Upgrade_old_external_file_links_to_use_the_new_feature=\u53e4\u3044\u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u65b0\u6a5f\u80fd\u3092\u5229\u7528\u3059\u308b\u3088\u3046\u306b\u66f4\u65b0
+Upgraded_links.=\u30ea\u30f3\u30af\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f\u3002
+UPPER=UPPER
+Upper_Each_First=Upper_Each_First
+Upper_first=Upper_first
+
+usage=\u4f7f\u7528\u6cd5
+
+Use_antialiasing_font=\u30a2\u30f3\u30c1\u30a8\u30a4\u30ea\u30a2\u30b9\u30d5\u30a9\u30f3\u30c8\u3092\u4f7f\u7528\u3059\u308b
+Use_autocompletion_for_the_following_fields=\u53f3\u8a18\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u81ea\u52d5\u88dc\u5b8c\u3092\u4f7f\u7528
+Use_custom_icon_theme=\u500b\u4eba\u8a2d\u5b9a\u306e\u30a2\u30a4\u30b3\u30f3\u30c6\u30fc\u30de\u3092\u4f7f\u7528
+Use_default_viewer=\u65e2\u5b9a\u30d3\u30e5\u30fc\u30a2\u3092\u4f7f\u7528
+
+Use_inspection_window_also_when_a_single_entry_is_imported.=\u9805\u76ee\u304c\u3072\u3068\u3064\u3060\u3051\u8aad\u307f\u8fbc\u307e\u308c\u305f\u3068\u304d\u306b\u3082\u7cbe\u67fb\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u4f7f\u7528\u3059\u308b
+Use_native_file_dialog=\u30cd\u30a4\u30c6\u30a3\u30d6\u306a\u30d5\u30a1\u30a4\u30eb\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u4f7f\u7528
+
+Use_other_look_and_feel=\u5225\u306e\u64cd\u4f5c\u6027\u3092\u4f7f\u7528\u3059\u308b
+Use_Regular_Expression_Search=\u6b63\u898f\u8868\u73fe\u691c\u7d22\u3092\u4f7f\u7528
+
+Use_regular_expressions=\u6b63\u898f\u8868\u73fe\u3092\u4f7f\u7528
+
+Use_the_following_delimiter_character(s)=\u53f3\u306e\u533a\u5207\u308a\u6587\u5b57\u3092\u4f7f\u7528
+Username_\:=\u30e6\u30fc\u30b6\u30fc\u540d:
+
+Value_cleared_externally=\u5916\u90e8\u304b\u3089\u5024\u304c\u6d88\u53bb\u3055\u308c\u307e\u3057\u305f
+
+Value_set_externally=\u5916\u90e8\u304b\u3089\u5024\u304c\u8a2d\u5b9a\u3055\u308c\u307e\u3057\u305f
+
+verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=LyX\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u3066\u3001lyxpipe\u304c\u6709\u52b9\u3068\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044
+
+View=\u8868\u793a
+Vim_Server_Name=Vim\u30b5\u30fc\u30d0\u30fc\u540d
+
+Waiting_for_ArXiv...=ArXiv\u306e\u5fdc\u7b54\u3092\u5f85\u3063\u3066\u3044\u307e\u3059...
+
+Warn_about_unresolved_duplicates_when_closing_inspection_window=\u7cbe\u67fb\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u308b\u969b\u306b\u89e3\u6d88\u3055\u308c\u3066\u3044\u306a\u3044\u91cd\u8907\u9805\u76ee\u306b\u5bfe\u3057\u3066\u8b66\u544a\u3059\u308b
+
+Warn_before_overwriting_existing_keys=\u65e2\u5b58\u306e\u30ad\u30fc\u3092\u4e0a\u66f8\u304d\u3059\u308b\u524d\u306b\u8b66\u544a
+
+Warning=\u8b66\u544a
+Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=\u8b66\u544a:_\u30d5\u30a1\u30a4\u30eb\u4fee\u5fa9\u3092\u5b8c\u9042\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u306f\u7834\u640d\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8
+
+Warning_there_is_a_duplicate_key=\u8b66\u544a:_\u91cd\u8907\u30ad\u30fc\u304c\u3042\u308a\u307e\u3059
+
+Warnings=\u8b66\u544a
+
+web_link=\u30a6\u30a7\u30d6\u30ea\u30f3\u30af
+
+What_do_you_want_to_do?=\u3069\u3046\u3057\u307e\u3059\u304b\uff1f
+
+When_adding/removing_keywords,_separate_them_by=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u8ffd\u52a0\u30fb\u524a\u9664\u3059\u308b\u969b\u3001\u305d\u308c\u3089\u3092\u4ee5\u4e0b\u306e\u6587\u5b57\u3067\u533a\u5207\u308b
+Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=\u9078\u629e\u3057\u305f\u9805\u76ee\u304b\u3089\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u308bPDF\u306bXMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u307f\u307e\u3059\u3002
+
+with=with
+
+Word=Word
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=PDF\u306bBibtexEntry\u3092XMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3068\u3057\u3066\u66f8\u304d\u8fbc\u3080\u3002
+
+Write_XMP=XMP\u3092\u66f8\u304d\u8fbc\u3080
+Write_XMP-metadata=XMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u3080
+Write_XMP-metadata_for_all_PDFs_in_current_database?=\u73fe\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u5168PDF\u306bXMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u307f\u307e\u3059\u304b\uff1f
+Writing_XMP=XMP\u3092\u66f8\u304d\u8fbc\u3093\u3067\u3044\u307e\u3059
+Writing_XMP_metadata...=XMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u3093\u3067\u3044\u307e\u3059...
+Writing_XMP_metadata_for_selected_entries...=\u9078\u629e\u3057\u305f\u9805\u76ee\u306bXMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u3093\u3067\u3044\u307e\u3059...
+Writing_XMP_to_'%0'...=\u300c%0\u300d\u306bXMP\u3092\u66f8\u304d\u8fbc\u3093\u3067\u3044\u307e\u3059...
+
+Wrong_file_format=\u8aa4\u3063\u305f\u30d5\u30a1\u30a4\u30eb\u66f8\u5f0f\u3067\u3059
+
+Wrote_XMP-metadata=XMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f8\u304d\u8fbc\u307f\u307e\u3057\u305f
+Wrote_XMP_to_'%0'.=XMP\u3092\u300c%0\u300d\u306b\u66f8\u304d\u8fbc\u307f\u307e\u3057\u305f\u3002
+
+XMP-annotated_PDF=XMP\u6ce8\u91c8\u4ed8\u304dPDF
+XMP_Export_Privacy_Settings=XMP\u66f8\u304d\u51fa\u3057\u306e\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u8a2d\u5b9a
+XMP_metadata=XMP\u30e1\u30bf\u30c7\u30fc\u30bf
+XMP_metadata_found_in_PDF\:_%0=PDF\u4e2d\u306bXMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u691c\u51fa\u3057\u307e\u3057\u305f:_%0
+You_must_restart_JabRef_for_this_to_come_into_effect.=\u3053\u308c\u3092\u6709\u52b9\u306b\u3059\u308b\u305f\u3081\u306b\u306fJabRef\u3092\u518d\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
+You_have_changed_the_language_setting.=\u8a00\u8a9e\u8a2d\u5b9a\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u3002
+You_have_changed_the_look_and_feel_setting.=\u64cd\u4f5c\u6027\u306e\u8a2d\u5b9a\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u3002
+
+You_have_cleared_this_field._Original_value=\u3053\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u6d88\u53bb\u3057\u307e\u3057\u305f\u3002\u5143\u306e\u5024
+
+You_have_entered_an_invalid_search_'%0'.=\u7121\u52b9\u306a\u691c\u7d22\u300c%0\u300d\u3092\u5165\u529b\u3057\u307e\u3057\u305f\u3002
+
+You_must_choose_a_file_name_to_store_journal_abbreviations=\u8a8c\u540d\u77ed\u7e2e\u5f62\u3092\u4fdd\u7ba1\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u9078\u3070\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093
+
+You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=\u65b0\u3057\u3044\u30ad\u30fc\u5272\u308a\u5f53\u3066\u304c\u6b63\u3057\u304f\u6a5f\u80fd\u3059\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u306b\u306f\u3001JabRef\u3092\u518d\u8d77\u52d5\u3057\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
+
+You_must_set_both_BibTeX_key_and_%0_directory=BibTeX\u30ad\u30fc\u3068%0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e21\u65b9\u3092\u8a2d\u5b9a\u3057\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093
+
+Your_new_key_bindings_have_been_stored.=\u65b0\u3057\u3044\u30ad\u30fc\u5272\u308a\u5f53\u3066\u304c\u4fdd\u7ba1\u3055\u308c\u307e\u3057\u305f\u3002
+
+
+The_following_fetchers_are_available\:=\u4ee5\u4e0b\u306e\u53d6\u5f97\u5b50\u304c\u4f7f\u7528\u3067\u304d\u307e\u3059:
+Could_not_find_fetcher_'%0'=\u53d6\u5f97\u5b50\u300c%0\u300d\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f
+Running_Query_'%0'_with_fetcher_'%1'.=\u53d6\u5f97\u5b50\u300c%1\u300d\u3092\u4f7f\u7528\u3057\u3066\u3001\u30af\u30a8\u30ea\u300c%0\u300d\u3092\u5b9f\u884c\u3057\u3066\u3044\u307e\u3059\u3002
+Please_wait!=\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\uff01
+Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=\u53d6\u5f97\u5b50\u300c%1\u300d\u3092\u4f7f\u7528\u3057\u305f\u30af\u30a8\u30ea\u300c%0\u300d\u306f\u3001\u7d50\u679c\u3092\u4f55\u3082\u8fd4\u3057\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+Open_SPIRES_entry=SPIRES\u9805\u76ee\u3092\u958b\u304f
+Move/Rename_file=\u30d5\u30a1\u30a4\u30eb\u306e\u79fb\u52d5\u30fb\u6539\u540d
+File_moved=\u30d5\u30a1\u30a4\u30eb\u3092\u79fb\u52d5\u3057\u307e\u3057\u305f
+Move_file_failed=\u30d5\u30a1\u30a4\u30eb\u306e\u79fb\u52d5\u306b\u5931\u6557
+Could_not_move_file=\u30d5\u30a1\u30a4\u30eb\u3092\u79fb\u52d5\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+Could_not_find_file_'%0'.=\u30d5\u30a1\u30a4\u30eb\u300c%0\u300d\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+Move/rename_file=\u30d5\u30a1\u30a4\u30eb\u306e\u79fb\u52d5\u30fb\u6539\u540d
+Number_of_entries_successfully_imported=\u8aad\u307f\u8fbc\u307f\u306b\u6210\u529f\u3057\u305f\u9805\u76ee\u6570
+Import_canceled_by_user=\u8aad\u307f\u8fbc\u307f\u306f\u30e6\u30fc\u30b6\u30fc\u306b\u3088\u3063\u3066\u53d6\u308a\u6d88\u3055\u308c\u307e\u3057\u305f
+Progress\:_%0_of_%1=\u9032\u6357\u72b6\u6cc1:_%1\u306e\u3046\u3061%0
+Error_while_fetching_from_JSTOR=JSTOR\u304b\u3089\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f
+
+Fetching_Medline_by_id...=Medline\u304b\u3089ID\u9806\u3067\u53d6\u5f97\u4e2d...
+
+Fetching_Medline_by_term...=Medline\u304b\u3089term\u9806\u3067\u53d6\u5f97\u4e2d...
+Medline_import_canceled=Medline\u304b\u3089\u306e\u8aad\u307f\u8fbc\u307f\u3092\u53d6\u308a\u6d88\u3057\u307e\u3057\u305f
+Please_enter_a_valid_number=\u6709\u52b9\u306a\u6570\u5024\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
+Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=\u30b3\u30f3\u30de\u533a\u5207\u308a\u3067Medline_ID_(\u756a\u53f7)\u306a\u3044\u3057\u306f\u691c\u7d22\u9805\u76ee\u306e\u4e00\u89a7\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=SPIRES\u30bd\u30fc\u30b9\u304b\u3089\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f_(%0):
+Error_while_fetching_from_Spires\:_=Spires\u304b\u3089\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f\:_
+Connect_to_external_SQL_database=\u5916\u90e8SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a
+Export_to_external_SQL_database=\u5916\u90e8SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u66f8\u304d\u51fa\u3059
+
+Show_results_in_dialog=\u7d50\u679c\u3092\u30c0\u30a4\u30a2\u30ed\u30b0\u306b\u8868\u793a
+Global_search=\u5927\u57df\u691c\u7d22
+Show_search_results_in_a_window=\u691c\u7d22\u7d50\u679c\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8868\u793a
+Search_results=\u7d50\u679c\u3092\u691c\u7d22
+Move_file_to_file_directory?=\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u307e\u3059\u304b\uff1f
+Rename_to_'%0'=\u300c%0\u300d\u306b\u6539\u540d
+Move_to_file_directory=\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5
+You_have_changed_the_menu_and_label_font_size.=\u30e1\u30cb\u30e5\u30fc\u30c8\u30e9\u30d9\u30eb\u306e\u30d5\u30a9\u30f3\u30c8\u5bf8\u6cd5\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u3002
+
+Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u4fdd\u8b77\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5916\u90e8\u304b\u3089\u306e\u5909\u66f4\u3092\u691c\u67fb\u3057\u306a\u3044\u9650\u308a\u3001\u4fdd\u5b58\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
+Protected_database=\u4fdd\u8b77\u3055\u308c\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
+Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=\u5916\u90e8\u304b\u3089\u306e\u5909\u66f4\u3092\u5be9\u67fb\u3059\u308b\u307e\u3067\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58\u3059\u308b\u3053\u3068\u3092\u62d2\u7d76\u3059\u308b
+Database_protection=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u4fdd\u8b77
+Unable_to_save_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+
+BibTeX_key_generator=BibTeX\u30ad\u30fc\u306e\u751f\u6210
+Unable_to_open_link.=\u30ea\u30f3\u30af\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+Search_JSTOR=JSTOR\u3092\u691c\u7d22
+Attempting_SQL_import...=SQL\u304b\u3089\u306e\u8aad\u307f\u8fbc\u307f\u3092\u8a66\u307f\u3066\u3044\u307e\u3059...
+BibO_RDF=BibO_RDF
+HTML_parser=HTML\u304b\u3089\u89e3\u6790
+
+Move_the_keyboard_focus_to_the_entry_table=\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u30d5\u30a9\u30fc\u30ab\u30b9\u3092\u9805\u76ee\u8868\u306b\u79fb\u52d5
+MIME_type=MIME\u578b
+
+This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=\u3053\u306e\u6a5f\u80fd\u306f\u3001\u65b0\u898f\u30d5\u30a1\u30a4\u30eb\u3092\u3001\u65b0\u3057\u3044JabRef\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u958b\u304b\u306a\u3044\u3067\u3 [...]
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u306f\u3001\u5ec3\u6b62\u3055\u308c\u305f<b>pdf</b>\u30fb<b>ps</b>\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u307f\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<br>\u307b\u3068\u3093\u3069\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u3068\u3063\u3066\u306f\u3001\u4e0a\u306e<b>\u57fa\u672c\u30d5\u30a [...]
+Legacy_file_fields=\u5ec3\u6b62\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u30d5\u30a3\u30fc\u30eb\u30c9
+
+This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u3053\u308c\u3092\u6709\u52b9\u306b\u3059\u308b\u3068\u3001JabRef\u306f\u5404%0\u62e1\u5f35\u5b50\u3092\u8abf\u3079\u3001\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u304b\u3069\u3046\u304b\u78ba\u8a8d\u3057\u307e\u3059\u3002<BR>\u3082\u3057\u5b58\u5728\u3057\u306a\u3051\u308c\u3070\u3001\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u9078\u629e\u8 [...]
+Run_Fetcher,_e.g._"--fetch=Medline\:cancer"=
+
+The_ACM_Digital_Library=ACM\u30c7\u30b8\u30bf\u30eb\u30e9\u30a4\u30d6\u30e9\u30ea
+Reset=\u30ea\u30bb\u30c3\u30c8
+
+Use_IEEE_LaTeX_abbreviations=IEEE\u306eLaTeX\u7565\u8a9e\u3092\u4f7f\u7528
+The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
+Search_ACM_Portal=ACM_Portal\u3092\u691c\u7d22
+Connection_to_ACM_Portal_failed=ACM_Portal\u3078\u306e\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f
+
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u958b\u304f\u969b\u3001\u30ea\u30f3\u30af\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u3001\u4e00\u81f4\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3059\u308b
+Settings_for_%0=\u300c%0\u300d\u306e\u8a2d\u5b9a
+Insert_selected_citations_into_Vim=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092Vim\u306b\u633f\u5165
+RIS=RIS
+
+Assign_exclusively_to_group=\u6392\u4ed6\u7684\u306b\u30b0\u30eb\u30fc\u30d7\u306b\u5272\u308a\u5f53\u3066
+
+Bad_Request_'%0'.=\u4e0d\u6b63\u30ea\u30af\u30a8\u30b9\u30c8\u300c%0\u300d
+
+Mark_entries_imported_into_an_existing_database=\u65e2\u5b58\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8aad\u307f\u8fbc\u3093\u3060\u9805\u76ee\u3092\u6a19\u8b58\u3059\u308b
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=\u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u65b0\u898f\u9805\u76ee\u3092\u8aad\u307f\u8fbc\u3080\u524d\u306b\u5168\u9805\u76ee\u306e\u30de\u30fc\u30af\u3092\u89e3\u9664\u3059\u308b
+
+Forward=\u9032\u3080
+Back=\u623b\u308b
+Sort_the_following_fields_as_numeric_fields=\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u6570\u5024\u30d5\u30a3\u30fc\u30eb\u30c9\u3068\u3057\u3066\u6574\u5e8f
+Line_%0\:_Found_corrupted_BibTeX-key.=%0\u884c\u3081\:_\u7834\u640d\u3057\u305fBibTeX\u30ad\u30fc\u3092\u767a\u898b\u3057\u307e\u3057\u305f\u3002
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=%0\u884c\u3081\:_\u7834\u640d\u3057\u305fBibTeX\u30ad\u30fc\u3092\u767a\u898b\u3057\u307e\u3057\u305f\uff08\u7a7a\u767d\u304c\u5165\u3063\u3066\u3044\u308b\uff09\u3002
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=%0\u884c\u3081\:_\u7834\u640d\u3057\u305fBibTeX\u30ad\u30fc\u3092\u767a\u898b\u3057\u307e\u3057\u305f\uff08\u30b3\u30f3\u30de\u304c\u6b20\u843d\uff09\u3002
+Finished_downloading_full_text_document=\u6587\u66f8\u672c\u4f53\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u304c\u7d42\u4e86\u3057\u307e\u3057\u305f
+Unable_to_find_full_text_document_in_the_linked_web_page.=\u30ea\u30f3\u30af\u5148\u306e\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u306b\u8ad6\u6587\u672c\u4f53\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+Connection_error_when_trying_to_find_full_text_document.=\u5b8c\u5168\u306a\u30c6\u30ad\u30b9\u30c8\u6587\u66f8\u3092\u691c\u7d22\u4e2d\u306b\u63a5\u7d9a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
+This_entry_provides_no_URL_or_DOI_links.=\u3053\u306e\u9805\u76ee\u306b\u306f\u3001URL\u3084DOI\u30ea\u30f3\u30af\u304c\u3042\u308a\u307e\u305b\u3093\u3002
+Full_text_article_download_failed=\u8ad6\u6587\u672c\u4f53\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f
+Update_to_current_column_order=\u73fe\u5728\u306e\u5217\u9806\u306b\u66f4\u65b0
+
+Rename_field=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u6539\u540d\u3057\u307e\u3057\u305f
+Set/clear/rename_fields=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a/\u6d88\u53bb/\u540d\u79f0\u5909\u66f4
+Rename_field_to\:=\u30d5\u30a3\u30fc\u30eb\u30c9\u540d\u3092\u4ee5\u4e0b\u306b\u5909\u66f4\:
+Move_contents_of_a_field_into_a_field_with_a_different_name=\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u5185\u5bb9\u3092\u5225\u540d\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u79fb\u52d5\u3059\u308b
+You_can_only_rename_one_field_at_a_time=\u4e00\u5ea6\u306b\u6539\u540d\u3067\u304d\u308b\u306e\u306f\u3072\u3068\u3064\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3060\u3051\u3067\u3059
+
+Remove_all_broken_links=\u7834\u640d\u3057\u305f\u30ea\u30f3\u30af\u3092\u3059\u3079\u3066\u524a\u9664
+
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=\u30ea\u30e2\u30fc\u30c8\u64cd\u4f5c\u7528\u306b%0\u30dd\u30fc\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002\u5225\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u4f7f\u7528\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u5225\u306e\u30dd\u30fc\u30c8\u3092\u6307\u5b9a\u3057\u3066\u307f\u3066\u304 [...]
+
+Plugin_installer=\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u5c0e\u5165
+Unable_to_create_plugin_directory=\u30d7\u30e9\u30b0\u30a4\u30f3\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
+Unable_to_copy_file=\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u6b63\u3057\u304f\u5c0e\u5165\u3055\u308c\u307e\u3057\u305f\u3002\u65b0\u3057\u3044\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u8aad\u307f\u8fbc\u3080\u306b\u306f\u3001JabRef\u3092\u518d\u8d77\u52d5\u3057\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
+Unable_to_create_user_plugin_directory=\u30e6\u30fc\u30b6\u30fc\u30d7\u30e9\u30b0\u30a4\u30f3\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
+Plugin_installation_failed.=\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u5c0e\u5165\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
+The_same_version_of_this_plugin_is_already_installed.=\u3053\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u540c\u3058\u7248\u304c\u65e2\u306b\u5c0e\u5165\u3055\u308c\u3066\u3044\u307e\u3059\u3002
+A_newer_version_of_this_plugin_is_already_installed.=\u3053\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u65b0\u3057\u3044\u7248\u304c\u65e2\u306b\u5c0e\u5165\u3055\u308c\u3066\u3044\u307e\u3059\u3002
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=\u3053\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u3001\u4e00\u3064\u306a\u3044\u3057\u305d\u308c\u4ee5\u4e0a\u306e\u65e7\u7248\u304c\u5c0e\u5165\u6e08\u307f\u3067\u3059\u3002\u65e7\u7248\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
+Old_versions_deleted_successfully.=\u65e7\u7248\u304c\u6210\u529f\u88cf\u306b\u524a\u9664\u3055\u308c\u307e\u3057\u305f\u3002
+
+
+Install_plugin=\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u5c0e\u5165
+Download_plugin=\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
+Plugin_manager=\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u7ba1\u7406
+Delete_the_%0_selected_plugins?=%0\u500b\u306e\u9078\u629e\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
+Delete_plugins=\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u524a\u9664
+Delete_the_selected_plugin?=\u9078\u629e\u3057\u305f\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
+Delete_plugin=\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u524a\u9664
+Enter_download_URL=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9URL\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
+Plugin_name=\u30d7\u30e9\u30b0\u30a4\u30f3\u540d
+Version=\u30d0\u30fc\u30b8\u30e7\u30f3
+Unknown=\u77e5\u308a\u307e\u305b\u3093
+Not_loaded=\u8aad\u307f\u8fbc\u307e\u308c\u307e\u305b\u3093\u3067\u3057\u305f
+Loaded=\u8aad\u307f\u8fbc\u307f\u307e\u3057\u305f
+Could_not_determine_version_of_=\u4ee5\u4e0b\u306e\u7248\u3092\u7279\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:_
+Install_anyway?=\u69cb\u308f\u305a\u5c0e\u5165\u3057\u307e\u3059\u304b\uff1f
+
+Looking_for_full_text_document...=\u6587\u66f8\u672c\u4f53\u3092\u63a2\u3057\u3066\u3044\u307e\u3059...
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=DOI\u307e\u305f\u306fURL\u30ea\u30f3\u30af\u3092\u305f\u3069\u3063\u3066PDF\u6587\u66f8\u672c\u4f53\u306e\u5834\u6240\u306e\u7279\u5b9a\u3092\u8a66\u307f\u307e\u3059
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=\u8ad6\u6587\u672c\u4f53\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u300c%0\u300d\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u7528\u306e\u691c\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=PDF\u30ea\u30f3\u30af\u3092\u691c\u51fa\u3057\u307e\u3057\u305f\u304c\u3001\u4e0d\u6b63\u306aMIME\u578b\u3092\u53d7\u4fe1\u3057\u307e\u3057\u305f\u3002\u8ad6\u6587\u672c\u4f53\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u304c\u306a\u3044\u305f\u3081\u3067\u3042\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002
+
+Autosave=\u81ea\u52d5\u4fdd\u5b58
+Prompt_before_recovering_a_database_from_an_autosave_file=\u81ea\u52d5\u4fdd\u5b58\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u56de\u5fa9\u3059\u308b\u524d\u306b\u78ba\u8a8d\u3092\u4fc3\u3059
+Autosave_interval_(minutes)=\u81ea\u52d5\u4fdd\u5b58\u306e\u9593\u9694\uff08\u5206\uff09
+Do_you_want_to_recover_the_database_from_the_autosave_file?=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u81ea\u52d5\u4fdd\u5b58\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u56de\u5fa9\u3057\u307e\u3059\u304b\uff1f
+Recover_from_autosave=\u81ea\u52d5\u4fdd\u5b58\u304b\u3089\u5fa9\u5e30
+%0_warnings=%0\u500b\u306e\u8b66\u544a\u3042\u308a
+
+Save_in_current_table_sort_order=\u73fe\u5728\u306e\u8868\u3067\u306e\u6574\u5e8f\u9806\u3067\u4fdd\u5b58
+Export_in_current_table_sort_order=\u73fe\u5728\u306e\u8868\u3067\u306e\u6574\u5e8f\u9806\u3067\u66f8\u304d\u51fa\u3057
+Export_ordered_by_author/editor/year=author/editor/year\u3067\u6574\u5e8f\u3057\u3066\u66f8\u304d\u51fa\u3057
+Export_entries_in_their_original_order=\u9805\u76ee\u3092\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u9806\u5e8f\u3067\u66f8\u304d\u51fa\u3057
+Error_opening_file_'%0'.=\u30d5\u30a1\u30a4\u30eb\u300c%0\u300d\u3092\u958b\u304f\u969b\u306b\u30a8\u30e9\u30fc\u767a\u751f
+Autosave_of_file_'%0'=\u300c%0\u300d\u30d5\u30a1\u30a4\u30eb\u306e\u81ea\u52d5\u4fdd\u5b58
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=\u300c%0\u300d\u306e\u81ea\u52d5\u4fdd\u5b58\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u4ee3\u308f\u308a\u306b\u300c%0\u300d\u3092\u8aad\u307f\u8fbc\u3093\u3067\u307f\u3066\u304f\u3060\u3055\u3044\u3002
+
+
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=\u30e6\u30fc\u30b6\u30fc\u7528\u30d7\u30e9\u30b0\u30a4\u30f3\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u5c0e\u5165\u3057\u305f\u30d7\u30e9\u30b0\u30a4\u30f3_(%0):
+Plugins_installed_in_other_locations\:=\u4ed6\u306e\u5834\u6240\u306b\u5c0e\u5165\u3057\u305f\u30d7\u30e9\u30b0\u30a4\u30f3:
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u6b21\u56deJabRef\u3092\u8d77\u52d5\u3057\u305f\u969b\u306b\u524a\u9664\u3055\u308c\u307e\u3059\u3002
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u6b21\u56deJabRef\u3092\u8d77\u52d5\u3057\u305f\u969b\u306b\u524a\u9664\u3055\u308c\u307e\u3059\u3002
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=\u65e7\u7248\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u3001\u6b21\u56deJabRef\u3092\u8d77\u52d5\u3057\u305f\u3068\u304d\u306b\u524a\u9664\u3055\u308c\u307e\u3059\u3002
+Formatter_not_found\:_%0=\u6574\u5f62\u5b50\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\:_%0
+The_following_formatters_could_not_be_found=\u4ee5\u4e0b\u306e\u6574\u5f62\u5b50\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
+
+Clear_inputarea=\u5165\u529b\u9818\u57df\u3092\u4e00\u6383
+
+Automatically_set_file_links_for_this_entry=\u3053\u306e\u9805\u76ee\u306b\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u81ea\u52d5\u7684\u306b\u8a2d\u5b9a
+Could_not_save,_file_locked_by_another_JabRef_instance.=\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u304c\u4ed6\u306eJabRef\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u3088\u3063\u3066\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u3059\u3002
+File_is_locked_by_another_JabRef_instance.=\u30d5\u30a1\u30a4\u30eb\u304c\u3082\u3046\u3072\u3068\u3064\u306eJabRef\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u3088\u3063\u3066\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u3059\u3002
+Do_you_want_to_override_the_file_lock?=\u30d5\u30a1\u30a4\u30eb\u30ed\u30c3\u30af\u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b\uff1f
+File_locked=\u30d5\u30a1\u30a4\u30eb\u304c\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u3059
+Current_tmp_value=\u73fe\u5728\u306etmp\u5024
+Metadata_change=\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u5909\u66f4
+Changes_have_been_made_to_the_following_metadata_elements=\u4ee5\u4e0b\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u8981\u7d20\u306b\u5909\u66f4\u3092\u52a0\u3048\u307e\u3057\u305f
+
+Generate_groups_for_author_last_names=\u8457\u8005\u306e\u59d3\u3067\u30b0\u30eb\u30fc\u30d7\u3092\u751f\u6210\u3059\u308b
+Generate_groups_for_editor_last_names=\u7de8\u96c6\u8005\u306e\u59d3\u3067\u30b0\u30eb\u30fc\u30d7\u3092\u751f\u6210\u3059\u308b
+Generate_groups_from_keywords_in_a_BibTeX_field=BibTeX\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u304b\u3089\u30b0\u30eb\u30fc\u30d7\u3092\u751f\u6210\u3059\u308b
+Enforce_legal_characters_in_BibTeX_keys=BibTeX\u30ad\u30fc\u3067\u898f\u5247\u306b\u5247\u3063\u305f\u6587\u5b57\u306e\u4f7f\u7528\u3092\u5f37\u5236\u3059\u308b
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=#\u6587\u5b57\u306f\u3001\u300c\\#\u300d\u306e\u3088\u3046\u306b\u30a8\u30b9\u30b1\u30fc\u30d7\u3057\u306a\u3044\u9650\u308a\u306f\u3001BibTeX\u30d5\u30a3\u30fc\u30eb\u30c9\u4e2d\u3067\u306f\u4f7f\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
+Before_saving,_please_edit_any_strings_containing_the_#_character.=\u4fdd\u5b58\u524d\u306b\u3001#\u6587\u5b57\u3092\u542b\u3080\u6587\u5b57\u5217\u3092\u5168\u3066\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+
+Save_without_backup?=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u53d6\u3089\u305a\u306b\u4fdd\u5b58\u3057\u307e\u3059\u304b\uff1f
+Unable_to_create_backup=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
+
+File_directory_is_not_set_or_does_not_exist.=\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u304b\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
+Move_file_to_file_directory.=\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
+Rename_file_to=\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u4ee5\u4e0b\u306b\u6539\u540d:
+<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>\u5168\u9805\u76ee</b>\uff08\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306f\u7de8\u96c6\u3057\u305f\u308a\u524a\u9664\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\uff09
+static_group=\u9759\u7684\u30b0\u30eb\u30fc\u30d7
+includes_subgroups=\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u542b\u3080
+refines_supergroup=\u4e0a\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u7d5e\u308a\u8fbc\u3080
+dynamic_group=\u52d5\u7684\u30b0\u30eb\u30fc\u30d7
+contains=contains
+search_expression=\u691c\u7d22\u8868\u73fe:
+
+Disable_file_renaming_in_non-native_file_dialog=\u30cd\u30a4\u30c6\u30a3\u30d6\u3067\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u30c0\u30a4\u30a2\u30ed\u30b0\u3067\u30d5\u30a1\u30a4\u30eb\u306e\u540d\u79f0\u5909\u66f4\u3092\u3067\u304d\u306a\u304f\u3059\u308b
+File_dialog=\u30d5\u30a1\u30a4\u30eb\u30c0\u30a4\u30a2\u30ed\u30b0
+No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=\u9805\u76ee\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002JStor\u3092\u691c\u7d22\u3059\u308b\u305f\u3081\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u304c\u306a\u3044\u3088\u3046\u3067\u3059\u3002
+
+Search_ScienceDirect=ScienceDirect\u3092\u691c\u7d22
+Error_while_fetching_from_ScienceDirect=ScienceDirect\u304b\u3089\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f
+
+Error_initializing_custom_export_format_from_string_'%0'=\u6587\u5b57\u5217\u300c%0\u300d\u304b\u3089\u500b\u4eba\u8a2d\u5b9a\u306e\u66f8\u304d\u51fa\u3057\u66f8\u5f0f\u3092\u521d\u671f\u5316\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f
+
+
+BibLaTeX_mode=BibLaTeX\u30e2\u30fc\u30c9
+Optional_fields_2=\u975e\u5fc5\u9808\u30d5\u30a3\u30fc\u30eb\u30c92
+Please_wait=\u304a\u5f85\u3061\u304f\u3060\u3055\u3044
+Waiting_for_save_operation_to_finish=\u4fdd\u5b58\u64cd\u4f5c\u304c\u7d42\u4e86\u3059\u308b\u306e\u3092\u5f85\u3063\u3066\u3044\u307e\u3059
+Resolving_duplicate_BibTeX_keys...=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u3092\u89e3\u6c7a...
+Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u3092\u89e3\u6d88\u3057\u7d42\u308f\u308a\u307e\u3057\u305f\u3002%0\u9805\u76ee\u3092\u4fee\u6b63\u3057\u307e\u3057\u305f\u3002
+This_database_contains_one_or_more_duplicated_BibTeX_keys.=\u3053\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u306f\u30011\u3064\u306a\u3044\u3057\u8907\u6570\u306e\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u304c\u3042\u308a\u307e\u3059\u3002
+Do_you_want_to_resolve_duplicate_keys_now?=\u91cd\u8907\u3057\u305f\u30ad\u30fc\u3092\u76f4\u3061\u306b\u89e3\u6d88\u3057\u307e\u3059\u304b\uff1f
+Find_and_remove_duplicate_BibTeX_keys=\u91cd\u8907BibTeX\u30ad\u30fc\u3092\u691c\u51fa\u3057\u3066\u524a\u9664
+Expected_syntax_for_--fetch='<name_of_fetcher>\:<query>'=
+Duplicate_BibTeX_key=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc
+Duplicate_key=\u91cd\u8907\u30ad\u30fc
+Generate_key=\u30ad\u30fc\u3092\u751f\u6210
+Import_marking_color=\u8aad\u307f\u8fbc\u307f\u6a19\u8b58\u306e\u8272
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0\u9805\u76ee\u3092\u691c\u51fa\u3057\u307e\u3057\u305f\u3002\u30b5\u30fc\u30d0\u30fc\u8ca0\u8377\u3092\u639b\u3051\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u306b\u3001%1\u306e\u307f\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002ACM\u306b\u8ff7\u60d1\u3092\u304b\u3051\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u306e\u3067\u3001\u304b\u306a\u308a [...]
+BibTeX_importer=BibTeX\u304b\u3089\u8aad\u307f\u8fbc\u307f
+Always_add_letter_(a,_b,_...)_to_generated_keys=\u30ad\u30fc\u751f\u6210\u6642\u306b\u5e38\u306b(a,_,b,_\u2026)\u306a\u3069\u306e\u6587\u5b57\u3092\u4ed8\u52a0
+Ensure_unique_keys_using_letters_(a,_b,_...)=(a,_,b,_\u2026)\u306a\u3069\u306e\u6587\u5b57\u3092\u4f7f\u7528\u3057\u3066\u30ad\u30fc\u304c\u552f\u4e00\u3067\u3042\u308b\u3053\u3068\u3092\u4fdd\u8a3c
+Ensure_unique_keys_using_letters_(b,_c,_...)=(b,_,c,_\u2026)\u306a\u3069\u306e\u6587\u5b57\u3092\u4f7f\u7528\u3057\u3066\u30ad\u30fc\u304c\u552f\u4e00\u3067\u3042\u308b\u3053\u3068\u3092\u4fdd\u8a3c
+Entry_editor_active_background_color=\u9805\u76ee\u30a8\u30c7\u30a3\u30bf\u306e\u30a2\u30af\u30c6\u30a3\u30d6\u80cc\u666f\u8272
+Entry_editor_background_color=\u9805\u76ee\u30a8\u30c7\u30a3\u30bf\u306e\u80cc\u666f\u8272
+Entry_editor_font_color=\u9805\u76ee\u30a8\u30c7\u30a3\u30bf\u306e\u30d5\u30a9\u30f3\u30c8\u8272
+Entry_editor_invalid_field_color=\u9805\u76ee\u30a8\u30c7\u30a3\u30bf\u306e\u7121\u52b9\u30d5\u30a3\u30fc\u30eb\u30c9\u8272
+Table_and_entry_editor_colors=\u8868\u304a\u3088\u3073\u9805\u76ee\u30a8\u30c7\u30a3\u30bf\u8272
+An_autosave_file_was_found_for_this_database._This_could_indicate_=\u3053\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u81ea\u52d5\u4fdd\u5b58\u30d5\u30a1\u30a4\u30eb\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u308c\u306f\u3001\u6700\u5f8c\u306b\u3053\u306e
+that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=\u30d5\u30a1\u30a4\u30eb\u304c\u4f7f\u7528\u3055\u308c\u305f\u969b\u306bJabRef\u304c\u6b63\u5e38\u306b\u7d42\u4e86\u3057\u306a\u304b\u3063\u305f\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002
+General_file_directory=\u4e00\u822c\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
+User-specific_file_directory=\u30e6\u30fc\u30b6\u30fc\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
+Error_setting_look_and_feel=\u64cd\u4f5c\u6027\u8a2d\u5b9a\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f
+Search_failed\:_illegal_search_expression=\u691c\u7d22\u306b\u5931\u6557:_\u8aa4\u3063\u305f\u691c\u7d22\u8868\u73fe\u3067\u3059
+Show_ArXiv_column=ArXiv\u5217\u3092\u8868\u793a
+
+<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>JabRef\u3068\u306e\u6700\u9069\u306a\u9023\u643a\u306e\u305f\u3081\u306b\u3001Endnote\u7528\u306e\u8aad\u307f\u8fbc\u307f\u30fb\u66f8\u304d\u51fa\u3057\u30d5\u30a3\u30eb\u30bf\u304c<BR>\u5165\u3063\u3066\u3044\u308bzip\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u51cd\u3057\u307e\u3059\u3002</HTML>
+
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=\u73fe\u5728\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u30b0\u30eb\u30fc\u30d7\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u9805\u76ee\u3092\u6301\u3064\u30b0\u30eb\u30fc\u30d7\u3092\u7740\u8272
+
+You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=\u30c6\u30ad\u30b9\u30c8\u30d5\u30a3\u30fc\u30eb\u30c9\u306b1025\u301c65535\u306e\u9593\u306e\u6574\u6570\u5024\u3092\u5165\u529b\u3057\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\uff1a
+
+
+Automatically_open_browse_dialog_when_creating_new_file_link=\u65b0\u3057\u304f\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af\u3092\u4f5c\u6210\u3059\u308b\u969b\u3001\u81ea\u52d5\u7684\u306b\u30d6\u30e9\u30a6\u30ba\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u958b\u304f
+Import_Metadata_from\:=\u53f3\u8a18\u304b\u3089\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u307f:
+Choose_the_source_for_the_metadata_import=\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3080\u30bd\u30fc\u30b9\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044
+Create_entry_based_on_XMP_data=XMP\u30c7\u30fc\u30bf\u306b\u57fa\u3065\u3044\u3066\u9805\u76ee\u3092\u751f\u6210
+Create_entry_based_on_data_fetched_from=\u53f3\u8a18\u304b\u3089\u53d6\u308a\u8fbc\u3093\u3060\u30c7\u30fc\u30bf\u306b\u57fa\u3065\u3044\u3066\u9805\u76ee\u3092\u751f\u6210
+Create_blank_entry_linking_the_PDF=PDF\u306b\u30ea\u30f3\u30af\u3057\u305f\u7a7a\u306e\u9805\u76ee\u3092\u751f\u6210
+Only_attach_PDF=PDF\u3092\u6dfb\u4ed8\u3057\u3066\u304f\u3060\u3055\u3044
+Mr._dLib_Metadata_Entries_Associated_With\:=\u53f3\u8a18\u306b\u95a2\u9023\u3065\u3051\u3089\u308c\u305fMr._dLib\u30e1\u30bf\u30c7\u30fc\u30bf\u9805\u76ee
+Mr._dLib_Metadata_Entries_Associated_With_PDF_File=PDF\u30d5\u30a1\u30a4\u30eb\u306b\u95a2\u9023\u3065\u3051\u3089\u308c\u305fMr._dLib\u30e1\u30bf\u30c7\u30fc\u30bf\u9805\u76ee
+Title=\u30bf\u30a4\u30c8\u30eb
+Author(s)=\u8457\u8005
+Published_Year=\u767a\u884c\u5e74
+No_metadata_found.=\u30e1\u30bf\u30c7\u30fc\u30bf\u304c\u3042\u308a\u307e\u305b\u3093\u3002
+Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u304c\u4e00\u6642\u7684\u306b\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002
+Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u304c\u4e00\u6642\u7684\u306b\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u5f8c\u3067\u5b9f\u884c\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002
+You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306b\u63a5\u7d9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002Mr._dLib\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3078\u306e\u63a5\u7d9a\u304c\u5fc5\u8981\u3067\u3059\u3002
+No_Internet_Connection.=\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306b\u63a5\u7d9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=JabRef\u73fe\u884c\u7248\u304c\u3001\u3082\u306f\u3084\u6a5f\u80fd\u3057\u3066\u3044\u306a\u3044Mr._dLib\u306e\u65e7\u7248\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059\u3002\n\u8a73\u7d30\u306a\u [...]
+Web_Service_Version_Outdated=\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u65e7\u304f\u306a\u3063\u3066\u3044\u307e\u3059
+The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=\u30a2\u30af\u30bb\u30b9\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308bMr._dLib\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u65e7\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002
+Update_empty_fields_with_data_fetched_from=\u4ee5\u4e0b\u304b\u3089\u53d6\u5f97\u3057\u305f\u30c7\u30fc\u30bf\u3067\u7a7a\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u66f4\u65b0\u3059\u308b\uff1a
+Create_New_Entry=\u65b0\u898f\u9805\u76ee\u3092\u4f5c\u6210
+Update_Existing_Entry=\u65e2\u5b58\u9805\u76ee\u3092\u66f4\u65b0
+Mr._dLib=Mr._dLib
+More_information=\u8a73\u3057\u3044\u60c5\u5831
+Fetching_Metadata...=\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u3066\u3044\u307e\u3059...
+Metadata=\u30e1\u30bf\u30c7\u30fc\u30bf
+
+Autocomplete_names_in_'Firstname_Lastname'_format_only=\u300c\u540d_\u59d3\u300d\u5f62\u5f0f\u306e\u540d\u524d\u306e\u307f\u81ea\u52d5\u88dc\u5b8c
+Autocomplete_names_in_'Lastname,_Firstname'_format_only=\u300c\u59d3,_\u540d\u300d\u5f62\u5f0f\u306e\u540d\u524d\u306e\u307f\u81ea\u52d5\u88dc\u5b8c
+Autocomplete_names_in_both_formats=\u4e21\u65b9\u306e\u5f62\u5f0f\u3068\u3082\u81ea\u52d5\u88dc\u5b8c
+Marking_color_%0=\u6a19\u8b58\u8272_%0
+The_name_'comment'_can_not_be_used_as_an_entry_type_name.=\u300ccomment\u300d\u3068\u3044\u3046\u540d\u524d\u306f\u3001\u9805\u76ee\u578b\u540d\u3068\u3057\u3066\u306f\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
+You_must_enter_an_integer_value_in_the_text_field_for=\u53f3\u8a18\u306e\u30c6\u30ad\u30b9\u30c8\u30d5\u30a3\u30fc\u30eb\u30c9\u4e2d\u306b\u306f\u6574\u6570\u5024\u3092\u5165\u529b\u3057\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093:
+
+File_directory=\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
+Send_as_email=\u96fb\u5b50\u30e1\u30fc\u30eb\u3068\u3057\u3066\u9001\u308b
+References=\u66f8\u8a8c\u60c5\u5831
+Sending_of_emails=\u96fb\u5b50\u30e1\u30fc\u30eb\u306e\u9001\u4ed8
+Subject_for_sending_an_email_with_references=\u66f8\u8a8c\u60c5\u5831\u3092\u6dfb\u4ed8\u3057\u305f\u96fb\u5b50\u30e1\u30fc\u30eb\u306e\u4ef6\u540d
+Automatically_open_folders_of_attached_files=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u306e\u30d5\u30a9\u30eb\u30c0\u3092\u81ea\u52d5\u7684\u306b\u958b\u304f
+Create_entry_based_on_content=\u5185\u5bb9\u306b\u57fa\u3065\u3044\u3066\u9805\u76ee\u3092\u751f\u6210\u3059\u308b
+Store_choice_as_default=\u9078\u629e\u3092\u65e2\u5b9a\u5024\u3068\u3057\u3066\u4fdd\u7ba1\u3059\u308b
+Do_not_show_this_box_again_for_this_import=\u3053\u306e\u8aad\u307f\u8fbc\u307f\u306b\u306f\u3053\u306e\u30dc\u30c3\u30af\u30b9\u3092\u3082\u3046\u8868\u793a\u3057\u306a\u3044
+Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=\u3053\u306ePDF\u53d6\u8fbc\u307f\u65b9\u6cd5\u3092\u5e38\u306b\u7528\u3044\u308b(\u305d\u3057\u3066\u8aad\u307f\u8fbc\u307f\u6bce\u306b\u5c0b\u306d\u306a\u3044)
+Error_creating_email=\u96fb\u5b50\u30e1\u30fc\u30eb\u3092\u751f\u6210\u3059\u308b\u969b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
+Could_not_open_directory=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+Entries_added_to_an_email=\u9805\u76ee\u304c\u96fb\u5b50\u30e1\u30fc\u30eb\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f
+exportFormat=exportFormat
+Output_file_missing=\u51fa\u529b\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u5f53\u305f\u308a\u307e\u305b\u3093
+No_search_matches.=\u691c\u7d22\u6761\u4ef6\u306b\u4e00\u81f4\u3059\u308b\u3082\u306e\u304c\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+The_output_option_depends_on_a_valid_input_option.=\u51fa\u529b\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3001\u5165\u529b\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u3046\u3061\u3001\u6709\u52b9\u306a\u3082\u306e\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002
+Default_import_style_for_drag&drop_of_PDFs=PDF\u30d5\u30a1\u30a4\u30eb\u306e\u30c9\u30e9\u30c3\u30b0\uff06\u30c9\u30ed\u30c3\u30d7\u306b\u5bfe\u3059\u308b\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5\u306e\u65e2\u5b9a\u5024
+Default_PDF_file_link_action=PDF\u30d5\u30a1\u30a4\u30eb\u306e\u30ea\u30f3\u30af\u65b9\u6cd5\u306e\u65e2\u5b9a\u5024
+File_name_format_pattern=\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u66f8\u5f0f\u30d1\u30bf\u30fc\u30f3
+PostgreSQL_database=PostgreSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
+DIN_1505=DIN_1505
+Wrong_Format=\u66f8\u5f0f\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059
+Path_to_gnuclient_or_emacsclient=gnuclient\u82e5\u3057\u304f\u306femacsclient\u3078\u306e\u30d1\u30b9
+Additional_parameters=\u8ffd\u52a0\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc
+Encrypted_documents_are_not_supported=\u6697\u53f7\u5316\u3055\u308c\u305f\u6587\u66f8\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093
+Cite_selected_entries=\u9078\u629e\u3057\u305f\u9805\u76ee\u3092\u5f15\u7528
+Cite_selected_entries_with_in-text_citation=\u9078\u629e\u3057\u305f\u9805\u76ee\u3092\u672c\u6587\u5185\u306e\u5f15\u7528\u3068\u3057\u3066\u5f15\u7528\u3059\u308b
+Cite_special=\u7279\u6b8a\u306a\u5f15\u7528
+Extra_information_(e.g._page_number)=\u8ffd\u52a0\u60c5\u5831_(\u4f8b:\u30da\u30fc\u30b8\u756a\u53f7)
+Manage_citations=\u5f15\u7528\u3092\u7ba1\u7406
+Problem_modifying_citation=\u5f15\u7528\u3092\u4fee\u6b63\u3059\u308b\u306e\u306b\u554f\u984c\u767a\u751f
+Citation=\u5f15\u7528
+Context=\u6587\u8108
+Extra_information=\u8ffd\u52a0\u60c5\u5831
+Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=\u5f15\u7528\u6a19\u8b58\u300c%0\u300d\u306b\u5bfe\u3057\u3066BibTeX\u9805\u76ee\u3092\u5f53\u3066\u306f\u3081\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+Styles=\u66f8\u5f0f
+Select_style=\u66f8\u5f0f\u306e\u9078\u629e
+This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=\u4f7f\u7528\u3067\u304d\u308b\u66f8\u5f0f\u306e\u4e00\u89a7\u3067\u3059\u3002\u4f7f\u3044\u305f\u3044\u3082\u306e\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Journals=\u5b66\u8853\u8a8c
+Cite=\u5f15\u7528
+Cite_in-text=\u6587\u4e2d\u3078\u306e\u5f15\u7528
+Insert_empty_citation=\u7a7a\u306e\u5f15\u7528\u3092\u633f\u5165
+Merge_citations=\u5f15\u7528\u3092\u7d71\u5408
+Manual_connect=\u624b\u52d5\u63a5\u7d9a
+Select_Writer_document=Writer\u6587\u66f8\u3092\u9078\u629e
+Sync_OO_bibliography=OO\u66f8\u8a8c\u60c5\u5831\u3092\u540c\u671f
+OpenOffice=OpenOffice/LibreOffice
+Select_which_open_Writer_document_to_work_on=\u4f5c\u696d\u306b\u3069\u306eWriter\u6587\u66f8\u3092\u958b\u304f\u304b\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
+Connected_to_document=\u6587\u66f8\u306b\u63a5\u7d9a\u3057\u307e\u3057\u305f
+Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=\u8868\u793a\u306a\u3057\u3067\u5f15\u7528\u3092\u633f\u5165_(\u9805\u76ee\u306f\u53c2\u8003\u6587\u732e\u4e00\u89a7\u306b\u306e\u307f\u8868\u793a\u3055\u308c\u307e\u3059)
+Cite_selected_entries_with_extra_information=\u9078\u629e\u3057\u305f\u9805\u76ee\u3092\u8ffd\u52a0\u60c5\u5831\u3068\u3068\u3082\u306b\u5f15\u7528
+Ensure_that_the_bibliography_is_up-to-date=\u66f8\u8a8c\u60c5\u5831\u304c\u6700\u65b0\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b
+Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=\u304a\u4f7f\u3044\u306eOpenOffice\u6587\u66f8\u304cBibTeX\u9375\u300c%0\u300d\u3092\u53c2\u7167\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u4e2d\u306b\u306f\u898b\u5f53\u305f\u308a\u307e\u305b\u3093\u3002
+Unable_to_synchronize_bibliography=\u66f8\u8a8c\u60c5\u5831\u3092\u540c\u671f\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+Combine_pairs_of_citations_that_are_separated_by_spaces_only=\u7a7a\u767d\u3067\u533a\u5207\u3089\u308c\u3066\u3044\u308b\u5f15\u7528\u306e\u30da\u30a2\u306e\u307f\u3092\u9023\u7d50\u3057\u3066\u304f\u3060\u3055\u3044
+Autodetection_failed=\u81ea\u52d5\u691c\u51fa\u306b\u5931\u6557\u3057\u307e\u3057\u305f
+Connecting=\u63a5\u7d9a\u3057\u3066\u3044\u307e\u3059
+Please_wait...=\u304a\u5f85\u3061\u304f\u3060\u3055\u3044...
+Unable_to_connect=\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+Set_connection_parameters=\u63a5\u7d9a\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044
+Path_to_OpenOffice_directory=OpenOffice\u8f9e\u66f8\u3078\u306e\u30d1\u30b9
+Path_to_OpenOffice_executable=OpenOffice\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30d1\u30b9
+Path_to_OpenOffice_library_dir=OpenOffice\u30e9\u30a4\u30d6\u30e9\u30ea \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3078\u306e\u30d1\u30b9
+Autodetect=\u81ea\u52d5\u691c\u51fa
+Connection_lost=\u63a5\u7d9a\u304c\u5931\u308f\u308c\u307e\u3057\u305f
+The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=\u6bb5\u843d\u306e\u66f8\u5f0f\u306f\u3001\u66f8\u5f0f\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u300cReferenceParagraphFormat\u300d\u7279\u6027\u3082\u3057\u304f\u306f\u300cReferenceHeaderParagraphFormat\u300d\u7279\u6027\u3067\u5236\u5fa1\u3055\u308c\u3066\u3044\u307e\u3059\u3002
+The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=\u6587\u5b57\u66f8\u5f0f\u306f\u3001\u66f8\u5f0f\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u5f15\u7528\u7279\u6027\u300cCitationCharacterFormat\u300d\u3067\u5236\u5fa1\u3055\u308c\u3066\u3044\u307e\u3059\u3002
+Automatically_sync_bibliography_when_inserting_citations=\u5f15\u7528\u3092\u633f\u5165\u3059\u308b\u969b\u3001\u66f8\u8a8c\u60c5\u5831\u3092\u81ea\u52d5\u7684\u306b\u540c\u671f
+Look_up_BibTeX_entries_in_the_active_tab_only=\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30bf\u30d6\u306eBibTeX\u9805\u76ee\u306e\u307f\u3092\u691c\u7d22
+Look_up_BibTeX_entries_in_all_open_databases=\u958b\u304b\u308c\u3066\u3044\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3059\u3079\u3066\u306eBibTeX\u9805\u76ee\u3092\u691c\u7d22
+Use_in-parenthesis_citation=\u62ec\u5f27\u4ed8\u304d\u306e\u5f15\u7528\u3092\u4f7f\u7528
+Use_in-text_citation=\u6587\u4e2d\u3078\u306e\u5f15\u7528\u3092\u4f7f\u7528
+Autodetecting_paths...=\u30d1\u30b9\u3092\u81ea\u52d5\u691c\u51fa\u3057\u3066\u3044\u307e\u3059...
+Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=OpenOffice\u306e\u5c0e\u5165\u72b6\u614b\u3092\u81ea\u52d5\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u5c0e\u5165\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u624b\u52d5\u3067\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Could_not_find_OpenOffice_installation=\u5c0e\u5165\u6e08\u307f\u306eOpenOffice\u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+Directories=\u8f9e\u66f8
+Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=2\u3064\u4ee5\u4e0a\u306eOpenOffice\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002\u3069\u3061\u3089\u306b\u63a5\u7d9a\u3059\u308b\u304b\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\:
+Choose_OpenOffice_executable=OpenOffice\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e
+Select_document=\u6587\u66f8\u3092\u9078\u629e
+Edit_Group_Membership=\u30b0\u30eb\u30fc\u30d7\u53c2\u52a0\u72b6\u614b\u3092\u7de8\u96c6
+PostgreSQL=PostgreSQL
+Highlight_Words=\u5358\u8a9e\u3092\u7740\u8272
+JSTOR_import_cancelled=JSTOR\u306e\u8aad\u307f\u8fbc\u307f\u304c\u53d6\u308a\u6d88\u3055\u308c\u307e\u3057\u305f
+HTML_list=HTML\u4e00\u89a7
+Click_group_to_toggle_membership_of_selected_entries=\u30b0\u30eb\u30fc\u30d7\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001\u9078\u629e\u3057\u305f\u9805\u76ee\u306e\u6240\u5c5e\u3092\u5165\u5207\u3057\u3066\u304f\u3060\u3055\u3044
+Use_EMACS_23_insertion_string=EMACS_23\u578b\u6587\u5b57\u5217\u633f\u5165\u3092\u884c\u3046
+Normalize_to_BibTeX_name_format=BibTeX\u540d\u66f8\u5f0f\u306b\u898f\u6e96\u5316
+If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=\u53ef\u80fd\u306a\u3089\u3070\u3001\u540d\u79f0\u4e00\u89a7\u3092\u6a19\u6e96\u7684\u306aBibTeX\u540d\u66f8\u5f0f\u306b\u5408\u81f4\u3059\u308b\u3088\u3046\u306b\u898f\u6e96\u5316\u3059\u308b
+Could_not_open_%0=%0\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+Unknown_import_format=\u672a\u77e5\u306e\u8aad\u307f\u8fbc\u307f\u578b\u3067\u3059
+Open_INSPIRE_entry=INSPIRE\u9805\u76ee\u3092\u958b\u304d\u307e\u3059
+An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=INSPIRE\u30bd\u30fc\u30b9(%0)\u304b\u3089\u306e\u53d6\u5f97\u6642\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f:
+Error_while_fetching_from_Inspire\:_=Inspire\u304b\u3089\u306e\u53d6\u5f97\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f:
+Web_search=\u30a6\u30a7\u30d6\u691c\u7d22
+Autocomplete_names=\u540d\u524d\u3092\u81ea\u52d5\u88dc\u5b8c
+You_must_select_either_a_valid_style_file,_or_use_the_default_style.=\u6709\u52b9\u306a\u66f8\u5f0f\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002\u305d\u3046\u3067\u306a\u3051\u308c\u3070\u65e2\u5b9a\u306e\u66f8\u5f0f\u304c\u7528\u3044\u3089\u308c\u307e\u3059\u3002
+Default_style=\u65e2\u5b9a\u66f8\u5f0f
+Choose_style_file_directly=\u66f8\u5f0f\u30d5\u30a1\u30a4\u30eb\u3092\u76f4\u63a5\u9078\u629e
+Choose_from_a_directory=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304b\u3089\u9078\u629e
+No_directory_defined_for_%0-files=%0\u500b\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u8f9e\u66f8\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093
+Allow_file_links_relative_to_each_bib_file's_location=\u5404bib\u30d5\u30a1\u30a4\u30eb\u306e\u5834\u6240\u304b\u3089\u76f8\u5bfe\u30d1\u30b9\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u30ea\u30f3\u30af\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef
+Style_selection=\u66f8\u5f0f\u306e\u9078\u629e
+The_panel_below_shows_the_definition_of_the_default_style.=\u4e0b\u8a18\u306e\u30d1\u30cd\u30eb\u306f\u3001\u65e2\u5b9a\u66f8\u5f0f\u306e\u5b9a\u7fa9\u3092\u8868\u793a\u3057\u3066\u3044\u307e\u3059\u3002
+If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=\u3053\u308c\u3092\u65b0\u898f\u66f8\u5f0f\u306e\u96db\u5f62\u306b\u4f7f\u7528\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u5185\u5bb9\u3092\u65b0\u3057\u3044.jstyle\u30d5\u30a1\u30a4\u30eb\u306b\u30b3\u30d4\u30fc\u3057\u3066\u304f\u3060\u3055\u3044
+
+Default_style_(author-year_citations)=\u65e2\u5b9a\u66f8\u5f0f\uff08\u8457\u8005\u540d-\u767a\u884c\u5e74\uff09
+Default_style_(numerical_citations)=\u65e2\u5b9a\u66f8\u5f0f\uff08\u9023\u756a\u5f15\u7528\uff09
+No_valid_style_file_defined=\u6709\u52b9\u306a\u66f8\u5f0f\u30d5\u30a1\u30a4\u30eb\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093
+Choose_pattern=\u30d1\u30bf\u30fc\u30f3\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
+Use_the_bib_file_location_as_primary_file_directory=bib\u30d5\u30a1\u30a4\u30eb\u306e\u5834\u6240\u3092\u4e3b\u8981\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3068\u3057\u3066\u4f7f\u7528
+Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=gnuclient/emacsclient\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002emacsclient/gnuclient\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u5c0e\u5165\u6e08\u307f\u3067PATH\u4e2d\u306b\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Built-in_journal_list=\u7d44\u307f\u8fbc\u307f\u5b66\u8853\u8a8c\u4e00\u89a7
+OpenOffice/LibreOffice_connection=OpenOffice/LibreOffice\u63a5\u7d9a
+You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=\u500b\u4eba\u7528\u5b66\u8853\u8a8c\u4e00\u89a7\u3092\u4f5c\u6210\u3001\u307e\u305f\u306f\u5916\u90e8\u306e\u5b66\u8853\u8a8c\u4e00\u89a7\u306b\u30ea\u30f3\u30af\u3059\u308b\u3053\u3068\u3067<br>\u5b66\u8853\u8a8c\u540d\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
+JabRef_includes_a_built-in_list_of_journal_abbreviations.=JabRef\u306b\u306f\u5b66\u8853\u8a8c\u77ed\u7e2e\u540d\u306e\u7d44\u307f\u8fbc\u307f\u4e00\u89a7\u304c\u3042\u308a\u307e\u3059\u3002
+You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=\u6709\u52b9\u306a\u66f8\u5f0f\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3059\u308b\u304b\u3001\u65e2\u5b9a\u66f8\u5f0f\u306e\u3046\u3061\u4e00\u3064\u3092\u7528\u3044\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
+You_must_select_either_a_valid_style_file,_or_use_a_default_style.=\u6709\u52b9\u306a\u66f8\u5f0f\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3059\u308b\u304b\u3001\u65e2\u5b9a\u66f8\u5f0f\u3092\u7528\u3044\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
+Show=\u8868\u793a
+This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=\u3053\u308c\u306f\u5358\u7d14\u306a\u30b3\u30d4\u30fc\uff06\u30da\u30fc\u30b9\u30c8\u30c0\u30a4\u30a2\u30ed\u30b0\u3067\u3059\u3002\u307e\u305a\u5165\u529b\u9818\u57df\u306b\u6587\u7ae0\u3092\u8aad\u307f\u8fbc\u3080\u304b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002<br>\u305d\u306e\u5f8c\u3001\u6587\u7ae0\u3092\u [...]
+Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=Java_Bouncy_Castle\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u5c0e\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u8a73\u3057\u304f\u306f\u3001http\://www.bouncycastle.org/\u53c2\u7167\u3002
+
+This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=\u3053\u306e\u6a5f\u80fd\u3092\u4f7f\u3046\u3068\u3001\u65e2\u5b58\u306eLaTeX\u6587\u66f8\u306b\u5fc5\u8981\u3068\u3055\u308c\u3066\u3044\u308b\u9805\u76ee\u304c\u4f55\u3067\u3042\u308b\u304b\u3092\u691c\u51fa\u3057\u3066\u65b0\u898f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002
+You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=\u9805\u76ee\u3092\u9078\u3076\u305f\u3081\u306e\u65e2\u306b\u958b\u304b\u308c\u3066\u3044\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u3001\u6587\u66f8\u3092\u30b3\u30f3\u30d1\u30a4\u30eb\u3059\u308b\u969b\u306bLaTeX\u304c\u751f\u6210\u3057\u305fAUX\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e [...]
+First_select_entries_to_clean_up.=\u307e\u305a\u6d88\u53bb\u3059\u308b\u9805\u76ee\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Cleanup_entry=\u9805\u76ee\u3092\u6d88\u53bb
+Autogenerate_PDF_Names=PDF\u540d\u3092\u81ea\u52d5\u751f\u6210
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=PDF\u540d\u306e\u81ea\u52d5\u751f\u6210\u306f\u53d6\u308a\u6d88\u305b\u307e\u305b\u3093\u3002\u7d9a\u3051\u307e\u3059\u304b\uff1f
+File_rename_failed_for=\u53f3\u8a18\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u5909\u66f4\u306b\u5931\u6557\:_
+You_have_toggled_the_BibLaTeX_mode.=BibLaTeX\u30e2\u30fc\u30c9\u3068\u5207\u308a\u66ff\u3048\u307e\u3057\u305f\u3002
+Use_full_firstname_whenever_possible=\u53ef\u80fd\u306a\u5834\u5408\u306f\u5e38\u306b\u5b8c\u5168\u306a\u30d5\u30a1\u30fc\u30b9\u30c8\u30cd\u30fc\u30e0\u3092\u4f7f\u7528
+Use_abbreviated_firstname_whenever_possible=\u53ef\u80fd\u306a\u5834\u5408\u306f\u5e38\u306b\u77ed\u7e2e\u3057\u305f\u30d5\u30a1\u30fc\u30b9\u30c8\u30cd\u30fc\u30e0\u3092\u4f7f\u7528
+Use_abbreviated_and_full_firstname=\u77ed\u7e2e\u3057\u305f\u30d5\u30a1\u30fc\u30b9\u30c8\u30cd\u30fc\u30e0\u3068\u5b8c\u5168\u306a\u30d5\u30a1\u30fc\u30b9\u30c8\u30cd\u30fc\u30e0\u3092\u4e21\u65b9\u4f7f\u7528
+Autocompletion_options=\u81ea\u52d5\u88dc\u5b8c\u30aa\u30d7\u30b7\u30e7\u30f3
+Autocomplete_after_following_number_of_characters=\u53f3\u8a18\u306e\u6587\u5b57\u6570\u4ee5\u4e0a\u3067\u81ea\u52d5\u88dc\u5b8c
+Name_format_used_for_autocompletion=\u81ea\u52d5\u88dc\u5b8c\u306b\u4f7f\u7528\u3055\u308c\u308b\u6c0f\u540d\u306e\u66f8\u5f0f
+Treatment_of_first_names=\u540d(first_name)\u306e\u53d6\u308a\u6271\u3044
+No_icon_found_for_%0=%0\u306e\u30a2\u30a4\u30b3\u30f3\u304c\u898b\u5f53\u305f\u308a\u307e\u305b\u3093
+Cleanup_entries=\u9805\u76ee\u3092\u6d88\u53bb
+Automatically_assign_new_entry_to_selected_groups=\u9078\u629e\u3057\u305f\u30b0\u30eb\u30fc\u30d7\u306b\u65b0\u898f\u9805\u76ee\u3092\u81ea\u52d5\u5272\u308a\u5f53\u3066
+Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=DOI\u3092note\u53ca\u3073URL\u30d5\u30a3\u30fc\u30eb\u30c9\u304b\u3089DOI\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u79fb\u52d5\u3057\u3066\u3001http\u524d\u7f6e\u53e5\u3092\u524a\u9664\u3059\u308b
+Format_content_of_month_field_to_#mon#=month\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u5185\u5bb9\u3092#mon#\u306b\u63c3\u3048\u308b
+Ensure_that_page_ranges_are_of_the_form_num1--num2=\u30da\u30fc\u30b8\u7bc4\u56f2\u3092\u300c\u958b\u59cb\u9801--\u7d42\u4e86\u9801\u300d\u306e\u5f62\u306b\u63c3\u3048\u308b
+Make_paths_of_linked_files_relative_(if_possible)=\u30ea\u30f3\u30af\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092(\u53ef\u80fd\u306a\u9650\u308a)\u76f8\u5bfe\u30d1\u30b9\u306b\u3059\u308b
+Rename_PDFs_to_given_file_name_format_pattern=PDF\u3092\u6307\u5b9a\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u540d\u66f8\u5f0f\u30d1\u30bf\u30fc\u30f3\u306b\u6539\u540d\u3059\u308b
+Rename_only_PDFs_having_a_relative_path=\u76f8\u5bfe\u30d1\u30b9\u3092\u6301\u3064PDF\u306e\u307f\u3092\u6539\u540d
+What_would_you_like_to_clean_up?=\u3069\u308c\u3092\u6d88\u53bb\u3057\u307e\u3059\u304b\uff1f
+Doing_a_cleanup_for_%0_entries...=%0\u500b\u306e\u9805\u76ee\u3092\u6d88\u53bb\u3057\u3066\u3044\u307e\u3059...
+No_entry_needed_a_clean_up=\u6d88\u53bb\u306e\u5fc5\u8981\u304c\u3042\u308b\u9805\u76ee\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f
+One_entry_needed_a_clean_up=1\u3064\u306e\u9805\u76ee\u3092\u6d88\u53bb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3057\u305f
+%0_entries_needed_a_clean_up=%0\u500b\u306e\u9805\u76ee\u3092\u6d88\u53bb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3057\u305f
+Imported_=\u53f3\u8a18\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3057\u305f\:_
+Error_importing_from_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8aad\u307f\u8fbc\u307f\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f
+
+%0_databases_will_be_imported=%0\u500b\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u8aad\u307f\u8fbc\u307e\u308c\u307e\u3059
+Imported_%0_databases_successfully=%0\u500b\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u7121\u4e8b\u8aad\u307f\u8fbc\u307e\u308c\u307e\u3057\u305f
+Minimize_to_system_tray=\u30b7\u30b9\u30c6\u30e0\u30c8\u30ec\u30a4\u306b\u6700\u5c0f\u5316
+
+Incomplete_search_results=\u4e0d\u5b8c\u5168\u306a\u691c\u7d22\u7d50\u679c
+%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=%0\u500b\u306e\u9805\u76ee\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u304c\u3001\u305d\u306e\u3046\u3061%1\u500b\u3060\u3051\u3057\u304b\u89e3\u6c7a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+
+Error_downloading_file_'%0'=\u30d5\u30a1\u30a4\u30eb\u300c%0\u300d\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u969b\u306b\u30a8\u30e9\u30fc\u767a\u751f
+Download_failed=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f
+Importing_cancelled=\u8aad\u307f\u8fbc\u307f\u3092\u53d6\u308a\u6d88\u3057\u307e\u3057\u305f
+There_are_no_available_databases_to_be_imported=\u8aad\u307f\u8fbc\u3080\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u3042\u308a\u307e\u305b\u3093
+Import_from_SQL_database=SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u8aad\u307f\u8fbc\u307f
+<_CREATE_NEW_DATABASE_>=\uff1c\u65b0\u898f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\uff1e
+Remove_Selected=\u9078\u629e\u5206\u3092\u524a\u9664
+SQL_Database_Exporter=SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u66f8\u304d\u51fa\u3057
+Select_target_SQL_database\:=\u76ee\u7684\u306eSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\:
+SQL_Database_Importer=SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8aad\u307f\u8fbc\u307f
+Please_select_which_JabRef_databases_do_you_want_to_import\:=\u8aad\u307f\u8fbc\u307f\u305f\u3044JabRef\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\:
+
+Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=\u30b0\u30eb\u30fc\u30d7\u30c4\u30ea\u30fc\u3092\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002BibTeX\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58\u3059\u308b\u3068\u3001\u30b0\u30eb\u30fc\u30d7\u306f\u3059\u3079\u3066\u5931\u308f\u308c\u307e\u3059\u3002
+Attach_file=\u30d5\u30a1\u30a4\u30eb\u3092\u6dfb\u4ed8
+
+Setting_all_preferences_to_default_values.=\u3059\u3079\u3066\u306e\u8a2d\u5b9a\u3092\u65e2\u5b9a\u5024\u306b\u3057\u307e\u3059\u3002
+Resetting_preference_key_'%0'=\u30ad\u30fc\u300c%0\u300d\u306e\u8a2d\u5b9a\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u307e\u3059
+Unknown_preference_key_'%0'=\u30ad\u30fc\u300c%0\u300d\u3068\u3044\u3046\u8a2d\u5b9a\u306f\u77e5\u308a\u307e\u305b\u3093
+Unable_to_clear_preferences.=\u8a2d\u5b9a\u3092\u6d88\u53bb\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+
+Reset_preferences_(key1,key2,..._or_'all')=\u8a2d\u5b9a\u3092\u30ea\u30bb\u30c3\u30c8(\u30ad\u30fc1\u30fb\u30ad\u30fc2\u2026\u3042\u308b\u3044\u306f\u300call\u300d)
+Find_unlinked_files=\u30ea\u30f3\u30af\u3057\u3066\u3044\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22
+Select_All=\u3059\u3079\u3066\u3092\u9078\u629e
+Unselect_All=\u3059\u3079\u3066\u306e\u9078\u629e\u3092\u89e3\u9664
+Expand_All=\u3059\u3079\u3066\u5c55\u958b\u8868\u793a
+Collapse_All=\u3059\u3079\u3066\u7573\u3093\u3067\u8868\u793a
+Select_Directory=\u8f9e\u66f8\u3092\u9078\u629e
+Choose_Directory=\u8f9e\u66f8\u3092\u9078\u3076
+Use_the_selected_directory_to_start_with_the_search.=\u9078\u629e\u3057\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304b\u3089\u691c\u7d22\u3092\u958b\u59cb\u3057\u307e\u3059\u3002
+Browse...=\u95b2\u89a7...
+Opens_the_file_browser.=\u30d5\u30a1\u30a4\u30eb\u30d6\u30e9\u30a6\u30b6\u3092\u958b\u304d\u307e\u3059
+Scan_directory=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u8d70\u67fb
+Searches_the_selected_directory_for_unlinked_files.=\u9078\u629e\u3057\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u975e\u30ea\u30f3\u30af\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22
+Starts_the_import_of_bibtex_entries.=BibTeX\u9805\u76ee\u306e\u8aad\u307f\u8fbc\u307f\u3092\u958b\u59cb\u3057\u307e\u3059\u3002
+Leave_this_dialog.=\u3053\u306e\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u9589\u3058\u307e\u3059\u3002
+Create_directory_based_keywords=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u57fa\u3065\u3044\u305f\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u751f\u6210
+Creates_keywords_in_created_entrys_with_directory_pathnames=\u751f\u6210\u3057\u305f\u9805\u76ee\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30d1\u30b9\u540d\u3092\u5165\u308c\u308b
+Select_a_directory_where_the_search_shall_start.=\u691c\u7d22\u3092\u958b\u59cb\u3059\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044\u3002
+Select_file_type\:=\u30d5\u30a1\u30a4\u30eb\u578b\u3092\u9078\u629e\:
+These_files_are_not_linked_in_the_active_database.=\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u73fe\u5728\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
+Entry_type_to_be_created\:=\u751f\u6210\u3059\u308b\u9805\u76ee\u578b\:
+Searching_file_system...=\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u691c\u7d22\u3057\u3066\u3044\u307e\u3059...
+Importing_into_Database...=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...
+Select_directory=\u8f9e\u66f8\u3092\u9078\u629e
+Select_files=\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e
+Bibtex_entry_creation=BibTeX\u9805\u76ee\u306e\u5f15\u7528
+<No_selection>=<\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093>
+Push_selection_to_TeXstudio=\u9078\u629e\u90e8\u3092TeXstudio\u306b\u9001\u308a\u8fbc\u3080
+Path_to_TeXstudio=TeXstudio\u306e\u30d1\u30b9
+Program_'%0'_not_found=\u30d7\u30ed\u30b0\u30e9\u30e0\u300c%0\u300d\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
+Pushed_citations_to_TeXstudio=\u5f15\u7528\u3092TeXstudio\u306b\u9001\u308a\u8fbc\u307f\u307e\u3057\u305f
+Unable_to_connect_to_freecite_online_service.=freecite\u30aa\u30f3\u30e9\u30a4\u30f3\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+Parse_with_FreeCite=FreeCite\u3067\u89e3\u6790
+Insert_selected_citations_into_TeXstudio=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092TeXstudio\u306b\u633f\u5165
+The_current_BibTeX_key_will_be_overwritten._Continue?=\u73fe\u5728\u306eBibTeX\u9375\u306f\u4e0a\u66f8\u304d\u3055\u308c\u307e\u3059\u3002\u7d9a\u3051\u307e\u3059\u304b\uff1f
+Overwrite_key=\u30ad\u30fc\u3092\u4e0a\u66f8\u304d
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=\u65e2\u5b58\u306e\u9375\u3092\u4e0a\u66f8\u304d\u3057\u307e\u305b\u3093\u3002\u3053\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u306b\u306f\u3001\u30aa\u30d7\u30b7\u30e7\u30f3\u2192\u8a2d\u5b9a\u2192BibTeX\u30ad\u30fc\u306e\u751f\u6210\u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044
+How_would_you_like_to_link_to_'%0'?=\u300c%0\u300d\u3078\u306e\u30ea\u30f3\u30af\u3092\u3069\u3046\u3057\u307e\u3059\u304b\uff1f
+Marked_entries_as_relevant=\u9805\u76ee\u3092\u95a2\u9023\u6027\u304c\u3042\u308b\u3082\u306e\u3068\u3057\u3066\u6a19\u8b58\u4ed8\u3051\u3057\u307e\u3057\u305f
+Marked_entries'_quality_as_good=\u9805\u76ee\u306e\u54c1\u8cea\u3092\u826f\u597d\u3068\u3057\u3066\u6a19\u8b58\u4ed8\u3051\u3057\u307e\u3057\u305f
+Set_priority=\u512a\u5148\u5ea6\u3092\u8a2d\u5b9a
+no_preview_available=\u30d7\u30ec\u30d3\u30e5\u30fc\u304c\u3042\u308a\u307e\u305b\u3093
+Enable_PDF_preview=PDF\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u6709\u52b9\u306b\u3059\u308b
+Show_one_letter_heading_for_icon_columns=\u30a2\u30a4\u30b3\u30f3\u5217\u306e\u898b\u51fa\u3057\u306b1\u6587\u5b57\u4ed8\u3051\u52a0\u3048\u308b
+Help_on_special_fields=\u7279\u6b8a\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u30d8\u30eb\u30d7
+Enable_special_fields=\u7279\u6b8a\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4f7f\u7528\u3059\u308b
+Show_rank=\u8a55\u4fa1\u3092\u8868\u793a
+Compact_rank=\u8a55\u4fa1\u3092\u7c21\u7d20\u8868\u793a
+Show_quality=\u54c1\u8cea\u3092\u8868\u793a
+Show_priority=\u512a\u5148\u5ea6\u3092\u8868\u793a
+Show_relevance=\u95a2\u9023\u6027\u3092\u8868\u793a
+Synchronize_with_keywords=\u30ad\u30fc\u30ef\u30fc\u30c9\u3068\u540c\u671f
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=\u7279\u6b8a\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u5024\u3092\u72ec\u7acb\u3057\u305f\u30d5\u30a3\u30fc\u30eb\u30c9\u3068\u3057\u3066BibTeX\u306b\u66f8\u304d\u8fbc\u3080
+You_have_changed_settings_for_special_fields.=\u7279\u6b8a\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u8a2d\u5b9a\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u3002
+Changed_special_field_settings=\u7279\u6b8a\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u8a2d\u5b9a\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f
+Bibtex_key_patterns=BibTeX\u9375\u30d1\u30bf\u30fc\u30f3
+Convert_1st,_2nd,_..._to_real_superscripts=1st,_2nd,_..._\u7b49\u3092\u4e0b\u4ed8\u304d\u6587\u5b57\u3092\u4f7f\u3046\u3088\u3046\u5909\u63db
+Manage_content_selectors=\u5185\u5bb9\u9078\u629e\u5b50\u3092\u7ba1\u7406
+Dropped_comment_from_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u30b3\u30e1\u30f3\u30c8\u3092\u53d6\u308a\u9664\u304d\u307e\u3057\u305f
+Synchronized_special_fields_based_on_keywords=\u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u57fa\u3065\u3044\u3066\u540c\u671f\u3055\u308c\u308b\u7279\u6b8a\u30d5\u30a3\u30fc\u30eb\u30c9
+Clear_priority=\u512a\u5148\u5ea6\u3092\u6d88\u53bb
+No_priority_information=\u512a\u5148\u5ea6\u306e\u60c5\u5831\u304c\u3042\u308a\u307e\u305b\u3093
+Set_priority_to_high=\u512a\u5148\u5ea6\u3092\u9ad8\u306b\u8a2d\u5b9a
+Priority_high=\u512a\u5148\u5ea6\u9ad8
+Set_priority_to_medium=\u512a\u5148\u5ea6\u3092\u4e2d\u306b\u8a2d\u5b9a
+Priority_medium=\u512a\u5148\u5ea6\u4f4e
+Set_priority_to_low=\u512a\u5148\u5ea6\u3092\u4f4e\u306b\u8a2d\u5b9a
+Priority_low=\u512a\u5148\u5ea6\u4e2d
+Priority=\u512a\u5148\u5ea6
+Toogle_quality_assured=\u54c1\u8cea\u691c\u67fb\u6e08\u307f\u3092\u5165\u5207
+Quality=\u54c1\u8cea
+Rank=\u8a55\u4fa1
+Clear_rank=\u8a55\u4fa1\u3092\u6d88\u53bb
+No_rank_information=\u8a55\u4fa1\u306e\u60c5\u5831\u304c\u3042\u308a\u307e\u305b\u3093
+Set_rank_to_one_star=\u8a55\u4fa1\u3092\u4e00\u3064\u661f\u306b\u8a2d\u5b9a
+One_star=\u4e00\u3064\u661f
+Set_rank_to_two_stars=\u8a55\u4fa1\u3092\u4e8c\u3064\u661f\u306b\u8a2d\u5b9a
+Two_stars=\u4e8c\u3064\u661f
+Set_rank_to_three_stars=\u8a55\u4fa1\u3092\u4e09\u3064\u661f\u306b\u8a2d\u5b9a
+Three_stars=\u4e09\u3064\u661f
+Set_rank_to_four_stars=\u8a55\u4fa1\u3092\u56db\u3064\u661f\u306b\u8a2d\u5b9a
+Four_stars=\u56db\u3064\u661f
+Set_rank_to_five_stars=\u8a55\u4fa1\u3092\u4e94\u3064\u661f\u306b\u8a2d\u5b9a
+Five_stars=\u4e94\u3064\u661f
+Toggle_relevance=\u95a2\u9023\u6027\u3092\u5165\u5207
+Relevance=\u95a2\u9023\u6027
+Manage_keywords=\u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u7ba1\u7406
+Keywords_of_selected_entries=\u9078\u629e\u3057\u305f\u9805\u76ee\u306e\u30ad\u30fc\u30ef\u30fc\u30c9
+Update_keywords=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u66f4\u65b0
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=\u9805\u76ee\u3092\u4fee\u6b63\u3057\u3066\u30a8\u30c7\u30a3\u30bf\u3092\u518d\u5ea6\u958b\u304d\u3001\u30bd\u30fc\u30b9\u3092\u8868\u793a\u3082\u3057\u304f\u306f\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u6642\u3084\u30ea\u30f3\u30af\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3059\u308b\u969b\u306b\u3001\u4e0a\u8a18\u3067\u8a2d\u5b9a\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30 [...]
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=\u65e2\u306b\u30d5\u30a3\u30fc\u30eb\u30c9\u30bb\u30c3\u30c8\u306e\u3042\u308b\u9805\u76ee\u3092\u8cbc\u308a\u4ed8\u3051\u305f\u308a\u8aad\u307f\u8fbc\u3093\u3060\u308a\u3057\u305f\u5834\u5408\u306b\u306f\u3001\u4e0a\u66f8\u304d\u3059\u308b\u3002
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=\u30e1\u30e2\u30ea\u30fc\u30b9\u30c6\u30a3\u30c3\u30af\u30e2\u30fc\u30c9\u3092\u7121\u52b9\u306b\u3059\u308b\u306b\u306f\u3001JabRef\u3068\u540c\u3058\u30d5\u30a9\u30eb\u30c0\u306b\u3042\u308bjabref.xml\u30d5\u30a1\u30a4\u30eb\u3092\u6539\u540d\u3059\u308b\u304b\u524a\u9664\u3057\u3066\u304f\u3060\u3055\u3044
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=\u3053\u308c\u306f\u521d\u671f\u30d9\u30fc\u30bf\u7248\u3067\u3042\u308b\u3053\u3068\u306b\u3054\u6ce8\u610f\u304f\u3060\u3055\u3044\u3002\u304a\u4f7f\u3044\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3059\u308b\u3053\u3068\u306a\u304f\u4f7f\u7528\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\uff01
+A_string_with_that_label_already_exists=\u305d\u306e\u30e9\u30d9\u30eb\u3092\u6301\u3064\u6587\u5b57\u5217\u306f\u65e2\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=\u30d5\u30a1\u30a4\u30eb\u304c\u5916\u90e8\u304b\u3089\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f\u3002\u672c\u5f53\u306b\u4fdd\u5b58\u3057\u307e\u3059\u304b\uff1f
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=\u5b9f\u884c\u4e2d\u306egnuserv\u30d7\u30ed\u30bb\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002Emacs\u3042\u308b\u3044\u306fXEmacs\u304c\u5b9f\u884c\u4e2d\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3001<BR>\uff08\u300cserver-start\u300d\u307e\u305f\u306f\u300c [...]
+Use_the_following_delimiter_character(s)\:=\u53f3\u8a18\u306e\u533a\u5207\u308a\u6587\u5b57\u3092\u4f7f\u7528\:
+Created_group_"%0".=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002
+Removed_all_subgroups_of_group_"%0".=\u30b0\u30eb\u30fc\u30d7\u300c%0\u300d\u306e\u5168\u4e0b\u5c64\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664\u3057\u307e\u3057\u305f
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0\u500b\u306e\u9805\u76ee\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002\u30b5\u30fc\u30d0\u30fc\u8ca0\u8377\u3092\u8efd\u6e1b\u3059\u308b\u305f\u3081\u3001%1\u500b\u306e\u307f\u304c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3059\u3002
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=\u63a5\u7d9a\u304c\u3067\u304d\u307e\u305b\u3093\u3002\u4e00\u3064\u306e\u53ef\u80fd\u6027\u3068\u3057\u3066\u306f\u3001JabRef\u3068OpenOffice/LibreOffice\u304c\u3001\u3068\u3082\u306b32\u30d3\u30c3\u30c8\u30e2\u30fc\u30c9\u304b64\u30d3\u30c3\u30c8\u30e2\u30fc\u30c9\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u306a\u3044\u305b\u3044\u304b\u3082\u3057\u [...]
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=\u5b9f\u884c\u4e2d\u306eOpenOffice\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\nOpenOffice\u304cJava\u30b5\u30dd\u30fc\u30c8\u3068\u3068\u3082\u306b\u5c0e\u5165\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u624b\u52d5\ [...]
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=\u3069\u306eWriter\u6587\u66f8\u306b\u3082\u63a5\u7d9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u6587\u66f8\u304c\u958b\u304b\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u3001\u300cWriter\u6587\u66f8\u3092\u9078\u629e\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066\u63a5\u7d9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=OpenOffice\u3078\u306e\u63a5\u7d9a\u304c\u5931\u308f\u308c\u307e\u3057\u305f\u3002OpenOffice\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u518d\u63a5\u7d9a\u3092\u8a66\u307f\u3066\u304f\u3060\u3055\u3044\u3002
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=\u304a\u4f7f\u3044\u306e\u66f8\u5f0f\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u6bb5\u843d\u69d8\u5f0f\u300c%0\u300d\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u308c\u306f\u3001\u73fe\u5728\u306eOpenOffice\u6587\u66f8\u306b\u306f\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=\u304a\u4f7f\u3044\u306e\u66f8\u5f0f\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u6587\u5b57\u69d8\u5f0f\u300c%0\u300d\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u308c\u306f\u3001\u73fe\u5728\u306eOpenOffice\u6587\u66f8\u306b\u306f\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=\u30d7\u30e9\u30b0\u30a4\u30f3\u540d\u3068\u305d\u306e\u7248\u6570\u3092\u78ba\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002\u6709\u52b9\u306aJabRef\u30d7\u30e9\u30b0\u30a4\u30f3\u3067\u306f\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
+Import_Metadata_From_PDF=PDF\u304b\u3089Metadata\u3092\u8aad\u307f\u8fbc\u3080
+Run_HTML_converter_on_title=title\u306bHTML\u5909\u63db\u5b50\u3092\u304b\u3051\u308b
+Searching...=\u691c\u7d22\u4e2d...
+
+Error_fetching_from_Google_Scholar=Google_Scholar\u304b\u3089\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u9805\u76ee\u3092%0\u500b\u4ee5\u4e0a\u9078\u629e\u3057\u307e\u3057\u305f\u3002\u3042\u307e\u308a\u306b\u591a\u304f\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3092\u6025\u306b\u884c\u3046\u3068\u3001\u5176\u308c\u3092\u30d6\u30ed\u30c3\u30af\u3059\u308b\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u3082\ [...]
+Confirm_selection=\u9078\u629e\u7bc4\u56f2\u3092\u78ba\u8a8d
+Unknown_DOI\:_'%0'.=\u300c%0\u300d\u306f\u65e2\u77e5\u306eDOI\u3067\u306f\u3042\u308a\u307e\u305b\u3093
+Get_BibTeX_entry_from_DOI=DOI\u304b\u3089BibTeX\u9805\u76ee\u3092\u53d6\u5f97
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=\u4e0a\u6dfb\u5b57\u53ca\u3073\u4e0b\u6dfb\u5b57\u3092\u30c6\u30ad\u30b9\u30c8\u3067\u306f\u306a\u304f\u6570\u5f0f\u306b\u5909\u63db\u3059\u308b
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=\u5927\u5c0f\u6587\u5b57\u3092\u6b63\u3057\u304f\u7dad\u6301\u3059\u308b\u305f\u3081\u3001\u691c\u7d22\u4e2d\u306b\u6307\u5b9a\u3057\u305f\u30bf\u30a4\u30c8\u30eb\u8a9e\u306b{}\u3092\u4ed8\u3051\u52a0\u3048\u308b
+Import_conversions=\u8aad\u307f\u8fbc\u307f\u6642\u5909\u63db
+Run_filter_on_title_keeping_the_case_of_selected_words=\u9078\u629e\u3057\u305f\u5358\u8a9e\u306e\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u3092\u7dad\u6301\u3057\u305f\u307e\u307e\u3001title\u306b\u30d5\u30a3\u30eb\u30bf\u3092\u304b\u3051\u308b
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=IEEE_Xplore\u30b5\u30fc\u30d0\u30fc\u3067\u65ad\u7d9a\u7684\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u66ab\u304f\u3057\u3066\u518d\u5ea6\u8a66\u307f\u3066\u304f\u3060\u3055\u3044\u3002
+Please_enter_a_search_string=\u691c\u7d22\u6587\u5b57\u5217\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
+Please_open_or_start_a_new_database_before_searching=\u691c\u7d22\u524d\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u304f\u304b\u65b0\u898f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u59cb\u3057\u3066\u304f\u3060\u3055\u3044
+An_Error_occurred_while_fetching_from_ADS_(%0)\:=ADS\u304b\u3089\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f(%0)\:
+Error_while_fetching_from_ADS=ADS\u304b\u3089\u306e\u53d6\u5f97\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f
+Error_while_fetching_from_OAI2=OAI2\u304b\u3089\u306e\u53d6\u5f97\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f
+An_Error_occurred_while_parsing_abstract=abstract\u306e\u89e3\u6790\u6642\u306b\u30a8\u30e9\u30fc\u767a\u751f
+Unknown_DiVA_entry\:_'%0'.=\u672a\u77e5\u306eDiVA\u9805\u76ee\:\u300c%0\u300d
+Get_BibTeX_entry_from_DiVA=DiVA\u304b\u3089BibTeX\u9805\u76ee\u3092\u53d6\u5f97
+Log=\u30ed\u30b0
+Remove_unneccessary_$,_{,_and_}=\u4e0d\u8981\u306a$/{/}\u3092\u6d88\u53bb\u3057\u3066\u304f\u3060\u3055\u3044
+
+ISO_690=ISO_690
+Format_units_by_adding_non-breaking_separators_and_keeping_the_correct_case_on_search=\u975e\u6539\u884c\u533a\u5207\u308a\u3092\u4ed8\u3057\u3066\u691c\u7d22\u3067\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u304c\u6b63\u3057\u304f\u306a\u308b\u3088\u3046\u5358\u4f4d\u3092\u6574\u5f62
+Use_Emacs_key_bindings=Emacs\u30ad\u30fc\u5272\u308a\u5f53\u3066\u3092\u4f7f\u7528
+Merge_entries=\u9805\u76ee\u3092\u7d71\u5408
+Show_URL_first=URL\u3092\u6700\u521d\u306b\u8868\u793a
+Show_DOI_first=DOI\u3092\u6700\u521d\u306b\u8868\u793a
+Remove_unneccessary_$,_{,_and_}_and_move_adjacent_numbers_into_equations=\u4e0d\u8981\u306a$\u30fb{\u30fb}\u3092\u524a\u9664\u3057\u3066\u6570\u5f0f\u306b\u96a3\u63a5\u3059\u308b\u756a\u53f7\u3092\u5165\u308c\u308b
+
+Add_brackets_and_replace_separators_with_their_non-breaking_version_for_units=\u6ce2\u62ec\u5f27\u3092\u8ffd\u52a0\u3057\u3001\u533a\u5207\u308a\u6587\u5b57\u3092\u5358\u4f4d\u306e\u975e\u6539\u884c\u7248\u3067\u7f6e\u304d\u63db\u3048\u308b
+First_entry=\u7b2c\u4e00\u9805\u76ee
+Use_1st=1st\u3092\u4f7f\u3046
+None=\u306a\u3057
+Use_2nd=2nd\u3092\u4f7f\u3046
+Second_entry=\u7b2c\u4e8c\u9805\u76ee
+You_have_to_choose_exactly_two_entries_to_merge.=\u7d71\u5408\u3059\u308b\u9805\u76ee\u30922\u3064\u9078\u3070\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002
+Merged_entry=\u9805\u76ee\u3092\u7d71\u5408\u3057\u307e\u3057\u305f
+Error_in_entry=\u9805\u76ee\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308a\u307e\u3059
+Add_new_entry_and_keep_both_old_entries=\u53e4\u3044\u9805\u76ee\u3092\u7dad\u6301\u3057\u305f\u307e\u307e\u65b0\u898f\u9805\u76ee\u3092\u8ffd\u52a0
+Replace_old_entries_with_new_entry=\u53e4\u3044\u9805\u76ee\u3092\u65b0\u898f\u9805\u76ee\u3067\u7f6e\u304d\u63db\u3048\u308b
+Cancelled_merging_entries=\u9805\u76ee\u306e\u7d71\u5408\u3092\u53d6\u308a\u6d88\u3057\u307e\u3057\u305f
+Merged_entries_into_a_new_and_kept_the_old=\u7d71\u5408\u9805\u76ee\u3092\u65b0\u898f\u306b\u8ffd\u52a0\u3057\u65e7\u9805\u76ee\u3092\u6b8b\u3057\u307e\u3057\u305f
+Merged_entries_into_a_new_and_removed_the_old=\u7d71\u5408\u9805\u76ee\u3092\u65b0\u898f\u306b\u8ffd\u52a0\u3057\u3001\u65e7\u9805\u76ee\u3092\u524a\u9664\u3057\u307e\u3057\u305f
+Parse=\u89e3\u6790
+Result=\u7d50\u679c
diff --git a/src/resource/JabRef_nl.properties b/src/resource/JabRef_nl.properties
index 67ebacc..95c3100 100644
--- a/src/resource/JabRef_nl.properties
+++ b/src/resource/JabRef_nl.properties
@@ -1,2436 +1,2436 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-
-%0_contains_the_Regular_Expression_<b>%1</b>=%0_bevat_de_regular_expression_<b>%1</b>
-
-%0_contains_the_term_<b>%1</b>=%0_bevat_de_term_<b>%1</b>
-
-%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_bevat_de_regular_expression_<b>%1</b>_niet
-
-%0_doesn't_contain_the_term_<b>%1</b>=%0_bevat_de_term_<b>%1</b>_niet
-
-%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_komt_niet_overeen_met_de_regular_expression_<b>%1</b>
-
-%0_doesn't_match_the_term_<b>%1</b>=%0_komt_niet_overeen_met_de_term_<b>%1</b>
-%0_export_successful=
-
-%0_field_set=%0-veld_ingesteld
-
-%0_matches_the_Regular_Expression_<b>%1</b>=%0_komt_overeen_met_de_regular_expression_<b>%1</b>
-
-%0_matches_the_term_<b>%1</b>=%0_komt_overeen_met_de_term_<b>%1</b>
-
-<field_name>=<veldnaam>
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=
-
-<no_field>=<geen_veld>
-
-<select>=<selecteer>
-
-<select_word>=<selecteer_woord>
-A_string_with_this_label_already_exists=
-Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Kort_tijdschriftennamen_met_de_geselecteerde_entries_af_(ISO_afkorting)
-Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Kort_tijdschriftennamen_met_de_geselecteerde_entries_af_(MEDLINE_afkorting)
-
-Abbreviate_names=Namen_afkorten
-Abbreviated_%0_journal_names.=
-
-Abbreviation=Afkorting
-
-About_JabRef=Over_JabRef
-
-Abstract=Abstract
-
-Accept=Aanvaarden
-
-Accept_change=Veranderingen_aanvaarden
-
-Action=Actie
-
-Add=Toevoegen
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Voeg_een_(gecompileerde)_externe_ImportFormat_klasse_van_een_class_path_toe._\nHet_pad_moet_niet_in_het_classpath_van_JabRef_staan.
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Voeg_een_(gecompileerde)_externe_ImportFormat_klasse_van_een_Zip-archief_toe._\nHet_pad_moet_niet_in_het_classpath_van_JabRef_staan.
-
-add_entries_to_group=voeg_entries_toe_aan_groep
-
-Add_entry_selection_to_this_group=Voeg_entry_selectie_toe_aan_deze_groep
-
-Add_from_folder=Voeg_toe_uit_map
-
-Add_from_jar=_Voeg_toe_uit_jar
-
-add_group=groep_toevoegen
-
-Add_Group=Groep_toevoegen
-
-Add_new=Voeg_nieuw_toe
-
-Add_Subgroup=Voeg_subgroep_toe
-
-Add_to_group=Voeg_toe_aan_groep
-
-Added_group_"%0".=Toegevoegde_groep_"%0".
-
-Added_new=Nieuwe_toegevoegd
-
-Added_string=Toegevoegde_constante
-
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Bijkomstig,_entries_waarvan_het_<b>%0</b>_veld_niet_<b>%1</b>_bevatten_ [...]
-
-Advanced=Geavanceerd
-All_custom_file_types_will_be_lost._Proceed?=
-
-All_Entries=Alle_Entries
-
-All_entries=Alle_entries
-All_entries_of_this_type_will_be_declared_typeless._Continue?=
-
-All_fields=Alle_velden
-
-All_subgroups_(recursively)=Alle_subgroepen_(recursief)
-
-Allow_editing_in_table_cells=Sta_aanpassingen_in_tabel_cellen_toe
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=
-An_Exception_ocurred_while_accessing_'%0'=
-An_SAXException_ocurred_while_parsing_'%0'\:=
-
-and=en
-and_inside_the_JabRef-jar\:=
-
-and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=en_de_klasse_moet_beschikbaar_zijn_in_uw_classpath_de_volgende_keer_wanneer_u_JabRef_opstart
-
-any_field_that_matches_the_regular_expression_<b>%0</b>=elk_veld_dat_overeenkomt_met_de_regular_expression_<b>%0</b>
-
-Appearance=Uiterlijk
-
-Append=Bijvoegen
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Voeg_de_inhoud_van_een_BibTeX_database_in_de_huidige_weergegeven_database_toe
-
-Append_database=Database_invoegen
-
-append_the_selected_text_to_bibtex_key=voeg_de_geselecteerde_tekst_toe_aan_BibTeX-sleutel
-Application=
-
-Apply=Toepassen
-
-Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argumenten_doorgegeven_aan_de_draaiende_JabRef_instantie._Wordt_nu_afgesloten.
-
-Assign_entry_selection_exclusively_to_this_group=Ken_entry_selectie_exclusief_aan_deze_groep_toe
-
-Assign_new_file=Ken_nieuw_bestand_toe
-
-Assign_the_original_group's_entries_to_this_group?=De_entries_van_de_originele_groep_aan_deze_groep_toekennen?
-
-Assigned_%0_entries_to_group_"%1".=%0_entries_aan_groep_"%1"_toegekend
-
-Assigned_1_entry_to_group_"%0".=1_entry_aan_groep_"%0"_toegekend
-At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=
-
-Attach_%0_file=Voeg_%0_bestand_bij
-
-Attach_URL=URL_bijvoegen
-
-Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Poging_om_%0_snelkoppelingen_voor_jouw_entries_automatisch_in_te_stellen._Automatisch_instellen_werkt_als_een_%0_bestand_in_jouw_%0_map_of_een_submap<BR>een_identieke_naam_heeft_als_een_BibTeX-sleutel_van_een_entry,_plus_extensie.
-Attempting_SQL_export...=
-
-Auto=Auto
-
-Autodetect_format=Formaat_automatisch_detecteren
-
-Autogenerate_BibTeX_key=BibTeX-sleutel_automatisch_genereren
-Autogenerate_BibTeX_keys=BibTeX-sleutels_automatisch_genereren
-
-Autogenerate_groups=Groepen_automatisch_genereren
-
-autogenerate_keys=BibTeX-sleutels_automatisch_genereren
-
-
-Autolink_files_with_names_starting_with_the_BibTeX_key=
-Autolink_only_files_that_match_the_BibTeX_key=
-
-Automatically_create_groups=Groepen_automatisch_aanmaken
-
-Automatically_create_groups_for_database.=Automatisch_groepen_voor_database_aanmaken
-
-Automatically_created_groups=Automatisch_aangemaakte_groepen
-
-Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Verberg_automatisch_het_groepenvenster_bij_overgang_naar_een_database_die_geen_groepen_bevat
-
-Automatically_remove_exact_duplicates=
-
-Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Toon_automatisch_het_groepenvenster_bij_overgang_naar_een_database_die_groepen_bevat
-
-Autoset=Automatisch_instellen
-
-Autoset_%0_field=Automatisch_het_%0_veld_instellen
-
-Autoset_%0_links._Allow_overwriting_existing_links.=Automatisch_%0_snelkoppelingen_instellen._Overschrijven_van_bestaande_snelkoppelingen_toestaan.
-
-Autoset_%0_links._Do_not_overwrite_existing_links.=Automatisch_%0_snelkoppelingen_instellen._Overschrijven_van_bestaande_snelkoppelingen_niet_toestaan.
-Autoset_external_links=
-Autosetting_links=
-
-AUX_file_import=AUX_bestand_importeren
-
-Available_export_formats=Beschikbare_exporteer_formaten
-
-Available_fields=Beschikbare_velden
-
-Available_import_formats=Beschikbare_importeer_formaten
-
-Background_color_for_optional_fields=Achtergrondkleur_voor_optionele_velden
-
-Background_color_for_required_fields=Achtergrondkleur_voor_vereiste_velden
-
-Backup_old_file_when_saving=Maak_reservekopie_van_oud_bestand_bij_het_opslaan
-Beta_version=
-
-Bibkey_to_filename_conversion=BibTeX-sleutel_naar_bestandsnaam_conversie
-
-BibTeX_key=BibTeX-sleutel
-
-BibTeX_key_is_unique.=BibTeX-sleutel_is_uniek
-
-BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX-sleutel_is_niet_ingesteld._Geef_een_naam_voor_het_gedownloade_bestand
-
-BibTeX_source=BibTeX-broncode
-
-BibTeXML=BibTeXML
-
-Binding=Binding
-Broken_link=
-
-Browse=Bladeren
-
-by=door
-
-Calling_external_viewer...=Externe_viewer_opgeroepen...
-
-Cancel=Annuleren
-
-Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Kan_entries_niet_aan_de_groep_toevoegen_zonder_sleutels_te_genereren._Sleutels_nu_genereren?
-
-Cannot_merge_this_change=Kan_deze_verandering_niet_samenvoegen
-
-Cannot_move_group_"%0"_down.=Kan_groep_"%0"_niet_naar_beneden_verplaatsen
-
-Cannot_move_group_"%0"_left.=Kan_groep_"%0"_niet_naar_links_verplaatsen
-
-Cannot_move_group_"%0"_right.=Kan_groep_"%0"_niet_naar_rechts_verplaatsen
-
-Cannot_move_group_"%0"_up.=Kan_groep_"%0"_niet_naar_boven_verplaatsen
-
-case_insensitive=hoofdletter_ongevoelig
-
-case_sensitive=hoofdletter_gevoelig
-
-Case_sensitive=Hoofdletter_gevoelig
-
-change_assignment_of_entries=verandering_toekenning_van_entries
-
-# The following are for case change in right-click menu in entry editor. The last four
-# illustrate the four variations of capitalization
-Change_case=Verander_geval
-
-Change_entry_type=Wijzig_entry_type
-
-Change_file_type=
-
-change_key=wijzig_sleutel
-
-Change_of_Grouping_Method=Wijzig_groepering_methode
-
-change_preamble=wijzig_inleiding
-
-change_string_content=wijzig_constante_inhoud
-
-change_string_name=wijzig_constante_naam
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=
-
-change_type=wijzig_type
-
-changed_=gewijzigd_
-
-Changed_font_settings=Gewijzigde_lettertypeinstellingen
-
-Changed_language_settings=Gewijzigde_taal_instellingen
-
-Changed_look_and_feel_settings=Gewijzigde_"Look_and_Feel"-instellingen
-
-Changed_preamble=Gewijzigde_inleiding
-
-Changed_type_to=Type_gewijzigd_naar
-
-Characters_to_ignore=Tekens_die_genegeerd_worden
-
-Check_existing_%0_links=Controleer_bestaande_%0_snelkoppelingen
-
-Check_links=Controleer_snelkoppelingen
-
-Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Kies_de_URL_om_te_downloaden._De_standaard_waarde_wijst_naar_een_lijst_voorzien_door_de_JabRef_ontwikkelaars.
-Cite_command=
-
-Class_name=Klassenaam
-
-Clear=Wissen
-
-clear_all_groups=Wis_alle_groepen
-
-Clear_field=Wis_velden
-
-Clear_fields=Velden_wissen
-
-Clear_highlight=Wis_selectie
-
-Close=Sluiten
-
-Close_dialog=Sluit_dialoog
-
-Close_the_current_database=Sluit_de_huidige_database
-
-Close_the_help_window=Sluit_het_help_venster
-
-Close_window=Sluit_venster
-
-Closed_database=Sluit_database
-
-Collapse_subtree=Subboom_in_mekaar_klappen
-
-Color_codes_for_required_and_optional_fields=Kleurcodes_voor_vereiste_en_optionele_velden
-
-Color_for_marking_incomplete_entries=Kleur_om_onvolledige_entries_te_markeren
-
-Column_width=Kolombreedte
-
-Command_line_id=Commandoregel_id
-
-Complete_record=Vervolledig_record
-
-Connect=
-Connect_to_SQL_database=
-Connect_to_SQL_Database=
-Connection_to_IEEEXplore_failed=
-
-Contained_in=bevat_in
-
-Content=Inhoud
-
-Copied=Gekopieerd
-
-Copied_cell_contents=Gekopieerde_cel_inhoud
-
-Copied_key=Gekopieerde_BibTeX-sleutel
-
-Copied_keys=Gekopieerde_BibTeX-sleutels
-
-Copy=Kopi\u00ebren
-
-Copy_BibTeX_key=Kopieer_BibTeX-sleutel
-Copy_file_to_file_directory.=
-Copy_files_to_file_directory.=
-
-Copy_to_clipboard=
-
-Could_not_call_executable=Kon_executable_niet_oproepen
-
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Kon_geen_verbinding_maken_met_een_draaiend_gnuserv_proces._Zorg_ervoor_dat_Emacs_of_XEmacs_draait,<BR>en_dat_de_server_gestart_is_(door_het_commando_'gnuserv-start'_te_draaien).
-
-# I have reformulated the following lines, because the 1st person form is not suitable:
-Could_not_connect_to_host_=Kon_geen_verbinding_maken_met_de_host
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=
-
-Could_not_export_file=Kon_bestand_niet_exporteren
-
-Could_not_export_preferences=Kon_instellingen_niet_exporteren
-
-Could_not_find_a_suitable_import_format.=Kon_geen_geschikt_importeer_formaat_vinden.
-Could_not_find_directory_for_%0-files\:_%1=
-Could_not_find_image_file=Kan_fotobestand_niet_vinden
-
-Could_not_find_layout_file=Kon_layout_bestand_niet_vinden
-
-Could_not_import_preferences=Kon_instellingen_niet_importeren
-
-Could_not_instantiate_%0=Kon_geen_instantie_van_%0_aanmaken
-Could_not_instantiate_%0_%1=Kon_geen_instantie_van_%0_%1_aanmaken
-
-Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Kon_geen_instantie_van_%0_aanmaken._Heeft_u_het_correcte_pakket_pad_gekozen?
-
-Could_not_open_link=
-
-Could_not_parse_number_of_hits=Kon_het_aantal_hits_niet_ontleden
-Could_not_print_preview=
-Could_not_run_the_'vim'_program.=
-
-Could_not_save_file=Kon_het_bestand_niet_opslaan
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=
-
-Create_group=Groep_aanmaken
-
-Created_groups.=Groepen_aangemaakt.
-
-crossreferenced_entries_included=inclusief_kruisgerefereerde_entries
-
-Current_content=Huidige_inhoud
-
-Current_value=Huidige_waarde
-
-Custom_entry_types=Externe_entry_types
-
-Custom_entry_types_found_in_file=Externe_entry_types_gevonden_in_bestand
-Custom_icon_theme=Extern_icoonthema
-Custom_icon_theme_file=Extern_icoonthema_bestaan
-
-Custom_importers=Externe_importfilter
-
-Customize_entry_types=Entry_types_aanpassen
-
-Customize_key_bindings=Toetsentoekenningen_aanpassen
-
-Cut=Knippen
-
-cut_entries=entries_knippen
-
-cut_entry=entry_knippen
-
-Cut_pr=Knippen_pr
-Database_\:=
-
-Database_encoding=Database_encodering
-
-Database_has_changed._Do_you_want_to_save_before_closing?=De_database_is_gewijzigd._Wilt_u_opslaan_alvorens_af_te_sluiten?
-
-Database_properties=Database_eigenschappen
-
-Date_format=Datum_formaat
-
-Default=Standaard
-
-Default_encoding=Standaard_encodering
-
-Default_grouping_field=Standaard_groeperingsveld
-
-Default_look_and_feel=Standaard_"look_and_feel"
-
-Default_pattern=Standaard_patroon
-
-Default_sort_criteria=Standaard_sorteercriteria
-Define_'%0'=
-
-Delete=Verwijderen
-
-Delete_custom_format=Verwijder_aangepast_formaat
-
-# I have reformulated the following lines, because the 1st person form is not suitable:
-# (Folgende_URL_konnte_nicht_analysiert_werden)
-delete_entries=verwijder_entries
-
-Delete_entry=Verwijder_entry
-
-delete_entry=verwijder_entry
-
-Delete_multiple_entries=Verwijder_meerdere_entries
-
-Delete_rows=Verwijder_rijen
-
-Delete_strings=Verwijder_constanten
-
-Deleted=Verwijderd
-
-Delimit_fields_with_semicolon,_ex.=Scheid_velden_met_puntkomma,_bv.
-
-Descending=Afdalend
-
-Description=Beschrijving
-
-Deselect_all=Alle_selecties_ongedaan_maken
-Deselect_all_duplicates=
-
-Details=Details
-
-Disable_entry_editor_when_multiple_entries_are_selected=Maak_entry_editor_onbeschikbaar_wanneer_meerdere_entries_geselecteerd_zijn
-
-Disable_this_confirmation_dialog=Maak_deze_bevestigingsdialoog_onbeschikbaar
-
-Disable_this_warning_dialog=Maak_deze_waarschuwingsdialoog_onbeschikbaar
-
-Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Toon_alle_entries_die_bij_een_of_meerdere_van_de_geselecteerde_groepen_behoren.
-
-Display_all_error_messages=Toon_alle_foutmeldingen
-
-Display_help_on_command_line_options=Toon_help_over_commandline_opties
-
-Display_imported_entries_in_an_inspection_window_before_they_are_added.=Toon_ge\u00efmporteerde_entries_in_een_onderzoeksvenster_voordat_ze_toegevoegd_worden
-
-Display_only_entries_belonging_to_all_selected_groups.=Toon_alleen_entries_die_tot_alle_geselecteerde_groepen_behoren.
-
-Display_version=Display_versie
-
-Displaying_no_groups=Geen_groepen_tonend
-
-Do_not_abbreviate_names=Namen_niet_afkorten
-
-Do_not_autoset=Niet_automatisch_instellen
-
-Do_not_import_entry=Entry_niet_importeren
-
-Do_not_open_any_files_at_startup=Geen_bestanden_openen_bij_het_opstarten
-
-Do_not_overwrite_existing_keys=Bestaande_BibTeX-sleutels_niet_overschrijven
-Do_not_show_splash_window_at_startup=
-Do_not_show_these_options_in_the_future=
-
-Do_not_wrap_the_following_fields_when_saving=De_volgende_velden_niet_bij_het_opslaan_afbreken
-Do_not_write_the_following_fields_to_XMP_Metadata\:=
-
-Do_you_want_JabRef_to_do_the_following_operations?=
-
-DocBook=DocBook
-
-Down=Omlaag
-
-Download=Download
-
-Download_completed=Download_voltooid
-
-Download_file=Download_bestand
-
-Downloading...=Downloading...
-Drag_and_Drop_Error=
-Drop_%0=
-
-duplicate_BibTeX_key=dubbele_BibTeX-sleutel
-
-Duplicate_BibTeX_key.=Dubbele_BibTeX-sleutel.
-
-Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Dubbele_BibTeX-sleutel._Groepering_kan_misschien_niet_werken_voor_deze_entry.
-
-Duplicate_Key_Warning=Waarschuwing:_dubbele_BibTeX-sleutel
-
-Duplicate_pairs_found=Dubbele_paren_gevonden
-
-duplicate_removal=dubbels_verwijderen
-
-Duplicate_string_name=Dubbele_constante_naam
-
-Duplicates_found=Dubbels_gevonden
-
-Duplicates_removed=Dubbels_verwijderd
-
-Dynamic_groups=Dynamische_groepen
-
-Dynamically_group_entries_by_a_free-form_search_expression=Dynamisch_entries_groeperen_door_een_"free-form"_zoek_expressie
-
-Dynamically_group_entries_by_searching_a_field_for_a_keyword=Dynamisch_entries_groeperen_door_een_veld_te_zoeken_via_een_sleutelwoord
-
-Each_line_must_be_on_the_following_form=Elke_regel_moet_in_de_volgende_vorm_zijn
-
-Edit=Bewerken
-
-Edit_custom_export=Externe_exportfilter_bewerken
-Edit_entry=Entry_bewerken
-Edit_file_link=
-Edit_file_type=
-
-Edit_group=Groep_bewerken
-
-Edit_journal=Tijdschrift_bewerken
-
-Edit_preamble=Inleiding_bewerken
-Edit_strings=Constanten_bewerken
-Editor_options=
-
-empty_BibTeX_key=lege_BibTeX-sleutel
-
-Empty_BibTeX_key.=Lege_BibTeX-sleutel.
-
-Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Lege_BibTeX-sleutel._Groepering_kan_misschien_niet_werken_voor_deze_entry.
-
-empty_database=lege_database
-
-Enable_source_editing=Broncode_aanpassing_mogelijk_maken
-Enable_word/name_autocompletion=
-
-Endnote=Endnote
-
-Enter_URL=URL_ingeven
-
-Enter_URL_to_download=Geef_URL_om_te_downloaden_in
-
-entries=entries
-
-Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Entries_kunnen_niet_manueel_toegekend_of_verwijderd_worden_van_deze_groep.
-
-Entries_exported_to_clipboard=Entries_ge\u00ebxporteerd_naar_het_klembord
-
-entries_have_undefined_BibTeX_key=entries_hebben_een_ongedefinieerde_BibTeX-sleutel
-
-entries_into_new_database=entries_in_nieuwe_database
-
-entry=entry
-
-Entry_editor=Entry_editor
-
-Entry_in_current_database=Entry_in_huidige_database
-
-Entry_in_import=Entry_in_importering
-
-Entry_preview=Entry_voorbeeld
-
-Entry_table=Entry_tabel
-
-Entry_table_columns=Entry_tabelkolommen
-
-Entry_type=Entry_type
-
-Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Entry_typenamen_mogen_geen_witruimtes_of_de_volgende_tekens_bevatten
-
-Entry_types=Entrytypes
-
-Error=Foutmelding
-
-Error\:_=
-Error_converting_Bibtex_to_XMP\:_%0=
-Error_converting_XMP_to_'%0'...=
-Error_exporting_to_clipboard=
-
-##Error:_check_your_External_viewer_settings_in_Preferences=Foutmelding:_controleer_uw_Externe_viewer_instellingen_in_Instellingen
-Error_in_field=Fout_in_veld
-Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=
-Error_occured_when_parsing_entry=Foutmelding_bij_het_ontleden_van_de_entry
-
-Error_opening_file=Foutmelding_bij_het_openen_van_het_bestand
-
-Error_setting_field=Foutmelding_bij_het_instellen_van_het_veld
-Error_while_converting_BibtexEntry_to_XMP_%0=
-Error_while_downloading_file\:=
-Error_while_fetching_from_OIA2=
-Error_while_writing=Foutmelding_bij_het_schrijven
-
-Error_writing_to_%0_file(s).=
-Error_writing_XMP_to_file\:_%0=
-
-Establishing_SQL_connection...=
-
-Exceptions=Uitzonderingen
-
-Existing_file=Bestaande_bestand
-
-exists._Overwrite_file?=bestaat_reeds._Bestand_overschrijven?
-exists._Overwrite?=bestaat._Overschrijven?
-
-Expand_subtree=Subboom_uitklappen
-
-Export=Exporteren
-
-Export_name=Naam_exporteren
-
-Export_preferences=Instellingen_exporteren
-
-Export_preferences_to_file=Instellingen_exporteren_naar_bestand
-
-Export_properties=Eigenschappen_exporteren
-
-Export_to_clipboard=Exporteer_naar_klembord
-Export_to_SQL_database=
-
-Exporting=Exporteren...
-Extension=
-
-External_changes=Externe_wijzigingen
-
-External_file_links=
-
-External_files=Externe_bestanden
-
-External_programs=Externe_programma's
-
-External_viewer_called=Externe_viewer_opgeroepen
-
-Failed_to_read_groups_data_(unsupported_version\:_%0)=Lezen_van_groepen_data_mislukt_(niet_ondersteunde_versie:_%0)
-
-Fetch=Ophalen
-
-Field=Veld
-
-field=veld
-
-# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
-Field_content=Veld_inhoud
-
-Field_name=Veldnaam
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=
-
-Field_sizes=Veld_groottes
-
-Field_to_filter=
-
-Field_to_group_by=Veld_te_groeperen_op
-
-Fields=Velden
-
-File=Bestand
-
-file=vestand
-
-File_'%0'_is_already_open.=
-
-File_'%0'_not_found=Bestand_'%0'_niet_gevonden
-
-File_changed=Bestand_veranderd
-File_directory_is_'%0'\:=
-
-File_directory_is_not_set_or_does_not_exist!=
-File_download=
-File_exists=Bestand_bestaat
-
-File_extension=Bestandsextensie
-
-File_has_been_updated_externally._What_do_you_want_to_do?=
-
-File_not_found=Bestand_niet_gevonden
-File_type=
-
-File_updated_externally=Bestand_extern_geupdate
-
-filename=bestandsnaam
-
-Files_opened=Bestanden_geopend
-
-Filter=Filter
-
-
-Finished_autosetting_external_links.=
-
-Finished_synchronizing_%0_links._Entries_changed%c_%1.=Synchroniseren_van_%0_snelkoppelingen_voltooid._Aantal_veranderde_entries%c_%1.
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=XPM_schrijven_voor_%0_bestand_voltooid_(%1_overgeslagen,_%2_fouten).
-
-First_select_the_entries_you_want_keys_to_be_generated_for.=Selecteer_eerst_de_entries_waarvoor_u_sleutels_wilt_genereren.
-
-Fit_table_horizontally_on_screen=Pas_tabel_horizontaal_aan_op_het_scherm
-
-Float=Float
-
-Float_marked_entries=Gemarkeerde_entries_bovenaan_tonen
-
-Font_Family=Lettertype_Type
-
-Font_Preview=Lettertype_Voorbeeld
-
-Font_Size=Lettertype_Grootte
-
-Font_Style=Lettertype_Stijl
-
-FontSelector=Lettertype_selecteren
-
-for=voor
-
-Format_of_author_and_editor_names=Formaat_van_de_auteur-_en_editornamen
-Format_String=
-
-Format_used=Formaat_gebruikt
-Formatter_Name=
-
-Formatter_not_found=Formateerder_niet_gevonden
-
-found=gevonden
-Found_%0_plugin(s)=
-
-found_in_aux_file=gevonden_in_aux_bestand
-
-Full_name=Volledige_naam
-
-General=Algemeen
-
-General_fields=Algemene_velden
-
-Generate=Genereren
-
-Generate_BibTeX_key=Genereer_BibTeX-sleutel
-
-Generate_keys=Genereer_sleutels
-
-Generate_keys_before_saving_(for_entries_without_a_key)=Genereer_sleutels_voor_het_opslaan_(voor_entries_zonder_een_sleutel)
-
-Generate_keys_for_imported_entries=
-
-Generate_now=Genereer_nu
-
-Generated_BibTeX_key_for=Gegenereerde_BibTeX-sleutel_voor
-
-Generating_BibTeX_key_for=BibTeX-sleutel_aan_het_genereren_voor
-
-Grab=Neem
-
-Gray_out_entries_not_in_group_selection=Maak_entries_die_niet_in_de_groep_selectie_zitten_grijs
-
-Gray_out_non-hits=Maak_niet_gevonden_items_grijs
-
-Gray_out_non-matching_entries=Maak_entries_die_niet_overeenkomen_grijs
-
-Group_properties=Groepeigenschappen
-
-grouping_may_not_work_for_this_entry=groepering_werkt_misschien_niet_voor_deze_entry
-
-Groups=Groepen
-
-Harvard_RTF=Harvard_RTF
-
-Have_you_chosen_the_correct_package_path?=Heeft_u_het_correcte_pakket_pad_gekozen?
-
-Help=Help
-
-Help_contents=Help_inhoud
-
-Help_on_groups=Help_over_groepen
-
-Help_on_key_patterns=Help_over_sleutelpatronen
-Help_on_Preview_Settings=Help_over_Voorbeeld_Instellingen
-Help_on_Regular_Expression_Search=Help_over_Regular_Expression_Zoekopdracht
-
-Hide_non-hits=Verberg_niet_gevonden_objecten
-
-Hide_non-matching_entries=Verberg_entries_die_niet_overeenkomen
-
-Hierarchical_context=Hi\u00ebrarchische_context
-
-Highlight=Markeren
-Highlight_groups_matching_all_selected_entries=Markeer_groepen_die_overeenkomen_met_alle_geselecteerde_entries
-Highlight_groups_matching_any_selected_entry=Markeer_groepen_die_overeenkomen_met_elke_geselecteerde_entry
-
-Highlight_overlapping_groups=Markeer_overlappende_groepen
-
-Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Hint%c_Om_specifieke_velden_alleen_te_zoeken,_geef_bijvoorbeeld_in%c<p><tt>auteur%esmith_en_titel%eelectrical</tt>
-
-HTML=HTML
-
-HTML_table=HTML_tabel
-
-HTML_table_(with_Abstract_&_BibTeX)=HTML_tabel_(met_Abstract_&_BibTeX)
-Icon=
-
-Ignore=Negeren
-
-Immediate_subgroups=Directe_subgroepen
-
-Import=Importeren
-
-Import_and_keep_old_entry=Importeren_en_oude_entry_behouden
-
-Import_and_remove_old_entry=Importeren_en_oude_entry_verwijderen
-
-Import_entries=Importeer_entries
-
-Import_failed=Importering_mislukt
-
-Import_file=Importeer_bestand
-
-Import_group_definitions=Importeer_groep_definities
-
-Import_name=Importeer_naam
-
-Import_preferences=Instellingen_importeren
-
-Import_preferences_from_file=Importeer_instellingen_van_bestand
-
-Import_strings=Importeer_constanten
-
-Import_to_open_tab=Importeer_naar_open_tabblad
-
-Import_word_selector_definitions=Importeer_woordselecteerder_definities
-
-Imported_database=Ge\u00efmporteerde_database
-
-Imported_entries=Ge\u00efmporteerde_entries
-
-Imported_from_database=Ge\u00efmporteerd_van_database
-
-ImportFormat_class=ImportFormat_Klasse
-
-Importing=Aan_het_importeren
-
-Importing_in_unknown_format=Aan_het_Importeren_in_onbekend_formaat
-
-In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=In_JabRef,_gebruik_paren_van_#_tekens_om_een_constante_aan_te_duiden.
-
-Include_abstracts=Abstracts_insluiten
-Include_entries=Entries_insluiten
-
-Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Subgroepen_insluiten\:_Wanneer_geselecteerd,_toon_entries_in_deze_groep_of_in_zijn_subgroepen
-
-Incremental=Incrementeel
-
-Incremental_search=Incrementeel_zoeken
-
-Incremental_search_failed._Repeat_to_search_from_top.=Incrementeel_zoeken_mislukt._Herhaal_om_te_zoeken_vanaf_het_begin.
-
-Independent_group\:_When_selected,_view_only_this_group's_entries=Onafhankelijke_groep\:_Wanneer_geselecteerd,_toon_enkel_de_entries_van_deze_groep
-
-Initially_show_groups_tree_expanded=Initieel,_toon_alle_bomen_van_de_groepen_uitgeklapt
-
-Input=Invoer
-
-Input_error=Invoer_foutmelding
-
-Insert=Invoegen
-
-Insert_rows=Rijen_invoegen
-
-Insert_selected_citations_into_LyX/Kile=Voeg_geselecteerde_citaten_in_LyX/Kile
-
-Insert_selected_citations_into_WinEdt=Voeg_geselecteerde_citaten_in_WinEdt
-
-insert_string_=voeg_constante_in_
-
-Insert_URL=voeg_URL_in
-
-integrity=integriteit
-
-# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
-Integrity_check=Integriteitscontrole
-
-Intersection=Doorsnede
-
-Invalid_BibTeX_key=Ongeldige_BibTeX-sleutel
-
-Invalid_date_format=Ongeldig_datumformaat
-
-Invalid_URL=Ongeldige_URL
-
-Inverted=Ge\u00efnverteerd
-
-is_a_standard_type.=is_een_standaard_type.
-
-ISO_abbreviation=ISO_afkorting
-
-Item_list_for_field=Item_lijst_voor_veld
-jabref=
-
-JabRef_help=JabRef_Help
-
-JabRef_preferences=JabRef_instellingen
-
-Journal_abbreviations=Tijdschrift_afkortingen
-
-Journal_list_preview=Tijdschriftenlijst_voorbeeld
-
-Journal_name=Tijdschrift_naam
-
-Keep=Behouden
-
-Keep_both=Beide_behouden
-
-Keep_lower=Onderste_behouden
-
-Keep_upper=Bovenste_behouden
-
-Key_bindings=Sleutel_koppelingen
-
-Key_bindings_changed=Sleutel_koppelingen_gewijzigd
-
-Key_generator_settings=Sleutelgenerator_instellingen
-
-Key_pattern=Sleutelpatroon
-
-keys_in_database=sleutels_in_database
-
-Keyword=Sleutelwoord
-
-Label=Label
-
-Language=Taal
-
-Last_modified=Laatst_gewijzigd
-
-LaTeX_AUX_file=LaTeX_AUX-bestand
-Leave_file_in_its_current_directory.=
-Leave_files_in_their_current_directory.=
-
-Left=Links
-
-License=Licentie
-
-Limit_to_fields=De_volgende_velden_begrenzen
-
-Limit_to_selected_entries=De_volgende_geselecteerde_entries_begrenzen
-
-Link=
-Link_local_file=
-Link_to_file_%0=
-
-Listen_for_remote_operation_on_port=Luister_naar_operatie_vanop_afstand_op_poort
-Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=
-
-Load_session=Sessie_laden
-
-Loading_session...=Sessie_aan_het_laden...
-localhost=
-
-Look_and_feel="Look_and_feel"
-Looking_for_pdf...=
-lower=
-
-Main_file_directory=
-
-Main_layout_file=Hoofd_layoutbestand
-
-Main_PDF_directory=Hoofd_PDF-map
-
-Main_PS_directory=Hoofd_PS-map
-
-Manage=Beheren
-
-Manage_custom_exports=Beheer_externe_exportfilters
-
-Manage_custom_imports=Beheer_externe_importfilters
-Manage_external_file_types=
-
-Manage_journal_abbreviations=Beheer_tijdschrift_afkortingen
-
-Mark_entries=Markeer_entries
-
-Mark_entry=Markeer_entry
-
-Mark_new_entries_with_addition_date=Markeer_nieuwe_entries_met_datum_van_toevoeging
-
-Mark_new_entries_with_owner_name=Markeer_nieuwe_entries_met_naam_van_eigenaar
-
-# These are status line messages when marking/unmarking entries:
-Marked_selected=Markering_geselecteerd
-
-Memory_Stick_Mode=
-
-Menu_and_label_font_size=Menu_en_label_lettertypegrootte
-
-Merged_external_changes=Voeg_externe_veranderingen_samen
-
-Messages=Berichten
-
-Messages_and_Hints=berichten_en_hints
-
-Modification_of_field=Wijziging_van_veld
-
-Modified_group_"%0".=Gewijzigde_groep_"%0".
-
-Modified_groups=Gewijzigde_groepen
-
-Modified_string=Gewijzigde_constante
-
-Modify=Wijzigen
-
-modify_group=wijzig_groep
-
-MODS=MODS
-
-Move=Verplaats
-
-Move_down=Verplaats_naar_beneden
-
-Move_entries_in_group_selection_to_the_top=Verplaats_entries_in_de_groep_selectie_naar_de_top
-Move_external_links_to_'file'_field=
-Move_files_to_file_directory.=
-
-move_group=verplaats_groep
-
-Move_string_down=Verplaats_constante_naar_beneden
-
-Move_string_up=Verplaats_constante_naar_boven
-
-Move_up=Verplaats_naar_boven
-
-Moved_group_"%0".=Verplaatste_Groep_"%0".
-MS_Office_2007=
-MySQL=
-MySQL_database=
-
-Name=Naam
-Name_formatter=
-
-Natbib_style=Natbib_stijl
-
-nested_aux_files=geneste_aux_bestanden
-
-New=Nieuw
-
-new=nieuw
-
-New_BibTeX_database=Nieuwe_BibTeX-database
-
-New_BibTeX_entry=Nieuwe_BibTeX-entry
-
-New_BibTeX_subdatabase=Nieuwe_BibTeX_subdatabase
-
-New_content=Nieuwe_inhoud
-
-New_database_created.=Nieuwe_database_aangemaakt.
-New_field_value=Nieuwe_veld_waarde
-
-New_file=Nieuw_bestand
-New_file_link_(INSERT)=
-
-New_group=Nieuwe_groep
-
-New_string=Nieuwe_constante
-
-Next_entry=Volgende_entry
-
-No_%0_found=Geen_%0_gevonden
-
-No_actual_changes_found.=Geen_actuele_veranderingen_gevonden.
-
-no_base-bibtex-file_specified=Geen_basis_BibTeX-bestand_gespecifieerd
-
-no_database_generated=Geen_database_gegenereerd
-
-No_duplicates_found=Geen_dubbels_gevonden
-
-No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Geen_entries_gevonden._Zorg_er_a.u.b._voor_dat_u_de_juiste_importfilter_gebruikt.
-
-No_entries_found_for_the_search_string_'%0'=
-
-No_entries_imported.=Geen_entries_ge\u00efmporteerd.
-
-No_entries_or_multiple_entries_selected.=Geen_entries_of_meerdere_entries_geselecteerd.
-
-No_entries_selected=Geen_entries_geselecteerd
-No_entries_selected.=Geen_entries_geselecteerd.
-
-No_exceptions_have_ocurred.=Geen_uitzonderingen_zijn_voorgekomen.
-No_files_found.=
-
-No_GUI._Only_process_command_line_options.=Geen_GUI._Alleen_proces_commandoregel_opties.
-
-No_journal_names_could_be_abbreviated.=Er_konden_geen_tijdschrift_namen_afgekort_worden.
-
-No_journal_names_could_be_unabbreviated.=Geen_afkortingen_van_tijdschrift_namen_konden_ongedaan_gemaakt_worden.
-
-No_PDF_linked=
-
-No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Geen_PDF_of_PS_gedefinieerd,_en_geen_BibTeX-sleutel_die_overeenkomt_met_een_bestand_gevonden
-No_plugins_were_found_in_the_following_folders\:=
-
-No_references_found=Geen_referenties_gevonden
-
-No_saved_session_found.=Geen_opgeslagen_sessie_gevonden.
-
-No_url_defined=Geen_URL_gedefinieerd
-No_XMP_metadata_found_in_=
-
-not=niet
-
-not_found=niet_gevonden
-
-Not_saved_(empty_session)=Niet_opgeslagen
-
-Note_that_the_entry_causing_the_problem_has_been_selected.=Merk_op_dat_de_entry_die_het_probleem_veroorzaakt_geselecteerd_werd.
-
-Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Merk_op_dat_u_de_volledig_gekwalificeerde_klassenaam_voor_de_"look_and_feel"_moet_specificeren,
-
-Nothing_to_redo=Niets_om_te_herstellen
-
-Nothing_to_undo=Niets_om_ongedaan_te_maken
-
-# The next is used like in "References found: 1  Number of references to fetch?"
-Number_of_references_to_fetch?=Aantal_referenties_om_op_te_halen?
-
-occurences=voorkomens
-
-OK=OK
-
-Ok=OK
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=
-
-One_or_more_keys_will_be_overwritten._Continue?=E\u00e9n_of_meerdere_sleutels_zullen_overschreven_worden._Verder_gaan?
-Only_one_item_is_supported=
-
-Open=Openen
-
-Open_BibTeX_database=Open_BibTeX-database
-
-Open_database=Open_database
-
-Open_editor_when_a_new_entry_is_created=Open_editor_wanneer_een_nieuwe_entry_aangemaakt_werd
-
-Open_file=Open_bestand
-
-Open_last_edited_databases_at_startup=Open_laatst_aangepaste_databases_bij_het_opstarten
-
-Open_PDF_or_PS=Open_PDF_of_PS
-
-Open_right-click_menu_with_Ctrl+left_button=Open_rechtsklik-menu_met_Ctrl_+_linkse_muisknop
-
-Open_URL_or_DOI=Open_URL_of_DOI
-OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
-
-Opened_database=Geopende_database
-
-Opening=Aan_het_openen
-
-Opening_preferences...=Instellingen_aan_het_openen
-OpenOffice_Calc=OpenOffice_Calc
-OpenOffice_CSV=
-Operation_canceled.\n=Operatie_geannuleerd.\n
-Operation_not_supported=
-
-Optional_fields=Optionele_velden
-
-Options=Opties
-
-or=of
-
-out_of=van
-
-Output=Uitvoer
-
-Output_or_export_file=Geef_uitvoer_of_exporteer_bestand
-
-Override=Wijzigen
-
-Override_default_file_directories=Wijzig_standaard_bestandsmappen
-
-Override_default_font_settings=Wijzig_standaard_lettertypeinstellingen
-
-override_the_bibtex_key_by_the_selected_text=wijzig_de_BibTeX-sleutel_door_de_geselecteerde_tekst
-Overwrite=
-Overwrite_existing_field_values=Overschrijf_bestaande_veld_waarden
-
-Overwrite_keys=Overschrijf_sleutels
-
-pairs_processed=paren_verwerkt
-Password_\:=
-
-Paste=Plakken
-
-paste_entries=plak_entries
-
-paste_entry=plak_entry
-Paste_from_clipboard=
-
-Pasted=Geplakt
-
-Path_to_%0_not_defined=
-
-Path_to_LatexEditor_(LEd.exe)=
-
-Path_to_LyX_pipe=Pad_naar_LyX-pipe
-
-Path_to_Vim=
-
-Path_to_WinEdt.exe=Pad_naar_WinEdt.exe
-
-PDF_directory=PDF_map
-PDF_does_not_exist=
-
-Personal_journal_list=Persoonlijke_tijdschriften_lijst
-
-Plain_text_import=Onopgemaakte_tekst_importeren
-
-Please_check_your_network_connection_to_this_machine.=Controleer_uw_netwerkverbinding_naar_deze_machine.
-
-Please_enter_a_name_for_the_group.=Geef_a.u.b._een_naam_voor_de_groep.
-
-Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Geef_a.u.b._een_zoekterm._Bijvoorbeeld,_om_alle_velden_te_doorzoeken_naar_<b>Smith</b>,_geef_in:%c<p><tt>smith</tt><p>Om_het_veld_<b>Author</b>_te_doorzoeken_naar_<b>Smith</b>_en_het_veld_<b>Title</b>_naar_<b>electrical</b>,_geef [...]
-
-Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Geef_a.u.b._het_veld_om_te_doorzoeken_(bv._<b>keywords</b>)_en_het_sleutelword_om_naar_te_zoeken_(bv._<b>electrical</b>).
-
-Please_enter_the_string's_label=Geef_a.u.b._het_label_van_de_constante_in
-
-Please_select_an_importer=Selecteer_a.u.b._een_importer
-
-Please_select_an_importer.=Selecteer_a.u.b._een_importer.
-
-Please_select_exactly_one_group_to_move.=Selecteer_a.u.b._exact_\u00e9\u00e9n_groep_om_te_verplaatsen.
-Please_specify_the_=
-
-Possible_duplicate_entries=Mogelijke_dubbele_entries
-
-Possible_duplicate_of_existing_entry._Click_to_resolve.=Mogelijk_duplicaat_van_bestaande_entry.
-
-Preamble=Inleiding
-
-Preferences=Instellingen
-
-Preferences_recorded.=Instellingen_opgeslagen.
-
-Preview=Voorbeeld
-
-Previous_entry=Vorige_entry
-
-Primary_sort_criterion=Primair_sorteercriterium
-Print_Preview=
-Printing_Entry_Preview=
-
-Problem_with_parsing_entry=Probleem_met_entry_ontleding
-Processing_=
-
-Program_output=Programma_uitvoer
-
-PS_directory=PS_map
-Push_entries_to_external_application_(%0)=Stuur_entries_naar_externe_applicatie_(%0)
-
-Push_selection_to_Emacs=Stuur_selectie_naar_Emacs
-
-Push_selection_to_LyX/Kile=Stuur_selectie_naar_LyX/Kile
-Push_selection_to_Vim=
-
-Push_selection_to_WinEdt=Stuur_selectie_naar_WinEdt
-
-Push_to_LatexEditor=Stuur_selectie_naar_LaTeXEditor
-Pushed_citations_to_%0=
-
-Pushed_citations_to_Emacs=Citaten_naar_Emacs_gestuurd
-Pushed_citations_to_Vim=
-
-Pushed_citations_to_WinEdt=Citaten_naar_WinEdt_gestuurd
-
-Pushed_the_citations_for_the_following_rows_to=De_citaten_voor_de_volgende_rijen_gestuurd_naar
-
-Quit_JabRef=JabRef_afsluiten
-
-Quit_synchronization=Synchronisatie_afsluiten
-
-Raw_source=Ruwe_bron
-
-Really_delete_the_selected=Bent_u_zeker_over_het_verwijderen_van_deze
-
-Rearrange_tabs_alphabetically_by_title=Rangschik_tabbladen_alfabetisch_op_titel
-
-Redo=Herstellen
-
-Reference_database=Referentie_database
-
-# The next two lines are used like in "References found: 1  Number of references to fetch?"
-References_found=Referenties_gevonden
-
-Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Verfijn_supergroep\:_Wanneer_geselecteerd,_toon_de_entries_die_in_deze_groep_en_zijn_supergroep_zitten
-
-Refresh_view=Beeld_verversen
-
-Regular_Expression=Regular_Expression
-
-Remember_these_entry_types?=Deze_entry_types_behouden?
-
-Remote_operation=Externe_operatie
-
-Remote_server_port=Externe_server_poort
-
-Remove=Verwijderen
-
-Remove_all?=Alles_verwijderen?
-
-Remove_all_subgroups=Verwijder_alle_subgroepen
-
-Remove_all_subgroups_of_"%0"?=Alle_subgroepen_van_"%0"_verwijderen?
-
-Remove_double_braces_around_BibTeX_fields_when_loading.=Verwijder_dubbele_haakjes_rond_BibTeX-velden_bij_het_laden
-
-Remove_duplicates=Verwijder_dubbels
-
-Remove_entry_from_import=Verwijder_entry_uit_importering
-
-Remove_entry_selection_from_this_group=Verwijder_entry_selectie_van_deze_groep
-
-Remove_entry_type=Verwijder_entry_type
-Remove_file_link_(DELETE)=
-
-remove_from_group=verwijder_uit_groep
-
-Remove_from_group=Verwijder_uit_groep
-
-Remove_group=Verwijder_groep
-
-Remove_group,_keep_subgroups=Verwijder_groep,_behoud_subgroepen
-
-Remove_group_"%0"?=Verwijder_groep_"%0"?
-
-Remove_group_"%0"_and_its_subgroups?=Verwijder_groep_"%0"_en_zijn_subgroepen?
-
-remove_group_(keep_subgroups)=verwijder_groep_(behoud_subgroepen)
-
-remove_group_and_subgroups=verwijder_groep_en_subgroepen
-
-Remove_group_and_subgroups=Verwijder_groep_en_subgroepen
-
-Remove_link=
-
-Remove_old_entry=Verwijder_oude_entry
-
-Remove_selected_strings=Verwijder_geselecteerde_entries
-
-remove_string_=verwijder_constante_
-
-Removed_group_"%0".=Groep_"%0"_verwijderd.
-
-Removed_group_"%0"_and_its_subgroups.=Groep_"%0"_en_zijn_subgroepen_verwijderd.
-
-Removed_string=Constante_verwijderd
-
-Renamed_string=Constante_hernoemd
-
-Replace=Vervangen
-
-Replace_(regular_expression)=Vervang_(regular_expression)
-
-Replace_string=Tekst_vervangen
-
-Replace_with=Vervang_door
-
-Replaced=Vervangen
-
-Required_fields=Vereiste_velden
-
-Reset_all=Herstel_alles
-Reset_file_type_definitons=
-
-Resolve_strings_for_all_fields_except=
-Resolve_strings_for_standard_BibTeX_fields_only=
-
-resolved=opgelost
-
-Results=Resultaten
-
-Revert_to_original_source=Herstel_naar_originele_bron
-
-Review=Recensie
-
-Review_changes=Bekijk_veranderingen
-
-Right=Rechts
-root=
-
-Save=Opslaan
-Save_all_finished.=
-
-Save_all_open_databases=
-
-Save_before_closing=Opslaan_voor_afsluiten
-
-Save_database=Database_opslaan
-Save_database_as_...=Database_opslaan_als_...
-
-Save_entries_in_their_original_order=Sla_entries_in_hun_originele_volgorde_op
-
-Save_failed=Opslaan_mislukt
-
-Save_failed_during_backup_creation=Opslaan_mislukt_tijdens_creatie_van_backup
-
-Save_failed_while_committing_changes=Opslaan_mislukt_bij_het_vastleggen_van_veranderingen
-
-Save_ordered_by_author/editor/year=Sla_gesorteerd_op_auteur/editor/jaar_op
-Save_selected_as_...=Sla_geselecteerde_op_als_...
-
-Saved_database=Database_opgeslagen
-
-Saved_selected_to=Geselecteerde_opgeslagen_naar
-
-Saved_session=Sessie_opgeslagen
-
-Saving=Aan_het_opslaan
-Saving_all_databases...=
-
-Saving_database=Database_aan_het_opslaan
-
-Scan=Doorzoeken
-
-Search=Zoeken
-
-Search_All_Fields=Zoek_in_Alle_Velden
-
-Search_all_fields=Zoek_in_alle_velden
-
-Search_error=Zoek_foutmelding
-
-Search_expression=Zoek_expressie
-
-Search_for=Zoek_naar
-
-Search_general_fields=Zoek_algemene_velden
-
-Search_IEEEXplore=Zoek_IEEEXplore
-Search_IEEExplore=
-
-Search_optional_fields=Zoek_optionele_velden
-
-Search_required_fields=Zoek_vereiste_velden
-
-Search_Specified_Field(s)=Zoek_Gespecifieerde_Veld(en)
-
-Searched_database._Global_number_of_hits=Database_doorzocht._Globaal_aantal_gevonden_resultaten
-
-Searched_database._Number_of_hits=Database_doorzocht._Aantal_gevonden_resultaten
-
-Searching_for_%0_file=Aan_het_zoeken_naar_%0_bestand
-
-Searching_for_duplicates...=Aan_het_zoeken_naar_dubbels
-
-Searching_for_files=
-
-Secondary_sort_criterion=Secundair_sorteercriterium
-
-Select=Selecteer
-
-Select_a_Zip-archive=Selecteer_een_ZIP-archief
-
-Select_action=Selecteer_actie
-
-Select_all=Alles_selecteren
-
-Select_Classpath_of_New_Importer=Selecteer_Classpath_van_Nieuwe_Importer
-
-Select_encoding=Selecteer_encodering
-
-Select_entries_in_group_selection=Selecteer_entries_in_groep_selectie
-
-Select_entry_type=Selecteer_entry_type
-Select_external_application=Selecteer_externe_applicatie
-
-Select_file_from_ZIP-archive=Selecteer_bestand_van_ZIP-archief
-
-Select_format=Selecteer_formaat
-Select_icon=
-
-Select_matches=Selecteer_overeenkomsten
-
-Select_new_ImportFormat_Subclass=Selecteer_nieuw_ImportFormat_Subklasse
-
-Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Selecteer_de_boom_knopen_om_veranderingen_te_tonen_en_te_accepteren_of_afwijzen
-Selected_entries=Geselecteerde_entries
-
-Selector_enabled_fields=Selecteer_velden_die_in_werking_zijn
-Server_Hostname_\:=
-Server_Type_\:=
-
-Set_field=Veld_instellen
-Set_fields=Velden_instellen
-
-Set_general_fields=Algemene_velden_instellen
-Set_main_external_file_directory=
-
-Set_table_font=Tabel_lettertype_instellen
-
-Settings=Instellingen
-
-Setup_selectors=Selectors_instellen
-
-Short_form=Korte_vorm
-
-Shortcut=Snelkoppeling
-
-Show/edit_BibTeX_source=Toon/bewerk_BibTeX-broncode
-
-Show_'Firstname_Lastname'=Toon_'Voornaam_Familienaam'
-
-Show_'Lastname,_Firstname'=Toon_'Familienaam,_Voornaam'
-
-Show_BibTeX_source_by_default=Toon_standaard_BibTeX-broncode
-
-Show_BibTeX_source_panel=Toon_BibTeX-bronpaneel
-
-Show_confirmation_dialog_when_deleting_entries=Toon_bevestigingsdialoog_bij_verwijderen_van_entries
-
-Show_description=Toon_beschrijving
-
-Show_dynamic_groups_in_<i>italics</i>=Toon_dynamische_groepen_<i>cursief</i>
-
-Show_entries_*not*_in_group_selection=Toon_entries_die_zich_*niet*_in_de_groep_selectie_bevinden
-
-Show_file_column=
-
-Show_icons_for_groups=Toon_iconen_voor_groepen
-Show_last_names_only=Toon_enkel_laatste_namen
-
-Show_names_unchanged=Toon_namen_onveranderd
-
-Show_one_less_rows=Toon_\u00e9\u00e9n_rij_minder
-
-Show_one_more_row=Toon_\u00e9\u00e9n_rij_meer
-
-Show_optional_fields=Toon_optionele_velden
-
-Show_PDF/PS_column=Toon_PDF/PS-kolom
-
-Show_required_fields=Toon_vereiste_velden
-
-Show_URL/DOI_column=Toon_URL/DOI-kolom
-
-Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Toon_waarschuwingsdialoog_wanneer_een_dubbele_BibTeX-sleutel_ingegeven_wordt
-
-Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Toon_waarschuwingsdialoog_wanneer_een_lege_BibTeX-sleutel_ingegeven_wordt
-
-Simple_HTML=Eenvoudige_HTML
-
-Size=Grootte
-
-Skip=Overslaan
-Skipped_-_No_PDF_linked=Overgeslagen_-_Geen_PDF_gelinkt
-Skipped_-_PDF_does_not_exist=Overgeslagen_-_PDF_bestaat_niet
-Skipped_entry.=Overgeslagen_entry.
-
-Sort_alphabetically=Alphabetisch_sorteren
-
-Sort_Automatically=Automatisch_sorteren
-
-Sort_order=
-
-sort_subgroups=subgroepen_sorteren
-
-Sorted_all_subgroups_recursively.=Alle_subgroepen_recursief_gesorteerd.
-
-Sorted_immediate_subgroups.=Onmiddellijke_subgroepen_sorteren.
-
-source_edit=broncode_aanpassen
-Special_Name_Formatters=
-
-Special_table_columns=Speciale_tabelkolommen
-SQL_connection_established.=
-
-Start_incremental_search=Start_incrementele_zoekopdracht
-
-Start_search=Start_zoeken
-
-Starting_import=Importeren_aan_het_starten
-
-Statically_group_entries_by_manual_assignment=Groepeer_entries_statisch_door_manuele_toekenning
-
-Status=Status
-
-Stop=Stop
-
-Store_journal_abbreviations=Tijdschrift_afkortingen_opslaan
-
-Store_string=Constante_opslaan
-
-Store_the_following_fields_with_braces_around_capital_letters=Volgende_velden_met_haakjes_rond_hoofdletters_opslaan
-
-Stored_entry=Entry_opgeslagen
-
-Strings=Constanten
-
-Strings_for_database=Constanten_voor_database
-
-Subdatabase_from_aux=Subdatabase_van_aux
-
-Suggest=Voorstellen
-
-#### These lines were changed:
-Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Schakelt_tussen_volledige_en_afgekorte_tijdschriftnaam_als_het_tijdschrift_gekend_is.
-
-Synchronize_%0_links=Synchroniseer_%0_snelkoppelingen
-Synchronize_file_links=
-
-Synchronizing_%0_links...=%0_snelkoppelingen_aan_het_synchroniseren
-
-Table_appearance=Tabel_uiterlijk
-
-Table_background_color=Tabel_achtergrondkleur
-
-Table_grid_color=Tabel_roosterkleur
-
-Table_text_color=Tabel_tekstkleur
-
-Tabname=Tabblad_naam
-Target_file_cannot_be_a_directory.=
-
-Tertiary_sort_criterion=Tertiair_sorteercriterium
-
-Test=Test
-
-Text_Input_Area=Tekst_Invoer_Gebied
-
-The_#_character_is_not_allowed_in_BibTeX_fields=Het_#_teken_is_niet_toegestand_in_BibTeX-velden
-
-The_chosen_date_format_for_new_entries_is_not_valid=Het_gekozen_datumformaat_voor_nieuwe_entries_is_niet_geldig
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=
-
-The_CiteSeer_fetch_operation_returned_zero_results.=De_CiteSeerX_ophaaloperatie_gaf_nul_resultaten_terug.
-
-The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=
-
-the_field_<b>%0</b>=het_veld_<b>%0</b>
-
-The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Het_bestand<BR>'%0'<BR>werd_extern_gewijzigd!
-
-The_group_"%0"_already_contains_the_selection.=De_groep_"%0"_bevat_reeds_de_selectie.
-
-The_label_of_the_string_can_not_be_a_number.=Het_label_van_een_constante_mag_geen_nummer_zijn.
-
-The_label_of_the_string_can_not_contain_spaces.=Het_label_van_een_constante_mag_geen_spaties_bevatten.
-
-The_label_of_the_string_can_not_contain_the_'#'_character.=Het_label_van_een_constante_mag_het_'#'_teken_niet_bevatten.
-
-The_output_option_depends_on_a_valid_import_option.=De_uitvoeroptie_is_afhankelijk_van_een_geldige_importeeroptie.
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=
-
-The_regular_expression_<b>%0</b>_is_invalid%c=De_regular_expression_<b>%0</b>_is_ongeldig%c
-
-The_search_is_case_insensitive.=De_zoekopdracht_is_hoofdletterongevoelig.
-
-The_search_is_case_sensitive.=De_zoekopdracht_is_hoofdlettergevoelig.
-
-The_string_has_been_removed_locally=De_constante_werd_lokaal_verwijderd
-
-There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Er_zijn_mogelijke_dubbels_(aangeduid_met_een_'D'_icoon)_die_nog_niet_opgelost_werden._Verdergaan?
-
-this_button_will_update=deze_knop_zal_update_uitvoeren
-This_database_was_written_using_an_older_version_of_JabRef.=
-This_entry_has_no_BibTeX_key._Generate_key_now?=
-
-This_entry_is_incomplete=Deze_entry_is_onvolledig
-
-This_entry_type_cannot_be_removed.=Dit_entry_type_kan_niet_verwijderd_worden.
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=
-
-This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Deze_groep_bevat_entries_gebaseerd_op_manuele_toekenning._Entries_kunnen_aan_deze_groep_toegekend_worden_door_ze_te_s [...]
-
-This_group_contains_entries_in_which=Deze_groep_bevat_entries_waarin
-
-This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Deze_groep_bevat_entries_waarin_elk_veld_de_regular_expression_<b>%0</b>_bevat
-
-This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Deze_groep_bevat_entries_waarin_elk_veld_de_term_<b>%0</b>_bevat
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Deze_groep_bevat_entries_waarin_het_<b>%0</b>_veld_het_sleutelwoord_<b>%1</b>_bevat
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Deze_groep_bevat_entries_waarin_het_<b>%0</b>_veld_de_regular_expression_<b>%1</b>_bevat
-
-This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Dit_is_een_simpele_kopieer_en_plak_dialoog_om_enkele_velden_vanuit_normale_tekst_te_importeren.
-
-This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dit_zorgt_ervoor_dat_JabRef_elke_%0_snelkoppeling_op_zoekt_en_controleert_of_het_bestand_bestaat._Indien_dit_niet_het_geval_is,_zullen_u_opties_gegeven_worden<BR>om_het_probleem_op_te_lossen.
-
-This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Deze_operatie_vereist_dat_alle_geselecteerde_entries_BibTeX-sleutels_gedefinieerd_hebben.
-This_operation_requires_at_least_one_entry.=
-
-This_operation_requires_one_or_more_entries_to_be_selected.=Deze_operatie_vereist_dat_een_of_meer_entries_geselecteerd_zijn.
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=
-
-To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Om_in_te_stellen,_ga_naar_<B>Opties_->_Beheer_tijdschrift_afkortingen</B>
-
-Toggle_abbreviation=Toon_afkorting
-Toggle_entry_preview=Toon_entry_voorbeeld
-Toggle_groups_interface=Toon_groepenvenster
-Toggle_search_panel=Toon_zoekpaneel
-
-Try_different_encoding=Probeer_een_andere_encodering
-
-Type_set_to_'other'=Type_ingesteld_als_'other'
-Unabbreviate_journal_names_of_the_selected_entries=Maak_afkortingen_van_tijdschriftnamen_van_geselecteerde_entries_ongedaan
-Unabbreviated_%0_journal_names.=
-
-unable_to_access_LyX-pipe=kan_geen_toegang_krijgen_tot_LyX-pipe
-
-Unable_to_create_graphical_interface=kan_grafische_interface_niet_aanmaken
-Unable_to_open_file.=
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=
-Unable_to_read_default_icon_theme.=Kan_standaard_icoonthema_niet_lezen.
-Unable_to_read_icon_theme_file=Kan_icoonthema_bestand_niet_lezen
-
-unable_to_write_to=kan_niet_schrijven_naar
-Undefined_file_type=
-
-Undo=Ongedaan_maken
-
-Union=Unie
-
-Unknown_bibtex_entries=Onbekende_BibTeX-entries
-
-unknown_edit=onbekende_aanpassing
-
-unknown_entry_type=onbekend_entry_type
-
-Unknown_export_format=Onbekend_exporteerformaat
-
-Unmark_all=Alle_markeringen_ongedaan_maken
-
-Unmark_entries=Alle_markeringen_van_entries_ongedaan_maken
-
-Unmark_entry=Markering_van_entry_ongedaan_maken
-
-Unmarked_selected=Markering_van_geselecteerde_ongedaan_maken
-
-Unpack_EndNote_filter_set=EndNote_filter_set_uitpakken
-
-Unpacked_file.=Uitgepakt_bestand.
-
-Unsupported_version_of_class_%0\:_%1=Niet_ondersteunde_versie_van_klasse_%0:_%1
-
-untitled=naamloos
-
-Up=Omhoog
-
-Update_to_current_column_widths=Update_naar_huidige_kolombreedtes
-
-Updated_group_selection=Groep_selectie_geupdate
-Upgrade_external_links=
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=
-Upgrade_file=
-Upgrade_old_external_file_links_to_use_the_new_feature=
-Upgraded_links.=
-UPPER=
-Upper_Each_First=
-Upper_first=
-
-usage=gebruik
-
-Use_antialiasing_font=Gebruik_antialiasing_lettertype
-Use_autocompletion_for_the_following_fields=
-Use_custom_icon_theme=Gebruik_extern_icoonthema
-Use_default_viewer=
-
-Use_inspection_window_also_when_a_single_entry_is_imported.=Gebruik_inspectievenster_ook_wanneer_een_enkele_entry_ge\u00efmporteerd_wordt
-
-Use_native_file_dialog=Gebruik_"native_bestandsdialoog
-
-Use_other_look_and_feel=Gebruik_andere_"look_and_feel"
-Use_Regular_Expression_Search=Gebruik_Regular_Expression_Zoekopdracht
-
-Use_regular_expressions=Gebruik_regular_expressions
-
-Use_the_following_delimiter_character(s)=Gebruik_volgende_teken(s)_als_scheidingsteken
-Username_\:=
-
-Value_cleared_externally=Waarde_extern_gewist
-
-Value_set_externally=Waarde_extern_ingesteld
-
-verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=verifieer_dat_LyX_draait_en_dat_de_lyxpipe_geldig_is
-
-View=Beeld
-Vim_Server_Name=
-
-Waiting_for_ArXiv...=
-
-Warn_about_unresolved_duplicates_when_closing_inspection_window=Waarschuw_bij_onopgeloste_dubbels_bij_het_sluiten_van_het_inspectievenster
-
-Warn_before_overwriting_existing_keys=Waarschuwing_v\u00f3\u00f3r_het_overschrijven_van_bestaande_sleutels
-
-Warning=Waarschuwing
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=
-
-Warning_there_is_a_duplicate_key=Waarschuwing!_Er_is_een_dubbele_sleutel
-
-Warnings=Waarschuwingen
-
-web_link=web-link
-
-What_do_you_want_to_do?=Wat_wilt_u_doen?
-
-When_adding/removing_keywords,_separate_them_by=Wanneer_u_sleutelwoorden_toevoegt/verwijdert,_scheid_ze_dan_door
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Zal_XPM_metadata_naar_de_PDFs_gelinkt_vanuit_geselecteerde_entries_schrijven.
-
-with=met
-
-Word=Woord
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=Schrijf_BibTeX-entry_als_XMP-metadata_naar_PDF.
-Write_XMP=Schrijf_XMP
-Write_XMP-metadata=
-Write_XMP-metadata_for_all_PDFs_in_current_database?=
-
-Writing_XMP=XMP_aan_het_schrijven
-Writing_XMP_metadata...=XPM_metadata_aan_het_schrijven...
-Writing_XMP_metadata_for_selected_entries...=XPM_metadata_voor_geselecteerde_entries_aan_het_schrijven...
-Writing_XMP_to_'%0'...=
-
-Wrong_file_format=Verkeerd_bestandsformaat
-Wrote_XMP-metadata=
-Wrote_XMP_to_'%0'.=
-
-XMP-annotated_PDF=XMP_geannoteerde_PDF
-XMP_Export_Privacy_Settings=
-
-XMP_metadata=XPM_metadata
-XMP_metadata_found_in_PDF\:_%0=
-
-You_must_restart_JabRef_for_this_to_come_into_effect.=U_moet_JabRef_herstarten_om_dit_toe_te_passen.
-You_have_changed_the_language_setting.=U_heeft_de_taalinstelling_veranderd.
-You_have_changed_the_look_and_feel_setting.=
-
-You_have_cleared_this_field._Original_value=U_heeft_dit_veld_gewist._Originele_waarde
-
-You_have_entered_an_invalid_search_'%0'.=
-
-You_must_choose_a_file_name_to_store_journal_abbreviations=U_moet_een_bestandsnaam_kiezen_om_tijdschrift_afkortingen_op_te_slaan
-
-You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=U_moet_JabRef_herstarten_zodat_de_nieuwe_sneltoetsen_correct_kunnen_werken.
-
-You_must_set_both_BibTeX_key_and_%0_directory=U_moet_de_BibTeX-sleutel_en_%0_map_instellen
-
-Your_new_key_bindings_have_been_stored.=Uw_nieuwe_sneltoetsen_zijn_opgeslagen.
-The_following_fetchers_are_available\:=
-Could_not_find_fetcher_'%0'=
-Running_Query_'%0'_with_fetcher_'%1'.=
-Please_wait!=
-Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=
-Open_SPIRES_entry=
-Move/Rename_file=
-File_moved=
-Move_file_failed=
-Could_not_move_file=
-Could_not_find_file_'%0'.=
-Move/rename_file=
-Number_of_entries_successfully_imported=
-Import_canceled_by_user=
-Progress\:_%0_of_%1=
-Error_while_fetching_from_JSTOR=
-Fetching_Medline_by_id...=
-Fetching_Medline_by_term...=
-Medline_import_canceled=
-Please_enter_a_valid_number=
-Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=
-An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=
-Error_while_fetching_from_Spires\:_=
-Connect_to_external_SQL_database=
-Export_to_external_SQL_database=
-
-Show_results_in_dialog=
-Global_search=
-Show_search_results_in_a_window=
-Search_results=
-Move_file_to_file_directory?=
-Rename_to_'%0'=
-Move_to_file_directory=
-
-You_have_changed_the_menu_and_label_font_size.=
-
-Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=
-Protected_database=
-Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=
-Database_protection=
-Unable_to_save_database=
-BibTeX_key_generator=
-Unable_to_open_link.=
-Search_JSTOR=
-Attempting_SQL_import...=
-BibO_RDF=
-HTML_parser=
-Move_the_keyboard_focus_to_the_entry_table=
-MIME_type=
-This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=
-Legacy_file_fields=
-This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=
-Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"
-The_ACM_Digital_Library=
-Reset=
-Use_IEEE_LaTeX_abbreviations=
-The_Guide_to_Computing_Literature=
-Search_ACM_Portal=
-Connection_to_ACM_Portal_failed=
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=
-Settings_for_%0=
-Insert_selected_citations_into_Vim=
-RIS=
-Assign_exclusively_to_group=
-Bad_Request_'%0'.=
-Mark_entries_imported_into_an_existing_database=
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=
-Forward=
-Back=
-Sort_the_following_fields_as_numeric_fields=
-Line_%0\:_Found_corrupted_BibTeX-key.=
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=
-Finished_downloading_full_text_document=
-Unable_to_find_full_text_document_in_the_linked_web_page.=
-Connection_error_when_trying_to_find_full_text_document.=
-This_entry_provides_no_URL_or_DOI_links.=
-Full_text_article_download_failed=
-Update_to_current_column_order=
-
-Rename_field=
-Set/clear/rename_fields=
-Rename_field_to\:=
-Move_contents_of_a_field_into_a_field_with_a_different_name=
-
-You_can_only_rename_one_field_at_a_time=
-Remove_all_broken_links=
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=
-
-Plugin_installer=
-Unable_to_create_plugin_directory=
-Unable_to_copy_file=
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=
-Unable_to_create_user_plugin_directory=
-Plugin_installation_failed.=
-The_same_version_of_this_plugin_is_already_installed.=
-A_newer_version_of_this_plugin_is_already_installed.=
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=
-Old_versions_deleted_successfully.=
-
-Install_plugin=
-Download_plugin=
-Plugin_manager=
-Delete_the_%0_selected_plugins?=
-Delete_plugins=
-Delete_the_selected_plugin?=
-Delete_plugin=
-Enter_download_URL=
-Plugin_name=
-Version=
-Unknown=
-Not_loaded=
-Loaded=
-Could_not_determine_version_of_=
-Install_anyway?=
-
-Looking_for_full_text_document...=
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=
-
-Autosave=
-Prompt_before_recovering_a_database_from_an_autosave_file=
-Autosave_interval_(minutes)=
-Do_you_want_to_recover_the_database_from_the_autosave_file?=
-Recover_from_autosave=
-%0_warnings=
-
-Save_in_current_table_sort_order=
-Export_in_current_table_sort_order=
-Export_ordered_by_author/editor/year=
-Export_entries_in_their_original_order=
-Error_opening_file_'%0'.=
-Autosave_of_file_'%0'=
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=
-
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=
-Plugins_installed_in_other_locations\:=
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=
-
-Formatter_not_found\:_%0=
-The_following_formatters_could_not_be_found=
-
-Clear_inputarea=
-Automatically_set_file_links_for_this_entry=
-Could_not_save,_file_locked_by_another_JabRef_instance.=
-File_is_locked_by_another_JabRef_instance.=
-Do_you_want_to_override_the_file_lock?=
-File_locked=
-Current_tmp_value=
-Metadata_change=
-Changes_have_been_made_to_the_following_metadata_elements=
-
-Generate_groups_for_author_last_names=
-Generate_groups_for_editor_last_names=
-Generate_groups_from_keywords_in_a_BibTeX_field=
-Enforce_legal_characters_in_BibTeX_keys=
-The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=
-Before_saving,_please_edit_any_strings_containing_the_#_character.=
-
-Save_without_backup?=
-Unable_to_create_backup=
-
-File_directory_is_not_set_or_does_not_exist.=
-Move_file_to_file_directory.=
-Rename_file_to=
-<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=
-static_group=
-dynamic_group=
-refines_supergroup=
-includes_subgroups=
-contains=
-search_expression=
-
-Disable_file_renaming_in_non-native_file_dialog=
-File_dialog=
-No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=
-
-Search_ScienceDirect=
-Error_while_fetching_from_ScienceDirect=
-
-Error_initializing_custom_export_format_from_string_'%0'=
-
-BibLaTeX_mode=
-Optional_fields_2=
-Please_wait=
-Waiting_for_save_operation_to_finish=
-Resolving_duplicate_BibTeX_keys...=
-Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=
-This_database_contains_one_or_more_duplicated_BibTeX_keys.=
-Do_you_want_to_resolve_duplicate_keys_now?=
-
-Find_and_remove_duplicate_BibTeX_keys=
-Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=
-Duplicate_BibTeX_key=
-Duplicate_key=
-Generate_key=
-Import_marking_color=
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=
-BibTeX_importer=
-Always_add_letter_(a,_b,_...)_to_generated_keys=
-
-Ensure_unique_keys_using_letters_(a,_b,_...)=
-Ensure_unique_keys_using_letters_(b,_c,_...)=
-Entry_editor_active_background_color=
-Entry_editor_background_color=
-Entry_editor_font_color=
-Entry_editor_invalid_field_color=
-
-Table_and_entry_editor_colors=
-
-An_autosave_file_was_found_for_this_database._This_could_indicate_=
-that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=
-General_file_directory=
-User-specific_file_directory=
-Error_setting_look_and_feel=
-Search_failed\:_illegal_search_expression=
-Show_ArXiv_column=
-<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=
-
-You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=
-Automatically_open_browse_dialog_when_creating_new_file_link=
-
-Import_Metadata_from\:=
-Choose_the_source_for_the_metadata_import=
-Create_entry_based_on_XMP_data=
-Create_entry_based_on_data_fetched_from=
-Create_blank_entry_linking_the_PDF=
-Only_attach_PDF=
-Mr._dLib_Metadata_Entries_Associated_With\:=
-Mr._dLib_Metadata_Entries_Associated_With_PDF_File=
-Title=
-Author(s)=
-Published_Year=
-No_metadata_found.=
-Mr._dLib_web_service_is_temporarily_unavailable.=
-Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=
-You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=
-No_Internet_Connection.=
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=
-Web_Service_Version_Outdated=
-The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=
-Update_empty_fields_with_data_fetched_from=
-Create_New_Entry=
-Update_Existing_Entry=
-Mr._dLib=
-More_information=
-Fetching_Metadata...=
-Metadata=
-Autocomplete_names_in_'Firstname_Lastname'_format_only=
-Autocomplete_names_in_'Lastname,_Firstname'_format_only=
-Autocomplete_names_in_both_formats=
-Marking_color_%0=
-The_name_'comment'_can_not_be_used_as_an_entry_type_name.=
-You_must_enter_an_integer_value_in_the_text_field_for=
-File_directory=
-Send_as_email=
-References=
-Sending_of_emails=
-Subject_for_sending_an_email_with_references=
-Automatically_open_folders_of_attached_files=
-Create_entry_based_on_content=
-Store_choice_as_default=
-Do_not_show_this_box_again_for_this_import=
-Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=
-Error_creating_email=
-Could_not_open_directory=
-Entries_added_to_an_email=
-exportFormat=
-Output_file_missing=
-No_search_matches.=
-The_output_option_depends_on_a_valid_input_option.=
-Default_import_style_for_drag&drop_of_PDFs=
-Default_PDF_file_link_action=
-File_name_format_pattern=
-PostgreSQL_database=
-DIN_1505=
-Wrong_Format=
-Path_to_gnuclient_or_emacsclient=
-Additional_parameters=
-Encrypted_documents_are_not_supported=
-Cite_selected_entries=
-Cite_selected_entries_with_in-text_citation=
-Cite_special=
-Extra_information_(e.g._page_number)=
-Manage_citations=
-Problem_modifying_citation=
-Citation=
-Context=
-Extra_information=
-Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=
-Styles=
-Select_style=
-This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=
-Journals=
-Cite=
-Cite_in-text=
-Insert_empty_citation=
-Merge_citations=
-Manual_connect=
-Select_Writer_document=
-Sync_OO_bibliography=
-OpenOffice=
-Select_which_open_Writer_document_to_work_on=
-Connected_to_document=
-Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=
-Cite_selected_entries_with_extra_information=
-Ensure_that_the_bibliography_is_up-to-date=
-Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=
-Unable_to_synchronize_bibliography=
-Combine_pairs_of_citations_that_are_separated_by_spaces_only=
-Autodetection_failed=
-Connecting=
-Please_wait...=
-Unable_to_connect=
-Set_connection_parameters=
-Path_to_OpenOffice_directory=
-Path_to_OpenOffice_executable=
-Path_to_OpenOffice_library_dir=
-Autodetect=
-Connection_lost=
-The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=
-The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=
-Automatically_sync_bibliography_when_inserting_citations=
-Look_up_BibTeX_entries_in_the_active_tab_only=
-Look_up_BibTeX_entries_in_all_open_databases=
-Use_in-parenthesis_citation=
-Use_in-text_citation=
-Autodetecting_paths...=
-Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=
-Could_not_find_OpenOffice_installation=
-Directories=
-Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=
-Choose_OpenOffice_executable=
-Select_document=
-Edit_Group_Membership=
-PostgreSQL=
-Highlight_Words=
-JSTOR_import_cancelled=
-HTML_list=
-Click_group_to_toggle_membership_of_selected_entries=
-Use_EMACS_23_insertion_string=
-Normalize_to_BibTeX_name_format=
-If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=
-Could_not_open_%0=
-Unknown_import_format=
-Open_INSPIRE_entry=
-An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=
-Error_while_fetching_from_Inspire\:_=
-Web_search=
-Autocomplete_names=
-You_must_select_either_a_valid_style_file,_or_use_the_default_style.=
-Default_style=
-Choose_style_file_directly=
-Choose_from_a_directory=
-No_directory_defined_for_%0-files=
-Allow_file_links_relative_to_each_bib_file's_location=
-Style_selection=
-The_panel_below_shows_the_definition_of_the_default_style.=
-If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=
-
-Default_style_(author-year_citations)=
-Default_style_(numerical_citations)=
-No_valid_style_file_defined=
-Choose_pattern=
-Use_the_bib_file_location_as_primary_file_directory=
-Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=
-Built-in_journal_list=
-OpenOffice/LibreOffice_connection=
-You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=
-JabRef_includes_a_built-in_list_of_journal_abbreviations.=
-You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=
-You_must_select_either_a_valid_style_file,_or_use_a_default_style.=
-Show=
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=
-Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=
-
-This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=
-You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=
-First_select_entries_to_clean_up.=
-Cleanup_entry=
-Autogenerate_PDF_Names=
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=
-File_rename_failed_for=
-You_have_toggled_the_BibLaTeX_mode.=
-Use_full_firstname_whenever_possible=
-Use_abbreviated_firstname_whenever_possible=
-Use_abbreviated_and_full_firstname=
-Autocompletion_options=
-Autocomplete_after_following_number_of_characters=
-Name_format_used_for_autocompletion=
-Treatment_of_first_names=
-No_icon_found_for_%0=
-Cleanup_entries=
-Automatically_assign_new_entry_to_selected_groups=
-Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
-Format_content_of_month_field_to_#mon#=
-Ensure_that_page_ranges_are_of_the_form_num1--num2=
-Make_paths_of_linked_files_relative_(if_possible)=
-Rename_PDFs_to_given_file_name_format_pattern=
-Rename_only_PDFs_having_a_relative_path=
-What_would_you_like_to_clean_up?=
-Doing_a_cleanup_for_%0_entries...=
-No_entry_needed_a_clean_up=
-One_entry_needed_a_clean_up=
-%0_entries_needed_a_clean_up=
-Imported_=
-Error_importing_from_database=
-Minimize_to_system_tray=
-
-Incomplete_search_results=
-%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=
-
-Error_downloading_file_'%0'=
-Download_failed=
-
-%0_databases_will_be_imported=
-Importing_cancelled=
-There_are_no_available_databases_to_be_imported=
-Import_from_SQL_database=
-Imported_%0_databases_successfully=
-<_CREATE_NEW_DATABASE_>=
-Remove_Selected=
-SQL_Database_Exporter=
-Select_target_SQL_database\:=
-SQL_Database_Importer=
-Please_select_which_JabRef_databases_do_you_want_to_import\:=
-
-Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
-Attach_file=
-
-Setting_all_preferences_to_default_values.=
-Resetting_preference_key_'%0'=
-Unknown_preference_key_'%0'=
-Unable_to_clear_preferences.=
-
-Reset_preferences_(key1,key2,..._or_'all')=
-Find_unlinked_files=
-Select_All=
-Unselect_All=
-Expand_All=
-Collapse_All=
-Select_Directory=
-Choose_Directory=
-Use_the_selected_directory_to_start_with_the_search.=
-Browse...=
-Opens_the_file_browser.=
-Scan_directory=
-Searches_the_selected_directory_for_unlinked_files.=
-Starts_the_import_of_bibtex_entries.=
-Leave_this_dialog.=
-Create_directory_based_keywords=
-Creates_keywords_in_created_entrys_with_directory_pathnames=
-Select_a_directory_where_the_search_shall_start.=
-Select_file_type\:=
-These_files_are_not_linked_in_the_active_database.=
-Entry_type_to_be_created\:=
-Searching_file_system...=
-Importing_into_Database...=
-Select_directory=
-Select_files=
-Bibtex_entry_creation=
-<No_selection>=
-Push_selection_to_TeXstudio=
-Path_to_TeXstudio=
-Program_'%0'_not_found=
-Pushed_citations_to_TeXstudio=
-Unable_to_connect_to_freecite_online_service.=
-Parse_with_FreeCite=
-Insert_selected_citations_into_TeXstudio=
-The_current_BibTeX_key_will_be_overwritten._Continue?=
-Overwrite_key=
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
-Bibtex_key_patterns=
-Changed_special_field_settings=
-Clear_priority=
-Clear_rank=
-Compact_rank=
-Convert_1st,_2nd,_..._to_real_superscripts=
-Dropped_comment_from_database=
-Enable_PDF_preview=
-Enable_special_fields=
-Five_stars=
-Four_stars=
-Help_on_special_fields=
-Keywords_of_selected_entries=
-Manage_content_selectors=
-Manage_keywords=
-Marked_entries'_quality_as_good=
-Marked_entries_as_relevant=
-No_priority_information=
-No_rank_information=
-One_star=
-Priority=
-Priority_high=
-Priority_low=
-Priority_medium=
-Quality=
-Rank=
-Relevance=
-Set_priority=
-Set_priority_to_high=
-Set_priority_to_low=
-Set_priority_to_medium=
-Set_rank_to_five_stars=
-Set_rank_to_four_stars=
-Set_rank_to_one_star=
-Set_rank_to_three_stars=
-Set_rank_to_two_stars=
-Show_one_letter_heading_for_icon_columns=
-Show_priority=
-Show_quality=
-Show_rank=
-Show_relevance=
-Synchronize_with_keywords=
-Synchronized_special_fields_based_on_keywords=
-Three_stars=
-Toggle_relevance=
-Toogle_quality_assured=
-Two_stars=
-Update_keywords=
-Write_values_of_special_fields_as_separate_fields_to_BibTeX=
-You_have_changed_settings_for_special_fields.=
-no_preview_available=
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
-A_string_with_that_label_already_exists=
-Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
-Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
-Created_group_"%0".=
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
-If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
-Import_Metadata_From_PDF=
-Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
-Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
-Removed_all_subgroups_of_group_"%0".=
-Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=
-To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
-Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
-Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
-Use_the_following_delimiter_character(s)\:=
-When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
-Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-
-Error_fetching_from_Google_Scholar=
-Run_HTML_converter_on_title=
-Searching...=
-You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
-Confirm_selection=
-Unknown_DOI\:_'%0'.=
-Get_BibTeX_entry_from_DOI=
-Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
-Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
-Import_conversions=
-Run_filter_on_title_keeping_the_case_of_selected_words=
-Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
-Please_enter_a_search_string=
-Please_open_or_start_a_new_database_before_searching=
-An_Error_occurred_while_fetching_from_ADS_(%0)\:=
-Error_while_fetching_from_ADS=
-Error_while_fetching_from_OAI2=
-An_Error_occurred_while_parsing_abstract=
-Unknown_DiVA_entry\:_'%0'.=
-Get_BibTeX_entry_from_DiVA=
-Log=
-Remove_unneccessary_$,_{,_and_}=
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+
+%0_contains_the_Regular_Expression_<b>%1</b>=%0_bevat_de_regular_expression_<b>%1</b>
+
+%0_contains_the_term_<b>%1</b>=%0_bevat_de_term_<b>%1</b>
+
+%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_bevat_de_regular_expression_<b>%1</b>_niet
+
+%0_doesn't_contain_the_term_<b>%1</b>=%0_bevat_de_term_<b>%1</b>_niet
+
+%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_komt_niet_overeen_met_de_regular_expression_<b>%1</b>
+
+%0_doesn't_match_the_term_<b>%1</b>=%0_komt_niet_overeen_met_de_term_<b>%1</b>
+%0_export_successful=
+
+%0_field_set=%0-veld_ingesteld
+
+%0_matches_the_Regular_Expression_<b>%1</b>=%0_komt_overeen_met_de_regular_expression_<b>%1</b>
+
+%0_matches_the_term_<b>%1</b>=%0_komt_overeen_met_de_term_<b>%1</b>
+
+<field_name>=<veldnaam>
+<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=
+
+<no_field>=<geen_veld>
+
+<select>=<selecteer>
+
+<select_word>=<selecteer_woord>
+A_string_with_this_label_already_exists=
+Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Kort_tijdschriftennamen_met_de_geselecteerde_entries_af_(ISO_afkorting)
+Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Kort_tijdschriftennamen_met_de_geselecteerde_entries_af_(MEDLINE_afkorting)
+
+Abbreviate_names=Namen_afkorten
+Abbreviated_%0_journal_names.=
+
+Abbreviation=Afkorting
+
+About_JabRef=Over_JabRef
+
+Abstract=Abstract
+
+Accept=Aanvaarden
+
+Accept_change=Veranderingen_aanvaarden
+
+Action=Actie
+
+Add=Toevoegen
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Voeg_een_(gecompileerde)_externe_ImportFormat_klasse_van_een_class_path_toe._\nHet_pad_moet_niet_in_het_classpath_van_JabRef_staan.
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Voeg_een_(gecompileerde)_externe_ImportFormat_klasse_van_een_Zip-archief_toe._\nHet_pad_moet_niet_in_het_classpath_van_JabRef_staan.
+
+add_entries_to_group=voeg_entries_toe_aan_groep
+
+Add_entry_selection_to_this_group=Voeg_entry_selectie_toe_aan_deze_groep
+
+Add_from_folder=Voeg_toe_uit_map
+
+Add_from_jar=_Voeg_toe_uit_jar
+
+add_group=groep_toevoegen
+
+Add_Group=Groep_toevoegen
+
+Add_new=Voeg_nieuw_toe
+
+Add_Subgroup=Voeg_subgroep_toe
+
+Add_to_group=Voeg_toe_aan_groep
+
+Added_group_"%0".=Toegevoegde_groep_"%0".
+
+Added_new=Nieuwe_toegevoegd
+
+Added_string=Toegevoegde_constante
+
+Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Bijkomstig,_entries_waarvan_het_<b>%0</b>_veld_niet_<b>%1</b>_bevatten_ [...]
+
+Advanced=Geavanceerd
+All_custom_file_types_will_be_lost._Proceed?=
+
+All_Entries=Alle_Entries
+
+All_entries=Alle_entries
+All_entries_of_this_type_will_be_declared_typeless._Continue?=
+
+All_fields=Alle_velden
+
+All_subgroups_(recursively)=Alle_subgroepen_(recursief)
+
+Allow_editing_in_table_cells=Sta_aanpassingen_in_tabel_cellen_toe
+An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=
+An_Exception_ocurred_while_accessing_'%0'=
+An_SAXException_ocurred_while_parsing_'%0'\:=
+
+and=en
+and_inside_the_JabRef-jar\:=
+
+and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=en_de_klasse_moet_beschikbaar_zijn_in_uw_classpath_de_volgende_keer_wanneer_u_JabRef_opstart
+
+any_field_that_matches_the_regular_expression_<b>%0</b>=elk_veld_dat_overeenkomt_met_de_regular_expression_<b>%0</b>
+
+Appearance=Uiterlijk
+
+Append=Bijvoegen
+Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Voeg_de_inhoud_van_een_BibTeX_database_in_de_huidige_weergegeven_database_toe
+
+Append_database=Database_invoegen
+
+append_the_selected_text_to_bibtex_key=voeg_de_geselecteerde_tekst_toe_aan_BibTeX-sleutel
+Application=
+
+Apply=Toepassen
+
+Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argumenten_doorgegeven_aan_de_draaiende_JabRef_instantie._Wordt_nu_afgesloten.
+
+Assign_entry_selection_exclusively_to_this_group=Ken_entry_selectie_exclusief_aan_deze_groep_toe
+
+Assign_new_file=Ken_nieuw_bestand_toe
+
+Assign_the_original_group's_entries_to_this_group?=De_entries_van_de_originele_groep_aan_deze_groep_toekennen?
+
+Assigned_%0_entries_to_group_"%1".=%0_entries_aan_groep_"%1"_toegekend
+
+Assigned_1_entry_to_group_"%0".=1_entry_aan_groep_"%0"_toegekend
+At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=
+
+Attach_%0_file=Voeg_%0_bestand_bij
+
+Attach_URL=URL_bijvoegen
+
+Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Poging_om_%0_snelkoppelingen_voor_jouw_entries_automatisch_in_te_stellen._Automatisch_instellen_werkt_als_een_%0_bestand_in_jouw_%0_map_of_een_submap<BR>een_identieke_naam_heeft_als_een_BibTeX-sleutel_van_een_entry,_plus_extensie.
+Attempting_SQL_export...=
+
+Auto=Auto
+
+Autodetect_format=Formaat_automatisch_detecteren
+
+Autogenerate_BibTeX_key=BibTeX-sleutel_automatisch_genereren
+Autogenerate_BibTeX_keys=BibTeX-sleutels_automatisch_genereren
+
+Autogenerate_groups=Groepen_automatisch_genereren
+
+autogenerate_keys=BibTeX-sleutels_automatisch_genereren
+
+
+Autolink_files_with_names_starting_with_the_BibTeX_key=
+Autolink_only_files_that_match_the_BibTeX_key=
+
+Automatically_create_groups=Groepen_automatisch_aanmaken
+
+Automatically_create_groups_for_database.=Automatisch_groepen_voor_database_aanmaken
+
+Automatically_created_groups=Automatisch_aangemaakte_groepen
+
+Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Verberg_automatisch_het_groepenvenster_bij_overgang_naar_een_database_die_geen_groepen_bevat
+
+Automatically_remove_exact_duplicates=
+
+Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Toon_automatisch_het_groepenvenster_bij_overgang_naar_een_database_die_groepen_bevat
+
+Autoset=Automatisch_instellen
+
+Autoset_%0_field=Automatisch_het_%0_veld_instellen
+
+Autoset_%0_links._Allow_overwriting_existing_links.=Automatisch_%0_snelkoppelingen_instellen._Overschrijven_van_bestaande_snelkoppelingen_toestaan.
+
+Autoset_%0_links._Do_not_overwrite_existing_links.=Automatisch_%0_snelkoppelingen_instellen._Overschrijven_van_bestaande_snelkoppelingen_niet_toestaan.
+Autoset_external_links=
+Autosetting_links=
+
+AUX_file_import=AUX_bestand_importeren
+
+Available_export_formats=Beschikbare_exporteer_formaten
+
+Available_fields=Beschikbare_velden
+
+Available_import_formats=Beschikbare_importeer_formaten
+
+Background_color_for_optional_fields=Achtergrondkleur_voor_optionele_velden
+
+Background_color_for_required_fields=Achtergrondkleur_voor_vereiste_velden
+
+Backup_old_file_when_saving=Maak_reservekopie_van_oud_bestand_bij_het_opslaan
+Beta_version=
+
+Bibkey_to_filename_conversion=BibTeX-sleutel_naar_bestandsnaam_conversie
+
+BibTeX_key=BibTeX-sleutel
+
+BibTeX_key_is_unique.=BibTeX-sleutel_is_uniek
+
+BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX-sleutel_is_niet_ingesteld._Geef_een_naam_voor_het_gedownloade_bestand
+
+BibTeX_source=BibTeX-broncode
+
+BibTeXML=BibTeXML
+
+Binding=Binding
+Broken_link=
+
+Browse=Bladeren
+
+by=door
+
+Calling_external_viewer...=Externe_viewer_opgeroepen...
+
+Cancel=Annuleren
+
+Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Kan_entries_niet_aan_de_groep_toevoegen_zonder_sleutels_te_genereren._Sleutels_nu_genereren?
+
+Cannot_merge_this_change=Kan_deze_verandering_niet_samenvoegen
+
+Cannot_move_group_"%0"_down.=Kan_groep_"%0"_niet_naar_beneden_verplaatsen
+
+Cannot_move_group_"%0"_left.=Kan_groep_"%0"_niet_naar_links_verplaatsen
+
+Cannot_move_group_"%0"_right.=Kan_groep_"%0"_niet_naar_rechts_verplaatsen
+
+Cannot_move_group_"%0"_up.=Kan_groep_"%0"_niet_naar_boven_verplaatsen
+
+case_insensitive=hoofdletter_ongevoelig
+
+case_sensitive=hoofdletter_gevoelig
+
+Case_sensitive=Hoofdletter_gevoelig
+
+change_assignment_of_entries=verandering_toekenning_van_entries
+
+# The following are for case change in right-click menu in entry editor. The last four
+# illustrate the four variations of capitalization
+Change_case=Verander_geval
+
+Change_entry_type=Wijzig_entry_type
+
+Change_file_type=
+
+change_key=wijzig_sleutel
+
+Change_of_Grouping_Method=Wijzig_groepering_methode
+
+change_preamble=wijzig_inleiding
+
+change_string_content=wijzig_constante_inhoud
+
+change_string_name=wijzig_constante_naam
+Change_table_column_and_General_fields_settings_to_use_the_new_feature=
+
+change_type=wijzig_type
+
+changed_=gewijzigd_
+
+Changed_font_settings=Gewijzigde_lettertypeinstellingen
+
+Changed_language_settings=Gewijzigde_taal_instellingen
+
+Changed_look_and_feel_settings=Gewijzigde_"Look_and_Feel"-instellingen
+
+Changed_preamble=Gewijzigde_inleiding
+
+Changed_type_to=Type_gewijzigd_naar
+
+Characters_to_ignore=Tekens_die_genegeerd_worden
+
+Check_existing_%0_links=Controleer_bestaande_%0_snelkoppelingen
+
+Check_links=Controleer_snelkoppelingen
+
+Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Kies_de_URL_om_te_downloaden._De_standaard_waarde_wijst_naar_een_lijst_voorzien_door_de_JabRef_ontwikkelaars.
+Cite_command=
+
+Class_name=Klassenaam
+
+Clear=Wissen
+
+clear_all_groups=Wis_alle_groepen
+
+Clear_field=Wis_velden
+
+Clear_fields=Velden_wissen
+
+Clear_highlight=Wis_selectie
+
+Close=Sluiten
+
+Close_dialog=Sluit_dialoog
+
+Close_the_current_database=Sluit_de_huidige_database
+
+Close_the_help_window=Sluit_het_help_venster
+
+Close_window=Sluit_venster
+
+Closed_database=Sluit_database
+
+Collapse_subtree=Subboom_in_mekaar_klappen
+
+Color_codes_for_required_and_optional_fields=Kleurcodes_voor_vereiste_en_optionele_velden
+
+Color_for_marking_incomplete_entries=Kleur_om_onvolledige_entries_te_markeren
+
+Column_width=Kolombreedte
+
+Command_line_id=Commandoregel_id
+
+Complete_record=Vervolledig_record
+
+Connect=
+Connect_to_SQL_database=
+Connect_to_SQL_Database=
+Connection_to_IEEEXplore_failed=
+
+Contained_in=bevat_in
+
+Content=Inhoud
+
+Copied=Gekopieerd
+
+Copied_cell_contents=Gekopieerde_cel_inhoud
+
+Copied_key=Gekopieerde_BibTeX-sleutel
+
+Copied_keys=Gekopieerde_BibTeX-sleutels
+
+Copy=Kopi\u00ebren
+
+Copy_BibTeX_key=Kopieer_BibTeX-sleutel
+Copy_file_to_file_directory.=
+Copy_files_to_file_directory.=
+
+Copy_to_clipboard=
+
+Could_not_call_executable=Kon_executable_niet_oproepen
+
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Kon_geen_verbinding_maken_met_een_draaiend_gnuserv_proces._Zorg_ervoor_dat_Emacs_of_XEmacs_draait,<BR>en_dat_de_server_gestart_is_(door_het_commando_'gnuserv-start'_te_draaien).
+
+# I have reformulated the following lines, because the 1st person form is not suitable:
+Could_not_connect_to_host_=Kon_geen_verbinding_maken_met_de_host
+Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=
+
+Could_not_export_file=Kon_bestand_niet_exporteren
+
+Could_not_export_preferences=Kon_instellingen_niet_exporteren
+
+Could_not_find_a_suitable_import_format.=Kon_geen_geschikt_importeer_formaat_vinden.
+Could_not_find_directory_for_%0-files\:_%1=
+Could_not_find_image_file=Kan_fotobestand_niet_vinden
+
+Could_not_find_layout_file=Kon_layout_bestand_niet_vinden
+
+Could_not_import_preferences=Kon_instellingen_niet_importeren
+
+Could_not_instantiate_%0=Kon_geen_instantie_van_%0_aanmaken
+Could_not_instantiate_%0_%1=Kon_geen_instantie_van_%0_%1_aanmaken
+
+Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Kon_geen_instantie_van_%0_aanmaken._Heeft_u_het_correcte_pakket_pad_gekozen?
+
+Could_not_open_link=
+
+Could_not_parse_number_of_hits=Kon_het_aantal_hits_niet_ontleden
+Could_not_print_preview=
+Could_not_run_the_'vim'_program.=
+
+Could_not_save_file=Kon_het_bestand_niet_opslaan
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=
+
+Create_group=Groep_aanmaken
+
+Created_groups.=Groepen_aangemaakt.
+
+crossreferenced_entries_included=inclusief_kruisgerefereerde_entries
+
+Current_content=Huidige_inhoud
+
+Current_value=Huidige_waarde
+
+Custom_entry_types=Externe_entry_types
+
+Custom_entry_types_found_in_file=Externe_entry_types_gevonden_in_bestand
+Custom_icon_theme=Extern_icoonthema
+Custom_icon_theme_file=Extern_icoonthema_bestaan
+
+Custom_importers=Externe_importfilter
+
+Customize_entry_types=Entry_types_aanpassen
+
+Customize_key_bindings=Toetsentoekenningen_aanpassen
+
+Cut=Knippen
+
+cut_entries=entries_knippen
+
+cut_entry=entry_knippen
+
+Cut_pr=Knippen_pr
+Database_\:=
+
+Database_encoding=Database_encodering
+
+Database_has_changed._Do_you_want_to_save_before_closing?=De_database_is_gewijzigd._Wilt_u_opslaan_alvorens_af_te_sluiten?
+
+Database_properties=Database_eigenschappen
+
+Date_format=Datum_formaat
+
+Default=Standaard
+
+Default_encoding=Standaard_encodering
+
+Default_grouping_field=Standaard_groeperingsveld
+
+Default_look_and_feel=Standaard_"look_and_feel"
+
+Default_pattern=Standaard_patroon
+
+Default_sort_criteria=Standaard_sorteercriteria
+Define_'%0'=
+
+Delete=Verwijderen
+
+Delete_custom_format=Verwijder_aangepast_formaat
+
+# I have reformulated the following lines, because the 1st person form is not suitable:
+# (Folgende_URL_konnte_nicht_analysiert_werden)
+delete_entries=verwijder_entries
+
+Delete_entry=Verwijder_entry
+
+delete_entry=verwijder_entry
+
+Delete_multiple_entries=Verwijder_meerdere_entries
+
+Delete_rows=Verwijder_rijen
+
+Delete_strings=Verwijder_constanten
+
+Deleted=Verwijderd
+
+Delimit_fields_with_semicolon,_ex.=Scheid_velden_met_puntkomma,_bv.
+
+Descending=Afdalend
+
+Description=Beschrijving
+
+Deselect_all=Alle_selecties_ongedaan_maken
+Deselect_all_duplicates=
+
+Details=Details
+
+Disable_entry_editor_when_multiple_entries_are_selected=Maak_entry_editor_onbeschikbaar_wanneer_meerdere_entries_geselecteerd_zijn
+
+Disable_this_confirmation_dialog=Maak_deze_bevestigingsdialoog_onbeschikbaar
+
+Disable_this_warning_dialog=Maak_deze_waarschuwingsdialoog_onbeschikbaar
+
+Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Toon_alle_entries_die_bij_een_of_meerdere_van_de_geselecteerde_groepen_behoren.
+
+Display_all_error_messages=Toon_alle_foutmeldingen
+
+Display_help_on_command_line_options=Toon_help_over_commandline_opties
+
+Display_imported_entries_in_an_inspection_window_before_they_are_added.=Toon_ge\u00efmporteerde_entries_in_een_onderzoeksvenster_voordat_ze_toegevoegd_worden
+
+Display_only_entries_belonging_to_all_selected_groups.=Toon_alleen_entries_die_tot_alle_geselecteerde_groepen_behoren.
+
+Display_version=Display_versie
+
+Displaying_no_groups=Geen_groepen_tonend
+
+Do_not_abbreviate_names=Namen_niet_afkorten
+
+Do_not_autoset=Niet_automatisch_instellen
+
+Do_not_import_entry=Entry_niet_importeren
+
+Do_not_open_any_files_at_startup=Geen_bestanden_openen_bij_het_opstarten
+
+Do_not_overwrite_existing_keys=Bestaande_BibTeX-sleutels_niet_overschrijven
+Do_not_show_splash_window_at_startup=
+Do_not_show_these_options_in_the_future=
+
+Do_not_wrap_the_following_fields_when_saving=De_volgende_velden_niet_bij_het_opslaan_afbreken
+Do_not_write_the_following_fields_to_XMP_Metadata\:=
+
+Do_you_want_JabRef_to_do_the_following_operations?=
+
+DocBook=DocBook
+
+Down=Omlaag
+
+Download=Download
+
+Download_completed=Download_voltooid
+
+Download_file=Download_bestand
+
+Downloading...=Downloading...
+Drag_and_Drop_Error=
+Drop_%0=
+
+duplicate_BibTeX_key=dubbele_BibTeX-sleutel
+
+Duplicate_BibTeX_key.=Dubbele_BibTeX-sleutel.
+
+Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Dubbele_BibTeX-sleutel._Groepering_kan_misschien_niet_werken_voor_deze_entry.
+
+Duplicate_Key_Warning=Waarschuwing:_dubbele_BibTeX-sleutel
+
+Duplicate_pairs_found=Dubbele_paren_gevonden
+
+duplicate_removal=dubbels_verwijderen
+
+Duplicate_string_name=Dubbele_constante_naam
+
+Duplicates_found=Dubbels_gevonden
+
+Duplicates_removed=Dubbels_verwijderd
+
+Dynamic_groups=Dynamische_groepen
+
+Dynamically_group_entries_by_a_free-form_search_expression=Dynamisch_entries_groeperen_door_een_"free-form"_zoek_expressie
+
+Dynamically_group_entries_by_searching_a_field_for_a_keyword=Dynamisch_entries_groeperen_door_een_veld_te_zoeken_via_een_sleutelwoord
+
+Each_line_must_be_on_the_following_form=Elke_regel_moet_in_de_volgende_vorm_zijn
+
+Edit=Bewerken
+
+Edit_custom_export=Externe_exportfilter_bewerken
+Edit_entry=Entry_bewerken
+Edit_file_link=
+Edit_file_type=
+
+Edit_group=Groep_bewerken
+
+Edit_journal=Tijdschrift_bewerken
+
+Edit_preamble=Inleiding_bewerken
+Edit_strings=Constanten_bewerken
+Editor_options=
+
+empty_BibTeX_key=lege_BibTeX-sleutel
+
+Empty_BibTeX_key.=Lege_BibTeX-sleutel.
+
+Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Lege_BibTeX-sleutel._Groepering_kan_misschien_niet_werken_voor_deze_entry.
+
+empty_database=lege_database
+
+Enable_source_editing=Broncode_aanpassing_mogelijk_maken
+Enable_word/name_autocompletion=
+
+Endnote=Endnote
+
+Enter_URL=URL_ingeven
+
+Enter_URL_to_download=Geef_URL_om_te_downloaden_in
+
+entries=entries
+
+Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Entries_kunnen_niet_manueel_toegekend_of_verwijderd_worden_van_deze_groep.
+
+Entries_exported_to_clipboard=Entries_ge\u00ebxporteerd_naar_het_klembord
+
+entries_have_undefined_BibTeX_key=entries_hebben_een_ongedefinieerde_BibTeX-sleutel
+
+entries_into_new_database=entries_in_nieuwe_database
+
+entry=entry
+
+Entry_editor=Entry_editor
+
+Entry_in_current_database=Entry_in_huidige_database
+
+Entry_in_import=Entry_in_importering
+
+Entry_preview=Entry_voorbeeld
+
+Entry_table=Entry_tabel
+
+Entry_table_columns=Entry_tabelkolommen
+
+Entry_type=Entry_type
+
+Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Entry_typenamen_mogen_geen_witruimtes_of_de_volgende_tekens_bevatten
+
+Entry_types=Entrytypes
+
+Error=Foutmelding
+
+Error\:_=
+Error_converting_Bibtex_to_XMP\:_%0=
+Error_converting_XMP_to_'%0'...=
+Error_exporting_to_clipboard=
+
+##Error:_check_your_External_viewer_settings_in_Preferences=Foutmelding:_controleer_uw_Externe_viewer_instellingen_in_Instellingen
+Error_in_field=Fout_in_veld
+Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=
+Error_occured_when_parsing_entry=Foutmelding_bij_het_ontleden_van_de_entry
+
+Error_opening_file=Foutmelding_bij_het_openen_van_het_bestand
+
+Error_setting_field=Foutmelding_bij_het_instellen_van_het_veld
+Error_while_converting_BibtexEntry_to_XMP_%0=
+Error_while_downloading_file\:=
+Error_while_fetching_from_OIA2=
+Error_while_writing=Foutmelding_bij_het_schrijven
+
+Error_writing_to_%0_file(s).=
+Error_writing_XMP_to_file\:_%0=
+
+Establishing_SQL_connection...=
+
+Exceptions=Uitzonderingen
+
+Existing_file=Bestaande_bestand
+
+exists._Overwrite_file?=bestaat_reeds._Bestand_overschrijven?
+exists._Overwrite?=bestaat._Overschrijven?
+
+Expand_subtree=Subboom_uitklappen
+
+Export=Exporteren
+
+Export_name=Naam_exporteren
+
+Export_preferences=Instellingen_exporteren
+
+Export_preferences_to_file=Instellingen_exporteren_naar_bestand
+
+Export_properties=Eigenschappen_exporteren
+
+Export_to_clipboard=Exporteer_naar_klembord
+Export_to_SQL_database=
+
+Exporting=Exporteren...
+Extension=
+
+External_changes=Externe_wijzigingen
+
+External_file_links=
+
+External_files=Externe_bestanden
+
+External_programs=Externe_programma's
+
+External_viewer_called=Externe_viewer_opgeroepen
+
+Failed_to_read_groups_data_(unsupported_version\:_%0)=Lezen_van_groepen_data_mislukt_(niet_ondersteunde_versie:_%0)
+
+Fetch=Ophalen
+
+Field=Veld
+
+field=veld
+
+# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
+Field_content=Veld_inhoud
+
+Field_name=Veldnaam
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=
+
+Field_sizes=Veld_groottes
+
+Field_to_filter=
+
+Field_to_group_by=Veld_te_groeperen_op
+
+Fields=Velden
+
+File=Bestand
+
+file=vestand
+
+File_'%0'_is_already_open.=
+
+File_'%0'_not_found=Bestand_'%0'_niet_gevonden
+
+File_changed=Bestand_veranderd
+File_directory_is_'%0'\:=
+
+File_directory_is_not_set_or_does_not_exist!=
+File_download=
+File_exists=Bestand_bestaat
+
+File_extension=Bestandsextensie
+
+File_has_been_updated_externally._What_do_you_want_to_do?=
+
+File_not_found=Bestand_niet_gevonden
+File_type=
+
+File_updated_externally=Bestand_extern_geupdate
+
+filename=bestandsnaam
+
+Files_opened=Bestanden_geopend
+
+Filter=Filter
+
+
+Finished_autosetting_external_links.=
+
+Finished_synchronizing_%0_links._Entries_changed%c_%1.=Synchroniseren_van_%0_snelkoppelingen_voltooid._Aantal_veranderde_entries%c_%1.
+Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=XPM_schrijven_voor_%0_bestand_voltooid_(%1_overgeslagen,_%2_fouten).
+
+First_select_the_entries_you_want_keys_to_be_generated_for.=Selecteer_eerst_de_entries_waarvoor_u_sleutels_wilt_genereren.
+
+Fit_table_horizontally_on_screen=Pas_tabel_horizontaal_aan_op_het_scherm
+
+Float=Float
+
+Float_marked_entries=Gemarkeerde_entries_bovenaan_tonen
+
+Font_Family=Lettertype_Type
+
+Font_Preview=Lettertype_Voorbeeld
+
+Font_Size=Lettertype_Grootte
+
+Font_Style=Lettertype_Stijl
+
+FontSelector=Lettertype_selecteren
+
+for=voor
+
+Format_of_author_and_editor_names=Formaat_van_de_auteur-_en_editornamen
+Format_String=
+
+Format_used=Formaat_gebruikt
+Formatter_Name=
+
+Formatter_not_found=Formateerder_niet_gevonden
+
+found=gevonden
+Found_%0_plugin(s)=
+
+found_in_aux_file=gevonden_in_aux_bestand
+
+Full_name=Volledige_naam
+
+General=Algemeen
+
+General_fields=Algemene_velden
+
+Generate=Genereren
+
+Generate_BibTeX_key=Genereer_BibTeX-sleutel
+
+Generate_keys=Genereer_sleutels
+
+Generate_keys_before_saving_(for_entries_without_a_key)=Genereer_sleutels_voor_het_opslaan_(voor_entries_zonder_een_sleutel)
+
+Generate_keys_for_imported_entries=
+
+Generate_now=Genereer_nu
+
+Generated_BibTeX_key_for=Gegenereerde_BibTeX-sleutel_voor
+
+Generating_BibTeX_key_for=BibTeX-sleutel_aan_het_genereren_voor
+
+Grab=Neem
+
+Gray_out_entries_not_in_group_selection=Maak_entries_die_niet_in_de_groep_selectie_zitten_grijs
+
+Gray_out_non-hits=Maak_niet_gevonden_items_grijs
+
+Gray_out_non-matching_entries=Maak_entries_die_niet_overeenkomen_grijs
+
+Group_properties=Groepeigenschappen
+
+grouping_may_not_work_for_this_entry=groepering_werkt_misschien_niet_voor_deze_entry
+
+Groups=Groepen
+
+Harvard_RTF=Harvard_RTF
+
+Have_you_chosen_the_correct_package_path?=Heeft_u_het_correcte_pakket_pad_gekozen?
+
+Help=Help
+
+Help_contents=Help_inhoud
+
+Help_on_groups=Help_over_groepen
+
+Help_on_key_patterns=Help_over_sleutelpatronen
+Help_on_Preview_Settings=Help_over_Voorbeeld_Instellingen
+Help_on_Regular_Expression_Search=Help_over_Regular_Expression_Zoekopdracht
+
+Hide_non-hits=Verberg_niet_gevonden_objecten
+
+Hide_non-matching_entries=Verberg_entries_die_niet_overeenkomen
+
+Hierarchical_context=Hi\u00ebrarchische_context
+
+Highlight=Markeren
+Highlight_groups_matching_all_selected_entries=Markeer_groepen_die_overeenkomen_met_alle_geselecteerde_entries
+Highlight_groups_matching_any_selected_entry=Markeer_groepen_die_overeenkomen_met_elke_geselecteerde_entry
+
+Highlight_overlapping_groups=Markeer_overlappende_groepen
+
+Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Hint%c_Om_specifieke_velden_alleen_te_zoeken,_geef_bijvoorbeeld_in%c<p><tt>auteur%esmith_en_titel%eelectrical</tt>
+
+HTML=HTML
+
+HTML_table=HTML_tabel
+
+HTML_table_(with_Abstract_&_BibTeX)=HTML_tabel_(met_Abstract_&_BibTeX)
+Icon=
+
+Ignore=Negeren
+
+Immediate_subgroups=Directe_subgroepen
+
+Import=Importeren
+
+Import_and_keep_old_entry=Importeren_en_oude_entry_behouden
+
+Import_and_remove_old_entry=Importeren_en_oude_entry_verwijderen
+
+Import_entries=Importeer_entries
+
+Import_failed=Importering_mislukt
+
+Import_file=Importeer_bestand
+
+Import_group_definitions=Importeer_groep_definities
+
+Import_name=Importeer_naam
+
+Import_preferences=Instellingen_importeren
+
+Import_preferences_from_file=Importeer_instellingen_van_bestand
+
+Import_strings=Importeer_constanten
+
+Import_to_open_tab=Importeer_naar_open_tabblad
+
+Import_word_selector_definitions=Importeer_woordselecteerder_definities
+
+Imported_database=Ge\u00efmporteerde_database
+
+Imported_entries=Ge\u00efmporteerde_entries
+
+Imported_from_database=Ge\u00efmporteerd_van_database
+
+ImportFormat_class=ImportFormat_Klasse
+
+Importing=Aan_het_importeren
+
+Importing_in_unknown_format=Aan_het_Importeren_in_onbekend_formaat
+
+In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=In_JabRef,_gebruik_paren_van_#_tekens_om_een_constante_aan_te_duiden.
+
+Include_abstracts=Abstracts_insluiten
+Include_entries=Entries_insluiten
+
+Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Subgroepen_insluiten\:_Wanneer_geselecteerd,_toon_entries_in_deze_groep_of_in_zijn_subgroepen
+
+Incremental=Incrementeel
+
+Incremental_search=Incrementeel_zoeken
+
+Incremental_search_failed._Repeat_to_search_from_top.=Incrementeel_zoeken_mislukt._Herhaal_om_te_zoeken_vanaf_het_begin.
+
+Independent_group\:_When_selected,_view_only_this_group's_entries=Onafhankelijke_groep\:_Wanneer_geselecteerd,_toon_enkel_de_entries_van_deze_groep
+
+Initially_show_groups_tree_expanded=Initieel,_toon_alle_bomen_van_de_groepen_uitgeklapt
+
+Input=Invoer
+
+Input_error=Invoer_foutmelding
+
+Insert=Invoegen
+
+Insert_rows=Rijen_invoegen
+
+Insert_selected_citations_into_LyX/Kile=Voeg_geselecteerde_citaten_in_LyX/Kile
+
+Insert_selected_citations_into_WinEdt=Voeg_geselecteerde_citaten_in_WinEdt
+
+insert_string_=voeg_constante_in_
+
+Insert_URL=voeg_URL_in
+
+integrity=integriteit
+
+# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
+Integrity_check=Integriteitscontrole
+
+Intersection=Doorsnede
+
+Invalid_BibTeX_key=Ongeldige_BibTeX-sleutel
+
+Invalid_date_format=Ongeldig_datumformaat
+
+Invalid_URL=Ongeldige_URL
+
+Inverted=Ge\u00efnverteerd
+
+is_a_standard_type.=is_een_standaard_type.
+
+ISO_abbreviation=ISO_afkorting
+
+Item_list_for_field=Item_lijst_voor_veld
+jabref=
+
+JabRef_help=JabRef_Help
+
+JabRef_preferences=JabRef_instellingen
+
+Journal_abbreviations=Tijdschrift_afkortingen
+
+Journal_list_preview=Tijdschriftenlijst_voorbeeld
+
+Journal_name=Tijdschrift_naam
+
+Keep=Behouden
+
+Keep_both=Beide_behouden
+
+Keep_lower=Onderste_behouden
+
+Keep_upper=Bovenste_behouden
+
+Key_bindings=Sleutel_koppelingen
+
+Key_bindings_changed=Sleutel_koppelingen_gewijzigd
+
+Key_generator_settings=Sleutelgenerator_instellingen
+
+Key_pattern=Sleutelpatroon
+
+keys_in_database=sleutels_in_database
+
+Keyword=Sleutelwoord
+
+Label=Label
+
+Language=Taal
+
+Last_modified=Laatst_gewijzigd
+
+LaTeX_AUX_file=LaTeX_AUX-bestand
+Leave_file_in_its_current_directory.=
+Leave_files_in_their_current_directory.=
+
+Left=Links
+
+License=Licentie
+
+Limit_to_fields=De_volgende_velden_begrenzen
+
+Limit_to_selected_entries=De_volgende_geselecteerde_entries_begrenzen
+
+Link=
+Link_local_file=
+Link_to_file_%0=
+
+Listen_for_remote_operation_on_port=Luister_naar_operatie_vanop_afstand_op_poort
+Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=
+
+Load_session=Sessie_laden
+
+Loading_session...=Sessie_aan_het_laden...
+localhost=
+
+Look_and_feel="Look_and_feel"
+Looking_for_pdf...=
+lower=
+
+Main_file_directory=
+
+Main_layout_file=Hoofd_layoutbestand
+
+Main_PDF_directory=Hoofd_PDF-map
+
+Main_PS_directory=Hoofd_PS-map
+
+Manage=Beheren
+
+Manage_custom_exports=Beheer_externe_exportfilters
+
+Manage_custom_imports=Beheer_externe_importfilters
+Manage_external_file_types=
+
+Manage_journal_abbreviations=Beheer_tijdschrift_afkortingen
+
+Mark_entries=Markeer_entries
+
+Mark_entry=Markeer_entry
+
+Mark_new_entries_with_addition_date=Markeer_nieuwe_entries_met_datum_van_toevoeging
+
+Mark_new_entries_with_owner_name=Markeer_nieuwe_entries_met_naam_van_eigenaar
+
+# These are status line messages when marking/unmarking entries:
+Marked_selected=Markering_geselecteerd
+
+Memory_Stick_Mode=
+
+Menu_and_label_font_size=Menu_en_label_lettertypegrootte
+
+Merged_external_changes=Voeg_externe_veranderingen_samen
+
+Messages=Berichten
+
+Messages_and_Hints=berichten_en_hints
+
+Modification_of_field=Wijziging_van_veld
+
+Modified_group_"%0".=Gewijzigde_groep_"%0".
+
+Modified_groups=Gewijzigde_groepen
+
+Modified_string=Gewijzigde_constante
+
+Modify=Wijzigen
+
+modify_group=wijzig_groep
+
+MODS=MODS
+
+Move=Verplaats
+
+Move_down=Verplaats_naar_beneden
+
+Move_entries_in_group_selection_to_the_top=Verplaats_entries_in_de_groep_selectie_naar_de_top
+Move_external_links_to_'file'_field=
+Move_files_to_file_directory.=
+
+move_group=verplaats_groep
+
+Move_string_down=Verplaats_constante_naar_beneden
+
+Move_string_up=Verplaats_constante_naar_boven
+
+Move_up=Verplaats_naar_boven
+
+Moved_group_"%0".=Verplaatste_Groep_"%0".
+MS_Office_2007=
+MySQL=
+MySQL_database=
+
+Name=Naam
+Name_formatter=
+
+Natbib_style=Natbib_stijl
+
+nested_aux_files=geneste_aux_bestanden
+
+New=Nieuw
+
+new=nieuw
+
+New_BibTeX_database=Nieuwe_BibTeX-database
+
+New_BibTeX_entry=Nieuwe_BibTeX-entry
+
+New_BibTeX_subdatabase=Nieuwe_BibTeX_subdatabase
+
+New_content=Nieuwe_inhoud
+
+New_database_created.=Nieuwe_database_aangemaakt.
+New_field_value=Nieuwe_veld_waarde
+
+New_file=Nieuw_bestand
+New_file_link_(INSERT)=
+
+New_group=Nieuwe_groep
+
+New_string=Nieuwe_constante
+
+Next_entry=Volgende_entry
+
+No_%0_found=Geen_%0_gevonden
+
+No_actual_changes_found.=Geen_actuele_veranderingen_gevonden.
+
+no_base-bibtex-file_specified=Geen_basis_BibTeX-bestand_gespecifieerd
+
+no_database_generated=Geen_database_gegenereerd
+
+No_duplicates_found=Geen_dubbels_gevonden
+
+No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Geen_entries_gevonden._Zorg_er_a.u.b._voor_dat_u_de_juiste_importfilter_gebruikt.
+
+No_entries_found_for_the_search_string_'%0'=
+
+No_entries_imported.=Geen_entries_ge\u00efmporteerd.
+
+No_entries_or_multiple_entries_selected.=Geen_entries_of_meerdere_entries_geselecteerd.
+
+No_entries_selected=Geen_entries_geselecteerd
+No_entries_selected.=Geen_entries_geselecteerd.
+
+No_exceptions_have_ocurred.=Geen_uitzonderingen_zijn_voorgekomen.
+No_files_found.=
+
+No_GUI._Only_process_command_line_options.=Geen_GUI._Alleen_proces_commandoregel_opties.
+
+No_journal_names_could_be_abbreviated.=Er_konden_geen_tijdschrift_namen_afgekort_worden.
+
+No_journal_names_could_be_unabbreviated.=Geen_afkortingen_van_tijdschrift_namen_konden_ongedaan_gemaakt_worden.
+
+No_PDF_linked=
+
+No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Geen_PDF_of_PS_gedefinieerd,_en_geen_BibTeX-sleutel_die_overeenkomt_met_een_bestand_gevonden
+No_plugins_were_found_in_the_following_folders\:=
+
+No_references_found=Geen_referenties_gevonden
+
+No_saved_session_found.=Geen_opgeslagen_sessie_gevonden.
+
+No_url_defined=Geen_URL_gedefinieerd
+No_XMP_metadata_found_in_=
+
+not=niet
+
+not_found=niet_gevonden
+
+Not_saved_(empty_session)=Niet_opgeslagen
+
+Note_that_the_entry_causing_the_problem_has_been_selected.=Merk_op_dat_de_entry_die_het_probleem_veroorzaakt_geselecteerd_werd.
+
+Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Merk_op_dat_u_de_volledig_gekwalificeerde_klassenaam_voor_de_"look_and_feel"_moet_specificeren,
+
+Nothing_to_redo=Niets_om_te_herstellen
+
+Nothing_to_undo=Niets_om_ongedaan_te_maken
+
+# The next is used like in "References found: 1  Number of references to fetch?"
+Number_of_references_to_fetch?=Aantal_referenties_om_op_te_halen?
+
+occurences=voorkomens
+
+OK=OK
+
+Ok=OK
+One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=
+
+One_or_more_keys_will_be_overwritten._Continue?=E\u00e9n_of_meerdere_sleutels_zullen_overschreven_worden._Verder_gaan?
+Only_one_item_is_supported=
+
+Open=Openen
+
+Open_BibTeX_database=Open_BibTeX-database
+
+Open_database=Open_database
+
+Open_editor_when_a_new_entry_is_created=Open_editor_wanneer_een_nieuwe_entry_aangemaakt_werd
+
+Open_file=Open_bestand
+
+Open_last_edited_databases_at_startup=Open_laatst_aangepaste_databases_bij_het_opstarten
+
+Open_PDF_or_PS=Open_PDF_of_PS
+
+Open_right-click_menu_with_Ctrl+left_button=Open_rechtsklik-menu_met_Ctrl_+_linkse_muisknop
+
+Open_URL_or_DOI=Open_URL_of_DOI
+OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
+
+Opened_database=Geopende_database
+
+Opening=Aan_het_openen
+
+Opening_preferences...=Instellingen_aan_het_openen
+OpenOffice_Calc=OpenOffice_Calc
+OpenOffice_CSV=
+Operation_canceled.\n=Operatie_geannuleerd.\n
+Operation_not_supported=
+
+Optional_fields=Optionele_velden
+
+Options=Opties
+
+or=of
+
+out_of=van
+
+Output=Uitvoer
+
+Output_or_export_file=Geef_uitvoer_of_exporteer_bestand
+
+Override=Wijzigen
+
+Override_default_file_directories=Wijzig_standaard_bestandsmappen
+
+Override_default_font_settings=Wijzig_standaard_lettertypeinstellingen
+
+override_the_bibtex_key_by_the_selected_text=wijzig_de_BibTeX-sleutel_door_de_geselecteerde_tekst
+Overwrite=
+Overwrite_existing_field_values=Overschrijf_bestaande_veld_waarden
+
+Overwrite_keys=Overschrijf_sleutels
+
+pairs_processed=paren_verwerkt
+Password_\:=
+
+Paste=Plakken
+
+paste_entries=plak_entries
+
+paste_entry=plak_entry
+Paste_from_clipboard=
+
+Pasted=Geplakt
+
+Path_to_%0_not_defined=
+
+Path_to_LatexEditor_(LEd.exe)=
+
+Path_to_LyX_pipe=Pad_naar_LyX-pipe
+
+Path_to_Vim=
+
+Path_to_WinEdt.exe=Pad_naar_WinEdt.exe
+
+PDF_directory=PDF_map
+PDF_does_not_exist=
+
+Personal_journal_list=Persoonlijke_tijdschriften_lijst
+
+Plain_text_import=Onopgemaakte_tekst_importeren
+
+Please_check_your_network_connection_to_this_machine.=Controleer_uw_netwerkverbinding_naar_deze_machine.
+
+Please_enter_a_name_for_the_group.=Geef_a.u.b._een_naam_voor_de_groep.
+
+Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Geef_a.u.b._een_zoekterm._Bijvoorbeeld,_om_alle_velden_te_doorzoeken_naar_<b>Smith</b>,_geef_in:%c<p><tt>smith</tt><p>Om_het_veld_<b>Author</b>_te_doorzoeken_naar_<b>Smith</b>_en_het_veld_<b>Title</b>_naar_<b>electrical</b>,_geef [...]
+
+Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Geef_a.u.b._het_veld_om_te_doorzoeken_(bv._<b>keywords</b>)_en_het_sleutelword_om_naar_te_zoeken_(bv._<b>electrical</b>).
+
+Please_enter_the_string's_label=Geef_a.u.b._het_label_van_de_constante_in
+
+Please_select_an_importer=Selecteer_a.u.b._een_importer
+
+Please_select_an_importer.=Selecteer_a.u.b._een_importer.
+
+Please_select_exactly_one_group_to_move.=Selecteer_a.u.b._exact_\u00e9\u00e9n_groep_om_te_verplaatsen.
+Please_specify_the_=
+
+Possible_duplicate_entries=Mogelijke_dubbele_entries
+
+Possible_duplicate_of_existing_entry._Click_to_resolve.=Mogelijk_duplicaat_van_bestaande_entry.
+
+Preamble=Inleiding
+
+Preferences=Instellingen
+
+Preferences_recorded.=Instellingen_opgeslagen.
+
+Preview=Voorbeeld
+
+Previous_entry=Vorige_entry
+
+Primary_sort_criterion=Primair_sorteercriterium
+Print_Preview=
+Printing_Entry_Preview=
+
+Problem_with_parsing_entry=Probleem_met_entry_ontleding
+Processing_=
+
+Program_output=Programma_uitvoer
+
+PS_directory=PS_map
+Push_entries_to_external_application_(%0)=Stuur_entries_naar_externe_applicatie_(%0)
+
+Push_selection_to_Emacs=Stuur_selectie_naar_Emacs
+
+Push_selection_to_LyX/Kile=Stuur_selectie_naar_LyX/Kile
+Push_selection_to_Vim=
+
+Push_selection_to_WinEdt=Stuur_selectie_naar_WinEdt
+
+Push_to_LatexEditor=Stuur_selectie_naar_LaTeXEditor
+Pushed_citations_to_%0=
+
+Pushed_citations_to_Emacs=Citaten_naar_Emacs_gestuurd
+Pushed_citations_to_Vim=
+
+Pushed_citations_to_WinEdt=Citaten_naar_WinEdt_gestuurd
+
+Pushed_the_citations_for_the_following_rows_to=De_citaten_voor_de_volgende_rijen_gestuurd_naar
+
+Quit_JabRef=JabRef_afsluiten
+
+Quit_synchronization=Synchronisatie_afsluiten
+
+Raw_source=Ruwe_bron
+
+Really_delete_the_selected=Bent_u_zeker_over_het_verwijderen_van_deze
+
+Rearrange_tabs_alphabetically_by_title=Rangschik_tabbladen_alfabetisch_op_titel
+
+Redo=Herstellen
+
+Reference_database=Referentie_database
+
+# The next two lines are used like in "References found: 1  Number of references to fetch?"
+References_found=Referenties_gevonden
+
+Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Verfijn_supergroep\:_Wanneer_geselecteerd,_toon_de_entries_die_in_deze_groep_en_zijn_supergroep_zitten
+
+Refresh_view=Beeld_verversen
+
+Regular_Expression=Regular_Expression
+
+Remember_these_entry_types?=Deze_entry_types_behouden?
+
+Remote_operation=Externe_operatie
+
+Remote_server_port=Externe_server_poort
+
+Remove=Verwijderen
+
+Remove_all?=Alles_verwijderen?
+
+Remove_all_subgroups=Verwijder_alle_subgroepen
+
+Remove_all_subgroups_of_"%0"?=Alle_subgroepen_van_"%0"_verwijderen?
+
+Remove_double_braces_around_BibTeX_fields_when_loading.=Verwijder_dubbele_haakjes_rond_BibTeX-velden_bij_het_laden
+
+Remove_duplicates=Verwijder_dubbels
+
+Remove_entry_from_import=Verwijder_entry_uit_importering
+
+Remove_entry_selection_from_this_group=Verwijder_entry_selectie_van_deze_groep
+
+Remove_entry_type=Verwijder_entry_type
+Remove_file_link_(DELETE)=
+
+remove_from_group=verwijder_uit_groep
+
+Remove_from_group=Verwijder_uit_groep
+
+Remove_group=Verwijder_groep
+
+Remove_group,_keep_subgroups=Verwijder_groep,_behoud_subgroepen
+
+Remove_group_"%0"?=Verwijder_groep_"%0"?
+
+Remove_group_"%0"_and_its_subgroups?=Verwijder_groep_"%0"_en_zijn_subgroepen?
+
+remove_group_(keep_subgroups)=verwijder_groep_(behoud_subgroepen)
+
+remove_group_and_subgroups=verwijder_groep_en_subgroepen
+
+Remove_group_and_subgroups=Verwijder_groep_en_subgroepen
+
+Remove_link=
+
+Remove_old_entry=Verwijder_oude_entry
+
+Remove_selected_strings=Verwijder_geselecteerde_entries
+
+remove_string_=verwijder_constante_
+
+Removed_group_"%0".=Groep_"%0"_verwijderd.
+
+Removed_group_"%0"_and_its_subgroups.=Groep_"%0"_en_zijn_subgroepen_verwijderd.
+
+Removed_string=Constante_verwijderd
+
+Renamed_string=Constante_hernoemd
+
+Replace=Vervangen
+
+Replace_(regular_expression)=Vervang_(regular_expression)
+
+Replace_string=Tekst_vervangen
+
+Replace_with=Vervang_door
+
+Replaced=Vervangen
+
+Required_fields=Vereiste_velden
+
+Reset_all=Herstel_alles
+Reset_file_type_definitons=
+
+Resolve_strings_for_all_fields_except=
+Resolve_strings_for_standard_BibTeX_fields_only=
+
+resolved=opgelost
+
+Results=Resultaten
+
+Revert_to_original_source=Herstel_naar_originele_bron
+
+Review=Recensie
+
+Review_changes=Bekijk_veranderingen
+
+Right=Rechts
+root=
+
+Save=Opslaan
+Save_all_finished.=
+
+Save_all_open_databases=
+
+Save_before_closing=Opslaan_voor_afsluiten
+
+Save_database=Database_opslaan
+Save_database_as_...=Database_opslaan_als_...
+
+Save_entries_in_their_original_order=Sla_entries_in_hun_originele_volgorde_op
+
+Save_failed=Opslaan_mislukt
+
+Save_failed_during_backup_creation=Opslaan_mislukt_tijdens_creatie_van_backup
+
+Save_failed_while_committing_changes=Opslaan_mislukt_bij_het_vastleggen_van_veranderingen
+
+Save_ordered_by_author/editor/year=Sla_gesorteerd_op_auteur/editor/jaar_op
+Save_selected_as_...=Sla_geselecteerde_op_als_...
+
+Saved_database=Database_opgeslagen
+
+Saved_selected_to=Geselecteerde_opgeslagen_naar
+
+Saved_session=Sessie_opgeslagen
+
+Saving=Aan_het_opslaan
+Saving_all_databases...=
+
+Saving_database=Database_aan_het_opslaan
+
+Scan=Doorzoeken
+
+Search=Zoeken
+
+Search_All_Fields=Zoek_in_Alle_Velden
+
+Search_all_fields=Zoek_in_alle_velden
+
+Search_error=Zoek_foutmelding
+
+Search_expression=Zoek_expressie
+
+Search_for=Zoek_naar
+
+Search_general_fields=Zoek_algemene_velden
+
+Search_IEEEXplore=Zoek_IEEEXplore
+Search_IEEExplore=
+
+Search_optional_fields=Zoek_optionele_velden
+
+Search_required_fields=Zoek_vereiste_velden
+
+Search_Specified_Field(s)=Zoek_Gespecifieerde_Veld(en)
+
+Searched_database._Global_number_of_hits=Database_doorzocht._Globaal_aantal_gevonden_resultaten
+
+Searched_database._Number_of_hits=Database_doorzocht._Aantal_gevonden_resultaten
+
+Searching_for_%0_file=Aan_het_zoeken_naar_%0_bestand
+
+Searching_for_duplicates...=Aan_het_zoeken_naar_dubbels
+
+Searching_for_files=
+
+Secondary_sort_criterion=Secundair_sorteercriterium
+
+Select=Selecteer
+
+Select_a_Zip-archive=Selecteer_een_ZIP-archief
+
+Select_action=Selecteer_actie
+
+Select_all=Alles_selecteren
+
+Select_Classpath_of_New_Importer=Selecteer_Classpath_van_Nieuwe_Importer
+
+Select_encoding=Selecteer_encodering
+
+Select_entries_in_group_selection=Selecteer_entries_in_groep_selectie
+
+Select_entry_type=Selecteer_entry_type
+Select_external_application=Selecteer_externe_applicatie
+
+Select_file_from_ZIP-archive=Selecteer_bestand_van_ZIP-archief
+
+Select_format=Selecteer_formaat
+Select_icon=
+
+Select_matches=Selecteer_overeenkomsten
+
+Select_new_ImportFormat_Subclass=Selecteer_nieuw_ImportFormat_Subklasse
+
+Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Selecteer_de_boom_knopen_om_veranderingen_te_tonen_en_te_accepteren_of_afwijzen
+Selected_entries=Geselecteerde_entries
+
+Selector_enabled_fields=Selecteer_velden_die_in_werking_zijn
+Server_Hostname_\:=
+Server_Type_\:=
+
+Set_field=Veld_instellen
+Set_fields=Velden_instellen
+
+Set_general_fields=Algemene_velden_instellen
+Set_main_external_file_directory=
+
+Set_table_font=Tabel_lettertype_instellen
+
+Settings=Instellingen
+
+Setup_selectors=Selectors_instellen
+
+Short_form=Korte_vorm
+
+Shortcut=Snelkoppeling
+
+Show/edit_BibTeX_source=Toon/bewerk_BibTeX-broncode
+
+Show_'Firstname_Lastname'=Toon_'Voornaam_Familienaam'
+
+Show_'Lastname,_Firstname'=Toon_'Familienaam,_Voornaam'
+
+Show_BibTeX_source_by_default=Toon_standaard_BibTeX-broncode
+
+Show_BibTeX_source_panel=Toon_BibTeX-bronpaneel
+
+Show_confirmation_dialog_when_deleting_entries=Toon_bevestigingsdialoog_bij_verwijderen_van_entries
+
+Show_description=Toon_beschrijving
+
+Show_dynamic_groups_in_<i>italics</i>=Toon_dynamische_groepen_<i>cursief</i>
+
+Show_entries_*not*_in_group_selection=Toon_entries_die_zich_*niet*_in_de_groep_selectie_bevinden
+
+Show_file_column=
+
+Show_icons_for_groups=Toon_iconen_voor_groepen
+Show_last_names_only=Toon_enkel_laatste_namen
+
+Show_names_unchanged=Toon_namen_onveranderd
+
+Show_one_less_rows=Toon_\u00e9\u00e9n_rij_minder
+
+Show_one_more_row=Toon_\u00e9\u00e9n_rij_meer
+
+Show_optional_fields=Toon_optionele_velden
+
+Show_PDF/PS_column=Toon_PDF/PS-kolom
+
+Show_required_fields=Toon_vereiste_velden
+
+Show_URL/DOI_column=Toon_URL/DOI-kolom
+
+Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Toon_waarschuwingsdialoog_wanneer_een_dubbele_BibTeX-sleutel_ingegeven_wordt
+
+Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Toon_waarschuwingsdialoog_wanneer_een_lege_BibTeX-sleutel_ingegeven_wordt
+
+Simple_HTML=Eenvoudige_HTML
+
+Size=Grootte
+
+Skip=Overslaan
+Skipped_-_No_PDF_linked=Overgeslagen_-_Geen_PDF_gelinkt
+Skipped_-_PDF_does_not_exist=Overgeslagen_-_PDF_bestaat_niet
+Skipped_entry.=Overgeslagen_entry.
+
+Sort_alphabetically=Alphabetisch_sorteren
+
+Sort_Automatically=Automatisch_sorteren
+
+Sort_order=
+
+sort_subgroups=subgroepen_sorteren
+
+Sorted_all_subgroups_recursively.=Alle_subgroepen_recursief_gesorteerd.
+
+Sorted_immediate_subgroups.=Onmiddellijke_subgroepen_sorteren.
+
+source_edit=broncode_aanpassen
+Special_Name_Formatters=
+
+Special_table_columns=Speciale_tabelkolommen
+SQL_connection_established.=
+
+Start_incremental_search=Start_incrementele_zoekopdracht
+
+Start_search=Start_zoeken
+
+Starting_import=Importeren_aan_het_starten
+
+Statically_group_entries_by_manual_assignment=Groepeer_entries_statisch_door_manuele_toekenning
+
+Status=Status
+
+Stop=Stop
+
+Store_journal_abbreviations=Tijdschrift_afkortingen_opslaan
+
+Store_string=Constante_opslaan
+
+Store_the_following_fields_with_braces_around_capital_letters=Volgende_velden_met_haakjes_rond_hoofdletters_opslaan
+
+Stored_entry=Entry_opgeslagen
+
+Strings=Constanten
+
+Strings_for_database=Constanten_voor_database
+
+Subdatabase_from_aux=Subdatabase_van_aux
+
+Suggest=Voorstellen
+
+#### These lines were changed:
+Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Schakelt_tussen_volledige_en_afgekorte_tijdschriftnaam_als_het_tijdschrift_gekend_is.
+
+Synchronize_%0_links=Synchroniseer_%0_snelkoppelingen
+Synchronize_file_links=
+
+Synchronizing_%0_links...=%0_snelkoppelingen_aan_het_synchroniseren
+
+Table_appearance=Tabel_uiterlijk
+
+Table_background_color=Tabel_achtergrondkleur
+
+Table_grid_color=Tabel_roosterkleur
+
+Table_text_color=Tabel_tekstkleur
+
+Tabname=Tabblad_naam
+Target_file_cannot_be_a_directory.=
+
+Tertiary_sort_criterion=Tertiair_sorteercriterium
+
+Test=Test
+
+Text_Input_Area=Tekst_Invoer_Gebied
+
+The_#_character_is_not_allowed_in_BibTeX_fields=Het_#_teken_is_niet_toegestand_in_BibTeX-velden
+
+The_chosen_date_format_for_new_entries_is_not_valid=Het_gekozen_datumformaat_voor_nieuwe_entries_is_niet_geldig
+
+The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=
+
+The_CiteSeer_fetch_operation_returned_zero_results.=De_CiteSeerX_ophaaloperatie_gaf_nul_resultaten_terug.
+
+The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=
+
+the_field_<b>%0</b>=het_veld_<b>%0</b>
+
+The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Het_bestand<BR>'%0'<BR>werd_extern_gewijzigd!
+
+The_group_"%0"_already_contains_the_selection.=De_groep_"%0"_bevat_reeds_de_selectie.
+
+The_label_of_the_string_can_not_be_a_number.=Het_label_van_een_constante_mag_geen_nummer_zijn.
+
+The_label_of_the_string_can_not_contain_spaces.=Het_label_van_een_constante_mag_geen_spaties_bevatten.
+
+The_label_of_the_string_can_not_contain_the_'#'_character.=Het_label_van_een_constante_mag_het_'#'_teken_niet_bevatten.
+
+The_output_option_depends_on_a_valid_import_option.=De_uitvoeroptie_is_afhankelijk_van_een_geldige_importeeroptie.
+The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=
+
+The_regular_expression_<b>%0</b>_is_invalid%c=De_regular_expression_<b>%0</b>_is_ongeldig%c
+
+The_search_is_case_insensitive.=De_zoekopdracht_is_hoofdletterongevoelig.
+
+The_search_is_case_sensitive.=De_zoekopdracht_is_hoofdlettergevoelig.
+
+The_string_has_been_removed_locally=De_constante_werd_lokaal_verwijderd
+
+There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Er_zijn_mogelijke_dubbels_(aangeduid_met_een_'D'_icoon)_die_nog_niet_opgelost_werden._Verdergaan?
+
+this_button_will_update=deze_knop_zal_update_uitvoeren
+This_database_was_written_using_an_older_version_of_JabRef.=
+This_entry_has_no_BibTeX_key._Generate_key_now?=
+
+This_entry_is_incomplete=Deze_entry_is_onvolledig
+
+This_entry_type_cannot_be_removed.=Dit_entry_type_kan_niet_verwijderd_worden.
+This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=
+
+This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Deze_groep_bevat_entries_gebaseerd_op_manuele_toekenning._Entries_kunnen_aan_deze_groep_toegekend_worden_door_ze_te_s [...]
+
+This_group_contains_entries_in_which=Deze_groep_bevat_entries_waarin
+
+This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Deze_groep_bevat_entries_waarin_elk_veld_de_regular_expression_<b>%0</b>_bevat
+
+This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Deze_groep_bevat_entries_waarin_elk_veld_de_term_<b>%0</b>_bevat
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Deze_groep_bevat_entries_waarin_het_<b>%0</b>_veld_het_sleutelwoord_<b>%1</b>_bevat
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Deze_groep_bevat_entries_waarin_het_<b>%0</b>_veld_de_regular_expression_<b>%1</b>_bevat
+
+This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Dit_is_een_simpele_kopieer_en_plak_dialoog_om_enkele_velden_vanuit_normale_tekst_te_importeren.
+
+This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dit_zorgt_ervoor_dat_JabRef_elke_%0_snelkoppeling_op_zoekt_en_controleert_of_het_bestand_bestaat._Indien_dit_niet_het_geval_is,_zullen_u_opties_gegeven_worden<BR>om_het_probleem_op_te_lossen.
+
+This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Deze_operatie_vereist_dat_alle_geselecteerde_entries_BibTeX-sleutels_gedefinieerd_hebben.
+This_operation_requires_at_least_one_entry.=
+
+This_operation_requires_one_or_more_entries_to_be_selected.=Deze_operatie_vereist_dat_een_of_meer_entries_geselecteerd_zijn.
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=
+
+To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Om_in_te_stellen,_ga_naar_<B>Opties_->_Beheer_tijdschrift_afkortingen</B>
+
+Toggle_abbreviation=Toon_afkorting
+Toggle_entry_preview=Toon_entry_voorbeeld
+Toggle_groups_interface=Toon_groepenvenster
+Toggle_search_panel=Toon_zoekpaneel
+
+Try_different_encoding=Probeer_een_andere_encodering
+
+Type_set_to_'other'=Type_ingesteld_als_'other'
+Unabbreviate_journal_names_of_the_selected_entries=Maak_afkortingen_van_tijdschriftnamen_van_geselecteerde_entries_ongedaan
+Unabbreviated_%0_journal_names.=
+
+unable_to_access_LyX-pipe=kan_geen_toegang_krijgen_tot_LyX-pipe
+
+Unable_to_create_graphical_interface=kan_grafische_interface_niet_aanmaken
+Unable_to_open_file.=
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=
+Unable_to_read_default_icon_theme.=Kan_standaard_icoonthema_niet_lezen.
+Unable_to_read_icon_theme_file=Kan_icoonthema_bestand_niet_lezen
+
+unable_to_write_to=kan_niet_schrijven_naar
+Undefined_file_type=
+
+Undo=Ongedaan_maken
+
+Union=Unie
+
+Unknown_bibtex_entries=Onbekende_BibTeX-entries
+
+unknown_edit=onbekende_aanpassing
+
+unknown_entry_type=onbekend_entry_type
+
+Unknown_export_format=Onbekend_exporteerformaat
+
+Unmark_all=Alle_markeringen_ongedaan_maken
+
+Unmark_entries=Alle_markeringen_van_entries_ongedaan_maken
+
+Unmark_entry=Markering_van_entry_ongedaan_maken
+
+Unmarked_selected=Markering_van_geselecteerde_ongedaan_maken
+
+Unpack_EndNote_filter_set=EndNote_filter_set_uitpakken
+
+Unpacked_file.=Uitgepakt_bestand.
+
+Unsupported_version_of_class_%0\:_%1=Niet_ondersteunde_versie_van_klasse_%0:_%1
+
+untitled=naamloos
+
+Up=Omhoog
+
+Update_to_current_column_widths=Update_naar_huidige_kolombreedtes
+
+Updated_group_selection=Groep_selectie_geupdate
+Upgrade_external_links=
+Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=
+Upgrade_file=
+Upgrade_old_external_file_links_to_use_the_new_feature=
+Upgraded_links.=
+UPPER=
+Upper_Each_First=
+Upper_first=
+
+usage=gebruik
+
+Use_antialiasing_font=Gebruik_antialiasing_lettertype
+Use_autocompletion_for_the_following_fields=
+Use_custom_icon_theme=Gebruik_extern_icoonthema
+Use_default_viewer=
+
+Use_inspection_window_also_when_a_single_entry_is_imported.=Gebruik_inspectievenster_ook_wanneer_een_enkele_entry_ge\u00efmporteerd_wordt
+
+Use_native_file_dialog=Gebruik_"native_bestandsdialoog
+
+Use_other_look_and_feel=Gebruik_andere_"look_and_feel"
+Use_Regular_Expression_Search=Gebruik_Regular_Expression_Zoekopdracht
+
+Use_regular_expressions=Gebruik_regular_expressions
+
+Use_the_following_delimiter_character(s)=Gebruik_volgende_teken(s)_als_scheidingsteken
+Username_\:=
+
+Value_cleared_externally=Waarde_extern_gewist
+
+Value_set_externally=Waarde_extern_ingesteld
+
+verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=verifieer_dat_LyX_draait_en_dat_de_lyxpipe_geldig_is
+
+View=Beeld
+Vim_Server_Name=
+
+Waiting_for_ArXiv...=
+
+Warn_about_unresolved_duplicates_when_closing_inspection_window=Waarschuw_bij_onopgeloste_dubbels_bij_het_sluiten_van_het_inspectievenster
+
+Warn_before_overwriting_existing_keys=Waarschuwing_v\u00f3\u00f3r_het_overschrijven_van_bestaande_sleutels
+
+Warning=Waarschuwing
+Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=
+
+Warning_there_is_a_duplicate_key=Waarschuwing!_Er_is_een_dubbele_sleutel
+
+Warnings=Waarschuwingen
+
+web_link=web-link
+
+What_do_you_want_to_do?=Wat_wilt_u_doen?
+
+When_adding/removing_keywords,_separate_them_by=Wanneer_u_sleutelwoorden_toevoegt/verwijdert,_scheid_ze_dan_door
+Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Zal_XPM_metadata_naar_de_PDFs_gelinkt_vanuit_geselecteerde_entries_schrijven.
+
+with=met
+
+Word=Woord
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=Schrijf_BibTeX-entry_als_XMP-metadata_naar_PDF.
+Write_XMP=Schrijf_XMP
+Write_XMP-metadata=
+Write_XMP-metadata_for_all_PDFs_in_current_database?=
+
+Writing_XMP=XMP_aan_het_schrijven
+Writing_XMP_metadata...=XPM_metadata_aan_het_schrijven...
+Writing_XMP_metadata_for_selected_entries...=XPM_metadata_voor_geselecteerde_entries_aan_het_schrijven...
+Writing_XMP_to_'%0'...=
+
+Wrong_file_format=Verkeerd_bestandsformaat
+Wrote_XMP-metadata=
+Wrote_XMP_to_'%0'.=
+
+XMP-annotated_PDF=XMP_geannoteerde_PDF
+XMP_Export_Privacy_Settings=
+
+XMP_metadata=XPM_metadata
+XMP_metadata_found_in_PDF\:_%0=
+
+You_must_restart_JabRef_for_this_to_come_into_effect.=U_moet_JabRef_herstarten_om_dit_toe_te_passen.
+You_have_changed_the_language_setting.=U_heeft_de_taalinstelling_veranderd.
+You_have_changed_the_look_and_feel_setting.=
+
+You_have_cleared_this_field._Original_value=U_heeft_dit_veld_gewist._Originele_waarde
+
+You_have_entered_an_invalid_search_'%0'.=
+
+You_must_choose_a_file_name_to_store_journal_abbreviations=U_moet_een_bestandsnaam_kiezen_om_tijdschrift_afkortingen_op_te_slaan
+
+You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=U_moet_JabRef_herstarten_zodat_de_nieuwe_sneltoetsen_correct_kunnen_werken.
+
+You_must_set_both_BibTeX_key_and_%0_directory=U_moet_de_BibTeX-sleutel_en_%0_map_instellen
+
+Your_new_key_bindings_have_been_stored.=Uw_nieuwe_sneltoetsen_zijn_opgeslagen.
+The_following_fetchers_are_available\:=
+Could_not_find_fetcher_'%0'=
+Running_Query_'%0'_with_fetcher_'%1'.=
+Please_wait!=
+Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=
+Open_SPIRES_entry=
+Move/Rename_file=
+File_moved=
+Move_file_failed=
+Could_not_move_file=
+Could_not_find_file_'%0'.=
+Move/rename_file=
+Number_of_entries_successfully_imported=
+Import_canceled_by_user=
+Progress\:_%0_of_%1=
+Error_while_fetching_from_JSTOR=
+Fetching_Medline_by_id...=
+Fetching_Medline_by_term...=
+Medline_import_canceled=
+Please_enter_a_valid_number=
+Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=
+An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=
+Error_while_fetching_from_Spires\:_=
+Connect_to_external_SQL_database=
+Export_to_external_SQL_database=
+
+Show_results_in_dialog=
+Global_search=
+Show_search_results_in_a_window=
+Search_results=
+Move_file_to_file_directory?=
+Rename_to_'%0'=
+Move_to_file_directory=
+
+You_have_changed_the_menu_and_label_font_size.=
+
+Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=
+Protected_database=
+Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=
+Database_protection=
+Unable_to_save_database=
+BibTeX_key_generator=
+Unable_to_open_link.=
+Search_JSTOR=
+Attempting_SQL_import...=
+BibO_RDF=
+HTML_parser=
+Move_the_keyboard_focus_to_the_entry_table=
+MIME_type=
+This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=
+Legacy_file_fields=
+This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"
+The_ACM_Digital_Library=
+Reset=
+Use_IEEE_LaTeX_abbreviations=
+The_Guide_to_Computing_Literature=
+Search_ACM_Portal=
+Connection_to_ACM_Portal_failed=
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=
+Settings_for_%0=
+Insert_selected_citations_into_Vim=
+RIS=
+Assign_exclusively_to_group=
+Bad_Request_'%0'.=
+Mark_entries_imported_into_an_existing_database=
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=
+Forward=
+Back=
+Sort_the_following_fields_as_numeric_fields=
+Line_%0\:_Found_corrupted_BibTeX-key.=
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=
+Finished_downloading_full_text_document=
+Unable_to_find_full_text_document_in_the_linked_web_page.=
+Connection_error_when_trying_to_find_full_text_document.=
+This_entry_provides_no_URL_or_DOI_links.=
+Full_text_article_download_failed=
+Update_to_current_column_order=
+
+Rename_field=
+Set/clear/rename_fields=
+Rename_field_to\:=
+Move_contents_of_a_field_into_a_field_with_a_different_name=
+
+You_can_only_rename_one_field_at_a_time=
+Remove_all_broken_links=
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=
+
+Plugin_installer=
+Unable_to_create_plugin_directory=
+Unable_to_copy_file=
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=
+Unable_to_create_user_plugin_directory=
+Plugin_installation_failed.=
+The_same_version_of_this_plugin_is_already_installed.=
+A_newer_version_of_this_plugin_is_already_installed.=
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=
+Old_versions_deleted_successfully.=
+
+Install_plugin=
+Download_plugin=
+Plugin_manager=
+Delete_the_%0_selected_plugins?=
+Delete_plugins=
+Delete_the_selected_plugin?=
+Delete_plugin=
+Enter_download_URL=
+Plugin_name=
+Version=
+Unknown=
+Not_loaded=
+Loaded=
+Could_not_determine_version_of_=
+Install_anyway?=
+
+Looking_for_full_text_document...=
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=
+
+Autosave=
+Prompt_before_recovering_a_database_from_an_autosave_file=
+Autosave_interval_(minutes)=
+Do_you_want_to_recover_the_database_from_the_autosave_file?=
+Recover_from_autosave=
+%0_warnings=
+
+Save_in_current_table_sort_order=
+Export_in_current_table_sort_order=
+Export_ordered_by_author/editor/year=
+Export_entries_in_their_original_order=
+Error_opening_file_'%0'.=
+Autosave_of_file_'%0'=
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=
+
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=
+Plugins_installed_in_other_locations\:=
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=
+
+Formatter_not_found\:_%0=
+The_following_formatters_could_not_be_found=
+
+Clear_inputarea=
+Automatically_set_file_links_for_this_entry=
+Could_not_save,_file_locked_by_another_JabRef_instance.=
+File_is_locked_by_another_JabRef_instance.=
+Do_you_want_to_override_the_file_lock?=
+File_locked=
+Current_tmp_value=
+Metadata_change=
+Changes_have_been_made_to_the_following_metadata_elements=
+
+Generate_groups_for_author_last_names=
+Generate_groups_for_editor_last_names=
+Generate_groups_from_keywords_in_a_BibTeX_field=
+Enforce_legal_characters_in_BibTeX_keys=
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=
+Before_saving,_please_edit_any_strings_containing_the_#_character.=
+
+Save_without_backup?=
+Unable_to_create_backup=
+
+File_directory_is_not_set_or_does_not_exist.=
+Move_file_to_file_directory.=
+Rename_file_to=
+<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=
+static_group=
+dynamic_group=
+refines_supergroup=
+includes_subgroups=
+contains=
+search_expression=
+
+Disable_file_renaming_in_non-native_file_dialog=
+File_dialog=
+No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=
+
+Search_ScienceDirect=
+Error_while_fetching_from_ScienceDirect=
+
+Error_initializing_custom_export_format_from_string_'%0'=
+
+BibLaTeX_mode=
+Optional_fields_2=
+Please_wait=
+Waiting_for_save_operation_to_finish=
+Resolving_duplicate_BibTeX_keys...=
+Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=
+This_database_contains_one_or_more_duplicated_BibTeX_keys.=
+Do_you_want_to_resolve_duplicate_keys_now?=
+
+Find_and_remove_duplicate_BibTeX_keys=
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=
+Duplicate_BibTeX_key=
+Duplicate_key=
+Generate_key=
+Import_marking_color=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=
+BibTeX_importer=
+Always_add_letter_(a,_b,_...)_to_generated_keys=
+
+Ensure_unique_keys_using_letters_(a,_b,_...)=
+Ensure_unique_keys_using_letters_(b,_c,_...)=
+Entry_editor_active_background_color=
+Entry_editor_background_color=
+Entry_editor_font_color=
+Entry_editor_invalid_field_color=
+
+Table_and_entry_editor_colors=
+
+An_autosave_file_was_found_for_this_database._This_could_indicate_=
+that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=
+General_file_directory=
+User-specific_file_directory=
+Error_setting_look_and_feel=
+Search_failed\:_illegal_search_expression=
+Show_ArXiv_column=
+<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=
+
+You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=
+Automatically_open_browse_dialog_when_creating_new_file_link=
+
+Import_Metadata_from\:=
+Choose_the_source_for_the_metadata_import=
+Create_entry_based_on_XMP_data=
+Create_entry_based_on_data_fetched_from=
+Create_blank_entry_linking_the_PDF=
+Only_attach_PDF=
+Mr._dLib_Metadata_Entries_Associated_With\:=
+Mr._dLib_Metadata_Entries_Associated_With_PDF_File=
+Title=
+Author(s)=
+Published_Year=
+No_metadata_found.=
+Mr._dLib_web_service_is_temporarily_unavailable.=
+Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=
+You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=
+No_Internet_Connection.=
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=
+Web_Service_Version_Outdated=
+The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=
+Update_empty_fields_with_data_fetched_from=
+Create_New_Entry=
+Update_Existing_Entry=
+Mr._dLib=
+More_information=
+Fetching_Metadata...=
+Metadata=
+Autocomplete_names_in_'Firstname_Lastname'_format_only=
+Autocomplete_names_in_'Lastname,_Firstname'_format_only=
+Autocomplete_names_in_both_formats=
+Marking_color_%0=
+The_name_'comment'_can_not_be_used_as_an_entry_type_name.=
+You_must_enter_an_integer_value_in_the_text_field_for=
+File_directory=
+Send_as_email=
+References=
+Sending_of_emails=
+Subject_for_sending_an_email_with_references=
+Automatically_open_folders_of_attached_files=
+Create_entry_based_on_content=
+Store_choice_as_default=
+Do_not_show_this_box_again_for_this_import=
+Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=
+Error_creating_email=
+Could_not_open_directory=
+Entries_added_to_an_email=
+exportFormat=
+Output_file_missing=
+No_search_matches.=
+The_output_option_depends_on_a_valid_input_option.=
+Default_import_style_for_drag&drop_of_PDFs=
+Default_PDF_file_link_action=
+File_name_format_pattern=
+PostgreSQL_database=
+DIN_1505=
+Wrong_Format=
+Path_to_gnuclient_or_emacsclient=
+Additional_parameters=
+Encrypted_documents_are_not_supported=
+Cite_selected_entries=
+Cite_selected_entries_with_in-text_citation=
+Cite_special=
+Extra_information_(e.g._page_number)=
+Manage_citations=
+Problem_modifying_citation=
+Citation=
+Context=
+Extra_information=
+Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=
+Styles=
+Select_style=
+This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=
+Journals=
+Cite=
+Cite_in-text=
+Insert_empty_citation=
+Merge_citations=
+Manual_connect=
+Select_Writer_document=
+Sync_OO_bibliography=
+OpenOffice=
+Select_which_open_Writer_document_to_work_on=
+Connected_to_document=
+Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=
+Cite_selected_entries_with_extra_information=
+Ensure_that_the_bibliography_is_up-to-date=
+Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=
+Unable_to_synchronize_bibliography=
+Combine_pairs_of_citations_that_are_separated_by_spaces_only=
+Autodetection_failed=
+Connecting=
+Please_wait...=
+Unable_to_connect=
+Set_connection_parameters=
+Path_to_OpenOffice_directory=
+Path_to_OpenOffice_executable=
+Path_to_OpenOffice_library_dir=
+Autodetect=
+Connection_lost=
+The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=
+The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=
+Automatically_sync_bibliography_when_inserting_citations=
+Look_up_BibTeX_entries_in_the_active_tab_only=
+Look_up_BibTeX_entries_in_all_open_databases=
+Use_in-parenthesis_citation=
+Use_in-text_citation=
+Autodetecting_paths...=
+Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=
+Could_not_find_OpenOffice_installation=
+Directories=
+Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=
+Choose_OpenOffice_executable=
+Select_document=
+Edit_Group_Membership=
+PostgreSQL=
+Highlight_Words=
+JSTOR_import_cancelled=
+HTML_list=
+Click_group_to_toggle_membership_of_selected_entries=
+Use_EMACS_23_insertion_string=
+Normalize_to_BibTeX_name_format=
+If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=
+Could_not_open_%0=
+Unknown_import_format=
+Open_INSPIRE_entry=
+An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=
+Error_while_fetching_from_Inspire\:_=
+Web_search=
+Autocomplete_names=
+You_must_select_either_a_valid_style_file,_or_use_the_default_style.=
+Default_style=
+Choose_style_file_directly=
+Choose_from_a_directory=
+No_directory_defined_for_%0-files=
+Allow_file_links_relative_to_each_bib_file's_location=
+Style_selection=
+The_panel_below_shows_the_definition_of_the_default_style.=
+If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=
+
+Default_style_(author-year_citations)=
+Default_style_(numerical_citations)=
+No_valid_style_file_defined=
+Choose_pattern=
+Use_the_bib_file_location_as_primary_file_directory=
+Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=
+Built-in_journal_list=
+OpenOffice/LibreOffice_connection=
+You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=
+JabRef_includes_a_built-in_list_of_journal_abbreviations.=
+You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=
+You_must_select_either_a_valid_style_file,_or_use_a_default_style.=
+Show=
+This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=
+Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=
+
+This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=
+You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=
+First_select_entries_to_clean_up.=
+Cleanup_entry=
+Autogenerate_PDF_Names=
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=
+File_rename_failed_for=
+You_have_toggled_the_BibLaTeX_mode.=
+Use_full_firstname_whenever_possible=
+Use_abbreviated_firstname_whenever_possible=
+Use_abbreviated_and_full_firstname=
+Autocompletion_options=
+Autocomplete_after_following_number_of_characters=
+Name_format_used_for_autocompletion=
+Treatment_of_first_names=
+No_icon_found_for_%0=
+Cleanup_entries=
+Automatically_assign_new_entry_to_selected_groups=
+Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
+Format_content_of_month_field_to_#mon#=
+Ensure_that_page_ranges_are_of_the_form_num1--num2=
+Make_paths_of_linked_files_relative_(if_possible)=
+Rename_PDFs_to_given_file_name_format_pattern=
+Rename_only_PDFs_having_a_relative_path=
+What_would_you_like_to_clean_up?=
+Doing_a_cleanup_for_%0_entries...=
+No_entry_needed_a_clean_up=
+One_entry_needed_a_clean_up=
+%0_entries_needed_a_clean_up=
+Imported_=
+Error_importing_from_database=
+Minimize_to_system_tray=
+
+Incomplete_search_results=
+%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=
+
+Error_downloading_file_'%0'=
+Download_failed=
+
+%0_databases_will_be_imported=
+Importing_cancelled=
+There_are_no_available_databases_to_be_imported=
+Import_from_SQL_database=
+Imported_%0_databases_successfully=
+<_CREATE_NEW_DATABASE_>=
+Remove_Selected=
+SQL_Database_Exporter=
+Select_target_SQL_database\:=
+SQL_Database_Importer=
+Please_select_which_JabRef_databases_do_you_want_to_import\:=
+
+Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
+Attach_file=
+
+Setting_all_preferences_to_default_values.=
+Resetting_preference_key_'%0'=
+Unknown_preference_key_'%0'=
+Unable_to_clear_preferences.=
+
+Reset_preferences_(key1,key2,..._or_'all')=
+Find_unlinked_files=
+Select_All=
+Unselect_All=
+Expand_All=
+Collapse_All=
+Select_Directory=
+Choose_Directory=
+Use_the_selected_directory_to_start_with_the_search.=
+Browse...=
+Opens_the_file_browser.=
+Scan_directory=
+Searches_the_selected_directory_for_unlinked_files.=
+Starts_the_import_of_bibtex_entries.=
+Leave_this_dialog.=
+Create_directory_based_keywords=
+Creates_keywords_in_created_entrys_with_directory_pathnames=
+Select_a_directory_where_the_search_shall_start.=
+Select_file_type\:=
+These_files_are_not_linked_in_the_active_database.=
+Entry_type_to_be_created\:=
+Searching_file_system...=
+Importing_into_Database...=
+Select_directory=
+Select_files=
+Bibtex_entry_creation=
+<No_selection>=
+Push_selection_to_TeXstudio=
+Path_to_TeXstudio=
+Program_'%0'_not_found=
+Pushed_citations_to_TeXstudio=
+Unable_to_connect_to_freecite_online_service.=
+Parse_with_FreeCite=
+Insert_selected_citations_into_TeXstudio=
+The_current_BibTeX_key_will_be_overwritten._Continue?=
+Overwrite_key=
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
+An_Error_occurred_while_fetching_from_ADS_(%0)\:=
+Error_while_fetching_from_ADS=
+Error_while_fetching_from_OAI2=
+An_Error_occurred_while_parsing_abstract=
+Unknown_DiVA_entry\:_'%0'.=
+Get_BibTeX_entry_from_DiVA=
+Log=
+Remove_unneccessary_$,_{,_and_}=
diff --git a/src/resource/JabRef_no.properties b/src/resource/JabRef_no.properties
index 9c5a0f5..33c2592 100644
--- a/src/resource/JabRef_no.properties
+++ b/src/resource/JabRef_no.properties
@@ -1,2927 +1,2927 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-
-%0_contains_the_Regular_Expression_<b>%1</b>=%0_inneholder_regul\u00e6ruttrykket_<b>%1</b>
-
-%0_contains_the_term_<b>%1</b>=%0_inneholder_uttrykket_<b>%1</b>
-
-%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_inneholder_ikke_regul\u00e6ruttrykket_<b>%1</b>
-
-%0_doesn't_contain_the_term_<b>%1</b>=%0_inneholder_ikke_uttrykket_<b>%1</b>
-
-%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_matcher_ikke_regul\u00e6ruttrykket_<b>%1</b>
-
-%0_doesn't_match_the_term_<b>%1</b>=%0_matcher_ikke_uttrykket_<b>%1</b>
-
-%0_export_successful=%0-eksport_lyktes
-
-%0_field_set=%0-felt_satt
-
-%0_matches_the_Regular_Expression_<b>%1</b>=%0_matcher_regul\u00e6ruttrykket_<b>%1</b>
-
-%0_matches_the_term_<b>%1</b>=%0_matcher_uttrykket_<b>%1</b>
-
-<field_name>=<feltnavn>
-
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Kunne_ikke_finne_filen_'%0'<BR>linket_fra_enheten_'%1'</HTML>
-
-<no_field>=<ingen_felter>
-
-<select>=<velg>
-
-<select_word>=<velg_ord>
-
-A_string_with_this_label_already_exists=Det_finnes_allerede_en_streng_med_det_navnet
-
-Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Forkort_journalnavn_for_de_valgte_enhetene_(ISO-forkortelse)
-
-Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Forkort_journalnavn_for_de_valgte_enhetene_(MEDLINE-forkortelse)
-
-Abbreviate_names=Forkort_navn
-
-Abbreviated_%0_journal_names.=Fortkortet_%0_journalnavn.
-
-Abbreviation=Forkortelse
-
-About_JabRef=Om_JabRef
-
-Abstract=Sammendrag
-
-Accept=Aksepter
-
-Accept_change=Aksepter_endring
-
-Action=Aksjon
-
-Add=Legg_til
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Legg_til_en_(kompilert)_egendefinert_ImportFormat-klasse_fra_en_classpath._\nStien_trenger_ikke_\u00e5_v\u00e6re_p\u00e5_JabRefs_classpath.
-Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Legg_til_en_(kompilert)_egendefinert_ImportFormat-klasse_fra_en_zip-fil._\nZip-filen_trenger_ikke_\u00e5_v\u00e6re_p\u00e5_JabRefs_classpath.
-
-add_entries_to_group=legg_til_enheter_i_gruppe
-
-Add_entry_selection_to_this_group=Legg_valgte_enheter_til_denne_gruppen
-
-Add_from_folder=Legg_til_fra_mappe
-
-Add_from_jar=Legg_til_fra_jar-fil
-
-add_group=legg_til_gruppe
-
-Add_Group=Legg_til_gruppe
-
-Add_new=Legg_til_ny
-
-Add_Subgroup=Legg_til_undergruppe
-
-Add_to_group=Legg_til_i_gruppe
-
-Added_group_"%0".=La_til_gruppe_"%0".
-
-Added_new=La_til_ny
-
-Added_string=La_til_streng
-
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Dessuten,_enheter_hvis_<b>%0</b>-felt_ikke_inneholder_<b>%1</b>_kan_leg [...]
-
-Advanced=Avansert
-
-All_custom_file_types_will_be_lost._Proceed?=Alle_egendefinerte_filtyper_vil_bli_slettet._Fortsette?
-
-All_Entries=Alle_enheter
-
-All_entries=Alle_enheter
-
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Alle_enhetene_av_denne_typen_vil_bli_klassifisert_som_typel\u00f8se._Fortsette?
-
-All_fields=Alle_felter
-
-All_subgroups_(recursively)=Alle_undergrupper_(rekursivt)
-
-Allow_editing_in_table_cells=Tillat_redigering_av_celler_i_tabellen
-
-An_Exception_ocurred_while_accessing_'%0'=En_feil_oppsto_ved_lesing_av_'%0'
-
-An_SAXException_ocurred_while_parsing_'%0'\:=En_SAXException_forekom_ved_lesing_av_'%0':
-and=og
-
-and_inside_the_JabRef-jar\:=og_innefor_JabRef-jar-filen:
-
-and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=og_klassen_m\u00e5_v\u00e6re_tilgjengelig_i_CLASSPATH_neste_gang_du_starter_JabRef.
-
-any_field_that_matches_the_regular_expression_<b>%0</b>=ethvert_felt_som_matcher_regul\u00e6ruttrykket_<b>%0</b>
-
-Appearance=Utseende
-
-Append=Legg_til
-
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Legg_til_innhold_fra_en_BibTeX-database_i_den_\u00e5pne_database
-
-Append_database=Append_database
-
-append_the_selected_text_to_bibtex_key=legg_til_den_valgte_teksten_til_BibTeX-n\u00f8kkelen
-
-Application=Applikasjon
-
-Apply=Utf\u00f8r
-
-Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argumentene_sendt_til_allerede_aktiv_JabRef-instans._Avslutter.
-
-Assign_entry_selection_exclusively_to_this_group=Legg_valgte_enheter_eksklusivt_til_denne_gruppen
-
-Assign_new_file=Tilordne_ny_fil
-
-Assign_the_original_group's_entries_to_this_group?=Legg_den_opprinnelige_gruppens_enheter_til_denne_gruppen?
-
-Assigned_%0_entries_to_group_"%1".=La_til_%0_enheter_til_gruppen_"%1".
-
-Assigned_1_entry_to_group_"%0".=La_til_1_enhet_til_gruppen_"%0".
-
-At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=I_det_minste_skal_plugin'en_'net.sf.jabref.core'_v\u00e6re_der.
-
-Attach_%0_file=Tilordne_%0-fil
-
-Attach_URL=Tilordne_URL
-
-Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Pr\u00f8v_\u00e5_sette_%0-linker_automatisk_for_dine_enheter._Dette_virker_dersom_en_%0-fil_i_%0-katalogen_din_eller_en_underkatalog<BR>har_navn_likt_en_enhets_BibTeX-n\u00f8kkel,_pluss_etternavn.
-
-Attempting_SQL_export...=Pr\u00f8ver_SQL-eksport...
-
-Auto=Auto
-
-Autodetect_format=Autodetekter_format
-
-Autogenerate_BibTeX_key=Autogenerer_BibTeX-n\u00f8kkel
-
-Autogenerate_BibTeX_keys=Autogenerer_BibTeX-n\u00f8kler
-
-Autogenerate_groups=Autogenerer_grupper
-
-autogenerate_keys=autogenerer_n\u00f8kler
-
-Autolink_files_with_names_starting_with_the_BibTeX_key=Autolink_filer_med_navn_som_starter_med_BibTeX-n\u00f8kkelen
-
-Autolink_only_files_that_match_the_BibTeX_key=Autolink_bare_filer_med_navn_som_samsvarer_med_BibTeX-n\u00f8kkelen
-
-Automatically_create_groups=Generer_grupper_automatisk
-
-Automatically_create_groups_for_database.=Generer_grupper_for_databasen.
-
-Automatically_created_groups=Genererte_grupper_automatisk
-
-Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Skjul_automatisk_grupperingskontroll_n\u00e5_du_bytter_til_en_database_som_ikke_inneholder_grupper
-
-Automatically_remove_exact_duplicates=Fjern_eksakte_duplikater_automatisk
-
-Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Vis_automatisk_grupperingskontroll_n\u00e5_du_bytter_til_en_database_som_inneholder_grupper
-
-Autoset=Sett_automatisk
-
-Autoset_%0_field=Automatisk_setting_av_%0-felt
-
-Autoset_%0_links._Allow_overwriting_existing_links.=Sett_%0-linker_automatisk._Tillat_overskriving_av_eksisterende_linker.
-
-Autoset_%0_links._Do_not_overwrite_existing_links.=Sett_%0-linker_automatisk._Skriv_ikke_over_eksisterende_linker.
-
-Autoset_external_links=Sett_linker_automatisk
-
-Autosetting_links=Setter_linker_automatisk
-
-AUX_file_import=AUX-fil_import
-
-Available_export_formats=Tilgjengelige_eksportformater
-
-Available_fields=Tilgjengelige_felter
-
-Available_import_formats=Tilgjengelige_importformater
-
-Background_color_for_optional_fields=Bakgrunnsfarge_for_valgfrie_felter
-
-Background_color_for_required_fields=Bakgrunnsfarge_for_n\u00f8dvendige_felter
-
-Backup_old_file_when_saving=Lag_sikkerhetskopi_ved_lagring
-
-Beta_version=Betaversjon
-
-Bibkey_to_filename_conversion=Konvertering_av_BibTeX-n\u00f8kkel_til_filnavn
-
-BibTeX_key=BibTeX-n\u00f8kkel
-
-BibTeX_key_is_unique.=BibTeX-n\u00f8kkelen_er_unik
-
-BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX-n\u00f8kkel_er_ikke_satt._Angi_et_navn_for_den_nedlastede_filen
-
-BibTeX_source=BibTeX-kilde
-
-BibTeXML=BibTeXML
-
-Binding=Hurtigtast
-
-Broken_link=Ugyldig_link
-
-Browse=Bla_gjennom
-
-by=med
-
-Calling_external_viewer...=Kaller_opp_eksternt_program...
-
-Cancel=Avbryt
-
-Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Kan_ikke_legge_til_enheter_til_en_gruppe_uten_\u00e5_generere_n\u00f8kler._Vil_du_generer_n\u00f8kler_n\u00e5?
-
-Cannot_merge_this_change=Kan_ikke_inkorporere_denne_endringen
-
-Cannot_move_group_"%0"_down.=Kan_ikke_flytte_gruppen_"%0"_ned.
-
-Cannot_move_group_"%0"_left.=Kan_ikke_flytte_gruppen_"%0"_til_venstre.
-
-Cannot_move_group_"%0"_right.=Kan_ikke_flytte_gruppen_"%0"_til_h\u00f8yre.
-
-Cannot_move_group_"%0"_up.=Kan_ikke_flytte_gruppen_"%0"_opp.
-
-case_insensitive=skiller_ikke_mellom_store_og_sm\u00e5_bokstaver
-
-case_sensitive=skiller_mellom_store_og_sm\u00e5_bokstaver
-
-Case_sensitive=Skill_store_og_sm\u00e5_bokstaver
-
-change_assignment_of_entries=endre_tilordning_av_enheter
-
-Change_case=Endre_store/sm\u00e5_bokstaver
-
-Change_entry_type=Endre_enhetstype
-
-Change_file_type=Endre_filtype
-
-change_key=sett_n\u00f8kkel
-
-Change_of_Grouping_Method=Endre_grupperingsm\u00e5te
-
-change_preamble=endre_'preamble'
-
-change_string_content=endre_strengdefinisjon
-
-change_string_name=endre_navn_p\u00e5_streng
-
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=Endre_oppsett_for_tabellkollonner_og_generelle_felter_for_\u00e5_ta_i_bruk_den_nye_funksjonen
-
-change_type=endre_type
-
-changed_=endret_
-
-Changed_font_settings=Endret_skriftoppsett
-
-Changed_language_settings=Endret_spr\u00e5koppsett
-
-Changed_look_and_feel_settings=Endret_oppsett_av_grensesnitt
-
-Changed_preamble=Endret_preamble
-
-Changed_type_to=Endret_type_til
-
-Characters_to_ignore=Ignorer_f\u00f8lgende_tegn
-
-Check_existing_%0_links=Sjekk_eksisterende_%0-linker
-
-Check_links=Sjekk_eksterne_linker
-
-Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Velg_URL_for_nedlasting._Den_forh\u00e5ndsvalgte_adressen_peker_til_en_liste_gjort_tilgjengelig_av_JabRef-utviklerne.
-
-Cite_command=Siteringskommando
-
-Class_name=Klassenavn
-
-Clear=Opphev
-
-clear_all_groups=fjern_alle_grupper
-
-Clear_field=Slett_felt
-
-Clear_fields=Slett_felter
-
-Clear_highlight=Fjern_utheving
-
-Close=Lukk
-
-Close_dialog=Lukk_dialog
-
-Close_the_current_database=Lukk_denne_databasen
-
-Close_the_help_window=Lukk_hjelpevinduet
-
-Close_window=Lukk_vindu
-
-Closed_database=Lukket_database
-
-Collapse_subtree=Lukk_forgrening
-
-Color_codes_for_required_and_optional_fields=Fargekoder_for_n\u00f8dvendige_og_valgfrie_felter
-
-Color_for_marking_incomplete_entries=Farge_for_markering_av_ufullstendige_enheter
-
-Column_width=Kolonnebredde
-
-Command_line_id=Kommandolinje-id
-
-Complete_record=Komplett_form
-
-Connect=Koble_til
-
-Connect_to_SQL_database=Koble_til_SQL-database
-
-Connect_to_SQL_Database=Koble_til_SQL-database
-
-Connection_to_IEEEXplore_failed=Oppkobling_til_IEEExplore_mislyktes
-
-Contained_in=Inneholdt_i
-
-Content=Innhold
-
-Copied=Kopierte
-
-Copied_cell_contents=Kopierte_innhold_av_cellen
-
-Copied_key=Kopierte_n\u00f8kkel
-
-Copied_keys=Kopierte_n\u00f8kler
-
-Copy=Kopier
-
-Copy_BibTeX_key=Kopier_BibTeX-n\u00f8kkel
-
-Copy_file_to_file_directory.=Kopier_fil_til_filkatalog.
-
-Copy_files_to_file_directory.=Kopier_filer_til_filkatalog.
-
-Copy_to_clipboard=Kopier_til_utklippstavle
-
-Could_not_call_executable=Kunne_ikke_kalle_programfilen
-
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Kunne_ikke_opprette_kontakt_med_en_gnuserv-prosess._Kontroller_at_Emacs_eller_XEmacs_er_i_gang<BR>og_at_serveren_har_blitt_startet_(med_kommandoen_'gnuserv-start').
-
-Could_not_connect_to_host_=Kunne_ikke_koble_opp_mot_vert
-
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Kunne_ikke_koble_til_Vim-server._Sjekk_at_Vim_kj\u00f8rer<BR>med_riktig_servernavn.
-
-Could_not_export_file=Kunne_ikke_eksportere
-
-Could_not_export_preferences=Kunne_ikke_eksportere_innstillinger
-
-# I have reformulated the following lines, because the 1st person form is not suitable:
-Could_not_find_a_suitable_import_format.=Fant_ikke_noe_passende_importformat.
-Could_not_find_directory_for_%0-files\:_%1=Fant_ikke_katalog_for_%0-filer:_%1
-
-Could_not_find_image_file=Kunne_ikke_finne_bilde
-
-Could_not_find_layout_file=Fant_ikke_layoutfil
-
-Could_not_import_preferences=Kunne_ikke_importere_innstillinger
-
-Could_not_instantiate_%0=Kunne_ikke_instansiere_%0
-
-Could_not_instantiate_%0_%1=Kunne_ikke_instansiere_%0_%1
-
-Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Kunne_ikke_instansiere_%0._Har_du_valgt_riktig_katalog?
-
-Could_not_open_link=Kunne_ikke_\u00e5pne_link
-
-Could_not_parse_number_of_hits=Kunne_ikke_lese_ut_antall_treff
-
-Could_not_print_preview=Kunne_ikke_skrive_ut_forh\u00e5ndsvisningen
-
-Could_not_run_the_'vim'_program.=Kunne_ikke_kj\u00f8re_'vim'-programmet
-
-Could_not_save_file=Kunne_ikke_lagre
-
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Kunne_ikke_lagre_fil._Tegnkodingen_'%0'_er_ikke_st\u00f8ttet.
-
-Create_group=Opprett_gruppe
-
-Created_groups.=Opprettet_grupper.
-
-crossreferenced_entries_included=refererte_enheter_inkludert
-
-Current_content=N\u00e5v\u00e6rende_innhold
-
-Current_value=N\u00e5v\u00e6rende_verdi
-
-Custom_entry_types=Egendefinerte_enhetstyper
-
-Custom_entry_types_found_in_file=Fant_egendefinerte_enhetstyper_i_filen
-
-Custom_icon_theme=Egendefinert_ikonsett
-
-Custom_icon_theme_file=Ikonsettfil
-
-Custom_importers=Egendefinerte_importformat
-
-Customize_entry_types=Tilpass_enhetstyper
-
-Customize_key_bindings=Sett_opp_hurtigtaster
-
-Cut=Klipp_ut
-
-cut_entries=klippet_ut
-
-cut_entry=klipp_ut_enhet
-
-Cut_pr=Klippet_ut
-
-Database_\:=Database_:
-
-Database_encoding=Tegnkoding_for_database
-
-Database_has_changed._Do_you_want_to_save_before_closing?=Databasen_er_endret._Vil_du_lagre_f\u00f8r_du_lukker_den?
-
-Database_properties=Databaseegenskaper
-
-Date_format=Datoformat
-
-Default=Tilbakestill
-
-Default_encoding=Standard_koding
-
-Default_grouping_field=Standardfelt_for_gruppering
-
-Default_look_and_feel=Standard_utseende
-
-Default_pattern=Default_pattern
-
-Default_sort_criteria=Standard_sorteringskriteria
-
-Define_'%0'=Definer_'%0'
-
-Delete=Slett
-
-Delete_custom_format=Slett_tilpasset_type
-
-delete_entries=slett_enheter
-
-Delete_entry=Slett_enhet
-
-delete_entry=slett_enhet
-
-Delete_multiple_entries=Slett_flere_enheter
-
-Delete_rows=Slett_rader
-
-Delete_strings=Slett_strenger
-
-Deleted=Slettet
-
-Delimit_fields_with_semicolon,_ex.=Avgrens_felter_med_semikolon,_f.eks.
-
-Descending=Synkende
-
-Description=Beskrivelse
-
-Deselect_all=Velg_ingen
-
-Deselect_all_duplicates=Velg_bort_alle_duplikater
-
-Details=Details
-
-Disable_entry_editor_when_multiple_entries_are_selected=Sperr_enhetsskjema_n\u00e5r_flere_enheter_er_valgt
-
-Disable_this_confirmation_dialog=Deaktiver_denne_kontrolldialogen
-
-Disable_this_warning_dialog=Deaktiver_denne_advarselen
-
-Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Vis_alle_enheter_inneholdt_i_minst_en_av_de_valgte_gruppene.
-
-Display_all_error_messages=Vis_alle_feilmeldinger
-
-Display_help_on_command_line_options=Vis_kommandolinjehjelp
-
-Display_imported_entries_in_an_inspection_window_before_they_are_added.=Vis_importerte_enheter_i_et_inspeksjonsvindu_f\u00f8r_de_legges_til.
-
-Display_only_entries_belonging_to_all_selected_groups.=Vis_kun_enheter_inneholdt_i_alle_valgte_grupper.
-
-Display_version=Vis_versjonsnummer
-
-Displaying_no_groups=Viser_ingen_grupper
-
-Do_not_abbreviate_names=Ikke_forkort_navn
-
-Do_not_autoset=Ikke_sett_linker_automatisk
-
-Do_not_import_entry=Ikke_importer_enhet
-
-Do_not_open_any_files_at_startup=\u00c5pne_ingen_filer_ved_oppstart
-
-Do_not_overwrite_existing_keys=Ikke_skriv_over_eksisterende_n\u00f8kler
-
-Do_not_show_splash_window_at_startup=Ikke_vis_JabRef-informasjonsvindu_ved_oppstart
-
-Do_not_show_these_options_in_the_future=Ikke_vis_disse_valgene_igjen
-
-Do_not_wrap_the_following_fields_when_saving=Ikke_introduser_linjeskift_i_f\u00f8lgende_felter_ved_lagring
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Ikke_skriv_de_f\u00f8lgende_feltene_til_XMP-metadata:
-
-Do_you_want_JabRef_to_do_the_following_operations?=Vil_du_at_JabRef_skal_gj\u00f8re_de_f\u00f8lgende_operasjonene?
-
-DocBook=DocBook
-
-Down=Ned
-
-Download=Last_ned
-
-Download_completed=Nedlasting_fullf\u00f8rt
-
-Download_file=Last_ned_fil
-
-Downloading...=Laster_ned...
-
-Drag_and_Drop_Error=Feil_ved_trekk-og-slipp
-
-Drop_%0=Slipp_%0
-
-duplicate_BibTeX_key=ikke_unik_BibTeX-n\u00f8kkel
-
-Duplicate_BibTeX_key.=Duplicate_BibTeX_key.
-
-Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=BibTeX-n\u00f8kkelen_er_ikke_unik._Gruppering_kan_feile_for_denne_enheten.
-
-Duplicate_Key_Warning=Advarsel:_ikke_unik_n\u00f8kkel
-
-Duplicate_pairs_found=Duplikatpar_funnet
-
-duplicate_removal=fjerning_av_duplikater
-
-Duplicate_string_name=Ikke_unikt_navn_p\u00e5_streng
-
-Duplicates_found=Duplikater_funnet
-
-Duplicates_removed=Duplikater_fjernet
-
-Dynamic_groups=Dynamiske_grupper
-
-Dynamically_group_entries_by_a_free-form_search_expression=Grupper_enheter_dynamisk_ved_hjelp_av_et_standard_s\u00f8keuttrykk
-
-Dynamically_group_entries_by_searching_a_field_for_a_keyword=Grupper_enheter_dynamisk_ved_\u00e5_s\u00f8ke_etter_n\u00f8kkelord_i_et_felt
-
-Each_line_must_be_on_the_following_form=Hver_av_linjene_m\u00e5_v\u00e6re_p\u00e5_den_f\u00f8lgende_formen
-
-Edit=Rediger
-
-Edit_custom_export=Rediger_eksternt_eksportfilter
-
-Edit_entry=Rediger_enhet
-
-Edit_file_link=Rediger_link
-
-Edit_file_type=Rediger_filtype
-
-Edit_group=Rediger_gruppe
-
-Edit_journal=Rediger_journal
-
-Edit_preamble=Rediger_'preamble'
-
-Edit_strings=Rediger_strenger
-
-Editor_options=Alternativer_for_redigering
-
-empty_BibTeX_key=tom_BibTeX-n\u00f8kkel
-
-Empty_BibTeX_key.=Tom_BibTeX-n\u00f8kkel
-
-Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Tom_BibTeX-n\u00f8kkel._Gruppering_kan_feile_for_denne_enheten.
-
-empty_database=tom_database
-
-Enable_source_editing=Tillat_redigering_av_kildekode
-
-Enable_word/name_autocompletion=Aktiver_autokomplettering_av_navn/ord
-
-Endnote=Endnote
-
-Enter_URL=Skriv_inn_URL
-
-Enter_URL_to_download=Skriv_inn_URL_som_skal_lastes_ned
-
-entries=enheter
-
-Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Enheter_kan_ikke_manuelt_legges_til_i_eller_fjernes_fra_denne_gruppen.
-
-Entries_exported_to_clipboard=Enheter_eksportert_til_utklippstavle
-
-entries_have_undefined_BibTeX_key=enheter_har_udefinert_BibTeX-n\u00f8kkel
-
-entries_into_new_database=enheter_i_ny_database
-
-entry=enhet
-
-Entry_editor=Enhetsskjema
-
-Entry_in_current_database=Enhet_i_eksisterende_database
-
-Entry_in_import=Enhet_i_import
-
-Entry_preview=Forh\u00e5ndsvisning
-
-Entry_table=Hovedtabell
-
-Entry_table_columns=Tabellkolonner
-
-Entry_type=Enhetstype
-
-Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Navn_p\u00e5_typer_kan_ikke_inneholde_opperom_eller_noen_av_de_f\u00f8lgende_tegnene
-
-Entry_types=Enhetstyper
-
-Error=Feil
-Error\:_=Feil:_
-
-Error_converting_Bibtex_to_XMP\:_%0=Feil_ved_konvertering_av_BibTeX_til_XMP:_%0
-
-Error_converting_XMP_to_'%0'...=Feil_ved_tilpassing_av_XMP_for_'%0'...
-
-Error_exporting_to_clipboard=Feil_ved_eksport_til_utklippstavle
-
-##Error:_check_your_External_viewer_settings_in_Preferences=Feil:_unders\u00f8k_innstillingene_for_Eksterne_programmer_i_Innstillinger
-Error_in_field=Feil_i_felt
-
-Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Feil_ved_oppstart_av_plugin-system._Starter_uten,_men_noe_funksjonalitet_kan_mangle.
-
-Error_occured_when_parsing_entry=En_feil_oppsto_ved_lesing_av_enhet
-
-Error_opening_file=Feil_ved_\u00e5pning_av_fil
-
-Error_setting_field=Problem_med_\u00e5_sette_felt
-
-Error_while_converting_BibtexEntry_to_XMP_%0=Feil_ved_konvertering_av_BibTeX-enheten_til_XMP_%0
-Error_while_downloading_file\:=Feil_ved_nedlasting_av_fil:
-
-Error_while_fetching_from_OIA2=Feil_ved_nedlasting_fra_OIA2
-
-Error_while_writing=En_feil_oppsto_ved_skriving
-
-Error_writing_to_%0_file(s).=Feil_ved_skriving_til_%0_fil(er).
-Error_writing_XMP_to_file\:_%0=Feil_ved_skriving_av_XMP-data_til_filen_'%0'
-
-Establishing_SQL_connection...=Etablerer_SQL-forbindelse...
-
-Exceptions=Feilinformasjon
-
-Existing_file=Eksisterende_fil
-
-exists._Overwrite_file?=eksisterer._Erstatt_filen?
-
-exists._Overwrite?=eksisterer._Skriv_over?
-
-Expand_subtree=\u00c5pne_forgrening
-
-Export=Eksporter
-
-Export_name=Navn_p\u00e5_filter
-
-Export_preferences=Eksporter_innstillinger
-
-Export_preferences_to_file=Eksporter_innstillinger_til_fil
-
-Export_properties=Egenskaper_for_eksportfilter
-
-Export_to_clipboard=Eksporter_til_utklippstavle
-
-Export_to_SQL_database=Eksporterer_til_SQL-database
-
-Exporting=Eksporterer
-
-Extension=Etternavn
-
-External_changes=Eksterne_endringer
-
-External_file_links=Eksterne_linker
-
-External_files=Eksterne_filer
-
-External_programs=Eksterne_programmer
-
-External_viewer_called=Eksternt_program_kalt_opp
-
-Failed_to_read_groups_data_(unsupported_version\:_%0)=Kunne_ikke_lese_gruppedata_(ikke_st\u00f8ttet_versjon:_%0)
-
-Fetch=Hent
-
-Field=Felt
-
-field=felt
-
-# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
-Field_content=Innhold_i_felt
-
-Field_name=Feltnavn
-
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Feltnavn_kan_ikke_inneholde_opperom_eller_de_f\u00f8lgende_tegnene
-
-Field_sizes=Feltst\u00f8rrelser
-
-Field_to_filter=Felt_som_skal_filtreres
-
-Field_to_group_by=Grupperingsfelt
-
-Fields=Felter
-
-File=Fil
-
-file=fil
-
-File_'%0'_is_already_open.=Filen_'%0'_er_allerede_\u00e5pen.
-
-File_'%0'_not_found=Fant_ikke_filen_'%0'
-
-File_changed=Endret_fil
-File_directory_is_'%0'\:=Filkatalogen_er_'%0':
-
-File_directory_is_not_set_or_does_not_exist!=Filkatalogen_er_ikke_satt_eller_eksisterer_ikke!
-
-File_download=Filnedlasting
-
-File_exists=Filen_eksisterer
-
-File_extension=Etternavn_p\u00e5_filer
-
-File_has_been_updated_externally._What_do_you_want_to_do?=Filen_har_blitt_endret_eksternt._Hva_vil_du_gj\u00f8re?
-
-File_not_found=Fant_ikke_filen
-
-File_type=Filtype
-
-File_updated_externally=Filen_har_blitt_endret_eksternt
-
-filename=filnavn
-
-Files_opened=Filer_\u00e5pnet
-
-Filter=Filter
-
-Finished_autosetting_external_links.=Fullf\u00f8rte_automatisk_setting_av_eksterne_linker.
-
-Finished_synchronizing_%0_links._Entries_changed%c_%1.=Fullf\u00f8rte_synkronisering_av_%0-linker._Enheter_endret%c_%1.
-
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Fullf\u00f8rte_skriving_av_XMP-metadata._Skrev_til_%0_fil(er).
-
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Fullf\u00f8rte_skriving_av_XMP-data_for_%0_fil(er)_(hoppet_over_%1,_%2_mislyktes).
-
-First_select_the_entries_you_want_keys_to_be_generated_for.=Velg_f\u00f8rst_hvilke_enheter_du_vil_generere_n\u00f8kler_for.
-
-Fit_table_horizontally_on_screen=Tilpass_tabellbredden_horisontalt
-
-Float=Flyt
-
-Float_marked_entries=Sorter_merkede_enheter_\u00f8verst
-
-Font_Family=Familie
-
-Font_Preview=Forh\u00e5ndsvisning
-
-Font_Size=St\u00f8rrelse
-
-Font_Style=Stil
-
-FontSelector=Fontvelger
-
-for=for
-
-Format_of_author_and_editor_names=Formatering_av_forfatter-_og_redakt\u00f8rnavn
-
-Format_String=Formatstreng
-
-Format_used=Format_brukt
-
-Formatter_Name=Navn_p\u00e5_formaterer
-
-Formatter_not_found=Ukjent_formaterer
-
-found=funnet
-
-Found_%0_plugin(s)=Fant_%0_plugin(s)
-
-found_in_aux_file=funnet_i_aux-fil
-
-Full_name=Fullt_navn
-
-General=Generelt
-
-General_fields=Generelle_felter
-
-Generate=Generer
-
-Generate_BibTeX_key=Generere_BibTeX-n\u00f8kkel
-
-Generate_keys=Generer_n\u00f8kler
-
-Generate_keys_before_saving_(for_entries_without_a_key)=Generer_n\u00f8kler_f\u00f8r_lagring_(for_enheter_uten_n\u00f8kkel))
-
-Generate_keys_for_imported_entries=Generer_n\u00f8kler_automatisk_for_importerte_enheter
-
-Generate_now=Generer_n\u00e5
-
-Generated_BibTeX_key_for=Genererte_BibTeX-n\u00f8kkel_for
-
-Generating_BibTeX_key_for=Genererer_BibTeX-n\u00f8kkel_for
-
-Grab=Fang_hurtigtast
-
-Gray_out_entries_not_in_group_selection=Skraver_enheter_utenfor_valgte_grupper
-
-Gray_out_non-hits=Vis_ikke-treff_i-gr\u00e5tt
-
-Gray_out_non-matching_entries=Skraver_ikke-treff
-
-Group_properties=Gruppeegenskaper
-
-grouping_may_not_work_for_this_entry=gruppering_kan_feile_for_denne_enheten
-
-Groups=Gruppering
-
-Harvard_RTF=Harvard_RTF
-
-Have_you_chosen_the_correct_package_path?=Har_du_valgt_riktig_pakkenavn?
-
-Help=Hjelp
-
-Help_contents=Oversikt_over_hjelpefiler
-
-Help_on_groups=Hjelp_om_grupper
-
-Help_on_key_patterns=Hjelp_om_n\u00f8kkelgenerering
-
-Help_on_Preview_Settings=Hjelp_for_innstillinger_for_forh\u00e5ndsvisning
-
-Help_on_Regular_Expression_Search=Hjelp_for_s\u00f8k_med_regul\u00e6ruttrykk
-
-Hide_non-hits=Skjul_ikke-treff
-
-Hide_non-matching_entries=Gjem_ikke-treff
-
-Hierarchical_context=Gruppehierarki
-
-Highlight=Uthev
-
-Highlight_groups_matching_all_selected_entries=Uthev_grupper_som_inneholder_alle_valgte_enheter
-
-Highlight_groups_matching_any_selected_entry=Uthev_grupper_som_inneholder_minst_en_av_de_valgte_enhetene
-
-Highlight_overlapping_groups=Uthev_overlappende_grupper
-
-Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Hint%c_For_bare_\u00e5_s\u00f8ke_i_spesifikke_felt,_skriv_f._eks.%c<p><tt>author%esmith_and_title%eelectrical</tt>
-
-HTML=HTML
-
-HTML_table=HTML-tabell
-
-HTML_table_(with_Abstract_&_BibTeX)=HTML-tabell_(med_Abstract_&_BibTeX)
-
-Icon=Ikon
-
-Ignore=Ignorer
-
-Immediate_subgroups=N\u00e6rmeste_undergrupper
-
-Import=Importer
-
-Import_and_keep_old_entry=Importer_og_behold_den_gamle_enheten
-
-Import_and_remove_old_entry=Importer_og_fjern_den_gamle_enheten
-
-Import_entries=Importer_enheter
-
-Import_failed=Import_mislyktes
-
-Import_file=Importer_fil
-
-Import_group_definitions=Importer_gruppedefinisjoner
-
-Import_name=Navn_p\u00e5_import
-
-Import_preferences=Importer_innstillinger
-
-Import_preferences_from_file=Importer_innstillinger_fra_fil
-
-Import_strings=Importer_strenger
-
-Import_to_open_tab=Importer_til_\u00e5pen_tab
-
-Import_word_selector_definitions=Importer_definisjoner_for_hurtigvelgere
-
-Imported_database=Importerte_database
-
-Imported_entries=Importerte_enheter
-
-Imported_from_database=Importerte_fra_databasen
-
-ImportFormat_class=ImportFormat-klasse
-
-Importing=Importerer
-
-Importing_in_unknown_format=Importerer_ukjent_format
-
-In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=I_JabRef_brukes_#-tegn_parvis_for_\u00e5_indikere_strenger.
-
-Include_abstracts=Inkluder_sammendrag
-
-Include_entries=Inkluder_enheter
-Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Inkluder_undergrupper:_Vis_enheter_inneholdt_i_denne_gruppen_eller_en_undergruppe
-
-Incremental=Inkrementell
-
-Incremental_search=Inkrementelt_s\u00f8k
-
-Incremental_search_failed._Repeat_to_search_from_top.=Incremental_search_failed._Repeat_to_search_from_top.
-Independent_group\:_When_selected,_view_only_this_group's_entries=Uavhengig_gruppe:_Vis_bare_denne_gruppens_enheter
-
-Initially_show_groups_tree_expanded=Vis_gruppetreet_ekspandert_i_utgangspunktet
-
-Input=Inndata
-
-Input_error=Inputfeil
-
-Insert=Legg_til
-
-Insert_rows=Legg_til_rader
-
-Insert_selected_citations_into_LyX/Kile=Send_valgte_enheter_til_LyX/Kile
-
-Insert_selected_citations_into_WinEdt=Send_valgte_enheter_til_WinEdt
-
-insert_string_=sett_inn_streng_
-
-Insert_URL=Sett_inn_URL
-
-integrity=integritet
-
-Integrity_check=Integritetssjekk
-
-Intersection=Snitt
-
-Invalid_BibTeX_key=Ugyldig_BibTeX-n\u00f8kkel
-
-Invalid_date_format=Ugyldig_datoformat
-
-Invalid_URL=Ugyldig_URL
-
-Inverted=Invertert
-
-is_a_standard_type.=er_en_standardtype.
-
-ISO_abbreviation=ISO-forkortelse
-
-Item_list_for_field=Ordliste_for_felt
-
-jabref=jabref
-
-JabRef_help=JabRef-hjelp
-
-JabRef_preferences=JabRef-oppsett
-
-Journal_abbreviations=Journalforkortelser
-
-Journal_list_preview=Forh\u00e5ndsvisning_av_journalliste
-
-Journal_name=Journalnavn
-
-Keep=Behold
-
-Keep_both=Behold_begge
-
-Keep_lower=Behold_nederste
-
-Keep_upper=Behold_\u00f8verste
-
-Key_bindings=Hurtigtaster
-
-Key_bindings_changed=Hurtigtaster_endret
-
-Key_generator_settings=Innstillinger_for_n\u00f8kkelgenerering
-
-Key_pattern=M\u00f8nster
-
-keys_in_database=n\u00f8kler_i_databasen
-
-Keyword=N\u00f8kkelord
-
-Label=Navn
-
-Language=Spr\u00e5k
-
-Last_modified=Sist_endret
-
-LaTeX_AUX_file=LaTeX_AUX-fil
-
-Leave_file_in_its_current_directory.=La_filen_ligge_i_katalogen_den_ligger_i_n\u00e5.
-
-Leave_files_in_their_current_directory.=La_filene_ligge_i_katalogen_de_ligger_i_n\u00e5.
-
-Left=Venstre
-
-License=Lisens
-
-Limit_to_fields=Begrens_til_f\u00f8lgende_felter
-
-Limit_to_selected_entries=Begrens_til_valgte_enheter
-
-Link=Link
-
-Link_local_file=Link_til_lokal_fil
-
-Link_to_file_%0=Link_til_filen_%0
-
-Listen_for_remote_operation_on_port=Lytt_etter_fjernoperasjoner_p\u00c3\u00a5_port
-
-Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Hent_og_lagre_innstillinger_fra/til_jabef.xml_ved_oppstart_(minnepinne-modus)
-
-Load_session=Gjenopprett_tilstand
-
-Loading_session...=Gjenoppretter_tilstand...
-
-localhost=localhost
-
-Look_and_feel=Utseende
-
-Looking_for_pdf...=Ser_etter_pdf...
-
-lower=sm\u00e5_bokstaver
-
-Main_file_directory=Hovedkatalog_for_filer
-
-Main_layout_file=Hoved-layoutfil
-
-Main_PDF_directory=Hovedkatalog_for_PDF-filer
-
-Main_PS_directory=Hovedkatalog_for_PS-filer
-
-Manage=Sett_opp
-
-Manage_custom_exports=Sett_opp_eksterne_eksportfiltre
-
-Manage_custom_imports=Sett_opp_eksterne_importfiltre
-
-Manage_external_file_types=Sett_opp_eksterne_filtyper
-
-Manage_journal_abbreviations=Sett_opp_journalforkortelser
-
-Mark_entries=Merk_enheter
-
-Mark_entry=Merk_enhet
-
-Mark_new_entries_with_addition_date=Merk_nye_enheter_med_dato
-
-Mark_new_entries_with_owner_name=Merk_nye_enheter_med_navn_p\u00e5_eier
-
-Marked_selected=Merket_valgte_enheter
-
-Memory_Stick_Mode=Minnepinne-modus
-
-Menu_and_label_font_size=St\u00f8rrelse_av_menyfonter
-
-Merged_external_changes=Inkorporerte_eksterne_endringer
-
-Messages=Meldinger
-
-Messages_and_Hints=Beskjeder_og_hint
-
-Modification_of_field=Endring_av_felt
-
-Modified_group_"%0".=Endret_gruppen_"%0".
-
-Modified_groups=Endrede_grupper
-
-Modified_string=Endret_streng
-
-Modify=Endre
-
-modify_group=endre_gruppe
-
-MODS=MODS
-
-Move=Flytt
-
-Move_down=Flytt_ned
-
-Move_entries_in_group_selection_to_the_top=Flytt_enheter_i_valgte_grupper_\u00f8verst
-
-Move_external_links_to_'file'_field=Flytt_eksterne_linker_til_'file'-feltet
-
-Move_files_to_file_directory.=Flytt_filer_til_filkatalog.
-
-move_group=flytt_gruppe
-
-Move_string_down=Flytt_streng_ned
-
-Move_string_up=Flytt_streng_opp
-
-Move_up=Flytt_opp
-
-Moved_group_"%0".=Flyttet_gruppen_"%0".
-
-MS_Office_2007=MS_Office_2007
-
-MySQL=MySQL
-
-MySQL_database=MySQL-database
-
-Name=Navn
-
-Name_formatter=Navneformaterer
-
-Natbib_style=Natbib-stil
-
-nested_aux_files=n\u00f8stede_aux-filer
-
-New=Ny
-
-new=ny
-
-New_BibTeX_database=Ny_BibTeX-database
-
-New_BibTeX_entry=Ny_BibTeX-enhet
-
-New_BibTeX_subdatabase=Ny_BibTeX-deldatabase
-
-New_content=Nytt_innhold
-
-New_database_created.=Opprettet_ny_database.
-
-New_field_value=Ny_verdi
-
-New_file=Ny_fil
-
-New_file_link_(INSERT)=Ny_link_(INSERT)
-
-New_group=Ny_gruppe
-
-New_string=Ny_streng
-
-Next_entry=Neste_enhet
-
-No_%0_found=Fant_ingen_%0
-
-No_actual_changes_found.=Ingen_reelle_endringer_funnet.
-
-no_base-bibtex-file_specified=ingen_basis-bibtexfil_spesifisert
-
-no_database_generated=ingen_database_generert
-
-No_duplicates_found=Ingen_duplikater_funnet
-
-No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Ingen_enheter_funnet._Kontroller_at_du_bruker_riktig_importfilter.
-
-No_entries_found_for_the_search_string_'%0'=Fant_ingen_enheter_for_s\u00f8keteksten_'%0'
-
-No_entries_imported.=Ingen_enheter_importert.
-
-No_entries_or_multiple_entries_selected.=Ingen_eller_flere_enheter_valgt.
-
-No_entries_selected=Ingen_enheter_valgt
-
-No_entries_selected.=Ingen_enheter_valgt.
-
-No_exceptions_have_ocurred.=Ingen_feiltilstander_har_inntruffet.
-
-No_files_found.=Ingen_filer_funnet.
-
-No_GUI._Only_process_command_line_options.=Ingen_GUI._Bare_behandle_kommandolinjevalg.
-
-No_journal_names_could_be_abbreviated.=Ingen_journalnavn_kunne_forkortes.
-
-No_journal_names_could_be_unabbreviated.=Ingen_journalnavn_kunne_ekspanderes.
-
-No_PDF_linked=Ingen_PDF_linket
-
-No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Ingen_pdf_eller_ps_definert_og_fant_ingen_filer_med_navn_tilsvarende_BibTeX-n\u00f8kkelen
-No_plugins_were_found_in_the_following_folders\:=Ingen_plugins_ble_funnet_i_f\u00f8lgende_mapper:
-
-No_references_found=Ingen_referanser_funnet
-
-No_saved_session_found.=Fant_ingen_lagret_tilstand.
-
-No_url_defined=Ingen_url_er_definert
-
-No_XMP_metadata_found_in_=Ingen_XMP-metadata_funnet_i_
-
-not=ikke
-
-not_found=ikke_funnet
-
-Not_saved_(empty_session)=Tilstand_ikke_lagret_(ingen_filer_\u00e5pne)
-
-Note_that_the_entry_causing_the_problem_has_been_selected.=Legg_merke_til_at_enheten_som_skaper_problemet_har_blitt_valgt.
-
-Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Merk_at_du_m\u00e5_spesifisere_det_fullstendige_klassenavnet_for_utseendet,
-
-Nothing_to_redo=Ingenting_\u00e5_gjenta
-
-Nothing_to_undo=Ingenting_\u00e5_angre
-
-# The next is used like in "References found: 1  Number of references to fetch?"
-Number_of_references_to_fetch?=Antall_referanser_som_skal_hentes?
-
-occurences=treff
-
-OK=OK
-
-Ok=OK
-
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=En_eller_flere_linker_er_av_typen_'%0'_som_er_udefinert._Hva_vil_du_gj\u00f8re?
-
-One_or_more_keys_will_be_overwritten._Continue?=En_eller_flere_n\u00f8kler_vil_bli_skrevet_over._Fortsett?
-
-Only_one_item_is_supported=Bare_ett_element_av_gangen_er_st\u00f8ttet
-
-Open=\u00c5pne
-
-Open_BibTeX_database=\u00c5pne_BibTeX-database
-
-Open_database=\u00c5pne_database
-
-Open_editor_when_a_new_entry_is_created=Start_redigering_n\u00e5r_en_ny_enhet_opprettes
-
-Open_file=\u00c5pne_fil
-
-Open_last_edited_databases_at_startup=\u00c5pne_sist_viste_databaser_ved_oppstart
-
-Open_PDF_or_PS=\u00c5pne_PDF_eller_PS
-
-Open_right-click_menu_with_Ctrl+left_button=\u00c5pne_h\u00f8yreklikkmeny_med_Ctrl+venstre_knapp
-
-Open_URL_or_DOI=\u00c5pne_URL_eller_DOI
-
-OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
-
-Opened_database=\u00c5pnet_database
-
-Opening=\u00c5pner
-
-Opening_preferences...=\u00c5pner_innstillinger...
-
-OpenOffice_Calc=OpenOffice_Calc
-
-OpenOffice_CSV=OpenOffice_CSV
-Operation_canceled.\n=Operasjonen_avbrutt.\n
-
-Operation_not_supported=Operasjonen_er_ikke_st\u00f8ttet
-
-Optional_fields=Valgfrie_felter
-
-Options=Valg
-
-or=eller
-
-out_of=ut_av
-
-Output=Output
-
-Output_or_export_file=Lagre_eller_eksporter_fil
-
-Override=Skriv_over
-
-Override_default_file_directories=Overstyr_hovekataloger_for_filer
-
-Override_default_font_settings=Overstyr_standardfonter
-
-override_the_bibtex_key_by_the_selected_text=overskriv_BibTeX-n\u00f8kkelen_med_den_valgte_teksten
-
-Overwrite=Skriv_over
-
-Overwrite_existing_field_values=Skriv_over_eksisterende_verdier
-
-Overwrite_keys=Skriv_over_n\u00f8kler
-
-pairs_processed=par_revidert
-Password_\:=Passord:
-
-Paste=Lim_inn
-
-paste_entries=lim_inn
-
-paste_entry=lim_inn
-
-Paste_from_clipboard=Lim_inn_fra_utklippstavle
-
-Pasted=Limte_inn
-
-Path_to_%0_not_defined=Sti_til_%0_ikke_definert
-
-Path_to_LatexEditor_(LEd.exe)=Sti_til_LatexEditor_(LEd.exe)
-
-Path_to_LyX_pipe=Sti_til_LyX-pipe
-
-Path_to_Vim=Sti_til_Vim
-
-Path_to_WinEdt.exe=Sti_til_WinEdt.exe
-
-PDF_directory=PDF-katalog
-
-PDF_does_not_exist=PDF-filen_finnes_ikke
-
-Personal_journal_list=Personlig_journalliste
-
-Plain_text_import=Import_fra_ren_tekst
-
-Please_check_your_network_connection_to_this_machine.=Vennligst_sjekk_maskinens_nettverksforbindelse.
-
-Please_enter_a_name_for_the_group.=Skriv_inn_et_navn_for_gruppen.
-
-Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Skriv_inn_et_s\u00f8kebegrep._For_eksempel,_for_\u00e5_s\u00f8ke_i_alle_felter_etter_<b>Olsen</b>,_skriv%c<p><tt>olsen</tt><p>For_\u00e5_s\u00f8ke_i_<b>Author</b>-feltet_etter_<b>Olsen</b>_og_i_<b>Title</b>-feltet_etter_<b>electr [...]
-
-Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Vennligst_skriv_inn_feltet_som_skal_s\u00f8kes_i_(f.eks._<b>keywords</b>)_og_n\u00f8kkelordet_\u00e5_s\u00f8ke_etter_(f._eks._<b>electrical</b>).
-
-Please_enter_the_string's_label=Skriv_inn_et_navn_for_strengen
-
-Please_select_an_importer=Vennligst_velg_et_importformat
-
-Please_select_an_importer.=Velg_et_importfilter.
-
-Please_select_exactly_one_group_to_move.=Velg_eksakt_en_gruppe_for_flytting.
-
-Please_specify_the_=Vennligst_spesifiser_
-
-Possible_duplicate_entries=Mulige_duplikater
-
-Possible_duplicate_of_existing_entry._Click_to_resolve.=Mulig_duplikat_av_eksisterende_enhet._Klikk_for_\u00e5_h\u00e5ndtere.
-
-Preamble=Preamble
-
-Preferences=Oppsett
-
-Preferences_recorded.=Lagret_oppsett.
-
-Preview=Forh\u00e5ndsvisning
-
-Previous_entry=Forrige_enhet
-
-Primary_sort_criterion=Prim\u00e6rt_sorteringskriterium
-
-Print_Preview=Skriv_ut_forh\u00e5ndsvisning
-
-Printing_Entry_Preview=Skriver_ut_forh\u00e5ndsvisning_av_enhet
-
-Problem_with_parsing_entry=Problem_med_\u00e5_lese_enhet
-
-Processing_=Arbeider_
-
-Program_output=Output_fra_program
-
-PS_directory=PS-katalog
-
-Push_entries_to_external_application_(%0)=Send_enheter_til_eksternt_program_(%0)
-
-Push_selection_to_Emacs=Send_valgte_enheter_til_Emacs
-
-Push_selection_to_LyX/Kile=Send_valgte_enheter_til_LyX/Kile
-
-Push_selection_to_Vim=Send_valgte_enheter_til_Vim
-
-Push_selection_to_WinEdt=Send_valgte_til_WinEdt
-
-Push_to_LatexEditor=Send_til_LatexEditor
-
-Pushed_citations_to_%0=Sendte_enheter_til_%0
-
-Pushed_citations_to_Emacs=Sendte_enheter_til_Emacs
-
-Pushed_citations_to_Vim=Sendte_enheter_til_Vim
-
-Pushed_citations_to_WinEdt=Sendte_referanser_til_WinEdt
-
-Pushed_the_citations_for_the_following_rows_to=Sendte_referanser_til_de_f\u00f8lgende_radene_til
-
-Quit_JabRef=Avslutt_JabRef
-
-Quit_synchronization=Avslutt_synkronisering
-
-Raw_source=Kilde
-
-Really_delete_the_selected=Vil_du_slette_de_valgte
-
-Rearrange_tabs_alphabetically_by_title=Rearranger_databasene_alfabetisk_etter_navn
-
-Redo=Gjenta
-
-Reference_database=Referansedatabase
-
-# The next two lines are used like in "References found: 1  Number of references to fetch?"
-References_found=Referanser_funnet
-Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Undergruppe:_Vis_enheter_innehold_b\u00e5de_i_denne_gruppen_og_gruppen_over
-
-Refresh_view=Oppdater
-
-Regular_Expression=Regul\u00e6ruttrykk
-
-Remember_these_entry_types?=Husk_disse_enhetstypene?
-
-Remote_operation=Fjernstyring
-
-Remote_server_port=Port_for_fjernstyring
-
-Remove=Fjern
-
-Remove_all?=Fjern_alle?
-
-Remove_all_subgroups=Fjern_undergrupper
-
-Remove_all_subgroups_of_"%0"?=Remove_all_subgroups_of_"%0"?
-
-Remove_double_braces_around_BibTeX_fields_when_loading.=Fjern_doble_kr\u00f8llparenteser_rundt_BibTeX-felter_ved_innlasting.
-
-Remove_duplicates=Fjern_duplikater
-
-Remove_entry_from_import=Fjern_enhet_fra_import
-
-Remove_entry_selection_from_this_group=Fjern_valgte_enheter_fra_denne_gruppen
-
-Remove_entry_type=Slett_enhetstype
-
-Remove_file_link_(DELETE)=Slett_link_(DELETE)
-
-remove_from_group=fjern_fra_gruppe
-
-Remove_from_group=Fjern_fra_gruppe
-
-Remove_group=Fjern_gruppe
-
-Remove_group,_keep_subgroups=Fjern_gruppe,_behold_undergrupper
-
-Remove_group_"%0"?=Fjern_gruppen_"%0"?
-
-Remove_group_"%0"_and_its_subgroups?=Fjern_gruppen_"%0"_og_dens_undergrupper?
-
-remove_group_(keep_subgroups)=fjern_gruppe_(behold_undergrupper)
-
-remove_group_and_subgroups=fjern_gruppe_og_undergrupper
-
-Remove_group_and_subgroups=Fjern_gruppe_og_undergrupper
-
-Remove_link=Slett_link
-
-Remove_old_entry=Fjern_gammel_enhet
-
-Remove_selected_strings=Slett_valgte_strenger
-
-remove_string_=slett_streng_
-
-Removed_group_"%0".=Fjernet_gruppen_"%0"
-
-Removed_group_"%0"_and_its_subgroups.=Fjernet_gruppen_"%0"_og_dens_undergrupper
-
-Removed_string=Fjernet_streng
-
-Renamed_string=Endret_navn_p\u00e5_streng
-
-Replace=Erstatt
-
-Replace_(regular_expression)=Erstatt_(regul\u00e6ruttrykk)
-
-Replace_string=Erstatt_streng
-
-Replace_with=Erstatt_med
-
-Replaced=Erstattet
-
-Required_fields=N\u00f8dvendige_felter
-
-Reset_all=Tilbakestill_alle
-
-Reset_file_type_definitons=Gjenopprett_opprinnelige_filtyper
-
-Resolve_strings_for_all_fields_except=Sl\u00e5_opp_strenger_for_alle_felter_unntatt
-
-Resolve_strings_for_standard_BibTeX_fields_only=Sl\u00e5_opp_strenger_kun_for_standard_BibTeX-felter
-
-resolved=tatt_h\u00e5nd_om
-
-Results=Resultater
-
-Revert_to_original_source=Resett_til_opprinnelig_kildekode
-
-Review=Kommentarer
-
-Review_changes=Se_over_endringer
-
-Right=H\u00f8yre
-
-root=root
-
-Save=Lagre
-
-Save_all_finished.=Fullf\u00f8rte_lagring_av_alle_databaser
-
-Save_all_open_databases=Lagre_alle_\u00e5pne_databaser
-
-Save_before_closing=Lagre_f\u00f8r_databasen_lukkes
-
-Save_database=Lagre_database
-
-Save_database_as_...=Lagre_database_som_...
-
-Save_entries_in_their_original_order=Lagre_enheter_i_opprinnelig_rekkef\u00f8lge
-
-Save_failed=Lagring_mislyktes
-
-Save_failed_during_backup_creation=Lagring_mislyktes_ved_opprettelse_av_sikkerhetskopi
-
-Save_failed_while_committing_changes=Lagring_mislyktes_ved_sluttf\u00f8ring_av_endringer
-
-Save_ordered_by_author/editor/year=Lagre_sortert_etter_author/editor/year
-
-Save_selected_as_...=Lagre_valgte_som_...
-
-Saved_database=Lagret_database
-
-Saved_selected_to=Lagret_valgte_i
-
-Saved_session=Lagret_tilstand
-
-Saving=Lagrer
-
-Saving_all_databases...=Lagrer_alle_databaser...
-
-Saving_database=Lagrer_database
-
-# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
-Scan=S\u00f8k
-
-Search=S\u00f8k
-
-Search_All_Fields=S\u00f8k_i_alle_felter
-
-Search_all_fields=S\u00f8k_i_alle_felter
-
-Search_error=Feil_ved_s\u00f8k
-
-Search_expression=S\u00f8keuttrykk
-
-Search_for=S\u00f8k_etter
-
-Search_general_fields=S\u00f8k_i_generelle_felter
-
-Search_IEEEXplore=S\u00f8l_IEEExplore
-
-Search_IEEExplore=S\u00f8k_IEEExplore
-
-Search_optional_fields=S\u00f8k_i_valgfrie_felter
-
-Search_required_fields=S\u00f8k_i_n\u00f8dvendige_felter
-
-Search_Specified_Field(s)=S\u00f8k_spesifiserte_felt(er)
-
-Searched_database._Global_number_of_hits=S\u00f8kte_gjennom_basen._Globalt_antall_treff
-
-Searched_database._Number_of_hits=S\u00f8kte_gjennom_basen._Antall_treff
-
-Searching_for_%0_file=S\u00f8ker_etter_%0-fil
-
-Searching_for_duplicates...=S\u00f8ker_etter_duplikater...
-
-Searching_for_files=S\u00f8ker_etter_filer
-
-Secondary_sort_criterion=Andre_sorteringskriterium
-
-Select=Velg
-
-Select_a_Zip-archive=Velg_ZIP-fil
-
-Select_action=Select_action
-
-Select_all=Velg_alle
-
-Select_Classpath_of_New_Importer=Velg_classpath_for_nytt_importformat
-
-Select_encoding=Velg_koding
-
-Select_entries_in_group_selection=Velg_enheter_i_valgte_grupper
-
-Select_entry_type=Velg_enhetstype
-
-Select_external_application=Velg_ekstern_applikasjon
-
-Select_file_from_ZIP-archive=Velg_fil_fra_ZIP-fil
-
-Select_format=Velg_format
-
-Select_icon=Velg_ikon
-
-Select_matches=Velg_treff
-
-Select_new_ImportFormat_Subclass=Velg_klasse_for_nytt_importformat
-
-Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Velg_trenodene_for_\u00e5_inspisere_og_akseptere_eller_avsl\u00e5_endringer
-
-Selected_entries=Valgte_enheter
-
-Selector_enabled_fields=Felter_med_ordliste
-
-Server_Hostname_\:=Tjenernavn:
-
-Server_Type_\:=Tjenertype:
-
-Set_field=Sett_felt
-
-Set_fields=Sett_felter
-
-Set_general_fields=Tilpass_generelle_felter
-
-Set_main_external_file_directory=Sett_hovedkatalog_for_eksterne_linker
-
-Set_table_font=Velg_tabellfont
-
-Settings=Innstillinger
-
-Setup_selectors=Sett_opp_ordlister
-
-Short_form=Kort_form
-
-Shortcut=Snarvei
-
-Show/edit_BibTeX_source=Vis/rediger_BibTeX-kilde
-
-Show_'Firstname_Lastname'=Vis_'Fornavn_Etternavn'
-
-Show_'Lastname,_Firstname'=Vis_'Etternavn,_Fornavn'
-
-Show_BibTeX_source_by_default=Vis_BibTeX-kode_som_standard
-
-Show_BibTeX_source_panel=Vis_BibTeX-kilde-panel
-
-Show_confirmation_dialog_when_deleting_entries=Vis_dialog_for_\u00e5_bekrefte_sletting_av_enheter
-
-Show_description=Vis_beskrivelse
-
-Show_dynamic_groups_in_<i>italics</i>=Vis_dynamiske_grupper_i_<i>kursiv</i>
-
-Show_entries_*not*_in_group_selection=Vis_enheter_*utenfor*_valgte_grupper
-
-Show_file_column=Vis_'file'-kolonne
-
-Show_icons_for_groups=Vis_ikoner_for_grupper
-
-Show_last_names_only=Vis_bare_etternavn
-
-Show_names_unchanged=Vis_navn_uforandret
-
-Show_one_less_rows=Vis_en_rad_mindre
-
-Show_one_more_row=Vis_en_rad_mer
-
-Show_optional_fields=Vis_valgfrie_felter
-
-Show_PDF/PS_column=Vis_PDF/PS-kolonne
-
-Show_required_fields=Vis_n\u00f8dvendige_felter
-
-Show_URL/DOI_column=Vis_URL/DOI-kolonne
-
-Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Vis_advarsel_n\u00e5r_en_ikke_unik_BibTeX-n\u00f8kkel_skrives_inn
-
-Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Vis_dialogboks_med_advarsel_n\u00e5r_en_tom_BibTeX-n\u00f8kkel_skrives_inn
-
-Simple_HTML=Enkel_HTML
-
-Size=St\u00f8rrelse
-
-Skip=Hopp_over
-
-Skipped_-_No_PDF_linked=Hoppet_over_-_ingen_PDF-fil_linket
-
-Skipped_-_PDF_does_not_exist=Hoppet_over_-_PDF-filen_finnes_ikke
-
-Skipped_entry.=Hoppet_over_enhet.
-
-Sort_alphabetically=Sorter_alfabetisk
-
-Sort_Automatically=Sorter_automatisk
-
-Sort_order=Sortering
-
-sort_subgroups=sorter_undergrupper
-
-Sorted_all_subgroups_recursively.=Sorterte_alle_undergrupper_rekursivt.
-
-Sorted_immediate_subgroups.=Sorterte_n\u00e6rmeste_undergrupper.
-
-source_edit=redigering_av_kilde
-
-Special_Name_Formatters=Spesielle_navneformaterere
-
-Special_table_columns=Spesielle_kolonner
-
-SQL_connection_established.=Etablerte_SQL-forbindelse
-
-Start_incremental_search=Start_inkrementelt_s\u00f8k
-
-Start_search=Start_s\u00f8k
-
-Starting_import=Starter_import
-
-Statically_group_entries_by_manual_assignment=Grupper_enheter_statisk_ved_manuell_tildeling
-
-Status=Status
-
-Stop=Stopp
-
-Store_journal_abbreviations=Lagre_journalforkortelser
-
-Store_string=Lagre_streng
-
-Store_the_following_fields_with_braces_around_capital_letters=Lagre_de_f\u00f8lgende_feltene_med_kr\u00f8llparenteser_rundt_store_bokstaver
-
-Stored_entry=Lagret_enhet
-
-Strings=Strenger
-
-Strings_for_database=Strenger_for_database
-
-Subdatabase_from_aux=Deldatabase_fra_aux-fil
-
-Suggest=Foresl\u00e5
-
-Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Bytter_mellom_fullt_og_forkortet_journalnavn_dersom_navnet_er_kjent.
-
-Synchronize_%0_links=Synkroniser_%0-linker
-
-Synchronize_file_links=Synkroniser_eksterne_linker
-
-Synchronizing_%0_links...=Synkroniserer_%0-linker...
-
-Table_appearance=Tabelloppsett
-
-Table_background_color=Bakgrunnsfarge_for_tabell
-
-Table_grid_color=Farge_p\u00e5_linjer_i_tabell
-
-Table_text_color=Tekstfarge_i_tabell
-
-Tabname=Tabnavn
-
-Target_file_cannot_be_a_directory.=M\u00e5lfilen_kan_ikke_v\u00e6re_en_katalog.
-
-Tertiary_sort_criterion=Tredje_sorteringskriterium
-
-Test=Test
-
-Text_Input_Area=Inndatafelt
-
-The_#_character_is_not_allowed_in_BibTeX_fields=#-tegnet_er_ikke_tillatt_i_BibTeX-felter
-
-The_chosen_date_format_for_new_entries_is_not_valid=Det_valgte_datoformatet_er_ugyldig
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Den_valgte_tegnkodingen_'%0'_kunne_ikke_kode_f\u00f8lgende_tegn:_
-
-The_CiteSeer_fetch_operation_returned_zero_results.=Nedlastingen_fra_CiteSeerX_ga_ingen_resultater.
-
-The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=Denne_versjonen_tilbyr_en_ny_m\u00e5te_\u00e5_h\u00e5ndtere_linker_til_eksterne_filer.<br>For_\u00e5_dra_nytte_av_dette_m\u00e5_linkene_dine_endres_til_det_nye_formatet,_og<br>JabRef_m\u00e5_konfigureres_for_\u00e5_vise_de_nye_linkene.
-
-the_field_<b>%0</b>=feltet_<b>%0</b>
-
-The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Filen<BR>'%0'<BR>har_blitt_endret<BR>eksternt!
-
-The_group_"%0"_already_contains_the_selection.=Gruppen_"%0"_inneholder_allerede_de_valgte_enhetene.
-
-The_label_of_the_string_can_not_be_a_number.=Navnet_p\u00e5_strengen_kan_ikke_v\u00e6re_et_tall.
-
-The_label_of_the_string_can_not_contain_spaces.=Navnet_p\u00e5_strengen_kan_ikke_inneholde_mellomrom.
-
-The_label_of_the_string_can_not_contain_the_'#'_character.=Navnet_p\u00e5_strengen_kan_ikke_inneholde_tegnet_'#'.
-
-The_output_option_depends_on_a_valid_import_option.=Lagre-operasjonen_er_avhengig_av_en_gyldig_import-operasjon.
-
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=PDF-filen_inneholder_en_eller_flere_BibTeX-enheter.nVil_du_importere_disse_som_nye_enheter_i_den_\u00e5pne_databasen?
-
-The_regular_expression_<b>%0</b>_is_invalid%c=Regul\u00e6ruttrykket_<b>%0</b>_er_ugyldig%c
-
-The_search_is_case_insensitive.=S\u00f8ket_skiller_ikke_mellom_store_og_sm\u00e5_bokstaver.
-
-The_search_is_case_sensitive.=S\u00f8ket_skiller_mellom_store_og_sm\u00e5_bokstaver.
-
-The_string_has_been_removed_locally=Strengen_har_blitt_slettet_lokalt
-
-There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Det_finnes_mulige_duplikater_(merket_med_et_'D'-ikon)_som_ikke_har_blitt_h\u00e5ndtert._Fortsette?
-
-this_button_will_update=denne_knappen_vil_oppdatere
-
-This_database_was_written_using_an_older_version_of_JabRef.=Denne_databasen_ble_lagret_fra_en_eldre_versjon_av_JabRef.
-
-This_entry_has_no_BibTeX_key._Generate_key_now?=Denne_enheten_har_ingen_BibTeX-n\u00f8kkel._Generer_n\u00f8kkel_n\u00e5?
-
-This_entry_is_incomplete=Denne_enheten_er_ufullstendig
-
-This_entry_type_cannot_be_removed.=Denne_enhetstypen_kan_ikke_slettes.
-
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Denne_eksterne_linken_er_av_typen_'%0'_som_er_udefinert._Hva_vil_du_gj\u00f8re?
-
-This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Denne_gruppen_inneholder_enheter_basert_p\u00e5_manuell_tilordning._Enheter_kan_tilordnes_til_denne_gruppen_ved_\u00e [...]
-
-This_group_contains_entries_in_which=Denne_gruppen_inneholder_enheter_hvor
-
-This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Denne_gruppen_inneholder_enheter_som_stemmer_med_regul\u00e6ruttrykket_<b>%0</b>_i_et_hvilket_som_helst_felt
-
-This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Denne_gruppen_inneholder_enheter_som_har_teksten_<b>%0</b>_i_et_hvilket_som_helst_felt
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Denne_gruppen_inneholder_enheter_hvis_<b>%0</b>-felt_inneholder_n\u00f8kkelordet_<b>%1</b>
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Denne_gruppen_inneholder_enheter_hvis_<b>%0</b>-felt_stemmer_med_regul\u00e6ruttrykket_<b>%1</b>
-
-This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Dette_er_et_enkelt_klipp-og-lim-vindu._F\u00f8rst_last_inn_eller_kopier_tekst_til_inndatafeltet._Deretter_kan_du_merke_tekst_og_tildele_den_til_et_BibTeX-felt.
-
-This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dette_f\u00e5r_JabRef_til_\u00e5_unders\u00f8ke_hver_av_%0-linkene,_og_sjekke_om_filen_eksisterer._Hvis_ikke_vil_du_bli_gitt_valg<BR>for_\u00e5_l\u00f8se_problemet.
-
-This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Denne_operasjonen_krever_at_alle_valgte_enheter_har_definerte_BibTeX-n\u00f8kler.
-
-This_operation_requires_at_least_one_entry.=Denne_operasjonen_krever_minst_en_enhet.
-
-This_operation_requires_one_or_more_entries_to_be_selected.=Denne_operasjonen_krever_at_en_eller_flere_enheter_er_valgt.
-
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Denne_operasjonen_vil_flytte_alle_eskterne_linker_fra_'pdf'-_og_'ps'-feltene_til_'%0'-feltet._Fortsette?
-
-To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=For_\u00e5_sette_opp,_g\u00e5_til_<B>Verkt\u00f8y_->_Sett_opp_journalforkortelser</b>
-
-Toggle_abbreviation=Forkort/ekspander
-
-Toggle_entry_preview=Vis/skjul_forh\u00e5ndsvisning
-
-Toggle_groups_interface=Vis/skjul_grupperingskontroll
-
-Toggle_search_panel=Vis/skjul_s\u00f8kepanel
-
-Try_different_encoding=Pr\u00f8v_en_annen_tegnkoding
-
-Type_set_to_'other'=Type_satt_til_'other'
-
-Unabbreviate_journal_names_of_the_selected_entries=Ekspander_journalnavn_for_de_valgte_enhetene
-
-Unabbreviated_%0_journal_names.=Ekspanderte_%0_journalnavn.
-
-unable_to_access_LyX-pipe=ingen_tilgang_til_LyX-pipe
-
-Unable_to_create_graphical_interface=Kunne_ikke_opprette_grafisk_grensesnitt
-
-Unable_to_open_file.=Kan_ikke_\u00e5pne_fil.
-
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Kan_ikke_\u00e5pne_link._Applikasjonen_'%0'_assosiert_med_filtypen_'%1'_kunne_ikke_kalles.
-
-Unable_to_read_default_icon_theme.=Kunne_ikke_lese_standard_ikonsettfil.
-
-Unable_to_read_icon_theme_file=Kunne_ikke_lese_ikonsettfil
-
-unable_to_write_to=kunne_ikke_skrive_til
-
-Undefined_file_type=Udefinert_filtype
-
-Undo=Angre
-
-Union=Union
-
-Unknown_bibtex_entries=Ukjente_BibTeX-enheter
-
-unknown_edit=ukjent_endring
-
-unknown_entry_type=ukjent_enhetstype
-
-Unknown_export_format=Ukjent_eksportformat
-
-Unmark_all=Fjern_merking_fra_alle
-
-Unmark_entries=Fjern_merking
-
-Unmark_entry=Fjern_merking
-
-Unmarked_selected=Fjernet_merking_fra_valgte_enheter
-
-Unpack_EndNote_filter_set=Pakk_ut_EndNote-filtersett
-
-Unpacked_file.=Pakket_ut_fil.
-
-Unsupported_version_of_class_%0\:_%1=Ikke_st\u00f8ttet_versjon_av_klassen_%0:_%1
-
-untitled=uten_navn
-
-Up=Opp
-
-Update_to_current_column_widths=Bruk_n\u00e5v\u00e6rende_kolonnebredder
-
-Updated_group_selection=Updated_group_selection
-
-Upgrade_external_links=Oppgrader_eksterne_linker
-
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Oppgrader_eksterne_PDF-_og_PS-linker_til_\u00e5_bruke_'%0'-feltet.
-
-Upgrade_file=Oppgrader_fil
-
-Upgrade_old_external_file_links_to_use_the_new_feature=Oppgrader_gamle_eksterne_linker_for_\u00e5_bruke_den_nye_funksjonen
-
-Upgraded_links.=Oppgraderte_linker.
-
-UPPER=STORE_BOKSTAVER
-
-Upper_Each_First=Stor_Forbokstav
-
-Upper_first=Stor_forbokstav_f\u00f8rst
-
-usage=bruk
-
-Use_antialiasing_font=Bruk_glattet_font
-
-Use_autocompletion_for_the_following_fields=Bruk_autokomplettering_for_f\u00f8lgende_felter
-
-Use_custom_icon_theme=Bruk_egendefinert_ikonsett
-
-Use_default_viewer=Bruk_standardprogram_for_filtypen
-
-Use_inspection_window_also_when_a_single_entry_is_imported.=Bruk_inspeksjonsvindu_ogs\u00e5_n\u00e5r_bare_\u00e9n_enhet_importeres.
-
-Use_native_file_dialog=Bruk_system-fildialog
-
-Use_other_look_and_feel=Bruk_annet_utseende
-
-Use_Regular_Expression_Search=S\u00f8k_med_regul\u00e6ruttrykk
-
-Use_regular_expressions=Bruk_"regular_expressions"
-
-Use_the_following_delimiter_character(s)=Use_the_following_delimiter_character(s)
-
-Username_\:=Brukernavn:
-
-Value_cleared_externally=Verdien_slettet_eksternt
-
-Value_set_externally=Verdi_satt_eksternt
-
-verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=kontroller_at_LyX_kj\u00f8rer,_og_at_den_angitte_lyxpipe_stemmer
-
-View=Vis
-
-Vim_Server_Name=Navn_p\u00e5_Vim-server
-
-Waiting_for_ArXiv...=Venter_p\u00e5_ArXiv
-
-Warn_about_unresolved_duplicates_when_closing_inspection_window=Advar_om_duplikater_som_ikke_er_blitt_h\u00e5ndtert_n\u00e5r_inspeksjonsvinduet_lukkes
-
-Warn_before_overwriting_existing_keys=Gi_advarsel_f\u00f8r_eksisterende_n\u00f8kler_skrives_over
-
-Warning=Advarsel
-
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Advarsel:_kunne_ikke_fullf\u00f8re_reparasjon_av_filen;_filen_kan_v\u00e6re_\u00f8delagt._Feilmelding
-
-Warning_there_is_a_duplicate_key=Advarsel:_det_finnes_en_lik_BibTeX-n\u00f8kkel
-
-Warnings=Advarsler
-
-web_link=link
-
-What_do_you_want_to_do?=Hva_vil_du_gj\u00f8re?
-
-When_adding/removing_keywords,_separate_them_by=N\u00e5r_n\u00f8kkelord_legges_til_eller_fjernes_skill_dem_med
-
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Vil_skrive_XMP-metadata_til_PDFene_linket_fra_de_valgte_enhetene.
-
-with=med
-
-Word=Ord
-
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=Skriv_BibTeX-enheten_som_XMP-metadata_til_PDF.
-
-Write_XMP=Skriv_XMP
-
-Write_XMP-metadata=Skriv_XMP-metadata
-
-Write_XMP-metadata_for_all_PDFs_in_current_database?=Skriv_XMP-metadata_for_alle_PDFer_i_denne_databasen?
-
-Writing_XMP=Skriver_XMP
-
-Writing_XMP_metadata...=Skriver_XMP-metadata...
-
-Writing_XMP_metadata_for_selected_entries...=Skriver_XMP-metadata_for_de_valgte_enhetene...
-
-Writing_XMP_to_'%0'...=Skriver_XMP_til_'%0'
-
-Wrong_file_format=Feil_filformat
-
-Wrote_XMP-metadata=Skrev_XMP-metadata
-
-Wrote_XMP_to_'%0'.=Skrev_XMP_til_'%0'
-
-XMP-annotated_PDF=XMP-annotert_PDF
-
-XMP_Export_Privacy_Settings=Innstillinger_for_XMP-eksport
-
-XMP_metadata=XMP-metadata
-
-XMP_metadata_found_in_PDF\:_%0=XMP-metadata_funnet_i_PDF:_%0
-
-You_must_restart_JabRef_for_this_to_come_into_effect.=Du_m\u00e5_starte_JabRef_p\u00e5_nytt_for_at_dette_skal_tre_i_kraft.
-
-You_have_changed_the_language_setting.=Du_har_valgt_et_nytt_spr\u00e5k.
-
-
-You_have_changed_the_look_and_feel_setting.=Du_har_endret_instillingen_for_utseende.
-
-You_have_cleared_this_field._Original_value=Du_har_slettet_dette_feltet._Original_verdi
-
-You_have_entered_an_invalid_search_'%0'.=Ugyldig_s\u00f8keuttrykk_'%0'.
-
-You_must_choose_a_file_name_to_store_journal_abbreviations=Du_m\u00e5_velge_et_filnavn_for_\u00e5_lagre_journalforkortelser
-
-You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Du_m\u00e5_starte_JabRef_p\u00e5_nytt_for_at_de_nye_hurtigtastene_skal_fungere.
-
-You_must_set_both_BibTeX_key_and_%0_directory=Du_m\u00e5_sette_b\u00e5de_BibTeX-n\u00f8kkel_og_%0-katalog
-
-Your_new_key_bindings_have_been_stored.=Dine_nye_hurtigtaster_har_blitt_lagret.
-
-The_following_fetchers_are_available\:=De_f\u00f8lgende_nedlasterne_er_tilgjengelige:
-
-Could_not_find_fetcher_'%0'=Kunne_ikke_finne_nedlasteren_'%0'
-
-Running_Query_'%0'_with_fetcher_'%1'.=Utf\u00f8rer_s\u00f8k_'%0'_med_nedlaster_'%1'.
-
-Please_wait!=Vennligst_vent!
-
-Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=S\u00f8ket_'%0'_med_nedlaster_'%1'_ga_ingen_resultater.
-
-Open_SPIRES_entry=\u00c5pne_SPIRES-enhet
-
-Move/Rename_file=Flytt/endre_navn_p\u00e5_fil
-
-File_moved=Flyttet_fil
-
-Move_file_failed=Flytting_av_fil_mislyktes
-
-Could_not_move_file=Kunne_ikke_flytte_filen
-
-Could_not_find_file_'%0'.=Kunne_ikke_finne_filen_'%0'.
-
-Move/rename_file=Flytt/endre_navn_p\u00e5_fil
-
-Number_of_entries_successfully_imported=Antall_enheter_importert
-
-Import_canceled_by_user=Import_avbrutt_av_bruker
-
-Progress\:_%0_of_%1=Framdrift:_%0_av_%1
-
-Error_while_fetching_from_JSTOR=Feil_ved_henting_fra_JSTOR
-
-Fetching_Medline_by_id...=Henter_Melding_ved_hjelp_av_ID...
-
-Fetching_Medline_by_term...=Henter_Medline_ved_hjelp_av_n\u00f8kkelord...
-
-Medline_import_canceled=Medline-import_kansellert
-
-Please_enter_a_valid_number=Vennligst_skriv_inn_et_gyldig_tall
-
-Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Vennligst_skriv_inn_en_kommaseparert_liste_av_Medline-IDer_(tall)_eller_s\u00f8keord.
-
-An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=Feil_ved_henting_fra_SPIRES-kilde_(%0):
-
-Error_while_fetching_from_Spires\:_=Feil_ved_henting_fra_SPIRES:_
-
-Connect_to_external_SQL_database=Koble_til_ekstern_SQL-database
-
-Export_to_external_SQL_database=Eksporter_til_ekstern_SQL-database
-
-Show_results_in_dialog=Vis_resultater_i_eget_vindu
-
-Global_search=Globalt_s\u00f8k
-
-Show_search_results_in_a_window=Vis_s\u00f8keresultatene_i_et_vundu
-
-Search_results=S\u00f8keresultater
-
-Move_file_to_file_directory?=Flytt_filen_til_hovedkatalogen_for_filer?
-
-Rename_to_'%0'=Endre_navn_til_'%0'
-
-Move_to_file_directory=Flytt_til_hovedkatalog_for_filer
-
-You_have_changed_the_menu_and_label_font_size.=Du_har_endret_skriftst\u00f8rrelser.
-
-Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Databasen_er_beskyttet._Kan_ikke_lagre_f\u00f8r_eksterne_endringer_har_blitt_gjennomg\u00e5tt.
-
-Protected_database=Beskyttet_database
-
-Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Nekt_\u00e5_lagre_databasen_f\u00f8r_eksterne_endringer_har_blitt_gjennomg\u00e5tt.
-
-Database_protection=Databasebeskyttelse
-
-Unable_to_save_database=Kan_ikke_lagre_databasen
-
-BibTeX_key_generator=BibTeX-n\u00f8kkelgenerator
-
-Unable_to_open_link.=Kan_ikke_\u00e5pne_link.
-
-Search_JSTOR=S\u00f8k_JSTOR
-
-Attempting_SQL_import...=Pr\u00f8ver_SQL-import...
-
-BibO_RDF=BibO_RDF
-
-HTML_parser=HTML-leser
-
-Move_the_keyboard_focus_to_the_entry_table=Flytt_fokus_til_hovedtabellen
-
-MIME_type=MIME-type
-
-This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Denne_funksjonen_lar_deg_\u00e5pne_eller_importere_nye_filer_til_en_allerede_kj\u00f8rende_instans_av_JabRef<br>fra_nettleseren_din.<br>Merk_at_dette_vil_hindre_deg_i_\u00e5_kj\u00f8r [...]
-
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Merk_at_disse_instillingene_bare_brukes_for_de_foreldede_<b>pdf</b>-_og_<b>ps</b>-feltene.<br>For_de_fleste_brukerne_er_det_tilstrekkelig_\u00e5_sette_<b>Hovedkatalog_for_filer</b>_ovenfor.
-
-Legacy_file_fields=Foreldede_linkfelter
-
-This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dette_f\u00e5r_JabRef_til_\u00e5_se_p\u00e5_hver_%0-link,_og_sjekke_om_filen_eksisterer._Hvis_ikke_vil_du_f\u00e5_noen<BR>alternativer_for_\u00e5_l\u00f8se_problemet.
-
-Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=
-
-The_ACM_Digital_Library=ACM_Digital_Library
-
-Reset=Resett
-
-Use_IEEE_LaTeX_abbreviations=Bruk_IEEE-LaTeX-forkortelser
-
-The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
-
-Search_ACM_Portal=S\u00b8k_ACM-portalen
-
-Connection_to_ACM_Portal_failed=Kunne_ikke_opprette_forbindelse_til_ACM-portalen
-
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=Ved_\u00e5pning_av_linke,_s\u00b8k_etter_matchende_fil_hvis_ingen_er_definert
-
-Settings_for_%0=Innstillinger_for_%0
-
-Insert_selected_citations_into_Vim=Send_valgte_enheter_til_Vim
-
-RIS=RIS
-
-Assign_exclusively_to_group=Tilordne_eksklusivt_til_gruppe
-
-Bad_Request_'%0'.=Bad_request_'%0'.
-
-Mark_entries_imported_into_an_existing_database=Merk_enheter_som_importeres_til_en_eksisterende_database
-
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Fjern_merking_fra_alle_merkede_enheter_f\u00b8r_nye_importeres
-
-Forward=Fram
-
-Back=Tilbake
-
-Sort_the_following_fields_as_numeric_fields=Sorter_de_f\u00c3\u00b8lgende_feltene_som_tall
-
-Line_%0\:_Found_corrupted_BibTeX-key.=Linje_%0:_Fant_ugyldig_BibTeX-n\u00b8kkel.
-
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Linje_%0:_Fant_ugyldig_BibTeX-n\u00b8kkel_(inneholder_mellomrom).
-
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Linje_%0:_Fant_ugyldig_BibTeX-n\u00b8kkel_(manglende_komma).
-
-Finished_downloading_full_text_document=Fullf\u00b8rte_nedlasting_av_fulltekstdokument
-
-Unable_to_find_full_text_document_in_the_linked_web_page.=Kan_ikke_finne_fulltekstdokument_p\u00e5_den_linkede_websiden.
-
-Connection_error_when_trying_to_find_full_text_document.=Tilkoblingsfeil_ved_for\u00b8k_p\u00e5_\u00e5_finne_fulltekstdokument
-
-This_entry_provides_no_URL_or_DOI_links.=Denne_enheten_har_ingen_URL-_eller_DOI-linker
-
-Full_text_article_download_failed=Kunne_ikke_laste_ned_fulltekstdokument
-
-Update_to_current_column_order=Oppdater_til_n\u00e5v\u00e6rende_rekkef\u00b8lge_p\u00e5_kolonner
-
-Rename_field=Endre_navn_p\u00e5_felt
-
-Set/clear/rename_fields=Sett/slett/endre_navn_p\u00e5_felt
-
-Rename_field_to\:=Endre_navn_p\u00e5_felt_til:
-
-Move_contents_of_a_field_into_a_field_with_a_different_name=Flytt_innholdet_i_et_felt_til_et_annet_felt
-
-You_can_only_rename_one_field_at_a_time=Du_kan_bare_endre_navn_p\u00e5_ett_felt_av_gangen
-
-Remove_all_broken_links=Fjern_alle_ugyldige_linker
-
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Kan_ikke_bruke_port_%0_for_fjernstyring;_den_kan_v\u00e6re_i_bruk_av_et_annet_program._Pr\u00b8v_\u00e5_spesifisere_en_annen_port.
-
-Plugin_installer=Plugin-installasjon
-
-Unable_to_create_plugin_directory=Kan_ikke_opprette_pluginkatalog
-
-Unable_to_copy_file=Kan_ikke_kopiere_fil
-
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Installasjon_av_plugin_fullf\u00b8rt._Du_m\u00e5_starte_JabRef_p\u00e5_nytt_for_\u00e5_laste_den_inn.
-
-Unable_to_create_user_plugin_directory=Kan_ikke_opprette_brukerspesifikk_pluginkatalog
-
-Plugin_installation_failed.=Installasjon_av_plugin_mislyktes.
-
-The_same_version_of_this_plugin_is_already_installed.=Samme_versjon_av_denne_plugin'en_er_allerede_installert.
-
-A_newer_version_of_this_plugin_is_already_installed.=En_nyere_versjon_av_denne_plugin'en_er_allerede_installert.
-
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=En_eller_flere_versjoner_av_denne_plugin'en_er_installert._Slette_gamle_versjoner?
-
-Old_versions_deleted_successfully.=Gamle_versjoner_slettet.
-
-Install_plugin=Installer_plugin
-
-Download_plugin=Last_ned_plugin
-
-Plugin_manager=Plugin-h\u00e5ndtering
-
-Delete_the_%0_selected_plugins?=Slette_de_%0_valgte_plugins?
-
-Delete_plugins=Slett_plugin
-
-Delete_the_selected_plugin?=Slette_valgt_plugin?
-
-Delete_plugin=Slett_plugin
-
-Enter_download_URL=Skriv_inn_URL_for_nedlasting
-
-Plugin_name=Navn_p\u00e5_plugin
-
-Version=Versjon
-
-Unknown=Ukjent
-
-Not_loaded=Ikke_lastet
-
-Loaded=Lastet
-
-Could_not_determine_version_of_=Kunne_ikke_bestemme_versjonsnummer_for_
-
-Install_anyway?=Installer_likevel?
-
-Looking_for_full_text_document...=Ser_etter_fulltekstdokument...
-
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=F\u00f8lg_DOI-_eller_URL-link_og_pr\u00f8v_\u00e5_finne_fulltekst-dokument
-
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Kunne_ikke_finne_fulltekstdokument._Ingen_s\u00f8kealgoritme_definert_for_websiden_'%0'.
-
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Fant_PDF-link,_men_mottok_feil_MIME-type._Dette_kan_indikere_at_du_ikke_har_tilgang_til_fulltekstdokumentet.
-
-Autosave=Autolagring
-
-Prompt_before_recovering_a_database_from_an_autosave_file=Sp\u00b8r_f\u00b8r_en_database_gjenopprettes_fra_autolagret_fil
-
-Autosave_interval_(minutes)=Intervall_for_autolagring_(minutter)
-
-Do_you_want_to_recover_the_database_from_the_autosave_file?=Vil_du_gjenopprette_databasen_fra_den_autolagrede_filen?
-
-Recover_from_autosave=Gjenopprette_fra_autolagret_fil
-
-%0_warnings=%0_advarsler
-
-Save_in_current_table_sort_order=Lagre_i_n\u00e5v\u00e6rende_sortering
-
-Export_in_current_table_sort_order=Eksporter_i_n\u00e5v\u00e6rende_sortering
-
-Export_ordered_by_author/editor/year=Eksporter_sortert_etter_author/editor/year
-
-Export_entries_in_their_original_order=Eksporter_enheter_i_deres_opprinnelige_rekkef\u00b8lge
-
-Error_opening_file_'%0'.=Feil_ved_\u00e5pning_av_filen_'%0'.
-
-Autosave_of_file_'%0'=Autolagring_av_filen_'%0'
-
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Feil_ved_\u00e5pning_av_autolagret_versjon_av_'%0'._Pr\u00b8ver_\u00e5_laste_'%0'_i_stedet.
-
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugins_installert_i_din_brukerspesifikke_pluginkatalog_(%0):
-
-Plugins_installed_in_other_locations\:=Plugins_installert_andre_steder:
-
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=Plugin'ene_vil_bli_slettet_neste_gang_JabRef_starter.
-
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=Plugin'en_vil_bli_slettet_neste_gang_JabRef_starter.
-
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Gamle_versjoner_av_plugins_vil_bli_slettet_neste_gang_JabRef_starter.
-
-Formatter_not_found\:_%0=Fant_ikke_formaterer:_%0
-
-The_following_formatters_could_not_be_found=Fant_ikke_f\u00b8lgende_formaterere
-
-Clear_inputarea=T\u00b8m_inputfelt
-
-Automatically_set_file_links_for_this_entry=Set_fillinker_for_denne_enheten_automatisk
-
-Could_not_save,_file_locked_by_another_JabRef_instance.=Kunne_ikke_lagre,_filen_er_l\u00e5st_av_en_annen_instans_av_JabRef.
-
-File_is_locked_by_another_JabRef_instance.=Filen_er_l\u00e5st_av_en_annen_instans_av_JabRef.
-
-Do_you_want_to_override_the_file_lock?=Vil_du_overstyre_fill\u00e5sen?
-
-File_locked=Filen_er_l\u00e5st
-
-Current_tmp_value=N\u00e5v\u00e6rende_tmp-verdi
-
-Metadata_change=Endring_av_metadata
-
-Changes_have_been_made_to_the_following_metadata_elements=Endringer_er_gjort_for_de_f\u00b8lgende_metadata-elementene
-
-Generate_groups_for_author_last_names=Generer_grupper_for_etternavn_fra_author-feltet
-
-Generate_groups_for_editor_last_names=Generer_grupper_for_etternavn_fra_editor-feltet
-
-Generate_groups_from_keywords_in_a_BibTeX_field=Generer_grupper_fra_n\u00b8kkelord_i_et_BibTeX-felt
-
-Enforce_legal_characters_in_BibTeX_keys=Forby_tegn_i_BibTeX-n\u00b8kler_som_ikke_aksepteres_av_BibTeX
-
-The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Tegnet_#_er_ikke_tillatt_i_BibTeX-n\u00b8kler_hvis_det_ikke_merkes_med_en_backslash_(#).
-
-Before_saving,_please_edit_any_strings_containing_the_#_character.=F\u00b8r_du_lagrer,_vennligst_rediger_strenger_som_inneholder_tegnet_#.
-
-Save_without_backup?=Lagre_uten_backup?
-
-Unable_to_create_backup=Kan_ikke_lagre_backup?
-
-File_directory_is_not_set_or_does_not_exist.=Filkatalogen_er_ikke_valgt_eller_eksisterer_ikke.
-
-Move_file_to_file_directory.=Flytt_fil_til_filkatalog.
-
-Rename_file_to=Endre_navn_p\u00e5_fil_til
-
-<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Alle_enheter</b>_(denne_gruppen_kan_ikke_endres_eller_slettes)
-
-static_group=statisk_gruppe
-dynamic_group=dynamisk_gruppe
-refines_supergroup=subset_av_gruppen_over
-includes_subgroups=inkluderer_gruppen_over
-contains=inneholder
-search_expression=s\u00b8keutryk
-
-Disable_file_renaming_in_non-native_file_dialog=Deaktiver_mulighet_for_\u00e5_endre_navn_i_system-fildialog
-
-File_dialog=Fildialog
-
-No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Fant_ingen_enheter._Det_ser_ut_som_om_du_ikke_har_tilgang_til_\u00e5_s\u00b8ke_p\u00e5_JStor.
-
-Search_ScienceDirect=S\u00b8k_ScienceDirect
-
-Error_while_fetching_from_ScienceDirect=Feil_ved_nedlasting_fra_ScienceDirect
-
-Error_initializing_custom_export_format_from_string_'%0'=Feil_ved_initialisering_av_eksternt_eksportfilter_fra_strengen_'%0'
-
-BibLaTeX_mode=BibLaTeX-modus
-
-Optional_fields_2=Valgfrie_felter_2
-
-Please_wait=Vennligst_vent
-
-Waiting_for_save_operation_to_finish=Venter_p\u00e5_lagringsoperasjon
-
-Resolving_duplicate_BibTeX_keys...=S\u00f8k_etter_dupliserte_BibTeX-n\u00f8kler
-
-Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Fullf\u00f8rte_s\u00f8k_etter_dupliserte_BibTeX-n\u00f8kler._%0_enheter_endret.
-
-This_database_contains_one_or_more_duplicated_BibTeX_keys.=Denne_database_inneholder_en_eller_flere_dupliserte_BibTeX-n\u00f8kler
-
-Do_you_want_to_resolve_duplicate_keys_now?=Vil_du_ordne_opp_i_dupliserte_n\u00f8kler_n\u00e5?
-
-Find_and_remove_duplicate_BibTeX_keys=Finn_og_fjern_dupliserte_BibTeX-n\u00f8kler
-
-Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=
-
-Duplicate_BibTeX_key=Duplisert_BibTeX-n\u00f8kkel
-
-Duplicate_key=Duplisert_n\u00f8kkel
-
-Generate_key=Generer_n\u00f8kkel
-
-Import_marking_color=Farge_som_markerer_importerte_enheter
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=Fant_%0_enheter._For_\u00e5_redusere_lasten_p\u00e5_serveren_vil_bare_%1_enheter_bli_lastet_ned._Nedlastingen_vil_g\u00e5_langsomt_for_\u00e5_blidgj\u00b8re_ACM.
-
-BibTeX_importer=BibTeX-importerer
-
-Always_add_letter_(a,_b,_...)_to_generated_keys=Legg_alltid_til_en_bokstav_(a,_b,_...)_til_genererte_n\u00f8kler
-
-Ensure_unique_keys_using_letters_(a,_b,_...)=Sikre_unike_n\u00f8kler_ved_bruk_av_bokstaver_(a,_b,_...)
-
-Ensure_unique_keys_using_letters_(b,_c,_...)=Sikre_unike_n\u00f8kler_ved_bruk_av_bokstaver_(b,_c,_...)
-
-Entry_editor_active_background_color=Bakgrunnsfarge_for_aktivt_felt_i_enhetsskjema
-
-Entry_editor_background_color=Bakgrunnsfarge_i_enhetsskjema
-
-Entry_editor_font_color=Tekstfarge_i_enhetsskjema
-
-Entry_editor_invalid_field_color=Bakgrunnsfarge_for_ugyldige_felt_i_enhetsskjema
-
-Table_and_entry_editor_colors=Farger_i_tabell_og_enhetsskjema
-
-An_autosave_file_was_found_for_this_database._This_could_indicate_=En_autolagret_fil_for_denne_databasen_ble_funnet._Dette_kan_indikere_
-
-that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=at_JabRef_ikke_ble_avsluttet_p\u00e5_normalt_vis_da_denne_filen_sist_ble_brukt.
-
-General_file_directory=Standard_filkatalog
-
-User-specific_file_directory=Brukerdefinert_filkatalog
-
-Error_setting_look_and_feel=Feil_ved_endring_av_look_and_feel
-
-Search_failed\:_illegal_search_expression=Kunne_ikke_s\u00f8ke:_feil_i_s\u00f8keuttrykk
-
-Show_ArXiv_column=Vis_ArXiv-kolonne
-
-<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>
-
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Uthev_grupper_som_inneholder_enheter_inneholdt_i_valgte_grupper
-
-You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=Du_m\u00e5_velge_en_heltallsverdi_i_intervallet_1025-65535_i_feltet_for
-
-Automatically_open_browse_dialog_when_creating_new_file_link=\u00c5pne_fildialog_automatisk_n\u00e5r_ny_link_opprettes
-
-Import_Metadata_from\:=Importer_metadata_fra:
-
-Choose_the_source_for_the_metadata_import=Velg_kilde_for_import_av_metadata
-
-Create_entry_based_on_XMP_data=Lag_enhet_basert_p\u00e5_XMP-data
-
-Create_entry_based_on_data_fetched_from=Lag_enhet_basert_p\u00e5_data_hentet_fra
-
-Create_blank_entry_linking_the_PDF=Lag_blank_enhet_med_lenke_til_PDF
-
-Only_attach_PDF=Bare_lenk_til_PDF
-
-Mr._dLib_Metadata_Entries_Associated_With\:=Mr._dLib_metadata-enheter_assosiert_med:
-
-Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr._dLib_metadata-enheter_assosiert_med_PDF-fil
-
-Title=Tittel
-
-Author(s)=Forfatter(e)
-
-Published_Year=Publikasjons\u00e5r
-
-No_metadata_found.=Ingen_metadata_funnet
-
-Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib_webtjeneste_er_for_\u00f8yeblikket_utilgjengelig.
-
-Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib_webtjeneste_er_for_\u00f8yeblikket_utilgjengelig._Vennligst_pr\u00f8v_igjen_senere.
-
-You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Du_er_ikke_koblet_til_internett._En_internettforbindelse_trengs_for_\u00e5_bentytte_Mr._dLib-webtjenesten.
-
-No_Internet_Connection.=Ingen_internettforbindelse
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Denne_versjonen_av_JabRef_fors\u00f8ker_\u00e5_koble_til_en_gammel_versjon_av_Mr._dLib-webtjenesten_som_ikke_lenger_virker.nVennligst_g\u00e5_til_http://jabref.sourceforge.net_eller_http://www.mr-dlib.org_for_mer_informasjon_og_oppdateringer.
-
-Web_Service_Version_Outdated=Utdatert_versjon_av_webtjenesten
-
-The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Versjonen_av_Mr._dLib-webtjenesten_du_fors\u00f8ker_\u00e5_koble_til_er_utdatert.
-
-Update_empty_fields_with_data_fetched_from=Oppdater_tomme_felter_med_data_hentet_fra
-
-Create_New_Entry=Lag_ny_enhet
-
-Update_Existing_Entry=Oppdater_eksisterende_enhet
-
-Mr._dLib=Mr._dLib
-
-More_information=Mer_informasjon
-
-Fetching_Metadata...=Henter_metadata...
-
-Metadata=Metadata
-
-Autocomplete_names_in_'Firstname_Lastname'_format_only=Autokompletter_navn_i_'Fornavn_Etternavn'-format
-
-Autocomplete_names_in_'Lastname,_Firstname'_format_only=Autokompletter_navn_i_'Etternavn,_Fornavn'-format
-
-Autocomplete_names_in_both_formats=Autokompletter_navn_i_begge_format
-
-Marking_color_%0=Markeringsfarge_%0
-
-The_name_'comment'_can_not_be_used_as_an_entry_type_name.=Navnet_'comment'_kan_ikke_brukes_som_navn_p\u00e5_en_enhetstype
-
-You_must_enter_an_integer_value_in_the_text_field_for=Du_m\u00e5_skrive_inn_en_heltallverdi_i_tekstfeltet_for
-
-File_directory=Filkatalog
-
-Send_as_email=Send_som_e-post
-
-References=Referanser
-
-Sending_of_emails=Sending_av_e-post
-
-Subject_for_sending_an_email_with_references=Emne_for_sending_av_e-post_med_referanser
-
-Automatically_open_folders_of_attached_files=\u00c5pne_automatisk_mapper_for_vedlegg
-
-Create_entry_based_on_content=Opprett_enhet_basert_p\u00e5_innhold
-
-Store_choice_as_default=Lagre_valg_som_standard
-
-Do_not_show_this_box_again_for_this_import=Ikke_vis_denne_dialogboksen_igjen_for_denne_importen
-
-Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Alltid_bruk_denne_PDF-importmetoden_(ikke_sp\u00f8r_for_hver_enkelt_import)
-
-Error_creating_email=Feil_ved_opprettelse_av_e-post
-
-Could_not_open_directory=Kunne_ikke_\u00e5pne_mappe
-
-Entries_added_to_an_email=Enheter_lagt_til_en_e-post
-
-exportFormat=Eksportformat
-
-Output_file_missing=Utfil_mangler
-
-No_search_matches.=Ingen_s\u00f8keresultater
-
-The_output_option_depends_on_a_valid_input_option.=Output-innstillingen_krever_en_gyldig_input-innstilling
-
-Default_import_style_for_drag&drop_of_PDFs=Standard_importmetode_for_PDF-filer
-
-Default_PDF_file_link_action=Standardaksjon_for_PDF-fillinker
-
-File_name_format_pattern=M\u00f8nster_for_filnavn
-
-PostgreSQL_database=PostgreSQL-database
-
-DIN_1505=DIN_1505
-Wrong_Format=Feil_format
-
-Path_to_gnuclient_or_emacsclient=Sti_til_gnuclient_eller_emacsclient
-
-Additional_parameters=Ytterligere_parametre
-
-Encrypted_documents_are_not_supported=Krypterte_dokumenter_er_ikke_st\u00f8ttet
-
-Cite_selected_entries=Referer_valgte_enheter
-
-Cite_selected_entries_with_in-text_citation=Referer_valgte_enheter_med_referanse_i_teksten
-
-Cite_special=Referanse_med_ekstra_informasjon
-
-Extra_information_(e.g._page_number)=Ekstra_informasjon_(f.eks._sidenummer)
-
-Manage_citations=Administrer_referanser
-
-Problem_modifying_citation=Det_oppsto_et_problem_ved_endring_av_referansen
-
-Citation=Referanse
-
-Context=Kontekst
-
-Extra_information=Ekstra_informasjon
-
-Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=Kunne_ikke_finne_BibTeX-enhet_for_referansen_'%0'.
-
-Styles=Stiler
-
-Select_style=Velg_stil
-
-This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Dette_er_listen_over_tilgjengelige_stiler._Velg_den_du_\u00f8nsker_\u00e5_bruke.
-
-Journals=Tidsskrifter
-
-Cite=Referer
-
-Cite_in-text=Referer_i_teksten
-
-Insert_empty_citation=Sett_in_tom_referanse
-
-Merge_citations=Sl\u00e5_sammen_referanser
-
-Manual_connect=Manuell_tilkobling
-
-Select_Writer_document=Velg_Writer-dokument
-
-Sync_OO_bibliography=Synkroniser_OO-bibliografi
-
-OpenOffice=OpenOffice
-
-Select_which_open_Writer_document_to_work_on=Velg_hvilket_\u00e5pent_Writer-dokument_du_vil_jobbe_med
-
-Connected_to_document=Koblet_til_dokument
-
-Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Sett_inn_en_referanse_uten_tekst_(enheten_vil_bli_med_i_referanselisten)
-
-Cite_selected_entries_with_extra_information=Referer_valgte_enheter_med_ekstra_informasjon
-
-Ensure_that_the_bibliography_is_up-to-date=S\u00f8rg_for_at_bibliografien_er_oppdatert
-
-Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=OpenOffice-dokumentet_referer_til_BibTeX-n\u00f8kkelen_'%0',_som_ikke_finnes_i_din_aktuelle_database.
-
-Unable_to_synchronize_bibliography=Kunne_ikke_synkronisere_bibliografien
-
-Combine_pairs_of_citations_that_are_separated_by_spaces_only=Sl\u00e5_sammen_par_av_referanser_som_bare_er_adskilt_av_mellomrom
-
-Autodetection_failed=Autodeteksjon_mislyktes
-
-Connecting=Kobler_til
-
-Please_wait...=Vennligst_vent...
-
-Unable_to_connect=Kunne_ikke_koble_til
-
-Set_connection_parameters=Sett_opp_tilkoblingsparametre
-
-Path_to_OpenOffice_directory=Sti_til_OpenOffice-katalog
-
-Path_to_OpenOffice_executable=Sti_til_OpenOffice-startfil
-
-Path_to_OpenOffice_library_dir=Sti_til_OpenOffice-bibliotekkatalog
-
-Autodetect=Autodetekter
-
-Connection_lost=Mistet_forbindelsen
-
-The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Dette_avsnittsformatet_styres_av_innstillingen_'ReferenceParagraphFormat'_eller_'ReferenceHeaderParagraphFormat'_i_stilfilen.
-
-The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Tegnformatet_styres_av_referanseinnstillingen_'CitationCharacterFormat'_i_stilfilen.
-
-Automatically_sync_bibliography_when_inserting_citations=Sykroniser_automatisk_bibliografien_n\u00e5r_nye_referanser_legges_til
-
-Look_up_BibTeX_entries_in_the_active_tab_only=Se_etter_BibTeX-enheter_bare_i_den_aktive_databasen
-
-Look_up_BibTeX_entries_in_all_open_databases=Se_etter_BibTeX-enheter_i_alle_\u00e5pne_databaser
-
-Use_in-parenthesis_citation=Bruk_referanser_i_parentes
-
-Use_in-text_citation=Bruk_referanser_i_teksten
-
-Autodetecting_paths...=Autodetekterer_kataloger
-
-Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=Kunne_ikke_autodetektere_OpenOffice_installasjonen._Vennligst_velg_installasjonskataloger_manuelt.
-
-Could_not_find_OpenOffice_installation=Kunne_ikke_finne_OpenOffice-installasjonen
-
-Directories=Kataloger
-
-Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Fant_mer_enn_en_OpenOffice-startfil._Vennligst_velg_hvilken_du_vil_koble_til:
-
-Choose_OpenOffice_executable=Velg_OpenOffice-startfil
-
-Select_document=Velg_dokument
-
-Edit_Group_Membership=Rediger_gruppetilh\u00f8righet
-
-PostgreSQL=PostgreSQL
-
-Highlight_Words=Fremhev_ord
-
-JSTOR_import_cancelled=JSTOR-import_ble_avbrutt
-
-HTML_list=HTML-liste
-
-Click_group_to_toggle_membership_of_selected_entries=Klikk_p\u00e5_gruppe_for_\u00e5_endre_tilh\u00f8righet_for_de_valgte_enhetene
-
-Use_EMACS_23_insertion_string=Bruk_EMACS-23-innsettingsstreng
-
-Normalize_to_BibTeX_name_format=Normaliser_til_BibTeX-navneformat
-
-If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=Om_mulig,_normaliser_denne_navnelisten_til_standard_BibTeX-navneformatering
-
-Could_not_open_%0=Kunne_ikke_\u00e5pne_%0
-
-Unknown_import_format=Ukjent_importformat
-
-Open_INSPIRE_entry=\u00c5pne_INSPIRE-enhet
-
-
-An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=En_feil_inntraff_ved_nedlasting_fra_INSPIRE_source_(%0):
-
-Error_while_fetching_from_Inspire\:_=Feil_ved_nedlasting_fra_INSPIRE:
-
-Web_search=Webs\u00f8k
-
-Autocomplete_names=Autokompletter_navn
-
-You_must_select_either_a_valid_style_file,_or_use_the_default_style.=Du_m\u00e5_enten_velge_en_gyldig_stilfil_eller_bruke_en_standardstil.
-
-Default_style=Standardstil
-
-Choose_style_file_directly=Velg_en_stilfil_direkte
-
-Choose_from_a_directory=Velg_fra_en_katalog
-
-No_directory_defined_for_%0-files=Ingen_katalog_definert_for_%0-filer
-
-Allow_file_links_relative_to_each_bib_file's_location=Tillat_fillenker_relativt_fra_katalogen_hvor_hver_bib-fil_ligger
-
-Style_selection=Valg_av_stil
-
-The_panel_below_shows_the_definition_of_the_default_style.=Panelet_nedenfor_viser_definisjonen_av_standardstilen.
-
-If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=Hvis_du_vil_bruke_den_som_mal_for_en_ny_stil_kan_du_kopiere_innholdet_til_en_ny_.jstyle-fil
-
-Default_style_(author-year_citations)=Standardstil_(forfatter-\u00e5r-referanser)
-
-Default_style_(numerical_citations)=Standardstil_(nummererte_referanser)
-
-No_valid_style_file_defined=Ingen_gyldig_stilfil_definert
-
-Choose_pattern=Velg_m\u00f8nster
-
-Use_the_bib_file_location_as_primary_file_directory=Bruk_plasseringen_av_bib-filen_som_standard_filkatalog
-
-Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=Kunne_ikke_kalle_gnuclient/emacsclient._Sjekk_at_du_har_programmet_installert_og_tilgjengelig_i_PATH.
-
-Built-in_journal_list=Innebygget_journalliste
-
-OpenOffice/LibreOffice_connection=Kobling_til_OpenOffice/LibreOffice
-
-You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=Du_kan_legge_til_flere_journalnavn_ved_\u00e5_sette_opp_en_personlig_liste,<br>eller_lenke_til_eksterne_lister.
-
-JabRef_includes_a_built-in_list_of_journal_abbreviations.=JabRef_har_en_innebygget_liste_over_journalforkortelser.
-
-You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=Du_m\u00e5_enten_velge_en_gyldig_stilfil_eller_bruke_en_av_standardstilene.
-
-You_must_select_either_a_valid_style_file,_or_use_a_default_style.=Du_m\u00e5_enten_velge_en_gyldig_stilfil_eller_bruke_en_av_standardstilene.
-
-Show=Vis
-
-First_select_entries_to_clean_up.=
-Cleanup_entry=
-Autogenerate_PDF_Names=
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=
-File_rename_failed_for=
-You_have_toggled_the_BibLaTeX_mode.=
-Use_full_firstname_whenever_possible=
-Use_abbreviated_firstname_whenever_possible=
-Use_abbreviated_and_full_firstname=
-Autocompletion_options=
-Autocomplete_after_following_number_of_characters=
-Name_format_used_for_autocompletion=
-Treatment_of_first_names=
-No_icon_found_for_%0=
-Cleanup_entries=
-
-Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
-Format_content_of_month_field_to_#mon#=
-Ensure_that_page_ranges_are_of_the_form_num1--num2=
-Make_paths_of_linked_files_relative_(if_possible)=
-Rename_PDFs_to_given_file_name_format_pattern=
-Rename_only_PDFs_having_a_relative_path=
-What_would_you_like_to_clean_up?=
-Doing_a_cleanup_for_%0_entries...=
-No_entry_needed_a_clean_up=
-One_entry_needed_a_clean_up=
-%0_entries_needed_a_clean_up=
-
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=Dette_er_et_enkelt_klipp-og-lim-vindu._F\u00f8rst_last_inn_eller_lim_inn_tekst_i_tekstfeltet.<br>Deretter_kan_du_merke_tekst_og_tilordne_den_til_BibTeX-felter.
-Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=Java_Bouncy_Castle-bibliotek_ikke_tilgjengelig._For_\u00e5_f\u00e5_tilgang_til_dette_kan_du_installere_det._For_mer_informasjon,_se_http://www.bouncycastle.org/.
-
-This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=Denne_funksjonen_genererer_en_ny_database_basert_p\u00e5_hvilke_enheter_som_trengs_i_et_eksisterende_LaTeX-dokument.
-
-You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=Du_m\u00e5_velge_en_av_de_\u00e5pne_databasene_hvor_enheter_skal_hentes_fra,_i_tillegg_til_AUX-filen_generert_av_LaTeX_n\u00e5r_dokumentet_kompileres.
-
-Automatically_assign_new_entry_to_selected_groups=Tilordne_automatisk_nye_enheter_til_valgte_grupper
-
-Error_importing_from_database=Feil_ved_import_fra_database
-
-Incomplete_search_results=Ufullstendig_s\u00f8keresultat
-%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=%0_enheter_ble_funnet,_men_bare_%1_av_disse_kunne_lastes_ned.
-
-Error_downloading_file_'%0'=Feil_ved_nedlasting_av_filen_'%0'
-Download_failed=Nedlsting_mislyktes
-
-%0_databases_will_be_imported=%0_databaser_vil_bli_importert
-Importing_cancelled=Import_avbrutt
-There_are_no_available_databases_to_be_imported=Det_er_ingen_databaser_tilgjengelig_for_import
-Import_from_SQL_database=Import_fra_SQL-database
-Imported_%0_databases_successfully=Importerte_%0_databaser
-<_CREATE_NEW_DATABASE_>=<_OPPRETT_NY_DATABASE_>
-Remove_Selected=Fjern_merkede
-SQL_Database_Exporter=Eksporter_SQL-database
-Select_target_SQL_database\:=Velg_m\u00e5ldatabase\:
-SQL_Database_Importer=Importer_SQL-database
-Please_select_which_JabRef_databases_do_you_want_to_import\:=Vennligst_velg_hvilke_JabRef-databaser_du_vil_importere\:
-
-Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
-Attach_file=
-Imported_=
-Minimize_to_system_tray=
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=En_feil_oppsto_under_nedlasting_fra_OIA2_source_(%0):
-
-Setting_all_preferences_to_default_values.=
-Resetting_preference_key_'%0'=
-Unknown_preference_key_'%0'=
-Unable_to_clear_preferences.=
-
-Reset_preferences_(key1,key2,..._or_'all')=
-Find_unlinked_files=
-Select_All=
-Unselect_All=
-Expand_All=
-Collapse_All=
-Select_Directory=
-Choose_Directory=
-Use_the_selected_directory_to_start_with_the_search.=
-Browse...=
-Opens_the_file_browser.=
-Scan_directory=
-Searches_the_selected_directory_for_unlinked_files.=
-Starts_the_import_of_bibtex_entries.=
-Leave_this_dialog.=
-Create_directory_based_keywords=
-Creates_keywords_in_created_entrys_with_directory_pathnames=
-Select_a_directory_where_the_search_shall_start.=
-Select_file_type\:=
-These_files_are_not_linked_in_the_active_database.=
-Entry_type_to_be_created\:=
-Searching_file_system...=
-Importing_into_Database...=
-Select_directory=
-Select_files=
-Bibtex_entry_creation=
-<No_selection>=
-Push_selection_to_TeXstudio=
-Path_to_TeXstudio=
-Program_'%0'_not_found=
-Pushed_citations_to_TeXstudio=
-Unable_to_connect_to_freecite_online_service.=
-Parse_with_FreeCite=
-Insert_selected_citations_into_TeXstudio=
-The_current_BibTeX_key_will_be_overwritten._Continue?=
-Overwrite_key=
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
-Bibtex_key_patterns=
-Changed_special_field_settings=
-Clear_priority=
-Clear_rank=
-Compact_rank=
-Convert_1st,_2nd,_..._to_real_superscripts=
-Dropped_comment_from_database=
-Enable_PDF_preview=
-Enable_special_fields=
-Five_stars=
-Four_stars=
-Help_on_special_fields=
-Keywords_of_selected_entries=
-Manage_content_selectors=
-Manage_keywords=
-Marked_entries'_quality_as_good=
-Marked_entries_as_relevant=
-No_priority_information=
-No_rank_information=
-One_star=
-Priority=
-Priority_high=
-Priority_low=
-Priority_medium=
-Quality=
-Rank=
-Relevance=
-Set_priority=
-Set_priority_to_high=
-Set_priority_to_low=
-Set_priority_to_medium=
-Set_rank_to_five_stars=
-Set_rank_to_four_stars=
-Set_rank_to_one_star=
-Set_rank_to_three_stars=
-Set_rank_to_two_stars=
-Show_one_letter_heading_for_icon_columns=
-Show_priority=
-Show_quality=
-Show_rank=
-Show_relevance=
-Synchronize_with_keywords=
-Synchronized_special_fields_based_on_keywords=
-Three_stars=
-Toggle_relevance=
-Toogle_quality_assured=
-Two_stars=
-Update_keywords=
-Write_values_of_special_fields_as_separate_fields_to_BibTeX=
-You_have_changed_settings_for_special_fields.=
-no_preview_available=
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
-A_string_with_that_label_already_exists=
-Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
-Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
-Created_group_"%0".=
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
-If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
-Import_Metadata_From_PDF=
-Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
-Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
-Removed_all_subgroups_of_group_"%0".=
-To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
-Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
-Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
-Use_the_following_delimiter_character(s)\:=
-When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
-Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-
-Error_fetching_from_Google_Scholar=
-Run_HTML_converter_on_title=
-Searching...=
-You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
-Confirm_selection=
-Unknown_DOI\:_'%0'.=
-Get_BibTeX_entry_from_DOI=
-Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
-Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
-Import_conversions=
-Run_filter_on_title_keeping_the_case_of_selected_words=
-Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
-Please_enter_a_search_string=
-Please_open_or_start_a_new_database_before_searching=
-An_Error_occurred_while_fetching_from_ADS_(%0)\:=
-Error_while_fetching_from_ADS=
-Error_while_fetching_from_OAI2=
-An_Error_occurred_while_parsing_abstract=
-Unknown_DiVA_entry\:_'%0'.=
-Get_BibTeX_entry_from_DiVA=
-Log=
-Remove_unneccessary_$,_{,_and_}=
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+
+%0_contains_the_Regular_Expression_<b>%1</b>=%0_inneholder_regul\u00e6ruttrykket_<b>%1</b>
+
+%0_contains_the_term_<b>%1</b>=%0_inneholder_uttrykket_<b>%1</b>
+
+%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_inneholder_ikke_regul\u00e6ruttrykket_<b>%1</b>
+
+%0_doesn't_contain_the_term_<b>%1</b>=%0_inneholder_ikke_uttrykket_<b>%1</b>
+
+%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_matcher_ikke_regul\u00e6ruttrykket_<b>%1</b>
+
+%0_doesn't_match_the_term_<b>%1</b>=%0_matcher_ikke_uttrykket_<b>%1</b>
+
+%0_export_successful=%0-eksport_lyktes
+
+%0_field_set=%0-felt_satt
+
+%0_matches_the_Regular_Expression_<b>%1</b>=%0_matcher_regul\u00e6ruttrykket_<b>%1</b>
+
+%0_matches_the_term_<b>%1</b>=%0_matcher_uttrykket_<b>%1</b>
+
+<field_name>=<feltnavn>
+
+<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Kunne_ikke_finne_filen_'%0'<BR>linket_fra_enheten_'%1'</HTML>
+
+<no_field>=<ingen_felter>
+
+<select>=<velg>
+
+<select_word>=<velg_ord>
+
+A_string_with_this_label_already_exists=Det_finnes_allerede_en_streng_med_det_navnet
+
+Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Forkort_journalnavn_for_de_valgte_enhetene_(ISO-forkortelse)
+
+Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Forkort_journalnavn_for_de_valgte_enhetene_(MEDLINE-forkortelse)
+
+Abbreviate_names=Forkort_navn
+
+Abbreviated_%0_journal_names.=Fortkortet_%0_journalnavn.
+
+Abbreviation=Forkortelse
+
+About_JabRef=Om_JabRef
+
+Abstract=Sammendrag
+
+Accept=Aksepter
+
+Accept_change=Aksepter_endring
+
+Action=Aksjon
+
+Add=Legg_til
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Legg_til_en_(kompilert)_egendefinert_ImportFormat-klasse_fra_en_classpath._\nStien_trenger_ikke_\u00e5_v\u00e6re_p\u00e5_JabRefs_classpath.
+Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Legg_til_en_(kompilert)_egendefinert_ImportFormat-klasse_fra_en_zip-fil._\nZip-filen_trenger_ikke_\u00e5_v\u00e6re_p\u00e5_JabRefs_classpath.
+
+add_entries_to_group=legg_til_enheter_i_gruppe
+
+Add_entry_selection_to_this_group=Legg_valgte_enheter_til_denne_gruppen
+
+Add_from_folder=Legg_til_fra_mappe
+
+Add_from_jar=Legg_til_fra_jar-fil
+
+add_group=legg_til_gruppe
+
+Add_Group=Legg_til_gruppe
+
+Add_new=Legg_til_ny
+
+Add_Subgroup=Legg_til_undergruppe
+
+Add_to_group=Legg_til_i_gruppe
+
+Added_group_"%0".=La_til_gruppe_"%0".
+
+Added_new=La_til_ny
+
+Added_string=La_til_streng
+
+Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Dessuten,_enheter_hvis_<b>%0</b>-felt_ikke_inneholder_<b>%1</b>_kan_leg [...]
+
+Advanced=Avansert
+
+All_custom_file_types_will_be_lost._Proceed?=Alle_egendefinerte_filtyper_vil_bli_slettet._Fortsette?
+
+All_Entries=Alle_enheter
+
+All_entries=Alle_enheter
+
+All_entries_of_this_type_will_be_declared_typeless._Continue?=Alle_enhetene_av_denne_typen_vil_bli_klassifisert_som_typel\u00f8se._Fortsette?
+
+All_fields=Alle_felter
+
+All_subgroups_(recursively)=Alle_undergrupper_(rekursivt)
+
+Allow_editing_in_table_cells=Tillat_redigering_av_celler_i_tabellen
+
+An_Exception_ocurred_while_accessing_'%0'=En_feil_oppsto_ved_lesing_av_'%0'
+
+An_SAXException_ocurred_while_parsing_'%0'\:=En_SAXException_forekom_ved_lesing_av_'%0':
+and=og
+
+and_inside_the_JabRef-jar\:=og_innefor_JabRef-jar-filen:
+
+and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=og_klassen_m\u00e5_v\u00e6re_tilgjengelig_i_CLASSPATH_neste_gang_du_starter_JabRef.
+
+any_field_that_matches_the_regular_expression_<b>%0</b>=ethvert_felt_som_matcher_regul\u00e6ruttrykket_<b>%0</b>
+
+Appearance=Utseende
+
+Append=Legg_til
+
+Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Legg_til_innhold_fra_en_BibTeX-database_i_den_\u00e5pne_database
+
+Append_database=Append_database
+
+append_the_selected_text_to_bibtex_key=legg_til_den_valgte_teksten_til_BibTeX-n\u00f8kkelen
+
+Application=Applikasjon
+
+Apply=Utf\u00f8r
+
+Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Argumentene_sendt_til_allerede_aktiv_JabRef-instans._Avslutter.
+
+Assign_entry_selection_exclusively_to_this_group=Legg_valgte_enheter_eksklusivt_til_denne_gruppen
+
+Assign_new_file=Tilordne_ny_fil
+
+Assign_the_original_group's_entries_to_this_group?=Legg_den_opprinnelige_gruppens_enheter_til_denne_gruppen?
+
+Assigned_%0_entries_to_group_"%1".=La_til_%0_enheter_til_gruppen_"%1".
+
+Assigned_1_entry_to_group_"%0".=La_til_1_enhet_til_gruppen_"%0".
+
+At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=I_det_minste_skal_plugin'en_'net.sf.jabref.core'_v\u00e6re_der.
+
+Attach_%0_file=Tilordne_%0-fil
+
+Attach_URL=Tilordne_URL
+
+Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Pr\u00f8v_\u00e5_sette_%0-linker_automatisk_for_dine_enheter._Dette_virker_dersom_en_%0-fil_i_%0-katalogen_din_eller_en_underkatalog<BR>har_navn_likt_en_enhets_BibTeX-n\u00f8kkel,_pluss_etternavn.
+
+Attempting_SQL_export...=Pr\u00f8ver_SQL-eksport...
+
+Auto=Auto
+
+Autodetect_format=Autodetekter_format
+
+Autogenerate_BibTeX_key=Autogenerer_BibTeX-n\u00f8kkel
+
+Autogenerate_BibTeX_keys=Autogenerer_BibTeX-n\u00f8kler
+
+Autogenerate_groups=Autogenerer_grupper
+
+autogenerate_keys=autogenerer_n\u00f8kler
+
+Autolink_files_with_names_starting_with_the_BibTeX_key=Autolink_filer_med_navn_som_starter_med_BibTeX-n\u00f8kkelen
+
+Autolink_only_files_that_match_the_BibTeX_key=Autolink_bare_filer_med_navn_som_samsvarer_med_BibTeX-n\u00f8kkelen
+
+Automatically_create_groups=Generer_grupper_automatisk
+
+Automatically_create_groups_for_database.=Generer_grupper_for_databasen.
+
+Automatically_created_groups=Genererte_grupper_automatisk
+
+Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Skjul_automatisk_grupperingskontroll_n\u00e5_du_bytter_til_en_database_som_ikke_inneholder_grupper
+
+Automatically_remove_exact_duplicates=Fjern_eksakte_duplikater_automatisk
+
+Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Vis_automatisk_grupperingskontroll_n\u00e5_du_bytter_til_en_database_som_inneholder_grupper
+
+Autoset=Sett_automatisk
+
+Autoset_%0_field=Automatisk_setting_av_%0-felt
+
+Autoset_%0_links._Allow_overwriting_existing_links.=Sett_%0-linker_automatisk._Tillat_overskriving_av_eksisterende_linker.
+
+Autoset_%0_links._Do_not_overwrite_existing_links.=Sett_%0-linker_automatisk._Skriv_ikke_over_eksisterende_linker.
+
+Autoset_external_links=Sett_linker_automatisk
+
+Autosetting_links=Setter_linker_automatisk
+
+AUX_file_import=AUX-fil_import
+
+Available_export_formats=Tilgjengelige_eksportformater
+
+Available_fields=Tilgjengelige_felter
+
+Available_import_formats=Tilgjengelige_importformater
+
+Background_color_for_optional_fields=Bakgrunnsfarge_for_valgfrie_felter
+
+Background_color_for_required_fields=Bakgrunnsfarge_for_n\u00f8dvendige_felter
+
+Backup_old_file_when_saving=Lag_sikkerhetskopi_ved_lagring
+
+Beta_version=Betaversjon
+
+Bibkey_to_filename_conversion=Konvertering_av_BibTeX-n\u00f8kkel_til_filnavn
+
+BibTeX_key=BibTeX-n\u00f8kkel
+
+BibTeX_key_is_unique.=BibTeX-n\u00f8kkelen_er_unik
+
+BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX-n\u00f8kkel_er_ikke_satt._Angi_et_navn_for_den_nedlastede_filen
+
+BibTeX_source=BibTeX-kilde
+
+BibTeXML=BibTeXML
+
+Binding=Hurtigtast
+
+Broken_link=Ugyldig_link
+
+Browse=Bla_gjennom
+
+by=med
+
+Calling_external_viewer...=Kaller_opp_eksternt_program...
+
+Cancel=Avbryt
+
+Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Kan_ikke_legge_til_enheter_til_en_gruppe_uten_\u00e5_generere_n\u00f8kler._Vil_du_generer_n\u00f8kler_n\u00e5?
+
+Cannot_merge_this_change=Kan_ikke_inkorporere_denne_endringen
+
+Cannot_move_group_"%0"_down.=Kan_ikke_flytte_gruppen_"%0"_ned.
+
+Cannot_move_group_"%0"_left.=Kan_ikke_flytte_gruppen_"%0"_til_venstre.
+
+Cannot_move_group_"%0"_right.=Kan_ikke_flytte_gruppen_"%0"_til_h\u00f8yre.
+
+Cannot_move_group_"%0"_up.=Kan_ikke_flytte_gruppen_"%0"_opp.
+
+case_insensitive=skiller_ikke_mellom_store_og_sm\u00e5_bokstaver
+
+case_sensitive=skiller_mellom_store_og_sm\u00e5_bokstaver
+
+Case_sensitive=Skill_store_og_sm\u00e5_bokstaver
+
+change_assignment_of_entries=endre_tilordning_av_enheter
+
+Change_case=Endre_store/sm\u00e5_bokstaver
+
+Change_entry_type=Endre_enhetstype
+
+Change_file_type=Endre_filtype
+
+change_key=sett_n\u00f8kkel
+
+Change_of_Grouping_Method=Endre_grupperingsm\u00e5te
+
+change_preamble=endre_'preamble'
+
+change_string_content=endre_strengdefinisjon
+
+change_string_name=endre_navn_p\u00e5_streng
+
+Change_table_column_and_General_fields_settings_to_use_the_new_feature=Endre_oppsett_for_tabellkollonner_og_generelle_felter_for_\u00e5_ta_i_bruk_den_nye_funksjonen
+
+change_type=endre_type
+
+changed_=endret_
+
+Changed_font_settings=Endret_skriftoppsett
+
+Changed_language_settings=Endret_spr\u00e5koppsett
+
+Changed_look_and_feel_settings=Endret_oppsett_av_grensesnitt
+
+Changed_preamble=Endret_preamble
+
+Changed_type_to=Endret_type_til
+
+Characters_to_ignore=Ignorer_f\u00f8lgende_tegn
+
+Check_existing_%0_links=Sjekk_eksisterende_%0-linker
+
+Check_links=Sjekk_eksterne_linker
+
+Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Velg_URL_for_nedlasting._Den_forh\u00e5ndsvalgte_adressen_peker_til_en_liste_gjort_tilgjengelig_av_JabRef-utviklerne.
+
+Cite_command=Siteringskommando
+
+Class_name=Klassenavn
+
+Clear=Opphev
+
+clear_all_groups=fjern_alle_grupper
+
+Clear_field=Slett_felt
+
+Clear_fields=Slett_felter
+
+Clear_highlight=Fjern_utheving
+
+Close=Lukk
+
+Close_dialog=Lukk_dialog
+
+Close_the_current_database=Lukk_denne_databasen
+
+Close_the_help_window=Lukk_hjelpevinduet
+
+Close_window=Lukk_vindu
+
+Closed_database=Lukket_database
+
+Collapse_subtree=Lukk_forgrening
+
+Color_codes_for_required_and_optional_fields=Fargekoder_for_n\u00f8dvendige_og_valgfrie_felter
+
+Color_for_marking_incomplete_entries=Farge_for_markering_av_ufullstendige_enheter
+
+Column_width=Kolonnebredde
+
+Command_line_id=Kommandolinje-id
+
+Complete_record=Komplett_form
+
+Connect=Koble_til
+
+Connect_to_SQL_database=Koble_til_SQL-database
+
+Connect_to_SQL_Database=Koble_til_SQL-database
+
+Connection_to_IEEEXplore_failed=Oppkobling_til_IEEExplore_mislyktes
+
+Contained_in=Inneholdt_i
+
+Content=Innhold
+
+Copied=Kopierte
+
+Copied_cell_contents=Kopierte_innhold_av_cellen
+
+Copied_key=Kopierte_n\u00f8kkel
+
+Copied_keys=Kopierte_n\u00f8kler
+
+Copy=Kopier
+
+Copy_BibTeX_key=Kopier_BibTeX-n\u00f8kkel
+
+Copy_file_to_file_directory.=Kopier_fil_til_filkatalog.
+
+Copy_files_to_file_directory.=Kopier_filer_til_filkatalog.
+
+Copy_to_clipboard=Kopier_til_utklippstavle
+
+Could_not_call_executable=Kunne_ikke_kalle_programfilen
+
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Kunne_ikke_opprette_kontakt_med_en_gnuserv-prosess._Kontroller_at_Emacs_eller_XEmacs_er_i_gang<BR>og_at_serveren_har_blitt_startet_(med_kommandoen_'gnuserv-start').
+
+Could_not_connect_to_host_=Kunne_ikke_koble_opp_mot_vert
+
+Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Kunne_ikke_koble_til_Vim-server._Sjekk_at_Vim_kj\u00f8rer<BR>med_riktig_servernavn.
+
+Could_not_export_file=Kunne_ikke_eksportere
+
+Could_not_export_preferences=Kunne_ikke_eksportere_innstillinger
+
+# I have reformulated the following lines, because the 1st person form is not suitable:
+Could_not_find_a_suitable_import_format.=Fant_ikke_noe_passende_importformat.
+Could_not_find_directory_for_%0-files\:_%1=Fant_ikke_katalog_for_%0-filer:_%1
+
+Could_not_find_image_file=Kunne_ikke_finne_bilde
+
+Could_not_find_layout_file=Fant_ikke_layoutfil
+
+Could_not_import_preferences=Kunne_ikke_importere_innstillinger
+
+Could_not_instantiate_%0=Kunne_ikke_instansiere_%0
+
+Could_not_instantiate_%0_%1=Kunne_ikke_instansiere_%0_%1
+
+Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Kunne_ikke_instansiere_%0._Har_du_valgt_riktig_katalog?
+
+Could_not_open_link=Kunne_ikke_\u00e5pne_link
+
+Could_not_parse_number_of_hits=Kunne_ikke_lese_ut_antall_treff
+
+Could_not_print_preview=Kunne_ikke_skrive_ut_forh\u00e5ndsvisningen
+
+Could_not_run_the_'vim'_program.=Kunne_ikke_kj\u00f8re_'vim'-programmet
+
+Could_not_save_file=Kunne_ikke_lagre
+
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Kunne_ikke_lagre_fil._Tegnkodingen_'%0'_er_ikke_st\u00f8ttet.
+
+Create_group=Opprett_gruppe
+
+Created_groups.=Opprettet_grupper.
+
+crossreferenced_entries_included=refererte_enheter_inkludert
+
+Current_content=N\u00e5v\u00e6rende_innhold
+
+Current_value=N\u00e5v\u00e6rende_verdi
+
+Custom_entry_types=Egendefinerte_enhetstyper
+
+Custom_entry_types_found_in_file=Fant_egendefinerte_enhetstyper_i_filen
+
+Custom_icon_theme=Egendefinert_ikonsett
+
+Custom_icon_theme_file=Ikonsettfil
+
+Custom_importers=Egendefinerte_importformat
+
+Customize_entry_types=Tilpass_enhetstyper
+
+Customize_key_bindings=Sett_opp_hurtigtaster
+
+Cut=Klipp_ut
+
+cut_entries=klippet_ut
+
+cut_entry=klipp_ut_enhet
+
+Cut_pr=Klippet_ut
+
+Database_\:=Database_:
+
+Database_encoding=Tegnkoding_for_database
+
+Database_has_changed._Do_you_want_to_save_before_closing?=Databasen_er_endret._Vil_du_lagre_f\u00f8r_du_lukker_den?
+
+Database_properties=Databaseegenskaper
+
+Date_format=Datoformat
+
+Default=Tilbakestill
+
+Default_encoding=Standard_koding
+
+Default_grouping_field=Standardfelt_for_gruppering
+
+Default_look_and_feel=Standard_utseende
+
+Default_pattern=Default_pattern
+
+Default_sort_criteria=Standard_sorteringskriteria
+
+Define_'%0'=Definer_'%0'
+
+Delete=Slett
+
+Delete_custom_format=Slett_tilpasset_type
+
+delete_entries=slett_enheter
+
+Delete_entry=Slett_enhet
+
+delete_entry=slett_enhet
+
+Delete_multiple_entries=Slett_flere_enheter
+
+Delete_rows=Slett_rader
+
+Delete_strings=Slett_strenger
+
+Deleted=Slettet
+
+Delimit_fields_with_semicolon,_ex.=Avgrens_felter_med_semikolon,_f.eks.
+
+Descending=Synkende
+
+Description=Beskrivelse
+
+Deselect_all=Velg_ingen
+
+Deselect_all_duplicates=Velg_bort_alle_duplikater
+
+Details=Details
+
+Disable_entry_editor_when_multiple_entries_are_selected=Sperr_enhetsskjema_n\u00e5r_flere_enheter_er_valgt
+
+Disable_this_confirmation_dialog=Deaktiver_denne_kontrolldialogen
+
+Disable_this_warning_dialog=Deaktiver_denne_advarselen
+
+Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Vis_alle_enheter_inneholdt_i_minst_en_av_de_valgte_gruppene.
+
+Display_all_error_messages=Vis_alle_feilmeldinger
+
+Display_help_on_command_line_options=Vis_kommandolinjehjelp
+
+Display_imported_entries_in_an_inspection_window_before_they_are_added.=Vis_importerte_enheter_i_et_inspeksjonsvindu_f\u00f8r_de_legges_til.
+
+Display_only_entries_belonging_to_all_selected_groups.=Vis_kun_enheter_inneholdt_i_alle_valgte_grupper.
+
+Display_version=Vis_versjonsnummer
+
+Displaying_no_groups=Viser_ingen_grupper
+
+Do_not_abbreviate_names=Ikke_forkort_navn
+
+Do_not_autoset=Ikke_sett_linker_automatisk
+
+Do_not_import_entry=Ikke_importer_enhet
+
+Do_not_open_any_files_at_startup=\u00c5pne_ingen_filer_ved_oppstart
+
+Do_not_overwrite_existing_keys=Ikke_skriv_over_eksisterende_n\u00f8kler
+
+Do_not_show_splash_window_at_startup=Ikke_vis_JabRef-informasjonsvindu_ved_oppstart
+
+Do_not_show_these_options_in_the_future=Ikke_vis_disse_valgene_igjen
+
+Do_not_wrap_the_following_fields_when_saving=Ikke_introduser_linjeskift_i_f\u00f8lgende_felter_ved_lagring
+Do_not_write_the_following_fields_to_XMP_Metadata\:=Ikke_skriv_de_f\u00f8lgende_feltene_til_XMP-metadata:
+
+Do_you_want_JabRef_to_do_the_following_operations?=Vil_du_at_JabRef_skal_gj\u00f8re_de_f\u00f8lgende_operasjonene?
+
+DocBook=DocBook
+
+Down=Ned
+
+Download=Last_ned
+
+Download_completed=Nedlasting_fullf\u00f8rt
+
+Download_file=Last_ned_fil
+
+Downloading...=Laster_ned...
+
+Drag_and_Drop_Error=Feil_ved_trekk-og-slipp
+
+Drop_%0=Slipp_%0
+
+duplicate_BibTeX_key=ikke_unik_BibTeX-n\u00f8kkel
+
+Duplicate_BibTeX_key.=Duplicate_BibTeX_key.
+
+Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=BibTeX-n\u00f8kkelen_er_ikke_unik._Gruppering_kan_feile_for_denne_enheten.
+
+Duplicate_Key_Warning=Advarsel:_ikke_unik_n\u00f8kkel
+
+Duplicate_pairs_found=Duplikatpar_funnet
+
+duplicate_removal=fjerning_av_duplikater
+
+Duplicate_string_name=Ikke_unikt_navn_p\u00e5_streng
+
+Duplicates_found=Duplikater_funnet
+
+Duplicates_removed=Duplikater_fjernet
+
+Dynamic_groups=Dynamiske_grupper
+
+Dynamically_group_entries_by_a_free-form_search_expression=Grupper_enheter_dynamisk_ved_hjelp_av_et_standard_s\u00f8keuttrykk
+
+Dynamically_group_entries_by_searching_a_field_for_a_keyword=Grupper_enheter_dynamisk_ved_\u00e5_s\u00f8ke_etter_n\u00f8kkelord_i_et_felt
+
+Each_line_must_be_on_the_following_form=Hver_av_linjene_m\u00e5_v\u00e6re_p\u00e5_den_f\u00f8lgende_formen
+
+Edit=Rediger
+
+Edit_custom_export=Rediger_eksternt_eksportfilter
+
+Edit_entry=Rediger_enhet
+
+Edit_file_link=Rediger_link
+
+Edit_file_type=Rediger_filtype
+
+Edit_group=Rediger_gruppe
+
+Edit_journal=Rediger_journal
+
+Edit_preamble=Rediger_'preamble'
+
+Edit_strings=Rediger_strenger
+
+Editor_options=Alternativer_for_redigering
+
+empty_BibTeX_key=tom_BibTeX-n\u00f8kkel
+
+Empty_BibTeX_key.=Tom_BibTeX-n\u00f8kkel
+
+Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Tom_BibTeX-n\u00f8kkel._Gruppering_kan_feile_for_denne_enheten.
+
+empty_database=tom_database
+
+Enable_source_editing=Tillat_redigering_av_kildekode
+
+Enable_word/name_autocompletion=Aktiver_autokomplettering_av_navn/ord
+
+Endnote=Endnote
+
+Enter_URL=Skriv_inn_URL
+
+Enter_URL_to_download=Skriv_inn_URL_som_skal_lastes_ned
+
+entries=enheter
+
+Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Enheter_kan_ikke_manuelt_legges_til_i_eller_fjernes_fra_denne_gruppen.
+
+Entries_exported_to_clipboard=Enheter_eksportert_til_utklippstavle
+
+entries_have_undefined_BibTeX_key=enheter_har_udefinert_BibTeX-n\u00f8kkel
+
+entries_into_new_database=enheter_i_ny_database
+
+entry=enhet
+
+Entry_editor=Enhetsskjema
+
+Entry_in_current_database=Enhet_i_eksisterende_database
+
+Entry_in_import=Enhet_i_import
+
+Entry_preview=Forh\u00e5ndsvisning
+
+Entry_table=Hovedtabell
+
+Entry_table_columns=Tabellkolonner
+
+Entry_type=Enhetstype
+
+Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Navn_p\u00e5_typer_kan_ikke_inneholde_opperom_eller_noen_av_de_f\u00f8lgende_tegnene
+
+Entry_types=Enhetstyper
+
+Error=Feil
+Error\:_=Feil:_
+
+Error_converting_Bibtex_to_XMP\:_%0=Feil_ved_konvertering_av_BibTeX_til_XMP:_%0
+
+Error_converting_XMP_to_'%0'...=Feil_ved_tilpassing_av_XMP_for_'%0'...
+
+Error_exporting_to_clipboard=Feil_ved_eksport_til_utklippstavle
+
+##Error:_check_your_External_viewer_settings_in_Preferences=Feil:_unders\u00f8k_innstillingene_for_Eksterne_programmer_i_Innstillinger
+Error_in_field=Feil_i_felt
+
+Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Feil_ved_oppstart_av_plugin-system._Starter_uten,_men_noe_funksjonalitet_kan_mangle.
+
+Error_occured_when_parsing_entry=En_feil_oppsto_ved_lesing_av_enhet
+
+Error_opening_file=Feil_ved_\u00e5pning_av_fil
+
+Error_setting_field=Problem_med_\u00e5_sette_felt
+
+Error_while_converting_BibtexEntry_to_XMP_%0=Feil_ved_konvertering_av_BibTeX-enheten_til_XMP_%0
+Error_while_downloading_file\:=Feil_ved_nedlasting_av_fil:
+
+Error_while_fetching_from_OIA2=Feil_ved_nedlasting_fra_OIA2
+
+Error_while_writing=En_feil_oppsto_ved_skriving
+
+Error_writing_to_%0_file(s).=Feil_ved_skriving_til_%0_fil(er).
+Error_writing_XMP_to_file\:_%0=Feil_ved_skriving_av_XMP-data_til_filen_'%0'
+
+Establishing_SQL_connection...=Etablerer_SQL-forbindelse...
+
+Exceptions=Feilinformasjon
+
+Existing_file=Eksisterende_fil
+
+exists._Overwrite_file?=eksisterer._Erstatt_filen?
+
+exists._Overwrite?=eksisterer._Skriv_over?
+
+Expand_subtree=\u00c5pne_forgrening
+
+Export=Eksporter
+
+Export_name=Navn_p\u00e5_filter
+
+Export_preferences=Eksporter_innstillinger
+
+Export_preferences_to_file=Eksporter_innstillinger_til_fil
+
+Export_properties=Egenskaper_for_eksportfilter
+
+Export_to_clipboard=Eksporter_til_utklippstavle
+
+Export_to_SQL_database=Eksporterer_til_SQL-database
+
+Exporting=Eksporterer
+
+Extension=Etternavn
+
+External_changes=Eksterne_endringer
+
+External_file_links=Eksterne_linker
+
+External_files=Eksterne_filer
+
+External_programs=Eksterne_programmer
+
+External_viewer_called=Eksternt_program_kalt_opp
+
+Failed_to_read_groups_data_(unsupported_version\:_%0)=Kunne_ikke_lese_gruppedata_(ikke_st\u00f8ttet_versjon:_%0)
+
+Fetch=Hent
+
+Field=Felt
+
+field=felt
+
+# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
+Field_content=Innhold_i_felt
+
+Field_name=Feltnavn
+
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Feltnavn_kan_ikke_inneholde_opperom_eller_de_f\u00f8lgende_tegnene
+
+Field_sizes=Feltst\u00f8rrelser
+
+Field_to_filter=Felt_som_skal_filtreres
+
+Field_to_group_by=Grupperingsfelt
+
+Fields=Felter
+
+File=Fil
+
+file=fil
+
+File_'%0'_is_already_open.=Filen_'%0'_er_allerede_\u00e5pen.
+
+File_'%0'_not_found=Fant_ikke_filen_'%0'
+
+File_changed=Endret_fil
+File_directory_is_'%0'\:=Filkatalogen_er_'%0':
+
+File_directory_is_not_set_or_does_not_exist!=Filkatalogen_er_ikke_satt_eller_eksisterer_ikke!
+
+File_download=Filnedlasting
+
+File_exists=Filen_eksisterer
+
+File_extension=Etternavn_p\u00e5_filer
+
+File_has_been_updated_externally._What_do_you_want_to_do?=Filen_har_blitt_endret_eksternt._Hva_vil_du_gj\u00f8re?
+
+File_not_found=Fant_ikke_filen
+
+File_type=Filtype
+
+File_updated_externally=Filen_har_blitt_endret_eksternt
+
+filename=filnavn
+
+Files_opened=Filer_\u00e5pnet
+
+Filter=Filter
+
+Finished_autosetting_external_links.=Fullf\u00f8rte_automatisk_setting_av_eksterne_linker.
+
+Finished_synchronizing_%0_links._Entries_changed%c_%1.=Fullf\u00f8rte_synkronisering_av_%0-linker._Enheter_endret%c_%1.
+
+Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Fullf\u00f8rte_skriving_av_XMP-metadata._Skrev_til_%0_fil(er).
+
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Fullf\u00f8rte_skriving_av_XMP-data_for_%0_fil(er)_(hoppet_over_%1,_%2_mislyktes).
+
+First_select_the_entries_you_want_keys_to_be_generated_for.=Velg_f\u00f8rst_hvilke_enheter_du_vil_generere_n\u00f8kler_for.
+
+Fit_table_horizontally_on_screen=Tilpass_tabellbredden_horisontalt
+
+Float=Flyt
+
+Float_marked_entries=Sorter_merkede_enheter_\u00f8verst
+
+Font_Family=Familie
+
+Font_Preview=Forh\u00e5ndsvisning
+
+Font_Size=St\u00f8rrelse
+
+Font_Style=Stil
+
+FontSelector=Fontvelger
+
+for=for
+
+Format_of_author_and_editor_names=Formatering_av_forfatter-_og_redakt\u00f8rnavn
+
+Format_String=Formatstreng
+
+Format_used=Format_brukt
+
+Formatter_Name=Navn_p\u00e5_formaterer
+
+Formatter_not_found=Ukjent_formaterer
+
+found=funnet
+
+Found_%0_plugin(s)=Fant_%0_plugin(s)
+
+found_in_aux_file=funnet_i_aux-fil
+
+Full_name=Fullt_navn
+
+General=Generelt
+
+General_fields=Generelle_felter
+
+Generate=Generer
+
+Generate_BibTeX_key=Generere_BibTeX-n\u00f8kkel
+
+Generate_keys=Generer_n\u00f8kler
+
+Generate_keys_before_saving_(for_entries_without_a_key)=Generer_n\u00f8kler_f\u00f8r_lagring_(for_enheter_uten_n\u00f8kkel))
+
+Generate_keys_for_imported_entries=Generer_n\u00f8kler_automatisk_for_importerte_enheter
+
+Generate_now=Generer_n\u00e5
+
+Generated_BibTeX_key_for=Genererte_BibTeX-n\u00f8kkel_for
+
+Generating_BibTeX_key_for=Genererer_BibTeX-n\u00f8kkel_for
+
+Grab=Fang_hurtigtast
+
+Gray_out_entries_not_in_group_selection=Skraver_enheter_utenfor_valgte_grupper
+
+Gray_out_non-hits=Vis_ikke-treff_i-gr\u00e5tt
+
+Gray_out_non-matching_entries=Skraver_ikke-treff
+
+Group_properties=Gruppeegenskaper
+
+grouping_may_not_work_for_this_entry=gruppering_kan_feile_for_denne_enheten
+
+Groups=Gruppering
+
+Harvard_RTF=Harvard_RTF
+
+Have_you_chosen_the_correct_package_path?=Har_du_valgt_riktig_pakkenavn?
+
+Help=Hjelp
+
+Help_contents=Oversikt_over_hjelpefiler
+
+Help_on_groups=Hjelp_om_grupper
+
+Help_on_key_patterns=Hjelp_om_n\u00f8kkelgenerering
+
+Help_on_Preview_Settings=Hjelp_for_innstillinger_for_forh\u00e5ndsvisning
+
+Help_on_Regular_Expression_Search=Hjelp_for_s\u00f8k_med_regul\u00e6ruttrykk
+
+Hide_non-hits=Skjul_ikke-treff
+
+Hide_non-matching_entries=Gjem_ikke-treff
+
+Hierarchical_context=Gruppehierarki
+
+Highlight=Uthev
+
+Highlight_groups_matching_all_selected_entries=Uthev_grupper_som_inneholder_alle_valgte_enheter
+
+Highlight_groups_matching_any_selected_entry=Uthev_grupper_som_inneholder_minst_en_av_de_valgte_enhetene
+
+Highlight_overlapping_groups=Uthev_overlappende_grupper
+
+Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=Hint%c_For_bare_\u00e5_s\u00f8ke_i_spesifikke_felt,_skriv_f._eks.%c<p><tt>author%esmith_and_title%eelectrical</tt>
+
+HTML=HTML
+
+HTML_table=HTML-tabell
+
+HTML_table_(with_Abstract_&_BibTeX)=HTML-tabell_(med_Abstract_&_BibTeX)
+
+Icon=Ikon
+
+Ignore=Ignorer
+
+Immediate_subgroups=N\u00e6rmeste_undergrupper
+
+Import=Importer
+
+Import_and_keep_old_entry=Importer_og_behold_den_gamle_enheten
+
+Import_and_remove_old_entry=Importer_og_fjern_den_gamle_enheten
+
+Import_entries=Importer_enheter
+
+Import_failed=Import_mislyktes
+
+Import_file=Importer_fil
+
+Import_group_definitions=Importer_gruppedefinisjoner
+
+Import_name=Navn_p\u00e5_import
+
+Import_preferences=Importer_innstillinger
+
+Import_preferences_from_file=Importer_innstillinger_fra_fil
+
+Import_strings=Importer_strenger
+
+Import_to_open_tab=Importer_til_\u00e5pen_tab
+
+Import_word_selector_definitions=Importer_definisjoner_for_hurtigvelgere
+
+Imported_database=Importerte_database
+
+Imported_entries=Importerte_enheter
+
+Imported_from_database=Importerte_fra_databasen
+
+ImportFormat_class=ImportFormat-klasse
+
+Importing=Importerer
+
+Importing_in_unknown_format=Importerer_ukjent_format
+
+In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=I_JabRef_brukes_#-tegn_parvis_for_\u00e5_indikere_strenger.
+
+Include_abstracts=Inkluder_sammendrag
+
+Include_entries=Inkluder_enheter
+Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Inkluder_undergrupper:_Vis_enheter_inneholdt_i_denne_gruppen_eller_en_undergruppe
+
+Incremental=Inkrementell
+
+Incremental_search=Inkrementelt_s\u00f8k
+
+Incremental_search_failed._Repeat_to_search_from_top.=Incremental_search_failed._Repeat_to_search_from_top.
+Independent_group\:_When_selected,_view_only_this_group's_entries=Uavhengig_gruppe:_Vis_bare_denne_gruppens_enheter
+
+Initially_show_groups_tree_expanded=Vis_gruppetreet_ekspandert_i_utgangspunktet
+
+Input=Inndata
+
+Input_error=Inputfeil
+
+Insert=Legg_til
+
+Insert_rows=Legg_til_rader
+
+Insert_selected_citations_into_LyX/Kile=Send_valgte_enheter_til_LyX/Kile
+
+Insert_selected_citations_into_WinEdt=Send_valgte_enheter_til_WinEdt
+
+insert_string_=sett_inn_streng_
+
+Insert_URL=Sett_inn_URL
+
+integrity=integritet
+
+Integrity_check=Integritetssjekk
+
+Intersection=Snitt
+
+Invalid_BibTeX_key=Ugyldig_BibTeX-n\u00f8kkel
+
+Invalid_date_format=Ugyldig_datoformat
+
+Invalid_URL=Ugyldig_URL
+
+Inverted=Invertert
+
+is_a_standard_type.=er_en_standardtype.
+
+ISO_abbreviation=ISO-forkortelse
+
+Item_list_for_field=Ordliste_for_felt
+
+jabref=jabref
+
+JabRef_help=JabRef-hjelp
+
+JabRef_preferences=JabRef-oppsett
+
+Journal_abbreviations=Journalforkortelser
+
+Journal_list_preview=Forh\u00e5ndsvisning_av_journalliste
+
+Journal_name=Journalnavn
+
+Keep=Behold
+
+Keep_both=Behold_begge
+
+Keep_lower=Behold_nederste
+
+Keep_upper=Behold_\u00f8verste
+
+Key_bindings=Hurtigtaster
+
+Key_bindings_changed=Hurtigtaster_endret
+
+Key_generator_settings=Innstillinger_for_n\u00f8kkelgenerering
+
+Key_pattern=M\u00f8nster
+
+keys_in_database=n\u00f8kler_i_databasen
+
+Keyword=N\u00f8kkelord
+
+Label=Navn
+
+Language=Spr\u00e5k
+
+Last_modified=Sist_endret
+
+LaTeX_AUX_file=LaTeX_AUX-fil
+
+Leave_file_in_its_current_directory.=La_filen_ligge_i_katalogen_den_ligger_i_n\u00e5.
+
+Leave_files_in_their_current_directory.=La_filene_ligge_i_katalogen_de_ligger_i_n\u00e5.
+
+Left=Venstre
+
+License=Lisens
+
+Limit_to_fields=Begrens_til_f\u00f8lgende_felter
+
+Limit_to_selected_entries=Begrens_til_valgte_enheter
+
+Link=Link
+
+Link_local_file=Link_til_lokal_fil
+
+Link_to_file_%0=Link_til_filen_%0
+
+Listen_for_remote_operation_on_port=Lytt_etter_fjernoperasjoner_p\u00c3\u00a5_port
+
+Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Hent_og_lagre_innstillinger_fra/til_jabef.xml_ved_oppstart_(minnepinne-modus)
+
+Load_session=Gjenopprett_tilstand
+
+Loading_session...=Gjenoppretter_tilstand...
+
+localhost=localhost
+
+Look_and_feel=Utseende
+
+Looking_for_pdf...=Ser_etter_pdf...
+
+lower=sm\u00e5_bokstaver
+
+Main_file_directory=Hovedkatalog_for_filer
+
+Main_layout_file=Hoved-layoutfil
+
+Main_PDF_directory=Hovedkatalog_for_PDF-filer
+
+Main_PS_directory=Hovedkatalog_for_PS-filer
+
+Manage=Sett_opp
+
+Manage_custom_exports=Sett_opp_eksterne_eksportfiltre
+
+Manage_custom_imports=Sett_opp_eksterne_importfiltre
+
+Manage_external_file_types=Sett_opp_eksterne_filtyper
+
+Manage_journal_abbreviations=Sett_opp_journalforkortelser
+
+Mark_entries=Merk_enheter
+
+Mark_entry=Merk_enhet
+
+Mark_new_entries_with_addition_date=Merk_nye_enheter_med_dato
+
+Mark_new_entries_with_owner_name=Merk_nye_enheter_med_navn_p\u00e5_eier
+
+Marked_selected=Merket_valgte_enheter
+
+Memory_Stick_Mode=Minnepinne-modus
+
+Menu_and_label_font_size=St\u00f8rrelse_av_menyfonter
+
+Merged_external_changes=Inkorporerte_eksterne_endringer
+
+Messages=Meldinger
+
+Messages_and_Hints=Beskjeder_og_hint
+
+Modification_of_field=Endring_av_felt
+
+Modified_group_"%0".=Endret_gruppen_"%0".
+
+Modified_groups=Endrede_grupper
+
+Modified_string=Endret_streng
+
+Modify=Endre
+
+modify_group=endre_gruppe
+
+MODS=MODS
+
+Move=Flytt
+
+Move_down=Flytt_ned
+
+Move_entries_in_group_selection_to_the_top=Flytt_enheter_i_valgte_grupper_\u00f8verst
+
+Move_external_links_to_'file'_field=Flytt_eksterne_linker_til_'file'-feltet
+
+Move_files_to_file_directory.=Flytt_filer_til_filkatalog.
+
+move_group=flytt_gruppe
+
+Move_string_down=Flytt_streng_ned
+
+Move_string_up=Flytt_streng_opp
+
+Move_up=Flytt_opp
+
+Moved_group_"%0".=Flyttet_gruppen_"%0".
+
+MS_Office_2007=MS_Office_2007
+
+MySQL=MySQL
+
+MySQL_database=MySQL-database
+
+Name=Navn
+
+Name_formatter=Navneformaterer
+
+Natbib_style=Natbib-stil
+
+nested_aux_files=n\u00f8stede_aux-filer
+
+New=Ny
+
+new=ny
+
+New_BibTeX_database=Ny_BibTeX-database
+
+New_BibTeX_entry=Ny_BibTeX-enhet
+
+New_BibTeX_subdatabase=Ny_BibTeX-deldatabase
+
+New_content=Nytt_innhold
+
+New_database_created.=Opprettet_ny_database.
+
+New_field_value=Ny_verdi
+
+New_file=Ny_fil
+
+New_file_link_(INSERT)=Ny_link_(INSERT)
+
+New_group=Ny_gruppe
+
+New_string=Ny_streng
+
+Next_entry=Neste_enhet
+
+No_%0_found=Fant_ingen_%0
+
+No_actual_changes_found.=Ingen_reelle_endringer_funnet.
+
+no_base-bibtex-file_specified=ingen_basis-bibtexfil_spesifisert
+
+no_database_generated=ingen_database_generert
+
+No_duplicates_found=Ingen_duplikater_funnet
+
+No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Ingen_enheter_funnet._Kontroller_at_du_bruker_riktig_importfilter.
+
+No_entries_found_for_the_search_string_'%0'=Fant_ingen_enheter_for_s\u00f8keteksten_'%0'
+
+No_entries_imported.=Ingen_enheter_importert.
+
+No_entries_or_multiple_entries_selected.=Ingen_eller_flere_enheter_valgt.
+
+No_entries_selected=Ingen_enheter_valgt
+
+No_entries_selected.=Ingen_enheter_valgt.
+
+No_exceptions_have_ocurred.=Ingen_feiltilstander_har_inntruffet.
+
+No_files_found.=Ingen_filer_funnet.
+
+No_GUI._Only_process_command_line_options.=Ingen_GUI._Bare_behandle_kommandolinjevalg.
+
+No_journal_names_could_be_abbreviated.=Ingen_journalnavn_kunne_forkortes.
+
+No_journal_names_could_be_unabbreviated.=Ingen_journalnavn_kunne_ekspanderes.
+
+No_PDF_linked=Ingen_PDF_linket
+
+No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Ingen_pdf_eller_ps_definert_og_fant_ingen_filer_med_navn_tilsvarende_BibTeX-n\u00f8kkelen
+No_plugins_were_found_in_the_following_folders\:=Ingen_plugins_ble_funnet_i_f\u00f8lgende_mapper:
+
+No_references_found=Ingen_referanser_funnet
+
+No_saved_session_found.=Fant_ingen_lagret_tilstand.
+
+No_url_defined=Ingen_url_er_definert
+
+No_XMP_metadata_found_in_=Ingen_XMP-metadata_funnet_i_
+
+not=ikke
+
+not_found=ikke_funnet
+
+Not_saved_(empty_session)=Tilstand_ikke_lagret_(ingen_filer_\u00e5pne)
+
+Note_that_the_entry_causing_the_problem_has_been_selected.=Legg_merke_til_at_enheten_som_skaper_problemet_har_blitt_valgt.
+
+Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=Merk_at_du_m\u00e5_spesifisere_det_fullstendige_klassenavnet_for_utseendet,
+
+Nothing_to_redo=Ingenting_\u00e5_gjenta
+
+Nothing_to_undo=Ingenting_\u00e5_angre
+
+# The next is used like in "References found: 1  Number of references to fetch?"
+Number_of_references_to_fetch?=Antall_referanser_som_skal_hentes?
+
+occurences=treff
+
+OK=OK
+
+Ok=OK
+
+One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=En_eller_flere_linker_er_av_typen_'%0'_som_er_udefinert._Hva_vil_du_gj\u00f8re?
+
+One_or_more_keys_will_be_overwritten._Continue?=En_eller_flere_n\u00f8kler_vil_bli_skrevet_over._Fortsett?
+
+Only_one_item_is_supported=Bare_ett_element_av_gangen_er_st\u00f8ttet
+
+Open=\u00c5pne
+
+Open_BibTeX_database=\u00c5pne_BibTeX-database
+
+Open_database=\u00c5pne_database
+
+Open_editor_when_a_new_entry_is_created=Start_redigering_n\u00e5r_en_ny_enhet_opprettes
+
+Open_file=\u00c5pne_fil
+
+Open_last_edited_databases_at_startup=\u00c5pne_sist_viste_databaser_ved_oppstart
+
+Open_PDF_or_PS=\u00c5pne_PDF_eller_PS
+
+Open_right-click_menu_with_Ctrl+left_button=\u00c5pne_h\u00f8yreklikkmeny_med_Ctrl+venstre_knapp
+
+Open_URL_or_DOI=\u00c5pne_URL_eller_DOI
+
+OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
+
+Opened_database=\u00c5pnet_database
+
+Opening=\u00c5pner
+
+Opening_preferences...=\u00c5pner_innstillinger...
+
+OpenOffice_Calc=OpenOffice_Calc
+
+OpenOffice_CSV=OpenOffice_CSV
+Operation_canceled.\n=Operasjonen_avbrutt.\n
+
+Operation_not_supported=Operasjonen_er_ikke_st\u00f8ttet
+
+Optional_fields=Valgfrie_felter
+
+Options=Valg
+
+or=eller
+
+out_of=ut_av
+
+Output=Output
+
+Output_or_export_file=Lagre_eller_eksporter_fil
+
+Override=Skriv_over
+
+Override_default_file_directories=Overstyr_hovekataloger_for_filer
+
+Override_default_font_settings=Overstyr_standardfonter
+
+override_the_bibtex_key_by_the_selected_text=overskriv_BibTeX-n\u00f8kkelen_med_den_valgte_teksten
+
+Overwrite=Skriv_over
+
+Overwrite_existing_field_values=Skriv_over_eksisterende_verdier
+
+Overwrite_keys=Skriv_over_n\u00f8kler
+
+pairs_processed=par_revidert
+Password_\:=Passord:
+
+Paste=Lim_inn
+
+paste_entries=lim_inn
+
+paste_entry=lim_inn
+
+Paste_from_clipboard=Lim_inn_fra_utklippstavle
+
+Pasted=Limte_inn
+
+Path_to_%0_not_defined=Sti_til_%0_ikke_definert
+
+Path_to_LatexEditor_(LEd.exe)=Sti_til_LatexEditor_(LEd.exe)
+
+Path_to_LyX_pipe=Sti_til_LyX-pipe
+
+Path_to_Vim=Sti_til_Vim
+
+Path_to_WinEdt.exe=Sti_til_WinEdt.exe
+
+PDF_directory=PDF-katalog
+
+PDF_does_not_exist=PDF-filen_finnes_ikke
+
+Personal_journal_list=Personlig_journalliste
+
+Plain_text_import=Import_fra_ren_tekst
+
+Please_check_your_network_connection_to_this_machine.=Vennligst_sjekk_maskinens_nettverksforbindelse.
+
+Please_enter_a_name_for_the_group.=Skriv_inn_et_navn_for_gruppen.
+
+Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Skriv_inn_et_s\u00f8kebegrep._For_eksempel,_for_\u00e5_s\u00f8ke_i_alle_felter_etter_<b>Olsen</b>,_skriv%c<p><tt>olsen</tt><p>For_\u00e5_s\u00f8ke_i_<b>Author</b>-feltet_etter_<b>Olsen</b>_og_i_<b>Title</b>-feltet_etter_<b>electr [...]
+
+Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Vennligst_skriv_inn_feltet_som_skal_s\u00f8kes_i_(f.eks._<b>keywords</b>)_og_n\u00f8kkelordet_\u00e5_s\u00f8ke_etter_(f._eks._<b>electrical</b>).
+
+Please_enter_the_string's_label=Skriv_inn_et_navn_for_strengen
+
+Please_select_an_importer=Vennligst_velg_et_importformat
+
+Please_select_an_importer.=Velg_et_importfilter.
+
+Please_select_exactly_one_group_to_move.=Velg_eksakt_en_gruppe_for_flytting.
+
+Please_specify_the_=Vennligst_spesifiser_
+
+Possible_duplicate_entries=Mulige_duplikater
+
+Possible_duplicate_of_existing_entry._Click_to_resolve.=Mulig_duplikat_av_eksisterende_enhet._Klikk_for_\u00e5_h\u00e5ndtere.
+
+Preamble=Preamble
+
+Preferences=Oppsett
+
+Preferences_recorded.=Lagret_oppsett.
+
+Preview=Forh\u00e5ndsvisning
+
+Previous_entry=Forrige_enhet
+
+Primary_sort_criterion=Prim\u00e6rt_sorteringskriterium
+
+Print_Preview=Skriv_ut_forh\u00e5ndsvisning
+
+Printing_Entry_Preview=Skriver_ut_forh\u00e5ndsvisning_av_enhet
+
+Problem_with_parsing_entry=Problem_med_\u00e5_lese_enhet
+
+Processing_=Arbeider_
+
+Program_output=Output_fra_program
+
+PS_directory=PS-katalog
+
+Push_entries_to_external_application_(%0)=Send_enheter_til_eksternt_program_(%0)
+
+Push_selection_to_Emacs=Send_valgte_enheter_til_Emacs
+
+Push_selection_to_LyX/Kile=Send_valgte_enheter_til_LyX/Kile
+
+Push_selection_to_Vim=Send_valgte_enheter_til_Vim
+
+Push_selection_to_WinEdt=Send_valgte_til_WinEdt
+
+Push_to_LatexEditor=Send_til_LatexEditor
+
+Pushed_citations_to_%0=Sendte_enheter_til_%0
+
+Pushed_citations_to_Emacs=Sendte_enheter_til_Emacs
+
+Pushed_citations_to_Vim=Sendte_enheter_til_Vim
+
+Pushed_citations_to_WinEdt=Sendte_referanser_til_WinEdt
+
+Pushed_the_citations_for_the_following_rows_to=Sendte_referanser_til_de_f\u00f8lgende_radene_til
+
+Quit_JabRef=Avslutt_JabRef
+
+Quit_synchronization=Avslutt_synkronisering
+
+Raw_source=Kilde
+
+Really_delete_the_selected=Vil_du_slette_de_valgte
+
+Rearrange_tabs_alphabetically_by_title=Rearranger_databasene_alfabetisk_etter_navn
+
+Redo=Gjenta
+
+Reference_database=Referansedatabase
+
+# The next two lines are used like in "References found: 1  Number of references to fetch?"
+References_found=Referanser_funnet
+Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Undergruppe:_Vis_enheter_innehold_b\u00e5de_i_denne_gruppen_og_gruppen_over
+
+Refresh_view=Oppdater
+
+Regular_Expression=Regul\u00e6ruttrykk
+
+Remember_these_entry_types?=Husk_disse_enhetstypene?
+
+Remote_operation=Fjernstyring
+
+Remote_server_port=Port_for_fjernstyring
+
+Remove=Fjern
+
+Remove_all?=Fjern_alle?
+
+Remove_all_subgroups=Fjern_undergrupper
+
+Remove_all_subgroups_of_"%0"?=Remove_all_subgroups_of_"%0"?
+
+Remove_double_braces_around_BibTeX_fields_when_loading.=Fjern_doble_kr\u00f8llparenteser_rundt_BibTeX-felter_ved_innlasting.
+
+Remove_duplicates=Fjern_duplikater
+
+Remove_entry_from_import=Fjern_enhet_fra_import
+
+Remove_entry_selection_from_this_group=Fjern_valgte_enheter_fra_denne_gruppen
+
+Remove_entry_type=Slett_enhetstype
+
+Remove_file_link_(DELETE)=Slett_link_(DELETE)
+
+remove_from_group=fjern_fra_gruppe
+
+Remove_from_group=Fjern_fra_gruppe
+
+Remove_group=Fjern_gruppe
+
+Remove_group,_keep_subgroups=Fjern_gruppe,_behold_undergrupper
+
+Remove_group_"%0"?=Fjern_gruppen_"%0"?
+
+Remove_group_"%0"_and_its_subgroups?=Fjern_gruppen_"%0"_og_dens_undergrupper?
+
+remove_group_(keep_subgroups)=fjern_gruppe_(behold_undergrupper)
+
+remove_group_and_subgroups=fjern_gruppe_og_undergrupper
+
+Remove_group_and_subgroups=Fjern_gruppe_og_undergrupper
+
+Remove_link=Slett_link
+
+Remove_old_entry=Fjern_gammel_enhet
+
+Remove_selected_strings=Slett_valgte_strenger
+
+remove_string_=slett_streng_
+
+Removed_group_"%0".=Fjernet_gruppen_"%0"
+
+Removed_group_"%0"_and_its_subgroups.=Fjernet_gruppen_"%0"_og_dens_undergrupper
+
+Removed_string=Fjernet_streng
+
+Renamed_string=Endret_navn_p\u00e5_streng
+
+Replace=Erstatt
+
+Replace_(regular_expression)=Erstatt_(regul\u00e6ruttrykk)
+
+Replace_string=Erstatt_streng
+
+Replace_with=Erstatt_med
+
+Replaced=Erstattet
+
+Required_fields=N\u00f8dvendige_felter
+
+Reset_all=Tilbakestill_alle
+
+Reset_file_type_definitons=Gjenopprett_opprinnelige_filtyper
+
+Resolve_strings_for_all_fields_except=Sl\u00e5_opp_strenger_for_alle_felter_unntatt
+
+Resolve_strings_for_standard_BibTeX_fields_only=Sl\u00e5_opp_strenger_kun_for_standard_BibTeX-felter
+
+resolved=tatt_h\u00e5nd_om
+
+Results=Resultater
+
+Revert_to_original_source=Resett_til_opprinnelig_kildekode
+
+Review=Kommentarer
+
+Review_changes=Se_over_endringer
+
+Right=H\u00f8yre
+
+root=root
+
+Save=Lagre
+
+Save_all_finished.=Fullf\u00f8rte_lagring_av_alle_databaser
+
+Save_all_open_databases=Lagre_alle_\u00e5pne_databaser
+
+Save_before_closing=Lagre_f\u00f8r_databasen_lukkes
+
+Save_database=Lagre_database
+
+Save_database_as_...=Lagre_database_som_...
+
+Save_entries_in_their_original_order=Lagre_enheter_i_opprinnelig_rekkef\u00f8lge
+
+Save_failed=Lagring_mislyktes
+
+Save_failed_during_backup_creation=Lagring_mislyktes_ved_opprettelse_av_sikkerhetskopi
+
+Save_failed_while_committing_changes=Lagring_mislyktes_ved_sluttf\u00f8ring_av_endringer
+
+Save_ordered_by_author/editor/year=Lagre_sortert_etter_author/editor/year
+
+Save_selected_as_...=Lagre_valgte_som_...
+
+Saved_database=Lagret_database
+
+Saved_selected_to=Lagret_valgte_i
+
+Saved_session=Lagret_tilstand
+
+Saving=Lagrer
+
+Saving_all_databases...=Lagrer_alle_databaser...
+
+Saving_database=Lagrer_database
+
+# Integrity check is a process that checks for indications of wrongly filled out bibtex fields. "Scan" is the button that starts the check.
+Scan=S\u00f8k
+
+Search=S\u00f8k
+
+Search_All_Fields=S\u00f8k_i_alle_felter
+
+Search_all_fields=S\u00f8k_i_alle_felter
+
+Search_error=Feil_ved_s\u00f8k
+
+Search_expression=S\u00f8keuttrykk
+
+Search_for=S\u00f8k_etter
+
+Search_general_fields=S\u00f8k_i_generelle_felter
+
+Search_IEEEXplore=S\u00f8l_IEEExplore
+
+Search_IEEExplore=S\u00f8k_IEEExplore
+
+Search_optional_fields=S\u00f8k_i_valgfrie_felter
+
+Search_required_fields=S\u00f8k_i_n\u00f8dvendige_felter
+
+Search_Specified_Field(s)=S\u00f8k_spesifiserte_felt(er)
+
+Searched_database._Global_number_of_hits=S\u00f8kte_gjennom_basen._Globalt_antall_treff
+
+Searched_database._Number_of_hits=S\u00f8kte_gjennom_basen._Antall_treff
+
+Searching_for_%0_file=S\u00f8ker_etter_%0-fil
+
+Searching_for_duplicates...=S\u00f8ker_etter_duplikater...
+
+Searching_for_files=S\u00f8ker_etter_filer
+
+Secondary_sort_criterion=Andre_sorteringskriterium
+
+Select=Velg
+
+Select_a_Zip-archive=Velg_ZIP-fil
+
+Select_action=Select_action
+
+Select_all=Velg_alle
+
+Select_Classpath_of_New_Importer=Velg_classpath_for_nytt_importformat
+
+Select_encoding=Velg_koding
+
+Select_entries_in_group_selection=Velg_enheter_i_valgte_grupper
+
+Select_entry_type=Velg_enhetstype
+
+Select_external_application=Velg_ekstern_applikasjon
+
+Select_file_from_ZIP-archive=Velg_fil_fra_ZIP-fil
+
+Select_format=Velg_format
+
+Select_icon=Velg_ikon
+
+Select_matches=Velg_treff
+
+Select_new_ImportFormat_Subclass=Velg_klasse_for_nytt_importformat
+
+Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Velg_trenodene_for_\u00e5_inspisere_og_akseptere_eller_avsl\u00e5_endringer
+
+Selected_entries=Valgte_enheter
+
+Selector_enabled_fields=Felter_med_ordliste
+
+Server_Hostname_\:=Tjenernavn:
+
+Server_Type_\:=Tjenertype:
+
+Set_field=Sett_felt
+
+Set_fields=Sett_felter
+
+Set_general_fields=Tilpass_generelle_felter
+
+Set_main_external_file_directory=Sett_hovedkatalog_for_eksterne_linker
+
+Set_table_font=Velg_tabellfont
+
+Settings=Innstillinger
+
+Setup_selectors=Sett_opp_ordlister
+
+Short_form=Kort_form
+
+Shortcut=Snarvei
+
+Show/edit_BibTeX_source=Vis/rediger_BibTeX-kilde
+
+Show_'Firstname_Lastname'=Vis_'Fornavn_Etternavn'
+
+Show_'Lastname,_Firstname'=Vis_'Etternavn,_Fornavn'
+
+Show_BibTeX_source_by_default=Vis_BibTeX-kode_som_standard
+
+Show_BibTeX_source_panel=Vis_BibTeX-kilde-panel
+
+Show_confirmation_dialog_when_deleting_entries=Vis_dialog_for_\u00e5_bekrefte_sletting_av_enheter
+
+Show_description=Vis_beskrivelse
+
+Show_dynamic_groups_in_<i>italics</i>=Vis_dynamiske_grupper_i_<i>kursiv</i>
+
+Show_entries_*not*_in_group_selection=Vis_enheter_*utenfor*_valgte_grupper
+
+Show_file_column=Vis_'file'-kolonne
+
+Show_icons_for_groups=Vis_ikoner_for_grupper
+
+Show_last_names_only=Vis_bare_etternavn
+
+Show_names_unchanged=Vis_navn_uforandret
+
+Show_one_less_rows=Vis_en_rad_mindre
+
+Show_one_more_row=Vis_en_rad_mer
+
+Show_optional_fields=Vis_valgfrie_felter
+
+Show_PDF/PS_column=Vis_PDF/PS-kolonne
+
+Show_required_fields=Vis_n\u00f8dvendige_felter
+
+Show_URL/DOI_column=Vis_URL/DOI-kolonne
+
+Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Vis_advarsel_n\u00e5r_en_ikke_unik_BibTeX-n\u00f8kkel_skrives_inn
+
+Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Vis_dialogboks_med_advarsel_n\u00e5r_en_tom_BibTeX-n\u00f8kkel_skrives_inn
+
+Simple_HTML=Enkel_HTML
+
+Size=St\u00f8rrelse
+
+Skip=Hopp_over
+
+Skipped_-_No_PDF_linked=Hoppet_over_-_ingen_PDF-fil_linket
+
+Skipped_-_PDF_does_not_exist=Hoppet_over_-_PDF-filen_finnes_ikke
+
+Skipped_entry.=Hoppet_over_enhet.
+
+Sort_alphabetically=Sorter_alfabetisk
+
+Sort_Automatically=Sorter_automatisk
+
+Sort_order=Sortering
+
+sort_subgroups=sorter_undergrupper
+
+Sorted_all_subgroups_recursively.=Sorterte_alle_undergrupper_rekursivt.
+
+Sorted_immediate_subgroups.=Sorterte_n\u00e6rmeste_undergrupper.
+
+source_edit=redigering_av_kilde
+
+Special_Name_Formatters=Spesielle_navneformaterere
+
+Special_table_columns=Spesielle_kolonner
+
+SQL_connection_established.=Etablerte_SQL-forbindelse
+
+Start_incremental_search=Start_inkrementelt_s\u00f8k
+
+Start_search=Start_s\u00f8k
+
+Starting_import=Starter_import
+
+Statically_group_entries_by_manual_assignment=Grupper_enheter_statisk_ved_manuell_tildeling
+
+Status=Status
+
+Stop=Stopp
+
+Store_journal_abbreviations=Lagre_journalforkortelser
+
+Store_string=Lagre_streng
+
+Store_the_following_fields_with_braces_around_capital_letters=Lagre_de_f\u00f8lgende_feltene_med_kr\u00f8llparenteser_rundt_store_bokstaver
+
+Stored_entry=Lagret_enhet
+
+Strings=Strenger
+
+Strings_for_database=Strenger_for_database
+
+Subdatabase_from_aux=Deldatabase_fra_aux-fil
+
+Suggest=Foresl\u00e5
+
+Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Bytter_mellom_fullt_og_forkortet_journalnavn_dersom_navnet_er_kjent.
+
+Synchronize_%0_links=Synkroniser_%0-linker
+
+Synchronize_file_links=Synkroniser_eksterne_linker
+
+Synchronizing_%0_links...=Synkroniserer_%0-linker...
+
+Table_appearance=Tabelloppsett
+
+Table_background_color=Bakgrunnsfarge_for_tabell
+
+Table_grid_color=Farge_p\u00e5_linjer_i_tabell
+
+Table_text_color=Tekstfarge_i_tabell
+
+Tabname=Tabnavn
+
+Target_file_cannot_be_a_directory.=M\u00e5lfilen_kan_ikke_v\u00e6re_en_katalog.
+
+Tertiary_sort_criterion=Tredje_sorteringskriterium
+
+Test=Test
+
+Text_Input_Area=Inndatafelt
+
+The_#_character_is_not_allowed_in_BibTeX_fields=#-tegnet_er_ikke_tillatt_i_BibTeX-felter
+
+The_chosen_date_format_for_new_entries_is_not_valid=Det_valgte_datoformatet_er_ugyldig
+The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Den_valgte_tegnkodingen_'%0'_kunne_ikke_kode_f\u00f8lgende_tegn:_
+
+The_CiteSeer_fetch_operation_returned_zero_results.=Nedlastingen_fra_CiteSeerX_ga_ingen_resultater.
+
+The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=Denne_versjonen_tilbyr_en_ny_m\u00e5te_\u00e5_h\u00e5ndtere_linker_til_eksterne_filer.<br>For_\u00e5_dra_nytte_av_dette_m\u00e5_linkene_dine_endres_til_det_nye_formatet,_og<br>JabRef_m\u00e5_konfigureres_for_\u00e5_vise_de_nye_linkene.
+
+the_field_<b>%0</b>=feltet_<b>%0</b>
+
+The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Filen<BR>'%0'<BR>har_blitt_endret<BR>eksternt!
+
+The_group_"%0"_already_contains_the_selection.=Gruppen_"%0"_inneholder_allerede_de_valgte_enhetene.
+
+The_label_of_the_string_can_not_be_a_number.=Navnet_p\u00e5_strengen_kan_ikke_v\u00e6re_et_tall.
+
+The_label_of_the_string_can_not_contain_spaces.=Navnet_p\u00e5_strengen_kan_ikke_inneholde_mellomrom.
+
+The_label_of_the_string_can_not_contain_the_'#'_character.=Navnet_p\u00e5_strengen_kan_ikke_inneholde_tegnet_'#'.
+
+The_output_option_depends_on_a_valid_import_option.=Lagre-operasjonen_er_avhengig_av_en_gyldig_import-operasjon.
+
+The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=PDF-filen_inneholder_en_eller_flere_BibTeX-enheter.nVil_du_importere_disse_som_nye_enheter_i_den_\u00e5pne_databasen?
+
+The_regular_expression_<b>%0</b>_is_invalid%c=Regul\u00e6ruttrykket_<b>%0</b>_er_ugyldig%c
+
+The_search_is_case_insensitive.=S\u00f8ket_skiller_ikke_mellom_store_og_sm\u00e5_bokstaver.
+
+The_search_is_case_sensitive.=S\u00f8ket_skiller_mellom_store_og_sm\u00e5_bokstaver.
+
+The_string_has_been_removed_locally=Strengen_har_blitt_slettet_lokalt
+
+There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=Det_finnes_mulige_duplikater_(merket_med_et_'D'-ikon)_som_ikke_har_blitt_h\u00e5ndtert._Fortsette?
+
+this_button_will_update=denne_knappen_vil_oppdatere
+
+This_database_was_written_using_an_older_version_of_JabRef.=Denne_databasen_ble_lagret_fra_en_eldre_versjon_av_JabRef.
+
+This_entry_has_no_BibTeX_key._Generate_key_now?=Denne_enheten_har_ingen_BibTeX-n\u00f8kkel._Generer_n\u00f8kkel_n\u00e5?
+
+This_entry_is_incomplete=Denne_enheten_er_ufullstendig
+
+This_entry_type_cannot_be_removed.=Denne_enhetstypen_kan_ikke_slettes.
+
+This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Denne_eksterne_linken_er_av_typen_'%0'_som_er_udefinert._Hva_vil_du_gj\u00f8re?
+
+This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Denne_gruppen_inneholder_enheter_basert_p\u00e5_manuell_tilordning._Enheter_kan_tilordnes_til_denne_gruppen_ved_\u00e [...]
+
+This_group_contains_entries_in_which=Denne_gruppen_inneholder_enheter_hvor
+
+This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Denne_gruppen_inneholder_enheter_som_stemmer_med_regul\u00e6ruttrykket_<b>%0</b>_i_et_hvilket_som_helst_felt
+
+This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Denne_gruppen_inneholder_enheter_som_har_teksten_<b>%0</b>_i_et_hvilket_som_helst_felt
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Denne_gruppen_inneholder_enheter_hvis_<b>%0</b>-felt_inneholder_n\u00f8kkelordet_<b>%1</b>
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Denne_gruppen_inneholder_enheter_hvis_<b>%0</b>-felt_stemmer_med_regul\u00e6ruttrykket_<b>%1</b>
+
+This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Dette_er_et_enkelt_klipp-og-lim-vindu._F\u00f8rst_last_inn_eller_kopier_tekst_til_inndatafeltet._Deretter_kan_du_merke_tekst_og_tildele_den_til_et_BibTeX-felt.
+
+This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dette_f\u00e5r_JabRef_til_\u00e5_unders\u00f8ke_hver_av_%0-linkene,_og_sjekke_om_filen_eksisterer._Hvis_ikke_vil_du_bli_gitt_valg<BR>for_\u00e5_l\u00f8se_problemet.
+
+This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Denne_operasjonen_krever_at_alle_valgte_enheter_har_definerte_BibTeX-n\u00f8kler.
+
+This_operation_requires_at_least_one_entry.=Denne_operasjonen_krever_minst_en_enhet.
+
+This_operation_requires_one_or_more_entries_to_be_selected.=Denne_operasjonen_krever_at_en_eller_flere_enheter_er_valgt.
+
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Denne_operasjonen_vil_flytte_alle_eskterne_linker_fra_'pdf'-_og_'ps'-feltene_til_'%0'-feltet._Fortsette?
+
+To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=For_\u00e5_sette_opp,_g\u00e5_til_<B>Verkt\u00f8y_->_Sett_opp_journalforkortelser</b>
+
+Toggle_abbreviation=Forkort/ekspander
+
+Toggle_entry_preview=Vis/skjul_forh\u00e5ndsvisning
+
+Toggle_groups_interface=Vis/skjul_grupperingskontroll
+
+Toggle_search_panel=Vis/skjul_s\u00f8kepanel
+
+Try_different_encoding=Pr\u00f8v_en_annen_tegnkoding
+
+Type_set_to_'other'=Type_satt_til_'other'
+
+Unabbreviate_journal_names_of_the_selected_entries=Ekspander_journalnavn_for_de_valgte_enhetene
+
+Unabbreviated_%0_journal_names.=Ekspanderte_%0_journalnavn.
+
+unable_to_access_LyX-pipe=ingen_tilgang_til_LyX-pipe
+
+Unable_to_create_graphical_interface=Kunne_ikke_opprette_grafisk_grensesnitt
+
+Unable_to_open_file.=Kan_ikke_\u00e5pne_fil.
+
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Kan_ikke_\u00e5pne_link._Applikasjonen_'%0'_assosiert_med_filtypen_'%1'_kunne_ikke_kalles.
+
+Unable_to_read_default_icon_theme.=Kunne_ikke_lese_standard_ikonsettfil.
+
+Unable_to_read_icon_theme_file=Kunne_ikke_lese_ikonsettfil
+
+unable_to_write_to=kunne_ikke_skrive_til
+
+Undefined_file_type=Udefinert_filtype
+
+Undo=Angre
+
+Union=Union
+
+Unknown_bibtex_entries=Ukjente_BibTeX-enheter
+
+unknown_edit=ukjent_endring
+
+unknown_entry_type=ukjent_enhetstype
+
+Unknown_export_format=Ukjent_eksportformat
+
+Unmark_all=Fjern_merking_fra_alle
+
+Unmark_entries=Fjern_merking
+
+Unmark_entry=Fjern_merking
+
+Unmarked_selected=Fjernet_merking_fra_valgte_enheter
+
+Unpack_EndNote_filter_set=Pakk_ut_EndNote-filtersett
+
+Unpacked_file.=Pakket_ut_fil.
+
+Unsupported_version_of_class_%0\:_%1=Ikke_st\u00f8ttet_versjon_av_klassen_%0:_%1
+
+untitled=uten_navn
+
+Up=Opp
+
+Update_to_current_column_widths=Bruk_n\u00e5v\u00e6rende_kolonnebredder
+
+Updated_group_selection=Updated_group_selection
+
+Upgrade_external_links=Oppgrader_eksterne_linker
+
+Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Oppgrader_eksterne_PDF-_og_PS-linker_til_\u00e5_bruke_'%0'-feltet.
+
+Upgrade_file=Oppgrader_fil
+
+Upgrade_old_external_file_links_to_use_the_new_feature=Oppgrader_gamle_eksterne_linker_for_\u00e5_bruke_den_nye_funksjonen
+
+Upgraded_links.=Oppgraderte_linker.
+
+UPPER=STORE_BOKSTAVER
+
+Upper_Each_First=Stor_Forbokstav
+
+Upper_first=Stor_forbokstav_f\u00f8rst
+
+usage=bruk
+
+Use_antialiasing_font=Bruk_glattet_font
+
+Use_autocompletion_for_the_following_fields=Bruk_autokomplettering_for_f\u00f8lgende_felter
+
+Use_custom_icon_theme=Bruk_egendefinert_ikonsett
+
+Use_default_viewer=Bruk_standardprogram_for_filtypen
+
+Use_inspection_window_also_when_a_single_entry_is_imported.=Bruk_inspeksjonsvindu_ogs\u00e5_n\u00e5r_bare_\u00e9n_enhet_importeres.
+
+Use_native_file_dialog=Bruk_system-fildialog
+
+Use_other_look_and_feel=Bruk_annet_utseende
+
+Use_Regular_Expression_Search=S\u00f8k_med_regul\u00e6ruttrykk
+
+Use_regular_expressions=Bruk_"regular_expressions"
+
+Use_the_following_delimiter_character(s)=Use_the_following_delimiter_character(s)
+
+Username_\:=Brukernavn:
+
+Value_cleared_externally=Verdien_slettet_eksternt
+
+Value_set_externally=Verdi_satt_eksternt
+
+verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=kontroller_at_LyX_kj\u00f8rer,_og_at_den_angitte_lyxpipe_stemmer
+
+View=Vis
+
+Vim_Server_Name=Navn_p\u00e5_Vim-server
+
+Waiting_for_ArXiv...=Venter_p\u00e5_ArXiv
+
+Warn_about_unresolved_duplicates_when_closing_inspection_window=Advar_om_duplikater_som_ikke_er_blitt_h\u00e5ndtert_n\u00e5r_inspeksjonsvinduet_lukkes
+
+Warn_before_overwriting_existing_keys=Gi_advarsel_f\u00f8r_eksisterende_n\u00f8kler_skrives_over
+
+Warning=Advarsel
+
+Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Advarsel:_kunne_ikke_fullf\u00f8re_reparasjon_av_filen;_filen_kan_v\u00e6re_\u00f8delagt._Feilmelding
+
+Warning_there_is_a_duplicate_key=Advarsel:_det_finnes_en_lik_BibTeX-n\u00f8kkel
+
+Warnings=Advarsler
+
+web_link=link
+
+What_do_you_want_to_do?=Hva_vil_du_gj\u00f8re?
+
+When_adding/removing_keywords,_separate_them_by=N\u00e5r_n\u00f8kkelord_legges_til_eller_fjernes_skill_dem_med
+
+Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Vil_skrive_XMP-metadata_til_PDFene_linket_fra_de_valgte_enhetene.
+
+with=med
+
+Word=Ord
+
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=Skriv_BibTeX-enheten_som_XMP-metadata_til_PDF.
+
+Write_XMP=Skriv_XMP
+
+Write_XMP-metadata=Skriv_XMP-metadata
+
+Write_XMP-metadata_for_all_PDFs_in_current_database?=Skriv_XMP-metadata_for_alle_PDFer_i_denne_databasen?
+
+Writing_XMP=Skriver_XMP
+
+Writing_XMP_metadata...=Skriver_XMP-metadata...
+
+Writing_XMP_metadata_for_selected_entries...=Skriver_XMP-metadata_for_de_valgte_enhetene...
+
+Writing_XMP_to_'%0'...=Skriver_XMP_til_'%0'
+
+Wrong_file_format=Feil_filformat
+
+Wrote_XMP-metadata=Skrev_XMP-metadata
+
+Wrote_XMP_to_'%0'.=Skrev_XMP_til_'%0'
+
+XMP-annotated_PDF=XMP-annotert_PDF
+
+XMP_Export_Privacy_Settings=Innstillinger_for_XMP-eksport
+
+XMP_metadata=XMP-metadata
+
+XMP_metadata_found_in_PDF\:_%0=XMP-metadata_funnet_i_PDF:_%0
+
+You_must_restart_JabRef_for_this_to_come_into_effect.=Du_m\u00e5_starte_JabRef_p\u00e5_nytt_for_at_dette_skal_tre_i_kraft.
+
+You_have_changed_the_language_setting.=Du_har_valgt_et_nytt_spr\u00e5k.
+
+
+You_have_changed_the_look_and_feel_setting.=Du_har_endret_instillingen_for_utseende.
+
+You_have_cleared_this_field._Original_value=Du_har_slettet_dette_feltet._Original_verdi
+
+You_have_entered_an_invalid_search_'%0'.=Ugyldig_s\u00f8keuttrykk_'%0'.
+
+You_must_choose_a_file_name_to_store_journal_abbreviations=Du_m\u00e5_velge_et_filnavn_for_\u00e5_lagre_journalforkortelser
+
+You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Du_m\u00e5_starte_JabRef_p\u00e5_nytt_for_at_de_nye_hurtigtastene_skal_fungere.
+
+You_must_set_both_BibTeX_key_and_%0_directory=Du_m\u00e5_sette_b\u00e5de_BibTeX-n\u00f8kkel_og_%0-katalog
+
+Your_new_key_bindings_have_been_stored.=Dine_nye_hurtigtaster_har_blitt_lagret.
+
+The_following_fetchers_are_available\:=De_f\u00f8lgende_nedlasterne_er_tilgjengelige:
+
+Could_not_find_fetcher_'%0'=Kunne_ikke_finne_nedlasteren_'%0'
+
+Running_Query_'%0'_with_fetcher_'%1'.=Utf\u00f8rer_s\u00f8k_'%0'_med_nedlaster_'%1'.
+
+Please_wait!=Vennligst_vent!
+
+Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=S\u00f8ket_'%0'_med_nedlaster_'%1'_ga_ingen_resultater.
+
+Open_SPIRES_entry=\u00c5pne_SPIRES-enhet
+
+Move/Rename_file=Flytt/endre_navn_p\u00e5_fil
+
+File_moved=Flyttet_fil
+
+Move_file_failed=Flytting_av_fil_mislyktes
+
+Could_not_move_file=Kunne_ikke_flytte_filen
+
+Could_not_find_file_'%0'.=Kunne_ikke_finne_filen_'%0'.
+
+Move/rename_file=Flytt/endre_navn_p\u00e5_fil
+
+Number_of_entries_successfully_imported=Antall_enheter_importert
+
+Import_canceled_by_user=Import_avbrutt_av_bruker
+
+Progress\:_%0_of_%1=Framdrift:_%0_av_%1
+
+Error_while_fetching_from_JSTOR=Feil_ved_henting_fra_JSTOR
+
+Fetching_Medline_by_id...=Henter_Melding_ved_hjelp_av_ID...
+
+Fetching_Medline_by_term...=Henter_Medline_ved_hjelp_av_n\u00f8kkelord...
+
+Medline_import_canceled=Medline-import_kansellert
+
+Please_enter_a_valid_number=Vennligst_skriv_inn_et_gyldig_tall
+
+Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Vennligst_skriv_inn_en_kommaseparert_liste_av_Medline-IDer_(tall)_eller_s\u00f8keord.
+
+An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=Feil_ved_henting_fra_SPIRES-kilde_(%0):
+
+Error_while_fetching_from_Spires\:_=Feil_ved_henting_fra_SPIRES:_
+
+Connect_to_external_SQL_database=Koble_til_ekstern_SQL-database
+
+Export_to_external_SQL_database=Eksporter_til_ekstern_SQL-database
+
+Show_results_in_dialog=Vis_resultater_i_eget_vindu
+
+Global_search=Globalt_s\u00f8k
+
+Show_search_results_in_a_window=Vis_s\u00f8keresultatene_i_et_vundu
+
+Search_results=S\u00f8keresultater
+
+Move_file_to_file_directory?=Flytt_filen_til_hovedkatalogen_for_filer?
+
+Rename_to_'%0'=Endre_navn_til_'%0'
+
+Move_to_file_directory=Flytt_til_hovedkatalog_for_filer
+
+You_have_changed_the_menu_and_label_font_size.=Du_har_endret_skriftst\u00f8rrelser.
+
+Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Databasen_er_beskyttet._Kan_ikke_lagre_f\u00f8r_eksterne_endringer_har_blitt_gjennomg\u00e5tt.
+
+Protected_database=Beskyttet_database
+
+Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Nekt_\u00e5_lagre_databasen_f\u00f8r_eksterne_endringer_har_blitt_gjennomg\u00e5tt.
+
+Database_protection=Databasebeskyttelse
+
+Unable_to_save_database=Kan_ikke_lagre_databasen
+
+BibTeX_key_generator=BibTeX-n\u00f8kkelgenerator
+
+Unable_to_open_link.=Kan_ikke_\u00e5pne_link.
+
+Search_JSTOR=S\u00f8k_JSTOR
+
+Attempting_SQL_import...=Pr\u00f8ver_SQL-import...
+
+BibO_RDF=BibO_RDF
+
+HTML_parser=HTML-leser
+
+Move_the_keyboard_focus_to_the_entry_table=Flytt_fokus_til_hovedtabellen
+
+MIME_type=MIME-type
+
+This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Denne_funksjonen_lar_deg_\u00e5pne_eller_importere_nye_filer_til_en_allerede_kj\u00f8rende_instans_av_JabRef<br>fra_nettleseren_din.<br>Merk_at_dette_vil_hindre_deg_i_\u00e5_kj\u00f8r [...]
+
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Merk_at_disse_instillingene_bare_brukes_for_de_foreldede_<b>pdf</b>-_og_<b>ps</b>-feltene.<br>For_de_fleste_brukerne_er_det_tilstrekkelig_\u00e5_sette_<b>Hovedkatalog_for_filer</b>_ovenfor.
+
+Legacy_file_fields=Foreldede_linkfelter
+
+This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Dette_f\u00e5r_JabRef_til_\u00e5_se_p\u00e5_hver_%0-link,_og_sjekke_om_filen_eksisterer._Hvis_ikke_vil_du_f\u00e5_noen<BR>alternativer_for_\u00e5_l\u00f8se_problemet.
+
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=
+
+The_ACM_Digital_Library=ACM_Digital_Library
+
+Reset=Resett
+
+Use_IEEE_LaTeX_abbreviations=Bruk_IEEE-LaTeX-forkortelser
+
+The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
+
+Search_ACM_Portal=S\u00b8k_ACM-portalen
+
+Connection_to_ACM_Portal_failed=Kunne_ikke_opprette_forbindelse_til_ACM-portalen
+
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=Ved_\u00e5pning_av_linke,_s\u00b8k_etter_matchende_fil_hvis_ingen_er_definert
+
+Settings_for_%0=Innstillinger_for_%0
+
+Insert_selected_citations_into_Vim=Send_valgte_enheter_til_Vim
+
+RIS=RIS
+
+Assign_exclusively_to_group=Tilordne_eksklusivt_til_gruppe
+
+Bad_Request_'%0'.=Bad_request_'%0'.
+
+Mark_entries_imported_into_an_existing_database=Merk_enheter_som_importeres_til_en_eksisterende_database
+
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Fjern_merking_fra_alle_merkede_enheter_f\u00b8r_nye_importeres
+
+Forward=Fram
+
+Back=Tilbake
+
+Sort_the_following_fields_as_numeric_fields=Sorter_de_f\u00c3\u00b8lgende_feltene_som_tall
+
+Line_%0\:_Found_corrupted_BibTeX-key.=Linje_%0:_Fant_ugyldig_BibTeX-n\u00b8kkel.
+
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Linje_%0:_Fant_ugyldig_BibTeX-n\u00b8kkel_(inneholder_mellomrom).
+
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Linje_%0:_Fant_ugyldig_BibTeX-n\u00b8kkel_(manglende_komma).
+
+Finished_downloading_full_text_document=Fullf\u00b8rte_nedlasting_av_fulltekstdokument
+
+Unable_to_find_full_text_document_in_the_linked_web_page.=Kan_ikke_finne_fulltekstdokument_p\u00e5_den_linkede_websiden.
+
+Connection_error_when_trying_to_find_full_text_document.=Tilkoblingsfeil_ved_for\u00b8k_p\u00e5_\u00e5_finne_fulltekstdokument
+
+This_entry_provides_no_URL_or_DOI_links.=Denne_enheten_har_ingen_URL-_eller_DOI-linker
+
+Full_text_article_download_failed=Kunne_ikke_laste_ned_fulltekstdokument
+
+Update_to_current_column_order=Oppdater_til_n\u00e5v\u00e6rende_rekkef\u00b8lge_p\u00e5_kolonner
+
+Rename_field=Endre_navn_p\u00e5_felt
+
+Set/clear/rename_fields=Sett/slett/endre_navn_p\u00e5_felt
+
+Rename_field_to\:=Endre_navn_p\u00e5_felt_til:
+
+Move_contents_of_a_field_into_a_field_with_a_different_name=Flytt_innholdet_i_et_felt_til_et_annet_felt
+
+You_can_only_rename_one_field_at_a_time=Du_kan_bare_endre_navn_p\u00e5_ett_felt_av_gangen
+
+Remove_all_broken_links=Fjern_alle_ugyldige_linker
+
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Kan_ikke_bruke_port_%0_for_fjernstyring;_den_kan_v\u00e6re_i_bruk_av_et_annet_program._Pr\u00b8v_\u00e5_spesifisere_en_annen_port.
+
+Plugin_installer=Plugin-installasjon
+
+Unable_to_create_plugin_directory=Kan_ikke_opprette_pluginkatalog
+
+Unable_to_copy_file=Kan_ikke_kopiere_fil
+
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Installasjon_av_plugin_fullf\u00b8rt._Du_m\u00e5_starte_JabRef_p\u00e5_nytt_for_\u00e5_laste_den_inn.
+
+Unable_to_create_user_plugin_directory=Kan_ikke_opprette_brukerspesifikk_pluginkatalog
+
+Plugin_installation_failed.=Installasjon_av_plugin_mislyktes.
+
+The_same_version_of_this_plugin_is_already_installed.=Samme_versjon_av_denne_plugin'en_er_allerede_installert.
+
+A_newer_version_of_this_plugin_is_already_installed.=En_nyere_versjon_av_denne_plugin'en_er_allerede_installert.
+
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=En_eller_flere_versjoner_av_denne_plugin'en_er_installert._Slette_gamle_versjoner?
+
+Old_versions_deleted_successfully.=Gamle_versjoner_slettet.
+
+Install_plugin=Installer_plugin
+
+Download_plugin=Last_ned_plugin
+
+Plugin_manager=Plugin-h\u00e5ndtering
+
+Delete_the_%0_selected_plugins?=Slette_de_%0_valgte_plugins?
+
+Delete_plugins=Slett_plugin
+
+Delete_the_selected_plugin?=Slette_valgt_plugin?
+
+Delete_plugin=Slett_plugin
+
+Enter_download_URL=Skriv_inn_URL_for_nedlasting
+
+Plugin_name=Navn_p\u00e5_plugin
+
+Version=Versjon
+
+Unknown=Ukjent
+
+Not_loaded=Ikke_lastet
+
+Loaded=Lastet
+
+Could_not_determine_version_of_=Kunne_ikke_bestemme_versjonsnummer_for_
+
+Install_anyway?=Installer_likevel?
+
+Looking_for_full_text_document...=Ser_etter_fulltekstdokument...
+
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=F\u00f8lg_DOI-_eller_URL-link_og_pr\u00f8v_\u00e5_finne_fulltekst-dokument
+
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Kunne_ikke_finne_fulltekstdokument._Ingen_s\u00f8kealgoritme_definert_for_websiden_'%0'.
+
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Fant_PDF-link,_men_mottok_feil_MIME-type._Dette_kan_indikere_at_du_ikke_har_tilgang_til_fulltekstdokumentet.
+
+Autosave=Autolagring
+
+Prompt_before_recovering_a_database_from_an_autosave_file=Sp\u00b8r_f\u00b8r_en_database_gjenopprettes_fra_autolagret_fil
+
+Autosave_interval_(minutes)=Intervall_for_autolagring_(minutter)
+
+Do_you_want_to_recover_the_database_from_the_autosave_file?=Vil_du_gjenopprette_databasen_fra_den_autolagrede_filen?
+
+Recover_from_autosave=Gjenopprette_fra_autolagret_fil
+
+%0_warnings=%0_advarsler
+
+Save_in_current_table_sort_order=Lagre_i_n\u00e5v\u00e6rende_sortering
+
+Export_in_current_table_sort_order=Eksporter_i_n\u00e5v\u00e6rende_sortering
+
+Export_ordered_by_author/editor/year=Eksporter_sortert_etter_author/editor/year
+
+Export_entries_in_their_original_order=Eksporter_enheter_i_deres_opprinnelige_rekkef\u00b8lge
+
+Error_opening_file_'%0'.=Feil_ved_\u00e5pning_av_filen_'%0'.
+
+Autosave_of_file_'%0'=Autolagring_av_filen_'%0'
+
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Feil_ved_\u00e5pning_av_autolagret_versjon_av_'%0'._Pr\u00b8ver_\u00e5_laste_'%0'_i_stedet.
+
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugins_installert_i_din_brukerspesifikke_pluginkatalog_(%0):
+
+Plugins_installed_in_other_locations\:=Plugins_installert_andre_steder:
+
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=Plugin'ene_vil_bli_slettet_neste_gang_JabRef_starter.
+
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=Plugin'en_vil_bli_slettet_neste_gang_JabRef_starter.
+
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Gamle_versjoner_av_plugins_vil_bli_slettet_neste_gang_JabRef_starter.
+
+Formatter_not_found\:_%0=Fant_ikke_formaterer:_%0
+
+The_following_formatters_could_not_be_found=Fant_ikke_f\u00b8lgende_formaterere
+
+Clear_inputarea=T\u00b8m_inputfelt
+
+Automatically_set_file_links_for_this_entry=Set_fillinker_for_denne_enheten_automatisk
+
+Could_not_save,_file_locked_by_another_JabRef_instance.=Kunne_ikke_lagre,_filen_er_l\u00e5st_av_en_annen_instans_av_JabRef.
+
+File_is_locked_by_another_JabRef_instance.=Filen_er_l\u00e5st_av_en_annen_instans_av_JabRef.
+
+Do_you_want_to_override_the_file_lock?=Vil_du_overstyre_fill\u00e5sen?
+
+File_locked=Filen_er_l\u00e5st
+
+Current_tmp_value=N\u00e5v\u00e6rende_tmp-verdi
+
+Metadata_change=Endring_av_metadata
+
+Changes_have_been_made_to_the_following_metadata_elements=Endringer_er_gjort_for_de_f\u00b8lgende_metadata-elementene
+
+Generate_groups_for_author_last_names=Generer_grupper_for_etternavn_fra_author-feltet
+
+Generate_groups_for_editor_last_names=Generer_grupper_for_etternavn_fra_editor-feltet
+
+Generate_groups_from_keywords_in_a_BibTeX_field=Generer_grupper_fra_n\u00b8kkelord_i_et_BibTeX-felt
+
+Enforce_legal_characters_in_BibTeX_keys=Forby_tegn_i_BibTeX-n\u00b8kler_som_ikke_aksepteres_av_BibTeX
+
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Tegnet_#_er_ikke_tillatt_i_BibTeX-n\u00b8kler_hvis_det_ikke_merkes_med_en_backslash_(#).
+
+Before_saving,_please_edit_any_strings_containing_the_#_character.=F\u00b8r_du_lagrer,_vennligst_rediger_strenger_som_inneholder_tegnet_#.
+
+Save_without_backup?=Lagre_uten_backup?
+
+Unable_to_create_backup=Kan_ikke_lagre_backup?
+
+File_directory_is_not_set_or_does_not_exist.=Filkatalogen_er_ikke_valgt_eller_eksisterer_ikke.
+
+Move_file_to_file_directory.=Flytt_fil_til_filkatalog.
+
+Rename_file_to=Endre_navn_p\u00e5_fil_til
+
+<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>Alle_enheter</b>_(denne_gruppen_kan_ikke_endres_eller_slettes)
+
+static_group=statisk_gruppe
+dynamic_group=dynamisk_gruppe
+refines_supergroup=subset_av_gruppen_over
+includes_subgroups=inkluderer_gruppen_over
+contains=inneholder
+search_expression=s\u00b8keutryk
+
+Disable_file_renaming_in_non-native_file_dialog=Deaktiver_mulighet_for_\u00e5_endre_navn_i_system-fildialog
+
+File_dialog=Fildialog
+
+No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Fant_ingen_enheter._Det_ser_ut_som_om_du_ikke_har_tilgang_til_\u00e5_s\u00b8ke_p\u00e5_JStor.
+
+Search_ScienceDirect=S\u00b8k_ScienceDirect
+
+Error_while_fetching_from_ScienceDirect=Feil_ved_nedlasting_fra_ScienceDirect
+
+Error_initializing_custom_export_format_from_string_'%0'=Feil_ved_initialisering_av_eksternt_eksportfilter_fra_strengen_'%0'
+
+BibLaTeX_mode=BibLaTeX-modus
+
+Optional_fields_2=Valgfrie_felter_2
+
+Please_wait=Vennligst_vent
+
+Waiting_for_save_operation_to_finish=Venter_p\u00e5_lagringsoperasjon
+
+Resolving_duplicate_BibTeX_keys...=S\u00f8k_etter_dupliserte_BibTeX-n\u00f8kler
+
+Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=Fullf\u00f8rte_s\u00f8k_etter_dupliserte_BibTeX-n\u00f8kler._%0_enheter_endret.
+
+This_database_contains_one_or_more_duplicated_BibTeX_keys.=Denne_database_inneholder_en_eller_flere_dupliserte_BibTeX-n\u00f8kler
+
+Do_you_want_to_resolve_duplicate_keys_now?=Vil_du_ordne_opp_i_dupliserte_n\u00f8kler_n\u00e5?
+
+Find_and_remove_duplicate_BibTeX_keys=Finn_og_fjern_dupliserte_BibTeX-n\u00f8kler
+
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=
+
+Duplicate_BibTeX_key=Duplisert_BibTeX-n\u00f8kkel
+
+Duplicate_key=Duplisert_n\u00f8kkel
+
+Generate_key=Generer_n\u00f8kkel
+
+Import_marking_color=Farge_som_markerer_importerte_enheter
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=Fant_%0_enheter._For_\u00e5_redusere_lasten_p\u00e5_serveren_vil_bare_%1_enheter_bli_lastet_ned._Nedlastingen_vil_g\u00e5_langsomt_for_\u00e5_blidgj\u00b8re_ACM.
+
+BibTeX_importer=BibTeX-importerer
+
+Always_add_letter_(a,_b,_...)_to_generated_keys=Legg_alltid_til_en_bokstav_(a,_b,_...)_til_genererte_n\u00f8kler
+
+Ensure_unique_keys_using_letters_(a,_b,_...)=Sikre_unike_n\u00f8kler_ved_bruk_av_bokstaver_(a,_b,_...)
+
+Ensure_unique_keys_using_letters_(b,_c,_...)=Sikre_unike_n\u00f8kler_ved_bruk_av_bokstaver_(b,_c,_...)
+
+Entry_editor_active_background_color=Bakgrunnsfarge_for_aktivt_felt_i_enhetsskjema
+
+Entry_editor_background_color=Bakgrunnsfarge_i_enhetsskjema
+
+Entry_editor_font_color=Tekstfarge_i_enhetsskjema
+
+Entry_editor_invalid_field_color=Bakgrunnsfarge_for_ugyldige_felt_i_enhetsskjema
+
+Table_and_entry_editor_colors=Farger_i_tabell_og_enhetsskjema
+
+An_autosave_file_was_found_for_this_database._This_could_indicate_=En_autolagret_fil_for_denne_databasen_ble_funnet._Dette_kan_indikere_
+
+that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=at_JabRef_ikke_ble_avsluttet_p\u00e5_normalt_vis_da_denne_filen_sist_ble_brukt.
+
+General_file_directory=Standard_filkatalog
+
+User-specific_file_directory=Brukerdefinert_filkatalog
+
+Error_setting_look_and_feel=Feil_ved_endring_av_look_and_feel
+
+Search_failed\:_illegal_search_expression=Kunne_ikke_s\u00f8ke:_feil_i_s\u00f8keuttrykk
+
+Show_ArXiv_column=Vis_ArXiv-kolonne
+
+<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>
+
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Uthev_grupper_som_inneholder_enheter_inneholdt_i_valgte_grupper
+
+You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=Du_m\u00e5_velge_en_heltallsverdi_i_intervallet_1025-65535_i_feltet_for
+
+Automatically_open_browse_dialog_when_creating_new_file_link=\u00c5pne_fildialog_automatisk_n\u00e5r_ny_link_opprettes
+
+Import_Metadata_from\:=Importer_metadata_fra:
+
+Choose_the_source_for_the_metadata_import=Velg_kilde_for_import_av_metadata
+
+Create_entry_based_on_XMP_data=Lag_enhet_basert_p\u00e5_XMP-data
+
+Create_entry_based_on_data_fetched_from=Lag_enhet_basert_p\u00e5_data_hentet_fra
+
+Create_blank_entry_linking_the_PDF=Lag_blank_enhet_med_lenke_til_PDF
+
+Only_attach_PDF=Bare_lenk_til_PDF
+
+Mr._dLib_Metadata_Entries_Associated_With\:=Mr._dLib_metadata-enheter_assosiert_med:
+
+Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr._dLib_metadata-enheter_assosiert_med_PDF-fil
+
+Title=Tittel
+
+Author(s)=Forfatter(e)
+
+Published_Year=Publikasjons\u00e5r
+
+No_metadata_found.=Ingen_metadata_funnet
+
+Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib_webtjeneste_er_for_\u00f8yeblikket_utilgjengelig.
+
+Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib_webtjeneste_er_for_\u00f8yeblikket_utilgjengelig._Vennligst_pr\u00f8v_igjen_senere.
+
+You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Du_er_ikke_koblet_til_internett._En_internettforbindelse_trengs_for_\u00e5_bentytte_Mr._dLib-webtjenesten.
+
+No_Internet_Connection.=Ingen_internettforbindelse
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Denne_versjonen_av_JabRef_fors\u00f8ker_\u00e5_koble_til_en_gammel_versjon_av_Mr._dLib-webtjenesten_som_ikke_lenger_virker.nVennligst_g\u00e5_til_http://jabref.sourceforge.net_eller_http://www.mr-dlib.org_for_mer_informasjon_og_oppdateringer.
+
+Web_Service_Version_Outdated=Utdatert_versjon_av_webtjenesten
+
+The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Versjonen_av_Mr._dLib-webtjenesten_du_fors\u00f8ker_\u00e5_koble_til_er_utdatert.
+
+Update_empty_fields_with_data_fetched_from=Oppdater_tomme_felter_med_data_hentet_fra
+
+Create_New_Entry=Lag_ny_enhet
+
+Update_Existing_Entry=Oppdater_eksisterende_enhet
+
+Mr._dLib=Mr._dLib
+
+More_information=Mer_informasjon
+
+Fetching_Metadata...=Henter_metadata...
+
+Metadata=Metadata
+
+Autocomplete_names_in_'Firstname_Lastname'_format_only=Autokompletter_navn_i_'Fornavn_Etternavn'-format
+
+Autocomplete_names_in_'Lastname,_Firstname'_format_only=Autokompletter_navn_i_'Etternavn,_Fornavn'-format
+
+Autocomplete_names_in_both_formats=Autokompletter_navn_i_begge_format
+
+Marking_color_%0=Markeringsfarge_%0
+
+The_name_'comment'_can_not_be_used_as_an_entry_type_name.=Navnet_'comment'_kan_ikke_brukes_som_navn_p\u00e5_en_enhetstype
+
+You_must_enter_an_integer_value_in_the_text_field_for=Du_m\u00e5_skrive_inn_en_heltallverdi_i_tekstfeltet_for
+
+File_directory=Filkatalog
+
+Send_as_email=Send_som_e-post
+
+References=Referanser
+
+Sending_of_emails=Sending_av_e-post
+
+Subject_for_sending_an_email_with_references=Emne_for_sending_av_e-post_med_referanser
+
+Automatically_open_folders_of_attached_files=\u00c5pne_automatisk_mapper_for_vedlegg
+
+Create_entry_based_on_content=Opprett_enhet_basert_p\u00e5_innhold
+
+Store_choice_as_default=Lagre_valg_som_standard
+
+Do_not_show_this_box_again_for_this_import=Ikke_vis_denne_dialogboksen_igjen_for_denne_importen
+
+Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Alltid_bruk_denne_PDF-importmetoden_(ikke_sp\u00f8r_for_hver_enkelt_import)
+
+Error_creating_email=Feil_ved_opprettelse_av_e-post
+
+Could_not_open_directory=Kunne_ikke_\u00e5pne_mappe
+
+Entries_added_to_an_email=Enheter_lagt_til_en_e-post
+
+exportFormat=Eksportformat
+
+Output_file_missing=Utfil_mangler
+
+No_search_matches.=Ingen_s\u00f8keresultater
+
+The_output_option_depends_on_a_valid_input_option.=Output-innstillingen_krever_en_gyldig_input-innstilling
+
+Default_import_style_for_drag&drop_of_PDFs=Standard_importmetode_for_PDF-filer
+
+Default_PDF_file_link_action=Standardaksjon_for_PDF-fillinker
+
+File_name_format_pattern=M\u00f8nster_for_filnavn
+
+PostgreSQL_database=PostgreSQL-database
+
+DIN_1505=DIN_1505
+Wrong_Format=Feil_format
+
+Path_to_gnuclient_or_emacsclient=Sti_til_gnuclient_eller_emacsclient
+
+Additional_parameters=Ytterligere_parametre
+
+Encrypted_documents_are_not_supported=Krypterte_dokumenter_er_ikke_st\u00f8ttet
+
+Cite_selected_entries=Referer_valgte_enheter
+
+Cite_selected_entries_with_in-text_citation=Referer_valgte_enheter_med_referanse_i_teksten
+
+Cite_special=Referanse_med_ekstra_informasjon
+
+Extra_information_(e.g._page_number)=Ekstra_informasjon_(f.eks._sidenummer)
+
+Manage_citations=Administrer_referanser
+
+Problem_modifying_citation=Det_oppsto_et_problem_ved_endring_av_referansen
+
+Citation=Referanse
+
+Context=Kontekst
+
+Extra_information=Ekstra_informasjon
+
+Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=Kunne_ikke_finne_BibTeX-enhet_for_referansen_'%0'.
+
+Styles=Stiler
+
+Select_style=Velg_stil
+
+This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Dette_er_listen_over_tilgjengelige_stiler._Velg_den_du_\u00f8nsker_\u00e5_bruke.
+
+Journals=Tidsskrifter
+
+Cite=Referer
+
+Cite_in-text=Referer_i_teksten
+
+Insert_empty_citation=Sett_in_tom_referanse
+
+Merge_citations=Sl\u00e5_sammen_referanser
+
+Manual_connect=Manuell_tilkobling
+
+Select_Writer_document=Velg_Writer-dokument
+
+Sync_OO_bibliography=Synkroniser_OO-bibliografi
+
+OpenOffice=OpenOffice
+
+Select_which_open_Writer_document_to_work_on=Velg_hvilket_\u00e5pent_Writer-dokument_du_vil_jobbe_med
+
+Connected_to_document=Koblet_til_dokument
+
+Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Sett_inn_en_referanse_uten_tekst_(enheten_vil_bli_med_i_referanselisten)
+
+Cite_selected_entries_with_extra_information=Referer_valgte_enheter_med_ekstra_informasjon
+
+Ensure_that_the_bibliography_is_up-to-date=S\u00f8rg_for_at_bibliografien_er_oppdatert
+
+Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=OpenOffice-dokumentet_referer_til_BibTeX-n\u00f8kkelen_'%0',_som_ikke_finnes_i_din_aktuelle_database.
+
+Unable_to_synchronize_bibliography=Kunne_ikke_synkronisere_bibliografien
+
+Combine_pairs_of_citations_that_are_separated_by_spaces_only=Sl\u00e5_sammen_par_av_referanser_som_bare_er_adskilt_av_mellomrom
+
+Autodetection_failed=Autodeteksjon_mislyktes
+
+Connecting=Kobler_til
+
+Please_wait...=Vennligst_vent...
+
+Unable_to_connect=Kunne_ikke_koble_til
+
+Set_connection_parameters=Sett_opp_tilkoblingsparametre
+
+Path_to_OpenOffice_directory=Sti_til_OpenOffice-katalog
+
+Path_to_OpenOffice_executable=Sti_til_OpenOffice-startfil
+
+Path_to_OpenOffice_library_dir=Sti_til_OpenOffice-bibliotekkatalog
+
+Autodetect=Autodetekter
+
+Connection_lost=Mistet_forbindelsen
+
+The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Dette_avsnittsformatet_styres_av_innstillingen_'ReferenceParagraphFormat'_eller_'ReferenceHeaderParagraphFormat'_i_stilfilen.
+
+The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Tegnformatet_styres_av_referanseinnstillingen_'CitationCharacterFormat'_i_stilfilen.
+
+Automatically_sync_bibliography_when_inserting_citations=Sykroniser_automatisk_bibliografien_n\u00e5r_nye_referanser_legges_til
+
+Look_up_BibTeX_entries_in_the_active_tab_only=Se_etter_BibTeX-enheter_bare_i_den_aktive_databasen
+
+Look_up_BibTeX_entries_in_all_open_databases=Se_etter_BibTeX-enheter_i_alle_\u00e5pne_databaser
+
+Use_in-parenthesis_citation=Bruk_referanser_i_parentes
+
+Use_in-text_citation=Bruk_referanser_i_teksten
+
+Autodetecting_paths...=Autodetekterer_kataloger
+
+Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=Kunne_ikke_autodetektere_OpenOffice_installasjonen._Vennligst_velg_installasjonskataloger_manuelt.
+
+Could_not_find_OpenOffice_installation=Kunne_ikke_finne_OpenOffice-installasjonen
+
+Directories=Kataloger
+
+Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Fant_mer_enn_en_OpenOffice-startfil._Vennligst_velg_hvilken_du_vil_koble_til:
+
+Choose_OpenOffice_executable=Velg_OpenOffice-startfil
+
+Select_document=Velg_dokument
+
+Edit_Group_Membership=Rediger_gruppetilh\u00f8righet
+
+PostgreSQL=PostgreSQL
+
+Highlight_Words=Fremhev_ord
+
+JSTOR_import_cancelled=JSTOR-import_ble_avbrutt
+
+HTML_list=HTML-liste
+
+Click_group_to_toggle_membership_of_selected_entries=Klikk_p\u00e5_gruppe_for_\u00e5_endre_tilh\u00f8righet_for_de_valgte_enhetene
+
+Use_EMACS_23_insertion_string=Bruk_EMACS-23-innsettingsstreng
+
+Normalize_to_BibTeX_name_format=Normaliser_til_BibTeX-navneformat
+
+If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=Om_mulig,_normaliser_denne_navnelisten_til_standard_BibTeX-navneformatering
+
+Could_not_open_%0=Kunne_ikke_\u00e5pne_%0
+
+Unknown_import_format=Ukjent_importformat
+
+Open_INSPIRE_entry=\u00c5pne_INSPIRE-enhet
+
+
+An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=En_feil_inntraff_ved_nedlasting_fra_INSPIRE_source_(%0):
+
+Error_while_fetching_from_Inspire\:_=Feil_ved_nedlasting_fra_INSPIRE:
+
+Web_search=Webs\u00f8k
+
+Autocomplete_names=Autokompletter_navn
+
+You_must_select_either_a_valid_style_file,_or_use_the_default_style.=Du_m\u00e5_enten_velge_en_gyldig_stilfil_eller_bruke_en_standardstil.
+
+Default_style=Standardstil
+
+Choose_style_file_directly=Velg_en_stilfil_direkte
+
+Choose_from_a_directory=Velg_fra_en_katalog
+
+No_directory_defined_for_%0-files=Ingen_katalog_definert_for_%0-filer
+
+Allow_file_links_relative_to_each_bib_file's_location=Tillat_fillenker_relativt_fra_katalogen_hvor_hver_bib-fil_ligger
+
+Style_selection=Valg_av_stil
+
+The_panel_below_shows_the_definition_of_the_default_style.=Panelet_nedenfor_viser_definisjonen_av_standardstilen.
+
+If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=Hvis_du_vil_bruke_den_som_mal_for_en_ny_stil_kan_du_kopiere_innholdet_til_en_ny_.jstyle-fil
+
+Default_style_(author-year_citations)=Standardstil_(forfatter-\u00e5r-referanser)
+
+Default_style_(numerical_citations)=Standardstil_(nummererte_referanser)
+
+No_valid_style_file_defined=Ingen_gyldig_stilfil_definert
+
+Choose_pattern=Velg_m\u00f8nster
+
+Use_the_bib_file_location_as_primary_file_directory=Bruk_plasseringen_av_bib-filen_som_standard_filkatalog
+
+Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=Kunne_ikke_kalle_gnuclient/emacsclient._Sjekk_at_du_har_programmet_installert_og_tilgjengelig_i_PATH.
+
+Built-in_journal_list=Innebygget_journalliste
+
+OpenOffice/LibreOffice_connection=Kobling_til_OpenOffice/LibreOffice
+
+You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=Du_kan_legge_til_flere_journalnavn_ved_\u00e5_sette_opp_en_personlig_liste,<br>eller_lenke_til_eksterne_lister.
+
+JabRef_includes_a_built-in_list_of_journal_abbreviations.=JabRef_har_en_innebygget_liste_over_journalforkortelser.
+
+You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=Du_m\u00e5_enten_velge_en_gyldig_stilfil_eller_bruke_en_av_standardstilene.
+
+You_must_select_either_a_valid_style_file,_or_use_a_default_style.=Du_m\u00e5_enten_velge_en_gyldig_stilfil_eller_bruke_en_av_standardstilene.
+
+Show=Vis
+
+First_select_entries_to_clean_up.=
+Cleanup_entry=
+Autogenerate_PDF_Names=
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=
+File_rename_failed_for=
+You_have_toggled_the_BibLaTeX_mode.=
+Use_full_firstname_whenever_possible=
+Use_abbreviated_firstname_whenever_possible=
+Use_abbreviated_and_full_firstname=
+Autocompletion_options=
+Autocomplete_after_following_number_of_characters=
+Name_format_used_for_autocompletion=
+Treatment_of_first_names=
+No_icon_found_for_%0=
+Cleanup_entries=
+
+Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
+Format_content_of_month_field_to_#mon#=
+Ensure_that_page_ranges_are_of_the_form_num1--num2=
+Make_paths_of_linked_files_relative_(if_possible)=
+Rename_PDFs_to_given_file_name_format_pattern=
+Rename_only_PDFs_having_a_relative_path=
+What_would_you_like_to_clean_up?=
+Doing_a_cleanup_for_%0_entries...=
+No_entry_needed_a_clean_up=
+One_entry_needed_a_clean_up=
+%0_entries_needed_a_clean_up=
+
+This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=Dette_er_et_enkelt_klipp-og-lim-vindu._F\u00f8rst_last_inn_eller_lim_inn_tekst_i_tekstfeltet.<br>Deretter_kan_du_merke_tekst_og_tilordne_den_til_BibTeX-felter.
+Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=Java_Bouncy_Castle-bibliotek_ikke_tilgjengelig._For_\u00e5_f\u00e5_tilgang_til_dette_kan_du_installere_det._For_mer_informasjon,_se_http://www.bouncycastle.org/.
+
+This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=Denne_funksjonen_genererer_en_ny_database_basert_p\u00e5_hvilke_enheter_som_trengs_i_et_eksisterende_LaTeX-dokument.
+
+You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=Du_m\u00e5_velge_en_av_de_\u00e5pne_databasene_hvor_enheter_skal_hentes_fra,_i_tillegg_til_AUX-filen_generert_av_LaTeX_n\u00e5r_dokumentet_kompileres.
+
+Automatically_assign_new_entry_to_selected_groups=Tilordne_automatisk_nye_enheter_til_valgte_grupper
+
+Error_importing_from_database=Feil_ved_import_fra_database
+
+Incomplete_search_results=Ufullstendig_s\u00f8keresultat
+%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=%0_enheter_ble_funnet,_men_bare_%1_av_disse_kunne_lastes_ned.
+
+Error_downloading_file_'%0'=Feil_ved_nedlasting_av_filen_'%0'
+Download_failed=Nedlsting_mislyktes
+
+%0_databases_will_be_imported=%0_databaser_vil_bli_importert
+Importing_cancelled=Import_avbrutt
+There_are_no_available_databases_to_be_imported=Det_er_ingen_databaser_tilgjengelig_for_import
+Import_from_SQL_database=Import_fra_SQL-database
+Imported_%0_databases_successfully=Importerte_%0_databaser
+<_CREATE_NEW_DATABASE_>=<_OPPRETT_NY_DATABASE_>
+Remove_Selected=Fjern_merkede
+SQL_Database_Exporter=Eksporter_SQL-database
+Select_target_SQL_database\:=Velg_m\u00e5ldatabase\:
+SQL_Database_Importer=Importer_SQL-database
+Please_select_which_JabRef_databases_do_you_want_to_import\:=Vennligst_velg_hvilke_JabRef-databaser_du_vil_importere\:
+
+Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
+Attach_file=
+Imported_=
+Minimize_to_system_tray=
+An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=En_feil_oppsto_under_nedlasting_fra_OIA2_source_(%0):
+
+Setting_all_preferences_to_default_values.=
+Resetting_preference_key_'%0'=
+Unknown_preference_key_'%0'=
+Unable_to_clear_preferences.=
+
+Reset_preferences_(key1,key2,..._or_'all')=
+Find_unlinked_files=
+Select_All=
+Unselect_All=
+Expand_All=
+Collapse_All=
+Select_Directory=
+Choose_Directory=
+Use_the_selected_directory_to_start_with_the_search.=
+Browse...=
+Opens_the_file_browser.=
+Scan_directory=
+Searches_the_selected_directory_for_unlinked_files.=
+Starts_the_import_of_bibtex_entries.=
+Leave_this_dialog.=
+Create_directory_based_keywords=
+Creates_keywords_in_created_entrys_with_directory_pathnames=
+Select_a_directory_where_the_search_shall_start.=
+Select_file_type\:=
+These_files_are_not_linked_in_the_active_database.=
+Entry_type_to_be_created\:=
+Searching_file_system...=
+Importing_into_Database...=
+Select_directory=
+Select_files=
+Bibtex_entry_creation=
+<No_selection>=
+Push_selection_to_TeXstudio=
+Path_to_TeXstudio=
+Program_'%0'_not_found=
+Pushed_citations_to_TeXstudio=
+Unable_to_connect_to_freecite_online_service.=
+Parse_with_FreeCite=
+Insert_selected_citations_into_TeXstudio=
+The_current_BibTeX_key_will_be_overwritten._Continue?=
+Overwrite_key=
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
+An_Error_occurred_while_fetching_from_ADS_(%0)\:=
+Error_while_fetching_from_ADS=
+Error_while_fetching_from_OAI2=
+An_Error_occurred_while_parsing_abstract=
+Unknown_DiVA_entry\:_'%0'.=
+Get_BibTeX_entry_from_DiVA=
+Log=
+Remove_unneccessary_$,_{,_and_}=
diff --git a/src/resource/JabRef_tr.properties b/src/resource/JabRef_tr.properties
index 27ffad4..089e7bf 100644
--- a/src/resource/JabRef_tr.properties
+++ b/src/resource/JabRef_tr.properties
@@ -1,1594 +1,1594 @@
-#!
-#! created/edited by Popeye version 0.55 (https://github.com/koppor/popeye)
-#! encoding:ISO-8859-1
-%0_contains_the_Regular_Expression_<b>%1</b>=%0_\u015fu_D\u00fczenli_\u0130fadeyi_i\u00e7eriyor_<b>%1</b>
-%0_contains_the_term_<b>%1</b>=%0_\u015fu_terimi_i\u00e7eriyor_<b>%1</b>
-%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_\u015fu_D\u00fczenli_\u0130fadeyi_i\u00e7ermiyor_<b>%1</b>
-%0_doesn't_contain_the_term_<b>%1</b>=%0_\u015fu_terimi_i\u00e7ermiyor_<b>%1</b>
-%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_\u015fu_D\u00fczenli_\u0130fadeyle_e\u015fle\u015fmiyor_<b>%1</b>
-%0_doesn't_match_the_term_<b>%1</b>=%0_\u015fu_terimle_e\u015fle\u015fmiyor_<b>%1</b>
-%0_export_successful=%0_d\u0131\u015fa_aktar\u0131m_ba\u015far\u0131l\u0131
-%0_field_set=%0_alan_k\u00fcmesi
-%0_matches_the_Regular_Expression_<b>%1</b>=%0_\u015fu_D\u00fczenli_\u0130fadeyle_e\u015fle\u015fiyor_<b>%1</b>
-%0_matches_the_term_<b>%1</b>=%0_\u015fu_terimle_e\u015fle\u015fiyor_<b>%1</b>
-<field_name>=<alan_ad\u0131>
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>'%1'_girdisinden_ba\u011flant\u0131l\u0131<BR>'%0'_dosyas\u0131_bulunamad\u0131</HTML>
-<no_field>=<alan_yok>
-<select>=<se\u00e7>
-<select_word>=<s\u00f6zc\u00fck_se\u00e7>
-A_string_with_this_label_already_exists=Bu_etikete_sahip_bir_dizgi_zaten_var
-Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Se\u00e7ili_girdilerin_dergi_isimlerini_k\u0131salt_(ISO_k\u0131saltmas\u0131)
-Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Se\u00e7ili_girdilerin_dergi_isimlerini_k\u0131salt_(MEDLINE_k\u0131saltmas\u0131)
-Abbreviate_names=\u0130simleri_k\u0131salt
-Abbreviated_%0_journal_names.=K\u0131salt\u0131lm\u0131\u015f_%0_dergi_isimleri.
-Abbreviation=K\u0131saltma
-About_JabRef=JabRef_Hakk\u0131nda
-Abstract=\u00d6zet
-Accept=Kabul_et
-Accept_change=De\u011fi\u015fikli\u011fi_kabul_et
-Action=Eylem
-Add=Ekle
-Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Bir_s\u0131n\u0131f_yolundan_(derlenmi\u015f)_\u00f6zel_\u0130\u00e7eAlmaBi\u00e7emi_s\u0131n\u0131f\u0131_ekle._\nYolun_JabRef'in_s\u0131n\u0131f_yolunda_olmas\u0131_gerekmez.
-Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Bir_Zip_ar\u015fivinden_(derlenmi\u015f)_\u00f6zel_\u0130\u00e7eAlmaBi\u00e7emi_s\u0131n\u0131f\u0131_ekle._\nYolun_JabRef'in_s\u0131n\u0131f_yolunda_olmas\u0131_gerekmez.
-add_entries_to_group=gruba_girdiler_ekle
-Add_entry_selection_to_this_group=Bu_gruba_girdi_se\u00e7imini_ekle
-Add_from_folder=Klas\u00f6rden_ekle
-Add_from_jar=Jar'dan_ekle
-add_group=grup_ekle
-Add_Group=Grup_Ekle
-Add_new=Yeni_ekle
-Add_Subgroup=Altgrup_ekle
-Add_to_group=Gruba_ekle
-Added_group_"%0".="%0"_grubu_eklendi.
-Added_new=Yeni_eklendi
-Added_string=Dizgi_eklendi
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Ek_olarak,_<b>%0</b>_alanlar\u0131_<b>%1</b>_i\u00e7ermeyen_girdiler_se [...]
-Advanced=Geli\u015fmi\u015f
-All_custom_file_types_will_be_lost._Proceed?=T\u00fcm_\u00f6zelle\u015ftirilmi\u015f_dosya_t\u00fcrleri_yitirilecek._Devam_edilsin_mi?
-All_Entries=T\u00fcm_Girdiler
-All_entries=T\u00fcm_girdiler
-All_entries_of_this_type_will_be_declared_typeless._Continue?=Bu_t\u00fcreden_t\u00fcm_girdiler_t\u00fcrs\u00fcz_olarak_bildirilecek._Devam_edilsin_mi?
-All_fields=T\u00fcm_alanlar
-All_subgroups_(recursively)=T\u00fcm_alt-gruplar_(\u00f6zyinelemeli)
-Allow_editing_in_table_cells=Tablo_h\u00fccrelerinde_d\u00fczenlemeye_izin_ver
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=OA12_kayna\u011f\u0131ndan_al\u0131n\u0131rken_bir_hata_olu\u015ftu_(%0)\:
-An_Exception_ocurred_while_accessing_'%0'='%0''e_eri\u015filirken_bir_istisna_olu\u015ftu
-An_SAXException_ocurred_while_parsing_'%0'\:='%0'_ayr\u0131\u015ft\u0131r\u0131l\u0131rken_bir_SAX\u0130stisnas\u0131_olu\u015ftu:
-and=ve
-and_inside_the_JabRef-jar\:=ve_JabRef-jar'\u0131n_i\u00e7inde\:
-and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=ve_bir_dahaki_sefer_JabRef'i_ba\u015flatt\u0131\u011f\u0131n\u0131zda_s\u0131n\u0131f_s\u0131n\u0131f_yolunuzda_bulunmal\u0131d\u0131r.
-any_field_that_matches_the_regular_expression_<b>%0</b>=<b>%0</b>_d\u00fczenli_ifadesine_uyan_herhangi_bir_alan
-Appearance=G\u00f6r\u00fcn\u00fcm
-Append=Sonuna_ekle
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Bir_BibTeX_veritaban\u0131n\u0131n_i\u00e7eri\u011fini_halen_g\u00f6r\u00fcnt\u00fclenen_veritaban\u0131n\u0131n_sonuna_ekle
-Append_database=Veritaban\u0131n\u0131_sonuna_ekle
-append_the_selected_text_to_bibtex_key=se\u00e7ili_metni_bibtex_anahtar\u0131n\u0131n_sonuna_ekle
-Application=Uygulama
-Apply=Uygula
-Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Arg\u00fcmanlar_\u00e7al\u0131\u015fan_JabRef_oturumuna_aktar\u0131ld\u0131._Kapat\u0131l\u0131yor.
-Assign_entry_selection_exclusively_to_this_group=Girdi_se\u00e7imini_\u00f6zellikle_bu_gruba_ata
-Assign_new_file=Yeni_dosya_ata
-Assign_the_original_group's_entries_to_this_group?=Orijinal_grubun_girdileri_bu_gruba_atans\u0131n_m\u0131?
-Assigned_%0_entries_to_group_"%1".=%0_girdi_"%1"_grubuna_atand\u0131.
-Assigned_1_entry_to_group_"%0".=Bir_girdi_"%0"_grubuna_atand\u0131.
-At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=En_az\u0131ndan_'net.sf.jabref.core'_eklentisi_orada_olmal\u0131.
-Attach_%0_file=%0_dosya_ekle
-Attach_URL=URL_ekle
-Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Girdileriniz_i\u00e7in_%0_link_otokurma_giri\u015fiminde_bulunuluyor._Otokur,_e\u011fer_%0_dizinindeki_ya_da_bir_<BR>_altdizinindeki_%0_dosyas\u0131_bir_BibTeX_anahtar\u0131yla_\u00f6zde\u015f_adland\u0131r\u0131lm\u0131\u015f_art\u0131_uzant\u0131land\u0131l\u0131lm\u0131\u015fsa_\u00e7al\u0131\u015f\u0131r.
-Attempting_SQL_export...=SQL_d\u0131\u015fa_aktar\u0131ma_yelteniliyor...
-Auto=Oto
-Autodetect_format=Bi\u00e7emi_otomatik_tan\u0131
-Autogenerate_BibTeX_key=BibTeX_anahtar\u0131n\u0131_otomatik_olu\u015ftur
-Autogenerate_BibTeX_keys=BibTeX_anahtarlar\u0131n\u0131_otomatik_olu\u015ftur
-Autogenerate_groups=Gruplar\u0131_otomatik_olu\u015ftur
-autogenerate_keys=anahtarlar\u0131_otomatik_olu\u015ftur
-Autolink_files_with_names_starting_with_the_BibTeX_key=Adlar\u0131_BibTeX_anahtar\u0131yla_ba\u015flayan_dosyalar\u0131_otomatik_ba\u011fla
-Autolink_only_files_that_match_the_BibTeX_key=Yaln\u0131zca_BibTeX_anahtar\u0131yla_e\u015fle\u015fen_dosyalar\u0131_otomatik_ba\u011fla
-Automatically_create_groups=Gruplar\u0131_otomatik_olu\u015ftur
-Automatically_create_groups_for_database.=Veritaban\u0131_i\u00e7in_gruplar\u0131_otomatik_olu\u015ftur
-Automatically_created_groups=Otomatik_olu\u015fturulmu\u015f_gruplar
-Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Grup_i\u00e7ermeyen_bir_veritaban\u0131na_ge\u00e7ildi\u011finde_grup_aray\u00fcz\u00fcn\u00fc_otomatik_sakla
-Automatically_remove_exact_duplicates=T\u0131pk\u0131_\u00e7ift_n\u00fcshalar\u0131_otomatik_sil
-Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Grup_i\u00e7eren_bir_veritaban\u0131na_ge\u00e7ildi\u011finde_otomatik_olarak_grup_aaray\u00fcz\u00fcn\u00fc_g\u00f6ster
-Autoset=Otokur
-Autoset_%0_field=%0_alan\u0131n\u0131_otokur
-Autoset_%0_links._Allow_overwriting_existing_links.=%0_linklerini_otokur._Mevcut_linklerin_\u00fczerine_yazmaya_izin_ver.
-Autoset_%0_links._Do_not_overwrite_existing_links.=%0_linklerini_otokur._Mevcut_linklerin_\u00fczerine_yazma.
-Autoset_external_links=Harici_linkleri_otokur
-Autosetting_links=Linkler_otokuruluyor
-AUX_file_import=AUX_dosya_i\u00e7e_aktar\u0131m\u0131
-Available_export_formats=Mevcut_d\u0131\u015fa_aktar\u0131m_bi\u00e7emleri
-Available_fields=Mevcut_alanlar
-Available_import_formats=Mevcut_i\u00e7e_aktar\u0131m_bi\u00e7emleri
-Background_color_for_optional_fields=Se\u00e7meli_alanlar_i\u00e7in_arkaplan_rengi
-Background_color_for_required_fields=Zorunlu_alanlar_i\u00e7in_arkaplan_rengi
-Backup_old_file_when_saving=Kaydederken_eski_dosyay\u0131_yedekle
-Beta_version=Beta_s\u00fcr\u00fcm\u00fc
-Bibkey_to_filename_conversion=Bibkey'den_dosya_ad\u0131na_d\u00f6n\u00fc\u015f\u00fcm
-BibTeX_key=BibTeX_anahtar\u0131
-BibTeX_key_is_unique.=BibTeX_anahtar\u0131_benzersizdir.
-BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX_anahtar\u0131_kurulmad\u0131._\u0130ndirilen_dosya_i\u00e7in_bir_isim_giriniz
-BibTeX_source=BibTeX_kayna\u011f\u0131
-BibTeXML=BibTeXML
-Binding=Cilt
-Broken_link=Bozuk_link
-Browse=G\u00f6z_at
-by=ile
-Calling_external_viewer...=Harici_g\u00f6r\u00fcnt\u00fcleyici_\u00e7a\u011fr\u0131l\u0131yor...
-Cancel=\u0130ptal
-Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Anahtarlar_olu\u015fturulmadan_gruba_girdiler_eklenemez._Anahtarlar_olu\u015fturulsun_mu?
-Cannot_merge_this_change=Bu_de\u011fi\u015fiklik_birle\u015ftirilemiyor
-Cannot_move_group_"%0"_down.="%0"_grubu_a\u015fa\u011f\u0131ya_ta\u015f\u0131nam\u0131yor.
-Cannot_move_group_"%0"_left.="%0"_grubu_sola_ta\u015f\u0131nam\u0131yor.
-Cannot_move_group_"%0"_right.="%0"_grubu_sa\u011fa_ta\u015f\u0131nam\u0131yor.
-Cannot_move_group_"%0"_up.="%0"_grubu_yukar\u0131ya_ta\u015f\u0131nam\u0131yor.
-case_insensitive=b\u00fcy\u00fck/k\u00fc.\u00fck_harfe_duyars\u0131z
-case_sensitive=b\u00fcy\u00fck/k\u00fc\u00e7\u00fck_harfe_duyarl\u0131
-Case_sensitive=B\u00fcy\u00fck/k\u00fc\u00e7\u00fck_harfe_duyarl\u0131
-change_assignment_of_entries=girdilerin_atanmas\u0131n\u0131_de\u011fi\u015ftir
-Change_case=B\u00fcy\u00fck/k\u00fc\u00e7\u00fck_harf_de\u011fi\u015ftir
-Change_entry_type=Girdi_t\u00fcr\u00fcn\u00fc_de\u011fi\u015ftir
-Change_file_type=Dosya_t\u00fcr\u00fcn\u00fc_de\u011fi\u015ftir
-change_key=anahtar_de\u011fi\u015ftir
-Change_of_Grouping_Method=Gruplama_Y\u00f6ntemi_De\u011fi\u015fikli\u011fi
-change_preamble=\u00f6nc\u00fcl\u00fc_de\u011fi\u015ftir
-change_string_content=dizge_i\u00e7eri\u011fini_de\u011fi\u015ftir
-change_string_name=dizge_ad\u0131n\u0131_de\u011fi\u015ftir
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=Yeni_\u00f6zelli\u011fi_kullanmak_i\u00e7in_tablo_s\u00fctun_ve_Genel_alan_ayarlar\u0131n\u0131_de\u011fi\u015ftirin
-change_type=t\u00fcr_de\u011fi\u015ftir
-changed_=de\u011fi\u015fti_
-Changed_font_settings=Font_ayarlar\u0131_de\u011fi\u015fti
-Changed_language_settings=Dil_ayarlar\u0131_de\u011fi\u015fti
-Changed_look_and_feel_settings=G\u00f6r\u00fcn\u00fcm_ve_tema_ayarlar\u0131_de\u011fi\u015fti
-Changed_preamble=\u00d6nc\u00fcl_de\u011fi\u015fti
-Changed_type_to=T\u00fcr_\u015funa_de\u011fi\u015fti
-Characters_to_ignore=Yoksay\u0131lacak_karakterler
-Check_existing_%0_links=Mevcut_%0_linki_kontrol_ediniz
-Check_links=Linkleri_kontrol_ediniz
-Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=\u0130ndirilecek_URL'i_se\u00e7iniz._\u00d6ntan\u0131ml\u0131_de\u011fer_JabRef_geli\u015ftiricilerince_sa\u011flanan_bir_listeye_i\u015faret_eder.
-Cite_command=Al\u0131nt\u0131_komutu
-Class_name=S\u0131n\u0131f_ad\u0131
-Clear=Sil
-clear_all_groups=t\u00fcm_gruplar\u0131_sil
-Clear_field=Alan\u0131_sil
-Clear_fields=Alanlar\u0131_sil
-Clear_highlight=Vurgulamay\u0131_sil
-Close=Kapat
-Close_dialog=Dialo\u011fu_kapat
-Close_the_current_database=G\u00fcncel_veritaban\u0131n\u0131_kapat
-Close_the_help_window=Yard\u0131m_penceresini_kapat
-Close_window=Pencereyi_kapat
-Closed_database=Kapal\u0131_veritaban\u0131
-Collapse_subtree=Alta\u011fac\u0131_daralt
-Color_codes_for_required_and_optional_fields=Zorunlu_ve_se\u00e7meli_alanlar_i\u00e7in_renk_kodlar\u0131
-Color_for_marking_incomplete_entries=Tamamlanmam\u0131\u015f_girdileri_i\u015faretlemek_i\u00e7in_renk
-Column_width=S\u00fctun_geni\u015fli\u011fi
-Command_line_id=Komut_sat\u0131r_no
-Complete_record=Tam_kay\u0131t
-Connect=Ba\u011flan
-Connect_to_SQL_database=SQL_veritaban\u0131na_ba\u011flan
-Connect_to_SQL_Database=SQL_Veritaban\u0131na_ba\u011flan
-Connection_to_IEEEXplore_failed=IEEEXplore'a_ba\u011flant\u0131_ba\u015far\u0131s\u0131z
-Contained_in=\u015eunun_i\u00e7inde
-Content=\u0130\u00e7erik
-Copied=Kopyaland\u0131
-Copied_cell_contents=H\u00fccre_i\u00e7erikleri_kopyaland\u0131
-Copied_key=Kopyalanan_anahtar
-Copied_keys=Kopyalanan_anahtarlar
-Copy=Kopyala
-Copy_BibTeX_key=BibTeX_anahtar\u0131n\u0131_kopyala
-Copy_file_to_file_directory.=Dosyay\u0131_dosya_dizinine_kopyala
-Copy_files_to_file_directory.=Dosyalar\u0131_dosya_dizinine_kopyala
-Copy_to_clipboard=Panoya_kopyala
-Could_not_call_executable=Program_\u00e7a\u011fr\u0131lam\u0131yor
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=\u00c7al\u0131\u015fan_bir_gnuserve_s\u00fcrecine_ba\u011flanam\u0131yor._Emacs_ya_da_XEmacs'\u0131n_\u00e7al\u0131\u015ft\u0131\u011f\u0131na_ve_sunucunun<BR>('gnuserv-start'_komutuyla)_ba\u015flat\u0131ld\u0131\u011f\u0131na_emin_olun.
-Could_not_connect_to_host_=\u015eu_makineye_ba\u011flan\u0131lam\u0131yor_
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Vim_sunucusuna_ba\u011flan\u0131lam\u0131yor._Vim'in_do\u011fru_sunucu_ad\u0131yla<BR>\u00e7al\u0131\u015ft\u0131\u011f\u0131na_emin_olun.
-Could_not_export_file=Dosya_d\u0131\u015fa_aktar\u0131lam\u0131yor
-Could_not_export_preferences=Tercihler_d\u0131\u015fa_aktar\u0131lam\u0131yor
-Could_not_find_a_suitable_import_format.=Uygun_i\u00e7e_aktar\u0131m_bi\u00e7emi_bulunam\u0131yor.
-Could_not_find_directory_for_%0-files\:_%1=%0-dosyalar_i\u00e7in_dizin_bulunam\u0131yor\:_%1
-Could_not_find_image_file=Resim_dosyas\u0131_bulunam\u0131yor
-Could_not_find_layout_file=Yerle\u015fim_dosyas\u0131_bulunam\u0131yor
-Could_not_import_preferences=Tercihler_i\u00e7e_aktar\u0131lam\u0131yor
-Could_not_instantiate_%0=%0_somutla\u015ft\u0131r\u0131lam\u0131yor
-Could_not_instantiate_%0_%1=%0_%1_somutla\u015ft\u0131r\u0131lam\u0131yor
-Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=%0_somutla\u015ft\u0131r\u0131lam\u0131yor._Do\u011fru_paket_yolunu_se\u00e7mi\u015f_miydiniz?
-Could_not_open_link=Link_a\u00e7\u0131lam\u0131yor
-Could_not_parse_number_of_hits=Ula\u015f\u0131lma_say\u0131s\u0131_ayr\u0131\u015ft\u0131r\u0131lam\u0131yor
-Could_not_print_preview=Yazd\u0131rma_\u00f6nizlenemiyor
-Could_not_run_the_'vim'_program.='Vim'_program\u0131_\u00e7al\u0131\u015ft\u0131r\u0131lam\u0131yor.
-Could_not_save_file=Dosya_kaydedilemiyor
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Dosya_kaydedilemiyor._'%0'_karakter_kodlamas\u0131_desteklenmiyor.
-Create_group=Grup_olu\u015ftur
-Created_groups.=Olu\u015fturulmu\u015f_gruplar.
-crossreferenced_entries_included=\u00e7apraz_ba\u011flant\u0131l\u0131_girdiler_dahil_edildi
-Current_content=G\u00fcncel_i\u00e7erik
-Current_value=G\u00fcncel_de\u011fer
-Custom_entry_types=\u00d6zel_girdi_t\u00fcrleri
-Custom_entry_types_found_in_file=Dosyada_\u00f6zel_girdi_t\u00fcrleri_bulundu
-Custom_icon_theme=\u00d6zel_simge_temas\u0131
-Custom_icon_theme_file=\u00d6zel_simge_tema_dosyas\u0131
-Custom_importers=\u00d6zel_i\u00e7e_aktar\u0131c\u0131\u0131lar
-Customize_entry_types=Girdi_t\u00fcrlerini_\u00f6zelle\u015ftir
-Customize_key_bindings=Tu\u015f_ba\u011flant\u0131lar\u0131n\u0131_\u00f6zelle\u015ftir
-Cut=Kes
-cut_entries=girdileri_kes
-cut_entry=girdiyi_kes
-Cut_pr=Kes
-Database_\:=Veritaban\u0131_\:
-Database_encoding=Veritaban\u0131_kodlamas\u0131
-Database_has_changed._Do_you_want_to_save_before_closing?=Veritaban\u0131_de\u011fi\u015fti._Kapatmadan_\u00f6nce_kaydetmek_ister_misiniz?
-Database_properties=Veritaban\u0131_\u00f6zellikleri
-Date_format=Tarih_bi\u00e7emi
-Default=\u00d6ntan\u0131ml\u0131
-Default_encoding=\u00d6ntan\u0131ml\u0131_kodlama
-Default_grouping_field=\u00d6ntan\u0131ml\u0131_gruplama_alan\u0131
-Default_look_and_feel=\u00d6ntan\u0131ml\u0131_g\u00f6r\u00fcn\u00fcm_ve_tema
-Default_pattern=\u00d6ntan\u0131ml\u0131_desen
-Default_sort_criteria=\u00d6ntan\u0131ml\u0131_s\u0131ralama_\u00f6l\u00e7\u00fctleri
-Define_'%0'='%0'i_tan\u0131mla
-Delete=Sil
-Delete_custom_format=\u00d6zel_bi\u00e7emi_sil
-delete_entries=girdileri_sil
-Delete_entry=Girdiyi_sil
-delete_entry=girdiyi_sil
-Delete_multiple_entries=\u00c7ok_say\u0131da_girdiyi_sil
-Delete_rows=Sat\u0131rlar\u0131_sil
-Delete_strings=Dizgeleri_sil
-Deleted=Silindi
-Delimit_fields_with_semicolon,_ex.=Alanlar\u0131_\u00f6r._noktal\u0131_virg\u00fclle_s\u0131n\u0131rland\u0131r
-Descending=Azalan
-Description=Tarif
-Deselect_all=T\u00fcm\u00fcn\u00fcn_se\u00e7imini_kald\u0131r
-Deselect_all_duplicates=T\u00fcm_\u00e7ift_n\u00fcshalar\u0131n_se\u00e7imini_kald\u0131r
-Details=Ayr\u0131nt\u0131lar
-Disable_entry_editor_when_multiple_entries_are_selected=\u00c7ok_say\u0131da_girdi_se\u00e7ildi\u011finde_girdi_d\u00fczenleyicisini_etkisiz_k\u0131l
-Disable_this_confirmation_dialog=Bu_onaylama_penceresini_etkisizle\u015ftir
-Disable_this_warning_dialog=Bu_uyar\u0131_penceresini_etkisizle\u015ftir
-Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Se\u00e7ili_bir_ya_da_daha_fazla_gruba_ait_t\u00fcm_girdileri_g\u00f6ster.
-Display_all_error_messages=T\u00fcm_hata_mesajlar\u0131n\u0131_g\u00f6ster
-Display_help_on_command_line_options=Komut_sat\u0131r\u0131_se\u00e7enekleri_hakk\u0131ndaki_yard\u0131m\u0131_g\u00f6ster
-Display_imported_entries_in_an_inspection_window_before_they_are_added.=\u0130\u00e7e_aktar\u0131lan_girdileri_eklemeden_\u00f6nce_bir_inceleme_penceresinde_g\u00f6ster.
-Display_only_entries_belonging_to_all_selected_groups.=Yaln\u0131zca_se\u00e7ili_t\u00fcm_gruplara_ait_girdileri_g\u00f6ster.
-Display_version=S\u00fcr\u00fcm\u00fc_g\u00f6ster
-Displaying_no_groups=Gruplar_g\u00f6sterilmiyor
-Do_not_abbreviate_names=\u0130simleri_k\u0131saltma
-Do_not_autoset=Otomatik_kurma
-Do_not_import_entry=Girdiyi_i\u00e7e_aktarma
-Do_not_open_any_files_at_startup=Ba\u015flang\u0131\u00e7ta_hi\u00e7bir_dosyay\u0131_a\u00e7ma
-Do_not_overwrite_existing_keys=Mevcut_anahtarlar\u0131n_\u00fczerine_yazma
-Do_not_show_splash_window_at_startup=Ba\u015flang\u0131\u00e7ta_a\u00e7\u0131l\u0131\u015f_penceresini_g\u00f6sterme
-Do_not_show_these_options_in_the_future=Gelecekte_bu_se\u00e7enekleri_g\u00f6sterme
-Do_not_wrap_the_following_fields_when_saving=Kaydederken_a\u015fa\u011f\u0131daki_alanlar\u0131_sarmalama
-Do_not_write_the_following_fields_to_XMP_Metadata\:=A\u015fa\u011f\u0131daki_alanlar\u0131_XMP_Metadata'ya_yazma\:
-Do_you_want_JabRef_to_do_the_following_operations?=JabRef'in_a\u015fa\u011f\u0131daki_i\u015flemleri_yapmas\u0131n\u0131_ister_misiniz?
-DocBook=DocBook
-Down=A\u015fa\u011f\u0131
-Download=\u0130ndir
-Download_completed=\u0130ndrme_tamamland\u0131
-Download_file=Dosya_indir
-Downloading...=\u0130ndiriliyor...
-Drag_and_Drop_Error=S\u00fcr\u00fckle_ve_B\u0131rak_Hatas\u0131
-Drop_%0=%0'i_b\u0131rak
-duplicate_BibTeX_key=\u00e7ift_n\u00fcsha_BibTeX_anahtar\u0131
-Duplicate_BibTeX_key.=\u00c7ift_n\u00fcsha_BibTeX_anahtar\u0131.
-Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=\u00c7ift_n\u00fcsha_BibTeX_anahtar\u0131._Bu_girdi_i\u00e7in_gruplama_\u00e7al\u0131\u015fmayabilir.
-Duplicate_Key_Warning=\u00c7ift_n\u00fcsha_Anahtar_Uyar\u0131s\u0131
-Duplicate_pairs_found=\u00c7ift_n\u00fcsha_\u00e7iftler_bulundu
-duplicate_removal=\u00e7ift_n\u00fcsha_silme
-Duplicate_string_name=\u00c7ift_n\u00fcsha_dizge_ad\u0131
-Duplicates_found=\u00c7ift_n\u00fcshalar_bulundu
-Duplicates_removed=\u00c7ift_n\u00fcshalar_silindi
-Dynamic_groups=Devingen_gruplar
-Dynamically_group_entries_by_a_free-form_search_expression=Serbest_form_arama_ifadesiyle_devingence_grup_girdileri
-Dynamically_group_entries_by_searching_a_field_for_a_keyword=Bir_alan_ya_da_anahtar_s\u00f6zc\u00fck_aramayla_devingence_grup_girdileri
-Each_line_must_be_on_the_following_form=Her_sat\u0131r_a\u015fa\u011f\u0131daki_bi\u00e7imde_olmal\u0131d\u0131r
-Edit=D\u00fczenle
-Edit_custom_export=\u00d6zel_d\u0131\u015fa_aktar\u0131m\u0131_d\u00fczenle
-Edit_entry=Girdiyi_d\u00fczenle
-Edit_file_link=Dosya_linkini_d\u00fczenle
-Edit_file_type=Dosya_t\u00fcr\u00fcn\u00fc_d\u00fczenle
-Edit_group=Grubu_d\u00fczenle
-Edit_journal=Dergiyi_d\u00fczenle
-Edit_preamble=\u00d6nc\u00fcl\u00fc_d\u00fczenle
-Edit_strings=Dizgeleri_d\u00fczenle
-Editor_options=D\u00fczenleyici_se\u00e7enekleri
-empty_BibTeX_key=bo\u015f_BibTeX_anahtar\u0131
-Empty_BibTeX_key.=Bo\u015f_BibTeX_anahtar\u0131.
-Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Bo\u015f_BibTeX_anahtar\u0131._Bu_giri\u015f_i\u00e7in_gruplama_\u00e7al\u0131\u015fmayabilir.
-empty_database=bo\u015f_veritaban\u0131
-Enable_source_editing=Kaynak_d\u00fczenlemesini_etkinle\u015ftir
-Enable_word/name_autocompletion=S\u00f6zc\u00fck/isim_ototamamlamay\u0131_etkinle\u015ftir
-Endnote=Endnote
-Enter_URL=URL_gir
-Enter_URL_to_download=\u0130ndirilecek_URL'yi_girin
-entries=girdiler
-Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Girdiler_elle_bu_gruptan_silinemez_ya_da_bu_gruba_eklenemez.
-Entries_exported_to_clipboard=Girdiler_panoya_aktar\u0131ld\u0131
-entries_have_undefined_BibTeX_key=girdilier_tan\u0131mlanmam\u0131\u015f_BibTeX_anahtar\u0131na_sahipler
-entries_into_new_database=girdiler_yeni_veritaban\u0131na
-entry=girdi
-Entry_editor=Girdi_d\u00fczenleyici
-Entry_in_current_database=Girdi_g\u00fcncel_veritaban\u0131nda
-Entry_in_import=Girdi_i\u00e7e_aktar\u0131lanlar_aras\u0131nda
-Entry_preview=Girdi_\u00f6nizlemesi
-Entry_table=Girdi_tablosu
-Entry_table_columns=Girdi_tablosu_s\u00fctunlar\u0131
-Entry_type=Girdi_t\u00fcr\u00fc
-Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Girdi_t\u00fcr\u00fc_adlar\u0131n\u0131n_bo\u015fluk_ya_da_a\u015fa\u011f\u0131daki_karakterleri_i\u00e7ermesine_izin_verilmez
-Entry_types=Girdi_t\u00fcrleri
-Error=Hata
-Error\:_=Hata\:_
-Error_converting_Bibtex_to_XMP\:_%0=BibTeX'i_XMP'ye_d\u00f6n\u00fc\u015ft\u00fcrmede_hata:_%0
-Error_converting_XMP_to_'%0'...=XMP'yi_'%0'e_d\u00f6n\u00fc\u015ft\u00fcrmede_hata...
-Error_exporting_to_clipboard=Panoya_aktarmada_hata
-Error_in_field=Alanda_hata
-Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Eklenti_sisteminde_hata._Onsuz_ba\u015flat\u0131l\u0131yor,_fakat_baz\u0131_i\u015flevler_eksik_kalabilir.
-Error_occured_when_parsing_entry=Girdi_ayr\u0131\u015ft\u0131r\u0131l\u0131rken_hata_olu\u015ftu
-Error_opening_file=Dosya_a\u00e7mada_hata
-Error_setting_field=Alan_atamada_hata
-Error_while_converting_BibtexEntry_to_XMP_%0=BibTeX'i_XMP'ye_d\u00f6n\u00fc\u015ft\u00fcr\u00fcrken_hata_%0
-Error_while_downloading_file\:=Dosya_indirilirken_hata\:
-Error_while_fetching_from_OIA2=OIA2'den_getirilirken_hata
-Error_while_writing=Yazarken_hata
-Error_writing_to_%0_file(s).=%0_dosya(lar)_yaz\u0131l\u0131rken_hata.
-Error_writing_XMP_to_file\:_%0=XMP_dosyaya_yaz\u0131l\u0131rken_hata\:_%0
-Establishing_SQL_connection...=SQL_ba\u011flant\u0131s\u0131_kuruluyor...
-Exceptions=\u0130stisnalar
-Existing_file=Varolan_dosya
-exists._Overwrite_file?=mevcut._Dosyan\u0131n_\u00fczerine_yaz\u0131ls\u0131n_m\u0131?
-exists._Overwrite?=mevcut.\u00dczerine_yaz\u0131ls\u0131n_m\u0131?
-Expand_subtree=Alta\u011fac\u0131_geni\u015flet
-Export=D\u0131\u015fa_aktar
-Export_name=Ad\u0131_d\u0131\u015fa_aktar
-Export_preferences=Tercihleri_d\u0131\u015fa_aktar
-Export_preferences_to_file=Tercihleri_dosyaya_aktar
-Export_properties=\u00d6zellikleri_d\u0131\u015fa_aktar
-Export_to_clipboard=Panoya_aktar
-Export_to_SQL_database=SQL_veritaban\u0131na_aktar
-Exporting=D\u0131\u015fa_aktar\u0131l\u0131yor
-Extension=Uzant\u0131
-External_changes=Harici_de\u011fi\u015fiklikler
-External_file_links=Harici_dosya_linkleri
-External_files=Harici_dosyalar
-External_programs=Harici_programlar
-External_viewer_called=Harici_g\u00f6r\u00fcnt\u00fcleyici_\u00e7a\u011fr\u0131ld\u0131
-Failed_to_read_groups_data_(unsupported_version\:_%0)=Grup_verisini_okuma_ba\u015far\u0131s\u0131z_(desteklenmeyen_s\u00fcr\u00fcm:_%0)
-Fetch=Getir
-Field=Alan
-field=alan
-Field_content=Alan_i\u00e7eri\u011fi
-Field_name=Alan_ad\u0131
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Alan_adlar\u0131n\u0131n_bo\u015fluk_ya_da_a\u015fa\u011f\u0131daki_karakterleri_i\u00e7ermesine_izin_verilmez
-Field_sizes=Alan_boyutlar\u0131
-Field_to_filter=S\u00fcz\u00fclecek_alan
-Field_to_group_by=Gruplanacak_alan
-Fields=Alanlar
-File=Dosya
-file=dosya
-File_'%0'_is_already_open.='%0'_dosyas\u0131_zaten_a\u00e7\u0131k.
-File_'%0'_not_found='%0'_dosyas\u0131_bulunamad\u0131
-File_changed=Dosya_de\u011fi\u015fti
-File_directory_is_'%0'\:=Dosya_dizini_'%0':
-File_directory_is_not_set_or_does_not_exist!=Dosya_dizini_kurulmad\u0131_ya_da_mevcut_de\u011fil!
-File_download=Dosya_indirme
-File_exists=Dosya_mevcut
-File_extension=Dosya_uzant\u0131s\u0131
-File_has_been_updated_externally._What_do_you_want_to_do?=Dosya_haricen_de\u011fi\u015ftirildi._Ne_yapmak_istersiniz?
-File_not_found=Dosya_bulunamad\u0131
-File_type=Dosya_t\u00fcr\u00fc
-File_updated_externally=Dosya_haricen_g\u00fcncellendi
-filename=dosya_ad\u0131
-Files_opened=A\u00e7\u0131lm\u0131\u015f_dosyalar
-Filter=S\u00fczge\u00e7
-Finished_autosetting_external_links.=Harici_linklerin_otokurulmas\u0131_bitti.
-Finished_synchronizing_%0_links._Entries_changed%c_%1.=%0_linkin_e\u015fzamanlamas\u0131_bitti._De\u011fi\u015fen_girdiler%c_%1.
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=XMP_metadata_yaz\u0131m\u0131_bitti._%0_dosyaya_yaz\u0131ld\u0131.
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=%0_dosya_i\u00e7in_XMP_yaz\u0131m\u0131_bitti_(%1_atland\u0131,_%2_hata).
-First_select_the_entries_you_want_keys_to_be_generated_for.=\u00d6nce_anahtar_olu\u015fturulmas\u0131n\u0131_istedi\u011finiz_girdileri_se\u00e7iniz.
-Fit_table_horizontally_on_screen=Tabloyu_ekrana_yatay_s\u0131\u011fd\u0131r
-Float=Y\u00fczd\u00fcr
-Float_marked_entries=Y\u00fczd\u00fcr_i\u015faretlenmi\u015f_girdiler
-Font_Family=Yaz\u0131tipi_Ailesi
-Font_Preview=Yaz\u0131tipi_\u00d6nizleme
-Font_Size=Yaz\u0131tipi_Boyutu
-Font_Style=Yaz\u0131tipi_Stili
-FontSelector=Yaz\u0131tipiSe\u00e7ici
-for=i\u00e7in
-Format_of_author_and_editor_names=Yazar_ve_d\u00fczenleyici_adlar\u0131_bi\u00e7emi
-Format_String=Dizgeyi_Bi\u00e7imle
-Format_used=Kullan\u0131lan_bi\u00e7em
-Formatter_Name=Bi\u00e7imleyici_Ad\u0131
-Formatter_not_found=Bi\u00e7imleyici_bulunamad\u0131
-found=bulundu
-Found_%0_plugin(s)=%0_eklenti_bulundu
-found_in_aux_file=yard\u0131mc\u0131_dosyada_bulundu
-Full_name=Tam_ad
-General=Genel
-General_fields=Genel_alanlar
-Generate=Olu\u015ftur
-Generate_BibTeX_key=BibTeX_anahtar\u0131_olu\u015ftur
-Generate_keys=Anahtarlar\u0131_olu\u015ftur
-Generate_keys_before_saving_(for_entries_without_a_key)=(Anahtars\u0131z_girdiler_i\u00e7in)_Kaydetmeden_\u00f6nce_anahtarlar\u0131_olu\u015ftur
-Generate_keys_for_imported_entries=\u0130\u00e7e_aktar\u0131lan_girdiler_i\u00e7in_anahtarlar\u0131_olu\u015ftur
-Generate_now=\u015eimdi_olu\u015ftur
-Generated_BibTeX_key_for=\u015eunun_i\u00e7in_BibTex_anahtar\u0131_olu\u015fturuldu
-Generating_BibTeX_key_for=\u015eunun_i\u00e7in_BibTeX_anahtar\u0131_olu\u015fturuluyor
-Grab=Yakala
-Gray_out_entries_not_in_group_selection=Grup_se\u00e7iminde_olmayan_girdileri_grile\u015ftir
-Gray_out_non-hits=\u0130sabet_almayanlar\u0131_grile\u015ftir
-Gray_out_non-matching_entries=E\u015fle\u015fmeyen_girdileri_grile\u015ftir
-Group_properties=Grup_\u00f6zellikleri
-grouping_may_not_work_for_this_entry=bu_girdi_i\u00e7in_gruplama_\u00e7al\u0131\u015fmayabilir
-Groups=Gruplar
-Harvard_RTF=Harvard_RTF
-Have_you_chosen_the_correct_package_path?=Do\u011fru_paket_yolunu_se\u00e7tiniz_mi?
-Help=Yard\u0131m
-Help_contents=Yard\u0131m_i\u00e7eri\u011fi
-Help_on_groups=Gruplar_hakk\u0131nda_yard\u0131m
-Help_on_key_patterns=Tu\u015f_desenleri_hakk\u0131nda_yard\u0131m
-Help_on_Preview_Settings=\u00d6nizleme_Ayarlar\u0131_hakk\u0131nda_yard\u0131m
-Help_on_Regular_Expression_Search=D\u00fczenli_\u0130fade_Arama_hakk\u0131nda_yard\u0131m
-Hide_non-hits=\u0130sabet_almayanlar\u0131_sakla
-Hide_non-matching_entries=E\u015fle\u015fmeyen_girdileri_sakla
-Hierarchical_context=Hiyerar\u015fik_i\u00e7erik
-Highlight=Vurgula
-Highlight_groups_matching_all_selected_entries=T\u00fcm_se\u00e7ili_girdilerle_e\u015fle\u015fen_gruplar\u0131_vurgula
-Highlight_groups_matching_any_selected_entry=Herhangi_bir_se\u00e7ili_girdiyle_e\u015fle\u015fen_gruplar\u0131_vurgula
-Highlight_overlapping_groups=\u00d6rt\u00fc\u015fen_gruplar\u0131_vurgula
-Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=\u0130pucu%c_Yaln\u0131zca_belirli_alanlar\u0131_aramak_i\u00e7in,_\u00f6rne\u011fin_\u015funu_giriniz%c<p><tt>author%esmith_and_title%eelectrical</tt>
-HTML=HTML
-HTML_table=HTML_tablosu
-HTML_table_(with_Abstract_&_BibTeX)=(\u00d6zet_&_BibTeX_ile)_HTML_tablosu
-Icon=Simge
-Ignore=Yoksay
-Immediate_subgroups=Bir_sonraki_altgruplar
-Import=\u0130\u00e7e_aktar
-Import_and_keep_old_entry=\u0130\u00e7e_aktar_ve_eski_girdiyi_koru
-Import_and_remove_old_entry=Eski_girdiyi_i\u00e7e_aktar_ve_sil.
-Import_entries=Girdileri_i\u00e7e_aktar
-Import_failed=\u0130\u00e7e_aktarma_ba\u015far\u0131s\u0131z
-Import_file=Dosya_i\u00e7e_aktar
-Import_group_definitions=Grup_tan\u0131mlar\u0131n\u0131_i\u00e7e_aktar
-Import_name=\u0130sim_i\u00e7e_aktar
-Import_preferences=\u0130\u00e7e_aktarma_tercihleri
-Import_preferences_from_file=Dosyadan_i\u00e7e_aktarma_tercihleri
-Import_strings=Dizgeleri_i\u00e7e_aktar
-Import_to_open_tab=Sekme_a\u00e7mak_i\u00e7in_i\u00e7e_aktar
-Import_word_selector_definitions=S\u00f6zc\u00fck_se\u00e7ici_tan\u0131mlar\u0131n\u0131_i\u00e7e_aktar
-Imported_database=\u0130\u00e7e_aktar\u0131lm\u0131\u015f_veritaban\u0131
-Imported_entries=\u0130\u00e7e_aktar\u0131lm\u0131\u015f_girdiler
-Imported_from_database=Veritaban\u0131ndan_i\u00e7e_aktar\u0131lm\u0131\u015f
-ImportFormat_class=ImportFormat_s\u0131n\u0131f\u0131
-Importing=\u0130\u00e7e_aktar\u0131l\u0131yor
-Importing_in_unknown_format=Bilinmeyen_bi\u00e7emde_i\u00e7e_aktar\u0131l\u0131yor
-In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=JabRef'de_bir_dizge_belirtmek_i\u00e7in_#_karakter_\u00e7ifti_kullan\u0131n.
-Include_abstracts=\u00d6zetleri_i\u00e7er
-Include_entries=Alanlar\u0131_i\u00e7er
-Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Altgruplar\u0131_i\u00e7er\:_Se\u00e7ildi\u011finde,_bu_grup_ya_da_altgruplar\u0131ndaki_girdileri_g\u00f6ster
-Incremental=Art\u0131\u015fl\u0131
-Incremental_search=Art\u0131\u015fl\u0131_arama
-Incremental_search_failed._Repeat_to_search_from_top.=Art\u0131\u015fl\u0131_arama_ba\u015far\u0131s\u0131z._En_ba\u015ftan_aramak_i\u00e7in_yineleyin.
-Independent_group\:_When_selected,_view_only_this_group's_entries=Ba\u011f\u0131ms\u0131z_grup\:_Se\u00e7ildi\u011finde,_yaln\u0131zca_bu_grubun_girdilerini_g\u00f6ster
-Initially_show_groups_tree_expanded=Ba\u015flang\u0131\u00e7ta_grup_a\u011fac\u0131n\u0131_geni\u015fletilmi\u015f_g\u00f6ster
-Input=\u00c7al\u0131\u015fma_se\u00e7enekleri
-Input_error=Girdi_hatas\u0131
-Insert=Ekle
-Insert_rows=Sat\u0131r_ekle
-Insert_selected_citations_into_LyX/Kile=Se\u00e7ili_al\u0131nt\u0131lar\u0131_LyX/Kile'a_ekle
-Insert_selected_citations_into_WinEdt=Se\u00e7ili_al\u0131nt\u0131lar\u0131_WinEdt'e_ekle
-insert_string_=dizge_ekle
-Insert_URL=URL_ekle
-integrity=b\u00fct\u00fcnl\u00fck
-Integrity_check=b\u00fct\u00fcnl\u00fck_kontrol\u00fc
-Intersection=Kesi\u015fim
-Invalid_BibTeX_key=Ge\u00e7ersiz_BibTeX_anahtar\u0131
-Invalid_date_format=Ge\u00e7ersiz_tarih_bi\u00e7emi
-Invalid_URL=Ge\u00e7ersiz_URL
-Inverted=Ters_\u00e7evrilmi\u015f
-is_a_standard_type.=bir_standart_t\u00fcrd\u00fcr.
-ISO_abbreviation=ISO_k\u0131saltmas\u0131
-Item_list_for_field=Alan_i\u00e7in_\u00f6\u011fe_listesi
-jabref=jabref
-JabRef_help=JabRef_yard\u0131m
-JabRef_preferences=JabRef_tercihler
-Journal_abbreviations=Dergi_k\u0131saltmalar\u0131
-Journal_list_preview=Dergi_listesi_\u00f6nizleme
-Journal_name=Dergi_ad\u0131
-Keep=Tut
-Keep_both=\u0130kisini_de_tut
-Keep_lower=Alt\u0131ndakileri_tut
-Keep_upper=\u00dcst\u00fcndekileri_tut
-Key_bindings=Anahtar_ba\u011flant\u0131lar\u0131
-Key_bindings_changed=Anahtar_ba\u011flant\u0131lar\u0131_de\u011fi\u015fti
-Key_generator_settings=Anahtar_olu\u015fturucu_ayarlar\u0131
-Key_pattern=Anahtar_deseni
-keys_in_database=veritaban\u0131ndaki_anahtarlar
-Keyword=Anahtar_s\u00f6zc\u00fck
-Label=Etiket
-Language=Dil
-Last_modified=Son_de\u011fi\u015ftirme
-LaTeX_AUX_file=LaTex_AUX_dosyas\u0131
-Leave_file_in_its_current_directory.=Dosyay\u0131_\u015fimdiki_dizininde_b\u0131rak.
-Leave_files_in_their_current_directory.=Dosyalar\u0131_\u015fimdiki_dizinlerinde_b\u0131rak.
-Left=Sol
-License=Lisans
-Limit_to_fields=Alanlara_k\u0131s\u0131tla
-Limit_to_selected_entries=Se\u00e7ili_girdilere_k\u0131s\u0131tla
-Link=Link
-Link_local_file=Yerel_dosyay\u0131_ba\u011fla
-Link_to_file_%0=%0_dosyas\u0131na_ba\u011fla
-Listen_for_remote_operation_on_port=Ba\u011flant\u0131_noktas\u0131ndaki_uzak_i\u015flemi_dinle
-Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Ba\u015flang\u0131\u00e7ta_tercihleri_jabref.xml'den_y\u00fckle_ya_da_buraya_kaydet_(bellek_\u00e7ubu\u011fu_kipi)
-Load_session=Oturumu_y\u00fckle
-Loading_session...=Oturum_y\u00fckleniyor...
-localhost=yerel_makine
-Look_and_feel=G\u00f6r\u00fcn\u00fcm_ve_tema
-Looking_for_pdf...=pdf_aran\u0131yor...
-lower=k\u00fc\u00e7\u00fck
-Main_file_directory=Ana_dosya_dizini
-Main_layout_file=Ana_yerle\u015fim_dosyas\u0131
-Main_PDF_directory=Ana_PDF_dizini
-Main_PS_directory=Ana_PS_dizini
-Manage=Y\u00f6net
-Manage_custom_exports=\u00d6zel_d\u0131\u015fa_aktar\u0131mlar\u0131_y\u00f6net
-Manage_custom_imports=\u00d6zel_i\u00e7e_aktar\u0131mlar\u0131_y\u00f6net
-Manage_external_file_types=Harici_dosya_t\u00fcrlerini_y\u00f6net
-Manage_journal_abbreviations=Degi_k\u0131saltmalar\u0131n\u0131_y\u00f6net
-Mark_entries=Girdileri_i\u015faretle
-Mark_entry=Girdiyi_i\u015faretle
-Mark_new_entries_with_addition_date=Yeni_girdileri_ekleme_tarihiyle_i\u015faretle
-Mark_new_entries_with_owner_name=Yeni_girdileri_sahip_ad\u0131yla_i\u015faretle
-Marked_selected=Se\u00e7ililer_i\u015faretlendi
-Memory_Stick_Mode=Bellek_\u00c7ubu\u011fu_Kipi
-Menu_and_label_font_size=Men\u00fc_ve_etiket_yaz\u0131_tipi_boyutu
-Merged_external_changes=Harici_de\u011fi\u015fiklikler_birle\u015ftirildi
-Messages=Mesajlar
-Messages_and_Hints=Mesajlar_ve_\u0130pu\u00e7lar\u0131
-Modification_of_field=Alan\u0131n_de\u011fi\u015fikli\u011fi
-Modified_group_"%0".=De\u011fi\u015ftirilmi\u015f_grup_"%0".
-Modified_groups=De\u011fi\u015ftirilmi\u015f_gruplar
-Modified_string=De\u011fi\u015ftirilmi\u015f_dizge
-Modify=De\u011fi\u015ftir
-modify_group=grubu_de\u011fi\u015ftir
-MODS=K\u0130PLER
-Move=Ta\u015f\u0131
-Move_down=A\u015fa\u011f\u0131_ta\u015f\u0131
-Move_entries_in_group_selection_to_the_top=Grup_se\u00e7imindeki_girdileri_en_\u00fcste_ta\u015f\u0131
-Move_external_links_to_'file'_field=Harici_linkleri_'dosya'_alan\u0131na_ta\u015f\u0131
-Move_files_to_file_directory.=Dosyalar\u0131_dosya_dizinine_ta\u015f\u0131
-move_group=grubu_ta\u015f\u0131
-Move_string_down=Dizgeyi_a\u015fa\u011f\u0131_ta\u015f\u0131
-Move_string_up=Dizgeyi_yukar\u0131_ta\u015f\u0131
-Move_up=Yukar\u0131_ta\u015f\u0131
-Moved_group_"%0".="%0"_grubu_ta\u015f\u0131nd\u0131.
-MS_Office_2007=MS_Office_2007
-MySQL=MySQL
-MySQL_database=MySQL_veritaban\u0131
-Name=Ad
-Name_formatter=Ad_bi\u00e7emleyici
-Natbib_style=Natbib_stili
-nested_aux_files=i\u00e7i\u00e7e_aux_dosyalar\u0131
-New=Yeni
-new=yeni
-New_BibTeX_database=Yeni_BibTeX_veritaban\u0131
-New_BibTeX_entry=Yeni_BibTeX_girdisi
-New_BibTeX_subdatabase=Yeni_BibTeX_alt_veritaban\u0131
-New_content=Yeni_i\u00e7erik
-New_database_created.=Yeni_veritaban\u0131_olu\u015fturuldu.
-New_field_value=Yeni_alan_de\u011feri
-New_file=Yeni_dosya
-New_file_link_(INSERT)=Yeni_dosya_linki_(INSERT)
-New_group=Yeni_grup
-New_string=Yeni_dizge
-Next_entry=Yeni_girdi
-No_%0_found=%0_bulunamad\u0131
-No_actual_changes_found.=Hi\u00e7_fiili_de\u011fi\u015fiklik_bulunamad\u0131.
-no_base-bibtex-file_specified=temel_BibTeX_dosyas\u0131_belirtilmedi
-no_database_generated=veritaban\u0131_\u00fcretilmedi
-No_duplicates_found=Hi\u00e7_\u00e7ift_n\u00fcsha_bulunmad\u0131
-No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Girdi_bulunmad\u0131._L\u00fctfen_do\u011fru_i\u00e7e_aktarma_s\u00fczgecini_kulland\u0131\u011f\u0131n\u0131zdan_emin_olun.
-No_entries_found_for_the_search_string_'%0'=Arama_dizgesi_'%0'_i\u00e7in_bir_girdi_bulunmad\u0131
-No_entries_imported.=Hi\u00e7bir_girdi_i\u00e7e_aktar\u0131lmad\u0131.
-No_entries_or_multiple_entries_selected.=Ya_hi\u00e7bir_girdi_se\u00e7ilmedi_ya_da_birden_\u00e7ok_girdi_se\u00e7ildi.
-No_entries_selected=Hi\u00e7bir_girdi_se\u00e7ilmedi
-No_entries_selected.=Hi\u00e7bir_girdi_se\u00e7ilmedi.
-No_exceptions_have_ocurred.=Hi\u00e7bir_istisna_olu\u015fmad\u0131.
-No_files_found.=Hi\u00e7bir_dosya_bulunmad\u0131.
-No_GUI._Only_process_command_line_options.=Grafik_kullan\u0131c\u0131_aray\u00fcz\u00fc_yok._Yaln\u0131zca_komut_sat\u0131r\u0131_se\u00e7enekleri_i\u015flenecek.
-No_journal_names_could_be_abbreviated.=Hi\u00e7bir_dergi_ad\u0131_k\u0131salt\u0131lamad\u0131.
-No_journal_names_could_be_unabbreviated.=Hi\u00e7bir_dergi_ad\u0131_k\u0131saltmas\u0131_a\u00e7\u0131lamad\u0131.
-No_PDF_linked=Hi\u00e7bir_PDF_ba\u011flanmam\u0131\u015f
-No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Hi\u00e7bir_pdf_ya_da_ps_tan\u0131mlanmam\u0131\u015f,_BibTeX_anahtar\u0131na_uyan_dosya_bulunamad\u0131
-No_plugins_were_found_in_the_following_folders\:=\u015eu_klas\u00f6rlerde_hi\u00e7bir_eklenti_bulunamad\u0131\:
-No_references_found=Hi\u00e7bir_ba\u015fvuru_bulunamad\u0131
-No_saved_session_found.=Hi\u00e7bir_kaydedilmi\u015f_oturum_bulunmad\u0131.
-No_url_defined=Hi\u00e7_url_tan\u0131mlanmam\u0131\u015f
-No_XMP_metadata_found_in_=Burada_hi\u00e7_XMP_metaverisi_bulunamad\u0131_
-not=hari\u00e7
-not_found=bulunmad\u0131
-Not_saved_(empty_session)=Kaydedilmedi_(bo\u015f_oturum)
-Note_that_the_entry_causing_the_problem_has_been_selected.=Soruna_yol_a\u00e7an_girdinin_se\u00e7ildi\u011fini_farkediniz.
-Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=G\u00f6r\u00fcn\u00fcm_ve_temalar_i\u00e7in_tam_kalifiye_s\u0131n\u0131f_ad\u0131n\u0131_belirtmelisiniz,
-Nothing_to_redo=Yinelenecek_bir_\u015fey_yok
-Nothing_to_undo=Geriye_al\u0131nacak_bir_\u015fey_yok
-Number_of_references_to_fetch?=Getirilecek_ba\u015fvuru_say\u0131s\u0131?
-occurences=g\u00f6r\u00fclme_s\u0131kl\u0131\u011f\u0131
-OK=Tamam
-Ok=Tamam
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Bir_ya_da_daha_\u00e7ok_link,_tan\u0131mlanmam\u0131\u015f_'%0'_t\u00fcr\u00fcnde._Ne_yapmak_istersiniz?
-One_or_more_keys_will_be_overwritten._Continue?=Bir_ya_da_daha_\u00e7ok_anahtar\u0131n_\u00fczerine_yaz\u0131lacak._Devam_edilsin_mi?
-Only_one_item_is_supported=Yaln\u0131zca_bir_\u00f6\u011fe_destekleniyor
-Open=A\u00e7
-Open_BibTeX_database=BibTeX_veritaban\u0131_a\u00e7
-Open_database=Veritaban\u0131_a\u00e7
-Open_editor_when_a_new_entry_is_created=Yeni_bir_girdi_olu\u015fturuldu\u011funda_d\u00fczenleyiciyi_a\u00e7
-Open_file=Dosya_a\u00e7
-Open_last_edited_databases_at_startup=A\u00e7\u0131l\u0131\u015fta_son_d\u00fczenlenmi\u015f_veritabanlar\u0131n\u0131_a\u00e7
-Open_PDF_or_PS=PDF_ya_da_PS_a\u00e7
-Open_right-click_menu_with_Ctrl+left_button=Sa\u011f_t\u0131klama_men\u00fcs\u00fcn\u00fc_Ctrl+sol_tu\u015fla_a\u00e7
-Open_URL_or_DOI=URL_ya_da_DOI_a\u00e7
-OpenDocument_Spreadsheet=OpenDocument_Hesap_tablosu
-Opened_database=A\u00e7\u0131k_veritaban\u0131
-Opening=A\u00e7\u0131l\u0131yor
-Opening_preferences...=Tercihler_a\u00e7\u0131l\u0131yor...
-OpenOffice_Calc=OpenOffice_Calc
-OpenOffice_CSV=OpenOffice_CSV
-Operation_canceled.\n=\u0130\u015flem_iptal_edildi.\n
-Operation_not_supported=\u0130\u015flem_desteklenmiyor
-Optional_fields=Tercihe_ba\u011fl\u0131_alanlar
-Options=Se\u00e7enekler
-or=ya_da
-out_of=t\u00fcm\u00fc
-Output=\u00c7\u0131kt\u0131
-Output_or_export_file=\u00c7\u0131kt\u0131_ya_da_d\u0131\u015fa_aktar\u0131m_dosyas\u0131
-Override=Ge\u00e7ersiz_k\u0131l
-Override_default_file_directories=\u00d6ntan\u0131ml\u0131_dosya_dizinlerini_ge\u00e7ersiz_k\u0131l
-Override_default_font_settings=\u00d6ntam\u0131nl\u0131_yaz\u0131tipi_ayarlar\u0131n\u0131_ge\u00e7ersiz_k\u0131l
-override_the_bibtex_key_by_the_selected_text=BibTeX_anahtar\u0131n\u0131_se\u00e7ili_metinle_yenile
-Overwrite=\u00dczerine_yaz
-Overwrite_existing_field_values=Mevcut_alan_de\u011ferlerinin_\u00fczerine_yaz
-Overwrite_keys=Anahtarlar\u0131n_\u00fczerine_yaz
-pairs_processed=i\u015flenmi\u015f_\u00e7iftler
-Password_\:=Parola_\:
-Paste=Yap\u0131\u015ft\u0131r
-paste_entries=girdileri_yap\u0131\u015ft\u0131r
-paste_entry=girdiyi_yap\u0131\u015ft\u0131r
-Paste_from_clipboard=Panodan_yap\u0131\u015ft\u0131r
-Pasted=Yap\u0131\u015ft\u0131r\u0131ld\u0131
-Path_to_%0_not_defined=%0'in_yolu_tan\u0131mlanmam\u0131\u015f
-Path_to_LatexEditor_(LEd.exe)=LatexEditor'\u00fcn_(LEd.exe)_yolu
-Path_to_LyX_pipe=LyX_hatt\u0131n\u0131n_yolu
-Path_to_Vim=Vim'in_yolu
-Path_to_WinEdt.exe=WinEdt.exe'nin_yolu
-PDF_directory=PDF_dizini
-PDF_does_not_exist=PDF_mevcut_de\u011fil
-Personal_journal_list=Ki\u015fisel_dergi_listesi
-Plain_text_import=D\u00fcz_metin_i\u00e7e_aktarma
-Please_check_your_network_connection_to_this_machine.=L\u00fctfen_bu_makinenin_a\u011f_ba\u011flant\u0131s\u0131n\u0131_kontrol_ediniz.
-Please_enter_a_name_for_the_group.=L\u00fctfen_grup_i\u00e7in_bir_isim_giriniz.
-Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=L\u00fctfen_bir_arama_terimi_giriniz._\u00d6rne\u011fin,_<b>Smith</b>'i_t\u00fcm_alanlarda_aramak_i\u00e7in_%c<p><tt>smith</tt><p>_giriniz._<b>Smith</b>'i_<b>Author</b>_alan\u0131nda,_<b>electrical</b>'\u0131_<b>Title</b>_alan\u0 [...]
-Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=L\u00fctfen_aranacak_alan_ad\u0131n\u0131_(\u00f6rne\u011fin_<b>keywords</b>)_ve_aranacak_anahtar_s\u00f6zc\u00fc\u011f\u00fc_(\u00f6rne\u011fin_<b>electrical</b>)_giriniz.
-Please_enter_the_string's_label=L\u00fctfen_dizgenin_etiketini_giriniz
-Please_select_an_importer=L\u00fctfen_bir_i\u00e7e_aktar\u0131c\u0131_se\u00e7iniz
-Please_select_an_importer.=L\u00fctfen_bir_i\u00e7e_aktar\u0131c\u0131_se\u00e7iniz.
-Please_select_exactly_one_group_to_move.=L\u00fctfen_ta\u015f\u0131mak_i\u00e7in_yaln\u0131zca_bir_grup_se\u00e7iniz.
-Please_specify_the_=L\u00fctfen_\u015funu_belirleyiniz_
-Possible_duplicate_entries=Olas\u0131_\u00e7ift_n\u00fcsha_girdiler
-Possible_duplicate_of_existing_entry._Click_to_resolve.=Mevcut_girdinin_olas\u0131_\u00e7ift_n\u00fcshas\u0131._D\u00fczeltmek_i\u00e7in_t\u0131klay\u0131n\u0131z.
-Preamble=\u00d6nc\u00fcl
-Preferences=Tercihler
-Preferences_recorded.=Tercihler_kaydedildi.
-Preview=\u00d6nizleme
-Previous_entry=\u00d6nceki_girdi
-Primary_sort_criterion=Birincil_s\u0131ralama_kriteri
-Print_Preview=Yazd\u0131rma_\u00d6nizleme
-Printing_Entry_Preview=Girdi_\u00d6nizleme_Yazd\u0131r\u0131l\u0131yor
-Problem_with_parsing_entry=Girdi_ayr\u0131\u015ft\u0131rmada_sorun
-Processing_=\u0130\u015fleniyor_
-Program_output=Program_\u00e7\u0131kt\u0131s\u0131
-PS_directory=PS_dizini
-Push_entries_to_external_application_(%0)=Girdileri_harici_uygulamaya_itele_(%0)
-Push_selection_to_Emacs=Se\u00e7imi_Emacs'a_itele
-Push_selection_to_LyX/Kile=Se\u00e7imi_LyX/Kile'a_itele
-Push_selection_to_Vim=Se\u00e7imi_Vim'e_itele
-Push_selection_to_WinEdt=Se\u00e7imi_WinEdt'e_itele
-Push_to_LatexEditor=Se\u00e7imi_LatexEditor'e_itele
-Pushed_citations_to_%0=Al\u0131nt\u0131lar_%0'a_itelendi
-Pushed_citations_to_Emacs=Al\u0131nt\u0131lar_Emacs'a_itelendi
-Pushed_citations_to_Vim=Al\u0131nt\u0131lar_Vim'e_itelendi
-Pushed_citations_to_WinEdt=Al\u0131nt\u0131lar_WinEdt'e_itelendi
-Pushed_the_citations_for_the_following_rows_to=Takip_eden_sat\u0131rlardaki_al\u0131nt\u0131lar_\u015furaya_itelendi
-Quit_JabRef=JabRef'ten_\u00e7\u0131k
-Quit_synchronization=E\u015fzamanlamay\u0131_bitir
-Raw_source=Ham_kaynak
-Really_delete_the_selected=Se\u00e7ileni_ger\u00e7ekten_sil
-Rearrange_tabs_alphabetically_by_title=Sekmeleri_ba\u015fl\u0131klar\u0131yla_alfabetik_olarak_yeniden_d\u00fczenle
-Redo=Yeniden_yap
-Reference_database=Ba\u015fvuru_veritaban\u0131
-References_found=Bulunan_ba\u015fvurular
-Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Supergrubu_ar\u0131t\:_Se\u00e7ildi\u011finde,_hem_bu_grubun,_hem_de_s\u00fcpergrubunun_i\u00e7erdi\u011fi_girdileri_g\u00f6r\u00fcnt\u00fcle
-Refresh_view=G\u00f6r\u00fcn\u00fcm\u00fc_tazele
-Regular_Expression=D\u00fczenli_\u0130fade
-Remember_these_entry_types?=Bu_girdi_t\u00fcrlerini_an\u0131msa?
-Remote_operation=Uzak_i\u015flem
-Remote_server_port=Uzak_sunucu_ba\u011flant\u0131_noktas\u0131
-Remove=Sil
-Remove_all?=T\u00fcm\u00fcn\u00fc_sil?
-Remove_all_subgroups=T\u00fcm_altgruplar\u0131_sil
-Remove_all_subgroups_of_"%0"?="%0"in_t\u00fcm_altgruplar\u0131n\u0131_sil?
-Remove_double_braces_around_BibTeX_fields_when_loading.=Y\u00fcklerken_BibTeX_alanlar\u0131_\u00e7evresindeki_\u00e7ift_k\u00fcme_parantezlerini_sil.
-Remove_duplicates=\u00c7ift_n\u00fcshalar\u0131_sil
-Remove_entry_from_import=\u0130\u00e7e_aktar\u0131mdan_girdiyi_sil
-Remove_entry_selection_from_this_group=Bu_gruptan_girdi_se\u00e7imini_sil
-Remove_entry_type=Girdi_t\u00fcr\u00fcn\u00fc_sil
-Remove_file_link_(DELETE)=Dosya_linkini_sil_(DELETE)
-remove_from_group=gruptan_sil
-Remove_from_group=Gruptan_sil
-Remove_group=Grubu_sil
-Remove_group,_keep_subgroups=Grubu_sil,_altgruplar\u0131_tut
-Remove_group_"%0"?="%0"_grubu_silinsin_mi?
-Remove_group_"%0"_and_its_subgroups?="%0"_grubu_ve_altgruplar\u0131_silinsin_mi?
-remove_group_(keep_subgroups)=grubu_sil_(altgruplar\u0131_tut)
-remove_group_and_subgroups=grubu_ve_altgruplar\u0131_sil
-Remove_group_and_subgroups=Grubu_ve_altgruplar\u0131_sil
-Remove_link=Linki_sil
-Remove_old_entry=Eski_girdiyi_sil
-Remove_selected_strings=Se\u00e7ili_dizgeleri_sil
-remove_string_=dizgeyi_sil_
-Removed_group_"%0".="%0"_grubu_silindi.
-Removed_group_"%0"_and_its_subgroups.="%0"_grubu_ve_altgruplar\u0131_silindi.
-Removed_string=Dizge_silindi
-Renamed_string=Dizge_yeniden_adland\u0131r\u0131ld\u0131
-Replace=Yerine_koy
-Replace_(regular_expression)=Yerine_koy_(d\u00fczenli_ifade)
-Replace_string=Dizgenin_yerine_koy
-Replace_with=\u015eununla_de\u011fi\u015ftir
-Replaced=De\u011fi\u015ftirildi
-Required_fields=Zorunlu_alanlar
-Reset_all=T\u00fcm\u00fcn\u00fc_s\u0131f\u0131rla
-Reset_file_type_definitons=Dosya_t\u00fcr\u00fc_tan\u0131mlar\u0131n\u0131_s\u0131f\u0131rla
-Resolve_strings_for_all_fields_except=\u015eu_hari\u00e7_t\u00fcm_alanlar\u0131n_dizgelerini_\u00e7\u00f6z\u00fcmle
-Resolve_strings_for_standard_BibTeX_fields_only=Yaln\u0131zca_standart_BibTeX_alan_dizgelerini_\u00e7\u00f6z\u00fcmle
-resolved=\u00e7\u00f6z\u00fcmlendi
-Results=Sonu\u00e7lar
-Revert_to_original_source=Orijinal_kayna\u011fa_d\u00f6nd\u00fcr
-Review=G\u00f6zden_ge\u00e7ir
-Review_changes=De\u011fi\u015fklikleri_incele
-Right=Sa\u011f
-root=k\u00f6k
-Save=Kaydet
-Save_all_finished.=T\u00fcm_bitenleri_kaydet.
-Save_all_open_databases=T\u00fcm_a\u00e7\u0131k_veritabanlar\u0131n\u0131_kaydet
-Save_before_closing=Kapatmadan_\u00f6nce_kaydet
-Save_database=Veritaban\u0131n\u0131_kaydet
-Save_database_as_...=Veritaban\u0131n\u0131_farkl\u0131_kaydet_...
-Save_entries_in_their_original_order=Girdileri_orijinal_s\u0131ralar\u0131nda_kaydet
-Save_failed=Kaydetme_ba\u015far\u0131s\u0131z
-Save_failed_during_backup_creation=Yedek_olu\u015fturulurken_kaydetme_ba\u015far\u0131s\u0131z
-Save_failed_while_committing_changes=De\u011fi\u015fiklikler_uygulan\u0131rken_kaydetme_ba\u015far\u0131s\u0131z
-Save_ordered_by_author/editor/year=Kaydetme_yazar/edit\u00f6r/y\u0131l_\u015feklinde_s\u0131raland\u0131
-Save_selected_as_...=Se\u00e7imi_farkl\u0131_kaydet_...
-Saved_database=Kaydedilmi\u015f_veritaban\u0131
-Saved_selected_to=Se\u00e7im_\u015furaya_kaydedildi
-Saved_session=Kaydedilmi\u015f_oturum
-Saving=Kaydediliyor
-Saving_all_databases...=T\u00fcm_veritabanlar\u0131_kaydediliyor...
-Saving_database=Veritaban\u0131_kaydediliyor
-Scan=Tara
-Search=Ara
-Search_All_Fields=T\u00fcm_Alanlarda_Ara
-Search_all_fields=T\u00fcm_alanlarda_ara
-Search_error=Arama_hatas\u0131
-Search_expression=\u0130fade_ara
-Search_for=\u015eunu_ara
-Search_general_fields=Genel_alanlarda_ara
-Search_IEEEXplore=IEEEXplore'da_ara
-Search_IEEExplore=IEEExplore'da_ara
-Search_optional_fields=Se\u00e7meli_alanlarda_ara
-Search_required_fields=Zorunlu_alanlarda_ara
-Search_Specified_Field(s)=Belirtlimi\u015f_Alan(lar)da_Ara
-Searched_database._Global_number_of_hits=Veritaban\u0131_arand\u0131._K\u00fcresel_ula\u015f\u0131lma_say\u0131s\u0131
-Searched_database._Number_of_hits=Veritaban\u0131_arand\u0131._Ula\u015f\u0131lma_say\u0131s\u0131
-Searching_for_%0_file=%0_dosyas\u0131_aran\u0131yor
-Searching_for_duplicates...=\u00c7ift_n\u00fcshalar_aran\u0131yor...
-Searching_for_files=Dosyalar_aran\u0131yor
-Secondary_sort_criterion=\u0130kincil_s\u0131ralama_kriteri
-Select=Se\u00e7
-Select_a_Zip-archive=Bir_Zip-ar\u015fivi_se\u00e7
-Select_action=Eylem_se\u00e7
-Select_all=T\u00fcm\u00fcn\u00fc_se\u00e7
-Select_Classpath_of_New_Importer=Yeni_\u0130\u00e7e_Aktar\u0131c\u0131n\u0131n_S\u0131n\u0131fyolunu_se\u00e7
-Select_encoding=Kodlamay\u0131_se\u00e7
-Select_entries_in_group_selection=Grup_se\u00e7imindeki_girdileri_se\u00e7
-Select_entry_type=Girdi_t\u00fcr\u00fcn\u00fc_se\u00e7
-Select_external_application=Harici_uygulamay\u0131_se\u00e7
-Select_file_from_ZIP-archive=ZIP_ar\u015fivinden_dosyay\u0131_se\u00e7iniz
-Select_format=Bi\u00e7emi_se\u00e7iniz
-Select_icon=Simgeyi_se\u00e7iniz
-Select_matches=E\u015fle\u015fenleri_se\u00e7iniz
-Select_new_ImportFormat_Subclass=Yeni_\u0130\u00e7e_Aktar\u0131m_Bi\u00e7emi_Alts\u0131n\u0131f\u0131n\u0131_se\u00e7iniz
-Select_the_tree_nodes_to_view_and_accept_or_reject_changes=De\u011fi\u015fiklikleri_g\u00f6rmek_ve_kabul_ya_da_reddetmek_i\u00e7in_a\u011fa\u00e7_d\u00fc\u011f\u00fcmlerini_se\u00e7iniz
-Selected_entries=Se\u00e7ili_girdiler
-Selector_enabled_fields=Se\u00e7icinin_etkili_k\u0131l\u0131nd\u0131\u011f\u0131_alanlar
-Server_Hostname_\:=Sunucu_Makine_ad\u0131_\:
-Server_Type_\:=Sunucu_T\u00fcr\u00fc_\:
-Set_field=Alan\u0131_ata
-Set_fields=Alanlar\u0131_ata
-Set_general_fields=Genel_alanlar\u0131_ata
-Set_main_external_file_directory=Ana_harici_dosya_dizinini_ayarla
-Set_table_font=Tablo_yaz\u0131tipini_ayarla
-Settings=Ayarlar
-Setup_selectors=Kurma_se\u00e7icileri
-Short_form=K\u0131sa_form
-Shortcut=K\u0131sayol
-Show/edit_BibTeX_source=BibTeX_kayna\u011f\u0131n_g\u00f6ster/d\u00fczenle
-Show_'Firstname_Lastname'='Ad_Soyad'_g\u00f6ster
-Show_'Lastname,_Firstname'='Soyad,_Ad'_g\u00f6ster
-Show_BibTeX_source_by_default=\u00d6ntan\u0131ml\u0131_olarak_BibTeX_kayna\u011f\u0131n\u0131_g\u00f6ster
-Show_BibTeX_source_panel=BibTeX_kaynak_panelini_g\u00f6ster
-Show_confirmation_dialog_when_deleting_entries=Girdileri_silerken_onaylama_ileti\u015fim_penceresini_g\u00f6ster
-Show_description=A\u00e7\u0131klamay\u0131_g\u00f6ster
-Show_dynamic_groups_in_<i>italics</i>=Dinamik_gruplar\u0131_<i>italik</i>_bi\u00e7imde_g\u00f6ster
-Show_entries_*not*_in_group_selection=Girdileri_grup_se\u00e7iminde_g\u00f6ster*me*
-Show_file_column=Dosya_s\u00fctununu_g\u00f6ster
-Show_icons_for_groups=Gruplar_i\u00e7in_simgeler_g\u00f6ster
-Show_last_names_only=Yaln\u0131zca_soyadlar\u0131_g\u00f6ster
-Show_names_unchanged=Adlar\u0131_de\u011fi\u015ftirmeden_g\u00f6ster
-Show_one_less_rows=Bir_sat\u0131r_az_g\u00f6ster
-Show_one_more_row=Bir_sat\u0131r_fazla_g\u00f6ster
-Show_optional_fields=Se\u00e7meli_alanlar\u0131_g\u00f6ster
-Show_PDF/PS_column=PDF/PS_s\u00fctununu_g\u00f6ster
-Show_required_fields=Zorunlu_alanlar\u0131_g\u00f6ster
-Show_URL/DOI_column=URL/DOI_s\u00fctununu_g\u00f6ster
-Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Yinelenen_bir_BibTeX_anahtar\u0131_girildi\u011finde_uyar\u0131_ileti\u015fim_penceresini_g\u00f6ster
-Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Bo\u015f_bir_BibTeX_anahtar\u0131_girildi\u011finde_uyar\u0131_ileti\u015fim_penceresini_g\u00f6ster
-Simple_HTML=Basit_HTML
-Size=Boyut
-Skip=Atla
-Skipped_-_No_PDF_linked=Atland\u0131_-_PDF_eklenmedi
-Skipped_-_PDF_does_not_exist=Atland\u0131_-_PDF_mevcut_de\u011fil
-Skipped_entry.=Girdi_atland\u0131.
-Sort_alphabetically=Alfabetik_s\u0131rala
-Sort_Automatically=Otomatik_s\u0131rala
-Sort_order=S\u0131ralama_d\u00fczeni
-sort_subgroups=altgruplar\u0131_s\u0131rala
-Sorted_all_subgroups_recursively.=T\u00fcm_altgruplar_\u00f6zyineli_s\u0131raland\u0131.
-Sorted_immediate_subgroups.=En_yak\u0131n_altgruplar_s\u0131raland\u0131.
-source_edit=kaynak_d\u00fczenle
-Special_Name_Formatters=\u00d6zel_Ad_Bi\u00e7emleyicileri
-Special_table_columns=\u00d6zel_tablo_s\u00fctunlar\u0131
-SQL_connection_established.=SQL_ba\u011flant\u0131s\u0131_kuruldu.
-Start_incremental_search=Art\u0131\u015fl\u0131_arama_ba\u015flat
-Start_search=Arama_ba\u015flat
-Starting_import=\u0130\u00e7e_aktar\u0131m_ba\u015flat\u0131l\u0131yor
-Statically_group_entries_by_manual_assignment=Elle_atanm\u0131\u015f_dura\u011fan_grup_girdileri
-Status=Durum
-Stop=Dur
-Store_journal_abbreviations=Dergi_k\u0131saltmalar\u0131n\u0131_depola
-Store_string=Dizgeyi_depola
-Store_the_following_fields_with_braces_around_capital_letters=A\u015fa\u011f\u0131daki_alanlar\u0131_b\u00fcy\u00fck_harflerin_etraf\u0131nda_k\u00fcme_parantezleriyle_depola
-Stored_entry=Depolanm\u0131\u015f_girdi
-Strings=Dizgeler
-Strings_for_database=Veritaban\u0131_i\u00e7in_dizgeler
-Subdatabase_from_aux=Yard\u0131mc\u0131dan_(aux)_altveritaban\u0131
-Suggest=\u00d6ner
-Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Dergi_ad\u0131_biliniyorsa_tam_ve_k\u0131salt\u0131lm\u0131\u015f_dergi_ad\u0131_aras\u0131nda_ge\u00e7i\u015f_yapar.
-Synchronize_%0_links=%0_linki_e\u015fzamanla
-Synchronize_file_links=Dosya_linklerini_e\u015fzamanla
-Synchronizing_%0_links...=%0_link_e\u015fzamanlan\u0131yor...
-Table_appearance=Tablo_g\u00f6r\u00fcn\u00fcm\u00fc
-Table_background_color=Tablo_arkaplan_rengi
-Table_grid_color=Tablo_klavuz_\u00e7izgileri_rengi
-Table_text_color=Tablo_metni_rengi
-Tabname=Sekmead\u0131
-Target_file_cannot_be_a_directory.=Hedef_dosya_bir_dizin_olamaz.
-Tertiary_sort_criterion=\u00dc\u00e7\u00fcnc\u00fcl_s\u0131ralama_\u00f6l\u00e7\u00fct\u00fc
-Test=Deneme
-Text_Input_Area=Metin_Girdi_Alan\u0131
-The_#_character_is_not_allowed_in_BibTeX_fields=BibTeX_alanlar\u0131nda_#_karakteri_kullan\u0131lam\u0131yor
-The_chosen_date_format_for_new_entries_is_not_valid=Yeni_girdiler_i\u00e7in_se\u00e7ilen_tarih_bi\u00e7emi_ge\u00e7ersiz
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Se\u00e7ilen_'%0'_kodlamas\u0131_\u015fu_karakterleri_kodlayam\u0131yor\:
-The_CiteSeer_fetch_operation_returned_zero_results.=CiteSeerX_getirme_i\u015flemi_s\u0131f\u0131r_sonu\u00e7la_d\u00f6nd\u00fc.
-The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=Mevcut_s\u00fcr\u00fcm_harici_dosya_linklerini_i\u015flemede_yeni_bir_yolu_\u00f6n_plana_\u00e7\u0131kar\u0131yor.<br>Bundan_yararlanmak_i\u00e7in,_linklerinizin_yeni_bi\u00e7eme_de\u011fi\u015ftirilmesi_gerekiyor,_ve<br>JabRef'in_de_yeni_linkleri_g\u00f6sterecek_\u015fekilde_ayarl [...]
-the_field_<b>%0</b>=alan_<b>%0</b>
-The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Dosya<BR>'%0'<BR><BR>harici_olarak_de\u011fi\u015ftirildi!
-The_group_"%0"_already_contains_the_selection.="%0"_grubu_se\u00e7imi_zaten_kaps\u0131yor.
-The_label_of_the_string_can_not_be_a_number.=Dizgenin_etiketi_bir_numara_olamaz.
-The_label_of_the_string_can_not_contain_spaces.=Dizgenin_etiketi_bo\u015fluk_i\u00e7eremez.
-The_label_of_the_string_can_not_contain_the_'#'_character.=Dizgenin_etiketi_'#'_karakterini_i\u00e7eremez.
-The_output_option_depends_on_a_valid_import_option.=\u00c7\u0131kt\u0131_se\u00e7ene\u011fi_ge\u00e7erli_bir_i\u00e7e_aktar\u0131m_se\u00e7ene\u011fine_ba\u011fl\u0131d\u0131r.
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=PDF,_bir_ya_da_daha_fazla_BibTeX_kayd\u0131_i\u00e7eriyor.\nBunlar\u0131_mevcut_veritabann\u0131na_yeni_girdiler_olarak_aktarmak_ister_misiniz?
-The_regular_expression_<b>%0</b>_is_invalid%c=D\u00fczenli_ifade_<b>%0</b>_ge\u00e7ersiz%c
-The_search_is_case_insensitive.=Arama_b\u00fcy\u00fck/k\u00fc\u00e7\u00fck_harfe_duyars\u0131z.
-The_search_is_case_sensitive.=Arama_b\u00fcy\u00fck/k\u00fc\u00e7\u00fck_harfe_duyarl\u0131.
-The_string_has_been_removed_locally=Dizge_yerel_olarak_silindi
-There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=\u00c7\u00f6z\u00fcmlenmemi\u015f,_olas\u0131_\u00e7ift_n\u00fcshalar_mevcut_('D'_simgesiyle_i\u015faretlenmi\u015f)._Devam_edilsin_mi?
-this_button_will_update=bu_d\u00fc\u011fme_g\u00fcncelleyecek
-This_database_was_written_using_an_older_version_of_JabRef.=Bu_veritaban\u0131_eski_bir_JabRef_s\u00fcr\u00fcm\u00fcyle_yaz\u0131lm\u0131\u015f.
-This_entry_has_no_BibTeX_key._Generate_key_now?=Bu_girdinin_BibTeX_anahtar\u0131_yok._\u015eimdi_olu\u015fturulsun_mu?
-This_entry_is_incomplete=Girdi_eksik
-This_entry_type_cannot_be_removed.=Bu_girdi_t\u00fcr\u00fc_silinemiyor.
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Bu_harici_link,_tan\u0131mlanmam\u0131\u015f_'%0'_t\u00fcr\u00fcndendir._Ne_yapmak_istersiniz?
-This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Bu_grup,_elle_atanm\u0131\u015f_girdiler_i\u00e7eriyor._Bu_gruba_girdiler_se\u00e7ilip_ya_s\u00fcr\u00fckleyip_b\u013 [...]
-This_group_contains_entries_in_which=Bu_grup,_i\u00e7inde_\u015funlar_olan_girdileri_i\u00e7erir
-This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Bu_grup,_herhangi_bir_alan\u0131__<b>%0</b>_d\u00fczenli_ifadesini_i\u00e7eren_girdileri_i\u00e7erir
-This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Bu_grup,_herhangi_bir_alan\u0131__<b>%0</b>_terimini_i\u00e7eren_girdileri_i\u00e7erir
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Bu_grup,_<b>%0</b>_alan\u0131_<b>%1</b>_anahtar_s\u00f6zc\u00fc\u011f\u00fcn\u00fc_i\u00e7eren_girdileri_i\u00e7erir
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Bu_grup,_<b>%0</b>_alan\u0131_<b>%1</b>_d\u00fczenli_ifadesini_i\u00e7eren_girdileri_i\u00e7erir
-This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Bu,_normal_metinden_baz\u0131_alanlar\u0131_i\u00e7e_aktarmak_i\u00e7in_basit_bir_kopyala_yap\u0131\u015ft\u0131r_ileti\u015fim_penceresidir.
-This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Bu,_JabRef'in_her_%0_linki_bulup_dosyan\u0131n_var_olup_olmad\u0131\u011f\u0131n\u0131_kontrol_etmesini_sa\u011flar._E\u011fer_yoksa,_sorunu<BR>\u00e7\u00f6zmek_i\u00e7in_se\u00e7enekler_sunulacakt\u0131r.
-This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Bu_i\u015flem,_t\u00fcm_se\u00e7ili_girdilerin_tan\u0131ml\u0131_BibTex_anahtarlar\u0131n\u0131n_olmas\u0131n\u0131_gerektirir.
-This_operation_requires_at_least_one_entry.=Bu_i\u015flem_en_az_bir_girdi_gerektirir.
-This_operation_requires_one_or_more_entries_to_be_selected.=Bu_i\u015flem,_bir_ya_da_daha_\u00e7ok_girdinin_se\u00e7ili_olmas\u0131n\u0131_gerektirir.
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Bu,_'pdf'_ve_'ps'_alanlar\u0131ndaki_t\u00fcm_harici_linkleri_'%0'_alan\u0131na_ta\u015f\u0131yacakt\u0131r._Devam_edilsin_mi?
-To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Kurmak_i\u00e7in_<B>Ara\u00e7lar_->Dergi_k\u0131saltmalar\u0131n\u0131_y\u00f6net'e_gidiniz</B>
-Toggle_abbreviation=K\u0131saltmay\u0131_a\u00e7/kapat
-Toggle_entry_preview=Girdi_\u00f6nizlemeyi_a\u00e7/kapat
-Toggle_groups_interface=Grup_aray\u00fcz\u00fcn\u00fc_a\u00e7/kapat
-Toggle_search_panel=Arama_panelini_a\u00e7/kapat
-Try_different_encoding=Ba\u015fka_kodlama_deneyin
-Type_set_to_'other'=T\u00fcr,_'di\u011fer'_olarak_atand\u0131
-Unabbreviate_journal_names_of_the_selected_entries=Se\u00e7ili_girdilerin_dergi_adlar\u0131n\u0131_k\u0131saltma
-Unabbreviated_%0_journal_names.=%0_dergi_ad\u0131_k\u0131saltmas\u0131_kald\u0131r\u0131ld\u0131.
-unable_to_access_LyX-pipe=Lyx_veriyoluna_girilemiyor
-Unable_to_create_graphical_interface=Grafik_aray\u00fcz_olu\u015fturulamad\u0131
-Unable_to_open_file.=Dosya_a\u00e7\u0131lamad\u0131.
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Link_a\u00e7\u0131lamad\u0131._'%1'_dosya_t\u00fcr\u00fcyle_ili\u015fkili_'%0'_uygulamas\u0131_\u00e7a\u011fr\u0131lamad\u0131.
-Unable_to_read_default_icon_theme.=\u00d6ntan\u0131ml\u0131_simge_temas\u0131_okunamad\u0131.
-Unable_to_read_icon_theme_file=Simge_temas\u0131_dosyas\u0131_okunamad\u0131
-unable_to_write_to=\u015euraya_yaz\u0131lamad\u0131
-Undefined_file_type=Tan\u0131mlanmam\u0131\u015f_dosya_t\u00fcr\u00fc
-Undo=Geriye_al
-Union=Bile\u015fim
-Unknown_bibtex_entries=Bilinmeyen_BibTeX_girdileri
-unknown_edit=bilinmeyen_d\u00fczenleme
-unknown_entry_type=bilinmeyen_girdi_t\u00fcr\u00fc
-Unknown_export_format=Bilinmeyen_d\u0131\u015fa_aktar\u0131m_bi\u00e7emi
-Unmark_all=T\u00fcm\u00fcn\u00fcn_i\u015faretini_kald\u0131r
-Unmark_entries=Girdilerin_i\u015faretini_kald\u0131r
-Unmark_entry=Girdinin_i\u015faretini_kald\u0131r
-Unmarked_selected=Se\u00e7ililerin_i\u015faretini_kald\u0131r
-Unpack_EndNote_filter_set=EndNote_s\u00fczge\u00e7_k\u00fcmesinin_paketini_a\u00e7
-Unpacked_file.=Dosya_paketi_a\u00e7\u0131ld\u0131.
-Unsupported_version_of_class_%0\:_%1=%0_s\u0131n\u0131f\u0131n\u0131n_desteklenmeyen_s\u00fcr\u00fcm\u00fc:_%1
-untitled=ba\u015fl\u0131ks\u0131z
-Up=Yukar\u0131
-Update_to_current_column_widths=Mevcut_s\u00fctun_geni\u015fliklerine_g\u00fcncelle
-Updated_group_selection=Grup_se\u00e7imi_g\u00fcncellendi
-Upgrade_external_links=Harici_linkleri_yeni_s\u00fcr\u00fcme_y\u00fckselt
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Harici_PDF/PS_linklerini_'%0'_alan\u0131n\u0131_kullanmak_\u00fczere_yeni_s\u00fcr\u00fcme_y\u00fckselt.
-Upgrade_file=Dosyay\u0131_yeni_s\u00fcr\u00fcme_y\u00fckselt
-Upgrade_old_external_file_links_to_use_the_new_feature=Eski_harici_dosya_linklerini_yeni_\u00f6zelli\u011fi_kullanmak_\u00fczere_yeni_s\u00fcr\u00fcme_y\u00fckselt
-Upgraded_links.=Linkler_yeni_s\u00fcr\u00fcme_y\u00fckseltildi.
-UPPER=DAHA_\u00dcSTTE
-Upper_Each_First=Daha_\u00dcstteki_Her_Birinci
-Upper_first=Daha_\u00fcstteki_\u00f6nce
-usage=kullan\u0131m
-Use_antialiasing_font=\u00d6rt\u00fc\u015fme-\u00f6nler_yaz\u0131tipi_kullan
-Use_autocompletion_for_the_following_fields=A\u015fa\u011f\u0131daki_alanlar_i\u00e7in_otomatik_tamamlamay\u0131_kullan
-Use_custom_icon_theme=\u00d6zel_simge_temas\u0131_kullan
-Use_default_viewer=\u00d6ntan\u0131ml\u0131_g\u00f6r\u00fcnt\u00fcleyiciyi_kullan
-Use_inspection_window_also_when_a_single_entry_is_imported.=Tek_bir_girdi_i\u00e7e_aktar\u0131l\u0131rken_de_inceleme_penceresi_kullan.
-Use_native_file_dialog=Yerli_dosya_ileti\u015fim_penceresini_kullan
-Use_other_look_and_feel=Di\u011fer_g\u00f6r\u00fcn\u00fcm_ve_tema_kullan
-Use_Regular_Expression_Search=D\u00fczenli_\u0130fade_Aramay\u0131_kullan
-Use_regular_expressions=D\u00fczenli_ifadeleri_kullan
-Use_the_following_delimiter_character(s)=A\u015fa\u011f\u0131daki_s\u0131n\u0131rlay\u0131c\u0131_karakter(ler)i_kullan
-Username_\:=Kullan\u0131c\u0131_ad\u0131_\:
-Value_cleared_externally=De\u011fer,_haricen_silindi
-Value_set_externally=De\u011fer,_haricen_atand\u0131
-verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=LyX'in_\u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131_ve_veri_ileti\u015fim_hatt\u0131n\u0131n_ge\u00e7erli_oldu\u011funu_teyid_edin
-View=G\u00f6r\u00fcnt\u00fcle
-Vim_Server_Name=Vim_Sunucu_Ad\u0131
-Waiting_for_ArXiv...=ArXiv_bekleniyor...
-Warn_about_unresolved_duplicates_when_closing_inspection_window=\u0130nceleme_penceresi_kapan\u0131rken_\u00e7\u00f6z\u00fclmemi\u015f_\u00e7ift_n\u00fcshalar_hakk\u0131nda_uyar
-Warn_before_overwriting_existing_keys=Mevcut_anahtarlar\u0131n_\u00fczerine_yazmadan_\u00f6nce_uyar
-Warning=Uyar\u0131
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Uyar\u0131\:_dosya_onar\u0131m\u0131_tamamlanamad\u0131;_dosyan\u0131z_bozuk_olabilir._Hata_mesaj\u0131
-Warning_there_is_a_duplicate_key=Uyar\u0131!_Bir_anahtardan_\u00e7ift_n\u00fcsha_var
-Warnings=Uyar\u0131lar
-web_link=sanaldoku_linki
-What_do_you_want_to_do?=Ne_yapmak_istersiniz?
-When_adding/removing_keywords,_separate_them_by=Anahtar_s\u00f6zc\u00fck_ekler/\u00e7\u0131kar\u0131rken,_onlar\u0131_\u015f\u00f6yle_ay\u0131r\u0131n
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Se\u00e7ili_girdilerle_ba\u011flant\u0131l\u0131_PDFlere_XMP_metaverisi_yaz\u0131lacak.
-with=ile
-Word=S\u00f6zc\u00fck
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=BibtexGirdisi'ni_PDF'ye_XMP-metaverisi_olarak_yaz.
-Write_XMP=XMP'yi_yaz
-Write_XMP-metadata=XMP-metaverisini_yaz
-Write_XMP-metadata_for_all_PDFs_in_current_database?=Mevcut_veritaban\u0131ndaki_t\u00fcm_PFDlere_XMP-metaverisi_yaz\u0131ls\u0131n_m\u0131?
-Writing_XMP=XMP_yaz\u0131l\u0131yor
-Writing_XMP_metadata...=XMP_metaverisi_yaz\u0131l\u0131yor...
-Writing_XMP_metadata_for_selected_entries...=Se\u00e7ili_girdiler_i\u00e7in_XMP_metaverisi_yaz\u0131l\u0131yor...
-Writing_XMP_to_'%0'...=XMP_'%0'e_yaz\u0131l\u0131yor...
-Wrong_file_format=Yanl\u0131\u015f_dosya_bi\u00e7emi
-Wrote_XMP-metadata=XMP-metaverisi_yaz\u0131ld\u0131
-Wrote_XMP_to_'%0'.=XMP_'%0'e_yaz\u0131ld\u0131.
-XMP-annotated_PDF=XMP-ek_notlu_PDF
-XMP_Export_Privacy_Settings=Gizlilik_Ayarlar\u0131n\u0131_XMP_D\u0131\u015fa_Aktar
-XMP_metadata=XMP_metaverisi
-XMP_metadata_found_in_PDF\:_%0=PDF'de_XMP_metaverisi_bulundu\:_%0
-You_must_restart_JabRef_for_this_to_come_into_effect.=
-You_have_changed_the_language_setting.=
-You_have_changed_the_look_and_feel_setting.=
-You_have_cleared_this_field._Original_value=Bu_alan\u0131_sildiniz._Orijinal_de\u011fer
-You_have_entered_an_invalid_search_'%0'.=Ge\u00e7ersiz_bir_arama_girdiniz_'%0'.
-You_must_choose_a_file_name_to_store_journal_abbreviations=Dergi_k\u0131saltmalar\u0131n\u0131_kaydetmek_i\u00e7in_bir_dosya_ad\u0131_se\u00e7melisiniz
-You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Yeni_anahtar_demetlerinin_d\u00fczg\u00fcn_\u00e7al\u0131\u015fmas\u0131_i\u00e7in_JabRef'i_yeniden_ba\u015flatmal\u0131s\u0131n\u0131z.
-You_must_set_both_BibTeX_key_and_%0_directory=Hem_BibTeX_anahtar\u0131_hem_de_%0_dizinini_atamal\u0131s\u0131n\u0131z
-Your_new_key_bindings_have_been_stored.=Yeni_anahtar_demetleriniz_kaydedildi.
-The_following_fetchers_are_available\:=A\u015fa\u011f\u0131daki_getiriciler_kullan\u0131ma_haz\u0131rd\u0131r:
-Could_not_find_fetcher_'%0'='%0'_getiricisi_bulunamad\u0131
-Running_Query_'%0'_with_fetcher_'%1'.='%0'_sorgusu_'%1'_getiricisiyle_\u00e7al\u0131\u015ft\u0131r\u0131l\u0131yor.
-Please_wait!=L\u00fctfen_bekleyiniz!
-Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.='%1'_getiricisiyle_'%0'_sorgusu_hi\u00e7bir_sonu\u00e7_d\u00f6nd\u00fcrmedi.
-Open_SPIRES_entry=SPIRES_girdisi_a\u00e7
-Move/Rename_file=Dosya_Ta\u015f\u0131/Yeniden_adland\u0131r
-File_moved=Dosya_ta\u015f\u0131nd\u0131
-Move_file_failed=Dosya_ta\u015f\u0131ma_ba\u015far\u0131s\u0131z
-Could_not_move_file=Dosya_ta\u015f\u0131nam\u0131yor
-Could_not_find_file_'%0'.='%0'_dosyas\u0131_bulunamad\u0131.
-Move/rename_file=Dosya_Ta\u015f\u0131/yeniden_adland\u0131r
-Number_of_entries_successfully_imported=Girdi_say\u0131s\u0131_ba\u015far\u0131yla_i\u00e7e_aktar\u0131ld\u0131
-Import_canceled_by_user=\u0130\u00e7e_aktr\u0131m_kullan\u0131c\u0131_taraf\u0131ndan_iptal_edildi
-Progress\:_%0_of_%1=\u0130lerleme:_%1'in_%0'i
-Error_while_fetching_from_JSTOR=JSTOR'dan_getirme_s\u0131ras\u0131nda_hata
-Fetching_Medline_by_id...=Medline_tan\u0131t\u0131c\u0131_arac\u0131l\u0131\u011f\u0131yla_getirliyor...
-Fetching_Medline_by_term...=Medline_terim_arac\u0131l\u0131\u011f\u0131yla_getirliyor...
-Medline_import_canceled=Medline_i\u00e7e_aktar\u0131m\u0131_iptal_edildi
-Please_enter_a_valid_number=L\u00fctfen_ge\u00e7erli_bir_say\u0131_giriniz
-Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=L\u00fctfen_virg\u00fclle_ayr\u0131lm\u0131\u015f_bir_Medline_No_ya_da_arama_terimi_listesi_giriniz.
-An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=SPIRES_kayna\u011f\u0131ndan_getirirken_bir_hata_olu\u015ftu_(%0)\:
-Error_while_fetching_from_Spires\:_=Spires'ten_getirirken_hata\:
-Connect_to_external_SQL_database=Harici_SQL_veritaban\u0131na_ba\u011flan
-Export_to_external_SQL_database=Harici_SQL_veritaban\u0131na_aktar
-Show_results_in_dialog=Sonu\u00e7lar\u0131_ileti\u015fim_penceresinde_g\u00f6ster
-Global_search=K\u00fcresel_arama
-Show_search_results_in_a_window=Arama_sonu\u00e7lar\u0131n\u0131_bir_pencerede_g\u00f6ster
-Search_results=Arama_sonu\u00e7lar\u0131
-Move_file_to_file_directory?=Dosya,_dosya_dizinine_ta\u015f\u0131ns\u0131n_m\u0131?
-Rename_to_'%0'='%0'_olarak_yeniden_adland\u0131r
-Move_to_file_directory=Dosya_dizinine_ta\u015f\u0131
-You_have_changed_the_menu_and_label_font_size.=
-Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Veritaban\u0131_korunuyor._Harici_de\u011fi\u015fiklikler_g\u00f6zden_ge\u00e7irilene_dek_kaydedemezsiniz.
-Protected_database=Korunan_veritaban\u0131
-Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Harici_de\u011fi\u015fiklikler_g\u00f6zden_ge\u00e7irilene_dek_veritaban\u0131n\u0131n_kaydedilmesini_reddet.
-Database_protection=Veirtaban\u0131_korumas\u0131
-Unable_to_save_database=Veritaban\u0131_kaydedilemedi
-BibTeX_key_generator=BibTeX_anahtar_olu\u015fturucusu
-Unable_to_open_link.=Ba\u011flant\u0131_a\u00e7\u0131lamad\u0131.
-Search_JSTOR=JSTOR'u_ara
-Attempting_SQL_import...=SQL_i\u00e7e_aktar\u0131m\u0131_giri\u015fiminde_bulunuluyor...
-BibO_RDF=BibO_RDF
-HTML_parser=HTML_ayr\u0131\u015ft\u0131r\u0131c\u0131
-Move_the_keyboard_focus_to_the_entry_table=Klavye_oda\u011f\u0131n\u0131_girdi_tablosuna_ta\u015f\u0131
-MIME_type=MIME_t\u00fcr\u00fc
-
-This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Bu_\u00f6zellik_yeni_dosyalar\u0131n_yeni_bir_oturum_a\u00e7maktansa_halen_\u00e7al\u0131\u015fmakta_olan_bir<BR>JabRef_oturumu_i\u00e7ine_a\u00e7\u0131lmas\u0131_ya_da_aktr\u0131lmas [...]
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Bu_ayarlar\u0131n_eski_s\u00fcr\u00fcm_<b>pdf</b>_ve_<b>ps</b>_alanlar\u0131_i\u00e7in_kullan\u0131ld\u0131\u011f\u0131n\u0131_not_ediniz.<br>\u00c7o\u011fu_kullan\u0131c\u0131_i\u00e7in_yukar\u0131daki_<b>Ana_dosya_dizini</b>ni_ayarlamak_yeterli_olacakt\u0131r.
-Legacy_file_fields=Eski_s\u00fcr\u00fcm_dosya_alanlar\u0131
-This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Bu,_JabRef'in_her_bir_%0_uzant\u0131s\u0131n\u0131_bulup_dosyan\u0131n_var_olup_olmad\u0131\u011f\u0131n\u0131_kontrol_etmesini_sa\u011flar._E\u011fer_dosya_yoksa,_sorunu_\u00e7\u00f6zmek_i\u00e7in_se\u00e7enekler<BR>_sunulacakt\u0131r.
-Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Getiriciyi_\u00c7al\u0131\u015ft\u0131r,_\u00d6rnek_"--fetch=Medline:cancer"
-
-The_ACM_Digital_Library=ACM_Say\u0131sal_K\u00fct\u00fcphane
-Reset=S\u0131f\u0131rla
-
-Use_IEEE_LaTeX_abbreviations=IEEE_LaTeX_k\u0131saltmalar\u0131_kullan\u0131n\u0131z
-The_Guide_to_Computing_Literature=Bilgi_\u0130\u015flem_Literat\u00fcr\u00fc_Klavuzu
-Search_ACM_Portal=ACM_Portal\u0131'n\u0131_Ara
-Connection_to_ACM_Portal_failed=ACM_Portal\u0131'na_ba\u011flant\u0131_ba\u015far\u0131s\u0131z
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=Dosya_ba\u011flant\u0131s\u0131n\u0131_a\u00e7arken,_e\u011fer_link_tan\u0131mlanmam\u0131\u015fsa_e\u015fle\u015fen_dosyay\u0131_ara
-Settings_for_%0=%0_i\u00e7in_ayarlar
-Insert_selected_citations_into_Vim=Se\u00e7ili_g\u00f6ndermeleri_Vim'e_ekle
-RIS=RIS
-Assign_exclusively_to_group=Yaln\u0131zca_gruba_ata
-Bad_Request_'%0'.=Hatal\u0131_Talep_'%0'.
-Mark_entries_imported_into_an_existing_database=Varolan_bir_veritaban\u0131na_aktar\u0131lm\u0131\u015f_girdileri_i\u015faretle
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Yeni_girdileri_varolan_bir_veritaban\u0131na_aktarmadan_\u00f6nce_t\u00fcm_girdilerin_i\u015faretini_sil
-Forward=\u0130leri
-Back=Geri
-Sort_the_following_fields_as_numeric_fields=A\u015fa\u011f\u0131daki_alanlar\u0131_say\u0131sal_olarak_s\u0131rala
-Line_%0\:_Found_corrupted_BibTeX-key.=Sat\u0131r_%0\:_Bozulmu\u015f_BibTeX-anahtar\u0131_bulundu.
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Sat\u0131r_%0\:_Bozulmu\u015f_BibTeX-anahtar\u0131_bulundu_(beyaz_bo\u015fluk_i\u00e7eriyor).
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Sat\u0131r_%0\:_Bozulmu\u015f_BibTeX-anahtar\u0131_bulundu_(virg\u00fcl_kay\u0131p).
-Finished_downloading_full_text_document=Tam_metin_belge_indirme_tamamland\u0131
-Unable_to_find_full_text_document_in_the_linked_web_page.=Linkteki_sanaldoku_sayfas\u0131nda_tam_metin_belge_bulunamad\u0131.
-Connection_error_when_trying_to_find_full_text_document.=Tam_metin_belge_bulmay\u0131_denerken_ba\u011flant\u0131_hatas\u0131.
-This_entry_provides_no_URL_or_DOI_links.=Bu_girdi_URL-ya_da_DOI_linki_sa\u011flam\u0131yor.
-Full_text_article_download_failed=Tam_metin_makale_indirme_ba\u015far\u0131s\u0131z
-Update_to_current_column_order=Varolan_s\u00fctun_s\u0131ras\u0131na_g\u00fcncelle
-
-Rename_field=Alan\u0131n_ad\u0131n\u0131_de\u011fi\u015ftir
-Set/clear/rename_fields=Alanlar\u0131_kur/sil/yeniden_adland\u0131r
-Rename_field_to\:=Alan_ad\u0131n\u0131_\u015funa_de\u011fi\u015ftir\:
-Move_contents_of_a_field_into_a_field_with_a_different_name=Alan_i\u00e7eri\u011fini_ba\u015fka_isimli_bir_alan\u0131n_i\u00e7ine_ta\u015f\u0131
-You_can_only_rename_one_field_at_a_time=Bir_seferde_yaln\u0131zca_bir_alan\u0131n_ad\u0131n\u0131_de\u011fi\u015ftirebilirsiniz
-
-Remove_all_broken_links=T\u00fcm_bozuk_linkleri_sil
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Uzak_operasyon_i\u00e7in_ba\u011flant\u0131_noktas\u0131_%0_kullan\u0131lam\u0131yor;_bir_ba\u015fka_program_kullan\u0131yor_olabilir._Ba\u015fka_bir_ba\u011flant\u0131_noktas\u0131_deneyin.
-
-Plugin_installer=Eklenti_kurucu
-Unable_to_create_plugin_directory=Eklenti_dizini_olu\u015fturulam\u0131yor
-Unable_to_copy_file=Dosya_kopyalanam\u0131yor
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Eklenti_ba\u015far\u0131yla_kuruldu._Yeni_eklentiyi_y\u00fcklemek_i\u00e7in_JabRefi'i_yeniden_ba\u015flatmal\u0131s\u0131n\u0131z.
-Unable_to_create_user_plugin_directory=Kullan\u0131c\u0131_eklenti_dizini_olu\u015fturulam\u0131yor
-Plugin_installation_failed.=Eklenti_kurulumu_ba\u015far\u0131s\u0131z.
-The_same_version_of_this_plugin_is_already_installed.=Bu_eklentinin_ayn\u0131_s\u00fcr\u00fcm\u00fc_zaten_kurulu.
-A_newer_version_of_this_plugin_is_already_installed.=Bu_eklentinin_daha_yeni_bir_s\u00fcr\u00fcm\u00fc_zaten_kurulu.
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Bu_eklentinin_bir_ya_da_daha_fazla_eski_s\u00fcr\u00fcm\u00fc_kurulu._Eski_s\u00fcr\u00fcmler_silinsin_mi?
-Old_versions_deleted_successfully.=Eski_s\u00fcr\u00fcmler_ba\u015far\u0131yla_silindi.
-Install_plugin=Eklenti_kur
-Download_plugin=Eklenti_indir
-Plugin_manager=Eklenti_y\u00f6neticisi
-Delete_the_%0_selected_plugins?=%0_se\u00e7ili_eklenti_silinsin_mi?
-Delete_plugins=Eklentileri_sil
-Delete_the_selected_plugin?=Se\u00e7ili_eklenti_silinsin_mi?
-Delete_plugin=Eklenti_sil
-Enter_download_URL=\u0130ndirme_URL'si_giriniz
-Plugin_name=Eklenti_ad\u0131
-Version=S\u00fcr\u00fcm
-Unknown=Bilinmeyen
-Not_loaded=Y\u00fcklenmedi
-Loaded=Y\u00fcklendi
-Could_not_determine_version_of_=\u015eunun_s\u00fcr\u00fcm\u00fc_belirlenemedi_
-Install_anyway?=Yine_de_kurulsun_mu?
-
-Looking_for_full_text_document...=Tam_metin_belge_aran\u0131yor...
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=DOI_ya_da_URL_linki_izle_ve_tam_metin_PDF_belgesini_bulmaya_\u00e7al\u0131\u015f
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Tam_metin_makal_bulunamad\u0131._'%0'_web_sitesi_i\u00e7in_bir_arama_algoritmas\u0131_tan\u0131mlanmam\u0131\u015f.
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Pdf_link_bulundu,_ama_yanl\u0131\u015f_MIME_t\u00fcr\u00fc_al\u0131nd\u0131._Bu,_tam_metin_makaleye_eri\u015fiminiz_olmad\u0131\u011f\u0131_anlam\u0131na_gelebilir.
-
-Autosave=Otomatik_kaydet
-Prompt_before_recovering_a_database_from_an_autosave_file=Otomatik_kaydedilmi\u015f_bir_dosyadan_veri_taban\u0131n\u0131_kurtarmaya_ba\u015flamadan_\u00f6nce_sor
-Autosave_interval_(minutes)=Otomatik_kay\u0131t_aral\u0131\u011f\u0131_(dakika)
-Do_you_want_to_recover_the_database_from_the_autosave_file?=Otomatik_kay\u0131t_dosyas\u0131ndan_veritaban\u0131n\u0131_kurtarmak_ister_misiniz?
-Recover_from_autosave=Otomatik_kay\u0131ttan_kurtar
-%0_warnings=%0_uyar\u0131
-
-Save_in_current_table_sort_order=Mevcut_tablo_s\u0131ralama_d\u00fczeninde_kaydet
-Export_in_current_table_sort_order=Mevcut_tablo_s\u0131ralama_d\u00fczeninde_d\u0131\u015fa_aktar
-Export_ordered_by_author/editor/year=Yazar/edit\u00f6r/y\u0131l_d\u00fczeninde_s\u0131ralayarak_d\u0131\u015fa_aktar
-Export_entries_in_their_original_order=Girdileri_orijinal_s\u0131ras\u0131nda_d\u0131\u015fa_aktar
-Error_opening_file_'%0'.=Dosya_a\u00e7mada_hata_'%0'.
-Autosave_of_file_'%0'='%0'_dosyas\u0131n\u0131n_otomatik_kayd\u0131
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.='%0''in_otomatik_kayd\u0131n\u0131_a\u00e7mada_hata._Onun_yerine_'%0'_y\u00fcklenmeye_\u00e7al\u0131\u015f\u0131yor.
-
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=Kullan\u0131c\u0131_eklenti_dizininizde_(%0)\_kurulu_eklentiler:
-Plugins_installed_in_other_locations\:=Di\u011fer_yerlerde_kurulu_eklentiler\:
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=JabRef_tekrar_ba\u015flad\u0131\u011f\u0131nda_eklentiler_silinecek.
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=JabRef_tekrar_ba\u015flad\u0131\u011f\u0131nda_eklenti_silinecek.
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Eski_eklenti_s\u00fcr\u00fcmleri,_JabRef_tekrar_ba\u015flad\u0131\u011f\u0131nda_silinecek.
-
-Formatter_not_found\:_%0=Bi\u00e7imleyici_bulunamad\u0131\:_%0
-The_following_formatters_could_not_be_found=A\u015fa\u011f\u0131daki_bi\u00e7imleyiciler_bulunamad\u0131
-
-Clear_inputarea=Girdi_alan\u0131n\u0131_temizle
-Automatically_set_file_links_for_this_entry=Bu_girdi_i\u00e7in_dosya_ba\u011flant\u0131lar\u0131n\u0131_otomatikman_kur
-Could_not_save,_file_locked_by_another_JabRef_instance.=Kaydedilemiyor,_dosya_ba\u015fka_bir_JabRef_oturumunca_kilitlenmi\u015f.
-File_is_locked_by_another_JabRef_instance.=Dosya_ba\u015fka_bir_JabRef_oturumunca_kilitlenmi\u015f.
-Do_you_want_to_override_the_file_lock?=Dosya_kilidini_ge\u00e7ersiz_k\u0131lmak_ister_misiniz?
-File_locked=Dosya_kilitli
-Current_tmp_value=Mevcut_tmp_de\u011feri
-Metadata_change=Metadata_de\u011fi\u015fikli\u011fi
-Changes_have_been_made_to_the_following_metadata_elements=A\u015fa\u011f\u0131daki_metadata_\u00f6gelerinde_de\u011fi\u015fiklik_yap\u0131ld\u0131
-
-Generate_groups_for_author_last_names=Yazar_soyadlar\u0131_i\u00e7in_grup_olu\u015ftur
-Generate_groups_for_editor_last_names=Edit\u00f6r_soyadlar\u0131_i\u00e7in_grup_olu\u015ftur
-Generate_groups_from_keywords_in_a_BibTeX_field=Bir_BibTeX_alan\u0131ndaki_anahtar_s\u00f6zc\u00fcklerden_grup_olu\u015ftur
-Enforce_legal_characters_in_BibTeX_keys=BibTeX_anahtarlar\u0131nda_yasal_karakterleri_zorla
-The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.='\\#'_\u015feklinde_belirtilmedik\u00e7e_BibTeX_dizgelerinde_#_karakterine_izin_verilmez.
-Before_saving,_please_edit_any_strings_containing_the_#_character.=Kaydetmeden_\u00f6nce_l\u00fctfen_#_karakterini_i\u00e7eren_t\u00fcm_dizgeleri_d\u00fczeltin.
-
-Save_without_backup?=Yedeklemeden_kaydedilsin_mi?
-Unable_to_create_backup=Yedek_olu\u015fturulamad\u0131
-
-File_directory_is_not_set_or_does_not_exist.=Dosya_dizini_atanmad\u0131_ya_da_mevcut_de\u011fil.
-Move_file_to_file_directory.=Dosyay\u0131_dosya_dizinine_ta\u015f\u0131.
-Rename_file_to=Dosyay\u0131_\u015funa_yeniden_adland\u0131r
-<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>T\u00fcm_Girdiler</b>_(bu_grup_silinemez_ve_d\u00fczenlenemez)
-static_group=dura\u011fan_grup
-dynamic_group=devingen_grup
-refines_supergroup=s\u00fcpergrubu_rafine_eder
-includes_subgroups=altgruplar\u0131_i\u00e7erir
-contains=i\u00e7erir
-search_expression=arama_ifadesi
-
-Disable_file_renaming_in_non-native_file_dialog=Do\u011fal_olmayan_dosya_ileti\u015fim_kutusunda_dosya_yeniden_adland\u0131rmay\u0131_etkisiz_k\u0131l
-File_dialog=Dosya_ileti\u015fim_kutusu
-No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Girdi_bulunamad\u0131._JStor_aramak_i\u00e7in_giri\u015f_yekiniz_yok_gibi_g\u00f6r\u00fcn\u00fcyor.
-
-Search_ScienceDirect=ScienceDirect'te_Ara
-Error_while_fetching_from_ScienceDirect=ScienceDirect'ten_getirirken_hata
-
-Error_initializing_custom_export_format_from_string_'%0'='%0'_dizgesinden_\u00f6zelle\u015ftirilmi\u015f_d\u0131\u015fa_aktarma_bi\u00e7emi_ilklendirmede_hata
-
-BibLaTeX_mode=BibLaTeX_kipi
-Optional_fields_2=Opsiyonel_alanlar_2
-Please_wait=L\u00fctfen_bekleyin
-Waiting_for_save_operation_to_finish=Kaydetme_i\u015fleminin_bitmesi_bekleniyor
-Resolving_duplicate_BibTeX_keys...=\u00c7ifte_BibTeX_anahtarlar\u0131_\u00e7\u00f6z\u00fcmleniyor...
-Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=\u00c7ifte_BibTeX_anahtarlar\u0131n\u0131n_\u00e7\u00f6z\u00fcmlenmesi_bitti._%0_girdi_de\u011fi\u015ftirildi.
-This_database_contains_one_or_more_duplicated_BibTeX_keys.=Bu_veritaban\u0131_bir_ya_da_daha_fazla_\u00e7ifte_BibTeX_anahtar\u0131_i\u00e7eriyor.
-Do_you_want_to_resolve_duplicate_keys_now?=\u00c7ifte_anahtarlar\u0131_\u015fimdi_\u00e7\u00f6z\u00fcmlemek_ister_misiniz?
-
-Find_and_remove_duplicate_BibTeX_keys=\u00c7ifte_BibTeX_anahtarlar\u0131n\u0131_bul_ve_kald\u0131r
-Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=--fetch_i\u00e7in_beklenen_s\u00f6zdizimi_:--fetch='<name_of_fetcher>:<query>'
-Duplicate_BibTeX_key=\u00c7ifte_BibTeX_anahtar\u0131
-Duplicate_key=\u00c7ifte_anahtar
-Generate_key=Anahtar_olu\u015ftur
-Import_marking_color=\u0130\u015faretleme_rengi_i\u00e7e_al
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_girdi_bulundu._Sunucu_y\u00fck\u00fcn\u00fc_azaltmak_i\u00e7in,_yaln\u0131zca_%1_indirilecek._ACM'yi_mutlu_etmek_i\u00e7in_\u00e7ok_yava\u015f_olacak.
-BibTeX_importer=BibTeX_i\u00e7e_aktar\u0131c\u0131s\u0131
-Always_add_letter_(a,_b,_...)_to_generated_keys=Olu\u015fturulmu\u015f_anahtarlara_her_zaman_harf_ekle_(a,_b_...)
-
-Ensure_unique_keys_using_letters_(a,_b,_...)=Harf_kullanarak_(a,_b,_...)_anahtarlar\u0131n_e\u015fsizli\u011fini_garantile
-Ensure_unique_keys_using_letters_(b,_c,_...)=Harf_kullanarak_(b,_c,_...)_anahtarlar\u0131n_e\u015fsizli\u011fini_garantile
-Entry_editor_active_background_color=Girdi_d\u00fczenleyicisi_aktif_arkaplan_rengi
-Entry_editor_background_color=Girdi_d\u00fczenleyicisi_arkaplan_rengi
-Entry_editor_font_color=Girdi_d\u00fczenleyicisi_yaz\u0131tipi_rengi
-Entry_editor_invalid_field_color=Girdi_d\u00fczenleyicisi_ge\u00e7ersiz_alan_rengi
-
-Table_and_entry_editor_colors=Tablo_ve_girdi_d\u00fczenleyicisi_renkleri
-
-An_autosave_file_was_found_for_this_database._This_could_indicate_=Bu_veritaban\u0131_i\u00e7in_bir_otokay\u0131t_dosyas\u0131_bulundu._Bu_\u015fu_anlama_gelebilir\:
-that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=bu_dosya_son_kullan\u0131ld\u0131\u011f\u0131nda_JabRef_temiz_kapat\u0131lmad\u0131.
-General_file_directory=Genel_dosya_dizini
-User-specific_file_directory=Kullan\u0131c\u0131ya_\u00f6zel_dosya_dizini
-Error_setting_look_and_feel=G\u00f6r\u00fcn\u00fcm_ve_izlenimi_kurmada_hata
-Search_failed\:_illegal_search_expression=Arama_ba\u015far\u0131s\u0131z\:_uygunsuz_arama_dizgesi
-Show_ArXiv_column=ArXiv_s\u00fctununu_g\u00f6ster
-<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>JabRef'le_optimal_kar\u015f\u0131l\u0131kl\u0131_kullan\u0131m_i\u00e7in_<BR>Endnote_i\u00e7in_i\u00e7e_alma/d\u0131\u015fa_aktarma_filtrelerini_i\u00e7eren_zip_dosyas\u0131n\u0131_\u00e7\u00f6z</HTML>
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Herhangi_bir_mevcut_se\u00e7ilmi\u015f_grup\u00e7a_i\u00e7erilen_girdileri_i\u00e7eren_gruplar\u0131_vurgula
-
-You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=Metin_alan\u0131na_1025-65535_aral\u0131\u011f\u0131nda_bir_tamsay\u0131_girmelisiniz
-
-Automatically_open_browse_dialog_when_creating_new_file_link=Yeni_dosya_ba\u011flant\u0131s\u0131n\u0131_olu\u015ftururken_g\u00f6zatma_ileti\u015fim_kutusunu_otomatikman_a\u00e7
-Import_Metadata_from\:=Metaverisini_\u015euradan_\u0130\u00e7e_Aktar\:
-Choose_the_source_for_the_metadata_import=Metaverisini_i\u00e7e_aktarmak_i\u00e7in_kayna\u011f\u0131_se\u00e7in
-Create_entry_based_on_XMP_data=XMP_verisine_dayanarak_girdi_olu\u015ftur
-Create_entry_based_on_data_fetched_from=\u015euradan_al\u0131nan_veriye_dayanarak_girdi_olu\u015ftur
-Create_blank_entry_linking_the_PDF=PDF'yle_ba\u011flant\u0131l\u0131_olarak_bo\u015f_girdi_olu\u015ftur
-Only_attach_PDF=Yaln\u0131zca_PDF'yi_ekle
-Mr._dLib_Metadata_Entries_Associated_With\:=Mr._dLib_Metaverisi_Girdileri_\u015eununla_\u0130li\u015fkili\:
-Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr._dLib_Metaverisi_Girdileri_PDF_Dosyas\u0131yla_\u0130li\u015fkili
-Title=Ba\u015fl\u0131k
-Author(s)=Yazar(lar)
-Published_Year=Yay\u0131n_Y\u0131l\u0131
-No_metadata_found.=Metaverisi_bulunamad\u0131.
-Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib_a\u011f_servisi_ge\u00e7ici_olarak_servis_d\u0131\u015f\u0131.
-Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib_a\u011f_servisi_ge\u00e7ici_olarak_servis_d\u0131\u015f\u0131._L\u00fctfen_daha_sonra_tekrar_deneyin.
-You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Internete_ba\u011fl\u0131_de\u011filsiniz._Mr._dLib_a\u011f_servisine_eri\u015fim_i\u00e7in_internet_ba\u011flant\u0131s\u0131_gereklidir.
-No_Internet_Connection.=Internet_Ba\u011flant\u0131s\u0131_Yok.
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Bu_JabRef_s\u00fcr\u00fcm\u00fc_art\u0131k_\u00e7al\u0131\u015fmayan_eski_bir_Mr._dLib_a\u011f_servisi_s\u00fcr\u00fcm\u00fcne_eri\u015fmeye_\u00e7al\u0131\u015f\u0131yor.\nL\u00fctfen_daha_fazla_bilgi_ve_g\u00fcncellemeler_i\u00e7in_http\://jabref.sourceforge.net_ya_da_http\ [...]
-Web_Service_Version_Outdated=A\u011f_Servisi_S\u00fcr\u00fcm\u00fc_Eski
-The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Eri\u015fmeye_\u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z_Mr._dLib_a\u011f_servis_s\u00fcr\u00fcm\u00fc_eskimi\u015f.
-Update_empty_fields_with_data_fetched_from=\u015euradan_al\u0131nan_veriyle_bo\u015f_alanlar\u0131_g\u00fcncelle
-Create_New_Entry=Yeni_Girdi_Olu\u015ftur
-Update_Existing_Entry=Mevcut_Girdiyi_G\u00fcncelle
-Mr._dLib=Mr._dLib
-More_information=Daha_fazla_bilgi
-Fetching_Metadata...=Metaverisi_Al\u0131n\u0131yor...
-Metadata=Metaverisi
-Autocomplete_names_in_'Firstname_Lastname'_format_only=\u0130simleri_yaln\u0131zca_'Ad_Soyad'_bi\u00e7iminde_otomatik_tamamla
-Autocomplete_names_in_'Lastname,_Firstname'_format_only=\u0130simleri_yaln\u0131zca_'Soyad,_Ad'_bi\u00e7iminde_otomatik_tamamla
-Autocomplete_names_in_both_formats=\u0130simleri_her_iki_bi\u00e7imde_otomatik_tamamla
-Marking_color_%0=\u0130\u015faretleme_rengi_%0
-The_name_'comment'_can_not_be_used_as_an_entry_type_name.='comment'_ismi_bir_girdi_t\u00fcr\u00fc_ismi_olarak_kullan\u0131lamaz.
-You_must_enter_an_integer_value_in_the_text_field_for=\u015eunun_i\u00e7in_metin_alan\u0131na_bir_tamsay\u0131_girmelisiniz
-File_directory=Dosya_dizini
-Send_as_email=Eposta_olarak_g\u00f6nder
-References=Kaynaklar
-Sending_of_emails=Epostalar_g\u00f6nderiliyor
-Subject_for_sending_an_email_with_references=Kaynaklarla_g\u00f6nderilecek_bir_eposta_konusu
-Automatically_open_folders_of_attached_files=Ekli_dosyalar\u0131n_klas\u00f6rlerini_otomatikman_a\u00e7
-Create_entry_based_on_content=\u0130\u00e7eri\u011fe_ba\u011fl\u0131_olarak_girdi_olu\u015ftur
-Store_choice_as_default=Se\u00e7imi_\u00f6ntan\u0131ml\u0131_olarak_kaydet
-Do_not_show_this_box_again_for_this_import=Bu_i\u00e7e_aktar\u0131m_i\u00e7in_bu_kutuyu_bir_daha_g\u00f6sterme
-Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Her_zaman_bu_PDF_i\u00e7e_aktar\u0131m_stilini_kullan_(ve_her_i\u00e7e_aktar\u0131m_i\u00e7in_sorma)
-Error_creating_email=Eposta_olu\u015fturmada_hata
-Could_not_open_directory=Dizin_a\u00e7\u0131lamad\u0131
-Entries_added_to_an_email=Girdiler_bir_epostaya_eklendi
-exportFormat=d\u0131\u015fa-aktar\u0131mBi\u00e7imi
-Output_file_missing=\u00c7\u0131kt\u0131_dosyas\u0131_kay\u0131p
-No_search_matches.=E\u015fle\u015fen_arama_yok
-The_output_option_depends_on_a_valid_input_option.=\u00c7\u0131kt\u0131_se\u00e7ene\u011fi_ge\u00e7erli_bir_girdi_se\u00e7ene\u011fine_ba\u011flml\u0131d\u0131r.
-Default_import_style_for_drag&drop_of_PDFs=S\u00fcr\u00fcklenip_b\u0131rak\u0131lan_PDF'lerin_\u00f6ntan\u0131ml\u0131_i\u00e7e_aktar\u0131m_stili
-Default_PDF_file_link_action=\u00d6ntan\u0131ml\u0131_PDF_dosyas\u0131_ba\u011flant\u0131_eylemi
-File_name_format_pattern=Dosya_ad\u0131_bi\u00e7imi_deseni
-PostgreSQL_database=PostgreSQL_veri_taban\u0131
-DIN_1505=DIN_1505
-Wrong_Format=Yanl\u0131\u015f_Bi\u00e7im
-Path_to_gnuclient_or_emacsclient=gnuclient_ya_da_emacsclient_yolu
-Additional_parameters=Ek_parametreler
-Encrypted_documents_are_not_supported=\u015eifrelenmi\u015f_belgeler_desteklenmiyor
-Cite_selected_entries=Site_se\u00e7imli_girdiler
-Cite_selected_entries_with_in-text_citation=Metin_i\u00e7i_al\u0131nt\u0131l\u0131_site_se\u00e7imli_girdiler
-Cite_special=Siteye_\u00f6zel
-Extra_information_(e.g._page_number)=Ek_bilgi_(\u00f6rnek:_sayfa_numaras\u0131)
-Manage_citations=Al\u0131nt\u0131lar\u0131_y\u00f6net
-Problem_modifying_citation=Al\u0131nt\u0131_de\u011fi\u015ftirmede_sorun
-Citation=Al\u0131nt\u0131
-Context=Ba\u011flam
-Extra_information=Ek_bilgi
-Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=Al\u0131nt\u0131_belirteci_'%0'_i\u00e7in_BibTeX_girdisi_\u00e7\u00f6z\u00fcmlenemedi.
-Styles=Stiller
-Select_style=Stil_se\u00e7
-This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Bu,_mevcut_stillerin_listesidir._Kullanmak_istedi\u011finizi_se\u00e7iniz.
-Journals=Dergiler
-Cite=Al\u0131nt\u0131la
-Cite_in-text=Metin-i\u00e7i_al\u0131nt\u0131la
-Insert_empty_citation=Bo\u015f_al\u0131nt\u0131_ekle
-Merge_citations=Al\u0131nt\u0131lar\u0131_birle\u015ftir
-Manual_connect=Elle_ba\u011flan
-Select_Writer_document=Writer_belgesi_se\u00e7
-Sync_OO_bibliography=Kaynak\u00e7a_00_g\u00fcncelle
-OpenOffice=OpenOffice
-Select_which_open_Writer_document_to_work_on=Hangi_a\u00e7\u0131k_Writer_belgesi_\u00fczerinde_\u00e7al\u0131\u015f\u0131laca\u011f\u0131n\u0131_se\u00e7
-Connected_to_document=Belgeye_ba\u011fland\u0131
-Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Metinsiz_bir_al\u0131nt\u0131_se\u00e7_(girdi_kaynak_listesinde_g\u00f6r\u00fcnecek)
-Cite_selected_entries_with_extra_information=Se\u00e7ili_girdileri_ek_bilgiyle_al\u0131nt\u0131la
-Ensure_that_the_bibliography_is_up-to-date=Kaynak\u00e7an\u0131n_g\u00fcncel_oldu\u011funa_emin_ol
-Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=OpenOffice_belgeniz_mevcut_veri_taban\u0131nda_bulunamayan_'%0'_BibTeX_anahtar\u0131n\u0131_kaynak_g\u00f6steriyor.
-Unable_to_synchronize_bibliography=Kaynak\u00e7a_g\u00fcncellenemiyor
-Combine_pairs_of_citations_that_are_separated_by_spaces_only=Yaln\u0131zca_bo\u015flukla_ayr\u0131lm\u0131\u015f_al\u0131nt\u0131_\u00e7iftlerini_birle\u015ftir
-Autodetection_failed=Otomatik_alg\u0131lama_ba\u015far\u0131s\u0131z
-Connecting=Ba\u011flan\u0131yor
-Please_wait...=L\u00fctfen_bekleyin...
-Unable_to_connect=Ba\u011flan\u0131lamad\u0131
-Set_connection_parameters=Ba\u011flant\u0131_parametrelerini_ayarla
-Path_to_OpenOffice_directory=OpenOffice_dizini_yolu
-Path_to_OpenOffice_executable=OpenOffice_\u00e7al\u0131\u015ft\u0131ma_dosyas\u0131_yolu
-Path_to_OpenOffice_library_dir=OpenOffice_k\u00fct\u00fcphane_dizini_yolu
-Autodetect=Otomatik_alg\u0131la
-Connection_lost=Ba\u011flant\u0131_koptu
-The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Paragraf_bi\u00e7imi_stil_dosyas\u0131nda_'KaynakParagrafBi\u00e7imi'_ya_da_'KaynakBa\u015fl\u0131\u011f\u0131ParagrafBi\u00e7imi'_\u00f6zelli\u011fi_taraf\u0131ndan_kontrol_edilir.
-The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Karakter_bi\u00e7imi_stil_dosyas\u0131nda_'Al\u0131nt\u0131KarakterBi\u00e7imi'_al\u0131nt\u0131_\u00f6zelli\u011fi_taraf\u0131ndan_kontrol_edilir.
-Automatically_sync_bibliography_when_inserting_citations=Al\u0131nt\u0131_eklenirken_kaynak\u00e7ay\u0131_otomatikman_g\u00fcncelle
-Look_up_BibTeX_entries_in_the_active_tab_only=BibTeX_girdilerini_yaln\u0131zca_etkin_sekmede_ara
-Look_up_BibTeX_entries_in_all_open_databases=BibTeX_girdilerini_t\u00fcm_a\u00e7\u0131k_veri_tabanlar\u0131nda_ara
-Use_in-parenthesis_citation=Parantez-i\u00e7i_al\u0131nt\u0131_kullan
-Use_in-text_citation=Metin-i\u00e7i_al\u0131nt\u0131_kullan
-Autodetecting_paths...=Yollar_otomatikman_alg\u0131lan\u0131yor...
-Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=OpenOffice_kurulumu_otomatikman_alg\u0131lanamad\u0131._L\u00fctfen_kurulma_dizinini_elle_se\u00e7iniz.
-Could_not_find_OpenOffice_installation=OpenOffice_kurulumu_bulunamad\u0131.
-Directories=Dizinler
-Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Birden_fazla_OpenOffice_\u00e7al\u0131\u015ft\u0131rma_dosyas\u0131_bulundu._L\u00fctfen_hangisine_ba\u011flan\u0131laca\u011f\u0131n\u0131_se\u00e7in\:
-Choose_OpenOffice_executable=OpenOffice_\u00e7al\u0131\u015ft\u0131rma_dosyas\u0131n\u0131_se\u00e7in
-Select_document=Belge_se\u00e7in
-Edit_Group_Membership=Grup_\u00dcyeli\u011fini_D\u00fczenle
-PostgreSQL=PostgreSQL
-Highlight_Words=S\u00f6zc\u00fckleri_Vurgula
-JSTOR_import_cancelled=JSTOR_i\u00e7e_aktar\u0131m\u0131_iptal_edildi
-HTML_list=HTML_listesi
-Click_group_to_toggle_membership_of_selected_entries=Se\u00e7ili_girdilerin_\u00fcyeli\u011fini_ayarlamak_i\u00e7in_grubu_t\u0131klay\u0131n
-Use_EMACS_23_insertion_string=EMACS_23_ekleme_dizgesini_kullan
-Normalize_to_BibTeX_name_format=BibTeX_isim_bi\u00e7imine_normalle\u015ftir
-If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=e\u011fer_m\u00fcmk\u00fcnse,_bu_isim_listesini_standart_BibTeX_isim_bi\u00e7imiyle_uyumlu_olacak_\u015fekilde_normalle\u015ftir
-Could_not_open_%0=%0_a\u00e7\u0131lam\u0131yor
-Unknown_import_format=Bilinmeyen_i\u00e7e_aktar\u0131m_bi\u00e7imi
-Open_INSPIRE_entry=INSPIRE_girdisini_a\u00e7
-An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=INSPIRE_kayna\u011f\u0131ndan_(%0)_al\u0131n\u0131rken_bir_hata_olu\u015ftu\:
-Error_while_fetching_from_Inspire\:_=Inspire'dan_al\u0131n\u0131rken_hata\:
-Web_search=A\u011f_aramas\u0131
-Autocomplete_names=\u0130simeri_otomatikman_tamamla
-You_must_select_either_a_valid_style_file,_or_use_the_default_style.=Ya_ge\u00e7erli_bir_stil_dosyas\u0131_se\u00e7meli,_ya_da_\u00f6ntan\u0131ml\u0131_stili_kullanmal\u0131s\u0131n\u0131z.
-Default_style=\u00d6ntan\u0131ml\u0131_stil
-Choose_style_file_directly=Stil_dosyas\u0131n\u0131_direkt_olarak_se\u00e7in
-Choose_from_a_directory=Bir_dizinden_se\u00e7in
-No_directory_defined_for_%0-files=%0-dosyalar_i\u00e7in_bir_dizin_tan\u0131mlanmad\u0131
-Allow_file_links_relative_to_each_bib_file's_location=Her_bib_dosyas\u0131n\u0131n_konumuna_g\u00f6re_dosya_ba\u011flant\u0131lar\u0131na_izin_ver
-Style_selection=Stil_se\u00e7imi
-The_panel_below_shows_the_definition_of_the_default_style.=A\u015fa\u011f\u0131daki_panel_\u00f6ntan\u0131ml\u0131_stilin_tan\u0131m\u0131n\u0131_g\u00f6stermektedir.
-If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=E\u011fer_bunu_yeni_bir_stil_i\u00e7in_\u015fablon_olarak_kullanmak_isterseniz,_i\u00e7eri\u011fini_yeni_bir_.jstyle_dosyas\u0131na_kopyalayabilirsiniz
-
-Default_style_(author-year_citations)=\u00d6ntan\u0131ml\u0131_stil_(yazar-y\u0131l_al\u0131nt\u0131lar)
-Default_style_(numerical_citations)=\u00d6ntan\u0131ml\u0131_stil_(numaral\u0131_al\u0131nt\u0131lar)
-No_valid_style_file_defined=Ge\u00e7erli_stil_dosyas\u0131_tan\u0131mlanmad\u0131
-Choose_pattern=Desen_se\u00e7in
-Use_the_bib_file_location_as_primary_file_directory=bib_dosyas\u0131_konumunu_birincil_dosya_dizini_olarak_kullan
-Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=gnuclient/emacsclient_program\u0131_\u00e7al\u0131\u015ft\u0131r\u0131lam\u0131yor._Emacsclient/gnuclient_program\u0131n\u0131n_kurulu_oldu\u011funa_ve_YOL'da_mevcut_oldu\u011funa_emin_olun.
-Built-in_journal_list=Yerle\u015fik_dergi_listesi
-OpenOffice/LibreOffice_connection=OpenOffice/LibreOffice_ba\u011flant\u0131s\u0131
-You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=Ki\u015fisel_bir_dergi_listesi_olu\u015fturarak_ya_da_harici_dergi_listelerine_<br>ba\u011flant\u0131_kurarak_yeni_dergi_adlar\u0131_ekleyebilirsiniz.
-JabRef_includes_a_built-in_list_of_journal_abbreviations.=JabRef_yerle\u015fik_bir_dergi_k\u0131saltma_listesi_i\u00e7erir.
-You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=Ya_ge\u00e7erli_bir_stil_dosyas\u0131_se\u00e7meli,_ya_da_\u00f6ntan\u0131ml\u0131_stillerden_birini_kullanmal\u0131s\u0131n\u0131z.
-You_must_select_either_a_valid_style_file,_or_use_a_default_style.=Ya_ge\u00e7erli_bir_stil_dosyas\u0131_se\u00e7meli,_ya_da_\u00f6ntan\u0131ml\u0131_bir_stil_kullanmal\u0131s\u0131n\u0131z.
-
-Show=G\u00f6ster
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=Bu_basit_bir_kopyala_ve_yap\u0131\u015ft\u0131r_ileti\u015fim_kutusudur._\u00d6nce_metin_girme_alan\u0131na_bir_metin_y\u00fckleyin_ya_da_yap\u0131\u015ft\u0131r\u0131n.<br>Daha_sonra,_metni_i\u015faretleyip_bir_BibTeX_alan\u0131na_atayabilirsiniz.
-Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=Java_Bouncy_Castle_k\u00fct\u00fcphanesi_bulunamad\u0131._L\u00fctfen_onu_indirin_ve_kurun._Daha_fazla_bilgi_i\u00e7in_http\://www.bouncycastle.org/_adresine_g\u00f6z_at\u0131n.
-This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=Bu_\u00f6zellik_mevcut_bir_LaTex_belgesinde_hangi_girdilerin_gerekli_oldu\u011funa_dayanan_yeni_bir_veritaban\u0131_olu\u015fturur.
-You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=Girdilerinizi_se\u00e7mek_i\u00e7in_a\u00e7\u0131k_veritabanlar\u0131n\u0131zdan_birini_ve_belgenizi_derlerken_LaTex'in_olu\u015fturdu\u011fu_AUX_dosyas\u0131n\u0131_se\u00e7melisiniz.
-First_select_entries_to_clean_up.=\u00d6ncelikle_temizlemek_istedi\u011finiz_girdileri_se\u00e7iniz.
-Cleanup_entry=Girdiyi_temizle
-Autogenerate_PDF_Names=PFD_Adlar\u0131n\u0131_Otomatik_Olu\u015ftur
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=PDF_Adlar\u0131n\u0131_otomatik_olu\u015fturma_geri_al\u0131namaz._Devam_edilsin_mi?
-File_rename_failed_for=Dosya_yeniden_adland\u0131rma_\u015fu_nedenle_ba\u015far\u0131s\u0131z
-You_have_toggled_the_BibLaTeX_mode.=BibLaTex_kipini_de\u011fi\u015ftirdiniz.
-Use_full_firstname_whenever_possible=M\u00fcmk\u00fcn_olduk\u00e7a_tam_ilk_ismi_kullan\u0131n\u0131z
-Use_abbreviated_firstname_whenever_possible=M\u00fcmk\u00fcn_olduk\u00e7a_k\u0131salt\u0131lm\u0131\u015f_ilk_ismi_kullan\u0131n\u0131z
-Use_abbreviated_and_full_firstname=K\u0131salt\u0131lm\u0131\u015f_ve_tam_ilk_ismi_kullan\u0131n\u0131z
-Autocompletion_options=Otomatik_tamamlama_se\u00e7enekleri
-Autocomplete_after_following_number_of_characters=\u015eu_say\u0131daki_karakterden_sonra_otomatik_tamamla
-Name_format_used_for_autocompletion=Otomatik_tamamlama_i\u00e7in_kullan\u0131lan_isim_bi\u00e7emi
-Treatment_of_first_names=\u0130lk_isimlerin_i\u015flenme_\u015fekli
-No_icon_found_for_%0=%0_i\u00e7in_simge_bulunamad\u0131
-Cleanup_entries=Girdileri_temizle
-Automatically_assign_new_entry_to_selected_groups=Se\u00e7ili_gruplara_otomatikman_yeni_girdi_ata
-Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=DOI'leri_not_ve_URL_alanlar\u0131ndan_DOI_alan\u0131na_ta\u015f\u0131_ve_http_\u00f6n_ekini_kald\u0131r
-Format_content_of_month_field_to_#mon#=Ay_alan\u0131n\u0131n_i\u00e7eri\u011fini_#mon#_bi\u00e7emine_d\u00f6n\u00fc\u015ft\u00fcr
-Ensure_that_page_ranges_are_of_the_form_num1--num2=Sayfa_aral\u0131\u011f\u0131n\u0131n_num1--num2_bi\u00e7iminde_oldu\u011fundan_emin_olun
-Make_paths_of_linked_files_relative_(if_possible)=(M\u00fcmk\u00fcnse)_ba\u011flant\u0131l\u0131_dosya_yollar\u0131n\u0131_g\u00f6receli_yap\u0131n
-Rename_PDFs_to_given_file_name_format_pattern=PDF'leri_belirlenmi\u015f_dosya_ismi_bi\u00e7emi_desenine_g\u00f6re_yeniden_adland\u0131r
-Rename_only_PDFs_having_a_relative_path=Yaln\u0131zca_g\u00f6receli_yolu_olan_PDF'leri_yeniden_adland\u0131r
-What_would_you_like_to_clean_up?=Neyi_temizlemek_istersiniz?
-Doing_a_cleanup_for_%0_entries...=%O_girdileri_i\u00e7in_temizlik_yap\u0131l\u0131yor...
-No_entry_needed_a_clean_up=Hi\u00e7bir_girdiye_temizlik_gerekmedi
-One_entry_needed_a_clean_up=Bir_girdi_temizlik_gerektirdi
-%0_entries_needed_a_clean_up=%0_girdi_temizlik_gerektirdi
-Imported_=i\u00e7e_al\u0131nd\u0131_
-Error_importing_from_database=Veritaban\u0131ndan_i\u00e7e_al\u0131nmada_hata
-Minimize_to_system_tray=Sistem_tepsisine_k\u00fc\u00e7\u00fclt
-
-
-Incomplete_search_results=Tamamlanmami\u015f_arama_sonu\u00e7lar\u0131
-%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=%0_girdi_bulundu,_ama_bunlar\u0131n_yaln\u0131zca_%1'i_\u00e7\u00f6z\u00fcmlenebildi.
-
-Error_downloading_file_'%0'=Dosya_indirmede_hata_%0'
-Download_failed=\u0130ndirme_ba\u015far\u0131s\u0131z
-%0_databases_will_be_imported=%0_veritaban\u0131_i\u00e7e_al\u0131nacak
-
-Importing_cancelled=\u0130\u00e7e_aktarma_iptal_edildi
-There_are_no_available_databases_to_be_imported=\u0130\u00e7e_aktar\u0131lacak_mevcut_hi\u00e7bir_veri_taban\u0131_yok
-Import_from_SQL_database=SQL_veri_taban\u0131ndan_i\u00e7e_al
-Imported_%0_databases_successfully=%0_veritaban\u0131_ba\u015far\u0131yla_i\u00e7e_al\u0131nd\u0131
-<_CREATE_NEW_DATABASE_>=<_YEN\u0130_VER\u0130_TABANI_OLU\u015eTUR_>
-Remove_Selected=Se\u00e7iliyi_Sil
-SQL_Database_Exporter=SQL_Veri_Taban\u0131_D\u0131\u015fa_Aktar\u0131c\u0131s\u0131
-Select_target_SQL_database\:=Hedef_SQL_veri_taban\u0131n\u0131_se\u00e7in\:
-SQL_Database_Importer=SQL_Veri_Taban\u0131_\u0130\u00e7e_Aktar\u0131c\u0131s\u0131
-Please_select_which_JabRef_databases_do_you_want_to_import\:=L\u00fctfen_hangi_JabRef_veri_taban\u0131n\u0131_i\u00e7e_aktarmak_istedi\u011finizi_se\u00e7in\:
-Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=Grup_a\u011fac\u0131_\u00e7\u00f6z\u00fcmlenemedi._E\u011fer_BibTeX_veri_taban\u0131n\u0131_kaydederseniz_t\u00fcm_gruplar_yitecek.
-Attach_file=Dosya_ekle
-Setting_all_preferences_to_default_values.=T\u00fcm_tercihler_\u00f6ntan\u0131ml\u0131_de\u011ferlere_ayarlan\u0131yor.
-Resetting_preference_key_'%0'=Tercih_anahtar\u0131_'%0'_yeniden_atan\u0131yor
-Unknown_preference_key_'%0'=Bilinmeyen_tercih_anahtar\u0131_'%0'
-Unable_to_clear_preferences.=Tercihler_silinemedi.
-
-Reset_preferences_(key1,key2,..._or_'all')=Tercihleri_s\u0131f\u0131rla_(anahtar1,anahtar2,..._ya_da_'t\u00fcm\u00fc')
-Find_unlinked_files=Ba\u011flant\u0131s\u0131z_dosyalar\u0131_bul
-Select_All=T\u00fcm\u00fcn\u00fc_se\u00e7
-Unselect_All=T\u00fcm_se\u00e7imleri_kald\u0131r
-Expand_All=T\u00fcm\u00fcn\u00fc_geni\u015flet
-Collapse_All=T\u00fcm_geni\u015fletmeyi_kald\u0131r
-Select_Directory=Dizin_Se\u00e7
-Choose_Directory=Dizin_Se\u00e7
-Use_the_selected_directory_to_start_with_the_search.=Aramay\u0131_ba\u015flatmak_i\u00e7in_se\u00e7ili_dizini_kullan.
-Browse...=G\u00f6z_at...
-Opens_the_file_browser.=Dosya_g\u00f6z_at\u0131c\u0131s\u0131n\u0131_ba\u015flat\u0131r.
-Scan_directory=Dizini_tara
-Searches_the_selected_directory_for_unlinked_files.=Se\u00e7ili_dizini_ba\u011flant\u0131s\u0131z_dosyalar_i\u00e7in_tarar.
-Starts_the_import_of_bibtex_entries.=Bibtex_girdilerinin_i\u00e7e_aktar\u0131m\u0131_ba\u015flat\u0131r.
-Leave_this_dialog.=Bu_ileti\u015fim_kutusunu_terket.
-Create_directory_based_keywords=Dizin_tabanl\u0131_anahtar_s\u00f6zc\u00fckler_olu\u015ftur
-Creates_keywords_in_created_entrys_with_directory_pathnames=Olu\u015fturulan_girdilerde_dizin_yol_adlar\u0131yla_anahtar_s\u00f6zc\u00fckler_olu\u015fturur
-Select_a_directory_where_the_search_shall_start.=Araman\u0131n_ba\u015flayaca\u011f\u0131_dizini_se\u00e7in.
-Select_file_type\:=Dosya_t\u00fcr\u00fc_se\u00e7in\:
-These_files_are_not_linked_in_the_active_database.=Bu_dosyalar\u0131n_aktif_veri_taban\u0131nda_ba\u011flant\u0131lar\u0131_yok.
-Entry_type_to_be_created\:=Olu\u015fturulacak_girdi_t\u00fcr\u00fc\:
-Searching_file_system...=Dosya_sistemi_aran\u0131yor...
-Importing_into_Database...=Veritaban\u0131na_aktar\u0131l\u0131yor...
-Select_directory=Dizin_se\u00e7
-Select_files=Dosya_se\u00e7
-Bibtex_entry_creation=Bibtex_girdisi_olu\u015fturma
-<No_selection>=<Se\u00e7im_yok>
-Push_selection_to_TeXstudio=Se\u00e7imi_TeXstudio'ya_it
-Path_to_TeXstudio=TeXstudio'nun_yolu
-Program_'%0'_not_found='%0'_program\u0131_bulunamad\u0131
-Pushed_citations_to_TeXstudio=Al\u0131nt\u0131lar_TeXstudio'ya_itildi
-Unable_to_connect_to_freecite_online_service.=FreeCite_\u00e7evrimi\u00e7i_servisine_ba\u011flan\u0131lamad\u0131.
-Parse_with_FreeCite=FreeCite_ile_\u00e7\u00f6z\u00fcmle
-Insert_selected_citations_into_TeXstudio=Se\u00e7ili_al\u0131nt\u0131lar\u0131_TexStudio'ya_ekle
-The_current_BibTeX_key_will_be_overwritten._Continue?=Mevcut_BibTeX_anahtar\u0131n\u0131n_\u00fczerine_yaz\u0131lacak._Devam_edilsin_mi?
-Overwrite_key=Anahtar\u0131n_\u00fczerine_yaz
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Mevcut_anahtar\u0131n_\u00fczerine_yaz\u0131lm\u0131yor._Bu_ayar\u0131_de\u011fi\u015ftirmek_i\u00e7in_Se\u00e7enekler_->_Tercihler_->_BibTeX_anahtar_olu\u015fturucusu'nu_a\u00e7\u0131n
-How_would_you_like_to_link_to_'%0'?='%0'a_nas\u0131l_ba\u011flant\u0131_istersiniz?
-
-Bibtex_key_patterns=Bibtex_anahtar_paternleri
-Changed_special_field_settings=De\u011fi\u015ftirilmi\u015f_\u00f6zel_alan_ayarlar\u0131
-Clear_priority=\u00d6nceli\u011fi_sil
-Clear_rank=R\u00fctbeyi_sil
-Compact_rank=R\u00fctbeyi_s\u0131k\u0131la\u015ft\u0131r
-Convert_1st,_2nd,_..._to_real_superscripts=1.,_2.,_..._vs.'yi_ger\u00e7ek_\u00fcst_karaktere_d\u00f6n\u00fc\u015ft\u00fcr
-Dropped_comment_from_database=Yorum_veri_taban\u0131ndan_\u00e7\u0131kart\u0131ld\u0131
-Enable_PDF_preview=PDF_\u00f6nizlemeyi_etkinle\u015ftir
-Enable_special_fields=\u00d6zle_alanlar\u0131_etkinle\u015ftir
-Five_stars=Be\u015f_y\u0131ld\u0131z
-Four_stars=D\u00f6rt_y\u0131ld\u0131z
-Help_on_special_fields=\u00d6zle_alanlar_konusunda_yard\u0131m
-Keywords_of_selected_entries=Se\u00e7ili_girdilerin_anahtar_s\u00f6zc\u00fckleri
-Manage_content_selectors=\u0130\u00e7erik_se\u00e7icileri_y\u00f6net
-Manage_keywords=Anahtar_s\u00f6zc\u00fckleri_y\u00f6net
-Marked_entries'_quality_as_good=Girdilerin_kalitesi_iyi_olarak_i\u015faretlendi
-Marked_entries_as_relevant=Girdiler_ilgili_olarak_i\u015faretlendi
-No_priority_information=\u00d6ncelik_bilgisi_yok
-No_rank_information=R\u00fctbe_bilgisi_yok
-One_star=Bir_y\u0131ld\u0131z
-Priority=\u00d6ncelik
-Priority_high=\u00d6ncelik_y\u00fcksek
-Priority_low=\u00d6ncelik_d\u00fc\u015f\u00fck
-Priority_medium=\u00d6ncelik_orta
-Quality=Kalite
-Rank=R\u00fctbe
-Relevance=\u0130lgi_d\u00fczeyi
-Set_priority=\u00d6ncelik_ata
-Set_priority_to_high=\u00d6nceli\u011fi_y\u00fckse\u011fe_ayarla
-Set_priority_to_low=\u00d6nceli\u011fi_d\u00fc\u015f\u00fc\u011fe_ayarla
-Set_priority_to_medium=\u00d6nceli\u011fi_ortaya_ayarla
-Set_rank_to_five_stars=R\u00fctbeyi_be\u015f_y\u0131ld\u0131za_ayarla
-Set_rank_to_four_stars=R\u00fctbeyi_d\u00f6rt_y\u0131ld\u0131za_ayarla
-Set_rank_to_one_star=R\u00fctbeyi_bir_y\u0131ld\u0131za_ayarla
-Set_rank_to_three_stars=R\u00fctbeyi_\u00fc\u00e7_y\u0131ld\u0131za_ayarla
-Set_rank_to_two_stars=R\u00fctbeyi_iki_y\u0131ld\u0131za_ayarla
-Show_one_letter_heading_for_icon_columns=Simge_s\u00fctunlar\u0131_i\u00e7in_bir_harfli_ba\u015fl\u0131k_g\u00f6ster
-Show_priority=\u00d6nceli\u011fi_g\u00f6ster
-Show_quality=Kaliteyi_g\u00f6ster
-Show_rank=R\u00fctbeyi_g\u00f6ster
-Show_relevance=\u0130lgi_d\u00fczeyini_g\u00f6ster
-Synchronize_with_keywords=Anahtar_s\u00f6zc\u00fcklerle_e\u015fzamanla
-Synchronized_special_fields_based_on_keywords=Anahtar_s\u00f6zc\u00fcklere_dayanarak_\u00f6zel_alanlar_e\u015fzamanland\u0131
-Three_stars=\u00dc\u00e7_y\u0131ld\u0131z
-Toggle_relevance=\u0130lgi_d\u00fczeyini_de\u011fi\u015ftir
-Toogle_quality_assured=Kalite_g\u00fcvencesini_de\u011fi\u015ftir
-Two_stars=\u0130ki_y\u0131ld\u0131z
-Update_keywords=Anahtar_s\u00f6zc\u00fckleri_g\u00fcncelle
-Write_values_of_special_fields_as_separate_fields_to_BibTeX=\u00d6zel_alan_de\u011ferlerini_BibTex'e_ayr\u0131_alanlar_olarak_yaz
-You_have_changed_settings_for_special_fields.=\u00d6zel_alan_ayarlar\u0131n\u0131_de\u011fi\u015ftirdiniz.
-no_preview_available=\u00f6nizleme_yok
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_girdi_bulundu._Sunucu_y\u00fck\u00fcn\u00fc_azaltmak_i\u00e7in_yaln\u0131zca_%1_indirilecek.
-A_string_with_that_label_already_exists=Bu_etikete_sahip_bir_dizge_zaten_mevcut
-Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=OpenOffice_ba\u011flant\u0131s\u0131_koptu._L\u00fctfen_OpenOffice'in_a\u00e7\u0131k_oldu\u011funu_teyid_edin,_ve_tekrar_ba\u011flanmay\u0131_deneyin.
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Girdiyi_d\u00fczeltin,_ve_kayna\u011f\u0131_g\u00f6rmek/d\u00fczenlemek_i\u00e7in_d\u00fczenleyiciyi_tekrar_a\u00e7\u0131n.
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=\u00d6al\u0131\u015fan_bir_gnuserv_s\u00fcrecine_ba\u011flan\u0131lamad\u0131._Emacs_ya_da_XEmacs'\u0131n_\u00e7al\u0131\u015ft\u0131\u011f\u0131na_ve<BR>sunucunun_ba\u015flat\u0131ld\u0131\u011f\u0131na_('server-start'/'gnuserv-start'_komutu_\u00e7al\u0131\u015ft\u0131r\u0131larak)_emin_olun,
-Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=\u00c7al\u0131\u015fan_OpenOffice'e_ba\u011flan\u0131lam\u0131yor.\nOpenOffice'i_Java_deste\u011fiyle_kurdu\u011funuza_emin_olun.\nManuel_ba\u011flan\u0131yorsan\u0131z_program_ve_k\u00fct\u00fcphane_yollar\u0131n\u0131_kontrol_edin.\n\nHata_mesaj\u0131\:_
-Created_group_"%0".=Grup_"%0"_olu\u015fturuldu.
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Dosya_d\u0131\u015far\u0131dan_g\u00fcncellendi._Kaydetmek_istedi\u011finize_emin_misiniz?
-If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=E\u011fer_yap\u0131\u015ft\u0131r\u0131lm\u0131\u015f_ya_da_i\u00e7e_aktar\u0131lm\u0131\u015f_bir_girdi_alan\u0131_atad\u0131ysa_\u00fczerine_yaz.
-Import_Metadata_From_PDF=Metadata'y\u0131_PDF'ten_\u0130\u00e7e_Aktar
-Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Herhangi_bir_Writer_belgesine_ba\u011flan\u0131lmad\u0131._L\u00fctfen_bir_belgenin_a\u00e7\u0131k_oldu\u011funa_emin_olun_ve_ona_ba\u011flanmak_i\u00e7in_"Write_belgesini_se\u00e7"_d\u00fc\u011fmesini_kullan\u0131n.
-Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=L\u00fctfen_bunun_erken_bir_beta_s\u00fcr\u00fcm\u00fc_oldu\u011funu_kaydedin._Dosyalar\u0131n\u0131z\u0131_yedeklemeden_kullanmay\u0131n!
-Removed_all_subgroups_of_group_"%0".=Grup_"%0"'\u0131n_b\u00fct\u00fcn_alt_gruplar\u0131_silindi.
-To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=Ta\u015f\u0131nabilir_haf\u0131za_kart\u0131_kipini_etkisizle\u015ftirmek_i\u00e7in_JabRef'le_ayn\u0131_klas\u00f6rdeki_jabref.xml_dosyas\u0131n\u0131_silin_ya_da_ad\u0131n\u0131_de\u011fi\u015ftirin.
-Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Ba\u011flan\u0131lamad\u0131._Bir_olas\u0131_neden_JabRef_ve_OpenOffice/LibreOffice'in_birlikte_32_bit_ya_da_64_bit_kipinde_\u00e7al\u0131\u015fmamas\u0131d\u0131r.
-Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Eklenti_isim_ve_s\u00fcr\u00fcm\u00fc_belirlenemedi._Bu_ge\u00e7erli_bir_JabRef_eklentisi_olmayabilir.
-Use_the_following_delimiter_character(s)\:=A\u015fa\u011f\u0131daki_s\u0131n\u0131rlat\u0131c\u0131_karakter(ler)i_kullan\u0131n\:
-When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=Dosya_indirirken_ya_da_ba\u011flant\u0131l\u0131_dosyalar\u0131_dosya_dizinine_ta\u015f\u0131rken,_yukar\u0131da_atanan_dosya_dizini_yerine_bib_dosyas\u0131_konumunu_tercih_edin
-Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Stil_dosyan\u0131z,_mevcut_OpenOffice_belgenizde_tan\u0131mlanmam\u0131\u015f_olan_'%0'_karakter_format\u0131n\u0131_belirtiyor.
-Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Stil_dosyan\u0131z,_mevcut_OpenOffice_belgenizde_tan\u0131mlanmam\u0131\u015f_olan_'%0'_paragraf_format\u0131n\u0131_belirtiyor.
-
-Error_fetching_from_Google_Scholar=Google_Akademik'ten_getirmede_hata
-Run_HTML_converter_on_title=Ba\u015fl\u0131kta_HTML_d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fcy\u00fc_\u00e7al\u0131\u015ft\u0131r
-Searching...=Ar\u0131yor...
-You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=\u0130ndirmek_i\u00e7in_%0'dan_fazla_girdi_se\u00e7tiniz._\u00c7ok_say\u0131da_h\u0131zl\u0131_indirme_yaparsan\u0131z_baz\u0131_web_siteleri_sizi_bloke_edebilir._Devam_etmek_istiyor_musunuz?
-Confirm_selection=Se\u00e7imi_onayla
-Unknown_DOI\:_'%0'.=Bilinmeyen_DOI\:_'%0'.
-Get_BibTeX_entry_from_DOI=BibTeX_girdisini_DOI'den_al
-Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Alt_ve_\u00fcstsimgeleri_metinden_ziyade_denklemlere_d\u00f6n\u00fc\u015ft\u00fcrmeyi_tercih_et
-Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Aramada_do\u011fru_k\u00fc\u00e7\u00fck_b\u00fcy\u00fck_harf_se\u00e7imi_i\u00e7in_belirli_ba\u015fl\u0131k_s\u00f6zc\u00fcklerine_{}_ekleyin
-Import_conversions=D\u00f6n\u00fc\u015f\u00fcmleri_i\u00e7e_aktar
-Run_filter_on_title_keeping_the_case_of_selected_words=Se\u00e7ili_s\u00f6zc\u00fcklerin_k\u00fc\u00e7\u00fck_b\u00fcy\u00fck_harflerini_koruyarak_ba\u015fl\u0131\u011fa_s\u00fczge\u00e7_uygula
-Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=IEEE_Xplore_sunucusunda_aral\u0131kl\u0131_hatalar._L\u00fctfen_bir_s\u00fcre_sonra_tekrar_deneyin.
-Please_enter_a_search_string=L\u00fctfen_bir_arama_dizgesi_girin
-Please_open_or_start_a_new_database_before_searching=L\u00fctfen_aramadan_\u00f6nce_bir_veri_taban\u0131_a\u00e7\u0131n_ya_da_ba\u015flat\u0131n
-An_Error_occurred_while_fetching_from_ADS_(%0)\:=ADS'den_getirirken_bir_hata_olu\u015ftu_(%0)\:
-Error_while_fetching_from_ADS=ADS'den_getirirken_hata
-Error_while_fetching_from_OAI2=OAI2'den_getirirken_hata
-An_Error_occurred_while_parsing_abstract=\u00d6zet_ayr\u0131\u015ft\u0131r\u0131l\u0131rken_bir_hata_olu\u015ftu
-Get_BibTeX_entry_from_DiVA=BibTeX_girdisini_DIVA'dan_al
-Log=Kay\u0131t
-Remove_unneccessary_$,_{,_and_}=Zorunlu_olmayan_$,_{,_ve_}_lar\u0131 sil
-Unknown_DiVA_entry\:_'%0'.=_'%0'.=Bilinmeyen_DiVA_girdisi:_'%0'.
+#!
+#! created/edited by Popeye version 0.55 (https://github.com/koppor/popeye)
+#! encoding:ISO-8859-1
+%0_contains_the_Regular_Expression_<b>%1</b>=%0_\u015fu_D\u00fczenli_\u0130fadeyi_i\u00e7eriyor_<b>%1</b>
+%0_contains_the_term_<b>%1</b>=%0_\u015fu_terimi_i\u00e7eriyor_<b>%1</b>
+%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_\u015fu_D\u00fczenli_\u0130fadeyi_i\u00e7ermiyor_<b>%1</b>
+%0_doesn't_contain_the_term_<b>%1</b>=%0_\u015fu_terimi_i\u00e7ermiyor_<b>%1</b>
+%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_\u015fu_D\u00fczenli_\u0130fadeyle_e\u015fle\u015fmiyor_<b>%1</b>
+%0_doesn't_match_the_term_<b>%1</b>=%0_\u015fu_terimle_e\u015fle\u015fmiyor_<b>%1</b>
+%0_export_successful=%0_d\u0131\u015fa_aktar\u0131m_ba\u015far\u0131l\u0131
+%0_field_set=%0_alan_k\u00fcmesi
+%0_matches_the_Regular_Expression_<b>%1</b>=%0_\u015fu_D\u00fczenli_\u0130fadeyle_e\u015fle\u015fiyor_<b>%1</b>
+%0_matches_the_term_<b>%1</b>=%0_\u015fu_terimle_e\u015fle\u015fiyor_<b>%1</b>
+<field_name>=<alan_ad\u0131>
+<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>'%1'_girdisinden_ba\u011flant\u0131l\u0131<BR>'%0'_dosyas\u0131_bulunamad\u0131</HTML>
+<no_field>=<alan_yok>
+<select>=<se\u00e7>
+<select_word>=<s\u00f6zc\u00fck_se\u00e7>
+A_string_with_this_label_already_exists=Bu_etikete_sahip_bir_dizgi_zaten_var
+Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Se\u00e7ili_girdilerin_dergi_isimlerini_k\u0131salt_(ISO_k\u0131saltmas\u0131)
+Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Se\u00e7ili_girdilerin_dergi_isimlerini_k\u0131salt_(MEDLINE_k\u0131saltmas\u0131)
+Abbreviate_names=\u0130simleri_k\u0131salt
+Abbreviated_%0_journal_names.=K\u0131salt\u0131lm\u0131\u015f_%0_dergi_isimleri.
+Abbreviation=K\u0131saltma
+About_JabRef=JabRef_Hakk\u0131nda
+Abstract=\u00d6zet
+Accept=Kabul_et
+Accept_change=De\u011fi\u015fikli\u011fi_kabul_et
+Action=Eylem
+Add=Ekle
+Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Bir_s\u0131n\u0131f_yolundan_(derlenmi\u015f)_\u00f6zel_\u0130\u00e7eAlmaBi\u00e7emi_s\u0131n\u0131f\u0131_ekle._\nYolun_JabRef'in_s\u0131n\u0131f_yolunda_olmas\u0131_gerekmez.
+Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Bir_Zip_ar\u015fivinden_(derlenmi\u015f)_\u00f6zel_\u0130\u00e7eAlmaBi\u00e7emi_s\u0131n\u0131f\u0131_ekle._\nYolun_JabRef'in_s\u0131n\u0131f_yolunda_olmas\u0131_gerekmez.
+add_entries_to_group=gruba_girdiler_ekle
+Add_entry_selection_to_this_group=Bu_gruba_girdi_se\u00e7imini_ekle
+Add_from_folder=Klas\u00f6rden_ekle
+Add_from_jar=Jar'dan_ekle
+add_group=grup_ekle
+Add_Group=Grup_Ekle
+Add_new=Yeni_ekle
+Add_Subgroup=Altgrup_ekle
+Add_to_group=Gruba_ekle
+Added_group_"%0".="%0"_grubu_eklendi.
+Added_new=Yeni_eklendi
+Added_string=Dizgi_eklendi
+Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Ek_olarak,_<b>%0</b>_alanlar\u0131_<b>%1</b>_i\u00e7ermeyen_girdiler_se [...]
+Advanced=Geli\u015fmi\u015f
+All_custom_file_types_will_be_lost._Proceed?=T\u00fcm_\u00f6zelle\u015ftirilmi\u015f_dosya_t\u00fcrleri_yitirilecek._Devam_edilsin_mi?
+All_Entries=T\u00fcm_Girdiler
+All_entries=T\u00fcm_girdiler
+All_entries_of_this_type_will_be_declared_typeless._Continue?=Bu_t\u00fcreden_t\u00fcm_girdiler_t\u00fcrs\u00fcz_olarak_bildirilecek._Devam_edilsin_mi?
+All_fields=T\u00fcm_alanlar
+All_subgroups_(recursively)=T\u00fcm_alt-gruplar_(\u00f6zyinelemeli)
+Allow_editing_in_table_cells=Tablo_h\u00fccrelerinde_d\u00fczenlemeye_izin_ver
+An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=OA12_kayna\u011f\u0131ndan_al\u0131n\u0131rken_bir_hata_olu\u015ftu_(%0)\:
+An_Exception_ocurred_while_accessing_'%0'='%0''e_eri\u015filirken_bir_istisna_olu\u015ftu
+An_SAXException_ocurred_while_parsing_'%0'\:='%0'_ayr\u0131\u015ft\u0131r\u0131l\u0131rken_bir_SAX\u0130stisnas\u0131_olu\u015ftu:
+and=ve
+and_inside_the_JabRef-jar\:=ve_JabRef-jar'\u0131n_i\u00e7inde\:
+and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=ve_bir_dahaki_sefer_JabRef'i_ba\u015flatt\u0131\u011f\u0131n\u0131zda_s\u0131n\u0131f_s\u0131n\u0131f_yolunuzda_bulunmal\u0131d\u0131r.
+any_field_that_matches_the_regular_expression_<b>%0</b>=<b>%0</b>_d\u00fczenli_ifadesine_uyan_herhangi_bir_alan
+Appearance=G\u00f6r\u00fcn\u00fcm
+Append=Sonuna_ekle
+Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=Bir_BibTeX_veritaban\u0131n\u0131n_i\u00e7eri\u011fini_halen_g\u00f6r\u00fcnt\u00fclenen_veritaban\u0131n\u0131n_sonuna_ekle
+Append_database=Veritaban\u0131n\u0131_sonuna_ekle
+append_the_selected_text_to_bibtex_key=se\u00e7ili_metni_bibtex_anahtar\u0131n\u0131n_sonuna_ekle
+Application=Uygulama
+Apply=Uygula
+Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=Arg\u00fcmanlar_\u00e7al\u0131\u015fan_JabRef_oturumuna_aktar\u0131ld\u0131._Kapat\u0131l\u0131yor.
+Assign_entry_selection_exclusively_to_this_group=Girdi_se\u00e7imini_\u00f6zellikle_bu_gruba_ata
+Assign_new_file=Yeni_dosya_ata
+Assign_the_original_group's_entries_to_this_group?=Orijinal_grubun_girdileri_bu_gruba_atans\u0131n_m\u0131?
+Assigned_%0_entries_to_group_"%1".=%0_girdi_"%1"_grubuna_atand\u0131.
+Assigned_1_entry_to_group_"%0".=Bir_girdi_"%0"_grubuna_atand\u0131.
+At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=En_az\u0131ndan_'net.sf.jabref.core'_eklentisi_orada_olmal\u0131.
+Attach_%0_file=%0_dosya_ekle
+Attach_URL=URL_ekle
+Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=Girdileriniz_i\u00e7in_%0_link_otokurma_giri\u015fiminde_bulunuluyor._Otokur,_e\u011fer_%0_dizinindeki_ya_da_bir_<BR>_altdizinindeki_%0_dosyas\u0131_bir_BibTeX_anahtar\u0131yla_\u00f6zde\u015f_adland\u0131r\u0131lm\u0131\u015f_art\u0131_uzant\u0131land\u0131l\u0131lm\u0131\u015fsa_\u00e7al\u0131\u015f\u0131r.
+Attempting_SQL_export...=SQL_d\u0131\u015fa_aktar\u0131ma_yelteniliyor...
+Auto=Oto
+Autodetect_format=Bi\u00e7emi_otomatik_tan\u0131
+Autogenerate_BibTeX_key=BibTeX_anahtar\u0131n\u0131_otomatik_olu\u015ftur
+Autogenerate_BibTeX_keys=BibTeX_anahtarlar\u0131n\u0131_otomatik_olu\u015ftur
+Autogenerate_groups=Gruplar\u0131_otomatik_olu\u015ftur
+autogenerate_keys=anahtarlar\u0131_otomatik_olu\u015ftur
+Autolink_files_with_names_starting_with_the_BibTeX_key=Adlar\u0131_BibTeX_anahtar\u0131yla_ba\u015flayan_dosyalar\u0131_otomatik_ba\u011fla
+Autolink_only_files_that_match_the_BibTeX_key=Yaln\u0131zca_BibTeX_anahtar\u0131yla_e\u015fle\u015fen_dosyalar\u0131_otomatik_ba\u011fla
+Automatically_create_groups=Gruplar\u0131_otomatik_olu\u015ftur
+Automatically_create_groups_for_database.=Veritaban\u0131_i\u00e7in_gruplar\u0131_otomatik_olu\u015ftur
+Automatically_created_groups=Otomatik_olu\u015fturulmu\u015f_gruplar
+Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=Grup_i\u00e7ermeyen_bir_veritaban\u0131na_ge\u00e7ildi\u011finde_grup_aray\u00fcz\u00fcn\u00fc_otomatik_sakla
+Automatically_remove_exact_duplicates=T\u0131pk\u0131_\u00e7ift_n\u00fcshalar\u0131_otomatik_sil
+Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=Grup_i\u00e7eren_bir_veritaban\u0131na_ge\u00e7ildi\u011finde_otomatik_olarak_grup_aaray\u00fcz\u00fcn\u00fc_g\u00f6ster
+Autoset=Otokur
+Autoset_%0_field=%0_alan\u0131n\u0131_otokur
+Autoset_%0_links._Allow_overwriting_existing_links.=%0_linklerini_otokur._Mevcut_linklerin_\u00fczerine_yazmaya_izin_ver.
+Autoset_%0_links._Do_not_overwrite_existing_links.=%0_linklerini_otokur._Mevcut_linklerin_\u00fczerine_yazma.
+Autoset_external_links=Harici_linkleri_otokur
+Autosetting_links=Linkler_otokuruluyor
+AUX_file_import=AUX_dosya_i\u00e7e_aktar\u0131m\u0131
+Available_export_formats=Mevcut_d\u0131\u015fa_aktar\u0131m_bi\u00e7emleri
+Available_fields=Mevcut_alanlar
+Available_import_formats=Mevcut_i\u00e7e_aktar\u0131m_bi\u00e7emleri
+Background_color_for_optional_fields=Se\u00e7meli_alanlar_i\u00e7in_arkaplan_rengi
+Background_color_for_required_fields=Zorunlu_alanlar_i\u00e7in_arkaplan_rengi
+Backup_old_file_when_saving=Kaydederken_eski_dosyay\u0131_yedekle
+Beta_version=Beta_s\u00fcr\u00fcm\u00fc
+Bibkey_to_filename_conversion=Bibkey'den_dosya_ad\u0131na_d\u00f6n\u00fc\u015f\u00fcm
+BibTeX_key=BibTeX_anahtar\u0131
+BibTeX_key_is_unique.=BibTeX_anahtar\u0131_benzersizdir.
+BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX_anahtar\u0131_kurulmad\u0131._\u0130ndirilen_dosya_i\u00e7in_bir_isim_giriniz
+BibTeX_source=BibTeX_kayna\u011f\u0131
+BibTeXML=BibTeXML
+Binding=Cilt
+Broken_link=Bozuk_link
+Browse=G\u00f6z_at
+by=ile
+Calling_external_viewer...=Harici_g\u00f6r\u00fcnt\u00fcleyici_\u00e7a\u011fr\u0131l\u0131yor...
+Cancel=\u0130ptal
+Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Anahtarlar_olu\u015fturulmadan_gruba_girdiler_eklenemez._Anahtarlar_olu\u015fturulsun_mu?
+Cannot_merge_this_change=Bu_de\u011fi\u015fiklik_birle\u015ftirilemiyor
+Cannot_move_group_"%0"_down.="%0"_grubu_a\u015fa\u011f\u0131ya_ta\u015f\u0131nam\u0131yor.
+Cannot_move_group_"%0"_left.="%0"_grubu_sola_ta\u015f\u0131nam\u0131yor.
+Cannot_move_group_"%0"_right.="%0"_grubu_sa\u011fa_ta\u015f\u0131nam\u0131yor.
+Cannot_move_group_"%0"_up.="%0"_grubu_yukar\u0131ya_ta\u015f\u0131nam\u0131yor.
+case_insensitive=b\u00fcy\u00fck/k\u00fc.\u00fck_harfe_duyars\u0131z
+case_sensitive=b\u00fcy\u00fck/k\u00fc\u00e7\u00fck_harfe_duyarl\u0131
+Case_sensitive=B\u00fcy\u00fck/k\u00fc\u00e7\u00fck_harfe_duyarl\u0131
+change_assignment_of_entries=girdilerin_atanmas\u0131n\u0131_de\u011fi\u015ftir
+Change_case=B\u00fcy\u00fck/k\u00fc\u00e7\u00fck_harf_de\u011fi\u015ftir
+Change_entry_type=Girdi_t\u00fcr\u00fcn\u00fc_de\u011fi\u015ftir
+Change_file_type=Dosya_t\u00fcr\u00fcn\u00fc_de\u011fi\u015ftir
+change_key=anahtar_de\u011fi\u015ftir
+Change_of_Grouping_Method=Gruplama_Y\u00f6ntemi_De\u011fi\u015fikli\u011fi
+change_preamble=\u00f6nc\u00fcl\u00fc_de\u011fi\u015ftir
+change_string_content=dizge_i\u00e7eri\u011fini_de\u011fi\u015ftir
+change_string_name=dizge_ad\u0131n\u0131_de\u011fi\u015ftir
+Change_table_column_and_General_fields_settings_to_use_the_new_feature=Yeni_\u00f6zelli\u011fi_kullanmak_i\u00e7in_tablo_s\u00fctun_ve_Genel_alan_ayarlar\u0131n\u0131_de\u011fi\u015ftirin
+change_type=t\u00fcr_de\u011fi\u015ftir
+changed_=de\u011fi\u015fti_
+Changed_font_settings=Font_ayarlar\u0131_de\u011fi\u015fti
+Changed_language_settings=Dil_ayarlar\u0131_de\u011fi\u015fti
+Changed_look_and_feel_settings=G\u00f6r\u00fcn\u00fcm_ve_tema_ayarlar\u0131_de\u011fi\u015fti
+Changed_preamble=\u00d6nc\u00fcl_de\u011fi\u015fti
+Changed_type_to=T\u00fcr_\u015funa_de\u011fi\u015fti
+Characters_to_ignore=Yoksay\u0131lacak_karakterler
+Check_existing_%0_links=Mevcut_%0_linki_kontrol_ediniz
+Check_links=Linkleri_kontrol_ediniz
+Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=\u0130ndirilecek_URL'i_se\u00e7iniz._\u00d6ntan\u0131ml\u0131_de\u011fer_JabRef_geli\u015ftiricilerince_sa\u011flanan_bir_listeye_i\u015faret_eder.
+Cite_command=Al\u0131nt\u0131_komutu
+Class_name=S\u0131n\u0131f_ad\u0131
+Clear=Sil
+clear_all_groups=t\u00fcm_gruplar\u0131_sil
+Clear_field=Alan\u0131_sil
+Clear_fields=Alanlar\u0131_sil
+Clear_highlight=Vurgulamay\u0131_sil
+Close=Kapat
+Close_dialog=Dialo\u011fu_kapat
+Close_the_current_database=G\u00fcncel_veritaban\u0131n\u0131_kapat
+Close_the_help_window=Yard\u0131m_penceresini_kapat
+Close_window=Pencereyi_kapat
+Closed_database=Kapal\u0131_veritaban\u0131
+Collapse_subtree=Alta\u011fac\u0131_daralt
+Color_codes_for_required_and_optional_fields=Zorunlu_ve_se\u00e7meli_alanlar_i\u00e7in_renk_kodlar\u0131
+Color_for_marking_incomplete_entries=Tamamlanmam\u0131\u015f_girdileri_i\u015faretlemek_i\u00e7in_renk
+Column_width=S\u00fctun_geni\u015fli\u011fi
+Command_line_id=Komut_sat\u0131r_no
+Complete_record=Tam_kay\u0131t
+Connect=Ba\u011flan
+Connect_to_SQL_database=SQL_veritaban\u0131na_ba\u011flan
+Connect_to_SQL_Database=SQL_Veritaban\u0131na_ba\u011flan
+Connection_to_IEEEXplore_failed=IEEEXplore'a_ba\u011flant\u0131_ba\u015far\u0131s\u0131z
+Contained_in=\u015eunun_i\u00e7inde
+Content=\u0130\u00e7erik
+Copied=Kopyaland\u0131
+Copied_cell_contents=H\u00fccre_i\u00e7erikleri_kopyaland\u0131
+Copied_key=Kopyalanan_anahtar
+Copied_keys=Kopyalanan_anahtarlar
+Copy=Kopyala
+Copy_BibTeX_key=BibTeX_anahtar\u0131n\u0131_kopyala
+Copy_file_to_file_directory.=Dosyay\u0131_dosya_dizinine_kopyala
+Copy_files_to_file_directory.=Dosyalar\u0131_dosya_dizinine_kopyala
+Copy_to_clipboard=Panoya_kopyala
+Could_not_call_executable=Program_\u00e7a\u011fr\u0131lam\u0131yor
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=\u00c7al\u0131\u015fan_bir_gnuserve_s\u00fcrecine_ba\u011flanam\u0131yor._Emacs_ya_da_XEmacs'\u0131n_\u00e7al\u0131\u015ft\u0131\u011f\u0131na_ve_sunucunun<BR>('gnuserv-start'_komutuyla)_ba\u015flat\u0131ld\u0131\u011f\u0131na_emin_olun.
+Could_not_connect_to_host_=\u015eu_makineye_ba\u011flan\u0131lam\u0131yor_
+Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Vim_sunucusuna_ba\u011flan\u0131lam\u0131yor._Vim'in_do\u011fru_sunucu_ad\u0131yla<BR>\u00e7al\u0131\u015ft\u0131\u011f\u0131na_emin_olun.
+Could_not_export_file=Dosya_d\u0131\u015fa_aktar\u0131lam\u0131yor
+Could_not_export_preferences=Tercihler_d\u0131\u015fa_aktar\u0131lam\u0131yor
+Could_not_find_a_suitable_import_format.=Uygun_i\u00e7e_aktar\u0131m_bi\u00e7emi_bulunam\u0131yor.
+Could_not_find_directory_for_%0-files\:_%1=%0-dosyalar_i\u00e7in_dizin_bulunam\u0131yor\:_%1
+Could_not_find_image_file=Resim_dosyas\u0131_bulunam\u0131yor
+Could_not_find_layout_file=Yerle\u015fim_dosyas\u0131_bulunam\u0131yor
+Could_not_import_preferences=Tercihler_i\u00e7e_aktar\u0131lam\u0131yor
+Could_not_instantiate_%0=%0_somutla\u015ft\u0131r\u0131lam\u0131yor
+Could_not_instantiate_%0_%1=%0_%1_somutla\u015ft\u0131r\u0131lam\u0131yor
+Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=%0_somutla\u015ft\u0131r\u0131lam\u0131yor._Do\u011fru_paket_yolunu_se\u00e7mi\u015f_miydiniz?
+Could_not_open_link=Link_a\u00e7\u0131lam\u0131yor
+Could_not_parse_number_of_hits=Ula\u015f\u0131lma_say\u0131s\u0131_ayr\u0131\u015ft\u0131r\u0131lam\u0131yor
+Could_not_print_preview=Yazd\u0131rma_\u00f6nizlenemiyor
+Could_not_run_the_'vim'_program.='Vim'_program\u0131_\u00e7al\u0131\u015ft\u0131r\u0131lam\u0131yor.
+Could_not_save_file=Dosya_kaydedilemiyor
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Dosya_kaydedilemiyor._'%0'_karakter_kodlamas\u0131_desteklenmiyor.
+Create_group=Grup_olu\u015ftur
+Created_groups.=Olu\u015fturulmu\u015f_gruplar.
+crossreferenced_entries_included=\u00e7apraz_ba\u011flant\u0131l\u0131_girdiler_dahil_edildi
+Current_content=G\u00fcncel_i\u00e7erik
+Current_value=G\u00fcncel_de\u011fer
+Custom_entry_types=\u00d6zel_girdi_t\u00fcrleri
+Custom_entry_types_found_in_file=Dosyada_\u00f6zel_girdi_t\u00fcrleri_bulundu
+Custom_icon_theme=\u00d6zel_simge_temas\u0131
+Custom_icon_theme_file=\u00d6zel_simge_tema_dosyas\u0131
+Custom_importers=\u00d6zel_i\u00e7e_aktar\u0131c\u0131\u0131lar
+Customize_entry_types=Girdi_t\u00fcrlerini_\u00f6zelle\u015ftir
+Customize_key_bindings=Tu\u015f_ba\u011flant\u0131lar\u0131n\u0131_\u00f6zelle\u015ftir
+Cut=Kes
+cut_entries=girdileri_kes
+cut_entry=girdiyi_kes
+Cut_pr=Kes
+Database_\:=Veritaban\u0131_\:
+Database_encoding=Veritaban\u0131_kodlamas\u0131
+Database_has_changed._Do_you_want_to_save_before_closing?=Veritaban\u0131_de\u011fi\u015fti._Kapatmadan_\u00f6nce_kaydetmek_ister_misiniz?
+Database_properties=Veritaban\u0131_\u00f6zellikleri
+Date_format=Tarih_bi\u00e7emi
+Default=\u00d6ntan\u0131ml\u0131
+Default_encoding=\u00d6ntan\u0131ml\u0131_kodlama
+Default_grouping_field=\u00d6ntan\u0131ml\u0131_gruplama_alan\u0131
+Default_look_and_feel=\u00d6ntan\u0131ml\u0131_g\u00f6r\u00fcn\u00fcm_ve_tema
+Default_pattern=\u00d6ntan\u0131ml\u0131_desen
+Default_sort_criteria=\u00d6ntan\u0131ml\u0131_s\u0131ralama_\u00f6l\u00e7\u00fctleri
+Define_'%0'='%0'i_tan\u0131mla
+Delete=Sil
+Delete_custom_format=\u00d6zel_bi\u00e7emi_sil
+delete_entries=girdileri_sil
+Delete_entry=Girdiyi_sil
+delete_entry=girdiyi_sil
+Delete_multiple_entries=\u00c7ok_say\u0131da_girdiyi_sil
+Delete_rows=Sat\u0131rlar\u0131_sil
+Delete_strings=Dizgeleri_sil
+Deleted=Silindi
+Delimit_fields_with_semicolon,_ex.=Alanlar\u0131_\u00f6r._noktal\u0131_virg\u00fclle_s\u0131n\u0131rland\u0131r
+Descending=Azalan
+Description=Tarif
+Deselect_all=T\u00fcm\u00fcn\u00fcn_se\u00e7imini_kald\u0131r
+Deselect_all_duplicates=T\u00fcm_\u00e7ift_n\u00fcshalar\u0131n_se\u00e7imini_kald\u0131r
+Details=Ayr\u0131nt\u0131lar
+Disable_entry_editor_when_multiple_entries_are_selected=\u00c7ok_say\u0131da_girdi_se\u00e7ildi\u011finde_girdi_d\u00fczenleyicisini_etkisiz_k\u0131l
+Disable_this_confirmation_dialog=Bu_onaylama_penceresini_etkisizle\u015ftir
+Disable_this_warning_dialog=Bu_uyar\u0131_penceresini_etkisizle\u015ftir
+Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Se\u00e7ili_bir_ya_da_daha_fazla_gruba_ait_t\u00fcm_girdileri_g\u00f6ster.
+Display_all_error_messages=T\u00fcm_hata_mesajlar\u0131n\u0131_g\u00f6ster
+Display_help_on_command_line_options=Komut_sat\u0131r\u0131_se\u00e7enekleri_hakk\u0131ndaki_yard\u0131m\u0131_g\u00f6ster
+Display_imported_entries_in_an_inspection_window_before_they_are_added.=\u0130\u00e7e_aktar\u0131lan_girdileri_eklemeden_\u00f6nce_bir_inceleme_penceresinde_g\u00f6ster.
+Display_only_entries_belonging_to_all_selected_groups.=Yaln\u0131zca_se\u00e7ili_t\u00fcm_gruplara_ait_girdileri_g\u00f6ster.
+Display_version=S\u00fcr\u00fcm\u00fc_g\u00f6ster
+Displaying_no_groups=Gruplar_g\u00f6sterilmiyor
+Do_not_abbreviate_names=\u0130simleri_k\u0131saltma
+Do_not_autoset=Otomatik_kurma
+Do_not_import_entry=Girdiyi_i\u00e7e_aktarma
+Do_not_open_any_files_at_startup=Ba\u015flang\u0131\u00e7ta_hi\u00e7bir_dosyay\u0131_a\u00e7ma
+Do_not_overwrite_existing_keys=Mevcut_anahtarlar\u0131n_\u00fczerine_yazma
+Do_not_show_splash_window_at_startup=Ba\u015flang\u0131\u00e7ta_a\u00e7\u0131l\u0131\u015f_penceresini_g\u00f6sterme
+Do_not_show_these_options_in_the_future=Gelecekte_bu_se\u00e7enekleri_g\u00f6sterme
+Do_not_wrap_the_following_fields_when_saving=Kaydederken_a\u015fa\u011f\u0131daki_alanlar\u0131_sarmalama
+Do_not_write_the_following_fields_to_XMP_Metadata\:=A\u015fa\u011f\u0131daki_alanlar\u0131_XMP_Metadata'ya_yazma\:
+Do_you_want_JabRef_to_do_the_following_operations?=JabRef'in_a\u015fa\u011f\u0131daki_i\u015flemleri_yapmas\u0131n\u0131_ister_misiniz?
+DocBook=DocBook
+Down=A\u015fa\u011f\u0131
+Download=\u0130ndir
+Download_completed=\u0130ndrme_tamamland\u0131
+Download_file=Dosya_indir
+Downloading...=\u0130ndiriliyor...
+Drag_and_Drop_Error=S\u00fcr\u00fckle_ve_B\u0131rak_Hatas\u0131
+Drop_%0=%0'i_b\u0131rak
+duplicate_BibTeX_key=\u00e7ift_n\u00fcsha_BibTeX_anahtar\u0131
+Duplicate_BibTeX_key.=\u00c7ift_n\u00fcsha_BibTeX_anahtar\u0131.
+Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=\u00c7ift_n\u00fcsha_BibTeX_anahtar\u0131._Bu_girdi_i\u00e7in_gruplama_\u00e7al\u0131\u015fmayabilir.
+Duplicate_Key_Warning=\u00c7ift_n\u00fcsha_Anahtar_Uyar\u0131s\u0131
+Duplicate_pairs_found=\u00c7ift_n\u00fcsha_\u00e7iftler_bulundu
+duplicate_removal=\u00e7ift_n\u00fcsha_silme
+Duplicate_string_name=\u00c7ift_n\u00fcsha_dizge_ad\u0131
+Duplicates_found=\u00c7ift_n\u00fcshalar_bulundu
+Duplicates_removed=\u00c7ift_n\u00fcshalar_silindi
+Dynamic_groups=Devingen_gruplar
+Dynamically_group_entries_by_a_free-form_search_expression=Serbest_form_arama_ifadesiyle_devingence_grup_girdileri
+Dynamically_group_entries_by_searching_a_field_for_a_keyword=Bir_alan_ya_da_anahtar_s\u00f6zc\u00fck_aramayla_devingence_grup_girdileri
+Each_line_must_be_on_the_following_form=Her_sat\u0131r_a\u015fa\u011f\u0131daki_bi\u00e7imde_olmal\u0131d\u0131r
+Edit=D\u00fczenle
+Edit_custom_export=\u00d6zel_d\u0131\u015fa_aktar\u0131m\u0131_d\u00fczenle
+Edit_entry=Girdiyi_d\u00fczenle
+Edit_file_link=Dosya_linkini_d\u00fczenle
+Edit_file_type=Dosya_t\u00fcr\u00fcn\u00fc_d\u00fczenle
+Edit_group=Grubu_d\u00fczenle
+Edit_journal=Dergiyi_d\u00fczenle
+Edit_preamble=\u00d6nc\u00fcl\u00fc_d\u00fczenle
+Edit_strings=Dizgeleri_d\u00fczenle
+Editor_options=D\u00fczenleyici_se\u00e7enekleri
+empty_BibTeX_key=bo\u015f_BibTeX_anahtar\u0131
+Empty_BibTeX_key.=Bo\u015f_BibTeX_anahtar\u0131.
+Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Bo\u015f_BibTeX_anahtar\u0131._Bu_giri\u015f_i\u00e7in_gruplama_\u00e7al\u0131\u015fmayabilir.
+empty_database=bo\u015f_veritaban\u0131
+Enable_source_editing=Kaynak_d\u00fczenlemesini_etkinle\u015ftir
+Enable_word/name_autocompletion=S\u00f6zc\u00fck/isim_ototamamlamay\u0131_etkinle\u015ftir
+Endnote=Endnote
+Enter_URL=URL_gir
+Enter_URL_to_download=\u0130ndirilecek_URL'yi_girin
+entries=girdiler
+Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Girdiler_elle_bu_gruptan_silinemez_ya_da_bu_gruba_eklenemez.
+Entries_exported_to_clipboard=Girdiler_panoya_aktar\u0131ld\u0131
+entries_have_undefined_BibTeX_key=girdilier_tan\u0131mlanmam\u0131\u015f_BibTeX_anahtar\u0131na_sahipler
+entries_into_new_database=girdiler_yeni_veritaban\u0131na
+entry=girdi
+Entry_editor=Girdi_d\u00fczenleyici
+Entry_in_current_database=Girdi_g\u00fcncel_veritaban\u0131nda
+Entry_in_import=Girdi_i\u00e7e_aktar\u0131lanlar_aras\u0131nda
+Entry_preview=Girdi_\u00f6nizlemesi
+Entry_table=Girdi_tablosu
+Entry_table_columns=Girdi_tablosu_s\u00fctunlar\u0131
+Entry_type=Girdi_t\u00fcr\u00fc
+Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Girdi_t\u00fcr\u00fc_adlar\u0131n\u0131n_bo\u015fluk_ya_da_a\u015fa\u011f\u0131daki_karakterleri_i\u00e7ermesine_izin_verilmez
+Entry_types=Girdi_t\u00fcrleri
+Error=Hata
+Error\:_=Hata\:_
+Error_converting_Bibtex_to_XMP\:_%0=BibTeX'i_XMP'ye_d\u00f6n\u00fc\u015ft\u00fcrmede_hata:_%0
+Error_converting_XMP_to_'%0'...=XMP'yi_'%0'e_d\u00f6n\u00fc\u015ft\u00fcrmede_hata...
+Error_exporting_to_clipboard=Panoya_aktarmada_hata
+Error_in_field=Alanda_hata
+Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=Eklenti_sisteminde_hata._Onsuz_ba\u015flat\u0131l\u0131yor,_fakat_baz\u0131_i\u015flevler_eksik_kalabilir.
+Error_occured_when_parsing_entry=Girdi_ayr\u0131\u015ft\u0131r\u0131l\u0131rken_hata_olu\u015ftu
+Error_opening_file=Dosya_a\u00e7mada_hata
+Error_setting_field=Alan_atamada_hata
+Error_while_converting_BibtexEntry_to_XMP_%0=BibTeX'i_XMP'ye_d\u00f6n\u00fc\u015ft\u00fcr\u00fcrken_hata_%0
+Error_while_downloading_file\:=Dosya_indirilirken_hata\:
+Error_while_fetching_from_OIA2=OIA2'den_getirilirken_hata
+Error_while_writing=Yazarken_hata
+Error_writing_to_%0_file(s).=%0_dosya(lar)_yaz\u0131l\u0131rken_hata.
+Error_writing_XMP_to_file\:_%0=XMP_dosyaya_yaz\u0131l\u0131rken_hata\:_%0
+Establishing_SQL_connection...=SQL_ba\u011flant\u0131s\u0131_kuruluyor...
+Exceptions=\u0130stisnalar
+Existing_file=Varolan_dosya
+exists._Overwrite_file?=mevcut._Dosyan\u0131n_\u00fczerine_yaz\u0131ls\u0131n_m\u0131?
+exists._Overwrite?=mevcut.\u00dczerine_yaz\u0131ls\u0131n_m\u0131?
+Expand_subtree=Alta\u011fac\u0131_geni\u015flet
+Export=D\u0131\u015fa_aktar
+Export_name=Ad\u0131_d\u0131\u015fa_aktar
+Export_preferences=Tercihleri_d\u0131\u015fa_aktar
+Export_preferences_to_file=Tercihleri_dosyaya_aktar
+Export_properties=\u00d6zellikleri_d\u0131\u015fa_aktar
+Export_to_clipboard=Panoya_aktar
+Export_to_SQL_database=SQL_veritaban\u0131na_aktar
+Exporting=D\u0131\u015fa_aktar\u0131l\u0131yor
+Extension=Uzant\u0131
+External_changes=Harici_de\u011fi\u015fiklikler
+External_file_links=Harici_dosya_linkleri
+External_files=Harici_dosyalar
+External_programs=Harici_programlar
+External_viewer_called=Harici_g\u00f6r\u00fcnt\u00fcleyici_\u00e7a\u011fr\u0131ld\u0131
+Failed_to_read_groups_data_(unsupported_version\:_%0)=Grup_verisini_okuma_ba\u015far\u0131s\u0131z_(desteklenmeyen_s\u00fcr\u00fcm:_%0)
+Fetch=Getir
+Field=Alan
+field=alan
+Field_content=Alan_i\u00e7eri\u011fi
+Field_name=Alan_ad\u0131
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Alan_adlar\u0131n\u0131n_bo\u015fluk_ya_da_a\u015fa\u011f\u0131daki_karakterleri_i\u00e7ermesine_izin_verilmez
+Field_sizes=Alan_boyutlar\u0131
+Field_to_filter=S\u00fcz\u00fclecek_alan
+Field_to_group_by=Gruplanacak_alan
+Fields=Alanlar
+File=Dosya
+file=dosya
+File_'%0'_is_already_open.='%0'_dosyas\u0131_zaten_a\u00e7\u0131k.
+File_'%0'_not_found='%0'_dosyas\u0131_bulunamad\u0131
+File_changed=Dosya_de\u011fi\u015fti
+File_directory_is_'%0'\:=Dosya_dizini_'%0':
+File_directory_is_not_set_or_does_not_exist!=Dosya_dizini_kurulmad\u0131_ya_da_mevcut_de\u011fil!
+File_download=Dosya_indirme
+File_exists=Dosya_mevcut
+File_extension=Dosya_uzant\u0131s\u0131
+File_has_been_updated_externally._What_do_you_want_to_do?=Dosya_haricen_de\u011fi\u015ftirildi._Ne_yapmak_istersiniz?
+File_not_found=Dosya_bulunamad\u0131
+File_type=Dosya_t\u00fcr\u00fc
+File_updated_externally=Dosya_haricen_g\u00fcncellendi
+filename=dosya_ad\u0131
+Files_opened=A\u00e7\u0131lm\u0131\u015f_dosyalar
+Filter=S\u00fczge\u00e7
+Finished_autosetting_external_links.=Harici_linklerin_otokurulmas\u0131_bitti.
+Finished_synchronizing_%0_links._Entries_changed%c_%1.=%0_linkin_e\u015fzamanlamas\u0131_bitti._De\u011fi\u015fen_girdiler%c_%1.
+Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=XMP_metadata_yaz\u0131m\u0131_bitti._%0_dosyaya_yaz\u0131ld\u0131.
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=%0_dosya_i\u00e7in_XMP_yaz\u0131m\u0131_bitti_(%1_atland\u0131,_%2_hata).
+First_select_the_entries_you_want_keys_to_be_generated_for.=\u00d6nce_anahtar_olu\u015fturulmas\u0131n\u0131_istedi\u011finiz_girdileri_se\u00e7iniz.
+Fit_table_horizontally_on_screen=Tabloyu_ekrana_yatay_s\u0131\u011fd\u0131r
+Float=Y\u00fczd\u00fcr
+Float_marked_entries=Y\u00fczd\u00fcr_i\u015faretlenmi\u015f_girdiler
+Font_Family=Yaz\u0131tipi_Ailesi
+Font_Preview=Yaz\u0131tipi_\u00d6nizleme
+Font_Size=Yaz\u0131tipi_Boyutu
+Font_Style=Yaz\u0131tipi_Stili
+FontSelector=Yaz\u0131tipiSe\u00e7ici
+for=i\u00e7in
+Format_of_author_and_editor_names=Yazar_ve_d\u00fczenleyici_adlar\u0131_bi\u00e7emi
+Format_String=Dizgeyi_Bi\u00e7imle
+Format_used=Kullan\u0131lan_bi\u00e7em
+Formatter_Name=Bi\u00e7imleyici_Ad\u0131
+Formatter_not_found=Bi\u00e7imleyici_bulunamad\u0131
+found=bulundu
+Found_%0_plugin(s)=%0_eklenti_bulundu
+found_in_aux_file=yard\u0131mc\u0131_dosyada_bulundu
+Full_name=Tam_ad
+General=Genel
+General_fields=Genel_alanlar
+Generate=Olu\u015ftur
+Generate_BibTeX_key=BibTeX_anahtar\u0131_olu\u015ftur
+Generate_keys=Anahtarlar\u0131_olu\u015ftur
+Generate_keys_before_saving_(for_entries_without_a_key)=(Anahtars\u0131z_girdiler_i\u00e7in)_Kaydetmeden_\u00f6nce_anahtarlar\u0131_olu\u015ftur
+Generate_keys_for_imported_entries=\u0130\u00e7e_aktar\u0131lan_girdiler_i\u00e7in_anahtarlar\u0131_olu\u015ftur
+Generate_now=\u015eimdi_olu\u015ftur
+Generated_BibTeX_key_for=\u015eunun_i\u00e7in_BibTex_anahtar\u0131_olu\u015fturuldu
+Generating_BibTeX_key_for=\u015eunun_i\u00e7in_BibTeX_anahtar\u0131_olu\u015fturuluyor
+Grab=Yakala
+Gray_out_entries_not_in_group_selection=Grup_se\u00e7iminde_olmayan_girdileri_grile\u015ftir
+Gray_out_non-hits=\u0130sabet_almayanlar\u0131_grile\u015ftir
+Gray_out_non-matching_entries=E\u015fle\u015fmeyen_girdileri_grile\u015ftir
+Group_properties=Grup_\u00f6zellikleri
+grouping_may_not_work_for_this_entry=bu_girdi_i\u00e7in_gruplama_\u00e7al\u0131\u015fmayabilir
+Groups=Gruplar
+Harvard_RTF=Harvard_RTF
+Have_you_chosen_the_correct_package_path?=Do\u011fru_paket_yolunu_se\u00e7tiniz_mi?
+Help=Yard\u0131m
+Help_contents=Yard\u0131m_i\u00e7eri\u011fi
+Help_on_groups=Gruplar_hakk\u0131nda_yard\u0131m
+Help_on_key_patterns=Tu\u015f_desenleri_hakk\u0131nda_yard\u0131m
+Help_on_Preview_Settings=\u00d6nizleme_Ayarlar\u0131_hakk\u0131nda_yard\u0131m
+Help_on_Regular_Expression_Search=D\u00fczenli_\u0130fade_Arama_hakk\u0131nda_yard\u0131m
+Hide_non-hits=\u0130sabet_almayanlar\u0131_sakla
+Hide_non-matching_entries=E\u015fle\u015fmeyen_girdileri_sakla
+Hierarchical_context=Hiyerar\u015fik_i\u00e7erik
+Highlight=Vurgula
+Highlight_groups_matching_all_selected_entries=T\u00fcm_se\u00e7ili_girdilerle_e\u015fle\u015fen_gruplar\u0131_vurgula
+Highlight_groups_matching_any_selected_entry=Herhangi_bir_se\u00e7ili_girdiyle_e\u015fle\u015fen_gruplar\u0131_vurgula
+Highlight_overlapping_groups=\u00d6rt\u00fc\u015fen_gruplar\u0131_vurgula
+Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=\u0130pucu%c_Yaln\u0131zca_belirli_alanlar\u0131_aramak_i\u00e7in,_\u00f6rne\u011fin_\u015funu_giriniz%c<p><tt>author%esmith_and_title%eelectrical</tt>
+HTML=HTML
+HTML_table=HTML_tablosu
+HTML_table_(with_Abstract_&_BibTeX)=(\u00d6zet_&_BibTeX_ile)_HTML_tablosu
+Icon=Simge
+Ignore=Yoksay
+Immediate_subgroups=Bir_sonraki_altgruplar
+Import=\u0130\u00e7e_aktar
+Import_and_keep_old_entry=\u0130\u00e7e_aktar_ve_eski_girdiyi_koru
+Import_and_remove_old_entry=Eski_girdiyi_i\u00e7e_aktar_ve_sil.
+Import_entries=Girdileri_i\u00e7e_aktar
+Import_failed=\u0130\u00e7e_aktarma_ba\u015far\u0131s\u0131z
+Import_file=Dosya_i\u00e7e_aktar
+Import_group_definitions=Grup_tan\u0131mlar\u0131n\u0131_i\u00e7e_aktar
+Import_name=\u0130sim_i\u00e7e_aktar
+Import_preferences=\u0130\u00e7e_aktarma_tercihleri
+Import_preferences_from_file=Dosyadan_i\u00e7e_aktarma_tercihleri
+Import_strings=Dizgeleri_i\u00e7e_aktar
+Import_to_open_tab=Sekme_a\u00e7mak_i\u00e7in_i\u00e7e_aktar
+Import_word_selector_definitions=S\u00f6zc\u00fck_se\u00e7ici_tan\u0131mlar\u0131n\u0131_i\u00e7e_aktar
+Imported_database=\u0130\u00e7e_aktar\u0131lm\u0131\u015f_veritaban\u0131
+Imported_entries=\u0130\u00e7e_aktar\u0131lm\u0131\u015f_girdiler
+Imported_from_database=Veritaban\u0131ndan_i\u00e7e_aktar\u0131lm\u0131\u015f
+ImportFormat_class=ImportFormat_s\u0131n\u0131f\u0131
+Importing=\u0130\u00e7e_aktar\u0131l\u0131yor
+Importing_in_unknown_format=Bilinmeyen_bi\u00e7emde_i\u00e7e_aktar\u0131l\u0131yor
+In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=JabRef'de_bir_dizge_belirtmek_i\u00e7in_#_karakter_\u00e7ifti_kullan\u0131n.
+Include_abstracts=\u00d6zetleri_i\u00e7er
+Include_entries=Alanlar\u0131_i\u00e7er
+Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=Altgruplar\u0131_i\u00e7er\:_Se\u00e7ildi\u011finde,_bu_grup_ya_da_altgruplar\u0131ndaki_girdileri_g\u00f6ster
+Incremental=Art\u0131\u015fl\u0131
+Incremental_search=Art\u0131\u015fl\u0131_arama
+Incremental_search_failed._Repeat_to_search_from_top.=Art\u0131\u015fl\u0131_arama_ba\u015far\u0131s\u0131z._En_ba\u015ftan_aramak_i\u00e7in_yineleyin.
+Independent_group\:_When_selected,_view_only_this_group's_entries=Ba\u011f\u0131ms\u0131z_grup\:_Se\u00e7ildi\u011finde,_yaln\u0131zca_bu_grubun_girdilerini_g\u00f6ster
+Initially_show_groups_tree_expanded=Ba\u015flang\u0131\u00e7ta_grup_a\u011fac\u0131n\u0131_geni\u015fletilmi\u015f_g\u00f6ster
+Input=\u00c7al\u0131\u015fma_se\u00e7enekleri
+Input_error=Girdi_hatas\u0131
+Insert=Ekle
+Insert_rows=Sat\u0131r_ekle
+Insert_selected_citations_into_LyX/Kile=Se\u00e7ili_al\u0131nt\u0131lar\u0131_LyX/Kile'a_ekle
+Insert_selected_citations_into_WinEdt=Se\u00e7ili_al\u0131nt\u0131lar\u0131_WinEdt'e_ekle
+insert_string_=dizge_ekle
+Insert_URL=URL_ekle
+integrity=b\u00fct\u00fcnl\u00fck
+Integrity_check=b\u00fct\u00fcnl\u00fck_kontrol\u00fc
+Intersection=Kesi\u015fim
+Invalid_BibTeX_key=Ge\u00e7ersiz_BibTeX_anahtar\u0131
+Invalid_date_format=Ge\u00e7ersiz_tarih_bi\u00e7emi
+Invalid_URL=Ge\u00e7ersiz_URL
+Inverted=Ters_\u00e7evrilmi\u015f
+is_a_standard_type.=bir_standart_t\u00fcrd\u00fcr.
+ISO_abbreviation=ISO_k\u0131saltmas\u0131
+Item_list_for_field=Alan_i\u00e7in_\u00f6\u011fe_listesi
+jabref=jabref
+JabRef_help=JabRef_yard\u0131m
+JabRef_preferences=JabRef_tercihler
+Journal_abbreviations=Dergi_k\u0131saltmalar\u0131
+Journal_list_preview=Dergi_listesi_\u00f6nizleme
+Journal_name=Dergi_ad\u0131
+Keep=Tut
+Keep_both=\u0130kisini_de_tut
+Keep_lower=Alt\u0131ndakileri_tut
+Keep_upper=\u00dcst\u00fcndekileri_tut
+Key_bindings=Anahtar_ba\u011flant\u0131lar\u0131
+Key_bindings_changed=Anahtar_ba\u011flant\u0131lar\u0131_de\u011fi\u015fti
+Key_generator_settings=Anahtar_olu\u015fturucu_ayarlar\u0131
+Key_pattern=Anahtar_deseni
+keys_in_database=veritaban\u0131ndaki_anahtarlar
+Keyword=Anahtar_s\u00f6zc\u00fck
+Label=Etiket
+Language=Dil
+Last_modified=Son_de\u011fi\u015ftirme
+LaTeX_AUX_file=LaTex_AUX_dosyas\u0131
+Leave_file_in_its_current_directory.=Dosyay\u0131_\u015fimdiki_dizininde_b\u0131rak.
+Leave_files_in_their_current_directory.=Dosyalar\u0131_\u015fimdiki_dizinlerinde_b\u0131rak.
+Left=Sol
+License=Lisans
+Limit_to_fields=Alanlara_k\u0131s\u0131tla
+Limit_to_selected_entries=Se\u00e7ili_girdilere_k\u0131s\u0131tla
+Link=Link
+Link_local_file=Yerel_dosyay\u0131_ba\u011fla
+Link_to_file_%0=%0_dosyas\u0131na_ba\u011fla
+Listen_for_remote_operation_on_port=Ba\u011flant\u0131_noktas\u0131ndaki_uzak_i\u015flemi_dinle
+Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=Ba\u015flang\u0131\u00e7ta_tercihleri_jabref.xml'den_y\u00fckle_ya_da_buraya_kaydet_(bellek_\u00e7ubu\u011fu_kipi)
+Load_session=Oturumu_y\u00fckle
+Loading_session...=Oturum_y\u00fckleniyor...
+localhost=yerel_makine
+Look_and_feel=G\u00f6r\u00fcn\u00fcm_ve_tema
+Looking_for_pdf...=pdf_aran\u0131yor...
+lower=k\u00fc\u00e7\u00fck
+Main_file_directory=Ana_dosya_dizini
+Main_layout_file=Ana_yerle\u015fim_dosyas\u0131
+Main_PDF_directory=Ana_PDF_dizini
+Main_PS_directory=Ana_PS_dizini
+Manage=Y\u00f6net
+Manage_custom_exports=\u00d6zel_d\u0131\u015fa_aktar\u0131mlar\u0131_y\u00f6net
+Manage_custom_imports=\u00d6zel_i\u00e7e_aktar\u0131mlar\u0131_y\u00f6net
+Manage_external_file_types=Harici_dosya_t\u00fcrlerini_y\u00f6net
+Manage_journal_abbreviations=Degi_k\u0131saltmalar\u0131n\u0131_y\u00f6net
+Mark_entries=Girdileri_i\u015faretle
+Mark_entry=Girdiyi_i\u015faretle
+Mark_new_entries_with_addition_date=Yeni_girdileri_ekleme_tarihiyle_i\u015faretle
+Mark_new_entries_with_owner_name=Yeni_girdileri_sahip_ad\u0131yla_i\u015faretle
+Marked_selected=Se\u00e7ililer_i\u015faretlendi
+Memory_Stick_Mode=Bellek_\u00c7ubu\u011fu_Kipi
+Menu_and_label_font_size=Men\u00fc_ve_etiket_yaz\u0131_tipi_boyutu
+Merged_external_changes=Harici_de\u011fi\u015fiklikler_birle\u015ftirildi
+Messages=Mesajlar
+Messages_and_Hints=Mesajlar_ve_\u0130pu\u00e7lar\u0131
+Modification_of_field=Alan\u0131n_de\u011fi\u015fikli\u011fi
+Modified_group_"%0".=De\u011fi\u015ftirilmi\u015f_grup_"%0".
+Modified_groups=De\u011fi\u015ftirilmi\u015f_gruplar
+Modified_string=De\u011fi\u015ftirilmi\u015f_dizge
+Modify=De\u011fi\u015ftir
+modify_group=grubu_de\u011fi\u015ftir
+MODS=K\u0130PLER
+Move=Ta\u015f\u0131
+Move_down=A\u015fa\u011f\u0131_ta\u015f\u0131
+Move_entries_in_group_selection_to_the_top=Grup_se\u00e7imindeki_girdileri_en_\u00fcste_ta\u015f\u0131
+Move_external_links_to_'file'_field=Harici_linkleri_'dosya'_alan\u0131na_ta\u015f\u0131
+Move_files_to_file_directory.=Dosyalar\u0131_dosya_dizinine_ta\u015f\u0131
+move_group=grubu_ta\u015f\u0131
+Move_string_down=Dizgeyi_a\u015fa\u011f\u0131_ta\u015f\u0131
+Move_string_up=Dizgeyi_yukar\u0131_ta\u015f\u0131
+Move_up=Yukar\u0131_ta\u015f\u0131
+Moved_group_"%0".="%0"_grubu_ta\u015f\u0131nd\u0131.
+MS_Office_2007=MS_Office_2007
+MySQL=MySQL
+MySQL_database=MySQL_veritaban\u0131
+Name=Ad
+Name_formatter=Ad_bi\u00e7emleyici
+Natbib_style=Natbib_stili
+nested_aux_files=i\u00e7i\u00e7e_aux_dosyalar\u0131
+New=Yeni
+new=yeni
+New_BibTeX_database=Yeni_BibTeX_veritaban\u0131
+New_BibTeX_entry=Yeni_BibTeX_girdisi
+New_BibTeX_subdatabase=Yeni_BibTeX_alt_veritaban\u0131
+New_content=Yeni_i\u00e7erik
+New_database_created.=Yeni_veritaban\u0131_olu\u015fturuldu.
+New_field_value=Yeni_alan_de\u011feri
+New_file=Yeni_dosya
+New_file_link_(INSERT)=Yeni_dosya_linki_(INSERT)
+New_group=Yeni_grup
+New_string=Yeni_dizge
+Next_entry=Yeni_girdi
+No_%0_found=%0_bulunamad\u0131
+No_actual_changes_found.=Hi\u00e7_fiili_de\u011fi\u015fiklik_bulunamad\u0131.
+no_base-bibtex-file_specified=temel_BibTeX_dosyas\u0131_belirtilmedi
+no_database_generated=veritaban\u0131_\u00fcretilmedi
+No_duplicates_found=Hi\u00e7_\u00e7ift_n\u00fcsha_bulunmad\u0131
+No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Girdi_bulunmad\u0131._L\u00fctfen_do\u011fru_i\u00e7e_aktarma_s\u00fczgecini_kulland\u0131\u011f\u0131n\u0131zdan_emin_olun.
+No_entries_found_for_the_search_string_'%0'=Arama_dizgesi_'%0'_i\u00e7in_bir_girdi_bulunmad\u0131
+No_entries_imported.=Hi\u00e7bir_girdi_i\u00e7e_aktar\u0131lmad\u0131.
+No_entries_or_multiple_entries_selected.=Ya_hi\u00e7bir_girdi_se\u00e7ilmedi_ya_da_birden_\u00e7ok_girdi_se\u00e7ildi.
+No_entries_selected=Hi\u00e7bir_girdi_se\u00e7ilmedi
+No_entries_selected.=Hi\u00e7bir_girdi_se\u00e7ilmedi.
+No_exceptions_have_ocurred.=Hi\u00e7bir_istisna_olu\u015fmad\u0131.
+No_files_found.=Hi\u00e7bir_dosya_bulunmad\u0131.
+No_GUI._Only_process_command_line_options.=Grafik_kullan\u0131c\u0131_aray\u00fcz\u00fc_yok._Yaln\u0131zca_komut_sat\u0131r\u0131_se\u00e7enekleri_i\u015flenecek.
+No_journal_names_could_be_abbreviated.=Hi\u00e7bir_dergi_ad\u0131_k\u0131salt\u0131lamad\u0131.
+No_journal_names_could_be_unabbreviated.=Hi\u00e7bir_dergi_ad\u0131_k\u0131saltmas\u0131_a\u00e7\u0131lamad\u0131.
+No_PDF_linked=Hi\u00e7bir_PDF_ba\u011flanmam\u0131\u015f
+No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Hi\u00e7bir_pdf_ya_da_ps_tan\u0131mlanmam\u0131\u015f,_BibTeX_anahtar\u0131na_uyan_dosya_bulunamad\u0131
+No_plugins_were_found_in_the_following_folders\:=\u015eu_klas\u00f6rlerde_hi\u00e7bir_eklenti_bulunamad\u0131\:
+No_references_found=Hi\u00e7bir_ba\u015fvuru_bulunamad\u0131
+No_saved_session_found.=Hi\u00e7bir_kaydedilmi\u015f_oturum_bulunmad\u0131.
+No_url_defined=Hi\u00e7_url_tan\u0131mlanmam\u0131\u015f
+No_XMP_metadata_found_in_=Burada_hi\u00e7_XMP_metaverisi_bulunamad\u0131_
+not=hari\u00e7
+not_found=bulunmad\u0131
+Not_saved_(empty_session)=Kaydedilmedi_(bo\u015f_oturum)
+Note_that_the_entry_causing_the_problem_has_been_selected.=Soruna_yol_a\u00e7an_girdinin_se\u00e7ildi\u011fini_farkediniz.
+Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=G\u00f6r\u00fcn\u00fcm_ve_temalar_i\u00e7in_tam_kalifiye_s\u0131n\u0131f_ad\u0131n\u0131_belirtmelisiniz,
+Nothing_to_redo=Yinelenecek_bir_\u015fey_yok
+Nothing_to_undo=Geriye_al\u0131nacak_bir_\u015fey_yok
+Number_of_references_to_fetch?=Getirilecek_ba\u015fvuru_say\u0131s\u0131?
+occurences=g\u00f6r\u00fclme_s\u0131kl\u0131\u011f\u0131
+OK=Tamam
+Ok=Tamam
+One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Bir_ya_da_daha_\u00e7ok_link,_tan\u0131mlanmam\u0131\u015f_'%0'_t\u00fcr\u00fcnde._Ne_yapmak_istersiniz?
+One_or_more_keys_will_be_overwritten._Continue?=Bir_ya_da_daha_\u00e7ok_anahtar\u0131n_\u00fczerine_yaz\u0131lacak._Devam_edilsin_mi?
+Only_one_item_is_supported=Yaln\u0131zca_bir_\u00f6\u011fe_destekleniyor
+Open=A\u00e7
+Open_BibTeX_database=BibTeX_veritaban\u0131_a\u00e7
+Open_database=Veritaban\u0131_a\u00e7
+Open_editor_when_a_new_entry_is_created=Yeni_bir_girdi_olu\u015fturuldu\u011funda_d\u00fczenleyiciyi_a\u00e7
+Open_file=Dosya_a\u00e7
+Open_last_edited_databases_at_startup=A\u00e7\u0131l\u0131\u015fta_son_d\u00fczenlenmi\u015f_veritabanlar\u0131n\u0131_a\u00e7
+Open_PDF_or_PS=PDF_ya_da_PS_a\u00e7
+Open_right-click_menu_with_Ctrl+left_button=Sa\u011f_t\u0131klama_men\u00fcs\u00fcn\u00fc_Ctrl+sol_tu\u015fla_a\u00e7
+Open_URL_or_DOI=URL_ya_da_DOI_a\u00e7
+OpenDocument_Spreadsheet=OpenDocument_Hesap_tablosu
+Opened_database=A\u00e7\u0131k_veritaban\u0131
+Opening=A\u00e7\u0131l\u0131yor
+Opening_preferences...=Tercihler_a\u00e7\u0131l\u0131yor...
+OpenOffice_Calc=OpenOffice_Calc
+OpenOffice_CSV=OpenOffice_CSV
+Operation_canceled.\n=\u0130\u015flem_iptal_edildi.\n
+Operation_not_supported=\u0130\u015flem_desteklenmiyor
+Optional_fields=Tercihe_ba\u011fl\u0131_alanlar
+Options=Se\u00e7enekler
+or=ya_da
+out_of=t\u00fcm\u00fc
+Output=\u00c7\u0131kt\u0131
+Output_or_export_file=\u00c7\u0131kt\u0131_ya_da_d\u0131\u015fa_aktar\u0131m_dosyas\u0131
+Override=Ge\u00e7ersiz_k\u0131l
+Override_default_file_directories=\u00d6ntan\u0131ml\u0131_dosya_dizinlerini_ge\u00e7ersiz_k\u0131l
+Override_default_font_settings=\u00d6ntam\u0131nl\u0131_yaz\u0131tipi_ayarlar\u0131n\u0131_ge\u00e7ersiz_k\u0131l
+override_the_bibtex_key_by_the_selected_text=BibTeX_anahtar\u0131n\u0131_se\u00e7ili_metinle_yenile
+Overwrite=\u00dczerine_yaz
+Overwrite_existing_field_values=Mevcut_alan_de\u011ferlerinin_\u00fczerine_yaz
+Overwrite_keys=Anahtarlar\u0131n_\u00fczerine_yaz
+pairs_processed=i\u015flenmi\u015f_\u00e7iftler
+Password_\:=Parola_\:
+Paste=Yap\u0131\u015ft\u0131r
+paste_entries=girdileri_yap\u0131\u015ft\u0131r
+paste_entry=girdiyi_yap\u0131\u015ft\u0131r
+Paste_from_clipboard=Panodan_yap\u0131\u015ft\u0131r
+Pasted=Yap\u0131\u015ft\u0131r\u0131ld\u0131
+Path_to_%0_not_defined=%0'in_yolu_tan\u0131mlanmam\u0131\u015f
+Path_to_LatexEditor_(LEd.exe)=LatexEditor'\u00fcn_(LEd.exe)_yolu
+Path_to_LyX_pipe=LyX_hatt\u0131n\u0131n_yolu
+Path_to_Vim=Vim'in_yolu
+Path_to_WinEdt.exe=WinEdt.exe'nin_yolu
+PDF_directory=PDF_dizini
+PDF_does_not_exist=PDF_mevcut_de\u011fil
+Personal_journal_list=Ki\u015fisel_dergi_listesi
+Plain_text_import=D\u00fcz_metin_i\u00e7e_aktarma
+Please_check_your_network_connection_to_this_machine.=L\u00fctfen_bu_makinenin_a\u011f_ba\u011flant\u0131s\u0131n\u0131_kontrol_ediniz.
+Please_enter_a_name_for_the_group.=L\u00fctfen_grup_i\u00e7in_bir_isim_giriniz.
+Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=L\u00fctfen_bir_arama_terimi_giriniz._\u00d6rne\u011fin,_<b>Smith</b>'i_t\u00fcm_alanlarda_aramak_i\u00e7in_%c<p><tt>smith</tt><p>_giriniz._<b>Smith</b>'i_<b>Author</b>_alan\u0131nda,_<b>electrical</b>'\u0131_<b>Title</b>_alan\u0 [...]
+Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=L\u00fctfen_aranacak_alan_ad\u0131n\u0131_(\u00f6rne\u011fin_<b>keywords</b>)_ve_aranacak_anahtar_s\u00f6zc\u00fc\u011f\u00fc_(\u00f6rne\u011fin_<b>electrical</b>)_giriniz.
+Please_enter_the_string's_label=L\u00fctfen_dizgenin_etiketini_giriniz
+Please_select_an_importer=L\u00fctfen_bir_i\u00e7e_aktar\u0131c\u0131_se\u00e7iniz
+Please_select_an_importer.=L\u00fctfen_bir_i\u00e7e_aktar\u0131c\u0131_se\u00e7iniz.
+Please_select_exactly_one_group_to_move.=L\u00fctfen_ta\u015f\u0131mak_i\u00e7in_yaln\u0131zca_bir_grup_se\u00e7iniz.
+Please_specify_the_=L\u00fctfen_\u015funu_belirleyiniz_
+Possible_duplicate_entries=Olas\u0131_\u00e7ift_n\u00fcsha_girdiler
+Possible_duplicate_of_existing_entry._Click_to_resolve.=Mevcut_girdinin_olas\u0131_\u00e7ift_n\u00fcshas\u0131._D\u00fczeltmek_i\u00e7in_t\u0131klay\u0131n\u0131z.
+Preamble=\u00d6nc\u00fcl
+Preferences=Tercihler
+Preferences_recorded.=Tercihler_kaydedildi.
+Preview=\u00d6nizleme
+Previous_entry=\u00d6nceki_girdi
+Primary_sort_criterion=Birincil_s\u0131ralama_kriteri
+Print_Preview=Yazd\u0131rma_\u00d6nizleme
+Printing_Entry_Preview=Girdi_\u00d6nizleme_Yazd\u0131r\u0131l\u0131yor
+Problem_with_parsing_entry=Girdi_ayr\u0131\u015ft\u0131rmada_sorun
+Processing_=\u0130\u015fleniyor_
+Program_output=Program_\u00e7\u0131kt\u0131s\u0131
+PS_directory=PS_dizini
+Push_entries_to_external_application_(%0)=Girdileri_harici_uygulamaya_itele_(%0)
+Push_selection_to_Emacs=Se\u00e7imi_Emacs'a_itele
+Push_selection_to_LyX/Kile=Se\u00e7imi_LyX/Kile'a_itele
+Push_selection_to_Vim=Se\u00e7imi_Vim'e_itele
+Push_selection_to_WinEdt=Se\u00e7imi_WinEdt'e_itele
+Push_to_LatexEditor=Se\u00e7imi_LatexEditor'e_itele
+Pushed_citations_to_%0=Al\u0131nt\u0131lar_%0'a_itelendi
+Pushed_citations_to_Emacs=Al\u0131nt\u0131lar_Emacs'a_itelendi
+Pushed_citations_to_Vim=Al\u0131nt\u0131lar_Vim'e_itelendi
+Pushed_citations_to_WinEdt=Al\u0131nt\u0131lar_WinEdt'e_itelendi
+Pushed_the_citations_for_the_following_rows_to=Takip_eden_sat\u0131rlardaki_al\u0131nt\u0131lar_\u015furaya_itelendi
+Quit_JabRef=JabRef'ten_\u00e7\u0131k
+Quit_synchronization=E\u015fzamanlamay\u0131_bitir
+Raw_source=Ham_kaynak
+Really_delete_the_selected=Se\u00e7ileni_ger\u00e7ekten_sil
+Rearrange_tabs_alphabetically_by_title=Sekmeleri_ba\u015fl\u0131klar\u0131yla_alfabetik_olarak_yeniden_d\u00fczenle
+Redo=Yeniden_yap
+Reference_database=Ba\u015fvuru_veritaban\u0131
+References_found=Bulunan_ba\u015fvurular
+Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Supergrubu_ar\u0131t\:_Se\u00e7ildi\u011finde,_hem_bu_grubun,_hem_de_s\u00fcpergrubunun_i\u00e7erdi\u011fi_girdileri_g\u00f6r\u00fcnt\u00fcle
+Refresh_view=G\u00f6r\u00fcn\u00fcm\u00fc_tazele
+Regular_Expression=D\u00fczenli_\u0130fade
+Remember_these_entry_types?=Bu_girdi_t\u00fcrlerini_an\u0131msa?
+Remote_operation=Uzak_i\u015flem
+Remote_server_port=Uzak_sunucu_ba\u011flant\u0131_noktas\u0131
+Remove=Sil
+Remove_all?=T\u00fcm\u00fcn\u00fc_sil?
+Remove_all_subgroups=T\u00fcm_altgruplar\u0131_sil
+Remove_all_subgroups_of_"%0"?="%0"in_t\u00fcm_altgruplar\u0131n\u0131_sil?
+Remove_double_braces_around_BibTeX_fields_when_loading.=Y\u00fcklerken_BibTeX_alanlar\u0131_\u00e7evresindeki_\u00e7ift_k\u00fcme_parantezlerini_sil.
+Remove_duplicates=\u00c7ift_n\u00fcshalar\u0131_sil
+Remove_entry_from_import=\u0130\u00e7e_aktar\u0131mdan_girdiyi_sil
+Remove_entry_selection_from_this_group=Bu_gruptan_girdi_se\u00e7imini_sil
+Remove_entry_type=Girdi_t\u00fcr\u00fcn\u00fc_sil
+Remove_file_link_(DELETE)=Dosya_linkini_sil_(DELETE)
+remove_from_group=gruptan_sil
+Remove_from_group=Gruptan_sil
+Remove_group=Grubu_sil
+Remove_group,_keep_subgroups=Grubu_sil,_altgruplar\u0131_tut
+Remove_group_"%0"?="%0"_grubu_silinsin_mi?
+Remove_group_"%0"_and_its_subgroups?="%0"_grubu_ve_altgruplar\u0131_silinsin_mi?
+remove_group_(keep_subgroups)=grubu_sil_(altgruplar\u0131_tut)
+remove_group_and_subgroups=grubu_ve_altgruplar\u0131_sil
+Remove_group_and_subgroups=Grubu_ve_altgruplar\u0131_sil
+Remove_link=Linki_sil
+Remove_old_entry=Eski_girdiyi_sil
+Remove_selected_strings=Se\u00e7ili_dizgeleri_sil
+remove_string_=dizgeyi_sil_
+Removed_group_"%0".="%0"_grubu_silindi.
+Removed_group_"%0"_and_its_subgroups.="%0"_grubu_ve_altgruplar\u0131_silindi.
+Removed_string=Dizge_silindi
+Renamed_string=Dizge_yeniden_adland\u0131r\u0131ld\u0131
+Replace=Yerine_koy
+Replace_(regular_expression)=Yerine_koy_(d\u00fczenli_ifade)
+Replace_string=Dizgenin_yerine_koy
+Replace_with=\u015eununla_de\u011fi\u015ftir
+Replaced=De\u011fi\u015ftirildi
+Required_fields=Zorunlu_alanlar
+Reset_all=T\u00fcm\u00fcn\u00fc_s\u0131f\u0131rla
+Reset_file_type_definitons=Dosya_t\u00fcr\u00fc_tan\u0131mlar\u0131n\u0131_s\u0131f\u0131rla
+Resolve_strings_for_all_fields_except=\u015eu_hari\u00e7_t\u00fcm_alanlar\u0131n_dizgelerini_\u00e7\u00f6z\u00fcmle
+Resolve_strings_for_standard_BibTeX_fields_only=Yaln\u0131zca_standart_BibTeX_alan_dizgelerini_\u00e7\u00f6z\u00fcmle
+resolved=\u00e7\u00f6z\u00fcmlendi
+Results=Sonu\u00e7lar
+Revert_to_original_source=Orijinal_kayna\u011fa_d\u00f6nd\u00fcr
+Review=G\u00f6zden_ge\u00e7ir
+Review_changes=De\u011fi\u015fklikleri_incele
+Right=Sa\u011f
+root=k\u00f6k
+Save=Kaydet
+Save_all_finished.=T\u00fcm_bitenleri_kaydet.
+Save_all_open_databases=T\u00fcm_a\u00e7\u0131k_veritabanlar\u0131n\u0131_kaydet
+Save_before_closing=Kapatmadan_\u00f6nce_kaydet
+Save_database=Veritaban\u0131n\u0131_kaydet
+Save_database_as_...=Veritaban\u0131n\u0131_farkl\u0131_kaydet_...
+Save_entries_in_their_original_order=Girdileri_orijinal_s\u0131ralar\u0131nda_kaydet
+Save_failed=Kaydetme_ba\u015far\u0131s\u0131z
+Save_failed_during_backup_creation=Yedek_olu\u015fturulurken_kaydetme_ba\u015far\u0131s\u0131z
+Save_failed_while_committing_changes=De\u011fi\u015fiklikler_uygulan\u0131rken_kaydetme_ba\u015far\u0131s\u0131z
+Save_ordered_by_author/editor/year=Kaydetme_yazar/edit\u00f6r/y\u0131l_\u015feklinde_s\u0131raland\u0131
+Save_selected_as_...=Se\u00e7imi_farkl\u0131_kaydet_...
+Saved_database=Kaydedilmi\u015f_veritaban\u0131
+Saved_selected_to=Se\u00e7im_\u015furaya_kaydedildi
+Saved_session=Kaydedilmi\u015f_oturum
+Saving=Kaydediliyor
+Saving_all_databases...=T\u00fcm_veritabanlar\u0131_kaydediliyor...
+Saving_database=Veritaban\u0131_kaydediliyor
+Scan=Tara
+Search=Ara
+Search_All_Fields=T\u00fcm_Alanlarda_Ara
+Search_all_fields=T\u00fcm_alanlarda_ara
+Search_error=Arama_hatas\u0131
+Search_expression=\u0130fade_ara
+Search_for=\u015eunu_ara
+Search_general_fields=Genel_alanlarda_ara
+Search_IEEEXplore=IEEEXplore'da_ara
+Search_IEEExplore=IEEExplore'da_ara
+Search_optional_fields=Se\u00e7meli_alanlarda_ara
+Search_required_fields=Zorunlu_alanlarda_ara
+Search_Specified_Field(s)=Belirtlimi\u015f_Alan(lar)da_Ara
+Searched_database._Global_number_of_hits=Veritaban\u0131_arand\u0131._K\u00fcresel_ula\u015f\u0131lma_say\u0131s\u0131
+Searched_database._Number_of_hits=Veritaban\u0131_arand\u0131._Ula\u015f\u0131lma_say\u0131s\u0131
+Searching_for_%0_file=%0_dosyas\u0131_aran\u0131yor
+Searching_for_duplicates...=\u00c7ift_n\u00fcshalar_aran\u0131yor...
+Searching_for_files=Dosyalar_aran\u0131yor
+Secondary_sort_criterion=\u0130kincil_s\u0131ralama_kriteri
+Select=Se\u00e7
+Select_a_Zip-archive=Bir_Zip-ar\u015fivi_se\u00e7
+Select_action=Eylem_se\u00e7
+Select_all=T\u00fcm\u00fcn\u00fc_se\u00e7
+Select_Classpath_of_New_Importer=Yeni_\u0130\u00e7e_Aktar\u0131c\u0131n\u0131n_S\u0131n\u0131fyolunu_se\u00e7
+Select_encoding=Kodlamay\u0131_se\u00e7
+Select_entries_in_group_selection=Grup_se\u00e7imindeki_girdileri_se\u00e7
+Select_entry_type=Girdi_t\u00fcr\u00fcn\u00fc_se\u00e7
+Select_external_application=Harici_uygulamay\u0131_se\u00e7
+Select_file_from_ZIP-archive=ZIP_ar\u015fivinden_dosyay\u0131_se\u00e7iniz
+Select_format=Bi\u00e7emi_se\u00e7iniz
+Select_icon=Simgeyi_se\u00e7iniz
+Select_matches=E\u015fle\u015fenleri_se\u00e7iniz
+Select_new_ImportFormat_Subclass=Yeni_\u0130\u00e7e_Aktar\u0131m_Bi\u00e7emi_Alts\u0131n\u0131f\u0131n\u0131_se\u00e7iniz
+Select_the_tree_nodes_to_view_and_accept_or_reject_changes=De\u011fi\u015fiklikleri_g\u00f6rmek_ve_kabul_ya_da_reddetmek_i\u00e7in_a\u011fa\u00e7_d\u00fc\u011f\u00fcmlerini_se\u00e7iniz
+Selected_entries=Se\u00e7ili_girdiler
+Selector_enabled_fields=Se\u00e7icinin_etkili_k\u0131l\u0131nd\u0131\u011f\u0131_alanlar
+Server_Hostname_\:=Sunucu_Makine_ad\u0131_\:
+Server_Type_\:=Sunucu_T\u00fcr\u00fc_\:
+Set_field=Alan\u0131_ata
+Set_fields=Alanlar\u0131_ata
+Set_general_fields=Genel_alanlar\u0131_ata
+Set_main_external_file_directory=Ana_harici_dosya_dizinini_ayarla
+Set_table_font=Tablo_yaz\u0131tipini_ayarla
+Settings=Ayarlar
+Setup_selectors=Kurma_se\u00e7icileri
+Short_form=K\u0131sa_form
+Shortcut=K\u0131sayol
+Show/edit_BibTeX_source=BibTeX_kayna\u011f\u0131n_g\u00f6ster/d\u00fczenle
+Show_'Firstname_Lastname'='Ad_Soyad'_g\u00f6ster
+Show_'Lastname,_Firstname'='Soyad,_Ad'_g\u00f6ster
+Show_BibTeX_source_by_default=\u00d6ntan\u0131ml\u0131_olarak_BibTeX_kayna\u011f\u0131n\u0131_g\u00f6ster
+Show_BibTeX_source_panel=BibTeX_kaynak_panelini_g\u00f6ster
+Show_confirmation_dialog_when_deleting_entries=Girdileri_silerken_onaylama_ileti\u015fim_penceresini_g\u00f6ster
+Show_description=A\u00e7\u0131klamay\u0131_g\u00f6ster
+Show_dynamic_groups_in_<i>italics</i>=Dinamik_gruplar\u0131_<i>italik</i>_bi\u00e7imde_g\u00f6ster
+Show_entries_*not*_in_group_selection=Girdileri_grup_se\u00e7iminde_g\u00f6ster*me*
+Show_file_column=Dosya_s\u00fctununu_g\u00f6ster
+Show_icons_for_groups=Gruplar_i\u00e7in_simgeler_g\u00f6ster
+Show_last_names_only=Yaln\u0131zca_soyadlar\u0131_g\u00f6ster
+Show_names_unchanged=Adlar\u0131_de\u011fi\u015ftirmeden_g\u00f6ster
+Show_one_less_rows=Bir_sat\u0131r_az_g\u00f6ster
+Show_one_more_row=Bir_sat\u0131r_fazla_g\u00f6ster
+Show_optional_fields=Se\u00e7meli_alanlar\u0131_g\u00f6ster
+Show_PDF/PS_column=PDF/PS_s\u00fctununu_g\u00f6ster
+Show_required_fields=Zorunlu_alanlar\u0131_g\u00f6ster
+Show_URL/DOI_column=URL/DOI_s\u00fctununu_g\u00f6ster
+Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Yinelenen_bir_BibTeX_anahtar\u0131_girildi\u011finde_uyar\u0131_ileti\u015fim_penceresini_g\u00f6ster
+Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Bo\u015f_bir_BibTeX_anahtar\u0131_girildi\u011finde_uyar\u0131_ileti\u015fim_penceresini_g\u00f6ster
+Simple_HTML=Basit_HTML
+Size=Boyut
+Skip=Atla
+Skipped_-_No_PDF_linked=Atland\u0131_-_PDF_eklenmedi
+Skipped_-_PDF_does_not_exist=Atland\u0131_-_PDF_mevcut_de\u011fil
+Skipped_entry.=Girdi_atland\u0131.
+Sort_alphabetically=Alfabetik_s\u0131rala
+Sort_Automatically=Otomatik_s\u0131rala
+Sort_order=S\u0131ralama_d\u00fczeni
+sort_subgroups=altgruplar\u0131_s\u0131rala
+Sorted_all_subgroups_recursively.=T\u00fcm_altgruplar_\u00f6zyineli_s\u0131raland\u0131.
+Sorted_immediate_subgroups.=En_yak\u0131n_altgruplar_s\u0131raland\u0131.
+source_edit=kaynak_d\u00fczenle
+Special_Name_Formatters=\u00d6zel_Ad_Bi\u00e7emleyicileri
+Special_table_columns=\u00d6zel_tablo_s\u00fctunlar\u0131
+SQL_connection_established.=SQL_ba\u011flant\u0131s\u0131_kuruldu.
+Start_incremental_search=Art\u0131\u015fl\u0131_arama_ba\u015flat
+Start_search=Arama_ba\u015flat
+Starting_import=\u0130\u00e7e_aktar\u0131m_ba\u015flat\u0131l\u0131yor
+Statically_group_entries_by_manual_assignment=Elle_atanm\u0131\u015f_dura\u011fan_grup_girdileri
+Status=Durum
+Stop=Dur
+Store_journal_abbreviations=Dergi_k\u0131saltmalar\u0131n\u0131_depola
+Store_string=Dizgeyi_depola
+Store_the_following_fields_with_braces_around_capital_letters=A\u015fa\u011f\u0131daki_alanlar\u0131_b\u00fcy\u00fck_harflerin_etraf\u0131nda_k\u00fcme_parantezleriyle_depola
+Stored_entry=Depolanm\u0131\u015f_girdi
+Strings=Dizgeler
+Strings_for_database=Veritaban\u0131_i\u00e7in_dizgeler
+Subdatabase_from_aux=Yard\u0131mc\u0131dan_(aux)_altveritaban\u0131
+Suggest=\u00d6ner
+Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Dergi_ad\u0131_biliniyorsa_tam_ve_k\u0131salt\u0131lm\u0131\u015f_dergi_ad\u0131_aras\u0131nda_ge\u00e7i\u015f_yapar.
+Synchronize_%0_links=%0_linki_e\u015fzamanla
+Synchronize_file_links=Dosya_linklerini_e\u015fzamanla
+Synchronizing_%0_links...=%0_link_e\u015fzamanlan\u0131yor...
+Table_appearance=Tablo_g\u00f6r\u00fcn\u00fcm\u00fc
+Table_background_color=Tablo_arkaplan_rengi
+Table_grid_color=Tablo_klavuz_\u00e7izgileri_rengi
+Table_text_color=Tablo_metni_rengi
+Tabname=Sekmead\u0131
+Target_file_cannot_be_a_directory.=Hedef_dosya_bir_dizin_olamaz.
+Tertiary_sort_criterion=\u00dc\u00e7\u00fcnc\u00fcl_s\u0131ralama_\u00f6l\u00e7\u00fct\u00fc
+Test=Deneme
+Text_Input_Area=Metin_Girdi_Alan\u0131
+The_#_character_is_not_allowed_in_BibTeX_fields=BibTeX_alanlar\u0131nda_#_karakteri_kullan\u0131lam\u0131yor
+The_chosen_date_format_for_new_entries_is_not_valid=Yeni_girdiler_i\u00e7in_se\u00e7ilen_tarih_bi\u00e7emi_ge\u00e7ersiz
+The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=Se\u00e7ilen_'%0'_kodlamas\u0131_\u015fu_karakterleri_kodlayam\u0131yor\:
+The_CiteSeer_fetch_operation_returned_zero_results.=CiteSeerX_getirme_i\u015flemi_s\u0131f\u0131r_sonu\u00e7la_d\u00f6nd\u00fc.
+The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=Mevcut_s\u00fcr\u00fcm_harici_dosya_linklerini_i\u015flemede_yeni_bir_yolu_\u00f6n_plana_\u00e7\u0131kar\u0131yor.<br>Bundan_yararlanmak_i\u00e7in,_linklerinizin_yeni_bi\u00e7eme_de\u011fi\u015ftirilmesi_gerekiyor,_ve<br>JabRef'in_de_yeni_linkleri_g\u00f6sterecek_\u015fekilde_ayarl [...]
+the_field_<b>%0</b>=alan_<b>%0</b>
+The_file<BR>'%0'<BR>has_been_modified<BR>externally!=Dosya<BR>'%0'<BR><BR>harici_olarak_de\u011fi\u015ftirildi!
+The_group_"%0"_already_contains_the_selection.="%0"_grubu_se\u00e7imi_zaten_kaps\u0131yor.
+The_label_of_the_string_can_not_be_a_number.=Dizgenin_etiketi_bir_numara_olamaz.
+The_label_of_the_string_can_not_contain_spaces.=Dizgenin_etiketi_bo\u015fluk_i\u00e7eremez.
+The_label_of_the_string_can_not_contain_the_'#'_character.=Dizgenin_etiketi_'#'_karakterini_i\u00e7eremez.
+The_output_option_depends_on_a_valid_import_option.=\u00c7\u0131kt\u0131_se\u00e7ene\u011fi_ge\u00e7erli_bir_i\u00e7e_aktar\u0131m_se\u00e7ene\u011fine_ba\u011fl\u0131d\u0131r.
+The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=PDF,_bir_ya_da_daha_fazla_BibTeX_kayd\u0131_i\u00e7eriyor.\nBunlar\u0131_mevcut_veritabann\u0131na_yeni_girdiler_olarak_aktarmak_ister_misiniz?
+The_regular_expression_<b>%0</b>_is_invalid%c=D\u00fczenli_ifade_<b>%0</b>_ge\u00e7ersiz%c
+The_search_is_case_insensitive.=Arama_b\u00fcy\u00fck/k\u00fc\u00e7\u00fck_harfe_duyars\u0131z.
+The_search_is_case_sensitive.=Arama_b\u00fcy\u00fck/k\u00fc\u00e7\u00fck_harfe_duyarl\u0131.
+The_string_has_been_removed_locally=Dizge_yerel_olarak_silindi
+There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=\u00c7\u00f6z\u00fcmlenmemi\u015f,_olas\u0131_\u00e7ift_n\u00fcshalar_mevcut_('D'_simgesiyle_i\u015faretlenmi\u015f)._Devam_edilsin_mi?
+this_button_will_update=bu_d\u00fc\u011fme_g\u00fcncelleyecek
+This_database_was_written_using_an_older_version_of_JabRef.=Bu_veritaban\u0131_eski_bir_JabRef_s\u00fcr\u00fcm\u00fcyle_yaz\u0131lm\u0131\u015f.
+This_entry_has_no_BibTeX_key._Generate_key_now?=Bu_girdinin_BibTeX_anahtar\u0131_yok._\u015eimdi_olu\u015fturulsun_mu?
+This_entry_is_incomplete=Girdi_eksik
+This_entry_type_cannot_be_removed.=Bu_girdi_t\u00fcr\u00fc_silinemiyor.
+This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Bu_harici_link,_tan\u0131mlanmam\u0131\u015f_'%0'_t\u00fcr\u00fcndendir._Ne_yapmak_istersiniz?
+This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Bu_grup,_elle_atanm\u0131\u015f_girdiler_i\u00e7eriyor._Bu_gruba_girdiler_se\u00e7ilip_ya_s\u00fcr\u00fckleyip_b\u013 [...]
+This_group_contains_entries_in_which=Bu_grup,_i\u00e7inde_\u015funlar_olan_girdileri_i\u00e7erir
+This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Bu_grup,_herhangi_bir_alan\u0131__<b>%0</b>_d\u00fczenli_ifadesini_i\u00e7eren_girdileri_i\u00e7erir
+This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Bu_grup,_herhangi_bir_alan\u0131__<b>%0</b>_terimini_i\u00e7eren_girdileri_i\u00e7erir
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Bu_grup,_<b>%0</b>_alan\u0131_<b>%1</b>_anahtar_s\u00f6zc\u00fc\u011f\u00fcn\u00fc_i\u00e7eren_girdileri_i\u00e7erir
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Bu_grup,_<b>%0</b>_alan\u0131_<b>%1</b>_d\u00fczenli_ifadesini_i\u00e7eren_girdileri_i\u00e7erir
+This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=Bu,_normal_metinden_baz\u0131_alanlar\u0131_i\u00e7e_aktarmak_i\u00e7in_basit_bir_kopyala_yap\u0131\u015ft\u0131r_ileti\u015fim_penceresidir.
+This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Bu,_JabRef'in_her_%0_linki_bulup_dosyan\u0131n_var_olup_olmad\u0131\u011f\u0131n\u0131_kontrol_etmesini_sa\u011flar._E\u011fer_yoksa,_sorunu<BR>\u00e7\u00f6zmek_i\u00e7in_se\u00e7enekler_sunulacakt\u0131r.
+This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=Bu_i\u015flem,_t\u00fcm_se\u00e7ili_girdilerin_tan\u0131ml\u0131_BibTex_anahtarlar\u0131n\u0131n_olmas\u0131n\u0131_gerektirir.
+This_operation_requires_at_least_one_entry.=Bu_i\u015flem_en_az_bir_girdi_gerektirir.
+This_operation_requires_one_or_more_entries_to_be_selected.=Bu_i\u015flem,_bir_ya_da_daha_\u00e7ok_girdinin_se\u00e7ili_olmas\u0131n\u0131_gerektirir.
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=Bu,_'pdf'_ve_'ps'_alanlar\u0131ndaki_t\u00fcm_harici_linkleri_'%0'_alan\u0131na_ta\u015f\u0131yacakt\u0131r._Devam_edilsin_mi?
+To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=Kurmak_i\u00e7in_<B>Ara\u00e7lar_->Dergi_k\u0131saltmalar\u0131n\u0131_y\u00f6net'e_gidiniz</B>
+Toggle_abbreviation=K\u0131saltmay\u0131_a\u00e7/kapat
+Toggle_entry_preview=Girdi_\u00f6nizlemeyi_a\u00e7/kapat
+Toggle_groups_interface=Grup_aray\u00fcz\u00fcn\u00fc_a\u00e7/kapat
+Toggle_search_panel=Arama_panelini_a\u00e7/kapat
+Try_different_encoding=Ba\u015fka_kodlama_deneyin
+Type_set_to_'other'=T\u00fcr,_'di\u011fer'_olarak_atand\u0131
+Unabbreviate_journal_names_of_the_selected_entries=Se\u00e7ili_girdilerin_dergi_adlar\u0131n\u0131_k\u0131saltma
+Unabbreviated_%0_journal_names.=%0_dergi_ad\u0131_k\u0131saltmas\u0131_kald\u0131r\u0131ld\u0131.
+unable_to_access_LyX-pipe=Lyx_veriyoluna_girilemiyor
+Unable_to_create_graphical_interface=Grafik_aray\u00fcz_olu\u015fturulamad\u0131
+Unable_to_open_file.=Dosya_a\u00e7\u0131lamad\u0131.
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Link_a\u00e7\u0131lamad\u0131._'%1'_dosya_t\u00fcr\u00fcyle_ili\u015fkili_'%0'_uygulamas\u0131_\u00e7a\u011fr\u0131lamad\u0131.
+Unable_to_read_default_icon_theme.=\u00d6ntan\u0131ml\u0131_simge_temas\u0131_okunamad\u0131.
+Unable_to_read_icon_theme_file=Simge_temas\u0131_dosyas\u0131_okunamad\u0131
+unable_to_write_to=\u015euraya_yaz\u0131lamad\u0131
+Undefined_file_type=Tan\u0131mlanmam\u0131\u015f_dosya_t\u00fcr\u00fc
+Undo=Geriye_al
+Union=Bile\u015fim
+Unknown_bibtex_entries=Bilinmeyen_BibTeX_girdileri
+unknown_edit=bilinmeyen_d\u00fczenleme
+unknown_entry_type=bilinmeyen_girdi_t\u00fcr\u00fc
+Unknown_export_format=Bilinmeyen_d\u0131\u015fa_aktar\u0131m_bi\u00e7emi
+Unmark_all=T\u00fcm\u00fcn\u00fcn_i\u015faretini_kald\u0131r
+Unmark_entries=Girdilerin_i\u015faretini_kald\u0131r
+Unmark_entry=Girdinin_i\u015faretini_kald\u0131r
+Unmarked_selected=Se\u00e7ililerin_i\u015faretini_kald\u0131r
+Unpack_EndNote_filter_set=EndNote_s\u00fczge\u00e7_k\u00fcmesinin_paketini_a\u00e7
+Unpacked_file.=Dosya_paketi_a\u00e7\u0131ld\u0131.
+Unsupported_version_of_class_%0\:_%1=%0_s\u0131n\u0131f\u0131n\u0131n_desteklenmeyen_s\u00fcr\u00fcm\u00fc:_%1
+untitled=ba\u015fl\u0131ks\u0131z
+Up=Yukar\u0131
+Update_to_current_column_widths=Mevcut_s\u00fctun_geni\u015fliklerine_g\u00fcncelle
+Updated_group_selection=Grup_se\u00e7imi_g\u00fcncellendi
+Upgrade_external_links=Harici_linkleri_yeni_s\u00fcr\u00fcme_y\u00fckselt
+Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=Harici_PDF/PS_linklerini_'%0'_alan\u0131n\u0131_kullanmak_\u00fczere_yeni_s\u00fcr\u00fcme_y\u00fckselt.
+Upgrade_file=Dosyay\u0131_yeni_s\u00fcr\u00fcme_y\u00fckselt
+Upgrade_old_external_file_links_to_use_the_new_feature=Eski_harici_dosya_linklerini_yeni_\u00f6zelli\u011fi_kullanmak_\u00fczere_yeni_s\u00fcr\u00fcme_y\u00fckselt
+Upgraded_links.=Linkler_yeni_s\u00fcr\u00fcme_y\u00fckseltildi.
+UPPER=DAHA_\u00dcSTTE
+Upper_Each_First=Daha_\u00dcstteki_Her_Birinci
+Upper_first=Daha_\u00fcstteki_\u00f6nce
+usage=kullan\u0131m
+Use_antialiasing_font=\u00d6rt\u00fc\u015fme-\u00f6nler_yaz\u0131tipi_kullan
+Use_autocompletion_for_the_following_fields=A\u015fa\u011f\u0131daki_alanlar_i\u00e7in_otomatik_tamamlamay\u0131_kullan
+Use_custom_icon_theme=\u00d6zel_simge_temas\u0131_kullan
+Use_default_viewer=\u00d6ntan\u0131ml\u0131_g\u00f6r\u00fcnt\u00fcleyiciyi_kullan
+Use_inspection_window_also_when_a_single_entry_is_imported.=Tek_bir_girdi_i\u00e7e_aktar\u0131l\u0131rken_de_inceleme_penceresi_kullan.
+Use_native_file_dialog=Yerli_dosya_ileti\u015fim_penceresini_kullan
+Use_other_look_and_feel=Di\u011fer_g\u00f6r\u00fcn\u00fcm_ve_tema_kullan
+Use_Regular_Expression_Search=D\u00fczenli_\u0130fade_Aramay\u0131_kullan
+Use_regular_expressions=D\u00fczenli_ifadeleri_kullan
+Use_the_following_delimiter_character(s)=A\u015fa\u011f\u0131daki_s\u0131n\u0131rlay\u0131c\u0131_karakter(ler)i_kullan
+Username_\:=Kullan\u0131c\u0131_ad\u0131_\:
+Value_cleared_externally=De\u011fer,_haricen_silindi
+Value_set_externally=De\u011fer,_haricen_atand\u0131
+verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=LyX'in_\u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131_ve_veri_ileti\u015fim_hatt\u0131n\u0131n_ge\u00e7erli_oldu\u011funu_teyid_edin
+View=G\u00f6r\u00fcnt\u00fcle
+Vim_Server_Name=Vim_Sunucu_Ad\u0131
+Waiting_for_ArXiv...=ArXiv_bekleniyor...
+Warn_about_unresolved_duplicates_when_closing_inspection_window=\u0130nceleme_penceresi_kapan\u0131rken_\u00e7\u00f6z\u00fclmemi\u015f_\u00e7ift_n\u00fcshalar_hakk\u0131nda_uyar
+Warn_before_overwriting_existing_keys=Mevcut_anahtarlar\u0131n_\u00fczerine_yazmadan_\u00f6nce_uyar
+Warning=Uyar\u0131
+Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=Uyar\u0131\:_dosya_onar\u0131m\u0131_tamamlanamad\u0131;_dosyan\u0131z_bozuk_olabilir._Hata_mesaj\u0131
+Warning_there_is_a_duplicate_key=Uyar\u0131!_Bir_anahtardan_\u00e7ift_n\u00fcsha_var
+Warnings=Uyar\u0131lar
+web_link=sanaldoku_linki
+What_do_you_want_to_do?=Ne_yapmak_istersiniz?
+When_adding/removing_keywords,_separate_them_by=Anahtar_s\u00f6zc\u00fck_ekler/\u00e7\u0131kar\u0131rken,_onlar\u0131_\u015f\u00f6yle_ay\u0131r\u0131n
+Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=Se\u00e7ili_girdilerle_ba\u011flant\u0131l\u0131_PDFlere_XMP_metaverisi_yaz\u0131lacak.
+with=ile
+Word=S\u00f6zc\u00fck
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=BibtexGirdisi'ni_PDF'ye_XMP-metaverisi_olarak_yaz.
+Write_XMP=XMP'yi_yaz
+Write_XMP-metadata=XMP-metaverisini_yaz
+Write_XMP-metadata_for_all_PDFs_in_current_database?=Mevcut_veritaban\u0131ndaki_t\u00fcm_PFDlere_XMP-metaverisi_yaz\u0131ls\u0131n_m\u0131?
+Writing_XMP=XMP_yaz\u0131l\u0131yor
+Writing_XMP_metadata...=XMP_metaverisi_yaz\u0131l\u0131yor...
+Writing_XMP_metadata_for_selected_entries...=Se\u00e7ili_girdiler_i\u00e7in_XMP_metaverisi_yaz\u0131l\u0131yor...
+Writing_XMP_to_'%0'...=XMP_'%0'e_yaz\u0131l\u0131yor...
+Wrong_file_format=Yanl\u0131\u015f_dosya_bi\u00e7emi
+Wrote_XMP-metadata=XMP-metaverisi_yaz\u0131ld\u0131
+Wrote_XMP_to_'%0'.=XMP_'%0'e_yaz\u0131ld\u0131.
+XMP-annotated_PDF=XMP-ek_notlu_PDF
+XMP_Export_Privacy_Settings=Gizlilik_Ayarlar\u0131n\u0131_XMP_D\u0131\u015fa_Aktar
+XMP_metadata=XMP_metaverisi
+XMP_metadata_found_in_PDF\:_%0=PDF'de_XMP_metaverisi_bulundu\:_%0
+You_must_restart_JabRef_for_this_to_come_into_effect.=
+You_have_changed_the_language_setting.=
+You_have_changed_the_look_and_feel_setting.=
+You_have_cleared_this_field._Original_value=Bu_alan\u0131_sildiniz._Orijinal_de\u011fer
+You_have_entered_an_invalid_search_'%0'.=Ge\u00e7ersiz_bir_arama_girdiniz_'%0'.
+You_must_choose_a_file_name_to_store_journal_abbreviations=Dergi_k\u0131saltmalar\u0131n\u0131_kaydetmek_i\u00e7in_bir_dosya_ad\u0131_se\u00e7melisiniz
+You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Yeni_anahtar_demetlerinin_d\u00fczg\u00fcn_\u00e7al\u0131\u015fmas\u0131_i\u00e7in_JabRef'i_yeniden_ba\u015flatmal\u0131s\u0131n\u0131z.
+You_must_set_both_BibTeX_key_and_%0_directory=Hem_BibTeX_anahtar\u0131_hem_de_%0_dizinini_atamal\u0131s\u0131n\u0131z
+Your_new_key_bindings_have_been_stored.=Yeni_anahtar_demetleriniz_kaydedildi.
+The_following_fetchers_are_available\:=A\u015fa\u011f\u0131daki_getiriciler_kullan\u0131ma_haz\u0131rd\u0131r:
+Could_not_find_fetcher_'%0'='%0'_getiricisi_bulunamad\u0131
+Running_Query_'%0'_with_fetcher_'%1'.='%0'_sorgusu_'%1'_getiricisiyle_\u00e7al\u0131\u015ft\u0131r\u0131l\u0131yor.
+Please_wait!=L\u00fctfen_bekleyiniz!
+Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.='%1'_getiricisiyle_'%0'_sorgusu_hi\u00e7bir_sonu\u00e7_d\u00f6nd\u00fcrmedi.
+Open_SPIRES_entry=SPIRES_girdisi_a\u00e7
+Move/Rename_file=Dosya_Ta\u015f\u0131/Yeniden_adland\u0131r
+File_moved=Dosya_ta\u015f\u0131nd\u0131
+Move_file_failed=Dosya_ta\u015f\u0131ma_ba\u015far\u0131s\u0131z
+Could_not_move_file=Dosya_ta\u015f\u0131nam\u0131yor
+Could_not_find_file_'%0'.='%0'_dosyas\u0131_bulunamad\u0131.
+Move/rename_file=Dosya_Ta\u015f\u0131/yeniden_adland\u0131r
+Number_of_entries_successfully_imported=Girdi_say\u0131s\u0131_ba\u015far\u0131yla_i\u00e7e_aktar\u0131ld\u0131
+Import_canceled_by_user=\u0130\u00e7e_aktr\u0131m_kullan\u0131c\u0131_taraf\u0131ndan_iptal_edildi
+Progress\:_%0_of_%1=\u0130lerleme:_%1'in_%0'i
+Error_while_fetching_from_JSTOR=JSTOR'dan_getirme_s\u0131ras\u0131nda_hata
+Fetching_Medline_by_id...=Medline_tan\u0131t\u0131c\u0131_arac\u0131l\u0131\u011f\u0131yla_getirliyor...
+Fetching_Medline_by_term...=Medline_terim_arac\u0131l\u0131\u011f\u0131yla_getirliyor...
+Medline_import_canceled=Medline_i\u00e7e_aktar\u0131m\u0131_iptal_edildi
+Please_enter_a_valid_number=L\u00fctfen_ge\u00e7erli_bir_say\u0131_giriniz
+Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=L\u00fctfen_virg\u00fclle_ayr\u0131lm\u0131\u015f_bir_Medline_No_ya_da_arama_terimi_listesi_giriniz.
+An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=SPIRES_kayna\u011f\u0131ndan_getirirken_bir_hata_olu\u015ftu_(%0)\:
+Error_while_fetching_from_Spires\:_=Spires'ten_getirirken_hata\:
+Connect_to_external_SQL_database=Harici_SQL_veritaban\u0131na_ba\u011flan
+Export_to_external_SQL_database=Harici_SQL_veritaban\u0131na_aktar
+Show_results_in_dialog=Sonu\u00e7lar\u0131_ileti\u015fim_penceresinde_g\u00f6ster
+Global_search=K\u00fcresel_arama
+Show_search_results_in_a_window=Arama_sonu\u00e7lar\u0131n\u0131_bir_pencerede_g\u00f6ster
+Search_results=Arama_sonu\u00e7lar\u0131
+Move_file_to_file_directory?=Dosya,_dosya_dizinine_ta\u015f\u0131ns\u0131n_m\u0131?
+Rename_to_'%0'='%0'_olarak_yeniden_adland\u0131r
+Move_to_file_directory=Dosya_dizinine_ta\u015f\u0131
+You_have_changed_the_menu_and_label_font_size.=
+Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=Veritaban\u0131_korunuyor._Harici_de\u011fi\u015fiklikler_g\u00f6zden_ge\u00e7irilene_dek_kaydedemezsiniz.
+Protected_database=Korunan_veritaban\u0131
+Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=Harici_de\u011fi\u015fiklikler_g\u00f6zden_ge\u00e7irilene_dek_veritaban\u0131n\u0131n_kaydedilmesini_reddet.
+Database_protection=Veirtaban\u0131_korumas\u0131
+Unable_to_save_database=Veritaban\u0131_kaydedilemedi
+BibTeX_key_generator=BibTeX_anahtar_olu\u015fturucusu
+Unable_to_open_link.=Ba\u011flant\u0131_a\u00e7\u0131lamad\u0131.
+Search_JSTOR=JSTOR'u_ara
+Attempting_SQL_import...=SQL_i\u00e7e_aktar\u0131m\u0131_giri\u015fiminde_bulunuluyor...
+BibO_RDF=BibO_RDF
+HTML_parser=HTML_ayr\u0131\u015ft\u0131r\u0131c\u0131
+Move_the_keyboard_focus_to_the_entry_table=Klavye_oda\u011f\u0131n\u0131_girdi_tablosuna_ta\u015f\u0131
+MIME_type=MIME_t\u00fcr\u00fc
+
+This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Bu_\u00f6zellik_yeni_dosyalar\u0131n_yeni_bir_oturum_a\u00e7maktansa_halen_\u00e7al\u0131\u015fmakta_olan_bir<BR>JabRef_oturumu_i\u00e7ine_a\u00e7\u0131lmas\u0131_ya_da_aktr\u0131lmas [...]
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Bu_ayarlar\u0131n_eski_s\u00fcr\u00fcm_<b>pdf</b>_ve_<b>ps</b>_alanlar\u0131_i\u00e7in_kullan\u0131ld\u0131\u011f\u0131n\u0131_not_ediniz.<br>\u00c7o\u011fu_kullan\u0131c\u0131_i\u00e7in_yukar\u0131daki_<b>Ana_dosya_dizini</b>ni_ayarlamak_yeterli_olacakt\u0131r.
+Legacy_file_fields=Eski_s\u00fcr\u00fcm_dosya_alanlar\u0131
+This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Bu,_JabRef'in_her_bir_%0_uzant\u0131s\u0131n\u0131_bulup_dosyan\u0131n_var_olup_olmad\u0131\u011f\u0131n\u0131_kontrol_etmesini_sa\u011flar._E\u011fer_dosya_yoksa,_sorunu_\u00e7\u00f6zmek_i\u00e7in_se\u00e7enekler<BR>_sunulacakt\u0131r.
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Getiriciyi_\u00c7al\u0131\u015ft\u0131r,_\u00d6rnek_"--fetch=Medline:cancer"
+
+The_ACM_Digital_Library=ACM_Say\u0131sal_K\u00fct\u00fcphane
+Reset=S\u0131f\u0131rla
+
+Use_IEEE_LaTeX_abbreviations=IEEE_LaTeX_k\u0131saltmalar\u0131_kullan\u0131n\u0131z
+The_Guide_to_Computing_Literature=Bilgi_\u0130\u015flem_Literat\u00fcr\u00fc_Klavuzu
+Search_ACM_Portal=ACM_Portal\u0131'n\u0131_Ara
+Connection_to_ACM_Portal_failed=ACM_Portal\u0131'na_ba\u011flant\u0131_ba\u015far\u0131s\u0131z
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=Dosya_ba\u011flant\u0131s\u0131n\u0131_a\u00e7arken,_e\u011fer_link_tan\u0131mlanmam\u0131\u015fsa_e\u015fle\u015fen_dosyay\u0131_ara
+Settings_for_%0=%0_i\u00e7in_ayarlar
+Insert_selected_citations_into_Vim=Se\u00e7ili_g\u00f6ndermeleri_Vim'e_ekle
+RIS=RIS
+Assign_exclusively_to_group=Yaln\u0131zca_gruba_ata
+Bad_Request_'%0'.=Hatal\u0131_Talep_'%0'.
+Mark_entries_imported_into_an_existing_database=Varolan_bir_veritaban\u0131na_aktar\u0131lm\u0131\u015f_girdileri_i\u015faretle
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Yeni_girdileri_varolan_bir_veritaban\u0131na_aktarmadan_\u00f6nce_t\u00fcm_girdilerin_i\u015faretini_sil
+Forward=\u0130leri
+Back=Geri
+Sort_the_following_fields_as_numeric_fields=A\u015fa\u011f\u0131daki_alanlar\u0131_say\u0131sal_olarak_s\u0131rala
+Line_%0\:_Found_corrupted_BibTeX-key.=Sat\u0131r_%0\:_Bozulmu\u015f_BibTeX-anahtar\u0131_bulundu.
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Sat\u0131r_%0\:_Bozulmu\u015f_BibTeX-anahtar\u0131_bulundu_(beyaz_bo\u015fluk_i\u00e7eriyor).
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Sat\u0131r_%0\:_Bozulmu\u015f_BibTeX-anahtar\u0131_bulundu_(virg\u00fcl_kay\u0131p).
+Finished_downloading_full_text_document=Tam_metin_belge_indirme_tamamland\u0131
+Unable_to_find_full_text_document_in_the_linked_web_page.=Linkteki_sanaldoku_sayfas\u0131nda_tam_metin_belge_bulunamad\u0131.
+Connection_error_when_trying_to_find_full_text_document.=Tam_metin_belge_bulmay\u0131_denerken_ba\u011flant\u0131_hatas\u0131.
+This_entry_provides_no_URL_or_DOI_links.=Bu_girdi_URL-ya_da_DOI_linki_sa\u011flam\u0131yor.
+Full_text_article_download_failed=Tam_metin_makale_indirme_ba\u015far\u0131s\u0131z
+Update_to_current_column_order=Varolan_s\u00fctun_s\u0131ras\u0131na_g\u00fcncelle
+
+Rename_field=Alan\u0131n_ad\u0131n\u0131_de\u011fi\u015ftir
+Set/clear/rename_fields=Alanlar\u0131_kur/sil/yeniden_adland\u0131r
+Rename_field_to\:=Alan_ad\u0131n\u0131_\u015funa_de\u011fi\u015ftir\:
+Move_contents_of_a_field_into_a_field_with_a_different_name=Alan_i\u00e7eri\u011fini_ba\u015fka_isimli_bir_alan\u0131n_i\u00e7ine_ta\u015f\u0131
+You_can_only_rename_one_field_at_a_time=Bir_seferde_yaln\u0131zca_bir_alan\u0131n_ad\u0131n\u0131_de\u011fi\u015ftirebilirsiniz
+
+Remove_all_broken_links=T\u00fcm_bozuk_linkleri_sil
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Uzak_operasyon_i\u00e7in_ba\u011flant\u0131_noktas\u0131_%0_kullan\u0131lam\u0131yor;_bir_ba\u015fka_program_kullan\u0131yor_olabilir._Ba\u015fka_bir_ba\u011flant\u0131_noktas\u0131_deneyin.
+
+Plugin_installer=Eklenti_kurucu
+Unable_to_create_plugin_directory=Eklenti_dizini_olu\u015fturulam\u0131yor
+Unable_to_copy_file=Dosya_kopyalanam\u0131yor
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Eklenti_ba\u015far\u0131yla_kuruldu._Yeni_eklentiyi_y\u00fcklemek_i\u00e7in_JabRefi'i_yeniden_ba\u015flatmal\u0131s\u0131n\u0131z.
+Unable_to_create_user_plugin_directory=Kullan\u0131c\u0131_eklenti_dizini_olu\u015fturulam\u0131yor
+Plugin_installation_failed.=Eklenti_kurulumu_ba\u015far\u0131s\u0131z.
+The_same_version_of_this_plugin_is_already_installed.=Bu_eklentinin_ayn\u0131_s\u00fcr\u00fcm\u00fc_zaten_kurulu.
+A_newer_version_of_this_plugin_is_already_installed.=Bu_eklentinin_daha_yeni_bir_s\u00fcr\u00fcm\u00fc_zaten_kurulu.
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Bu_eklentinin_bir_ya_da_daha_fazla_eski_s\u00fcr\u00fcm\u00fc_kurulu._Eski_s\u00fcr\u00fcmler_silinsin_mi?
+Old_versions_deleted_successfully.=Eski_s\u00fcr\u00fcmler_ba\u015far\u0131yla_silindi.
+Install_plugin=Eklenti_kur
+Download_plugin=Eklenti_indir
+Plugin_manager=Eklenti_y\u00f6neticisi
+Delete_the_%0_selected_plugins?=%0_se\u00e7ili_eklenti_silinsin_mi?
+Delete_plugins=Eklentileri_sil
+Delete_the_selected_plugin?=Se\u00e7ili_eklenti_silinsin_mi?
+Delete_plugin=Eklenti_sil
+Enter_download_URL=\u0130ndirme_URL'si_giriniz
+Plugin_name=Eklenti_ad\u0131
+Version=S\u00fcr\u00fcm
+Unknown=Bilinmeyen
+Not_loaded=Y\u00fcklenmedi
+Loaded=Y\u00fcklendi
+Could_not_determine_version_of_=\u015eunun_s\u00fcr\u00fcm\u00fc_belirlenemedi_
+Install_anyway?=Yine_de_kurulsun_mu?
+
+Looking_for_full_text_document...=Tam_metin_belge_aran\u0131yor...
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=DOI_ya_da_URL_linki_izle_ve_tam_metin_PDF_belgesini_bulmaya_\u00e7al\u0131\u015f
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Tam_metin_makal_bulunamad\u0131._'%0'_web_sitesi_i\u00e7in_bir_arama_algoritmas\u0131_tan\u0131mlanmam\u0131\u015f.
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Pdf_link_bulundu,_ama_yanl\u0131\u015f_MIME_t\u00fcr\u00fc_al\u0131nd\u0131._Bu,_tam_metin_makaleye_eri\u015fiminiz_olmad\u0131\u011f\u0131_anlam\u0131na_gelebilir.
+
+Autosave=Otomatik_kaydet
+Prompt_before_recovering_a_database_from_an_autosave_file=Otomatik_kaydedilmi\u015f_bir_dosyadan_veri_taban\u0131n\u0131_kurtarmaya_ba\u015flamadan_\u00f6nce_sor
+Autosave_interval_(minutes)=Otomatik_kay\u0131t_aral\u0131\u011f\u0131_(dakika)
+Do_you_want_to_recover_the_database_from_the_autosave_file?=Otomatik_kay\u0131t_dosyas\u0131ndan_veritaban\u0131n\u0131_kurtarmak_ister_misiniz?
+Recover_from_autosave=Otomatik_kay\u0131ttan_kurtar
+%0_warnings=%0_uyar\u0131
+
+Save_in_current_table_sort_order=Mevcut_tablo_s\u0131ralama_d\u00fczeninde_kaydet
+Export_in_current_table_sort_order=Mevcut_tablo_s\u0131ralama_d\u00fczeninde_d\u0131\u015fa_aktar
+Export_ordered_by_author/editor/year=Yazar/edit\u00f6r/y\u0131l_d\u00fczeninde_s\u0131ralayarak_d\u0131\u015fa_aktar
+Export_entries_in_their_original_order=Girdileri_orijinal_s\u0131ras\u0131nda_d\u0131\u015fa_aktar
+Error_opening_file_'%0'.=Dosya_a\u00e7mada_hata_'%0'.
+Autosave_of_file_'%0'='%0'_dosyas\u0131n\u0131n_otomatik_kayd\u0131
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.='%0''in_otomatik_kayd\u0131n\u0131_a\u00e7mada_hata._Onun_yerine_'%0'_y\u00fcklenmeye_\u00e7al\u0131\u015f\u0131yor.
+
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=Kullan\u0131c\u0131_eklenti_dizininizde_(%0)\_kurulu_eklentiler:
+Plugins_installed_in_other_locations\:=Di\u011fer_yerlerde_kurulu_eklentiler\:
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=JabRef_tekrar_ba\u015flad\u0131\u011f\u0131nda_eklentiler_silinecek.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=JabRef_tekrar_ba\u015flad\u0131\u011f\u0131nda_eklenti_silinecek.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Eski_eklenti_s\u00fcr\u00fcmleri,_JabRef_tekrar_ba\u015flad\u0131\u011f\u0131nda_silinecek.
+
+Formatter_not_found\:_%0=Bi\u00e7imleyici_bulunamad\u0131\:_%0
+The_following_formatters_could_not_be_found=A\u015fa\u011f\u0131daki_bi\u00e7imleyiciler_bulunamad\u0131
+
+Clear_inputarea=Girdi_alan\u0131n\u0131_temizle
+Automatically_set_file_links_for_this_entry=Bu_girdi_i\u00e7in_dosya_ba\u011flant\u0131lar\u0131n\u0131_otomatikman_kur
+Could_not_save,_file_locked_by_another_JabRef_instance.=Kaydedilemiyor,_dosya_ba\u015fka_bir_JabRef_oturumunca_kilitlenmi\u015f.
+File_is_locked_by_another_JabRef_instance.=Dosya_ba\u015fka_bir_JabRef_oturumunca_kilitlenmi\u015f.
+Do_you_want_to_override_the_file_lock?=Dosya_kilidini_ge\u00e7ersiz_k\u0131lmak_ister_misiniz?
+File_locked=Dosya_kilitli
+Current_tmp_value=Mevcut_tmp_de\u011feri
+Metadata_change=Metadata_de\u011fi\u015fikli\u011fi
+Changes_have_been_made_to_the_following_metadata_elements=A\u015fa\u011f\u0131daki_metadata_\u00f6gelerinde_de\u011fi\u015fiklik_yap\u0131ld\u0131
+
+Generate_groups_for_author_last_names=Yazar_soyadlar\u0131_i\u00e7in_grup_olu\u015ftur
+Generate_groups_for_editor_last_names=Edit\u00f6r_soyadlar\u0131_i\u00e7in_grup_olu\u015ftur
+Generate_groups_from_keywords_in_a_BibTeX_field=Bir_BibTeX_alan\u0131ndaki_anahtar_s\u00f6zc\u00fcklerden_grup_olu\u015ftur
+Enforce_legal_characters_in_BibTeX_keys=BibTeX_anahtarlar\u0131nda_yasal_karakterleri_zorla
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.='\\#'_\u015feklinde_belirtilmedik\u00e7e_BibTeX_dizgelerinde_#_karakterine_izin_verilmez.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Kaydetmeden_\u00f6nce_l\u00fctfen_#_karakterini_i\u00e7eren_t\u00fcm_dizgeleri_d\u00fczeltin.
+
+Save_without_backup?=Yedeklemeden_kaydedilsin_mi?
+Unable_to_create_backup=Yedek_olu\u015fturulamad\u0131
+
+File_directory_is_not_set_or_does_not_exist.=Dosya_dizini_atanmad\u0131_ya_da_mevcut_de\u011fil.
+Move_file_to_file_directory.=Dosyay\u0131_dosya_dizinine_ta\u015f\u0131.
+Rename_file_to=Dosyay\u0131_\u015funa_yeniden_adland\u0131r
+<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>T\u00fcm_Girdiler</b>_(bu_grup_silinemez_ve_d\u00fczenlenemez)
+static_group=dura\u011fan_grup
+dynamic_group=devingen_grup
+refines_supergroup=s\u00fcpergrubu_rafine_eder
+includes_subgroups=altgruplar\u0131_i\u00e7erir
+contains=i\u00e7erir
+search_expression=arama_ifadesi
+
+Disable_file_renaming_in_non-native_file_dialog=Do\u011fal_olmayan_dosya_ileti\u015fim_kutusunda_dosya_yeniden_adland\u0131rmay\u0131_etkisiz_k\u0131l
+File_dialog=Dosya_ileti\u015fim_kutusu
+No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Girdi_bulunamad\u0131._JStor_aramak_i\u00e7in_giri\u015f_yekiniz_yok_gibi_g\u00f6r\u00fcn\u00fcyor.
+
+Search_ScienceDirect=ScienceDirect'te_Ara
+Error_while_fetching_from_ScienceDirect=ScienceDirect'ten_getirirken_hata
+
+Error_initializing_custom_export_format_from_string_'%0'='%0'_dizgesinden_\u00f6zelle\u015ftirilmi\u015f_d\u0131\u015fa_aktarma_bi\u00e7emi_ilklendirmede_hata
+
+BibLaTeX_mode=BibLaTeX_kipi
+Optional_fields_2=Opsiyonel_alanlar_2
+Please_wait=L\u00fctfen_bekleyin
+Waiting_for_save_operation_to_finish=Kaydetme_i\u015fleminin_bitmesi_bekleniyor
+Resolving_duplicate_BibTeX_keys...=\u00c7ifte_BibTeX_anahtarlar\u0131_\u00e7\u00f6z\u00fcmleniyor...
+Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=\u00c7ifte_BibTeX_anahtarlar\u0131n\u0131n_\u00e7\u00f6z\u00fcmlenmesi_bitti._%0_girdi_de\u011fi\u015ftirildi.
+This_database_contains_one_or_more_duplicated_BibTeX_keys.=Bu_veritaban\u0131_bir_ya_da_daha_fazla_\u00e7ifte_BibTeX_anahtar\u0131_i\u00e7eriyor.
+Do_you_want_to_resolve_duplicate_keys_now?=\u00c7ifte_anahtarlar\u0131_\u015fimdi_\u00e7\u00f6z\u00fcmlemek_ister_misiniz?
+
+Find_and_remove_duplicate_BibTeX_keys=\u00c7ifte_BibTeX_anahtarlar\u0131n\u0131_bul_ve_kald\u0131r
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=--fetch_i\u00e7in_beklenen_s\u00f6zdizimi_:--fetch='<name_of_fetcher>:<query>'
+Duplicate_BibTeX_key=\u00c7ifte_BibTeX_anahtar\u0131
+Duplicate_key=\u00c7ifte_anahtar
+Generate_key=Anahtar_olu\u015ftur
+Import_marking_color=\u0130\u015faretleme_rengi_i\u00e7e_al
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=%0_girdi_bulundu._Sunucu_y\u00fck\u00fcn\u00fc_azaltmak_i\u00e7in,_yaln\u0131zca_%1_indirilecek._ACM'yi_mutlu_etmek_i\u00e7in_\u00e7ok_yava\u015f_olacak.
+BibTeX_importer=BibTeX_i\u00e7e_aktar\u0131c\u0131s\u0131
+Always_add_letter_(a,_b,_...)_to_generated_keys=Olu\u015fturulmu\u015f_anahtarlara_her_zaman_harf_ekle_(a,_b_...)
+
+Ensure_unique_keys_using_letters_(a,_b,_...)=Harf_kullanarak_(a,_b,_...)_anahtarlar\u0131n_e\u015fsizli\u011fini_garantile
+Ensure_unique_keys_using_letters_(b,_c,_...)=Harf_kullanarak_(b,_c,_...)_anahtarlar\u0131n_e\u015fsizli\u011fini_garantile
+Entry_editor_active_background_color=Girdi_d\u00fczenleyicisi_aktif_arkaplan_rengi
+Entry_editor_background_color=Girdi_d\u00fczenleyicisi_arkaplan_rengi
+Entry_editor_font_color=Girdi_d\u00fczenleyicisi_yaz\u0131tipi_rengi
+Entry_editor_invalid_field_color=Girdi_d\u00fczenleyicisi_ge\u00e7ersiz_alan_rengi
+
+Table_and_entry_editor_colors=Tablo_ve_girdi_d\u00fczenleyicisi_renkleri
+
+An_autosave_file_was_found_for_this_database._This_could_indicate_=Bu_veritaban\u0131_i\u00e7in_bir_otokay\u0131t_dosyas\u0131_bulundu._Bu_\u015fu_anlama_gelebilir\:
+that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=bu_dosya_son_kullan\u0131ld\u0131\u011f\u0131nda_JabRef_temiz_kapat\u0131lmad\u0131.
+General_file_directory=Genel_dosya_dizini
+User-specific_file_directory=Kullan\u0131c\u0131ya_\u00f6zel_dosya_dizini
+Error_setting_look_and_feel=G\u00f6r\u00fcn\u00fcm_ve_izlenimi_kurmada_hata
+Search_failed\:_illegal_search_expression=Arama_ba\u015far\u0131s\u0131z\:_uygunsuz_arama_dizgesi
+Show_ArXiv_column=ArXiv_s\u00fctununu_g\u00f6ster
+<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=<HTML>JabRef'le_optimal_kar\u015f\u0131l\u0131kl\u0131_kullan\u0131m_i\u00e7in_<BR>Endnote_i\u00e7in_i\u00e7e_alma/d\u0131\u015fa_aktarma_filtrelerini_i\u00e7eren_zip_dosyas\u0131n\u0131_\u00e7\u00f6z</HTML>
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Herhangi_bir_mevcut_se\u00e7ilmi\u015f_grup\u00e7a_i\u00e7erilen_girdileri_i\u00e7eren_gruplar\u0131_vurgula
+
+You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=Metin_alan\u0131na_1025-65535_aral\u0131\u011f\u0131nda_bir_tamsay\u0131_girmelisiniz
+
+Automatically_open_browse_dialog_when_creating_new_file_link=Yeni_dosya_ba\u011flant\u0131s\u0131n\u0131_olu\u015ftururken_g\u00f6zatma_ileti\u015fim_kutusunu_otomatikman_a\u00e7
+Import_Metadata_from\:=Metaverisini_\u015euradan_\u0130\u00e7e_Aktar\:
+Choose_the_source_for_the_metadata_import=Metaverisini_i\u00e7e_aktarmak_i\u00e7in_kayna\u011f\u0131_se\u00e7in
+Create_entry_based_on_XMP_data=XMP_verisine_dayanarak_girdi_olu\u015ftur
+Create_entry_based_on_data_fetched_from=\u015euradan_al\u0131nan_veriye_dayanarak_girdi_olu\u015ftur
+Create_blank_entry_linking_the_PDF=PDF'yle_ba\u011flant\u0131l\u0131_olarak_bo\u015f_girdi_olu\u015ftur
+Only_attach_PDF=Yaln\u0131zca_PDF'yi_ekle
+Mr._dLib_Metadata_Entries_Associated_With\:=Mr._dLib_Metaverisi_Girdileri_\u015eununla_\u0130li\u015fkili\:
+Mr._dLib_Metadata_Entries_Associated_With_PDF_File=Mr._dLib_Metaverisi_Girdileri_PDF_Dosyas\u0131yla_\u0130li\u015fkili
+Title=Ba\u015fl\u0131k
+Author(s)=Yazar(lar)
+Published_Year=Yay\u0131n_Y\u0131l\u0131
+No_metadata_found.=Metaverisi_bulunamad\u0131.
+Mr._dLib_web_service_is_temporarily_unavailable.=Mr._dLib_a\u011f_servisi_ge\u00e7ici_olarak_servis_d\u0131\u015f\u0131.
+Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=Mr._dLib_a\u011f_servisi_ge\u00e7ici_olarak_servis_d\u0131\u015f\u0131._L\u00fctfen_daha_sonra_tekrar_deneyin.
+You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=Internete_ba\u011fl\u0131_de\u011filsiniz._Mr._dLib_a\u011f_servisine_eri\u015fim_i\u00e7in_internet_ba\u011flant\u0131s\u0131_gereklidir.
+No_Internet_Connection.=Internet_Ba\u011flant\u0131s\u0131_Yok.
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=Bu_JabRef_s\u00fcr\u00fcm\u00fc_art\u0131k_\u00e7al\u0131\u015fmayan_eski_bir_Mr._dLib_a\u011f_servisi_s\u00fcr\u00fcm\u00fcne_eri\u015fmeye_\u00e7al\u0131\u015f\u0131yor.\nL\u00fctfen_daha_fazla_bilgi_ve_g\u00fcncellemeler_i\u00e7in_http\://jabref.sourceforge.net_ya_da_http\ [...]
+Web_Service_Version_Outdated=A\u011f_Servisi_S\u00fcr\u00fcm\u00fc_Eski
+The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=Eri\u015fmeye_\u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z_Mr._dLib_a\u011f_servis_s\u00fcr\u00fcm\u00fc_eskimi\u015f.
+Update_empty_fields_with_data_fetched_from=\u015euradan_al\u0131nan_veriyle_bo\u015f_alanlar\u0131_g\u00fcncelle
+Create_New_Entry=Yeni_Girdi_Olu\u015ftur
+Update_Existing_Entry=Mevcut_Girdiyi_G\u00fcncelle
+Mr._dLib=Mr._dLib
+More_information=Daha_fazla_bilgi
+Fetching_Metadata...=Metaverisi_Al\u0131n\u0131yor...
+Metadata=Metaverisi
+Autocomplete_names_in_'Firstname_Lastname'_format_only=\u0130simleri_yaln\u0131zca_'Ad_Soyad'_bi\u00e7iminde_otomatik_tamamla
+Autocomplete_names_in_'Lastname,_Firstname'_format_only=\u0130simleri_yaln\u0131zca_'Soyad,_Ad'_bi\u00e7iminde_otomatik_tamamla
+Autocomplete_names_in_both_formats=\u0130simleri_her_iki_bi\u00e7imde_otomatik_tamamla
+Marking_color_%0=\u0130\u015faretleme_rengi_%0
+The_name_'comment'_can_not_be_used_as_an_entry_type_name.='comment'_ismi_bir_girdi_t\u00fcr\u00fc_ismi_olarak_kullan\u0131lamaz.
+You_must_enter_an_integer_value_in_the_text_field_for=\u015eunun_i\u00e7in_metin_alan\u0131na_bir_tamsay\u0131_girmelisiniz
+File_directory=Dosya_dizini
+Send_as_email=Eposta_olarak_g\u00f6nder
+References=Kaynaklar
+Sending_of_emails=Epostalar_g\u00f6nderiliyor
+Subject_for_sending_an_email_with_references=Kaynaklarla_g\u00f6nderilecek_bir_eposta_konusu
+Automatically_open_folders_of_attached_files=Ekli_dosyalar\u0131n_klas\u00f6rlerini_otomatikman_a\u00e7
+Create_entry_based_on_content=\u0130\u00e7eri\u011fe_ba\u011fl\u0131_olarak_girdi_olu\u015ftur
+Store_choice_as_default=Se\u00e7imi_\u00f6ntan\u0131ml\u0131_olarak_kaydet
+Do_not_show_this_box_again_for_this_import=Bu_i\u00e7e_aktar\u0131m_i\u00e7in_bu_kutuyu_bir_daha_g\u00f6sterme
+Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=Her_zaman_bu_PDF_i\u00e7e_aktar\u0131m_stilini_kullan_(ve_her_i\u00e7e_aktar\u0131m_i\u00e7in_sorma)
+Error_creating_email=Eposta_olu\u015fturmada_hata
+Could_not_open_directory=Dizin_a\u00e7\u0131lamad\u0131
+Entries_added_to_an_email=Girdiler_bir_epostaya_eklendi
+exportFormat=d\u0131\u015fa-aktar\u0131mBi\u00e7imi
+Output_file_missing=\u00c7\u0131kt\u0131_dosyas\u0131_kay\u0131p
+No_search_matches.=E\u015fle\u015fen_arama_yok
+The_output_option_depends_on_a_valid_input_option.=\u00c7\u0131kt\u0131_se\u00e7ene\u011fi_ge\u00e7erli_bir_girdi_se\u00e7ene\u011fine_ba\u011flml\u0131d\u0131r.
+Default_import_style_for_drag&drop_of_PDFs=S\u00fcr\u00fcklenip_b\u0131rak\u0131lan_PDF'lerin_\u00f6ntan\u0131ml\u0131_i\u00e7e_aktar\u0131m_stili
+Default_PDF_file_link_action=\u00d6ntan\u0131ml\u0131_PDF_dosyas\u0131_ba\u011flant\u0131_eylemi
+File_name_format_pattern=Dosya_ad\u0131_bi\u00e7imi_deseni
+PostgreSQL_database=PostgreSQL_veri_taban\u0131
+DIN_1505=DIN_1505
+Wrong_Format=Yanl\u0131\u015f_Bi\u00e7im
+Path_to_gnuclient_or_emacsclient=gnuclient_ya_da_emacsclient_yolu
+Additional_parameters=Ek_parametreler
+Encrypted_documents_are_not_supported=\u015eifrelenmi\u015f_belgeler_desteklenmiyor
+Cite_selected_entries=Site_se\u00e7imli_girdiler
+Cite_selected_entries_with_in-text_citation=Metin_i\u00e7i_al\u0131nt\u0131l\u0131_site_se\u00e7imli_girdiler
+Cite_special=Siteye_\u00f6zel
+Extra_information_(e.g._page_number)=Ek_bilgi_(\u00f6rnek:_sayfa_numaras\u0131)
+Manage_citations=Al\u0131nt\u0131lar\u0131_y\u00f6net
+Problem_modifying_citation=Al\u0131nt\u0131_de\u011fi\u015ftirmede_sorun
+Citation=Al\u0131nt\u0131
+Context=Ba\u011flam
+Extra_information=Ek_bilgi
+Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=Al\u0131nt\u0131_belirteci_'%0'_i\u00e7in_BibTeX_girdisi_\u00e7\u00f6z\u00fcmlenemedi.
+Styles=Stiller
+Select_style=Stil_se\u00e7
+This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=Bu,_mevcut_stillerin_listesidir._Kullanmak_istedi\u011finizi_se\u00e7iniz.
+Journals=Dergiler
+Cite=Al\u0131nt\u0131la
+Cite_in-text=Metin-i\u00e7i_al\u0131nt\u0131la
+Insert_empty_citation=Bo\u015f_al\u0131nt\u0131_ekle
+Merge_citations=Al\u0131nt\u0131lar\u0131_birle\u015ftir
+Manual_connect=Elle_ba\u011flan
+Select_Writer_document=Writer_belgesi_se\u00e7
+Sync_OO_bibliography=Kaynak\u00e7a_00_g\u00fcncelle
+OpenOffice=OpenOffice
+Select_which_open_Writer_document_to_work_on=Hangi_a\u00e7\u0131k_Writer_belgesi_\u00fczerinde_\u00e7al\u0131\u015f\u0131laca\u011f\u0131n\u0131_se\u00e7
+Connected_to_document=Belgeye_ba\u011fland\u0131
+Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=Metinsiz_bir_al\u0131nt\u0131_se\u00e7_(girdi_kaynak_listesinde_g\u00f6r\u00fcnecek)
+Cite_selected_entries_with_extra_information=Se\u00e7ili_girdileri_ek_bilgiyle_al\u0131nt\u0131la
+Ensure_that_the_bibliography_is_up-to-date=Kaynak\u00e7an\u0131n_g\u00fcncel_oldu\u011funa_emin_ol
+Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=OpenOffice_belgeniz_mevcut_veri_taban\u0131nda_bulunamayan_'%0'_BibTeX_anahtar\u0131n\u0131_kaynak_g\u00f6steriyor.
+Unable_to_synchronize_bibliography=Kaynak\u00e7a_g\u00fcncellenemiyor
+Combine_pairs_of_citations_that_are_separated_by_spaces_only=Yaln\u0131zca_bo\u015flukla_ayr\u0131lm\u0131\u015f_al\u0131nt\u0131_\u00e7iftlerini_birle\u015ftir
+Autodetection_failed=Otomatik_alg\u0131lama_ba\u015far\u0131s\u0131z
+Connecting=Ba\u011flan\u0131yor
+Please_wait...=L\u00fctfen_bekleyin...
+Unable_to_connect=Ba\u011flan\u0131lamad\u0131
+Set_connection_parameters=Ba\u011flant\u0131_parametrelerini_ayarla
+Path_to_OpenOffice_directory=OpenOffice_dizini_yolu
+Path_to_OpenOffice_executable=OpenOffice_\u00e7al\u0131\u015ft\u0131ma_dosyas\u0131_yolu
+Path_to_OpenOffice_library_dir=OpenOffice_k\u00fct\u00fcphane_dizini_yolu
+Autodetect=Otomatik_alg\u0131la
+Connection_lost=Ba\u011flant\u0131_koptu
+The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=Paragraf_bi\u00e7imi_stil_dosyas\u0131nda_'KaynakParagrafBi\u00e7imi'_ya_da_'KaynakBa\u015fl\u0131\u011f\u0131ParagrafBi\u00e7imi'_\u00f6zelli\u011fi_taraf\u0131ndan_kontrol_edilir.
+The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=Karakter_bi\u00e7imi_stil_dosyas\u0131nda_'Al\u0131nt\u0131KarakterBi\u00e7imi'_al\u0131nt\u0131_\u00f6zelli\u011fi_taraf\u0131ndan_kontrol_edilir.
+Automatically_sync_bibliography_when_inserting_citations=Al\u0131nt\u0131_eklenirken_kaynak\u00e7ay\u0131_otomatikman_g\u00fcncelle
+Look_up_BibTeX_entries_in_the_active_tab_only=BibTeX_girdilerini_yaln\u0131zca_etkin_sekmede_ara
+Look_up_BibTeX_entries_in_all_open_databases=BibTeX_girdilerini_t\u00fcm_a\u00e7\u0131k_veri_tabanlar\u0131nda_ara
+Use_in-parenthesis_citation=Parantez-i\u00e7i_al\u0131nt\u0131_kullan
+Use_in-text_citation=Metin-i\u00e7i_al\u0131nt\u0131_kullan
+Autodetecting_paths...=Yollar_otomatikman_alg\u0131lan\u0131yor...
+Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=OpenOffice_kurulumu_otomatikman_alg\u0131lanamad\u0131._L\u00fctfen_kurulma_dizinini_elle_se\u00e7iniz.
+Could_not_find_OpenOffice_installation=OpenOffice_kurulumu_bulunamad\u0131.
+Directories=Dizinler
+Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=Birden_fazla_OpenOffice_\u00e7al\u0131\u015ft\u0131rma_dosyas\u0131_bulundu._L\u00fctfen_hangisine_ba\u011flan\u0131laca\u011f\u0131n\u0131_se\u00e7in\:
+Choose_OpenOffice_executable=OpenOffice_\u00e7al\u0131\u015ft\u0131rma_dosyas\u0131n\u0131_se\u00e7in
+Select_document=Belge_se\u00e7in
+Edit_Group_Membership=Grup_\u00dcyeli\u011fini_D\u00fczenle
+PostgreSQL=PostgreSQL
+Highlight_Words=S\u00f6zc\u00fckleri_Vurgula
+JSTOR_import_cancelled=JSTOR_i\u00e7e_aktar\u0131m\u0131_iptal_edildi
+HTML_list=HTML_listesi
+Click_group_to_toggle_membership_of_selected_entries=Se\u00e7ili_girdilerin_\u00fcyeli\u011fini_ayarlamak_i\u00e7in_grubu_t\u0131klay\u0131n
+Use_EMACS_23_insertion_string=EMACS_23_ekleme_dizgesini_kullan
+Normalize_to_BibTeX_name_format=BibTeX_isim_bi\u00e7imine_normalle\u015ftir
+If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=e\u011fer_m\u00fcmk\u00fcnse,_bu_isim_listesini_standart_BibTeX_isim_bi\u00e7imiyle_uyumlu_olacak_\u015fekilde_normalle\u015ftir
+Could_not_open_%0=%0_a\u00e7\u0131lam\u0131yor
+Unknown_import_format=Bilinmeyen_i\u00e7e_aktar\u0131m_bi\u00e7imi
+Open_INSPIRE_entry=INSPIRE_girdisini_a\u00e7
+An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=INSPIRE_kayna\u011f\u0131ndan_(%0)_al\u0131n\u0131rken_bir_hata_olu\u015ftu\:
+Error_while_fetching_from_Inspire\:_=Inspire'dan_al\u0131n\u0131rken_hata\:
+Web_search=A\u011f_aramas\u0131
+Autocomplete_names=\u0130simeri_otomatikman_tamamla
+You_must_select_either_a_valid_style_file,_or_use_the_default_style.=Ya_ge\u00e7erli_bir_stil_dosyas\u0131_se\u00e7meli,_ya_da_\u00f6ntan\u0131ml\u0131_stili_kullanmal\u0131s\u0131n\u0131z.
+Default_style=\u00d6ntan\u0131ml\u0131_stil
+Choose_style_file_directly=Stil_dosyas\u0131n\u0131_direkt_olarak_se\u00e7in
+Choose_from_a_directory=Bir_dizinden_se\u00e7in
+No_directory_defined_for_%0-files=%0-dosyalar_i\u00e7in_bir_dizin_tan\u0131mlanmad\u0131
+Allow_file_links_relative_to_each_bib_file's_location=Her_bib_dosyas\u0131n\u0131n_konumuna_g\u00f6re_dosya_ba\u011flant\u0131lar\u0131na_izin_ver
+Style_selection=Stil_se\u00e7imi
+The_panel_below_shows_the_definition_of_the_default_style.=A\u015fa\u011f\u0131daki_panel_\u00f6ntan\u0131ml\u0131_stilin_tan\u0131m\u0131n\u0131_g\u00f6stermektedir.
+If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=E\u011fer_bunu_yeni_bir_stil_i\u00e7in_\u015fablon_olarak_kullanmak_isterseniz,_i\u00e7eri\u011fini_yeni_bir_.jstyle_dosyas\u0131na_kopyalayabilirsiniz
+
+Default_style_(author-year_citations)=\u00d6ntan\u0131ml\u0131_stil_(yazar-y\u0131l_al\u0131nt\u0131lar)
+Default_style_(numerical_citations)=\u00d6ntan\u0131ml\u0131_stil_(numaral\u0131_al\u0131nt\u0131lar)
+No_valid_style_file_defined=Ge\u00e7erli_stil_dosyas\u0131_tan\u0131mlanmad\u0131
+Choose_pattern=Desen_se\u00e7in
+Use_the_bib_file_location_as_primary_file_directory=bib_dosyas\u0131_konumunu_birincil_dosya_dizini_olarak_kullan
+Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=gnuclient/emacsclient_program\u0131_\u00e7al\u0131\u015ft\u0131r\u0131lam\u0131yor._Emacsclient/gnuclient_program\u0131n\u0131n_kurulu_oldu\u011funa_ve_YOL'da_mevcut_oldu\u011funa_emin_olun.
+Built-in_journal_list=Yerle\u015fik_dergi_listesi
+OpenOffice/LibreOffice_connection=OpenOffice/LibreOffice_ba\u011flant\u0131s\u0131
+You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=Ki\u015fisel_bir_dergi_listesi_olu\u015fturarak_ya_da_harici_dergi_listelerine_<br>ba\u011flant\u0131_kurarak_yeni_dergi_adlar\u0131_ekleyebilirsiniz.
+JabRef_includes_a_built-in_list_of_journal_abbreviations.=JabRef_yerle\u015fik_bir_dergi_k\u0131saltma_listesi_i\u00e7erir.
+You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=Ya_ge\u00e7erli_bir_stil_dosyas\u0131_se\u00e7meli,_ya_da_\u00f6ntan\u0131ml\u0131_stillerden_birini_kullanmal\u0131s\u0131n\u0131z.
+You_must_select_either_a_valid_style_file,_or_use_a_default_style.=Ya_ge\u00e7erli_bir_stil_dosyas\u0131_se\u00e7meli,_ya_da_\u00f6ntan\u0131ml\u0131_bir_stil_kullanmal\u0131s\u0131n\u0131z.
+
+Show=G\u00f6ster
+This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=Bu_basit_bir_kopyala_ve_yap\u0131\u015ft\u0131r_ileti\u015fim_kutusudur._\u00d6nce_metin_girme_alan\u0131na_bir_metin_y\u00fckleyin_ya_da_yap\u0131\u015ft\u0131r\u0131n.<br>Daha_sonra,_metni_i\u015faretleyip_bir_BibTeX_alan\u0131na_atayabilirsiniz.
+Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=Java_Bouncy_Castle_k\u00fct\u00fcphanesi_bulunamad\u0131._L\u00fctfen_onu_indirin_ve_kurun._Daha_fazla_bilgi_i\u00e7in_http\://www.bouncycastle.org/_adresine_g\u00f6z_at\u0131n.
+This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=Bu_\u00f6zellik_mevcut_bir_LaTex_belgesinde_hangi_girdilerin_gerekli_oldu\u011funa_dayanan_yeni_bir_veritaban\u0131_olu\u015fturur.
+You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=Girdilerinizi_se\u00e7mek_i\u00e7in_a\u00e7\u0131k_veritabanlar\u0131n\u0131zdan_birini_ve_belgenizi_derlerken_LaTex'in_olu\u015fturdu\u011fu_AUX_dosyas\u0131n\u0131_se\u00e7melisiniz.
+First_select_entries_to_clean_up.=\u00d6ncelikle_temizlemek_istedi\u011finiz_girdileri_se\u00e7iniz.
+Cleanup_entry=Girdiyi_temizle
+Autogenerate_PDF_Names=PFD_Adlar\u0131n\u0131_Otomatik_Olu\u015ftur
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=PDF_Adlar\u0131n\u0131_otomatik_olu\u015fturma_geri_al\u0131namaz._Devam_edilsin_mi?
+File_rename_failed_for=Dosya_yeniden_adland\u0131rma_\u015fu_nedenle_ba\u015far\u0131s\u0131z
+You_have_toggled_the_BibLaTeX_mode.=BibLaTex_kipini_de\u011fi\u015ftirdiniz.
+Use_full_firstname_whenever_possible=M\u00fcmk\u00fcn_olduk\u00e7a_tam_ilk_ismi_kullan\u0131n\u0131z
+Use_abbreviated_firstname_whenever_possible=M\u00fcmk\u00fcn_olduk\u00e7a_k\u0131salt\u0131lm\u0131\u015f_ilk_ismi_kullan\u0131n\u0131z
+Use_abbreviated_and_full_firstname=K\u0131salt\u0131lm\u0131\u015f_ve_tam_ilk_ismi_kullan\u0131n\u0131z
+Autocompletion_options=Otomatik_tamamlama_se\u00e7enekleri
+Autocomplete_after_following_number_of_characters=\u015eu_say\u0131daki_karakterden_sonra_otomatik_tamamla
+Name_format_used_for_autocompletion=Otomatik_tamamlama_i\u00e7in_kullan\u0131lan_isim_bi\u00e7emi
+Treatment_of_first_names=\u0130lk_isimlerin_i\u015flenme_\u015fekli
+No_icon_found_for_%0=%0_i\u00e7in_simge_bulunamad\u0131
+Cleanup_entries=Girdileri_temizle
+Automatically_assign_new_entry_to_selected_groups=Se\u00e7ili_gruplara_otomatikman_yeni_girdi_ata
+Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=DOI'leri_not_ve_URL_alanlar\u0131ndan_DOI_alan\u0131na_ta\u015f\u0131_ve_http_\u00f6n_ekini_kald\u0131r
+Format_content_of_month_field_to_#mon#=Ay_alan\u0131n\u0131n_i\u00e7eri\u011fini_#mon#_bi\u00e7emine_d\u00f6n\u00fc\u015ft\u00fcr
+Ensure_that_page_ranges_are_of_the_form_num1--num2=Sayfa_aral\u0131\u011f\u0131n\u0131n_num1--num2_bi\u00e7iminde_oldu\u011fundan_emin_olun
+Make_paths_of_linked_files_relative_(if_possible)=(M\u00fcmk\u00fcnse)_ba\u011flant\u0131l\u0131_dosya_yollar\u0131n\u0131_g\u00f6receli_yap\u0131n
+Rename_PDFs_to_given_file_name_format_pattern=PDF'leri_belirlenmi\u015f_dosya_ismi_bi\u00e7emi_desenine_g\u00f6re_yeniden_adland\u0131r
+Rename_only_PDFs_having_a_relative_path=Yaln\u0131zca_g\u00f6receli_yolu_olan_PDF'leri_yeniden_adland\u0131r
+What_would_you_like_to_clean_up?=Neyi_temizlemek_istersiniz?
+Doing_a_cleanup_for_%0_entries...=%O_girdileri_i\u00e7in_temizlik_yap\u0131l\u0131yor...
+No_entry_needed_a_clean_up=Hi\u00e7bir_girdiye_temizlik_gerekmedi
+One_entry_needed_a_clean_up=Bir_girdi_temizlik_gerektirdi
+%0_entries_needed_a_clean_up=%0_girdi_temizlik_gerektirdi
+Imported_=i\u00e7e_al\u0131nd\u0131_
+Error_importing_from_database=Veritaban\u0131ndan_i\u00e7e_al\u0131nmada_hata
+Minimize_to_system_tray=Sistem_tepsisine_k\u00fc\u00e7\u00fclt
+
+
+Incomplete_search_results=Tamamlanmami\u015f_arama_sonu\u00e7lar\u0131
+%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=%0_girdi_bulundu,_ama_bunlar\u0131n_yaln\u0131zca_%1'i_\u00e7\u00f6z\u00fcmlenebildi.
+
+Error_downloading_file_'%0'=Dosya_indirmede_hata_%0'
+Download_failed=\u0130ndirme_ba\u015far\u0131s\u0131z
+%0_databases_will_be_imported=%0_veritaban\u0131_i\u00e7e_al\u0131nacak
+
+Importing_cancelled=\u0130\u00e7e_aktarma_iptal_edildi
+There_are_no_available_databases_to_be_imported=\u0130\u00e7e_aktar\u0131lacak_mevcut_hi\u00e7bir_veri_taban\u0131_yok
+Import_from_SQL_database=SQL_veri_taban\u0131ndan_i\u00e7e_al
+Imported_%0_databases_successfully=%0_veritaban\u0131_ba\u015far\u0131yla_i\u00e7e_al\u0131nd\u0131
+<_CREATE_NEW_DATABASE_>=<_YEN\u0130_VER\u0130_TABANI_OLU\u015eTUR_>
+Remove_Selected=Se\u00e7iliyi_Sil
+SQL_Database_Exporter=SQL_Veri_Taban\u0131_D\u0131\u015fa_Aktar\u0131c\u0131s\u0131
+Select_target_SQL_database\:=Hedef_SQL_veri_taban\u0131n\u0131_se\u00e7in\:
+SQL_Database_Importer=SQL_Veri_Taban\u0131_\u0130\u00e7e_Aktar\u0131c\u0131s\u0131
+Please_select_which_JabRef_databases_do_you_want_to_import\:=L\u00fctfen_hangi_JabRef_veri_taban\u0131n\u0131_i\u00e7e_aktarmak_istedi\u011finizi_se\u00e7in\:
+Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=Grup_a\u011fac\u0131_\u00e7\u00f6z\u00fcmlenemedi._E\u011fer_BibTeX_veri_taban\u0131n\u0131_kaydederseniz_t\u00fcm_gruplar_yitecek.
+Attach_file=Dosya_ekle
+Setting_all_preferences_to_default_values.=T\u00fcm_tercihler_\u00f6ntan\u0131ml\u0131_de\u011ferlere_ayarlan\u0131yor.
+Resetting_preference_key_'%0'=Tercih_anahtar\u0131_'%0'_yeniden_atan\u0131yor
+Unknown_preference_key_'%0'=Bilinmeyen_tercih_anahtar\u0131_'%0'
+Unable_to_clear_preferences.=Tercihler_silinemedi.
+
+Reset_preferences_(key1,key2,..._or_'all')=Tercihleri_s\u0131f\u0131rla_(anahtar1,anahtar2,..._ya_da_'t\u00fcm\u00fc')
+Find_unlinked_files=Ba\u011flant\u0131s\u0131z_dosyalar\u0131_bul
+Select_All=T\u00fcm\u00fcn\u00fc_se\u00e7
+Unselect_All=T\u00fcm_se\u00e7imleri_kald\u0131r
+Expand_All=T\u00fcm\u00fcn\u00fc_geni\u015flet
+Collapse_All=T\u00fcm_geni\u015fletmeyi_kald\u0131r
+Select_Directory=Dizin_Se\u00e7
+Choose_Directory=Dizin_Se\u00e7
+Use_the_selected_directory_to_start_with_the_search.=Aramay\u0131_ba\u015flatmak_i\u00e7in_se\u00e7ili_dizini_kullan.
+Browse...=G\u00f6z_at...
+Opens_the_file_browser.=Dosya_g\u00f6z_at\u0131c\u0131s\u0131n\u0131_ba\u015flat\u0131r.
+Scan_directory=Dizini_tara
+Searches_the_selected_directory_for_unlinked_files.=Se\u00e7ili_dizini_ba\u011flant\u0131s\u0131z_dosyalar_i\u00e7in_tarar.
+Starts_the_import_of_bibtex_entries.=Bibtex_girdilerinin_i\u00e7e_aktar\u0131m\u0131_ba\u015flat\u0131r.
+Leave_this_dialog.=Bu_ileti\u015fim_kutusunu_terket.
+Create_directory_based_keywords=Dizin_tabanl\u0131_anahtar_s\u00f6zc\u00fckler_olu\u015ftur
+Creates_keywords_in_created_entrys_with_directory_pathnames=Olu\u015fturulan_girdilerde_dizin_yol_adlar\u0131yla_anahtar_s\u00f6zc\u00fckler_olu\u015fturur
+Select_a_directory_where_the_search_shall_start.=Araman\u0131n_ba\u015flayaca\u011f\u0131_dizini_se\u00e7in.
+Select_file_type\:=Dosya_t\u00fcr\u00fc_se\u00e7in\:
+These_files_are_not_linked_in_the_active_database.=Bu_dosyalar\u0131n_aktif_veri_taban\u0131nda_ba\u011flant\u0131lar\u0131_yok.
+Entry_type_to_be_created\:=Olu\u015fturulacak_girdi_t\u00fcr\u00fc\:
+Searching_file_system...=Dosya_sistemi_aran\u0131yor...
+Importing_into_Database...=Veritaban\u0131na_aktar\u0131l\u0131yor...
+Select_directory=Dizin_se\u00e7
+Select_files=Dosya_se\u00e7
+Bibtex_entry_creation=Bibtex_girdisi_olu\u015fturma
+<No_selection>=<Se\u00e7im_yok>
+Push_selection_to_TeXstudio=Se\u00e7imi_TeXstudio'ya_it
+Path_to_TeXstudio=TeXstudio'nun_yolu
+Program_'%0'_not_found='%0'_program\u0131_bulunamad\u0131
+Pushed_citations_to_TeXstudio=Al\u0131nt\u0131lar_TeXstudio'ya_itildi
+Unable_to_connect_to_freecite_online_service.=FreeCite_\u00e7evrimi\u00e7i_servisine_ba\u011flan\u0131lamad\u0131.
+Parse_with_FreeCite=FreeCite_ile_\u00e7\u00f6z\u00fcmle
+Insert_selected_citations_into_TeXstudio=Se\u00e7ili_al\u0131nt\u0131lar\u0131_TexStudio'ya_ekle
+The_current_BibTeX_key_will_be_overwritten._Continue?=Mevcut_BibTeX_anahtar\u0131n\u0131n_\u00fczerine_yaz\u0131lacak._Devam_edilsin_mi?
+Overwrite_key=Anahtar\u0131n_\u00fczerine_yaz
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=Mevcut_anahtar\u0131n_\u00fczerine_yaz\u0131lm\u0131yor._Bu_ayar\u0131_de\u011fi\u015ftirmek_i\u00e7in_Se\u00e7enekler_->_Tercihler_->_BibTeX_anahtar_olu\u015fturucusu'nu_a\u00e7\u0131n
+How_would_you_like_to_link_to_'%0'?='%0'a_nas\u0131l_ba\u011flant\u0131_istersiniz?
+
+Bibtex_key_patterns=Bibtex_anahtar_paternleri
+Changed_special_field_settings=De\u011fi\u015ftirilmi\u015f_\u00f6zel_alan_ayarlar\u0131
+Clear_priority=\u00d6nceli\u011fi_sil
+Clear_rank=R\u00fctbeyi_sil
+Compact_rank=R\u00fctbeyi_s\u0131k\u0131la\u015ft\u0131r
+Convert_1st,_2nd,_..._to_real_superscripts=1.,_2.,_..._vs.'yi_ger\u00e7ek_\u00fcst_karaktere_d\u00f6n\u00fc\u015ft\u00fcr
+Dropped_comment_from_database=Yorum_veri_taban\u0131ndan_\u00e7\u0131kart\u0131ld\u0131
+Enable_PDF_preview=PDF_\u00f6nizlemeyi_etkinle\u015ftir
+Enable_special_fields=\u00d6zle_alanlar\u0131_etkinle\u015ftir
+Five_stars=Be\u015f_y\u0131ld\u0131z
+Four_stars=D\u00f6rt_y\u0131ld\u0131z
+Help_on_special_fields=\u00d6zle_alanlar_konusunda_yard\u0131m
+Keywords_of_selected_entries=Se\u00e7ili_girdilerin_anahtar_s\u00f6zc\u00fckleri
+Manage_content_selectors=\u0130\u00e7erik_se\u00e7icileri_y\u00f6net
+Manage_keywords=Anahtar_s\u00f6zc\u00fckleri_y\u00f6net
+Marked_entries'_quality_as_good=Girdilerin_kalitesi_iyi_olarak_i\u015faretlendi
+Marked_entries_as_relevant=Girdiler_ilgili_olarak_i\u015faretlendi
+No_priority_information=\u00d6ncelik_bilgisi_yok
+No_rank_information=R\u00fctbe_bilgisi_yok
+One_star=Bir_y\u0131ld\u0131z
+Priority=\u00d6ncelik
+Priority_high=\u00d6ncelik_y\u00fcksek
+Priority_low=\u00d6ncelik_d\u00fc\u015f\u00fck
+Priority_medium=\u00d6ncelik_orta
+Quality=Kalite
+Rank=R\u00fctbe
+Relevance=\u0130lgi_d\u00fczeyi
+Set_priority=\u00d6ncelik_ata
+Set_priority_to_high=\u00d6nceli\u011fi_y\u00fckse\u011fe_ayarla
+Set_priority_to_low=\u00d6nceli\u011fi_d\u00fc\u015f\u00fc\u011fe_ayarla
+Set_priority_to_medium=\u00d6nceli\u011fi_ortaya_ayarla
+Set_rank_to_five_stars=R\u00fctbeyi_be\u015f_y\u0131ld\u0131za_ayarla
+Set_rank_to_four_stars=R\u00fctbeyi_d\u00f6rt_y\u0131ld\u0131za_ayarla
+Set_rank_to_one_star=R\u00fctbeyi_bir_y\u0131ld\u0131za_ayarla
+Set_rank_to_three_stars=R\u00fctbeyi_\u00fc\u00e7_y\u0131ld\u0131za_ayarla
+Set_rank_to_two_stars=R\u00fctbeyi_iki_y\u0131ld\u0131za_ayarla
+Show_one_letter_heading_for_icon_columns=Simge_s\u00fctunlar\u0131_i\u00e7in_bir_harfli_ba\u015fl\u0131k_g\u00f6ster
+Show_priority=\u00d6nceli\u011fi_g\u00f6ster
+Show_quality=Kaliteyi_g\u00f6ster
+Show_rank=R\u00fctbeyi_g\u00f6ster
+Show_relevance=\u0130lgi_d\u00fczeyini_g\u00f6ster
+Synchronize_with_keywords=Anahtar_s\u00f6zc\u00fcklerle_e\u015fzamanla
+Synchronized_special_fields_based_on_keywords=Anahtar_s\u00f6zc\u00fcklere_dayanarak_\u00f6zel_alanlar_e\u015fzamanland\u0131
+Three_stars=\u00dc\u00e7_y\u0131ld\u0131z
+Toggle_relevance=\u0130lgi_d\u00fczeyini_de\u011fi\u015ftir
+Toogle_quality_assured=Kalite_g\u00fcvencesini_de\u011fi\u015ftir
+Two_stars=\u0130ki_y\u0131ld\u0131z
+Update_keywords=Anahtar_s\u00f6zc\u00fckleri_g\u00fcncelle
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=\u00d6zel_alan_de\u011ferlerini_BibTex'e_ayr\u0131_alanlar_olarak_yaz
+You_have_changed_settings_for_special_fields.=\u00d6zel_alan_ayarlar\u0131n\u0131_de\u011fi\u015ftirdiniz.
+no_preview_available=\u00f6nizleme_yok
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_girdi_bulundu._Sunucu_y\u00fck\u00fcn\u00fc_azaltmak_i\u00e7in_yaln\u0131zca_%1_indirilecek.
+A_string_with_that_label_already_exists=Bu_etikete_sahip_bir_dizge_zaten_mevcut
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=OpenOffice_ba\u011flant\u0131s\u0131_koptu._L\u00fctfen_OpenOffice'in_a\u00e7\u0131k_oldu\u011funu_teyid_edin,_ve_tekrar_ba\u011flanmay\u0131_deneyin.
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=Girdiyi_d\u00fczeltin,_ve_kayna\u011f\u0131_g\u00f6rmek/d\u00fczenlemek_i\u00e7in_d\u00fczenleyiciyi_tekrar_a\u00e7\u0131n.
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=\u00d6al\u0131\u015fan_bir_gnuserv_s\u00fcrecine_ba\u011flan\u0131lamad\u0131._Emacs_ya_da_XEmacs'\u0131n_\u00e7al\u0131\u015ft\u0131\u011f\u0131na_ve<BR>sunucunun_ba\u015flat\u0131ld\u0131\u011f\u0131na_('server-start'/'gnuserv-start'_komutu_\u00e7al\u0131\u015ft\u0131r\u0131larak)_emin_olun,
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=\u00c7al\u0131\u015fan_OpenOffice'e_ba\u011flan\u0131lam\u0131yor.\nOpenOffice'i_Java_deste\u011fiyle_kurdu\u011funuza_emin_olun.\nManuel_ba\u011flan\u0131yorsan\u0131z_program_ve_k\u00fct\u00fcphane_yollar\u0131n\u0131_kontrol_edin.\n\nHata_mesaj\u0131\:_
+Created_group_"%0".=Grup_"%0"_olu\u015fturuldu.
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=Dosya_d\u0131\u015far\u0131dan_g\u00fcncellendi._Kaydetmek_istedi\u011finize_emin_misiniz?
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=E\u011fer_yap\u0131\u015ft\u0131r\u0131lm\u0131\u015f_ya_da_i\u00e7e_aktar\u0131lm\u0131\u015f_bir_girdi_alan\u0131_atad\u0131ysa_\u00fczerine_yaz.
+Import_Metadata_From_PDF=Metadata'y\u0131_PDF'ten_\u0130\u00e7e_Aktar
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=Herhangi_bir_Writer_belgesine_ba\u011flan\u0131lmad\u0131._L\u00fctfen_bir_belgenin_a\u00e7\u0131k_oldu\u011funa_emin_olun_ve_ona_ba\u011flanmak_i\u00e7in_"Write_belgesini_se\u00e7"_d\u00fc\u011fmesini_kullan\u0131n.
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=L\u00fctfen_bunun_erken_bir_beta_s\u00fcr\u00fcm\u00fc_oldu\u011funu_kaydedin._Dosyalar\u0131n\u0131z\u0131_yedeklemeden_kullanmay\u0131n!
+Removed_all_subgroups_of_group_"%0".=Grup_"%0"'\u0131n_b\u00fct\u00fcn_alt_gruplar\u0131_silindi.
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=Ta\u015f\u0131nabilir_haf\u0131za_kart\u0131_kipini_etkisizle\u015ftirmek_i\u00e7in_JabRef'le_ayn\u0131_klas\u00f6rdeki_jabref.xml_dosyas\u0131n\u0131_silin_ya_da_ad\u0131n\u0131_de\u011fi\u015ftirin.
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=Ba\u011flan\u0131lamad\u0131._Bir_olas\u0131_neden_JabRef_ve_OpenOffice/LibreOffice'in_birlikte_32_bit_ya_da_64_bit_kipinde_\u00e7al\u0131\u015fmamas\u0131d\u0131r.
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=Eklenti_isim_ve_s\u00fcr\u00fcm\u00fc_belirlenemedi._Bu_ge\u00e7erli_bir_JabRef_eklentisi_olmayabilir.
+Use_the_following_delimiter_character(s)\:=A\u015fa\u011f\u0131daki_s\u0131n\u0131rlat\u0131c\u0131_karakter(ler)i_kullan\u0131n\:
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=Dosya_indirirken_ya_da_ba\u011flant\u0131l\u0131_dosyalar\u0131_dosya_dizinine_ta\u015f\u0131rken,_yukar\u0131da_atanan_dosya_dizini_yerine_bib_dosyas\u0131_konumunu_tercih_edin
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Stil_dosyan\u0131z,_mevcut_OpenOffice_belgenizde_tan\u0131mlanmam\u0131\u015f_olan_'%0'_karakter_format\u0131n\u0131_belirtiyor.
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=Stil_dosyan\u0131z,_mevcut_OpenOffice_belgenizde_tan\u0131mlanmam\u0131\u015f_olan_'%0'_paragraf_format\u0131n\u0131_belirtiyor.
+
+Error_fetching_from_Google_Scholar=Google_Akademik'ten_getirmede_hata
+Run_HTML_converter_on_title=Ba\u015fl\u0131kta_HTML_d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fcy\u00fc_\u00e7al\u0131\u015ft\u0131r
+Searching...=Ar\u0131yor...
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=\u0130ndirmek_i\u00e7in_%0'dan_fazla_girdi_se\u00e7tiniz._\u00c7ok_say\u0131da_h\u0131zl\u0131_indirme_yaparsan\u0131z_baz\u0131_web_siteleri_sizi_bloke_edebilir._Devam_etmek_istiyor_musunuz?
+Confirm_selection=Se\u00e7imi_onayla
+Unknown_DOI\:_'%0'.=Bilinmeyen_DOI\:_'%0'.
+Get_BibTeX_entry_from_DOI=BibTeX_girdisini_DOI'den_al
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=Alt_ve_\u00fcstsimgeleri_metinden_ziyade_denklemlere_d\u00f6n\u00fc\u015ft\u00fcrmeyi_tercih_et
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=Aramada_do\u011fru_k\u00fc\u00e7\u00fck_b\u00fcy\u00fck_harf_se\u00e7imi_i\u00e7in_belirli_ba\u015fl\u0131k_s\u00f6zc\u00fcklerine_{}_ekleyin
+Import_conversions=D\u00f6n\u00fc\u015f\u00fcmleri_i\u00e7e_aktar
+Run_filter_on_title_keeping_the_case_of_selected_words=Se\u00e7ili_s\u00f6zc\u00fcklerin_k\u00fc\u00e7\u00fck_b\u00fcy\u00fck_harflerini_koruyarak_ba\u015fl\u0131\u011fa_s\u00fczge\u00e7_uygula
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=IEEE_Xplore_sunucusunda_aral\u0131kl\u0131_hatalar._L\u00fctfen_bir_s\u00fcre_sonra_tekrar_deneyin.
+Please_enter_a_search_string=L\u00fctfen_bir_arama_dizgesi_girin
+Please_open_or_start_a_new_database_before_searching=L\u00fctfen_aramadan_\u00f6nce_bir_veri_taban\u0131_a\u00e7\u0131n_ya_da_ba\u015flat\u0131n
+An_Error_occurred_while_fetching_from_ADS_(%0)\:=ADS'den_getirirken_bir_hata_olu\u015ftu_(%0)\:
+Error_while_fetching_from_ADS=ADS'den_getirirken_hata
+Error_while_fetching_from_OAI2=OAI2'den_getirirken_hata
+An_Error_occurred_while_parsing_abstract=\u00d6zet_ayr\u0131\u015ft\u0131r\u0131l\u0131rken_bir_hata_olu\u015ftu
+Get_BibTeX_entry_from_DiVA=BibTeX_girdisini_DIVA'dan_al
+Log=Kay\u0131t
+Remove_unneccessary_$,_{,_and_}=Zorunlu_olmayan_$,_{,_ve_}_lar\u0131 sil
+Unknown_DiVA_entry\:_'%0'.=_'%0'.=Bilinmeyen_DiVA_girdisi:_'%0'.
diff --git a/src/resource/JabRef_vi.properties b/src/resource/JabRef_vi.properties
index 6f6153c..a0b43da 100644
--- a/src/resource/JabRef_vi.properties
+++ b/src/resource/JabRef_vi.properties
@@ -1,2432 +1,2432 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-
-%0_contains_the_Regular_Expression_<b>%1</b>=%0%0 ch\u1ee9a_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%1</b>
-
-%0_contains_the_term_<b>%1</b>=%0 ch\u1ee9a_thu\u1eadt_ng\u1eef_<b>%1</b>
-
-%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_kh\u00f4ng_ch\u1ee9a_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%1</b>
-
-%0_doesn't_contain_the_term_<b>%1</b>=%0_kh\u00f4ng_ch\u1ee9a_thu\u1eadt_ng\u1eef_<b>%1</b>
-
-%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_kh\u00f4ng_kh\u1edbp_v\u1edbi_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%1</b>
-
-%0_doesn't_match_the_term_<b>%1</b>=%0_kh\u00f4ng_kh\u1edbp_thu\u1eadt_ng\u1eef_<b>%1</b>
-
-%0_export_successful=%0_xu\u1ea5t_th\u00e0nh_c\u00f4ng
-
-%0_field_set=%0_tr\u01b0\u1eddng_\u0111\u01b0\u1ee3c_thi\u1ebft_l\u1eadp
-
-%0_matches_the_Regular_Expression_<b>%1</b>=%0_kh\u1edbp_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%1</b>
-
-%0_matches_the_term_<b>%1</b>=%0_kh\u1edbp_thu\u1eadt_ng\u1eef_<b>%1</b>
-
-<field_name>=<t\u00ean_tr\u01b0\u1eddng>
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Kh\u00f4ng_th\u1ec3_t\u00ecm_th\u1ea5y_t\u1eadp_tin_'%0'<BR>\u0111\u01b0\u1ee3c_li\u00ean_k\u1ebft_t\u1eeb_m\u1ee5c_'%1'</HTML>
-
-<no_field>=<kh\u00f4ng_c\u00f3_tr\u01b0\u1eddng>
-
-<select>=<ch\u1ecdn>
-
-<select_word>=<ch\u1ecdn_t\u1eeb>
-A_string_with_this_label_already_exists=M\u1ed9t_chu\u1ed7i_v\u1edbi_nh\u00e3n_\u0111\u00f3_\u0111\u00e3_c\u00f3
-Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Vi\u1ebft_t\u1eaft_t\u00ean_t\u1ea1p_ch\u00ed_c\u1ee7a_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn_(vi\u1ebft_t\u1eaft_ki\u1ec3u_ISO)
-Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Vi\u1ebft_t\u1eaft_t\u00ean_t\u1ea1p_ch\u00ed_c\u1ee7a_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn_(vi\u1ebft_t\u1eaft_ki\u1ec3u_MEDLINE)
-
-Abbreviate_names=Vi\u1ebft_t\u1eaft_c\u00e1c_t\u00ean
-Abbreviated_%0_journal_names.=%0_t\u00ean_t\u1ea1p_ch\u00ed_\u0111\u01b0\u1ee3c_vi\u1ebft_t\u1eaft.
-
-Abbreviation=Vi\u1ebft_t\u1eaft
-
-About_JabRef=N\u00f3i_v\u1ec1_JabRef
-
-Abstract=T\u00f3m_t\u1eaft
-
-Accept=Ch\u1ea5p_nh\u1eadn
-
-Accept_change=Ch\u1ea5p_nh\u1eadn_thay_\u0111\u1ed5i
-
-Action=H\u00e0nh_\u0111\u1ed9ng
-
-Add=Th\u00eam
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Th\u00eam_m\u1ed9t_l\u1edbp_\u0110\u1ecbnhd\u1ea1ngNh\u1eadp_t\u00f9y_bi\u1ebfn_(\u0111\u01b0\u1ee3c_bi\u00ean_d\u1ecbch)_t\u1eeb_\u0111\u01b0\u1eddng_d\u1eabn_l\u1edbp._\n\u0110\u01b0\u1eddng_d\u1eabn_kh\u00f4ng_\u0111\u01b0\u1ee3c_tr\u00f9ng_v\u1edbi_\u0111\u01b0\u1eddng_d\u1eabn_l\u1edbp_c\u1ee7a_JabRef.
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Th\u00eam_m\u1ed9t_l\u1edbp_\u0110\u1ecbnhd\u1ea1ngNh\u1eadp_t\u00f9y_bi\u1ebfn_(\u0111\u01b0\u1ee3c_bi\u00ean_d\u1ecbch)_t\u1eeb_m\u1ed9t_t\u1eadp_tin-zip._\nT\u1eadp_tin-zip_kh\u00f4ng_\u0111\u01b0\u1ee3c_tr\u00f9ng_v\u1edbi_\u0111\u01b0\u1eddng_d\u1eabn_l\u1edbp_c\u1ee7a_JabRef.
-
-add_entries_to_group=th\u00eam_c\u00e1c_m\u1ee5c_v\u00e0o_nh\u00f3m
-
-Add_entry_selection_to_this_group=Th\u00eam_ph\u00e9p_ch\u1ecdn_m\u1ee5c_v\u00e0o_nh\u00f3m_n\u00e0y
-
-Add_from_folder=Th\u00eam_t\u1eeb_th\u01b0_m\u1ee5c
-
-Add_from_jar=Th\u00eam_t\u1eeb_t\u1eadp_tin_jar
-
-add_group=th\u00eam_nh\u00f3m
-
-Add_Group=Th\u00eam_nh\u00f3m
-
-Add_new=Th\u00eam_m\u1edbi
-
-Add_Subgroup=Th\u00eam_nh\u00f3m_con
-
-Add_to_group=Th\u00eam_v\u00e0o_nh\u00f3m
-
-Added_group_"%0".=Nh\u00f3m_\u0111\u01b0\u1ee3c_th\u00eam_"%0".
-
-Added_new=M\u1edbi_\u0111\u01b0\u1ee3c_th\u00eam
-
-Added_string=Chu\u1ed7i_\u0111\u01b0\u1ee3c_th\u00eam
-
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Ngo\u00e0i_ra,_nh\u1eefng_m\u1ee5c_n\u00e0o_c\u00f3_tr\u01b0\u1eddng_<b [...]
-
-Advanced=N\u00e2ng_cao
-All_custom_file_types_will_be_lost._Proceed?=T\u1ea5t_c\u1ea3_ki\u1ec3u_t\u1eadp_tin_t\u1ef1_t\u1ea1o_s\u1ebd_m\u1ea5t._V\u1eabn_ti\u1ebfp_t\u1ee5c?
-
-All_Entries=T\u1ea5t_c\u1ea3_c\u00e1c_M\u1ee5c
-
-All_entries=T\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c
-All_entries_of_this_type_will_be_declared_typeless._Continue?=T\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_thu\u1ed9c_ki\u1ec3u_n\u00e0y_s\u1ebd_\u0111\u01b0\u1ee3c_\u0111\u1ed5i_th\u00e0nh_kh\u00f4ng_c\u00f3_ki\u1ec3u._Ti\u1ebfp_t\u1ee5c_kh\u00f4ng?
-
-All_fields=T\u1ea5t_c\u1ea3_c\u00e1c_tr\u01b0\u1eddng
-
-All_subgroups_(recursively)=T\u1ea5t_c\u1ea3_c\u00e1c_nh\u00f3m_con_(\u0111\u1ec7_quy)
-
-Allow_editing_in_table_cells=Cho_ph\u00e9p_ch\u1ec9nh_s\u1eeda_trong_\u00f4_c\u1ee7a_b\u1ea3ng
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=M\u1ed9t_l\u1ed7i_x\u1ea3y_ra_khi_\u0111ang_l\u1ea5y_v\u1ec1_t\u1eeb_ngu\u1ed3n_OAI2_(%0):
-An_Exception_ocurred_while_accessing_'%0'=M\u1ed9t_l\u1ed7i_x\u1ea3y_ra_khi_\u0111ang_truy_c\u1eadp_'%0'
-An_SAXException_ocurred_while_parsing_'%0'\:=M\u1ed9t_l\u1ed7i_SAXException_x\u1ea3y_ra_khi_\u0111ang_ph\u00e2n_t\u00e1ch_'%0':
-
-and= v\u00e0
-and_inside_the_JabRef-jar\:=v\u00e0_trong_JabRef-jar:
-
-and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=v\u00e0_l\u1edbp_ph\u1ea3i_c\u00f3_trong_\u0111\u01b0\u1eddng_d\u1eabn_l\u1edbp_l\u1ea7n_sau_khi_b\u1ea1n_kh\u1edfi_\u0111\u1ed9ng_JabRef.
-
-any_field_that_matches_the_regular_expression_<b>%0</b>=b\u1ea5t_k\u1ef3_tr\u01b0\u1eddng_n\u00e0o_kh\u1edbp_Bi\u1ec3u_th\u1ee9c_Ch\u00ednh_t\u1eafc_<b>%0</b>
-
-Appearance=Di\u1ec7n_m\u1ea1o
-
-Append=N\u1ed1i
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=N\u1ed1i_n\u1ed9i_dung_t\u1eeb_m\u1ed9t_CSDL_BibTeX_v\u00e0o_CSDL_\u0111ang_xem_hi\u1ec7n_t\u1ea1i
-
-Append_database=N\u1ed1i_CSDL
-
-append_the_selected_text_to_bibtex_key=n\u1ed1i_n\u1ed9i_dung_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_kh\u00f3a_bibtex
-Application=\u1ee8ng_d\u1ee5ng
-
-Apply=\u00c1p_d\u1ee5ng
-
-Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=C\u00e1c_\u0111\u1ed1i_s\u1ed1_\u0111\u01b0\u1ee3c_truy\u1ec1n_cho_phi\u00ean_JabRef_\u0111ang_ch\u1ea1y._\u0110ang_t\u1eaft.
-
-Assign_entry_selection_exclusively_to_this_group=G\u00e1n_ph\u00e9p_ch\u1ecdn_m\u1ee5c_ch\u1ec9_cho_nh\u00f3m_n\u00e0y
-
-Assign_new_file=G\u00e1n_t\u1eadp_tin_m\u1edbi
-
-Assign_the_original_group's_entries_to_this_group?=G\u00e1n_c\u00e1c_m\u1ee5c_c\u1ee7a_nh\u00f3m_ban_\u0111\u1ea7u_v\u00e0o_nh\u00f3m_n\u00e0y?
-
-Assigned_%0_entries_to_group_"%1".=\u0110\u00e3_g\u00e1n_%0_m\u1ee5c_v\u00e0o_nh\u00f3m_"%1".
-
-Assigned_1_entry_to_group_"%0".=\u0110\u00e3_g\u00e1n_1_m\u1ee5c_v\u00e0o_nh\u00f3m_"%0".
-At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=T\u1ed1i_thi\u1ec3u_ph\u1ea3i_c\u00f3_ph\u1ea7n_m\u1edf_r\u1ed9ng_'net.sf.jabref.core'.
-
-Attach_%0_file=G\u1eafn_%0_t\u1eadp_tin
-
-Attach_URL=G\u1eafn_URL
-
-Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=C\u1ed1_g\u1eafng_thi\u1ebft_l\u1eadp_t\u1ef1_\u0111\u1ed9ng_%0_li\u00ean_k\u1ebft_v\u00e0o_c\u00e1c_m\u1ee5c._Thi\u1ebft_l\u1eadp_t\u1ef1_\u0111\u1ed9ng_ch\u1ea1y_\u0111\u01b0\u1ee3c_n\u1ebfu_m\u1ed9t_t\u1eadp_tin_%0_\u1edf_trong_th\u01b0_m\u1ee5c_ho\u1eb7c_th\u01b0_m\u1ee5c_con_%0_c\u1ee7a_b\u1ea1n<BR>\u0111\u0 [...]
-Attempting_SQL_export...=\u0110ang_c\u1ed1_xu\u1ea5t_ra_SQL...
-
-Auto=T\u1ef1_\u0111\u1ed9ng
-
-Autodetect_format=T\u1ef1_\u0111\u1ed9ng_ph\u00e1t_hi\u1ec7n_\u0111\u1ecbnh_d\u1ea1ng
-
-Autogenerate_BibTeX_key=T\u1ef1_\u0111\u1ed9ng_t\u1ea1o_kh\u00f3a_BibTeX
-Autogenerate_BibTeX_keys=T\u1ef1_\u0111\u1ed9ng_t\u1ea1o_c\u00e1c_kh\u00f3a_BibTeX
-
-Autogenerate_groups=T\u1ef1_\u0111\u1ed9ng_t\u1ea1o_c\u00e1c_nh\u00f3m
-
-autogenerate_keys=t\u1ef1_\u0111\u1ed9ng_t\u1ea1o_c\u00e1c_kh\u00f3a
-Autolink_files_with_names_starting_with_the_BibTeX_key=T\u1ef1_\u0111\u1ed9ng_li\u00ean_k\u1ebft_v\u1edbi_c\u00e1c_t\u00ean_b\u1eaft_\u0111\u1ea7u_b\u1eb1ng_kh\u00f3a_BibTeX
-
-Autolink_only_files_that_match_the_BibTeX_key=Ch\u1ec9_t\u1ef1_\u0111\u1ed9ng_li\u00ean_k\u1ebft_c\u00e1c_t\u1eadp_tin_n\u00e0o_kh\u1edbp_kh\u00f3a_BibTeX
-
-Automatically_create_groups=T\u1ef1_\u0111\u1ed9ng_t\u1ea1o_c\u00e1c_nh\u00f3m
-
-Automatically_create_groups_for_database.=T\u1ef1_\u0111\u1ed9ng_t\u1ea1o_c\u00e1c_nh\u00f3m_d\u00f9ng_cho_CSDL.
-
-Automatically_created_groups=C\u00e1c_nh\u00f3m_\u0111\u01b0\u1ee3c_t\u1ea1o_ra_t\u1ef1_\u0111\u1ed9ng
-
-Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=T\u1ef1_\u0111\u1ed9ng_\u1ea9n_\u0111i_giao_di\u1ec7n_nh\u00f3m_khi_chuy\u1ec3n_qua_m\u1ed9t_CSDL_kh\u00f4ng_ch\u1ee9a_nh\u00f3m
-
-Automatically_remove_exact_duplicates=T\u1ef1_\u0111\u1ed9ng_lo\u1ea1i_b\u1ecf_c\u00e1c_m\u1ee5c_tr\u00f9ng_nhau
-
-Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=T\u1ef1_\u0111\u1ed9ng_hi\u1ec3n_th\u1ecb_giao_di\u1ec7n_nh\u00f3m_khi_chuy\u1ec3n_qua_m\u1ed9t_CSDL_ch\u1ee9a_nh\u00f3m
-
-Autoset=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp
-
-Autoset_%0_field=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp_%0_tr\u01b0\u1eddng
-
-Autoset_%0_links._Allow_overwriting_existing_links.=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp_%0_li\u00ean_k\u1ebft._Cho_ph\u00e9p_ghi_\u0111\u00e8_c\u00e1c_li\u00ean_k\u1ebft_hi\u1ec7n_c\u00f3.
-
-Autoset_%0_links._Do_not_overwrite_existing_links.=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp_%0_li\u00ean_k\u1ebft._Kh\u00f4ng_ghi_\u0111\u00e8_c\u00e1c_li\u00ean_k\u1ebft_hi\u1ec7n_c\u00f3.
-Autoset_external_links=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i
-Autosetting_links=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp_li\u00ean_k\u1ebft
-
-AUX_file_import=Nh\u1eadp_t\u1eadp_tin_AUX
-
-Available_export_formats=C\u00e1c_\u0111\u1ecbnh_d\u1ea1ng_xu\u1ea5t_d\u00f9ng_\u0111\u01b0\u1ee3c
-
-Available_fields=C\u00e1c_tr\u01b0\u1eddng_BibTeX_d\u00f9ng_\u0111\u01b0\u1ee3c
-
-Available_import_formats=C\u00e1c_\u0111\u1ecbnh_d\u1ea1ng_nh\u1eadp_d\u00f9ng_\u0111\u01b0\u1ee3c
-
-Background_color_for_optional_fields=M\u00e0u_n\u1ec1n_cho_c\u00e1c_tr\u01b0\u1eddng_t\u00f9y_ch\u1ecdn
-
-Background_color_for_required_fields=M\u00e0u_n\u1ec1n_cho_c\u00e1c_tr\u01b0\u1eddng_b\u1eaft_bu\u1ed9c
-
-Backup_old_file_when_saving=Sao_l\u1ea1i_t\u1eadp_tin_c\u0169_khi_l\u01b0u
-Beta_version=Phi\u00ean_b\u1ea3n_Beta
-
-Bibkey_to_filename_conversion=Ph\u00e9p_chuy\u1ec3n_Bibkey_th\u00e0nh_t\u00ean_t\u1eadp_tin
-
-BibTeX_key=Kh\u00f3a_BibTeX
-
-BibTeX_key_is_unique.=Kh\u00f3a_BibTeX_kh\u00f4ng_\u0111\u01b0\u1ee3c_tr\u00f9ng.
-
-BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Kh\u00f3a_BibTeX_ch\u01b0a_thi\u1ebft_l\u1eadp._Nh\u1eadp_t\u00ean_cho_t\u1eadp_tin_t\u1ea3i_v\u1ec1
-
-BibTeX_source=Ngu\u1ed3n_BibTeX
-
-BibTeXML=BibTeXML
-
-Binding=G\u1eafn_k\u1ebft
-Broken_link=Li\u00ean_k\u1ebft_b\u1ecb_\u0111\u1ee9t
-
-Browse=Duy\u1ec7t
-
-by=theo
-
-Calling_external_viewer...=\u0110ang_g\u1ecdi_tr\u00ecnh_xem_ngo\u00e0i...
-
-Cancel=H\u1ee7y
-
-Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Kh\u00f4ng_th\u1ec3_th\u00eam_c\u00e1c_m\u1ee5c_v\u00e0o_nh\u00f3m_m\u00e0_kh\u00f4ng_t\u1ea1o_kh\u00f3a._C\u00f3_t\u1ea1o_kh\u00f3a_kh\u00f4ng?
-
-Cannot_merge_this_change=Kh\u00f4ng_th\u1ec3_g\u1ed9p_thay_\u0111\u1ed5i_n\u00e0y
-
-Cannot_move_group_"%0"_down.=Kh\u00f4ng_th\u1ec3_chuy\u1ec3n_nh\u00f3m_"%0"_xu\u1ed1ng.
-
-Cannot_move_group_"%0"_left.=Kh\u00f4ng_th\u1ec3_chuy\u1ec3n_nh\u00f3m_"%0"_qua_tr\u00e1i.
-
-Cannot_move_group_"%0"_right.=Kh\u00f4ng_th\u1ec3_chuy\u1ec3n_nh\u00f3m_"%0"_qua_ph\u1ea3i.
-
-Cannot_move_group_"%0"_up.=Kh\u00f4ng_th\u1ec3_chuy\u1ec3n_nh\u00f3m_"%0"_l\u00ean_tr\u00ean.
-
-case_insensitive=kh\u00f4ng_ph\u00e2n_bi\u1ec7t_ch\u1eef_hoa/th\u01b0\u1eddng
-
-case_sensitive=ph\u00e2n_bi\u1ec7t_ch\u1eef_hoa/th\u01b0\u1eddng
-
-Case_sensitive=Ph\u00e2n_bi\u1ec7t_ch\u1eef_hoa/th\u01b0\u1eddng
-
-change_assignment_of_entries=\u0111\u1ed5i_ph\u00e9p_g\u00e1n_c\u00e1c_m\u1ee5c
-
-Change_case=\u0110\u1ed5i_ch\u1eef_hoa/th\u01b0\u1eddng
-
-Change_entry_type=\u0110\u1ed5i_ki\u1ec3u_c\u1ee7a_m\u1ee5c
-Change_file_type=\u0110\u1ed5i_ki\u1ec3u_t\u1eadp_tin
-
-change_key=\u0111\u1ed5i_kh\u00f3a
-
-Change_of_Grouping_Method=\u0110\u1ed5i_Ph\u01b0\u01a1ng_ph\u00e1p_G\u1ed9p_nh\u00f3m
-
-change_preamble=\u0111\u1ed5i_ph\u1ea7n_m\u1edf_\u0111\u1ea7u
-
-change_string_content=\u0111\u1ed5i_n\u1ed9i_dung_chu\u1ed7i
-
-change_string_name=\u0111\u1ed5i_t\u00ean_chu\u1ed7i
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=\u0110\u1ed5i_c\u1ed9t_c\u1ee7a_b\u1ea3ng_v\u00e0_c\u00e1c_thi\u1ebft_l\u1eadp_tr\u01b0\u1eddng_t\u1ed5ng_qu\u00e1t_\u0111\u1ec3_d\u00f9ng_t\u00ednh_ch\u1ea5t_m\u1edbi
-
-change_type=\u0111\u1ed5i_ki\u1ec3u
-
-changed_=\u0111\u01b0\u1ee3c_thay_\u0111\u1ed5i_
-
-Changed_font_settings=C\u00e1c_thi\u1ebft_l\u1eadp_ph\u00f4ng_\u0111\u01b0\u1ee3c_thay_\u0111\u1ed5i
-
-Changed_language_settings=C\u00e1c_thi\u1ebft_l\u1eadp_ng\u00f4n_ng\u1eef_\u0111\u01b0\u1ee3c_thay_\u0111\u1ed5i
-
-Changed_look_and_feel_settings=C\u00e1c_thi\u1ebft_l\u1eadp_di\u1ec7n_m\u1ea1o_\u0111\u01b0\u1ee3c_thay_\u0111\u1ed5i
-
-Changed_preamble=Ph\u1ea7n_m\u1edf_\u0111\u1ea7u_\u0111\u01b0\u1ee3c_thay_\u0111\u1ed5i
-
-Changed_type_to=Ki\u1ec3u_\u0111\u01b0\u1ee3c_\u0111\u1ed5i_th\u00e0nh
-
-Characters_to_ignore=C\u00e1c_k\u00fd_t\u1ef1_b\u1ecf_qua
-
-Check_existing_%0_links=Ki\u1ec3m_tra_%0_li\u00ean_k\u1ebft_hi\u1ec7n_c\u00f3
-
-Check_links=Ki\u1ec3m_tra_c\u00e1c_li\u00ean_k\u1ebft
-
-Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Ch\u1ecdn_URL_\u0111\u1ec3_t\u1ea3i_v\u1ec1._Gi\u00e1_tr\u1ecb_hi\u1ec7n_t\u1ea1i_tr\u1ecf_\u0111\u1ebfn_m\u1ed9t_danh_s\u00e1ch_do_c\u00e1c_nh\u00e0_ph\u00e1t_tri\u1ec3n_JabRef_cung_c\u1ea5p.
-Cite_command=L\u1ec7nh_tr\u00edch_d\u1eabn
-
-Class_name=T\u00ean_l\u1edbp
-
-Clear=X\u00f3a
-
-clear_all_groups=x\u00f3a_t\u1ea5t_c\u1ea3_c\u00e1c_nh\u00f3m
-
-Clear_field=X\u00f3a_tr\u01b0\u1eddng
-Clear_fields=X\u00f3a_c\u00e1c_tr\u01b0\u1eddng
-
-Clear_highlight=X\u00f3a_ph\u1ea7n_l\u00e0m_n\u1ed5i
-
-Close=\u0110\u00f3ng
-
-Close_dialog=\u0110\u00f3ng_h\u1ed9p_tho\u1ea1i
-
-Close_the_current_database=\u0110\u00f3ng_CSDL_hi\u1ec7n_t\u1ea1i
-
-Close_the_help_window=\u0110\u00f3ng_c\u1eeda_s\u1ed5_tr\u1ee3_gi\u00fap
-
-Close_window=\u0110\u00f3ng_c\u1eeda_s\u1ed5
-
-Closed_database=CSDL_\u0111\u01b0\u1ee3c_\u0111\u00f3ng
-
-Collapse_subtree=Thu_s\u01a1_\u0111\u1ed3_ph\u1ee5_h\u00ecnh_c\u00e2y_l\u1ea1i
-
-Color_codes_for_required_and_optional_fields=\u0110\u00e1nh_m\u00e3_m\u00e0u_c\u00e1c_tr\u01b0\u1eddng_b\u1eaft_bu\u1ed9c_v\u00e0_t\u00f9y_ch\u1ecdn
-
-Color_for_marking_incomplete_entries=M\u00e0u_\u0111\u1ec3_\u0111\u00e1nh_d\u1ea5u_c\u00e1c_m\u1ee5c_ch\u01b0a_ho\u00e0n_t\u1ea5t
-
-Column_width=Chi\u1ec1u_r\u1ed9ng_c\u1ed9t
-
-Command_line_id=Ch\u1ec9_s\u1ed1_(id)_c\u1ee7a_d\u00f2ng_l\u1ec7nh
-
-Complete_record=Ho\u00e0n_t\u1ea5t_b\u1ea3n_ghi
-Connect=K\u1ebft_n\u1ed1i
-Connect_to_SQL_database=K\u1ebft_n\u1ed1i_\u0111\u1ebfn_CSDL_SQL
-Connect_to_SQL_Database=K\u1ebft_n\u1ed1i_\u0111\u1ebfn_CSDL_SQL
-Connection_to_IEEEXplore_failed=K\u1ebft_n\u1ed1i_\u0111\u1ebfn_IEEEXplore_th\u1ea5t_b\u1ea1i
-
-Contained_in=Ch\u1ee9a_trong
-
-Content=N\u1ed9i_dung
-
-Copied=\u0110\u01b0\u1ee3c_ch\u00e9p
-
-Copied_cell_contents=N\u1ed9i_dung_\u00f4_\u0111\u01b0\u1ee3c_ch\u00e9p
-
-Copied_key=Kh\u00f3a_\u0111\u01b0\u1ee3c_ch\u00e9p
-
-Copied_keys=C\u00e1c_kh\u00f3a_\u0111\u01b0\u1ee3c_ch\u00e9p
-
-Copy=Ch\u00e9p
-
-Copy_BibTeX_key=Ch\u00e9p_kh\u00f3a_BibTeX
-Copy_file_to_file_directory.=Ch\u00e9p_t\u1eadp_tin_v\u00e0o_th\u01b0_m\u1ee5c_t\u1eadp_tin.
-Copy_files_to_file_directory.=Ch\u00e9p_c\u00e1c_t\u1eadp_tin_v\u00e0o_th\u01b0_m\u1ee5c_t\u1eadp_tin.
-
-Copy_to_clipboard=Ch\u00e9p_v\u00e0o_b\u1ed9_nh\u1edb_t\u1ea1m
-
-Could_not_call_executable=Kh\u00f4ng_th\u1ec3_g\u1ecdi_ch\u01b0\u01a1ng_tr\u00ecnh
-
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Kh\u00f4ng_th\u1ec3_k\u1ebft_n\u1ed1i_\u0111\u1ebfn_m\u1ed9t_ti\u1ebfn_tr\u00ecnh_gnuserv_\u0111ang_ch\u1ea1y._H\u00e3y_\u0111\u1ea3m_b\u1ea3o_r\u1eb1ng_Emacs_ho\u1eb7c_XEmacs_\u0111ang_ch\u1ea1y,<BR>v\u00e0_r\u1eb1ng_server_\u0111\u00e3_\u0111\u01b0\u1ee3c_kh\u1edfi_\u0111\u1ed9ng_(b\u1eb1ng_c\u00e1ch_ch\u1ea1y_l\u1e [...]
-
-Could_not_connect_to_host_=Kh\u00f4ng_th\u1ec3_k\u1ebft_n\u1ed1i_\u0111\u1ebfn_host_
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Kh\u00f4ng_th\u1ec3_k\u1ebft_n\u1ed1i_\u0111\u1ebfn_server_Vim._H\u00e3y_\u0111\u1ea3m_b\u1ea3o_r\u1eb1ng_Vim_\u0111ang_ch\u1ea1y<BR>v\u1edbi_t\u00ean_server_\u0111\u00fang.
-
-Could_not_export_file=Kh\u00f4ng_th\u1ec3_xu\u1ea5t_t\u1eadp_tin
-
-Could_not_export_preferences=Kh\u00f4ng_th\u1ec3_xu\u1ea5t_c\u00e1c_t\u00f9y_th\u00edch
-
-Could_not_find_a_suitable_import_format.=Kh\u00f4ng_t\u00ecm_th\u1ea5y_\u0111\u1ecbnh_d\u1ea1ng_nh\u1eadp_ph\u00f9_h\u1ee3p.
-Could_not_find_directory_for_%0-files\:_%1=Kh\u00f4ng_t\u00ecm_th\u1ea5y_th\u01b0_m\u1ee5c_d\u00f9ng_cho_%0-t\u1eadp_tin:_%1
-Could_not_find_image_file=Kh\u00f4ng_t\u00ecm_th\u1ea5y_t\u1eadp_tin_\u1ea3nh
-
-Could_not_find_layout_file=Kh\u00f4ng_t\u00ecm_th\u1ea5y_t\u1eadp_tin_tr\u00ecnh_b\u00e0y
-
-Could_not_import_preferences=Kh\u00f4ng_th\u1ec3_nh\u1eadp_c\u00e1c_t\u00f9y_th\u00edch
-
-Could_not_instantiate_%0=Kh\u00f4ng_th\u1ec3_t\u1ea1o_\u0111\u1ed1i_t\u01b0\u1ee3ng_%0
-Could_not_instantiate_%0_%1=Kh\u00f4ng_th\u1ec3_t\u1ea1o_\u0111\u1ed1i_t\u01b0\u1ee3ng_%0_%1
-Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Kh\u00f4ng_th\u1ec3_t\u1ea1o_\u0111\u1ed1i_t\u01b0\u1ee3ng_%0._B\u1ea1n_\u0111\u00e3_ch\u1ecdn_\u0111\u01b0\u1eddng_d\u1eabn_g\u00f3i_\u0111\u00fang_ch\u01b0a?
-Could_not_open_link=Kh\u00f4ng_th\u1ec3_m\u1edf_li\u00ean_k\u1ebft
-
-Could_not_parse_number_of_hits=Kh\u00f4ng_th\u1ec3_ph\u00e2n_t\u00e1ch_s\u1ed1_l\u1ea7n_g\u1eb7p
-Could_not_print_preview=Kh\u00f4ng_th\u1ec3_in_ph\u1ea7n_xem_tr\u01b0\u1edbc
-Could_not_run_the_'vim'_program.=Kh\u00f4ng_th\u1ec3_ch\u1ea1y_ch\u01b0\u01a1ng_tr\u00ecnh_'vim'.
-
-Could_not_save_file=Kh\u00f4ng_th\u1ec3_l\u01b0u_t\u1eadp_tin
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Kh\u00f4ng_th\u1ec3_l\u01b0u_t\u1eadp_tin._M\u00e3_h\u00f3a_k\u00fd_t\u1ef1_'%0'_kh\u00f4ng_\u0111\u01b0\u1ee3c_h\u1ed7_tr\u1ee3.
-
-Create_group=T\u1ea1o_nh\u00f3m
-
-Created_groups.=C\u00e1c_nh\u00f3m_\u0111\u01b0\u1ee3c_t\u1ea1o_ra.
-
-crossreferenced_entries_included=c\u00e1c_m\u1ee5c_c\u00f3_tham_chi\u1ebfu_ch\u00e9o_\u0111\u01b0\u1ee3c_\u0111\u01b0a_v\u00e0o
-
-Current_content=N\u1ed9i_dung_hi\u1ec7n_t\u1ea1i
-
-Current_value=Gi\u00e1_tr\u1ecb_hi\u1ec7n_t\u1ea1i
-
-Custom_entry_types=Ki\u1ec3u_m\u1ee5c_t\u00f9y_ch\u1ec9nh
-
-Custom_entry_types_found_in_file=Ki\u1ec3u_m\u1ee5c_t\u00f9y_ch\u1ec9nh_\u0111\u01b0\u1ee3c_t\u00ecm_th\u1ea5y_trong_t\u1eadp_tin
-Custom_icon_theme=S\u1eafc_th\u00e1i_bi\u1ec3u_t\u01b0\u1ee3ng_t\u00f9y_ch\u1ec9nh
-Custom_icon_theme_file=T\u1eadp_tin_s\u1eafc_th\u00e1i_bi\u1ec3u_t\u01b0\u1ee3ng_t\u00f9y_ch\u1ec9nh
-
-Custom_importers=C\u00e1c_tr\u00ecnh_nh\u1eadp_t\u00f9y_ch\u1ec9nh
-
-Customize_entry_types=T\u00f9y_ch\u1ec9nh_c\u00e1c_ki\u1ec3u_m\u1ee5c
-
-Customize_key_bindings=T\u00f9y_ch\u1ec9nh_t\u1ed5_h\u1ee3p_ph\u00edm
-
-Cut=C\u1eaft
-
-cut_entries=c\u1eaft_c\u00e1c_m\u1ee5c
-
-cut_entry=c\u1eaft_m\u1ee5c
-
-Cut_pr=C\u1eaft_pr
-Database_\:=CSDL:
-
-Database_encoding=M\u00e3_h\u00f3a_CSDL
-
-Database_has_changed._Do_you_want_to_save_before_closing?=CSDL_\u0111\u00e3_thay_\u0111\u1ed5i._B\u1ea1n_c\u00f3_mu\u1ed1n_l\u01b0u_tr\u01b0\u1edbc_khi_\u0111\u00f3ng_kh\u00f4ng?
-
-Database_properties=T\u00ednh_ch\u1ea5t_c\u1ee7a_CSDL
-
-Date_format=\u0110\u1ecbnh_d\u1ea1ng_ng\u00e0y
-
-Default=M\u1eb7c_\u0111\u1ecbnh
-
-Default_encoding=M\u00e3_h\u00f3a_m\u1eb7c_\u0111\u1ecbnh
-
-Default_grouping_field=Tr\u01b0\u1eddng_g\u1ed9p_nh\u00f3m_m\u1eb7c_\u0111\u1ecbnh
-
-Default_look_and_feel=Di\u1ec7n_m\u1ea1o_m\u1eb7c_\u0111\u1ecbnh
-
-Default_pattern=Ki\u1ec3u_m\u1eb7c_\u0111\u1ecbnh
-
-Default_sort_criteria=C\u00e1c_ti\u00eau_chu\u1ea9n_ph\u00e2n_lo\u1ea1i_m\u1eb7c_\u0111\u1ecbnh
-Define_'%0'=\u0110\u1ecbnh_ngh\u0129a_'%0'
-
-Delete=X\u00f3a
-
-Delete_custom_format=X\u00f3a_\u0111\u1ecbnh_d\u1ea1ng_t\u00f9y_ch\u1ecdn
-
-delete_entries=x\u00f3a_c\u00e1c_m\u1ee5c
-
-Delete_entry=X\u00f3a_m\u1ee5c
-
-delete_entry=x\u00f3a_m\u1ee5c
-
-Delete_multiple_entries=X\u00f3a_nhi\u1ec1u_m\u1ee5c
-
-Delete_rows=X\u00f3a_h\u00e0ng
-
-Delete_strings=X\u00f3a_chu\u1ed7i
-
-Deleted=B\u1ecb_x\u00f3a
-
-Delimit_fields_with_semicolon,_ex.=Ph\u00e2n_c\u00e1ch_c\u00e1c_tr\u01b0\u1eddng_b\u1eb1ng,_v\u00ed_d\u1ee5_nh\u01b0,_d\u1ea5u_ch\u1ea5m_ph\u1ea9y.
-
-Descending=Gi\u1ea3m_d\u1ea7n
-
-Description=M\u00f4_t\u1ea3
-
-Deselect_all=Kh\u1eed_ch\u1ecdn_t\u1ea5t_c\u1ea3
-Deselect_all_duplicates=Kh\u1eed_ch\u1ecdn_t\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_l\u1eb7p
-
-Details=Chi_ti\u1ebft
-
-Disable_entry_editor_when_multiple_entries_are_selected=T\u1eaft_tr\u00ecnh_ch\u1ec9nh_s\u1eeda_m\u1ee5c_khi_nhi\u1ec1u_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn
-
-Disable_this_confirmation_dialog=T\u1eaft_h\u1ed9p_tho\u1ea1i_x\u00e1c_nh\u1eadn_n\u00e0y
-
-Disable_this_warning_dialog=T\u1eaft_h\u1ed9p_tho\u1ea1i_c\u1ea3nh_b\u00e1o_n\u00e0y
-
-Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Tr\u00ecnh_b\u00e0y_t\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_thu\u1ed9c_v\u1ec1_m\u1ed9t_ho\u1eb7c_nhi\u1ec1u_nh\u00f3m_\u0111\u01b0\u1ee3c_ch\u1ecdn.
-
-Display_all_error_messages=Tr\u00ecnh_b\u00e0y_t\u1ea5t_c\u1ea3_th\u00f4ng_b\u00e1o_l\u1ed7i
-
-Display_help_on_command_line_options=Tr\u00ecnh_b\u00e0y_tr\u1ee3_gi\u00fap_\u1edf_c\u00e1c_t\u00f9y_ch\u1ecdn_d\u00f2ng_l\u1ec7nh
-
-Display_imported_entries_in_an_inspection_window_before_they_are_added.=Tr\u00ecnh_b\u00e0y_c\u00e1c_m\u1ee5c_nh\u1eadp_v\u00e0o_trong_c\u1eeda_s\u1ed5_xem_x\u00e9t_tr\u01b0\u1edbc_khi_th\u00eam_ch\u00fang.
-
-Display_only_entries_belonging_to_all_selected_groups.=Ch\u1ec9_tr\u00ecnh_b\u00e0y_c\u00e1c_m\u1ee5c_thu\u1ed9c_v\u1ec1_t\u1ea5t_c\u1ea3_c\u00e1c_nh\u00f3m_\u0111\u01b0\u1ee3c_ch\u1ecdn.
-Display_version=Tr\u00ecnh_b\u00e0y_phi\u00ean_b\u1ea3n
-
-Displaying_no_groups=Kh\u00f4ng_tr\u00ecnh_b\u00e0y_c\u00e1c_nh\u00f3m
-
-Do_not_abbreviate_names=Kh\u00f4ng_vi\u1ebft_t\u1eaft_t\u00ean
-
-Do_not_autoset=Kh\u00f4ng_thi\u1ebft_l\u1eadp_t\u1ef1_\u0111\u1ed9ng
-
-Do_not_import_entry=Kh\u00f4ng_nh\u1eadp_m\u1ee5c
-
-Do_not_open_any_files_at_startup=Kh\u00f4ng_m\u1edf_t\u1eadp_tin_n\u00e0o_l\u00fac_kh\u1edfi_\u0111\u1ed9ng
-
-Do_not_overwrite_existing_keys=Kh\u00f4ng_ghi_\u0111\u00e8_c\u00e1c_kh\u00f3a_hi\u1ec7n_c\u00f3
-Do_not_show_splash_window_at_startup=Kh\u00f4ng_hi\u1ec3n_th\u1ecb_m\u00e0n_h\u00ecnh_gi\u1edbi_thi\u1ec7u_l\u00fac_kh\u1edfi_\u0111\u1ed9ng
-Do_not_show_these_options_in_the_future=Kh\u00f4ng_hi\u1ec3n_th\u1ecb_nh\u1eefng_t\u00f9y_ch\u1ecdn_n\u00e0y_trong_t\u01b0\u01a1ng_lai
-
-Do_not_wrap_the_following_fields_when_saving=Kh\u00f4ng_'b\u1ecdc'_nh\u1eefng_tr\u01b0\u1eddng_d\u01b0\u1edbi_\u0111\u00e2y_khi_l\u01b0u
-Do_not_write_the_following_fields_to_XMP_Metadata\:=Kh\u00f4ng_ghi_nh\u1eefng_tr\u01b0\u1eddng_d\u01b0\u1edbi_\u0111\u00e2y_v\u00e0o_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP:
-
-Do_you_want_JabRef_to_do_the_following_operations?=B\u1ea1n_c\u00f3_mu\u1ed1n_JabRef_th\u1ef1c_hi\u1ec7n_nh\u1eefng_l\u1ec7nh_sau?
-
-DocBook=DocBook
-
-Down=Xu\u1ed1ng
-
-Download=T\u1ea3i_xu\u1ed1ng
-
-Download_completed=T\u1ea3i_xu\u1ed1ng_ho\u00e0n_t\u1ea5t
-
-Download_file=T\u1ea3i_xu\u1ed1ng_t\u1eadp_tin
-
-Downloading...=\u0110ang_t\u1ea3i...
-Drag_and_Drop_Error=L\u1ed7i_k\u00e9o_v\u00e0_th\u1ea3
-Drop_%0=Th\u1ea3_%0
-
-duplicate_BibTeX_key=tr\u00f9ng_kh\u00f3a_BibTeX
-
-Duplicate_BibTeX_key.=Tr\u00f9ng_kh\u00f3a_BibTeX.
-
-Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Tr\u00f9ng_kh\u00f3a_BibTeX._Vi\u1ec7c_g\u1ed9p_nh\u00f3m_c\u00f3_th\u1ec3_kh\u00f4ng_l\u00e0m_\u0111\u01b0\u1ee3c_v\u1edbi_m\u1ee5c_n\u00e0y.
-
-Duplicate_Key_Warning=C\u1ea3nh_b\u00e1o_tr\u00f9ng_kh\u00f3a
-
-Duplicate_pairs_found=C\u00e1c_c\u1eb7p_b\u1ecb_tr\u00f9ng_\u0111\u01b0\u1ee3c_t\u00ecm_th\u1ea5y
-
-duplicate_removal=lo\u1ea1i_b\u1ecf_tr\u00f9ng
-
-Duplicate_string_name=Tr\u00f9ng_t\u00ean_chu\u1ed7i
-
-Duplicates_found=T\u00ecm_th\u1ea5y_c\u00e1c_m\u1ee5c_tr\u00f9ng
-
-Duplicates_removed=C\u00e1c_m\u1ee5c_tr\u00f9ng_b\u1ecb_lo\u1ea1i_b\u1ecf
-
-Dynamic_groups=C\u00e1c_nh\u00f3m_\u0111\u1ed9ng
-
-Dynamically_group_entries_by_a_free-form_search_expression=G\u1ed9p_nh\u00f3m_\u0111\u1ed9ng_c\u00e1c_m\u1ee5c_b\u1eb1ng_bi\u1ec3u_th\u1ee9c_t\u00ecm_ki\u1ebfm_d\u1ea1ng_t\u1ef1_do
-
-Dynamically_group_entries_by_searching_a_field_for_a_keyword=G\u1ed9p_nh\u00f3m_\u0111\u1ed9ng_c\u00e1c_m\u1ee5c_b\u1eb1ng_c\u00e1ch_t\u00ecm_tr\u01b0\u1eddng_ho\u1eb7c_t\u1eeb_kh\u00f3a
-
-Each_line_must_be_on_the_following_form=M\u1ed7i_d\u00f2ng_ph\u1ea3i_c\u00f3_d\u1ea1ng_sau
-
-Edit=Ch\u1ec9nh_s\u1eeda
-
-Edit_custom_export=Ch\u1ec9nh_s\u1eeda_vi\u1ec7c_xu\u1ea5t_t\u00f9y_ch\u1ecdn
-Edit_entry=Ch\u1ec9nh_s\u1eeda_m\u1ee5c
-Edit_file_link=Ch\u1ec9nh_s\u1eeda_li\u00ean_k\u1ebft_t\u1eadp_tin
-Edit_file_type=Ch\u1ec9nh_s\u1eeda_ki\u1ec3u_t\u1eadp_tin
-
-Edit_group=Ch\u1ec9nh_s\u1eeda_nh\u00f3m
-
-Edit_journal=Ch\u1ec9nh_s\u1eeda_t\u1ea1p_ch\u00ed
-
-Edit_preamble=Ch\u1ec9nh_s\u1eeda_ph\u1ea7n_m\u1edf_\u0111\u1ea7u
-Edit_strings=Ch\u1ec9nh_s\u1eeda_c\u00e1c_chu\u1ed7i
-Editor_options=C\u00e1c_t\u00f9y_ch\u1ecdn_tr\u00ecnh_ch\u1ec9nh_s\u1eeda
-
-empty_BibTeX_key=kh\u00f3a_BibTeX_r\u1ed7ng
-
-Empty_BibTeX_key.=Kh\u00f3a_BibTeX_r\u1ed7ng
-
-Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Kh\u00f3a_BibTeX_r\u1ed7ng._Vi\u1ec7c_g\u1ed9p_nh\u00f3m_c\u00f3_th\u1ec3_kh\u00f4ng_l\u00e0m_\u0111\u01b0\u1ee3c_v\u1edbi_m\u1ee5c_n\u00e0y.
-
-empty_database=CSDL_r\u1ed7ng
-
-Enable_source_editing=B\u1eadt_ch\u1ec9nh_s\u1eeda_ngu\u1ed3n
-Enable_word/name_autocompletion=B\u1eadt_ch\u1ee9c_n\u0103ng_t\u1ef1_ho\u00e0n_t\u1ea5t_t\u1eeb/t\u00ean
-
-Endnote=Endnote
-
-Enter_URL=Nh\u1eadp_URL
-
-Enter_URL_to_download=Nh\u1eadp_URL_\u0111\u1ec3_t\u1ea3i_v\u1ec1
-
-entries=c\u00e1c_m\u1ee5c
-
-Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Kh\u00f4ng_th\u1ec3_g\u00e1n_th\u1ee7_c\u00f4ng_hay_lo\u1ea1i_b\u1ecf_c\u00e1c_m\u1ee5c_kh\u1ecfi_nh\u00f3m_n\u00e0y.
-
-Entries_exported_to_clipboard=C\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_xu\u1ea5t_ra_b\u1ed9_nh\u1edb_t\u1ea1m
-
-entries_have_undefined_BibTeX_key=c\u00e1c_m\u1ee5c_c\u00f3_kh\u00f3a_BibTeX_kh\u00f4ng_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a
-
-entries_into_new_database=c\u00e1c_m\u1ee5c_v\u00e0o_CSDL_m\u1edbi
-
-entry=m\u1ee5c
-
-Entry_editor=Tr\u00ecnh_ch\u1ec9nh_s\u1eeda_m\u1ee5c
-
-Entry_in_current_database=M\u1ee5c_trong_CSDL_hi\u1ec7n_t\u1ea1i
-
-Entry_in_import=M\u1ee5c_trong_ph\u1ea7n_nh\u1eadp
-
-Entry_preview=Xem_tr\u01b0\u1edbc_m\u1ee5c
-
-Entry_table=B\u1ea3ng_nh\u1eadp_v\u00e0o
-
-Entry_table_columns=C\u00e1c_c\u1ed9t_c\u1ee7a_b\u1ea3ng_nh\u1eadp_v\u00e0o
-
-Entry_type=Ki\u1ec3u_c\u1ee7a_m\u1ee5c
-
-Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Ki\u1ec3u_c\u1ee7a_m\u1ee5c_kh\u00f4ng_\u0111\u01b0\u1ee3c_ph\u00e9p_ch\u1ee9a_kho\u1ea3ng_tr\u1eafng_ho\u1eb7c_c\u00e1c_k\u00fd_t\u1ef1_sau
-
-Entry_types=C\u00e1c_ki\u1ec3u_c\u1ee7a_m\u1ee5c
-
-Error=L\u1ed7i
-Error\:_=L\u1ed7i:_
-Error_converting_Bibtex_to_XMP\:_%0=L\u1ed7i_chuy\u1ec3n_\u0111\u1ed5i_Bibtex_th\u00e0nh_XMP:_%0
-Error_converting_XMP_to_'%0'...=L\u1ed7i_chuy\u1ec3n_\u0111\u1ed5i_XMP_th\u00e0nh_'%0'...
-Error_exporting_to_clipboard=L\u1ed7i_xu\u1ea5t_ra_b\u1ed9_nh\u1edb_t\u1ea1m
-
-##Error:_check_your_External_viewer_settings_in_Preferences=Error:_check_your_External_viewer_settings_in_Preferences
-Error_in_field=L\u1ed7i_trong_tr\u01b0\u1eddng
-Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=L\u1ed7i_kh\u1edfi_\u0111\u1ed9ng_ph\u1ea7n_m\u1edf_r\u1ed9ng_c\u1ee7a_h\u1ec7_th\u1ed1ng._Kh\u1edfi_\u0111\u1ed9ng_kh\u00f4ng_c\u00f3_n\u00f3,_m\u1ed9t_s\u1ed1_ch\u1ee9c_n\u0103ng_c\u00f3_th\u1ec3_b\u1ecb_thi\u1ebfu.
-Error_occured_when_parsing_entry=L\u1ed7i_x\u1ea3y_ra_khi_\u0111ang_ph\u00e2n_t\u00e1ch_m\u1ee5c
-
-Error_opening_file=L\u1ed7i_khi_\u0111ang_m\u1edf_t\u1eadp_tin
-
-Error_setting_field=L\u1ed7i_thi\u1ebft_l\u1eadp_tr\u01b0\u1eddng
-Error_while_converting_BibtexEntry_to_XMP_%0=L\u1ed7i_khi_chuy\u1ec3n_\u0111\u1ed5i_m\u1ee5c_Bibtex_th\u00e0nh_XMP_%0
-Error_while_downloading_file\:=L\u1ed7i_khi_\u0111ang_t\u1ea3i_t\u1eadp_tin:
-Error_while_fetching_from_OIA2=L\u1ed7i_khi_\u0111ang_l\u1ea5y_v\u1ec1_t\u1eeb_OIA2
-Error_while_writing=L\u1ed7i_khi_\u0111ang_ghi
-Error_writing_to_%0_file(s).=L\u1ed7i_khi_\u0111ang_ghi_v\u00e0o_t\u1eadp_tin_%0.
-Error_writing_XMP_to_file\:_%0=L\u1ed7i_khi_\u0111ang_ghi_XMP_v\u00e0o_t\u1eadp_tin:_%0
-
-
-Establishing_SQL_connection...=\u0110ang_thi\u1ebft_l\u1eadp_k\u1ebft_n\u1ed1i_SQL...
-Exceptions=C\u00e1c_ngo\u1ea1i_l\u1ec7
-
-Existing_file=T\u1eadp_tin_hi\u1ec7n_c\u00f3
-
-exists._Overwrite_file?=\u0111\u00e3_c\u00f3._Ghi_\u0111\u00e8_t\u1eadp_tin_kh\u00f4ng?
-exists._Overwrite?=\u0111\u00e3_c\u00f3._Ghi_\u0111\u00e8_kh\u00f4ng?
-
-Expand_subtree=M\u1ed5_r\u1ed9ng_s\u01a1_\u0111\u1ed3_c\u00e2y_ph\u1ee5
-
-#previousentrynottranslated.Toviewit,openGroupinterfaceandclickonthe"newgroup"button
-Export=Xu\u1ea5t
-
-Export_name=Xu\u1ea5t_t\u00ean
-
-Export_preferences=Xu\u1ea5t_c\u00e1c_t\u00f9y_th\u00edch
-
-Export_preferences_to_file=Xu\u1ea5t_c\u00e1c_t\u00f9y_th\u00edch_ra_t\u1eadp_tin
-
-Export_properties=C\u00e1c_t\u00ednh_ch\u1ea5t_xu\u1ea5t
-
-Export_to_clipboard=Xu\u1ea5t_ra_b\u1ed9_nh\u1edb_t\u1ea1m
-Export_to_SQL_database=Xu\u1ea5t_ra_CSDL_SQL
-
-Exporting=\u0110ang_xu\u1ea5t
-Extension=\u0110u\u00f4i_m\u1edf_r\u1ed9ng
-
-External_changes=C\u00e1c_thay_\u0111\u1ed5i_ngo\u00e0i
-
-External_file_links=C\u00e1c_li\u00ean_k\u1ebft_t\u1eadp_tin_ngo\u00e0i
-
-External_files=C\u00e1c_t\u1eadp_tin_ngo\u00e0i
-
-External_programs=C\u00e1c_ch\u01b0\u01a1ng_tr\u00ecnh_ngo\u00e0i
-
-External_viewer_called=Tr\u00ecnh_xem_ngo\u00e0i_\u0111\u01b0\u1ee3c_g\u1ecdi
-
-Failed_to_read_groups_data_(unsupported_version\:_%0)=Th\u1ea5t_b\u1ea1i_khi_\u0111\u1ecdc_d\u1eef_li\u1ec7u_nh\u00f3m_(phi\u00ean_b\u1ea3n_kh\u00f4ng_\u0111\u01b0\u1ee3c_h\u1ed7_tr\u1ee3:_%0)
-
-Fetch=L\u1ea5y_v\u1ec1
-
-Field=Tr\u01b0\u1eddng
-
-field=tr\u01b0\u1eddng
-
-#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
-Field_content=N\u1ed9i_dung_tr\u01b0\u1eddng
-
-Field_name=T\u00ean_tr\u01b0\u1eddng
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=T\u00ean_tr\u01b0\u1eddng_kh\u00f4ng_\u0111\u01b0\u1ee3c_ph\u00e9p_ch\u1ee9a_kho\u1ea3ng_tr\u1eafng_ho\u1eb7c_c\u00e1c_k\u00fd_t\u1ef1_sau
-
-Field_sizes=C\u00e1c_k\u00edch_th\u01b0\u1edbc_tr\u01b0\u1eddng
-Field_to_filter=Tr\u01b0\u1eddng_c\u1ea7n_l\u1ecdc
-
-Field_to_group_by=Tr\u01b0\u1eddng_g\u1ed9p_nh\u00f3m_theo
-
-Fields=C\u00e1c_tr\u01b0\u1eddng
-
-File=T\u1eadp_tin
-
-file=t\u1eadp_tin
-
-File_'%0'_is_already_open.=T\u1eadp_tin_'%0'_\u0111\u00e3_m\u1edf.
-
-File_'%0'_not_found=Kh\u00f4ng_t\u00ecm_th\u1ea5y_t\u1eadp_tin_'%0'
-
-File_changed=T\u1eadp_tin_b\u1ecb_thay_\u0111\u1ed5i
-File_directory_is_'%0'\:=Th\u01b0_m\u1ee5c_t\u1eadp_tin_l\u00e0_'%0':
-
-File_directory_is_not_set_or_does_not_exist!=Th\u01b0_m\u1ee5c_t\u1eadp_tin_kh\u00f4ng_\u0111\u01b0\u1ee3c_thi\u1ebft_l\u1eadp_ho\u1eb7c_kh\u00f4ng_t\u1ed3n_t\u1ea1i!
-File_download=T\u1ea3i_v\u1ec1_t\u1eadp_tin
-File_exists=T\u1eadp_tin_\u0111\u00e3_c\u00f3
-
-File_extension=\u0110u\u00f4i_m\u1edf_r\u1ed9ng_t\u1eadp_tin
-File_has_been_updated_externally._What_do_you_want_to_do?=T\u1eadp_tin_\u0111\u00e3_\u0111\u01b0\u1ee3c_c\u1eadp_nh\u1eadt_\u1edf_ngo\u00e0i_ch\u01b0\u01a1ng_tr\u00ecnh._B\u1ea1n_mu\u1ed1n_l\u00e0m_g\u00ec?
-
-File_not_found=Kh\u00f4ng_th\u1ea5y_t\u1eadp_tin
-File_type=Ki\u1ec3u_t\u1eadp_tin
-
-File_updated_externally=T\u1eadp_tin_\u0111\u01b0\u1ee3c_c\u1eadp_nh\u1eadt_ngo\u00e0i_ch\u01b0\u01a1ng_tr\u00ecnh
-
-filename=t\u00ean_t\u1eadp_tin
-
-Files_opened=C\u00e1c_t\u1eadp_tin_\u0111\u00e3_m\u1edf
-
-Filter=L\u1ecdc
-
-Finished_autosetting_external_links.=Thi\u1ebft_l\u1eadp_t\u1ef1_\u0111\u1ed9ng_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i_ho\u00e0n_t\u1ea5t.
-
-Finished_synchronizing_%0_links._Entries_changed%c_%1.=\u0110\u1ed3ng_b\u1ed9_h\u00f3a_%0_li\u00ean_k\u1ebft_ho\u00e0n_t\u1ea5t._C\u00e1c_m\u1ee5c_thay_\u0111\u1ed5i%c_%1.
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_ho\u00e0n_t\u1ea5t._\u0110\u00e3_ghi_v\u00e0o_%0_t\u1eadp_tin.
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=K\u1ebft_th\u00fac_ghi_XMP_cho_%0_t\u1eadp_tin_(b\u1ecf_qua_%1,_%2_l\u1ed7i).
-
-First_select_the_entries_you_want_keys_to_be_generated_for.=Tr\u01b0\u1edbc_ti\u00ean_h\u00e3y_ch\u1ecdn_c\u00e1c_m\u1ee5c_m\u00e0_b\u1ea1n_mu\u1ed1n_t\u1ea1o_kh\u00f3a.
-
-Fit_table_horizontally_on_screen=L\u00e0m_cho_b\u1ea3ng_kh\u00edt_chi\u1ec1u_ngang_m\u00e0n_h\u00ecnh
-
-Float=Float
-Float_marked_entries=C\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_\u0111\u00e1nh_d\u1ea5u_l\u00e0_Float
-
-Font_Family=H\u1ecd_ph\u00f4ng_ch\u1eef
-
-Font_Preview=Xem_tr\u01b0\u1edbc_ph\u00f4ng_ch\u1eef
-
-Font_Size=C\u1ee1_ph\u00f4ng_ch\u1eef
-
-Font_Style=Ki\u1ec3u_ph\u00f4ng_ch\u1eef
-
-FontSelector=Tr\u00ecnh_ch\u1ecdn_ph\u00f4ng_ch\u1eef
-
-for=d\u00f9ng_cho
-
-Format_of_author_and_editor_names=\u0110\u1ecbnh_d\u1ea1ng_t\u00ean_t\u00e1c_gi\u1ea3_v\u00e0_ng\u01b0\u1eddi_bi\u00ean_t\u1eadp
-Format_String=\u0110\u1ecbnh_d\u1ea1ng_chu\u1ed7i
-
-Format_used=\u0110\u1ecbnh_d\u1ea1ng_\u0111\u01b0\u1ee3c_d\u00f9ng
-Formatter_Name=T\u00ean_tr\u00ecnh_\u0111\u1ecbnh_d\u1ea1ng
-
-Formatter_not_found=Kh\u00f4ng_th\u1ea5y_tr\u00ecnh_\u0111\u1ecbnh_d\u1ea1ng
-
-found=t\u00ecm_th\u1ea5y
-Found_%0_plugin(s)=T\u00ecm_th\u1ea5y_%0_ph\u1ea7n_m\u1edf_r\u1ed9ng
-
-found_in_aux_file=t\u00ecm_th\u1ea5y_trong_t\u1eadp_tin_aux
-
-Full_name=T\u00ean_\u0111\u1ea7y_\u0111\u1ee7
-
-General=T\u1ed5ng_qu\u00e1t
-
-General_fields=C\u00e1c_tr\u01b0\u1eddng_t\u1ed5ng_qu\u00e1t
-
-Generate=T\u1ea1o
-
-Generate_BibTeX_key=T\u1ea1o_kh\u00f3a_BibTeX
-
-Generate_keys=T\u1ea1o_c\u00e1c_kh\u00f3a
-
-Generate_keys_before_saving_(for_entries_without_a_key)=T\u1ea1o_c\u00e1c_kh\u00f3a_tr\u01b0\u1edbc_khi_l\u01b0u_(cho_c\u00e1c_m\u1ee5c_kh\u00f4ng_c\u00f3_kh\u00f3a)
-Generate_keys_for_imported_entries=T\u1ea1o_kh\u00f3a_cho_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_nh\u1eadp_v\u00e0o
-
-Generate_now=T\u1ea1o_b\u00e2y_gi\u1edd
-
-Generated_BibTeX_key_for=Kh\u00f3a_BibTeX_\u0111\u01b0\u1ee3c_t\u1ea1o_ra_cho
-
-Generating_BibTeX_key_for=\u0110ang_t\u1ea1o_kh\u00f3a_BibTeX_cho
-
-Grab=L\u1ea5y
-
-Gray_out_entries_not_in_group_selection=T\u00f4_x\u00e1m_c\u00e1c_m\u1ee5c_kh\u00f4ng_thu\u1ed9c_ph\u00e9p_ch\u1ecdn_nh\u00f3m
-
-Gray_out_non-hits=T\u00f4_x\u00e1m_c\u00e1c_m\u1ee5c_kh\u00f4ng_g\u1eb7p
-
-Gray_out_non-matching_entries=T\u00f4_x\u00e1m_c\u00e1c_m\u1ee5c_kh\u00f4ng_kh\u1edbp
-
-Group_properties=Thu\u1ed9c_t\u00ednh_c\u1ee7a_nh\u00f3m
-
-grouping_may_not_work_for_this_entry=Vi\u1ec7c_g\u1ed9p_nh\u00f3m_c\u00f3_th\u1ec3_kh\u00f4ng_ch\u1ea1y_\u0111\u01b0\u1ee3c_v\u1edbi_m\u1ee5c_n\u00e0y
-
-Groups=C\u00e1c_nh\u00f3m
-
-Harvard_RTF=Harvard_RTF
-
-Have_you_chosen_the_correct_package_path?=B\u1ea1n_\u0111\u00e3_ch\u1ecdn_\u0111\u01b0\u1eddng_d\u1eabn_g\u00f3i_\u0111\u00fang_ch\u01b0a?
-
-Help=Tr\u1ee3_gi\u00fap
-
-Help_contents=N\u1ed9i_dung_tr\u1ee3_gi\u00fap
-
-Help_on_groups=Tr\u1ee3_gi\u00fap_v\u1ec1_nh\u00f3m
-
-Help_on_key_patterns=Tr\u1ee3_gi\u00fap_v\u1ec1_c\u00e1c_ki\u1ec3u_kh\u00f3a
-Help_on_Preview_Settings=Tr\u1ee3_gi\u00fap_v\u1ec1_c\u00e1c_thi\u1ebft_l\u1eadp_xem_tr\u01b0\u1edbc
-Help_on_Regular_Expression_Search=Tr\u1ee3_gi\u00fap_v\u1ec1_t\u00ecm_ki\u1ebfm_b\u1eb1ng_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc
-
-Hide_non-hits=\u1ea8n_c\u00e1c_m\u1ee5c_kh\u00f4ng_g\u1eb7p
-
-Hide_non-matching_entries=\u1ea8n_c\u00e1c_m\u1ee5c_kh\u00f4ng_kh\u1edbp
-
-Hierarchical_context=Ng\u1eef_c\u1ea3nh_c\u00f3_c\u1ea5p_b\u1eadc
-
-Highlight=T\u00f4_s\u00e1ng
-Highlight_groups_matching_all_selected_entries=T\u00f4_s\u00e1ng_nh\u1eefng_nh\u00f3m_kh\u1edbp_t\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn
-Highlight_groups_matching_any_selected_entry=T\u00f4_s\u00e1ng_c\u00e1c_nh\u00f3m_kh\u1edbp_b\u1ea5t_k\u1ef3_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn_n\u00e0o
-
-Highlight_overlapping_groups=T\u00f4_s\u00e1ng_c\u00e1c_nh\u00f3m_g\u1ed1i_nhau
-
-Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=G\u1ee3i_\u00fd%c_\u0110\u1ec3_ch\u1ec9_t\u00ecm_ki\u1ebfm_c\u00e1c_tr\u01b0\u1eddng_\u0111\u1eb7c_th\u00f9,_nh\u1eadp,_v\u00ed_d\u1ee5_nh\u01b0%c<p><tt>author%esmith_and_title%eelectrical</tt>
-
-HTML=HTML
-HTML_table=B\u1ea3ng_HTML
-HTML_table_(with_Abstract_&_BibTeX)=B\u1ea3ng_HTML_(v\u1edbi_T\u00f3m_t\u1eaft_&_BibTeX)
-Icon=Bi\u1ec3u_t\u01b0\u1ee3ng
-
-Ignore=B\u1ecf_qua
-
-Immediate_subgroups=C\u00e1c_nh\u00f3m_con_s\u00e1t_nhau
-
-Import=Nh\u1eadp
-
-Import_and_keep_old_entry=Nh\u1eadp_v\u00e0_gi\u1eef_m\u1ee5c_c\u0169
-
-Import_and_remove_old_entry=Nh\u1eadp_v\u00e0_lo\u1ea1i_b\u1ecf_m\u1ee5c_c\u0169
-
-Import_entries=Nh\u1eadp_c\u00e1c_m\u1ee5c
-
-Import_failed=Vi\u1ec7c_nh\u1eadp_th\u1ea5t_b\u1ea1i
-
-Import_file=Nh\u1eadp_t\u1eadp_tin
-
-Import_group_definitions=Nh\u1eadp_c\u00e1c_\u0111\u1ecbnh_ngh\u0129a_nh\u00f3m
-
-Import_name=Nh\u1eadp_t\u00ean
-
-Import_preferences=Nh\u1eadp_c\u00e1c_t\u00f9y_th\u00edch
-
-Import_preferences_from_file=Nh\u1eadp_c\u00e1c_t\u00f9y_th\u00edch_t\u1eeb_t\u1eadp_tin
-
-Import_strings=Nh\u1eadp_c\u00e1c_chu\u1ed7i
-
-Import_to_open_tab=Nh\u1eadp_v\u00e0o_th\u1ebb_\u0111ang_m\u1edf
-
-Import_word_selector_definitions=Nh\u1eadp_c\u00e1c_\u0111\u1ecbnh_ngh\u0129a_tr\u00ecnh_ch\u1ecdn_t\u1eeb
-
-Imported_database=CSDL_\u0111\u01b0\u1ee3c_nh\u1eadp
-
-Imported_entries=C\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_nh\u1eadp
-
-Imported_from_database=\u0111\u01b0\u1ee3c_nh\u1eadp_t\u1eeb_CSDL
-
-ImportFormat_class=L\u1edbp_\u0110\u1ecbnhd\u1ea1ngNh\u1eadp
-
-Importing=\u0110ang_nh\u1eadp
-
-Importing_in_unknown_format=Nh\u1eadp_v\u00e0o_th\u00e0nh_\u0111\u1ecbnh_d\u1ea1ng_kh\u00f4ng_r\u00f5
-
-In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=Trong_JabRef,_d\u00f9ng_c\u00e1c_c\u1eb7p_k\u00fd_t\u1ef1_#_\u0111\u1ec3_ch\u1ec9_r\u1eb1ng_\u0111\u00f3_l\u00e0_m\u1ed9t_chu\u1ed7i.
-
-Include_abstracts=\u0110\u01b0a_v\u00e0o_c\u1ea3_ph\u1ea7n_t\u00f3m_t\u1eaft
-Include_entries=\u0110\u01b0a_v\u00e0o_c\u00e1c_m\u1ee5c
-
-Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=\u0110\u01b0a_v\u00e0o_c\u00e1c_nh\u00f3m_con\:_Khi_\u0111\u01b0\u1ee3c_ch\u1ecdn,_xem_c\u00e1c_m\u1ee5c_ch\u1ee9a_trong_nh\u00f3m_n\u00e0y_ho\u1eb7c_c\u00e1c_nh\u00f3m_ph\u1ee5_c\u1ee7a_n\u00f3
-
-Incremental=T\u0103ng_d\u1ea7n
-
-Incremental_search=T\u00ecm_t\u0103ng_d\u1ea7n
-
-Incremental_search_failed._Repeat_to_search_from_top.=Ph\u00e9p_t\u00ecm_t\u0103ng_d\u1ea7n_th\u1ea5t_b\u1ea1i._L\u1eb7p_l\u1ea1i_\u0111\u1ec3_t\u00ecm_ki\u1ebfm_t\u1eeb_\u0111\u1ea7u.
-
-Independent_group\:_When_selected,_view_only_this_group's_entries=Nh\u00f3m_\u0111\u1ed9c_l\u1eadp\:_Khi_\u0111\u01b0\u1ee3c_ch\u1ecdn,_ch\u1ec9_xem_c\u00e1c_m\u1ee5c_c\u1ee7a_nh\u00f3m_n\u00e0y
-
-Initially_show_groups_tree_expanded=Ban_\u0111\u1ea7u_hi\u1ec3n_th\u1ecb_c\u00e2y_s\u01a1_\u0111\u1ed3_nh\u00f3m_d\u1ea1ng_m\u1edf_r\u1ed9ng
-
-Input=C\u00e1c_t\u00f9y_ch\u1ecdn_l\u00e0m_vi\u1ec7c
-
-Input_error=L\u1ed7i_\u0111\u1ea7u_v\u00e0o
-
-Insert=Ch\u00e8n
-
-Insert_rows=Ch\u00e8n_h\u00e0ng
-
-Insert_selected_citations_into_LyX/Kile=Ch\u00e8n_c\u00e1c_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_LyX/Kile
-
-Insert_selected_citations_into_WinEdt=Ch\u00e8n_c\u00e1c_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_WinEdt
-
-insert_string_=ch\u00e8n_chu\u1ed7i_
-
-Insert_URL=Ch\u00e8n_URL
-
-integrity=t\u00ednh_to\u00e0n_v\u1eb9n
-
-#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
-Integrity_check=ki\u1ec3m_tra_t\u00ednh_to\u00e0n_v\u1eb9n
-
-Intersection=Giao_nhau
-
-Invalid_BibTeX_key=Kh\u00f3a_BibTeX_kh\u00f4ng_h\u1ee3p_l\u1ec7
-
-Invalid_date_format=\u0110\u1ecbnh_d\u1ea1ng_ng\u00e0y_kh\u00f4ng_h\u1ee3p_l\u1ec7
-
-Invalid_URL=URL_kh\u00f4ng_h\u1ee3p_l\u1ec7
-
-Inverted=\u0110\u1ea3o_ng\u01b0\u1ee3c
-
-is_a_standard_type.=l\u00e0_m\u1ed9t_ki\u1ec3u_chu\u1ea9n.
-
-ISO_abbreviation=Vi\u1ebft_t\u1eaft_ki\u1ec3u_ISO
-
-Item_list_for_field=Danh_s\u00e1ch_h\u1ea1ng_m\u1ee5c_d\u00f9ng_cho_tr\u01b0\u1eddng
-jabref=jabref
-
-JabRef_help=Tr\u1ee3_gi\u00fap_JabRef
-
-JabRef_preferences=C\u00e1c_t\u00f9y_th\u00edch_JabRef
-
-Journal_abbreviations=C\u00e1c_vi\u1ebft_t\u1eaft_t\u00ean_t\u1ea1p_ch\u00ed
-
-Journal_list_preview=Xem_tr\u01b0\u1edbc_danh_s\u00e1ch_t\u1ea1p_ch\u00ed
-
-Journal_name=T\u00ean_t\u1ea1p_ch\u00ed
-
-Keep=Gi\u1eef
-
-Keep_both=Gi\u1eef_c\u1ea3
-
-Keep_lower=Gi\u1eef_m\u1ee5c_d\u01b0\u1edbi
-
-Keep_upper=Gi\u1eef_m\u1ee5c_tr\u00ean
-
-Key_bindings=C\u00e1c_t\u1ed5_h\u1ee3p_ph\u00edm
-
-Key_bindings_changed=C\u00e1c_t\u1ed5_h\u1ee3p_ph\u00edm_thay_\u0111\u1ed5i
-
-Key_generator_settings=C\u00e1c_thi\u1ebft_l\u1eadp_tr\u00ecnh_t\u1ea1o_kh\u00f3a
-
-Key_pattern=Ki\u1ec3u_m\u1eabu_kh\u00f3a
-
-keys_in_database=c\u00e1c_kh\u00f3a_trong_CSDL
-
-#nottranslated.Toviewit,usemenu"Tools|NewBibTeXfilefromAUxfile",andlaunchtheactiononanon-existantauxfile.
-Keyword=T\u1eeb_kh\u00f3a
-
-Label=Nh\u00e3n
-
-Language=Ng\u00f4n_ng\u1eef
-
-Last_modified=Thay_\u0111\u1ed5i_l\u1ea7n_sau_c\u00f9ng
-
-LaTeX_AUX_file=T\u1eadp_tin_LaTeX_AUX
-Leave_file_in_its_current_directory.=Gi\u1eef_t\u1eadp_tin_trong_th\u01b0_m\u1ee5c_hi\u1ec7n_t\u1ea1i_c\u1ee7a_n\u00f3.
-Leave_files_in_their_current_directory.=Gi\u1eef_c\u00e1c_t\u1eadp_tin_trong_th\u01b0_m\u1ee5c_hi\u1ec7n_t\u1ea1i_c\u1ee7a_ch\u00fang.
-
-Left=Tr\u00e1i
-
-License=Gi\u1ea5y_ph\u00e9p
-
-Limit_to_fields=Gi\u1edbi_h\u1ea1n_theo_c\u00e1c_tr\u01b0\u1eddng
-
-Limit_to_selected_entries=Gi\u1edbi_h\u1ea1n_theo_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn
-
-Link=Li\u00ean_k\u1ebft
-Link_local_file=Li\u00ean_k\u1ebft_t\u1eadp_tin_c\u1ee5c_b\u1ed9
-Link_to_file_%0=Li\u00ean_k\u1ebft_\u0111\u1ebfn_t\u1eadp_tin_%0
-
-Listen_for_remote_operation_on_port=L\u1eafng_nghe_l\u1ec7nh_ch\u1ea1y_t\u1eeb_xa_t\u1ea1i_c\u1ed5ng
-Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=N\u1ea1p_v\u00e0_l\u01b0u_c\u00e1c_t\u00f9y_th\u00edch_t\u1eeb/\u0111\u1ebfn_t\u1eadp_tin_jabref.xml_khi_kh\u1edfi_\u0111\u1ed9ng_(ch\u1ebf_\u0111\u1ed9_th\u1ebb_nh\u1edb)
-
-Load_session=N\u1ea1p_phi\u00ean_l\u00e0m_vi\u1ec7c
-
-Loading_session...=\u0110ang_n\u1ea1p_phi\u00ean_l\u00e0m_vi\u1ec7c...
-localhost=localhost
-
-Look_and_feel=H\u00ecnh_th\u1ee9c
-Looking_for_pdf...=\u0110ang_t\u00ecm_pdf...
-lower=c\u1eadn_d\u01b0\u1edbi
-Main_file_directory=Th\u01b0_m\u1ee5c_t\u1eadp_tin_ch\u00ednh
-
-Main_layout_file=T\u1eadp_tin_tr\u00ecnh_b\u00e0y_ch\u00ednh
-
-Main_PDF_directory=Th\u01b0_m\u1ee5c_PDF_ch\u00ednh
-
-Main_PS_directory=Th\u01b0_m\u1ee5c_PS_ch\u00ednh
-
-Manage=Qu\u1ea3n_l\u00fd
-
-Manage_custom_exports=Qu\u1ea3n_l\u00fd_c\u00e1c_ph\u00e9p_xu\u1ea5t_t\u00f9y_ch\u1ecdn
-
-Manage_custom_imports=Qu\u1ea3n_l\u00fd_c\u00e1c_ph\u00e9p_nh\u1eadp_t\u00f9y_ch\u1ecdn
-Manage_external_file_types=Qu\u1ea3n_l\u00fd_c\u00e1c_ki\u1ec3u_t\u1eadp_tin_ngo\u00e0i
-
-Manage_journal_abbreviations=Qu\u1ea3n_l\u00fd_c\u00e1c_vi\u1ebft_t\u1eaft_t\u00ean_t\u1ea1p_ch\u00ed
-
-Mark_entries=\u0110\u00e1nh_d\u1ea5u_c\u00e1c_m\u1ee5c
-
-Mark_entry=\u0110\u00e1nh_d\u1ea5u_m\u1ee5c
-
-Mark_new_entries_with_addition_date=\u0110\u00e1nh_d\u1ea5u_c\u00e1c_m\u1ee5c_m\u1edbi_v\u1edbi_ng\u00e0y_\u0111\u01b0\u1ee3c_th\u00eam_v\u00e0o
-
-Mark_new_entries_with_owner_name=\u0110\u00e1nh_d\u1ea5u_c\u00e1c_m\u1ee5c_m\u1edbi_c\u00f9ng_v\u1edbi_t\u00ean_ng\u01b0\u1eddi_s\u1edf_h\u1eefu
-
-Marked_selected=Ph\u1ea7n_\u0111\u00e1nh_d\u1ea5u_\u0111\u01b0\u1ee3c_ch\u1ecdn
-Memory_Stick_Mode=Ch\u1ebf_\u0111\u1ed9_th\u1ebb_nh\u1edb
-
-Menu_and_label_font_size=C\u1ee1_ph\u00f4ng_ch\u1eef_tr\u00ecnh_\u0111\u01a1n_v\u00e0_nh\u00e3n
-
-Merged_external_changes=C\u00e1c_thay_\u0111\u1ed5i_ngo\u00e0i_\u0111\u01b0\u1ee3c_g\u1ed9p_l\u1ea1i
-
-Messages=C\u00e1c_th\u00f4ng_b\u00e1o
-
-Messages_and_Hints=C\u00e1c_th\u00f4ng_b\u00e1o_v\u00e0_g\u1ee3i_\u00fd
-
-Modification_of_field=S\u1ef1_\u0111i\u1ec1u_ch\u1ec9nh_c\u1ee7a_tr\u01b0\u1eddng
-
-Modified_group_"%0".=Nh\u00f3m_"%0"_\u0111\u01b0\u1ee3c_\u0111i\u1ec1u_ch\u1ec9nh.
-
-Modified_groups=C\u00e1c_nh\u00f3m_\u0111\u01b0\u1ee3c_\u0111i\u1ec1u_ch\u1ec9nh
-
-Modified_string=Chu\u1ed7i_\u0111\u01b0\u1ee3c_\u0111i\u1ec1u_ch\u1ec9nh
-
-Modify=\u0110i\u1ec1u_ch\u1ec9nh
-
-modify_group=\u0111i\u1ec1u_ch\u1ec9nh_nh\u00f3m
-
-MODS=MODS
-
-Move=Chuy\u1ec3n
-
-Move_down=Chuy\u1ec3n_xu\u1ed1ng
-
-Move_entries_in_group_selection_to_the_top=Chuy\u1ec3n_c\u00e1c_m\u1ee5c_trong_nh\u00f3m_\u0111\u01b0\u1ee3c_ch\u1ecdn_l\u00ean_tr\u00ean_c\u00f9ng
-Move_external_links_to_'file'_field=Chuy\u1ec3n_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i_v\u00e0o_tr\u01b0\u1eddng_'file'
-Move_files_to_file_directory.=Chuy\u1ec3n_c\u00e1c_t\u1eadp_tin_v\u00e0o_th\u01b0_m\u1ee5c_t\u1eadp_tin
-
-move_group=chuy\u1ec3n_nh\u00f3m
-
-Move_string_down=Chuy\u1ec3n_chu\u1ed7i_xu\u1ed1ng
-
-Move_string_up=Chuy\u1ec3n_chu\u1ed7i_l\u00ean
-
-Move_up=Chuy\u1ec3n_l\u00ean
-
-Moved_group_"%0".=\u0110\u00e3_chuy\u1ec3n_nh\u00f3m_"%0".
-MS_Office_2007=MS_Office_2007
-MySQL=MySQL
-MySQL_database=CSDL_MySQL
-
-Name=T\u00ean
-Name_formatter=Tr\u00ecnh_\u0111\u1ecbnh_d\u1ea1ng_t\u00ean
-
-Natbib_style=Ki\u1ec3u_Natbib
-
-nested_aux_files=c\u00e1c_t\u1eadp_tin_aux_l\u1ed3ng_nhau
-
-New=M\u1edbi
-
-new=m\u1edbi
-
-New_BibTeX_database=CSDL_BibTeX_m\u1edbi
-
-New_BibTeX_entry=M\u1ee5c_BibTeX_m\u1edbi
-
-New_BibTeX_subdatabase=CSDL_con_BibTeX_m\u1edbi
-
-New_content=N\u1ed9i_dung_m\u1edbi
-
-New_database_created.=CSDL_m\u1edbi_\u0111\u01b0\u1ee3c_tao_ra.
-New_field_value=Gi\u00e1_tr\u1ecb_tr\u01b0\u1eddng_m\u1edbi
-
-New_file=T\u1eadp_tin_m\u1edbi
-New_file_link_(INSERT)=Li\u00ean_k\u1ebft_t\u1eadp_tin_m\u1edbi_(INSERT)
-
-New_group=Nh\u00f3m_m\u1edbi
-
-New_string=Chu\u1ed7i_m\u1edbi
-
-Next_entry=M\u1ee5c_ti\u1ebfp
-
-No_%0_found=Kh\u00f4ng_t\u00ecm_th\u1ea5y_%0
-
-No_actual_changes_found.=Kh\u00f4ng_th\u1ea5y_thay_\u0111\u1ed5i_th\u1ef1c_s\u1ef1_n\u00e0o.
-
-no_base-bibtex-file_specified=t\u1eadp_tin_ki\u1ec3u-bibtex_kh\u00f4ng_\u0111\u01b0\u1ee3c_ch\u1ec9_\u0111\u1ecbnh!
-
-no_database_generated=Kh\u00f4ng_c\u00f3_CSDL_n\u00e0o_\u0111\u01b0\u1ee3c_t\u1ea1o_ra
-
-No_duplicates_found=Kh\u00f4ng_t\u00ecm_th\u1ea5y_c\u00e1c_m\u1ee5c_tr\u00f9ng
-
-No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Kh\u00f4ng_t\u00ecm_th\u1ea5y_m\u1ee5c_n\u00e0o._H\u00e3y_\u0111\u1ea3m_b\u1ea3o_r\u1eb1ng_b\u1ea1n_\u0111ang_d\u00f9ng_b\u1ed9_l\u1ecdc_nh\u1eadp_\u0111\u00fang.
-
-
-No_entries_found_for_the_search_string_'%0'=Kh\u00f4ng_t\u00ecm_th\u1ea5y_m\u1ee5c_n\u00e0o_v\u1edbi_chu\u1ed7i_t\u00ecm_ki\u1ebfm_'%0'
-
-No_entries_imported.=Kh\u00f4ng_m\u1ee5c_n\u00e0o_\u0111\u01b0\u1ee3c_nh\u1eadp.
-
-No_entries_or_multiple_entries_selected.=Kh\u00f4ng_c\u00f3_m\u1ee5c_ho\u1eb7c_c\u00e1c_m\u1ee5c_n\u00e0o_\u0111\u01b0\u1ee3c_nh\u1eadp.
-
-No_entries_selected=Kh\u00f4ng_c\u00f3_m\u1ee5c_n\u00e0o_\u0111\u01b0\u1ee3c_ch\u1ecdn
-No_entries_selected.=Kh\u00f4ng_c\u00f3_m\u1ee5c_n\u00e0o_\u0111\u01b0\u1ee3c_ch\u1ecdn.
-
-No_exceptions_have_ocurred.=Kh\u00f4ng_x\u1ea3y_ra_ngo\u1ea1i_l\u1ec7_n\u00e0o.
-No_files_found.=Kh\u00f4ng_t\u00ecm_th\u1ea5y_t\u1eadp_tin_n\u00e0o.
-
-No_GUI._Only_process_command_line_options.=Kh\u00f4ng_c\u00f3_GD\u0110H._Ch\u1ec9_x\u1eed_l\u00fd_c\u00e1c_t\u00f9y_ch\u1ecdn_d\u00f2ng_l\u1ec7nh.
-
-No_journal_names_could_be_abbreviated.=Kh\u00f4ng_c\u00f3_t\u00ean_t\u1ea1p_ch\u00ed_n\u00e0o_c\u00f3_th\u1ec3_vi\u1ebft_t\u1eaft.
-
-No_journal_names_could_be_unabbreviated.=Kh\u00f4ng_c\u00f3_t\u00ean_t\u1ea1p_ch\u00ed_n\u00e0o_c\u00f3_th\u1ec3_vi\u1ebft_\u0111\u1ea7y_\u0111\u1ee7.
-No_PDF_linked=Kh\u00f4ng_c\u00f3_t\u1eadp_tin_PDF_n\u00e0o_\u0111\u01b0\u1ee3c_li\u00ean_k\u1ebft
-
-No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Kh\u00f4ng_c\u00f3_t\u1eadp_tin_PDF_ho\u1eb7c_PS_n\u00e0o_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a,_v\u00e0_kh\u00f4ng_t\u00ecm_th\u1ea5y_kh\u00f3a_Bibtex_n\u00e0o_kh\u1edbp
-No_plugins_were_found_in_the_following_folders\:=Kh\u00f4ng_t\u00ecm_th\u1ea5y_ph\u1ea7n_m\u1edf_r\u1ed9ng_n\u00e0o_trong_th\u01b0_m\u1ee5c_sau:
-
-No_references_found=Kh\u00f4ng_t\u00ecm_th\u1ea5y_t\u00e0i_li\u1ec7u_tham_kh\u1ea3o_n\u00e0o
-
-No_saved_session_found.=Kh\u00f4ng_t\u00ecm_th\u1ea5y_phi\u00ean_l\u00e0m_vi\u1ec7c_\u0111\u01b0\u1ee3c_l\u01b0u_n\u00e0o.
-
-No_url_defined=Kh\u00f4ng_c\u00f3_url_n\u00e0o_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a
-No_XMP_metadata_found_in_=Kh\u00f4ng_t\u00ecm_th\u1ea5y_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_n\u00e0o_trong_
-
-not=kh\u00f4ng
-
-not_found=kh\u00f4ng_t\u00ecm_th\u1ea5y
-
-Not_saved_(empty_session)=Kh\u00f4ng_\u0111\u01b0\u1ee3c_l\u01b0u_(phi\u00ean_l\u00e0m_vi\u1ec7c_r\u1ed7ng)
-
-Note_that_the_entry_causing_the_problem_has_been_selected.=L\u01b0u_\u00fd_r\u1eb1ng_m\u1ee5c_g\u00e2y_ra_tr\u1ee5c_tr\u1eb7c_\u0111\u00e3_\u0111\u01b0\u1ee3c_ch\u1ecdn.
-
-Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=L\u01b0u_\u00fd_r\u1eb1ng_b\u1ea1n_ph\u1ea3i_ch\u1ec9_\u0111\u1ecbnh_t\u00ean_l\u1edbp_\u0111\u1ee7_\u0111i\u1ec1u_ki\u1ec7n_d\u00f9ng_cho_di\u1ec7n_m\u1ea1o,
-
-Nothing_to_redo=Kh\u00f4ng_c\u00f3_l\u1ec7nh_n\u00e0o_\u0111\u1ec3_l\u1eb7p_l\u1ea1i
-
-Nothing_to_undo=Kh\u00f4ng_c\u00f3_l\u1ec7nh_n\u00e0o_\u0111\u1ec3_quay_ng\u01b0\u1ee3c_l\u1ea1i
-
-#Thenextisusedlikein"Referencesfound:1Numberofreferencestofetch?"
-Number_of_references_to_fetch?=S\u1ed1_l\u01b0\u1ee3ng_t\u00e0i_li\u1ec7u_tham_kh\u1ea3o_c\u1ea7n_l\u1ea5y_v\u1ec1?
-
-occurences=c\u00e1c_l\u1ea7n_xu\u1ea5t_hi\u1ec7n
-
-OK=\u0110\u1ed3ng_\u00fd
-
-Ok=\u0110\u1ed3ng_\u00fd
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=M\u1ed9t_ho\u1eb7c_nhi\u1ec1u_li\u00ean_k\u1ebft_thu\u1ed9c_ki\u1ec3u_'%0',_t\u1ee9c_l\u00e0_lo\u1ea1i_kh\u00f4ng_x\u00e1c_\u0111\u1ecbnh._B\u1ea1n_mu\u1ed1n_l\u00e0m_g\u00ec?
-
-One_or_more_keys_will_be_overwritten._Continue?=M\u1ed9t_ho\u1eb7c_nhi\u1ec1u_kh\u00f3a_s\u1ebd_b\u1ecb_ghi_\u0111\u00e8._C\u00f3_ti\u1ebfp_t\u1ee5c_kh\u00f4ng?
-Only_one_item_is_supported=Ch\u1ec9_c\u00f3_m\u1ed9t_h\u1ea1ng_m\u1ee5c_\u0111\u01b0\u1ee3c_h\u1ed7_tr\u1ee3
-
-Open=M\u1edf
-
-Open_BibTeX_database=M\u1edf_CSDL_BibTeX
-
-Open_database=M\u1edf_CSDL
-
-Open_editor_when_a_new_entry_is_created=M\u1edf_tr\u00ecnh_bi\u00ean_t\u1eadp_khi_m\u1ed9t_m\u1ee5c_m\u1edbi_\u0111\u01b0\u1ee3c_tao
-
-Open_file=M\u1edf_t\u1eadp_tin
-
-Open_last_edited_databases_at_startup=M\u1edf_CSDL_ch\u1ec9nh_s\u1eeda_l\u1ea7n_cu\u1ed1i_khi_kh\u1edfi_\u0111\u1ed9ng
-
-Open_PDF_or_PS=M\u1edf_PDF_ho\u1eb7c_PS
-
-Open_right-click_menu_with_Ctrl+left_button=M\u1edf_tr\u00ecnh_\u0111\u01a1n_nh\u1eafp_chu\u1ed9t_ph\u1ea3i_b\u1eb1ng_t\u1ed5_h\u1ee3p_ph\u00edm_Ctrl+left
-
-Open_URL_or_DOI=M\u1edf_URL_ho\u1eb7c_DOI
-OpenDocument_Spreadsheet=T\u00e0i.li\u1ec7u.v\u0103n.b\u1ea3n.m\u1edf_B\u1ea3ng.t\u00ednh
-
-Opened_database=CSDL_\u0111\u01b0\u1ee3c_m\u1edf
-
-Opening=\u0110ang_m\u1ecf
-
-Opening_preferences...=\u0110ang_m\u1edf_c\u00e1c_t\u00f9y_th\u00edch...
-
-OpenOffice_Calc=OpenOffice_Calc
-OpenOffice_CSV=OpenOffice_CSV
-Operation_canceled.\n=L\u1ec7nh_b\u1ecb_h\u1ee7y.\n
-Operation_not_supported=L\u1ec7nh_kh\u00f4ng_\u0111\u01b0\u1ee3c_h\u1ed7_tr\u1ee3
-
-Optional_fields=C\u00e1c_tr\u01b0\u1eddng_t\u00f9y_ch\u1ecdn
-
-Options=T\u00f9y_ch\u1ecdn
-
-or=ho\u1eb7c
-
-out_of=ngo\u00e0i
-Output=\u0110\u1ea7u_ra
-
-Output_or_export_file=\u0110\u1ea7u_ra_ho\u1eb7c_t\u1eadp_tin_xu\u1ea5t
-
-Override=Ghi_\u0111\u00e8
-
-Override_default_file_directories=Ghi_\u0111\u00e8_c\u00e1c_th\u01b0_m\u1ee5c_t\u1eadp_tin_m\u1eb7c_\u0111\u1ecbnh
-
-Override_default_font_settings=Ghi_\u0111\u00e8_c\u00e1c_thi\u1ebft_l\u1eadp_ph\u00f4ng_ch\u1eef_m\u1eb7c_\u0111\u1ecbnh
-
-override_the_bibtex_key_by_the_selected_text=ghi_\u0111\u00e8_kh\u00f3a_bibtex_b\u1eb1ng_ch\u1eef_\u0111\u01b0\u1ee3c_ch\u1ecdn
-
-
-Overwrite=Ghi_\u0111\u00e8
-Overwrite_existing_field_values=Ghi_\u0111\u00e8_c\u00e1c_gi\u00e1_tr\u1ecb_tr\u01b0\u1eddng_hi\u1ec7n_c\u00f3
-
-Overwrite_keys=Ghi_\u0111\u00e8_c\u00e1c_kh\u00f3a
-
-pairs_processed=c\u00e1c_c\u1eb7p_\u0111\u01b0\u1ee3c_x\u1eed_l\u00fd
-Password_\:=M\u1eadt_m\u00e3:
-
-Paste=D\u00e1n
-
-paste_entries=d\u00e1n_c\u00e1c_m\u1ee5c
-
-paste_entry=d\u00e1n_m\u1ee5c
-Paste_from_clipboard=D\u00e1n_t\u1eeb_b\u1ed9_nh\u1edb_t\u1ea1m
-
-Pasted=\u0110\u01b0\u1ee3c_d\u00e1n
-
-Path_to_%0_not_defined=\u0110\u01b0\u1eddng_d\u1eabn_\u0111\u1ebfn_%0_kh\u00f4ng_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a
-
-Path_to_LatexEditor_(LEd.exe)=\u0110\u01b0\u1eddng_d\u1eabn_\u0111\u1ebfn_tr\u00ecnh_bi\u00ean_t\u1eadp_Latex_(LEd.exe)
-
-Path_to_LyX_pipe=\u0110\u01b0\u1eddng_d\u1eabn_\u0111\u1ebfn_\u1ed1ng_d\u1eabn_LyX
-
-Path_to_Vim=\u0110\u01b0\u1eddng_d\u1eabn_\u0111\u1ebfn_Vim
-
-Path_to_WinEdt.exe=\u0110\u01b0\u1eddng_d\u1eabn_\u0111\u1ebfn_WinEdt.exe
-
-PDF_directory=Th\u01b0_m\u1ee5c_PDF
-PDF_does_not_exist=PDF_kh\u00f4ng_t\u1ed3n_t\u1ea1i
-
-Personal_journal_list=Danh_s\u00e1ch_t\u1ea1p_ch\u00ed_ri\u00eang
-
-Plain_text_import=Nh\u1eadp_v\u0103n_b\u1ea3n_tr\u01a1n
-
-Please_check_your_network_connection_to_this_machine.=Vui_l\u00f2ng_ki\u1ec3m_tra_k\u1ebft_n\u1ed1i_m\u1ea1ng_\u0111\u1ebfn_m\u00e1y_n\u00e0y.
-
-Please_enter_a_name_for_the_group.=Vui_l\u00f2ng_nh\u1eadp_t\u00ean_cho_nh\u00f3m.
-
-Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Vui_l\u00f2ng_nh\u1eadp_m\u1ed9t_thu\u1eadt_ng\u1eef_t\u00ecm_ki\u1ebfm._V\u00ed_d\u1ee5,_\u0111\u1ec3_t\u00ecm_t\u1eeb_<b>Smith</b>_trong_t\u1ea5t_c\u1ea3_c\u00e1c_tr\u01b0\u1eddng,_nh\u1eadp%c<p><tt>smith</tt><p>._\u0110\u1ec3_ [...]
-
-Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Vui_l\u00f2ng_nh\u1eadp_tr\u01b0\u1eddng_c\u1ea7n_t\u00ecm_(v\u00ed_d\u1ee5:_<b>t\u1eeb_kho\u00e1</b>)_v\u00e0_t\u1eeb_kh\u00f3a_c\u1ea7n_t\u00ecm_ki\u1ebfm_trong_tr\u01b0\u1eddng_\u0111\u00f3_(v\u00ed_d\u1ee5:_<b>electrical</b>).
-
-Please_enter_the_string's_label=Vui_l\u00f2ng_nh\u1eadp_nh\u00e3n_c\u1ee7a_chu\u1ed7i
-
-Please_select_an_importer=Vui_l\u00f2ng_ch\u1ecdn_m\u1ed9t_tr\u00ecnh_nh\u1eadp
-
-Please_select_an_importer.=Vui_l\u00f2ng_ch\u1ecdn_m\u1ed9t_tr\u00ecnh_nh\u1eadp.
-
-Please_select_exactly_one_group_to_move.=Vui_l\u00f2ng_ch\u1ecdn_ch\u00ednh_x\u00e1c_m\u1ed9t_nh\u00f3m_c\u1ea7n_di_chuy\u1ec3n
-Please_specify_the_=Vui_l\u00f2ng_ch\u1ec9_\u0111\u1ecbnh_
-
-Possible_duplicate_entries=C\u00e1c_m\u1ee5c_c\u00f3_th\u1ec3_b\u1ecb_tr\u00f9ng
-
-Possible_duplicate_of_existing_entry._Click_to_resolve.=C\u00f3_th\u1ec3_m\u1ee5c_hi\u1ec7n_c\u00f3_b\u1ecb_tr\u00f9ng._Nh\u1eafp_chu\u1ed9t_\u0111\u1ec3_gi\u1ea3i.
-
-Preamble=Ph\u1ea7n_m\u1edf_\u0111\u1ea7u
-
-Preferences=C\u00e1c_t\u00f9y_th\u00edch
-
-Preferences_recorded.=C\u00e1c_t\u00f9y_th\u00edch_\u0111\u01b0\u1ee3c_ghi_l\u1ea1i.
-
-Preview=Xem_tr\u01b0\u1edbc
-
-Previous_entry=M\u1ee5c_tr\u01b0\u1edbc_\u0111\u00f3
-
-Primary_sort_criterion=Ti\u00eau_chu\u1ea9n_x\u1ebfp_th\u1ee9_t\u1ef1_ch\u00ednh
-Print_Preview=Xem_tr\u01b0\u1edbc_khi_in
-Printing_Entry_Preview=Xem_tr\u01b0\u1edbc_ph\u1ea7n_in_m\u1ed9t_m\u1ee5c
-
-Problem_with_parsing_entry=Tr\u1ee5c_tr\u1eb7c_khi_ph\u00e2n_t\u00e1ch_m\u1ee5c
-Processing_=\u0110ang_x\u1eed_l\u00fd_
-Program_output=\u0110\u1ea7u_ra_c\u1ee7a_ch\u01b0\u01a1ng_tr\u00ecnh
-
-PS_directory=Th\u01b0_m\u1ee5c_PS
-Push_entries_to_external_application_(%0)=\u0110\u01b0a_c\u00e1c_m\u1ee5c_ra_\u1ee9ng_d\u1ee5ng_ngo\u00e0i_(%0)
-
-Push_selection_to_Emacs=\u0110\u01b0a_c\u00e1c_m\u1ee5c_ra_Emacs
-
-Push_selection_to_LyX/Kile=\u0110\u01b0a_c\u00e1c_m\u1ee5c_ra_LyX/Kile
-Push_selection_to_Vim=\u0110\u01b0a_ra_m\u1ee5c_ra_Vim
-
-Push_selection_to_WinEdt=\u0110\u01b0a_c\u00e1c_m\u1ee5c_ra_WinEdt
-
-Push_to_LatexEditor=\u0110\u01b0a_c\u00e1c_m\u1ee5c_ra_tr\u00ecnh_bi\u00ean_t\u1eadp_Latex
-Pushed_citations_to_%0=C\u00e1c_tr\u00edch_d\u1eabn_\u0111\u00e3_\u0111\u01b0\u1ee3c_\u0111\u01b0a_qua_%0
-
-Pushed_citations_to_Emacs=C\u00e1c_tr\u00edch_d\u1eabn_\u0111\u00e3_\u0111\u01b0\u1ee3c_\u0111\u01b0a_qua_Emacs
-Pushed_citations_to_Vim=C\u00e1c_tr\u00edch_d\u1eabn_\u0111\u00e3_\u0111\u01b0\u1ee3c_\u0111\u01b0a_qua_Vim
-
-Pushed_citations_to_WinEdt=C\u00e1c_tr\u00edch_d\u1eabn_\u0111\u00e3_\u0111\u01b0\u1ee3c_\u0111\u01b0a_qua_WinEdt
-
-Pushed_the_citations_for_the_following_rows_to=\u0110\u00e3_\u0111\u01b0a_c\u00e1c_tr\u00edch_d\u1eabn_c\u1ee7a_nh\u1eefng_h\u00e0ng_sau_qua
-
-Quit_JabRef=Tho\u00e1t_JabRef
-
-Quit_synchronization=Th\u00f4i_\u0111\u1ed3ng_b\u1ed9_h\u00f3a
-
-Raw_source=Ngu\u1ed3n_th\u00f4
-
-Really_delete_the_selected=Th\u1ef1c_s\u1ef1_x\u00f3a_ph\u1ea7n_ch\u1ecdn
-
-Rearrange_tabs_alphabetically_by_title=X\u1ebfp_l\u1ea1i_c\u00e1c_th\u1ebb_theo_th\u1ee9_t\u1ef1_ABC_theo_ti\u00eau_\u0111\u1ec1
-
-Redo=L\u1eb7p_l\u1ea1i_l\u1ec7nh
-
-Reference_database=CSDL_tham_kh\u1ea3o
-
-#Thenexttwolinesareusedlikein"Referencesfound:1Numberofreferencestofetch?"
-References_found=C\u00e1c_t\u00e0i_li\u1ec7u_tham_kh\u1ea3o_\u0111\u01b0\u1ee3c_t\u00ecm_th\u1ea5y
-
-Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Tinh_ch\u1ec9nh_nh\u00f3m_l\u1edbn:_Khi_\u0111\u01b0\u1ee3c_ch\u1ecdn,_xem_c\u00e1c_m\u1ee5c_ch\u1ee9a_c\u00e1c_trong_nh\u00f3m_n\u00e0y_v\u00e0_nh\u00f3m_l\u1edbn_c\u1ee7a_n\u00f3
-
-Refresh_view=L\u00e0m_t\u01b0\u01a1i_l\u1ea1i_ph\u1ea7n_xem
-
-Regular_Expression=Bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc
-
-Remember_these_entry_types?=Nh\u1edb_c\u00e1c_ki\u1ec3u_m\u1ee5c_n\u00e0y?
-
-Remote_operation=L\u1ec7nh_t\u1eeb_xa
-
-Remote_server_port=C\u1ed5ng_m\u00e1y_ch\u1ee7_t\u1eeb_xa
-
-Remove=Lo\u1ea1i_b\u1ecf
-
-Remove_all?=Lo\u1ea1i_b\u1ecf_t\u1ea5t_c\u1ea3?
-
-Remove_all_subgroups=Lo\u1ea1i_b\u1ecf_t\u1ea5t_c\u1ea3_c\u00e1c_nh\u00f3m_con
-
-Remove_all_subgroups_of_"%0"?=Lo\u1ea1i_b\u1ecf_t\u1ea5t_c\u1ea3_c\u00e1c_nh\u00f3m_con_c\u1ee7a_"%0"?
-
-Remove_double_braces_around_BibTeX_fields_when_loading.=Lo\u1ea1i_b\u1ecf_c\u00e1c_d\u1ea5u_ngo\u1eb7c_m\u00f3c_\u0111\u00f4i_quanh_c\u00e1c_tr\u01b0\u1eddng_BibTeX_khi_n\u1ea1p.
-
-Remove_duplicates=Lo\u1ea1i_b\u1ecf_c\u00e1c_m\u1ee5c_b\u1ecb_tr\u00f9ng
-
-Remove_entry_from_import=Lo\u1ea1i_b\u1ecf_m\u1ee5c_kh\u1ecfi_l\u1ec7nh_nh\u1eadp
-
-Remove_entry_selection_from_this_group=Lo\u1ea1i_b\u1ecf_ph\u00e9p_ch\u1ecdn_m\u1ee5c_kh\u1ecfi_nh\u00f3m_n\u00e0y
-
-Remove_entry_type=Lo\u1ea1i_b\u1ecf_ki\u1ec3u_m\u1ee5c
-Remove_file_link_(DELETE)=Lo\u1ea1i_b\u1ecf_li\u00ean_k\u1ebft_t\u1eadp_tin_(X\u00d3A)
-
-remove_from_group=lo\u1ea1i_b\u1ecf_kh\u1ecfi_nh\u00f3m
-
-Remove_from_group=Lo\u1ea1i_b\u1ecf_kh\u1ecfi_nh\u00f3m
-
-Remove_group=Lo\u1ea1i_b\u1ecf_nh\u00f3m
-
-Remove_group,_keep_subgroups=Lo\u1ea1i_b\u1ecf_nh\u00f3m,_gi\u1eef_l\u1ea1i_c\u00e1c_nh\u00f3m_con
-
-Remove_group_"%0"?=Lo\u1ea1i_b\u1ecf_nh\u00f3m_"%0"?
-
-Remove_group_"%0"_and_its_subgroups?=Lo\u1ea1i_b\u1ecf_nh\u00f3m_"%0"_v\u00e0_c\u00e1c_nh\u00f3m_con_c\u1ee7a_n\u00f3?
-
-remove_group_(keep_subgroups)=lo\u1ea1i_b\u1ecf_nh\u00f3m_(gi\u1eef_c\u00e1c_nh\u00f3m_con)
-
-remove_group_and_subgroups=lo\u1ea1i_b\u1ecf_nh\u00f3m_v\u00e0_c\u00e1c_nh\u00f3m_con
-
-Remove_group_and_subgroups=Lo\u1ea1i_b\u1ecf_nh\u00f3m_v\u00e0_c\u00e1c_nh\u00f3m_con
-
-Remove_link=Lo\u1ea1i_b\u1ecf_li\u00ean_k\u1ebft
-
-Remove_old_entry=Lo\u1ea1i_b\u1ecf_m\u1ee5c_c\u0169
-
-Remove_selected_strings=Lo\u1ea1i_b\u1ecf_c\u00e1c_chu\u1ed7i_\u0111\u01b0\u1ee3c_ch\u1ecdn
-
-remove_string_=lo\u1ea1i_b\u1ecf_chu\u1ed7i_
-
-Removed_group_"%0".=\u0110\u00e3_lo\u1ea1i_b\u1ecf_nh\u00f3m_"%0".
-
-Removed_group_"%0"_and_its_subgroups.=\u0110\u00e3_lo\u1ea1i_b\u1ecf_nh\u00f3m_"%0"_v\u00e0_c\u00e1c_nh\u00f3m_con_c\u1ee7a_n\u00f3.
-
-Removed_string=\u0110\u00e3_lo\u1ea1i_b\u1ecf_chu\u1ed7i
-
-Renamed_string=Chu\u1ed7i_\u0111\u01b0\u1ee3c_\u0111\u1eb7t_t\u00ean_l\u1ea1i
-
-Replace=Thay_th\u1ebf
-
-Replace_(regular_expression)=Thay_th\u1ebf_(bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc)
-
-Replace_string=Thay_th\u1ebf_chu\u1ed7i
-
-Replace_with=Thay_th\u1ebf_b\u1edfi
-
-Replaced=B\u1ecb_thay_th\u1ebf
-
-Required_fields=C\u00e1c_tr\u01b0\u1eddng_c\u1ea7n_c\u00f3
-
-Reset_all=Thi\u1ebft_l\u1eadp_l\u1ea1i_t\u1ea5t_c\u1ea3
-Reset_file_type_definitons=Thi\u1ebft_l\u1eadp_l\u1ea1i_c\u00e1c_\u0111\u1ecbnh_ngh\u0129a_ki\u1ec3u_t\u1eadp_tin
-
-Resolve_strings_for_all_fields_except=Gi\u1ea3i_c\u00e1c_chu\u1ed7i_cho_t\u1ea5t_c\u1ea3_c\u00e1c_tr\u01b0\u1eddng_ngo\u1ea1i_tr\u1eeb
-Resolve_strings_for_standard_BibTeX_fields_only=Ch\u1ec9_gi\u1ea3i_c\u00e1c_chu\u1ed7i_cho_c\u00e1c_tr\u01b0\u1eddng_BibTeX
-
-resolved=\u0111\u01b0\u1ee3c_gi\u1ea3i
-
-Results=C\u00e1c_k\u1ebft_qu\u1ea3
-
-Revert_to_original_source=Tr\u1ea3_ng\u01b0\u1ee3c_l\u1ea1i_ngu\u1ed3n_ban_\u0111\u1ea7u
-
-Review=Xem_x\u00e9t_l\u1ea1i
-
-Review_changes=Xem_x\u00e9t_l\u1ea1i_c\u00e1c_thay_\u0111\u1ed5i
-
-Right=Ph\u1ea3i
-root=root
-
-Save=L\u01b0u
-Save_all_finished.=L\u01b0u_t\u1ea5t_c\u1ea3_\u0111\u00e3_ho\u00e0n_t\u1ea5t.
-
-Save_all_open_databases=L\u01b0u_t\u1ea5t_c\u1ea3_c\u00e1c_CSDL_\u0111ang_m\u1edf
-
-Save_before_closing=L\u01b0u_tr\u01b0\u1edbc_khi_\u0111\u00f3ng
-
-Save_database=L\u01b0u_CSDL
-Save_database_as_...=L\u01b0u_CSDL_th\u00e0nh_...
-
-Save_entries_in_their_original_order=L\u01b0u_c\u00e1c_m\u1ee5c_theo_th\u1ee9_t\u1ef1_g\u1ed1c_c\u1ee7a_ch\u00fang
-
-Save_failed=Vi\u1ec7c_l\u01b0u_th\u1ea5t_b\u1ea1i
-
-Save_failed_during_backup_creation=Vi\u1ec7c_l\u01b0u_th\u1ea5t_b\u1ea1i_khi_\u0111ang_t\u1ea1o_b\u1ea3n_sao_l\u01b0u
-
-Save_failed_while_committing_changes=Vi\u1ec7c_l\u01b0u_th\u1ea5t_b\u1ea1i_khi_\u0111ang_th\u1ef1c_hi\u1ec7n_nh\u1eefng_thay_\u0111\u1ed5i
-
-Save_ordered_by_author/editor/year=L\u01b0u_x\u1ebfp_th\u1ee9_t\u1ef1_theo_t\u00e1c_gi\u1ea3/bi\u00ean_t\u1eadp/n\u0103m
-Save_selected_as_...=L\u01b0u_ph\u1ea7n_ch\u1ecdn_th\u00e0nh_...
-
-Saved_database=\u0110\u00e3_l\u01b0u_CSDL
-
-Saved_selected_to=\u0110\u00e3_l\u01b0u_ph\u1ea7n_ch\u1ecdn_v\u00e0o
-
-Saved_session=\u0110\u00e3_l\u01b0u_phi\u00ean_l\u00e0m_vi\u1ec7c
-
-Saving=\u0110ang_l\u01b0u
-Saving_all_databases...=\u0110ang_l\u01b0u_t\u1ea5t_c\u1ea3_CSDL...
-
-Saving_database=\u0110ang_l\u01b0u_CSDL
-
-Scan=Qu\u00e9t
-
-Search=T\u00ecm
-
-Search_All_Fields=T\u00ecm_t\u1ea5t_c\u1ea3_c\u00e1c_tr\u01b0\u1eddng
-
-Search_all_fields=T\u00ecm_t\u1ea5t_c\u1ea3_c\u00e1c_tr\u01b0\u1eddng
-
-Search_error=L\u1ed7i_t\u00ecm_ki\u1ebfm
-
-Search_expression=Bi\u1ec3u_th\u1ee9c_t\u00ecm_ki\u1ebfm
-
-Search_for=T\u00ecm
-
-Search_general_fields=T\u00ecm_c\u00e1c_tr\u01b0\u1eddng_t\u1ed5ng_qu\u00e1t
-
-Search_IEEEXplore=T\u00ecm_tr\u00ean_IEEEXplore
-Search_IEEExplore=T\u00ecm_tr\u00ean_IEEExplore
-
-Search_optional_fields=T\u00ecm_c\u00e1c_tr\u01b0\u1eddng_t\u00f9y_ch\u1ecdn
-
-Search_required_fields=T\u00ecm_c\u00e1c_tr\u01b0\u1eddng_b\u1eaft_bu\u1ed9c
-
-Search_Specified_Field(s)=T\u00ecm_c\u00e1c_tr\u01b0\u1eddng_\u0111\u01b0\u1ee3c_ch\u1ec9_\u0111\u1ecbnh
-
-Searched_database._Global_number_of_hits=\u0110\u00e3_t\u00ecm_trong_CSDL._S\u1ed1_l\u1ea7n_g\u1eb7p_to\u00e0n_c\u1ee5c
-
-Searched_database._Number_of_hits=\u0110\u00e3_t\u00ecm_trong_CSDL._S\u1ed1_l\u1ea7n_g\u1eb7p
-
-Searching_for_%0_file=\u0110ang_t\u00ecm_%0_t\u1eadp_tin
-
-Searching_for_duplicates...=\u0110ang_t\u00ecm_c\u00e1c_m\u1ee5c_b\u1ecb_l\u1eb7p...
-
-Searching_for_files=\u0110ang_t\u00ecm_c\u00e1c_t\u1eadp_tin
-
-Secondary_sort_criterion=Ti\u00eau_chu\u1ea9n_ph\u00e2n_lo\u1ea1i_th\u1ee9_c\u1ea5p
-
-Select=Ch\u1ecdn
-
-Select_a_Zip-archive=Ch\u1ecdn_m\u1ed9t_t\u1eadp_tin_Zip
-
-Select_action=Ch\u1ecdn_h\u00e0nh_\u0111\u1ed9ng
-
-Select_all=Ch\u1ecdn_t\u1ea5t_c\u1ea3
-
-Select_Classpath_of_New_Importer=Ch\u1ecdn_\u0111\u01b0\u1eddng_d\u1eabn_l\u1edbp_c\u1ee7a_tr\u00ecnh_nh\u1eadp_m\u1edbi
-
-Select_encoding=Ch\u1ecdn_b\u1ed9_m\u00e3_h\u00f3a
-
-Select_entries_in_group_selection=Ch\u1ecdn_c\u00e1c_m\u1ee5c_trong_ph\u00e9p_ch\u1ecdn_nh\u00f3m
-
-Select_entry_type=Ch\u1ecdn_ki\u1ec3u_m\u1ee5c
-Select_external_application=Ch\u1ecdn_\u1ee9ng_d\u1ee5ng_ngo\u00e0i
-
-Select_file_from_ZIP-archive=Ch\u1ecdn_t\u1eadp_tin_t\u1eeb_t\u1eadp_tin_Zip
-
-Select_format=Ch\u1ecdn_\u0111\u1ecbnh_d\u1ea1ng
-Select_icon=Ch\u1ecdn_bi\u1ec3u_t\u01b0\u1ee3ng
-
-Select_matches=Ch\u1ecdn_c\u00e1c_m\u1ee5c_kh\u1edbp
-
-Select_new_ImportFormat_Subclass=Ch\u1ecdn_L\u1edbp.ph\u1ee5_\u0110\u1ecbnh.d\u1ea1ng.nh\u1eadp_m\u1edbi
-
-Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Ch\u1ecdn_c\u00e1c_n\u1ed1t_tr\u00ean_s\u01a1_\u0111\u1ed3_h\u00ecnh_c\u00e2y_\u0111\u1ec3_xem_v\u00e0_ch\u1ea5p_nh\u1eadn_ho\u1eb7c_t\u1eeb_ch\u1ed1i_thay_\u0111\u1ed5i
-Selected_entries=C\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn
-
-Selector_enabled_fields=C\u00e1c_tr\u01b0\u1eddng_\u0111\u01b0\u1ee3c_k\u00edch_ho\u1ea1t_b\u1edfi_tr\u00ecnh_ch\u1ecdn
-Server_Hostname_\:=T\u00ean_Server-host:
-Server_Type_\:=Ki\u1ec3u_Server:
-Set_field=Thi\u1ebft_l\u1eadp_tr\u01b0\u1eddng
-Set_fields=Thi\u1ebft_l\u1eadp_c\u00e1c_tr\u01b0\u1eddng
-
-Set_general_fields=Thi\u1ebft_l\u1eadp_c\u00e1c_tr\u01b0\u1eddng_t\u1ed5ng_qu\u00e1t
-Set_main_external_file_directory=Thi\u1ebft_l\u1eadp_th\u01b0_m\u1ee5c_t\u1eadp_tin_ngo\u00e0i_ch\u00ednh
-
-Set_table_font=Ch\u1ecdn_b\u1ea3ng_ph\u00f4ng_ch\u1eef
-
-Settings=C\u00e1c_thi\u1ebft_l\u1eadp
-
-Setup_selectors=C\u00e0i_\u0111\u1eb7t_c\u00e1c_tr\u00ecnh_ch\u1ecdn
-
-Short_form=Bi\u1ec3u_m\u1eabu_d\u1ea1ng_ng\u1eafn_g\u1ecdn
-
-Shortcut=Ph\u00edm_t\u1eaft
-
-Show/edit_BibTeX_source=Hi\u1ec3n_th\u1ecb/Ch\u1ec9nh_s\u1eeda_ngu\u1ed3n_BibTeX
-
-Show_'Firstname_Lastname'=Hi\u1ec3n_th\u1ecb_'T\u00ean.g\u1ecdi_H\u1ecd'
-
-Show_'Lastname,_Firstname'=Hi\u1ec3n_th\u1ecb_T\u00ean.g\u1ecdi,_H\u1ecd'
-
-Show_BibTeX_source_by_default=Hi\u1ec3n_th\u1ecb_ngu\u1ed3n_BibTeX_theo_m\u1eb7c_\u0111\u1ecbnh
-
-Show_BibTeX_source_panel=Hi\u1ec3n_th\u1ecb_b\u1ea3ng_\u0111i\u1ec1u_khi\u1ec3n_ngu\u1ed3n_BibTeX
-
-Show_confirmation_dialog_when_deleting_entries=Hi\u1ec3n_th\u1ecb_h\u1ed9p_tho\u1ea1i_x\u00e1c_nh\u1eadn_khi_x\u00f3a_c\u00e1c_m\u1ee5c
-
-Show_description=Hi\u1ec3n_th\u1ecb_m\u00f4_t\u1ea3
-
-Show_dynamic_groups_in_<i>italics</i>=Hi\u1ec3n_th\u1ecb_c\u00e1c_nh\u00f3m_\u0111\u1ed9ng_\u1edf_d\u1ea1ng_<i>ch\u1eef_nghi\u00eang</i>
-
-Show_entries_*not*_in_group_selection=Hi\u1ec3n_th\u1ecb_c\u00e1c_m\u1ee5c_*kh\u00f4ng*_\u1edf_trong_ph\u00e9p_ch\u1ecdn_nh\u00f3m
-
-Show_file_column=Hi\u1ec3n_th\u1ecb_c\u1ed9t_t\u1eadp_tin
-
-Show_icons_for_groups=Hi\u1ec3n_th\u1ecb_c\u00e1c_bi\u1ec3u_t\u01b0\u1ee3ng_c\u1ee7a_nh\u00f3m
-Show_last_names_only=Ch\u1ec9_hi\u1ec3n_th\u1ecb_H\u1ecd
-
-Show_names_unchanged=Hi\u1ec3n_th\u1ecb_c\u00e1c_t\u00ean_kh\u00f4ng_b\u1ecb_thay_\u0111\u1ed5i
-
-Show_one_less_rows=Hi\u1ec3n_th\u1ecb_\u00edt_h\u01a1n_m\u1ed9t_h\u00e0ng
-
-Show_one_more_row=Hi\u1ec3n_th\u1ecb_th\u00eam_m\u1ed9t_h\u00e0ng
-
-Show_optional_fields=Hi\u1ec3n_th\u1ecb_c\u00e1c_tr\u01b0\u1eddng_t\u00f9y_ch\u1ecdn
-
-Show_PDF/PS_column=Hi\u1ec3n_th\u1ecb_c\u1ed9t_PDF/PS
-
-Show_required_fields=Hi\u1ec3n_th\u1ecb_c\u00e1c_tr\u01b0\u1eddng_c\u1ea7n_c\u00f3
-
-Show_URL/DOI_column=Hi\u1ec3n_th\u1ecb_c\u1ed9t_URL/DOI
-
-Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Hi\u1ec3n_th\u1ecb_m\u1ed9t_h\u1ed9p_tho\u1ea1i_c\u1ea3nh_b\u00e1o_khi_m\u1ed9t_kh\u00f3a_BibTeX_b\u1ecb_tr\u00f9ng_\u0111\u01b0\u1ee3c_nh\u1eadp_v\u00e0o
-
-Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Hi\u1ec3n_th\u1ecb_m\u1ed9t_h\u1ed9p_tho\u1ea1i_c\u1ea3nh_b\u00e1o_khi_m\u1ed9t_kh\u00f3a_BibTeX_r\u1ed7ng_\u0111\u01b0\u1ee3c_nh\u1eadp_v\u00e0o
-
-Simple_HTML=HTML_d\u1ea1ng_\u0111\u01a1n_gi\u1ea3n
-
-Size=K\u00edch_th\u01b0\u1edbc
-
-Skip=B\u1ecf_qua
-Skipped_-_No_PDF_linked=B\u1ecb_b\u1ecf_qua_-_Kh\u00f4ng_c\u00f3_t\u1eadp_tin_PDF_\u0111\u01b0\u1ee3c_li\u00ean_k\u1ebft
-Skipped_-_PDF_does_not_exist=B\u1ecf_qua_-_t\u1eadp_tin_PDF_kh\u00f4ng_t\u1ed3n_t\u1ea1i
-
-Skipped_entry.=M\u1ee5c_b\u1ecb_b\u1ecf_qua.
-
-Sort_alphabetically=X\u1ebfp_theo_th\u1ee9_t\u1ef1_ABC
-
-Sort_Automatically=X\u1ebfp_th\u1ee9_t\u1ef1_t\u1ef1_\u0111\u1ed9ng
-
-Sort_order=Tr\u1eadt_t\u1ef1_x\u1ebfp_th\u1ee9_t\u1ef1
-
-sort_subgroups=X\u1ebfp_th\u1ee9_t\u1ef1_c\u00e1c_nh\u00f3m_con
-
-Sorted_all_subgroups_recursively.=X\u1ebfp_th\u1ee9_t\u1ef1_t\u1ea5t_c\u1ea3_c\u00e1c_nh\u00f3m_con_theo_c\u00e1ch_\u0111\u1ec7_quy.
-
-Sorted_immediate_subgroups.=C\u00e1c_nh\u00f3m_con_c\u1ea1nh_nhau_\u0111\u01b0\u1ee3c_x\u1ebfp_th\u1ee9_t\u1ef1.
-
-source_edit=ch\u1ec9nh_s\u1eeda_ngu\u1ed3n
-Special_Name_Formatters=C\u00e1c_tr\u00ecnh_\u0111\u1ecbnh_d\u1ea1ng_t\u00ean_\u0111\u1eb7c_bi\u1ec7t
-
-Special_table_columns=C\u00e1c_c\u1ed9t_b\u1ea3ng_\u0111\u1eb7c_bi\u1ec7t
-SQL_connection_established.=K\u1ebft_n\u1ed1i_SQL_\u0111\u01b0\u1ee3c_thi\u1ebft_l\u1eadp
-
-Start_incremental_search=B\u1eaft_\u0111\u1ea7u_t\u00ecm_ki\u1ebfm_t\u0103ng_d\u1ea7n
-
-Start_search=B\u1eaft_\u0111\u1ea7u_t\u00ecm_ki\u1ebfm
-Starting_import=\u0110ang_b\u1eaft_\u0111\u1ea7u_nh\u1eadp
-
-Statically_group_entries_by_manual_assignment=G\u1ed9p_nh\u00f3m_c\u00e1c_m\u1ee5c_theo_c\u00e1ch_t\u0129nh_b\u1eb1ng_ph\u00e9p_g\u00e1n_th\u1ee7_c\u00f4ng
-
-Status=Tr\u1ea1ng_th\u00e1i
-
-Stop=D\u1eebng
-
-Store_journal_abbreviations=L\u01b0u_tr\u1eef_vi\u1ebft_t\u1eaft_c\u00e1c_t\u1ea1p_ch\u00ed
-
-Store_string=L\u01b0u_tr\u1eef_chu\u1ed7i
-
-Store_the_following_fields_with_braces_around_capital_letters=L\u01b0u_tr\u1eef_c\u00e1c_tr\u01b0\u1eddng_sau_v\u1edbi_ngo\u1eb7c_m\u00f3c_quanh_c\u00e1c_ch\u1eef_hoa
-
-Stored_entry=M\u1ee5c_\u0111\u01b0\u1ee3c_l\u01b0u_tr\u1eef
-
-Strings=C\u00e1c_chu\u1ed7i
-
-Strings_for_database=C\u00e1c_chu\u1ed7i_d\u00f9ng_cho_CSDL
-
-Subdatabase_from_aux=CSDL_con_t\u1eeb_aux
-
-Suggest=\u0110\u1ec1_ngh\u1ecb
-
-Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Chuy\u1ec3n_\u0111\u1ed5i_gi\u1eefa_t\u00ean_\u0111\u1ea7y_\u0111\u1ee7_v\u00e0_t\u00ean_vi\u1ebft_t\u1eaft_t\u1ea1p_ch\u00ed_n\u1ebfu_bi\u1ebft_t\u00ean_t\u1ea1p_ch\u00ed_\u0111\u00f3.
-
-Synchronize_%0_links=\u0110\u1ed3ng_b\u1ed9_h\u00f3a_%0_li\u00ean_k\u1ebft
-Synchronize_file_links=\u0110\u1ed3ng_b\u1ed9_h\u00f3a_c\u00e1c_li\u00ean_k\u1ebft_t\u1eadp_tin
-
-Synchronizing_%0_links...=\u0110ang_\u0111\u1ed3ng_b\u1ed9_h\u00f3a_%0_li\u00ean_k\u1ebft...
-
-Table_appearance=Di\u1ec7n_m\u1ea1o_c\u1ee7a_b\u1ea3ng
-
-Table_background_color=M\u00e0u_n\u1ec1n_c\u1ee7a_b\u1ea3ng
-
-Table_grid_color=M\u00e0u_l\u01b0\u1edbi_c\u1ee7a_b\u1ea3ng
-
-Table_text_color=M\u00e0u_ch\u1eef_c\u1ee7a_b\u1ea3ng
-
-Tabname=T\u00ean_b\u1ea3ng
-Target_file_cannot_be_a_directory.=T\u1eadp_tin_\u0111\u00edch_kh\u00f4ng_\u0111\u01b0\u1ee3c_ph\u00e9p_l\u00e0_m\u1ed9t_th\u01b0_m\u1ee5c.
-
-Tertiary_sort_criterion=Ti\u00eau_chu\u1ea9n_ph\u00e2n_lo\u1ea1i_c\u1ea5p_ba
-
-Test=Ki\u1ec3m_tra
-
-Text_Input_Area=V\u00f9ng_nh\u1eadp_ch\u1eef
-
-The_#_character_is_not_allowed_in_BibTeX_fields=K\u00fd_t\u1ef1_#_kh\u00f4ng_\u0111\u01b0\u1ee3c_ph\u00e9p_d\u00f9ng_trong_c\u00e1c_tr\u01b0\u1eddng_BibTeX
-
-The_chosen_date_format_for_new_entries_is_not_valid=\u0110\u1ecbnh_d\u1ea1ng_ng\u00e0y_\u0111\u01b0\u1ee3c_ch\u1ecdn_cho_c\u00e1c_m\u1ee5c_m\u1edbi_kh\u00f4ng_h\u1ee3p_l\u1ec7
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=M\u00e3_h\u00f3a_\u0111\u00e3_ch\u1ecdn_'%0'_kh\u00f4ng_th\u1ec3_m\u00e3_h\u00f3a_\u0111\u01b0\u1ee3c_c\u00e1c_k\u00fd_t\u1ef1_sau:_
-
-The_CiteSeer_fetch_operation_returned_zero_results.=L\u1ec7nh_l\u1ea5y_v\u1ec1_t\u1eeb_CiteSeerX_tr\u1ea3_v\u1ec1_0_k\u1ebft_qu\u1ea3.
-
-
-The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=Phi\u00ean_b\u1ea3n_hi\u1ec7n_t\u1ea1i_c\u00f3_m\u1ed9t_c\u00e1ch_m\u1edbi_\u0111\u1ec3_qu\u1ea3n_l\u00fd_c\u00e1c_li\u00ean_k\u1ebft_\u0111\u1ebfn_t\u1eadp_tin_ngo\u00e0i.<br>\u0110\u1ec3_s\u1eed_d\u1ee5ng_\u0111\u01b0\u1ee3c_\u0111\u1eb7c_\u0111i\u1ec3m_n\u00e0y,_li\u00ean_k\u1eb [...]
-
-the_field_<b>%0</b>=tr\u01b0\u1eddng_<b>%0</b>
-
-The_file<BR>'%0'<BR>has_been_modified<BR>externally!=T\u1eadp_tin<BR>'%0'<BR>\u0111\u00e3_b\u1ecb_thay_\u0111\u1ed5i<BR>ngo\u00e0i_ch\u01b0\u01a1ng_tr\u00ecnh!
-
-The_group_"%0"_already_contains_the_selection.=Nh\u00f3m_"%0"_\u0111\u00e3_ch\u1ee9a_ph\u00e9p_ch\u1ecdn.
-
-The_label_of_the_string_can_not_be_a_number.=Nh\u00e3n_c\u1ee7a_chu\u1ed7i_kh\u00f4ng_\u0111\u01b0\u1ee3c_l\u00e0_m\u1ed9t_con_s\u1ed1.
-
-The_label_of_the_string_can_not_contain_spaces.=Nh\u00e3n_c\u1ee7a_chu\u1ed7i_kh\u00f4ng_\u0111\u01b0\u1ee3c_ch\u1ee9a_kho\u1ea3ng_tr\u1eafng.
-
-The_label_of_the_string_can_not_contain_the_'#'_character.=Nh\u00e3n_c\u1ee7a_chu\u1ed7i_kh\u00f4ng_\u0111\u01b0\u1ee3c_ch\u1ee9a_k\u00fd_t\u1ef1_'#'.
-
-The_output_option_depends_on_a_valid_import_option.=T\u00f9y_ch\u1ecdn_\u0111\u1ea7u_ra_ph\u1ee5_thu\u1ed9c_v\u00e0o_m\u1ed9t_t\u00f9y_ch\u1ecdn_nh\u1eadp_h\u1ee3p_l\u1ec7.
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=T\u1eadp_tin_PDF_ch\u1ee9a_m\u1ed9t_ho\u1eb7c_nhi\u1ec1u_b\u1ea3n_ghi_bibtex.\nB\u1ea1n_c\u00f3_mu\u1ed1n_nh\u1eadp_ch\u00fang_v\u00e0o_th\u00e0nh_c\u00e1c_m\u1ee5c_m\u1edbi_trong_CSDL_hi\u1ec7n_t\u1ea1i?
-
-The_regular_expression_<b>%0</b>_is_invalid%c=Bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%0</b>_kh\u00f4ng_h\u1ee3p_l\u1ec7%c
-
-The_search_is_case_insensitive.=Ph\u00e9p_t\u00ecm_kh\u00f4ng_ph\u00e2n_bi\u1ec7t_ch\u1eef_hoa/th\u01b0\u1eddng
-
-The_search_is_case_sensitive.=Ph\u00e9p_t\u00ecm_c\u00f3_ph\u00e2n_bi\u1ec7t_ch\u1eef_hoa/th\u01b0\u1eddng.
-
-The_string_has_been_removed_locally=Chu\u1ed7i_n\u00e0y_\u0111\u00e3_b\u1ecb_lo\u1ea1i_b\u1ecf_c\u1ee5c_b\u1ed9
-
-There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=C\u00f3_th\u1ec3_c\u00f3_c\u00e1c_m\u1ee5c_b\u1ecb_tr\u00f9ng_(\u0111\u01b0\u1ee3c_\u0111\u00e1nh_d\u1ea5u_b\u1eb1ng_bi\u1ec3u_t\u01b0\u1ee3ng_'D')_ch\u01b0a_\u0111\u01b0\u1ee3c_gi\u1ea3i_quy\u1ebft._C\u00f3_ti\u1ebfp_t\u1ee5c_kh\u00f4ng?
-
-this_button_will_update=n\u00fat_l\u1ec7nh_n\u00e0y_s\u1ebd_c\u1eadp_nh\u1eadt
-This_database_was_written_using_an_older_version_of_JabRef.=CSDL_n\u00e0y_\u0111\u01b0\u1ee3c_ghi_b\u1eb1ng_c\u00e1ch_d\u00f9ng_phi\u00ean_b\u1ea3n_JabRef_c\u0169_h\u01a1n.
-
-This_entry_has_no_BibTeX_key._Generate_key_now?=M\u1ee5c_n\u00e0y_kh\u00f4ng_c\u00f3_kh\u00f3a_BibTeX._T\u1ea1o_kh\u00f3a_b\u00e2y_gi\u1edd?
-
-This_entry_is_incomplete=M\u1ee5c_n\u00e0y_ch\u01b0a_\u0111\u1ea7y_\u0111\u1ee7
-
-This_entry_type_cannot_be_removed.=Kh\u00f4ng_th\u1ec3_lo\u1ea1i_b\u1ecf_ki\u1ec3u_m\u1ee5c_n\u00e0y.
-
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Li\u00ean_k\u1ebft_ngo\u00e0i_c\u00f3_ki\u1ec3u_'%0',_thu\u1ed9c_lo\u1ea1i_kh\u00f4ng_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a._B\u1ea1n_mu\u1ed1n_l\u00e0m_g\u00ec?
-
-This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Nh\u00f3m_n\u00e0y_ch\u1ee9a_c\u00e1c_m\u1ee5c_c\u0103n_c\u1ee9_tr\u00ean_ph\u00e9p_g\u00e1n_th\u1ee7_c\u00f4ng._C\u0 [...]
-
-This_group_contains_entries_in_which=Nh\u00f3m_n\u00e0y_ch\u1ee9a_c\u00e1c_m\u1ee5c_m\u00e0
-
-This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Nh\u00f3m_n\u00e0y_ch\u1ee9a_c\u00e1c_m\u1ee5c_m\u00e0_b\u1ea5t_k\u1ef3_tr\u01b0\u1eddng_n\u00e0o_c\u0169ng_c\u00f3_Bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%0</b> 
-
-This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Nh\u00f3m_n\u00e0y_ch\u1ee9a_c\u00e1c_m\u1ee5c_m\u00e0_b\u1ea5t_k\u1ef3_tr\u01b0\u1eddng_n\u00e0o_c\u0169ng_ch\u1ee9a_thu\u1eadt_ng\u1eef_<b>%0</b> 
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Nh\u00f3m_n\u00e0y_ch\u1ee9a_c\u00e1c_m\u1ee5c_c\u00f3_tr\u01b0\u1eddng_<b>%0</b>_ch\u1ee9a_t\u1eeb_kh\u00f3a_<b>%1</b> 
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Nh\u00f3m_n\u00e0y_ch\u1ee9a_c\u00e1c_m\u1ee5c_c\u00f3_tr\u01b0\u1eddng_<b>%0</b>_ch\u1ee9a_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%1</b> 
-
-This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=\u0110\u00e2y_l\u00e0_m\u1ed9t_h\u1ed9p_tho\u1ea1i_sao_ch\u00e9p_v\u00e0_d\u00e1n_\u0111\u01a1n_gi\u1ea3n_\u0111\u1ec3_nh\u1eadp_m\u1ed9t_s\u1ed1_tr\u01b0\u1eddng_t\u1eeb_d\u1ea1ng_ch\u1eef_\u0111\u01a1n_gi\u1ea3n.
-This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u0110i\u1ec1u_n\u00e0y_khi\u1ebfn_cho_JabRef_t\u00ecm_t\u1eebng_li\u00ean_k\u1ebft_trong_t\u1ed5ng_s\u1ed1_%0_v\u00e0_ki\u1ec3m_tra_xem_t\u1eadp_tin_c\u00f3_t\u1ed3n_t\u1ea1i_kh\u00f4ng._N\u1ebfu_kh\u00f4ng_b\u1ea1n_s\u1ebd_\u0111\u01b0\u1ee3c_cung_c\u1ea5p_c\u00e1c_t\u00f9y_ch\u1ecdn<BR>\u0111\u1ec3_gi\u1ea3i_quy\u1ebft_tr\u1ee5c_tr\u1eb7c.
-
-This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=L\u1ec7nh_n\u00e0y_y\u00eau_c\u1ea7u_t\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn_ph\u1ea3i_c\u00f3_kh\u00f3a_BibTex.
-This_operation_requires_at_least_one_entry.=L\u1ec7nh_n\u00e0y_y\u00eau_c\u1ea7u_ph\u1ea3i_c\u00f3_\u00edt_nh\u1ea5t_m\u1ed9t_m\u1ee5c.
-
-This_operation_requires_one_or_more_entries_to_be_selected.=L\u1ec7nh_n\u00e0y_y\u00eau_c\u1ea7u_ph\u1ea3i_ch\u1ecdn_tr\u01b0\u1edbc_m\u1ed9t_ho\u1eb7c_nhi\u1ec1u_m\u1ee5c.
-
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=L\u1ec7nh_n\u00e0y_s\u1ebd_di_chuy\u1ec3n_t\u1ea5t_c\u1ea3_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i_t\u1eeb_c\u00e1c_tr\u01b0\u1eddng_'pdf'_v\u00e0_'ps'_v\u00e0o_tr\u01b0\u1eddng_'%0'._C\u00f3_ti\u1ebfn_h\u00e0nh_kh\u00f4ng?
-
-To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=\u0110\u1ec3_c\u00e0i_\u0111\u1eb7t,_ch\u1ecdn_<B>T\u00f9y_ch\u1ecdn_->_Qu\u1ea3n_l\u00fd_t\u00ean_vi\u1ebft_t\u1eaft_c\u00e1c_t\u1ea1p_ch\u00ed</B>
-
-Toggle_abbreviation=B\u1eadt/t\u1eaft_vi\u1ebft_t\u1eaft
-Toggle_entry_preview=B\u1eadt/t\u1eaft_xem_tr\u01b0\u1edbc_m\u1ee5c
-Toggle_groups_interface=B\u1eadt/t\u1eaft_giao_di\u1ec7n_nh\u00f3m
-Toggle_search_panel=B\u1eadt/t\u1eaft_b\u1ea3ng_\u0111i\u1ec1u_khi\u1ec3n_t\u00ecm_ki\u1ebfm
-
-Try_different_encoding=Th\u1eed_m\u00e3_h\u00f3a_kh\u00e1c
-
-Type_set_to_'other'=Ki\u1ec3u_\u0111\u01b0\u1ee3c_thi\u1ebft_l\u1eadp_th\u00e0nh_'kh\u00e1c'
-Unabbreviate_journal_names_of_the_selected_entries=B\u1ecf_vi\u1ebft_t\u1eaft_t\u00ean_c\u00e1c_t\u1ea1p_ch\u00ed_c\u1ee7a_nh\u1eefng_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn
-Unabbreviated_%0_journal_names.=%0_t\u00ean_t\u1ea1p_ch\u00ed_\u0111\u01b0\u1ee3c_b\u1ecf_vi\u1ebft_t\u1eaft.
-
-unable_to_access_LyX-pipe=kh\u00f4ng_th\u1ec3_truy_c\u1eadp_\u1ed1ng-d\u1eabn-LyX
-
-Unable_to_create_graphical_interface=Kh\u00f4ng_th\u1ec3_t\u1ea1o_giao_di\u1ec7n_\u0111\u1ed3_h\u1ecda
-
-Unable_to_open_file.=Kh\u00f4ng_th\u1ec3_m\u1edf_t\u1eadp_tin.
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Kh\u00f4ng_th\u1ec3_m\u1edf_li\u00ean_k\u1ebft._Kh\u00f4ng_th\u1ec3_g\u1ecdi_\u1ee9ng_d\u1ee5ng_'%0'_li\u00ean_quan_\u0111\u1ebfn_ki\u1ec3u_t\u1eadp_tin_'%1'.
-Unable_to_read_default_icon_theme.=Kh\u00f4ng_th\u1ec3_\u0111\u1ecdc_s\u1eafc_th\u00e1i_bi\u1ec3u_t\u01b0\u1ee3ng_m\u1eb7c_\u0111\u1ecbnh
-Unable_to_read_icon_theme_file=Kh\u00f4ng_th\u1ec3_\u0111\u1ecdc_t\u1eadp_tin_s\u1eafc_th\u00e1i_bi\u1ec3u_t\u01b0\u1ee3ng
-
-unable_to_write_to=Kh\u00f4ng_th\u1ec3_ghi_v\u00e0o
-Undefined_file_type=Ki\u1ec3u_t\u1eadp_tin_kh\u00f4ng_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a
-
-Undo=Quay_ng\u01b0\u1ee3c_l\u1ec7nh
-
-Union=H\u1ee3p_nh\u1ea5t
-
-Unknown_bibtex_entries=C\u00e1c_m\u1ee5c_bibtex_c\u00f3_ki\u1ec3u_kh\u00f4ng_r\u00f5
-
-unknown_edit=ki\u1ec3u_ch\u1ec9nh_s\u1eeda_kh\u00f4ng_bi\u1ebft
-
-unknown_entry_type=ki\u1ec3u_m\u1ee5c_kh\u00f4ng_bi\u1ebft
-
-Unknown_export_format=\u0110\u1ecbnh_d\u1ea1ng_xu\u1ea5t_kh\u00f4ng_bi\u1ebft
-
-Unmark_all=Kh\u1eed_\u0111\u00e1nh_d\u1ea5u_t\u1ea5t_c\u1ea3
-
-Unmark_entries=Kh\u1eed_\u0111\u00e1nh_d\u1ea5u_c\u00e1c_m\u1ee5c
-
-Unmark_entry=Kh\u1eed_\u0111\u00e1nh_d\u1ea5u_m\u1ee5c
-
-Unmarked_selected=Ph\u1ea7n_\u0111\u00e3_ch\u1ecdn_\u0111\u01b0\u1ee3c_kh\u1eed_\u0111\u00e1nh_d\u1ea5u
-
-Unpack_EndNote_filter_set=G\u1ee1_\u0111\u00f3ng_g\u00f3i_b\u1ed9_l\u1ecdc_EndNote
-
-Unpacked_file.=T\u1eadp_tin_\u0111\u00e3_\u0111\u01b0\u1ee3c_g\u1ee1_\u0111\u00f3ng_g\u00f3i.
-
-Unsupported_version_of_class_%0\:_%1=Phi\u00ean_b\u1ea3n_c\u1ee7a_l\u1edbp_%0_kh\u00f4ng_\u0111\u01b0\u1ee3c_h\u1ed7_tr\u1ee3:_%1
-
-untitled=kh\u00f4ng_ti\u00eau_\u0111\u1ec1
-
-Up=L\u00ean
-
-Update_to_current_column_widths=C\u1eadp_nh\u1eadt_chi\u1ec1u_r\u1ed9ng_c\u1ed9t_hi\u1ec7n_t\u1ea1i
-
-Updated_group_selection=Ph\u00e9p_ch\u1ecdn_nh\u00f3m_\u0111\u00e3_\u0111\u01b0\u1ee3c_c\u1eadp_nh\u1eadt
-Upgrade_external_links=N\u00e2ng_c\u1ea5p_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=N\u00e2ng_c\u1ea5p_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i_PDF/PS_\u0111\u1ec3_s\u1eed_d\u1ee5ng_tr\u01b0\u1eddng_'%0'.
-Upgrade_file=N\u00e2ng_c\u1ea5p_t\u1eadp_tin
-Upgrade_old_external_file_links_to_use_the_new_feature=N\u00e2ng_c\u1ea5p_c\u00e1c_li\u00ean_k\u1ebft_t\u1eadp_tin_ngo\u00e0i_\u0111\u1ec3_s\u1eed_d\u1ee5ng_t\u00ednh_ch\u1ea5t_m\u1edbi
-Upgraded_links.=C\u00e1c_li\u00ean_k\u1ebft_\u0111\u01b0\u1ee3c_n\u00e2ng_c\u1ea5p.
-UPPER=TR\u00caN
-Upper_Each_First=Ph\u00eda_tr\u00ean_m\u1ed7i_m\u1ee5c_\u0111\u1ea7u_ti\u00ean
-Upper_first=Ph\u00eda_tr\u00ean_\u0111\u1ea7u_ti\u00ean
-
-usage=c\u00e1ch_d\u00f9ng
-
-Use_antialiasing_font=D\u00f9ng_ph\u00f4ng_ch\u1eef_ch\u1ed1ng_r\u0103ng_c\u01b0a
-Use_autocompletion_for_the_following_fields=D\u00f9ng_t\u00ednh_ch\u1ea5t_t\u1ef1_\u0111i\u1ec1n_\u0111\u1ea7y_\u0111\u1ee7_cho_c\u00e1c_tr\u01b0\u1eddng_sau
-Use_custom_icon_theme=D\u00f9ng_s\u1eafc_th\u00e1i_bi\u1ec3u_t\u01b0\u1ee3ng_t\u00f9y_ch\u1ecdn
-Use_default_viewer=D\u00f9ng_tr\u00ecnh_xem_m\u1eb7c_\u0111\u1ecbnh
-
-Use_inspection_window_also_when_a_single_entry_is_imported.=D\u00f9ng_c\u1eeda_s\u1ed5_ki\u1ec3m_tra_ngay_c\u1ea3_khi_ch\u1ec9_c\u00f3_m\u1ed9t_m\u1ee5c_\u0111\u01b0\u1ee3c_nh\u1eadp_v\u00e0o.
-Use_native_file_dialog=D\u00f9ng_h\u1ed9p_tho\u1ea1i_t\u1eadp_tin_ki\u1ec3u_nguy\u00ean_th\u1ee7y
-
-Use_other_look_and_feel=D\u00f9ng_di\u1ec7n_m\u1ea1o_kh\u00e1c
-Use_Regular_Expression_Search=D\u00f9ng_ph\u00e9p_t\u00ecm_b\u1eb1ng_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc
-
-Use_regular_expressions=D\u00f9ng_c\u00e1c_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc
-
-Use_the_following_delimiter_character(s)=D\u00f9ng_(c\u00e1c)_k\u00fd_t\u1ef1_ph\u00e2n_t\u00e1ch_c\u1ed9t_sau
-Username_\:=T\u00ean_ng\u01b0\u1eddi_d\u00f9ng:
-
-Value_cleared_externally=Gi\u00e1_tr\u1ecb_b\u1ecb_x\u00f3a_ngo\u00e0i_ch\u01b0\u01a1ng_tr\u00ecnh
-
-Value_set_externally=Gi\u00e1_tr\u1ecb_\u0111\u01b0\u1ee3c_thi\u1ebft_l\u1eadp_ngo\u00e0i_ch\u01b0\u01a1ng_tr\u00ecnh
-
-verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=ki\u1ec3m_tra_xem_LyX_c\u00f3_ch\u1ea1y_v\u00e0_lyxpipe_c\u00f3_h\u1ee3p_l\u1ec7_kh\u00f4ng
-
-View=Xem
-Vim_Server_Name=T\u00ean_Server_Vim
-
-Waiting_for_ArXiv...=\u0110ang_ch\u1edd_ArXiv...
-
-Warn_about_unresolved_duplicates_when_closing_inspection_window=C\u1ea3nh_b\u00e1o_v\u1ec1_c\u00e1c_m\u1ee5c_tr\u00f9ng_ch\u01b0a_\u0111\u01b0\u1ee3c_gi\u1ea3i_quy\u1ebft_khi_\u0111\u00f3ng_c\u1eeda_s\u1ed5_ki\u1ec3m_tra
-
-Warn_before_overwriting_existing_keys=C\u1ea3nh_b\u00e1o_tr\u01b0\u1edbc_khi_ghi_\u0111\u00e8_c\u00e1c_kh\u00f3a_hi\u1ec7n_c\u00f3
-
-Warning=C\u1ea3nh_b\u00e1o
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=C\u1ea3nh_b\u00e1o:_Kh\u00f4ng_th\u1ec3_ho\u00e0n_t\u1ea5t_s\u1eeda_ch\u1eefa_t\u1eadp_tin;_t\u1eadp_tin_c\u1ee7a_b\u1ea1n_c\u00f3_th\u1ec3_b\u1ecb_h\u1ecfng._Th\u00f4ng_b\u00e1o_l\u1ed7i
-
-Warning_there_is_a_duplicate_key=C\u1ea3nh_b\u00e1o_c\u00f3_m\u1ed9t_kh\u00f3a_b\u1ecb_tr\u00f9ng
-
-Warnings=C\u00e1c_c\u1ea3nh_b\u00e1o
-
-web_link=li\u00ean_k\u1ebft_web
-
-What_do_you_want_to_do?=B\u1ea1n_mu\u1ed1n_l\u00e0m_g\u00ec?
-
-When_adding/removing_keywords,_separate_them_by=Khi_th\u00eam/lo\u1ea1i_b\u1ecf_c\u00e1c_t\u1eeb_kh\u00f3a,_c\u00e1ch_bi\u1ec7t_ch\u00fang_ra_b\u1eb1ng
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=S\u1ebd_ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_v\u00e0o_c\u00e1c_PDF_\u0111\u01b0\u1ee3c_li\u00ean_k\u1ebft_t\u1eeb_c\u00e1c_m\u1ee5c_\u0111\u00e3_ch\u1ecdn.
-
-with=v\u1edbi
-
-Word=T\u1eeb
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=Ghi_m\u1ee5c_Bibtex_d\u01b0\u1edbi_d\u1ea1ng_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_v\u00e0o_PDF.
-
-Write_XMP=Ghi_XMP
-Write_XMP-metadata=Ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP
-Write_XMP-metadata_for_all_PDFs_in_current_database?=Ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_cho_t\u1ea5t_c\u1ea3_c\u00e1c_PDF_trong_CSDL_hi\u1ec7n_t\u1ea1i?
-Writing_XMP=\u0110ang_ghi_XMP
-Writing_XMP_metadata...=\u0110ang_ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP...
-Writing_XMP_metadata_for_selected_entries...=\u0110ang_ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_cho_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn...
-Writing_XMP_to_'%0'...=\u0110ang_ghi_XMP_v\u00e0o_'%0'...
-
-Wrong_file_format=\u0110\u1ecbnh_d\u1ea1ng_t\u1eadp_tin_b\u1ecb_sai
-
-Wrote_XMP-metadata=\u0110\u00e3_ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP
-Wrote_XMP_to_'%0'.=\u0110\u00e3_ghi_XMP_v\u00e0o_'%0'.
-
-XMP-annotated_PDF=PDF_c\u00f3_ch\u00fa_gi\u1ea3i_XMP
-XMP_Export_Privacy_Settings=C\u00e1c_thi\u1ebft_l\u1eadp_ri\u00eang_v\u1ec1_Xu\u1ea5t_XMP
-XMP_metadata=\u0110\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP
-XMP_metadata_found_in_PDF\:_%0=\u0110\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_c\u00f3_trong_PDF:_%0
-You_must_restart_JabRef_for_this_to_come_into_effect.=
-You_have_changed_the_language_setting.=
-You_have_changed_the_look_and_feel_setting.=
-
-You_have_cleared_this_field._Original_value=B\u1ea1n_\u0111\u00e3_x\u00f3a_tr\u01b0\u1eddng_n\u00e0y._Gi\u00e1_tr\u1ecb_ban_\u0111\u1ea7u
-
-You_have_entered_an_invalid_search_'%0'.=B\u1ea1n_\u0111\u00e3_nh\u1eadp_m\u1ed9t_ph\u00e9p_t\u00ecm_kh\u00f4ng_h\u1ee3p_l\u1ec7_'%0'.
-
-You_must_choose_a_file_name_to_store_journal_abbreviations=B\u1ea1n_ph\u1ea3i_ch\u1ecdn_m\u1ed9t_t\u00ean_t\u1eadp_tin_\u0111\u1ec3_l\u01b0u_tr\u1eef_c\u00e1c_vi\u1ebft_t\u1eaft_t\u00ean_t\u1ea1p_ch\u00ed
-
-You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=B\u1ea1n_ph\u1ea3i_kh\u1edfi_\u0111\u1ed9ng_l\u1ea1i_JabRef_\u0111\u1ec3_c\u00e1c_t\u1ed5_h\u1ee3p_ph\u00edm_m\u1edbi_ho\u1ea1t_\u0111\u1ed9ng_\u0111\u01b0\u1ee3c.
-
-You_must_set_both_BibTeX_key_and_%0_directory=B\u1ea1n_ph\u1ea3i_thi\u1ebft_l\u1eadp_c\u1ea3_kh\u00f3a_BibTeX_l\u1eabn_th\u01b0_m\u1ee5c_%0
-
-Your_new_key_bindings_have_been_stored.=T\u1ed5_h\u1ee3p_ph\u00edm_t\u1eaft_m\u1edbi_c\u1ee7a_b\u1ea1n_\u0111\u00e3_\u0111\u01b0\u1ee3c_l\u01b0u_tr\u1eef.
-
-
-The_following_fetchers_are_available\:=C\u00e1c_tr\u00ecnh_l\u1ea5y_v\u1ec1_sau_c\u00f3_th\u1ec3_d\u00f9ng_\u0111\u01b0\u1ee3c:
-Could_not_find_fetcher_'%0'=Kh\u00f4ng_th\u1ec3_t\u00ecm_th\u1ea5y_tr\u00ecnh_l\u1ea7y_v\u1ec1_'%0'
-Running_Query_'%0'_with_fetcher_'%1'.=\u0110ang_ch\u1ea1y_truy_v\u1ea5n_'%0'_v\u1edbi_tr\u00ecnh_l\u1ea5y_v\u1ec1_'%1'.
-Please_wait!=Vui_l\u00f2ng_ch\u1edd!
-Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=Ph\u00e9p_truy_v\u1ea5n_'%0'_b\u1eb1ng_tr\u00ecnh_l\u1ea5y_v\u1ec1_'%1'_kh\u00f4ng_tr\u1ea3_l\u1ea1i_k\u1ebft_qu\u1ea3_n\u00e0o.
-Open_SPIRES_entry=M\u1edf_m\u1ee5c_SPIRES
-Move/Rename_file=Chuy\u1ec3n/\u0110\u1eb7t_l\u1ea1i_t\u00ean_t\u1eadp_tin
-File_moved=T\u1eadp_tin_b\u1ecb_di_chuy\u1ec3n
-Move_file_failed=Vi\u1ec7c_chuy\u1ec3n_t\u1eadp_tin_th\u1ea5t_b\u1ea1i
-Could_not_move_file=Kh\u00f4ng_th\u1ec3_chuy\u1ec3n_t\u1eadp_tin
-Could_not_find_file_'%0'.=Kh\u00f4ng_t\u00ecm_th\u1ea5y_t\u1eadp_tin_'%0'.
-Move/rename_file=Chuy\u1ec3n/\u0111\u1eb7t_l\u1ea1i_t\u00ean_t\u1eadp_tin
-Number_of_entries_successfully_imported=S\u1ed1_m\u1ee5c_\u0111\u01b0\u1ee3c_nh\u1eadp_v\u00e0o_th\u00e0nh_c\u00f4ng
-Import_canceled_by_user=Vi\u1ec7c_nh\u1eadp_b\u1ecb_ng\u01b0\u1eddi_d\u00f9ng_h\u1ee7y
-Progress\:_%0_of_%1=Ti\u1ebfn_tr\u00ecnh:_%0_of_%1
-Error_while_fetching_from_JSTOR=L\u1ed7i_khi_l\u1ea5y_v\u1ec1_t\u1eeb_JSTOR
-
-Fetching_Medline_by_id...=L\u1ea5y_v\u1ec1_t\u1eeb_Medline_theo_id...
-
-Fetching_Medline_by_term...=L\u1ea5y_v\u1ec1_t\u1eeb_Medline_theo_thu\u1eadt_ng\u1eef...
-Medline_import_canceled=Vi\u1ec7c_nh\u1eadp_t\u1eeb_Medline_b\u1ecb_h\u1ee7y
-Please_enter_a_valid_number=Vui_l\u00f2ng_nh\u1eadp_m\u1ed9t_con_s\u1ed1_h\u1ee3p_l\u1ec7
-Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Vui_l\u00f2ng_nh\u1eadp_m\u1ed9t_danh_s\u00e1ch_c\u00e1c_id_Medline_(con_s\u1ed1),_c\u00e1ch_nhau_b\u1edfi_d\u1ea5u_ph\u1ea9y,_ho\u1eb7c_nh\u1eadp_thu\u1eadt_ng\u1eef_c\u1ea7n_t\u00ecm.
-An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=M\u1ed9t_l\u1ed7i_x\u1ea3y_ra_khi_\u0111ang_l\u1ea5y_v\u1ec1_t\u1eeb_ngu\u1ed3n_SPIRES_(%0)\:
-Error_while_fetching_from_Spires\:_=L\u1ed7i_khi_\u0111ang_l\u1ea5y_v\u1ec1_t\u1eeb_Spires\:_
-Connect_to_external_SQL_database=K\u1ebft_n\u1ed1i_\u0111\u1ebfn_CSDL__SQL_ngo\u00e0i
-Export_to_external_SQL_database=Xu\u1ea5t_ra_CSDL_SQL_ngo\u00e0i
-
-Show_results_in_dialog=Hi\u1ec3n_th\u1ecb_c\u00e1c_k\u1ebft_qu\u1ea3_trong_h\u1ed9p_tho\u1ea1i
-Global_search=T\u00ecm_to\u00e0n_c\u1ee5c
-Show_search_results_in_a_window=Hi\u1ec3n_th\u1ecb_k\u1ebft_qu\u1ea3_t\u00ecm_trong_m\u1ed9t_c\u1eeda_s\u1ed5
-Search_results=K\u1ebft_qu\u1ea3_t\u00ecm_ki\u1ebfm
-Move_file_to_file_directory?=Di_chuy\u1ec3n_t\u1eadp_tin_v\u00e0o_th\u01b0_m\u1ee5c_t\u1eadp_tin?
-Rename_to_'%0'=\u0110\u1ed5i_t\u00ean_th\u00e0nh_'%0'
-Move_to_file_directory=Di_chuy\u1ec3n_v\u00e0o_th\u01b0_m\u1ee5c_t\u1eadp_tin
-You_have_changed_the_menu_and_label_font_size.=
-
-Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=CSDL_\u0111\u01b0\u1ee3c_b\u1ea3o_v\u1ec7._Kh\u00f4ng_th\u1ec3_l\u01b0u_cho_\u0111\u1ebfn_khi_nh\u1eefng_thay_\u0111\u1ed5i_ngo\u00e0i_\u0111\u01b0\u1ee3c_xem_x\u00e9t.
-Protected_database=CSDL_\u0111\u01b0\u1ee3c_b\u1ea3o_v\u1ec7
-Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=T\u1eeb_ch\u1ed1i_l\u01b0u_CSDL_tr\u01b0\u1edbc_khi_nh\u1eefng_thay_\u0111\u1ed5i_ngo\u00e0i_\u0111\u01b0\u1ee3c_xem_x\u00e9t.
-Database_protection=B\u1ea3o_v\u1ec7_CSDL
-Unable_to_save_database=Kh\u00f4ng_th\u1ec3_l\u01b0u_CSDL
-
-BibTeX_key_generator=Tr\u00ecnh_t\u1ea1o_kh\u00f3a_BibTeX
-Unable_to_open_link.=Kh\u00f4ng_th\u1ec3_m\u1edf_li\u00ean_k\u1ebft.
-Search_JSTOR=T\u00ecm_tr\u00ean_JSTOR
-Attempting_SQL_import...=\u0110ang_c\u1ed1_nh\u1eadp_SQL...
-BibO_RDF=BibO_RDF
-HTML_parser=Tr\u00ecnh_ph\u00e2n_t\u00e1ch_HTML
-
-Move_the_keyboard_focus_to_the_entry_table=Chuy\u1ec3n_tr\u1ecdng_t\u00e2m_b\u00e0n_ph\u00edm_sang_b\u1ea3ng_ch\u1ee9a_m\u1ee5c
-MIME_type=Ki\u1ec3u_MIME
-
-This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=T\u00ednh_ch\u1ea5t_n\u00e0y_cho_ph\u00e9p_c\u00e1c_t\u1eadp_tin_m\u1edbi_c\u00f3_th\u1ec3_\u0111\u01b0\u1ee3c_m\u1edf_ho\u1eb7c_nh\u1eadp_v\u00e0o_m\u1ed9t_phi\u00ean_JabRef_\u0111an [...]
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=L\u01b0u_\u00fd_r\u1eb1ng_nh\u1eefng_thi\u1ebft_l\u1eadp_n\u00e0y_ch\u1ec9_\u0111\u01b0\u1ee3c_d\u00f9ng_cho_c\u00e1c_tr\u01b0\u1eddng_<b>pdf</b>_v\u00e0_<b>ps</b>_c\u0169_c\u00f2n_gi\u1eef_l\u1ea1i.<br>\u0110\u1ed1i_v\u1edbi_h\u1ea7u_h\u1ebft_ng\u01b0\u1eddi_d\u00f9ng,_thi\u1ebft_l\u1eadp_<b>Th\u01b0_m\u1ee5c_t\u1ead [...]
-Legacy_file_fields=C\u00e1c_tr\u01b0\u1eddng_t\u1eadp_tin_c\u0169_c\u00f2n_\u0111\u1ec3_l\u1ea1i
-
-This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u0110i\u1ec1u_n\u00e0y_khi\u1ebfn_JabRef_t\u00ecm_m\u1ed7i_ph\u1ea7n_m\u1edf_r\u1ed9ng_trong_t\u1ed5ng_s\u1ed1_%0_v\u00e0_ki\u1ec3m_tra_xem_t\u1eadp_tin_c\u00f3_t\u1ed3n_t\u1ea1i_kh\u00f4ng._N\u1ebfu_kh\u00f4ng,_b\u1ea1n_s\u1ebd_\u0111\u01b0\u1ee3c_cung_c\u1ea5p_c\u00e1c_t\u00f9y_ch\u1ecdn<BR>\u0111\u1ec3_gi\u1ea3i_quy\u1ebft_v\u1ea5n_\u0111\u1ec1_n\u00e0y.
-Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Run_Fetcher,_e.g._"--fetch=Medline\:cancer"
-
-The_ACM_Digital_Library=Th\u01b0_vi\u1ec7n_s\u1ed1_ACM
-Reset=Thi\u1ebft_l\u1eadp_l\u1ea1i
-
-Use_IEEE_LaTeX_abbreviations=D\u00f9ng_c\u00e1c_ch\u1eef_vi\u1ebft_t\u1eaft_ki\u1ec3u_IEEE_LaTeX
-The_Guide_to_Computing_Literature=H\u01b0\u1edbng_d\u1eabn_v\u1ec1_t\u00e0i_li\u1ec7u_m\u00e1y_t\u00ednh
-Search_ACM_Portal=T\u00ecm_tr\u00ean_ACM_Portal
-Connection_to_ACM_Portal_failed=K\u1ebft_n\u1ed1i_\u0111\u1ebfn_ACM_Portal_th\u1ea5t_b\u1ea1i
-
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=Khi_m\u1edf_li\u00ean_k\u1ebft_t\u1eadp_tin,_t\u00ecm_t\u1eadp_tin_kh\u1edbp_n\u1ebfu_li\u00ean_k\u1ebft_kh\u00f4ng_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a
-Settings_for_%0=C\u00e1c_thi\u1ebft_l\u1eadp_d\u00f9ng_cho_%0
-Insert_selected_citations_into_Vim=Ch\u00e8n_c\u00e1c_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_Vim
-RIS=RIS
-
-Assign_exclusively_to_group=Ch\u1ec9_g\u00e1n_v\u00e0o_nh\u00f3m
-
-Bad_Request_'%0'.=Y\u00eau_c\u1ea7u_sai_'%0'.
-
-Mark_entries_imported_into_an_existing_database=\u0110\u00e1nh_d\u1ea5u_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_nh\u1eadp_v\u00e0o_CSDL_hi\u1ec7n_c\u00f3
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Kh\u1eed_\u0111\u00e1nh_d\u1ea5u_t\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_tr\u01b0\u1edbc_khi_nh\u1eadp_c\u00e1c_m\u1ee5c_m\u1edbi_v\u00e0o_CSDL_hi\u1ec7n_c\u00f3
-
-Forward=T\u1edbi
-Back=Lui
-Sort_the_following_fields_as_numeric_fields=X\u1ebfp_th\u1ee9_t\u1ef1_c\u00e1c_tr\u01b0\u1eddng_sau_nh\u01b0_th\u1ec3_ch\u00fang_l\u00e0_c\u00e1c_tr\u01b0\u1eddng_ki\u1ec3u_s\u1ed1
-Line_%0\:_Found_corrupted_BibTeX-key.=D\u00f2ng_%0\:_T\u00ecm_th\u1ea5y_kh\u00f3a-BibTeX_b\u1ecb_l\u1ed7i.
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=D\u00f2ng_%0\:_T\u00ecm_th\u1ea5y_kh\u00f3a-BibTeX_b\u1ecb_l\u1ed7i_(ch\u1ee9a_kho\u1ea3ng_tr\u1eafng).
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=D\u00f2ng_%0\:_T\u00ecm_th\u1ea5y_kh\u00f3a-BibTeX_b\u1ecb_l\u1ed7i_(thi\u1ebfu_d\u1ea5u_ph\u1ea9y).
-Finished_downloading_full_text_document=T\u1ea3i_v\u1ec1_t\u00e0i_li\u1ec7u_\u0111\u1ea7y_\u0111\u1ee7_ho\u00e0n_t\u1ea5t
-Unable_to_find_full_text_document_in_the_linked_web_page.=Kh\u00f4ng_th\u1ec3_t\u00ecm_th\u1ea5y_t\u00e0i_li\u1ec7u_\u0111\u1ea7y_\u0111\u1ee7_trong_trang_web_\u0111\u01b0\u1ee3c_li\u00ean_k\u1ebft.
-Connection_error_when_trying_to_find_full_text_document.=L\u1ed7i_k\u1ebft_n\u1ed1i_khi_\u0111ang_c\u1ed1_t\u00ecm_t\u00e0i_li\u1ec7u_\u0111\u1ea7y_\u0111\u1ee7.
-This_entry_provides_no_URL_or_DOI_links.=M\u1ee5c_n\u00e0y_kh\u00f4ng_cung_c\u1ea5p_li\u00ean_k\u1ebft_URL_ho\u1eb7c_DOI.
-Full_text_article_download_failed=Vi\u1ec7c_t\u1ea3i_v\u1ec1_b\u00e0i_vi\u1ebft_\u0111\u1ea7y_\u0111\u1ee7_th\u1ea5t_b\u1ea1i
-Update_to_current_column_order=C\u1eadp_nh\u1eadt_theo_th\u1ee9_t\u1ef1_c\u1ed9t_hi\u1ec7n_t\u1ea1i
-
-Rename_field=\u0110\u1ed5i_t\u00ean_tr\u01b0\u1eddng
-Set/clear/rename_fields=Thi\u1ebft_l\u1eadp/x\u00f3a/\u0111\u1ed5i_t\u00ean_tr\u01b0\u1eddng
-Rename_field_to\:=\u0110\u1ed5i_t\u00ean_tr\u01b0\u1eddng_th\u00e0nh_\:
-Move_contents_of_a_field_into_a_field_with_a_different_name=Di_chuy\u1ec3n_n\u1ed9i_dung_c\u1ee7a_m\u1ed9t_tr\u01b0\u1eddng_sang_m\u1ed9t_tr\u01b0\u1eddng_c\u00f3_t\u00ean_kh\u00e1c
-You_can_only_rename_one_field_at_a_time=B\u1ea1n_ch\u1ec9_c\u00f3_th\u1ec3_\u0111\u1ed5i_t\u00ean_m\u1ed9t_tr\u01b0\u1eddng_m\u1ed9t_l\u1ea7n
-
-Remove_all_broken_links=Lo\u1ea1i_b\u1ecf_t\u1ea5t_c\u1ea3_c\u00e1c_li\u00ean_k\u1ebft_b\u1ecb_\u0111\u1ee9t
-
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Kh\u00f4ng_th\u1ec3_d\u00f9ng_c\u1ed5ng_%0_cho_l\u1ec7nh_ch\u1ea1y_t\u1eeb_xa;_m\u1ed9t_\u1ee9ng_d\u1ee5ng_kh\u00e1c_c\u00f3_th\u1ec3_\u0111ang_d\u00f9ng_n\u00f3._H\u00e3y_th\u1eed_ch\u1ec9_\u0111\u1ecbnh_m\u1ed9t_c\u1ed5ng_kh\u00e1c.
-
-Plugin_installer=Tr\u00ecnh_c\u00e0i_\u0111\u1eb7t_ph\u1ea7n_m\u1edf_r\u1ed9ng
-Unable_to_create_plugin_directory=Kh\u00f4ng_th\u1ec3_t\u1ea1o_th\u01b0_m\u1ee5c_ph\u1ea7n_m\u1edf_r\u1ed9ng
-Unable_to_copy_file=Kh\u00f4ng_th\u1ec3_ch\u00e9p_t\u1eadp_tin
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Ph\u1ea7n_m\u1edf_r\u1ed9ng_\u0111\u01b0\u1ee3c_c\u00e0i_\u0111\u1eb7t_th\u00e0nh_c\u00f4ng._B\u1ea1n_ph\u1ea3i_kh\u1edfi_\u0111\u1ed9ng_l\u1ea1i_JabRef_\u0111\u1ec3_n\u1ea1p_ph\u1ea7n_m\u1edf_r\u1ed9ng_m\u1edbi.
-Unable_to_create_user_plugin_directory=Kh\u00f4ng_th\u1ec3_t\u1ea1o_th\u01b0_m\u1ee5c_ph\u1ea7n_m\u1edf_r\u1ed9ng_c\u1ee7a_ng\u01b0\u1eddi_d\u00f9ng
-Plugin_installation_failed.=C\u00e0i_\u0111\u1eb7t_ph\u1ea7n_m\u1edf_r\u1ed9ng_th\u1ea5t_b\u1ea1i.
-The_same_version_of_this_plugin_is_already_installed.=C\u00f9ng_phi\u00ean_b\u1ea3n_ph\u1ea7n_m\u1edf_r\u1ed9ng_n\u00e0y_\u0111\u00e3_\u0111\u01b0\u1ee3c_c\u00e0i_\u0111\u1eb7t.
-A_newer_version_of_this_plugin_is_already_installed.=M\u1ed9t_phi\u00ean_b\u1ea3n_m\u1edbi_h\u01a1n_c\u1ee7a_ph\u1ea7n_m\u1edf_r\u1ed9ng_n\u00e0y_\u0111\u00e3_\u0111\u01b0\u1ee3c_c\u00e0i_\u0111\u1eb7t.
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=M\u1ed9t_ho\u1eb7c_nhi\u1ec1u_phi\u00ean_b\u1ea3n_c\u0169_h\u01a1n_c\u1ee7a_ph\u1ea7n_m\u1edf_r\u1ed9ng_n\u00e0y_\u0111\u00e3_\u0111\u01b0\u1ee3c_c\u00e0i_\u0111\u1eb7t._C\u00f3_x\u00f3a_c\u00e1c_phi\u00ean_b\u1ea3n_c\u0169_kh\u00f4ng?
-Old_versions_deleted_successfully.=C\u00e1c_phi\u00ean_b\u1ea3n_c\u0169_\u0111\u01b0\u1ee3c_x\u00f3a_th\u00e0nh_c\u00f4ng.
-
-
-Install_plugin=C\u00e0i_\u0111\u1eb7t_ph\u1ea7n_m\u1edf_r\u1ed9ng
-Download_plugin=T\u1ea3i_v\u1ec1_ph\u1ea7n_m\u1edf_r\u1ed9ng
-Plugin_manager=Tr\u00ecnh_qu\u1ea3n_l\u00fd_ph\u1ea7n_m\u1edf_r\u1ed9ng
-Delete_the_%0_selected_plugins?=X\u00f3a_%0_ph\u1ea7n_m\u1edf_r\u1ed9ng_\u0111\u01b0\u1ee3c_ch\u1ecdn?
-Delete_plugins=X\u00f3a_c\u00e1c_ph\u1ea7n_m\u1edf_r\u1ed9ng
-Delete_the_selected_plugin?=X\u00f3a_ph\u1ea7n_m\u1edf_r\u1ed9ng_\u0111\u01b0\u1ee3c_ch\u1ecdn?
-Delete_plugin=X\u00f3a_ph\u1ea7n_m\u1edf_r\u1ed9ng
-Enter_download_URL=Nh\u1eadp_URL_t\u1ea3i_v\u1ec1
-Plugin_name=T\u00ean_ph\u1ea7n_m\u1edf_r\u1ed9ng
-Version=Phi\u00ean_b\u1ea3n
-Unknown=Kh\u00f4ng_r\u00f5
-Not_loaded=Kh\u00f4ng_\u0111\u01b0\u1ee3c_n\u1ea1p
-Loaded=\u0110\u00e3_\u0111\u01b0\u1ee3c_n\u1ea1p
-Could_not_determine_version_of_=Kh\u00f4ng_th\u1ec3_x\u00e1c_\u0111\u1ecbnh_phi\u00ean_b\u1ea3n_c\u1ee7a_
-Install_anyway?=C\u1ee9_c\u00e0i_\u0111\u1eb7t?
-
-Looking_for_full_text_document...=\u0110ang_t\u00ecm_t\u00e0i_li\u1ec7u_\u0111\u1ea7y_\u0111\u1ee7...
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Theo_li\u00ean_k\u1ebft_URL_ho\u1eb7c_DOI_v\u00e0_c\u1ed1_g\u1eafng_\u0111\u1ecbnh_v\u1ecb_t\u00e0i_li\u1ec7u_PDF_\u0111\u1ea7y_\u0111\u1ee7
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Kh\u00f4ng_th\u1ec3_t\u00ecm_th\u1ea5y_b\u00e0i_vi\u1ebft_\u0111\u1ea7y_\u0111\u1ee7._Kh\u00f4ng_c\u00f3_thu\u1eadt_to\u00e1n_t\u00ecm_ki\u1ebfm_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a_tr\u00ean_trang_web_'%0'.
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=T\u00ecm_th\u1ea5y_li\u00ean_k\u1ebft_pdf,_nh\u01b0ng_l\u1ea1i_nh\u1eadn_\u0111\u01b0\u1ee3c_ki\u1ec3u_MIME_sai._\u0110i\u1ec1u_c\u00f3_th\u1ec3_ch\u1ec9_ra_r\u1eb1ng_b\u1ea1n_kh\u00f4ng_c\u00f3_quy\u1ec1n_truy_c\u1eadp_v\u00e0o_b\u00e0i_vi\u1ebft_\u0111\u1ea7y_\u0111\u1ee7.
-
-Autosave=L\u01b0u_t\u1ef1_\u0111\u1ed9ng
-Prompt_before_recovering_a_database_from_an_autosave_file=Nh\u1eafc_tr\u01b0\u1edbc_khi_ph\u1ee5c_h\u1ed3i_l\u1ea1i_m\u1ed9t_CSDL_t\u1eeb_m\u1ed9t_t\u1eadp_tin_l\u01b0u_t\u1ef1_\u0111\u1ed9ng
-Autosave_interval_(minutes)=Kho\u1ea3ng_th\u1eddi_gian_t\u1ef1_\u0111\u1ed9ng_l\u01b0u_(ph\u00fat)
-Do_you_want_to_recover_the_database_from_the_autosave_file?=B\u1ea1n_c\u00f3_mu\u1ed1n_ph\u1ee5c_h\u1ed3i_l\u1ea1i_CSDL_t\u1eeb_m\u1ed9t_t\u1eadp_tin_l\u01b0u_t\u1ef1_\u0111\u1ed9ng?
-Recover_from_autosave=Ph\u1ee5c_h\u1ed3i_t\u1ef1_l\u1ec7nh_l\u01b0u_t\u1ef1_\u0111\u1ed9ng
-%0_warnings=%0_c\u1ea3nh_b\u00e1o
-
-Save_in_current_table_sort_order=L\u01b0u_trong_tr\u00ecnh_t\u1ef1_x\u1ebfp_th\u1ee9_t\u1ef1_c\u1ee7a_b\u1ea3ng_hi\u1ec7n_t\u1ea1i
-Export_in_current_table_sort_order=Xu\u1ea5t_ra_theo_tr\u00ecnh_t\u1ef1_x\u1ebfp_th\u1ee9_t\u1ef1_c\u1ee7a_b\u1ea3ng_hi\u1ec7n_t\u1ea1i
-Export_ordered_by_author/editor/year=Xu\u1ea5t_ra_theo_th\u1ee9_t\u1ef1_t\u00e1c_gi\u1ea3/bi\u00ean_t\u1eadp/n\u0103m
-Export_entries_in_their_original_order=Xu\u1ea5t_ra_c\u00e1c_m\u1ee5c_theo_th\u1ee9_t\u1ef1_g\u1ed1c_c\u1ee7a_ch\u00fang
-Error_opening_file_'%0'.=L\u1ed7i_m\u1edf_t\u1eadp_tin_'%0'.
-Autosave_of_file_'%0'=L\u01b0u_t\u1ef1_\u0111\u1ed9ng_t\u1eadp_tin_'%0'
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=L\u1ed7i_khi_m\u1edf_t\u1eadp_tin_l\u01b0u_t\u1ef1_\u0111\u1ed9ng_'%0'._C\u1ed1_g\u1eafng_n\u1ea1p_'%0'_\u0111\u1ec3_thay_th\u1ebf.
-
-
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=C\u00e1c_ph\u1ea7n_m\u1edf_r\u1ed9ng_\u0111\u01b0\u1ee3c_c\u00e0i_\u0111\u1eb7t_trong_th\u01b0_m\u1ee5c_ph\u1ea7n_m\u1edf_r\u1ed9ng_thu\u1ed9c_ng\u01b0\u1eddi_d\u00f9ng_c\u1ee7a_b\u1ea1n_(%0):
-Plugins_installed_in_other_locations\:=C\u00e1c_ph\u1ea7n_m\u1edf_r\u1ed9ng_\u0111\u01b0\u1ee3c_c\u00e0i_\u0111\u1eb7t_\u1edf_v\u1ecb_tr\u00ed_kh\u00e1c:
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=Ph\u1ea7n_m\u1edf_r\u1ed9ng_s\u1ebd_\u0111\u01b0\u1ee3c_x\u00f3a_trong_l\u1ea7n_kh\u1edfi_\u0111\u1ed9ng_sau_c\u1ee7a_JabRef.
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=Ph\u1ea7n_m\u1edf_r\u1ed9ng_s\u1ebd_\u0111\u01b0\u1ee3c_x\u00f3a_trong_l\u1ea7n_kh\u1edfi_\u0111\u1ed9ng_sau_c\u1ee7a_JabRef.
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Phi\u00ean_b\u1ea3n_c\u00e1c_ph\u1ea7n_m\u1edf_r\u1ed9ng_c\u0169_s\u1ebd_b\u1ecb_x\u00f3a_\u1edf_l\u1ea7n_kh\u1edfi_\u0111\u1ed9ng_sau_c\u1ee7a_JabRef.
-Formatter_not_found\:_%0=Kh\u00f4ng_t\u00ecm_th\u1ea5y_tr\u00ecnh_\u0111\u1ecbnh_d\u1ea1ng\:_%0
-The_following_formatters_could_not_be_found=Kh\u00f4ng_th\u1ec3_t\u00ecm_th\u1ea5y_c\u00e1c_tr\u00ecnh_\u0111\u1ecbnh_d\u1ea1ng_sau
-
-Clear_inputarea=X\u00f3a_trong_v\u00f9ng_nh\u1eadp_li\u1ec7u
-
-Automatically_set_file_links_for_this_entry=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp_c\u00e1c_li\u00ean_k\u1ebft_t\u1eadp_tin_cho_m\u1ee5c_n\u00e0y
-Could_not_save,_file_locked_by_another_JabRef_instance.=Kh\u00f4ng_th\u1ec3_l\u01b0u,_t\u1eadp_tin_b\u1ecb_kh\u00f3a_b\u1edfi_m\u1ed9t_phi\u00ean_l\u00e0m_vi\u1ec7c_kh\u00e1c_c\u1ee7a_JabRef_\u0111ang_ch\u1ea1y.
-File_is_locked_by_another_JabRef_instance.=T\u1eadp_tin_b\u1ecb_kh\u00f3a_b\u1edfi_m\u1ed9t_phi\u00ean_l\u00e0m_vi\u1ec7c_kh\u00e1c_c\u1ee7a_JabRef.
-Do_you_want_to_override_the_file_lock?=B\u1ea1n_c\u00f3_mu\u1ed1n_b\u1ecf_qua_kh\u00f3a_t\u1eadp_tin?
-File_locked=T\u1eadp_tin_b\u1ecb_kh\u00f3a
-Current_tmp_value=Gi\u00e1_tr\u1ecb_tmp_hi\u1ec7n_t\u1ea1i
-Metadata_change=Thay_\u0111\u1ed5i_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u
-Changes_have_been_made_to_the_following_metadata_elements=C\u00e1c_thay_\u0111\u1ed5i_\u0111\u00e3_\u0111\u01b0\u1ee3c_th\u1ef1c_hi\u1ec7n_cho_nh\u1eefng_th\u00e0nh_ph\u1ea7n_\u0111\u1eb7c_t\u1ea3_CSDL_sau
-
-Generate_groups_for_author_last_names=T\u1ea1o_c\u00e1c_nh\u00f3m_cho_h\u1ecd_c\u1ee7a_t\u00e1c_gi\u1ea3
-Generate_groups_for_editor_last_names=T\u1ea1o_c\u00e1c_nh\u00f3m_cho_t\u00ean_h\u1ecd_c\u1ee7a_ng\u01b0\u1eddi_bi\u00ean_t\u1eadp
-Generate_groups_from_keywords_in_a_BibTeX_field=T\u1ea1o_c\u00e1c_nh\u00f3m_theo_t\u1eeb_kh\u00f3a_trong_m\u1ed9t_tr\u01b0\u1eddng_BibTex
-Enforce_legal_characters_in_BibTeX_keys=Bu\u1ed9c_ph\u1ea3i_d\u00f9ng_nh\u1eefng_k\u00fd_t\u1ef1_h\u1ee3p_l\u1ec7_trong_kh\u00f3a_BibTeX
-The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=K\u00fd_t\u1ef1_#_kh\u00f4ng_\u0111\u01b0\u1ee3c_ph\u00e9p_d\u00f9ng_trong_c\u00e1c_chu\u1ed7i_BibTeX,_tr\u1eeb_khi_c\u00f3_d\u1ea5u_tho\u00e1t,_v\u00ed_d\u1ee5_nh\u01b0_'\\#'.
-Before_saving,_please_edit_any_strings_containing_the_#_character.=Tr\u01b0\u1edbc_khi_l\u01b0u,_vui_l\u00f2ng_ch\u1ec9nh_s\u1eeda_t\u1ea5t_c\u1ea3_c\u00e1c_chu\u1ed7i_ch\u1ee9a_k\u00fd_t\u1ef1__#.
-
-Save_without_backup?=L\u01b0u_kh\u00f4ng_c\u00f3_b\u1ea3n_d\u1ef1_ph\u00f2ng?
-Unable_to_create_backup=Kh\u00f4ng_th\u1ec3_t\u1ea1o_b\u1ea3n_d\u1ef1_ph\u00f2ng
-
-File_directory_is_not_set_or_does_not_exist.=Th\u01b0_m\u1ee5c_t\u1eadp_tin_kh\u00f4ng_\u0111\u01b0\u1ee3c_thi\u1ebft_l\u1eadp_ho\u1eb7c_kh\u00f4ng_t\u1ed3n_t\u1ea1i.
-Move_file_to_file_directory.=Di_chuy\u1ec3n_t\u1eadp_tin_v\u00e0o_th\u01b0_m\u1ee5c_t\u1eadp_tin.
-Rename_file_to=\u0110\u1ed5i_t\u00ean_t\u1eadp_tin_th\u00e0nh
-<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>T\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c</b>_(kh\u00f4ng_th\u1ec3_ch\u1ec9nh_s\u1eeda_ho\u1eb7c_lo\u1ea1i_b\u1ecf_nh\u00f3m_n\u00e0y)
-static_group=nh\u00f3m_t\u0129nh
-dynamic_group=nh\u00f3m_\u0111\u1ed9ng
-refines_supergroup=tinh_ch\u1ec9nh_l\u1ea1i_nh\u00f3m_l\u1edbn
-includes_subgroups=k\u1ec3_c\u1ea3_c\u00e1c_nh\u00f3m_con
-contains=ch\u1ee9a
-dynamic_group=nh\u00f3m_\u0111\u1ed9ng
-search_expression=bi\u1ec3u_th\u1ee9c_t\u00ecm
-
-Disable_file_renaming_in_non-native_file_dialog=B\u1ea5t_ho\u1ea1t_vi\u1ec7c_\u0111\u1ed5i_t\u00ean_trong_h\u1ed9p_tho\u1ea1i_t\u1eadp_tin_kh\u00f4ng_ph\u1ea3i_thu\u1ed9c_ch\u01b0\u01a1ng_tr\u00ecnh
-File_dialog=H\u1ed9p_tho\u1ea1i_T\u1eadp_tin
-No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Kh\u00f4ng_t\u00ecm_th\u1ea5y_m\u1ee5c_n\u00e0o._C\u00f3_v\u1ebb_nh\u01b0_b\u1ea1n_kh\u00f4ng_c\u00f3_quy\u1ec1n_truy_c\u1eadp_\u0111\u1ec3_t\u00ecm_ki\u1ebfm_trong_JStor.
-
-Search_ScienceDirect=T\u00ecm_tr\u00ean_ScienceDirect
-Error_while_fetching_from_ScienceDirect=L\u1ed7i_khi_\u0111ang_l\u1ea5y_v\u1ec1_d\u1eef_li\u1ec7u_t\u1eeb_ScienceDirect
-
-Error_initializing_custom_export_format_from_string_'%0'=L\u1ed7i_khi_kh\u1edfi_t\u1ea1o_\u0111\u1ecbnh_d\u1ea1ng_xu\u1ea5t_t\u00f9y_ch\u1ecdn_t\u1eeb_chu\u1ed7i_'%0'
-BibLaTeX_mode=
-Optional_fields_2=
-Please_wait=
-Waiting_for_save_operation_to_finish=
-Resolving_duplicate_BibTeX_keys...=
-Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=
-This_database_contains_one_or_more_duplicated_BibTeX_keys.=
-Do_you_want_to_resolve_duplicate_keys_now?=
-Find_and_remove_duplicate_BibTeX_keys=
-Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=
-Duplicate_BibTeX_key=
-Duplicate_key=
-Generate_key=
-Import_marking_color=
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=T\u00ecm_th\u1ea5y_%0_m\u1ee5c._\u0110\u1ec3_gi\u1ea3m_t\u1ea3i_cho_server,_ch\u1ec9_c\u00f3_%1_s\u1ebd_\u0111\u01b0\u1ee3c_n\u1ea1p._S\u1ebd_r\u1ea5t_ch\u1eadm,_\u0111\u1ec3_\u0111\u1ea3m_b\u1ea3o_ACM_"h\u00e0i_l\u00f2ng".
-BibTeX_importer=Tr\u00ecnh_nh\u1eadp_BibTeX
-Always_add_letter_(a,_b,_...)_to_generated_keys=
-
-Ensure_unique_keys_using_letters_(a,_b,_...)=
-Ensure_unique_keys_using_letters_(b,_c,_...)=
-Entry_editor_active_background_color=
-Entry_editor_background_color=
-Entry_editor_font_color=
-Entry_editor_invalid_field_color=
-
-Table_and_entry_editor_colors=
-
-An_autosave_file_was_found_for_this_database._This_could_indicate_=
-that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=
-General_file_directory=
-User-specific_file_directory=
-Error_setting_look_and_feel=
-Search_failed\:_illegal_search_expression=
-Show_ArXiv_column=
-<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=
-
-You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=
-Automatically_open_browse_dialog_when_creating_new_file_link=
-
-Import_Metadata_from\:=
-Choose_the_source_for_the_metadata_import=
-Create_entry_based_on_XMP_data=
-Create_entry_based_on_data_fetched_from=
-Create_blank_entry_linking_the_PDF=
-Only_attach_PDF=
-Mr._dLib_Metadata_Entries_Associated_With\:=
-Mr._dLib_Metadata_Entries_Associated_With_PDF_File=
-Title=
-Author(s)=
-Published_Year=
-No_metadata_found.=
-Mr._dLib_web_service_is_temporarily_unavailable.=
-Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=
-You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=
-No_Internet_Connection.=
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=
-Web_Service_Version_Outdated=
-The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=
-Update_empty_fields_with_data_fetched_from=
-Create_New_Entry=
-Update_Existing_Entry=
-Mr._dLib=
-More_information=
-Fetching_Metadata...=
-Metadata=
-Autocomplete_names_in_'Firstname_Lastname'_format_only=
-Autocomplete_names_in_'Lastname,_Firstname'_format_only=
-Autocomplete_names_in_both_formats=
-Marking_color_%0=
-The_name_'comment'_can_not_be_used_as_an_entry_type_name.=
-You_must_enter_an_integer_value_in_the_text_field_for=
-File_directory=
-Send_as_email=
-References=
-Sending_of_emails=
-Subject_for_sending_an_email_with_references=
-Automatically_open_folders_of_attached_files=
-Create_entry_based_on_content=
-Store_choice_as_default=
-Do_not_show_this_box_again_for_this_import=
-Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=
-Error_creating_email=
-Could_not_open_directory=
-Entries_added_to_an_email=
-exportFormat=
-Output_file_missing=
-No_search_matches.=
-The_output_option_depends_on_a_valid_input_option.=
-Default_import_style_for_drag&drop_of_PDFs=
-Default_PDF_file_link_action=
-File_name_format_pattern=
-PostgreSQL_database=
-DIN_1505=
-Wrong_Format=
-Path_to_gnuclient_or_emacsclient=
-Additional_parameters=
-Encrypted_documents_are_not_supported=
-Cite_selected_entries=
-Cite_selected_entries_with_in-text_citation=
-Cite_special=
-Extra_information_(e.g._page_number)=
-Manage_citations=
-Problem_modifying_citation=
-Citation=
-Context=
-Extra_information=
-Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=
-Styles=
-Select_style=
-This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=
-Journals=
-Cite=
-Cite_in-text=
-Insert_empty_citation=
-Merge_citations=
-Manual_connect=
-Select_Writer_document=
-Sync_OO_bibliography=
-OpenOffice=
-Select_which_open_Writer_document_to_work_on=
-Connected_to_document=
-Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=
-Cite_selected_entries_with_extra_information=
-Ensure_that_the_bibliography_is_up-to-date=
-Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=
-Unable_to_synchronize_bibliography=
-Combine_pairs_of_citations_that_are_separated_by_spaces_only=
-Autodetection_failed=
-Connecting=
-Please_wait...=
-Unable_to_connect=
-Set_connection_parameters=
-Path_to_OpenOffice_directory=
-Path_to_OpenOffice_executable=
-Path_to_OpenOffice_library_dir=
-Autodetect=
-Connection_lost=
-The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=
-The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=
-Automatically_sync_bibliography_when_inserting_citations=
-Look_up_BibTeX_entries_in_the_active_tab_only=
-Look_up_BibTeX_entries_in_all_open_databases=
-Use_in-parenthesis_citation=
-Use_in-text_citation=
-Autodetecting_paths...=
-Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=
-Could_not_find_OpenOffice_installation=
-Directories=
-Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=
-Choose_OpenOffice_executable=
-Select_document=
-Edit_Group_Membership=
-PostgreSQL=
-Highlight_Words=
-JSTOR_import_cancelled=
-HTML_list=
-Click_group_to_toggle_membership_of_selected_entries=
-Use_EMACS_23_insertion_string=
-Normalize_to_BibTeX_name_format=
-If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=
-Could_not_open_%0=
-Unknown_import_format=
-Open_INSPIRE_entry=
-An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=
-Error_while_fetching_from_Inspire\:_=
-Web_search=
-Autocomplete_names=
-You_must_select_either_a_valid_style_file,_or_use_the_default_style.=
-Default_style=
-Choose_style_file_directly=
-Choose_from_a_directory=
-No_directory_defined_for_%0-files=
-Allow_file_links_relative_to_each_bib_file's_location=
-Style_selection=
-The_panel_below_shows_the_definition_of_the_default_style.=
-If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=
-
-Default_style_(author-year_citations)=
-Default_style_(numerical_citations)=
-No_valid_style_file_defined=
-Choose_pattern=
-Use_the_bib_file_location_as_primary_file_directory=
-Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=
-Built-in_journal_list=
-OpenOffice/LibreOffice_connection=
-You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=
-JabRef_includes_a_built-in_list_of_journal_abbreviations.=
-You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=
-You_must_select_either_a_valid_style_file,_or_use_a_default_style.=
-
-Show=
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=
-Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=
-
-This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=
-You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=
-First_select_entries_to_clean_up.=
-Cleanup_entry=
-Autogenerate_PDF_Names=
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=
-File_rename_failed_for=
-You_have_toggled_the_BibLaTeX_mode.=
-Use_full_firstname_whenever_possible=
-Use_abbreviated_firstname_whenever_possible=
-Use_abbreviated_and_full_firstname=
-Autocompletion_options=
-Autocomplete_after_following_number_of_characters=
-Name_format_used_for_autocompletion=
-Treatment_of_first_names=
-No_icon_found_for_%0=
-Cleanup_entries=
-Automatically_assign_new_entry_to_selected_groups=
-Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
-Format_content_of_month_field_to_#mon#=
-Ensure_that_page_ranges_are_of_the_form_num1--num2=
-Make_paths_of_linked_files_relative_(if_possible)=
-Rename_PDFs_to_given_file_name_format_pattern=
-Rename_only_PDFs_having_a_relative_path=
-What_would_you_like_to_clean_up?=
-Doing_a_cleanup_for_%0_entries...=
-No_entry_needed_a_clean_up=
-One_entry_needed_a_clean_up=
-%0_entries_needed_a_clean_up=
-Imported_=
-Error_importing_from_database=
-Minimize_to_system_tray=
-
-Incomplete_search_results=
-%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=
-
-Error_downloading_file_'%0'=
-Download_failed=
-
-%0_databases_will_be_imported=
-Importing_cancelled=
-There_are_no_available_databases_to_be_imported=
-Import_from_SQL_database=
-Imported_%0_databases_successfully=
-<_CREATE_NEW_DATABASE_>=
-Remove_Selected=
-SQL_Database_Exporter=
-Select_target_SQL_database\:=
-SQL_Database_Importer=
-Please_select_which_JabRef_databases_do_you_want_to_import\:=
-
-Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
-Attach_file=
-
-Setting_all_preferences_to_default_values.=
-Resetting_preference_key_'%0'=
-Unknown_preference_key_'%0'=
-Unable_to_clear_preferences.=
-
-Reset_preferences_(key1,key2,..._or_'all')=
-Find_unlinked_files=
-Select_All=
-Unselect_All=
-Expand_All=
-Collapse_All=
-Select_Directory=
-Choose_Directory=
-Use_the_selected_directory_to_start_with_the_search.=
-Browse...=
-Opens_the_file_browser.=
-Scan_directory=
-Searches_the_selected_directory_for_unlinked_files.=
-Starts_the_import_of_bibtex_entries.=
-Leave_this_dialog.=
-Create_directory_based_keywords=
-Creates_keywords_in_created_entrys_with_directory_pathnames=
-Select_a_directory_where_the_search_shall_start.=
-Select_file_type\:=
-These_files_are_not_linked_in_the_active_database.=
-Entry_type_to_be_created\:=
-Searching_file_system...=
-Importing_into_Database...=
-Select_directory=
-Select_files=
-Bibtex_entry_creation=
-<No_selection>=
-Push_selection_to_TeXstudio=
-Path_to_TeXstudio=
-Program_'%0'_not_found=
-Pushed_citations_to_TeXstudio=
-Unable_to_connect_to_freecite_online_service.=
-Parse_with_FreeCite=
-Insert_selected_citations_into_TeXstudio=
-The_current_BibTeX_key_will_be_overwritten._Continue?=
-Overwrite_key=
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
-Bibtex_key_patterns=
-Changed_special_field_settings=
-Clear_priority=
-Clear_rank=
-Compact_rank=
-Convert_1st,_2nd,_..._to_real_superscripts=
-Dropped_comment_from_database=
-Enable_PDF_preview=
-Enable_special_fields=
-Five_stars=
-Four_stars=
-Help_on_special_fields=
-Keywords_of_selected_entries=
-Manage_content_selectors=
-Manage_keywords=
-Marked_entries'_quality_as_good=
-Marked_entries_as_relevant=
-No_priority_information=
-No_rank_information=
-One_star=
-Priority=
-Priority_high=
-Priority_low=
-Priority_medium=
-Quality=
-Rank=
-Relevance=
-Set_priority=
-Set_priority_to_high=
-Set_priority_to_low=
-Set_priority_to_medium=
-Set_rank_to_five_stars=
-Set_rank_to_four_stars=
-Set_rank_to_one_star=
-Set_rank_to_three_stars=
-Set_rank_to_two_stars=
-Show_one_letter_heading_for_icon_columns=
-Show_priority=
-Show_quality=
-Show_rank=
-Show_relevance=
-Synchronize_with_keywords=
-Synchronized_special_fields_based_on_keywords=
-Three_stars=
-Toggle_relevance=
-Toogle_quality_assured=
-Two_stars=
-Update_keywords=
-Write_values_of_special_fields_as_separate_fields_to_BibTeX=
-You_have_changed_settings_for_special_fields.=
-no_preview_available=
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
-A_string_with_that_label_already_exists=
-Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
-Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
-Created_group_"%0".=
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
-If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
-Import_Metadata_From_PDF=
-Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
-Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
-Removed_all_subgroups_of_group_"%0".=
-To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
-Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
-Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
-Use_the_following_delimiter_character(s)\:=
-When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
-Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-
-Error_fetching_from_Google_Scholar=
-Run_HTML_converter_on_title=
-Searching...=
-You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
-Confirm_selection=
-Unknown_DOI\:_'%0'.=
-Get_BibTeX_entry_from_DOI=
-Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
-Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
-Import_conversions=
-Run_filter_on_title_keeping_the_case_of_selected_words=
-Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
-Please_enter_a_search_string=
-Please_open_or_start_a_new_database_before_searching=
-An_Error_occurred_while_fetching_from_ADS_(%0)\:=
-Error_while_fetching_from_ADS=
-Error_while_fetching_from_OAI2=
-An_Error_occurred_while_parsing_abstract=
-Unknown_DiVA_entry\:_'%0'.=
-Get_BibTeX_entry_from_DiVA=
-Log=
-Remove_unneccessary_$,_{,_and_}=
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+
+%0_contains_the_Regular_Expression_<b>%1</b>=%0%0 ch\u1ee9a_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%1</b>
+
+%0_contains_the_term_<b>%1</b>=%0 ch\u1ee9a_thu\u1eadt_ng\u1eef_<b>%1</b>
+
+%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_kh\u00f4ng_ch\u1ee9a_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%1</b>
+
+%0_doesn't_contain_the_term_<b>%1</b>=%0_kh\u00f4ng_ch\u1ee9a_thu\u1eadt_ng\u1eef_<b>%1</b>
+
+%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_kh\u00f4ng_kh\u1edbp_v\u1edbi_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%1</b>
+
+%0_doesn't_match_the_term_<b>%1</b>=%0_kh\u00f4ng_kh\u1edbp_thu\u1eadt_ng\u1eef_<b>%1</b>
+
+%0_export_successful=%0_xu\u1ea5t_th\u00e0nh_c\u00f4ng
+
+%0_field_set=%0_tr\u01b0\u1eddng_\u0111\u01b0\u1ee3c_thi\u1ebft_l\u1eadp
+
+%0_matches_the_Regular_Expression_<b>%1</b>=%0_kh\u1edbp_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%1</b>
+
+%0_matches_the_term_<b>%1</b>=%0_kh\u1edbp_thu\u1eadt_ng\u1eef_<b>%1</b>
+
+<field_name>=<t\u00ean_tr\u01b0\u1eddng>
+<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>Kh\u00f4ng_th\u1ec3_t\u00ecm_th\u1ea5y_t\u1eadp_tin_'%0'<BR>\u0111\u01b0\u1ee3c_li\u00ean_k\u1ebft_t\u1eeb_m\u1ee5c_'%1'</HTML>
+
+<no_field>=<kh\u00f4ng_c\u00f3_tr\u01b0\u1eddng>
+
+<select>=<ch\u1ecdn>
+
+<select_word>=<ch\u1ecdn_t\u1eeb>
+A_string_with_this_label_already_exists=M\u1ed9t_chu\u1ed7i_v\u1edbi_nh\u00e3n_\u0111\u00f3_\u0111\u00e3_c\u00f3
+Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=Vi\u1ebft_t\u1eaft_t\u00ean_t\u1ea1p_ch\u00ed_c\u1ee7a_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn_(vi\u1ebft_t\u1eaft_ki\u1ec3u_ISO)
+Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=Vi\u1ebft_t\u1eaft_t\u00ean_t\u1ea1p_ch\u00ed_c\u1ee7a_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn_(vi\u1ebft_t\u1eaft_ki\u1ec3u_MEDLINE)
+
+Abbreviate_names=Vi\u1ebft_t\u1eaft_c\u00e1c_t\u00ean
+Abbreviated_%0_journal_names.=%0_t\u00ean_t\u1ea1p_ch\u00ed_\u0111\u01b0\u1ee3c_vi\u1ebft_t\u1eaft.
+
+Abbreviation=Vi\u1ebft_t\u1eaft
+
+About_JabRef=N\u00f3i_v\u1ec1_JabRef
+
+Abstract=T\u00f3m_t\u1eaft
+
+Accept=Ch\u1ea5p_nh\u1eadn
+
+Accept_change=Ch\u1ea5p_nh\u1eadn_thay_\u0111\u1ed5i
+
+Action=H\u00e0nh_\u0111\u1ed9ng
+
+Add=Th\u00eam
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=Th\u00eam_m\u1ed9t_l\u1edbp_\u0110\u1ecbnhd\u1ea1ngNh\u1eadp_t\u00f9y_bi\u1ebfn_(\u0111\u01b0\u1ee3c_bi\u00ean_d\u1ecbch)_t\u1eeb_\u0111\u01b0\u1eddng_d\u1eabn_l\u1edbp._\n\u0110\u01b0\u1eddng_d\u1eabn_kh\u00f4ng_\u0111\u01b0\u1ee3c_tr\u00f9ng_v\u1edbi_\u0111\u01b0\u1eddng_d\u1eabn_l\u1edbp_c\u1ee7a_JabRef.
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=Th\u00eam_m\u1ed9t_l\u1edbp_\u0110\u1ecbnhd\u1ea1ngNh\u1eadp_t\u00f9y_bi\u1ebfn_(\u0111\u01b0\u1ee3c_bi\u00ean_d\u1ecbch)_t\u1eeb_m\u1ed9t_t\u1eadp_tin-zip._\nT\u1eadp_tin-zip_kh\u00f4ng_\u0111\u01b0\u1ee3c_tr\u00f9ng_v\u1edbi_\u0111\u01b0\u1eddng_d\u1eabn_l\u1edbp_c\u1ee7a_JabRef.
+
+add_entries_to_group=th\u00eam_c\u00e1c_m\u1ee5c_v\u00e0o_nh\u00f3m
+
+Add_entry_selection_to_this_group=Th\u00eam_ph\u00e9p_ch\u1ecdn_m\u1ee5c_v\u00e0o_nh\u00f3m_n\u00e0y
+
+Add_from_folder=Th\u00eam_t\u1eeb_th\u01b0_m\u1ee5c
+
+Add_from_jar=Th\u00eam_t\u1eeb_t\u1eadp_tin_jar
+
+add_group=th\u00eam_nh\u00f3m
+
+Add_Group=Th\u00eam_nh\u00f3m
+
+Add_new=Th\u00eam_m\u1edbi
+
+Add_Subgroup=Th\u00eam_nh\u00f3m_con
+
+Add_to_group=Th\u00eam_v\u00e0o_nh\u00f3m
+
+Added_group_"%0".=Nh\u00f3m_\u0111\u01b0\u1ee3c_th\u00eam_"%0".
+
+Added_new=M\u1edbi_\u0111\u01b0\u1ee3c_th\u00eam
+
+Added_string=Chu\u1ed7i_\u0111\u01b0\u1ee3c_th\u00eam
+
+Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=Ngo\u00e0i_ra,_nh\u1eefng_m\u1ee5c_n\u00e0o_c\u00f3_tr\u01b0\u1eddng_<b [...]
+
+Advanced=N\u00e2ng_cao
+All_custom_file_types_will_be_lost._Proceed?=T\u1ea5t_c\u1ea3_ki\u1ec3u_t\u1eadp_tin_t\u1ef1_t\u1ea1o_s\u1ebd_m\u1ea5t._V\u1eabn_ti\u1ebfp_t\u1ee5c?
+
+All_Entries=T\u1ea5t_c\u1ea3_c\u00e1c_M\u1ee5c
+
+All_entries=T\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c
+All_entries_of_this_type_will_be_declared_typeless._Continue?=T\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_thu\u1ed9c_ki\u1ec3u_n\u00e0y_s\u1ebd_\u0111\u01b0\u1ee3c_\u0111\u1ed5i_th\u00e0nh_kh\u00f4ng_c\u00f3_ki\u1ec3u._Ti\u1ebfp_t\u1ee5c_kh\u00f4ng?
+
+All_fields=T\u1ea5t_c\u1ea3_c\u00e1c_tr\u01b0\u1eddng
+
+All_subgroups_(recursively)=T\u1ea5t_c\u1ea3_c\u00e1c_nh\u00f3m_con_(\u0111\u1ec7_quy)
+
+Allow_editing_in_table_cells=Cho_ph\u00e9p_ch\u1ec9nh_s\u1eeda_trong_\u00f4_c\u1ee7a_b\u1ea3ng
+An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=M\u1ed9t_l\u1ed7i_x\u1ea3y_ra_khi_\u0111ang_l\u1ea5y_v\u1ec1_t\u1eeb_ngu\u1ed3n_OAI2_(%0):
+An_Exception_ocurred_while_accessing_'%0'=M\u1ed9t_l\u1ed7i_x\u1ea3y_ra_khi_\u0111ang_truy_c\u1eadp_'%0'
+An_SAXException_ocurred_while_parsing_'%0'\:=M\u1ed9t_l\u1ed7i_SAXException_x\u1ea3y_ra_khi_\u0111ang_ph\u00e2n_t\u00e1ch_'%0':
+
+and= v\u00e0
+and_inside_the_JabRef-jar\:=v\u00e0_trong_JabRef-jar:
+
+and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=v\u00e0_l\u1edbp_ph\u1ea3i_c\u00f3_trong_\u0111\u01b0\u1eddng_d\u1eabn_l\u1edbp_l\u1ea7n_sau_khi_b\u1ea1n_kh\u1edfi_\u0111\u1ed9ng_JabRef.
+
+any_field_that_matches_the_regular_expression_<b>%0</b>=b\u1ea5t_k\u1ef3_tr\u01b0\u1eddng_n\u00e0o_kh\u1edbp_Bi\u1ec3u_th\u1ee9c_Ch\u00ednh_t\u1eafc_<b>%0</b>
+
+Appearance=Di\u1ec7n_m\u1ea1o
+
+Append=N\u1ed1i
+Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=N\u1ed1i_n\u1ed9i_dung_t\u1eeb_m\u1ed9t_CSDL_BibTeX_v\u00e0o_CSDL_\u0111ang_xem_hi\u1ec7n_t\u1ea1i
+
+Append_database=N\u1ed1i_CSDL
+
+append_the_selected_text_to_bibtex_key=n\u1ed1i_n\u1ed9i_dung_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_kh\u00f3a_bibtex
+Application=\u1ee8ng_d\u1ee5ng
+
+Apply=\u00c1p_d\u1ee5ng
+
+Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=C\u00e1c_\u0111\u1ed1i_s\u1ed1_\u0111\u01b0\u1ee3c_truy\u1ec1n_cho_phi\u00ean_JabRef_\u0111ang_ch\u1ea1y._\u0110ang_t\u1eaft.
+
+Assign_entry_selection_exclusively_to_this_group=G\u00e1n_ph\u00e9p_ch\u1ecdn_m\u1ee5c_ch\u1ec9_cho_nh\u00f3m_n\u00e0y
+
+Assign_new_file=G\u00e1n_t\u1eadp_tin_m\u1edbi
+
+Assign_the_original_group's_entries_to_this_group?=G\u00e1n_c\u00e1c_m\u1ee5c_c\u1ee7a_nh\u00f3m_ban_\u0111\u1ea7u_v\u00e0o_nh\u00f3m_n\u00e0y?
+
+Assigned_%0_entries_to_group_"%1".=\u0110\u00e3_g\u00e1n_%0_m\u1ee5c_v\u00e0o_nh\u00f3m_"%1".
+
+Assigned_1_entry_to_group_"%0".=\u0110\u00e3_g\u00e1n_1_m\u1ee5c_v\u00e0o_nh\u00f3m_"%0".
+At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=T\u1ed1i_thi\u1ec3u_ph\u1ea3i_c\u00f3_ph\u1ea7n_m\u1edf_r\u1ed9ng_'net.sf.jabref.core'.
+
+Attach_%0_file=G\u1eafn_%0_t\u1eadp_tin
+
+Attach_URL=G\u1eafn_URL
+
+Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=C\u1ed1_g\u1eafng_thi\u1ebft_l\u1eadp_t\u1ef1_\u0111\u1ed9ng_%0_li\u00ean_k\u1ebft_v\u00e0o_c\u00e1c_m\u1ee5c._Thi\u1ebft_l\u1eadp_t\u1ef1_\u0111\u1ed9ng_ch\u1ea1y_\u0111\u01b0\u1ee3c_n\u1ebfu_m\u1ed9t_t\u1eadp_tin_%0_\u1edf_trong_th\u01b0_m\u1ee5c_ho\u1eb7c_th\u01b0_m\u1ee5c_con_%0_c\u1ee7a_b\u1ea1n<BR>\u0111\u0 [...]
+Attempting_SQL_export...=\u0110ang_c\u1ed1_xu\u1ea5t_ra_SQL...
+
+Auto=T\u1ef1_\u0111\u1ed9ng
+
+Autodetect_format=T\u1ef1_\u0111\u1ed9ng_ph\u00e1t_hi\u1ec7n_\u0111\u1ecbnh_d\u1ea1ng
+
+Autogenerate_BibTeX_key=T\u1ef1_\u0111\u1ed9ng_t\u1ea1o_kh\u00f3a_BibTeX
+Autogenerate_BibTeX_keys=T\u1ef1_\u0111\u1ed9ng_t\u1ea1o_c\u00e1c_kh\u00f3a_BibTeX
+
+Autogenerate_groups=T\u1ef1_\u0111\u1ed9ng_t\u1ea1o_c\u00e1c_nh\u00f3m
+
+autogenerate_keys=t\u1ef1_\u0111\u1ed9ng_t\u1ea1o_c\u00e1c_kh\u00f3a
+Autolink_files_with_names_starting_with_the_BibTeX_key=T\u1ef1_\u0111\u1ed9ng_li\u00ean_k\u1ebft_v\u1edbi_c\u00e1c_t\u00ean_b\u1eaft_\u0111\u1ea7u_b\u1eb1ng_kh\u00f3a_BibTeX
+
+Autolink_only_files_that_match_the_BibTeX_key=Ch\u1ec9_t\u1ef1_\u0111\u1ed9ng_li\u00ean_k\u1ebft_c\u00e1c_t\u1eadp_tin_n\u00e0o_kh\u1edbp_kh\u00f3a_BibTeX
+
+Automatically_create_groups=T\u1ef1_\u0111\u1ed9ng_t\u1ea1o_c\u00e1c_nh\u00f3m
+
+Automatically_create_groups_for_database.=T\u1ef1_\u0111\u1ed9ng_t\u1ea1o_c\u00e1c_nh\u00f3m_d\u00f9ng_cho_CSDL.
+
+Automatically_created_groups=C\u00e1c_nh\u00f3m_\u0111\u01b0\u1ee3c_t\u1ea1o_ra_t\u1ef1_\u0111\u1ed9ng
+
+Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=T\u1ef1_\u0111\u1ed9ng_\u1ea9n_\u0111i_giao_di\u1ec7n_nh\u00f3m_khi_chuy\u1ec3n_qua_m\u1ed9t_CSDL_kh\u00f4ng_ch\u1ee9a_nh\u00f3m
+
+Automatically_remove_exact_duplicates=T\u1ef1_\u0111\u1ed9ng_lo\u1ea1i_b\u1ecf_c\u00e1c_m\u1ee5c_tr\u00f9ng_nhau
+
+Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=T\u1ef1_\u0111\u1ed9ng_hi\u1ec3n_th\u1ecb_giao_di\u1ec7n_nh\u00f3m_khi_chuy\u1ec3n_qua_m\u1ed9t_CSDL_ch\u1ee9a_nh\u00f3m
+
+Autoset=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp
+
+Autoset_%0_field=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp_%0_tr\u01b0\u1eddng
+
+Autoset_%0_links._Allow_overwriting_existing_links.=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp_%0_li\u00ean_k\u1ebft._Cho_ph\u00e9p_ghi_\u0111\u00e8_c\u00e1c_li\u00ean_k\u1ebft_hi\u1ec7n_c\u00f3.
+
+Autoset_%0_links._Do_not_overwrite_existing_links.=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp_%0_li\u00ean_k\u1ebft._Kh\u00f4ng_ghi_\u0111\u00e8_c\u00e1c_li\u00ean_k\u1ebft_hi\u1ec7n_c\u00f3.
+Autoset_external_links=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i
+Autosetting_links=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp_li\u00ean_k\u1ebft
+
+AUX_file_import=Nh\u1eadp_t\u1eadp_tin_AUX
+
+Available_export_formats=C\u00e1c_\u0111\u1ecbnh_d\u1ea1ng_xu\u1ea5t_d\u00f9ng_\u0111\u01b0\u1ee3c
+
+Available_fields=C\u00e1c_tr\u01b0\u1eddng_BibTeX_d\u00f9ng_\u0111\u01b0\u1ee3c
+
+Available_import_formats=C\u00e1c_\u0111\u1ecbnh_d\u1ea1ng_nh\u1eadp_d\u00f9ng_\u0111\u01b0\u1ee3c
+
+Background_color_for_optional_fields=M\u00e0u_n\u1ec1n_cho_c\u00e1c_tr\u01b0\u1eddng_t\u00f9y_ch\u1ecdn
+
+Background_color_for_required_fields=M\u00e0u_n\u1ec1n_cho_c\u00e1c_tr\u01b0\u1eddng_b\u1eaft_bu\u1ed9c
+
+Backup_old_file_when_saving=Sao_l\u1ea1i_t\u1eadp_tin_c\u0169_khi_l\u01b0u
+Beta_version=Phi\u00ean_b\u1ea3n_Beta
+
+Bibkey_to_filename_conversion=Ph\u00e9p_chuy\u1ec3n_Bibkey_th\u00e0nh_t\u00ean_t\u1eadp_tin
+
+BibTeX_key=Kh\u00f3a_BibTeX
+
+BibTeX_key_is_unique.=Kh\u00f3a_BibTeX_kh\u00f4ng_\u0111\u01b0\u1ee3c_tr\u00f9ng.
+
+BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=Kh\u00f3a_BibTeX_ch\u01b0a_thi\u1ebft_l\u1eadp._Nh\u1eadp_t\u00ean_cho_t\u1eadp_tin_t\u1ea3i_v\u1ec1
+
+BibTeX_source=Ngu\u1ed3n_BibTeX
+
+BibTeXML=BibTeXML
+
+Binding=G\u1eafn_k\u1ebft
+Broken_link=Li\u00ean_k\u1ebft_b\u1ecb_\u0111\u1ee9t
+
+Browse=Duy\u1ec7t
+
+by=theo
+
+Calling_external_viewer...=\u0110ang_g\u1ecdi_tr\u00ecnh_xem_ngo\u00e0i...
+
+Cancel=H\u1ee7y
+
+Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=Kh\u00f4ng_th\u1ec3_th\u00eam_c\u00e1c_m\u1ee5c_v\u00e0o_nh\u00f3m_m\u00e0_kh\u00f4ng_t\u1ea1o_kh\u00f3a._C\u00f3_t\u1ea1o_kh\u00f3a_kh\u00f4ng?
+
+Cannot_merge_this_change=Kh\u00f4ng_th\u1ec3_g\u1ed9p_thay_\u0111\u1ed5i_n\u00e0y
+
+Cannot_move_group_"%0"_down.=Kh\u00f4ng_th\u1ec3_chuy\u1ec3n_nh\u00f3m_"%0"_xu\u1ed1ng.
+
+Cannot_move_group_"%0"_left.=Kh\u00f4ng_th\u1ec3_chuy\u1ec3n_nh\u00f3m_"%0"_qua_tr\u00e1i.
+
+Cannot_move_group_"%0"_right.=Kh\u00f4ng_th\u1ec3_chuy\u1ec3n_nh\u00f3m_"%0"_qua_ph\u1ea3i.
+
+Cannot_move_group_"%0"_up.=Kh\u00f4ng_th\u1ec3_chuy\u1ec3n_nh\u00f3m_"%0"_l\u00ean_tr\u00ean.
+
+case_insensitive=kh\u00f4ng_ph\u00e2n_bi\u1ec7t_ch\u1eef_hoa/th\u01b0\u1eddng
+
+case_sensitive=ph\u00e2n_bi\u1ec7t_ch\u1eef_hoa/th\u01b0\u1eddng
+
+Case_sensitive=Ph\u00e2n_bi\u1ec7t_ch\u1eef_hoa/th\u01b0\u1eddng
+
+change_assignment_of_entries=\u0111\u1ed5i_ph\u00e9p_g\u00e1n_c\u00e1c_m\u1ee5c
+
+Change_case=\u0110\u1ed5i_ch\u1eef_hoa/th\u01b0\u1eddng
+
+Change_entry_type=\u0110\u1ed5i_ki\u1ec3u_c\u1ee7a_m\u1ee5c
+Change_file_type=\u0110\u1ed5i_ki\u1ec3u_t\u1eadp_tin
+
+change_key=\u0111\u1ed5i_kh\u00f3a
+
+Change_of_Grouping_Method=\u0110\u1ed5i_Ph\u01b0\u01a1ng_ph\u00e1p_G\u1ed9p_nh\u00f3m
+
+change_preamble=\u0111\u1ed5i_ph\u1ea7n_m\u1edf_\u0111\u1ea7u
+
+change_string_content=\u0111\u1ed5i_n\u1ed9i_dung_chu\u1ed7i
+
+change_string_name=\u0111\u1ed5i_t\u00ean_chu\u1ed7i
+Change_table_column_and_General_fields_settings_to_use_the_new_feature=\u0110\u1ed5i_c\u1ed9t_c\u1ee7a_b\u1ea3ng_v\u00e0_c\u00e1c_thi\u1ebft_l\u1eadp_tr\u01b0\u1eddng_t\u1ed5ng_qu\u00e1t_\u0111\u1ec3_d\u00f9ng_t\u00ednh_ch\u1ea5t_m\u1edbi
+
+change_type=\u0111\u1ed5i_ki\u1ec3u
+
+changed_=\u0111\u01b0\u1ee3c_thay_\u0111\u1ed5i_
+
+Changed_font_settings=C\u00e1c_thi\u1ebft_l\u1eadp_ph\u00f4ng_\u0111\u01b0\u1ee3c_thay_\u0111\u1ed5i
+
+Changed_language_settings=C\u00e1c_thi\u1ebft_l\u1eadp_ng\u00f4n_ng\u1eef_\u0111\u01b0\u1ee3c_thay_\u0111\u1ed5i
+
+Changed_look_and_feel_settings=C\u00e1c_thi\u1ebft_l\u1eadp_di\u1ec7n_m\u1ea1o_\u0111\u01b0\u1ee3c_thay_\u0111\u1ed5i
+
+Changed_preamble=Ph\u1ea7n_m\u1edf_\u0111\u1ea7u_\u0111\u01b0\u1ee3c_thay_\u0111\u1ed5i
+
+Changed_type_to=Ki\u1ec3u_\u0111\u01b0\u1ee3c_\u0111\u1ed5i_th\u00e0nh
+
+Characters_to_ignore=C\u00e1c_k\u00fd_t\u1ef1_b\u1ecf_qua
+
+Check_existing_%0_links=Ki\u1ec3m_tra_%0_li\u00ean_k\u1ebft_hi\u1ec7n_c\u00f3
+
+Check_links=Ki\u1ec3m_tra_c\u00e1c_li\u00ean_k\u1ebft
+
+Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=Ch\u1ecdn_URL_\u0111\u1ec3_t\u1ea3i_v\u1ec1._Gi\u00e1_tr\u1ecb_hi\u1ec7n_t\u1ea1i_tr\u1ecf_\u0111\u1ebfn_m\u1ed9t_danh_s\u00e1ch_do_c\u00e1c_nh\u00e0_ph\u00e1t_tri\u1ec3n_JabRef_cung_c\u1ea5p.
+Cite_command=L\u1ec7nh_tr\u00edch_d\u1eabn
+
+Class_name=T\u00ean_l\u1edbp
+
+Clear=X\u00f3a
+
+clear_all_groups=x\u00f3a_t\u1ea5t_c\u1ea3_c\u00e1c_nh\u00f3m
+
+Clear_field=X\u00f3a_tr\u01b0\u1eddng
+Clear_fields=X\u00f3a_c\u00e1c_tr\u01b0\u1eddng
+
+Clear_highlight=X\u00f3a_ph\u1ea7n_l\u00e0m_n\u1ed5i
+
+Close=\u0110\u00f3ng
+
+Close_dialog=\u0110\u00f3ng_h\u1ed9p_tho\u1ea1i
+
+Close_the_current_database=\u0110\u00f3ng_CSDL_hi\u1ec7n_t\u1ea1i
+
+Close_the_help_window=\u0110\u00f3ng_c\u1eeda_s\u1ed5_tr\u1ee3_gi\u00fap
+
+Close_window=\u0110\u00f3ng_c\u1eeda_s\u1ed5
+
+Closed_database=CSDL_\u0111\u01b0\u1ee3c_\u0111\u00f3ng
+
+Collapse_subtree=Thu_s\u01a1_\u0111\u1ed3_ph\u1ee5_h\u00ecnh_c\u00e2y_l\u1ea1i
+
+Color_codes_for_required_and_optional_fields=\u0110\u00e1nh_m\u00e3_m\u00e0u_c\u00e1c_tr\u01b0\u1eddng_b\u1eaft_bu\u1ed9c_v\u00e0_t\u00f9y_ch\u1ecdn
+
+Color_for_marking_incomplete_entries=M\u00e0u_\u0111\u1ec3_\u0111\u00e1nh_d\u1ea5u_c\u00e1c_m\u1ee5c_ch\u01b0a_ho\u00e0n_t\u1ea5t
+
+Column_width=Chi\u1ec1u_r\u1ed9ng_c\u1ed9t
+
+Command_line_id=Ch\u1ec9_s\u1ed1_(id)_c\u1ee7a_d\u00f2ng_l\u1ec7nh
+
+Complete_record=Ho\u00e0n_t\u1ea5t_b\u1ea3n_ghi
+Connect=K\u1ebft_n\u1ed1i
+Connect_to_SQL_database=K\u1ebft_n\u1ed1i_\u0111\u1ebfn_CSDL_SQL
+Connect_to_SQL_Database=K\u1ebft_n\u1ed1i_\u0111\u1ebfn_CSDL_SQL
+Connection_to_IEEEXplore_failed=K\u1ebft_n\u1ed1i_\u0111\u1ebfn_IEEEXplore_th\u1ea5t_b\u1ea1i
+
+Contained_in=Ch\u1ee9a_trong
+
+Content=N\u1ed9i_dung
+
+Copied=\u0110\u01b0\u1ee3c_ch\u00e9p
+
+Copied_cell_contents=N\u1ed9i_dung_\u00f4_\u0111\u01b0\u1ee3c_ch\u00e9p
+
+Copied_key=Kh\u00f3a_\u0111\u01b0\u1ee3c_ch\u00e9p
+
+Copied_keys=C\u00e1c_kh\u00f3a_\u0111\u01b0\u1ee3c_ch\u00e9p
+
+Copy=Ch\u00e9p
+
+Copy_BibTeX_key=Ch\u00e9p_kh\u00f3a_BibTeX
+Copy_file_to_file_directory.=Ch\u00e9p_t\u1eadp_tin_v\u00e0o_th\u01b0_m\u1ee5c_t\u1eadp_tin.
+Copy_files_to_file_directory.=Ch\u00e9p_c\u00e1c_t\u1eadp_tin_v\u00e0o_th\u01b0_m\u1ee5c_t\u1eadp_tin.
+
+Copy_to_clipboard=Ch\u00e9p_v\u00e0o_b\u1ed9_nh\u1edb_t\u1ea1m
+
+Could_not_call_executable=Kh\u00f4ng_th\u1ec3_g\u1ecdi_ch\u01b0\u01a1ng_tr\u00ecnh
+
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=Kh\u00f4ng_th\u1ec3_k\u1ebft_n\u1ed1i_\u0111\u1ebfn_m\u1ed9t_ti\u1ebfn_tr\u00ecnh_gnuserv_\u0111ang_ch\u1ea1y._H\u00e3y_\u0111\u1ea3m_b\u1ea3o_r\u1eb1ng_Emacs_ho\u1eb7c_XEmacs_\u0111ang_ch\u1ea1y,<BR>v\u00e0_r\u1eb1ng_server_\u0111\u00e3_\u0111\u01b0\u1ee3c_kh\u1edfi_\u0111\u1ed9ng_(b\u1eb1ng_c\u00e1ch_ch\u1ea1y_l\u1e [...]
+
+Could_not_connect_to_host_=Kh\u00f4ng_th\u1ec3_k\u1ebft_n\u1ed1i_\u0111\u1ebfn_host_
+Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=Kh\u00f4ng_th\u1ec3_k\u1ebft_n\u1ed1i_\u0111\u1ebfn_server_Vim._H\u00e3y_\u0111\u1ea3m_b\u1ea3o_r\u1eb1ng_Vim_\u0111ang_ch\u1ea1y<BR>v\u1edbi_t\u00ean_server_\u0111\u00fang.
+
+Could_not_export_file=Kh\u00f4ng_th\u1ec3_xu\u1ea5t_t\u1eadp_tin
+
+Could_not_export_preferences=Kh\u00f4ng_th\u1ec3_xu\u1ea5t_c\u00e1c_t\u00f9y_th\u00edch
+
+Could_not_find_a_suitable_import_format.=Kh\u00f4ng_t\u00ecm_th\u1ea5y_\u0111\u1ecbnh_d\u1ea1ng_nh\u1eadp_ph\u00f9_h\u1ee3p.
+Could_not_find_directory_for_%0-files\:_%1=Kh\u00f4ng_t\u00ecm_th\u1ea5y_th\u01b0_m\u1ee5c_d\u00f9ng_cho_%0-t\u1eadp_tin:_%1
+Could_not_find_image_file=Kh\u00f4ng_t\u00ecm_th\u1ea5y_t\u1eadp_tin_\u1ea3nh
+
+Could_not_find_layout_file=Kh\u00f4ng_t\u00ecm_th\u1ea5y_t\u1eadp_tin_tr\u00ecnh_b\u00e0y
+
+Could_not_import_preferences=Kh\u00f4ng_th\u1ec3_nh\u1eadp_c\u00e1c_t\u00f9y_th\u00edch
+
+Could_not_instantiate_%0=Kh\u00f4ng_th\u1ec3_t\u1ea1o_\u0111\u1ed1i_t\u01b0\u1ee3ng_%0
+Could_not_instantiate_%0_%1=Kh\u00f4ng_th\u1ec3_t\u1ea1o_\u0111\u1ed1i_t\u01b0\u1ee3ng_%0_%1
+Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=Kh\u00f4ng_th\u1ec3_t\u1ea1o_\u0111\u1ed1i_t\u01b0\u1ee3ng_%0._B\u1ea1n_\u0111\u00e3_ch\u1ecdn_\u0111\u01b0\u1eddng_d\u1eabn_g\u00f3i_\u0111\u00fang_ch\u01b0a?
+Could_not_open_link=Kh\u00f4ng_th\u1ec3_m\u1edf_li\u00ean_k\u1ebft
+
+Could_not_parse_number_of_hits=Kh\u00f4ng_th\u1ec3_ph\u00e2n_t\u00e1ch_s\u1ed1_l\u1ea7n_g\u1eb7p
+Could_not_print_preview=Kh\u00f4ng_th\u1ec3_in_ph\u1ea7n_xem_tr\u01b0\u1edbc
+Could_not_run_the_'vim'_program.=Kh\u00f4ng_th\u1ec3_ch\u1ea1y_ch\u01b0\u01a1ng_tr\u00ecnh_'vim'.
+
+Could_not_save_file=Kh\u00f4ng_th\u1ec3_l\u01b0u_t\u1eadp_tin
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=Kh\u00f4ng_th\u1ec3_l\u01b0u_t\u1eadp_tin._M\u00e3_h\u00f3a_k\u00fd_t\u1ef1_'%0'_kh\u00f4ng_\u0111\u01b0\u1ee3c_h\u1ed7_tr\u1ee3.
+
+Create_group=T\u1ea1o_nh\u00f3m
+
+Created_groups.=C\u00e1c_nh\u00f3m_\u0111\u01b0\u1ee3c_t\u1ea1o_ra.
+
+crossreferenced_entries_included=c\u00e1c_m\u1ee5c_c\u00f3_tham_chi\u1ebfu_ch\u00e9o_\u0111\u01b0\u1ee3c_\u0111\u01b0a_v\u00e0o
+
+Current_content=N\u1ed9i_dung_hi\u1ec7n_t\u1ea1i
+
+Current_value=Gi\u00e1_tr\u1ecb_hi\u1ec7n_t\u1ea1i
+
+Custom_entry_types=Ki\u1ec3u_m\u1ee5c_t\u00f9y_ch\u1ec9nh
+
+Custom_entry_types_found_in_file=Ki\u1ec3u_m\u1ee5c_t\u00f9y_ch\u1ec9nh_\u0111\u01b0\u1ee3c_t\u00ecm_th\u1ea5y_trong_t\u1eadp_tin
+Custom_icon_theme=S\u1eafc_th\u00e1i_bi\u1ec3u_t\u01b0\u1ee3ng_t\u00f9y_ch\u1ec9nh
+Custom_icon_theme_file=T\u1eadp_tin_s\u1eafc_th\u00e1i_bi\u1ec3u_t\u01b0\u1ee3ng_t\u00f9y_ch\u1ec9nh
+
+Custom_importers=C\u00e1c_tr\u00ecnh_nh\u1eadp_t\u00f9y_ch\u1ec9nh
+
+Customize_entry_types=T\u00f9y_ch\u1ec9nh_c\u00e1c_ki\u1ec3u_m\u1ee5c
+
+Customize_key_bindings=T\u00f9y_ch\u1ec9nh_t\u1ed5_h\u1ee3p_ph\u00edm
+
+Cut=C\u1eaft
+
+cut_entries=c\u1eaft_c\u00e1c_m\u1ee5c
+
+cut_entry=c\u1eaft_m\u1ee5c
+
+Cut_pr=C\u1eaft_pr
+Database_\:=CSDL:
+
+Database_encoding=M\u00e3_h\u00f3a_CSDL
+
+Database_has_changed._Do_you_want_to_save_before_closing?=CSDL_\u0111\u00e3_thay_\u0111\u1ed5i._B\u1ea1n_c\u00f3_mu\u1ed1n_l\u01b0u_tr\u01b0\u1edbc_khi_\u0111\u00f3ng_kh\u00f4ng?
+
+Database_properties=T\u00ednh_ch\u1ea5t_c\u1ee7a_CSDL
+
+Date_format=\u0110\u1ecbnh_d\u1ea1ng_ng\u00e0y
+
+Default=M\u1eb7c_\u0111\u1ecbnh
+
+Default_encoding=M\u00e3_h\u00f3a_m\u1eb7c_\u0111\u1ecbnh
+
+Default_grouping_field=Tr\u01b0\u1eddng_g\u1ed9p_nh\u00f3m_m\u1eb7c_\u0111\u1ecbnh
+
+Default_look_and_feel=Di\u1ec7n_m\u1ea1o_m\u1eb7c_\u0111\u1ecbnh
+
+Default_pattern=Ki\u1ec3u_m\u1eb7c_\u0111\u1ecbnh
+
+Default_sort_criteria=C\u00e1c_ti\u00eau_chu\u1ea9n_ph\u00e2n_lo\u1ea1i_m\u1eb7c_\u0111\u1ecbnh
+Define_'%0'=\u0110\u1ecbnh_ngh\u0129a_'%0'
+
+Delete=X\u00f3a
+
+Delete_custom_format=X\u00f3a_\u0111\u1ecbnh_d\u1ea1ng_t\u00f9y_ch\u1ecdn
+
+delete_entries=x\u00f3a_c\u00e1c_m\u1ee5c
+
+Delete_entry=X\u00f3a_m\u1ee5c
+
+delete_entry=x\u00f3a_m\u1ee5c
+
+Delete_multiple_entries=X\u00f3a_nhi\u1ec1u_m\u1ee5c
+
+Delete_rows=X\u00f3a_h\u00e0ng
+
+Delete_strings=X\u00f3a_chu\u1ed7i
+
+Deleted=B\u1ecb_x\u00f3a
+
+Delimit_fields_with_semicolon,_ex.=Ph\u00e2n_c\u00e1ch_c\u00e1c_tr\u01b0\u1eddng_b\u1eb1ng,_v\u00ed_d\u1ee5_nh\u01b0,_d\u1ea5u_ch\u1ea5m_ph\u1ea9y.
+
+Descending=Gi\u1ea3m_d\u1ea7n
+
+Description=M\u00f4_t\u1ea3
+
+Deselect_all=Kh\u1eed_ch\u1ecdn_t\u1ea5t_c\u1ea3
+Deselect_all_duplicates=Kh\u1eed_ch\u1ecdn_t\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_l\u1eb7p
+
+Details=Chi_ti\u1ebft
+
+Disable_entry_editor_when_multiple_entries_are_selected=T\u1eaft_tr\u00ecnh_ch\u1ec9nh_s\u1eeda_m\u1ee5c_khi_nhi\u1ec1u_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn
+
+Disable_this_confirmation_dialog=T\u1eaft_h\u1ed9p_tho\u1ea1i_x\u00e1c_nh\u1eadn_n\u00e0y
+
+Disable_this_warning_dialog=T\u1eaft_h\u1ed9p_tho\u1ea1i_c\u1ea3nh_b\u00e1o_n\u00e0y
+
+Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=Tr\u00ecnh_b\u00e0y_t\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_thu\u1ed9c_v\u1ec1_m\u1ed9t_ho\u1eb7c_nhi\u1ec1u_nh\u00f3m_\u0111\u01b0\u1ee3c_ch\u1ecdn.
+
+Display_all_error_messages=Tr\u00ecnh_b\u00e0y_t\u1ea5t_c\u1ea3_th\u00f4ng_b\u00e1o_l\u1ed7i
+
+Display_help_on_command_line_options=Tr\u00ecnh_b\u00e0y_tr\u1ee3_gi\u00fap_\u1edf_c\u00e1c_t\u00f9y_ch\u1ecdn_d\u00f2ng_l\u1ec7nh
+
+Display_imported_entries_in_an_inspection_window_before_they_are_added.=Tr\u00ecnh_b\u00e0y_c\u00e1c_m\u1ee5c_nh\u1eadp_v\u00e0o_trong_c\u1eeda_s\u1ed5_xem_x\u00e9t_tr\u01b0\u1edbc_khi_th\u00eam_ch\u00fang.
+
+Display_only_entries_belonging_to_all_selected_groups.=Ch\u1ec9_tr\u00ecnh_b\u00e0y_c\u00e1c_m\u1ee5c_thu\u1ed9c_v\u1ec1_t\u1ea5t_c\u1ea3_c\u00e1c_nh\u00f3m_\u0111\u01b0\u1ee3c_ch\u1ecdn.
+Display_version=Tr\u00ecnh_b\u00e0y_phi\u00ean_b\u1ea3n
+
+Displaying_no_groups=Kh\u00f4ng_tr\u00ecnh_b\u00e0y_c\u00e1c_nh\u00f3m
+
+Do_not_abbreviate_names=Kh\u00f4ng_vi\u1ebft_t\u1eaft_t\u00ean
+
+Do_not_autoset=Kh\u00f4ng_thi\u1ebft_l\u1eadp_t\u1ef1_\u0111\u1ed9ng
+
+Do_not_import_entry=Kh\u00f4ng_nh\u1eadp_m\u1ee5c
+
+Do_not_open_any_files_at_startup=Kh\u00f4ng_m\u1edf_t\u1eadp_tin_n\u00e0o_l\u00fac_kh\u1edfi_\u0111\u1ed9ng
+
+Do_not_overwrite_existing_keys=Kh\u00f4ng_ghi_\u0111\u00e8_c\u00e1c_kh\u00f3a_hi\u1ec7n_c\u00f3
+Do_not_show_splash_window_at_startup=Kh\u00f4ng_hi\u1ec3n_th\u1ecb_m\u00e0n_h\u00ecnh_gi\u1edbi_thi\u1ec7u_l\u00fac_kh\u1edfi_\u0111\u1ed9ng
+Do_not_show_these_options_in_the_future=Kh\u00f4ng_hi\u1ec3n_th\u1ecb_nh\u1eefng_t\u00f9y_ch\u1ecdn_n\u00e0y_trong_t\u01b0\u01a1ng_lai
+
+Do_not_wrap_the_following_fields_when_saving=Kh\u00f4ng_'b\u1ecdc'_nh\u1eefng_tr\u01b0\u1eddng_d\u01b0\u1edbi_\u0111\u00e2y_khi_l\u01b0u
+Do_not_write_the_following_fields_to_XMP_Metadata\:=Kh\u00f4ng_ghi_nh\u1eefng_tr\u01b0\u1eddng_d\u01b0\u1edbi_\u0111\u00e2y_v\u00e0o_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP:
+
+Do_you_want_JabRef_to_do_the_following_operations?=B\u1ea1n_c\u00f3_mu\u1ed1n_JabRef_th\u1ef1c_hi\u1ec7n_nh\u1eefng_l\u1ec7nh_sau?
+
+DocBook=DocBook
+
+Down=Xu\u1ed1ng
+
+Download=T\u1ea3i_xu\u1ed1ng
+
+Download_completed=T\u1ea3i_xu\u1ed1ng_ho\u00e0n_t\u1ea5t
+
+Download_file=T\u1ea3i_xu\u1ed1ng_t\u1eadp_tin
+
+Downloading...=\u0110ang_t\u1ea3i...
+Drag_and_Drop_Error=L\u1ed7i_k\u00e9o_v\u00e0_th\u1ea3
+Drop_%0=Th\u1ea3_%0
+
+duplicate_BibTeX_key=tr\u00f9ng_kh\u00f3a_BibTeX
+
+Duplicate_BibTeX_key.=Tr\u00f9ng_kh\u00f3a_BibTeX.
+
+Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=Tr\u00f9ng_kh\u00f3a_BibTeX._Vi\u1ec7c_g\u1ed9p_nh\u00f3m_c\u00f3_th\u1ec3_kh\u00f4ng_l\u00e0m_\u0111\u01b0\u1ee3c_v\u1edbi_m\u1ee5c_n\u00e0y.
+
+Duplicate_Key_Warning=C\u1ea3nh_b\u00e1o_tr\u00f9ng_kh\u00f3a
+
+Duplicate_pairs_found=C\u00e1c_c\u1eb7p_b\u1ecb_tr\u00f9ng_\u0111\u01b0\u1ee3c_t\u00ecm_th\u1ea5y
+
+duplicate_removal=lo\u1ea1i_b\u1ecf_tr\u00f9ng
+
+Duplicate_string_name=Tr\u00f9ng_t\u00ean_chu\u1ed7i
+
+Duplicates_found=T\u00ecm_th\u1ea5y_c\u00e1c_m\u1ee5c_tr\u00f9ng
+
+Duplicates_removed=C\u00e1c_m\u1ee5c_tr\u00f9ng_b\u1ecb_lo\u1ea1i_b\u1ecf
+
+Dynamic_groups=C\u00e1c_nh\u00f3m_\u0111\u1ed9ng
+
+Dynamically_group_entries_by_a_free-form_search_expression=G\u1ed9p_nh\u00f3m_\u0111\u1ed9ng_c\u00e1c_m\u1ee5c_b\u1eb1ng_bi\u1ec3u_th\u1ee9c_t\u00ecm_ki\u1ebfm_d\u1ea1ng_t\u1ef1_do
+
+Dynamically_group_entries_by_searching_a_field_for_a_keyword=G\u1ed9p_nh\u00f3m_\u0111\u1ed9ng_c\u00e1c_m\u1ee5c_b\u1eb1ng_c\u00e1ch_t\u00ecm_tr\u01b0\u1eddng_ho\u1eb7c_t\u1eeb_kh\u00f3a
+
+Each_line_must_be_on_the_following_form=M\u1ed7i_d\u00f2ng_ph\u1ea3i_c\u00f3_d\u1ea1ng_sau
+
+Edit=Ch\u1ec9nh_s\u1eeda
+
+Edit_custom_export=Ch\u1ec9nh_s\u1eeda_vi\u1ec7c_xu\u1ea5t_t\u00f9y_ch\u1ecdn
+Edit_entry=Ch\u1ec9nh_s\u1eeda_m\u1ee5c
+Edit_file_link=Ch\u1ec9nh_s\u1eeda_li\u00ean_k\u1ebft_t\u1eadp_tin
+Edit_file_type=Ch\u1ec9nh_s\u1eeda_ki\u1ec3u_t\u1eadp_tin
+
+Edit_group=Ch\u1ec9nh_s\u1eeda_nh\u00f3m
+
+Edit_journal=Ch\u1ec9nh_s\u1eeda_t\u1ea1p_ch\u00ed
+
+Edit_preamble=Ch\u1ec9nh_s\u1eeda_ph\u1ea7n_m\u1edf_\u0111\u1ea7u
+Edit_strings=Ch\u1ec9nh_s\u1eeda_c\u00e1c_chu\u1ed7i
+Editor_options=C\u00e1c_t\u00f9y_ch\u1ecdn_tr\u00ecnh_ch\u1ec9nh_s\u1eeda
+
+empty_BibTeX_key=kh\u00f3a_BibTeX_r\u1ed7ng
+
+Empty_BibTeX_key.=Kh\u00f3a_BibTeX_r\u1ed7ng
+
+Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=Kh\u00f3a_BibTeX_r\u1ed7ng._Vi\u1ec7c_g\u1ed9p_nh\u00f3m_c\u00f3_th\u1ec3_kh\u00f4ng_l\u00e0m_\u0111\u01b0\u1ee3c_v\u1edbi_m\u1ee5c_n\u00e0y.
+
+empty_database=CSDL_r\u1ed7ng
+
+Enable_source_editing=B\u1eadt_ch\u1ec9nh_s\u1eeda_ngu\u1ed3n
+Enable_word/name_autocompletion=B\u1eadt_ch\u1ee9c_n\u0103ng_t\u1ef1_ho\u00e0n_t\u1ea5t_t\u1eeb/t\u00ean
+
+Endnote=Endnote
+
+Enter_URL=Nh\u1eadp_URL
+
+Enter_URL_to_download=Nh\u1eadp_URL_\u0111\u1ec3_t\u1ea3i_v\u1ec1
+
+entries=c\u00e1c_m\u1ee5c
+
+Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=Kh\u00f4ng_th\u1ec3_g\u00e1n_th\u1ee7_c\u00f4ng_hay_lo\u1ea1i_b\u1ecf_c\u00e1c_m\u1ee5c_kh\u1ecfi_nh\u00f3m_n\u00e0y.
+
+Entries_exported_to_clipboard=C\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_xu\u1ea5t_ra_b\u1ed9_nh\u1edb_t\u1ea1m
+
+entries_have_undefined_BibTeX_key=c\u00e1c_m\u1ee5c_c\u00f3_kh\u00f3a_BibTeX_kh\u00f4ng_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a
+
+entries_into_new_database=c\u00e1c_m\u1ee5c_v\u00e0o_CSDL_m\u1edbi
+
+entry=m\u1ee5c
+
+Entry_editor=Tr\u00ecnh_ch\u1ec9nh_s\u1eeda_m\u1ee5c
+
+Entry_in_current_database=M\u1ee5c_trong_CSDL_hi\u1ec7n_t\u1ea1i
+
+Entry_in_import=M\u1ee5c_trong_ph\u1ea7n_nh\u1eadp
+
+Entry_preview=Xem_tr\u01b0\u1edbc_m\u1ee5c
+
+Entry_table=B\u1ea3ng_nh\u1eadp_v\u00e0o
+
+Entry_table_columns=C\u00e1c_c\u1ed9t_c\u1ee7a_b\u1ea3ng_nh\u1eadp_v\u00e0o
+
+Entry_type=Ki\u1ec3u_c\u1ee7a_m\u1ee5c
+
+Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=Ki\u1ec3u_c\u1ee7a_m\u1ee5c_kh\u00f4ng_\u0111\u01b0\u1ee3c_ph\u00e9p_ch\u1ee9a_kho\u1ea3ng_tr\u1eafng_ho\u1eb7c_c\u00e1c_k\u00fd_t\u1ef1_sau
+
+Entry_types=C\u00e1c_ki\u1ec3u_c\u1ee7a_m\u1ee5c
+
+Error=L\u1ed7i
+Error\:_=L\u1ed7i:_
+Error_converting_Bibtex_to_XMP\:_%0=L\u1ed7i_chuy\u1ec3n_\u0111\u1ed5i_Bibtex_th\u00e0nh_XMP:_%0
+Error_converting_XMP_to_'%0'...=L\u1ed7i_chuy\u1ec3n_\u0111\u1ed5i_XMP_th\u00e0nh_'%0'...
+Error_exporting_to_clipboard=L\u1ed7i_xu\u1ea5t_ra_b\u1ed9_nh\u1edb_t\u1ea1m
+
+##Error:_check_your_External_viewer_settings_in_Preferences=Error:_check_your_External_viewer_settings_in_Preferences
+Error_in_field=L\u1ed7i_trong_tr\u01b0\u1eddng
+Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=L\u1ed7i_kh\u1edfi_\u0111\u1ed9ng_ph\u1ea7n_m\u1edf_r\u1ed9ng_c\u1ee7a_h\u1ec7_th\u1ed1ng._Kh\u1edfi_\u0111\u1ed9ng_kh\u00f4ng_c\u00f3_n\u00f3,_m\u1ed9t_s\u1ed1_ch\u1ee9c_n\u0103ng_c\u00f3_th\u1ec3_b\u1ecb_thi\u1ebfu.
+Error_occured_when_parsing_entry=L\u1ed7i_x\u1ea3y_ra_khi_\u0111ang_ph\u00e2n_t\u00e1ch_m\u1ee5c
+
+Error_opening_file=L\u1ed7i_khi_\u0111ang_m\u1edf_t\u1eadp_tin
+
+Error_setting_field=L\u1ed7i_thi\u1ebft_l\u1eadp_tr\u01b0\u1eddng
+Error_while_converting_BibtexEntry_to_XMP_%0=L\u1ed7i_khi_chuy\u1ec3n_\u0111\u1ed5i_m\u1ee5c_Bibtex_th\u00e0nh_XMP_%0
+Error_while_downloading_file\:=L\u1ed7i_khi_\u0111ang_t\u1ea3i_t\u1eadp_tin:
+Error_while_fetching_from_OIA2=L\u1ed7i_khi_\u0111ang_l\u1ea5y_v\u1ec1_t\u1eeb_OIA2
+Error_while_writing=L\u1ed7i_khi_\u0111ang_ghi
+Error_writing_to_%0_file(s).=L\u1ed7i_khi_\u0111ang_ghi_v\u00e0o_t\u1eadp_tin_%0.
+Error_writing_XMP_to_file\:_%0=L\u1ed7i_khi_\u0111ang_ghi_XMP_v\u00e0o_t\u1eadp_tin:_%0
+
+
+Establishing_SQL_connection...=\u0110ang_thi\u1ebft_l\u1eadp_k\u1ebft_n\u1ed1i_SQL...
+Exceptions=C\u00e1c_ngo\u1ea1i_l\u1ec7
+
+Existing_file=T\u1eadp_tin_hi\u1ec7n_c\u00f3
+
+exists._Overwrite_file?=\u0111\u00e3_c\u00f3._Ghi_\u0111\u00e8_t\u1eadp_tin_kh\u00f4ng?
+exists._Overwrite?=\u0111\u00e3_c\u00f3._Ghi_\u0111\u00e8_kh\u00f4ng?
+
+Expand_subtree=M\u1ed5_r\u1ed9ng_s\u01a1_\u0111\u1ed3_c\u00e2y_ph\u1ee5
+
+#previousentrynottranslated.Toviewit,openGroupinterfaceandclickonthe"newgroup"button
+Export=Xu\u1ea5t
+
+Export_name=Xu\u1ea5t_t\u00ean
+
+Export_preferences=Xu\u1ea5t_c\u00e1c_t\u00f9y_th\u00edch
+
+Export_preferences_to_file=Xu\u1ea5t_c\u00e1c_t\u00f9y_th\u00edch_ra_t\u1eadp_tin
+
+Export_properties=C\u00e1c_t\u00ednh_ch\u1ea5t_xu\u1ea5t
+
+Export_to_clipboard=Xu\u1ea5t_ra_b\u1ed9_nh\u1edb_t\u1ea1m
+Export_to_SQL_database=Xu\u1ea5t_ra_CSDL_SQL
+
+Exporting=\u0110ang_xu\u1ea5t
+Extension=\u0110u\u00f4i_m\u1edf_r\u1ed9ng
+
+External_changes=C\u00e1c_thay_\u0111\u1ed5i_ngo\u00e0i
+
+External_file_links=C\u00e1c_li\u00ean_k\u1ebft_t\u1eadp_tin_ngo\u00e0i
+
+External_files=C\u00e1c_t\u1eadp_tin_ngo\u00e0i
+
+External_programs=C\u00e1c_ch\u01b0\u01a1ng_tr\u00ecnh_ngo\u00e0i
+
+External_viewer_called=Tr\u00ecnh_xem_ngo\u00e0i_\u0111\u01b0\u1ee3c_g\u1ecdi
+
+Failed_to_read_groups_data_(unsupported_version\:_%0)=Th\u1ea5t_b\u1ea1i_khi_\u0111\u1ecdc_d\u1eef_li\u1ec7u_nh\u00f3m_(phi\u00ean_b\u1ea3n_kh\u00f4ng_\u0111\u01b0\u1ee3c_h\u1ed7_tr\u1ee3:_%0)
+
+Fetch=L\u1ea5y_v\u1ec1
+
+Field=Tr\u01b0\u1eddng
+
+field=tr\u01b0\u1eddng
+
+#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
+Field_content=N\u1ed9i_dung_tr\u01b0\u1eddng
+
+Field_name=T\u00ean_tr\u01b0\u1eddng
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=T\u00ean_tr\u01b0\u1eddng_kh\u00f4ng_\u0111\u01b0\u1ee3c_ph\u00e9p_ch\u1ee9a_kho\u1ea3ng_tr\u1eafng_ho\u1eb7c_c\u00e1c_k\u00fd_t\u1ef1_sau
+
+Field_sizes=C\u00e1c_k\u00edch_th\u01b0\u1edbc_tr\u01b0\u1eddng
+Field_to_filter=Tr\u01b0\u1eddng_c\u1ea7n_l\u1ecdc
+
+Field_to_group_by=Tr\u01b0\u1eddng_g\u1ed9p_nh\u00f3m_theo
+
+Fields=C\u00e1c_tr\u01b0\u1eddng
+
+File=T\u1eadp_tin
+
+file=t\u1eadp_tin
+
+File_'%0'_is_already_open.=T\u1eadp_tin_'%0'_\u0111\u00e3_m\u1edf.
+
+File_'%0'_not_found=Kh\u00f4ng_t\u00ecm_th\u1ea5y_t\u1eadp_tin_'%0'
+
+File_changed=T\u1eadp_tin_b\u1ecb_thay_\u0111\u1ed5i
+File_directory_is_'%0'\:=Th\u01b0_m\u1ee5c_t\u1eadp_tin_l\u00e0_'%0':
+
+File_directory_is_not_set_or_does_not_exist!=Th\u01b0_m\u1ee5c_t\u1eadp_tin_kh\u00f4ng_\u0111\u01b0\u1ee3c_thi\u1ebft_l\u1eadp_ho\u1eb7c_kh\u00f4ng_t\u1ed3n_t\u1ea1i!
+File_download=T\u1ea3i_v\u1ec1_t\u1eadp_tin
+File_exists=T\u1eadp_tin_\u0111\u00e3_c\u00f3
+
+File_extension=\u0110u\u00f4i_m\u1edf_r\u1ed9ng_t\u1eadp_tin
+File_has_been_updated_externally._What_do_you_want_to_do?=T\u1eadp_tin_\u0111\u00e3_\u0111\u01b0\u1ee3c_c\u1eadp_nh\u1eadt_\u1edf_ngo\u00e0i_ch\u01b0\u01a1ng_tr\u00ecnh._B\u1ea1n_mu\u1ed1n_l\u00e0m_g\u00ec?
+
+File_not_found=Kh\u00f4ng_th\u1ea5y_t\u1eadp_tin
+File_type=Ki\u1ec3u_t\u1eadp_tin
+
+File_updated_externally=T\u1eadp_tin_\u0111\u01b0\u1ee3c_c\u1eadp_nh\u1eadt_ngo\u00e0i_ch\u01b0\u01a1ng_tr\u00ecnh
+
+filename=t\u00ean_t\u1eadp_tin
+
+Files_opened=C\u00e1c_t\u1eadp_tin_\u0111\u00e3_m\u1edf
+
+Filter=L\u1ecdc
+
+Finished_autosetting_external_links.=Thi\u1ebft_l\u1eadp_t\u1ef1_\u0111\u1ed9ng_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i_ho\u00e0n_t\u1ea5t.
+
+Finished_synchronizing_%0_links._Entries_changed%c_%1.=\u0110\u1ed3ng_b\u1ed9_h\u00f3a_%0_li\u00ean_k\u1ebft_ho\u00e0n_t\u1ea5t._C\u00e1c_m\u1ee5c_thay_\u0111\u1ed5i%c_%1.
+Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_ho\u00e0n_t\u1ea5t._\u0110\u00e3_ghi_v\u00e0o_%0_t\u1eadp_tin.
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=K\u1ebft_th\u00fac_ghi_XMP_cho_%0_t\u1eadp_tin_(b\u1ecf_qua_%1,_%2_l\u1ed7i).
+
+First_select_the_entries_you_want_keys_to_be_generated_for.=Tr\u01b0\u1edbc_ti\u00ean_h\u00e3y_ch\u1ecdn_c\u00e1c_m\u1ee5c_m\u00e0_b\u1ea1n_mu\u1ed1n_t\u1ea1o_kh\u00f3a.
+
+Fit_table_horizontally_on_screen=L\u00e0m_cho_b\u1ea3ng_kh\u00edt_chi\u1ec1u_ngang_m\u00e0n_h\u00ecnh
+
+Float=Float
+Float_marked_entries=C\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_\u0111\u00e1nh_d\u1ea5u_l\u00e0_Float
+
+Font_Family=H\u1ecd_ph\u00f4ng_ch\u1eef
+
+Font_Preview=Xem_tr\u01b0\u1edbc_ph\u00f4ng_ch\u1eef
+
+Font_Size=C\u1ee1_ph\u00f4ng_ch\u1eef
+
+Font_Style=Ki\u1ec3u_ph\u00f4ng_ch\u1eef
+
+FontSelector=Tr\u00ecnh_ch\u1ecdn_ph\u00f4ng_ch\u1eef
+
+for=d\u00f9ng_cho
+
+Format_of_author_and_editor_names=\u0110\u1ecbnh_d\u1ea1ng_t\u00ean_t\u00e1c_gi\u1ea3_v\u00e0_ng\u01b0\u1eddi_bi\u00ean_t\u1eadp
+Format_String=\u0110\u1ecbnh_d\u1ea1ng_chu\u1ed7i
+
+Format_used=\u0110\u1ecbnh_d\u1ea1ng_\u0111\u01b0\u1ee3c_d\u00f9ng
+Formatter_Name=T\u00ean_tr\u00ecnh_\u0111\u1ecbnh_d\u1ea1ng
+
+Formatter_not_found=Kh\u00f4ng_th\u1ea5y_tr\u00ecnh_\u0111\u1ecbnh_d\u1ea1ng
+
+found=t\u00ecm_th\u1ea5y
+Found_%0_plugin(s)=T\u00ecm_th\u1ea5y_%0_ph\u1ea7n_m\u1edf_r\u1ed9ng
+
+found_in_aux_file=t\u00ecm_th\u1ea5y_trong_t\u1eadp_tin_aux
+
+Full_name=T\u00ean_\u0111\u1ea7y_\u0111\u1ee7
+
+General=T\u1ed5ng_qu\u00e1t
+
+General_fields=C\u00e1c_tr\u01b0\u1eddng_t\u1ed5ng_qu\u00e1t
+
+Generate=T\u1ea1o
+
+Generate_BibTeX_key=T\u1ea1o_kh\u00f3a_BibTeX
+
+Generate_keys=T\u1ea1o_c\u00e1c_kh\u00f3a
+
+Generate_keys_before_saving_(for_entries_without_a_key)=T\u1ea1o_c\u00e1c_kh\u00f3a_tr\u01b0\u1edbc_khi_l\u01b0u_(cho_c\u00e1c_m\u1ee5c_kh\u00f4ng_c\u00f3_kh\u00f3a)
+Generate_keys_for_imported_entries=T\u1ea1o_kh\u00f3a_cho_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_nh\u1eadp_v\u00e0o
+
+Generate_now=T\u1ea1o_b\u00e2y_gi\u1edd
+
+Generated_BibTeX_key_for=Kh\u00f3a_BibTeX_\u0111\u01b0\u1ee3c_t\u1ea1o_ra_cho
+
+Generating_BibTeX_key_for=\u0110ang_t\u1ea1o_kh\u00f3a_BibTeX_cho
+
+Grab=L\u1ea5y
+
+Gray_out_entries_not_in_group_selection=T\u00f4_x\u00e1m_c\u00e1c_m\u1ee5c_kh\u00f4ng_thu\u1ed9c_ph\u00e9p_ch\u1ecdn_nh\u00f3m
+
+Gray_out_non-hits=T\u00f4_x\u00e1m_c\u00e1c_m\u1ee5c_kh\u00f4ng_g\u1eb7p
+
+Gray_out_non-matching_entries=T\u00f4_x\u00e1m_c\u00e1c_m\u1ee5c_kh\u00f4ng_kh\u1edbp
+
+Group_properties=Thu\u1ed9c_t\u00ednh_c\u1ee7a_nh\u00f3m
+
+grouping_may_not_work_for_this_entry=Vi\u1ec7c_g\u1ed9p_nh\u00f3m_c\u00f3_th\u1ec3_kh\u00f4ng_ch\u1ea1y_\u0111\u01b0\u1ee3c_v\u1edbi_m\u1ee5c_n\u00e0y
+
+Groups=C\u00e1c_nh\u00f3m
+
+Harvard_RTF=Harvard_RTF
+
+Have_you_chosen_the_correct_package_path?=B\u1ea1n_\u0111\u00e3_ch\u1ecdn_\u0111\u01b0\u1eddng_d\u1eabn_g\u00f3i_\u0111\u00fang_ch\u01b0a?
+
+Help=Tr\u1ee3_gi\u00fap
+
+Help_contents=N\u1ed9i_dung_tr\u1ee3_gi\u00fap
+
+Help_on_groups=Tr\u1ee3_gi\u00fap_v\u1ec1_nh\u00f3m
+
+Help_on_key_patterns=Tr\u1ee3_gi\u00fap_v\u1ec1_c\u00e1c_ki\u1ec3u_kh\u00f3a
+Help_on_Preview_Settings=Tr\u1ee3_gi\u00fap_v\u1ec1_c\u00e1c_thi\u1ebft_l\u1eadp_xem_tr\u01b0\u1edbc
+Help_on_Regular_Expression_Search=Tr\u1ee3_gi\u00fap_v\u1ec1_t\u00ecm_ki\u1ebfm_b\u1eb1ng_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc
+
+Hide_non-hits=\u1ea8n_c\u00e1c_m\u1ee5c_kh\u00f4ng_g\u1eb7p
+
+Hide_non-matching_entries=\u1ea8n_c\u00e1c_m\u1ee5c_kh\u00f4ng_kh\u1edbp
+
+Hierarchical_context=Ng\u1eef_c\u1ea3nh_c\u00f3_c\u1ea5p_b\u1eadc
+
+Highlight=T\u00f4_s\u00e1ng
+Highlight_groups_matching_all_selected_entries=T\u00f4_s\u00e1ng_nh\u1eefng_nh\u00f3m_kh\u1edbp_t\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn
+Highlight_groups_matching_any_selected_entry=T\u00f4_s\u00e1ng_c\u00e1c_nh\u00f3m_kh\u1edbp_b\u1ea5t_k\u1ef3_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn_n\u00e0o
+
+Highlight_overlapping_groups=T\u00f4_s\u00e1ng_c\u00e1c_nh\u00f3m_g\u1ed1i_nhau
+
+Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=G\u1ee3i_\u00fd%c_\u0110\u1ec3_ch\u1ec9_t\u00ecm_ki\u1ebfm_c\u00e1c_tr\u01b0\u1eddng_\u0111\u1eb7c_th\u00f9,_nh\u1eadp,_v\u00ed_d\u1ee5_nh\u01b0%c<p><tt>author%esmith_and_title%eelectrical</tt>
+
+HTML=HTML
+HTML_table=B\u1ea3ng_HTML
+HTML_table_(with_Abstract_&_BibTeX)=B\u1ea3ng_HTML_(v\u1edbi_T\u00f3m_t\u1eaft_&_BibTeX)
+Icon=Bi\u1ec3u_t\u01b0\u1ee3ng
+
+Ignore=B\u1ecf_qua
+
+Immediate_subgroups=C\u00e1c_nh\u00f3m_con_s\u00e1t_nhau
+
+Import=Nh\u1eadp
+
+Import_and_keep_old_entry=Nh\u1eadp_v\u00e0_gi\u1eef_m\u1ee5c_c\u0169
+
+Import_and_remove_old_entry=Nh\u1eadp_v\u00e0_lo\u1ea1i_b\u1ecf_m\u1ee5c_c\u0169
+
+Import_entries=Nh\u1eadp_c\u00e1c_m\u1ee5c
+
+Import_failed=Vi\u1ec7c_nh\u1eadp_th\u1ea5t_b\u1ea1i
+
+Import_file=Nh\u1eadp_t\u1eadp_tin
+
+Import_group_definitions=Nh\u1eadp_c\u00e1c_\u0111\u1ecbnh_ngh\u0129a_nh\u00f3m
+
+Import_name=Nh\u1eadp_t\u00ean
+
+Import_preferences=Nh\u1eadp_c\u00e1c_t\u00f9y_th\u00edch
+
+Import_preferences_from_file=Nh\u1eadp_c\u00e1c_t\u00f9y_th\u00edch_t\u1eeb_t\u1eadp_tin
+
+Import_strings=Nh\u1eadp_c\u00e1c_chu\u1ed7i
+
+Import_to_open_tab=Nh\u1eadp_v\u00e0o_th\u1ebb_\u0111ang_m\u1edf
+
+Import_word_selector_definitions=Nh\u1eadp_c\u00e1c_\u0111\u1ecbnh_ngh\u0129a_tr\u00ecnh_ch\u1ecdn_t\u1eeb
+
+Imported_database=CSDL_\u0111\u01b0\u1ee3c_nh\u1eadp
+
+Imported_entries=C\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_nh\u1eadp
+
+Imported_from_database=\u0111\u01b0\u1ee3c_nh\u1eadp_t\u1eeb_CSDL
+
+ImportFormat_class=L\u1edbp_\u0110\u1ecbnhd\u1ea1ngNh\u1eadp
+
+Importing=\u0110ang_nh\u1eadp
+
+Importing_in_unknown_format=Nh\u1eadp_v\u00e0o_th\u00e0nh_\u0111\u1ecbnh_d\u1ea1ng_kh\u00f4ng_r\u00f5
+
+In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=Trong_JabRef,_d\u00f9ng_c\u00e1c_c\u1eb7p_k\u00fd_t\u1ef1_#_\u0111\u1ec3_ch\u1ec9_r\u1eb1ng_\u0111\u00f3_l\u00e0_m\u1ed9t_chu\u1ed7i.
+
+Include_abstracts=\u0110\u01b0a_v\u00e0o_c\u1ea3_ph\u1ea7n_t\u00f3m_t\u1eaft
+Include_entries=\u0110\u01b0a_v\u00e0o_c\u00e1c_m\u1ee5c
+
+Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=\u0110\u01b0a_v\u00e0o_c\u00e1c_nh\u00f3m_con\:_Khi_\u0111\u01b0\u1ee3c_ch\u1ecdn,_xem_c\u00e1c_m\u1ee5c_ch\u1ee9a_trong_nh\u00f3m_n\u00e0y_ho\u1eb7c_c\u00e1c_nh\u00f3m_ph\u1ee5_c\u1ee7a_n\u00f3
+
+Incremental=T\u0103ng_d\u1ea7n
+
+Incremental_search=T\u00ecm_t\u0103ng_d\u1ea7n
+
+Incremental_search_failed._Repeat_to_search_from_top.=Ph\u00e9p_t\u00ecm_t\u0103ng_d\u1ea7n_th\u1ea5t_b\u1ea1i._L\u1eb7p_l\u1ea1i_\u0111\u1ec3_t\u00ecm_ki\u1ebfm_t\u1eeb_\u0111\u1ea7u.
+
+Independent_group\:_When_selected,_view_only_this_group's_entries=Nh\u00f3m_\u0111\u1ed9c_l\u1eadp\:_Khi_\u0111\u01b0\u1ee3c_ch\u1ecdn,_ch\u1ec9_xem_c\u00e1c_m\u1ee5c_c\u1ee7a_nh\u00f3m_n\u00e0y
+
+Initially_show_groups_tree_expanded=Ban_\u0111\u1ea7u_hi\u1ec3n_th\u1ecb_c\u00e2y_s\u01a1_\u0111\u1ed3_nh\u00f3m_d\u1ea1ng_m\u1edf_r\u1ed9ng
+
+Input=C\u00e1c_t\u00f9y_ch\u1ecdn_l\u00e0m_vi\u1ec7c
+
+Input_error=L\u1ed7i_\u0111\u1ea7u_v\u00e0o
+
+Insert=Ch\u00e8n
+
+Insert_rows=Ch\u00e8n_h\u00e0ng
+
+Insert_selected_citations_into_LyX/Kile=Ch\u00e8n_c\u00e1c_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_LyX/Kile
+
+Insert_selected_citations_into_WinEdt=Ch\u00e8n_c\u00e1c_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_WinEdt
+
+insert_string_=ch\u00e8n_chu\u1ed7i_
+
+Insert_URL=Ch\u00e8n_URL
+
+integrity=t\u00ednh_to\u00e0n_v\u1eb9n
+
+#Integritycheckisaprocessthatchecksforindicationsofwronglyfilledoutbibtexfields."Scan"isthebuttonthatstartsthecheck.
+Integrity_check=ki\u1ec3m_tra_t\u00ednh_to\u00e0n_v\u1eb9n
+
+Intersection=Giao_nhau
+
+Invalid_BibTeX_key=Kh\u00f3a_BibTeX_kh\u00f4ng_h\u1ee3p_l\u1ec7
+
+Invalid_date_format=\u0110\u1ecbnh_d\u1ea1ng_ng\u00e0y_kh\u00f4ng_h\u1ee3p_l\u1ec7
+
+Invalid_URL=URL_kh\u00f4ng_h\u1ee3p_l\u1ec7
+
+Inverted=\u0110\u1ea3o_ng\u01b0\u1ee3c
+
+is_a_standard_type.=l\u00e0_m\u1ed9t_ki\u1ec3u_chu\u1ea9n.
+
+ISO_abbreviation=Vi\u1ebft_t\u1eaft_ki\u1ec3u_ISO
+
+Item_list_for_field=Danh_s\u00e1ch_h\u1ea1ng_m\u1ee5c_d\u00f9ng_cho_tr\u01b0\u1eddng
+jabref=jabref
+
+JabRef_help=Tr\u1ee3_gi\u00fap_JabRef
+
+JabRef_preferences=C\u00e1c_t\u00f9y_th\u00edch_JabRef
+
+Journal_abbreviations=C\u00e1c_vi\u1ebft_t\u1eaft_t\u00ean_t\u1ea1p_ch\u00ed
+
+Journal_list_preview=Xem_tr\u01b0\u1edbc_danh_s\u00e1ch_t\u1ea1p_ch\u00ed
+
+Journal_name=T\u00ean_t\u1ea1p_ch\u00ed
+
+Keep=Gi\u1eef
+
+Keep_both=Gi\u1eef_c\u1ea3
+
+Keep_lower=Gi\u1eef_m\u1ee5c_d\u01b0\u1edbi
+
+Keep_upper=Gi\u1eef_m\u1ee5c_tr\u00ean
+
+Key_bindings=C\u00e1c_t\u1ed5_h\u1ee3p_ph\u00edm
+
+Key_bindings_changed=C\u00e1c_t\u1ed5_h\u1ee3p_ph\u00edm_thay_\u0111\u1ed5i
+
+Key_generator_settings=C\u00e1c_thi\u1ebft_l\u1eadp_tr\u00ecnh_t\u1ea1o_kh\u00f3a
+
+Key_pattern=Ki\u1ec3u_m\u1eabu_kh\u00f3a
+
+keys_in_database=c\u00e1c_kh\u00f3a_trong_CSDL
+
+#nottranslated.Toviewit,usemenu"Tools|NewBibTeXfilefromAUxfile",andlaunchtheactiononanon-existantauxfile.
+Keyword=T\u1eeb_kh\u00f3a
+
+Label=Nh\u00e3n
+
+Language=Ng\u00f4n_ng\u1eef
+
+Last_modified=Thay_\u0111\u1ed5i_l\u1ea7n_sau_c\u00f9ng
+
+LaTeX_AUX_file=T\u1eadp_tin_LaTeX_AUX
+Leave_file_in_its_current_directory.=Gi\u1eef_t\u1eadp_tin_trong_th\u01b0_m\u1ee5c_hi\u1ec7n_t\u1ea1i_c\u1ee7a_n\u00f3.
+Leave_files_in_their_current_directory.=Gi\u1eef_c\u00e1c_t\u1eadp_tin_trong_th\u01b0_m\u1ee5c_hi\u1ec7n_t\u1ea1i_c\u1ee7a_ch\u00fang.
+
+Left=Tr\u00e1i
+
+License=Gi\u1ea5y_ph\u00e9p
+
+Limit_to_fields=Gi\u1edbi_h\u1ea1n_theo_c\u00e1c_tr\u01b0\u1eddng
+
+Limit_to_selected_entries=Gi\u1edbi_h\u1ea1n_theo_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn
+
+Link=Li\u00ean_k\u1ebft
+Link_local_file=Li\u00ean_k\u1ebft_t\u1eadp_tin_c\u1ee5c_b\u1ed9
+Link_to_file_%0=Li\u00ean_k\u1ebft_\u0111\u1ebfn_t\u1eadp_tin_%0
+
+Listen_for_remote_operation_on_port=L\u1eafng_nghe_l\u1ec7nh_ch\u1ea1y_t\u1eeb_xa_t\u1ea1i_c\u1ed5ng
+Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=N\u1ea1p_v\u00e0_l\u01b0u_c\u00e1c_t\u00f9y_th\u00edch_t\u1eeb/\u0111\u1ebfn_t\u1eadp_tin_jabref.xml_khi_kh\u1edfi_\u0111\u1ed9ng_(ch\u1ebf_\u0111\u1ed9_th\u1ebb_nh\u1edb)
+
+Load_session=N\u1ea1p_phi\u00ean_l\u00e0m_vi\u1ec7c
+
+Loading_session...=\u0110ang_n\u1ea1p_phi\u00ean_l\u00e0m_vi\u1ec7c...
+localhost=localhost
+
+Look_and_feel=H\u00ecnh_th\u1ee9c
+Looking_for_pdf...=\u0110ang_t\u00ecm_pdf...
+lower=c\u1eadn_d\u01b0\u1edbi
+Main_file_directory=Th\u01b0_m\u1ee5c_t\u1eadp_tin_ch\u00ednh
+
+Main_layout_file=T\u1eadp_tin_tr\u00ecnh_b\u00e0y_ch\u00ednh
+
+Main_PDF_directory=Th\u01b0_m\u1ee5c_PDF_ch\u00ednh
+
+Main_PS_directory=Th\u01b0_m\u1ee5c_PS_ch\u00ednh
+
+Manage=Qu\u1ea3n_l\u00fd
+
+Manage_custom_exports=Qu\u1ea3n_l\u00fd_c\u00e1c_ph\u00e9p_xu\u1ea5t_t\u00f9y_ch\u1ecdn
+
+Manage_custom_imports=Qu\u1ea3n_l\u00fd_c\u00e1c_ph\u00e9p_nh\u1eadp_t\u00f9y_ch\u1ecdn
+Manage_external_file_types=Qu\u1ea3n_l\u00fd_c\u00e1c_ki\u1ec3u_t\u1eadp_tin_ngo\u00e0i
+
+Manage_journal_abbreviations=Qu\u1ea3n_l\u00fd_c\u00e1c_vi\u1ebft_t\u1eaft_t\u00ean_t\u1ea1p_ch\u00ed
+
+Mark_entries=\u0110\u00e1nh_d\u1ea5u_c\u00e1c_m\u1ee5c
+
+Mark_entry=\u0110\u00e1nh_d\u1ea5u_m\u1ee5c
+
+Mark_new_entries_with_addition_date=\u0110\u00e1nh_d\u1ea5u_c\u00e1c_m\u1ee5c_m\u1edbi_v\u1edbi_ng\u00e0y_\u0111\u01b0\u1ee3c_th\u00eam_v\u00e0o
+
+Mark_new_entries_with_owner_name=\u0110\u00e1nh_d\u1ea5u_c\u00e1c_m\u1ee5c_m\u1edbi_c\u00f9ng_v\u1edbi_t\u00ean_ng\u01b0\u1eddi_s\u1edf_h\u1eefu
+
+Marked_selected=Ph\u1ea7n_\u0111\u00e1nh_d\u1ea5u_\u0111\u01b0\u1ee3c_ch\u1ecdn
+Memory_Stick_Mode=Ch\u1ebf_\u0111\u1ed9_th\u1ebb_nh\u1edb
+
+Menu_and_label_font_size=C\u1ee1_ph\u00f4ng_ch\u1eef_tr\u00ecnh_\u0111\u01a1n_v\u00e0_nh\u00e3n
+
+Merged_external_changes=C\u00e1c_thay_\u0111\u1ed5i_ngo\u00e0i_\u0111\u01b0\u1ee3c_g\u1ed9p_l\u1ea1i
+
+Messages=C\u00e1c_th\u00f4ng_b\u00e1o
+
+Messages_and_Hints=C\u00e1c_th\u00f4ng_b\u00e1o_v\u00e0_g\u1ee3i_\u00fd
+
+Modification_of_field=S\u1ef1_\u0111i\u1ec1u_ch\u1ec9nh_c\u1ee7a_tr\u01b0\u1eddng
+
+Modified_group_"%0".=Nh\u00f3m_"%0"_\u0111\u01b0\u1ee3c_\u0111i\u1ec1u_ch\u1ec9nh.
+
+Modified_groups=C\u00e1c_nh\u00f3m_\u0111\u01b0\u1ee3c_\u0111i\u1ec1u_ch\u1ec9nh
+
+Modified_string=Chu\u1ed7i_\u0111\u01b0\u1ee3c_\u0111i\u1ec1u_ch\u1ec9nh
+
+Modify=\u0110i\u1ec1u_ch\u1ec9nh
+
+modify_group=\u0111i\u1ec1u_ch\u1ec9nh_nh\u00f3m
+
+MODS=MODS
+
+Move=Chuy\u1ec3n
+
+Move_down=Chuy\u1ec3n_xu\u1ed1ng
+
+Move_entries_in_group_selection_to_the_top=Chuy\u1ec3n_c\u00e1c_m\u1ee5c_trong_nh\u00f3m_\u0111\u01b0\u1ee3c_ch\u1ecdn_l\u00ean_tr\u00ean_c\u00f9ng
+Move_external_links_to_'file'_field=Chuy\u1ec3n_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i_v\u00e0o_tr\u01b0\u1eddng_'file'
+Move_files_to_file_directory.=Chuy\u1ec3n_c\u00e1c_t\u1eadp_tin_v\u00e0o_th\u01b0_m\u1ee5c_t\u1eadp_tin
+
+move_group=chuy\u1ec3n_nh\u00f3m
+
+Move_string_down=Chuy\u1ec3n_chu\u1ed7i_xu\u1ed1ng
+
+Move_string_up=Chuy\u1ec3n_chu\u1ed7i_l\u00ean
+
+Move_up=Chuy\u1ec3n_l\u00ean
+
+Moved_group_"%0".=\u0110\u00e3_chuy\u1ec3n_nh\u00f3m_"%0".
+MS_Office_2007=MS_Office_2007
+MySQL=MySQL
+MySQL_database=CSDL_MySQL
+
+Name=T\u00ean
+Name_formatter=Tr\u00ecnh_\u0111\u1ecbnh_d\u1ea1ng_t\u00ean
+
+Natbib_style=Ki\u1ec3u_Natbib
+
+nested_aux_files=c\u00e1c_t\u1eadp_tin_aux_l\u1ed3ng_nhau
+
+New=M\u1edbi
+
+new=m\u1edbi
+
+New_BibTeX_database=CSDL_BibTeX_m\u1edbi
+
+New_BibTeX_entry=M\u1ee5c_BibTeX_m\u1edbi
+
+New_BibTeX_subdatabase=CSDL_con_BibTeX_m\u1edbi
+
+New_content=N\u1ed9i_dung_m\u1edbi
+
+New_database_created.=CSDL_m\u1edbi_\u0111\u01b0\u1ee3c_tao_ra.
+New_field_value=Gi\u00e1_tr\u1ecb_tr\u01b0\u1eddng_m\u1edbi
+
+New_file=T\u1eadp_tin_m\u1edbi
+New_file_link_(INSERT)=Li\u00ean_k\u1ebft_t\u1eadp_tin_m\u1edbi_(INSERT)
+
+New_group=Nh\u00f3m_m\u1edbi
+
+New_string=Chu\u1ed7i_m\u1edbi
+
+Next_entry=M\u1ee5c_ti\u1ebfp
+
+No_%0_found=Kh\u00f4ng_t\u00ecm_th\u1ea5y_%0
+
+No_actual_changes_found.=Kh\u00f4ng_th\u1ea5y_thay_\u0111\u1ed5i_th\u1ef1c_s\u1ef1_n\u00e0o.
+
+no_base-bibtex-file_specified=t\u1eadp_tin_ki\u1ec3u-bibtex_kh\u00f4ng_\u0111\u01b0\u1ee3c_ch\u1ec9_\u0111\u1ecbnh!
+
+no_database_generated=Kh\u00f4ng_c\u00f3_CSDL_n\u00e0o_\u0111\u01b0\u1ee3c_t\u1ea1o_ra
+
+No_duplicates_found=Kh\u00f4ng_t\u00ecm_th\u1ea5y_c\u00e1c_m\u1ee5c_tr\u00f9ng
+
+No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=Kh\u00f4ng_t\u00ecm_th\u1ea5y_m\u1ee5c_n\u00e0o._H\u00e3y_\u0111\u1ea3m_b\u1ea3o_r\u1eb1ng_b\u1ea1n_\u0111ang_d\u00f9ng_b\u1ed9_l\u1ecdc_nh\u1eadp_\u0111\u00fang.
+
+
+No_entries_found_for_the_search_string_'%0'=Kh\u00f4ng_t\u00ecm_th\u1ea5y_m\u1ee5c_n\u00e0o_v\u1edbi_chu\u1ed7i_t\u00ecm_ki\u1ebfm_'%0'
+
+No_entries_imported.=Kh\u00f4ng_m\u1ee5c_n\u00e0o_\u0111\u01b0\u1ee3c_nh\u1eadp.
+
+No_entries_or_multiple_entries_selected.=Kh\u00f4ng_c\u00f3_m\u1ee5c_ho\u1eb7c_c\u00e1c_m\u1ee5c_n\u00e0o_\u0111\u01b0\u1ee3c_nh\u1eadp.
+
+No_entries_selected=Kh\u00f4ng_c\u00f3_m\u1ee5c_n\u00e0o_\u0111\u01b0\u1ee3c_ch\u1ecdn
+No_entries_selected.=Kh\u00f4ng_c\u00f3_m\u1ee5c_n\u00e0o_\u0111\u01b0\u1ee3c_ch\u1ecdn.
+
+No_exceptions_have_ocurred.=Kh\u00f4ng_x\u1ea3y_ra_ngo\u1ea1i_l\u1ec7_n\u00e0o.
+No_files_found.=Kh\u00f4ng_t\u00ecm_th\u1ea5y_t\u1eadp_tin_n\u00e0o.
+
+No_GUI._Only_process_command_line_options.=Kh\u00f4ng_c\u00f3_GD\u0110H._Ch\u1ec9_x\u1eed_l\u00fd_c\u00e1c_t\u00f9y_ch\u1ecdn_d\u00f2ng_l\u1ec7nh.
+
+No_journal_names_could_be_abbreviated.=Kh\u00f4ng_c\u00f3_t\u00ean_t\u1ea1p_ch\u00ed_n\u00e0o_c\u00f3_th\u1ec3_vi\u1ebft_t\u1eaft.
+
+No_journal_names_could_be_unabbreviated.=Kh\u00f4ng_c\u00f3_t\u00ean_t\u1ea1p_ch\u00ed_n\u00e0o_c\u00f3_th\u1ec3_vi\u1ebft_\u0111\u1ea7y_\u0111\u1ee7.
+No_PDF_linked=Kh\u00f4ng_c\u00f3_t\u1eadp_tin_PDF_n\u00e0o_\u0111\u01b0\u1ee3c_li\u00ean_k\u1ebft
+
+No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=Kh\u00f4ng_c\u00f3_t\u1eadp_tin_PDF_ho\u1eb7c_PS_n\u00e0o_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a,_v\u00e0_kh\u00f4ng_t\u00ecm_th\u1ea5y_kh\u00f3a_Bibtex_n\u00e0o_kh\u1edbp
+No_plugins_were_found_in_the_following_folders\:=Kh\u00f4ng_t\u00ecm_th\u1ea5y_ph\u1ea7n_m\u1edf_r\u1ed9ng_n\u00e0o_trong_th\u01b0_m\u1ee5c_sau:
+
+No_references_found=Kh\u00f4ng_t\u00ecm_th\u1ea5y_t\u00e0i_li\u1ec7u_tham_kh\u1ea3o_n\u00e0o
+
+No_saved_session_found.=Kh\u00f4ng_t\u00ecm_th\u1ea5y_phi\u00ean_l\u00e0m_vi\u1ec7c_\u0111\u01b0\u1ee3c_l\u01b0u_n\u00e0o.
+
+No_url_defined=Kh\u00f4ng_c\u00f3_url_n\u00e0o_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a
+No_XMP_metadata_found_in_=Kh\u00f4ng_t\u00ecm_th\u1ea5y_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_n\u00e0o_trong_
+
+not=kh\u00f4ng
+
+not_found=kh\u00f4ng_t\u00ecm_th\u1ea5y
+
+Not_saved_(empty_session)=Kh\u00f4ng_\u0111\u01b0\u1ee3c_l\u01b0u_(phi\u00ean_l\u00e0m_vi\u1ec7c_r\u1ed7ng)
+
+Note_that_the_entry_causing_the_problem_has_been_selected.=L\u01b0u_\u00fd_r\u1eb1ng_m\u1ee5c_g\u00e2y_ra_tr\u1ee5c_tr\u1eb7c_\u0111\u00e3_\u0111\u01b0\u1ee3c_ch\u1ecdn.
+
+Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=L\u01b0u_\u00fd_r\u1eb1ng_b\u1ea1n_ph\u1ea3i_ch\u1ec9_\u0111\u1ecbnh_t\u00ean_l\u1edbp_\u0111\u1ee7_\u0111i\u1ec1u_ki\u1ec7n_d\u00f9ng_cho_di\u1ec7n_m\u1ea1o,
+
+Nothing_to_redo=Kh\u00f4ng_c\u00f3_l\u1ec7nh_n\u00e0o_\u0111\u1ec3_l\u1eb7p_l\u1ea1i
+
+Nothing_to_undo=Kh\u00f4ng_c\u00f3_l\u1ec7nh_n\u00e0o_\u0111\u1ec3_quay_ng\u01b0\u1ee3c_l\u1ea1i
+
+#Thenextisusedlikein"Referencesfound:1Numberofreferencestofetch?"
+Number_of_references_to_fetch?=S\u1ed1_l\u01b0\u1ee3ng_t\u00e0i_li\u1ec7u_tham_kh\u1ea3o_c\u1ea7n_l\u1ea5y_v\u1ec1?
+
+occurences=c\u00e1c_l\u1ea7n_xu\u1ea5t_hi\u1ec7n
+
+OK=\u0110\u1ed3ng_\u00fd
+
+Ok=\u0110\u1ed3ng_\u00fd
+One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=M\u1ed9t_ho\u1eb7c_nhi\u1ec1u_li\u00ean_k\u1ebft_thu\u1ed9c_ki\u1ec3u_'%0',_t\u1ee9c_l\u00e0_lo\u1ea1i_kh\u00f4ng_x\u00e1c_\u0111\u1ecbnh._B\u1ea1n_mu\u1ed1n_l\u00e0m_g\u00ec?
+
+One_or_more_keys_will_be_overwritten._Continue?=M\u1ed9t_ho\u1eb7c_nhi\u1ec1u_kh\u00f3a_s\u1ebd_b\u1ecb_ghi_\u0111\u00e8._C\u00f3_ti\u1ebfp_t\u1ee5c_kh\u00f4ng?
+Only_one_item_is_supported=Ch\u1ec9_c\u00f3_m\u1ed9t_h\u1ea1ng_m\u1ee5c_\u0111\u01b0\u1ee3c_h\u1ed7_tr\u1ee3
+
+Open=M\u1edf
+
+Open_BibTeX_database=M\u1edf_CSDL_BibTeX
+
+Open_database=M\u1edf_CSDL
+
+Open_editor_when_a_new_entry_is_created=M\u1edf_tr\u00ecnh_bi\u00ean_t\u1eadp_khi_m\u1ed9t_m\u1ee5c_m\u1edbi_\u0111\u01b0\u1ee3c_tao
+
+Open_file=M\u1edf_t\u1eadp_tin
+
+Open_last_edited_databases_at_startup=M\u1edf_CSDL_ch\u1ec9nh_s\u1eeda_l\u1ea7n_cu\u1ed1i_khi_kh\u1edfi_\u0111\u1ed9ng
+
+Open_PDF_or_PS=M\u1edf_PDF_ho\u1eb7c_PS
+
+Open_right-click_menu_with_Ctrl+left_button=M\u1edf_tr\u00ecnh_\u0111\u01a1n_nh\u1eafp_chu\u1ed9t_ph\u1ea3i_b\u1eb1ng_t\u1ed5_h\u1ee3p_ph\u00edm_Ctrl+left
+
+Open_URL_or_DOI=M\u1edf_URL_ho\u1eb7c_DOI
+OpenDocument_Spreadsheet=T\u00e0i.li\u1ec7u.v\u0103n.b\u1ea3n.m\u1edf_B\u1ea3ng.t\u00ednh
+
+Opened_database=CSDL_\u0111\u01b0\u1ee3c_m\u1edf
+
+Opening=\u0110ang_m\u1ecf
+
+Opening_preferences...=\u0110ang_m\u1edf_c\u00e1c_t\u00f9y_th\u00edch...
+
+OpenOffice_Calc=OpenOffice_Calc
+OpenOffice_CSV=OpenOffice_CSV
+Operation_canceled.\n=L\u1ec7nh_b\u1ecb_h\u1ee7y.\n
+Operation_not_supported=L\u1ec7nh_kh\u00f4ng_\u0111\u01b0\u1ee3c_h\u1ed7_tr\u1ee3
+
+Optional_fields=C\u00e1c_tr\u01b0\u1eddng_t\u00f9y_ch\u1ecdn
+
+Options=T\u00f9y_ch\u1ecdn
+
+or=ho\u1eb7c
+
+out_of=ngo\u00e0i
+Output=\u0110\u1ea7u_ra
+
+Output_or_export_file=\u0110\u1ea7u_ra_ho\u1eb7c_t\u1eadp_tin_xu\u1ea5t
+
+Override=Ghi_\u0111\u00e8
+
+Override_default_file_directories=Ghi_\u0111\u00e8_c\u00e1c_th\u01b0_m\u1ee5c_t\u1eadp_tin_m\u1eb7c_\u0111\u1ecbnh
+
+Override_default_font_settings=Ghi_\u0111\u00e8_c\u00e1c_thi\u1ebft_l\u1eadp_ph\u00f4ng_ch\u1eef_m\u1eb7c_\u0111\u1ecbnh
+
+override_the_bibtex_key_by_the_selected_text=ghi_\u0111\u00e8_kh\u00f3a_bibtex_b\u1eb1ng_ch\u1eef_\u0111\u01b0\u1ee3c_ch\u1ecdn
+
+
+Overwrite=Ghi_\u0111\u00e8
+Overwrite_existing_field_values=Ghi_\u0111\u00e8_c\u00e1c_gi\u00e1_tr\u1ecb_tr\u01b0\u1eddng_hi\u1ec7n_c\u00f3
+
+Overwrite_keys=Ghi_\u0111\u00e8_c\u00e1c_kh\u00f3a
+
+pairs_processed=c\u00e1c_c\u1eb7p_\u0111\u01b0\u1ee3c_x\u1eed_l\u00fd
+Password_\:=M\u1eadt_m\u00e3:
+
+Paste=D\u00e1n
+
+paste_entries=d\u00e1n_c\u00e1c_m\u1ee5c
+
+paste_entry=d\u00e1n_m\u1ee5c
+Paste_from_clipboard=D\u00e1n_t\u1eeb_b\u1ed9_nh\u1edb_t\u1ea1m
+
+Pasted=\u0110\u01b0\u1ee3c_d\u00e1n
+
+Path_to_%0_not_defined=\u0110\u01b0\u1eddng_d\u1eabn_\u0111\u1ebfn_%0_kh\u00f4ng_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a
+
+Path_to_LatexEditor_(LEd.exe)=\u0110\u01b0\u1eddng_d\u1eabn_\u0111\u1ebfn_tr\u00ecnh_bi\u00ean_t\u1eadp_Latex_(LEd.exe)
+
+Path_to_LyX_pipe=\u0110\u01b0\u1eddng_d\u1eabn_\u0111\u1ebfn_\u1ed1ng_d\u1eabn_LyX
+
+Path_to_Vim=\u0110\u01b0\u1eddng_d\u1eabn_\u0111\u1ebfn_Vim
+
+Path_to_WinEdt.exe=\u0110\u01b0\u1eddng_d\u1eabn_\u0111\u1ebfn_WinEdt.exe
+
+PDF_directory=Th\u01b0_m\u1ee5c_PDF
+PDF_does_not_exist=PDF_kh\u00f4ng_t\u1ed3n_t\u1ea1i
+
+Personal_journal_list=Danh_s\u00e1ch_t\u1ea1p_ch\u00ed_ri\u00eang
+
+Plain_text_import=Nh\u1eadp_v\u0103n_b\u1ea3n_tr\u01a1n
+
+Please_check_your_network_connection_to_this_machine.=Vui_l\u00f2ng_ki\u1ec3m_tra_k\u1ebft_n\u1ed1i_m\u1ea1ng_\u0111\u1ebfn_m\u00e1y_n\u00e0y.
+
+Please_enter_a_name_for_the_group.=Vui_l\u00f2ng_nh\u1eadp_t\u00ean_cho_nh\u00f3m.
+
+Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=Vui_l\u00f2ng_nh\u1eadp_m\u1ed9t_thu\u1eadt_ng\u1eef_t\u00ecm_ki\u1ebfm._V\u00ed_d\u1ee5,_\u0111\u1ec3_t\u00ecm_t\u1eeb_<b>Smith</b>_trong_t\u1ea5t_c\u1ea3_c\u00e1c_tr\u01b0\u1eddng,_nh\u1eadp%c<p><tt>smith</tt><p>._\u0110\u1ec3_ [...]
+
+Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=Vui_l\u00f2ng_nh\u1eadp_tr\u01b0\u1eddng_c\u1ea7n_t\u00ecm_(v\u00ed_d\u1ee5:_<b>t\u1eeb_kho\u00e1</b>)_v\u00e0_t\u1eeb_kh\u00f3a_c\u1ea7n_t\u00ecm_ki\u1ebfm_trong_tr\u01b0\u1eddng_\u0111\u00f3_(v\u00ed_d\u1ee5:_<b>electrical</b>).
+
+Please_enter_the_string's_label=Vui_l\u00f2ng_nh\u1eadp_nh\u00e3n_c\u1ee7a_chu\u1ed7i
+
+Please_select_an_importer=Vui_l\u00f2ng_ch\u1ecdn_m\u1ed9t_tr\u00ecnh_nh\u1eadp
+
+Please_select_an_importer.=Vui_l\u00f2ng_ch\u1ecdn_m\u1ed9t_tr\u00ecnh_nh\u1eadp.
+
+Please_select_exactly_one_group_to_move.=Vui_l\u00f2ng_ch\u1ecdn_ch\u00ednh_x\u00e1c_m\u1ed9t_nh\u00f3m_c\u1ea7n_di_chuy\u1ec3n
+Please_specify_the_=Vui_l\u00f2ng_ch\u1ec9_\u0111\u1ecbnh_
+
+Possible_duplicate_entries=C\u00e1c_m\u1ee5c_c\u00f3_th\u1ec3_b\u1ecb_tr\u00f9ng
+
+Possible_duplicate_of_existing_entry._Click_to_resolve.=C\u00f3_th\u1ec3_m\u1ee5c_hi\u1ec7n_c\u00f3_b\u1ecb_tr\u00f9ng._Nh\u1eafp_chu\u1ed9t_\u0111\u1ec3_gi\u1ea3i.
+
+Preamble=Ph\u1ea7n_m\u1edf_\u0111\u1ea7u
+
+Preferences=C\u00e1c_t\u00f9y_th\u00edch
+
+Preferences_recorded.=C\u00e1c_t\u00f9y_th\u00edch_\u0111\u01b0\u1ee3c_ghi_l\u1ea1i.
+
+Preview=Xem_tr\u01b0\u1edbc
+
+Previous_entry=M\u1ee5c_tr\u01b0\u1edbc_\u0111\u00f3
+
+Primary_sort_criterion=Ti\u00eau_chu\u1ea9n_x\u1ebfp_th\u1ee9_t\u1ef1_ch\u00ednh
+Print_Preview=Xem_tr\u01b0\u1edbc_khi_in
+Printing_Entry_Preview=Xem_tr\u01b0\u1edbc_ph\u1ea7n_in_m\u1ed9t_m\u1ee5c
+
+Problem_with_parsing_entry=Tr\u1ee5c_tr\u1eb7c_khi_ph\u00e2n_t\u00e1ch_m\u1ee5c
+Processing_=\u0110ang_x\u1eed_l\u00fd_
+Program_output=\u0110\u1ea7u_ra_c\u1ee7a_ch\u01b0\u01a1ng_tr\u00ecnh
+
+PS_directory=Th\u01b0_m\u1ee5c_PS
+Push_entries_to_external_application_(%0)=\u0110\u01b0a_c\u00e1c_m\u1ee5c_ra_\u1ee9ng_d\u1ee5ng_ngo\u00e0i_(%0)
+
+Push_selection_to_Emacs=\u0110\u01b0a_c\u00e1c_m\u1ee5c_ra_Emacs
+
+Push_selection_to_LyX/Kile=\u0110\u01b0a_c\u00e1c_m\u1ee5c_ra_LyX/Kile
+Push_selection_to_Vim=\u0110\u01b0a_ra_m\u1ee5c_ra_Vim
+
+Push_selection_to_WinEdt=\u0110\u01b0a_c\u00e1c_m\u1ee5c_ra_WinEdt
+
+Push_to_LatexEditor=\u0110\u01b0a_c\u00e1c_m\u1ee5c_ra_tr\u00ecnh_bi\u00ean_t\u1eadp_Latex
+Pushed_citations_to_%0=C\u00e1c_tr\u00edch_d\u1eabn_\u0111\u00e3_\u0111\u01b0\u1ee3c_\u0111\u01b0a_qua_%0
+
+Pushed_citations_to_Emacs=C\u00e1c_tr\u00edch_d\u1eabn_\u0111\u00e3_\u0111\u01b0\u1ee3c_\u0111\u01b0a_qua_Emacs
+Pushed_citations_to_Vim=C\u00e1c_tr\u00edch_d\u1eabn_\u0111\u00e3_\u0111\u01b0\u1ee3c_\u0111\u01b0a_qua_Vim
+
+Pushed_citations_to_WinEdt=C\u00e1c_tr\u00edch_d\u1eabn_\u0111\u00e3_\u0111\u01b0\u1ee3c_\u0111\u01b0a_qua_WinEdt
+
+Pushed_the_citations_for_the_following_rows_to=\u0110\u00e3_\u0111\u01b0a_c\u00e1c_tr\u00edch_d\u1eabn_c\u1ee7a_nh\u1eefng_h\u00e0ng_sau_qua
+
+Quit_JabRef=Tho\u00e1t_JabRef
+
+Quit_synchronization=Th\u00f4i_\u0111\u1ed3ng_b\u1ed9_h\u00f3a
+
+Raw_source=Ngu\u1ed3n_th\u00f4
+
+Really_delete_the_selected=Th\u1ef1c_s\u1ef1_x\u00f3a_ph\u1ea7n_ch\u1ecdn
+
+Rearrange_tabs_alphabetically_by_title=X\u1ebfp_l\u1ea1i_c\u00e1c_th\u1ebb_theo_th\u1ee9_t\u1ef1_ABC_theo_ti\u00eau_\u0111\u1ec1
+
+Redo=L\u1eb7p_l\u1ea1i_l\u1ec7nh
+
+Reference_database=CSDL_tham_kh\u1ea3o
+
+#Thenexttwolinesareusedlikein"Referencesfound:1Numberofreferencestofetch?"
+References_found=C\u00e1c_t\u00e0i_li\u1ec7u_tham_kh\u1ea3o_\u0111\u01b0\u1ee3c_t\u00ecm_th\u1ea5y
+
+Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=Tinh_ch\u1ec9nh_nh\u00f3m_l\u1edbn:_Khi_\u0111\u01b0\u1ee3c_ch\u1ecdn,_xem_c\u00e1c_m\u1ee5c_ch\u1ee9a_c\u00e1c_trong_nh\u00f3m_n\u00e0y_v\u00e0_nh\u00f3m_l\u1edbn_c\u1ee7a_n\u00f3
+
+Refresh_view=L\u00e0m_t\u01b0\u01a1i_l\u1ea1i_ph\u1ea7n_xem
+
+Regular_Expression=Bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc
+
+Remember_these_entry_types?=Nh\u1edb_c\u00e1c_ki\u1ec3u_m\u1ee5c_n\u00e0y?
+
+Remote_operation=L\u1ec7nh_t\u1eeb_xa
+
+Remote_server_port=C\u1ed5ng_m\u00e1y_ch\u1ee7_t\u1eeb_xa
+
+Remove=Lo\u1ea1i_b\u1ecf
+
+Remove_all?=Lo\u1ea1i_b\u1ecf_t\u1ea5t_c\u1ea3?
+
+Remove_all_subgroups=Lo\u1ea1i_b\u1ecf_t\u1ea5t_c\u1ea3_c\u00e1c_nh\u00f3m_con
+
+Remove_all_subgroups_of_"%0"?=Lo\u1ea1i_b\u1ecf_t\u1ea5t_c\u1ea3_c\u00e1c_nh\u00f3m_con_c\u1ee7a_"%0"?
+
+Remove_double_braces_around_BibTeX_fields_when_loading.=Lo\u1ea1i_b\u1ecf_c\u00e1c_d\u1ea5u_ngo\u1eb7c_m\u00f3c_\u0111\u00f4i_quanh_c\u00e1c_tr\u01b0\u1eddng_BibTeX_khi_n\u1ea1p.
+
+Remove_duplicates=Lo\u1ea1i_b\u1ecf_c\u00e1c_m\u1ee5c_b\u1ecb_tr\u00f9ng
+
+Remove_entry_from_import=Lo\u1ea1i_b\u1ecf_m\u1ee5c_kh\u1ecfi_l\u1ec7nh_nh\u1eadp
+
+Remove_entry_selection_from_this_group=Lo\u1ea1i_b\u1ecf_ph\u00e9p_ch\u1ecdn_m\u1ee5c_kh\u1ecfi_nh\u00f3m_n\u00e0y
+
+Remove_entry_type=Lo\u1ea1i_b\u1ecf_ki\u1ec3u_m\u1ee5c
+Remove_file_link_(DELETE)=Lo\u1ea1i_b\u1ecf_li\u00ean_k\u1ebft_t\u1eadp_tin_(X\u00d3A)
+
+remove_from_group=lo\u1ea1i_b\u1ecf_kh\u1ecfi_nh\u00f3m
+
+Remove_from_group=Lo\u1ea1i_b\u1ecf_kh\u1ecfi_nh\u00f3m
+
+Remove_group=Lo\u1ea1i_b\u1ecf_nh\u00f3m
+
+Remove_group,_keep_subgroups=Lo\u1ea1i_b\u1ecf_nh\u00f3m,_gi\u1eef_l\u1ea1i_c\u00e1c_nh\u00f3m_con
+
+Remove_group_"%0"?=Lo\u1ea1i_b\u1ecf_nh\u00f3m_"%0"?
+
+Remove_group_"%0"_and_its_subgroups?=Lo\u1ea1i_b\u1ecf_nh\u00f3m_"%0"_v\u00e0_c\u00e1c_nh\u00f3m_con_c\u1ee7a_n\u00f3?
+
+remove_group_(keep_subgroups)=lo\u1ea1i_b\u1ecf_nh\u00f3m_(gi\u1eef_c\u00e1c_nh\u00f3m_con)
+
+remove_group_and_subgroups=lo\u1ea1i_b\u1ecf_nh\u00f3m_v\u00e0_c\u00e1c_nh\u00f3m_con
+
+Remove_group_and_subgroups=Lo\u1ea1i_b\u1ecf_nh\u00f3m_v\u00e0_c\u00e1c_nh\u00f3m_con
+
+Remove_link=Lo\u1ea1i_b\u1ecf_li\u00ean_k\u1ebft
+
+Remove_old_entry=Lo\u1ea1i_b\u1ecf_m\u1ee5c_c\u0169
+
+Remove_selected_strings=Lo\u1ea1i_b\u1ecf_c\u00e1c_chu\u1ed7i_\u0111\u01b0\u1ee3c_ch\u1ecdn
+
+remove_string_=lo\u1ea1i_b\u1ecf_chu\u1ed7i_
+
+Removed_group_"%0".=\u0110\u00e3_lo\u1ea1i_b\u1ecf_nh\u00f3m_"%0".
+
+Removed_group_"%0"_and_its_subgroups.=\u0110\u00e3_lo\u1ea1i_b\u1ecf_nh\u00f3m_"%0"_v\u00e0_c\u00e1c_nh\u00f3m_con_c\u1ee7a_n\u00f3.
+
+Removed_string=\u0110\u00e3_lo\u1ea1i_b\u1ecf_chu\u1ed7i
+
+Renamed_string=Chu\u1ed7i_\u0111\u01b0\u1ee3c_\u0111\u1eb7t_t\u00ean_l\u1ea1i
+
+Replace=Thay_th\u1ebf
+
+Replace_(regular_expression)=Thay_th\u1ebf_(bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc)
+
+Replace_string=Thay_th\u1ebf_chu\u1ed7i
+
+Replace_with=Thay_th\u1ebf_b\u1edfi
+
+Replaced=B\u1ecb_thay_th\u1ebf
+
+Required_fields=C\u00e1c_tr\u01b0\u1eddng_c\u1ea7n_c\u00f3
+
+Reset_all=Thi\u1ebft_l\u1eadp_l\u1ea1i_t\u1ea5t_c\u1ea3
+Reset_file_type_definitons=Thi\u1ebft_l\u1eadp_l\u1ea1i_c\u00e1c_\u0111\u1ecbnh_ngh\u0129a_ki\u1ec3u_t\u1eadp_tin
+
+Resolve_strings_for_all_fields_except=Gi\u1ea3i_c\u00e1c_chu\u1ed7i_cho_t\u1ea5t_c\u1ea3_c\u00e1c_tr\u01b0\u1eddng_ngo\u1ea1i_tr\u1eeb
+Resolve_strings_for_standard_BibTeX_fields_only=Ch\u1ec9_gi\u1ea3i_c\u00e1c_chu\u1ed7i_cho_c\u00e1c_tr\u01b0\u1eddng_BibTeX
+
+resolved=\u0111\u01b0\u1ee3c_gi\u1ea3i
+
+Results=C\u00e1c_k\u1ebft_qu\u1ea3
+
+Revert_to_original_source=Tr\u1ea3_ng\u01b0\u1ee3c_l\u1ea1i_ngu\u1ed3n_ban_\u0111\u1ea7u
+
+Review=Xem_x\u00e9t_l\u1ea1i
+
+Review_changes=Xem_x\u00e9t_l\u1ea1i_c\u00e1c_thay_\u0111\u1ed5i
+
+Right=Ph\u1ea3i
+root=root
+
+Save=L\u01b0u
+Save_all_finished.=L\u01b0u_t\u1ea5t_c\u1ea3_\u0111\u00e3_ho\u00e0n_t\u1ea5t.
+
+Save_all_open_databases=L\u01b0u_t\u1ea5t_c\u1ea3_c\u00e1c_CSDL_\u0111ang_m\u1edf
+
+Save_before_closing=L\u01b0u_tr\u01b0\u1edbc_khi_\u0111\u00f3ng
+
+Save_database=L\u01b0u_CSDL
+Save_database_as_...=L\u01b0u_CSDL_th\u00e0nh_...
+
+Save_entries_in_their_original_order=L\u01b0u_c\u00e1c_m\u1ee5c_theo_th\u1ee9_t\u1ef1_g\u1ed1c_c\u1ee7a_ch\u00fang
+
+Save_failed=Vi\u1ec7c_l\u01b0u_th\u1ea5t_b\u1ea1i
+
+Save_failed_during_backup_creation=Vi\u1ec7c_l\u01b0u_th\u1ea5t_b\u1ea1i_khi_\u0111ang_t\u1ea1o_b\u1ea3n_sao_l\u01b0u
+
+Save_failed_while_committing_changes=Vi\u1ec7c_l\u01b0u_th\u1ea5t_b\u1ea1i_khi_\u0111ang_th\u1ef1c_hi\u1ec7n_nh\u1eefng_thay_\u0111\u1ed5i
+
+Save_ordered_by_author/editor/year=L\u01b0u_x\u1ebfp_th\u1ee9_t\u1ef1_theo_t\u00e1c_gi\u1ea3/bi\u00ean_t\u1eadp/n\u0103m
+Save_selected_as_...=L\u01b0u_ph\u1ea7n_ch\u1ecdn_th\u00e0nh_...
+
+Saved_database=\u0110\u00e3_l\u01b0u_CSDL
+
+Saved_selected_to=\u0110\u00e3_l\u01b0u_ph\u1ea7n_ch\u1ecdn_v\u00e0o
+
+Saved_session=\u0110\u00e3_l\u01b0u_phi\u00ean_l\u00e0m_vi\u1ec7c
+
+Saving=\u0110ang_l\u01b0u
+Saving_all_databases...=\u0110ang_l\u01b0u_t\u1ea5t_c\u1ea3_CSDL...
+
+Saving_database=\u0110ang_l\u01b0u_CSDL
+
+Scan=Qu\u00e9t
+
+Search=T\u00ecm
+
+Search_All_Fields=T\u00ecm_t\u1ea5t_c\u1ea3_c\u00e1c_tr\u01b0\u1eddng
+
+Search_all_fields=T\u00ecm_t\u1ea5t_c\u1ea3_c\u00e1c_tr\u01b0\u1eddng
+
+Search_error=L\u1ed7i_t\u00ecm_ki\u1ebfm
+
+Search_expression=Bi\u1ec3u_th\u1ee9c_t\u00ecm_ki\u1ebfm
+
+Search_for=T\u00ecm
+
+Search_general_fields=T\u00ecm_c\u00e1c_tr\u01b0\u1eddng_t\u1ed5ng_qu\u00e1t
+
+Search_IEEEXplore=T\u00ecm_tr\u00ean_IEEEXplore
+Search_IEEExplore=T\u00ecm_tr\u00ean_IEEExplore
+
+Search_optional_fields=T\u00ecm_c\u00e1c_tr\u01b0\u1eddng_t\u00f9y_ch\u1ecdn
+
+Search_required_fields=T\u00ecm_c\u00e1c_tr\u01b0\u1eddng_b\u1eaft_bu\u1ed9c
+
+Search_Specified_Field(s)=T\u00ecm_c\u00e1c_tr\u01b0\u1eddng_\u0111\u01b0\u1ee3c_ch\u1ec9_\u0111\u1ecbnh
+
+Searched_database._Global_number_of_hits=\u0110\u00e3_t\u00ecm_trong_CSDL._S\u1ed1_l\u1ea7n_g\u1eb7p_to\u00e0n_c\u1ee5c
+
+Searched_database._Number_of_hits=\u0110\u00e3_t\u00ecm_trong_CSDL._S\u1ed1_l\u1ea7n_g\u1eb7p
+
+Searching_for_%0_file=\u0110ang_t\u00ecm_%0_t\u1eadp_tin
+
+Searching_for_duplicates...=\u0110ang_t\u00ecm_c\u00e1c_m\u1ee5c_b\u1ecb_l\u1eb7p...
+
+Searching_for_files=\u0110ang_t\u00ecm_c\u00e1c_t\u1eadp_tin
+
+Secondary_sort_criterion=Ti\u00eau_chu\u1ea9n_ph\u00e2n_lo\u1ea1i_th\u1ee9_c\u1ea5p
+
+Select=Ch\u1ecdn
+
+Select_a_Zip-archive=Ch\u1ecdn_m\u1ed9t_t\u1eadp_tin_Zip
+
+Select_action=Ch\u1ecdn_h\u00e0nh_\u0111\u1ed9ng
+
+Select_all=Ch\u1ecdn_t\u1ea5t_c\u1ea3
+
+Select_Classpath_of_New_Importer=Ch\u1ecdn_\u0111\u01b0\u1eddng_d\u1eabn_l\u1edbp_c\u1ee7a_tr\u00ecnh_nh\u1eadp_m\u1edbi
+
+Select_encoding=Ch\u1ecdn_b\u1ed9_m\u00e3_h\u00f3a
+
+Select_entries_in_group_selection=Ch\u1ecdn_c\u00e1c_m\u1ee5c_trong_ph\u00e9p_ch\u1ecdn_nh\u00f3m
+
+Select_entry_type=Ch\u1ecdn_ki\u1ec3u_m\u1ee5c
+Select_external_application=Ch\u1ecdn_\u1ee9ng_d\u1ee5ng_ngo\u00e0i
+
+Select_file_from_ZIP-archive=Ch\u1ecdn_t\u1eadp_tin_t\u1eeb_t\u1eadp_tin_Zip
+
+Select_format=Ch\u1ecdn_\u0111\u1ecbnh_d\u1ea1ng
+Select_icon=Ch\u1ecdn_bi\u1ec3u_t\u01b0\u1ee3ng
+
+Select_matches=Ch\u1ecdn_c\u00e1c_m\u1ee5c_kh\u1edbp
+
+Select_new_ImportFormat_Subclass=Ch\u1ecdn_L\u1edbp.ph\u1ee5_\u0110\u1ecbnh.d\u1ea1ng.nh\u1eadp_m\u1edbi
+
+Select_the_tree_nodes_to_view_and_accept_or_reject_changes=Ch\u1ecdn_c\u00e1c_n\u1ed1t_tr\u00ean_s\u01a1_\u0111\u1ed3_h\u00ecnh_c\u00e2y_\u0111\u1ec3_xem_v\u00e0_ch\u1ea5p_nh\u1eadn_ho\u1eb7c_t\u1eeb_ch\u1ed1i_thay_\u0111\u1ed5i
+Selected_entries=C\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn
+
+Selector_enabled_fields=C\u00e1c_tr\u01b0\u1eddng_\u0111\u01b0\u1ee3c_k\u00edch_ho\u1ea1t_b\u1edfi_tr\u00ecnh_ch\u1ecdn
+Server_Hostname_\:=T\u00ean_Server-host:
+Server_Type_\:=Ki\u1ec3u_Server:
+Set_field=Thi\u1ebft_l\u1eadp_tr\u01b0\u1eddng
+Set_fields=Thi\u1ebft_l\u1eadp_c\u00e1c_tr\u01b0\u1eddng
+
+Set_general_fields=Thi\u1ebft_l\u1eadp_c\u00e1c_tr\u01b0\u1eddng_t\u1ed5ng_qu\u00e1t
+Set_main_external_file_directory=Thi\u1ebft_l\u1eadp_th\u01b0_m\u1ee5c_t\u1eadp_tin_ngo\u00e0i_ch\u00ednh
+
+Set_table_font=Ch\u1ecdn_b\u1ea3ng_ph\u00f4ng_ch\u1eef
+
+Settings=C\u00e1c_thi\u1ebft_l\u1eadp
+
+Setup_selectors=C\u00e0i_\u0111\u1eb7t_c\u00e1c_tr\u00ecnh_ch\u1ecdn
+
+Short_form=Bi\u1ec3u_m\u1eabu_d\u1ea1ng_ng\u1eafn_g\u1ecdn
+
+Shortcut=Ph\u00edm_t\u1eaft
+
+Show/edit_BibTeX_source=Hi\u1ec3n_th\u1ecb/Ch\u1ec9nh_s\u1eeda_ngu\u1ed3n_BibTeX
+
+Show_'Firstname_Lastname'=Hi\u1ec3n_th\u1ecb_'T\u00ean.g\u1ecdi_H\u1ecd'
+
+Show_'Lastname,_Firstname'=Hi\u1ec3n_th\u1ecb_T\u00ean.g\u1ecdi,_H\u1ecd'
+
+Show_BibTeX_source_by_default=Hi\u1ec3n_th\u1ecb_ngu\u1ed3n_BibTeX_theo_m\u1eb7c_\u0111\u1ecbnh
+
+Show_BibTeX_source_panel=Hi\u1ec3n_th\u1ecb_b\u1ea3ng_\u0111i\u1ec1u_khi\u1ec3n_ngu\u1ed3n_BibTeX
+
+Show_confirmation_dialog_when_deleting_entries=Hi\u1ec3n_th\u1ecb_h\u1ed9p_tho\u1ea1i_x\u00e1c_nh\u1eadn_khi_x\u00f3a_c\u00e1c_m\u1ee5c
+
+Show_description=Hi\u1ec3n_th\u1ecb_m\u00f4_t\u1ea3
+
+Show_dynamic_groups_in_<i>italics</i>=Hi\u1ec3n_th\u1ecb_c\u00e1c_nh\u00f3m_\u0111\u1ed9ng_\u1edf_d\u1ea1ng_<i>ch\u1eef_nghi\u00eang</i>
+
+Show_entries_*not*_in_group_selection=Hi\u1ec3n_th\u1ecb_c\u00e1c_m\u1ee5c_*kh\u00f4ng*_\u1edf_trong_ph\u00e9p_ch\u1ecdn_nh\u00f3m
+
+Show_file_column=Hi\u1ec3n_th\u1ecb_c\u1ed9t_t\u1eadp_tin
+
+Show_icons_for_groups=Hi\u1ec3n_th\u1ecb_c\u00e1c_bi\u1ec3u_t\u01b0\u1ee3ng_c\u1ee7a_nh\u00f3m
+Show_last_names_only=Ch\u1ec9_hi\u1ec3n_th\u1ecb_H\u1ecd
+
+Show_names_unchanged=Hi\u1ec3n_th\u1ecb_c\u00e1c_t\u00ean_kh\u00f4ng_b\u1ecb_thay_\u0111\u1ed5i
+
+Show_one_less_rows=Hi\u1ec3n_th\u1ecb_\u00edt_h\u01a1n_m\u1ed9t_h\u00e0ng
+
+Show_one_more_row=Hi\u1ec3n_th\u1ecb_th\u00eam_m\u1ed9t_h\u00e0ng
+
+Show_optional_fields=Hi\u1ec3n_th\u1ecb_c\u00e1c_tr\u01b0\u1eddng_t\u00f9y_ch\u1ecdn
+
+Show_PDF/PS_column=Hi\u1ec3n_th\u1ecb_c\u1ed9t_PDF/PS
+
+Show_required_fields=Hi\u1ec3n_th\u1ecb_c\u00e1c_tr\u01b0\u1eddng_c\u1ea7n_c\u00f3
+
+Show_URL/DOI_column=Hi\u1ec3n_th\u1ecb_c\u1ed9t_URL/DOI
+
+Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=Hi\u1ec3n_th\u1ecb_m\u1ed9t_h\u1ed9p_tho\u1ea1i_c\u1ea3nh_b\u00e1o_khi_m\u1ed9t_kh\u00f3a_BibTeX_b\u1ecb_tr\u00f9ng_\u0111\u01b0\u1ee3c_nh\u1eadp_v\u00e0o
+
+Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=Hi\u1ec3n_th\u1ecb_m\u1ed9t_h\u1ed9p_tho\u1ea1i_c\u1ea3nh_b\u00e1o_khi_m\u1ed9t_kh\u00f3a_BibTeX_r\u1ed7ng_\u0111\u01b0\u1ee3c_nh\u1eadp_v\u00e0o
+
+Simple_HTML=HTML_d\u1ea1ng_\u0111\u01a1n_gi\u1ea3n
+
+Size=K\u00edch_th\u01b0\u1edbc
+
+Skip=B\u1ecf_qua
+Skipped_-_No_PDF_linked=B\u1ecb_b\u1ecf_qua_-_Kh\u00f4ng_c\u00f3_t\u1eadp_tin_PDF_\u0111\u01b0\u1ee3c_li\u00ean_k\u1ebft
+Skipped_-_PDF_does_not_exist=B\u1ecf_qua_-_t\u1eadp_tin_PDF_kh\u00f4ng_t\u1ed3n_t\u1ea1i
+
+Skipped_entry.=M\u1ee5c_b\u1ecb_b\u1ecf_qua.
+
+Sort_alphabetically=X\u1ebfp_theo_th\u1ee9_t\u1ef1_ABC
+
+Sort_Automatically=X\u1ebfp_th\u1ee9_t\u1ef1_t\u1ef1_\u0111\u1ed9ng
+
+Sort_order=Tr\u1eadt_t\u1ef1_x\u1ebfp_th\u1ee9_t\u1ef1
+
+sort_subgroups=X\u1ebfp_th\u1ee9_t\u1ef1_c\u00e1c_nh\u00f3m_con
+
+Sorted_all_subgroups_recursively.=X\u1ebfp_th\u1ee9_t\u1ef1_t\u1ea5t_c\u1ea3_c\u00e1c_nh\u00f3m_con_theo_c\u00e1ch_\u0111\u1ec7_quy.
+
+Sorted_immediate_subgroups.=C\u00e1c_nh\u00f3m_con_c\u1ea1nh_nhau_\u0111\u01b0\u1ee3c_x\u1ebfp_th\u1ee9_t\u1ef1.
+
+source_edit=ch\u1ec9nh_s\u1eeda_ngu\u1ed3n
+Special_Name_Formatters=C\u00e1c_tr\u00ecnh_\u0111\u1ecbnh_d\u1ea1ng_t\u00ean_\u0111\u1eb7c_bi\u1ec7t
+
+Special_table_columns=C\u00e1c_c\u1ed9t_b\u1ea3ng_\u0111\u1eb7c_bi\u1ec7t
+SQL_connection_established.=K\u1ebft_n\u1ed1i_SQL_\u0111\u01b0\u1ee3c_thi\u1ebft_l\u1eadp
+
+Start_incremental_search=B\u1eaft_\u0111\u1ea7u_t\u00ecm_ki\u1ebfm_t\u0103ng_d\u1ea7n
+
+Start_search=B\u1eaft_\u0111\u1ea7u_t\u00ecm_ki\u1ebfm
+Starting_import=\u0110ang_b\u1eaft_\u0111\u1ea7u_nh\u1eadp
+
+Statically_group_entries_by_manual_assignment=G\u1ed9p_nh\u00f3m_c\u00e1c_m\u1ee5c_theo_c\u00e1ch_t\u0129nh_b\u1eb1ng_ph\u00e9p_g\u00e1n_th\u1ee7_c\u00f4ng
+
+Status=Tr\u1ea1ng_th\u00e1i
+
+Stop=D\u1eebng
+
+Store_journal_abbreviations=L\u01b0u_tr\u1eef_vi\u1ebft_t\u1eaft_c\u00e1c_t\u1ea1p_ch\u00ed
+
+Store_string=L\u01b0u_tr\u1eef_chu\u1ed7i
+
+Store_the_following_fields_with_braces_around_capital_letters=L\u01b0u_tr\u1eef_c\u00e1c_tr\u01b0\u1eddng_sau_v\u1edbi_ngo\u1eb7c_m\u00f3c_quanh_c\u00e1c_ch\u1eef_hoa
+
+Stored_entry=M\u1ee5c_\u0111\u01b0\u1ee3c_l\u01b0u_tr\u1eef
+
+Strings=C\u00e1c_chu\u1ed7i
+
+Strings_for_database=C\u00e1c_chu\u1ed7i_d\u00f9ng_cho_CSDL
+
+Subdatabase_from_aux=CSDL_con_t\u1eeb_aux
+
+Suggest=\u0110\u1ec1_ngh\u1ecb
+
+Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Chuy\u1ec3n_\u0111\u1ed5i_gi\u1eefa_t\u00ean_\u0111\u1ea7y_\u0111\u1ee7_v\u00e0_t\u00ean_vi\u1ebft_t\u1eaft_t\u1ea1p_ch\u00ed_n\u1ebfu_bi\u1ebft_t\u00ean_t\u1ea1p_ch\u00ed_\u0111\u00f3.
+
+Synchronize_%0_links=\u0110\u1ed3ng_b\u1ed9_h\u00f3a_%0_li\u00ean_k\u1ebft
+Synchronize_file_links=\u0110\u1ed3ng_b\u1ed9_h\u00f3a_c\u00e1c_li\u00ean_k\u1ebft_t\u1eadp_tin
+
+Synchronizing_%0_links...=\u0110ang_\u0111\u1ed3ng_b\u1ed9_h\u00f3a_%0_li\u00ean_k\u1ebft...
+
+Table_appearance=Di\u1ec7n_m\u1ea1o_c\u1ee7a_b\u1ea3ng
+
+Table_background_color=M\u00e0u_n\u1ec1n_c\u1ee7a_b\u1ea3ng
+
+Table_grid_color=M\u00e0u_l\u01b0\u1edbi_c\u1ee7a_b\u1ea3ng
+
+Table_text_color=M\u00e0u_ch\u1eef_c\u1ee7a_b\u1ea3ng
+
+Tabname=T\u00ean_b\u1ea3ng
+Target_file_cannot_be_a_directory.=T\u1eadp_tin_\u0111\u00edch_kh\u00f4ng_\u0111\u01b0\u1ee3c_ph\u00e9p_l\u00e0_m\u1ed9t_th\u01b0_m\u1ee5c.
+
+Tertiary_sort_criterion=Ti\u00eau_chu\u1ea9n_ph\u00e2n_lo\u1ea1i_c\u1ea5p_ba
+
+Test=Ki\u1ec3m_tra
+
+Text_Input_Area=V\u00f9ng_nh\u1eadp_ch\u1eef
+
+The_#_character_is_not_allowed_in_BibTeX_fields=K\u00fd_t\u1ef1_#_kh\u00f4ng_\u0111\u01b0\u1ee3c_ph\u00e9p_d\u00f9ng_trong_c\u00e1c_tr\u01b0\u1eddng_BibTeX
+
+The_chosen_date_format_for_new_entries_is_not_valid=\u0110\u1ecbnh_d\u1ea1ng_ng\u00e0y_\u0111\u01b0\u1ee3c_ch\u1ecdn_cho_c\u00e1c_m\u1ee5c_m\u1edbi_kh\u00f4ng_h\u1ee3p_l\u1ec7
+
+The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=M\u00e3_h\u00f3a_\u0111\u00e3_ch\u1ecdn_'%0'_kh\u00f4ng_th\u1ec3_m\u00e3_h\u00f3a_\u0111\u01b0\u1ee3c_c\u00e1c_k\u00fd_t\u1ef1_sau:_
+
+The_CiteSeer_fetch_operation_returned_zero_results.=L\u1ec7nh_l\u1ea5y_v\u1ec1_t\u1eeb_CiteSeerX_tr\u1ea3_v\u1ec1_0_k\u1ebft_qu\u1ea3.
+
+
+The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=Phi\u00ean_b\u1ea3n_hi\u1ec7n_t\u1ea1i_c\u00f3_m\u1ed9t_c\u00e1ch_m\u1edbi_\u0111\u1ec3_qu\u1ea3n_l\u00fd_c\u00e1c_li\u00ean_k\u1ebft_\u0111\u1ebfn_t\u1eadp_tin_ngo\u00e0i.<br>\u0110\u1ec3_s\u1eed_d\u1ee5ng_\u0111\u01b0\u1ee3c_\u0111\u1eb7c_\u0111i\u1ec3m_n\u00e0y,_li\u00ean_k\u1eb [...]
+
+the_field_<b>%0</b>=tr\u01b0\u1eddng_<b>%0</b>
+
+The_file<BR>'%0'<BR>has_been_modified<BR>externally!=T\u1eadp_tin<BR>'%0'<BR>\u0111\u00e3_b\u1ecb_thay_\u0111\u1ed5i<BR>ngo\u00e0i_ch\u01b0\u01a1ng_tr\u00ecnh!
+
+The_group_"%0"_already_contains_the_selection.=Nh\u00f3m_"%0"_\u0111\u00e3_ch\u1ee9a_ph\u00e9p_ch\u1ecdn.
+
+The_label_of_the_string_can_not_be_a_number.=Nh\u00e3n_c\u1ee7a_chu\u1ed7i_kh\u00f4ng_\u0111\u01b0\u1ee3c_l\u00e0_m\u1ed9t_con_s\u1ed1.
+
+The_label_of_the_string_can_not_contain_spaces.=Nh\u00e3n_c\u1ee7a_chu\u1ed7i_kh\u00f4ng_\u0111\u01b0\u1ee3c_ch\u1ee9a_kho\u1ea3ng_tr\u1eafng.
+
+The_label_of_the_string_can_not_contain_the_'#'_character.=Nh\u00e3n_c\u1ee7a_chu\u1ed7i_kh\u00f4ng_\u0111\u01b0\u1ee3c_ch\u1ee9a_k\u00fd_t\u1ef1_'#'.
+
+The_output_option_depends_on_a_valid_import_option.=T\u00f9y_ch\u1ecdn_\u0111\u1ea7u_ra_ph\u1ee5_thu\u1ed9c_v\u00e0o_m\u1ed9t_t\u00f9y_ch\u1ecdn_nh\u1eadp_h\u1ee3p_l\u1ec7.
+The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=T\u1eadp_tin_PDF_ch\u1ee9a_m\u1ed9t_ho\u1eb7c_nhi\u1ec1u_b\u1ea3n_ghi_bibtex.\nB\u1ea1n_c\u00f3_mu\u1ed1n_nh\u1eadp_ch\u00fang_v\u00e0o_th\u00e0nh_c\u00e1c_m\u1ee5c_m\u1edbi_trong_CSDL_hi\u1ec7n_t\u1ea1i?
+
+The_regular_expression_<b>%0</b>_is_invalid%c=Bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%0</b>_kh\u00f4ng_h\u1ee3p_l\u1ec7%c
+
+The_search_is_case_insensitive.=Ph\u00e9p_t\u00ecm_kh\u00f4ng_ph\u00e2n_bi\u1ec7t_ch\u1eef_hoa/th\u01b0\u1eddng
+
+The_search_is_case_sensitive.=Ph\u00e9p_t\u00ecm_c\u00f3_ph\u00e2n_bi\u1ec7t_ch\u1eef_hoa/th\u01b0\u1eddng.
+
+The_string_has_been_removed_locally=Chu\u1ed7i_n\u00e0y_\u0111\u00e3_b\u1ecb_lo\u1ea1i_b\u1ecf_c\u1ee5c_b\u1ed9
+
+There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=C\u00f3_th\u1ec3_c\u00f3_c\u00e1c_m\u1ee5c_b\u1ecb_tr\u00f9ng_(\u0111\u01b0\u1ee3c_\u0111\u00e1nh_d\u1ea5u_b\u1eb1ng_bi\u1ec3u_t\u01b0\u1ee3ng_'D')_ch\u01b0a_\u0111\u01b0\u1ee3c_gi\u1ea3i_quy\u1ebft._C\u00f3_ti\u1ebfp_t\u1ee5c_kh\u00f4ng?
+
+this_button_will_update=n\u00fat_l\u1ec7nh_n\u00e0y_s\u1ebd_c\u1eadp_nh\u1eadt
+This_database_was_written_using_an_older_version_of_JabRef.=CSDL_n\u00e0y_\u0111\u01b0\u1ee3c_ghi_b\u1eb1ng_c\u00e1ch_d\u00f9ng_phi\u00ean_b\u1ea3n_JabRef_c\u0169_h\u01a1n.
+
+This_entry_has_no_BibTeX_key._Generate_key_now?=M\u1ee5c_n\u00e0y_kh\u00f4ng_c\u00f3_kh\u00f3a_BibTeX._T\u1ea1o_kh\u00f3a_b\u00e2y_gi\u1edd?
+
+This_entry_is_incomplete=M\u1ee5c_n\u00e0y_ch\u01b0a_\u0111\u1ea7y_\u0111\u1ee7
+
+This_entry_type_cannot_be_removed.=Kh\u00f4ng_th\u1ec3_lo\u1ea1i_b\u1ecf_ki\u1ec3u_m\u1ee5c_n\u00e0y.
+
+This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Li\u00ean_k\u1ebft_ngo\u00e0i_c\u00f3_ki\u1ec3u_'%0',_thu\u1ed9c_lo\u1ea1i_kh\u00f4ng_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a._B\u1ea1n_mu\u1ed1n_l\u00e0m_g\u00ec?
+
+This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Nh\u00f3m_n\u00e0y_ch\u1ee9a_c\u00e1c_m\u1ee5c_c\u0103n_c\u1ee9_tr\u00ean_ph\u00e9p_g\u00e1n_th\u1ee7_c\u00f4ng._C\u0 [...]
+
+This_group_contains_entries_in_which=Nh\u00f3m_n\u00e0y_ch\u1ee9a_c\u00e1c_m\u1ee5c_m\u00e0
+
+This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=Nh\u00f3m_n\u00e0y_ch\u1ee9a_c\u00e1c_m\u1ee5c_m\u00e0_b\u1ea5t_k\u1ef3_tr\u01b0\u1eddng_n\u00e0o_c\u0169ng_c\u00f3_Bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%0</b> 
+
+This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=Nh\u00f3m_n\u00e0y_ch\u1ee9a_c\u00e1c_m\u1ee5c_m\u00e0_b\u1ea5t_k\u1ef3_tr\u01b0\u1eddng_n\u00e0o_c\u0169ng_ch\u1ee9a_thu\u1eadt_ng\u1eef_<b>%0</b> 
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=Nh\u00f3m_n\u00e0y_ch\u1ee9a_c\u00e1c_m\u1ee5c_c\u00f3_tr\u01b0\u1eddng_<b>%0</b>_ch\u1ee9a_t\u1eeb_kh\u00f3a_<b>%1</b> 
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=Nh\u00f3m_n\u00e0y_ch\u1ee9a_c\u00e1c_m\u1ee5c_c\u00f3_tr\u01b0\u1eddng_<b>%0</b>_ch\u1ee9a_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc_<b>%1</b> 
+
+This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=\u0110\u00e2y_l\u00e0_m\u1ed9t_h\u1ed9p_tho\u1ea1i_sao_ch\u00e9p_v\u00e0_d\u00e1n_\u0111\u01a1n_gi\u1ea3n_\u0111\u1ec3_nh\u1eadp_m\u1ed9t_s\u1ed1_tr\u01b0\u1eddng_t\u1eeb_d\u1ea1ng_ch\u1eef_\u0111\u01a1n_gi\u1ea3n.
+This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u0110i\u1ec1u_n\u00e0y_khi\u1ebfn_cho_JabRef_t\u00ecm_t\u1eebng_li\u00ean_k\u1ebft_trong_t\u1ed5ng_s\u1ed1_%0_v\u00e0_ki\u1ec3m_tra_xem_t\u1eadp_tin_c\u00f3_t\u1ed3n_t\u1ea1i_kh\u00f4ng._N\u1ebfu_kh\u00f4ng_b\u1ea1n_s\u1ebd_\u0111\u01b0\u1ee3c_cung_c\u1ea5p_c\u00e1c_t\u00f9y_ch\u1ecdn<BR>\u0111\u1ec3_gi\u1ea3i_quy\u1ebft_tr\u1ee5c_tr\u1eb7c.
+
+This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=L\u1ec7nh_n\u00e0y_y\u00eau_c\u1ea7u_t\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn_ph\u1ea3i_c\u00f3_kh\u00f3a_BibTex.
+This_operation_requires_at_least_one_entry.=L\u1ec7nh_n\u00e0y_y\u00eau_c\u1ea7u_ph\u1ea3i_c\u00f3_\u00edt_nh\u1ea5t_m\u1ed9t_m\u1ee5c.
+
+This_operation_requires_one_or_more_entries_to_be_selected.=L\u1ec7nh_n\u00e0y_y\u00eau_c\u1ea7u_ph\u1ea3i_ch\u1ecdn_tr\u01b0\u1edbc_m\u1ed9t_ho\u1eb7c_nhi\u1ec1u_m\u1ee5c.
+
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=L\u1ec7nh_n\u00e0y_s\u1ebd_di_chuy\u1ec3n_t\u1ea5t_c\u1ea3_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i_t\u1eeb_c\u00e1c_tr\u01b0\u1eddng_'pdf'_v\u00e0_'ps'_v\u00e0o_tr\u01b0\u1eddng_'%0'._C\u00f3_ti\u1ebfn_h\u00e0nh_kh\u00f4ng?
+
+To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=\u0110\u1ec3_c\u00e0i_\u0111\u1eb7t,_ch\u1ecdn_<B>T\u00f9y_ch\u1ecdn_->_Qu\u1ea3n_l\u00fd_t\u00ean_vi\u1ebft_t\u1eaft_c\u00e1c_t\u1ea1p_ch\u00ed</B>
+
+Toggle_abbreviation=B\u1eadt/t\u1eaft_vi\u1ebft_t\u1eaft
+Toggle_entry_preview=B\u1eadt/t\u1eaft_xem_tr\u01b0\u1edbc_m\u1ee5c
+Toggle_groups_interface=B\u1eadt/t\u1eaft_giao_di\u1ec7n_nh\u00f3m
+Toggle_search_panel=B\u1eadt/t\u1eaft_b\u1ea3ng_\u0111i\u1ec1u_khi\u1ec3n_t\u00ecm_ki\u1ebfm
+
+Try_different_encoding=Th\u1eed_m\u00e3_h\u00f3a_kh\u00e1c
+
+Type_set_to_'other'=Ki\u1ec3u_\u0111\u01b0\u1ee3c_thi\u1ebft_l\u1eadp_th\u00e0nh_'kh\u00e1c'
+Unabbreviate_journal_names_of_the_selected_entries=B\u1ecf_vi\u1ebft_t\u1eaft_t\u00ean_c\u00e1c_t\u1ea1p_ch\u00ed_c\u1ee7a_nh\u1eefng_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn
+Unabbreviated_%0_journal_names.=%0_t\u00ean_t\u1ea1p_ch\u00ed_\u0111\u01b0\u1ee3c_b\u1ecf_vi\u1ebft_t\u1eaft.
+
+unable_to_access_LyX-pipe=kh\u00f4ng_th\u1ec3_truy_c\u1eadp_\u1ed1ng-d\u1eabn-LyX
+
+Unable_to_create_graphical_interface=Kh\u00f4ng_th\u1ec3_t\u1ea1o_giao_di\u1ec7n_\u0111\u1ed3_h\u1ecda
+
+Unable_to_open_file.=Kh\u00f4ng_th\u1ec3_m\u1edf_t\u1eadp_tin.
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=Kh\u00f4ng_th\u1ec3_m\u1edf_li\u00ean_k\u1ebft._Kh\u00f4ng_th\u1ec3_g\u1ecdi_\u1ee9ng_d\u1ee5ng_'%0'_li\u00ean_quan_\u0111\u1ebfn_ki\u1ec3u_t\u1eadp_tin_'%1'.
+Unable_to_read_default_icon_theme.=Kh\u00f4ng_th\u1ec3_\u0111\u1ecdc_s\u1eafc_th\u00e1i_bi\u1ec3u_t\u01b0\u1ee3ng_m\u1eb7c_\u0111\u1ecbnh
+Unable_to_read_icon_theme_file=Kh\u00f4ng_th\u1ec3_\u0111\u1ecdc_t\u1eadp_tin_s\u1eafc_th\u00e1i_bi\u1ec3u_t\u01b0\u1ee3ng
+
+unable_to_write_to=Kh\u00f4ng_th\u1ec3_ghi_v\u00e0o
+Undefined_file_type=Ki\u1ec3u_t\u1eadp_tin_kh\u00f4ng_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a
+
+Undo=Quay_ng\u01b0\u1ee3c_l\u1ec7nh
+
+Union=H\u1ee3p_nh\u1ea5t
+
+Unknown_bibtex_entries=C\u00e1c_m\u1ee5c_bibtex_c\u00f3_ki\u1ec3u_kh\u00f4ng_r\u00f5
+
+unknown_edit=ki\u1ec3u_ch\u1ec9nh_s\u1eeda_kh\u00f4ng_bi\u1ebft
+
+unknown_entry_type=ki\u1ec3u_m\u1ee5c_kh\u00f4ng_bi\u1ebft
+
+Unknown_export_format=\u0110\u1ecbnh_d\u1ea1ng_xu\u1ea5t_kh\u00f4ng_bi\u1ebft
+
+Unmark_all=Kh\u1eed_\u0111\u00e1nh_d\u1ea5u_t\u1ea5t_c\u1ea3
+
+Unmark_entries=Kh\u1eed_\u0111\u00e1nh_d\u1ea5u_c\u00e1c_m\u1ee5c
+
+Unmark_entry=Kh\u1eed_\u0111\u00e1nh_d\u1ea5u_m\u1ee5c
+
+Unmarked_selected=Ph\u1ea7n_\u0111\u00e3_ch\u1ecdn_\u0111\u01b0\u1ee3c_kh\u1eed_\u0111\u00e1nh_d\u1ea5u
+
+Unpack_EndNote_filter_set=G\u1ee1_\u0111\u00f3ng_g\u00f3i_b\u1ed9_l\u1ecdc_EndNote
+
+Unpacked_file.=T\u1eadp_tin_\u0111\u00e3_\u0111\u01b0\u1ee3c_g\u1ee1_\u0111\u00f3ng_g\u00f3i.
+
+Unsupported_version_of_class_%0\:_%1=Phi\u00ean_b\u1ea3n_c\u1ee7a_l\u1edbp_%0_kh\u00f4ng_\u0111\u01b0\u1ee3c_h\u1ed7_tr\u1ee3:_%1
+
+untitled=kh\u00f4ng_ti\u00eau_\u0111\u1ec1
+
+Up=L\u00ean
+
+Update_to_current_column_widths=C\u1eadp_nh\u1eadt_chi\u1ec1u_r\u1ed9ng_c\u1ed9t_hi\u1ec7n_t\u1ea1i
+
+Updated_group_selection=Ph\u00e9p_ch\u1ecdn_nh\u00f3m_\u0111\u00e3_\u0111\u01b0\u1ee3c_c\u1eadp_nh\u1eadt
+Upgrade_external_links=N\u00e2ng_c\u1ea5p_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i
+Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=N\u00e2ng_c\u1ea5p_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i_PDF/PS_\u0111\u1ec3_s\u1eed_d\u1ee5ng_tr\u01b0\u1eddng_'%0'.
+Upgrade_file=N\u00e2ng_c\u1ea5p_t\u1eadp_tin
+Upgrade_old_external_file_links_to_use_the_new_feature=N\u00e2ng_c\u1ea5p_c\u00e1c_li\u00ean_k\u1ebft_t\u1eadp_tin_ngo\u00e0i_\u0111\u1ec3_s\u1eed_d\u1ee5ng_t\u00ednh_ch\u1ea5t_m\u1edbi
+Upgraded_links.=C\u00e1c_li\u00ean_k\u1ebft_\u0111\u01b0\u1ee3c_n\u00e2ng_c\u1ea5p.
+UPPER=TR\u00caN
+Upper_Each_First=Ph\u00eda_tr\u00ean_m\u1ed7i_m\u1ee5c_\u0111\u1ea7u_ti\u00ean
+Upper_first=Ph\u00eda_tr\u00ean_\u0111\u1ea7u_ti\u00ean
+
+usage=c\u00e1ch_d\u00f9ng
+
+Use_antialiasing_font=D\u00f9ng_ph\u00f4ng_ch\u1eef_ch\u1ed1ng_r\u0103ng_c\u01b0a
+Use_autocompletion_for_the_following_fields=D\u00f9ng_t\u00ednh_ch\u1ea5t_t\u1ef1_\u0111i\u1ec1n_\u0111\u1ea7y_\u0111\u1ee7_cho_c\u00e1c_tr\u01b0\u1eddng_sau
+Use_custom_icon_theme=D\u00f9ng_s\u1eafc_th\u00e1i_bi\u1ec3u_t\u01b0\u1ee3ng_t\u00f9y_ch\u1ecdn
+Use_default_viewer=D\u00f9ng_tr\u00ecnh_xem_m\u1eb7c_\u0111\u1ecbnh
+
+Use_inspection_window_also_when_a_single_entry_is_imported.=D\u00f9ng_c\u1eeda_s\u1ed5_ki\u1ec3m_tra_ngay_c\u1ea3_khi_ch\u1ec9_c\u00f3_m\u1ed9t_m\u1ee5c_\u0111\u01b0\u1ee3c_nh\u1eadp_v\u00e0o.
+Use_native_file_dialog=D\u00f9ng_h\u1ed9p_tho\u1ea1i_t\u1eadp_tin_ki\u1ec3u_nguy\u00ean_th\u1ee7y
+
+Use_other_look_and_feel=D\u00f9ng_di\u1ec7n_m\u1ea1o_kh\u00e1c
+Use_Regular_Expression_Search=D\u00f9ng_ph\u00e9p_t\u00ecm_b\u1eb1ng_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc
+
+Use_regular_expressions=D\u00f9ng_c\u00e1c_bi\u1ec3u_th\u1ee9c_ch\u00ednh_t\u1eafc
+
+Use_the_following_delimiter_character(s)=D\u00f9ng_(c\u00e1c)_k\u00fd_t\u1ef1_ph\u00e2n_t\u00e1ch_c\u1ed9t_sau
+Username_\:=T\u00ean_ng\u01b0\u1eddi_d\u00f9ng:
+
+Value_cleared_externally=Gi\u00e1_tr\u1ecb_b\u1ecb_x\u00f3a_ngo\u00e0i_ch\u01b0\u01a1ng_tr\u00ecnh
+
+Value_set_externally=Gi\u00e1_tr\u1ecb_\u0111\u01b0\u1ee3c_thi\u1ebft_l\u1eadp_ngo\u00e0i_ch\u01b0\u01a1ng_tr\u00ecnh
+
+verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=ki\u1ec3m_tra_xem_LyX_c\u00f3_ch\u1ea1y_v\u00e0_lyxpipe_c\u00f3_h\u1ee3p_l\u1ec7_kh\u00f4ng
+
+View=Xem
+Vim_Server_Name=T\u00ean_Server_Vim
+
+Waiting_for_ArXiv...=\u0110ang_ch\u1edd_ArXiv...
+
+Warn_about_unresolved_duplicates_when_closing_inspection_window=C\u1ea3nh_b\u00e1o_v\u1ec1_c\u00e1c_m\u1ee5c_tr\u00f9ng_ch\u01b0a_\u0111\u01b0\u1ee3c_gi\u1ea3i_quy\u1ebft_khi_\u0111\u00f3ng_c\u1eeda_s\u1ed5_ki\u1ec3m_tra
+
+Warn_before_overwriting_existing_keys=C\u1ea3nh_b\u00e1o_tr\u01b0\u1edbc_khi_ghi_\u0111\u00e8_c\u00e1c_kh\u00f3a_hi\u1ec7n_c\u00f3
+
+Warning=C\u1ea3nh_b\u00e1o
+Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=C\u1ea3nh_b\u00e1o:_Kh\u00f4ng_th\u1ec3_ho\u00e0n_t\u1ea5t_s\u1eeda_ch\u1eefa_t\u1eadp_tin;_t\u1eadp_tin_c\u1ee7a_b\u1ea1n_c\u00f3_th\u1ec3_b\u1ecb_h\u1ecfng._Th\u00f4ng_b\u00e1o_l\u1ed7i
+
+Warning_there_is_a_duplicate_key=C\u1ea3nh_b\u00e1o_c\u00f3_m\u1ed9t_kh\u00f3a_b\u1ecb_tr\u00f9ng
+
+Warnings=C\u00e1c_c\u1ea3nh_b\u00e1o
+
+web_link=li\u00ean_k\u1ebft_web
+
+What_do_you_want_to_do?=B\u1ea1n_mu\u1ed1n_l\u00e0m_g\u00ec?
+
+When_adding/removing_keywords,_separate_them_by=Khi_th\u00eam/lo\u1ea1i_b\u1ecf_c\u00e1c_t\u1eeb_kh\u00f3a,_c\u00e1ch_bi\u1ec7t_ch\u00fang_ra_b\u1eb1ng
+Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=S\u1ebd_ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_v\u00e0o_c\u00e1c_PDF_\u0111\u01b0\u1ee3c_li\u00ean_k\u1ebft_t\u1eeb_c\u00e1c_m\u1ee5c_\u0111\u00e3_ch\u1ecdn.
+
+with=v\u1edbi
+
+Word=T\u1eeb
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=Ghi_m\u1ee5c_Bibtex_d\u01b0\u1edbi_d\u1ea1ng_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_v\u00e0o_PDF.
+
+Write_XMP=Ghi_XMP
+Write_XMP-metadata=Ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP
+Write_XMP-metadata_for_all_PDFs_in_current_database?=Ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_cho_t\u1ea5t_c\u1ea3_c\u00e1c_PDF_trong_CSDL_hi\u1ec7n_t\u1ea1i?
+Writing_XMP=\u0110ang_ghi_XMP
+Writing_XMP_metadata...=\u0110ang_ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP...
+Writing_XMP_metadata_for_selected_entries...=\u0110ang_ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_cho_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn...
+Writing_XMP_to_'%0'...=\u0110ang_ghi_XMP_v\u00e0o_'%0'...
+
+Wrong_file_format=\u0110\u1ecbnh_d\u1ea1ng_t\u1eadp_tin_b\u1ecb_sai
+
+Wrote_XMP-metadata=\u0110\u00e3_ghi_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP
+Wrote_XMP_to_'%0'.=\u0110\u00e3_ghi_XMP_v\u00e0o_'%0'.
+
+XMP-annotated_PDF=PDF_c\u00f3_ch\u00fa_gi\u1ea3i_XMP
+XMP_Export_Privacy_Settings=C\u00e1c_thi\u1ebft_l\u1eadp_ri\u00eang_v\u1ec1_Xu\u1ea5t_XMP
+XMP_metadata=\u0110\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP
+XMP_metadata_found_in_PDF\:_%0=\u0110\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u_XMP_c\u00f3_trong_PDF:_%0
+You_must_restart_JabRef_for_this_to_come_into_effect.=
+You_have_changed_the_language_setting.=
+You_have_changed_the_look_and_feel_setting.=
+
+You_have_cleared_this_field._Original_value=B\u1ea1n_\u0111\u00e3_x\u00f3a_tr\u01b0\u1eddng_n\u00e0y._Gi\u00e1_tr\u1ecb_ban_\u0111\u1ea7u
+
+You_have_entered_an_invalid_search_'%0'.=B\u1ea1n_\u0111\u00e3_nh\u1eadp_m\u1ed9t_ph\u00e9p_t\u00ecm_kh\u00f4ng_h\u1ee3p_l\u1ec7_'%0'.
+
+You_must_choose_a_file_name_to_store_journal_abbreviations=B\u1ea1n_ph\u1ea3i_ch\u1ecdn_m\u1ed9t_t\u00ean_t\u1eadp_tin_\u0111\u1ec3_l\u01b0u_tr\u1eef_c\u00e1c_vi\u1ebft_t\u1eaft_t\u00ean_t\u1ea1p_ch\u00ed
+
+You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=B\u1ea1n_ph\u1ea3i_kh\u1edfi_\u0111\u1ed9ng_l\u1ea1i_JabRef_\u0111\u1ec3_c\u00e1c_t\u1ed5_h\u1ee3p_ph\u00edm_m\u1edbi_ho\u1ea1t_\u0111\u1ed9ng_\u0111\u01b0\u1ee3c.
+
+You_must_set_both_BibTeX_key_and_%0_directory=B\u1ea1n_ph\u1ea3i_thi\u1ebft_l\u1eadp_c\u1ea3_kh\u00f3a_BibTeX_l\u1eabn_th\u01b0_m\u1ee5c_%0
+
+Your_new_key_bindings_have_been_stored.=T\u1ed5_h\u1ee3p_ph\u00edm_t\u1eaft_m\u1edbi_c\u1ee7a_b\u1ea1n_\u0111\u00e3_\u0111\u01b0\u1ee3c_l\u01b0u_tr\u1eef.
+
+
+The_following_fetchers_are_available\:=C\u00e1c_tr\u00ecnh_l\u1ea5y_v\u1ec1_sau_c\u00f3_th\u1ec3_d\u00f9ng_\u0111\u01b0\u1ee3c:
+Could_not_find_fetcher_'%0'=Kh\u00f4ng_th\u1ec3_t\u00ecm_th\u1ea5y_tr\u00ecnh_l\u1ea7y_v\u1ec1_'%0'
+Running_Query_'%0'_with_fetcher_'%1'.=\u0110ang_ch\u1ea1y_truy_v\u1ea5n_'%0'_v\u1edbi_tr\u00ecnh_l\u1ea5y_v\u1ec1_'%1'.
+Please_wait!=Vui_l\u00f2ng_ch\u1edd!
+Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=Ph\u00e9p_truy_v\u1ea5n_'%0'_b\u1eb1ng_tr\u00ecnh_l\u1ea5y_v\u1ec1_'%1'_kh\u00f4ng_tr\u1ea3_l\u1ea1i_k\u1ebft_qu\u1ea3_n\u00e0o.
+Open_SPIRES_entry=M\u1edf_m\u1ee5c_SPIRES
+Move/Rename_file=Chuy\u1ec3n/\u0110\u1eb7t_l\u1ea1i_t\u00ean_t\u1eadp_tin
+File_moved=T\u1eadp_tin_b\u1ecb_di_chuy\u1ec3n
+Move_file_failed=Vi\u1ec7c_chuy\u1ec3n_t\u1eadp_tin_th\u1ea5t_b\u1ea1i
+Could_not_move_file=Kh\u00f4ng_th\u1ec3_chuy\u1ec3n_t\u1eadp_tin
+Could_not_find_file_'%0'.=Kh\u00f4ng_t\u00ecm_th\u1ea5y_t\u1eadp_tin_'%0'.
+Move/rename_file=Chuy\u1ec3n/\u0111\u1eb7t_l\u1ea1i_t\u00ean_t\u1eadp_tin
+Number_of_entries_successfully_imported=S\u1ed1_m\u1ee5c_\u0111\u01b0\u1ee3c_nh\u1eadp_v\u00e0o_th\u00e0nh_c\u00f4ng
+Import_canceled_by_user=Vi\u1ec7c_nh\u1eadp_b\u1ecb_ng\u01b0\u1eddi_d\u00f9ng_h\u1ee7y
+Progress\:_%0_of_%1=Ti\u1ebfn_tr\u00ecnh:_%0_of_%1
+Error_while_fetching_from_JSTOR=L\u1ed7i_khi_l\u1ea5y_v\u1ec1_t\u1eeb_JSTOR
+
+Fetching_Medline_by_id...=L\u1ea5y_v\u1ec1_t\u1eeb_Medline_theo_id...
+
+Fetching_Medline_by_term...=L\u1ea5y_v\u1ec1_t\u1eeb_Medline_theo_thu\u1eadt_ng\u1eef...
+Medline_import_canceled=Vi\u1ec7c_nh\u1eadp_t\u1eeb_Medline_b\u1ecb_h\u1ee7y
+Please_enter_a_valid_number=Vui_l\u00f2ng_nh\u1eadp_m\u1ed9t_con_s\u1ed1_h\u1ee3p_l\u1ec7
+Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=Vui_l\u00f2ng_nh\u1eadp_m\u1ed9t_danh_s\u00e1ch_c\u00e1c_id_Medline_(con_s\u1ed1),_c\u00e1ch_nhau_b\u1edfi_d\u1ea5u_ph\u1ea9y,_ho\u1eb7c_nh\u1eadp_thu\u1eadt_ng\u1eef_c\u1ea7n_t\u00ecm.
+An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=M\u1ed9t_l\u1ed7i_x\u1ea3y_ra_khi_\u0111ang_l\u1ea5y_v\u1ec1_t\u1eeb_ngu\u1ed3n_SPIRES_(%0)\:
+Error_while_fetching_from_Spires\:_=L\u1ed7i_khi_\u0111ang_l\u1ea5y_v\u1ec1_t\u1eeb_Spires\:_
+Connect_to_external_SQL_database=K\u1ebft_n\u1ed1i_\u0111\u1ebfn_CSDL__SQL_ngo\u00e0i
+Export_to_external_SQL_database=Xu\u1ea5t_ra_CSDL_SQL_ngo\u00e0i
+
+Show_results_in_dialog=Hi\u1ec3n_th\u1ecb_c\u00e1c_k\u1ebft_qu\u1ea3_trong_h\u1ed9p_tho\u1ea1i
+Global_search=T\u00ecm_to\u00e0n_c\u1ee5c
+Show_search_results_in_a_window=Hi\u1ec3n_th\u1ecb_k\u1ebft_qu\u1ea3_t\u00ecm_trong_m\u1ed9t_c\u1eeda_s\u1ed5
+Search_results=K\u1ebft_qu\u1ea3_t\u00ecm_ki\u1ebfm
+Move_file_to_file_directory?=Di_chuy\u1ec3n_t\u1eadp_tin_v\u00e0o_th\u01b0_m\u1ee5c_t\u1eadp_tin?
+Rename_to_'%0'=\u0110\u1ed5i_t\u00ean_th\u00e0nh_'%0'
+Move_to_file_directory=Di_chuy\u1ec3n_v\u00e0o_th\u01b0_m\u1ee5c_t\u1eadp_tin
+You_have_changed_the_menu_and_label_font_size.=
+
+Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=CSDL_\u0111\u01b0\u1ee3c_b\u1ea3o_v\u1ec7._Kh\u00f4ng_th\u1ec3_l\u01b0u_cho_\u0111\u1ebfn_khi_nh\u1eefng_thay_\u0111\u1ed5i_ngo\u00e0i_\u0111\u01b0\u1ee3c_xem_x\u00e9t.
+Protected_database=CSDL_\u0111\u01b0\u1ee3c_b\u1ea3o_v\u1ec7
+Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=T\u1eeb_ch\u1ed1i_l\u01b0u_CSDL_tr\u01b0\u1edbc_khi_nh\u1eefng_thay_\u0111\u1ed5i_ngo\u00e0i_\u0111\u01b0\u1ee3c_xem_x\u00e9t.
+Database_protection=B\u1ea3o_v\u1ec7_CSDL
+Unable_to_save_database=Kh\u00f4ng_th\u1ec3_l\u01b0u_CSDL
+
+BibTeX_key_generator=Tr\u00ecnh_t\u1ea1o_kh\u00f3a_BibTeX
+Unable_to_open_link.=Kh\u00f4ng_th\u1ec3_m\u1edf_li\u00ean_k\u1ebft.
+Search_JSTOR=T\u00ecm_tr\u00ean_JSTOR
+Attempting_SQL_import...=\u0110ang_c\u1ed1_nh\u1eadp_SQL...
+BibO_RDF=BibO_RDF
+HTML_parser=Tr\u00ecnh_ph\u00e2n_t\u00e1ch_HTML
+
+Move_the_keyboard_focus_to_the_entry_table=Chuy\u1ec3n_tr\u1ecdng_t\u00e2m_b\u00e0n_ph\u00edm_sang_b\u1ea3ng_ch\u1ee9a_m\u1ee5c
+MIME_type=Ki\u1ec3u_MIME
+
+This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=T\u00ednh_ch\u1ea5t_n\u00e0y_cho_ph\u00e9p_c\u00e1c_t\u1eadp_tin_m\u1edbi_c\u00f3_th\u1ec3_\u0111\u01b0\u1ee3c_m\u1edf_ho\u1eb7c_nh\u1eadp_v\u00e0o_m\u1ed9t_phi\u00ean_JabRef_\u0111an [...]
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=L\u01b0u_\u00fd_r\u1eb1ng_nh\u1eefng_thi\u1ebft_l\u1eadp_n\u00e0y_ch\u1ec9_\u0111\u01b0\u1ee3c_d\u00f9ng_cho_c\u00e1c_tr\u01b0\u1eddng_<b>pdf</b>_v\u00e0_<b>ps</b>_c\u0169_c\u00f2n_gi\u1eef_l\u1ea1i.<br>\u0110\u1ed1i_v\u1edbi_h\u1ea7u_h\u1ebft_ng\u01b0\u1eddi_d\u00f9ng,_thi\u1ebft_l\u1eadp_<b>Th\u01b0_m\u1ee5c_t\u1ead [...]
+Legacy_file_fields=C\u00e1c_tr\u01b0\u1eddng_t\u1eadp_tin_c\u0169_c\u00f2n_\u0111\u1ec3_l\u1ea1i
+
+This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u0110i\u1ec1u_n\u00e0y_khi\u1ebfn_JabRef_t\u00ecm_m\u1ed7i_ph\u1ea7n_m\u1edf_r\u1ed9ng_trong_t\u1ed5ng_s\u1ed1_%0_v\u00e0_ki\u1ec3m_tra_xem_t\u1eadp_tin_c\u00f3_t\u1ed3n_t\u1ea1i_kh\u00f4ng._N\u1ebfu_kh\u00f4ng,_b\u1ea1n_s\u1ebd_\u0111\u01b0\u1ee3c_cung_c\u1ea5p_c\u00e1c_t\u00f9y_ch\u1ecdn<BR>\u0111\u1ec3_gi\u1ea3i_quy\u1ebft_v\u1ea5n_\u0111\u1ec1_n\u00e0y.
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=Run_Fetcher,_e.g._"--fetch=Medline\:cancer"
+
+The_ACM_Digital_Library=Th\u01b0_vi\u1ec7n_s\u1ed1_ACM
+Reset=Thi\u1ebft_l\u1eadp_l\u1ea1i
+
+Use_IEEE_LaTeX_abbreviations=D\u00f9ng_c\u00e1c_ch\u1eef_vi\u1ebft_t\u1eaft_ki\u1ec3u_IEEE_LaTeX
+The_Guide_to_Computing_Literature=H\u01b0\u1edbng_d\u1eabn_v\u1ec1_t\u00e0i_li\u1ec7u_m\u00e1y_t\u00ednh
+Search_ACM_Portal=T\u00ecm_tr\u00ean_ACM_Portal
+Connection_to_ACM_Portal_failed=K\u1ebft_n\u1ed1i_\u0111\u1ebfn_ACM_Portal_th\u1ea5t_b\u1ea1i
+
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=Khi_m\u1edf_li\u00ean_k\u1ebft_t\u1eadp_tin,_t\u00ecm_t\u1eadp_tin_kh\u1edbp_n\u1ebfu_li\u00ean_k\u1ebft_kh\u00f4ng_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a
+Settings_for_%0=C\u00e1c_thi\u1ebft_l\u1eadp_d\u00f9ng_cho_%0
+Insert_selected_citations_into_Vim=Ch\u00e8n_c\u00e1c_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_Vim
+RIS=RIS
+
+Assign_exclusively_to_group=Ch\u1ec9_g\u00e1n_v\u00e0o_nh\u00f3m
+
+Bad_Request_'%0'.=Y\u00eau_c\u1ea7u_sai_'%0'.
+
+Mark_entries_imported_into_an_existing_database=\u0110\u00e1nh_d\u1ea5u_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_nh\u1eadp_v\u00e0o_CSDL_hi\u1ec7n_c\u00f3
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Kh\u1eed_\u0111\u00e1nh_d\u1ea5u_t\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_tr\u01b0\u1edbc_khi_nh\u1eadp_c\u00e1c_m\u1ee5c_m\u1edbi_v\u00e0o_CSDL_hi\u1ec7n_c\u00f3
+
+Forward=T\u1edbi
+Back=Lui
+Sort_the_following_fields_as_numeric_fields=X\u1ebfp_th\u1ee9_t\u1ef1_c\u00e1c_tr\u01b0\u1eddng_sau_nh\u01b0_th\u1ec3_ch\u00fang_l\u00e0_c\u00e1c_tr\u01b0\u1eddng_ki\u1ec3u_s\u1ed1
+Line_%0\:_Found_corrupted_BibTeX-key.=D\u00f2ng_%0\:_T\u00ecm_th\u1ea5y_kh\u00f3a-BibTeX_b\u1ecb_l\u1ed7i.
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=D\u00f2ng_%0\:_T\u00ecm_th\u1ea5y_kh\u00f3a-BibTeX_b\u1ecb_l\u1ed7i_(ch\u1ee9a_kho\u1ea3ng_tr\u1eafng).
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=D\u00f2ng_%0\:_T\u00ecm_th\u1ea5y_kh\u00f3a-BibTeX_b\u1ecb_l\u1ed7i_(thi\u1ebfu_d\u1ea5u_ph\u1ea9y).
+Finished_downloading_full_text_document=T\u1ea3i_v\u1ec1_t\u00e0i_li\u1ec7u_\u0111\u1ea7y_\u0111\u1ee7_ho\u00e0n_t\u1ea5t
+Unable_to_find_full_text_document_in_the_linked_web_page.=Kh\u00f4ng_th\u1ec3_t\u00ecm_th\u1ea5y_t\u00e0i_li\u1ec7u_\u0111\u1ea7y_\u0111\u1ee7_trong_trang_web_\u0111\u01b0\u1ee3c_li\u00ean_k\u1ebft.
+Connection_error_when_trying_to_find_full_text_document.=L\u1ed7i_k\u1ebft_n\u1ed1i_khi_\u0111ang_c\u1ed1_t\u00ecm_t\u00e0i_li\u1ec7u_\u0111\u1ea7y_\u0111\u1ee7.
+This_entry_provides_no_URL_or_DOI_links.=M\u1ee5c_n\u00e0y_kh\u00f4ng_cung_c\u1ea5p_li\u00ean_k\u1ebft_URL_ho\u1eb7c_DOI.
+Full_text_article_download_failed=Vi\u1ec7c_t\u1ea3i_v\u1ec1_b\u00e0i_vi\u1ebft_\u0111\u1ea7y_\u0111\u1ee7_th\u1ea5t_b\u1ea1i
+Update_to_current_column_order=C\u1eadp_nh\u1eadt_theo_th\u1ee9_t\u1ef1_c\u1ed9t_hi\u1ec7n_t\u1ea1i
+
+Rename_field=\u0110\u1ed5i_t\u00ean_tr\u01b0\u1eddng
+Set/clear/rename_fields=Thi\u1ebft_l\u1eadp/x\u00f3a/\u0111\u1ed5i_t\u00ean_tr\u01b0\u1eddng
+Rename_field_to\:=\u0110\u1ed5i_t\u00ean_tr\u01b0\u1eddng_th\u00e0nh_\:
+Move_contents_of_a_field_into_a_field_with_a_different_name=Di_chuy\u1ec3n_n\u1ed9i_dung_c\u1ee7a_m\u1ed9t_tr\u01b0\u1eddng_sang_m\u1ed9t_tr\u01b0\u1eddng_c\u00f3_t\u00ean_kh\u00e1c
+You_can_only_rename_one_field_at_a_time=B\u1ea1n_ch\u1ec9_c\u00f3_th\u1ec3_\u0111\u1ed5i_t\u00ean_m\u1ed9t_tr\u01b0\u1eddng_m\u1ed9t_l\u1ea7n
+
+Remove_all_broken_links=Lo\u1ea1i_b\u1ecf_t\u1ea5t_c\u1ea3_c\u00e1c_li\u00ean_k\u1ebft_b\u1ecb_\u0111\u1ee9t
+
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Kh\u00f4ng_th\u1ec3_d\u00f9ng_c\u1ed5ng_%0_cho_l\u1ec7nh_ch\u1ea1y_t\u1eeb_xa;_m\u1ed9t_\u1ee9ng_d\u1ee5ng_kh\u00e1c_c\u00f3_th\u1ec3_\u0111ang_d\u00f9ng_n\u00f3._H\u00e3y_th\u1eed_ch\u1ec9_\u0111\u1ecbnh_m\u1ed9t_c\u1ed5ng_kh\u00e1c.
+
+Plugin_installer=Tr\u00ecnh_c\u00e0i_\u0111\u1eb7t_ph\u1ea7n_m\u1edf_r\u1ed9ng
+Unable_to_create_plugin_directory=Kh\u00f4ng_th\u1ec3_t\u1ea1o_th\u01b0_m\u1ee5c_ph\u1ea7n_m\u1edf_r\u1ed9ng
+Unable_to_copy_file=Kh\u00f4ng_th\u1ec3_ch\u00e9p_t\u1eadp_tin
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Ph\u1ea7n_m\u1edf_r\u1ed9ng_\u0111\u01b0\u1ee3c_c\u00e0i_\u0111\u1eb7t_th\u00e0nh_c\u00f4ng._B\u1ea1n_ph\u1ea3i_kh\u1edfi_\u0111\u1ed9ng_l\u1ea1i_JabRef_\u0111\u1ec3_n\u1ea1p_ph\u1ea7n_m\u1edf_r\u1ed9ng_m\u1edbi.
+Unable_to_create_user_plugin_directory=Kh\u00f4ng_th\u1ec3_t\u1ea1o_th\u01b0_m\u1ee5c_ph\u1ea7n_m\u1edf_r\u1ed9ng_c\u1ee7a_ng\u01b0\u1eddi_d\u00f9ng
+Plugin_installation_failed.=C\u00e0i_\u0111\u1eb7t_ph\u1ea7n_m\u1edf_r\u1ed9ng_th\u1ea5t_b\u1ea1i.
+The_same_version_of_this_plugin_is_already_installed.=C\u00f9ng_phi\u00ean_b\u1ea3n_ph\u1ea7n_m\u1edf_r\u1ed9ng_n\u00e0y_\u0111\u00e3_\u0111\u01b0\u1ee3c_c\u00e0i_\u0111\u1eb7t.
+A_newer_version_of_this_plugin_is_already_installed.=M\u1ed9t_phi\u00ean_b\u1ea3n_m\u1edbi_h\u01a1n_c\u1ee7a_ph\u1ea7n_m\u1edf_r\u1ed9ng_n\u00e0y_\u0111\u00e3_\u0111\u01b0\u1ee3c_c\u00e0i_\u0111\u1eb7t.
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=M\u1ed9t_ho\u1eb7c_nhi\u1ec1u_phi\u00ean_b\u1ea3n_c\u0169_h\u01a1n_c\u1ee7a_ph\u1ea7n_m\u1edf_r\u1ed9ng_n\u00e0y_\u0111\u00e3_\u0111\u01b0\u1ee3c_c\u00e0i_\u0111\u1eb7t._C\u00f3_x\u00f3a_c\u00e1c_phi\u00ean_b\u1ea3n_c\u0169_kh\u00f4ng?
+Old_versions_deleted_successfully.=C\u00e1c_phi\u00ean_b\u1ea3n_c\u0169_\u0111\u01b0\u1ee3c_x\u00f3a_th\u00e0nh_c\u00f4ng.
+
+
+Install_plugin=C\u00e0i_\u0111\u1eb7t_ph\u1ea7n_m\u1edf_r\u1ed9ng
+Download_plugin=T\u1ea3i_v\u1ec1_ph\u1ea7n_m\u1edf_r\u1ed9ng
+Plugin_manager=Tr\u00ecnh_qu\u1ea3n_l\u00fd_ph\u1ea7n_m\u1edf_r\u1ed9ng
+Delete_the_%0_selected_plugins?=X\u00f3a_%0_ph\u1ea7n_m\u1edf_r\u1ed9ng_\u0111\u01b0\u1ee3c_ch\u1ecdn?
+Delete_plugins=X\u00f3a_c\u00e1c_ph\u1ea7n_m\u1edf_r\u1ed9ng
+Delete_the_selected_plugin?=X\u00f3a_ph\u1ea7n_m\u1edf_r\u1ed9ng_\u0111\u01b0\u1ee3c_ch\u1ecdn?
+Delete_plugin=X\u00f3a_ph\u1ea7n_m\u1edf_r\u1ed9ng
+Enter_download_URL=Nh\u1eadp_URL_t\u1ea3i_v\u1ec1
+Plugin_name=T\u00ean_ph\u1ea7n_m\u1edf_r\u1ed9ng
+Version=Phi\u00ean_b\u1ea3n
+Unknown=Kh\u00f4ng_r\u00f5
+Not_loaded=Kh\u00f4ng_\u0111\u01b0\u1ee3c_n\u1ea1p
+Loaded=\u0110\u00e3_\u0111\u01b0\u1ee3c_n\u1ea1p
+Could_not_determine_version_of_=Kh\u00f4ng_th\u1ec3_x\u00e1c_\u0111\u1ecbnh_phi\u00ean_b\u1ea3n_c\u1ee7a_
+Install_anyway?=C\u1ee9_c\u00e0i_\u0111\u1eb7t?
+
+Looking_for_full_text_document...=\u0110ang_t\u00ecm_t\u00e0i_li\u1ec7u_\u0111\u1ea7y_\u0111\u1ee7...
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Theo_li\u00ean_k\u1ebft_URL_ho\u1eb7c_DOI_v\u00e0_c\u1ed1_g\u1eafng_\u0111\u1ecbnh_v\u1ecb_t\u00e0i_li\u1ec7u_PDF_\u0111\u1ea7y_\u0111\u1ee7
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Kh\u00f4ng_th\u1ec3_t\u00ecm_th\u1ea5y_b\u00e0i_vi\u1ebft_\u0111\u1ea7y_\u0111\u1ee7._Kh\u00f4ng_c\u00f3_thu\u1eadt_to\u00e1n_t\u00ecm_ki\u1ebfm_\u0111\u01b0\u1ee3c_\u0111\u1ecbnh_ngh\u0129a_tr\u00ean_trang_web_'%0'.
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=T\u00ecm_th\u1ea5y_li\u00ean_k\u1ebft_pdf,_nh\u01b0ng_l\u1ea1i_nh\u1eadn_\u0111\u01b0\u1ee3c_ki\u1ec3u_MIME_sai._\u0110i\u1ec1u_c\u00f3_th\u1ec3_ch\u1ec9_ra_r\u1eb1ng_b\u1ea1n_kh\u00f4ng_c\u00f3_quy\u1ec1n_truy_c\u1eadp_v\u00e0o_b\u00e0i_vi\u1ebft_\u0111\u1ea7y_\u0111\u1ee7.
+
+Autosave=L\u01b0u_t\u1ef1_\u0111\u1ed9ng
+Prompt_before_recovering_a_database_from_an_autosave_file=Nh\u1eafc_tr\u01b0\u1edbc_khi_ph\u1ee5c_h\u1ed3i_l\u1ea1i_m\u1ed9t_CSDL_t\u1eeb_m\u1ed9t_t\u1eadp_tin_l\u01b0u_t\u1ef1_\u0111\u1ed9ng
+Autosave_interval_(minutes)=Kho\u1ea3ng_th\u1eddi_gian_t\u1ef1_\u0111\u1ed9ng_l\u01b0u_(ph\u00fat)
+Do_you_want_to_recover_the_database_from_the_autosave_file?=B\u1ea1n_c\u00f3_mu\u1ed1n_ph\u1ee5c_h\u1ed3i_l\u1ea1i_CSDL_t\u1eeb_m\u1ed9t_t\u1eadp_tin_l\u01b0u_t\u1ef1_\u0111\u1ed9ng?
+Recover_from_autosave=Ph\u1ee5c_h\u1ed3i_t\u1ef1_l\u1ec7nh_l\u01b0u_t\u1ef1_\u0111\u1ed9ng
+%0_warnings=%0_c\u1ea3nh_b\u00e1o
+
+Save_in_current_table_sort_order=L\u01b0u_trong_tr\u00ecnh_t\u1ef1_x\u1ebfp_th\u1ee9_t\u1ef1_c\u1ee7a_b\u1ea3ng_hi\u1ec7n_t\u1ea1i
+Export_in_current_table_sort_order=Xu\u1ea5t_ra_theo_tr\u00ecnh_t\u1ef1_x\u1ebfp_th\u1ee9_t\u1ef1_c\u1ee7a_b\u1ea3ng_hi\u1ec7n_t\u1ea1i
+Export_ordered_by_author/editor/year=Xu\u1ea5t_ra_theo_th\u1ee9_t\u1ef1_t\u00e1c_gi\u1ea3/bi\u00ean_t\u1eadp/n\u0103m
+Export_entries_in_their_original_order=Xu\u1ea5t_ra_c\u00e1c_m\u1ee5c_theo_th\u1ee9_t\u1ef1_g\u1ed1c_c\u1ee7a_ch\u00fang
+Error_opening_file_'%0'.=L\u1ed7i_m\u1edf_t\u1eadp_tin_'%0'.
+Autosave_of_file_'%0'=L\u01b0u_t\u1ef1_\u0111\u1ed9ng_t\u1eadp_tin_'%0'
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=L\u1ed7i_khi_m\u1edf_t\u1eadp_tin_l\u01b0u_t\u1ef1_\u0111\u1ed9ng_'%0'._C\u1ed1_g\u1eafng_n\u1ea1p_'%0'_\u0111\u1ec3_thay_th\u1ebf.
+
+
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=C\u00e1c_ph\u1ea7n_m\u1edf_r\u1ed9ng_\u0111\u01b0\u1ee3c_c\u00e0i_\u0111\u1eb7t_trong_th\u01b0_m\u1ee5c_ph\u1ea7n_m\u1edf_r\u1ed9ng_thu\u1ed9c_ng\u01b0\u1eddi_d\u00f9ng_c\u1ee7a_b\u1ea1n_(%0):
+Plugins_installed_in_other_locations\:=C\u00e1c_ph\u1ea7n_m\u1edf_r\u1ed9ng_\u0111\u01b0\u1ee3c_c\u00e0i_\u0111\u1eb7t_\u1edf_v\u1ecb_tr\u00ed_kh\u00e1c:
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=Ph\u1ea7n_m\u1edf_r\u1ed9ng_s\u1ebd_\u0111\u01b0\u1ee3c_x\u00f3a_trong_l\u1ea7n_kh\u1edfi_\u0111\u1ed9ng_sau_c\u1ee7a_JabRef.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=Ph\u1ea7n_m\u1edf_r\u1ed9ng_s\u1ebd_\u0111\u01b0\u1ee3c_x\u00f3a_trong_l\u1ea7n_kh\u1edfi_\u0111\u1ed9ng_sau_c\u1ee7a_JabRef.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Phi\u00ean_b\u1ea3n_c\u00e1c_ph\u1ea7n_m\u1edf_r\u1ed9ng_c\u0169_s\u1ebd_b\u1ecb_x\u00f3a_\u1edf_l\u1ea7n_kh\u1edfi_\u0111\u1ed9ng_sau_c\u1ee7a_JabRef.
+Formatter_not_found\:_%0=Kh\u00f4ng_t\u00ecm_th\u1ea5y_tr\u00ecnh_\u0111\u1ecbnh_d\u1ea1ng\:_%0
+The_following_formatters_could_not_be_found=Kh\u00f4ng_th\u1ec3_t\u00ecm_th\u1ea5y_c\u00e1c_tr\u00ecnh_\u0111\u1ecbnh_d\u1ea1ng_sau
+
+Clear_inputarea=X\u00f3a_trong_v\u00f9ng_nh\u1eadp_li\u1ec7u
+
+Automatically_set_file_links_for_this_entry=T\u1ef1_\u0111\u1ed9ng_thi\u1ebft_l\u1eadp_c\u00e1c_li\u00ean_k\u1ebft_t\u1eadp_tin_cho_m\u1ee5c_n\u00e0y
+Could_not_save,_file_locked_by_another_JabRef_instance.=Kh\u00f4ng_th\u1ec3_l\u01b0u,_t\u1eadp_tin_b\u1ecb_kh\u00f3a_b\u1edfi_m\u1ed9t_phi\u00ean_l\u00e0m_vi\u1ec7c_kh\u00e1c_c\u1ee7a_JabRef_\u0111ang_ch\u1ea1y.
+File_is_locked_by_another_JabRef_instance.=T\u1eadp_tin_b\u1ecb_kh\u00f3a_b\u1edfi_m\u1ed9t_phi\u00ean_l\u00e0m_vi\u1ec7c_kh\u00e1c_c\u1ee7a_JabRef.
+Do_you_want_to_override_the_file_lock?=B\u1ea1n_c\u00f3_mu\u1ed1n_b\u1ecf_qua_kh\u00f3a_t\u1eadp_tin?
+File_locked=T\u1eadp_tin_b\u1ecb_kh\u00f3a
+Current_tmp_value=Gi\u00e1_tr\u1ecb_tmp_hi\u1ec7n_t\u1ea1i
+Metadata_change=Thay_\u0111\u1ed5i_\u0111\u1eb7c_t\u1ea3_d\u1eef_li\u1ec7u
+Changes_have_been_made_to_the_following_metadata_elements=C\u00e1c_thay_\u0111\u1ed5i_\u0111\u00e3_\u0111\u01b0\u1ee3c_th\u1ef1c_hi\u1ec7n_cho_nh\u1eefng_th\u00e0nh_ph\u1ea7n_\u0111\u1eb7c_t\u1ea3_CSDL_sau
+
+Generate_groups_for_author_last_names=T\u1ea1o_c\u00e1c_nh\u00f3m_cho_h\u1ecd_c\u1ee7a_t\u00e1c_gi\u1ea3
+Generate_groups_for_editor_last_names=T\u1ea1o_c\u00e1c_nh\u00f3m_cho_t\u00ean_h\u1ecd_c\u1ee7a_ng\u01b0\u1eddi_bi\u00ean_t\u1eadp
+Generate_groups_from_keywords_in_a_BibTeX_field=T\u1ea1o_c\u00e1c_nh\u00f3m_theo_t\u1eeb_kh\u00f3a_trong_m\u1ed9t_tr\u01b0\u1eddng_BibTex
+Enforce_legal_characters_in_BibTeX_keys=Bu\u1ed9c_ph\u1ea3i_d\u00f9ng_nh\u1eefng_k\u00fd_t\u1ef1_h\u1ee3p_l\u1ec7_trong_kh\u00f3a_BibTeX
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=K\u00fd_t\u1ef1_#_kh\u00f4ng_\u0111\u01b0\u1ee3c_ph\u00e9p_d\u00f9ng_trong_c\u00e1c_chu\u1ed7i_BibTeX,_tr\u1eeb_khi_c\u00f3_d\u1ea5u_tho\u00e1t,_v\u00ed_d\u1ee5_nh\u01b0_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Tr\u01b0\u1edbc_khi_l\u01b0u,_vui_l\u00f2ng_ch\u1ec9nh_s\u1eeda_t\u1ea5t_c\u1ea3_c\u00e1c_chu\u1ed7i_ch\u1ee9a_k\u00fd_t\u1ef1__#.
+
+Save_without_backup?=L\u01b0u_kh\u00f4ng_c\u00f3_b\u1ea3n_d\u1ef1_ph\u00f2ng?
+Unable_to_create_backup=Kh\u00f4ng_th\u1ec3_t\u1ea1o_b\u1ea3n_d\u1ef1_ph\u00f2ng
+
+File_directory_is_not_set_or_does_not_exist.=Th\u01b0_m\u1ee5c_t\u1eadp_tin_kh\u00f4ng_\u0111\u01b0\u1ee3c_thi\u1ebft_l\u1eadp_ho\u1eb7c_kh\u00f4ng_t\u1ed3n_t\u1ea1i.
+Move_file_to_file_directory.=Di_chuy\u1ec3n_t\u1eadp_tin_v\u00e0o_th\u01b0_m\u1ee5c_t\u1eadp_tin.
+Rename_file_to=\u0110\u1ed5i_t\u00ean_t\u1eadp_tin_th\u00e0nh
+<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>T\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c</b>_(kh\u00f4ng_th\u1ec3_ch\u1ec9nh_s\u1eeda_ho\u1eb7c_lo\u1ea1i_b\u1ecf_nh\u00f3m_n\u00e0y)
+static_group=nh\u00f3m_t\u0129nh
+dynamic_group=nh\u00f3m_\u0111\u1ed9ng
+refines_supergroup=tinh_ch\u1ec9nh_l\u1ea1i_nh\u00f3m_l\u1edbn
+includes_subgroups=k\u1ec3_c\u1ea3_c\u00e1c_nh\u00f3m_con
+contains=ch\u1ee9a
+dynamic_group=nh\u00f3m_\u0111\u1ed9ng
+search_expression=bi\u1ec3u_th\u1ee9c_t\u00ecm
+
+Disable_file_renaming_in_non-native_file_dialog=B\u1ea5t_ho\u1ea1t_vi\u1ec7c_\u0111\u1ed5i_t\u00ean_trong_h\u1ed9p_tho\u1ea1i_t\u1eadp_tin_kh\u00f4ng_ph\u1ea3i_thu\u1ed9c_ch\u01b0\u01a1ng_tr\u00ecnh
+File_dialog=H\u1ed9p_tho\u1ea1i_T\u1eadp_tin
+No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=Kh\u00f4ng_t\u00ecm_th\u1ea5y_m\u1ee5c_n\u00e0o._C\u00f3_v\u1ebb_nh\u01b0_b\u1ea1n_kh\u00f4ng_c\u00f3_quy\u1ec1n_truy_c\u1eadp_\u0111\u1ec3_t\u00ecm_ki\u1ebfm_trong_JStor.
+
+Search_ScienceDirect=T\u00ecm_tr\u00ean_ScienceDirect
+Error_while_fetching_from_ScienceDirect=L\u1ed7i_khi_\u0111ang_l\u1ea5y_v\u1ec1_d\u1eef_li\u1ec7u_t\u1eeb_ScienceDirect
+
+Error_initializing_custom_export_format_from_string_'%0'=L\u1ed7i_khi_kh\u1edfi_t\u1ea1o_\u0111\u1ecbnh_d\u1ea1ng_xu\u1ea5t_t\u00f9y_ch\u1ecdn_t\u1eeb_chu\u1ed7i_'%0'
+BibLaTeX_mode=
+Optional_fields_2=
+Please_wait=
+Waiting_for_save_operation_to_finish=
+Resolving_duplicate_BibTeX_keys...=
+Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=
+This_database_contains_one_or_more_duplicated_BibTeX_keys.=
+Do_you_want_to_resolve_duplicate_keys_now?=
+Find_and_remove_duplicate_BibTeX_keys=
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=
+Duplicate_BibTeX_key=
+Duplicate_key=
+Generate_key=
+Import_marking_color=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=T\u00ecm_th\u1ea5y_%0_m\u1ee5c._\u0110\u1ec3_gi\u1ea3m_t\u1ea3i_cho_server,_ch\u1ec9_c\u00f3_%1_s\u1ebd_\u0111\u01b0\u1ee3c_n\u1ea1p._S\u1ebd_r\u1ea5t_ch\u1eadm,_\u0111\u1ec3_\u0111\u1ea3m_b\u1ea3o_ACM_"h\u00e0i_l\u00f2ng".
+BibTeX_importer=Tr\u00ecnh_nh\u1eadp_BibTeX
+Always_add_letter_(a,_b,_...)_to_generated_keys=
+
+Ensure_unique_keys_using_letters_(a,_b,_...)=
+Ensure_unique_keys_using_letters_(b,_c,_...)=
+Entry_editor_active_background_color=
+Entry_editor_background_color=
+Entry_editor_font_color=
+Entry_editor_invalid_field_color=
+
+Table_and_entry_editor_colors=
+
+An_autosave_file_was_found_for_this_database._This_could_indicate_=
+that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=
+General_file_directory=
+User-specific_file_directory=
+Error_setting_look_and_feel=
+Search_failed\:_illegal_search_expression=
+Show_ArXiv_column=
+<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=
+
+You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=
+Automatically_open_browse_dialog_when_creating_new_file_link=
+
+Import_Metadata_from\:=
+Choose_the_source_for_the_metadata_import=
+Create_entry_based_on_XMP_data=
+Create_entry_based_on_data_fetched_from=
+Create_blank_entry_linking_the_PDF=
+Only_attach_PDF=
+Mr._dLib_Metadata_Entries_Associated_With\:=
+Mr._dLib_Metadata_Entries_Associated_With_PDF_File=
+Title=
+Author(s)=
+Published_Year=
+No_metadata_found.=
+Mr._dLib_web_service_is_temporarily_unavailable.=
+Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=
+You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=
+No_Internet_Connection.=
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=
+Web_Service_Version_Outdated=
+The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=
+Update_empty_fields_with_data_fetched_from=
+Create_New_Entry=
+Update_Existing_Entry=
+Mr._dLib=
+More_information=
+Fetching_Metadata...=
+Metadata=
+Autocomplete_names_in_'Firstname_Lastname'_format_only=
+Autocomplete_names_in_'Lastname,_Firstname'_format_only=
+Autocomplete_names_in_both_formats=
+Marking_color_%0=
+The_name_'comment'_can_not_be_used_as_an_entry_type_name.=
+You_must_enter_an_integer_value_in_the_text_field_for=
+File_directory=
+Send_as_email=
+References=
+Sending_of_emails=
+Subject_for_sending_an_email_with_references=
+Automatically_open_folders_of_attached_files=
+Create_entry_based_on_content=
+Store_choice_as_default=
+Do_not_show_this_box_again_for_this_import=
+Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=
+Error_creating_email=
+Could_not_open_directory=
+Entries_added_to_an_email=
+exportFormat=
+Output_file_missing=
+No_search_matches.=
+The_output_option_depends_on_a_valid_input_option.=
+Default_import_style_for_drag&drop_of_PDFs=
+Default_PDF_file_link_action=
+File_name_format_pattern=
+PostgreSQL_database=
+DIN_1505=
+Wrong_Format=
+Path_to_gnuclient_or_emacsclient=
+Additional_parameters=
+Encrypted_documents_are_not_supported=
+Cite_selected_entries=
+Cite_selected_entries_with_in-text_citation=
+Cite_special=
+Extra_information_(e.g._page_number)=
+Manage_citations=
+Problem_modifying_citation=
+Citation=
+Context=
+Extra_information=
+Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=
+Styles=
+Select_style=
+This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=
+Journals=
+Cite=
+Cite_in-text=
+Insert_empty_citation=
+Merge_citations=
+Manual_connect=
+Select_Writer_document=
+Sync_OO_bibliography=
+OpenOffice=
+Select_which_open_Writer_document_to_work_on=
+Connected_to_document=
+Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=
+Cite_selected_entries_with_extra_information=
+Ensure_that_the_bibliography_is_up-to-date=
+Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=
+Unable_to_synchronize_bibliography=
+Combine_pairs_of_citations_that_are_separated_by_spaces_only=
+Autodetection_failed=
+Connecting=
+Please_wait...=
+Unable_to_connect=
+Set_connection_parameters=
+Path_to_OpenOffice_directory=
+Path_to_OpenOffice_executable=
+Path_to_OpenOffice_library_dir=
+Autodetect=
+Connection_lost=
+The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=
+The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=
+Automatically_sync_bibliography_when_inserting_citations=
+Look_up_BibTeX_entries_in_the_active_tab_only=
+Look_up_BibTeX_entries_in_all_open_databases=
+Use_in-parenthesis_citation=
+Use_in-text_citation=
+Autodetecting_paths...=
+Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=
+Could_not_find_OpenOffice_installation=
+Directories=
+Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=
+Choose_OpenOffice_executable=
+Select_document=
+Edit_Group_Membership=
+PostgreSQL=
+Highlight_Words=
+JSTOR_import_cancelled=
+HTML_list=
+Click_group_to_toggle_membership_of_selected_entries=
+Use_EMACS_23_insertion_string=
+Normalize_to_BibTeX_name_format=
+If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=
+Could_not_open_%0=
+Unknown_import_format=
+Open_INSPIRE_entry=
+An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=
+Error_while_fetching_from_Inspire\:_=
+Web_search=
+Autocomplete_names=
+You_must_select_either_a_valid_style_file,_or_use_the_default_style.=
+Default_style=
+Choose_style_file_directly=
+Choose_from_a_directory=
+No_directory_defined_for_%0-files=
+Allow_file_links_relative_to_each_bib_file's_location=
+Style_selection=
+The_panel_below_shows_the_definition_of_the_default_style.=
+If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=
+
+Default_style_(author-year_citations)=
+Default_style_(numerical_citations)=
+No_valid_style_file_defined=
+Choose_pattern=
+Use_the_bib_file_location_as_primary_file_directory=
+Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=
+Built-in_journal_list=
+OpenOffice/LibreOffice_connection=
+You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=
+JabRef_includes_a_built-in_list_of_journal_abbreviations.=
+You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=
+You_must_select_either_a_valid_style_file,_or_use_a_default_style.=
+
+Show=
+This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=
+Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=
+
+This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=
+You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=
+First_select_entries_to_clean_up.=
+Cleanup_entry=
+Autogenerate_PDF_Names=
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=
+File_rename_failed_for=
+You_have_toggled_the_BibLaTeX_mode.=
+Use_full_firstname_whenever_possible=
+Use_abbreviated_firstname_whenever_possible=
+Use_abbreviated_and_full_firstname=
+Autocompletion_options=
+Autocomplete_after_following_number_of_characters=
+Name_format_used_for_autocompletion=
+Treatment_of_first_names=
+No_icon_found_for_%0=
+Cleanup_entries=
+Automatically_assign_new_entry_to_selected_groups=
+Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
+Format_content_of_month_field_to_#mon#=
+Ensure_that_page_ranges_are_of_the_form_num1--num2=
+Make_paths_of_linked_files_relative_(if_possible)=
+Rename_PDFs_to_given_file_name_format_pattern=
+Rename_only_PDFs_having_a_relative_path=
+What_would_you_like_to_clean_up?=
+Doing_a_cleanup_for_%0_entries...=
+No_entry_needed_a_clean_up=
+One_entry_needed_a_clean_up=
+%0_entries_needed_a_clean_up=
+Imported_=
+Error_importing_from_database=
+Minimize_to_system_tray=
+
+Incomplete_search_results=
+%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=
+
+Error_downloading_file_'%0'=
+Download_failed=
+
+%0_databases_will_be_imported=
+Importing_cancelled=
+There_are_no_available_databases_to_be_imported=
+Import_from_SQL_database=
+Imported_%0_databases_successfully=
+<_CREATE_NEW_DATABASE_>=
+Remove_Selected=
+SQL_Database_Exporter=
+Select_target_SQL_database\:=
+SQL_Database_Importer=
+Please_select_which_JabRef_databases_do_you_want_to_import\:=
+
+Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
+Attach_file=
+
+Setting_all_preferences_to_default_values.=
+Resetting_preference_key_'%0'=
+Unknown_preference_key_'%0'=
+Unable_to_clear_preferences.=
+
+Reset_preferences_(key1,key2,..._or_'all')=
+Find_unlinked_files=
+Select_All=
+Unselect_All=
+Expand_All=
+Collapse_All=
+Select_Directory=
+Choose_Directory=
+Use_the_selected_directory_to_start_with_the_search.=
+Browse...=
+Opens_the_file_browser.=
+Scan_directory=
+Searches_the_selected_directory_for_unlinked_files.=
+Starts_the_import_of_bibtex_entries.=
+Leave_this_dialog.=
+Create_directory_based_keywords=
+Creates_keywords_in_created_entrys_with_directory_pathnames=
+Select_a_directory_where_the_search_shall_start.=
+Select_file_type\:=
+These_files_are_not_linked_in_the_active_database.=
+Entry_type_to_be_created\:=
+Searching_file_system...=
+Importing_into_Database...=
+Select_directory=
+Select_files=
+Bibtex_entry_creation=
+<No_selection>=
+Push_selection_to_TeXstudio=
+Path_to_TeXstudio=
+Program_'%0'_not_found=
+Pushed_citations_to_TeXstudio=
+Unable_to_connect_to_freecite_online_service.=
+Parse_with_FreeCite=
+Insert_selected_citations_into_TeXstudio=
+The_current_BibTeX_key_will_be_overwritten._Continue?=
+Overwrite_key=
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
+An_Error_occurred_while_fetching_from_ADS_(%0)\:=
+Error_while_fetching_from_ADS=
+Error_while_fetching_from_OAI2=
+An_Error_occurred_while_parsing_abstract=
+Unknown_DiVA_entry\:_'%0'.=
+Get_BibTeX_entry_from_DiVA=
+Log=
+Remove_unneccessary_$,_{,_and_}=
diff --git a/src/resource/JabRef_zh.properties b/src/resource/JabRef_zh.properties
index 1ff72d6..08d34fe 100644
--- a/src/resource/JabRef_zh.properties
+++ b/src/resource/JabRef_zh.properties
@@ -1,2423 +1,2423 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-
-%0_contains_the_Regular_Expression_<b>%1</b>=%0_\u5305\u542b\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%1</b>
-
-%0_contains_the_term_<b>%1</b>=%0_\u5305\u542b\u8bcd\u7ec4_<b>%1</b>
-
-%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_\u4e0d\u5305\u542b\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%1</b>
-
-%0_doesn't_contain_the_term_<b>%1</b>=%0_\u4e0d\u5305\u542b\u8bcd\u7ec4_<b>%1</b>
-
-%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_\u4e0d\u5339\u914d\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%1</b>
-
-%0_doesn't_match_the_term_<b>%1</b>=%0_\u4e0d\u5339\u914d\u8bcd\u7ec4_<b>%1</b>
-
-%0_export_successful=%0_\u5bfc\u51fa\u6210\u529f
-
-%0_field_set=%0_\u57df\u88ab\u4fee\u6539
-
-%0_matches_the_Regular_Expression_<b>%1</b>=%0_\u5339\u914d\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%1</b>
-
-%0_matches_the_term_<b>%1</b>=%0_\u5339\u914d\u8bcd\u7ec4_<b>%1</b>
-
-<field_name>=<\u57df\u540d\u79f0>
-<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>\u65e0\u6cd5\u627e\u5230\u8bb0\u5f55'%1'\u94fe\u63a5\u7684\u6587\u4ef6'%0'</HTML>
-
-<no_field>=<\u6ca1\u6709\u57df>
-
-<select>=<\u9009\u62e9>
-
-<select_word>=<\u4e0b\u62c9\u83dc\u5355\u9879>
-A_string_with_this_label_already_exists=\u8be5\u6807\u7b7e\u5bf9\u5e94\u7684\u7b80\u5199\u5b57\u4e32\u5df2\u5b58\u5728
-Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=\u7f29\u5199\u9009\u4e2d\u8bb0\u5f55\u7684\u671f\u520a\u540d_(ISO_\u683c\u5f0f\u7f29\u5199)
-Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=\u7f29\u5199\u9009\u4e2d\u8bb0\u5f55\u7684\u671f\u520a\u540d_(MEDLINE_\u683c\u5f0f\u7f29\u5199)
-
-Abbreviate_names=\u7f29\u5199\u540d
-Abbreviated_%0_journal_names.=\u7f29\u5199\u7684_%0_\u671f\u520a\u540d\u79f0\u3002
-
-Abbreviation=\u7f29\u5199
-
-About_JabRef=\u5173\u4e8e_JabRef
-
-Abstract=\u6458\u8981
-
-Accept=\u63a5\u53d7
-
-Accept_change=\u63a5\u53d7\u4fee\u6539
-
-Action=\u52a8\u4f5c
-
-Add=\u6dfb\u52a0
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=\u4ece\u4e00\u4e2a_class_path_\u6dfb\u52a0(\u7f16\u8bd1\u597d\u7684)\u81ea\u5b9a\u4e49\u5bfc\u5165\u7c7b\u3002\n\u8be5\u8def\u5f84\u4e0d\u9700\u8981\u5728_JabRef_\u7684_classpath_\u4e0b\u3002
-
-Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=\u4ece\u4e00\u4e2a_Zip_\u538b\u7f29\u5305\u4e2d\u6dfb\u52a0(\u7f16\u8bd1\u597d\u7684)\u81ea\u5b9a\u4e49\u5bfc\u5165\u7c7b\u3002\n\u8be5_Zip_\u538b\u7f29\u5305\u4e0d\u9700\u8981\u5728_JabRef_\u7684_classpath_\u4e0b\u3002
-
-add_entries_to_group=\u6dfb\u52a0\u8bb0\u5f55\u5230\u5206\u7ec4
-
-Add_entry_selection_to_this_group=\u6dfb\u52a0\u9009\u4e2d\u8bb0\u5f55\u5230\u6b64\u5206\u7ec4
-
-Add_from_folder=\u4ece\u6587\u4ef6\u5939\u4e2d\u6dfb\u52a0
-
-Add_from_jar=\u4ece_jar_\u4e2d\u6dfb\u52a0
-
-add_group=\u6dfb\u52a0\u5206\u7ec4
-
-Add_Group=\u6dfb\u52a0\u5206\u7ec4
-
-Add_new=\u65b0\u5efa
-
-Add_Subgroup=\u6dfb\u52a0\u5b50\u5206\u7ec4
-
-Add_to_group=\u6dfb\u52a0\u5230\u5206\u7ec4
-
-Added_group_"%0".=\u5df2\u6dfb\u52a0\u5206\u7ec4_"%0"\u3002
-
-Added_new=\u5df2\u6dfb\u52a0
-
-Added_string=\u5df2\u6dfb\u52a0\u5b57\u7b26\u4e32
-
-Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=\u6b64\u5916\uff0c\u90a3\u4e9b\u201c<b>%0</b>\u201d\u57df\u91cc\u4e0d\u [...]
-
-Advanced=\u9ad8\u7ea7
-All_custom_file_types_will_be_lost._Proceed?=\u6240\u6709\u7684\u81ea\u5b9a\u4e49\u6587\u4ef6\u7c7b\u578b\u5c06\u4e22\u5931\uff0c\u662f\u5426\u7ee7\u7eed\uff1f
-
-All_Entries=\u6240\u6709\u8bb0\u5f55
-
-All_entries=\u6240\u4ee5\u8bb0\u5f55
-All_entries_of_this_type_will_be_declared_typeless._Continue?=\u6240\u6709\u6b64\u7c7b\u578b\u8bb0\u5f55\u5c06\u88ab\u6807\u8bb0\u4e3a\u65e0\u7c7b\u578b\u8bb0\u5f55\uff0c\u662f\u5426\u7ee7\u7eed\uff1f
-
-All_fields=\u6240\u6709\u57df
-
-All_subgroups_(recursively)=\u6240\u6709\u5b50\u5206\u7ec4(\u9012\u5f52\u5730)
-
-Allow_editing_in_table_cells=Allow_editing_in_table_cells
-An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=\u5f53\u4ece_OAI2_\u6e90_(%0)_\u6293\u53d6\u65f6\u53d1\u751f\u4e86\u4e00\u4e2a\u9519\u8bef:
-An_Exception_ocurred_while_accessing_'%0'=\u5f53\u8bbf\u95ee_'%0'_\u65f6\u53d1\u751f\u4e86\u4e00\u4e2a\u5f02\u5e38
-An_SAXException_ocurred_while_parsing_'%0'\:=\u5f53\u89e3\u6790'%0'\u65f6\u53d1\u751f\u4e86\u4e00\u4e2a_SAXException:
-
-and=\u548c
-and_inside_the_JabRef-jar\:=\u548c_JabRef-jar_\u4e2d\:
-
-and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=\u5e76\u4e14\u4e0b\u6b21\u60a8\u542f\u52a8_JabRef_\u7684\u65f6\u5019\uff0c\u8bf7\u786e\u4fdd\u8be5\u7c7b\u5728\u60a8\u7684_classpath_\u4e2d\u3002
-
-any_field_that_matches_the_regular_expression_<b>%0</b>=\u5339\u914d\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%0</b>_\u7684\u4efb\u4f55\u57df
-
-Appearance=\u5916\u89c2
-
-Append=\u8ffd\u52a0
-Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=\u4ece\u4e00\u4e2a_BibTeX_\u6570\u636e\u5e93\u8ffd\u52a0\u5185\u5bb9\u5230\u5f53\u524d\u67e5\u770b\u7684\u6570\u636e\u5e93
-
-Append_database=\u8ffd\u52a0\u6570\u636e\u5e93
-
-append_the_selected_text_to_bibtex_key=\u8ffd\u52a0\u9009\u4e2d\u7684\u6587\u672c\u5230_BibTeX_\u952e\u503c
-Application=\u5e94\u7528\u7a0b\u5e8f
-
-Apply=\u5e94\u7528
-
-Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=\u53c2\u6570\u4f20\u9012\u7ed9\u4e86\u6b63\u5728\u6267\u884c\u7684_JabRef_\u5b9e\u4f8b\uff0c\u5173\u95ed\u81ea\u8eab\u7a0b\u5e8f\u3002
-
-Assign_entry_selection_exclusively_to_this_group=\u6392\u5b83\u5730\u5206\u914d\u8bb0\u5f55\u5230\u6b64\u5206\u7ec4
-
-Assign_new_file=\u5206\u914d\u65b0\u6587\u4ef6
-
-Assign_the_original_group's_entries_to_this_group?=\u5c06\u539f\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55\u5206\u914d\u5230\u6b64\u5206\u7ec4\uff1f
-
-Assigned_%0_entries_to_group_"%1".=\u5206\u914d\u4e86_%0_\u6761\u8bb0\u5f55\u5230\u5206\u7ec4_"%1".
-
-Assigned_1_entry_to_group_"%0".=\u5206\u914d\u4e86_1_\u6761\u8bb0\u5f55\u5230\u5206\u7ec4_"%0".
-At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=\u81f3\u5c11\u63d2\u4ef6_'net.sf.jabref.core'_\u5e94\u8be5\u5728\u90a3\u91cc\u3002
-
-Attach_%0_file=\u9644\u52a0\u201c%0\u201d\u6587\u4ef6
-
-Attach_URL=\u9644\u52a0_URL
-
-Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=\u5c1d\u8bd5\u4e3a\u60a8\u7684\u8bb0\u5f55\u81ea\u52a8\u8bbe\u7f6e_%0_\u94fe\u63a5\uff0c\u8be5\u64cd\u4f5c\u8981\u6c42\u548c\u8bb0\u5f55_BibTeX_\u952e\u540c\u540d\u7684_%0_\u6587\u4ef6\u5b58\u5728\u4e8e\u60a8\u7684_%0_\u76ee\u5f55\u6216\u8005\u5b50\u76ee\u5f55\u4e2d\u3002
-Attempting_SQL_export...=\u5c1d\u8bd5_SQL_\u5bfc\u51fa...
-
-Auto=\u81ea\u52a8
-
-Autodetect_format=\u81ea\u52a8\u68c0\u6d4b\u683c\u5f0f
-
-Autogenerate_BibTeX_key=\u81ea\u52a8\u751f\u6210_BibTeX_\u952e
-Autogenerate_BibTeX_keys=\u81ea\u52a8\u751f\u6210_BibTeX_\u952e
-
-Autogenerate_groups=\u81ea\u52a8\u751f\u6210\u5206\u7ec4
-
-autogenerate_keys=\u81ea\u52a8\u751f\u6210_BibTeX_\u952e
-Autolink_files_with_names_starting_with_the_BibTeX_key=\u81ea\u52a8\u94fe\u63a5\u6587\u4ef6\u540d\u4ee5_BibTeX_\u952e\u5f00\u5934\u7684\u6587\u4ef6
-
-Autolink_only_files_that_match_the_BibTeX_key=\u81ea\u52a8\u94fe\u63a5\u6587\u4ef6\u540d\u5339\u914d_BibTeX_\u952e\u7684\u6587\u4ef6
-
-Automatically_create_groups=\u81ea\u52a8\u521b\u5efa\u5206\u7ec4
-
-Automatically_create_groups_for_database.=\u81ea\u52a8\u4e3a\u6570\u636e\u5e93\u521b\u5efa\u5206\u7ec4\u3002
-
-Automatically_created_groups=\u81ea\u52a8\u521b\u5efa\u7684\u5206\u7ec4
-
-Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=\u5f53\u5207\u6362\u5230\u4e00\u4e2a\u4e0d\u5305\u542b\u5206\u7ec4\u7684\u6570\u636e\u5e93\u65f6\u81ea\u52a8\u9690\u85cf\u5206\u7ec4\u754c\u9762
-
-Automatically_remove_exact_duplicates=\u81ea\u52a8\u79fb\u9664\u5b8c\u5168\u91cd\u590d\u7684\u9879
-
-Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=\u5f53\u5207\u6362\u5230\u4e00\u4e2a\u5305\u542b\u5206\u7ec4\u7684\u6570\u636e\u5e93\u65f6\u81ea\u52a8\u6253\u5f00\u5206\u7ec4\u754c\u9762
-
-Autoset=\u81ea\u52a8\u8bbe\u7f6e
-
-Autoset_%0_field=\u81ea\u52a8\u8bbe\u7f6e_%0_\u57df
-
-Autoset_%0_links._Allow_overwriting_existing_links.=\u81ea\u52a8\u8bbe\u7f6e_%0_\u94fe\u63a5\uff0c\u5141\u8bb8\u8986\u76d6\u5df2\u6709\u94fe\u63a5\u3002
-
-Autoset_%0_links._Do_not_overwrite_existing_links.=\u81ea\u52a8\u8bbe\u7f6e_%0_\u94fe\u63a5\uff0c\u4e0d\u8981\u8986\u76d6\u5df2\u6709\u94fe\u63a5\u3002
-Autoset_external_links=\u81ea\u52a8\u8bbe\u7f6e\u5916\u90e8\u94fe\u63a5
-Autosetting_links=\u6b63\u5728\u81ea\u52a8\u8bbe\u7f6e\u94fe\u63a5
-
-AUX_file_import=AUX_\u6587\u4ef6\u5bfc\u5165
-
-Available_export_formats=\u53ef\u7528\u7684\u5bfc\u51fa\u683c\u5f0f
-
-Available_fields=\u53ef\u7528\u7684_BibTeX_\u57df
-
-Available_import_formats=\u53ef\u7528\u7684\u5bfc\u5165\u683c\u5f0f
-
-Background_color_for_optional_fields=\u53ef\u9009\u57df\u7684\u80cc\u666f\u989c\u8272
-
-Background_color_for_required_fields=\u5fc5\u9009\u57df\u7684\u80cc\u666f\u989c\u8272
-
-Backup_old_file_when_saving=\u4fdd\u5b58\u6570\u636e\u5e93\u65f6\u4fdd\u7559\u5907\u4efd
-Beta_version=Beta_\u7248\u672c
-
-Bibkey_to_filename_conversion=Bibkey_\u5230\u6587\u4ef6\u540d\u8f6c\u6362
-
-BibTeX_key=BibTeX_\u952e
-
-BibTeX_key_is_unique.=BibTeX_\u952e\u503c\u662f\u552f\u4e00\u7684\u3002
-
-BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX_\u952e\u503c\u672a\u8bbe\u7f6e\uff0c\u4e3a\u4e0b\u8f7d\u7684\u6587\u4ef6\u8f93\u5165\u4e00\u4e2a\u540d\u5b57
-
-BibTeX_source=BibTeX_\u6e90\u4ee3\u7801
-
-BibTeXML=BibTeXML
-
-Binding=\u7ed1\u5b9a
-Broken_link=\u5931\u6548\u94fe\u63a5
-
-Browse=\u6d4f\u89c8...
-
-by=\u4e3a
-
-Calling_external_viewer...=\u6b63\u5728\u8c03\u7528\u5916\u90e8\u67e5\u770b\u5668...
-
-Cancel=\u53d6\u6d88
-
-Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=\u4e0d\u751f\u6210_BibTeX_\u952e\u5c31\u65e0\u6cd5\u6dfb\u52a0\u8bb0\u5f55\u5230\u5206\u7ec4\uff0c\u73b0\u5728\u751f\u6210\u952e\u503c\uff1f
-
-Cannot_merge_this_change=\u65e0\u6cd5\u5408\u5e76\u8be5\u66f4\u6539
-
-Cannot_move_group_"%0"_down.=\u65e0\u6cd5\u4e0b\u79fb\u5206\u7ec4_"%0"\u3002
-
-Cannot_move_group_"%0"_left.=\u65e0\u6cd5\u5de6\u79fb\u5206\u7ec4_"%0"\u3002
-
-Cannot_move_group_"%0"_right.=\u65e0\u6cd5\u53f3\u79fb\u5206\u7ec4_"%0"\u3002
-
-Cannot_move_group_"%0"_up.=\u65e0\u6cd5\u4e0a\u79fb\u5206\u7ec4_"%0"\u3002
-
-case_insensitive=\u5ffd\u7565\u5927\u5c0f\u5199
-
-case_sensitive=\u533a\u5206\u5927\u5c0f\u5199
-
-Case_sensitive=\u533a\u5206\u5927\u5c0f\u5199
-
-change_assignment_of_entries=\u4fee\u6539\u8bb0\u5f55\u7684\u7ec4\u5206\u914d
-
-Change_case=\u4fee\u6539\u5927\u5c0f\u5199
-
-Change_entry_type=\u66f4\u6539\u8bb0\u5f55\u7c7b\u578b
-Change_file_type=\u66f4\u6539\u6587\u4ef6\u7c7b\u578b
-
-change_key=\u4fee\u6539\u952e\u503c
-
-Change_of_Grouping_Method=\u5206\u7ec4\u65b9\u6cd5\u6539\u53d8
-
-change_preamble=\u4fee\u6539\u5bfc\u8a00\u533a_(preamble)
-
-change_string_content=\u66f4\u6539\u5b57\u7b26\u4e32\u5185\u5bb9
-
-change_string_name=\u4fee\u6539\u7b80\u5355\u5b57\u4e32\u540d\u79f0
-Change_table_column_and_General_fields_settings_to_use_the_new_feature=\u4fee\u6539\u5217\u5916\u89c2\u548c_General_\u57df\u8bbe\u7f6e\u4ee5\u4f7f\u7528\u65b0\u7279\u6027
-
-change_type=\u4fee\u6539\u7c7b\u578b
-
-changed_=\u5df2\u4fee\u6539_
-
-Changed_font_settings=\u5df2\u4fee\u6539\u5b57\u4f53\u8bbe\u7f6e
-
-Changed_language_settings=\u5df2\u4fee\u6539\u8bed\u8a00\u8bbe\u7f6e
-
-Changed_look_and_feel_settings=\u5df2\u4fee\u6539\u89c6\u89c9\u6548\u679c\u7c7b_(look_and_feel)_\u8bbe\u7f6e
-
-Changed_preamble=\u5df2\u4fee\u6539\u5bfc\u8a00\u533a_(preamble)
-
-Changed_type_to=\u4fee\u6539\u7c7b\u578b\u4e3a
-
-Characters_to_ignore=\u8981\u5ffd\u7565\u7684\u5b57\u7b26
-
-Check_existing_%0_links=\u68c0\u67e5\u5b58\u5728\u7684%0\u94fe\u63a5
-
-Check_links=\u6838\u5bf9\u94fe\u63a5
-
-Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=\u9009\u62e9_URL_\u4e0b\u8f7d\uff0c\u9ed8\u8ba4\u503c\u6307\u5411_JabRef_\u5f00\u53d1\u8005\u63d0\u4f9b\u7684\u4e00\u4e2a\u5217\u8868\u3002
-Cite_command=\u5f15\u7528\u547d\u4ee4
-
-Class_name=\u7c7b\u540d
-
-Clear=\u6e05\u9664
-
-clear_all_groups=\u6e05\u9664\u6240\u6709\u5206\u7ec4
-
-Clear_field=\u6e05\u9664\u57df\u5185\u5bb9
-Clear_fields=\u6e05\u9664\u57df\u5185\u5bb9
-
-Clear_highlight=\u6e05\u9664\u9ad8\u4eae
-
-Close=\u5173\u95ed
-
-Close_dialog=\u5173\u95ed\u5bf9\u8bdd\u6846
-
-Close_the_current_database=\u5173\u95ed\u5f53\u524d\u6570\u636e\u5e93
-
-Close_the_help_window=\u5173\u95ed\u5e2e\u52a9\u7a97\u53e3
-
-Close_window=\u5173\u95ed\u7a97\u53e3
-
-Closed_database=\u5173\u95ed\u6570\u636e\u5e93
-
-Collapse_subtree=\u6298\u53e0\u5b50\u6811
-
-Color_codes_for_required_and_optional_fields=\u5217\u8868\u8bb0\u5f55\u9879\u7684\u53ef\u9009\u57df\u548c\u5fc5\u9009\u57df\u7528\u4e0d\u540c\u989c\u8272\u663e\u793a
-
-Color_for_marking_incomplete_entries=\u6807\u8bb0\u4e0d\u5b8c\u6574\u8bb0\u5f55\u7684\u989c\u8272
-
-Column_width=\u5217\u5bbd
-
-Command_line_id=\u547d\u4ee4\u884c_id
-
-Complete_record=\u5b8c\u6210\u8bb0\u5f55
-Connect=\u8fde\u63a5
-Connect_to_SQL_database=\u8fde\u63a5_SQL_\u6570\u636e\u5e93
-Connect_to_SQL_Database=\u8fde\u63a5_SQL_\u6570\u636e\u5e93
-Connection_to_IEEEXplore_failed=\u65e0\u6cd5\u8fde\u63a5\u5230_IEEEXplore\uff0c\u8fde\u63a5\u5931\u8d25\u3002
-
-Contained_in=\u5305\u542b\u5728
-
-Content=\u5185\u5bb9
-
-Copied=\u5df2\u590d\u5236
-
-Copied_cell_contents=\u5df2\u62f7\u8d1d\u5355\u5143\u683c\u5185\u5bb9
-
-Copied_key=\u5df2\u590d\u5236_BibTeX_\u952e
-
-Copied_keys=\u5df2\u590d\u5236_BibTeX_\u952e
-
-Copy=\u590d\u5236
-
-Copy_BibTeX_key=\u590d\u5236_BibTeX_\u952e
-Copy_file_to_file_directory.=\u62f7\u8d1d\u6587\u4ef6\u5230\u6587\u4ef6\u76ee\u5f55\u3002
-Copy_files_to_file_directory.=\u62f7\u8d1d\u6587\u4ef6\u5230\u6587\u4ef6\u76ee\u5f55\u3002
-
-Copy_to_clipboard=\u590d\u5236\u5230\u526a\u8d34\u677f
-
-Could_not_call_executable=\u65e0\u6cd5\u8c03\u7528\u53ef\u6267\u884c\u6587\u4ef6
-
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=\u65e0\u6cd5\u8fde\u63a5\u5230\u6b63\u5728\u8fd0\u884c\u7684_gnuserv_\u8fdb\u7a0b\uff0c\u68c0\u67e5_Emacs_\u6216_XEmacs_\u662f\u5426\u6b63\u5728\u8fd0\u884c\uff0c\u4ee5\u53ca<BR>\u670d\u52a1\u5668\u662f\u5426\u5df2\u7ecf\u542f\u52a8(\u7528_'gnuserv-start'_\u547d\u4ee4)\u3002
-
-Could_not_connect_to_host_=\u65e0\u6cd5\u8fde\u63a5\u5230\u4e3b\u673a_
-Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=\u65e0\u6cd5\u8fde\u63a5\u5230_Vim_\u670d\u52a1\u5668\uff0c\u8bf7\u68c0\u67e5_Vim_\u662f\u5426\u4ee5\u6b63\u786e\u7684_Vim_\u670d\u52a1\u5668\u540d\u9009\u9879\u542f\u52a8\u3002
-
-Could_not_export_file=\u65e0\u6cd5\u5bfc\u51fa\u6587\u4ef6
-
-Could_not_export_preferences=\u65e0\u6cd5\u5bfc\u51fa\u9996\u9009\u9879
-
-Could_not_find_a_suitable_import_format.=\u65e0\u6cd5\u627e\u5230\u7b26\u5408\u7684\u5bfc\u5165\u683c\u5f0f.
-Could_not_find_directory_for_%0-files\:_%1=\u65e0\u6cd5\u627e\u5230_%0-\u6587\u4ef6\u7684\u76ee\u5f55:_%1
-Could_not_find_image_file=\u65e0\u6cd5\u627e\u5230\u56fe\u50cf\u6587\u4ef6
-
-Could_not_find_layout_file=\u65e0\u6cd5\u627e\u5230_layout_\u6587\u4ef6
-
-Could_not_import_preferences=\u65e0\u6cd5\u5bfc\u5165\u9996\u9009\u9879
-
-Could_not_instantiate_%0=\u65e0\u6cd5\u4f8b\u793a_%0
-Could_not_instantiate_%0_%1=\u65e0\u6cd5\u4f8b\u793a_%0_%1
-Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=\u65e0\u6cd5\u4f8b\u793a_%0\uff0c\u60a8\u9009\u62e9\u4e86\u6b63\u786e\u7684\u5305\u8def\u5f84\u5417\uff1f
-Could_not_open_link=\u65e0\u6cd5\u6253\u5f00\u94fe\u63a5
-
-Could_not_parse_number_of_hits=\u65e0\u6cd5\u89e3\u6790\u70b9\u51fb\u6570
-Could_not_print_preview=\u65e0\u6cd5\u6253\u5370\u9884\u89c8
-Could_not_run_the_'vim'_program.=\u65e0\u6cd5\u8fd0\u884c_'vim'_\u7a0b\u5e8f\u3002
-
-Could_not_save_file=\u65e0\u6cd5\u4fdd\u5b58\u6587\u4ef6
-Could_not_save_file._Character_encoding_'%0'_is_not_supported.=\u65e0\u6cd5\u4fdd\u5b58\u6587\u4ef6\uff0c\u4e0d\u652f\u6301\u7f16\u7801_'%0'\u3002
-
-Create_group=\u65b0\u5efa\u5206\u7ec4
-
-Created_groups.=\u5efa\u7acb\u5206\u7ec4
-
-crossreferenced_entries_included=\u5305\u542b\u4ea4\u53c9\u5f15\u7528\u7684\u8bb0\u5f55
-
-Current_content=\u5f53\u524d\u5185\u5bb9
-
-Current_value=\u5f53\u524d\u503c
-
-Custom_entry_types=\u81ea\u5b9a\u4e49\u7684\u8bb0\u5f55\u7c7b\u578b
-
-Custom_entry_types_found_in_file=\u6587\u4ef6\u4e2d\u5305\u542b\u81ea\u5b9a\u4e49\u7684\u8bb0\u5f55\u7c7b\u578b
-Custom_icon_theme=\u81ea\u5b9a\u4e49\u56fe\u6807\u4e3b\u9898
-Custom_icon_theme_file=\u81ea\u5b9a\u4e49\u56fe\u6807\u4e3b\u9898\u6587\u4ef6
-
-Custom_importers=\u81ea\u5b9a\u4e49\u5bfc\u5165\u5668
-
-Customize_entry_types=\u81ea\u5b9a\u4e49\u8bb0\u5f55\u7c7b\u578b
-
-Customize_key_bindings=\u81ea\u5b9a\u4e49\u70ed\u952e
-
-Cut=\u526a\u5207
-
-cut_entries=\u526a\u5207\u8bb0\u5f55
-
-cut_entry=\u526a\u5207\u8be5\u8bb0\u5f55
-
-Cut_pr=\u526a\u5207
-Database_\:=\u6570\u636e\u5e93:
-
-Database_encoding=\u6570\u636e\u5e93\u7f16\u7801
-
-Database_has_changed._Do_you_want_to_save_before_closing?=\u6570\u636e\u5e93\u5df2\u88ab\u4fee\u6539\uff0c\u662f\u5426\u4fdd\u5b58\u4fee\u6539\uff1f
-
-Database_properties=\u6570\u636e\u5e93\u5c5e\u6027
-
-Date_format=\u65e5\u671f\u683c\u5f0f
-
-Default=\u9ed8\u8ba4
-
-Default_encoding=\u9ed8\u8ba4\u7f16\u7801
-
-Default_grouping_field=\u9ed8\u8ba4\u5206\u7ec4\u4f9d\u636e\u57df
-
-Default_look_and_feel=\u9ed8\u8ba4\u89c6\u89c9\u6548\u679c\u7c7b_(look_and_feel)
-
-Default_pattern=\u9ed8\u8ba4\u6a21\u5f0f
-
-Default_sort_criteria=\u9ed8\u8ba4\u6392\u5e8f\u89c4\u5219
-Define_'%0'=\u5b9a\u4e49_'%0'
-
-Delete=\u5220\u9664
-
-Delete_custom_format=\u5220\u9664\u81ea\u5b9a\u4e49\u683c\u5f0f
-
-delete_entries=\u5220\u9664\u8bb0\u5f55
-
-Delete_entry=\u5220\u9664\u8be5\u8bb0\u5f55
-
-delete_entry=\u5220\u9664\u8be5\u8bb0\u5f55
-
-Delete_multiple_entries=\u5220\u9664\u591a\u6761\u8bb0\u5f55
-
-Delete_rows=\u5220\u9664\u884c
-
-Delete_strings=\u5220\u9664\u7b80\u5199\u5b57\u4e32
-
-Deleted=\u5df2\u5220\u9664
-
-Delimit_fields_with_semicolon,_ex.=\u4f7f\u7528\u5206\u53f7\u5206\u9694\u57df\uff0c\u4f8b\u5982
-
-Descending=\u964d\u5e8f
-
-Description=\u63cf\u8ff0
-
-Deselect_all=\u53d6\u6d88\u6240\u6709\u9009\u5b9a
-Deselect_all_duplicates=\u68c0\u6d4b\u6240\u6709\u91cd\u590d\u9879
-
-Details=\u8be6\u60c5
-
-Disable_entry_editor_when_multiple_entries_are_selected=\u9009\u4e2d\u591a\u6761\u8bb0\u5f55\u662f\u5173\u95ed\u8bb0\u5f55\u7f16\u8f91\u5668
-
-Disable_this_confirmation_dialog=\u4e0d\u518d\u663e\u793a\u8fd9\u4e2a\u786e\u8ba4\u5bf9\u8bdd\u6846
-
-Disable_this_warning_dialog=\u4e0d\u518d\u663e\u793a\u8fd9\u4e2a\u8b66\u544a\u5bf9\u8bdd\u6846
-
-Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=\u663e\u793a\u5c5e\u4e8e\u9009\u4e2d\u4efb\u4e00\u5206\u7ec4\u7684\u8bb0\u5f55\uff0c\u5373\u663e\u793a\u9009\u4e2d\u5206\u7ec4\u7684\u5e76\u96c6\u3002
-
-Display_all_error_messages=\u663e\u793a\u6240\u6709\u9519\u8bef\u6d88\u606f
-
-Display_help_on_command_line_options=\u7528\u547d\u4ee4\u884c\u9009\u9879\u663e\u793a\u5e2e\u52a9
-
-Display_imported_entries_in_an_inspection_window_before_they_are_added.=\u4f7f\u7528\u5355\u72ec\u68c0\u89c6\u7a97\u53e3\u663e\u793a\u5c06\u88ab\u5bfc\u5165\u7684\u8bb0\u5f55
-
-Display_only_entries_belonging_to_all_selected_groups.=\u53ea\u663e\u793a\u5c5e\u4e8e\u6240\u6709\u9009\u4e2d\u5206\u7ec4\u7684\u8bb0\u5f55\uff0c\u5373\u663e\u793a\u9009\u4e2d\u5206\u7ec4\u7684\u4ea4\u96c6\u3002
-Display_version=\u663e\u793a\u7248\u672c
-
-Displaying_no_groups=\u975e\u5206\u7ec4\u89c6\u56fe
-
-Do_not_abbreviate_names=\u4e0d\u8981\u7f29\u5199\u59d3\u540d
-
-Do_not_autoset=\u4e0d\u8981\u81ea\u52a8\u8bbe\u7f6e
-
-Do_not_import_entry=\u4e0d\u5bfc\u5165\u8bb0\u5f55
-
-Do_not_open_any_files_at_startup=\u542f\u52a8\u65f6\u4e0d\u6253\u5f00\u4efb\u4f55\u6587\u4ef6
-
-Do_not_overwrite_existing_keys=\u4e0d\u8986\u76d6\u5df2\u5b58\u5728\u7684_BibTeX_\u952e
-Do_not_show_splash_window_at_startup=\u4e0d\u663e\u793a\u542f\u52a8\u753b\u9762
-Do_not_show_these_options_in_the_future=\u4ee5\u540e\u4e0d\u8981\u518d\u663e\u793a\u8fd9\u4e9b\u9009\u9879
-
-Do_not_wrap_the_following_fields_when_saving=\u4fdd\u5b58\u65f6\u4e0d\u8981\u5bf9\u4e0b\u5217\u57df\u6dfb\u52a0\u6362\u884c\u7b26
-Do_not_write_the_following_fields_to_XMP_Metadata\:=\u4e0d\u8981\u5c06\u4ee5\u4e0b\u57df\u5199\u5165_XMP_\u5143\u6570\u636e:
-
-Do_you_want_JabRef_to_do_the_following_operations?=\u60a8\u5e0c\u671b_JabRef_\u505a\u4ee5\u4e0b\u64cd\u4f5c\u5417\uff1f
-
-DocBook=DocBook
-
-Down=\u4e0b
-
-Download=\u4e0b\u8f7d
-
-Download_completed=\u4e0b\u8f7d\u5b8c\u6210
-
-Download_file=\u4e0b\u8f7d\u6587\u4ef6
-
-Downloading...=\u4e0b\u8f7d\u4e2d...
-Drag_and_Drop_Error=\u62d6\u653e\u9519\u8bef
-Drop_%0=\u91ca\u653e_%0
-
-duplicate_BibTeX_key=\u91cd\u590d\u7684_BibTeX_\u952e\u503c
-
-Duplicate_BibTeX_key.=\u91cd\u590d\u7684_BibTeX_\u952e\u503c\u3002
-
-Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=\u91cd\u590d\u7684_BibTeX_\u952e\uff0c\u8be5\u8bb0\u5f55\u53ef\u80fd\u65e0\u6cd5\u88ab\u5206\u7ec4\u3002
-
-Duplicate_Key_Warning=\u91cd\u590d\u952e\u503c\u8b66\u544a
-
-Duplicate_pairs_found=\u53d1\u73b0\u91cd\u590d\u8bb0\u5f55\u5bf9
-
-duplicate_removal=\u79fb\u9664\u91cd\u590d
-
-Duplicate_string_name=\u91cd\u590d\u7684\u7b80\u5199\u5b57\u4e32\u540d\u79f0
-
-Duplicates_found=\u53d1\u73b0\u91cd\u590d\u9879
-
-Duplicates_removed=\u5df2\u79fb\u9664\u91cd\u590d\u9879
-
-Dynamic_groups=\u52a8\u6001\u5206\u7ec4
-
-Dynamically_group_entries_by_a_free-form_search_expression=\u4f7f\u7528\u81ea\u5b9a\u4e49\u7684\u641c\u7d22\u8868\u8fbe\u5f0f\u521b\u5efa\u52a8\u6001\u5206\u7ec4
-
-Dynamically_group_entries_by_searching_a_field_for_a_keyword=\u4f7f\u7528\u5173\u952e\u8bcd\u641c\u7d22\u67d0\u57df\u521b\u5efa\u52a8\u6001\u5206\u7ec4
-
-Each_line_must_be_on_the_following_form=\u6bcf\u4e00\u884c\u5fc5\u987b\u4f7f\u7528\u4ee5\u4e0b\u5f62\u5f0f
-
-Edit=\u7f16\u8f91
-
-Edit_custom_export=\u7f16\u8f91\u81ea\u5b9a\u4e49\u5bfc\u51fa
-Edit_entry=\u7f16\u8f91\u8bb0\u5f55
-Edit_file_link=\u7f16\u8f91\u6587\u4ef6\u94fe\u63a5
-Edit_file_type=\u7f16\u8f91\u6587\u4ef6\u7c7b\u578b
-
-Edit_group=\u7f16\u8f91\u5206\u7ec4
-
-Edit_journal=\u7f16\u8f91\u671f\u520a
-
-Edit_preamble=\u7f16\u8f91\u5bfc\u8a00\u533a_(preamble)
-Edit_strings=\u7f16\u8f91\u7b80\u5199\u5b57\u4e32
-Editor_options=\u7f16\u8f91\u5668\u9009\u9879
-
-empty_BibTeX_key=\u7a7a_BibTeX_\u952e
-
-Empty_BibTeX_key.=\u7a7a_BibTeX_\u952e\u3002
-
-Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=\u7a7a\u767d\u7684_BibTeX_\u952e\uff0c\u8be5\u8bb0\u5f55\u53ef\u80fd\u65e0\u6cd5\u88ab\u5206\u7ec4\u3002
-
-empty_database=\u7a7a\u6570\u636e\u5e93
-
-Enable_source_editing=\u542f\u7528\u6e90\u4ee3\u7801\u7f16\u8f91
-Enable_word/name_autocompletion=\u542f\u7528\u8bcd\u7ec4/\u59d3\u540d\u81ea\u52a8\u5b8c\u6210
-
-Endnote=Endnote
-
-Enter_URL=\u8f93\u5165_URL
-
-Enter_URL_to_download=\u8f93\u5165\u8981\u4e0b\u8f7d\u7684_URL_
-
-entries=\u8bb0\u5f55
-
-Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=\u6b64\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55\u65e0\u6cd5\u8fdb\u884c\u624b\u52a8\u5206\u914d\u3002
-
-Entries_exported_to_clipboard=\u8bb0\u5f55\u88ab\u5bfc\u51fa\u5230\u526a\u8d34\u677f
-
-entries_have_undefined_BibTeX_key=\u8bb0\u5f55\u7684_BibTeX_\u952e\u503c\u672a\u5b9a\u4e49
-
-entries_into_new_database=\u8bb0\u5f55\u5230\u65b0\u6570\u636e\u5e93
-
-entry=\u8bb0\u5f55
-
-Entry_editor=\u8bb0\u5f55\u7f16\u8f91\u5668
-
-
-Entry_in_current_database=\u5f53\u524d\u6570\u636e\u5e93\u4e2d\u7684\u8bb0\u5f55
-
-Entry_in_import=\u5bfc\u5165\u7684\u8bb0\u5f55
-
-Entry_preview=\u9884\u89c8\u8bb0\u5f55
-
-Entry_table=\u8bb0\u5f55\u5217\u8868
-
-Entry_table_columns=\u8bb0\u5f55\u5217
-
-Entry_type=\u8bb0\u5f55\u7c7b\u578b
-
-Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=\u8bb0\u5f55\u7c7b\u578b\u540d\u4e2d\u4e0d\u5141\u8bb8\u4f7f\u7528\u7a7a\u683c\u6216\u8005\u4e0b\u5217\u5b57\u7b26
-
-Entry_types=\u8bb0\u5f55\u7c7b\u578b
-
-Error=\u9519\u8bef
-Error\:_=\u9519\u8bef:_
-Error_converting_Bibtex_to_XMP\:_%0=\u8f6c\u6362_Bibtex_\u5230_XMP_\u9519\u8bef:_%0
-Error_converting_XMP_to_'%0'...=\u8f6c\u6362_XMP_\u5230_'%0'_\u9519\u8bef...
-Error_exporting_to_clipboard=\u5bfc\u51fa\u5230\u526a\u8d34\u677f\u9519\u8bef
-##Error:_check_your_External_viewer_settings_in_Preferences=\u9519\u8bef\uff1a\u8bf7\u68c0\u67e5\u201c\u9996\u9009\u9879\u201d\u4e2d\u7684\u5916\u90e8\u67e5\u770b\u5668\u8bbe\u7f6e
-Error_in_field=\u57df\u4e2d\u7684\u9519\u8bef
-Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=\u542f\u52a8\u63d2\u4ef6\u7cfb\u7edf\u65f6\u53d1\u751f\u9519\u8bef\uff0c\u5ffd\u7565\u4e4b\uff0c\u4e0d\u8fc7\u67d0\u4e9b\u529f\u80fd\u5c06\u4e0d\u53ef\u7528\u3002
-Error_occured_when_parsing_entry=\u5206\u6790\u8bb0\u5f55\u65f6\u53d1\u751f\u9519\u8bef
-
-Error_opening_file=\u6253\u5f00\u6587\u4ef6\u9519\u8bef
-
-Error_setting_field=\u8bbe\u7f6e\u57df\u9519\u8bef
-Error_while_converting_BibtexEntry_to_XMP_%0=\u8f6c\u6362_Bibtex_\u8bb0\u5f55\u5230_XMP_\u9519\u8bef_%0
-Error_while_downloading_file\:=\u4e0b\u8f7d\u6587\u4ef6\u9519\u8bef:
-Error_while_fetching_from_OIA2=\u4ece_OIA2_\u6293\u53d6\u9519\u8bef
-Error_while_writing=\u5199\u5165\u9519\u8bef
-Error_writing_to_%0_file(s).=\u5199\u5165\u5230_%0_\u6587\u4ef6\u9519\u8bef\u3002
-Error_writing_XMP_to_file\:_%0=\u5199\u5165_XMP_\u5230\u6587\u4ef6\u9519\u8bef:_%0
-
-
-Establishing_SQL_connection...=\u6b63\u5728\u5efa\u7acb_SQL_\u8fde\u63a5...
-Exceptions=\u5f02\u5e38
-
-Existing_file=\u5df2\u6709\u6587\u4ef6
-
-exists._Overwrite_file?=\u5df2\u5b58\u5728\uff0c\u8986\u76d6\u6587\u4ef6\uff1f
-exists._Overwrite?=\u5df2\u5b58\u5728\uff0c\u8986\u76d6\uff1f
-
-Expand_subtree=\u5c55\u5f00\u5b50\u6811
-
-Export=\u5bfc\u51fa
-
-Export_name=\u5bfc\u51fa\u540d\u79f0
-
-Export_preferences=\u5bfc\u51fa\u9996\u9009\u9879\u8bbe\u7f6e
-
-Export_preferences_to_file=\u5bfc\u51fa\u9996\u9009\u9879\u8bbe\u7f6e\u5230\u6587\u4ef6
-
-Export_properties=\u5bfc\u51fa\u5c5e\u6027
-
-Export_to_clipboard=\u5bfc\u51fa\u5230\u526a\u8d34\u677f
-Export_to_SQL_database=\u5bfc\u51fa\u5230_SQL_\u6570\u636e\u5e93
-
-Exporting=\u6b63\u5728\u5bfc\u51fa
-Extension=\u6269\u5c55\u540d
-
-External_changes=\u5916\u90e8\u4fee\u6539
-
-External_file_links=\u5916\u90e8\u6587\u4ef6\u94fe\u63a5
-
-External_files=\u5916\u90e8\u6587\u4ef6
-
-External_programs=\u5916\u90e8\u7a0b\u5e8f
-
-External_viewer_called=\u6210\u529f\u8c03\u7528\u5916\u90e8\u67e5\u770b\u5668
-
-Failed_to_read_groups_data_(unsupported_version\:_%0)=\u65e0\u6cd5\u8bfb\u53d6\u5206\u7ec4\u6570\u636e(\u4e0d\u652f\u6301\u7684\u7248\u672c:_%0)
-
-Fetch=\u6293\u53d6
-
-Field=\u57df
-
-field=\u57df
-
-Field_content=\u57df\u5185\u5bb9
-
-Field_name=\u57df\u540d\u79f0
-Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=\u57df\u540d\u4e2d\u4e0d\u53ef\u542b\u6709\u7a7a\u683c\u6216\u4ee5\u4e0b\u5b57\u7b26
-
-Field_sizes=\u57df\u5927\u5c0f
-Field_to_filter=\u8981\u8fc7\u6ee4\u7684\u57df
-
-Field_to_group_by=\u7528\u6765\u5206\u7ec4\u7684\u57df
-
-Fields=\u57df
-
-File=\u6587\u4ef6
-
-file=\u6587\u4ef6
-
-File_'%0'_is_already_open.=\u6587\u4ef6_'%0'_\u5df2\u7ecf\u88ab\u6253\u5f00\u3002
-
-File_'%0'_not_found=\u65e0\u6cd5\u627e\u5230\u6587\u4ef6_'%0'
-
-File_changed=\u6587\u4ef6\u5df2\u6539\u53d8
-File_directory_is_'%0'\:=\u6587\u4ef6\u76ee\u5f55\u662f_'%0':
-
-File_directory_is_not_set_or_does_not_exist!=\u6587\u4ef6\u76ee\u5f55\u672a\u8bbe\u7f6e\u6216\u8be5\u76ee\u5f55\u4e0d\u5b58\u5728\uff01
-File_download=\u6587\u4ef6\u4e0b\u8f7d
-File_exists=\u6587\u4ef6\u5df2\u5b58\u5728
-
-File_extension=\u6587\u4ef6\u6269\u5c55\u540d
-File_has_been_updated_externally._What_do_you_want_to_do?=\u6587\u4ef6\u88ab\u5916\u90e8\u7a0b\u5e8f\u4fee\u6539\uff0c\u60a8\u8981\u600e\u4e48\u505a\uff1f
-
-File_not_found=\u65e0\u6cd5\u627e\u5230\u6587\u4ef6
-File_type=\u6587\u4ef6\u7c7b\u578b
-
-File_updated_externally=\u6587\u4ef6\u88ab\u5916\u90e8\u7a0b\u5e8f\u4fee\u6539
-
-filename=\u6587\u4ef6\u540d
-
-Files_opened=\u5df2\u6253\u5f00\u6587\u4ef6
-
-Filter=\u8fc7\u6ee4
-
-Finished_autosetting_external_links.=\u5b8c\u6210\u81ea\u52a8\u8bbe\u7f6e\u5916\u90e8\u94fe\u63a5\u3002
-
-Finished_synchronizing_%0_links._Entries_changed%c_%1.=\u5b8c\u6210\u540c\u6b65_%0_\u6761\u94fe\u63a5\uff0c\u8bb0\u5f55\u6539\u53d8%c_%1.
-Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=\u5b8c\u6210\u5199\u5165_XMP-\u5143\u6570\u636e\uff0c\u5199\u5165_%0_\u6587\u4ef6\u3002
-Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=\u5b8c\u6210\u5199\u5165_XMP-\u5143\u6570\u636e\u5230_%0_\u6587\u4ef6_(\u8df3\u8fc7_%1_\u6761\uff0c%2_\u6761\u9519\u8bef).
-
-First_select_the_entries_you_want_keys_to_be_generated_for.=\u9996\u5148\u9009\u4e2d\u60a8\u8981\u751f\u6210_BibTeX_\u952e\u7684\u8bb0\u5f55\u3002
-
-Fit_table_horizontally_on_screen=\u5217\u8868\u5bbd\u5ea6\u586b\u6ee1\u5c4f\u5e55\u5bbd\u5ea6
-
-Float=\u6d6e\u52a8_(\u7ed3\u679c\u4e0a\u6d6e\u5230\u6700\u524d)
-Float_marked_entries=\u6d6e\u52a8\u9ad8\u4eae\u663e\u793a\u7684\u8bb0\u5f55_(\u4e0a\u6d6e\u5230\u5217\u8868\u6700\u524d)
-
-Font_Family=\u5b57\u4f53
-
-Font_Preview=\u9884\u89c8\u5b57\u4f53
-
-Font_Size=\u5b57\u4f53\u5927\u5c0f
-
-Font_Style=\u5b57\u4f53
-
-FontSelector=\u5b57\u4f53\u4e0b\u62c9\u83dc\u5355\u9879
-
-for=\u4e3a
-
-Format_of_author_and_editor_names=\u4f5c\u8005\u548c\u7f16\u8005\u7684\u59d3\u540d\u683c\u5f0f
-Format_String=\u683c\u5f0f\u5316\u5b57\u4e32
-
-Format_used=\u4f7f\u7528\u7684\u683c\u5f0f
-Formatter_Name=\u683c\u5f0f\u5316\u5668\u540d\u79f0
-
-Formatter_not_found=\u672a\u53d1\u73b0\u683c\u5f0f\u5316\u5668
-
-found=\u53d1\u73b0
-Found_%0_plugin(s)=\u53d1\u73b0_%0_\u4e2a\u63d2\u4ef6
-
-found_in_aux_file=\u5728_aux_\u53d1\u73b0
-
-Full_name=\u5168\u79f0
-
-General=\u57fa\u672c\u8bbe\u7f6e
-
-General_fields=General_\u57df
-
-Generate=\u751f\u6210
-
-Generate_BibTeX_key=\u751f\u6210_BibTeX_\u952e
-
-Generate_keys=\u751f\u6210\u952e
-
-Generate_keys_before_saving_(for_entries_without_a_key)=\u4fdd\u5b58\u6570\u636e\u5e93\u524d\u4e3a\u7f3a\u5931\u952e\u503c\u7684\u8bb0\u5f55\u81ea\u52a8\u751f\u6210_BibTeX_\u952e
-Generate_keys_for_imported_entries=\u4e3a\u5bfc\u5165\u7684\u8bb0\u5f55\u91cd\u65b0\u751f\u6210_BibTeX_\u952e
-
-Generate_now=\u73b0\u5728\u751f\u6210
-
-Generated_BibTeX_key_for=\u5df2\u751f\u6210_BibTeX_\u952e\u2014\u2014\u4e3a
-
-Generating_BibTeX_key_for=\u6b63\u5728\u751f\u6210_BibTeX_\u952e\u2014\u2014\u4e3a
-
-Grab=Grab
-
-Gray_out_entries_not_in_group_selection=\u7070\u8272\u663e\u793a\u672a\u9009\u4e2d\u8bb0\u5f55
-
-Gray_out_non-hits=\u7070\u8272\u663e\u793a\u672a\u9009\u4e2d
-
-Gray_out_non-matching_entries=\u7070\u8272\u663e\u793a\u4e0d\u5339\u914d\u8bb0\u5f55
-
-Group_properties=\u5206\u7ec4\u5c5e\u6027
-
-grouping_may_not_work_for_this_entry=\u5206\u7ec4\u64cd\u4f5c\u53ef\u80fd\u65e0\u6cd5\u5e94\u7528\u4e8e\u6b64\u8bb0\u5f55
-
-Groups=\u5206\u7ec4
-
-Harvard_RTF=\u54c8\u4f5b_RTF
-
-Have_you_chosen_the_correct_package_path?=\u60a8\u9009\u62e9\u4e86\u6b63\u786e\u7684\u5305\u8def\u5f84\u5417\uff1f
-
-Help=\u5e2e\u52a9
-
-Help_contents=\u5e2e\u52a9\u5185\u5bb9
-
-Help_on_groups=\u5206\u7ec4\u5e2e\u52a9
-
-Help_on_key_patterns=\u952e\u8868\u8fbe\u5f0f\u5e2e\u52a9
-Help_on_Preview_Settings=\u9884\u89c8\u8bbe\u7f6e\u5e2e\u52a9
-Help_on_Regular_Expression_Search=\u6b63\u5219\u8868\u8fbe\u5f0f\u641c\u7d22\u5e2e\u52a9
-
-Hide_non-hits=\u9690\u85cf\u672a\u9009\u4e2d
-
-Hide_non-matching_entries=\u9690\u85cf\u4e0d\u5339\u914d\u7684\u8bb0\u5f55
-
-Hierarchical_context=\u5206\u7ea7\u4e0a\u4e0b\u6587
-
-Highlight=\u9ad8\u4eae
-Highlight_groups_matching_all_selected_entries=\u9ad8\u4eae\u663e\u793a\u5305\u542b\u6240\u6709\u9009\u4e2d\u8bb0\u5f55\u7684\u5206\u7ec4
-Highlight_groups_matching_any_selected_entry=\u9ad8\u4eae\u663e\u793a\u5305\u542b\u4efb\u4e00\u9009\u4e2d\u8bb0\u5f55\u7684\u5206\u7ec4
-
-Highlight_overlapping_groups=\u9ad8\u4eae\u663e\u793a\u6709\u91cd\u53e0\u8bb0\u5f55\u7684\u5206\u7ec4
-
-Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=\u63d0\u793a%c_\u82e5\u60f3\u53ea\u641c\u7d22\u7279\u5b9a\u57df\u7684\u8bdd\uff0c\u53ef\u4ee5\u50cf\u8fd9\u6837\u5199%c<p><tt>author%esmith_and_title%eelectrical</tt>
-
-HTML=HTML
-HTML_table=HTML_\u8868
-HTML_table_(with_Abstract_&_BibTeX)=HTML_\u8868(\u5305\u542b\u6458\u8981\u548c_BibTeX)
-Icon=\u56fe\u6807
-
-Ignore=\u5ffd\u7565
-
-Immediate_subgroups=\u76f4\u63a5\u5b50\u5206\u7ec4
-
-Import=\u5bfc\u5165
-
-Import_and_keep_old_entry=\u5bfc\u5165\u4e14\u4fdd\u5b58\u65e7\u8bb0\u5f55
-
-Import_and_remove_old_entry=\u5bfc\u5165\u4e14\u79fb\u9664\u65e7\u8bb0\u5f55
-
-Import_entries=\u5bfc\u5165\u8bb0\u5f55
-
-Import_failed=\u5bfc\u5165\u5931\u8d25
-
-Import_file=\u5bfc\u5165\u6587\u4ef6
-
-Import_group_definitions=\u5bfc\u5165\u5206\u7ec4\u914d\u7f6e
-
-Import_name=\u5bfc\u5165\u540d\u79f0
-
-Import_preferences=\u5bfc\u5165\u9996\u9009\u9879\u8bbe\u7f6e
-
-Import_preferences_from_file=\u4ece\u6587\u4ef6\u4e2d\u5bfc\u5165\u9996\u9009\u9879\u8bbe\u7f6e
-
-Import_strings=\u5bfc\u5165\u7b80\u5199\u5b57\u4e32
-
-Import_to_open_tab=\u5bfc\u5165\u5230\u6253\u5f00\u6807\u7b7e\u9875
-
-Import_word_selector_definitions=\u5bfc\u5165\u8bcd\u7ec4\u4e0b\u62c9\u83dc\u5355\u9879
-
-Imported_database=\u5df2\u5bfc\u5165\u6570\u636e\u5e93
-
-Imported_entries=\u5df2\u5bfc\u5165\u8bb0\u5f55
-
-Imported_from_database=\u5df2\u4ece\u6570\u636e\u5e93\u5bfc\u5165
-
-ImportFormat_class=ImportFormat_\u7c7b
-
-Importing=\u6b63\u5728\u5bfc\u5165
-
-Importing_in_unknown_format=\u4ee5\u672a\u77e5\u683c\u5f0f\u5bfc\u5165
-
-In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=\u5728_JabRef_\u4e2d\uff0c\u4f7f\u7528\u6210\u5bf9\u7684\u201c#\u201d\u5b57\u7b26\u4ee3\u8868\u4e00\u4e2a\u7b80\u5199\u5b57\u4e32\u3002
-
-Include_abstracts=\u5305\u542b\u6458\u8981
-Include_entries=\u5305\u62ec\u7684\u8bb0\u5f55
-
-Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=\u5305\u542b\u5b50\u5206\u7ec4\uff1a\u5f53\u5206\u7ec4\u88ab\u9009\u4e2d\u65f6\uff0c\u663e\u793a\u6240\u6709\u5b83\u548c\u5b83\u7684\u5b50\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55
-
-Incremental=\u589e\u91cf
-
-Incremental_search=\u589e\u91cf\u67e5\u627e
-
-Incremental_search_failed._Repeat_to_search_from_top.=\u589e\u91cf\u641c\u7d22\u5931\u8d25\uff0c\u4ece\u9876\u90e8\u91cd\u65b0\u5f00\u59cb\u3002
-
-Independent_group\:_When_selected,_view_only_this_group's_entries=\u72ec\u7acb\u5206\u7ec4\uff1a\u5f53\u5206\u7ec4\u88ab\u9009\u4e2d\u65f6\uff0c\u53ea\u663e\u793a\u5c5e\u4e8e\u6b64\u5206\u7ec4\u7684\u8bb0\u5f55
-
-Initially_show_groups_tree_expanded=\u521d\u59cb\u65f6\u663e\u793a\u5c55\u5f00\u7684\u5206\u7ec4\u6811
-
-Input=\u8f93\u5165
-
-Input_error=\u8f93\u5165\u9519\u8bef
-
-Insert=\u63d2\u5165
-
-Insert_rows=\u63d2\u5165\u884c
-
-Insert_selected_citations_into_LyX/Kile=\u63d2\u5165\u9009\u4e2d\u8bb0\u5f55\u5f15\u7528\u5230_LyX/Kile
-
-Insert_selected_citations_into_WinEdt=\u63d2\u5165\u9009\u4e2d\u8bb0\u5f55\u5f15\u7528\u5230_WinEdt
-
-insert_string_=\u63d2\u5165\u5b57\u4e32_
-
-Insert_URL=\u63d2\u5165_URL
-
-integrity=\u5b8c\u6574\u6027
-
-Integrity_check=\u5b8c\u6574\u6027\u68c0\u67e5
-
-Intersection=\u4ea4\u96c6
-
-Invalid_BibTeX_key=\u975e\u6cd5\u7684_BibTeX_\u952e\u503c
-
-Invalid_date_format=\u975e\u6cd5\u7684\u65e5\u671f\u683c\u5f0f
-
-Invalid_URL=\u975e\u6cd5\u7684_URL
-
-Inverted=\u8865\u96c6
-
-is_a_standard_type.=\u662f\u4e00\u4e2a\u6807\u51c6\u7c7b\u578b\u3002
-
-ISO_abbreviation=ISO_\u7f29\u5199
-
-Item_list_for_field=\u57df\u7684\u5143\u7d20\u5217\u8868
-jabref=jabref
-
-JabRef_help=JabRef_\u5e2e\u52a9
-
-JabRef_preferences=JabRef_\u9996\u9009\u9879
-
-Journal_abbreviations=\u671f\u520a\u7f29\u5199\u540d
-
-Journal_list_preview=\u671f\u520a\u5217\u8868\u9884\u89c8
-
-Journal_name=\u671f\u520a\u540d
-
-Keep=\u4fdd\u7559
-
-Keep_both=\u4fdd\u7559\u5168\u90e8
-
-Keep_lower=\u4fdd\u7559\u4e0b\u9762
-
-Keep_upper=\u4fdd\u7559\u4e0a\u9762
-
-Key_bindings=\u70ed\u952e\u7ed1\u5b9a
-
-Key_bindings_changed=\u70ed\u952e\u7ed1\u5b9a\u5df2\u4fee\u6539
-
-Key_generator_settings=\u952e\u503c\u751f\u6210\u5668\u8bbe\u7f6e
-
-Key_pattern=\u952e\u503c\u8868\u8fbe\u5f0f
-
-keys_in_database=\u6570\u636e\u5e93\u4e2d\u7684\u952e\u503c
-
-#nottranslated.Toviewit,usemenu"Tools|NewBibTeXfilefromAUxfile",andlaunchtheactiononanon-existantauxfile.
-Keyword=\u5173\u952e\u5b57
-
-Label=\u6807\u7b7e
-
-Language=\u8bed\u8a00
-
-Last_modified=\u4e0a\u6b21\u4fee\u6539\u7684
-
-LaTeX_AUX_file=LaTeX_AUX_\u6587\u4ef6
-Leave_file_in_its_current_directory.=\u4fdd\u7559\u6587\u4ef6\u7684\u5f53\u524d\u4f4d\u7f6e\u4e0d\u6539\u53d8\u3002
-Leave_files_in_their_current_directory.=\u4fdd\u7559\u6587\u4ef6\u7684\u5f53\u524d\u4f4d\u7f6e\u4e0d\u6539\u53d8\u3002
-
-Left=Left
-
-License=\u8bb8\u53ef\u534f\u8bae
-
-Limit_to_fields=\u9650\u5236\u8303\u56f4\u5230\u57df
-
-Limit_to_selected_entries=\u9650\u5236\u8303\u56f4\u4e3a\u9009\u4e2d\u7684\u8bb0\u5f55
-
-Link=\u94fe\u63a5
-Link_local_file=\u94fe\u63a5\u672c\u5730\u6587\u4ef6
-Link_to_file_%0=\u5230\u6587\u4ef6_%0_\u7684\u94fe\u63a5
-
-Listen_for_remote_operation_on_port=\u76d1\u542c\u7aef\u53e3
-Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=\u52a0\u8f7d/\u4fdd\u5b58\u9996\u9009\u9879\u8bbe\u7f6e\u4ece/\u5230_jabref.xml_\u6587\u4ef6(\u8bb0\u5fc6\u68d2\u6a21\u5f0f)
-
-Load_session=\u8f7d\u5165\u4f1a\u8bdd
-
-Loading_session...=\u8f7d\u5165\u4f1a\u8bdd...
-localhost=localhost
-
-Look_and_feel=\u89c6\u89c9\u6548\u679c\u7c7b_(look_and_feel\uff0c\u5373_Java_\u754c\u9762\u7c7b)
-Looking_for_pdf...=\u641c\u7d22_pdf...
-lower=\u5c0f\u5199\u5168\u90e8
-Main_file_directory=\u6587\u4ef6\u4e3b\u76ee\u5f55
-
-Main_layout_file=\u4e3b_layout_\u6587\u4ef6
-
-Main_PDF_directory=PDF_\u6587\u4ef6\u4e3b\u76ee\u5f55
-
-Main_PS_directory=PS_\u6587\u4ef6\u4e3b\u76ee\u5f55
-
-Manage=\u7ba1\u7406
-
-Manage_custom_exports=\u7ba1\u7406\u81ea\u5b9a\u4e49\u5bfc\u51fa\u5668
-
-Manage_custom_imports=\u7ba1\u7406\u81ea\u5b9a\u4e49\u5bfc\u5165\u5668
-Manage_external_file_types=\u7ba1\u7406\u5916\u90e8\u6587\u4ef6\u7c7b\u578b
-
-Manage_journal_abbreviations=\u7ba1\u7406\u671f\u520a\u540d\u79f0\u7f29\u5199
-
-Mark_entries=\u9ad8\u4eae\u6807\u8bb0\u591a\u6761\u8bb0\u5f55
-
-Mark_entry=\u9ad8\u4eae\u6807\u8bb0\u8be5\u8bb0\u5f55
-
-Mark_new_entries_with_addition_date=\u5efa\u7acb\u65b0\u8bb0\u5f55\u65f6\u6807\u8bb0\u65f6\u95f4
-
-Mark_new_entries_with_owner_name=\u5efa\u7acb\u65b0\u8bb0\u5f55\u65f6\u6807\u8bb0\u6240\u6709\u8005\u4e3a
-
-Marked_selected=\u9ad8\u4eae\u663e\u793a\u9009\u4e2d
-Memory_Stick_Mode=\u8bb0\u5fc6\u68d2\u6a21\u5f0f
-
-Menu_and_label_font_size=\u83dc\u5355\u548c\u6807\u7b7e\u5b57\u4f53\u5927\u5c0f
-
-Merged_external_changes=\u5408\u5e76\u5916\u90e8\u4fee\u6539
-
-Messages=\u6d88\u606f
-
-Messages_and_Hints=\u63d0\u793a\u548c\u8b66\u544a
-
-Modification_of_field=\u57df\u7684\u4fee\u6539
-
-Modified_group_"%0".=\u5df2\u4fee\u6539\u5206\u7ec4_"%0".
-
-Modified_groups=\u5df2\u4fee\u6539\u5206\u7ec4
-
-Modified_string=\u5df2\u4fee\u6539\u7b80\u5199\u5b57\u4e32
-
-Modify=\u4fee\u6539
-
-modify_group=\u4fee\u6539\u5206\u7ec4
-
-MODS=MODS
-
-Move=\u79fb\u52a8
-
-Move_down=\u4e0b\u79fb
-
-Move_entries_in_group_selection_to_the_top=\u79fb\u52a8\u9009\u4e2d\u5206\u7ec4\u7684\u8bb0\u5f55\u5230\u9876\u90e8
-Move_external_links_to_'file'_field=\u79fb\u52a8\u5916\u90e8\u94fe\u63a5\u5230_'file'_\u57df
-Move_files_to_file_directory.=\u79fb\u52a8\u6587\u4ef6\u5230\u6587\u4ef6\u76ee\u5f55\u3002
-
-move_group=\u79fb\u52a8\u5206\u7ec4
-
-Move_string_down=\u4e0b\u79fb\u5b57\u7b26\u4e32
-
-Move_string_up=\u4e0a\u79fb\u5b57\u7b26\u4e32
-
-Move_up=\u4e0a\u79fb
-
-Moved_group_"%0".=\u79fb\u52a8\u4e86\u5206\u7ec4_"%0"\u3002
-MS_Office_2007=MS_Office_2007
-MySQL=MySQL
-MySQL_database=MySQL_\u6570\u636e\u5e93
-
-Name=\u540d\u5b57
-Name_formatter=\u59d3\u540d\u683c\u5f0f\u5316\u5668
-
-Natbib_style=Natbib_\u683c\u5f0f
-
-nested_aux_files=nested_aux_\u6587\u4ef6
-
-New=\u65b0\u5efa
-
-new=\u65b0\u5efa
-
-New_BibTeX_database=\u65b0\u5efa_BibTeX_\u6570\u636e\u5e93
-
-New_BibTeX_entry=\u65b0\u5efa_BibTeX_\u8bb0\u5f55
-
-New_BibTeX_subdatabase=\u65b0\u5efa_BibTeX_\u5b50\u6570\u636e\u5e93
-
-New_content=\u65b0\u5185\u5bb9
-
-New_database_created.=\u521b\u5efa\u4e86\u65b0\u6570\u636e\u5e93\u3002
-New_field_value=\u65b0\u7684\u57df\u5185\u5bb9
-
-New_file=\u65b0\u5efa\u6587\u4ef6
-New_file_link_(INSERT)=\u65b0\u6587\u4ef6\u94fe\u63a5(\u63d2\u5165)
-
-New_group=\u65b0\u5efa\u5206\u7ec4
-
-New_string=\u65b0\u5efa\u5b57\u7b26\u4e32
-
-Next_entry=\u4e0b\u4e00\u6761
-
-No_%0_found=\u6ca1\u6709\u627e\u5230_%0
-
-No_actual_changes_found.=\u6ca1\u6709\u5b9e\u9645\u7684\u4fee\u6539\u3002
-
-no_base-bibtex-file_specified=\u6ca1\u6709\u6307\u5b9a_base-bibtex-\u6587\u4ef6!
-
-no_database_generated=\u6ca1\u6709\u751f\u6210\u6570\u636e\u5e93
-
-No_duplicates_found=\u6ca1\u6709\u627e\u5230\u91cd\u590d\u9879
-
-No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=\u6ca1\u6709\u627e\u5230\u8bb0\u5f55\uff0c\u8bf7\u68c0\u67e5\u662f\u5426\u4f7f\u7528\u4e86\u6b63\u786e\u7684\u5bfc\u5165\u8fc7\u6ee4\u5668\u3002
-
-
-No_entries_found_for_the_search_string_'%0'=\u6ca1\u6709\u627e\u5230\u7b26\u5408\u67e5\u8be2\u5b57\u7b26\u4e32_'%0'_\u7684\u8bb0\u5f55
-
-No_entries_imported.=\u6ca1\u6709\u5bfc\u5165\u8bb0\u5f55\u3002
-
-No_entries_or_multiple_entries_selected.=\u6ca1\u6709\u9009\u4e2d\u8bb0\u5f55\u3002
-
-No_entries_selected=\u6ca1\u6709\u9009\u4e2d\u4efb\u4f55\u8bb0\u5f55
-No_entries_selected.=\u6ca1\u6709\u9009\u4e2d\u4efb\u4f55\u8bb0\u5f55\u3002
-
-No_exceptions_have_ocurred.=\u6ca1\u6709\u53d1\u751f\u5f02\u5e38\u3002
-No_files_found.=\u6ca1\u6709\u627e\u5230\u6587\u4ef6\u3002
-
-No_GUI._Only_process_command_line_options.=\u6ca1\u6709_GUI\uff0c\u53ea\u5904\u7406\u547d\u4ee4\u884c\u9009\u9879\u3002
-
-No_journal_names_could_be_abbreviated.=\u6ca1\u6709\u53ef\u4f9b\u7f29\u5199\u7684\u671f\u520a\u5168\u79f0\u3002
-
-No_journal_names_could_be_unabbreviated.=\u6ca1\u6709\u53ef\u4f9b\u5c55\u5f00\u7684\u671f\u520a\u540d\u7f29\u5199\u3002
-No_PDF_linked=\u6ca1\u6709_PDF_\u94fe\u63a5
-
-No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=\u672a\u5b9a\u4e49_pdf_\u6216_ps_\u94fe\u63a5\uff0c\u5e76\u4e14\u6ca1\u6709\u627e\u5230\u540d\u79f0\u5339\u914d_Bibtex_\u952e\u503c\u7684\u6587\u4ef6
-No_plugins_were_found_in_the_following_folders\:=\u5728\u4ee5\u4e0b\u76ee\u5f55\u4e2d\u6ca1\u6709\u627e\u5230\u63d2\u4ef6:
-
-No_references_found=\u6ca1\u6709\u627e\u5230\u5f15\u7528
-
-No_saved_session_found.=\u6ca1\u6709\u4fdd\u5b58\u7684\u4f1a\u8bdd\u3002
-
-No_url_defined=\u6ca1\u6709\u5b9a\u4e49_url_
-No_XMP_metadata_found_in_=\u6ca1\u6709\u627e\u5230_XMP_\u5143\u6570\u636e\u5728
-
-not=\u975e
-
-not_found=\u65e0\u6cd5\u627e\u5230
-
-Not_saved_(empty_session)=\u6ca1\u6709\u4fdd\u5b58(\u7a7a\u4f1a\u8bdd)
-
-Note_that_the_entry_causing_the_problem_has_been_selected.=\u6ce8\u610f\uff1a\u5bfc\u81f4\u6b64\u95ee\u9898\u7684\u8bb0\u5f55\u5df2\u7ecf\u88ab\u9009\u4e2d\u3002
-
-Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=\u6ce8\u610f\uff1a\u60a8\u5fc5\u987b\u4e3a\u89c6\u89c9\u6548\u679c\u7c7b_(look_and_feel)_\u660e\u786e\u6307\u5b9a\u5b8c\u6574\u7684\u7ecf\u8fc7\u9a8c\u8bc1\u7684\u7c7b\u540d\u79f0\uff0c
-
-Nothing_to_redo=\u65e0\u53ef\u91cd\u505a
-
-Nothing_to_undo=\u65e0\u53ef\u64a4\u9500
-
-#Thenextisusedlikein"Referencesfound:1Numberofreferencestofetch?"
-Number_of_references_to_fetch?=\u8981\u6293\u53d6\u7684\u5f15\u7528\u6570\uff1f
-
-occurences=\u6b21
-
-OK=\u786e\u5b9a
-
-Ok=\u786e\u5b9a
-One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=\u4e00\u4e2a\u6216\u591a\u4e2a\u6587\u4ef6\u94fe\u63a5\u662f\u672a\u5b9a\u4e49\u7684\u6587\u4ef6\u7c7b\u578b_'%0'\uff0c\u60a8\u5e0c\u671b\u600e\u4e48\u505a\uff1f
-
-One_or_more_keys_will_be_overwritten._Continue?=\u4e00\u4e2a\u6216\u591a\u4e2a_BibTeX_\u952e\u5c06\u4f1a\u88ab\u8986\u76d6\uff0c\u662f\u5426\u7ee7\u7eed\uff1f
-Only_one_item_is_supported=\u53ea\u652f\u6301\u4e00\u4e2a\u5143\u7d20
-
-Open=\u6253\u5f00
-
-Open_BibTeX_database=\u6253\u5f00_BibTeX_\u6570\u636e\u5e93
-
-Open_database=\u6253\u5f00\u6570\u636e\u5e93
-
-Open_editor_when_a_new_entry_is_created=\u521b\u5efa\u65b0\u8bb0\u5f55\u65f6\u6253\u5f00\u8bb0\u5f55\u7f16\u8f91\u5668
-
-Open_file=\u6253\u5f00\u6587\u4ef6
-
-Open_last_edited_databases_at_startup=\u542f\u52a8_JabRef_\u65f6\u6253\u5f00\u4e0a\u6b21\u4f7f\u7528\u7684\u6570\u636e\u5e93
-
-Open_PDF_or_PS=\u6253\u5f00_PDF_\u6216_PS
-
-Open_right-click_menu_with_Ctrl+left_button=\u4f7f\u7528_Ctrl+Left_\u6309\u952e\u7ec4\u5408\u6253\u5f00\u53f3\u952e\u83dc\u5355
-
-Open_URL_or_DOI=\u6253\u5f00_URL_\u6216_DOI
-OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
-
-Opened_database=\u5df2\u6253\u5f00\u6570\u636e\u5e93
-
-Opening=\u6b63\u5728\u6253\u5f00
-
-Opening_preferences...=\u6b63\u5728\u6253\u5f00\u9996\u9009\u9879...
-
-OpenOffice_Calc=OpenOffice_Calc
-OpenOffice_CSV=OpenOffice_CSV
-Operation_canceled.\n=\u64cd\u4f5c\u88ab\u53d6\u6d88\n
-Operation_not_supported=\u4e0d\u652f\u6301\u7684\u64cd\u4f5c
-
-Optional_fields=\u53ef\u9009\u57df
-
-Options=\u9009\u9879
-
-or=\u6216
-
-out_of=out_of
-Output=\u8f93\u51fa
-
-Output_or_export_file=\u8f93\u51fa\u6216\u5bfc\u51fa\u6587\u4ef6
-
-Override=\u8df3\u8fc7
-
-Override_default_file_directories=\u8df3\u8fc7\u9ed8\u8ba4\u6587\u4ef6\u76ee\u5f55
-
-Override_default_font_settings=\u8df3\u8fc7\u9ed8\u8ba4\u5b57\u4f53\u8bbe\u7f6e
-
-override_the_bibtex_key_by_the_selected_text=\u4f7f\u7528\u9009\u4e2d\u6587\u5b57\u8986\u76d6_BibTeX_\u952e\u503c
-
-
-Overwrite=\u8986\u76d6
-Overwrite_existing_field_values=\u8986\u76d6\u539f\u6709\u57df\u5185\u5bb9
-
-Overwrite_keys=\u8986\u76d6\u952e\u503c
-
-pairs_processed=\u5df2\u5904\u7406\u8bb0\u5f55\u5bf9
-Password_\:=\u53e3\u4ee4:
-
-Paste=\u7c98\u8d34
-
-paste_entries=\u7c98\u8d34\u591a\u6761\u8bb0\u5f55
-
-paste_entry=\u7c98\u8d34\u8bb0\u5f55
-Paste_from_clipboard=\u4ece\u526a\u8d34\u677f\u7c98\u8d34
-
-Pasted=\u5b8c\u6210\u7c98\u8d34
-
-Path_to_%0_not_defined=\u5230_%0_\u7684\u8def\u5f84\u672a\u5b9a\u4e49
-
-Path_to_LatexEditor_(LEd.exe)=\u5230_LatexEditor_(LEd.exe)_\u7684\u8def\u5f84
-
-Path_to_LyX_pipe=\u5230_LyX_\u7ba1\u9053\u7684\u8def\u5f84
-
-Path_to_Vim=\u5230_Vim_\u7684\u8def\u5f84
-
-Path_to_WinEdt.exe=\u5230_WinEdt.exe_\u7684\u8def\u5f84
-
-PDF_directory=PDF_\u76ee\u5f55
-PDF_does_not_exist=PDF_\u4e0d\u5b58\u5728
-
-Personal_journal_list=\u79c1\u6709\u7684\u671f\u520a\u5217\u8868
-
-Plain_text_import=\u7eaf\u6587\u672c\u5bfc\u5165
-
-Please_check_your_network_connection_to_this_machine.=\u8bf7\u68c0\u67e5\u8fd9\u53f0\u673a\u5668\u7684\u7f51\u7edc\u8fde\u63a5\u3002
-
-Please_enter_a_name_for_the_group.=\u8bf7\u4e3a\u8be5\u5206\u7ec4\u8f93\u5165\u4e00\u4e2a\u540d\u5b57
-
-Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=\u8bf7\u8f93\u5165\u4e00\u4e2a\u641c\u7d22\u8bcd\u7ec4\u3002\u4f8b\u5982\uff0c\u8981\u5728\u6240\u6709\u57df\u4e2d\u641c\u7d22_<b>Smith</b>\uff0c\u5c31\u8f93\u5165%c<p><tt>smith</tt><p>\u8981\u5728_<b>Author</b>_\u57df\u4e2d\u641 [...]
-
-Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=\u8bf7\u8f93\u5165\u8981\u641c\u7d22\u7684\u57df(\u4f8b\u5982\uff1a_<b>keywords</b>)\u548c\u8981\u641c\u7d22\u7684\u5173\u952e\u8bcd(\u4f8b\u5982\uff1a_<b>electrical</b>)\u3002
-
-Please_enter_the_string's_label=\u8bf7\u8f93\u5165\u5b57\u4e32\u7684\u6807\u7b7e
-
-Please_select_an_importer=\u8bf7\u9009\u62e9\u4e00\u4e2a\u5bfc\u5165\u5668
-
-Please_select_an_importer.=\u8bf7\u9009\u62e9\u4e00\u4e2a\u5bfc\u5165\u5668\u3002
-
-Please_select_exactly_one_group_to_move.=\u8bf7\u9009\u4e2d\u4e00\u4e2a\u5206\u7ec4\u6765\u79fb\u52a8\u3002
-Please_specify_the_=\u8bf7\u6307\u5b9a
-
-Possible_duplicate_entries=\u53ef\u80fd\u7684\u91cd\u590d\u8bb0\u5f55
-
-Possible_duplicate_of_existing_entry._Click_to_resolve.=\u53ef\u80fd\u4e0e\u5df2\u5b58\u5728\u8bb0\u5f55\u91cd\u590d\uff0c\u70b9\u51fb\u4ee5\u89e3\u51b3\u6b64\u95ee\u9898\u3002
-
-Preamble=\u5bfc\u8a00\u533a_(Preamble)
-
-Preferences=\u9996\u9009\u9879
-
-Preferences_recorded.=\u9996\u9009\u9879\u88ab\u8bb0\u5f55\u3002
-
-Preview=\u9884\u89c8
-
-Previous_entry=\u4e0a\u4e00\u6761
-
-Primary_sort_criterion=\u4e3b\u6392\u5e8f\u4f9d\u636e
-Print_Preview=\u6253\u5370\u9884\u89c8
-Printing_Entry_Preview=\u6b63\u5728\u6253\u5370\u8bb0\u5f55\u9884\u89c8
-
-Problem_with_parsing_entry=\u89e3\u6790\u8bb0\u5f55\u65f6\u7684\u95ee\u9898
-Processing_=\u6b63\u5728\u5904\u7406
-Program_output=\u7a0b\u5e8f\u8f93\u51fa
-
-PS_directory=PS_\u76ee\u5f55
-Push_entries_to_external_application_(%0)=\u63a8\u9001\u8bb0\u5f55\u5230\u5916\u90e8\u7a0b\u5e8f_(%0)
-
-Push_selection_to_Emacs=\u63a8\u9001\u9009\u4e2d\u8bb0\u5f55\u5230_Emacs
-
-Push_selection_to_LyX/Kile=\u63a8\u9001\u9009\u4e2d\u8bb0\u5f55\u5230_LyX/Kile
-Push_selection_to_Vim=\u63a8\u9001\u9009\u4e2d\u8bb0\u5f55\u5230_Vim
-
-Push_selection_to_WinEdt=\u63a8\u9001\u9009\u4e2d\u8bb0\u5f55\u5230_WinEdt
-
-Push_to_LatexEditor=\u63a8\u9001\u5230_LatexEditor
-Pushed_citations_to_%0=\u5df2\u63a8\u9001\u5f15\u7528\u5230_%0
-
-Pushed_citations_to_Emacs=\u5df2\u63a8\u9001\u5f15\u7528\u5230_Emacs
-Pushed_citations_to_Vim=\u5df2\u63a8\u9001\u5f15\u7528\u5230_Vim
-
-Pushed_citations_to_WinEdt=\u5df2\u63a8\u9001\u5f15\u7528\u5230_WinEdt
-
-Pushed_the_citations_for_the_following_rows_to=\u5df2\u63a8\u9001\u4ee5\u4e0b\u884c\u8bb0\u5f55\u7684\u5f15\u7528\u5230
-
-Quit_JabRef=\u9000\u51fa_JabRef
-
-Quit_synchronization=\u9000\u51fa\u540c\u6b65
-
-Raw_source=\u539f\u59cb\u6e90\u6570\u636e
-
-Really_delete_the_selected=\u786e\u8ba4\u5220\u9664\u9009\u4e2d\u7684
-
-Rearrange_tabs_alphabetically_by_title=\u5bf9\u6807\u7b7e\u9875\u4ee5\u6807\u9898\u6309\u5b57\u6bcd\u8868\u6392\u5e8f
-
-Redo=\u91cd\u505a
-
-Reference_database=\u53c2\u8003\u6587\u732e\u6570\u636e\u5e93
-
-#Thenexttwolinesareusedlikein"Referencesfound:1Numberofreferencestofetch?"
-References_found=\u627e\u5230\u53c2\u8003\u6587\u732e
-
-Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=\u63d0\u70bc\u7236\u5206\u7ec4\uff1a\u5f53\u5206\u7ec4\u88ab\u9009\u4e2d\u65f6\uff0c\u663e\u793a\u540c\u65f6\u5305\u542b\u5728\u8be5\u5206\u7ec4\u548c\u5b83\u7236\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55
-
-Refresh_view=\u5237\u65b0\u89c6\u56fe
-
-Regular_Expression=\u6b63\u5219\u8868\u8fbe\u5f0f
-
-Remember_these_entry_types?=\u8bb0\u4f4f\u8fd9\u4e9b\u8bb0\u5f55\u7c7b\u578b\uff1f
-
-Remote_operation=\u8fdc\u7a0b\u64cd\u4f5c
-
-Remote_server_port=\u8fdc\u7a0b\u670d\u52a1\u5668\u7aef\u53e3
-
-Remove=\u79fb\u9664
-
-Remove_all?=\u79fb\u9664\u6240\u6709?
-
-Remove_all_subgroups=\u79fb\u9664\u5b50\u5206\u7ec4
-
-Remove_all_subgroups_of_"%0"?=\u79fb\u9664_"%0"_\u7684\u6240\u6709\u5b50\u5206\u7ec4\uff1f
-
-Remove_double_braces_around_BibTeX_fields_when_loading.=\u8f7d\u5165\u65f6\u79fb\u9664_BibTeX_\u57df\u4e2d\u7684\u53cc\u5c42\u62ec\u53f7
-
-Remove_duplicates=\u79fb\u9664\u91cd\u590d\u9879
-
-Remove_entry_from_import=\u4ece\u5bfc\u5165\u4e2d\u79fb\u9664\u8bb0\u5f55
-
-Remove_entry_selection_from_this_group=\u4ece\u8be5\u5206\u7ec4\u4e2d\u79fb\u9664\u8bb0\u5f55
-
-Remove_entry_type=\u79fb\u9664\u8bb0\u5f55\u7c7b\u578b
-Remove_file_link_(DELETE)=\u79fb\u9664\u6587\u4ef6\u94fe\u63a5(\u5220\u9664)
-
-remove_from_group=\u4ece\u5206\u7ec4\u4e2d\u79fb\u9664
-
-Remove_from_group=\u4ece\u5206\u7ec4\u4e2d\u79fb\u9664
-
-Remove_group=\u79fb\u9664\u5206\u7ec4
-
-Remove_group,_keep_subgroups=\u79fb\u9664\u5206\u7ec4\uff0c\u4fdd\u7559\u5b50\u5206\u7ec4
-
-Remove_group_"%0"?=\u79fb\u9664\u5206\u7ec4_"%0"?
-
-Remove_group_"%0"_and_its_subgroups?=\u79fb\u9664\u5206\u7ec4_"%0"_\u548c\u5b83\u7684\u5b50\u5206\u7ec4\uff1f
-
-remove_group_(keep_subgroups)=\u79fb\u9664\u5206\u7ec4(\u4fdd\u7559\u5b50\u5206\u7ec4)
-
-remove_group_and_subgroups=\u79fb\u9664\u5206\u7ec4\u548c\u5b50\u5206\u7ec4
-
-Remove_group_and_subgroups=\u79fb\u9664\u5206\u7ec4\u548c\u5b50\u5206\u7ec4
-
-Remove_link=\u79fb\u9664\u94fe\u63a5
-
-Remove_old_entry=\u79fb\u9664\u65e7\u8bb0\u5f55
-
-Remove_selected_strings=\u79fb\u9664\u9009\u4e2d\u7684\u7b80\u5199\u5b57\u4e32
-
-remove_string_=\u79fb\u9664\u7b80\u5199\u5b57\u4e32
-
-Removed_group_"%0".=\u5df2\u79fb\u9664\u5206\u7ec4_"%0"\u3002
-
-Removed_group_"%0"_and_its_subgroups.=\u5df2\u79fb\u9664\u5206\u7ec4_"%0"_\u548c\u5b83\u7684\u5b50\u5206\u7ec4\u3002
-
-Removed_string=\u5df2\u79fb\u9664\u7b80\u5199\u5b57\u4e32
-
-Renamed_string=\u91cd\u547d\u540d\u5b57\u7b26\u4e32
-
-Replace=\u66ff\u6362
-
-Replace_(regular_expression)=\u66ff\u6362_(\u6b63\u5219\u8868\u8fbe\u5f0f)
-
-Replace_string=\u66ff\u6362\u5b57\u7b26\u4e32
-
-Replace_with=\u66ff\u6362\u4e3a
-
-Replaced=\u88ab\u66ff\u6362
-
-Required_fields=\u5fc5\u9009\u57df
-
-Reset_all=\u91cd\u7f6e\u6240\u6709
-Reset_file_type_definitons=\u91cd\u7f6e\u6587\u4ef6\u7c7b\u578b\u5b9a\u4e49
-
-Resolve_strings_for_all_fields_except=\u5904\u7406\u6240\u6709\u57df\u7684\u7b80\u5199\u5b57\u4e32\uff0c\u9664\u4e86
-Resolve_strings_for_standard_BibTeX_fields_only=\u53ea\u5904\u7406\u6807\u51c6_BibTeX_\u57df\u7684\u7b80\u5199\u5b57\u4e32
-
-resolved=\u5df2\u89e3\u51b3
-
-Results=\u7ed3\u679c
-
-Revert_to_original_source=\u6062\u590d\u5230\u521d\u59cb\u6e90
-
-Review=\u8bc4\u8bba
-
-Review_changes=\u590d\u67e5\u4fee\u6539
-
-Right=\u53f3
-root=root
-
-Save=\u4fdd\u5b58
-Save_all_finished.=\u5b8c\u6210\u4fdd\u5b58\u5168\u90e8\u3002
-
-Save_all_open_databases=\u4fdd\u5b58\u6240\u6709\u6253\u5f00\u7684\u6570\u636e\u5e93
-
-Save_before_closing=\u5173\u95ed\u524d\u4fdd\u5b58
-
-Save_database=\u4fdd\u5b58\u6570\u636e\u5e93
-Save_database_as_...=\u4fdd\u5b58\u6570\u636e\u5e93\u4e3a_...
-
-Save_entries_in_their_original_order=\u4ee5\u539f\u59cb\u987a\u5e8f\u4fdd\u5b58\u8bb0\u5f55
-
-Save_failed=\u4fdd\u5b58\u5931\u8d25
-
-Save_failed_during_backup_creation=\u4fdd\u5b58\u5931\u8d25\uff0c\u65e0\u6cd5\u521b\u5efa\u5907\u4efd
-
-Save_failed_while_committing_changes=\u4fdd\u5b58\u5931\u8d25\uff0c\u65e0\u6cd5\u63d0\u4ea4\u4fee\u6539
-
-Save_ordered_by_author/editor/year=\u4ee5\u201c\u4f5c\u8005/\u7f16\u8005/\u5e74\u4efd\u201d\u987a\u5e8f\u4fdd\u5b58
-Save_selected_as_...=\u9009\u4e2d\u8bb0\u5f55\u53e6\u5b58\u4e3a...
-
-Saved_database=\u5df2\u4fdd\u5b58\u6570\u636e\u5e93
-
-Saved_selected_to=\u4fdd\u5b58\u9009\u4e2d\u5230
-
-Saved_session=\u5df2\u4fdd\u5b58\u56de\u8bdd
-
-Saving=\u4fdd\u5b58\u4e2d
-Saving_all_databases...=\u6b63\u5728\u4fdd\u5b58\u6240\u6709\u6570\u636e\u5e93...
-
-Saving_database=\u6b63\u5728\u4fdd\u5b58\u6570\u636e\u5e93
-
-Scan=\u626b\u63cf
-
-Search=\u67e5\u627e
-
-Search_All_Fields=\u5728\u6240\u6709\u57df\u4e2d\u67e5\u627e
-
-Search_all_fields=\u5728\u6240\u6709\u57df\u4e2d\u67e5\u627e
-
-Search_error=\u67e5\u627e\u51fa\u9519
-
-Search_expression=\u67e5\u627e\u8868\u8fbe\u5f0f
-
-Search_for=\u67e5\u627e
-
-Search_general_fields=\u5728_general_\u57df\u4e2d\u67e5\u627e
-
-Search_IEEEXplore=\u641c\u7d22_IEEEXplore
-Search_IEEExplore=\u641c\u7d22_IEEExplore
-
-Search_optional_fields=\u5728\u53ef\u9009\u57df\u4e2d\u67e5\u627e
-
-Search_required_fields=\u5728\u5fc5\u9009\u57df\u4e2d\u67e5\u627e
-
-Search_Specified_Field(s)=\u5728\u7279\u5b9a\u57df\u4e2d\u67e5\u627e
-
-Searched_database._Global_number_of_hits=\u5b8c\u6210\u641c\u7d22\u6570\u636e\u5e93\uff0c\u5168\u5c40\u547d\u4e2d\u6570
-
-Searched_database._Number_of_hits=\u5b8c\u6210\u641c\u7d22\u6570\u636e\u5e93\uff0c\u547d\u4e2d\u6570
-
-Searching_for_%0_file=\u67e5\u627e_%0_\u6587\u4ef6
-
-Searching_for_duplicates...=\u6b63\u5728\u67e5\u627e\u91cd\u590d\u8bb0\u5f55...
-
-Searching_for_files=\u6b63\u5728\u67e5\u627e\u6587\u4ef6
-
-Secondary_sort_criterion=\u7b2c\u4e8c\u6392\u5e8f\u4f9d\u636e
-
-Select=\u9009\u62e9
-
-Select_a_Zip-archive=\u9009\u62e9\u4e00\u4e2a_Zip_\u538b\u7f29\u5305
-
-Select_action=\u9009\u62e9\u64cd\u4f5c
-
-Select_all=\u5168\u9009
-
-Select_Classpath_of_New_Importer=\u9009\u62e9\u65b0\u5bfc\u5165\u5668\u7684_classpath
-
-Select_encoding=\u9009\u62e9\u7f16\u7801
-
-Select_entries_in_group_selection=\u9009\u4e2d\u9009\u4e2d\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55
-
-Select_entry_type=\u9009\u62e9\u8bb0\u5f55\u7c7b\u578b
-Select_external_application=\u9009\u62e9\u5916\u90e8\u7a0b\u5e8f
-
-Select_file_from_ZIP-archive=\u4ece_ZIP-\u538b\u7f29\u5305\u4e2d\u9009\u62e9\u6587\u4ef6
-
-Select_format=\u9009\u62e9\u683c\u5f0f
-Select_icon=\u9009\u62e9\u56fe\u6807
-
-Select_matches=\u9009\u4e2d\u5339\u914d\u7684\u8bb0\u5f55
-
-Select_new_ImportFormat_Subclass=\u9009\u62e9\u65b0\u7684_ImportFormat_\u5b50\u7c7b
-
-Select_the_tree_nodes_to_view_and_accept_or_reject_changes=\u9009\u62e9\u6811\u8282\u70b9\u67e5\u770b\u548c\u63a5\u53d7/\u62d2\u7edd\u4fee\u6539
-Selected_entries=\u9009\u4e2d\u7684\u8bb0\u5f55
-
-Selector_enabled_fields=\u542f\u7528\u4e0b\u62c9\u83dc\u5355\u7684\u57df
-Server_Hostname_\:=\u670d\u52a1\u5668\u4e3b\u673a:
-Server_Type_\:=\u670d\u52a1\u5668\u7c7b\u578b:
-Set_field=\u8bbe\u7f6e\u57df\u5185\u5bb9
-Set_fields=\u8bbe\u7f6e\u57df\u5185\u5bb9
-
-Set_general_fields=\u8bbe\u7f6e_general_\u57df
-Set_main_external_file_directory=\u8bbe\u7f6e\u5916\u90e8\u6587\u4ef6\u7684\u4e3b\u76ee\u5f55
-
-Set_table_font=\u8bbe\u7f6e\u8868\u683c\u5b57\u4f53
-
-Settings=\u8bbe\u7f6e
-
-Setup_selectors=\u8bbe\u7f6e\u4e0b\u62c9\u83dc\u5355\u9879
-
-Short_form=\u7f29\u5199\u5f62\u5f0f
-
-Shortcut=\u5feb\u6377\u952e
-
-Show/edit_BibTeX_source=\u663e\u793a/\u7f16\u8f91_BibTeX_\u6e90\u4ee3\u7801
-
-Show_'Firstname_Lastname'=\u663e\u793a_'\u540d_(Firstname)_\u59d3_(Lastname)'
-Show_'Lastname,_Firstname'=\u663e\u793a_'\u59d3_(Lastname),_\u540d_(Firstname)'
-
-Show_BibTeX_source_by_default=\u7f3a\u7701\u663e\u793a_BibTeX_\u6e90\u4ee3\u7801
-
-Show_BibTeX_source_panel=\u663e\u793a_BibTeX_\u6e90\u4ee3\u7801\u9762\u677f
-
-Show_confirmation_dialog_when_deleting_entries=\u5220\u9664\u591a\u6761\u8bb0\u5f55\u65f6\u53d1\u51fa\u8b66\u544a
-
-Show_description=\u663e\u793a\u63cf\u8ff0
-
-Show_dynamic_groups_in_<i>italics</i>=\u7528_<i>\u659c\u4f53</i>_\u663e\u793a\u52a8\u6001\u5206\u7ec4
-
-Show_entries_*not*_in_group_selection=\u663e\u793a\u90a3\u4e9b*\u4e0d*\u5728\u9009\u4e2d\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55
-
-Show_file_column=\u663e\u793a\u201c\u6587\u4ef6\u201d\u5217
-
-Show_icons_for_groups=\u663e\u793a\u5206\u7ec4\u7c7b\u578b\u56fe\u6807
-Show_last_names_only=\u53ea\u663e\u793a\u201c\u59d3_(Lastname)\u201d
-
-Show_names_unchanged=\u663e\u793a\u539f\u59cb\u59d3\u540d\u5b57\u4e32
-
-Show_one_less_rows=\u51cf\u5c11\u663e\u793a\u4e00\u884c
-
-Show_one_more_row=\u589e\u52a0\u663e\u793a\u4e00\u884c
-
-Show_optional_fields=\u663e\u793a\u53ef\u9009\u57df
-
-Show_PDF/PS_column=\u663e\u793a_PDF/PS_\u5217
-
-Show_required_fields=\u663e\u793a\u5fc5\u9009\u57df
-
-Show_URL/DOI_column=\u663e\u793a_URL/DOI_\u5217
-
-Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=\u5f53\u8f93\u5165\u91cd\u590d\u7684_BibTeX_\u952e\u65f6\u53d1\u51fa\u8b66\u544a
-
-Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=\u5f53\u8f93\u5165\u7a7a\u767d\u7684_BibTeX_\u952e\u65f6\u53d1\u51fa\u8b66\u544a
-
-Simple_HTML=\u7b80\u5355_HTML
-
-Size=\u5927\u5c0f
-
-Skip=\u8df3\u8fc7
-Skipped_-_No_PDF_linked=\u8df3\u8fc7-\u6ca1\u6709_PDF_\u94fe\u63a5
-Skipped_-_PDF_does_not_exist=\u8df3\u8fc7-PDF_\u4e0d\u5b58\u5728
-
-Skipped_entry.=\u5df2\u8df3\u8fc7\u8bb0\u5f55
-
-Sort_alphabetically=\u6309\u5b57\u6bcd\u8868\u6392\u5e8f
-
-Sort_Automatically=\u81ea\u52a8\u6392\u5e8f
-
-Sort_order=\u6392\u5e8f\u987a\u5e8f
-
-sort_subgroups=\u6392\u5e8f\u5b50\u5206\u7ec4
-
-Sorted_all_subgroups_recursively.=\u9012\u5f52\u6392\u5e8f\u6240\u6709\u5b50\u5206\u7ec4\u3002
-
-Sorted_immediate_subgroups.=\u5b8c\u6210\u6392\u5e8f\u76f4\u63a5\u5b50\u5206\u7ec4\u3002
-
-source_edit=\u6e90\u4ee3\u7801\u7f16\u8f91
-Special_Name_Formatters=\u7279\u6b8a\u7684\u59d3\u540d\u683c\u5f0f\u5316\u5668
-
-Special_table_columns=\u7279\u6b8a\u5217
-SQL_connection_established.=SQL_\u8fde\u63a5\u5df2\u5efa\u7acb\u3002
-
-Start_incremental_search=\u5f00\u59cb\u589e\u91cf\u67e5\u627e
-
-Start_search=\u5f00\u59cb\u67e5\u627e
-Starting_import=\u5f00\u59cb\u5bfc\u5165
-
-Statically_group_entries_by_manual_assignment=\u624b\u52a8\u521b\u5efa\u9759\u6001\u5206\u7ec4
-
-Status=\u72b6\u6001
-
-Stop=\u505c\u6b62
-
-Store_journal_abbreviations=\u50a8\u5b58\u671f\u520a\u7f29\u5199
-
-Store_string=\u50a8\u5b58\u7b80\u5199\u5b57\u4e32
-
-Store_the_following_fields_with_braces_around_capital_letters=\u50a8\u5b58\u4e0b\u5217\u57df\u65f6\u4f7f\u7528\u5927\u62ec\u53f7\u5305\u88f9\u5927\u5199\u5b57\u6bcd
-
-Stored_entry=\u50a8\u5b58\u7684\u8bb0\u5f55
-
-Strings=\u7b80\u5199\u5b57\u4e32
-
-Strings_for_database=\u7b80\u5199\u5b57\u4e32\u5217\u8868\u2014\u2014\u6570\u636e\u5e93
-
-Subdatabase_from_aux=\u4ece_AUX_\u6587\u4ef6\u751f\u6210\u7684\u5b50\u6570\u636e\u5e93
-
-Suggest=\u5efa\u8bae
-
-Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=\u5728\u5df2\u77e5\u7684\u671f\u520a\u540d\u7b80\u5199\u548c\u5168\u79f0\u4e4b\u95f4\u5207\u6362\u3002
-
-Synchronize_%0_links=\u540c\u6b65_%0_\u94fe\u63a5
-Synchronize_file_links=\u540c\u6b65\u6587\u4ef6\u94fe\u63a5
-
-Synchronizing_%0_links...=\u6b63\u5728\u540c\u6b65_%0_\u94fe\u63a5...
-
-Table_appearance=\u5217\u8868\u5916\u89c2
-
-Table_background_color=\u5217\u8868\u80cc\u666f\u989c\u8272
-
-Table_grid_color=\u5217\u8868\u7f51\u683c\u989c\u8272
-
-Table_text_color=\u5217\u8868\u6587\u5b57\u989c\u8272
-
-Tabname=\u6807\u7b7e\u9875\u540d
-Target_file_cannot_be_a_directory.=\u76ee\u6807\u6587\u4ef6\u4e0d\u53ef\u4e3a\u76ee\u5f55\u3002
-
-Tertiary_sort_criterion=\u7b2c\u4e09\u6392\u5e8f\u4f9d\u636e
-
-Test=\u6d4b\u8bd5
-
-Text_Input_Area=\u6b64\u5904\u7f16\u8f91\u6587\u672c
-
-The_#_character_is_not_allowed_in_BibTeX_fields=#_\u5b57\u7b26\u65e0\u6cd5\u5728_BibTeX_\u57df\u4e2d\u4f7f\u7528
-
-The_chosen_date_format_for_new_entries_is_not_valid=\u4e3a\u65b0\u8bb0\u5f55\u9009\u62e9\u7684\u65e5\u671f\u683c\u5f0f\u975e\u6cd5
-
-The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=\u9009\u62e9\u7684\u7f16\u7801_'%0'_\u65e0\u6cd5\u652f\u6301\u4e0b\u5217\u5b57\u7b26:_
-
-The_CiteSeer_fetch_operation_returned_zero_results.=CiteSeerX_\u6293\u53d6\u64cd\u4f5c\u8fd4\u56de_0_\u4e2a\u7ed3\u679c\u3002
-
-
-The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=\u5f53\u524d\u7248\u672c\u4f7f\u7528\u4e86\u65b0\u7684\u65b9\u6cd5\u6765\u5904\u7406\u5916\u90e8\u6587\u4ef6\u94fe\u63a5\u3002\u4e3a\u4f7f\u7528\u65b0\u7279\u6027\uff0c\u60a8\u7684\u94fe\u63a5\u5fc5\u987b\u88ab\u8f6c\u6362\u6210\u65b0\u7684\u683c\u5f0f\uff0c<br>JabRef_\u4e5f\u4f1a\ [...]
-
-the_field_<b>%0</b>=\u57df_<b>%0</b>
-
-The_file<BR>'%0'<BR>has_been_modified<BR>externally!=\u6587\u4ef6<BR>'%0'<BR>\u5df2\u7ecf\u88ab\u5916\u90e8\u7a0b\u5e8f\u4fee\u6539\uff01
-
-The_group_"%0"_already_contains_the_selection.=\u5206\u7ec4_"%0"_\u4e2d\u5df2\u7ecf\u5305\u542b\u9009\u4e2d\u7684\u9879\u3002
-
-The_label_of_the_string_can_not_be_a_number.=\u8be5\u5b57\u7b26\u4e32\u7684_label_\u4e0d\u53ef\u4ee5\u4e3a\u6570\u5b57\u3002
-
-The_label_of_the_string_can_not_contain_spaces.=\u8be5\u5b57\u7b26\u4e32\u7684_label_\u4e0d\u53ef\u4ee5\u5305\u542b\u7a7a\u683c\u3002
-
-The_label_of_the_string_can_not_contain_the_'#'_character.=\u8be5\u5b57\u7b26\u4e32\u7684_label_\u4e0d\u53ef\u4ee5\u5305\u542b_'#'_\u5b57\u7b26\u3002
-
-The_output_option_depends_on_a_valid_import_option.=\u8f93\u51fa\u9009\u9879\u4f9d\u8d56\u4e8e\u4e00\u4e2a\u5408\u6cd5\u7684\u5bfc\u5165\u9009\u9879\u3002
-The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=\u8be5_PDF_\u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a_BibTeX_\u8bb0\u5f55\uff0c\n\u60a8\u5e0c\u671b\u5bfc\u5165\u8fd9\u4e9b\u8bb0\u5f55\u5230\u5f53\u524d\u6570\u636e\u5e93\u4e2d\u5417\uff1f
-
-The_regular_expression_<b>%0</b>_is_invalid%c=\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%0</b>_\u662f\u975e\u6cd5\u7684%c
-
-The_search_is_case_insensitive.=\u8be5\u67e5\u8be2\u662f\u4e0d\u533a\u5206\u5927\u5c0f\u5199\u7684\u3002
-
-The_search_is_case_sensitive.=\u8be5\u67e5\u8be2\u662f\u533a\u5206\u5927\u5c0f\u5199\u7684\u3002
-
-The_string_has_been_removed_locally=\u7b80\u5199\u5b57\u4e32\u88ab\u672c\u5730\u79fb\u9664
-
-There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=\u5b58\u5728\u53ef\u80fd\u4ecd\u672a\u89e3\u51b3\u7684\u91cd\u590d\u9879(\u4ee5'D'\u56fe\u6807\u6807\u8bb0)\uff0c\u662f\u5426\u7ee7\u7eed\uff1f
-
-this_button_will_update=\u8fd9\u4e2a\u6309\u94ae\u5c06\u66f4\u65b0
-This_database_was_written_using_an_older_version_of_JabRef.=\u6b64\u6570\u636e\u5e93\u662f\u7531\u65e7\u7248\u672c\u7684_JabRef_\u751f\u6210\u7684\u3002
-
-This_entry_has_no_BibTeX_key._Generate_key_now?=\u6b64\u8bb0\u5f55\u6ca1\u6709_BibTeX_\u952e\uff0c\u73b0\u5728\u751f\u6210\u5b83\uff1f
-
-This_entry_is_incomplete=\u8be5\u8bb0\u5f55\u662f\u4e0d\u5b8c\u6574\u7684
-
-This_entry_type_cannot_be_removed.=\u8be5\u8bb0\u5f55\u7c7b\u578b\u65e0\u6cd5\u88ab\u79fb\u9664\u3002
-
-This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=\u6b64\u5916\u90e8\u94fe\u63a5\u7c7b\u578b_'%0'_\u672a\u5b9a\u4e49\uff0c\u60a8\u60f3\u600e\u4e48\u529e\uff1f
-
-This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=\u6b64\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55\u7cfb\u7528\u6237\u624b\u52a8\u65b9\u5f0f\u5206\u914d\u3002\u60a8\u53ef\u4 [...]
-
-This_group_contains_entries_in_which=\u6b64\u5206\u7ec4\u4e2d\u8bb0\u5f55
-
-This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=\u6b64\u5206\u7ec4\u4e2d\u8bb0\u5f55\u7684\u67d0\u4e2a\u57df\u4e2d\u5305\u542b\u6b63\u5219\u8868\u8fbe\u5f0f\u2014\u2014<b>%0</b> 
-
-This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=\u6b64\u5206\u7ec4\u4e2d\u8bb0\u5f55\u7684\u67d0\u4e2a\u57df\u4e2d\u5305\u542b\u8bcd\u7ec4_<b>%0</b> 
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=\u6b64\u5206\u7ec4\u4e2d\u8bb0\u5f55\u7684_<b>%0</b>_\u57df\u5305\u542b\u5173\u952e\u8bcd_<b>%1</b> 
-
-This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=\u6b64\u5206\u7ec4\u4e2d\u8bb0\u5f55\u7684_<b>%0</b>_\u57df\u5305\u542b\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%1</b> 
-
-This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=\u8fd9\u662f\u4e00\u4e2a\u4e3a\u4ece\u666e\u901a\u6587\u672c\u4e2d\u5bfc\u5165\u4e00\u4e9b\u57df\u5185\u5bb9\u7684\u7b80\u5355\u590d\u5236\u548c\u7c98\u8d34\u5bf9\u8bdd\u6846\u3002
-This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u8be5\u9009\u9879\u4f7f_JabRef_\u904d\u5386\u6240\u6709_%0_\u94fe\u63a5\uff0c\u68c0\u67e5\u94fe\u63a5\u6587\u4ef6\u662f\u5426\u5b58\u5728\u3002\u5982\u679c\u4e0d\u5b58\u5728\uff0c\u60a8\u5c06\u4f1a\u5f97\u5230\u4e00\u4e2a\u9009\u9879\u6765\u5904\u7406\u8fd9\u4e2a\u95ee\u9898\u3002
-
-This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=\u6b64\u64cd\u4f5c\u8981\u6c42\u6240\u6709\u9009\u4e2d\u8bb0\u5f55\u7684_BibTeX_\u952e\u503c\u4e0d\u4e3a\u7a7a\u3002
-This_operation_requires_at_least_one_entry.=\u6b64\u64cd\u4f5c\u8981\u6c42\u81f3\u5c11\u9009\u4e2d\u4e00\u4e2a\u8bb0\u5f55\u3002
-
-This_operation_requires_one_or_more_entries_to_be_selected.=\u8fd9\u4e2a\u64cd\u4f5c\u8981\u6c42\u9009\u4e2d\u4e00\u6761\u6216\u591a\u6761\u8bb0\u5f55\u3002
-
-This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=\u8fd9\u4f1a\u5c06\u6240\u6709_'pdf'_\u548c_'ps'_\u57df\u7684\u94fe\u63a5\u79fb\u52a8\u5230_'%0'_\u57df\uff0c\u662f\u5426\u7ee7\u7eed\uff1f
-
-To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=\u8981\u8bbe\u7f6e\u7684\u8bdd\uff0c\u8bf7\u5230_<B>\u9009\u9879->\u7ba1\u7406\u671f\u520a\u540d\u7f29\u5199\u89c4\u5219</B>\u83dc\u5355\u9879
-
-Toggle_abbreviation=\u6253\u5f00/\u5173\u95ed\u540d\u79f0\u7f29\u5199
-Toggle_entry_preview=\u6253\u5f00/\u5173\u95ed\u8bb0\u5f55\u9884\u89c8
-Toggle_groups_interface=\u6253\u5f00/\u5173\u95ed\u7ec4\u754c\u9762
-Toggle_search_panel=\u6253\u5f00/\u5173\u95ed\u67e5\u627e\u9762\u677f
-
-Try_different_encoding=\u5c1d\u8bd5\u5176\u5b83\u7f16\u7801
-
-Type_set_to_'other'=\u8bbe\u7f6e\u7c7b\u578b\u4e3a_'other'
-Unabbreviate_journal_names_of_the_selected_entries=\u5c55\u5f00\u9009\u4e2d\u8bb0\u5f55\u7684\u7f29\u5199\u671f\u520a\u540d\u79f0
-Unabbreviated_%0_journal_names.=\u5c55\u5f00_%0_\u671f\u520a\u540d\u79f0\u3002
-
-unable_to_access_LyX-pipe=\u65e0\u6cd5\u8bbf\u95ee_LyX_\u7ba1\u9053
-
-Unable_to_create_graphical_interface=\u65e0\u6cd5\u751f\u6210\u56fe\u5f62\u754c\u9762
-
-Unable_to_open_file.=\u65e0\u6cd5\u6253\u5f00\u6587\u4ef6.
-Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=\u65e0\u6cd5\u6253\u5f00\u94fe\u63a5\u3002\u65e0\u6cd5\u8c03\u7528\u4e0e\u6587\u4ef6\u7c7b\u578b_'%1'_\u5173\u8054\u7684\u5e94\u7528\u7a0b\u5e8f_'%0'_\u3002
-Unable_to_read_default_icon_theme.=\u65e0\u6cd5\u8bfb\u5165\u9ed8\u8ba4\u7684\u56fe\u6807\u4e3b\u9898\u3002
-Unable_to_read_icon_theme_file=\u65e0\u6cd5\u8bfb\u53d6\u56fe\u6807\u7684\u4e3b\u9898\u6587\u4ef6
-
-unable_to_write_to=\u65e0\u6cd5\u5199\u5165
-Undefined_file_type=\u672a\u5b9a\u4e49\u7684\u6587\u4ef6\u7c7b\u578b
-
-Undo=\u64a4\u9500
-
-Union=\u5e76\u96c6
-
-Unknown_bibtex_entries=\u672a\u77e5\u7684_BibTeX_\u8bb0\u5f55
-
-unknown_edit=\u672a\u77e5\u4fee\u6539
-
-unknown_entry_type=\u4f4d\u7f6e\u7684\u8bb0\u5f55\u7c7b\u578b
-
-Unknown_export_format=\u672a\u77e5\u7684\u5bfc\u51fa\u683c\u5f0f
-
-Unmark_all=\u64a4\u9500\u6240\u6709\u9ad8\u4eae\u6807\u8bb0
-
-Unmark_entries=\u64a4\u9500\u9009\u4e2d\u9ad8\u4eae\u6807\u8bb0
-
-Unmark_entry=\u64a4\u9500\u8bb0\u5f55\u9ad8\u4eae\u6807\u8bb0
-
-Unmarked_selected=\u5df2\u64a4\u9500\u9009\u4e2d\u9ad8\u4eae\u6807\u8bb0
-
-Unpack_EndNote_filter_set=\u89e3\u5f00_EndNote_\u8fc7\u6ee4\u5668\u96c6\u5408
-
-Unpacked_file.=\u91ca\u653e\u7684\u6587\u4ef6\u3002
-
-Unsupported_version_of_class_%0\:_%1=\u4e0d\u652f\u6301\u7684\u7c7b\u7248\u672c_%0:_%1
-
-untitled=\u672a\u547d\u540d
-
-Up=\u4e0a
-
-Update_to_current_column_widths=\u4f7f\u7528\u5f53\u524d\u89c6\u56fe\u4e2d\u7684\u5217\u5bbd
-
-Updated_group_selection=\u66f4\u65b0\u5206\u7ec4\u9009\u62e9
-Upgrade_external_links=\u5347\u7ea7\u5916\u90e8\u94fe\u63a5
-Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=\u5347\u7ea7\u5916\u90e8_PDF/PS_\u94fe\u63a5\u4ee5\u4f7f\u7528_'%0'_\u57df\u3002
-Upgrade_file=\u5347\u7ea7\u6587\u4ef6
-Upgrade_old_external_file_links_to_use_the_new_feature=\u5347\u7ea7\u65e7\u5916\u90e8\u6587\u4ef6\u94fe\u63a5\u4ee5\u4f7f\u7528\u65b0\u7279\u6027
-Upgraded_links.=\u5b8c\u6210\u5347\u7ea7\u94fe\u63a5\u3002
-UPPER=\u5927\u5199\u5168\u90e8
-Upper_Each_First=\u5927\u5199\u8bcd\u9996
-Upper_first=\u5927\u5199\u53e5\u9996
-
-usage=\u7528\u6cd5
-
-Use_antialiasing_font=\u4f7f\u7528_antialiasing_\u5b57\u4f53
-Use_autocompletion_for_the_following_fields=\u4e3a\u4ee5\u4e0b\u57df\u5f00\u542f\u81ea\u52a8\u5b8c\u6210\u529f\u80fd
-Use_custom_icon_theme=\u4f7f\u7528\u81ea\u5b9a\u4e49\u56fe\u6807\u4e3b\u9898
-Use_default_viewer=\u4f7f\u7528\u9ed8\u8ba4\u67e5\u770b\u5668
-
-Use_inspection_window_also_when_a_single_entry_is_imported.=\u4ec5\u5bfc\u5165\u4e00\u6761\u8bb0\u5f55\u65f6\u4e5f\u6253\u5f00\u68c0\u89c6\u7a97\u53e3\u663e\u793a\u8be5\u8bb0\u5f55
-Use_native_file_dialog=\u4f7f\u7528\u672c\u5730\u6587\u4ef6\u5bf9\u8bdd\u6846
-
-Use_other_look_and_feel=\u4f7f\u7528\u5176\u5b83\u89c6\u89c9\u6548\u679c\u7c7b_(look_and_feel,_\u5373_Java_\u754c\u9762\u7c7b)
-Use_Regular_Expression_Search=\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f\u641c\u7d22
-
-Use_regular_expressions=\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f
-
-Use_the_following_delimiter_character(s)=\u4f7f\u7528\u4e0b\u9762\u7684\u5206\u9694\u7b26
-Username_\:=\u7528\u6237\u540d:
-
-Value_cleared_externally=\u5185\u5bb9\u4ece\u5916\u90e8\u88ab\u6e05\u9664
-
-Value_set_externally=\u5185\u5bb9\u4ece\u5916\u90e8\u88ab\u8bbe\u7f6e
-
-verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=\u68c0\u67e5_LyX_\u662f\u5426\u5728\u8fd0\u884c\u4ee5\u53ca_lyx_\u7ba1\u9053\u662f\u5426\u53ef\u7528
-
-View=\u89c6\u56fe
-Vim_Server_Name=Vim_\u670d\u52a1\u5668\u540d
-
-Waiting_for_ArXiv...=\u7b49\u5f85_ArXiv...
-
-Warn_about_unresolved_duplicates_when_closing_inspection_window=\u5173\u95ed\u68c0\u89c6\u7a97\u53e3\u65f6\u8b66\u544a\u672a\u5904\u7406\u7684_BibTeX_\u952e\u91cd\u590d\u60c5\u51b5
-
-Warn_before_overwriting_existing_keys=\u8986\u76d6\u5df2\u5b58\u5728\u7684_BibTeX_\u952e\u4e4b\u524d\u53d1\u51fa\u8b66\u544a
-
-Warning=\u8b66\u544a
-Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=\u8b66\u544a:_\u65e0\u6cd5\u5b8c\u6210\u4fee\u590d\u64cd\u4f5c\uff1b\u60a8\u7684\u6587\u4ef6\u53ef\u80fd\u5df2\u635f\u574f\u3002\u9519\u8bef\u4fe1\u606f
-
-Warning_there_is_a_duplicate_key=\u8b66\u544a:_\u5df2\u5b58\u5728\u91cd\u590d\u7684_BibTeX_\u952e
-
-Warnings=\u8b66\u544a
-
-web_link=web_\u94fe\u63a5
-
-What_do_you_want_to_do?=\u60a8\u5e0c\u671b\u505a\u4ec0\u4e48?
-
-When_adding/removing_keywords,_separate_them_by=\u5f53\u589e\u52a0/\u79fb\u9664\u5173\u952e\u5b57\u65f6\uff0c\u4f7f\u7528\u5206\u9694\u7b26
-Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=\u5c06\u5199\u5165_XMP_\u5143\u6570\u636e\u5230\u9009\u4e2d\u8bb0\u5f55\u94fe\u63a5\u7684_PDF_\u6587\u4ef6\u3002
-
-with=\u4ee5
-
-Word=\u5355\u8bcd
-Write_BibtexEntry_as_XMP-metadata_to_PDF.=\u5c06_Bibtex_\u8bb0\u5f55\u4f5c\u4e3a_XMP_\u6e90\u6570\u636e\u5199\u5165\u5230_PDF_\u4e2d\u3002
-
-Write_XMP=\u5199\u5165_XMP
-Write_XMP-metadata=\u5199\u5165_XMP_\u5143\u6570\u636e
-Write_XMP-metadata_for_all_PDFs_in_current_database?=\u5c06_XMP_\u5143\u6570\u636e\u5199\u5165\u5230\u5f53\u524d\u6570\u636e\u5e93\u4e2d\u6240\u6709_PDF_\u6587\u4ef6?
-Writing_XMP=\u6b63\u5728\u5199\u5165_XMP
-Writing_XMP_metadata...=\u6b63\u5728\u5199\u5165_XMP_\u5143\u6570\u636e...
-Writing_XMP_metadata_for_selected_entries...=\u6b63\u5728\u4e3a\u9009\u4e2d\u8bb0\u5f55\u5199\u5165_XMP_\u5143\u6570\u636e...
-Writing_XMP_to_'%0'...=\u6b63\u5728\u5199\u5165_XMP_\u5230_'%0'...
-
-Wrong_file_format=\u9519\u8bef\u7684\u6587\u4ef6\u683c\u5f0f
-
-Wrote_XMP-metadata=\u5199\u5165_XMP-\u5143\u6570\u636e
-Wrote_XMP_to_'%0'.=\u5199\u5165_XMP_\u5230_'%0'.
-
-XMP-annotated_PDF=XMP-annotated_PDF
-XMP_Export_Privacy_Settings=XMP_\u5bfc\u51fa\u9690\u79c1\u8bbe\u7f6e
-XMP_metadata=XMP_\u5143\u6570\u636e
-XMP_metadata_found_in_PDF\:_%0=PDF_\u4e2d\u7684_XMP_\u5143\u6570\u636e:_%0
-You_must_restart_JabRef_for_this_to_come_into_effect.=
-You_have_changed_the_language_setting.=
-You_have_changed_the_look_and_feel_setting.=
-
-You_have_cleared_this_field._Original_value=\u60a8\u6e05\u9664\u4e86\u8fd9\u4e2a\u57df\uff0c\u539f\u6765\u7684\u503c
-
-You_have_entered_an_invalid_search_'%0'.=\u60a8\u8f93\u5165\u4e86\u4e00\u4e2a\u975e\u6cd5\u7684\u67e5\u8be2_'%0'.
-
-You_must_choose_a_file_name_to_store_journal_abbreviations=\u60a8\u5fc5\u987b\u9009\u62e9\u4e00\u4e2a\u6587\u4ef6\u540d\u6765\u5b58\u50a8\u671f\u520a\u540d\u79f0\u7f29\u5199
-
-You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=\u4e3a\u4f7f\u70ed\u952e\u7ed1\u5b9a\u751f\u6548\uff0c\u60a8\u5fc5\u987b\u91cd\u542f_JabRef\u3002
-
-You_must_set_both_BibTeX_key_and_%0_directory=\u60a8\u5fc5\u987b\u8bbe\u7f6e_BibTeX_\u952e\u503c\u548c%0\u76ee\u5f55
-
-Your_new_key_bindings_have_been_stored.=\u60a8\u7684\u70ed\u952e\u7ed1\u5b9a\u5df2\u7ecf\u88ab\u5b58\u50a8\u3002
-
-
-The_following_fetchers_are_available\:=\u4e0b\u9762\u5217\u51fa\u7684\u662f\u53ef\u7528\u7684\u6293\u53d6\u5668:
-Could_not_find_fetcher_'%0'=\u65e0\u6cd5\u627e\u5230\u6293\u53d6\u5668_'%0'
-Running_Query_'%0'_with_fetcher_'%1'.=\u4f7f\u7528\u6293\u53d6\u5668'%1'\u6267\u884c\u8bf7\u6c42'%0'
-Please_wait!=\u8bf7\u7a0d\u5019\uff01
-Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=\u4f7f\u7528\u6293\u53d6\u5668'%1'\u8bf7\u6c42'%0'\u672a\u8fd4\u56de\u4efb\u4f55\u7ed3\u679c\u3002
-Open_SPIRES_entry=\u6253\u5f00_SPIRES_\u8bb0\u5f55
-Move/Rename_file=\u79fb\u52a8/\u91cd\u547d\u540d_\u6587\u4ef6
-File_moved=\u6587\u4ef6\u79fb\u52a8\u5b8c\u6210
-Move_file_failed=\u79fb\u52a8\u6587\u4ef6\u5931\u8d25
-Could_not_move_file=\u65e0\u6cd5\u79fb\u52a8\u6587\u4ef6
-Could_not_find_file_'%0'.=\u65e0\u6cd5\u627e\u5230\u6587\u4ef6_'%0'\u3002
-Move/rename_file=\u79fb\u52a8/\u91cd\u547d\u540d_\u6587\u4ef6
-Number_of_entries_successfully_imported=\u6210\u529f\u5bfc\u5165\u7684\u8bb0\u5f55\u6570
-Import_canceled_by_user=\u5bfc\u5165\u64cd\u4f5c\u88ab\u7528\u6237\u53d6\u6d88
-Progress\:_%0_of_%1=\u8fdb\u5ea6:_%0_of_%1
-Error_while_fetching_from_JSTOR=\u4ece_JSTOR_\u6293\u53d6\u53d1\u751f\u9519\u8bef
-
-Fetching_Medline_by_id...=\u4f9d\u636e_id_\u4ece_Medline_\u6293\u53d6...
-
-Fetching_Medline_by_term...=\u4f9d\u636e_term_\u4ece_Medline_\u6293\u53d6...
-Medline_import_canceled=Medline_\u5bfc\u5165\u88ab\u53d6\u6d88
-Please_enter_a_valid_number=\u8bf7\u8f93\u5165\u4e00\u4e2a\u5408\u6cd5\u7684\u6570\u5b57
-Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=\u8bf7\u8f93\u5165\u4ee5\u9017\u53f7\u5206\u5272\u7684_Medline_ID_(\u6570\u5b57)_\u6216\u8005_term_\u5217\u8868\u3002
-An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=\u4ece_SPIRES_\u6e90_(%0)_\u6293\u53d6\u65f6\u53d1\u751f\u4e86\u4e00\u4e2a\u9519\u8bef\:
-Error_while_fetching_from_Spires\:_=\u4ece_Spires_\u6293\u53d6\u53d1\u751f\u9519\u8bef\:_
-Connect_to_external_SQL_database=\u8fde\u63a5\u5230\u5916\u90e8_SQL_\u6570\u636e\u5e93
-Export_to_external_SQL_database=\u5bfc\u51fa\u5230\u5916\u90e8_SQL_\u6570\u636e\u5e93
-
-Show_results_in_dialog=\u5728\u5bf9\u8bdd\u6846\u4e2d\u663e\u793a\u7ed3\u679c
-Global_search=\u5168\u5c40\u67e5\u8be2
-Show_search_results_in_a_window=\u5728\u65b0\u7a97\u53e3\u4e2d\u663e\u793a\u67e5\u8be2\u7ed3\u679c
-Search_results=\u67e5\u8be2\u7ed3\u679c
-Move_file_to_file_directory?=\u79fb\u52a8\u6587\u4ef6\u5230\u6587\u4ef6\u76ee\u5f55?
-Rename_to_'%0'=\u91cd\u547d\u540d\u4e3a_'%0'
-Move_to_file_directory=\u79fb\u52a8\u5230\u6587\u4ef6\u76ee\u5f55
-You_have_changed_the_menu_and_label_font_size.=
-
-Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=\u6570\u636e\u5e93\u53d7\u4fdd\u62a4\u4e2d\uff0c\u5728\u5916\u90e8\u4fee\u6539\u672a\u88ab\u590d\u67e5\u524d\u65e0\u6cd5\u6267\u884c\u4fdd\u5b58\u64cd\u4f5c\u3002
-Protected_database=\u53d7\u4fdd\u62a4\u7684\u6570\u636e\u5e93
-Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=\u5728\u5916\u90e8\u4fee\u6539\u672a\u88ab\u590d\u67e5\u4e4b\u524d\u62d2\u7edd\u4fdd\u5b58\u6570\u636e\u5e93\u3002
-Database_protection=\u6570\u636e\u5e93\u4fdd\u62a4
-Unable_to_save_database=\u65e0\u6cd5\u4fdd\u5b58\u6570\u636e\u5e93
-
-BibTeX_key_generator=BibTeX_\u952e\u751f\u6210\u5668
-Unable_to_open_link.=\u65e0\u6cd5\u6253\u5f00\u94fe\u63a5\u3002
-Search_JSTOR=\u641c\u7d22_JSTOR
-Attempting_SQL_import...=\u5c1d\u8bd5_SQL_\u5bfc\u5165...
-BibO_RDF=BibO_RDF
-HTML_parser=HTML_\u89e3\u6790
-
-Move_the_keyboard_focus_to_the_entry_table=\u5c06\u952e\u76d8\u7126\u70b9\u79fb\u52a8\u5230\u8bb0\u5f55\u5217\u8868
-MIME_type=MIME_\u7c7b\u578b
-
-This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=\u8be5\u9009\u9879\u4f7f\u5f97\u6253\u5f00\u6216\u8005\u5bfc\u5165\u65b0\u6587\u4ef6\u7684\u64cd\u4f5c\u5728\u5df2\u7ecf\u8fd0\u884c\u7684_JabRef_\u4e2d\u8fdb\u884c\uff0c\u800c\u4e0d\ [...]
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=\u6ce8\u610f\uff1a\u8fd9\u4e9b\u8bbe\u7f6e\u4e3b\u8981\u5e94\u7528\u4e8e\u65e7\u5f0f\u7684_<b>pdf</b>_\u548c_<b>ps</b>_\u57df\uff0c\u8fd9\u610f\u5473\u7740\u5982\u679c\u60a8\u4e0d\u77e5\u9053\u5b83\u662f\u4ec0\u4e48\u610f\u601d\uff0c<BR>\u60a8\u53ef\u4ee5\u5ffd\u89c6\u8be5\u9009\u9879\u3002\u5bf9\u5927\u90e8\u5206\u75 [...]
-Legacy_file_fields=\u65e7\u5f0f\u6587\u4ef6\u57df
-
-This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u8fd9\u5c06\u4f7f_JabRef_\u4f9d\u636e%0\u6269\u5c55\u540d\u67e5\u627e\u6587\u4ef6\u662f\u5426\u5b58\u5728\uff0c\u5982\u679c\u627e\u4e0d\u5230\uff0cJabRef_\u5c06\u63d0\u4f9b\u7ed9\u60a8\u9009\u9879\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002
-Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=\u8fd0\u884c\u6293\u53d6\u5668\uff0c\u4f8b\u5982_"--fetch\=Medline\:cancer"
-
-The_ACM_Digital_Library=ACM_\u6570\u5b57\u56fe\u4e66\u9986
-Reset=\u91cd\u7f6e
-
-Use_IEEE_LaTeX_abbreviations=\u4f7f\u7528_IEEE_LaTeX_\u7f29\u5199
-The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
-Search_ACM_Portal=\u641c\u7d22_ACM_Portal
-Connection_to_ACM_Portal_failed=\u8fde\u63a5_ACM_Portal_\u5931\u8d25
-
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=\u6253\u5f00\u6587\u4ef6\u65f6\uff0c\u5982\u679c\u6587\u4ef6\u94fe\u63a5\u672a\u5b9a\u4e49\uff0c\u5219\u81ea\u52a8\u5bfb\u627e\u5339\u914d\u7684\u6587\u4ef6\u3002
-Settings_for_%0=%0_\u7684\u8bbe\u7f6e
-Insert_selected_citations_into_Vim=\u63a8\u9001\u9009\u4e2d\u7684_citation_\u5230_Vim
-RIS=RIS
-
-Assign_exclusively_to_group=\u5206\u914d\u5230\u5355\u4e00\u5206\u7ec4
-
-Bad_Request_'%0'.=\u9519\u8bef\u7684\u8bf7\u6c42_'%0'.
-
-Mark_entries_imported_into_an_existing_database=\u6807\u8bb0\u5bfc\u5165\u5230\u5df2\u6709\u6570\u636e\u5e93\u7684\u65b0\u8bb0\u5f55
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=\u5bfc\u5165\u65b0\u8bb0\u5f55\u5230\u6570\u636e\u5e93\u4e4b\u524d\u79fb\u9664\u6240\u6709\u65b0\u8bb0\u5f55\u7684\u6807\u8bb0
-
-Forward=\u524d\u8fdb
-Back=\u540e\u9000
-Sort_the_following_fields_as_numeric_fields=\u4ee5\u6570\u503c\u65b9\u5f0f\u6392\u5e8f\u4e0b\u5217\u57df
-Line_%0\:_Found_corrupted_BibTeX-key.=\u7b2c_%0_\u884c\:_\u53d1\u73b0\u9519\u8bef\u7684_BibTeX_\u952e\u3002
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=\u7b2c_%0_\u884c\:_\u53d1\u73b0\u9519\u8bef\u7684_BibTeX_\u952e(\u5305\u542b\u7a7a\u683c)\u3002
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=\u7b2c_%0_\u884c\:_\u53d1\u73b0\u9519\u8bef\u7684_BibTeX_\u952e(\u9017\u53f7\u4e22\u5931)\u3002
-Finished_downloading_full_text_document=\u5b8c\u6210\u5168\u6587\u4e0b\u8f7d
-Unable_to_find_full_text_document_in_the_linked_web_page.=\u5728\u7ed9\u5b9a\u7684\u94fe\u63a5\u9875\u9762\u4e2d\u672a\u627e\u5230\u4e0b\u8f7d\u5168\u6587\u94fe\u63a5\u3002
-Connection_error_when_trying_to_find_full_text_document.=\u5c1d\u8bd5\u4e0b\u8f7d\u5168\u6587\u65f6\u7f51\u7edc\u8fde\u63a5\u5931\u8d25\u3002
-This_entry_provides_no_URL_or_DOI_links.=\u6b64\u8bb0\u5f55\u672a\u63d0\u4f9b_URL_\u6216_DOI_\u94fe\u63a5\u3002
-Full_text_article_download_failed=\u4e0b\u8f7d\u5168\u6587\u5931\u8d25
-Update_to_current_column_order=\u4f7f\u7528\u5f53\u524d\u89c6\u56fe\u4e2d\u7684\u5217\u987a\u5e8f
-
-Rename_field=\u91cd\u547d\u540d\u57df
-Set/clear/rename_fields=\u8bbe\u7f6e/\u6e05\u9664/\u91cd\u547d\u540d\u57df
-Rename_field_to\:=\u91cd\u547d\u540d\u8be5\u57df\u4e3a_\:
-Move_contents_of_a_field_into_a_field_with_a_different_name=\u5c06\u4e00\u4e2a\u57df\u4e2d\u7684\u5185\u5bb9\u79fb\u52a8\u5230\u53e6\u4e00\u4e2a\u57df\u4e2d
-You_can_only_rename_one_field_at_a_time=\u4e00\u6b21\u53ea\u80fd\u91cd\u547d\u540d\u4e00\u4e2a\u57df
-
-Remove_all_broken_links=\u79fb\u9664\u6240\u6709\u5931\u6548\u94fe\u63a5
-
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=\u65e0\u6cd5\u4f7f\u7528\u7aef\u53e3_%0_\u8fdb\u884c\u8fdc\u7a0b\u64cd\u4f5c;\u8be5\u7aef\u53e3\u53ef\u80fd\u88ab\u5176\u5b83\u5e94\u7528\u7a0b\u5e8f\u5360\u7528\uff0c\u8bf7\u4f7f\u7528\u5176\u5b83\u7aef\u53e3\u3002
-Plugin_installer=\u63d2\u4ef6\u5b89\u88c5\u5de5\u5177
-Unable_to_create_plugin_directory=\u65e0\u6cd5\u521b\u5efa\u63d2\u4ef6\u76ee\u5f55
-Unable_to_copy_file=\u65e0\u6cd5\u62f7\u8d1d\u6587\u4ef6
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=\u63d2\u4ef6\u5b89\u88c5\u6210\u529f\uff0c\u60a8\u5fc5\u987b\u91cd\u542f_JabRef_\u4ee5\u8f7d\u5165\u65b0\u63d2\u4ef6\u3002
-Unable_to_create_user_plugin_directory=\u65e0\u6cd5\u521b\u5efa\u7528\u6237\u63d2\u4ef6\u76ee\u5f55
-Plugin_installation_failed.=\u63d2\u4ef6\u5b89\u88c5\u5931\u8d25\u3002
-The_same_version_of_this_plugin_is_already_installed.=\u8be5\u63d2\u4ef6\u7684\u540c\u4e00\u7248\u672c\u5df2\u7ecf\u5b89\u88c5\u3002
-A_newer_version_of_this_plugin_is_already_installed.=\u8be5\u63d2\u4ef6\u7684\u66f4\u65b0\u7248\u672c\u5df2\u7ecf\u5b89\u88c5\u3002
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=\u8be5\u63d2\u4ef6\u7684\u4e00\u4e2a\u6216\u591a\u4e2a\u65e7\u7248\u672c\u5df2\u7ecf\u5b89\u88c5\uff0c\u5220\u9664\u65e7\u7248\u672c\uff1f
-Old_versions_deleted_successfully.=\u6210\u529f\u5220\u9664\u65e7\u7248\u672c\u3002
-Install_plugin=\u5b89\u88c5\u63d2\u4ef6
-Download_plugin=\u4e0b\u8f7d\u63d2\u4ef6
-Plugin_manager=\u63d2\u4ef6\u7ba1\u7406\u5de5\u5177
-Delete_the_%0_selected_plugins?=\u5220\u9664\u9009\u4e2d\u7684_%0_\u4e2a\u63d2\u4ef6\uff1f
-Delete_plugins=\u5220\u9664\u63d2\u4ef6
-Delete_the_selected_plugin?=\u5220\u9664\u9009\u4e2d\u7684\u63d2\u4ef6\uff1f
-Delete_plugin=\u5220\u9664\u63d2\u4ef6
-Enter_download_URL=\u8f93\u5165\u4e0b\u8f7d_URL
-Plugin_name=\u63d2\u4ef6\u540d
-Version=\u7248\u672c
-Unknown=\u672a\u77e5
-Not_loaded=\u6ca1\u6709\u88ab\u52a0\u8f7d
-Loaded=\u5df2\u52a0\u8f7d
-Could_not_determine_version_of_=\u65e0\u6cd5\u53d6\u5f97\u7248\u672c\u4fe1\u606f\u2014\u2014
-Install_anyway?=\u4ecd\u7136\u7ee7\u7eed\u5b89\u88c5\uff1f
-
-Looking_for_full_text_document...=\u67e5\u627e\u6587\u7ae0\u5168\u6587\u6587\u6863
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=\u6839\u636e_DOI_\u6216\u8005_URL_\u94fe\u63a5\uff0c\u5c1d\u8bd5\u67e5\u627e_PDF_\u5168\u6587\u6587\u6863\u3002
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=\u65e0\u6cd5\u627e\u5230\u6587\u7ae0\u5168\u6587\uff0c\u6ca1\u6709\u5b9a\u4e49\u7f51\u7ad9_\u201c%0\u201d_\u4e0a\u7684\u67e5\u627e\u7b97\u6cd5\u3002
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=\u627e\u5230_pdf_\u8fde\u63a5\uff0c\u4f46\u6536\u5230\u7684_MIME_\u7c7b\u578b\u9519\u8bef\uff0c\u8fd9\u53ef\u80fd\u8bf4\u660e\u60a8\u6ca1\u6709\u8bbf\u95ee\u8be5\u6587\u7ae0\u5168\u6587\u7684\u6743\u9650\u3002
-
-Autosave=\u81ea\u52a8\u4fdd\u5b58
-Prompt_before_recovering_a_database_from_an_autosave_file=\u7528\u81ea\u52a8\u4fdd\u5b58\u7684\u6587\u4ef6\u6062\u590d\u6570\u636e\u5e93\u65f6\u8fdb\u884c\u63d0\u793a
-Autosave_interval_(minutes)=\u81ea\u52a8\u4fdd\u5b58\u95f4\u9694_(\u5206\u949f)
-Do_you_want_to_recover_the_database_from_the_autosave_file?=\u60a8\u5e0c\u671b\u7528\u81ea\u52a8\u4fdd\u5b58\u7684\u6587\u4ef6\u6062\u590d\u6570\u636e\u5e93\u5417\uff1f
-Recover_from_autosave=\u7528\u81ea\u52a8\u4fdd\u5b58\u7684\u6587\u4ef6\u6062\u590d
-%0_warnings=%0_\u4e2a\u8b66\u544a
-
-Save_in_current_table_sort_order=\u6309\u7167\u5f53\u524d\u8868\u683c\u6392\u5e8f\u4fdd\u5b58
-Export_in_current_table_sort_order=\u6309\u7167\u5f53\u524d\u8868\u683c\u6392\u5e8f\u5bfc\u51fa
-Export_ordered_by_author/editor/year=\u6309\u7167\u201c\u4f5c\u8005/\u7f16\u8005/\u5e74\u4efd\u201d\u987a\u5e8f\u5bfc\u51fa
-Export_entries_in_their_original_order=\u6309\u7167\u539f\u59cb\u987a\u5e8f\u5bfc\u51fa\u8bb0\u5f55
-Error_opening_file_'%0'.=\u6253\u5f00\u6587\u4ef6_"%0"_\u65f6\u53d1\u751f\u9519\u8bef
-Autosave_of_file_'%0'=\u6587\u4ef6_"%0"_\u7684\u81ea\u52a8\u4fdd\u5b58\u6587\u4ef6
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=\u6253\u5f00_'%0'_\u7684\u81ea\u52a8\u4fdd\u5b58\u6587\u4ef6\u65f6\u53d1\u751f\u9519\u8bef\uff0c\u5c1d\u8bd5\u52a0\u8f7d_"%0"\u3002
-
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=\u5728\u60a8\u7684\u7528\u6237\u63d2\u4ef6\u76ee\u5f55\u4e2d\u5b89\u88c5\u7684\u63d2\u4ef6_(%0)
-Plugins_installed_in_other_locations\:=\u5728\u5176\u5b83\u4f4d\u7f6e\u5b89\u88c5\u7684\u63d2\u4ef6\uff1a
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=\u63d2\u4ef6\u5c06\u4f1a\u5728_JabRef_\u4e0b\u6b21\u542f\u52a8\u65f6\u5220\u9664\u3002
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=\u63d2\u4ef6\u5c06\u4f1a\u5728_JabRef_\u4e0b\u6b21\u542f\u52a8\u65f6\u5220\u9664\u3002
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=\u65e7\u7248\u672c\u63d2\u4ef6\u5c06\u4f1a\u5728_JabRef_\u4e0b\u6b21\u542f\u52a8\u65f6\u5220\u9664\u3002
-
-Formatter_not_found\:_%0=\u65e0\u6cd5\u627e\u5230\u7684\u683c\u5f0f\u5316\u5668\uff1a_%0
-The_following_formatters_could_not_be_found=\u4e0b\u5217\u683c\u5f0f\u5316\u5668\u65e0\u6cd5\u627e\u5230
-
-Clear_inputarea=\u6e05\u7a7a\u8f93\u5165\u6846
-Automatically_set_file_links_for_this_entry=\u81ea\u52a8\u4e3a\u6b64\u8bb0\u5f55\u8bbe\u7f6e\u6587\u4ef6\u94fe\u63a5
-Could_not_save,_file_locked_by_another_JabRef_instance.=\u65e0\u6cd5\u4fdd\u5b58\uff0c\u6587\u4ef6\u88ab\u53e6\u4e00\u4e2a_JabRef_\u5b9e\u4f8b\u9501\u5b9a\u3002
-File_is_locked_by_another_JabRef_instance.=\u6587\u4ef6\u88ab\u53e6\u4e00\u4e2a_JabRef_\u5b9e\u4f8b\u9501\u5b9a\u3002
-Do_you_want_to_override_the_file_lock?=\u60a8\u662f\u5426\u5e0c\u671b\u8986\u76d6\u6587\u4ef6\u9501\uff1f
-File_locked=\u6587\u4ef6\u88ab\u9501\u5b9a
-Current_tmp_value=\u5f53\u524d\u4e34\u65f6\u503c
-Metadata_change=\u5143\u6570\u636e\u6539\u53d8
-Changes_have_been_made_to_the_following_metadata_elements=\u4e0b\u5217\u5143\u6570\u636e\u5143\u7d20\u88ab\u6539\u53d8
-
-Generate_groups_for_author_last_names=\u7528\u4f5c\u8005\u7684\u59d3_(last_name)_\u521b\u5efa\u5206\u7ec4
-Generate_groups_for_editor_last_names=\u7528\u7f16\u8005\u7684\u59d3_(last_name)_\u521b\u5efa\u5206\u7ec4
-Generate_groups_from_keywords_in_a_BibTeX_field=\u7528_BibTeX_\u57df\u4e2d\u7684\u5173\u952e\u8bcd\u521b\u5efa\u5206\u7ec4
-Enforce_legal_characters_in_BibTeX_keys=\u5f3a\u5236\u5728_BibTeX_\u952e\u503c\u4e2d\u4f7f\u7528\u5408\u6cd5\u5b57\u7b26
-The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=#_\u5b57\u7b26\u4e0d\u5141\u8bb8\u51fa\u73b0\u5728_BibTeX_\u5b57\u7b26\u4e32\u4e2d\uff0c\u9664\u975e\u7528_"\\#"_\u8fdb\u884c\u8f6c\u4e49\u3002
-Before_saving,_please_edit_any_strings_containing_the_#_character.=\u5728\u4fdd\u5b58\u4e4b\u524d\uff0c\u8bf7\u4fee\u6539\u4efb\u4f55\u5305\u542b_#_\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\u3002
-
-Save_without_backup?=\u4fdd\u5b58\u4f46\u4e0d\u5907\u4efd\uff1f
-Unable_to_create_backup=\u65e0\u6cd5\u521b\u5efa\u5907\u4efd
-
-File_directory_is_not_set_or_does_not_exist.=\u6587\u4ef6\u76ee\u5f55\u6ca1\u6709\u8bbe\u7f6e\u6216\u8005\u4e0d\u5b58\u5728\u3002
-Move_file_to_file_directory.=\u79fb\u52a8\u6587\u4ef6\u5230\u6587\u4ef6\u76ee\u5f55\u3002
-Rename_file_to=\u5c06\u6587\u4ef6\u66f4\u540d\u4e3a
-<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>\u6240\u6709\u8bb0\u5f55</b>\uff08\u6b64\u5206\u7ec4\u65e0\u6cd5\u88ab\u7f16\u8f91\u6216\u8005\u5220\u9664\uff09
-static_group=\u9759\u6001\u5206\u7ec4
-dynamic_group=\u52a8\u6001\u5206\u7ec4
-refines_supergroup=refines_supergroup_(\u7ffb\u8bd1\u65f6\u6ca1\u627e\u5230\u51fa\u5904)
-includes_subgroups=\u5305\u542b\u5b50\u5206\u7ec4
-contains=\u5305\u542b
-search_expression=\u67e5\u8be2\u8868\u8fbe\u5f0f:
-
-Disable_file_renaming_in_non-native_file_dialog=\u7981\u7528\u975e\u672c\u5730\u6587\u4ef6\u5bf9\u8bdd\u6846\u4e2d\u7684\u6587\u4ef6\u91cd\u547d\u540d
-File_dialog=\u6587\u4ef6\u5bf9\u8bdd\u6846
-No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=\u6ca1\u6709\u627e\u5230\u8bb0\u5f55\uff0c\u770b\u8d77\u6765\u60a8\u6ca1\u6709_JStor_\u641c\u7d22\u529f\u80fd\u7684\u8bbf\u95ee\u6743\u9650\u3002
-
-Search_ScienceDirect=\u641c\u7d22_ScienceDirect
-Error_while_fetching_from_ScienceDirect=\u4ece_ScienceDirect_\u6293\u53d6\u65f6\u51fa\u9519
-
-Error_initializing_custom_export_format_from_string_'%0'=\u4ece\u5b57\u4e32_"%0"_\u521d\u59cb\u5316\u81ea\u5b9a\u4e49\u5bfc\u51fa\u683c\u5f0f\u5931\u8d25
-
-BibLaTeX_mode=BibLaTeX_\u6a21\u5f0f
-Optional_fields_2=\u53ef\u9009\u57df_2
-Please_wait=\u8bf7\u7a0d\u5019
-Waiting_for_save_operation_to_finish=\u6b63\u5728\u7b49\u5f85\u4fdd\u5b58\u64cd\u4f5c\u5b8c\u6210
-Resolving_duplicate_BibTeX_keys...=\u5904\u7406\u91cd\u590d\u7684_BibTeX
-Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=\u5b8c\u6210\u5904\u7406\u91cd\u590d_BibTeX_\u952e\u503c\uff0c\u4fee\u6539\u4e86_%0_\u6761\u8bb0\u5f55\u3002
-This_database_contains_one_or_more_duplicated_BibTeX_keys.=\u5f53\u524d\u6570\u636e\u5e93\u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a\u91cd\u590d\u7684_BibTeX_\u952e\u503c\u3002
-Do_you_want_to_resolve_duplicate_keys_now?=\u60a8\u5e0c\u671b\u9a6c\u4e0a\u5904\u7406\u91cd\u590d\u7684\u952e\u503c\u5417\uff1f
-
-Find_and_remove_duplicate_BibTeX_keys=\u67e5\u627e\u5e76\u79fb\u9664\u91cd\u590d\u7684_BibTeX_\u952e\u503c
-Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=\u671f\u671b\u7684\u8bed\u6cd5_--fetch='<name_of_fetcher>:<query>'
-Duplicate_BibTeX_key=\u91cd\u590d\u7684_BibTeX_\u952e\u503c
-Duplicate_key=\u91cd\u590d\u7684\u952e\u503c
-Generate_key=\u751f\u6210\u952e\u503c
-Import_marking_color=\u6807\u8bb0\u5bfc\u5165\u8bb0\u5f55\u7684\u989c\u8272
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=\u627e\u5230_%0_\u6761\u8bb0\u5f55\uff0c\u4e3a\u51cf\u8f7b\u670d\u52a1\u5668\u8d1f\u8f7d\uff0c\u53ea\u4f1a\u4e0b\u8f7d\u5176\u4e2d\u7684_%1_\u6761\u3002\u4e3a\u4e86\u4e0d\u60f9_ACM_\u751f\u6c14\uff0c\u4e0b\u8f7d\u901f\u5ea6\u4f1a\u975e\u5e38\u6162_^\_^
-BibTeX_importer=BibTeX_\u5bfc\u5165\u5668
-Always_add_letter_(a,_b,_...)_to_generated_keys=\u5728\u751f\u6210\u952e\u503c\u65f6\u603b\u662f\u6dfb\u52a0\u5b57\u6bcd_(a,_b,_...)
-
-Ensure_unique_keys_using_letters_(a,_b,_...)=\u4f7f\u7528\u5b57\u6bcd_(a,_b,_...)_\u4fdd\u8bc1\u952e\u503c\u552f\u4e00
-Ensure_unique_keys_using_letters_(b,_c,_...)=\u4f7f\u7528\u5b57\u6bcd_(b,_c,_...)_\u4fdd\u8bc1\u952e\u503c\u552f\u4e00
-Entry_editor_active_background_color=\u8bb0\u5f55\u7f16\u8f91\u5668\u6d3b\u52a8\u7684\u80cc\u666f\u989c\u8272
-Entry_editor_background_color=\u8bb0\u5f55\u7f16\u8f91\u5668\u80cc\u666f\u989c\u8272
-Entry_editor_font_color=\u8bb0\u5f55\u7f16\u8f91\u5668\u5b57\u4f53\u989c\u8272
-Entry_editor_invalid_field_color=\u8bb0\u5f55\u7f16\u8f91\u5668\u9519\u8bef\u57df\u989c\u8272
-
-Table_and_entry_editor_colors=\u8868\u683c\u548c\u8bb0\u5f55\u7f16\u8f91\u5668\u989c\u8272
-
-An_autosave_file_was_found_for_this_database._This_could_indicate_=\u5f53\u524d\u6570\u636e\u5e93\u53d1\u73b0\u4e00\u4e2a\u81ea\u52a8\u4fdd\u5b58\u6587\u4ef6\uff0c\u8fd9\u610f\u5473\u7740
-that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=JabRef_\u4e0a\u6b21\u4f7f\u7528\u6b64\u6587\u4ef6\u65f6\u6ca1\u6709\u6b63\u5e38\u5173\u95ed\u3002
-General_file_directory=\u751f\u6210\u6587\u4ef6\u76ee\u5f55
-User-specific_file_directory=\u7528\u6237\u6307\u5b9a\u7684\u6587\u4ef6\u76ee\u5f55
-Error_setting_look_and_feel=\u9519\u8bef\u8bbe\u7f6e\u89c6\u89c9\u6548\u679c\u7c7b_(look_and_feel)
-Search_failed\:_illegal_search_expression=\u641c\u7d22\u5931\u8d25:_\u4e0d\u5408\u6cd5\u7684\u641c\u7d22\u8868\u8fbe\u5f0f
-Show_ArXiv_column=\u663e\u793a_ArXiv_\u5217
-<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=
-Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=
-
-You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=\u8bf7\u8f93\u5165_1025-65535_\u4e4b\u95f4\u7684\u6574\u6570\u503c\u3002\u8bbe\u7f6e\u9879\uff1a
-Automatically_open_browse_dialog_when_creating_new_file_link=
-Import_Metadata_from\:=
-Choose_the_source_for_the_metadata_import=
-Create_entry_based_on_XMP_data=
-Create_entry_based_on_data_fetched_from=
-Create_blank_entry_linking_the_PDF=
-Only_attach_PDF=
-Mr._dLib_Metadata_Entries_Associated_With\:=
-Mr._dLib_Metadata_Entries_Associated_With_PDF_File=
-Title=
-Author(s)=
-Published_Year=
-No_metadata_found.=
-Mr._dLib_web_service_is_temporarily_unavailable.=
-Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=
-You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=
-No_Internet_Connection.=
-This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=
-Web_Service_Version_Outdated=
-The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=
-Update_empty_fields_with_data_fetched_from=
-Create_New_Entry=
-Update_Existing_Entry=
-Mr._dLib=
-More_information=
-Fetching_Metadata...=
-Metadata=
-Autocomplete_names_in_'Firstname_Lastname'_format_only=
-Autocomplete_names_in_'Lastname,_Firstname'_format_only=
-Autocomplete_names_in_both_formats=
-Marking_color_%0=\u6807\u8bb0\u989c\u8272_%0
-The_name_'comment'_can_not_be_used_as_an_entry_type_name.=
-You_must_enter_an_integer_value_in_the_text_field_for=
-File_directory=
-Send_as_email=
-References=
-Sending_of_emails=
-Subject_for_sending_an_email_with_references=
-Automatically_open_folders_of_attached_files=
-Create_entry_based_on_content=
-Store_choice_as_default=
-Do_not_show_this_box_again_for_this_import=
-Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=
-Error_creating_email=
-Could_not_open_directory=
-Entries_added_to_an_email=
-exportFormat=
-Output_file_missing=
-No_search_matches.=
-The_output_option_depends_on_a_valid_input_option.=
-Default_import_style_for_drag&drop_of_PDFs=
-Default_PDF_file_link_action=
-File_name_format_pattern=
-PostgreSQL_database=
-DIN_1505=
-Wrong_Format=
-Path_to_gnuclient_or_emacsclient=
-Additional_parameters=
-Encrypted_documents_are_not_supported=
-Cite_selected_entries=
-Cite_selected_entries_with_in-text_citation=
-Cite_special=
-Extra_information_(e.g._page_number)=
-Manage_citations=
-Problem_modifying_citation=
-Citation=
-Context=
-Extra_information=
-Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=
-Styles=
-Select_style=
-This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=
-Journals=
-Cite=
-Cite_in-text=
-Insert_empty_citation=
-Merge_citations=
-Manual_connect=
-Select_Writer_document=
-Sync_OO_bibliography=
-OpenOffice=
-Select_which_open_Writer_document_to_work_on=
-Connected_to_document=
-Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=
-Cite_selected_entries_with_extra_information=
-Ensure_that_the_bibliography_is_up-to-date=
-Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=
-Unable_to_synchronize_bibliography=
-Combine_pairs_of_citations_that_are_separated_by_spaces_only=
-Autodetection_failed=
-Connecting=
-Please_wait...=
-Unable_to_connect=
-Set_connection_parameters=
-Path_to_OpenOffice_directory=
-Path_to_OpenOffice_executable=
-Path_to_OpenOffice_library_dir=
-Autodetect=
-Connection_lost=
-The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=
-The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=
-Automatically_sync_bibliography_when_inserting_citations=
-Look_up_BibTeX_entries_in_the_active_tab_only=
-Look_up_BibTeX_entries_in_all_open_databases=
-Use_in-parenthesis_citation=
-Use_in-text_citation=
-Autodetecting_paths...=
-Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=
-Could_not_find_OpenOffice_installation=
-Directories=
-Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=
-Choose_OpenOffice_executable=
-Select_document=
-Edit_Group_Membership=
-PostgreSQL=
-Highlight_Words=
-JSTOR_import_cancelled=
-HTML_list=
-Click_group_to_toggle_membership_of_selected_entries=
-Use_EMACS_23_insertion_string=
-Normalize_to_BibTeX_name_format=
-If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=
-Could_not_open_%0=
-Unknown_import_format=
-Open_INSPIRE_entry=
-An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=
-Error_while_fetching_from_Inspire\:_=
-Web_search=
-Autocomplete_names=
-You_must_select_either_a_valid_style_file,_or_use_the_default_style.=
-Default_style=
-Choose_style_file_directly=
-Choose_from_a_directory=
-No_directory_defined_for_%0-files=
-Allow_file_links_relative_to_each_bib_file's_location=
-Style_selection=
-The_panel_below_shows_the_definition_of_the_default_style.=
-If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=
-
-Default_style_(author-year_citations)=
-Default_style_(numerical_citations)=
-No_valid_style_file_defined=
-Choose_pattern=
-Use_the_bib_file_location_as_primary_file_directory=
-Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=
-Built-in_journal_list=
-OpenOffice/LibreOffice_connection=
-You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=
-JabRef_includes_a_built-in_list_of_journal_abbreviations.=
-You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=
-You_must_select_either_a_valid_style_file,_or_use_a_default_style.=
-
-Show=
-This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=
-Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=
-
-This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=
-You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=
-First_select_entries_to_clean_up.=
-Cleanup_entry=
-Autogenerate_PDF_Names=
-Auto-generating_PDF-Names_does_not_support_undo._Continue?=
-File_rename_failed_for=
-You_have_toggled_the_BibLaTeX_mode.=
-Use_full_firstname_whenever_possible=
-Use_abbreviated_firstname_whenever_possible=
-Use_abbreviated_and_full_firstname=
-Autocompletion_options=
-Autocomplete_after_following_number_of_characters=
-Name_format_used_for_autocompletion=
-Treatment_of_first_names=
-No_icon_found_for_%0=
-Cleanup_entries=
-Automatically_assign_new_entry_to_selected_groups=
-Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
-Format_content_of_month_field_to_#mon#=
-Ensure_that_page_ranges_are_of_the_form_num1--num2=
-Make_paths_of_linked_files_relative_(if_possible)=
-Rename_PDFs_to_given_file_name_format_pattern=
-Rename_only_PDFs_having_a_relative_path=
-What_would_you_like_to_clean_up?=
-Doing_a_cleanup_for_%0_entries...=
-No_entry_needed_a_clean_up=
-One_entry_needed_a_clean_up=
-%0_entries_needed_a_clean_up=
-Imported_=
-Error_importing_from_database=
-Minimize_to_system_tray=
-
-Incomplete_search_results=
-%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=
-
-Error_downloading_file_'%0'=
-Download_failed=
-
-%0_databases_will_be_imported=
-Importing_cancelled=
-There_are_no_available_databases_to_be_imported=
-Import_from_SQL_database=
-Imported_%0_databases_successfully=
-<_CREATE_NEW_DATABASE_>=
-Remove_Selected=
-SQL_Database_Exporter=
-Select_target_SQL_database\:=
-SQL_Database_Importer=
-Please_select_which_JabRef_databases_do_you_want_to_import\:=
-Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
-Attach_file=
-
-Setting_all_preferences_to_default_values.=
-Resetting_preference_key_'%0'=
-Unknown_preference_key_'%0'=
-Unable_to_clear_preferences.=
-
-Reset_preferences_(key1,key2,..._or_'all')=
-Find_unlinked_files=
-Select_All=
-Unselect_All=
-Expand_All=
-Collapse_All=
-Select_Directory=
-Choose_Directory=
-Use_the_selected_directory_to_start_with_the_search.=
-Browse...=
-Opens_the_file_browser.=
-Scan_directory=
-Searches_the_selected_directory_for_unlinked_files.=
-Starts_the_import_of_bibtex_entries.=
-Leave_this_dialog.=
-Create_directory_based_keywords=
-Creates_keywords_in_created_entrys_with_directory_pathnames=
-Select_a_directory_where_the_search_shall_start.=
-Select_file_type\:=
-These_files_are_not_linked_in_the_active_database.=
-Entry_type_to_be_created\:=
-Searching_file_system...=
-Importing_into_Database...=
-Select_directory=
-Select_files=
-Bibtex_entry_creation=
-<No_selection>=
-Push_selection_to_TeXstudio=
-Path_to_TeXstudio=
-Program_'%0'_not_found=
-Pushed_citations_to_TeXstudio=
-Unable_to_connect_to_freecite_online_service.=
-Parse_with_FreeCite=
-Insert_selected_citations_into_TeXstudio=
-The_current_BibTeX_key_will_be_overwritten._Continue?=
-Overwrite_key=
-Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
-How_would_you_like_to_link_to_'%0'?=
-Bibtex_key_patterns=
-Changed_special_field_settings=
-Clear_priority=
-Clear_rank=
-Compact_rank=
-Convert_1st,_2nd,_..._to_real_superscripts=
-Dropped_comment_from_database=
-Enable_PDF_preview=
-Enable_special_fields=
-Five_stars=
-Four_stars=
-Help_on_special_fields=
-Keywords_of_selected_entries=
-Manage_content_selectors=
-Manage_keywords=
-Marked_entries'_quality_as_good=
-Marked_entries_as_relevant=
-No_priority_information=
-No_rank_information=
-One_star=
-Priority=
-Priority_high=
-Priority_low=
-Priority_medium=
-Quality=
-Rank=
-Relevance=
-Set_priority=
-Set_priority_to_high=
-Set_priority_to_low=
-Set_priority_to_medium=
-Set_rank_to_five_stars=
-Set_rank_to_four_stars=
-Set_rank_to_one_star=
-Set_rank_to_three_stars=
-Set_rank_to_two_stars=
-Show_one_letter_heading_for_icon_columns=
-Show_priority=
-Show_quality=
-Show_rank=
-Show_relevance=
-Synchronize_with_keywords=
-Synchronized_special_fields_based_on_keywords=
-Three_stars=
-Toggle_relevance=
-Toogle_quality_assured=
-Two_stars=
-Update_keywords=
-Write_values_of_special_fields_as_separate_fields_to_BibTeX=
-You_have_changed_settings_for_special_fields.=
-no_preview_available=
-
-%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
-A_string_with_that_label_already_exists=
-Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
-Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
-Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
-Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
-Created_group_"%0".=
-File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
-If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
-Import_Metadata_From_PDF=
-Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
-Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
-Removed_all_subgroups_of_group_"%0".=
-To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
-Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
-Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
-Use_the_following_delimiter_character(s)\:=
-When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
-Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
-
-Error_fetching_from_Google_Scholar=
-Run_HTML_converter_on_title=
-Searching...=
-You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
-Confirm_selection=
-Unknown_DOI\:_'%0'.=
-Get_BibTeX_entry_from_DOI=
-Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
-Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
-Import_conversions=
-Run_filter_on_title_keeping_the_case_of_selected_words=
-Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
-Please_enter_a_search_string=
-Please_open_or_start_a_new_database_before_searching=
-An_Error_occurred_while_fetching_from_ADS_(%0)\:=
-Error_while_fetching_from_ADS=
-Error_while_fetching_from_OAI2=
-An_Error_occurred_while_parsing_abstract=
-Unknown_DiVA_entry\:_'%0'.=
-Get_BibTeX_entry_from_DiVA=
-Log=
-Remove_unneccessary_$,_{,_and_}=
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+
+%0_contains_the_Regular_Expression_<b>%1</b>=%0_\u5305\u542b\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%1</b>
+
+%0_contains_the_term_<b>%1</b>=%0_\u5305\u542b\u8bcd\u7ec4_<b>%1</b>
+
+%0_doesn't_contain_the_Regular_Expression_<b>%1</b>=%0_\u4e0d\u5305\u542b\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%1</b>
+
+%0_doesn't_contain_the_term_<b>%1</b>=%0_\u4e0d\u5305\u542b\u8bcd\u7ec4_<b>%1</b>
+
+%0_doesn't_match_the_Regular_Expression_<b>%1</b>=%0_\u4e0d\u5339\u914d\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%1</b>
+
+%0_doesn't_match_the_term_<b>%1</b>=%0_\u4e0d\u5339\u914d\u8bcd\u7ec4_<b>%1</b>
+
+%0_export_successful=%0_\u5bfc\u51fa\u6210\u529f
+
+%0_field_set=%0_\u57df\u88ab\u4fee\u6539
+
+%0_matches_the_Regular_Expression_<b>%1</b>=%0_\u5339\u914d\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%1</b>
+
+%0_matches_the_term_<b>%1</b>=%0_\u5339\u914d\u8bcd\u7ec4_<b>%1</b>
+
+<field_name>=<\u57df\u540d\u79f0>
+<HTML>Could_not_find_file_'%0'<BR>linked_from_entry_'%1'</HTML>=<HTML>\u65e0\u6cd5\u627e\u5230\u8bb0\u5f55'%1'\u94fe\u63a5\u7684\u6587\u4ef6'%0'</HTML>
+
+<no_field>=<\u6ca1\u6709\u57df>
+
+<select>=<\u9009\u62e9>
+
+<select_word>=<\u4e0b\u62c9\u83dc\u5355\u9879>
+A_string_with_this_label_already_exists=\u8be5\u6807\u7b7e\u5bf9\u5e94\u7684\u7b80\u5199\u5b57\u4e32\u5df2\u5b58\u5728
+Abbreviate_journal_names_of_the_selected_entries_(ISO_abbreviation)=\u7f29\u5199\u9009\u4e2d\u8bb0\u5f55\u7684\u671f\u520a\u540d_(ISO_\u683c\u5f0f\u7f29\u5199)
+Abbreviate_journal_names_of_the_selected_entries_(MEDLINE_abbreviation)=\u7f29\u5199\u9009\u4e2d\u8bb0\u5f55\u7684\u671f\u520a\u540d_(MEDLINE_\u683c\u5f0f\u7f29\u5199)
+
+Abbreviate_names=\u7f29\u5199\u540d
+Abbreviated_%0_journal_names.=\u7f29\u5199\u7684_%0_\u671f\u520a\u540d\u79f0\u3002
+
+Abbreviation=\u7f29\u5199
+
+About_JabRef=\u5173\u4e8e_JabRef
+
+Abstract=\u6458\u8981
+
+Accept=\u63a5\u53d7
+
+Accept_change=\u63a5\u53d7\u4fee\u6539
+
+Action=\u52a8\u4f5c
+
+Add=\u6dfb\u52a0
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_class_path._\nThe_path_need_not_be_on_the_classpath_of_JabRef.=\u4ece\u4e00\u4e2a_class_path_\u6dfb\u52a0(\u7f16\u8bd1\u597d\u7684)\u81ea\u5b9a\u4e49\u5bfc\u5165\u7c7b\u3002\n\u8be5\u8def\u5f84\u4e0d\u9700\u8981\u5728_JabRef_\u7684_classpath_\u4e0b\u3002
+
+Add_a_(compiled)_custom_ImportFormat_class_from_a_Zip-archive.\nThe_Zip-archive_need_not_be_on_the_classpath_of_JabRef.=\u4ece\u4e00\u4e2a_Zip_\u538b\u7f29\u5305\u4e2d\u6dfb\u52a0(\u7f16\u8bd1\u597d\u7684)\u81ea\u5b9a\u4e49\u5bfc\u5165\u7c7b\u3002\n\u8be5_Zip_\u538b\u7f29\u5305\u4e0d\u9700\u8981\u5728_JabRef_\u7684_classpath_\u4e0b\u3002
+
+add_entries_to_group=\u6dfb\u52a0\u8bb0\u5f55\u5230\u5206\u7ec4
+
+Add_entry_selection_to_this_group=\u6dfb\u52a0\u9009\u4e2d\u8bb0\u5f55\u5230\u6b64\u5206\u7ec4
+
+Add_from_folder=\u4ece\u6587\u4ef6\u5939\u4e2d\u6dfb\u52a0
+
+Add_from_jar=\u4ece_jar_\u4e2d\u6dfb\u52a0
+
+add_group=\u6dfb\u52a0\u5206\u7ec4
+
+Add_Group=\u6dfb\u52a0\u5206\u7ec4
+
+Add_new=\u65b0\u5efa
+
+Add_Subgroup=\u6dfb\u52a0\u5b50\u5206\u7ec4
+
+Add_to_group=\u6dfb\u52a0\u5230\u5206\u7ec4
+
+Added_group_"%0".=\u5df2\u6dfb\u52a0\u5206\u7ec4_"%0"\u3002
+
+Added_new=\u5df2\u6dfb\u52a0
+
+Added_string=\u5df2\u6dfb\u52a0\u5b57\u7b26\u4e32
+
+Additionally,_entries_whose_<b>%0</b>_field_does_not_contain_<b>%1</b>_can_be_assigned_manually_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._This_process_adds_the_term_<b>%1</b>_to_each_entry's_<b>%0</b>_field._Entries_can_be_removed_manually_from_this_group_by_selecting_them_then_using_the_context_menu._This_process_removes_the_term_<b>%1</b>_from_each_entry's_<b>%0</b>_field.=\u6b64\u5916\uff0c\u90a3\u4e9b\u201c<b>%0</b>\u201d\u57df\u91cc\u4e0d\u [...]
+
+Advanced=\u9ad8\u7ea7
+All_custom_file_types_will_be_lost._Proceed?=\u6240\u6709\u7684\u81ea\u5b9a\u4e49\u6587\u4ef6\u7c7b\u578b\u5c06\u4e22\u5931\uff0c\u662f\u5426\u7ee7\u7eed\uff1f
+
+All_Entries=\u6240\u6709\u8bb0\u5f55
+
+All_entries=\u6240\u4ee5\u8bb0\u5f55
+All_entries_of_this_type_will_be_declared_typeless._Continue?=\u6240\u6709\u6b64\u7c7b\u578b\u8bb0\u5f55\u5c06\u88ab\u6807\u8bb0\u4e3a\u65e0\u7c7b\u578b\u8bb0\u5f55\uff0c\u662f\u5426\u7ee7\u7eed\uff1f
+
+All_fields=\u6240\u6709\u57df
+
+All_subgroups_(recursively)=\u6240\u6709\u5b50\u5206\u7ec4(\u9012\u5f52\u5730)
+
+Allow_editing_in_table_cells=Allow_editing_in_table_cells
+An_Error_occurred_while_fetching_from_OAI2_source_(%0)\:=\u5f53\u4ece_OAI2_\u6e90_(%0)_\u6293\u53d6\u65f6\u53d1\u751f\u4e86\u4e00\u4e2a\u9519\u8bef:
+An_Exception_ocurred_while_accessing_'%0'=\u5f53\u8bbf\u95ee_'%0'_\u65f6\u53d1\u751f\u4e86\u4e00\u4e2a\u5f02\u5e38
+An_SAXException_ocurred_while_parsing_'%0'\:=\u5f53\u89e3\u6790'%0'\u65f6\u53d1\u751f\u4e86\u4e00\u4e2a_SAXException:
+
+and=\u548c
+and_inside_the_JabRef-jar\:=\u548c_JabRef-jar_\u4e2d\:
+
+and_the_class_must_be_available_in_your_classpath_next_time_you_start_JabRef.=\u5e76\u4e14\u4e0b\u6b21\u60a8\u542f\u52a8_JabRef_\u7684\u65f6\u5019\uff0c\u8bf7\u786e\u4fdd\u8be5\u7c7b\u5728\u60a8\u7684_classpath_\u4e2d\u3002
+
+any_field_that_matches_the_regular_expression_<b>%0</b>=\u5339\u914d\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%0</b>_\u7684\u4efb\u4f55\u57df
+
+Appearance=\u5916\u89c2
+
+Append=\u8ffd\u52a0
+Append_contents_from_a_BibTeX_database_into_the_currently_viewed_database=\u4ece\u4e00\u4e2a_BibTeX_\u6570\u636e\u5e93\u8ffd\u52a0\u5185\u5bb9\u5230\u5f53\u524d\u67e5\u770b\u7684\u6570\u636e\u5e93
+
+Append_database=\u8ffd\u52a0\u6570\u636e\u5e93
+
+append_the_selected_text_to_bibtex_key=\u8ffd\u52a0\u9009\u4e2d\u7684\u6587\u672c\u5230_BibTeX_\u952e\u503c
+Application=\u5e94\u7528\u7a0b\u5e8f
+
+Apply=\u5e94\u7528
+
+Arguments_passed_on_to_running_JabRef_instance._Shutting_down.=\u53c2\u6570\u4f20\u9012\u7ed9\u4e86\u6b63\u5728\u6267\u884c\u7684_JabRef_\u5b9e\u4f8b\uff0c\u5173\u95ed\u81ea\u8eab\u7a0b\u5e8f\u3002
+
+Assign_entry_selection_exclusively_to_this_group=\u6392\u5b83\u5730\u5206\u914d\u8bb0\u5f55\u5230\u6b64\u5206\u7ec4
+
+Assign_new_file=\u5206\u914d\u65b0\u6587\u4ef6
+
+Assign_the_original_group's_entries_to_this_group?=\u5c06\u539f\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55\u5206\u914d\u5230\u6b64\u5206\u7ec4\uff1f
+
+Assigned_%0_entries_to_group_"%1".=\u5206\u914d\u4e86_%0_\u6761\u8bb0\u5f55\u5230\u5206\u7ec4_"%1".
+
+Assigned_1_entry_to_group_"%0".=\u5206\u914d\u4e86_1_\u6761\u8bb0\u5f55\u5230\u5206\u7ec4_"%0".
+At_least_the_plug-in_'net.sf.jabref.core'_should_be_there.=\u81f3\u5c11\u63d2\u4ef6_'net.sf.jabref.core'_\u5e94\u8be5\u5728\u90a3\u91cc\u3002
+
+Attach_%0_file=\u9644\u52a0\u201c%0\u201d\u6587\u4ef6
+
+Attach_URL=\u9644\u52a0_URL
+
+Attempt_to_autoset_%0_links_for_your_entries._Autoset_works_if_a_%0_file_in_your_%0_directory_or_a_subdirectory<BR>is_named_identically_to_an_entry's_BibTeX_key,_plus_extension.=\u5c1d\u8bd5\u4e3a\u60a8\u7684\u8bb0\u5f55\u81ea\u52a8\u8bbe\u7f6e_%0_\u94fe\u63a5\uff0c\u8be5\u64cd\u4f5c\u8981\u6c42\u548c\u8bb0\u5f55_BibTeX_\u952e\u540c\u540d\u7684_%0_\u6587\u4ef6\u5b58\u5728\u4e8e\u60a8\u7684_%0_\u76ee\u5f55\u6216\u8005\u5b50\u76ee\u5f55\u4e2d\u3002
+Attempting_SQL_export...=\u5c1d\u8bd5_SQL_\u5bfc\u51fa...
+
+Auto=\u81ea\u52a8
+
+Autodetect_format=\u81ea\u52a8\u68c0\u6d4b\u683c\u5f0f
+
+Autogenerate_BibTeX_key=\u81ea\u52a8\u751f\u6210_BibTeX_\u952e
+Autogenerate_BibTeX_keys=\u81ea\u52a8\u751f\u6210_BibTeX_\u952e
+
+Autogenerate_groups=\u81ea\u52a8\u751f\u6210\u5206\u7ec4
+
+autogenerate_keys=\u81ea\u52a8\u751f\u6210_BibTeX_\u952e
+Autolink_files_with_names_starting_with_the_BibTeX_key=\u81ea\u52a8\u94fe\u63a5\u6587\u4ef6\u540d\u4ee5_BibTeX_\u952e\u5f00\u5934\u7684\u6587\u4ef6
+
+Autolink_only_files_that_match_the_BibTeX_key=\u81ea\u52a8\u94fe\u63a5\u6587\u4ef6\u540d\u5339\u914d_BibTeX_\u952e\u7684\u6587\u4ef6
+
+Automatically_create_groups=\u81ea\u52a8\u521b\u5efa\u5206\u7ec4
+
+Automatically_create_groups_for_database.=\u81ea\u52a8\u4e3a\u6570\u636e\u5e93\u521b\u5efa\u5206\u7ec4\u3002
+
+Automatically_created_groups=\u81ea\u52a8\u521b\u5efa\u7684\u5206\u7ec4
+
+Automatically_hide_groups_interface_when_switching_to_a_database_that_contains_no_groups=\u5f53\u5207\u6362\u5230\u4e00\u4e2a\u4e0d\u5305\u542b\u5206\u7ec4\u7684\u6570\u636e\u5e93\u65f6\u81ea\u52a8\u9690\u85cf\u5206\u7ec4\u754c\u9762
+
+Automatically_remove_exact_duplicates=\u81ea\u52a8\u79fb\u9664\u5b8c\u5168\u91cd\u590d\u7684\u9879
+
+Automatically_show_groups_interface_when_switching_to_a_database_that_contains_groups=\u5f53\u5207\u6362\u5230\u4e00\u4e2a\u5305\u542b\u5206\u7ec4\u7684\u6570\u636e\u5e93\u65f6\u81ea\u52a8\u6253\u5f00\u5206\u7ec4\u754c\u9762
+
+Autoset=\u81ea\u52a8\u8bbe\u7f6e
+
+Autoset_%0_field=\u81ea\u52a8\u8bbe\u7f6e_%0_\u57df
+
+Autoset_%0_links._Allow_overwriting_existing_links.=\u81ea\u52a8\u8bbe\u7f6e_%0_\u94fe\u63a5\uff0c\u5141\u8bb8\u8986\u76d6\u5df2\u6709\u94fe\u63a5\u3002
+
+Autoset_%0_links._Do_not_overwrite_existing_links.=\u81ea\u52a8\u8bbe\u7f6e_%0_\u94fe\u63a5\uff0c\u4e0d\u8981\u8986\u76d6\u5df2\u6709\u94fe\u63a5\u3002
+Autoset_external_links=\u81ea\u52a8\u8bbe\u7f6e\u5916\u90e8\u94fe\u63a5
+Autosetting_links=\u6b63\u5728\u81ea\u52a8\u8bbe\u7f6e\u94fe\u63a5
+
+AUX_file_import=AUX_\u6587\u4ef6\u5bfc\u5165
+
+Available_export_formats=\u53ef\u7528\u7684\u5bfc\u51fa\u683c\u5f0f
+
+Available_fields=\u53ef\u7528\u7684_BibTeX_\u57df
+
+Available_import_formats=\u53ef\u7528\u7684\u5bfc\u5165\u683c\u5f0f
+
+Background_color_for_optional_fields=\u53ef\u9009\u57df\u7684\u80cc\u666f\u989c\u8272
+
+Background_color_for_required_fields=\u5fc5\u9009\u57df\u7684\u80cc\u666f\u989c\u8272
+
+Backup_old_file_when_saving=\u4fdd\u5b58\u6570\u636e\u5e93\u65f6\u4fdd\u7559\u5907\u4efd
+Beta_version=Beta_\u7248\u672c
+
+Bibkey_to_filename_conversion=Bibkey_\u5230\u6587\u4ef6\u540d\u8f6c\u6362
+
+BibTeX_key=BibTeX_\u952e
+
+BibTeX_key_is_unique.=BibTeX_\u952e\u503c\u662f\u552f\u4e00\u7684\u3002
+
+BibTeX_key_not_set._Enter_a_name_for_the_downloaded_file=BibTeX_\u952e\u503c\u672a\u8bbe\u7f6e\uff0c\u4e3a\u4e0b\u8f7d\u7684\u6587\u4ef6\u8f93\u5165\u4e00\u4e2a\u540d\u5b57
+
+BibTeX_source=BibTeX_\u6e90\u4ee3\u7801
+
+BibTeXML=BibTeXML
+
+Binding=\u7ed1\u5b9a
+Broken_link=\u5931\u6548\u94fe\u63a5
+
+Browse=\u6d4f\u89c8...
+
+by=\u4e3a
+
+Calling_external_viewer...=\u6b63\u5728\u8c03\u7528\u5916\u90e8\u67e5\u770b\u5668...
+
+Cancel=\u53d6\u6d88
+
+Cannot_add_entries_to_group_without_generating_keys._Generate_keys_now?=\u4e0d\u751f\u6210_BibTeX_\u952e\u5c31\u65e0\u6cd5\u6dfb\u52a0\u8bb0\u5f55\u5230\u5206\u7ec4\uff0c\u73b0\u5728\u751f\u6210\u952e\u503c\uff1f
+
+Cannot_merge_this_change=\u65e0\u6cd5\u5408\u5e76\u8be5\u66f4\u6539
+
+Cannot_move_group_"%0"_down.=\u65e0\u6cd5\u4e0b\u79fb\u5206\u7ec4_"%0"\u3002
+
+Cannot_move_group_"%0"_left.=\u65e0\u6cd5\u5de6\u79fb\u5206\u7ec4_"%0"\u3002
+
+Cannot_move_group_"%0"_right.=\u65e0\u6cd5\u53f3\u79fb\u5206\u7ec4_"%0"\u3002
+
+Cannot_move_group_"%0"_up.=\u65e0\u6cd5\u4e0a\u79fb\u5206\u7ec4_"%0"\u3002
+
+case_insensitive=\u5ffd\u7565\u5927\u5c0f\u5199
+
+case_sensitive=\u533a\u5206\u5927\u5c0f\u5199
+
+Case_sensitive=\u533a\u5206\u5927\u5c0f\u5199
+
+change_assignment_of_entries=\u4fee\u6539\u8bb0\u5f55\u7684\u7ec4\u5206\u914d
+
+Change_case=\u4fee\u6539\u5927\u5c0f\u5199
+
+Change_entry_type=\u66f4\u6539\u8bb0\u5f55\u7c7b\u578b
+Change_file_type=\u66f4\u6539\u6587\u4ef6\u7c7b\u578b
+
+change_key=\u4fee\u6539\u952e\u503c
+
+Change_of_Grouping_Method=\u5206\u7ec4\u65b9\u6cd5\u6539\u53d8
+
+change_preamble=\u4fee\u6539\u5bfc\u8a00\u533a_(preamble)
+
+change_string_content=\u66f4\u6539\u5b57\u7b26\u4e32\u5185\u5bb9
+
+change_string_name=\u4fee\u6539\u7b80\u5355\u5b57\u4e32\u540d\u79f0
+Change_table_column_and_General_fields_settings_to_use_the_new_feature=\u4fee\u6539\u5217\u5916\u89c2\u548c_General_\u57df\u8bbe\u7f6e\u4ee5\u4f7f\u7528\u65b0\u7279\u6027
+
+change_type=\u4fee\u6539\u7c7b\u578b
+
+changed_=\u5df2\u4fee\u6539_
+
+Changed_font_settings=\u5df2\u4fee\u6539\u5b57\u4f53\u8bbe\u7f6e
+
+Changed_language_settings=\u5df2\u4fee\u6539\u8bed\u8a00\u8bbe\u7f6e
+
+Changed_look_and_feel_settings=\u5df2\u4fee\u6539\u89c6\u89c9\u6548\u679c\u7c7b_(look_and_feel)_\u8bbe\u7f6e
+
+Changed_preamble=\u5df2\u4fee\u6539\u5bfc\u8a00\u533a_(preamble)
+
+Changed_type_to=\u4fee\u6539\u7c7b\u578b\u4e3a
+
+Characters_to_ignore=\u8981\u5ffd\u7565\u7684\u5b57\u7b26
+
+Check_existing_%0_links=\u68c0\u67e5\u5b58\u5728\u7684%0\u94fe\u63a5
+
+Check_links=\u6838\u5bf9\u94fe\u63a5
+
+Choose_the_URL_to_download._The_default_value_points_to_a_list_provided_by_the_JabRef_developers.=\u9009\u62e9_URL_\u4e0b\u8f7d\uff0c\u9ed8\u8ba4\u503c\u6307\u5411_JabRef_\u5f00\u53d1\u8005\u63d0\u4f9b\u7684\u4e00\u4e2a\u5217\u8868\u3002
+Cite_command=\u5f15\u7528\u547d\u4ee4
+
+Class_name=\u7c7b\u540d
+
+Clear=\u6e05\u9664
+
+clear_all_groups=\u6e05\u9664\u6240\u6709\u5206\u7ec4
+
+Clear_field=\u6e05\u9664\u57df\u5185\u5bb9
+Clear_fields=\u6e05\u9664\u57df\u5185\u5bb9
+
+Clear_highlight=\u6e05\u9664\u9ad8\u4eae
+
+Close=\u5173\u95ed
+
+Close_dialog=\u5173\u95ed\u5bf9\u8bdd\u6846
+
+Close_the_current_database=\u5173\u95ed\u5f53\u524d\u6570\u636e\u5e93
+
+Close_the_help_window=\u5173\u95ed\u5e2e\u52a9\u7a97\u53e3
+
+Close_window=\u5173\u95ed\u7a97\u53e3
+
+Closed_database=\u5173\u95ed\u6570\u636e\u5e93
+
+Collapse_subtree=\u6298\u53e0\u5b50\u6811
+
+Color_codes_for_required_and_optional_fields=\u5217\u8868\u8bb0\u5f55\u9879\u7684\u53ef\u9009\u57df\u548c\u5fc5\u9009\u57df\u7528\u4e0d\u540c\u989c\u8272\u663e\u793a
+
+Color_for_marking_incomplete_entries=\u6807\u8bb0\u4e0d\u5b8c\u6574\u8bb0\u5f55\u7684\u989c\u8272
+
+Column_width=\u5217\u5bbd
+
+Command_line_id=\u547d\u4ee4\u884c_id
+
+Complete_record=\u5b8c\u6210\u8bb0\u5f55
+Connect=\u8fde\u63a5
+Connect_to_SQL_database=\u8fde\u63a5_SQL_\u6570\u636e\u5e93
+Connect_to_SQL_Database=\u8fde\u63a5_SQL_\u6570\u636e\u5e93
+Connection_to_IEEEXplore_failed=\u65e0\u6cd5\u8fde\u63a5\u5230_IEEEXplore\uff0c\u8fde\u63a5\u5931\u8d25\u3002
+
+Contained_in=\u5305\u542b\u5728
+
+Content=\u5185\u5bb9
+
+Copied=\u5df2\u590d\u5236
+
+Copied_cell_contents=\u5df2\u62f7\u8d1d\u5355\u5143\u683c\u5185\u5bb9
+
+Copied_key=\u5df2\u590d\u5236_BibTeX_\u952e
+
+Copied_keys=\u5df2\u590d\u5236_BibTeX_\u952e
+
+Copy=\u590d\u5236
+
+Copy_BibTeX_key=\u590d\u5236_BibTeX_\u952e
+Copy_file_to_file_directory.=\u62f7\u8d1d\u6587\u4ef6\u5230\u6587\u4ef6\u76ee\u5f55\u3002
+Copy_files_to_file_directory.=\u62f7\u8d1d\u6587\u4ef6\u5230\u6587\u4ef6\u76ee\u5f55\u3002
+
+Copy_to_clipboard=\u590d\u5236\u5230\u526a\u8d34\u677f
+
+Could_not_call_executable=\u65e0\u6cd5\u8c03\u7528\u53ef\u6267\u884c\u6587\u4ef6
+
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'gnuserv-start').=\u65e0\u6cd5\u8fde\u63a5\u5230\u6b63\u5728\u8fd0\u884c\u7684_gnuserv_\u8fdb\u7a0b\uff0c\u68c0\u67e5_Emacs_\u6216_XEmacs_\u662f\u5426\u6b63\u5728\u8fd0\u884c\uff0c\u4ee5\u53ca<BR>\u670d\u52a1\u5668\u662f\u5426\u5df2\u7ecf\u542f\u52a8(\u7528_'gnuserv-start'_\u547d\u4ee4)\u3002
+
+Could_not_connect_to_host_=\u65e0\u6cd5\u8fde\u63a5\u5230\u4e3b\u673a_
+Could_not_connect_to_Vim_server._Make_sure_that_Vim_is_running<BR>with_correct_server_name.=\u65e0\u6cd5\u8fde\u63a5\u5230_Vim_\u670d\u52a1\u5668\uff0c\u8bf7\u68c0\u67e5_Vim_\u662f\u5426\u4ee5\u6b63\u786e\u7684_Vim_\u670d\u52a1\u5668\u540d\u9009\u9879\u542f\u52a8\u3002
+
+Could_not_export_file=\u65e0\u6cd5\u5bfc\u51fa\u6587\u4ef6
+
+Could_not_export_preferences=\u65e0\u6cd5\u5bfc\u51fa\u9996\u9009\u9879
+
+Could_not_find_a_suitable_import_format.=\u65e0\u6cd5\u627e\u5230\u7b26\u5408\u7684\u5bfc\u5165\u683c\u5f0f.
+Could_not_find_directory_for_%0-files\:_%1=\u65e0\u6cd5\u627e\u5230_%0-\u6587\u4ef6\u7684\u76ee\u5f55:_%1
+Could_not_find_image_file=\u65e0\u6cd5\u627e\u5230\u56fe\u50cf\u6587\u4ef6
+
+Could_not_find_layout_file=\u65e0\u6cd5\u627e\u5230_layout_\u6587\u4ef6
+
+Could_not_import_preferences=\u65e0\u6cd5\u5bfc\u5165\u9996\u9009\u9879
+
+Could_not_instantiate_%0=\u65e0\u6cd5\u4f8b\u793a_%0
+Could_not_instantiate_%0_%1=\u65e0\u6cd5\u4f8b\u793a_%0_%1
+Could_not_instantiate_%0._Have_you_chosen_the_correct_package_path?=\u65e0\u6cd5\u4f8b\u793a_%0\uff0c\u60a8\u9009\u62e9\u4e86\u6b63\u786e\u7684\u5305\u8def\u5f84\u5417\uff1f
+Could_not_open_link=\u65e0\u6cd5\u6253\u5f00\u94fe\u63a5
+
+Could_not_parse_number_of_hits=\u65e0\u6cd5\u89e3\u6790\u70b9\u51fb\u6570
+Could_not_print_preview=\u65e0\u6cd5\u6253\u5370\u9884\u89c8
+Could_not_run_the_'vim'_program.=\u65e0\u6cd5\u8fd0\u884c_'vim'_\u7a0b\u5e8f\u3002
+
+Could_not_save_file=\u65e0\u6cd5\u4fdd\u5b58\u6587\u4ef6
+Could_not_save_file._Character_encoding_'%0'_is_not_supported.=\u65e0\u6cd5\u4fdd\u5b58\u6587\u4ef6\uff0c\u4e0d\u652f\u6301\u7f16\u7801_'%0'\u3002
+
+Create_group=\u65b0\u5efa\u5206\u7ec4
+
+Created_groups.=\u5efa\u7acb\u5206\u7ec4
+
+crossreferenced_entries_included=\u5305\u542b\u4ea4\u53c9\u5f15\u7528\u7684\u8bb0\u5f55
+
+Current_content=\u5f53\u524d\u5185\u5bb9
+
+Current_value=\u5f53\u524d\u503c
+
+Custom_entry_types=\u81ea\u5b9a\u4e49\u7684\u8bb0\u5f55\u7c7b\u578b
+
+Custom_entry_types_found_in_file=\u6587\u4ef6\u4e2d\u5305\u542b\u81ea\u5b9a\u4e49\u7684\u8bb0\u5f55\u7c7b\u578b
+Custom_icon_theme=\u81ea\u5b9a\u4e49\u56fe\u6807\u4e3b\u9898
+Custom_icon_theme_file=\u81ea\u5b9a\u4e49\u56fe\u6807\u4e3b\u9898\u6587\u4ef6
+
+Custom_importers=\u81ea\u5b9a\u4e49\u5bfc\u5165\u5668
+
+Customize_entry_types=\u81ea\u5b9a\u4e49\u8bb0\u5f55\u7c7b\u578b
+
+Customize_key_bindings=\u81ea\u5b9a\u4e49\u70ed\u952e
+
+Cut=\u526a\u5207
+
+cut_entries=\u526a\u5207\u8bb0\u5f55
+
+cut_entry=\u526a\u5207\u8be5\u8bb0\u5f55
+
+Cut_pr=\u526a\u5207
+Database_\:=\u6570\u636e\u5e93:
+
+Database_encoding=\u6570\u636e\u5e93\u7f16\u7801
+
+Database_has_changed._Do_you_want_to_save_before_closing?=\u6570\u636e\u5e93\u5df2\u88ab\u4fee\u6539\uff0c\u662f\u5426\u4fdd\u5b58\u4fee\u6539\uff1f
+
+Database_properties=\u6570\u636e\u5e93\u5c5e\u6027
+
+Date_format=\u65e5\u671f\u683c\u5f0f
+
+Default=\u9ed8\u8ba4
+
+Default_encoding=\u9ed8\u8ba4\u7f16\u7801
+
+Default_grouping_field=\u9ed8\u8ba4\u5206\u7ec4\u4f9d\u636e\u57df
+
+Default_look_and_feel=\u9ed8\u8ba4\u89c6\u89c9\u6548\u679c\u7c7b_(look_and_feel)
+
+Default_pattern=\u9ed8\u8ba4\u6a21\u5f0f
+
+Default_sort_criteria=\u9ed8\u8ba4\u6392\u5e8f\u89c4\u5219
+Define_'%0'=\u5b9a\u4e49_'%0'
+
+Delete=\u5220\u9664
+
+Delete_custom_format=\u5220\u9664\u81ea\u5b9a\u4e49\u683c\u5f0f
+
+delete_entries=\u5220\u9664\u8bb0\u5f55
+
+Delete_entry=\u5220\u9664\u8be5\u8bb0\u5f55
+
+delete_entry=\u5220\u9664\u8be5\u8bb0\u5f55
+
+Delete_multiple_entries=\u5220\u9664\u591a\u6761\u8bb0\u5f55
+
+Delete_rows=\u5220\u9664\u884c
+
+Delete_strings=\u5220\u9664\u7b80\u5199\u5b57\u4e32
+
+Deleted=\u5df2\u5220\u9664
+
+Delimit_fields_with_semicolon,_ex.=\u4f7f\u7528\u5206\u53f7\u5206\u9694\u57df\uff0c\u4f8b\u5982
+
+Descending=\u964d\u5e8f
+
+Description=\u63cf\u8ff0
+
+Deselect_all=\u53d6\u6d88\u6240\u6709\u9009\u5b9a
+Deselect_all_duplicates=\u68c0\u6d4b\u6240\u6709\u91cd\u590d\u9879
+
+Details=\u8be6\u60c5
+
+Disable_entry_editor_when_multiple_entries_are_selected=\u9009\u4e2d\u591a\u6761\u8bb0\u5f55\u662f\u5173\u95ed\u8bb0\u5f55\u7f16\u8f91\u5668
+
+Disable_this_confirmation_dialog=\u4e0d\u518d\u663e\u793a\u8fd9\u4e2a\u786e\u8ba4\u5bf9\u8bdd\u6846
+
+Disable_this_warning_dialog=\u4e0d\u518d\u663e\u793a\u8fd9\u4e2a\u8b66\u544a\u5bf9\u8bdd\u6846
+
+Display_all_entries_belonging_to_one_or_more_of_the_selected_groups.=\u663e\u793a\u5c5e\u4e8e\u9009\u4e2d\u4efb\u4e00\u5206\u7ec4\u7684\u8bb0\u5f55\uff0c\u5373\u663e\u793a\u9009\u4e2d\u5206\u7ec4\u7684\u5e76\u96c6\u3002
+
+Display_all_error_messages=\u663e\u793a\u6240\u6709\u9519\u8bef\u6d88\u606f
+
+Display_help_on_command_line_options=\u7528\u547d\u4ee4\u884c\u9009\u9879\u663e\u793a\u5e2e\u52a9
+
+Display_imported_entries_in_an_inspection_window_before_they_are_added.=\u4f7f\u7528\u5355\u72ec\u68c0\u89c6\u7a97\u53e3\u663e\u793a\u5c06\u88ab\u5bfc\u5165\u7684\u8bb0\u5f55
+
+Display_only_entries_belonging_to_all_selected_groups.=\u53ea\u663e\u793a\u5c5e\u4e8e\u6240\u6709\u9009\u4e2d\u5206\u7ec4\u7684\u8bb0\u5f55\uff0c\u5373\u663e\u793a\u9009\u4e2d\u5206\u7ec4\u7684\u4ea4\u96c6\u3002
+Display_version=\u663e\u793a\u7248\u672c
+
+Displaying_no_groups=\u975e\u5206\u7ec4\u89c6\u56fe
+
+Do_not_abbreviate_names=\u4e0d\u8981\u7f29\u5199\u59d3\u540d
+
+Do_not_autoset=\u4e0d\u8981\u81ea\u52a8\u8bbe\u7f6e
+
+Do_not_import_entry=\u4e0d\u5bfc\u5165\u8bb0\u5f55
+
+Do_not_open_any_files_at_startup=\u542f\u52a8\u65f6\u4e0d\u6253\u5f00\u4efb\u4f55\u6587\u4ef6
+
+Do_not_overwrite_existing_keys=\u4e0d\u8986\u76d6\u5df2\u5b58\u5728\u7684_BibTeX_\u952e
+Do_not_show_splash_window_at_startup=\u4e0d\u663e\u793a\u542f\u52a8\u753b\u9762
+Do_not_show_these_options_in_the_future=\u4ee5\u540e\u4e0d\u8981\u518d\u663e\u793a\u8fd9\u4e9b\u9009\u9879
+
+Do_not_wrap_the_following_fields_when_saving=\u4fdd\u5b58\u65f6\u4e0d\u8981\u5bf9\u4e0b\u5217\u57df\u6dfb\u52a0\u6362\u884c\u7b26
+Do_not_write_the_following_fields_to_XMP_Metadata\:=\u4e0d\u8981\u5c06\u4ee5\u4e0b\u57df\u5199\u5165_XMP_\u5143\u6570\u636e:
+
+Do_you_want_JabRef_to_do_the_following_operations?=\u60a8\u5e0c\u671b_JabRef_\u505a\u4ee5\u4e0b\u64cd\u4f5c\u5417\uff1f
+
+DocBook=DocBook
+
+Down=\u4e0b
+
+Download=\u4e0b\u8f7d
+
+Download_completed=\u4e0b\u8f7d\u5b8c\u6210
+
+Download_file=\u4e0b\u8f7d\u6587\u4ef6
+
+Downloading...=\u4e0b\u8f7d\u4e2d...
+Drag_and_Drop_Error=\u62d6\u653e\u9519\u8bef
+Drop_%0=\u91ca\u653e_%0
+
+duplicate_BibTeX_key=\u91cd\u590d\u7684_BibTeX_\u952e\u503c
+
+Duplicate_BibTeX_key.=\u91cd\u590d\u7684_BibTeX_\u952e\u503c\u3002
+
+Duplicate_BibTeX_key._Grouping_may_not_work_for_this_entry.=\u91cd\u590d\u7684_BibTeX_\u952e\uff0c\u8be5\u8bb0\u5f55\u53ef\u80fd\u65e0\u6cd5\u88ab\u5206\u7ec4\u3002
+
+Duplicate_Key_Warning=\u91cd\u590d\u952e\u503c\u8b66\u544a
+
+Duplicate_pairs_found=\u53d1\u73b0\u91cd\u590d\u8bb0\u5f55\u5bf9
+
+duplicate_removal=\u79fb\u9664\u91cd\u590d
+
+Duplicate_string_name=\u91cd\u590d\u7684\u7b80\u5199\u5b57\u4e32\u540d\u79f0
+
+Duplicates_found=\u53d1\u73b0\u91cd\u590d\u9879
+
+Duplicates_removed=\u5df2\u79fb\u9664\u91cd\u590d\u9879
+
+Dynamic_groups=\u52a8\u6001\u5206\u7ec4
+
+Dynamically_group_entries_by_a_free-form_search_expression=\u4f7f\u7528\u81ea\u5b9a\u4e49\u7684\u641c\u7d22\u8868\u8fbe\u5f0f\u521b\u5efa\u52a8\u6001\u5206\u7ec4
+
+Dynamically_group_entries_by_searching_a_field_for_a_keyword=\u4f7f\u7528\u5173\u952e\u8bcd\u641c\u7d22\u67d0\u57df\u521b\u5efa\u52a8\u6001\u5206\u7ec4
+
+Each_line_must_be_on_the_following_form=\u6bcf\u4e00\u884c\u5fc5\u987b\u4f7f\u7528\u4ee5\u4e0b\u5f62\u5f0f
+
+Edit=\u7f16\u8f91
+
+Edit_custom_export=\u7f16\u8f91\u81ea\u5b9a\u4e49\u5bfc\u51fa
+Edit_entry=\u7f16\u8f91\u8bb0\u5f55
+Edit_file_link=\u7f16\u8f91\u6587\u4ef6\u94fe\u63a5
+Edit_file_type=\u7f16\u8f91\u6587\u4ef6\u7c7b\u578b
+
+Edit_group=\u7f16\u8f91\u5206\u7ec4
+
+Edit_journal=\u7f16\u8f91\u671f\u520a
+
+Edit_preamble=\u7f16\u8f91\u5bfc\u8a00\u533a_(preamble)
+Edit_strings=\u7f16\u8f91\u7b80\u5199\u5b57\u4e32
+Editor_options=\u7f16\u8f91\u5668\u9009\u9879
+
+empty_BibTeX_key=\u7a7a_BibTeX_\u952e
+
+Empty_BibTeX_key.=\u7a7a_BibTeX_\u952e\u3002
+
+Empty_BibTeX_key._Grouping_may_not_work_for_this_entry.=\u7a7a\u767d\u7684_BibTeX_\u952e\uff0c\u8be5\u8bb0\u5f55\u53ef\u80fd\u65e0\u6cd5\u88ab\u5206\u7ec4\u3002
+
+empty_database=\u7a7a\u6570\u636e\u5e93
+
+Enable_source_editing=\u542f\u7528\u6e90\u4ee3\u7801\u7f16\u8f91
+Enable_word/name_autocompletion=\u542f\u7528\u8bcd\u7ec4/\u59d3\u540d\u81ea\u52a8\u5b8c\u6210
+
+Endnote=Endnote
+
+Enter_URL=\u8f93\u5165_URL
+
+Enter_URL_to_download=\u8f93\u5165\u8981\u4e0b\u8f7d\u7684_URL_
+
+entries=\u8bb0\u5f55
+
+Entries_cannot_be_manually_assigned_to_or_removed_from_this_group.=\u6b64\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55\u65e0\u6cd5\u8fdb\u884c\u624b\u52a8\u5206\u914d\u3002
+
+Entries_exported_to_clipboard=\u8bb0\u5f55\u88ab\u5bfc\u51fa\u5230\u526a\u8d34\u677f
+
+entries_have_undefined_BibTeX_key=\u8bb0\u5f55\u7684_BibTeX_\u952e\u503c\u672a\u5b9a\u4e49
+
+entries_into_new_database=\u8bb0\u5f55\u5230\u65b0\u6570\u636e\u5e93
+
+entry=\u8bb0\u5f55
+
+Entry_editor=\u8bb0\u5f55\u7f16\u8f91\u5668
+
+
+Entry_in_current_database=\u5f53\u524d\u6570\u636e\u5e93\u4e2d\u7684\u8bb0\u5f55
+
+Entry_in_import=\u5bfc\u5165\u7684\u8bb0\u5f55
+
+Entry_preview=\u9884\u89c8\u8bb0\u5f55
+
+Entry_table=\u8bb0\u5f55\u5217\u8868
+
+Entry_table_columns=\u8bb0\u5f55\u5217
+
+Entry_type=\u8bb0\u5f55\u7c7b\u578b
+
+Entry_type_names_are_not_allowed_to_contain_white_space_or_the_following_characters=\u8bb0\u5f55\u7c7b\u578b\u540d\u4e2d\u4e0d\u5141\u8bb8\u4f7f\u7528\u7a7a\u683c\u6216\u8005\u4e0b\u5217\u5b57\u7b26
+
+Entry_types=\u8bb0\u5f55\u7c7b\u578b
+
+Error=\u9519\u8bef
+Error\:_=\u9519\u8bef:_
+Error_converting_Bibtex_to_XMP\:_%0=\u8f6c\u6362_Bibtex_\u5230_XMP_\u9519\u8bef:_%0
+Error_converting_XMP_to_'%0'...=\u8f6c\u6362_XMP_\u5230_'%0'_\u9519\u8bef...
+Error_exporting_to_clipboard=\u5bfc\u51fa\u5230\u526a\u8d34\u677f\u9519\u8bef
+##Error:_check_your_External_viewer_settings_in_Preferences=\u9519\u8bef\uff1a\u8bf7\u68c0\u67e5\u201c\u9996\u9009\u9879\u201d\u4e2d\u7684\u5916\u90e8\u67e5\u770b\u5668\u8bbe\u7f6e
+Error_in_field=\u57df\u4e2d\u7684\u9519\u8bef
+Error_in_starting_plug-in_system._Starting_without,_but_some_functionality_may_be_missing.=\u542f\u52a8\u63d2\u4ef6\u7cfb\u7edf\u65f6\u53d1\u751f\u9519\u8bef\uff0c\u5ffd\u7565\u4e4b\uff0c\u4e0d\u8fc7\u67d0\u4e9b\u529f\u80fd\u5c06\u4e0d\u53ef\u7528\u3002
+Error_occured_when_parsing_entry=\u5206\u6790\u8bb0\u5f55\u65f6\u53d1\u751f\u9519\u8bef
+
+Error_opening_file=\u6253\u5f00\u6587\u4ef6\u9519\u8bef
+
+Error_setting_field=\u8bbe\u7f6e\u57df\u9519\u8bef
+Error_while_converting_BibtexEntry_to_XMP_%0=\u8f6c\u6362_Bibtex_\u8bb0\u5f55\u5230_XMP_\u9519\u8bef_%0
+Error_while_downloading_file\:=\u4e0b\u8f7d\u6587\u4ef6\u9519\u8bef:
+Error_while_fetching_from_OIA2=\u4ece_OIA2_\u6293\u53d6\u9519\u8bef
+Error_while_writing=\u5199\u5165\u9519\u8bef
+Error_writing_to_%0_file(s).=\u5199\u5165\u5230_%0_\u6587\u4ef6\u9519\u8bef\u3002
+Error_writing_XMP_to_file\:_%0=\u5199\u5165_XMP_\u5230\u6587\u4ef6\u9519\u8bef:_%0
+
+
+Establishing_SQL_connection...=\u6b63\u5728\u5efa\u7acb_SQL_\u8fde\u63a5...
+Exceptions=\u5f02\u5e38
+
+Existing_file=\u5df2\u6709\u6587\u4ef6
+
+exists._Overwrite_file?=\u5df2\u5b58\u5728\uff0c\u8986\u76d6\u6587\u4ef6\uff1f
+exists._Overwrite?=\u5df2\u5b58\u5728\uff0c\u8986\u76d6\uff1f
+
+Expand_subtree=\u5c55\u5f00\u5b50\u6811
+
+Export=\u5bfc\u51fa
+
+Export_name=\u5bfc\u51fa\u540d\u79f0
+
+Export_preferences=\u5bfc\u51fa\u9996\u9009\u9879\u8bbe\u7f6e
+
+Export_preferences_to_file=\u5bfc\u51fa\u9996\u9009\u9879\u8bbe\u7f6e\u5230\u6587\u4ef6
+
+Export_properties=\u5bfc\u51fa\u5c5e\u6027
+
+Export_to_clipboard=\u5bfc\u51fa\u5230\u526a\u8d34\u677f
+Export_to_SQL_database=\u5bfc\u51fa\u5230_SQL_\u6570\u636e\u5e93
+
+Exporting=\u6b63\u5728\u5bfc\u51fa
+Extension=\u6269\u5c55\u540d
+
+External_changes=\u5916\u90e8\u4fee\u6539
+
+External_file_links=\u5916\u90e8\u6587\u4ef6\u94fe\u63a5
+
+External_files=\u5916\u90e8\u6587\u4ef6
+
+External_programs=\u5916\u90e8\u7a0b\u5e8f
+
+External_viewer_called=\u6210\u529f\u8c03\u7528\u5916\u90e8\u67e5\u770b\u5668
+
+Failed_to_read_groups_data_(unsupported_version\:_%0)=\u65e0\u6cd5\u8bfb\u53d6\u5206\u7ec4\u6570\u636e(\u4e0d\u652f\u6301\u7684\u7248\u672c:_%0)
+
+Fetch=\u6293\u53d6
+
+Field=\u57df
+
+field=\u57df
+
+Field_content=\u57df\u5185\u5bb9
+
+Field_name=\u57df\u540d\u79f0
+Field_names_are_not_allowed_to_contain_white_space_or_the_following_characters=\u57df\u540d\u4e2d\u4e0d\u53ef\u542b\u6709\u7a7a\u683c\u6216\u4ee5\u4e0b\u5b57\u7b26
+
+Field_sizes=\u57df\u5927\u5c0f
+Field_to_filter=\u8981\u8fc7\u6ee4\u7684\u57df
+
+Field_to_group_by=\u7528\u6765\u5206\u7ec4\u7684\u57df
+
+Fields=\u57df
+
+File=\u6587\u4ef6
+
+file=\u6587\u4ef6
+
+File_'%0'_is_already_open.=\u6587\u4ef6_'%0'_\u5df2\u7ecf\u88ab\u6253\u5f00\u3002
+
+File_'%0'_not_found=\u65e0\u6cd5\u627e\u5230\u6587\u4ef6_'%0'
+
+File_changed=\u6587\u4ef6\u5df2\u6539\u53d8
+File_directory_is_'%0'\:=\u6587\u4ef6\u76ee\u5f55\u662f_'%0':
+
+File_directory_is_not_set_or_does_not_exist!=\u6587\u4ef6\u76ee\u5f55\u672a\u8bbe\u7f6e\u6216\u8be5\u76ee\u5f55\u4e0d\u5b58\u5728\uff01
+File_download=\u6587\u4ef6\u4e0b\u8f7d
+File_exists=\u6587\u4ef6\u5df2\u5b58\u5728
+
+File_extension=\u6587\u4ef6\u6269\u5c55\u540d
+File_has_been_updated_externally._What_do_you_want_to_do?=\u6587\u4ef6\u88ab\u5916\u90e8\u7a0b\u5e8f\u4fee\u6539\uff0c\u60a8\u8981\u600e\u4e48\u505a\uff1f
+
+File_not_found=\u65e0\u6cd5\u627e\u5230\u6587\u4ef6
+File_type=\u6587\u4ef6\u7c7b\u578b
+
+File_updated_externally=\u6587\u4ef6\u88ab\u5916\u90e8\u7a0b\u5e8f\u4fee\u6539
+
+filename=\u6587\u4ef6\u540d
+
+Files_opened=\u5df2\u6253\u5f00\u6587\u4ef6
+
+Filter=\u8fc7\u6ee4
+
+Finished_autosetting_external_links.=\u5b8c\u6210\u81ea\u52a8\u8bbe\u7f6e\u5916\u90e8\u94fe\u63a5\u3002
+
+Finished_synchronizing_%0_links._Entries_changed%c_%1.=\u5b8c\u6210\u540c\u6b65_%0_\u6761\u94fe\u63a5\uff0c\u8bb0\u5f55\u6539\u53d8%c_%1.
+Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=\u5b8c\u6210\u5199\u5165_XMP-\u5143\u6570\u636e\uff0c\u5199\u5165_%0_\u6587\u4ef6\u3002
+Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=\u5b8c\u6210\u5199\u5165_XMP-\u5143\u6570\u636e\u5230_%0_\u6587\u4ef6_(\u8df3\u8fc7_%1_\u6761\uff0c%2_\u6761\u9519\u8bef).
+
+First_select_the_entries_you_want_keys_to_be_generated_for.=\u9996\u5148\u9009\u4e2d\u60a8\u8981\u751f\u6210_BibTeX_\u952e\u7684\u8bb0\u5f55\u3002
+
+Fit_table_horizontally_on_screen=\u5217\u8868\u5bbd\u5ea6\u586b\u6ee1\u5c4f\u5e55\u5bbd\u5ea6
+
+Float=\u6d6e\u52a8_(\u7ed3\u679c\u4e0a\u6d6e\u5230\u6700\u524d)
+Float_marked_entries=\u6d6e\u52a8\u9ad8\u4eae\u663e\u793a\u7684\u8bb0\u5f55_(\u4e0a\u6d6e\u5230\u5217\u8868\u6700\u524d)
+
+Font_Family=\u5b57\u4f53
+
+Font_Preview=\u9884\u89c8\u5b57\u4f53
+
+Font_Size=\u5b57\u4f53\u5927\u5c0f
+
+Font_Style=\u5b57\u4f53
+
+FontSelector=\u5b57\u4f53\u4e0b\u62c9\u83dc\u5355\u9879
+
+for=\u4e3a
+
+Format_of_author_and_editor_names=\u4f5c\u8005\u548c\u7f16\u8005\u7684\u59d3\u540d\u683c\u5f0f
+Format_String=\u683c\u5f0f\u5316\u5b57\u4e32
+
+Format_used=\u4f7f\u7528\u7684\u683c\u5f0f
+Formatter_Name=\u683c\u5f0f\u5316\u5668\u540d\u79f0
+
+Formatter_not_found=\u672a\u53d1\u73b0\u683c\u5f0f\u5316\u5668
+
+found=\u53d1\u73b0
+Found_%0_plugin(s)=\u53d1\u73b0_%0_\u4e2a\u63d2\u4ef6
+
+found_in_aux_file=\u5728_aux_\u53d1\u73b0
+
+Full_name=\u5168\u79f0
+
+General=\u57fa\u672c\u8bbe\u7f6e
+
+General_fields=General_\u57df
+
+Generate=\u751f\u6210
+
+Generate_BibTeX_key=\u751f\u6210_BibTeX_\u952e
+
+Generate_keys=\u751f\u6210\u952e
+
+Generate_keys_before_saving_(for_entries_without_a_key)=\u4fdd\u5b58\u6570\u636e\u5e93\u524d\u4e3a\u7f3a\u5931\u952e\u503c\u7684\u8bb0\u5f55\u81ea\u52a8\u751f\u6210_BibTeX_\u952e
+Generate_keys_for_imported_entries=\u4e3a\u5bfc\u5165\u7684\u8bb0\u5f55\u91cd\u65b0\u751f\u6210_BibTeX_\u952e
+
+Generate_now=\u73b0\u5728\u751f\u6210
+
+Generated_BibTeX_key_for=\u5df2\u751f\u6210_BibTeX_\u952e\u2014\u2014\u4e3a
+
+Generating_BibTeX_key_for=\u6b63\u5728\u751f\u6210_BibTeX_\u952e\u2014\u2014\u4e3a
+
+Grab=Grab
+
+Gray_out_entries_not_in_group_selection=\u7070\u8272\u663e\u793a\u672a\u9009\u4e2d\u8bb0\u5f55
+
+Gray_out_non-hits=\u7070\u8272\u663e\u793a\u672a\u9009\u4e2d
+
+Gray_out_non-matching_entries=\u7070\u8272\u663e\u793a\u4e0d\u5339\u914d\u8bb0\u5f55
+
+Group_properties=\u5206\u7ec4\u5c5e\u6027
+
+grouping_may_not_work_for_this_entry=\u5206\u7ec4\u64cd\u4f5c\u53ef\u80fd\u65e0\u6cd5\u5e94\u7528\u4e8e\u6b64\u8bb0\u5f55
+
+Groups=\u5206\u7ec4
+
+Harvard_RTF=\u54c8\u4f5b_RTF
+
+Have_you_chosen_the_correct_package_path?=\u60a8\u9009\u62e9\u4e86\u6b63\u786e\u7684\u5305\u8def\u5f84\u5417\uff1f
+
+Help=\u5e2e\u52a9
+
+Help_contents=\u5e2e\u52a9\u5185\u5bb9
+
+Help_on_groups=\u5206\u7ec4\u5e2e\u52a9
+
+Help_on_key_patterns=\u952e\u8868\u8fbe\u5f0f\u5e2e\u52a9
+Help_on_Preview_Settings=\u9884\u89c8\u8bbe\u7f6e\u5e2e\u52a9
+Help_on_Regular_Expression_Search=\u6b63\u5219\u8868\u8fbe\u5f0f\u641c\u7d22\u5e2e\u52a9
+
+Hide_non-hits=\u9690\u85cf\u672a\u9009\u4e2d
+
+Hide_non-matching_entries=\u9690\u85cf\u4e0d\u5339\u914d\u7684\u8bb0\u5f55
+
+Hierarchical_context=\u5206\u7ea7\u4e0a\u4e0b\u6587
+
+Highlight=\u9ad8\u4eae
+Highlight_groups_matching_all_selected_entries=\u9ad8\u4eae\u663e\u793a\u5305\u542b\u6240\u6709\u9009\u4e2d\u8bb0\u5f55\u7684\u5206\u7ec4
+Highlight_groups_matching_any_selected_entry=\u9ad8\u4eae\u663e\u793a\u5305\u542b\u4efb\u4e00\u9009\u4e2d\u8bb0\u5f55\u7684\u5206\u7ec4
+
+Highlight_overlapping_groups=\u9ad8\u4eae\u663e\u793a\u6709\u91cd\u53e0\u8bb0\u5f55\u7684\u5206\u7ec4
+
+Hint%c_To_search_specific_fields_only,_enter_for_example%c<p><tt>author%esmith_and_title%eelectrical</tt>=\u63d0\u793a%c_\u82e5\u60f3\u53ea\u641c\u7d22\u7279\u5b9a\u57df\u7684\u8bdd\uff0c\u53ef\u4ee5\u50cf\u8fd9\u6837\u5199%c<p><tt>author%esmith_and_title%eelectrical</tt>
+
+HTML=HTML
+HTML_table=HTML_\u8868
+HTML_table_(with_Abstract_&_BibTeX)=HTML_\u8868(\u5305\u542b\u6458\u8981\u548c_BibTeX)
+Icon=\u56fe\u6807
+
+Ignore=\u5ffd\u7565
+
+Immediate_subgroups=\u76f4\u63a5\u5b50\u5206\u7ec4
+
+Import=\u5bfc\u5165
+
+Import_and_keep_old_entry=\u5bfc\u5165\u4e14\u4fdd\u5b58\u65e7\u8bb0\u5f55
+
+Import_and_remove_old_entry=\u5bfc\u5165\u4e14\u79fb\u9664\u65e7\u8bb0\u5f55
+
+Import_entries=\u5bfc\u5165\u8bb0\u5f55
+
+Import_failed=\u5bfc\u5165\u5931\u8d25
+
+Import_file=\u5bfc\u5165\u6587\u4ef6
+
+Import_group_definitions=\u5bfc\u5165\u5206\u7ec4\u914d\u7f6e
+
+Import_name=\u5bfc\u5165\u540d\u79f0
+
+Import_preferences=\u5bfc\u5165\u9996\u9009\u9879\u8bbe\u7f6e
+
+Import_preferences_from_file=\u4ece\u6587\u4ef6\u4e2d\u5bfc\u5165\u9996\u9009\u9879\u8bbe\u7f6e
+
+Import_strings=\u5bfc\u5165\u7b80\u5199\u5b57\u4e32
+
+Import_to_open_tab=\u5bfc\u5165\u5230\u6253\u5f00\u6807\u7b7e\u9875
+
+Import_word_selector_definitions=\u5bfc\u5165\u8bcd\u7ec4\u4e0b\u62c9\u83dc\u5355\u9879
+
+Imported_database=\u5df2\u5bfc\u5165\u6570\u636e\u5e93
+
+Imported_entries=\u5df2\u5bfc\u5165\u8bb0\u5f55
+
+Imported_from_database=\u5df2\u4ece\u6570\u636e\u5e93\u5bfc\u5165
+
+ImportFormat_class=ImportFormat_\u7c7b
+
+Importing=\u6b63\u5728\u5bfc\u5165
+
+Importing_in_unknown_format=\u4ee5\u672a\u77e5\u683c\u5f0f\u5bfc\u5165
+
+In_JabRef,_use_pairs_of_#_characters_to_indicate_a_string.=\u5728_JabRef_\u4e2d\uff0c\u4f7f\u7528\u6210\u5bf9\u7684\u201c#\u201d\u5b57\u7b26\u4ee3\u8868\u4e00\u4e2a\u7b80\u5199\u5b57\u4e32\u3002
+
+Include_abstracts=\u5305\u542b\u6458\u8981
+Include_entries=\u5305\u62ec\u7684\u8bb0\u5f55
+
+Include_subgroups\:_When_selected,_view_entries_contained_in_this_group_or_its_subgroups=\u5305\u542b\u5b50\u5206\u7ec4\uff1a\u5f53\u5206\u7ec4\u88ab\u9009\u4e2d\u65f6\uff0c\u663e\u793a\u6240\u6709\u5b83\u548c\u5b83\u7684\u5b50\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55
+
+Incremental=\u589e\u91cf
+
+Incremental_search=\u589e\u91cf\u67e5\u627e
+
+Incremental_search_failed._Repeat_to_search_from_top.=\u589e\u91cf\u641c\u7d22\u5931\u8d25\uff0c\u4ece\u9876\u90e8\u91cd\u65b0\u5f00\u59cb\u3002
+
+Independent_group\:_When_selected,_view_only_this_group's_entries=\u72ec\u7acb\u5206\u7ec4\uff1a\u5f53\u5206\u7ec4\u88ab\u9009\u4e2d\u65f6\uff0c\u53ea\u663e\u793a\u5c5e\u4e8e\u6b64\u5206\u7ec4\u7684\u8bb0\u5f55
+
+Initially_show_groups_tree_expanded=\u521d\u59cb\u65f6\u663e\u793a\u5c55\u5f00\u7684\u5206\u7ec4\u6811
+
+Input=\u8f93\u5165
+
+Input_error=\u8f93\u5165\u9519\u8bef
+
+Insert=\u63d2\u5165
+
+Insert_rows=\u63d2\u5165\u884c
+
+Insert_selected_citations_into_LyX/Kile=\u63d2\u5165\u9009\u4e2d\u8bb0\u5f55\u5f15\u7528\u5230_LyX/Kile
+
+Insert_selected_citations_into_WinEdt=\u63d2\u5165\u9009\u4e2d\u8bb0\u5f55\u5f15\u7528\u5230_WinEdt
+
+insert_string_=\u63d2\u5165\u5b57\u4e32_
+
+Insert_URL=\u63d2\u5165_URL
+
+integrity=\u5b8c\u6574\u6027
+
+Integrity_check=\u5b8c\u6574\u6027\u68c0\u67e5
+
+Intersection=\u4ea4\u96c6
+
+Invalid_BibTeX_key=\u975e\u6cd5\u7684_BibTeX_\u952e\u503c
+
+Invalid_date_format=\u975e\u6cd5\u7684\u65e5\u671f\u683c\u5f0f
+
+Invalid_URL=\u975e\u6cd5\u7684_URL
+
+Inverted=\u8865\u96c6
+
+is_a_standard_type.=\u662f\u4e00\u4e2a\u6807\u51c6\u7c7b\u578b\u3002
+
+ISO_abbreviation=ISO_\u7f29\u5199
+
+Item_list_for_field=\u57df\u7684\u5143\u7d20\u5217\u8868
+jabref=jabref
+
+JabRef_help=JabRef_\u5e2e\u52a9
+
+JabRef_preferences=JabRef_\u9996\u9009\u9879
+
+Journal_abbreviations=\u671f\u520a\u7f29\u5199\u540d
+
+Journal_list_preview=\u671f\u520a\u5217\u8868\u9884\u89c8
+
+Journal_name=\u671f\u520a\u540d
+
+Keep=\u4fdd\u7559
+
+Keep_both=\u4fdd\u7559\u5168\u90e8
+
+Keep_lower=\u4fdd\u7559\u4e0b\u9762
+
+Keep_upper=\u4fdd\u7559\u4e0a\u9762
+
+Key_bindings=\u70ed\u952e\u7ed1\u5b9a
+
+Key_bindings_changed=\u70ed\u952e\u7ed1\u5b9a\u5df2\u4fee\u6539
+
+Key_generator_settings=\u952e\u503c\u751f\u6210\u5668\u8bbe\u7f6e
+
+Key_pattern=\u952e\u503c\u8868\u8fbe\u5f0f
+
+keys_in_database=\u6570\u636e\u5e93\u4e2d\u7684\u952e\u503c
+
+#nottranslated.Toviewit,usemenu"Tools|NewBibTeXfilefromAUxfile",andlaunchtheactiononanon-existantauxfile.
+Keyword=\u5173\u952e\u5b57
+
+Label=\u6807\u7b7e
+
+Language=\u8bed\u8a00
+
+Last_modified=\u4e0a\u6b21\u4fee\u6539\u7684
+
+LaTeX_AUX_file=LaTeX_AUX_\u6587\u4ef6
+Leave_file_in_its_current_directory.=\u4fdd\u7559\u6587\u4ef6\u7684\u5f53\u524d\u4f4d\u7f6e\u4e0d\u6539\u53d8\u3002
+Leave_files_in_their_current_directory.=\u4fdd\u7559\u6587\u4ef6\u7684\u5f53\u524d\u4f4d\u7f6e\u4e0d\u6539\u53d8\u3002
+
+Left=Left
+
+License=\u8bb8\u53ef\u534f\u8bae
+
+Limit_to_fields=\u9650\u5236\u8303\u56f4\u5230\u57df
+
+Limit_to_selected_entries=\u9650\u5236\u8303\u56f4\u4e3a\u9009\u4e2d\u7684\u8bb0\u5f55
+
+Link=\u94fe\u63a5
+Link_local_file=\u94fe\u63a5\u672c\u5730\u6587\u4ef6
+Link_to_file_%0=\u5230\u6587\u4ef6_%0_\u7684\u94fe\u63a5
+
+Listen_for_remote_operation_on_port=\u76d1\u542c\u7aef\u53e3
+Load_and_Save_preferences_from/to_jabref.xml_on_start-up_(memory_stick_mode)=\u52a0\u8f7d/\u4fdd\u5b58\u9996\u9009\u9879\u8bbe\u7f6e\u4ece/\u5230_jabref.xml_\u6587\u4ef6(\u8bb0\u5fc6\u68d2\u6a21\u5f0f)
+
+Load_session=\u8f7d\u5165\u4f1a\u8bdd
+
+Loading_session...=\u8f7d\u5165\u4f1a\u8bdd...
+localhost=localhost
+
+Look_and_feel=\u89c6\u89c9\u6548\u679c\u7c7b_(look_and_feel\uff0c\u5373_Java_\u754c\u9762\u7c7b)
+Looking_for_pdf...=\u641c\u7d22_pdf...
+lower=\u5c0f\u5199\u5168\u90e8
+Main_file_directory=\u6587\u4ef6\u4e3b\u76ee\u5f55
+
+Main_layout_file=\u4e3b_layout_\u6587\u4ef6
+
+Main_PDF_directory=PDF_\u6587\u4ef6\u4e3b\u76ee\u5f55
+
+Main_PS_directory=PS_\u6587\u4ef6\u4e3b\u76ee\u5f55
+
+Manage=\u7ba1\u7406
+
+Manage_custom_exports=\u7ba1\u7406\u81ea\u5b9a\u4e49\u5bfc\u51fa\u5668
+
+Manage_custom_imports=\u7ba1\u7406\u81ea\u5b9a\u4e49\u5bfc\u5165\u5668
+Manage_external_file_types=\u7ba1\u7406\u5916\u90e8\u6587\u4ef6\u7c7b\u578b
+
+Manage_journal_abbreviations=\u7ba1\u7406\u671f\u520a\u540d\u79f0\u7f29\u5199
+
+Mark_entries=\u9ad8\u4eae\u6807\u8bb0\u591a\u6761\u8bb0\u5f55
+
+Mark_entry=\u9ad8\u4eae\u6807\u8bb0\u8be5\u8bb0\u5f55
+
+Mark_new_entries_with_addition_date=\u5efa\u7acb\u65b0\u8bb0\u5f55\u65f6\u6807\u8bb0\u65f6\u95f4
+
+Mark_new_entries_with_owner_name=\u5efa\u7acb\u65b0\u8bb0\u5f55\u65f6\u6807\u8bb0\u6240\u6709\u8005\u4e3a
+
+Marked_selected=\u9ad8\u4eae\u663e\u793a\u9009\u4e2d
+Memory_Stick_Mode=\u8bb0\u5fc6\u68d2\u6a21\u5f0f
+
+Menu_and_label_font_size=\u83dc\u5355\u548c\u6807\u7b7e\u5b57\u4f53\u5927\u5c0f
+
+Merged_external_changes=\u5408\u5e76\u5916\u90e8\u4fee\u6539
+
+Messages=\u6d88\u606f
+
+Messages_and_Hints=\u63d0\u793a\u548c\u8b66\u544a
+
+Modification_of_field=\u57df\u7684\u4fee\u6539
+
+Modified_group_"%0".=\u5df2\u4fee\u6539\u5206\u7ec4_"%0".
+
+Modified_groups=\u5df2\u4fee\u6539\u5206\u7ec4
+
+Modified_string=\u5df2\u4fee\u6539\u7b80\u5199\u5b57\u4e32
+
+Modify=\u4fee\u6539
+
+modify_group=\u4fee\u6539\u5206\u7ec4
+
+MODS=MODS
+
+Move=\u79fb\u52a8
+
+Move_down=\u4e0b\u79fb
+
+Move_entries_in_group_selection_to_the_top=\u79fb\u52a8\u9009\u4e2d\u5206\u7ec4\u7684\u8bb0\u5f55\u5230\u9876\u90e8
+Move_external_links_to_'file'_field=\u79fb\u52a8\u5916\u90e8\u94fe\u63a5\u5230_'file'_\u57df
+Move_files_to_file_directory.=\u79fb\u52a8\u6587\u4ef6\u5230\u6587\u4ef6\u76ee\u5f55\u3002
+
+move_group=\u79fb\u52a8\u5206\u7ec4
+
+Move_string_down=\u4e0b\u79fb\u5b57\u7b26\u4e32
+
+Move_string_up=\u4e0a\u79fb\u5b57\u7b26\u4e32
+
+Move_up=\u4e0a\u79fb
+
+Moved_group_"%0".=\u79fb\u52a8\u4e86\u5206\u7ec4_"%0"\u3002
+MS_Office_2007=MS_Office_2007
+MySQL=MySQL
+MySQL_database=MySQL_\u6570\u636e\u5e93
+
+Name=\u540d\u5b57
+Name_formatter=\u59d3\u540d\u683c\u5f0f\u5316\u5668
+
+Natbib_style=Natbib_\u683c\u5f0f
+
+nested_aux_files=nested_aux_\u6587\u4ef6
+
+New=\u65b0\u5efa
+
+new=\u65b0\u5efa
+
+New_BibTeX_database=\u65b0\u5efa_BibTeX_\u6570\u636e\u5e93
+
+New_BibTeX_entry=\u65b0\u5efa_BibTeX_\u8bb0\u5f55
+
+New_BibTeX_subdatabase=\u65b0\u5efa_BibTeX_\u5b50\u6570\u636e\u5e93
+
+New_content=\u65b0\u5185\u5bb9
+
+New_database_created.=\u521b\u5efa\u4e86\u65b0\u6570\u636e\u5e93\u3002
+New_field_value=\u65b0\u7684\u57df\u5185\u5bb9
+
+New_file=\u65b0\u5efa\u6587\u4ef6
+New_file_link_(INSERT)=\u65b0\u6587\u4ef6\u94fe\u63a5(\u63d2\u5165)
+
+New_group=\u65b0\u5efa\u5206\u7ec4
+
+New_string=\u65b0\u5efa\u5b57\u7b26\u4e32
+
+Next_entry=\u4e0b\u4e00\u6761
+
+No_%0_found=\u6ca1\u6709\u627e\u5230_%0
+
+No_actual_changes_found.=\u6ca1\u6709\u5b9e\u9645\u7684\u4fee\u6539\u3002
+
+no_base-bibtex-file_specified=\u6ca1\u6709\u6307\u5b9a_base-bibtex-\u6587\u4ef6!
+
+no_database_generated=\u6ca1\u6709\u751f\u6210\u6570\u636e\u5e93
+
+No_duplicates_found=\u6ca1\u6709\u627e\u5230\u91cd\u590d\u9879
+
+No_entries_found._Please_make_sure_you_are_using_the_correct_import_filter.=\u6ca1\u6709\u627e\u5230\u8bb0\u5f55\uff0c\u8bf7\u68c0\u67e5\u662f\u5426\u4f7f\u7528\u4e86\u6b63\u786e\u7684\u5bfc\u5165\u8fc7\u6ee4\u5668\u3002
+
+
+No_entries_found_for_the_search_string_'%0'=\u6ca1\u6709\u627e\u5230\u7b26\u5408\u67e5\u8be2\u5b57\u7b26\u4e32_'%0'_\u7684\u8bb0\u5f55
+
+No_entries_imported.=\u6ca1\u6709\u5bfc\u5165\u8bb0\u5f55\u3002
+
+No_entries_or_multiple_entries_selected.=\u6ca1\u6709\u9009\u4e2d\u8bb0\u5f55\u3002
+
+No_entries_selected=\u6ca1\u6709\u9009\u4e2d\u4efb\u4f55\u8bb0\u5f55
+No_entries_selected.=\u6ca1\u6709\u9009\u4e2d\u4efb\u4f55\u8bb0\u5f55\u3002
+
+No_exceptions_have_ocurred.=\u6ca1\u6709\u53d1\u751f\u5f02\u5e38\u3002
+No_files_found.=\u6ca1\u6709\u627e\u5230\u6587\u4ef6\u3002
+
+No_GUI._Only_process_command_line_options.=\u6ca1\u6709_GUI\uff0c\u53ea\u5904\u7406\u547d\u4ee4\u884c\u9009\u9879\u3002
+
+No_journal_names_could_be_abbreviated.=\u6ca1\u6709\u53ef\u4f9b\u7f29\u5199\u7684\u671f\u520a\u5168\u79f0\u3002
+
+No_journal_names_could_be_unabbreviated.=\u6ca1\u6709\u53ef\u4f9b\u5c55\u5f00\u7684\u671f\u520a\u540d\u7f29\u5199\u3002
+No_PDF_linked=\u6ca1\u6709_PDF_\u94fe\u63a5
+
+No_pdf_or_ps_defined,_and_no_file_matching_Bibtex_key_found=\u672a\u5b9a\u4e49_pdf_\u6216_ps_\u94fe\u63a5\uff0c\u5e76\u4e14\u6ca1\u6709\u627e\u5230\u540d\u79f0\u5339\u914d_Bibtex_\u952e\u503c\u7684\u6587\u4ef6
+No_plugins_were_found_in_the_following_folders\:=\u5728\u4ee5\u4e0b\u76ee\u5f55\u4e2d\u6ca1\u6709\u627e\u5230\u63d2\u4ef6:
+
+No_references_found=\u6ca1\u6709\u627e\u5230\u5f15\u7528
+
+No_saved_session_found.=\u6ca1\u6709\u4fdd\u5b58\u7684\u4f1a\u8bdd\u3002
+
+No_url_defined=\u6ca1\u6709\u5b9a\u4e49_url_
+No_XMP_metadata_found_in_=\u6ca1\u6709\u627e\u5230_XMP_\u5143\u6570\u636e\u5728
+
+not=\u975e
+
+not_found=\u65e0\u6cd5\u627e\u5230
+
+Not_saved_(empty_session)=\u6ca1\u6709\u4fdd\u5b58(\u7a7a\u4f1a\u8bdd)
+
+Note_that_the_entry_causing_the_problem_has_been_selected.=\u6ce8\u610f\uff1a\u5bfc\u81f4\u6b64\u95ee\u9898\u7684\u8bb0\u5f55\u5df2\u7ecf\u88ab\u9009\u4e2d\u3002
+
+Note_that_you_must_specify_the_fully_qualified_class_name_for_the_look_and_feel,=\u6ce8\u610f\uff1a\u60a8\u5fc5\u987b\u4e3a\u89c6\u89c9\u6548\u679c\u7c7b_(look_and_feel)_\u660e\u786e\u6307\u5b9a\u5b8c\u6574\u7684\u7ecf\u8fc7\u9a8c\u8bc1\u7684\u7c7b\u540d\u79f0\uff0c
+
+Nothing_to_redo=\u65e0\u53ef\u91cd\u505a
+
+Nothing_to_undo=\u65e0\u53ef\u64a4\u9500
+
+#Thenextisusedlikein"Referencesfound:1Numberofreferencestofetch?"
+Number_of_references_to_fetch?=\u8981\u6293\u53d6\u7684\u5f15\u7528\u6570\uff1f
+
+occurences=\u6b21
+
+OK=\u786e\u5b9a
+
+Ok=\u786e\u5b9a
+One_or_more_file_links_are_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=\u4e00\u4e2a\u6216\u591a\u4e2a\u6587\u4ef6\u94fe\u63a5\u662f\u672a\u5b9a\u4e49\u7684\u6587\u4ef6\u7c7b\u578b_'%0'\uff0c\u60a8\u5e0c\u671b\u600e\u4e48\u505a\uff1f
+
+One_or_more_keys_will_be_overwritten._Continue?=\u4e00\u4e2a\u6216\u591a\u4e2a_BibTeX_\u952e\u5c06\u4f1a\u88ab\u8986\u76d6\uff0c\u662f\u5426\u7ee7\u7eed\uff1f
+Only_one_item_is_supported=\u53ea\u652f\u6301\u4e00\u4e2a\u5143\u7d20
+
+Open=\u6253\u5f00
+
+Open_BibTeX_database=\u6253\u5f00_BibTeX_\u6570\u636e\u5e93
+
+Open_database=\u6253\u5f00\u6570\u636e\u5e93
+
+Open_editor_when_a_new_entry_is_created=\u521b\u5efa\u65b0\u8bb0\u5f55\u65f6\u6253\u5f00\u8bb0\u5f55\u7f16\u8f91\u5668
+
+Open_file=\u6253\u5f00\u6587\u4ef6
+
+Open_last_edited_databases_at_startup=\u542f\u52a8_JabRef_\u65f6\u6253\u5f00\u4e0a\u6b21\u4f7f\u7528\u7684\u6570\u636e\u5e93
+
+Open_PDF_or_PS=\u6253\u5f00_PDF_\u6216_PS
+
+Open_right-click_menu_with_Ctrl+left_button=\u4f7f\u7528_Ctrl+Left_\u6309\u952e\u7ec4\u5408\u6253\u5f00\u53f3\u952e\u83dc\u5355
+
+Open_URL_or_DOI=\u6253\u5f00_URL_\u6216_DOI
+OpenDocument_Spreadsheet=OpenDocument_Spreadsheet
+
+Opened_database=\u5df2\u6253\u5f00\u6570\u636e\u5e93
+
+Opening=\u6b63\u5728\u6253\u5f00
+
+Opening_preferences...=\u6b63\u5728\u6253\u5f00\u9996\u9009\u9879...
+
+OpenOffice_Calc=OpenOffice_Calc
+OpenOffice_CSV=OpenOffice_CSV
+Operation_canceled.\n=\u64cd\u4f5c\u88ab\u53d6\u6d88\n
+Operation_not_supported=\u4e0d\u652f\u6301\u7684\u64cd\u4f5c
+
+Optional_fields=\u53ef\u9009\u57df
+
+Options=\u9009\u9879
+
+or=\u6216
+
+out_of=out_of
+Output=\u8f93\u51fa
+
+Output_or_export_file=\u8f93\u51fa\u6216\u5bfc\u51fa\u6587\u4ef6
+
+Override=\u8df3\u8fc7
+
+Override_default_file_directories=\u8df3\u8fc7\u9ed8\u8ba4\u6587\u4ef6\u76ee\u5f55
+
+Override_default_font_settings=\u8df3\u8fc7\u9ed8\u8ba4\u5b57\u4f53\u8bbe\u7f6e
+
+override_the_bibtex_key_by_the_selected_text=\u4f7f\u7528\u9009\u4e2d\u6587\u5b57\u8986\u76d6_BibTeX_\u952e\u503c
+
+
+Overwrite=\u8986\u76d6
+Overwrite_existing_field_values=\u8986\u76d6\u539f\u6709\u57df\u5185\u5bb9
+
+Overwrite_keys=\u8986\u76d6\u952e\u503c
+
+pairs_processed=\u5df2\u5904\u7406\u8bb0\u5f55\u5bf9
+Password_\:=\u53e3\u4ee4:
+
+Paste=\u7c98\u8d34
+
+paste_entries=\u7c98\u8d34\u591a\u6761\u8bb0\u5f55
+
+paste_entry=\u7c98\u8d34\u8bb0\u5f55
+Paste_from_clipboard=\u4ece\u526a\u8d34\u677f\u7c98\u8d34
+
+Pasted=\u5b8c\u6210\u7c98\u8d34
+
+Path_to_%0_not_defined=\u5230_%0_\u7684\u8def\u5f84\u672a\u5b9a\u4e49
+
+Path_to_LatexEditor_(LEd.exe)=\u5230_LatexEditor_(LEd.exe)_\u7684\u8def\u5f84
+
+Path_to_LyX_pipe=\u5230_LyX_\u7ba1\u9053\u7684\u8def\u5f84
+
+Path_to_Vim=\u5230_Vim_\u7684\u8def\u5f84
+
+Path_to_WinEdt.exe=\u5230_WinEdt.exe_\u7684\u8def\u5f84
+
+PDF_directory=PDF_\u76ee\u5f55
+PDF_does_not_exist=PDF_\u4e0d\u5b58\u5728
+
+Personal_journal_list=\u79c1\u6709\u7684\u671f\u520a\u5217\u8868
+
+Plain_text_import=\u7eaf\u6587\u672c\u5bfc\u5165
+
+Please_check_your_network_connection_to_this_machine.=\u8bf7\u68c0\u67e5\u8fd9\u53f0\u673a\u5668\u7684\u7f51\u7edc\u8fde\u63a5\u3002
+
+Please_enter_a_name_for_the_group.=\u8bf7\u4e3a\u8be5\u5206\u7ec4\u8f93\u5165\u4e00\u4e2a\u540d\u5b57
+
+Please_enter_a_search_term._For_example,_to_search_all_fields_for_<b>Smith</b>,_enter%c<p><tt>smith</tt><p>To_search_the_field_<b>Author</b>_for_<b>Smith</b>_and_the_field_<b>Title</b>_for_<b>electrical</b>,_enter%c<p><tt>author%esmith_and_title%eelectrical</tt>=\u8bf7\u8f93\u5165\u4e00\u4e2a\u641c\u7d22\u8bcd\u7ec4\u3002\u4f8b\u5982\uff0c\u8981\u5728\u6240\u6709\u57df\u4e2d\u641c\u7d22_<b>Smith</b>\uff0c\u5c31\u8f93\u5165%c<p><tt>smith</tt><p>\u8981\u5728_<b>Author</b>_\u57df\u4e2d\u641 [...]
+
+Please_enter_the_field_to_search_(e.g._<b>keywords</b>)_and_the_keyword_to_search_it_for_(e.g._<b>electrical</b>).=\u8bf7\u8f93\u5165\u8981\u641c\u7d22\u7684\u57df(\u4f8b\u5982\uff1a_<b>keywords</b>)\u548c\u8981\u641c\u7d22\u7684\u5173\u952e\u8bcd(\u4f8b\u5982\uff1a_<b>electrical</b>)\u3002
+
+Please_enter_the_string's_label=\u8bf7\u8f93\u5165\u5b57\u4e32\u7684\u6807\u7b7e
+
+Please_select_an_importer=\u8bf7\u9009\u62e9\u4e00\u4e2a\u5bfc\u5165\u5668
+
+Please_select_an_importer.=\u8bf7\u9009\u62e9\u4e00\u4e2a\u5bfc\u5165\u5668\u3002
+
+Please_select_exactly_one_group_to_move.=\u8bf7\u9009\u4e2d\u4e00\u4e2a\u5206\u7ec4\u6765\u79fb\u52a8\u3002
+Please_specify_the_=\u8bf7\u6307\u5b9a
+
+Possible_duplicate_entries=\u53ef\u80fd\u7684\u91cd\u590d\u8bb0\u5f55
+
+Possible_duplicate_of_existing_entry._Click_to_resolve.=\u53ef\u80fd\u4e0e\u5df2\u5b58\u5728\u8bb0\u5f55\u91cd\u590d\uff0c\u70b9\u51fb\u4ee5\u89e3\u51b3\u6b64\u95ee\u9898\u3002
+
+Preamble=\u5bfc\u8a00\u533a_(Preamble)
+
+Preferences=\u9996\u9009\u9879
+
+Preferences_recorded.=\u9996\u9009\u9879\u88ab\u8bb0\u5f55\u3002
+
+Preview=\u9884\u89c8
+
+Previous_entry=\u4e0a\u4e00\u6761
+
+Primary_sort_criterion=\u4e3b\u6392\u5e8f\u4f9d\u636e
+Print_Preview=\u6253\u5370\u9884\u89c8
+Printing_Entry_Preview=\u6b63\u5728\u6253\u5370\u8bb0\u5f55\u9884\u89c8
+
+Problem_with_parsing_entry=\u89e3\u6790\u8bb0\u5f55\u65f6\u7684\u95ee\u9898
+Processing_=\u6b63\u5728\u5904\u7406
+Program_output=\u7a0b\u5e8f\u8f93\u51fa
+
+PS_directory=PS_\u76ee\u5f55
+Push_entries_to_external_application_(%0)=\u63a8\u9001\u8bb0\u5f55\u5230\u5916\u90e8\u7a0b\u5e8f_(%0)
+
+Push_selection_to_Emacs=\u63a8\u9001\u9009\u4e2d\u8bb0\u5f55\u5230_Emacs
+
+Push_selection_to_LyX/Kile=\u63a8\u9001\u9009\u4e2d\u8bb0\u5f55\u5230_LyX/Kile
+Push_selection_to_Vim=\u63a8\u9001\u9009\u4e2d\u8bb0\u5f55\u5230_Vim
+
+Push_selection_to_WinEdt=\u63a8\u9001\u9009\u4e2d\u8bb0\u5f55\u5230_WinEdt
+
+Push_to_LatexEditor=\u63a8\u9001\u5230_LatexEditor
+Pushed_citations_to_%0=\u5df2\u63a8\u9001\u5f15\u7528\u5230_%0
+
+Pushed_citations_to_Emacs=\u5df2\u63a8\u9001\u5f15\u7528\u5230_Emacs
+Pushed_citations_to_Vim=\u5df2\u63a8\u9001\u5f15\u7528\u5230_Vim
+
+Pushed_citations_to_WinEdt=\u5df2\u63a8\u9001\u5f15\u7528\u5230_WinEdt
+
+Pushed_the_citations_for_the_following_rows_to=\u5df2\u63a8\u9001\u4ee5\u4e0b\u884c\u8bb0\u5f55\u7684\u5f15\u7528\u5230
+
+Quit_JabRef=\u9000\u51fa_JabRef
+
+Quit_synchronization=\u9000\u51fa\u540c\u6b65
+
+Raw_source=\u539f\u59cb\u6e90\u6570\u636e
+
+Really_delete_the_selected=\u786e\u8ba4\u5220\u9664\u9009\u4e2d\u7684
+
+Rearrange_tabs_alphabetically_by_title=\u5bf9\u6807\u7b7e\u9875\u4ee5\u6807\u9898\u6309\u5b57\u6bcd\u8868\u6392\u5e8f
+
+Redo=\u91cd\u505a
+
+Reference_database=\u53c2\u8003\u6587\u732e\u6570\u636e\u5e93
+
+#Thenexttwolinesareusedlikein"Referencesfound:1Numberofreferencestofetch?"
+References_found=\u627e\u5230\u53c2\u8003\u6587\u732e
+
+Refine_supergroup\:_When_selected,_view_entries_contained_in_both_this_group_and_its_supergroup=\u63d0\u70bc\u7236\u5206\u7ec4\uff1a\u5f53\u5206\u7ec4\u88ab\u9009\u4e2d\u65f6\uff0c\u663e\u793a\u540c\u65f6\u5305\u542b\u5728\u8be5\u5206\u7ec4\u548c\u5b83\u7236\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55
+
+Refresh_view=\u5237\u65b0\u89c6\u56fe
+
+Regular_Expression=\u6b63\u5219\u8868\u8fbe\u5f0f
+
+Remember_these_entry_types?=\u8bb0\u4f4f\u8fd9\u4e9b\u8bb0\u5f55\u7c7b\u578b\uff1f
+
+Remote_operation=\u8fdc\u7a0b\u64cd\u4f5c
+
+Remote_server_port=\u8fdc\u7a0b\u670d\u52a1\u5668\u7aef\u53e3
+
+Remove=\u79fb\u9664
+
+Remove_all?=\u79fb\u9664\u6240\u6709?
+
+Remove_all_subgroups=\u79fb\u9664\u5b50\u5206\u7ec4
+
+Remove_all_subgroups_of_"%0"?=\u79fb\u9664_"%0"_\u7684\u6240\u6709\u5b50\u5206\u7ec4\uff1f
+
+Remove_double_braces_around_BibTeX_fields_when_loading.=\u8f7d\u5165\u65f6\u79fb\u9664_BibTeX_\u57df\u4e2d\u7684\u53cc\u5c42\u62ec\u53f7
+
+Remove_duplicates=\u79fb\u9664\u91cd\u590d\u9879
+
+Remove_entry_from_import=\u4ece\u5bfc\u5165\u4e2d\u79fb\u9664\u8bb0\u5f55
+
+Remove_entry_selection_from_this_group=\u4ece\u8be5\u5206\u7ec4\u4e2d\u79fb\u9664\u8bb0\u5f55
+
+Remove_entry_type=\u79fb\u9664\u8bb0\u5f55\u7c7b\u578b
+Remove_file_link_(DELETE)=\u79fb\u9664\u6587\u4ef6\u94fe\u63a5(\u5220\u9664)
+
+remove_from_group=\u4ece\u5206\u7ec4\u4e2d\u79fb\u9664
+
+Remove_from_group=\u4ece\u5206\u7ec4\u4e2d\u79fb\u9664
+
+Remove_group=\u79fb\u9664\u5206\u7ec4
+
+Remove_group,_keep_subgroups=\u79fb\u9664\u5206\u7ec4\uff0c\u4fdd\u7559\u5b50\u5206\u7ec4
+
+Remove_group_"%0"?=\u79fb\u9664\u5206\u7ec4_"%0"?
+
+Remove_group_"%0"_and_its_subgroups?=\u79fb\u9664\u5206\u7ec4_"%0"_\u548c\u5b83\u7684\u5b50\u5206\u7ec4\uff1f
+
+remove_group_(keep_subgroups)=\u79fb\u9664\u5206\u7ec4(\u4fdd\u7559\u5b50\u5206\u7ec4)
+
+remove_group_and_subgroups=\u79fb\u9664\u5206\u7ec4\u548c\u5b50\u5206\u7ec4
+
+Remove_group_and_subgroups=\u79fb\u9664\u5206\u7ec4\u548c\u5b50\u5206\u7ec4
+
+Remove_link=\u79fb\u9664\u94fe\u63a5
+
+Remove_old_entry=\u79fb\u9664\u65e7\u8bb0\u5f55
+
+Remove_selected_strings=\u79fb\u9664\u9009\u4e2d\u7684\u7b80\u5199\u5b57\u4e32
+
+remove_string_=\u79fb\u9664\u7b80\u5199\u5b57\u4e32
+
+Removed_group_"%0".=\u5df2\u79fb\u9664\u5206\u7ec4_"%0"\u3002
+
+Removed_group_"%0"_and_its_subgroups.=\u5df2\u79fb\u9664\u5206\u7ec4_"%0"_\u548c\u5b83\u7684\u5b50\u5206\u7ec4\u3002
+
+Removed_string=\u5df2\u79fb\u9664\u7b80\u5199\u5b57\u4e32
+
+Renamed_string=\u91cd\u547d\u540d\u5b57\u7b26\u4e32
+
+Replace=\u66ff\u6362
+
+Replace_(regular_expression)=\u66ff\u6362_(\u6b63\u5219\u8868\u8fbe\u5f0f)
+
+Replace_string=\u66ff\u6362\u5b57\u7b26\u4e32
+
+Replace_with=\u66ff\u6362\u4e3a
+
+Replaced=\u88ab\u66ff\u6362
+
+Required_fields=\u5fc5\u9009\u57df
+
+Reset_all=\u91cd\u7f6e\u6240\u6709
+Reset_file_type_definitons=\u91cd\u7f6e\u6587\u4ef6\u7c7b\u578b\u5b9a\u4e49
+
+Resolve_strings_for_all_fields_except=\u5904\u7406\u6240\u6709\u57df\u7684\u7b80\u5199\u5b57\u4e32\uff0c\u9664\u4e86
+Resolve_strings_for_standard_BibTeX_fields_only=\u53ea\u5904\u7406\u6807\u51c6_BibTeX_\u57df\u7684\u7b80\u5199\u5b57\u4e32
+
+resolved=\u5df2\u89e3\u51b3
+
+Results=\u7ed3\u679c
+
+Revert_to_original_source=\u6062\u590d\u5230\u521d\u59cb\u6e90
+
+Review=\u8bc4\u8bba
+
+Review_changes=\u590d\u67e5\u4fee\u6539
+
+Right=\u53f3
+root=root
+
+Save=\u4fdd\u5b58
+Save_all_finished.=\u5b8c\u6210\u4fdd\u5b58\u5168\u90e8\u3002
+
+Save_all_open_databases=\u4fdd\u5b58\u6240\u6709\u6253\u5f00\u7684\u6570\u636e\u5e93
+
+Save_before_closing=\u5173\u95ed\u524d\u4fdd\u5b58
+
+Save_database=\u4fdd\u5b58\u6570\u636e\u5e93
+Save_database_as_...=\u4fdd\u5b58\u6570\u636e\u5e93\u4e3a_...
+
+Save_entries_in_their_original_order=\u4ee5\u539f\u59cb\u987a\u5e8f\u4fdd\u5b58\u8bb0\u5f55
+
+Save_failed=\u4fdd\u5b58\u5931\u8d25
+
+Save_failed_during_backup_creation=\u4fdd\u5b58\u5931\u8d25\uff0c\u65e0\u6cd5\u521b\u5efa\u5907\u4efd
+
+Save_failed_while_committing_changes=\u4fdd\u5b58\u5931\u8d25\uff0c\u65e0\u6cd5\u63d0\u4ea4\u4fee\u6539
+
+Save_ordered_by_author/editor/year=\u4ee5\u201c\u4f5c\u8005/\u7f16\u8005/\u5e74\u4efd\u201d\u987a\u5e8f\u4fdd\u5b58
+Save_selected_as_...=\u9009\u4e2d\u8bb0\u5f55\u53e6\u5b58\u4e3a...
+
+Saved_database=\u5df2\u4fdd\u5b58\u6570\u636e\u5e93
+
+Saved_selected_to=\u4fdd\u5b58\u9009\u4e2d\u5230
+
+Saved_session=\u5df2\u4fdd\u5b58\u56de\u8bdd
+
+Saving=\u4fdd\u5b58\u4e2d
+Saving_all_databases...=\u6b63\u5728\u4fdd\u5b58\u6240\u6709\u6570\u636e\u5e93...
+
+Saving_database=\u6b63\u5728\u4fdd\u5b58\u6570\u636e\u5e93
+
+Scan=\u626b\u63cf
+
+Search=\u67e5\u627e
+
+Search_All_Fields=\u5728\u6240\u6709\u57df\u4e2d\u67e5\u627e
+
+Search_all_fields=\u5728\u6240\u6709\u57df\u4e2d\u67e5\u627e
+
+Search_error=\u67e5\u627e\u51fa\u9519
+
+Search_expression=\u67e5\u627e\u8868\u8fbe\u5f0f
+
+Search_for=\u67e5\u627e
+
+Search_general_fields=\u5728_general_\u57df\u4e2d\u67e5\u627e
+
+Search_IEEEXplore=\u641c\u7d22_IEEEXplore
+Search_IEEExplore=\u641c\u7d22_IEEExplore
+
+Search_optional_fields=\u5728\u53ef\u9009\u57df\u4e2d\u67e5\u627e
+
+Search_required_fields=\u5728\u5fc5\u9009\u57df\u4e2d\u67e5\u627e
+
+Search_Specified_Field(s)=\u5728\u7279\u5b9a\u57df\u4e2d\u67e5\u627e
+
+Searched_database._Global_number_of_hits=\u5b8c\u6210\u641c\u7d22\u6570\u636e\u5e93\uff0c\u5168\u5c40\u547d\u4e2d\u6570
+
+Searched_database._Number_of_hits=\u5b8c\u6210\u641c\u7d22\u6570\u636e\u5e93\uff0c\u547d\u4e2d\u6570
+
+Searching_for_%0_file=\u67e5\u627e_%0_\u6587\u4ef6
+
+Searching_for_duplicates...=\u6b63\u5728\u67e5\u627e\u91cd\u590d\u8bb0\u5f55...
+
+Searching_for_files=\u6b63\u5728\u67e5\u627e\u6587\u4ef6
+
+Secondary_sort_criterion=\u7b2c\u4e8c\u6392\u5e8f\u4f9d\u636e
+
+Select=\u9009\u62e9
+
+Select_a_Zip-archive=\u9009\u62e9\u4e00\u4e2a_Zip_\u538b\u7f29\u5305
+
+Select_action=\u9009\u62e9\u64cd\u4f5c
+
+Select_all=\u5168\u9009
+
+Select_Classpath_of_New_Importer=\u9009\u62e9\u65b0\u5bfc\u5165\u5668\u7684_classpath
+
+Select_encoding=\u9009\u62e9\u7f16\u7801
+
+Select_entries_in_group_selection=\u9009\u4e2d\u9009\u4e2d\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55
+
+Select_entry_type=\u9009\u62e9\u8bb0\u5f55\u7c7b\u578b
+Select_external_application=\u9009\u62e9\u5916\u90e8\u7a0b\u5e8f
+
+Select_file_from_ZIP-archive=\u4ece_ZIP-\u538b\u7f29\u5305\u4e2d\u9009\u62e9\u6587\u4ef6
+
+Select_format=\u9009\u62e9\u683c\u5f0f
+Select_icon=\u9009\u62e9\u56fe\u6807
+
+Select_matches=\u9009\u4e2d\u5339\u914d\u7684\u8bb0\u5f55
+
+Select_new_ImportFormat_Subclass=\u9009\u62e9\u65b0\u7684_ImportFormat_\u5b50\u7c7b
+
+Select_the_tree_nodes_to_view_and_accept_or_reject_changes=\u9009\u62e9\u6811\u8282\u70b9\u67e5\u770b\u548c\u63a5\u53d7/\u62d2\u7edd\u4fee\u6539
+Selected_entries=\u9009\u4e2d\u7684\u8bb0\u5f55
+
+Selector_enabled_fields=\u542f\u7528\u4e0b\u62c9\u83dc\u5355\u7684\u57df
+Server_Hostname_\:=\u670d\u52a1\u5668\u4e3b\u673a:
+Server_Type_\:=\u670d\u52a1\u5668\u7c7b\u578b:
+Set_field=\u8bbe\u7f6e\u57df\u5185\u5bb9
+Set_fields=\u8bbe\u7f6e\u57df\u5185\u5bb9
+
+Set_general_fields=\u8bbe\u7f6e_general_\u57df
+Set_main_external_file_directory=\u8bbe\u7f6e\u5916\u90e8\u6587\u4ef6\u7684\u4e3b\u76ee\u5f55
+
+Set_table_font=\u8bbe\u7f6e\u8868\u683c\u5b57\u4f53
+
+Settings=\u8bbe\u7f6e
+
+Setup_selectors=\u8bbe\u7f6e\u4e0b\u62c9\u83dc\u5355\u9879
+
+Short_form=\u7f29\u5199\u5f62\u5f0f
+
+Shortcut=\u5feb\u6377\u952e
+
+Show/edit_BibTeX_source=\u663e\u793a/\u7f16\u8f91_BibTeX_\u6e90\u4ee3\u7801
+
+Show_'Firstname_Lastname'=\u663e\u793a_'\u540d_(Firstname)_\u59d3_(Lastname)'
+Show_'Lastname,_Firstname'=\u663e\u793a_'\u59d3_(Lastname),_\u540d_(Firstname)'
+
+Show_BibTeX_source_by_default=\u7f3a\u7701\u663e\u793a_BibTeX_\u6e90\u4ee3\u7801
+
+Show_BibTeX_source_panel=\u663e\u793a_BibTeX_\u6e90\u4ee3\u7801\u9762\u677f
+
+Show_confirmation_dialog_when_deleting_entries=\u5220\u9664\u591a\u6761\u8bb0\u5f55\u65f6\u53d1\u51fa\u8b66\u544a
+
+Show_description=\u663e\u793a\u63cf\u8ff0
+
+Show_dynamic_groups_in_<i>italics</i>=\u7528_<i>\u659c\u4f53</i>_\u663e\u793a\u52a8\u6001\u5206\u7ec4
+
+Show_entries_*not*_in_group_selection=\u663e\u793a\u90a3\u4e9b*\u4e0d*\u5728\u9009\u4e2d\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55
+
+Show_file_column=\u663e\u793a\u201c\u6587\u4ef6\u201d\u5217
+
+Show_icons_for_groups=\u663e\u793a\u5206\u7ec4\u7c7b\u578b\u56fe\u6807
+Show_last_names_only=\u53ea\u663e\u793a\u201c\u59d3_(Lastname)\u201d
+
+Show_names_unchanged=\u663e\u793a\u539f\u59cb\u59d3\u540d\u5b57\u4e32
+
+Show_one_less_rows=\u51cf\u5c11\u663e\u793a\u4e00\u884c
+
+Show_one_more_row=\u589e\u52a0\u663e\u793a\u4e00\u884c
+
+Show_optional_fields=\u663e\u793a\u53ef\u9009\u57df
+
+Show_PDF/PS_column=\u663e\u793a_PDF/PS_\u5217
+
+Show_required_fields=\u663e\u793a\u5fc5\u9009\u57df
+
+Show_URL/DOI_column=\u663e\u793a_URL/DOI_\u5217
+
+Show_warning_dialog_when_a_duplicate_BibTeX_key_is_entered=\u5f53\u8f93\u5165\u91cd\u590d\u7684_BibTeX_\u952e\u65f6\u53d1\u51fa\u8b66\u544a
+
+Show_warning_dialog_when_an_empty_BibTeX_key_is_entered=\u5f53\u8f93\u5165\u7a7a\u767d\u7684_BibTeX_\u952e\u65f6\u53d1\u51fa\u8b66\u544a
+
+Simple_HTML=\u7b80\u5355_HTML
+
+Size=\u5927\u5c0f
+
+Skip=\u8df3\u8fc7
+Skipped_-_No_PDF_linked=\u8df3\u8fc7-\u6ca1\u6709_PDF_\u94fe\u63a5
+Skipped_-_PDF_does_not_exist=\u8df3\u8fc7-PDF_\u4e0d\u5b58\u5728
+
+Skipped_entry.=\u5df2\u8df3\u8fc7\u8bb0\u5f55
+
+Sort_alphabetically=\u6309\u5b57\u6bcd\u8868\u6392\u5e8f
+
+Sort_Automatically=\u81ea\u52a8\u6392\u5e8f
+
+Sort_order=\u6392\u5e8f\u987a\u5e8f
+
+sort_subgroups=\u6392\u5e8f\u5b50\u5206\u7ec4
+
+Sorted_all_subgroups_recursively.=\u9012\u5f52\u6392\u5e8f\u6240\u6709\u5b50\u5206\u7ec4\u3002
+
+Sorted_immediate_subgroups.=\u5b8c\u6210\u6392\u5e8f\u76f4\u63a5\u5b50\u5206\u7ec4\u3002
+
+source_edit=\u6e90\u4ee3\u7801\u7f16\u8f91
+Special_Name_Formatters=\u7279\u6b8a\u7684\u59d3\u540d\u683c\u5f0f\u5316\u5668
+
+Special_table_columns=\u7279\u6b8a\u5217
+SQL_connection_established.=SQL_\u8fde\u63a5\u5df2\u5efa\u7acb\u3002
+
+Start_incremental_search=\u5f00\u59cb\u589e\u91cf\u67e5\u627e
+
+Start_search=\u5f00\u59cb\u67e5\u627e
+Starting_import=\u5f00\u59cb\u5bfc\u5165
+
+Statically_group_entries_by_manual_assignment=\u624b\u52a8\u521b\u5efa\u9759\u6001\u5206\u7ec4
+
+Status=\u72b6\u6001
+
+Stop=\u505c\u6b62
+
+Store_journal_abbreviations=\u50a8\u5b58\u671f\u520a\u7f29\u5199
+
+Store_string=\u50a8\u5b58\u7b80\u5199\u5b57\u4e32
+
+Store_the_following_fields_with_braces_around_capital_letters=\u50a8\u5b58\u4e0b\u5217\u57df\u65f6\u4f7f\u7528\u5927\u62ec\u53f7\u5305\u88f9\u5927\u5199\u5b57\u6bcd
+
+Stored_entry=\u50a8\u5b58\u7684\u8bb0\u5f55
+
+Strings=\u7b80\u5199\u5b57\u4e32
+
+Strings_for_database=\u7b80\u5199\u5b57\u4e32\u5217\u8868\u2014\u2014\u6570\u636e\u5e93
+
+Subdatabase_from_aux=\u4ece_AUX_\u6587\u4ef6\u751f\u6210\u7684\u5b50\u6570\u636e\u5e93
+
+Suggest=\u5efa\u8bae
+
+Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=\u5728\u5df2\u77e5\u7684\u671f\u520a\u540d\u7b80\u5199\u548c\u5168\u79f0\u4e4b\u95f4\u5207\u6362\u3002
+
+Synchronize_%0_links=\u540c\u6b65_%0_\u94fe\u63a5
+Synchronize_file_links=\u540c\u6b65\u6587\u4ef6\u94fe\u63a5
+
+Synchronizing_%0_links...=\u6b63\u5728\u540c\u6b65_%0_\u94fe\u63a5...
+
+Table_appearance=\u5217\u8868\u5916\u89c2
+
+Table_background_color=\u5217\u8868\u80cc\u666f\u989c\u8272
+
+Table_grid_color=\u5217\u8868\u7f51\u683c\u989c\u8272
+
+Table_text_color=\u5217\u8868\u6587\u5b57\u989c\u8272
+
+Tabname=\u6807\u7b7e\u9875\u540d
+Target_file_cannot_be_a_directory.=\u76ee\u6807\u6587\u4ef6\u4e0d\u53ef\u4e3a\u76ee\u5f55\u3002
+
+Tertiary_sort_criterion=\u7b2c\u4e09\u6392\u5e8f\u4f9d\u636e
+
+Test=\u6d4b\u8bd5
+
+Text_Input_Area=\u6b64\u5904\u7f16\u8f91\u6587\u672c
+
+The_#_character_is_not_allowed_in_BibTeX_fields=#_\u5b57\u7b26\u65e0\u6cd5\u5728_BibTeX_\u57df\u4e2d\u4f7f\u7528
+
+The_chosen_date_format_for_new_entries_is_not_valid=\u4e3a\u65b0\u8bb0\u5f55\u9009\u62e9\u7684\u65e5\u671f\u683c\u5f0f\u975e\u6cd5
+
+The_chosen_encoding_'%0'_could_not_encode_the_following_characters\:_=\u9009\u62e9\u7684\u7f16\u7801_'%0'_\u65e0\u6cd5\u652f\u6301\u4e0b\u5217\u5b57\u7b26:_
+
+The_CiteSeer_fetch_operation_returned_zero_results.=CiteSeerX_\u6293\u53d6\u64cd\u4f5c\u8fd4\u56de_0_\u4e2a\u7ed3\u679c\u3002
+
+
+The_current_version_features_a_new_way_of_handling_links_to_external_files.<br>To_take_advantage_of_this,_your_links_must_be_changed_into_the_new_format,_and<br>JabRef_must_be_configured_to_show_the_new_links.=\u5f53\u524d\u7248\u672c\u4f7f\u7528\u4e86\u65b0\u7684\u65b9\u6cd5\u6765\u5904\u7406\u5916\u90e8\u6587\u4ef6\u94fe\u63a5\u3002\u4e3a\u4f7f\u7528\u65b0\u7279\u6027\uff0c\u60a8\u7684\u94fe\u63a5\u5fc5\u987b\u88ab\u8f6c\u6362\u6210\u65b0\u7684\u683c\u5f0f\uff0c<br>JabRef_\u4e5f\u4f1a\ [...]
+
+the_field_<b>%0</b>=\u57df_<b>%0</b>
+
+The_file<BR>'%0'<BR>has_been_modified<BR>externally!=\u6587\u4ef6<BR>'%0'<BR>\u5df2\u7ecf\u88ab\u5916\u90e8\u7a0b\u5e8f\u4fee\u6539\uff01
+
+The_group_"%0"_already_contains_the_selection.=\u5206\u7ec4_"%0"_\u4e2d\u5df2\u7ecf\u5305\u542b\u9009\u4e2d\u7684\u9879\u3002
+
+The_label_of_the_string_can_not_be_a_number.=\u8be5\u5b57\u7b26\u4e32\u7684_label_\u4e0d\u53ef\u4ee5\u4e3a\u6570\u5b57\u3002
+
+The_label_of_the_string_can_not_contain_spaces.=\u8be5\u5b57\u7b26\u4e32\u7684_label_\u4e0d\u53ef\u4ee5\u5305\u542b\u7a7a\u683c\u3002
+
+The_label_of_the_string_can_not_contain_the_'#'_character.=\u8be5\u5b57\u7b26\u4e32\u7684_label_\u4e0d\u53ef\u4ee5\u5305\u542b_'#'_\u5b57\u7b26\u3002
+
+The_output_option_depends_on_a_valid_import_option.=\u8f93\u51fa\u9009\u9879\u4f9d\u8d56\u4e8e\u4e00\u4e2a\u5408\u6cd5\u7684\u5bfc\u5165\u9009\u9879\u3002
+The_PDF_contains_one_or_several_bibtex-records.\nDo_you_want_to_import_these_as_new_entries_into_the_current_database?=\u8be5_PDF_\u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a_BibTeX_\u8bb0\u5f55\uff0c\n\u60a8\u5e0c\u671b\u5bfc\u5165\u8fd9\u4e9b\u8bb0\u5f55\u5230\u5f53\u524d\u6570\u636e\u5e93\u4e2d\u5417\uff1f
+
+The_regular_expression_<b>%0</b>_is_invalid%c=\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%0</b>_\u662f\u975e\u6cd5\u7684%c
+
+The_search_is_case_insensitive.=\u8be5\u67e5\u8be2\u662f\u4e0d\u533a\u5206\u5927\u5c0f\u5199\u7684\u3002
+
+The_search_is_case_sensitive.=\u8be5\u67e5\u8be2\u662f\u533a\u5206\u5927\u5c0f\u5199\u7684\u3002
+
+The_string_has_been_removed_locally=\u7b80\u5199\u5b57\u4e32\u88ab\u672c\u5730\u79fb\u9664
+
+There_are_possible_duplicates_(marked_with_a_'D'_icon)_that_haven't_been_resolved._Continue?=\u5b58\u5728\u53ef\u80fd\u4ecd\u672a\u89e3\u51b3\u7684\u91cd\u590d\u9879(\u4ee5'D'\u56fe\u6807\u6807\u8bb0)\uff0c\u662f\u5426\u7ee7\u7eed\uff1f
+
+this_button_will_update=\u8fd9\u4e2a\u6309\u94ae\u5c06\u66f4\u65b0
+This_database_was_written_using_an_older_version_of_JabRef.=\u6b64\u6570\u636e\u5e93\u662f\u7531\u65e7\u7248\u672c\u7684_JabRef_\u751f\u6210\u7684\u3002
+
+This_entry_has_no_BibTeX_key._Generate_key_now?=\u6b64\u8bb0\u5f55\u6ca1\u6709_BibTeX_\u952e\uff0c\u73b0\u5728\u751f\u6210\u5b83\uff1f
+
+This_entry_is_incomplete=\u8be5\u8bb0\u5f55\u662f\u4e0d\u5b8c\u6574\u7684
+
+This_entry_type_cannot_be_removed.=\u8be5\u8bb0\u5f55\u7c7b\u578b\u65e0\u6cd5\u88ab\u79fb\u9664\u3002
+
+This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=\u6b64\u5916\u90e8\u94fe\u63a5\u7c7b\u578b_'%0'_\u672a\u5b9a\u4e49\uff0c\u60a8\u60f3\u600e\u4e48\u529e\uff1f
+
+This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=\u6b64\u5206\u7ec4\u4e2d\u7684\u8bb0\u5f55\u7cfb\u7528\u6237\u624b\u52a8\u65b9\u5f0f\u5206\u914d\u3002\u60a8\u53ef\u4 [...]
+
+This_group_contains_entries_in_which=\u6b64\u5206\u7ec4\u4e2d\u8bb0\u5f55
+
+This_group_contains_entries_in_which_any_field_contains_the_regular_expression_<b>%0</b>=\u6b64\u5206\u7ec4\u4e2d\u8bb0\u5f55\u7684\u67d0\u4e2a\u57df\u4e2d\u5305\u542b\u6b63\u5219\u8868\u8fbe\u5f0f\u2014\u2014<b>%0</b> 
+
+This_group_contains_entries_in_which_any_field_contains_the_term_<b>%0</b>=\u6b64\u5206\u7ec4\u4e2d\u8bb0\u5f55\u7684\u67d0\u4e2a\u57df\u4e2d\u5305\u542b\u8bcd\u7ec4_<b>%0</b> 
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_keyword_<b>%1</b>=\u6b64\u5206\u7ec4\u4e2d\u8bb0\u5f55\u7684_<b>%0</b>_\u57df\u5305\u542b\u5173\u952e\u8bcd_<b>%1</b> 
+
+This_group_contains_entries_whose_<b>%0</b>_field_contains_the_regular_expression_<b>%1</b>=\u6b64\u5206\u7ec4\u4e2d\u8bb0\u5f55\u7684_<b>%0</b>_\u57df\u5305\u542b\u6b63\u5219\u8868\u8fbe\u5f0f_<b>%1</b> 
+
+This_is_a_simple_copy_and_paste_dialog_for_import_some_fields_from_normal_text.=\u8fd9\u662f\u4e00\u4e2a\u4e3a\u4ece\u666e\u901a\u6587\u672c\u4e2d\u5bfc\u5165\u4e00\u4e9b\u57df\u5185\u5bb9\u7684\u7b80\u5355\u590d\u5236\u548c\u7c98\u8d34\u5bf9\u8bdd\u6846\u3002
+This_makes_JabRef_look_up_each_%0_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u8be5\u9009\u9879\u4f7f_JabRef_\u904d\u5386\u6240\u6709_%0_\u94fe\u63a5\uff0c\u68c0\u67e5\u94fe\u63a5\u6587\u4ef6\u662f\u5426\u5b58\u5728\u3002\u5982\u679c\u4e0d\u5b58\u5728\uff0c\u60a8\u5c06\u4f1a\u5f97\u5230\u4e00\u4e2a\u9009\u9879\u6765\u5904\u7406\u8fd9\u4e2a\u95ee\u9898\u3002
+
+This_operation_requires_all_selected_entries_to_have_BibTex_keys_defined.=\u6b64\u64cd\u4f5c\u8981\u6c42\u6240\u6709\u9009\u4e2d\u8bb0\u5f55\u7684_BibTeX_\u952e\u503c\u4e0d\u4e3a\u7a7a\u3002
+This_operation_requires_at_least_one_entry.=\u6b64\u64cd\u4f5c\u8981\u6c42\u81f3\u5c11\u9009\u4e2d\u4e00\u4e2a\u8bb0\u5f55\u3002
+
+This_operation_requires_one_or_more_entries_to_be_selected.=\u8fd9\u4e2a\u64cd\u4f5c\u8981\u6c42\u9009\u4e2d\u4e00\u6761\u6216\u591a\u6761\u8bb0\u5f55\u3002
+
+This_will_move_all_external_links_from_the_'pdf'_and_'ps'_fields_into_the_'%0'_field._Proceed?=\u8fd9\u4f1a\u5c06\u6240\u6709_'pdf'_\u548c_'ps'_\u57df\u7684\u94fe\u63a5\u79fb\u52a8\u5230_'%0'_\u57df\uff0c\u662f\u5426\u7ee7\u7eed\uff1f
+
+To_set_up,_go_to_<B>Tools_->_Manage_journal_abbreviations</B>=\u8981\u8bbe\u7f6e\u7684\u8bdd\uff0c\u8bf7\u5230_<B>\u9009\u9879->\u7ba1\u7406\u671f\u520a\u540d\u7f29\u5199\u89c4\u5219</B>\u83dc\u5355\u9879
+
+Toggle_abbreviation=\u6253\u5f00/\u5173\u95ed\u540d\u79f0\u7f29\u5199
+Toggle_entry_preview=\u6253\u5f00/\u5173\u95ed\u8bb0\u5f55\u9884\u89c8
+Toggle_groups_interface=\u6253\u5f00/\u5173\u95ed\u7ec4\u754c\u9762
+Toggle_search_panel=\u6253\u5f00/\u5173\u95ed\u67e5\u627e\u9762\u677f
+
+Try_different_encoding=\u5c1d\u8bd5\u5176\u5b83\u7f16\u7801
+
+Type_set_to_'other'=\u8bbe\u7f6e\u7c7b\u578b\u4e3a_'other'
+Unabbreviate_journal_names_of_the_selected_entries=\u5c55\u5f00\u9009\u4e2d\u8bb0\u5f55\u7684\u7f29\u5199\u671f\u520a\u540d\u79f0
+Unabbreviated_%0_journal_names.=\u5c55\u5f00_%0_\u671f\u520a\u540d\u79f0\u3002
+
+unable_to_access_LyX-pipe=\u65e0\u6cd5\u8bbf\u95ee_LyX_\u7ba1\u9053
+
+Unable_to_create_graphical_interface=\u65e0\u6cd5\u751f\u6210\u56fe\u5f62\u754c\u9762
+
+Unable_to_open_file.=\u65e0\u6cd5\u6253\u5f00\u6587\u4ef6.
+Unable_to_open_link._The_application_'%0'_associated_with_the_file_type_'%1'_could_not_be_called.=\u65e0\u6cd5\u6253\u5f00\u94fe\u63a5\u3002\u65e0\u6cd5\u8c03\u7528\u4e0e\u6587\u4ef6\u7c7b\u578b_'%1'_\u5173\u8054\u7684\u5e94\u7528\u7a0b\u5e8f_'%0'_\u3002
+Unable_to_read_default_icon_theme.=\u65e0\u6cd5\u8bfb\u5165\u9ed8\u8ba4\u7684\u56fe\u6807\u4e3b\u9898\u3002
+Unable_to_read_icon_theme_file=\u65e0\u6cd5\u8bfb\u53d6\u56fe\u6807\u7684\u4e3b\u9898\u6587\u4ef6
+
+unable_to_write_to=\u65e0\u6cd5\u5199\u5165
+Undefined_file_type=\u672a\u5b9a\u4e49\u7684\u6587\u4ef6\u7c7b\u578b
+
+Undo=\u64a4\u9500
+
+Union=\u5e76\u96c6
+
+Unknown_bibtex_entries=\u672a\u77e5\u7684_BibTeX_\u8bb0\u5f55
+
+unknown_edit=\u672a\u77e5\u4fee\u6539
+
+unknown_entry_type=\u4f4d\u7f6e\u7684\u8bb0\u5f55\u7c7b\u578b
+
+Unknown_export_format=\u672a\u77e5\u7684\u5bfc\u51fa\u683c\u5f0f
+
+Unmark_all=\u64a4\u9500\u6240\u6709\u9ad8\u4eae\u6807\u8bb0
+
+Unmark_entries=\u64a4\u9500\u9009\u4e2d\u9ad8\u4eae\u6807\u8bb0
+
+Unmark_entry=\u64a4\u9500\u8bb0\u5f55\u9ad8\u4eae\u6807\u8bb0
+
+Unmarked_selected=\u5df2\u64a4\u9500\u9009\u4e2d\u9ad8\u4eae\u6807\u8bb0
+
+Unpack_EndNote_filter_set=\u89e3\u5f00_EndNote_\u8fc7\u6ee4\u5668\u96c6\u5408
+
+Unpacked_file.=\u91ca\u653e\u7684\u6587\u4ef6\u3002
+
+Unsupported_version_of_class_%0\:_%1=\u4e0d\u652f\u6301\u7684\u7c7b\u7248\u672c_%0:_%1
+
+untitled=\u672a\u547d\u540d
+
+Up=\u4e0a
+
+Update_to_current_column_widths=\u4f7f\u7528\u5f53\u524d\u89c6\u56fe\u4e2d\u7684\u5217\u5bbd
+
+Updated_group_selection=\u66f4\u65b0\u5206\u7ec4\u9009\u62e9
+Upgrade_external_links=\u5347\u7ea7\u5916\u90e8\u94fe\u63a5
+Upgrade_external_PDF/PS_links_to_use_the_'%0'_field.=\u5347\u7ea7\u5916\u90e8_PDF/PS_\u94fe\u63a5\u4ee5\u4f7f\u7528_'%0'_\u57df\u3002
+Upgrade_file=\u5347\u7ea7\u6587\u4ef6
+Upgrade_old_external_file_links_to_use_the_new_feature=\u5347\u7ea7\u65e7\u5916\u90e8\u6587\u4ef6\u94fe\u63a5\u4ee5\u4f7f\u7528\u65b0\u7279\u6027
+Upgraded_links.=\u5b8c\u6210\u5347\u7ea7\u94fe\u63a5\u3002
+UPPER=\u5927\u5199\u5168\u90e8
+Upper_Each_First=\u5927\u5199\u8bcd\u9996
+Upper_first=\u5927\u5199\u53e5\u9996
+
+usage=\u7528\u6cd5
+
+Use_antialiasing_font=\u4f7f\u7528_antialiasing_\u5b57\u4f53
+Use_autocompletion_for_the_following_fields=\u4e3a\u4ee5\u4e0b\u57df\u5f00\u542f\u81ea\u52a8\u5b8c\u6210\u529f\u80fd
+Use_custom_icon_theme=\u4f7f\u7528\u81ea\u5b9a\u4e49\u56fe\u6807\u4e3b\u9898
+Use_default_viewer=\u4f7f\u7528\u9ed8\u8ba4\u67e5\u770b\u5668
+
+Use_inspection_window_also_when_a_single_entry_is_imported.=\u4ec5\u5bfc\u5165\u4e00\u6761\u8bb0\u5f55\u65f6\u4e5f\u6253\u5f00\u68c0\u89c6\u7a97\u53e3\u663e\u793a\u8be5\u8bb0\u5f55
+Use_native_file_dialog=\u4f7f\u7528\u672c\u5730\u6587\u4ef6\u5bf9\u8bdd\u6846
+
+Use_other_look_and_feel=\u4f7f\u7528\u5176\u5b83\u89c6\u89c9\u6548\u679c\u7c7b_(look_and_feel,_\u5373_Java_\u754c\u9762\u7c7b)
+Use_Regular_Expression_Search=\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f\u641c\u7d22
+
+Use_regular_expressions=\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f
+
+Use_the_following_delimiter_character(s)=\u4f7f\u7528\u4e0b\u9762\u7684\u5206\u9694\u7b26
+Username_\:=\u7528\u6237\u540d:
+
+Value_cleared_externally=\u5185\u5bb9\u4ece\u5916\u90e8\u88ab\u6e05\u9664
+
+Value_set_externally=\u5185\u5bb9\u4ece\u5916\u90e8\u88ab\u8bbe\u7f6e
+
+verify_that_LyX_is_running_and_that_the_lyxpipe_is_valid=\u68c0\u67e5_LyX_\u662f\u5426\u5728\u8fd0\u884c\u4ee5\u53ca_lyx_\u7ba1\u9053\u662f\u5426\u53ef\u7528
+
+View=\u89c6\u56fe
+Vim_Server_Name=Vim_\u670d\u52a1\u5668\u540d
+
+Waiting_for_ArXiv...=\u7b49\u5f85_ArXiv...
+
+Warn_about_unresolved_duplicates_when_closing_inspection_window=\u5173\u95ed\u68c0\u89c6\u7a97\u53e3\u65f6\u8b66\u544a\u672a\u5904\u7406\u7684_BibTeX_\u952e\u91cd\u590d\u60c5\u51b5
+
+Warn_before_overwriting_existing_keys=\u8986\u76d6\u5df2\u5b58\u5728\u7684_BibTeX_\u952e\u4e4b\u524d\u53d1\u51fa\u8b66\u544a
+
+Warning=\u8b66\u544a
+Warning\:_could_not_complete_file_repair;_your_file_may_have_been_corrupted._Error_message=\u8b66\u544a:_\u65e0\u6cd5\u5b8c\u6210\u4fee\u590d\u64cd\u4f5c\uff1b\u60a8\u7684\u6587\u4ef6\u53ef\u80fd\u5df2\u635f\u574f\u3002\u9519\u8bef\u4fe1\u606f
+
+Warning_there_is_a_duplicate_key=\u8b66\u544a:_\u5df2\u5b58\u5728\u91cd\u590d\u7684_BibTeX_\u952e
+
+Warnings=\u8b66\u544a
+
+web_link=web_\u94fe\u63a5
+
+What_do_you_want_to_do?=\u60a8\u5e0c\u671b\u505a\u4ec0\u4e48?
+
+When_adding/removing_keywords,_separate_them_by=\u5f53\u589e\u52a0/\u79fb\u9664\u5173\u952e\u5b57\u65f6\uff0c\u4f7f\u7528\u5206\u9694\u7b26
+Will_write_XMP-metadata_to_the_PDFs_linked_from_selected_entries.=\u5c06\u5199\u5165_XMP_\u5143\u6570\u636e\u5230\u9009\u4e2d\u8bb0\u5f55\u94fe\u63a5\u7684_PDF_\u6587\u4ef6\u3002
+
+with=\u4ee5
+
+Word=\u5355\u8bcd
+Write_BibtexEntry_as_XMP-metadata_to_PDF.=\u5c06_Bibtex_\u8bb0\u5f55\u4f5c\u4e3a_XMP_\u6e90\u6570\u636e\u5199\u5165\u5230_PDF_\u4e2d\u3002
+
+Write_XMP=\u5199\u5165_XMP
+Write_XMP-metadata=\u5199\u5165_XMP_\u5143\u6570\u636e
+Write_XMP-metadata_for_all_PDFs_in_current_database?=\u5c06_XMP_\u5143\u6570\u636e\u5199\u5165\u5230\u5f53\u524d\u6570\u636e\u5e93\u4e2d\u6240\u6709_PDF_\u6587\u4ef6?
+Writing_XMP=\u6b63\u5728\u5199\u5165_XMP
+Writing_XMP_metadata...=\u6b63\u5728\u5199\u5165_XMP_\u5143\u6570\u636e...
+Writing_XMP_metadata_for_selected_entries...=\u6b63\u5728\u4e3a\u9009\u4e2d\u8bb0\u5f55\u5199\u5165_XMP_\u5143\u6570\u636e...
+Writing_XMP_to_'%0'...=\u6b63\u5728\u5199\u5165_XMP_\u5230_'%0'...
+
+Wrong_file_format=\u9519\u8bef\u7684\u6587\u4ef6\u683c\u5f0f
+
+Wrote_XMP-metadata=\u5199\u5165_XMP-\u5143\u6570\u636e
+Wrote_XMP_to_'%0'.=\u5199\u5165_XMP_\u5230_'%0'.
+
+XMP-annotated_PDF=XMP-annotated_PDF
+XMP_Export_Privacy_Settings=XMP_\u5bfc\u51fa\u9690\u79c1\u8bbe\u7f6e
+XMP_metadata=XMP_\u5143\u6570\u636e
+XMP_metadata_found_in_PDF\:_%0=PDF_\u4e2d\u7684_XMP_\u5143\u6570\u636e:_%0
+You_must_restart_JabRef_for_this_to_come_into_effect.=
+You_have_changed_the_language_setting.=
+You_have_changed_the_look_and_feel_setting.=
+
+You_have_cleared_this_field._Original_value=\u60a8\u6e05\u9664\u4e86\u8fd9\u4e2a\u57df\uff0c\u539f\u6765\u7684\u503c
+
+You_have_entered_an_invalid_search_'%0'.=\u60a8\u8f93\u5165\u4e86\u4e00\u4e2a\u975e\u6cd5\u7684\u67e5\u8be2_'%0'.
+
+You_must_choose_a_file_name_to_store_journal_abbreviations=\u60a8\u5fc5\u987b\u9009\u62e9\u4e00\u4e2a\u6587\u4ef6\u540d\u6765\u5b58\u50a8\u671f\u520a\u540d\u79f0\u7f29\u5199
+
+You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=\u4e3a\u4f7f\u70ed\u952e\u7ed1\u5b9a\u751f\u6548\uff0c\u60a8\u5fc5\u987b\u91cd\u542f_JabRef\u3002
+
+You_must_set_both_BibTeX_key_and_%0_directory=\u60a8\u5fc5\u987b\u8bbe\u7f6e_BibTeX_\u952e\u503c\u548c%0\u76ee\u5f55
+
+Your_new_key_bindings_have_been_stored.=\u60a8\u7684\u70ed\u952e\u7ed1\u5b9a\u5df2\u7ecf\u88ab\u5b58\u50a8\u3002
+
+
+The_following_fetchers_are_available\:=\u4e0b\u9762\u5217\u51fa\u7684\u662f\u53ef\u7528\u7684\u6293\u53d6\u5668:
+Could_not_find_fetcher_'%0'=\u65e0\u6cd5\u627e\u5230\u6293\u53d6\u5668_'%0'
+Running_Query_'%0'_with_fetcher_'%1'.=\u4f7f\u7528\u6293\u53d6\u5668'%1'\u6267\u884c\u8bf7\u6c42'%0'
+Please_wait!=\u8bf7\u7a0d\u5019\uff01
+Query_'%0'_with_fetcher_'%1'_did_not_return_any_results.=\u4f7f\u7528\u6293\u53d6\u5668'%1'\u8bf7\u6c42'%0'\u672a\u8fd4\u56de\u4efb\u4f55\u7ed3\u679c\u3002
+Open_SPIRES_entry=\u6253\u5f00_SPIRES_\u8bb0\u5f55
+Move/Rename_file=\u79fb\u52a8/\u91cd\u547d\u540d_\u6587\u4ef6
+File_moved=\u6587\u4ef6\u79fb\u52a8\u5b8c\u6210
+Move_file_failed=\u79fb\u52a8\u6587\u4ef6\u5931\u8d25
+Could_not_move_file=\u65e0\u6cd5\u79fb\u52a8\u6587\u4ef6
+Could_not_find_file_'%0'.=\u65e0\u6cd5\u627e\u5230\u6587\u4ef6_'%0'\u3002
+Move/rename_file=\u79fb\u52a8/\u91cd\u547d\u540d_\u6587\u4ef6
+Number_of_entries_successfully_imported=\u6210\u529f\u5bfc\u5165\u7684\u8bb0\u5f55\u6570
+Import_canceled_by_user=\u5bfc\u5165\u64cd\u4f5c\u88ab\u7528\u6237\u53d6\u6d88
+Progress\:_%0_of_%1=\u8fdb\u5ea6:_%0_of_%1
+Error_while_fetching_from_JSTOR=\u4ece_JSTOR_\u6293\u53d6\u53d1\u751f\u9519\u8bef
+
+Fetching_Medline_by_id...=\u4f9d\u636e_id_\u4ece_Medline_\u6293\u53d6...
+
+Fetching_Medline_by_term...=\u4f9d\u636e_term_\u4ece_Medline_\u6293\u53d6...
+Medline_import_canceled=Medline_\u5bfc\u5165\u88ab\u53d6\u6d88
+Please_enter_a_valid_number=\u8bf7\u8f93\u5165\u4e00\u4e2a\u5408\u6cd5\u7684\u6570\u5b57
+Please_enter_a_comma_separated_list_of_Medline_IDs_(numbers)_or_search_terms.=\u8bf7\u8f93\u5165\u4ee5\u9017\u53f7\u5206\u5272\u7684_Medline_ID_(\u6570\u5b57)_\u6216\u8005_term_\u5217\u8868\u3002
+An_Error_occurred_while_fetching_from_SPIRES_source_(%0)\:=\u4ece_SPIRES_\u6e90_(%0)_\u6293\u53d6\u65f6\u53d1\u751f\u4e86\u4e00\u4e2a\u9519\u8bef\:
+Error_while_fetching_from_Spires\:_=\u4ece_Spires_\u6293\u53d6\u53d1\u751f\u9519\u8bef\:_
+Connect_to_external_SQL_database=\u8fde\u63a5\u5230\u5916\u90e8_SQL_\u6570\u636e\u5e93
+Export_to_external_SQL_database=\u5bfc\u51fa\u5230\u5916\u90e8_SQL_\u6570\u636e\u5e93
+
+Show_results_in_dialog=\u5728\u5bf9\u8bdd\u6846\u4e2d\u663e\u793a\u7ed3\u679c
+Global_search=\u5168\u5c40\u67e5\u8be2
+Show_search_results_in_a_window=\u5728\u65b0\u7a97\u53e3\u4e2d\u663e\u793a\u67e5\u8be2\u7ed3\u679c
+Search_results=\u67e5\u8be2\u7ed3\u679c
+Move_file_to_file_directory?=\u79fb\u52a8\u6587\u4ef6\u5230\u6587\u4ef6\u76ee\u5f55?
+Rename_to_'%0'=\u91cd\u547d\u540d\u4e3a_'%0'
+Move_to_file_directory=\u79fb\u52a8\u5230\u6587\u4ef6\u76ee\u5f55
+You_have_changed_the_menu_and_label_font_size.=
+
+Database_is_protected._Cannot_save_until_external_changes_have_been_reviewed.=\u6570\u636e\u5e93\u53d7\u4fdd\u62a4\u4e2d\uff0c\u5728\u5916\u90e8\u4fee\u6539\u672a\u88ab\u590d\u67e5\u524d\u65e0\u6cd5\u6267\u884c\u4fdd\u5b58\u64cd\u4f5c\u3002
+Protected_database=\u53d7\u4fdd\u62a4\u7684\u6570\u636e\u5e93
+Refuse_to_save_the_database_before_external_changes_have_been_reviewed.=\u5728\u5916\u90e8\u4fee\u6539\u672a\u88ab\u590d\u67e5\u4e4b\u524d\u62d2\u7edd\u4fdd\u5b58\u6570\u636e\u5e93\u3002
+Database_protection=\u6570\u636e\u5e93\u4fdd\u62a4
+Unable_to_save_database=\u65e0\u6cd5\u4fdd\u5b58\u6570\u636e\u5e93
+
+BibTeX_key_generator=BibTeX_\u952e\u751f\u6210\u5668
+Unable_to_open_link.=\u65e0\u6cd5\u6253\u5f00\u94fe\u63a5\u3002
+Search_JSTOR=\u641c\u7d22_JSTOR
+Attempting_SQL_import...=\u5c1d\u8bd5_SQL_\u5bfc\u5165...
+BibO_RDF=BibO_RDF
+HTML_parser=HTML_\u89e3\u6790
+
+Move_the_keyboard_focus_to_the_entry_table=\u5c06\u952e\u76d8\u7126\u70b9\u79fb\u52a8\u5230\u8bb0\u5f55\u5217\u8868
+MIME_type=MIME_\u7c7b\u578b
+
+This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=\u8be5\u9009\u9879\u4f7f\u5f97\u6253\u5f00\u6216\u8005\u5bfc\u5165\u65b0\u6587\u4ef6\u7684\u64cd\u4f5c\u5728\u5df2\u7ecf\u8fd0\u884c\u7684_JabRef_\u4e2d\u8fdb\u884c\uff0c\u800c\u4e0d\ [...]
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=\u6ce8\u610f\uff1a\u8fd9\u4e9b\u8bbe\u7f6e\u4e3b\u8981\u5e94\u7528\u4e8e\u65e7\u5f0f\u7684_<b>pdf</b>_\u548c_<b>ps</b>_\u57df\uff0c\u8fd9\u610f\u5473\u7740\u5982\u679c\u60a8\u4e0d\u77e5\u9053\u5b83\u662f\u4ec0\u4e48\u610f\u601d\uff0c<BR>\u60a8\u53ef\u4ee5\u5ffd\u89c6\u8be5\u9009\u9879\u3002\u5bf9\u5927\u90e8\u5206\u75 [...]
+Legacy_file_fields=\u65e7\u5f0f\u6587\u4ef6\u57df
+
+This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=\u8fd9\u5c06\u4f7f_JabRef_\u4f9d\u636e%0\u6269\u5c55\u540d\u67e5\u627e\u6587\u4ef6\u662f\u5426\u5b58\u5728\uff0c\u5982\u679c\u627e\u4e0d\u5230\uff0cJabRef_\u5c06\u63d0\u4f9b\u7ed9\u60a8\u9009\u9879\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002
+Run_Fetcher,_e.g._"--fetch\=Medline\:cancer"=\u8fd0\u884c\u6293\u53d6\u5668\uff0c\u4f8b\u5982_"--fetch\=Medline\:cancer"
+
+The_ACM_Digital_Library=ACM_\u6570\u5b57\u56fe\u4e66\u9986
+Reset=\u91cd\u7f6e
+
+Use_IEEE_LaTeX_abbreviations=\u4f7f\u7528_IEEE_LaTeX_\u7f29\u5199
+The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
+Search_ACM_Portal=\u641c\u7d22_ACM_Portal
+Connection_to_ACM_Portal_failed=\u8fde\u63a5_ACM_Portal_\u5931\u8d25
+
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=\u6253\u5f00\u6587\u4ef6\u65f6\uff0c\u5982\u679c\u6587\u4ef6\u94fe\u63a5\u672a\u5b9a\u4e49\uff0c\u5219\u81ea\u52a8\u5bfb\u627e\u5339\u914d\u7684\u6587\u4ef6\u3002
+Settings_for_%0=%0_\u7684\u8bbe\u7f6e
+Insert_selected_citations_into_Vim=\u63a8\u9001\u9009\u4e2d\u7684_citation_\u5230_Vim
+RIS=RIS
+
+Assign_exclusively_to_group=\u5206\u914d\u5230\u5355\u4e00\u5206\u7ec4
+
+Bad_Request_'%0'.=\u9519\u8bef\u7684\u8bf7\u6c42_'%0'.
+
+Mark_entries_imported_into_an_existing_database=\u6807\u8bb0\u5bfc\u5165\u5230\u5df2\u6709\u6570\u636e\u5e93\u7684\u65b0\u8bb0\u5f55
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=\u5bfc\u5165\u65b0\u8bb0\u5f55\u5230\u6570\u636e\u5e93\u4e4b\u524d\u79fb\u9664\u6240\u6709\u65b0\u8bb0\u5f55\u7684\u6807\u8bb0
+
+Forward=\u524d\u8fdb
+Back=\u540e\u9000
+Sort_the_following_fields_as_numeric_fields=\u4ee5\u6570\u503c\u65b9\u5f0f\u6392\u5e8f\u4e0b\u5217\u57df
+Line_%0\:_Found_corrupted_BibTeX-key.=\u7b2c_%0_\u884c\:_\u53d1\u73b0\u9519\u8bef\u7684_BibTeX_\u952e\u3002
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=\u7b2c_%0_\u884c\:_\u53d1\u73b0\u9519\u8bef\u7684_BibTeX_\u952e(\u5305\u542b\u7a7a\u683c)\u3002
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=\u7b2c_%0_\u884c\:_\u53d1\u73b0\u9519\u8bef\u7684_BibTeX_\u952e(\u9017\u53f7\u4e22\u5931)\u3002
+Finished_downloading_full_text_document=\u5b8c\u6210\u5168\u6587\u4e0b\u8f7d
+Unable_to_find_full_text_document_in_the_linked_web_page.=\u5728\u7ed9\u5b9a\u7684\u94fe\u63a5\u9875\u9762\u4e2d\u672a\u627e\u5230\u4e0b\u8f7d\u5168\u6587\u94fe\u63a5\u3002
+Connection_error_when_trying_to_find_full_text_document.=\u5c1d\u8bd5\u4e0b\u8f7d\u5168\u6587\u65f6\u7f51\u7edc\u8fde\u63a5\u5931\u8d25\u3002
+This_entry_provides_no_URL_or_DOI_links.=\u6b64\u8bb0\u5f55\u672a\u63d0\u4f9b_URL_\u6216_DOI_\u94fe\u63a5\u3002
+Full_text_article_download_failed=\u4e0b\u8f7d\u5168\u6587\u5931\u8d25
+Update_to_current_column_order=\u4f7f\u7528\u5f53\u524d\u89c6\u56fe\u4e2d\u7684\u5217\u987a\u5e8f
+
+Rename_field=\u91cd\u547d\u540d\u57df
+Set/clear/rename_fields=\u8bbe\u7f6e/\u6e05\u9664/\u91cd\u547d\u540d\u57df
+Rename_field_to\:=\u91cd\u547d\u540d\u8be5\u57df\u4e3a_\:
+Move_contents_of_a_field_into_a_field_with_a_different_name=\u5c06\u4e00\u4e2a\u57df\u4e2d\u7684\u5185\u5bb9\u79fb\u52a8\u5230\u53e6\u4e00\u4e2a\u57df\u4e2d
+You_can_only_rename_one_field_at_a_time=\u4e00\u6b21\u53ea\u80fd\u91cd\u547d\u540d\u4e00\u4e2a\u57df
+
+Remove_all_broken_links=\u79fb\u9664\u6240\u6709\u5931\u6548\u94fe\u63a5
+
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=\u65e0\u6cd5\u4f7f\u7528\u7aef\u53e3_%0_\u8fdb\u884c\u8fdc\u7a0b\u64cd\u4f5c;\u8be5\u7aef\u53e3\u53ef\u80fd\u88ab\u5176\u5b83\u5e94\u7528\u7a0b\u5e8f\u5360\u7528\uff0c\u8bf7\u4f7f\u7528\u5176\u5b83\u7aef\u53e3\u3002
+Plugin_installer=\u63d2\u4ef6\u5b89\u88c5\u5de5\u5177
+Unable_to_create_plugin_directory=\u65e0\u6cd5\u521b\u5efa\u63d2\u4ef6\u76ee\u5f55
+Unable_to_copy_file=\u65e0\u6cd5\u62f7\u8d1d\u6587\u4ef6
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=\u63d2\u4ef6\u5b89\u88c5\u6210\u529f\uff0c\u60a8\u5fc5\u987b\u91cd\u542f_JabRef_\u4ee5\u8f7d\u5165\u65b0\u63d2\u4ef6\u3002
+Unable_to_create_user_plugin_directory=\u65e0\u6cd5\u521b\u5efa\u7528\u6237\u63d2\u4ef6\u76ee\u5f55
+Plugin_installation_failed.=\u63d2\u4ef6\u5b89\u88c5\u5931\u8d25\u3002
+The_same_version_of_this_plugin_is_already_installed.=\u8be5\u63d2\u4ef6\u7684\u540c\u4e00\u7248\u672c\u5df2\u7ecf\u5b89\u88c5\u3002
+A_newer_version_of_this_plugin_is_already_installed.=\u8be5\u63d2\u4ef6\u7684\u66f4\u65b0\u7248\u672c\u5df2\u7ecf\u5b89\u88c5\u3002
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=\u8be5\u63d2\u4ef6\u7684\u4e00\u4e2a\u6216\u591a\u4e2a\u65e7\u7248\u672c\u5df2\u7ecf\u5b89\u88c5\uff0c\u5220\u9664\u65e7\u7248\u672c\uff1f
+Old_versions_deleted_successfully.=\u6210\u529f\u5220\u9664\u65e7\u7248\u672c\u3002
+Install_plugin=\u5b89\u88c5\u63d2\u4ef6
+Download_plugin=\u4e0b\u8f7d\u63d2\u4ef6
+Plugin_manager=\u63d2\u4ef6\u7ba1\u7406\u5de5\u5177
+Delete_the_%0_selected_plugins?=\u5220\u9664\u9009\u4e2d\u7684_%0_\u4e2a\u63d2\u4ef6\uff1f
+Delete_plugins=\u5220\u9664\u63d2\u4ef6
+Delete_the_selected_plugin?=\u5220\u9664\u9009\u4e2d\u7684\u63d2\u4ef6\uff1f
+Delete_plugin=\u5220\u9664\u63d2\u4ef6
+Enter_download_URL=\u8f93\u5165\u4e0b\u8f7d_URL
+Plugin_name=\u63d2\u4ef6\u540d
+Version=\u7248\u672c
+Unknown=\u672a\u77e5
+Not_loaded=\u6ca1\u6709\u88ab\u52a0\u8f7d
+Loaded=\u5df2\u52a0\u8f7d
+Could_not_determine_version_of_=\u65e0\u6cd5\u53d6\u5f97\u7248\u672c\u4fe1\u606f\u2014\u2014
+Install_anyway?=\u4ecd\u7136\u7ee7\u7eed\u5b89\u88c5\uff1f
+
+Looking_for_full_text_document...=\u67e5\u627e\u6587\u7ae0\u5168\u6587\u6587\u6863
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=\u6839\u636e_DOI_\u6216\u8005_URL_\u94fe\u63a5\uff0c\u5c1d\u8bd5\u67e5\u627e_PDF_\u5168\u6587\u6587\u6863\u3002
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=\u65e0\u6cd5\u627e\u5230\u6587\u7ae0\u5168\u6587\uff0c\u6ca1\u6709\u5b9a\u4e49\u7f51\u7ad9_\u201c%0\u201d_\u4e0a\u7684\u67e5\u627e\u7b97\u6cd5\u3002
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=\u627e\u5230_pdf_\u8fde\u63a5\uff0c\u4f46\u6536\u5230\u7684_MIME_\u7c7b\u578b\u9519\u8bef\uff0c\u8fd9\u53ef\u80fd\u8bf4\u660e\u60a8\u6ca1\u6709\u8bbf\u95ee\u8be5\u6587\u7ae0\u5168\u6587\u7684\u6743\u9650\u3002
+
+Autosave=\u81ea\u52a8\u4fdd\u5b58
+Prompt_before_recovering_a_database_from_an_autosave_file=\u7528\u81ea\u52a8\u4fdd\u5b58\u7684\u6587\u4ef6\u6062\u590d\u6570\u636e\u5e93\u65f6\u8fdb\u884c\u63d0\u793a
+Autosave_interval_(minutes)=\u81ea\u52a8\u4fdd\u5b58\u95f4\u9694_(\u5206\u949f)
+Do_you_want_to_recover_the_database_from_the_autosave_file?=\u60a8\u5e0c\u671b\u7528\u81ea\u52a8\u4fdd\u5b58\u7684\u6587\u4ef6\u6062\u590d\u6570\u636e\u5e93\u5417\uff1f
+Recover_from_autosave=\u7528\u81ea\u52a8\u4fdd\u5b58\u7684\u6587\u4ef6\u6062\u590d
+%0_warnings=%0_\u4e2a\u8b66\u544a
+
+Save_in_current_table_sort_order=\u6309\u7167\u5f53\u524d\u8868\u683c\u6392\u5e8f\u4fdd\u5b58
+Export_in_current_table_sort_order=\u6309\u7167\u5f53\u524d\u8868\u683c\u6392\u5e8f\u5bfc\u51fa
+Export_ordered_by_author/editor/year=\u6309\u7167\u201c\u4f5c\u8005/\u7f16\u8005/\u5e74\u4efd\u201d\u987a\u5e8f\u5bfc\u51fa
+Export_entries_in_their_original_order=\u6309\u7167\u539f\u59cb\u987a\u5e8f\u5bfc\u51fa\u8bb0\u5f55
+Error_opening_file_'%0'.=\u6253\u5f00\u6587\u4ef6_"%0"_\u65f6\u53d1\u751f\u9519\u8bef
+Autosave_of_file_'%0'=\u6587\u4ef6_"%0"_\u7684\u81ea\u52a8\u4fdd\u5b58\u6587\u4ef6
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=\u6253\u5f00_'%0'_\u7684\u81ea\u52a8\u4fdd\u5b58\u6587\u4ef6\u65f6\u53d1\u751f\u9519\u8bef\uff0c\u5c1d\u8bd5\u52a0\u8f7d_"%0"\u3002
+
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=\u5728\u60a8\u7684\u7528\u6237\u63d2\u4ef6\u76ee\u5f55\u4e2d\u5b89\u88c5\u7684\u63d2\u4ef6_(%0)
+Plugins_installed_in_other_locations\:=\u5728\u5176\u5b83\u4f4d\u7f6e\u5b89\u88c5\u7684\u63d2\u4ef6\uff1a
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=\u63d2\u4ef6\u5c06\u4f1a\u5728_JabRef_\u4e0b\u6b21\u542f\u52a8\u65f6\u5220\u9664\u3002
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=\u63d2\u4ef6\u5c06\u4f1a\u5728_JabRef_\u4e0b\u6b21\u542f\u52a8\u65f6\u5220\u9664\u3002
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=\u65e7\u7248\u672c\u63d2\u4ef6\u5c06\u4f1a\u5728_JabRef_\u4e0b\u6b21\u542f\u52a8\u65f6\u5220\u9664\u3002
+
+Formatter_not_found\:_%0=\u65e0\u6cd5\u627e\u5230\u7684\u683c\u5f0f\u5316\u5668\uff1a_%0
+The_following_formatters_could_not_be_found=\u4e0b\u5217\u683c\u5f0f\u5316\u5668\u65e0\u6cd5\u627e\u5230
+
+Clear_inputarea=\u6e05\u7a7a\u8f93\u5165\u6846
+Automatically_set_file_links_for_this_entry=\u81ea\u52a8\u4e3a\u6b64\u8bb0\u5f55\u8bbe\u7f6e\u6587\u4ef6\u94fe\u63a5
+Could_not_save,_file_locked_by_another_JabRef_instance.=\u65e0\u6cd5\u4fdd\u5b58\uff0c\u6587\u4ef6\u88ab\u53e6\u4e00\u4e2a_JabRef_\u5b9e\u4f8b\u9501\u5b9a\u3002
+File_is_locked_by_another_JabRef_instance.=\u6587\u4ef6\u88ab\u53e6\u4e00\u4e2a_JabRef_\u5b9e\u4f8b\u9501\u5b9a\u3002
+Do_you_want_to_override_the_file_lock?=\u60a8\u662f\u5426\u5e0c\u671b\u8986\u76d6\u6587\u4ef6\u9501\uff1f
+File_locked=\u6587\u4ef6\u88ab\u9501\u5b9a
+Current_tmp_value=\u5f53\u524d\u4e34\u65f6\u503c
+Metadata_change=\u5143\u6570\u636e\u6539\u53d8
+Changes_have_been_made_to_the_following_metadata_elements=\u4e0b\u5217\u5143\u6570\u636e\u5143\u7d20\u88ab\u6539\u53d8
+
+Generate_groups_for_author_last_names=\u7528\u4f5c\u8005\u7684\u59d3_(last_name)_\u521b\u5efa\u5206\u7ec4
+Generate_groups_for_editor_last_names=\u7528\u7f16\u8005\u7684\u59d3_(last_name)_\u521b\u5efa\u5206\u7ec4
+Generate_groups_from_keywords_in_a_BibTeX_field=\u7528_BibTeX_\u57df\u4e2d\u7684\u5173\u952e\u8bcd\u521b\u5efa\u5206\u7ec4
+Enforce_legal_characters_in_BibTeX_keys=\u5f3a\u5236\u5728_BibTeX_\u952e\u503c\u4e2d\u4f7f\u7528\u5408\u6cd5\u5b57\u7b26
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=#_\u5b57\u7b26\u4e0d\u5141\u8bb8\u51fa\u73b0\u5728_BibTeX_\u5b57\u7b26\u4e32\u4e2d\uff0c\u9664\u975e\u7528_"\\#"_\u8fdb\u884c\u8f6c\u4e49\u3002
+Before_saving,_please_edit_any_strings_containing_the_#_character.=\u5728\u4fdd\u5b58\u4e4b\u524d\uff0c\u8bf7\u4fee\u6539\u4efb\u4f55\u5305\u542b_#_\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\u3002
+
+Save_without_backup?=\u4fdd\u5b58\u4f46\u4e0d\u5907\u4efd\uff1f
+Unable_to_create_backup=\u65e0\u6cd5\u521b\u5efa\u5907\u4efd
+
+File_directory_is_not_set_or_does_not_exist.=\u6587\u4ef6\u76ee\u5f55\u6ca1\u6709\u8bbe\u7f6e\u6216\u8005\u4e0d\u5b58\u5728\u3002
+Move_file_to_file_directory.=\u79fb\u52a8\u6587\u4ef6\u5230\u6587\u4ef6\u76ee\u5f55\u3002
+Rename_file_to=\u5c06\u6587\u4ef6\u66f4\u540d\u4e3a
+<b>All_Entries</b>_(this_group_cannot_be_edited_or_removed)=<b>\u6240\u6709\u8bb0\u5f55</b>\uff08\u6b64\u5206\u7ec4\u65e0\u6cd5\u88ab\u7f16\u8f91\u6216\u8005\u5220\u9664\uff09
+static_group=\u9759\u6001\u5206\u7ec4
+dynamic_group=\u52a8\u6001\u5206\u7ec4
+refines_supergroup=refines_supergroup_(\u7ffb\u8bd1\u65f6\u6ca1\u627e\u5230\u51fa\u5904)
+includes_subgroups=\u5305\u542b\u5b50\u5206\u7ec4
+contains=\u5305\u542b
+search_expression=\u67e5\u8be2\u8868\u8fbe\u5f0f:
+
+Disable_file_renaming_in_non-native_file_dialog=\u7981\u7528\u975e\u672c\u5730\u6587\u4ef6\u5bf9\u8bdd\u6846\u4e2d\u7684\u6587\u4ef6\u91cd\u547d\u540d
+File_dialog=\u6587\u4ef6\u5bf9\u8bdd\u6846
+No_entries_found._It_looks_like_you_do_not_have_access_to_search_JStor.=\u6ca1\u6709\u627e\u5230\u8bb0\u5f55\uff0c\u770b\u8d77\u6765\u60a8\u6ca1\u6709_JStor_\u641c\u7d22\u529f\u80fd\u7684\u8bbf\u95ee\u6743\u9650\u3002
+
+Search_ScienceDirect=\u641c\u7d22_ScienceDirect
+Error_while_fetching_from_ScienceDirect=\u4ece_ScienceDirect_\u6293\u53d6\u65f6\u51fa\u9519
+
+Error_initializing_custom_export_format_from_string_'%0'=\u4ece\u5b57\u4e32_"%0"_\u521d\u59cb\u5316\u81ea\u5b9a\u4e49\u5bfc\u51fa\u683c\u5f0f\u5931\u8d25
+
+BibLaTeX_mode=BibLaTeX_\u6a21\u5f0f
+Optional_fields_2=\u53ef\u9009\u57df_2
+Please_wait=\u8bf7\u7a0d\u5019
+Waiting_for_save_operation_to_finish=\u6b63\u5728\u7b49\u5f85\u4fdd\u5b58\u64cd\u4f5c\u5b8c\u6210
+Resolving_duplicate_BibTeX_keys...=\u5904\u7406\u91cd\u590d\u7684_BibTeX
+Finished_resolving_duplicate_BibTeX_keys._%0_entries_modified.=\u5b8c\u6210\u5904\u7406\u91cd\u590d_BibTeX_\u952e\u503c\uff0c\u4fee\u6539\u4e86_%0_\u6761\u8bb0\u5f55\u3002
+This_database_contains_one_or_more_duplicated_BibTeX_keys.=\u5f53\u524d\u6570\u636e\u5e93\u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a\u91cd\u590d\u7684_BibTeX_\u952e\u503c\u3002
+Do_you_want_to_resolve_duplicate_keys_now?=\u60a8\u5e0c\u671b\u9a6c\u4e0a\u5904\u7406\u91cd\u590d\u7684\u952e\u503c\u5417\uff1f
+
+Find_and_remove_duplicate_BibTeX_keys=\u67e5\u627e\u5e76\u79fb\u9664\u91cd\u590d\u7684_BibTeX_\u952e\u503c
+Expected_syntax_for_--fetch\='<name_of_fetcher>\:<query>'=\u671f\u671b\u7684\u8bed\u6cd5_--fetch='<name_of_fetcher>:<query>'
+Duplicate_BibTeX_key=\u91cd\u590d\u7684_BibTeX_\u952e\u503c
+Duplicate_key=\u91cd\u590d\u7684\u952e\u503c
+Generate_key=\u751f\u6210\u952e\u503c
+Import_marking_color=\u6807\u8bb0\u5bfc\u5165\u8bb0\u5f55\u7684\u989c\u8272
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded._It_will_be_very_slow,_in_order_to_make_ACM_happy.=\u627e\u5230_%0_\u6761\u8bb0\u5f55\uff0c\u4e3a\u51cf\u8f7b\u670d\u52a1\u5668\u8d1f\u8f7d\uff0c\u53ea\u4f1a\u4e0b\u8f7d\u5176\u4e2d\u7684_%1_\u6761\u3002\u4e3a\u4e86\u4e0d\u60f9_ACM_\u751f\u6c14\uff0c\u4e0b\u8f7d\u901f\u5ea6\u4f1a\u975e\u5e38\u6162_^\_^
+BibTeX_importer=BibTeX_\u5bfc\u5165\u5668
+Always_add_letter_(a,_b,_...)_to_generated_keys=\u5728\u751f\u6210\u952e\u503c\u65f6\u603b\u662f\u6dfb\u52a0\u5b57\u6bcd_(a,_b,_...)
+
+Ensure_unique_keys_using_letters_(a,_b,_...)=\u4f7f\u7528\u5b57\u6bcd_(a,_b,_...)_\u4fdd\u8bc1\u952e\u503c\u552f\u4e00
+Ensure_unique_keys_using_letters_(b,_c,_...)=\u4f7f\u7528\u5b57\u6bcd_(b,_c,_...)_\u4fdd\u8bc1\u952e\u503c\u552f\u4e00
+Entry_editor_active_background_color=\u8bb0\u5f55\u7f16\u8f91\u5668\u6d3b\u52a8\u7684\u80cc\u666f\u989c\u8272
+Entry_editor_background_color=\u8bb0\u5f55\u7f16\u8f91\u5668\u80cc\u666f\u989c\u8272
+Entry_editor_font_color=\u8bb0\u5f55\u7f16\u8f91\u5668\u5b57\u4f53\u989c\u8272
+Entry_editor_invalid_field_color=\u8bb0\u5f55\u7f16\u8f91\u5668\u9519\u8bef\u57df\u989c\u8272
+
+Table_and_entry_editor_colors=\u8868\u683c\u548c\u8bb0\u5f55\u7f16\u8f91\u5668\u989c\u8272
+
+An_autosave_file_was_found_for_this_database._This_could_indicate_=\u5f53\u524d\u6570\u636e\u5e93\u53d1\u73b0\u4e00\u4e2a\u81ea\u52a8\u4fdd\u5b58\u6587\u4ef6\uff0c\u8fd9\u610f\u5473\u7740
+that_JabRef_didn't_shut_down_cleanly_last_time_the_file_was_used.=JabRef_\u4e0a\u6b21\u4f7f\u7528\u6b64\u6587\u4ef6\u65f6\u6ca1\u6709\u6b63\u5e38\u5173\u95ed\u3002
+General_file_directory=\u751f\u6210\u6587\u4ef6\u76ee\u5f55
+User-specific_file_directory=\u7528\u6237\u6307\u5b9a\u7684\u6587\u4ef6\u76ee\u5f55
+Error_setting_look_and_feel=\u9519\u8bef\u8bbe\u7f6e\u89c6\u89c9\u6548\u679c\u7c7b_(look_and_feel)
+Search_failed\:_illegal_search_expression=\u641c\u7d22\u5931\u8d25:_\u4e0d\u5408\u6cd5\u7684\u641c\u7d22\u8868\u8fbe\u5f0f
+Show_ArXiv_column=\u663e\u793a_ArXiv_\u5217
+<HTML>Unpack_the_zip_file_containing_import/export_filters_for_Endnote,<BR>for_optimal_interoperability_with_JabRef</HTML>=
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=
+
+You_must_enter_an_integer_value_in_the_interval_1025-65535_in_the_text_field_for=\u8bf7\u8f93\u5165_1025-65535_\u4e4b\u95f4\u7684\u6574\u6570\u503c\u3002\u8bbe\u7f6e\u9879\uff1a
+Automatically_open_browse_dialog_when_creating_new_file_link=
+Import_Metadata_from\:=
+Choose_the_source_for_the_metadata_import=
+Create_entry_based_on_XMP_data=
+Create_entry_based_on_data_fetched_from=
+Create_blank_entry_linking_the_PDF=
+Only_attach_PDF=
+Mr._dLib_Metadata_Entries_Associated_With\:=
+Mr._dLib_Metadata_Entries_Associated_With_PDF_File=
+Title=
+Author(s)=
+Published_Year=
+No_metadata_found.=
+Mr._dLib_web_service_is_temporarily_unavailable.=
+Mr._dLib_web_service_is_temporarily_down._Please_try_again_later.=
+You_are_not_connected_to_the_Internet._To_access_Mr._dLib_web_service_an_internet_connection_is_needed.=
+No_Internet_Connection.=
+This_JabRef_version_is_trying_to_access_an_old_version_of_Mr._dLib's_webservice_that_is_not_working_any_more.\nPlease_visit_http\://jabref.sourceforge.net_or_http\://www.mr-dlib.org_for_more_information_and_updates.=
+Web_Service_Version_Outdated=
+The_Mr._dLib_web_service_version_you_trying_to_access_is_outdated.=
+Update_empty_fields_with_data_fetched_from=
+Create_New_Entry=
+Update_Existing_Entry=
+Mr._dLib=
+More_information=
+Fetching_Metadata...=
+Metadata=
+Autocomplete_names_in_'Firstname_Lastname'_format_only=
+Autocomplete_names_in_'Lastname,_Firstname'_format_only=
+Autocomplete_names_in_both_formats=
+Marking_color_%0=\u6807\u8bb0\u989c\u8272_%0
+The_name_'comment'_can_not_be_used_as_an_entry_type_name.=
+You_must_enter_an_integer_value_in_the_text_field_for=
+File_directory=
+Send_as_email=
+References=
+Sending_of_emails=
+Subject_for_sending_an_email_with_references=
+Automatically_open_folders_of_attached_files=
+Create_entry_based_on_content=
+Store_choice_as_default=
+Do_not_show_this_box_again_for_this_import=
+Always_use_this_PDF_import_style_(and_do_not_ask_for_each_import)=
+Error_creating_email=
+Could_not_open_directory=
+Entries_added_to_an_email=
+exportFormat=
+Output_file_missing=
+No_search_matches.=
+The_output_option_depends_on_a_valid_input_option.=
+Default_import_style_for_drag&drop_of_PDFs=
+Default_PDF_file_link_action=
+File_name_format_pattern=
+PostgreSQL_database=
+DIN_1505=
+Wrong_Format=
+Path_to_gnuclient_or_emacsclient=
+Additional_parameters=
+Encrypted_documents_are_not_supported=
+Cite_selected_entries=
+Cite_selected_entries_with_in-text_citation=
+Cite_special=
+Extra_information_(e.g._page_number)=
+Manage_citations=
+Problem_modifying_citation=
+Citation=
+Context=
+Extra_information=
+Could_not_resolve_BibTeX_entry_for_citation_marker_'%0'.=
+Styles=
+Select_style=
+This_is_the_list_of_available_styles._Select_the_one_you_want_to_use.=
+Journals=
+Cite=
+Cite_in-text=
+Insert_empty_citation=
+Merge_citations=
+Manual_connect=
+Select_Writer_document=
+Sync_OO_bibliography=
+OpenOffice=
+Select_which_open_Writer_document_to_work_on=
+Connected_to_document=
+Insert_a_citation_without_text_(the_entry_will_appear_in_the_reference_list)=
+Cite_selected_entries_with_extra_information=
+Ensure_that_the_bibliography_is_up-to-date=
+Your_OpenOffice_document_references_the_BibTeX_key_'%0',_which_could_not_be_found_in_your_current_database.=
+Unable_to_synchronize_bibliography=
+Combine_pairs_of_citations_that_are_separated_by_spaces_only=
+Autodetection_failed=
+Connecting=
+Please_wait...=
+Unable_to_connect=
+Set_connection_parameters=
+Path_to_OpenOffice_directory=
+Path_to_OpenOffice_executable=
+Path_to_OpenOffice_library_dir=
+Autodetect=
+Connection_lost=
+The_paragraph_format_is_controlled_by_the_property_'ReferenceParagraphFormat'_or_'ReferenceHeaderParagraphFormat'_in_the_style_file.=
+The_character_format_is_controlled_by_the_citation_property_'CitationCharacterFormat'_in_the_style_file.=
+Automatically_sync_bibliography_when_inserting_citations=
+Look_up_BibTeX_entries_in_the_active_tab_only=
+Look_up_BibTeX_entries_in_all_open_databases=
+Use_in-parenthesis_citation=
+Use_in-text_citation=
+Autodetecting_paths...=
+Unable_to_autodetect_OpenOffice_installation._Please_choose_the_installation_directory_manually.=
+Could_not_find_OpenOffice_installation=
+Directories=
+Found_more_than_one_OpenOffice_executable._Please_choose_which_one_to_connect_to\:=
+Choose_OpenOffice_executable=
+Select_document=
+Edit_Group_Membership=
+PostgreSQL=
+Highlight_Words=
+JSTOR_import_cancelled=
+HTML_list=
+Click_group_to_toggle_membership_of_selected_entries=
+Use_EMACS_23_insertion_string=
+Normalize_to_BibTeX_name_format=
+If_possible,_normalize_this_list_of_names_to_conform_to_standard_BibTeX_name_formatting=
+Could_not_open_%0=
+Unknown_import_format=
+Open_INSPIRE_entry=
+An_Error_occurred_while_fetching_from_INSPIRE_source_(%0)\:=
+Error_while_fetching_from_Inspire\:_=
+Web_search=
+Autocomplete_names=
+You_must_select_either_a_valid_style_file,_or_use_the_default_style.=
+Default_style=
+Choose_style_file_directly=
+Choose_from_a_directory=
+No_directory_defined_for_%0-files=
+Allow_file_links_relative_to_each_bib_file's_location=
+Style_selection=
+The_panel_below_shows_the_definition_of_the_default_style.=
+If_you_want_to_use_it_as_a_template_for_a_new_style,_you_can_copy_the_contents_into_a_new_.jstyle_file=
+
+Default_style_(author-year_citations)=
+Default_style_(numerical_citations)=
+No_valid_style_file_defined=
+Choose_pattern=
+Use_the_bib_file_location_as_primary_file_directory=
+Could_not_run_the_gnuclient/emacsclient_program._Make_sure_you_have_the_emacsclient/gnuclient_program_installed_and_available_in_the_PATH.=
+Built-in_journal_list=
+OpenOffice/LibreOffice_connection=
+You_can_add_additional_journal_names_by_setting_up_a_personal_journal_list,<br>as_well_as_linking_to_external_journal_lists.=
+JabRef_includes_a_built-in_list_of_journal_abbreviations.=
+You_must_select_either_a_valid_style_file,_or_use_one_of_the_default_styles.=
+You_must_select_either_a_valid_style_file,_or_use_a_default_style.=
+
+Show=
+This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.<br>After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.=
+Java_Bouncy_Castle_library_not_found._Please_download_and_install_it._For_more_information_see_http\://www.bouncycastle.org/.=
+
+This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.=
+You_need_to_select_one_of_your_open_databases_from_which_to_choose_entries,_as_well_as_the_AUX_file_produced_by_LaTeX_when_compiling_your_document.=
+First_select_entries_to_clean_up.=
+Cleanup_entry=
+Autogenerate_PDF_Names=
+Auto-generating_PDF-Names_does_not_support_undo._Continue?=
+File_rename_failed_for=
+You_have_toggled_the_BibLaTeX_mode.=
+Use_full_firstname_whenever_possible=
+Use_abbreviated_firstname_whenever_possible=
+Use_abbreviated_and_full_firstname=
+Autocompletion_options=
+Autocomplete_after_following_number_of_characters=
+Name_format_used_for_autocompletion=
+Treatment_of_first_names=
+No_icon_found_for_%0=
+Cleanup_entries=
+Automatically_assign_new_entry_to_selected_groups=
+Move_DOIs_from_note_and_URL_field_to_DOI_field_and_remove_http_prefix=
+Format_content_of_month_field_to_#mon#=
+Ensure_that_page_ranges_are_of_the_form_num1--num2=
+Make_paths_of_linked_files_relative_(if_possible)=
+Rename_PDFs_to_given_file_name_format_pattern=
+Rename_only_PDFs_having_a_relative_path=
+What_would_you_like_to_clean_up?=
+Doing_a_cleanup_for_%0_entries...=
+No_entry_needed_a_clean_up=
+One_entry_needed_a_clean_up=
+%0_entries_needed_a_clean_up=
+Imported_=
+Error_importing_from_database=
+Minimize_to_system_tray=
+
+Incomplete_search_results=
+%0_entries_were_found,_but_only_%1_of_these_could_be_resolved.=
+
+Error_downloading_file_'%0'=
+Download_failed=
+
+%0_databases_will_be_imported=
+Importing_cancelled=
+There_are_no_available_databases_to_be_imported=
+Import_from_SQL_database=
+Imported_%0_databases_successfully=
+<_CREATE_NEW_DATABASE_>=
+Remove_Selected=
+SQL_Database_Exporter=
+Select_target_SQL_database\:=
+SQL_Database_Importer=
+Please_select_which_JabRef_databases_do_you_want_to_import\:=
+Group_tree_could_not_be_parsed._If_you_save_the_BibTeX_database,_all_groups_will_be_lost.=
+Attach_file=
+
+Setting_all_preferences_to_default_values.=
+Resetting_preference_key_'%0'=
+Unknown_preference_key_'%0'=
+Unable_to_clear_preferences.=
+
+Reset_preferences_(key1,key2,..._or_'all')=
+Find_unlinked_files=
+Select_All=
+Unselect_All=
+Expand_All=
+Collapse_All=
+Select_Directory=
+Choose_Directory=
+Use_the_selected_directory_to_start_with_the_search.=
+Browse...=
+Opens_the_file_browser.=
+Scan_directory=
+Searches_the_selected_directory_for_unlinked_files.=
+Starts_the_import_of_bibtex_entries.=
+Leave_this_dialog.=
+Create_directory_based_keywords=
+Creates_keywords_in_created_entrys_with_directory_pathnames=
+Select_a_directory_where_the_search_shall_start.=
+Select_file_type\:=
+These_files_are_not_linked_in_the_active_database.=
+Entry_type_to_be_created\:=
+Searching_file_system...=
+Importing_into_Database...=
+Select_directory=
+Select_files=
+Bibtex_entry_creation=
+<No_selection>=
+Push_selection_to_TeXstudio=
+Path_to_TeXstudio=
+Program_'%0'_not_found=
+Pushed_citations_to_TeXstudio=
+Unable_to_connect_to_freecite_online_service.=
+Parse_with_FreeCite=
+Insert_selected_citations_into_TeXstudio=
+The_current_BibTeX_key_will_be_overwritten._Continue?=
+Overwrite_key=
+Not_overwriting_existing_key._To_change_this_setting,_open_Options_->_Prefererences_->_BibTeX_key_generator=
+How_would_you_like_to_link_to_'%0'?=
+Bibtex_key_patterns=
+Changed_special_field_settings=
+Clear_priority=
+Clear_rank=
+Compact_rank=
+Convert_1st,_2nd,_..._to_real_superscripts=
+Dropped_comment_from_database=
+Enable_PDF_preview=
+Enable_special_fields=
+Five_stars=
+Four_stars=
+Help_on_special_fields=
+Keywords_of_selected_entries=
+Manage_content_selectors=
+Manage_keywords=
+Marked_entries'_quality_as_good=
+Marked_entries_as_relevant=
+No_priority_information=
+No_rank_information=
+One_star=
+Priority=
+Priority_high=
+Priority_low=
+Priority_medium=
+Quality=
+Rank=
+Relevance=
+Set_priority=
+Set_priority_to_high=
+Set_priority_to_low=
+Set_priority_to_medium=
+Set_rank_to_five_stars=
+Set_rank_to_four_stars=
+Set_rank_to_one_star=
+Set_rank_to_three_stars=
+Set_rank_to_two_stars=
+Show_one_letter_heading_for_icon_columns=
+Show_priority=
+Show_quality=
+Show_rank=
+Show_relevance=
+Synchronize_with_keywords=
+Synchronized_special_fields_based_on_keywords=
+Three_stars=
+Toggle_relevance=
+Toogle_quality_assured=
+Two_stars=
+Update_keywords=
+Write_values_of_special_fields_as_separate_fields_to_BibTeX=
+You_have_changed_settings_for_special_fields.=
+no_preview_available=
+
+%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=
+A_string_with_that_label_already_exists=
+Connection_to_OpenOffice_has_been_lost._Please_make_sure_OpenOffice_is_running,_and_try_to_reconnect.=
+Correct_the_entry,_and_reopen_editor_to_display/edit_source.=
+Could_not_connect_to_a_running_gnuserv_process._Make_sure_that_Emacs_or_XEmacs_is_running,<BR>and_that_the_server_has_been_started_(by_running_the_command_'server-start'/'gnuserv-start').=
+Could_not_connect_to_running_OpenOffice.\nMake_sure_you_have_installed_OpenOffice_with_Java_support.\nIf_connecting_manually,_please_verify_program_and_library_paths.\n\nError_message\:_=
+Created_group_"%0".=
+File_has_been_updated_externally._Are_you_sure_you_want_to_save?=
+If_a_pasted_or_imported_entry_already_has_the_field_set,_overwrite.=
+Import_Metadata_From_PDF=
+Not_connected_to_any_Writer_document._Please_make_sure_a_document_is_open,_and_use_the_'Select_Writer_document'_button_to_connect_to_it.=
+Please_note_that_this_is_an_early_beta_version._Do_not_use_it_without_backing_up_your_files!=
+Removed_all_subgroups_of_group_"%0".=
+To_disable_the_memory_stick_mode_rename_or_remove_the_jabref.xml_file_in_the_same_folder_as_JabRef.=
+Unable_to_connect._One_possible_reason_is_that_JabRef_and_OpenOffice/LibreOffice_are_not_both_running_in_either_32_bit_mode_or_64_bit_mode.=
+Unable_to_determine_plugin_name_and_version._This_may_not_be_a_valid_JabRef_plugin.=
+Use_the_following_delimiter_character(s)\:=
+When_downloading_files,_or_moving_linked_files_to_the_file_directory,_prefer_the_bib_file_location_rather_than_the_file_directory_set_above=
+Your_style_file_specifies_the_character_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+Your_style_file_specifies_the_paragraph_format_'%0',_which_is_undefined_in_your_current_OpenOffice_document.=
+
+Error_fetching_from_Google_Scholar=
+Run_HTML_converter_on_title=
+Searching...=
+You_have_selected_more_than_%0_entries_for_download._Some_web_sites_might_block_you_if_you_make_too_many_rapid_downloads._Do_you_want_to_continue?=
+Confirm_selection=
+Unknown_DOI\:_'%0'.=
+Get_BibTeX_entry_from_DOI=
+Prefer_converting_subscripts_and_superscripts_to_equations_rather_than_text=
+Add_{}_to_specified_title_words_on_search_to_keep_the_correct_case=
+Import_conversions=
+Run_filter_on_title_keeping_the_case_of_selected_words=
+Intermittent_errors_on_the_IEEE_Xplore_server._Please_try_again_in_a_while.=
+Please_enter_a_search_string=
+Please_open_or_start_a_new_database_before_searching=
+An_Error_occurred_while_fetching_from_ADS_(%0)\:=
+Error_while_fetching_from_ADS=
+Error_while_fetching_from_OAI2=
+An_Error_occurred_while_parsing_abstract=
+Unknown_DiVA_entry\:_'%0'.=
+Get_BibTeX_entry_from_DiVA=
+Log=
+Remove_unneccessary_$,_{,_and_}=
diff --git a/src/resource/Menu_da.properties b/src/resource/Menu_da.properties
index 7e0d2db..24c3277 100644
--- a/src/resource/Menu_da.properties
+++ b/src/resource/Menu_da.properties
@@ -1,128 +1,128 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-Abbreviate_journal_names_(ISO)=Forkort_tidsskriftsnavn_(ISO)
-Abbreviate_journal_names_(MEDLINE)=Forkort_tidsskriftsnavn_(MEDLINE)
-About_JabRef=Om_&JabRef
-Append_database=Tilf\u00f8j_ind&hold_fra_database
-Autogenerate_BibTeX_keys=&Autogenerer_BibTeX-n\u00f8gler
-BibTeX=&BibTeX
-Close_database=L&uk_database
-Copy=K&opier
-Copy_\\cite{BibTeX_key}=Kopier_\\cite{&BibTeX-n\u00f8gler}
-Copy_BibTeX_key=Kopier_&BibTeX-n\u00f8gler
-Custom_export=E&ksterne_eksportfiltre
-Custom_importers=Brugerdefinerede_importfiltre
-Customize_entry_types=&Tilpas_posttyper
-Cut=&Klip
-Database_properties=Egenskaber_for_database
-Delete=&Slet
-Edit=&Rediger
-Edit_entry=&Rediger_post
-Edit_preamble=Rediger_pr\u00e6&ambel
-Edit_strings=Rediger_&strenge
-Export=&Eksporter
-Export_selected_entries_to_clipboard=Eksporter_valgte_poster_til_udklipsholderen
-Fetch_Medline=Hent_fra_Medline
-File=&Fil
-Find_And_Fix=Find_og_reparer
-Find_and_remove_exact_duplicates=&Find_og_fjern_eksakte_dubletter
-Find_duplicates=S\u00f8g_efter_&dubletter
-Help=&Hj\u00e6lp
-Help_contents=&Oversigt_over_hj\u00e6lpefiler
-Highlight_groups_matching_all_selected_entries=Fremh\u00e6v_grupper_som_indeholder_alle_valgte_poster
-Highlight_groups_matching_any_selected_entry=Fremh\u00e6v_grupper_som_indeholder_mindst_en_af_de_valgte_poster
-Incremental_search=&Inkrementel_s\u00f8gning
-Insert_selected_citations_into_Emacs=Send_valgte_poster_til_Emacs
-Insert_selected_citations_into_LatexEditor=Send_valgte_poster_til_LatexEditor
-Insert_selected_citations_into_LyX/Kile=Send_valgte_poster_til_&LyX/Kile
-Insert_selected_citations_into_WinEdt=Send_valgte_poster_til_&WinEdt
-Integrity_check=Tjek_integritet
-JabRef_help=JabRef-&hj\u00e6lp
-Load_session=&Genopret_tilstand
-Manage_content_selectors=Ops\u00e6t_ordlister
-Manage_custom_exports=Administrer_eksterne_&eksportfiltre
-Manage_custom_imports=Administrer_eksterne_i&mportfiltre
-Manage_journal_abbreviations=&Administrer_tidsskriftsforkortelser
-Mark_entries=&M\u00e6rk_poster
-New_database=&Ny_database
-New_entry=N&y_post
-New_entry...=&Ny_post...
-New_entry_from_plain_text=Ny_&post_fra_ren_tekst
-New_subdatabase_based_on_AUX_file=Ny_deldatabase_baseret_p\u00e5_AU&X-fil
-Next_tab=&N\u00e6ste_faneblad
-Open_database=&\u00c5bn_database
-Open_PDF_or_PS=\u00c5bn_&PDF_eller_PS
-Open_URL_or_DOI=\u00c5bn_&URL_eller_DOI
-Options=&Ops\u00e6tning
-Paste=&Inds\u00e6t
-Preferences=&Indstillinger
-Previous_tab=&Forrige_faneblad
-Quit=&Afslut
-Recent_files=&Seneste_filer
-Redo=&Gentag
-Replace_string=&Erstat_streng
-Save_database=&Gem_database
-Save_database_as_...=Ge&m_database_som_...
-Save_selected_as_...=Gem_&valgte_poster_som_...
-Save_session=Gem_&tilstand
-Search=&S\u00f8g
-Search_IEEEXplore=Hent_fra_IEEEXplore
-Select_all=&V\u00e6lg_alle
-Set_up_general_fields=Administrer_&generelle_felter
-Show_error_console=Vis_fejlkonsol
-Sort_tabs=Sorter_faneblade
-Switch_preview_layout=&Skift_layout_p\u00e5_forh\u00e5ndsvisning
-Synchronize_PDF_links=Synkroniser_PDF-links
-Synchronize_PS_links=Synkroniser_PS-links
-Tab-separated_file=&Tab.-separeret_fil
-Toggle_entry_preview=&Vis/skjul_forh\u00e5ndsvisning
-Toggle_groups_interface=Vis/skjul_&grupperingspanel
-Tools=F&unktioner
-Unabbreviate_journal_names=Ekspander_tidsskriftsnavn
-Undo=&Fortryd
-Unmark_all=Fjern_m\u00e6rkning_fra_&alle
-Unmark_entries=F&jern_m\u00e6rkning
-View=&Vis
-Web_search=&Webs\u00f8gning
-Import_into_new_database=Importer_til_ny_database
-Import_into_current_database=Importer_til_den_aktive_database
-Scan_database...=Unders\u00f8g_&database
-Push_entries_to_external_application_(%0)=Send_poster_til_ekstern_applikation_(%0)
-Write_XMP-metadata_to_PDFs=Skriv_XMP-metadata_til_PDF-filer
-Set/clear_fields=S\u00e6t/ryd_felter
-Export_selected_entries=Eksporter_valgte_poster
-Fetch_ArXiv.org=Hent_fra_ArXiv.org
-Sessions=Tilstande
-Save_all=Gem_alle
-Upgrade_external_links=&Opgrader_eksterne_links
-Manage_external_file_types=Administrer_eksterne_&filtyper
-Open_file=\u00c5bn_fil
-Plugins=&Plugins
-Connect_to_external_SQL_database=Tilslut_til_ekstern_SQL-database
-Export_to_external_SQL_database=Eksporter_til_ekstern_SQL-database
-Search_JSTOR=S\u00f8g_i_JSTOR
-Fetch_SPIRES=Hent_fra_SPIRES
-Fetch_INSPIRE=
-Search_Medline=S\u00f8g_i_Medline
-Import_from_external_SQL_database=Importer_fra_ekstern_SQL-database
-Focus_entry_table=Fokus_p\u00e5_hovedtabel
-Search_ACM_Portal=S\u00f8g_i_ACM_Portal
-
-Increase_table_font_size=For&\u00f8g fontst\u00f8rrelse i hovedtabel
-Decrease_table_font_size=For&mindsk fontst\u00f8rrelse i hovedtabel
-Forward=Frem
-Back=Tilbage
-
-Manage_plugins=&Administrer_plugins
-Look_up_full_text_document=&Hent_tekstdokument
-Set/clear/rename_fields=Udfyld/ryd/omd\u00f8b_felter
-
-Search_ScienceDirect=S\u00f8g_i_ScienceDirect
-Mark_specific_color=M&\u00e6rk_med_specifik_farve
-Resolve_duplicate_BibTeX_keys=Udred_dublerede_BibTeX-n\u00f8gler
-Minimize_to_system_tray=
-Legacy_tools...=
-Copy_BibTeX_key_and_title=
-
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+Abbreviate_journal_names_(ISO)=Forkort_tidsskriftsnavn_(ISO)
+Abbreviate_journal_names_(MEDLINE)=Forkort_tidsskriftsnavn_(MEDLINE)
+About_JabRef=Om_&JabRef
+Append_database=Tilf\u00f8j_ind&hold_fra_database
+Autogenerate_BibTeX_keys=&Autogenerer_BibTeX-n\u00f8gler
+BibTeX=&BibTeX
+Close_database=L&uk_database
+Copy=K&opier
+Copy_\\cite{BibTeX_key}=Kopier_\\cite{&BibTeX-n\u00f8gler}
+Copy_BibTeX_key=Kopier_&BibTeX-n\u00f8gler
+Custom_export=E&ksterne_eksportfiltre
+Custom_importers=Brugerdefinerede_importfiltre
+Customize_entry_types=&Tilpas_posttyper
+Cut=&Klip
+Database_properties=Egenskaber_for_database
+Delete=&Slet
+Edit=&Rediger
+Edit_entry=&Rediger_post
+Edit_preamble=Rediger_pr\u00e6&ambel
+Edit_strings=Rediger_&strenge
+Export=&Eksporter
+Export_selected_entries_to_clipboard=Eksporter_valgte_poster_til_udklipsholderen
+Fetch_Medline=Hent_fra_Medline
+File=&Fil
+Find_And_Fix=Find_og_reparer
+Find_and_remove_exact_duplicates=&Find_og_fjern_eksakte_dubletter
+Find_duplicates=S\u00f8g_efter_&dubletter
+Help=&Hj\u00e6lp
+Help_contents=&Oversigt_over_hj\u00e6lpefiler
+Highlight_groups_matching_all_selected_entries=Fremh\u00e6v_grupper_som_indeholder_alle_valgte_poster
+Highlight_groups_matching_any_selected_entry=Fremh\u00e6v_grupper_som_indeholder_mindst_en_af_de_valgte_poster
+Incremental_search=&Inkrementel_s\u00f8gning
+Insert_selected_citations_into_Emacs=Send_valgte_poster_til_Emacs
+Insert_selected_citations_into_LatexEditor=Send_valgte_poster_til_LatexEditor
+Insert_selected_citations_into_LyX/Kile=Send_valgte_poster_til_&LyX/Kile
+Insert_selected_citations_into_WinEdt=Send_valgte_poster_til_&WinEdt
+Integrity_check=Tjek_integritet
+JabRef_help=JabRef-&hj\u00e6lp
+Load_session=&Genopret_tilstand
+Manage_content_selectors=Ops\u00e6t_ordlister
+Manage_custom_exports=Administrer_eksterne_&eksportfiltre
+Manage_custom_imports=Administrer_eksterne_i&mportfiltre
+Manage_journal_abbreviations=&Administrer_tidsskriftsforkortelser
+Mark_entries=&M\u00e6rk_poster
+New_database=&Ny_database
+New_entry=N&y_post
+New_entry...=&Ny_post...
+New_entry_from_plain_text=Ny_&post_fra_ren_tekst
+New_subdatabase_based_on_AUX_file=Ny_deldatabase_baseret_p\u00e5_AU&X-fil
+Next_tab=&N\u00e6ste_faneblad
+Open_database=&\u00c5bn_database
+Open_PDF_or_PS=\u00c5bn_&PDF_eller_PS
+Open_URL_or_DOI=\u00c5bn_&URL_eller_DOI
+Options=&Ops\u00e6tning
+Paste=&Inds\u00e6t
+Preferences=&Indstillinger
+Previous_tab=&Forrige_faneblad
+Quit=&Afslut
+Recent_files=&Seneste_filer
+Redo=&Gentag
+Replace_string=&Erstat_streng
+Save_database=&Gem_database
+Save_database_as_...=Ge&m_database_som_...
+Save_selected_as_...=Gem_&valgte_poster_som_...
+Save_session=Gem_&tilstand
+Search=&S\u00f8g
+Search_IEEEXplore=Hent_fra_IEEEXplore
+Select_all=&V\u00e6lg_alle
+Set_up_general_fields=Administrer_&generelle_felter
+Show_error_console=Vis_fejlkonsol
+Sort_tabs=Sorter_faneblade
+Switch_preview_layout=&Skift_layout_p\u00e5_forh\u00e5ndsvisning
+Synchronize_PDF_links=Synkroniser_PDF-links
+Synchronize_PS_links=Synkroniser_PS-links
+Tab-separated_file=&Tab.-separeret_fil
+Toggle_entry_preview=&Vis/skjul_forh\u00e5ndsvisning
+Toggle_groups_interface=Vis/skjul_&grupperingspanel
+Tools=F&unktioner
+Unabbreviate_journal_names=Ekspander_tidsskriftsnavn
+Undo=&Fortryd
+Unmark_all=Fjern_m\u00e6rkning_fra_&alle
+Unmark_entries=F&jern_m\u00e6rkning
+View=&Vis
+Web_search=&Webs\u00f8gning
+Import_into_new_database=Importer_til_ny_database
+Import_into_current_database=Importer_til_den_aktive_database
+Scan_database...=Unders\u00f8g_&database
+Push_entries_to_external_application_(%0)=Send_poster_til_ekstern_applikation_(%0)
+Write_XMP-metadata_to_PDFs=Skriv_XMP-metadata_til_PDF-filer
+Set/clear_fields=S\u00e6t/ryd_felter
+Export_selected_entries=Eksporter_valgte_poster
+Fetch_ArXiv.org=Hent_fra_ArXiv.org
+Sessions=Tilstande
+Save_all=Gem_alle
+Upgrade_external_links=&Opgrader_eksterne_links
+Manage_external_file_types=Administrer_eksterne_&filtyper
+Open_file=\u00c5bn_fil
+Plugins=&Plugins
+Connect_to_external_SQL_database=Tilslut_til_ekstern_SQL-database
+Export_to_external_SQL_database=Eksporter_til_ekstern_SQL-database
+Search_JSTOR=S\u00f8g_i_JSTOR
+Fetch_SPIRES=Hent_fra_SPIRES
+Fetch_INSPIRE=
+Search_Medline=S\u00f8g_i_Medline
+Import_from_external_SQL_database=Importer_fra_ekstern_SQL-database
+Focus_entry_table=Fokus_p\u00e5_hovedtabel
+Search_ACM_Portal=S\u00f8g_i_ACM_Portal
+
+Increase_table_font_size=For&\u00f8g fontst\u00f8rrelse i hovedtabel
+Decrease_table_font_size=For&mindsk fontst\u00f8rrelse i hovedtabel
+Forward=Frem
+Back=Tilbage
+
+Manage_plugins=&Administrer_plugins
+Look_up_full_text_document=&Hent_tekstdokument
+Set/clear/rename_fields=Udfyld/ryd/omd\u00f8b_felter
+
+Search_ScienceDirect=S\u00f8g_i_ScienceDirect
+Mark_specific_color=M&\u00e6rk_med_specifik_farve
+Resolve_duplicate_BibTeX_keys=Udred_dublerede_BibTeX-n\u00f8gler
+Minimize_to_system_tray=
+Legacy_tools...=
+Copy_BibTeX_key_and_title=
+
 Cleanup_entries=
\ No newline at end of file
diff --git a/src/resource/Menu_de.properties b/src/resource/Menu_de.properties
index faebfe1..74631ad 100644
--- a/src/resource/Menu_de.properties
+++ b/src/resource/Menu_de.properties
@@ -1,228 +1,228 @@
-#!
-#! created/edited by Popeye version 0.55 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-
-Abbreviate_journal_names_(ISO)=Zeitschriftentitel_abk\u00fcrzen_(&ISO)
-
-Abbreviate_journal_names_(MEDLINE)=Zeitschriftentitel_abk\u00fcrzen_(&MEDLINE)
-
-About_JabRef=\u00dcber_&JabRef
-
-Append_database=Datei_&anh\u00e4ngen
-
-Autogenerate_BibTeX_keys=&BibTeX-Keys_automatisch_generieren
-
-BibTeX=Bib&TeX
-
-Close_database=Datei_s&chlie\u00dfen
-
-Copy=&Kopieren
-
-Copy_\\cite{BibTeX_key}=\\&cite{BibTeX_key}_kopieren
-
-Copy_BibTeX_key=&BibTeX_key_kopieren
-
-Custom_export=E&xterne_Exportfilter
-
-Custom_importers=Externe_&Importfilter
-
-Customize_entry_types=Eintragstypen_&anpassen
-
-Cut=Aus&schneiden
-
-Database_properties=Ei&genschaften_der_Datei
-
-Delete=&L\u00f6schen
-
-Edit=&Bearbeiten
-
-# Bibtex
-Edit_entry=Eintrag_&bearbeiten
-
-Edit_preamble=&Pr\u00e4ambel_bearbeiten
-
-Edit_strings=&Strings_bearbeiten
-
-Export=&Exportieren
-
-Export_selected_entries_to_clipboard=&Ausgw\u00e4hlte_Eintr\u00e4ge_in_die_Zwischenablage_kopieren
-
-Fetch_Medline=&Medline
-
-# Menu names
-File=&Datei
-
-Find_And_Fix=Finden_und_reparieren
-
-Find_and_remove_exact_duplicates=E&xakte_Duplikate_Finden_und_Entfernen
-
-Find_duplicates=Nach_&doppelten_Eintr\u00e4gen_suchen
-
-Help=&Hilfe
-
-Help_contents=Hilfe_-_&Inhalt
-
-Highlight_groups_matching_all_selected_entries=Gruppen_mit_&allen_ausgew\u00e4hlten_Eintr\u00e4gen_markieren
-
-Highlight_groups_matching_any_selected_entry=G&ruppen_mit_einem_der_ausgew\u00e4hlten_Eintr\u00e4ge_markieren
-
-Incremental_search=&Weitersuchen
-
-Insert_selected_citations_into_Emacs=Ausgew\u00e4hlte_Literaturangaben_in_Emacs_ein&f\u00fcgen
-
-Insert_selected_citations_into_LatexEditor=Ausgew\u00e4hlte_Literaturangaben_in_den_LatexEditor_kopieren
-
-Insert_selected_citations_into_LyX/Kile=Ausgew\u00e4hlte_Literaturangaben_in_&LyX/Kile_einf\u00fcgen
-
-Insert_selected_citations_into_WinEdt=&Ausgew\u00e4hlte_Literaturangaben_in_WinEdt_einf\u00fcgen
-
-Integrity_check=\u00dcberpr\u00fcfung_der_Integrit\u00e4t
-
-# Help
-JabRef_help=JabRef-&Hilfe
-
-Load_session=Sitzung_&laden
-
-Manage_content_selectors=W&ortauswahl_verwalten
-
-Manage_custom_exports=&Verwalte_externe_Exportfilter
-
-Manage_custom_imports=Verwalte_externe_&Importfilter
-
-Manage_journal_abbreviations=&Abk\u00fcrzungen_der_Zeitschriften_verwalten
-
-Mark_entries=Eintr\u00e4ge_&markieren
-
-# File menu
-New_database=&Neue_Datei
-
-# Menu BibTeX (BibTeX)
-New_entry=&Neuer_Eintrag
-
-New_entry...=Neuer_&Eintrag...
-
-New_entry_from_plain_text=Neuer_Eintrag_aus_&Klartext
-
-New_subdatabase_based_on_AUX_file=&Neue_Teildatei_aus_AUX-Datei
-
-# View
-Next_tab=&N\u00e4chster_Tab
-
-Open_database=Datei_\u00f6&ffnen
-
-Open_PDF_or_PS=&PDF_oder_PS_\u00f6ffnen
-
-Open_URL_or_DOI=&URL_oder_DOI_\u00f6ffnen
-
-Options=&Optionen
-
-Paste=&Einf\u00fcgen
-
-# Options
-Preferences=&Einstellungen
-
-Previous_tab=&Vorheriger_Tab
-
-Quit=&Beenden
-
-Recent_files=&Zuletzt_ge\u00f6ffnete_Dateien
-
-Redo=&Wiederholen
-
-Replace_string=E&rsetzen
-
-Save_database=Datei_&speichern
-
-Save_database_as_...=Datei_speichern_&unter_...
-
-Save_selected_as_...=Aus&wahl_speichern_unter_...
-
-Save_session=Sitzung_&speichern
-
-# Tools
-Search=&Suchen
-
-Search_IEEEXplore=IEEEXplore
-
-Select_all=&Alle_ausw\u00e4hlen
-
-Set_up_general_fields=Allgemeine_&Felder_festlegen
-
-Show_error_console=Fehlerkonsole_anzeigen
-
-Sort_tabs=Tabs_&sortieren
-
-Switch_preview_layout=&Layout_der_Vorschau_wechseln
-
-Synchronize_PDF_links=&PDF-Links_synchronisieren
-
-Synchronize_PS_links=P&S_Links_synchronisieren
-
-# Export menu
-Tab-separated_file=Mit_&Tabulatoren_unterteilte_Datei
-
-Toggle_entry_preview=&Eintragsvorschau_ein-/ausblenden
-
-Toggle_groups_interface=&Gruppenansicht_ein-/ausblenden
-
-Tools=&Extras
-
-Unabbreviate_journal_names=&Abk\u00fcrzung_der_Zeitschriften_aufheben
-
-# Edit
-Undo=&R\u00fcckg\u00e4ngig
-
-Unmark_all=S\u00e4m&tliche_Markierungen_aufheben
-
-Unmark_entries=Markierung_a&ufheben
-
-View=&Ansicht
-Web_search=&Internet
-Import_into_new_database=&Importieren_in_neue_Datenbank
-Import_into_current_database=Importieren_in_aktuelle_&Datenbank
-
-Scan_database...=&Datenbank_durchsuchen
-
-Push_entries_to_external_application_(%0)=&Eintr\u00e4ge_in_externe_Anwendung_einf\u00fcgen_(%0)
-Write_XMP-metadata_to_PDFs=&XMP-Metadaten_in_PDFs_schreiben
-
-
-
-Set/clear_fields=&Felder_setzen/l\u00f6schen
-Export_selected_entries=Ausgew\u00e4hlte_Eintr\u00e4ge_e&xportieren
-Fetch_ArXiv.org=ArXiv.org
-Sessions=S&itzungen
-Save_all=A&lle_speichern
-
-Upgrade_external_links=Externe_Links_aktualisieren
-Manage_external_file_types=Externe_Dateitypen_verwalten
-
-Open_file=Datei_\u00f6ffnen
-Plugins=&Plugins
-Connect_to_external_SQL_database=Mit_externer_SQL-Datenbank_verbinden
-Export_to_external_SQL_database=Export_in_externe_SQL-Datenbank
-Search_JSTOR=JSTOR
-Fetch_SPIRES=SPIRES
-Fetch_INSPIRE=INSPIRE
-Search_Medline=Medline
-Import_from_external_SQL_database=Import_aus_externer_SQL-Datenbank
-Focus_entry_table=Fokus_auf_Tabelle_setzen
-Search_ACM_Portal=ACM-Portal
-
-Increase_table_font_size=Schriftgr\u00f6\u00dfe_in_der_&Tabelle_vergr\u00f6\u00dfern
-Decrease_table_font_size=Schriftgr\u00f6\u00dfe_in_der_Tabelle_ver&kleinern
-Forward=Vor
-Back=Zur\u00fcck
-
-Manage_plugins=Plugins_verwalten
-Look_up_full_text_document=Volltext-Dokument_suchen
-Set/clear/rename_fields=Felder_setzen/l\u00f6schen/umbenennen
-
-Search_ScienceDirect=ScienceDirect
-Mark_specific_color=Mit_bestimmter_&Farbe_markieren
-Resolve_duplicate_BibTeX_keys=Doppelte_BibTeX-Keys_beseitigen
-Minimize_to_system_tray=In_den_Infobereich_minimieren
-Legacy_tools...=Extras_(alt)...
-Copy_BibTeX_key_and_title=BibTeX-Key_und_Titel_kopieren
-
-Cleanup_entries=Eintr\u00e4ge_bereinigen
+#!
+#! created/edited by Popeye version 0.55 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+
+Abbreviate_journal_names_(ISO)=Zeitschriftentitel_abk\u00fcrzen_(&ISO)
+
+Abbreviate_journal_names_(MEDLINE)=Zeitschriftentitel_abk\u00fcrzen_(&MEDLINE)
+
+About_JabRef=\u00dcber_&JabRef
+
+Append_database=Datei_&anh\u00e4ngen
+
+Autogenerate_BibTeX_keys=&BibTeX-Keys_automatisch_generieren
+
+BibTeX=Bib&TeX
+
+Close_database=Datei_s&chlie\u00dfen
+
+Copy=&Kopieren
+
+Copy_\\cite{BibTeX_key}=\\&cite{BibTeX_key}_kopieren
+
+Copy_BibTeX_key=&BibTeX_key_kopieren
+
+Custom_export=E&xterne_Exportfilter
+
+Custom_importers=Externe_&Importfilter
+
+Customize_entry_types=Eintragstypen_&anpassen
+
+Cut=Aus&schneiden
+
+Database_properties=Ei&genschaften_der_Datei
+
+Delete=&L\u00f6schen
+
+Edit=&Bearbeiten
+
+# Bibtex
+Edit_entry=Eintrag_&bearbeiten
+
+Edit_preamble=&Pr\u00e4ambel_bearbeiten
+
+Edit_strings=&Strings_bearbeiten
+
+Export=&Exportieren
+
+Export_selected_entries_to_clipboard=&Ausgw\u00e4hlte_Eintr\u00e4ge_in_die_Zwischenablage_kopieren
+
+Fetch_Medline=&Medline
+
+# Menu names
+File=&Datei
+
+Find_And_Fix=Finden_und_reparieren
+
+Find_and_remove_exact_duplicates=E&xakte_Duplikate_Finden_und_Entfernen
+
+Find_duplicates=Nach_&doppelten_Eintr\u00e4gen_suchen
+
+Help=&Hilfe
+
+Help_contents=Hilfe_-_&Inhalt
+
+Highlight_groups_matching_all_selected_entries=Gruppen_mit_&allen_ausgew\u00e4hlten_Eintr\u00e4gen_markieren
+
+Highlight_groups_matching_any_selected_entry=G&ruppen_mit_einem_der_ausgew\u00e4hlten_Eintr\u00e4ge_markieren
+
+Incremental_search=&Weitersuchen
+
+Insert_selected_citations_into_Emacs=Ausgew\u00e4hlte_Literaturangaben_in_Emacs_ein&f\u00fcgen
+
+Insert_selected_citations_into_LatexEditor=Ausgew\u00e4hlte_Literaturangaben_in_den_LatexEditor_kopieren
+
+Insert_selected_citations_into_LyX/Kile=Ausgew\u00e4hlte_Literaturangaben_in_&LyX/Kile_einf\u00fcgen
+
+Insert_selected_citations_into_WinEdt=&Ausgew\u00e4hlte_Literaturangaben_in_WinEdt_einf\u00fcgen
+
+Integrity_check=\u00dcberpr\u00fcfung_der_Integrit\u00e4t
+
+# Help
+JabRef_help=JabRef-&Hilfe
+
+Load_session=Sitzung_&laden
+
+Manage_content_selectors=W&ortauswahl_verwalten
+
+Manage_custom_exports=&Verwalte_externe_Exportfilter
+
+Manage_custom_imports=Verwalte_externe_&Importfilter
+
+Manage_journal_abbreviations=&Abk\u00fcrzungen_der_Zeitschriften_verwalten
+
+Mark_entries=Eintr\u00e4ge_&markieren
+
+# File menu
+New_database=&Neue_Datei
+
+# Menu BibTeX (BibTeX)
+New_entry=&Neuer_Eintrag
+
+New_entry...=Neuer_&Eintrag...
+
+New_entry_from_plain_text=Neuer_Eintrag_aus_&Klartext
+
+New_subdatabase_based_on_AUX_file=&Neue_Teildatei_aus_AUX-Datei
+
+# View
+Next_tab=&N\u00e4chster_Tab
+
+Open_database=Datei_\u00f6&ffnen
+
+Open_PDF_or_PS=&PDF_oder_PS_\u00f6ffnen
+
+Open_URL_or_DOI=&URL_oder_DOI_\u00f6ffnen
+
+Options=&Optionen
+
+Paste=&Einf\u00fcgen
+
+# Options
+Preferences=&Einstellungen
+
+Previous_tab=&Vorheriger_Tab
+
+Quit=&Beenden
+
+Recent_files=&Zuletzt_ge\u00f6ffnete_Dateien
+
+Redo=&Wiederholen
+
+Replace_string=E&rsetzen
+
+Save_database=Datei_&speichern
+
+Save_database_as_...=Datei_speichern_&unter_...
+
+Save_selected_as_...=Aus&wahl_speichern_unter_...
+
+Save_session=Sitzung_&speichern
+
+# Tools
+Search=&Suchen
+
+Search_IEEEXplore=IEEEXplore
+
+Select_all=&Alle_ausw\u00e4hlen
+
+Set_up_general_fields=Allgemeine_&Felder_festlegen
+
+Show_error_console=Fehlerkonsole_anzeigen
+
+Sort_tabs=Tabs_&sortieren
+
+Switch_preview_layout=&Layout_der_Vorschau_wechseln
+
+Synchronize_PDF_links=&PDF-Links_synchronisieren
+
+Synchronize_PS_links=P&S_Links_synchronisieren
+
+# Export menu
+Tab-separated_file=Mit_&Tabulatoren_unterteilte_Datei
+
+Toggle_entry_preview=&Eintragsvorschau_ein-/ausblenden
+
+Toggle_groups_interface=&Gruppenansicht_ein-/ausblenden
+
+Tools=&Extras
+
+Unabbreviate_journal_names=&Abk\u00fcrzung_der_Zeitschriften_aufheben
+
+# Edit
+Undo=&R\u00fcckg\u00e4ngig
+
+Unmark_all=S\u00e4m&tliche_Markierungen_aufheben
+
+Unmark_entries=Markierung_a&ufheben
+
+View=&Ansicht
+Web_search=&Internet
+Import_into_new_database=&Importieren_in_neue_Datenbank
+Import_into_current_database=Importieren_in_aktuelle_&Datenbank
+
+Scan_database...=&Datenbank_durchsuchen
+
+Push_entries_to_external_application_(%0)=&Eintr\u00e4ge_in_externe_Anwendung_einf\u00fcgen_(%0)
+Write_XMP-metadata_to_PDFs=&XMP-Metadaten_in_PDFs_schreiben
+
+
+
+Set/clear_fields=&Felder_setzen/l\u00f6schen
+Export_selected_entries=Ausgew\u00e4hlte_Eintr\u00e4ge_e&xportieren
+Fetch_ArXiv.org=ArXiv.org
+Sessions=S&itzungen
+Save_all=A&lle_speichern
+
+Upgrade_external_links=Externe_Links_aktualisieren
+Manage_external_file_types=Externe_Dateitypen_verwalten
+
+Open_file=Datei_\u00f6ffnen
+Plugins=&Plugins
+Connect_to_external_SQL_database=Mit_externer_SQL-Datenbank_verbinden
+Export_to_external_SQL_database=Export_in_externe_SQL-Datenbank
+Search_JSTOR=JSTOR
+Fetch_SPIRES=SPIRES
+Fetch_INSPIRE=INSPIRE
+Search_Medline=Medline
+Import_from_external_SQL_database=Import_aus_externer_SQL-Datenbank
+Focus_entry_table=Fokus_auf_Tabelle_setzen
+Search_ACM_Portal=ACM-Portal
+
+Increase_table_font_size=Schriftgr\u00f6\u00dfe_in_der_&Tabelle_vergr\u00f6\u00dfern
+Decrease_table_font_size=Schriftgr\u00f6\u00dfe_in_der_Tabelle_ver&kleinern
+Forward=Vor
+Back=Zur\u00fcck
+
+Manage_plugins=Plugins_verwalten
+Look_up_full_text_document=Volltext-Dokument_suchen
+Set/clear/rename_fields=Felder_setzen/l\u00f6schen/umbenennen
+
+Search_ScienceDirect=ScienceDirect
+Mark_specific_color=Mit_bestimmter_&Farbe_markieren
+Resolve_duplicate_BibTeX_keys=Doppelte_BibTeX-Keys_beseitigen
+Minimize_to_system_tray=In_den_Infobereich_minimieren
+Legacy_tools...=Extras_(alt)...
+Copy_BibTeX_key_and_title=BibTeX-Key_und_Titel_kopieren
+
+Cleanup_entries=Eintr\u00e4ge_bereinigen
diff --git a/src/resource/Menu_en.properties b/src/resource/Menu_en.properties
index 8863834..55efab0 100644
--- a/src/resource/Menu_en.properties
+++ b/src/resource/Menu_en.properties
@@ -1,149 +1,149 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-Abbreviate_journal_names_(ISO)=Abbreviate_journal_names_(ISO)
-Abbreviate_journal_names_(MEDLINE)=Abbreviate_journal_names_(MEDLINE)
-About_JabRef=&About_JabRef
-Append_database=&Append_database
-Autogenerate_BibTeX_keys=&Autogenerate_BibTeX_keys
-BibTeX=&BibTeX
-Close_database=&Close_database
-Copy=C&opy
-Copy_\\cite{BibTeX_key}=Copy_\\c&ite{BibTeX_key}
-Copy_BibTeX_key=Copy_&BibTeX_key
-Custom_export=Custom_e&xport
-Custom_importers=Custom_importers
-Customize_entry_types=&Customize_entry_types
-Cut=&Cut
-Database_properties=Database_&properties
-Delete=&Delete
-Edit=&Edit
-# Bibtex
-Edit_entry=&Edit_entry
-Edit_preamble=Edit_&preamble
-Edit_strings=Edit_&strings
-Export=&Export
-Export_selected_entries_to_clipboard=&Export_selected_entries_to_clipboard
-Fetch_Medline=Fetch_&Medline
-
-# Menu names
-File=&File
-Find_And_Fix=Find_and_Fix
-Find_and_remove_exact_duplicates=Find_and_remove_exact_&duplicates
-Find_duplicates=&Find_duplicates
-Help=&Help
-Help_contents=Help_&contents
-Highlight_groups_matching_all_selected_entries=Highlight_groups_matching_all_selected_entries
-Highlight_groups_matching_any_selected_entry=Highlight_groups_matching_any_selected_entry
-Incremental_search=&Incremental_search
-
-Insert_selected_citations_into_Emacs=Insert_selected_citations_into_&Emacs
-Insert_selected_citations_into_LatexEditor=Insert_selected_citations_into_LatexEditor
-Insert_selected_citations_into_LyX/Kile=Insert_selected_citations_into_&LyX/Kile
-Insert_selected_citations_into_WinEdt=Insert_selected_citations_into_&WinEdt
-Integrity_check=Integrity_check
-# Help
-JabRef_help=JabRef_&help
-Load_session=Loa&d_session
-Manage_content_selectors=Manage_&content_selectors
-Manage_custom_exports=&Manage_custom_exports
-Manage_custom_imports=Manage_custom_&imports
-Manage_journal_abbreviations=Manage_&journal_abbreviations
-Mark_entries=&Mark_entries
-# File menu
-New_database=&New_database
-# Menu BibTeX (BibTeX)
-New_entry=N&ew_entry
-New_entry...=&New_entry_...
-New_entry_from_plain_text=Ne&w_entry_from_plain_text
-New_subdatabase_based_on_AUX_file=New_subdatabase_based_on_AU&X_file
-# View
-Next_tab=&Next_tab
-Open_database=&Open_database
-Open_PDF_or_PS=Open_&PDF_or_PS
-Open_URL_or_DOI=Open_&URL_or_DOI
-Options=&Options
-Paste=&Paste
-# Options
-Preferences=&Preferences
-Previous_tab=&Previous_tab
-Quit=&Quit
-Recent_files=&Recent_files
-Redo=&Redo
-Replace_string=&Replace_string
-Save_database=&Save_database
-Save_database_as_...=S&ave_database_as_...
-Save_selected_as_...=Save_se&lected_as_...
-Save_session=Save_session
-# Tools
-Search=&Search
-Search_IEEEXplore=Search_IEEEXplore
-Search_ACM_Portal=Search_ACM_Portal
-Select_all=Select_&all
-Set_up_general_fields=Set_up_&general_fields
-Show_error_console=Show_error_console
-
-Sort_tabs=&Sort_tabs
-Switch_preview_layout=&Switch_preview_layout
-Synchronize_PDF_links=Synchronize_PDF_links
-Synchronize_PS_links=Synchronize_PS_links
-# Export menu
-Tab-separated_file=&Tab-separated_file
-Toggle_entry_preview=&Toggle_entry_preview
-Toggle_groups_interface=Toggle_&groups_interface
-Tools=&Tools
-Unabbreviate_journal_names=Unabbreviate_journal_names
-# Edit
-Undo=&Undo
-Mark_specific_color=M&ark_specific_color
-Unmark_all=Unmark_a&ll
-Unmark_entries=U&nmark_entries
-View=&View
-Web_search=Web_search
-Import_into_new_database=Import_into_new_database
-Import_into_current_database=Import_into_current_database
-
-Scan_database...=S&can_database...
-
-Push_entries_to_external_application_(%0)=Push_entries_to_external_application_(%0)
-Write_XMP-metadata_to_PDFs=Write_XMP-metadata_to_PDFs
-
-Set/clear_fields=Set/clear_fields
-
-Export_selected_entries=Export_selected_entries
-Fetch_ArXiv.org=Fetch_ArXiv.org
-Sessions=Sessions
-
-Save_all=Save_all
-
-Upgrade_external_links=Upgrade_external_links
-Manage_external_file_types=Manage_external_file_types
-
-Open_file=Open_file
-
-Plugins=&Plugins
-Connect_to_external_SQL_database=Connect_to_external_SQL_database
-Export_to_external_SQL_database=Export_to_external_SQL_database
-Search_JSTOR=Search_JSTOR
-Fetch_SPIRES=Fetch_SPIRES
-Fetch_INSPIRE=Fetch_INSPIRE
-Search_Medline=Search_Medline
-Import_from_external_SQL_database=Import_from_external_SQL_database
-Focus_entry_table=Focus_entry_table
-
-Increase_table_font_size=&Increase_table_font_size
-Decrease_table_font_size=&Decrease_table_font_size
-Forward=Forward
-Back=Back
-
-Manage_plugins=Manage_plugins
-Look_up_full_text_document=Look_up_full_text_document
-Set/clear/rename_fields=Set/clear/rename_fields
-
-Search_ScienceDirect=Search_ScienceDirect
-Resolve_duplicate_BibTeX_keys=Resolve_duplicate_BibTeX_keys
-Minimize_to_system_tray=Minimize_to_system_tray
-Legacy_tools...=Legacy_tools...
-Copy_BibTeX_key_and_title=Copy_BibTeX_key_and_title
-
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+Abbreviate_journal_names_(ISO)=Abbreviate_journal_names_(ISO)
+Abbreviate_journal_names_(MEDLINE)=Abbreviate_journal_names_(MEDLINE)
+About_JabRef=&About_JabRef
+Append_database=&Append_database
+Autogenerate_BibTeX_keys=&Autogenerate_BibTeX_keys
+BibTeX=&BibTeX
+Close_database=&Close_database
+Copy=C&opy
+Copy_\\cite{BibTeX_key}=Copy_\\c&ite{BibTeX_key}
+Copy_BibTeX_key=Copy_&BibTeX_key
+Custom_export=Custom_e&xport
+Custom_importers=Custom_importers
+Customize_entry_types=&Customize_entry_types
+Cut=&Cut
+Database_properties=Database_&properties
+Delete=&Delete
+Edit=&Edit
+# Bibtex
+Edit_entry=&Edit_entry
+Edit_preamble=Edit_&preamble
+Edit_strings=Edit_&strings
+Export=&Export
+Export_selected_entries_to_clipboard=&Export_selected_entries_to_clipboard
+Fetch_Medline=Fetch_&Medline
+
+# Menu names
+File=&File
+Find_And_Fix=Find_and_Fix
+Find_and_remove_exact_duplicates=Find_and_remove_exact_&duplicates
+Find_duplicates=&Find_duplicates
+Help=&Help
+Help_contents=Help_&contents
+Highlight_groups_matching_all_selected_entries=Highlight_groups_matching_all_selected_entries
+Highlight_groups_matching_any_selected_entry=Highlight_groups_matching_any_selected_entry
+Incremental_search=&Incremental_search
+
+Insert_selected_citations_into_Emacs=Insert_selected_citations_into_&Emacs
+Insert_selected_citations_into_LatexEditor=Insert_selected_citations_into_LatexEditor
+Insert_selected_citations_into_LyX/Kile=Insert_selected_citations_into_&LyX/Kile
+Insert_selected_citations_into_WinEdt=Insert_selected_citations_into_&WinEdt
+Integrity_check=Integrity_check
+# Help
+JabRef_help=JabRef_&help
+Load_session=Loa&d_session
+Manage_content_selectors=Manage_&content_selectors
+Manage_custom_exports=&Manage_custom_exports
+Manage_custom_imports=Manage_custom_&imports
+Manage_journal_abbreviations=Manage_&journal_abbreviations
+Mark_entries=&Mark_entries
+# File menu
+New_database=&New_database
+# Menu BibTeX (BibTeX)
+New_entry=N&ew_entry
+New_entry...=&New_entry_...
+New_entry_from_plain_text=Ne&w_entry_from_plain_text
+New_subdatabase_based_on_AUX_file=New_subdatabase_based_on_AU&X_file
+# View
+Next_tab=&Next_tab
+Open_database=&Open_database
+Open_PDF_or_PS=Open_&PDF_or_PS
+Open_URL_or_DOI=Open_&URL_or_DOI
+Options=&Options
+Paste=&Paste
+# Options
+Preferences=&Preferences
+Previous_tab=&Previous_tab
+Quit=&Quit
+Recent_files=&Recent_files
+Redo=&Redo
+Replace_string=&Replace_string
+Save_database=&Save_database
+Save_database_as_...=S&ave_database_as_...
+Save_selected_as_...=Save_se&lected_as_...
+Save_session=Save_session
+# Tools
+Search=&Search
+Search_IEEEXplore=Search_IEEEXplore
+Search_ACM_Portal=Search_ACM_Portal
+Select_all=Select_&all
+Set_up_general_fields=Set_up_&general_fields
+Show_error_console=Show_error_console
+
+Sort_tabs=&Sort_tabs
+Switch_preview_layout=&Switch_preview_layout
+Synchronize_PDF_links=Synchronize_PDF_links
+Synchronize_PS_links=Synchronize_PS_links
+# Export menu
+Tab-separated_file=&Tab-separated_file
+Toggle_entry_preview=&Toggle_entry_preview
+Toggle_groups_interface=Toggle_&groups_interface
+Tools=&Tools
+Unabbreviate_journal_names=Unabbreviate_journal_names
+# Edit
+Undo=&Undo
+Mark_specific_color=M&ark_specific_color
+Unmark_all=Unmark_a&ll
+Unmark_entries=U&nmark_entries
+View=&View
+Web_search=Web_search
+Import_into_new_database=Import_into_new_database
+Import_into_current_database=Import_into_current_database
+
+Scan_database...=S&can_database...
+
+Push_entries_to_external_application_(%0)=Push_entries_to_external_application_(%0)
+Write_XMP-metadata_to_PDFs=Write_XMP-metadata_to_PDFs
+
+Set/clear_fields=Set/clear_fields
+
+Export_selected_entries=Export_selected_entries
+Fetch_ArXiv.org=Fetch_ArXiv.org
+Sessions=Sessions
+
+Save_all=Save_all
+
+Upgrade_external_links=Upgrade_external_links
+Manage_external_file_types=Manage_external_file_types
+
+Open_file=Open_file
+
+Plugins=&Plugins
+Connect_to_external_SQL_database=Connect_to_external_SQL_database
+Export_to_external_SQL_database=Export_to_external_SQL_database
+Search_JSTOR=Search_JSTOR
+Fetch_SPIRES=Fetch_SPIRES
+Fetch_INSPIRE=Fetch_INSPIRE
+Search_Medline=Search_Medline
+Import_from_external_SQL_database=Import_from_external_SQL_database
+Focus_entry_table=Focus_entry_table
+
+Increase_table_font_size=&Increase_table_font_size
+Decrease_table_font_size=&Decrease_table_font_size
+Forward=Forward
+Back=Back
+
+Manage_plugins=Manage_plugins
+Look_up_full_text_document=Look_up_full_text_document
+Set/clear/rename_fields=Set/clear/rename_fields
+
+Search_ScienceDirect=Search_ScienceDirect
+Resolve_duplicate_BibTeX_keys=Resolve_duplicate_BibTeX_keys
+Minimize_to_system_tray=Minimize_to_system_tray
+Legacy_tools...=Legacy_tools...
+Copy_BibTeX_key_and_title=Copy_BibTeX_key_and_title
+
 Cleanup_entries=Cleanup_entries
\ No newline at end of file
diff --git a/src/resource/Menu_es.properties b/src/resource/Menu_es.properties
index 098b8ca..d27a7ed 100644
--- a/src/resource/Menu_es.properties
+++ b/src/resource/Menu_es.properties
@@ -1,152 +1,152 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-Abbreviate_journal_names_(ISO)=Abreviar_nombres_de_journals_(ISO)
-Abbreviate_journal_names_(MEDLINE)=Abreviar_nombres_de_journal_(MEDLINE)
-About_JabRef=&Acerca_de_JabRef
-Append_database=&Añadir_base_de_datos
-Autogenerate_BibTeX_keys=&Autogenerar_claves_de_BibTeX
-BibTeX=&BibTeX
-Close_database=&Cerrar_base_de_datos
-Copy=C&opiar
-Copy_\\cite{BibTeX_key}=Copiar_\\c&ita_{clave_BibTeX}
-Copy_BibTeX_key=Copiar_clave_&BibTeX
-Custom_export=E&xportación_Personalizada
-Custom_importers=Importadores_Personalizados
-Customize_entry_types=&Personalizar_tipos_de_entrada
-Cut=&Cortar
-Database_properties=&Propiedades_de_la_base_de_datos
-Delete=E&liminar
-Edit=&Editar
-# Bibtex
-Edit_entry=&Editar_registro
-Edit_preamble=Editar_&preámbulo
-Edit_strings=Editar_&cadenas
-Export=&Exportar
-Export_selected_entries_to_clipboard=&Exportar_registros_seleccionados_al_portapapeles
-Fetch_Medline=Importar_&Medline
-
-# Menu names
-File=&Archivo
-Find_And_Fix=Buscar_y_reemplazar
-Find_and_remove_exact_duplicates=Buscar_y_eliminar_&duplicados_exactos
-Find_duplicates=&Buscar_duplicados
-Help=&Ayuda
-Help_contents=&Contenido_de_la_ayuda
-Highlight_groups_matching_all_selected_entries=Resaltar_los_grupos_donde_coincidan_todos_los_registros_seleccionados
-Highlight_groups_matching_any_selected_entry=Resaltar_los_grupos_donde_coincida_cualquier_registro_seleccionado
-Incremental_search=&Búsqueda_incremental
-
-Insert_selected_citations_into_Emacs=Insertar_citas_seleccionadas_en_&Emacs
-Insert_selected_citations_into_LatexEditor=Insertar_citas_seleccionadas_en_Editor_de_LaTeX
-Insert_selected_citations_into_LyX/Kile=Insertar_citas_seleccionadas_en_&LyX/Kile
-Insert_selected_citations_into_WinEdt=Insertar_citas_seleccionadas_en_&WinEdt
-Integrity_check=Verificar_Integridad
-# Help
-JabRef_help=&Ayuda_de_JabRef
-Load_session=Ca&rgar_sesión
-Manage_content_selectors=Administrar_selectores_de_&contenido
-Manage_custom_exports=Administrar_&exportaciones_personalizadas
-Manage_custom_imports=Administrar_&importaciones_personalizadas
-
-Manage_journal_abbreviations=
-
-Mark_entries=&Marcar_registros
-# File menu
-New_database=&Nueva_base_de_datos
-# Menu BibTeX (BibTeX)
-New_entry=Nu&evo_registro
-New_entry...=&Nuevo_registro_...
-New_entry_from_plain_text=Nue&vo_registro_desde_texto_sin_formato
-New_subdatabase_based_on_AUX_file=Nueva_sub-base_de_datos_a_partir_de_archivo_AU&X
-# View
-Next_tab=Pestaña_&siguiente
-Open_database=&Abrir_base_de_datos
-Open_PDF_or_PS=Abrir_&PDF_o_PS
-Open_URL_or_DOI=Abrir_&URL_o_DOI
-Options=&Opciones
-Paste=&Pegar
-# Options
-Preferences=&Preferencias
-Previous_tab=&Pestaña_anterior
-Quit=&Salir
-Recent_files=Bases_de_datos_&recientes
-Redo=&Rehacer
-Replace_string=&Reemplazar_cadena
-Save_database=&Guardar_base_de_datos
-Save_database_as_...=Gu&ardar_base_de_datos_como_...
-Save_selected_as_...=Guardar_se&leccionados_como_...
-Save_session=Guardar_sesión
-# Tools
-Search=&Buscar
-Search_IEEEXplore=Buscar_IEEEXplore
-Select_all=Seleccionar_&todos
-Set_up_general_fields=Establecer_&campos_generales
-Show_error_console=Mostrar_consola_de_error
-
-Sort_tabs=&Ordenar_pestañas
-Switch_preview_layout=&Intercambiar_vista_anterior
-Synchronize_PDF_links=Sincronizar_vínculos_a_PDF
-Synchronize_PS_links=Sincronizar_vínculos_a_PS
-# Export menu
-Tab-separated_file=&Archivo_separado_por_tabulador
-Toggle_entry_preview=A&ctivar/Desactivar_previsualización_de_registro
-Toggle_groups_interface=Activar/Desactivar_ventana_de_&grupos
-Tools=&Herramientas
-Unabbreviate_journal_names=Quitar_abreviatción_de_nombres_de_journal
-# Edit
-Undo=&Deshacer
-Unmark_all=Anular_selección_de_todos_los_registros
-Unmark_entries=Anular_selecció&n__de_registros
-View=&Ver
-Web_search=Búsqueda_Web
-Import_into_new_database=Importar_a_una_nueva_base_de_datos
-Import_into_current_database=Importar_a_la_base_de_datos_actual
-
-Scan_database...=E&xplorar_base_de_datos...
-
-Push_entries_to_external_application_(%0)=Agregar_registros_a_aplicación_externa_(%0)
-Write_XMP-metadata_to_PDFs=Escribir_metadatos_XMP_a_PDF
-
-Set/clear_fields=Establecer/borrar_campos
-
-Export_selected_entries=Exportar_registros_seleccionados
-Fetch_ArXiv.org=Importar_ArXiv.org
-Sessions=Sesiones
-
-Save_all=Guardar_todo
-
-Upgrade_external_links=Actualizar_vínculos_externos
-Manage_external_file_types=Administrar_tipos_de_archivo_externos
-
-Open_file=Abrir_archivo
-Plugins=
-Connect_to_external_SQL_database=
-Export_to_external_SQL_database=
-Search_JSTOR=
-Fetch_SPIRES=
-Fetch_INSPIRE=
-Search_Medline=
-
-Import_from_external_SQL_database=
-Focus_entry_table=
-
-Search_ACM_Portal=
-
-Increase_table_font_size=
-Decrease_table_font_size=
-Forward=
-Back=
-
-Manage_plugins=
-Look_up_full_text_document=
-Set/clear/rename_fields=
-
-Search_ScienceDirect=
-Mark_specific_color=
-Resolve_duplicate_BibTeX_keys=
-Minimize_to_system_tray=
-Legacy_tools...=
-Copy_BibTeX_key_and_title=
-
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+Abbreviate_journal_names_(ISO)=Abreviar_nombres_de_journals_(ISO)
+Abbreviate_journal_names_(MEDLINE)=Abreviar_nombres_de_journal_(MEDLINE)
+About_JabRef=&Acerca_de_JabRef
+Append_database=&Añadir_base_de_datos
+Autogenerate_BibTeX_keys=&Autogenerar_claves_de_BibTeX
+BibTeX=&BibTeX
+Close_database=&Cerrar_base_de_datos
+Copy=C&opiar
+Copy_\\cite{BibTeX_key}=Copiar_\\c&ita_{clave_BibTeX}
+Copy_BibTeX_key=Copiar_clave_&BibTeX
+Custom_export=E&xportación_Personalizada
+Custom_importers=Importadores_Personalizados
+Customize_entry_types=&Personalizar_tipos_de_entrada
+Cut=&Cortar
+Database_properties=&Propiedades_de_la_base_de_datos
+Delete=E&liminar
+Edit=&Editar
+# Bibtex
+Edit_entry=&Editar_registro
+Edit_preamble=Editar_&preámbulo
+Edit_strings=Editar_&cadenas
+Export=&Exportar
+Export_selected_entries_to_clipboard=&Exportar_registros_seleccionados_al_portapapeles
+Fetch_Medline=Importar_&Medline
+
+# Menu names
+File=&Archivo
+Find_And_Fix=Buscar_y_reemplazar
+Find_and_remove_exact_duplicates=Buscar_y_eliminar_&duplicados_exactos
+Find_duplicates=&Buscar_duplicados
+Help=&Ayuda
+Help_contents=&Contenido_de_la_ayuda
+Highlight_groups_matching_all_selected_entries=Resaltar_los_grupos_donde_coincidan_todos_los_registros_seleccionados
+Highlight_groups_matching_any_selected_entry=Resaltar_los_grupos_donde_coincida_cualquier_registro_seleccionado
+Incremental_search=&Búsqueda_incremental
+
+Insert_selected_citations_into_Emacs=Insertar_citas_seleccionadas_en_&Emacs
+Insert_selected_citations_into_LatexEditor=Insertar_citas_seleccionadas_en_Editor_de_LaTeX
+Insert_selected_citations_into_LyX/Kile=Insertar_citas_seleccionadas_en_&LyX/Kile
+Insert_selected_citations_into_WinEdt=Insertar_citas_seleccionadas_en_&WinEdt
+Integrity_check=Verificar_Integridad
+# Help
+JabRef_help=&Ayuda_de_JabRef
+Load_session=Ca&rgar_sesión
+Manage_content_selectors=Administrar_selectores_de_&contenido
+Manage_custom_exports=Administrar_&exportaciones_personalizadas
+Manage_custom_imports=Administrar_&importaciones_personalizadas
+
+Manage_journal_abbreviations=
+
+Mark_entries=&Marcar_registros
+# File menu
+New_database=&Nueva_base_de_datos
+# Menu BibTeX (BibTeX)
+New_entry=Nu&evo_registro
+New_entry...=&Nuevo_registro_...
+New_entry_from_plain_text=Nue&vo_registro_desde_texto_sin_formato
+New_subdatabase_based_on_AUX_file=Nueva_sub-base_de_datos_a_partir_de_archivo_AU&X
+# View
+Next_tab=Pestaña_&siguiente
+Open_database=&Abrir_base_de_datos
+Open_PDF_or_PS=Abrir_&PDF_o_PS
+Open_URL_or_DOI=Abrir_&URL_o_DOI
+Options=&Opciones
+Paste=&Pegar
+# Options
+Preferences=&Preferencias
+Previous_tab=&Pestaña_anterior
+Quit=&Salir
+Recent_files=Bases_de_datos_&recientes
+Redo=&Rehacer
+Replace_string=&Reemplazar_cadena
+Save_database=&Guardar_base_de_datos
+Save_database_as_...=Gu&ardar_base_de_datos_como_...
+Save_selected_as_...=Guardar_se&leccionados_como_...
+Save_session=Guardar_sesión
+# Tools
+Search=&Buscar
+Search_IEEEXplore=Buscar_IEEEXplore
+Select_all=Seleccionar_&todos
+Set_up_general_fields=Establecer_&campos_generales
+Show_error_console=Mostrar_consola_de_error
+
+Sort_tabs=&Ordenar_pestañas
+Switch_preview_layout=&Intercambiar_vista_anterior
+Synchronize_PDF_links=Sincronizar_vínculos_a_PDF
+Synchronize_PS_links=Sincronizar_vínculos_a_PS
+# Export menu
+Tab-separated_file=&Archivo_separado_por_tabulador
+Toggle_entry_preview=A&ctivar/Desactivar_previsualización_de_registro
+Toggle_groups_interface=Activar/Desactivar_ventana_de_&grupos
+Tools=&Herramientas
+Unabbreviate_journal_names=Quitar_abreviatción_de_nombres_de_journal
+# Edit
+Undo=&Deshacer
+Unmark_all=Anular_selección_de_todos_los_registros
+Unmark_entries=Anular_selecció&n__de_registros
+View=&Ver
+Web_search=Búsqueda_Web
+Import_into_new_database=Importar_a_una_nueva_base_de_datos
+Import_into_current_database=Importar_a_la_base_de_datos_actual
+
+Scan_database...=E&xplorar_base_de_datos...
+
+Push_entries_to_external_application_(%0)=Agregar_registros_a_aplicación_externa_(%0)
+Write_XMP-metadata_to_PDFs=Escribir_metadatos_XMP_a_PDF
+
+Set/clear_fields=Establecer/borrar_campos
+
+Export_selected_entries=Exportar_registros_seleccionados
+Fetch_ArXiv.org=Importar_ArXiv.org
+Sessions=Sesiones
+
+Save_all=Guardar_todo
+
+Upgrade_external_links=Actualizar_vínculos_externos
+Manage_external_file_types=Administrar_tipos_de_archivo_externos
+
+Open_file=Abrir_archivo
+Plugins=
+Connect_to_external_SQL_database=
+Export_to_external_SQL_database=
+Search_JSTOR=
+Fetch_SPIRES=
+Fetch_INSPIRE=
+Search_Medline=
+
+Import_from_external_SQL_database=
+Focus_entry_table=
+
+Search_ACM_Portal=
+
+Increase_table_font_size=
+Decrease_table_font_size=
+Forward=
+Back=
+
+Manage_plugins=
+Look_up_full_text_document=
+Set/clear/rename_fields=
+
+Search_ScienceDirect=
+Mark_specific_color=
+Resolve_duplicate_BibTeX_keys=
+Minimize_to_system_tray=
+Legacy_tools...=
+Copy_BibTeX_key_and_title=
+
 Cleanup_entries=
\ No newline at end of file
diff --git a/src/resource/Menu_fr.properties b/src/resource/Menu_fr.properties
index 5837686..f187ded 100644
--- a/src/resource/Menu_fr.properties
+++ b/src/resource/Menu_fr.properties
@@ -1,137 +1,137 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-Abbreviate_journal_names_(ISO)=Abr\u00e9ger_les_noms_de_journaux_(IS&O)
-Abbreviate_journal_names_(MEDLINE)=Abr\u00e9ger_les_noms_de_journaux_(MEDLI&NE)
-About_JabRef=A_&propos_de_JabRef
-Append_database=&Joindre_\u00e0_la_base
-Autogenerate_BibTeX_keys=Cr\u00e9ation_&automatique_des_cl\u00e9s_BibTeX
-BibTeX=&BibTeX
-Close_database=&Fermer_la_base
-Copy=Co&pier
-Copy_\\cite{BibTeX_key}=Copier_\\c&ite{cl\u00e9_BibTeX}
-Copy_BibTeX_key=Copier_la_cl\u00e9_&BibTeX
-Custom_export=E&xportation_personnalis\u00e9e
-Custom_importers=Custom_importers
-Customize_entry_types=Personnaliser_les_&types_d'entr\u00e9es
-Cut=&Couper
-Database_properties=&Propri\u00e9t\u00e9s_de_la_base_de_donn\u00e9es
-Delete=&Supprimer
-Edit=&Edition
-Edit_entry=&Editer_l'entr\u00e9e
-Edit_preamble=Editer_le_&pr\u00e9ambule
-Edit_strings=Editer_les_c&ha\u00eenes
-Export=&Exporter
-Export_selected_entries_to_clipboard=Exporter_les_entr\u00e9es_s\u00e9lectionn\u00e9es_vers_le_presse-papiers
-Fetch_Medline=&Medline
-File=&Fichier
-Find_And_Fix=Cherche_et_r\u00e9pare
-Find_and_remove_exact_duplicates=Chercher_et_&supprimer_les_doublons_identiques
-Find_duplicates=Chercher_les_&doublons
-Help=Ai&de
-Help_contents=&Contenu_de_l'aide
-Highlight_groups_matching_all_selected_entries=Surligner_les_groupes_correspondant_\u00e0_&toutes_les_entr\u00e9es_s\u00e9lectionn\u00e9es
-Highlight_groups_matching_any_selected_entry=Surligner_les_groupes_correspondant_\u00e0_au_moins_&une_des_entr\u00e9es_s\u00e9lectionn\u00e9es
-Incremental_search=Recherche_&incr\u00e9mentale
-
-Insert_selected_citations_into_Emacs=Ins\u00e9rer_les_citations_s\u00e9lectionn\u00e9es_dans_Emacs
-Insert_selected_citations_into_LatexEditor=Ins\u00e9rer_les_citations_s\u00e9lectionn\u00e9es_dans_LatexEditor
-Insert_selected_citations_into_LyX/Kile=Envoyer_les_citations_s\u00e9lectionn\u00e9es_dans_&LyX/Kile
-Insert_selected_citations_into_WinEdt=Envoyer_les_citations_s\u00e9lectionn\u00e9es_dans_&WinEdt
-Integrity_check=V\u00e9rification_d'int\u00e9grit\u00e9
-JabRef_help=&Aide_de_JabRef
-Load_session=&Charger_session
-Manage_content_selectors=&G\u00e9rer_les_s\u00e9lecteurs_de_contenu
-Manage_custom_exports=&G\u00e9rer_les_exportations_personnalis\u00e9es
-Manage_custom_imports=G\u00e9rer_les_&importations_personnalis\u00e9es
-Manage_journal_abbreviations=G\u00e9rer_les_abr\u00e9viations_de_&journaux
-Mark_entries=Etiqueter_des_&entr\u00e9es
-New_database=&Nouvelle_base
-New_entry=N&ouvelle_entr\u00e9e
-New_entry...=&Nouvelle_entr\u00e9e...
-New_entry_from_plain_text=Nouvelle_entr\u00e9e_depuis_&texte_brut
-New_subdatabase_based_on_AUX_file=Nouveau_Fichier_BibTeX_depuis_fichier_AU&X
-Next_tab=Onglet_&suivant
-Open_database=&Ouvrir_base
-Open_PDF_or_PS=Ouvrir_&PDF_ou_PS
-Open_URL_or_DOI=Ouvrir_&URL_ou_DOI
-Options=Opt&ions
-Paste=C&oller
-Preferences=&Pr\u00e9f\u00e9rences
-Previous_tab=Onglet_&pr\u00e9c\u00e9dent
-Quit=&Quitter
-Recent_files=Fichiers_&r\u00e9cents
-Redo=&R\u00e9p\u00e9ter
-Replace_string=Remplacer_la_c&ha\u00eene
-Save_database=Enregistrer_la_base
-Save_database_as_...=Enregistrer_la_base_sous_...
-Save_selected_as_...=Enregistrer_la_s\u00e9&lection_sous_...
-Save_session=Enregistrer_la_session
-Search=&Recherche
-Search_IEEEXplore=IEEEXplore
-Select_all=&Tout_s\u00e9lectionner
-Set_up_general_fields=Configurer_les_champs_&g\u00e9n\u00e9raux
-Show_error_console=Afficher_la_console_d'erreur
-Sort_tabs=Trier_les_onglets
-Switch_preview_layout=Aper\u00e7u_1/Aper\u00e7u_2
-Synchronize_PDF_links=Synchroniser_les_liens_PD&F
-Synchronize_PS_links=Synchroniser_les_liens_P&S
-Tab-separated_file=Fichier_-_s\u00e9paration_par_&tabulation
-Toggle_entry_preview=&Afficher/masquer_l'aper\u00e7u
-Toggle_groups_interface=Afficher/masquer_l'interface_des_&groupes
-Tools=&Outils
-Unabbreviate_journal_names=D\u00e9&velopper_les_noms_de_journaux
-Undo=&Annuler
-Unmark_all=To&ut_d\u00e9s\u00e9tiqueter
-Unmark_entries=&D\u00e9s\u00e9tiqueter_des_entr\u00e9es
-View=&Affichage
-Web_search=&Recherche_internet
-Import_into_new_database=Importer_dans_une_nouvelle_base
-Import_into_current_database=Importer_dans_la_base_courante
-
-Scan_database...=Parcours_de_la_base_de_donn\u00e9es...
-
-Push_entries_to_external_application_(%0)=Envoyer_l'entr\u00e9e_vers_l'application_externe_(%0)
-Write_XMP-metadata_to_PDFs=Ecrire_les_m\u00e9tadonn\u00e9es_XMP_dans_les_PDFs
-
-Set/clear_fields=Configurer/vider_les_champs
-
-Export_selected_entries=Exporter_les_entr\u00e9es_s\u00e9lectionn\u00e9es
-
-Fetch_ArXiv.org=ArXiv.org
-Sessions=Sessions
-Save_all=Enregistrer_tout
-
-Upgrade_external_links=Mettre_\u00e0_jour_les_liens_externes
-Manage_external_file_types=G\u00e9rer_les_types_de_fichiers_externes
-
-Open_file=Ouvrir_un_fichier
-Plugins=&Greffons
-Connect_to_external_SQL_database=Se_connecter_\u00e0_une_base_SQL_externe
-Export_to_external_SQL_database=Exporter_vers_une_base_SQL_externe
-Search_JSTOR=JSTOR
-Fetch_SPIRES=SPIRES
-Fetch_INSPIRE=INSPIRE
-Search_Medline=Medline
-
-Import_from_external_SQL_database=Importer_depuis_une_base_SQL_externe
-Focus_entry_table=Curseur_dans_la_table_des_entr\u00e9es
-Search_ACM_Portal=Portail_ACM
-
-Increase_table_font_size=&Augmenter_la_taille_de_police_de_la_table
-Decrease_table_font_size=&Diminuer_la_taille_de_police_de_la_table
-Forward=Suivant
-Back=Pr\u00e9c\u00e9dent
-
-Manage_plugins=G\u00e9rer_les_greffons
-Look_up_full_text_document=T\u00e9l\u00e9charger_le_document_cit\u00e9
-Set/clear/rename_fields=Configurer/vider/renommer_des_champs
-
-Search_ScienceDirect=ScienceDirect
-Mark_specific_color=Marquer_d'une_couleur_sp\u00e9cifique
-Resolve_duplicate_BibTeX_keys= Traitement_des_clefs_BibTeX_dupliqu\u00e9es
-Minimize_to_system_tray=R\u00e9duire_dans_la_zone_de_notification
-Legacy_tools...=Anciens_outils...
-Copy_BibTeX_key_and_title=Copier_la_clef_BibTeX_et_le_titre
-
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+Abbreviate_journal_names_(ISO)=Abr\u00e9ger_les_noms_de_journaux_(IS&O)
+Abbreviate_journal_names_(MEDLINE)=Abr\u00e9ger_les_noms_de_journaux_(MEDLI&NE)
+About_JabRef=A_&propos_de_JabRef
+Append_database=&Joindre_\u00e0_la_base
+Autogenerate_BibTeX_keys=Cr\u00e9ation_&automatique_des_cl\u00e9s_BibTeX
+BibTeX=&BibTeX
+Close_database=&Fermer_la_base
+Copy=Co&pier
+Copy_\\cite{BibTeX_key}=Copier_\\c&ite{cl\u00e9_BibTeX}
+Copy_BibTeX_key=Copier_la_cl\u00e9_&BibTeX
+Custom_export=E&xportation_personnalis\u00e9e
+Custom_importers=Custom_importers
+Customize_entry_types=Personnaliser_les_&types_d'entr\u00e9es
+Cut=&Couper
+Database_properties=&Propri\u00e9t\u00e9s_de_la_base_de_donn\u00e9es
+Delete=&Supprimer
+Edit=&Edition
+Edit_entry=&Editer_l'entr\u00e9e
+Edit_preamble=Editer_le_&pr\u00e9ambule
+Edit_strings=Editer_les_c&ha\u00eenes
+Export=&Exporter
+Export_selected_entries_to_clipboard=Exporter_les_entr\u00e9es_s\u00e9lectionn\u00e9es_vers_le_presse-papiers
+Fetch_Medline=&Medline
+File=&Fichier
+Find_And_Fix=Cherche_et_r\u00e9pare
+Find_and_remove_exact_duplicates=Chercher_et_&supprimer_les_doublons_identiques
+Find_duplicates=Chercher_les_&doublons
+Help=Ai&de
+Help_contents=&Contenu_de_l'aide
+Highlight_groups_matching_all_selected_entries=Surligner_les_groupes_correspondant_\u00e0_&toutes_les_entr\u00e9es_s\u00e9lectionn\u00e9es
+Highlight_groups_matching_any_selected_entry=Surligner_les_groupes_correspondant_\u00e0_au_moins_&une_des_entr\u00e9es_s\u00e9lectionn\u00e9es
+Incremental_search=Recherche_&incr\u00e9mentale
+
+Insert_selected_citations_into_Emacs=Ins\u00e9rer_les_citations_s\u00e9lectionn\u00e9es_dans_Emacs
+Insert_selected_citations_into_LatexEditor=Ins\u00e9rer_les_citations_s\u00e9lectionn\u00e9es_dans_LatexEditor
+Insert_selected_citations_into_LyX/Kile=Envoyer_les_citations_s\u00e9lectionn\u00e9es_dans_&LyX/Kile
+Insert_selected_citations_into_WinEdt=Envoyer_les_citations_s\u00e9lectionn\u00e9es_dans_&WinEdt
+Integrity_check=V\u00e9rification_d'int\u00e9grit\u00e9
+JabRef_help=&Aide_de_JabRef
+Load_session=&Charger_session
+Manage_content_selectors=&G\u00e9rer_les_s\u00e9lecteurs_de_contenu
+Manage_custom_exports=&G\u00e9rer_les_exportations_personnalis\u00e9es
+Manage_custom_imports=G\u00e9rer_les_&importations_personnalis\u00e9es
+Manage_journal_abbreviations=G\u00e9rer_les_abr\u00e9viations_de_&journaux
+Mark_entries=Etiqueter_des_&entr\u00e9es
+New_database=&Nouvelle_base
+New_entry=N&ouvelle_entr\u00e9e
+New_entry...=&Nouvelle_entr\u00e9e...
+New_entry_from_plain_text=Nouvelle_entr\u00e9e_depuis_&texte_brut
+New_subdatabase_based_on_AUX_file=Nouveau_Fichier_BibTeX_depuis_fichier_AU&X
+Next_tab=Onglet_&suivant
+Open_database=&Ouvrir_base
+Open_PDF_or_PS=Ouvrir_&PDF_ou_PS
+Open_URL_or_DOI=Ouvrir_&URL_ou_DOI
+Options=Opt&ions
+Paste=C&oller
+Preferences=&Pr\u00e9f\u00e9rences
+Previous_tab=Onglet_&pr\u00e9c\u00e9dent
+Quit=&Quitter
+Recent_files=Fichiers_&r\u00e9cents
+Redo=&R\u00e9p\u00e9ter
+Replace_string=Remplacer_la_c&ha\u00eene
+Save_database=Enregistrer_la_base
+Save_database_as_...=Enregistrer_la_base_sous_...
+Save_selected_as_...=Enregistrer_la_s\u00e9&lection_sous_...
+Save_session=Enregistrer_la_session
+Search=&Recherche
+Search_IEEEXplore=IEEEXplore
+Select_all=&Tout_s\u00e9lectionner
+Set_up_general_fields=Configurer_les_champs_&g\u00e9n\u00e9raux
+Show_error_console=Afficher_la_console_d'erreur
+Sort_tabs=Trier_les_onglets
+Switch_preview_layout=Aper\u00e7u_1/Aper\u00e7u_2
+Synchronize_PDF_links=Synchroniser_les_liens_PD&F
+Synchronize_PS_links=Synchroniser_les_liens_P&S
+Tab-separated_file=Fichier_-_s\u00e9paration_par_&tabulation
+Toggle_entry_preview=&Afficher/masquer_l'aper\u00e7u
+Toggle_groups_interface=Afficher/masquer_l'interface_des_&groupes
+Tools=&Outils
+Unabbreviate_journal_names=D\u00e9&velopper_les_noms_de_journaux
+Undo=&Annuler
+Unmark_all=To&ut_d\u00e9s\u00e9tiqueter
+Unmark_entries=&D\u00e9s\u00e9tiqueter_des_entr\u00e9es
+View=&Affichage
+Web_search=&Recherche_internet
+Import_into_new_database=Importer_dans_une_nouvelle_base
+Import_into_current_database=Importer_dans_la_base_courante
+
+Scan_database...=Parcours_de_la_base_de_donn\u00e9es...
+
+Push_entries_to_external_application_(%0)=Envoyer_l'entr\u00e9e_vers_l'application_externe_(%0)
+Write_XMP-metadata_to_PDFs=Ecrire_les_m\u00e9tadonn\u00e9es_XMP_dans_les_PDFs
+
+Set/clear_fields=Configurer/vider_les_champs
+
+Export_selected_entries=Exporter_les_entr\u00e9es_s\u00e9lectionn\u00e9es
+
+Fetch_ArXiv.org=ArXiv.org
+Sessions=Sessions
+Save_all=Enregistrer_tout
+
+Upgrade_external_links=Mettre_\u00e0_jour_les_liens_externes
+Manage_external_file_types=G\u00e9rer_les_types_de_fichiers_externes
+
+Open_file=Ouvrir_un_fichier
+Plugins=&Greffons
+Connect_to_external_SQL_database=Se_connecter_\u00e0_une_base_SQL_externe
+Export_to_external_SQL_database=Exporter_vers_une_base_SQL_externe
+Search_JSTOR=JSTOR
+Fetch_SPIRES=SPIRES
+Fetch_INSPIRE=INSPIRE
+Search_Medline=Medline
+
+Import_from_external_SQL_database=Importer_depuis_une_base_SQL_externe
+Focus_entry_table=Curseur_dans_la_table_des_entr\u00e9es
+Search_ACM_Portal=Portail_ACM
+
+Increase_table_font_size=&Augmenter_la_taille_de_police_de_la_table
+Decrease_table_font_size=&Diminuer_la_taille_de_police_de_la_table
+Forward=Suivant
+Back=Pr\u00e9c\u00e9dent
+
+Manage_plugins=G\u00e9rer_les_greffons
+Look_up_full_text_document=T\u00e9l\u00e9charger_le_document_cit\u00e9
+Set/clear/rename_fields=Configurer/vider/renommer_des_champs
+
+Search_ScienceDirect=ScienceDirect
+Mark_specific_color=Marquer_d'une_couleur_sp\u00e9cifique
+Resolve_duplicate_BibTeX_keys= Traitement_des_clefs_BibTeX_dupliqu\u00e9es
+Minimize_to_system_tray=R\u00e9duire_dans_la_zone_de_notification
+Legacy_tools...=Anciens_outils...
+Copy_BibTeX_key_and_title=Copier_la_clef_BibTeX_et_le_titre
+
 Cleanup_entries=Nettoyage_des_entr\u00e9es
\ No newline at end of file
diff --git a/src/resource/Menu_in.properties b/src/resource/Menu_in.properties
index e4d7f31..364953e 100644
--- a/src/resource/Menu_in.properties
+++ b/src/resource/Menu_in.properties
@@ -1,125 +1,125 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-Abbreviate_journal_names_(ISO)=Singkatan_nama_jurnal_(ISO)
-Abbreviate_journal_names_(MEDLINE)=Singkatan_nama_jurnal_(MEDLINE)
-About_JabRef=Tentang_JabRef
-Append_database=Tambah_basisdata
-Autogenerate_BibTeX_keys=Otomatis_kunci_BibTeX
-Back=Mundur
-BibTeX=BibTe&X
-Close_database=Tutup_database
-Connect_to_external_SQL_database=Hubung_ke_basisdata_SQL_eksternal
-Copy=Salin
-Copy_\\cite{BibTeX_key}=Salin_\\cite{kunci_BibTeX}
-Copy_BibTeX_key=Salin_kunci_BibTeX
-Custom_export=Ekspor_atursendiri
-Custom_importers=Pengimpor_atursendiri
-Customize_entry_types=Tipe_entri_atursendiri
-Cut=Potong
-Database_properties=Properti_basisdata
-Decrease_table_font_size=Kecilkan_ukuran_huruf_tabel
-Delete=Hapus
-Edit=&Sunting
-Edit_entry=Sunting_entri
-Edit_preamble=Sunting_preamble
-Edit_strings=Sunting_string
-Export=Ekspor
-Export_selected_entries=Ekspor_entri_pilihan
-Export_selected_entries_to_clipboard=Ekspor_entri_pilihan_ke_papanklip
-Export_to_external_SQL_database=Ekspor_ke_basisdata_SQL_eksternal
-Fetch_ArXiv.org=Ambil_data_ArXiv.org
-Fetch_Medline=Ambil_data_Medline
-Fetch_SPIRES=Ambil_data_SPIRES
-Fetch_INSPIRE=Ambil_data_INSPIRE
-File=&Berkas
-Find_And_Fix=Temukan_dan_Tetapkan
-Find_and_remove_exact_duplicates=Temiukan_dan_hapus_data_yang_sama
-Find_duplicates=Temukan_data_yg_sama
-Focus_entry_table=Fokus_tabel_entri
-Forward=Maju
-Help=Bant&uan
-Help_contents=Daftar_Isi_Bantuan
-Highlight_groups_matching_all_selected_entries=Tandai_semua_entri_grup_yang_sesuai
-Highlight_groups_matching_any_selected_entry=Tandai_entri_grup_yang_sesuai
-Import_from_external_SQL_database=Impor_dari_basisdata_SQL_eksternal
-Import_into_current_database=Impor_ke_basisdata_sekarang
-Import_into_new_database=Impor_ke_basisdata_baru
-Increase_table_font_size=Besarkan_ukuran_huruf_tabel
-Incremental_search=Pencarian_bertahap
-Insert_selected_citations_into_Emacs=Sisipkan_acuan_pilihan_ke_Emacs
-Insert_selected_citations_into_LatexEditor=Sisipkan_acuan_pilihan_ke_LatexEditor
-Insert_selected_citations_into_LyX/Kile=Sisipkan_acuan_pilihan_ke_LyX/Kile
-Insert_selected_citations_into_WinEdt=Sisipkan_acuan_pilihan_ke_WinEdt
-Integrity_check=Periksa_Integritas
-JabRef_help=Bantuan_JabRef
-Load_session=Muat_Sesi
-Look_up_full_text_document=Lihat_dokumen_teks_lengkap
-Manage_content_selectors=Pengaturan_pengisian_kata
-Manage_custom_exports=Pengaturan_ekspor_atursendiri
-Manage_custom_imports=Pengaturan_impor_atursendiri
-Manage_external_file_types=Pengaturan_tipe_berkas_eksternal
-Manage_journal_abbreviations=Pengaturan_singkatan_jurnal
-Manage_plugins=Pengaturan_plugin
-Mark_entries=Tandai_entri
-Mark_specific_color=Tandai_dengan_warna
-New_database=Basisdata_baru
-New_entry=Entri_baru
-New_entry...=Entri_baru...
-New_entry_from_plain_text=Entri_baru_dari_teks_biasa
-New_subdatabase_based_on_AUX_file=Anak_basisdata_baru_dari_berkas_AUX
-Next_tab=Tab_berikutnya
-Open_database=Buka_basisdata
-Open_file=Buka_berkas
-Open_PDF_or_PS=Buka_PDF_atau_PS
-Open_URL_or_DOI=Buka_URL_atau_DOI
-Options=Pen&gaturan
-Paste=Tempelkan
-Plugins=&Plugin
-Preferences=Preferensi
-Previous_tab=Tab_sebelumnya
-Push_entries_to_external_application_(%0)=Kirim_entri_ke_program_eksternal_(%0)
-Quit=Keluar
-Recent_files=Berkas_terkini
-Redo=Jadi_lagi
-Replace_string=Ganti_string
-Save_all=Simpan_semua
-Save_database=Simpan_basisdata
-Save_database_as_...=Simpan_basis_data_sebagai...
-Save_selected_as_...=Simpan_pilihan_sebagai...
-Save_session=Simpan_sesi
-Scan_database...=Pindai_basisdata...
-Search=Cari
-Search_ACM_Portal=Pencarian_Portal_ACM
-Search_IEEEXplore=Pencarian_IEEEXplore
-Search_JSTOR=Pencarian_JSTOR
-Search_Medline=Pencarian_Medline
-Search_ScienceDirect=Pencarian_ScienceDirect
-Select_all=Pilih_semua
-Sessions=Sesi
-Set/clear/rename_fields=Tetapkan/bersihkan/namai_bidang
-Set/clear_fields=Tetapkan/bersihkan_bidang
-Set_up_general_fields=Penetapan_bidang_umum
-Show_error_console=Tampilkan_pesan_kesalahan
-Sort_tabs=Urutkan_tab
-Switch_preview_layout=Ubah_tataletak_tampilan
-Synchronize_PDF_links=Sesuaikan_tautan_PDF
-Synchronize_PS_links=Sesuaiakan_tautan_PS
-Tab-separated_file=Berkas_berpemisah_tab
-Toggle_entry_preview=Tampilkan_entri
-Toggle_groups_interface=Aktifkan_antarmuka_grup
-Tools=&AlatBantuan
-Unabbreviate_journal_names=Nama_jurnal_tidak_disingkat
-Undo=Tidak_jadi
-Unmark_all=Lepas_tanda_semua
-Unmark_entries=Lepas_tanda_entri
-Upgrade_external_links=Perbarui_tautan_eksternal
-View=&Tampilan
-Web_search=Pencarian_&Web
-Write_XMP-metadata_to_PDFs=Tulis_metadata_XMP_ke_PSF
-Resolve_duplicate_BibTeX_keys=Menyelesaikan_kesamaan_kunci_BibTeX
-Minimize_to_system_tray=
-Legacy_tools...=
-Copy_BibTeX_key_and_title=
-
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+Abbreviate_journal_names_(ISO)=Singkatan_nama_jurnal_(ISO)
+Abbreviate_journal_names_(MEDLINE)=Singkatan_nama_jurnal_(MEDLINE)
+About_JabRef=Tentang_JabRef
+Append_database=Tambah_basisdata
+Autogenerate_BibTeX_keys=Otomatis_kunci_BibTeX
+Back=Mundur
+BibTeX=BibTe&X
+Close_database=Tutup_database
+Connect_to_external_SQL_database=Hubung_ke_basisdata_SQL_eksternal
+Copy=Salin
+Copy_\\cite{BibTeX_key}=Salin_\\cite{kunci_BibTeX}
+Copy_BibTeX_key=Salin_kunci_BibTeX
+Custom_export=Ekspor_atursendiri
+Custom_importers=Pengimpor_atursendiri
+Customize_entry_types=Tipe_entri_atursendiri
+Cut=Potong
+Database_properties=Properti_basisdata
+Decrease_table_font_size=Kecilkan_ukuran_huruf_tabel
+Delete=Hapus
+Edit=&Sunting
+Edit_entry=Sunting_entri
+Edit_preamble=Sunting_preamble
+Edit_strings=Sunting_string
+Export=Ekspor
+Export_selected_entries=Ekspor_entri_pilihan
+Export_selected_entries_to_clipboard=Ekspor_entri_pilihan_ke_papanklip
+Export_to_external_SQL_database=Ekspor_ke_basisdata_SQL_eksternal
+Fetch_ArXiv.org=Ambil_data_ArXiv.org
+Fetch_Medline=Ambil_data_Medline
+Fetch_SPIRES=Ambil_data_SPIRES
+Fetch_INSPIRE=Ambil_data_INSPIRE
+File=&Berkas
+Find_And_Fix=Temukan_dan_Tetapkan
+Find_and_remove_exact_duplicates=Temiukan_dan_hapus_data_yang_sama
+Find_duplicates=Temukan_data_yg_sama
+Focus_entry_table=Fokus_tabel_entri
+Forward=Maju
+Help=Bant&uan
+Help_contents=Daftar_Isi_Bantuan
+Highlight_groups_matching_all_selected_entries=Tandai_semua_entri_grup_yang_sesuai
+Highlight_groups_matching_any_selected_entry=Tandai_entri_grup_yang_sesuai
+Import_from_external_SQL_database=Impor_dari_basisdata_SQL_eksternal
+Import_into_current_database=Impor_ke_basisdata_sekarang
+Import_into_new_database=Impor_ke_basisdata_baru
+Increase_table_font_size=Besarkan_ukuran_huruf_tabel
+Incremental_search=Pencarian_bertahap
+Insert_selected_citations_into_Emacs=Sisipkan_acuan_pilihan_ke_Emacs
+Insert_selected_citations_into_LatexEditor=Sisipkan_acuan_pilihan_ke_LatexEditor
+Insert_selected_citations_into_LyX/Kile=Sisipkan_acuan_pilihan_ke_LyX/Kile
+Insert_selected_citations_into_WinEdt=Sisipkan_acuan_pilihan_ke_WinEdt
+Integrity_check=Periksa_Integritas
+JabRef_help=Bantuan_JabRef
+Load_session=Muat_Sesi
+Look_up_full_text_document=Lihat_dokumen_teks_lengkap
+Manage_content_selectors=Pengaturan_pengisian_kata
+Manage_custom_exports=Pengaturan_ekspor_atursendiri
+Manage_custom_imports=Pengaturan_impor_atursendiri
+Manage_external_file_types=Pengaturan_tipe_berkas_eksternal
+Manage_journal_abbreviations=Pengaturan_singkatan_jurnal
+Manage_plugins=Pengaturan_plugin
+Mark_entries=Tandai_entri
+Mark_specific_color=Tandai_dengan_warna
+New_database=Basisdata_baru
+New_entry=Entri_baru
+New_entry...=Entri_baru...
+New_entry_from_plain_text=Entri_baru_dari_teks_biasa
+New_subdatabase_based_on_AUX_file=Anak_basisdata_baru_dari_berkas_AUX
+Next_tab=Tab_berikutnya
+Open_database=Buka_basisdata
+Open_file=Buka_berkas
+Open_PDF_or_PS=Buka_PDF_atau_PS
+Open_URL_or_DOI=Buka_URL_atau_DOI
+Options=Pen&gaturan
+Paste=Tempelkan
+Plugins=&Plugin
+Preferences=Preferensi
+Previous_tab=Tab_sebelumnya
+Push_entries_to_external_application_(%0)=Kirim_entri_ke_program_eksternal_(%0)
+Quit=Keluar
+Recent_files=Berkas_terkini
+Redo=Jadi_lagi
+Replace_string=Ganti_string
+Save_all=Simpan_semua
+Save_database=Simpan_basisdata
+Save_database_as_...=Simpan_basis_data_sebagai...
+Save_selected_as_...=Simpan_pilihan_sebagai...
+Save_session=Simpan_sesi
+Scan_database...=Pindai_basisdata...
+Search=Cari
+Search_ACM_Portal=Pencarian_Portal_ACM
+Search_IEEEXplore=Pencarian_IEEEXplore
+Search_JSTOR=Pencarian_JSTOR
+Search_Medline=Pencarian_Medline
+Search_ScienceDirect=Pencarian_ScienceDirect
+Select_all=Pilih_semua
+Sessions=Sesi
+Set/clear/rename_fields=Tetapkan/bersihkan/namai_bidang
+Set/clear_fields=Tetapkan/bersihkan_bidang
+Set_up_general_fields=Penetapan_bidang_umum
+Show_error_console=Tampilkan_pesan_kesalahan
+Sort_tabs=Urutkan_tab
+Switch_preview_layout=Ubah_tataletak_tampilan
+Synchronize_PDF_links=Sesuaikan_tautan_PDF
+Synchronize_PS_links=Sesuaiakan_tautan_PS
+Tab-separated_file=Berkas_berpemisah_tab
+Toggle_entry_preview=Tampilkan_entri
+Toggle_groups_interface=Aktifkan_antarmuka_grup
+Tools=&AlatBantuan
+Unabbreviate_journal_names=Nama_jurnal_tidak_disingkat
+Undo=Tidak_jadi
+Unmark_all=Lepas_tanda_semua
+Unmark_entries=Lepas_tanda_entri
+Upgrade_external_links=Perbarui_tautan_eksternal
+View=&Tampilan
+Web_search=Pencarian_&Web
+Write_XMP-metadata_to_PDFs=Tulis_metadata_XMP_ke_PSF
+Resolve_duplicate_BibTeX_keys=Menyelesaikan_kesamaan_kunci_BibTeX
+Minimize_to_system_tray=
+Legacy_tools...=
+Copy_BibTeX_key_and_title=
+
 Cleanup_entries=
\ No newline at end of file
diff --git a/src/resource/Menu_it.properties b/src/resource/Menu_it.properties
index 2946ec5..8c59dbb 100644
--- a/src/resource/Menu_it.properties
+++ b/src/resource/Menu_it.properties
@@ -1,146 +1,146 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-Abbreviate_journal_names_(ISO)=Abbrevia_nomi_delle_riviste_(ISO)
-Abbreviate_journal_names_(MEDLINE)=Abbrevia_nomi_delle_riviste_(MEDLINE)
-About_JabRef=&Informazioni_su_JabRef
-Append_database=A&ggiungi_al_database
-Autogenerate_BibTeX_keys=Genera_&automaticamente_le_chiavi_BibTeX
-BibTeX=&BibTeX
-Close_database=C&hiudi_il_database
-Copy=&Copia
-Copy_\\cite{BibTeX_key}=Co&pia_\\cite{chiave_BibTeX}
-Copy_BibTeX_key=C&opia_chiave
-Custom_export=Es&portazione_personalizzata
-Custom_importers=&Filtri_di_importazione_personalizzati
-Customize_entry_types=Personalizza_i_&tipi_di_voci
-Cut=&Taglia
-Database_properties=P&ropriet\u00e0_del_database
-Delete=&Elimina
-Edit=&Modifica
-# Bibtex
-Edit_entry=&Modifica_voce
-Edit_preamble=Modifica_&preambolo
-Edit_strings=Modifica_&stringhe
-Export=&Esporta
-Export_selected_entries_to_clipboard=Esporta_le_righe_selezionate_negli_appunti
-Fetch_Medline=Recupera_da_&Medline
-
-# Menu names
-File=&File
-Find_And_Fix=Ricerca_e_ri&para
-Find_and_remove_exact_duplicates=Ricerca_e_rimuovi_d&uplicati_identici
-Find_duplicates=Ricerca_&duplicati
-Help=&Aiuto
-Help_contents=&Contenuto_dell'aiuto
-Highlight_groups_matching_all_selected_entries=&Evidenzia_i_gruppi_corrispondenti_a_tutte_le_righe_selezionate
-Highlight_groups_matching_any_selected_entry=Evi&denzia_i_gruppi_corrispondenti_alle_righe_selezionate
-Incremental_search=Ricerca_&incrementale
-
-Insert_selected_citations_into_Emacs=Inserisci_le_citazioni_selezionate_in_Emacs
-Insert_selected_citations_into_LatexEditor=Inserisci_le_citazioni_selezionate_in_LatexEditor
-Insert_selected_citations_into_LyX/Kile=Inserisci_le_citazioni_selezionate_in_&LyX/Kile
-Insert_selected_citations_into_WinEdt=Inserisci_le_citazioni_selezionate_in_&WinEdt
-Integrity_check=Verifica_di_integrit\u00e0
-# Help
-JabRef_help=&Aiuto_di_JabRef
-Load_session=&Carica_sessione
-Manage_content_selectors=&Gestione_dei_selettori_di_contenuti
-Manage_custom_exports=&Gestione_delle_esportazioni_personalizzate
-Manage_custom_imports=Gestione_delle_&importazioni_personalizzate
-Manage_journal_abbreviations=Gestione_delle_&abbreviazioni_delle_riviste
-Mark_entries=E&videnzia
-# File menu
-New_database=&Nuovo_database
-# Menu BibTeX (BibTeX)
-New_entry=&Nuova_voce
-New_entry...=N&uova_voce_...
-New_entry_from_plain_text=Nuova_voce_da_&testo
-New_subdatabase_based_on_AUX_file=Nuovo_sub-database_da_file_AU&X
-# View
-Next_tab=&Scheda_successiva
-Open_database=&Apri_database
-Open_PDF_or_PS=Apri_&PDF_o_PS
-Open_URL_or_DOI=Apri_&URL_o_DOI
-Options=&Opzioni
-Paste=&Incolla
-# Options
-Preferences=&Preferenze
-Previous_tab=Scheda_&precedente
-Quit=&Uscita
-Recent_files=File_recen&ti
-Redo=&Ripeti
-Replace_string=&Sostituisci_stringa
-Save_database=&Salva_database
-Save_database_as_...=Sa&lva_database_come_...
-Save_selected_as_...=Sal&va_la_selezione_come_...
-Save_session=Salva_sessi&one
-# Tools
-Search=&Ricerca
-Search_IEEEXplore=Ricerca_IEEEXplore
-Select_all=Sele&ziona_tutto
-Set_up_general_fields=Configura_i_campi_generali
-Show_error_console=Mostra_la_console_d'errore
-Sort_tabs=Ordina_le_schede
-Switch_preview_layout=S&cambia_layout_anteprima
-Synchronize_PDF_links=Sincronizza_i_link_PD&F
-Synchronize_PS_links=Sincronizza_i_link_P&S
-# Export menu
-Tab-separated_file=File_separati_da_&tabulazioni
-Toggle_entry_preview=&Visualizza/nascondi_anteprima
-Toggle_groups_interface=V&isualizza/nascondi_l'interfaccia_dei_gruppi
-Tools=&Strumenti
-Unabbreviate_journal_names=Espandi_nomi_delle_riviste_(MEDLINE)
-# Edit
-Undo=&Annulla
-Unmark_all=Rim&uovi_tutte_le_evidenziazioni
-Unmark_entries=&Rimuovi_evidenziazione
-View=&Visualizza
-Web_search=&Internet
-Import_into_new_database=Importa_in_un_nuo&vo_database
-Import_into_current_database=Importa_nel_database_&corrente
-Scan_database...=Scansione_del_database...
-Push_entries_to_external_application_(%0)=Invia_le_voci_all'applicazione_esterna_(%0)
-
-Write_XMP-metadata_to_PDFs=Inserisci_metadati_XMP_nei_file_PDF
-
-Set/clear_fields=Imposta/svuota_campi
-Export_selected_entries=Esporta_le_voci_selezionate
-Fetch_ArXiv.org=Recupera_da_ArXiv.org
-Sessions=Sessioni
-
-Save_all=Salva_tutti
-
-Upgrade_external_links=Aggiorna_i_collegamenti_esterni
-Manage_external_file_types=Gestione_dei_tipi_di_file_esterni
-
-Open_file=Apri_file
-Plugins=&Plugin
-Connect_to_external_SQL_database=Connessione_ad_un_database_SQL_esterno
-Export_to_external_SQL_database=Esporta_in_un_database_SQL_esterno
-Search_JSTOR=Ricerca_JSTOR
-Fetch_SPIRES=Recupera_da_SPIRES
-Fetch_INSPIRE=Recupera_da_INSPIRE
-Search_Medline=Ricerca_Medline
-
-Import_from_external_SQL_database=Importa_da_un_database_SQL_esterno
-Focus_entry_table=Cursore_nella_tavola_delle_voci
-Search_ACM_Portal=Ricerca_in_ACM_Portal
-
-Increase_table_font_size=&Aumenta_la_dimensione_dei_caratteri_della_tabella
-Decrease_table_font_size=&Diminuisci_la_dimensione_dei_caratteri_della_tabella
-Forward=Seguente
-Back=Precedente
-
-Manage_plugins=Gestione_dei_plugin
-Look_up_full_text_document=Scarica_il_documento_citato
-Set/clear/rename_fields=Imposta_/_svuota_/_rinomina_i_campi
-
-Search_ScienceDirect=Ricerca_in_ScienceDirect
-Mark_specific_color=E&videnzia_con_un_colore_specifico
-Resolve_duplicate_BibTeX_keys=Risolvi_le_chiavi_BibTeX_duplicate
-Minimize_to_system_tray=Minimizza_nell'area_di_notifica
-Legacy_tools...=Strumenti_obsoleti_...
-Copy_BibTeX_key_and_title=Copia_la_chiave_BibTeX_ed_il_titolo
-
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+Abbreviate_journal_names_(ISO)=Abbrevia_nomi_delle_riviste_(ISO)
+Abbreviate_journal_names_(MEDLINE)=Abbrevia_nomi_delle_riviste_(MEDLINE)
+About_JabRef=&Informazioni_su_JabRef
+Append_database=A&ggiungi_al_database
+Autogenerate_BibTeX_keys=Genera_&automaticamente_le_chiavi_BibTeX
+BibTeX=&BibTeX
+Close_database=C&hiudi_il_database
+Copy=&Copia
+Copy_\\cite{BibTeX_key}=Co&pia_\\cite{chiave_BibTeX}
+Copy_BibTeX_key=C&opia_chiave
+Custom_export=Es&portazione_personalizzata
+Custom_importers=&Filtri_di_importazione_personalizzati
+Customize_entry_types=Personalizza_i_&tipi_di_voci
+Cut=&Taglia
+Database_properties=P&ropriet\u00e0_del_database
+Delete=&Elimina
+Edit=&Modifica
+# Bibtex
+Edit_entry=&Modifica_voce
+Edit_preamble=Modifica_&preambolo
+Edit_strings=Modifica_&stringhe
+Export=&Esporta
+Export_selected_entries_to_clipboard=Esporta_le_righe_selezionate_negli_appunti
+Fetch_Medline=Recupera_da_&Medline
+
+# Menu names
+File=&File
+Find_And_Fix=Ricerca_e_ri&para
+Find_and_remove_exact_duplicates=Ricerca_e_rimuovi_d&uplicati_identici
+Find_duplicates=Ricerca_&duplicati
+Help=&Aiuto
+Help_contents=&Contenuto_dell'aiuto
+Highlight_groups_matching_all_selected_entries=&Evidenzia_i_gruppi_corrispondenti_a_tutte_le_righe_selezionate
+Highlight_groups_matching_any_selected_entry=Evi&denzia_i_gruppi_corrispondenti_alle_righe_selezionate
+Incremental_search=Ricerca_&incrementale
+
+Insert_selected_citations_into_Emacs=Inserisci_le_citazioni_selezionate_in_Emacs
+Insert_selected_citations_into_LatexEditor=Inserisci_le_citazioni_selezionate_in_LatexEditor
+Insert_selected_citations_into_LyX/Kile=Inserisci_le_citazioni_selezionate_in_&LyX/Kile
+Insert_selected_citations_into_WinEdt=Inserisci_le_citazioni_selezionate_in_&WinEdt
+Integrity_check=Verifica_di_integrit\u00e0
+# Help
+JabRef_help=&Aiuto_di_JabRef
+Load_session=&Carica_sessione
+Manage_content_selectors=&Gestione_dei_selettori_di_contenuti
+Manage_custom_exports=&Gestione_delle_esportazioni_personalizzate
+Manage_custom_imports=Gestione_delle_&importazioni_personalizzate
+Manage_journal_abbreviations=Gestione_delle_&abbreviazioni_delle_riviste
+Mark_entries=E&videnzia
+# File menu
+New_database=&Nuovo_database
+# Menu BibTeX (BibTeX)
+New_entry=&Nuova_voce
+New_entry...=N&uova_voce_...
+New_entry_from_plain_text=Nuova_voce_da_&testo
+New_subdatabase_based_on_AUX_file=Nuovo_sub-database_da_file_AU&X
+# View
+Next_tab=&Scheda_successiva
+Open_database=&Apri_database
+Open_PDF_or_PS=Apri_&PDF_o_PS
+Open_URL_or_DOI=Apri_&URL_o_DOI
+Options=&Opzioni
+Paste=&Incolla
+# Options
+Preferences=&Preferenze
+Previous_tab=Scheda_&precedente
+Quit=&Uscita
+Recent_files=File_recen&ti
+Redo=&Ripeti
+Replace_string=&Sostituisci_stringa
+Save_database=&Salva_database
+Save_database_as_...=Sa&lva_database_come_...
+Save_selected_as_...=Sal&va_la_selezione_come_...
+Save_session=Salva_sessi&one
+# Tools
+Search=&Ricerca
+Search_IEEEXplore=Ricerca_IEEEXplore
+Select_all=Sele&ziona_tutto
+Set_up_general_fields=Configura_i_campi_generali
+Show_error_console=Mostra_la_console_d'errore
+Sort_tabs=Ordina_le_schede
+Switch_preview_layout=S&cambia_layout_anteprima
+Synchronize_PDF_links=Sincronizza_i_link_PD&F
+Synchronize_PS_links=Sincronizza_i_link_P&S
+# Export menu
+Tab-separated_file=File_separati_da_&tabulazioni
+Toggle_entry_preview=&Visualizza/nascondi_anteprima
+Toggle_groups_interface=V&isualizza/nascondi_l'interfaccia_dei_gruppi
+Tools=&Strumenti
+Unabbreviate_journal_names=Espandi_nomi_delle_riviste_(MEDLINE)
+# Edit
+Undo=&Annulla
+Unmark_all=Rim&uovi_tutte_le_evidenziazioni
+Unmark_entries=&Rimuovi_evidenziazione
+View=&Visualizza
+Web_search=&Internet
+Import_into_new_database=Importa_in_un_nuo&vo_database
+Import_into_current_database=Importa_nel_database_&corrente
+Scan_database...=Scansione_del_database...
+Push_entries_to_external_application_(%0)=Invia_le_voci_all'applicazione_esterna_(%0)
+
+Write_XMP-metadata_to_PDFs=Inserisci_metadati_XMP_nei_file_PDF
+
+Set/clear_fields=Imposta/svuota_campi
+Export_selected_entries=Esporta_le_voci_selezionate
+Fetch_ArXiv.org=Recupera_da_ArXiv.org
+Sessions=Sessioni
+
+Save_all=Salva_tutti
+
+Upgrade_external_links=Aggiorna_i_collegamenti_esterni
+Manage_external_file_types=Gestione_dei_tipi_di_file_esterni
+
+Open_file=Apri_file
+Plugins=&Plugin
+Connect_to_external_SQL_database=Connessione_ad_un_database_SQL_esterno
+Export_to_external_SQL_database=Esporta_in_un_database_SQL_esterno
+Search_JSTOR=Ricerca_JSTOR
+Fetch_SPIRES=Recupera_da_SPIRES
+Fetch_INSPIRE=Recupera_da_INSPIRE
+Search_Medline=Ricerca_Medline
+
+Import_from_external_SQL_database=Importa_da_un_database_SQL_esterno
+Focus_entry_table=Cursore_nella_tavola_delle_voci
+Search_ACM_Portal=Ricerca_in_ACM_Portal
+
+Increase_table_font_size=&Aumenta_la_dimensione_dei_caratteri_della_tabella
+Decrease_table_font_size=&Diminuisci_la_dimensione_dei_caratteri_della_tabella
+Forward=Seguente
+Back=Precedente
+
+Manage_plugins=Gestione_dei_plugin
+Look_up_full_text_document=Scarica_il_documento_citato
+Set/clear/rename_fields=Imposta_/_svuota_/_rinomina_i_campi
+
+Search_ScienceDirect=Ricerca_in_ScienceDirect
+Mark_specific_color=E&videnzia_con_un_colore_specifico
+Resolve_duplicate_BibTeX_keys=Risolvi_le_chiavi_BibTeX_duplicate
+Minimize_to_system_tray=Minimizza_nell'area_di_notifica
+Legacy_tools...=Strumenti_obsoleti_...
+Copy_BibTeX_key_and_title=Copia_la_chiave_BibTeX_ed_il_titolo
+
 Cleanup_entries=Pulizia_voci
\ No newline at end of file
diff --git a/src/resource/Menu_ja.properties b/src/resource/Menu_ja.properties
index 8a395ca..1d205b2 100644
--- a/src/resource/Menu_ja.properties
+++ b/src/resource/Menu_ja.properties
@@ -1,151 +1,151 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-Abbreviate_journal_names_(ISO)=\u5b66\u8853\u8a8c\u540d\u3092\u77ed\u7e2e\u5f62\u306b\uff08ISO\uff09
-Abbreviate_journal_names_(MEDLINE)=\u5b66\u8853\u8a8c\u540d\u3092\u77ed\u7e2e\u5f62\u306b\uff08MEDLINE\uff09
-About_JabRef=JabRef\u306b\u3064\u3044\u3066(&A)
-Append_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u8ffd\u52a0(&A)
-Autogenerate_BibTeX_keys=BibTeX\u30ad\u30fc\u3092\u81ea\u52d5\u751f\u6210(&A)
-BibTeX=&BibTeX
-Close_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u9589\u3058\u308b(&C)
-Copy=\u30b3\u30d4\u30fc(&O)
-Copy_\\cite{BibTeX_key}=\\c&ite{BibTeX\u30ad\u30fc}\u3092\u30b3\u30d4\u30fc
-Copy_BibTeX_key=&BibTeX\u30ad\u30fc\u3092\u30b3\u30d4\u30fc
-Custom_export=\u500b\u4eba\u8a2d\u5b9a\u66f8\u304d\u51fa\u3057(&X)
-Custom_importers=\u500b\u4eba\u8a2d\u5b9a\u8aad\u307f\u8fbc\u307f
-Customize_entry_types=\u9805\u76ee\u578b\u3092\u500b\u4eba\u8a2d\u5b9a(&C)
-Cut=\u5207\u308a\u53d6\u308a(&C)
-Database_properties=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7279\u6027(&P)
-Delete=\u524a\u9664(&D)
-Edit=\u7de8\u96c6(&E)
-# Bibtex
-Edit_entry=\u9805\u76ee\u3092\u7de8\u96c6(&E)
-Edit_preamble=\u30d7\u30ea\u30a2\u30f3\u30d6\u30eb\u3092\u7de8\u96c6(&P)
-Edit_strings=\u6587\u5b57\u5217\u3092\u7de8\u96c6(&S)
-Export=\u66f8\u304d\u51fa\u3059(&E)
-Export_selected_entries_to_clipboard=\u9078\u629e\u3057\u305f\u9805\u76ee\u3092\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u66f8\u304d\u51fa\u3059(&E)
-Fetch_Medline=&Medline\u304b\u3089\u53d6\u5f97
-
-# Menu names
-File=\u30d5\u30a1\u30a4\u30eb(&F)
-Find_And_Fix=\u691c\u7d22\u3057\u3066\u4fee\u6b63
-Find_and_remove_exact_duplicates=\u5b8c\u5168\u306a\u91cd\u8907\u3092\u691c\u7d22\u3057\u3066\u524a\u9664(&D)
-Find_duplicates=\u91cd\u8907\u3092\u691c\u7d22(&F)
-Help=\u30d8\u30eb\u30d7(&H)
-Help_contents=\u30d8\u30eb\u30d7\u76ee\u6b21(&C)
-Highlight_groups_matching_all_selected_entries=\u5168\u9078\u629e\u9805\u76ee\u306b\u4e00\u81f4\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u3092\u7740\u8272
-Highlight_groups_matching_any_selected_entry=\u4efb\u610f\u306e\u9078\u629e\u9805\u76ee\u306b\u4e00\u81f4\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u3092\u7740\u8272
-Incremental_search=\u9010\u6b21\u691c\u7d22(&I)
-
-Insert_selected_citations_into_Emacs=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092&Emacs\u306b\u633f\u5165
-Insert_selected_citations_into_LatexEditor=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092LatexEditor\u306b\u633f\u5165
-Insert_selected_citations_into_LyX/Kile=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092&LyX/Kile\u306b\u633f\u5165
-Insert_selected_citations_into_WinEdt=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092&WinEdt\u306b\u633f\u5165
-Integrity_check=\u6574\u5408\u6027\u691c\u67fb
-# Help
-JabRef_help=JabRef\u30d8\u30eb\u30d7(&H)
-Load_session=\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u8aad\u307f\u8fbc\u3080(&D)
-Manage_content_selectors=\u5185\u5bb9\u9078\u629e\u30e1\u30cb\u30e5\u30fc\u306e\u7ba1\u7406(&C)
-Manage_custom_exports=\u500b\u4eba\u8a2d\u5b9a\u66f8\u304d\u51fa\u3057\u306e\u7ba1\u7406(&M)
-Manage_custom_imports=\u500b\u4eba\u8a2d\u5b9a\u8aad\u307f\u8fbc\u307f\u306e\u7ba1\u7406(&I)
-Manage_journal_abbreviations=\u8a8c\u540d\u77ed\u7e2e\u5f62\u306e\u7ba1\u7406(&J)
-Mark_entries=\u9805\u76ee\u3092\u30de\u30fc\u30af(&M)
-# File menu
-New_database=\u65b0\u898f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9(&N)
-# Menu BibTeX (BibTeX)
-New_entry=\u65b0\u898f\u9805\u76ee(&E)
-New_entry...=\u65b0\u898f\u9805\u76ee(&N)\u2026
-New_entry_from_plain_text=\u5e73\u6587\u304b\u3089\u65b0\u898f\u9805\u76ee(&W)
-New_subdatabase_based_on_AUX_file=AU&X\u30d5\u30a1\u30a4\u30eb\u306b\u57fa\u3065\u304f\u65b0\u898f\u526f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
-# View
-Next_tab=\u6b21\u306e\u30bf\u30d6(&N)
-Open_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u304f(&O)
-Open_PDF_or_PS=&PDF\u307e\u305f\u306fPS\u3092\u958b\u304f
-Open_URL_or_DOI=&URL\u307e\u305f\u306fDOI\u3092\u958b\u304f
-Options=\u30aa\u30d7\u30b7\u30e7\u30f3(&O)
-Paste=\u8cbc\u4ed8\u3051(&P)
-# Options
-Preferences=\u8a2d\u5b9a(&P)
-Previous_tab=\u524d\u306e\u30bf\u30d6(&P)
-Quit=\u7d42\u4e86(&Q)
-Recent_files=\u6700\u8fd1\u958b\u3044\u305f\u30d5\u30a1\u30a4\u30eb(&R)
-Redo=\u518d\u5b9f\u884c(&R)
-Replace_string=\u6587\u5b57\u5217\u3092\u7f6e\u63db(&R)
-Save_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58(&S)
-Save_database_as_...=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58(&A)\u2026
-Save_selected_as_...=\u9078\u629e\u90e8\u306b\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58(&L)\u2026
-Save_session=\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u4fdd\u5b58
-# Tools
-Search=\u691c\u7d22(&S)
-Search_IEEEXplore=IEEEXplore\u3092\u691c\u7d22
-Select_all=\u5168\u3066\u9078\u629e(&A)
-Set_up_general_fields=\u6c4e\u7528\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a(&G)
-Show_error_console=\u30a8\u30e9\u30fc\u30b3\u30f3\u30bd\u30fc\u30eb\u3092\u8868\u793a
-
-Sort_tabs=\u30bf\u30d6\u3092\u6574\u5e8f(&S)
-Switch_preview_layout=\u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u5207\u66ff(&S)
-Synchronize_PDF_links=PDF\u30ea\u30f3\u30af\u3092\u540c\u671f
-Synchronize_PS_links=PS\u30ea\u30f3\u30af\u3092\u540c\u671f
-# Export menu
-Tab-separated_file=\u30bf\u30d6\u533a\u5207\u308a\u30d5\u30a1\u30a4\u30eb(&T)
-Toggle_entry_preview=\u9805\u76ee\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u5165\u5207(&T)
-Toggle_groups_interface=\u30b0\u30eb\u30fc\u30d7\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u5165\u5207(&G)
-Tools=\u30c4\u30fc\u30eb(&T)
-Unabbreviate_journal_names=\u5b66\u8853\u8a8c\u540d\u3092\u975e\u77ed\u7e2e\u5f62\u306b
-# Edit
-Undo=\u53d6\u308a\u6d88\u3057(&U)
-Unmark_all=\u3059\u3079\u3066\u306e\u30de\u30fc\u30af\u3092\u5916\u3059(&L)
-Unmark_entries=\u9805\u76ee\u306e\u30de\u30fc\u30af\u3092\u5916\u3059(&N)
-View=\u8868\u793a(&V)
-Web_search=\u30a6\u30a7\u30d6\u691c\u7d22
-Import_into_new_database=\u65b0\u898f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u3057\u3066\u8aad\u307f\u8fbc\u3080
-Import_into_current_database=\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8aad\u307f\u8fbc\u3080
-
-Scan_database...=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30b9\u30ad\u30e3\u30f3(&C)\u2026
-
-Push_entries_to_external_application_(%0)=\u9805\u76ee\u3092\u5916\u90e8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\uff08%0\uff09\u306b\u8ee2\u9001
-Write_XMP-metadata_to_PDFs=XMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092PDF\u306b\u66f8\u304d\u51fa\u3059
-
-Set/clear_fields=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a\u307e\u305f\u306f\u30af\u30ea\u30a2
-
-Export_selected_entries=\u9078\u629e\u3057\u305f\u9805\u76ee\u3092\u66f8\u304d\u51fa\u3059
-Fetch_ArXiv.org=ArXiv.org\u304b\u3089\u53d6\u5f97
-Sessions=\u30bb\u30c3\u30b7\u30e7\u30f3
-
-Save_all=\u3059\u3079\u3066\u4fdd\u5b58
-
-Upgrade_external_links=\u5916\u90e8\u30ea\u30f3\u30af\u3092\u66f4\u65b0
-Manage_external_file_types=\u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u578b\u306e\u7ba1\u7406
-Open_file=\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f
-
-Plugins=\u30d7\u30e9\u30b0\u30a4\u30f3(&P)
-Connect_to_external_SQL_database=\u5916\u90e8SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a
-Export_to_external_SQL_database=\u5916\u90e8SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u66f8\u304d\u51fa\u3059
-Search_JSTOR=JSTOR\u3092\u691c\u7d22
-Fetch_SPIRES=SPIRES\u304b\u3089\u53d6\u5f97
-Fetch_INSPIRE=INSPIRE\u304b\u3089\u53d6\u5f97
-Search_Medline=Medline\u3092\u691c\u7d22
-Import_from_external_SQL_database=\u5916\u90e8SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u8aad\u307f\u8fbc\u3080
-Focus_entry_table=\u9805\u76ee\u8868\u306b\u30d5\u30a9\u30fc\u30ab\u30b9
-Search_ACM_Portal=ACM_Portal\u3092\u691c\u7d22
-
-Increase_table_font_size=\u8868\u30d5\u30a9\u30f3\u30c8\u3092\u62e1\u5927(&I)
-Decrease_table_font_size=\u8868\u30d5\u30a9\u30f3\u30c8\u3092\u7e2e\u5c0f(&D)
-Forward=\u9032\u3080
-Back=\u623b\u308b
-
-Manage_plugins=\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u7ba1\u7406
-
-Look_up_full_text_document=\u5e73\u6587\u6587\u66f8\u5168\u4f53\u3092\u691c\u7d22
-Set/clear/rename_fields=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a/\u30af\u30ea\u30a2/\u540d\u79f0\u5909\u66f4
-
-Search_ScienceDirect=ScienceDirect\u3092\u691c\u7d22
-
-Mark_specific_color=\u7279\u5b9a\u8272\u3067\u30de\u30fc\u30af(&A)
-Resolve_duplicate_BibTeX_keys=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u3092\u89e3\u6d88\u3059\u308b
-
-Minimize_to_system_tray=\u30b7\u30b9\u30c6\u30e0\u30c8\u30ec\u30a4\u306b\u6700\u5c0f\u5316
-Legacy_tools...=\u65e7\u6765\u306e\u30c4\u30fc\u30eb...
-Copy_BibTeX_key_and_title=BibTeX\u9375\u3068\u30bf\u30a4\u30c8\u30eb\u3092\u30b3\u30d4\u30fc
-
-Cleanup_entries=\u9805\u76ee\u3092\u6d88\u53bb
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+Abbreviate_journal_names_(ISO)=\u5b66\u8853\u8a8c\u540d\u3092\u77ed\u7e2e\u5f62\u306b\uff08ISO\uff09
+Abbreviate_journal_names_(MEDLINE)=\u5b66\u8853\u8a8c\u540d\u3092\u77ed\u7e2e\u5f62\u306b\uff08MEDLINE\uff09
+About_JabRef=JabRef\u306b\u3064\u3044\u3066(&A)
+Append_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u8ffd\u52a0(&A)
+Autogenerate_BibTeX_keys=BibTeX\u30ad\u30fc\u3092\u81ea\u52d5\u751f\u6210(&A)
+BibTeX=&BibTeX
+Close_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u9589\u3058\u308b(&C)
+Copy=\u30b3\u30d4\u30fc(&O)
+Copy_\\cite{BibTeX_key}=\\c&ite{BibTeX\u30ad\u30fc}\u3092\u30b3\u30d4\u30fc
+Copy_BibTeX_key=&BibTeX\u30ad\u30fc\u3092\u30b3\u30d4\u30fc
+Custom_export=\u500b\u4eba\u8a2d\u5b9a\u66f8\u304d\u51fa\u3057(&X)
+Custom_importers=\u500b\u4eba\u8a2d\u5b9a\u8aad\u307f\u8fbc\u307f
+Customize_entry_types=\u9805\u76ee\u578b\u3092\u500b\u4eba\u8a2d\u5b9a(&C)
+Cut=\u5207\u308a\u53d6\u308a(&C)
+Database_properties=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7279\u6027(&P)
+Delete=\u524a\u9664(&D)
+Edit=\u7de8\u96c6(&E)
+# Bibtex
+Edit_entry=\u9805\u76ee\u3092\u7de8\u96c6(&E)
+Edit_preamble=\u30d7\u30ea\u30a2\u30f3\u30d6\u30eb\u3092\u7de8\u96c6(&P)
+Edit_strings=\u6587\u5b57\u5217\u3092\u7de8\u96c6(&S)
+Export=\u66f8\u304d\u51fa\u3059(&E)
+Export_selected_entries_to_clipboard=\u9078\u629e\u3057\u305f\u9805\u76ee\u3092\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u66f8\u304d\u51fa\u3059(&E)
+Fetch_Medline=&Medline\u304b\u3089\u53d6\u5f97
+
+# Menu names
+File=\u30d5\u30a1\u30a4\u30eb(&F)
+Find_And_Fix=\u691c\u7d22\u3057\u3066\u4fee\u6b63
+Find_and_remove_exact_duplicates=\u5b8c\u5168\u306a\u91cd\u8907\u3092\u691c\u7d22\u3057\u3066\u524a\u9664(&D)
+Find_duplicates=\u91cd\u8907\u3092\u691c\u7d22(&F)
+Help=\u30d8\u30eb\u30d7(&H)
+Help_contents=\u30d8\u30eb\u30d7\u76ee\u6b21(&C)
+Highlight_groups_matching_all_selected_entries=\u5168\u9078\u629e\u9805\u76ee\u306b\u4e00\u81f4\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u3092\u7740\u8272
+Highlight_groups_matching_any_selected_entry=\u4efb\u610f\u306e\u9078\u629e\u9805\u76ee\u306b\u4e00\u81f4\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u3092\u7740\u8272
+Incremental_search=\u9010\u6b21\u691c\u7d22(&I)
+
+Insert_selected_citations_into_Emacs=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092&Emacs\u306b\u633f\u5165
+Insert_selected_citations_into_LatexEditor=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092LatexEditor\u306b\u633f\u5165
+Insert_selected_citations_into_LyX/Kile=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092&LyX/Kile\u306b\u633f\u5165
+Insert_selected_citations_into_WinEdt=\u9078\u629e\u3057\u305f\u5f15\u7528\u3092&WinEdt\u306b\u633f\u5165
+Integrity_check=\u6574\u5408\u6027\u691c\u67fb
+# Help
+JabRef_help=JabRef\u30d8\u30eb\u30d7(&H)
+Load_session=\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u8aad\u307f\u8fbc\u3080(&D)
+Manage_content_selectors=\u5185\u5bb9\u9078\u629e\u30e1\u30cb\u30e5\u30fc\u306e\u7ba1\u7406(&C)
+Manage_custom_exports=\u500b\u4eba\u8a2d\u5b9a\u66f8\u304d\u51fa\u3057\u306e\u7ba1\u7406(&M)
+Manage_custom_imports=\u500b\u4eba\u8a2d\u5b9a\u8aad\u307f\u8fbc\u307f\u306e\u7ba1\u7406(&I)
+Manage_journal_abbreviations=\u8a8c\u540d\u77ed\u7e2e\u5f62\u306e\u7ba1\u7406(&J)
+Mark_entries=\u9805\u76ee\u3092\u30de\u30fc\u30af(&M)
+# File menu
+New_database=\u65b0\u898f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9(&N)
+# Menu BibTeX (BibTeX)
+New_entry=\u65b0\u898f\u9805\u76ee(&E)
+New_entry...=\u65b0\u898f\u9805\u76ee(&N)\u2026
+New_entry_from_plain_text=\u5e73\u6587\u304b\u3089\u65b0\u898f\u9805\u76ee(&W)
+New_subdatabase_based_on_AUX_file=AU&X\u30d5\u30a1\u30a4\u30eb\u306b\u57fa\u3065\u304f\u65b0\u898f\u526f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
+# View
+Next_tab=\u6b21\u306e\u30bf\u30d6(&N)
+Open_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u304f(&O)
+Open_PDF_or_PS=&PDF\u307e\u305f\u306fPS\u3092\u958b\u304f
+Open_URL_or_DOI=&URL\u307e\u305f\u306fDOI\u3092\u958b\u304f
+Options=\u30aa\u30d7\u30b7\u30e7\u30f3(&O)
+Paste=\u8cbc\u4ed8\u3051(&P)
+# Options
+Preferences=\u8a2d\u5b9a(&P)
+Previous_tab=\u524d\u306e\u30bf\u30d6(&P)
+Quit=\u7d42\u4e86(&Q)
+Recent_files=\u6700\u8fd1\u958b\u3044\u305f\u30d5\u30a1\u30a4\u30eb(&R)
+Redo=\u518d\u5b9f\u884c(&R)
+Replace_string=\u6587\u5b57\u5217\u3092\u7f6e\u63db(&R)
+Save_database=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4fdd\u5b58(&S)
+Save_database_as_...=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58(&A)\u2026
+Save_selected_as_...=\u9078\u629e\u90e8\u306b\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58(&L)\u2026
+Save_session=\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u4fdd\u5b58
+# Tools
+Search=\u691c\u7d22(&S)
+Search_IEEEXplore=IEEEXplore\u3092\u691c\u7d22
+Select_all=\u5168\u3066\u9078\u629e(&A)
+Set_up_general_fields=\u6c4e\u7528\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a(&G)
+Show_error_console=\u30a8\u30e9\u30fc\u30b3\u30f3\u30bd\u30fc\u30eb\u3092\u8868\u793a
+
+Sort_tabs=\u30bf\u30d6\u3092\u6574\u5e8f(&S)
+Switch_preview_layout=\u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u5207\u66ff(&S)
+Synchronize_PDF_links=PDF\u30ea\u30f3\u30af\u3092\u540c\u671f
+Synchronize_PS_links=PS\u30ea\u30f3\u30af\u3092\u540c\u671f
+# Export menu
+Tab-separated_file=\u30bf\u30d6\u533a\u5207\u308a\u30d5\u30a1\u30a4\u30eb(&T)
+Toggle_entry_preview=\u9805\u76ee\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u5165\u5207(&T)
+Toggle_groups_interface=\u30b0\u30eb\u30fc\u30d7\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u5165\u5207(&G)
+Tools=\u30c4\u30fc\u30eb(&T)
+Unabbreviate_journal_names=\u5b66\u8853\u8a8c\u540d\u3092\u975e\u77ed\u7e2e\u5f62\u306b
+# Edit
+Undo=\u53d6\u308a\u6d88\u3057(&U)
+Unmark_all=\u3059\u3079\u3066\u306e\u30de\u30fc\u30af\u3092\u5916\u3059(&L)
+Unmark_entries=\u9805\u76ee\u306e\u30de\u30fc\u30af\u3092\u5916\u3059(&N)
+View=\u8868\u793a(&V)
+Web_search=\u30a6\u30a7\u30d6\u691c\u7d22
+Import_into_new_database=\u65b0\u898f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u3057\u3066\u8aad\u307f\u8fbc\u3080
+Import_into_current_database=\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8aad\u307f\u8fbc\u3080
+
+Scan_database...=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30b9\u30ad\u30e3\u30f3(&C)\u2026
+
+Push_entries_to_external_application_(%0)=\u9805\u76ee\u3092\u5916\u90e8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\uff08%0\uff09\u306b\u8ee2\u9001
+Write_XMP-metadata_to_PDFs=XMP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092PDF\u306b\u66f8\u304d\u51fa\u3059
+
+Set/clear_fields=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a\u307e\u305f\u306f\u30af\u30ea\u30a2
+
+Export_selected_entries=\u9078\u629e\u3057\u305f\u9805\u76ee\u3092\u66f8\u304d\u51fa\u3059
+Fetch_ArXiv.org=ArXiv.org\u304b\u3089\u53d6\u5f97
+Sessions=\u30bb\u30c3\u30b7\u30e7\u30f3
+
+Save_all=\u3059\u3079\u3066\u4fdd\u5b58
+
+Upgrade_external_links=\u5916\u90e8\u30ea\u30f3\u30af\u3092\u66f4\u65b0
+Manage_external_file_types=\u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u578b\u306e\u7ba1\u7406
+Open_file=\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f
+
+Plugins=\u30d7\u30e9\u30b0\u30a4\u30f3(&P)
+Connect_to_external_SQL_database=\u5916\u90e8SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a
+Export_to_external_SQL_database=\u5916\u90e8SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u66f8\u304d\u51fa\u3059
+Search_JSTOR=JSTOR\u3092\u691c\u7d22
+Fetch_SPIRES=SPIRES\u304b\u3089\u53d6\u5f97
+Fetch_INSPIRE=INSPIRE\u304b\u3089\u53d6\u5f97
+Search_Medline=Medline\u3092\u691c\u7d22
+Import_from_external_SQL_database=\u5916\u90e8SQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u8aad\u307f\u8fbc\u3080
+Focus_entry_table=\u9805\u76ee\u8868\u306b\u30d5\u30a9\u30fc\u30ab\u30b9
+Search_ACM_Portal=ACM_Portal\u3092\u691c\u7d22
+
+Increase_table_font_size=\u8868\u30d5\u30a9\u30f3\u30c8\u3092\u62e1\u5927(&I)
+Decrease_table_font_size=\u8868\u30d5\u30a9\u30f3\u30c8\u3092\u7e2e\u5c0f(&D)
+Forward=\u9032\u3080
+Back=\u623b\u308b
+
+Manage_plugins=\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u7ba1\u7406
+
+Look_up_full_text_document=\u5e73\u6587\u6587\u66f8\u5168\u4f53\u3092\u691c\u7d22
+Set/clear/rename_fields=\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a/\u30af\u30ea\u30a2/\u540d\u79f0\u5909\u66f4
+
+Search_ScienceDirect=ScienceDirect\u3092\u691c\u7d22
+
+Mark_specific_color=\u7279\u5b9a\u8272\u3067\u30de\u30fc\u30af(&A)
+Resolve_duplicate_BibTeX_keys=\u91cd\u8907\u3057\u305fBibTeX\u30ad\u30fc\u3092\u89e3\u6d88\u3059\u308b
+
+Minimize_to_system_tray=\u30b7\u30b9\u30c6\u30e0\u30c8\u30ec\u30a4\u306b\u6700\u5c0f\u5316
+Legacy_tools...=\u65e7\u6765\u306e\u30c4\u30fc\u30eb...
+Copy_BibTeX_key_and_title=BibTeX\u9375\u3068\u30bf\u30a4\u30c8\u30eb\u3092\u30b3\u30d4\u30fc
+
+Cleanup_entries=\u9805\u76ee\u3092\u6d88\u53bb
diff --git a/src/resource/Menu_nl.properties b/src/resource/Menu_nl.properties
index 2b5a46d..97932a5 100644
--- a/src/resource/Menu_nl.properties
+++ b/src/resource/Menu_nl.properties
@@ -1,235 +1,235 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-
-Abbreviate_journal_names_(ISO)=Kort_namen_van_tijdschriften_af_(ISO)
-
-Abbreviate_journal_names_(MEDLINE)=Kort_namen_van_tijdschriften_af_(MEDLINE)
-
-About_JabRef=Over_JabRef
-
-Append_database=Database_bijvoegen
-
-Autogenerate_BibTeX_keys=Genereer_BibTeX-sleutels_automatisch
-
-BibTeX=BibTeX
-
-Close_database=Sluit_database
-
-Copy=Kopi\u00ebren
-
-Copy_\\cite{BibTeX_key}=Kopieer_\\cite{BibTeX-sleutel}
-
-Copy_BibTeX_key=Kopieer_BibTeX-sleutel
-
-Custom_export=Externe_exportfilter
-
-Custom_importers=Externe_importfilter
-
-Customize_entry_types=Pas_entry_types_aan
-
-Cut=Knippen
-
-Database_properties=Database_eigenschappen
-
-Delete=Verwijderen
-
-Edit=Bewerken
-
-# Bibtex
-Edit_entry=Bewerk_entry
-
-Edit_preamble=Bewerk_inleiding
-
-Edit_strings=Bewerk_constanten
-
-Export=Exporteren
-
-Export_selected_entries_to_clipboard=Exporteer_geselecteerde_entries_naar_het_klembord
-
-Fetch_Medline=Ophalen_van_Medline
-
-# Menu names
-File=Bestand
-
-Find_And_Fix=Zoeken_en_herstellen
-
-Find_and_remove_exact_duplicates=Zoek_en_verwijder_exacte_dubbels
-
-Find_duplicates=Zoek_dubbels
-
-Help=Help
-
-Help_contents=Help_inhoud
-
-Highlight_groups_matching_all_selected_entries=Markeer_groepen_die_overeenkomen_met_alle_geselecteerde_entries
-
-Highlight_groups_matching_any_selected_entry=Markeer_groepen_die_overeenkomen_met_elke_geselecteerde_entry
-
-Incremental_search=Incrementele_zoekopdracht
-
-Insert_selected_citations_into_Emacs=Voeg_geselecteerde_citaten_toe_aan_Emacs
-
-Insert_selected_citations_into_LatexEditor=Voeg_geselecteerde_citaten_toe_aan_LatexEditor
-
-Insert_selected_citations_into_LyX/Kile=Voeg_geselecteerde_citaten_toe_aan_LyX/Kile
-
-Insert_selected_citations_into_WinEdt=Voeg_geselecteerde_citaten_toe_aan_WinEdt
-
-Integrity_check=Integriteitscontrole
-
-# Help
-JabRef_help=JabRef_help
-
-Load_session=Sessie_laden
-
-Manage_content_selectors=Beheer_inhoud_selectors
-
-Manage_custom_exports=Beheer_externe_exportfilters
-
-Manage_custom_imports=Beheer_externe_importfilters
-
-Manage_journal_abbreviations=Beheer_tijdschrift_afkortingen
-
-Mark_entries=Markeer_entries
-
-# File menu
-New_database=Nieuwe_database
-
-# Menu BibTeX (BibTeX)
-New_entry=Nieuwe_entry
-
-New_entry...=Nieuwe_entry...
-
-New_entry_from_plain_text=Nieuwe_entry_van_onopgemaakte_tekst
-
-New_subdatabase_based_on_AUX_file=Nieuwe_subdatabase_gebaseerd_op_AUX_bestand
-
-# View
-Next_tab=Volgende_tabblad
-
-Open_database=Open_database
-
-Open_PDF_or_PS=Open_PDF_of_PS
-
-Open_URL_or_DOI=Open_URL_of_DOI
-
-Options=Opties
-
-Paste=Plakken
-
-# Options
-Preferences=Instellingen
-
-Previous_tab=Vorige_tabblad
-
-Quit=Afsluiten
-
-Recent_files=Recente_bestanden
-
-Redo=Herstellen
-
-Replace_string=Tekst_vervangen
-
-Save_database=Database_opslaan
-
-Save_database_as_...=Database_opslaan_als_...
-
-Save_selected_as_...=Geselecteerde_opslaan_als_...
-
-Save_session=Sessie_opslaan
-
-# Tools
-Search=Zoeken
-
-Search_IEEEXplore=Zoeken_op_IEEEXplore
-
-Select_all=Selecteer_alles
-
-Set_up_general_fields=Stel_algemene_velden_in
-
-Show_error_console=Toon_foutenconsole
-
-Sort_tabs=Tabbladen_sorteren
-
-Switch_preview_layout=Toon_voorbeeld_layout
-
-Synchronize_PDF_links=Synchroniseer_PDF_snelkoppelingen
-
-Synchronize_PS_links=Synchroniseer_PDF_snelkoppelingen
-
-# Export menu
-Tab-separated_file=Bestand_gescheiden_door_tabbladen
-
-Toggle_entry_preview=Toon_entry_voorbeeld
-
-Toggle_groups_interface=Toon_groepenvenster
-
-Tools=Extra's
-
-Unabbreviate_journal_names=Maak_afkorting_van_tijdschriftnamen_ongedaan
-
-# Edit
-Undo=Ongedaan_maken
-
-Unmark_all=Maak_alle_markeringen_ongedaan
-
-Unmark_entries=Maak_markeringen_van_entries_ongedaan
-
-View=Beeld
-
-Web_search=Zoeken_op_het_web
-
-Import_into_new_database=Importeer_in_nieuwe_database
-
-Import_into_current_database=Importeer_in_huidige_database
-
-Scan_database...=Database_doorzoeken
-
-Push_entries_to_external_application_(%0)=Stuur_entries_naar_externe_applicatie
-
-Write_XMP-metadata_to_PDFs=Schrijf_XMP_metadata_naar_PDFs
-
-Set/clear_fields=Instellen/verwijderen_velden
-
-Export_selected_entries=
-
-Fetch_ArXiv.org=
-
-Sessions=
-
-Save_all=
-
-Upgrade_external_links=
-
-Manage_external_file_types=
-
-Open_file=
-Plugins=
-Connect_to_external_SQL_database=
-Export_to_external_SQL_database=
-Search_JSTOR=
-Fetch_SPIRES=
-Fetch_INSPIRE=
-Search_Medline=
-Search_ACM_Portal=
-Import_from_external_SQL_database=
-Focus_entry_table=
-
-Increase_table_font_size=
-Decrease_table_font_size=
-Forward=
-Back=
-
-Manage_plugins=
-Look_up_full_text_document=
-Set/clear/rename_fields=
-
-Search_ScienceDirect=
-Mark_specific_color=
-Resolve_duplicate_BibTeX_keys=
-Minimize_to_system_tray=
-Legacy_tools...=
-Copy_BibTeX_key_and_title=
-
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+
+Abbreviate_journal_names_(ISO)=Kort_namen_van_tijdschriften_af_(ISO)
+
+Abbreviate_journal_names_(MEDLINE)=Kort_namen_van_tijdschriften_af_(MEDLINE)
+
+About_JabRef=Over_JabRef
+
+Append_database=Database_bijvoegen
+
+Autogenerate_BibTeX_keys=Genereer_BibTeX-sleutels_automatisch
+
+BibTeX=BibTeX
+
+Close_database=Sluit_database
+
+Copy=Kopi\u00ebren
+
+Copy_\\cite{BibTeX_key}=Kopieer_\\cite{BibTeX-sleutel}
+
+Copy_BibTeX_key=Kopieer_BibTeX-sleutel
+
+Custom_export=Externe_exportfilter
+
+Custom_importers=Externe_importfilter
+
+Customize_entry_types=Pas_entry_types_aan
+
+Cut=Knippen
+
+Database_properties=Database_eigenschappen
+
+Delete=Verwijderen
+
+Edit=Bewerken
+
+# Bibtex
+Edit_entry=Bewerk_entry
+
+Edit_preamble=Bewerk_inleiding
+
+Edit_strings=Bewerk_constanten
+
+Export=Exporteren
+
+Export_selected_entries_to_clipboard=Exporteer_geselecteerde_entries_naar_het_klembord
+
+Fetch_Medline=Ophalen_van_Medline
+
+# Menu names
+File=Bestand
+
+Find_And_Fix=Zoeken_en_herstellen
+
+Find_and_remove_exact_duplicates=Zoek_en_verwijder_exacte_dubbels
+
+Find_duplicates=Zoek_dubbels
+
+Help=Help
+
+Help_contents=Help_inhoud
+
+Highlight_groups_matching_all_selected_entries=Markeer_groepen_die_overeenkomen_met_alle_geselecteerde_entries
+
+Highlight_groups_matching_any_selected_entry=Markeer_groepen_die_overeenkomen_met_elke_geselecteerde_entry
+
+Incremental_search=Incrementele_zoekopdracht
+
+Insert_selected_citations_into_Emacs=Voeg_geselecteerde_citaten_toe_aan_Emacs
+
+Insert_selected_citations_into_LatexEditor=Voeg_geselecteerde_citaten_toe_aan_LatexEditor
+
+Insert_selected_citations_into_LyX/Kile=Voeg_geselecteerde_citaten_toe_aan_LyX/Kile
+
+Insert_selected_citations_into_WinEdt=Voeg_geselecteerde_citaten_toe_aan_WinEdt
+
+Integrity_check=Integriteitscontrole
+
+# Help
+JabRef_help=JabRef_help
+
+Load_session=Sessie_laden
+
+Manage_content_selectors=Beheer_inhoud_selectors
+
+Manage_custom_exports=Beheer_externe_exportfilters
+
+Manage_custom_imports=Beheer_externe_importfilters
+
+Manage_journal_abbreviations=Beheer_tijdschrift_afkortingen
+
+Mark_entries=Markeer_entries
+
+# File menu
+New_database=Nieuwe_database
+
+# Menu BibTeX (BibTeX)
+New_entry=Nieuwe_entry
+
+New_entry...=Nieuwe_entry...
+
+New_entry_from_plain_text=Nieuwe_entry_van_onopgemaakte_tekst
+
+New_subdatabase_based_on_AUX_file=Nieuwe_subdatabase_gebaseerd_op_AUX_bestand
+
+# View
+Next_tab=Volgende_tabblad
+
+Open_database=Open_database
+
+Open_PDF_or_PS=Open_PDF_of_PS
+
+Open_URL_or_DOI=Open_URL_of_DOI
+
+Options=Opties
+
+Paste=Plakken
+
+# Options
+Preferences=Instellingen
+
+Previous_tab=Vorige_tabblad
+
+Quit=Afsluiten
+
+Recent_files=Recente_bestanden
+
+Redo=Herstellen
+
+Replace_string=Tekst_vervangen
+
+Save_database=Database_opslaan
+
+Save_database_as_...=Database_opslaan_als_...
+
+Save_selected_as_...=Geselecteerde_opslaan_als_...
+
+Save_session=Sessie_opslaan
+
+# Tools
+Search=Zoeken
+
+Search_IEEEXplore=Zoeken_op_IEEEXplore
+
+Select_all=Selecteer_alles
+
+Set_up_general_fields=Stel_algemene_velden_in
+
+Show_error_console=Toon_foutenconsole
+
+Sort_tabs=Tabbladen_sorteren
+
+Switch_preview_layout=Toon_voorbeeld_layout
+
+Synchronize_PDF_links=Synchroniseer_PDF_snelkoppelingen
+
+Synchronize_PS_links=Synchroniseer_PDF_snelkoppelingen
+
+# Export menu
+Tab-separated_file=Bestand_gescheiden_door_tabbladen
+
+Toggle_entry_preview=Toon_entry_voorbeeld
+
+Toggle_groups_interface=Toon_groepenvenster
+
+Tools=Extra's
+
+Unabbreviate_journal_names=Maak_afkorting_van_tijdschriftnamen_ongedaan
+
+# Edit
+Undo=Ongedaan_maken
+
+Unmark_all=Maak_alle_markeringen_ongedaan
+
+Unmark_entries=Maak_markeringen_van_entries_ongedaan
+
+View=Beeld
+
+Web_search=Zoeken_op_het_web
+
+Import_into_new_database=Importeer_in_nieuwe_database
+
+Import_into_current_database=Importeer_in_huidige_database
+
+Scan_database...=Database_doorzoeken
+
+Push_entries_to_external_application_(%0)=Stuur_entries_naar_externe_applicatie
+
+Write_XMP-metadata_to_PDFs=Schrijf_XMP_metadata_naar_PDFs
+
+Set/clear_fields=Instellen/verwijderen_velden
+
+Export_selected_entries=
+
+Fetch_ArXiv.org=
+
+Sessions=
+
+Save_all=
+
+Upgrade_external_links=
+
+Manage_external_file_types=
+
+Open_file=
+Plugins=
+Connect_to_external_SQL_database=
+Export_to_external_SQL_database=
+Search_JSTOR=
+Fetch_SPIRES=
+Fetch_INSPIRE=
+Search_Medline=
+Search_ACM_Portal=
+Import_from_external_SQL_database=
+Focus_entry_table=
+
+Increase_table_font_size=
+Decrease_table_font_size=
+Forward=
+Back=
+
+Manage_plugins=
+Look_up_full_text_document=
+Set/clear/rename_fields=
+
+Search_ScienceDirect=
+Mark_specific_color=
+Resolve_duplicate_BibTeX_keys=
+Minimize_to_system_tray=
+Legacy_tools...=
+Copy_BibTeX_key_and_title=
+
 Cleanup_entries=
\ No newline at end of file
diff --git a/src/resource/Menu_no.properties b/src/resource/Menu_no.properties
index 09278e8..72cdcb0 100644
--- a/src/resource/Menu_no.properties
+++ b/src/resource/Menu_no.properties
@@ -1,147 +1,147 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-Abbreviate_journal_names_(ISO)=Forkort_journalnavn_(ISO)
-Abbreviate_journal_names_(MEDLINE)=Forkort_journalnavn_(MEDLINE)
-About_JabRef=Om_&JabRef
-Append_database=Legg_til_inn&hold_fra_database
-Autogenerate_BibTeX_keys=&Autogenerer_BibTeX-n\u00f8kler
-BibTeX=&BibTeX
-Close_database=L&ukk_database
-Copy=K&opier
-Copy_\\cite{BibTeX_key}=Kopier_\\c&ite{BibTeX-n\u00f8kkel}
-Copy_BibTeX_key=Kopier_&BibTeX-n\u00f8kkel
-Custom_export=E&ksterne_eksportfiltre
-Custom_importers=Custom_importers
-Customize_entry_types=&Tilpass_enhetstyper
-Cut=&Klipp_up
-Database_properties=Egenskaper_for_database
-Delete=&Slett
-Edit=&Rediger
-# Bibtex
-Edit_entry=&Rediger_enhet
-Edit_preamble=Rediger_'&preamble'
-Edit_strings=Rediger_&strenger
-Export=&Eksporter
-Export_selected_entries_to_clipboard=Eksporter_valgte_enheter_til_utklippstavlen
-Fetch_Medline=S\u00f8k_&Medline
-
-# Menu names
-File=&Fil
-Find_And_Fix=Finn_og_reparer
-Find_and_remove_exact_duplicates=&Finn_og_fjern_eksakte_duplikater
-Find_duplicates=S\u00f8k_etter_&duplikater
-Help=&Hjelp
-Help_contents=&Oversikt_over_hjelpefiler
-Highlight_groups_matching_all_selected_entries=Uthev_grupper_som_inneholder_alle_valgte_enheter
-Highlight_groups_matching_any_selected_entry=Uthev_grupper_som_inneholder_minst_en_av_de_valgte_enhetene
-Incremental_search=&Inkrementelt_s\u00f8k
-Insert_selected_citations_into_Emacs=Send_valgte_enheter_til_Emacs
-Insert_selected_citations_into_LatexEditor=Send_valgte_enheter_til_LatexEditor
-Insert_selected_citations_into_LyX/Kile=Send_valgte_enheter_til_&LyX/Kile
-Insert_selected_citations_into_WinEdt=Send_valgte_enheter_til_&WinEdt
-Integrity_check=Sjekk_integritet
-# Help
-JabRef_help=JabRef-&hjelp
-Load_session=&Gjenopprett_tilstand
-Manage_content_selectors=Sett_opp_&ordvelgere
-Manage_custom_exports=&Sett_opp_eksterne_eksportfiltre
-Manage_custom_imports=Sett_opp_eksterne_&importfiltre
-
-Manage_journal_abbreviations=Sett_opp_&journalforkortelser
-Mark_entries=&Merk_enheter
-# File menu
-New_database=&Ny_database
-# Menu BibTeX (BibTeX)
-New_entry=N&y_enhet
-New_entry...=&Ny_enhet_...
-New_entry_from_plain_text=Ny_&enhet_fra_ren_tekst
-New_subdatabase_based_on_AUX_file=Ny_deldatabase_basert_p\u00e5_AU&X-fil
-# View
-Next_tab=&Neste_tab
-Open_database=&\u00c5pne_database
-Open_PDF_or_PS=\u00c5pne_&PDF_eller_PS
-Open_URL_or_DOI=\u00c5pne_&URL_eller_DOI
-Options=V&alg
-Paste=&Lim_inn
-# Options
-Preferences=&Oppsett
-Previous_tab=&Forrige_tab
-Quit=&Avslutt
-Recent_files=&Siste_filer
-Redo=&Gjenta
-Replace_string=&Erstatt_streng
-Save_database=&Lagre_database
-Save_database_as_...=L&agre_database_som_...
-Save_selected_as_...=Lagre_&valgte_enheter_som_...
-Save_session=Lag&re_tilstand
-# Tools
-Search=&S\u00f8k
-Search_IEEEXplore=S\u00f8k_IEEEXplore
-Select_all=&Velg_alle
-Set_up_general_fields=Sett_opp_&generelle_felter
-Show_error_console=Vis_feilkonsoll
-Sort_tabs=Sorter_tabs
-Switch_preview_layout=&Skift_layout_p\u00e5_forh\u00e5ndsvisning
-Synchronize_PDF_links=Synkroniser_PDF-lenker
-Synchronize_PS_links=Synkroniser_PS-lenker
-# Export menu
-Tab-separated_file=&Tab_separert_fil
-Toggle_entry_preview=&Vis/skjul_forh\u00e5ndsvisning
-Toggle_groups_interface=Vis/skjul_&grupperingskontroll
-Tools=V&erkt\u00f8y
-Unabbreviate_journal_names=Ekspander_journalnavn
-# Edit
-Undo=&Angre
-Unmark_all=F&jern_merking_fra_alle
-Unmark_entries=&Fjern_merking
-View=&Vis
-Web_search=Webs\u00f8k
-Import_into_new_database=Importer_til_ny_database
-Import_into_current_database=Importer_til_den_aktive_databasen
-
-Scan_database...=&Unders\u00f8k_database
-
-Push_entries_to_external_application_(%0)=Send_enheter_til_ekstern_applikasjon_(%0)
-Write_XMP-metadata_to_PDFs=Skriv_XMP-metadata_til_PDF-filer
-
-Set/clear_fields=Sett/fjern_felter
-Export_selected_entries=Eksporter_valgte_enheter
-Fetch_ArXiv.org=S\u00f8k_ArXiv.org
-Sessions=Tilstander
-Save_all=Lagre_alle
-
-Upgrade_external_links=&Oppgrader_eksterne_linker
-Manage_external_file_types=Sett_opp_eksterne_&filtyper
-
-Open_file=\u00c5pne_fil
-Plugins=Plugins
-Connect_to_external_SQL_database=Koble_til_ekstern_SQL-database
-Export_to_external_SQL_database=Eksporter_til_ekstern_SQL-database
-Search_JSTOR=S\u00f8k_JSTOR
-Fetch_SPIRES=S\u00f8k_SPIRES
-Fetch_INSPIRE=S\u00f8k_INSPIRE
-Search_Medline=S\u00f8k_Medline
-
-Import_from_external_SQL_database=Importer_fra_ekstern_SQL-database
-Focus_entry_table=Flytt_fokus_til_hovedtabell
-Search_ACM_Portal=S\u00f8k_ACM_Portal
-
-Increase_table_font_size=\u00d8k_st\u00f8rrelse_p\u00e5_tabellfont
-Decrease_table_font_size=Reduser_st\u00f8rrelse_p\u00e5_tabellfont
-Forward=Fram
-Back=Tilbake
-
-Manage_plugins=Pluginh\u00e5ndtering
-Look_up_full_text_document=Finn_fulltekstdokument
-Set/clear/rename_fields=Sett/slett/endre_navn_p\u00e5_felter
-
-Search_ScienceDirect=S\u00f8k_ScienceDirect
-Mark_specific_color=M&erk_med_spesifikk_farge
-Resolve_duplicate_BibTeX_keys=S\u00f8k_etter_dupliserte_BibTeX-n\u00f8kler
-
-Minimize_to_system_tray=Minimer_til_programikon
-Legacy_tools...=Utdaterte_verkt\u00f8y...
-Copy_BibTeX_key_and_title=Kopier_BibTeX-n\u00f8kkel_og_tittel
-
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+Abbreviate_journal_names_(ISO)=Forkort_journalnavn_(ISO)
+Abbreviate_journal_names_(MEDLINE)=Forkort_journalnavn_(MEDLINE)
+About_JabRef=Om_&JabRef
+Append_database=Legg_til_inn&hold_fra_database
+Autogenerate_BibTeX_keys=&Autogenerer_BibTeX-n\u00f8kler
+BibTeX=&BibTeX
+Close_database=L&ukk_database
+Copy=K&opier
+Copy_\\cite{BibTeX_key}=Kopier_\\c&ite{BibTeX-n\u00f8kkel}
+Copy_BibTeX_key=Kopier_&BibTeX-n\u00f8kkel
+Custom_export=E&ksterne_eksportfiltre
+Custom_importers=Custom_importers
+Customize_entry_types=&Tilpass_enhetstyper
+Cut=&Klipp_up
+Database_properties=Egenskaper_for_database
+Delete=&Slett
+Edit=&Rediger
+# Bibtex
+Edit_entry=&Rediger_enhet
+Edit_preamble=Rediger_'&preamble'
+Edit_strings=Rediger_&strenger
+Export=&Eksporter
+Export_selected_entries_to_clipboard=Eksporter_valgte_enheter_til_utklippstavlen
+Fetch_Medline=S\u00f8k_&Medline
+
+# Menu names
+File=&Fil
+Find_And_Fix=Finn_og_reparer
+Find_and_remove_exact_duplicates=&Finn_og_fjern_eksakte_duplikater
+Find_duplicates=S\u00f8k_etter_&duplikater
+Help=&Hjelp
+Help_contents=&Oversikt_over_hjelpefiler
+Highlight_groups_matching_all_selected_entries=Uthev_grupper_som_inneholder_alle_valgte_enheter
+Highlight_groups_matching_any_selected_entry=Uthev_grupper_som_inneholder_minst_en_av_de_valgte_enhetene
+Incremental_search=&Inkrementelt_s\u00f8k
+Insert_selected_citations_into_Emacs=Send_valgte_enheter_til_Emacs
+Insert_selected_citations_into_LatexEditor=Send_valgte_enheter_til_LatexEditor
+Insert_selected_citations_into_LyX/Kile=Send_valgte_enheter_til_&LyX/Kile
+Insert_selected_citations_into_WinEdt=Send_valgte_enheter_til_&WinEdt
+Integrity_check=Sjekk_integritet
+# Help
+JabRef_help=JabRef-&hjelp
+Load_session=&Gjenopprett_tilstand
+Manage_content_selectors=Sett_opp_&ordvelgere
+Manage_custom_exports=&Sett_opp_eksterne_eksportfiltre
+Manage_custom_imports=Sett_opp_eksterne_&importfiltre
+
+Manage_journal_abbreviations=Sett_opp_&journalforkortelser
+Mark_entries=&Merk_enheter
+# File menu
+New_database=&Ny_database
+# Menu BibTeX (BibTeX)
+New_entry=N&y_enhet
+New_entry...=&Ny_enhet_...
+New_entry_from_plain_text=Ny_&enhet_fra_ren_tekst
+New_subdatabase_based_on_AUX_file=Ny_deldatabase_basert_p\u00e5_AU&X-fil
+# View
+Next_tab=&Neste_tab
+Open_database=&\u00c5pne_database
+Open_PDF_or_PS=\u00c5pne_&PDF_eller_PS
+Open_URL_or_DOI=\u00c5pne_&URL_eller_DOI
+Options=V&alg
+Paste=&Lim_inn
+# Options
+Preferences=&Oppsett
+Previous_tab=&Forrige_tab
+Quit=&Avslutt
+Recent_files=&Siste_filer
+Redo=&Gjenta
+Replace_string=&Erstatt_streng
+Save_database=&Lagre_database
+Save_database_as_...=L&agre_database_som_...
+Save_selected_as_...=Lagre_&valgte_enheter_som_...
+Save_session=Lag&re_tilstand
+# Tools
+Search=&S\u00f8k
+Search_IEEEXplore=S\u00f8k_IEEEXplore
+Select_all=&Velg_alle
+Set_up_general_fields=Sett_opp_&generelle_felter
+Show_error_console=Vis_feilkonsoll
+Sort_tabs=Sorter_tabs
+Switch_preview_layout=&Skift_layout_p\u00e5_forh\u00e5ndsvisning
+Synchronize_PDF_links=Synkroniser_PDF-lenker
+Synchronize_PS_links=Synkroniser_PS-lenker
+# Export menu
+Tab-separated_file=&Tab_separert_fil
+Toggle_entry_preview=&Vis/skjul_forh\u00e5ndsvisning
+Toggle_groups_interface=Vis/skjul_&grupperingskontroll
+Tools=V&erkt\u00f8y
+Unabbreviate_journal_names=Ekspander_journalnavn
+# Edit
+Undo=&Angre
+Unmark_all=F&jern_merking_fra_alle
+Unmark_entries=&Fjern_merking
+View=&Vis
+Web_search=Webs\u00f8k
+Import_into_new_database=Importer_til_ny_database
+Import_into_current_database=Importer_til_den_aktive_databasen
+
+Scan_database...=&Unders\u00f8k_database
+
+Push_entries_to_external_application_(%0)=Send_enheter_til_ekstern_applikasjon_(%0)
+Write_XMP-metadata_to_PDFs=Skriv_XMP-metadata_til_PDF-filer
+
+Set/clear_fields=Sett/fjern_felter
+Export_selected_entries=Eksporter_valgte_enheter
+Fetch_ArXiv.org=S\u00f8k_ArXiv.org
+Sessions=Tilstander
+Save_all=Lagre_alle
+
+Upgrade_external_links=&Oppgrader_eksterne_linker
+Manage_external_file_types=Sett_opp_eksterne_&filtyper
+
+Open_file=\u00c5pne_fil
+Plugins=Plugins
+Connect_to_external_SQL_database=Koble_til_ekstern_SQL-database
+Export_to_external_SQL_database=Eksporter_til_ekstern_SQL-database
+Search_JSTOR=S\u00f8k_JSTOR
+Fetch_SPIRES=S\u00f8k_SPIRES
+Fetch_INSPIRE=S\u00f8k_INSPIRE
+Search_Medline=S\u00f8k_Medline
+
+Import_from_external_SQL_database=Importer_fra_ekstern_SQL-database
+Focus_entry_table=Flytt_fokus_til_hovedtabell
+Search_ACM_Portal=S\u00f8k_ACM_Portal
+
+Increase_table_font_size=\u00d8k_st\u00f8rrelse_p\u00e5_tabellfont
+Decrease_table_font_size=Reduser_st\u00f8rrelse_p\u00e5_tabellfont
+Forward=Fram
+Back=Tilbake
+
+Manage_plugins=Pluginh\u00e5ndtering
+Look_up_full_text_document=Finn_fulltekstdokument
+Set/clear/rename_fields=Sett/slett/endre_navn_p\u00e5_felter
+
+Search_ScienceDirect=S\u00f8k_ScienceDirect
+Mark_specific_color=M&erk_med_spesifikk_farge
+Resolve_duplicate_BibTeX_keys=S\u00f8k_etter_dupliserte_BibTeX-n\u00f8kler
+
+Minimize_to_system_tray=Minimer_til_programikon
+Legacy_tools...=Utdaterte_verkt\u00f8y...
+Copy_BibTeX_key_and_title=Kopier_BibTeX-n\u00f8kkel_og_tittel
+
 Cleanup_entries=
\ No newline at end of file
diff --git a/src/resource/Menu_tr.properties b/src/resource/Menu_tr.properties
index 64a5480..e2f48c2 100644
--- a/src/resource/Menu_tr.properties
+++ b/src/resource/Menu_tr.properties
@@ -1,127 +1,127 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-Abbreviate_journal_names_(ISO)=Dergi_adlar\u0131n\u0131_k\u0131salt_(ISO)
-Abbreviate_journal_names_(MEDLINE)=Dergi_adlar\u0131n\u0131_k\u0131salt_(MEDLINE)
-About_JabRef=JabRef_H&akk\u0131nda
-Append_database=Veri_taban\u0131n\u0131_son&a_ekle
-Autogenerate_BibTeX_keys=BibTeX_&anahtarlar\u0131n\u0131_otomatik_olu\u015ftur
-BibTeX=&BibTeX
-Close_database=Veritaban\u0131n\u0131_&kapat
-Copy=K&opyala
-Copy_\\cite{BibTeX_key}=\\c&ite{BibTeX_anahtar\u0131}'n\u0131_kopyala
-Copy_BibTeX_key=&BibTeX_anahtar\u0131n\u0131_kopyala
-Custom_export=\u00d6zel_d\u0131&\u015fa_aktar\u0131m
-Custom_importers=\u00d6zel_i\u00e7e_aktar\u0131c\u0131lar
-Customize_entry_types=Girdi_t\u00fcrlerini_&\u00f6zelle\u015ftir
-Cut=Ke&s
-Database_properties=Veritaban\u0131_\u00f6&zellikleri
-Delete=Si&l
-Edit=D\u00fcz&enle
-Edit_entry=Girdiyi_d\u00fcz&enle
-Edit_preamble=&\u00d6nc\u00fcl\u00fc_d\u00fczenle
-Edit_strings=Diz&geleri_d\u00fczenle
-Export=D\u0131&\u015fa_aktar\u0131m
-Export_selected_entries_to_clipboard=S&e\u00e7ili_girdileri_panoya_aktar
-Fetch_Medline=&Medline'dan_getir
-File=&Dosya
-Find_And_Fix=Bul_ve_Onar
-Find_and_remove_exact_duplicates=T\u0131pk\u0131_&\u00e7ift_n\u00fcshalar\u0131_bul_ve_sil
-Find_duplicates=\u00c7ift_n\u00fcshalar\u0131_&bul
-Help=&Yard\u0131m
-Help_contents=Yard\u0131m_&i\u00e7eri\u011fi
-Highlight_groups_matching_all_selected_entries=T\u00fcm_se\u00e7ili_girdilerle_e\u015fle\u015fen_gruplar\u0131_vurgula
-Highlight_groups_matching_any_selected_entry=Herhangi_bir_se\u00e7ili_girdiyle_e\u015fle\u015fen_gruplar\u0131_vurgula
-Incremental_search=Art&\u0131ml\u0131_arama
-Insert_selected_citations_into_Emacs=Se\u00e7ili_at\u0131flar\u0131_&Emacs'e_ekle
-Insert_selected_citations_into_LatexEditor=Se\u00e7ili_at\u0131flar\u0131_Latex_D\u00fczenleyiciye_ekle
-Insert_selected_citations_into_LyX/Kile=Se\u00e7ili_at\u0131flar\u0131_&LyX/Kile'a_ekle
-Insert_selected_citations_into_WinEdt=Se\u00e7ili_at\u0131flar\u0131_&WinEdt'e_ekle
-Integrity_check=B\u00fct\u00fcnl\u00fck_kontrol\u00fc
-JabRef_help=JabRef_&yard\u0131m\u0131
-Load_session=O&turumu_y\u00fckle
-Manage_content_selectors=\u0130\u00e7e&rik_se\u00e7icileri_y\u00f6net
-Manage_custom_exports=\u00d6zel_d\u0131\u015fa_aktar\u0131&mlar\u0131_y\u00f6net
-Manage_custom_imports=\u00d6zel_&i\u00e7e_aktar\u0131mlar\u0131_y\u00f6net
-Manage_journal_abbreviations=Der&gi_k\u0131saltmalar\u0131n\u0131_y\u00f6net
-Mark_entries=Girdileri_i\u015f&aretle
-New_database=Ye&ni_veritaban\u0131
-New_entry=Y&eni_girdi
-New_entry...=Ye&ni_girdi...
-New_entry_from_plain_text=D\u00fcz_metinden_&yeni_girdi
-New_subdatabase_based_on_AUX_file=AU&X_dosyas\u0131_tabanl\u0131_yeni_altveritaban\u0131
-Next_tab=So&nraki_sekme
-Open_database=Veritaban\u0131_&A\u00e7
-Open_PDF_or_PS=&PDF_ya_da_PS_a\u00e7
-Open_URL_or_DOI=&URL_ya_da_DOI_a\u00e7
-Options=Se&\u00e7enekler
-Paste=Ya&p\u0131\u015ft\u0131r
-Preferences=&Tercihler
-Previous_tab=\u00d6n&ceki_sekme
-Quit=&Kapat
-Recent_files=Son_kullan\u0131lan_dosyala&r
-Redo=Y&inele
-Replace_string=Dizgenin_ye&rine_koy
-Save_database=Veritaban\u0131n\u0131_&kaydet
-Save_database_as_...=Varit&aban\u0131n\u0131_farkl\u0131_kaydet...
-Save_selected_as_...=Se\u00e7imi_fark&l\u0131_kaydet...
-Save_session=Oturumu_kaydet
-Search=A&ra
-Search_IEEEXplore=IEEEXplore'da_ara
-Select_all=T&\u00fcm\u00fcn\u00fc_se\u00e7
-Set_up_general_fields=&Genel_alanlar\u0131_ayarla
-Show_error_console=Hata_konsolunu_g\u00f6ster
-Sort_tabs=&Sekmeleri_s\u0131rala
-Switch_preview_layout=\u00d6nizleme_yerle\u015fimini_de&\u011fi\u015ftir
-Synchronize_PDF_links=PDF_linklerini_e\u015fzamanla
-Synchronize_PS_links=PS_linklerini_e\u015fzamanla
-Tab-separated_file=Sek&meyle-ayr\u0131lm\u0131\u015f_dosya
-Toggle_entry_preview=Girdi_\u00f6nzilemesini_a\u00e7/kapa&t
-Toggle_groups_interface=&Grup_aray\u00fcz\u00fcn\u00fc_a\u00e7/kapat
-Tools=Ara&\u00e7lar
-Unabbreviate_journal_names=K\u0131saltma_dergi_adlar\u0131n\u0131_a\u00e7
-Undo=&Geri_al
-Unmark_all=T\u00fcm\u00fcn\u00fcn_i\u015faretini_ka&ld\u0131r
-Unmark_entries=Girdilerin_i\u015fareti&ni_kald\u0131r
-View=&G\u00f6r\u00fcnt\u00fcle
-Web_search=Sanaldoku_arama
-Import_into_new_database=Yeni_veritaban\u0131na_aktar
-Import_into_current_database=Mevcut_veritaban\u0131na_aktar
-Scan_database...=Verita&ban\u0131n\u0131_tara
-Push_entries_to_external_application_(%0)=Girdileri_harici_uygulamaya_itele_(%0)
-Write_XMP-metadata_to_PDFs=XMP-metaverisini_PDF'ye_yaz
-Set/clear_fields=Alanlar\u0131_ayarla/sil
-Export_selected_entries=Se\u00e7ili_girdileri_d\u0131\u015fa_aktar
-Fetch_ArXiv.org=ArXiv.org'dan_getir
-Sessions=Oturumlar
-Save_all=T\u00fcm\u00fcn\u00fc_kaydet
-Upgrade_external_links=Harici_linkleri_sonraki_s\u00fcr\u00fcme_y\u00fckselt
-Manage_external_file_types=Harici_dosya_t\u00fcrlerini_y\u00f6net
-Open_file=Dosya_a\u00e7
-Plugins=E&klentiler
-Connect_to_external_SQL_database=Harici_SQL_veritaban\u0131na_ba\u011flan
-Export_to_external_SQL_database=Harici_veritaban\u0131na_aktar
-Search_JSTOR=JSTOR'da_ara
-Fetch_SPIRES=SPIRES'dan_getir
-Fetch_INSPIRE=INSPIRE'den_getir
-Search_Medline=Medline'da_Ara
-Import_from_external_SQL_database=Harici_SQL_veritaban\u0131ndan_i\u00e7e_aktar
-Focus_entry_table=Girdi_tablosuna_odaklan
-Search_ACM_Portal=ACM_Portal\u0131'nda_ara
-
-Increase_table_font_size=Tablo_yaz\u0131tipi_boyutunu_artt\u0131r
-Decrease_table_font_size=Tablo_yaz\u0131tipi_boyutunu_azalt
-Forward=\u0130leri
-Back=Geri
-Manage_plugins=Eklentileri_y\u00f6net
-Look_up_full_text_document=Tam_metin_belge_bul
-Set/clear/rename_fields=Alanlar\u0131_ata/sil/yeniden_adland\u0131r
-
-Search_ScienceDirect=ScienceDirect'te_Ara
-Mark_specific_color=\u00d6zel_i\u015faretleme_rengi
-Resolve_duplicate_BibTeX_keys=\u00c7ifte_BibTeX_anahtarlar\u0131n\u0131_\u00e7\u00f6z\u00fcmle
-Minimize_to_system_tray=Sistem_tepsisi_simgesine_k\u00fc\u00e7\u00fclt
-Legacy_tools...=Miras_ara\u00e7lar...
-Copy_BibTeX_key_and_title=BibTeX_anahtar\u0131_ve_ba\u015fl\u0131\u011f\u0131n\u0131_kopyala
-
-Cleanup_entries=Girdileri_temizle
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+Abbreviate_journal_names_(ISO)=Dergi_adlar\u0131n\u0131_k\u0131salt_(ISO)
+Abbreviate_journal_names_(MEDLINE)=Dergi_adlar\u0131n\u0131_k\u0131salt_(MEDLINE)
+About_JabRef=JabRef_H&akk\u0131nda
+Append_database=Veri_taban\u0131n\u0131_son&a_ekle
+Autogenerate_BibTeX_keys=BibTeX_&anahtarlar\u0131n\u0131_otomatik_olu\u015ftur
+BibTeX=&BibTeX
+Close_database=Veritaban\u0131n\u0131_&kapat
+Copy=K&opyala
+Copy_\\cite{BibTeX_key}=\\c&ite{BibTeX_anahtar\u0131}'n\u0131_kopyala
+Copy_BibTeX_key=&BibTeX_anahtar\u0131n\u0131_kopyala
+Custom_export=\u00d6zel_d\u0131&\u015fa_aktar\u0131m
+Custom_importers=\u00d6zel_i\u00e7e_aktar\u0131c\u0131lar
+Customize_entry_types=Girdi_t\u00fcrlerini_&\u00f6zelle\u015ftir
+Cut=Ke&s
+Database_properties=Veritaban\u0131_\u00f6&zellikleri
+Delete=Si&l
+Edit=D\u00fcz&enle
+Edit_entry=Girdiyi_d\u00fcz&enle
+Edit_preamble=&\u00d6nc\u00fcl\u00fc_d\u00fczenle
+Edit_strings=Diz&geleri_d\u00fczenle
+Export=D\u0131&\u015fa_aktar\u0131m
+Export_selected_entries_to_clipboard=S&e\u00e7ili_girdileri_panoya_aktar
+Fetch_Medline=&Medline'dan_getir
+File=&Dosya
+Find_And_Fix=Bul_ve_Onar
+Find_and_remove_exact_duplicates=T\u0131pk\u0131_&\u00e7ift_n\u00fcshalar\u0131_bul_ve_sil
+Find_duplicates=\u00c7ift_n\u00fcshalar\u0131_&bul
+Help=&Yard\u0131m
+Help_contents=Yard\u0131m_&i\u00e7eri\u011fi
+Highlight_groups_matching_all_selected_entries=T\u00fcm_se\u00e7ili_girdilerle_e\u015fle\u015fen_gruplar\u0131_vurgula
+Highlight_groups_matching_any_selected_entry=Herhangi_bir_se\u00e7ili_girdiyle_e\u015fle\u015fen_gruplar\u0131_vurgula
+Incremental_search=Art&\u0131ml\u0131_arama
+Insert_selected_citations_into_Emacs=Se\u00e7ili_at\u0131flar\u0131_&Emacs'e_ekle
+Insert_selected_citations_into_LatexEditor=Se\u00e7ili_at\u0131flar\u0131_Latex_D\u00fczenleyiciye_ekle
+Insert_selected_citations_into_LyX/Kile=Se\u00e7ili_at\u0131flar\u0131_&LyX/Kile'a_ekle
+Insert_selected_citations_into_WinEdt=Se\u00e7ili_at\u0131flar\u0131_&WinEdt'e_ekle
+Integrity_check=B\u00fct\u00fcnl\u00fck_kontrol\u00fc
+JabRef_help=JabRef_&yard\u0131m\u0131
+Load_session=O&turumu_y\u00fckle
+Manage_content_selectors=\u0130\u00e7e&rik_se\u00e7icileri_y\u00f6net
+Manage_custom_exports=\u00d6zel_d\u0131\u015fa_aktar\u0131&mlar\u0131_y\u00f6net
+Manage_custom_imports=\u00d6zel_&i\u00e7e_aktar\u0131mlar\u0131_y\u00f6net
+Manage_journal_abbreviations=Der&gi_k\u0131saltmalar\u0131n\u0131_y\u00f6net
+Mark_entries=Girdileri_i\u015f&aretle
+New_database=Ye&ni_veritaban\u0131
+New_entry=Y&eni_girdi
+New_entry...=Ye&ni_girdi...
+New_entry_from_plain_text=D\u00fcz_metinden_&yeni_girdi
+New_subdatabase_based_on_AUX_file=AU&X_dosyas\u0131_tabanl\u0131_yeni_altveritaban\u0131
+Next_tab=So&nraki_sekme
+Open_database=Veritaban\u0131_&A\u00e7
+Open_PDF_or_PS=&PDF_ya_da_PS_a\u00e7
+Open_URL_or_DOI=&URL_ya_da_DOI_a\u00e7
+Options=Se&\u00e7enekler
+Paste=Ya&p\u0131\u015ft\u0131r
+Preferences=&Tercihler
+Previous_tab=\u00d6n&ceki_sekme
+Quit=&Kapat
+Recent_files=Son_kullan\u0131lan_dosyala&r
+Redo=Y&inele
+Replace_string=Dizgenin_ye&rine_koy
+Save_database=Veritaban\u0131n\u0131_&kaydet
+Save_database_as_...=Varit&aban\u0131n\u0131_farkl\u0131_kaydet...
+Save_selected_as_...=Se\u00e7imi_fark&l\u0131_kaydet...
+Save_session=Oturumu_kaydet
+Search=A&ra
+Search_IEEEXplore=IEEEXplore'da_ara
+Select_all=T&\u00fcm\u00fcn\u00fc_se\u00e7
+Set_up_general_fields=&Genel_alanlar\u0131_ayarla
+Show_error_console=Hata_konsolunu_g\u00f6ster
+Sort_tabs=&Sekmeleri_s\u0131rala
+Switch_preview_layout=\u00d6nizleme_yerle\u015fimini_de&\u011fi\u015ftir
+Synchronize_PDF_links=PDF_linklerini_e\u015fzamanla
+Synchronize_PS_links=PS_linklerini_e\u015fzamanla
+Tab-separated_file=Sek&meyle-ayr\u0131lm\u0131\u015f_dosya
+Toggle_entry_preview=Girdi_\u00f6nzilemesini_a\u00e7/kapa&t
+Toggle_groups_interface=&Grup_aray\u00fcz\u00fcn\u00fc_a\u00e7/kapat
+Tools=Ara&\u00e7lar
+Unabbreviate_journal_names=K\u0131saltma_dergi_adlar\u0131n\u0131_a\u00e7
+Undo=&Geri_al
+Unmark_all=T\u00fcm\u00fcn\u00fcn_i\u015faretini_ka&ld\u0131r
+Unmark_entries=Girdilerin_i\u015fareti&ni_kald\u0131r
+View=&G\u00f6r\u00fcnt\u00fcle
+Web_search=Sanaldoku_arama
+Import_into_new_database=Yeni_veritaban\u0131na_aktar
+Import_into_current_database=Mevcut_veritaban\u0131na_aktar
+Scan_database...=Verita&ban\u0131n\u0131_tara
+Push_entries_to_external_application_(%0)=Girdileri_harici_uygulamaya_itele_(%0)
+Write_XMP-metadata_to_PDFs=XMP-metaverisini_PDF'ye_yaz
+Set/clear_fields=Alanlar\u0131_ayarla/sil
+Export_selected_entries=Se\u00e7ili_girdileri_d\u0131\u015fa_aktar
+Fetch_ArXiv.org=ArXiv.org'dan_getir
+Sessions=Oturumlar
+Save_all=T\u00fcm\u00fcn\u00fc_kaydet
+Upgrade_external_links=Harici_linkleri_sonraki_s\u00fcr\u00fcme_y\u00fckselt
+Manage_external_file_types=Harici_dosya_t\u00fcrlerini_y\u00f6net
+Open_file=Dosya_a\u00e7
+Plugins=E&klentiler
+Connect_to_external_SQL_database=Harici_SQL_veritaban\u0131na_ba\u011flan
+Export_to_external_SQL_database=Harici_veritaban\u0131na_aktar
+Search_JSTOR=JSTOR'da_ara
+Fetch_SPIRES=SPIRES'dan_getir
+Fetch_INSPIRE=INSPIRE'den_getir
+Search_Medline=Medline'da_Ara
+Import_from_external_SQL_database=Harici_SQL_veritaban\u0131ndan_i\u00e7e_aktar
+Focus_entry_table=Girdi_tablosuna_odaklan
+Search_ACM_Portal=ACM_Portal\u0131'nda_ara
+
+Increase_table_font_size=Tablo_yaz\u0131tipi_boyutunu_artt\u0131r
+Decrease_table_font_size=Tablo_yaz\u0131tipi_boyutunu_azalt
+Forward=\u0130leri
+Back=Geri
+Manage_plugins=Eklentileri_y\u00f6net
+Look_up_full_text_document=Tam_metin_belge_bul
+Set/clear/rename_fields=Alanlar\u0131_ata/sil/yeniden_adland\u0131r
+
+Search_ScienceDirect=ScienceDirect'te_Ara
+Mark_specific_color=\u00d6zel_i\u015faretleme_rengi
+Resolve_duplicate_BibTeX_keys=\u00c7ifte_BibTeX_anahtarlar\u0131n\u0131_\u00e7\u00f6z\u00fcmle
+Minimize_to_system_tray=Sistem_tepsisi_simgesine_k\u00fc\u00e7\u00fclt
+Legacy_tools...=Miras_ara\u00e7lar...
+Copy_BibTeX_key_and_title=BibTeX_anahtar\u0131_ve_ba\u015fl\u0131\u011f\u0131n\u0131_kopyala
+
+Cleanup_entries=Girdileri_temizle
diff --git a/src/resource/Menu_vi.properties b/src/resource/Menu_vi.properties
old mode 100755
new mode 100644
index 6f9888c..a5cd9d9
--- a/src/resource/Menu_vi.properties
+++ b/src/resource/Menu_vi.properties
@@ -1,151 +1,151 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-Abbreviate_journal_names_(ISO)=Vi\u1ebft_t\u1eaft_t\u00ean_c\u00e1c_t\u1ea1p_ch\u00ed_(ISO)
-Abbreviate_journal_names_(MEDLINE)=Vi\u1ebft_t\u1eaft_t\u00ean_c\u00e1c_t\u1ea1p_ch\u00ed_(MEDLINE)
-About_JabRef=N\u00f3i_&v\u1ec1_JabRef
-Append_database=&N\u1ed1i_CSDL
-Autogenerate_BibTeX_keys=&T\u1ef1_\u0111\u1ed9ng_t\u1ea1o_kh\u00f3a_BibTeX
-Back=Lui
-BibTeX=&BibTeX
-Close_database=&\u0110\u00f3ng_CSDL
-Connect_to_external_SQL_database=K\u1ebft_n\u1ed1i_\u0111\u1ebfn_CSDL_SQL_ngo\u00e0i
-Copy=C&h\u00e9p
-Copy_\\cite{BibTeX_key}=Ch\u00e9p\\&tr\u00edch_d\u1eabn{kh\u00f3a_BibTeX}
-Copy_BibTeX_key=Ch\u00e9p_kh\u00f3a_&BibTeX
-Custom_export=&Xu\u1ea5t_t\u00f9y_ch\u1ecdn
-Custom_importers=Nh\u1eadp_t\u00f9y_ch\u1ecdn
-Customize_entry_types=&T\u00f9y_bi\u1ebfn_ki\u1ec3u_c\u00e1c_m\u1ee5c
-Cut=C\u1eaf&t
-Database_properties=Thu\u1ed9c_t\u00ednh_C&SDL
-Decrease_table_font_size=&Gi\u1ea3m_k\u00edch_th\u01b0\u1edbc_ph\u00f4ng_c\u1ee7a_b\u1ea3ng
-Delete=X\u00f3&a
-Edit=Ch\u1ec9nh_&s\u1eeda
-# Bibtex
-Edit_entry=Ch\u1ec9nh_s\u1eeda_&m\u1ee5c
-Edit_preamble=Ch\u1ec9nh_s\u1eeda_&ph\u1ea7n m\u1edf \u0111\u1ea7u
-Edit_strings=Ch\u1ec9nh_s\u1eeda_&chu\u1ed7i
-Export=X&u\u1ea5t
-
-Export_selected_entries=Xu\u1ea5t_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn
-Export_selected_entries_to_clipboard=Xu\u1ea5t_c\u00e1c_m\u1ee5c_\u0111\u00e3_ch\u1ecdn_ra_&b\u1ed9_nh\u1edb_t\u1ea1m
-Export_to_external_SQL_database=Xu\u1ea5t_ra_CSDL_SQL_ngo\u00e0i
-Fetch_ArXiv.org=L\u1ea5y_v\u1ec1_t\u1eeb_ArXiv.org
-Fetch_Medline=L\u1ea5y_v\u1ec1_t\u1eeb_&Medline
-Fetch_SPIRES=L\u1ea5y_v\u1ec1_t\u1eeb_SPIRES
-Fetch_INSPIRE=
-
-# Menu names
-File=T\u1eadp_t&in
-Find_And_Fix=T\u00ecm_v\u00e0_S\u1eeda_ch\u1eefa
-Find_and_remove_exact_duplicates=T\u00ecm_v\u00e0_lo\u1ea1i_b\u1ecf_c\u00e1c_m\u1ee5c_tr\u00f9ng_&ho\u00e0n_to\u00e0n
-Find_duplicates=T\u00ecm_c\u00e1c_m\u1ee5c_t&r\u00f9ng
-Focus_entry_table=T\u1eadp_trung_v\u00e0o_b\u1ea3ng_ch\u1ee9a_m\u1ee5c
-Forward=T\u1edbi
-Help=Tr\u1ee3_&gi\u00fap
-Help_contents=&N\u1ed9i_dung_tr\u1ee3_gi\u00fap
-Highlight_groups_matching_all_selected_entries=T\u00f4_s\u00e1ng_c\u00e1c_nh\u00f3m_kh\u1edbp_t\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_ch\u1ecdn
-Highlight_groups_matching_any_selected_entry=T\u00f4_s\u00e1ng_c\u00e1c_nh\u00f3m_kh\u1edbp_b\u1ea5t_k\u1ef3_m\u1ee5c_ch\u1ecdn_n\u00e0o
-Import_from_external_SQL_database=Nh\u1eadp_v\u00e0o_t\u1eeb_CSDL_SQL_ngo\u00e0i
-Import_into_current_database=Nh\u1eadp_v\u00e0o_CSDL_hi\u1ec7n_t\u1ea1i
-Import_into_new_database=Nh\u1eadp_v\u00e0o_th\u00e0nh_CSDL_m\u1edbi
-
-Increase_table_font_size=&T\u0103ng_k\u00edch_th\u01b0\u1edbc_ph\u00f4ng_c\u1ee7a_b\u1ea3ng
-Incremental_search=&T\u00ecm_ki\u1ebfm_t\u0103ng_d\u1ea7n
-
-Insert_selected_citations_into_Emacs=Ch\u00e8n_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_&Emacs
-Insert_selected_citations_into_LatexEditor=Ch\u00e8n_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_LatexEditor
-Insert_selected_citations_into_LyX/Kile=Ch\u00e8n_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_&LyX/Kile
-Insert_selected_citations_into_WinEdt=Ch\u00e8n_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_&WinEdt
-Integrity_check=Ki\u1ec3m_tra_t\u00ednh_nguy\u00ean_v\u1eb9n
-# Help
-JabRef_help=Tr\u1ee3_&gi\u00fap_JabRef
-Load_session=N\u1ea1p_&phi\u00ean_l\u00e0m_vi\u1ec7c
-Look_up_full_text_document=T\u00ecm_t\u00e0i_li\u1ec7u_\u0111\u1ea7y_\u0111\u1ee7
-Manage_content_selectors=&Qu\u1ea3n_l\u00fd_c\u00e1c_tr\u00ecnh_ch\u1ecdn_n\u1ed9i_dung
-Manage_custom_exports=Qu\u1ea3n_l\u00fd_&xu\u1ea5t_theo_t\u00f9y_ch\u1ecdn
-Manage_custom_imports=Qu\u1ea3n_l\u00fd_&nh\u1eadp_theo_t\u00f9y_ch\u1ecdn
-Manage_external_file_types=Qu\u1ea3n_l\u00fd_c\u00e1c_ki\u1ec3u_t\u1eadp_tin_ngo\u00e0i
-Manage_journal_abbreviations=Qu\u1ea3n_l\u00fd_vi\u1ebft_t\u1eaft_t\u00ean_t\u1ea1p_&ch\u00ed
-
-Manage_plugins=Qu\u1ea3n_l\u00fd_ph\u1ea7n_m\u1edf_r\u1ed9ng
-Mark_entries=\u0110\u00e1nh_&d\u1ea5u_c\u00e1c_m\u1ee5c
-# File menu
-New_database=&CSDL_m\u1edbi
-# Menu BibTeX (BibTeX)
-New_entry=&M\u1ee5c_m\u1edbi
-New_entry...=&M\u1ee5c_m\u1edbi_...
-New_entry_from_plain_text=M\u1ee5c_m\u1edbi_t\u1eeb_&v\u0103n_b\u1ea3n_tr\u01a1n
-New_subdatabase_based_on_AUX_file=C\u01a1_s\u1edf_d\u1eef_li\u1ec7u_con_m\u1edbi_d\u1ef1a_tr\u00ean_t\u1eadp_tin_AU&X
-# View
-Next_tab=&Th\u1ebb_ti\u1ebfp_theo
-Open_database=&M\u1edf_CSDL
-
-Open_file=M\u1edf_t\u1eadp_tin
-Open_PDF_or_PS=M\u1edf_&PDF_ho\u1eb7c_PS
-Open_URL_or_DOI=M\u1edf_&URL_ho\u1eb7c_DOI
-Options=&T\u00f9y_ch\u1ecdn
-Paste=&D\u00e1n
-
-Plugins=Ph\u1ea7n_m\u1edf_&r\u1ed9ng
-# Options
-Preferences=T\u00f9y_&th\u00edch
-Previous_tab=Th\u1ebb_t&r\u01b0\u1edbc
-
-Push_entries_to_external_application_(%0)=\u0110\u01b0a_c\u00e1c_m\u1ee5c_ra_\u1ee9ng_d\u1ee5ng_ngo\u00e0i_(%0)
-Quit=Th&o\u00e1t
-Recent_files=&C\u00e1c_t\u1eadp_tin_g\u1ea7n_\u0111\u00e2y
-Redo=&L\u00e0m_l\u1ea1i
-Replace_string=&Thay_chu\u1ed7i
-
-Save_all=L\u01b0u_t\u1ea5t_c\u1ea3
-Save_database=&L\u01b0u_CSDL
-Save_database_as_...=L\u01b0&u_CSDL_th\u00e0nh_...
-Save_selected_as_...=L\u01b0u_&ph\u1ea7n_ch\u1ecdn_th\u00e0nh_...
-Save_session=L\u01b0u_phi\u00ean_l\u00e0m_vi\u1ec7c
-
-Scan_database...=&Qu\u00e9t_CSDL...
-# Tools
-Search=T\u00ec&m
-Search_ACM_Portal=T\u00ecm_tr\u00ean_ACM_Portal
-Search_IEEEXplore=T\u00ecm_tr\u00ean__IEEEXplore
-Search_JSTOR=T\u00ecm_tr\u00ean_JSTOR
-Search_Medline=T\u00ecm_tr\u00ean_Medline
-
-Search_ScienceDirect=T\u00ecm_tr\u00ean_ScienceDirect
-Select_all=Ch\u1ecdn_t\u1ea5t_&c\u1ea3
-Sessions=C\u00e1c_phi\u00ean_l\u00e0m_vi\u1ec7c
-Set/clear/rename_fields=Thi\u1ebft_l\u1eadp/X\u00f3a/\u0110\u1ed5i_t\u00ean_tr\u01b0\u1eddng
-
-Set/clear_fields=Thi\u1ebft_l\u1eadp/x\u00f3a_tr\u01b0\u1eddng
-Set_up_general_fields=Thi\u1ebft_l\u1eadp_c\u00e1c_tr\u01b0\u1eddng_t\u1ed5ng_&qu\u00e1t
-Show_error_console=Hi\u1ec3n_th\u1ecb_c\u1eeda_&s\u1ed5_b\u00e1o_l\u1ed7i
-
-Sort_tabs=Ph\u00e2n_lo\u1ea1i_t&h\u1ebb
-Switch_preview_layout=&B\u1eadt_tr\u00ecnh_b\u00e0y_xem_tr\u01b0\u1edbc
-Synchronize_PDF_links=\u0110\u1ed3ng_b\u1ed9_h\u00f3a_c\u00e1c_li\u00ean_k\u1ebft_PDF
-Synchronize_PS_links=\u0110\u1ed3ng_b\u1ed9_h\u00f3a_c\u00e1c_li\u00ean_k\u1ebft_PS
-# Export menu
-Tab-separated_file=&T\u1eadp_tin_ph\u00e2n_c\u00e1ch_b\u1edfi_c\u1eef d\u1eebng
-Toggle_entry_preview=&B\u1eadt/t\u1eaft_xem_tr\u01b0\u1edbc_m\u1ee5c
-Toggle_groups_interface=B\u1eadt/t\u1eaft_&giao_di\u1ec7n_nh\u00f3m
-Tools=&C\u00f4ng_c\u1ee5
-Unabbreviate_journal_names=Kh\u00f4ng vi\u1ebft t\u1eaft t\u00ean_c\u00e1c_t\u1ea1p_ch\u00ed
-# Edit
-Undo=&Quay_ng\u01b0\u1ee3c_l\u1ec7nh
-Unmark_all=&Kh\u1eed_\u0111\u00e1nh_d\u1ea5u_t\u1ea5t_c\u1ea3
-Unmark_entries=Kh\u1eed_\u0111\u00e1nh_&d\u1ea5u_c\u00e1c_m\u1ee5c
-
-Upgrade_external_links=N\u00e2ng_c\u1ea5p_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i
-View=&Xem
-Web_search=T\u00ecm_tr\u00ean_m\u1ea1ng
-Write_XMP-metadata_to_PDFs=Ghi_XMP-metadata_th\u00e0nh_c\u00e1c_PDF
-
-
-Mark_specific_color=
-Resolve_duplicate_BibTeX_keys=
-Minimize_to_system_tray=
-Legacy_tools...=
-Copy_BibTeX_key_and_title=
-
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+Abbreviate_journal_names_(ISO)=Vi\u1ebft_t\u1eaft_t\u00ean_c\u00e1c_t\u1ea1p_ch\u00ed_(ISO)
+Abbreviate_journal_names_(MEDLINE)=Vi\u1ebft_t\u1eaft_t\u00ean_c\u00e1c_t\u1ea1p_ch\u00ed_(MEDLINE)
+About_JabRef=N\u00f3i_&v\u1ec1_JabRef
+Append_database=&N\u1ed1i_CSDL
+Autogenerate_BibTeX_keys=&T\u1ef1_\u0111\u1ed9ng_t\u1ea1o_kh\u00f3a_BibTeX
+Back=Lui
+BibTeX=&BibTeX
+Close_database=&\u0110\u00f3ng_CSDL
+Connect_to_external_SQL_database=K\u1ebft_n\u1ed1i_\u0111\u1ebfn_CSDL_SQL_ngo\u00e0i
+Copy=C&h\u00e9p
+Copy_\\cite{BibTeX_key}=Ch\u00e9p\\&tr\u00edch_d\u1eabn{kh\u00f3a_BibTeX}
+Copy_BibTeX_key=Ch\u00e9p_kh\u00f3a_&BibTeX
+Custom_export=&Xu\u1ea5t_t\u00f9y_ch\u1ecdn
+Custom_importers=Nh\u1eadp_t\u00f9y_ch\u1ecdn
+Customize_entry_types=&T\u00f9y_bi\u1ebfn_ki\u1ec3u_c\u00e1c_m\u1ee5c
+Cut=C\u1eaf&t
+Database_properties=Thu\u1ed9c_t\u00ednh_C&SDL
+Decrease_table_font_size=&Gi\u1ea3m_k\u00edch_th\u01b0\u1edbc_ph\u00f4ng_c\u1ee7a_b\u1ea3ng
+Delete=X\u00f3&a
+Edit=Ch\u1ec9nh_&s\u1eeda
+# Bibtex
+Edit_entry=Ch\u1ec9nh_s\u1eeda_&m\u1ee5c
+Edit_preamble=Ch\u1ec9nh_s\u1eeda_&ph\u1ea7n m\u1edf \u0111\u1ea7u
+Edit_strings=Ch\u1ec9nh_s\u1eeda_&chu\u1ed7i
+Export=X&u\u1ea5t
+
+Export_selected_entries=Xu\u1ea5t_c\u00e1c_m\u1ee5c_\u0111\u01b0\u1ee3c_ch\u1ecdn
+Export_selected_entries_to_clipboard=Xu\u1ea5t_c\u00e1c_m\u1ee5c_\u0111\u00e3_ch\u1ecdn_ra_&b\u1ed9_nh\u1edb_t\u1ea1m
+Export_to_external_SQL_database=Xu\u1ea5t_ra_CSDL_SQL_ngo\u00e0i
+Fetch_ArXiv.org=L\u1ea5y_v\u1ec1_t\u1eeb_ArXiv.org
+Fetch_Medline=L\u1ea5y_v\u1ec1_t\u1eeb_&Medline
+Fetch_SPIRES=L\u1ea5y_v\u1ec1_t\u1eeb_SPIRES
+Fetch_INSPIRE=
+
+# Menu names
+File=T\u1eadp_t&in
+Find_And_Fix=T\u00ecm_v\u00e0_S\u1eeda_ch\u1eefa
+Find_and_remove_exact_duplicates=T\u00ecm_v\u00e0_lo\u1ea1i_b\u1ecf_c\u00e1c_m\u1ee5c_tr\u00f9ng_&ho\u00e0n_to\u00e0n
+Find_duplicates=T\u00ecm_c\u00e1c_m\u1ee5c_t&r\u00f9ng
+Focus_entry_table=T\u1eadp_trung_v\u00e0o_b\u1ea3ng_ch\u1ee9a_m\u1ee5c
+Forward=T\u1edbi
+Help=Tr\u1ee3_&gi\u00fap
+Help_contents=&N\u1ed9i_dung_tr\u1ee3_gi\u00fap
+Highlight_groups_matching_all_selected_entries=T\u00f4_s\u00e1ng_c\u00e1c_nh\u00f3m_kh\u1edbp_t\u1ea5t_c\u1ea3_c\u00e1c_m\u1ee5c_ch\u1ecdn
+Highlight_groups_matching_any_selected_entry=T\u00f4_s\u00e1ng_c\u00e1c_nh\u00f3m_kh\u1edbp_b\u1ea5t_k\u1ef3_m\u1ee5c_ch\u1ecdn_n\u00e0o
+Import_from_external_SQL_database=Nh\u1eadp_v\u00e0o_t\u1eeb_CSDL_SQL_ngo\u00e0i
+Import_into_current_database=Nh\u1eadp_v\u00e0o_CSDL_hi\u1ec7n_t\u1ea1i
+Import_into_new_database=Nh\u1eadp_v\u00e0o_th\u00e0nh_CSDL_m\u1edbi
+
+Increase_table_font_size=&T\u0103ng_k\u00edch_th\u01b0\u1edbc_ph\u00f4ng_c\u1ee7a_b\u1ea3ng
+Incremental_search=&T\u00ecm_ki\u1ebfm_t\u0103ng_d\u1ea7n
+
+Insert_selected_citations_into_Emacs=Ch\u00e8n_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_&Emacs
+Insert_selected_citations_into_LatexEditor=Ch\u00e8n_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_LatexEditor
+Insert_selected_citations_into_LyX/Kile=Ch\u00e8n_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_&LyX/Kile
+Insert_selected_citations_into_WinEdt=Ch\u00e8n_tr\u00edch_d\u1eabn_\u0111\u01b0\u1ee3c_ch\u1ecdn_v\u00e0o_&WinEdt
+Integrity_check=Ki\u1ec3m_tra_t\u00ednh_nguy\u00ean_v\u1eb9n
+# Help
+JabRef_help=Tr\u1ee3_&gi\u00fap_JabRef
+Load_session=N\u1ea1p_&phi\u00ean_l\u00e0m_vi\u1ec7c
+Look_up_full_text_document=T\u00ecm_t\u00e0i_li\u1ec7u_\u0111\u1ea7y_\u0111\u1ee7
+Manage_content_selectors=&Qu\u1ea3n_l\u00fd_c\u00e1c_tr\u00ecnh_ch\u1ecdn_n\u1ed9i_dung
+Manage_custom_exports=Qu\u1ea3n_l\u00fd_&xu\u1ea5t_theo_t\u00f9y_ch\u1ecdn
+Manage_custom_imports=Qu\u1ea3n_l\u00fd_&nh\u1eadp_theo_t\u00f9y_ch\u1ecdn
+Manage_external_file_types=Qu\u1ea3n_l\u00fd_c\u00e1c_ki\u1ec3u_t\u1eadp_tin_ngo\u00e0i
+Manage_journal_abbreviations=Qu\u1ea3n_l\u00fd_vi\u1ebft_t\u1eaft_t\u00ean_t\u1ea1p_&ch\u00ed
+
+Manage_plugins=Qu\u1ea3n_l\u00fd_ph\u1ea7n_m\u1edf_r\u1ed9ng
+Mark_entries=\u0110\u00e1nh_&d\u1ea5u_c\u00e1c_m\u1ee5c
+# File menu
+New_database=&CSDL_m\u1edbi
+# Menu BibTeX (BibTeX)
+New_entry=&M\u1ee5c_m\u1edbi
+New_entry...=&M\u1ee5c_m\u1edbi_...
+New_entry_from_plain_text=M\u1ee5c_m\u1edbi_t\u1eeb_&v\u0103n_b\u1ea3n_tr\u01a1n
+New_subdatabase_based_on_AUX_file=C\u01a1_s\u1edf_d\u1eef_li\u1ec7u_con_m\u1edbi_d\u1ef1a_tr\u00ean_t\u1eadp_tin_AU&X
+# View
+Next_tab=&Th\u1ebb_ti\u1ebfp_theo
+Open_database=&M\u1edf_CSDL
+
+Open_file=M\u1edf_t\u1eadp_tin
+Open_PDF_or_PS=M\u1edf_&PDF_ho\u1eb7c_PS
+Open_URL_or_DOI=M\u1edf_&URL_ho\u1eb7c_DOI
+Options=&T\u00f9y_ch\u1ecdn
+Paste=&D\u00e1n
+
+Plugins=Ph\u1ea7n_m\u1edf_&r\u1ed9ng
+# Options
+Preferences=T\u00f9y_&th\u00edch
+Previous_tab=Th\u1ebb_t&r\u01b0\u1edbc
+
+Push_entries_to_external_application_(%0)=\u0110\u01b0a_c\u00e1c_m\u1ee5c_ra_\u1ee9ng_d\u1ee5ng_ngo\u00e0i_(%0)
+Quit=Th&o\u00e1t
+Recent_files=&C\u00e1c_t\u1eadp_tin_g\u1ea7n_\u0111\u00e2y
+Redo=&L\u00e0m_l\u1ea1i
+Replace_string=&Thay_chu\u1ed7i
+
+Save_all=L\u01b0u_t\u1ea5t_c\u1ea3
+Save_database=&L\u01b0u_CSDL
+Save_database_as_...=L\u01b0&u_CSDL_th\u00e0nh_...
+Save_selected_as_...=L\u01b0u_&ph\u1ea7n_ch\u1ecdn_th\u00e0nh_...
+Save_session=L\u01b0u_phi\u00ean_l\u00e0m_vi\u1ec7c
+
+Scan_database...=&Qu\u00e9t_CSDL...
+# Tools
+Search=T\u00ec&m
+Search_ACM_Portal=T\u00ecm_tr\u00ean_ACM_Portal
+Search_IEEEXplore=T\u00ecm_tr\u00ean__IEEEXplore
+Search_JSTOR=T\u00ecm_tr\u00ean_JSTOR
+Search_Medline=T\u00ecm_tr\u00ean_Medline
+
+Search_ScienceDirect=T\u00ecm_tr\u00ean_ScienceDirect
+Select_all=Ch\u1ecdn_t\u1ea5t_&c\u1ea3
+Sessions=C\u00e1c_phi\u00ean_l\u00e0m_vi\u1ec7c
+Set/clear/rename_fields=Thi\u1ebft_l\u1eadp/X\u00f3a/\u0110\u1ed5i_t\u00ean_tr\u01b0\u1eddng
+
+Set/clear_fields=Thi\u1ebft_l\u1eadp/x\u00f3a_tr\u01b0\u1eddng
+Set_up_general_fields=Thi\u1ebft_l\u1eadp_c\u00e1c_tr\u01b0\u1eddng_t\u1ed5ng_&qu\u00e1t
+Show_error_console=Hi\u1ec3n_th\u1ecb_c\u1eeda_&s\u1ed5_b\u00e1o_l\u1ed7i
+
+Sort_tabs=Ph\u00e2n_lo\u1ea1i_t&h\u1ebb
+Switch_preview_layout=&B\u1eadt_tr\u00ecnh_b\u00e0y_xem_tr\u01b0\u1edbc
+Synchronize_PDF_links=\u0110\u1ed3ng_b\u1ed9_h\u00f3a_c\u00e1c_li\u00ean_k\u1ebft_PDF
+Synchronize_PS_links=\u0110\u1ed3ng_b\u1ed9_h\u00f3a_c\u00e1c_li\u00ean_k\u1ebft_PS
+# Export menu
+Tab-separated_file=&T\u1eadp_tin_ph\u00e2n_c\u00e1ch_b\u1edfi_c\u1eef d\u1eebng
+Toggle_entry_preview=&B\u1eadt/t\u1eaft_xem_tr\u01b0\u1edbc_m\u1ee5c
+Toggle_groups_interface=B\u1eadt/t\u1eaft_&giao_di\u1ec7n_nh\u00f3m
+Tools=&C\u00f4ng_c\u1ee5
+Unabbreviate_journal_names=Kh\u00f4ng vi\u1ebft t\u1eaft t\u00ean_c\u00e1c_t\u1ea1p_ch\u00ed
+# Edit
+Undo=&Quay_ng\u01b0\u1ee3c_l\u1ec7nh
+Unmark_all=&Kh\u1eed_\u0111\u00e1nh_d\u1ea5u_t\u1ea5t_c\u1ea3
+Unmark_entries=Kh\u1eed_\u0111\u00e1nh_&d\u1ea5u_c\u00e1c_m\u1ee5c
+
+Upgrade_external_links=N\u00e2ng_c\u1ea5p_c\u00e1c_li\u00ean_k\u1ebft_ngo\u00e0i
+View=&Xem
+Web_search=T\u00ecm_tr\u00ean_m\u1ea1ng
+Write_XMP-metadata_to_PDFs=Ghi_XMP-metadata_th\u00e0nh_c\u00e1c_PDF
+
+
+Mark_specific_color=
+Resolve_duplicate_BibTeX_keys=
+Minimize_to_system_tray=
+Legacy_tools...=
+Copy_BibTeX_key_and_title=
+
 Cleanup_entries=
\ No newline at end of file
diff --git a/src/resource/Menu_zh.properties b/src/resource/Menu_zh.properties
index bcea197..d124fae 100644
--- a/src/resource/Menu_zh.properties
+++ b/src/resource/Menu_zh.properties
@@ -1,149 +1,149 @@
-#!
-#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
-#! encoding:ISO-8859-1
-Abbreviate_journal_names_(ISO)=\u7f29\u5199\u671f\u520a\u540d\u79f0_(ISO)
-Abbreviate_journal_names_(MEDLINE)=\u7f29\u5199\u671f\u520a\u540d\u79f0_(MEDLINE)
-About_JabRef=\u5173\u4e8e_JabRef_(&A)
-Append_database=\u8ffd\u52a0\u6570\u636e\u5e93_(&A)
-Autogenerate_BibTeX_keys=\u81ea\u52a8\u751f\u6210_BibTeX_\u952e(&A)
-BibTeX=&BibTeX
-Close_database=\u5173\u95ed\u5f53\u524d\u6570\u636e\u5e93_(&C)
-Copy=\u590d\u5236(&o)
-Copy_\\cite{BibTeX_key}=\u590d\u5236_\\c&ite{BibTeX_\u952e\u503c}
-Copy_BibTeX_key=\u590d\u5236_&BibTeX_\u952e\u503c
-Custom_export=\u81ea\u5b9a\u4e49\u5bfc\u51fa\u5668_(&x)
-Custom_importers=\u81ea\u5b9a\u4e49\u5bfc\u5165\u5668
-Customize_entry_types=\u81ea\u5b9a\u4e49\u8bb0\u5f55\u7c7b\u522b_(&C)
-Cut=\u526a\u5207_(&C)
-Database_properties=\u6570\u636e\u5e93\u5c5e\u6027_(&p)
-Delete=\u5220\u9664_(&D)
-Edit=\u7f16\u8f91_(&E)
-# Bibtex
-Edit_entry=\u7f16\u8f91\u8bb0\u5f55_(&E)
-Edit_preamble=\u7f16\u8f91\u5bfc\u8a00\u533a_(&preamble)
-Edit_strings=\u7f16\u8f91\u7b80\u5199\u5b57\u4e32_(&s)
-Export=\u5bfc\u51fa_(&E)
-Export_selected_entries_to_clipboard=\u5bfc\u51fa\u9009\u4e2d\u8bb0\u5f55\u5230\u526a\u8d34\u677f_(&E)
-Fetch_Medline=\u6293\u53d6_&Medline
-
-# Menu names
-File=\u6587\u4ef6_(&F)
-Find_And_Fix=\u67e5\u627e\u5e76\u89e3\u51b3
-Find_and_remove_exact_duplicates=\u67e5\u627e\u5e76\u79fb\u9664\u5b8c\u5168\u91cd\u590d\u8bb0\u5f55_(&d)
-Find_duplicates=\u67e5\u627e\u91cd\u590d\u8bb0\u5f55_(&F)
-Help=\u5e2e\u52a9_(&H)
-Help_contents=\u5e2e\u52a9\u5185\u5bb9_(&c)
-Highlight_groups_matching_all_selected_entries=\u9ad8\u4eae\u663e\u793a\u5305\u542b\u6240\u6709\u9009\u4e2d\u8bb0\u5f55\u7684\u5206\u7ec4
-Highlight_groups_matching_any_selected_entry=\u9ad8\u4eae\u663e\u793a\u5305\u542b\u4efb\u4e00\u9009\u4e2d\u8bb0\u5f55\u7684\u5206\u7ec4
-Incremental_search=\u589e\u91cf\u67e5\u627e_(&I)
-
-Insert_selected_citations_into_Emacs=\u5c06\u9009\u4e2d_cite_\u63d2\u5165\u5230_(&E)macs
-Insert_selected_citations_into_LatexEditor=\u5c06\u9009\u4e2d_cite_\u63d2\u5165\u5230_LatexEditor
-Insert_selected_citations_into_LyX/Kile=\u5c06\u9009\u4e2d_cite_\u63d2\u5165\u5230_&LyX/Kile
-Insert_selected_citations_into_WinEdt=\u5c06\u9009\u4e2d_cite_\u63d2\u5165\u5230_&WinEdt
-Integrity_check=\u5b8c\u6574\u6027\u68c0\u67e5
-# Help
-JabRef_help=JabRef_\u5e2e\u52a9_(&h)
-Load_session=\u52a0\u8f7d\u4f1a\u8bdd_(&D)
-Manage_content_selectors=\u7ba1\u7406\u5185\u5bb9\u4e0b\u62c9\u83dc\u5355_(&C)
-Manage_custom_exports=\u7ba1\u7406\u81ea\u5b9a\u4e49\u5bfc\u51fa\u5668_(&M)
-Manage_custom_imports=\u7ba1\u7406\u81ea\u5b9a\u4e49\u5bfc\u5165\u5668_(&I)
-Manage_journal_abbreviations=\u7ba1\u7406\u671f\u520a\u540d\u7f29\u5199\u89c4\u5219_(&J)
-Mark_entries=\u9ad8\u4eae\u6807\u8bb0\u9009\u4e2d\u8bb0\u5f55_(&M)
-# File menu
-New_database=\u65b0\u5efa\u6570\u636e\u5e93_(&N)
-# Menu BibTeX (BibTeX)
-New_entry=\u65b0\u5efa\u8bb0\u5f55\u5411\u5bfc_(&e)
-New_entry...=\u65b0\u5efa\u8bb0\u5f55_(&N)...
-New_entry_from_plain_text=\u4ee5\u7eaf\u6587\u672c\u65b0\u5efa\u8bb0\u5f55_(&W)
-New_subdatabase_based_on_AUX_file=\u6839\u636e_AU&X_\u6587\u4ef6\u65b0\u5efa\u5b50\u6570\u636e\u5e93
-# View
-Next_tab=\u4e0b\u4e00\u6807\u7b7e\u9875_(&N)
-Open_database=\u6253\u5f00\u6570\u636e\u5e93_(&O)
-Open_PDF_or_PS=\u6253\u5f00_(&P)DF_\u6216_PS
-Open_URL_or_DOI=\u6253\u5f00_&URL_\u6216_DOI
-Options=\u9009\u9879_(&O)
-Paste=\u7c98\u8d34_(&P)
-# Options
-Preferences=\u9996\u9009\u9879_(&P)
-Previous_tab=\u4e0a\u4e00\u6807\u7b7e\u9875_(&P)
-Quit=\u9000\u51fa_(&Q)
-Recent_files=\u6700\u8fd1\u6253\u5f00\u7684\u6587\u4ef6_(&R)
-Redo=\u91cd\u505a_(&R)
-Replace_string=\u66ff\u6362\u5b57\u7b26\u4e32_(&R)
-Save_database=\u4fdd\u5b58\u6570\u636e\u5e93_(&S)
-Save_database_as_...=\u6570\u636e\u5e93\u53e6\u5b58\u4e3a_(&A)...
-Save_selected_as_...=\u9009\u4e2d\u8bb0\u5f55\u53e6\u5b58\u4e3a_(&L)...
-Save_session=\u4fdd\u5b58\u5f53\u524d\u4f1a\u8bdd
-# Tools
-Search=\u67e5\u627e_(&S)
-Search_IEEEXplore=\u641c\u7d22_IEEEXplore
-Select_all=\u5168\u9009_(&A)
-Set_up_general_fields=\u914d\u7f6e_&general_\u57df
-Show_error_console=\u6253\u5f00\u9519\u8bef\u663e\u793a\u7ec8\u7aef
-
-Sort_tabs=\u6807\u7b7e\u9875\u6392\u5e8f_(&S)
-Switch_preview_layout=\u5207\u6362\u8bb0\u5f55\u9884\u89c8\u65b9\u5f0f_(&S)
-Synchronize_PDF_links=\u81ea\u52a8\u540c\u6b65_PDF_\u94fe\u63a5
-Synchronize_PS_links=\u81ea\u52a8\u540c\u6b65_PS_\u94fe\u63a5
-# Export menu
-Tab-separated_file=\u4f7f\u7528\u5236\u8868\u7b26\u95f4\u9694\u7684\u6587\u4ef6_(&T)
-Toggle_entry_preview=\u6253\u5f00/\u5173\u95ed\u8bb0\u5f55\u9884\u89c8_(&T)
-Toggle_groups_interface=\u6253\u5f00/\u5173\u95ed\u5206\u7ec4\u754c\u9762_(&G)
-Tools=\u5de5\u5177_(&T)
-Unabbreviate_journal_names=\u5c55\u5f00\u671f\u520a\u540d\u79f0
-# Edit
-Undo=\u64a4\u9500_(&U)
-Unmark_all=\u64a4\u9500\u6240\u6709\u9ad8\u4eae\u6807\u8bb0_(&L)
-Unmark_entries=\u64a4\u9500\u9009\u4e2d\u9ad8\u4eae\u6807\u8bb0_(&N)
-View=\u89c6\u56fe_(&V)
-Web_search=Web_\u641c\u7d22
-Import_into_new_database=\u5bfc\u5165\u5230\u65b0\u6570\u636e\u5e93
-Import_into_current_database=\u5bfc\u5165\u5230\u5f53\u524d\u6570\u636e\u5e93
-
-Scan_database...=\u626b\u63cf\u6570\u636e\u5e93_(&C)...
-
-Push_entries_to_external_application_(%0)=\u63a8\u9001\u9009\u4e2d\u8bb0\u5f55\u5230\u5916\u90e8\u7a0b\u5e8f_(%0)
-Write_XMP-metadata_to_PDFs=\u5c06_XMP_\u5143\u6570\u636e\u5199\u5165\u5230_PDF_\u4e2d
-Set/clear_fields=\u8bbe\u7f6e/\u6e05\u9664_\u57df
-
-Export_selected_entries=\u5bfc\u51fa\u9009\u4e2d\u8bb0\u5f55
-Fetch_ArXiv.org=\u6293\u53d6_ArXiv.org
-Sessions=\u4f1a\u8bdd
-
-Save_all=\u4fdd\u5b58\u5168\u90e8
-
-Upgrade_external_links=\u66f4\u65b0\u5916\u90e8\u94fe\u63a5
-Manage_external_file_types=\u7ba1\u7406\u5916\u90e8\u6587\u4ef6\u7c7b\u578b\u5173\u8054
-
-Open_file=\u6253\u5f00\u6587\u4ef6
-
-Plugins=\u63d2\u4ef6_(&P)
-Connect_to_external_SQL_database=\u8fde\u63a5\u5230\u5916\u90e8_SQL_\u6570\u636e\u5e93
-Export_to_external_SQL_database=\u5bfc\u51fa\u5230\u5916\u90e8_SQL_\u6570\u636e\u5e93
-Search_JSTOR=\u641c\u7d22_JSTOR
-Fetch_SPIRES=\u6293\u53d6_SPIRES
-Fetch_INSPIRE=
-Search_Medline=\u641c\u7d22_Medline
-Import_from_external_SQL_database=\u4ece\u5916\u90e8_SQL_\u6570\u636e\u5e93\u5bfc\u5165
-Focus_entry_table=\u6fc0\u6d3b\u8bb0\u5f55\u5217\u8868
-Search_ACM_Portal=\u641c\u7d22_ACM_Portal
-
-Increase_table_font_size=\u653e\u5927\u5217\u8868\u5b57\u4f53_(&I)
-Decrease_table_font_size=\u7f29\u5c0f\u5217\u8868\u5b57\u4f53_(&D)
-Forward=\u524d\u8fdb
-Back=\u540e\u9000
-
-Manage_plugins=\u7ba1\u7406\u63d2\u4ef6
-Look_up_full_text_document=\u67e5\u627e\u5b8c\u6574\u6587\u6863
-
-Set/clear/rename_fields=\u8bbe\u7f6e/\u6e05\u9664/\u91cd\u547d\u540d_\u57df
-
-Search_ScienceDirect=\u641c\u7d22_ScienceDirect
-Mark_specific_color=\u7528\u6307\u5b9a\u989c\u8272\u6807\u8bb0_(&a)
-Resolve_duplicate_BibTeX_keys=\u5904\u7406\u91cd\u590d\u7684_BibTeX_\u952e\u503c
-Minimize_to_system_tray=
-Legacy_tools...=
-Copy_BibTeX_key_and_title=
-
+#!
+#! created/edited by Popeye version 0.54 (popeye.sourceforge.net)
+#! encoding:ISO-8859-1
+Abbreviate_journal_names_(ISO)=\u7f29\u5199\u671f\u520a\u540d\u79f0_(ISO)
+Abbreviate_journal_names_(MEDLINE)=\u7f29\u5199\u671f\u520a\u540d\u79f0_(MEDLINE)
+About_JabRef=\u5173\u4e8e_JabRef_(&A)
+Append_database=\u8ffd\u52a0\u6570\u636e\u5e93_(&A)
+Autogenerate_BibTeX_keys=\u81ea\u52a8\u751f\u6210_BibTeX_\u952e(&A)
+BibTeX=&BibTeX
+Close_database=\u5173\u95ed\u5f53\u524d\u6570\u636e\u5e93_(&C)
+Copy=\u590d\u5236(&o)
+Copy_\\cite{BibTeX_key}=\u590d\u5236_\\c&ite{BibTeX_\u952e\u503c}
+Copy_BibTeX_key=\u590d\u5236_&BibTeX_\u952e\u503c
+Custom_export=\u81ea\u5b9a\u4e49\u5bfc\u51fa\u5668_(&x)
+Custom_importers=\u81ea\u5b9a\u4e49\u5bfc\u5165\u5668
+Customize_entry_types=\u81ea\u5b9a\u4e49\u8bb0\u5f55\u7c7b\u522b_(&C)
+Cut=\u526a\u5207_(&C)
+Database_properties=\u6570\u636e\u5e93\u5c5e\u6027_(&p)
+Delete=\u5220\u9664_(&D)
+Edit=\u7f16\u8f91_(&E)
+# Bibtex
+Edit_entry=\u7f16\u8f91\u8bb0\u5f55_(&E)
+Edit_preamble=\u7f16\u8f91\u5bfc\u8a00\u533a_(&preamble)
+Edit_strings=\u7f16\u8f91\u7b80\u5199\u5b57\u4e32_(&s)
+Export=\u5bfc\u51fa_(&E)
+Export_selected_entries_to_clipboard=\u5bfc\u51fa\u9009\u4e2d\u8bb0\u5f55\u5230\u526a\u8d34\u677f_(&E)
+Fetch_Medline=\u6293\u53d6_&Medline
+
+# Menu names
+File=\u6587\u4ef6_(&F)
+Find_And_Fix=\u67e5\u627e\u5e76\u89e3\u51b3
+Find_and_remove_exact_duplicates=\u67e5\u627e\u5e76\u79fb\u9664\u5b8c\u5168\u91cd\u590d\u8bb0\u5f55_(&d)
+Find_duplicates=\u67e5\u627e\u91cd\u590d\u8bb0\u5f55_(&F)
+Help=\u5e2e\u52a9_(&H)
+Help_contents=\u5e2e\u52a9\u5185\u5bb9_(&c)
+Highlight_groups_matching_all_selected_entries=\u9ad8\u4eae\u663e\u793a\u5305\u542b\u6240\u6709\u9009\u4e2d\u8bb0\u5f55\u7684\u5206\u7ec4
+Highlight_groups_matching_any_selected_entry=\u9ad8\u4eae\u663e\u793a\u5305\u542b\u4efb\u4e00\u9009\u4e2d\u8bb0\u5f55\u7684\u5206\u7ec4
+Incremental_search=\u589e\u91cf\u67e5\u627e_(&I)
+
+Insert_selected_citations_into_Emacs=\u5c06\u9009\u4e2d_cite_\u63d2\u5165\u5230_(&E)macs
+Insert_selected_citations_into_LatexEditor=\u5c06\u9009\u4e2d_cite_\u63d2\u5165\u5230_LatexEditor
+Insert_selected_citations_into_LyX/Kile=\u5c06\u9009\u4e2d_cite_\u63d2\u5165\u5230_&LyX/Kile
+Insert_selected_citations_into_WinEdt=\u5c06\u9009\u4e2d_cite_\u63d2\u5165\u5230_&WinEdt
+Integrity_check=\u5b8c\u6574\u6027\u68c0\u67e5
+# Help
+JabRef_help=JabRef_\u5e2e\u52a9_(&h)
+Load_session=\u52a0\u8f7d\u4f1a\u8bdd_(&D)
+Manage_content_selectors=\u7ba1\u7406\u5185\u5bb9\u4e0b\u62c9\u83dc\u5355_(&C)
+Manage_custom_exports=\u7ba1\u7406\u81ea\u5b9a\u4e49\u5bfc\u51fa\u5668_(&M)
+Manage_custom_imports=\u7ba1\u7406\u81ea\u5b9a\u4e49\u5bfc\u5165\u5668_(&I)
+Manage_journal_abbreviations=\u7ba1\u7406\u671f\u520a\u540d\u7f29\u5199\u89c4\u5219_(&J)
+Mark_entries=\u9ad8\u4eae\u6807\u8bb0\u9009\u4e2d\u8bb0\u5f55_(&M)
+# File menu
+New_database=\u65b0\u5efa\u6570\u636e\u5e93_(&N)
+# Menu BibTeX (BibTeX)
+New_entry=\u65b0\u5efa\u8bb0\u5f55\u5411\u5bfc_(&e)
+New_entry...=\u65b0\u5efa\u8bb0\u5f55_(&N)...
+New_entry_from_plain_text=\u4ee5\u7eaf\u6587\u672c\u65b0\u5efa\u8bb0\u5f55_(&W)
+New_subdatabase_based_on_AUX_file=\u6839\u636e_AU&X_\u6587\u4ef6\u65b0\u5efa\u5b50\u6570\u636e\u5e93
+# View
+Next_tab=\u4e0b\u4e00\u6807\u7b7e\u9875_(&N)
+Open_database=\u6253\u5f00\u6570\u636e\u5e93_(&O)
+Open_PDF_or_PS=\u6253\u5f00_(&P)DF_\u6216_PS
+Open_URL_or_DOI=\u6253\u5f00_&URL_\u6216_DOI
+Options=\u9009\u9879_(&O)
+Paste=\u7c98\u8d34_(&P)
+# Options
+Preferences=\u9996\u9009\u9879_(&P)
+Previous_tab=\u4e0a\u4e00\u6807\u7b7e\u9875_(&P)
+Quit=\u9000\u51fa_(&Q)
+Recent_files=\u6700\u8fd1\u6253\u5f00\u7684\u6587\u4ef6_(&R)
+Redo=\u91cd\u505a_(&R)
+Replace_string=\u66ff\u6362\u5b57\u7b26\u4e32_(&R)
+Save_database=\u4fdd\u5b58\u6570\u636e\u5e93_(&S)
+Save_database_as_...=\u6570\u636e\u5e93\u53e6\u5b58\u4e3a_(&A)...
+Save_selected_as_...=\u9009\u4e2d\u8bb0\u5f55\u53e6\u5b58\u4e3a_(&L)...
+Save_session=\u4fdd\u5b58\u5f53\u524d\u4f1a\u8bdd
+# Tools
+Search=\u67e5\u627e_(&S)
+Search_IEEEXplore=\u641c\u7d22_IEEEXplore
+Select_all=\u5168\u9009_(&A)
+Set_up_general_fields=\u914d\u7f6e_&general_\u57df
+Show_error_console=\u6253\u5f00\u9519\u8bef\u663e\u793a\u7ec8\u7aef
+
+Sort_tabs=\u6807\u7b7e\u9875\u6392\u5e8f_(&S)
+Switch_preview_layout=\u5207\u6362\u8bb0\u5f55\u9884\u89c8\u65b9\u5f0f_(&S)
+Synchronize_PDF_links=\u81ea\u52a8\u540c\u6b65_PDF_\u94fe\u63a5
+Synchronize_PS_links=\u81ea\u52a8\u540c\u6b65_PS_\u94fe\u63a5
+# Export menu
+Tab-separated_file=\u4f7f\u7528\u5236\u8868\u7b26\u95f4\u9694\u7684\u6587\u4ef6_(&T)
+Toggle_entry_preview=\u6253\u5f00/\u5173\u95ed\u8bb0\u5f55\u9884\u89c8_(&T)
+Toggle_groups_interface=\u6253\u5f00/\u5173\u95ed\u5206\u7ec4\u754c\u9762_(&G)
+Tools=\u5de5\u5177_(&T)
+Unabbreviate_journal_names=\u5c55\u5f00\u671f\u520a\u540d\u79f0
+# Edit
+Undo=\u64a4\u9500_(&U)
+Unmark_all=\u64a4\u9500\u6240\u6709\u9ad8\u4eae\u6807\u8bb0_(&L)
+Unmark_entries=\u64a4\u9500\u9009\u4e2d\u9ad8\u4eae\u6807\u8bb0_(&N)
+View=\u89c6\u56fe_(&V)
+Web_search=Web_\u641c\u7d22
+Import_into_new_database=\u5bfc\u5165\u5230\u65b0\u6570\u636e\u5e93
+Import_into_current_database=\u5bfc\u5165\u5230\u5f53\u524d\u6570\u636e\u5e93
+
+Scan_database...=\u626b\u63cf\u6570\u636e\u5e93_(&C)...
+
+Push_entries_to_external_application_(%0)=\u63a8\u9001\u9009\u4e2d\u8bb0\u5f55\u5230\u5916\u90e8\u7a0b\u5e8f_(%0)
+Write_XMP-metadata_to_PDFs=\u5c06_XMP_\u5143\u6570\u636e\u5199\u5165\u5230_PDF_\u4e2d
+Set/clear_fields=\u8bbe\u7f6e/\u6e05\u9664_\u57df
+
+Export_selected_entries=\u5bfc\u51fa\u9009\u4e2d\u8bb0\u5f55
+Fetch_ArXiv.org=\u6293\u53d6_ArXiv.org
+Sessions=\u4f1a\u8bdd
+
+Save_all=\u4fdd\u5b58\u5168\u90e8
+
+Upgrade_external_links=\u66f4\u65b0\u5916\u90e8\u94fe\u63a5
+Manage_external_file_types=\u7ba1\u7406\u5916\u90e8\u6587\u4ef6\u7c7b\u578b\u5173\u8054
+
+Open_file=\u6253\u5f00\u6587\u4ef6
+
+Plugins=\u63d2\u4ef6_(&P)
+Connect_to_external_SQL_database=\u8fde\u63a5\u5230\u5916\u90e8_SQL_\u6570\u636e\u5e93
+Export_to_external_SQL_database=\u5bfc\u51fa\u5230\u5916\u90e8_SQL_\u6570\u636e\u5e93
+Search_JSTOR=\u641c\u7d22_JSTOR
+Fetch_SPIRES=\u6293\u53d6_SPIRES
+Fetch_INSPIRE=
+Search_Medline=\u641c\u7d22_Medline
+Import_from_external_SQL_database=\u4ece\u5916\u90e8_SQL_\u6570\u636e\u5e93\u5bfc\u5165
+Focus_entry_table=\u6fc0\u6d3b\u8bb0\u5f55\u5217\u8868
+Search_ACM_Portal=\u641c\u7d22_ACM_Portal
+
+Increase_table_font_size=\u653e\u5927\u5217\u8868\u5b57\u4f53_(&I)
+Decrease_table_font_size=\u7f29\u5c0f\u5217\u8868\u5b57\u4f53_(&D)
+Forward=\u524d\u8fdb
+Back=\u540e\u9000
+
+Manage_plugins=\u7ba1\u7406\u63d2\u4ef6
+Look_up_full_text_document=\u67e5\u627e\u5b8c\u6574\u6587\u6863
+
+Set/clear/rename_fields=\u8bbe\u7f6e/\u6e05\u9664/\u91cd\u547d\u540d_\u57df
+
+Search_ScienceDirect=\u641c\u7d22_ScienceDirect
+Mark_specific_color=\u7528\u6307\u5b9a\u989c\u8272\u6807\u8bb0_(&a)
+Resolve_duplicate_BibTeX_keys=\u5904\u7406\u91cd\u590d\u7684_BibTeX_\u952e\u503c
+Minimize_to_system_tray=
+Legacy_tools...=
+Copy_BibTeX_key_and_title=
+
 Cleanup_entries=
\ No newline at end of file
diff --git a/src/resource/build.properties b/src/resource/build.properties
deleted file mode 100644
index 703b9d1..0000000
--- a/src/resource/build.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-builddate=December 12 2012
-build=2
-version=2.9
\ No newline at end of file
diff --git a/src/resource/journalList.txt b/src/resource/journalList.txt
index 985b44b..d54a8ed 100644
--- a/src/resource/journalList.txt
+++ b/src/resource/journalList.txt
@@ -1,11094 +1,11094 @@
-"Meteor" Forschungsergebnisse = "Meteor" Forschungsergeb.
-AACN Clinical Issues = AACN Clin. Issues
-AACN Clinical Issues in Critical Care Nursing = AACN Clin. Issues Crit. Care Nurs.
-AADE Editors Journal = AADE Ed. J.
-AANA Journal = AANA J.
-AANNT Journal = AANNT J.
-AAOHN Journal = AAOHN J.
-AAPPO Journal = AAPPO J.
-AAPS Journal = AAPS J.
-AAPS PharmSci = AAPS PharmSci
-AARN News Letter = AARN News Lett.
-ABNF Journal = ABNF J.
-ACP Journal Club = ACP J. Club
-ACRH Reports = ACRH Rep.
-ACS Symposium Series=ACS Symp. Ser.;ACSMC8;IRR
-AD Nurse = AD Nurse
-ADA News = ADA News
-ADM = ADM
-AFL-CIO American Federationist = AFL. CIO Am. Fed.
-AHA Hospital Technology Series = AHA Hosp. Technol. Ser.
-AHME Journal = AHME J.
-AIA Journal = AIA J.
-AIChE Journal=AIChE J.;AICEAC;M
-AIDS = AIDS
-AIDS Care = AIDS Care
-AIDS Clinical Review = AIDS Clin. Rev.
-AIDS Education and Prevention = AIDS Educ. Prev.
-AIDS Patient Care and STDs = AIDS Patient Care STDS
-AIDS Research = AIDS Res.
-AIDS Research and Human Retroviruses = AIDS Res. Hum. Retroviruses
-AIDS Reviews = AIDS Rev.
-AIHA Journal = AIHA J.
-AIHAJ = AIHAJ
-AJNR: American Journal of Neuroradiology = AJNR Am. J. Neuroradiol.
-AJR: American Journal of Roentgenology = AJR Am. J. Roentgenol.
-AJS: American Journal of Sociology = AJS
-ALAFO: Revista de la Asociacion Latinoamericana de Facultades de Odontologia = ALAFO
-AM Reports = AM Rep.
-AMB: Revista da Associacao Medica Brasileira = AMB Rev. Assoc. Med. Bras.
-AMD-TR Reports = AMD. TR Rep.
-AMDI Bollettino = AMDI Boll.
-AMHC Forum = AMHC Forum
-AMIA Annual Symposium Proceedings = AMIA. Annu. Symp. Proc.
-AMRL-TR = AMRL. TR
-AMRO = AMRO
-AN: Arkansas Nurse = AN Ark. Nurse
-ANA Clinical Conferences = ANA Clin. Conf.
-ANA Clinical Sessions = ANA Clin. Sess.
-ANEC = ANEC
-ANL Reports = ANL Rep.
-ANNA Journal = ANNA J.
-ANPHI Papers = ANPHI Pap.
-ANS: Advances in Nursing Science = ANS Adv. Nurs. Sci.
-ANZ Journal of Surgery = ANZ J. Surg.
-AOHA = AOHA
-AOHA Progress = AOHA Prog.
-AOHA Today = AOHA Today
-AORN Journal = AORN J.
-APIC = APIC
-APMIS = APMIS
-APMIS. Supplementum = APMIS. Suppl.
-ARKIVOC (Gainesville, FL, United States)=ARKIVOC (Gainesville, FL, U. S.);AGFUAR;IRR
-ARN Journal = ARN J.
-ASA Newsletter = ASA Newsl.
-ASAIO Journal = ASAIO J.
-ASAIO Transactions = ASAIO Trans.
-ASDA News = ASDA News
-ASDC Journal of Dentistry for Children = ASDC J. Dent. Child.
-ASHA = ASHA
-ASHA Monographs = ASHA Monogr.
-ASHA. Supplement = ASHA. Suppl.
-ASNA Reporter = ASNA Rep.
-ASTM Standardization News = ASTM Stand. News
-ATLA, Alternatives to Laboratory Animals=ATLA, Altern. Lab. Anim.;AALADQ;BM
-AUAA Journal = AUAA J.
-AWHONN Lifelines = AWHONN Lifelines
-AWHONN Voice = AWHONN Voice
-AWHONN's Clinical Issues in Perinatal and Women's Health Nursing = AWHONNS Clin. Issues Perinat. Womens Health Nurs.
-Abdominal Imaging = Abdom. Imaging
-Academia Peruana de Cirugia = Acad. Peru. Cir.
-Academic Emergency Medicine = Acad. Emerg. Med.
-Academic Medicine = Acad. Med.
-Academic Nurse = Acad. Nurse
-Academic Radiology = Acad. Radiol.
-Academy Review of the California Academy of Periodontology = Acad. Rev. Calif. Acad. Periodontol.
-Academy of Management Journal = Acad. Manage. J.
-Academy of Management Review = Acad. Manage. Rev.
-Acarologia = Acarologia
-Accident Analysis and Prevention = Accid. Anal. Prev.
-Accident and Emergency Nursing = Accid. Emerg. Nurs.
-Accounts of Chemical Research=Acc. Chem. Res.;ACHRE4;M
-Acquisitions Medicales Recentes = Acquis. Med. Recent.
-Across the Board = Across Board (N. Y.)
-Acta Academiae Medicinae Wuhan = Acta Acad. Med. Wuhan
-Acta Allergologica = Acta Allergol.
-Acta Anaesthesiologica = Acta Anaesthesiol.
-Acta Anaesthesiologica Belgica = Acta Anaesthesiol. Belg.
-Acta Anaesthesiologica Scandinavica = Acta Anaesthesiol. Scand.
-Acta Anaesthesiologica Scandinavica. Supplementum = Acta Anaesthesiol. Scand. Suppl.
-Acta Anaesthesiologica Sinica = Acta Anaesthesiol. Sin.
-Acta Anaesthesiologica Taiwanica = Acta Anaesthesiol. Taiwan.
-Acta Anatomica = Acta Anat. (Basel)
-Acta Anatomica. Supplement = Acta Anat. Suppl. (Basel)
-Acta Anthropogenetica = Acta Anthropogenet.
-Acta Belgica. Medica Physica = Acta Belg. Med. Phys.
-Acta Bio-Medica de l'Ateneo Parmense = Acta Biomed. Ateneo Parmense
-Acta Biochimica Polonica = Acta Biochim. Pol.
-Acta Biochimica et Biophysica Academiae Scientiarum Hungaricae = Acta Biochim. Biophys. Acad. Sci. Hung.
-Acta Biochimica et Biophysica Hungarica = Acta Biochim. Biophys. Hung.
-Acta Biochimica et Biophysica Sinica = Acta Biochim. Biophys. Sin.
-Acta Biologiae Experimentalis = Acta Biol. Exp. (Warsz.)
-Acta Biologica Academiae Scientiarum Hungaricae = Acta Biol. Acad. Sci. Hung.
-Acta Biologica Hungarica = Acta Biol. Hung.
-Acta Biologica et Medica = Acta Biol. Med. (Gdansk)
-Acta Biologica et Medica Germanica = Acta Biol. Med. Ger.
-Acta Biomaterialia = Acta Biomater.
-Acta Biotheoretica = Acta Biotheor.
-Acta Cancerologica = Acta Cancerol. (Lima)
-Acta Cardiologica = Acta Cardiol.
-Acta Cardiologica. Supplementum = Acta Cardiol. Suppl.
-Acta Chemica Scandinavica = Acta Chem. Scand.
-Acta Chemica Scandinavica. Series A, Physical and Inorganic Chemistry = Acta Chem. Scand. A
-Acta Chemica Scandinavica. Series B, Organic Chemistry and Biochemistry = Acta Chem. Scand. B
-Acta Chimica Slovenica=Acta Chim. Slov.;ACSLE7;Q
-Acta Chirurgiae Orthopaedicae et Traumatologiae Cechoslovaca = Acta Chir. Orthop. Traumatol. Cech.
-Acta Chirurgiae Plasticae = Acta Chir. Plast.
-Acta Chirurgica Academiae Scientiarum Hungaricae = Acta Chir. Acad. Sci. Hung.
-Acta Chirurgica Belgica = Acta Chir. Belg.
-Acta Chirurgica Hungarica = Acta Chir. Hung.
-Acta Chirurgica Italica = Acta Chir. Ital.
-Acta Chirurgica Iugoslavica = Acta Chir. Iugosl.
-Acta Chirurgica Scandinavica = Acta Chir. Scand.
-Acta Chirurgica Scandinavica. Supplementum = Acta Chir. Scand. Suppl.
-Acta Cientifica Venezolana = Acta Cient. Venez.
-Acta Clinica Belgica = Acta Clin. Belg.
-Acta Clinica Belgica. Supplementum = Acta Clin. Belg. Suppl.
-Acta Clinica Odontologica = Acta Clin. Odontol.
-Acta Crystallographica = Acta Crystallogr.
-Acta Crystallographica, Section A: Foundations of Crystallography=Acta Crystallogr., Sect. A: Found. Crystallogr.;ACACEQ;BM
-Acta Crystallographica, Section B: Structural Science=Acta Crystallogr., Sect. B: Struct. Sci.;ASBSDK;BM
-Acta Crystallographica, Section C: Crystal Structure Communications=Acta Crystallogr., Sect. C: Cryst. Struct. Commun.;ACSCEE;M
-Acta Crystallographica, Section D: Biological Crystallography=Acta Crystallogr., Sect. D: Biol. Crystallogr.;ABCRE6;M
-Acta Crystallographica, Section E: Structure Reports Online=Acta Crystallogr., Sect. E: Struct. Rep. Online;ACSEBH;M
-Acta Crystallographica, Section F: Structural Biology and Crystallization Communications=Acta Crystallogr., Sect. F: Struct. Biol. Cryst. Commun.;ACSFCL;M
-Acta Crystallographica. Section A, Crystal Physics, Diffraction, Theoretical and General Crystallography = Acta Crystallogr. A
-Acta Crystallographica. Section A, Foundations of Crystallography = Acta Crystallogr. A
-Acta Crystallographica. Section B, Structural Crystallography and Crystal Chemistry = Acta Crystallogr. B
-Acta Crystallographica. Section B, Structural Science = Acta Crystallogr. B
-Acta Crystallographica. Section C, Crystal Structure Communications = Acta Crystallogr. C
-Acta Crystallographica. Section D, Biological Crystallography = Acta Crystallogr. D Biol. Crystallogr.
-Acta Crystallographica. Section F, Structural Biology and Crystallization Communications = Acta Crystallograph. Sect. F Struct. Biol. Cryst. Commun.
-Acta Cytologica = Acta Cytol.
-Acta Dermato-Venereologica = Acta Derm. Venereol.
-Acta Dermato-Venereologica. Supplementum = Acta Derm. Venereol. Suppl. (Stockh.)
-Acta Dermatologica Kyoto. English Edition = Acta Dermatol. Kyoto Engl. Ed.
-Acta Diabetologica = Acta Diabetol.
-Acta Diabetologica Latina = Acta Diabetol. Lat.
-Acta Embryologiae Experimentalis = Acta Embryol. Exp. (Palermo)
-Acta Embryologiae et Morphologiae Experimentalis = Acta Embryol. Morphol. Exp.
-Acta Endocrinologica = Acta Endocrinol. (Copenh.)
-Acta Endocrinologica. Supplementum = Acta Endocrinol. Suppl. (Copenh.)
-Acta Europaea Fertilitatis = Acta Eur. Fertil.
-Acta Gastroenterologica Belgica = Acta Gastroenterol. Belg.
-Acta Gastroenterologica Latinoamericana = Acta Gastroenterol. Latinoam.
-Acta Genetica et Statistica Medica = Acta Genet. Stat. Med.
-Acta Geneticae Medicae et Gemellologiae = Acta Genet. Med. Gemellol. (Roma)
-Acta Gerontologica = Acta Gerontol. (Milano)
-Acta Ginecologica = Acta Ginecol. (Madr.)
-Acta Gynaecologica et Obstetrica Hispano-Lusitana = Acta Gynaecol. Obstet. Hisp. Lusit.
-Acta Haematologica = Acta Haematol.
-Acta Haematologica Polonica = Acta Haematol. Pol.
-Acta Hepato-Gastroenterologica = Acta Hepatogastroenterol. (Stuttg.)
-Acta Hepato-Splenologica = Acta Hepatosplenol.
-Acta Histochemica = Acta Histochem.
-Acta Histochemica. Supplementband = Acta Histochem. Suppl.
-Acta Historica Scientiarum Naturalium et Medicinalium = Acta Hist. Sci. Nat. Med.
-Acta Hospitalia = Acta Hosp.
-Acta Hydrochimica et Hydrobiologica=Acta Hydrochim. Hydrobiol.;AHCBAU;BM
-Acta Iberica Radiologica-Cancerologica = Acta Iber. Radiol. Cancerol.
-Acta Isotopica = Acta Isot. (Padova)
-Acta Leidensia = Acta Leiden.
-Acta Leprologica = Acta Leprol.
-Acta Materialia=Acta Mater.;ACMAFD;20/YR
-Acta Medica (Hradec Kralove) = Acta Medica (Hradec Kralove)
-Acta Medica (Hradec Kralove). Supplementum = Acta Medica (Hradec Kralove) Suppl.
-Acta Medica Academiae Scientiarum Hungaricae = Acta Med. Acad. Sci. Hung.
-Acta Medica Austriaca = Acta Med. Austriaca
-Acta Medica Austriaca. Supplement = Acta Med. Austriaca. Suppl.
-Acta Medica Croatica = Acta Med. Croatica
-Acta Medica Hungarica = Acta Med. Hung.
-Acta Medica Iranica = Acta Med. Iran.
-Acta Medica Italica di Medicina Tropicale e Subtropicale e di Gastroenterologia = Acta Med. Ital. Med. Trop. Subtrop. Gastroenterol.
-Acta Medica Iugoslavica = Acta Med. Iugosl.
-Acta Medica Nagasakiensia = Acta Med. Nagasaki.
-Acta Medica Okayama = Acta Med. Okayama
-Acta Medica Philippina = Acta Med. Philipp.
-Acta Medica Polona = Acta Med. Pol.
-Acta Medica Portuguesa = Acta Med. Port.
-Acta Medica Scandinavica = Acta Med. Scand.
-Acta Medica Scandinavica. Supplementum = Acta Med. Scand. Suppl.
-Acta Medica Veterinaria = Acta Med. Vet. (Napoli)
-Acta Medica et Biologica = Acta Med. Biol. (Niigata)
-Acta Medicinae Legalis et Socialis = Acta Med. Leg. Soc. (Liege)
-Acta Microbiologica Academiae Scientiarum Hungaricae = Acta Microbiol. Acad. Sci. Hung.
-Acta Microbiologica Bulgarica = Acta Microbiol. Bulg.
-Acta Microbiologica Hungarica = Acta Microbiol. Hung.
-Acta Microbiologica Polonica = Acta Microbiol. Pol.
-Acta Microbiologica Polonica. Series A, Microbiologia Generalis = Acta Microbiol. Pol. A
-Acta Microbiologica Polonica. Series B, Microbiologia Applicata = Acta Microbiol. Pol. B
-Acta Microbiologica et Immunologica Hungarica = Acta Microbiol. Immunol. Hung.
-Acta Microbiologica, Virologica et Immunologica = Acta Microbiol. Virol. Immunol. (Sofiia)
-Acta Morphologica Academiae Scientiarum Hungaricae = Acta Morphol. Acad. Sci. Hung.
-Acta Morphologica Hungarica = Acta Morphol. Hung.
-Acta Morphologica Neerlando-Scandinavica = Acta Morphol. Neerl. Scand.
-Acta Neurobiologiae Experimentalis = Acta Neurobiol. Exp. (Warsz.)
-Acta Neurochirurgica = Acta Neurochir. (Wien)
-Acta Neurochirurgica. Supplementum = Acta Neurochir. Suppl. (Wien)
-Acta Neurologica = Acta Neurol. (Napoli)
-Acta Neurologica Belgica = Acta Neurol. Belg.
-Acta Neurologica Latinoamericana = Acta Neurol. Latinoam.
-Acta Neurologica Scandinavica = Acta Neurol. Scand.
-Acta Neurologica Scandinavica. Supplementum = Acta Neurol. Scand. Suppl.
-Acta Neurologica et Psychiatrica Belgica = Acta Neurol. Psychiatr. Belg.
-Acta Neurologica. Quaderni = Acta Neurol. [Quad.] (Napoli)
-Acta Neuropathologica = Acta Neuropathol. (Berl.)
-Acta Neuropathologica. Supplement = Acta Neuropathol. Suppl. (Berl.)
-Acta Neurovegetativa = Acta Neuroveg. (Wien)
-Acta Obstetrica et Gynaecologica Japonica = Acta Obstet. Gynaecol. Jpn.
-Acta Obstetrica y Ginecologica Hispano-Lusitana = Acta Obstet. Ginecol. Hisp. Lusit.
-Acta Obstetrica y Ginecologica Hispano-Lusitana. Suplemento = Acta Obstet. Ginecol. Hisp. Lusit. Suppl.
-Acta Obstetricia et Gynecologica Scandinavica = Acta Obstet. Gynecol. Scand.
-Acta Obstetricia et Gynecologica Scandinavica. Supplement = Acta Obstet. Gynecol. Scand. Suppl.
-Acta Odontologica Latinoamericana = Acta Odontol. Latinoam.
-Acta Odontologica Scandinavica = Acta Odontol. Scand.
-Acta Odontologica Scandinavica. Supplementum = Acta Odontol. Scand. Suppl.
-Acta Odontologica Venezolana = Acta Odontol. Venez.
-Acta Oncologica = Acta Oncol.
-Acta Ophthalmologica = Acta Ophthalmol. (Copenh.)
-Acta Ophthalmologica Scandinavica = Acta Ophthalmol. Scand.
-Acta Ophthalmologica Scandinavica. Supplement = Acta Ophthalmol. Scand. Suppl.
-Acta Ophthalmologica. Supplement = Acta Ophthalmol. Suppl.
-Acta Ophthalmologica. Supplementum = Acta Ophthalmol. Suppl.
-Acta Orthopaedica = Acta Orthop.
-Acta Orthopaedica Belgica = Acta Orthop. Belg.
-Acta Orthopaedica Scandinavica = Acta Orthop. Scand.
-Acta Orthopaedica Scandinavica. Supplementum = Acta Orthop. Scand. Suppl.
-Acta Orthopaedica. Supplementum = Acta Orthop. Suppl.
-Acta Oto-Laryngologica = Acta Otolaryngol. (Stockh.)
-Acta Oto-Laryngologica. Supplement = Acta Otolaryngol. Suppl. (Stockh.)
-Acta Oto-Rhino-Laryngologica Belgica = Acta Otorhinolaryngol. Belg.
-Acta Oto-Rino-Laringologica Ibero-Americana = Acta Otorinolaryngol. Iber. Am.
-Acta Otorhinolaryngologica Italica = Acta Otorhinolaryngol. Ital.
-Acta Otorrinolaringologica Espanola = Acta Otorrinolaringol. Esp.
-Acta Paediatrica = Acta Paediatr.
-Acta Paediatrica Academiae Scientiarum Hungaricae = Acta Paediatr. Acad. Sci. Hung.
-Acta Paediatrica Belgica = Acta Paediatr. Belg.
-Acta Paediatrica Hungarica = Acta Paediatr. Hung.
-Acta Paediatrica Japonica = Acta Paediatr. Jpn.
-Acta Paediatrica Scandinavica = Acta Paediatr. Scand.
-Acta Paediatrica Scandinavica. Supplement = Acta Paediatr. Scand. Suppl.
-Acta Paediatrica Taiwanica = Acta Paediatr. Taiwan.
-Acta Paediatrica. Supplement = Acta Paediatr. Suppl.
-Acta Paedopsychiatrica = Acta Paedopsychiatr.
-Acta Pathologica Japonica = Acta Pathol. Jpn.
-Acta Pathologica et Microbiologica Scandinavica = Acta Pathol. Microbiol. Scand.
-Acta Pathologica et Microbiologica Scandinavica. Section A, Pathology = Acta Pathol. Microbiol. Scand. [A]
-Acta Pathologica et Microbiologica Scandinavica. Section B, Microbiology = Acta Pathol. Microbiol. Scand. [B]
-Acta Pathologica et Microbiologica Scandinavica. Section B, Microbiology and Immunology = Acta Pathol. Microbiol. Scand. [B] Microbiol. Immunol.
-Acta Pathologica et Microbiologica Scandinavica. Section C, Immunology = Acta Pathol. Microbiol. Scand. [C]
-Acta Pathologica et Microbiologica Scandinavica. Supplement = Acta Pathol. Microbiol. Scand. Suppl.
-Acta Pathologica, Microbiologica, et Immunologica Scandinavica. Section A, Pathology = Acta Pathol. Microbiol. Immunol. Scand. [A]
-Acta Pathologica, Microbiologica, et Immunologica Scandinavica. Section B, Microbiology = Acta Pathol. Microbiol. Immunol. Scand. [B]
-Acta Pathologica, Microbiologica, et Immunologica Scandinavica. Section C, Immunology = Acta Pathol. Microbiol. Immunol. Scand. [C]
-Acta Pathologica, Microbiologica, et Immunologica Scandinavica. Supplement = Acta Pathol. Microbiol. Immunol. Scand. Suppl.
-Acta Pediatrica Espanola = Acta Pediatr. Esp.
-Acta Pharmaceutica (Zagreb, Croatia)=Acta Pharm. (Zagreb, Croatia);ACPHEE;Q
-Acta Pharmaceutica Hungarica = Acta Pharm. Hung.
-Acta Pharmaceutica Nordica = Acta Pharm. Nord.
-Acta Pharmaceutica Suecica = Acta Pharm. Suec.
-Acta Pharmacologica Sinica = Acta Pharmacol. Sin.
-Acta Pharmacologica et Toxicologica = Acta Pharmacol. Toxicol. (Copenh.)
-Acta Physica Polonica, A=Acta Phys. Pol., A;ATPLB6;M
-Acta Physica Polonica, B=Acta Phys. Pol., B;APOBBB;M
-Acta Physiologica = Acta Physiol.
-Acta Physiologica Academiae Scientiarum Hungaricae = Acta Physiol. Acad. Sci. Hung.
-Acta Physiologica Hungarica = Acta Physiol. Hung.
-Acta Physiologica Latinoamericana = Acta Physiol. Lat. Am.
-Acta Physiologica Polonica = Acta Physiol. Pol.
-Acta Physiologica Scandinavica = Acta Physiol. Scand.
-Acta Physiologica Scandinavica. Supplementum = Acta Physiol. Scand. Suppl.
-Acta Physiologica et Pharmacologica Bulgarica = Acta Physiol. Pharmacol. Bulg.
-Acta Physiologica et Pharmacologica Latinoamericana = Acta Physiol. Pharmacol. Latinoam.
-Acta Physiologica et Pharmacologica Neerlandica = Acta Physiol. Pharmacol. Neerl.
-Acta Physiologica, Pharmacologica et Therapeutica Latinoamericana = Acta Physiol. Pharmacol. Ther. Latinoam.
-Acta Poloniae Pharmaceutica = Acta Pol. Pharm.
-Acta Psiquiatrica y Psicologica de America Latina = Acta Psiquiatr. Psicol. Am. Lat.
-Acta Psychiatrica Belgica = Acta Psychiatr. Belg.
-Acta Psychiatrica Scandinavica = Acta Psychiatr. Scand.
-Acta Psychiatrica Scandinavica. Supplementum = Acta Psychiatr. Scand. Suppl.
-Acta Psychologica = Acta Psychol. (Amst.)
-Acta Radiologica = Acta Radiol.
-Acta Radiologica. Diagnosis = Acta Radiol. Diagn. (Stockh.)
-Acta Radiologica. Oncology = Acta Radiol. Oncol.
-Acta Radiologica. Oncology, Radiation, Physics, Biology = Acta Radiol. Oncol. Radiat. Phys. Biol.
-Acta Radiologica. Supplementum = Acta Radiol. Suppl.
-Acta Radiologica. Therapy, Physics, Biology = Acta Radiol. Ther. Phys. Biol.
-Acta Rheumatologica Scandinavica = Acta Rheumatol. Scand.
-Acta Rhumatologica = Acta Rhumatol.
-Acta Rhumatologica Belgica = Acta Rhumatol. Belg.
-Acta Scholae Medicinalis Universitatis in Kioto = Acta Sch. Med. Univ. Kioto
-Acta Societatis Medicorum Upsaliensis = Acta Soc. Med. Ups.
-Acta Socio-Medica Scandinavica = Acta Sociomed. Scand.
-Acta Socio-Medica Scandinavica. Supplement = Acta Sociomed. Scand. Suppl.
-Acta Stomatologica Belgica = Acta Stomatol. Belg.
-Acta Stomatologica Croatica = Acta Stomatol. Croat.
-Acta Stomatologica Internationalia = Acta Stomatol. Int.
-Acta Theriologica = Acta Theriol. (Warsz.)
-Acta Tropica = Acta Trop.
-Acta Tropica. Supplement = Acta Trop. Suppl.
-Acta Tuberculosea Japonica = Acta Tuberc. Jpn.
-Acta Tuberculosea et Pneumologica Belgica = Acta Tuberc. Pneumol. Belg.
-Acta Tuberculosea et Pneumologica Scandinavica = Acta Tuberc. Pneumol. Scand.
-Acta Universitatis Carolinae. Medica = Acta Univ. Carol. [Med.] (Praha)
-Acta Universitatis Carolinae. Medica. Monographia = Acta Univ. Carol. Med. Monogr.
-Acta Universitatis Palackianae Olomucensis Facultatis Medicae = Acta Univ. Palacki. Olomuc. Fac. Med.
-Acta Urologica Belgica = Acta Urol. Belg.
-Acta Veterinaria = Acta Vet. (Beogr.)
-Acta Veterinaria Academiae Scientiarum Hungaricae = Acta Vet. Acad. Sci. Hung.
-Acta Veterinaria Hungarica = Acta Vet. Hung.
-Acta Veterinaria Scandinavica = Acta Vet. Scand.
-Acta Veterinaria Scandinavica. Supplement = Acta Vet. Scand. Suppl.
-Acta Virologica = Acta Virol.
-Acta Vitaminologica = Acta Vitaminol.
-Acta Vitaminologica et Enzymologica = Acta Vitaminol. Enzymol.
-Acta Zoologica et Pathologica Antverpiensia = Acta Zool. Pathol. Antverp.
-Acta de Odontologia Pediatrica = Acta Odontol. Pediatr.
-Actas Dermo-Sifiliograficas = Actas Dermosifiliogr.
-Actas Espanolas de Psiquiatria = Actas Esp. Psiquiatr.
-Actas Luso-Espanolas de Neurologia y Psiquiatria = Actas Luso. Esp. Neurol. Psiquiatr.
-Actas Luso-Espanolas de Neurologia, Psiquiatria y Ciencias Afines = Actas Luso. Esp. Neurol. Psiquiatr. Cienc. Afines
-Actas Urologicas Espanolas = Actas Urol. Esp.
-Activitas Nervosa Superior = Act. Nerv. Super. (Praha)
-Actualidad Pediatrica = Actual. Pediatr. (Granada)
-Actualites Cardiologiques et Angeiologiques Internationales = Actual. Cardiol. Angeiol. Int. (Paris)
-Actualites Endocrinologiques = Actual. Endocrinol. (Paris)
-Actualites Hepato-Gastro-Enterologiques = Actual. Hepatogastroenterol. (Paris)
-Actualites Neurophysiologiques = Actual. Neurophysiol. (Paris)
-Actualites Odonto-Stomatologiques = Actual. Odontostomatol. (Paris)
-Actualites Pharmacologiques = Actual. Pharmacol. (Paris)
-Actualites de Physiologie Pathologique = Actual. Physiol. Pathol. (Paris)
-Acupuncture and Electro-Therapeutics Research = Acupunct. Electrother. Res.
-Acute Cardiac Care = Acute Card. Care
-Acute Care = Acute Care
-Addiction = Addiction
-Addiction Biology = Addict. Biol.
-Addictive Behaviors = Addict. Behav.
-Addictive Diseases = Addict. Dis.
-Additamenta ad Folia Medica Neerlandica = Additamenta Folia Med. Neerl.
-Administration and Policy in Mental Health = Adm. Policy Ment. Health
-Administration in Mental Health = Adm. Ment. Health
-Administration in Social Work = Adm. Soc. Work
-Administrative Management = Adm. Manage.
-Administrative Radiology = Adm. Radiol.
-Administrative Radiology Journal = Adm. Radiol. J.
-Administrative Science Quarterly = Adm. Sci. Q.
-Admitting Management Journal = Admit. Manage. J.
-Adolescence = Adolescence
-Adolescent Medicine = Adolesc. Med.
-Adolescent Medicine Clinics = Adolesc. Med. Clin.
-Adolescent Psychiatry = Adolesc. Psychiatry
-Adsorption=Adsorption;ADSOFO;Q
-Adsorption Science & Technology=Adsorpt. Sci. Technol.;ASTEEZ;10/YR
-Adult Education = Adult Educ.
-Advance Data = Adv. Data
-Advance for Nurse Practitioners = Adv. Nurse Pract.
-Advanced Drug Delivery Reviews=Adv. Drug Delivery Rev.;ADDREP;15/YR
-Advanced Functional Materials=Adv. Funct. Mater.;AFMDC6;M
-Advanced Materials (Weinheim, Germany)=Adv. Mater. (Weinheim, Ger.);ADVMEW;SM
-Advanced Practice Nursing Quarterly = Adv. Pract. Nurs. Q.
-Advanced Synthesis & Catalysis=Adv. Synth. Catal.;ASCAF7;15/YR
-Advancement of Science = Adv. Sci.
-Advances and Technical Standards in Neurosurgery = Adv. Tech. Stand. Neurosurg.
-Advances in Alcohol and Substance Abuse = Adv. Alcohol Subst. Abuse
-Advances in Anatomic Pathology = Adv. Anat. Pathol.
-Advances in Anatomy, Embryology and Cell Biology = Adv. Anat. Embryol. Cell Biol.
-Advances in Applied Ceramics=Adv. Appl. Ceram.;AACDCN;BM
-Advances in Applied Microbiology = Adv. Appl. Microbiol.
-Advances in Atomic, Molecular, and Optical Physics=Adv. At., Mol., Opt. Phys.;AAMPE9;IRR
-Advances in Behavioral Biology = Adv. Behav. Biol.
-Advances in Biochemical Engineering/Biotechnology = Adv. Biochem. Eng. Biotechnol.
-Advances in Biochemical Psychopharmacology = Adv. Biochem. Psychopharmacol.
-Advances in Biological and Medical Physics = Adv. Biol. Med. Phys.
-Advances in Biology of Skin = Adv. Biol. Skin
-Advances in Biomedical Engineering and Medical Physics = Adv. Biomed. Eng. Med. Phys.
-Advances in Biophysics = Adv. Biophys.
-Advances in Biotechnological Processes = Adv. Biotechnol. Processes
-Advances in Cancer Research = Adv. Cancer Res.
-Advances in Carbohydrate Chemistry and Biochemistry = Adv. Carbohydr. Chem. Biochem.
-Advances in Cardiac Surgery = Adv. Card. Surg.
-Advances in Cardiology = Adv. Cardiol.
-Advances in Cardiopulmonary Diseases = Adv. Cardiopulm. Dis.
-Advances in Cell Biology = Adv. Cell Biol.
-Advances in Chemical Physics=Adv. Chem. Phys.;ADCPAA;IRR
-Advances in Chemotherapy = Adv. Chemother.
-Advances in Child Development and Behavior = Adv. Child Dev. Behav.
-Advances in Chromatography = Adv. Chromatogr.
-Advances in Chromatography (New York, NY, United States)=Adv. Chromatogr. (N. Y., NY, U. S.);ADCYA3;IRR
-Advances in Chronic Kidney Disease = Adv. Chronic Kidney Dis.
-Advances in Clinical Chemistry = Adv. Clin. Chem.
-Advances in Clinical Pathology = Adv. Clin. Path.
-Advances in Clinical Pharmacology = Adv. Clin. Pharmacol.
-Advances in Clinical Rehabilitation = Adv. Clin. Rehabil.
-Advances in Colloid and Interface Science = Adv. Colloid Interface Sci.
-Advances in Comparative Physiology and Biochemistry = Adv. Comp. Physiol. Biochem.
-Advances in Contraception = Adv. Contracept.
-Advances in Cyclic Nucleotide Research = Adv. Cyclic Nucleotide Res.
-Advances in Cyclic Nucleotide and Protein Phosphorylation Research = Adv. Cyclic Nucleotide Protein Phosphorylation Res.
-Advances in Cytopharmacology = Adv. Cytopharmacol.
-Advances in Dental Research = Adv. Dent. Res.
-Advances in Dermatology = Adv. Dermatol.
-Advances in Drug Research = Adv. Drug Res.
-Advances in Electrochemical Science and Engineering=Adv. Electrochem. Sci. Eng.;AESEEY;IRR
-Advances in Endocrinology and Metabolism = Adv. Endocrinol. Metab.
-Advances in Enzyme Regulation = Adv. Enzyme Regul.
-Advances in Enzymology and Related Areas of Molecular Biology = Adv. Enzymol. Relat. Areas Mol. Biol.
-Advances in Experimental Medicine and Biology = Adv. Exp. Med. Biol.
-Advances in Fluorine Research and Dental Caries Prevention = Adv. Fluorine Res.
-Advances in Food Research = Adv. Food Res.
-Advances in Food Research. Supplement = Adv. Food Res. Suppl.
-Advances in Food and Nutrition Research = Adv. Food Nutr. Res.
-Advances in Genetics = Adv. Genet.
-Advances in Gerontological Research = Adv. Gerontol. Res.
-Advances in Health Economics and Health Services Research = Adv. Health Econ. Health Serv. Res.
-Advances in Health Economics and Health Services Research. Supplement = Adv. Health Econ. Health Serv. Res. Suppl.
-Advances in Health Sciences Education Theory and Practice = Adv. Health Sci. Educ. Theory Pract.
-Advances in Heterocyclic Chemistry = Adv. Heterocycl. Chem.
-Advances in Human Genetics = Adv. Hum. Genet.
-Advances in Immunity and Cancer Therapy = Adv. Immun. Cancer Ther.
-Advances in Immunology = Adv. Immunol.
-Advances in Inorganic Biochemistry = Adv. Inorg. Biochem.
-Advances in Inorganic Chemistry=Adv. Inorg. Chem.;AICHEP;IRR
-Advances in Internal Medicine = Adv. Intern. Med.
-Advances in Lipid Research = Adv. Lipid Res.
-Advances in Medical Sciences = Adv. Med. Sci.
-Advances in Metabolic Disorders = Adv. Metab. Disord.
-Advances in Microbial Physiology = Adv. Microb. Physiol.
-Advances in Mind-Body Medicine = Adv. Mind Body Med.
-Advances in Morphogenesis = Adv. Morphog.
-Advances in Myocardiology = Adv. Myocardiol.
-Advances in Neonatal Care = Adv. Neonatal Care
-Advances in Nephrology from the Necker Hospital = Adv. Nephrol. Necker Hosp.
-Advances in Neuroimmunology = Adv. Neuroimmunol.
-Advances in Neurology = Adv. Neurol.
-Advances in Nutritional Research = Adv. Nutr. Res.
-Advances in Ophthalmic, Plastic, and Reconstructive Surgery = Adv. Ophthalmic. Plast. Reconstr. Surg.
-Advances in Ophthalmology = Adv. Ophthalmol.
-Advances in Oral Biology = Adv. Oral Biol.
-Advances in Oto-Rhino-Laryngology = Adv. Otorhinolaryngol.
-Advances in Parasitology = Adv. Parasitol.
-Advances in Pathobiology = Adv. Pathobiol.
-Advances in Pediatric Infectious Diseases = Adv. Pediatr. Infect. Dis.
-Advances in Pediatrics = Adv. Pediatr.
-Advances in Peritoneal Dialysis = Adv. Perit. Dial.
-Advances in Pest Control Research = Adv. Pest Control Res.
-Advances in Pharmaceutical Sciences = Adv. Pharm. Sci.
-Advances in Pharmacology = Adv. Pharmacol.
-Advances in Pharmacology and Chemotherapy = Adv. Pharmacol. Chemother.
-Advances in Planned Parenthood = Adv. Plan. Parent.
-Advances in Polymer Science=Adv. Polym. Sci.;APSIDK;IRR
-Advances in Polymer Technology=Adv. Polym. Technol.;APTYD5;Q
-Advances in Prostaglandin and Thromboxane Research = Adv. Prostaglandin Thromboxane Res.
-Advances in Prostaglandin, Thromboxane, and Leukotriene Research = Adv. Prostaglandin. Thromboxane. Leukot. Res.
-Advances in Protein Chemistry = Adv. Protein Chem.
-Advances in Psychobiology = Adv. Psychobiol.
-Advances in Psychosomatic Medicine = Adv. Psychosom. Med.
-Advances in Quantum Chemistry=Adv. Quantum Chem.;AQCHA9;IRR
-Advances in Renal Replacement Therapy = Adv. Ren. Replace. Ther.
-Advances in Reproductive Physiology = Adv. Reprod. Physiol.
-Advances in Second Messenger and Phosphoprotein Research = Adv. Second Messenger Phosphoprotein Res.
-Advances in Sex Hormone Research = Adv. Sex Horm. Res.
-Advances in Shock Research = Adv. Shock Res.
-Advances in Socio-Dental Research = Adv. Sociodent. Res.
-Advances in Space Biology and Medicine = Adv. Space Biol. Med.
-Advances in Steroid Biochemistry and Pharmacology = Adv. Steroid Biochem. Pharmacol.
-Advances in Surgery = Adv. Surg.
-Advances in Therapy = Adv. Ther.
-Advances in Tracer Methodology = Adv. Tracer Methodol.
-Advances in Tuberculosis Research = Adv. Tuberc. Res.
-Advances in Veterinary Medicine = Adv. Vet. Med.
-Advances in Veterinary Science = Adv. Vet. Sci.
-Advances in Veterinary Science and Comparative Medicine = Adv. Vet. Sci. Comp. Med.
-Advances in Virus Research = Adv. Virus Res.
-Advances in Wound Care = Adv. Wound Care
-Advances in X-Ray Analysis=Adv. X-Ray Anal.;AXRAAA;A
-Advances in the Biosciences = Adv. Biosci.
-Advancing Clinical Care = Adv. Clin. Care
-Adverse Drug Reactions and Acute Poisoning Reviews = Adverse Drug React. Acute Poisoning Rev.
-Adverse Drug Reactions and Toxicological Reviews = Adverse Drug React. Toxicol. Rev.
-Advertising Age = Advert. Age
-Aeromedical Review = Aeromed. Rev.
-Aerosol Science and Technology=Aerosol Sci. Technol.;ASTYDQ;M
-Aerospace Medicine = Aerosp. Med.
-Aesthetic Plastic Surgery = Aesthetic Plast. Surg.
-Afinidad=Afinidad;AFINAE;BM
-African Dental Journal = Afr. Dent. J.
-African Health Sciences = Afr. Health Sci.
-African Journal of Medical Sciences = Afr. J. Med. Sci.
-African Journal of Medicine and Medical Sciences = Afr. J. Med. Med. Sci.
-African Journal of Psychiatry = Afr. J. Psychiatry
-African Journal of Reproductive Health = Afr. J. Reprod. Health
-Age and Ageing = Age Ageing
-Aged Care and Services Review = Aged Care Serv. Rev.
-Ageing Research Reviews = Ageing Res. Rev.
-Agents and Actions = Agents Actions
-Agents and Actions. Supplements = Agents Actions. Suppl.
-Aggiornamenti Clinicoterapeutici = Aggiorn. Clinico Ter.
-Aging = Aging (Milano)
-Aging Cell = Aging Cell
-Aging Clinical and Experimental Research = Aging Clin. Exp. Res.
-Aging Male = Aging Male
-Aging Trends = Aging Trends
-Aging and Leisure Living = Aging Leis. Living
-Aging and Mental Health = Aging Ment. Health
-Agnes Karll-Schwester. Der Krankenpfleger = Agnes Karll Schwest. Krankenpfleger
-Agressologie = Agressologie
-Agricultural and Biological Chemistry = Agric. Biol. Chem.
-Ahot Be-Yisrael = Ahot Beyisrael.
-Aichi Gakuin Daigaku Shigakkai Shi (Aichi-Gakuin Journal of Dental Science) = Aichi Gakuin Daigaku Shigakkai Shi
-Aichi-Gakuin Dental Science = Aichi Gakuin Dent. Sci.
-Air Medical Journal = Air Med. J.
-Air and Waste = Air Waste
-Air and Water Pollution = Air Water Pollut.
-Aktuelle Gerontologie = Aktuelle Gerontol.
-Aktuelle Oto-Rhino-Laryngologie = Aktuelle Otorhinolaryngol.
-Aktuelle Probleme in Chirurgie und Orthopadie = Aktuelle Probl. Chir. Orthop.
-Aktuelle Probleme in der Chirurgie = Aktuelle Probl. Chir.
-Aktuelle Radiologie = Aktuelle Radiol.
-Aktuelle Traumatologie = Aktuelle Traumatol.
-Akusherstvo i Ginekologiia = Akush. Ginekol. (Sofiia)
-Alabama Journal of Medical Sciences = Ala. J. Med. Sci.
-Alabama Medicine = Ala. Med.
-Alabama Nurse = Ala. Nurse
-Alaska Medicine = Alaska Med.
-Alaska Nurse = Alaska Nurse
-Albany Law Review = Albany Law Rev.
-Albrecht von Graefes Archiv fur Klinische und Experimentelle Ophthalmologie = Albrecht von Graefes Arch. Klin. Exp. Ophthalmol.
-Alcohol = Alcohol
-Alcohol Health and Research World = Alcohol Health Res. World
-Alcohol Research and Health = Alcohol Res. Health
-Alcohol and Alcoholism = Alcohol Alcohol
-Alcohol and Alcoholism. Supplement = Alcohol Alcohol Suppl.
-Alcohol and Drug Research = Alcohol Drug Res.
-Alcoholism, Clinical and Experimental Research = Alcohol. Clin. Exp. Res.
-Alergia = Alergia
-Alexandria Dental Journal = Alex. Dent. J.
-Alimentary Pharmacology and Therapeutics = Aliment. Pharmacol. Ther.
-Alimentation et la Vie = Aliment. Vie
-Alkaloids, Chemistry and Biology = Alkaloids Chem. Biol.
-Allergie et Immunologie = Allerg. Immunol. (Paris)
-Allergie und Asthma = Allerg. Asthma (Leipz.)
-Allergie und Asthmaforschung = Allerg. Asthmaforsch.
-Allergie und Immunologie = Allerg. Immunol. (Leipz.)
-Allergologia et Immunopathologia = Allergol. Immunopathol. (Madr.)
-Allergy = Allergy
-Allergy Proceedings = Allergy Proc.
-Allergy and Asthma Proceedings = Allergy Asthma Proc.
-Allied Health and Behavioral Sciences = Allied Health Behav. Sci.
-Alma Mater = Alma Mater (Baltimore)
-Alpha Omega France = Alpha Omega Fr.
-Alpha Omegan = Alpha Omegan
-Altern und Entwicklung (Aging and Development) = Altern Entwickl. Aging Dev.
-Alternative Medicine Review = Altern. Med. Rev.
-Alternative Therapies in Health and Medicine = Altern. Ther. Health Med.
-Alumnae Magazine, Columbia University-Presbyterian Hospital School of Nursing Alumnae Association = Alumnae Mag. Columbia Univ. Presbyt. Hosp. Sch. Nurs. Alumnae Assoc.
-Alumnae Magazine, Johns Hopkins Hospital School of Nursing Alumnae Association = Alumnae Mag. Johns Hopkins Hosp. Sch. Nurs. Alumnae Assoc.
-Alumni Bulletin, School of Dentistry, Indiana University = Alumni Bull. Sch. Dent. Indiana Univ.
-Alumni Bulletin, University of Michigan School of Dentistry = Alumni Bull. Univ. Mich. Sch. Dent.
-Alumni Magazine, Alumni Association of the Johns Hopkins Hospital School of Nursing = Alumni Mag.
-Alumni Magazine, Columbia University-Presbyterian Hospital School of Nursing Alumni Association = Alumni Mag. Columbia Univ. Presbyt. Hosp. Sch. Nurs. Alumni Assoc.
-Alzheimer Disease and Associated Disorders = Alzheimer Dis. Assoc. Disord.
-Ambulatory Care = Ambul. Care
-Ambulatory Outreach = Ambul. Outreach
-Ambulatory Pediatrics = Ambul. Pediatr.
-American Annals of the Deaf = Am. Ann. Deaf
-American Archives of Rehabilitation Therapy = Am. Arch. Rehabil. Ther.
-American Association of Industrial Nurses Journal = Am. Assoc. Ind. Nurses J.
-American Behavioral Scientist = Am. Behav. Sci.
-American Biotechnology Laboratory = Am. Biotechnol. Lab.
-American Ceramic Society Bulletin=Am. Ceram. Soc. Bull.;ACSBA7;M
-American Clinical Laboratory = Am. Clin. Lab.
-American College of Physicians Observer = Am. Coll. Physicians Obs.
-American Corrective Therapy Journal = Am. Correct. Ther. J.
-American Demographics = Am. Demogr.
-American Economic Review = Am. Econ. Rev.
-American Education = Am. Educ.
-American Family Physician = Am. Fam. Physician
-American Family Physician/GP = Am. Fam. Physician. GP
-American Heart Hospital Journal = Am. Heart Hosp. J.
-American Heart Journal = Am. Heart J.
-American Imago = Am. Imago
-American Indian and Alaska Native Mental Health Research = Am. Indian Alsk. Native Ment. Health Res.
-American Indian and Alaska Native Mental Health Research. Monograph Series = Am. Indian Alsk. Native Ment. Health Res. Monogr. Ser.
-American Industrial Hygiene Association Journal = Am. Ind. Hyg. Assoc. J.
-American Journal of Alzheimer's Disease and Other Dementias = Am. J. Alzheimers Dis. Other Demen.
-American Journal of Anatomy = Am. J. Anat.
-American Journal of Anesthesiology = Am. J. Anesthesiol.
-American Journal of Art Therapy = Am. J. Art Ther.
-American Journal of Bioethics = Am. J. Bioeth.
-American Journal of Botany = Am. J. Bot.
-American Journal of Cardiac Imaging = Am. J. Card. Imaging
-American Journal of Cardiology = Am. J. Cardiol.
-American Journal of Cardiovascular Drugs = Am. J. Cardiovasc. Drugs
-American Journal of Cardiovascular Pathology = Am. J. Cardiovasc. Pathol.
-American Journal of Chinese Medicine = Am. J. Chin. Med.
-American Journal of Clinical Dermatology = Am. J. Clin. Dermatol.
-American Journal of Clinical Hypnosis = Am. J. Clin. Hypn.
-American Journal of Clinical Nutrition = Am. J. Clin. Nutr.
-American Journal of Clinical Oncology = Am. J. Clin. Oncol.
-American Journal of Clinical Pathology = Am. J. Clin. Pathol.
-American Journal of Community Psychology = Am. J. Community Psychol.
-American Journal of Contact Dermatitis = Am. J. Contact Dermat.
-American Journal of Critical Care = Am. J. Crit. Care
-American Journal of Dentistry = Am. J. Dent.
-American Journal of Dermatopathology = Am. J. Dermatopathol.
-American Journal of Digestive Diseases = Am. J. Dig. Dis.
-American Journal of Diseases of Children = Am. J. Dis. Child.
-American Journal of Drug and Alcohol Abuse = Am. J. Drug Alcohol Abuse
-American Journal of EEG Technology = Am. J. EEG Technol.
-American Journal of Economics and Sociology = Am. J. Econ. Sociol.
-American Journal of Emergency Medicine = Am. J. Emerg. Med.
-American Journal of Epidemiology = Am. J. Epidemiol.
-American Journal of Forensic Medicine and Pathology = Am. J. Forensic Med. Pathol.
-American Journal of Gastroenterology = Am. J. Gastroenterol.
-American Journal of Geriatric Pharmacotherapy = Am. J. Geriatr. Pharmacother.
-American Journal of Geriatric Psychiatry = Am. J. Geriatr. Psychiatry
-American Journal of Health Behavior = Am. J. Health Behav.
-American Journal of Health Planning = Am. J. Health Plann.
-American Journal of Health Promotion = Am. J. Health Promot.
-American Journal of Health-System Pharmacy = Am. J. Health. Syst. Pharm.
-American Journal of Hematology = Am. J. Hematol.
-American Journal of Hospice Care = Am. J. Hosp. Care
-American Journal of Hospice and Palliative Care = Am. J. Hosp. Palliat. Care
-American Journal of Hospital Pharmacy = Am. J. Hosp. Pharm.
-American Journal of Human Genetics = Am. J. Hum. Genet.
-American Journal of Hypertension = Am. J. Hypertens.
-American Journal of Industrial Medicine = Am. J. Ind. Med.
-American Journal of Infection Control = Am. J. Infect. Control
-American Journal of Kidney Diseases = Am. J. Kidney Dis.
-American Journal of Knee Surgery = Am. J. Knee Surg.
-American Journal of Law and Medicine = Am. J. Law Med.
-American Journal of Managed Care = Am. J. Manag. Care
-American Journal of Medical Electronics = Am. J. Med. Electron.
-American Journal of Medical Genetics = Am. J. Med. Genet.
-American Journal of Medical Genetics. Part A = Am. J. Med. Genet. A.
-American Journal of Medical Genetics. Part B, Neuropsychiatric Genetics = Am. J. Med. Genet. B Neuropsychiatr. Genet.
-American Journal of Medical Genetics. Part C, Seminars in Medical Genetics = Am. J. Med. Genet. C Semin. Med. Genet.
-American Journal of Medical Genetics. Supplement = Am. J. Med. Genet. Suppl.
-American Journal of Medical Quality = Am. J. Med. Qual.
-American Journal of Medical Technology = Am. J. Med. Technol.
-American Journal of Medicine = Am. J. Med.
-American Journal of Mental Deficiency = Am. J. Ment. Defic.
-American Journal of Mental Retardation = Am. J. Ment. Retard.
-American Journal of Nephrology = Am. J. Nephrol.
-American Journal of Nursing = Am. J. Nurs.
-American Journal of Obstetrics and Gynecology = Am. J. Obstet. Gynecol.
-American Journal of Occupational Therapy = Am. J. Occup. Ther.
-American Journal of Ophthalmology = Am. J. Ophthalmol.
-American Journal of Optometry and Archives of American Academy of Optometry = Am. J. Optom. Arch. Am. Acad. Optom.
-American Journal of Optometry and Physiological Optics = Am. J. Optom. Physiol. Opt.
-American Journal of Orthodontics = Am. J. Orthod.
-American Journal of Orthodontics and Dentofacial Orthopedics = Am. J. Orthod. Dentofacial Orthop.
-American Journal of Orthopedic Surgery = Am. J. Orthop. Surg.
-American Journal of Orthopedics = Am. J. Orthop.
-American Journal of Orthopsychiatry = Am. J. Orthopsychiatry
-American Journal of Otolaryngology = Am. J. Otolaryngol.
-American Journal of Otology = Am. J. Otol.
-American Journal of Pathology = Am. J. Pathol.
-American Journal of Pediatric Hematology/Oncology = Am. J. Pediatr. Hematol. Oncol.
-American Journal of Perinatology = Am. J. Perinatol.
-American Journal of Pharmaceutical Education = Am. J. Pharm. Educ.
-American Journal of Pharmacogenomics = Am. J. Pharmacogenomics
-American Journal of Pharmacy and the Sciences Supporting Public Health = Am. J. Pharm. Sci. Support. Public Health
-American Journal of Physical Anthropology = Am. J. Phys. Anthropol.
-American Journal of Physical Medicine = Am. J. Phys. Med.
-American Journal of Physical Medicine and Rehabilitation = Am. J. Phys. Med. Rehabil.
-American Journal of Physiologic Imaging = Am. J. Physiol. Imaging
-American Journal of Physiology = Am. J. Physiol.
-American Journal of Physiology. Renal Physiology = Am. J. Physiol. Renal Physiol.
-American Journal of Practical Nursing = Am. J. Pract. Nurs.
-American Journal of Preventive Medicine = Am. J. Prev. Med.
-American Journal of Primatology = Am. J. Primatol.
-American Journal of Proctology = Am. J. Proctol.
-American Journal of Proctology, Gastroenterology and Colon and Rectal Surgery = Am. J. Proctol. Gastroenterol. Colon Rectal Surg.
-American Journal of Psychiatry = Am. J. Psychiatry
-American Journal of Psychoanalysis = Am. J. Psychoanal.
-American Journal of Psychology = Am. J. Psychol.
-American Journal of Psychotherapy = Am. J. Psychother.
-American Journal of Public Health = Am. J. Public Health
-American Journal of Public Health and the Nation's Health = Am. J. Public Health Nations Health
-American Journal of Reproductive Immunology = Am. J. Reprod. Immunol.
-American Journal of Reproductive Immunology and Microbiology = Am. J. Reprod. Immunol. Microbiol.
-American Journal of Respiratory Cell and Molecular Biology = Am. J. Respir. Cell Mol. Biol.
-American Journal of Respiratory and Critical Care Medicine = Am. J. Respir. Crit. Care Med.
-American Journal of Rhinology = Am. J. Rhinol.
-American Journal of Roentgenology = Am. J. Roentgenol.
-American Journal of Roentgenology, Radium Therapy and Nuclear Medicine = Am. J. Roentgenol. Radium Ther. Nucl. Med.
-American Journal of Sports Medicine = Am. J. Sports Med.
-American Journal of Surgery = Am. J. Surg.
-American Journal of Surgical Pathology = Am. J. Surg. Pathol.
-American Journal of Therapeutics = Am. J. Ther.
-American Journal of Transplantation = Am. J. Transplant.
-American Journal of Tropical Medicine and Hygiene = Am. J. Trop. Med. Hyg.
-American Journal of Veterinary Research = Am. J. Vet. Res.
-American Journal of the Medical Sciences = Am. J. Med. Sci.
-American Journal on Addictions = Am. J. Addict.
-American Laundry Digest = Am. Laund. Dig.
-American Libraries = Am. Libr.
-American Lung Association Bulletin = Am. Lung Assoc. Bull.
-American Medical News = Am. Med. News
-American Mineralogist=Am. Mineral.;AMMIAY;8/YR
-American Nurse = Am. Nurse
-American Nurses Association Publications = ANA Publ.
-American Orthoptic Journal = Am. Orthopt. J.
-American Pharmacy = Am. Pharm.
-American Psychologist = Am. Psychol.
-American Rehabilitation = Am. Rehabil.
-American Review of Respiratory Disease = Am. Rev. Respir. Dis.
-American Scientist = Amer. Sci.
-American Sociological Review = Am. Sociol. Rev.
-American Surgeon = Am. Surg.
-American University Law Review = Am. Univ. Law Rev.
-American Zoologist = Am. Zool.
-Amino Acids = Amino Acids
-Amyloid = Amyloid
-Amyotrophic Lateral Sclerosis = Amyotroph. Lateral Scler.
-Amyotrophic Lateral Sclerosis and Other Motor Neuron Disorders = Amyotroph. Lateral Scler. Other Motor Neuron Disord.
-Anadolu Kardiyoloji Dergisi = Anadolu Kardiyol. Derg.
-Anaesthesia = Anaesthesia
-Anaesthesia and Intensive Care = Anaesth. Intensive Care
-Anaesthesia, Resuscitation and Intensive Therapy = Anaesth. Resusc. Intensive Ther.
-Anaesthesiologie und Reanimation = Anaesthesiol. Reanim.
-Anaesthesist = Anaesthesist
-Anais Brasileiros de Dermatologia = An. Bras. Dermatol.
-Anais Brasileiros de Ginecologia = An. Bras. Ginecol.
-Anais Paulistas de Medicina e Cirurgia = An. Paul. Med. Cir.
-Anais da Academia Brasileira de Ciencias = An. Acad. Bras. Cienc.
-Anais da Escola Nacional de Saude Publica e de Medicina Tropical = An. Esc. Nacl. Saude Publica Med. Trop. (Lisb.)
-Anais da Faculdade de Odontologia da Universidade Federal de Pernambuco = An. Fac. Odontol. Univ. Fed. Pernambuco
-Anais de Microbiologia = An. Microbiol. (Rio. J.)
-Anais do Instituto de Higiene e Medicina Tropical = An. Inst. Hig. Med. Trop. (Lisb.)
-Anais do Instituto de Medicina Tropical = An. Inst. Med. Trop. (Lisb.)
-Anal. Chem. Indian Journal of Chemistry, Section A: Inorganic, Bio-inorganic, Physical, Theoretical & Analytical Chemistry=Indian J. Chem., Sect. A: Inorg., Bio-inorg., Phys., Theor.;ICACEC;M
-Anales Espanoles de Odontoestomatologia = An. Esp. Odontoestomatol.
-Anales Espanoles de Pediatria = An. Esp. Pediatr.
-Anales Otorrinolaringologicos Iberoamericanos = An. Otorrinolaringol. Ibero. Am.
-Anales de Cirugia = An. Cir. (Rosario)
-Anales de Medicina = An. Med. (Lima)
-Anales de Medicina Interna = An. Med. Interna
-Anales de Medicina: Cirugia = An. Med. Cir.
-Anales de Medicina: Especialidades = An. Med. Espec.
-Anales de Medicina: Medicina = An. Med. Med.
-Anales de Pediatria = An. Pediatr.
-Anales de la Facultad de Medicina, Universidad Nacional Mayor de San Marcos de Lima = An. Fac. Med. Lima
-Anales de la Facultad de Medicina, Universidad de la Republica, Montevideo, Uruguay = An. Fac. Med. Univ. Repub. Montev. Urug.
-Anales de la Facultad de Odontologia = An. Fac. Odontol.
-Anales de la Real Academia Nacional de Medicina = An. R. Acad. Nac. Med. (Madr.)
-Anales de la Real Academia de Farmacia; Instituto de Espana = An. Real Acad. Farm.
-Anales del Programa Academico de Medicina = An. Programa Acad. Med. (Lima)
-Anales, Instituto de Investigaciones Odontologicas, Universidad del Zulia = An. Inst. Invest. Odontol. (Maracaibo)
-Analyst = Analyst
-Analyst (Cambridge, United Kingdom)=Analyst (Cambridge, U. K.);ANALAO;M
-Analytica Chimica Acta = Anal. Chim. Acta
-Analytical Biochemistry = Anal. Biochem.
-Analytical Cellular Pathology = Anal. Cell. Pathol.
-Analytical Chemistry = Anal. Chem.
-Analytical Letters=Anal. Lett.;ANALBP;15/YR
-Analytical Sciences=Anal. Sci.;ANSCEN;M
-Analytical and Bioanalytical Chemistry = Anal. Bioanal. Chem.
-Analytical and Quantitative Cytology = Anal. Quant. Cytol.
-Analytical and Quantitative Cytology and Histology = Anal. Quant. Cytol. Histol.
-Anasthesie, Intensivtherapie, Notfallmedizin = Anasth. Intensivther. Notf. Med.
-Anasthesiologie, Intensivmedizin, Notfallmedizin, Schmerztherapie = Anasthesiol. Intensivmed. Notfallmed. Schmerzther.
-Anasthesiologische und Intensivmedizinische Praxis = Anasthesiol. Intensivmed. Prax.
-Anatomia Clinica = Anat. Clin.
-Anatomia, Histologia, Embryologia = Anat. Histol. Embryol.
-Anatomic Pathology = Anat. Pathol.
-Anatomical Record = Anat. Rec.
-Anatomical Record. Part A, Discoveries in Molecular, Cellular, and Evolutionary Biology = Anat. Rec. A. Discov. Mol. Cell. Evol. Biol.
-Anatomical Record. Part B, New Anatomist = Anat. Rec. B. New Anat.
-Anatomical Record. Supplement = Anat. Rec. Suppl.
-Anatomical Science International = Anat. Sci. Int.
-Anatomischer Anzeiger = Anat. Anz.
-Anatomy and Embryology = Anat. Embryol. (Berl.)
-Andrologia = Andrologia
-Andrologie = Andrologie
-Anesteziologiia i Reanimatologiia = Anesteziol. Reanimatol.
-Anesthesia Progress = Anesth. Prog.
-Anesthesia and Analgesia = Anesth. Analg.
-Anesthesia and Pain Control in Dentistry = Anesth. Pain Control Dent.
-Anesthesie, Analgesie, Reanimation = Anesth. Analg. (Paris)
-Anesthesiology = Anesthesiology
-Anesthesiology Clinics = Anesthesiol. Clin.
-Anesthesiology Review = Anesthesiol. Rev.
-Angeiologie = Angeiologie
-Angewandte Chemie, International Edition=Angew. Chem., Int. Ed.;ACIEF5;W
-Angewandte Chemie. International Edition in English = Angew. Chem. Int. Ed. Engl.
-Angewandte Parasitologie = Angew. Parasitol.
-Angiogenesis = Angiogenesis
-Angiologia = Angiologia
-Angiologica = Angiologica
-Angiology = Angiology
-Angle Orthodontist = Angle Orthod.
-Anglo-German Medical Review = Anglo. Ger. Med. Rev.
-Animal Behaviour = Anim. Behav.
-Animal Biotechnology = Anim. Biotechnol.
-Animal Blood Groups and Biochemical Genetics = Anim. Blood Groups Biochem. Genet.
-Animal Blood Groups and Biochemical Genetics. Supplement = Anim. Blood Groups Biochem. Genet. Suppl.
-Animal Cognition = Anim. Cogn.
-Animal Genetics = Anim. Genet.
-Animal Health Research Reviews = Anim. Health Res. Rev.
-Animal Learning and Behavior = Anim. Learn. Behav.
-Animal Reproduction Science = Anim. Reprod. Sci.
-Animal Welfare=Anim. Welfare;ANWEEF;4/YR
-Animal Welfare Information Center Bulletin=Anim. Welfare Inf. Cent. Bull.;AWICAW;Q
-Ankara Universitesi Dis Hekimligi Fakultesi Dergisi (Journal of the Dental Faculty of Ankara University) = Ankara Univ. Hekim. Fak. Derg.
-Annalen der Meteorologie = Ann. Meteor.
-Annales Academiae Medicae Stetinensis = Ann. Acad. Med. Stetin.
-Annales Academiae Medicae Stetinensis. Suplement = Ann. Acad. Med. Stetin. Supl.
-Annales Academiae Scientiarum Fennicae. Series A IV, Biologica = Ann. Acad. Sci. Fenn. [Biol.]
-Annales Academiae Scientiarum Fennicae. Series A V, Medica = Ann. Acad. Sci. Fenn. A
-Annales Chirurgiae et Gynaecologiae = Ann. Chir. Gynaecol.
-Annales Chirurgiae et Gynaecologiae Fenniae = Ann. Chir. Gynaecol. Fenn.
-Annales Chirurgiae et Gynaecologiae Fenniae. Supplement = Ann. Chir. Gynaecol. Fenn. Suppl.
-Annales Chirurgiae et Gynaecologiae. Supplementum = Ann. Chir. Gynaecol. Suppl.
-Annales Francaises d'Anesthesie et de Reanimation = Ann. Fr. Anesth. Reanim.
-Annales Immunologiae Hungaricae = Ann. Immunol. Hung.
-Annales Medicales de Nancy = Ann. Med. Nancy
-Annales Medicinae Experimentalis et Biologiae Fenniae = Ann. Med. Exp. Biol. Fenn.
-Annales Medicinae Internae Fenniae = Ann. Med. Intern. Fenn.
-Annales Medico-Psychologiques = Ann. Med. Psychol. (Paris)
-Annales Nestle = Ann. Nestle [Fr.]
-Annales Odonto-Stomatologiques = Ann. Odontostomatol. (Lyon)
-Annales Paediatriae Fenniae = Ann. Paediatr. Fenn.
-Annales Paediatrici (International Review of Pediatrics) = Ann. Paediatr. Int. Rev. Pediatr.
-Annales Pharmaceutiques Francaises = Ann. Pharm. Fr.
-Annales Universitatis Mariae Curie-Sklodowska. Sectio D, Medicina = Ann. Univ. Mariae Curie Sklodowska [Med.]
-Annales Universitatis Saraviensis. Medizin = Ann. Univ. Sarav. [Med.]
-Annales d Endocrinologie = Ann. Endocrinol. (Paris)
-Annales d Histochimie = Ann. Histochim.
-Annales d Immunologie = Ann. Immunol. (Paris)
-Annales d Oculistique = Ann. Ocul. (Paris)
-Annales d Oto-Laryngologie et de Chirurgie Cervico-Faciale = Ann. Otolaryngol. Chir. Cervicofac.
-Annales d Urologie = Ann. Urol. (Paris)
-Annales d'Anatomie Pathologique = Ann. Anat. Pathol. (Paris)
-Annales de Biologie Animale, Biochimie, Biophysique = Ann. Biol. Anim. Biochim. Biophys.
-Annales de Biologie Clinique = Ann. Biol. Clin. (Paris)
-Annales de Cardiologie et d'Angeiologie = Ann. Cardiol. Angeiol. (Paris)
-Annales de Chimie (Cachan, France)=Ann. Chim. (Cachan, Fr.);ANCPAC;6/YR
-Annales de Chirurgie = Ann. Chir.
-Annales de Chirurgie Infantile = Ann. Chir. Infant.
-Annales de Chirurgie Plastique = Ann. Chir. Plast.
-Annales de Chirurgie Plastique et Esthetique = Ann. Chir. Plast. Esthet.
-Annales de Chirurgie Thoracique et Cardio-Vasculaire = Ann. Chir. Thorac. Cardiovasc.
-Annales de Chirurgie de la Main = Ann. Chir. Main
-Annales de Chirurgie de la Main et du Membre Superieur = Ann. Chir. Main Memb. Super.
-Annales de Dermatologie et de Syphiligraphie = Ann. Dermatol. Syphiligr. (Paris)
-Annales de Dermatologie et de Venereologie = Ann. Dermatol. Venereol.
-Annales de Droit International Medical = Ann. Droit Int. Med.
-Annales de Gastroenterologie et d'Hepatologie = Ann. Gastroenterol. Hepatol. (Paris)
-Annales de Genetique = Ann. Genet.
-Annales de Genetique et de Selection Animale = Ann. Genet. Sel. Anim.
-Annales de Geophysique = Ann. Geophys.
-Annales de Medecine Interne = Ann. Med. Interne (Paris)
-Annales de Medecine Legale, Criminologie, Police Scientifique et Toxicologie = Ann. Med. Leg. Criminol. Police Sci. Toxicol.
-Annales de Microbiologie = Ann. Microbiol. (Paris)
-Annales de Parasitologie Humaine et Comparee = Ann. Parasitol. Hum. Comp.
-Annales de Pathologie = Ann. Pathol.
-Annales de Pediatrie = Ann. Pediatr. (Paris)
-Annales de Physique = Ann. Phys.
-Annales de Radiologie = Ann. Radiol. (Paris)
-Annales de Recherches Veterinaires = Ann. Rech. Vet.
-Annales de l Institut Pasteur = Ann. Inst. Pasteur (Paris)
-Annales de l Institut Pasteur de Lille = Ann. Inst. Pasteur Lille
-Annales de l Institut Pasteur. Immunologie = Ann. Inst. Pasteur. Immunol.
-Annales de l Institut Pasteur. Immunology = Ann. Inst. Pasteur. Immunol.
-Annales de l Institut Pasteur. Microbiologie = Ann. Inst. Pasteur. Microbiol.
-Annales de l Institut Pasteur. Microbiology = Ann. Inst. Pasteur. Microbiol.
-Annales de l Institut Pasteur. Virology = Ann. Inst. Pasteur. Virol.
-Annales de l'Anesthesiologie Francaise = Ann. Anesthesiol. Fr.
-Annales de la Nutrition et de l Alimentation = Ann. Nutr. Aliment.
-Annales de la Societe Belge de Medecine Tropicale = Ann. Soc. Belg. Med. Trop.
-Annales de la Societe Royale des Sciences Medicales et Naturelles de Bruxelles = Ann. Soc. R. Sci. Med. Nat. Brux.
-Annali Italiani di Chirurgia = Ann. Ital. Chir.
-Annali Italiani di Medicina Interna = Ann. Ital. Med. Int.
-Annali Sclavo = Ann. Sclavo
-Annali Sclavo. Collana Monografica = Ann. Sclavo. Collana Monogr.
-Annali dell Ospedale Maria Vittoria di Torino = Ann. Osp. Maria Vittoria Torino
-Annali dell'Istituto Carlo Forlanini = Ann. Ist. Carlo Forlanini
-Annali dell'Istituto Superiore di Sanita = Ann. Ist. Super. Sanita
-Annali della Sanita Pubblica = Ann. Sanita Pubblica
-Annali di Chimica (Rome, Italy)=Ann. Chim. (Rome, Italy);ANCRAI;BM
-Annali di Igiene = Ann. Ig.
-Annali di Laringologia, Otologia, Rinologia, Faringologia = Ann. Laringol. Otol. Rinol. Faringol.
-Annali di Medicina Navale = Ann. Med. Nav. (Roma)
-Annali di Ostetricia, Ginecologia, Medicina Perinatale = Ann. Ostet. Ginecol. Med. Perinat.
-Annali di Ottalmologia e Clinica Oculistica = Ann. Ottalmol. Clin. Ocul.
-Annali di Radiologia Diagnostica = Ann. Radiol. Diagn. (Bologna)
-Annali di Stomatologia = Ann. Stomatol. (Roma)
-Annals of Agricultural and Environmental Medicine = Ann. Agric. Environ. Med.
-Annals of Allergy = Ann. Allergy
-Annals of Allergy, Asthma, and Immunology = Ann. Allergy. Asthma. Immunol.
-Annals of Applied Biology = Ann. Appl. Biol.
-Annals of Behavioral Medicine = Ann. Behav. Med.
-Annals of Biomedical Engineering = Ann. Biomed. Eng.
-Annals of Clinical Biochemistry = Ann. Clin. Biochem.
-Annals of Clinical Laboratory Science = Ann. Clin. Lab. Sci.
-Annals of Clinical Psychiatry = Ann. Clin. Psychiatry
-Annals of Clinical Research = Ann. Clin. Res.
-Annals of Clinical and Laboratory Science = Ann. Clin. Lab. Sci.
-Annals of Dentistry = Ann. Dent.
-Annals of Diagnostic Pathology = Ann. Diagn. Pathol.
-Annals of Emergency Medicine = Ann. Emerg. Med.
-Annals of Epidemiology = Ann. Epidemiol.
-Annals of Family Medicine = Ann. Fam. Med.
-Annals of Health Law = Ann. Health Law
-Annals of Hematology = Ann. Hematol.
-Annals of Hepatology = Ann. Hepatol.
-Annals of Human Biology = Ann. Hum. Biol.
-Annals of Human Genetics = Ann. Hum. Genet.
-Annals of Internal Medicine = Ann. Intern. Med.
-Annals of Medicine = Ann. Med.
-Annals of Neurology = Ann. Neurol.
-Annals of Noninvasive Electrocardiology = Ann. Noninvasive Electrocardiol.
-Annals of Nuclear Energy=Ann. Nucl. Energy;ANENDJ;18/YR
-Annals of Nuclear Medicine = Ann. Nucl. Med.
-Annals of Nutrition & Metabolism=Ann. Nutr. Metab.;ANUMDS;BM
-Annals of Nutrition and Metabolism = Ann. Nutr. Metab.
-Annals of Occupational Hygiene = Ann. Occup. Hyg.
-Annals of Oncology = Ann. Oncol.
-Annals of Ophthalmology = Ann. Ophthalmol.
-Annals of Otology, Rhinology and Laryngology = Ann. Otol. Rhinol. Laryngol.
-Annals of Otology, Rhinology, and Laryngology. Supplement = Ann. Otol. Rhinol. Laryngol. Suppl.
-Annals of Periodontology = Ann. Periodontol.
-Annals of Pharmacotherapy = Ann. Pharmacother.
-Annals of Physical Medicine = Ann. Phys. Med.
-Annals of Physics (San Diego, CA, United States)=Ann. Phys. (San Diego, CA, U. S.);APNYA6;M
-Annals of Physiological Anthropology = Ann. Physiol. Anthropol.
-Annals of Plastic Surgery = Ann. Plast. Surg.
-Annals of Surgery = Ann. Surg.
-Annals of Surgical Oncology = Ann. Surg. Oncol.
-Annals of Thoracic Surgery = Ann. Thorac. Surg.
-Annals of Thoracic and Cardiovascular Surgery = Ann. Thorac. Cardiovasc. Surg.
-Annals of Transplantation = Ann. Transplant.
-Annals of Tropical Medicine and Parasitology = Ann. Trop. Med. Parasitol.
-Annals of Tropical Paediatrics = Ann. Trop. Paediatr.
-Annals of Vascular Surgery = Ann. Vasc. Surg.
-Annals of the Academy of Medicine, Singapore = Ann. Acad. Med. Singapore
-Annals of the American Academy of Political and Social Science = Ann. Am. Acad. Pol. Soc. Sci.
-Annals of the Australian College of Dental Surgeons = Ann. Aust. Coll. Dent. Surg.
-Annals of the Entomological Society of America = Ann. Entomol. Soc. Am.
-Annals of the ICRP = Ann. ICRP
-Annals of the Medical Section of the Polish Academy of Sciences = Ann. Med. Sect. Pol. Acad. Sci.
-Annals of the Medical University, Bialystok, Poland = Ann. Med. Univ. Bialyst. Pol.
-Annals of the New York Academy of Dentistry = Annals. N. Y. Acad. Dent.
-Annals of the New York Academy of Sciences = Ann. N. Y. Acad. Sci.
-Annals of the Rheumatic Diseases = Ann. Rheum. Dis.
-Annals of the Royal Australasian College of Dental Surgeons = Ann. R. Australas. Coll. Dent. Surg.
-Annals of the Royal College of Surgeons of England = Ann. R. Coll. Surg. Engl.
-Annee Biologique = Annee Biol.
-Annee Endocrinologique = Annee Endocrinol.
-Annee Psychologique = Annee Psychol.
-Annee Therapeutique et Clinique en Ophtalmologie = Annee Ther. Clin. Ophtalmol.
-Annexins=Annexins;ANNEC2;Q
-Annual Conference on Research in Medical Education = Annu. Conf. Res. Med. Educ.
-Annual Meeting, American Institute of Oral Biology = Annu. Meet. Am. Inst. Oral Biol.
-Annual Report of the Research Institute of Environmental Medicine, Nagoya University = Annu. Rep. Res. Inst. Environ. Med. Nagoya Univ.
-Annual Reports in Medicinal Chemistry=Annu. Rep. Med. Chem.;ARMCBI;A
-Annual Reports on NMR Spectroscopy=Annu. Rep. NMR Spectrosc.;NMRPAJ;IRR
-Annual Reports on the Progress of Chemistry, Section A: Inorganic Chemistry=Annu. Rep. Prog. Chem., Sect. A: Inorg. Chem.;APCCDO;A
-Annual Reports on the Progress of Chemistry, Section B: Organic Chemistry=Annu. Rep. Prog. Chem., Sect. B: Org. Chem.;CACBB4;A
-Annual Reports on the Progress of Chemistry, Section C: Physical Chemistry=Annu. Rep. Prog. Chem., Sect. C: Phys. Chem.;ACPCDW;A
-Annual Review of Biochemistry = Annu. Rev. Biochem.
-Annual Review of Biomedical Engineering = Annu. Rev. Biomed. Eng.
-Annual Review of Biophysics and Bioengineering = Annu. Rev. Biophys. Bioeng.
-Annual Review of Biophysics and Biomolecular Structure = Annu. Rev. Biophys. Biomol. Struct.
-Annual Review of Biophysics and Biophysical Chemistry = Annu. Rev. Biophys. Biophys. Chem.
-Annual Review of Cell Biology = Annu. Rev. Cell Biol.
-Annual Review of Cell and Developmental Biology = Annu. Rev. Cell Dev. Biol.
-Annual Review of Earth and Planetary Sciences=Annu. Rev. Earth Planet. Sci.;AREPCI;A
-Annual Review of Entomology = Annu. Rev. Entomol.
-Annual Review of Fluid Mechanics = Annu. Rev. Fluid Mech.
-Annual Review of Genetics = Annu. Rev. Genet.
-Annual Review of Genomics and Human Genetics = Annu. Rev. Genomics Hum. Genet.
-Annual Review of Gerontology and Geriatrics = Annu. Rev. Gerontol. Geriatr.
-Annual Review of Immunology = Annu. Rev. Immunol.
-Annual Review of Materials Research=Annu. Rev. Mater. Res.;ARMRCU;A
-Annual Review of Medicine = Annu. Rev. Med.
-Annual Review of Microbiology = Annu. Rev. Microbiol.
-Annual Review of Neuroscience = Annu. Rev. Neurosci.
-Annual Review of Nuclear Science = Annu. Rev. Nucl. Sci.
-Annual Review of Nuclear and Particle Science=Annu. Rev. Nucl. Part. Sci.;ARPSDF;A
-Annual Review of Nursing Research = Annu. Rev. Nurs. Res.
-Annual Review of Nutrition = Annu. Rev. Nutr.
-Annual Review of Pharmacology = Annu. Rev. Pharmacol.
-Annual Review of Pharmacology and Toxicology = Annu. Rev. Pharmacol. Toxicol.
-Annual Review of Physical Chemistry = Annu. Rev. Phys. Chem.
-Annual Review of Physiology = Annu. Rev. Physiol.
-Annual Review of Phytopathology=Annu. Rev. Phytopathol.;APPYAG;A
-Annual Review of Plant Biology = Annu. Rev. Plant Biol.
-Annual Review of Psychology = Annu. Rev. Psychol.
-Annual Review of Public Health = Annu. Rev. Public Health
-Annual Review of Rehabilitation = Annu. Rev. Rehabil.
-Annual Review of Sex Research = Annu. Rev. Sex Res.
-Annual Symposium on Nursing Faculty Practice = Annu. Symp. Nurs. Fac. Pract.
-Anthropologischer Anzeiger = Anthropol. Anz.
-Anti-Cancer Agents in Medicinal Chemistry = Anticancer Agents Med. Chem.
-Anti-Cancer Drug Design = Anticancer. Drug Des.
-Anti-Cancer Drugs = Anticancer. Drugs
-Antibiotica = Antibiotica
-Antibiotica. Quaderni = Antibiotica. [Quad.]
-Antibiotics and Chemotherapy = Antibiot. Chemother.
-Antibiotiki = Antibiotiki
-Antibiotiki i Khimioterapiia = Antibiot. Khimioter.
-Antibiotiki i Khimioterapiya=Antibiot. Khimioter.;ANKHEW;M
-Antibiotiki i Meditsinskaia Biotekhnologiia = Antibiot. Med. Biotekhnol.
-Anticancer Research = Anticancer Res.
-Antimicrobial Agents and Chemotherapy = Antimicrob. Agents Chemother.
-Antioquia Medica = Antioquia Med.
-Antioxidants & Redox Signaling=Antioxid. Redox Signaling;ARSIF2;BM
-Antioxidants and Redox Signalling = Antioxid. Redox. Signal.
-Antisense Research and Development = Antisense Res. Dev.
-Antisense and Nucleic Acid Drug Development = Antisense Nucleic Acid Drug Dev.
-Antiviral Chemistry & Chemotherapy=Antiviral Chem. Chemother.;ACCHEH;BM
-Antiviral Chemistry and Chemotherapy = Antivir. Chem. Chemother.
-Antiviral Research = Antiviral Res.
-Antiviral Therapy = Antivir. Ther.
-Antonie van Leeuwenhoek = Antonie van Leeuwenhoek
-Anuario Brasileiro de Odontologia = Anu. Bras. Odontol.
-Anxiety = Anxiety
-Apex = Apex
-Apollonia = Apollonia (Sydney)
-Apoptosis = Apoptosis
-Appetite = Appetite
-Applied Biochemistry and Biotechnology = Appl. Biochem. Biotechnol.
-Applied Biochemistry and Microbiology=Appl. Biochem. Microbiol.;APBMAC;BM
-Applied Bioinformatics = Appl. Bioinformatics
-Applied Cardiology = Appl. Cardiol.
-Applied Cardiopulmonary Pathophysiology = Appl. Cardiopulm. Pathophysiol.
-Applied Catalysis, A: General=Appl. Catal., A;ACAGE4;36/YR
-Applied Catalysis, B: Environmental=Appl. Catal., B;ACBEE3;28/YR
-Applied Clay Science=Appl. Clay Sci.;ACLSER;BM
-Applied Ergonomics = Appl. Ergon.
-Applied Geochemistry=Appl. Geochem.;APPGEY;M
-Applied Health Economics and Health Policy = Appl. Health Econ. Health Policy.
-Applied Human Science = Appl. Human Sci.
-Applied Immunohistochemistry and Molecular Morphology = Appl. Immunohistochem. Mol. Morphol.
-Applied Microbiology = Appl. Microbiol.
-Applied Microbiology and Biotechnology = Appl. Microbiol. Biotechnol.
-Applied Neurophysiology = Appl. Neurophysiol.
-Applied Nursing Research = Appl. Nurs. Res.
-Applied Optics = Appl. Opt.
-Applied Organometallic Chemistry=Appl. Organomet. Chem.;AOCHEX;M
-Applied Parasitology = Appl. Parasitol.
-Applied Pathology = Appl. Pathol.
-Applied Physics A: Materials Science & Processing=Appl. Phys. A: Mater. Sci. Process.;APAMFC;16/YR
-Applied Physics B: Lasers and Optics=Appl. Phys. B: Lasers Opt.;APBOEM;16/YR
-Applied Physics Letters=Appl. Phys. Lett.;APPLAB;W
-Applied Physiology, Nutrition, and Metabolism = Appl. Physiol. Nutr. Metab.
-Applied Psychophysiology and Biofeedback = Appl. Psychophysiol. Biofeedback
-Applied Radiation and Isotopes = Appl. Radiat. Isot.
-Applied Radiology = Appl. Radiol.
-Applied Research in Mental Retardation = Appl. Res. Ment. Retard.
-Applied Spectroscopy=Appl. Spectrosc.;APSPA4;M
-Applied Surface Science=Appl. Surf. Sci.;ASUSEE;19/YR
-Applied Therapeutics = Appl. Ther.
-Applied and Environmental Microbiology = Appl. Environ. Microbiol.
-Applied and Theoretical Electrophoresis = Appl. Theor. Electrophor.
-Aptechnoe Delo = Aptechn. Delo
-Aquacultural Engineering = Aquacult. Eng.
-Aquaculture = Aquaculture
-Aquaculture International = Aquacult. Int.
-Aquaculture Nutrition = Aquacult. Nutr.
-Aquaculture Research = Aquacult. Res.
-Aquatic Toxicology=Aquat. Toxicol.;AQTODG;20/YR
-Arbeiten aus dem Paul-Ehrlich-Institut (Bundesamt fur Sera und Impfstoffe) zu Frankfurt a. M. = Arb. Paul Ehrlich Inst. Bundesamt Sera Impfstoffe Frankf. a. M.
-Arbeiten aus dem Paul-Ehrlich-Institut, dem Georg-Speyer-Haus und dem Ferdinand-Blum-Institut zu Frankfurt a. M. = Arb. Paul Ehrlich Inst. Georg Speyer Haus Ferdinand Blum Inst. Frankf. a. M.
-Archaea = Archaea
-Architectural Record = Archit. Rec.
-Architecture = Architecture
-Archiv der Julius Klaus-Stiftung fur Vererbungsforschung, Sozialanthropologie und Rassenhygiene = Arch. Julius Klaus Stift. Vererbungsforsch. Sozialanthropol. Rassenhyg.
-Archiv der Pharmazie = Arch. Pharm. (Weinheim)
-Archiv der Pharmazie (Weinheim, Germany)=Arch. Pharm. (Weinheim, Ger.);ARPMAS;M
-Archiv der Pharmazie und Berichte der Deutschen Pharmazeutischen Gesellschaft = Arch. Pharm. Ber. Dtsch. Pharm. Ges.
-Archiv fur Dermatologische Forschung = Arch. Dermatol. Forsch.
-Archiv fur Experimentelle Veterinarmedizin = Arch. Exp. Veterinarmed.
-Archiv fur Genetik = Arch. Genet. (Zur.)
-Archiv fur Geschwulstforschung = Arch. Geschwulstforsch.
-Archiv fur Gynakologie = Arch. Gynakol.
-Archiv fur Hygiene und Bakteriologie = Arch. Hyg. Bakteriol.
-Archiv fur Kinderheilkunde = Arch. Kinderheilkd.
-Archiv fur Klinische Medizin = Arch. Klin. Med.
-Archiv fur Klinische und Experimentelle Dermatologie = Arch. Klin. Exp. Dermatol.
-Archiv fur Klinische und Experimentelle Ohren-, Nasen- und Kehlkopfheilkunde = Arch. Klin. Exp. Ohren. Nasen. Kehlkopfheilkd.
-Archiv fur Kreislaufforschung = Arch. Kreislaufforsch.
-Archiv fur Kriminologie = Arch. Kriminol.
-Archiv fur Mikrobiologie = Arch. Mikrobiol.
-Archiv fur Ohren-, Nasen- und Kehlkopfheilkunde = Arch. Ohren Nasen Kehlkopfheilkd.
-Archiv fur Orthopadische und Unfall-Chirurgie = Arch. Orthop. Unfallchir.
-Archiv fur Physikalische Therapie = Arch. Phys. Ther. (Leipz.)
-Archiv fur Psychiatrie und Nervenkrankheiten = Arch. Psychiatr. Nervenkr.
-Archiv fur Psychologie = Arch. Psychol. (Frankf.)
-Archiv fur Tierernahrung = Arch. Tierernahr.
-Archiv fur Toxikologie = Arch. Toxikol.
-Archiv fur die Gesamte Psychologie = Arch. Gesamte Psychol.
-Archiv fur die Gesamte Virusforschung = Arch. Gesamte Virusforsch.
-Archiv für Meteorologie, Geophysik und Bioklimatologie = Arch. Meteor. Geophys. Bioklimatol.
-Archives Belges = Arch. Belg.
-Archives Belges de Dermatologie = Arch. Belg. Dermatol.
-Archives Belges de Dermatologie et de Syphiligraphie = Arch. Belg. Dermatol. Syphiligr.
-Archives Belges de Medecine Sociale, Hygiene, Medecine du Travail et Medecine Legale = Arch. Belg. Med. Soc.
-Archives Francaises de Pediatrie = Arch. Fr. Pediatr.
-Archives Francaises des Maladies de l'Appareil Digestif = Arch. Fr. Mal. App. Dig.
-Archives Internationales de Pharmacodynamie et de Therapie = Arch. Int. Pharmacodyn. Ther.
-Archives Internationales de Physiologie et de Biochimie = Arch. Int. Physiol. Biochim.
-Archives Internationales de Physiologie, de Biochimie et de Biophysique = Arch. Int. Physiol. Biochim. Biophys.
-Archives Italiennes de Biologie = Arch. Ital. Biol.
-Archives Mediterraneennes de Medecine = Arch. Mediterr. Med.
-Archives Roumaines de Pathologie Experimentale et de Microbiologie = Arch. Roum. Pathol. Exp. Microbiol.
-Archives d'Anatomie Microscopique et de Morphologie Experimentale = Arch. Anat. Microsc. Morphol. Exp.
-Archives d'Anatomie Pathologique = Arch. Anat. Pathol. (Paris)
-Archives d'Anatomie et de Cytologie Pathologiques = Arch. Anat. Cytol. Pathol.
-Archives d'Anatomie, d'Histologie et d'Embryologie = Arch. Anat. Histol. Embryol.
-Archives d'Ophtalmologie = Arch. Ophtalmol. (Paris)
-Archives d'Ophtalmologie et Revue Generale d'Ophtalmologie = Arch. Ophtalmol. Rev. Gen. Ophtalmol.
-Archives de Biologie = Arch. Biol. (Liege)
-Archives de Medecine Generale et Tropicale = Arch. Med. Gen. Trop.
-Archives de Pediatrie = Arch. Pediatr.
-Archives de l'Institut Pasteur d Algerie = Arch. Inst. Pasteur Alger.
-Archives de l'Institut Pasteur de Madagascar = Arch. Inst. Pasteur Madagascar
-Archives de l'Institut Pasteur de Tunis = Arch. Inst. Pasteur Tunis
-Archives des Maladies Professionnelles de Medecine du Travail et de Securite Sociale = Arch. Mal. Prof.
-Archives des Maladies de l'Appareil Digestif et des Maladies de la Nutrition = Arch. Mal. Appar. Dig. Mal. Nutr.
-Archives des Maladies du Coeur et des Vaisseaux = Arch. Mal. Coeur Vaiss.
-Archives des Sciences Physiologiques = Arch. Sci. Physiol. (Paris)
-Archives for Dermatological Research (Archiv fur Dermatologische Forschung) = Arch. Dermatol. Res.
-Archives of Andrology = Arch. Androl.
-Archives of Animal Nutrition = Arch. Anim. Nutr.
-Archives of Biochemistry and Biophysics = Arch. Biochem. Biophys.
-Archives of Dermatological Research = Arch. Dermatol. Res.
-Archives of Dermatology = Arch. Dermatol.
-Archives of Disease in Childhood = Arch. Dis. Child.
-Archives of Disease in Childhood. Fetal and Neonatal Edition = Arch. Dis. Child. Fetal Neonatal Ed.
-Archives of Emergency Medicine = Arch. Emerg. Med.
-Archives of Environmental Contamination and Toxicology = Arch. Environ. Contam. Toxicol.
-Archives of Environmental Health = Arch. Environ. Health
-Archives of Environmental and Occupational Health = Arch. Environ. Occup. Health
-Archives of Facial Plastic Surgery = Arch. Facial Plast. Surg.
-Archives of Family Medicine = Arch. Fam. Med.
-Archives of General Psychiatry = Arch. Gen. Psychiatry
-Archives of Gerontology and Geriatrics = Arch. Gerontol. Geriatr.
-Archives of Gerontology and Geriatrics. Supplement = Arch. Gerontol. Geriatr. Suppl.
-Archives of Gynecology = Arch. Gynecol.
-Archives of Gynecology and Obstetrics = Arch. Gynecol. Obstet.
-Archives of Histology and Cytology = Arch. Histol. Cytol.
-Archives of Insect Biochemistry and Physiology = Arch. Insect Biochem. Physiol.
-Archives of Interamerican Rheumatology = Arch. Interam. Rheumatol.
-Archives of Internal Medicine = Arch. Intern. Med.
-Archives of Medical Research = Arch. Med. Res.
-Archives of Microbiology = Arch. Microbiol.
-Archives of Neurology = Arch. Neurol.
-Archives of Ophthalmology = Arch. Ophthalmol.
-Archives of Oral Biology = Arch. Oral Biol.
-Archives of Orthopaedic and Trauma Surgery = Arch. Orthop. Trauma Surg.
-Archives of Orthopaedic and Traumatic Surgery = Arch. Orthop. Trauma. Surg.
-Archives of Oto-Rhino-Laryngology = Arch. Otorhinolaryngol.
-Archives of Oto-Rhino-Laryngology. Supplement = Arch. Otorhinolaryngol. Suppl.
-Archives of Otolaryngology = Arch. Otolaryngol.
-Archives of Otolaryngology -- Head and Neck Surgery = Arch. Otolaryngol. Head Neck Surg.
-Archives of Pathology = Arch. Pathol.
-Archives of Pathology and Laboratory Medicine = Arch. Pathol. Lab. Med.
-Archives of Pediatrics and Adolescent Medicine = Arch. Pediatr. Adolesc. Med.
-Archives of Pharmacal Research = Arch. Pharm. Res.
-Archives of Physical Medicine and Rehabilitation = Arch. Phys. Med. Rehabil.
-Archives of Physiology and Biochemistry = Arch. Physiol. Biochem.
-Archives of Psychiatric Nursing = Arch. Psychiatr. Nurs.
-Archives of Sexual Behavior = Arch. Sex. Behav.
-Archives of Surgery = Arch. Surg.
-Archives of Toxicology = Arch. Toxicol.
-Archives of Toxicology. Supplement = Arch. Toxicol. Suppl.
-Archives of Virology = Arch. Virol.
-Archives of Virology. Supplementum = Arch. Virol. Suppl.
-Archivii Italiani di Laringologia = Arch. Ital. Laringol.
-Archivio "E. Maragliano" di Patologia e Clinica = Arch. Maragliano Patol. Clin.
-Archivio Italiano delle Malattie dell Apparato Digerente = Arch. Ital. Mal. Appar. Dig.
-Archivio Italiano di Anatomia e Istologia Patologica = Arch. Ital. Anat. Istol. Patol.
-Archivio Italiano di Anatomia e di Embriologia = Arch. Ital. Anat. Embriol.
-Archivio Italiano di Chirurgia = Arch. Ital. Chir.
-Archivio Italiano di Dermatologia, Venereologia e Sessuologia = Arch. Ital. Dermatol. Venereol. Sessuol.
-Archivio Italiano di Otologia, Rinologia e Laringologia = Arch. Ital. Otol. Rinol. Laringol.
-Archivio Italiano di Otologia, Rinologia e Laringologia. Supplemento = Arch. Ital. Otol. Rinol. Laringol. Suppl.
-Archivio Italiano di Otologia, Rinologia, Laringologia e Patologia Cervico-Facciale = Arch. Ital. Otol. Rinol. Laringol. Patol. Cervicofacc.
-Archivio Italiano di Otologia, Rinologia, Laringologia e Patologia Cervico-Facciale. Supplemento = Arch. Ital. Otol. Rinol. Laringol. Patol. Cervicofacc. Suppl.
-Archivio Italiano di Patologia e Clinica dei Tumori = Arch. Ital. Patol. Clin. Tumori
-Archivio Italiano di Pediatria e Puericoltura = Arch. Ital. Pediatr. Pueric.
-Archivio Italiano di Scienze Farmacologiche = Arch. Ital. Sci. Farmacol.
-Archivio Italiano di Scienze Mediche Tropicali e di Parassitologia = Arch. Ital. Sci. Med. Trop. Parassitol.
-Archivio Italiano di Urologia = Arch. Ital. Urol.
-Archivio Italiano di Urologia e Nefrologia = Arch. Ital. Urol. Nefrol.
-Archivio Italiano di Urologia, Andrologia = Arch. Ital. Urol. Androl.
-Archivio Italiano di Urologia, Nefrologia, Andrologia = Arch. Ital. Urol. Nefrol. Androl.
-Archivio Monaldi per la Tisiologia e le Malattie dell Apparato Respiratorio = Arch. Monaldi
-Archivio Monaldi per le Malattie del Torace = Arch. Monaldi Mal. Torace
-Archivio Putti di Chirurgia degli Organi di Movimento = Arch. Putti Chir. Organi Mov.
-Archivio Stomatologico = Arch. Stomatol. (Napoli)
-Archivio Veterinario Italiano = Arch. Vet. Ital.
-Archivio de Vecchi per l'Anatomia Patologica e la Medicina Clinica = Arch. de Vecchi Anat. Patol.
-Archivio di Chirurgia Toracica e Cardiovascolare = Arch. Chir. Torac. Cardiovasc.
-Archivio di Fisiologia = Arch. Fisiol.
-Archivio di Medicina Interna = Arch. Med. Interna
-Archivio di Ortopedia = Arch. Ortop.
-Archivio di Ostetricia e Ginecologia = Arch. Ostet. Ginecol.
-Archivio di Patologia e Clinica Medica = Arch. Patol. Clin. Med.
-Archivio di Psicologia, Neurologia e Psichiatria = Arch. Psicol. Neurol. Psichiatr.
-Archivio di Scienze Biologiche = Arch. Sci. Biol. (Bologna)
-Archivio di Tisiologia e delle Malattie dell Apparato Respiratorio = Arch. Tisiol. Mal. Appar. Respir.
-Archivio per le Scienze Mediche = Arch. Sci. Med. (Torino)
-Archivo Espanol de Morfologia = Arch. Esp. Morfol.
-Archivos Argentinos de Dermatologia = Arch. Argent. Dermatol.
-Archivos Argentinos de Pediatria = Arch. Argent. Pediatr.
-Archivos Espanoles de Urologia = Arch. Esp. Urol.
-Archivos Latinoamericanos de Nutricion = Arch. Latinoam. Nutr.
-Archivos Medicos Panamenos = Arch. Med. Panamenos
-Archivos de Biologia Andina = Arch. Biol. Andina
-Archivos de Biologia y Medicina Experimentales = Arch. Biol. Med. Exp. (Santiago)
-Archivos de Bronconeumologia = Arch. Bronconeumol.
-Archivos de Cardiologia de Mexico = Arch. Cardiol. Mex.
-Archivos de Enfermedades del Corazon y Vasos = Arch. Enferm. Coraz. Vasos
-Archivos de Farmacologia y Toxicologia = Arch. Farmacol. Toxicol.
-Archivos de Histologia Normal y Patologica. = Arch. Histol. Norm. Patol.
-Archivos de Investigacion Medica = Arch. Invest. Med. (Mex.)
-Archivos de Neurobiologia = Arch. Neurobiol. (Madr.)
-Archivos de Odonto Estomatologia = Arch. Odonto Estomatol.
-Archivos de Oftalmologia de Buenos Aires = Arch. Oftalmol. B. Aires
-Archivos de Pediatria del Uruguay = Arch. Pediatr. Urug.
-Archivos de la Fundacion Roux-Ocefa = Arch. Fund. Roux. Ocefa
-Archivos del Colegio Medico de El Salvador = Arch. Col. Med. El Salv.
-Archivos del Instituto de Biologia Andina = Arch. Inst. Biol. Andina
-Archivos del Instituto de Cardiologia de Mexico = Arch. Inst. Cardiol. Mex.
-Archivos del Instituto de Farmacologia Experimental = Arch. Inst. Farmacol. Exp. (Madr.)
-Archivum Chirurgicum Neerlandicum = Arch. Chir. Neerl.
-Archivum Combustionis=Arch. Combust.;ACOMEO;Q
-Archivum Histologicum Japonicum = Arch. Histol. Jpn.
-Archivum Immunologiae et Therapiae Experimentalis = Arch. Immunol. Ther. Exp. (Warsz.)
-Archivum Veterinarium Polonicum = Arch. Vet. Pol.
-Archiwum Historii Medycyny = Arch. Hist. Med. (Warsz.)
-Archiwum Historii i Filozofii Medycyny = Arch. Hist. Filoz. Med.
-Arcispedale S. Anna di Ferrara = Arcisp. S. Anna Ferrara
-Arctic Medical Research = Arctic Med. Res.
-Arerugi (Japanese Journal of Allergology) = Arerugi
-Arhiv za Higijenu Rada i Toksikologiju = Arh. Hig. Rada Toksikol.
-Arizona Dental Journal = Ariz. Dent. J.
-Arizona Medicine = Ariz. Med.
-Arizona Nurse = Ariz. Nurse
-Ark-Light Newsletter = Ark. Light Newsl.
-Arkansas Dental Journal = Ark. Dent. J.
-Arkansas Dentistry = Ark. Dent.
-Arkhiv Anatomii, Gistologii i Embriologii = Arkh. Anat. Gistol. Embriol.
-Arkhiv Patologii = Arkh. Patol.
-Arquivo de Patologia = Arq. Patol.
-Arquivo: Orgao da Sociedade Brasileira de Implantologia Bucal = Arquivo
-Arquivos Brasileiros de Cardiologia = Arq. Bras. Cardiol.
-Arquivos Brasileiros de Endocrinologia e Metabologia = Arq. Bras. Endocrinol. Metabol.
-Arquivos Brasileiros de Medicina = Arq. Bras. Med.
-Arquivos Brasileiros de Oftalmologia = Arq. Bras. Oftalmol.
-Arquivos da Faculdade de Higiene e Saude Publica da Universidade de Sao Paulo = Arq. Fac. Hig. Saude Publica Univ. Sao Paulo
-Arquivos de Cirurgia Clinica e Experimental = Arq. Cir. Clin. Exp.
-Arquivos de Gastroenterologia = Arq. Gastroenterol.
-Arquivos de Higiene e Saude Publica = Arq. Hig. Saude Publica
-Arquivos de Neuro-Psiquiatria = Arq. Neuropsiquiatr.
-Arquivos do Centro de Estudos da Faculdade de Odontologia da U.F.M.G. = Arq. Cent. Estud. Fac. Odontol. UFMG. (Belo. Horiz.)
-Arquivos do Centro de Estudos, Curso de Odontologia Universidade Federal de Minas Gerais = Arq. Cent. Estud. Curso Odontol. Univ. Fed. Minas Gerais
-Arquivos do Instituto Biologico = Arq. Inst. Biol. (Sao Paulo)
-Ars Curandi em Odontologia = Ars Curandi Odontol.
-Arteriosclerosis = Arteriosclerosis
-Arteriosclerosis and Thrombosis = Arterioscler. Thromb.
-Arteriosclerosis, Thrombosis, and Vascular Biology = Arterioscler. Thromb. Vasc. Biol.
-Artery = Artery
-Arthritis Care and Research = Arthritis Care Res.
-Arthritis Research = Arthritis Res.
-Arthritis Research and Therapy = Arthritis Res. Ther.
-Arthritis and Rheumatism = Arthritis Rheum.
-Arthroscopy = Arthroscopy
-Articulator = Articulator (Columb.)
-Artificial Cells, Blood Substitutes, and Immobilization Biotechnology = Artif. Cells. Blood Substit. Immobil. Biotechnol.
-Artificial Intelligence in Medicine = Artif. Intell. Med.
-Artificial Life = Artif. Life
-Artificial Limbs = Artif. Limbs
-Artificial Organs = Artif. Organs
-Arukoru Kenkyu-to Yakubutsu Ison (Japanese Journal of Alcohol Studies and Drug Dependence) = Arukoru Kenkyuto Yakubutsu Ison
-Arzneimittel Forschung=Arzneim. Forsch.;ARZNAD;M
-Arzneimittel-Forschung = Arzneimittelforschung.
-Arztliche Forschung = Arztl. Forsch.
-Arztliche Jugendkunde = Arztl. Jugendkd.
-Asepsis = Asepsis
-Asia-Oceania Journal of Obstetrics and Gynaecology = Asia. Oceania J. Obstet. Gynaecol.
-Asia-Pacific Journal of Public Health = Asia. Pac. J. Public Health
-Asian Journal of Aesthetic Dentistry = Asian J. Aesthet. Dent.
-Asian Journal of Andrology = Asian J. Androl.
-Asian Journal of Chemistry=Asian J. Chem.;AJCHEW;Q
-Asian Journal of Infectious Diseases = Asian J. Infect. Dis.
-Asian Pacific Journal of Allergy and Immunology = Asian Pac. J. Allergy Immunol.
-Asian Pacific Journal of Cancer Prevention = Asian Pac. J. Cancer Prev.
-Aspen Emphysema Conference = Aspen Emphysema Conf.
-Aspen's Advisor for Nurse Executives = Aspens Advis. Nurse Exec.
-Assay and Drug Development Technologies = Assay Drug Dev. Technol.
-Assertive Nurse = Assertive Nurse
-Assessment = Assessment
-Assistive Technology = Assist. Technol.
-Association Management = Assoc. Manage.
-Association and Society Manager = Assoc. Soc. Manager
-Asthetische Medizin = Asthet. Med. (Berl.)
-Astrobiology = Astrobiology
-Atencion Primaria = Aten. Primaria
-Ateneo Parmense. Acta Bio-Medica = Ateneo Parmense. Acta Biomed.
-Ateneo Parmense. Sezione I, Acta Bio-Medica = Ateneo Parmense. [1]
-Atherosclerosis = Atherosclerosis
-Atherosclerosis (Amsterdam, Netherlands)=Atherosclerosis (Amsterdam, Neth.);ATHSBL;M
-Atherosclerosis. Supplements = Atheroscler. Suppl.
-Atlas de Radiologie Clinique de la Presse Medicale = Atlas Radiol. Clin. Presse Med.
-Atlas of the Oral and Maxillofacial Surgery Clinics of North America = Atlas Oral Maxillofac. Surg. Clin. North Am.
-Atmosphere: Atmosphere—Ocean = Atmos.—Ocean
-Atmospheric Chemistry and Physics=Atmos. Chem. Phys.;ACPTCE;12/YR
-Atmospheric Environment = Atmos. Environ.
-Atmospheric Research = Atmos. Res.
-Atmósphera = Atmósphera
-Atomic Energy (New York, NY, United States)=At. Energy (N. Y., NY, U. S.);AENYEZ;M
-Atomic Energy Review = At. Energy Rev.
-Atomic Spectroscopy=At. Spectrosc.;ASPND7;BM
-Attachment and Human Development = Attach. Hum. Dev.
-Atti dell'Accademia dei Fisiocritici in Siena = Atti Accad. Fisiocrit. Siena
-Atti della Accademia Medica Lombarda = Atti Accad. Med. Lomb.
-Atti della Accademia dei Fisiocritici in Siena. Sezione Medico-Fisica = Atti Accad. Fisiocrit. Siena. [Med. Fis.]
-Atti della Societa Italiana di Cardiologia = Atti Soc. Ital. Cardiol.
-Atti e Memorie della Accademia di Storia dell'Arte Sanitaria = Atti Mem. Accad. Stor. Arte Sanit.
-Attualita Dentale = Attual. Dent.
-Attualita di Ostetricia e Ginecologia = Attual. Ostet. Ginecol.
-Audiology = Audiology
-Audiology and Neuro-Otology = Audiol. Neurootol.
-Auris, Nasus, Larynx = Auris. Nasus. Larynx
-Australasian Annals of Medicine = Australas. Ann. Med.
-Australasian Biotechnology = Australas. Biotechnol.
-Australasian Journal of Dermatology = Australas. J. Dermatol.
-Australasian Nurses Journal = Australas. Nurses J.
-Australasian Physical and Engineering Sciences in Medicine = Australas. Phys. Eng. Sci. Med.
-Australasian Radiology = Australas. Radiol.
-Australian Clinical Review = Aust. Clin. Rev.
-Australian Critical Care = Aust. Crit. Care
-Australian Dental Journal = Aust. Dent. J.
-Australian Dental Practice = Aust. Dent. Pract.
-Australian Family Physician = Aust. Fam. Physician
-Australian Health Review = Aust. Health Rev.
-Australian Hospital = Aust. Hosp.
-Australian Journal of Advanced Nursing = Aust. J. Adv. Nurs.
-Australian Journal of Agricultural Research = Aust. J. Agric. Res.
-Australian Journal of Biological Sciences = Aust. J. Biol. Sci.
-Australian Journal of Biotechnology = Aust. J. Biotechnol.
-Australian Journal of Chemistry=Aust. J. Chem.;AJCHAS;M
-Australian Journal of Experimental Biology and Medical Science = Aust. J. Exp. Biol. Med. Sci.
-Australian Journal of Ophthalmology = Aust. J. Ophthalmol.
-Australian Journal of Public Health = Aust. J. Public Health
-Australian Journal of Rural Health = Aust. J. Rural Health
-Australian Journal of Science and Medicine in Sport = Aust. J. Sci. Med. Sport
-Australian Journal of Zoology = Aust. J. Zool.
-Australian Medical Record Journal = Aust. Med. Rec. J.
-Australian Meteorological Magazine = Aust. Meteor. Mag.
-Australian Nurses' Journal = Aust. Nurses J.
-Australian Nursing Journal = Aust. Nurs. J.
-Australian Orthodontic Journal = Aust. Orthod. J.
-Australian Paediatric Journal = Aust. Paediatr. J.
-Australian Prosthodontic Journal = Aust. Prosthodont. J.
-Australian Prosthodontic Society Bulletin = Aust. Prosthodont. Soc. Bull.
-Australian Society of Prosthodontists Bulletin = Aust. Soc. Prosthodontists Bull.
-Australian Veterinary Journal = Aust. Vet. J.
-Australian and New Zealand Journal of Medicine = Aust. N. Z. J. Med.
-Australian and New Zealand Journal of Mental Health Nursing = Aust. N. Z. J. Ment. Health Nurs.
-Australian and New Zealand Journal of Obstetrics and Gynaecology = Aust. N. Z. J. Obstet. Gynaecol.
-Australian and New Zealand Journal of Obstetrics and Gynaecology. Supplement = Aust. N. Z. J. Obstet. Gynaecol. Suppl.
-Australian and New Zealand Journal of Ophthalmology = Aust. N. Z. J. Ophthalmol.
-Australian and New Zealand Journal of Psychiatry = Aust. N. Z. J. Psychiatry
-Australian and New Zealand Journal of Public Health = Aust. N. Z. J. Public Health
-Australian and New Zealand Journal of Surgery = Aust. N. Z. J. Surg.
-Autism = Autism
-Autoimmunity = Autoimmunity
-Autoimmunity Reviews = Autoimmun. Rev.
-Autonomic & Autacoid Pharmacology=Auton. Autacoid Pharmacol.;AAPUC3;Q
-Autonomic Neuroscience = Auton. Neurosci.
-Autonomic and Autacoid Pharmacology = Auton. Autacoid Pharmacol.
-Autophagy = Autophagy
-Auxiliaire = Auxiliaire
-Avances en Odontoestomatologia = Av. Odontoestomatol.
-Avances en Periodoncia = Av. Periodoncia
-Aviakosmicheskaia i Ekologicheskaia Meditsina = Aviakosm. Ekolog. Med.
-Avian Diseases = Avian Dis.
-Aviation Space and Environmental Medicine = Aviat. Space Environ. Med.
-Axone = Axone
-Azerbaidzhanskii Khimicheskii Zhurnal=Azerb. Khim. Zh.;AZKZAU;Q
-B-ENT = B-ENT
-BJOG = BJOG
-BJR Supplement = BJR Suppl.
-BJU International = BJU Int.
-BMC Biology = BMC Biol.
-BMC Biotechnology = BMC Biotechnol.
-BMC Cancer = BMC Cancer
-BMC Cardiovascular Disorders = BMC Cardiovasc. Disord.
-BMC Cell Biology = BMC Cell Biol.
-BMC Clinical Pharmacology = BMC Clin. Pharmacol.
-BMC Complementary and Alternative Medicine = BMC Complement. Altern. Med.
-BMC Dermatology = BMC Dermatol.
-BMC Developmental Biology = BMC Dev. Biol.
-BMC Ecology = BMC Ecol.
-BMC Evolutionary Biology = BMC Evol. Biol.
-BMC Gastroenterology = BMC Gastroenterol.
-BMC Geriatrics = BMC Geriatr.
-BMC Health Services Research = BMC Health Serv. Res.
-BMC Infectious Diseases = BMC Infect. Dis.
-BMC Medical Education = BMC Med. Educ.
-BMC Medical Informatics and Decision Making = BMC Med. Inform. Decis. Mak.
-BMC Medical Research Methodology = BMC Med. Res. Methodol.
-BMC Medicine = BMC Med.
-BMC Microbiology = BMC Microbiol.
-BMC Neurology = BMC Neurol.
-BMC Ophthalmology = BMC Ophthalmol.
-BMC Pediatrics = BMC Pediatr.
-BMC Pharmacology = BMC Pharmacol.
-BMC Physiology = BMC Physiol.
-BMC Plant Biology = BMC Plant Biol.
-BMC Psychiatry = BMC Psychiatry
-BMC Public Health = BMC Public Health
-BMC Pulmonary Medicine = BMC Pulm. Med.
-BMC Structural Biology = BMC Struct. Biol.
-BMC Surgery = BMC Surg.
-BMC Urology = BMC Urol.
-BMJ: British Medical Journal = BMJ
-BMQ: The Boston Medical Quarterly = BMQ.
-BNWL Reports = BNWL Rep.
-BSCS Pamphlets = BSCS Pam.
-BTTA Review = BTTA Rev.
-BZB: Bayerisches Zahnarzteblatt, mit Mitteilungen d. Kassenzahnarztlichen Vereinigung Bayerns = BZB Bayer. Zahnarztebl. Mitt. Kassenzahnarztl. Ver. Bayerns
-Bacteriologia, Virusologia, Parazitologia, Epidemiologia = Bacteriol. Virusol. Parazitol. Epidemiol.
-Bacteriological Reviews = Bacteriol. Rev.
-Bailliere's Best Practice and Research. Clinical Endocrinology and Metabolism = Baillieres Best Pract. Res. Clin. Endocrinol. Metab.
-Bailliere's Best Practice and Research. Clinical Gastroenterology = Baillieres Best Pract. Res. Clin. Gastroenterol.
-Bailliere's Best Practice and Research. Clinical Haematology = Baillieres Best Pract. Res. Clin. Haematol.
-Bailliere's Best Practice and Research. Clinical Obstetrics and Gynaecology = Baillieres Best Pract. Res. Clin. Obstet. Gynaecol.
-Bailliere's Best Practice and Research. Clinical Rheumatology = Baillieres Best Pract. Res. Clin. Rheumatol.
-Bailliere's Clinical Endocrinology and Metabolism = Baillieres Clin. Endocrinol. Metab.
-Bailliere's Clinical Gastroenterology = Baillieres Clin. Gastroenterol.
-Bailliere's Clinical Haematology = Baillieres Clin. Haematol.
-Bailliere's Clinical Neurology = Baillieres Clin. Neurol.
-Bailliere's Clinical Obstetrics and Gynaecology = Baillieres Clin. Obstet. Gynaecol.
-Bailliere's Clinical Rheumatology = Baillieres Clin. Rheumatol.
-Balance = Balance
-Bangladesh Medical Research Council Bulletin = Bangladesh Med. Res. Counc. Bull.
-Barbados Nursing Journal = Barbados Nurs. J.
-Barron's = Barrons
-Basal Facts = Basal Facts
-Basic & Clinical Pharmacology & Toxicology=Basic Clin. Pharmacol. Toxicol.;BCPTBO;M
-Basic Life Sciences = Basic Life Sci.
-Basic Research in Cardiology = Basic Res. Cardiol.
-Basic and Applied Histochemistry = Basic Appl. Histochem.
-Basic and Clinical Pharmacology and Toxicology = Basic Clin. Pharmacol. Toxicol.
-Baylor Dental Journal = Baylor Dent. J.
-Baylor Nursing Educator = Baylor Nurs. Educ.
-Bedside Nurse = Bedside Nurse
-Begg Journal of Orthodontic Theory and Treatment = Begg J. Orthod. Theory Treat.
-Beginnings = Beginnings
-Behavior Genetics = Behav. Genet.
-Behavior Modification = Behav. Modif.
-Behavior Research Methods = Behav. Res. Methods
-Behavioral Biology = Behav. Biol.
-Behavioral Healthcare Tomorrow = Behav. Healthc. Tomorrow
-Behavioral Medicine = Behav. Med.
-Behavioral Neuropsychiatry = Behav. Neuropsychiatry
-Behavioral Neuroscience = Behav. Neurosci.
-Behavioral Science = Behav. Sci.
-Behavioral Sciences and the Law = Behav. Sci. Law
-Behavioral Sleep Medicine = Behav. Sleep. Med.
-Behavioral and Brain Sciences = Behav. Brain Sci.
-Behavioral and Cognitive Neuroscience Reviews = Behav. Cogn. Neurosci. Rev.
-Behavioral and Neural Biology = Behav. Neural Biol.
-Behaviour = Behaviour
-Behaviour Research and Therapy = Behav. Res. Ther.
-Behavioural Brain Research = Behav. Brain Res.
-Behavioural Pharmacology = Behav. Pharmacol.
-Behring Institute Mitteilungen = Behring Inst. Mitt.
-Beijing Da Xue Xue Bao. Yi Xue Ban (Journal of Peking University. Health Sciences) = Beijing Da Xue Xue Bao
-Beilstein Journal of Organic Chemistry=Beilstein J. Org. Chem.;BJOCBH;IRR
-Beitraege zur Physik der Atmosphaere = Beitr. Phys. Atmos.
-Beitrage zu Infusionstherapie und Klinische Ernahrung = Beitr. Infusionther. Klin. Ernahr.
-Beitrage zur Gerichtlichen Medizin = Beitr. Gerichtl. Med.
-Beitrage zur Hygiene und Epidemiologie = Beitr. Hyg. Epidemiol.
-Beitrage zur Infusionstherapie = Beitr. Infusionsther.
-Beitrage zur Infusionstherapie und Transfusionsmedizin = Beitr. Infusionsther. Transfusionsmed.
-Beitrage zur Klinik und Erforschung der Tuberkulose und der Lungenkrankheiten = Beitr. Klin. Erforsch. Tuberk. Lungenkr.
-Beitrage zur Klinischen Neurologie und Psychiatrie = Beitr. Klin. Neurol. Psychiatr.
-Beitrage zur Krebsforschung = Beitr. Krebsforsch.
-Beitrage zur Neurochirurgie = Beitr. Neurochir.
-Beitrage zur Orthopadie und Traumatologie = Beitr. Orthop. Traumatol.
-Beitrage zur Pathologie = Beitr. Pathol.
-Beitrage zur Pathologischen Anatomie und zur Allgemeinen Pathologie = Beitr. Pathol. Anat.
-Beitrage zur Rheumatologie = Beitr. Rheumatol.
-Beitrage zur Sexualforschung = Beitr. Sexualforsch.
-Beitrage zur Silikose-Forschung = Beitr. Silikoseforsch.
-Beitrage zur Silikose-Forschung. Pneumokoniose = Beitr. Silikoseforsch. Pneumokoniose
-Beitrage zur Tropischen Landwirtschaft und Veterinarmedizin = Beitr. Trop. Landwirtsch. Veterinarmed.
-Belgisch Tijdschrift voor Geneeskunde = Belg. Tijdschr. Geneesk.
-Bender's Health Care Law Monthly = Benders Health Care Law Mon.
-Benefits Quarterly = Benefits Q.
-Bericht uber die Zusammenkunft der Deutschen Ophthalmologischen Gesellschaft = Ber. Zusammenkunft Dtsch. Ophthalmol. Ges.
-Berichte aus der Bonner Universitatsklinik und Poliklinik fur Mund-, Zahn- und Kieferkrankheiten = Ber. Bonn. Univ. Poliklin. Mund. Zahn. Kieferkr.
-Berita Jururawat = Berita Jururawat
-Berliner und Munchener Tierarztliche Wochenschrift = Berl. Munch. Tierarztl. Wochenschr.
-Berufs-Dermatosen = Berufsdermatosen.
-Best Practice and Research. Clinical Anaesthesiology = Best Pract. Res. Clin. Anaesthesiol.
-Best Practice and Research. Clinical Endocrinology and Metabolism = Best Pract. Res. Clin. Endocrinol. Metab.
-Best Practice and Research. Clinical Gastroenterology = Best Pract. Res. Clin. Gastroenterol.
-Best Practice and Research. Clinical Haematology = Best Pract. Res. Clin. Haematol.
-Best Practice and Research. Clinical Obstetrics and Gynaecology = Best Pract. Res. Clin. Obstet. Gynaecol.
-Best Practice and Research. Clinical Rheumatology = Best Pract. Res. Clin. Rheumatol.
-Best Practices and Benchmarking in Healthcare = Best Pract. Benchmarking Healthc.
-Best's Review. Life/Health Insurance Edition = Bests Rev. Life. Health Insur. Ed.
-Bibliotek for Laeger = Bibl. Laeger
-Bibliotheca Anatomica = Bibl. Anat.
-Bibliotheca Cardiologica = Bibl. Cardiol.
-Bibliotheca Gastroenterologica = Bibl. Gastroenterol.
-Bibliotheca Gynaecologica = Bibl. Gynaecol.
-Bibliotheca Haematologica = Bibl. Haematol.
-Bibliotheca Microbiologica = Bibl. Microbiol.
-Bibliotheca Nutritio et Dieta = Bibl. Nutr. Dieta
-Bibliotheca Ophthalmologica = Bibl. Ophthalmol.
-Bibliotheca Paediatrica = Bibl. Paediatr.
-Bibliotheca Psychiatrica = Bibl. Psychiatr.
-Bibliotheca Psychiatrica et Neurologica = Bibl. Psychiatr. Neurol.
-Bibliotheca Radiologica = Bibl. Radiol.
-Bibliotheca Tuberculosea = Bibl. Tuberc.
-Biken Journal = Biken J.
-Bildgebung = Bildgebung
-Bilten Mednarodne Federacije Zobotehnikov (Bulletin of the International Federation of Dental Technicians) = Bilt. Mednar. Fed. Zob. Teh.
-Bilten Udruzenja Ortodonata Jugoslavije = Bilt. Udruz. Ortodonata Jugosl.
-Bilten za Hematologiju i Transfuziju = Bilt. Hematol. Transfuz.
-Binocular Vision and Strabismus Quarterly = Binocul. Vis. Strabismus Q.
-Bio-Medical Materials and Engineering = Biomed. Mater. Eng.
-Bio/Medical Instrumentation = Biomed. Instrum.
-Bio/Technology = Biotechnology. (N. Y.)
-BioDrugs = BioDrugs
-BioFactors=BioFactors;BIFAEU;12/YR
-BioMetals=BioMetals;BOMEEH;BM
-BioTechniques=BioTechniques;BTNQDO;M
-Biocatalysis and Biotransformation=Biocatal. Biotransform.;BOBOEQ;BM
-Biocell = Biocell
-Biochemical Genetics = Biochem. Genet.
-Biochemical Journal = Biochem. J.
-Biochemical Medicine = Biochem. Med.
-Biochemical Medicine and Metabolic Biology = Biochem. Med. Metab. Biol.
-Biochemical Pharmacology = Biochem. Pharmacol.
-Biochemical Society Symposia = Biochem. Soc. Symp.
-Biochemical Society Transactions = Biochem. Soc. Trans.
-Biochemical Systematics and Ecology=Biochem. Syst. Ecol.;BSECBU;M
-Biochemical and Biophysical Research Communications = Biochem. Biophys. Res. Commun.
-Biochemical and Molecular Medicine = Biochem. Mol. Med.
-Biochemische Zeitschrift = Biochem. Z.
-Biochemistry = Biochemistry (Mosc.)
-Biochemistry (Moscow)=Biochemistry (Moscow);BIORAK;M
-Biochemistry International = Biochem. Int.
-Biochemistry and Cell Biology = Biochem. Cell Biol.
-Biochemistry and Experimental Biology = Biochem. Exp. Biol.
-Biochemistry and Molecular Biology Education=Biochem. Mol. Biol. Educ.;BMBECE;BM
-Biochemistry and Molecular Biology International = Biochem. Mol. Biol. Int.
-Biochimica et Biophysica Acta = Biochim. Biophys. Acta
-Biochimica et Biophysica Acta, Bioenergetics=Biochim. Biophys. Acta, Bioenerg.;BBBEB4;15/YR
-Biochimica et Biophysica Acta, Biomembranes=Biochim. Biophys. Acta, Biomembr.;BBBMBS;20/YR
-Biochimica et Biophysica Acta, Biophysics Including Photosynthesis=Biochim. Biophys. Acta, Biophys. Incl. Photosynth.;BBABER;
-Biochimica et Biophysica Acta, Enzymology=Biochim. Biophys. Acta, Enzymol.;BBEZAD;
-Biochimica et Biophysica Acta, Enzymology and Biological Oxidation=Biochim. Biophys. Acta, Enzymol. Biol. Oxid.;BBAECY;
-Biochimica et Biophysica Acta, Gene Structure and Expression=Biochim. Biophys. Acta, Gene Struct. Expression;BBGSD5;18/YR
-Biochimica et Biophysica Acta, General Subjects=Biochim. Biophys. Acta, Gen. Subj.;BBGSB3;18/YR
-Biochimica et Biophysica Acta, Lipids and Lipid Metabolism=Biochim. Biophys. Acta, Lipids Lipid Metab.;BBLLA6;18/YR
-Biochimica et Biophysica Acta, Molecular Basis of Disease=Biochim. Biophys. Acta, Mol. Basis Dis.;BBADEX;9/YR
-Biochimica et Biophysica Acta, Molecular Cell Research=Biochim. Biophys. Acta, Mol. Cell Res.;BBAMCO;15/YR
-Biochimica et Biophysica Acta, Molecular and Cell Biology of Lipids=Biochim. Biophys. Acta, Mol. Cell Biol. Lipids;BBMLFG;18/YR
-Biochimica et Biophysica Acta, Mucoproteins and Mucopolysaccharides=Biochim. Biophys. Acta, Mucoproteins Mucopolysaccharides;BBAMFR;
-Biochimica et Biophysica Acta, Protein Structure=Biochim. Biophys. Acta, Protein Struct.;BBPTBH;
-Biochimica et Biophysica Acta, Protein Structure and Molecular Enzymology=Biochim. Biophys. Acta, Protein Struct. Mol. Enzymol.;BBAEDZ;16/YR
-Biochimica et Biophysica Acta, Proteins and Proteomics=Biochim. Biophys. Acta, Proteins Proteomics;BBAPBW;16/YR
-Biochimica et Biophysica Acta, Reviews on Bioenergetics=Biochim. Biophys. Acta, Rev. Bioenerg.;BRBECF;
-Biochimica et Biophysica Acta, Reviews on Biomembranes=Biochim. Biophys. Acta, Rev. Biomembr.;BRBMC5;3/YR
-Biochimica et Biophysica Acta, Reviews on Cancer=Biochim. Biophys. Acta, Rev. Cancer;BBACEU;4/YR
-Biochimica et Biophysica Acta, Specialized Section on Biophysical Subjects=Biochim. Biophys. Acta, Spec. Sect. Biophys. Subj.;BBASEA;
-Biochimica et Biophysica Acta, Specialized Section on Enzymological Subjects=Biochim. Biophys. Acta, Spec. Sect. Enzymol. Subj.;BBASD9;
-Biochimica et Biophysica Acta, Specialized Section on Lipids and Related Subjects=Biochim. Biophys. Acta, Spec. Sect. Lipids Relat. Subj.;BBASC8;
-Biochimie = Biochimie
-Bioconjugate Chemistry = Bioconjug. Chem.
-Biodegradation = Biodegradation
-Biodynamica = Biodynamica
-Bioelectrochemistry = Bioelectrochemistry
-Bioelectrochemistry and Bioenergetics = Bioelectrochem. Bioenerg.
-Bioelectromagnetics = Bioelectromagnetics
-Bioessays = Bioessays
-Bioethics Quarterly = Bioethics Q.
-Biofactors = Biofactors
-Biofeedback and Self Regulation = Biofeedback Self Regul.
-Biofizika = Biofizika
-Biogenic Amines=Biog. Amines;BIAME7;6/YR
-Biogerontology = Biogerontology
-Bioinformatics = Bioinformatics
-Bioinorganic Chemistry = Bioinorg. Chem.
-Bioinorganic Chemistry and Applications=Bioinorg. Chem. Appl.;BCAIAH;4/YR
-Biokhimiia = Biokhimiia
-Biologia = Biologia (Bratisl.)
-Biologia Neonatorum = Biol. Neonat.
-Biologica = Biologica (Santiago).
-Biologica Latina = Biol. Lat.
-Biological & Pharmaceutical Bulletin=Biol. Pharm. Bull.;BPBLEO;M
-Biological Bulletin = Biol. Bull.
-Biological Chemistry = Biol. Chem.
-Biological Chemistry Hoppe-Seyler = Biol. Chem. Hoppe. Seyler
-Biological Cybernetics = Biol. Cybern.
-Biological Journal of the Linnean Society of London = Biol. J. Linn. Soc. Lond.
-Biological Mass Spectrometry = Biol. Mass Spectrom.
-Biological Psychiatry = Biol. Psychiatry
-Biological Psychology = Biol. Psychol.
-Biological Research = Biol. Res.
-Biological Research for Nursing = Biol. Res. Nurs.
-Biological Research in Pregnancy and Perinatology = Biol. Res. Pregnancy Perinatol.
-Biological Reviews of the Cambridge Philosophical Society = Biol. Rev. Camb. Philos. Soc.
-Biological Signals = Biol. Signals
-Biological Signals and Receptors = Biol. Signals Recept.
-Biological Structures and Morphogenesis = Biol. Struct. Morphog.
-Biological Trace Element Research = Biol. Trace Elem. Res.
-Biological and Pharmaceutical Bulletin = Biol. Pharm. Bull.
-Biologicals = Biologicals
-Biologicheskie Membrany=Biol. Membr.;BIMEE9;BM
-Biologicheskie Nauki = Biol. Nauki
-Biologie Cellulaire = Biol. Cell.
-Biologie Medicale = Biol. Med. (Paris)
-Biologie et Gastro-Enterologie = Biol. Gastroenterol. (Paris)
-Biology Bulletin of the Academy of Sciences of the USSR = Biol. Bull. Acad. Sci. USSR
-Biology of Blood and Marrow Transplantation = Biol. Blood Marrow Transplant.
-Biology of Metals = Biol. Met.
-Biology of Reproduction = Biol. Reprod.
-Biology of the Cell = Biol. Cell
-Biology of the Neonate = Biol. Neonate
-Biomacromolecules = Biomacromolecules
-Biomarkers = Biomarkers
-Biomaterials = Biomaterials
-Biomaterials, Artificial Cells, and Artificial Organs = Biomater. Artif. Cells. Artif. Organs
-Biomaterials, Artificial Cells, and Immobilization Biotechnology = Biomater. Artif. Cells. Immobilization Biotechnol.
-Biomaterials, Medical Devices and Artificial Organs = Biomater. Med. Devices Artif. Organs
-Biomechanics and Modeling in Mechanobiology = Biomech. Model. Mechanobiol.
-Biomedica Biochimica Acta = Biomed. Biochim. Acta
-Biomedical Chromatography = Biomed. Chromatogr.
-Biomedical Communications = Biomed. Commun.
-Biomedical Engineering = Biomed. Eng.
-Biomedical Engineering Online = Biomed. Eng. Online
-Biomedical Instrumentation and Technology = Biomed. Instrum. Technol.
-Biomedical Mass Spectrometry = Biomed. Mass Spectrom.
-Biomedical Peptides, Proteins and Nucleic Acids = Biomed. Pept. Proteins Nucleic Acids
-Biomedical Research=Biomed. Res.;BRESD5;BM
-Biomedical Science = Biomed. Sci.
-Biomedical Science and Technology = Biomed. Sci. Technol.
-Biomedical Sciences Instrumentation = Biomed. Sci. Instrum.
-Biomedical and Environmental Mass Spectrometry = Biomed. Environ. Mass Spectrom.
-Biomedical and Environmental Sciences = Biomed. Environ. Sci.
-Biomedicine = Biomedicine
-Biomedicine and Pharmacotherapy = Biomed. Pharmacother.
-Biomeditsinskaya Khimiya=Biomed. Khim.;BKIHA8;BM
-Biomedizinische Technik (Biomedical Engineering) = Biomed. Tech. (Berl)
-Biomembranes = Biomembranes
-Biometals = Biometals
-Biometrics = Biometrics
-Biometrika = Biometrika
-Biometrische Zeitschrift = Biom. Z.
-Biomolecular Engineering = Biomol. Eng.
-Bioorganic & Medicinal Chemistry=Bioorg. Med. Chem.;BMECEP;SM
-Bioorganic & Medicinal Chemistry Letters=Bioorg. Med. Chem. Lett.;BMCLE8;SM
-Bioorganic Chemistry=Bioorg. Chem.;BOCMBM;BM
-Bioorganic and Medicinal Chemistry = Bioorg. Med. Chem.
-Bioorganic and Medicinal Chemistry Letters = Bioorg. Med. Chem. Lett.
-Bioorganicheskaia Khimiia = Bioorg. Khim.
-Biopharmaceutics & Drug Disposition=Biopharm. Drug Dispos.;BDDID8;9/YR
-Biopharmaceutics and Drug Disposition = Biopharm. Drug Dispos.
-Biophysical Chemistry = Biophys. Chem.
-Biophysical Journal = Biophys. J.
-Biophysics of Structure and Mechanism = Biophys. Struct. Mech.
-Biophysik = Biophysik
-Biopolymers = Biopolymers
-Bioprocess Technology = Bioprocess Technol.
-Bioprocess and Biosystems Engineering = Bioprocess Biosyst. Eng.
-Bioresource Technology=Bioresour. Technol.;BIRTEB;18/YR
-Biorheology = Biorheology
-Biorheology. Supplement = Biorheology. Suppl.
-Bioscience = Bioscience
-Bioscience Reports = Biosci. Rep.
-Bioscience, Biotechnology, and Biochemistry = Biosci. Biotechnol. Biochem.
-Biosecurity and Bioterrorism = Biosecur. Bioterror.
-Biosensors = Biosensors
-Biosensors & Bioelectronics=Biosens. Bioelectron.;BBIOE4;M
-Biosensors and Bioelectronics = Biosens. Bioelectron.
-Bioseparation = Bioseparation
-Biospectroscopy = Biospectroscopy
-Biosystems = Biosystems
-Biotechnic and Histochemistry = Biotech. Histochem.
-Biotechniques = Biotechniques
-Biotechnology = Biotechnology
-Biotechnology Annual Review = Biotechnol. Annu. Rev.
-Biotechnology Journal = Biotechnol. J.
-Biotechnology Letters=Biotechnol. Lett.;BILED3;SM
-Biotechnology Progress = Biotechnol. Prog.
-Biotechnology Therapeutics = Biotechnol. Ther.
-Biotechnology and Applied Biochemistry = Biotechnol. Appl. Biochem.
-Biotechnology and Bioengineering = Biotechnol. Bioeng.
-Biotechnology and Bioengineering Symposium = Biotechnol. Bioeng. Symp.
-Biotechnology and Bioprocess Engineering=Biotechnol. Bioprocess Eng.;BBEIAU;BM
-Biotechnology and Genetic Engineering Reviews = Biotechnol. Genet. Eng. Rev.
-Biotelemetry = Biotelemetry
-Biotelemetry and Patient Monitoring = Biotelem. Patient Monit.
-Biotherapy = Biotherapy
-Bipolar Disorders = Bipolar Disord.
-Birth = Birth
-Birth Defects Original Article Series = Birth Defects Orig. Artic. Ser.
-Birth Defects Research, Part A: Clinical and Molecular Teratology=Birth Defects Res., Part A;BDRPBT;M
-Birth Defects Research, Part B: Developmental and Reproductive Toxicology=Birth Defects Res., Part B;BDRPCU;BM
-Birth Defects Research, Part C: Embryo Today--Reviews=Birth Defects Res., Part C;BDRPDV;Q
-Birth Defects Research. Part A, Clinical and Molecular Teratology = Birt. Defects Res. A. Clin. Mol. Teratol.
-Birth Defects Research. Part B, Developmental and Reproductive Toxicology = Birth Defects Res. B. Dev. Reprod. Toxicol.
-Birth Defects Research. Part C, Embryo Today = Birth Defects Res. C. Embryo Today
-Birth Gazette = Birth Gaz.
-Bitamin=Bitamin;BTMNA7;M
-Biuletyn Instytutu Medycyny Morskiej w Gdansku = Biul. Inst. Med. Morsk. Gdansk.
-Biulleten Eksperimentalnoi Biologii i Meditsiny = Biull. Eksp. Biol. Med.
-Biulleten Vsesoiuznogo Kardiologicheskogo Nauchnogo Tsentra AMN SSSR = Biull. Vsesoiuznogo Kardiol. Nauchn. Tsentra AMN SSSR
-Blatter fur Zahnheilkunde = Bl. Zahnheilkd.
-Blood = Blood
-Blood Cells = Blood Cells
-Blood Cells, Molecules, and Diseases = Blood Cells. Mol. Dis.
-Blood Coagulation and Fibrinolysis = Blood Coagul. Fibrinolysis
-Blood Pressure = Blood Press.
-Blood Pressure Monitoring = Blood Press. Monit.
-Blood Pressure. Supplement = Blood Press. Suppl.
-Blood Purification = Blood Purif.
-Blood Reviews = Blood Rev.
-Blood Vessels = Blood Vessels
-Blue Cross Association Research Series = Blue Cross Assoc. Res. Ser.
-Blut = Blut
-Blutalkohol = Blutalkohol
-Boletim da Divisao Nacional de Dermatologia Sanitaria = Bol. Div. Nac. Dermatol. Sanit.
-Boletim da Equipe de Odontologia Sanitaria = Bol. Equipe Odontol. Sanit.
-Boletim da Faculdade de Farmacia e Odontologia de Ribeirao Preto = Bol. Fac. Farm. Odontol. Ribeirao Preto
-Boletim de Dentistica Operatoria = Bol. Dent. Oper.
-Boletim de Materias Dentarios = Bol. Mat. Dent.
-Boletim do Instituto de Puericultura e Pediatria Martagao Gesteira = Bol. Inst. Pueric. Martagao Gesteira
-Boletim do Sanatorio Sao Lucas = Bol. Sanat. Sao Lucas
-Boletim do Servico de Odontologia Sanitaria da Secretaria da Saude do Rio Grande do Sul = Bol. Serv. Odontol. Sanit. (Porto Alegre)
-Boletim, Faculdade de Odontologia de Piracicaba = Bol. Fac. Odontol. Piracicaba
-Boletin Chileno de Parasitologia = Bol. Chil. Parasitol.
-Boletin Dental Uruguayo = Bol. Dent. Urug.
-Boletin Medico del Hospital Infantil de Mexico = Bol. Med. Hosp. Infant. Mex.
-Boletin Odontologico = Bol. Odontol. (B. Aires)
-Boletin Odontologico Mexicano = Bol. Odontol. Mex.
-Boletin de Estudios Medicos y Biologicos = Bol. Estud. Med. Biol.
-Boletin de Informacion Dental = Bol. Inf. Dent. (Madr.)
-Boletin de Informacion, Ilustre Colegio Oficial de Odontologos y Estomatologos, 2a Region, Cataluna = Bol. Inf. Col. Odontol. Estomatol. (Barc.)
-Boletin de Odontologia = Bol. Odontol. (Bogota)
-Boletin de Protesis = Bol. Protes.
-Boletin de la AAON = Bol. AAON
-Boletin de la Asociacion Venezolana de Enfermeras Profesionales = Bol. Asoc. Venez. Enferm. Prof.
-Boletin de la Direccion General de Odontologia = Bol. Dir. Gen. Odontol. (Santa Fe)
-Boletin de la Oficina Sanitaria Panamericana = Bol. Oficina Sanit. Panam.
-Boletin de la Sociedad Dental de Guatemala = Bol. Soc. Dent. Guatem.
-Boletin de la Sociedad Estomatologica Argentina = Bol. Soc. Estomatol. Argent.
-Boletin del Circulo Argentina de Odontologia = Bol. Circ. Argent. Odontol.
-Boletin del Instituto de Estudios Medicos y Biologicos, Universidad Nacional Autonoma de Mexico = Bol. Inst. Estud. Med. Biol. Univ. Nac. Auton. Mex.
-Boletin, Asociacion Medica de Puerto Rico = Bol. Asoc. Med. P. R.
-Boletin, Colegio de Profesionales de la Enfermeria de Puerto Rico = Bol. Col. Prof. Enferm. P. R.
-Boletines y Trabajos, Sociedad de Cirugia de Buenos Aires = Bol. Trab. Soc. Cir. B. Aires
-Bollettino Chimico Farmaceutico = Boll. Chim. Farm.
-Bollettino Metallografico = Boll. Metallogr.
-Bollettino d'Informazioni della Consociazione Nazionale Infermiere Professionali e Assistenti Sanitaire Visitatrici = Boll. Inf. Consoc. Naz. (Rome)
-Bollettino d'Oculistica = Boll. Ocul.
-Bollettino dell Istituto Sieroterapico Milanese = Boll. Ist. Sieroter. Milan.
-Bollettino della Societa Italiana di Cardiologia = Boll. Soc. Ital. Cardiol.
-Bollettino delle Malattie dell Orecchio, della Gola, del Naso = Boll. Mal. Orecch. Gola. Naso
-Bollettino, Societa Italiana Biologia Sperimentale = Boll. Soc. Ital. Biol. Sper.
-Bollettino, Societa Medico Chirurgica Cremona = Boll. Soc. Med. Chir. Cremona
-Bone = Bone
-Bone Marrow Transplantation = Bone Marrow Transplant.
-Bone and Mineral = Bone Miner.
-Book Supplement to the Journal of Child Psychology and Psychiatry = Book Suppl. J. Child Psychol. Psychiatr.
-Bopuxue Zazhi=Bopuxue Zazhi;BOZAE2;Q
-Bordeaux Chirurgical = Bord. Chir.
-Bordeaux Medical = Bord. Med.
-Borden's Review of Nutrition Research = Bordens Rev. Nutr. Res.
-Bornetandlaegen = Bornetandlaegen
-Boundary-Layer Meteorology = Bound.-Layer Meteor.
-Brachytherapy = Brachytherapy
-Brain = Brain
-Brain Cell Biology = Brain Cell Biol.
-Brain Injury = Brain Inj.
-Brain Pathology = Brain Pathol.
-Brain Research = Brain Res.
-Brain Research Bulletin = Brain Res. Bull.
-Brain Research. Brain Research Protocols = Brain Res. Brain Res. Protoc.
-Brain Research. Brain Research Reviews = Brain Res. Brain Res. Rev.
-Brain Research. Cognitive Brain Research = Brain Res. Cogn. Brain Res.
-Brain Research. Developmental Brain Research = Brain Res. Dev. Brain Res.
-Brain Research. Molecular Brain Research = Brain Res. Mol. Brain Res.
-Brain Structure and Function = Brain Struct. Funct.
-Brain Topography = Brain Topogr.
-Brain Tumor Pathology = Brain Tumor Pathol.
-Brain and Cognition = Brain Cogn.
-Brain and Development = Brain Dev.
-Brain and Language = Brain Lang.
-Brain, Behavior and Evolution = Brain. Behav. Evol.
-Brain, Behavior and Immunity = Brain. Behav. Immun.
-Bratislavske Lekarske Listy = Bratisl. Lek. Listy
-Brazilian Dental Journal = Braz. Dent. J.
-Brazilian Journal of Biology = Braz. J. Biol.
-Brazilian Journal of Infectious Diseases = Braz. J. Infect. Dis.
-Brazilian Journal of Medical and Biological Research = Braz. J. Med. Biol. Res.
-Breast Cancer Research = Breast Cancer Res.
-Breast Cancer Research and Treatment = Breast Cancer Res. Treat.
-Breastfeeding Review = Breastfeed. Rev.
-Briefings in Bioinformatics = Brief. Bioinform.
-Briefings in Functional Genomics and Proteomics = Brief. Funct. Genomic. Proteomic.
-Bristol Medico-Chirurgical Journal = Bristol Med. Chir. J.
-British Dental Journal = Br. Dent. J.
-British Dental Nurses' Journal = Br. Dent. Nurs. J.
-British Dental Surgery Assistant = Br. Dent. Surg. Assist.
-British Heart Journal = Br. Heart J.
-British Homoeopathic Journal = Br. Homeopath. J.
-British Journal of Addiction = Br. J. Addict.
-British Journal of Addiction to Alcohol and Other Drugs = Br. J. Addict. Alcohol Other Drugs
-British Journal of Anaesthesia = Br. J. Anaesth.
-British Journal of Audiology = Br. J. Audiol.
-British Journal of Audiology. Supplement = Br. J. Audiol. Suppl.
-British Journal of Biomedical Science = Br. J. Biomed. Sci.
-British Journal of Cancer = Br. J. Cancer
-British Journal of Cancer. Supplement = Br. J. Cancer. Suppl.
-British Journal of Clinical Pharmacology = Br. J. Clin. Pharmacol.
-British Journal of Clinical Practice = Br. J. Clin. Pract.
-British Journal of Clinical Practice. Symposium Supplement = Br. J. Clin. Pract. Symp. Suppl.
-British Journal of Clinical Psychology = Br. J. Clin. Psychol.
-British Journal of Dermatology = Br. J. Dermatol.
-British Journal of Diseases of the Chest = Br. J. Dis. Chest
-British Journal of Disorders of Communication = Br. J. Disord. Commun.
-British Journal of Educational Psychology = Br. J. Educ. Psychol.
-British Journal of Experimental Pathology = Br. J. Exp. Pathol.
-British Journal of Family Planning = Br. J. Fam. Plann.
-British Journal of General Practice = Br. J. Gen. Pract.
-British Journal of Haematology = Br. J. Haematol.
-British Journal of Hospital Medicine = Br. J. Hosp. Med.
-British Journal of Industrial Medicine = Br. J. Ind. Med.
-British Journal of Mathematical and Statistical Psychology = Br. J. Math. Stat. Psychol.
-British Journal of Medical Education = Br. J. Med. Educ.
-British Journal of Medical Hypnotism = Br. J. Med. Hypn.
-British Journal of Medical Psychology = Br. J. Med. Psychol.
-British Journal of Neurosurgery = Br. J. Neurosurg.
-British Journal of Nursing = Br. J. Nurs.
-British Journal of Nutrition = Br. J. Nutr.
-British Journal of Obstetrics and Gynaecology = Br. J. Obstet. Gynaecol.
-British Journal of Ophthalmology = Br. J. Ophthalmol.
-British Journal of Oral Surgery = Br. J. Oral Surg.
-British Journal of Oral and Maxillofacial Surgery = Br. J. Oral Maxillofac. Surg.
-British Journal of Orthodontics = Br. J. Orthod.
-British Journal of Pharmacology = Br. J. Pharmacol.
-British Journal of Physiological Optics = Br. J. Physiol. Opt.
-British Journal of Plastic Surgery = Br. J. Plast. Surg.
-British Journal of Preventive and Social Medicine = Br. J. Prev. Soc. Med.
-British Journal of Psychiatry = Br. J. Psychiatry
-British Journal of Psychiatry. Supplement = Br. J. Psychiatry. Suppl.
-British Journal of Psychology = Br. J. Psychol.
-British Journal of Radiology = Br. J. Radiol.
-British Journal of Radiology. Supplement = Br. J. Radiol. Suppl.
-British Journal of Rheumatology = Br. J. Rheumatol.
-British Journal of Sexual Medicine = Br. J. Sex. Med.
-British Journal of Social Psychology = Br. J. Soc. Psychol.
-British Journal of Social and Clinical Psychology = Br. J. Soc. Clin. Psychol.
-British Journal of Sociology = Br. J. Sociol.
-British Journal of Sports Medicine = Br. J. Sports Med.
-British Journal of Surgery = Br. J. Surg.
-British Journal of Theatre Nursing = Br. J. Theatre Nurs.
-British Journal of Urology = Br. J. Urol.
-British Journal of Venereal Diseases = Br. J. Vener. Dis.
-British Medical Bulletin = Br. Med. Bull.
-British Medical Journal = Br. Med. J.
-British Medical Journal (Clinical Research Edition) = Br. Med. J. (Clin. Res. Ed.)
-British Poultry Science = Br. Poult. Sci.
-British Veterinary Journal = Br. Vet. J.
-Bronches = Bronches
-Broncho-Pneumologie = Bronchopneumologie.
-Brookhaven Symposia in Biology = Brookhaven Symp. Biol.
-Brookings Bulletin = Brookings Bull.
-Brookings Review = Brookings Rev.
-Bruns' Beitrage fur Klinische Chirurgie = Bruns Beitr. Klin. Chir.
-Bruxelles Medical = Brux. Med.
-Bucherei des Augenarztes = Buch. Augenarzt.
-Building Operating Management = Build. Oper. Manage.
-Building Systems Design = Build. Syst. Des.
-Bulgarian Chemical Communications=Bulg. Chem. Commun.;BCHCE4;Q
-Bulletin Biologique de la France et de la Belgique = Bull. Biol. Fr. Belg.
-Bulletin Europeen de Physiopathologie Respiratoire = Bull. Eur. Physiopathol. Respir.
-Bulletin Mensuel, Societe de Medecine Militaire Francaise = Bull. Mens. Soc. Med. Mil. Fr.
-Bulletin Officiel, Conseil National, Ordre National des Chirurgiens-Dentistes = Ordre Natl. Chir. Dent. Cons. Natl. Bull. Off.
-Bulletin de Physio-Pathologie Respiratoire = Bull. Physiopathol. Respir. (Nancy)
-Bulletin de l'Academie Dentaire = Bull. Acad. Dent. (Paris)
-Bulletin de l'Academie Nationale de Chirurgie Dentaire = Bull. Acad. Natl. Chir. Dent.
-Bulletin de l'Academie Nationale de Medecine = Bull. Acad. Natl. Med.
-Bulletin de l'Academie Polonaise des Sciences. Serie des Sciences Biologiques = Bull. Acad. Pol. Sci. [Biol.]
-Bulletin de l'Academie Royale de Medecine de Belgique = Bull. Acad. R. Med. Belg.
-Bulletin de l'Academie Veterinaire de France = Bull. Acad. Vet. Fr.
-Bulletin de l'Academie de Chirurgie Dentaire = Bull. Acad. Chir. Dent. (Paris)
-Bulletin de l'Association Francaise pour l'Etude du Cancer = Bull. Assoc. Fr. Etud. Cancer
-Bulletin de l'Association des Anatomistes = Bull. Assoc. Anat. (Nancy)
-Bulletin de l'Institut National de la Sante et de la Recherche Medicale = Bull. Inst. Natl. Sante Rech. Med.
-Bulletin de l'Office International des Epizooties = Bull. Off. Int. Epizoot.
-Bulletin de la Federation des Societes de Gynecologie et d Obstetrique de Langue Francaise = Bull. Fed. Soc. Gynecol. Obstet. Lang. Fr.
-Bulletin de la Societe Belge d'Ophtalmologie = Bull. Soc. Belge Ophtalmol.
-Bulletin de la Societe Chimique de France = Bull. Soc. Chim. Fr.
-Bulletin de la Societe Francaise de Dermatologie et de Syphiligraphie = Bull. Soc. Fr. Dermatol. Syphiligr.
-Bulletin de la Societe Internationale de Chirurgie = Bull. Soc. Int. Chir.
-Bulletin de la Societe Medicale d'Afrique Noire de Langue Francaise = Bull. Soc. Med. Afr. Noire Lang. Fr.
-Bulletin de la Societe Royale Belge de Gynecologie et d'Obstetrique = Bull. Soc. R. Belge Gynecol. Obstet.
-Bulletin de la Societe de Chimie Biologique = Bull. Soc. Chim. Biol. (Paris)
-Bulletin de la Societe de Pathologie Exotique = Bull. Soc. Pathol. Exot.
-Bulletin de la Societe de Pathologie Exotique et de Ses Filiales = Bull. Soc. Pathol. Exot. Filiales
-Bulletin de la Societe des Sciences Medicales du Grand-Duche de Luxembourg = Bull. Soc. Sci. Med. Grand. Duche Luxemb.
-Bulletin der Schweizerischen Akademie der Medizinischen Wissenschaften = Bull. Schweiz. Akad. Med. Wiss.
-Bulletin des Infirmieres Catholiques du Canada = Bull. Infirm. Cathol. Can.
-Bulletin des Societes d'Ophtalmologie de France = Bull. Soc. Ophtalmol. Fr.
-Bulletin du Cancer = Bull. Cancer (Paris)
-Bulletin du Cancer. Radiotherapie = Bull. Cancer. Radiother.
-Bulletin du Groupement Europeen pour la Recherche Scientifique en Stomatologie et Odontologie = Bull. Group. Eur. Rech. Sci. Stomatol. Odontol.
-Bulletin du Groupement International pour la Recherche Scientifique en Stomatologie = Bull. Group. Int. Rech. Sci. Stomatol.
-Bulletin du Groupement International pour la Recherche Scientifique en Stomatologie et Odontologie = Bull. Group. Int. Rech. Sci. Stomatol. Odontol.
-Bulletin et Memoires de l'Academie Royale de Medecine de Belgique = Bull. Mem. Acad. R. Med. Belg.
-Bulletin et Memoires de la Societe des Chirurgiens de Paris = Bull. Mem. Soc. Chir. Paris
-Bulletin of Academy of Dentistry for the Handicapped = Bull. Acad. Dent. Handicap.
-Bulletin of Animal Health and Production in Africa = Bull. Anim. Health Prod. Afr.
-Bulletin of Clinical Neurosciences = Bull. Clin. Neurosci.
-Bulletin of Electrochemistry=Bull. Electrochem.;BUELE6;M
-Bulletin of Endemic Diseases = Bull. Endem. Dis. (Baghdad)
-Bulletin of Entomological Research = Bull. Entomol. Res.
-Bulletin of Environmental Contamination and Toxicology = Bull. Environ. Contam. Toxicol.
-Bulletin of Epizootic Diseases of Africa = Bull. Epizoot. Dis. Afr.
-Bulletin of Experimental Biology and Medicine = Bull. Exp. Biol. Med.
-Bulletin of Hygiene = Bull. Hyg. (Lond.)
-Bulletin of Materials Science=Bull. Mater. Sci.;BUMSDW;BM
-Bulletin of Mathematical Biology = Bull. Math. Biol.
-Bulletin of Mathematical Biophysics = Bull. Math. Biophys.
-Bulletin of Pharmaceutical Research Institute = Bull. Pharm. Res. Inst.
-Bulletin of Polish Medical Science and History = Bull. Pol. Med. Sci. Hist.
-Bulletin of Prosthetics Research = Bull. Prosthet. Res.
-Bulletin of Tokyo Dental College = Bull. Tokyo Dent. Coll.
-Bulletin of Tokyo Medical and Dental University = Bull. Tokyo Med. Dent. Univ.
-Bulletin of the 8th District Dental Society = Bull. Eighth. Dist. Dent. Soc.
-Bulletin of the Academy of General Dentistry = Bull. Acad. Gen. Dent.
-Bulletin of the Akron Dental Society = Bull. Akron Dent. Soc.
-Bulletin of the American Academy of Psychiatry and the Law = Bull. Am. Acad. Psychiatry Law
-Bulletin of the American College of Nurse-Midwifery = Bull. Am. Coll. Nurse. Midwifery
-Bulletin of the American College of Nurse-Midwives = Bull. Am. Coll. Nurse. Midwives
-Bulletin of the American College of Physicians = Bull. Am. Coll. Physicians
-Bulletin of the American College of Surgeons = Bull. Am. Coll. Surg.
-Bulletin of the American Meteorological Society = Bull. Amer. Meteor. Soc.
-Bulletin of the American Society for Information Science = Bull. Am. Soc. Inf. Sci.
-Bulletin of the Bergen County Dental Society = Bull. Bergen Cty. Dent. Soc.
-Bulletin of the Bronx County Dental Society = Bull. Bronx Cty. Dent. Soc.
-Bulletin of the Calcutta School of Tropical Medicine = Bull. Calcutta Sch. Trop. Med.
-Bulletin of the Chemical Society of Japan = Bull. Chem. Soc. Jpn.
-Bulletin of the Chest Disease Research Institute, Kyoto University = Bull. Chest Dis. Res. Inst. Kyoto Univ.
-Bulletin of the Cincinnati Dental Society = Bull. Cincinnati Dent. Soc.
-Bulletin of the Cleveland Dental Society = Bull. Cleve. Dent. Soc.
-Bulletin of the Contra Costa Dental Society = Bull. Contra Costa Dent. Soc.
-Bulletin of the Dental Guidance Council for Cerebral Palsy = Bull. Dent. Guid. Counc. Cereb. Palsy
-Bulletin of the Eleventh District Dental Society = Bull. Eleventh Dist. Dent. Soc.
-Bulletin of the Fifth District Dental Society = Bull. Fifth Dist. Dent. Soc. (Fresno)
-Bulletin of the Fifth District Dental Society of the State of New York = Bull. Fifth Dist. Dent. Soc. State N. Y.
-Bulletin of the History of Dentistry = Bull. Hist. Dent.
-Bulletin of the History of Medicine = Bull. Hist. Med.
-Bulletin of the Hospital for Joint Diseases = Bull. Hosp. Joint Dis.
-Bulletin of the Hospital for Joint Diseases Orthopaedic Institute = Bull. Hosp. Jt. Dis. Orthop. Inst.
-Bulletin of the Hudson County Dental Society = Bull. Hudson Cty. Dent. Soc.
-Bulletin of the Illinois Dental Hygienists Association = Bull. Ill. Dent. Hyg. Assoc.
-Bulletin of the Institute for Medical Research, University of Madrid = Bull. Inst. Med. Res. Univ. Madr.
-Bulletin of the Institute of Maritime and Tropical Medicine in Gdynia = Bull. Inst. Marit. Trop. Med. Gdynia
-Bulletin of the International Union Against Tuberculosis = Bull. Int. Union Tuberc.
-Bulletin of the International Union Against Tuberculosis and Lung Disease = Bull. Int. Union Tuberc. Lung Dis.
-Bulletin of the Kanagawa Dental College = Bull. Kanagawa Dent. Coll.
-Bulletin of the Korean Chemical Society=Bull. Korean Chem. Soc.;BKCSDE;M
-Bulletin of the Los Angeles Dental Society = Bull. Los Angeles Dent. Soc.
-Bulletin of the Los Angeles Neurological Societies = Bull. Los Angeles Neurol. Soc.
-Bulletin of the Massachusetts Nurses Association = Bull. Mass. Nurses Assoc.
-Bulletin of the Medical Library Association = Bull. Med. Libr. Assoc.
-Bulletin of the Menninger Clinic = Bull. Menninger Clin.
-Bulletin of the Michigan Dental Hygienists Association = Bull. Mich. Dent. Hyg. Assoc.
-Bulletin of the Montgomery-Bucks Dental Society = Bull. Montg. Bucks Dent. Soc.
-Bulletin of the New Jersey College of Medicine and Dentistry = Bull. N. J. Coll. Med. Dent.
-Bulletin of the New Jersey Society of Dentistry for Children = Bull. N. J. Soc. Dent. Child.
-Bulletin of the New York Academy of Medicine = Bull. N. Y. Acad. Med.
-Bulletin of the New York State Dental Society of Anesthesiology = Bull. N. Y. State Dent. Soc. Anesthesiol.
-Bulletin of the New York State Society of Dentistry for Children = Bull. N. Y. State Soc. Dent. Child.
-Bulletin of the Newark Dental Club = Bull. Newark Dent. Club
-Bulletin of the Ninth District Dental Society = Bull. Ninth Dist. Dent. Soc.
-Bulletin of the Ophthalmological Society of Egypt = Bull. Ophthalmol. Soc. Egypt
-Bulletin of the Osaka Medical College = Bull. Osaka Med. Coll.
-Bulletin of the Osaka Medical School = Bull. Osaka Med. Sch.
-Bulletin of the Osaka Medical School. Supplement = Bull. Osaka Med. Sch. Suppl.
-Bulletin of the Pan American Health Organization = Bull. Pan Am. Health Organ.
-Bulletin of the Parenteral Drug Association = Bull. Parenter. Drug Assoc.
-Bulletin of the Passaic County Dental Society = Bull. Passaic Cty. Dent. Soc.
-Bulletin of the Philadelphia County Dental Society = Bull. Phila. Cty. Dent. Soc.
-Bulletin of the Plainfield Dental Society = Bull. Plainfield Dent. Soc.
-Bulletin of the Suffolk County Dental Society = Bull. Suffolk Cty. Dent. Soc.
-Bulletin of the Tenth District Dental Society of the State of New York = Bull. Tenth Dist. Dent. Soc. (Rockville. Centre)
-Bulletin of the Toledo Dental Society = Bull. Toledo Dent. Soc.
-Bulletin of the Tri-County Dental Society = Bull. Tri. Cty. Dent. Soc.
-Bulletin of the Union County Dental Society = Bull. Union Cty. Dent. Soc.
-Bulletin of the Valley Dental Society = Bull. Val. Dent. Soc.
-Bulletin of the World Health Organization = Bull. World Health Organ.
-Bulletin on Narcotics = Bull. Narc.
-Bulletin on Training = Bull. Train.
-Bulletin on the Rheumatic Diseases = Bull. Rheum. Dis.
-Bulletin, Alameda County Dental Society = Bull. Alameda Cty. Dent. Soc.
-Bulletin, American Association for the History of Nursing = Bull. Am. Assoc. Hist. Nurs.
-Bulletin, American Association of Dental Editors = Bull. Am. Assoc. Dent. Ed.
-Bulletin, American Association of Hospital Dentists = Bull. Am. Assoc. Hosp. Dent.
-Bulletin, American Protestant Hospital Association = Bull. Am. Protestant Hosp. Assoc.
-Bulletin, Atlantic-Cape May County Dental Society = Bull. Atl. Cape May Cty. Dent. Soc.
-Bulletin, Cincinnati Dental Society = Bull. Cincinnati Dent. Soc.
-Bulletin, Dayton Dental Society = Bull. Dayton Dent. Soc.
-Bulletin, Essex County Dental Society = Bull. Essex Cty. Dent. Soc.
-Bulletin, Hospital for Joint Diseases = Bull. Hosp. Jt. Dis.
-Bulletin, Midtown Dental Society = Bull. Midtown Dent. Soc.
-Bulletin, Monmouth-Ocean County Dental Society = Bull. Monmouth. Ocean Cty. Dent. Soc.
-Bulletin, NZ Society of Periodontology = Bull. N. Z. Soc. Periodontol.
-Bulletin, National Medical and Dental Association and National Advocates Society = Bull. Natl. Med. Dent. Assoc. Natl. Advocates Soc.
-Bulletin, National Tuberculosis Association = Bull. Natl. Tuberc. Assoc.
-Bulletin, National Tuberculosis and Respiratory Disease Association = Bull. Natl. Tuberc. Respir. Dis. Assoc.
-Bulletin, Northern District Dental Society = Bull. North. Dist. Dent. Soc.
-Bulletin, Pacific Coast Society of Orthodontists = Bull. Pac. Coast Soc. Orthod.
-Bulletin, San Diego County Dental Society = Bull. San Diego Cty. Dent. Soc.
-Bulletin, San Mateo County Dental Society = Bull. San Mateo Cty. Dent. Soc.
-Bulletin, Second District Dental Society = Bull. Second Dist. Dent. Soc.
-Bulletin, Tennessee Nurses Association = Bull. Tenn. Nurses Assoc.
-Bulletin, Texas Nurses Association = Bull. Tex. Nurses Assoc.
-Bulletins et Memoires de la Societe Francaise d'Ophtalmologie = Bull. Mem. Soc. Fr. Ophtalmol.
-Bulletins et Memoires de la Societe Medicale des Hopitaux de Paris = Bull. Mem. Soc. Med. Hop. Paris
-Bullettino delle Scienze Mediche = Bull. Sci. Med. (Bologna)
-Bunseki Kagaku=Bunseki Kagaku;BNSKAK;M
-Bur = Bur
-Burns = Burns
-Burns, including Thermal Injury = Burns. Incl. Therm. Inj.
-Business Horizons = Bus. Horiz.
-Business Insurance = Bus. Insur.
-Business Week = Bus. Week
-Business and Health = Bus. Health
-CA: A Cancer Journal for Clinicians = CA. Cancer J. Clin.
-CAL = CAL
-CALPHAD: Computer Coupling of Phase Diagrams and Thermochemistry=CALPHAD: Comput. Coupling Phase Diagrams Thermochem.;CCCTD6;Q
-CANA = CANA
-CAP Today = CAP Today
-CBE Life Sciences Education = CBE Life Sci. Educ.
-CCQ: Critical Care Quarterly = CCQ.
-CDA Journal = CDA J.
-CDR (London, Review) = CDR (Lond. Engl. Rev.)
-CDR (London, Weekly) = CDR (Lond. Engl. Wkly.)
-CDS Review = CDS Rev.
-CDT Digest = CDT Dig.
-CE Focus = CE Focus
-CES Odontologia = CES Odontol.
-CEX Reports, Civil Effects Exercise = CEX Rep. Civ. Eff. Exerc.
-CHAC Review = CHAC Rev.
-CICIAMS Nouvelles = CICIAMS Nouv.
-CLAO Journal = CLAO J.
-CMAJ = CMAJ
-CNA Bulletin = CNA Bull.
-CNS and Neurological Disorders Drug Targets = CNS Neurol. Disord. Drug Targets
-COO Reports = COO Rep.
-COPD = COPD
-CRC Critical Reviews in Biochemistry = CRC Crit. Rev. Biochem.
-CRC Critical Reviews in Bioengineering = CRC Crit. Rev. Bioeng.
-CRC Critical Reviews in Clinical Laboratory Sciences = CRC Crit. Rev. Clin. Lab. Sci.
-CRC Critical Reviews in Clinical Neurobiology = CRC Crit. Rev. Clin. Neurobiol.
-CRC Critical Reviews in Clinical Radiology and Nuclear Medicine = CRC Crit. Rev. Clin. Radiol. Nucl. Med.
-CRC Critical Reviews in Diagnostic Imaging = CRC Crit. Rev. Diagn. Imaging
-CRC Critical Reviews in Food Science and Nutrition = CRC Crit. Rev. Food Sci. Nutr.
-CRC Critical Reviews in Immunology = CRC Crit. Rev. Immunol.
-CRC Critical Reviews in Microbiology = CRC Crit. Rev. Microbiol.
-CRC Critical Reviews in Radiological Sciences = CRC Crit. Rev. Radiol. Sci.
-CRC Critical Reviews in Toxicology = CRC Crit. Rev. Toxicol.
-CRNA = CRNA
-CVP = CVP
-Cadernos de Saude Publica = Cad. Saude Publica
-Caduceus = Caduceus
-Caementum = Caementum
-Cahiers d'Anesthesiologie = Cah. Anesthesiol.
-Cahiers d'Odonto-Stomatologie = Cah. Odontostomatol. (Touraine)
-Cahiers de Medecine = Cah. Med.
-Cahiers de Prothese = Cah. Prothese
-Cahiers de Sociologie et de Demographie Medicales = Cah. Sociol. Demogr. Med.
-Cahiers du College de Medecine des Hopitaux de Paris = Cah. Coll. Med. Hop. Paris
-Cahiers du Nursing = Cah. Nurs.
-Cailiao Rechuli Xuebao=Cailiao Rechuli Xuebao;CRXAAK;BM
-Calcified Tissue International = Calcif. Tissue Int.
-Calcified Tissue Research = Calcif. Tissue Res.
-California Hospitals = Calif. Hosp.
-California Law Review = Calif. Law Rev.
-California Management Review = Calif. Manage. Rev.
-California Medicine = Calif. Med.
-California Nurse = Calif. Nurse
-Cambridge Quarterly of Healthcare Ethics = Camb. Q. Healthc. Ethics
-Canada Communicable Disease Report = Can. Commun. Dis. Rep.
-Canada Diseases Weekly Report = Can. Dis. Wkly. Rep.
-Canada's Mental Health = Can. Ment. Health
-Canadian Anaesthetists Society Journal = Can. Anaesth. Soc. J.
-Canadian Association of Radiologists Journal = Can. Assoc. Radiol. J.
-Canadian Bulletin of Cardiovascular Nursing = Can. Bull. Cardiovasc. Nurs.
-Canadian Cancer Conference = Can. Cancer Conf.
-Canadian Critical Care Nursing Journal = Can. Crit. Care Nurs. J.
-Canadian Dental Hygienist = Can. Dent. Hyg.
-Canadian Doctor = Can. Doct.
-Canadian Family Physician = Can. Fam. Physician
-Canadian Forces Dental Services Bulletin = Can. Forces Dent. Serv. Bull.
-Canadian Forces Dental Services Quarterly = Can. Forces Dent. Serv. Q.
-Canadian Hospital = Can. Hosp.
-Canadian Journal of Anaesthesia = Can. J. Anaesth.
-Canadian Journal of Analytical Sciences and Spectroscopy=Can. J. Anal. Sci. Spectrosc.;CJASFA;BM
-Canadian Journal of Applied Physiology = Can. J. Appl. Physiol.
-Canadian Journal of Applied Sport Sciences = Can. J. Appl. Sport Sci.
-Canadian Journal of Biochemistry = Can. J. Biochem.
-Canadian Journal of Biochemistry and Cell Biology = Can. J. Biochem. Cell Biol.
-Canadian Journal of Cardiology = Can. J. Cardiol.
-Canadian Journal of Cardiovascular Nursing = Can. J. Cardiovasc. Nurs.
-Canadian Journal of Chemical Engineering=Can. J. Chem. Eng.;CJCEA7;BM
-Canadian Journal of Chemistry=Can. J. Chem.;CJCHAG;M
-Canadian Journal of Community Dentistry = Can. J. Community Dent.
-Canadian Journal of Community Mental Health = Can. J. Commun. Ment. Health
-Canadian Journal of Comparative Medicine = Can. J. Comp. Med.
-Canadian Journal of Comparative Medicine and Veterinary Science = Can. J. Comp. Med. Vet. Sci.
-Canadian Journal of Dietetic Practice and Research = Can. J. Diet. Pract. Res.
-Canadian Journal of Experimental Psychology = Can. J. Exp. Psychol.
-Canadian Journal of Fisheries and Aquatic Sciences = Can. J. Fish. Aquat. Sci.
-Canadian Journal of Gastroenterology = Can. J. Gastroenterol.
-Canadian Journal of Genetics and Cytology = Can. J. Genet. Cytol.
-Canadian Journal of Hospital Pharmacy = Can. J. Hosp. Pharm.
-Canadian Journal of Infection Control = Can. J. Infect. Control
-Canadian Journal of Medical Radiation Technology = Can. J. Med. Radiat. Technol.
-Canadian Journal of Medical Technology = Can. J. Med. Technol.
-Canadian Journal of Microbiology = Can. J. Microbiol.
-Canadian Journal of Neurological Sciences = Can. J. Neurol. Sci.
-Canadian Journal of Nursing Administration = Can. J. Nurs. Adm.
-Canadian Journal of Nursing Research = Can. J. Nurs. Res.
-Canadian Journal of Occupational Therapy = Can. J. Occup. Ther.
-Canadian Journal of Oncology = Can. J. Oncol.
-Canadian Journal of Ophthalmology = Can. J. Ophthalmol.
-Canadian Journal of Otolaryngology = Can. J. Otolaryngol.
-Canadian Journal of Otolaryngology. Supplement = Can. J. Otolaryngol. Suppl.
-Canadian Journal of Physics=Can. J. Phys.;CJPHAD;M
-Canadian Journal of Physiology and Pharmacology = Can. J. Physiol. Pharmacol.
-Canadian Journal of Psychiatric Nursing = Can. J. Psychiatr. Nurs.
-Canadian Journal of Psychiatry = Can. J. Psychiatry
-Canadian Journal of Psychology = Can. J. Psychol.
-Canadian Journal of Public Health = Can. J. Public Health.
-Canadian Journal of Radiography, Radiotherapy, Nuclear Medicine = Can. J. Radiogr. Radiother. Nucl. Med.
-Canadian Journal of Sport Sciences = Can. J. Sport Sci.
-Canadian Journal of Surgery = Can. J. Surg.
-Canadian Journal of Veterinary Research = Can. J. Vet. Res.
-Canadian Journal of Zoology = Can. J. Zool.
-Canadian Medical Association Journal = Can. Med. Assoc. J.
-Canadian Metallurgical Quarterly=Can. Metall. Q.;CAMQAU;Q
-Canadian Mineralogist=Can. Mineral.;CAMIA6;BM
-Canadian Nurse = Can. Nurse
-Canadian Oncology Nursing Journal = Can. Oncol. Nurs. J.
-Canadian Operating Room Nursing Journal = Can. Oper. Room Nurs. J.
-Canadian Pharmaceutical Journal = Can. Pharm. J.
-Canadian Psychiatric Association Journal = Can. Psychiatr. Assoc. J.
-Canadian Public Administration = Can. Public Adm.
-Canadian Respiratory Journal = Can. Respir. J.
-Canadian Veterinary Journal = Can. Vet. J.
-Cancer = Cancer
-Cancer Biochemistry Biophysics = Cancer Biochem. Biophys.
-Cancer Biology and Therapy = Cancer Biol. Ther.
-Cancer Biotherapy = Cancer Biother.
-Cancer Biotherapy and Radiopharmaceuticals = Cancer Biother. Radiopharm.
-Cancer Causes and Control = Cancer Causes Control
-Cancer Cell = Cancer Cell
-Cancer Cells = Cancer Cells
-Cancer Chemotherapy Reports. Part 1 = Cancer Chemother. Rep.
-Cancer Chemotherapy Reports. Part 2 = Cancer Chemother. Rep. [2]
-Cancer Chemotherapy Reports. Part 3 = Cancer Chemother. Rep. [3]
-Cancer Chemotherapy and Biological Response Modifiers = Cancer Chemother. Biol. Response Modif.
-Cancer Chemotherapy and Pharmacology = Cancer Chemother. Pharmacol.
-Cancer Clinical Trials = Cancer Clin. Trials
-Cancer Communications = Cancer Commun.
-Cancer Detection and Prevention = Cancer Detect. Prev.
-Cancer Detection and Prevention. Supplement = Cancer Detect. Prev. Suppl.
-Cancer Drug Delivery = Cancer Drug Deliv.
-Cancer Epidemiology, Biomarkers and Prevention = Cancer Epidemiol. Biomarkers Prev.
-Cancer Gene Therapy = Cancer Gene Ther.
-Cancer Genetics and Cytogenetics = Cancer Genet. Cytogenet.
-Cancer Genomics & Proteomics=Cancer Genomics Proteomics;CGPAC7;BM
-Cancer Immunity = Cancer Immun.
-Cancer Immunology, Immunotherapy = Cancer Immunol. Immunother.
-Cancer Investigation = Cancer Invest.
-Cancer Journal = Cancer J.
-Cancer Journal from Scientific American = Cancer J. Sci. Am.
-Cancer Letters = Cancer Lett.
-Cancer Letters (Amsterdam, Netherlands)=Cancer Lett. (Amsterdam, Neth.);CALEDQ;28/YR
-Cancer Nursing = Cancer Nurs.
-Cancer Practice = Cancer Pract.
-Cancer Prevention and Control = Cancer Prev. Control
-Cancer Radiotherapie = Cancer Radiother.
-Cancer Research = Cancer Res.
-Cancer Science = Cancer Sci.
-Cancer Surveys = Cancer Surv.
-Cancer Treatment Reports = Cancer Treat. Rep.
-Cancer Treatment Reviews = Cancer Treat. Rev.
-Cancer Treatment and Research = Cancer Treat. Res.
-Cancer and Metastasis Reviews = Cancer Metastasis Rev.
-Cancro = Cancro
-Capital Nursing = Cap. Nurs.
-Capitation Management Report = Capitation Manag. Rep.
-Capitation Rates and Data = Capitation Rates Data
-Carbohydrate Polymers=Carbohydr. Polym.;CAPOD8;16/YR
-Carbohydrate Research = Carbohydr. Res.
-Carbon=Carbon;CRBNAH;15/YR
-Carcinogenesis = Carcinogenesis
-Carcinogenesis: A Comprehensive Survey = Carcinog. Compr. Surv.
-Cardiac Electrophysiology Review = Card. Electrophysiol. Rev.
-Cardiologia = Cardiologia
-Cardiologia Pratica = Cardiol. Prat.
-Cardiology = Cardiology
-Cardiology Clinics = Cardiol. Clin.
-Cardiology Management = Cardiol. Manage.
-Cardiology in Review = Cardiol. Rev.
-Cardiology in the Young = Cardiol. Young
-Cardioscience = Cardioscience
-Cardiovascular Clinics = Cardiovasc. Clin.
-Cardiovascular Diabetology = Cardiovasc. Diabetol.
-Cardiovascular Drugs and Therapy = Cardiovasc. Drugs Ther.
-Cardiovascular Engineering = Cardiovasc. Eng.
-Cardiovascular Journal of South Africa = Cardiovasc. J. S. Afr.
-Cardiovascular Nursing = Cardiovasc. Nurs.
-Cardiovascular Radiation Medicine = Cardiovasc. Radiat. Med.
-Cardiovascular Radiology = Cardiovasc. Radiol.
-Cardiovascular Research = Cardiovasc. Res.
-Cardiovascular Research Center Bulletin = Cardiovasc. Res. Cent. Bull.
-Cardiovascular Revascularization Medicine = Cardiovasc. Revasc. Med.
-Cardiovascular Surgery = Cardiovasc. Surg.
-Cardiovascular Toxicology = Cardiovasc. Toxicol.
-Cardiovascular and Hematological Agents in Medicinal Chemistry = Cardiovasc. Hematol. Agents Med. Chem.
-Cardiovascular and Hematological Disorders Drug Targets = Cardiovasc. Hematol. Disord. Drug Targets.
-Cardiovascular and Interventional Radiology = Cardiovasc. Intervent. Radiol.
-Care Giver = Care Giver
-Care Management Journals = Care Manag. J.
-Caridad, Ciencia y Arte = Caridad. Cienc. Arte
-Caries Research = Caries Res.
-Caring = Caring
-Caritas = Caritas
-Caritasschwester = Caritasschwester
-Carlsberg Research Communications = Carlsberg Res. Commun.
-Carnets de l'Enfance = Carnets Enfance
-Case Studies in Health Administration = Case Stud. Health Adm.
-Casopis Lekaru Ceskych = Cas. Lek. Cesk.
-Catalysis Communications=Catal. Commun.;CCAOAC;M
-Catalysis Letters=Catal. Lett.;CALEER;28/YR
-Catalysis Reviews - Science and Engineering=Catal. Rev. - Sci. Eng.;CRSEC9;Q
-Catalysis Today=Catal. Today;CATTEA;44/YR
-Catering and Health = Cater. Health
-Catheterization and Cardiovascular Diagnosis = Cathet. Cardiovasc. Diagn.
-Catheterization and Cardiovascular Interventions = Catheter. Cardiovasc. Interv.
-Catholic Hospital = Cathol. Hosp.
-Catholic Nurse = Cathol. Nurse
-Cell = Cell
-Cell (Cambridge, MA, United States)=Cell (Cambridge, MA, U. S.);CELLB5;BW
-Cell Adhesion and Communication = Cell Adhes. Commun.
-Cell Biochemistry and Biophysics = Cell Biochem. Biophys.
-Cell Biochemistry and Function = Cell Biochem. Funct.
-Cell Biology International = Cell Biol. Int.
-Cell Biology International Reports = Cell Biol. Int. Rep.
-Cell Biology Reviews = Cell Biol. Rev.
-Cell Biology and Toxicology = Cell Biol. Toxicol.
-Cell Biophysics = Cell Biophys.
-Cell Calcium = Cell Calcium
-Cell Communication and Adhesion = Cell Commun. Adhes.
-Cell Cycle = Cell Cycle
-Cell Death and Differentiation = Cell Death Differ.
-Cell Differentiation = Cell Differ.
-Cell Differentiation and Development = Cell Differ. Dev.
-Cell Growth and Differentiation = Cell Growth Differ.
-Cell Metabolism = Cell Metab.
-Cell Motility = Cell Motil.
-Cell Motility and the Cytoskeleton = Cell Motil. Cytoskeleton
-Cell Proliferation = Cell Prolif.
-Cell Regulation = Cell Regul.
-Cell Research = Cell Res.
-Cell Stress and Chaperones = Cell Stress Chaperones
-Cell Structure and Function = Cell Struct. Funct.
-Cell Transplantation = Cell Transplant.
-Cell Vision = Cell Vis.
-Cell and Muscle Motility = Cell Muscle Motil.
-Cell and Tissue Kinetics = Cell Tissue Kinet.
-Cell and Tissue Research = Cell Tissue Res.
-Cells, Tissues, Organs = Cells Tissues Organs
-Cellular Immunology = Cell. Immunol.
-Cellular Microbiology = Cell. Microbiol.
-Cellular Oncology = Cell. Oncol.
-Cellular Physiology and Biochemistry = Cell. Physiol. Biochem.
-Cellular Polymers=Cell. Polym.;CELPDJ;BM
-Cellular Signalling = Cell. Signal.
-Cellular and Molecular Biology = Cell. Mol. Biol.
-Cellular and Molecular Biology (Paris, France, Online)=Cell. Mol. Biol. (Paris, Fr., Online);CMBPBN;IRR
-Cellular and Molecular Biology (Sarreguemines, France, Print)=Cell. Mol. Biol. (Sarreguemines, Fr., Print);CMOBEF;8/YR
-Cellular and Molecular Biology Letters = Cell. Mol. Biol. Lett.
-Cellular and Molecular Biology Research = Cell. Mol. Biol. Res.
-Cellular and Molecular Immunology = Cell. Mol. Immunol.
-Cellular and Molecular Life Sciences = Cell. Mol. Life Sci.
-Cellular and Molecular Neurobiology = Cell. Mol. Neurobiol.
-Cellule = Cellule
-Cellulose Chemistry and Technology=Cellul. Chem. Technol.;CECTAH;BM
-Cement & Concrete Composites=Cem. Concr. Compos.;CCOCEG;10/YR
-Cement and Concrete Research=Cem. Concr. Res.;CCNRAI;M
-Centaurus = Centaurus
-Central African Journal of Medicine = Cent. Afr. J. Med.
-Central European Journal of Public Health = Cent. Eur. J. Public Health
-Central Nervous System Trauma = Cent. Nerv. Syst. Trauma
-Centro de Estudios de Recursos Odontologicos para el Nino = Cent. Estud. Recur. Odontol. Nino
-Cephalalgia = Cephalalgia
-Ceramics International=Ceram. Int.;CINNDH;8/YR
-Ceramics-Silikaty=Ceram.-Silik.;CERSEP;Q
-Cereal Chemistry=Cereal Chem.;CECHAF;BM
-Cerebellum = Cerebellum
-Cerebral Cortex = Cereb. Cortex
-Cerebral Palsy Journal = Cereb. Palsy J.
-Cerebral Palsy Review = Cereb. Palsy Rev.
-Cerebrovascular Diseases = Cerebrovasc. Dis.
-Cerebrovascular and Brain Metabolism Reviews = Cerebrovasc. Brain Metab. Rev.
-Certified Dental Technician = Certif. Dent. Tech.
-Ceska Gynekologie = Ceska Gynekol.
-Ceska a Slovenska Farmacie = Ceska Slov. Farm.
-Ceska a Slovenska Oftalmologie = Cesk. Slov. Oftalmol.
-Ceska a Slovenska Psychiatrie = Ceska Slov. Psychiatr.
-Ceskoslovenska Dermatologie = Cesk. Dermatol.
-Ceskoslovenska Epidemiologie, Mikrobiologie, Imunologie = Cesk. Epidemiol. Mikrobiol. Imunol.
-Ceskoslovenska Farmacie = Cesk. Farm.
-Ceskoslovenska Fysiologie = Cesk. Fysiol.
-Ceskoslovenska Gastroenterologie a Vyziva = Cesk. Gastroenterol. Vyz.
-Ceskoslovenska Gynekologie = Cesk. Gynekol.
-Ceskoslovenska Hygiena = Cesk. Hyg.
-Ceskoslovenska Neurologie = Cesk. Neurol.
-Ceskoslovenska Neurologie a Neurochirurgie = Cesk. Neurol. Neurochir.
-Ceskoslovenska Oftalmologie = Cesk. Oftalmol.
-Ceskoslovenska Otolaryngologie = Cesk. Otolaryngol.
-Ceskoslovenska Patologie = Cesk. Patol.
-Ceskoslovenska Pediatrie = Cesk. Pediatr.
-Ceskoslovenska Psychiatrie = Cesk. Psychiatr.
-Ceskoslovenska Radiologie = Cesk. Radiol.
-Ceskoslovenska Stomatologie = Cesk. Stomatol.
-Ceskoslovenske Zdravotnictvi = Cesk. Zdrav.
-Ceylon Dental Journal = Ceylon Dent. J.
-Ceylon Medical Journal = Ceylon Med. J.
-Chang Gung Medical Journal = Chang Gung Med. J.
-Change = Change
-Changgeng Yi Xue Za Zhi (Chang Gung Medical Journal) = Changgeng Yi Xue Za Zhi
-Changing Times = Changing Times
-Chart = Chart
-ChemBioChem=ChemBioChem;CBCHFX;M
-ChemPhysChem=ChemPhysChem;CPCHFT;12/YR
-Chembiochem = Chembiochem
-Chemia Analityczna (Warsaw, Poland)=Chem. Anal. (Warsaw, Pol.);CANWAJ;BM
-Chemical & Pharmaceutical Bulletin=Chem. Pharm. Bull.;CPBTAL;M
-Chemical Biology and Drug Design = Chem. Biol. Drug Des.
-Chemical Communications = Chem. Commun.
-Chemical Communications (Cambridge, United Kingdom)=Chem. Commun. (Cambridge, U. K.);CHCOFS;48/YR
-Chemical Dependencies = Chem. Depend.
-Chemical Engineering & Technology=Chem. Eng. Technol.;CETEER;M
-Chemical Engineering Communications=Chem. Eng. Commun.;CEGCAK;M
-Chemical Engineering Journal (Amsterdam, Netherlands)=Chem. Eng. J. (Amsterdam, Neth.);CMEJAJ;27/YR
-Chemical Engineering Progress=Chem. Eng. Prog.;CEPRA8;M
-Chemical Engineering Research and Design=Chem. Eng. Res. Des.;CERDEE;M
-Chemical Engineering Science = Chem. Eng. Sci.
-Chemical Engineering and Processing=Chem. Eng. Process.;CENPEU;M
-Chemical Geology=Chem. Geol.;CHGEAD;44/YR
-Chemical Immunology = Chem. Immunol.
-Chemical Immunology and Allergy = Chem. Immunol. Allergy
-Chemical Papers=Chem. Pap.;CHPAEG;6/YR
-Chemical Physics=Chem. Phys.;CMPHC2;33/YR
-Chemical Physics Letters=Chem. Phys. Lett.;CHPLBC;W
-Chemical Record = Chem. Rec.
-Chemical Research in Chinese Universities=Chem. Res. Chin. Univ.;CRCUED;BM
-Chemical Research in Toxicology = Chem. Res. Toxicol.
-Chemical Reviews = Chem. Rev.
-Chemical Reviews (Washington, DC, United States)=Chem. Rev. (Washington, DC, U. S.);CHREAY;M
-Chemical Senses = Chem. Senses
-Chemical Society Reviews=Chem. Soc. Rev.;CSRVBR;12/YR
-Chemical Speciation and Bioavailability=Chem. Speciation Bioavailability;CHSBEY;Q
-Chemical Vapor Deposition=Chem. Vap. Deposition;CVDEFX;M
-Chemical and Biochemical Engineering Quarterly=Chem. Biochem. Eng. Q.;CBEQEZ;Q
-Chemical and Pharmaceutical Bulletin = Chem. Pharm. Bull. (Tokyo)
-Chemicke Listy=Chem. Listy;CHLSAC;M
-Chemico-Biological Interactions = Chem. Biol. Interact.
-Chemie Ingenieur Technik=Chem. Ing. Tech.;CITEAH;M
-Chemie der Erde=Chem. Erde;CERDAA;4/YR
-Chemija=Chemija;CHMJES;4/YR
-Chemioterapia = Chemioterapia
-Chemische Berichte = Chem. Ber.
-Chemistry & Biodiversity=Chem. Biodiversity;CBHIAM;M
-Chemistry & Biology (Cambridge, MA, United States)=Chem. Biol. (Cambridge, MA, U. S.);CBOLE2;M
-Chemistry & Industry (London, United Kingdom)=Chem. Ind. (London, U. K.);CHINAG;SM
-Chemistry Letters=Chem. Lett.;CMLTAG;M
-Chemistry and Biology = Chem. Biol.
-Chemistry and Industry = Chem. Ind.
-Chemistry and Physics of Lipids = Chem. Phys. Lipids
-Chemistry and Technology of Fuels and Oils=Chem. Technol. Fuels Oils;CTFOAK;BM
-Chemistry in Britain = Chem. Br.
-Chemistry of Heterocyclic Compounds (New York, NY, United States)=Chem. Heterocycl. Compd. (N. Y., NY, U. S.);CHCCAL;M
-Chemistry of Materials=Chem. Mater.;CMATEX;BW
-Chemistry of Natural Compounds=Chem. Nat. Compd.;CHNCA8;BM
-Chemistry--A European Journal=Chem.--Eur. J.;CEUJED;SM
-Chemmedchem = Chemmedchem
-Chemometrics and Intelligent Laboratory Systems=Chemom. Intell. Lab. Syst.;CILSEN;9/YR
-Chemosphere = Chemosphere
-Chemotherapy = Chemotherapy
-Chemotherapy (Basel, Switzerland)=Chemotherapy (Basel, Switz.);CHTHBK;BM
-Chemtracts=Chemtracts;CHEMFW;12/YR
-Chen Tzu Yen Chiu (Acupuncture Research) = Chen Tzu Yen Chiu
-Chest = Chest
-Chest Surgery Clinics of North America = Chest Surg. Clin. N. Am.
-Chicago Medical School Quarterly = Chic. Med. Sch. Q.
-Chief Information Officer Journal = Chief Inf. Off. J.
-Chikwa Kijae Hakhoe Chi (Journal of the Korea Research Society for Dental Materials) = Chikwa Kijae Hakhoe Chi
-Child Abuse and Neglect = Child Abuse Negl.
-Child Development = Child Dev.
-Child Maltreatment = Child Maltreat.
-Child Nephrology and Urology = Child Nephrol. Urol.
-Child Psychiatry and Human Development = Child Psychiatry Hum. Dev.
-Child Welfare = Child Welfare
-Child and Adolescent Psychiatric Clinics of North America = Child Adolesc. Psychiatr. Clin. N. Am.
-Child's Brain = Childs Brain
-Child's Nervous System = Childs Nerv. Syst.
-Child: Care, Health and Development = Child Care Health Dev.
-Children = Children
-Children Today = Child. Today
-Children's Health Care = Child. Health Care
-Chimia=Chimia;CHIMAD;M
-Chimica e l'Industria (Milan, Italy)=Chim. Ind. (Milan, Italy);CINMAB;10/YR
-China's Medicine = Chinas Med.
-Chinese Chemical Letters=Chin. Chem. Lett.;CCLEE7;M
-Chinese Journal of Biotechnology = Chin. J. Biotechnol.
-Chinese Journal of Chemical Engineering=Chin. J. Chem. Eng.;CJCEEB;BM
-Chinese Journal of Chemistry=Chin. J. Chem.;CJOCEV;M
-Chinese Journal of Geochemistry=Chin. J. Geochem.;CJGEEV;Q
-Chinese Journal of Integrative Medicine = Chin. J. Integr. Med.
-Chinese Journal of Physiology = Chin. J. Physiol.
-Chinese Journal of Polymer Science=Chin. J. Polym. Sci.;CJPSEG;BM
-Chinese Journal of Traumatology = Chin. J. Traumatol.
-Chinese Medical Journal = Chin. Med. J. (Engl.)
-Chinese Medical Sciences Journal = Chin. Med. Sci. J.
-Chirality = Chirality
-Chirurg = Chirurg
-Chirurgia = Chirurgia (Bucur.)
-Chirurgia Italiana = Chir. Ital.
-Chirurgia Maxillofacialis et Plastica = Chir. Maxillofac. Plast.
-Chirurgia Narzadow Ruchu i Ortopedia Polska = Chir. Narzadow Ruchu Ortop. Pol.
-Chirurgia degli Organi di Movimento = Chir. Organi Mov.
-Chirurgia e Patologia Sperimentale = Chir. Patol. Sper.
-Chirurgie = Chirurgie
-Chirurgie Pediatrique = Chir. Pediatr.
-Chirurgie de la Main = Chir. Main
-Chirurgien-Dentiste de France = Chir. Dent. Fr.
-Chirurgisches Forum fur Experimentelle und Klinische Forschung = Chir. Forum Exp. Klin. Forsch.
-Choices in Respiratory Management = Choices Respir. Manage.
-Chot Mai Het Kan Phayaban = Chot Mai Het Kan Phayaban
-Christian Medical Dental Society Journal = Christ. Med. Dent. Soc. J.
-Christian Nurse = Christ. Nurse (Mysore)
-Christian Nurse International = Christ. Nurse Int.
-Chromatographia=Chromatographia;CHRGB7;M
-Chromatographic Reviews = Chromatogr. Rev.
-Chromosoma = Chromosoma
-Chromosome Research = Chromosome Res.
-Chronic Diseases in Canada = Chronic Dis. Can.
-Chronic Illness = Chronic Illn.
-Chronic Respiratory Disease = Chron. Respir. Dis.
-Chronicle = Chronicle
-Chronobiologia = Chronobiologia
-Chronobiology International = Chronobiol. Int.
-Ciba Foundation Study Group = Ciba Found. Study Group
-Ciba Foundation Symposium = Ciba Found. Symp.
-Cincinnati Dental Society Bulletin = Cincinnati Dent. Soc. Bull.
-Circulation = Circulation
-Circulation Journal = Circ. J.
-Circulation Research = Circ. Res.
-Circulatory Shock = Circ. Shock
-Circulatory Shock. Supplement = Circ. Shock. Suppl.
-Circulo Odontologico de San Martin y Tres de Febrero = Circ. Odontol. San Martin Tres Febr.
-Cirugia Bucal = Cir. Bucal
-Cirugia Pediatrica = Cir. Pediatr.
-Cirugia y Cirujanos = Cir. Cir.
-Cirugia, Ginecologia y Urologia = Cir. Ginecol. Urol.
-Clay Minerals=Clay Miner.;CLMIAF;Q
-Clays and Clay Minerals=Clays Clay Miner.;CLCMAB;BM
-Cleft Palate Journal = Cleft Palate J.
-Cleft Palate-Craniofacial Journal = Cleft Palate. Craniofac. J.
-Cleveland Clinic Journal of Medicine = Cleve. Clin. J. Med.
-Cleveland Clinic Quarterly = Cleve. Clin. Q.
-Climacteric = Climacteric
-Climate Dynamics = Climate Dyn.
-Climatic Change = Climatic Change
-Climatological Bulletin = Climatol. Bull.
-Clinic = Clinic (Paris)
-Clinic Odontologia = Clin. Odontol.
-Clinica = Clinica
-Clinica Chimica Acta = Clin. Chim. Acta
-Clinica Europea = Clin. Eur.
-Clinica Ortopedica = Clin. Ortop.
-Clinica Ostetrica e Ginecologica = Clin. Ostet. Ginecol.
-Clinica Otorinolaringoiatrica = Clin. Otorinolaringoiatr.
-Clinica Pediatrica = Clin. Pediatr. (Bologna)
-Clinica Terapeutica = Clin. Ter.
-Clinica y Laboratorio = Clin. Lab.
-Clinical Advances in Hematology and Oncology = Clin. Adv. Hematol. Oncol.
-Clinical Allergy = Clin. Allergy
-Clinical Anatomy = Clin. Anat.
-Clinical Anesthesia = Clin. Anesth.
-Clinical Autonomic Research = Clin. Auton. Res.
-Clinical Biochemistry = Clin. Biochem.
-Clinical Breast Cancer = Clin. Breast Cancer
-Clinical Bulletin = Clin. Bull.
-Clinical Cancer Research = Clin. Cancer Res.
-Clinical Cardiology = Clin. Cardiol.
-Clinical Chemistry = Clin. Chem.
-Clinical Chemistry (Washington, DC, United States)=Clin. Chem. (Washington, DC, U. S.);CLCHAU;M
-Clinical Chemistry and Laboratory Medicine = Clin. Chem. Lab. Med.
-Clinical Child and Family Psychology Review = Clin. Child Fam. Psychol. Rev.
-Clinical Colorectal Cancer = Clin. Colorectal Cancer
-Clinical Cornerstone = Clin. Cornerstone
-Clinical Dysmorphology = Clin. Dysmorphol.
-Clinical EEG and Neuroscience = Clin. EEG Neurosci.
-Clinical Electroencephalography = Clin. Electroencephalogr.
-Clinical Endocrinology = Clin. Endocrinol. (Oxf.)
-Clinical Engineering = Clin. Eng.
-Clinical Engineering Information Service = Clin. Eng. Inf. Serv.
-Clinical Engineering News = Clin. Eng. News
-Clinical Evidence = Clin. Evid.
-Clinical Gastroenterology and Hepatology = Clin. Gastroenterol. Hepatol.
-Clinical Genetics = Clin. Genet.
-Clinical Genitourinary Cancer = Clin. Genitourin. Cancer
-Clinical Gerontologist = Clin. Gerontol.
-Clinical Hemorheology and Microcirculation = Clin. Hemorheol. Microcirc.
-Clinical Imaging = Clin. Imaging
-Clinical Immunology = Clin. Immunol.
-Clinical Immunology (San Diego, CA, United States)=Clin. Immunol. (San Diego, CA, U. S.);CLIIFY;M
-Clinical Immunology Reviews = Clin. Immunol. Rev.
-Clinical Immunology and Immunopathology = Clin. Immunol. Immunopathol.
-Clinical Implant Dentistry and Related Research = Clin. Implant Dent. Relat. Res.
-Clinical Infectious Diseases = Clin. Infect. Dis.
-Clinical Intensive Care = Clin. Intensive Care
-Clinical Investigator = Clin. Investig.
-Clinical Journal of Oncology Nursing = Clin. J. Oncol. Nurs.
-Clinical Journal of Pain = Clin. J. Pain
-Clinical Journal of Sport Medicine = Clin. J. Sport Med.
-Clinical Laboratory = Clin. Lab.
-Clinical Laboratory Management Review = Clin. Lab. Manage. Rev.
-Clinical Laboratory Science = Clin. Lab. Sci.
-Clinical Laser Monthly = Clin. Laser Mon.
-Clinical Lymphoma = Clin. Lymphoma
-Clinical Lymphoma and Myeloma = Clin. Lymphoma Myeloma
-Clinical Materials = Clin. Mater.
-Clinical Medicine = Clin. Med.
-Clinical Medicine and Research = Clin. Med. Res.
-Clinical Microbiology Reviews = Clin. Microbiol. Rev.
-Clinical Nephrology = Clin. Nephrol.
-Clinical Neurology and Neurosurgery = Clin. Neurol. Neurosurg.
-Clinical Neuropathology = Clin. Neuropathol.
-Clinical Neuropharmacology = Clin. Neuropharmacol.
-Clinical Neurophysiology = Clin. Neurophysiol.
-Clinical Neuroscience = Clin. Neurosci.
-Clinical Neurosurgery = Clin. Neurosurg.
-Clinical Notes on Respiratory Diseases = Clin. Notes Respir. Dis.
-Clinical Nuclear Medicine = Clin. Nucl. Med.
-Clinical Nurse Specialist = Clin. Nurse Spec.
-Clinical Nursing Practice in Epilepsy = Clin. Nurs. Pract. Epilepsy
-Clinical Nursing Research = Clin. Nurs. Res.
-Clinical Nutrition = Clin. Nutr.
-Clinical Obstetrics and Gynecology = Clin. Obstet. Gynecol.
-Clinical Oncology = Clin. Oncol.
-Clinical Oncology (Royal College of Radiologists) = Clin. Oncol. (R. Coll. Radiol.)
-Clinical Oral Implants Research = Clin. Oral Implants Res.
-Clinical Oral Investigations = Clin. Oral Investig.
-Clinical Orthodontics and Research = Clin. Orthod. Res.
-Clinical Orthopaedics and Related Research = Clin. Orthop.
-Clinical Otolaryngology = Clin. Otolaryngol.
-Clinical Pediatrics = Clin. Pediatr. (Phila.)
-Clinical Performance and Quality Health Care = Clin. Perform. Qual. Health Care
-Clinical Pharmacokinetics = Clin. Pharmacokinet.
-Clinical Pharmacology and Therapeutics = Clin. Pharmacol. Ther.
-Clinical Pharmacy = Clin. Pharm.
-Clinical Physics and Physiological Measurement = Clin. Phys. Physiol. Meas.
-Clinical Physiology = Clin. Physiol.
-Clinical Physiology and Biochemistry = Clin. Physiol. Biochem.
-Clinical Physiology and Functional Imaging = Clin. Physiol. Funct. Imaging
-Clinical Practice Guideline. Quick Reference Guide for Clinicians = Clin. Pract. Guidel. Quick Ref. Guide Clin.
-Clinical Preventive Dentistry = Clin. Prev. Dent.
-Clinical Proceedings, Childrens Hospital of the District of Columbia = Clin. Proc. Child. Hosp. Dist. Columbia
-Clinical Prostate and Kidney Cancer = Clin. Prostate Kidney Cancer
-Clinical Proteomics=Clin. Proteomics;CPLRCX;4/YR
-Clinical Psychology Review = Clin. Psychol. Rev.
-Clinical Radiology = Clin. Radiol.
-Clinical Rehabilitation = Clin. Rehabil.
-Clinical Reproduction and Fertility = Clin. Reprod. Fertil.
-Clinical Research = Clin. Res.
-Clinical Research in Cardiology = Clin. Res. Cardiol.
-Clinical Reviews in Allergy = Clin. Rev. Allergy
-Clinical Reviews in Allergy and Immunology = Clin. Rev. Allergy Immunol.
-Clinical Rheumatology = Clin. Rheumatol.
-Clinical Science = Clin. Sci.
-Clinical Science and Molecular Medicine = Clin. Sci. Mol. Med.
-Clinical Science and Molecular Medicine. Supplement = Clin. Sci. Mol. Med. Suppl.
-Clinical Symposia = Clin. Symp.
-Clinical Techniques in Small Animal Practice = Clin. Tech. Small Anim. Pract.
-Clinical Therapeutics = Clin. Ther.
-Clinical Toxicology = Clin. Toxicol.
-Clinical Transplantation = Clin. Transplant.
-Clinical Transplants = Clin. Transpl.
-Clinical Trials = Clin. Trials
-Clinical Trials Journal = Clin. Trials J.
-Clinical Trials and Meta-Analysis = Clin. Trials Metaanal.
-Clinical and Developmental Immunology = Clin. Dev. Immunol.
-Clinical and Diagnostic Laboratory Immunology = Clin. Diagn. Lab. Immunol.
-Clinical and Diagnostic Virology = Clin. Diagn. Virol.
-Clinical and Experimental Allergy = Clin. Exp. Allergy
-Clinical and Experimental Dermatology = Clin. Exp. Dermatol.
-Clinical and Experimental Dialysis and Apheresis = Clin. Exp. Dial. Apheresis
-Clinical and Experimental Hypertension = Clin. Exp. Hypertens.
-Clinical and Experimental Hypertension. Part A, Theory and Practice = Clin. Exp. Hypertens. A.
-Clinical and Experimental Hypertension. Part B, Hypertension in Pregnancy = Clin. Exp. Hypertens. B.
-Clinical and Experimental Immunology = Clin. Exp. Immunol.
-Clinical and Experimental Medicine = Clin. Exp. Med.
-Clinical and Experimental Metastasis = Clin. Exp. Metastasis
-Clinical and Experimental Neurology = Clin. Exp. Neurol.
-Clinical and Experimental Obstetrics and Gynecology = Clin. Exp. Obstet. Gynecol.
-Clinical and Experimental Ophthalmology = Clin. Experiment. Ophthalmol.
-Clinical and Experimental Pathology = Clin. Exp. Pathol.
-Clinical and Experimental Pharmacology and Physiology = Clin. Exp. Pharmacol. Physiol.
-Clinical and Experimental Pharmacology and Physiology. Supplement = Clin. Exp. Pharmacol. Physiol. Suppl.
-Clinical and Experimental Rheumatology = Clin. Exp. Rheumatol.
-Clinical and Investigative Medicine = Clin. Invest. Med.
-Clinical and Laboratory Haematology = Clin. Lab. Haematol.
-Clinical and Translational Oncology = Clin. Transl. Oncol.
-Clinical and Vaccine Immunology = Clin. Vaccine Immunol.
-Clinics = Clinics
-Clinics in Chest Medicine = Clin. Chest Med.
-Clinics in Communication Disorders = Clin. Commun. Disord.
-Clinics in Dermatology = Clin. Dermatol.
-Clinics in Diagnostic Ultrasound = Clin. Diagn. Ultrasound
-Clinics in Endocrinology and Metabolism = Clin. Endocrinol. Metab.
-Clinics in Gastroenterology = Clin. Gastroenterol.
-Clinics in Geriatric Medicine = Clin. Geriatr. Med.
-Clinics in Haematology = Clin. Haematol.
-Clinics in Laboratory Medicine = Clin. Lab. Med.
-Clinics in Liver Disease = Clin. Liver Dis.
-Clinics in Obstetrics and Gynaecology = Clin. Obstet. Gynaecol.
-Clinics in Occupational and Environmental Medicine = Clin. Occup. Environ. Med.
-Clinics in Perinatology = Clin. Perinatol.
-Clinics in Plastic Surgery = Clin. Plast. Surg.
-Clinics in Podiatric Medicine and Surgery = Clin. Podiatr. Med. Surg.
-Clinics in Podiatry = Clin. Podiatry
-Clinics in Rheumatic Diseases = Clin. Rheum. Dis.
-Clinics in Sports Medicine = Clin. Sports Med.
-Clinique = Clinique (Paris)
-Clio Medica = Clio Med.
-Cloning = Cloning
-Cloning and Stem Cells = Cloning Stem Cells
-Coal Preparation (Philadelphia, PA, United States)=Coal Prep. (Philadelphia, PA, U. S.);COAPDY;6/YR
-Coeur et Medecine Interne = Coeur Med. Interne
-Cognition = Cognition
-Cognitive Behaviour Therapy = Cogn. Behav. Ther.
-Cognitive Psychology = Cognit. Psychol.
-Cognitive and Behavioral Neurology = Cogn. Behav. Neurol.
-Cognitive, Affective and Behavioral Neuroscience = Cogn. Affect. Behav. Neurosci.
-Cold Spring Harbor Symposia on Quantitative Biology = Cold Spring Harb. Symp. Quant. Biol.
-Collagen and Related Research = Coll. Relat. Res.
-Collected Works on Cardiopulmonary Disease = Coll. Works Cardiopulm. Dis.
-Collection of Czechoslovak Chemical Communications=Collect. Czech. Chem. Commun.;CCCCAK;M
-College Review = Coll. Rev.
-Collegian = Collegian
-Collegium Antropologicum = Coll. Antropol.
-Colloid Journal=Colloid J.;CJRSEQ;BM
-Colloid and Polymer Science=Colloid Polym. Sci.;CPMSB6;M
-Colloids and Surfaces, A: Physicochemical and Engineering Aspects=Colloids Surf., A;CPEAEH;24/YR
-Colloids and Surfaces, B: Biointerfaces=Colloids Surf., B;CSBBEQ;28/YR
-Colorado Medicine = Colo. Med.
-Colorado Nurse = Colo. Nurse
-Coloration Technology=Color. Technol.;CTOEAZ;BM
-Columbia Law Review = Columbia Law Rev.
-Columbus Dental Society Bulletin = Columbus Dent. Soc. Bull.
-Combinatorial Chemistry and High Throughput Screening = Comb. Chem. High Throughput Screen.
-Combustion Science and Technology=Combust. Sci. Technol.;CBSTB9;M
-Combustion and Flame=Combust. Flame;CBFMAO;M
-Comments on Inorganic Chemistry=Comments Inorg. Chem.;COICDZ;BM
-Commitment = Commitment
-Communicable Disease Report. CDR Review = Commun. Dis. Rep. CDR Rev.
-Communicable Disease Report. CDR Supplement = Comun. Dis. Rep. CDR Suppl.
-Communicable Disease Report. CDR Weekly = Commun. Dis. Rep. CDR Wkly.
-Communicable Disease and Public Health = Commun. Dis. Public Health
-Communicable Diseases Intelligence = Commun. Dis. Intell.
-Communicating Nursing Research = Commun. Nurs. Res.
-Communication and Medicine = Commun. Med.
-Communications in Agricultural and Applied Biological Sciences = Commun. Agric. Appl. Biol. Sci.
-Communications in Behavioral Biology. Part A, Original Articles = Commun. Behav. Biol.
-Communications in Psychopharmacology = Commun. Psychopharmacol.
-Communications in Soil Science and Plant Analysis=Commun. Soil Sci. Plant Anal.;CSOSA2;20/YR
-Communications on Pure and Applied Mathematics = Commun. Pure Appl. Math.
-Communique = Communique
-Communique Newsletter = Commun. Newsl.
-Community Dental Health = Community Dent. Health
-Community Dentistry and Oral Epidemiology = Community Dent. Oral Epidemiol.
-Community Health = Community Health (Bristol)
-Community Health Studies = Community Health Stud.
-Community Medicine = Community Med.
-Community Mental Health Journal = Community Ment. Health J.
-Community Mental Health Review = Community Ment. Health Rev.
-Community Nurse = Community Nurse
-Community Nursing = Community Nurs.
-Community Outlook = Community Outlook
-Community and Junior College Journal = Community Jr. Coll. J.
-Comparative Biochemistry and Physiology = Comp. Biochem. Physiol.
-Comparative Biochemistry and Physiology, Part A: Molecular & Integrative Physiology=Comp. Biochem. Physiol., Part A: Mol. Integr. Physiol.;CBPAB5;M
-Comparative Biochemistry and Physiology, Part B: Biochemistry & Molecular Biology=Comp. Biochem. Physiol., Part B: Biochem. Mol. Biol.;CBPBB8;M
-Comparative Biochemistry and Physiology, Part C: Toxicology & Pharmacology=Comp. Biochem. Physiol., Part C: Toxicol. Pharmacol.;CBPPFK;M
-Comparative Biochemistry and Physiology. A, Comparative Physiology = Comp. Biochem. Physiol. A
-Comparative Biochemistry and Physiology. B, Comparative Biochemistry = Comp. Biochem. Physiol. B
-Comparative Biochemistry and Physiology. Biochemistry and Molecular Biology = Comp. Biochem. Physiol. Biochem. Mol. Biol.
-Comparative Biochemistry and Physiology. C, Comparative Pharmacology = Comp. Biochem. Physiol. C
-Comparative Biochemistry and Physiology. C, Comparative Pharmacology and Toxicology. = Comp. Biochem. Physiol. C
-Comparative Biochemistry and Physiology. Comparative Physiology = Comp. Biochem. Physiol. Comp. Physiol.
-Comparative Biochemistry and Physiology. Part A, Molecular and Integrative Physiology = Comp. Biochem. Physiol. A. Mol. Integr. Physiol.
-Comparative Biochemistry and Physiology. Part A, Physiology = Comp. Biochem. Physiol. A Physiol.
-Comparative Biochemistry and Physiology. Part B, Biochemistry and Molecular Biology = Comp. Biochem. Physiol. B Biochem. Mol. Biol.
-Comparative Biochemistry and Physiology. Part C, Pharmacology, Toxicology and Endocrinology = Comp. Biochem. Physiol. C Pharmacol. Toxicol. Endocrinol.
-Comparative Biochemistry and Physiology. Pharmacology, Toxicology and Endocrinology = Comp. Biochem. Physiol. Pharmacol. Toxicol. Endocrinol.
-Comparative Biochemistry and Physiology. Physiology = Comp. Biochem. Physiol. Physiol.
-Comparative Biochemistry and Physiology. Toxicology and Pharmacology = Comp. Biochem. Physiol. C Toxicol. Pharmacol.
-Comparative Immunology, Microbiology and Infectious Diseases = Comp. Immunol. Microbiol. Infect. Dis.
-Comparative Medicine = Comp. Med.
-Comparative Medicine East and West = Comp. Med. East West
-Comparative and Functional Genomics=Comp. Funct. Genomics;CFGOAT;8/YR
-Comparative and General Pharmacology = Comp. Gen. Pharmacol.
-Compendium = Compendium
-Compendium of Continuing Education in Dentistry = Compend. Contin. Educ. Dent.
-Compendium. Supplement = Compend. Suppl.
-Compensation Review = Compens. Rev.
-Compensation and Benefits Review = Compens. Benefits Rev.
-Complement = Complement
-Complement and Inflammation = Complement Inflamm.
-Complementary Therapies in Medicine = Complement. Ther. Med.
-Complementary Therapies in Nursing and Midwifery = Complement. Ther. Nurs. Midwifery
-Comprehensive Gerontology. Section A, Clinical and Laboratory Sciences = Compr. Gerontol. [A]
-Comprehensive Gerontology. Section B, Behavioural, Social and Applied Sciences = Compr. Gerontol. [B]
-Comprehensive Gerontology. Section C, Interdisciplinary Topics = Compr. Gerontol. [C]
-Comprehensive Psychiatry = Compr. Psychiatry
-Comprehensive Therapy = Compr. Ther.
-Comptes Rendus Biologies = C. R. Biol.
-Comptes Rendus Chimie=C. R. Chim.;CRCOCR;M
-Comptes Rendus Hebdomadaires des Seances de l'Academie des Sciences. D, Sciences Naturelles = C. R. Acad. Sci. Hebd. Seances Acad. Sci. D
-Comptes Rendus Physique=C. R. Phys.;CRPOBN;10/YR
-Comptes Rendus de l Association des Anatomistes = C. R. Assoc. Anat.
-Comptes Rendus de l'Academie des Sciences. Serie III, Sciences de la Vie = C. R. Acad. Sci. III
-Comptes Rendus des Seances de l Academie des Sciences. Serie III, Sciences de la Vie = C. R. Seances Acad. Sci. III
-Comptes Rendus des Seances de l'Academie des Sciences. Serie D, Sciences Naturelles = C. R. Seances Acad. Sci. D.
-Comptes Rendus des Seances de la Societe de Biologie et de Ses Filiales = C. R. Seances Soc. Biol. Fil.
-Comptes Rendus des Travaux du Laboratoire Carlsberg = C. R. Trav. Lab. Carlsberg
-Computational Biology and Chemistry = Comput. Biol. Chem.
-Computer Aided Surgery = Comput. Aided Surg.
-Computer Applications in the Biosciences = Comput. Appl. Biosci.
-Computer Methods and Programs in Biomedicine = Comput. Methods Programs Biomed.
-Computer Methods in Biomechanics and Biomedical Engineering = Comput. Methods Biomech. Biomed. Engin.
-Computer Physics Communications=Comput. Phys. Commun.;CPHCBZ;SM
-Computer Programs in Biomedicine = Comput. Programs Biomed.
-Computerized Medical Imaging and Graphics = Comput. Med. Imaging Graph.
-Computerized Radiology = Comput. Radiol.
-Computerized Tomography = Comput. Tomogr.
-Computers & Chemical Engineering=Comput. Chem. Eng.;CCENDW;M
-Computers and Biomedical Research = Comput. Biomed. Res.
-Computers and Chemistry = Comput. Chem.
-Computers in Biology and Medicine = Comput. Biol. Med.
-Computers in Healthcare = Comput. Healthc.
-Computers in Hospitals = Comput. Hosp.
-Computers in Nursing = Comput. Nurs.
-Computers, Informatics, Nursing = Comput. Inform. Nurs.
-Computertomographie = Computertomographie
-Comunicaciones presentadas a las Jornadas del Comite Espanol de la Detergencia=Comun. Jorn. Com. Esp. Deterg.;CJCDD7;A
-Concepts in Immunopathology = Concepts Immunopathol.
-Concern = Concern
-Concern in Care of the Aging = Concern Care Aging
-Concours Medical = Concours Med.
-Conditional Reflex = Cond. Reflex
-Conector = Conector
-Confederation of the Australian Critical Care Nurses Journal = Confed. Aust. Crit. Care Nurses J.
-Confinia Neurologica = Confin. Neurol.
-Confinia Psychiatrica = Confin. Psychiatr.
-Confrontations Radio-Anatomo-Cliniques = Confront. Radio. Anat. Clin.
-Congestive Heart Failure = Congest. Heart Fail.
-Congres International de Stomatologie = Congr. Int. Stomatol.
-Connecticut Dental Student Journal = Conn. Dent. Stud. J.
-Connecticut Medicine = Conn. Med.
-Connecticut Nursing News = Conn. Nurs. News
-Connective Tissue Research = Connect. Tissue Res.
-Consciousness and Cognition = Conscious. Cogn.
-Consensus Development Conference Summaries, National Institutes of Health = Consens. Dev. Conf. Summ. Natl. Inst. Health
-Consensus Statement = Consens. Statement
-Consultant = Consultant
-Consulting-Specifying Engineer = Consult. Specif. Eng.
-Consumer Health Perspectives = Consum. Health Perspect.
-Consumer Reports = Consum. Rep.
-Contact Dermatitis = Contact Dermatitis
-Contact Point = Contact Point
-Contact and Intraocular Lens Medical Journal = Contact Intraocul. Lens Med. J.
-Contamination Control = Contam. Control
-Contemporary Administrator = Contemp. Adm.
-Contemporary Administrator for Long-Term Care = Contemp. Adm. Long. Term Care
-Contemporary Anesthesia Practice = Contemp. Anesth. Pract.
-Contemporary Clinical Trials = Contemp. Clin. Trials
-Contemporary Educational Psychology = Contemp. Educ. Psychol.
-Contemporary Internal Medicine = Contemp. Intern. Med.
-Contemporary Issues in Clinical Biochemistry = Contemp. Issues Clin. Biochem.
-Contemporary Longterm Care = Contemp. Longterm Care
-Contemporary Neurology Series = Contemp. Neurol. Ser.
-Contemporary Nurse = Contemp. Nurse
-Contemporary Orthopaedics = Contemp. Orthop.
-Contemporary Pediatrics = Contemp. Pediatr.
-Contemporary Pharmacy Practice = Contemp. Pharm. Pract.
-Contemporary Surgery = Contemp. Surg.
-Contemporary Topics in Immunobiology = Contemp. Top. Immunobiol.
-Contemporary Topics in Laboratory Animal Science=Contemp. Top. Lab. Anim. Sci.;CTLAA8;BM
-Contemporary Topics in Molecular Immunology = Contemp. Top. Mol. Immunol.
-Contemporary Urology = Contemp. Urol.
-Continental Shelf Research = Cont. Shelf Res.
-Continuing Care = Contin. Care
-Continuum = Continuum
-Contraception = Contraception
-Contraception, Fertilite, Sexualite = Contracept. Fertil. Sex. (Paris)
-Contract = Contract
-Contract Design = Contract Des.
-Contract Healthcare = Contract Healthc.
-Contract Interiors = Contract Inter.
-Contributions to Atmospheric Physics = Contrib. Atmos. Phys.
-Contributions to Gynecology and Obstetrics = Contrib. Gynecol. Obstet.
-Contributions to Microbiology = Contrib. Microbiol.
-Contributions to Microbiology and Immunology = Contrib. Microbiol. Immunol.
-Contributions to Mineralogy and Petrology=Contrib. Mineral. Petrol.;CMPEAP;M
-Contributions to Nephrology = Contrib. Nephrol.
-Contributions to Primatology = Contrib. Primatol.
-Contributions to Sensory Physiology = Contrib. Sens. Physiol.
-Controlled Clinical Trials = Control. Clin. Trials
-Convulsive Therapy = Convuls. Ther.
-Cooperador Dental = Coop. Dent. (B. Aires)
-Coordination Chemistry Reviews=Coord. Chem. Rev.;CCHRAM;M
-Cor et Vasa = Cor Vasa
-Cornea = Cornea
-Cornell Hotel and Restaurant Administration Quarterly = Cornell Hotel Restaur. Adm. Q.
-Cornell Journal of Law and Public Policy = Cornell J. Law Public Policy
-Cornell Law Review = Cornell Law Rev.
-Cornell Veterinarian = Cornell Vet.
-Coronary Artery Disease = Coron. Artery Dis.
-Corporate Commentary = Corp. Comment.
-Corps Medical = Corps Med. (Ettelbruck)
-Corrosion (Houston, TX, United States)=Corrosion (Houston, TX, U. S.);CORRAK;M
-Corrosion Engineering, Science and Technology=Corros. Eng., Sci. Technol.;CESTBU;Q
-Corrosion Reviews=Corros. Rev.;CORVE2;Q
-Corrosion Science=Corros. Sci.;CRRSAA;M
-Cortex = Cortex
-Cosmetologica = Cosmetologica
-Cost Containment = Cost Containment
-Cost and Quality Quarterly Journal = Cost Qual. Q. J.
-Cranio = Cranio
-Cranio Clinics International = Cranio Clin. Int.
-Creative Nursing = Creat. Nurs.
-Crisis = Crisis
-Critical Care = Crit. Care
-Critical Care Clinics = Crit. Care Clin.
-Critical Care Medicine = Crit. Care Med.
-Critical Care Nurse = Crit. Care Nurse
-Critical Care Nursing Clinics of North America = Crit. Care Nurs. Clin. North Am.
-Critical Care Nursing Quarterly = Crit. Care Nurs. Q.
-Critical Care Update = Crit. Care Update
-Critical Reviews in Analytical Chemistry=Crit. Rev. Anal. Chem.;CCACBB;Q
-Critical Reviews in Biochemistry and Molecular Biology = Crit. Rev. Biochem. Mol. Biol.
-Critical Reviews in Biomedical Engineering = Crit. Rev. Biomed. Eng.
-Critical Reviews in Biotechnology = Crit. Rev. Biotechnol.
-Critical Reviews in Clinical Laboratory Sciences = Crit. Rev. Clin. Lab. Sci.
-Critical Reviews in Computed Tomography = Crit. Rev. Comput. Tomogr.
-Critical Reviews in Diagnostic Imaging = Crit. Rev. Diagn. Imaging
-Critical Reviews in Eukaryotic Gene Expression = Crit. Rev. Eukaryot. Gene Expr.
-Critical Reviews in Food Science and Nutrition = Crit. Rev. Food Sci. Nutr.
-Critical Reviews in Immunology = Crit. Rev. Immunol.
-Critical Reviews in Medical Informatics = Crit. Rev. Med. Inform.
-Critical Reviews in Microbiology = Crit. Rev. Microbiol.
-Critical Reviews in Neurobiology = Crit. Rev. Neurobiol.
-Critical Reviews in Oncogenesis = Crit. Rev. Oncog.
-Critical Reviews in Oncology/Hematology = Crit. Rev. Oncol. Hematol.
-Critical Reviews in Oral Biology and Medicine = Crit. Rev. Oral Biol. Med.
-Critical Reviews in Solid State and Materials Sciences=Crit. Rev. Solid State Mater. Sci.;CCRSDA;Q
-Critical Reviews in Therapeutic Drug Carrier Systems = Crit. Rev. Ther. Drug Carrier Syst.
-Critical Reviews in Toxicology = Crit. Rev. Toxicol.
-Croatian Medical Journal = Croat. Med. J.
-Croatica Chemica Acta=Croat. Chem. Acta;CCACAA;Q
-Cross-Reference = Crossreference.
-Cross-Reference on Human Resources Management = Crossref. Hum. Resour. Manage.
-Cryobiology = Cryobiology
-Cryogenics=Cryogenics;CRYOAX;M
-CrystEngComm=CrystEngComm;CRECF4;IRR
-Crystal Growth & Design=Cryst. Growth Des.;CGDEFU;BM
-Crystal Research and Technology=Cryst. Res. Technol.;CRTEDF;12/YR
-Crystallography Reports=Crystallogr. Rep.;CYSTE3;BM
-Cuihua Xuebao=Cuihua Xuebao;THHPD3;M
-Cultural Diversity and Ethnic Minority Psychology = Cultur. Divers. Ethnic Minor. Psychol.
-Culture, Medicine and Psychiatry = Cult. Med. Psychiatry
-Cuore e Circolazione = Cuore Circ.
-Curationis = Curationis
-Current Allergy Reports = Curr. Allergy Rep.
-Current Allergy and Asthma Reports = Curr. Allergy Asthma Rep.
-Current Alzheimer Research = Curr. Alzheimer Res.
-Current Analytical Chemistry=Curr. Anal. Chem.;CACUBR;3/YR
-Current Atherosclerosis Reports = Curr. Atheroscler. Rep.
-Current Biology = Curr. Biol.
-Current Cancer Drug Targets = Curr. Cancer Drug Targets
-Current Cardiology Reports = Curr. Cardiol. Rep.
-Current Clinical Topics in Infectious Diseases = Curr. Clin. Top. Infect. Dis.
-Current Computer-Aided Drug Design=Curr. Comput.-Aided Drug Des.;CCDDAS;4/YR
-Current Concepts in Hospital Pharmacy Management = Curr. Concepts Hosp. Pharm. Manage.
-Current Concepts in Nutrition = Curr. Concepts Nutr.
-Current Developments in Psychopharmacology = Curr. Dev. Psychopharmacol.
-Current Diabetes Reports = Curr. Diab. Rep.
-Current Directions in Autoimmunity = Curr. Dir. Autoimmun.
-Current Drug Delivery = Curr. Drug Deliv.
-Current Drug Discovery Technologies = Curr. Drug Discov. Technol.
-Current Drug Metabolism = Curr. Drug Metab.
-Current Drug Targets = Curr. Drug Targets
-Current Drug Targets: CNS & Neurological Disorders=Curr. Drug Targets: CNS Neurol. Disord.;CDTCCC;6/YR
-Current Drug Targets: Cardiovascular & Haematological Disorders=Curr. Drug Targets: Cardiovasc. & Haematol. Disord.;CDTCBB;6/YR
-Current Drug Targets: Immune, Endocrine and Metabolic Disorders=Curr. Drug Targets: Immune, Endocr. Metab. Disord.;CDTIBT;4/YR
-Current Drug Targets: Infectious Disorders=Curr. Drug Targets: Infect. Disord.;CDTIAS;Q
-Current Drug Targets: Inflammation & Allergy=Curr. Drug Targets: Inflammation Allergy;CDTICU;BM
-Current Enzyme Inhibition=Curr. Enzyme Inhib.;CEIUAG;3/YR
-Current Eye Research = Curr. Eye Res.
-Current Gastroenterology Reports = Curr. Gastroenterol. Rep.
-Current Gene Therapy = Curr. Gene Ther.
-Current Genetics = Curr. Genet.
-Current Genomics=Curr. Genomics;CGUEA8;8/YR
-Current HIV Research = Curr. HIV Res.
-Current HIV/AIDS Reports = Curr. HIV/AIDS Rep.
-Current Heart Failure Reports = Curr. Heart Fail. Rep.
-Current Hematologic Malignancy Reports = Curr. Hematol. Malig. Rep.
-Current Hypertension Reports = Curr. Hypertens. Rep.
-Current Immunology Reviews=Curr. Immunol. Rev.;CIRUBM;3/YR
-Current Issues in Intestinal Microbiology = Curr. Issues Intest. Microbiol.
-Current Issues in Molecular Biology = Curr. Issues Mol. Biol.
-Current Medical Research and Opinion = Curr. Med. Res. Opin.
-Current Medicinal Chemistry = Curr. Med. Chem.
-Current Medicinal Chemistry: Anti-Cancer Agents=Curr. Med. Chem.: Anti-Cancer Agents;CMCACI;BM
-Current Medicinal Chemistry: Anti-Infective Agents=Curr. Med. Chem.: Anti-Infect. Agents;CMCAFL;4/YR
-Current Medicinal Chemistry: Anti-Inflammatory & Anti-Allergy Agents=Curr. Med. Chem.: Anti-Inflammatory Anti-Allergy Agents;CMCAGM;6/YR
-Current Medicinal Chemistry: Cardiovascular & Hematological Agents=Curr. Med. Chem.: Cardiovasc. Hematol. Agents;CMCCDP;4/YR
-Current Medicinal Chemistry: Central Nervous System Agents=Curr. Med. Chem.: Cent. Nerv. Syst. Agents;CMCCCO;Q
-Current Medicinal Chemistry: Immunology, Endocrine & Metabolic Agents=Curr. Med. Chem.: Immunol., Endocr. Metab. Agents;CMCIC8;6/YR
-Current Medicine and Drugs = Curr. Med. Drugs
-Current Microbiology = Curr. Microbiol.
-Current Molecular Medicine = Curr. Mol. Med.
-Current Neurology and Neuroscience Reports = Curr. Neurol. Neurosci. Rep.
-Current Neuropharmacology=Curr. Neuropharmacol.;CNUEAN;Q
-Current Neurovascular Research = Curr. Neurovasc. Res.
-Current Oncology Reports = Curr. Oncol. Rep.
-Current Opinion in Allergy and Clinical Immunology = Curr. Opin. Allergy Clin. Immunol.
-Current Opinion in Biotechnology = Curr. Opin. Biotechnol.
-Current Opinion in Cardiology = Curr. Opin. Cardiol.
-Current Opinion in Cell Biology = Curr. Opin. Cell Biol.
-Current Opinion in Chemical Biology = Curr. Opin. Chem. Biol.
-Current Opinion in Clinical Nutrition and Metabolic Care = Curr. Opin. Clin. Nutr. Metab. Care
-Current Opinion in Colloid & Interface Science=Curr. Opin. Colloid Interface Sci.;COCSFL;BM
-Current Opinion in Cosmetic Dentistry = Curr. Opin. Cosmet. Dent.
-Current Opinion in Dentistry = Curr. Opin. Dent.
-Current Opinion in Drug Discovery & Development=Curr. Opin. Drug Discovery Dev.;CODDFF;BM
-Current Opinion in Drug Discovery and Development = Curr. Opin. Drug Discov. Devel.
-Current Opinion in General Surgery = Curr. Opin. Gen. Surg.
-Current Opinion in Genetics & Development=Curr. Opin. Genet. Dev.;COGDET;BM
-Current Opinion in Genetics and Development = Curr. Opin. Genet. Dev.
-Current Opinion in Hematology = Curr. Opin. Hematol.
-Current Opinion in Immunology = Curr. Opin. Immunol.
-Current Opinion in Investigational Drugs = Curr. Opin. Investig. Drugs
-Current Opinion in Lipidology = Curr. Opin. Lipidol.
-Current Opinion in Microbiology = Curr. Opin. Microbiol.
-Current Opinion in Molecular Therapeutics = Curr. Opin. Mol. Ther.
-Current Opinion in Nephrology and Hypertension = Curr. Opin. Nephrol. Hypertens.
-Current Opinion in Neurobiology = Curr. Opin. Neurobiol.
-Current Opinion in Neurology = Curr. Opin. Neurol.
-Current Opinion in Neurology and Neurosurgery = Curr. Opin. Neurol. Neurosurg.
-Current Opinion in Obstetrics and Gynecology = Curr. Opin. Obstet. Gynecol.
-Current Opinion in Oncology = Curr. Opin. Oncol.
-Current Opinion in Ophthalmology = Curr. Opin. Ophthalmol.
-Current Opinion in Pediatrics = Curr. Opin. Pediatr.
-Current Opinion in Periodontology = Curr. Opin. Periodontol.
-Current Opinion in Pharmacology = Curr. Opin. Pharmacol.
-Current Opinion in Plant Biology = Curr. Opin. Plant Biol.
-Current Opinion in Pulmonary Medicine = Curr. Opin. Pulm. Med.
-Current Opinion in Radiology = Curr. Opin. Radiol.
-Current Opinion in Rheumatology = Curr. Opin. Rheumatol.
-Current Opinion in Structural Biology = Curr. Opin. Struct. Biol.
-Current Organic Chemistry=Curr. Org. Chem.;CORCFE;18/YR
-Current Organic Synthesis=Curr. Org. Synth.;COSUC2;4/YR
-Current Osteoporosis Reports = Curr. Osteoporos. Rep.
-Current Pain and Headache Reports = Curr. Pain Headache Rep.
-Current Pharmaceutical Analysis=Curr. Pharm. Anal.;CPAUBK;3/YR
-Current Pharmaceutical Biotechnology = Curr. Pharm. Biotechnol.
-Current Pharmaceutical Design = Curr. Pharm. Des.
-Current Pharmacogenomics=Curr. Pharmacogenomics;CPUHAC;Q
-Current Population Reports. Special Censuses. Series P-28 = Curr. Popul. Rep. [Spec. Censuses]
-Current Practice in Gerontological Nursing = Curr. Pract. Gerontol. Nurs.
-Current Practice in Obstetric and Gynecologic Nursing = Curr. Pract. Obstet. Gynecol. Nurs.
-Current Practice in Orthopaedic Surgery = Curr. Pract. Orthop. Surg.
-Current Practice in Pediatric Nursing = Curr. Pract. Pediatr. Nurs.
-Current Problems in Cancer = Curr. Probl. Cancer
-Current Problems in Cardiology = Curr. Probl. Cardiol.
-Current Problems in Clinical Biochemistry = Curr. Probl. Clin. Biochem.
-Current Problems in Dermatology = Curr. Probl. Dermatol.
-Current Problems in Diagnostic Radiology = Curr. Probl. Diagn. Radiol.
-Current Problems in Pediatric and Adolescent Health Care = Curr. Probl. Pediatr. Adolesc. Health Care
-Current Problems in Pediatrics = Curr. Probl. Pediatr.
-Current Problems in Surgery = Curr. Probl. Surg.
-Current Protein and Peptide Science = Curr. Protein Pept. Sci.
-Current Proteomics=Curr. Proteomics;CPURCA;4/YR
-Current Psychiatric Therapies = Curr. Psychiatr. Ther.
-Current Psychiatry Reports = Curr. Psychiatry Rep.
-Current Rheumatology Reports = Curr. Rheumatol. Rep.
-Current Science = Curr. Sci.
-Current Separations=Curr. Sep.;CUSEEW;IRR
-Current Sports Medicine Reports = Curr. Sports Med. Rep.
-Current Studies in Hematology and Blood Transfusion = Curr. Stud. Hematol. Blood Transfus.
-Current Surgery = Curr. Surg.
-Current Therapeutic Research, Clinical and Experimental = Curr. Ther. Res. Clin. Exp.
-Current Therapy in Endocrinology and Metabolism = Curr. Ther. Endocrinol. Metab.
-Current Topics in Cellular Regulation = Curr. Top. Cell. Regul.
-Current Topics in Comparative Pathobiology = Curr. Top. Comp. Pathobiol.
-Current Topics in Developmental Biology = Curr. Top. Dev. Biol.
-Current Topics in Experimental Endocrinology = Curr. Top. Exp. Endocrinol.
-Current Topics in Eye Research = Curr. Top. Eye Res.
-Current Topics in Hematology = Curr. Top. Hematol.
-Current Topics in Medical Mycology = Curr. Top. Med. Mycol.
-Current Topics in Medicinal Chemistry = Curr. Top. Med. Chem.
-Current Topics in Medicinal Chemistry (Sharjah, United Arab Emirates)=Curr. Top. Med. Chem. (Sharjah, United Arab Emirates);CTMCCL;16/YR
-Current Topics in Microbiology and Immunology = Curr. Top. Microbiol. Immunol.
-Current Topics in Molecular Endocrinology = Curr. Top. Mol. Endocrinol.
-Current Topics in Pathology = Curr. Top. Pathol.
-Current Topics in Radiation Research Quarterly = Curr. Top. Radiat. Res. Q.
-Current Treatment Options in Oncology = Curr. Treat. Options Oncol.
-Current Urology Reports = Curr. Urol. Rep.
-Current Vascular Pharmacology = Curr. Vasc. Pharmacol.
-Current Women's Health Reports = Curr. Womens Health Rep.
-Currents in Alcoholism = Curr. Alcohol.
-Currents in Modern Biology = Curr. Mod. Biol.
-Cutaneous and Ocular Toxicology = Cutan. Ocul. Toxicol.
-Cutis = Cutis
-Cyberpsychology and Behavior = Cyberpsychol. Behav.
-Cytobiologie = Cytobiologie
-Cytobios = Cytobios
-Cytogenetic and Genome Research = Cytogenet. Genome Res.
-Cytogenetics = Cytogenetics
-Cytogenetics and Cell Genetics = Cytogenet. Cell Genet.
-Cytokine = Cytokine
-Cytokine & Growth Factor Reviews=Cytokine Growth Factor Rev.;CGFRFB;BM
-Cytokine and Growth Factor Reviews = Cytokine Growth Factor Rev.
-Cytokine+=Cytokine+;CYTIE9;24/YR
-Cytokines = Cytokines
-Cytokines and Molecular Therapy = Cytokines Mol. Ther.
-Cytokines, Cellular and Molecular Therapy = Cytokines Cell. Mol. Ther.
-Cytologia = Cytologia (Tokyo)
-Cytometry = Cytometry
-Cytometry. Part A = Cytometry A
-Cytometry. Part B, Clinical Cytometry = Cytometry B Clin. Cytom.
-Cytometry. Supplement = Cytometry. Suppl.
-Cytopathology = Cytopathology
-Cytotechnology = Cytotechnology
-Cytotherapy = Cytotherapy
-Czasopismo Stomatologiczne = Czas. Stomatol.
-Czechoslovak Medicine = Czech. Med.
-DDZ: Das Deutsche Zahnarzteblatt = DDZ.
-DE: Journal of Dental Engineering = DE J. Dent. Eng.
-DICP = DICP
-DNA = DNA
-DNA Repair = DNA Repair
-DNA Research = DNA Res.
-DNA Sequence = DNA Seq.
-DNA and Cell Biology = DNA Cell Biol.
-DP Reports = DP Rep.
-DP: Dental Practice = Dent. Pract. (Ewell)
-DRG Monitor = DRG Monit.
-DTW: Deutsche Tierarztliche Wochenschrift = DTW Dtsch. Tierarztl. Wochenschr.
-Daedalus = Daedalus
-Dakar Medical = Dakar Med.
-Dalhousie Dental Journal = Dalhousie Dent. J.
-Dalton Transactions = Dalton Trans.
-Danish Medical Bulletin = Dan. Med. Bull.
-Dansk Tidsskrift for Farmaci = Dan. Tidsskr. Farm.
-Dapim Refuiim = Dapim Refuiim
-Data Strategies and Benchmarks = Data Strategies Benchmarks
-Deans List = Deans List
-Deans Notes = Deans Notes
-Death Education = Death Educ.
-Death Studies = Death Stud.
-Decubitus = Decubitus
-Deep-Sea Research = Deep-Sea Res.
-Delaware Medical Journal = Del. Med. J.
-Delaware Nurse = Del. Nurse
-Dementia = Dementia
-Dementia and Geriatric Cognitive Disorders = Dement. Geriatr. Cogn. Disord.
-Demography = Demography
-Dens = Dens
-Dens Sapiens = Dens Sapiens
-Dent: Contemporary Dentistry = Dent
-Dentago = Dentago
-Dental Abstracts = Dent. Abstr.
-Dental Anaesthesia and Sedation = Dent. Anaesth. Sedat.
-Dental Angles = Dent. Angles
-Dental Assistant = Dent. Assist.
-Dental Assistant Journal = Dent. Assist. J.
-Dental Assisting = Dent. Assist. (Waco Tx.)
-Dental Cadmos = Dent. Cadmos
-Dental Clinics of North America = Dent. Clin. North Am.
-Dental Concepts = Dent. Concepts
-Dental Delineator = Dent. Delin.
-Dental Dialogue = Dent. Dialogue
-Dental Dienst = Dent. Dienst
-Dental Digest = Dent. Dig.
-Dental Dimensions = Dent. Dimens.
-Dental Discourse = Dent. Discourse
-Dental Echo = Dent. Echo (Heidelb.)
-Dental Economics = Dent. Econ.
-Dental Health = Dent. Health (London)
-Dental Historian = Dent. Hist.
-Dental Hygiene = Dent. Hyg. (Chic.)
-Dental Hygienist = Dent. Hyg. (San Franc.)
-Dental Images = Dent. Images
-Dental Implantology Update = Dent. Implantol. Update
-Dental Journal = Dent. J.
-Dental Journal of Malaysia = Dent. J. Malays.
-Dental Journal of Malaysia and Singapore = Dent. J. Malaysia Singapore
-Dental Journal of Zambia = Dent. J. Zamb.
-Dental Lab Management Today = Dent. Lab Manage. Today
-Dental Labor = Dent. Labor (Munch.)
-Dental Laboratorie Bladet = Dent. Lab. Bl.
-Dental Laboratory Review = Dent. Lab. Rev.
-Dental Magazine and Oral Topics = Dent. Mag. Oral Top.
-Dental Management = Dent. Manage.
-Dental Materials = Dent. Mater.
-Dental Materials Journal = Dent. Mater. J.
-Dental Mirror = Dent. Mirror (Atlanta)
-Dental News = Dent. News (Lond.)
-Dental Office = Dent. Off.
-Dental Outlook = Dent. Outlook
-Dental Practice = Dent. Pract. (Cincinnati)
-Dental Practice Management = Dent. Pract. Manage.
-Dental Practitioner and Dental Record = Dent. Pract. Dent. Rec.
-Dental Press = Dent. Press
-Dental Radiography and Photography = Dent. Radiogr. Photogr.
-Dental School Quarterly, University of Texas Health Science Center at San Antonio = Dent. Sch. Q.
-Dental Student = Dent. Stud.
-Dental Survey = Dent. Surv.
-Dental Team = Dent. Team
-Dental Teamwork = Dent. Teamwork
-Dental Technician = Dent. Tech.
-Dental Therapeutics Newsletter = Dent. Ther. Newsl.
-Dental Update = Dent. Update
-Dental World = Dent. World
-Dental-Revue = Dent. Rev.
-Dentalhygienistnews = Dentalhygienistnews
-Dentalpractice = Dentalpractice
-Dentessence = Dentessence
-Dentist = Dentist
-Dentist News = Dent. News
-Dentistry = Dentistry
-Dentistry Today = Dent. Today
-Dentistry in Japan = Dent. Jpn. (Tokyo)
-Dentisuto (Dentist) = Dentisuto.
-Dento-Maxillo-Facial Radiology = Dentomaxillofac. Radiol.
-Dento-Maxillo-Facial Radiology. Supplement = Dentomaxillofac. Radiol. Suppl.
-Dentoral = Dentoral (Istanbul)
-Dentoscope = Dentoscope
-Depression = Depression
-Depression and Anxiety = Depress. Anxiety
-Dermatitis = Dermatitis
-Dermatologia Internationalis = Dermatol. Int.
-Dermatologic Clinics = Dermatol. Clin.
-Dermatologic Surgery = Dermatol. Surg.
-Dermatologica = Dermatologica
-Dermatologische Monatsschrift = Dermatol. Monatsschr.
-Dermatologische Wochenschrift = Dermatol. Wochenschr.
-Dermatology = Dermatology
-Dermatology Nursing = Dermatol. Nurs.
-Dermatology Online Journal = Dermatol. Online J.
-Dermatosen in Beruf und Umwelt (Occupational and Environmental Dermatoses) = Derm. Beruf Umwelt
-Desalination=Desalination;DSLNAH;36/YR
-Designed Monomers and Polymers=Des. Monomers Polym.;DMPOF3;6/YR
-Desmos = Desmos
-Detroit Dental Bulletin = Detroit Dent. Bull.
-Deutsche Apotheker Zeitung = Dtsch. Apoth. Ztg.
-Deutsche Gesundheitswesen = Dtsch. Gesundheitsw.
-Deutsche Hydrographische Zeitschrift = Dtsch. Hydrogr. Z.
-Deutsche Krankenpflegezeitschrift = Dtsch. Krankenpflegez.
-Deutsche Medizinische Wochenschrift = Dtsch. Med. Wochenschr.
-Deutsche Schwesternzeitung = Dtsch. Schwesternztg.
-Deutsche Stomatologie = Dtsch. Stomatol.
-Deutsche Tierarztliche Wochenschrift = Dtsch. Tierarztl. Wochenschr.
-Deutsche Zahn-, Mund- und Kieferheilkunde mit Zentralblatt fur die Gesamte Zahn-, Mund- und Kieferheilkunde = Dtsch. Zahn Mund Kieferheilkd. Zentralbl. Gesamte
-Deutsche Zahn-, Mund-, und Kieferheilkunde mit Zentralblatt = Dtsch. Zahn Mund Kieferheilkd. Zentralbl.
-Deutsche Zahnarztliche Zeitschrift = Dtsch. Zahnarztl. Z.
-Deutsche Zeitschrift fur Mund-, Kiefer-, und Gesichts-Chirurgie = Dtsch. Z. Mund Kiefer Gesichtschir.
-Deutsche Zeitschrift fur Nervenheilkunde = Dtsch. Z. Nervenheilkd.
-Deutsche Zeitschrift fur Verdauungs- und Stoffwechselkrankheiten = Dtsch. Z. Verdau. Stoffwechselkr.
-Deutsche Zeitschrift fur die Gesamte Gerichtliche Medizin = Dtsch. Z. Gesamte Gerichtl. Med.
-Deutsches Archiv fur Klinische Medizin = Dtsch. Arch. Klin. Med.
-Deutsches Medizinisches Journal = Dtsch. Med. J.
-Deutsches Zentralblatt fur Krankenpflege = Dtsch. Zentralbl. Krankenpfl.
-Development = Development
-Development (Cambridge, United Kingdom)=Development (Cambridge, U. K.);DEVPED;SM
-Development Genes and Evolution = Dev. Genes Evol.
-Development Growth and Differentiation = Dev. Growth Differ.
-Development and Psychopathology = Dev. Psychopathol.
-Development. Supplement = Dev. Suppl.
-Developmental Biology = Dev. Biol.
-Developmental Biology (San Diego, CA, United States)=Dev. Biol. (San Diego, CA, U. S.);DEBIAO;SM
-Developmental Brain Research=Dev. Brain Res.;DBRRDB;14/YR
-Developmental Cell = Dev. Cell
-Developmental Dynamics = Dev. Dyn.
-Developmental Genetics = Dev. Genet.
-Developmental Immunology = Dev. Immunol.
-Developmental Medicine and Child Neurology = Dev. Med. Child Neurol.
-Developmental Medicine and Child Neurology. Supplement = Dev. Med. Child Neurol. Suppl.
-Developmental Neuroscience = Dev. Neurosci.
-Developmental Neuroscience (Basel, Switzerland)=Dev. Neurosci. (Basel, Switz.);DENED7;BM
-Developmental Pharmacology and Therapeutics = Dev. Pharmacol. Ther.
-Developmental Psychobiology = Dev. Psychobiol.
-Developmental Psychology = Dev. Psychol.
-Developmental Review = Dev. Rev.
-Developmental and Comparative Immunology = Dev. Comp. Immunol.
-Developments in Biological Standardization = Dev. Biol. Stand.
-Developments in Biologicals = Dev. Biol.
-Developments in Biologicals (Basel, Switzerland)=Dev. Biol. (Basel, Switz.);DBEIAI;IRR
-Developments in Health Economics and Public Policy = Dev. Health Econ. Public Policy
-Developments in Ophthalmology = Dev. Ophthalmol.
-Developments in Toxicology and Environmental Science = Dev. Toxicol. Environ. Sci.
-Diabete = Diabete
-Diabetes = Diabetes
-Diabetes Care = Diabetes Care
-Diabetes Educator = Diabetes Educ.
-Diabetes Research = Diabetes Res.
-Diabetes Research and Clinical Practice = Diabetes Res. Clin. Pract.
-Diabetes Research and Clinical Practice. Supplement = Diabetes Res. Clin. Pract. Suppl.
-Diabetes Technology and Therapeutics = Diabetes Technol. Ther.
-Diabetes and Metabolism = Diabetes Metab.
-Diabetes and Vascular Disease Research = Diab. Vasc. Dis. Res.
-Diabetes, Obesity and Metabolism = Diabetes Obes. Metab.
-Diabetes/Metabolism Research and Reviews = Diabetes Metab. Res. Rev.
-Diabetes/Metabolism Reviews = Diabetes. Metab. Rev.
-Diabetic Medicine = Diabet. Med.
-Diabetologia = Diabetologia
-Diagnostic Cytopathology = Diagn. Cytopathol.
-Diagnostic Gynecology and Obstetrics = Diagn. Gynecol. Obstet.
-Diagnostic Histopathology = Diagn. Histopathol.
-Diagnostic Imaging = Diagn. Imaging
-Diagnostic Imaging in Clinical Medicine = Diagn. Imaging Clin. Med.
-Diagnostic Immunology = Diagn. Immunol.
-Diagnostic Microbiology and Infectious Disease = Diagn. Microbiol. Infect. Dis.
-Diagnostic Molecular Pathology = Diagn. Mol. Pathol.
-Diagnostic and Clinical Immunology = Diagn. Clin. Immunol.
-Diagnostic and Interventional Radiology = Diagn. Interv. Radiol.
-Dialog: Fairleigh Dickinson University School of Dentistry = Dialog. Fairleigh Dickinson Univ. Sch. Dent.
-Diamond = Diamond
-Diamond and Related Materials=Diamond Relat. Mater.;DRMTE3;M
-Dianhuaxue=Dianhuaxue;DIANFX;Q
-Diastema = Diastema
-Dicle University Tip Fakultesi Dergisitesi = Dicle Univ. Tip Fakul. Derg.
-Differentiation = Differentiation
-Differentiation (Malden, MA, United States)=Differentiation (Malden, MA, U. S.);DFFNAW;10/YR
-Diffusion and Defect Data--Solid State Data, Pt. A: Defect and Diffusion Forum=Diffus. Defect Data, Pt. A;DDAFE7;12/YR
-Diffusion and Defect Data--Solid State Data, Pt. B: Solid State Phenomena=Diffus. Defect Data, Pt. B;DDBPE8;6/YR
-Digestion = Digestion
-Digestive Diseases = Dig. Dis.
-Digestive Diseases and Sciences = Dig. Dis. Sci.
-Digestive Surgery = Dig. Surg.
-Digestive and Liver Disease = Dig. Liver Dis.
-Digitale Bilddiagnostik = Digitale Bilddiagn.
-Dimensions = Dimensions (Wash.)
-Dimensions in Health Service = Dimens. Health Serv.
-Dimensions in Oncology Nursing = Dimens. Oncol. Nurs.
-Dimensions of Critical Care Nursing = Dimens. Crit. Care Nurs.
-Diqiu Huaxue=Diqiu Huaxue;TCHHCB;BM
-Director = Director
-Directors and Boards = Dir. Boards
-Disability and Rehabilitation = Disabil. Rehabil.
-Disasters = Disasters
-Discharge Planning Update = Disch. Plann. Update
-Discovery Medicine = Discov. Med.
-Discussions of the Faraday Society = Discuss. Faraday Soc.
-Disease Markers = Dis. Markers
-Disease-a-Month = Dis. Mon.
-Diseases of Aquatic Organisms = Dis. Aquat. Organ.
-Diseases of the Chest = Dis. Chest
-Diseases of the Colon and Rectum = Dis. Colon Rectum
-Diseases of the Esophagus = Dis. Esophagus
-Diseases of the Nervous System = Dis. Nerv. Syst.
-Diskussionsforum Medizinische Ethik = Diskussionsforum Med. Ethik
-District Nursing = Dist. Nurs.
-Divulgacion Cultural Odontologica = Divulg. Cult. Odontol.
-Documenta Ophthalmologica = Doc. Ophthalmol.
-Doklady Akademii Nauk = Dokl. Akad. Nauk
-Doklady Akademii Nauk SSSR = Dokl. Akad. Nauk SSSR
-Doklady Biochemistry and Biophysics=Dokl. Biochem. Biophys.;DBBOAL;BM
-Doklady Bolgarskoi Akademii Nauk = Dokl. Bolg. Akad. Nauk
-Doklady Chemistry=Dokl. Chem.;DKCHAY;M
-Doklady Earth Sciences=Dokl. Earth Sci.;DESOAP;9/YR
-Doklady Physical Chemistry=Dokl. Phys. Chem.;DKPCAG;M
-Doklady Physics=Dokl. Phys.;DOPHFU;M
-Doklady. Biochemistry and Biophysics = Dokl. Biochem. Biophys.
-Domestic Animal Endocrinology = Domest. Anim. Endocrinol.
-Dopovidi Natsional'noi Akademii Nauk Ukraini=Dopov. Nats. Akad. Nauk Ukr.;DNAUFL;M
-Drug Delivery=Drug Delivery;DDELEB;BM
-Drug Design and Delivery = Drug Des. Deliv.
-Drug Design and Discovery = Drug Des. Discov.
-Drug Development Research=Drug Dev. Res.;DDREDK;M
-Drug Development and Industrial Pharmacy = Drug Dev. Ind. Pharm.
-Drug Information Journal = Drug Inf. J.
-Drug Intelligence and Clinical Pharmacy = Drug Intell. Clin. Pharm.
-Drug Metabolism Reviews = Drug Metab. Rev.
-Drug Metabolism and Disposition = Drug Metab. Dispos.
-Drug Metabolism and Drug Interactions = Drug Metabol. Drug Interact.
-Drug Metabolism and Pharmacokinetics = Drug Metab. Pharmacokinet.
-Drug Resistance Updates = Drug Resist. Updat.
-Drug Safety = Drug Saf.
-Drug Therapeutics = Drug Ther.
-Drug and Alcohol Dependence = Drug Alcohol Depend.
-Drug and Chemical Toxicology = Drug Chem. Toxicol.
-Drug and Chemical Toxicology (1977)=Drug Chem. Toxicol. (1977);DCTODJ;Q
-Drug and Therapeutics Bulletin = Drug Ther. Bull.
-Drug-Nutrient Interactions = Drug. Nutr. Interact.
-Drugs = Drugs
-Drugs Under Experimental and Clinical Research = Drugs Exp. Clin. Res.
-Drugs and Aging = Drugs Aging
-Drugs in R and D = Drugs R. D.
-Duke Law Journal = Duke Law J.
-Duodecim = Duodecim
-Dyes and Pigments=Dyes Pigm.;DYPIDX;M
-Dynamics of Atmospheres and Oceans = Dyn. Atmos. Oceans
-Dysphagia = Dysphagia
-E-ITV: Educational and Industrial Television = EITV
-EBRI Issue Brief = EBRI Issue Brief
-ED Management = ED Manag.
-EDS Magazine = EDS Mag.
-EDTNA/ERCA Journal = EDNTNA ERCA J.
-EEG-EMG: Zeitschrift fur Elektroenzephalographie, Elektromyographie und Verwandte Gebiete = EEG EMG Z. Elektroenzephalogr. Elektromyogr. Verwandte Geb.
-EMBO Journal = EMBO J.
-EMBO Reports = EMBO Rep.
-EMT Journal = EMT J.
-ENDO = ENDO
-ENLB: Emergency Nurse Legal Bulletin = ENLB Emerg. Nurse Leg. Bull.
-ENO FO = ENO FO
-ENTechnology = Entechnology
-ET Journal = ET J.
-EURO Reports and Studies = EURO Rep. Stud.
-EXS = EXS
-Ear and Hearing = Ear Hear.
-Ear, Nose, and Throat Journal = Ear. Nose. Throat J.
-Early Human Development = Early Hum. Dev.
-Early Pregnancy = Early Pregnancy
-Earth and Planetary Science Letters=Earth Planet. Sci. Lett.;EPSLA2;48/YR
-East African Medical Journal = East Afr. Med. J.
-Eating and Weight Disorders = Eat. Weight Disord.
-Ebony = Ebony
-Echocardiography = Echocardiography
-Ecological Modelling = Ecol. Model.
-Ecology of Disease = Ecol. Dis.
-Economic Geology=Econ. Geol.;EGCEA8;8/YR
-Economic Inquiry = Econ. Inq.
-Economics and Human Biology = Econ. Hum. Biol.
-Ecotoxicology and Environmental Safety = Ecotoxicol. Environ. Saf.
-Edinburgh Dental Hospital Gazette = Edinb. Dent. Hosp. Gaz.
-Educacion Dental = Educ. Dent. (Ica)
-Educacion Medica y Salud = Educ. Med. Salud
-Educational Administration Quarterly = Educ. Adm. Q.
-Educational Directions for Dental Auxiliaries = Educ. Dir. Dent. Aux.
-Educational Directions in Dental Hygiene = Educ. Dir. Dent. Hyg.
-Educational and Industrial Television = Educ. Ind. Telev.
-Effective Clinical Practice = Eff. Clin. Pract.
-Effective Health Care = Eff. Health Care
-Egyptian Dental Journal = Egypt. Dent. J.
-Egyptian Journal of Bilharziasis = Egypt. J. Bilharz.
-Egyptian Journal of Psychiatry = Egypt. J. Psychiatry
-Eicosanoids = Eicosanoids
-Eisei Shikenjo Hokoku (Bulletin of National Institute of Hygienic Sciences) = Eisei Shikenjo Hokoku
-Ekologiia = Ekologiia
-Ekotekhnologii i Resursosberezhenie=Ekotekhnol. Resursosberezhenie;ERKTE4;BM
-Eksperimental'naya i Klinicheskaya Farmakologiya=Eksp. Klin. Farmakol.;EKFAE9;BM
-Eksperimentalna Meditsina i Morfologiia = Eksp. Med. Morfol.
-Eksperimentalnaia Khirurgiia i Anesteziologiia = Eksp. Khir. Anesteziol.
-Eksperimentalnaia Onkologiia = Eksp. Onkol.
-Eksperimentalnaia i Klinicheskaia Farmakologiia = Eksp. Klin. Farmakol.
-Eksperimentalnaia i Klinicheskaia Gastroenterologiia = Eksp. Klin. Gastroenterol.
-Elderly Care = Elder. Care
-Electroanalysis=Electroanalysis;ELANEU;24/YR
-Electrochemical Society Interface=Electrochem. Soc. Interface;ELSIE3;Q
-Electrochemical and Solid-State Letters=Electrochem. Solid-State Lett.;ESLEF6;M
-Electrochemistry (Tokyo, Japan)=Electrochemistry (Tokyo, Jpn.);EECTFA;M
-Electrochemistry Communications=Electrochem. Commun.;ECCMF9;M
-Electrochimica Acta=Electrochim. Acta;ELCAAV;SM
-Electrodiagnostic-Therapie = Electrodiagn. Ther.
-Electroencephalography and Clinical Neurophysiology = Electroencephalogr. Clin. Neurophysiol.
-Electroencephalography and Clinical Neurophysiology. Supplement = Electroencephalogr. Clin. Neurophysiol. Suppl.
-Electromagnetic Biology and Medicine = Electromagn. Biol. Med.
-Electromyography = Electromyography
-Electromyography and Clinical Neurophysiology = Electromyogr. Clin. Neurophysiol.
-Electron Microscopy Reviews = Electron Microsc. Rev.
-Electrophoresis = Electrophoresis
-Elektromedizin, Biomedizin und Technik = Elektromed. Biomed. Tech.
-Embryologia = Embryologia (Nagoya)
-Emergency = Emergency
-Emergency Department News = Emerg. Dep. News
-Emergency Health Services Quarterly = Emerg. Health Serv. Q.
-Emergency Health Services Review = Emerg. Health Serv. Rev.
-Emergency Medical Services = Emerg. Med. Serv.
-Emergency Medicine = Emerg. Med.
-Emergency Medicine Australasia = Emerg. Med. Australas.
-Emergency Medicine Clinics of North America = Emerg. Med. Clin. North Am.
-Emergency Medicine Journal = Emerg. Med. J.
-Emergency Nurse = Emerg. Nurse
-Emergency Planning Digest = Emerg. Plann. Dig.
-Emerging Infectious Diseases = Emerg. Infect. Dis.
-Emotion = Emotion
-Emphasis, Nursing = Emphasis Nurs.
-Employee Benefit Plan Review = Employee Benefit Plan Rev.
-Employee Benefits Journal = Empl. Benefits J.
-Employee Health and Fitness Newsletter = Employee Health Fitness Newsl.
-Employee Relations Law Journal = Employee Relat. Law J.
-Employment Relations Today = Employ. Relat. Today
-Enantiomer = Enantiomer
-Encephale = Encephale
-Endeavour = Endeavour
-Endocrine = Endocrine
-Endocrine Development = Endocr. Dev.
-Endocrine Journal = Endocr. J.
-Endocrine Regulations = Endocr. Regul.
-Endocrine Research = Endocr. Res.
-Endocrine Research Communications = Endocr. Res. Commun.
-Endocrine Reviews = Endocr. Rev.
-Endocrine, Metabolic and Immune Disorders Drug Targets = Endocr. Metab. Immune Disord. Drug Targets
-Endocrinologia Experimentalis = Endocrinol. Exp.
-Endocrinologia Japonica = Endocrinol. Jpn.
-Endocrinologia e Scienza della Costituzione = Endocrinol. Sci. Cost.
-Endocrinologie = Endocrinologie
-Endocrinology = Endocrinology
-Endocrinology and Metabolism Clinics of North America = Endocrinol. Metab. Clin. North Am.
-Endodoncia = Endodoncia (Mex.)
-Endodontic Practice = Endod. Pract.
-Endodontic Report = Endod. Rep.
-Endodontics and Dental Traumatology = Endod. Dent. Traumatol.
-Endokrinologie = Endokrinologie
-Endokrynologia Polska = Endokrynol. Pol.
-Endoscopic Surgery and Allied Technologies = Endosc. Surg. Allied Technol.
-Endoscopy = Endoscopy
-Endothelium = Endothelium
-Energy & Fuels=Energy Fuels;ENFUEM;BM
-Enfermedades Infecciosas y Microbiologia Clinica = Enferm. Infecc. Microbiol. Clin.
-Enfermeria = Enfermeria
-Enfermeria Intensiva = Enferm. Intensiva
-Enfoque = Enfoque
-Engineering in Life Sciences=Eng. Life Sci.;ELSNAE;BM
-Engineering in Medicine = Eng. Med.
-Entomological News = Entomol. News
-Environ. Chem. Preprints of Extended Abstracts presented at the ACS National Meeting, American Chemical Society, Division of Environmental Chemistry=Prepr. Ext. Abstr. ACS Natl. Meet., Am. Chem. Soc., Div.;PEACF2;SA
-Environ. Eng. Journal of Environmental Science and Health, Part A: Toxic/Hazardous Substances & Environmental Engineering=J. Environ. Sci. Health, Part A: Toxic/Hazard. Subst.;JATEF9;M
-Environment Protection Engineering=Environ. Prot. Eng.;EPEND9;Q
-Environmental Biology and Medicine = Environ. Biol. Med.
-Environmental Biosafety Research = Environ. Biosafety Res.
-Environmental Chemistry=Environ. Chem.;ECNHAA;4/YR
-Environmental Chemistry Letters=Environ. Chem. Lett.;ECLNBJ;4/YR
-Environmental Engineering Science=Environ. Eng. Sci.;EESCF5;BM
-Environmental Geochemistry and Health=Environ. Geochem. Health;EGHEE3;BM
-Environmental Health = Environ. Health
-Environmental Health Perspectives = Environ. Health Perspect.
-Environmental Health Series. Radiological Health = Environ. Health Ser. [Radiol. Health]
-Environmental Letters = Environ. Lett.
-Environmental Management = Environ. Manage.
-Environmental Microbiology = Environ. Microbiol.
-Environmental Mutagenesis = Environ. Mutagen.
-Environmental Physiology and Biochemistry = Environ. Physiol. Biochem.
-Environmental Pollution (Amsterdam, Netherlands)=Environ. Pollut. (Amsterdam, Neth.);ENPOEK;18/YR
-Environmental Progress=Environ. Prog.;ENVPDI;4/YR
-Environmental Quality and Safety = Environ. Qual. Saf.
-Environmental Quality and Safety. Supplement = Environ. Qual. Saf. Suppl.
-Environmental Research = Environ. Res.
-Environmental Science and Technology = Environ. Sci. Technol.
-Environmental Technology=Environ. Technol.;ENVTEV;M
-Environmental Toxicology = Environ. Toxicol.
-Environmental Toxicology and Chemistry=Environ. Toxicol. Chem.;ETOCDK;M
-Environmental Toxicology and Pharmacology=Environ. Toxicol. Pharmacol.;ETOPFR;6/YR
-Environmental and Molecular Mutagenesis = Environ. Mol. Mutagen.
-Enzyme = Enzyme
-Enzyme and Microbial Technology = Enzyme Microb. Technol.
-Enzyme and Protein = Enzyme Protein
-Enzymologia = Enzymologia
-Enzymologia Biologica et Clinica = Enzymol. Biol. Clin. (Basel)
-Eos, Transactions, American Geophysical Union (EOS) = Eos, Trans. Amer. Geophys. Union
-Epatologia = Epatologia
-Epheta: Revista de Enfermeria y Accion Social = Epheta
-Epidemiologia e Prevenzione = Epidemiol. Prev.
-Epidemiologia e Psichiatria Sociale = Epidemiol. Psichiatr. Soc.
-Epidemiologic Reviews = Epidemiol. Rev.
-Epidemiological Bulletin = Epidemiol. Bull.
-Epidemiologie, Mikrobiologie, Imunologie = Epidemiol. Mikrobiol. Imunol.
-Epidemiology = Epidemiology
-Epidemiology and Community Health = Epidemiol. Community Health
-Epidemiology and Infection = Epidemiol. Infect.
-Epilepsia = Epilepsia
-Epilepsy Research = Epilepsy Res.
-Epilepsy Research. Supplement = Epilepsy Res. Suppl.
-Epileptic Disorders = Epileptic. Disord.
-Epione = Epione
-Epithelial Cell Biology = Epithelial Cell Biol.
-Equine Veterinary Journal = Equine Vet. J.
-Equine Veterinary Journal. Supplement = Equine Vet. J. Suppl.
-Erdoel, Erdgas, Kohle=Erdoel, Erdgas, Kohle;EEKOEY;M
-Ergebnisse der Allgemeinen Pathologie und Pathologischen Anatomie = Ergeb. Allg. Pathol. Pathol. Anat.
-Ergebnisse der Anatomie und Entwicklungsgeschichte = Ergeb. Anat. Entwicklungsgesch.
-Ergebnisse der Chirurgie und Orthopadie = Ergeb. Chir. Orthop.
-Ergebnisse der Inneren Medizin und Kinderheilkunde = Ergeb. Inn. Med. Kinderheilkd.
-Ergebnisse der Mikrobiologie, Immunitatsforschung und Experimentellen Therapie = Ergeb. Mikrobiol. Immunitatsforsch. Exp. Ther.
-Ergebnisse der Physiologie, Biologischen Chemie und Experimentellen Pharmakologie = Ergeb. Physiol.
-Ergonomics = Ergonomics
-Esencia Odontologica = Esencia Odontol.
-Essays in Biochemistry = Essays Biochem.
-Essays in Fundamental Immunology = Essays Fundam. Immunol.
-Essays in Neurochemistry and Neuropharmacology = Essays Neurochem. Neuropharmacol.
-Estodont Press = Estodont Press
-Estomatologia = Estomatologia
-Estomatologia e Cultura = Estomatol. Cult.
-Estuarine and Coastal Marine Science = Estuarine Coastal Mar. Sci.
-Ethics in Science and Medicine = Ethics Sci. Med.
-Ethiopian Medical Journal = Ethiop. Med. J.
-Ethnicity and Disease = Ethn. Dis.
-Ethnicity and Health = Ethn. Health
-Etudes sur les Soins et le Service Infirmier = Etud. Soins Serv. Infirm.
-Eugenics Quarterly = Eugen. Q.
-Eugenics Review = Eugen. Rev.
-Eugenics Society Symposia = Eugen. Soc. Symp.
-Eukaryotic Cell = Eukaryot. Cell
-Europa Medica (Edicion Espanola) = Eur. Med. (Paris)
-Europace = Europace
-European Addiction Research = Eur. Addict. Res.
-European Archives of Oto-Rhino-Laryngology = Eur. Arch. Otorhinolaryngol.
-European Archives of Oto-Rhino-Laryngology. Supplement = Eur. Arch. Otorhinolaryngol. Suppl.
-European Archives of Paediatric Dentistry = Eur. Arch. Paediatr. Dent.
-European Archives of Psychiatry and Clinical Neuroscience = Eur. Arch. Psychiatry Clin. Neurosci.
-European Archives of Psychiatry and Neurological Sciences = Eur. Arch. Psychiatry Neurol. Sci.
-European Biophysics Journal = Eur. Biophys. J.
-European Cells and Materials = Eur. Cell. Mater.
-European Child and Adolescent Psychiatry = Eur. Child Adolesc. Psychiatry
-European Cytokine Network = Eur. Cytokine Netw.
-European Food Research and Technology=Eur. Food Res. Technol.;EFRTFO;M
-European Heart Journal = Eur. Heart J.
-European Journal of Anaesthesiology = Eur. J. Anaesthesiol.
-European Journal of Anaesthesiology. Supplement = Eur. J. Anaesthesiol. Suppl.
-European Journal of Applied Physiology = Eur. J. Appl. Physiol.
-European Journal of Applied Physiology and Occupational Physiology = Eur. J. Appl. Physiol.
-European Journal of Basic and Applied Histochemistry = Eur. J. Basic Appl. Histochem.
-European Journal of Biochemistry = Eur. J. Biochem.
-European Journal of Cancer = Eur. J. Cancer
-European Journal of Cancer Care (English Language Edition) = Eur. J. Cancer Care (Engl.)
-European Journal of Cancer Prevention = Eur. J. Cancer Prev.
-European Journal of Cancer and Clinical Oncology = Eur. J. Cancer Clin. Oncol.
-European Journal of Cancer. Part B, Oral Oncology = Eur. J. Cancer. B. Oral Oncol.
-European Journal of Cardio-Thoracic Surgery = Eur. J. Cardiothorac. Surg.
-European Journal of Cardiology = Eur. J. Cardiol.
-European Journal of Cardiovascular Nursing = Eur. J. Cardiovasc. Nurs.
-European Journal of Cardiovascular Prevention and Rehabilitation = Eur. J. Cardiovasc. Prev. Rehabil.
-European Journal of Cell Biology = Eur. J. Cell Biol.
-European Journal of Cell Biology. Supplement = Eur. J. Cell Biol. Suppl.
-European Journal of Clinical Chemistry and Clinical Biochemistry = Eur. J. Clin. Chem. Clin. Biochem.
-European Journal of Clinical Investigation = Eur. J. Clin. Invest.
-European Journal of Clinical Microbiology = Eur. J. Clin. Microbiol.
-European Journal of Clinical Microbiology and Infectious Diseases = Eur. J. Clin. Microbiol. Infect. Dis.
-European Journal of Clinical Nutrition = Eur. J. Clin. Nutr.
-European Journal of Clinical Pharmacology = Eur. J. Clin. Pharmacol.
-European Journal of Contraception and Reproductive Health Care = Eur. J. Contracept. Reprod. Health Care
-European Journal of Dental Education = Eur. J. Dent. Educ.
-European Journal of Dermatology = Eur. J. Dermatol.
-European Journal of Disorders of Communication = Eur. J. Disord. Commun.
-European Journal of Drug Metabolism and Pharmacokinetics = Eur. J. Drug Metab. Pharmacokinet.
-European Journal of Echocardiography = Eur. J. Echocardiogr.
-European Journal of Emergency Medicine = Eur. J. Emerg. Med.
-European Journal of Endocrinology = Eur. J. Endocrinol.
-European Journal of Epidemiology = Eur. J. Epidemiol.
-European Journal of Gastroenterology and Hepatology = Eur. J. Gastroenterol. Hepatol.
-European Journal of Gynaecological Oncology = Eur. J. Gynaecol. Oncol.
-European Journal of Haematology = Eur. J. Haematol.
-European Journal of Haematology. Supplementum = Eur. J. Haematol. Suppl.
-European Journal of Health Economics = Eur. J. Health Econ.
-European Journal of Heart Failure = Eur. J. Heart Fail.
-European Journal of Histochemistry = Eur. J. Histochem.
-European Journal of Human Genetics = Eur. J. Hum. Genet.
-European Journal of Immunogenetics = Eur. J. Immunogenet.
-European Journal of Immunology = Eur. J. Immunol.
-European Journal of Inorganic Chemistry=Eur. J. Inorg. Chem.;EJICFO;SM
-European Journal of Intensive Care Medicine = Eur. J. Intensive Care Med.
-European Journal of Lipid Science and Technology=Eur. J. Lipid Sci. Technol.;EJLTFM;M
-European Journal of Mass Spectrometry=Eur. J. Mass Spectrom.;EJMSCL;6/YR
-European Journal of Medical Genetics = Eur. J. Med. Genet.
-European Journal of Medical Research = Eur. J. Med. Res.
-European Journal of Medicinal Chemistry=Eur. J. Med. Chem.;EJMCA5;M
-European Journal of Medicine = Eur. J. Med.
-European Journal of Mineralogy=Eur. J. Mineral.;EJMIER;BM
-European Journal of Morphology = Eur. J. Morphol.
-European Journal of Neurology = Eur. J. Neurol.
-European Journal of Neuroscience = Eur. J. Neurosci.
-European Journal of Nuclear Medicine = Eur. J. Nucl. Med.
-European Journal of Nuclear Medicine and Molecular Imaging = Eur. J. Nucl. Med. Mol. Imaging
-European Journal of Nutrition = Eur. J. Nutr.
-European Journal of Obstetrics, Gynecology, and Reproductive Biology = Eur. J. Obstet. Gynecol. Reprod. Biol.
-European Journal of Ophthalmology = Eur. J. Ophthalmol.
-European Journal of Oral Sciences = Eur. J. Oral Sci.
-European Journal of Organic Chemistry=Eur. J. Org. Chem.;EJOCFK;SM
-European Journal of Orthodontics = Eur. J. Orthod.
-European Journal of Paediatric Neurology = Eur. J. Paediatr. Neurol.
-European Journal of Pain = Eur. J. Pain
-European Journal of Pediatric Surgery = Eur. J. Pediatr. Surg.
-European Journal of Pediatrics = Eur. J. Pediatr.
-European Journal of Pharmaceutical Sciences = Eur. J. Pharm. Sci.
-European Journal of Pharmaceutics and Biopharmaceutics = Eur. J. Pharm. Biopharm.
-European Journal of Pharmacology = Eur. J. Pharmacol.
-European Journal of Prosthodontics and Restorative Dentistry = Eur. J. Prosthodont. Restor. Dent.
-European Journal of Radiology = Eur. J. Radiol.
-European Journal of Respiratory Diseases = Eur. J. Respir. Dis.
-European Journal of Respiratory Diseases. Supplement = Eur. J. Respir. Dis. Suppl.
-European Journal of Rheumatology and Inflammation = Eur. J. Rheumatol. Inflamm.
-European Journal of Surgery = Eur. J. Surg.
-European Journal of Surgery. Supplement = Eur. J. Surg. Suppl.
-European Journal of Surgical Oncology = Eur. J. Surg. Oncol.
-European Journal of Toxicology = Eur. J. Toxicol.
-European Journal of Toxicology and Environmental Hygiene = Eur. J. Toxicol. Environ. Hyg.
-European Journal of Toxicology and Hygiene of Environment = Eur. J. Toxicol. Hyg. Environ.
-European Journal of Ultrasound = Eur. J. Ultrasound
-European Journal of Vascular Surgery = Eur. J. Vasc. Surg.
-European Journal of Vascular and Endovascular Surgery = Eur. J. Vasc. Endovasc. Surg.
-European Neurology = Eur. Neurol.
-European Neuropsychopharmacology = Eur. Neuropsychopharmacol.
-European Physical Journal A: Hadrons and Nuclei=Eur. Phys. J. A;EPJAFV;M
-European Physical Journal B: Condensed Matter Physics=Eur. Phys. J. B;EPJBFY;SM
-European Physical Journal C: Particles and Fields=Eur. Phys. J. C;EPCFFB;16/YR
-European Physical Journal D: Atomic, Molecular and Optical Physics=Eur. Phys. J. D;EPJDF6;M
-European Physical Journal E: Soft Matter=Eur. Phys. J. E;EPJSFH;M
-European Polymer Journal=Eur. Polym. J.;EUPJAG;M
-European Quality Assurance Network Newsletter = Eur. Qual. Assur. Netw. Newsl.
-European Radiology = Eur. Radiol.
-European Respiratory Journal = Eur. Respir. J.
-European Respiratory Journal. Supplement = Eur. Respir. J. Suppl.
-European Review for Medical and Pharmacological Sciences = Eur. Rev. Med. Pharmacol. Sci.
-European Spine Journal = Eur. Spine J.
-European Surgical Research = Eur. Surg. Res.
-European Urology = Eur. Urol.
-Europhysics Letters = Europhys. Lett.
-Evaluation = Evaluation
-Evaluation Review = Eval. Rev.
-Evaluation and Program Planning = Eval. Program Plann.
-Evaluation and the Health Professions = Eval. Health Prof.
-Evidence Report/Technology Assessment (Summary) = Evid. Rep. Technol. Assess. (Summ.)
-Evidence-Based Mental Health = Evid. Based Ment. Health
-Evidence-Based Nursing = Evid. Based Nurs.
-Evolution Psychiatrique = Evol. Psychiatr. (Paris)
-Evolution and Development = Evol. Dev.
-Evolutionary Computation = Evol. Comput.
-Exceptional Children = Except. Child.
-Executive Housekeeper = Exec. Housekeeper
-Executive Housekeeping Today = Exec. Housekeep. Today
-Executive Solutions for Healthcare Management = Exec. Solut. Healthc. Manag.
-Exercise Immunology Review = Exerc. Immunol. Rev.
-Exercise and Sport Sciences Reviews = Exerc. Sport Sci. Rev.
-Experientia = Experientia
-Experientia. Supplementum = Experientia. Suppl.
-Experimental Aging Research = Exp. Aging Res.
-Experimental Animals = Exp. Anim.
-Experimental Biology = Exp. Biol.
-Experimental Biology and Medicine = Exp. Biol. Med.
-Experimental Biology and Medicine (Maywood, NJ, United States)=Exp. Biol. Med. (Maywood, NJ, U. S.);EBMMBE;11/YR
-Experimental Brain Research = Exp. Brain Res.
-Experimental Cell Biology = Exp. Cell Biol.
-Experimental Cell Research = Exp. Cell Res.
-Experimental Dermatology = Exp. Dermatol.
-Experimental Diabetes Research = Exp. Diabetes Res.
-Experimental Embryology and Teratology = Exp. Embryol. Teratol.
-Experimental Eye Research = Exp. Eye Res.
-Experimental Gerontology = Exp. Gerontol.
-Experimental Hematology = Exp. Hematol.
-Experimental Lung Research = Exp. Lung Res.
-Experimental Medicine and Surgery = Exp. Med. Surg.
-Experimental Mycology = Exp. Mycol.
-Experimental Nephrology = Exp. Nephrol.
-Experimental Neurology = Exp. Neurol.
-Experimental Oncology = Exp. Oncol.
-Experimental Parasitology = Exp. Parasitol.
-Experimental Pathology = Exp. Pathol.
-Experimental Pathology. Supplement = Exp. Pathol. Suppl.
-Experimental Physiology = Exp. Physiol.
-Experimental Psychology = Exp. Psychol.
-Experimental and Applied Acarology = Exp. Appl. Acarol.
-Experimental and Clinical Endocrinology = Exp. Clin. Endocrinol.
-Experimental and Clinical Endocrinology & Diabetes=Exp. Clin. Endocrinol. Diabetes;ECEDFQ;10/YR
-Experimental and Clinical Endocrinology and Diabetes = Exp. Clin. Endocrinol. Diabetes
-Experimental and Clinical Immunogenetics = Exp. Clin. Immunogenet.
-Experimental and Clinical Transplantation = Exp. Clin. Transplant.
-Experimental and Molecular Medicine = Exp. Mol. Med.
-Experimental and Molecular Pathology = Exp. Mol. Pathol.
-Experimental and Toxicologic Pathology = Exp. Toxicol. Pathol.
-Experimentelle Medizin, Pathologie und Klinik = Exp. Med. Pathol. Klin.
-Experimentelle Pathologie = Exp. Pathol. (Jena)
-Expert Opinion on Biological Therapy = Expert Opin. Biol. Ther.
-Expert Opinion on Drug Delivery = Expert Opin. Drug Deliv.
-Expert Opinion on Drug Metabolism and Toxicology = Expert Opin. Drug Metab. Toxicol.
-Expert Opinion on Drug Safety = Expert Opin. Drug Saf.
-Expert Opinion on Emerging Drugs = Expert Opin. Emerg. Drugs
-Expert Opinion on Investigational Drugs=Expert Opin. Invest. Drugs;EOIDER;M
-Expert Opinion on Pharmacotherapy = Expert Opin. Pharmacother.
-Expert Opinion on Therapeutic Patents=Expert Opin. Ther. Pat.;EOTPEG;M
-Expert Opinion on Therapeutic Targets = Expert Opin. Ther. Targets
-Expert Review of Anti-Infective Therapy = Expert Rev. Anti Infect. Ther.
-Expert Review of Anticancer Therapy = Expert Rev. Anticancer Ther.
-Expert Review of Cardiovascular Therapy = Expert Rev. Cardiovasc. Ther.
-Expert Review of Medical Devices = Expert Rev. Med. Devices
-Expert Review of Molecular Diagnostics = Expert Rev. Mol. Diagn.
-Expert Review of Neurotherapeutics = Expert Rev. Neurother.
-Expert Review of Proteomics = Expert Rev. Proteomics
-Expert Review of Vaccines = Expert Rev. Vaccines
-Explore = Explore
-Explorer = Explorer (Hayward)
-Explorer (Kansas City) = Explorer (Kansas City)
-Exposes Annuels de Biochimie Medicale = Expos. Annu. Biochim. Med.
-Extremophiles = Extremophiles
-Eye = Eye
-Eye and Contact Lens = Eye Contact Lens
-Eye, Ear, Nose and Throat Monthly = Eye. Ear. Nose Throat Mon.
-FAO Food and Nutrition Paper = FAO Food Nutr. Pap.
-FAO Food and Nutrition Series = FAO Food Nutr. Ser.
-FAO Nutrition Meetings Report Series = FAO Nutr. Meet. Rep. Ser.
-FAO Nutritional Studies = FAO Nutr. Stud.
-FASEB Journal = FASEB J.
-FDA Consumer = FDA Consum.
-FDA Drug Bulletin = FDA Drug Bull.
-FDI World = FDI World
-FEBS Journal = FEBS J.
-FEBS Letters = FEBS Lett.
-FEMS Immunology and Medical Microbiology = FEMS Immunol. Med. Microbiol.
-FEMS Microbiology Ecology=FEMS Microbiol. Ecol.;FMECEZ;M
-FEMS Microbiology Immunology = FEMS Microbiol. Immunol.
-FEMS Microbiology Letters = FEMS Microbiol. Lett.
-FEMS Microbiology Reviews = FEMS Microbiol. Rev.
-FEMS Yeast Research = FEMS Yeast Res.
-FNIB Info = FNIB Info
-FNIB: Organe de la Federation Nationale des Infirmier(e)s Belges = FNIB
-FO: Facultad de Odontologia = FO
-Fa Yi Xue Za Zhi (Journal of Forensic Medicine) = Fa Yi Xue Za Zhi
-Facial Orthopedics and Temporomandibular Arthrology = Facial Orthop. Temporomandibular Arthrol.
-Facial Plastic Surgery = Facial Plast. Surg.
-Factor Odontologico = Factor Odontol.
-Fag Tidsskriftet Sykepleien = Fag Tidsskr. Sykepleien
-Family Health = Fam. Health
-Family Medicine = Fam. Med.
-Family Planning = Fam. Plann.
-Family Planning Perspectives = Fam. Plann. Perspect.
-Family Practice = Fam. Pract.
-Family Practice Management = Fam. Pract. Manag.
-Family Practice Research Journal = Fam. Pract. Res. J.
-Family Process = Fam. Process
-Family and Community Health = Fam. Community Health
-Faraday Discussions = Faraday Discuss.
-Faraday Discussions of the Chemical Society = Faraday Discuss. Chem. Soc.
-Farmaco = Farmaco
-Farmaco. Edizione Pratica = Farmaco. [Prat.]
-Farmaco. Edizione Scientifica = Farmaco. [Sci.]
-Farmacognosia = Farmacognosia
-Farmakologiia i Toksikologiia = Farmakol. Toksikol.
-Farmatsevtychnyi Zhurnal = Farm. Zh.
-Farmatsiia = Farmatsiia
-Fasett = Fasett
-Fauchard = Fauchard
-Faulkner and Gray's Medicine and Health = Faulkner Grays Med. Health
-Federal Register = Fed. Regist.
-Federation Bulletin = Fed. Bull.
-Federation Proceedings = Fed. Proc.
-Federation Proceedings. Translation Supplement = Fed. Proc. Transl. Suppl.
-Federation of Operative Dentistry = Fed. Oper. Dent.
-Fegato = Fegato
-Feldsher i Akusherka = Feldsher Akush.
-Fen Zi Xi Bao Sheng Wu Xue Bao (Journal of Molecular Cell Biology) = Fen Zi Xi Bao Sheng Wu Xue Bao
-Fenxi Huaxue=Fenxi Huaxue;FHHHDT;M
-Fenzi Cuihua=Fenzi Cuihua;FECUEN;BM
-Ferroelectrics=Ferroelectrics;FEROA8;16/YR
-Ferroelectrics, Letters Section=Ferroelectr., Lett. Sect.;FELEDJ;BM
-Fertility and Sterility = Fertil. Steril.
-Fetal Diagnosis and Therapy = Fetal Diagn. Ther.
-Fetal Therapy = Fetal Ther.
-Fetal and Pediatric Pathology = Fetal Pediatr. Pathol.
-Fibre Chemistry=Fibre Chem.;FICYAP;BM
-Finska Lakaresallskapets Handlingar = Fin. Lakaresallsk. Handl.
-Fire Journal = Fire J.
-Fire Technology = Fire Technol.
-Fire and Materials=Fire Mater.;FMATDV;BM
-Fish Physiology and Biochemistry=Fish Physiol. Biochem.;FPBIEP;4/YR
-Fisheries Oceanography = Fish. Oceanogr.
-Fisheries Science = Fish. Sci.
-Fisheries Science (Carlton, Australia)=Fish. Sci. (Carlton, Aust.);FSCIEH;BM
-Fission Product Inhalation Project = Fission Prod. Inhal. Proj.
-Fizika Goreniya i Vzryva=Fiz. Goreniya Vzryva;FGVZA7;BM
-Fizika Metallov i Metallovedenie=Fiz. Met. Metalloved.;FMMTAK;M
-Fizika i Khimiya Obrabotki Materialov=Fiz. Khim. Obrab. Mater.;FKOMAT;BM
-Fiziologia Normala si Patologica = Fiziol. Norm. Patol.
-Fiziologicheskii Zhurnal = Fiziol. Zh.
-Fiziologicheskii Zhurnal Imeni I. M. Sechenova = Fiziol. Zh. Im. I. M. Sechenova
-Fiziologicheskii Zhurnal SSSR Imeni I. M. Sechenova = Fiziol. Zh. SSSR Im. I. M. Sechenova
-Fiziologichnyi Zhurnal = Fiziol. Zh.
-Fiziologiia Cheloveka = Fiziol. Cheloveka
-Flash-Informations = Flash. Inf.
-Florida Dental Journal = Fla. Dent. J.
-Florida Nurse = Fla. Nurse
-Fluid Phase Equilibria=Fluid Phase Equilib.;FPEQDT;15/YR
-Focus on AACN = Focus AACN
-Focus on Critical Care = Focus Crit. Care
-Focus on Ohio Dentistry = Focus Ohio Dent.
-Fogorvosi Szemle = Fogorv. Sz.
-Folding and Design = Fold. Des.
-Folha Medica = Folha Med.
-Folia Allergologica = Folia Allergol. (Roma)
-Folia Biologica = Folia Biol. (Praha)
-Folia Cardiologica = Folia Cardiol.
-Folia Clinica Internacional = Folia Clin. Int. (Barc.)
-Folia Endocrinologica = Folia Endocrinol.
-Folia Haematologica: Internationales Magazin fur Blutforschung = Folia Haematol. (Frankf.)
-Folia Haematologica: Internationales Magazin fur Klinische und Morphologische Blutforschung = Folia Haematol. Int. Mag. Klin. Morphol. Blutforsch.
-Folia Hereditaria et Pathologica = Folia Hered. Pathol. (Milano)
-Folia Histochemica et Cytobiologica = Folia Histochem. Cytobiol.
-Folia Histochemica et Cytochemica = Folia Histochem. Cytochem. (Krakow)
-Folia Medica = Folia Med. (Plovdiv)
-Folia Medica Cracoviensia = Folia Med. Cracov.
-Folia Medica Neerlandica = Folia Med. Neerl.
-Folia Microbiologica = Folia Microbiol. (Praha)
-Folia Microbiologica (Prague, Czech Republic)=Folia Microbiol. (Prague, Czech Repub.);FOMIAZ;BM
-Folia Morphologica (Poland) = Folia Morphol. (Warsz.)
-Folia Morphologica (Prague) = Folia Morphol. (Praha)
-Folia Neuropathologica = Folia Neuropathol.
-Folia Parasitologica = Folia Parasitol. (Praha)
-Folia Phoniatrica = Folia Phoniatr. (Basel)
-Folia Phoniatrica et Logopedica = Folia Phoniatr. Logop.
-Folia Primatologica = Folia Primatol. (Basel)
-Folia Psychiatrica et Neurologica Japonica = Folia Psychiatr. Neurol. Jpn.
-Folia Veterinaria Latina = Folia Vet. Lat.
-Food Additives & Contaminants=Food Addit. Contam.;FACOEB;M
-Food Additives and Contaminants = Food Addit. Contam.
-Food Chemistry=Food Chem.;FOCHDJ;20/YR
-Food Hydrocolloids=Food Hydrocolloids;FOHYES;BM
-Food Management = Food Manage.
-Food and Chemical Toxicology = Food Chem. Toxicol.
-Food and Cosmetics Toxicology = Food Cosmet. Toxicol.
-Food and Drug Law Journal = Food Drug Law J.
-Food and Nutrition = Food Nutr. (Roma)
-Foodborne Pathogens and Disease = Foodborne Pathog. Dis.
-Foot and Ankle = Foot Ankle
-Foot and Ankle Clinics = Foot Ankle Clin.
-Foot and Ankle International = Foot Ankle Int.
-Forbes = Forbes
-Fordham Law Review = Fordham Law Rev.
-Forensic Science = Forensic Sci.
-Forensic Science International = Forensic Sci. Int.
-Formulary = Formulary
-Forschende Komplementarmedizin = Forsch. Komplementarmed.
-Forschende Komplementarmedizin und Klassische Naturheilkunde = Forsch. Komplementarmed. Klass. Naturheilkd.
-Fortnightly Review of the Chicago Dental Society = Fortn. Rev. Chic. Dent. Soc.
-Fortschritte auf dem Gebiete der Rontgenstrahlen und der Neuen Bildgebenden Verfahren. Erganzungsband = Fortschr. Geb. Rontgenstrahlen Neuen Bildgeb. Verfahr. Erganzungsbd.
-Fortschritte auf dem Gebiete der Rontgenstrahlen und der Nuklearmedizin = Fortschr. Geb. Rontgenstr. Nuklearmed.
-Fortschritte auf dem Gebiete der Rontgenstrahlen und der Nuklearmedizin. Erganzungsband = Fortschr. Geb. Rontgenstrahlen Nuklearmed. Erganzungsbd.
-Fortschritte der Andrologie = Fortschr. Androl.
-Fortschritte der Arzneimittelforschung (Progress in Drug Research) = Fortschr. Arzneimittelforsch.
-Fortschritte der Chemie Organischer Naturstoffe = Fortschr. Chem. Org. Naturst.
-Fortschritte der Geburtshilfe und Gynakologie = Fortschr. Geburtshilfe Gynakol.
-Fortschritte der Hals-, Nasen-, Ohrenheilkunde = Fortschr. Hals. Nasen. Ohrenheilkd.
-Fortschritte der Immunitatsforschung = Fortschr. Immunitatsforsch.
-Fortschritte der Kiefer- und Gesichts-Chirurgie = Fortschr. Kiefer. Gesichtschir.
-Fortschritte der Kieferorthopadie = Fortschr. Kieferorthop.
-Fortschritte der Medizin = Fortschr. Med.
-Fortschritte der Medizin. Monographie = Fortschr. Med. Monogr.
-Fortschritte der Medizin. Supplement = Fortschr. Med. Suppl.
-Fortschritte der Neurologie, Psychiatrie und Ihrer Grenzgebiete = Fortschr. Neurol. Psychiatr. Grenzgeb.
-Fortschritte der Neurologie-Psychiatrie = Fortschr. Neurol. Psychiatr.
-Fortschritte der Ophthalmologie = Fortschr. Ophthalmol.
-Fortschritte der Verhaltensforschung = Fortschr. Verhaltensforsch.
-Fortschritte der Zoologie = Fortschr. Zool.
-Fortschritte in der Tierphysiologie und Tierernahrung = Fortschr. Tierphysiol. Tierernahr.
-Fortune = Fortune
-Forum = Forum (Genova)
-Forum of Nutrition = Forum Nutr.
-Forum on Medicine = Forum Med.
-Foundation News = Found. News
-Foundation News and Commentary = Found. News Comment.
-Fra Sundhedsstyrelsen = Fra Sundhedsstyr.
-Fracastoro = Fracastoro
-Frankfurter Zeitschrift fur Pathologie = Frankf. Z. Pathol.
-Frater of Psi Omega = Frater Psi Omega
-Free Radical Biology & Medicine=Free Radical Biol. Med.;FRBMEH;24/YR
-Free Radical Biology and Medicine = Free Radic. Biol. Med.
-Free Radical Research = Free Radic. Res.
-Free Radical Research Communications = Free Radic. Res. Commun.
-Freie Zahnarzt = Freie Zahnarzt
-Fresenius Environmental Bulletin=Fresenius Environ. Bull.;FENBEL;M
-Friuli Medico = Friuli Med.
-Frontier Nursing Service Quarterly Bulletin = Front. Nurs. Serv. Q. Bull.
-Frontiers in Aging Series = Front. Aging Ser.
-Frontiers in Bioscience = Front. Biosci.
-Frontiers in Neuroendocrinology = Front. Neuroendocrinol.
-Frontiers of Biology = Front. Biol.
-Frontiers of Gastrointestinal Research = Front. Gastrointest. Res.
-Frontiers of Health Services Management = Front. Health Serv. Manage.
-Frontiers of Hormone Research = Front. Horm. Res.
-Frontiers of Medical and Biological Engineering = Front. Med. Biol. Eng.
-Frontiers of Oral Physiology = Front. Oral Physiol.
-Frontiers of Radiation Therapy and Oncology = Front. Radiat. Ther. Oncol.
-Ftiziologia = Ftiziologia
-Fuel=Fuel;FUELAC;15/YR
-Fuel Cells (Weinheim, Germany)=Fuel Cells (Weinheim, Ger.);FUCEFK;4/YR
-Fuel Processing Technology=Fuel Process. Technol.;FPTEDY;15/YR
-Fukuoka Igaku Zasshi (Fukuoka Acta Medica) = Fukuoka Igaku Zasshi
-Fukuoka Shika Daigaku Gakkai Zasshi = Fukuoka Shika Daigaku Gakkai Zasshi
-Fukushima Journal of Medical Science = Fukushima J. Med. Sci.
-Fullerenes, Nanotubes, and Carbon Nanostructures=Fullerenes, Nanotubes, Carbon Nanostruct.;FNCNAR;Q
-Functional & Integrative Genomics=Funct. Integr. Genomics;FIGUBY;Q
-Functional Neurology = Funct. Neurol.
-Functional Orthodontist = Funct. Orthod.
-Functional and Developmental Morphology = Funct. Dev. Morphol.
-Functional and Integrative Genomics = Funct. Integr. Genomics
-Fund Raising Management = Fund Raising Manage.
-Fundamental & Clinical Pharmacology=Fundam. Clin. Pharmacol.;FCPHEZ;BM
-Fundamental and Applied Toxicology = Fundam. Appl. Toxicol.
-Fundamental and Clinical Pharmacology = Fundam. Clin. Pharmacol.
-Fungal Genetics and Biology = Fungal Genet. Biol.
-Funtai oyobi Funmatsu Yakin=Funtai oyobi Funmatsu Yakin;FOFUA2;M
-Fusion Engineering and Design=Fusion Eng. Des.;FEDEEE;24/YR
-Fusion Science and Technology=Fusion Sci. Technol.;FSTUCY;7/YR
-Future Dentistry = Future Dent.
-Future Oncology = Future Oncol.
-Future of Children = Future Child.
-Fysiatricky a Revmatologicky Vestnik = Fysiatr. Revmatol. Vestn.
-G.E.N. = G. E. N.
-GHA Today = GHA Today
-GHAA Journal = GHAA J.
-GMDA Bulletin = GMDA Bull.
-GP = GP
-Gaceta Medica de Caracas = Gac. Med. Caracas
-Gaceta Medica de Mexico = Gac. Med. Mex.
-Gaceta Sanitaria = Gac. Sanit.
-Gait and Posture = Gait Posture
-Gamete Research = Gamete Res.
-Gan No Rinsho (Japanese Journal of Cancer Clinics) = Gan No Rinsho
-Gan To Kagaku Ryoho (Cancer and Chemotherapy) = Gan To Kagaku Ryoho
-Ganguang Kexue Yu Guang Huaxue=Ganguang Kexue Yu Guang Huaxue;GKKHE9;BM
-Ganka (Ophthalmology) = Ganka
-Gann = Gann
-Gaodeng Xuexiao Huaxue Xuebao=Gaodeng Xuexiao Huaxue Xuebao;KTHPDM;M
-Gaofenzi Cailiao Kexue Yu Gongcheng=Gaofenzi Cailiao Kexue Yu Gongcheng;GCKGEI;BM
-Gaofenzi Xuebao=Gaofenzi Xuebao;GAXUE9;BM
-Gaoneng Wuli Yu Hewuli=Gaoneng Wuli Yu Hewuli;KNWLD9;M
-Gaoxiao Huaxue Gongcheng Xuebao=Gaoxiao Huaxue Gongcheng Xuebao;GHGXEG;BM
-Gaoxiong Yi Xue Ke Xue Za Zhi (Kaohsiung Journal of Medical Sciences) = Gaoxiong Yi Xue Ke Xue Za Zhi
-Gastric Cancer = Gastric Cancer
-Gastroenterologia = Gastroenterologia
-Gastroenterologia Japonica = Gastroenterol. Jpn.
-Gastroenterologia y Hepatologia = Gastroenterol. Hepatol.
-Gastroenterologie Clinique et Biologique = Gastroenterol. Clin. Biol.
-Gastroenterologische Fortbildungskurse fur die Praxis = Gastroenterol. Fortbildungskurse Prax.
-Gastroenterologisches Journal = Gastroenterol. J.
-Gastroenterologist = Gastroenterologist
-Gastroenterology = Gastroenterology
-Gastroenterology Clinics of North America = Gastroenterol. Clin. North Am.
-Gastroenterology Nursing = Gastroenterol. Nurs.
-Gastrointestinal Endoscopy = Gastrointest. Endosc.
-Gastrointestinal Endoscopy Clinics of North America = Gastrointest. Endosc. Clin. N. Am.
-Gastrointestinal Radiology = Gastrointest. Radiol.
-Gazette Medicale de France = Gaz. Med. Fr.
-Gazette of the Egyptian Paediatric Association = Gaz. Egypt. Paediatr. Assoc.
-Gazzetta Internazionale di Medicina e Chirurgia = Gazz. Int. Med. Chir.
-Gazzetta Medica Italiana = Gazz. Med. Ital.
-Gazzetta Sanitaria = Gazz. Sanit.
-Geburtshilfe und Frauenheilkunde = Geburtshilfe Frauenheilkd.
-Gegenbaurs Morphologisches Jahrbuch = Gegenbaurs Morphol. Jahrb.
-Geka Chiryo (Surgical Therapy) = Geka Chiryo
-Gem State RN News Letter = Gem State RN News Lett.
-Gematologiia i Transfuziologiia = Gematol. Transfuziol.
-Gender Medicine = Gend. Med.
-Gene = Gene
-Gene Amplification and Analysis = Gene Amplif. Anal.
-Gene Analysis Techniques = Gene Anal. Tech.
-Gene Expression = Gene Expr.
-Gene Expression Patterns = Gene Expr. Patterns
-Gene Geography = Gene Geogr.
-Gene Therapy = Gene Ther.
-Gene Therapy and Regulation=Gene Ther. Regul.;GTREBR;IRR
-Geneeskundige Bladen uit Kliniek en Laboratorium voor de Praktijk = Geneeskd. Bl.
-Geneeskundige Gids = Geneeskd. Gids
-General Dentistry = Gen. Dent.
-General Hospital Psychiatry = Gen. Hosp. Psychiatry
-General Pharmacology = Gen. Pharmacol.
-General Physiology and Biophysics = Gen. Physiol. Biophys.
-General and Comparative Endocrinology = Gen. Comp. Endocrinol.
-General and Diagnostic Pathology = Gen. Diagn. Pathol.
-Genes & Development=Genes Dev.;GEDEEP;SM
-Genes and Development = Genes Dev.
-Genes and Function = Genes Funct.
-Genes and Genetic Systems = Genes Genet. Syst.
-Genes to Cells = Genes Cells
-Genes, Brain, and Behavior = Genes Brain Behav.
-Genes, Chromosomes & Cancer=Genes, Chromosomes Cancer;GCCAES;12/YR
-Genes, Chromosomes and Cancer = Genes. Chromosomes Cancer
-Genesis = Genesis
-Genetic Analysis = Genet. Anal.
-Genetic Analysis, Techniques and Applications = Genet. Anal. Tech. Appl.
-Genetic Counseling = Genet. Couns.
-Genetic Engineering = Genet. Eng. (N. Y.)
-Genetic Epidemiology = Genet. Epidemiol.
-Genetic Epidemiology. Supplement = Genet. Epidemiol. Suppl.
-Genetic Psychology Monographs = Genet. Psychol. Monogr.
-Genetic Testing = Genet. Test.
-Genetic, Social, and General Psychology Monographs = Genet. Soc. Gen. Psychol. Monogr.
-Genetica = Genetica
-Genetical Research = Genet. Res.
-Genetics = Genetics
-Genetics and Molecular Research = Genet. Mol. Res.
-Genetics in Medicine = Genet. Med.
-Genetika = Genetika
-Genitourinary Medicine = Genitourin. Med.
-Genome = Genome
-Genome Biology = Genome Biol.
-Genome Informatics = Genome Inform.
-Genome Research = Genome Res.
-Genomics = Genomics
-Genomics, Proteomics and Bioinformatics = Genomics Proteomics Bioinformatics
-Geochemical Journal=Geochem. J.;GEJOBE;BM
-Geochimica et Cosmochimica Acta=Geochim. Cosmochim. Acta;GCACAK;SM
-Geofisica Internationale = Geofis. Int.
-Geofysiske Publikasjoner = Geofys. Publ.
-Geographia Medica = Geogr. Med.
-Geographia Medica. Supplement = Geogr. Med. Suppl.
-Geokhimiya=Geokhimiya;GEOKAQ;M
-Geologiya i Geofizika = Geol. Geofiz.
-Geophysical Fluid Dynamics = Geophys. Fluid Dyn.
-Geophysical Magazine = Geophys. Mag.
-Geophysical Research Letters = Geophys. Res. Lett.
-Geophysical and Astrophysical Fluid Dynamics = Geophys. Astrophys. Fluid Dyn.
-Geophysics = Geophysics
-Georgetown Dental Journal = Georgetown Dent. J.
-Georgetown Law Journal = Georgetown Law J.
-Georgetown University School of Dentistry Mirror = Georgetown Univ. Sch. Dent. Mirror
-Georgia Hospitals Today = Ga. Hosp. Today
-Georgia Nursing = Ga. Nurse.
-Geriatric Nephrology and Urology = Geriatr. Nephrol. Urol.
-Geriatric Nursing = Geriatr. Nur. (Lond.)
-Geriatric Nursing and Home Care = Geriatr. Nur. Home Care
-Geriatrics = Geriatrics
-German Journal of Ophthalmology = Ger. J. Ophthalmol.
-German Medical Monthly = Ger. Med. Mon.
-German Medicine = Ger. Med.
-Gerodontics = Gerodontics
-Gerodontology = Gerodontology
-Geron = Geron
-Gerontion = Gerontion
-Gerontologia = Gerontologia
-Gerontologia Clinica = Gerontol. Clin. (Basel)
-Gerontologie = Gerontologie
-Gerontologist = Gerontologist
-Gerontology = Gerontology
-Gerontology and Geriatrics Education = Gerontol. Geriatr. Educ.
-Gesnerus = Gesnerus
-Gesnerus. Supplement = Gesnerus. Suppl.
-Gesundheits-Ingenieur = Gesund. Ing.
-Gesundheitswesen = Gesundheitswesen
-Ghana Medical Journal = Ghana Med. J.
-Ghanaian Nurse = Ghana. Nurse
-Gifu Shika Gakkai Zasshi (Journal of Gifu Dental Society) = Gifu Shika Gakkai Zasshi
-Gigiena Truda i Professionalnye Zabolevaniia = Gig. Tr. Prof. Zabol.
-Gigiena i Sanitariia = Gig. Sanit.
-Ginecologia y Obstetricia de Mexico = Ginecol. Obstet. Mex.
-Ginekologia Polska = Ginekol. Pol.
-Giornale Italiano della Tubercolosi e delle Malattie del Torace = G. Ital. Tuberc. Mal. Torace
-Giornale Italiano delle Malattie del Torace = G. Ital. Mal. Torace
-Giornale Italiano di Cardiologia = G. Ital. Cardiol.
-Giornale Italiano di Chemioterapia = G. Ital. Chemioter.
-Giornale Italiano di Chirurgia = G. Ital. Chir.
-Giornale Italiano di Dermatologia e Venereologia = G. Ital. Dermatol. Venereol.
-Giornale Italiano di Dermatologia. Minerva Dermatologica = G. Ital. Dermatol. Minerva Dermatol.
-Giornale Italiano di Endodonzia = G. Ital. Endodonzia
-Giornale Italiano di Medicina del Lavoro = G. Ital. Med. Lav.
-Giornale Italiano di Medicina del Lavoro ed Ergonomia = G. Ital. Med. Lav. Ergon.
-Giornale Italiano di Oftalmologia = G. Ital. Oftalmol.
-Giornale Italiano di Oncologia = G. Ital. Oncol.
-Giornale Veneto di Scienze Mediche = G. Veneto Sci. Med.
-Giornale di Anestesia Stomatologica = G. Anest. Stomatol.
-Giornale di Batteriologia, Virologia ed Immunologia = G. Batteriol. Virol. Immunol.
-Giornale di Batteriologia, Virologia ed Immunologia ed Annali dell Ospedale Maria Vittoria di Torino = G. Batteriol. Virol. Immunol.
-Giornale di Batteriologia, Virologia ed Immunologia ed Annali dell Ospedale Maria Vittoria di Torino. Parte 2, Sezione Clinica = G. Batteriol. Virol. Immunol. [Clin.]
-Giornale di Chirurgia = G. Chir.
-Giornale di Clinica Medica = G. Clin. Med.
-Giornale di Endodonzia = G. Endodonzia
-Giornale di Fisica Sanitaria e Protezione Contro le Radiazioni = G. Fis. Sanit. Prot. Radiaz.
-Giornale di Gerontologia = G. Gerontol.
-Giornale di Gerontologia. Supplemento = G. Gerontol. Suppl.
-Giornale di Igiene e Medicina Preventiva = G. Ig. Med. Prev.
-Giornale di Malattie Infettive e Parassitarie = G. Mal. Infett. Parassit.
-Giornale di Medicina Militare = G. Med. Mil.
-Giornale di Pneumologia = G. Pneumol.
-Giornale di Psichiatria e di Neuropatologia = G. Psichiatr. Neuropatol.
-Giornale di Stomatologia e di Ortognatodonzia = G. Stomatol. Ortognatodonzia
-Glasgow Dental Journal = Glasg. Dent. J.
-Glasnik, Srpska Akademija Nauka i Umetnosti, Odeljenje Medicinskih Nauka = Glas. Srp. Akad. Nauka [Med.]
-Glass Physics and Chemistry=Glass Phys. Chem.;GPHCEE;BM
-Glass Science and Technology (Offenbach, Germany)=Glass Sci. Technol. (Offenbach, Ger.);GSTEEX;BM
-Glass Technology=Glass Technol.;GLSTAK;BM
-GlassResearcher=GlassResearcher;GRESER;SA
-Glia = Glia
-Global Biogeochemical Cycles=Global Biogeochem. Cycles;GBCYEP;Q
-Globe = Globe
-Glycobiology = Glycobiology
-Glycoconjugate Journal = Glycoconj. J.
-Godisen Zbornik na Medicinskiot Fakultet vo Skopje = God. Zb. Med. Fak. Skopje
-Godisnjak Vojnomedicinske Akademije = God. Vojnomed. Akad.
-Gongneng Gaofenzi Xuebao=Gongneng Gaofenzi Xuebao;GGXUEH;Q
-Goteborgs Tandlakare-Sallskaps Arsbok = Goteb. Tandlak. Sallsk. Arsb.
-Government Relations Note = Gov. Relat. Note
-Graefe's Archive for Clinical and Experimental Ophthalmology = Graefes Arch. Clin. Exp. Ophthalmol.
-Grants Magazine = Grants Mag.
-Grantsmanship Center News = Grantsmanship Cent. News
-Greater Milwaukee Dental Bulletin = Greater Milw. Dent. Bull.
-Greater St Louis Dental Society Bulletin = Greater St Louis Dent. Soc. Bull.
-Ground Water=Ground Water;GRWAAP;BM
-Group Health Journal = Group Health J.
-Group Practice = Group Pract.
-Group Practice Journal = Group Pract. J.
-Growth = Growth
-Growth Factors = Growth Factors
-Growth Hormone and IGF Research = Growth Horm. IGF Res.
-Growth Regulation = Growth Regul.
-Growth, Development and Aging = Growth. Dev. Aging
-Grudnaia Khirurgiia = Grudn. Khir.
-Grudnaia i Serdechno-Sosudistaia Khirurgiia = Grud. Serdechnososudistaia. Khir.
-Gruzlica i Choroby Pluc = Gruzlica
-Guangpuxue Yu Guangpu Fenxi=Guangpuxue Yu Guangpu Fenxi;GYGFED;M
-Guijinshu=Guijinshu;GUIJE7;Q
-Guisuanyan Xuebao=Guisuanyan Xuebao;KSYHA5;M
-Gunma Journal of Medical Sciences = Gunma J. Med. Sci.
-Guocheng Gongcheng Xuebao=Guocheng Gongcheng Xuebao;CJPEB5;BM
-Gut = Gut
-Guy's Hospital Reports = Guys Hosp. Rep.
-Gynaecologia = Gynaecologia
-Gynakologe = Gynakologe
-Gynakologisch-Geburtshilfliche Rundschau = Gynakol. Geburtshilfliche Rundsch.
-Gynakologische Rundschau = Gynakol. Rundsch.
-Gynecologic Investigation = Gynecol. Invest.
-Gynecologic Oncology = Gynecol. Oncol.
-Gynecologic and Obstetric Investigation = Gynecol. Obstet. Invest.
-Gynecological Endocrinology = Gynecol. Endocrinol.
-Gynecologie = Gynecologie
-Gynecologie Pratique = Gynecol. Prat.
-Gynecologie et Obstetrique = Gynecol. Obstet. (Paris)
-Gynecologie, Obstetrique et Fertilite = Gynecol. Obstet. Fertil.
-HASL Reports = HASL Rep.
-HBI Report = HBI Rep.
-HEC Forum = HEC Forum
-HIV Clinical Trials = HIV Clin. Trials
-HIV Medicine = HIV Med.
-HMO = HMO
-HMO Practice = HMO Pract.
-HNO = HNO
-HPB Surgery = HPB Surg.
-HPN: Hospital Purchasing News = HPN Hosp. Purch. News
-HRMagazine = HRMAGAZINE
-HSMHA Health Reports = HSMHA Health Rep.
-Haematologia = Haematologia (Budap.)
-Haematologica = Haematologica
-Haematologica Latina = Haematol. Lat.
-Haemophilia = Haemophilia
-Haemostasis = Haemostasis
-Hamatologie und Bluttransfusion = Hamatol. Bluttransfus.
-Hand = Hand
-Hand Clinics = Hand Clin.
-Hand Surgery = Hand Surg.
-Handchirurgie = Handchirurgie
-Handchirurgie, Mikrochirurgie, Plastische Chirurgie = Handchir. Mikrochir. Plast. Chir.
-Hansenologia Internationalis = Hansenol. Int.
-Harbor Dental Log = Harb. Dent. Log
-Harefuah = Harefuah
-Harvard Business Review = Harv. Bus. Rev.
-Harvard Dental Alumni Bulletin = Harv. Dent. Alumni Bull.
-Harvard Dental Bulletin = Harv. Dent. Bull.
-Harvard Health Letter = Harv. Health Lett.
-Harvard Heart Letter = Harv. Heart Lett.
-Harvard Law Review = Harv. Law Rev.
-Harvard Men's Health Watch = Harv. Mens Health Watch
-Harvard Mental Health Letter = Harv. Ment. Health Lett.
-Harvard Review of Psychiatry = Harv. Rev. Psychiatry
-Harvard Women's Health Watch = Harv. Womens Health Watch
-Harvey Lectures = Harvey Lect.
-Hastings Center Report = Hastings Cent. Rep.
-Hastings Center Studies = Hastings Cent. Stud.
-Hautarzt = Hautarzt
-Hawaii Dental Journal = Hawaii Dent. J.
-Hawaii Medical Journal = Hawaii Med. J.
-Hawaii Nurse = Hawaii Nurse
-Hawaii Nurses Pipeline = Hawaii Nurses Pipeline
-Head and Neck = Head Neck
-Head and Neck Surgery = Head Neck Surg.
-Headache = Headache
-Healing Light = Heal. Light
-Health = Health (N. Y.)
-Health Affairs = Health Aff. (Millwood)
-Health Bulletin = Health Bull. (Edinb.)
-Health Care = Health Care (Don Mills)
-Health Care Analysis = Health Care Anal.
-Health Care Cost Reengineering Report = Health Care Cost Reengineering Rep.
-Health Care Dimensions = Health Care Dimen.
-Health Care Education = Health Care Educ.
-Health Care Financing Review = Health Care Financ. Rev.
-Health Care Financing Review. Annual Supplement = Health Care Financ. Rev. Annu. Suppl.
-Health Care Financing Review. Statistical Supplement = Health Care Financ. Rev. Stat. Suppl.
-Health Care Financing Trends = Health Care Financ. Trends
-Health Care Food and Nutrition Focus = Health Care Food Nutr. Focus
-Health Care Innovations = Health Care Innov.
-Health Care Law Monthly = Health Care Law Mon.
-Health Care Law Newsletter = Health Care Law Newsl.
-Health Care Management = Health Care Manag.
-Health Care Management Review = Health Care Manage. Rev.
-Health Care Management Science = Health Care Manag. Sci.
-Health Care Marketer = Health Care Mark.
-Health Care Marketer and Target Market = Health Care Mark. Target Market
-Health Care Newsletter = Health Care Newsl.
-Health Care Planning and Marketing = Health Care Plann. Mark.
-Health Care Reform Week = Health Care Reform Week
-Health Care Security and Safety Management = Health Care Secur. Saf. Manage.
-Health Care Strategic Management = Health Care Strateg. Manage.
-Health Care Supervisor = Health Care Superv.
-Health Care Systems = Health Care Syst.
-Health Care Week = Health Care Week
-Health Care for Women International = Health Care Women Int.
-Health Care in Canada = Health Care Can.
-Health Communications and Informatics = Health Commun. Informatics
-Health Cost Management = Health Cost Manage.
-Health Data Management = Health Data Manag.
-Health Devices = Health Devices
-Health Economics = Health Econ.
-Health Education = Health Educ.
-Health Education Journal = Health Educ. J.
-Health Education Monographs = Health Educ. Monogr.
-Health Education Quarterly = Health Educ. Q.
-Health Education Reports = Health Educ. Rep.
-Health Education Research = Health Educ. Res.
-Health Education and Behavior = Health Educ. Behav.
-Health Estate = Health Estate
-Health Estate Journal = Health Estate J.
-Health Expectations = Health Expect.
-Health Facilities Management = Health Facil. Manage.
-Health Forum Journal = Health Forum J.
-Health Industry Today = Health Ind. Today
-Health Information Management = Health Inf. Manag.
-Health Information Systems and Telemedicine = Health Inf. Syst. Telemed.
-Health Laboratory Science = Health Lab. Sci.
-Health Law Project Library Bulletin = Health Law Proj. Libr. Bull.
-Health Law Vigil = Health Law Vigil
-Health Law in Canada = Health Law Can.
-Health Libraries Review = Health Libr. Rev.
-Health Management Forum = Health Manage. Forum
-Health Management Quarterly = Health Manage. Q.
-Health Management Technology = Health Manag. Technol.
-Health Manpower Literature = Health Manpow. Lit.
-Health Manpower Management = Health Manpow. Manage.
-Health Manpower Report = Health Manpow. Rep.
-Health Marketing Quarterly = Health Mark. Q.
-Health Matrix = Health Matrix
-Health News = Health News
-Health PAC Bulletin = Health PAC Bull.
-Health Perspectives = Health Perspect.
-Health Physics = Health Phys.
-Health Planning and Manpower Report = Health Plann. Manpow. Rep.
-Health Planning and Manpower Reports = Health Plann. Manpow. Rep.
-Health Policy = Health Policy
-Health Policy Quarterly = Health Policy Q.
-Health Policy Week = Health Policy Week
-Health Policy and Education = Health Policy Educ.
-Health Policy and Planning = Health Policy Plan.
-Health Practitioner. Physician Assistant = Health Pract. Physician Assist.
-Health Progress = Health Prog.
-Health Promotion = Health Promot.
-Health Psychology = Health Psychol.
-Health Reports = Health Rep.
-Health Service Journal = Health Serv. J.
-Health Services Management = Health Serv. Manage.
-Health Services Management Research = Health Serv. Manage. Res.
-Health Services Manager = Health Serv. Manager
-Health Services Manpower Review = Health Serv. Manpow. Rev.
-Health Services Reports = Health Serv. Rep.
-Health Services Research = Health Serv. Res.
-Health System Leader = Health Syst. Lead.
-Health Systems Management = Health Syst. Manage.
-Health Systems Review = Health Syst. Rev.
-Health Technology = Health Technol.
-Health Technology Assessment = Health Technol. Assess.
-Health Technology Assessment Reports = Health Technol. Assess. Rep.
-Health Transition Review = Health Transit. Rev.
-Health Trends = Health Trends
-Health Values = Health Values
-Health Visitor = Health Visit.
-Health and Human Rights = Health Hum. Rights
-Health and Medical Care Services Review = Health Med. Care Serv. Rev.
-Health and Medicine = Health Med.
-Health and Population: Perspectives and Issues = Health Popul. Perspect. Issues
-Health and Quality of Life Outcomes = Health Qual. Life Outcomes
-Health and Social Service Journal = Health Soc. Serv. J.
-Health and Social Work = Health Soc. Work
-Health of the People = Health People
-Healthcare Alabama = Healthc. Ala.
-Healthcare Benchmarks = Healthc. Benchmarks
-Healthcare Bottom Line = Healthc. Bottom Line
-Healthcare Computing and Communications = Healthc. Comput. Commun.
-Healthcare Demand and Disease Management = Healthc. Demand Dis. Manag.
-Healthcare Executive = Healthc. Exec.
-Healthcare Executive Currents = Healthc. Exec. Curr.
-Healthcare Facilities Management Series = Healthc. Facil. Manag. Ser.
-Healthcare Financial Management = Healthc. Financ. Manage.
-Healthcare Foodservice = Healthc. Foodserv.
-Healthcare Forum = Healthc. Forum
-Healthcare Forum Journal = Healthc. Forum J.
-Healthcare Hazardous Materials Management = Healthc. Hazard. Mater. Manage.
-Healthcare Human Resources = Healthc. Hum. Resour.
-Healthcare Informatics = Healthc. Inform.
-Healthcare Information Management = Healthc. Inf. Manage.
-Healthcare Management Forum = Healthc. Manage. Forum
-Healthcare Protection Management = Healthc. Prot. Manage.
-Healthcare Strategist = Healthc. Strateg.
-Healthcare Systems Strategy Report = Healthc. Syst. Strategy Rep.
-Healthcare Trends and Transition = Healthc. Trends Transit.
-Healthcarepapers = Healthc. Pap.
-Healthmarketing = Healthmarketing
-Healthplan = Healthplan
-Healthspan = Healthspan
-Healthtexas = Healthtexas
-Hearing Research = Hear. Res.
-Heart = Heart
-Heart Disease = Heart Dis.
-Heart Disease and Stroke = Heart Dis. Stroke
-Heart Failure Reviews = Heart Fail. Rev.
-Heart Rhythm = Heart Rhythm
-Heart Surgery Forum = Heart Surg. Forum
-Heart and Lung = Heart Lung
-Heart and Vessels = Heart Vessels
-Heart and Vessels. Supplement = Heart Vessels. Suppl.
-Heartbeat = Heartbeat
-Heat Transfer Engineering=Heat Transfer Eng.;HTEND2;8/YR
-Heating, Piping and Air Conditioning = Heat. Piping Air Cond.
-Hecheng Xiangjiao Gongye=Hecheng Xiangjiao Gongye;HXGOEA;BM
-Hefte zur Unfallheilkunde = Hefte Unfallheilkd.
-Helicobacter = Helicobacter
-Hellenic Journal of Cardiology = Hellenic J. Cardiol.
-Hellenic Journal of Nuclear Medicine = Hell. J. Nucl. Med.
-Hellenika Stomatologika Chronika = Hell. Stomatol. Chron.
-Helleniko Periodiko gia Stomatike kai Gnathoprosopike Cheirourgike = Hell. Period. Stomat. Gnathopathoprosopike. Cheir.
-Hellenis Adelphe = Hell. Adelphe
-Helvetica Chimica Acta = Helv. Chim. Acta
-Helvetica Chirurgica Acta = Helv. Chir. Acta
-Helvetica Chirurgica Acta. Supplementum = Helv. Chir. Acta. Suppl.
-Helvetica Medica Acta = Helv. Med. Acta
-Helvetica Medica Acta. Supplement = Helv. Med. Acta. Suppl.
-Helvetica Odontologica Acta = Helv. Odontol. Acta
-Helvetica Paediatrica Acta = Helv. Paediatr. Acta
-Helvetica Paediatrica Acta. Supplementum = Helv. Paediatr. Acta. Suppl.
-Helvetica Physiologica et Pharmacologica Acta = Helv. Physiol. Pharmacol. Acta
-Hematologic Pathology = Hematol. Pathol.
-Hematological Oncology = Hematol. Oncol.
-Hematology = Hematology
-Hematology Journal = Hematol. J.
-Hematology and Cell Therapy = Hematol. Cell Ther.
-Hematology/Oncology Clinics of North America = Hematol. Oncol. Clin. North Am.
-Hematopathology and Molecular Hematology = Hematopathol. Mol. Hematol.
-Hemoglobin = Hemoglobin
-Hemostase = Hemostase
-Henry E. Sigerist Supplements to the Bulletin of the History of Medicine = Henry E. Sigerist Suppl. Bull. Hist. Med.
-Henry Ford Hospital Medical Journal = Henry Ford Hosp. Med. J.
-Hepato-Gastroenterology = Hepatogastroenterology.
-Hepatobiliary and Pancreatic Diseases International = Hepatobiliary Pancreat. Dis. Int.
-Hepatology = Hepatology
-Hereditas = Hereditas
-Heredity = Heredity
-Hernia = Hernia
-Herz = Herz
-Heteroatom Chemistry=Heteroat. Chem.;HETCE8;7/YR
-Heterocycles=Heterocycles;HTCYAM;14/YR
-Heterocyclic Communications=Heterocycl. Commun.;HCOMEX;BM
-Hifuka Kiyo (Acta Dermatologica) = Hifuka Kiyo
-Higashi Nippon Shigaku Zasshi = Higashi Nippon Shigaku Zasshi
-High Altitude Medicine and Biology = High Alt. Med. Biol.
-High Energy Chemistry=High Energy Chem.;HIECAP;BM
-High Performance Polymers=High Perform. Polym.;HPPOEX;Q
-High Temperature=High Temp.;HITEA4;BM
-High Temperature Materials and Processes (London, United Kingdom)=High Temp. Mater. Processes (London, U. K.);HTMPEF;6/YR
-High Temperatures - High Pressures=High Temp. - High Pressures;HTHPAK;BM
-Higijena: Casopis za Higijenu, Mikrobiologiju, Epidemiologiju i Sanitarnu Tehniku = Hig. Cas. Hig. Mikrobiol. Epidemiol. Sanit. Teh.
-Hillside Journal of Clinical Psychiatry = Hillside J. Clin. Psychiatry
-Hindustan Antibiotics Bulletin = Hindustan Antibiot. Bull.
-Hinyokika Kiyo (Acta Urologica Japonica) = Hinyokika Kiyo
-Hip = Hip
-Hippocampus = Hippocampus
-Hippokrates = Hippokrates
-Hiroshima Daigaku Shigaku Zasshi (Journal of Hiroshima University Dental Society) = Hiroshima Daigaku Shigaku Zasshi
-Hiroshima Journal of Medical Sciences = Hiroshima J. Med. Sci.
-Hispalis Medica = Hisp. Med.
-Histochemical Journal = Histochem. J.
-Histochemie = Histochemie
-Histochemistry = Histochemistry
-Histochemistry and Cell Biology = Histochem. Cell Biol.
-Histology and Histopathology = Histol. Histopathol.
-Histopathology = Histopathology
-Hoitotiede = Hoitotiede
-Hoja Tisiologica = Hoja Tisiol.
-Hokenfu Zasshi (Japanese Journal for Public Health Nurse) = Hokenfu Zasshi
-Hokkaido Igaku Zasshi (Hokkaido Journal of Medical Science) = Hokkaido Igaku Zasshi
-Hokkaido Shika Ishikai Shi = Hokkaido Shika Ishikai Shi
-Holistic Assertive Nurse = Holistic Assertive Nurse
-Holistic Nursing Practice = Holist. Nurs. Pract.
-Holzforschung=Holzforschung;HOLZAZ;BM
-Home Care Economics = Home Care Econ.
-Home Care Provider = Home Care Provid.
-Home Health Care Services Quarterly = Home Health Care Serv. Q.
-Home Health Journal = Home Health J.
-Home Health Review = Home Health Rev.
-Home Healthcare Nurse = Home Healthc. Nurse
-Homeopathy = Homeopathy
-Homeostasis in Health and Disease = Homeost. Health Dis.
-Hoppe-Seylers Zeitschrift fur Physiologische Chemie = Hoppe. Seylers Z. Physiol. Chem.
-Horizons in Biochemistry and Biophysics = Horiz. Biochem. Biophys.
-Hormone Research = Horm. Res.
-Hormone and Metabolic Research = Horm. Metab. Res.
-Hormone and Metabolic Research. Supplement = Horm. Metab. Res. Suppl.
-Hormones = Hormones
-Hormones and Behavior = Horm. Behav.
-Horumon to Rinsho (Clinical Endocrinology) = Horumon To Rinsho
-Hospice Journal = Hosp. J.
-Hospital = Hospital (Rio J.)
-Hospital Administration = Hosp. Adm. (Chic.)
-Hospital Administration Currents = Hosp. Admin. Curr.
-Hospital Administration in Canada = Hosp. Adm. Can.
-Hospital Admitting Monthly = Hosp. Admitting Mon.
-Hospital Aviation = Hosp. Aviat.
-Hospital Bond Review = Hosp. Bond Rev.
-Hospital Capital Finance = Hosp. Cap. Finance
-Hospital Case Management = Hosp. Case Manag.
-Hospital Cost Management and Accounting = Hosp. Cost Manag. Account.
-Hospital Development = Hosp. Dev.
-Hospital Employee Health = Hosp. Employee Health
-Hospital Engineering = Hosp. Eng.
-Hospital Entrepreneurs Newsletter = Hosp. Entrep. Newsl.
-Hospital Equipment and Supplies = Hosp. Equip. Supplies
-Hospital Ethics = Hosp. Ethics
-Hospital Financial Management = Hosp. Financ. Manage.
-Hospital Food and Nutrition Focus = Hosp. Food Nutr. Focus
-Hospital Formulary = Hosp. Formul.
-Hospital Forum = Hosp. Forum
-Hospital Gift Shop Management = Hosp. Gift Shop Manage.
-Hospital Guest Relations Report = Hosp. Guest Relations Rep.
-Hospital Hazardous Materials Management = Hosp. Hazard. Mater. Manage.
-Hospital Health Care Newsletter = Hosp. Health Care Newsl.
-Hospital Infection Control = Hosp. Infect. Control
-Hospital Law Newsletter = Hosp. Law Newsl.
-Hospital Libraries = Hosp. Libr.
-Hospital Management = Hosp. Manage.
-Hospital Management Communications = Hosp. Manage. Commun.
-Hospital Management Quarterly = Hosp. Manage. Q.
-Hospital Manager = Hosp. Manager
-Hospital Materials Management = Hosp. Mater. Manage.
-Hospital Materiel Management Quarterly = Hosp. Mater. Manage. Q.
-Hospital Medical Staff = Hosp. Med. Staff
-Hospital Medicine = Hosp. Med.
-Hospital Outlook = Hosp. Outlook
-Hospital Patient Relations Report = Hosp. Patient Relat. Rep.
-Hospital Peer Review = Hosp. Peer Rev.
-Hospital Pharmacy = Hosp. Pharm.
-Hospital Physician = Hosp. Physician
-Hospital Practice = Hosp. Pract.
-Hospital Practice (Hospital Edition) = Hosp. Pract. (Hosp. Ed.)
-Hospital Practice (Office Edition) = Hosp. Pract. (Off. Ed.)
-Hospital Progress = Hosp. Prog.
-Hospital Purchasing Management = Hosp. Purch. Manage.
-Hospital Quarterly = Hosp. Q.
-Hospital Revenue Report = Hosp. Revenue Rep.
-Hospital Risk Management = Hosp. Risk Manage.
-Hospital Security and Safety Management = Hosp. Secur. Saf. Manage.
-Hospital Strategy Report = Hosp. Strategy Rep.
-Hospital Supervision = Hosp. Superv.
-Hospital Supervisors Bulletin = Hosp. Superv. Bull.
-Hospital Technology Series = Hosp. Technol. Ser.
-Hospital Topics = Hosp. Top.
-Hospital Trustee = Hosp. Trustee
-Hospital and Community Psychiatry = Hosp. Community Psychiatry
-Hospital and Health Services Administration = Hosp. Health Serv. Adm.
-Hospital and Health Services Review = Hosp. Health Serv. Rev.
-Hospitalist = Hosp. Natl. Assoc. Inpatient. Physicians.
-Hospitals = Hospitals
-Hospitals and Health Networks = Hosp. Health Netw.
-Hotetsu Rinsho (Practice in Prosthodontics) = Hotetsu Rinsho
-How to Evaluate Health Programs = How Eval. Health Programs
-Hu Li Za Zhi (Journal of Nursing) = Hu Li Za Zhi
-Hua Xi Yi Ke Da Xue Xue Bao (Journal of West China University of Medical Sciences) = Hua Xi Yi Ke Da Xue Xue Bao
-Huadong Ligong Daxue Xuebao, Ziran Kexueban=Huadong Ligong Daxue Xuebao, Ziran Kexueban;HLIXEV;BM
-Huagong Xuebao (Chinese Edition)=Huagong Xuebao (Chin. Ed.);HUKHAI;M
-Huanjing Huaxue=Huanjing Huaxue;HUHUDB;BM
-Huanjing Kexue Xuebao=Huanjing Kexue Xuebao;HKXUDL;M
-Huaxue=Huaxue;HUHSA2;Q
-Huaxue Fanying Gongcheng Yu Gongyi=Huaxue Fanying Gongcheng Yu Gongyi;HFGGEU;BM
-Huaxue Shiji=Huaxue Shiji;HUSHDR;M
-Huaxue Tongbao=Huaxue Tongbao;HHTPAU;M
-Huaxue Wuli Xuebao=Huaxue Wuli Xuebao;HWXUE4;BM
-Huaxue Xuebao=Huaxue Xuebao;HHHPA4;SM
-Human Antibodies = Hum. Antibodies
-Human Antibodies and Hybridomas = Hum. Antibodies Hybridomas
-Human Biology = Hum. Biol.
-Human Biology in Oceania = Hum. Biol. Oceania
-Human Brain Mapping = Hum. Brain Mapp.
-Human Cell = Hum. Cell
-Human Development = Hum. Dev.
-Human Factors = Hum. Factors
-Human Fertility = Hum. Fertil.
-Human Gene Therapy = Hum. Gene Ther.
-Human Genetics = Hum. Genet.
-Human Genetics. Supplement = Hum. Genet. Suppl.
-Human Genomics = Hum. Genomics
-Human Heredity = Hum. Hered.
-Human Immunology = Hum. Immunol.
-Human Molecular Genetics = Hum. Mol. Genet.
-Human Mutation = Hum. Mutat.
-Human Neurobiology = Hum. Neurobiol.
-Human Nutrition. Applied Nutrition = Hum. Nutr. Appl. Nutr.
-Human Nutrition. Clinical Nutrition = Hum. Nutr. Clin. Nutr.
-Human Organization = Hum. Organ.
-Human Pathology = Hum. Pathol.
-Human Physiology = Hum. Physiol.
-Human Reproduction = Hum. Reprod.
-Human Reproduction Update = Hum. Reprod. Update
-Human Resource Management = Hum. Resour. Manage.
-Human Toxicology = Hum. Toxicol.
-Human Vaccines = Hum. Vaccin.
-Human and Experimental Toxicology = Hum. Exp. Toxicol.
-Humangenetik = Humangenetik
-Hunan Yi Ke Da Xue Xue Bao (Bulletin of Hunan Medical University) = Hunan Yi Ke Da Xue Xue Bao
-Hungarian Journal of Industrial Chemistry=Hung. J. Ind. Chem.;HJICAI;4/YR
-Hwahak Konghak=Hwahak Konghak;HHKHAT;BM
-Hybridoma = Hybridoma
-Hybridoma and Hybridomics = Hybrid. Hybridomics
-Hydrometallurgy=Hydrometallurgy;HYDRDA;M
-Hygie = Hygie
-Hygiene Mentale = Hyg. Ment.
-Hyperfine Interactions=Hyperfine Interact.;HYINDN;28/YR
-Hypertension = Hypertension
-Hypertension Research = Hypertens. Res.
-IADS Newsletter = IADS Newsl.
-IARC Monographs on the Evaluation of Carcinogenic Risk of Chemicals to Man = IARC Monogr. Eval. Carcinog. Risk Chem. Man
-IARC Monographs on the Evaluation of Carcinogenic Risks to Humans = IARC Monogr. Eval. Carcinog. Risks Hum.
-IARC Monographs on the Evaluation of Carcinogenic Risks to Humans. Supplement = IARC Monogr. Eval. Carcinog. Risks Hum. Suppl.
-IARC Monographs on the Evaluation of the Carcinogenic Risk of Chemicals to Humans = IARC Monogr. Eval. Carcinog. Risk Chem. Hum.
-IARC Monographs on the Evaluation of the Carcinogenic Risk of Chemicals to Humans. Supplement = IARC Monogr. Eval. Carcinog. Risk Chem. Hum. Suppl.
-IARC Scientific Publications = IARC Sci. Publ.
-ICD Scientific and Educational Journal = ICD Sci. Educ. J.
-IDAA Communique = IDAA Commun.
-IDO Reports = IDO Rep.
-IEE Proceedings. Nanobiotechnology = IEE Proc. Nanobiotechnol.
-IEEE Aerospace and Electronic Systems Magazine = IEEE Aero. El. Sys. Mag.
-IEEE Annals of the History of Computing = IEEE Ann. Hist. Comput.
-IEEE Antennas and Propagation Magazine = IEEE Antennas. Propag.
-IEEE Antennas and Wireless Propagation Letters = IEEE Antenn. Wirel. Pr.
-IEEE Circuits & Devices = IEEE Circuits. Device.
-IEEE Circuits and Devices Magazine = IEEE Circuit. Devic.
-IEEE Communications Letters = IEEE Commun. Lett.
-IEEE Communications Magazine = IEEE Commun. Mag.
-IEEE Computational Science & Engineering = IEEE Comput. Sci. Eng.
-IEEE Computer Applications in Power = IEEE Comput. Appl. Pow.
-IEEE Computer Graphics and Applications = IEEE Comput. Graph.
-IEEE Computer Group News = IEEE Comput. Group. N.
-IEEE Concurrency = IEEE Concurr.
-IEEE Control Systems Magazine = IEEE Contr. Syst. Mag.
-IEEE Design & Test of Computers = IEEE Des. Test. Comput.
-IEEE Electrical Insulation Magazine = IEEE Electr. Insul. M.
-IEEE Electromagnetic Compatibility Symposium Record = IEEE Electroman. Comp.
-IEEE Electron Device Letters = IEEE Electr. Device. L.
-IEEE Engineering in Medicine and Biology Magazine = IEEE Eng. Med. Biol. Mag.
-IEEE Expert-intelligent Systems & their Applications = IEEE Expert.
-IEEE Geoscience and Remote Sensing Letters = IEEE Geosci. Remote. S.
-IEEE Industry Applications Magazine = IEEE Ind. Appl. Mag.
-IEEE Instrumentation & Measurement Magazine = IEEE Instru. Meas. Mag.
-IEEE Intelligent Systems = IEEE Intell. Syst.
-IEEE Intelligent Systems & their Applications = IEEE Intell. Syst. App.
-IEEE Internet Computing = IEEE Internet. Comput.
-IEEE Journal of Oceanic Engineering = IEEE J. Oceanic. Eng.
-IEEE Journal of Quantum Electronics = IEEE J. Quantum. Electron.
-IEEE Journal of Robotics and Automation = IEEE T. Robotic. Autom.
-IEEE Journal of Selected Topics in Quantum Electronics = IEEE J. Sel. Topics in Quantum Electron.
-IEEE Journal of Solid-State Circuits = IEEE J. Solid-St. Circ.
-IEEE Journal on Selected Areas in Communications = IEEE J. Sel. Area. Comm.
-IEEE Micro = IEEE Micro.
-IEEE Microwave Magazine = IEEE Microw. Mag.
-IEEE Microwave and Guided Wave Letters = IEEE Microw. Guided. W.
-IEEE Microwave and Wireless Components Letters = IEEE Microw. Wirel. Co.
-IEEE Multimedia = IEEE Multimedia.
-IEEE Network = IEEE Network.
-IEEE Parallel & Distributed Technology = IEEE Parall. Distrib.
-IEEE Personal Communications = IEEE Pers. Commun.
-IEEE Pervasive Computing = IEEE Pervas. Comput.
-IEEE Photonics Technology Letters = IEEE Photonic. Tech. L.
-IEEE Potentials = IEEE Potentials.
-IEEE Robotics & Automation Magazine = IEEE Robot. Autom. Mag.
-IEEE Security & Privacy = IEEE Secur. Priv.
-IEEE Sensors Journal = IEEE Sens. J.
-IEEE Signal Processing Letters = IEEE Signal. Proc. Let.
-IEEE Signal Processing Magazine = IEEE Signal. Proc. Mag.
-IEEE Software = IEEE Software.
-IEEE Spectrum = IEEE Spectrum.
-IEEE Technology and Society Magazine = IEEE Technol. Soc. Mag.
-IEEE Transactions on Acoustics Speech and Signal Processing = IEEE T. Acoust. Speech.
-IEEE Transactions on Advanced Packaging = IEEE Trans. Adv. Pack.
-IEEE Transactions on Aerospace = IEEE T. Aerosp.
-IEEE Transactions on Aerospace and Electronic Systems = IEEE T. Aero. Elec. Sys.
-IEEE Transactions on Aerospace and Naval Electronics = IEEE T. Aero. Nav. Elec.
-IEEE Transactions on Aerospace and Navigational Electronics = IEEE Trans. Aerosp. N.
-IEEE Transactions on Antennas and Propagation = IEEE Trans. Antennas Propag.
-IEEE Transactions on Applications and Industry = IEEE T. Appl. Ind.
-IEEE Transactions on Applied Superconductivity = IEEE T. Appl. Supercon.
-IEEE Transactions on Audio = IEEE Trans. Audio.
-IEEE Transactions on Audio Speech and Language Processing = IEEE T. Audio. Speech.
-IEEE Transactions on Audio and Electroacoustics = IEEE T. Acoust. Speech.
-IEEE Transactions on Automatic Control = IEEE T. Automat. Contr.
-IEEE Transactions on Automation Science and Engineering = IEEE T. Autom. Sci. Eng.
-IEEE Transactions on Biomedical Engineering = IEEE Trans. Biomed. Eng.
-IEEE Transactions on Broadcast and Television Receivers = IEEE T. Broadc. Telev.
-IEEE Transactions on Broadcasting = IEEE T. Broadcast.
-IEEE Transactions on Circuit Theory = IEEE T. Circuits. Syst.
-IEEE Transactions on Circuits and Systems = IEEE T. Circuits. Syst.
-IEEE Transactions on Circuits and Systems For Video Technology = IEEE T. Circ. Syst. Vid.
-IEEE Transactions on Circuits and Systems I-Fundamental Theory and Applications = IEEE T. Circuits-I.
-IEEE Transactions on Circuits and Systems I-Regular Papers = IEEE T. Circuits-I.
-IEEE Transactions on Circuits and Systems Ii-Analog and Digital Signal Processing = IEEE T. Circuits-Ii.
-IEEE Transactions on Circuits and Systems Ii-Express Briefs = IEEE T. Circuits-Ii.
-IEEE Transactions on Communication Technology = IEEE T. Commun. Techn.
-IEEE Transactions on Communication and Electronics = IEEE T. Commun. Electr.
-IEEE Transactions on Communications = IEEE T. Commun.
-IEEE Transactions on Communications Systems = IEEE T. Commun. Syst.
-IEEE Transactions on Component Parts = IEEE T. Compon. Parts.
-IEEE Transactions on Components Hybrids and Manufacturing Technology = IEEE T. Compon. Hybr.
-IEEE Transactions on Components Packaging and Manufacturing Technology Part A = IEEE T. Compon. Pack. A.
-IEEE Transactions on Components Packaging and Manufacturing Technology Part B-Advanced Packaging = IEEE T. Compon. Pack. B.
-IEEE Transactions on Components and Packaging Technologies = IEEE T. Compon. Pack. T.
-IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems = IEEE T. Comput. Aid. D.
-IEEE Transactions on Computers = IEEE T. Comput.
-IEEE Transactions on Consumer Electronics = IEEE T. Consum. Electr.
-IEEE Transactions on Control Systems Technology = IEEE T. Contr. Syst. T.
-IEEE Transactions on Dependable and Secure Computing = IEEE T. Depend. Secure.
-IEEE Transactions on Device and Materials Reliability = IEEE T. Device. Mat. Re.
-IEEE Transactions on Dielectrics and Electrical Insulation = IEEE T. Dielect. El. In.
-IEEE Transactions on Education = IEEE T. Educ.
-IEEE Transactions on Electrical Insulation = IEEE T. Electr. Insul.
-IEEE Transactions on Electromagnetic Compatibility = IEEE T. Electromagn. C.
-IEEE Transactions on Electron Devices = IEEE T. Electron. Dev.
-IEEE Transactions on Electronic Computers = IEEE Trans. Electron.
-IEEE Transactions on Electronics Packaging Manufacturing = IEEE T. Electron. Pack.
-IEEE Transactions on Energy Conversion = IEEE T. Energy. Conver.
-IEEE Transactions on Engineering Management = IEEE T. Eng. Manage.
-IEEE Transactions on Engineering Writing and Speech = IEEE T. Prof. Commun.
-IEEE Transactions on Evolutionary Computation = IEEE T. Evolut. Comput.
-IEEE Transactions on Fuzzy Systems = IEEE T. Fuzzy. Syst.
-IEEE Transactions on Geoscience Electronics = IEEE T. Geosci. Elect.
-IEEE Transactions on Geoscience and Remote Sensing = IEEE Trans. Geosci. Remote Sens.
-IEEE Transactions on Human Factors in Electronics = IEEE Trans. Hum. Fact.
-IEEE Transactions on Human Factors in Engineering = IEEE T. Hum. Fact. Eng.
-IEEE Transactions on Image Processing = IEEE T. Image. Process.
-IEEE Transactions on Industrial Electronics = IEEE T. Ind. Electron.
-IEEE Transactions on Industrial Electronics and Control Instrumentation = IEEE T. Ind. El. Con. In.
-IEEE Transactions on Industry Applications = IEEE T. Ind. Appl.
-IEEE Transactions on Industry and General Applications = IEEE Trans. Ind. Gen. A.
-IEEE Transactions on Information Technology in Biomedicine = IEEE Trans. Inf. Technol. Biomed.
-IEEE Transactions on Information Theory = IEEE T. Inform. Theory.
-IEEE Transactions on Instrumentation and Measurement = IEEE T. Instrum. Meas.
-IEEE Transactions on Intelligent Transportation Systems = IEEE T. Intell. Transp.
-IEEE Transactions on Knowledge and Data Engineering = IEEE T. Knowl. Data. En.
-IEEE Transactions on Magnetics = IEEE T. Magn.
-IEEE Transactions on Man-Machine Systems = IEEE T. Man. Machine.
-IEEE Transactions on Manufacturing Technology = IEEE T. Manuf. Tech.
-IEEE Transactions on Medical Imaging = IEEE Trans. Med. Imaging
-IEEE Transactions on Microwave Theory and Techniques = IEEE T. Microw. Theory.
-IEEE Transactions on Military Electronics = IEEE T. Mil. Electron.
-IEEE Transactions on Mobile Computing = IEEE T. Mobile. Comput.
-IEEE Transactions on Multimedia = IEEE T. Multimedia.
-IEEE Transactions on Nanobioscience = IEEE Trans. Nanobioscience
-IEEE Transactions on Nanotechnology = IEEE T. Nanotechnol.
-IEEE Transactions on Neural Networks = IEEE T. Neural. Networ.
-IEEE Transactions on Neural Systems and Rehabilitation Engineering = IEEE Trans. Neural Syst. Rehabil. Eng.
-IEEE Transactions on Nuclear Science = IEEE T. Nucl. Sci.
-IEEE Transactions on Parallel and Distributed Systems = IEEE T. Parall. Distr.
-IEEE Transactions on Parts Hybrids and Packaging = IEEE T. Parts. Hyb. Pac.
-IEEE Transactions on Parts Materials and Packaging = IEEE Tr. Parts. Mater.
-IEEE Transactions on Pattern Analysis and Machine Intelligence = IEEE T. Pattern. Anal.
-IEEE Transactions on Plasma Science = IEEE T. Plasma. Sci.
-IEEE Transactions on Power Apparatus and Systems = IEEE T. Power. Ap. Syst.
-IEEE Transactions on Power Delivery = IEEE T. Power. Deliver.
-IEEE Transactions on Power Electronics = IEEE T. Power. Electr.
-IEEE Transactions on Power Systems = IEEE T. Power. Syst.
-IEEE Transactions on Product Engineering and Production = IEEE T. Prod. Eng. Prod.
-IEEE Transactions on Professional Communication = IEEE T. Prof. Commun.
-IEEE Transactions on Rehabilitation Engineering = IEEE Trans. Rehabil. Eng.
-IEEE Transactions on Reliability = IEEE T. Reliab.
-IEEE Transactions on Robotics = IEEE T. Robot.
-IEEE Transactions on Robotics and Automation = IEEE T. Robotic. Autom.
-IEEE Transactions on Semiconductor Manufacturing = IEEE T. Semiconduct. M.
-IEEE Transactions on Signal Processing = IEEE T. Signal. Proces.
-IEEE Transactions on Software Engineering = IEEE T. Software. Eng.
-IEEE Transactions on Sonics and Ultrasonics = IEEE T. Son. Ultrason.
-IEEE Transactions on Space Electronics and Telemetry = IEEE T. Space. El. Tel.
-IEEE Transactions on Speech and Audio Processing = IEEE T. Speech. Audi. P.
-IEEE Transactions on Systems Man and Cybernetics = IEEE T. Syst. Man. Cyb.
-IEEE Transactions on Systems Man and Cybernetics Part A-Systems and Humans = IEEE T. Syst. Man. Cy. A.
-IEEE Transactions on Systems Man and Cybernetics Part B-Cybernetics = IEEE T. Syst. Man. Cy. B.
-IEEE Transactions on Systems Man and Cybernetics Part C-Applications and Reviews = IEEE T. Syst. Man. Cy. C.
-IEEE Transactions on Systems Science and Cybernetics = IEEE T. Syst. Sci. Cyb.
-IEEE Transactions on Systems, Man and Cybernetics = IEEE Trans. Syst. Man Cybern.
-IEEE Transactions on Ultrasonics Ferroelectrics and Frequency Control = IEEE T. Ultrason. Ferr.
-IEEE Transactions on Vehicular Communications = IEEE T. Veh. Commun.
-IEEE Transactions on Vehicular Technology = IEEE T. Veh. Technol.
-IEEE Transactions on Very Large Scale Integration Vlsi Systems = IEEE T. Vlsi. Syst.
-IEEE Transactions on Visualization and Computer Graphics = IEEE T. Vis. Comput. Gr.
-IEEE Transactions on Wireless Communications = IEEE T. Wirel. Commun.
-IEEE Vehicular Technology Group-Annual Conference = IEEE Veh. Technol. Gr.
-IEEE Wireless Communications = IEEE Wirel. Commun.
-IEEE-ACM Transactions on Computational Biology and Bioinformatics = IEEE-ACM T. Comput. Bi.
-IEEE-ACM Transactions on Computational Biology and Bioinformatiocs = IEEE-ACM T. Comput. Bi.
-IEEE-ACM Transactions on Networking = IEEE ACM T. Network.
-IEEE-ASMETransactions on Mechatronics = IEEE-ASME T. Mech.
-IEEE/ACM Transactions on Computational Biology and Bioinformatics = IEEE/ACM Trans. Comput. Biol. Bioinform.
-IHRIM = IHRIM
-ILAR Journal=ILAR J.;IJLOAC;Q
-IMA Journal of Mathematics Applied in Medicine and Biology = IMA J. Math. Appl. Med. Biol.
-IMJ, Illinois Medical Journal = IMJ Ill. Med. J.
-IMS, Industrial Medicine and Surgery = IMS Ind. Med. Surg.
-IPPF Medical Bulletin = IPPF Med. Bull.
-IRB; A Review of Human Subjects Research = IRB.
-IRCS Journal of Medical Science = IRCS J. Med. Sci.
-IRM; Information and Records Management = IRM.
-ISA Transactions = ISA Trans.
-ISIJ International=ISIJ Int.;IINTEY;M
-IUBMB Life = IUBMB Life
-Igaku Kenkyu (Acta Medica) = Igaku Kenkyu
-Igaku to Seibutsugaku (Medicine and Biology) = Igaku To Seibutsugaku
-Igiene Moderna = Ig. Mod.
-Illinois Dental Journal = Ill. Dent. J.
-Image = Image (IN)
-Image; The Journal of Nursing Scholarship = Image J. Nurs. Sch.
-Images; Marquette University Dental Reflections = Images. Marquette Univ. Dent. Reflections
-Immunitat und Infektion = Immun. Infekt.
-Immunity = Immunity
-Immunobiology = Immunobiology
-Immunobiology. Supplement = Immunobiol. Suppl.
-Immunochemistry = Immunochemistry
-Immunodeficiency = Immunodeficiency
-Immunodeficiency Reviews = Immunodefic. Rev.
-Immunogenetics = Immunogenetics
-Immunologic Research = Immunol. Res.
-Immunological Communications = Immunol. Commun.
-Immunological Investigations = Immunol. Invest.
-Immunological Reviews = Immunol. Rev.
-Immunology = Immunology
-Immunology Letters = Immunol. Lett.
-Immunology Series = Immunol. Ser.
-Immunology Today = Immunol. Today
-Immunology and Cell Biology = Immunol. Cell Biol.
-Immunology. Supplement = Immunol. Suppl.
-Immunomethods = Immunomethods
-Immunopharmacology = Immunopharmacology
-Immunopharmacology and Immunotoxicology = Immunopharmacol. Immunotoxicol.
-Immunotechnology = Immunotechnology
-Impact of Science on Society = Impact Sci. Soc.
-Implant Dentistry = Implant Dent.
-Implant Society = Implant Soc.
-Implantologist = Implantologist
-Important Advances in Oncology = Important Adv. Oncol.
-Impressions = Impressions (Orange)
-Imprint = Imprint
-In Practice = In Pract.
-In Silico Biology = In Silico Biol.
-In Vitro = In Vitro
-In Vitro Cellular and Developmental Biology = In Vitro Cell. Dev. Biol.
-In Vitro Cellular and Developmental Biology. Animal = In Vitro Cell. Dev. Biol. Anim.
-In Vitro and Molecular Toxicology = In Vitr. Mol. Toxicol.
-In Vitro. Monograph = In Vitro. Monogr.
-In Vivo = In Vivo
-Incisivo = Incisivo
-Indent; Journal of International Dentistry; English Edition = Indent [Engl.]
-Indian Chemical Engineer=Indian Chem. Eng.;ICENFW;Q
-Indian Heart Journal = Indian Heart J.
-Indian Heart Journal. Teaching Series = Indian Heart J. Teach. Ser.
-Indian Journal of Animal Sciences = Indian J. Anim. Sci.
-Indian Journal of Biochemistry = Indian J. Biochem.
-Indian Journal of Biochemistry & Biophysics=Indian J. Biochem. Biophys.;IJBBBQ;BM
-Indian Journal of Biochemistry and Biophysics = Indian J. Biochem. Biophys.
-Indian Journal of Cancer = Indian J. Cancer
-Indian Journal of Chemical Technology=Indian J. Chem. Technol.;ICHTEU;BM
-Indian Journal of Chemistry = Indian J. Chem.
-Indian Journal of Chemistry, Section B: Organic Chemistry Including Medicinal Chemistry=Indian J. Chem., Sect. B: Org. Chem. Incl. Med. Chem.;IJSBDB;M
-Indian Journal of Chest Diseases = Indian J. Chest Dis.
-Indian Journal of Chest Diseases and Allied Sciences = Indian J. Chest Dis. Allied Sci.
-Indian Journal of Dental Research = Indian J. Dent. Res.
-Indian Journal of Dermatology = Indian J. Dermatol.
-Indian Journal of Experimental Biology = Indian J. Exp. Biol.
-Indian Journal of Fibre & Textile Research=Indian J. Fibre Text. Res.;IJFRET;Q
-Indian Journal of Gastroenterology = Indian J. Gastroenterol.
-Indian Journal of Heterocyclic Chemistry=Indian J. Heterocycl. Chem.;IJCHEI;Q
-Indian Journal of Leprosy = Indian J. Lepr.
-Indian Journal of Malariology = Indian J. Malariol.
-Indian Journal of Medical Research = Indian J. Med. Res.
-Indian Journal of Medical Sciences = Indian J. Med. Sci.
-Indian Journal of Ophthalmology = Indian J. Ophthalmol.
-Indian Journal of Pathology and Bacteriology = Indian J. Pathol. Bacteriol.
-Indian Journal of Pathology and Microbiology = Indian J. Pathol. Microbiol.
-Indian Journal of Pediatrics = Indian J. Pediatr.
-Indian Journal of Physics=Indian J. Phys.;IJPNCV;M
-Indian Journal of Physiology and Pharmacology = Indian J. Physiol. Pharmacol.
-Indian Journal of Public Health = Indian J. Public Health
-Indian Journal of Pure and Applied Physics=Indian J. Pure Appl. Phys.;IJOPAU;M
-Indian Medical Journal = Indian Med. J.
-Indian Pediatrics = Indian Pediatr.
-Indian Practitioner = Indian Pract.
-Indian Veterinary Journal = Indian Vet. J.
-Indiana Medicine = Indiana Med.
-Indiana Nurse = Indiana Nurse
-Indicator = Indicator
-Indoor Air = Indoor Air
-Industrial & Engineering Chemistry Research=Ind. Eng. Chem. Res.;IECRED;BW
-Industrial Engineering = Ind. Eng.
-Industrial Health = Ind. Health
-Industrial Medicine and Surgery = Ind. Med. Surg.
-Industrial and Labor Relations Review = Ind. Labor Relat. Rev.
-Industry and Health Care = Ind. Health Care (Cambridge Ma.)
-Infection = Infection
-Infection Control = Infect. Control
-Infection Control Canada = Infect. Control Can.
-Infection Control Digest = Infect. Control Dig.
-Infection Control Rounds = Infect. Control Rounds
-Infection Control and Hospital Epidemiology = Infect. Control Hosp. Epidemiol.
-Infection Control and Urological Care = Infect. Control Urol. Care
-Infection and Immunity = Infect. Immun.
-Infection, Genetics and Evolution = Infect. Genet. Evol.
-Infectious Agents and Disease = Infect. Agents Dis.
-Infectious Disease Clinics of North America = Infect. Dis. Clin. North Am.
-Infectious Diseases in Obstetrics and Gynecology = Infect. Dis. Obstet. Gynecol.
-Infectious Disorders Drug Targets = Infect. Disord. Drug Targets
-Infirmiere = Infirmiere
-Infirmiere Auxiliaire = Infirm. Aux.
-Infirmiere Canadienne = Infirm. Can.
-Infirmiere Francaise = Infirm. Fr.
-Infirmiere Haitienne = Infirm. Haiti.
-Infirmiere du Quebec = Infirm. Que.
-Infirmiers = Infirmiers
-Inflammation = Inflammation
-Inflammation Research = Inflamm. Res.
-Inflammation and Allergy Drug Targets = Inflamm. Allergy Drug Targets
-Inflammatory Bowel Diseases = Inflamm. Bowel Dis.
-Infocare = Infocare
-Inform = Inform
-Information Dentaire = Inf. Dent.
-Information Management = Inf. Manage.
-Information Psychiatrique = Inf. Psychiatr.
-Informationen aus Orthodontie und Kieferorthopadie mit Beitragen aus der Internationalen Literatur = Inf. Orthod. Kieferorthop.
-Informatore Odonto-Stomatologico = Inf. Odontostomatol.
-Inforum = Inforum
-Infrared Physics = Infrared Phys.
-Infusionstherapie = Infusionstherapie
-Infusionstherapie und Klinische Ernahrung = Infusionsther. Klin. Ernahr.
-Infusionstherapie und Klinische Ernahrung. Sonderheft = Infusionsther. Klin. Ernahr. Sonderh.
-Infusionstherapie und Transfusionsmedizin = Infusionsther. Transfusionsmed.
-Inhalation Toxicology = Inhal. Toxicol.
-Inhaled Particles = Inhaled Part.
-Injury = Injury
-Injury Prevention = Inj. Prev.
-Innovations = Innovations
-Inorganic Chemistry=Inorg. Chem.;INOCAJ;BW
-Inorganic Chemistry Communications=Inorg. Chem. Commun.;ICCOFP;M
-Inorganic Materials=Inorg. Mater.;INOMAF;M
-Inorganic Reaction Mechanisms (Philadelphia, PA, United States)=Inorg. React. Mech. (Philadelphia, PA, U. S.);IRMEFE;4/YR
-Inorganica Chimica Acta=Inorg. Chim. Acta;ICHAA3;15/YR
-Inquiry = Inquiry
-Insect Biochemistry and Molecular Biology = Insect Biochem. Mol. Biol.
-Insect Molecular Biology = Insect Mol. Biol.
-Insight = Insight
-Institutions = Institutions
-Institutions/Volume Feeding = Inst. Vol. Feed.
-Instructional Course Lectures = Instr. Course Lect.
-Instrumentation Science & Technology=Instrum. Sci. Technol.;ISCTEF;6/YR
-Integrated Environmental Assessment and Management = Integr. Environ. Assess. Manag.
-Integrated Healthcare Report = Integr. Healthc. Rep.
-Integrative Cancer Therapies = Integr. Cancer Ther.
-Integrative Physiological and Behavioral Science = Integr. Physiol. Behav. Sci.
-Intensive Care Medicine = Intensive Care Med.
-Intensive Care Nursing = Intensive Care Nurs.
-Intensive Care World = Intensive Care World
-Intensive and Critical Care Nursing = Intensive Crit. Care Nurs.
-Intensivmedizinische Praxis = Intensivmed. Prax.
-Inter-University Faculty Work Conference = Interuniv. Fac. Work Conf.
-Intercom = Intercom
-Interferon = Interferon
-Interior Design = Inter. Des.
-Interiors = Interiors
-Intermetallics=Intermetallics;IERME5;M
-Internal Medicine = Intern. Med.
-Internal Medicine Journal = Intern. Med. J.
-Internal and Emergency Medicine = Intern. Emerg. Med.
-International Advances in Surgical Oncology = Int. Adv. Surg. Oncol.
-International Anesthesiology Clinics = Int. Anesthesiol. Clin.
-International Angiology = Int. Angiol.
-International Archives of Allergy and Applied Immunology = Int. Arch. Allergy Appl. Immunol.
-International Archives of Allergy and Immunology = Int. Arch. Allergy Immunol.
-International Archives of Occupational and Environmental Health = Int. Arch. Occup. Environ. Health
-International Braz J Urol = Int. Braz. J. Urol.
-International Clinical Psychopharmacology = Int. Clin. Psychopharmacol.
-International DATA Series, Selected Data on Mixtures, Series A: Thermodynamic Properties of Non-Reacting Binary Systems of Organic Substances=Int. DATA Ser., Sel. Data Mixtures, Ser. A;ISDMAT;Q
-International Dental Journal = Int. Dent. J.
-International Digest of Health Legislation = Int. Dig. Health Legis.
-International Disability Studies = Int. Disabil. Stud.
-International Endodontic Journal = Int. Endod. J.
-International Family Planning Digest = Int. Fam. Plann. Dig.
-International Heart Journal = Int. Heart. J.
-International Immunology = Int. Immunol.
-International Immunopharmacology = Int. Immunopharmacol.
-International Journal for Parasitology = Int. J. Parasitol.
-International Journal for Quality in Health Care = Int. J. Qual. Health Care
-International Journal for Vitamin and Nutrition Research = Int. J. Vitam. Nutr. Res.
-International Journal for Vitamin and Nutrition Research. Supplement = Int. J. Vitam. Nutr. Res. Suppl.
-International Journal of Adhesion and Adhesives=Int. J. Adhes. Adhes.;IJAADK;BM
-International Journal of Adult Orthodontics and Orthognathic Surgery = Int. J. Adult Orthodon. Orthognath. Surg.
-International Journal of Aging and Human Development = Int. J. Aging Hum. Dev.
-International Journal of Air and Water Pollution = Int. J. Air Water Pollut.
-International Journal of Andrology = Int. J. Androl.
-International Journal of Antimicrobial Agents = Int. J. Antimicrob. Agents
-International Journal of Applied Ceramic Technology=Int. J. Appl. Ceram. Technol.;IJACCP;BM
-International Journal of Applied Radiation and Isotopes = Int. J. Appl. Radiat. Isot.
-International Journal of Artificial Organs = Int. J. Artif. Organs
-International Journal of Audiology = Int. J. Audiol.
-International Journal of Bio-Medical Computing = Int. J. Biomed. Comput.
-International Journal of Biochemistry = Int. J. Biochem.
-International Journal of Biochemistry & Cell Biology=Int. J. Biochem. Cell Biol.;IJBBFU;M
-International Journal of Biochemistry and Cell Biology = Int. J. Biochem. Cell Biol.
-International Journal of Biological Macromolecules = Int. J. Biol. Macromol.
-International Journal of Biological Markers = Int. J. Biol. Markers
-International Journal of Biological Research in Pregnancy = Int. J. Biol. Res. Pregnancy
-International Journal of Biometeorology = Int. J. Biometeorol.
-International Journal of Cancer = Int. J. Cancer
-International Journal of Cancer. Supplement = Int. J. Cancer. Suppl.
-International Journal of Cardiac Imaging = Int. J. Card. Imaging
-International Journal of Cardiology = Int. J. Cardiol.
-International Journal of Cardiovascular Imaging = Int. J. Cardiovasc. Imaging
-International Journal of Cardiovascular Interventions = Int. J. Cardiovasc. Intervent.
-International Journal of Cell Cloning = Int. J. Cell Cloning
-International Journal of Chemical Kinetics=Int. J. Chem. Kinet.;IJCKBO;M
-International Journal of Chemistry=Int. J. Chem.;INJCEW;Q
-International Journal of Chronobiology = Int. J. Chronobiol.
-International Journal of Circumpolar Health = Int. J. Circumpolar Health
-International Journal of Clinical Monitoring and Computing = Int. J. Clin. Monit. Comput.
-International Journal of Clinical Oncology = Int. J. Clin. Oncol.
-International Journal of Clinical Pharmacology Research = Int. J. Clin. Pharmacol. Res.
-International Journal of Clinical Pharmacology and Biopharmacy = Int. J. Clin. Pharmacol. Biopharm.
-International Journal of Clinical Pharmacology and Therapeutics = Int. J. Clin. Pharmacol. Ther.
-International Journal of Clinical Pharmacology, Therapy and Toxicology = Int. J. Clin. Pharmacol.
-International Journal of Clinical Practice = Int. J. Clin. Pract.
-International Journal of Clinical Practice. Supplement = Int. J. Clin. Pract. Suppl.
-International Journal of Clinical and Experimental Hypnosis = Int. J. Clin. Exp. Hypn.
-International Journal of Clinical and Laboratory Research = Int. J. Clin. Lab. Res.
-International Journal of Coal Geology=Int. J. Coal Geol.;IJCGDE;M
-International Journal of Colorectal Disease = Int. J. Colorectal Dis.
-International Journal of Dental Hygiene = Int. J. Dent. Hyg.
-International Journal of Dental Symposia = Int. J. Dent. Symp.
-International Journal of Dermatology = Int. J. Dermatol.
-International Journal of Developmental Biology = Int. J. Dev. Biol.
-International Journal of Developmental Neuroscience = Int. J. Dev. Neurosci.
-International Journal of Eating Disorders = Int. J. Eat. Disord.
-International Journal of Emergency Mental Health = Int. J. Emerg. Ment. Health
-International Journal of Environment and Pollution=Int. J. Environ. Pollut.;IJVLEN;12/YR
-International Journal of Environmental Analytical Chemistry = Int. J. Environ. Anal. Chem.
-International Journal of Environmental Research and Public Health = Int. J. Environ. Res. Public. Health
-International Journal of Epidemiology = Int. J. Epidemiol.
-International Journal of Equilibrium Research = Int. J. Equilib. Res.
-International Journal of Experimental Diabetes Research = Int. J. Exp. Diabetes Res.
-International Journal of Experimental Pathology = Int. J. Exp. Pathol.
-International Journal of Fertility = Int. J. Fertil.
-International Journal of Fertility and Menopausal Studies = Int. J. Fertil. Menopausal Stud.
-International Journal of Fertility and Women's Medicine = Int. J. Fertil. Womens Med.
-International Journal of Food Microbiology = Int. J. Food Microbiol.
-International Journal of Food Science and Technology=Int. J. Food Sci. Technol.;IJFTEZ;10/YR
-International Journal of Food Sciences and Nutrition = Int. J. Food Sci. Nutr.
-International Journal of Forensic Dentistry = Int. J. Forensic Dent.
-International Journal of Gastrointestinal Cancer = Int. J. Gastrointest. Cancer
-International Journal of Geriatric Psychiatry = Int. J. Geriatr. Psychiatry
-International Journal of Group Psychotherapy = Int. J. Group Psychother.
-International Journal of Gynaecology and Obstetrics = Int. J. Gynaecol. Obstet.
-International Journal of Gynecological Pathology = Int. J. Gynecol. Pathol.
-International Journal of Health Care Finance and Economics = Int. J. Health Care Finance Econ.
-International Journal of Health Care Quality Assurance = Int. J. Health Care Qual. Assur.
-International Journal of Health Care Quality Assurance Incorporating Leadership in Health Services = Int. J. Health Care Qual. Assur. Inc. Leadersh. Health Serv.
-International Journal of Health Education = Int. J. Health Educ.
-International Journal of Health Planning and Management = Int. J. Health Plann. Manage.
-International Journal of Health Services = Int. J. Health Serv.
-International Journal of Hematology = Int. J. Hematol.
-International Journal of Hydrogen Energy=Int. J. Hydrogen Energy;IJHEDX;15/YR
-International Journal of Hygiene and Environmental Health = Int. J. Hyg. Environ. Health
-International Journal of Hyperthermia = Int. J. Hyperthermia
-International Journal of Immunogenetics = Int. J. Immunogenet.
-International Journal of Immunopharmacology = Int. J. Immunopharmacol.
-International Journal of Impotence Research = Int. J. Impot. Res.
-International Journal of Infectious Diseases = Int. J. Infect. Dis.
-International Journal of Injury Control and Safety Promotion = Int. J. Inj. Contr. Saf. Promot.
-International Journal of Instructional Media = Int. J. Instr. Media
-International Journal of Language and Communication Disorders = Int. J. Lang. Commun. Disord.
-International Journal of Law and Psychiatry = Int. J. Law Psychiatry
-International Journal of Legal Medicine = Int. J. Legal Med.
-International Journal of Leprosy = Int. J. Lepr.
-International Journal of Leprosy and Other Mycobacterial Diseases = Int. J. Lepr. Other Mycobact. Dis.
-International Journal of Lower Extremity Wounds = Int. J. Low. Extrem. Wounds
-International Journal of Mass Spectrometry=Int. J. Mass Spectrom.;IMSPF8;SM
-International Journal of Medical Informatics = Int. J. Med. Inf.
-International Journal of Medical Microbiology = Int. J. Med. Microbiol.
-International Journal of Medical Microbiology, Virology, Parasitology and Infectious Diseases = Int. J. Med. Microbiol. Virol. Parasitol. Infect. Dis.
-International Journal of Microcirculation; Clinical and Experimental = Int. J. Microcirc. Clin. Exp.
-International Journal of Mineral Processing=Int. J. Miner. Process.;IJMPBL;M
-International Journal of Molecular Medicine = Int. J. Mol. Med.
-International Journal of Multiphase Flow=Int. J. Multiphase Flow;IJMFBP;M
-International Journal of Nanoscience=Int. J. Nanosci.;IJNNAJ;BM
-International Journal of Neural Systems = Int. J. Neural Syst.
-International Journal of Neurology = Int. J. Neurol.
-International Journal of Neuropharmacology = Int. J. Neuropharmacol.
-International Journal of Neuropsychiatry = Int. J. Neuropsychiatry
-International Journal of Neuropsychopharmacology = Int. J. Neuropsychopharmacol.
-International Journal of Neuroscience = Int. J. Neurosci.
-International Journal of Non-Equilibrium Processing=Int. J. Non-Equilib. Process.;IJNPFU;IRR
-International Journal of Nuclear Medicine and Biology = Int. J. Nucl. Med. Biol.
-International Journal of Nursing Education Scholarship = Int. J. Nurs. Educ. Scholarsh.
-International Journal of Nursing Practice = Int. J. Nurs. Pract.
-International Journal of Nursing Studies = Int. J. Nurs. Stud.
-International Journal of Obesity = Int. J. Obes.
-International Journal of Obesity and Related Metabolic Disorders = Int. J. Obes. Relat. Metab. Disord.
-International Journal of Occupational Health and Safety = Int. J. Occup. Health Saf.
-International Journal of Occupational Medicine and Environmental Health = Int. J. Occup. Med. Environ. Health
-International Journal of Occupational and Environmental Health = Int. J. Occup. Environ. Health
-International Journal of Oncology = Int. J. Oncol.
-International Journal of Oral Implantology = Int. J. Oral Implantol.
-International Journal of Oral Myology = Int. J. Oral Myol.
-International Journal of Oral Surgery = Int. J. Oral Surg.
-International Journal of Oral and Maxillofacial Implants = Int. J. Oral Maxillofac. Implants
-International Journal of Oral and Maxillofacial Surgery = Int. J. Oral Maxillofac. Surg.
-International Journal of Orofacial Myology = Int. J. Orofacial Myology
-International Journal of Orthodontics = Int. J. Orthod.
-International Journal of PIXE=Int. J. PIXE;IJPXET;2/YR
-International Journal of Paediatric Dentistry = Int. J. Paediatr. Dent.
-International Journal of Pancreatology = Int. J. Pancreatol.
-International Journal of Partial Hospitalization = Int. J. Partial Hosp.
-International Journal of Pediatric Nephrology = Int. J. Pediatr. Nephrol.
-International Journal of Pediatric Otorhinolaryngology = Int. J. Pediatr. Otorhinolaryngol.
-International Journal of Peptide Research and Therapeutics=Int. J. Pept. Res. Ther.;IJPRFC;Q
-International Journal of Peptide and Protein Research = Int. J. Pept. Protein Res.
-International Journal of Periodontics and Restorative Dentistry = Int. J. Periodontics Restorative Dent.
-International Journal of Pharmaceutics = Int. J. Pharm.
-International Journal of Polymer Analysis and Characterization=Int. J. Polym. Anal. Charact.;IPACEZ;BM
-International Journal of Polymeric Materials=Int. J. Polym. Mater.;IJPMCS;M
-International Journal of Powder Metallurgy (Princeton, New Jersey)=Int. J. Powder Metall. (Princeton, N. J.);IPMTEA;BM
-International Journal of Prosthodontics = Int. J. Prosthodont.
-International Journal of Protein Research = Int. J. Protein Res.
-International Journal of Psychiatry = Int. J. Psychiatry
-International Journal of Psychiatry in Medicine = Int. J. Psychiatry Med.
-International Journal of Psycho-Analysis = Int. J. Psychoanal.
-International Journal of Psychoanalytic Psychotherapy = Int. J. Psychoanal. Psychother.
-International Journal of Psychophysiology = Int. J. Psychophysiol.
-International Journal of Psychosomatics = Int. J. Psychosom.
-International Journal of Quantum Chemistry=Int. J. Quantum Chem.;IJQCB2;30/YR
-International Journal of Radiation Applications and Instrumentation. Part A, Applied Radiation and Isotopes = Int. J. Rad. Appl. Instrum. [A]
-International Journal of Radiation Applications and Instrumentation. Part B, Nuclear Medicine and Biology = Int. J. Rad. Appl. Instrum. B
-International Journal of Radiation Biology = Int. J. Radiat. Biol.
-International Journal of Radiation Biology and Related Studies in Physics, Chemistry and Medicine = Int. J. Radiat. Biol. Relat. Stud. Phys. Chem. Med.
-International Journal of Radiation Oncology, Biology, Physics = Int. J. Radiat. Oncol. Biol. Phys.
-International Journal of Refractory Metals & Hard Materials=Int. J. Refract. Met. Hard Mater.;IRMME3;BM
-International Journal of Rehabilitation Research = Int. J. Rehabil. Res.
-International Journal of Remote Sensing = Int. J. Remote Sens.
-International Journal of STD and AIDS = Int. J. STD AIDS
-International Journal of Social Psychiatry = Int. J. Soc. Psychiatry
-International Journal of Sport Nutrition = Int. J. Sport Nutr.
-International Journal of Sport Nutrition and Exercise Metabolism = Int. J. Sport Nutr. Exerc. Metab.
-International Journal of Sports Medicine = Int. J. Sports Med.
-International Journal of Surgical Investigation = Int. J. Surg. Investig.
-International Journal of Systematic Bacteriology = Int. J. Syst. Bacteriol.
-International Journal of Systematic and Evolutionary Microbiology = Int. J. Syst. Evol. Microbiol.
-International Journal of Technology Assessment in Health Care = Int. J. Technol. Assess. Health Care
-International Journal of Thermophysics=Int. J. Thermophys.;IJTHDY;BM
-International Journal of Tissue Reactions = Int. J. Tissue React.
-International Journal of Toxicology = Int. J. Toxicol.
-International Journal of Trauma Nursing = Int. J. Trauma Nurs.
-International Journal of Tuberculosis and Lung Disease = Int. J. Tuberc. Lung Dis.
-International Journal of Urology = Int. J. Urol.
-International Journal of Zoonoses = Int. J. Zoonoses
-International Journal of the Addictions = Int. J. Addict.
-International Maritime Health = Int. Marit. Health
-International Materials Reviews=Int. Mater. Rev.;INMREO;BM
-International Microbiology = Int. Microbiol.
-International Nursing Review = Int. Nurs. Rev.
-International Ophthalmology = Int. Ophthalmol.
-International Ophthalmology Clinics = Int. Ophthalmol. Clin.
-International Orthopaedics = Int. Orthop.
-International Pharmacopsychiatry = Int. Pharmacopsychiatry
-International Polymer Processing=Int. Polym. Process.;IPPREJ;Q
-International Psychiatry Clinics = Int. Psychiatry Clin.
-International Psychogeriatrics = Int. Psychogeriatr.
-International Rehabilitation Medicine = Int. Rehabil. Med.
-International Rescuer = Int. Rescuer
-International Review of Connective Tissue Research = Int. Rev. Connect. Tissue Res.
-International Review of Cytology = Int. Rev. Cytol.
-International Review of Cytology. Supplement = Int. Rev. Cytol. Suppl.
-International Review of Experimental Pathology = Int. Rev. Exp. Pathol.
-International Review of Neurobiology = Int. Rev. Neurobiol.
-International Review of Physiology = Int. Rev. Physiol.
-International Review of Tropical Medicine = Int. Rev. Trop. Med.
-International Reviews in Physical Chemistry=Int. Rev. Phys. Chem.;IRPCDL;Q
-International Reviews of Immunology = Int. Rev. Immunol.
-International Surgery = Int. Surg.
-International Symposium on Fluoridation and Preventive Dentistry = Int. Symp. Fluorid. Prev. Dent.
-International Urogynecology Journal and Pelvic Floor Dysfunction = Int. Urogynecol. J. Pelvic Floor Dysfunct.
-International Urology and Nephrology = Int. Urol. Nephrol.
-International Wound Journal = Int. Wound J.
-Internationale Zeitschrift fur Angewandte Physiologie Einschliesslich Arbeitsphysiologie = Int. Z. Angew. Physiol.
-Internationale Zeitschrift fur Klinische Pharmakologie, Therapie und Toxikologie = Int. Z. Klin. Pharmakol. Ther. Toxikol.
-Internationale Zeitschrift fur Vitamin- und Ernahrungsforschung. Beiheft = Int. Z. Vitam. Ernahrungsforsch. Beih.
-Internationale Zeitschrift fur Vitaminforschung (International Journal of Vitamin Research) = Int. Z. Vitaminforsch.
-Internationales Archiv fur Arbeitsmedizin = Int. Arch. Arbeitsmed.
-Internist = Internist
-Internistische Praxis = Internist. Prax.
-Intervirology = Intervirology
-Invasion and Metastasis = Invasion Metastasis
-Invertebrate Neuroscience = Invert. Neurosci.
-Investigacion Clinica = Invest. Clin.
-Investigation and Practice in Pediatric Pathology = Investig. Pract. Pediatr. Pathol.
-Investigational New Drugs = Invest. New Drugs
-Investigative Ophthalmology = Invest. Ophthalmol.
-Investigative Ophthalmology and Visual Science = Invest. Ophthalmol. Vis. Sci.
-Investigative Radiology = Invest. Radiol.
-Investigative Urology = Invest. Urol.
-Investigative and Cell Pathology = Invest. Cell Pathol.
-Investor-Owned Hospital Review = Investor. Owned Hosp. Rev.
-Ion Channels = Ion Channels
-Ion Exchange and Membranes = Ion Exch. Membr.
-Ionics=Ionics;IONIFA;BM
-Iowa Dental Bulletin = Iowa Dent. Bull.
-Iowa Dental Journal = Iowa Dent. J.
-Iowa Medicine = Iowa Med.
-Iowa Orthopaedic Journal = Iowa Orthop. J.
-Iowa State University Veterinarian = Iowa State Univ. Vet.
-Iraqi Dental Journal = Iraqi Dent. J.
-Irish Journal of Medical Science = Ir. J. Med. Sci.
-Irish Medical Journal = Ir. Med. J.
-Irish Nurses Journal = Ir. Nurses J.
-Irish Nursing News = Ir. Nurs. News
-Irish Nursing and Hospital World = Ir. Nurs. Hosp. World
-Ironmaking and Steelmaking=Ironmaking Steelmaking;IMKSB7;BM
-Iryo = Iryo
-Isis = Isis
-Isotopes in Environmental and Health Studies = Isotopes Environ. Health Stud.
-Isozymes; Current Topics in Biological Medical Research = Isozymes Curr. Top. Biol. Med. Res.
-Israel Annals of Psychiatry and Related Disciplines = Isr. Ann. Psychiatr. Relat. Discip.
-Israel Journal of Chemistry=Isr. J. Chem.;ISJCAT;Q
-Israel Journal of Dental Medicine = Isr. J. Dent. Med.
-Israel Journal of Dental Sciences = Isr. J. Dent. Sci.
-Israel Journal of Medical Sciences = Isr. J. Med. Sci.
-Israel Journal of Psychiatry and Related Sciences = Isr. J. Psychiatry Relat. Sci.
-Israel Journal of Zoology = Isr. J. Zool.
-Israel Medical Association Journal = Isr. Med. Assoc. J.
-Issledovaniia po Genetike = Issled. Genet.
-Issue Brief, National Health Policy Forum = Issue Brief Natl. Health Policy Forum
-Issues = Issues
-Issues in Comprehensive Pediatric Nursing = Issues Compr. Pediatr. Nurs.
-Issues in Health Care = Issues Health Care
-Issues in Health Care of Women = Issues Health Care Women
-Issues in Law and Medicine = Issues Law Med.
-Issues in Mental Health Nursing = Issues Ment. Health Nurs.
-Issues in Science and Technology = Issues Sci. Technol.
-Istanbul Universitesi Dishekimligi Fakultesi Dergisi = Istanbul Univ. Dishekim. Fak. Derg.
-Italian General Review of Dermatology = Ital. Gen. Rev. Dermatol.
-Italian Heart Journal = Ital. Heart J.
-Italian Journal of Anatomy and Embryology = Ital. J. Anat. Embryol.
-Italian Journal of Biochemistry = Ital. J. Biochem.
-Italian Journal of Gastroenterology = Ital. J. Gastroenterol.
-Italian Journal of Gastroenterology and Hepatology = Ital. J. Gastroenterol. Hepatol.
-Italian Journal of Neurological Sciences = Ital. J. Neurol. Sci.
-Italian Journal of Orthopaedics and Traumatology = Ital. J. Orthop. Traumatol.
-Italian Journal of Orthopaedics and Traumatology. Supplementum = Ital. J. Orthop. Traumatol. Suppl.
-Italian Journal of Surgical Sciences = Ital. J. Surg. Sci.
-Iugoslavica Physiologica et Pharmacologica Acta = Iugosl. Physiol. Pharmacol. Acta
-Iyo Denshi to Seitai Kogaku = Iyodenshi To Seitai Kogaku
-Izvestiia Akademii Nauk SSSR. Seriia Biologicheskaia = Izv. Akad. Nauk SSSR. Biol.
-Izvestiia Akademii Nauk. Seriia Biologicheskaia = Izv. Akad. Nauk. Ser. Biol.
-Izvestiia na Instituta po Fiziologiia = Izv. Inst. Fiziol. (Sofiia)
-Izvestiia na Mikrobiologicheskiia Institut = Izv. Mikrobiol. Inst. (Sofiia)
-Izvestiya Natsional'noi Akademii Nauk Respubliki Kazakhstan, Seriya Khimicheskaya=Izv. Nats. Akad. Nauk Resp. Kaz., Ser. Khim.;INANDJ;BM
-Izvestiya Rossiiskoi Akademii Nauk, Seriya Fizicheskaya=Izv. Ross. Akad. Nauk, Ser. Fiz.;IRAFEO;M
-Izvestiya Vysshikh Uchebnykh Zavedenii, Khimiya i Khimicheskaya Tekhnologiya=Izv. Vyssh. Uchebn. Zaved., Khim. Khim. Tekhnol.;IVUKAR;9/YR
-Izvestiya Vysshikh Uchebnykh Zavedenii, Tsvetnaya Metallurgiya=Izv. Vyssh. Uchebn. Zaved., Tsvetn. Metall.;IVUTAK;6/YR
-Izvestiya, Academy of Sciences, USSR, Atmospheric = Izv. Acad. Sci. USSR, Atmos. Oceanic Phys.
-JAAMI; Journal of the Association for the Advancement of Medical Instrumentation = J. Assoc. Adv. Med. Instrum.
-JACEP = JACEP
-JAMA = JAMA
-JAMA, the Journal of the American Medical Association=JAMA, J. Am. Med. Assoc.;JAMAAP;48/YR
-JAPCA = JAPCA
-JBIC, Journal of Biological Inorganic Chemistry=JBIC, J. Biol. Inorg. Chem.;JJBCFA;8/YR
-JBR-BTR = JBR-BTR
-JCAH Perspectives = JCAH Perspect.
-JCT Research=JCT Res.;JRCEB5;Q
-JETP Letters=JETP Lett.;JTPLA2;SM
-JFMA; Journal of the Florida Medical Association = JFMA.
-JFORL; Journal Francais d'Oto-Rhino Laryngologie, Audiophonologie et Chirurgie Maxillo-Faciale = JFORL J. Fr. Otorhinolaryngol. Audiophonol. Chir. Maxillofac.
-JOGN Nursing = JOGN Nurs.
-JOP = JOP
-JPEN: Journal of Parenteral and Enteral Nutrition = JPEN J. Parenter. Enteral Nutr.
-JPMA: Journal of the Pakistan Medical Association = JPMA J. Pak. Med. Assoc.
-JPO: Journal of Practical Orthodontics = JPO J. Pract. Orthod.
-JSLS: Journal of the Society of Laparoendoscopic Surgeons = JSLS
-Jaarboek van Kankeronderzoek en Kankerbestrijding in Nederland = Jaarb. Kankeronderz. Kankerbestrijd. Ned.
-Jahresbericht, Schweizerische Akademie der Medizinischen Wissenschaften = Jahresber. Schweiz. Akad. Med. Wiss.
-Jamaican Nurse = Jamaican Nurse
-Japan-Hospitals = Jpn. Hosp.
-Japanese Circulation Journal = Jpn. Circ. J.
-Japanese Dental Journal = Jpn. Dent. J.
-Japanese Heart Journal = Jpn. Heart J.
-Japanese Journal of Antibiotics = Jpn. J. Antibiot.
-Japanese Journal of Applied Physics, Part 1: Regular Papers, Brief Communications & Review Papers=Jpn. J. Appl. Phys., Part 1;JAPNDE;M
-Japanese Journal of Applied Physics, Part 2: Letters & Express Letters=Jpn. J. Appl. Phys., Part 2;JAPLD8;SM
-Japanese Journal of Cancer Research = Jpn. J. Cancer Res.
-Japanese Journal of Clinical Oncology = Jpn. J. Clin. Oncol.
-Japanese Journal of Dermatology: Series B = Jpn. J. Dermatol. B
-Japanese Journal of Experimental Medicine = Jpn. J. Exp. Med.
-Japanese Journal of Genetics = Jpn. J. Genet.
-Japanese Journal of Human Genetics = Jpn. J. Hum. Genet.
-Japanese Journal of Infectious Diseases = Jpn. J. Infect. Dis.
-Japanese Journal of Medical Science and Biology = Jpn. J. Med. Sci. Biol.
-Japanese Journal of Medicine = Jpn. J. Med.
-Japanese Journal of Microbiology = Jpn. J. Microbiol.
-Japanese Journal of Ophthalmology = Jpn. J. Ophthalmol.
-Japanese Journal of Pharmacology = Jpn. J. Pharmacol.
-Japanese Journal of Physiology = Jpn. J. Physiol.
-Japanese Journal of Psychiatry and Neurology = Jpn. J. Psychiatry Neurol.
-Japanese Journal of Surgery = Jpn. J. Surg.
-Japanese Journal of Thoracic and Cardiovascular Surgery = Jpn. J. Thorac. Cardiovasc. Surg.
-Japanese Journal of Tuberculosis = Jpn. J. Tuberc.
-Japanese Journal of Tuberculosis and Chest Diseases = Jpn. J. Tuberc. Chest Dis.
-Japanese Journal of Veterinary Research = Jpn. J. Vet. Res.
-Ji Sheng Chong Xue Yu Ji Sheng Chong Bing Za Zhi (Journal of Parasitology and Parasitic Diseases) = Ji Sheng Chong Xue Yu Ji Sheng Chong Bing Za Zhi
-Jibiinkoka = Jibiinkoka
-Jiegou Huaxue=Jiegou Huaxue;JHUADF;M
-Jikeikai Medical Journal = Jikeikai Med. J.
-Jikken Dobutsu (Experimental Animals) = Jikken Dobutsu
-Jinrui Idengaku Zasshi = Jinrui Idengaku Zasshi
-Jinshu Xuebao=Jinshu Xuebao;CHSPA4;M
-Jisuanji Yu Yingyong Huaxue=Jisuanji Yu Yingyong Huaxue;JYYHE6;M
-Johns Hopkins Medical Journal = Johns Hopkins Med. J.
-Johns Hopkins Medical Journal. Supplement = Johns Hopkins Med. J. Suppl.
-Johns Hopkins Medical Letter, Health After 50 = Johns Hopkins Med. Lett. Health After 50
-Johns Hopkins Nurses Alumni Magazine = Johns Hopkins Nurses Alumni Mag.
-Joint Commission Journal on Quality Improvement = Jt. Comm. J. Qual. Improv.
-Joint Commission Journal on Quality and Patient Safety = Jt. Comm. J. Qual. Patient Saf.
-Joint Commission Perspectives = Jt. Comm. Perspect.
-Joint, Bone, Spine = Joint Bone Spine
-Jordan Dental Journal = Jordan Dent. J.
-Jordemodern = Jordemodern
-Jordmorbladet = Jordmorbladet
-Jornal Brasileiro de Doencas Toracicas = J. Bras. Doencas Torac.
-Jornal Brasileiro de Psiquiatria = J. Bras. Psiquiatr.
-Jornal da Sociedade das Ciencias Medicas de Lisboa = J. Soc. Cienc. Med. Lisb.
-Jornal de Pediatria = J. Pediatr. (Rio J.)
-Jornal do Medico = J. Med. (Oporto)
-Josai Shika Daigaku Kiyo (Bulletin of the Josai Dental University) = Josai Shika Daigaku Kiyo
-Josanpu Zasshi (Japanese Journal for Midwives) = Josanpu Zasshi
-Journal - American Water Works Association=J. - Am. Water Works Assoc.;JAWWA5;M
-Journal Belge de Medecine Physique = J. Belge Med. Phys.
-Journal Belge de Medecine Physique et de Rehabilitation = J. Belge Med. Phys. Rehabil.
-Journal Belge de Radiologie = J. Belge Radiol.
-Journal Belge de Rhumatologie et de Medecine Physique = J. Belge Rhumatol. Med. Phys.
-Journal CANNT = J. CANNT
-Journal Dentaire du Quebec = J. Dent. Que.
-Journal Francais d'Ophtalmologie = J. Fr. Ophtalmol.
-Journal Francais d'Oto-Rhino-Laryngologie et Chirurgie Maxillo-Faciale = J. Fr. Otorhinolaryngol. Chir. Maxillofac.
-Journal Francais d'Oto-Rhino-Laryngologie, Audio-Phonologie et Chirurgie Maxillo-Faciale = J. Fr. Otorhinolaryngol. Audiophonol. Chir. Maxillofac.
-Journal Francais d'Oto-Rhino-Laryngologie, Audiophonologie, Chirurgie Maxillo-Faciale = J. Fr. Otorhinolaryngol. Audiophonol. Chir. Maxillofac.
-Journal Francais de Medecine et Chirurgie Thoraciques = J. Fr. Med. Chir. Thorac.
-Journal Medical Libanais (Lebanese Medical Journal) = J. Med. Liban.
-Journal d'Odontologie Conservatrice = J. Odontol. Conserv.
-Journal d'Urologie = J. Urol. (Paris)
-Journal d'Urologie et de Nephrologie = J. Urol. Nephrol. (Paris)
-Journal das Auxiliares Odontologicas = J. Aux. Odontol.
-Journal de Biologie Buccale = J. Biol. Buccale
-Journal de Biomateriaux Dentaires = J. Biomater. Dent.
-Journal de Chirurgie = J. Chir. (Paris)
-Journal de Genetique Humaine = J. Genet. Hum.
-Journal de Gynecologie, Obstetrique et Biologie de la Reproduction = J. Gynecol. Obstet. Biol. Reprod. (Paris)
-Journal de Medecine de Bordeaux et du Sud-Ouest = J. Med. Bord.
-Journal de Medecine de Lyon = J. Med. Lyon
-Journal de Microscopie = J. Microsc. (Paris)
-Journal de Microscopie et de Biologie Cellulaire = J. Microsc. Biol. Cell.
-Journal de Parodontologie = J. Parodontol.
-Journal de Pharmacie de Belgique = J. Pharm. Belg.
-Journal de Pharmacologie = J. Pharmacol.
-Journal de Physiologie = J. Physiol. (Paris)
-Journal de Physiologie. Supplement = J. Physiol. Suppl. (Paris)
-Journal de Psychologie Normale et Pathologique = J. Psychol. Norm. Pathol. (Paris)
-Journal de Radiologie = J. Radiol.
-Journal de Radiologie, d'Electrologie, et de Medecine Nucleaire = J. Radiol. Electrol. Med. Nucl.
-Journal de Recherches Atmospheriques = J. Rech. Atmos.
-Journal de Stomatologie de Belgique = J. Stomatol. Belg.
-Journal de Toxicologie Clinique et Experimentale = J. Toxicol. Clin. Exp.
-Journal de la Societe de Biologie = J. Soc. Biol.
-Journal der Deutschen Dermatologischen Gesellschaft (Journal of the German Society of Dermatology) = J. Dtsch. Dermatol. Ges.
-Journal des Maladies Vasculaires = J. Mal. Vasc.
-Journal des Sciences Medicales de Lille = J. Sci. Med. Lille
-Journal for Healthcare Quality = J. Healthc. Qual.
-Journal for Hospital Admitting Management = J. Hosp. Admit. Manage.
-Journal for Medicaid Management = J. Medicaid Manage.
-Journal for Nurses in Staff Development = J. Nurses Staff Dev.
-Journal for Specialists in Pediatric Nursing = J. Spec. Pediatr. Nurs.
-Journal fur Hirnforschung = J. Hirnforsch.
-Journal of AAPOS = J. AAPOS
-Journal of AHIMA = J. AHIMA
-Journal of AOAC International = J. AOAC Int.
-Journal of APDSA; Asian Pacific Dental Student Association = J. APDSA (Tokyo)
-Journal of Abnormal Child Psychology = J. Abnorm. Child Psychol.
-Journal of Abnormal Psychology = J. Abnorm. Psychol.
-Journal of Accident and Emergency Medicine = J. Accid. Emerg. Med.
-Journal of Acquired Immune Deficiency Syndromes = J. Acquir. Immune Defic. Syndr.
-Journal of Acquired Immune Deficiency Syndromes and Human Retrovirology = J. Acquir. Immune Defic. Syndr. Hum. Retrovirol.
-Journal of Addictive Diseases = J. Addict. Dis.
-Journal of Adhesion=J. Adhes.;JADNAJ;M
-Journal of Adhesion Science and Technology=J. Adhes. Sci. Technol.;JATEE8;16/YR
-Journal of Adhesive Dentistry = J. Adhes. Dent.
-Journal of Adolescence = J. Adolesc.
-Journal of Adolescent Health = J. Adolesc. Health
-Journal of Adolescent Health Care = J. Adolesc. Health Care
-Journal of Advanced Medical-Surgical Nursing = J. Adv. Med. Surg. Nurs.
-Journal of Advanced Nursing = J. Adv. Nurs.
-Journal of Advances in Chemical Physics=J. Adv. Chem. Phys.;JACPCM;M
-Journal of Aerosol Medicine = J. Aerosol Med.
-Journal of Aerosol Science = J. Aerosol Sci.
-Journal of Affective Disorders = J. Affect. Disord.
-Journal of Aging and Health = J. Aging Health
-Journal of Aging and Social Policy = J. Aging Soc. Policy
-Journal of Agricultural and Food Chemistry = J. Agric. Food Chem.
-Journal of Air Medical Transport = J. Air Med. Transp.
-Journal of Allergy = J. Allergy
-Journal of Allergy and Clinical Immunology = J. Allergy Clin. Immunol.
-Journal of Allied Health = J. Allied Health
-Journal of Alloys and Compounds=J. Alloys Compd.;JALCEU;36/YR
-Journal of Alternative and Complementary Medicine = J. Altern. Complement. Med.
-Journal of Alzheimer's Disease = J. Alzheimers Dis.
-Journal of Ambulatory Care Management = J. Ambulatory Care Manage.
-Journal of Ambulatory Care Marketing = J. Ambul. Care Mark.
-Journal of American College Health = J. Am. Coll. Health
-Journal of American Health Care = J. Am. Health Care
-Journal of American Health Policy = J. Am. Health Policy
-Journal of American Insurance = J. Am. Insur.
-Journal of Analytical Atomic Spectrometry=J. Anal. At. Spectrom.;JASPE2;M
-Journal of Analytical Chemistry=J. Anal. Chem.;JACTE2;M
-Journal of Analytical Psychology = J. Anal. Psychol.
-Journal of Analytical Toxicology = J. Anal. Toxicol.
-Journal of Analytical and Applied Pyrolysis=J. Anal. Appl. Pyrolysis;JAAPDD;BM
-Journal of Anatomy = J. Anat.
-Journal of Andrology = J. Androl.
-Journal of Animal Ecology = J. Anim. Ecol.
-Journal of Animal Physiology and Animal Nutrition = J. Anim. Physiol. Anim. Nutr.
-Journal of Animal Science = J. Anim. Sci.
-Journal of Animal Science (Savoy, IL, United States)=J. Anim. Sci. (Savoy, IL, U. S.);JANSAG;M
-Journal of Antibiotics = J. Antibiot. (Tokyo)
-Journal of Antibiotics. Ser. B. = J. Antibiot. [B]
-Journal of Antimicrobial Chemotherapy = J. Antimicrob. Chemother.
-Journal of Anxiety Disorders = J. Anxiety Disord.
-Journal of Applied Animal Welfare Science=J. Appl. Anim. Welfare Sci.;JAAWAV;Q
-Journal of Applied Bacteriology = J. Appl. Bacteriol.
-Journal of Applied Behavior Analysis = J. Appl. Behav. Anal.
-Journal of Applied Behavioral Science = J. Appl. Behav. Sci.
-Journal of Applied Biochemistry = J. Appl. Biochem.
-Journal of Applied Biomaterials = J. Appl. Biomater.
-Journal of Applied Clinical Medical Physics = J. Appl. Clin. Med. Phys.
-Journal of Applied Crystallography=J. Appl. Crystallogr.;JACGAR;BM
-Journal of Applied Electrochemistry=J. Appl. Electrochem.;JAELBJ;M
-Journal of Applied Gerontology = J. Appl. Gerontol.
-Journal of Applied Measurement = J. Appl. Meas.
-Journal of Applied Meteorology = J. Appl. Meteor.
-Journal of Applied Microbiology = J. Appl. Microbiol.
-Journal of Applied Nutrition = J. Appl. Nutr.
-Journal of Applied Physics = J. Appl. Phys.
-Journal of Applied Physiology = J. Appl. Physiol.
-Journal of Applied Physiology: Respiratory, Environmental and Exercise Physiology = J. Appl. Physiol.
-Journal of Applied Polymer Science=J. Appl. Polym. Sci.;JAPNAB;SM
-Journal of Applied Psychology = J. Appl. Psychol.
-Journal of Applied Spectroscopy=J. Appl. Spectrosc.;JASYAP;BM
-Journal of Applied Toxicology = J. Appl. Toxicol.
-Journal of Arthroplasty = J. Arthroplasty
-Journal of Asian Natural Products Research = J. Asian Nat. Prod. Res.
-Journal of Assisted Reproduction and Genetics = J. Assist. Reprod. Genet.
-Journal of Asthma = J. Asthma
-Journal of Asthma Research = J. Asthma Res.
-Journal of Atherosclerosis Research = J. Atheroscler. Res.
-Journal of Atmospheric Chemistry=J. Atmos. Chem.;JATCE2;9/YR
-Journal of Atmospheric and Oceanic Technology = J. Atmos. Oceanic Technol.
-Journal of Atmospheric and Terrestrial Physics = J. Atmos. Terr. Phys.
-Journal of Attention Disorders = J. Atten. Disord.
-Journal of Audiovisual Media in Medicine = J. Audiov. Media Med.
-Journal of Auditory Research = J. Aud. Res.
-Journal of Autism and Childhood Schizophrenia = J. Autism Child. Schizophr.
-Journal of Autism and Developmental Disorders = J. Autism Dev. Disord.
-Journal of Autoimmunity = J. Autoimmun.
-Journal of Automated Methods & Management in Chemistry=J. Autom. Methods Manage. Chem.;JAMCF2;BM
-Journal of Autonomic Pharmacology = J. Auton. Pharmacol.
-Journal of Bacteriology = J. Bacteriol.
-Journal of Basic Microbiology = J. Basic Microbiol.
-Journal of Basic and Clinical Physiology and Pharmacology = J. Basic Clin. Physiol. Pharmacol.
-Journal of Behavior Therapy and Experimental Psychiatry = J. Behav. Ther. Exp. Psychiatry
-Journal of Behavioral Health Services and Research = J. Behav. Health Serv. Res.
-Journal of Behavioral Medicine = J. Behav. Med.
-Journal of Biochemical Toxicology = J. Biochem. Toxicol.
-Journal of Biochemical and Biophysical Methods = J. Biochem. Biophys. Methods
-Journal of Biochemical and Molecular Toxicology = J. Biochem. Mol. Toxicol.
-Journal of Biochemistry = J. Biochem. (Tokyo)
-Journal of Biochemistry (Tokyo, Japan)=J. Biochem. (Tokyo, Jpn.);JOBIAO;M
-Journal of Biochemistry and Molecular Biology=J. Biochem. Mol. Biol.;JBMBE5;BM
-Journal of Biochemistry, Molecular Biology, and Biophysics = J. Biochem. Mol. Biol. Biophys.
-Journal of Biocommunication = J. Biocommun.
-Journal of Bioenergetics = J. Bioenerg.
-Journal of Bioenergetics and Biomembranes = J. Bioenerg. Biomembr.
-Journal of Bioengineering = J. Bioeng.
-Journal of Bioethics = J. Bioeth.
-Journal of Bioinformatics and Computational Biology = J. Bioinform. Comput. Biol.
-Journal of Biological Chemistry = J. Biol. Chem.
-Journal of Biological Inorganic Chemistry = J. Biol. Inorg. Chem.
-Journal of Biological Photography = J. Biol. Photogr.
-Journal of Biological Regulators and Homeostatic Agents = J. Biol. Regul. Homeost. Agents
-Journal of Biological Response Modifiers = J. Biol. Response Mod.
-Journal of Biological Rhythms = J. Biol. Rhythms
-Journal of Biological Standardization = J. Biol. Stand.
-Journal of Biology = J. Biol.
-Journal of Bioluminescence and Chemiluminescence = J. Biolumin. Chemilumin.
-Journal of Biomaterials Applications = J. Biomater. Appl.
-Journal of Biomaterials Science, Polymer Edition = J. Biomater. Sci. Polym. Ed.
-Journal of Biomechanical Engineering = J. Biomech. Eng.
-Journal of Biomechanics = J. Biomech.
-Journal of Biomedical Engineering = J. Biomed. Eng.
-Journal of Biomedical Informatics = J. Biomed. Inform.
-Journal of Biomedical Materials Research = J. Biomed. Mater. Res.
-Journal of Biomedical Materials Research, Part A=J. Biomed. Mater. Res., Part A;JBMRCH;16/YR
-Journal of Biomedical Materials Research, Part B: Applied Biomaterials=J. Biomed. Mater. Res., Part B;JBMRGL;8/YR
-Journal of Biomedical Materials Research. Part A = J. Biomed. Mater. Res. A
-Journal of Biomedical Materials Research. Part B, Applied Biomaterials = J. Biomed. Mater. Res. B Appl. Biomater.
-Journal of Biomedical Nanotechnology=J. Biomed. Nanotechnol.;JBNOAB;Q
-Journal of Biomedical Optics = J. Biomed. Opt.
-Journal of Biomedical Science = J. Biomed. Sci.
-Journal of Biomolecular NMR = J. Biomol. NMR
-Journal of Biomolecular Screening = J. Biomol. Screen.
-Journal of Biomolecular Structure & Dynamics=J. Biomol. Struct. Dyn.;JBSDD6;BM
-Journal of Biomolecular Structure and Dynamics = J. Biomol. Struct. Dyn.
-Journal of Biopharmaceutical Statistics = J. Biopharm. Stat.
-Journal of Bioscience and Bioengineering=J. Biosci. Bioeng.;JBBIF6;M
-Journal of Biosocial Science = J. Biosoc. Sci.
-Journal of Biosocial Science. Supplement = J. Biosoc. Sci. Suppl.
-Journal of Biotechnology = J. Biotechnol.
-Journal of Bone and Joint Surgery. American Volume = J. Bone Joint Surg. Am.
-Journal of Bone and Joint Surgery. British Volume = J. Bone Joint Surg. Br.
-Journal of Bone and Mineral Metabolism = J. Bone Miner. Metab.
-Journal of Bone and Mineral Research = J. Bone Miner. Res.
-Journal of Burn Care and Rehabilitation = J. Burn Care Rehabil.
-Journal of Burn Care and Research = J. Burn Care Res.
-Journal of Business Strategy = J. Bus. Strategy
-Journal of Cancer Education = J. Cancer Educ.
-Journal of Cancer Epidemiology and Prevention = J. Cancer Epidemiol. Prev.
-Journal of Cancer Research and Clinical Oncology = J. Cancer Res. Clin. Oncol.
-Journal of Capillary Electrophoresis = J. Capillary Electrophor.
-Journal of Capillary Electrophoresis and Microchip Technology=J. Capillary Electrophor. Microchip Technol.;JCEMF6;6/YR
-Journal of Carbohydrate Chemistry=J. Carbohydr. Chem.;JCACDM;9/YR
-Journal of Cardiac Failure = J. Card. Fail.
-Journal of Cardiac Surgery = J. Card. Surg.
-Journal of Cardiography = J. Cardiogr.
-Journal of Cardiography. Supplement = J. Cardiogr. Suppl.
-Journal of Cardiology = J. Cardiol.
-Journal of Cardiology. Supplement = J. Cardiol. Suppl.
-Journal of Cardiopulmonary Rehabilitation = J. Cardpulm. Rehabil.
-Journal of Cardiothoracic Anesthesia = J. Cardiothorac. Anesth.
-Journal of Cardiothoracic and Vascular Anesthesia = J. Cardiothorac. Vasc. Anesth.
-Journal of Cardiovascular Electrophysiology = J. Cardiovasc. Electrophysiol.
-Journal of Cardiovascular Magnetic Resonance = J. Cardiovasc. Magn. Reson.
-Journal of Cardiovascular Management = J. Cardiovasc. Manag.
-Journal of Cardiovascular Medicine = J. Cardiovasc. Med.
-Journal of Cardiovascular Nursing = J. Cardiovasc. Nurs.
-Journal of Cardiovascular Pharmacology = J. Cardiovasc. Pharmacol.
-Journal of Cardiovascular Pharmacology and Therapeutics = J. Cardiovasc. Pharmacol. Ther.
-Journal of Cardiovascular Risk = J. Cardiovasc. Risk
-Journal of Cardiovascular Surgery = J. Cardiovasc. Surg. (Torino)
-Journal of Case Management = J. Case Manag.
-Journal of Catalysis=J. Catal.;JCTLA5;16/YR
-Journal of Cataract and Refractive Surgery = J. Cataract Refract. Surg.
-Journal of Cell Biology = J. Cell Biol.
-Journal of Cell Science = J. Cell Sci.
-Journal of Cell Science. Supplement = J. Cell Sci. Suppl.
-Journal of Cellular Biochemistry = J. Cell. Biochem.
-Journal of Cellular Biochemistry. Supplement = J. Cell. Biochem. Suppl.
-Journal of Cellular Physiology = J. Cell. Physiol.
-Journal of Cellular Physiology. Supplement = J. Cell. Physiol. Suppl.
-Journal of Cellular and Molecular Medicine = J. Cell. Mol. Med.
-Journal of Cerebral Blood Flow and Metabolism = J. Cereb. Blood Flow Metab.
-Journal of Chemical Crystallography=J. Chem. Crystallogr.;JCCYEV;M
-Journal of Chemical Documentation = J. Chem. Doc.
-Journal of Chemical Ecology=J. Chem. Ecol.;JCECD8;M
-Journal of Chemical Education = J. Chem. Educ.
-Journal of Chemical Engineering of Japan=J. Chem. Eng. Jpn.;JCEJAQ;M
-Journal of Chemical Information and Computer Sciences = J. Chem. Inf. Comput. Sci.
-Journal of Chemical Information and Modeling = J. Chem. Inf. Model.
-Journal of Chemical Neuroanatomy = J. Chem. Neuroanat.
-Journal of Chemical Physics = J. Chem. Phys.
-Journal of Chemical Research=J. Chem. Res.;JCROA4;M
-Journal of Chemical Sciences (Bangalore, India)=J. Chem. Sci. (Bangalore, India);JCSBB5;BM
-Journal of Chemical Technology and Biotechnology = J. Chem. Technol. Biotechnol.
-Journal of Chemical Theory and Computation=J. Chem. Theory Comput.;JCTCCE;BM
-Journal of Chemical Thermodynamics=J. Chem. Thermodyn.;JCTDAF;M
-Journal of Chemical and Engineering Data=J. Chem. Eng. Data;JCEAAX;BM
-Journal of Chemometrics=J. Chemom.;JOCHEU;M
-Journal of Chemotherapy = J. Chemother.
-Journal of Child Language = J. Child Lang.
-Journal of Child Neurology = J. Child Neurol.
-Journal of Child Psychology and Psychiatry and Allied Disciplines = J. Child Psychol. Psychiatry
-Journal of Child and Adolescent Psychiatric Nursing = J. Child Adolesc. Psychiatr. Nurs.
-Journal of Child and Adolescent Psychiatric and Mental Health Nursing = J. Child Adolesc. Psychiatr. Ment. Health Nurs.
-Journal of Child and Adolescent Psychopharmacology = J. Child Adolesc. Psychopharmacol.
-Journal of Christian Nursing = J. Christ. Nurs.
-Journal of Chromatographic Science = J. Chromatogr. Sci.
-Journal of Chromatography = J. Chromatogr.
-Journal of Chromatography A = J. Chromatogr. A
-Journal of Chromatography B, Biomedical Applications = J. Chromatogr. B Biomed. Appl.
-Journal of Chromatography, A=J. Chromatogr., A;JCRAEY;78/YR
-Journal of Chromatography, B: Analytical Technologies in the Biomedical and Life Sciences=J. Chromatogr., B: Anal. Technol. Biomed. Life Sci.;JCBAAI;23/YR
-Journal of Chromatography. B, Analytical Technologies in the Biomedical and Life Sciences = J. Chromatogr. B Analyt. Technol. Biomed. Life. Sci.
-Journal of Chromatography. B, Biomedical Sciences and Applications = J. Chromatogr. B. Biomed. Sci. App.
-Journal of Chromatography. Supplementary Volume = J. Chromatogr. Suppl.
-Journal of Chronic Diseases = J. Chronic Dis.
-Journal of Climate = J. Climate
-Journal of Climate Meteorology = J. Climate Meteor.
-Journal of Climate and Applied Meteorology = J. Climate Appl. Meteor.
-Journal of Climatology = J. Climatol.
-Journal of Clinical Anesthesia = J. Clin. Anesth.
-Journal of Clinical Apheresis = J. Clin. Apheresis
-Journal of Clinical Chemistry and Clinical Biochemistry = J. Clin. Chem. Clin. Biochem.
-Journal of Clinical Child Psychology = J. Clin. Child Psychol.
-Journal of Clinical Child and Adolescent Psychology = J. Clin. Child Adolesc. Psychol.
-Journal of Clinical Computing = J. Clin. Comput.
-Journal of Clinical Densitometry = J. Clin. Densitom.
-Journal of Clinical Dentistry = J. Clin. Dent.
-Journal of Clinical Dysmorphology = J. Clin. Dysmorphol.
-Journal of Clinical Endocrinology and Metabolism = J. Clin. Endocrinol. Metab.
-Journal of Clinical Engineering = J. Clin. Eng.
-Journal of Clinical Epidemiology = J. Clin. Epidemiol.
-Journal of Clinical Ethics = J. Clin. Ethics
-Journal of Clinical Gastroenterology = J. Clin. Gastroenterol.
-Journal of Clinical Hypertension = J. Clin. Hypertens.
-Journal of Clinical Immunology = J. Clin. Immunol.
-Journal of Clinical Investigation = J. Clin. Invest.
-Journal of Clinical Laboratory Analysis = J. Clin. Lab. Anal.
-Journal of Clinical Laser Medicine and Surgery = J. Clin. Laser Med. Surg.
-Journal of Clinical Microbiology = J. Clin. Microbiol.
-Journal of Clinical Monitoring = J. Clin. Monit.
-Journal of Clinical Monitoring and Computing = J. Clin. Monit. Comput.
-Journal of Clinical Neuro-Ophthalmology = J. Clin. Neuroophthalmol.
-Journal of Clinical Neurophysiology = J. Clin. Neurophysiol.
-Journal of Clinical Neuropsychology = J. Clin. Neuropsychol.
-Journal of Clinical Nursing = J. Clin. Nurs.
-Journal of Clinical Oncology = J. Clin. Oncol.
-Journal of Clinical Orthodontics = J. Clin. Orthod.
-Journal of Clinical Pathology = J. Clin. Pathol.
-Journal of Clinical Pathology. Supplement (Association of Clinical Pathologists) = J. Clin. Pathol. Suppl. (Assoc. Clin. Pathol.)
-Journal of Clinical Pathology. Supplement (Royal College of Pathologists) = J. Clin. Pathol. Suppl. (R. Coll. Pathol.)
-Journal of Clinical Pediatric Dentistry = J. Clin. Pediatr. Dent.
-Journal of Clinical Periodontology = J. Clin. Periodontol.
-Journal of Clinical Pharmacology = J. Clin. Pharmacol.
-Journal of Clinical Pharmacology and New Drugs = J. Clin. Pharmacol. New Drugs
-Journal of Clinical Pharmacology and the Journal of New Drugs = J. Clin. Pharmacol. J. New Drugs
-Journal of Clinical Pharmacy and Therapeutics = J. Clin. Pharm. Ther.
-Journal of Clinical Psychiatry = J. Clin. Psychiatry
-Journal of Clinical Psychology = J. Clin. Psychol.
-Journal of Clinical Psychopharmacology = J. Clin. Psychopharmacol.
-Journal of Clinical Stomatology Conferences = J. Clin. Stomatol. Conf.
-Journal of Clinical Ultrasound = J. Clin. Ultrasound
-Journal of Clinical Virology = J. Clin. Virol.
-Journal of Clinical and Experimental Hematopathology = J. Clin. Exp. Hematop.
-Journal of Clinical and Experimental Neuropsychology = J. Clin. Exp. Neuropsychol.
-Journal of Clinical and Hospital Pharmacy = J. Clin. Hosp. Pharm.
-Journal of Clinical and Laboratory Immunology = J. Clin. Lab. Immunol.
-Journal of Cluster Science=J. Cluster Sci.;JCSCEB;Q
-Journal of Cognitive Neuroscience = J. Cogn. Neurosci.
-Journal of Collective Negotiations in the Public Sector = J. Collect. Negotiations Public Sect.
-Journal of Colloid Science = J. Colloid Sci.
-Journal of Colloid and Interface Science = J. Colloid Interface Sci.
-Journal of Combinatorial Chemistry = J. Comb. Chem.
-Journal of Communicable Diseases = J. Commun. Dis.
-Journal of Communication = J. Commun.
-Journal of Communication Disorders = J. Commun. Disord.
-Journal of Community Health = J. Community Health
-Journal of Community Health Nursing = J. Community Health Nurs.
-Journal of Community Psychology = J. Community Psychol.
-Journal of Comparative Economics = J. Comp. Econ.
-Journal of Comparative Neurology = J. Comp. Neurol.
-Journal of Comparative Pathology = J. Comp. Pathol.
-Journal of Comparative Physiology. A, Neuroethology, Sensory, Neural, and Behavioral Physiology = J. Comp. Physiol. A Neuroethol. Sens. Neural. Behav. Physiol.
-Journal of Comparative Physiology. A, Sensory, Neural, and Behavioral Physiology = J. Comp. Physiol. [A]
-Journal of Comparative Physiology. B, Biochemical, Systemic, and Environmental Physiology = J. Comp. Physiol. [B]
-Journal of Comparative Psychology = J. Comp. Psychol.
-Journal of Comparative and Physiological Psychology = J. Comp. Physiol. Psychol.
-Journal of Compliance in Health Care = J. Compliance Health Care
-Journal of Computational Biology = J. Comput. Biol.
-Journal of Computational Chemistry=J. Comput. Chem.;JCCHDD;16/YR
-Journal of Computational Neuroscience = J. Comput. Neurosci.
-Journal of Computational Physics = J. Comput. Phys.
-Journal of Computational and Theoretical Nanoscience=J. Comput. Theor. Nanosci.;JCTNAB;4/YR
-Journal of Computed Tomography = J. Comput. Tomogr.
-Journal of Computer Assisted Tomography = J. Comput. Assist. Tomogr.
-Journal of Computer Chemistry, Japan=J. Comput. Chem., Jpn.;JCCJAG;Q
-Journal of Computer-Aided Molecular Design = J. Comput. Aided Mol. Des.
-Journal of Consulting Psychology = J. Consult. Psychol.
-Journal of Consulting and Clinical Psychology = J. Consult. Clin. Psychol.
-Journal of Contaminant Hydrology=J. Contam. Hydrol.;JCOHE6;32/YR
-Journal of Contemporary Dental Practice = J. Contemp. Dent. Pract.
-Journal of Contemporary Health Law and Policy = J. Contemp. Health Law Policy
-Journal of Continuing Education in Nursing = J. Contin. Educ. Nurs.
-Journal of Continuing Education in the Health Professions = J. Contin. Educ. Health Prof.
-Journal of Controlled Release = J. Controlled Release
-Journal of Coordination Chemistry=J. Coord. Chem.;JCCMBQ;18/YR
-Journal of Cosmetic Science = J. Cosmet. Sci.
-Journal of Cosmetic and Laser Therapy = J. Cosmet. Laser Ther.
-Journal of Cranio-Mandibular Practice = J. Craniomandibular. Pract.
-Journal of Cranio-Maxillo-Facial Surgery = J. Craniomaxillofac. Surg.
-Journal of Craniofacial Genetics and Developmental Biology = J. Craniofac. Genet. Dev. Biol.
-Journal of Craniofacial Genetics and Developmental Biology. Supplement = J. Craniofac. Genet. Dev. Biol. Suppl.
-Journal of Craniofacial Surgery = J. Craniofac. Surg.
-Journal of Craniomandibular Disorders = J. Craniomandib. Disord.
-Journal of Critical Care = J. Crit. Care
-Journal of Critical Illness = J. Crit. Illn.
-Journal of Crystal Growth=J. Cryst. Growth;JCRGAE;SM
-Journal of Cultural Diversity = J. Cult. Divers.
-Journal of Cutaneous Laser Therapy = J. Cutan. Laser. Ther.
-Journal of Cutaneous Medicine and Surgery = J. Cutan. Med. Surg.
-Journal of Cutaneous Pathology = J. Cutan. Pathol.
-Journal of Cyclic Nucleotide Research = J. Cyclic Nucleotide Res.
-Journal of Cyclic Nucleotide and Protein Phosphorylation Research = J. Cyclic Nucleotide Protein Phosphor. Res.
-Journal of Cystic Fibrosis = J. Cyst. Fibros.
-Journal of Dairy Research = J. Dairy Res.
-Journal of Dairy Science = J. Dairy Sci.
-Journal of Dental Education = J. Dent. Educ.
-Journal of Dental Hygiene = J. Dent. Hyg.
-Journal of Dental Medicine = J. Dent. Med.
-Journal of Dental Practice Administration = J. Dent. Pract. Adm.
-Journal of Dental Research = J. Dent. Res.
-Journal of Dental Symposia = J. Dent. Symp.
-Journal of Dental Technology = J. Dent. Technol.
-Journal of Dentistry = J. Dent.
-Journal of Dentistry for Children = J. Dent. Child.
-Journal of Dentistry for the Handicapped = J. Dent. Handicap.
-Journal of Dermatologic Surgery = J. Dermatol. Surg.
-Journal of Dermatologic Surgery and Oncology = J. Dermatol. Surg. Oncol.
-Journal of Dermatological Science = J. Dermatol. Sci.
-Journal of Dermatology = J. Dermatol.
-Journal of Developmental Physiology = J. Dev. Physiol.
-Journal of Developmental and Behavioral Pediatrics = J. Dev. Behav. Pediatr.
-Journal of Diabetes and Its Complications = J. Diabetes Complications
-Journal of Diabetic Complications = J. Diabet. Complications
-Journal of Dialysis = J. Dial.
-Journal of Diarrhoeal Diseases Research = J. Diarrhoeal Dis. Res.
-Journal of Digital Imaging = J. Digit. Imaging
-Journal of Dispersion Science and Technology=J. Dispersion Sci. Technol.;JDTEDS;BM
-Journal of Drug Education = J. Drug Educ.
-Journal of Drug Targeting = J. Drug Target.
-Journal of Drugs in Dermatology = J. Drugs Dermatol.
-Journal of ECT = J. ECT
-Journal of ET Nursing = J. ET Nurs.
-Journal of Economic Entomology = J. Econ. Entomol.
-Journal of Economic Literature = J. Econ. Lit.
-Journal of Economic Perspectives = J. Econ. Perspect.
-Journal of Economic and Social Measurement = J. Econ. Soc. Meas.
-Journal of Economics and Business = J. Econ. Bus.
-Journal of Educational Psychology = J. Educ. Psychol.
-Journal of Electroanalytical Chemistry=J. Electroanal. Chem.;JECHES;26/YR
-Journal of Electrocardiology = J. Electrocardiol.
-Journal of Electromyography and Kinesiology = J. Electromyogr. Kinesiol.
-Journal of Electron Microscopy = J. Electron Microsc. (Tokyo)
-Journal of Electron Microscopy Technique = J. Electron Microsc. Tech.
-Journal of Electron Spectroscopy and Related Phenomena=J. Electron Spectrosc. Relat. Phenom.;JESRAW;21/YR
-Journal of Electronic Materials=J. Electron. Mater.;JECMA5;M
-Journal of Embryology and Experimental Morphology = J. Embryol. Exp. Morphol.
-Journal of Emergency Medical Services = J. Emerg. Med. Serv. JEMS
-Journal of Emergency Medicine = J. Emerg. Med.
-Journal of Emergency Nursing = J. Emerg. Nurs.
-Journal of Endocrinological Investigation = J. Endocrinol. Invest.
-Journal of Endocrinology = J. Endocrinol.
-Journal of Endodontics = J. Endod.
-Journal of Endotoxin Research=J. Endotoxin Res.;JENREB;BM
-Journal of Endourology = J. Endourol.
-Journal of Endovascular Surgery = J. Endovasc. Surg.
-Journal of Endovascular Therapy = J. Endovasc. Ther.
-Journal of Energetic Materials=J. Energ. Mater.;JOEMDK;Q
-Journal of Engineering Psychology = J. Eng. Psychol.
-Journal of Enterostomal Therapy = J. Enterostomal Ther.
-Journal of Environmental Engineering (Reston, VA, United States)=J. Environ. Eng. (Reston, VA, U. S.);JOEEDU;M
-Journal of Environmental Health = J. Environ. Health
-Journal of Environmental Monitoring = J. Environ. Monit.
-Journal of Environmental Pathology and Toxicology = J. Environ. Pathol. Toxicol.
-Journal of Environmental Pathology, Toxicology and Oncology = J. Environ. Pathol. Toxicol. Oncol.
-Journal of Environmental Quality=J. Environ. Qual.;JEVQAA;BM
-Journal of Environmental Radioactivity=J. Environ. Radioact.;JERAEE;21/YR
-Journal of Environmental Science & Engineering=J. Environ. Sci. Eng.;JESEAR;Q
-Journal of Environmental Science and Engineering = J. Environ. Sci. Eng.
-Journal of Environmental Science and Health, Part B: Pesticides, Food Contaminants, and Agricultural Wastes=J. Environ. Sci. Health, Part B;JPFCD2;BM
-Journal of Environmental Science and Health. Part A, Toxic/Hazardous Substances and Environmental Engineering = J. Environ. Sci. Health Part A Tox. Hazard. Subst. Environ. Eng.
-Journal of Environmental Science and Health. Part B, Pesticides, Food Contaminants, and Agricultural Wastes = J. Environ. Sci. Health B
-Journal of Environmental Science and Health. Part C, Environmental Health Sciences = J. Environ. Sci. Health [C]
-Journal of Enzyme Inhibition = J. Enzym. Inhib.
-Journal of Enzyme Inhibition and Medicinal Chemistry = J. Enzyme Inhib. Med. Chem.
-Journal of Epidemiology = J. Epidemiol.
-Journal of Epidemiology and Biostatistics = J. Epidemiol. Biostat.
-Journal of Epidemiology and Community Health = J. Epidemiol. Community Health
-Journal of Esthetic Dentistry = J. Esthet. Dent.
-Journal of Ethnicity in Substance Abuse = J. Ethn. Subst. Abuse.
-Journal of Ethnopharmacology = J. Ethnopharmacol.
-Journal of Eukaryotic Microbiology = J. Eukaryot. Microbiol.
-Journal of Evaluation in Clinical Practice = J. Eval. Clin. Pract.
-Journal of Existentialism = J. Existent.
-Journal of Experimental Animal Science = J. Exp. Anim. Sci.
-Journal of Experimental Biology = J. Exp. Biol.
-Journal of Experimental Botany=J. Exp. Bot.;JEBOA6;M
-Journal of Experimental Child Psychology = J. Exp. Child Psychol.
-Journal of Experimental Medical Sciences = J. Exp. Med. Sci.
-Journal of Experimental Medicine = J. Exp. Med.
-Journal of Experimental Pathology = J. Exp. Pathol.
-Journal of Experimental Psychology = J. Exp. Psychol.
-Journal of Experimental Psychology: Animal Behavior Processes = J. Exp. Psychol. Anim. Behav. Process.
-Journal of Experimental Psychology: General = J. Exp. Psychol. Gen.
-Journal of Experimental Psychology: Human Learning and Memory = J. Exp. Psychol. [Hum. Learn.]
-Journal of Experimental Psychology: Human Perception and Performance = J. Exp. Psychol. Hum. Percept. Perform.
-Journal of Experimental Psychology: Learning, Memory, and Cognition = J. Exp. Psychol. Learn. Mem. Cogn.
-Journal of Experimental Social Psychology = J. Exp. Soc. Psychol.
-Journal of Experimental Therapeutics and Oncology = J. Exp. Ther. Oncol.
-Journal of Experimental Zoology = J. Exp. Zool.
-Journal of Experimental Zoology. Part A, Comparative Experimental Biology = J. Exp. Zoolog. A Comp. Exp. Biol.
-Journal of Experimental Zoology. Part B, Molecular and Developmental Evolution = J. Exp. Zoolog. B Mol. Dev. Evol.
-Journal of Experimental Zoology. Supplement = J. Exp. Zool. Suppl.
-Journal of Experimental and Clinical Cancer Research = J. Exp. Clin. Cancer Res.
-Journal of Experimental and Theoretical Physics=J. Exp. Theor. Phys.;JTPHES;M
-Journal of Exposure Analysis and Environmental Epidemiology = J. Expo. Anal. Environ. Epidemiol.
-Journal of Exposure Science and Environmental Epidemiology = J. Expo. Sci. Environ. Epidemiol.
-Journal of Extra-Corporeal Technology = J. Extra. Corpor. Technol.
-Journal of Family Planning and Reproductive Health Care = J. Fam. Plann. Reprod. Health Care
-Journal of Family Practice = J. Fam. Pract.
-Journal of Feline Medicine and Surgery = J. Feline Med. Surg.
-Journal of Fish Biology = J. Fish Biol.
-Journal of Fluid Mechanics = J. Fluid Mech.
-Journal of Fluorine Chemistry=J. Fluorine Chem.;JFLCAR;M
-Journal of Food Protection = J. Food Prot.
-Journal of Food Science=J. Food Sci.;JFDSAZ;9/YR
-Journal of Foot Surgery = J. Foot Surg.
-Journal of Foot and Ankle Surgery = J. Foot Ankle Surg.
-Journal of Forensic Medicine = J. Forensic Med.
-Journal of Forensic Nursing = J. Forensic. Nurs.
-Journal of Forensic Odonto-Stomatology = J. Forensic Odontostomatol.
-Journal of Forensic Sciences = J. Forensic Sci.
-Journal of Free Radicals in Biology and Medicine = J. Free Radic. Biol. Med.
-Journal of Fusion Energy=J. Fusion Energy;JFENDS;Q
-Journal of Gastroenterology = J. Gastroenterol.
-Journal of Gastroenterology and Hepatology = J. Gastroenterol. Hepatol.
-Journal of Gastrointestinal Surgery = J. Gastrointest. Surg.
-Journal of Gastrointestinal and Liver Diseases = J. Gastrointestin. Liver Dis.
-Journal of Gender-Specific Medicine = J. Gend. Specif. Med.
-Journal of Gene Medicine = J. Gene Med.
-Journal of General Internal Medicine = J. Gen. Intern. Med.
-Journal of General Microbiology = J. Gen. Microbiol.
-Journal of General Orthodontics = J. Gen. Orthod.
-Journal of General Physiology = J. Gen. Physiol.
-Journal of General Psychology = J. Gen. Psychol.
-Journal of General Virology = J. Gen. Virol.
-Journal of General and Applied Microbiology=J. Gen. Appl. Microbiol.;JGAMA9;BM
-Journal of Genetic Psychology = J. Genet. Psychol.
-Journal of Genome Science and Technology=J. Genome Sci. Technol.;JGSTAI;Q
-Journal of Geochemical Exploration=J. Geochem. Explor.;JGCEAT;BM
-Journal of Geophysical Research = J. Geophys. Res.
-Journal of Geriatric Physical Therapy = J. Geriatr. Phys. Ther.
-Journal of Geriatric Psychiatry = J. Geriatr. Psychiatry
-Journal of Geriatric Psychiatry and Neurology = J. Geriatr. Psychiatry Neurol.
-Journal of Gerontological Nursing = J. Gerontol. Nurs.
-Journal of Gerontology = J. Gerontol.
-Journal of Glaciology = J. Glaciol.
-Journal of Glaucoma = J. Glaucoma
-Journal of Gnathology = J. Gnathol.
-Journal of Gynecologic Surgery = J. Gynecol. Surg.
-Journal of HIV Therapy = J. HIV Ther.
-Journal of Hand Surgery. American Volume = J. Hand Surg. [Am.]
-Journal of Hand Surgery. British Volume = J. Hand Surg. [Br.]
-Journal of Hand Therapy = J. Hand Ther.
-Journal of Hazardous Materials = J. Hazard. Mater.
-Journal of Head Trauma Rehabilitation = J. Head Trauma Rehabil.
-Journal of Health Administration Education = J. Health Adm. Educ.
-Journal of Health Care Benefits = J. Health Care Benefits
-Journal of Health Care Chaplaincy = J. Health Care Chaplain.
-Journal of Health Care Finance = J. Health Care Finance
-Journal of Health Care Interior Design = J. Health Care Inter. Des.
-Journal of Health Care Marketing = J. Health Care Mark.
-Journal of Health Care Technology = J. Health Care Technol.
-Journal of Health Care for the Poor and Underserved = J. Health Care Poor Underserved
-Journal of Health Economics = J. Health Econ.
-Journal of Health Education = J. Health Educ.
-Journal of Health Politics, Policy and Law = J. Health Polit. Policy Law
-Journal of Health Services Research and Policy = J. Health Serv. Res. Policy
-Journal of Health and Hospital Law = J. Health Hosp. Law
-Journal of Health and Human Behavior = J. Health Hum. Behav.
-Journal of Health and Human Resources Administration = J. Health Hum. Resour. Adm.
-Journal of Health and Human Services Administration = J. Health Hum. Serv. Adm.
-Journal of Health and Social Behavior = J. Health Soc. Behav.
-Journal of Health and Social Policy = J. Health Soc. Policy
-Journal of Health, Population, and Nutrition = J. Health Popul. Nutr.
-Journal of Healthcare Design = J. Healthc. Des.
-Journal of Healthcare Education and Training = J. Healthc. Educ. Train.
-Journal of Healthcare Information Management = J. Healthc. Inf. Manag.
-Journal of Healthcare Management = J. Healthc. Manag.
-Journal of Healthcare Materiel Management = J. Healthc. Mater. Manage.
-Journal of Healthcare Protection Management = J. Healthc. Prot. Manage.
-Journal of Healthcare Resource Management = J. Healthc. Resour. Manag.
-Journal of Healthcare Risk Management = J. Healthc. Risk Manag.
-Journal of Heart Transplantation = J. Heart Transplant.
-Journal of Heart Valve Disease = J. Heart Valve Dis.
-Journal of Heart and Lung Transplantation = J. Heart Lung Transplant.
-Journal of Helminthology = J. Helminthol.
-Journal of Hematotherapy = J. Hematother.
-Journal of Hematotherapy and Stem Cell Research = J. Hematother. Stem Cell Res.
-Journal of Hepato-Biliary-Pancreatic Surgery = J. Hepatobiliary. Pancreat. Surg.
-Journal of Hepatology = J. Hepatol.
-Journal of Hepatology. Supplement = J. Hepatol. Suppl.
-Journal of Herbal Pharmacotherapy = J. Herb. Pharmacother.
-Journal of Heredity = J. Hered.
-Journal of Heterocyclic Chemistry=J. Heterocycl. Chem.;JHTCAD;BM
-Journal of Histochemistry and Cytochemistry = J. Histochem. Cytochem.
-Journal of Holistic Nursing = J. Holist. Nurs.
-Journal of Homosexuality = J. Homosex.
-Journal of Hospital Dental Practice = J. Hosp. Dent. Pract.
-Journal of Hospital Infection = J. Hosp. Infect.
-Journal of Hospital Marketing = J. Hosp. Mark.
-Journal of Hospital Supply, Processing and Distribution = J. Hosp. Supply. Process. Distrib.
-Journal of Huazhong University of Science and Technology. Medical Sciences = J. Huazhong Univ. Sci. Technolog. Med. Sci.
-Journal of Human Ergology = J. Hum. Ergol. (Tokyo)
-Journal of Human Evolution = J. Hum. Evol.
-Journal of Human Genetics = J. Hum. Genet.
-Journal of Human Hypertension = J. Hum. Hypertens.
-Journal of Human Lactation = J. Hum. Lact.
-Journal of Human Nutrition = J. Hum. Nutr.
-Journal of Human Resources = J. Hum. Resour.
-Journal of Human Stress = J. Human Stress
-Journal of Human Virology = J. Hum. Virol.
-Journal of Hydrology = J. Hydrol.
-Journal of Hygiene = J. Hyg. (Lond.)
-Journal of Hygiene, Epidemiology, Microbiology and Immunology = J. Hyg. Epidemiol. Microbiol. Immunol.
-Journal of Hypertension = J. Hypertens.
-Journal of Hypertension. Supplement = J. Hypertens. Suppl.
-Journal of Image Guided Surgery = J. Image Guid. Surg.
-Journal of Imaging Science and Technology=J. Imaging Sci. Technol.;JIMTE6;BM
-Journal of Immigrant and Minority Health = J. Immigr. Minor. Health
-Journal of Immunoassay = J. Immunoassay
-Journal of Immunoassay & Immunochemistry=J. Immunoassay Immunochem.;JIIOAZ;Q
-Journal of Immunoassay and Immunochemistry = J. Immunoassay Immunochem.
-Journal of Immunogenetics = J. Immunogenet.
-Journal of Immunological Methods = J. Immunol. Methods
-Journal of Immunology = J. Immunol.
-Journal of Immunopharmacology = J. Immunopharmacol.
-Journal of Immunotherapy = J. Immunother.
-Journal of Immunotherapy with Emphasis on Tumor Immunology = J. Immunother. Emphasis Tumor Immunol.
-Journal of In Vitro Fertilization and Embryo Transfer = J. In Vitro Fert. Embryo Transf.
-Journal of Inclusion Phenomena and Macrocyclic Chemistry=J. Inclusion Phenom. Macrocyclic Chem.;JIPCF5;M
-Journal of Individual Psychology = J. Individ. Psychol.
-Journal of Industrial Microbiology = J. Ind. Microbiol.
-Journal of Industrial Microbiology & Biotechnology=J. Ind. Microbiol. Biotechnol.;JIMBFL;M
-Journal of Industrial Microbiology and Biotechnology = J. Ind. Microbiol. Biotechnol.
-Journal of Industrial and Engineering Chemistry (Seoul, Republic of Korea)=J. Ind. Eng. Chem. (Seoul, Repub. Korea);JIECFI;BM
-Journal of Infection = J. Infect.
-Journal of Infectious Diseases = J. Infect. Dis.
-Journal of Inflammation = J. Inflamm.
-Journal of Information and Image Management = J. Inf. Image Manage.
-Journal of Infusional Chemotherapy = J. Infus. Chemother.
-Journal of Inherited Metabolic Disease = J. Inherit. Metab. Dis.
-Journal of Inorganic Biochemistry = J. Inorg. Biochem.
-Journal of Inorganic and Organometallic Polymers and Materials=J. Inorg. Organomet. Polym. Mater.;JIOPAY;Q
-Journal of Insect Physiology = J. Insect Physiol.
-Journal of Insect Science = J. Insect Sci.
-Journal of Insurance Medicine = J. Insur. Med.
-Journal of Integrative Neuroscience = J. Integr. Neurosci.
-Journal of Intellectual Disabilities = J. Intellect. Disabil.
-Journal of Intellectual Disability Research = J. Intellect. Disabil. Res.
-Journal of Intensive Care Medicine = J. Intensive Care Med.
-Journal of Interferon & Cytokine Research=J. Interferon Cytokine Res.;JICRFJ;M
-Journal of Interferon Research = J. Interferon Res.
-Journal of Interferon and Cytokine Research = J. Interferon Cytokine Res.
-Journal of Internal Medicine = J. Intern. Med.
-Journal of Internal Medicine. Supplement = J. Intern. Med. Suppl.
-Journal of International Medical Research = J. Int. Med. Res.
-Journal of International Research Communications = J. Int. Res. Commun.
-Journal of Interventional Cardiac Electrophysiology = J. Interv. Card. Electrophysiol.
-Journal of Interventional Cardiology = J. Intervent. Cardiol.
-Journal of Intravenous Nursing = J. Intraven. Nurs.
-Journal of Invasive Cardiology = J. Invasive Cardiol.
-Journal of Invertebrate Pathology = J. Invertebr. Pathol.
-Journal of Investigational Allergology and Clinical Immunology = J. Investig. Allergol. Clin. Immunol.
-Journal of Investigative Dermatology = J. Invest. Dermatol.
-Journal of Investigative Dermatology. Symposium Proceedings = J. Investig. Dermatol. Symp. Proc.
-Journal of Investigative Medicine = J. Investig. Med.
-Journal of Investigative Surgery = J. Invest. Surg.
-Journal of Knee Surgery = J. Knee Surg.
-Journal of Korean Medical Science = J. Korean Med. Sci.
-Journal of LGBT Health Research = J. LGBT Health Res.
-Journal of Labelled Compounds & Radiopharmaceuticals=J. Labelled Compd. Radiopharm.;JLCRD4;14/YR
-Journal of Laboratory and Clinical Medicine = J. Lab. Clin. Med.
-Journal of Laparoendoscopic Surgery = J. Laparoendosc. Surg.
-Journal of Laparoendoscopic and Advanced Surgical Techniques. Part A = J. Laparoendosc. Adv. Surg. Tech. A
-Journal of Laryngology and Otology = J. Laryngol. Otol.
-Journal of Laryngology and Otology. Supplement = J. Laryngol. Otol. Suppl.
-Journal of Laser Applications = J. Laser Appl.
-Journal of Law and Ethics in Dentistry = J. Law Ethics Dent.
-Journal of Law and Health = J. Law Health
-Journal of Law, Medicine and Ethics = J. Law. Med. Ethics
-Journal of Learning Disabilities = J. Learn. Disabil.
-Journal of Legal Medicine = J. Leg. Med.
-Journal of Leukocyte Biology = J. Leukoc. Biol.
-Journal of Leukocyte Biology. Supplement = J. Leukoc. Biol. Suppl.
-Journal of Lipid Mediators = J. Lipid Mediat.
-Journal of Lipid Mediators and Cell Signalling = J. Lipid Mediat. Cell Signal.
-Journal of Lipid Research = J. Lipid Res.
-Journal of Liquid Chromatography & Related Technologies=J. Liq. Chromatogr. Relat. Technol.;JLCTFC;20/YR
-Journal of Lithotripsy and Stone Disease = J. Lithotr. Stone Dis.
-Journal of Long Term Care Administration = J. Long Term Care Adm.
-Journal of Long Term Home Health Care = J. Long Term Home Health Care
-Journal of Long-Term Effects of Medical Implants = J. Long. Term Eff. Med. Implants
-Journal of Low Temperature Physics=J. Low Temp. Phys.;JLTPAC;M
-Journal of Luminescence=J. Lumin.;JLUMA8;20/YR
-Journal of Macromolecular Science, Part A: Pure and Applied Chemistry=J. Macromol. Sci., Part A: Pure Appl. Chem.;JSPCE6;M
-Journal of Macromolecular Science, Part B: Physics=J. Macromol. Sci., Part B: Phys.;JMAPBR;BM
-Journal of Macromolecular Science, Polymer Reviews=J. Macromol. Sci., Polym. Rev.;JMSPCG;Q
-Journal of Magnetic Resonance = J. Magn. Reson.
-Journal of Magnetic Resonance Imaging = J. Magn. Reson. Imaging
-Journal of Magnetic Resonance. Series A = J. Magn. Reson. A
-Journal of Magnetic Resonance. Series B = J. Magn. Reson. B
-Journal of Magnetism and Magnetic Materials=J. Magn. Magn. Mater.;JMMMDC;45/YR
-Journal of Mammalogy = J. Mammal.
-Journal of Mammary Gland Biology and Neoplasia = J. Mammary Gland Biol. Neoplasia
-Journal of Management in Medicine = J. Manag. Med.
-Journal of Manipulative and Physiological Therapeutics = J. Manipulative Physiol. Ther.
-Journal of Marine Research = J. Mar. Res.
-Journal of Marine Systems = J. Mar. Syst.
-Journal of Marital and Family Therapy = J. Marital Fam. Ther.
-Journal of Marketing for Mental Health = J. Mark. Ment. Health
-Journal of Marketing for Professions = J. Mark. Prof.
-Journal of Marmara University Dental Faculty = J. Marmara Univ. Dent. Fac.
-Journal of Mass Spectrometry = J. Mass Spectrom.
-Journal of Materials Chemistry=J. Mater. Chem.;JMACEP;48/YR
-Journal of Materials Engineering and Performance=J. Mater. Eng. Perform.;JMEPEG;BM
-Journal of Materials Research=J. Mater. Res.;JMREEE;M
-Journal of Materials Science=J. Mater. Sci.;JMTSAS;SM
-Journal of Materials Science: Materials in Electronics=J. Mater. Sci.: Mater. Electron.;JSMEEV;M
-Journal of Materials Science: Materials in Medicine=J. Mater. Sci.: Mater. Med.;JSMMEL;M
-Journal of Maternal-Fetal Medicine = J. Matern. Fetal Med.
-Journal of Maternal-Fetal and Neonatal Medicine = J. Matern. Fetal Neonatal Med.
-Journal of Mathematical Biology = J. Math. Biol.
-Journal of Mathematical Chemistry=J. Math. Chem.;JMCHEG;8/YR
-Journal of Mathematical Psychology = J. Math. Psychol.
-Journal of Maxillofacial Orthopedics = J. Maxillofac. Orthop.
-Journal of Maxillofacial Surgery = J. Maxillofac. Surg.
-Journal of Mechanochemistry and Cell Motility = J. Mechanochem. Cell Motil.
-Journal of Medical Education = J. Med. Educ.
-Journal of Medical Engineering and Technology = J. Med. Eng. Technol.
-Journal of Medical Entomology = J. Med. Entomol.
-Journal of Medical Entomology. Supplement = J. Med. Entomol. Suppl.
-Journal of Medical Ethics = J. Med. Ethics
-Journal of Medical Genetics = J. Med. Genet.
-Journal of Medical Humanities = J. Med. Humanit.
-Journal of Medical Humanities and Bioethics = J. Med. Humanit. Bioeth.
-Journal of Medical Internet Research = J. Med. Internet Res.
-Journal of Medical Investigation = J. Med. Invest.
-Journal of Medical Laboratory Technology = J. Med. Lab. Technol.
-Journal of Medical Microbiology = J. Med. Microbiol.
-Journal of Medical Practice Management = J. Med. Pract. Manage.
-Journal of Medical Primatology = J. Med. Primatol.
-Journal of Medical Screening = J. Med. Screen.
-Journal of Medical Systems = J. Med. Syst.
-Journal of Medical Virology = J. Med. Virol.
-Journal of Medical and Dental Sciences = J. Med. Dent. Sci.
-Journal of Medical and Veterinary Mycology = J. Med. Vet. Mycol.
-Journal of Medicinal Chemistry = J. Med. Chem.
-Journal of Medicine = J. Med.
-Journal of Medicine and Philosophy = J. Med. Philos.
-Journal of Membrane Biology = J. Membr. Biol.
-Journal of Membrane Science=J. Membr. Sci.;JMESDO;36/YR
-Journal of Mental Deficiency Research = J. Ment. Defic. Res.
-Journal of Mental Health Administration = J. Ment. Health Adm.
-Journal of Mental Health Policy and Economics = J. Ment. Health Policy Econ.
-Journal of Meteorological Research, Japan = J. Meteor. Res. Japan
-Journal of Meteorology = J. Meteor.
-Journal of Michigan Dental Association = J. Mich. Dent. Assoc.
-Journal of Microbiological Methods = J. Microbiol. Methods
-Journal of Microbiology, Immunology, and Infection = J. Microbiol. Immunol. Infect.
-Journal of Microencapsulation = J. Microencapsul.
-Journal of Micrographics = J. Microgr.
-Journal of Microscopy = J. Microsc.
-Journal of Microsurgery = J. Microsurg.
-Journal of Microwave Power = J. Microw. Power
-Journal of Microwave Power and Electromagnetic Energy = J. Microw. Power Electromagn. Energy
-Journal of Midwifery and Women's Health = J. Midwifery Womens Health
-Journal of Minimally Invasive Gynecology = J. Minim. Invasive Gynecol.
-Journal of Modern Optics=J. Mod. Opt.
-Journal of Molecular Biology = J. Mol. Biol.
-Journal of Molecular Catalysis A: Chemical=J. Mol. Catal. A: Chem.;JMCCF2;SM
-Journal of Molecular Catalysis B: Enzymatic=J. Mol. Catal. B: Enzym.;JMCEF8;8/YR
-Journal of Molecular Diagnostics = J. Mol. Diagn.
-Journal of Molecular Endocrinology = J. Mol. Endocrinol.
-Journal of Molecular Evolution = J. Mol. Evol.
-Journal of Molecular Graphics = J. Mol. Graph.
-Journal of Molecular Graphics & Modelling=J. Mol. Graphics Modell.;JMGMFI;BM
-Journal of Molecular Graphics and Modelling = J. Mol. Graph. Model.
-Journal of Molecular Histology = J. Mol. Histol.
-Journal of Molecular Liquids=J. Mol. Liq.;JMLIDT;21/YR
-Journal of Molecular Medicine = J. Mol. Med.
-Journal of Molecular Microbiology and Biotechnology = J. Mol. Microbiol. Biotechnol.
-Journal of Molecular Neuroscience = J. Mol. Neurosci.
-Journal of Molecular Recognition = J. Mol. Recognit.
-Journal of Molecular Spectroscopy = J. Mol. Spectrosc.
-Journal of Molecular Structure=J. Mol. Struct.;JMOSB4;66/YR
-Journal of Molecular and Applied Genetics = J. Mol. Appl. Genet.
-Journal of Molecular and Cellular Cardiology = J. Mol. Cell. Cardiol.
-Journal of Molecular and Cellular Immunology = J. Mol. Cell. Immunol.
-Journal of Molecular and Cellular Pathology = J. Mol. Cell. Pathol.
-Journal of Morphology = J. Morphol.
-Journal of Muscle Research and Cell Motility = J. Muscle Res. Cell Motil.
-Journal of Music Therapy = J. Music Ther.
-Journal of Nanoscience and Nanotechnology = J. Nanosci. Nanotechnol.
-Journal of National Black Nurses Association = J. Natl. Black Nurses Assoc.
-Journal of Natural Gas Chemistry=J. Nat. Gas Chem.;JGCHE8;Q
-Journal of Natural Products = J. Nat. Prod.
-Journal of Natural Toxins = J. Nat. Toxins
-Journal of Near Infrared Spectroscopy=J. Near Infrared Spectrosc.;JNISEI;BM
-Journal of Negative Results in Biomedicine = J. Negat. Results Biomed.
-Journal of Nephrology Nursing = J. Nephrol. Nurs.
-Journal of Nervous and Mental Disease = J. Nerv. Ment. Dis.
-Journal of Neural Engineering = J. Neural Eng.
-Journal of Neural Transmission = J. Neural Transm.
-Journal of Neural Transmission. General Section = J. Neural Transm. Gen. Sect.
-Journal of Neural Transmission. Parkinsons Disease and Dementia Section = J. Neural Transm. Park. Dis. Dement. Sect.
-Journal of Neural Transmission. Supplementum = J. Neural Transm. Suppl.
-Journal of Neural Transplantation = J. Neural Transplant.
-Journal of Neural Transplantation and Plasticity = J. Neural Transplant. Plast.
-Journal of Neuro-Oncology = J. Neurooncol.
-Journal of Neuro-Ophthalmology = J. Neuroophthalmol.
-Journal of Neuro-Visceral Relations = J. Neurovisc. Relat.
-Journal of Neurobiology = J. Neurobiol.
-Journal of Neurochemistry = J. Neurochem.
-Journal of Neurocytology = J. Neurocytol.
-Journal of Neuroendocrinology = J. Neuroendocrinol.
-Journal of Neurogenetics = J. Neurogenet.
-Journal of Neuroimaging = J. Neuroimaging
-Journal of Neuroimmunology = J. Neuroimmunol.
-Journal of Neuroimmunology. Supplement = J. Neuroimmunol. Suppl.
-Journal of Neurologic Physical Therapy = J. Neurol. Phys. Ther.
-Journal of Neurology = J. Neurol.
-Journal of Neurology, Neurosurgery and Psychiatry = J. Neurol. Neurosurg. Psychiatry
-Journal of Neuropathology and Experimental Neurology = J. Neuropathol. Exp. Neurol.
-Journal of Neurophysiology = J. Neurophysiol.
-Journal of Neuropsychiatry and Clinical Neurosciences = J. Neuropsychiatry Clin. Neurosci.
-Journal of Neuroradiology = J. Neuroradiol.
-Journal of Neuroscience = J. Neurosci.
-Journal of Neuroscience Methods = J. Neurosci. Methods
-Journal of Neuroscience Nursing = J. Neurosci. Nurs.
-Journal of Neuroscience Research = J. Neurosci. Res.
-Journal of Neurosurgery = J. Neurosurg.
-Journal of Neurosurgery. Spine = J. Neurosurg. Spine
-Journal of Neurosurgical Anesthesiology = J. Neurosurg. Anesthesiol.
-Journal of Neurosurgical Nursing = J. Neurosurg. Nurs.
-Journal of Neurosurgical Sciences = J. Neurosurg. Sci.
-Journal of Neurotrauma = J. Neurotrauma
-Journal of Neurovirology = J. Neurovirol.
-Journal of New Drugs = J. New Drugs
-Journal of New Zealand Society of Periodontology = J. N. Z. Soc. Periodontol.
-Journal of Nihon University School of Dentistry = J. Nihon Univ. Sch. Dent.
-Journal of Nippon Medical School = J. Nippon Med. Sch.
-Journal of Non-Crystalline Solids=J. Non-Cryst. Solids;JNCSBJ;54/YR
-Journal of Non-Newtonian Fluid Mechanics=J. Non-Newtonian Fluid Mech.;JNFMDI;24/YR
-Journal of Nuclear Biology and Medicine = J. Nucl. Biol. Med.
-Journal of Nuclear Cardiology = J. Nucl. Cardiol.
-Journal of Nuclear Materials=J. Nucl. Mater.;JNUMAM;36/YR
-Journal of Nuclear Medicine = J. Nucl. Med.
-Journal of Nuclear Medicine Technology = J. Nucl. Med. Technol.
-Journal of Nuclear Medicine and Allied Sciences = J. Nucl. Med. Allied Sci.
-Journal of Nuclear Science and Technology (Tokyo, Japan)=J. Nucl. Sci. Technol. (Tokyo, Jpn.);JNSTAX;M
-Journal of Nurse-Midwifery = J. Nurse. Midwifery
-Journal of Nursing Administration = J. Nurs. Adm.
-Journal of Nursing Care = J. Nurs. Care
-Journal of Nursing Care Quality = J. Nurs. Care Qual.
-Journal of Nursing Education = J. Nurs. Educ.
-Journal of Nursing Ethics = J. Nurs. Ethics
-Journal of Nursing History = J. Nurs. Hist.
-Journal of Nursing Management = J. Nurs. Manag.
-Journal of Nursing Measurement = J. Nurs. Meas.
-Journal of Nursing Quality Assurance = J. Nurs. Qual. Assur.
-Journal of Nursing Research = J. Nurs. Res.
-Journal of Nursing Scholarship = J. Nurs. Scholarsh.
-Journal of Nursing Staff Development = J. Nurs. Staff Dev.
-Journal of Nutrition = J. Nutr.
-Journal of Nutrition Education and Behavior = J. Nutr. Educ. Behav.
-Journal of Nutrition for the Elderly = J. Nutr. Elder.
-Journal of Nutrition, Health and Aging = J. Nutr. Health Aging
-Journal of Nutritional Biochemistry=J. Nutr. Biochem.;JNBIEL;M
-Journal of Nutritional Science and Vitaminology = J. Nutr. Sci. Vitaminol. (Tokyo)
-Journal of Obstetric, Gynecologic, and Neonatal Nursing = J. Obstet. Gynecol. Neonatal Nurs.
-Journal of Obstetrics and Gynaecology = J. Obstet. Gynaecol.
-Journal of Obstetrics and Gynaecology Canada = J. Obstet. Gynaecol. Can.
-Journal of Obstetrics and Gynaecology Research = J. Obstet. Gynaecol. Res.
-Journal of Obstetrics and Gynaecology of India = J. Obstet. Gynaecol. India
-Journal of Obstetrics and Gynaecology of the British Commonwealth = J. Obstet. Gynaecol. Br. Commonw.
-Journal of Occupational Health Psychology = J. Occup. Health Psychol.
-Journal of Occupational Medicine = J. Occup. Med.
-Journal of Occupational and Environmental Hygiene = J. Occup. Environ. Hyg.
-Journal of Occupational and Environmental Medicine = J. Occup. Environ. Med.
-Journal of Ocular Pharmacology = J. Ocul. Pharmacol.
-Journal of Ocular Pharmacology and Therapeutics = J. Ocul. Pharmacol. Ther.
-Journal of Oleo Science=J. Oleo Sci.;JOSOAP;M
-Journal of Oncology Management = J. Oncol. Manag.
-Journal of Ophthalmic Nursing and Technology = J. Ophthalmic Nurs. Technol.
-Journal of Oral Implant and Transplant Surgery = J. Oral Implant Transplant Surg.
-Journal of Oral Implantology = J. Oral Implantol.
-Journal of Oral Medicine = J. Oral Med.
-Journal of Oral Pathology = J. Oral Pathol.
-Journal of Oral Pathology and Medicine = J. Oral Pathol. Med.
-Journal of Oral Rehabilitation = J. Oral Rehabil.
-Journal of Oral Science = J. Oral Sci.
-Journal of Oral Surgery = J. Oral Surg.
-Journal of Oral Therapeutics and Pharmacology = J. Oral Ther. Pharmacol.
-Journal of Oral and Maxillofacial Surgery = J. Oral Maxillofac. Surg.
-Journal of Organic Chemistry = J. Org. Chem.
-Journal of Organometallic Chemistry=J. Organomet. Chem.;JORCAI;BW
-Journal of Orofacial Orthopedics = J. Orofac. Orthop.
-Journal of Orofacial Pain = J. Orofac. Pain
-Journal of Orthodontics = J. Orthod.
-Journal of Orthopaedic Research = J. Orthop. Res.
-Journal of Orthopaedic Science = J. Orthop. Sci.
-Journal of Orthopaedic Trauma = J. Orthop. Trauma
-Journal of Orthopaedic and Sports Physical Therapy = J. Orthop. Sports Phys. Ther.
-Journal of Osaka Dental University = J. Osaka Dent. Univ.
-Journal of Otolaryngology = J. Otolaryngol.
-Journal of Otolaryngology. Supplement = J. Otolaryngol. Suppl.
-Journal of Outcome Measurement = J. Outcome Meas.
-Journal of Paediatric Dentistry = J. Paediatr. Dent.
-Journal of Paediatrics and Child Health = J. Paediatr. Child Health
-Journal of Pain and Palliative Care Pharmacotherapy = J. Pain Palliat. Care Pharmacother.
-Journal of Pain and Symptom Management = J. Pain Symptom Manage.
-Journal of Palliative Care = J. Palliat. Care
-Journal of Palliative Medicine = J. Palliat. Med.
-Journal of Parasitology = J. Parasitol.
-Journal of Parenteral Science and Technology = J. Parenter. Sci. Technol.
-Journal of Pastoral Care = J. Pastoral Care
-Journal of Pathology = J. Pathol.
-Journal of Pathology and Bacteriology = J. Pathol. Bacteriol.
-Journal of Patient Account Management = J. Patient Acc. Manage.
-Journal of Pediatric Endocrinology = J. Pediatr. Endocrinol.
-Journal of Pediatric Endocrinology and Metabolism = J. Pediatr. Endocrinol. Metab.
-Journal of Pediatric Gastroenterology and Nutrition = J. Pediatr. Gastroenterol. Nutr.
-Journal of Pediatric Health Care = J. Pediatr. Health Care
-Journal of Pediatric Hematology/Oncology = J. Pediatr. Hematol. Oncol.
-Journal of Pediatric Nursing = J. Pediatr. Nurs.
-Journal of Pediatric Oncology Nursing = J. Pediatr. Oncol. Nurs.
-Journal of Pediatric Ophthalmology = J. Pediatr. Ophthalmol.
-Journal of Pediatric Ophthalmology and Strabismus = J. Pediatr. Ophthalmol. Strabismus
-Journal of Pediatric Orthopaedics. Part B = J. Pediatr. Orthop. B
-Journal of Pediatric Orthopedics = J. Pediatr. Orthop.
-Journal of Pediatric Psychology = J. Pediatr. Psychol.
-Journal of Pediatric Surgery = J. Pediatr. Surg.
-Journal of Pediatric and Adolescent Gynecology = J. Pediatr. Adolesc. Gynecol.
-Journal of Pediatric and Perinatal Nutrition = J. Pediatr. Perinat. Nutr.
-Journal of Pediatrics = J. Pediatr.
-Journal of Pedodontics = J. Pedod.
-Journal of Peptide Research = J. Pept. Res.
-Journal of Peptide Science=J. Pept. Sci.;JPSIEI;M
-Journal of Perianesthesia Nursing = J. Perianesth. Nurs.
-Journal of Perinatal Medicine = J. Perinat. Med.
-Journal of Perinatal and Neonatal Nursing = J. Perinat. Neonatal Nurs.
-Journal of Perinatology = J. Perinatol.
-Journal of Periodontal Research = J. Periodontal Res.
-Journal of Periodontal Research. Supplement = J. Periodontal Res. Suppl.
-Journal of Periodontology = J. Periodontol.
-Journal of Personality = J. Pers.
-Journal of Personality Assessment = J. Pers. Assess.
-Journal of Personality Disorders = J. Personal. Disord.
-Journal of Personality and Social Psychology = J. Pers. Soc. Psychol.
-Journal of Petroleum Science & Engineering=J. Pet. Sci. Eng.;JPSEE6;8/YR
-Journal of Petrology=J. Petrol.;JPTGAD;M
-Journal of Pharmaceutical Marketing and Management = J. Pharm. Mark. Manage.
-Journal of Pharmaceutical Science and Technology = J. Pharm. Sci. Technol.
-Journal of Pharmaceutical Sciences = J. Pharm. Sci.
-Journal of Pharmaceutical and Biomedical Analysis = J. Pharm. Biomed. Anal.
-Journal of Pharmacobio-Dynamics = J. Pharmacobiodyn.
-Journal of Pharmacokinetics and Biopharmaceutics = J. Pharmacokinet. Biopharm.
-Journal of Pharmacokinetics and Pharmacodynamics = J. Pharmacokinet. Pharmacodyn.
-Journal of Pharmacological Methods = J. Pharmacol. Methods
-Journal of Pharmacological Sciences = J. Pharmacol. Sci.
-Journal of Pharmacological Sciences (Tokyo, Japan)=J. Pharmacol. Sci. (Tokyo, Jpn.);JPSTGJ;M
-Journal of Pharmacological and Toxicological Methods = J. Pharmacol. Toxicol. Methods
-Journal of Pharmacology and Experimental Therapeutics = J. Pharmacol. Exp. Ther.
-Journal of Pharmacy Technology = J. Pharm. Technol.
-Journal of Pharmacy and Pharmaceutical Sciences = J. Pharm. Pharm. Sci.
-Journal of Pharmacy and Pharmacology = J. Pharm. Pharmacol.
-Journal of Phase Equilibria and Diffusion=J. Phase Equilib. Diffus.;JPEDAV;BM
-Journal of Philosophy, Science and Law = J. Philos. Sci. Law
-Journal of Photochemistry and Photobiology, A: Chemistry=J. Photochem. Photobiol., A;JPPCEJ;30/YR
-Journal of Photochemistry and Photobiology, B: Biology=J. Photochem. Photobiol., B;JPPBEG;M
-Journal of Photochemistry and Photobiology, C: Photochemistry Reviews=J. Photochem. Photobiol., C;JPPCAF;4/YR
-Journal of Photochemistry and Photobiology. B, Biology = J. Photochem. Photobiol. B
-Journal of Photopolymer Science and Technology=J. Photopolym. Sci. Technol.;JSTEEW;5/YR
-Journal of Physical Chemistry = J. Phys. Chem.
-Journal of Physical Chemistry A=J. Phys. Chem. A;JPCAFH;W
-Journal of Physical Chemistry B=J. Phys. Chem. B;JPCBFK;W
-Journal of Physical Oceanography = J. Phys. Oceanogr.
-Journal of Physical Organic Chemistry=J. Phys. Org. Chem.;JPOCEE;M
-Journal of Physical and Chemical Reference Data=J. Phys. Chem. Ref. Data;JPCRBU;Q
-Journal of Physics B: Atomic, Molecular and Optical Physics=J. Phys. B: At., Mol. Opt. Phys.;JPAPEH;SM
-Journal of Physics D: Applied Physics=J. Phys. D: Appl. Phys.;JPAPBE;SM
-Journal of Physics G: Nuclear and Particle Physics=J. Phys. G: Nucl. Part. Phys.;JPGPED;M
-Journal of Physics and Chemistry of Solids=J. Phys. Chem. Solids;JPCSAW;M
-Journal of Physics. E, Scientific Instruments = J. Phys. [E]
-Journal of Physics: Condensed Matter=J. Phys.: Condens. Matter;JCOMEL;50/YR
-Journal of Physiological Anthropology = J. Physiol. Anthropol.
-Journal of Physiological Anthropology and Applied Human Science = J. Physiol. Anthropol. Appl. Human Sci.
-Journal of Physiological Sciences = J. Physiol. Sci.
-Journal of Physiology = J. Physiol. (Lond.)
-Journal of Physiology (Oxford, United Kingdom)=J. Physiol. (Oxford, U. K.);JPHYA7;SM
-Journal of Physiology and Biochemistry = J. Physiol. Biochem.
-Journal of Physiology and Pharmacology = J. Physiol. Pharmacol.
-Journal of Physiology, Paris = J. Physiol. Paris
-Journal of Pierre Fauchard Academy = J. Pierre Fauchard Acad.
-Journal of Pineal Research = J. Pineal Res.
-Journal of Planar Chromatography--Modern TLC=J. Planar Chromatogr.--Mod. TLC;JPCTE5;BM
-Journal of Plankton Research = J. Plankton Res.
-Journal of Plant Growth Regulation=J. Plant Growth Regul.;JPGRDI;Q
-Journal of Plant Nutrition=J. Plant Nutr.;JPNUDS;M
-Journal of Plant Nutrition and Soil Science=J. Plant Nutr. Soil Sci.;JNSSFZ;BM
-Journal of Plant Physiology=J. Plant Physiol.;JPPHEY;M
-Journal of Plastic and Reconstructive Surgical Nursing = J. Plast. Reconstr. Surg. Nurs.
-Journal of Plastic, Reconstructive and Aesthetic Surgery = J. Plast. Reconstr. Aesthet. Surg.
-Journal of Policy Analysis and Management = J. Policy Anal. Manage.
-Journal of Polymer Materials=J. Polym. Mater.;JOPME8;Q
-Journal of Polymer Research=J. Polym. Res.;JPOREP;Q
-Journal of Polymer Science, Part A: Polymer Chemistry=J. Polym. Sci., Part A: Polym. Chem.;JPACEC;SM
-Journal of Polymer Science, Part B: Polymer Physics=J. Polym. Sci., Part B: Polym. Phys.;JPBPEM;SM
-Journal of Polymer Science. Part A, General Papers = J. Polym. Sci. A
-Journal of Polymer Science. Part A-1, Polymer Chemistry = J. Polym. Sci. [A1]
-Journal of Polymer Science. Part B, Polymer Letters = J. Polym. Sci. [B]
-Journal of Polymers and the Environment=J. Polym. Environ.;JPENFW;Q
-Journal of Porphyrins and Phthalocyanines=J. Porphyrins Phthalocyanines;JPPHFZ;M
-Journal of Post Anesthesia Nursing = J. Post Anesth. Nurs.
-Journal of Postgraduate Medicine = J. Postgrad. Med.
-Journal of Power Sources=J. Power Sources;JPSODZ;24/YR
-Journal of Practical Nursing = J. Pract. Nurs.
-Journal of Preventive Dentistry = J. Prev. Dent.
-Journal of Preventive Medicine and Public Health = J. Prev. Med. Pub. Health
-Journal of Process Control=J. Process Control;JPCOEO;8/YR
-Journal of Professional Nursing = J. Prof. Nurs.
-Journal of Professional Services Marketing = J. Prof. Serv. Mark.
-Journal of Projective Techniques and Personality Assessment = J. Proj. Tech. Pers. Assess.
-Journal of Prosthetic Dentistry = J. Prosthet. Dent.
-Journal of Prosthodontics = J. Prosthodont.
-Journal of Protein Chemistry = J. Protein Chem.
-Journal of Proteome Research = J. Proteome Res.
-Journal of Protozoology = J. Protozool.
-Journal of Psychedelic Drugs = J. Psychedelic Drugs
-Journal of Psychiatric Nursing and Mental Health Services = J. Psychiatr. Nurs.
-Journal of Psychiatric Research = J. Psychiatr. Res.
-Journal of Psychiatric and Mental Health Nursing = J. Psychiatr. Ment. Health Nurs.
-Journal of Psychiatry and Neuroscience = J. Psychiatry Neurosci.
-Journal of Psychoactive Drugs = J. Psychoactive Drugs
-Journal of Psycholinguistic Research = J. Psycholinguist. Res.
-Journal of Psychology = J. Psychol.
-Journal of Psychopharmacology = J. Psychopharmacol. (Oxf.)
-Journal of Psychosocial Nursing and Mental Health Services = J. Psychosoc. Nurs. Ment. Health Serv.
-Journal of Psychosomatic Obstetrics and Gynaecology = J. Psychosom. Obstet. Gynaecol.
-Journal of Psychosomatic Research = J. Psychosom. Res.
-Journal of Psychotherapy Practice and Research = J. Psychother. Pract. Res.
-Journal of Public Health = J. Public Health
-Journal of Public Health Dentistry = J. Public Health Dent.
-Journal of Public Health Management and Practice = J. Public Health Manag. Pract.
-Journal of Public Health Medicine = J. Public Health Med.
-Journal of Public Health Policy = J. Public Health Policy
-Journal of Pulp and Paper Science=J. Pulp Pap. Sci.;JPUSDN;Q
-Journal of Quality Assurance = J. Qual. Assur.
-Journal of Quality in Clinical Practice = J. Qual. Clin. Pract.
-Journal of Quantitative Spectroscopy & Radiative Transfer=J. Quant. Spectrosc. Radiat. Transfer;JQSRAE;28/YR
-Journal of Radiation Research = J. Radiat. Res. (Tokyo)
-Journal of Radioanalytical and Nuclear Chemistry=J. Radioanal. Nucl. Chem.;JRNCDM;M
-Journal of Radiological Protection = J. Radiol. Prot.
-Journal of Raman Spectroscopy=J. Raman Spectrosc.;JRSPAF;M
-Journal of Receptor Research = J. Recept. Res.
-Journal of Receptor and Signal Transduction Research = J. Recept. Signal Transduct. Res.
-Journal of Receptors and Signal Transduction=J. Recept. Signal Transduction;JRSTCT;Q
-Journal of Reconstructive Microsurgery = J. Reconstr. Microsurg.
-Journal of Refractive Surgery = J. Refract. Surg.
-Journal of Refractive and Corneal Surgery = J. Refract. Corneal Surg.
-Journal of Rehabilitation = J. Rehabil.
-Journal of Rehabilitation Medicine = J. Rehabil. Med.
-Journal of Rehabilitation R and D = J. Rehabil. R D
-Journal of Rehabilitation Research and Development = J. Rehabil. Res. Dev.
-Journal of Rehabilitation Research and Development. Clinical Supplement = J. Rehabil. Res. Dev. Clin. Suppl.
-Journal of Reinforced Plastics and Composites=J. Reinf. Plast. Compos.;JRPCDW;18/YR
-Journal of Renal Nutrition = J. Ren. Nutr.
-Journal of Reproduction and Fertility = J. Reprod. Fertil.
-Journal of Reproduction and Fertility. Abstract Series = J. Reprod. Fertil. Abstr. Ser.
-Journal of Reproduction and Fertility. Supplement = J. Reprod. Fertil. Suppl.
-Journal of Reproductive Immunology = J. Reprod. Immunol.
-Journal of Reproductive Medicine = J. Reprod. Med.
-Journal of Rheology (New York, NY, United States)=J. Rheol. (N. Y., NY, U. S.);JORHD2;BM
-Journal of Rheumatology = J. Rheumatol.
-Journal of Rheumatology. Supplement = J. Rheumatol. Suppl.
-Journal of Risk and Insurance = J. Risk Insur.
-Journal of Rural Health = J. Rural Health
-Journal of School Health = J. Sch. Health
-Journal of School Nursing = J. Sch. Nurs.
-Journal of Science and Medicine in Sport = J. Sci. Med. Sport
-Journal of Scientific Instruments = J. Sci. Instrum.
-Journal of Separation Science = J. Sep. Sci.
-Journal of Sex Research = J. Sex Res.
-Journal of Sex and Marital Therapy = J. Sex Marital Ther.
-Journal of Sexual Medicine = J. Sex. Med.
-Journal of Shoulder and Elbow Surgery = J. Shoulder Elbow Surg.
-Journal of Sleep Research = J. Sleep Res.
-Journal of Small Animal Practice = J. Small Anim. Pract.
-Journal of Smooth Muscle Research = J. Smooth Muscle Res.
-Journal of Social Policy = J. Soc. Policy
-Journal of Social Psychology = J. Soc. Psychol.
-Journal of Sol-Gel Science and Technology=J. Sol-Gel Sci. Technol.;JSGTEC;12/YR
-Journal of Solid State Chemistry=J. Solid State Chem.;JSSCBI;12/YR
-Journal of Solid State Electrochemistry=J. Solid State Electrochem.;JSSEFS;12/YR
-Journal of Solution Chemistry=J. Solution Chem.;JSLCAG;M
-Journal of Speech and Hearing Disorders = J. Speech Hear. Disord.
-Journal of Speech and Hearing Research = J. Speech Hear. Res.
-Journal of Speech, Language, and Hearing Research = J. Speech Lang. Hear. Res.
-Journal of Spinal Cord Medicine = J. Spinal Cord Med.
-Journal of Spinal Disorders = J. Spinal Disord.
-Journal of Spinal Disorders and Techniques = J. Spinal Disord. Tech.
-Journal of Sports Medicine = J. Sports Med.
-Journal of Sports Medicine and Physical Fitness = J. Sports Med. Phys. Fitness
-Journal of Sports Sciences = J. Sports Sci.
-Journal of State Government = J. State Gov.
-Journal of Sterile Services Management = J. Sterile Serv. Manage.
-Journal of Steroid Biochemistry = J. Steroid Biochem.
-Journal of Steroid Biochemistry and Molecular Biology = J. Steroid Biochem. Mol. Biol.
-Journal of Stone Disease = J. Stone Dis.
-Journal of Structural Biology = J. Struct. Biol.
-Journal of Structural Chemistry=J. Struct. Chem.;JSTCAM;BM
-Journal of Structural and Functional Genomics=J. Struct. Funct. Genomics;JSFGAW;Q
-Journal of Studies on Alcohol = J. Stud. Alcohol
-Journal of Studies on Alcohol. Supplement = J. Stud. Alcohol. Suppl.
-Journal of Submicroscopic Cytology = J. Submicrosc. Cytol.
-Journal of Submicroscopic Cytology and Pathology = J. Submicrosc. Cytol. Pathol.
-Journal of Substance Abuse = J. Subst. Abuse
-Journal of Substance Abuse Treatment = J. Subst. Abuse Treat.
-Journal of Sulfur Chemistry=J. Sulfur Chem.;JSCOFC;BM
-Journal of Superconductivity=J. Supercond.;JOUSEH;BM
-Journal of Supercritical Fluids=J. Supercrit. Fluids;JSFLEH;9/yr
-Journal of Supportive Oncology = J. Support. Oncol.
-Journal of Supramolecular Structure = J. Supramol. Struct.
-Journal of Supramolecular Structure and Cellular Biochemistry = J. Supramol. Struct. Cell. Biochem.
-Journal of Supramolecular Structure and Cellular Biochemistry. Supplement = J. Supramol. Struct. Cell. Biochem. Suppl.
-Journal of Supramolecular Structure. Supplement = J. Supramol. Struct. Suppl.
-Journal of Surfactants and Detergents=J. Surfactants Deterg.;JSDEFL;Q
-Journal of Surgical Oncology = J. Surg. Oncol.
-Journal of Surgical Oncology. Supplement = J. Surg. Oncol. Suppl.
-Journal of Surgical Orthopaedic Advances = J. Surg. Orthop. Adv.
-Journal of Surgical Research = J. Surg. Res.
-Journal of Telemedicine and Telecare = J. Telemed. Telecare
-Journal of The American Statistical Association = J. Am. Stat. Assoc.
-Journal of Theoretical & Computational Chemistry=J. Theor. Comput. Chem.;JTCCAC;Q
-Journal of Theoretical Biology = J. Theor. Biol.
-Journal of Thermal Analysis and Calorimetry=J. Therm. Anal. Calorim.;JTACF7;M
-Journal of Thermophysics and Heat Transfer=J. Thermophys. Heat Transfer;JTHTEO;Q
-Journal of Thoracic Imaging = J. Thorac. Imaging
-Journal of Thoracic and Cardiovascular Surgery = J. Thorac. Cardiovasc. Surg.
-Journal of Thrombosis and Haemostasis = J. Thromb. Haemost.
-Journal of Thrombosis and Thrombolysis = J. Thromb. Thrombolysis
-Journal of Tongji Medical University = J. Tongji Med. Univ.
-Journal of Toxicological Sciences = J. Toxicol. Sci.
-Journal of Toxicology and Environmental Health = J. Toxicol. Environ. Health
-Journal of Toxicology and Environmental Health, Part A=J. Toxicol. Environ. Health, Part A;JTEHF8;SM
-Journal of Toxicology and Environmental Health, Part B: Critical Reviews=J. Toxicol. Environ. Health, Part B;JTECFR;BM
-Journal of Toxicology and Environmental Health. Part A = J. Toxicol. Environ. Health A
-Journal of Toxicology and Environmental Health. Part B, Critical Reviews = J. Toxicol. Environ. Health B Crit. Rev.
-Journal of Toxicology and Environmental Health. Supplement = J. Toxicol. Environ. Health. Suppl.
-Journal of Toxicology. Clinical Toxicology = J. Toxicol. Clin. Toxicol.
-Journal of Trace Elements and Electrolytes in Health and Disease = J. Trace Elem. Electrolytes Health Dis.
-Journal of Trace Elements in Medicine and Biology = J. Trace Elem. Med. Biol.
-Journal of Traditional Chinese Medicine = J. Tradit. Chin. Med.
-Journal of Transcultural Nursing = J. Transcult. Nurs.
-Journal of Transplant Coordination = J. Transpl. Coord.
-Journal of Trauma = J. Trauma
-Journal of Trauma Nursing = J. Trauma Nurs.
-Journal of Traumatic Stress = J. Trauma. Stress
-Journal of Travel Medicine = J. Travel Med.
-Journal of Tropical Medicine and Hygiene = J. Trop. Med. Hyg.
-Journal of Tropical Pediatrics = J. Trop. Pediatr.
-Journal of Tropical Pediatrics and African Child Health = J. Trop. Pediatr. Afr. Child Health
-Journal of Tropical Pediatrics and Environmental Child Health = J. Trop. Pediatr. Environ. Child Health
-Journal of UOEH, University of Occupational and Environmental Health = J. UOEH
-Journal of Ultrasound in Medicine = J. Ultrasound Med.
-Journal of Ultrastructure Research = J. Ultrastruct. Res.
-Journal of Ultrastructure and Molecular Structure Research = J. Ultrastruct. Mol. Struct. Res.
-Journal of Urban Health = J. Urban Health
-Journal of Urology = J. Urol.
-Journal of Vacuum Science & Technology, A: Vacuum, Surfaces, and Films=J. Vac. Sci. Technol., A;JVTAD6;BM
-Journal of Vascular Nursing = J. Vasc. Nurs.
-Journal of Vascular Research = J. Vasc. Res.
-Journal of Vascular Surgery = J. Vasc. Surg.
-Journal of Vascular and Interventional Radiology = J. Vasc. Interv. Radiol.
-Journal of Vector Borne Diseases = J. Vector Borne Dis.
-Journal of Vector Ecology = J. Vector Ecol.
-Journal of Vestibular Research = J. Vestib. Res.
-Journal of Veterinary Dentistry = J. Vet. Dent.
-Journal of Veterinary Diagnostic Investigation = J. Vet. Diagn. Invest.
-Journal of Veterinary Internal Medicine = J. Vet. Intern. Med.
-Journal of Veterinary Medical Science = J. Vet. Med. Sci.
-Journal of Veterinary Medicine. A, Physiology, Pathology, Clinical Medicine = J. Vet. Med. A Physiol. Pathol. Clin. Med.
-Journal of Veterinary Medicine. B, Infectious Diseases and Veterinary Public Health = J. Vet. Med. B Infect. Dis. Vet. Public Health
-Journal of Veterinary Pharmacology and Therapeutics = J. Vet. Pharmacol. Ther.
-Journal of Veterinary Science = J. Vet. Sci.
-Journal of Vinyl & Additive Technology=J. Vinyl Addit. Technol.;JVATF4;Q
-Journal of Viral Hepatitis = J. Viral Hepat.
-Journal of Virological Methods = J. Virol. Methods
-Journal of Virology = J. Virol.
-Journal of Vision = J. Vis.
-Journal of Visual Communication in Medicine = J. Vis. Commun. Med.
-Journal of Vitaminology = J. Vitaminol. (Kyoto)
-Journal of Vocational Behavior = J. Vocat. Behav.
-Journal of Voice = J. Voice
-Journal of Volcanology and Geothermal Research=J. Volcanol. Geotherm. Res.;JVGRDQ;40/YR
-Journal of Volunteer Administration = J. Volunt. Adm.
-Journal of Water and Health = J. Water Health
-Journal of Wildlife Diseases = J. Wildl. Dis.
-Journal of Women and Aging = J. Women Aging
-Journal of Women's Health = J. Womens Health
-Journal of Women's Health and Gender-Based Medicine = J. Womens Health Gend. Based Med.
-Journal of Wood Chemistry and Technology=J. Wood Chem. Technol.;JWCTDJ;4/YR
-Journal of Wound Care = J. Wound Care
-Journal of Wound, Ostomy and Continence Nursing = J. Wound. Ostomy Continence Nurs.
-Journal of Zhejiang University. Science. B = J. Zhejiang Univ. Sci. B
-Journal of Zoology = J. Zool.
-Journal of the Acoustical Society of America = J. Acoust. Soc. Am.
-Journal of the Aeronautical Sciences = J. Aeronaut. Sci.
-Journal of the Air Pollution Control Association = J. Air Pollut. Control Assoc.
-Journal of the Air and Waste Management Association = J. Air Waste Manag. Assoc.
-Journal of the All India Dental Association = J. All India Dent. Assoc.
-Journal of the All-India Ophthalmological Society = J. All. India Ophthalmol. Soc.
-Journal of the American Academy of Audiology = J. Am. Acad. Audiol.
-Journal of the American Academy of Child Psychiatry = J. Am. Acad. Child Psychiatry
-Journal of the American Academy of Child and Adolescent Psychiatry = J. Am. Acad. Child Adolesc. Psychiatry
-Journal of the American Academy of Dermatology = J. Am. Acad. Dermatol.
-Journal of the American Academy of Gold Foil Operators = J. Am. Acad. Gold Foil Oper.
-Journal of the American Academy of Nurse Practitioners = J. Am. Acad. Nurse Pract.
-Journal of the American Academy of Orthopaedic Surgeons = J. Am. Acad. Orthop. Surg.
-Journal of the American Academy of Psychiatry and the Law = J. Am. Acad. Psychiatry Law
-Journal of the American Academy of Psychoanalysis = J. Am. Acad. Psychoanal.
-Journal of the American Academy of Psychoanalysis and Dynamic Psychiatry = J. Am. Acad. Psychoanal. Dyn. Psychiatry
-Journal of the American Animal Hospital Association = J. Am. Anim. Hosp. Assoc.
-Journal of the American Association for Laboratory Animal Science = J. Am. Assoc. Lab. Anim. Sci.
-Journal of the American Association of Gynecologic Laparoscopists = J. Am. Assoc. Gynecol. Laparosc.
-Journal of the American Association of Nephrology Nurses and Technicians = J. Am. Assoc. Nephrol. Nurses Tech.
-Journal of the American Association of Nurse Anesthetists = J. Am. Assoc. Nurse Anesth.
-Journal of the American Audiology Society = J. Am. Audiol. Soc.
-Journal of the American Auditory Society = J. Am. Aud. Soc.
-Journal of the American Board of Family Medicine = J. Am. Board Fam. Med.
-Journal of the American Board of Family Practice = J. Am. Board Fam. Pract.
-Journal of the American Ceramic Society=J. Am. Ceram. Soc.;JACTAW;M
-Journal of the American Chemical Society = J. Am. Chem. Soc.
-Journal of the American College Health Association = J. Am. Coll. Health Assoc.
-Journal of the American College of Cardiology = J. Am. Coll. Cardiol.
-Journal of the American College of Dentists = J. Am. Coll. Dent.
-Journal of the American College of Nutrition = J. Am. Coll. Nutr.
-Journal of the American College of Surgeons = J. Am. Coll. Surg.
-Journal of the American Dental Association = J. Am. Dent. Assoc.
-Journal of the American Dental Association (Edizione Italiana) = J. Am. Dent. Assoc. (Ed. Ital.)
-Journal of the American Dental Hygienists Association = J. Am. Dent. Hyg. Assoc.
-Journal of the American Dental Society of Anesthesiology = J. Am. Dent. Soc. Anesthesiol.
-Journal of the American Dietetic Association = J. Am. Diet. Assoc.
-Journal of the American Geriatrics Society = J. Am. Geriatr. Soc.
-Journal of the American Institute of Homeopathy = J. Am. Inst. Homeopath.
-Journal of the American Institute of Planners = J. Am. Inst. Plann.
-Journal of the American Medical Informatics Association = J. Am. Med. Inform. Assoc.
-Journal of the American Medical Record Association = J. Am. Med. Rec. Assoc.
-Journal of the American Medical Womens Association = J. Am. Med. Wom. Assoc.
-Journal of the American Mosquito Control Association = J. Am. Mosq. Control Assoc.
-Journal of the American Mosquito Control Association. Supplement = J. Am. Mosq. Control Assoc. Suppl.
-Journal of the American Oil Chemists Society = J. Am. Oil Chem. Soc.
-Journal of the American Oil Chemists' Society=J. Am. Oil Chem. Soc.;JAOCA7;M
-Journal of the American Optometric Association = J. Am. Optom. Assoc.
-Journal of the American Osteopathic Association = J. Am. Osteopath. Assoc.
-Journal of the American Paraplegia Society = J. Am. Paraplegia Soc.
-Journal of the American Pharmaceutical Association = J. Am. Pharm. Assoc.
-Journal of the American Pharmaceutical Association (Washington, D.C.) = J. Am. Pharm. Assoc. (Wash.)
-Journal of the American Pharmacists Association = J. Am. Pharm. Assoc.
-Journal of the American Planning Association = J. Am. Plann. Assoc.
-Journal of the American Podiatric Medical Association = J. Am. Podiatr. Med. Assoc.
-Journal of the American Podiatry Association = J. Am. Podiatry Assoc.
-Journal of the American Psychoanalytic Association = J. Am. Psychoanal. Assoc.
-Journal of the American Society for Geriatric Dentistry = J. Am. Soc. Geriatr. Dent.
-Journal of the American Society for Information Science = J. Am. Soc. Inf. Sci.
-Journal of the American Society for Mass Spectrometry = J. Am. Soc. Mass Spectrom.
-Journal of the American Society for Preventive Dentistry = J. Am. Soc. Prev. Dent.
-Journal of the American Society of Brewing Chemists=J. Am. Soc. Brew. Chem.;JSBCD3;Q
-Journal of the American Society of Echocardiography = J. Am. Soc. Echocardiogr.
-Journal of the American Society of Nephrology = J. Am. Soc. Nephrol.
-Journal of the American Society of Psychosomatic Dentistry and Medicine = J. Am. Soc. Psychosom. Dent. Med.
-Journal of the American Venereal Disease Association = J. Am. Vener. Dis. Assoc.
-Journal of the American Veterinary Medical Association = J. Am. Vet. Med. Assoc.
-Journal of the Anatomical Society of India = J. Anat. Soc. India
-Journal of the Argentine Chemical Society=J. Argent. Chem. Soc.;JACSFY;2/YR
-Journal of the Arkansas Medical Society = J. Ark. Med. Soc.
-Journal of the Association for Academic Minority Physicians = J. Assoc. Acad. Minor. Phys.
-Journal of the Association for Physical and Mental Rehabilitation = J. Assoc. Phys. Ment. Rehabil.
-Journal of the Association for Research in Otolaryngology = J. Assoc. Res. Otolaryngol.
-Journal of the Association for the Care of Children in Hospitals = J. Assoc. Care Child. Hosp.
-Journal of the Association for the Care of Children's Health = J. Assoc. Care Child. Health
-Journal of the Association of Nurses in AIDS Care = J. Assoc. Nurses AIDS Care
-Journal of the Association of Pediatric Oncology Nurses = J. Assoc. Pediatr. Oncol. Nurses
-Journal of the Association of Physicians of India = J. Assoc. Physicians India
-Journal of the Atmospheric Sciences = J. Atmos. Sci.
-Journal of the Australian Institute of Surgical and Dental Technicians (Melbourne) = J. Aust. Inst. Surg. Dent. Tech.
-Journal of the Autonomic Nervous System = J. Auton. Nerv. Syst.
-Journal of the Baltimore College of Dental Surgery = J. Baltimore Coll. Dent. Surg.
-Journal of the Bergen County Dental Society = J. Bergen Cty. Dent. Soc.
-Journal of the Biological Photographic Association = J. Biol. Photogr. Assoc.
-Journal of the Brazilian Chemical Society=J. Braz. Chem. Soc.;JOCSET;BM
-Journal of the British Endodontic Society = J. Br. Endod. Soc.
-Journal of the California Dental Association = J. Calif. Dent. Assoc.
-Journal of the Canadian Association of Radiologists = J. Can. Assoc. Radiol.
-Journal of the Canadian Dental Association = J. Can. Dent. Assoc.
-Journal of the Canadian Dietetic Association = J. Can. Diet. Assoc.
-Journal of the Catholic Nurses Guild of England and Wales = J. Cathol. Nurses Guild Engl. Wales
-Journal of the Ceramic Society of Japan=J. Ceram. Soc. Jpn.;JCSJEW;M
-Journal of the Charles H. Tweed International Foundation = J. Charles H. Tweed Int. Found.
-Journal of the Chemical Society of Pakistan=J. Chem. Soc. Pak.;JCSPDF;Q
-Journal of the Chemical Society. Perkin Transactions 1 = J. Chem. Soc. [Perkin 1]
-Journal of the Chilean Chemical Society=J. Chil. Chem. Soc.;JCCSCB;Q
-Journal of the Chinese Chemical Society (Taipei, Taiwan)=J. Chin. Chem. Soc. (Taipei, Taiwan);JCCTAC;BM
-Journal of the Chinese Institute of Chemical Engineers=J. Chin. Inst. Chem. Eng.;JCICAP;BM
-Journal of the Chinese Medical Association = J. Chin. Med. Assoc.
-Journal of the College of General Practitioners = J. Coll. Gen. Pract.
-Journal of the College of Radiologists of Australasia = J. Coll. Radiol. Australas.
-Journal of the Colorado Dental Association = J. Colo. Dent. Assoc.
-Journal of the Dental Association of South Africa = J. Dent. Assoc. S. Afr.
-Journal of the Dental Association of Thailand = J. Dent. Assoc. Thai.
-Journal of the Dental Auxiliaries = J. Dent. Aux.
-Journal of the Dental Guidance Council on the Handicapped = J. Dent. Guid. Counc. Handicap.
-Journal of the Dental School, National University of Iran = J. Dent. Sch. Natl. Univ. Iran
-Journal of the Egyptian Medical Association = J. Egypt. Med. Assoc.
-Journal of the Egyptian Public Health Association = J. Egypt. Public Health Assoc.
-Journal of the Egyptian Society of Parasitology = J. Egypt. Soc. Parasitol.
-Journal of the Electrochemical Society=J. Electrochem. Soc.;JESOAN;M
-Journal of the Electrochemical Society of India=J. Electrochem. Soc. India;JESIA5;Q
-Journal of the Energy Institute=J. Energy Inst.;JEIOB8;4/YR
-Journal of the European Academy of Dermatology and Venereology = J. Eur. Acad. Dermatol. Venereol.
-Journal of the European Ceramic Society=J. Eur. Ceram. Soc.;JECSER;16/YR
-Journal of the Experimental Analysis of Behavior = J. Exp. Anal. Behav.
-Journal of the Florida Medical Association = J. Fla. Med. Assoc.
-Journal of the Florida State Dental Society = J. Fla. State Dent. Soc.
-Journal of the Formosan Medical Association = J. Formos. Med. Assoc.
-Journal of the Georgia Dental Association = J. Ga. Dent. Assoc.
-Journal of the Greater Houston Dental Society = J. Gt. Houst. Dent. Soc.
-Journal of the Hawaii Dental Association = J. Hawaii Dent. Assoc.
-Journal of the Hawaii State Dental Association = J. Hawaii State Dent. Assoc.
-Journal of the History of Dentistry = J. Hist. Dent.
-Journal of the History of Medicine and Allied Sciences = J. Hist. Med. Allied Sci.
-Journal of the History of the Behavioral Sciences = J. Hist. Behav. Sci.
-Journal of the Houston District Dental Society = J. Houston Dist. Dent. Soc.
-Journal of the Indian Academy of Dentistry = J. Indian Acad. Dent.
-Journal of the Indian Chemical Society=J. Indian Chem. Soc.;JICSAH;M
-Journal of the Indian Dental Association = J. Indian Dent. Assoc.
-Journal of the Indian Medical Association = J. Indian Med. Assoc.
-Journal of the Indian Medical Profession = J. Indian Med. Prof.
-Journal of the Indian Orthodontic Society = J. Indian Orthod. Soc.
-Journal of the Indian Society of Pedodontics and Preventive Dentistry = J. Indian Soc. Pedod. Prev. Dent.
-Journal of the Indiana Dental Association = J. Indiana Dent. Assoc.
-Journal of the Indiana State Dental Association = J. Indiana State Dent. Assoc.
-Journal of the Indiana State Medical Association = J. Indiana State Med. Assoc.
-Journal of the Indianapolis District Dental Society = J. Indianap. Dist. Dent. Soc.
-Journal of the Institute of Hospital Engineering = J. Inst. Hosp. Eng.
-Journal of the Institution of Chemists (India)=J. Inst. Chem. (India);JOICA7;BM
-Journal of the International Association of Dentistry for Children = J. Int. Assoc. Dent. Child.
-Journal of the International Association of Physicians in AIDS Care = J. Int. Assoc. Physicians AIDS Care
-Journal of the International College of Dentists, Japan Section = J. Int. Coll. Dent. (Jpn.)
-Journal of the International College of Surgeons = J. Int. Coll. Surg.
-Journal of the International Federation of Clinical Chemistry = J. Int. Fed. Clin. Chem.
-Journal of the International Neuropsychological Society = J. Int. Neuropsychol. Soc.
-Journal of the Iowa Medical Society = J. Iowa Med. Soc.
-Journal of the Iran Dental Association = J. Iran Dent. Assoc.
-Journal of the Irish Dental Association = J. Ir. Dent. Assoc.
-Journal of the Irish Medical Association = J. Ir. Med. Assoc.
-Journal of the Japan Petroleum Institute=J. Jpn. Pet. Inst.;JJPIAP;BM
-Journal of the Japanese Obstetrical and Gynecological Society = J. Jpn. Obstet. Gynecol. Soc.
-Journal of the Kansas Dental Association = J. Kans. Dent. Assoc.
-Journal of the Kansas Medical Society = J. Kans. Med. Soc.
-Journal of the Kansas State Dental Association = J. Kans. State Dent. Assoc.
-Journal of the Kentucky Dental Association = J. Ky. Dent. Assoc.
-Journal of the Kentucky Medical Association = J. Ky. Med. Assoc.
-Journal of the Korean Ceramic Society=J. Korean Ceram. Soc.;JKCSBW;M
-Journal of the Korean Chemical Society=J. Korean Chem. Soc.;JKCSEZ;BM
-Journal of the Korean Research Society for Dental Hypnosis = J. Korean Res. Soc. Dent. Hypn.
-Journal of the Louisiana Dental Association = J. La. Dent. Assoc.
-Journal of the Louisiana State Medical Society = J. La. State Med. Soc.
-Journal of the Macomb Dental Society = J. Macomb Dent. Soc.
-Journal of the Maine Medical Association = J. Maine Med. Assoc.
-Journal of the Marine Biology Association of the United Kingdom = J. mar. biol. Ass. U.K.
-Journal of the Marine Technology Society = J. Mar. Technol. Soc.
-Journal of the Maryland State Dental Association = J. Md. State Dent. Assoc.
-Journal of the Massachusetts Dental Society = J. Mass. Dent. Soc.
-Journal of the Medical Association of Georgia = J. Med. Assoc. Ga.
-Journal of the Medical Association of Thailand = J. Med. Assoc. Thai.
-Journal of the Medical Association of the State of Alabama = J. Med. Assoc. State Ala.
-Journal of the Medical Library Association = J. Med. Libr. Assoc.
-Journal of the Medical Society of New Jersey = J. Med. Soc. N. J.
-Journal of the Mercer Dental Society = J. Mercer Dent. Soc.
-Journal of the Meteorological Society of Japan = J. Meteor. Soc. Japan
-Journal of the Michigan State Dental Association = J. Mich. State Dent. Assoc.
-Journal of the Mississippi State Medical Association = J. Miss. State Med. Assoc.
-Journal of the Missouri Dental Association = J. Mo. Dent. Assoc.
-Journal of the Mount Sinai Hospital, New York = J. Mt. Sinai Hosp. N. Y.
-Journal of the National Analgesia Society = J. Natl. Analg. Soc.
-Journal of the National Association of Seventh-Day Adventist Dentists = J. Natl. Assoc. Seventh. Day Advent. Dent.
-Journal of the National Cancer Institute = J. Natl. Cancer Inst.
-Journal of the National Cancer Institute. Monographs. = J. Natl. Cancer Inst. Monogr.
-Journal of the National Comprehensive Cancer Network = J. Natl. Compr. Canc. Netw.
-Journal of the National Medical Association = J. Natl. Med. Assoc.
-Journal of the Nebraska Dental Association = J. Nebr. Dent. Assoc.
-Journal of the Neurological Sciences = J. Neurol. Sci.
-Journal of the New Jersey Dental Association = J. N. J. Dent. Assoc.
-Journal of the New Jersey Dental Hygienists Association = J. N. J. Dent. Hyg. Assoc.
-Journal of the New Jersey State Dental Society = J. N. J. State Dent. Soc.
-Journal of the New York State Nurses Association = J. N. Y. State Nurses Assoc.
-Journal of the New York State School Nurse Teachers Association = J. N. Y. State Sch. Nurse Teach. Assoc.
-Journal of the Nigeria Association of Dental Students = J. Niger. Assoc. Dent. Stud.
-Journal of the North Carolina Dental Society = J. N. C. Dent. Soc.
-Journal of the Oceanographical Society of Japan = J. Oceanogr. Soc. Japan
-Journal of the Ontario Dental Association = J. Ont. Dent. Assoc.
-Journal of the Operating Room Research Institute = J. Oper. Room Res. Inst.
-Journal of the Operational Research Society = J. Oper. Res. Soc.
-Journal of the Optical Society of America = J. Opt. Soc. Am.
-Journal of the Optical Society of America A, Optics and Image Science = J. Opt. Soc. Am. A
-Journal of the Optical Society of America A, Optics, Image Science, and Vision = J. Opt. Soc. Am. A Opt. Image Sci. Vis.
-Journal of the Optical Society of America B: Optical Physics=J. Opt. Soc. Am. B;JOBPDE;M
-Journal of the Oregon Dental Association = J. Oreg. Dent. Assoc.
-Journal of the Osaka University Dental School = J. Osaka Univ. Dent. Sch.
-Journal of the Oslo City Hospitals = J. Oslo City Hosp.
-Journal of the Oto-Laryngological Society of Australia = J. Otolaryngol. Soc. Aust.
-Journal of the Parenteral Drug Association = J. Parenter. Drug Assoc.
-Journal of the Peripheral Nervous System = J. Peripher. Nerv. Syst.
-Journal of the Philadelphia County Dental Society = J. Phila. Cty. Dent. Soc.
-Journal of the Philippine Dental Association = J. Philipp. Dent. Assoc.
-Journal of the Philippine Federation of Private Medical Practitioners = J. Philipp. Fed. Priv. Med. Pract.
-Journal of the Philippine Medical Association = J. Philipp. Med. Assoc.
-Journal of the Physical Society of Japan=J. Phys. Soc. Jpn.;JUPSAU;M
-Journal of the Renin-Angiotensin-Aldosterone System = J. Renin Angiotensin Aldosterone Syst.
-Journal of the Reticuloendothelial Society = J. Reticuloendothel. Soc.
-Journal of the Rhode Island State Dental Society = J. R. I. State Dent. Soc.
-Journal of the Rocky Mountain Analgesia Society = J. Rocky Mt. Analg. Soc.
-Journal of the Royal Army Medical Corps = J. R. Army Med. Corps
-Journal of the Royal College of General Practitioners = J. R. Coll. Gen. Pract.
-Journal of the Royal College of General Practitioners. Occasional Paper = J. R. Coll. Gen. Pract. Occas. Pap.
-Journal of the Royal College of Physicians of London = J. R. Coll. Physicians Lond.
-Journal of the Royal College of Surgeons of Edinburgh = J. R. Coll. Surg. Edinb.
-Journal of the Royal Microscopical Society = J. R. Microsc. Soc.
-Journal of the Royal Naval Medical Service = J. R. Nav. Med. Serv.
-Journal of the Royal Society of Health = J. R. Soc. Health
-Journal of the Royal Society of Medicine = J. R. Soc. Med.
-Journal of the Royal Society, Interface = J. R. Soc. Interface
-Journal of the San Antonio District Dental Society = J. San Antonio Dent. Soc.
-Journal of the Science of Food and Agriculture = J. Sci. Food Agric.
-Journal of the Seattle District Dental Society = J. Seattle Dist. Dent. Soc.
-Journal of the Serbian Chemical Society=J. Serb. Chem. Soc.;JSCSEN;M
-Journal of the Singapore Paediatric Society = J. Singapore Paediatr. Soc.
-Journal of the Society for Gynecologic Investigation = J. Soc. Gynecol. Investig.
-Journal of the Society for Health Systems = J. Soc. Health Syst.
-Journal of the Society for Integrative Oncology = J. Soc. Integr. Oncol.
-Journal of the Society of Inorganic Materials, Japan=J. Soc. Inorg. Mater., Jpn.;JSIJFR;BM
-Journal of the Society of Laparoendoscopic Surgeons = J. Soc. Laparoendosc. Surg.
-Journal of the Society of Occupational Medicine = J. Soc. Occup. Med.
-Journal of the Society of Pediatric Nurses = J. Soc. Pediatr. Nurs.
-Journal of the South African Speech and Hearing Association = J. S. Afr. Speech Hear. Assoc.
-Journal of the South African Veterinary Association = J. S. Afr. Vet. Assoc.
-Journal of the South African Veterinary Medical Association = J. S. Afr. Vet. Med. Assoc.
-Journal of the Southern California Dental Hygienists Association = J. South. Calif. State. Dent. Hyg. Assoc.
-Journal of the Southern Orthopaedic Association = J. South. Orthop. Assoc.
-Journal of the Tennessee Dental Association = J. Tenn. Dent. Assoc.
-Journal of the Tennessee Medical Association = J. Tenn. Med. Assoc.
-Journal of the Texas Dental Hygienists Association = J. Texas Dent. Hyg. Assoc.
-Journal of the West Australian Nurses = J. West Aust. Nurses
-Journal of the Western Society of Periodontology / Periodontal Abstracts = J. West. Soc. Periodontal Periodontal Abstr.
-Journal of the Wisconsin Dental Association = J. Wis. Dent. Assoc.
-Journal of the Wisconsin State Dental Society = J. Wis. State Dent. Soc.
-Journal of the World Aquaculture Society = J. World Aquacult. Soc.
-Journal, Academy of General Dentistry = J. Acad. Gen. Dent.
-Journal, Academy of Hospital Administration = J. Acad. Hosp. Adm.
-Journal, Alabama Dental Association = J. Ala. Dent. Assoc.
-Journal, American Academy of Gnathologic Orthopedics = J. Am. Acad. Gnathol. Orthop.
-Journal, American Association for Medical Transcription = J. Am. Assoc. Med. Transcr.
-Journal, American Health Care Association = J. Am. Health Care Assoc.
-Journal, American Intra-Ocular Implant Society = J. Am. Intraocul. Implant Soc.
-Journal, American Medical Record Association = J. Am. Med. Rec. Assoc.
-Journal, American Society for the Study of Orthodontics = J. Am. Soc. Study Orthod.
-Journal, Anglo-Continental Dental Society = J. Anglocont. Dent. Soc.
-Journal, Association for Healthcare Philanthropy = J. Assoc. Healthc. Philanthr.
-Journal, Association for Hospital Medical Education = J. Assoc. Hosp. Med. Educ.
-Journal, Association of Official Analytical Chemists = J. Assoc. Off. Anal. Chem.
-Journal, Australian College of Midwives = J. Aust. Coll. Midwives
-Journal, California Dental Association = J. Calif. Dent. Assoc.
-Journal, Canadian Dental Association = J. Can. Dent. Assoc.
-Journal, Connecticut State Dental Association = J. Conn. State Dent. Assoc.
-Journal, Contra Costa Dental Society = J. Contra Costa Dent. Soc.
-Journal, District of Columbia Dental Society = J. Dist. Columbia Dent. Soc.
-Journal, Forensic Science Society = J. Forensic Sci. Soc.
-Journal, Indiana Dental Association = J. Indiana Dent. Assoc.
-Journal, Institute of Sterile Services Management = J. Inst. Sterile Serv. Manage.
-Journal, Maine Dental Association = J. Maine Dent. Assoc.
-Journal, Mississippi Dental Association = J. Miss. Dent. Assoc.
-Journal, National Association for Hospital Development = J. Natl. Assoc. Hosp. Dev.
-Journal, National Association of Private Psychiatric Hospitals = J. Natl. Assoc. Priv. Psychiatr. Hosp.
-Journal, New Hampshire Dental Society = J. N. H. Dent. Soc.
-Journal, Oklahoma Dental Association = J. Okla. Dent. Assoc.
-Journal, Oklahoma State Dental Association = J. Okla. State Dent. Assoc.
-Journal, Oklahoma State Medical Association = J. Okla. State Med. Assoc.
-Journal, Seattle-King County Dental Society = J. Seattle. King Cty. Dent. Soc.
-Journal, South Carolina Medical Association = J. S. C. Med. Assoc.
-Journal, Southern California Dental Assistants Association = J. South. Calif. Dent. Assistants Assoc.
-Journal, Southern California Dental Association = J. South. Calif. Dent. Assoc.
-Journal, Southern California State Dental Association = J. South. Calif. State Dent. Assoc.
-Journal, Tennessee State Dental Association = J. Tenn. State Dent. Assoc.
-Journal, Water Pollution Control Federation = J. Water Pollut. Control Fed.
-Journal-Lancet = J. Lancet
-Journalen Sykepleien = J. Sykepleien
-Journalism Conference and Workshop = J. Conf. Workshop
-Journals of Gerontology. Series A, Biological Sciences and Medical Sciences = J. Gerontol. A. Biol. Sci. Med. Sci.
-Journals of Gerontology. Series B, Psychological Sciences and Social Sciences = J. Gerontol. B. Psychol. Sci. Soc. Sci.
-Journees Annuelles de Diabetologie de l'Hotel-Dieu = Journ. Annu. Diabetol. Hotel Dieu
-Jugoslavenska Ginekologija i Opstetricija = Jugosl. Ginekol. Opstet.
-Jugoslavenska Ginekologija i Perinatologija = Jugosl. Ginekol. Perinatol.
-Justus Liebigs Annalen der Chemie = Justus Liebigs Ann. Chem.
-K Reports = K Rep.
-KGK, Kautschuk Gummi Kunststoffe=KGK, Kautsch. Gummi Kunstst.;KKGKB5;10/YR
-KY Reports = KY Rep.
-Kagaku Kogaku=Kagaku Kogaku;KKGKA4;M
-Kagaku Kogaku Ronbunshu=Kagaku Kogaku Ronbunshu;KKRBAW;BM
-Kaibogaku Zasshi (Journal of Anatomy) = Kaibogaku Zasshi
-Kaku Igaku (Japanese Journal of Nuclear Medicine) = Kaku Igaku
-Kanagawa Shigaku (Journal of the Kanagawa Odontological Society) = Kanagawa Shigaku
-Kango = Kango
-Kango Gijutsu (Japanese Journal of Nursing Art) = Kango Gijutsu
-Kango Kenkyu (Japanese Journal of Nursing Research) = Kango Kenkyu
-Kango Kyoiku (Japanese Journal of Nurses' Education) = Kango Kyoiku
-Kango Kyoshitsu (Japanese Journal of the Nursing Class) = Kango Kyoshitsu
-Kango Tenbo (Japanese Journal of Nursing Science) = Kango Tenbo
-Kangogaku Zasshi (Japanese Journal of Nursing) = Kangogaku Zasshi
-Kanho Hakhoe Chi (Journal of Nurses' Academic Society) = Kanho Hakhoe Chi
-Kansas Medicine = Kans. Med.
-Kansas Nurse = Kans. Nurse
-Kansenshogaku Zasshi (Journal of the Japanese Association for Infectious Diseases) = Kansenshogaku Zasshi
-Kaohsiung Journal of Medical Sciences = Kaohsiung J. Med. Sci.
-Kardiologia Polska = Kardiol. Pol.
-Kardiologiia = Kardiologiia
-Kassenzahnarzt; Colloquium Med Dent = Kassenzahnarzt Colloq. Med. Dent.
-Kathmandu University Medical Journal = Kathmandu Univ. Med. J.
-Katilolehti (Tidskrift for Barnmorskor) = Katilolehti
-Keio Journal of Medicine = Keio J. Med.
-Keisei Geka (Japanese Journal of Plastic and Reconstructive Surgery) = Keisei Geka
-Kekkaku (Tuberculosis) = Kekkaku
-Kemija u Industriji=Kem. Ind.;KJUIAR;M
-Kennedy Institute of Ethics Journal = Kennedy Inst. Ethics J.
-Kentucky Dental Journal = Ky. Dent. J.
-Kentucky Hospitals Magazine = Ky. Hosp. Mag.
-Kentucky Nurse = Ky. Nurse
-Kentucky Nurses Association Newsletter = Ky. Nurses Assoc. Newsl.
-Kenya Nursing Journal = Kenya Nurs. J.
-Khimicheskaya Promyshlennost (St. Petersburg, Russian Federation)=Khim. Prom-st. (St. Petersburg, Russ. Fed.);KPRMAW;M
-Khimicheskaya Promyshlennost Segodnya=Khim. Prom-st. Segodnya;KPSHBN;M
-Khimiya Tverdogo Topliva (Moscow, Russian Federation)=Khim. Tverd. Topl. (Moscow, Russ. Fed.);KTVTBY;BM
-Khimiya i Tekhnologiya Vody=Khim. Tekhnol. Vody;KTVODL;BM
-Khimiya v Interesakh Ustoichivogo Razvitiya=Khim. Interesakh Ustoich. Razvit.;KIURFI;BM
-Khirurgiia = Khirurgiia (Sofiia)
-Kidney International = Kidney Int.
-Kidney International. Supplement = Kidney Int. Suppl.
-Kidney and Blood Pressure Research = Kidney Blood Press. Res.
-Kinderarztliche Praxis = Kinderarztl. Prax.
-Kinderkrankenschwester = Kinderkrankenschwester
-Kinetics and Catalysis=Kinet. Catal.;KICAA8;BM
-King Faisal Specialist Hospital Medical Journal = King Faisal Spec. Hosp. Med. J.
-Kisaengchunghak Chapchi (Korean Journal of Parasitology) = Kisaengchunghak Chapchi
-Kitasato Archives of Experimental Medicine = Kitasato Arch. Exp. Med.
-Klinicheskaia Laboratornaia Diagnostika = Klin. Lab. Diagn.
-Klinicheskaia Meditsina = Klin. Med. (Mosk.)
-Klinichna Khirurhiia = Klin. Khir.
-Klinika Oczna = Klin. Oczna
-Klinika i Lechenie Zlokachestvennykh Novoobrazovanii = Klin. Lech. Zlokach. Novoobraz.
-Klinische Anasthesiologie und Intensivtherapie = Klin. Anasthesiol. Intensivther.
-Klinische Medizin; Osterreichische Zeitschrift fur Wissenschaftliche und Praktische Medizin = Klin. Med. Osterr. Z. Wiss. Prakt. Med.
-Klinische Monatsblatter fur Augenheilkunde = Klin. Monatsbl. Augenheilkd.
-Klinische Padiatrie = Klin. Padiatr.
-Klinische Wochenschrift = Klin. Wochenschr.
-Klinisk Sygepleje = Klin. Sygepleje
-Knee Surgery, Sports Traumatology, Arthroscopy = Knee Surg. Sports Traumatol. Arthrosc.
-Kobe Daigaku Igakubu Kiyo (Medical Journal of Kobe University) = Kobe Daigaku Igakubu Kiyo
-Kobe Ika Daigaku Kiyo = Kobe Ika Daigaku Kiyo
-Kobe Journal of Medical Sciences = Kobe J. Med. Sci.
-Kobunshi Ronbunshu=Kobunshi Ronbunshu;KBRBA3;M
-Koks i Khimiya=Koks Khim.;KOKKAI;M
-Koku Eisei Gakkai Zasshi = Koku Eisei Gakkai Zasshi
-Kokubyo Gakkai Zasshi (Journal of the Stomatological Society, Japan) = Kokubyo Gakkai Zasshi
-Kokuritsu Iyakuhin Shokuhin Eisei Kenkyujo Hokoku (Bulletin of National Institute of Health Sciences) = Kokuritsu Iyakuhin Shokuhin Eisei Kenkyusho Hokoku
-Kokuritsu Iyakuhin Shokuhin Eisei Kenkyusho Hokoku (Bulletin of National Institute of Health Sciences) = Kokuritsu Iyakuhin Shokuhin Eisei Kenkyusho Hokoku
-Kokyu to Junkan (Respiration and Circulation) = Kokyu To Junkan
-Kongressband, Deutsche Gesellschaft fur Chirurgie = Kongressbd. Dtsch. Ges. Chir. Kongr.
-Korean Journal of Chemical Engineering=Korean J. Chem. Eng.;KJCHE6;BM
-Korean Journal of Gastroenterology = Korean J. Gastroenterol.
-Korean Journal of Hepatology = Korean J. Hepatol.
-Korean Journal of Internal Medicine = Korean J. Intern. Med.
-Korean Journal of Ophthalmology = Korean J. Ophthalmol.
-Korean Journal of Parasitology = Korean J. Parasitol.
-Korean Journal of Radiology = Korean J. Radiol.
-Kosmicheskaia Biologiia i Aviakosmicheskaia Meditsina = Kosm. Biol. Aviakosm. Med.
-Kosmicheskaia Biologiia i Meditsina = Kosm. Biol. Med.
-Krankenpflege = Krankenpflege (Frankf.)
-Krankenpflege (Soins Infirmiers) = Krankenpfl. Soins Infirm.
-Krankenpflege Journal = Krankenpfl. J.
-Krankenschwester = Krankenschwester
-Krebsarzt = Krebsarzt
-Krebsforschung und Krebsbekampfung = Krebsforsch. Krebsbekampf.
-Kritiek = Kritiek
-Kroc Foundation Series = Kroc Found. Ser.
-Kumamoto Igakkai Zasshi (Journal of the Kumamoto Medical Society) = Kumamoto Igakkai Zasshi
-Kumamoto Medical Journal = Kumamoto Med. J.
-Kurinikaru Sutadi (Clinical Study) = Kurinikaru Sutadi
-Kurume Medical Journal = Kurume Med. J.
-Kybernetik = Kybernetik
-Kyobu Geka (Japanese Journal of Thoracic Surgery) = Kyobu Geka
-Kyoto Daigaku Kokukagaku Kiyo (Bulletin of Stomatology, Kyoto University) = Kyoto Daigaku Kokukagaku Kiyo
-Kyushu Journal of Medical Science = Kyushu J. Med. Sci.
-LA Reports = LA Rep.
-LARC Medical = LARC Med.
-LCGC North America=LCGC North Am.;LNACBH;M
-LDA Journal = LDA J.
-LMT; Lab Management Today = LMT
-LWT--Food Science and Technology=LWT--Food Sci. Technol.;LSTWB3;8/YR
-Lab on a Chip = Lab. Chip
-Labor Law Journal = Labor Law J.
-Laboratorio = Laboratorio
-Laboratornoe Delo = Lab. Delo
-Laboratory Animal Care = Lab. Anim. Care
-Laboratory Animal Science = Lab. Anim. Sci.
-Laboratory Animals = Lab. Anim.
-Laboratory Investigation = Lab. Invest.
-Laboratory Practice = Lab. Pract.
-Laboratory and Research Methods in Biology and Medicine = Lab. Res. Methods Biol. Med.
-Lahey Clinic Foundation Bulletin = Lahey Clin. Found. Bull.
-Lakartidningen = Lakartidningen
-Lamp = Lamp
-Lampada = Lampada
-Lancet = Lancet
-Lancet Infectious Diseases = Lancet Infect. Dis.
-Lancet Neurology = Lancet Neurol.
-Lancet Oncology = Lancet Oncol.
-Landarzt = Landarzt
-Langenbeck's Archives of Surgery = Langenbecks Arch. Surg.
-Langenbecks Archiv fur Chirurgie = Langenbecks Arch. Chir.
-Langenbecks Archiv fur Chirurgie. Supplement II, Verhandlungen der Deutschen Gesellschaft fur Chirurgie = Langenbecks Arch. Chir. Suppl. II Verh. Dtsch. Ges. Chir.
-Langenbecks Archiv fur Chirurgie. Supplement, Kongressband = Langenbecks Arch. Chir. Suppl. Kongressbd.
-Langmuir=Langmuir;LANGD5;BW
-Language and Speech = Lang. Speech
-Laryngo- Rhino- Otologie = Laryngorhinootologie.
-Laryngologie, Rhinologie, Otologie = Laryngol. Rhinol. Otol. (Stuttg.)
-Laryngoscope = Laryngoscope
-Laser and Particle Beams=Laser Part. Beams;LPBEDA;Q
-Lasers in Surgery and Medicine = Lasers Surg. Med.
-Lasers in Surgery and Medicine. Supplement = Lasers Surg. Med. Suppl.
-Lattante = Lattante
-Latvijas Kimijas Zurnals=Latv. Kim. Z.;LKZUE8;Q
-Laundry News = Laund. News
-Laval Medical = Laval Med.
-Lavori dell'Istituto di Anatomia e Istologia Patologica, Universita degli Studi di Perugia = Lav. Ist. Anat. Istol. Patol. Univ. Studi Perugia
-Lavoro Umano = Lav. Um.
-Law and Contemporary Problems = Law Contemp. Probl.
-Law and Human Behavior = Law Hum. Behav.
-Law and the Human Genome Review = Law Hum. Genome Rev.
-Law, Medicine and Health Care = Law. Med. Health Care
-Leadership in Health Services = Leadersh. Health Serv.
-League Exchange = League Exch.
-League Lines = League Lines
-Learning Curve = Learn. Curve
-Learning and Behavior = Learn. Behav.
-Learning and Memory = Learn. Mem.
-Learning and Motivation = Learn. Motiv.
-Lebensversicherungs Medizin = Lebensversicher. Med.
-Leber, Magen, Darm = Leber. Magen. Darm
-Leeds Dental Journal = Leeds Dent. J.
-Legal Aspects of Medical Practice = Leg. Aspects Med. Pract.
-Legal Medical Quarterly = Leg. Med. Q.
-Legal Medicine = Leg. Med.
-Legal Medicine Annual = Leg. Med. Annu.
-Lekarska Veda v Zahranici = Lek. Veda Zahr.
-Lekarske Prace = Lek. Pr.
-Lens and Eye Toxicity Research = Lens Eye Toxic. Res.
-Leprosy Review = Lepr. Rev.
-Leprosy in India = Lepr. India
-Letters in Applied Microbiology = Lett. Appl. Microbiol.
-Letters in Drug Design & Discovery=Lett. Drug Des. Discovery;LDDDAW;8/YR
-Letters in Organic Chemistry=Lett. Org. Chem.;LOCEC7;8/YR
-Leukemia = Leukemia
-Leukemia Research = Leuk. Res.
-Leukemia and Lymphoma = Leuk. Lymphoma
-Library Journal = Libr. J.
-Library Resources and Technical Services = Libr. Resources Tech. Serv.
-Library Technology Reports = Libr. Technol. Rep.
-Life Sciences = Life Sci.
-Life Sciences. Part 1, Physiology and Pharmacology = Life Sci. I
-Life Sciences. Part 2, Biochemistry, General and Molecular Biology = Life Sci. II
-Life Support Systems = Life Support Syst.
-Life-Threatening Behavior = Life. Threat. Behav.
-Lifelong Learning; The Adult Years = Lifelong Learn. Adult Years
-Lifetime Data Analysis = Lifetime Data Anal.
-Ligament = Ligament
-Lijecnicki Vjesnik = Lijec. Vjesn.
-Likarska Sprava = Lik. Sprava
-Lille Chirurgical = Lille Chir.
-Lille Medical = Lille Med.
-Limnology and Oceanography = Limnol. Oceanogr.
-Lin Chuang Er Bi Yan Hou Ke Za Zhi (Journal of Clinical Otorhinolaryngology) = Lin Chuang Er Bi Yan Hou Ke Za Zhi
-Linchan Huaxue Yu Gongye=Linchan Huaxue Yu Gongye;LHYGD7;Q
-Linen Supply News = Linen Supply News
-Lipids = Lipids
-Lipids in Health and Disease = Lipids Health Dis.
-Lippincott Health Promotion Letter = Lippincott Health Promot. Lett.
-Lippincott's Primary Care Practice = Lippincotts Prim. Care Pract.
-Liquid Crystals=Liq. Cryst.;LICRE6;M
-Literature and Medicine = Lit. Med.
-Lithos=Lithos;LITHAN;28/YR
-Liver = Liver
-Liver International = Liver Int.
-Liver Transplantation = Liver Transpl.
-Liver Transplantation and Surgery = Liver Transpl. Surg.
-Lloydia = Lloydia
-Log = Log
-Logopedics, Phoniatrics, Vocology = Logoped. Phoniatr. Vocol.
-Loma Linda University Dentist Magazine = Loma Linda Univ. Dent. Mag.
-London Clinic Medical Journal = Lond. Clin. Med. J.
-Long Range Planning = Long Range Plann.
-Long Term Care = Long Term Care (Don Mills)
-Long Term Care Quarterly = Long Term Care Q.
-Long Term Care and Health Services Administration Quarterly = Long Term Care Health Serv. Adm. Q.
-Lotta Contro la Tubercolosi = Lotta Contro Tuberc.
-Luminescence = Luminescence
-Lung = Lung
-Lung Cancer = Lung Cancer
-Lupus = Lupus
-Lutte Contre le Cancer = Lutte Cancer
-Lymphatic Research and Biology = Lymphat. Res. Biol.
-Lymphokine Research = Lymphokine Res.
-Lymphokine and Cytokine Research = Lymphokine Cytokine Res.
-Lymphology = Lymphology
-Lyon Chirurgical = Lyon Chir.
-Lyon Medical = Lyon Med.
-MAGMA = MAGMA
-MASA Review = MASA Rev.
-MCN; American Journal of Maternal Child Nursing = MCN. Am. J. Matern. Child Nurs.
-MD = MD
-MD Computing = MD Comput.
-MH; Mental Hygiene = MH
-MLM Reports = MLM Rep.
-MLN Bulletin = MLN Bull.
-MLO; Medical Laboratory Observer = MLO. Med. Lab. Obs.
-MMW Fortschritte der Medizin = MMW Fortschr. Med.
-MMW; Munchener Medizinische Wochenschrift = MMW Munch. Med. Wochenschr.
-MMWR CDC Surveillance Summaries = MMWR CDC Surveill. Summ.
-MMWR Surveillance Summaries = MMWR Surveill. Summ.
-MMWR; Morbidity and Mortality Weekly Report = MMWR Morb. Mortal. Wkly. Rep.
-MNA Accent = MNA Accent
-MPS; Medical Products Salesman = MPS
-MSDA Journal = MSDA J.
-Maandschrift voor Kindergeneeskunde = Maandschr. Kindergeneeskd.
-Maanedsskrift for Praktisk Laegegerning = Manedsskr. Prakt. Laegegern.
-Macromolecular Bioscience = Macromol. Biosci.
-Macromolecular Chemistry and Physics=Macromol. Chem. Phys.;MCHPES;SM
-Macromolecular Materials and Engineering=Macromol. Mater. Eng.;MMENFA;M
-Macromolecular Rapid Communications=Macromol. Rapid Commun.;MRCOE3;24/YR
-Macromolecular Research=Macromol. Res.;MRAECT;BM
-Macromolecular Symposia=Macromol. Symp.;MSYMEC;IRR
-Macromolecular Theory and Simulations=Macromol. Theory Simul.;MTHSEK;9/YR
-Macromolecules = Macromolecules
-Madjalah Persatuan Dokter Gigi Indonesia (Journal of the Indonesian Dental Association) = Madj. Persat. Dokt. Gigi Indones.
-Magnesium = Magnesium
-Magnesium Research = Magnes. Res.
-Magnesium and Trace Elements = Magnes. Trace Elem.
-Magnetic Resonance Annual = Magn. Reson. Annu.
-Magnetic Resonance Imaging = Magn. Reson. Imaging
-Magnetic Resonance Imaging Clinics of North America = Magn. Reson. Imaging Clin. N. Am.
-Magnetic Resonance Quarterly = Magn. Reson. Q.
-Magnetic Resonance in Chemistry=Magn. Reson. Chem.;MRCHEG;M
-Magnetic Resonance in Medical Sciences = Magn. Reson. Med. Sci.
-Magnetic Resonance in Medicine = Magn. Reson. Med.
-Magyar Kemiai Folyoirat, Kemiai Kozlemenyek=Magy. Kem. Foly., Kem. Kozl.;MKFKAL;Q
-Magyar Traumatologia, Orthopaedia es Helyreallito Sebeszet = Magy. Traumatol. Orthop. Helyreallito Seb.
-Magyar Traumatologia, Ortopedia, Kezsebeszet, Plasztikai Sebeszet = Magy. Traumatol. Ortop. Kezseb. Plasztikai Seb.
-Main Group Metal Chemistry=Main Group Met. Chem.;MGMCE8;BM
-Maine Nurse = Maine Nurse
-Mainlines = Mainlines
-Major Problems in Clinical Pediatrics = Major Probl. Clin. Pediatr.
-Major Problems in Clinical Surgery = Major Probl. Clin. Surg.
-Major Problems in Internal Medicine = Major Probl. Intern. Med.
-Major Problems in Obstetrics and Gynecology = Major Probl. Obstet. Gynecol.
-Major Problems in Pathology = Major Probl. Pathol.
-Malacologia = Malacologia
-Malaria Journal = Malar. J.
-Malattie Cardiovascolari = Mal. Cardiovasc.
-Malaysian Dental Journal = Malays. Dent. J.
-Malaysian Journal of Pathology = Malays. J. Pathol.
-Male Nurses Journal = Male Nurses J.
-Mammalia = Mammalia
-Mammalian Genome = Mamm. Genome
-Man and Medicine = Man Med.
-Managed Care = Manag. Care
-Managed Care Interface = Manag. Care Interface
-Managed Care Quarterly = Manag. Care Q.
-Managed Care Strategies = Manag. Care Strateg.
-Managed Medicare and Medicaid News = Manag. Medicare Medicaid News
-Management Focus = Manage. Focus
-Management Review = Manage. Rev.
-Management World = Manage. World
-Management and Compliance Series = Manag. Compliance Ser.
-Manchester Medical Gazette = Manch. Med. Gaz.
-Manitoba Medical Review = Manit. Med. Rev.
-Marine & Freshwater Research = Mar. Freshwater Res.
-Marine Biology = Mar. Biol.
-Marine Biotechnology=Mar. Biotechnol.;MABIFW;BM
-Marine Chemistry=Mar. Chem.;MRCHBD;20/YR
-Marine Ecology Progress Series = Mar. Ecol. Prog. Ser.
-Marine Environmental Research=Mar. Environ. Res.;MERSDW;10/YR
-Marine Pollution Bulletin=Mar. Pollut. Bull.;MPNBAZ;IRR
-Mariners Weather Log = Mar. Wea. Log
-Maritime Occupational Health = Marit. Occup. Health
-Marketing Health Services = Mark. Health Serv.
-Maroc Medical = Maroc Med.
-Marseille Chirurgical = Mars. Chir.
-Marseille Medical = Mars. Med.
-Maryland Medical Journal = Md. Med. J.
-Maryland Medicine = Md. Med.
-Maryland Nurse = Md. Nurse
-Maryland Nursing News = Md. Nurs. News
-Maryland State Medical Journal = Md. State Med. J.
-Mass Spectrometry Reviews = Mass Spectrom. Rev.
-Massachusetts Nurse = Mass. Nurse
-Masui (Japanese Journal of Anesthesiology) = Masui.
-Materia Medica Polona = Mater. Med. Pol.
-Materials Characterization=Mater. Charact.;MACHEX;10/YR
-Materials Chemistry and Physics=Mater. Chem. Phys.;MCHPDR;M
-Materials Forum=Mater. Forum;MFOREM;A
-Materials Letters=Mater. Lett.;MLETDJ;SM
-Materials Management in Health Care = Mater. Manag. Health Care
-Materials Research Bulletin=Mater. Res. Bull.;MRBUAC;15/YR
-Materials Research Innovations=Mater. Res. Innovations;MRINFV;6/YR
-Materials Research Society Symposium Proceedings=Mater. Res. Soc. Symp. Proc.;MRSPDH;IRR
-Materials Science & Engineering, A: Structural Materials: Properties, Microstructure and Processing=Mater. Sci. Eng., A;MSAPE3;46/YR
-Materials Science & Engineering, B: Solid-State Materials for Advanced Technology=Mater. Sci. Eng., B;MSBTEK;30/YR
-Materials Science & Engineering, C: Biomimetic and Supramolecular Systems=Mater. Sci. Eng., C;MSCEEE;8/YR
-Materials Science and Technology=Mater. Sci. Technol.;MSCTEP;M
-Materials Science in Semiconductor Processing=Mater. Sci. Semicond. Process.;MSSPFQ;BM
-Materials Transactions=Mater. Trans.;MTARCE;M
-Materials and Corrosion=Mater. Corros.;MTCREQ;M
-Materials and Manufacturing Processes=Mater. Manuf. Processes;MMAPET;BM
-Maternal and Child Health Journal = Matern. Child Health J.
-Maternal and Child Nutrition = Matern. Child. Nutr.
-Maternal-Child Nursing Journal = Matern. Child Nurs. J.
-Maternidade e Infancia = Matern. Infanc. (Sao Paulo)
-Maternite = Maternite
-Mathematical Biosciences = Math. Biosci.
-Mathematical Medicine and Biology = Math. Med. Biol.
-Matrix = Matrix
-Matrix Biology = Matrix Biol.
-Matrix. Supplement = Matrix. Suppl.
-Maturitas = Maturitas
-Mayan = Mayan
-Mayo Clinic Health Letter = Mayo Clin. Health Lett.
-Mayo Clinic Proceedings = Mayo Clin. Proc.
-McGill Dental Review = McGill Dent. Rev.
-McGraw-Hill's Medicine and Health = McGraw Hills Med. Health
-McGraw-Hill's Washington Report on Medicine and Health = McGraw Hills Wash. Rep. Med. Health
-Mead Johnson Symposium on Perinatal and Developmental Medicine = Mead Johnson Symp. Perinat. Dev. Med.
-Measurement Science and Technology=Meas. Sci. Technol.;MSTCEP;M
-Mechanisms of Ageing and Development = Mech. Ageing Dev.
-Mechanisms of Development = Mech. Dev.
-MedGenMed = MedGenMed
-Medecine Infantile = Med. Infant. (Paris)
-Medecine Interne = Med. Interne
-Medecine Legale et Dommage Corporel = Med. Leg. Dommage Corpor.
-Medecine Tropicale = Med. Trop. (Mars.)
-Medecine et Audio Vision = Med. Audio Vis.
-Medecine et Chirurgie Digestives = Med. Chir. Dig.
-Medecine et Hygiene = Med. Hyg. (Geneve)
-Mediators of Inflammation = Mediators Inflamm.
-Medical Affairs = Med. Aff.
-Medical Annals of the District of Columbia = Med. Ann. Dist. Columbia
-Medical Anthropology = Med. Anthropol.
-Medical Anthropology Quarterly = Med. Anthropol. Q.
-Medical Art = Med. Art
-Medical Arts and Sciences = Med. Arts Sci.
-Medical Aspects of Human Sexuality = Med. Aspects Hum. Sex.
-Medical Biology = Med. Biol.
-Medical Bulletin, Veterans Administration = Med. Bull. Vet. Adm.
-Medical Care = Med. Care
-Medical Care Research and Review = Med. Care Res. Rev.
-Medical Care Review = Med. Care Rev.
-Medical Claims Management = Med. Claims Manag.
-Medical Clinics of North America = Med. Clin. North Am.
-Medical Decision Making = Med. Decis. Making
-Medical Design and Material = Med. Des. Mater.
-Medical Device Technology = Med. Device Technol.
-Medical Dosimetry = Med. Dosim.
-Medical Economics = Med. Econ.
-Medical Education = Med. Educ.
-Medical Electronics = Med. Electron.
-Medical Electronics and Biological Engineering = Med. Electron. Biol. Eng.
-Medical Engineering and Physics = Med. Eng. Phys.
-Medical Group Management = Med. Group Manage.
-Medical Group Management Journal = Med. Group Manage. J.
-Medical Gynaecology, Andrology, and Sociology = Med. Gynaecol. Androl. Sociol.
-Medical History = Med. Hist.
-Medical History. Supplement = Med. Hist. Suppl.
-Medical Hypotheses = Med. Hypotheses
-Medical Image Analysis = Med. Image Anal.
-Medical Informatics = Med. Inform. (Lond.)
-Medical Informatics and the Internet in Medicine = Med. Inform. Internet Med.
-Medical Instrumentation = Med. Instrum.
-Medical Interface = Med. Interface
-Medical Journal of Australia = Med. J. Aust.
-Medical Journal of Malaya = Med. J. Malaya
-Medical Journal of Malaysia = Med. J. Malaysia
-Medical Journal of Osaka University = Med. J. Osaka Univ.
-Medical Journal of Zambia = Med. J. Zambia
-Medical Laboratory Sciences = Med. Lab. Sci.
-Medical Laboratory Technology = Med. Lab. Technol.
-Medical Letter on Drugs and Therapeutics = Med. Lett. Drugs Ther.
-Medical Malpractice Cost Containment Journal = Med. Malpract. Cost Containment J.
-Medical Management Network = Med. Manag. Netw.
-Medical Marketing and Media = Med. Mark. Media
-Medical Microbiology and Immunology = Med. Microbiol. Immunol. (Berl.)
-Medical Molecular Morphology = Med. Mol. Morphol.
-Medical Mycology = Med. Mycol.
-Medical Network Strategy Report = Med. Netw. Strategy Rep.
-Medical Newsletter = Med. Newsl. (London)
-Medical Oncology = Med. Oncol.
-Medical Oncology and Tumor Pharmacotherapy = Med. Oncol. Tumor Pharmacother.
-Medical Physics = Med. Phys.
-Medical Products Sales = Med. Prod. Sales
-Medical Progress Through Technology = Med. Prog. Technol.
-Medical Radiography and Photography = Med. Radiogr. Photogr.
-Medical Record News = Med. Rec. News
-Medical Record and Health Care Information Journal = Med. Rec. Health Care Inf. J.
-Medical Reference Services Quarterly = Med. Ref. Serv. Q.
-Medical Research Council Special Report Series = Med. Res. Counc. Spec. Rep. Ser. (Lond.)
-Medical Research Engineering = Med. Res. Eng.
-Medical Section Proceedings = Med. Sect. Proc.
-Medical Service = Med. Serv.
-Medical Services Journal, Canada = Med. Serv. J. Can.
-Medical Staff Counselor = Med. Staff Couns.
-Medical Teacher = Med. Teach.
-Medical Times = Med. Times
-Medical Toxicology = Med. Toxicol.
-Medical Toxicology and Adverse Drug Experience = Med. Toxicol. Adverse Drug Exp.
-Medical Trial Technique Quarterly = Med. Trial Tech. Q.
-Medical Waste Analyst = Med. Waste Anal.
-Medical World News = Med. World News
-Medical and Biological Engineering = Med. Biol. Eng.
-Medical and Biological Engineering and Computing = Med. Biol. Eng. Comput.
-Medical and Biological Illustration = Med. Biol. Illus.
-Medical and Pediatric Oncology = Med. Pediatr. Oncol.
-Medical and Pediatric Oncology. Supplement = Med. Pediatr. Oncol. Suppl.
-Medical and Veterinary Entomology = Med. Vet. Entomol.
-Medical/Dental Journal = Med. Dent. J.
-Medicamundi = Medicamundi
-Medicina = Medicina (Mex.)
-Medicina Clinica = Med. Clin. (Barc.)
-Medicina Clinica e Sperimentale = Med. Clin. Sper.
-Medicina Contemporanea = Med. Contemp.
-Medicina Cutanea Ibero-Latino-Americana = Med. Cutan. Ibero. Lat. Am.
-Medicina Espanola = Med. Esp.
-Medicina Experimentalis (International Journal of Experimental Medicine) = Med. Exp. Int. J. Exp. Med.
-Medicina Fisica y Rehabilitacion = Med. Fis. Rehabil.
-Medicina Interna = Med. Interna
-Medicina Oral = Med. Oral
-Medicina Panamericana = Med. Panam.
-Medicina Thoracalis = Med. Thorac.
-Medicina Tropical = Med. Trop. (Madr.)
-Medicina del Lavoro = Med. Lav.
-Medicina dello Sport = Med. Sport (Roma)
-Medicina et Pharmacologia Experimentalis (International Journal of Experimental Medicine) = Med. Pharmacol. Exp. Int. J. Exp. Med.
-Medicina nei Secoli = Med. Secoli
-Medicina y Cirugia de Guerra = Med. Cir. Guerra
-Medicinal Chemistry = Med. Chem.
-Medicinal Chemistry Research=Med. Chem. Res.;MCREEB;9/YR
-Medicinal Research Reviews = Med. Res. Rev.
-Medicine = Medicine (Baltimore)
-Medicine and Health = Med. Health
-Medicine and Health, Rhode Island = Med. Health R. I.
-Medicine and Law = Med. Law
-Medicine and Science in Sports = Med. Sci. Sports
-Medicine and Science in Sports and Exercise = Med. Sci. Sports Exerc.
-Medicine and War = Med. War
-Medicine, Conflict and Survival = Med. Confl. Surviv.
-Medicine, Health Care, and Philosophy = Med. Health Care Philos.
-Medicine, Science and the Law = Med. Sci. Law
-Medicinski Arhiv = Med. Arh.
-Medicinski Glasnik = Med. Glas.
-Medicinski Pregled = Med. Pregl.
-Medico-Legal Bulletin = Med. Leg. Bull.
-Medico-Legal Journal = Med. Leg. J.
-Medicolegal News = Medicoleg. News
-Medinfo = Medinfo
-Meditsina Truda i Promyshlennaia Ekologiia = Med. Tr. Prom. Ekol.
-Meditsinskaia Parazitologiia i Parazitarnye Bolezni = Med. Parazitol. (Mosk.)
-Meditsinskaia Promyshlennost SSSR = Med. Prom. SSSR
-Meditsinskaia Radiologiia = Med. Radiol. (Mosk.)
-Meditsinskaia Sestra = Med. Sestra
-Meditsinskaia Tekhnika = Med. Tekh.
-Medizin und Gesellschaft = Med. Ges.
-Medizinhistorisches Journal = Medizinhist. J.
-Medizinische Klinik = Med. Klin.
-Medizinische Klinik. Supplement = Med. Klin. Suppl.
-Medizinische Laboratorium = Med. Lab. (Stuttg.)
-Medizinische Monatsschrift = Med. Monatsschr.
-Medizinische Monatsschrift fur Pharmazeuten = Med. Monatsschr. Pharm.
-Medizinische Welt = Med. Welt
-Medscape Women's Health = Medscape Womens Health
-Medsurg Nursing = Medsurg Nurs.
-Medycyna Doswiadczalna = Med. Dosw.
-Medycyna Doswiadczalna i Mikrobiologia = Med. Dosw. Mikrobiol.
-Medycyna Pracy = Med. Pr.
-Medycyna Weterynaryjna = Med. Weter.
-Medycyna Wieku Rozwojowego = Med. Wieku Rozwoj.
-Meharri-Dent = Meharri. Dent
-Meikai Daigaku Shigaku Zasshi = Meikai Daigaku Shigaku Zasshi
-Melanoma Research = Melanoma Res.
-Membrane Biochemistry = Membr. Biochem.
-Membrane and Cell Biology = Membr. Cell Biol.
-Membranes = Membranes
-Memoires de l Academie Royale de Medecine de Belgique = Mem. Acad. R. Med. Belg.
-Memoires de l'Academie de Chirurgie = Mem. Acad. Chir. (Paris)
-Memorandum, Medical Research Council = Memo. Med. Res. Counc.
-Memorias do Instituto Butantan = Mem. Inst. Butantan
-Memorias do Instituto Oswaldo Cruz = Mem. Inst. Oswaldo Cruz
-Memory = Memory
-Memory and Cognition = Mem. Cognit.
-Mendeleev Communications=Mendeleev Commun.;MENCEX;BM
-Menopause = Menopause
-Mental Health Care = Ment. Health Care
-Mental Health Nursing = Ment. Health Nurs.
-Mental Health Services Research = Ment. Health Serv. Res.
-Mental Health Statistical Note = Ment. Health Stat. Note
-Mental Health and Society = Ment. Health Soc.
-Mental Hospitals = Ment. Hosp.
-Mental Hygiene = Ment. Hyg.
-Mental Retardation = Ment. Retard.
-Mental Retardation Abstracts = Ment. Retard. Abstr.
-Mentalis = Mentalis
-Mercer Dental Society Newsletter = Mercer Dent. Soc. Newsl.
-Metabolic Bone Disease and Related Research = Metab. Bone Dis. Relat. Res.
-Metabolic Brain Disease = Metab. Brain Dis.
-Metabolic Engineering = Metab. Eng.
-Metabolic Ophthalmology = Metab. Ophthalmol.
-Metabolic and Pediatric Ophthalmology = Metab. Pediatr. Ophthalmol.
-Metabolic, Pediatric and Systemic Ophthalmology = Metab. Pediatr. Syst. Ophthalmol.
-Metabolism, Clinical and Experimental=Metab., Clin. Exp.;METAAJ;M
-Metabolism: Clinical and Experimental = Metabolism.
-Metal Ions in Biological Systems = Met. Ions Biol. Syst.
-Metal Science and Heat Treatment=Met. Sci. Heat Treat.;MHTRAN;BM
-Metallofizika i Noveishie Tekhnologii=Metallofiz. Noveishie Tekhnol.;MNTEEU;M
-Metallurgical and Materials Transactions A: Physical Metallurgy and Materials Science=Metall. Mater. Trans. A;MMTAEB;M
-Metallurgical and Materials Transactions B: Process Metallurgy and Materials Processing Science=Metall. Mater. Trans. B;MTBSEO;BM
-Metally=Metally;MEALET;BM
-Meteoritics & Planetary Science=Meteorit. Planet. Sci.;MPSCFY;M
-Meteorological Magazine = Meteor. Mag.
-Meteorological Monographs = Meteor. Monogr.
-Meteorologische Rundschau = Meteor. Rundsch.
-Meteorologische Zeitschrift = Meteor. Z.
-Meteorologiya i Gidrologiya = Meteor. Gidrol.
-Meteorology and Atmospheric Physics = Meteor. Atmos. Phys.
-Methods = Methods
-Methods (San Diego, CA, United States)=Methods (San Diego, CA, U. S.);MTHDE9;M
-Methods and Achievements in Experimental Pathology = Methods Achiev. Exp. Pathol.
-Methods and Findings in Experimental and Clinical Pharmacology = Methods Find. Exp. Clin. Pharmacol.
-Methods in Cell Biology = Methods Cell Biol.
-Methods in Enzymology = Methods Enzymol.
-Methods in Medical Research = Methods Med. Res.
-Methods in Molecular Biology = Methods Mol. Biol.
-Methods in Molecular Medicine = Methods Mol. Med.
-Methods of Biochemical Analysis = Methods Biochem. Anal.
-Methods of Information in Medicine = Methods Inf. Med.
-Methods of Information in Medicine. Supplement = Methods Inf. Med. Suppl.
-Michigan Health and Hospitals = Mich. Health Hosp.
-Michigan Hospitals = Mich. Hosp.
-Michigan Law Review = Mich. Law Rev.
-Michigan Medicine = Mich. Med.
-Michigan Nurse = Mich. Nurse
-Microbes and Infection = Microbes Infect.
-Microbial Ecology = Microb. Ecol.
-Microbial Pathogenesis = Microb. Pathog.
-Microbial Releases = Microb. Releases
-Microbial and Comparative Genomics = Microb. Comp. Genomics
-Microbiologia = Microbiologia
-Microbiologia Espanola = Microbiol. Esp.
-Microbiologia, Parazitologia, Epidemiologia = Microbiol. Parazitol. Epidemiol. (Bucur.)
-Microbiologica = Microbiologica
-Microbiological Research = Microbiol. Res.
-Microbiological Reviews = Microbiol. Rev.
-Microbiological Sciences = Microbiol. Sci.
-Microbiology = Microbiology
-Microbiology (New York, NY, United States)=Microbiology (N. Y., NY, U. S.);MIBLAO;BM
-Microbiology (Reading, United Kingdom)=Microbiology (Reading, U. K.);MROBEO;M
-Microbiology and Immunology = Microbiol. Immunol.
-Microbiology and Molecular Biology Reviews = Microbiol. Mol. Biol. Rev.
-Microbios = Microbios
-Microchemical Journal = Microchem. J.
-Microchimica Acta=Microchim. Acta;MIACAQ;12/YR
-Microcirculation = Microcirculation
-Microcirculation, Endothelium, and Lymphatics = Microcirc. Endothelium. Lymphatics
-Microelectronic Engineering=Microelectron. Eng.;MIENEF;8/YR
-Micron = Micron
-Microporous and Mesoporous Materials=Microporous Mesoporous Mater.;MIMMFJ;30/YR
-Microscopia Electronica y Biologia Celular = Microsc. Electron. Biol. Celular
-Microscopica Acta = Microsc. Acta
-Microscopica Acta. Supplement = Microsc. Acta. Suppl.
-Microscopy Research and Technique = Microsc. Res. Tech.
-Microscopy and Microanalysis=Microsc. Microanal.;MIMIF7;BM
-Microsurgery = Microsurgery
-Microvascular Research = Microvasc. Res.
-Middle East Dentistry and Oral Health = Middle East Dent. Oral Health
-Middle East Health = Middle East Health
-Middle East Journal of Anaesthesiology = Middle East J. Anaesthesiol.
-Middle East Journal of Anesthesiology = Middle East J. Anesthesiol.
-Midwest Alliance in Nursing Journal = Midwest Alliance Nurs. J.
-Midwestern Dentist = Midwest. Dent.
-Midwife and Health Visitor = Midwife Health Visit.
-Midwife, Health Visitor and Community Nurse = Midwife. Health Visit. Community Nurse
-Midwifery = Midwifery
-Midwifery Today and Childbirth Education = Midwifery Today Childbirth Educ.
-Midwifery Today with International Midwife = Midwifery Today Int. Midwife
-Midwives = Midwives
-Midwives Chronicle = Midwives Chron.
-Mie Medical Journal = Mie Med. J.
-Mikrobiologicheskii Zhurnal = Mikrobiol. Zh.
-Mikrobiologiia = Mikrobiologiia
-Mikrobiolohichnyi Zhurnal = Mikrobiol. Zh.
-Mikrobiyoloji Bulteni = Mikrobiyol. Bul.
-Mikrochimica Acta = Mikrochim. Acta
-Mikrochimica et Ichnoanalytica Acta = Mikrochim. Ichnoanal. Acta
-Mikroskopie = Mikroskopie
-Milbank Memorial Fund Quarterly = Milbank Mem. Fund Q.
-Milbank Memorial Fund Quarterly. Health and Society = Milbank Mem. Fund Q. Health Soc.
-Milbank Quarterly = Milbank Q.
-Milchwissenschaft=Milchwissenschaft;MILCAD;4/YR
-Militaerlaegen = Militaerlaegen
-Military Medicine = Mil. Med.
-Mineral and Electrolyte Metabolism = Miner. Electrolyte Metab.
-Mineralium Deposita=Miner. Deposita;MIDEBE;8/YR
-Mineralogical Magazine=Mineral. Mag.;MNLMBB;BM
-Mineralogy and Petrology=Mineral. Petrol.;MIPEE9;12/YR
-Minerals & Metallurgical Processing=Miner. Metall. Process.;MMPRE8;Q
-Minerals Engineering=Miner. Eng.;MENGEB;15/YR
-Minerva Anestesiologica = Minerva Anestesiol.
-Minerva Cardioangiologica = Minerva Cardioangiol.
-Minerva Chirurgica = Minerva Chir.
-Minerva Dermatologica = Minerva Dermatol.
-Minerva Dietologica e Gastroenterologica = Minerva Dietol. Gastroenterol.
-Minerva Ecologica, Idroclimatologica e Fisiconucleare = Minerva Ecol. Idroclimatol. Fisiconucl.
-Minerva Ecologica, Idroclimatologica, Fisicosanitaria = Minerva Ecol. Idroclimatol. Fis. Sanit.
-Minerva Endocrinologica = Minerva Endocrinol.
-Minerva Fisiconucleare = Minerva Fisiconucl.
-Minerva Gastroenterologica e Dietologica = Minerva Gastroenterol. Dietol.
-Minerva Ginecologica = Minerva Ginecol.
-Minerva Medica = Minerva Med.
-Minerva Medicolegale = Minerva Medicoleg.
-Minerva Nefrologica = Minerva Nefrol.
-Minerva Neurochirurgica = Minerva Neurochir.
-Minerva Nipiologica = Minerva Nipiol.
-Minerva Nucleare = Minerva Nucl.
-Minerva Oftalmologica = Minerva Oftalmol.
-Minerva Ortognatodontica = Minerva Ortognatod.
-Minerva Ortopedica = Minerva Ortop.
-Minerva Otorinolaringologica = Minerva Otorinolaringol.
-Minerva Pediatrica = Minerva Pediatr.
-Minerva Psichiatrica = Minerva Psichiatr.
-Minerva Radiologica = Minerva Radiol.
-Minerva Stomatologica = Minerva Stomatol.
-Minerva Urologica = Minerva Urol.
-Minerva Urologica e Nefrologica = Minerva Urol. Nefrol.
-Mini Reviews in Medicinal Chemistry = Mini Rev. Med. Chem.
-Mini-Reviews in Medicinal Chemistry=Mini-Rev. Med. Chem.;MMCIAE;12/YR
-Mini-Reviews in Organic Chemistry=Mini-Rev. Org. Chem.;MOCIBT;4/YR
-Minimally Invasive Neurosurgery = Minim. Invasive Neurosurg.
-Minimally Invasive Surgical Nursing = Minim. Invasive Surg. Nurs.
-Minneapolis District Dental Journal = Minneap. Dist. Dent. J.
-Minnesota Medicine = Minn. Med.
-Minnesota Nursing Accent = Minn. Nurs. Accent
-Minority Nurse Newsletter = Minor. Nurse Newsl.
-Mississippi Dental Association Journal = Miss. Dent. Assoc. J.
-Mississippi RN = Miss. RN
-Missouri Dental Journal = Mo. Dent. J.
-Missouri Medicine = Mo. Med.
-Missouri Nurse = Mo. Nurse
-Mitochondrion = Mitochondrion
-Mitteilungen der Deutschen Pharmazeutischen Gesellschaft und der Pharmazeutischen Gesellschaft der DDR = Mitt. Dtsch. Pharm. Ges. Pharm. Ges. DDR
-Mobius = Mobius
-Modern Concepts of Cardiovascular Disease = Mod. Concepts Cardiovasc. Dis.
-Modern Dental Practice = Mod. Dent. Pract.
-Modern Healthcare = Mod. Healthc.
-Modern Healthcare (Short Term Care) = Mod. Healthc. (Short Term Care)
-Modern Hospital = Mod. Hosp.
-Modern Medicine of Asia = Mod. Med. Asia
-Modern Midwife = Mod. Midwife
-Modern Nursing Home = Mod. Nurs. Home
-Modern Pathology = Mod. Pathol.
-Modern Physics Letters B=Mod. Phys. Lett. B;MPLBET;30/YR
-Modern Problems in Ophthalmology = Mod. Probl. Ophthalmol.
-Modern Problems in Paediatrics = Mod. Probl. Paediatr.
-Modern Problems of Pharmacopsychiatry = Mod. Probl. Pharmacopsychiatry
-Modern Treatment = Mod. Treat.
-Modern Trends in Immunology = Mod. Trends Immunol.
-Modern Trends in Medical Virology = Mod. Trends Med. Virol.
-Modern Trends in Neurology = Mod. Trends Neurol.
-Modern Trends in Orthopaedics = Mod. Trends Orthop.
-Modern Trends in Plastic Surgery = Mod. Trends Plast. Surg.
-Modern Trends in Radiotherapy = Mod. Trends Radiother.
-Modern Trends in Rheumatology = Mod. Trends Rheumatol.
-Modern Trends in Surgery = Mod. Trends Surg.
-Modern Veterinary Practice = Mod. Vet. Pract.
-Molecular Aspects of Medicine = Mol. Aspects Med.
-Molecular BioSystems=Mol. BioSyst.;MBOIBW;6/YR
-Molecular Biology = Mol. Biol.
-Molecular Biology (New York, NY, United States, English Edition)=Mol. Biol. (N. Y., NY, U. S., Engl. Ed.);MOLBBJ;BM
-Molecular Biology Reports = Mol. Biol. Rep.
-Molecular Biology and Evolution = Mol. Biol. Evol.
-Molecular Biology and Medicine = Mol. Biol. Med.
-Molecular Biology of the Cell = Mol. Biol. Cell
-Molecular Biology, Biochemistry and Biophysics = Mol. Biol. Biochem. Biophys.
-Molecular Biosystems = Mol. Biosyst.
-Molecular Biotechnology = Mol. Biotechnol.
-Molecular Biotherapy = Mol. Biother.
-Molecular Brain Research=Mol. Brain Res.;MBREE4;22/YR
-Molecular Cancer = Mol. Cancer
-Molecular Cancer Research = Mol. Cancer Res.
-Molecular Cancer Therapeutics = Mol. Cancer Ther.
-Molecular Carcinogenesis = Mol. Carcinog.
-Molecular Cell = Mol. Cell
-Molecular Cell Biology Research Communications = Mol. Cell Biol. Res. Commun.
-Molecular Crystals and Liquid Crystals=Mol. Cryst. Liq. Cryst.;MCLCD8;18/YR
-Molecular Diagnosis = Mol. Diagn.
-Molecular Diagnosis and Therapy = Mol. Diagn. Ther.
-Molecular Diversity = Mol. Divers.
-Molecular Ecology = Mol. Ecol.
-Molecular Endocrinology = Mol. Endocrinol.
-Molecular Genetic Medicine = Mol. Genet. Med.
-Molecular Genetics and Genomics = Mol. Genet. Genomics
-Molecular Genetics and Metabolism = Mol. Genet. Metab.
-Molecular Human Reproduction = Mol. Hum. Reprod.
-Molecular Imaging = Mol. Imaging
-Molecular Imaging and Biology = Mol. Imaging Biol.
-Molecular Immunology = Mol. Immunol.
-Molecular Interventions = Mol. Interv.
-Molecular Marine Biology and Biotechnology = Mol. Mar. Biol. Biotechnol.
-Molecular Medicine = Mol. Med.
-Molecular Medicine Today = Mol. Med. Today
-Molecular Membrane Biology = Mol. Membr. Biol.
-Molecular Microbiology = Mol. Microbiol.
-Molecular Neurobiology = Mol. Neurobiol.
-Molecular Nutrition and Food Research = Mol. Nutr. Food Res.
-Molecular Pain = Mol. Pain
-Molecular Pathology = Mol. Pathol.
-Molecular Pharmaceutics = Mol. Pharm.
-Molecular Pharmacology = Mol. Pharmacol.
-Molecular Phylogenetics and Evolution = Mol. Phylogenet. Evol.
-Molecular Physics=Mol. Phys.;MOPHAM;SM
-Molecular Plant-Microbe Interactions = Mol. Plant. Microbe Interact.
-Molecular Psychiatry = Mol. Psychiatry
-Molecular Reproduction and Development = Mol. Reprod. Dev.
-Molecular Simulation=Mol. Simul.;MOSIEA;15/YR
-Molecular Systems Biology = Mol. Syst. Biol.
-Molecular Therapy = Mol. Ther.
-Molecular Toxicology = Mol. Toxicol.
-Molecular Urology = Mol. Urol.
-Molecular Vision = Mol. Vis.
-Molecular and Biochemical Parasitology = Mol. Biochem. Parasitol.
-Molecular and Cell Biology of Human Diseases Series = Mol. Cell Biol. Hum. Dis. Ser.
-Molecular and Cellular Biochemistry = Mol. Cell. Biochem.
-Molecular and Cellular Biology = Mol. Cell. Biol.
-Molecular and Cellular Biomechanics = Mol. Cell. Biomech.
-Molecular and Cellular Endocrinology = Mol. Cell. Endocrinol.
-Molecular and Cellular Neuroscience=Mol. Cell. Neurosci.;MOCNED;M
-Molecular and Cellular Neurosciences = Mol. Cell. Neurosci.
-Molecular and Cellular Probes = Mol. Cell. Probes
-Molecular and Cellular Proteomics = Mol. Cell. Proteomics
-Molecular and Chemical Neuropathology = Mol. Chem. Neuropathol.
-Molecular and General Genetics = Mol. Gen. Genet.
-Molecules = Molecules
-Molecules and Cells = Mol. Cells
-Molekuliarna Meditsina = Mol. Med. (Sofia)
-Molekuliarnaia Biologiia = Mol. Biol. (Mosk.)
-Molekuliarnaia Genetika, Mikrobiologiia i Virusologia = Mol. Gen. Mikrobiol. Virusol.
-Monaldi Archives for Chest Disease = Monaldi Arch. Chest Dis.
-Monatshefte fuer Chemie=Monatsh. Chem.;MOCMB7;M
-Monatshefte fur Veterinarmedizin = Monatsh. Veterinarmed.
-Monatsschrift Deutscher Zahnarzte; Der Freie Zahnarzt = Monatsschr. Dtsch. Zahnarzte Freie Zahnarzt
-Monatsschrift Kinderheilkunde = Monatsschr. Kinderheilkd.
-Monatsschrift fur Kinderheilkunde = Monatsschr. Kinderheilkd.
-Monatsschrift fur Ohrenheilkunde und Laryngo-Rhinologie = Monatsschr. Ohrenheilkd. Laryngorhinol.
-Monatsschrift fur Unfallheilkunde = Monatsschr. Unfallheilkd.
-Monatsschrift fur Unfallheilkunde, Versicherungs-, Versorgungs- und Verkehrsmedizin = Monatsschr. Unfallheilkd. Versicher. Versorg. Verkehrsmed.
-Monde Dentaire = Monde Dent.
-Mondo Odontostomatologico = Mondo Odontostomatol.
-Mondo Ortodontico = Mondo Ortod.
-Monograph of the American Association of Mental Deficiency = Monogr. Am. Assoc. Ment. Defic.
-Monographien aus dem Gesamtgebiete der Neurologie und Psychiatrie = Monogr. Gesamtgeb. Neurol. Psychiatr. (Berlin)
-Monographien aus dem Gesamtgebiete der Psychiatrie. Psychiatry Series = Monogr. Gesamtgeb. Psychiatr. Psychiatry Ser.
-Monographs in Allergy = Monogr. Allergy
-Monographs in Clinical Cytology = Monogr. Clin. Cytol.
-Monographs in Developmental Biology = Monogr. Dev. Biol.
-Monographs in Human Genetics = Monogr. Hum. Genet.
-Monographs in Neural Sciences = Monogr. Neural Sci.
-Monographs in Oral Science = Monogr. Oral Sci.
-Monographs in Paediatrics = Monogr. Paediatr.
-Monographs in Pathology = Monogr. Pathol.
-Monographs in Population Biology = Monogr. Popul. Biol.
-Monographs in Virology = Monogr. Virol.
-Monographs in the Surgical Sciences = Monogr. Surg. Sci.
-Monographs of the American Association on Mental Deficiency = Monogr. Am. Assoc. Ment. Defic.
-Monographs of the American Association on Mental Retardation = Monogr. Am. Assoc. Ment. Retard.
-Monographs of the Physiological Society = Monogr. Physiol. Soc.
-Monographs of the Society for Research in Child Development = Monogr. Soc. Res. Child Dev.
-Monographs on Atherosclerosis = Monogr. Atheroscler.
-Monographs on Endocrinology = Monogr. Endocrinol.
-Monthly Bulletin of the Ministry of Health and the Public Health Laboratory Service = Mon. Bull. Minist. Health Public Health Lab. Serv.
-Monthly Labor Review = Mon. Labor Rev.
-Monthly Vital Statistics Report = Mon. Vital Stat. Rep.
-Monthly Weather Review = Mon. Wea. Rev.
-Montpellier Medical = Montp. Med.
-Morfologiia = Morfologiia
-Morphologia Medica = Morphol. Med.
-Morphologiai es Igazsagugyi Orvosi Szemle = Morphol. Igazsagugyi Orv. Sz.
-Morphologie = Morphologie
-Morphologie et Embryologie = Morphol. Embryol. (Bucur.)
-Motor Control = Motor Control
-Mount Sinai Journal of Medicine = Mt. Sinai J. Med.
-Movement Disorders = Mov. Disord.
-Mucopolysaccharides Biochimica et Biophysica Acta, Specialized Section on Mucoproteins and Mucopolysaccharides=Biochim. Biophys. Acta, Spec. Sect. Mucoproteins;BBASFB;
-Multiple Sclerosis = Mult. Scler.
-Multis = Multis
-Munca Sanitara = Munca Sanit.
-Munchener Medizinische Wochenschrift = Munch. Med. Wochenschr.
-Mund-, Kiefer- und Gesichtschirurgie = Mund. Kiefer. Gesichtschir.
-Munnpleien = Munnpleien
-Muscle Biology = Muscle Biol.
-Muscle and Nerve = Muscle Nerve
-Muscle and Nerve. Supplement = Muscle Nerve. Suppl.
-Musculoskeletal Care = Musculoskeletal Care
-Mutagenesis = Mutagenesis
-Mutation Research = Mutat. Res.
-Mycologia = Mycologia
-Mycopathologia = Mycopathologia
-Mycopathologia et Mycologia Applicata = Mycopathol. Mycol. Appl.
-Mycoses = Mycoses
-Mykosen = Mykosen
-Mykosen. Supplement = Mykosen. Suppl.
-N and HC Perspectives on Community = N HC Perspect. Community
-NAACOG Newsletter = NAACOG Newsl.
-NAACOG Technical Bulletin = NAACOG Tech. Bull.
-NAACOG's Clinical Issues in Perinatal and Women's Health Nursing = NAACOGs Clin. Issu. Perinat. Womens Health Nurs.
-NACDL Journal = NACDL J.
-NADL Journal = NADL J.
-NAHAM Management Journal = NAHAM Manage. J.
-NANR News = NANR News
-NASNewsletter = Nasnewsletter
-NATNEWS = NATNEWS
-NCI Monographs = NCI Monogr.
-NCSDHA Dental Hygienist = NCSDHA Dent. Hyg.
-NDA Journal = NDA J.
-NEHW Health Watch = NEHW Health Watch
-NFPA Journal = NFPA J.
-NIDA Research Monograph = NIDA Res. Monogr.
-NIH Consensus Statement = NIH Consens. Statement
-NIH Consensus and State-of-the-Science Statements = NIH Consens. State Sci. Statements
-NIH Guide for Grants and Contracts = NIH Guide Grants Contracts
-NIHAE Bulletin = NIHAE Bull.
-NIPH Annals = NIPH Ann.
-NITA = NITA
-NJPC Bulletin = NJPC Bull.
-NJSNA Newsletter = NJSNA Newsl.
-NLN Convention Papers = NLN Conv. Pap.
-NLN Publications = NLN Publ.
-NLN Update = NLN Update
-NMR in Biomedicine = NMR Biomed.
-NP News = NP News
-NYO Reports = NYO Rep.
-NYSSNTA Journal = NYSSNTA J.
-Nagoya Journal of Medical Science = Nagoya J. Med. Sci.
-Nagoya Medical Journal = Nagoya Med. J.
-Nahrung = Nahrung
-Naika (Internal Medicine) = Naika
-Naika Hokan (Japanese Archives of Internal Medicine) = Naika Hokan
-Nan Fang Yi Ke Da Xue Xue Bao (Journal of Southern Medical University) = Nan Fang Yi Ke Da Xue Xue Bao
-Nano Letters = Nano Lett.
-NanoBiotechnology=NanoBiotechnology;NANOCG;4/YR
-Nanomedicine=Nanomedicine;NANOBF;Q
-Narodno Zdravlje = Nar. Zdrav.
-Nasu Suteshon (Journal of Nursing Administration for Patients) = Nasu Suteshon
-Nation's Business = Nations Bus.
-National Cancer Institute Monographs = Natl. Cancer Inst. Monogr.
-National Cancer Institute Research Report = Natl. Cancer Inst. Res. Rep.
-National Clearinghouse for Poison Control Centers Bulletin = Natl. Clgh. Poison Control Cent. Bull.
-National Conference on Dental Public Relations = Natl. Conf. Dent. Public Relat.
-National Dental Association Journal = Natl. Dent. Assoc. J.
-National Dental Health Conference = Natl. Dent. Health Conf.
-National Engineer = Natl. Eng.
-National Forum on Hospital and Health Affairs = Natl. Forum Hosp. Health Aff.
-National Hospital and Health Care = Natl. Hosp. Health Care
-National Institute of Animal Health Quarterly = Natl. Inst. Anim. Health Q. (Tokyo)
-National Institute on Drug Abuse Research Monograph Series = Natl. Inst. Drug Abuse Res. Monogr. Ser.
-National Institutes of Health Consensus Development Conference Consensus Statement = Natl. Inst. Health Consens. Dev. Conf. Consens. Statement
-National Institutes of Health Consensus Development Conference Summaries = Natl. Inst. Health Consens. Dev. Conf. Summ.
-National Institutes of Health Consensus Development Conference Summary = Natl. Inst. Health Consens. Dev. Conf. Summ.
-National Journal = Natl. J. (Wash.)
-National Medical Care Utilization and Expenditure Survey. Series B, Descriptive Report = Natl. Med. Care Util. Expend. Surv. B.
-National Medical Care Utilization and Expenditure Survey. Series C, Analytical Report = Natl. Med. Care Util. Expend. Surv. C.
-National Medical Journal of India = Natl. Med. J. India
-National Medical-Legal Journal = Natl. Med. Leg. J.
-National Network = Natl. Netw.
-National Nosocomial Infections Study Report = Natl. Nosocomial Infect. Study Rep.
-National Safety Congress Transactions = Natl. Saf. Congr. Trans.
-National Safety News = Natl. Saf. News
-National Underwriter = Natl. Underwrit. [Life Health]
-National Vital Statistics Reports = Natl. Vital Stat. Rep.
-National Weather Digest = Natl. Wea. Dig.
-Natonal Report on Subacute Care = Natl. Rep. Subacute Care
-Natural Immunity = Nat. Immun.
-Natural Immunity and Cell Growth Regulation = Nat. Immun. Cell Growth Regul.
-Natural Product Reports = Nat. Prod. Rep.
-Natural Product Research = Nat. Prod. Res.
-Natural Product Sciences=Nat. Prod. Sci.;NPSCFB;Q
-Natural Toxins = Nat. Toxins
-Nature = Nature
-Nature (London, United Kingdom)=Nature (London, U. K.);NATUAS;W
-Nature Biotechnology = Nat. Biotechnol.
-Nature Cell Biology = Nat. Cell Biol.
-Nature Chemical Biology = Nat. Chem. Biol.
-Nature Clinical Practice. Cardiovascular Medicine = Nat. Clin. Pract. Cardiovasc. Med.
-Nature Clinical Practice. Endocrinology and Metabolism = Nat. Clin. Pract. Endocrinol. Metab.
-Nature Clinical Practice. Gastroenterology and Hepatology = Nat. Clin. Pract. Gastroenterol. Hepatol.
-Nature Clinical Practice. Nephrology = Nat. Clin. Pract. Nephrol.
-Nature Clinical Practice. Neurology = Nat. Clin. Pract. Neurol.
-Nature Clinical Practice. Oncology = Nat. Clin. Pract. Oncol.
-Nature Clinical Practice. Rheumatology = Nat. Clin. Pract. Rheumatol.
-Nature Clinical Practice. Urology = Nat. Clin. Pract. Urol.
-Nature Genetics = Nat. Genet.
-Nature Immunology = Nat. Immunol.
-Nature Materials = Nat. Mater.
-Nature Medicine = Nat. Med.
-Nature Medicine (New York, NY, United States)=Nat. Med. (N. Y., NY, U. S.);NAMEFI;M
-Nature Methods = Nat. Methods
-Nature Neuroscience = Nat. Neurosci.
-Nature Reviews Cancer=Nat. Rev. Cancer;NRCAC4;M
-Nature Reviews Drug Discovery=Nat. Rev. Drug Discovery;NRDDAG;M
-Nature Reviews Genetics=Nat. Rev. Genet.;NRGAAM;M
-Nature Reviews Immunology=Nat. Rev. Immunol.;NRIABX;M
-Nature Reviews Microbiology=Nat. Rev. Microbiol.;NRMACK;M
-Nature Reviews Molecular Cell Biology=Nat. Rev. Mol. Cell Biol.;NRMCBP;M
-Nature Reviews Neuroscience=Nat. Rev. Neurosci.;NRNAAN;M
-Nature Reviews. Cancer = Nat. Rev. Cancer
-Nature Reviews. Drug Discovery = Nat. Rev. Drug Discov.
-Nature Reviews. Genetics = Nat. Rev. Genet.
-Nature Reviews. Immunology = Nat. Rev. Immunol.
-Nature Reviews. Microbiology = Nat. Rev. Microbiol.
-Nature Reviews. Molecular Cell Biology = Nat. Rev. Mol. Cell Biol.
-Nature Reviews. Neuroscience = Nat. Rev. Neurosci.
-Nature Structural & Molecular Biology=Nat. Struct. Mol. Biol.;NSMBCU;M
-Nature Structural Biology = Nat. Struct. Biol.
-Nature Structural and Molecular Biology = Nat. Struct. Mol. Biol.
-Nature. New Biology = Nature. New Biol.
-Naturwissenschaften = Naturwissenschaften
-Nauchni Trudove na Nauchno-Izsledovatelskiia Stomatologichen Institut = Nauchni Tr. Nauchnoizsled. Stomatol. Inst. (Sofiia)
-Nauchni Trudove na Visshiia Meditsinski Institut, Sofiia = Nauchni Tr. Vissh. Med. Inst. Sofiia
-Naunyn-Schmiedeberg's Archives of Pharmacology = Naunyn. Schmiedebergs Arch. Pharmacol.
-Naunyn-Schmiedebergs Archiv fur Experimentelle Pathologie und Pharmakologie = Naunyn. Schmiedebergs Arch. Exp. Pathol. Pharmakol.
-Naunyn-Schmiedebergs Archiv fur Pharmakologie = Naunyn. Schmiedebergs Arch. Pharmakol.
-Navy Medicine = Navy Med.
-Nebraska Medical Journal = Nebr. Med. J.
-Nebraska Nurse = Nebr. Nurse
-Nebraska State Medical Journal = Nebr. State Med. J.
-Nebraska Symposium on Motivation = Nebr. Symp. Motiv.
-Nederlands Militair Geneeskundig Tijdschrift = Ned. Milit. Geneeskd. Tijdschr.
-Nederlands Tandartsenblad = Ned. Tandartsenbl.
-Nederlands Tijdschrift voor Geneeskunde = Ned. Tijdschr. Geneeskd.
-Nederlands Tijdschrift voor Gerontologie = Ned. Tijdschr. Gerontol.
-Nederlands Tijdschrift voor Tandheelkunde = Ned. Tijdschr. Tandheelkd.
-Nederlands Tijdschrift voor de Psychologie en haar Grensgebieden = Ned. Tijdschr. Psychol.
-Nederlandsch Tijdschrift voor Verloskunde en Gynaecologie = Ned. Tijdschr. Verloskd. Gynaecol.
-Neftekhimiya=Neftekhimiya;NEFTAH;BM
-Neirofiziologiia = Neirofiziologiia
-Neonatal Intensive Care = Neonatal Intensive Care
-Neonatal Network = Neonatal Netw.
-Neonatology = Neonatology
-Neoplasia = Neoplasia
-Neoplasma = Neoplasma
-Neoplastic Disease at Various Sites = Monogr. Neoplast. Dis. Var. Sites
-Neotropical Entomology = Neotrop. Entomol.
-Nephrologie = Nephrologie
-Nephrologie et Therapeutique = Nephrol. Ther.
-Nephrology News and Issues = Nephrol. News Issues
-Nephrology Nurse = Nephrol. Nurse
-Nephrology, Dialysis, Transplantation = Nephrol. Dial. Transplant.
-Nephron = Nephron
-Nephron. Clinical Practice = Nephron Clin. Pract.
-Nephron. Experimental Nephrology = Nephron Exp. Nephrol.
-Nephron. Physiology = Nephron Physiol.
-Nervenarzt = Nervenarzt
-Nervnaia Sistema = Nerv. Sist.
-Nestle Nutrition Workshop Series. Clinical and Performance Programme = Nestle Nutr. Workshop Ser. Clin. Perform. Programme
-Netherlands Journal of Medicine = Neth. J. Med.
-Netherlands Journal of Surgery = Neth. J. Surg.
-Network = Network
-Neue Munchner Beitrage zur Geschichte der Medizin und Naturwissenschaften. Medizinhistorische Reihe = Neue Munch. Beitr. Gesch. Med. Naturwiss. Medizinhist. Reihe
-Neues Jahrbuch fuer Mineralogie, Abhandlungen=Neues Jahrb. Mineral., Abh.;NJMIAK;IRR
-Neural Computation = Neural Comput.
-Neural Plasticity = Neural Plast.
-Neuro-Chirurgie = Neurochirurgie.
-Neuro-Degenerative Diseases = Neurodegener. Dis.
-Neuro-oncology = Neuro-oncol.
-Neuro-signals = Neurosignals
-NeuroImmunoModulation=NeuroImmunoModulation;NROIEM;BM
-NeuroMolecular Medicine=NeuroMol. Med.;NMEEAN;6/YR
-Neurobehavioral Toxicology = Neurobehav. Toxicol.
-Neurobehavioral Toxicology and Teratology = Neurobehav. Toxicol. Teratol.
-Neurobiology = Neurobiology
-Neurobiology of Aging = Neurobiol. Aging
-Neurobiology of Disease = Neurobiol. Dis.
-Neurobiology of Learning and Memory = Neurobiol. Learn. Mem.
-Neurochemical Pathology = Neurochem. Pathol.
-Neurochemical Research = Neurochem. Res.
-Neurochemistry International = Neurochem. Int.
-Neurochirurgia = Neurochirurgia (Stuttg.)
-Neurocirugia = Neurocirugia
-Neurocritical Care = Neurocrit. Care
-Neurodegeneration = Neurodegeneration
-Neuroendocrinology = Neuroendocrinology
-Neuroepidemiology = Neuroepidemiology
-Neurofibromatosis = Neurofibromatosis
-Neurogastroenterology and Motility = Neurogastroenterol. Motil.
-Neurogenetics = Neurogenetics
-Neuroimage = Neuroimage
-Neuroimaging Clinics of North America = Neuroimaging Clin. N. Am.
-Neuroimmunomodulation = Neuroimmunomodulation
-Neuroinformatics = Neuroinformatics
-Neurologia = Neurologia
-Neurologia Croatica = Neurol. Croat.
-Neurologia Medico-Chirurgica = Neurol. Med. Chir. (Tokyo)
-Neurologia i Neurochirurgia Polska = Neurol. Neurochir. Pol.
-Neurologia, Neurochirurgia i Psychiatria Polska = Neurol. Neurochir. Psychiatr. Pol.
-Neurologia, Psihiatria, Neurochirurgia = Neurol. Psihiatr. Neurochir.
-Neurologia-Neurocirugia-Psiquiatria = Neurol. Neurocir. Psiquiatr.
-Neurologic Clinics = Neurol. Clin.
-Neurological Research = Neurol. Res.
-Neurological Sciences = Neurol. Sci.
-Neurologie et Psychiatrie = Neurol. Psychiatr. (Bucur.)
-Neurologija = Neurologija
-Neurology = Neurology
-Neurology India = Neurol. India
-Neurology and Clinical Neurophysiology = Neurol. Clin. Neurophysiol.
-Neurology, Neurophysiology, and Neuroscience = Neurol. Neurophysiol. Neurosci.
-Neuromolecular Medicine = Neuromolecular Med.
-Neuromuscular Disorders = Neuromuscul. Disord.
-Neuron = Neuron
-Neuropadiatrie = Neuropadiatrie
-Neuropathology and Applied Neurobiology = Neuropathol. Appl. Neurobiol.
-Neuropatologia Polska = Neuropatol. Pol.
-Neuropediatrics = Neuropediatrics
-Neuropeptides = Neuropeptides
-Neuropeptides (Amsterdam, Netherlands)=Neuropeptides (Amsterdam, Neth.);NRPPDD;BM
-Neuropharmacology = Neuropharmacology
-Neurophysiologie Clinique = Neurophysiol. Clin.
-Neuropsihijatrija = Neuropsihijatrija
-Neuropsychiatrie de l'Enfance et de l'Adolescence = Neuropsychiatr. Enfance Adolesc.
-Neuropsychiatry, Neuropsychology, and Behavioral Neurology = Neuropsychiatry. Neuropsychol. Behav. Neurol.
-Neuropsychobiology = Neuropsychobiology
-Neuropsychologia = Neuropsychologia
-Neuropsychology = Neuropsychology
-Neuropsychology Review = Neuropsychol. Rev.
-Neuropsychopharmacology = Neuropsychopharmacology
-Neuroradiology = Neuroradiology
-Neurorehabilitation and Neural Repair = Neurorehabil. Neural Repair
-Neuroreport = Neuroreport
-Neurorx = Neurorx
-Neuroscience = Neuroscience
-Neuroscience (Oxford, United Kingdom)=Neuroscience (Oxford, U. K.);NRSCDN;28/YR
-Neuroscience Letters = Neurosci. Lett.
-Neuroscience Letters. Supplement = Neurosci. Lett. Suppl.
-Neuroscience Research = Neurosci. Res.
-Neuroscience Research. Supplement = Neurosci. Res. Suppl.
-Neuroscience and Behavioral Physiology = Neurosci. Behav. Physiol.
-Neuroscience and Biobehavioral Reviews = Neurosci. Biobehav. Rev.
-Neurosciences Research = Neurosci. Res. (N. Y.)
-Neurosciences Research Program Bulletin = Neurosci. Res. Program Bull.
-Neurosignals=Neurosignals;NEURIQ;BM
-Neurosurgery = Neurosurgery
-Neurosurgery Clinics of North America = Neurosurg. Clin. N. Am.
-Neurosurgical Focus = Neurosurg. Focus
-Neurosurgical Review = Neurosurg. Rev.
-Neurotoxicology = Neurotoxicology
-Neurotoxicology and Teratology = Neurotoxicol. Teratol.
-Neurotoxins = Neurotoxins
-Neurourology and Urodynamics = Neurourol. Urodyn.
-Nevada Nurses Association Quarterly Newsletter = Nev. Nurses Assoc. Q. Newsl.
-Nevada RNformation = Nev. Rnformation
-New Biologist = New Biol.
-New Dentist = New Dent.
-New Diamond and Frontier Carbon Technology=New Diamond Front. Carbon Technol.;NDFTFF;6/YR
-New Directions for Child Development = New Dir. Child Dev.
-New Directions for Child and Adolescent Development = New Dir. Child Adolesc. Dev.
-New Directions for Mental Health Services = New Dir. Ment. Health Serv.
-New Directions for Youth Development = New Dir. Youth Dev.
-New England Journal of Human Services = N. Engl. J. Hum. Serv.
-New England Journal of Medicine = N. Engl. J. Med.
-New England and Regional Allergy Proceedings = N. Engl. Reg. Allergy Proc.
-New Era Nursing Image International = New Era Nurs. Image Int.
-New Horizons = New Horiz.
-New Istanbul Contribution to Clinical Science = New Istanbul Contrib. Clin. Sci.
-New Jersey Healthcare = N. J. Healthc.
-New Jersey League for Nursing News = N. J. League Nurs. News
-New Jersey Medicine = N. J. Med.
-New Jersey Nurse = N. J. Nurse
-New Journal of Chemistry=New J. Chem.;NJCHE5;M
-New Mexico Dental Journal = N. M. Dent. J.
-New Mexico Nurse = N. M. Nurse
-New Microbiologica = New Microbiol.
-New Physician = New Physician
-New York Journal of Dentistry = N. Y. J. Dent.
-New York State Dental Journal = N. Y. State Dent. J.
-New York State Journal of Medicine = N. Y. State J. Med.
-New York State Nurse = N. Y. State Nurse
-New York Times Magazine = N. Y. Times Mag.
-New York University Journal of Dentistry = N. Y. Univ. J. Dent.
-New Zealand Dental Journal = N. Z. Dent. J.
-New Zealand Health and Hospital = N. Z. Health Hospital
-New Zealand Hospital = N. Z. Hosp.
-New Zealand Journal of Marine and Freshwater Research = N. Z. J. Mar. Freshwater Res.
-New Zealand Medical Journal = N. Z. Med. J.
-New Zealand Nursing Forum = N. Z. Nurs. Forum
-New Zealand Nursing Journal = N. Z. Nurs. J.
-New Zealand School Dental Service Gazette = N. Z. Sch. Dent. Serv. Gaz.
-New Zealand Veterinary Journal = N. Z. Vet. J.
-News Bulletin, Indian Dental Association = News Bull. Indian Dent. Assoc.
-News Letter, Florence Nightingale International Nurses Association = News Lett. Florence Nightingale Int. Nurs. Assoc.
-News Letter, Maine State Nurses Association = News Lett. Maine State Nurses Assoc.
-News Notes, Ohio Dental Journal = News Notes Ohio Dent. J.
-Newsette = Newsette
-Newsletter of Biomedical Safety and Standards = Newsl. Biomed. Saf. Stand.
-Newsletter of the American Academy of Implant Dentistry = Newsl. Am. Acad. Implant Dent.
-Newsletter, American Academy of Health Administration = Newsl. Am. Acad. Health Adm.
-Newsletter, International Academy of Periodontology = Newsl. Int. Acad. Periodontol.
-Newsletter, International College of Dentists, India Section = Newsl. Int. Coll. Dent. India Sect.
-Newsletter, Springfield Dental Society = Newsl. Springfield Dent. Soc.
-Newsletter, Wisconsin League for Nursing = Newsl. Wis. League Nurs.
-Newsweek = Newsweek
-Nicaragua Odontologica = Nicar. Odontol.
-Nichidai Koko Kagaku (Nihon University Journal of Oral Science) = Nichidai Koko Kagaku
-Nicotine and Tobacco Research = Nicotine Tob. Res.
-Niedersachsisches Zahnarzteblatt = Niedersachs. Zahnarztebl.
-Nigerian Dental Journal = Niger. Dent. J.
-Nigerian Medical Journal = Niger. Med. J.
-Nigerian Nurse = Niger. Nurse
-Nihon Ago Kansetsu Gakkai Zasshi = Nihon Ago Kansetsu Gakkai Zasshi
-Nihon Arukoru Yakubutsu Igakkai Zasshi (Japanese Journal of Alcohol Studies and Drug Dependence) = Nihon Arukoru Yakubutsu Igakkai Zasshi
-Nihon Hansenbyo Gakkai Zasshi (Japanese Journal of Leprosy) = Nihon Hansenbyo Gakkai Zasshi
-Nihon Kango Kagakkai Shi (Journal of Japan Academy of Nursing Science) = Nihon Kango Kagakkaishi
-Nihon Kokyuki Gakkai Zasshi (Journal of the Japanese Respiratory Society) = Nihon Kokyuki Gakkai Zasshi
-Nihon Reoroji Gakkaishi=Nihon Reoroji Gakkaishi;NRGIAC;IRR
-Nihon Rinsho Meneki Gakkai Kaishi (Japanese Journal of Clinical Immunology) = Nihon Rinsho Meneki Gakkai Kaishi
-Nihon Rinsho Shishubyo Danwakai Kaishi (Journal of the Japanese Society of Periodontists) = Nihon Rinsho Shishubyo Danwakai Kaishi
-Nihon Shinkei Seishin Yakurigaku Zasshi (Japanese Journal of Psychopharmacology) = Nihon Shinkei Seishin Yakurigaku Zasshi
-Nippon Byori Gakkai Kaishi (Transactiones Societatis Pathologicae Japonicae) = Nippon Byori Gakkai Kaishi
-Nippon Daicho Komonbyo Gakkai Zasshi (Journal of Japan Society of Colo-Proctology) = Nippon Daicho Komonbyo Gakkai Zasshi
-Nippon Densenbyo Gakkai Zasshi = Nippon Densenbyo Gakkai Zasshi
-Nippon Eiseigaku Zasshi (Japanese Journal of Hygiene) = Nippon Eiseigaku Zasshi
-Nippon Funin Gakkai Zasshi (Japanese Journal of Fertility and Sterility) = Nippon Funin Gakkai Zasshi
-Nippon Gan Chiryo Gakkai Shi (Journal of Japan Society for Cancer Therapy) = Nippon Gan Chiryo Gakkai Shi
-Nippon Ganka Gakkai Zasshi (Acta Societatis Ophthalmologicae Japonicae) = Nippon Ganka Gakkai Zasshi
-Nippon Ganka Kiyo (Folia Ophthalmologica Japonica. Bulletin of Japanese Ophthalmology) = Nippon Ganka Kiyo
-Nippon Geka Gakkai Zasshi (Journal of Japan Surgical Society) = Nippon Geka Gakkai Zasshi
-Nippon Geka Hokan (Archiv fur Japanische Chirurgie) = Nippon Geka Hokan.
-Nippon Heikatsukin Gakkai Zasshi = Nippon Heikatsukin Gakkai Zasshi
-Nippon Hifuka Gakkai Zasshi (Japanese Journal of Dermatology) = Nippon Hifuka Gakkai Zasshi
-Nippon Hinyokika Gakkai Zasshi (Japanese Journal of Urology) = Nippon Hinyokika Gakkai Zasshi
-Nippon Hoigaku Zasshi (Japanese Journal of Legal Medicine) = Nippon Hoigaku Zasshi
-Nippon Hotetsu Shika Gakkai Zasshi = Nippon Hotetsu Shika Gakkai Zasshi
-Nippon Igaku Hoshasen Gakkai Zasshi (Nippon Acta Radiologica) = Nippon Igaku Hoshasen Gakkai Zasshi
-Nippon Ika Daigaku Zasshi (Journal of the Nippon Medical School) = Nippon Ika Daigaku Zasshi
-Nippon Ishikai Zasshi (Journal of the Japan Medical Association) = Nippon Ishikai Zasshi
-Nippon Ishinkin Gakkai Zasshi (Japanese Journal of Medical Mycology) = Nippon Ishinkin Gakkai Zasshi
-Nippon Jibiinkoka Gakkai Kaiho = Nippon Jibiinkoka Gakkai Kaiho
-Nippon Jinzo Gakkai Shi = Nippon Jinzo Gakkai Shi
-Nippon Juigaku Zasshi (Japanese Journal of Veterinary Science) = Nippon Juigaku Zasshi
-Nippon Ketsueki Gakkai Zasshi (Acta Haematologica Japonica) = Nippon Ketsueki Gakkai Zasshi
-Nippon Kinzoku Gakkaishi=Nippon Kinzoku Gakkaishi;NIKGAV;M
-Nippon Koku Geka Gakkai Zasshi = Nippon Koku Geka Gakkai Zasshi
-Nippon Kontakuto Renzu Gakkai Kaiin Dayori (Journal of Japan Contact Lens Society) = Nippon Kontakuto Renzu Gakkai Kaiin Dayori.
-Nippon Koshu Eisei Zasshi (Japanese journal of Public Health) = Nippon Koshu Eisei Zasshi
-Nippon Kyobu Geka Gakkai Zasshi (Journal of the Japanese Association for Thoracic Surgery) = Nippon Kyobu Geka Gakkai Zasshi
-Nippon Kyobu Shikkan Gakkai Zasshi (Japanese Journal of Thoracic Diseases) = Nippon Kyobu Shikkan Gakkai Zasshi
-Nippon Kyosei Shika Gakkai Zasshi (Journal of Japan Orthodontic Society) = Nippon Kyosei Shika Gakkai Zasshi
-Nippon Naibunpi Gakkai Zasshi (Folia Endocrinologica Japonica) = Nippon Naibunpi Gakkai Zasshi
-Nippon Naika Gakkai Zasshi (Journal of Japanese Society of Internal Medicine) = Nippon Naika Gakkai Zasshi
-Nippon Rai Gakkai Zasshi (Japanese Journal of Leprosy) = Nippon Rai Gakkai Zasshi
-Nippon Rinsho (Japanese Journal of Clinical Medicine) = Nippon Rinsho
-Nippon Ronen Igakkai Zasshi (Japanese Journal of Geriatrics) = Nippon Ronen Igakkai Zasshi
-Nippon Saikingaku Zasshi (Japanese Journal of Bacteriology) = Nippon Saikingaku Zasshi
-Nippon Sanka Fujinka Gakkai Zasshi (Acta Obstetrica et Gynaecologica Japonica) = Nippon Sanka Fujinka Gakkai Zasshi
-Nippon Seikeigeka Gakkai Zasshi (Journal of the Japanese Orthopaedic Association) = Nippon Seikeigeka Gakkai Zasshi
-Nippon Seirigaku Zasshi (Journal of the Physiological Society of Japan) = Nippon Seirigaku Zasshi
-Nippon Shika Hyoron (Nippon Dental Review) = Nippon Shika Hyoron.
-Nippon Shika Ishikai Zasshi (Journal of the Japan Dental Association) = Nippon Shika Ishikai Zasshi
-Nippon Shika Zairyo Kikai Gakkai Zasshi (Journal of the Japan Research Society of Dental Materials and Appliances) = Nippon Shika Zairyo Kikai Gakkai Zasshi
-Nippon Shishubyo Gakkai Kaishi (Journal of the Japanese Association of Periodontology) = Nippon Shishubyo Gakkai Kaishi
-Nippon Shokakibyo Gakkai Zasshi (Japanese Journal of Gastroenterology) = Nippon Shokakibyo Gakkai Zasshi
-Nippon Shonika Gakkai Zasshi (Acta Paediatrica Japonica) = Nippon Shonika Gakkai Zasshi
-Nippon Yakurigaku Zasshi (Folia Pharmacologica Japonica) = Nippon Yakurigaku Zasshi
-Nitric Oxide = Nitric Oxide
-No Shinkei Geka (Neurological Surgery) = No Shinkei Geka.
-No to Hattatsu = No To Hattatsu
-No to Shinkei (Brain and Nerve) = No To Shinkei
-Nobel Symposium = Nobel Symp.
-Nonprofit Management and Leadership = Nonprofit Manag. Leadersh.
-Nordic Journal of Psychiatry = Nord. J. Psychiatry
-Nordic Pulp & Paper Research Journal=Nord. Pulp Pap. Res. J.;NPPJEG;Q
-Nordisk Hygienisk Tidskrift = Nord. Hyg. Tidskr.
-Nordisk Hygienisk Tidskrift. Supplement = Nord. Hyg. Tidskr. Suppl.
-Nordisk Medicin = Nord. Med.
-Nordisk Psykiatrisk Tidsskrift = Nord. Psykiatr. Tidsskr.
-Nordisk Veterinaermedicin = Nord. Vet. Med.
-Normale und Pathologische Anatomie = Norm. Pathol. Anat. (Stuttg.)
-Norske Tannlaegeforenings Tidende = Nor. Tannlaegeforen. Tid.
-North Carolina Dental Gazette = N. C. Dent. Gaz.
-North Carolina Dental Journal = N. C. Dent. J.
-North Carolina Medical Journal = N. C. Med. J.
-Northwest Dentistry = Northwest Dent.
-Northwest Medicine = Northwest Med.
-Northwestern Dental Research = Northwest. Dent. Res.
-Northwestern University Bulletin, Dental Research and Graduate Study = Northwest. Univ. Bull. Dent. Res. Grad. Study
-Noseleutike = Noseleutike
-Noshuyo Byori (Brain Tumor Pathology) = Noshuyo Byori
-Nouvelle Presse Medicale = Nouv. Presse Med.
-Nouvelle Revue Francaise d'Hematologie = Nouv. Rev. Fr. Hematol.
-Nouvelle Revue Francaise d'Hematologie (Blood Cells) = Nouv. Rev. Fr. Hematol. Blood Cells
-Nova Scotia Medical Bulletin = N. S. Med. Bull.
-Novartis Foundation Symposium = Novartis Found. Symp.
-Novosti Meditsinskogo Priborostroeniia = Nov. Med. Priborostr.
-Novosti Meditsinskoi Tekhniki = Nov. Med. Tekh.
-Nowotwory = Nowotwory
-Nuclear Engineering and Design=Nucl. Eng. Des.;NEDEAU;24/YR
-Nuclear Fusion=Nucl. Fusion;NUFUAU;M
-Nuclear Instruments & Methods in Physics Research, Section A: Accelerators, Spectrometers, Detectors, and Associated Equipment=Nucl. Instrum. Methods Phys. Res., Sect. A;NIMAER;36/YR
-Nuclear Instruments & Methods in Physics Research, Section B: Beam Interactions with Materials and Atoms=Nucl. Instrum. Methods Phys. Res., Sect. B;NIMBEU;21/YR
-Nuclear Medicine Communications = Nucl. Med. Commun.
-Nuclear Medicine and Biology = Nucl. Med. Biol.
-Nuclear Physics A=Nucl. Phys. A;NUPABL;68/YR
-Nuclear Physics B=Nucl. Phys. B;NUPBBO;84/yr
-Nuclear Physics B, Proceedings Supplements=Nucl. Phys. B, Proc. Suppl.;NPBSE7;IRR
-Nuclear Science and Engineering=Nucl. Sci. Eng.;NSENAO;9/YR
-Nuclear Technology=Nucl. Technol.;NUTYBB;M
-Nuclear-Medizin = Nucl. Med. (Stuttg.)
-Nucleic Acids Research = Nucleic Acids Res.
-Nucleic Acids Research Supplement=Nucleic Acids Res. Suppl.;NARSCE;A
-Nucleic Acids Symposium Series = Nucleic Acids Symp. Ser.
-Nucleosides and Nucleotides = Nucleosides Nucleotides
-Nucleosides, Nucleotides & Nucleic Acids=Nucleosides, Nucleotides Nucleic Acids;NNNAFY;M
-Nucleosides, Nucleotides and Nucleic Acids = Nucleosides Nucleotides Nucleic Acids
-Nueva Enfermeria = Nueva Enferm.
-Nuklearmedizin = Nuklearmedizin
-Nukleonika=Nukleonika;NUKLAS;Q
-Nuntius Radiologicus = Nunt. Radiol.
-Nuova Rivista di Neurologia = Nuova Riv. Neurol.
-Nuovi Annali d'Igiene e Microbiologia = Nuovi Ann. Ig. Microbiol.
-Nuovo Cimento = Nuovo Cimento
-Nurse Anesthesia = Nurse Anesth.
-Nurse Author and Editor = Nurse Author Ed.
-Nurse Education Today = Nurse Educ. Today
-Nurse Educator = Nurse Educ.
-Nurse Educators Opportunities and Innovations = Nurse Educ. Oppor. Innov.
-Nurse Managers Bookshelf = Nurse Managers Bookshelf
-Nurse Practitioner = Nurse Pract.
-Nurse Practitioner Forum = Nurse Pract. Forum
-Nurses Lamp = Nurses Lamp
-Nursing = Nursing (Lond.)
-Nursing Administration Quarterly = Nurs. Adm. Q.
-Nursing BC = Nurs. BC
-Nursing Care = Nurs. Care
-Nursing Careers = Nurs. Careers
-Nursing Case Management = Nurs. Case Manag.
-Nursing Clinics of North America = Nurs. Clin. North Am.
-Nursing Diagnosis = Nurs. Diagn.
-Nursing Dynamics = Nurs. Dyn.
-Nursing Economics = Nurs. Econ.
-Nursing Education Monographs = Nurs. Educ. Monogr.
-Nursing Educators Microworld = Nurs. Educ. Microworld
-Nursing Ethics = Nurs. Ethics
-Nursing Focus = Nurs. Focus
-Nursing Forum = Nurs. Forum (Auckl.)
-Nursing History Review = Nurs. Hist. Rev.
-Nursing Homes = Nurs. Homes
-Nursing Homes and Senior Citizen Care = Nurs. Homes Sr. Citiz. Care
-Nursing Inquiry = Nurs. Inq.
-Nursing Journal = Nurs. J. (Manila)
-Nursing Journal of India = Nurs. J. India
-Nursing Journal of Singapore = Nurs. J. Singapore
-Nursing Law and Ethics = Nurs. Law Ethics
-Nursing Leadership = Nurs. Leadersh.
-Nursing Life = Nurs. Life
-Nursing Management = Nurs. Manag. (Harrow)
-Nursing Mirror = Nurs. Mirror
-Nursing Mirror and Midwives Journal = Nurs. Mirror Midwives J.
-Nursing Montreal = Nurs. Montreal
-Nursing New Zealand = Nurs. N. Z.
-Nursing News = Nurs. News (Meriden)
-Nursing Outlook = Nurs. Outlook
-Nursing Papers = Nurs. Pap.
-Nursing Practice = Nurs. Pract.
-Nursing Praxis in New Zealand = Nurs. Prax. N. Z.
-Nursing Quality Connection = Nurs. Qual. Connect.
-Nursing Quebec = Nurs. Que.
-Nursing RSA = Nurs. RSA
-Nursing Research = Nurs. Res.
-Nursing Research Conference = Nurs. Res. Conf.
-Nursing Research Report = Nurs. Res. Rep.
-Nursing Science = Nurs. Sci.
-Nursing Science Quarterly = Nurs. Sci. Q.
-Nursing Spectrum (D.C./Baltimore Metro Edition) = Nurs. Spectr. (Wash. D. C.)
-Nursing Spectrum (Florida Edition) = Nurs. Spectr. (Fla. Ed.)
-Nursing Spectrum (Greater Chicago/NE Illinois and NW Indiana Edition) = Nurs. Spectr. (Gt. Chic. NE Ill. NW Indiana Ed.)
-Nursing Spectrum (Greater Philadelphia/Tri-State ed) = Nurs. Spectr. (Gt. Phila. Tri State Ed.)
-Nursing Spectrum (New England Edition) = Nurs. Spectr. (N. Engl. Ed.)
-Nursing Staff Development Insider = Nurs. Staff Dev. Insid.
-Nursing Standard = Nurs. Stand.
-Nursing Standard. Special Supplement = Nurs. Stand. Spec. Suppl.
-Nursing Success Today = Nurs. Success Today
-Nursing Times = Nurs. Times
-Nursing and Health Care = Nurs. Health Care
-Nursing and Health Care Perspectives = Nurs. Health Care Perspect.
-Nursing in Critical Care = Nurs. Crit. Care
-Nursing the Elderly = Nurs. Elder.
-Nursingconnections = Nursingconnections
-Nutricion Hospitalaria = Nutr. Hosp.
-Nutritio et Dieta (European Review of Nutrition and Dietetics) = Nutr. Dieta Eur. Rev. Nutr. Diet.
-Nutrition = Nutrition
-Nutrition Abstracts and Reviews = Nutr. Abstr. Rev.
-Nutrition Journal = Nutr. J.
-Nutrition Research (New York, NY, United States)=Nutr. Res. (N. Y., NY, U. S.);NTRSDC;M
-Nutrition Reviews = Nutr. Rev.
-Nutrition and Cancer = Nutr. Cancer
-Nutrition and Health = Nutr. Health
-Nutrition and Metabolism = Nutr. Metab.
-Nutrition in Clinical Care = Nutr. Clin. Care
-Nutrition in Clinical Practice = Nutr. Clin. Pract.
-Nutritional Neuroscience = Nutr. Neurosci.
-O'zbekiston Kimyo Jurnali=O'zb. Kim. J.;OKJZA6;BM
-OH; Osteopathic Hospitals = OH
-OHMS Digest = OHMS Dig.
-OMICS=OMICS;OMICAE;Q
-ONA Journal = ONA J.
-ONS News = ONS News
-OOQ; Occupational Outlook Quarterly = OOQ Occup. Outlook Q.
-OR Manager = OR Manager
-OR Tech = OR Tech
-ORL-Head and Neck Nursing = ORL. Head Neck Nurs.
-ORL; Journal of Oto-Rhino-Laryngology and Its Related Specialties = ORL. J. Otorhinolaryngol. Relat. Spec.
-ORNL = ORNL
-ORO Reports = ORO Rep.
-Obesity = Obesity
-Obesity Research = Obes. Res.
-Obesity Reviews = Obes. Rev.
-Obesity Surgery = Obes. Surg.
-Obstetrica si Ginecologia = Obstet. Ginecol. (Bucur.)
-Obstetrical and Gynecological Survey = Obstet. Gynecol. Surv.
-Obstetricia y Ginecologia Latino-Americanas = Obstet. Ginecol. Lat. Am.
-Obstetrics and Gynecology = Obstet. Gynecol.
-Obstetrics and Gynecology Annual = Obstet. Gynecol. Annu.
-Obstetrics and Gynecology Clinics of North America = Obstet. Gynecol. Clin. North Am.
-Occasional Newsletter, Lindsay Club = Occas. Newsl. Lindsay Club
-Occasional Paper, Royal College of General Practitioners = Occas. Pap. R. Coll. Gen. Pract.
-Occupational Health = Occup. Health (Lond.)
-Occupational Health Nurse = Occup. Health Nurse (Auckl.)
-Occupational Health Nursing = Occup. Health Nurs.
-Occupational Health Review = Occup. Health Rev.
-Occupational Health and Safety = Occup. Health Saf.
-Occupational Medicine = Occup. Med.
-Occupational and Environmental Medicine = Occup. Environ. Med.
-Oceanography and Meteorology = Oceanogr. Meteor.
-Ocular Immunology and Inflammation = Ocul. Immunol. Inflamm.
-Ocular Surface = Ocul. Surf.
-Odont = Odont
-Odontes = Odontes
-Odontiatriki = Odontiatriki
-Odonto-Stomatologie Tropicale = Odontostomatol. Trop.
-Odontoestomatologia = Odontoestomatologia
-Odontoiatria Pratica = Odontoiatr. Prat.
-Odontoiatria; Revista Ibero-Americana de Medicina de la Boca = Odontoiatr. Rev. Iberoam. Med. Boca
-Odontologia = Odontologia
-Odontologia Atual = Odontol. Atual
-Odontologia Bonaerense = Ondontol. Bonaer.
-Odontologia Capixaba = Odontol. Capixaba
-Odontologia Chilena = Odontol. Chil.
-Odontologia Clinica = Odontol. Clin.
-Odontologia Dinamica = Odontol. Din.
-Odontologia Jalisciense = Odontol. Jalisc.
-Odontologia Peruana = Odontol. Peru.
-Odontologia Practica = Odontol. Pract.
-Odontologia Uruguaya = Odontol. Urug.
-Odontologia de Postgrado = Odontol. Postgrado
-Odontological Bulletin = Odontol. Bull.
-Odontologie Conservatrice = Odontol. Conserv.
-Odontologisk Revy = Odontol. Revy
-Odontologisk Revy. Supplement = Odontol. Revy. Suppl.
-Odontologisk Tidskrift = Odontol. Tidskr.
-Odontologiska Foreningens Tidskrift = Odontol. Foren. Tidskr.
-Odontologiska Samfundet i Finland Arsbok = Odontol. Samf. Finl. Arsb.
-Odontologo = Odontologo
-Odontology = Odontology
-Odontoprotesi = Odontoprotesi
-Odontostomatologia e Implantoprotesi = Odontostomatol. Implantoprotesi
-Odontostomatologike Proodos = Odontostomatol. Proodos
-Offentliche Gesundheitsdienst = Offentl. Gesundheitsdienst
-Offentliche Gesundheitswesen = Offentl. Gesundheitswes.
-Office = Office
-Official Journal of the Canadian Association of Critical Care Nurses = Off. J. Can. Assoc. Crit. Care Nurs.
-Official Publication, Dental Hygienists Association of the State of New York = Off. Publ. Dent. Hyg. Assoc. State N. Y.
-Oftalmologia = Oftalmologia
-Oftalmologicheskii Zhurnal = Oftalmol. Zh.
-Ohio Dental Journal = Ohio Dent. J.
-Ohio Medicine = Ohio Med.
-Ohio Nurses Review = Ohio Nurses Rev.
-Ohio State Medical Journal = Ohio State Med. J.
-Oil, Gas (Hamburg, Germany)=Oil, Gas (Hamburg, Ger.);OGEMDJ;Q
-Okajimas Folia Anatomica Japonica = Okajimas Folia Anat. Jpn.
-Oklahoma Nurse = Okla. Nurse
-Oligonucleotides = Oligonucleotides
-Omics = OMICS
-Omnia Medica et Therapeutica = Omnia Med. Ther.
-Omvardaren = Omvardaren
-Oncodevelopmental Biology and Medicine = Oncodev. Biol. Med.
-Oncogene = Oncogene
-Oncogene Research = Oncogene Res.
-Oncologia = Oncologia
-Oncologica = Oncologica
-Oncologist = Oncologist
-Oncology = Oncology
-Oncology Nursing Forum = Oncol. Nurs. Forum
-Oncology Reports = Oncol. Rep.
-Oncology Research = Oncol. Res.
-Onderstepoort Journal of Veterinary Research = Onderstepoort J. Vet. Res.
-One on One = One One
-Onkologie = Onkologie
-Online Journal of Current Clinical Trials = Online J. Curr. Clin. Trials
-Online Journal of Issues in Nursing = Online J. Issues Nurs.
-Ontario Dentist = Ont. Dent.
-Ontogenez = Ontogenez
-Operational Research Quarterly = Oper. Res. Q.
-Operations Research = Oper. Res.
-Operative Dentistry = Oper. Dent.
-Operative Dentistry. Supplement = Oper. Dent. Suppl.
-Ophthalmic Epidemiology = Ophthalmic Epidemiol.
-Ophthalmic Genetics = Ophthalmic Genet.
-Ophthalmic Paediatrics and Genetics = Ophthalmic Paediatr. Genet.
-Ophthalmic Plastic and Reconstructive Surgery = Ophthal. Plast. Reconstr. Surg.
-Ophthalmic Research = Ophthalmic Res.
-Ophthalmic Seminars = Ophthalmic Semin.
-Ophthalmic Surgery = Ophthalmic Surg.
-Ophthalmic Surgery and Lasers = Ophthalmic Surg. Lasers
-Ophthalmic Surgery, Lasers and Imaging = Ophthalmic Surg. Lasers Imaging
-Ophthalmic and Physiological Optics = Ophthalmic Physiol. Opt.
-Ophthalmologe = Ophthalmologe
-Ophthalmologica = Ophthalmologica
-Ophthalmologie = Ophtalmologie
-Ophthalmology = Ophthalmology
-Optica Acta = Opt. Acta (Lond.)
-Optical Engineering=Opt. Eng.
-Optical and Quantum Electronics=Opt. Quantum. Electron.
-Optics Communications=Opt. Commun.;OPCOB8;84/YR
-Optics Express=Opt. Express
-Optics Letters=Opt. Lett.
-Optics and Spectroscopy=Opt. Spectrosc.;OPSUA3;M
-Optometry = Optometry
-Optometry Clinics = Optom. Clin.
-Optometry and Vision Science = Optom. Vis. Sci.
-Opuscula Medica = Opusc. Med.
-Oral Diseases = Oral Dis.
-Oral Health = Oral Health
-Oral Health and Preventive Dentistry = Oral Health Prev. Dent.
-Oral Hygiene = Oral Hyg.
-Oral Implantology = Oral Implantol.
-Oral Microbiology and Immunology = Oral Microbiol. Immunol.
-Oral Oncology = Oral Oncol.
-Oral Sciences Reviews = Oral Sci. Rev.
-Oral Surgery, Oral Diagnosis = Oral Surg. Oral Diagn.
-Oral Surgery, Oral Medicine, Oral Pathology = Oral Surg. Oral Med. Oral Pathol.
-Oral Surgery, Oral Medicine, Oral Pathology, Oral Radiology and Endodontics = Oral Surg. Oral Med. Oral Pathol. Oral Radiol. Endod.
-Oral-Prophylaxe = Oralprophylaxe.
-Orale Implantologie = Orale Implantol.
-Orange County Dental Society Bulletin = Orange Cty. Dent. Soc. Bull.
-Oregon Nurse = Oreg. Nurse
-Oregon State Dental Journal = Oreg. State Dent. J.
-Organic & Biomolecular Chemistry=Org. Biomol. Chem.;OBCRAK;24/YR
-Organic Geochemistry=Org. Geochem.;ORGEDE;M
-Organic Letters = Org. Lett.
-Organic Preparations and Procedures International=Org. Prep. Proced. Int.;OPPIAK;BM
-Organic Process Research & Development=Org. Process Res. Dev.;OPRDFK;BM
-Organic Syntheses=Org. Synth.;ORSYAT;A
-Organic and Biomolecular Chemistry = Org. Biomol. Chem.
-Organizational Behavior and Human Decision Processes = Organ. Behav. Hum. Decis. Process.
-Organizational Behavior and Human Performance = Organ. Behav. Hum. Perform.
-Organizational Dynamics = Organ. Dyn.
-Organometallics=Organometallics;ORGND7;BW
-Oriental Journal of Chemistry=Orient. J. Chem.;OJCHEG;3/YR
-Origins of Life = Orig. Life
-Origins of Life and Evolution of the Biosphere = Orig. Life Evol. Biosph.
-Orizzonti della Ortopedia Odierna e della Riabilitazione = Orizz. Ortop. Odie. Riabil.
-Orthodontic Review = Orthod. Rev.
-Orthodontics and Craniofacial Research = Orthod. Craniofac. Res.
-Orthodontie Francaise = Orthod. Fr.
-Orthodontike Epitheorese = Orthod. Epitheorese
-Orthodontist = Orthodontist
-Orthopade = Orthopade
-Orthopaedic Nursing = Orthop. Nurs.
-Orthopaedic Review = Orthop. Rev.
-Orthopedic Clinics of North America = Orthop. Clin. North Am.
-Orthopedic Nursing = Orthop. Nurs.
-Orthopedics = Orthopedics
-Ortodoncia = Ortodoncia
-Ortodontia = Ortodontia
-Ortopedia Maxilar = Ortop. Maxilar
-Ortopediia Travmatologiia i Protezirovanie = Ortop. Travmatol. Protez.
-Orvosi Hetilap = Orv. Hetil.
-Osaka City Medical Journal = Osaka City Med. J.
-Osaka Daigaku Shigaku Zasshi (Journal of the Osaka University Dental Society) = Osaka Daigaku Shigaku Zasshi
-Ospedale Maggiore = Osp. Maggiore
-Ospedale Psichiatrico = Osp. Psichiatr.
-Ospedali d'Italia Chirurgia = Osp. Ital. Chir.
-Osteoarthritis and Cartilage = Osteoarthritis Cartilage
-Osteopathic Hospital = Osteopath. Hosp.
-Osteopathic Hospital Leadership = Osteopath. Hosp. Leadersh.
-Osteoporosis International = Osteoporos. Int.
-Osterreichische Dentisten Zeitschrift = Osterr. Dent. Z.
-Osterreichische Hebammenzeitung = Osterr. Hebammenztg.
-Osterreichische Kneipp-Magazin = Osterr. Kneipp. Mag.
-Osterreichische Krankenpflegezeitschrift = Osterr. Krankenpflegez.
-Osterreichische Schwesternzeitung = Osterr. Schwesternztg.
-Osterreichische Zahnarzte-Zeitung = Osterr. Zahnarzteztg.
-Osterreichische Zahnprothetik = Osterr. Zahnprothet.
-Osterreichische Zahntechniker Handwerk = Osterr. Zahntech. Handwerk
-Osterreichische Zeitschrift fur Erforschung und Bekampfung der Krebskrankheit = Osterr. Z. Erforsch. Bekampf. Krebskr.
-Osterreichische Zeitschrift fur Stomatologie = Osterr. Z. Stomatol.
-Ostomy/Wound Management = Ostomy. Wound Manage.
-Oto-Rino-Laringologia Italiana = Otorinolaringol. Ital.
-Oto-Rino-Laringologie = Otorinolaringologie.
-Otolaryngologia Polska = Otolaryngol. Pol.
-Otolaryngologic Clinics of North America = Otolaryngol. Clin. North Am.
-Otolaryngology = Otolaryngology
-Otolaryngology - Head and Neck Surgery = Otolaryngol. Head Neck Surg.
-Otolaryngology and Head and Neck Surgery = Otolaryngol. Head Neck Surg.
-Otology and Neurotology = Otol. Neurotol.
-Ou Daigaku Shigakushi = Ou Daigaku Shigakushi
-Outcomes Management for Nursing Practice = Outcomes Manag. Nurs. Pract.
-Outlook and Bulletin, Southern Dental Society of New Jersey = Outlook Bull. South. Dent. Soc. N. J.
-Oxford Reviews of Reproductive Biology = Oxf. Rev. Reprod. Biol.
-Oxford Surveys on Eukaryotic Genes = Oxf. Surv. Eukaryot. Genes
-Oxidation Communications=Oxid. Commun.;OXCODW;4/YR
-Oxidation of Metals=Oxid. Met.;OXMEAF;BM
-Oyo Yakuri=Oyo Yakuri;OYYAA2;BM
-Ozone: Science & Engineering=Ozone: Sci. Eng.;OZSEDS;BM
-PA Journal = PA J.
-PAS Reporter = PAS Rep.
-PCR Methods and Applications = PCR Methods Appl.
-PCR Reporter = PCR Rep.
-PDA Journal of Pharmaceutical Science and Technology = PDA J. Pharm. Sci. Technol.
-PDM; Physicians Drug Manual = PDM.
-PFCA Review = PFCA Rev.
-PLoS Biology = PLoS Biol.
-PLoS Computational Biology = PLoS Comput. Biol.
-PLoS Genetics = PLoS Genet.
-PLoS Medicine = PLoS Med.
-PLoS Pathogens = PLoS Pathog.
-PMSE Preprints=PMSE Prepr.;PPMRA9;SA
-PRN Forum = PRN Forum
-Pacific Medicine and Surgery = Pac. Med. Surg.
-Pacific Symposium on Biocomputing = Pac. Symp. Biocomput.
-Pacing and Clinical Electrophysiology = Pacing Clin. Electrophysiol.
-Padiatrie und Grenzgebiete = Padiatr. Grenzgeb.
-Padiatrie und Padologie = Padiatr. Padol.
-Padiatrie und Padologie. Supplementum = Padiatr. Padol. Suppl.
-Paediatria Universitatis Tokyo = Paediatr. Univ. Tokyo
-Paediatric Anaesthesia = Paediatr. Anaesth.
-Paediatric Drugs = Paediatr. Drugs
-Paediatric Nursing = Paediatr. Nurs.
-Paediatric Respiratory Reviews = Paediatr. Respir. Rev.
-Paediatric and Perinatal Epidemiology = Paediatr. Perinat. Epidemiol.
-Paediatrica Indonesiana = Paediatr. Indones.
-Paediatrician = Paediatrician
-Paedovita = Paedovita
-Pahlavi Medical Journal = Pahlavi Med. J.
-Pain = Pain
-Pain Management Nursing = Pain Manag. Nurs.
-Pain Research and Management = Pain Res. Manag.
-Pain and Headache = Pain Headache
-Pain. Supplement = Pain. Suppl.
-Pakistan Dental Review = Pak. Dent. Rev.
-Pakistan Journal of Surgery, Gynaecology and Obstetrics = Pak. J. Surg. Gynaecol. Obstet.
-Pakistan Nursing and Health Review = Pak. Nurs. Health Rev.
-Palliative Medicine = Palliat. Med.
-Palliative and Supportive Care = Palliat. Support. Care
-Pancreas = Pancreas
-Pancreatology = Pancreatology
-Panminerva Medica = Panminerva Med.
-Paper Series, United Hospital Fund of New York = Pap. Ser. United Hosp. Fund N. Y.
-Papers in Meteorology and Geophysics = Pap. Meteor. Geophys.
-Papers in Physical Oceanography and Meteorology = Pap. Phys. Oceanogr. Meteor.
-Papers, National Conference for Professional Nurses and Physicians = Pap. Natl. Conf. Prof. Nurses Physicians
-Papua New Guinea Medical Journal = P. N. G. Med. J.
-Paramedics International = Paramed. Int.
-Paraplegia = Paraplegia
-Parasite = Parasite
-Parasite Immunology = Parasite Immunol.
-Parasitology = Parasitology
-Parasitology International = Parasitol. Int.
-Parasitology Research = Parasitol. Res.
-Parassitologia = Parassitologia
-Parazitologiia = Parazitologiia
-Parking = Parking
-Parodontologia e Stomatologia (Nuova) = Parodontol. Stomatol. (Nuova)
-Parodontologie = Parodontologie
-Parodontologie and Academy Review = Parodontol. Acad. Rev.
-Paroi Arterielle = Paroi Arterielle
-Particulate Science and Technology=Part. Sci. Technol.;PTCHDS;Q
-Pathobiology = Pathobiology
-Pathobiology Annual = Pathobiol. Annu.
-Pathologe = Pathologe
-Pathologia Europaea = Pathol. Eur.
-Pathologia Veterinaria = Pathol. Vet.
-Pathologia et Microbiologia = Pathol. Microbiol. (Basel)
-Pathologica = Pathologica
-Pathologie et Biologie = Pathol. Biol.
-Pathologie-Biologie = Pathol. Biol. (Paris)
-Pathologist = Pathologist
-Pathology = Pathology (Phila.)
-Pathology Annual = Pathol. Annu.
-Pathology International = Pathol. Int.
-Pathology Oncology Research = Pathol. Oncol. Res.
-Pathology and Immunopathology Research = Pathol. Immunopathol. Res.
-Pathology, Research and Practice = Pathol. Res. Pract.
-Pathophysiology of Haemostasis and Thrombosis = Pathophysiol. Haemost. Thromb.
-Patient Accounts = Patient Acc.
-Patient Care = Patient Care
-Patient Counselling and Health Education = Patient Couns. Health Educ.
-Patient Education Newsletter = Patient Educ. Newsl.
-Patient Education and Counseling = Patient Educ. Couns.
-Patient-Focused Care = Patient. Focus. Care
-Patient-Focused Care and Satisfaction = Patient. Focus. Care Satisf.
-Patologia Polska = Patol. Pol.
-Patologia e Clinica Ostetrica e Ginecologica = Patol. Clin. Ostet. Ginecol.
-Patologicheskaia Fiziologiia i Eksperimentalnaia Terapiia = Patol. Fiziol. Eksp. Ter.
-Pavlovian Journal of Biological Science = Pavlov. J. Biol. Sci.
-Pediatria = Pediatria (Santiago)
-Pediatria Medica e Chirurgica = Pediatr. Med. Chir.
-Pediatria Panamericana = Pediatr. Panam.
-Pediatria Polska = Pediatr. Pol.
-Pediatria Pratica = Pediatr. Prat.
-Pediatric Allergy and Immunology = Pediatr. Allergy Immunol.
-Pediatric Annals = Pediatr. Ann.
-Pediatric Blood and Cancer = Pediatr. Blood Cancer
-Pediatric Cardiology = Pediatr. Cardiol.
-Pediatric Case Reviews = Pediatr. Case Rev.
-Pediatric Clinics of North America = Pediatr. Clin. North Am.
-Pediatric Dentistry = Pediatr. Dent.
-Pediatric Dermatology = Pediatr. Dermatol.
-Pediatric Emergency Care = Pediatr. Emerg. Care
-Pediatric Endocrinology Reviews = Pediatr. Endocrinol. Rev.
-Pediatric Hematology and Oncology = Pediatr. Hematol. Oncol.
-Pediatric Infectious Disease = Pediatr. Infect. Dis.
-Pediatric Infectious Disease Journal = Pediatr. Infect. Dis. J.
-Pediatric Nephrology = Pediatr. Nephrol.
-Pediatric Neurology = Pediatr. Neurol.
-Pediatric Neuroscience = Pediatr. Neurosci.
-Pediatric Neurosurgery = Pediatr. Neurosurg.
-Pediatric Nursing = Pediatr. Nurs.
-Pediatric Pathology = Pediatr. Pathol.
-Pediatric Pathology and Laboratory Medicine = Pediatr. Pathol. Lab. Med.
-Pediatric Pathology and Molecular Medicine = Pediatr. Pathol. Mol. Med.
-Pediatric Pharmacology = Pediatr. Pharmacol. (New York)
-Pediatric Pulmonology = Pediatr. Pulmonol.
-Pediatric Pulmonology. Supplement = Pediatr. Pulmonol. Suppl.
-Pediatric Radiology = Pediatr. Radiol.
-Pediatric Rehabilitation = Pediatr. Rehabil.
-Pediatric Research = Pediatr. Res.
-Pediatric Surgery International = Pediatr. Surg. Int.
-Pediatric Transplantation = Pediatr. Transplant.
-Pediatric and Developmental Pathology = Pediatr. Dev. Pathol.
-Pediatrician = Pediatrician
-Pediatrics = Pediatrics
-Pediatrics International = Pediatr. Int.
-Pediatrics in Review = Pediatr. Rev.
-Pediatrie = Pediatrie
-Pediatriia = Pediatriia
-Pediatriia, Akusherstvo i Ginekologiia = Pediatr. Akush. Ginekol.
-Pedodontie Francaise = Pedod. Fr.
-Pelican News = Pelican News
-Penn Dental Journal = Penn Dent. J. (Phila.)
-Pennsylvania Dental Journal = Pa. Dent. J. (Harrisb.)
-Pennsylvania Health and You = Pa. Health You
-Pennsylvania Medical Journal = Pa. Med. J.
-Pennsylvania Medicine = Pa. Med.
-Pennsylvania Nurse = Pa. Nurse
-People = People
-Peptide Research = Pept. Res.
-Peptides = Peptides
-Peptides (New York, NY, United States)=Peptides (N. Y., NY, U. S.);PPTDD5;M
-Perception = Perception
-Perception and Psychophysics = Percept. Psychophys.
-Perceptual and Motor Skills = Percept. Mot. Skills
-Perfusion = Perfusion
-Periodontal Abstracts / Journal of the Western Society of Periodontology = Periodontal Abstr.
-Periodontal Case Reports = Periodontal Case Rep.
-Periodontal Clinical Investigations = Periodontal Clin. Investig.
-Periodontics = Periodontics
-Periodontology 2000 = Periodontol. 2000
-Perioperative Nursing Quarterly = Perioper. Nurs. Q.
-Peritoneal Dialysis International = Perit. Dial. Int.
-Personnel = Personnel
-Personnel Administrator = Pers. Adm.
-Personnel Journal = Pers. J.
-Perspectivas = Perspectivas
-Perspectives = Perspectives (Montclair)
-Perspectives in Biology and Medicine = Perspect. Biol. Med.
-Perspectives in Healthcare Risk Management = Perspect. Healthc. Risk Manage.
-Perspectives in Nephrology and Hypertension = Perspect. Nephrol. Hypertens.
-Perspectives in Pediatric Pathology = Perspect. Pediatr. Pathol.
-Perspectives in Psychiatric Care = Perspect. Psychiatr. Care
-Perspectives in Respiratory Nursing = Perspect. Respir. Nurs.
-Perspectives on Accreditation = Perspect. Accredit.
-Perspectives on Addictions Nursing = Perspect. Addict. Nurs.
-Perspectives on Developmental Neurobiology = Perspect. Dev. Neurobiol.
-Perspectives on Medicaid Management = Perspect. Medicaid Manage.
-Perspectives on Medicaid and Medicare Management = Perspect. Medicaid Medicare Manage.
-Perspectives on Sexual and Reproductive Health = Perspect. Sex. Reprod. Health
-Pesquisa Odontologica Brasileira = Pesqui. Odontol. Bras.
-Pest Management Science = Pest Manag. Sci.
-Pesticide Biochemistry and Physiology = Pestic. Biochem. Physiol.
-Pesticides Monitoring Journal = Pestic. Monit. J.
-Petroleum Science and Technology=Pet. Sci. Technol.;PSTEFV;M
-Pflege = Pflege
-Pflege Aktuell = Pflege Aktuell
-Pflege Zeitschrift = Pflege Z.
-Pfluegers Archiv=Pfluegers Arch.;PFLABK;M
-Pflugers Archiv (European Journal of Physiology) = Pflugers Arch.
-Pflugers Archiv fur die Gesamte Physiologie des Menschen und der Tiere = Pflugers Arch. Gesamte Physiol. Menschen Tiere
-Pharmaceutica Acta Helvetiae = Pharm. Acta Helv.
-Pharmaceutical Biotechnology = Pharm. Biotechnol.
-Pharmaceutical Chemistry Journal=Pharm. Chem. J.;PCJOAU;M
-Pharmaceutical Development and Technology = Pharm. Dev. Technol.
-Pharmaceutical Research = Pharm. Res.
-Pharmaceutical Statistics = Pharm. Stat.
-Pharmaceutisch Weekblad = Pharm. Weekbl.
-Pharmaceutisch Weekblad. Scientific Edition = Pharm. Weekbl. Sci.
-Pharmacoeconomics = Pharmacoeconomics
-Pharmacogenetics = Pharmacogenetics
-Pharmacogenetics and Genomics = Pharmacogenet. Genomics
-Pharmacogenomics = Pharmacogenomics
-Pharmacogenomics Journal = Pharmacogenomics J.
-Pharmacological Reports = Pharmacol. Rep.
-Pharmacological Research = Pharmacol. Res.
-Pharmacological Research Communications = Pharmacol. Res. Commun.
-Pharmacological Reviews = Pharmacol. Rev.
-Pharmacology = Pharmacology
-Pharmacology & Therapeutics=Pharmacol. Ther.;PHTHDT;M
-Pharmacology and Therapeutics = Pharmacol. Ther.
-Pharmacology and Therapeutics in Dentistry = Pharmacol. Ther. Dent.
-Pharmacology and Therapeutics. Part B, General and Systematic Pharmacology = Pharmacol. Ther. [B]
-Pharmacology and Toxicology = Pharmacol. Toxicol.
-Pharmacology for Physicians = Pharmacol. Physicians
-Pharmacology, Biochemistry and Behavior = Pharmacol. Biochem. Behav.
-Pharmacopsychiatria = Pharmacopsychiatria
-Pharmacopsychiatry = Pharmacopsychiatry
-Pharmacotherapy = Pharmacotherapy
-Pharmacy Management Combined with the American Journal of Pharmacy = Pharm. Manage. Comb. Am. J. Pharm.
-Pharmacy Practice Management Quarterly = Pharm. Pract. Manag. Q.
-Pharmacy Times = Pharm. Times
-Pharmacy World and Science = Pharm. World Sci.
-Pharmakopsychiatrie Neuro-Psychopharmakologie = Pharmakopsychiatr. Neuropsychopharmakol.
-Pharmakotherapia = Pharmakotherapia
-Pharmatherapeutica = Pharmatherapeutica
-Pharmazeutische Praxis = Pharm. Prax.
-Pharmazeutische Zentralhalle fur Deutschland = Pharm. Zentralhalle Dtschl.
-Pharmazie = Pharmazie
-Pharmazie in Unserer Zeit = Pharm. Unserer Zeit
-Pharmeuropa Bio = Pharmeuropa Bio
-Pharos of Alpha Omega Alpha Honor Medical Society = Pharos
-Phase Transitions=Phase Transitions;PHTRDP;M
-Philippine Journal of Nursing = Philipp. J. Nurs.
-Philippine Journal of Surgery and Surgical Specialties = Philipp. J. Surg. Surg. Spec.
-Phillip Journal = Phillip J.
-Phillip Journal fur Restaurative Zahnmedizin = Phillip J. Restaur. Zahnmed.
-Philosophical Magazine=Philos. Mag.;PMHABF;36/YR
-Philosophical Magazine Letters=Philos. Mag. Lett.;PMLEEG;M
-Philosophical Transactions of the Royal Society of London = Philos. Trans. Roy. Soc. London
-Philosophical Transactions of the Royal Society of London. Series B, Biological Sciences = Philos. Trans. R. Soc. Lond. B. Biol. Sci.
-Phlebologie = Phlebologie
-Phonetica = Phonetica
-Phosphorus, Sulfur and Silicon and the Related Elements=Phosphorus, Sulfur Silicon Relat. Elem.;PSSLEC;M
-Photo-Dermatology = Photodermatol.
-Photochemical & Photobiological Sciences=Photochem. Photobiol. Sci.;PPSHCB;M
-Photochemical and Photobiological Sciences = Photochem. Photobiol. Sci.
-Photochemistry and Photobiology = Photochem. Photobiol.
-Photodermatology, Photoimmunology and Photomedicine = Photodermatol. Photoimmunol. Photomed.
-Photomedicine and Laser Surgery = Photomed. Laser Surg.
-Photophysiology = Photophysiology
-Photosynthesis Research=Photosynth. Res.;PHRSDI;M
-Physica B: Condensed Matter (Amsterdam, Netherlands)=Physica B (Amsterdam, Neth.);PHYBE3;16/YR
-Physica C: Superconductivity and Its Applications (Amsterdam, Netherlands)=Physica C (Amsterdam, Neth.);PHYCE6;68/YR
-Physica Scripta=Phys. Scr.;PHSTBO;M
-Physica Scripta, T=Phys. Scr., T;PHSTER;IRR
-Physica Status Solidi A: Applications and Materials Science=Phys. Status Solidi A;PSSABA;15/YR
-Physica Status Solidi B: Basic Solid State Physics=Phys. Status Solidi B;PSSBBD;15/YR
-Physica Status Solidi C: Conferences and Critical Reviews=Phys. Status Solidi C;PSSCGL;12/YR
-Physical Biology = Phys. Biol.
-Physical Chemistry Chemical Physics=Phys. Chem. Chem. Phys.;PPCPFQ;SM
-Physical Medicine and Rehabilitation Clinics of North America = Phys. Med. Rehabil. Clin. N. Am.
-Physical Review = Phys. Rev.
-Physical Review A: Atomic, Molecular, and Optical Physics=Phys. Rev. A: At., Mol., Opt. Phys.;PLRAAN;M
-Physical Review B: Condensed Matter and Materials Physics=Phys. Rev. B: Condens. Matter Mater. Phys.;PRBMDO;48/YR
-Physical Review C: Nuclear Physics=Phys. Rev. C: Nucl. Phys.;PRVCAN;M
-Physical Review D: Particles and Fields=Phys. Rev. D: Part. Fields;PRVDAQ;SM
-Physical Review E: Statistical, Nonlinear, and Soft Matter Physics=Phys. Rev. E: Stat., Nonlinear, Soft Matter Phys.;PRESCM;M
-Physical Review Letters = Phys. Rev. Lett.
-Physical Review. E, Statistical, Nonlinear, and Soft Matter Physics = Phys. Rev. E Stat. Nonlin. Soft Matter Phys.
-Physical Therapy = Phys. Ther.
-Physician Assistant = Physician Assist.
-Physician Assistant. Health Practitioner = Physician Assist. Health Pract.
-Physician Executive = Physician Exec.
-Physician Relations Update = Physician Relat. Update
-Physicians Management = Physicians Manage.
-Physics Letters A=Phys. Lett. A;PYLAAG;84/YR
-Physics Letters B=Phys. Lett. B;PYLBAJ;W
-Physics and Chemistry of Glasses=Phys. Chem. Glasses;PCGLA6;BM
-Physics and Chemistry of Liquids=Phys. Chem. Liq.;PCLQAC;6/YR
-Physics and Chemistry of Minerals=Phys. Chem. Miner.;PCMIDU;10/YR
-Physics and Chemistry of the Earth B = Phys. Chem Earth B
-Physics in Medicine and Biology = Phys. Med. Biol.
-Physics of Atomic Nuclei=Phys. At. Nucl.;PANUEO;M
-Physics of Fluids = Phys. Fluids
-Physics of Plasmas=Phys. Plasmas;PHPAEN;M
-Physics of the Solid State=Phys. Solid State;PSOSED;M
-Physikalische Zeitschrift = Phys. Z.
-Physiologia Bohemoslovaca = Physiol. Bohemoslov.
-Physiologia Bohemoslovenica = Physiol. Bohemoslov.
-Physiologia Plantarum=Physiol. Plant.;PHPLAI;M
-Physiological Chemistry and Physics = Physiol. Chem. Phys.
-Physiological Chemistry and Physics and Medical NMR = Physiol. Chem. Phys. Med. NMR
-Physiological Genomics = Physiol. Genomics
-Physiological Measurement = Physiol. Meas.
-Physiological Research = Physiol. Res.
-Physiological Reviews = Physiol. Rev.
-Physiological Zoology = Physiol. Zool.
-Physiological and Biochemical Zoology = Physiol. Biochem. Zool.
-Physiologie = Physiologie
-Physiologist = Physiologist
-Physiology = Physiology
-Physiology & Behavior=Physiol. Behav.;PHBHA4;15/YR
-Physiology Teacher = Physiol. Teach.
-Physiology and Behavior = Physiol. Behav.
-Physiology and Pharmacology for Physicians = Physiol. Pharmacol. Physicians
-Physiotherapy = Physiotherapy
-Physiotherapy Canada = Physiother. Can.
-Physiotherapy Research International = Physiother. Res. Int.
-Phytochemical Analysis=Phytochem. Anal.;PHANEL;BM
-Phytochemistry = Phytochemistry
-Phytochemistry (Elsevier)=Phytochemistry (Elsevier);PYTCAS;SM
-Phytochemistry Reviews=Phytochem. Rev.;PRHEBS;3/YR
-Phytomedicine = Phytomedicine
-Phytopathology = Phytopathology
-Phytotherapy Research = Phytother. Res.
-Pielegniarka i Polozna = Pieleg. Polozna
-Pigment Cell Research = Pigment Cell Res.
-Pituitary = Pituitary
-Placenta = Placenta
-Placenta. Supplement = Placenta. Suppl.
-Plant Cell = Plant Cell
-Plant Cell Reports=Plant Cell Rep.;PCRPD8;12/YR
-Plant Foods for Human Nutrition = Plant Foods Hum. Nutr.
-Plant Growth Regulation=Plant Growth Regul.;PGRED3;9/YR
-Plant Journal = Plant J.
-Plant Molecular Biology = Plant Mol. Biol.
-Plant Physiology = Plant Physiol.
-Plant Physiology and Biochemistry (Amsterdam, Netherlands)=Plant Physiol. Biochem. (Amsterdam, Neth.);PPBIEX;M
-Plant Science (Amsterdam, Netherlands)=Plant Sci. (Amsterdam, Neth.);PLSCE4;M
-Plant and Cell Physiology = Plant Cell Physiol.
-Plant and Soil=Plant Soil;PLSOA2;20/YR
-Planta = Planta
-Planta Medica = Planta Med.
-Plasma Chemistry and Plasma Processing=Plasma Chem. Plasma Process.;PCPPDW;BM
-Plasma Processes and Polymers=Plasma Processes Polym.;PPPLA6;9/YR
-Plasmid = Plasmid
-Plastic Surgical Nursing = Plast. Surg. Nurs.
-Plastic and Reconstructive Surgery = Plast. Reconstr. Surg.
-Plasticheskie Massy=Plast. Massy;PLMSAI;IRR
-Plastics, Rubber and Composites=Plast., Rubber Compos.;PRUCFN;10/YR
-Platelets=Platelets;PLTEEF;8/YR
-Plucne Bolesti = Plucne Bolesti
-Plucne Bolesti i Tuberkuloza = Plucne Bolesti Tuberk.
-Plugger; Iowa Dental Assistants Journal = Plugger.
-Pneumoftiziologia = Pneumoftiziologia
-Pneumologie = Pneumologie
-Pneumonologia Polska = Pneumonol. Pol.
-Pneumonologia i Alergologia Polska = Pneumonol. Alergol. Pol.
-Pneumonologie = Pneumonologie
-Policlinico. Sezione Chirurgica = Policlinico. [Chir.]
-Policlinico. Sezione Medica = Policlinico. [Med.]
-Policlinico. Sezione Pratica = Policlinico. [Prat.]
-Policy Analysis = Policy Anal.
-Policy Statement, Royal College of General Practitioners = Policy Statement R. Coll. Gen. Pract.
-Polimery w Medycynie = Polim. Med.
-Polish Journal of Chemistry=Pol. J. Chem.;PJCHDQ;M
-Polish Journal of Microbiology = Pol. J. Microbiol.
-Polish Journal of Occupational Medicine = Pol. J. Occup. Med.
-Polish Journal of Occupational Medicine and Environmental Health = Pol. J. Occup. Med. Environ. Health
-Polish Journal of Pathology = Pol. J. Pathol.
-Polish Journal of Pharmacology = Pol. J. Pharmacol.
-Polish Journal of Pharmacology and Pharmacy = Pol. J. Pharmacol. Pharm.
-Polish Journal of Veterinary Sciences = Pol. J. Vet. Sci.
-Polish Medical Journal = Pol. Med. J.
-Polish Medical Sciences and History Bulletin = Pol. Med. Sci. Hist. Bull.
-Polski Merkuriusz Lekarski = Pol. Merkuriusz Lek.
-Polski Przeglad Chirurgiczny = Pol. Przegl. Chir.
-Polski Przeglad Radiologii = Pol. Przegl. Radiol.
-Polski Przeglad Radiologii i Medycyny Nuklearnej = Pol. Przegl. Radiol. Med. Nukl.
-Polski Tygodnik Lekarski = Pol. Tyg. Lek.
-Polskie Archiwum Medycyny Wewnetrznej = Pol. Arch. Med. Wewn.
-Polskie Archiwum Weterynaryjne = Pol. Arch. Weter.
-Polycyclic Aromatic Compounds=Polycyclic Aromat. Compd.;PARCEO;5/YR
-Polyhedron=Polyhedron;PLYHDE;18/YR
-Polymer=Polymer;POLMAG;BW
-Polymer (Korea)=Polymer (Korea);POLLDG;BM
-Polymer Bulletin (Heidelberg, Germany)=Polym. Bull. (Heidelberg, Ger.);POBUDR;M
-Polymer Composites=Polym. Compos.;PCOMDI;BM
-Polymer Degradation and Stability=Polym. Degrad. Stab.;PDSTDW;M
-Polymer Engineering and Science=Polym. Eng. Sci.;PYESAZ;M
-Polymer International=Polym. Int.;PLYIEI;M
-Polymer Journal (Tokyo, Japan)=Polym. J. (Tokyo, Jpn.);POLJB8;M
-Polymer Preprints (American Chemical Society, Division of Polymer Chemistry)=Polym. Prepr. (Am. Chem. Soc., Div. Polym. Chem.);ACPPAY;SA
-Polymer Testing=Polym. Test.;POTEDZ;8/YR
-Polymer-Plastics Technology and Engineering=Polym.-Plast. Technol. Eng.;PPTEC7;9/YR
-Polymers & Polymer Composites=Polym. Polym. Compos.;PPOCEC;8/YR
-Polymers for Advanced Technologies=Polym. Adv. Technol.;PADTE5;M
-Population Reports. Series A, Oral Contraceptives = Popul. Rep. A
-Population Reports. Series B, Intrauterine Devices = Popul. Rep. B
-Population Reports. Series C, Female Sterilization = Popul. Rep. C
-Population Reports. Series C, Sterilization Female = Popul. Rep. C
-Population Reports. Series D, Male Sterilization = Popul. Rep. D
-Population Reports. Series D, Sterilization Male = Popul. Rep. D
-Population Reports. Series E, Law and Policy = Popul. Rep. E
-Population Reports. Series F, Pregnancy Termination = Popul. Rep. F
-Population Reports. Series G, Prostaglandins = Popul. Rep. G
-Population Reports. Series H, Barrier Methods = Popul. Rep. H
-Population Reports. Series I, Periodic Abstinence = Popul. Rep. I
-Population Reports. Series J, Family Planning Programs = Popul. Rep. J
-Population Reports. Series K, Injectables and Implants = Popul. Rep. K
-Population Reports. Series L, Issues in World Health = Popul. Rep. L
-Population Reports. Series M, Special Topic Monographs = Popul. Rep. M
-Population Reports. Series M, Special Topics = Popul. Rep. M
-Population Reports. Special Topic Monographs = Popul. Rep. Spec. Top. Monogr.
-Population Trends = Popul. Trends
-Postepy Biochemii = Postepy Biochem.
-Postepy Higieny i Medycyny Doswiadczalnej = Postepy Hig. Med. Dosw.
-Postgraduate Medical Journal = Postgrad. Med. J.
-Postgraduate Medicine = Postgrad. Med.
-Poultry Science = Poult. Sci.
-Poumon et le Coeur = Poumon Coeur
-Poverkhnost=Poverkhnost;PFKMDJ;M
-Powder Diffraction=Powder Diffr.;PODIE2;Q
-Powder Metallurgy=Powder Metall.;PWMTAU;Q
-Powder Metallurgy and Metal Ceramics=Powder Metall. Met. Ceram.;PMMCEF;BM
-Powder Technology=Powder Technol.;POTEBX;33/YR
-Prace, Lodzkie Towarzystwo Naukowe, Wydzial IV, Nauk Lekarskich = Pr. Lodz. Tow. Nauk. [IV]
-Pracovni Lekarstvi = Prac. Lek.
-Practica Odontologica = Pract. Odontol.
-Practica Oto-Rhino-Laryngologica = Pract. Otorhinolaryngol. (Basel)
-Practical Dental Monographs = Pract. Dent. Monogr.
-Practical Periodontics and Aesthetic Dentistry = Pract. Periodontics Aesthet. Dent.
-Practical Spectroscopy=Pract. Spectrosc.;PSPED9;IRR
-Practice Digest = Pract. Dig.
-Practicing Midwife = Pract. Midwife
-Practitioner = Practitioner
-Prague Medical Report = Prague Med. Rep.
-Prairie Rose = Prairie Rose
-Prakticke Zubni Lekarstvi = Prakt. Zubn. Lek.
-Praktische Anaesthesie, Wiederbelebung und Intensivtherapie = Prakt. Anaesth.
-Praktische Kieferorthopadie = Prakt. Kieferorthop.
-Praxis = Praxis
-Praxis der Kinderpsychologie und Kinderpsychiatrie = Prax. Kinderpsychol. Kinderpsychiatr.
-Praxis der Kinderpsychologie und Kinderpsychiatrie. Beiheft = Prax. Kinderpsychol. Kinderpsychiatr. Beih.
-Praxis der Pneumologie = Prax. Pneumol.
-Praxis und Klinik der Pneumologie = Prax. Klin. Pneumol.
-Precambrian Research=Precambrian Res.;PCBRBY;32/YR
-Prehospital Emergency Care = Prehosp. Emerg. Care
-Prehospital and Disaster Medicine = Prehospital Disaster Med.
-Prenatal Diagnosis = Prenat. Diagn.
-Prensa Medica Argentina = Prensa Med. Argent.
-Prensa Medica Mexicana = Prensa Med. Mex.
-Preparative Biochemistry = Prep. Biochem.
-Preparative Biochemistry & Biotechnology=Prep. Biochem. Biotechnol.;PBBIF4;Q
-Preparative Biochemistry and Biotechnology = Prep. Biochem. Biotechnol.
-Preprints - American Chemical Society, Division of Petroleum Chemistry=Prepr. - Am. Chem. Soc., Div. Pet. Chem.;ACPCAT;4/YR
-Preprints of Symposia - American Chemical Society, Division of Fuel Chemistry=Prepr. Symp. - Am. Chem. Soc., Div. Fuel Chem.;PSADFZ;2/YR
-Prescrire International = Prescrire Int.
-Presse Medicale = Presse Med.
-Presse Thermale et Climatique = Presse Therm. Clim.
-Preventing Chronic Disease = Prev. Chronic. Dis.
-Prevention Science = Prev. Sci.
-Prevention in Human Services = Prev. Hum. Serv.
-Preventive Cardiology = Prev. Cardiol.
-Preventive Medicine = Prev. Med.
-Preventive Veterinary Medicine = Prev. Vet. Med.
-Prevenzione Stomatologica = Prev. Stomatol.
-Prevenzione e Assistenza Dentale = Prev. Assist. Dent.
-Pride Institute Journal of Long Term Home Health Care = Pride Inst. J. Long Term Home Health Care
-Prikladnaia Biokhimiia i Mikrobiologiia = Prikl. Biokhim. Mikrobiol.
-Primary Care = Prim. Care
-Primary Dental Care = Prim. Dent. Care
-Primates in Medicine = Primates Med.
-Princess Takamatsu Symposia = Princess Takamatsu Symp.
-Pro Re Nata = Pro Re Nata
-Probe = Probe
-Problemes Actuels d Oto-Rhino-Laryngologie = Probl. Actuels Otorhinolaryngol.
-Problemes Actuels d'Endocrinologie et de Nutrition = Probl. Actuels Endocrinol. Nutr.
-Problemi na Khigienata = Probl. Khig.
-Problems in Veterinary Medicine = Probl. Vet. Med.
-Problemy Endokrinologii = Probl. Endokrinol. (Mosk.)
-Problemy Endokrinologii i Gormonoterapii = Probl. Endokrinol. Gormonoter.
-Problemy Gematologii i Perelivaniia Krovi = Probl. Gematol. Pereliv. Krovi
-Problemy Kosmicheskoi Biologii = Probl. Kosm. Biol.
-Problemy Medycyny Wieku Rozwojowego = Probl. Med. Wieku Rozwoj.
-Problemy Severa = Probl. Sev.
-Problemy Sotsialnoi Gigieny i Istoriia Meditsiny = Probl. Sotsialnoi Gig. Istor. Med.
-Problemy Tuberkuleza = Probl. Tuberk.
-Proceedings - Electrochemical Society=Proc. - Electrochem. Soc.;PESODO;IRR
-Proceedings and Papers of the Annual Conference of the California Mosquito Control Association = Proc. Pap. Annu. Conf. Calif. Mosq. Control Assoc.
-Proceedings of the American Thoracic Society = Proc. Am. Thorac. Soc.
-Proceedings of the Annual Clinical Spinal Cord Injury Conference = Proc. Annu. Clin. Spinal Cord Inj. Conf.
-Proceedings of the Annual Conference on Research in Medical Education = Proc. Annu. Conf. Res. Med. Educ.
-Proceedings of the Annual Meeting of the American Psychopathological Association = Proc. Annu. Meet. Am. Psychopathol. Assoc.
-Proceedings of the Annual Symposium of the Eugenics Society = Proc. Annu. Symp. Eugen. Soc.
-Proceedings of the Association of American Physicians = Proc. Assoc. Am. Physicians
-Proceedings of the Australian Association of Neurologists = Proc. Aust. Assoc. Neurol.
-Proceedings of the British Paedodontic Society = Proc. Br. Paedod. Soc.
-Proceedings of the British Society of Dental and Maxillofacial Radiology = Proc. Br. Soc. Dent. Maxillofac. Radiol.
-Proceedings of the Cardiff Medical Society = Proc. Cardiff Med. Soc.
-Proceedings of the Chinese Academy of Medical Sciences and the Peking Union Medical College = Proc. Chin. Acad. Med. Sci. Peking Union Med. Coll.
-Proceedings of the Clinical Dialysis and Transplant Forum = Proc. Clin. Dial. Transplant Forum
-Proceedings of the Estonian Academy of Sciences, Chemistry=Proc. Est. Acad. Sci., Chem.;PESCFO;Q
-Proceedings of the European Dialysis and Transplant Association = Proc. Eur. Dial. Transplant Assoc.
-Proceedings of the European Dialysis and Transplant Association - European Renal Association = Proc. Eur. Dial. Transplant Assoc. Eur. Ren. Assoc.
-Proceedings of the European Prosthodontic Association = Proc. Eur. Prosthodontic Assoc.
-Proceedings of the Finnish Dental Society = Proc. Finn. Dent. Soc.
-Proceedings of the Health Policy Forum = Proc. Health Policy Forum
-Proceedings of the Institute of Medicine of Chicago = Proc. Inst. Med. Chic.
-Proceedings of the Institution of Mechanical Engineers. Part H, Journal of Engineering in Medicine = Proc. Inst. Mech. Eng. [H]
-Proceedings of the International Academy of Oral Pathology = Proc. Int. Acad. Oral Pathol.
-Proceedings of the Koninklijke Nederlandse Akademie Van Wetenschappen. Series C: Biological and Medical Sciences = Proc. K. Ned. Akad. Wet. C
-Proceedings of the Mine Medical Officers Association = Proc. Mine Med. Off. Assoc.
-Proceedings of the Mine Medical Officers Association of SA = Proc. Mine Med. Off. Assoc. SA
-Proceedings of the National Academy of Sciences of the United States of America = Proc. Natl. Acad. Sci. U. S. A.
-Proceedings of the National Cancer Conference = Proc. Natl. Cancer Conf.
-Proceedings of the National Science Council, Republic of China. Part B, Life Sciences = Proc. Natl. Sci. Counc. Repub. China B
-Proceedings of the Nutrition Society = Proc. Nutr. Soc.
-Proceedings of the Physiological Society = Proc. Physiol. Soc.
-Proceedings of the Royal Irish Academy. Section B: Biological, Geological and Chemical Science = Proc. R. Ir. Acad. [B]
-Proceedings of the Royal Society of London = Proc. Roy. Soc. London
-Proceedings of the Royal Society of London. Series B: Biological Sciences = Proc. R. Soc. Lond. B Biol. Sci.
-Proceedings of the Royal Society of Medicine = Proc. R. Soc. Med.
-Proceedings of the Rudolf Virchow Medical Society in the City of New York = Proc. Rudolf Virchow Med. Soc. City N. Y.
-Proceedings of the Society for Experimental Biology and Medicine = Proc. Soc. Exp. Biol. Med.
-Proceedings of the Veterans Administration Spinal Cord Injury Conference = Proc. Veterans Adm. Spinal Cord Inj. Conf.
-Proceedings of the Virchow-Pirquet Medical Society = Proc. Virchow. Pirquet Med. Soc.
-Proceedings of the Weekly Seminar in Neurology = Proc. Wkly. Semin. Neurol.
-Proceedings of the Western Pharmacology Society = Proc. West. Pharmacol. Soc.
-Proceedings, AMIA Annual Fall Symposium = Proc. AMIA Annu. Fall Symp.
-Proceedings, AMIA Annual Symposium = Proc. AMIA Symp.
-Proceedings, AMIA Symposium = Proc. AMIA Symp.
-Proceedings, Annual Management Conference, American Dental Association = Proc. Annu. Manage. Conf. Am. Dent. Assoc.
-Proceedings, Annual Meeting of the Medical Section of the American Council of Life Insurance = Proc. Annu. Meet. Med. Sect. Am. Counc. Life Insur.
-Proceedings, Annual Meeting of the Medical Section of the American Life Convention = Proc. Annu. Meet. Med. Sect. Am. Life Conv.
-Proceedings, Annual Meeting of the Medical Section of the American Life Insurance Association = Proc. Annu. Meet. Med. Sect. Am. Life Insur. Assoc.
-Proceedings, Annual Meeting of the United States Animal Health Association = Proc. Annu. Meet. U. S. Anim. Health Assoc.
-Proceedings, Annual Symposium on Computer Applications in Medical Care = Proc. Annu. Symp. Comput. Appl. Med. Care
-Proceedings, Foundation for Orthodontic Research = Proc. Found. Orthod. Res.
-Proceedings, International Conference on Intelligent Systems for Molecular Biology = Proc. Int. Conf. Intell. Syst. Mol. Biol.
-Proceedings, National Conference on Methadone Treatment = Proc. Natl. Conf. Methadone Treat.
-Proceedings, Nursing Theory Conference = Proc. Nurs. Theory Conf.
-Proceedings, Royal Society of Edinburgh. Section B: Biology = Proc. R. Soc. Edinb. [Biol.]
-Proceedings, Royal Society of Edinburgh. Section B: Natural Environment = Proc. R. Soc. Edinb. [Nat. Environ.]
-Proceedings, State Secretaries Management Conference, American Dental Association = Proc. State Secr. Manage. Conf. Am. Dent. Assoc.
-Process Biochemistry (Oxford, United Kingdom)=Process Biochem. (Oxford, U. K.);PBCHE5;12/YR
-Process Safety and Environmental Protection=Process Saf. Environ. Prot.;PSEPEM;6/YR
-Produits et Problemes Pharmaceutiques = Prod. Probl. Pharm.
-Professional Care of Mother and Child = Prof. Care Mother Child
-Professional Flashes = Prof. Flashes
-Professional Nurse = Prof. Nurse
-Professional Nursing Home = Prof. Nurs. Home
-Professional Safety = Prof. Saf.
-Professional Sanitation Management = Prof. Sanit. Manage.
-Professioni Infermieristiche = Prof. Inferm.
-Profile of Medical Practice = Profile Med. Pract.
-Profiles in Healthcare Marketing = Profiles Healthc. Mark.
-Profiles in Hospital Marketing = Profiles Hosp. Mark.
-Program Notes, Association of University Programs in Health Administration = Program Notes Assoc. Univ. Programs Health Adm.
-Progres Medical = Progr. Med. (Paris.)
-Progres Odonto-Stomatologique = Prog. Odontostomatol.
-Progres en Urologie = Prog. Urol.
-Progresos de Terapeutica Clinica = Progr. Ter. Clin.
-Progress in AIDS Pathology = Prog. AIDS Pathol.
-Progress in Allergy = Prog. Allergy
-Progress in Atomic Medicine = Prog. At. Med.
-Progress in Behavior Modification = Prog. Behav. Modif.
-Progress in Biochemical Pharmacology = Prog. Biochem. Pharmacol.
-Progress in Biocybernetics = Prog. Biocybern.
-Progress in Biometeorology, Division A: Progress in Human Biometeorology = Prog. Biometeorol.
-Progress in Biophysics and Molecular Biology = Prog. Biophys. Mol. Biol.
-Progress in Brain Research = Prog. Brain Res.
-Progress in Cardiovascular Diseases = Prog. Cardiovasc. Dis.
-Progress in Cardiovascular Nursing = Prog. Cardiovasc. Nurs.
-Progress in Cell Cycle Research = Prog. Cell Cycle Res.
-Progress in Chemical Toxicology = Prog. Chem. Toxicol.
-Progress in Clinical Cancer = Prog. Clin. Cancer
-Progress in Clinical Immunology = Prog. Clin. Immunol.
-Progress in Clinical Parasitology = Prog. Clin. Parasitol.
-Progress in Clinical Pathology = Prog. Clin. Pathol.
-Progress in Clinical and Biological Research = Prog. Clin. Biol. Res.
-Progress in Colloid & Polymer Science=Prog. Colloid Polym. Sci.;PCPSD7;IRR
-Progress in Crystal Growth and Characterization of Materials=Prog. Cryst. Growth Charact. Mater.;PCGMED;BM
-Progress in Drug Research = Prog. Drug Res.
-Progress in Experimental Personality Research = Prog. Exp. Pers. Res.
-Progress in Experimental Personality and Psychopathology Research = Prog. Exp. Pers. Psychopathol. Res.
-Progress in Experimental Tumor Research = Prog. Exp. Tumor Res.
-Progress in Food and Nutrition Science = Prog. Food Nutr. Sci.
-Progress in Growth Factor Research = Prog. Growth Factor Res.
-Progress in Hematology = Prog. Hematol.
-Progress in Hemostasis and Thrombosis = Prog. Hemost. Thromb.
-Progress in Histochemistry and Cytochemistry = Prog. Histochem. Cytochem.
-Progress in Immunobiological Standardization = Prog. Immunobiol. Stand.
-Progress in Industrial Microbiology = Prog. Ind. Microbiol.
-Progress in Inorganic Chemistry=Prog. Inorg. Chem.;PIOCAR;IRR
-Progress in Lipid Research = Prog. Lipid Res.
-Progress in Liver Diseases = Prog. Liver Dis.
-Progress in Medical Genetics = Prog. Med. Genet.
-Progress in Medical Virology = Prog. Med. Virol.
-Progress in Medicinal Chemistry = Prog. Med. Chem.
-Progress in Molecular and Subcellular Biology = Prog. Mol. Subcell. Biol.
-Progress in Neuro-Psychopharmacology = Prog. Neuropsychopharmacol.
-Progress in Neuro-Psychopharmacology and Biological Psychiatry = Prog. Neuropsychopharmacol. Biol. Psychiatry
-Progress in Neurobiology = Prog. Neurobiol.
-Progress in Neurology and Psychiatry = Prog. Neurol. Psychiatry
-Progress in Nuclear Magnetic Resonance Spectroscopy=Prog. Nucl. Magn. Reson. Spectrosc.;PNMRAT;8/YR
-Progress in Nuclear Medicine = Prog. Nucl. Med.
-Progress in Nucleic Acid Research and Molecular Biology = Prog. Nucleic Acid Res. Mol. Biol.
-Progress in Organic Coatings=Prog. Org. Coat.;POGCAT;12/YR
-Progress in Pediatric Surgery = Prog. Pediatr. Surg.
-Progress in Physical Therapy = Prog. Phys. Ther.
-Progress in Polymer Science=Prog. Polym. Sci.;PRPSB8;M
-Progress in Reaction Kinetics and Mechanism=Prog. React. Kinet. Mech.;PRKMF3;4/YR
-Progress in Retinal and Eye Research = Prog. Retin. Eye Res.
-Progress in Solid State Chemistry=Prog. Solid State Chem.;PSSTAW;Q
-Progress in Surface Science=Prog. Surf. Sci.;PSSFBP;SM
-Progress in Surgery = Prog. Surg.
-Progress in Veterinary Microbiology and Immunology = Prog. Vet. Microbiol. Immunol.
-Progress in the Chemistry of Fats and Other Lipids = Prog. Chem. Fats Other Lipids
-Progressive Architecture = Prog. Archit.
-Progressive Nurse = Progress. Nurse
-Progresso Medico = Progr. Med. (Napoli)
-Progresso Odontoiatrico = Prog. Odontoiatr.
-Promoting Health = Promot. Health
-Promotion Dentaire = Promot. Dent.
-Promotion et Education = Promot. Educ.
-Propellants, Explosives, Pyrotechnics=Propellants, Explos., Pyrotech.;PEPYD5;BM
-Prophylaxie Sanitaire et Morale = Prophyl. Sanit. Morale
-Prostaglandins = Prostaglandins
-Prostaglandins & Other Lipid Mediators=Prostaglandins Other Lipid Mediators;POLMFL;3/yr
-Prostaglandins Leukotrienes and Essential Fatty Acids = Prostaglandins Leukot. Essent. Fatty Acids
-Prostaglandins and Medicine = Prostaglandins Med.
-Prostaglandins and Other Lipid Mediators = Prostaglandins Other Lipid Mediat.
-Prostaglandins, Leukotrienes and Essential Fatty Acids=Prostaglandins, Leukotrienes Essent. Fatty Acids;PLEAEU;M
-Prostaglandins, Leukotrienes and Medicine = Prostaglandins. Leukot. Med.
-Prostate = Prostate
-Prostate. Supplement = Prostate. Suppl.
-Prosthetics and Orthotics International = Prosthet. Orthot. Int.
-Protection of Metals=Prot. Met.;PTNMAR;BM
-Protein Engineering = Protein Eng.
-Protein Engineering, Design & Selection=Protein Eng., Des. Sel.;PEDSBR;M
-Protein Engineering, Design and Selection = Protein Eng. Des. Sel.
-Protein Expression and Purification = Protein Expr. Purif.
-Protein Journal = Protein J.
-Protein Profile = Protein Profile
-Protein Reviews on the Web = Protein Rev. Web
-Protein Science = Protein Sci.
-Protein Sequences and Data Analysis = Protein Seq. Data Anal.
-Protein and Peptide Letters=Protein Pept. Lett.;PPELEN;8/YR
-Proteins = Proteins
-Proteins: Structure, Function, and Bioinformatics=Proteins: Struct., Funct., Bioinf.;PSFBAF;16/YR
-Proteomics = Proteomics
-Protesista Dental = Protes. Dent.
-Protetyka Stomatologiczna = Protet. Stomatol.
-Protist = Protist
-Protoplasma = Protoplasma
-Provider = Provider
-Przeglad Dermatologiczny = Przegl. Dermatol.
-Przeglad Epidemiologiczny = Przegl. Epidemiol.
-Przeglad Lekarski = Przegl. Lek.
-Przemysl Chemiczny=Przem. Chem.;PRCHAB;M
-Psihoterapija = Psihoterapija
-Psyche = Psyche (Stuttg.)
-Psychiatria Clinica = Psychiatr. Clin. (Basel)
-Psychiatria Polska = Psychiatr. Pol.
-Psychiatria et Neurologia = Psychiatr. Neurol. (Basel)
-Psychiatria, Neurologia, Neurochirurgia = Psychiatr. Neurol. Neurochir.
-Psychiatric Clinics of North America = Psychiatr. Clin. North Am.
-Psychiatric Communications = Psychiatr. Commun.
-Psychiatric Developments = Psychiatr. Dev.
-Psychiatric Genetics = Psychiatr. Genet.
-Psychiatric Hospital = Psychiatr. Hosp.
-Psychiatric Journal of the University of Ottawa = Psychiatr. J. Univ. Ott.
-Psychiatric Medicine = Psychiatr. Med.
-Psychiatric News = Psychiatr. News
-Psychiatric Quarterly = Psychiatr. Q.
-Psychiatric Quarterly. Supplement = Psychiatr. Q. Suppl.
-Psychiatric Research Reports = Psychiatr. Res. Rep. Am. Psychiatr. Assoc.
-Psychiatric Services = Psychiatr. Serv.
-Psychiatrie de l'Enfant = Psychiatr. Enfant
-Psychiatrie, Neurologie und Medizinische Psychologie = Psychiatr. Neurol. Med. Psychol. (Leipz.)
-Psychiatrie, Neurologie und Medizinische Psychologie. Beihefte = Psychiatr. Neurol. Med. Psychol. Beih.
-Psychiatrische Praxis = Psychiatr. Prax.
-Psychiatry = Psychiatry
-Psychiatry Digest = Psychiatry Dig.
-Psychiatry Research = Psychiatry Res.
-Psychiatry and Clinical Neurosciences = Psychiatry Clin. Neurosci.
-Psychiatry in Medicine = Psychiatry Med.
-Psycho-Oncology = Psychooncology.
-Psychoanalytic Quarterly = Psychoanal. Q.
-Psychoanalytic Review = Psychoanal. Rev.
-Psychoanalytic Study of the Child = Psychoanal. Study Child
-Psychological Bulletin = Psychol. Bull.
-Psychological Issues = Psychol. Issues
-Psychological Medicine = Psychol. Med.
-Psychological Medicine. Monograph Supplement = Psychol. Med. Monogr. Suppl.
-Psychological Methods = Psychol. Methods
-Psychological Monographs = Psychol. Monogr.
-Psychological Reports = Psychol. Rep.
-Psychological Research = Psychol. Res.
-Psychological Review = Psychol. Rev.
-Psychologie et Neuropsychiatrie du Vieillissement = Psychol. Neuropsychiatr. Vieil.
-Psychologische Forschung = Psychol. Forsch.
-Psychologische Praxis = Psychol. Prax.
-Psychology and Aging = Psychol. Aging
-Psychology and Psychotherapy = Psychol. Psychother.
-Psychometrika = Psychometrika
-Psychoneuroendocrinology = Psychoneuroendocrinology
-Psychopathology = Psychopathology
-Psychopharmacologia = Psychopharmacologia
-Psychopharmacologie = Psychopharmacologie
-Psychopharmacology = Psychopharmacology (Berl.)
-Psychopharmacology (Berlin, Germany)=Psychopharmacology (Berlin, Ger.);PSCHDL;SM
-Psychopharmacology Bulletin = Psychopharmacol. Bull.
-Psychopharmacology Communications = Psychopharmacol. Commun.
-Psychopharmacology Series = Psychopharmacol. Ser.
-Psychopharmacology. Supplementum = Psychopharmacology. Suppl.
-Psychophysiology = Psychophysiology
-Psychosomatic Medicine = Psychosom. Med.
-Psychosomatics = Psychosomatics
-Psychotherapie und Medizinische Psychologie = Psychother. Med. Psychol. (Stuttg.)
-Psychotherapie, Medizinische Psychologie = Psychother. Med. Psychol. (Stuttg.)
-Psychotherapie, Psychosomatik, Medizinische Psychologie = Psychother. Psychosom. Med. Psychol.
-Psychotherapy and Psychosomatics = Psychother. Psychosom.
-Pteridines=Pteridines;PTRDEO;Q
-Pubblicazioni della Stazione Zoologica di Napoli. Section II: History and Philosophy of the Life Sciences = Pubbl. Stn. Zool. Napoli II
-Public Administration Review = Public Adm. Rev.
-Public Affairs Report = Public Aff. Rep.
-Public Health = Public Health
-Public Health Monograph = Public Health Monogr.
-Public Health Nursing = Public Health Nurs.
-Public Health Nutrition = Public Health Nutr.
-Public Health Papers = Public Health Pap.
-Public Health Reports = Public Health Rep.
-Public Health Reviews = Public Health Rev.
-Public Interest = Public Interest
-Public Opinion Quarterly = Public Opin. Q.
-Public Policy = Public Policy
-Public Relations Journal = Public Relat. J.
-Public Sector Contracting Report = Public Sect. Contract. Rep.
-Public Sector, Health Care Risk Management = Public Sector. Health Care Risk Manage.
-Public Welfare = Public Welf.
-Publication, Group for the Advancement of Psychiatry = Publ. Group Adv. Psychiatry
-Puerto Rico Health Sciences Journal = P. R. Health Sci. J.
-Puerto Rico y Su Enfermera = P. R. Enferm.
-Pulmonary Pharmacology = Pulm. Pharmacol.
-Pulmonary Pharmacology & Therapeutics=Pulm. Pharmacol. Ther.;PPTHFJ;BM
-Pulmonary Pharmacology and Therapeutics = Pulm. Pharmacol. Ther.
-Pulse of the Montana State Nurses Association = Pulse
-Purchasing Administration = Purch. Adm.
-Pure and Applied Chemistry = Pure Appl. Chem.
-Pure and Applied Geophysics = Pure Appl. Geophys.
-Purinergic Signalling=Purinergic Signalling;PSUIA9;Q
-QA Review = QA Rev.
-QJM = QJM
-QRB; Quality Review Bulletin = QRB Qual. Rev. Bull.
-QRC Advisor = QRC Advis.
-QSAR & Combinatorial Science=QSAR Comb. Sci.;QCSSAU;10/YR
-Quaderni Sclavo di Diagnostica Clinica e di Laboratorio = Quad. Sclavo Diagn.
-Quaderni di Clinica Ostetrica e Ginecologica = Quad. Clin. Ostet. Ginecol.
-Quaderni di Criminologia Clinica = Quad. Criminol. Clin.
-Quaderni di Radiologia = Quad. Radiol.
-Qualitative Health Research = Qual. Health Res.
-Quality Assurance = Qual. Assur.
-Quality Assurance and Utilization Review = Qual. Assur. Util. Rev.
-Quality Assurance in Health Care = Qual. Assur. Health Care
-Quality Connection = Qual. Connect.
-Quality Letter for Healthcare Leaders = Qual. Lett. Healthc. Lead.
-Quality Management in Health Care = Qual. Manag. Health Care
-Quality in Health Care = Qual. Health Care
-Quality of Life Research = Qual. Life Res.
-Quantum Electronics=Quantum Electron.;QUELEZ;M
-Quarterly Dental Review = Q. Dent. Rev.
-Quarterly Journal of Experimental Physiology = Q. J. Exp. Physiol.
-Quarterly Journal of Experimental Physiology and Cognate Medical Sciences = Q. J. Exp. Physiol. Cogn. Med. Sci.
-Quarterly Journal of Experimental Psychology = Q. J. Exp. Psychol.
-Quarterly Journal of Experimental Psychology. A, Human Experimental Psychology = Q. J. Exp. Psychol. A
-Quarterly Journal of Experimental Psychology. B, Comparative and Physiological Psychology = Q. J. Exp. Psychol. B
-Quarterly Journal of Medicine = Q. J. Med.
-Quarterly Journal of Microscopical Science = Q. J. Microsc. Sci.
-Quarterly Journal of Nuclear Medicine = Q. J. Nucl. Med.
-Quarterly Journal of Nuclear Medicine and Molecular Imaging = Q. J. Nucl. Med. Mol. Imaging
-Quarterly Journal of Studies on Alcohol = Q. J. Stud. Alcohol
-Quarterly Journal of the Royal Meteorological Society = Quart. J. Roy. Meteor. Soc.
-Quarterly Medical Review = Q. Med. Rev.
-Quarterly Review = Q. Rev. DC. Nurses. Assoc.
-Quarterly Review of Biology = Q. Rev. Biol.
-Quarterly Review of Economics and Business = Q. Rev. Econ. Bus.
-Quarterly Review of Economics and Finance = Q. Rev. Econ. Finance
-Quarterly Reviews of Biophysics = Q. Rev. Biophys.
-Quarterly Reviews on Drug Metabolism and Drug Interactions = Q. Rev. Drug Metab. Drug Interact.
-Quarterly of the National Dental Association = Q. Natl. Dent. Assoc.
-Queens Nursing Journal = Queens Nurs. J.
-Queensland Nurse = Qld. Nurse
-Queensland Nurses Journal = Qld. Nurses J.
-Quimica Nova=Quim. Nova;QUNODK;BM
-Quintessence International = Quintessence Int.
-Quintessence International. Edition Francaise = Quintessence Int. [Fr.]
-Quintessence of Dental Technology = Quintessence Dent. Technol.
-Quintessencia = Quintessencia
-Quintessencia de Protese de Laboratorio = Quintessencia Protese Lab.
-Quintessenz = Quintessenz
-Quintessenz Journal = Quintessenz J.
-Quintessenz der Zahntechnik = Quintessenz Zahntech.
-Quintessenz-Impulse = Quintessenz. Impulse
-Quintessenza = Quintessenza
-R.I. Medical Journal = R. I. Med. J.
-RANF Review = RANF Rev.
-RCN Nursing Standard = RCN Nurs. Stand.
-RDH = RDH
-RGO = RGO
-RISO Report = RISO Rep.
-RN = RN
-RN (for Managers) = RN (For. Managers)
-RN Idaho = RN Ida.
-RNA = RNA
-RNA Biology=RNA Biol.;RBNIBE;BM
-RNABC News, Registered Nurses Association of British Columbia = RNABC News.
-RNAO News = RNAO News
-ROFO. Fortschritte auf dem Gebiete der Rontgenstrahlen und der Nuklearmedizin = ROFO. Fortschr. Geb. Rontgenstr. Nuklearmed.
-Radiation Data and Reports = Radiat. Data Rep.
-Radiation Effects and Defects in Solids=Radiat. Eff. Defects Solids;REDSEI;M
-Radiation Measurements=Radiat. Meas.;RMEAEP;BM
-Radiation Medicine = Radiat. Med.
-Radiation Oncology Investigations = Radiat. Oncol. Investig.
-Radiation Physics and Chemistry=Radiat. Phys. Chem.;RPCHDM;18/YR
-Radiation Research = Radiat. Res.
-Radiation Research. Supplement = Radiat. Res. Suppl.
-Radiation and Environmental Biophysics = Radiat. Environ. Biophys.
-Radiatsionnaia Biologiia, Radioecologiia = Radiats. Biol. Radioecol.
-Radio Science = Radio Sci.
-Radiobiologia, Radioterapia e Fisica Medica = Radiobiol. Radioter. Fis. Med.
-Radiobiologia, Radiotherapia = Radiobiol. Radiother. (Berl.)
-Radiobiologiia = Radiobiologiia
-Radiochemistry (New York, NY, United States)=Radiochemistry (N. Y., NY, U. S.);RDIOEO;BM
-Radiochimica Acta=Radiochim. Acta;RAACAP;12/YR
-Radiographics = Radiographics
-Radiography = Radiography
-Radiography Today = Radiogr. Today
-Radioisotopes = Radioisotopes
-Radiologe = Radiologe
-Radiologia Austriaca = Radiol. Austriaca
-Radiologia Clinica = Radiol. Clin. (Basel)
-Radiologia Clinica et Biologica = Radiol. Clin. Biol.
-Radiologia Diagnostica = Radiol. Diagn. (Berl.)
-Radiologia Medica = Radiol. Med. (Torino)
-Radiologic Clinics of North America = Radiol. Clin. North Am.
-Radiologic Technology = Radiol. Technol.
-Radiological Health Data and Reports = Radiol. Health Data Rep.
-Radiology = Radiology
-Radiology Management = Radiol. Manage.
-Radioprotection=Radioprotection;RAPRBA;Q
-Radiotherapy and Oncology = Radiother. Oncol.
-Radovi Medicinskog Fakulteta u Zagrebu = Rad. Med. Fak. Zagrebu
-Rand Journal of Economics = Rand J. Econ.
-Ranliao Huaxue Xuebao=Ranliao Huaxue Xuebao;RHXUD8;BM
-Rapid Communications in Mass Spectrometry = Rapid Commun. Mass Spectrom.
-Rare Metals (Beijing, China)=Rare Met. (Beijing, China);RARME8;Q
-Rasplavy=Rasplavy;RASPEM;BM
-Rassegna Clinico-Scientifica = Rass. Clin. Sci.
-Rassegna Internazionale di Clinica e Terapia = Rass. Int. Clin. Ter.
-Rassegna Internazionale di Stomatologia Pratica = Rass. Int. Stomatol. Prat.
-Rassegna Medica Sarda = Rass. Med. Sarda
-Rassegna Odontotecnica = Rass. Odontotec.
-Rassegna Penitenziaria e Criminologica = Rass. Penititenziaria. Crim.
-Rassegna Trimestrale di Odontoiatria = Rass. Trimest. Odontoiatr.
-Rassegna di Clinica Terapia e Scienze Affini = Rass. Clin. Ter.
-Rassegna di Dermatologia e Sifilografia = Rass. Dermatol. Sifilogr.
-Rassegna di Fisiopatologia Clinica e Terapeutica = Rass. Fisiopatol. Clin. Ter.
-Rassegna di Neurologia Vegetativa = Rass. Neurol. Veg.
-Rassegna di Neuropsichiatria e Scienze Affini = Rass. Neuropsichiatr.
-Rassegna di Studi Psichiatrici = Rass. Studi Psichiatr.
-Rational Drug Therapy = Ration. Drug Ther.
-Rays = Rays
-Reaction Kinetics and Catalysis Letters=React. Kinet. Catal. Lett.;RKCLAU;6/YR
-Reactive & Functional Polymers=React. Funct. Polym.;RFPOF6;12/YR
-Readers Digest = Read. Dig.
-Realites Cliniques = Real. Clin.
-Reanimation et Organes Artificiels = Reanim. Organes Artif.
-Recent Advances in Biological Psychiatry = Recent Adv. Biol. Psychiatry
-Recent Advances in Clinical Nuclear Medicine = Recent Adv. Clin. Nucl. Med.
-Recent Advances in Nursing = Recent Adv. Nurs.
-Recent Advances in Studies on Cardiac Structure and Metabolism = Recent Adv. Stud. Cardiac Struct. Metab.
-Recent Developments in Alcoholism = Recent Dev. Alcohol.
-Recent Progress in Hormone Research = Recent Prog. Horm. Res.
-Recent Results in Cancer Research = Recent Results Cancer Res.
-Recenti Progressi in Medicina = Recenti Prog. Med.
-Receptor = Receptor
-Receptors and Channels = Receptors Channels
-Receptors and Signal Transduction = Recept. Signal Transduct.
-Recherche en Soins Infirmiers = Rech. Soins Infirm.
-Recombinant DNA Technical Bulletin = Recomb. DNA Tech. Bull.
-Reconstruction Surgery and Traumatology = Reconstr. Surg. Traumatol.
-Record of Chemical Progress = Rec. Chem. Prog.
-Recruit and Retain = Recruit Retain
-Recruitment and Retention Report = Recruit. Retent. Rep.
-Recruitment, Retention and Restructuring Report = Recruit. Retent. Restruct. Rep.
-Reflections = Reflections
-Refractive and Corneal Surgery = Refract. Corneal Surg.
-Refuat ha-Shinayim = Refu. Hashinayim
-Regan Report on Nursing Law = Regan Rep. Nurs. Law
-Regional Anaesthesie = Reg. Anaesth.
-Regional Anesthesia = Reg. Anesth.
-Regional Anesthesia and Pain Medicine = Reg. Anesth. Pain Med.
-Regional Immunology = Reg. Immunol.
-Registered Nurse = Regist. Nurse
-Regulation = Regulation
-Regulatory Analyst. Medical Waste = Regul. Anal. Med. Waste
-Regulatory Peptides = Regul. Pept.
-Regulatory Peptides. Supplement = Regul. Pept. Suppl.
-Regulatory Toxicology and Pharmacology = Regul. Toxicol. Pharmacol.
-Rehab Management = Rehab Manag.
-Rehabilitation = Rehabilitation (Stuttg.)
-Rehabilitation Literature = Rehabil. Lit.
-Rehabilitation Nursing = Rehabil. Nurs.
-Rehabilitation Record = Rehabil. Rec.
-Rehabilitation; Sozialmedizin, Physikalischemedizin, Praventivmedizin = Rehabilitation (Bonn)
-Rein et Foie = Rein Foie
-Rejuvenation Research = Rejuvenation Res.
-Remote Sensing of the Environment = Remote Sens. Environ.
-Renal Failure = Ren. Fail.
-Renal Physiology = Renal Physiol.
-Renal Physiology and Biochemistry = Ren. Physiol. Biochem.
-Rengong Jingti Xuebao=Rengong Jingti Xuebao;RJXUEN;BM
-Report of the Congress, European Orthodontic Society = Rep. Congr. Eur. Orthod. Soc.
-Report, Commission on Accreditation of Rehabilitation Facilities = Rep. Comm. Accredit. Rehabil. Facil.
-Report, Group for the Advancement of Psychiatry = Rep. Group Adv. Psychiatry
-Report, Navy Medical Neuropsychiatric Research Unit = Rep. Nav. Med. Neuropsychiatr. Res. Unit
-Report, U.S. Army Medical Research Laboratory = Rep. US. Army Med. Res. Lab.
-Report, U.S. Army Medical Research and Nutrition Laboratory, Denver = Rep. US. Army Med. Res. Nutr. Lab. Denver
-Report, U.S. Navy Experimental Diving Unit = Rep. US. Navy Exp. Diving Unit
-Report, US Naval Submarine Medical Center = Rep. US Nav. Submar. Med. Cent.
-Reporter, Delaware Nurses Association = Rep. Del. Nurses Assoc.
-Reports on Health and Social Subjects = Rep. Health Soc. Subj. (Lond.)
-Reports on Population/Family Planning = Rep. Popul. Fam. Plann.
-Reports on Public Health and Medical Subjects = Rep. Public Health Med. Subj. (Lond.)
-Reports on Rheumatic Diseases = Rep. Rheum. Dis.
-Reproduccion = Reproduccion
-Reproduction = Reproduction
-Reproduction (Bristol, United Kingdom)=Reproduction (Bristol, U. K.);RCUKBS;M
-Reproduction, Fertility, and Development = Reprod. Fertil. Dev.
-Reproduction, Nutrition, Development = Reprod. Nutr. Dev.
-Reproduction, Nutrition, Developpement = Reprod. Nutr. Dev.
-Reproduction. Abstract Series = Reprod. Abstr. Ser.
-Reproduction. Supplement = Reprod. Suppl.
-Reproductive Biology = Reprod. Biol.
-Reproductive Biology and Endocrinology = Reprod. Biol. Endocrinol.
-Reproductive Biomedicine Online = Reprod. Biomed. Online
-Reproductive Toxicology = Reprod. Toxicol.
-Repura (Leprosy) = Repura
-Research Communications in Biochemistry and Cell & Molecular Biology=Res. Commun. Biochem. Cell Mol. Biol.;RCBBFC;Q
-Research Communications in Chemical Pathology and Pharmacology = Res. Commun. Chem. Pathol. Pharmacol.
-Research Communications in Molecular Pathology and Pharmacology = Res. Commun. Mol. Pathol. Pharmacol.
-Research Communications in Pharmacology and Toxicology=Res. Commun. Pharmacol. Toxicol.;RCPTFY;Q
-Research Communications, Institute for Fermentation = Res. Commun. Inst. Ferment.
-Research Progress in Organic, Biological and Medicinal Chemistry = Res. Prog. Org. Biol. Med. Chem.
-Research Publications, Association for Research in Nervous and Mental Disease = Res. Publ. Assoc. Res. Nerv. Ment. Dis.
-Research Quarterly = Res. Q.
-Research Quarterly for Exercise and Sport = Res. Q. Exerc. Sport
-Research Report, Health Effects Institute = Res. Rep. Health Eff. Inst.
-Research Report, United States Naval School of Aviation Medicine = Res. Rep. U. S. Nav. Sch. Aviat. Med.
-Research Reports, United States Naval Medical Field Research Laboratory = Res. Rep. U. S. Nav. Med. Field Res. Lab.
-Research and Clinical Studies in Headache = Res. Clin. Stud. Headache
-Research and Statistics Note, Health Care Financing Administration, Office of Policy, Planning, and Research = Res. Stat. Note Health Care Financ. Adm. Off. Policy. Plan. Res.
-Research and Statistics Note, Social Security Administration, Office of Research and Statistics = Res. Stat. Note
-Research and Theory for Nursing Practice = Res. Theory Nurs. Pract.
-Research in Developmental Disabilities = Res. Dev. Disabil.
-Research in Experimental Medicine = Res. Exp. Med. (Berl.)
-Research in Health Economics = Res. Health Econ.
-Research in Immunology = Res. Immunol.
-Research in Microbiology = Res. Microbiol.
-Research in Nursing and Health = Res. Nurs. Health
-Research in Reproduction = Res. Reprod.
-Research in Sports Medicine = Res. Sports Med.
-Research in Veterinary Science = Res. Vet. Sci.
-Research in Virology = Res. Virol.
-Research on Aging = Res. Aging
-Research on Chemical Intermediates=Res. Chem. Intermed.;RCINEE;9/YR
-Resenha Clinico-Cientifica = Resen. Clin. Cient.
-Resident and Staff Physician = Resid. Staff Physician
-Residue Reviews = Residue Rev.
-Resources for Biomedical Research and Education = Resour. Biomed. Res. Educ.
-Respiration = Respiration
-Respiration Physiology = Respir. Physiol.
-Respiratory Care = Respir. Care
-Respiratory Care Clinics of North America = Respir. Care Clin. N. Am.
-Respiratory Management = Respir. Manage.
-Respiratory Medicine = Respir. Med.
-Respiratory Physiology and Neurobiology = Respir. Physiol. Neurobiol.
-Respiratory Research = Respir. Res.
-Respiratory Therapy = Respir. Ther.
-Respirology = Respirology
-Restaurants and Institutions = Restaurants Inst.
-Restorative Dentistry = Restorative Dent.
-Results and Problems in Cell Differentiation = Results Probl. Cell Differ.
-Resuscitation = Resuscitation
-Retina = Retina
-Retrovirology = Retrovirology
-Reumatismo = Reumatismo
-Reumatizam = Reumatizam
-Reumatologia = Reumatologia
-Review of Allergy = Rev. Allergy
-Review of Czechoslovak Medicine = Rev. Czech. Med.
-Review of Economics and Statistics = Rev. Econ. Stat.
-Review of Public Data Use = Rev. Public Data Use
-Review of Scientific Instruments = Rev. Sci. Instrum.
-Review of Surgery = Rev. Surg.
-Review, Federation of American Health Systems = Rev. Fed. Am. Health Syst.
-Review, Federation of American Hospitals = Rev. Fed. Am. Hosp.
-Review, Patient Focused Care Association = Rev. Patient Focus. Care Assoc.
-Reviews in Analytical Chemistry=Rev. Anal. Chem.;RACYAX;4/YR
-Reviews in Cardiovascular Medicine = Rev. Cardiovasc. Med.
-Reviews in Clinical and Basic Pharmacology = Rev. Clin. Basic Pharm.
-Reviews in Clinical and Experimental Hematology = Rev. Clin. Exp. Hematol.
-Reviews in Endocrine and Metabolic Disorders = Rev. Endocr. Metab. Disord.
-Reviews in Gastroenterological Disorders = Rev. Gastroenterol. Disord.
-Reviews in Immunogenetics = Rev. Immunogenet.
-Reviews in Inorganic Chemistry=Rev. Inorg. Chem.;RICHD7;Q
-Reviews in Medical Virology = Rev. Med. Virol.
-Reviews in Neurological Diseases = Rev. Neurol. Dis.
-Reviews in Pure and Applied Pharmacological Sciences = Rev. Pure Appl. Pharmacol. Sci.
-Reviews in the Neurosciences = Rev. Neurosci.
-Reviews of Environmental Contamination and Toxicology = Rev. Environ. Contam. Toxicol.
-Reviews of Geophysics = Rev. Geophys.
-Reviews of Geophysics and Space Physics = Rev. Geophys. Space Phys.
-Reviews of Infectious Diseases = Rev. Infect. Dis.
-Reviews of Oculomotor Research = Rev. Oculomot. Res.
-Reviews of Physiology, Biochemistry and Pharmacology = Rev. Physiol. Biochem. Pharmacol.
-Reviews of Reproduction = Rev. Reprod.
-Reviews on Drug Metabolism and Drug Interactions = Rev. Drug Metabol. Drug Interact.
-Reviews on Environmental Health = Rev. Environ. Health
-Revisiones sobre Biologia Celular = Revis. Biol. Celular
-Revista ADM = Rev. ADM
-Revista Alergia = Rev. Alerg.
-Revista Alergia Mexico = Rev. Alerg. Mex.
-Revista Argentina de Cirugia = Rev. Argent. Cir.
-Revista Argentina de Endocrinologia y Metabolismo = Rev. Argent. Endocrinol. Metab.
-Revista Argentina de Implantologia Estomatologica = Rev. Argent. Implantol. Estomatol.
-Revista Argentina de Microbiologia = Rev. Argent. Microbiol.
-Revista Argentina de Urologia y Nefrologia = Rev. Argent. Urol. Nefrol.
-Revista Brasileira de Anestesiologia = Rev. Bras. Anestesiol.
-Revista Brasileira de Biologia = Rev. Bras. Biol.
-Revista Brasileira de Cirurgia = Rev. Bras. Cir.
-Revista Brasileira de Enfermagem = Rev. Bras. Enferm.
-Revista Brasileira de Gastroenterologia = Rev. Bras. Gastroenterol.
-Revista Brasileira de Leprologia = Rev. Bras. Leprol.
-Revista Brasileira de Malariologia e Doencas Tropicais = Rev. Bras. Malariol. Doencas Trop.
-Revista Brasileira de Medicina = Rev. Bras. Med.
-Revista Brasileira de Odontologia = Rev. Bras. Odontol.
-Revista Brasileira de Odontologia Militar = Rev. Bras. Odontol. Mil.
-Revista Brasileira de Oftalmologia = Rev. Bras. Oftalmol.
-Revista Brasileira de Pesquisas Medicas e Biologicas = Rev. Bras. Pesqui. Med. Biol.
-Revista Catarinense de Odontologia = Rev. Catarinense Odontol.
-Revista Centro America Odontologica = Rev. Cent. Am. Odontol.
-Revista Chilena de Obstetricia y Ginecologia = Rev. Chil. Obstet. Ginecol.
-Revista Chilena de Odontoestomatologia = Rev. Chil. Odontoestomatol.
-Revista Chilena de Pediatria = Rev. Chil. Pediatr.
-Revista Clinica Espanola = Rev. Clin. Esp.
-Revista Clinica, Instituto Maternal, Lisbon = Rev. Clin. Inst. Matern. Lisb.
-Revista Colombiana de Obstetricia y Ginecologia = Rev. Colomb. Obstet. Ginecol.
-Revista Colombiana de Pediatria y Puericultura = Rev. Colomb. Pediatr. Pueric.
-Revista Costarricense de Ciencias Medicas = Rev. Costarric. Cienc. Med.
-Revista Cubana de Enfermeria = Rev. Cubana Enferm.
-Revista Cubana de Estomatologia = Rev. Cubana Estomatol.
-Revista Cubana de Medicina Tropical = Rev. Cubana Med. Trop.
-Revista Dental = Rev. Dent. (St. Domingo)
-Revista Dental de Chile = Rev. Dent. Chile
-Revista Ecuatoriana de Higiene y Medicina Tropical = Rev. Ecuat. Hig. Med. Trop.
-Revista Enfermagem em Novas Dimensoes = Rev. Enferm. Nov. Dimens.
-Revista Espanola de Anestesiologia = Rev. Esp. Anestesiol.
-Revista Espanola de Anestesiologia y Reanimacion = Rev. Esp. Anestesiol. Reanim.
-Revista Espanola de Cardiologia = Rev. Esp. Cardiol.
-Revista Espanola de Endodoncia = Rev. Esp. Endodoncia
-Revista Espanola de Enfermedades Digestivas = Rev. Esp. Enferm. Dig.
-Revista Espanola de Estomatologia = Rev. Esp. Estomatol.
-Revista Espanola de Fisiologia = Rev. Esp. Fisiol.
-Revista Espanola de Medicina Nuclear = Rev. Esp. Med. Nucl.
-Revista Espanola de Obstetricia y Ginecologia = Rev. Esp. Obstet. Ginecol.
-Revista Espanola de Oncologia = Rev. Esp. Oncol.
-Revista Espanola de Oto-Neuro-Oftalmologia y Neurocirugia = Rev. Esp. Otoneurooftalmol. Neurocir.
-Revista Espanola de Paradoncia = Rev. Esp. Parad.
-Revista Espanola de Pediatria = Rev. Esp. Pediatr.
-Revista Espanola de Quimioterapia = Rev. Esp. Quimioter.
-Revista Espanola de Reumatismo y Enfermedades Osteo-Articulares = Rev. Esp. Reum. Enferm. Osteoartic.
-Revista Espanola de Salud Publica = Rev. Esp. Salud Publica
-Revista Espanola de Tuberculosis = Rev. Esp. Tuberc.
-Revista Espanola de las Enfermedades del Aparato Digestivo = Rev. Esp. Enferm. Apar. Dig.
-Revista Europea de Odonto-Estomatologia = Rev. Eur. Odontoestomatol.
-Revista FOA = Rev. FOA
-Revista Gaucha de Enfermagem = Rev. Gaucha Enferm.
-Revista Gaucha de Odontologia = Rev. Gaucha Odontol.
-Revista Guatemalteca de Estomatologia = Rev. Guatem. Estomatol.
-Revista Iberica de Endocrinologia = Rev. Iber. Endocrinol.
-Revista Ibero-Americana de Ortodoncia = Rev. Iberoam. Ortod.
-Revista Interamericana de Radiologia = Rev. Interam. Radiol.
-Revista Latino-Americana de Enfermagem = Rev. Lat. Am. Enfermagem
-Revista Latinoamericana de Cirugia Plastica = Rev. Latinoam. Cir. Plast.
-Revista Latinoamericana de Microbiologia = Rev. Latinoam. Microbiol.
-Revista Latinoamericana de Microbiologia y Parasitologia = Rev. Latinoam. Microbiol. Parasitol. (Mex.)
-Revista Latinoamericana de Patologia = Rev. Latinoam. Patol.
-Revista Medica Hondurena = Rev. Med. Hondur.
-Revista Medica de Chile = Rev. Med. Chil.
-Revista Medica de Costa Rica = Rev. Med. Costa Rica
-Revista Medica de Panama = Rev. Med. Panama
-Revista Medica del Hospital General = Rev. Med. Hosp. Gen. (Mex.)
-Revista Medico-Chirurgicala a Societatii de Medici si Naturalisti Din Iasi = Rev. Med. Chir. Soc. Med. Nat. Iasi
-Revista Meteorologica = Rev. Meteor.
-Revista Mexicana de Cirugia, Ginecologia y Cancer = Rev. Mex. Cir. Ginecol. Cancer
-Revista Mexicana de Ingenieria Quimica=Rev. Mex. Ing. Quim.;RMIQBM;3/YR
-Revista Mexicana de Urologia = Rev. Mex. Urol.
-Revista Odonto-Estomatologica = Rev. Odontoestomatol.
-Revista Odontologica = Rev. Odontol. (La Paz)
-Revista Odontologica Ecuatoriana = Rev. Odontol. Ecuat.
-Revista Odontologica de Concepcion = Rev. Odontol. Concepcion
-Revista Odontologica de Costa Rica = Rev. Odontol. Costa Rica
-Revista Odontologica de Puerto Rico = Rev. Odontol. P. R.
-Revista Odontologica del Circulo de Odontologos del Paraguay = Rev. Odontol. Circ. Odontol. Parag.
-Revista Odontologica, Facultad de Odontologia, Universidad Nacional de Cordoba = Rev. Odontol. (Cordoba)
-Revista Panamericana de Salud Publica = Rev. Panam. Salud Publica
-Revista Paulista de Endodontia = Rev. Paul. Endodontia
-Revista Paulista de Enfermagem = Rev. Paul. Enferm.
-Revista Paulista de Medicina = Rev. Paul. Med.
-Revista Paulista de Odontologia = Rev. Paul. Odontol.
-Revista Pernambucana de Odontologia = Rev. Pernambucana Odontol.
-Revista Portuguesa de Cardiologia = Rev. Port. Cardiol.
-Revista Portuguesa de Estomatologia e Cirurgia Maxilofacial = Rev. Port. Estomatol. Cir. Maxilofac.
-Revista Portuguesa de Pediatria = Rev. Port. Pediatr.
-Revista Portuguesa de Pediatria e Puericultura = Rev. Port. Pediatr. Pueric.
-Revista Quirurgica Espanola = Rev. Quir. Esp.
-Revista Regional de Aracatuba Associacao Paulista de Cirurgioes Dentistas = Rev. Reg. Aracatuba Assoc. Paul. Cir. Dent.
-Revista Romana de Materiale=Rev. Rom. Mater.;RRMEB7;Q
-Revista Venezolana de Sanidad y Asistencia Social = Rev. Venez. Sanid. Asist. Soc.
-Revista Venezolana de Urologia = Rev. Venez. Urol.
-Revista da Associacao Medica Brasileira = Rev. Assoc. Med. Bras.
-Revista da Associacao Paulista de Cirurgioes Dentistas = Rev. Assoc. Paul. Cir. Dent.
-Revista da Escola de Enfermagem da USP = Rev. Esc. Enferm. USP
-Revista da Faculdade de Farmacia e Odontologia de Araraquara = Rev. Fac. Farm. Odontol. Araraquara
-Revista da Faculdade de Farmacia e Odontologia de Ribeirao Preto = Rev. Fac. Farm. Odontol. Ribeiro. Preto
-Revista da Faculdade de Odontologia da FZL = Rev. Faculdade Odontol. FZL
-Revista da Faculdade de Odontologia da Universidade Federal da Bahia = Rev. Fac. Odontol. Univ. Fed. Bahia
-Revista da Faculdade de Odontologia da Universidade de Sao Paulo = Rev. Fac. Odontol. Sao Paulo
-Revista da Faculdade de Odontologia de Aracatuba = Rev. Fac. Odontol. Aracatuba
-Revista da Faculdade de Odontologia de Lins = Rev. Faculdade Odontol. Lins
-Revista da Faculdade de Odontologia de Pernambuco = Rev. Fac. Odontol. Pernambuco
-Revista da Faculdade de Odontologia de Ribeirao Preto = Rev. Fac. Odontol. Ribeiro Preto
-Revista da Faculdade de Odontologia de Sao Jose dos Campos = Rev. Fac. Odontol. Sao Jose dos Campos
-Revista da Faculdade de Odontologia, Porto Alegre = Rev. Fac. Odontol. P. Alegre
-Revista da Sociedade Brasileira de Medicina Tropical = Rev. Soc. Bras. Med. Trop.
-Revista de Actualidad Estomatologica Espanola = Rev. Actual. Estomatol. Esp.
-Revista de Actualidad Odontoestomatologica Espanola = Rev. Actual. Odontoestomatol. Esp.
-Revista de Biologia Oral = Rev. Biol. Oral
-Revista de Biologia Tropical = Rev. Biol. Trop.
-Revista de Chimie (Bucharest, Romania)=Rev. Chim. (Bucharest, Rom.);RCBUAU;M
-Revista de Chirurgie, Oncologie, Radiologie, O.R.L., Oftalmologie, Stomatologie. Chirurgie = Rev. Chir. Oncol. Radiol. O. R. L. Oftalmol. Stomatol. Chir.
-Revista de Chirurgie, Oncologie, Radiologie, O.R.L., Oftalmologie, Stomatologie. Oto-Rino-Laringologia = Rev. Chir. Oncol. Radiol. O. R. L. Oftalmol. Stomatol. Otorinolaringol.
-Revista de Chirurgie, Oncologie, Radiologie, O.R.L., Oftalmologie, Stomatologie. Seria Oftalmologie = Rev. Chir. Oncol. Radiol. O. R. L. Oftalmol. Stomatol. Ser. Oftalmol.
-Revista de Chirurgie, Oncologie, Radiologie, O.R.L., Oftalmologie, Stomatologie. Seria Stomatologie = Rev. Chir. Oncol. Radiol. O. R. L. Oftalmol. Stomatol. Ser. Stomatol.
-Revista de Cirugia del Uruguay = Rev. Cir. Urug.
-Revista de Enfermagem = Rev. Enferm. (Lisboa)
-Revista de Enfermeria = Rev. Enferm.
-Revista de Farmacia e Bioquimica da Universidade de Sao Paulo = Rev. Farm. Bioquim. Univ. Sao Paulo
-Revista de Farmacia e Odontologia = Rev. Farm. Odontol.
-Revista de Gastroenterologia de Mexico = Rev. Gastroenterol. Mex.
-Revista de Gastroenterologia del Peru = Rev. Gastroenterol. Peru
-Revista de Geofisica = Rev. Geofis.
-Revista de Ginecologia e d'Obstetricia = Rev. Ginecol. Obstet. (Sao Paulo)
-Revista de Igiena, Bacteriologie, Virusologie, Parazitologie, Epidemiologie, Pneumoftiziologie. Bacteriologia, Virusologia, Parazitologia, Epidemiologia = Rev. Ig. Bacteriol. Virusol. Parazitol. Epidemiol. Pneumoftiziol. Bacteriol. Virusol. Parazitol. Epi
-Revista de Igiena, Bacteriologie, Virusologie, Parazitologie, Epidemiologie, Pneumoftiziologie. Pneumoftiziologia = Rev. Ig. Bacteriol. Virusol. Parazitol. Epidemiol. Pneumoftiziol. Pneumoftiziol.
-Revista de Investigacion = Rev. Invest. (Guadalajara)
-Revista de Investigacion Clinica = Rev. Invest. Clin.
-Revista de Investigacion en Salud Publica = Rev. Invest. Salud Publica
-Revista de Medicina Interna, Neurologie, Psihiatrie, Neurochirurgie, Dermato-Venerologie. Medicina Interna = Rev. Med. Interna Neurol. Psihiatr. Neurochir. Dermatovenerol. Med. Intern.
-Revista de Medicina Interna, Neurologie, Psihiatrie, Neurochirurgie, Dermato-Venerologie. Neurologie, Psihiatrie, Neurochirurgie = Rev. Med. Interna Neurol. Psihiatr. Neurochir. Dermatovenerol. Neurol. Psihiatr. Neurochir.
-Revista de Medicina de la Universidad de Navarra = Rev. Med. Univ. Navarra
-Revista de Neuro-Psiquiatria = Rev. Neuropsiquiatr.
-Revista de Neurologia = Rev. Neurol.
-Revista de Obstetricia y Ginecologia de Venezuela = Rev. Obstet. Ginecol. Venez.
-Revista de Odontologia da UNESP = Rev. Odontol. UNESP
-Revista de Odontologia da Universidade Federal de Santa Catarina = Rev. Odontol. St. Catarina
-Revista de Odontologia da Universidade de Sao Paulo = Rev. Odontol. Univ. Sao Paulo
-Revista de Pediatrie, Obstetrica si Ginecologie. Obstetrica si Ginecologie = Rev. Pediatr. Obstet. Ginecol. Obstet. Ginecol.
-Revista de Pediatrie, Obstetrica si Ginecologie. Pediatria = Rev. Pediatr. Obstet. Ginecol. Pediatr.
-Revista de Sanidad e Higiene Publica = Rev. Sanid. Hig. Publica (Madr.)
-Revista de Saude Publica = Rev. Saude Publica
-Revista de la Agrupacion Odontologica de la Capital Federal = Rev. Agrup. Odontol. Cap. Fed.
-Revista de la Asociacion Argentina de Microbiologia = Rev. Asoc. Argent. Microbiol.
-Revista de la Asociacion Medica Argentina = Rev. Asoc. Med. Argent.
-Revista de la Asociacion Mexicana de Enfermeras = Rev. Asoc. Mex. Enferm.
-Revista de la Asociacion Odontologica Argentina = Rev. Asoc. Odontol. Argent.
-Revista de la Asociacion Odontologica de Costa Rica = Rev. Asoc. Odontol. Costa Rica
-Revista de la Asociacion de Profesionales del Hospital Nacional de Odontologia = Rev. Asoc. Prof. Hosp. Nac. Odontol.
-Revista de la Escuela de Odontologia, Universidad Nacional de Tucuman, Facultad de Medicina = Rev. Esc. Odontol. Tucuman.
-Revista de la Facultad de Ciencias Medicas de Cordoba = Rev. Fac. Cienc. Med. Cordoba
-Revista de la Facultad de Ciencias Medicas de la Universidad Nacional de Cordoba = Rev. Fac. Cien. Med. Univ. Nac. Cordoba
-Revista de la Facultad de Ciencias Medicas, Universidad Nacional de Cordoba = Rev. Fac. Cien. Med. Univ. Nac. Cordoba
-Revista de la Facultad de Medicina, Universidad Nacional de Colombia = Rev. Fac. Med. Univ. Nac. Colomb.
-Revista de la Facultad de Odontologia = Rev. Fac. Odontol. Univ. Nac. (Cordoba)
-Revista de la Facultad de Odontologia de la Universidad Nacional de Colombia = Rev. Fac. Odontol. Univ. Nac. Colomb.
-Revista de la Facultad de Odontologia, Universidad Nacional de Tucuman = Rev. Fac. Odontol. Tucuman
-Revista de la Facultad de Odontologia, Universidad de Antioquia = Rev. Fac. Odontol. Univ. Antioq.
-Revista de la Federacion Odontologica Colombiana = Rev. Fed. Odontol. Colomb.
-Revista de la Federacion Odontologica Ecuatoriana = Rev. Fed. Odontol. Ecuat.
-Revista de la Sanidad Militar Argentina = Rev. Sanid. Milit. Argent.
-Revista de la Sociedad Argentina de Biologia = Rev. Soc. Argent. Biol.
-Revista de la Sociedad Colombiana de Ortodoncia = Rev. Soc. Colomb. Ortod.
-Revista de la Sociedad Odontologica de la Plata = Rev. Soc. Odontol. La. Plata
-Revista de la Sociedad Peruana de Endocrinologia = Rev. Soc. Peru. Endocrinol.
-Revista de la Sociedad Quimica del Peru=Rev. Soc. Quim. Peru;RSQPAW;Q
-Revista del Ateneo Argentino de Odontologia = Rev. Ateneo Argent. Odontol.
-Revista del Ateneo de la Catedra de Tecnica de Operatoria Dental = Rev. Ateneo Catedra Tec. Oper. Dent.
-Revista del Circulo Argentino de Odontologia = Rev. Circ. Argent. Odontol.
-Revista del Circulo Odontologico de Cordoba = Rev. Circ. Odontol. Cordoba
-Revista del Circulo Odontologico de Rosario = Rev. Circul. Ondontol. Ros.
-Revista del Circulo Odontologico del Sur = Rev. Circ. Odontol. Sur
-Revista del Colegio Estomatologico de Guatemala = Rev. Col. Estomatol. Guatem.
-Revista del Colegio Medico de Guatemala = Rev. Col. Med. Guatem.
-Revista del Colegio Nacional de Enfermeras = Rev. Col. Nac. Enferm.
-Revista del Instituto Nacional de Cancerologia = Rev. Inst. Nac. Cancerol. (Mex.)
-Revista del Instituto de Salubridad y Enfermedades Tropicales = Rev. Inst. Salubr. Enferm. Trop.
-Revista del Museo de la Facultad de Odontologia de Buenos Aires = Rev. Museo Fac. Odontol. B. Aires
-Revista do Centro de Ciencias Biomedicas da Universidade Federal de Uberlandia = Rev. Centro Cienc. Biomed. Univ. Fed. Uberlandia
-Revista do Hospital das Clinicas, Faculdade de Medicina da Universidade de Sao Paulo = Rev. Hosp. Clin. Fac. Med. Sao Paulo
-Revista do Instituto de Antibioticos, Universidade Federal de Pernambuco = Rev. Inst. Antibiot. (Recife)
-Revista do Instituto de Medicina Tropical de Sao Paulo = Rev. Inst. Med. Trop. Sao Paulo
-Revmatologiia = Revmatologiia (Mosk.)
-Revolution = Revolution
-Revue Annuelle, Societe Odonto-Stomatologique du Nord-Est = Rev. Annu. Soc. Odontostomatol. Nordest.
-Revue Belge de Medecine Dentaire = Rev. Belge Med. Dent.
-Revue Belge de Pathologie et de Medecine Experimentale = Rev. Belg. Pathol. Med. Exp.
-Revue Canadienne de Biologie = Rev. Can. Biol.
-Revue Canadienne de Biologie Experimentale = Rev. Can. Biol. Exp.
-Revue Dentaire Libanaise (Lebanese Dental Magazine) = Rev. Dent. Liban.
-Revue Europeenne d'Etudes Cliniques et Biologiques = Rev. Eur. Etud. Clin. Biol.
-Revue Francaise d'Allergologie = Rev. Fr. Allergol.
-Revue Francaise d'Endocrinologie Clinique, Nutrition et Metabolisme = Rev. Fr. Endocrinol. Clin.
-Revue Francaise d'Endodontie = Rev. Fr. Endod.
-Revue Francaise d'Etudes Cliniques et Biologiques = Rev. Fr. Etud. Clin. Biol.
-Revue Francaise d'Odonto-Stomatologie = Rev. Fr. Odontostomatol.
-Revue Francaise de Gynecologie et d'Obstetrique = Rev. Fr. Gynecol. Obstet.
-Revue Francaise de Psychanalyse = Rev. Fr. Psychanal.
-Revue Francaise de Transfusion = Rev. Fr. Transfus.
-Revue Francaise de Transfusion et Immuno-Hematologie = Rev. Fr. Transfus. Immunohematol.
-Revue Francaise de Transfusion et d'Hemobiologie = Rev. Fr. Transfus. Hemobiol.
-Revue Francaise de la Prothese Dentaire = Rev. Fr. Prothese Dent.
-Revue Francaise des Maladies Respiratoires = Rev. Fr. Mal. Respir.
-Revue Francaise des Prothesistes Dentaires = Rev. Fr. Prothes. Dent.
-Revue Internationale d'Hepatologie = Rev. Int. Hepatol.
-Revue Internationale des Services de Sante des Armees de Terre, de Mer et de l Air = Rev. Int. Serv. Sante Armees
-Revue Internationale du Trachome = Rev. Int. Trach.
-Revue Internationale du Trachome et de Pathologie Oculaire Tropicale et Subtropicale = Rev. Int. Trach. Pathol. Ocul. Trop. Subtrop.
-Revue Internationale du Trachome et de Pathologie Oculaire Tropicale et Subtropicale et de Sante Publique = Rev. Int. Trach. Pathol. Ocul. Trop. Subtrop. Sante Publique
-Revue Lyonnaise de Medecine = Rev. Lyon. Med.
-Revue Medicale Internationale de Photo, Cinema, Television (International Journal of Medical Photography, Cinematography and Television) = Rev. Med. Int. Photo Cinema Telev.
-Revue Medicale Suisse = Rev. Med. Suisse
-Revue Medicale de Bruxelles = Rev. Med. Brux.
-Revue Medicale de Liege = Rev. Med. Liege
-Revue Medicale de la Suisse Romande = Rev. Med. Suisse Romande
-Revue Medicale du Moyen-Orient = Rev. Med. Moyen. Orient
-Revue Medico-Chirurgicale des Maladies du Foie = Rev. Med. Chir. Mal. Foie
-Revue Neurologique = Rev. Neurol. (Paris)
-Revue Odonto-Implantologique = Rev. Odontoimplantol.
-Revue Odonto-Stomatologique du Nord-Est = Rev. Odontostomatol. Nordest.
-Revue Roumaine d'Endocrinologie = Rev. Roum. Endocrinol.
-Revue Roumaine d'Inframicrobiologie = Rev. Roum. Inframicrobiol.
-Revue Roumaine de Chimie=Rev. Roum. Chim.;RRCHAX;M
-Revue Roumaine de Medecine = Rev. Roum. Med.
-Revue Roumaine de Medecine Interne = Rev. Roum. Med. Intern.
-Revue Roumaine de Morphologie et d'Embryologie = Rev. Roum. Morphol. Embryol.
-Revue Roumaine de Morphologie et de Physiologie = Rev. Roum. Morphol. Physiol.
-Revue Roumaine de Neurologie = Rev. Roum. Neurol.
-Revue Roumaine de Neurologie et de Psychiatrie = Rev. Roum. Neurol. Psychiatr.
-Revue Roumaine de Physiologie = Rev. Roum. Physiol.
-Revue Roumaine de Virologie = Rev. Roum. Virol.
-Revue Scientifique et Technique, Office International des Epizooties = Rev. Sci. Tech.
-Revue Stomato-Odontologique du Nord de la France = Rev. Stomatoodontol. Nord Fr.
-Revue Suisse de Zoologie = Rev. Suisse Zool.
-Revue d'Electroencephalographie et de Neurophysiologie Clinique = Rev. Electroencephalogr. Neurophysiol. Clin.
-Revue d'Elevage et de Medecine Veterinaire des Pays Tropicaux = Rev. Elev. Med. Vet. Pays Trop.
-Revue d'Epidemiologie et de Sante Publique = Rev. Epidemiol. Sante Publique
-Revue d'Epidemiologie, Medecine Sociale et Sante Publique = Rev. Epidemiol. Med. Soc. Sante Publique
-Revue d'Histoire de l'Art Dentaire = Rev. Hist. Art Dent.
-Revue d'Hygiene et de Medecine Sociale = Rev. Hyg. Med. Soc.
-Revue d'Immunologie = Rev. Immunol. (Paris)
-Revue d'Immunologie et de Therapie Antimicrobienne = Rev. Immunol. Ther. Antimicrob.
-Revue d'Odonto-Stomatologie = Rev. Odontostomatol. (Paris)
-Revue d'Odonto-Stomatologie du Midi de la France = Rev. Odontostomatol. Midi Fr.
-Revue d'Orthopedie Dento-Faciale = Rev. Orthop. Dento. Faciale
-Revue d'Oto-Neuro-Ophtalmologie = Rev. Otoneuroophtalmol.
-Revue de Chirurgie Orthopedique et Reparatrice de l'Appareil Moteur = Rev. Chir. Orthop. Reparatrice Appar. Mot.
-Revue de Gerontologie d'Expression Francaise = Rev. Gerontol. Expr. Fr.
-Revue de Laryngologie Otologie Rhinologie = Rev. Laryngol. Otol. Rhinol. (Bord.)
-Revue de Medecine Aeronautique = Rev. Med. Aeronaut.
-Revue de Medecine Interne = Rev. Med. Interne
-Revue de Medecine Psychosomatique et de Psychologie Medicale = Rev. Med. Psychosom. Psychol. Med.
-Revue de Neuropsychiatrie Infantile et d'Hygiene Mentale de l'Enfance = Rev. Neuropsychiatr. Infant.
-Revue de Pathologie Comparee = Rev. Pathol. Comp.
-Revue de Pneumologie Clinique = Rev. Pneumol. Clin.
-Revue de Stomatologie et de Chirurgie Maxillo-Faciale = Rev. Stomatol. Chir. Maxillofac.
-Revue de Tuberculose et de Pneumologie = Rev. Tuberc. Pneumol. (Paris)
-Revue de l'Atherosclerose et des Arteriopathies Peripheriques = Rev. Atheroscler. (Paris)
-Revue de l'Infirmiere = Rev. Infirm.
-Revue de l'Infirmiere et de l'Assistante Sociale = Rev. Infirm. Assist. Soc.
-Revue de l'Infirmiere. Informations = Rev. Infirm. [Inf.]
-Revue de l'Institut d Hygiene des Mines = Rev. Inst. Hyg. Mines (Hasselt)
-Revue des Corps de Sante des Armees, Terre, Mer, Air = Rev. Corps Sante Armees. Terre. Mer. Air
-Revue des Infirmieres et Infirmiers Auxiliaires du Quebec = Rev. Infirm. Infirm. Aux. Que.
-Revue des Maladies Respiratoires = Rev. Mal. Respir.
-Revue du Praticien = Rev. Prat.
-Revue du Rhumatisme et des Maladies Osteo-Articulaires = Rev. Rhum. Mal. Osteoartic.
-Revue du Rhumatisme. Edition Francaise = Rev. Rhum. Ed. Fr.
-Revue du Rhumatisme. English Edition = Rev. Rhum. Engl. Ed.
-Revue du SESDA = Rev. SESDA
-Rheologica Acta=Rheol. Acta;RHEAAK;BM
-Rheumatic Diseases Clinics of North America = Rheum. Dis. Clin. North Am.
-Rheumatism = Rheumatism
-Rheumatology = Rheumatology
-Rheumatology International = Rheumatol. Int.
-Rheumatology and Physical Medicine = Rheumatol. Phys. Med.
-Rheumatology and Rehabilitation = Rheumatol. Rehabil.
-Rhinology = Rhinology
-Rhinology. Supplement = Rhinol. Suppl.
-Rhode Island Dental Journal = R. I. Dent. J.
-Rhode Island Medical Journal = R. I. Med. J.
-Rhode Island Medicine = R. I. Med.
-Rhodesia Nurse = Rhod. Nurse
-Rhodesian Nurse = Rhod. Nurse
-Rhumatologie = Rhumatologie
-Ricerca Scientifica = Ric. Sci.
-Ricerca Scientifica. 2 Ser. Parte 1, Rivista = Ric. Sci. 2 Ser. Pt. 1 Riv.
-Ricerca Scientifica. 2 Ser. Parte 2, Rendiconti. Sezione B, Biologica = Ric. Sci. 2 Ser. Pt 2 Rend. [B]
-Ricerca in Clinica e in Laboratorio = Ric. Clin. Lab.
-Riforma Medica = Riforma Med.
-Rinsho Biseibutshu Jinsoku Shindan Kenkyukai Shi (Journal of the Association for Rapid Method and Automation in Microbiology) = Rinsho Biseibutshu Jinsoku Shindan Kenkyukai Shi
-Rinsho Byori (Japanese Journal of Clinical Pathology) = Rinsho Byori
-Rinsho Hoshasen (Japanese Journal of Clinical Radiology) = Rinsho Hoshasen
-Rinsho Ketsueki (Japanese Journal of Clinical Hematology) = Rinsho Ketsueki
-Rinsho Kyobu Geka (Japanese Annals of Thoracic Surgery) = Rinsho Kyobu Geka
-Rinsho Shika (Clinical Dentistry) = Rinsho Shika
-Rinsho Shinkeigaku (Clinical Neurology) = Rinsho Shinkeigaku
-Rinsho Shishubyo Danwakai Kaishi = Rinsho Shishubyo Danwakai Kaishi
-Risk Analysis = Risk Anal.
-Risk Management = Risk Manage.
-Rivista Critica di Clinica Medica = Riv. Crit. Clin. Med.
-Rivista Europea per le Scienze Mediche e Farmacologiche = Riv. Eur. Sci. Med. Farmacol.
-Rivista Italiana Degli Odontotecnici = Riv. Ital. Odontotec.
-Rivista Italiana d'Igiene = Riv. Ital. Ig.
-Rivista Italiana di Ginecologia = Riv. Ital. Ginecol.
-Rivista Italiana di Odontoiatria Infantile = Riv. Ital. Odontoiatr. Infant.
-Rivista Italiana di Stomatologia = Riv. Ital. Stomatol.
-Rivista Oto-Neuro-Oftalmologica = Riv. Otoneurooftalmol.
-Rivista Sperimentale di Freniatria e Medicina Legale delle Alienazioni Mentali = Riv. Sper. Freniatr.
-Rivista d'Ostetricia e Ginecologia Pratica = Riv. Ostet. Ginecol. Prat.
-Rivista degli Infortuni e delle Malattie Professionali = Riv. Infort. Mal. Prof.
-Rivista dell'Infermiere = Riv. Inferm.
-Rivista dell'Istituto Sieroterapico Italiano = Riv. Ist. Sieroter. Ital.
-Rivista di Anatomia Patologica e di Oncologia = Riv. Anat. Patol. Oncol.
-Rivista di Biologia = Riv. Biol.
-Rivista di Clinica Pediatrica = Riv. Clin. Pediatr.
-Rivista di Emoterapia ed Immunoematologia = Riv. Emoter. Immunoematol.
-Rivista di Gastro-Enterologia = Riv. Gastroenterol.
-Rivista di Istochimica, Normale e Patologica = Riv. Istochim. Norm. Patol.
-Rivista di Malariologia = Riv. Malariol.
-Rivista di Medicina Aeronautica e Spaziale = Riv. Med. Aeronaut. Spaz.
-Rivista di Neurobiologia = Riv. Neurobiol.
-Rivista di Neurologia = Riv. Neurol.
-Rivista di Odontoiatria degli Amici di Brugg = Riv. Odontoiatr. Amici Brugg
-Rivista di Odontostomatologia e Implantoprotesi = Riv. Odontostomatol. Implantoprotesi
-Rivista di Ostetricia Ginecologia Pratica e Medicina Perinatale = Riv. Ostet. Ginecol. Prat. Med. Perinat.
-Rivista di Ostetricia e Ginecologia = Riv. Ostet. Ginecol.
-Rivista di Parassitologia = Riv. Parassitol.
-Rivista di Patologia Clinica e Sperimentale = Riv. Patol. Clin. Sper.
-Rivista di Patologia Nervosa e Mentale = Riv. Patol. Nerv. Ment.
-Rivista di Patologia e Clinica = Riv. Patol. Clin.
-Rivista di Storia della Medicina = Riv. Stor. Med.
-Rocky Mountain Medical Journal = Rocky Mt. Med. J.
-Rocznik Pomorskiej Akademii Medycznej im. Gen. Karola Swierczewskiego w Szczecinie = Rocz. Pomor. Akad. Med.
-Roczniki Akademii Medycznej im. Juliana Marchlewskiego w Bialymstoku = Rocz. Akad. Med. Im. Juliana Marchlewskiego Bialymst.
-Roczniki Akademii Medycznej im. Juliana Marchlewskiego w Bialymstoku. Supplement = Rocz. Akad. Med. Im. Juliana Marchlewskiego Bialymst. Suppl.
-Roczniki Akademii Medycznej w Bialymstoku = Rocz. Akad. Med. Bialymst.
-Roczniki Akademii Medycznej w Bialymstoku. Supplement = Rocz. Akad. Med. Bialymst. Supl.
-Roczniki Panstwowego Zakladu Higieny = Rocz. Panstw. Zakl. Hig.
-Rofo; Fortschritte auf dem Gebiete der Rontgenstrahlen und der Neuen Bildgebenden Verfahren = Rofo. Fortschr. Geb. Rontgenstr. Neuen Bildgeb. Verfahr.
-Rogerian Nursing Science News = Rogerian Nurs. Sci. News
-Romanian Journal of Endocrinology = Rom. J. Endocrinol.
-Romanian Journal of Internal Medicine = Rom. J. Intern. Med.
-Romanian Journal of Morphology and Embryology = Rom. J. Morphol. Embryol.
-Romanian Journal of Neurology and Psychiatry = Rom. J. Neurol. Psychiatry
-Romanian Journal of Physics=Rom. J. Phys.;RJPHEC;10/YR
-Romanian Journal of Physiology = Rom. J. Physiol.
-Romanian Journal of Virology = Rom. J. Virol.
-Romanian Medical Review = Rom. Med. Rev.
-Rontgen-Blatter = Rontgenblatter.
-Rontgenpraxis = Rontgenpraxis
-Rossiiskii Fiziologicheskii Zhurnal imeni I. M. Sechenova = Ross. Fiziol. Zh. Im. I. M. Sechenova
-Rossiiskii Fiziologicheskii Zhurnal imeni I.M. Sechenova = Ross. Fiziol. Zh. Im. I M Sechenova
-Rossiiskii Khimicheskii Zhurnal=Ross. Khim. Zh.;RKZHEZ;BM
-Rossiiskii Meditsinskii Zhurnal = Ross. Med. Zh.
-Roumanian Archives of Microbiology and Immunology = Roum. Arch. Microbiol. Immunol.
-Royal Canadian Dental Corps Quarterly = R. Can. Dent. Corps Q.
-Royal Institute of Public Health and Hygiene Journal = R. Inst. Public Health Hyg. J.
-Royal Society of Health Journal = R. Soc. Health J.
-Rozhledy v Chirurgii = Rozhl. Chir.
-Rozprawy Wydzialu Nauk Medycznych = Rozpr. Wydz. Nauk Med.
-Rubber Chemistry and Technology=Rubber Chem. Technol.;RCTEA4;5/YR
-Rumanian Medical Review = Rum. Med. Rev.
-Rural and Remote Health = Rural Remote Health
-Russ Coile's Health Trends = Russ Coiles Health Trends
-Russian Chemical Bulletin=Russ. Chem. Bull.;RCBUEY;M
-Russian Chemical Reviews=Russ. Chem. Rev.;RCRVAB;M
-Russian Journal of Applied Chemistry=Russ. J. Appl. Chem.;RJACEO;M
-Russian Journal of Bioorganic Chemistry=Russ. J. Bioorg. Chem.;RJBCET;BM
-Russian Journal of Coordination Chemistry=Russ. J. Coord. Chem.;RJCCEY;M
-Russian Journal of Electrochemistry=Russ. J. Electrochem.;RJELE3;M
-Russian Journal of General Chemistry=Russ. J. Gen. Chem.;RJGCEK;M
-Russian Journal of Genetics=Russ. J. Genet.;RJGEEQ;M
-Russian Journal of Organic Chemistry=Russ. J. Org. Chem.;RJOCEQ;M
-Russian Journal of Physical Chemistry=Russ. J. Phys. Chem.;RJPCAR;M
-Russian Journal of Plant Physiology=Russ. J. Plant Physiol.;RJPPE2;BM
-Ryan Advisory for Health Services Governing Boards = Ryan Advis. Health Serv. Gov. Boards
-Ryoikibetsu Shokogun Shirizu (Series on Symptomatic Syndrome by Area) = Ryoikibetsu Shokogun Shirizu
-Ryumachi = Ryumachi
-S e TA e NU; Rivista di Scienza e Tecnologia Degli Alimenti e di Nutrizione Umana = S TA NU
-SA Nursing Journal = SA Nurs. J.
-SAAD Digest = SAAD Dig.
-SAAS Bulletin, Biochemistry and Biotechnology = SAAS Bull. Biochem. Biotechnol.
-SADJ = SADJ
-SAR and QSAR in Environmental Research = SAR QSAR Environ. Res.
-SC Reports = SC Rep.
-SC Trodent = SC Trodent
-SCADA Journal = SCADA J.
-SCHA Journal = SCHA J.
-SCI Nursing = SCI Nurs.
-SCNA Newsletter = SCNA Newsl.
-SDA Dentist = SDA Dent.
-SHSTF = SHSTF
-SMU Law Review = SMU Law Rev.
-SOLAIAT (Sociedad Odontologica Latino-Americana de Implantes Aloplasticos y Transplantes) = SOLAIAT
-SPE Production & Facilities=SPE Prod. Facil.;SPRFEZ;Q
-SPE Reservoir Evaluation & Engineering=SPE Reservoir Eval. Eng.;SREEFG;BM
-SPVN = SPVN
-SSO; Schweizerische Monatsschrift fur Zahnheilkunde = SSO Schweiz. Monatsschr. Zahnheilkd.
-STAL, Sciences et Techniques de l'Animal de Laboratoire=STAL, Sci. Tech. Anim. Lab.;STALDT;Q
-STNS Journal of Trauma Nursing = STNS J. Trauma Nurs.
-Sabouraudia = Sabouraudia
-Sac Explorer = Sac Explor.
-Sairaanhoidon Vuosikirja = Sairaanh. Vuosik.
-Sairaanhoitaja = Sairaanhoitaja
-Sairaanhoitajalehti = Sairaanhoitajalehti
-Saishin Igaku (Recent Medicine) = Saishin Igaku
-Salud Bucal = Salud Bucal
-Salud Publica de Mexico = Salud Publica Mex.
-Same-Day Surgery = Same. Day Surg.
-Sammlung Zwangloser Abhandlungen aus dem Gebiete der Psychiatrie und Neurologie = Samml. Zwangl. Abh. Geb. Psychiatr. Neurol.
-San Fernando Valley Dental Society Bulletin = San Fernando Val. Dent. Soc. Bull.
-San Gabriel Valley Dental Society Bulletin = San Gabriel Val. Dent. Soc. Bull.
-Sanfujinka no Jissai (Practice of Gynecology and Obstetrics) = Sanfujinka No Jissai
-Sangre = Sangre (Barc.)
-Sangyo Eiseigaku Zasshi (Journal of Occupational Health) = Sangyo Eiseigaku Zasshi
-Sangyo Igaku (Japanese Journal of Industrial Health) = Sangyo Igaku
-Sante = Sante
-Sante Mentale au Quebec = Sante Ment. Que.
-Sante Publique = Sante Publique (Bucur.)
-Sante Quebec = Sante Que.
-Santo Tomas Nursing Journal = St. Tomas Nurs. J.
-Sapporo Igaku Zasshi (Sapporo Medical Journal) = Sapporo Igaku Zasshi
-Sarcoidosis = Sarcoidosis
-Sarcoidosis, Vasculitis, and Diffuse Lung Diseases = Sarcoidosis Vasc. Diffuse Lung Dis.
-Saturday Review = Saturday Rev.
-Sbornik Lekarsky = Sb. Lek.
-Sbornik Vedeckych Praci Lekarske Fakulty Karlovy Univerzity v Hradci Kralove = Sb. Ved. Pr. Lek. Fak. Karlovy Univerzity Hradci Kralove
-Sbornik Vedeckych Praci Lekarske Fakulty Karlovy Univerzity v Hradci Kralove. Supplementum = Sb. Ved. Pr. Lek. Fak. Karlovy Univerzity Hradci Kralove. Suppl.
-Scalpel = Scalpel (Brux.)
-Scandinavian Audiology = Scand. Audiol.
-Scandinavian Audiology. Supplementum = Scand. Audiol. Suppl.
-Scandinavian Cardiovascular Journal = Scand. Cardiovasc. J.
-Scandinavian Cardiovascular Journal. Supplement = Scand. Cardiovasc. J. Suppl.
-Scandinavian Journal of Caring Sciences = Scand. J. Caring Sci.
-Scandinavian Journal of Clinical and Laboratory Investigation = Scand. J. Clin. Lab. Invest.
-Scandinavian Journal of Clinical and Laboratory Investigation. Supplement = Scand. J. Clin. Lab. Invest. Suppl.
-Scandinavian Journal of Dental Research = Scand. J. Dent. Res.
-Scandinavian Journal of Gastroenterology = Scand. J. Gastroenterol.
-Scandinavian Journal of Gastroenterology. Supplement = Scand. J. Gastroenterol. Suppl.
-Scandinavian Journal of Haematology = Scand. J. Haematol.
-Scandinavian Journal of Haematology. Supplementum = Scand. J. Haematol. Suppl.
-Scandinavian Journal of Immunology = Scand. J. Immunol.
-Scandinavian Journal of Immunology. Supplement = Scand. J. Immunol. Suppl.
-Scandinavian Journal of Infectious Diseases = Scand. J. Infect. Dis.
-Scandinavian Journal of Infectious Diseases. Supplementum = Scand. J. Infect. Dis. Suppl.
-Scandinavian Journal of Laboratory Animal Science=Scand. J. Lab. Anim. Sci.;SJLSE2;Q
-Scandinavian Journal of Medicine and Science in Sports = Scand. J. Med. Sci. Sports
-Scandinavian Journal of Metallurgy=Scand. J. Metall.;SJMLAG;BM
-Scandinavian Journal of Plastic and Reconstructive Surgery = Scand. J. Plast. Reconstr. Surg.
-Scandinavian Journal of Plastic and Reconstructive Surgery and Hand Surgery = Scand. J. Plast. Reconstr. Surg. Hand Surg.
-Scandinavian Journal of Plastic and Reconstructive Surgery and Hand Surgery. Supplementum = Scand. J. Plast. Reconstr. Surg. Hand Surg. Suppl.
-Scandinavian Journal of Plastic and Reconstructive Surgery. Supplementum = Scand. J. Plast. Reconstr. Surg. Suppl.
-Scandinavian Journal of Primary Health Care = Scand. J. Prim. Health Care
-Scandinavian Journal of Primary Health Care. Supplement = Scand. J. Prim. Health Care Suppl.
-Scandinavian Journal of Psychology = Scand. J. Psychol.
-Scandinavian Journal of Public Health = Scand. J. Public Health
-Scandinavian Journal of Public Health. Supplement = Scand. J. Public Health Suppl.
-Scandinavian Journal of Rehabilitation Medicine = Scand. J. Rehabil. Med.
-Scandinavian Journal of Rehabilitation Medicine. Supplement = Scand. J. Rehabil. Med. Suppl.
-Scandinavian Journal of Respiratory Diseases = Scand. J. Respir. Dis.
-Scandinavian Journal of Respiratory Diseases. Supplementum = Scand. J. Respir. Dis. Suppl.
-Scandinavian Journal of Rheumatology = Scand. J. Rheumatol.
-Scandinavian Journal of Rheumatology. Supplement = Scand. J. Rheumatol. Suppl.
-Scandinavian Journal of Social Medicine = Scand. J. Soc. Med.
-Scandinavian Journal of Social Medicine. Supplementum = Scand. J. Soc. Med. Suppl.
-Scandinavian Journal of Surgery = Scand. J. Surg.
-Scandinavian Journal of Thoracic and Cardiovascular Surgery = Scand. J. Thorac. Cardiovasc. Surg.
-Scandinavian Journal of Thoracic and Cardiovascular Surgery. Supplementum = Scand. J. Thorac. Cardiovasc. Surg. Suppl.
-Scandinavian Journal of Urology and Nephrology = Scand. J. Urol. Nephrol.
-Scandinavian Journal of Urology and Nephrology. Supplementum = Scand. J. Urol. Nephrol. Suppl.
-Scandinavian Journal of Work, Environment and Health = Scand. J. Work. Environ. Health
-Scandinavian Society of Forensic Odontology Newsletter = Scand. Soc. Forensic Odontol. Newsl.
-Scanning = Scanning
-Scanning Electron Microscopy = Scan. Electron Microsc.
-Scanning Microscopy = Scanning Microsc.
-Scanning Microscopy. Supplement = Scanning Microsc. Suppl.
-Scanodont = Scanodont
-Schizophrenia Bulletin = Schizophr. Bull.
-Schizophrenia Research = Schizophr. Res.
-Scholarly Inquiry for Nursing Practice = Sch. Inq. Nurs. Pract.
-School Dental Services Gazette = Sch. Dent. Serv. Gaz. N. Z.
-School Health Review = Sch. Health Rev.
-Schriftenreihe Neurologie (Neurology Series) = Schriftenr. Neurol.
-Schriftenreihe Zentralblatt fur Arbeitsmedizin Arbeitsschutz und Prophylaxe = Schriftenr. Zentralbl. Arbeitsmed. Arbeitsschutz Prophyl.
-Schriftenreihe Zentralblatt fur Arbeitsmedizin, Arbeitsschutz, Prophylaxe, und Ergonomie = Schriftenr. Zentralbl. Arbeitsmed. Arbeitsschutz. Prophyl. Ergonomie
-Schriftenreihe aus dem Gebiete des Offentlichen Gesundheitswesens = Schriftenr. Geb. Off. Gesundheitswes.
-Schriftenreihe des Vereins fur Wasser-, Boden-, und Lufthygiene = Schriftenr. Ver. Wasser. Boden. Lufthyg.
-Schweizer Archiv fur Neurologie und Psychiatrie = Schweiz. Arch. Neurol. Psychiatr.
-Schweizer Archiv fur Neurologie, Neurochirurgie und Psychiatrie = Schweiz. Arch. Neurol. Neurochir. Psychiatr.
-Schweizer Archiv fur Tierheilkunde = Schweiz. Arch. Tierheilkd.
-Schweizer Monatsschrift fur Zahnmedizin = Schweiz. Monatsschr. Zahnmed.
-Schweizerische Apotheker-Zeitung = Schweiz. Apoth. Ztg.
-Schweizerische Medizinische Wochenschrift = Schweiz. Med. Wochenschr.
-Schweizerische Medizinische Wochenschrift. Supplementum = Schweiz. Med. Wochenschr. Suppl.
-Schweizerische Monatsschrift fur Zahnmedizin = Schweiz. Monatsschr. Zahnmed.
-Schweizerische Rundschau fur Medizin Praxis = Schweiz. Rundsch. Med. Prax.
-Schweizerische Zeitschrift fur Medizin und Traumatologie = Schweiz. Z. Med. Traumatol.
-Schweizerische Zeitschrift fur Psychologie und Ihre Anwendungen = Schweiz. Z. Psychol. Anwend.
-Schweizerische Zeitschrift fur Sportmedizin = Schweiz. Z. Sportmed.
-Schwestern Revue = Schwest. Rev.
-Science = Science
-Science (Washington, DC, United States)=Science (Washington, DC, U. S.);SCIEAS;W
-Science Digest = Sci. Dig.
-Science News = Sci. News
-Science Progress = Sci. Prog.
-Science Reports of the Research Institute, Tohoku University. Ser. C, Medicine = Sci. Rep. Res. Inst. Tohoku Univ. [Med.]
-Science and Justice = Sci. Justice
-Science et Recherche Odontostomatologiques = Sci. Rech. Odontostomatol.
-Science in China, Series B: Chemistry=Sci. China, Ser. B: Chem.;SCBCFQ;BM
-Science in China. Series B, Chemistry, Life Sciences and Earth Sciences = Sci. China B
-Science in China. Series C, Life Sciences = Sci. China C Life Sci.
-Science in Progress = Sci. Prog. (New Haven)
-Science of the Total Environment = Sci. Total Environ.
-Science's STKE = Sci. STKE
-Science, Medicine, and Man = Sci. Med. Man
-Scientia Sinica = Sci. Sin.
-Scientia Sinica. Series B, Chemical, Biological, Agricultural, Medical and Earth Sciences = Sci. Sin. [B]
-Scientific American = Sci. Amer.
-Scientific Basis of Medicine Annual Reviews = Sci. Basis Med. Annu. Rev.
-Scientific Proceedings of the Cardiff Medical Society = Sci. Proc. Cardiff Med. Soc.
-Scientific and Educational Bulletin = Sci. Educ. Bull.
-Scientific and Educational Journal = Sci. Educ. J.
-Scottish Medical Journal = Scott. Med. J.
-Scripta Materialia=Scr. Mater.;SCMAF7;SM
-Scripta Medica = Scr. Med. (Brno)
-Second Messengers and Phosphoproteins = Second Messengers Phosphoproteins
-Second Opinion = Second Opin.
-Second Opinions of Health Care Issues = Second Opin. Health Care Issues
-Seibutsu Kogaku Kaishi=Seibutsu Kogaku Kaishi;SEKAEA;M
-Seikagaku (Journal of Japanese Biochemical Society) = Seikagaku
-Seikei Geka (Orthopedic Surgery) = Seikei Geka
-Seiroka Kango Daigaku Kiyo = Seiroka Kango Daigaku Kiyo
-Seishin Igaku Kenkyusho Gyosekishu (Bulletin of the Seishin-Igaku Institute) = Seishin Igaku Kenkyusho Gyosekishu
-Seishin Shinkeigaku Zasshi (Psychiatria et Neurologia Japonica) = Seishin Shinkeigaku Zasshi
-Seizure = Seizure
-Selecoes Odontologicas = Sel. Odontol. (Sao Paulo)
-Selective Cancer Therapeutics = Sel. Cancer Ther.
-Semaine Therapeutique = Sem. Ther.
-Semaine des Hopitaux = Sem. Hop.
-Semaine des Hopitaux Therapeutique = Sem. Hop. Ther.
-Semiconductor Science and Technology=Semicond. Sci. Technol.;SSTEET;M
-Semiconductors=Semiconductors;SMICES;M
-Semina = Semina
-Seminario de Ensenanza de la Odontopediatria = Semin. Ensen. Odontopediatr.
-Seminars for Nurse Managers = Semin. Nurse Manag.
-Seminars in Adolescent Medicine = Semin. Adolesc. Med.
-Seminars in Arthritis and Rheumatism = Semin. Arthritis Rheum.
-Seminars in Arthroplasty = Semin. Arthroplasty
-Seminars in Cancer Biology = Semin. Cancer Biol.
-Seminars in Cell Biology = Semin. Cell Biol.
-Seminars in Cell and Developmental Biology = Semin. Cell Dev. Biol.
-Seminars in Clinical Neuropsychiatry = Semin. Clin. Neuropsychiatry
-Seminars in Cutaneous Medicine and Surgery = Semin. Cutan. Med. Surg.
-Seminars in Dental Hygiene = Semin. Dent. Hyg.
-Seminars in Dermatology = Semin. Dermatol.
-Seminars in Diagnostic Pathology = Semin. Diagn. Pathol.
-Seminars in Drug Treatment = Semin. Drug Treat.
-Seminars in Fetal and Neonatal Medicine = Semin. Fetal. Neonatal Med.
-Seminars in Gastrointestinal Disease = Semin. Gastrointest. Dis.
-Seminars in Hematology = Semin. Hematol.
-Seminars in Immunology = Semin. Immunol.
-Seminars in Interventional Cardiology = Semin. Interv. Cardiol.
-Seminars in Laparoscopic Surgery = Semin. Laparosc. Surg.
-Seminars in Liver Disease = Semin. Liver Dis.
-Seminars in Musculoskeletal Radiology = Semin. Musculoskelet. Radiol.
-Seminars in Neonatology = Semin. Neonatol.
-Seminars in Nephrology = Semin. Nephrol.
-Seminars in Neurology = Semin. Neurol.
-Seminars in Nuclear Medicine = Semin. Nucl. Med.
-Seminars in Oncology = Semin. Oncol.
-Seminars in Oncology Nursing = Semin. Oncol. Nurs.
-Seminars in Ophthalmology = Semin. Ophthalmol.
-Seminars in Orthodontics = Semin. Orthod.
-Seminars in Pediatric Neurology = Semin. Pediatr. Neurol.
-Seminars in Pediatric Surgery = Semin. Pediatr. Surg.
-Seminars in Perinatology = Semin. Perinatol.
-Seminars in Perioperative Nursing = Semin. Perioper. Nurs.
-Seminars in Psychiatry = Semin. Psychiatry
-Seminars in Radiation Oncology = Semin. Radiat. Oncol.
-Seminars in Reproductive Endocrinology = Semin. Reprod. Endocrinol.
-Seminars in Reproductive Medicine = Semin. Reprod. Med.
-Seminars in Respiratory Infections = Semin. Respir. Infect.
-Seminars in Roentgenology = Semin. Roentgenol.
-Seminars in Speech and Language = Semin. Speech Lang.
-Seminars in Surgical Oncology = Semin. Surg. Oncol.
-Seminars in Thoracic and Cardiovascular Surgery = Semin. Thorac. Cardiovasc. Surg.
-Seminars in Thoracic and Cardiovascular Surgery. Pediatric Cardiac Surgery Annual = Semin. Thorac. Cardiovasc. Surg. Pediatr. Card. Surg. Annu.
-Seminars in Thrombosis and Hemostasis = Semin. Thromb. Hemost.
-Seminars in Ultrasound, CT and MR = Semin. Ultrasound. CT MR
-Seminars in Urologic Oncology = Semin. Urol. Oncol.
-Seminars in Urology = Semin. Urol.
-Seminars in Vascular Surgery = Semin. Vasc. Surg.
-Seminars in Veterinary Medicine and Surgery (Small Animal) = Semin. Vet. Med. Surg. (Small Anim.)
-Senior Nurse = Sr. Nurse
-Sensors and Actuators, A: Physical=Sens. Actuators, A;SAAPEB;16/yr
-Sensors and Actuators, B: Chemical=Sens. Actuators, B;SABCEB;BW
-Sensory Processes = Sens. Processes
-Separation Science and Technology=Sep. Sci. Technol.;SSTEDS;16/YR
-Separation and Purification Technology=Sep. Purif. Technol.;SPUTFP;18/yr
-Sepu=Sepu;SEPUER;BM
-Series Haematologica = Ser. Haematol.
-Series Paedopsychiatrica = Ser. Paedopsychiatr.
-Series on Nursing Administration = Ser. Nurs. Adm.
-Servir = Servir
-Sexual Abuse = Sex. Abuse
-Sexual Health = Sex. Health
-Sexually Transmitted Diseases = Sex. Transm. Dis.
-Sexually Transmitted Infections = Sex. Transm. Infect.
-Sheng Li Ke Xue Jin Zhan (Progress in Physiology) = Sheng Li Ke Xue Jin Zhan
-Sheng Li Xue Bao (Acta Physiologica Sinica) = Sheng Li Xue Bao
-Sheng Wu Yi Xue Gong Cheng Xue Za Zhi (Journal of Biomedical Engineering) = Sheng Wu Yi Xue Gong Cheng Xue Za Zhi
-Shi Yan Sheng Wu Xue Bao (Bulletin of Experimental Biology) = Shi Yan Sheng Wu Xue Bao
-Shigaku (Odontology) = Shigaku
-Shika Igaku (Journal of Osaka Odontological Society) = Shika Igaku
-Shika Kiso Igakkai Zasshi (Japanese Journal of Oral Biology) = Shika Kiso Igakkai Zasshi
-Shika Rikogaku Zasshi (Journal of the Japan Society for Dental Apparatus and Materials) = Shika Rikogaku Zasshi
-Shika Zairyo, Kikai (Journal of the Japanese Society for Dental Materials and Devices) = Shika Zairyo Kikai
-Shikai Tenbo (Dental Outlook) = Shikai Tenbo
-Shikwa Gakuho (Dental Science Reports) = Shikwa Gakuho
-Shinkei Kenkyu No Shimpo (Advances in Neurological Sciences) = Shinkei Kenkyu No Shimpo
-Shinrigaku Kenkyu (Japanese Journal of Psychology) = Shinrigaku Kenkyu
-Shiyo (Journal of the Tokyo Dental Association) = Shiyo
-Shiyou Huagong=Shiyou Huagong;SHHUE8;M
-Shiyou Xuebao, Shiyou Jiagong=Shiyou Xuebao, Shiyou Jiagong;SXSHEY;BM
-Shock = Shock
-Shoni Shikagaku Zasshi (Japanese Journal of Pedodontics) = Shoni Shikagaku Zasshi
-Showa Igakkai Zasshi (Journal of the Showa Medical Association) = Showa Igakkai Zasshi
-Showa Shigakkai Zasshi (Journal of Showa University Dental Society) = Showa Shigakkai Zasshi
-Shuichuli Jishu=Shuichuli Jishu;SHJIEG;M
-Shujutsu (Operation) = Shujutsu
-Sichuan Da Xue Xue Bao. Yi Xue Ban (Journal of Sichuan University. Medical Science Edition) = Sichuan Da Xue Xue Bao Yi Xue Ban
-Sichuan Yi Xue Yuan Xue Bao (Acta Academiae Medicinae Sichuan) = Sichuan Yi Xue Yuan Xue Bao
-Sicilia Sanitaria = Sicil. Sanit.
-Sight-Saving Review = Sight. Sav. Rev.
-Sightsaving = Sightsaving
-Sightsaving Review = Sightsav. Rev.
-Signal Transduction=Signal Transduction;STIRCI;6/YR
-Signature = Signature
-Silicon Chemistry=Silicon Chem.;SCIHB4;BM
-Singapore Dental Journal = Singapore Dent. J.
-Singapore Medical Journal = Singapore Med. J.
-Sistema Nervoso = Sist. Nerv.
-Sistole = Sistole
-Sjukskoterskan = Sjukskoterskan
-Skeletal Radiology = Skeletal Radiol.
-Skin Pharmacology = Skin Pharmacol.
-Skin Pharmacology and Applied Skin Physiology = Skin Pharmacol. Appl. Skin Physiol.
-Skin Pharmacology and Physiology = Skin Pharmacol. Physiol.
-Skinmed = Skinmed
-Sleep = Sleep
-Sleep Research Online = Sleep Res. Online
-Sloan Management Review = Sloan Manage. Rev.
-Small=Small;SMALBC;12/YR
-Social Biology = Soc. Biol.
-Social Casework = Soc. Casework
-Social Forces = Soc. Forces
-Social Policy = Soc. Policy
-Social Problems = Soc. Probl.
-Social Psychiatry = Soc. Psychiatry
-Social Psychiatry and Psychiatric Epidemiology = Soc. Psychiatry Psychiatr. Epidemiol.
-Social Psychology = Soc. Psychol.
-Social Psychology Quarterly = Soc. Psychol. Q.
-Social Science Research = Soc. Sci. Res.
-Social Science and Medicine = Soc. Sci. Med.
-Social Science and Medicine. Medical Anthropology = Soc. Sci. Med. [Med. Anthropol.]
-Social Science and Medicine. Medical Economics = Soc. Sci. Med. [Med. Econ.]
-Social Science and Medicine. Medical Geography = Soc. Sci. Med. [Med. Geogr.]
-Social Science and Medicine. Medical Psychology and Medical Sociology = Soc. Sci. Med. [Med. Psychol. Med. Sociol.]
-Social Science and Medicine. Part A, Medical Sociology = Soc. Sci. Med. [A]
-Social Science and Medicine. Part B, Medical Anthropology = Soc. Sci. Med. [B]
-Social Science and Medicine. Part C, Medical Economics = Soc. Sci. Med. [C]
-Social Science and Medicine. Part D, Medical Geography = Soc. Sci. Med. [D]
-Social Science and Medicine. Part E, Medical Psychology = Soc. Sci. Med. [E]
-Social Science and Medicine. Part F, Medical and Social Ethics = Soc. Sci. Med. [F]
-Social Security Bulletin = Soc. Secur. Bull.
-Social Security Bulletin. Annual Statistical Supplement. = Soc. Secur. Bull. Annu. Stat. Suppl.
-Social Service Review = Soc. Serv. Rev.
-Social Work = Soc. Work
-Social Work Research = Soc. Work Res.
-Social Work Research and Abstracts = Soc. Work Res. Abstr.
-Social Work in Health Care = Soc. Work Health Care
-Social and Rehabilitation Record = Soc. Rehabil. Rec.
-Social-Medicinsk Tidskrift = Soc. Med. Tidskr.
-Society = Society
-Society for Applied Bacteriology Symposium Series = Soc. Appl. Bacteriol. Symp. Ser.
-Society for Nursing History Gazette = Soc. Nurs. Hist. Gaz.
-Society of General Physiologists Series = Soc. Gen. Physiol. Ser.
-Socio-Economic Planning Sciences = Socioecon. Plann. Sci.
-Socioeconomic Issues of Health = Socioecon. Issues Health
-Sociological Review = Sociol. Rev.
-Sociological Review Monograph = Sociol. Rev. [Monogr.]
-Sociology of Health and Illness = Sociol. Health Illn.
-Sociometry = Sociometry
-Soft Matter=Soft Matter;SMOABF;6/YR
-Software in Healthcare = Softw. Healthc.
-Sogo Kango (Comprehensive Nursing Quarterly) = Sogo Kango
-Soil Biology & Biochemistry=Soil Biol. Biochem.;SBIOAH;M
-Soil Science=Soil Sci.;SOSCAK;M
-Soil Science Society of America Journal=Soil Sci. Soc. Am. J.;SSSJD4;BM
-Soins = Soins
-Soins. Cardiologie = Soins. Cardiol.
-Soins. Chirurgie = Soins. Chir.
-Soins. Chirurgie Generale et Specialisee = Soins. Chir. Gen. Spec.
-Soins. Formation, Pedagogie, Encadrement = Soins. Form. Pedagog. Encadr.
-Soins. Gerontologie = Soins. Gerontol.
-Soins. Gynecologie, Obstetrique, Puericulture = Soins. Gynecol. Obstet. Pueric.
-Soins. Gynecologie, Obstetrique, Puericulture, Pediatrie = Soins. Gynecol. Obstet. Pueric. Pediatr.
-Soins. Pathologie Tropicale = Soins. Pathol. Trop.
-Soins. Pediatrie, Puericulture = Soins. Pediatr. Pueric.
-Soins. Psychiatrie = Soins. Psychiatr.
-Solar Energy Materials & Solar Cells=Sol. Energy Mater. Sol. Cells;SEMCEQ;20/YR
-Solid State Communications=Solid State Commun.;SSCOA4;48/YR
-Solid State Ionics=Solid State Ionics;SSIOD3;40/YR
-Solid State Nuclear Magnetic Resonance = Solid State Nucl. Magn. Reson.
-Solid State Sciences=Solid State Sci.;SSSCFJ;M
-Solid-State Electronics=Solid-State Electron.;SSELA5;M
-Solvent Extraction Research and Development, Japan=Solvent Extr. Res. Dev., Jpn.;SERDEK;A
-Solvent Extraction and Ion Exchange=Solvent Extr. Ion Exch.;SEIEDB;BM
-Somatic Cell Genetics = Somatic Cell Genet.
-Somatic Cell and Molecular Genetics = Somat. Cell Mol. Genet.
-Somatosensory Research = Somatosens. Res.
-Somatosensory and Motor Research = Somatosens. Mot. Res.
-Sonde = Sonde
-Sonderband der Zeitschrift Strahlentherapie und Onkologie = Sonderb. Z. Strahlenther. Onkol.
-Sonderbande zur Strahlentherapie und Onkologie = Sonderb. Strahlenther. Onkol.
-Soproden = Soproden
-Sotilaslaaketieteellinen Aikakauslehti = Sotilaslaak. Aikak.
-Soudni Lekarstvi = Soud. Lek.
-Soundings = Soundings
-South African Journal of Chemistry=S. Afr. J. Chem.;SAJCDG;IRR
-South African Journal of Communication Disorders = S. Afr. J. Commun. Disord.
-South African Journal of Medical Sciences = S. Afr. J. Med. Sci.
-South African Journal of Surgery = S. Afr. J. Surg.
-South African Medical Journal = S. Afr. Med. J.
-South Carolina Dental Journal = S. C. Dent. J.
-South Carolina Nurse = S. C. Nurse
-South Carolina Nursing = S. C. Nurs.
-South Dakota Journal of Medicine = S. D. J. Med.
-South Dakota Medicine = S. D. Med.
-South Dakota Nurse = S. D. Nurse
-Southeast Asian Journal of Tropical Medicine and Public Health = Southeast Asian J. Trop. Med. Public Health
-Southern Hospitals = South. Hosp.
-Southern Medical Journal = South. Med. J.
-Southern Medicine = South. Med.
-Southwestern Medicine = Southwest. Med.
-Sovetskaia Meditsina = Sov. Med.
-Sovetskoe Zdravookhranenie = Sov. Zdravookhr.
-Sovetskoe Zdravookhranenie Kirgizii = Sov. Zdravookhr. Kirg.
-Soviet Genetics = Sov. Genet.
-Soviet Journal of Developmental Biology = Sov. J. Dev. Biol.
-Soviet Journal of Ecology = Sov. J. Ecol.
-Sozial- und Praventivmedizin = Soz. Praventivmed.
-Sozialmedizinische und Padagogische Jugendkunde = Sozialmed. Padagog. Jugendkd.
-Space Life Sciences = Space Life Sci.
-Space Science Review = Space Sci. Rev.
-Spanish Journal of Psychology = Span. J. Psychol.
-Spatial Vision = Spat. Vis.
-Special Care in Dentistry = Spec. Care Dentist.
-Special Education = Spec. Educ.
-Special Education: Forward Trends = Spec. Educ. Forward Trends
-Special Libraries = Spec. Libr.
-Special Report Series, Indian Council of Medical Research = Spec. Rep. Ser. Indian Counc. Med. Res.
-Special Topics in Endocrinology and Metabolism = Spec. Top. Endocrinol. Metab.
-Specialty Law Digest. Health Care (Monthly) = Spec. Law Dig. Health Care (Mon.)
-Specialty Law Digest. Health Care Law = Spec. Law Dig. Health Care Law
-Specifying Engineer = Specif. Eng.
-Spectrochimica Acta, Part A: Molecular and Biomolecular Spectroscopy=Spectrochim. Acta, Part A;SAMCAS;14/YR
-Spectrochimica Acta, Part B: Atomic Spectroscopy=Spectrochim. Acta, Part B;SAASBH;M
-Spectrochimica Acta. Part A, Molecular and Biomolecular Spectroscopy = Spectrochim. Acta. A. Mol. Biomol. Spectrosc.
-Spectroscopy (Amsterdam, Netherlands)=Spectroscopy (Amsterdam, Neth.);SPIJDZ;6/YR
-Spectroscopy Letters=Spectrosc. Lett.;SPLEBX;6/YR
-Spectrum = Spectrum
-Speech Pathology and Therapy = Speech Pathol. Ther.
-Sperimentale = Sperimentale
-Spinal Cord = Spinal Cord
-Spine = Spine
-Spine Journal = Spine J.
-Sports Biomechanics = Sports Biomech.
-Sports Medicine = Sports Med.
-Sportverletzung Sportschaden = Sportverletz. Sportschaden
-Springer Seminars in Immunopathology = Springer Semin. Immunopathol.
-Springer Series on Health Care and Society = Springer Ser. Health Care Soc.
-Srpski Arhiv za Celokupno Lekarstvo = Srp. Arh. Celok. Lek.
-St Luke's Hospital Gazette = St Lukes Hosp. Gaz. (Guardamangia)
-Stain Technology = Stain Technol.
-Stanford Law Review = Stanford Law Rev.
-Starch/Staerke=Starch/Staerke;STARDD;M
-Stat; Bulletin of the Wisconsin Nurses Association = Stat.
-State Government = State Gov.
-State Nursing Legislation Quarterly = State Nurs. Legis. Q.
-State of Health Care in America = State Health Care Am.
-Statistical Applications in Genetics and Molecular Biology = Stat. Appl. Genet. Mol. Biol.
-Statistical Bulletin, Metropolitan Insurance Companies = Stat. Bull. Metrop. Insur. Co.
-Statistical Bulletin, Metropolitan Life Foundation = Stat. Bull. Metrop. Life Found.
-Statistical Bulletin, Metropolitan Life Insurance Company = Stat. Bull. Metropol. Life Insur. Co.
-Statistical Methods in Medical Research = Stat. Methods Med. Res.
-Statistical Notes for Health Planners = Stat. Notes Health Plann.
-Statistics in Medicine = Stat. Med.
-Steel Research International=Steel Res. Int.;SRITB9;M
-Stem Cells = Stem Cells
-Stem Cells and Development = Stem Cells Dev.
-Stereotactic and Functional Neurosurgery = Stereotact. Funct. Neurosurg.
-Sterile World = Sterile World
-Steroidologia = Steroidologia
-Steroids = Steroids
-Steroids and Lipids Research = Steroids Lipids Res.
-Stoma = Stoma (Lisb.)
-Stomatologia = Stomatologia (Bucur.)
-Stomatologia Mediterranea = Stomatol. Mediterr.
-Stomatologica = Stomatologica (Genova)
-Stomatologicke Zpravy = Stomatol. Zpr.
-Stomatologie = Stomatologie
-Stomatologie der DDR = Stomatol. DDR
-Stomatologiia = Stomatologiia (Sofiia)
-Stomatologika Chronika = Stomatol. Chron. (Athenai)
-Stomatoloski Glasnik Srbije = Stomatol. Glas. Srb.
-Stomatoloski Vjesnik (Stomatological Review) = Stomatol. Vjesn.
-Strabismus = Strabismus
-Strahlenschutz in Forschung und Praxis = Strahlenschutz Forsch. Prax.
-Strahlentherapie = Strahlentherapie
-Strahlentherapie und Onkologie = Strahlenther. Onkol.
-Strahlentherapie. Sonderbande = Strahlentherapie [Sonderb.]
-Strasbourg Medical = Strasb. Med.
-Strategies for Healthcare Excellence = Strateg. Healthc. Excell.
-Stress = Stress
-Stroke = Stroke
-Struct.--Process., Meas., Phenom. Journal of Vacuum Science & Technology, B: Microelectronics and Nanometer Structures--Processing, Measurement, and Phenomena=J. Vac. Sci. Technol., B: Microelectron. Nanometer;JVSTBM;BM
-Structural Chemistry=Struct. Chem.;STCHES;BM
-Structure = Structure
-Structure (Cambridge, MA, United States)=Structure (Cambridge, MA, U. S.);STRUE6;M
-Structure with Folding and Design = Structure Fold. Des.
-Studi Sassaresi = Studi Sassar.
-Studies in Applied Mathematics = Stud. Appl. Math.
-Studies in Family Planning = Stud. Fam. Plann.
-Studies in Health Technology and Informatics = Stud. Health Technol. Inform.
-Studies in Human Ecology = Stud. Hum. Ecol.
-Studies in Neuro-Anatomy = Stud. Neuroanat.
-Studii si Cercetari de Endocrinologie = Stud. Cercet. Endocrinol.
-Studii si Cercetari de Fiziologie = Stud. Cercet. Fiziol.
-Studii si Cercetari de Inframicrobiologie = Stud. Cercet. Inframicrobiol.
-Studii si Cercetari de Medicina Interna = Stud. Cercet. Med. Interna
-Studii si Cercetari de Neurologie = Stud. Cercet. Neurol.
-Studii si Cercetari de Virusologie = Stud. Cercet. Virusol.
-Studium Generale = Stud. Gen. (Berl.)
-Sub-Cellular Biochemistry = Subcell. Biochem.
-Subacute Care = Subacute Care
-Subj. Biochimica et Biophysica Acta, Specialized Section on Nucleic Acids and Related Subjects=Biochim. Biophys. Acta, Spec. Sect. Nucleic Acids Relat.;BBASB7;
-Subsidia Medica = Subsid. Med.
-Substance Use and Misuse = Subst. Use Misuse
-Substance and Alcohol Actions/Misuse = Subst. Alcohol Actions. Misuse
-Sudebno-Meditsinskaia Ekspertiza = Sud. Med. Ekspert.
-Sudhoffs Archiv; Vierteljahrsschrift fur Geschichte der Medizin und der Naturwissenschaften, der Pharmazie und der Mathematik = Sudhoffs Arch. Vierteljahrsschr. Gesch. Med. Naturwiss. Pharm. Math.
-Sudhoffs Archiv; Zeitschrift fur Wissenschaftsgeschichte = Sudhoffs Arch. Z. Wissenschaftsgesch.
-Sudhoffs Archiv; Zeitschrift fur Wissenschaftsgeschichte. Beihefte = Sudhoffs Arch. Z. Wissenschaftsgesch. Beih.
-Suicide = Suicide
-Suicide and Life-Threatening Behavior = Suicide Life. Threat. Behav.
-Suomen Hammaslaakarilehti = Suom. Hammaslaakarilehti
-Suomen Hammaslaakariseuran Toimituksia = Suom. Hammaslaak. Toim.
-Suomen Laakarilehti = Suom. Laakaril.
-Suomen Naishammaslaakarit Ryhma Julkaisu = Suom. Naishammaslaak. Julk.
-Superconductor Science and Technology=Supercond. Sci. Technol.;SUSTEF;M
-Superlattices and Microstructures=Superlattices Microstruct.;SUMIEK;M
-Supervisor Nurse = Superv. Nurse
-Supervisory Management = Superv. Manage.
-Supplement ... To the Journal Medical Oncology and Tumor Pharmacotherapy = Suppl. J. Med. Oncol. Tumor Pharmacother.
-Supplement to International Journal of Gynecology and Obstetrics = Suppl. Int. J. Gynecol. Obstet.
-Supplement to the European Journal Neuroscience = Suppl. Eur. J. Neurosci.
-Supplementi di Tumori = Suppl. Tumori
-Supplements to Clinical Neurophysiology = Suppl. Clin. Neurophysiol.
-Supplementum ad Thrombosis and Haemostasis = Suppl. Thromb. Haemost.
-Supportive Care in Cancer = Support. Care Cancer
-Supramolecular Chemistry=Supramol. Chem.;SCHEER;8/YR
-Surface Engineering=Surf. Eng.;SUENET;6/YR
-Surface Review and Letters=Surf. Rev. Lett.;SRLEFH;BM
-Surface Science=Surf. Sci.;SUSCAS;36/YR
-Surface Science Reports=Surf. Sci. Rep.;SSREDI;32/YR
-Surface and Coatings Technology=Surf. Coat. Technol.;SCTEEJ;39/YR
-Surface and Interface Analysis=Surf. Interface Anal.;SIANDQ;13/YR
-Surgeon = Surgeon
-Surgery = Surgery
-Surgery Annual = Surg. Annu.
-Surgery Today = Surg. Today
-Surgery for Obesity and Related Diseases = Surg. Obes. Relat. Dis.
-Surgery, Gynecology and Obstetrics = Surg. Gynecol. Obstet.
-Surgical Business = Surg. Bus.
-Surgical Clinics of North America = Surg. Clin. North Am.
-Surgical Endoscopy = Surg. Endosc.
-Surgical Forum = Surg. Forum
-Surgical Gastroenterology = Surg. Gastroenterol.
-Surgical Innovation = Surg. Innov.
-Surgical Laparoscopy and Endoscopy = Surg. Laparosc. Endosc.
-Surgical Laparoscopy, Endoscopy and Percutaneous Techniques = Surg. Laparosc. Endosc. Percutan. Tech.
-Surgical Neurology = Surg. Neurol.
-Surgical Oncology = Surg. Oncol.
-Surgical Oncology Clinics of North America = Surg. Oncol. Clin. N. Am.
-Surgical Technologist = Surg. Technol.
-Surgical and Radiologic Anatomy = Surg. Radiol. Anat.
-Survey and Synthesis of Pathology Research = Surv. Synth. Pathol. Res.
-Survey of Immunologic Research = Surv. Immunol. Res.
-Survey of Ophthalmology = Surv. Ophthalmol.
-Suvremenna Meditsina = Suvr. Med. (Sofiia)
-Svensk Farmaceutisk Tidskrift = Sven. Farm. Tidskr.
-Svensk Tandlakaretidskrift = Sven. Tandlak. Tidskr.
-Sveriges Tandlakarforbund Tidning = Sver. Tandlakarforb. Tidn.
-Swedish Dental Journal = Swed. Dent. J.
-Swedish Dental Journal. Supplement = Swed. Dent. J. Suppl.
-Swiss Dent = Swiss Dent
-Swiss Medical Weekly = Swiss Med. Wkly.
-Swiss Surgery = Swiss Surg.
-Swiss Surgery. Supplement = Swiss Surg. Suppl.
-Sygeplejersken = Sygeplejersken
-Sykepleien = Sykepleien
-Sykepleien Fag = Sykepl. Fag
-Symposia of the Society for Experimental Biology = Symp. Soc. Exp. Biol.
-Symposia of the Swedish Nutrition Foundation = Symp. Swed. Nutr. Found.
-Symposium Series, Society for Applied Microbiology = Symp. Ser. Soc. Appl. Microbiol.
-Symposium of the Pharmacology, Therapeutics and Toxicology Group, International Association for Dental Research = Symp. Pharmacol. Ther. Toxicol. Group.
-Symposium of the Society for Developmental Biology = Symp. Soc. Dev. Biol.
-Symposium on Fundamental Cancer Research = Symp. Fundam. Cancer Res.
-Symposium on Oral Sensation and Perception = Symp. Oral Sens. Percept.
-Synapse = Synapse
-Synapse (New York, NY, United States)=Synapse (N. Y., NY, U. S.);SYNAET;16/YR
-Synlett=Synlett;SYNLES;20/YR
-Synthesis=Synthesis;SYNTBF;20/YR
-Synthesis and Reactivity in Inorganic, Metal-Organic, and Nano-Metal Chemistry=Synth. React. Inorg., Met.-Org., Nano-Met. Chem.;SRIMDO;10/YR
-Synthetic Communications=Synth. Commun.;SYNCAV;SM
-Synthetic Lubrication=Synth. Lubr.;SYLUEB;Q
-Synthetic Metals=Synth. Met.;SYMEDZ;24/YR
-Systematic Zoology = Syst. Zool.
-Systematic and Applied Microbiology = Syst. Appl. Microbiol.
-Systems Biology = Syst. Biol.
-THEOCHEM=THEOCHEM;THEODJ;72/YR
-TIC = TIC
-TID Reports = TID Rep.
-TIT Journal of Life Sciences = TIT J. Life Sci.
-TMJ Update = TMJ Update
-TVZ = TVZ
-Taehan Chikkwa Uisa Hyophoe Chi (Journal of the Korean Dental Association) = Taehan Chikkwa Uisa Hyophoe Chi
-Taehan Kanho (Korean Nurse) = Taehan Kanho
-Taehan Kanho Hakhoe Chi = Taehan Kanho Hakhoe Chi
-Taehan Kumsok, Chaeryo Hakhoechi=Taehan Kumsok, Chaeryo Hakhoechi;TKHABB;M
-Taiwan Yi Xue Hui Za Zhi (Journal of the Formosan Medical Association) = Taiwan Yi Xue Hui Za Zhi
-Talanta=Talanta;TLNTA2;M
-Tandlaegebladet = Tandlaegebladet
-Tandlaegernes Nye Tidsskrift = Tandlaegernes Tidsskr.
-Tandlakartidningen = Tandlakartidningen
-Tandteknikern = Tandteknikern
-Tannlaeknabladid = Tannlaeknabladid
-Tanpakushitsu Kakusan Koso (Protein, Nucleic Acid, Enzyme) = Tanpakushitsu Kakusan Koso.
-Tappi Journal=Tappi J.;TAJODT;M
-Tar Heel Nurse = Tar Heel Nurse
-Targeted Diagnosis and Therapy = Targeted Diagn. Ther.
-Technical Bulletin of the Registry of Medical Technologists = Tech. Bull. Regist. Med. Technol.
-Technical Physics=Tech. Phys.;TEPHEX;M
-Technical Physics Letters=Tech. Phys. Lett.;TPLEED;M
-Technicien Belge en Prothese Dentaire = Tech. Belge Prothese Dent.
-Techniques in Urology = Tech. Urol.
-Techniques in Vascular and Interventional Radiology = Tech. Vasc. Interv. Radiol.
-Technology Review = Technol. Rev.
-Technology and Health Care = Technol. Health Care
-Technology in Cancer Research and Treatment = Technol. Cancer Res. Treat.
-Tecnologica = Tecnologica
-Tecnologica. MAP Supplement = Tecnologica. MAP Suppl.
-Telemedicine Journal = Telemed. J.
-Telemedicine Journal and E-Health = Telemed. J. E Health
-Telemedicine Today = Telemed. Today
-Telemedicine and Telehealth Networks = Telemed. Telehealth Netw.
-Telemedicine and Virtual Reality = Telemed. Virtual Real.
-Tellus = Tellus
-Temas Odontologicos = Temas Odontol.
-Temple Dental Review = Temple Dent. Rev.
-Tennessee Medicine = Tenn. Med.
-Tennessee Nurse = Tenn. Nurse
-Tenside, Surfactants, Detergents=Tenside, Surfactants, Deterg.;TSDEES;BM
-Terapevticheskii Arkhiv = Ter. Arkh.
-Teratogenesis, Carcinogenesis, and Mutagenesis = Teratog. Carcinog. Mutagen.
-Teratology = Teratology
-Tetrahedron = Tetrahedron
-Tetrahedron Letters = Tetrahedron Lett.
-Tetrahedron: Asymmetry=Tetrahedron: Asymmetry;TASYE3;SM
-Tetsu to Hagane=Tetsu to Hagane;TEHAA2;M
-Texas Dental Assistants Association Bulletin = Tex. Dent. Assist. Assoc. Bull.
-Texas Dental Journal = Tex. Dent. J.
-Texas Heart Institute Journal = Tex. Heart Inst. J.
-Texas Hospitals = Tex. Hosp.
-Texas Medicine = Tex. Med.
-Texas Nursing = Tex. Nurs.
-Texas Reports on Biology and Medicine = Tex. Rep. Biol. Med.
-Textile Rental = Text. Rent.
-Textile Research Journal=Text. Res. J.;TRJOA9;M
-Thai Journal of Nursing = Thai J. Nurs.
-The American Naturalist = Am. Nat.
-TheScientificWorldJournal = ScientificWorldJournal
-Theoretical Biology and Medical Modelling = Theor. Biol. Med. Model.
-Theoretical Chemistry Accounts=Theor. Chem. Acc.;TCACFW;10/YR
-Theoretical Foundations of Chemical Engineering=Theor. Found. Chem. Eng.;TFCEAU;BM
-Theoretical Medicine = Theor. Med.
-Theoretical Medicine and Bioethics = Theor. Med. Bioeth.
-Theoretical Population Biology = Theor. Popul. Biol.
-Theoretical and Applied Climatology = Theor. Appl. Climatol.
-Theoretical and Experimental Chemistry=Theor. Exp. Chem.;TEXCAK;BM
-Therapeutic Apheresis = Ther. Apher.
-Therapeutic Apheresis and Dialysis = Ther. Apher. Dial.
-Therapeutic Drug Monitoring = Ther. Drug Monit.
-Therapeutic Immunology = Ther. Immunol.
-Therapeutic Recreation Journal = Ther. Recreation J.
-Therapeutique = Therapeutique
-Therapeutische Umschau = Ther. Umsch.
-Therapia Hungarica = Ther. Hung.
-Therapie = Therapie
-Therapie der Gegenwart = Ther. Ggw.
-Therapiewoche = Therapiewoche
-Theriogenology = Theriogenology
-Thermochimica Acta=Thermochim. Acta;THACAS;SM
-Thin Solid Films=Thin Solid Films;THSFAP;46/YR
-Thoracic Surgery Clinics = Thorac. Surg. Clin.
-Thoracic and Cardiovascular Surgeon = Thorac. Cardiovasc. Surg.
-Thorax = Thorax
-Thoraxchirurgie Vaskulare Chirurgie = Thoraxchir. Vask. Chir.
-Thrombosis Research = Thromb. Res.
-Thrombosis Research. Supplement = Thromb. Res. Suppl.
-Thrombosis and Haemostasis = Thromb. Haemost.
-Thrombosis et Diathesis Haemorrhagica = Thromb. Diath. Haemorrh.
-Thrombosis et Diathesis Haemorrhagica. Supplementum = Thromb. Diath. Haemorrh. Suppl.
-Thymus = Thymus
-Thyroid = Thyroid
-Thyroidology = Thyroidology
-Tidens Tann = Tid. Tann
-Tidskrift for Sjukvardspedagoger = Tidskr. Sjukvardspedagog.
-Tidskrift for Sveriges Sjukskoterskor = Tidskr. Sver. Sjukskot.
-Tidsskrift for Den Norske Laegeforening = Tidsskr. Nor. Laegeforen.
-Tidsskrift for Praktiserende Tandlaeger = Tidsskr. Prakt. Tandlaeg.
-Tidsskrift for Sygeplejersker = Tidsskr. Sygepl.
-Tidsskrift for Tandlaeger = Tidsskr. Tandlaeger
-Tidsskriftet Sykepleien = Tidsskr. Sykepl.
-Tierarztliche Praxis = Tierarztl. Prax.
-Tierarztliche Praxis. Ausgabe G, Grosstiere/Nutztiere = Tierarztl. Prax. Ausg. G Grosstiere Nutztiere
-Tierarztliche Praxis. Ausgabe K, Kleintiere/Heimtiere = Tierarztl. Prax. Ausg. K Klientiere Heimtiere
-Tierarztliche Praxis. Supplement = Tierarztl. Prax. Suppl.
-Tierarztliche Umschau = Tierarztl. Umsch.
-Tijdschrift voor Bejaarden- Kraam- en Ziekenverzorging = Tijdschr. Bejaarden. Kraam. Ziekenverzorging
-Tijdschrift voor Diergeneeskunde = Tijdschr. Diergeneeskd.
-Tijdschrift voor Gastro-Enterologie = Tijdschr. Gastroenterol.
-Tijdschrift voor Gerontologie en Geriatrie = Tijdschr. Gerontol. Geriatr.
-Tijdschrift voor Kindergeneeskunde = Tijdschr. Kindergeneeskd.
-Tijdschrift voor Sociale Geneeskunde = Tijdschr. Soc. Geneeskd.
-Tijdschrift voor Ziekenverpleging = Tijdschr. Ziekenverpl.
-Timarit Hjukrunarfelags Islands = Timarit Hjukrunarfel. Isl.
-Time = Time
-Times = Times
-Tip Fakultesi Mecmuasi, Istanbul Universitesi = Tip Fak. Mecm.
-Tissue Antigens = Tissue Antigens
-Tissue Engineering = Tissue Eng.
-Tissue and Cell = Tissue Cell
-Tobacco Control = Tob. Control
-Today's OR Nurse = Todays OR Nurse
-Today's Surgical Nurse = Todays Surg. Nurse
-Todays FDA = Todays FDA
-Todays Nursing Home = Todays Nurs. Home
-Tohoku Journal of Experimental Medicine = Tohoku J. Exp. Med.
-Tohoku Shika Daigaku Gakkai Shi = Tohoku Shika Daigaku Gakkai Shi
-Tokai Journal of Experimental and Clinical Medicine = Tokai J. Exp. Clin. Med.
-Toko-Ginecologia Practica = Tokoginecol. Pract.
-Tokushima Journal of Experimental Medicine = Tokushima J. Exp. Med.
-Tokyo Ika Daigaku Zasshi (Journal of Tokyo Medical College) = Tokyo Ika Daigaku Zasshi
-Tokyo Ika Shika Daigaku Iyo Kizai Kenkyusho Hokoku (Reports of the Institute for Medical and Dental Engineering, Tokyo Medical and Dental University) = Tokyo Ika Shika Daigaku Iyo Kizai Kenkyusho Hokoku
-Topics in Catalysis=Top. Catal.;TOCAFI;20/YR
-Topics in Clinical Nursing = Top. Clin. Nurs.
-Topics in Current Chemistry = Top. Curr. Chem.
-Topics in Emergency Medicine = Top. Emerg. Med.
-Topics in Health Care Financing = Top. Health Care Financ.
-Topics in Health Information Management = Top. Health Inf. Manage.
-Topics in Health Record Management = Top. Health Rec. Manage.
-Topics in Hospital Pharmacy Management = Top. Hosp. Pharm. Manage.
-Topics in Magnetic Resonance Imaging = Top. Magn. Reson. Imaging
-Torace = Torace
-Torax = Torax
-Tort and Insurance Law Journal = Tort Insur. Law J.
-Toxicologic Pathology = Toxicol. Pathol.
-Toxicological European Research = Toxicol. Eur. Res.
-Toxicological Reviews = Toxicol. Rev.
-Toxicological Sciences = Toxicol. Sci.
-Toxicological and Environmental Chemistry=Toxicol. Environ. Chem.;TECSDY;BM
-Toxicology = Toxicology
-Toxicology Letters = Toxicol. Lett.
-Toxicology Mechanisms and Methods=Toxicol. Mech. Methods;TMMOCP;BM
-Toxicology and Applied Pharmacology = Toxicol. Appl. Pharmacol.
-Toxicology and Industrial Health = Toxicol. Ind. Health
-Toxicology in Vitro=Toxicol. in Vitro;TIVIEQ;8/YR
-Toxicon = Toxicon
-TrAC, Trends in Analytical Chemistry=TrAC, Trends Anal. Chem.;TTAEDJ;11/YR
-Trabajos del Instituto Cajal = Trab. Inst. Cajal
-Trabajos del Instituto Cajal de Investigaciones Biologicas = Trab. Inst. Cajal Invest. Biol.
-Tradimus = Tradimus
-Traffic = Traffic
-Traffic (Oxford, United Kingdom)=Traffic (Oxford, U. K.);TRAFFA;M
-Traffic Injury Prevention = Traffic Inj. Prev.
-Training = Training
-Training School Bulletin = Train. Sch. Bull. (Vinel)
-Training and Development Journal = Train. Dev. J.
-Transactions and Studies of the College of Physicians of Philadelphia = Trans. Stud. Coll. Physicians Phila.
-Transactions of the American Academy of Insurance Medicine = Trans. Am. Acad. Insur. Med.
-Transactions of the American Association of Genito-Urinary Surgeons = Trans. Am. Assoc. Genitourin. Surg.
-Transactions of the American Clinical and Climatological Association = Trans. Am. Clin. Climatol. Assoc.
-Transactions of the American Laryngological, Rhinological and Otological Society = Trans. Am. Laryngol. Rhinol. Otol. Soc.
-Transactions of the American Microscopical Society = Trans. Am. Microsc. Soc.
-Transactions of the American Neurological Association = Trans. Am. Neurol. Assoc.
-Transactions of the American Ophthalmological Society = Trans. Am. Ophthalmol. Soc.
-Transactions of the Annual Meeting of the American Broncho-Esophagological Association = Trans. Annu. Meet. Am. Bronchoesophagol. Assoc.
-Transactions of the Annual Meeting of the American Laryngological Association = Trans. Am. Laryngol. Assoc.
-Transactions of the Association of American Physicians = Trans. Assoc. Am. Physicians
-Transactions of the Association of Industrial Medical Officers = Trans. Assoc. Ind. Med. Off.
-Transactions of the Association of Life Insurance Medical Directors of America = Trans. Assoc. Life Insur. Med. Dir. Am.
-Transactions of the Australian College of Ophthalmologists = Trans. Aust. Coll. Ophthalmol.
-Transactions of the British Society for the Study of Orthodontics = Trans. Br. Soc. Study Orthod.
-Transactions of the European Orthodontic Society = Trans. Eur. Orthod. Soc.
-Transactions of the Indian Ceramic Society=Trans. Indian Ceram. Soc.;TICSAP;Q
-Transactions of the Institute of Metal Finishing=Trans. Inst. Met. Finish.;TIMFA2;BM
-Transactions of the International Conference on Endodontics = Trans. Int. Conf. Endod.
-Transactions of the International Conference on Oral Surgery = Trans. Int. Conf. Oral Surg.
-Transactions of the Kansas Academy of Science = Trans. Kans. Acad. Sci.
-Transactions of the Medical Society of London = Trans. Med. Soc. Lond.
-Transactions of the New England Obstetrical and Gynecological Society = Trans. N. Engl. Obstet. Gynecol. Soc.
-Transactions of the New York Academy of Sciences = Trans. N. Y. Acad. Sci.
-Transactions of the Ophthalmological Societies of the United Kingdom = Trans. Ophthalmol. Soc. U. K.
-Transactions of the Ophthalmological Society of Australia = Trans. Ophthalmol. Soc. Aust.
-Transactions of the Ophthalmological Society of New Zealand = Trans. Ophthalmol. Soc. N. Z.
-Transactions of the Pacific Coast Obstetrical and Gynecological Society = Trans. Pac. Coast Obstet. Gynecol. Soc.
-Transactions of the Pacific Coast Oto-Ophthalmological Society Annual Meeting = Trans. Pac. Coast Otoophthalmol. Soc. Annu. Meet.
-Transactions of the Royal Schools of Dentistry, Stockholm and Umea = Trans. R. Sch. Dent. Stockh. Umea
-Transactions of the Royal Society of Tropical Medicine and Hygiene = Trans. R. Soc. Trop. Med. Hyg.
-Transactions of the SAEST=Trans. SAEST;TSETA6;Q
-Transactions of the Society of Occupational Medicine = Trans. Soc. Occup. Med.
-Transactions of the St Johns Hospital Dermatological Society = Trans. St Johns Hosp. Dermatol. Soc.
-Transactions, American Academy of Ophthalmology and Otolaryngology = Trans. Am. Acad. Ophthalmol. Otolaryngol.
-Transactions, American Otological Society = Trans. Am. Otol. Soc.
-Transactions, American Society for Artificial Internal Organs = Trans. Am. Soc. Artif. Intern. Organs
-Transactions, Indiana Academy of Ophthalmology and Otolaryngology = Trans. Indiana Acad. Ophthalmol. Otolaryngol.
-Transactions, New Orleans Academy of Ophthalmology = Trans. New Orleans Acad. Ophthalmol.
-Transactions, Pennsylvania Academy of Ophthalmology and Otolaryngology = Trans. Pa. Acad. Ophthalmol. Otolaryngol.
-Transfusion = Transfusion (Paris)
-Transfusion Clinique et Biologique = Transfus. Clin. Biol.
-Transfusion Medicine = Transfus. Med.
-Transfusion Medicine Reviews = Transfus. Med. Rev.
-Transfusion Science = Transfus. Sci.
-Transgenic Research = Transgenic Res.
-Transition Metal Chemistry (Dordrecht, Netherlands)=Transition Met. Chem. (Dordrecht, Neth.);TMCHDN;8/YR
-Translational Research = Transl. Res.
-Transplant Immunology = Transpl. Immunol.
-Transplant Infectious Disease = Transpl. Infect. Dis.
-Transplant International = Transpl. Int.
-Transplantation = Transplantation
-Transplantation Proceedings = Transplant. Proc.
-Transplantation Reviews = Transplant. Rev.
-Transplantation Science = Transplant. Sci.
-Travel Medicine and Infectious Disease = Travel Med. Infect. Dis.
-Treatment Guidelines from the Medical Letter = Treat. Guidel. Med. Lett.
-Treatments in Endocrinology = Treat. Endocrinol.
-Treatments in Respiratory Medicine = Treat. Respir. Med.
-Trends and Techniques in the Contemporary Dental Laboratory = Trends Tech. Contemp. Dent. Lab.
-Trends in Biochemical Sciences = Trends Biochem. Sci.
-Trends in Biotechnology = Trends Biotechnol.
-Trends in Cardiovascular Medicine = Trends Cardiovasc. Med.
-Trends in Cell Biology = Trends Cell Biol.
-Trends in Endocrinology and Metabolism=Trends Endocrinol. Metab.;TENME4;10/YR
-Trends in Food Science & Technology=Trends Food Sci. Technol.;TFTEEH;M
-Trends in Genetics = Trends Genet.
-Trends in Health Care, Law and Ethics = Trends Health Care Law Ethics
-Trends in Immunology = Trends Immunol.
-Trends in Microbiology = Trends Microbiol.
-Trends in Molecular Medicine = Trends Mol. Med.
-Trends in Neurosciences = Trends Neurosci.
-Trends in Parasitology = Trends Parasitol.
-Trends in Pharmacological Sciences = Trends Pharmacol. Sci.
-Trends in Plant Science = Trends Plant Sci.
-Trial = Trial
-Triangle = Triangle
-Tribology Transactions=Tribol. Trans.;TRTRE4;Q
-Tribuna Odontologica = Trib. Odontol. (B. Aires)
-Tribuna Odontologica do Sindicato dos Odontologistas do Estado da Guanabara = Trib. Odontol. (Guanabara)
-Trodent = Trodent
-Tropenmedizin und Parasitologie = Tropenmed. Parasitol.
-Tropical Animal Health and Production = Trop. Anim. Health Prod.
-Tropical Diseases Bulletin = Trop. Dis. Bull.
-Tropical Doctor = Trop. Doct.
-Tropical Gastroenterology = Trop. Gastroenterol.
-Tropical Medicine and International Health = Trop. Med. Int. Health
-Tropical Medicine and Parasitology = Trop. Med. Parasitol.
-Tropical and Geographical Medicine = Trop. Geogr. Med.
-Trudy Geofizicheskogo Instituta, Akademiya Nauk SSSR = Tr. Geofiz. Inst., Akad. Nauk SSSR
-Trudy Glavnoi Geofizicheskoi Observatorii = Tr. Gl. Geofiz. Obs.
-Trudy Instituta Fiziologii Akademiia Nauk Gruzinskoi SSR = Tr. Inst. Fiz. Akad. Nauk Gruz. SSR
-Trudy Instituta imeni Pastera = Tr. Inst. Im. Pastera
-Trudy Leningradskogo Instituta Epidemiologii i Mikrobiologii im. Pastera = Tr. Leningr. Inst. Epidemiol. Mikrobiol.
-Trudy Leningradskogo Nauchno-Issledovatelskogo Instituta Epidemiologii i Mikrobiologii im. Pastera = Tr. Leningr. Nauchnoissled. Inst. Epidemiol. Mikrobiol.
-Trudy, Akademiia Nauk SSSR, Institut Genetiki = Tr. Akad. Nauk SSSR. Inst. Genet.
-Trustee = Trustee
-Tsitologiia = Tsitologiia
-Tsitologiia i Genetika = Tsitol. Genet.
-Tsurumi Shigaku (Tsurumi University Dental Journal) = Tsurumi Shigaku
-Tubercle = Tubercle
-Tubercle and Lung Disease = Tuber. Lung Dis.
-Tuberculology and Thoracic Diseases = Tuberculol. Thorac. Dis.
-Tuberculosis = Tuberculosis
-Tuberkulose und Ihre Grenzgebiete in Einzeldarstellungen = Tuberk. Grenzgeb. Einzeldarst.
-Tuberkuloza = Tuberkuloza
-Tufts Dental Outlook = Tufts Dent. Outlook
-Tufts Health Science Review = Tufts Health Sci. Rev.
-Tumori = Tumori
-Tumour Biology = Tumour Biol.
-Tunisie Medicale = Tunis. Med.
-Turk Hemsireler Dergisi (Turkish Journal of Nursing) = Turk Hemsire. Derg.
-Turk Hijiyen ve Deneysel Biyoloji Dergisi (Turkish Bulletin of Hygiene and Experimental Biology) = Turk Hij. Deney. Biyol. Derg.
-Turk Hijiyen ve Tecrubi Biyoloji Dergisi = Turk Hij. Tecr. Biyol. Derg.
-Turk Hijiyen ve Tecrubi Biyoloji Dergisi (Turkish Bulletin of Hygiene and Experimental Biology) = Turk Hij. Tecr. Biyol. Derg.
-Turk Ortodonti Dergisi = Turk Ortodonti Derg.
-Turk Tip Cemiyeti Mecmuasi = Turk Tip Cemiy. Mecm.
-Turk Tip Dernegi Dergisi = Turk Tip Dernegi Derg.
-Turkish Journal of Chemistry=Turk. J. Chem.;TJCHE3;6/YR
-Turkish Journal of Pediatrics = Turk. J. Pediatr.
-Twin Research = Twin Res.
-Twin Research and Human Genetics = Twin Res. Hum. Genet.
-U.S. Healthcare = US. Healthc.
-U.S. Medicine = US. Med.
-U.S. Navy Medicine = US Navy Med.
-UCLA Forum in Medical Sciences = UCLA Forum Med. Sci.
-UCLA Reports = UCLA Rep.
-UJCD; Union des Jeunes Chirurgiens-Dentistes = UJCD. Union Jeunes Chir. Dent.
-UNA Communique = UNA Commun.
-UNA Nursing Journal = UNA Nurs. J.
-UR Reports = UR Rep.
-US News and World Report = US News World Rep.
-UWFL Reports = UWFL Rep.
-Ugeskrift for Laeger = Ugeskr. Laeger
-Uirusu = Uirusu
-Ukrains'kii Biokhimichnii Zhurnal=Ukr. Biokhim. Zh.;UBZKAA;BM
-Ukrains'kii Fizichnii Zhurnal=Ukr. Fiz. Zh.;UFZHFY;M
-Ukrainskii Biokhimicheskii Zhurnal = Ukr. Biokhim. Zh.
-Ukrainskii Khimicheskii Zhurnal (Russian Edition)=Ukr. Khim. Zh. (Russ. Ed.);UKZHAU;6/YR
-Ukrainskyi Biokhimichnyi Zhurnal = Ukr. Biokhim. Zh.
-Ulster Medical Journal = Ulster Med. J.
-Ultramicroscopy = Ultramicroscopy
-Ultraschall in der Medizin = Ultraschall Med.
-Ultrasonic Imaging = Ultrason. Imaging
-Ultrasonics = Ultrasonics
-Ultrasonics Sonochemistry = Ultrason. Sonochem.
-Ultrasound in Medicine and Biology = Ultrasound Med. Biol.
-Ultrasound in Obstetrics and Gynecology = Ultrasound Obstet. Gynecol.
-Ultrastructural Pathology = Ultrastruct. Pathol.
-Ulusal Travma Ve Acil Cerrahi Dergisi (Turkish Journal of Trauma and Emergency Surgery) = Ulus. Travma Acil Cerrahi Derg.
-Undersea Biomedical Research = Undersea Biomed. Res.
-Undersea and Hyperbaric Medicine = Undersea Hyperb. Med.
-Unfallchirurg = Unfallchirurg
-Unfallchirurgie = Unfallchirurgie
-Unfallheilkunde = Unfallheilkunde
-Union Medicale du Canada = Union Med. Can.
-University of Michigan Medical Center Journal = Univ. Mich. Med. Cent. J.
-University of Newcastle upon Tyne Medical Gazette = Univ. Newcastle Tyne Med. Gaz.
-University of Toronto Dental Journal = Univ. Tor. Dent. J.
-University of Toronto Undergraduate Dental Journal = Univ. Toronto Undergrad. Dent. J.
-Update in Pediatric Dentistry = Update Pediatr. Dent.
-Update on Ethics = Update Ethics
-Upsala Journal of Medical Sciences = Ups. J. Med. Sci.
-Upsala Journal of Medical Sciences. Supplement = Ups. J. Med. Sci. Suppl.
-Urban Health = Urban Health
-Uremia Investigation = Uremia Invest.
-Urologe = Urologe
-Urologe. Ausgabe A = Urologe. A
-Urologia Internationalis = Urol. Int.
-Urologic Clinics of North America = Urol. Clin. North Am.
-Urologic Nursing = Urol. Nurs.
-Urologic Radiology = Urol. Radiol.
-Urological Research = Urol. Res.
-Urological Survey = Urol. Surv.
-Urologiia = Urologiia
-Urologiia i Nefrologiia = Urol. Nefrol. (Mosk.)
-Urology = Urology
-Uspekhi Fiziologicheskikh Nauk = Usp. Fiziol. Nauk
-Uspekhi Sovremennoi Biologii = Usp. Sovrem. Biol.
-Utah Nurse = Utah Nurse
-Uttar Pradesh State Dental Journal = Uttar Pradesh State Dent. J.
-VINA Quarterly = VINA Q.
-Vaccine = Vaccine
-Vacuum=Vacuum;VACUAV;16/yr
-Valsalva = Valsalva
-Value in Health = Value Health
-Vard i Norden = Vard Nord. Utveckl. Forsk.
-Vardfacket = Vardfacket
-Vasa = Vasa
-Vasa. Supplementum = Vasa. Suppl.
-Vascular = Vascular
-Vascular Diseases = Vasc. Dis.
-Vascular Medicine = Vasc. Med.
-Vascular Pharmacology = Vascul. Pharmacol.
-Vascular Surgery = Vasc. Surg.
-Vascular and Endovascular Surgery = Vasc. Endovascular Surg.
-Vector Borne and Zoonotic Diseases = Vector Borne Zoonotic Dis.
-Venezuela Odontologica = Venez. Odontol.
-Verhandelingen, Koninklijke Academie voor Geneeskunde van Belgie = Verh. K. Acad. Geneeskd. Belg.
-Verhandelingen, Koninklijke Vlaamse Academie voor Geneeskunde van Belgie = Verh. K. Vlaam. Acad. Geneeskd. Belg.
-Verhandlungen der Anatomischen Gesellschaft = Verh. Anat. Ges.
-Verhandlungen der Deutschen Gesellschaft fur Herz- und Kreislaufforschung = Verh. Dtsch. Ges. Herz. Kreislaufforsch.
-Verhandlungen der Deutschen Gesellschaft fur Innere Medizin = Verh. Dtsch. Ges. Inn. Med.
-Verhandlungen der Deutschen Gesellschaft fur Kreislaufforschung = Verh. Dtsch. Ges. Kreislaufforsch.
-Verhandlungen der Deutschen Gesellschaft fur Pathologie = Verh. Dtsch. Ges. Pathol.
-Verhandlungen der Deutschen Gesellschaft fur Rheumatologie = Verh. Dtsch. Ges. Rheumatol.
-Vermont Registered Nurse = Vt. Regist. Nurse
-Veroffentlichungen aus der Morphologischen Pathologie = Veroff. Morphol. Pathol.
-Veroffentlichungen aus der Pathologie = Veroff. Pathol.
-Verpleegkunde = Verpleegkunde
-Versicherungsmedizin = Versicherungsmedizin
-Vestnik Akademii Meditsinskikh Nauk SSSR = Vestn. Akad. Med. Nauk SSSR
-Vestnik Akademii Nauk SSSR = Vestn. Akad. Nauk SSSR
-Vestnik Dermatologii i Venerologii = Vestn. Dermatol. Venerol.
-Vestnik Khirurgii imeni I. I. Grekova = Vestn. Khir. Im. I. I. Grek.
-Vestnik Leningradskogo Universiteta. Biologiia = Vestn. Leningr. Univ. [Biol.]
-Vestnik Moskovskogo Universiteta, Seriya 2: Khimiya=Vestn. Mosk. Univ., Ser. 2: Khim.;VMUKA5;BM
-Vestnik Oftalmologii = Vestn. Oftalmol.
-Vestnik Otorinolaringologii = Vestn. Otorinolaringol.
-Vestnik Rentgenologii i Radiologii = Vestn. Rentgenol. Radiol.
-Vestnik Rossiiskoi Akademii Meditsinskikh Nauk = Vestn. Ross. Akad. Med. Nauk
-Vestnik Sankt-Peterburgskogo Universiteta, Seriya 4: Fizika, Khimiya=Vestn. S.-Peterb. Univ., Ser. 4: Fiz., Khim.;VSUKEH;Q
-Vestsi Natsyyanal'nai Akademii Navuk Belarusi, Seryya Khimichnykh Navuk=Vestsi Nats. Akad. Navuk Belarusi, Ser. Khim. Navuk;VNBNFX;Q
-Veterinarian = Veterinarian
-Veterinariia = Veterinariia
-Veterinarni Medicina = Vet. Med. (Praha)
-Veterinarnomeditsinski Nauki = Vet. Med. Nauki
-Veterinarstvi = Veterinarstvi
-Veterinary Clinics of North America = Vet. Clin. North Am.
-Veterinary Clinics of North America. Equine Practice = Vet. Clin. North Am. Equine Pract.
-Veterinary Clinics of North America. Exotic Animal Practice = Veterinary Clin. North Am. Exot. Anim. Pract.
-Veterinary Clinics of North America. Food Animal Practice = Vet. Clin. North Am. Food Anim. Pract.
-Veterinary Clinics of North America. Large Animal Practice = Vet. Clin. North Am. Large Anim. Pract.
-Veterinary Clinics of North America. Small Animal Practice = Vet. Clin. North Am. Small Anim. Pract.
-Veterinary Immunology and Immunopathology = Vet. Immunol. Immunopathol.
-Veterinary Journal = Vet. J.
-Veterinary Medical Review = Vet. Med. Rev.
-Veterinary Medicine, Small Animal Clinician = Vet. Med. Small Anim. Clin.
-Veterinary Microbiology = Vet. Microbiol.
-Veterinary Ophthalmology = Vet. Ophthalmol.
-Veterinary Parasitology = Vet. Parasitol.
-Veterinary Pathology = Vet. Pathol.
-Veterinary Pathology. Supplement = Vet. Pathol. Suppl.
-Veterinary Quarterly = Vet. Q.
-Veterinary Radiology and Ultrasound = Vet. Radiol. Ultrasound
-Veterinary Record = Vet. Rec.
-Veterinary Research = Vet. Res.
-Veterinary Research Communications = Vet. Res. Commun.
-Veterinary Surgery = Vet. Surg.
-Veterinary Therapeutics = Vet. Ther.
-Veterinary and Human Toxicology = Vet. Hum. Toxicol.
-Viata Medicala; Revista de Informare Profesionala si Stiintifica a Cadrelor Medii Sanitare = Viata Med. Rev. Inf. Prof. Stiint. Cadrelor Medii Sanit.
-Vibrational Spectroscopy=Vib. Spectrosc.;VISPEK;BM
-Vida Odontologica = Vida Odontol.
-Vie Medicale au Canada Francais = Vie Med. Can. Fr.
-Vierteljahrsschrift fur Schweizerische Sanitatsoffiziere = Vierteljahrsschr. Schweiz. Sanitatsoff.
-Vigilando = Vigilando
-Violence and Victims = Violence Vict.
-Viral Immunology = Viral Immunol.
-Virchows Archiv = Virchows Arch.
-Virchows Archiv fur Pathologische Anatomie und Physiologie und fur Klinische Medizin = Virchows Arch. Pathol. Anat. Physiol. Klin. Med.
-Virchows Archiv. A, Pathological Anatomy and Histopathology = Virchows Arch. A Pathol. Anat. Histopathol.
-Virchows Archiv. A, Pathology, Pathologische Anatomie = Virchows Arch. A Pathol. Pathol. Anat.
-Virchows Archiv. A. Pathological Anatomy and Histology = Virchows Arch. A Pathol. Anat. Histol.
-Virchows Archiv. B, Cell Pathology Including Molecular Pathology = Virchows Arch. B Cell Pathol. Incl. Mol. Pathol.
-Virchows Archiv. B. Cell Pathology = Virchows Arch. B Cell Pathol.
-Virginia Dental Journal = Va. Dent. J.
-Virginia Medical = Va. Med.
-Virginia Medical Monthly = Va. Med. Mon.
-Virginia Medical Quarterly = Va. Med. Q.
-Virginia Nurse = Va. Nurse
-Virginia Nurse Quarterly = Va. Nurse Q.
-Virologie = Virologie
-Virology = Virology
-Virology Journal = Virol. J.
-Virology Monographs = Virol. Monogr.
-Virus Genes = Virus Genes
-Virus Research = Virus Res.
-Virus Research. Supplement = Virus Res. Suppl.
-Vision Research = Vision Res.
-Visual Neuroscience = Vis. Neurosci.
-Vital Signs = Vital Signs
-Vital Speeches of the Day = Vital Speeches Day
-Vital and Health Statistics. Series 10: Data from the National Health Survey = Vital Health Stat. 10.
-Vital and Health Statistics. Series 11: Data from the National Health Survey = Vital Health Stat. 11.
-Vital and Health Statistics. Series 13: Data from the National Health Survey = Vital Health Stat. 13.
-Vital and Health Statistics. Series 14: Data from the National Health Survey = Vital Health Stat. 14.
-Vital and Health Statistics. Series 14: Data from the National Inventory of Family Planning Services = Vital Health Stat. 14.
-Vital and Health Statistics. Series 14: Data on National Health Resources = Vital Health Stat. 14.
-Vital and Health Statistics. Series 1: Programs and Collection Procedures = Vital Health Stat. 1.
-Vital and Health Statistics. Series 20: Data from the National Vital Statistics System = Vital Health Stat. 20. Data Natl. Vital Stat. Syst.
-Vital and Health Statistics. Series 21: Data from the National Vital Statistics System = Vital Health Stat. 21.
-Vital and Health Statistics. Series 21: Data on Natality, Marriage, and Divorce = Vital Health Stat. 21.
-Vital and Health Statistics. Series 23: Data from the National Survey of Family Growth = Vital Health Stat. 23.
-Vital and Health Statistics. Series 2: Data Evaluation and Methods Research = Vital Health Stat. 2.
-Vital and Health Statistics. Series 3: Analytical Studies = Vital Health Stat. 3.
-Vital and Health Statistics. Series 3: Analytical and Epidemiological Studies = Vital Health Stat. 3.
-Vital and Health Statistics. Series 4: Documents and Committee Reports = Vital Health Stat. 4.
-Vital and Health Statistics. Series 5: Comparative International Vital and Health Statistics Reports = Vital Health Stat. 5.
-Vitamins and Hormones = Vitam. Horm.
-Vnitrni Lekarstvi = Vnitr. Lek.
-Voeding = Voeding
-Voenno-Meditsinskii Zhurnal = Voen. Med. Zh.
-Voix Dentaire = Voix Dent.
-Vojenske Zdravotnicke Listy = Vojen. Zdrav. Listy
-Vojenskozdravotnicka Knihovna = Vojenskozdrav. Knih.
-Vojnosanitetski Pregled = Vojnosanit. Pregl.
-Voluntary Action Leadership = Volunt. Action Leadersh.
-Volunteer Administration = Volunt. Adm.
-Volunteer Leader = Volunt. Leader
-Voprosy Biokhimii Mozga = Vopr. Biokhim. Mozga
-Voprosy Kurortologii, Fizioterapii i Lechebnoi Fizicheskoi Kultury = Vopr. Kurortol. Fizioter. Lech. Fiz. Kult.
-Voprosy Meditsinskoi Khimii = Vopr. Med. Khim.
-Voprosy Neirokhirurgii = Vopr. Neirokhir.
-Voprosy Okhrany Materinstva i Detstva = Vopr. Okhr. Materin. Det.
-Voprosy Onkologii = Vopr. Onkol.
-Voprosy Pitaniia = Vopr. Pitan.
-Voprosy Psikhiatrii i Nevropatologii = Vopr. Psikhiatr. Nevropatol.
-Voprosy Revmatizma = Vopr. Revm.
-Voprosy Virusologii = Vopr. Virusol.
-Vox Sanguinis = Vox Sang.
-Vrachebnoe Delo = Vrach. Delo
-Vutreshni Bolesti = Vutr. Boles.
-Vysokomolekulyarnye Soedineniya, Seriya A i Seriya B=Vysokomol. Soedin., Ser. A Ser. B;VSSBEE;M
-WASH Reports = WASH Rep.
-WDA Journal = WDA J.
-WHO Chronicle = WHO Chron.
-WHO Offset Publication = WHO Offset Publ.
-WHO Regional Publications European Series = WHO Reg. Publ. Eur. Ser.
-WMJ = WMJ
-Wakayama Medical Reports = Wakayama Med. Rep.
-Waking and Sleeping = Waking Sleeping
-Wall Street Journal. Midwest Edition = Wall St. J. [Midwest. Ed.]
-Washington Nurse = Wash. Nurse
-Washington Report on Medicine and Health = Wash. Rep. Med. Health
-Washington State Dental Journal = Wash. State Dent. J.
-Washington State Journal of Nursing = Wash. State J. Nurs.
-Washington University Dental Journal = Wash. Univ. Dent. J.
-Water Environment Research=Water Environ. Res.;WAERED;7/YR
-Water Quality Research Journal of Canada=Water Qual. Res. J. Can.;WQRCFA;Q
-Water Research=Water Res.;WATRAG;20/YR
-Water Resources=Water Resour.;WARED4;BM
-Water Resources Research = Water Resour. Res.
-Water, Air, & Soil Pollution=Water, Air, Soil Pollut.;WAPLAC;36/YR
-Water, Air, and Soil Pollution = Water. Air. Soil Pollut.
-Way = Way
-Wear=Wear;WEARAH;M
-Weather = Weather
-Weather Vane = Weather Vane
-Weather and Forecasting = Wea. Forecasting
-Weatherwise = Weatherwise
-Weed Science=Weed Sci.;WEESA6;BM
-Weekly Epidemiological Record = Wkly. Epidemiol. Rec.
-Wei Sheng Wu Xue Bao (Acta Microbiologica Sinica) = Wei Sheng Wu Xue Bao
-Wei Sheng Yan Jiu (Journal of Hygiene Research) = Wei Sheng Yan Jiu
-West African Journal of Medicine = West Afr. J. Med.
-West African Journal of Pharmacology and Drug Research = West Afr. J. Pharmacol. Drug Res.
-West African Medical Journal = West Afr. Med. J.
-West African Medical Journal and Nigerian Medical and Dental Practitioner = West Afr. Med. J. Niger. Med. Dent. Pract.
-West African Medical Journal and Nigerian Practitioner = West Afr. Med. J. Niger. Pract.
-West Indian Medical Journal = West Indian Med. J.
-West Virginia Dental Journal = W. V. Dent. J.
-West Virginia Medical Journal = W. V. Med. J.
-West of England Medical Journal = West Engl. Med. J.
-Western Dental Society Bulletin = West. Dent. Soc. Bull.
-Western Journal of Medicine = West. J. Med.
-Western Journal of Nursing Research = West. J. Nurs. Res.
-Western Medicine; The Medical Journal of the West = West Med. Med. J. West
-Wiadomosci Lekarskie = Wiad. Lek.
-Wiadomosci Parazytologiczne = Wiad. Parazytol.
-Wiederherstellungschirurgie und Traumatologie = Wiederherstellungschir. Traumatol.
-Wiener Klinische Wochenschrift = Wien. Klin. Wochenschr.
-Wiener Klinische Wochenschrift. Supplementum = Wien. Klin. Wochenschr. Suppl.
-Wiener Medizinische Wochenschrift = Wien. Med. Wochenschr.
-Wiener Medizinische Wochenschrift. Beihefte = Wien. Med. Wochenschr. Beih.
-Wiener Medizinische Wochenschrift. Supplement = Wien. Med. Wochenschr. Suppl.
-Wiener Tierarztliche Monatsschrift = Wien. Tierarztl. Monatsschr.
-Wiener Zeitschrift fur Innere Medizin und Ihre Grenzgebiete = Wien. Z. Inn. Med.
-Wiener Zeitschrift fur Nervenheilkunde und deren Grenzgebiete = Wien. Z. Nervenheilkd. Grenzgeb.
-Wilderness and Environmental Medicine = Wilderness Environ. Med.
-Wildlife Disease = Wildl. Dis.
-Wisconsin Dental Association Journal = Wis. Dent. Assoc. J.
-Wisconsin Medical Journal = Wis. Med. J.
-Wissenschaftliche Zeitschrift der Humboldt-Universitat zu Berlin. Mathematisch-Naturwissenschaftliche Reihe = Wiss. Z. Humboldt Univ. Berl. [Math. Naturwiss.]
-Wistar Institute Symposium Monograph = Wistar Inst. Symp. Monogr.
-Woman Physician = Woman Physician
-Women and Health = Women Health
-Women's Health = Womens Health
-Women's Health Data Book = Womens Health Data Book
-Women's Health Issues = Womens Health Issues
-Wood Science and Technology=Wood Sci. Technol.;WOSTBE;8/YR
-Wood and Fiber Science=Wood Fiber Sci.;WFSCD4;Q
-Worcester Medical News = Worcester Med. News
-Work, Environment, Health = Work. Environ. Health
-Worklife = Worklife
-World Health Forum = World Health Forum
-World Health Organization Monograph Series = World Health Organ. Monogr. Ser.
-World Health Organization Technical Report Series = World Health Organ. Tech. Rep. Ser.
-World Health Statistics Quarterly = World Health Stat. Q.
-World Health Statistics Report = World Health Stat. Rep.
-World Hospitals = World Hosp.
-World Hospitals and Health Services = World Hosp. Health Serv.
-World Journal of Gastroenterology = World J. Gastroenterol.
-World Journal of Surgery = World J. Surg.
-World Journal of Urology = World J. Urol.
-World Medical Journal = World Med. J.
-World Meteorological Organization Bulletin = WMO Bull.
-World News on Maxillofacial Radiology = World News Maxillofac. Radiol.
-World Review of Nutrition and Dietetics = World Rev. Nutr. Diet.
-World of Irish Nursing = World Ir. Nurs.
-Worlds Poultry Science Journal = Worlds Poult. Sci. J.
-Worldviews on Evidence-Based Nursing = Worldviews Evid. Based Nurs.
-Wound Repair and Regeneration = Wound Repair Regen.
-Wuji Huaxue Xuebao=Wuji Huaxue Xuebao;WHUXEO;M
-Wuli Huaxue Xuebao=Wuli Huaxue Xuebao;WHXUEU;M
-Wuli Xuebao=Wuli Xuebao;WLHPAR;M
-Wyoming Nurses Newsletter = Wyo. Nurses Newsl.
-X-Ray Spectrometry=X-Ray Spectrom.;XRSPAX;BM
-X-Ray Structure Analysis Online=X-Ray Struct. Anal. Online;XSAOAF;IRR
-Xenobiotica = Xenobiotica
-Xi Psi Phi Quarterly = Xi Psi Phi Q.
-Xianggang Hu Li Za Zhi (Hong Kong Nursing Journal) = Xianggang Hu Li Za Zhi
-Y Reports = Y Rep.
-Yakhak Hoechi=Yakhak Hoechi;YAHOA3;BM
-Yakubutsu, Seishin, Kodo (Japanese Journal of Psychopharmacology) = Yakubutsu Seishin Kodo
-Yakugaku Zasshi=Yakugaku Zasshi;YKKZAJ;M
-Yakugaku Zasshi (Journal of the Pharmaceutical Society of Japan) = Yakugaku Zasshi
-Yale Journal of Biology and Medicine = Yale J. Biol. Med.
-Yale Journal of Health Policy, Law, and Ethics = Yale J. Health Policy Law Ethics
-Yale Law Journal = Yale Law J.
-Yan Ke Xue Bao (Eye Science) = Yan Ke Xue Bao
-Yao Xue Xue Bao (Acta Pharmaceutica Sinica) = Yao Xue Xue Bao
-Year in Immunology = Year Immunol.
-Yeast = Yeast
-Yi Chuan Xue Bao (Acta Genetica Sinica) = Yi Chuan Xue Bao
-Yingyong Huaxue=Yingyong Huaxue;YIHUED;M
-Yngre Laeger = Yngre Laeger
-Yokohama Medical Bulletin = Yokohama Med. Bull.
-Yonago Acta Medica = Yonago Acta Med.
-Yonsei Medical Journal = Yonsei Med. J.
-Yosetsu Gakkai Ronbunshu=Yosetsu Gakkai Ronbunshu;YGRODU;Q
-Youji Huaxue=Youji Huaxue;YCHHDX;M
-Your Child Patient = Your Child Patient
-Your Oklahoma Dental Association Journal = Your Okla. Dent. Assoc. J.
-Yuki Gosei Kagaku Kyokaishi=Yuki Gosei Kagaku Kyokaishi;YGKKAE;M
-ZFA; Zeitschrift fur Allgemeinmedizin = ZFA (Stuttgart)
-ZFA; Zeitschrift fur Alternsforschung = ZFA
-ZWR = ZWR
-Zacchia = Zacchia
-Zahn-, Mund-, und Kieferheilkunde mit Zentralblatt = Zahn. Mund. Kieferheilkd. Zentralbl.
-Zahnarzt = Zahnarzt
-Zahnarzteblatt Baden-Wurttemberg = Zahnarztebl. Baden. Wurttemb.
-Zahnarztliche Mitteilungen = Zahnarztl. Mitt.
-Zahnarztliche Nachrichten Sudwurttemburg-Hohenzollern = Zahnarztl. Nachr. Sudwurttemb.
-Zahnarztliche Praxis = Zahnarztl. Prax.
-Zahnarztliche Praxisfuhrung = Zahnarztl. Praxisfuhr.
-Zahnarztliche Rundschau = Zahnarztl. Rundsch.
-Zahnarztliche Welt, Zahnarztliche Rundschau, ZWR, Vereinigt mit Zahnarztliche Reform = Zahnarztl. Welt. Zahnarztl. Rundsch. ZWR. Zahnarztl. Reform
-Zahnarztlicher Gesundheitsdienst = Zahnarztl. Gesundheitsdienst
-Zahntechnik = Zahntechnik (Zur.)
-Zambia Nurse = Zambia Nurse
-Zambia Nurse Journal = Zambia Nurse J.
-Zbornik Vojnomedicinske Akademije = Zb. Vojnomed. Akad.
-Zdravookhranenie Kirgizii = Zdravookhr. Kirg.
-Zdravookhranenie Rossiiskoi Federatsii = Zdravookhr. Ross. Fed.
-Zdravotnicka Pracovnice = Zdrav. Prac.
-Zdravotnicke Aktuality = Zdrav. Aktual.
-Zdravstveni Vestnik = Zdrav. Vestn.
-Zdrowie Publiczne = Zdrow. Publiczne
-Zeitschrift fuer Anorganische und Allgemeine Chemie=Z. Anorg. Allg. Chem.;ZAACAB;M
-Zeitschrift fuer Kristallographie=Z. Kristallogr.;ZEKRDZ;12/YR
-Zeitschrift fuer Kristallographie - New Crystal Structures=Z. Kristallogr. - New Cryst. Struct.;ZKNSFT;4/YR
-Zeitschrift fuer Metallkunde=Z. Metallkd.;ZEMTAE;M
-Zeitschrift fuer Naturforschung, A: Physical Sciences=Z. Naturforsch., A: Phys. Sci.;ZNASEI;M
-Zeitschrift fuer Naturforschung, B: Chemical Sciences=Z. Naturforsch., B: Chem. Sci.;ZNBSEN;M
-Zeitschrift fuer Naturforschung, C: Journal of Biosciences=Z. Naturforsch., C: J. Biosci.;ZNCBDA;BM
-Zeitschrift fuer Physikalische Chemie (Muenchen, Germany)=Z. Phys. Chem. (Muenchen, Ger.);ZPCFAX;12/YR
-Zeitschrift fur Allgemeine Mikrobiologie = Z. Allg. Mikrobiol.
-Zeitschrift fur Allgemeinmedizin = Z. Allgemeinmed.
-Zeitschrift fur Alternsforschung = Z. Alternsforsch.
-Zeitschrift fur Anatomie und Entwicklungsgeschichte = Z. Anat. Entwicklungsgesch.
-Zeitschrift fur Arztliche Fortbildung = Z. Arztl. Fortbild. (Jena)
-Zeitschrift fur Arztliche Fortbildung und Qualitatssicherung = Z. Arztl. Fortbild. Qualitatssich.
-Zeitschrift fur Arztliche Fortbildung. Beiheft = Z. Arztl. Fortbild. Beih. (Jena)
-Zeitschrift fur Biologie = Z. Biol.
-Zeitschrift fur Erkrankungen der Atmungsorgane = Z. Erkr. Atmungsorgane
-Zeitschrift fur Erkrankungen der Atmungsorgane, mit Folia Bronchologica = Z. Erkr. Atmungsorgane. Folia Bronchol.
-Zeitschrift fur Ernahrungswissenschaft = Z. Ernahrungswiss.
-Zeitschrift fur Ernahrungswissenschaft (Journal of Nutritional Sciences) Supplementa = Z. Ernahrungswiss. Suppl.
-Zeitschrift fur Experimentelle Chirurgie = Z. Exp. Chir.
-Zeitschrift fur Experimentelle Chirurgie, Transplantation, und Kunstliche Organe = Z. Exp. Chir. Transplant. Kunstliche Organe
-Zeitschrift fur Experimentelle Psychologie = Z. Exp. Psychol.
-Zeitschrift fur Experimentelle und Angewandte Psychologie = Z. Exp. Angew. Psychol.
-Zeitschrift fur Gastroenterologie = Z. Gastroenterol.
-Zeitschrift fur Gastroenterologie. Verhandlungsband = Z. Gastroenterol. Verh.
-Zeitschrift fur Geburtshilfe und Neonatologie = Z. Geburtshilfe Neonatol.
-Zeitschrift fur Geburtshilfe und Perinatologie = Z. Geburtshilfe Perinatol.
-Zeitschrift fur Gerontologie = Z. Gerontol.
-Zeitschrift fur Gerontologie und Geriatrie = Z. Gerontol. Geriatr.
-Zeitschrift fur Haut- und Geschlechtskrankheiten = Z. Haut. Geschlechtskr.
-Zeitschrift fur Hautkrankheiten = Z. Hautkr.
-Zeitschrift fur Hygiene und Infektionskrankheiten = Z. Hyg. Infektionskr.
-Zeitschrift fur Immunitatsforschung (Immunobiology) = Z. Immunitatsforsch. Immunobiol.
-Zeitschrift fur Immunitatsforschung, Allergie und Klinische Immunologie = Z. Immunitatsforsch. Allerg. Klin. Immunol.
-Zeitschrift fur Immunitatsforschung, Experimentelle und Klinische Immunologie = Z. Immunitatsforsch. Exp. Klin. Immunol.
-Zeitschrift fur Kardiologie = Z. Kardiol.
-Zeitschrift fur Kardiologie. Supplementum = Z. Kardiol. Suppl.
-Zeitschrift fur Kinder- und Jugendpsychiatrie = Z. Kinder. Jugenpsychiatr.
-Zeitschrift fur Kinder- und Jugendpsychiatrie und Psychotherapie = Z. Kinder. Jugendpsychiatr. Psychother.
-Zeitschrift fur Kinderchirurgie = Z. Kinderchir.
-Zeitschrift fur Kinderchirurgie und Grenzgebiete = Z. Kinderchir. Grenzgeb.
-Zeitschrift fur Kinderheilkunde = Z. Kinderheilkd.
-Zeitschrift fur Klinische Chemie und Klinische Biochemie = Z. Klin. Chem. Klin. Biochem.
-Zeitschrift fur Klinische Medizin = Z. Klin. Med.
-Zeitschrift fur Klinische Psychologie und Psychotherapie = Z. Klin. Psychol. Psychother.
-Zeitschrift fur Klinische Psychologie, Psychiatrie und Psychotherapie = Z. Klin. Psychol. Psychiatr. Psychother.
-Zeitschrift fur Klinische Psychologie, Psychopathologie und Psychotherapie = Z. Klin. Psychol. Psychopathol. Psychother.
-Zeitschrift fur Krankenpflege = Z. Krankenpfl.
-Zeitschrift fur Krebsforschung = Z. Krebsforsch.
-Zeitschrift fur Krebsforschung und Klinische Onkologie (Cancer Research and Clinical Oncology) = Z. Krebsforsch. Klin. Onkol. Cancer Res. Clin. Oncol.
-Zeitschrift fur Kreislaufforschung = Z. Kreislaufforsch.
-Zeitschrift fur Laryngologie, Rhinologie, Otologie und Ihre Grenzgebiete = Z. Laryngol. Rhinol. Otol.
-Zeitschrift fur Lebensmittel-Untersuchung und -Forschung = Z. Lebensm. Unters. Forsch.
-Zeitschrift fur Lymphologie (Journal of Lymphology) = Z. Lymphol.
-Zeitschrift fur Medizinische Laboratoriumsdiagnostik = Z. Med. Lab. Diagn.
-Zeitschrift fur Medizinische Labortechnik = Z. Med. Labortech.
-Zeitschrift fur Medizinische Mikrobiologie und Immunologie = Z. Med. Mikrobiol. Immunol.
-Zeitschrift fur Mikroskopisch-Anatomische Forschung = Z. Mikrosk. Anat. Forsch.
-Zeitschrift fur Morphologie und Anthropologie = Z. Morphol. Anthropol.
-Zeitschrift fur Naturforschung. Section C, Biosciences = Z. Naturforsch. [C]
-Zeitschrift fur Naturforschung. Section C, Journal of Biosciences = Z. Naturforsch. [C]
-Zeitschrift fur Naturforschung. Teil B, Anorganische Chemie, Organische Chemie, Biochemie, Biophysik, Biologie = Z. Naturforsch. [B]
-Zeitschrift fur Naturforschung. Teil B, Chemie, Biochemie, Biophysik, Biologie und Verwandte Gebiete = Z. Naturforsch. B
-Zeitschrift fur Naturwissenschaftlich-Medizinische Grundlagenforschung = Z. Naturwiss. Med. Grundlagenforsch.
-Zeitschrift fur Neurologie = Z. Neurol.
-Zeitschrift fur Orthopadie und Ihre Grenzgebiete = Z. Orthop. Ihre Grenzgeb.
-Zeitschrift fur Parasitenkunde = Z. Parasitenkd.
-Zeitschrift fur Physiotherapie = Z. Physiother.
-Zeitschrift fur Plastische Chirurgie = Z. Plast. Chir.
-Zeitschrift fur Praktische Anasthesie und Wiederbelebung = Z. Prakt. Anasth.
-Zeitschrift fur Praktische Anasthesie, Wiederbelebung und Intensivtherapie = Z. Prakt. Anasth. Wiederbeleb. Intensivther.
-Zeitschrift fur Praventivmedizin = Z. Praventivmed.
-Zeitschrift fur Psychologie mit Zeitschrift fur Angewandte Psychologie = Z. Psychol. Z. Angew. Psychol.
-Zeitschrift fur Psychosomatische Medizin und Psychoanalyse = Z. Psychosom. Med. Psychoanal.
-Zeitschrift fur Psychosomatische Medizin und Psychotherapie = Z. Psychosom. Med. Psychother.
-Zeitschrift fur Psychotherapie und Medizinische Psychologie = Z. Psychother. Med. Psychol.
-Zeitschrift fur Rechtsmedizin (Journal of Legal Medicine) = Z. Rechtsmed.
-Zeitschrift fur Rheumaforschung = Z. Rheumaforsch.
-Zeitschrift fur Rheumatologie = Z. Rheumatol.
-Zeitschrift fur Stomatologie = Z. Stomatol.
-Zeitschrift fur Tierphysiologie, Tierernahrung und Futtermittelkunde = Z. Tierphysiol. Tierernahr. Futtermittelkd.
-Zeitschrift fur Tierpsychologie = Z. Tierpsychol.
-Zeitschrift fur Tierzuchtung und Zuchtungsbiologie = Z. Tierzuecht. Zuechtungsbiol.
-Zeitschrift fur Tropenmedizin und Parasitologie = Z. Tropenmed. Parasitol.
-Zeitschrift fur Tuberkulose und Erkrankungen der Thoraxorgane = Z. Tuberk. Erkr. Thoraxorg.
-Zeitschrift fur Unfallchirurgie und Versicherungsmedizin = Z. Unfallchir. Versicherungsmed.
-Zeitschrift fur Unfallchirurgie, Versicherungsmedizin und Berufskrankheiten = Z. Unfallchir. Versicherungsmed. Berufskr.
-Zeitschrift fur Unfallmedizin und Berufskrankheiten = Z. Unfallmed. Berufskr.
-Zeitschrift fur Urologie und Nephrologie = Z. Urol. Nephrol.
-Zeitschrift fur Vererbungslehre = Z. Vererbungsl.
-Zeitschrift fur Versuchstierkunde = Z. Versuchstierkd.
-Zeitschrift fur Vitamin- Hormon- und Fermentforschung = Z. Vitam. Horm. Fermentforsch.
-Zeitschrift fur Wissenschaftliche Mikroskopie und fur Mikroskopische Technik = Z. Wiss. Mikrosk.
-Zeitschrift fur Zellforschung und Mikroskopische Anatomie = Z. Zellforsch. Mikrosk. Anat.
-Zeitschrift fur die Gesamte Experimentelle Medizin einschliesslich Experimentelle Chirurgie = Z. Gesamte Exp. Med.
-Zeitschrift fur die Gesamte Hygiene und Ihre Grenzgebiete = Z. Gesamte Hyg.
-Zeitschrift fur die Gesamte Innere Medizin und Ihre Grenzgebiete = Z. Gesamte Inn. Med.
-Zeitschrift für Meteorologie = Z. Meteor.
-Zentralblatt fur Allgemeine Pathologie und Pathologische Anatomie = Zentralbl. Allg. Pathol.
-Zentralblatt fur Arbeitsmedizin und Arbeitsschutz = Zentralbl. Arbeitsmed.
-Zentralblatt fur Arbeitsmedizin, Arbeitsschutz und Prophylaxe = Zentralbl. Arbeitsmed. Arbeitsschutz Prophyl.
-Zentralblatt fur Arbeitsmedizin, Arbeitsschutz, Prophylaxe und Ergonomie = Zentralbl. Arbeitsmed. Arbeitsschutz. Prophyl. Ergonomie
-Zentralblatt fur Bakteriologie, Mikrobiologie und Hygiene. 1. Abt. Originale B, Hygiene = Zentralbl. Bakteriol. Mikrobiol. Hyg. [B]
-Zentralblatt fur Bakteriologie, Mikrobiologie und Hygiene. Serie B, Umwelthygiene, Krankenhaushygiene, Arbeitshygiene, Praventive Medizin = Zentralbl. Bakteriol. Mikrobiol. Hyg. [B]
-Zentralblatt fur Bakteriologie, Mikrobiologie, und Hygiene. Series A, Medical Microbiology, Infectious Diseases, Virology, Parasitology = Zentralbl. Bakteriol. Mikrobiol. Hyg. [A]
-Zentralblatt fur Bakteriologie, Parasitenkunde, Infektionskrankheiten und Hygiene. 1. Abt., = Zentralbl. Bakteriol. [Orig.]
-Zentralblatt fur Bakteriologie, Parasitenkunde, Infektionskrankheiten und Hygiene. Erste = Zentralbl. Bakteriol. [Orig. B]
-Zentralblatt fur Bakteriologie, Parasitenkunde, Infektionskrankheiten und Hygiene. Erste Abteilung, Originale. Reihe B, Hygiene, Betriebshygiene, Praventive Medizin = Zentralbl. Bakteriol. [B]
-Zentralblatt fur Bakteriologie, Parasitenkunde, Infektionskrankheiten und Hygiene. Zweite = Zentralbl. Bakteriol. Parasitenkd. Infektionskr. Hyg.
-Zentralblatt fur Bakteriologie. 1. Abt., Originale. A, Medizinische Mikrobiologie, Infektionskrankheiten und Parasitiologie = Zentralbl. Bakteriol. A.
-Zentralblatt fur Bakteriologie. 1. Abt., Originale. B, Hygiene, Krankenhaushygiene, Betriebshygiene, Praventive Medizin = Zentralbl. Bakteriol. [B]
-Zentralblatt fur Biologische Aerosolforschung = Zentralbl. Biol. Aerosolforsch.
-Zentralblatt fur Chirurgie = Zentralbl. Chir.
-Zentralblatt fur Gynakologie = Zentralbl. Gynakol.
-Zentralblatt fur Hygiene und Umweltmedizin = Zentralbl. Hyg. Umweltmed.
-Zentralblatt fur Mikrobiologie = Zentralbl. Mikrobiol.
-Zentralblatt fur Neurochirurgie = Zentralbl. Neurochir.
-Zentralblatt fur Pathologie = Zentralbl. Pathol.
-Zentralblatt fur Phlebologie = Zentralbl. Phlebol.
-Zentralblatt fur Veterinarmedizin. Reihe A = Zentralbl. Veterinarmed. A
-Zentralblatt fur Veterinarmedizin. Reihe B = Zentralbl. Veterinarmed. [B]
-Zentralblatt fur Veterinarmedizin. Reihe C, Anatomia, Histologia, Embryologia = Zentralbl. Veterinarmed. [C]
-Zhi Wu Sheng Li Yu Fen Zi Sheng Wu Xue Xue Bao (Journal of Plant Physiology and Molecular Biology) = Zhi Wu Sheng Li Yu Fen Zi Sheng Wu Xue Xue Bao
-Zhipu Xuebao=Zhipu Xuebao;ZXHUBO;Q
-Zhong Nan Da Xue Xue Bao. Yi Xue Ban (Journal of Central South University. Medical Sciences) = Zhong Nan Da Xue Xue Bao Yi Xue Ban
-Zhong Xi Yi Jie He Xue Bao (Journal of Chinese Integrative Medicine) = Zhong Xi Yi Jie He Xue Bao
-Zhong Xi Yi Jie He Za Zhi (Chinese Journal of Modern Developments in Traditional Medicine) = Zhong Xi Yi Jie He Za Zhi
-Zhong Yao Tong Bao (Bulletin of Chinese Materia Medica) = Zhong Yao Tong Bao
-Zhongguo Ji Sheng Chong Xue Yu Ji Sheng Chong Bing Za Zhi (Chinese Journal of Parasitology and Parasitic Diseases) = Zhongguo Ji Sheng Chong Xue Yu Ji Sheng Chong Bing Za Zhi
-Zhongguo Shengwu Huaxue Yu Fenzi Shengwu Xuebao=Zhongguo Shengwu Huaxue Yu Fenzi Shengwu Xuebao;ZSHXF2;BM
-Zhongguo Xiu Fu Chong Jian Wai Ke Za Zhi (Chinese Journal of Reparative and Reconstructive Surgery) = Zhongguo Xiu Fu Chong Jian Wai Ke Za Zhi
-Zhongguo Yao Li Xue Bao (Acta Pharmacologica Sinica) = Zhongguo Yao Li Xue Bao
-Zhongguo Yi Liao Qi Xie Za Zhi (Chinese Journal of Medical Instrumentation) = Zhongguo Yi Liao Qi Xie Za Zhi
-Zhongguo Yi Xue Ke Xue Yuan Xue Bao (Acta Academiae Medicinae Sinicae) = Zhongguo Yi Xue Ke Xue Yuan Xue Bao
-Zhongguo Ying Yong Sheng Li Xue Za Zhi (Chinese Journal of Applied Physiology) = Zhongguo Ying Yong Sheng Li Xue Za Zhi
-Zhongguo Zhong Xi Yi Jie He Za Zhi (Chinese Journal of Integrated Traditional and Western Medicine) = Zhongguo Zhong Xi Yi Jie He Za Zhi
-Zhongguo Zhong Yao Za Zhi (China Journal of Chinese Materia Medica) = Zhongguo Zhong Yao Za Zhi
-Zhonghua Bing Li Xue Za Zhi (Chinese Journal of Pathology) = Zhonghua Bing Li Xue Za Zhi
-Zhonghua Er Bi Yan Hou Ke Za Zhi (Chinese Journal of Otorhinolaryngology) = Zhonghua Er Bi Yan Hou Ke Za Zhi
-Zhonghua Er Bi Yan Hou Tou Jing Wai Ke Za Zhi (Chinese Journal of Otorhinolaryngology Head and Neck Surgery) = Zhonghua Er Bi Yan Hou Tou Jing Wai Ke Za Zhi
-Zhonghua Fang She Xue Za Zhi (Chinese Journal of Radiology) = Zhonghua Fang She Xue Za Zhi
-Zhonghua Fu Chan Ke Za Zhi (Chinese Journal of Obstetrics and Gynecology) = Zhonghua Fu Chan Ke Za Zhi
-Zhonghua Gan Zang Bing Za Zhi (Chinese Journal of Hepatology) = Zhonghua Gan Zang Bing Za Zhi
-Zhonghua Hu Li Za Zhi (Chinese Journal of Nursing) = Zhonghua Hu Li Za Zhi
-Zhonghua Jie He He Hu Xi Xi Ji Bing Za Zhi (Chinese Journal of Tuberculosis and Respiratory Diseases) = Zhonghua Jie He He Hu Xi Xi Ji Bing Za Zhi
-Zhonghua Jie He He Hu Xi Za Zhi (Chinese Journal of Tuberculosis and Respiratory Diseases) = Zhonghua Jie He He Hu Xi Za Zhi
-Zhonghua Kou Qiang Ke Za Zhi (Chinese Journal of Stomatology) = Zhonghua Kou Qiang Ke Za Zhi
-Zhonghua Kou Qiang Yi Xue Za Zhi (Chinese Journal of Stomatology) = Zhonghua Kou Qiang Yi Xue Za Zhi
-Zhonghua Liu Xing Bing Xue Za Zhi = Zhonghua Liu Xing Bing Xue Za Zhi
-Zhonghua Minguo Wei Sheng Wu Ji Mian Yi Xue Za Zhi (Chinese Journal of Microbiology and Immunology) = Zhonghua Min Guo Wei Sheng Wu Ji Mian Yi Xue Za Zhi
-Zhonghua Minguo Wei Sheng Wu Xue Za Zhi (Chinese Journal of Microbiology) = Zhonghua Min Guo Wei Sheng Wu Xue Za Zhi
-Zhonghua Minguo Xiao Er Ke Yi Xue Hui Za Zhi = Zhonghua Min Guo Xiao Er Ke Yi Xue Hui Za Zhi
-Zhonghua Nei Ke Za Zhi (Chinese Journal of Internal Medicine) = Zhonghua Nei Ke Za Zhi
-Zhonghua Shao Shang Za Zhi = Zhonghua Shao Shang Za Zhi
-Zhonghua Shen Jing Jing Shen Ke Za Zhi (Chinese Journal of Neurology and Psychiatry) = Zhonghua Shen Jing Jing Shen Ke Za Zhi
-Zhonghua Wai Ke Za Zhi (Chinese Journal of Surgery) = Zhonghua Wai Ke Za Zhi
-Zhonghua Xin Xue Guan Bing Za Zhi (Chinese Journal of Cardiovascular Diseases) = Zhonghua Xin Xue Guan Bing Za Zhi
-Zhonghua Yi Xue Yi Chuan Xue Za Zhi (Chinese Journal of Medical Genetics) = Zhonghua Yi Xue Yi Chuan Xue Za Zhi
-Zhonghua Yi Xue Za Zhi (Chinese Medical Journal, Taipei) = Zhonghua Yi Xue Za Zhi (Taipei)
-Zhonghua Yu Fang Yi Xue Za Zhi (Chinese Journal of Preventive Medicine) = Zhonghua Yu Fang Yi Xue Za Zhi
-Zhonghua Zheng Xing Shao Shang Wai Ke Za Zhi (Chinese Journal of Plastic Surgery and Burns) = Zhonghua Zheng Xing Shao Shang Wai Ke Za Zhi
-Zhonghua Zheng Xing Wai Ke Za Zhi = Zhonghua Zheng Xing Wai Ke Za Zhi
-Zhonghua Zhong Liu Za Zhi (Chinese Journal of Oncology) = Zhonghua Zhong Liu Za Zhi
-Zhurnal Eksperimentalnoi i Klinicheskoi Meditsiny = Zh. Eksp. Klin. Med.
-Zhurnal Evoliutsionnoi Biokhimii i Fiziologii = Zh. Evol. Biokhim. Fiziol.
-Zhurnal Mikrobiologii, Epidemiologii i Immunobiologii = Zh. Mikrobiol. Epidemiol. Immunobiol.
-Zhurnal Neorganicheskoi Khimii=Zh. Neorg. Khim.;ZNOKAQ;M
-Zhurnal Nevrologii i Psikhiatrii imeni S.S. Korsakova = Zh. Nevrol. Psikhiatr. Im. S. S. Korsakova
-Zhurnal Nevropatologii i Psikhiatrii imeni S. S. Korsakova = Zh. Nevropatol. Psikhiatr. Im. S. S. Korsakova
-Zhurnal Obshchei Biologii = Zh. Obshch. Biol.
-Zhurnal Organichnoi ta Farmatsevtichnoi Khimii=Zh. Org. Farm. Khim.;ZOFKAM;4/YR
-Zhurnal Ushnykh, Nosovykh i Gorlovykh Boleznei = Zh. Ushn. Nos. Gorl. Bolezn.
-Zhurnal Voprosy Neirokhirurgii Imeni N. N. Burdenko = Zh. Vopr. Neirokhir. Im. N. N. Burdenko
-Zhurnal Vysshei Nervnoi Deiatelnosti Imeni I. P. Pavlova = Zh. Vyssh. Nerv. Deiat. Im. I. P. Pavlova
-Zimbabwe Nurse = Zimbabwe Nurse
-Zimbabwe Rhodesia Nurse = Zimbabwe Rhod. Nurse
-Zobozdravstveni Vestnik = Zobozdrav. Vestn.
-Zoological Science = Zoolog. Sci.
-Zoonoses Research = Zoonoses Res.
-Zuchthygiene = Zuchthygiene
-Zygote = Zygote
+"Meteor" Forschungsergebnisse = "Meteor" Forschungsergeb.
+AACN Clinical Issues = AACN Clin. Issues
+AACN Clinical Issues in Critical Care Nursing = AACN Clin. Issues Crit. Care Nurs.
+AADE Editors Journal = AADE Ed. J.
+AANA Journal = AANA J.
+AANNT Journal = AANNT J.
+AAOHN Journal = AAOHN J.
+AAPPO Journal = AAPPO J.
+AAPS Journal = AAPS J.
+AAPS PharmSci = AAPS PharmSci
+AARN News Letter = AARN News Lett.
+ABNF Journal = ABNF J.
+ACP Journal Club = ACP J. Club
+ACRH Reports = ACRH Rep.
+ACS Symposium Series=ACS Symp. Ser.;ACSMC8;IRR
+AD Nurse = AD Nurse
+ADA News = ADA News
+ADM = ADM
+AFL-CIO American Federationist = AFL. CIO Am. Fed.
+AHA Hospital Technology Series = AHA Hosp. Technol. Ser.
+AHME Journal = AHME J.
+AIA Journal = AIA J.
+AIChE Journal=AIChE J.;AICEAC;M
+AIDS = AIDS
+AIDS Care = AIDS Care
+AIDS Clinical Review = AIDS Clin. Rev.
+AIDS Education and Prevention = AIDS Educ. Prev.
+AIDS Patient Care and STDs = AIDS Patient Care STDS
+AIDS Research = AIDS Res.
+AIDS Research and Human Retroviruses = AIDS Res. Hum. Retroviruses
+AIDS Reviews = AIDS Rev.
+AIHA Journal = AIHA J.
+AIHAJ = AIHAJ
+AJNR: American Journal of Neuroradiology = AJNR Am. J. Neuroradiol.
+AJR: American Journal of Roentgenology = AJR Am. J. Roentgenol.
+AJS: American Journal of Sociology = AJS
+ALAFO: Revista de la Asociacion Latinoamericana de Facultades de Odontologia = ALAFO
+AM Reports = AM Rep.
+AMB: Revista da Associacao Medica Brasileira = AMB Rev. Assoc. Med. Bras.
+AMD-TR Reports = AMD. TR Rep.
+AMDI Bollettino = AMDI Boll.
+AMHC Forum = AMHC Forum
+AMIA Annual Symposium Proceedings = AMIA. Annu. Symp. Proc.
+AMRL-TR = AMRL. TR
+AMRO = AMRO
+AN: Arkansas Nurse = AN Ark. Nurse
+ANA Clinical Conferences = ANA Clin. Conf.
+ANA Clinical Sessions = ANA Clin. Sess.
+ANEC = ANEC
+ANL Reports = ANL Rep.
+ANNA Journal = ANNA J.
+ANPHI Papers = ANPHI Pap.
+ANS: Advances in Nursing Science = ANS Adv. Nurs. Sci.
+ANZ Journal of Surgery = ANZ J. Surg.
+AOHA = AOHA
+AOHA Progress = AOHA Prog.
+AOHA Today = AOHA Today
+AORN Journal = AORN J.
+APIC = APIC
+APMIS = APMIS
+APMIS. Supplementum = APMIS. Suppl.
+ARKIVOC (Gainesville, FL, United States)=ARKIVOC (Gainesville, FL, U. S.);AGFUAR;IRR
+ARN Journal = ARN J.
+ASA Newsletter = ASA Newsl.
+ASAIO Journal = ASAIO J.
+ASAIO Transactions = ASAIO Trans.
+ASDA News = ASDA News
+ASDC Journal of Dentistry for Children = ASDC J. Dent. Child.
+ASHA = ASHA
+ASHA Monographs = ASHA Monogr.
+ASHA. Supplement = ASHA. Suppl.
+ASNA Reporter = ASNA Rep.
+ASTM Standardization News = ASTM Stand. News
+ATLA, Alternatives to Laboratory Animals=ATLA, Altern. Lab. Anim.;AALADQ;BM
+AUAA Journal = AUAA J.
+AWHONN Lifelines = AWHONN Lifelines
+AWHONN Voice = AWHONN Voice
+AWHONN's Clinical Issues in Perinatal and Women's Health Nursing = AWHONNS Clin. Issues Perinat. Womens Health Nurs.
+Abdominal Imaging = Abdom. Imaging
+Academia Peruana de Cirugia = Acad. Peru. Cir.
+Academic Emergency Medicine = Acad. Emerg. Med.
+Academic Medicine = Acad. Med.
+Academic Nurse = Acad. Nurse
+Academic Radiology = Acad. Radiol.
+Academy Review of the California Academy of Periodontology = Acad. Rev. Calif. Acad. Periodontol.
+Academy of Management Journal = Acad. Manage. J.
+Academy of Management Review = Acad. Manage. Rev.
+Acarologia = Acarologia
+Accident Analysis and Prevention = Accid. Anal. Prev.
+Accident and Emergency Nursing = Accid. Emerg. Nurs.
+Accounts of Chemical Research=Acc. Chem. Res.;ACHRE4;M
+Acquisitions Medicales Recentes = Acquis. Med. Recent.
+Across the Board = Across Board (N. Y.)
+Acta Academiae Medicinae Wuhan = Acta Acad. Med. Wuhan
+Acta Allergologica = Acta Allergol.
+Acta Anaesthesiologica = Acta Anaesthesiol.
+Acta Anaesthesiologica Belgica = Acta Anaesthesiol. Belg.
+Acta Anaesthesiologica Scandinavica = Acta Anaesthesiol. Scand.
+Acta Anaesthesiologica Scandinavica. Supplementum = Acta Anaesthesiol. Scand. Suppl.
+Acta Anaesthesiologica Sinica = Acta Anaesthesiol. Sin.
+Acta Anaesthesiologica Taiwanica = Acta Anaesthesiol. Taiwan.
+Acta Anatomica = Acta Anat. (Basel)
+Acta Anatomica. Supplement = Acta Anat. Suppl. (Basel)
+Acta Anthropogenetica = Acta Anthropogenet.
+Acta Belgica. Medica Physica = Acta Belg. Med. Phys.
+Acta Bio-Medica de l'Ateneo Parmense = Acta Biomed. Ateneo Parmense
+Acta Biochimica Polonica = Acta Biochim. Pol.
+Acta Biochimica et Biophysica Academiae Scientiarum Hungaricae = Acta Biochim. Biophys. Acad. Sci. Hung.
+Acta Biochimica et Biophysica Hungarica = Acta Biochim. Biophys. Hung.
+Acta Biochimica et Biophysica Sinica = Acta Biochim. Biophys. Sin.
+Acta Biologiae Experimentalis = Acta Biol. Exp. (Warsz.)
+Acta Biologica Academiae Scientiarum Hungaricae = Acta Biol. Acad. Sci. Hung.
+Acta Biologica Hungarica = Acta Biol. Hung.
+Acta Biologica et Medica = Acta Biol. Med. (Gdansk)
+Acta Biologica et Medica Germanica = Acta Biol. Med. Ger.
+Acta Biomaterialia = Acta Biomater.
+Acta Biotheoretica = Acta Biotheor.
+Acta Cancerologica = Acta Cancerol. (Lima)
+Acta Cardiologica = Acta Cardiol.
+Acta Cardiologica. Supplementum = Acta Cardiol. Suppl.
+Acta Chemica Scandinavica = Acta Chem. Scand.
+Acta Chemica Scandinavica. Series A, Physical and Inorganic Chemistry = Acta Chem. Scand. A
+Acta Chemica Scandinavica. Series B, Organic Chemistry and Biochemistry = Acta Chem. Scand. B
+Acta Chimica Slovenica=Acta Chim. Slov.;ACSLE7;Q
+Acta Chirurgiae Orthopaedicae et Traumatologiae Cechoslovaca = Acta Chir. Orthop. Traumatol. Cech.
+Acta Chirurgiae Plasticae = Acta Chir. Plast.
+Acta Chirurgica Academiae Scientiarum Hungaricae = Acta Chir. Acad. Sci. Hung.
+Acta Chirurgica Belgica = Acta Chir. Belg.
+Acta Chirurgica Hungarica = Acta Chir. Hung.
+Acta Chirurgica Italica = Acta Chir. Ital.
+Acta Chirurgica Iugoslavica = Acta Chir. Iugosl.
+Acta Chirurgica Scandinavica = Acta Chir. Scand.
+Acta Chirurgica Scandinavica. Supplementum = Acta Chir. Scand. Suppl.
+Acta Cientifica Venezolana = Acta Cient. Venez.
+Acta Clinica Belgica = Acta Clin. Belg.
+Acta Clinica Belgica. Supplementum = Acta Clin. Belg. Suppl.
+Acta Clinica Odontologica = Acta Clin. Odontol.
+Acta Crystallographica = Acta Crystallogr.
+Acta Crystallographica, Section A: Foundations of Crystallography=Acta Crystallogr., Sect. A: Found. Crystallogr.;ACACEQ;BM
+Acta Crystallographica, Section B: Structural Science=Acta Crystallogr., Sect. B: Struct. Sci.;ASBSDK;BM
+Acta Crystallographica, Section C: Crystal Structure Communications=Acta Crystallogr., Sect. C: Cryst. Struct. Commun.;ACSCEE;M
+Acta Crystallographica, Section D: Biological Crystallography=Acta Crystallogr., Sect. D: Biol. Crystallogr.;ABCRE6;M
+Acta Crystallographica, Section E: Structure Reports Online=Acta Crystallogr., Sect. E: Struct. Rep. Online;ACSEBH;M
+Acta Crystallographica, Section F: Structural Biology and Crystallization Communications=Acta Crystallogr., Sect. F: Struct. Biol. Cryst. Commun.;ACSFCL;M
+Acta Crystallographica. Section A, Crystal Physics, Diffraction, Theoretical and General Crystallography = Acta Crystallogr. A
+Acta Crystallographica. Section A, Foundations of Crystallography = Acta Crystallogr. A
+Acta Crystallographica. Section B, Structural Crystallography and Crystal Chemistry = Acta Crystallogr. B
+Acta Crystallographica. Section B, Structural Science = Acta Crystallogr. B
+Acta Crystallographica. Section C, Crystal Structure Communications = Acta Crystallogr. C
+Acta Crystallographica. Section D, Biological Crystallography = Acta Crystallogr. D Biol. Crystallogr.
+Acta Crystallographica. Section F, Structural Biology and Crystallization Communications = Acta Crystallograph. Sect. F Struct. Biol. Cryst. Commun.
+Acta Cytologica = Acta Cytol.
+Acta Dermato-Venereologica = Acta Derm. Venereol.
+Acta Dermato-Venereologica. Supplementum = Acta Derm. Venereol. Suppl. (Stockh.)
+Acta Dermatologica Kyoto. English Edition = Acta Dermatol. Kyoto Engl. Ed.
+Acta Diabetologica = Acta Diabetol.
+Acta Diabetologica Latina = Acta Diabetol. Lat.
+Acta Embryologiae Experimentalis = Acta Embryol. Exp. (Palermo)
+Acta Embryologiae et Morphologiae Experimentalis = Acta Embryol. Morphol. Exp.
+Acta Endocrinologica = Acta Endocrinol. (Copenh.)
+Acta Endocrinologica. Supplementum = Acta Endocrinol. Suppl. (Copenh.)
+Acta Europaea Fertilitatis = Acta Eur. Fertil.
+Acta Gastroenterologica Belgica = Acta Gastroenterol. Belg.
+Acta Gastroenterologica Latinoamericana = Acta Gastroenterol. Latinoam.
+Acta Genetica et Statistica Medica = Acta Genet. Stat. Med.
+Acta Geneticae Medicae et Gemellologiae = Acta Genet. Med. Gemellol. (Roma)
+Acta Gerontologica = Acta Gerontol. (Milano)
+Acta Ginecologica = Acta Ginecol. (Madr.)
+Acta Gynaecologica et Obstetrica Hispano-Lusitana = Acta Gynaecol. Obstet. Hisp. Lusit.
+Acta Haematologica = Acta Haematol.
+Acta Haematologica Polonica = Acta Haematol. Pol.
+Acta Hepato-Gastroenterologica = Acta Hepatogastroenterol. (Stuttg.)
+Acta Hepato-Splenologica = Acta Hepatosplenol.
+Acta Histochemica = Acta Histochem.
+Acta Histochemica. Supplementband = Acta Histochem. Suppl.
+Acta Historica Scientiarum Naturalium et Medicinalium = Acta Hist. Sci. Nat. Med.
+Acta Hospitalia = Acta Hosp.
+Acta Hydrochimica et Hydrobiologica=Acta Hydrochim. Hydrobiol.;AHCBAU;BM
+Acta Iberica Radiologica-Cancerologica = Acta Iber. Radiol. Cancerol.
+Acta Isotopica = Acta Isot. (Padova)
+Acta Leidensia = Acta Leiden.
+Acta Leprologica = Acta Leprol.
+Acta Materialia=Acta Mater.;ACMAFD;20/YR
+Acta Medica (Hradec Kralove) = Acta Medica (Hradec Kralove)
+Acta Medica (Hradec Kralove). Supplementum = Acta Medica (Hradec Kralove) Suppl.
+Acta Medica Academiae Scientiarum Hungaricae = Acta Med. Acad. Sci. Hung.
+Acta Medica Austriaca = Acta Med. Austriaca
+Acta Medica Austriaca. Supplement = Acta Med. Austriaca. Suppl.
+Acta Medica Croatica = Acta Med. Croatica
+Acta Medica Hungarica = Acta Med. Hung.
+Acta Medica Iranica = Acta Med. Iran.
+Acta Medica Italica di Medicina Tropicale e Subtropicale e di Gastroenterologia = Acta Med. Ital. Med. Trop. Subtrop. Gastroenterol.
+Acta Medica Iugoslavica = Acta Med. Iugosl.
+Acta Medica Nagasakiensia = Acta Med. Nagasaki.
+Acta Medica Okayama = Acta Med. Okayama
+Acta Medica Philippina = Acta Med. Philipp.
+Acta Medica Polona = Acta Med. Pol.
+Acta Medica Portuguesa = Acta Med. Port.
+Acta Medica Scandinavica = Acta Med. Scand.
+Acta Medica Scandinavica. Supplementum = Acta Med. Scand. Suppl.
+Acta Medica Veterinaria = Acta Med. Vet. (Napoli)
+Acta Medica et Biologica = Acta Med. Biol. (Niigata)
+Acta Medicinae Legalis et Socialis = Acta Med. Leg. Soc. (Liege)
+Acta Microbiologica Academiae Scientiarum Hungaricae = Acta Microbiol. Acad. Sci. Hung.
+Acta Microbiologica Bulgarica = Acta Microbiol. Bulg.
+Acta Microbiologica Hungarica = Acta Microbiol. Hung.
+Acta Microbiologica Polonica = Acta Microbiol. Pol.
+Acta Microbiologica Polonica. Series A, Microbiologia Generalis = Acta Microbiol. Pol. A
+Acta Microbiologica Polonica. Series B, Microbiologia Applicata = Acta Microbiol. Pol. B
+Acta Microbiologica et Immunologica Hungarica = Acta Microbiol. Immunol. Hung.
+Acta Microbiologica, Virologica et Immunologica = Acta Microbiol. Virol. Immunol. (Sofiia)
+Acta Morphologica Academiae Scientiarum Hungaricae = Acta Morphol. Acad. Sci. Hung.
+Acta Morphologica Hungarica = Acta Morphol. Hung.
+Acta Morphologica Neerlando-Scandinavica = Acta Morphol. Neerl. Scand.
+Acta Neurobiologiae Experimentalis = Acta Neurobiol. Exp. (Warsz.)
+Acta Neurochirurgica = Acta Neurochir. (Wien)
+Acta Neurochirurgica. Supplementum = Acta Neurochir. Suppl. (Wien)
+Acta Neurologica = Acta Neurol. (Napoli)
+Acta Neurologica Belgica = Acta Neurol. Belg.
+Acta Neurologica Latinoamericana = Acta Neurol. Latinoam.
+Acta Neurologica Scandinavica = Acta Neurol. Scand.
+Acta Neurologica Scandinavica. Supplementum = Acta Neurol. Scand. Suppl.
+Acta Neurologica et Psychiatrica Belgica = Acta Neurol. Psychiatr. Belg.
+Acta Neurologica. Quaderni = Acta Neurol. [Quad.] (Napoli)
+Acta Neuropathologica = Acta Neuropathol. (Berl.)
+Acta Neuropathologica. Supplement = Acta Neuropathol. Suppl. (Berl.)
+Acta Neurovegetativa = Acta Neuroveg. (Wien)
+Acta Obstetrica et Gynaecologica Japonica = Acta Obstet. Gynaecol. Jpn.
+Acta Obstetrica y Ginecologica Hispano-Lusitana = Acta Obstet. Ginecol. Hisp. Lusit.
+Acta Obstetrica y Ginecologica Hispano-Lusitana. Suplemento = Acta Obstet. Ginecol. Hisp. Lusit. Suppl.
+Acta Obstetricia et Gynecologica Scandinavica = Acta Obstet. Gynecol. Scand.
+Acta Obstetricia et Gynecologica Scandinavica. Supplement = Acta Obstet. Gynecol. Scand. Suppl.
+Acta Odontologica Latinoamericana = Acta Odontol. Latinoam.
+Acta Odontologica Scandinavica = Acta Odontol. Scand.
+Acta Odontologica Scandinavica. Supplementum = Acta Odontol. Scand. Suppl.
+Acta Odontologica Venezolana = Acta Odontol. Venez.
+Acta Oncologica = Acta Oncol.
+Acta Ophthalmologica = Acta Ophthalmol. (Copenh.)
+Acta Ophthalmologica Scandinavica = Acta Ophthalmol. Scand.
+Acta Ophthalmologica Scandinavica. Supplement = Acta Ophthalmol. Scand. Suppl.
+Acta Ophthalmologica. Supplement = Acta Ophthalmol. Suppl.
+Acta Ophthalmologica. Supplementum = Acta Ophthalmol. Suppl.
+Acta Orthopaedica = Acta Orthop.
+Acta Orthopaedica Belgica = Acta Orthop. Belg.
+Acta Orthopaedica Scandinavica = Acta Orthop. Scand.
+Acta Orthopaedica Scandinavica. Supplementum = Acta Orthop. Scand. Suppl.
+Acta Orthopaedica. Supplementum = Acta Orthop. Suppl.
+Acta Oto-Laryngologica = Acta Otolaryngol. (Stockh.)
+Acta Oto-Laryngologica. Supplement = Acta Otolaryngol. Suppl. (Stockh.)
+Acta Oto-Rhino-Laryngologica Belgica = Acta Otorhinolaryngol. Belg.
+Acta Oto-Rino-Laringologica Ibero-Americana = Acta Otorinolaryngol. Iber. Am.
+Acta Otorhinolaryngologica Italica = Acta Otorhinolaryngol. Ital.
+Acta Otorrinolaringologica Espanola = Acta Otorrinolaringol. Esp.
+Acta Paediatrica = Acta Paediatr.
+Acta Paediatrica Academiae Scientiarum Hungaricae = Acta Paediatr. Acad. Sci. Hung.
+Acta Paediatrica Belgica = Acta Paediatr. Belg.
+Acta Paediatrica Hungarica = Acta Paediatr. Hung.
+Acta Paediatrica Japonica = Acta Paediatr. Jpn.
+Acta Paediatrica Scandinavica = Acta Paediatr. Scand.
+Acta Paediatrica Scandinavica. Supplement = Acta Paediatr. Scand. Suppl.
+Acta Paediatrica Taiwanica = Acta Paediatr. Taiwan.
+Acta Paediatrica. Supplement = Acta Paediatr. Suppl.
+Acta Paedopsychiatrica = Acta Paedopsychiatr.
+Acta Pathologica Japonica = Acta Pathol. Jpn.
+Acta Pathologica et Microbiologica Scandinavica = Acta Pathol. Microbiol. Scand.
+Acta Pathologica et Microbiologica Scandinavica. Section A, Pathology = Acta Pathol. Microbiol. Scand. [A]
+Acta Pathologica et Microbiologica Scandinavica. Section B, Microbiology = Acta Pathol. Microbiol. Scand. [B]
+Acta Pathologica et Microbiologica Scandinavica. Section B, Microbiology and Immunology = Acta Pathol. Microbiol. Scand. [B] Microbiol. Immunol.
+Acta Pathologica et Microbiologica Scandinavica. Section C, Immunology = Acta Pathol. Microbiol. Scand. [C]
+Acta Pathologica et Microbiologica Scandinavica. Supplement = Acta Pathol. Microbiol. Scand. Suppl.
+Acta Pathologica, Microbiologica, et Immunologica Scandinavica. Section A, Pathology = Acta Pathol. Microbiol. Immunol. Scand. [A]
+Acta Pathologica, Microbiologica, et Immunologica Scandinavica. Section B, Microbiology = Acta Pathol. Microbiol. Immunol. Scand. [B]
+Acta Pathologica, Microbiologica, et Immunologica Scandinavica. Section C, Immunology = Acta Pathol. Microbiol. Immunol. Scand. [C]
+Acta Pathologica, Microbiologica, et Immunologica Scandinavica. Supplement = Acta Pathol. Microbiol. Immunol. Scand. Suppl.
+Acta Pediatrica Espanola = Acta Pediatr. Esp.
+Acta Pharmaceutica (Zagreb, Croatia)=Acta Pharm. (Zagreb, Croatia);ACPHEE;Q
+Acta Pharmaceutica Hungarica = Acta Pharm. Hung.
+Acta Pharmaceutica Nordica = Acta Pharm. Nord.
+Acta Pharmaceutica Suecica = Acta Pharm. Suec.
+Acta Pharmacologica Sinica = Acta Pharmacol. Sin.
+Acta Pharmacologica et Toxicologica = Acta Pharmacol. Toxicol. (Copenh.)
+Acta Physica Polonica, A=Acta Phys. Pol., A;ATPLB6;M
+Acta Physica Polonica, B=Acta Phys. Pol., B;APOBBB;M
+Acta Physiologica = Acta Physiol.
+Acta Physiologica Academiae Scientiarum Hungaricae = Acta Physiol. Acad. Sci. Hung.
+Acta Physiologica Hungarica = Acta Physiol. Hung.
+Acta Physiologica Latinoamericana = Acta Physiol. Lat. Am.
+Acta Physiologica Polonica = Acta Physiol. Pol.
+Acta Physiologica Scandinavica = Acta Physiol. Scand.
+Acta Physiologica Scandinavica. Supplementum = Acta Physiol. Scand. Suppl.
+Acta Physiologica et Pharmacologica Bulgarica = Acta Physiol. Pharmacol. Bulg.
+Acta Physiologica et Pharmacologica Latinoamericana = Acta Physiol. Pharmacol. Latinoam.
+Acta Physiologica et Pharmacologica Neerlandica = Acta Physiol. Pharmacol. Neerl.
+Acta Physiologica, Pharmacologica et Therapeutica Latinoamericana = Acta Physiol. Pharmacol. Ther. Latinoam.
+Acta Poloniae Pharmaceutica = Acta Pol. Pharm.
+Acta Psiquiatrica y Psicologica de America Latina = Acta Psiquiatr. Psicol. Am. Lat.
+Acta Psychiatrica Belgica = Acta Psychiatr. Belg.
+Acta Psychiatrica Scandinavica = Acta Psychiatr. Scand.
+Acta Psychiatrica Scandinavica. Supplementum = Acta Psychiatr. Scand. Suppl.
+Acta Psychologica = Acta Psychol. (Amst.)
+Acta Radiologica = Acta Radiol.
+Acta Radiologica. Diagnosis = Acta Radiol. Diagn. (Stockh.)
+Acta Radiologica. Oncology = Acta Radiol. Oncol.
+Acta Radiologica. Oncology, Radiation, Physics, Biology = Acta Radiol. Oncol. Radiat. Phys. Biol.
+Acta Radiologica. Supplementum = Acta Radiol. Suppl.
+Acta Radiologica. Therapy, Physics, Biology = Acta Radiol. Ther. Phys. Biol.
+Acta Rheumatologica Scandinavica = Acta Rheumatol. Scand.
+Acta Rhumatologica = Acta Rhumatol.
+Acta Rhumatologica Belgica = Acta Rhumatol. Belg.
+Acta Scholae Medicinalis Universitatis in Kioto = Acta Sch. Med. Univ. Kioto
+Acta Societatis Medicorum Upsaliensis = Acta Soc. Med. Ups.
+Acta Socio-Medica Scandinavica = Acta Sociomed. Scand.
+Acta Socio-Medica Scandinavica. Supplement = Acta Sociomed. Scand. Suppl.
+Acta Stomatologica Belgica = Acta Stomatol. Belg.
+Acta Stomatologica Croatica = Acta Stomatol. Croat.
+Acta Stomatologica Internationalia = Acta Stomatol. Int.
+Acta Theriologica = Acta Theriol. (Warsz.)
+Acta Tropica = Acta Trop.
+Acta Tropica. Supplement = Acta Trop. Suppl.
+Acta Tuberculosea Japonica = Acta Tuberc. Jpn.
+Acta Tuberculosea et Pneumologica Belgica = Acta Tuberc. Pneumol. Belg.
+Acta Tuberculosea et Pneumologica Scandinavica = Acta Tuberc. Pneumol. Scand.
+Acta Universitatis Carolinae. Medica = Acta Univ. Carol. [Med.] (Praha)
+Acta Universitatis Carolinae. Medica. Monographia = Acta Univ. Carol. Med. Monogr.
+Acta Universitatis Palackianae Olomucensis Facultatis Medicae = Acta Univ. Palacki. Olomuc. Fac. Med.
+Acta Urologica Belgica = Acta Urol. Belg.
+Acta Veterinaria = Acta Vet. (Beogr.)
+Acta Veterinaria Academiae Scientiarum Hungaricae = Acta Vet. Acad. Sci. Hung.
+Acta Veterinaria Hungarica = Acta Vet. Hung.
+Acta Veterinaria Scandinavica = Acta Vet. Scand.
+Acta Veterinaria Scandinavica. Supplement = Acta Vet. Scand. Suppl.
+Acta Virologica = Acta Virol.
+Acta Vitaminologica = Acta Vitaminol.
+Acta Vitaminologica et Enzymologica = Acta Vitaminol. Enzymol.
+Acta Zoologica et Pathologica Antverpiensia = Acta Zool. Pathol. Antverp.
+Acta de Odontologia Pediatrica = Acta Odontol. Pediatr.
+Actas Dermo-Sifiliograficas = Actas Dermosifiliogr.
+Actas Espanolas de Psiquiatria = Actas Esp. Psiquiatr.
+Actas Luso-Espanolas de Neurologia y Psiquiatria = Actas Luso. Esp. Neurol. Psiquiatr.
+Actas Luso-Espanolas de Neurologia, Psiquiatria y Ciencias Afines = Actas Luso. Esp. Neurol. Psiquiatr. Cienc. Afines
+Actas Urologicas Espanolas = Actas Urol. Esp.
+Activitas Nervosa Superior = Act. Nerv. Super. (Praha)
+Actualidad Pediatrica = Actual. Pediatr. (Granada)
+Actualites Cardiologiques et Angeiologiques Internationales = Actual. Cardiol. Angeiol. Int. (Paris)
+Actualites Endocrinologiques = Actual. Endocrinol. (Paris)
+Actualites Hepato-Gastro-Enterologiques = Actual. Hepatogastroenterol. (Paris)
+Actualites Neurophysiologiques = Actual. Neurophysiol. (Paris)
+Actualites Odonto-Stomatologiques = Actual. Odontostomatol. (Paris)
+Actualites Pharmacologiques = Actual. Pharmacol. (Paris)
+Actualites de Physiologie Pathologique = Actual. Physiol. Pathol. (Paris)
+Acupuncture and Electro-Therapeutics Research = Acupunct. Electrother. Res.
+Acute Cardiac Care = Acute Card. Care
+Acute Care = Acute Care
+Addiction = Addiction
+Addiction Biology = Addict. Biol.
+Addictive Behaviors = Addict. Behav.
+Addictive Diseases = Addict. Dis.
+Additamenta ad Folia Medica Neerlandica = Additamenta Folia Med. Neerl.
+Administration and Policy in Mental Health = Adm. Policy Ment. Health
+Administration in Mental Health = Adm. Ment. Health
+Administration in Social Work = Adm. Soc. Work
+Administrative Management = Adm. Manage.
+Administrative Radiology = Adm. Radiol.
+Administrative Radiology Journal = Adm. Radiol. J.
+Administrative Science Quarterly = Adm. Sci. Q.
+Admitting Management Journal = Admit. Manage. J.
+Adolescence = Adolescence
+Adolescent Medicine = Adolesc. Med.
+Adolescent Medicine Clinics = Adolesc. Med. Clin.
+Adolescent Psychiatry = Adolesc. Psychiatry
+Adsorption=Adsorption;ADSOFO;Q
+Adsorption Science & Technology=Adsorpt. Sci. Technol.;ASTEEZ;10/YR
+Adult Education = Adult Educ.
+Advance Data = Adv. Data
+Advance for Nurse Practitioners = Adv. Nurse Pract.
+Advanced Drug Delivery Reviews=Adv. Drug Delivery Rev.;ADDREP;15/YR
+Advanced Functional Materials=Adv. Funct. Mater.;AFMDC6;M
+Advanced Materials (Weinheim, Germany)=Adv. Mater. (Weinheim, Ger.);ADVMEW;SM
+Advanced Practice Nursing Quarterly = Adv. Pract. Nurs. Q.
+Advanced Synthesis & Catalysis=Adv. Synth. Catal.;ASCAF7;15/YR
+Advancement of Science = Adv. Sci.
+Advances and Technical Standards in Neurosurgery = Adv. Tech. Stand. Neurosurg.
+Advances in Alcohol and Substance Abuse = Adv. Alcohol Subst. Abuse
+Advances in Anatomic Pathology = Adv. Anat. Pathol.
+Advances in Anatomy, Embryology and Cell Biology = Adv. Anat. Embryol. Cell Biol.
+Advances in Applied Ceramics=Adv. Appl. Ceram.;AACDCN;BM
+Advances in Applied Microbiology = Adv. Appl. Microbiol.
+Advances in Atomic, Molecular, and Optical Physics=Adv. At., Mol., Opt. Phys.;AAMPE9;IRR
+Advances in Behavioral Biology = Adv. Behav. Biol.
+Advances in Biochemical Engineering/Biotechnology = Adv. Biochem. Eng. Biotechnol.
+Advances in Biochemical Psychopharmacology = Adv. Biochem. Psychopharmacol.
+Advances in Biological and Medical Physics = Adv. Biol. Med. Phys.
+Advances in Biology of Skin = Adv. Biol. Skin
+Advances in Biomedical Engineering and Medical Physics = Adv. Biomed. Eng. Med. Phys.
+Advances in Biophysics = Adv. Biophys.
+Advances in Biotechnological Processes = Adv. Biotechnol. Processes
+Advances in Cancer Research = Adv. Cancer Res.
+Advances in Carbohydrate Chemistry and Biochemistry = Adv. Carbohydr. Chem. Biochem.
+Advances in Cardiac Surgery = Adv. Card. Surg.
+Advances in Cardiology = Adv. Cardiol.
+Advances in Cardiopulmonary Diseases = Adv. Cardiopulm. Dis.
+Advances in Cell Biology = Adv. Cell Biol.
+Advances in Chemical Physics=Adv. Chem. Phys.;ADCPAA;IRR
+Advances in Chemotherapy = Adv. Chemother.
+Advances in Child Development and Behavior = Adv. Child Dev. Behav.
+Advances in Chromatography = Adv. Chromatogr.
+Advances in Chromatography (New York, NY, United States)=Adv. Chromatogr. (N. Y., NY, U. S.);ADCYA3;IRR
+Advances in Chronic Kidney Disease = Adv. Chronic Kidney Dis.
+Advances in Clinical Chemistry = Adv. Clin. Chem.
+Advances in Clinical Pathology = Adv. Clin. Path.
+Advances in Clinical Pharmacology = Adv. Clin. Pharmacol.
+Advances in Clinical Rehabilitation = Adv. Clin. Rehabil.
+Advances in Colloid and Interface Science = Adv. Colloid Interface Sci.
+Advances in Comparative Physiology and Biochemistry = Adv. Comp. Physiol. Biochem.
+Advances in Contraception = Adv. Contracept.
+Advances in Cyclic Nucleotide Research = Adv. Cyclic Nucleotide Res.
+Advances in Cyclic Nucleotide and Protein Phosphorylation Research = Adv. Cyclic Nucleotide Protein Phosphorylation Res.
+Advances in Cytopharmacology = Adv. Cytopharmacol.
+Advances in Dental Research = Adv. Dent. Res.
+Advances in Dermatology = Adv. Dermatol.
+Advances in Drug Research = Adv. Drug Res.
+Advances in Electrochemical Science and Engineering=Adv. Electrochem. Sci. Eng.;AESEEY;IRR
+Advances in Endocrinology and Metabolism = Adv. Endocrinol. Metab.
+Advances in Enzyme Regulation = Adv. Enzyme Regul.
+Advances in Enzymology and Related Areas of Molecular Biology = Adv. Enzymol. Relat. Areas Mol. Biol.
+Advances in Experimental Medicine and Biology = Adv. Exp. Med. Biol.
+Advances in Fluorine Research and Dental Caries Prevention = Adv. Fluorine Res.
+Advances in Food Research = Adv. Food Res.
+Advances in Food Research. Supplement = Adv. Food Res. Suppl.
+Advances in Food and Nutrition Research = Adv. Food Nutr. Res.
+Advances in Genetics = Adv. Genet.
+Advances in Gerontological Research = Adv. Gerontol. Res.
+Advances in Health Economics and Health Services Research = Adv. Health Econ. Health Serv. Res.
+Advances in Health Economics and Health Services Research. Supplement = Adv. Health Econ. Health Serv. Res. Suppl.
+Advances in Health Sciences Education Theory and Practice = Adv. Health Sci. Educ. Theory Pract.
+Advances in Heterocyclic Chemistry = Adv. Heterocycl. Chem.
+Advances in Human Genetics = Adv. Hum. Genet.
+Advances in Immunity and Cancer Therapy = Adv. Immun. Cancer Ther.
+Advances in Immunology = Adv. Immunol.
+Advances in Inorganic Biochemistry = Adv. Inorg. Biochem.
+Advances in Inorganic Chemistry=Adv. Inorg. Chem.;AICHEP;IRR
+Advances in Internal Medicine = Adv. Intern. Med.
+Advances in Lipid Research = Adv. Lipid Res.
+Advances in Medical Sciences = Adv. Med. Sci.
+Advances in Metabolic Disorders = Adv. Metab. Disord.
+Advances in Microbial Physiology = Adv. Microb. Physiol.
+Advances in Mind-Body Medicine = Adv. Mind Body Med.
+Advances in Morphogenesis = Adv. Morphog.
+Advances in Myocardiology = Adv. Myocardiol.
+Advances in Neonatal Care = Adv. Neonatal Care
+Advances in Nephrology from the Necker Hospital = Adv. Nephrol. Necker Hosp.
+Advances in Neuroimmunology = Adv. Neuroimmunol.
+Advances in Neurology = Adv. Neurol.
+Advances in Nutritional Research = Adv. Nutr. Res.
+Advances in Ophthalmic, Plastic, and Reconstructive Surgery = Adv. Ophthalmic. Plast. Reconstr. Surg.
+Advances in Ophthalmology = Adv. Ophthalmol.
+Advances in Oral Biology = Adv. Oral Biol.
+Advances in Oto-Rhino-Laryngology = Adv. Otorhinolaryngol.
+Advances in Parasitology = Adv. Parasitol.
+Advances in Pathobiology = Adv. Pathobiol.
+Advances in Pediatric Infectious Diseases = Adv. Pediatr. Infect. Dis.
+Advances in Pediatrics = Adv. Pediatr.
+Advances in Peritoneal Dialysis = Adv. Perit. Dial.
+Advances in Pest Control Research = Adv. Pest Control Res.
+Advances in Pharmaceutical Sciences = Adv. Pharm. Sci.
+Advances in Pharmacology = Adv. Pharmacol.
+Advances in Pharmacology and Chemotherapy = Adv. Pharmacol. Chemother.
+Advances in Planned Parenthood = Adv. Plan. Parent.
+Advances in Polymer Science=Adv. Polym. Sci.;APSIDK;IRR
+Advances in Polymer Technology=Adv. Polym. Technol.;APTYD5;Q
+Advances in Prostaglandin and Thromboxane Research = Adv. Prostaglandin Thromboxane Res.
+Advances in Prostaglandin, Thromboxane, and Leukotriene Research = Adv. Prostaglandin. Thromboxane. Leukot. Res.
+Advances in Protein Chemistry = Adv. Protein Chem.
+Advances in Psychobiology = Adv. Psychobiol.
+Advances in Psychosomatic Medicine = Adv. Psychosom. Med.
+Advances in Quantum Chemistry=Adv. Quantum Chem.;AQCHA9;IRR
+Advances in Renal Replacement Therapy = Adv. Ren. Replace. Ther.
+Advances in Reproductive Physiology = Adv. Reprod. Physiol.
+Advances in Second Messenger and Phosphoprotein Research = Adv. Second Messenger Phosphoprotein Res.
+Advances in Sex Hormone Research = Adv. Sex Horm. Res.
+Advances in Shock Research = Adv. Shock Res.
+Advances in Socio-Dental Research = Adv. Sociodent. Res.
+Advances in Space Biology and Medicine = Adv. Space Biol. Med.
+Advances in Steroid Biochemistry and Pharmacology = Adv. Steroid Biochem. Pharmacol.
+Advances in Surgery = Adv. Surg.
+Advances in Therapy = Adv. Ther.
+Advances in Tracer Methodology = Adv. Tracer Methodol.
+Advances in Tuberculosis Research = Adv. Tuberc. Res.
+Advances in Veterinary Medicine = Adv. Vet. Med.
+Advances in Veterinary Science = Adv. Vet. Sci.
+Advances in Veterinary Science and Comparative Medicine = Adv. Vet. Sci. Comp. Med.
+Advances in Virus Research = Adv. Virus Res.
+Advances in Wound Care = Adv. Wound Care
+Advances in X-Ray Analysis=Adv. X-Ray Anal.;AXRAAA;A
+Advances in the Biosciences = Adv. Biosci.
+Advancing Clinical Care = Adv. Clin. Care
+Adverse Drug Reactions and Acute Poisoning Reviews = Adverse Drug React. Acute Poisoning Rev.
+Adverse Drug Reactions and Toxicological Reviews = Adverse Drug React. Toxicol. Rev.
+Advertising Age = Advert. Age
+Aeromedical Review = Aeromed. Rev.
+Aerosol Science and Technology=Aerosol Sci. Technol.;ASTYDQ;M
+Aerospace Medicine = Aerosp. Med.
+Aesthetic Plastic Surgery = Aesthetic Plast. Surg.
+Afinidad=Afinidad;AFINAE;BM
+African Dental Journal = Afr. Dent. J.
+African Health Sciences = Afr. Health Sci.
+African Journal of Medical Sciences = Afr. J. Med. Sci.
+African Journal of Medicine and Medical Sciences = Afr. J. Med. Med. Sci.
+African Journal of Psychiatry = Afr. J. Psychiatry
+African Journal of Reproductive Health = Afr. J. Reprod. Health
+Age and Ageing = Age Ageing
+Aged Care and Services Review = Aged Care Serv. Rev.
+Ageing Research Reviews = Ageing Res. Rev.
+Agents and Actions = Agents Actions
+Agents and Actions. Supplements = Agents Actions. Suppl.
+Aggiornamenti Clinicoterapeutici = Aggiorn. Clinico Ter.
+Aging = Aging (Milano)
+Aging Cell = Aging Cell
+Aging Clinical and Experimental Research = Aging Clin. Exp. Res.
+Aging Male = Aging Male
+Aging Trends = Aging Trends
+Aging and Leisure Living = Aging Leis. Living
+Aging and Mental Health = Aging Ment. Health
+Agnes Karll-Schwester. Der Krankenpfleger = Agnes Karll Schwest. Krankenpfleger
+Agressologie = Agressologie
+Agricultural and Biological Chemistry = Agric. Biol. Chem.
+Ahot Be-Yisrael = Ahot Beyisrael.
+Aichi Gakuin Daigaku Shigakkai Shi (Aichi-Gakuin Journal of Dental Science) = Aichi Gakuin Daigaku Shigakkai Shi
+Aichi-Gakuin Dental Science = Aichi Gakuin Dent. Sci.
+Air Medical Journal = Air Med. J.
+Air and Waste = Air Waste
+Air and Water Pollution = Air Water Pollut.
+Aktuelle Gerontologie = Aktuelle Gerontol.
+Aktuelle Oto-Rhino-Laryngologie = Aktuelle Otorhinolaryngol.
+Aktuelle Probleme in Chirurgie und Orthopadie = Aktuelle Probl. Chir. Orthop.
+Aktuelle Probleme in der Chirurgie = Aktuelle Probl. Chir.
+Aktuelle Radiologie = Aktuelle Radiol.
+Aktuelle Traumatologie = Aktuelle Traumatol.
+Akusherstvo i Ginekologiia = Akush. Ginekol. (Sofiia)
+Alabama Journal of Medical Sciences = Ala. J. Med. Sci.
+Alabama Medicine = Ala. Med.
+Alabama Nurse = Ala. Nurse
+Alaska Medicine = Alaska Med.
+Alaska Nurse = Alaska Nurse
+Albany Law Review = Albany Law Rev.
+Albrecht von Graefes Archiv fur Klinische und Experimentelle Ophthalmologie = Albrecht von Graefes Arch. Klin. Exp. Ophthalmol.
+Alcohol = Alcohol
+Alcohol Health and Research World = Alcohol Health Res. World
+Alcohol Research and Health = Alcohol Res. Health
+Alcohol and Alcoholism = Alcohol Alcohol
+Alcohol and Alcoholism. Supplement = Alcohol Alcohol Suppl.
+Alcohol and Drug Research = Alcohol Drug Res.
+Alcoholism, Clinical and Experimental Research = Alcohol. Clin. Exp. Res.
+Alergia = Alergia
+Alexandria Dental Journal = Alex. Dent. J.
+Alimentary Pharmacology and Therapeutics = Aliment. Pharmacol. Ther.
+Alimentation et la Vie = Aliment. Vie
+Alkaloids, Chemistry and Biology = Alkaloids Chem. Biol.
+Allergie et Immunologie = Allerg. Immunol. (Paris)
+Allergie und Asthma = Allerg. Asthma (Leipz.)
+Allergie und Asthmaforschung = Allerg. Asthmaforsch.
+Allergie und Immunologie = Allerg. Immunol. (Leipz.)
+Allergologia et Immunopathologia = Allergol. Immunopathol. (Madr.)
+Allergy = Allergy
+Allergy Proceedings = Allergy Proc.
+Allergy and Asthma Proceedings = Allergy Asthma Proc.
+Allied Health and Behavioral Sciences = Allied Health Behav. Sci.
+Alma Mater = Alma Mater (Baltimore)
+Alpha Omega France = Alpha Omega Fr.
+Alpha Omegan = Alpha Omegan
+Altern und Entwicklung (Aging and Development) = Altern Entwickl. Aging Dev.
+Alternative Medicine Review = Altern. Med. Rev.
+Alternative Therapies in Health and Medicine = Altern. Ther. Health Med.
+Alumnae Magazine, Columbia University-Presbyterian Hospital School of Nursing Alumnae Association = Alumnae Mag. Columbia Univ. Presbyt. Hosp. Sch. Nurs. Alumnae Assoc.
+Alumnae Magazine, Johns Hopkins Hospital School of Nursing Alumnae Association = Alumnae Mag. Johns Hopkins Hosp. Sch. Nurs. Alumnae Assoc.
+Alumni Bulletin, School of Dentistry, Indiana University = Alumni Bull. Sch. Dent. Indiana Univ.
+Alumni Bulletin, University of Michigan School of Dentistry = Alumni Bull. Univ. Mich. Sch. Dent.
+Alumni Magazine, Alumni Association of the Johns Hopkins Hospital School of Nursing = Alumni Mag.
+Alumni Magazine, Columbia University-Presbyterian Hospital School of Nursing Alumni Association = Alumni Mag. Columbia Univ. Presbyt. Hosp. Sch. Nurs. Alumni Assoc.
+Alzheimer Disease and Associated Disorders = Alzheimer Dis. Assoc. Disord.
+Ambulatory Care = Ambul. Care
+Ambulatory Outreach = Ambul. Outreach
+Ambulatory Pediatrics = Ambul. Pediatr.
+American Annals of the Deaf = Am. Ann. Deaf
+American Archives of Rehabilitation Therapy = Am. Arch. Rehabil. Ther.
+American Association of Industrial Nurses Journal = Am. Assoc. Ind. Nurses J.
+American Behavioral Scientist = Am. Behav. Sci.
+American Biotechnology Laboratory = Am. Biotechnol. Lab.
+American Ceramic Society Bulletin=Am. Ceram. Soc. Bull.;ACSBA7;M
+American Clinical Laboratory = Am. Clin. Lab.
+American College of Physicians Observer = Am. Coll. Physicians Obs.
+American Corrective Therapy Journal = Am. Correct. Ther. J.
+American Demographics = Am. Demogr.
+American Economic Review = Am. Econ. Rev.
+American Education = Am. Educ.
+American Family Physician = Am. Fam. Physician
+American Family Physician/GP = Am. Fam. Physician. GP
+American Heart Hospital Journal = Am. Heart Hosp. J.
+American Heart Journal = Am. Heart J.
+American Imago = Am. Imago
+American Indian and Alaska Native Mental Health Research = Am. Indian Alsk. Native Ment. Health Res.
+American Indian and Alaska Native Mental Health Research. Monograph Series = Am. Indian Alsk. Native Ment. Health Res. Monogr. Ser.
+American Industrial Hygiene Association Journal = Am. Ind. Hyg. Assoc. J.
+American Journal of Alzheimer's Disease and Other Dementias = Am. J. Alzheimers Dis. Other Demen.
+American Journal of Anatomy = Am. J. Anat.
+American Journal of Anesthesiology = Am. J. Anesthesiol.
+American Journal of Art Therapy = Am. J. Art Ther.
+American Journal of Bioethics = Am. J. Bioeth.
+American Journal of Botany = Am. J. Bot.
+American Journal of Cardiac Imaging = Am. J. Card. Imaging
+American Journal of Cardiology = Am. J. Cardiol.
+American Journal of Cardiovascular Drugs = Am. J. Cardiovasc. Drugs
+American Journal of Cardiovascular Pathology = Am. J. Cardiovasc. Pathol.
+American Journal of Chinese Medicine = Am. J. Chin. Med.
+American Journal of Clinical Dermatology = Am. J. Clin. Dermatol.
+American Journal of Clinical Hypnosis = Am. J. Clin. Hypn.
+American Journal of Clinical Nutrition = Am. J. Clin. Nutr.
+American Journal of Clinical Oncology = Am. J. Clin. Oncol.
+American Journal of Clinical Pathology = Am. J. Clin. Pathol.
+American Journal of Community Psychology = Am. J. Community Psychol.
+American Journal of Contact Dermatitis = Am. J. Contact Dermat.
+American Journal of Critical Care = Am. J. Crit. Care
+American Journal of Dentistry = Am. J. Dent.
+American Journal of Dermatopathology = Am. J. Dermatopathol.
+American Journal of Digestive Diseases = Am. J. Dig. Dis.
+American Journal of Diseases of Children = Am. J. Dis. Child.
+American Journal of Drug and Alcohol Abuse = Am. J. Drug Alcohol Abuse
+American Journal of EEG Technology = Am. J. EEG Technol.
+American Journal of Economics and Sociology = Am. J. Econ. Sociol.
+American Journal of Emergency Medicine = Am. J. Emerg. Med.
+American Journal of Epidemiology = Am. J. Epidemiol.
+American Journal of Forensic Medicine and Pathology = Am. J. Forensic Med. Pathol.
+American Journal of Gastroenterology = Am. J. Gastroenterol.
+American Journal of Geriatric Pharmacotherapy = Am. J. Geriatr. Pharmacother.
+American Journal of Geriatric Psychiatry = Am. J. Geriatr. Psychiatry
+American Journal of Health Behavior = Am. J. Health Behav.
+American Journal of Health Planning = Am. J. Health Plann.
+American Journal of Health Promotion = Am. J. Health Promot.
+American Journal of Health-System Pharmacy = Am. J. Health. Syst. Pharm.
+American Journal of Hematology = Am. J. Hematol.
+American Journal of Hospice Care = Am. J. Hosp. Care
+American Journal of Hospice and Palliative Care = Am. J. Hosp. Palliat. Care
+American Journal of Hospital Pharmacy = Am. J. Hosp. Pharm.
+American Journal of Human Genetics = Am. J. Hum. Genet.
+American Journal of Hypertension = Am. J. Hypertens.
+American Journal of Industrial Medicine = Am. J. Ind. Med.
+American Journal of Infection Control = Am. J. Infect. Control
+American Journal of Kidney Diseases = Am. J. Kidney Dis.
+American Journal of Knee Surgery = Am. J. Knee Surg.
+American Journal of Law and Medicine = Am. J. Law Med.
+American Journal of Managed Care = Am. J. Manag. Care
+American Journal of Medical Electronics = Am. J. Med. Electron.
+American Journal of Medical Genetics = Am. J. Med. Genet.
+American Journal of Medical Genetics. Part A = Am. J. Med. Genet. A.
+American Journal of Medical Genetics. Part B, Neuropsychiatric Genetics = Am. J. Med. Genet. B Neuropsychiatr. Genet.
+American Journal of Medical Genetics. Part C, Seminars in Medical Genetics = Am. J. Med. Genet. C Semin. Med. Genet.
+American Journal of Medical Genetics. Supplement = Am. J. Med. Genet. Suppl.
+American Journal of Medical Quality = Am. J. Med. Qual.
+American Journal of Medical Technology = Am. J. Med. Technol.
+American Journal of Medicine = Am. J. Med.
+American Journal of Mental Deficiency = Am. J. Ment. Defic.
+American Journal of Mental Retardation = Am. J. Ment. Retard.
+American Journal of Nephrology = Am. J. Nephrol.
+American Journal of Nursing = Am. J. Nurs.
+American Journal of Obstetrics and Gynecology = Am. J. Obstet. Gynecol.
+American Journal of Occupational Therapy = Am. J. Occup. Ther.
+American Journal of Ophthalmology = Am. J. Ophthalmol.
+American Journal of Optometry and Archives of American Academy of Optometry = Am. J. Optom. Arch. Am. Acad. Optom.
+American Journal of Optometry and Physiological Optics = Am. J. Optom. Physiol. Opt.
+American Journal of Orthodontics = Am. J. Orthod.
+American Journal of Orthodontics and Dentofacial Orthopedics = Am. J. Orthod. Dentofacial Orthop.
+American Journal of Orthopedic Surgery = Am. J. Orthop. Surg.
+American Journal of Orthopedics = Am. J. Orthop.
+American Journal of Orthopsychiatry = Am. J. Orthopsychiatry
+American Journal of Otolaryngology = Am. J. Otolaryngol.
+American Journal of Otology = Am. J. Otol.
+American Journal of Pathology = Am. J. Pathol.
+American Journal of Pediatric Hematology/Oncology = Am. J. Pediatr. Hematol. Oncol.
+American Journal of Perinatology = Am. J. Perinatol.
+American Journal of Pharmaceutical Education = Am. J. Pharm. Educ.
+American Journal of Pharmacogenomics = Am. J. Pharmacogenomics
+American Journal of Pharmacy and the Sciences Supporting Public Health = Am. J. Pharm. Sci. Support. Public Health
+American Journal of Physical Anthropology = Am. J. Phys. Anthropol.
+American Journal of Physical Medicine = Am. J. Phys. Med.
+American Journal of Physical Medicine and Rehabilitation = Am. J. Phys. Med. Rehabil.
+American Journal of Physiologic Imaging = Am. J. Physiol. Imaging
+American Journal of Physiology = Am. J. Physiol.
+American Journal of Physiology. Renal Physiology = Am. J. Physiol. Renal Physiol.
+American Journal of Practical Nursing = Am. J. Pract. Nurs.
+American Journal of Preventive Medicine = Am. J. Prev. Med.
+American Journal of Primatology = Am. J. Primatol.
+American Journal of Proctology = Am. J. Proctol.
+American Journal of Proctology, Gastroenterology and Colon and Rectal Surgery = Am. J. Proctol. Gastroenterol. Colon Rectal Surg.
+American Journal of Psychiatry = Am. J. Psychiatry
+American Journal of Psychoanalysis = Am. J. Psychoanal.
+American Journal of Psychology = Am. J. Psychol.
+American Journal of Psychotherapy = Am. J. Psychother.
+American Journal of Public Health = Am. J. Public Health
+American Journal of Public Health and the Nation's Health = Am. J. Public Health Nations Health
+American Journal of Reproductive Immunology = Am. J. Reprod. Immunol.
+American Journal of Reproductive Immunology and Microbiology = Am. J. Reprod. Immunol. Microbiol.
+American Journal of Respiratory Cell and Molecular Biology = Am. J. Respir. Cell Mol. Biol.
+American Journal of Respiratory and Critical Care Medicine = Am. J. Respir. Crit. Care Med.
+American Journal of Rhinology = Am. J. Rhinol.
+American Journal of Roentgenology = Am. J. Roentgenol.
+American Journal of Roentgenology, Radium Therapy and Nuclear Medicine = Am. J. Roentgenol. Radium Ther. Nucl. Med.
+American Journal of Sports Medicine = Am. J. Sports Med.
+American Journal of Surgery = Am. J. Surg.
+American Journal of Surgical Pathology = Am. J. Surg. Pathol.
+American Journal of Therapeutics = Am. J. Ther.
+American Journal of Transplantation = Am. J. Transplant.
+American Journal of Tropical Medicine and Hygiene = Am. J. Trop. Med. Hyg.
+American Journal of Veterinary Research = Am. J. Vet. Res.
+American Journal of the Medical Sciences = Am. J. Med. Sci.
+American Journal on Addictions = Am. J. Addict.
+American Laundry Digest = Am. Laund. Dig.
+American Libraries = Am. Libr.
+American Lung Association Bulletin = Am. Lung Assoc. Bull.
+American Medical News = Am. Med. News
+American Mineralogist=Am. Mineral.;AMMIAY;8/YR
+American Nurse = Am. Nurse
+American Nurses Association Publications = ANA Publ.
+American Orthoptic Journal = Am. Orthopt. J.
+American Pharmacy = Am. Pharm.
+American Psychologist = Am. Psychol.
+American Rehabilitation = Am. Rehabil.
+American Review of Respiratory Disease = Am. Rev. Respir. Dis.
+American Scientist = Amer. Sci.
+American Sociological Review = Am. Sociol. Rev.
+American Surgeon = Am. Surg.
+American University Law Review = Am. Univ. Law Rev.
+American Zoologist = Am. Zool.
+Amino Acids = Amino Acids
+Amyloid = Amyloid
+Amyotrophic Lateral Sclerosis = Amyotroph. Lateral Scler.
+Amyotrophic Lateral Sclerosis and Other Motor Neuron Disorders = Amyotroph. Lateral Scler. Other Motor Neuron Disord.
+Anadolu Kardiyoloji Dergisi = Anadolu Kardiyol. Derg.
+Anaesthesia = Anaesthesia
+Anaesthesia and Intensive Care = Anaesth. Intensive Care
+Anaesthesia, Resuscitation and Intensive Therapy = Anaesth. Resusc. Intensive Ther.
+Anaesthesiologie und Reanimation = Anaesthesiol. Reanim.
+Anaesthesist = Anaesthesist
+Anais Brasileiros de Dermatologia = An. Bras. Dermatol.
+Anais Brasileiros de Ginecologia = An. Bras. Ginecol.
+Anais Paulistas de Medicina e Cirurgia = An. Paul. Med. Cir.
+Anais da Academia Brasileira de Ciencias = An. Acad. Bras. Cienc.
+Anais da Escola Nacional de Saude Publica e de Medicina Tropical = An. Esc. Nacl. Saude Publica Med. Trop. (Lisb.)
+Anais da Faculdade de Odontologia da Universidade Federal de Pernambuco = An. Fac. Odontol. Univ. Fed. Pernambuco
+Anais de Microbiologia = An. Microbiol. (Rio. J.)
+Anais do Instituto de Higiene e Medicina Tropical = An. Inst. Hig. Med. Trop. (Lisb.)
+Anais do Instituto de Medicina Tropical = An. Inst. Med. Trop. (Lisb.)
+Anal. Chem. Indian Journal of Chemistry, Section A: Inorganic, Bio-inorganic, Physical, Theoretical & Analytical Chemistry=Indian J. Chem., Sect. A: Inorg., Bio-inorg., Phys., Theor.;ICACEC;M
+Anales Espanoles de Odontoestomatologia = An. Esp. Odontoestomatol.
+Anales Espanoles de Pediatria = An. Esp. Pediatr.
+Anales Otorrinolaringologicos Iberoamericanos = An. Otorrinolaringol. Ibero. Am.
+Anales de Cirugia = An. Cir. (Rosario)
+Anales de Medicina = An. Med. (Lima)
+Anales de Medicina Interna = An. Med. Interna
+Anales de Medicina: Cirugia = An. Med. Cir.
+Anales de Medicina: Especialidades = An. Med. Espec.
+Anales de Medicina: Medicina = An. Med. Med.
+Anales de Pediatria = An. Pediatr.
+Anales de la Facultad de Medicina, Universidad Nacional Mayor de San Marcos de Lima = An. Fac. Med. Lima
+Anales de la Facultad de Medicina, Universidad de la Republica, Montevideo, Uruguay = An. Fac. Med. Univ. Repub. Montev. Urug.
+Anales de la Facultad de Odontologia = An. Fac. Odontol.
+Anales de la Real Academia Nacional de Medicina = An. R. Acad. Nac. Med. (Madr.)
+Anales de la Real Academia de Farmacia; Instituto de Espana = An. Real Acad. Farm.
+Anales del Programa Academico de Medicina = An. Programa Acad. Med. (Lima)
+Anales, Instituto de Investigaciones Odontologicas, Universidad del Zulia = An. Inst. Invest. Odontol. (Maracaibo)
+Analyst = Analyst
+Analyst (Cambridge, United Kingdom)=Analyst (Cambridge, U. K.);ANALAO;M
+Analytica Chimica Acta = Anal. Chim. Acta
+Analytical Biochemistry = Anal. Biochem.
+Analytical Cellular Pathology = Anal. Cell. Pathol.
+Analytical Chemistry = Anal. Chem.
+Analytical Letters=Anal. Lett.;ANALBP;15/YR
+Analytical Sciences=Anal. Sci.;ANSCEN;M
+Analytical and Bioanalytical Chemistry = Anal. Bioanal. Chem.
+Analytical and Quantitative Cytology = Anal. Quant. Cytol.
+Analytical and Quantitative Cytology and Histology = Anal. Quant. Cytol. Histol.
+Anasthesie, Intensivtherapie, Notfallmedizin = Anasth. Intensivther. Notf. Med.
+Anasthesiologie, Intensivmedizin, Notfallmedizin, Schmerztherapie = Anasthesiol. Intensivmed. Notfallmed. Schmerzther.
+Anasthesiologische und Intensivmedizinische Praxis = Anasthesiol. Intensivmed. Prax.
+Anatomia Clinica = Anat. Clin.
+Anatomia, Histologia, Embryologia = Anat. Histol. Embryol.
+Anatomic Pathology = Anat. Pathol.
+Anatomical Record = Anat. Rec.
+Anatomical Record. Part A, Discoveries in Molecular, Cellular, and Evolutionary Biology = Anat. Rec. A. Discov. Mol. Cell. Evol. Biol.
+Anatomical Record. Part B, New Anatomist = Anat. Rec. B. New Anat.
+Anatomical Record. Supplement = Anat. Rec. Suppl.
+Anatomical Science International = Anat. Sci. Int.
+Anatomischer Anzeiger = Anat. Anz.
+Anatomy and Embryology = Anat. Embryol. (Berl.)
+Andrologia = Andrologia
+Andrologie = Andrologie
+Anesteziologiia i Reanimatologiia = Anesteziol. Reanimatol.
+Anesthesia Progress = Anesth. Prog.
+Anesthesia and Analgesia = Anesth. Analg.
+Anesthesia and Pain Control in Dentistry = Anesth. Pain Control Dent.
+Anesthesie, Analgesie, Reanimation = Anesth. Analg. (Paris)
+Anesthesiology = Anesthesiology
+Anesthesiology Clinics = Anesthesiol. Clin.
+Anesthesiology Review = Anesthesiol. Rev.
+Angeiologie = Angeiologie
+Angewandte Chemie, International Edition=Angew. Chem., Int. Ed.;ACIEF5;W
+Angewandte Chemie. International Edition in English = Angew. Chem. Int. Ed. Engl.
+Angewandte Parasitologie = Angew. Parasitol.
+Angiogenesis = Angiogenesis
+Angiologia = Angiologia
+Angiologica = Angiologica
+Angiology = Angiology
+Angle Orthodontist = Angle Orthod.
+Anglo-German Medical Review = Anglo. Ger. Med. Rev.
+Animal Behaviour = Anim. Behav.
+Animal Biotechnology = Anim. Biotechnol.
+Animal Blood Groups and Biochemical Genetics = Anim. Blood Groups Biochem. Genet.
+Animal Blood Groups and Biochemical Genetics. Supplement = Anim. Blood Groups Biochem. Genet. Suppl.
+Animal Cognition = Anim. Cogn.
+Animal Genetics = Anim. Genet.
+Animal Health Research Reviews = Anim. Health Res. Rev.
+Animal Learning and Behavior = Anim. Learn. Behav.
+Animal Reproduction Science = Anim. Reprod. Sci.
+Animal Welfare=Anim. Welfare;ANWEEF;4/YR
+Animal Welfare Information Center Bulletin=Anim. Welfare Inf. Cent. Bull.;AWICAW;Q
+Ankara Universitesi Dis Hekimligi Fakultesi Dergisi (Journal of the Dental Faculty of Ankara University) = Ankara Univ. Hekim. Fak. Derg.
+Annalen der Meteorologie = Ann. Meteor.
+Annales Academiae Medicae Stetinensis = Ann. Acad. Med. Stetin.
+Annales Academiae Medicae Stetinensis. Suplement = Ann. Acad. Med. Stetin. Supl.
+Annales Academiae Scientiarum Fennicae. Series A IV, Biologica = Ann. Acad. Sci. Fenn. [Biol.]
+Annales Academiae Scientiarum Fennicae. Series A V, Medica = Ann. Acad. Sci. Fenn. A
+Annales Chirurgiae et Gynaecologiae = Ann. Chir. Gynaecol.
+Annales Chirurgiae et Gynaecologiae Fenniae = Ann. Chir. Gynaecol. Fenn.
+Annales Chirurgiae et Gynaecologiae Fenniae. Supplement = Ann. Chir. Gynaecol. Fenn. Suppl.
+Annales Chirurgiae et Gynaecologiae. Supplementum = Ann. Chir. Gynaecol. Suppl.
+Annales Francaises d'Anesthesie et de Reanimation = Ann. Fr. Anesth. Reanim.
+Annales Immunologiae Hungaricae = Ann. Immunol. Hung.
+Annales Medicales de Nancy = Ann. Med. Nancy
+Annales Medicinae Experimentalis et Biologiae Fenniae = Ann. Med. Exp. Biol. Fenn.
+Annales Medicinae Internae Fenniae = Ann. Med. Intern. Fenn.
+Annales Medico-Psychologiques = Ann. Med. Psychol. (Paris)
+Annales Nestle = Ann. Nestle [Fr.]
+Annales Odonto-Stomatologiques = Ann. Odontostomatol. (Lyon)
+Annales Paediatriae Fenniae = Ann. Paediatr. Fenn.
+Annales Paediatrici (International Review of Pediatrics) = Ann. Paediatr. Int. Rev. Pediatr.
+Annales Pharmaceutiques Francaises = Ann. Pharm. Fr.
+Annales Universitatis Mariae Curie-Sklodowska. Sectio D, Medicina = Ann. Univ. Mariae Curie Sklodowska [Med.]
+Annales Universitatis Saraviensis. Medizin = Ann. Univ. Sarav. [Med.]
+Annales d Endocrinologie = Ann. Endocrinol. (Paris)
+Annales d Histochimie = Ann. Histochim.
+Annales d Immunologie = Ann. Immunol. (Paris)
+Annales d Oculistique = Ann. Ocul. (Paris)
+Annales d Oto-Laryngologie et de Chirurgie Cervico-Faciale = Ann. Otolaryngol. Chir. Cervicofac.
+Annales d Urologie = Ann. Urol. (Paris)
+Annales d'Anatomie Pathologique = Ann. Anat. Pathol. (Paris)
+Annales de Biologie Animale, Biochimie, Biophysique = Ann. Biol. Anim. Biochim. Biophys.
+Annales de Biologie Clinique = Ann. Biol. Clin. (Paris)
+Annales de Cardiologie et d'Angeiologie = Ann. Cardiol. Angeiol. (Paris)
+Annales de Chimie (Cachan, France)=Ann. Chim. (Cachan, Fr.);ANCPAC;6/YR
+Annales de Chirurgie = Ann. Chir.
+Annales de Chirurgie Infantile = Ann. Chir. Infant.
+Annales de Chirurgie Plastique = Ann. Chir. Plast.
+Annales de Chirurgie Plastique et Esthetique = Ann. Chir. Plast. Esthet.
+Annales de Chirurgie Thoracique et Cardio-Vasculaire = Ann. Chir. Thorac. Cardiovasc.
+Annales de Chirurgie de la Main = Ann. Chir. Main
+Annales de Chirurgie de la Main et du Membre Superieur = Ann. Chir. Main Memb. Super.
+Annales de Dermatologie et de Syphiligraphie = Ann. Dermatol. Syphiligr. (Paris)
+Annales de Dermatologie et de Venereologie = Ann. Dermatol. Venereol.
+Annales de Droit International Medical = Ann. Droit Int. Med.
+Annales de Gastroenterologie et d'Hepatologie = Ann. Gastroenterol. Hepatol. (Paris)
+Annales de Genetique = Ann. Genet.
+Annales de Genetique et de Selection Animale = Ann. Genet. Sel. Anim.
+Annales de Geophysique = Ann. Geophys.
+Annales de Medecine Interne = Ann. Med. Interne (Paris)
+Annales de Medecine Legale, Criminologie, Police Scientifique et Toxicologie = Ann. Med. Leg. Criminol. Police Sci. Toxicol.
+Annales de Microbiologie = Ann. Microbiol. (Paris)
+Annales de Parasitologie Humaine et Comparee = Ann. Parasitol. Hum. Comp.
+Annales de Pathologie = Ann. Pathol.
+Annales de Pediatrie = Ann. Pediatr. (Paris)
+Annales de Physique = Ann. Phys.
+Annales de Radiologie = Ann. Radiol. (Paris)
+Annales de Recherches Veterinaires = Ann. Rech. Vet.
+Annales de l Institut Pasteur = Ann. Inst. Pasteur (Paris)
+Annales de l Institut Pasteur de Lille = Ann. Inst. Pasteur Lille
+Annales de l Institut Pasteur. Immunologie = Ann. Inst. Pasteur. Immunol.
+Annales de l Institut Pasteur. Immunology = Ann. Inst. Pasteur. Immunol.
+Annales de l Institut Pasteur. Microbiologie = Ann. Inst. Pasteur. Microbiol.
+Annales de l Institut Pasteur. Microbiology = Ann. Inst. Pasteur. Microbiol.
+Annales de l Institut Pasteur. Virology = Ann. Inst. Pasteur. Virol.
+Annales de l'Anesthesiologie Francaise = Ann. Anesthesiol. Fr.
+Annales de la Nutrition et de l Alimentation = Ann. Nutr. Aliment.
+Annales de la Societe Belge de Medecine Tropicale = Ann. Soc. Belg. Med. Trop.
+Annales de la Societe Royale des Sciences Medicales et Naturelles de Bruxelles = Ann. Soc. R. Sci. Med. Nat. Brux.
+Annali Italiani di Chirurgia = Ann. Ital. Chir.
+Annali Italiani di Medicina Interna = Ann. Ital. Med. Int.
+Annali Sclavo = Ann. Sclavo
+Annali Sclavo. Collana Monografica = Ann. Sclavo. Collana Monogr.
+Annali dell Ospedale Maria Vittoria di Torino = Ann. Osp. Maria Vittoria Torino
+Annali dell'Istituto Carlo Forlanini = Ann. Ist. Carlo Forlanini
+Annali dell'Istituto Superiore di Sanita = Ann. Ist. Super. Sanita
+Annali della Sanita Pubblica = Ann. Sanita Pubblica
+Annali di Chimica (Rome, Italy)=Ann. Chim. (Rome, Italy);ANCRAI;BM
+Annali di Igiene = Ann. Ig.
+Annali di Laringologia, Otologia, Rinologia, Faringologia = Ann. Laringol. Otol. Rinol. Faringol.
+Annali di Medicina Navale = Ann. Med. Nav. (Roma)
+Annali di Ostetricia, Ginecologia, Medicina Perinatale = Ann. Ostet. Ginecol. Med. Perinat.
+Annali di Ottalmologia e Clinica Oculistica = Ann. Ottalmol. Clin. Ocul.
+Annali di Radiologia Diagnostica = Ann. Radiol. Diagn. (Bologna)
+Annali di Stomatologia = Ann. Stomatol. (Roma)
+Annals of Agricultural and Environmental Medicine = Ann. Agric. Environ. Med.
+Annals of Allergy = Ann. Allergy
+Annals of Allergy, Asthma, and Immunology = Ann. Allergy. Asthma. Immunol.
+Annals of Applied Biology = Ann. Appl. Biol.
+Annals of Behavioral Medicine = Ann. Behav. Med.
+Annals of Biomedical Engineering = Ann. Biomed. Eng.
+Annals of Clinical Biochemistry = Ann. Clin. Biochem.
+Annals of Clinical Laboratory Science = Ann. Clin. Lab. Sci.
+Annals of Clinical Psychiatry = Ann. Clin. Psychiatry
+Annals of Clinical Research = Ann. Clin. Res.
+Annals of Clinical and Laboratory Science = Ann. Clin. Lab. Sci.
+Annals of Dentistry = Ann. Dent.
+Annals of Diagnostic Pathology = Ann. Diagn. Pathol.
+Annals of Emergency Medicine = Ann. Emerg. Med.
+Annals of Epidemiology = Ann. Epidemiol.
+Annals of Family Medicine = Ann. Fam. Med.
+Annals of Health Law = Ann. Health Law
+Annals of Hematology = Ann. Hematol.
+Annals of Hepatology = Ann. Hepatol.
+Annals of Human Biology = Ann. Hum. Biol.
+Annals of Human Genetics = Ann. Hum. Genet.
+Annals of Internal Medicine = Ann. Intern. Med.
+Annals of Medicine = Ann. Med.
+Annals of Neurology = Ann. Neurol.
+Annals of Noninvasive Electrocardiology = Ann. Noninvasive Electrocardiol.
+Annals of Nuclear Energy=Ann. Nucl. Energy;ANENDJ;18/YR
+Annals of Nuclear Medicine = Ann. Nucl. Med.
+Annals of Nutrition & Metabolism=Ann. Nutr. Metab.;ANUMDS;BM
+Annals of Nutrition and Metabolism = Ann. Nutr. Metab.
+Annals of Occupational Hygiene = Ann. Occup. Hyg.
+Annals of Oncology = Ann. Oncol.
+Annals of Ophthalmology = Ann. Ophthalmol.
+Annals of Otology, Rhinology and Laryngology = Ann. Otol. Rhinol. Laryngol.
+Annals of Otology, Rhinology, and Laryngology. Supplement = Ann. Otol. Rhinol. Laryngol. Suppl.
+Annals of Periodontology = Ann. Periodontol.
+Annals of Pharmacotherapy = Ann. Pharmacother.
+Annals of Physical Medicine = Ann. Phys. Med.
+Annals of Physics (San Diego, CA, United States)=Ann. Phys. (San Diego, CA, U. S.);APNYA6;M
+Annals of Physiological Anthropology = Ann. Physiol. Anthropol.
+Annals of Plastic Surgery = Ann. Plast. Surg.
+Annals of Surgery = Ann. Surg.
+Annals of Surgical Oncology = Ann. Surg. Oncol.
+Annals of Thoracic Surgery = Ann. Thorac. Surg.
+Annals of Thoracic and Cardiovascular Surgery = Ann. Thorac. Cardiovasc. Surg.
+Annals of Transplantation = Ann. Transplant.
+Annals of Tropical Medicine and Parasitology = Ann. Trop. Med. Parasitol.
+Annals of Tropical Paediatrics = Ann. Trop. Paediatr.
+Annals of Vascular Surgery = Ann. Vasc. Surg.
+Annals of the Academy of Medicine, Singapore = Ann. Acad. Med. Singapore
+Annals of the American Academy of Political and Social Science = Ann. Am. Acad. Pol. Soc. Sci.
+Annals of the Australian College of Dental Surgeons = Ann. Aust. Coll. Dent. Surg.
+Annals of the Entomological Society of America = Ann. Entomol. Soc. Am.
+Annals of the ICRP = Ann. ICRP
+Annals of the Medical Section of the Polish Academy of Sciences = Ann. Med. Sect. Pol. Acad. Sci.
+Annals of the Medical University, Bialystok, Poland = Ann. Med. Univ. Bialyst. Pol.
+Annals of the New York Academy of Dentistry = Annals. N. Y. Acad. Dent.
+Annals of the New York Academy of Sciences = Ann. N. Y. Acad. Sci.
+Annals of the Rheumatic Diseases = Ann. Rheum. Dis.
+Annals of the Royal Australasian College of Dental Surgeons = Ann. R. Australas. Coll. Dent. Surg.
+Annals of the Royal College of Surgeons of England = Ann. R. Coll. Surg. Engl.
+Annee Biologique = Annee Biol.
+Annee Endocrinologique = Annee Endocrinol.
+Annee Psychologique = Annee Psychol.
+Annee Therapeutique et Clinique en Ophtalmologie = Annee Ther. Clin. Ophtalmol.
+Annexins=Annexins;ANNEC2;Q
+Annual Conference on Research in Medical Education = Annu. Conf. Res. Med. Educ.
+Annual Meeting, American Institute of Oral Biology = Annu. Meet. Am. Inst. Oral Biol.
+Annual Report of the Research Institute of Environmental Medicine, Nagoya University = Annu. Rep. Res. Inst. Environ. Med. Nagoya Univ.
+Annual Reports in Medicinal Chemistry=Annu. Rep. Med. Chem.;ARMCBI;A
+Annual Reports on NMR Spectroscopy=Annu. Rep. NMR Spectrosc.;NMRPAJ;IRR
+Annual Reports on the Progress of Chemistry, Section A: Inorganic Chemistry=Annu. Rep. Prog. Chem., Sect. A: Inorg. Chem.;APCCDO;A
+Annual Reports on the Progress of Chemistry, Section B: Organic Chemistry=Annu. Rep. Prog. Chem., Sect. B: Org. Chem.;CACBB4;A
+Annual Reports on the Progress of Chemistry, Section C: Physical Chemistry=Annu. Rep. Prog. Chem., Sect. C: Phys. Chem.;ACPCDW;A
+Annual Review of Biochemistry = Annu. Rev. Biochem.
+Annual Review of Biomedical Engineering = Annu. Rev. Biomed. Eng.
+Annual Review of Biophysics and Bioengineering = Annu. Rev. Biophys. Bioeng.
+Annual Review of Biophysics and Biomolecular Structure = Annu. Rev. Biophys. Biomol. Struct.
+Annual Review of Biophysics and Biophysical Chemistry = Annu. Rev. Biophys. Biophys. Chem.
+Annual Review of Cell Biology = Annu. Rev. Cell Biol.
+Annual Review of Cell and Developmental Biology = Annu. Rev. Cell Dev. Biol.
+Annual Review of Earth and Planetary Sciences=Annu. Rev. Earth Planet. Sci.;AREPCI;A
+Annual Review of Entomology = Annu. Rev. Entomol.
+Annual Review of Fluid Mechanics = Annu. Rev. Fluid Mech.
+Annual Review of Genetics = Annu. Rev. Genet.
+Annual Review of Genomics and Human Genetics = Annu. Rev. Genomics Hum. Genet.
+Annual Review of Gerontology and Geriatrics = Annu. Rev. Gerontol. Geriatr.
+Annual Review of Immunology = Annu. Rev. Immunol.
+Annual Review of Materials Research=Annu. Rev. Mater. Res.;ARMRCU;A
+Annual Review of Medicine = Annu. Rev. Med.
+Annual Review of Microbiology = Annu. Rev. Microbiol.
+Annual Review of Neuroscience = Annu. Rev. Neurosci.
+Annual Review of Nuclear Science = Annu. Rev. Nucl. Sci.
+Annual Review of Nuclear and Particle Science=Annu. Rev. Nucl. Part. Sci.;ARPSDF;A
+Annual Review of Nursing Research = Annu. Rev. Nurs. Res.
+Annual Review of Nutrition = Annu. Rev. Nutr.
+Annual Review of Pharmacology = Annu. Rev. Pharmacol.
+Annual Review of Pharmacology and Toxicology = Annu. Rev. Pharmacol. Toxicol.
+Annual Review of Physical Chemistry = Annu. Rev. Phys. Chem.
+Annual Review of Physiology = Annu. Rev. Physiol.
+Annual Review of Phytopathology=Annu. Rev. Phytopathol.;APPYAG;A
+Annual Review of Plant Biology = Annu. Rev. Plant Biol.
+Annual Review of Psychology = Annu. Rev. Psychol.
+Annual Review of Public Health = Annu. Rev. Public Health
+Annual Review of Rehabilitation = Annu. Rev. Rehabil.
+Annual Review of Sex Research = Annu. Rev. Sex Res.
+Annual Symposium on Nursing Faculty Practice = Annu. Symp. Nurs. Fac. Pract.
+Anthropologischer Anzeiger = Anthropol. Anz.
+Anti-Cancer Agents in Medicinal Chemistry = Anticancer Agents Med. Chem.
+Anti-Cancer Drug Design = Anticancer. Drug Des.
+Anti-Cancer Drugs = Anticancer. Drugs
+Antibiotica = Antibiotica
+Antibiotica. Quaderni = Antibiotica. [Quad.]
+Antibiotics and Chemotherapy = Antibiot. Chemother.
+Antibiotiki = Antibiotiki
+Antibiotiki i Khimioterapiia = Antibiot. Khimioter.
+Antibiotiki i Khimioterapiya=Antibiot. Khimioter.;ANKHEW;M
+Antibiotiki i Meditsinskaia Biotekhnologiia = Antibiot. Med. Biotekhnol.
+Anticancer Research = Anticancer Res.
+Antimicrobial Agents and Chemotherapy = Antimicrob. Agents Chemother.
+Antioquia Medica = Antioquia Med.
+Antioxidants & Redox Signaling=Antioxid. Redox Signaling;ARSIF2;BM
+Antioxidants and Redox Signalling = Antioxid. Redox. Signal.
+Antisense Research and Development = Antisense Res. Dev.
+Antisense and Nucleic Acid Drug Development = Antisense Nucleic Acid Drug Dev.
+Antiviral Chemistry & Chemotherapy=Antiviral Chem. Chemother.;ACCHEH;BM
+Antiviral Chemistry and Chemotherapy = Antivir. Chem. Chemother.
+Antiviral Research = Antiviral Res.
+Antiviral Therapy = Antivir. Ther.
+Antonie van Leeuwenhoek = Antonie van Leeuwenhoek
+Anuario Brasileiro de Odontologia = Anu. Bras. Odontol.
+Anxiety = Anxiety
+Apex = Apex
+Apollonia = Apollonia (Sydney)
+Apoptosis = Apoptosis
+Appetite = Appetite
+Applied Biochemistry and Biotechnology = Appl. Biochem. Biotechnol.
+Applied Biochemistry and Microbiology=Appl. Biochem. Microbiol.;APBMAC;BM
+Applied Bioinformatics = Appl. Bioinformatics
+Applied Cardiology = Appl. Cardiol.
+Applied Cardiopulmonary Pathophysiology = Appl. Cardiopulm. Pathophysiol.
+Applied Catalysis, A: General=Appl. Catal., A;ACAGE4;36/YR
+Applied Catalysis, B: Environmental=Appl. Catal., B;ACBEE3;28/YR
+Applied Clay Science=Appl. Clay Sci.;ACLSER;BM
+Applied Ergonomics = Appl. Ergon.
+Applied Geochemistry=Appl. Geochem.;APPGEY;M
+Applied Health Economics and Health Policy = Appl. Health Econ. Health Policy.
+Applied Human Science = Appl. Human Sci.
+Applied Immunohistochemistry and Molecular Morphology = Appl. Immunohistochem. Mol. Morphol.
+Applied Microbiology = Appl. Microbiol.
+Applied Microbiology and Biotechnology = Appl. Microbiol. Biotechnol.
+Applied Neurophysiology = Appl. Neurophysiol.
+Applied Nursing Research = Appl. Nurs. Res.
+Applied Optics = Appl. Opt.
+Applied Organometallic Chemistry=Appl. Organomet. Chem.;AOCHEX;M
+Applied Parasitology = Appl. Parasitol.
+Applied Pathology = Appl. Pathol.
+Applied Physics A: Materials Science & Processing=Appl. Phys. A: Mater. Sci. Process.;APAMFC;16/YR
+Applied Physics B: Lasers and Optics=Appl. Phys. B: Lasers Opt.;APBOEM;16/YR
+Applied Physics Letters=Appl. Phys. Lett.;APPLAB;W
+Applied Physiology, Nutrition, and Metabolism = Appl. Physiol. Nutr. Metab.
+Applied Psychophysiology and Biofeedback = Appl. Psychophysiol. Biofeedback
+Applied Radiation and Isotopes = Appl. Radiat. Isot.
+Applied Radiology = Appl. Radiol.
+Applied Research in Mental Retardation = Appl. Res. Ment. Retard.
+Applied Spectroscopy=Appl. Spectrosc.;APSPA4;M
+Applied Surface Science=Appl. Surf. Sci.;ASUSEE;19/YR
+Applied Therapeutics = Appl. Ther.
+Applied and Environmental Microbiology = Appl. Environ. Microbiol.
+Applied and Theoretical Electrophoresis = Appl. Theor. Electrophor.
+Aptechnoe Delo = Aptechn. Delo
+Aquacultural Engineering = Aquacult. Eng.
+Aquaculture = Aquaculture
+Aquaculture International = Aquacult. Int.
+Aquaculture Nutrition = Aquacult. Nutr.
+Aquaculture Research = Aquacult. Res.
+Aquatic Toxicology=Aquat. Toxicol.;AQTODG;20/YR
+Arbeiten aus dem Paul-Ehrlich-Institut (Bundesamt fur Sera und Impfstoffe) zu Frankfurt a. M. = Arb. Paul Ehrlich Inst. Bundesamt Sera Impfstoffe Frankf. a. M.
+Arbeiten aus dem Paul-Ehrlich-Institut, dem Georg-Speyer-Haus und dem Ferdinand-Blum-Institut zu Frankfurt a. M. = Arb. Paul Ehrlich Inst. Georg Speyer Haus Ferdinand Blum Inst. Frankf. a. M.
+Archaea = Archaea
+Architectural Record = Archit. Rec.
+Architecture = Architecture
+Archiv der Julius Klaus-Stiftung fur Vererbungsforschung, Sozialanthropologie und Rassenhygiene = Arch. Julius Klaus Stift. Vererbungsforsch. Sozialanthropol. Rassenhyg.
+Archiv der Pharmazie = Arch. Pharm. (Weinheim)
+Archiv der Pharmazie (Weinheim, Germany)=Arch. Pharm. (Weinheim, Ger.);ARPMAS;M
+Archiv der Pharmazie und Berichte der Deutschen Pharmazeutischen Gesellschaft = Arch. Pharm. Ber. Dtsch. Pharm. Ges.
+Archiv fur Dermatologische Forschung = Arch. Dermatol. Forsch.
+Archiv fur Experimentelle Veterinarmedizin = Arch. Exp. Veterinarmed.
+Archiv fur Genetik = Arch. Genet. (Zur.)
+Archiv fur Geschwulstforschung = Arch. Geschwulstforsch.
+Archiv fur Gynakologie = Arch. Gynakol.
+Archiv fur Hygiene und Bakteriologie = Arch. Hyg. Bakteriol.
+Archiv fur Kinderheilkunde = Arch. Kinderheilkd.
+Archiv fur Klinische Medizin = Arch. Klin. Med.
+Archiv fur Klinische und Experimentelle Dermatologie = Arch. Klin. Exp. Dermatol.
+Archiv fur Klinische und Experimentelle Ohren-, Nasen- und Kehlkopfheilkunde = Arch. Klin. Exp. Ohren. Nasen. Kehlkopfheilkd.
+Archiv fur Kreislaufforschung = Arch. Kreislaufforsch.
+Archiv fur Kriminologie = Arch. Kriminol.
+Archiv fur Mikrobiologie = Arch. Mikrobiol.
+Archiv fur Ohren-, Nasen- und Kehlkopfheilkunde = Arch. Ohren Nasen Kehlkopfheilkd.
+Archiv fur Orthopadische und Unfall-Chirurgie = Arch. Orthop. Unfallchir.
+Archiv fur Physikalische Therapie = Arch. Phys. Ther. (Leipz.)
+Archiv fur Psychiatrie und Nervenkrankheiten = Arch. Psychiatr. Nervenkr.
+Archiv fur Psychologie = Arch. Psychol. (Frankf.)
+Archiv fur Tierernahrung = Arch. Tierernahr.
+Archiv fur Toxikologie = Arch. Toxikol.
+Archiv fur die Gesamte Psychologie = Arch. Gesamte Psychol.
+Archiv fur die Gesamte Virusforschung = Arch. Gesamte Virusforsch.
+Archiv für Meteorologie, Geophysik und Bioklimatologie = Arch. Meteor. Geophys. Bioklimatol.
+Archives Belges = Arch. Belg.
+Archives Belges de Dermatologie = Arch. Belg. Dermatol.
+Archives Belges de Dermatologie et de Syphiligraphie = Arch. Belg. Dermatol. Syphiligr.
+Archives Belges de Medecine Sociale, Hygiene, Medecine du Travail et Medecine Legale = Arch. Belg. Med. Soc.
+Archives Francaises de Pediatrie = Arch. Fr. Pediatr.
+Archives Francaises des Maladies de l'Appareil Digestif = Arch. Fr. Mal. App. Dig.
+Archives Internationales de Pharmacodynamie et de Therapie = Arch. Int. Pharmacodyn. Ther.
+Archives Internationales de Physiologie et de Biochimie = Arch. Int. Physiol. Biochim.
+Archives Internationales de Physiologie, de Biochimie et de Biophysique = Arch. Int. Physiol. Biochim. Biophys.
+Archives Italiennes de Biologie = Arch. Ital. Biol.
+Archives Mediterraneennes de Medecine = Arch. Mediterr. Med.
+Archives Roumaines de Pathologie Experimentale et de Microbiologie = Arch. Roum. Pathol. Exp. Microbiol.
+Archives d'Anatomie Microscopique et de Morphologie Experimentale = Arch. Anat. Microsc. Morphol. Exp.
+Archives d'Anatomie Pathologique = Arch. Anat. Pathol. (Paris)
+Archives d'Anatomie et de Cytologie Pathologiques = Arch. Anat. Cytol. Pathol.
+Archives d'Anatomie, d'Histologie et d'Embryologie = Arch. Anat. Histol. Embryol.
+Archives d'Ophtalmologie = Arch. Ophtalmol. (Paris)
+Archives d'Ophtalmologie et Revue Generale d'Ophtalmologie = Arch. Ophtalmol. Rev. Gen. Ophtalmol.
+Archives de Biologie = Arch. Biol. (Liege)
+Archives de Medecine Generale et Tropicale = Arch. Med. Gen. Trop.
+Archives de Pediatrie = Arch. Pediatr.
+Archives de l'Institut Pasteur d Algerie = Arch. Inst. Pasteur Alger.
+Archives de l'Institut Pasteur de Madagascar = Arch. Inst. Pasteur Madagascar
+Archives de l'Institut Pasteur de Tunis = Arch. Inst. Pasteur Tunis
+Archives des Maladies Professionnelles de Medecine du Travail et de Securite Sociale = Arch. Mal. Prof.
+Archives des Maladies de l'Appareil Digestif et des Maladies de la Nutrition = Arch. Mal. Appar. Dig. Mal. Nutr.
+Archives des Maladies du Coeur et des Vaisseaux = Arch. Mal. Coeur Vaiss.
+Archives des Sciences Physiologiques = Arch. Sci. Physiol. (Paris)
+Archives for Dermatological Research (Archiv fur Dermatologische Forschung) = Arch. Dermatol. Res.
+Archives of Andrology = Arch. Androl.
+Archives of Animal Nutrition = Arch. Anim. Nutr.
+Archives of Biochemistry and Biophysics = Arch. Biochem. Biophys.
+Archives of Dermatological Research = Arch. Dermatol. Res.
+Archives of Dermatology = Arch. Dermatol.
+Archives of Disease in Childhood = Arch. Dis. Child.
+Archives of Disease in Childhood. Fetal and Neonatal Edition = Arch. Dis. Child. Fetal Neonatal Ed.
+Archives of Emergency Medicine = Arch. Emerg. Med.
+Archives of Environmental Contamination and Toxicology = Arch. Environ. Contam. Toxicol.
+Archives of Environmental Health = Arch. Environ. Health
+Archives of Environmental and Occupational Health = Arch. Environ. Occup. Health
+Archives of Facial Plastic Surgery = Arch. Facial Plast. Surg.
+Archives of Family Medicine = Arch. Fam. Med.
+Archives of General Psychiatry = Arch. Gen. Psychiatry
+Archives of Gerontology and Geriatrics = Arch. Gerontol. Geriatr.
+Archives of Gerontology and Geriatrics. Supplement = Arch. Gerontol. Geriatr. Suppl.
+Archives of Gynecology = Arch. Gynecol.
+Archives of Gynecology and Obstetrics = Arch. Gynecol. Obstet.
+Archives of Histology and Cytology = Arch. Histol. Cytol.
+Archives of Insect Biochemistry and Physiology = Arch. Insect Biochem. Physiol.
+Archives of Interamerican Rheumatology = Arch. Interam. Rheumatol.
+Archives of Internal Medicine = Arch. Intern. Med.
+Archives of Medical Research = Arch. Med. Res.
+Archives of Microbiology = Arch. Microbiol.
+Archives of Neurology = Arch. Neurol.
+Archives of Ophthalmology = Arch. Ophthalmol.
+Archives of Oral Biology = Arch. Oral Biol.
+Archives of Orthopaedic and Trauma Surgery = Arch. Orthop. Trauma Surg.
+Archives of Orthopaedic and Traumatic Surgery = Arch. Orthop. Trauma. Surg.
+Archives of Oto-Rhino-Laryngology = Arch. Otorhinolaryngol.
+Archives of Oto-Rhino-Laryngology. Supplement = Arch. Otorhinolaryngol. Suppl.
+Archives of Otolaryngology = Arch. Otolaryngol.
+Archives of Otolaryngology -- Head and Neck Surgery = Arch. Otolaryngol. Head Neck Surg.
+Archives of Pathology = Arch. Pathol.
+Archives of Pathology and Laboratory Medicine = Arch. Pathol. Lab. Med.
+Archives of Pediatrics and Adolescent Medicine = Arch. Pediatr. Adolesc. Med.
+Archives of Pharmacal Research = Arch. Pharm. Res.
+Archives of Physical Medicine and Rehabilitation = Arch. Phys. Med. Rehabil.
+Archives of Physiology and Biochemistry = Arch. Physiol. Biochem.
+Archives of Psychiatric Nursing = Arch. Psychiatr. Nurs.
+Archives of Sexual Behavior = Arch. Sex. Behav.
+Archives of Surgery = Arch. Surg.
+Archives of Toxicology = Arch. Toxicol.
+Archives of Toxicology. Supplement = Arch. Toxicol. Suppl.
+Archives of Virology = Arch. Virol.
+Archives of Virology. Supplementum = Arch. Virol. Suppl.
+Archivii Italiani di Laringologia = Arch. Ital. Laringol.
+Archivio "E. Maragliano" di Patologia e Clinica = Arch. Maragliano Patol. Clin.
+Archivio Italiano delle Malattie dell Apparato Digerente = Arch. Ital. Mal. Appar. Dig.
+Archivio Italiano di Anatomia e Istologia Patologica = Arch. Ital. Anat. Istol. Patol.
+Archivio Italiano di Anatomia e di Embriologia = Arch. Ital. Anat. Embriol.
+Archivio Italiano di Chirurgia = Arch. Ital. Chir.
+Archivio Italiano di Dermatologia, Venereologia e Sessuologia = Arch. Ital. Dermatol. Venereol. Sessuol.
+Archivio Italiano di Otologia, Rinologia e Laringologia = Arch. Ital. Otol. Rinol. Laringol.
+Archivio Italiano di Otologia, Rinologia e Laringologia. Supplemento = Arch. Ital. Otol. Rinol. Laringol. Suppl.
+Archivio Italiano di Otologia, Rinologia, Laringologia e Patologia Cervico-Facciale = Arch. Ital. Otol. Rinol. Laringol. Patol. Cervicofacc.
+Archivio Italiano di Otologia, Rinologia, Laringologia e Patologia Cervico-Facciale. Supplemento = Arch. Ital. Otol. Rinol. Laringol. Patol. Cervicofacc. Suppl.
+Archivio Italiano di Patologia e Clinica dei Tumori = Arch. Ital. Patol. Clin. Tumori
+Archivio Italiano di Pediatria e Puericoltura = Arch. Ital. Pediatr. Pueric.
+Archivio Italiano di Scienze Farmacologiche = Arch. Ital. Sci. Farmacol.
+Archivio Italiano di Scienze Mediche Tropicali e di Parassitologia = Arch. Ital. Sci. Med. Trop. Parassitol.
+Archivio Italiano di Urologia = Arch. Ital. Urol.
+Archivio Italiano di Urologia e Nefrologia = Arch. Ital. Urol. Nefrol.
+Archivio Italiano di Urologia, Andrologia = Arch. Ital. Urol. Androl.
+Archivio Italiano di Urologia, Nefrologia, Andrologia = Arch. Ital. Urol. Nefrol. Androl.
+Archivio Monaldi per la Tisiologia e le Malattie dell Apparato Respiratorio = Arch. Monaldi
+Archivio Monaldi per le Malattie del Torace = Arch. Monaldi Mal. Torace
+Archivio Putti di Chirurgia degli Organi di Movimento = Arch. Putti Chir. Organi Mov.
+Archivio Stomatologico = Arch. Stomatol. (Napoli)
+Archivio Veterinario Italiano = Arch. Vet. Ital.
+Archivio de Vecchi per l'Anatomia Patologica e la Medicina Clinica = Arch. de Vecchi Anat. Patol.
+Archivio di Chirurgia Toracica e Cardiovascolare = Arch. Chir. Torac. Cardiovasc.
+Archivio di Fisiologia = Arch. Fisiol.
+Archivio di Medicina Interna = Arch. Med. Interna
+Archivio di Ortopedia = Arch. Ortop.
+Archivio di Ostetricia e Ginecologia = Arch. Ostet. Ginecol.
+Archivio di Patologia e Clinica Medica = Arch. Patol. Clin. Med.
+Archivio di Psicologia, Neurologia e Psichiatria = Arch. Psicol. Neurol. Psichiatr.
+Archivio di Scienze Biologiche = Arch. Sci. Biol. (Bologna)
+Archivio di Tisiologia e delle Malattie dell Apparato Respiratorio = Arch. Tisiol. Mal. Appar. Respir.
+Archivio per le Scienze Mediche = Arch. Sci. Med. (Torino)
+Archivo Espanol de Morfologia = Arch. Esp. Morfol.
+Archivos Argentinos de Dermatologia = Arch. Argent. Dermatol.
+Archivos Argentinos de Pediatria = Arch. Argent. Pediatr.
+Archivos Espanoles de Urologia = Arch. Esp. Urol.
+Archivos Latinoamericanos de Nutricion = Arch. Latinoam. Nutr.
+Archivos Medicos Panamenos = Arch. Med. Panamenos
+Archivos de Biologia Andina = Arch. Biol. Andina
+Archivos de Biologia y Medicina Experimentales = Arch. Biol. Med. Exp. (Santiago)
+Archivos de Bronconeumologia = Arch. Bronconeumol.
+Archivos de Cardiologia de Mexico = Arch. Cardiol. Mex.
+Archivos de Enfermedades del Corazon y Vasos = Arch. Enferm. Coraz. Vasos
+Archivos de Farmacologia y Toxicologia = Arch. Farmacol. Toxicol.
+Archivos de Histologia Normal y Patologica. = Arch. Histol. Norm. Patol.
+Archivos de Investigacion Medica = Arch. Invest. Med. (Mex.)
+Archivos de Neurobiologia = Arch. Neurobiol. (Madr.)
+Archivos de Odonto Estomatologia = Arch. Odonto Estomatol.
+Archivos de Oftalmologia de Buenos Aires = Arch. Oftalmol. B. Aires
+Archivos de Pediatria del Uruguay = Arch. Pediatr. Urug.
+Archivos de la Fundacion Roux-Ocefa = Arch. Fund. Roux. Ocefa
+Archivos del Colegio Medico de El Salvador = Arch. Col. Med. El Salv.
+Archivos del Instituto de Biologia Andina = Arch. Inst. Biol. Andina
+Archivos del Instituto de Cardiologia de Mexico = Arch. Inst. Cardiol. Mex.
+Archivos del Instituto de Farmacologia Experimental = Arch. Inst. Farmacol. Exp. (Madr.)
+Archivum Chirurgicum Neerlandicum = Arch. Chir. Neerl.
+Archivum Combustionis=Arch. Combust.;ACOMEO;Q
+Archivum Histologicum Japonicum = Arch. Histol. Jpn.
+Archivum Immunologiae et Therapiae Experimentalis = Arch. Immunol. Ther. Exp. (Warsz.)
+Archivum Veterinarium Polonicum = Arch. Vet. Pol.
+Archiwum Historii Medycyny = Arch. Hist. Med. (Warsz.)
+Archiwum Historii i Filozofii Medycyny = Arch. Hist. Filoz. Med.
+Arcispedale S. Anna di Ferrara = Arcisp. S. Anna Ferrara
+Arctic Medical Research = Arctic Med. Res.
+Arerugi (Japanese Journal of Allergology) = Arerugi
+Arhiv za Higijenu Rada i Toksikologiju = Arh. Hig. Rada Toksikol.
+Arizona Dental Journal = Ariz. Dent. J.
+Arizona Medicine = Ariz. Med.
+Arizona Nurse = Ariz. Nurse
+Ark-Light Newsletter = Ark. Light Newsl.
+Arkansas Dental Journal = Ark. Dent. J.
+Arkansas Dentistry = Ark. Dent.
+Arkhiv Anatomii, Gistologii i Embriologii = Arkh. Anat. Gistol. Embriol.
+Arkhiv Patologii = Arkh. Patol.
+Arquivo de Patologia = Arq. Patol.
+Arquivo: Orgao da Sociedade Brasileira de Implantologia Bucal = Arquivo
+Arquivos Brasileiros de Cardiologia = Arq. Bras. Cardiol.
+Arquivos Brasileiros de Endocrinologia e Metabologia = Arq. Bras. Endocrinol. Metabol.
+Arquivos Brasileiros de Medicina = Arq. Bras. Med.
+Arquivos Brasileiros de Oftalmologia = Arq. Bras. Oftalmol.
+Arquivos da Faculdade de Higiene e Saude Publica da Universidade de Sao Paulo = Arq. Fac. Hig. Saude Publica Univ. Sao Paulo
+Arquivos de Cirurgia Clinica e Experimental = Arq. Cir. Clin. Exp.
+Arquivos de Gastroenterologia = Arq. Gastroenterol.
+Arquivos de Higiene e Saude Publica = Arq. Hig. Saude Publica
+Arquivos de Neuro-Psiquiatria = Arq. Neuropsiquiatr.
+Arquivos do Centro de Estudos da Faculdade de Odontologia da U.F.M.G. = Arq. Cent. Estud. Fac. Odontol. UFMG. (Belo. Horiz.)
+Arquivos do Centro de Estudos, Curso de Odontologia Universidade Federal de Minas Gerais = Arq. Cent. Estud. Curso Odontol. Univ. Fed. Minas Gerais
+Arquivos do Instituto Biologico = Arq. Inst. Biol. (Sao Paulo)
+Ars Curandi em Odontologia = Ars Curandi Odontol.
+Arteriosclerosis = Arteriosclerosis
+Arteriosclerosis and Thrombosis = Arterioscler. Thromb.
+Arteriosclerosis, Thrombosis, and Vascular Biology = Arterioscler. Thromb. Vasc. Biol.
+Artery = Artery
+Arthritis Care and Research = Arthritis Care Res.
+Arthritis Research = Arthritis Res.
+Arthritis Research and Therapy = Arthritis Res. Ther.
+Arthritis and Rheumatism = Arthritis Rheum.
+Arthroscopy = Arthroscopy
+Articulator = Articulator (Columb.)
+Artificial Cells, Blood Substitutes, and Immobilization Biotechnology = Artif. Cells. Blood Substit. Immobil. Biotechnol.
+Artificial Intelligence in Medicine = Artif. Intell. Med.
+Artificial Life = Artif. Life
+Artificial Limbs = Artif. Limbs
+Artificial Organs = Artif. Organs
+Arukoru Kenkyu-to Yakubutsu Ison (Japanese Journal of Alcohol Studies and Drug Dependence) = Arukoru Kenkyuto Yakubutsu Ison
+Arzneimittel Forschung=Arzneim. Forsch.;ARZNAD;M
+Arzneimittel-Forschung = Arzneimittelforschung.
+Arztliche Forschung = Arztl. Forsch.
+Arztliche Jugendkunde = Arztl. Jugendkd.
+Asepsis = Asepsis
+Asia-Oceania Journal of Obstetrics and Gynaecology = Asia. Oceania J. Obstet. Gynaecol.
+Asia-Pacific Journal of Public Health = Asia. Pac. J. Public Health
+Asian Journal of Aesthetic Dentistry = Asian J. Aesthet. Dent.
+Asian Journal of Andrology = Asian J. Androl.
+Asian Journal of Chemistry=Asian J. Chem.;AJCHEW;Q
+Asian Journal of Infectious Diseases = Asian J. Infect. Dis.
+Asian Pacific Journal of Allergy and Immunology = Asian Pac. J. Allergy Immunol.
+Asian Pacific Journal of Cancer Prevention = Asian Pac. J. Cancer Prev.
+Aspen Emphysema Conference = Aspen Emphysema Conf.
+Aspen's Advisor for Nurse Executives = Aspens Advis. Nurse Exec.
+Assay and Drug Development Technologies = Assay Drug Dev. Technol.
+Assertive Nurse = Assertive Nurse
+Assessment = Assessment
+Assistive Technology = Assist. Technol.
+Association Management = Assoc. Manage.
+Association and Society Manager = Assoc. Soc. Manager
+Asthetische Medizin = Asthet. Med. (Berl.)
+Astrobiology = Astrobiology
+Atencion Primaria = Aten. Primaria
+Ateneo Parmense. Acta Bio-Medica = Ateneo Parmense. Acta Biomed.
+Ateneo Parmense. Sezione I, Acta Bio-Medica = Ateneo Parmense. [1]
+Atherosclerosis = Atherosclerosis
+Atherosclerosis (Amsterdam, Netherlands)=Atherosclerosis (Amsterdam, Neth.);ATHSBL;M
+Atherosclerosis. Supplements = Atheroscler. Suppl.
+Atlas de Radiologie Clinique de la Presse Medicale = Atlas Radiol. Clin. Presse Med.
+Atlas of the Oral and Maxillofacial Surgery Clinics of North America = Atlas Oral Maxillofac. Surg. Clin. North Am.
+Atmosphere: Atmosphere—Ocean = Atmos.—Ocean
+Atmospheric Chemistry and Physics=Atmos. Chem. Phys.;ACPTCE;12/YR
+Atmospheric Environment = Atmos. Environ.
+Atmospheric Research = Atmos. Res.
+Atmósphera = Atmósphera
+Atomic Energy (New York, NY, United States)=At. Energy (N. Y., NY, U. S.);AENYEZ;M
+Atomic Energy Review = At. Energy Rev.
+Atomic Spectroscopy=At. Spectrosc.;ASPND7;BM
+Attachment and Human Development = Attach. Hum. Dev.
+Atti dell'Accademia dei Fisiocritici in Siena = Atti Accad. Fisiocrit. Siena
+Atti della Accademia Medica Lombarda = Atti Accad. Med. Lomb.
+Atti della Accademia dei Fisiocritici in Siena. Sezione Medico-Fisica = Atti Accad. Fisiocrit. Siena. [Med. Fis.]
+Atti della Societa Italiana di Cardiologia = Atti Soc. Ital. Cardiol.
+Atti e Memorie della Accademia di Storia dell'Arte Sanitaria = Atti Mem. Accad. Stor. Arte Sanit.
+Attualita Dentale = Attual. Dent.
+Attualita di Ostetricia e Ginecologia = Attual. Ostet. Ginecol.
+Audiology = Audiology
+Audiology and Neuro-Otology = Audiol. Neurootol.
+Auris, Nasus, Larynx = Auris. Nasus. Larynx
+Australasian Annals of Medicine = Australas. Ann. Med.
+Australasian Biotechnology = Australas. Biotechnol.
+Australasian Journal of Dermatology = Australas. J. Dermatol.
+Australasian Nurses Journal = Australas. Nurses J.
+Australasian Physical and Engineering Sciences in Medicine = Australas. Phys. Eng. Sci. Med.
+Australasian Radiology = Australas. Radiol.
+Australian Clinical Review = Aust. Clin. Rev.
+Australian Critical Care = Aust. Crit. Care
+Australian Dental Journal = Aust. Dent. J.
+Australian Dental Practice = Aust. Dent. Pract.
+Australian Family Physician = Aust. Fam. Physician
+Australian Health Review = Aust. Health Rev.
+Australian Hospital = Aust. Hosp.
+Australian Journal of Advanced Nursing = Aust. J. Adv. Nurs.
+Australian Journal of Agricultural Research = Aust. J. Agric. Res.
+Australian Journal of Biological Sciences = Aust. J. Biol. Sci.
+Australian Journal of Biotechnology = Aust. J. Biotechnol.
+Australian Journal of Chemistry=Aust. J. Chem.;AJCHAS;M
+Australian Journal of Experimental Biology and Medical Science = Aust. J. Exp. Biol. Med. Sci.
+Australian Journal of Ophthalmology = Aust. J. Ophthalmol.
+Australian Journal of Public Health = Aust. J. Public Health
+Australian Journal of Rural Health = Aust. J. Rural Health
+Australian Journal of Science and Medicine in Sport = Aust. J. Sci. Med. Sport
+Australian Journal of Zoology = Aust. J. Zool.
+Australian Medical Record Journal = Aust. Med. Rec. J.
+Australian Meteorological Magazine = Aust. Meteor. Mag.
+Australian Nurses' Journal = Aust. Nurses J.
+Australian Nursing Journal = Aust. Nurs. J.
+Australian Orthodontic Journal = Aust. Orthod. J.
+Australian Paediatric Journal = Aust. Paediatr. J.
+Australian Prosthodontic Journal = Aust. Prosthodont. J.
+Australian Prosthodontic Society Bulletin = Aust. Prosthodont. Soc. Bull.
+Australian Society of Prosthodontists Bulletin = Aust. Soc. Prosthodontists Bull.
+Australian Veterinary Journal = Aust. Vet. J.
+Australian and New Zealand Journal of Medicine = Aust. N. Z. J. Med.
+Australian and New Zealand Journal of Mental Health Nursing = Aust. N. Z. J. Ment. Health Nurs.
+Australian and New Zealand Journal of Obstetrics and Gynaecology = Aust. N. Z. J. Obstet. Gynaecol.
+Australian and New Zealand Journal of Obstetrics and Gynaecology. Supplement = Aust. N. Z. J. Obstet. Gynaecol. Suppl.
+Australian and New Zealand Journal of Ophthalmology = Aust. N. Z. J. Ophthalmol.
+Australian and New Zealand Journal of Psychiatry = Aust. N. Z. J. Psychiatry
+Australian and New Zealand Journal of Public Health = Aust. N. Z. J. Public Health
+Australian and New Zealand Journal of Surgery = Aust. N. Z. J. Surg.
+Autism = Autism
+Autoimmunity = Autoimmunity
+Autoimmunity Reviews = Autoimmun. Rev.
+Autonomic & Autacoid Pharmacology=Auton. Autacoid Pharmacol.;AAPUC3;Q
+Autonomic Neuroscience = Auton. Neurosci.
+Autonomic and Autacoid Pharmacology = Auton. Autacoid Pharmacol.
+Autophagy = Autophagy
+Auxiliaire = Auxiliaire
+Avances en Odontoestomatologia = Av. Odontoestomatol.
+Avances en Periodoncia = Av. Periodoncia
+Aviakosmicheskaia i Ekologicheskaia Meditsina = Aviakosm. Ekolog. Med.
+Avian Diseases = Avian Dis.
+Aviation Space and Environmental Medicine = Aviat. Space Environ. Med.
+Axone = Axone
+Azerbaidzhanskii Khimicheskii Zhurnal=Azerb. Khim. Zh.;AZKZAU;Q
+B-ENT = B-ENT
+BJOG = BJOG
+BJR Supplement = BJR Suppl.
+BJU International = BJU Int.
+BMC Biology = BMC Biol.
+BMC Biotechnology = BMC Biotechnol.
+BMC Cancer = BMC Cancer
+BMC Cardiovascular Disorders = BMC Cardiovasc. Disord.
+BMC Cell Biology = BMC Cell Biol.
+BMC Clinical Pharmacology = BMC Clin. Pharmacol.
+BMC Complementary and Alternative Medicine = BMC Complement. Altern. Med.
+BMC Dermatology = BMC Dermatol.
+BMC Developmental Biology = BMC Dev. Biol.
+BMC Ecology = BMC Ecol.
+BMC Evolutionary Biology = BMC Evol. Biol.
+BMC Gastroenterology = BMC Gastroenterol.
+BMC Geriatrics = BMC Geriatr.
+BMC Health Services Research = BMC Health Serv. Res.
+BMC Infectious Diseases = BMC Infect. Dis.
+BMC Medical Education = BMC Med. Educ.
+BMC Medical Informatics and Decision Making = BMC Med. Inform. Decis. Mak.
+BMC Medical Research Methodology = BMC Med. Res. Methodol.
+BMC Medicine = BMC Med.
+BMC Microbiology = BMC Microbiol.
+BMC Neurology = BMC Neurol.
+BMC Ophthalmology = BMC Ophthalmol.
+BMC Pediatrics = BMC Pediatr.
+BMC Pharmacology = BMC Pharmacol.
+BMC Physiology = BMC Physiol.
+BMC Plant Biology = BMC Plant Biol.
+BMC Psychiatry = BMC Psychiatry
+BMC Public Health = BMC Public Health
+BMC Pulmonary Medicine = BMC Pulm. Med.
+BMC Structural Biology = BMC Struct. Biol.
+BMC Surgery = BMC Surg.
+BMC Urology = BMC Urol.
+BMJ: British Medical Journal = BMJ
+BMQ: The Boston Medical Quarterly = BMQ.
+BNWL Reports = BNWL Rep.
+BSCS Pamphlets = BSCS Pam.
+BTTA Review = BTTA Rev.
+BZB: Bayerisches Zahnarzteblatt, mit Mitteilungen d. Kassenzahnarztlichen Vereinigung Bayerns = BZB Bayer. Zahnarztebl. Mitt. Kassenzahnarztl. Ver. Bayerns
+Bacteriologia, Virusologia, Parazitologia, Epidemiologia = Bacteriol. Virusol. Parazitol. Epidemiol.
+Bacteriological Reviews = Bacteriol. Rev.
+Bailliere's Best Practice and Research. Clinical Endocrinology and Metabolism = Baillieres Best Pract. Res. Clin. Endocrinol. Metab.
+Bailliere's Best Practice and Research. Clinical Gastroenterology = Baillieres Best Pract. Res. Clin. Gastroenterol.
+Bailliere's Best Practice and Research. Clinical Haematology = Baillieres Best Pract. Res. Clin. Haematol.
+Bailliere's Best Practice and Research. Clinical Obstetrics and Gynaecology = Baillieres Best Pract. Res. Clin. Obstet. Gynaecol.
+Bailliere's Best Practice and Research. Clinical Rheumatology = Baillieres Best Pract. Res. Clin. Rheumatol.
+Bailliere's Clinical Endocrinology and Metabolism = Baillieres Clin. Endocrinol. Metab.
+Bailliere's Clinical Gastroenterology = Baillieres Clin. Gastroenterol.
+Bailliere's Clinical Haematology = Baillieres Clin. Haematol.
+Bailliere's Clinical Neurology = Baillieres Clin. Neurol.
+Bailliere's Clinical Obstetrics and Gynaecology = Baillieres Clin. Obstet. Gynaecol.
+Bailliere's Clinical Rheumatology = Baillieres Clin. Rheumatol.
+Balance = Balance
+Bangladesh Medical Research Council Bulletin = Bangladesh Med. Res. Counc. Bull.
+Barbados Nursing Journal = Barbados Nurs. J.
+Barron's = Barrons
+Basal Facts = Basal Facts
+Basic & Clinical Pharmacology & Toxicology=Basic Clin. Pharmacol. Toxicol.;BCPTBO;M
+Basic Life Sciences = Basic Life Sci.
+Basic Research in Cardiology = Basic Res. Cardiol.
+Basic and Applied Histochemistry = Basic Appl. Histochem.
+Basic and Clinical Pharmacology and Toxicology = Basic Clin. Pharmacol. Toxicol.
+Baylor Dental Journal = Baylor Dent. J.
+Baylor Nursing Educator = Baylor Nurs. Educ.
+Bedside Nurse = Bedside Nurse
+Begg Journal of Orthodontic Theory and Treatment = Begg J. Orthod. Theory Treat.
+Beginnings = Beginnings
+Behavior Genetics = Behav. Genet.
+Behavior Modification = Behav. Modif.
+Behavior Research Methods = Behav. Res. Methods
+Behavioral Biology = Behav. Biol.
+Behavioral Healthcare Tomorrow = Behav. Healthc. Tomorrow
+Behavioral Medicine = Behav. Med.
+Behavioral Neuropsychiatry = Behav. Neuropsychiatry
+Behavioral Neuroscience = Behav. Neurosci.
+Behavioral Science = Behav. Sci.
+Behavioral Sciences and the Law = Behav. Sci. Law
+Behavioral Sleep Medicine = Behav. Sleep. Med.
+Behavioral and Brain Sciences = Behav. Brain Sci.
+Behavioral and Cognitive Neuroscience Reviews = Behav. Cogn. Neurosci. Rev.
+Behavioral and Neural Biology = Behav. Neural Biol.
+Behaviour = Behaviour
+Behaviour Research and Therapy = Behav. Res. Ther.
+Behavioural Brain Research = Behav. Brain Res.
+Behavioural Pharmacology = Behav. Pharmacol.
+Behring Institute Mitteilungen = Behring Inst. Mitt.
+Beijing Da Xue Xue Bao. Yi Xue Ban (Journal of Peking University. Health Sciences) = Beijing Da Xue Xue Bao
+Beilstein Journal of Organic Chemistry=Beilstein J. Org. Chem.;BJOCBH;IRR
+Beitraege zur Physik der Atmosphaere = Beitr. Phys. Atmos.
+Beitrage zu Infusionstherapie und Klinische Ernahrung = Beitr. Infusionther. Klin. Ernahr.
+Beitrage zur Gerichtlichen Medizin = Beitr. Gerichtl. Med.
+Beitrage zur Hygiene und Epidemiologie = Beitr. Hyg. Epidemiol.
+Beitrage zur Infusionstherapie = Beitr. Infusionsther.
+Beitrage zur Infusionstherapie und Transfusionsmedizin = Beitr. Infusionsther. Transfusionsmed.
+Beitrage zur Klinik und Erforschung der Tuberkulose und der Lungenkrankheiten = Beitr. Klin. Erforsch. Tuberk. Lungenkr.
+Beitrage zur Klinischen Neurologie und Psychiatrie = Beitr. Klin. Neurol. Psychiatr.
+Beitrage zur Krebsforschung = Beitr. Krebsforsch.
+Beitrage zur Neurochirurgie = Beitr. Neurochir.
+Beitrage zur Orthopadie und Traumatologie = Beitr. Orthop. Traumatol.
+Beitrage zur Pathologie = Beitr. Pathol.
+Beitrage zur Pathologischen Anatomie und zur Allgemeinen Pathologie = Beitr. Pathol. Anat.
+Beitrage zur Rheumatologie = Beitr. Rheumatol.
+Beitrage zur Sexualforschung = Beitr. Sexualforsch.
+Beitrage zur Silikose-Forschung = Beitr. Silikoseforsch.
+Beitrage zur Silikose-Forschung. Pneumokoniose = Beitr. Silikoseforsch. Pneumokoniose
+Beitrage zur Tropischen Landwirtschaft und Veterinarmedizin = Beitr. Trop. Landwirtsch. Veterinarmed.
+Belgisch Tijdschrift voor Geneeskunde = Belg. Tijdschr. Geneesk.
+Bender's Health Care Law Monthly = Benders Health Care Law Mon.
+Benefits Quarterly = Benefits Q.
+Bericht uber die Zusammenkunft der Deutschen Ophthalmologischen Gesellschaft = Ber. Zusammenkunft Dtsch. Ophthalmol. Ges.
+Berichte aus der Bonner Universitatsklinik und Poliklinik fur Mund-, Zahn- und Kieferkrankheiten = Ber. Bonn. Univ. Poliklin. Mund. Zahn. Kieferkr.
+Berita Jururawat = Berita Jururawat
+Berliner und Munchener Tierarztliche Wochenschrift = Berl. Munch. Tierarztl. Wochenschr.
+Berufs-Dermatosen = Berufsdermatosen.
+Best Practice and Research. Clinical Anaesthesiology = Best Pract. Res. Clin. Anaesthesiol.
+Best Practice and Research. Clinical Endocrinology and Metabolism = Best Pract. Res. Clin. Endocrinol. Metab.
+Best Practice and Research. Clinical Gastroenterology = Best Pract. Res. Clin. Gastroenterol.
+Best Practice and Research. Clinical Haematology = Best Pract. Res. Clin. Haematol.
+Best Practice and Research. Clinical Obstetrics and Gynaecology = Best Pract. Res. Clin. Obstet. Gynaecol.
+Best Practice and Research. Clinical Rheumatology = Best Pract. Res. Clin. Rheumatol.
+Best Practices and Benchmarking in Healthcare = Best Pract. Benchmarking Healthc.
+Best's Review. Life/Health Insurance Edition = Bests Rev. Life. Health Insur. Ed.
+Bibliotek for Laeger = Bibl. Laeger
+Bibliotheca Anatomica = Bibl. Anat.
+Bibliotheca Cardiologica = Bibl. Cardiol.
+Bibliotheca Gastroenterologica = Bibl. Gastroenterol.
+Bibliotheca Gynaecologica = Bibl. Gynaecol.
+Bibliotheca Haematologica = Bibl. Haematol.
+Bibliotheca Microbiologica = Bibl. Microbiol.
+Bibliotheca Nutritio et Dieta = Bibl. Nutr. Dieta
+Bibliotheca Ophthalmologica = Bibl. Ophthalmol.
+Bibliotheca Paediatrica = Bibl. Paediatr.
+Bibliotheca Psychiatrica = Bibl. Psychiatr.
+Bibliotheca Psychiatrica et Neurologica = Bibl. Psychiatr. Neurol.
+Bibliotheca Radiologica = Bibl. Radiol.
+Bibliotheca Tuberculosea = Bibl. Tuberc.
+Biken Journal = Biken J.
+Bildgebung = Bildgebung
+Bilten Mednarodne Federacije Zobotehnikov (Bulletin of the International Federation of Dental Technicians) = Bilt. Mednar. Fed. Zob. Teh.
+Bilten Udruzenja Ortodonata Jugoslavije = Bilt. Udruz. Ortodonata Jugosl.
+Bilten za Hematologiju i Transfuziju = Bilt. Hematol. Transfuz.
+Binocular Vision and Strabismus Quarterly = Binocul. Vis. Strabismus Q.
+Bio-Medical Materials and Engineering = Biomed. Mater. Eng.
+Bio/Medical Instrumentation = Biomed. Instrum.
+Bio/Technology = Biotechnology. (N. Y.)
+BioDrugs = BioDrugs
+BioFactors=BioFactors;BIFAEU;12/YR
+BioMetals=BioMetals;BOMEEH;BM
+BioTechniques=BioTechniques;BTNQDO;M
+Biocatalysis and Biotransformation=Biocatal. Biotransform.;BOBOEQ;BM
+Biocell = Biocell
+Biochemical Genetics = Biochem. Genet.
+Biochemical Journal = Biochem. J.
+Biochemical Medicine = Biochem. Med.
+Biochemical Medicine and Metabolic Biology = Biochem. Med. Metab. Biol.
+Biochemical Pharmacology = Biochem. Pharmacol.
+Biochemical Society Symposia = Biochem. Soc. Symp.
+Biochemical Society Transactions = Biochem. Soc. Trans.
+Biochemical Systematics and Ecology=Biochem. Syst. Ecol.;BSECBU;M
+Biochemical and Biophysical Research Communications = Biochem. Biophys. Res. Commun.
+Biochemical and Molecular Medicine = Biochem. Mol. Med.
+Biochemische Zeitschrift = Biochem. Z.
+Biochemistry = Biochemistry (Mosc.)
+Biochemistry (Moscow)=Biochemistry (Moscow);BIORAK;M
+Biochemistry International = Biochem. Int.
+Biochemistry and Cell Biology = Biochem. Cell Biol.
+Biochemistry and Experimental Biology = Biochem. Exp. Biol.
+Biochemistry and Molecular Biology Education=Biochem. Mol. Biol. Educ.;BMBECE;BM
+Biochemistry and Molecular Biology International = Biochem. Mol. Biol. Int.
+Biochimica et Biophysica Acta = Biochim. Biophys. Acta
+Biochimica et Biophysica Acta, Bioenergetics=Biochim. Biophys. Acta, Bioenerg.;BBBEB4;15/YR
+Biochimica et Biophysica Acta, Biomembranes=Biochim. Biophys. Acta, Biomembr.;BBBMBS;20/YR
+Biochimica et Biophysica Acta, Biophysics Including Photosynthesis=Biochim. Biophys. Acta, Biophys. Incl. Photosynth.;BBABER;
+Biochimica et Biophysica Acta, Enzymology=Biochim. Biophys. Acta, Enzymol.;BBEZAD;
+Biochimica et Biophysica Acta, Enzymology and Biological Oxidation=Biochim. Biophys. Acta, Enzymol. Biol. Oxid.;BBAECY;
+Biochimica et Biophysica Acta, Gene Structure and Expression=Biochim. Biophys. Acta, Gene Struct. Expression;BBGSD5;18/YR
+Biochimica et Biophysica Acta, General Subjects=Biochim. Biophys. Acta, Gen. Subj.;BBGSB3;18/YR
+Biochimica et Biophysica Acta, Lipids and Lipid Metabolism=Biochim. Biophys. Acta, Lipids Lipid Metab.;BBLLA6;18/YR
+Biochimica et Biophysica Acta, Molecular Basis of Disease=Biochim. Biophys. Acta, Mol. Basis Dis.;BBADEX;9/YR
+Biochimica et Biophysica Acta, Molecular Cell Research=Biochim. Biophys. Acta, Mol. Cell Res.;BBAMCO;15/YR
+Biochimica et Biophysica Acta, Molecular and Cell Biology of Lipids=Biochim. Biophys. Acta, Mol. Cell Biol. Lipids;BBMLFG;18/YR
+Biochimica et Biophysica Acta, Mucoproteins and Mucopolysaccharides=Biochim. Biophys. Acta, Mucoproteins Mucopolysaccharides;BBAMFR;
+Biochimica et Biophysica Acta, Protein Structure=Biochim. Biophys. Acta, Protein Struct.;BBPTBH;
+Biochimica et Biophysica Acta, Protein Structure and Molecular Enzymology=Biochim. Biophys. Acta, Protein Struct. Mol. Enzymol.;BBAEDZ;16/YR
+Biochimica et Biophysica Acta, Proteins and Proteomics=Biochim. Biophys. Acta, Proteins Proteomics;BBAPBW;16/YR
+Biochimica et Biophysica Acta, Reviews on Bioenergetics=Biochim. Biophys. Acta, Rev. Bioenerg.;BRBECF;
+Biochimica et Biophysica Acta, Reviews on Biomembranes=Biochim. Biophys. Acta, Rev. Biomembr.;BRBMC5;3/YR
+Biochimica et Biophysica Acta, Reviews on Cancer=Biochim. Biophys. Acta, Rev. Cancer;BBACEU;4/YR
+Biochimica et Biophysica Acta, Specialized Section on Biophysical Subjects=Biochim. Biophys. Acta, Spec. Sect. Biophys. Subj.;BBASEA;
+Biochimica et Biophysica Acta, Specialized Section on Enzymological Subjects=Biochim. Biophys. Acta, Spec. Sect. Enzymol. Subj.;BBASD9;
+Biochimica et Biophysica Acta, Specialized Section on Lipids and Related Subjects=Biochim. Biophys. Acta, Spec. Sect. Lipids Relat. Subj.;BBASC8;
+Biochimie = Biochimie
+Bioconjugate Chemistry = Bioconjug. Chem.
+Biodegradation = Biodegradation
+Biodynamica = Biodynamica
+Bioelectrochemistry = Bioelectrochemistry
+Bioelectrochemistry and Bioenergetics = Bioelectrochem. Bioenerg.
+Bioelectromagnetics = Bioelectromagnetics
+Bioessays = Bioessays
+Bioethics Quarterly = Bioethics Q.
+Biofactors = Biofactors
+Biofeedback and Self Regulation = Biofeedback Self Regul.
+Biofizika = Biofizika
+Biogenic Amines=Biog. Amines;BIAME7;6/YR
+Biogerontology = Biogerontology
+Bioinformatics = Bioinformatics
+Bioinorganic Chemistry = Bioinorg. Chem.
+Bioinorganic Chemistry and Applications=Bioinorg. Chem. Appl.;BCAIAH;4/YR
+Biokhimiia = Biokhimiia
+Biologia = Biologia (Bratisl.)
+Biologia Neonatorum = Biol. Neonat.
+Biologica = Biologica (Santiago).
+Biologica Latina = Biol. Lat.
+Biological & Pharmaceutical Bulletin=Biol. Pharm. Bull.;BPBLEO;M
+Biological Bulletin = Biol. Bull.
+Biological Chemistry = Biol. Chem.
+Biological Chemistry Hoppe-Seyler = Biol. Chem. Hoppe. Seyler
+Biological Cybernetics = Biol. Cybern.
+Biological Journal of the Linnean Society of London = Biol. J. Linn. Soc. Lond.
+Biological Mass Spectrometry = Biol. Mass Spectrom.
+Biological Psychiatry = Biol. Psychiatry
+Biological Psychology = Biol. Psychol.
+Biological Research = Biol. Res.
+Biological Research for Nursing = Biol. Res. Nurs.
+Biological Research in Pregnancy and Perinatology = Biol. Res. Pregnancy Perinatol.
+Biological Reviews of the Cambridge Philosophical Society = Biol. Rev. Camb. Philos. Soc.
+Biological Signals = Biol. Signals
+Biological Signals and Receptors = Biol. Signals Recept.
+Biological Structures and Morphogenesis = Biol. Struct. Morphog.
+Biological Trace Element Research = Biol. Trace Elem. Res.
+Biological and Pharmaceutical Bulletin = Biol. Pharm. Bull.
+Biologicals = Biologicals
+Biologicheskie Membrany=Biol. Membr.;BIMEE9;BM
+Biologicheskie Nauki = Biol. Nauki
+Biologie Cellulaire = Biol. Cell.
+Biologie Medicale = Biol. Med. (Paris)
+Biologie et Gastro-Enterologie = Biol. Gastroenterol. (Paris)
+Biology Bulletin of the Academy of Sciences of the USSR = Biol. Bull. Acad. Sci. USSR
+Biology of Blood and Marrow Transplantation = Biol. Blood Marrow Transplant.
+Biology of Metals = Biol. Met.
+Biology of Reproduction = Biol. Reprod.
+Biology of the Cell = Biol. Cell
+Biology of the Neonate = Biol. Neonate
+Biomacromolecules = Biomacromolecules
+Biomarkers = Biomarkers
+Biomaterials = Biomaterials
+Biomaterials, Artificial Cells, and Artificial Organs = Biomater. Artif. Cells. Artif. Organs
+Biomaterials, Artificial Cells, and Immobilization Biotechnology = Biomater. Artif. Cells. Immobilization Biotechnol.
+Biomaterials, Medical Devices and Artificial Organs = Biomater. Med. Devices Artif. Organs
+Biomechanics and Modeling in Mechanobiology = Biomech. Model. Mechanobiol.
+Biomedica Biochimica Acta = Biomed. Biochim. Acta
+Biomedical Chromatography = Biomed. Chromatogr.
+Biomedical Communications = Biomed. Commun.
+Biomedical Engineering = Biomed. Eng.
+Biomedical Engineering Online = Biomed. Eng. Online
+Biomedical Instrumentation and Technology = Biomed. Instrum. Technol.
+Biomedical Mass Spectrometry = Biomed. Mass Spectrom.
+Biomedical Peptides, Proteins and Nucleic Acids = Biomed. Pept. Proteins Nucleic Acids
+Biomedical Research=Biomed. Res.;BRESD5;BM
+Biomedical Science = Biomed. Sci.
+Biomedical Science and Technology = Biomed. Sci. Technol.
+Biomedical Sciences Instrumentation = Biomed. Sci. Instrum.
+Biomedical and Environmental Mass Spectrometry = Biomed. Environ. Mass Spectrom.
+Biomedical and Environmental Sciences = Biomed. Environ. Sci.
+Biomedicine = Biomedicine
+Biomedicine and Pharmacotherapy = Biomed. Pharmacother.
+Biomeditsinskaya Khimiya=Biomed. Khim.;BKIHA8;BM
+Biomedizinische Technik (Biomedical Engineering) = Biomed. Tech. (Berl)
+Biomembranes = Biomembranes
+Biometals = Biometals
+Biometrics = Biometrics
+Biometrika = Biometrika
+Biometrische Zeitschrift = Biom. Z.
+Biomolecular Engineering = Biomol. Eng.
+Bioorganic & Medicinal Chemistry=Bioorg. Med. Chem.;BMECEP;SM
+Bioorganic & Medicinal Chemistry Letters=Bioorg. Med. Chem. Lett.;BMCLE8;SM
+Bioorganic Chemistry=Bioorg. Chem.;BOCMBM;BM
+Bioorganic and Medicinal Chemistry = Bioorg. Med. Chem.
+Bioorganic and Medicinal Chemistry Letters = Bioorg. Med. Chem. Lett.
+Bioorganicheskaia Khimiia = Bioorg. Khim.
+Biopharmaceutics & Drug Disposition=Biopharm. Drug Dispos.;BDDID8;9/YR
+Biopharmaceutics and Drug Disposition = Biopharm. Drug Dispos.
+Biophysical Chemistry = Biophys. Chem.
+Biophysical Journal = Biophys. J.
+Biophysics of Structure and Mechanism = Biophys. Struct. Mech.
+Biophysik = Biophysik
+Biopolymers = Biopolymers
+Bioprocess Technology = Bioprocess Technol.
+Bioprocess and Biosystems Engineering = Bioprocess Biosyst. Eng.
+Bioresource Technology=Bioresour. Technol.;BIRTEB;18/YR
+Biorheology = Biorheology
+Biorheology. Supplement = Biorheology. Suppl.
+Bioscience = Bioscience
+Bioscience Reports = Biosci. Rep.
+Bioscience, Biotechnology, and Biochemistry = Biosci. Biotechnol. Biochem.
+Biosecurity and Bioterrorism = Biosecur. Bioterror.
+Biosensors = Biosensors
+Biosensors & Bioelectronics=Biosens. Bioelectron.;BBIOE4;M
+Biosensors and Bioelectronics = Biosens. Bioelectron.
+Bioseparation = Bioseparation
+Biospectroscopy = Biospectroscopy
+Biosystems = Biosystems
+Biotechnic and Histochemistry = Biotech. Histochem.
+Biotechniques = Biotechniques
+Biotechnology = Biotechnology
+Biotechnology Annual Review = Biotechnol. Annu. Rev.
+Biotechnology Journal = Biotechnol. J.
+Biotechnology Letters=Biotechnol. Lett.;BILED3;SM
+Biotechnology Progress = Biotechnol. Prog.
+Biotechnology Therapeutics = Biotechnol. Ther.
+Biotechnology and Applied Biochemistry = Biotechnol. Appl. Biochem.
+Biotechnology and Bioengineering = Biotechnol. Bioeng.
+Biotechnology and Bioengineering Symposium = Biotechnol. Bioeng. Symp.
+Biotechnology and Bioprocess Engineering=Biotechnol. Bioprocess Eng.;BBEIAU;BM
+Biotechnology and Genetic Engineering Reviews = Biotechnol. Genet. Eng. Rev.
+Biotelemetry = Biotelemetry
+Biotelemetry and Patient Monitoring = Biotelem. Patient Monit.
+Biotherapy = Biotherapy
+Bipolar Disorders = Bipolar Disord.
+Birth = Birth
+Birth Defects Original Article Series = Birth Defects Orig. Artic. Ser.
+Birth Defects Research, Part A: Clinical and Molecular Teratology=Birth Defects Res., Part A;BDRPBT;M
+Birth Defects Research, Part B: Developmental and Reproductive Toxicology=Birth Defects Res., Part B;BDRPCU;BM
+Birth Defects Research, Part C: Embryo Today--Reviews=Birth Defects Res., Part C;BDRPDV;Q
+Birth Defects Research. Part A, Clinical and Molecular Teratology = Birt. Defects Res. A. Clin. Mol. Teratol.
+Birth Defects Research. Part B, Developmental and Reproductive Toxicology = Birth Defects Res. B. Dev. Reprod. Toxicol.
+Birth Defects Research. Part C, Embryo Today = Birth Defects Res. C. Embryo Today
+Birth Gazette = Birth Gaz.
+Bitamin=Bitamin;BTMNA7;M
+Biuletyn Instytutu Medycyny Morskiej w Gdansku = Biul. Inst. Med. Morsk. Gdansk.
+Biulleten Eksperimentalnoi Biologii i Meditsiny = Biull. Eksp. Biol. Med.
+Biulleten Vsesoiuznogo Kardiologicheskogo Nauchnogo Tsentra AMN SSSR = Biull. Vsesoiuznogo Kardiol. Nauchn. Tsentra AMN SSSR
+Blatter fur Zahnheilkunde = Bl. Zahnheilkd.
+Blood = Blood
+Blood Cells = Blood Cells
+Blood Cells, Molecules, and Diseases = Blood Cells. Mol. Dis.
+Blood Coagulation and Fibrinolysis = Blood Coagul. Fibrinolysis
+Blood Pressure = Blood Press.
+Blood Pressure Monitoring = Blood Press. Monit.
+Blood Pressure. Supplement = Blood Press. Suppl.
+Blood Purification = Blood Purif.
+Blood Reviews = Blood Rev.
+Blood Vessels = Blood Vessels
+Blue Cross Association Research Series = Blue Cross Assoc. Res. Ser.
+Blut = Blut
+Blutalkohol = Blutalkohol
+Boletim da Divisao Nacional de Dermatologia Sanitaria = Bol. Div. Nac. Dermatol. Sanit.
+Boletim da Equipe de Odontologia Sanitaria = Bol. Equipe Odontol. Sanit.
+Boletim da Faculdade de Farmacia e Odontologia de Ribeirao Preto = Bol. Fac. Farm. Odontol. Ribeirao Preto
+Boletim de Dentistica Operatoria = Bol. Dent. Oper.
+Boletim de Materias Dentarios = Bol. Mat. Dent.
+Boletim do Instituto de Puericultura e Pediatria Martagao Gesteira = Bol. Inst. Pueric. Martagao Gesteira
+Boletim do Sanatorio Sao Lucas = Bol. Sanat. Sao Lucas
+Boletim do Servico de Odontologia Sanitaria da Secretaria da Saude do Rio Grande do Sul = Bol. Serv. Odontol. Sanit. (Porto Alegre)
+Boletim, Faculdade de Odontologia de Piracicaba = Bol. Fac. Odontol. Piracicaba
+Boletin Chileno de Parasitologia = Bol. Chil. Parasitol.
+Boletin Dental Uruguayo = Bol. Dent. Urug.
+Boletin Medico del Hospital Infantil de Mexico = Bol. Med. Hosp. Infant. Mex.
+Boletin Odontologico = Bol. Odontol. (B. Aires)
+Boletin Odontologico Mexicano = Bol. Odontol. Mex.
+Boletin de Estudios Medicos y Biologicos = Bol. Estud. Med. Biol.
+Boletin de Informacion Dental = Bol. Inf. Dent. (Madr.)
+Boletin de Informacion, Ilustre Colegio Oficial de Odontologos y Estomatologos, 2a Region, Cataluna = Bol. Inf. Col. Odontol. Estomatol. (Barc.)
+Boletin de Odontologia = Bol. Odontol. (Bogota)
+Boletin de Protesis = Bol. Protes.
+Boletin de la AAON = Bol. AAON
+Boletin de la Asociacion Venezolana de Enfermeras Profesionales = Bol. Asoc. Venez. Enferm. Prof.
+Boletin de la Direccion General de Odontologia = Bol. Dir. Gen. Odontol. (Santa Fe)
+Boletin de la Oficina Sanitaria Panamericana = Bol. Oficina Sanit. Panam.
+Boletin de la Sociedad Dental de Guatemala = Bol. Soc. Dent. Guatem.
+Boletin de la Sociedad Estomatologica Argentina = Bol. Soc. Estomatol. Argent.
+Boletin del Circulo Argentina de Odontologia = Bol. Circ. Argent. Odontol.
+Boletin del Instituto de Estudios Medicos y Biologicos, Universidad Nacional Autonoma de Mexico = Bol. Inst. Estud. Med. Biol. Univ. Nac. Auton. Mex.
+Boletin, Asociacion Medica de Puerto Rico = Bol. Asoc. Med. P. R.
+Boletin, Colegio de Profesionales de la Enfermeria de Puerto Rico = Bol. Col. Prof. Enferm. P. R.
+Boletines y Trabajos, Sociedad de Cirugia de Buenos Aires = Bol. Trab. Soc. Cir. B. Aires
+Bollettino Chimico Farmaceutico = Boll. Chim. Farm.
+Bollettino Metallografico = Boll. Metallogr.
+Bollettino d'Informazioni della Consociazione Nazionale Infermiere Professionali e Assistenti Sanitaire Visitatrici = Boll. Inf. Consoc. Naz. (Rome)
+Bollettino d'Oculistica = Boll. Ocul.
+Bollettino dell Istituto Sieroterapico Milanese = Boll. Ist. Sieroter. Milan.
+Bollettino della Societa Italiana di Cardiologia = Boll. Soc. Ital. Cardiol.
+Bollettino delle Malattie dell Orecchio, della Gola, del Naso = Boll. Mal. Orecch. Gola. Naso
+Bollettino, Societa Italiana Biologia Sperimentale = Boll. Soc. Ital. Biol. Sper.
+Bollettino, Societa Medico Chirurgica Cremona = Boll. Soc. Med. Chir. Cremona
+Bone = Bone
+Bone Marrow Transplantation = Bone Marrow Transplant.
+Bone and Mineral = Bone Miner.
+Book Supplement to the Journal of Child Psychology and Psychiatry = Book Suppl. J. Child Psychol. Psychiatr.
+Bopuxue Zazhi=Bopuxue Zazhi;BOZAE2;Q
+Bordeaux Chirurgical = Bord. Chir.
+Bordeaux Medical = Bord. Med.
+Borden's Review of Nutrition Research = Bordens Rev. Nutr. Res.
+Bornetandlaegen = Bornetandlaegen
+Boundary-Layer Meteorology = Bound.-Layer Meteor.
+Brachytherapy = Brachytherapy
+Brain = Brain
+Brain Cell Biology = Brain Cell Biol.
+Brain Injury = Brain Inj.
+Brain Pathology = Brain Pathol.
+Brain Research = Brain Res.
+Brain Research Bulletin = Brain Res. Bull.
+Brain Research. Brain Research Protocols = Brain Res. Brain Res. Protoc.
+Brain Research. Brain Research Reviews = Brain Res. Brain Res. Rev.
+Brain Research. Cognitive Brain Research = Brain Res. Cogn. Brain Res.
+Brain Research. Developmental Brain Research = Brain Res. Dev. Brain Res.
+Brain Research. Molecular Brain Research = Brain Res. Mol. Brain Res.
+Brain Structure and Function = Brain Struct. Funct.
+Brain Topography = Brain Topogr.
+Brain Tumor Pathology = Brain Tumor Pathol.
+Brain and Cognition = Brain Cogn.
+Brain and Development = Brain Dev.
+Brain and Language = Brain Lang.
+Brain, Behavior and Evolution = Brain. Behav. Evol.
+Brain, Behavior and Immunity = Brain. Behav. Immun.
+Bratislavske Lekarske Listy = Bratisl. Lek. Listy
+Brazilian Dental Journal = Braz. Dent. J.
+Brazilian Journal of Biology = Braz. J. Biol.
+Brazilian Journal of Infectious Diseases = Braz. J. Infect. Dis.
+Brazilian Journal of Medical and Biological Research = Braz. J. Med. Biol. Res.
+Breast Cancer Research = Breast Cancer Res.
+Breast Cancer Research and Treatment = Breast Cancer Res. Treat.
+Breastfeeding Review = Breastfeed. Rev.
+Briefings in Bioinformatics = Brief. Bioinform.
+Briefings in Functional Genomics and Proteomics = Brief. Funct. Genomic. Proteomic.
+Bristol Medico-Chirurgical Journal = Bristol Med. Chir. J.
+British Dental Journal = Br. Dent. J.
+British Dental Nurses' Journal = Br. Dent. Nurs. J.
+British Dental Surgery Assistant = Br. Dent. Surg. Assist.
+British Heart Journal = Br. Heart J.
+British Homoeopathic Journal = Br. Homeopath. J.
+British Journal of Addiction = Br. J. Addict.
+British Journal of Addiction to Alcohol and Other Drugs = Br. J. Addict. Alcohol Other Drugs
+British Journal of Anaesthesia = Br. J. Anaesth.
+British Journal of Audiology = Br. J. Audiol.
+British Journal of Audiology. Supplement = Br. J. Audiol. Suppl.
+British Journal of Biomedical Science = Br. J. Biomed. Sci.
+British Journal of Cancer = Br. J. Cancer
+British Journal of Cancer. Supplement = Br. J. Cancer. Suppl.
+British Journal of Clinical Pharmacology = Br. J. Clin. Pharmacol.
+British Journal of Clinical Practice = Br. J. Clin. Pract.
+British Journal of Clinical Practice. Symposium Supplement = Br. J. Clin. Pract. Symp. Suppl.
+British Journal of Clinical Psychology = Br. J. Clin. Psychol.
+British Journal of Dermatology = Br. J. Dermatol.
+British Journal of Diseases of the Chest = Br. J. Dis. Chest
+British Journal of Disorders of Communication = Br. J. Disord. Commun.
+British Journal of Educational Psychology = Br. J. Educ. Psychol.
+British Journal of Experimental Pathology = Br. J. Exp. Pathol.
+British Journal of Family Planning = Br. J. Fam. Plann.
+British Journal of General Practice = Br. J. Gen. Pract.
+British Journal of Haematology = Br. J. Haematol.
+British Journal of Hospital Medicine = Br. J. Hosp. Med.
+British Journal of Industrial Medicine = Br. J. Ind. Med.
+British Journal of Mathematical and Statistical Psychology = Br. J. Math. Stat. Psychol.
+British Journal of Medical Education = Br. J. Med. Educ.
+British Journal of Medical Hypnotism = Br. J. Med. Hypn.
+British Journal of Medical Psychology = Br. J. Med. Psychol.
+British Journal of Neurosurgery = Br. J. Neurosurg.
+British Journal of Nursing = Br. J. Nurs.
+British Journal of Nutrition = Br. J. Nutr.
+British Journal of Obstetrics and Gynaecology = Br. J. Obstet. Gynaecol.
+British Journal of Ophthalmology = Br. J. Ophthalmol.
+British Journal of Oral Surgery = Br. J. Oral Surg.
+British Journal of Oral and Maxillofacial Surgery = Br. J. Oral Maxillofac. Surg.
+British Journal of Orthodontics = Br. J. Orthod.
+British Journal of Pharmacology = Br. J. Pharmacol.
+British Journal of Physiological Optics = Br. J. Physiol. Opt.
+British Journal of Plastic Surgery = Br. J. Plast. Surg.
+British Journal of Preventive and Social Medicine = Br. J. Prev. Soc. Med.
+British Journal of Psychiatry = Br. J. Psychiatry
+British Journal of Psychiatry. Supplement = Br. J. Psychiatry. Suppl.
+British Journal of Psychology = Br. J. Psychol.
+British Journal of Radiology = Br. J. Radiol.
+British Journal of Radiology. Supplement = Br. J. Radiol. Suppl.
+British Journal of Rheumatology = Br. J. Rheumatol.
+British Journal of Sexual Medicine = Br. J. Sex. Med.
+British Journal of Social Psychology = Br. J. Soc. Psychol.
+British Journal of Social and Clinical Psychology = Br. J. Soc. Clin. Psychol.
+British Journal of Sociology = Br. J. Sociol.
+British Journal of Sports Medicine = Br. J. Sports Med.
+British Journal of Surgery = Br. J. Surg.
+British Journal of Theatre Nursing = Br. J. Theatre Nurs.
+British Journal of Urology = Br. J. Urol.
+British Journal of Venereal Diseases = Br. J. Vener. Dis.
+British Medical Bulletin = Br. Med. Bull.
+British Medical Journal = Br. Med. J.
+British Medical Journal (Clinical Research Edition) = Br. Med. J. (Clin. Res. Ed.)
+British Poultry Science = Br. Poult. Sci.
+British Veterinary Journal = Br. Vet. J.
+Bronches = Bronches
+Broncho-Pneumologie = Bronchopneumologie.
+Brookhaven Symposia in Biology = Brookhaven Symp. Biol.
+Brookings Bulletin = Brookings Bull.
+Brookings Review = Brookings Rev.
+Bruns' Beitrage fur Klinische Chirurgie = Bruns Beitr. Klin. Chir.
+Bruxelles Medical = Brux. Med.
+Bucherei des Augenarztes = Buch. Augenarzt.
+Building Operating Management = Build. Oper. Manage.
+Building Systems Design = Build. Syst. Des.
+Bulgarian Chemical Communications=Bulg. Chem. Commun.;BCHCE4;Q
+Bulletin Biologique de la France et de la Belgique = Bull. Biol. Fr. Belg.
+Bulletin Europeen de Physiopathologie Respiratoire = Bull. Eur. Physiopathol. Respir.
+Bulletin Mensuel, Societe de Medecine Militaire Francaise = Bull. Mens. Soc. Med. Mil. Fr.
+Bulletin Officiel, Conseil National, Ordre National des Chirurgiens-Dentistes = Ordre Natl. Chir. Dent. Cons. Natl. Bull. Off.
+Bulletin de Physio-Pathologie Respiratoire = Bull. Physiopathol. Respir. (Nancy)
+Bulletin de l'Academie Dentaire = Bull. Acad. Dent. (Paris)
+Bulletin de l'Academie Nationale de Chirurgie Dentaire = Bull. Acad. Natl. Chir. Dent.
+Bulletin de l'Academie Nationale de Medecine = Bull. Acad. Natl. Med.
+Bulletin de l'Academie Polonaise des Sciences. Serie des Sciences Biologiques = Bull. Acad. Pol. Sci. [Biol.]
+Bulletin de l'Academie Royale de Medecine de Belgique = Bull. Acad. R. Med. Belg.
+Bulletin de l'Academie Veterinaire de France = Bull. Acad. Vet. Fr.
+Bulletin de l'Academie de Chirurgie Dentaire = Bull. Acad. Chir. Dent. (Paris)
+Bulletin de l'Association Francaise pour l'Etude du Cancer = Bull. Assoc. Fr. Etud. Cancer
+Bulletin de l'Association des Anatomistes = Bull. Assoc. Anat. (Nancy)
+Bulletin de l'Institut National de la Sante et de la Recherche Medicale = Bull. Inst. Natl. Sante Rech. Med.
+Bulletin de l'Office International des Epizooties = Bull. Off. Int. Epizoot.
+Bulletin de la Federation des Societes de Gynecologie et d Obstetrique de Langue Francaise = Bull. Fed. Soc. Gynecol. Obstet. Lang. Fr.
+Bulletin de la Societe Belge d'Ophtalmologie = Bull. Soc. Belge Ophtalmol.
+Bulletin de la Societe Chimique de France = Bull. Soc. Chim. Fr.
+Bulletin de la Societe Francaise de Dermatologie et de Syphiligraphie = Bull. Soc. Fr. Dermatol. Syphiligr.
+Bulletin de la Societe Internationale de Chirurgie = Bull. Soc. Int. Chir.
+Bulletin de la Societe Medicale d'Afrique Noire de Langue Francaise = Bull. Soc. Med. Afr. Noire Lang. Fr.
+Bulletin de la Societe Royale Belge de Gynecologie et d'Obstetrique = Bull. Soc. R. Belge Gynecol. Obstet.
+Bulletin de la Societe de Chimie Biologique = Bull. Soc. Chim. Biol. (Paris)
+Bulletin de la Societe de Pathologie Exotique = Bull. Soc. Pathol. Exot.
+Bulletin de la Societe de Pathologie Exotique et de Ses Filiales = Bull. Soc. Pathol. Exot. Filiales
+Bulletin de la Societe des Sciences Medicales du Grand-Duche de Luxembourg = Bull. Soc. Sci. Med. Grand. Duche Luxemb.
+Bulletin der Schweizerischen Akademie der Medizinischen Wissenschaften = Bull. Schweiz. Akad. Med. Wiss.
+Bulletin des Infirmieres Catholiques du Canada = Bull. Infirm. Cathol. Can.
+Bulletin des Societes d'Ophtalmologie de France = Bull. Soc. Ophtalmol. Fr.
+Bulletin du Cancer = Bull. Cancer (Paris)
+Bulletin du Cancer. Radiotherapie = Bull. Cancer. Radiother.
+Bulletin du Groupement Europeen pour la Recherche Scientifique en Stomatologie et Odontologie = Bull. Group. Eur. Rech. Sci. Stomatol. Odontol.
+Bulletin du Groupement International pour la Recherche Scientifique en Stomatologie = Bull. Group. Int. Rech. Sci. Stomatol.
+Bulletin du Groupement International pour la Recherche Scientifique en Stomatologie et Odontologie = Bull. Group. Int. Rech. Sci. Stomatol. Odontol.
+Bulletin et Memoires de l'Academie Royale de Medecine de Belgique = Bull. Mem. Acad. R. Med. Belg.
+Bulletin et Memoires de la Societe des Chirurgiens de Paris = Bull. Mem. Soc. Chir. Paris
+Bulletin of Academy of Dentistry for the Handicapped = Bull. Acad. Dent. Handicap.
+Bulletin of Animal Health and Production in Africa = Bull. Anim. Health Prod. Afr.
+Bulletin of Clinical Neurosciences = Bull. Clin. Neurosci.
+Bulletin of Electrochemistry=Bull. Electrochem.;BUELE6;M
+Bulletin of Endemic Diseases = Bull. Endem. Dis. (Baghdad)
+Bulletin of Entomological Research = Bull. Entomol. Res.
+Bulletin of Environmental Contamination and Toxicology = Bull. Environ. Contam. Toxicol.
+Bulletin of Epizootic Diseases of Africa = Bull. Epizoot. Dis. Afr.
+Bulletin of Experimental Biology and Medicine = Bull. Exp. Biol. Med.
+Bulletin of Hygiene = Bull. Hyg. (Lond.)
+Bulletin of Materials Science=Bull. Mater. Sci.;BUMSDW;BM
+Bulletin of Mathematical Biology = Bull. Math. Biol.
+Bulletin of Mathematical Biophysics = Bull. Math. Biophys.
+Bulletin of Pharmaceutical Research Institute = Bull. Pharm. Res. Inst.
+Bulletin of Polish Medical Science and History = Bull. Pol. Med. Sci. Hist.
+Bulletin of Prosthetics Research = Bull. Prosthet. Res.
+Bulletin of Tokyo Dental College = Bull. Tokyo Dent. Coll.
+Bulletin of Tokyo Medical and Dental University = Bull. Tokyo Med. Dent. Univ.
+Bulletin of the 8th District Dental Society = Bull. Eighth. Dist. Dent. Soc.
+Bulletin of the Academy of General Dentistry = Bull. Acad. Gen. Dent.
+Bulletin of the Akron Dental Society = Bull. Akron Dent. Soc.
+Bulletin of the American Academy of Psychiatry and the Law = Bull. Am. Acad. Psychiatry Law
+Bulletin of the American College of Nurse-Midwifery = Bull. Am. Coll. Nurse. Midwifery
+Bulletin of the American College of Nurse-Midwives = Bull. Am. Coll. Nurse. Midwives
+Bulletin of the American College of Physicians = Bull. Am. Coll. Physicians
+Bulletin of the American College of Surgeons = Bull. Am. Coll. Surg.
+Bulletin of the American Meteorological Society = Bull. Amer. Meteor. Soc.
+Bulletin of the American Society for Information Science = Bull. Am. Soc. Inf. Sci.
+Bulletin of the Bergen County Dental Society = Bull. Bergen Cty. Dent. Soc.
+Bulletin of the Bronx County Dental Society = Bull. Bronx Cty. Dent. Soc.
+Bulletin of the Calcutta School of Tropical Medicine = Bull. Calcutta Sch. Trop. Med.
+Bulletin of the Chemical Society of Japan = Bull. Chem. Soc. Jpn.
+Bulletin of the Chest Disease Research Institute, Kyoto University = Bull. Chest Dis. Res. Inst. Kyoto Univ.
+Bulletin of the Cincinnati Dental Society = Bull. Cincinnati Dent. Soc.
+Bulletin of the Cleveland Dental Society = Bull. Cleve. Dent. Soc.
+Bulletin of the Contra Costa Dental Society = Bull. Contra Costa Dent. Soc.
+Bulletin of the Dental Guidance Council for Cerebral Palsy = Bull. Dent. Guid. Counc. Cereb. Palsy
+Bulletin of the Eleventh District Dental Society = Bull. Eleventh Dist. Dent. Soc.
+Bulletin of the Fifth District Dental Society = Bull. Fifth Dist. Dent. Soc. (Fresno)
+Bulletin of the Fifth District Dental Society of the State of New York = Bull. Fifth Dist. Dent. Soc. State N. Y.
+Bulletin of the History of Dentistry = Bull. Hist. Dent.
+Bulletin of the History of Medicine = Bull. Hist. Med.
+Bulletin of the Hospital for Joint Diseases = Bull. Hosp. Joint Dis.
+Bulletin of the Hospital for Joint Diseases Orthopaedic Institute = Bull. Hosp. Jt. Dis. Orthop. Inst.
+Bulletin of the Hudson County Dental Society = Bull. Hudson Cty. Dent. Soc.
+Bulletin of the Illinois Dental Hygienists Association = Bull. Ill. Dent. Hyg. Assoc.
+Bulletin of the Institute for Medical Research, University of Madrid = Bull. Inst. Med. Res. Univ. Madr.
+Bulletin of the Institute of Maritime and Tropical Medicine in Gdynia = Bull. Inst. Marit. Trop. Med. Gdynia
+Bulletin of the International Union Against Tuberculosis = Bull. Int. Union Tuberc.
+Bulletin of the International Union Against Tuberculosis and Lung Disease = Bull. Int. Union Tuberc. Lung Dis.
+Bulletin of the Kanagawa Dental College = Bull. Kanagawa Dent. Coll.
+Bulletin of the Korean Chemical Society=Bull. Korean Chem. Soc.;BKCSDE;M
+Bulletin of the Los Angeles Dental Society = Bull. Los Angeles Dent. Soc.
+Bulletin of the Los Angeles Neurological Societies = Bull. Los Angeles Neurol. Soc.
+Bulletin of the Massachusetts Nurses Association = Bull. Mass. Nurses Assoc.
+Bulletin of the Medical Library Association = Bull. Med. Libr. Assoc.
+Bulletin of the Menninger Clinic = Bull. Menninger Clin.
+Bulletin of the Michigan Dental Hygienists Association = Bull. Mich. Dent. Hyg. Assoc.
+Bulletin of the Montgomery-Bucks Dental Society = Bull. Montg. Bucks Dent. Soc.
+Bulletin of the New Jersey College of Medicine and Dentistry = Bull. N. J. Coll. Med. Dent.
+Bulletin of the New Jersey Society of Dentistry for Children = Bull. N. J. Soc. Dent. Child.
+Bulletin of the New York Academy of Medicine = Bull. N. Y. Acad. Med.
+Bulletin of the New York State Dental Society of Anesthesiology = Bull. N. Y. State Dent. Soc. Anesthesiol.
+Bulletin of the New York State Society of Dentistry for Children = Bull. N. Y. State Soc. Dent. Child.
+Bulletin of the Newark Dental Club = Bull. Newark Dent. Club
+Bulletin of the Ninth District Dental Society = Bull. Ninth Dist. Dent. Soc.
+Bulletin of the Ophthalmological Society of Egypt = Bull. Ophthalmol. Soc. Egypt
+Bulletin of the Osaka Medical College = Bull. Osaka Med. Coll.
+Bulletin of the Osaka Medical School = Bull. Osaka Med. Sch.
+Bulletin of the Osaka Medical School. Supplement = Bull. Osaka Med. Sch. Suppl.
+Bulletin of the Pan American Health Organization = Bull. Pan Am. Health Organ.
+Bulletin of the Parenteral Drug Association = Bull. Parenter. Drug Assoc.
+Bulletin of the Passaic County Dental Society = Bull. Passaic Cty. Dent. Soc.
+Bulletin of the Philadelphia County Dental Society = Bull. Phila. Cty. Dent. Soc.
+Bulletin of the Plainfield Dental Society = Bull. Plainfield Dent. Soc.
+Bulletin of the Suffolk County Dental Society = Bull. Suffolk Cty. Dent. Soc.
+Bulletin of the Tenth District Dental Society of the State of New York = Bull. Tenth Dist. Dent. Soc. (Rockville. Centre)
+Bulletin of the Toledo Dental Society = Bull. Toledo Dent. Soc.
+Bulletin of the Tri-County Dental Society = Bull. Tri. Cty. Dent. Soc.
+Bulletin of the Union County Dental Society = Bull. Union Cty. Dent. Soc.
+Bulletin of the Valley Dental Society = Bull. Val. Dent. Soc.
+Bulletin of the World Health Organization = Bull. World Health Organ.
+Bulletin on Narcotics = Bull. Narc.
+Bulletin on Training = Bull. Train.
+Bulletin on the Rheumatic Diseases = Bull. Rheum. Dis.
+Bulletin, Alameda County Dental Society = Bull. Alameda Cty. Dent. Soc.
+Bulletin, American Association for the History of Nursing = Bull. Am. Assoc. Hist. Nurs.
+Bulletin, American Association of Dental Editors = Bull. Am. Assoc. Dent. Ed.
+Bulletin, American Association of Hospital Dentists = Bull. Am. Assoc. Hosp. Dent.
+Bulletin, American Protestant Hospital Association = Bull. Am. Protestant Hosp. Assoc.
+Bulletin, Atlantic-Cape May County Dental Society = Bull. Atl. Cape May Cty. Dent. Soc.
+Bulletin, Cincinnati Dental Society = Bull. Cincinnati Dent. Soc.
+Bulletin, Dayton Dental Society = Bull. Dayton Dent. Soc.
+Bulletin, Essex County Dental Society = Bull. Essex Cty. Dent. Soc.
+Bulletin, Hospital for Joint Diseases = Bull. Hosp. Jt. Dis.
+Bulletin, Midtown Dental Society = Bull. Midtown Dent. Soc.
+Bulletin, Monmouth-Ocean County Dental Society = Bull. Monmouth. Ocean Cty. Dent. Soc.
+Bulletin, NZ Society of Periodontology = Bull. N. Z. Soc. Periodontol.
+Bulletin, National Medical and Dental Association and National Advocates Society = Bull. Natl. Med. Dent. Assoc. Natl. Advocates Soc.
+Bulletin, National Tuberculosis Association = Bull. Natl. Tuberc. Assoc.
+Bulletin, National Tuberculosis and Respiratory Disease Association = Bull. Natl. Tuberc. Respir. Dis. Assoc.
+Bulletin, Northern District Dental Society = Bull. North. Dist. Dent. Soc.
+Bulletin, Pacific Coast Society of Orthodontists = Bull. Pac. Coast Soc. Orthod.
+Bulletin, San Diego County Dental Society = Bull. San Diego Cty. Dent. Soc.
+Bulletin, San Mateo County Dental Society = Bull. San Mateo Cty. Dent. Soc.
+Bulletin, Second District Dental Society = Bull. Second Dist. Dent. Soc.
+Bulletin, Tennessee Nurses Association = Bull. Tenn. Nurses Assoc.
+Bulletin, Texas Nurses Association = Bull. Tex. Nurses Assoc.
+Bulletins et Memoires de la Societe Francaise d'Ophtalmologie = Bull. Mem. Soc. Fr. Ophtalmol.
+Bulletins et Memoires de la Societe Medicale des Hopitaux de Paris = Bull. Mem. Soc. Med. Hop. Paris
+Bullettino delle Scienze Mediche = Bull. Sci. Med. (Bologna)
+Bunseki Kagaku=Bunseki Kagaku;BNSKAK;M
+Bur = Bur
+Burns = Burns
+Burns, including Thermal Injury = Burns. Incl. Therm. Inj.
+Business Horizons = Bus. Horiz.
+Business Insurance = Bus. Insur.
+Business Week = Bus. Week
+Business and Health = Bus. Health
+CA: A Cancer Journal for Clinicians = CA. Cancer J. Clin.
+CAL = CAL
+CALPHAD: Computer Coupling of Phase Diagrams and Thermochemistry=CALPHAD: Comput. Coupling Phase Diagrams Thermochem.;CCCTD6;Q
+CANA = CANA
+CAP Today = CAP Today
+CBE Life Sciences Education = CBE Life Sci. Educ.
+CCQ: Critical Care Quarterly = CCQ.
+CDA Journal = CDA J.
+CDR (London, Review) = CDR (Lond. Engl. Rev.)
+CDR (London, Weekly) = CDR (Lond. Engl. Wkly.)
+CDS Review = CDS Rev.
+CDT Digest = CDT Dig.
+CE Focus = CE Focus
+CES Odontologia = CES Odontol.
+CEX Reports, Civil Effects Exercise = CEX Rep. Civ. Eff. Exerc.
+CHAC Review = CHAC Rev.
+CICIAMS Nouvelles = CICIAMS Nouv.
+CLAO Journal = CLAO J.
+CMAJ = CMAJ
+CNA Bulletin = CNA Bull.
+CNS and Neurological Disorders Drug Targets = CNS Neurol. Disord. Drug Targets
+COO Reports = COO Rep.
+COPD = COPD
+CRC Critical Reviews in Biochemistry = CRC Crit. Rev. Biochem.
+CRC Critical Reviews in Bioengineering = CRC Crit. Rev. Bioeng.
+CRC Critical Reviews in Clinical Laboratory Sciences = CRC Crit. Rev. Clin. Lab. Sci.
+CRC Critical Reviews in Clinical Neurobiology = CRC Crit. Rev. Clin. Neurobiol.
+CRC Critical Reviews in Clinical Radiology and Nuclear Medicine = CRC Crit. Rev. Clin. Radiol. Nucl. Med.
+CRC Critical Reviews in Diagnostic Imaging = CRC Crit. Rev. Diagn. Imaging
+CRC Critical Reviews in Food Science and Nutrition = CRC Crit. Rev. Food Sci. Nutr.
+CRC Critical Reviews in Immunology = CRC Crit. Rev. Immunol.
+CRC Critical Reviews in Microbiology = CRC Crit. Rev. Microbiol.
+CRC Critical Reviews in Radiological Sciences = CRC Crit. Rev. Radiol. Sci.
+CRC Critical Reviews in Toxicology = CRC Crit. Rev. Toxicol.
+CRNA = CRNA
+CVP = CVP
+Cadernos de Saude Publica = Cad. Saude Publica
+Caduceus = Caduceus
+Caementum = Caementum
+Cahiers d'Anesthesiologie = Cah. Anesthesiol.
+Cahiers d'Odonto-Stomatologie = Cah. Odontostomatol. (Touraine)
+Cahiers de Medecine = Cah. Med.
+Cahiers de Prothese = Cah. Prothese
+Cahiers de Sociologie et de Demographie Medicales = Cah. Sociol. Demogr. Med.
+Cahiers du College de Medecine des Hopitaux de Paris = Cah. Coll. Med. Hop. Paris
+Cahiers du Nursing = Cah. Nurs.
+Cailiao Rechuli Xuebao=Cailiao Rechuli Xuebao;CRXAAK;BM
+Calcified Tissue International = Calcif. Tissue Int.
+Calcified Tissue Research = Calcif. Tissue Res.
+California Hospitals = Calif. Hosp.
+California Law Review = Calif. Law Rev.
+California Management Review = Calif. Manage. Rev.
+California Medicine = Calif. Med.
+California Nurse = Calif. Nurse
+Cambridge Quarterly of Healthcare Ethics = Camb. Q. Healthc. Ethics
+Canada Communicable Disease Report = Can. Commun. Dis. Rep.
+Canada Diseases Weekly Report = Can. Dis. Wkly. Rep.
+Canada's Mental Health = Can. Ment. Health
+Canadian Anaesthetists Society Journal = Can. Anaesth. Soc. J.
+Canadian Association of Radiologists Journal = Can. Assoc. Radiol. J.
+Canadian Bulletin of Cardiovascular Nursing = Can. Bull. Cardiovasc. Nurs.
+Canadian Cancer Conference = Can. Cancer Conf.
+Canadian Critical Care Nursing Journal = Can. Crit. Care Nurs. J.
+Canadian Dental Hygienist = Can. Dent. Hyg.
+Canadian Doctor = Can. Doct.
+Canadian Family Physician = Can. Fam. Physician
+Canadian Forces Dental Services Bulletin = Can. Forces Dent. Serv. Bull.
+Canadian Forces Dental Services Quarterly = Can. Forces Dent. Serv. Q.
+Canadian Hospital = Can. Hosp.
+Canadian Journal of Anaesthesia = Can. J. Anaesth.
+Canadian Journal of Analytical Sciences and Spectroscopy=Can. J. Anal. Sci. Spectrosc.;CJASFA;BM
+Canadian Journal of Applied Physiology = Can. J. Appl. Physiol.
+Canadian Journal of Applied Sport Sciences = Can. J. Appl. Sport Sci.
+Canadian Journal of Biochemistry = Can. J. Biochem.
+Canadian Journal of Biochemistry and Cell Biology = Can. J. Biochem. Cell Biol.
+Canadian Journal of Cardiology = Can. J. Cardiol.
+Canadian Journal of Cardiovascular Nursing = Can. J. Cardiovasc. Nurs.
+Canadian Journal of Chemical Engineering=Can. J. Chem. Eng.;CJCEA7;BM
+Canadian Journal of Chemistry=Can. J. Chem.;CJCHAG;M
+Canadian Journal of Community Dentistry = Can. J. Community Dent.
+Canadian Journal of Community Mental Health = Can. J. Commun. Ment. Health
+Canadian Journal of Comparative Medicine = Can. J. Comp. Med.
+Canadian Journal of Comparative Medicine and Veterinary Science = Can. J. Comp. Med. Vet. Sci.
+Canadian Journal of Dietetic Practice and Research = Can. J. Diet. Pract. Res.
+Canadian Journal of Experimental Psychology = Can. J. Exp. Psychol.
+Canadian Journal of Fisheries and Aquatic Sciences = Can. J. Fish. Aquat. Sci.
+Canadian Journal of Gastroenterology = Can. J. Gastroenterol.
+Canadian Journal of Genetics and Cytology = Can. J. Genet. Cytol.
+Canadian Journal of Hospital Pharmacy = Can. J. Hosp. Pharm.
+Canadian Journal of Infection Control = Can. J. Infect. Control
+Canadian Journal of Medical Radiation Technology = Can. J. Med. Radiat. Technol.
+Canadian Journal of Medical Technology = Can. J. Med. Technol.
+Canadian Journal of Microbiology = Can. J. Microbiol.
+Canadian Journal of Neurological Sciences = Can. J. Neurol. Sci.
+Canadian Journal of Nursing Administration = Can. J. Nurs. Adm.
+Canadian Journal of Nursing Research = Can. J. Nurs. Res.
+Canadian Journal of Occupational Therapy = Can. J. Occup. Ther.
+Canadian Journal of Oncology = Can. J. Oncol.
+Canadian Journal of Ophthalmology = Can. J. Ophthalmol.
+Canadian Journal of Otolaryngology = Can. J. Otolaryngol.
+Canadian Journal of Otolaryngology. Supplement = Can. J. Otolaryngol. Suppl.
+Canadian Journal of Physics=Can. J. Phys.;CJPHAD;M
+Canadian Journal of Physiology and Pharmacology = Can. J. Physiol. Pharmacol.
+Canadian Journal of Psychiatric Nursing = Can. J. Psychiatr. Nurs.
+Canadian Journal of Psychiatry = Can. J. Psychiatry
+Canadian Journal of Psychology = Can. J. Psychol.
+Canadian Journal of Public Health = Can. J. Public Health.
+Canadian Journal of Radiography, Radiotherapy, Nuclear Medicine = Can. J. Radiogr. Radiother. Nucl. Med.
+Canadian Journal of Sport Sciences = Can. J. Sport Sci.
+Canadian Journal of Surgery = Can. J. Surg.
+Canadian Journal of Veterinary Research = Can. J. Vet. Res.
+Canadian Journal of Zoology = Can. J. Zool.
+Canadian Medical Association Journal = Can. Med. Assoc. J.
+Canadian Metallurgical Quarterly=Can. Metall. Q.;CAMQAU;Q
+Canadian Mineralogist=Can. Mineral.;CAMIA6;BM
+Canadian Nurse = Can. Nurse
+Canadian Oncology Nursing Journal = Can. Oncol. Nurs. J.
+Canadian Operating Room Nursing Journal = Can. Oper. Room Nurs. J.
+Canadian Pharmaceutical Journal = Can. Pharm. J.
+Canadian Psychiatric Association Journal = Can. Psychiatr. Assoc. J.
+Canadian Public Administration = Can. Public Adm.
+Canadian Respiratory Journal = Can. Respir. J.
+Canadian Veterinary Journal = Can. Vet. J.
+Cancer = Cancer
+Cancer Biochemistry Biophysics = Cancer Biochem. Biophys.
+Cancer Biology and Therapy = Cancer Biol. Ther.
+Cancer Biotherapy = Cancer Biother.
+Cancer Biotherapy and Radiopharmaceuticals = Cancer Biother. Radiopharm.
+Cancer Causes and Control = Cancer Causes Control
+Cancer Cell = Cancer Cell
+Cancer Cells = Cancer Cells
+Cancer Chemotherapy Reports. Part 1 = Cancer Chemother. Rep.
+Cancer Chemotherapy Reports. Part 2 = Cancer Chemother. Rep. [2]
+Cancer Chemotherapy Reports. Part 3 = Cancer Chemother. Rep. [3]
+Cancer Chemotherapy and Biological Response Modifiers = Cancer Chemother. Biol. Response Modif.
+Cancer Chemotherapy and Pharmacology = Cancer Chemother. Pharmacol.
+Cancer Clinical Trials = Cancer Clin. Trials
+Cancer Communications = Cancer Commun.
+Cancer Detection and Prevention = Cancer Detect. Prev.
+Cancer Detection and Prevention. Supplement = Cancer Detect. Prev. Suppl.
+Cancer Drug Delivery = Cancer Drug Deliv.
+Cancer Epidemiology, Biomarkers and Prevention = Cancer Epidemiol. Biomarkers Prev.
+Cancer Gene Therapy = Cancer Gene Ther.
+Cancer Genetics and Cytogenetics = Cancer Genet. Cytogenet.
+Cancer Genomics & Proteomics=Cancer Genomics Proteomics;CGPAC7;BM
+Cancer Immunity = Cancer Immun.
+Cancer Immunology, Immunotherapy = Cancer Immunol. Immunother.
+Cancer Investigation = Cancer Invest.
+Cancer Journal = Cancer J.
+Cancer Journal from Scientific American = Cancer J. Sci. Am.
+Cancer Letters = Cancer Lett.
+Cancer Letters (Amsterdam, Netherlands)=Cancer Lett. (Amsterdam, Neth.);CALEDQ;28/YR
+Cancer Nursing = Cancer Nurs.
+Cancer Practice = Cancer Pract.
+Cancer Prevention and Control = Cancer Prev. Control
+Cancer Radiotherapie = Cancer Radiother.
+Cancer Research = Cancer Res.
+Cancer Science = Cancer Sci.
+Cancer Surveys = Cancer Surv.
+Cancer Treatment Reports = Cancer Treat. Rep.
+Cancer Treatment Reviews = Cancer Treat. Rev.
+Cancer Treatment and Research = Cancer Treat. Res.
+Cancer and Metastasis Reviews = Cancer Metastasis Rev.
+Cancro = Cancro
+Capital Nursing = Cap. Nurs.
+Capitation Management Report = Capitation Manag. Rep.
+Capitation Rates and Data = Capitation Rates Data
+Carbohydrate Polymers=Carbohydr. Polym.;CAPOD8;16/YR
+Carbohydrate Research = Carbohydr. Res.
+Carbon=Carbon;CRBNAH;15/YR
+Carcinogenesis = Carcinogenesis
+Carcinogenesis: A Comprehensive Survey = Carcinog. Compr. Surv.
+Cardiac Electrophysiology Review = Card. Electrophysiol. Rev.
+Cardiologia = Cardiologia
+Cardiologia Pratica = Cardiol. Prat.
+Cardiology = Cardiology
+Cardiology Clinics = Cardiol. Clin.
+Cardiology Management = Cardiol. Manage.
+Cardiology in Review = Cardiol. Rev.
+Cardiology in the Young = Cardiol. Young
+Cardioscience = Cardioscience
+Cardiovascular Clinics = Cardiovasc. Clin.
+Cardiovascular Diabetology = Cardiovasc. Diabetol.
+Cardiovascular Drugs and Therapy = Cardiovasc. Drugs Ther.
+Cardiovascular Engineering = Cardiovasc. Eng.
+Cardiovascular Journal of South Africa = Cardiovasc. J. S. Afr.
+Cardiovascular Nursing = Cardiovasc. Nurs.
+Cardiovascular Radiation Medicine = Cardiovasc. Radiat. Med.
+Cardiovascular Radiology = Cardiovasc. Radiol.
+Cardiovascular Research = Cardiovasc. Res.
+Cardiovascular Research Center Bulletin = Cardiovasc. Res. Cent. Bull.
+Cardiovascular Revascularization Medicine = Cardiovasc. Revasc. Med.
+Cardiovascular Surgery = Cardiovasc. Surg.
+Cardiovascular Toxicology = Cardiovasc. Toxicol.
+Cardiovascular and Hematological Agents in Medicinal Chemistry = Cardiovasc. Hematol. Agents Med. Chem.
+Cardiovascular and Hematological Disorders Drug Targets = Cardiovasc. Hematol. Disord. Drug Targets.
+Cardiovascular and Interventional Radiology = Cardiovasc. Intervent. Radiol.
+Care Giver = Care Giver
+Care Management Journals = Care Manag. J.
+Caridad, Ciencia y Arte = Caridad. Cienc. Arte
+Caries Research = Caries Res.
+Caring = Caring
+Caritas = Caritas
+Caritasschwester = Caritasschwester
+Carlsberg Research Communications = Carlsberg Res. Commun.
+Carnets de l'Enfance = Carnets Enfance
+Case Studies in Health Administration = Case Stud. Health Adm.
+Casopis Lekaru Ceskych = Cas. Lek. Cesk.
+Catalysis Communications=Catal. Commun.;CCAOAC;M
+Catalysis Letters=Catal. Lett.;CALEER;28/YR
+Catalysis Reviews - Science and Engineering=Catal. Rev. - Sci. Eng.;CRSEC9;Q
+Catalysis Today=Catal. Today;CATTEA;44/YR
+Catering and Health = Cater. Health
+Catheterization and Cardiovascular Diagnosis = Cathet. Cardiovasc. Diagn.
+Catheterization and Cardiovascular Interventions = Catheter. Cardiovasc. Interv.
+Catholic Hospital = Cathol. Hosp.
+Catholic Nurse = Cathol. Nurse
+Cell = Cell
+Cell (Cambridge, MA, United States)=Cell (Cambridge, MA, U. S.);CELLB5;BW
+Cell Adhesion and Communication = Cell Adhes. Commun.
+Cell Biochemistry and Biophysics = Cell Biochem. Biophys.
+Cell Biochemistry and Function = Cell Biochem. Funct.
+Cell Biology International = Cell Biol. Int.
+Cell Biology International Reports = Cell Biol. Int. Rep.
+Cell Biology Reviews = Cell Biol. Rev.
+Cell Biology and Toxicology = Cell Biol. Toxicol.
+Cell Biophysics = Cell Biophys.
+Cell Calcium = Cell Calcium
+Cell Communication and Adhesion = Cell Commun. Adhes.
+Cell Cycle = Cell Cycle
+Cell Death and Differentiation = Cell Death Differ.
+Cell Differentiation = Cell Differ.
+Cell Differentiation and Development = Cell Differ. Dev.
+Cell Growth and Differentiation = Cell Growth Differ.
+Cell Metabolism = Cell Metab.
+Cell Motility = Cell Motil.
+Cell Motility and the Cytoskeleton = Cell Motil. Cytoskeleton
+Cell Proliferation = Cell Prolif.
+Cell Regulation = Cell Regul.
+Cell Research = Cell Res.
+Cell Stress and Chaperones = Cell Stress Chaperones
+Cell Structure and Function = Cell Struct. Funct.
+Cell Transplantation = Cell Transplant.
+Cell Vision = Cell Vis.
+Cell and Muscle Motility = Cell Muscle Motil.
+Cell and Tissue Kinetics = Cell Tissue Kinet.
+Cell and Tissue Research = Cell Tissue Res.
+Cells, Tissues, Organs = Cells Tissues Organs
+Cellular Immunology = Cell. Immunol.
+Cellular Microbiology = Cell. Microbiol.
+Cellular Oncology = Cell. Oncol.
+Cellular Physiology and Biochemistry = Cell. Physiol. Biochem.
+Cellular Polymers=Cell. Polym.;CELPDJ;BM
+Cellular Signalling = Cell. Signal.
+Cellular and Molecular Biology = Cell. Mol. Biol.
+Cellular and Molecular Biology (Paris, France, Online)=Cell. Mol. Biol. (Paris, Fr., Online);CMBPBN;IRR
+Cellular and Molecular Biology (Sarreguemines, France, Print)=Cell. Mol. Biol. (Sarreguemines, Fr., Print);CMOBEF;8/YR
+Cellular and Molecular Biology Letters = Cell. Mol. Biol. Lett.
+Cellular and Molecular Biology Research = Cell. Mol. Biol. Res.
+Cellular and Molecular Immunology = Cell. Mol. Immunol.
+Cellular and Molecular Life Sciences = Cell. Mol. Life Sci.
+Cellular and Molecular Neurobiology = Cell. Mol. Neurobiol.
+Cellule = Cellule
+Cellulose Chemistry and Technology=Cellul. Chem. Technol.;CECTAH;BM
+Cement & Concrete Composites=Cem. Concr. Compos.;CCOCEG;10/YR
+Cement and Concrete Research=Cem. Concr. Res.;CCNRAI;M
+Centaurus = Centaurus
+Central African Journal of Medicine = Cent. Afr. J. Med.
+Central European Journal of Public Health = Cent. Eur. J. Public Health
+Central Nervous System Trauma = Cent. Nerv. Syst. Trauma
+Centro de Estudios de Recursos Odontologicos para el Nino = Cent. Estud. Recur. Odontol. Nino
+Cephalalgia = Cephalalgia
+Ceramics International=Ceram. Int.;CINNDH;8/YR
+Ceramics-Silikaty=Ceram.-Silik.;CERSEP;Q
+Cereal Chemistry=Cereal Chem.;CECHAF;BM
+Cerebellum = Cerebellum
+Cerebral Cortex = Cereb. Cortex
+Cerebral Palsy Journal = Cereb. Palsy J.
+Cerebral Palsy Review = Cereb. Palsy Rev.
+Cerebrovascular Diseases = Cerebrovasc. Dis.
+Cerebrovascular and Brain Metabolism Reviews = Cerebrovasc. Brain Metab. Rev.
+Certified Dental Technician = Certif. Dent. Tech.
+Ceska Gynekologie = Ceska Gynekol.
+Ceska a Slovenska Farmacie = Ceska Slov. Farm.
+Ceska a Slovenska Oftalmologie = Cesk. Slov. Oftalmol.
+Ceska a Slovenska Psychiatrie = Ceska Slov. Psychiatr.
+Ceskoslovenska Dermatologie = Cesk. Dermatol.
+Ceskoslovenska Epidemiologie, Mikrobiologie, Imunologie = Cesk. Epidemiol. Mikrobiol. Imunol.
+Ceskoslovenska Farmacie = Cesk. Farm.
+Ceskoslovenska Fysiologie = Cesk. Fysiol.
+Ceskoslovenska Gastroenterologie a Vyziva = Cesk. Gastroenterol. Vyz.
+Ceskoslovenska Gynekologie = Cesk. Gynekol.
+Ceskoslovenska Hygiena = Cesk. Hyg.
+Ceskoslovenska Neurologie = Cesk. Neurol.
+Ceskoslovenska Neurologie a Neurochirurgie = Cesk. Neurol. Neurochir.
+Ceskoslovenska Oftalmologie = Cesk. Oftalmol.
+Ceskoslovenska Otolaryngologie = Cesk. Otolaryngol.
+Ceskoslovenska Patologie = Cesk. Patol.
+Ceskoslovenska Pediatrie = Cesk. Pediatr.
+Ceskoslovenska Psychiatrie = Cesk. Psychiatr.
+Ceskoslovenska Radiologie = Cesk. Radiol.
+Ceskoslovenska Stomatologie = Cesk. Stomatol.
+Ceskoslovenske Zdravotnictvi = Cesk. Zdrav.
+Ceylon Dental Journal = Ceylon Dent. J.
+Ceylon Medical Journal = Ceylon Med. J.
+Chang Gung Medical Journal = Chang Gung Med. J.
+Change = Change
+Changgeng Yi Xue Za Zhi (Chang Gung Medical Journal) = Changgeng Yi Xue Za Zhi
+Changing Times = Changing Times
+Chart = Chart
+ChemBioChem=ChemBioChem;CBCHFX;M
+ChemPhysChem=ChemPhysChem;CPCHFT;12/YR
+Chembiochem = Chembiochem
+Chemia Analityczna (Warsaw, Poland)=Chem. Anal. (Warsaw, Pol.);CANWAJ;BM
+Chemical & Pharmaceutical Bulletin=Chem. Pharm. Bull.;CPBTAL;M
+Chemical Biology and Drug Design = Chem. Biol. Drug Des.
+Chemical Communications = Chem. Commun.
+Chemical Communications (Cambridge, United Kingdom)=Chem. Commun. (Cambridge, U. K.);CHCOFS;48/YR
+Chemical Dependencies = Chem. Depend.
+Chemical Engineering & Technology=Chem. Eng. Technol.;CETEER;M
+Chemical Engineering Communications=Chem. Eng. Commun.;CEGCAK;M
+Chemical Engineering Journal (Amsterdam, Netherlands)=Chem. Eng. J. (Amsterdam, Neth.);CMEJAJ;27/YR
+Chemical Engineering Progress=Chem. Eng. Prog.;CEPRA8;M
+Chemical Engineering Research and Design=Chem. Eng. Res. Des.;CERDEE;M
+Chemical Engineering Science = Chem. Eng. Sci.
+Chemical Engineering and Processing=Chem. Eng. Process.;CENPEU;M
+Chemical Geology=Chem. Geol.;CHGEAD;44/YR
+Chemical Immunology = Chem. Immunol.
+Chemical Immunology and Allergy = Chem. Immunol. Allergy
+Chemical Papers=Chem. Pap.;CHPAEG;6/YR
+Chemical Physics=Chem. Phys.;CMPHC2;33/YR
+Chemical Physics Letters=Chem. Phys. Lett.;CHPLBC;W
+Chemical Record = Chem. Rec.
+Chemical Research in Chinese Universities=Chem. Res. Chin. Univ.;CRCUED;BM
+Chemical Research in Toxicology = Chem. Res. Toxicol.
+Chemical Reviews = Chem. Rev.
+Chemical Reviews (Washington, DC, United States)=Chem. Rev. (Washington, DC, U. S.);CHREAY;M
+Chemical Senses = Chem. Senses
+Chemical Society Reviews=Chem. Soc. Rev.;CSRVBR;12/YR
+Chemical Speciation and Bioavailability=Chem. Speciation Bioavailability;CHSBEY;Q
+Chemical Vapor Deposition=Chem. Vap. Deposition;CVDEFX;M
+Chemical and Biochemical Engineering Quarterly=Chem. Biochem. Eng. Q.;CBEQEZ;Q
+Chemical and Pharmaceutical Bulletin = Chem. Pharm. Bull. (Tokyo)
+Chemicke Listy=Chem. Listy;CHLSAC;M
+Chemico-Biological Interactions = Chem. Biol. Interact.
+Chemie Ingenieur Technik=Chem. Ing. Tech.;CITEAH;M
+Chemie der Erde=Chem. Erde;CERDAA;4/YR
+Chemija=Chemija;CHMJES;4/YR
+Chemioterapia = Chemioterapia
+Chemische Berichte = Chem. Ber.
+Chemistry & Biodiversity=Chem. Biodiversity;CBHIAM;M
+Chemistry & Biology (Cambridge, MA, United States)=Chem. Biol. (Cambridge, MA, U. S.);CBOLE2;M
+Chemistry & Industry (London, United Kingdom)=Chem. Ind. (London, U. K.);CHINAG;SM
+Chemistry Letters=Chem. Lett.;CMLTAG;M
+Chemistry and Biology = Chem. Biol.
+Chemistry and Industry = Chem. Ind.
+Chemistry and Physics of Lipids = Chem. Phys. Lipids
+Chemistry and Technology of Fuels and Oils=Chem. Technol. Fuels Oils;CTFOAK;BM
+Chemistry in Britain = Chem. Br.
+Chemistry of Heterocyclic Compounds (New York, NY, United States)=Chem. Heterocycl. Compd. (N. Y., NY, U. S.);CHCCAL;M
+Chemistry of Materials=Chem. Mater.;CMATEX;BW
+Chemistry of Natural Compounds=Chem. Nat. Compd.;CHNCA8;BM
+Chemistry--A European Journal=Chem.--Eur. J.;CEUJED;SM
+Chemmedchem = Chemmedchem
+Chemometrics and Intelligent Laboratory Systems=Chemom. Intell. Lab. Syst.;CILSEN;9/YR
+Chemosphere = Chemosphere
+Chemotherapy = Chemotherapy
+Chemotherapy (Basel, Switzerland)=Chemotherapy (Basel, Switz.);CHTHBK;BM
+Chemtracts=Chemtracts;CHEMFW;12/YR
+Chen Tzu Yen Chiu (Acupuncture Research) = Chen Tzu Yen Chiu
+Chest = Chest
+Chest Surgery Clinics of North America = Chest Surg. Clin. N. Am.
+Chicago Medical School Quarterly = Chic. Med. Sch. Q.
+Chief Information Officer Journal = Chief Inf. Off. J.
+Chikwa Kijae Hakhoe Chi (Journal of the Korea Research Society for Dental Materials) = Chikwa Kijae Hakhoe Chi
+Child Abuse and Neglect = Child Abuse Negl.
+Child Development = Child Dev.
+Child Maltreatment = Child Maltreat.
+Child Nephrology and Urology = Child Nephrol. Urol.
+Child Psychiatry and Human Development = Child Psychiatry Hum. Dev.
+Child Welfare = Child Welfare
+Child and Adolescent Psychiatric Clinics of North America = Child Adolesc. Psychiatr. Clin. N. Am.
+Child's Brain = Childs Brain
+Child's Nervous System = Childs Nerv. Syst.
+Child: Care, Health and Development = Child Care Health Dev.
+Children = Children
+Children Today = Child. Today
+Children's Health Care = Child. Health Care
+Chimia=Chimia;CHIMAD;M
+Chimica e l'Industria (Milan, Italy)=Chim. Ind. (Milan, Italy);CINMAB;10/YR
+China's Medicine = Chinas Med.
+Chinese Chemical Letters=Chin. Chem. Lett.;CCLEE7;M
+Chinese Journal of Biotechnology = Chin. J. Biotechnol.
+Chinese Journal of Chemical Engineering=Chin. J. Chem. Eng.;CJCEEB;BM
+Chinese Journal of Chemistry=Chin. J. Chem.;CJOCEV;M
+Chinese Journal of Geochemistry=Chin. J. Geochem.;CJGEEV;Q
+Chinese Journal of Integrative Medicine = Chin. J. Integr. Med.
+Chinese Journal of Physiology = Chin. J. Physiol.
+Chinese Journal of Polymer Science=Chin. J. Polym. Sci.;CJPSEG;BM
+Chinese Journal of Traumatology = Chin. J. Traumatol.
+Chinese Medical Journal = Chin. Med. J. (Engl.)
+Chinese Medical Sciences Journal = Chin. Med. Sci. J.
+Chirality = Chirality
+Chirurg = Chirurg
+Chirurgia = Chirurgia (Bucur.)
+Chirurgia Italiana = Chir. Ital.
+Chirurgia Maxillofacialis et Plastica = Chir. Maxillofac. Plast.
+Chirurgia Narzadow Ruchu i Ortopedia Polska = Chir. Narzadow Ruchu Ortop. Pol.
+Chirurgia degli Organi di Movimento = Chir. Organi Mov.
+Chirurgia e Patologia Sperimentale = Chir. Patol. Sper.
+Chirurgie = Chirurgie
+Chirurgie Pediatrique = Chir. Pediatr.
+Chirurgie de la Main = Chir. Main
+Chirurgien-Dentiste de France = Chir. Dent. Fr.
+Chirurgisches Forum fur Experimentelle und Klinische Forschung = Chir. Forum Exp. Klin. Forsch.
+Choices in Respiratory Management = Choices Respir. Manage.
+Chot Mai Het Kan Phayaban = Chot Mai Het Kan Phayaban
+Christian Medical Dental Society Journal = Christ. Med. Dent. Soc. J.
+Christian Nurse = Christ. Nurse (Mysore)
+Christian Nurse International = Christ. Nurse Int.
+Chromatographia=Chromatographia;CHRGB7;M
+Chromatographic Reviews = Chromatogr. Rev.
+Chromosoma = Chromosoma
+Chromosome Research = Chromosome Res.
+Chronic Diseases in Canada = Chronic Dis. Can.
+Chronic Illness = Chronic Illn.
+Chronic Respiratory Disease = Chron. Respir. Dis.
+Chronicle = Chronicle
+Chronobiologia = Chronobiologia
+Chronobiology International = Chronobiol. Int.
+Ciba Foundation Study Group = Ciba Found. Study Group
+Ciba Foundation Symposium = Ciba Found. Symp.
+Cincinnati Dental Society Bulletin = Cincinnati Dent. Soc. Bull.
+Circulation = Circulation
+Circulation Journal = Circ. J.
+Circulation Research = Circ. Res.
+Circulatory Shock = Circ. Shock
+Circulatory Shock. Supplement = Circ. Shock. Suppl.
+Circulo Odontologico de San Martin y Tres de Febrero = Circ. Odontol. San Martin Tres Febr.
+Cirugia Bucal = Cir. Bucal
+Cirugia Pediatrica = Cir. Pediatr.
+Cirugia y Cirujanos = Cir. Cir.
+Cirugia, Ginecologia y Urologia = Cir. Ginecol. Urol.
+Clay Minerals=Clay Miner.;CLMIAF;Q
+Clays and Clay Minerals=Clays Clay Miner.;CLCMAB;BM
+Cleft Palate Journal = Cleft Palate J.
+Cleft Palate-Craniofacial Journal = Cleft Palate. Craniofac. J.
+Cleveland Clinic Journal of Medicine = Cleve. Clin. J. Med.
+Cleveland Clinic Quarterly = Cleve. Clin. Q.
+Climacteric = Climacteric
+Climate Dynamics = Climate Dyn.
+Climatic Change = Climatic Change
+Climatological Bulletin = Climatol. Bull.
+Clinic = Clinic (Paris)
+Clinic Odontologia = Clin. Odontol.
+Clinica = Clinica
+Clinica Chimica Acta = Clin. Chim. Acta
+Clinica Europea = Clin. Eur.
+Clinica Ortopedica = Clin. Ortop.
+Clinica Ostetrica e Ginecologica = Clin. Ostet. Ginecol.
+Clinica Otorinolaringoiatrica = Clin. Otorinolaringoiatr.
+Clinica Pediatrica = Clin. Pediatr. (Bologna)
+Clinica Terapeutica = Clin. Ter.
+Clinica y Laboratorio = Clin. Lab.
+Clinical Advances in Hematology and Oncology = Clin. Adv. Hematol. Oncol.
+Clinical Allergy = Clin. Allergy
+Clinical Anatomy = Clin. Anat.
+Clinical Anesthesia = Clin. Anesth.
+Clinical Autonomic Research = Clin. Auton. Res.
+Clinical Biochemistry = Clin. Biochem.
+Clinical Breast Cancer = Clin. Breast Cancer
+Clinical Bulletin = Clin. Bull.
+Clinical Cancer Research = Clin. Cancer Res.
+Clinical Cardiology = Clin. Cardiol.
+Clinical Chemistry = Clin. Chem.
+Clinical Chemistry (Washington, DC, United States)=Clin. Chem. (Washington, DC, U. S.);CLCHAU;M
+Clinical Chemistry and Laboratory Medicine = Clin. Chem. Lab. Med.
+Clinical Child and Family Psychology Review = Clin. Child Fam. Psychol. Rev.
+Clinical Colorectal Cancer = Clin. Colorectal Cancer
+Clinical Cornerstone = Clin. Cornerstone
+Clinical Dysmorphology = Clin. Dysmorphol.
+Clinical EEG and Neuroscience = Clin. EEG Neurosci.
+Clinical Electroencephalography = Clin. Electroencephalogr.
+Clinical Endocrinology = Clin. Endocrinol. (Oxf.)
+Clinical Engineering = Clin. Eng.
+Clinical Engineering Information Service = Clin. Eng. Inf. Serv.
+Clinical Engineering News = Clin. Eng. News
+Clinical Evidence = Clin. Evid.
+Clinical Gastroenterology and Hepatology = Clin. Gastroenterol. Hepatol.
+Clinical Genetics = Clin. Genet.
+Clinical Genitourinary Cancer = Clin. Genitourin. Cancer
+Clinical Gerontologist = Clin. Gerontol.
+Clinical Hemorheology and Microcirculation = Clin. Hemorheol. Microcirc.
+Clinical Imaging = Clin. Imaging
+Clinical Immunology = Clin. Immunol.
+Clinical Immunology (San Diego, CA, United States)=Clin. Immunol. (San Diego, CA, U. S.);CLIIFY;M
+Clinical Immunology Reviews = Clin. Immunol. Rev.
+Clinical Immunology and Immunopathology = Clin. Immunol. Immunopathol.
+Clinical Implant Dentistry and Related Research = Clin. Implant Dent. Relat. Res.
+Clinical Infectious Diseases = Clin. Infect. Dis.
+Clinical Intensive Care = Clin. Intensive Care
+Clinical Investigator = Clin. Investig.
+Clinical Journal of Oncology Nursing = Clin. J. Oncol. Nurs.
+Clinical Journal of Pain = Clin. J. Pain
+Clinical Journal of Sport Medicine = Clin. J. Sport Med.
+Clinical Laboratory = Clin. Lab.
+Clinical Laboratory Management Review = Clin. Lab. Manage. Rev.
+Clinical Laboratory Science = Clin. Lab. Sci.
+Clinical Laser Monthly = Clin. Laser Mon.
+Clinical Lymphoma = Clin. Lymphoma
+Clinical Lymphoma and Myeloma = Clin. Lymphoma Myeloma
+Clinical Materials = Clin. Mater.
+Clinical Medicine = Clin. Med.
+Clinical Medicine and Research = Clin. Med. Res.
+Clinical Microbiology Reviews = Clin. Microbiol. Rev.
+Clinical Nephrology = Clin. Nephrol.
+Clinical Neurology and Neurosurgery = Clin. Neurol. Neurosurg.
+Clinical Neuropathology = Clin. Neuropathol.
+Clinical Neuropharmacology = Clin. Neuropharmacol.
+Clinical Neurophysiology = Clin. Neurophysiol.
+Clinical Neuroscience = Clin. Neurosci.
+Clinical Neurosurgery = Clin. Neurosurg.
+Clinical Notes on Respiratory Diseases = Clin. Notes Respir. Dis.
+Clinical Nuclear Medicine = Clin. Nucl. Med.
+Clinical Nurse Specialist = Clin. Nurse Spec.
+Clinical Nursing Practice in Epilepsy = Clin. Nurs. Pract. Epilepsy
+Clinical Nursing Research = Clin. Nurs. Res.
+Clinical Nutrition = Clin. Nutr.
+Clinical Obstetrics and Gynecology = Clin. Obstet. Gynecol.
+Clinical Oncology = Clin. Oncol.
+Clinical Oncology (Royal College of Radiologists) = Clin. Oncol. (R. Coll. Radiol.)
+Clinical Oral Implants Research = Clin. Oral Implants Res.
+Clinical Oral Investigations = Clin. Oral Investig.
+Clinical Orthodontics and Research = Clin. Orthod. Res.
+Clinical Orthopaedics and Related Research = Clin. Orthop.
+Clinical Otolaryngology = Clin. Otolaryngol.
+Clinical Pediatrics = Clin. Pediatr. (Phila.)
+Clinical Performance and Quality Health Care = Clin. Perform. Qual. Health Care
+Clinical Pharmacokinetics = Clin. Pharmacokinet.
+Clinical Pharmacology and Therapeutics = Clin. Pharmacol. Ther.
+Clinical Pharmacy = Clin. Pharm.
+Clinical Physics and Physiological Measurement = Clin. Phys. Physiol. Meas.
+Clinical Physiology = Clin. Physiol.
+Clinical Physiology and Biochemistry = Clin. Physiol. Biochem.
+Clinical Physiology and Functional Imaging = Clin. Physiol. Funct. Imaging
+Clinical Practice Guideline. Quick Reference Guide for Clinicians = Clin. Pract. Guidel. Quick Ref. Guide Clin.
+Clinical Preventive Dentistry = Clin. Prev. Dent.
+Clinical Proceedings, Childrens Hospital of the District of Columbia = Clin. Proc. Child. Hosp. Dist. Columbia
+Clinical Prostate and Kidney Cancer = Clin. Prostate Kidney Cancer
+Clinical Proteomics=Clin. Proteomics;CPLRCX;4/YR
+Clinical Psychology Review = Clin. Psychol. Rev.
+Clinical Radiology = Clin. Radiol.
+Clinical Rehabilitation = Clin. Rehabil.
+Clinical Reproduction and Fertility = Clin. Reprod. Fertil.
+Clinical Research = Clin. Res.
+Clinical Research in Cardiology = Clin. Res. Cardiol.
+Clinical Reviews in Allergy = Clin. Rev. Allergy
+Clinical Reviews in Allergy and Immunology = Clin. Rev. Allergy Immunol.
+Clinical Rheumatology = Clin. Rheumatol.
+Clinical Science = Clin. Sci.
+Clinical Science and Molecular Medicine = Clin. Sci. Mol. Med.
+Clinical Science and Molecular Medicine. Supplement = Clin. Sci. Mol. Med. Suppl.
+Clinical Symposia = Clin. Symp.
+Clinical Techniques in Small Animal Practice = Clin. Tech. Small Anim. Pract.
+Clinical Therapeutics = Clin. Ther.
+Clinical Toxicology = Clin. Toxicol.
+Clinical Transplantation = Clin. Transplant.
+Clinical Transplants = Clin. Transpl.
+Clinical Trials = Clin. Trials
+Clinical Trials Journal = Clin. Trials J.
+Clinical Trials and Meta-Analysis = Clin. Trials Metaanal.
+Clinical and Developmental Immunology = Clin. Dev. Immunol.
+Clinical and Diagnostic Laboratory Immunology = Clin. Diagn. Lab. Immunol.
+Clinical and Diagnostic Virology = Clin. Diagn. Virol.
+Clinical and Experimental Allergy = Clin. Exp. Allergy
+Clinical and Experimental Dermatology = Clin. Exp. Dermatol.
+Clinical and Experimental Dialysis and Apheresis = Clin. Exp. Dial. Apheresis
+Clinical and Experimental Hypertension = Clin. Exp. Hypertens.
+Clinical and Experimental Hypertension. Part A, Theory and Practice = Clin. Exp. Hypertens. A.
+Clinical and Experimental Hypertension. Part B, Hypertension in Pregnancy = Clin. Exp. Hypertens. B.
+Clinical and Experimental Immunology = Clin. Exp. Immunol.
+Clinical and Experimental Medicine = Clin. Exp. Med.
+Clinical and Experimental Metastasis = Clin. Exp. Metastasis
+Clinical and Experimental Neurology = Clin. Exp. Neurol.
+Clinical and Experimental Obstetrics and Gynecology = Clin. Exp. Obstet. Gynecol.
+Clinical and Experimental Ophthalmology = Clin. Experiment. Ophthalmol.
+Clinical and Experimental Pathology = Clin. Exp. Pathol.
+Clinical and Experimental Pharmacology and Physiology = Clin. Exp. Pharmacol. Physiol.
+Clinical and Experimental Pharmacology and Physiology. Supplement = Clin. Exp. Pharmacol. Physiol. Suppl.
+Clinical and Experimental Rheumatology = Clin. Exp. Rheumatol.
+Clinical and Investigative Medicine = Clin. Invest. Med.
+Clinical and Laboratory Haematology = Clin. Lab. Haematol.
+Clinical and Translational Oncology = Clin. Transl. Oncol.
+Clinical and Vaccine Immunology = Clin. Vaccine Immunol.
+Clinics = Clinics
+Clinics in Chest Medicine = Clin. Chest Med.
+Clinics in Communication Disorders = Clin. Commun. Disord.
+Clinics in Dermatology = Clin. Dermatol.
+Clinics in Diagnostic Ultrasound = Clin. Diagn. Ultrasound
+Clinics in Endocrinology and Metabolism = Clin. Endocrinol. Metab.
+Clinics in Gastroenterology = Clin. Gastroenterol.
+Clinics in Geriatric Medicine = Clin. Geriatr. Med.
+Clinics in Haematology = Clin. Haematol.
+Clinics in Laboratory Medicine = Clin. Lab. Med.
+Clinics in Liver Disease = Clin. Liver Dis.
+Clinics in Obstetrics and Gynaecology = Clin. Obstet. Gynaecol.
+Clinics in Occupational and Environmental Medicine = Clin. Occup. Environ. Med.
+Clinics in Perinatology = Clin. Perinatol.
+Clinics in Plastic Surgery = Clin. Plast. Surg.
+Clinics in Podiatric Medicine and Surgery = Clin. Podiatr. Med. Surg.
+Clinics in Podiatry = Clin. Podiatry
+Clinics in Rheumatic Diseases = Clin. Rheum. Dis.
+Clinics in Sports Medicine = Clin. Sports Med.
+Clinique = Clinique (Paris)
+Clio Medica = Clio Med.
+Cloning = Cloning
+Cloning and Stem Cells = Cloning Stem Cells
+Coal Preparation (Philadelphia, PA, United States)=Coal Prep. (Philadelphia, PA, U. S.);COAPDY;6/YR
+Coeur et Medecine Interne = Coeur Med. Interne
+Cognition = Cognition
+Cognitive Behaviour Therapy = Cogn. Behav. Ther.
+Cognitive Psychology = Cognit. Psychol.
+Cognitive and Behavioral Neurology = Cogn. Behav. Neurol.
+Cognitive, Affective and Behavioral Neuroscience = Cogn. Affect. Behav. Neurosci.
+Cold Spring Harbor Symposia on Quantitative Biology = Cold Spring Harb. Symp. Quant. Biol.
+Collagen and Related Research = Coll. Relat. Res.
+Collected Works on Cardiopulmonary Disease = Coll. Works Cardiopulm. Dis.
+Collection of Czechoslovak Chemical Communications=Collect. Czech. Chem. Commun.;CCCCAK;M
+College Review = Coll. Rev.
+Collegian = Collegian
+Collegium Antropologicum = Coll. Antropol.
+Colloid Journal=Colloid J.;CJRSEQ;BM
+Colloid and Polymer Science=Colloid Polym. Sci.;CPMSB6;M
+Colloids and Surfaces, A: Physicochemical and Engineering Aspects=Colloids Surf., A;CPEAEH;24/YR
+Colloids and Surfaces, B: Biointerfaces=Colloids Surf., B;CSBBEQ;28/YR
+Colorado Medicine = Colo. Med.
+Colorado Nurse = Colo. Nurse
+Coloration Technology=Color. Technol.;CTOEAZ;BM
+Columbia Law Review = Columbia Law Rev.
+Columbus Dental Society Bulletin = Columbus Dent. Soc. Bull.
+Combinatorial Chemistry and High Throughput Screening = Comb. Chem. High Throughput Screen.
+Combustion Science and Technology=Combust. Sci. Technol.;CBSTB9;M
+Combustion and Flame=Combust. Flame;CBFMAO;M
+Comments on Inorganic Chemistry=Comments Inorg. Chem.;COICDZ;BM
+Commitment = Commitment
+Communicable Disease Report. CDR Review = Commun. Dis. Rep. CDR Rev.
+Communicable Disease Report. CDR Supplement = Comun. Dis. Rep. CDR Suppl.
+Communicable Disease Report. CDR Weekly = Commun. Dis. Rep. CDR Wkly.
+Communicable Disease and Public Health = Commun. Dis. Public Health
+Communicable Diseases Intelligence = Commun. Dis. Intell.
+Communicating Nursing Research = Commun. Nurs. Res.
+Communication and Medicine = Commun. Med.
+Communications in Agricultural and Applied Biological Sciences = Commun. Agric. Appl. Biol. Sci.
+Communications in Behavioral Biology. Part A, Original Articles = Commun. Behav. Biol.
+Communications in Psychopharmacology = Commun. Psychopharmacol.
+Communications in Soil Science and Plant Analysis=Commun. Soil Sci. Plant Anal.;CSOSA2;20/YR
+Communications on Pure and Applied Mathematics = Commun. Pure Appl. Math.
+Communique = Communique
+Communique Newsletter = Commun. Newsl.
+Community Dental Health = Community Dent. Health
+Community Dentistry and Oral Epidemiology = Community Dent. Oral Epidemiol.
+Community Health = Community Health (Bristol)
+Community Health Studies = Community Health Stud.
+Community Medicine = Community Med.
+Community Mental Health Journal = Community Ment. Health J.
+Community Mental Health Review = Community Ment. Health Rev.
+Community Nurse = Community Nurse
+Community Nursing = Community Nurs.
+Community Outlook = Community Outlook
+Community and Junior College Journal = Community Jr. Coll. J.
+Comparative Biochemistry and Physiology = Comp. Biochem. Physiol.
+Comparative Biochemistry and Physiology, Part A: Molecular & Integrative Physiology=Comp. Biochem. Physiol., Part A: Mol. Integr. Physiol.;CBPAB5;M
+Comparative Biochemistry and Physiology, Part B: Biochemistry & Molecular Biology=Comp. Biochem. Physiol., Part B: Biochem. Mol. Biol.;CBPBB8;M
+Comparative Biochemistry and Physiology, Part C: Toxicology & Pharmacology=Comp. Biochem. Physiol., Part C: Toxicol. Pharmacol.;CBPPFK;M
+Comparative Biochemistry and Physiology. A, Comparative Physiology = Comp. Biochem. Physiol. A
+Comparative Biochemistry and Physiology. B, Comparative Biochemistry = Comp. Biochem. Physiol. B
+Comparative Biochemistry and Physiology. Biochemistry and Molecular Biology = Comp. Biochem. Physiol. Biochem. Mol. Biol.
+Comparative Biochemistry and Physiology. C, Comparative Pharmacology = Comp. Biochem. Physiol. C
+Comparative Biochemistry and Physiology. C, Comparative Pharmacology and Toxicology. = Comp. Biochem. Physiol. C
+Comparative Biochemistry and Physiology. Comparative Physiology = Comp. Biochem. Physiol. Comp. Physiol.
+Comparative Biochemistry and Physiology. Part A, Molecular and Integrative Physiology = Comp. Biochem. Physiol. A. Mol. Integr. Physiol.
+Comparative Biochemistry and Physiology. Part A, Physiology = Comp. Biochem. Physiol. A Physiol.
+Comparative Biochemistry and Physiology. Part B, Biochemistry and Molecular Biology = Comp. Biochem. Physiol. B Biochem. Mol. Biol.
+Comparative Biochemistry and Physiology. Part C, Pharmacology, Toxicology and Endocrinology = Comp. Biochem. Physiol. C Pharmacol. Toxicol. Endocrinol.
+Comparative Biochemistry and Physiology. Pharmacology, Toxicology and Endocrinology = Comp. Biochem. Physiol. Pharmacol. Toxicol. Endocrinol.
+Comparative Biochemistry and Physiology. Physiology = Comp. Biochem. Physiol. Physiol.
+Comparative Biochemistry and Physiology. Toxicology and Pharmacology = Comp. Biochem. Physiol. C Toxicol. Pharmacol.
+Comparative Immunology, Microbiology and Infectious Diseases = Comp. Immunol. Microbiol. Infect. Dis.
+Comparative Medicine = Comp. Med.
+Comparative Medicine East and West = Comp. Med. East West
+Comparative and Functional Genomics=Comp. Funct. Genomics;CFGOAT;8/YR
+Comparative and General Pharmacology = Comp. Gen. Pharmacol.
+Compendium = Compendium
+Compendium of Continuing Education in Dentistry = Compend. Contin. Educ. Dent.
+Compendium. Supplement = Compend. Suppl.
+Compensation Review = Compens. Rev.
+Compensation and Benefits Review = Compens. Benefits Rev.
+Complement = Complement
+Complement and Inflammation = Complement Inflamm.
+Complementary Therapies in Medicine = Complement. Ther. Med.
+Complementary Therapies in Nursing and Midwifery = Complement. Ther. Nurs. Midwifery
+Comprehensive Gerontology. Section A, Clinical and Laboratory Sciences = Compr. Gerontol. [A]
+Comprehensive Gerontology. Section B, Behavioural, Social and Applied Sciences = Compr. Gerontol. [B]
+Comprehensive Gerontology. Section C, Interdisciplinary Topics = Compr. Gerontol. [C]
+Comprehensive Psychiatry = Compr. Psychiatry
+Comprehensive Therapy = Compr. Ther.
+Comptes Rendus Biologies = C. R. Biol.
+Comptes Rendus Chimie=C. R. Chim.;CRCOCR;M
+Comptes Rendus Hebdomadaires des Seances de l'Academie des Sciences. D, Sciences Naturelles = C. R. Acad. Sci. Hebd. Seances Acad. Sci. D
+Comptes Rendus Physique=C. R. Phys.;CRPOBN;10/YR
+Comptes Rendus de l Association des Anatomistes = C. R. Assoc. Anat.
+Comptes Rendus de l'Academie des Sciences. Serie III, Sciences de la Vie = C. R. Acad. Sci. III
+Comptes Rendus des Seances de l Academie des Sciences. Serie III, Sciences de la Vie = C. R. Seances Acad. Sci. III
+Comptes Rendus des Seances de l'Academie des Sciences. Serie D, Sciences Naturelles = C. R. Seances Acad. Sci. D.
+Comptes Rendus des Seances de la Societe de Biologie et de Ses Filiales = C. R. Seances Soc. Biol. Fil.
+Comptes Rendus des Travaux du Laboratoire Carlsberg = C. R. Trav. Lab. Carlsberg
+Computational Biology and Chemistry = Comput. Biol. Chem.
+Computer Aided Surgery = Comput. Aided Surg.
+Computer Applications in the Biosciences = Comput. Appl. Biosci.
+Computer Methods and Programs in Biomedicine = Comput. Methods Programs Biomed.
+Computer Methods in Biomechanics and Biomedical Engineering = Comput. Methods Biomech. Biomed. Engin.
+Computer Physics Communications=Comput. Phys. Commun.;CPHCBZ;SM
+Computer Programs in Biomedicine = Comput. Programs Biomed.
+Computerized Medical Imaging and Graphics = Comput. Med. Imaging Graph.
+Computerized Radiology = Comput. Radiol.
+Computerized Tomography = Comput. Tomogr.
+Computers & Chemical Engineering=Comput. Chem. Eng.;CCENDW;M
+Computers and Biomedical Research = Comput. Biomed. Res.
+Computers and Chemistry = Comput. Chem.
+Computers in Biology and Medicine = Comput. Biol. Med.
+Computers in Healthcare = Comput. Healthc.
+Computers in Hospitals = Comput. Hosp.
+Computers in Nursing = Comput. Nurs.
+Computers, Informatics, Nursing = Comput. Inform. Nurs.
+Computertomographie = Computertomographie
+Comunicaciones presentadas a las Jornadas del Comite Espanol de la Detergencia=Comun. Jorn. Com. Esp. Deterg.;CJCDD7;A
+Concepts in Immunopathology = Concepts Immunopathol.
+Concern = Concern
+Concern in Care of the Aging = Concern Care Aging
+Concours Medical = Concours Med.
+Conditional Reflex = Cond. Reflex
+Conector = Conector
+Confederation of the Australian Critical Care Nurses Journal = Confed. Aust. Crit. Care Nurses J.
+Confinia Neurologica = Confin. Neurol.
+Confinia Psychiatrica = Confin. Psychiatr.
+Confrontations Radio-Anatomo-Cliniques = Confront. Radio. Anat. Clin.
+Congestive Heart Failure = Congest. Heart Fail.
+Congres International de Stomatologie = Congr. Int. Stomatol.
+Connecticut Dental Student Journal = Conn. Dent. Stud. J.
+Connecticut Medicine = Conn. Med.
+Connecticut Nursing News = Conn. Nurs. News
+Connective Tissue Research = Connect. Tissue Res.
+Consciousness and Cognition = Conscious. Cogn.
+Consensus Development Conference Summaries, National Institutes of Health = Consens. Dev. Conf. Summ. Natl. Inst. Health
+Consensus Statement = Consens. Statement
+Consultant = Consultant
+Consulting-Specifying Engineer = Consult. Specif. Eng.
+Consumer Health Perspectives = Consum. Health Perspect.
+Consumer Reports = Consum. Rep.
+Contact Dermatitis = Contact Dermatitis
+Contact Point = Contact Point
+Contact and Intraocular Lens Medical Journal = Contact Intraocul. Lens Med. J.
+Contamination Control = Contam. Control
+Contemporary Administrator = Contemp. Adm.
+Contemporary Administrator for Long-Term Care = Contemp. Adm. Long. Term Care
+Contemporary Anesthesia Practice = Contemp. Anesth. Pract.
+Contemporary Clinical Trials = Contemp. Clin. Trials
+Contemporary Educational Psychology = Contemp. Educ. Psychol.
+Contemporary Internal Medicine = Contemp. Intern. Med.
+Contemporary Issues in Clinical Biochemistry = Contemp. Issues Clin. Biochem.
+Contemporary Longterm Care = Contemp. Longterm Care
+Contemporary Neurology Series = Contemp. Neurol. Ser.
+Contemporary Nurse = Contemp. Nurse
+Contemporary Orthopaedics = Contemp. Orthop.
+Contemporary Pediatrics = Contemp. Pediatr.
+Contemporary Pharmacy Practice = Contemp. Pharm. Pract.
+Contemporary Surgery = Contemp. Surg.
+Contemporary Topics in Immunobiology = Contemp. Top. Immunobiol.
+Contemporary Topics in Laboratory Animal Science=Contemp. Top. Lab. Anim. Sci.;CTLAA8;BM
+Contemporary Topics in Molecular Immunology = Contemp. Top. Mol. Immunol.
+Contemporary Urology = Contemp. Urol.
+Continental Shelf Research = Cont. Shelf Res.
+Continuing Care = Contin. Care
+Continuum = Continuum
+Contraception = Contraception
+Contraception, Fertilite, Sexualite = Contracept. Fertil. Sex. (Paris)
+Contract = Contract
+Contract Design = Contract Des.
+Contract Healthcare = Contract Healthc.
+Contract Interiors = Contract Inter.
+Contributions to Atmospheric Physics = Contrib. Atmos. Phys.
+Contributions to Gynecology and Obstetrics = Contrib. Gynecol. Obstet.
+Contributions to Microbiology = Contrib. Microbiol.
+Contributions to Microbiology and Immunology = Contrib. Microbiol. Immunol.
+Contributions to Mineralogy and Petrology=Contrib. Mineral. Petrol.;CMPEAP;M
+Contributions to Nephrology = Contrib. Nephrol.
+Contributions to Primatology = Contrib. Primatol.
+Contributions to Sensory Physiology = Contrib. Sens. Physiol.
+Controlled Clinical Trials = Control. Clin. Trials
+Convulsive Therapy = Convuls. Ther.
+Cooperador Dental = Coop. Dent. (B. Aires)
+Coordination Chemistry Reviews=Coord. Chem. Rev.;CCHRAM;M
+Cor et Vasa = Cor Vasa
+Cornea = Cornea
+Cornell Hotel and Restaurant Administration Quarterly = Cornell Hotel Restaur. Adm. Q.
+Cornell Journal of Law and Public Policy = Cornell J. Law Public Policy
+Cornell Law Review = Cornell Law Rev.
+Cornell Veterinarian = Cornell Vet.
+Coronary Artery Disease = Coron. Artery Dis.
+Corporate Commentary = Corp. Comment.
+Corps Medical = Corps Med. (Ettelbruck)
+Corrosion (Houston, TX, United States)=Corrosion (Houston, TX, U. S.);CORRAK;M
+Corrosion Engineering, Science and Technology=Corros. Eng., Sci. Technol.;CESTBU;Q
+Corrosion Reviews=Corros. Rev.;CORVE2;Q
+Corrosion Science=Corros. Sci.;CRRSAA;M
+Cortex = Cortex
+Cosmetologica = Cosmetologica
+Cost Containment = Cost Containment
+Cost and Quality Quarterly Journal = Cost Qual. Q. J.
+Cranio = Cranio
+Cranio Clinics International = Cranio Clin. Int.
+Creative Nursing = Creat. Nurs.
+Crisis = Crisis
+Critical Care = Crit. Care
+Critical Care Clinics = Crit. Care Clin.
+Critical Care Medicine = Crit. Care Med.
+Critical Care Nurse = Crit. Care Nurse
+Critical Care Nursing Clinics of North America = Crit. Care Nurs. Clin. North Am.
+Critical Care Nursing Quarterly = Crit. Care Nurs. Q.
+Critical Care Update = Crit. Care Update
+Critical Reviews in Analytical Chemistry=Crit. Rev. Anal. Chem.;CCACBB;Q
+Critical Reviews in Biochemistry and Molecular Biology = Crit. Rev. Biochem. Mol. Biol.
+Critical Reviews in Biomedical Engineering = Crit. Rev. Biomed. Eng.
+Critical Reviews in Biotechnology = Crit. Rev. Biotechnol.
+Critical Reviews in Clinical Laboratory Sciences = Crit. Rev. Clin. Lab. Sci.
+Critical Reviews in Computed Tomography = Crit. Rev. Comput. Tomogr.
+Critical Reviews in Diagnostic Imaging = Crit. Rev. Diagn. Imaging
+Critical Reviews in Eukaryotic Gene Expression = Crit. Rev. Eukaryot. Gene Expr.
+Critical Reviews in Food Science and Nutrition = Crit. Rev. Food Sci. Nutr.
+Critical Reviews in Immunology = Crit. Rev. Immunol.
+Critical Reviews in Medical Informatics = Crit. Rev. Med. Inform.
+Critical Reviews in Microbiology = Crit. Rev. Microbiol.
+Critical Reviews in Neurobiology = Crit. Rev. Neurobiol.
+Critical Reviews in Oncogenesis = Crit. Rev. Oncog.
+Critical Reviews in Oncology/Hematology = Crit. Rev. Oncol. Hematol.
+Critical Reviews in Oral Biology and Medicine = Crit. Rev. Oral Biol. Med.
+Critical Reviews in Solid State and Materials Sciences=Crit. Rev. Solid State Mater. Sci.;CCRSDA;Q
+Critical Reviews in Therapeutic Drug Carrier Systems = Crit. Rev. Ther. Drug Carrier Syst.
+Critical Reviews in Toxicology = Crit. Rev. Toxicol.
+Croatian Medical Journal = Croat. Med. J.
+Croatica Chemica Acta=Croat. Chem. Acta;CCACAA;Q
+Cross-Reference = Crossreference.
+Cross-Reference on Human Resources Management = Crossref. Hum. Resour. Manage.
+Cryobiology = Cryobiology
+Cryogenics=Cryogenics;CRYOAX;M
+CrystEngComm=CrystEngComm;CRECF4;IRR
+Crystal Growth & Design=Cryst. Growth Des.;CGDEFU;BM
+Crystal Research and Technology=Cryst. Res. Technol.;CRTEDF;12/YR
+Crystallography Reports=Crystallogr. Rep.;CYSTE3;BM
+Cuihua Xuebao=Cuihua Xuebao;THHPD3;M
+Cultural Diversity and Ethnic Minority Psychology = Cultur. Divers. Ethnic Minor. Psychol.
+Culture, Medicine and Psychiatry = Cult. Med. Psychiatry
+Cuore e Circolazione = Cuore Circ.
+Curationis = Curationis
+Current Allergy Reports = Curr. Allergy Rep.
+Current Allergy and Asthma Reports = Curr. Allergy Asthma Rep.
+Current Alzheimer Research = Curr. Alzheimer Res.
+Current Analytical Chemistry=Curr. Anal. Chem.;CACUBR;3/YR
+Current Atherosclerosis Reports = Curr. Atheroscler. Rep.
+Current Biology = Curr. Biol.
+Current Cancer Drug Targets = Curr. Cancer Drug Targets
+Current Cardiology Reports = Curr. Cardiol. Rep.
+Current Clinical Topics in Infectious Diseases = Curr. Clin. Top. Infect. Dis.
+Current Computer-Aided Drug Design=Curr. Comput.-Aided Drug Des.;CCDDAS;4/YR
+Current Concepts in Hospital Pharmacy Management = Curr. Concepts Hosp. Pharm. Manage.
+Current Concepts in Nutrition = Curr. Concepts Nutr.
+Current Developments in Psychopharmacology = Curr. Dev. Psychopharmacol.
+Current Diabetes Reports = Curr. Diab. Rep.
+Current Directions in Autoimmunity = Curr. Dir. Autoimmun.
+Current Drug Delivery = Curr. Drug Deliv.
+Current Drug Discovery Technologies = Curr. Drug Discov. Technol.
+Current Drug Metabolism = Curr. Drug Metab.
+Current Drug Targets = Curr. Drug Targets
+Current Drug Targets: CNS & Neurological Disorders=Curr. Drug Targets: CNS Neurol. Disord.;CDTCCC;6/YR
+Current Drug Targets: Cardiovascular & Haematological Disorders=Curr. Drug Targets: Cardiovasc. & Haematol. Disord.;CDTCBB;6/YR
+Current Drug Targets: Immune, Endocrine and Metabolic Disorders=Curr. Drug Targets: Immune, Endocr. Metab. Disord.;CDTIBT;4/YR
+Current Drug Targets: Infectious Disorders=Curr. Drug Targets: Infect. Disord.;CDTIAS;Q
+Current Drug Targets: Inflammation & Allergy=Curr. Drug Targets: Inflammation Allergy;CDTICU;BM
+Current Enzyme Inhibition=Curr. Enzyme Inhib.;CEIUAG;3/YR
+Current Eye Research = Curr. Eye Res.
+Current Gastroenterology Reports = Curr. Gastroenterol. Rep.
+Current Gene Therapy = Curr. Gene Ther.
+Current Genetics = Curr. Genet.
+Current Genomics=Curr. Genomics;CGUEA8;8/YR
+Current HIV Research = Curr. HIV Res.
+Current HIV/AIDS Reports = Curr. HIV/AIDS Rep.
+Current Heart Failure Reports = Curr. Heart Fail. Rep.
+Current Hematologic Malignancy Reports = Curr. Hematol. Malig. Rep.
+Current Hypertension Reports = Curr. Hypertens. Rep.
+Current Immunology Reviews=Curr. Immunol. Rev.;CIRUBM;3/YR
+Current Issues in Intestinal Microbiology = Curr. Issues Intest. Microbiol.
+Current Issues in Molecular Biology = Curr. Issues Mol. Biol.
+Current Medical Research and Opinion = Curr. Med. Res. Opin.
+Current Medicinal Chemistry = Curr. Med. Chem.
+Current Medicinal Chemistry: Anti-Cancer Agents=Curr. Med. Chem.: Anti-Cancer Agents;CMCACI;BM
+Current Medicinal Chemistry: Anti-Infective Agents=Curr. Med. Chem.: Anti-Infect. Agents;CMCAFL;4/YR
+Current Medicinal Chemistry: Anti-Inflammatory & Anti-Allergy Agents=Curr. Med. Chem.: Anti-Inflammatory Anti-Allergy Agents;CMCAGM;6/YR
+Current Medicinal Chemistry: Cardiovascular & Hematological Agents=Curr. Med. Chem.: Cardiovasc. Hematol. Agents;CMCCDP;4/YR
+Current Medicinal Chemistry: Central Nervous System Agents=Curr. Med. Chem.: Cent. Nerv. Syst. Agents;CMCCCO;Q
+Current Medicinal Chemistry: Immunology, Endocrine & Metabolic Agents=Curr. Med. Chem.: Immunol., Endocr. Metab. Agents;CMCIC8;6/YR
+Current Medicine and Drugs = Curr. Med. Drugs
+Current Microbiology = Curr. Microbiol.
+Current Molecular Medicine = Curr. Mol. Med.
+Current Neurology and Neuroscience Reports = Curr. Neurol. Neurosci. Rep.
+Current Neuropharmacology=Curr. Neuropharmacol.;CNUEAN;Q
+Current Neurovascular Research = Curr. Neurovasc. Res.
+Current Oncology Reports = Curr. Oncol. Rep.
+Current Opinion in Allergy and Clinical Immunology = Curr. Opin. Allergy Clin. Immunol.
+Current Opinion in Biotechnology = Curr. Opin. Biotechnol.
+Current Opinion in Cardiology = Curr. Opin. Cardiol.
+Current Opinion in Cell Biology = Curr. Opin. Cell Biol.
+Current Opinion in Chemical Biology = Curr. Opin. Chem. Biol.
+Current Opinion in Clinical Nutrition and Metabolic Care = Curr. Opin. Clin. Nutr. Metab. Care
+Current Opinion in Colloid & Interface Science=Curr. Opin. Colloid Interface Sci.;COCSFL;BM
+Current Opinion in Cosmetic Dentistry = Curr. Opin. Cosmet. Dent.
+Current Opinion in Dentistry = Curr. Opin. Dent.
+Current Opinion in Drug Discovery & Development=Curr. Opin. Drug Discovery Dev.;CODDFF;BM
+Current Opinion in Drug Discovery and Development = Curr. Opin. Drug Discov. Devel.
+Current Opinion in General Surgery = Curr. Opin. Gen. Surg.
+Current Opinion in Genetics & Development=Curr. Opin. Genet. Dev.;COGDET;BM
+Current Opinion in Genetics and Development = Curr. Opin. Genet. Dev.
+Current Opinion in Hematology = Curr. Opin. Hematol.
+Current Opinion in Immunology = Curr. Opin. Immunol.
+Current Opinion in Investigational Drugs = Curr. Opin. Investig. Drugs
+Current Opinion in Lipidology = Curr. Opin. Lipidol.
+Current Opinion in Microbiology = Curr. Opin. Microbiol.
+Current Opinion in Molecular Therapeutics = Curr. Opin. Mol. Ther.
+Current Opinion in Nephrology and Hypertension = Curr. Opin. Nephrol. Hypertens.
+Current Opinion in Neurobiology = Curr. Opin. Neurobiol.
+Current Opinion in Neurology = Curr. Opin. Neurol.
+Current Opinion in Neurology and Neurosurgery = Curr. Opin. Neurol. Neurosurg.
+Current Opinion in Obstetrics and Gynecology = Curr. Opin. Obstet. Gynecol.
+Current Opinion in Oncology = Curr. Opin. Oncol.
+Current Opinion in Ophthalmology = Curr. Opin. Ophthalmol.
+Current Opinion in Pediatrics = Curr. Opin. Pediatr.
+Current Opinion in Periodontology = Curr. Opin. Periodontol.
+Current Opinion in Pharmacology = Curr. Opin. Pharmacol.
+Current Opinion in Plant Biology = Curr. Opin. Plant Biol.
+Current Opinion in Pulmonary Medicine = Curr. Opin. Pulm. Med.
+Current Opinion in Radiology = Curr. Opin. Radiol.
+Current Opinion in Rheumatology = Curr. Opin. Rheumatol.
+Current Opinion in Structural Biology = Curr. Opin. Struct. Biol.
+Current Organic Chemistry=Curr. Org. Chem.;CORCFE;18/YR
+Current Organic Synthesis=Curr. Org. Synth.;COSUC2;4/YR
+Current Osteoporosis Reports = Curr. Osteoporos. Rep.
+Current Pain and Headache Reports = Curr. Pain Headache Rep.
+Current Pharmaceutical Analysis=Curr. Pharm. Anal.;CPAUBK;3/YR
+Current Pharmaceutical Biotechnology = Curr. Pharm. Biotechnol.
+Current Pharmaceutical Design = Curr. Pharm. Des.
+Current Pharmacogenomics=Curr. Pharmacogenomics;CPUHAC;Q
+Current Population Reports. Special Censuses. Series P-28 = Curr. Popul. Rep. [Spec. Censuses]
+Current Practice in Gerontological Nursing = Curr. Pract. Gerontol. Nurs.
+Current Practice in Obstetric and Gynecologic Nursing = Curr. Pract. Obstet. Gynecol. Nurs.
+Current Practice in Orthopaedic Surgery = Curr. Pract. Orthop. Surg.
+Current Practice in Pediatric Nursing = Curr. Pract. Pediatr. Nurs.
+Current Problems in Cancer = Curr. Probl. Cancer
+Current Problems in Cardiology = Curr. Probl. Cardiol.
+Current Problems in Clinical Biochemistry = Curr. Probl. Clin. Biochem.
+Current Problems in Dermatology = Curr. Probl. Dermatol.
+Current Problems in Diagnostic Radiology = Curr. Probl. Diagn. Radiol.
+Current Problems in Pediatric and Adolescent Health Care = Curr. Probl. Pediatr. Adolesc. Health Care
+Current Problems in Pediatrics = Curr. Probl. Pediatr.
+Current Problems in Surgery = Curr. Probl. Surg.
+Current Protein and Peptide Science = Curr. Protein Pept. Sci.
+Current Proteomics=Curr. Proteomics;CPURCA;4/YR
+Current Psychiatric Therapies = Curr. Psychiatr. Ther.
+Current Psychiatry Reports = Curr. Psychiatry Rep.
+Current Rheumatology Reports = Curr. Rheumatol. Rep.
+Current Science = Curr. Sci.
+Current Separations=Curr. Sep.;CUSEEW;IRR
+Current Sports Medicine Reports = Curr. Sports Med. Rep.
+Current Studies in Hematology and Blood Transfusion = Curr. Stud. Hematol. Blood Transfus.
+Current Surgery = Curr. Surg.
+Current Therapeutic Research, Clinical and Experimental = Curr. Ther. Res. Clin. Exp.
+Current Therapy in Endocrinology and Metabolism = Curr. Ther. Endocrinol. Metab.
+Current Topics in Cellular Regulation = Curr. Top. Cell. Regul.
+Current Topics in Comparative Pathobiology = Curr. Top. Comp. Pathobiol.
+Current Topics in Developmental Biology = Curr. Top. Dev. Biol.
+Current Topics in Experimental Endocrinology = Curr. Top. Exp. Endocrinol.
+Current Topics in Eye Research = Curr. Top. Eye Res.
+Current Topics in Hematology = Curr. Top. Hematol.
+Current Topics in Medical Mycology = Curr. Top. Med. Mycol.
+Current Topics in Medicinal Chemistry = Curr. Top. Med. Chem.
+Current Topics in Medicinal Chemistry (Sharjah, United Arab Emirates)=Curr. Top. Med. Chem. (Sharjah, United Arab Emirates);CTMCCL;16/YR
+Current Topics in Microbiology and Immunology = Curr. Top. Microbiol. Immunol.
+Current Topics in Molecular Endocrinology = Curr. Top. Mol. Endocrinol.
+Current Topics in Pathology = Curr. Top. Pathol.
+Current Topics in Radiation Research Quarterly = Curr. Top. Radiat. Res. Q.
+Current Treatment Options in Oncology = Curr. Treat. Options Oncol.
+Current Urology Reports = Curr. Urol. Rep.
+Current Vascular Pharmacology = Curr. Vasc. Pharmacol.
+Current Women's Health Reports = Curr. Womens Health Rep.
+Currents in Alcoholism = Curr. Alcohol.
+Currents in Modern Biology = Curr. Mod. Biol.
+Cutaneous and Ocular Toxicology = Cutan. Ocul. Toxicol.
+Cutis = Cutis
+Cyberpsychology and Behavior = Cyberpsychol. Behav.
+Cytobiologie = Cytobiologie
+Cytobios = Cytobios
+Cytogenetic and Genome Research = Cytogenet. Genome Res.
+Cytogenetics = Cytogenetics
+Cytogenetics and Cell Genetics = Cytogenet. Cell Genet.
+Cytokine = Cytokine
+Cytokine & Growth Factor Reviews=Cytokine Growth Factor Rev.;CGFRFB;BM
+Cytokine and Growth Factor Reviews = Cytokine Growth Factor Rev.
+Cytokine+=Cytokine+;CYTIE9;24/YR
+Cytokines = Cytokines
+Cytokines and Molecular Therapy = Cytokines Mol. Ther.
+Cytokines, Cellular and Molecular Therapy = Cytokines Cell. Mol. Ther.
+Cytologia = Cytologia (Tokyo)
+Cytometry = Cytometry
+Cytometry. Part A = Cytometry A
+Cytometry. Part B, Clinical Cytometry = Cytometry B Clin. Cytom.
+Cytometry. Supplement = Cytometry. Suppl.
+Cytopathology = Cytopathology
+Cytotechnology = Cytotechnology
+Cytotherapy = Cytotherapy
+Czasopismo Stomatologiczne = Czas. Stomatol.
+Czechoslovak Medicine = Czech. Med.
+DDZ: Das Deutsche Zahnarzteblatt = DDZ.
+DE: Journal of Dental Engineering = DE J. Dent. Eng.
+DICP = DICP
+DNA = DNA
+DNA Repair = DNA Repair
+DNA Research = DNA Res.
+DNA Sequence = DNA Seq.
+DNA and Cell Biology = DNA Cell Biol.
+DP Reports = DP Rep.
+DP: Dental Practice = Dent. Pract. (Ewell)
+DRG Monitor = DRG Monit.
+DTW: Deutsche Tierarztliche Wochenschrift = DTW Dtsch. Tierarztl. Wochenschr.
+Daedalus = Daedalus
+Dakar Medical = Dakar Med.
+Dalhousie Dental Journal = Dalhousie Dent. J.
+Dalton Transactions = Dalton Trans.
+Danish Medical Bulletin = Dan. Med. Bull.
+Dansk Tidsskrift for Farmaci = Dan. Tidsskr. Farm.
+Dapim Refuiim = Dapim Refuiim
+Data Strategies and Benchmarks = Data Strategies Benchmarks
+Deans List = Deans List
+Deans Notes = Deans Notes
+Death Education = Death Educ.
+Death Studies = Death Stud.
+Decubitus = Decubitus
+Deep-Sea Research = Deep-Sea Res.
+Delaware Medical Journal = Del. Med. J.
+Delaware Nurse = Del. Nurse
+Dementia = Dementia
+Dementia and Geriatric Cognitive Disorders = Dement. Geriatr. Cogn. Disord.
+Demography = Demography
+Dens = Dens
+Dens Sapiens = Dens Sapiens
+Dent: Contemporary Dentistry = Dent
+Dentago = Dentago
+Dental Abstracts = Dent. Abstr.
+Dental Anaesthesia and Sedation = Dent. Anaesth. Sedat.
+Dental Angles = Dent. Angles
+Dental Assistant = Dent. Assist.
+Dental Assistant Journal = Dent. Assist. J.
+Dental Assisting = Dent. Assist. (Waco Tx.)
+Dental Cadmos = Dent. Cadmos
+Dental Clinics of North America = Dent. Clin. North Am.
+Dental Concepts = Dent. Concepts
+Dental Delineator = Dent. Delin.
+Dental Dialogue = Dent. Dialogue
+Dental Dienst = Dent. Dienst
+Dental Digest = Dent. Dig.
+Dental Dimensions = Dent. Dimens.
+Dental Discourse = Dent. Discourse
+Dental Echo = Dent. Echo (Heidelb.)
+Dental Economics = Dent. Econ.
+Dental Health = Dent. Health (London)
+Dental Historian = Dent. Hist.
+Dental Hygiene = Dent. Hyg. (Chic.)
+Dental Hygienist = Dent. Hyg. (San Franc.)
+Dental Images = Dent. Images
+Dental Implantology Update = Dent. Implantol. Update
+Dental Journal = Dent. J.
+Dental Journal of Malaysia = Dent. J. Malays.
+Dental Journal of Malaysia and Singapore = Dent. J. Malaysia Singapore
+Dental Journal of Zambia = Dent. J. Zamb.
+Dental Lab Management Today = Dent. Lab Manage. Today
+Dental Labor = Dent. Labor (Munch.)
+Dental Laboratorie Bladet = Dent. Lab. Bl.
+Dental Laboratory Review = Dent. Lab. Rev.
+Dental Magazine and Oral Topics = Dent. Mag. Oral Top.
+Dental Management = Dent. Manage.
+Dental Materials = Dent. Mater.
+Dental Materials Journal = Dent. Mater. J.
+Dental Mirror = Dent. Mirror (Atlanta)
+Dental News = Dent. News (Lond.)
+Dental Office = Dent. Off.
+Dental Outlook = Dent. Outlook
+Dental Practice = Dent. Pract. (Cincinnati)
+Dental Practice Management = Dent. Pract. Manage.
+Dental Practitioner and Dental Record = Dent. Pract. Dent. Rec.
+Dental Press = Dent. Press
+Dental Radiography and Photography = Dent. Radiogr. Photogr.
+Dental School Quarterly, University of Texas Health Science Center at San Antonio = Dent. Sch. Q.
+Dental Student = Dent. Stud.
+Dental Survey = Dent. Surv.
+Dental Team = Dent. Team
+Dental Teamwork = Dent. Teamwork
+Dental Technician = Dent. Tech.
+Dental Therapeutics Newsletter = Dent. Ther. Newsl.
+Dental Update = Dent. Update
+Dental World = Dent. World
+Dental-Revue = Dent. Rev.
+Dentalhygienistnews = Dentalhygienistnews
+Dentalpractice = Dentalpractice
+Dentessence = Dentessence
+Dentist = Dentist
+Dentist News = Dent. News
+Dentistry = Dentistry
+Dentistry Today = Dent. Today
+Dentistry in Japan = Dent. Jpn. (Tokyo)
+Dentisuto (Dentist) = Dentisuto.
+Dento-Maxillo-Facial Radiology = Dentomaxillofac. Radiol.
+Dento-Maxillo-Facial Radiology. Supplement = Dentomaxillofac. Radiol. Suppl.
+Dentoral = Dentoral (Istanbul)
+Dentoscope = Dentoscope
+Depression = Depression
+Depression and Anxiety = Depress. Anxiety
+Dermatitis = Dermatitis
+Dermatologia Internationalis = Dermatol. Int.
+Dermatologic Clinics = Dermatol. Clin.
+Dermatologic Surgery = Dermatol. Surg.
+Dermatologica = Dermatologica
+Dermatologische Monatsschrift = Dermatol. Monatsschr.
+Dermatologische Wochenschrift = Dermatol. Wochenschr.
+Dermatology = Dermatology
+Dermatology Nursing = Dermatol. Nurs.
+Dermatology Online Journal = Dermatol. Online J.
+Dermatosen in Beruf und Umwelt (Occupational and Environmental Dermatoses) = Derm. Beruf Umwelt
+Desalination=Desalination;DSLNAH;36/YR
+Designed Monomers and Polymers=Des. Monomers Polym.;DMPOF3;6/YR
+Desmos = Desmos
+Detroit Dental Bulletin = Detroit Dent. Bull.
+Deutsche Apotheker Zeitung = Dtsch. Apoth. Ztg.
+Deutsche Gesundheitswesen = Dtsch. Gesundheitsw.
+Deutsche Hydrographische Zeitschrift = Dtsch. Hydrogr. Z.
+Deutsche Krankenpflegezeitschrift = Dtsch. Krankenpflegez.
+Deutsche Medizinische Wochenschrift = Dtsch. Med. Wochenschr.
+Deutsche Schwesternzeitung = Dtsch. Schwesternztg.
+Deutsche Stomatologie = Dtsch. Stomatol.
+Deutsche Tierarztliche Wochenschrift = Dtsch. Tierarztl. Wochenschr.
+Deutsche Zahn-, Mund- und Kieferheilkunde mit Zentralblatt fur die Gesamte Zahn-, Mund- und Kieferheilkunde = Dtsch. Zahn Mund Kieferheilkd. Zentralbl. Gesamte
+Deutsche Zahn-, Mund-, und Kieferheilkunde mit Zentralblatt = Dtsch. Zahn Mund Kieferheilkd. Zentralbl.
+Deutsche Zahnarztliche Zeitschrift = Dtsch. Zahnarztl. Z.
+Deutsche Zeitschrift fur Mund-, Kiefer-, und Gesichts-Chirurgie = Dtsch. Z. Mund Kiefer Gesichtschir.
+Deutsche Zeitschrift fur Nervenheilkunde = Dtsch. Z. Nervenheilkd.
+Deutsche Zeitschrift fur Verdauungs- und Stoffwechselkrankheiten = Dtsch. Z. Verdau. Stoffwechselkr.
+Deutsche Zeitschrift fur die Gesamte Gerichtliche Medizin = Dtsch. Z. Gesamte Gerichtl. Med.
+Deutsches Archiv fur Klinische Medizin = Dtsch. Arch. Klin. Med.
+Deutsches Medizinisches Journal = Dtsch. Med. J.
+Deutsches Zentralblatt fur Krankenpflege = Dtsch. Zentralbl. Krankenpfl.
+Development = Development
+Development (Cambridge, United Kingdom)=Development (Cambridge, U. K.);DEVPED;SM
+Development Genes and Evolution = Dev. Genes Evol.
+Development Growth and Differentiation = Dev. Growth Differ.
+Development and Psychopathology = Dev. Psychopathol.
+Development. Supplement = Dev. Suppl.
+Developmental Biology = Dev. Biol.
+Developmental Biology (San Diego, CA, United States)=Dev. Biol. (San Diego, CA, U. S.);DEBIAO;SM
+Developmental Brain Research=Dev. Brain Res.;DBRRDB;14/YR
+Developmental Cell = Dev. Cell
+Developmental Dynamics = Dev. Dyn.
+Developmental Genetics = Dev. Genet.
+Developmental Immunology = Dev. Immunol.
+Developmental Medicine and Child Neurology = Dev. Med. Child Neurol.
+Developmental Medicine and Child Neurology. Supplement = Dev. Med. Child Neurol. Suppl.
+Developmental Neuroscience = Dev. Neurosci.
+Developmental Neuroscience (Basel, Switzerland)=Dev. Neurosci. (Basel, Switz.);DENED7;BM
+Developmental Pharmacology and Therapeutics = Dev. Pharmacol. Ther.
+Developmental Psychobiology = Dev. Psychobiol.
+Developmental Psychology = Dev. Psychol.
+Developmental Review = Dev. Rev.
+Developmental and Comparative Immunology = Dev. Comp. Immunol.
+Developments in Biological Standardization = Dev. Biol. Stand.
+Developments in Biologicals = Dev. Biol.
+Developments in Biologicals (Basel, Switzerland)=Dev. Biol. (Basel, Switz.);DBEIAI;IRR
+Developments in Health Economics and Public Policy = Dev. Health Econ. Public Policy
+Developments in Ophthalmology = Dev. Ophthalmol.
+Developments in Toxicology and Environmental Science = Dev. Toxicol. Environ. Sci.
+Diabete = Diabete
+Diabetes = Diabetes
+Diabetes Care = Diabetes Care
+Diabetes Educator = Diabetes Educ.
+Diabetes Research = Diabetes Res.
+Diabetes Research and Clinical Practice = Diabetes Res. Clin. Pract.
+Diabetes Research and Clinical Practice. Supplement = Diabetes Res. Clin. Pract. Suppl.
+Diabetes Technology and Therapeutics = Diabetes Technol. Ther.
+Diabetes and Metabolism = Diabetes Metab.
+Diabetes and Vascular Disease Research = Diab. Vasc. Dis. Res.
+Diabetes, Obesity and Metabolism = Diabetes Obes. Metab.
+Diabetes/Metabolism Research and Reviews = Diabetes Metab. Res. Rev.
+Diabetes/Metabolism Reviews = Diabetes. Metab. Rev.
+Diabetic Medicine = Diabet. Med.
+Diabetologia = Diabetologia
+Diagnostic Cytopathology = Diagn. Cytopathol.
+Diagnostic Gynecology and Obstetrics = Diagn. Gynecol. Obstet.
+Diagnostic Histopathology = Diagn. Histopathol.
+Diagnostic Imaging = Diagn. Imaging
+Diagnostic Imaging in Clinical Medicine = Diagn. Imaging Clin. Med.
+Diagnostic Immunology = Diagn. Immunol.
+Diagnostic Microbiology and Infectious Disease = Diagn. Microbiol. Infect. Dis.
+Diagnostic Molecular Pathology = Diagn. Mol. Pathol.
+Diagnostic and Clinical Immunology = Diagn. Clin. Immunol.
+Diagnostic and Interventional Radiology = Diagn. Interv. Radiol.
+Dialog: Fairleigh Dickinson University School of Dentistry = Dialog. Fairleigh Dickinson Univ. Sch. Dent.
+Diamond = Diamond
+Diamond and Related Materials=Diamond Relat. Mater.;DRMTE3;M
+Dianhuaxue=Dianhuaxue;DIANFX;Q
+Diastema = Diastema
+Dicle University Tip Fakultesi Dergisitesi = Dicle Univ. Tip Fakul. Derg.
+Differentiation = Differentiation
+Differentiation (Malden, MA, United States)=Differentiation (Malden, MA, U. S.);DFFNAW;10/YR
+Diffusion and Defect Data--Solid State Data, Pt. A: Defect and Diffusion Forum=Diffus. Defect Data, Pt. A;DDAFE7;12/YR
+Diffusion and Defect Data--Solid State Data, Pt. B: Solid State Phenomena=Diffus. Defect Data, Pt. B;DDBPE8;6/YR
+Digestion = Digestion
+Digestive Diseases = Dig. Dis.
+Digestive Diseases and Sciences = Dig. Dis. Sci.
+Digestive Surgery = Dig. Surg.
+Digestive and Liver Disease = Dig. Liver Dis.
+Digitale Bilddiagnostik = Digitale Bilddiagn.
+Dimensions = Dimensions (Wash.)
+Dimensions in Health Service = Dimens. Health Serv.
+Dimensions in Oncology Nursing = Dimens. Oncol. Nurs.
+Dimensions of Critical Care Nursing = Dimens. Crit. Care Nurs.
+Diqiu Huaxue=Diqiu Huaxue;TCHHCB;BM
+Director = Director
+Directors and Boards = Dir. Boards
+Disability and Rehabilitation = Disabil. Rehabil.
+Disasters = Disasters
+Discharge Planning Update = Disch. Plann. Update
+Discovery Medicine = Discov. Med.
+Discussions of the Faraday Society = Discuss. Faraday Soc.
+Disease Markers = Dis. Markers
+Disease-a-Month = Dis. Mon.
+Diseases of Aquatic Organisms = Dis. Aquat. Organ.
+Diseases of the Chest = Dis. Chest
+Diseases of the Colon and Rectum = Dis. Colon Rectum
+Diseases of the Esophagus = Dis. Esophagus
+Diseases of the Nervous System = Dis. Nerv. Syst.
+Diskussionsforum Medizinische Ethik = Diskussionsforum Med. Ethik
+District Nursing = Dist. Nurs.
+Divulgacion Cultural Odontologica = Divulg. Cult. Odontol.
+Documenta Ophthalmologica = Doc. Ophthalmol.
+Doklady Akademii Nauk = Dokl. Akad. Nauk
+Doklady Akademii Nauk SSSR = Dokl. Akad. Nauk SSSR
+Doklady Biochemistry and Biophysics=Dokl. Biochem. Biophys.;DBBOAL;BM
+Doklady Bolgarskoi Akademii Nauk = Dokl. Bolg. Akad. Nauk
+Doklady Chemistry=Dokl. Chem.;DKCHAY;M
+Doklady Earth Sciences=Dokl. Earth Sci.;DESOAP;9/YR
+Doklady Physical Chemistry=Dokl. Phys. Chem.;DKPCAG;M
+Doklady Physics=Dokl. Phys.;DOPHFU;M
+Doklady. Biochemistry and Biophysics = Dokl. Biochem. Biophys.
+Domestic Animal Endocrinology = Domest. Anim. Endocrinol.
+Dopovidi Natsional'noi Akademii Nauk Ukraini=Dopov. Nats. Akad. Nauk Ukr.;DNAUFL;M
+Drug Delivery=Drug Delivery;DDELEB;BM
+Drug Design and Delivery = Drug Des. Deliv.
+Drug Design and Discovery = Drug Des. Discov.
+Drug Development Research=Drug Dev. Res.;DDREDK;M
+Drug Development and Industrial Pharmacy = Drug Dev. Ind. Pharm.
+Drug Information Journal = Drug Inf. J.
+Drug Intelligence and Clinical Pharmacy = Drug Intell. Clin. Pharm.
+Drug Metabolism Reviews = Drug Metab. Rev.
+Drug Metabolism and Disposition = Drug Metab. Dispos.
+Drug Metabolism and Drug Interactions = Drug Metabol. Drug Interact.
+Drug Metabolism and Pharmacokinetics = Drug Metab. Pharmacokinet.
+Drug Resistance Updates = Drug Resist. Updat.
+Drug Safety = Drug Saf.
+Drug Therapeutics = Drug Ther.
+Drug and Alcohol Dependence = Drug Alcohol Depend.
+Drug and Chemical Toxicology = Drug Chem. Toxicol.
+Drug and Chemical Toxicology (1977)=Drug Chem. Toxicol. (1977);DCTODJ;Q
+Drug and Therapeutics Bulletin = Drug Ther. Bull.
+Drug-Nutrient Interactions = Drug. Nutr. Interact.
+Drugs = Drugs
+Drugs Under Experimental and Clinical Research = Drugs Exp. Clin. Res.
+Drugs and Aging = Drugs Aging
+Drugs in R and D = Drugs R. D.
+Duke Law Journal = Duke Law J.
+Duodecim = Duodecim
+Dyes and Pigments=Dyes Pigm.;DYPIDX;M
+Dynamics of Atmospheres and Oceans = Dyn. Atmos. Oceans
+Dysphagia = Dysphagia
+E-ITV: Educational and Industrial Television = EITV
+EBRI Issue Brief = EBRI Issue Brief
+ED Management = ED Manag.
+EDS Magazine = EDS Mag.
+EDTNA/ERCA Journal = EDNTNA ERCA J.
+EEG-EMG: Zeitschrift fur Elektroenzephalographie, Elektromyographie und Verwandte Gebiete = EEG EMG Z. Elektroenzephalogr. Elektromyogr. Verwandte Geb.
+EMBO Journal = EMBO J.
+EMBO Reports = EMBO Rep.
+EMT Journal = EMT J.
+ENDO = ENDO
+ENLB: Emergency Nurse Legal Bulletin = ENLB Emerg. Nurse Leg. Bull.
+ENO FO = ENO FO
+ENTechnology = Entechnology
+ET Journal = ET J.
+EURO Reports and Studies = EURO Rep. Stud.
+EXS = EXS
+Ear and Hearing = Ear Hear.
+Ear, Nose, and Throat Journal = Ear. Nose. Throat J.
+Early Human Development = Early Hum. Dev.
+Early Pregnancy = Early Pregnancy
+Earth and Planetary Science Letters=Earth Planet. Sci. Lett.;EPSLA2;48/YR
+East African Medical Journal = East Afr. Med. J.
+Eating and Weight Disorders = Eat. Weight Disord.
+Ebony = Ebony
+Echocardiography = Echocardiography
+Ecological Modelling = Ecol. Model.
+Ecology of Disease = Ecol. Dis.
+Economic Geology=Econ. Geol.;EGCEA8;8/YR
+Economic Inquiry = Econ. Inq.
+Economics and Human Biology = Econ. Hum. Biol.
+Ecotoxicology and Environmental Safety = Ecotoxicol. Environ. Saf.
+Edinburgh Dental Hospital Gazette = Edinb. Dent. Hosp. Gaz.
+Educacion Dental = Educ. Dent. (Ica)
+Educacion Medica y Salud = Educ. Med. Salud
+Educational Administration Quarterly = Educ. Adm. Q.
+Educational Directions for Dental Auxiliaries = Educ. Dir. Dent. Aux.
+Educational Directions in Dental Hygiene = Educ. Dir. Dent. Hyg.
+Educational and Industrial Television = Educ. Ind. Telev.
+Effective Clinical Practice = Eff. Clin. Pract.
+Effective Health Care = Eff. Health Care
+Egyptian Dental Journal = Egypt. Dent. J.
+Egyptian Journal of Bilharziasis = Egypt. J. Bilharz.
+Egyptian Journal of Psychiatry = Egypt. J. Psychiatry
+Eicosanoids = Eicosanoids
+Eisei Shikenjo Hokoku (Bulletin of National Institute of Hygienic Sciences) = Eisei Shikenjo Hokoku
+Ekologiia = Ekologiia
+Ekotekhnologii i Resursosberezhenie=Ekotekhnol. Resursosberezhenie;ERKTE4;BM
+Eksperimental'naya i Klinicheskaya Farmakologiya=Eksp. Klin. Farmakol.;EKFAE9;BM
+Eksperimentalna Meditsina i Morfologiia = Eksp. Med. Morfol.
+Eksperimentalnaia Khirurgiia i Anesteziologiia = Eksp. Khir. Anesteziol.
+Eksperimentalnaia Onkologiia = Eksp. Onkol.
+Eksperimentalnaia i Klinicheskaia Farmakologiia = Eksp. Klin. Farmakol.
+Eksperimentalnaia i Klinicheskaia Gastroenterologiia = Eksp. Klin. Gastroenterol.
+Elderly Care = Elder. Care
+Electroanalysis=Electroanalysis;ELANEU;24/YR
+Electrochemical Society Interface=Electrochem. Soc. Interface;ELSIE3;Q
+Electrochemical and Solid-State Letters=Electrochem. Solid-State Lett.;ESLEF6;M
+Electrochemistry (Tokyo, Japan)=Electrochemistry (Tokyo, Jpn.);EECTFA;M
+Electrochemistry Communications=Electrochem. Commun.;ECCMF9;M
+Electrochimica Acta=Electrochim. Acta;ELCAAV;SM
+Electrodiagnostic-Therapie = Electrodiagn. Ther.
+Electroencephalography and Clinical Neurophysiology = Electroencephalogr. Clin. Neurophysiol.
+Electroencephalography and Clinical Neurophysiology. Supplement = Electroencephalogr. Clin. Neurophysiol. Suppl.
+Electromagnetic Biology and Medicine = Electromagn. Biol. Med.
+Electromyography = Electromyography
+Electromyography and Clinical Neurophysiology = Electromyogr. Clin. Neurophysiol.
+Electron Microscopy Reviews = Electron Microsc. Rev.
+Electrophoresis = Electrophoresis
+Elektromedizin, Biomedizin und Technik = Elektromed. Biomed. Tech.
+Embryologia = Embryologia (Nagoya)
+Emergency = Emergency
+Emergency Department News = Emerg. Dep. News
+Emergency Health Services Quarterly = Emerg. Health Serv. Q.
+Emergency Health Services Review = Emerg. Health Serv. Rev.
+Emergency Medical Services = Emerg. Med. Serv.
+Emergency Medicine = Emerg. Med.
+Emergency Medicine Australasia = Emerg. Med. Australas.
+Emergency Medicine Clinics of North America = Emerg. Med. Clin. North Am.
+Emergency Medicine Journal = Emerg. Med. J.
+Emergency Nurse = Emerg. Nurse
+Emergency Planning Digest = Emerg. Plann. Dig.
+Emerging Infectious Diseases = Emerg. Infect. Dis.
+Emotion = Emotion
+Emphasis, Nursing = Emphasis Nurs.
+Employee Benefit Plan Review = Employee Benefit Plan Rev.
+Employee Benefits Journal = Empl. Benefits J.
+Employee Health and Fitness Newsletter = Employee Health Fitness Newsl.
+Employee Relations Law Journal = Employee Relat. Law J.
+Employment Relations Today = Employ. Relat. Today
+Enantiomer = Enantiomer
+Encephale = Encephale
+Endeavour = Endeavour
+Endocrine = Endocrine
+Endocrine Development = Endocr. Dev.
+Endocrine Journal = Endocr. J.
+Endocrine Regulations = Endocr. Regul.
+Endocrine Research = Endocr. Res.
+Endocrine Research Communications = Endocr. Res. Commun.
+Endocrine Reviews = Endocr. Rev.
+Endocrine, Metabolic and Immune Disorders Drug Targets = Endocr. Metab. Immune Disord. Drug Targets
+Endocrinologia Experimentalis = Endocrinol. Exp.
+Endocrinologia Japonica = Endocrinol. Jpn.
+Endocrinologia e Scienza della Costituzione = Endocrinol. Sci. Cost.
+Endocrinologie = Endocrinologie
+Endocrinology = Endocrinology
+Endocrinology and Metabolism Clinics of North America = Endocrinol. Metab. Clin. North Am.
+Endodoncia = Endodoncia (Mex.)
+Endodontic Practice = Endod. Pract.
+Endodontic Report = Endod. Rep.
+Endodontics and Dental Traumatology = Endod. Dent. Traumatol.
+Endokrinologie = Endokrinologie
+Endokrynologia Polska = Endokrynol. Pol.
+Endoscopic Surgery and Allied Technologies = Endosc. Surg. Allied Technol.
+Endoscopy = Endoscopy
+Endothelium = Endothelium
+Energy & Fuels=Energy Fuels;ENFUEM;BM
+Enfermedades Infecciosas y Microbiologia Clinica = Enferm. Infecc. Microbiol. Clin.
+Enfermeria = Enfermeria
+Enfermeria Intensiva = Enferm. Intensiva
+Enfoque = Enfoque
+Engineering in Life Sciences=Eng. Life Sci.;ELSNAE;BM
+Engineering in Medicine = Eng. Med.
+Entomological News = Entomol. News
+Environ. Chem. Preprints of Extended Abstracts presented at the ACS National Meeting, American Chemical Society, Division of Environmental Chemistry=Prepr. Ext. Abstr. ACS Natl. Meet., Am. Chem. Soc., Div.;PEACF2;SA
+Environ. Eng. Journal of Environmental Science and Health, Part A: Toxic/Hazardous Substances & Environmental Engineering=J. Environ. Sci. Health, Part A: Toxic/Hazard. Subst.;JATEF9;M
+Environment Protection Engineering=Environ. Prot. Eng.;EPEND9;Q
+Environmental Biology and Medicine = Environ. Biol. Med.
+Environmental Biosafety Research = Environ. Biosafety Res.
+Environmental Chemistry=Environ. Chem.;ECNHAA;4/YR
+Environmental Chemistry Letters=Environ. Chem. Lett.;ECLNBJ;4/YR
+Environmental Engineering Science=Environ. Eng. Sci.;EESCF5;BM
+Environmental Geochemistry and Health=Environ. Geochem. Health;EGHEE3;BM
+Environmental Health = Environ. Health
+Environmental Health Perspectives = Environ. Health Perspect.
+Environmental Health Series. Radiological Health = Environ. Health Ser. [Radiol. Health]
+Environmental Letters = Environ. Lett.
+Environmental Management = Environ. Manage.
+Environmental Microbiology = Environ. Microbiol.
+Environmental Mutagenesis = Environ. Mutagen.
+Environmental Physiology and Biochemistry = Environ. Physiol. Biochem.
+Environmental Pollution (Amsterdam, Netherlands)=Environ. Pollut. (Amsterdam, Neth.);ENPOEK;18/YR
+Environmental Progress=Environ. Prog.;ENVPDI;4/YR
+Environmental Quality and Safety = Environ. Qual. Saf.
+Environmental Quality and Safety. Supplement = Environ. Qual. Saf. Suppl.
+Environmental Research = Environ. Res.
+Environmental Science and Technology = Environ. Sci. Technol.
+Environmental Technology=Environ. Technol.;ENVTEV;M
+Environmental Toxicology = Environ. Toxicol.
+Environmental Toxicology and Chemistry=Environ. Toxicol. Chem.;ETOCDK;M
+Environmental Toxicology and Pharmacology=Environ. Toxicol. Pharmacol.;ETOPFR;6/YR
+Environmental and Molecular Mutagenesis = Environ. Mol. Mutagen.
+Enzyme = Enzyme
+Enzyme and Microbial Technology = Enzyme Microb. Technol.
+Enzyme and Protein = Enzyme Protein
+Enzymologia = Enzymologia
+Enzymologia Biologica et Clinica = Enzymol. Biol. Clin. (Basel)
+Eos, Transactions, American Geophysical Union (EOS) = Eos, Trans. Amer. Geophys. Union
+Epatologia = Epatologia
+Epheta: Revista de Enfermeria y Accion Social = Epheta
+Epidemiologia e Prevenzione = Epidemiol. Prev.
+Epidemiologia e Psichiatria Sociale = Epidemiol. Psichiatr. Soc.
+Epidemiologic Reviews = Epidemiol. Rev.
+Epidemiological Bulletin = Epidemiol. Bull.
+Epidemiologie, Mikrobiologie, Imunologie = Epidemiol. Mikrobiol. Imunol.
+Epidemiology = Epidemiology
+Epidemiology and Community Health = Epidemiol. Community Health
+Epidemiology and Infection = Epidemiol. Infect.
+Epilepsia = Epilepsia
+Epilepsy Research = Epilepsy Res.
+Epilepsy Research. Supplement = Epilepsy Res. Suppl.
+Epileptic Disorders = Epileptic. Disord.
+Epione = Epione
+Epithelial Cell Biology = Epithelial Cell Biol.
+Equine Veterinary Journal = Equine Vet. J.
+Equine Veterinary Journal. Supplement = Equine Vet. J. Suppl.
+Erdoel, Erdgas, Kohle=Erdoel, Erdgas, Kohle;EEKOEY;M
+Ergebnisse der Allgemeinen Pathologie und Pathologischen Anatomie = Ergeb. Allg. Pathol. Pathol. Anat.
+Ergebnisse der Anatomie und Entwicklungsgeschichte = Ergeb. Anat. Entwicklungsgesch.
+Ergebnisse der Chirurgie und Orthopadie = Ergeb. Chir. Orthop.
+Ergebnisse der Inneren Medizin und Kinderheilkunde = Ergeb. Inn. Med. Kinderheilkd.
+Ergebnisse der Mikrobiologie, Immunitatsforschung und Experimentellen Therapie = Ergeb. Mikrobiol. Immunitatsforsch. Exp. Ther.
+Ergebnisse der Physiologie, Biologischen Chemie und Experimentellen Pharmakologie = Ergeb. Physiol.
+Ergonomics = Ergonomics
+Esencia Odontologica = Esencia Odontol.
+Essays in Biochemistry = Essays Biochem.
+Essays in Fundamental Immunology = Essays Fundam. Immunol.
+Essays in Neurochemistry and Neuropharmacology = Essays Neurochem. Neuropharmacol.
+Estodont Press = Estodont Press
+Estomatologia = Estomatologia
+Estomatologia e Cultura = Estomatol. Cult.
+Estuarine and Coastal Marine Science = Estuarine Coastal Mar. Sci.
+Ethics in Science and Medicine = Ethics Sci. Med.
+Ethiopian Medical Journal = Ethiop. Med. J.
+Ethnicity and Disease = Ethn. Dis.
+Ethnicity and Health = Ethn. Health
+Etudes sur les Soins et le Service Infirmier = Etud. Soins Serv. Infirm.
+Eugenics Quarterly = Eugen. Q.
+Eugenics Review = Eugen. Rev.
+Eugenics Society Symposia = Eugen. Soc. Symp.
+Eukaryotic Cell = Eukaryot. Cell
+Europa Medica (Edicion Espanola) = Eur. Med. (Paris)
+Europace = Europace
+European Addiction Research = Eur. Addict. Res.
+European Archives of Oto-Rhino-Laryngology = Eur. Arch. Otorhinolaryngol.
+European Archives of Oto-Rhino-Laryngology. Supplement = Eur. Arch. Otorhinolaryngol. Suppl.
+European Archives of Paediatric Dentistry = Eur. Arch. Paediatr. Dent.
+European Archives of Psychiatry and Clinical Neuroscience = Eur. Arch. Psychiatry Clin. Neurosci.
+European Archives of Psychiatry and Neurological Sciences = Eur. Arch. Psychiatry Neurol. Sci.
+European Biophysics Journal = Eur. Biophys. J.
+European Cells and Materials = Eur. Cell. Mater.
+European Child and Adolescent Psychiatry = Eur. Child Adolesc. Psychiatry
+European Cytokine Network = Eur. Cytokine Netw.
+European Food Research and Technology=Eur. Food Res. Technol.;EFRTFO;M
+European Heart Journal = Eur. Heart J.
+European Journal of Anaesthesiology = Eur. J. Anaesthesiol.
+European Journal of Anaesthesiology. Supplement = Eur. J. Anaesthesiol. Suppl.
+European Journal of Applied Physiology = Eur. J. Appl. Physiol.
+European Journal of Applied Physiology and Occupational Physiology = Eur. J. Appl. Physiol.
+European Journal of Basic and Applied Histochemistry = Eur. J. Basic Appl. Histochem.
+European Journal of Biochemistry = Eur. J. Biochem.
+European Journal of Cancer = Eur. J. Cancer
+European Journal of Cancer Care (English Language Edition) = Eur. J. Cancer Care (Engl.)
+European Journal of Cancer Prevention = Eur. J. Cancer Prev.
+European Journal of Cancer and Clinical Oncology = Eur. J. Cancer Clin. Oncol.
+European Journal of Cancer. Part B, Oral Oncology = Eur. J. Cancer. B. Oral Oncol.
+European Journal of Cardio-Thoracic Surgery = Eur. J. Cardiothorac. Surg.
+European Journal of Cardiology = Eur. J. Cardiol.
+European Journal of Cardiovascular Nursing = Eur. J. Cardiovasc. Nurs.
+European Journal of Cardiovascular Prevention and Rehabilitation = Eur. J. Cardiovasc. Prev. Rehabil.
+European Journal of Cell Biology = Eur. J. Cell Biol.
+European Journal of Cell Biology. Supplement = Eur. J. Cell Biol. Suppl.
+European Journal of Clinical Chemistry and Clinical Biochemistry = Eur. J. Clin. Chem. Clin. Biochem.
+European Journal of Clinical Investigation = Eur. J. Clin. Invest.
+European Journal of Clinical Microbiology = Eur. J. Clin. Microbiol.
+European Journal of Clinical Microbiology and Infectious Diseases = Eur. J. Clin. Microbiol. Infect. Dis.
+European Journal of Clinical Nutrition = Eur. J. Clin. Nutr.
+European Journal of Clinical Pharmacology = Eur. J. Clin. Pharmacol.
+European Journal of Contraception and Reproductive Health Care = Eur. J. Contracept. Reprod. Health Care
+European Journal of Dental Education = Eur. J. Dent. Educ.
+European Journal of Dermatology = Eur. J. Dermatol.
+European Journal of Disorders of Communication = Eur. J. Disord. Commun.
+European Journal of Drug Metabolism and Pharmacokinetics = Eur. J. Drug Metab. Pharmacokinet.
+European Journal of Echocardiography = Eur. J. Echocardiogr.
+European Journal of Emergency Medicine = Eur. J. Emerg. Med.
+European Journal of Endocrinology = Eur. J. Endocrinol.
+European Journal of Epidemiology = Eur. J. Epidemiol.
+European Journal of Gastroenterology and Hepatology = Eur. J. Gastroenterol. Hepatol.
+European Journal of Gynaecological Oncology = Eur. J. Gynaecol. Oncol.
+European Journal of Haematology = Eur. J. Haematol.
+European Journal of Haematology. Supplementum = Eur. J. Haematol. Suppl.
+European Journal of Health Economics = Eur. J. Health Econ.
+European Journal of Heart Failure = Eur. J. Heart Fail.
+European Journal of Histochemistry = Eur. J. Histochem.
+European Journal of Human Genetics = Eur. J. Hum. Genet.
+European Journal of Immunogenetics = Eur. J. Immunogenet.
+European Journal of Immunology = Eur. J. Immunol.
+European Journal of Inorganic Chemistry=Eur. J. Inorg. Chem.;EJICFO;SM
+European Journal of Intensive Care Medicine = Eur. J. Intensive Care Med.
+European Journal of Lipid Science and Technology=Eur. J. Lipid Sci. Technol.;EJLTFM;M
+European Journal of Mass Spectrometry=Eur. J. Mass Spectrom.;EJMSCL;6/YR
+European Journal of Medical Genetics = Eur. J. Med. Genet.
+European Journal of Medical Research = Eur. J. Med. Res.
+European Journal of Medicinal Chemistry=Eur. J. Med. Chem.;EJMCA5;M
+European Journal of Medicine = Eur. J. Med.
+European Journal of Mineralogy=Eur. J. Mineral.;EJMIER;BM
+European Journal of Morphology = Eur. J. Morphol.
+European Journal of Neurology = Eur. J. Neurol.
+European Journal of Neuroscience = Eur. J. Neurosci.
+European Journal of Nuclear Medicine = Eur. J. Nucl. Med.
+European Journal of Nuclear Medicine and Molecular Imaging = Eur. J. Nucl. Med. Mol. Imaging
+European Journal of Nutrition = Eur. J. Nutr.
+European Journal of Obstetrics, Gynecology, and Reproductive Biology = Eur. J. Obstet. Gynecol. Reprod. Biol.
+European Journal of Ophthalmology = Eur. J. Ophthalmol.
+European Journal of Oral Sciences = Eur. J. Oral Sci.
+European Journal of Organic Chemistry=Eur. J. Org. Chem.;EJOCFK;SM
+European Journal of Orthodontics = Eur. J. Orthod.
+European Journal of Paediatric Neurology = Eur. J. Paediatr. Neurol.
+European Journal of Pain = Eur. J. Pain
+European Journal of Pediatric Surgery = Eur. J. Pediatr. Surg.
+European Journal of Pediatrics = Eur. J. Pediatr.
+European Journal of Pharmaceutical Sciences = Eur. J. Pharm. Sci.
+European Journal of Pharmaceutics and Biopharmaceutics = Eur. J. Pharm. Biopharm.
+European Journal of Pharmacology = Eur. J. Pharmacol.
+European Journal of Prosthodontics and Restorative Dentistry = Eur. J. Prosthodont. Restor. Dent.
+European Journal of Radiology = Eur. J. Radiol.
+European Journal of Respiratory Diseases = Eur. J. Respir. Dis.
+European Journal of Respiratory Diseases. Supplement = Eur. J. Respir. Dis. Suppl.
+European Journal of Rheumatology and Inflammation = Eur. J. Rheumatol. Inflamm.
+European Journal of Surgery = Eur. J. Surg.
+European Journal of Surgery. Supplement = Eur. J. Surg. Suppl.
+European Journal of Surgical Oncology = Eur. J. Surg. Oncol.
+European Journal of Toxicology = Eur. J. Toxicol.
+European Journal of Toxicology and Environmental Hygiene = Eur. J. Toxicol. Environ. Hyg.
+European Journal of Toxicology and Hygiene of Environment = Eur. J. Toxicol. Hyg. Environ.
+European Journal of Ultrasound = Eur. J. Ultrasound
+European Journal of Vascular Surgery = Eur. J. Vasc. Surg.
+European Journal of Vascular and Endovascular Surgery = Eur. J. Vasc. Endovasc. Surg.
+European Neurology = Eur. Neurol.
+European Neuropsychopharmacology = Eur. Neuropsychopharmacol.
+European Physical Journal A: Hadrons and Nuclei=Eur. Phys. J. A;EPJAFV;M
+European Physical Journal B: Condensed Matter Physics=Eur. Phys. J. B;EPJBFY;SM
+European Physical Journal C: Particles and Fields=Eur. Phys. J. C;EPCFFB;16/YR
+European Physical Journal D: Atomic, Molecular and Optical Physics=Eur. Phys. J. D;EPJDF6;M
+European Physical Journal E: Soft Matter=Eur. Phys. J. E;EPJSFH;M
+European Polymer Journal=Eur. Polym. J.;EUPJAG;M
+European Quality Assurance Network Newsletter = Eur. Qual. Assur. Netw. Newsl.
+European Radiology = Eur. Radiol.
+European Respiratory Journal = Eur. Respir. J.
+European Respiratory Journal. Supplement = Eur. Respir. J. Suppl.
+European Review for Medical and Pharmacological Sciences = Eur. Rev. Med. Pharmacol. Sci.
+European Spine Journal = Eur. Spine J.
+European Surgical Research = Eur. Surg. Res.
+European Urology = Eur. Urol.
+Europhysics Letters = Europhys. Lett.
+Evaluation = Evaluation
+Evaluation Review = Eval. Rev.
+Evaluation and Program Planning = Eval. Program Plann.
+Evaluation and the Health Professions = Eval. Health Prof.
+Evidence Report/Technology Assessment (Summary) = Evid. Rep. Technol. Assess. (Summ.)
+Evidence-Based Mental Health = Evid. Based Ment. Health
+Evidence-Based Nursing = Evid. Based Nurs.
+Evolution Psychiatrique = Evol. Psychiatr. (Paris)
+Evolution and Development = Evol. Dev.
+Evolutionary Computation = Evol. Comput.
+Exceptional Children = Except. Child.
+Executive Housekeeper = Exec. Housekeeper
+Executive Housekeeping Today = Exec. Housekeep. Today
+Executive Solutions for Healthcare Management = Exec. Solut. Healthc. Manag.
+Exercise Immunology Review = Exerc. Immunol. Rev.
+Exercise and Sport Sciences Reviews = Exerc. Sport Sci. Rev.
+Experientia = Experientia
+Experientia. Supplementum = Experientia. Suppl.
+Experimental Aging Research = Exp. Aging Res.
+Experimental Animals = Exp. Anim.
+Experimental Biology = Exp. Biol.
+Experimental Biology and Medicine = Exp. Biol. Med.
+Experimental Biology and Medicine (Maywood, NJ, United States)=Exp. Biol. Med. (Maywood, NJ, U. S.);EBMMBE;11/YR
+Experimental Brain Research = Exp. Brain Res.
+Experimental Cell Biology = Exp. Cell Biol.
+Experimental Cell Research = Exp. Cell Res.
+Experimental Dermatology = Exp. Dermatol.
+Experimental Diabetes Research = Exp. Diabetes Res.
+Experimental Embryology and Teratology = Exp. Embryol. Teratol.
+Experimental Eye Research = Exp. Eye Res.
+Experimental Gerontology = Exp. Gerontol.
+Experimental Hematology = Exp. Hematol.
+Experimental Lung Research = Exp. Lung Res.
+Experimental Medicine and Surgery = Exp. Med. Surg.
+Experimental Mycology = Exp. Mycol.
+Experimental Nephrology = Exp. Nephrol.
+Experimental Neurology = Exp. Neurol.
+Experimental Oncology = Exp. Oncol.
+Experimental Parasitology = Exp. Parasitol.
+Experimental Pathology = Exp. Pathol.
+Experimental Pathology. Supplement = Exp. Pathol. Suppl.
+Experimental Physiology = Exp. Physiol.
+Experimental Psychology = Exp. Psychol.
+Experimental and Applied Acarology = Exp. Appl. Acarol.
+Experimental and Clinical Endocrinology = Exp. Clin. Endocrinol.
+Experimental and Clinical Endocrinology & Diabetes=Exp. Clin. Endocrinol. Diabetes;ECEDFQ;10/YR
+Experimental and Clinical Endocrinology and Diabetes = Exp. Clin. Endocrinol. Diabetes
+Experimental and Clinical Immunogenetics = Exp. Clin. Immunogenet.
+Experimental and Clinical Transplantation = Exp. Clin. Transplant.
+Experimental and Molecular Medicine = Exp. Mol. Med.
+Experimental and Molecular Pathology = Exp. Mol. Pathol.
+Experimental and Toxicologic Pathology = Exp. Toxicol. Pathol.
+Experimentelle Medizin, Pathologie und Klinik = Exp. Med. Pathol. Klin.
+Experimentelle Pathologie = Exp. Pathol. (Jena)
+Expert Opinion on Biological Therapy = Expert Opin. Biol. Ther.
+Expert Opinion on Drug Delivery = Expert Opin. Drug Deliv.
+Expert Opinion on Drug Metabolism and Toxicology = Expert Opin. Drug Metab. Toxicol.
+Expert Opinion on Drug Safety = Expert Opin. Drug Saf.
+Expert Opinion on Emerging Drugs = Expert Opin. Emerg. Drugs
+Expert Opinion on Investigational Drugs=Expert Opin. Invest. Drugs;EOIDER;M
+Expert Opinion on Pharmacotherapy = Expert Opin. Pharmacother.
+Expert Opinion on Therapeutic Patents=Expert Opin. Ther. Pat.;EOTPEG;M
+Expert Opinion on Therapeutic Targets = Expert Opin. Ther. Targets
+Expert Review of Anti-Infective Therapy = Expert Rev. Anti Infect. Ther.
+Expert Review of Anticancer Therapy = Expert Rev. Anticancer Ther.
+Expert Review of Cardiovascular Therapy = Expert Rev. Cardiovasc. Ther.
+Expert Review of Medical Devices = Expert Rev. Med. Devices
+Expert Review of Molecular Diagnostics = Expert Rev. Mol. Diagn.
+Expert Review of Neurotherapeutics = Expert Rev. Neurother.
+Expert Review of Proteomics = Expert Rev. Proteomics
+Expert Review of Vaccines = Expert Rev. Vaccines
+Explore = Explore
+Explorer = Explorer (Hayward)
+Explorer (Kansas City) = Explorer (Kansas City)
+Exposes Annuels de Biochimie Medicale = Expos. Annu. Biochim. Med.
+Extremophiles = Extremophiles
+Eye = Eye
+Eye and Contact Lens = Eye Contact Lens
+Eye, Ear, Nose and Throat Monthly = Eye. Ear. Nose Throat Mon.
+FAO Food and Nutrition Paper = FAO Food Nutr. Pap.
+FAO Food and Nutrition Series = FAO Food Nutr. Ser.
+FAO Nutrition Meetings Report Series = FAO Nutr. Meet. Rep. Ser.
+FAO Nutritional Studies = FAO Nutr. Stud.
+FASEB Journal = FASEB J.
+FDA Consumer = FDA Consum.
+FDA Drug Bulletin = FDA Drug Bull.
+FDI World = FDI World
+FEBS Journal = FEBS J.
+FEBS Letters = FEBS Lett.
+FEMS Immunology and Medical Microbiology = FEMS Immunol. Med. Microbiol.
+FEMS Microbiology Ecology=FEMS Microbiol. Ecol.;FMECEZ;M
+FEMS Microbiology Immunology = FEMS Microbiol. Immunol.
+FEMS Microbiology Letters = FEMS Microbiol. Lett.
+FEMS Microbiology Reviews = FEMS Microbiol. Rev.
+FEMS Yeast Research = FEMS Yeast Res.
+FNIB Info = FNIB Info
+FNIB: Organe de la Federation Nationale des Infirmier(e)s Belges = FNIB
+FO: Facultad de Odontologia = FO
+Fa Yi Xue Za Zhi (Journal of Forensic Medicine) = Fa Yi Xue Za Zhi
+Facial Orthopedics and Temporomandibular Arthrology = Facial Orthop. Temporomandibular Arthrol.
+Facial Plastic Surgery = Facial Plast. Surg.
+Factor Odontologico = Factor Odontol.
+Fag Tidsskriftet Sykepleien = Fag Tidsskr. Sykepleien
+Family Health = Fam. Health
+Family Medicine = Fam. Med.
+Family Planning = Fam. Plann.
+Family Planning Perspectives = Fam. Plann. Perspect.
+Family Practice = Fam. Pract.
+Family Practice Management = Fam. Pract. Manag.
+Family Practice Research Journal = Fam. Pract. Res. J.
+Family Process = Fam. Process
+Family and Community Health = Fam. Community Health
+Faraday Discussions = Faraday Discuss.
+Faraday Discussions of the Chemical Society = Faraday Discuss. Chem. Soc.
+Farmaco = Farmaco
+Farmaco. Edizione Pratica = Farmaco. [Prat.]
+Farmaco. Edizione Scientifica = Farmaco. [Sci.]
+Farmacognosia = Farmacognosia
+Farmakologiia i Toksikologiia = Farmakol. Toksikol.
+Farmatsevtychnyi Zhurnal = Farm. Zh.
+Farmatsiia = Farmatsiia
+Fasett = Fasett
+Fauchard = Fauchard
+Faulkner and Gray's Medicine and Health = Faulkner Grays Med. Health
+Federal Register = Fed. Regist.
+Federation Bulletin = Fed. Bull.
+Federation Proceedings = Fed. Proc.
+Federation Proceedings. Translation Supplement = Fed. Proc. Transl. Suppl.
+Federation of Operative Dentistry = Fed. Oper. Dent.
+Fegato = Fegato
+Feldsher i Akusherka = Feldsher Akush.
+Fen Zi Xi Bao Sheng Wu Xue Bao (Journal of Molecular Cell Biology) = Fen Zi Xi Bao Sheng Wu Xue Bao
+Fenxi Huaxue=Fenxi Huaxue;FHHHDT;M
+Fenzi Cuihua=Fenzi Cuihua;FECUEN;BM
+Ferroelectrics=Ferroelectrics;FEROA8;16/YR
+Ferroelectrics, Letters Section=Ferroelectr., Lett. Sect.;FELEDJ;BM
+Fertility and Sterility = Fertil. Steril.
+Fetal Diagnosis and Therapy = Fetal Diagn. Ther.
+Fetal Therapy = Fetal Ther.
+Fetal and Pediatric Pathology = Fetal Pediatr. Pathol.
+Fibre Chemistry=Fibre Chem.;FICYAP;BM
+Finska Lakaresallskapets Handlingar = Fin. Lakaresallsk. Handl.
+Fire Journal = Fire J.
+Fire Technology = Fire Technol.
+Fire and Materials=Fire Mater.;FMATDV;BM
+Fish Physiology and Biochemistry=Fish Physiol. Biochem.;FPBIEP;4/YR
+Fisheries Oceanography = Fish. Oceanogr.
+Fisheries Science = Fish. Sci.
+Fisheries Science (Carlton, Australia)=Fish. Sci. (Carlton, Aust.);FSCIEH;BM
+Fission Product Inhalation Project = Fission Prod. Inhal. Proj.
+Fizika Goreniya i Vzryva=Fiz. Goreniya Vzryva;FGVZA7;BM
+Fizika Metallov i Metallovedenie=Fiz. Met. Metalloved.;FMMTAK;M
+Fizika i Khimiya Obrabotki Materialov=Fiz. Khim. Obrab. Mater.;FKOMAT;BM
+Fiziologia Normala si Patologica = Fiziol. Norm. Patol.
+Fiziologicheskii Zhurnal = Fiziol. Zh.
+Fiziologicheskii Zhurnal Imeni I. M. Sechenova = Fiziol. Zh. Im. I. M. Sechenova
+Fiziologicheskii Zhurnal SSSR Imeni I. M. Sechenova = Fiziol. Zh. SSSR Im. I. M. Sechenova
+Fiziologichnyi Zhurnal = Fiziol. Zh.
+Fiziologiia Cheloveka = Fiziol. Cheloveka
+Flash-Informations = Flash. Inf.
+Florida Dental Journal = Fla. Dent. J.
+Florida Nurse = Fla. Nurse
+Fluid Phase Equilibria=Fluid Phase Equilib.;FPEQDT;15/YR
+Focus on AACN = Focus AACN
+Focus on Critical Care = Focus Crit. Care
+Focus on Ohio Dentistry = Focus Ohio Dent.
+Fogorvosi Szemle = Fogorv. Sz.
+Folding and Design = Fold. Des.
+Folha Medica = Folha Med.
+Folia Allergologica = Folia Allergol. (Roma)
+Folia Biologica = Folia Biol. (Praha)
+Folia Cardiologica = Folia Cardiol.
+Folia Clinica Internacional = Folia Clin. Int. (Barc.)
+Folia Endocrinologica = Folia Endocrinol.
+Folia Haematologica: Internationales Magazin fur Blutforschung = Folia Haematol. (Frankf.)
+Folia Haematologica: Internationales Magazin fur Klinische und Morphologische Blutforschung = Folia Haematol. Int. Mag. Klin. Morphol. Blutforsch.
+Folia Hereditaria et Pathologica = Folia Hered. Pathol. (Milano)
+Folia Histochemica et Cytobiologica = Folia Histochem. Cytobiol.
+Folia Histochemica et Cytochemica = Folia Histochem. Cytochem. (Krakow)
+Folia Medica = Folia Med. (Plovdiv)
+Folia Medica Cracoviensia = Folia Med. Cracov.
+Folia Medica Neerlandica = Folia Med. Neerl.
+Folia Microbiologica = Folia Microbiol. (Praha)
+Folia Microbiologica (Prague, Czech Republic)=Folia Microbiol. (Prague, Czech Repub.);FOMIAZ;BM
+Folia Morphologica (Poland) = Folia Morphol. (Warsz.)
+Folia Morphologica (Prague) = Folia Morphol. (Praha)
+Folia Neuropathologica = Folia Neuropathol.
+Folia Parasitologica = Folia Parasitol. (Praha)
+Folia Phoniatrica = Folia Phoniatr. (Basel)
+Folia Phoniatrica et Logopedica = Folia Phoniatr. Logop.
+Folia Primatologica = Folia Primatol. (Basel)
+Folia Psychiatrica et Neurologica Japonica = Folia Psychiatr. Neurol. Jpn.
+Folia Veterinaria Latina = Folia Vet. Lat.
+Food Additives & Contaminants=Food Addit. Contam.;FACOEB;M
+Food Additives and Contaminants = Food Addit. Contam.
+Food Chemistry=Food Chem.;FOCHDJ;20/YR
+Food Hydrocolloids=Food Hydrocolloids;FOHYES;BM
+Food Management = Food Manage.
+Food and Chemical Toxicology = Food Chem. Toxicol.
+Food and Cosmetics Toxicology = Food Cosmet. Toxicol.
+Food and Drug Law Journal = Food Drug Law J.
+Food and Nutrition = Food Nutr. (Roma)
+Foodborne Pathogens and Disease = Foodborne Pathog. Dis.
+Foot and Ankle = Foot Ankle
+Foot and Ankle Clinics = Foot Ankle Clin.
+Foot and Ankle International = Foot Ankle Int.
+Forbes = Forbes
+Fordham Law Review = Fordham Law Rev.
+Forensic Science = Forensic Sci.
+Forensic Science International = Forensic Sci. Int.
+Formulary = Formulary
+Forschende Komplementarmedizin = Forsch. Komplementarmed.
+Forschende Komplementarmedizin und Klassische Naturheilkunde = Forsch. Komplementarmed. Klass. Naturheilkd.
+Fortnightly Review of the Chicago Dental Society = Fortn. Rev. Chic. Dent. Soc.
+Fortschritte auf dem Gebiete der Rontgenstrahlen und der Neuen Bildgebenden Verfahren. Erganzungsband = Fortschr. Geb. Rontgenstrahlen Neuen Bildgeb. Verfahr. Erganzungsbd.
+Fortschritte auf dem Gebiete der Rontgenstrahlen und der Nuklearmedizin = Fortschr. Geb. Rontgenstr. Nuklearmed.
+Fortschritte auf dem Gebiete der Rontgenstrahlen und der Nuklearmedizin. Erganzungsband = Fortschr. Geb. Rontgenstrahlen Nuklearmed. Erganzungsbd.
+Fortschritte der Andrologie = Fortschr. Androl.
+Fortschritte der Arzneimittelforschung (Progress in Drug Research) = Fortschr. Arzneimittelforsch.
+Fortschritte der Chemie Organischer Naturstoffe = Fortschr. Chem. Org. Naturst.
+Fortschritte der Geburtshilfe und Gynakologie = Fortschr. Geburtshilfe Gynakol.
+Fortschritte der Hals-, Nasen-, Ohrenheilkunde = Fortschr. Hals. Nasen. Ohrenheilkd.
+Fortschritte der Immunitatsforschung = Fortschr. Immunitatsforsch.
+Fortschritte der Kiefer- und Gesichts-Chirurgie = Fortschr. Kiefer. Gesichtschir.
+Fortschritte der Kieferorthopadie = Fortschr. Kieferorthop.
+Fortschritte der Medizin = Fortschr. Med.
+Fortschritte der Medizin. Monographie = Fortschr. Med. Monogr.
+Fortschritte der Medizin. Supplement = Fortschr. Med. Suppl.
+Fortschritte der Neurologie, Psychiatrie und Ihrer Grenzgebiete = Fortschr. Neurol. Psychiatr. Grenzgeb.
+Fortschritte der Neurologie-Psychiatrie = Fortschr. Neurol. Psychiatr.
+Fortschritte der Ophthalmologie = Fortschr. Ophthalmol.
+Fortschritte der Verhaltensforschung = Fortschr. Verhaltensforsch.
+Fortschritte der Zoologie = Fortschr. Zool.
+Fortschritte in der Tierphysiologie und Tierernahrung = Fortschr. Tierphysiol. Tierernahr.
+Fortune = Fortune
+Forum = Forum (Genova)
+Forum of Nutrition = Forum Nutr.
+Forum on Medicine = Forum Med.
+Foundation News = Found. News
+Foundation News and Commentary = Found. News Comment.
+Fra Sundhedsstyrelsen = Fra Sundhedsstyr.
+Fracastoro = Fracastoro
+Frankfurter Zeitschrift fur Pathologie = Frankf. Z. Pathol.
+Frater of Psi Omega = Frater Psi Omega
+Free Radical Biology & Medicine=Free Radical Biol. Med.;FRBMEH;24/YR
+Free Radical Biology and Medicine = Free Radic. Biol. Med.
+Free Radical Research = Free Radic. Res.
+Free Radical Research Communications = Free Radic. Res. Commun.
+Freie Zahnarzt = Freie Zahnarzt
+Fresenius Environmental Bulletin=Fresenius Environ. Bull.;FENBEL;M
+Friuli Medico = Friuli Med.
+Frontier Nursing Service Quarterly Bulletin = Front. Nurs. Serv. Q. Bull.
+Frontiers in Aging Series = Front. Aging Ser.
+Frontiers in Bioscience = Front. Biosci.
+Frontiers in Neuroendocrinology = Front. Neuroendocrinol.
+Frontiers of Biology = Front. Biol.
+Frontiers of Gastrointestinal Research = Front. Gastrointest. Res.
+Frontiers of Health Services Management = Front. Health Serv. Manage.
+Frontiers of Hormone Research = Front. Horm. Res.
+Frontiers of Medical and Biological Engineering = Front. Med. Biol. Eng.
+Frontiers of Oral Physiology = Front. Oral Physiol.
+Frontiers of Radiation Therapy and Oncology = Front. Radiat. Ther. Oncol.
+Ftiziologia = Ftiziologia
+Fuel=Fuel;FUELAC;15/YR
+Fuel Cells (Weinheim, Germany)=Fuel Cells (Weinheim, Ger.);FUCEFK;4/YR
+Fuel Processing Technology=Fuel Process. Technol.;FPTEDY;15/YR
+Fukuoka Igaku Zasshi (Fukuoka Acta Medica) = Fukuoka Igaku Zasshi
+Fukuoka Shika Daigaku Gakkai Zasshi = Fukuoka Shika Daigaku Gakkai Zasshi
+Fukushima Journal of Medical Science = Fukushima J. Med. Sci.
+Fullerenes, Nanotubes, and Carbon Nanostructures=Fullerenes, Nanotubes, Carbon Nanostruct.;FNCNAR;Q
+Functional & Integrative Genomics=Funct. Integr. Genomics;FIGUBY;Q
+Functional Neurology = Funct. Neurol.
+Functional Orthodontist = Funct. Orthod.
+Functional and Developmental Morphology = Funct. Dev. Morphol.
+Functional and Integrative Genomics = Funct. Integr. Genomics
+Fund Raising Management = Fund Raising Manage.
+Fundamental & Clinical Pharmacology=Fundam. Clin. Pharmacol.;FCPHEZ;BM
+Fundamental and Applied Toxicology = Fundam. Appl. Toxicol.
+Fundamental and Clinical Pharmacology = Fundam. Clin. Pharmacol.
+Fungal Genetics and Biology = Fungal Genet. Biol.
+Funtai oyobi Funmatsu Yakin=Funtai oyobi Funmatsu Yakin;FOFUA2;M
+Fusion Engineering and Design=Fusion Eng. Des.;FEDEEE;24/YR
+Fusion Science and Technology=Fusion Sci. Technol.;FSTUCY;7/YR
+Future Dentistry = Future Dent.
+Future Oncology = Future Oncol.
+Future of Children = Future Child.
+Fysiatricky a Revmatologicky Vestnik = Fysiatr. Revmatol. Vestn.
+G.E.N. = G. E. N.
+GHA Today = GHA Today
+GHAA Journal = GHAA J.
+GMDA Bulletin = GMDA Bull.
+GP = GP
+Gaceta Medica de Caracas = Gac. Med. Caracas
+Gaceta Medica de Mexico = Gac. Med. Mex.
+Gaceta Sanitaria = Gac. Sanit.
+Gait and Posture = Gait Posture
+Gamete Research = Gamete Res.
+Gan No Rinsho (Japanese Journal of Cancer Clinics) = Gan No Rinsho
+Gan To Kagaku Ryoho (Cancer and Chemotherapy) = Gan To Kagaku Ryoho
+Ganguang Kexue Yu Guang Huaxue=Ganguang Kexue Yu Guang Huaxue;GKKHE9;BM
+Ganka (Ophthalmology) = Ganka
+Gann = Gann
+Gaodeng Xuexiao Huaxue Xuebao=Gaodeng Xuexiao Huaxue Xuebao;KTHPDM;M
+Gaofenzi Cailiao Kexue Yu Gongcheng=Gaofenzi Cailiao Kexue Yu Gongcheng;GCKGEI;BM
+Gaofenzi Xuebao=Gaofenzi Xuebao;GAXUE9;BM
+Gaoneng Wuli Yu Hewuli=Gaoneng Wuli Yu Hewuli;KNWLD9;M
+Gaoxiao Huaxue Gongcheng Xuebao=Gaoxiao Huaxue Gongcheng Xuebao;GHGXEG;BM
+Gaoxiong Yi Xue Ke Xue Za Zhi (Kaohsiung Journal of Medical Sciences) = Gaoxiong Yi Xue Ke Xue Za Zhi
+Gastric Cancer = Gastric Cancer
+Gastroenterologia = Gastroenterologia
+Gastroenterologia Japonica = Gastroenterol. Jpn.
+Gastroenterologia y Hepatologia = Gastroenterol. Hepatol.
+Gastroenterologie Clinique et Biologique = Gastroenterol. Clin. Biol.
+Gastroenterologische Fortbildungskurse fur die Praxis = Gastroenterol. Fortbildungskurse Prax.
+Gastroenterologisches Journal = Gastroenterol. J.
+Gastroenterologist = Gastroenterologist
+Gastroenterology = Gastroenterology
+Gastroenterology Clinics of North America = Gastroenterol. Clin. North Am.
+Gastroenterology Nursing = Gastroenterol. Nurs.
+Gastrointestinal Endoscopy = Gastrointest. Endosc.
+Gastrointestinal Endoscopy Clinics of North America = Gastrointest. Endosc. Clin. N. Am.
+Gastrointestinal Radiology = Gastrointest. Radiol.
+Gazette Medicale de France = Gaz. Med. Fr.
+Gazette of the Egyptian Paediatric Association = Gaz. Egypt. Paediatr. Assoc.
+Gazzetta Internazionale di Medicina e Chirurgia = Gazz. Int. Med. Chir.
+Gazzetta Medica Italiana = Gazz. Med. Ital.
+Gazzetta Sanitaria = Gazz. Sanit.
+Geburtshilfe und Frauenheilkunde = Geburtshilfe Frauenheilkd.
+Gegenbaurs Morphologisches Jahrbuch = Gegenbaurs Morphol. Jahrb.
+Geka Chiryo (Surgical Therapy) = Geka Chiryo
+Gem State RN News Letter = Gem State RN News Lett.
+Gematologiia i Transfuziologiia = Gematol. Transfuziol.
+Gender Medicine = Gend. Med.
+Gene = Gene
+Gene Amplification and Analysis = Gene Amplif. Anal.
+Gene Analysis Techniques = Gene Anal. Tech.
+Gene Expression = Gene Expr.
+Gene Expression Patterns = Gene Expr. Patterns
+Gene Geography = Gene Geogr.
+Gene Therapy = Gene Ther.
+Gene Therapy and Regulation=Gene Ther. Regul.;GTREBR;IRR
+Geneeskundige Bladen uit Kliniek en Laboratorium voor de Praktijk = Geneeskd. Bl.
+Geneeskundige Gids = Geneeskd. Gids
+General Dentistry = Gen. Dent.
+General Hospital Psychiatry = Gen. Hosp. Psychiatry
+General Pharmacology = Gen. Pharmacol.
+General Physiology and Biophysics = Gen. Physiol. Biophys.
+General and Comparative Endocrinology = Gen. Comp. Endocrinol.
+General and Diagnostic Pathology = Gen. Diagn. Pathol.
+Genes & Development=Genes Dev.;GEDEEP;SM
+Genes and Development = Genes Dev.
+Genes and Function = Genes Funct.
+Genes and Genetic Systems = Genes Genet. Syst.
+Genes to Cells = Genes Cells
+Genes, Brain, and Behavior = Genes Brain Behav.
+Genes, Chromosomes & Cancer=Genes, Chromosomes Cancer;GCCAES;12/YR
+Genes, Chromosomes and Cancer = Genes. Chromosomes Cancer
+Genesis = Genesis
+Genetic Analysis = Genet. Anal.
+Genetic Analysis, Techniques and Applications = Genet. Anal. Tech. Appl.
+Genetic Counseling = Genet. Couns.
+Genetic Engineering = Genet. Eng. (N. Y.)
+Genetic Epidemiology = Genet. Epidemiol.
+Genetic Epidemiology. Supplement = Genet. Epidemiol. Suppl.
+Genetic Psychology Monographs = Genet. Psychol. Monogr.
+Genetic Testing = Genet. Test.
+Genetic, Social, and General Psychology Monographs = Genet. Soc. Gen. Psychol. Monogr.
+Genetica = Genetica
+Genetical Research = Genet. Res.
+Genetics = Genetics
+Genetics and Molecular Research = Genet. Mol. Res.
+Genetics in Medicine = Genet. Med.
+Genetika = Genetika
+Genitourinary Medicine = Genitourin. Med.
+Genome = Genome
+Genome Biology = Genome Biol.
+Genome Informatics = Genome Inform.
+Genome Research = Genome Res.
+Genomics = Genomics
+Genomics, Proteomics and Bioinformatics = Genomics Proteomics Bioinformatics
+Geochemical Journal=Geochem. J.;GEJOBE;BM
+Geochimica et Cosmochimica Acta=Geochim. Cosmochim. Acta;GCACAK;SM
+Geofisica Internationale = Geofis. Int.
+Geofysiske Publikasjoner = Geofys. Publ.
+Geographia Medica = Geogr. Med.
+Geographia Medica. Supplement = Geogr. Med. Suppl.
+Geokhimiya=Geokhimiya;GEOKAQ;M
+Geologiya i Geofizika = Geol. Geofiz.
+Geophysical Fluid Dynamics = Geophys. Fluid Dyn.
+Geophysical Magazine = Geophys. Mag.
+Geophysical Research Letters = Geophys. Res. Lett.
+Geophysical and Astrophysical Fluid Dynamics = Geophys. Astrophys. Fluid Dyn.
+Geophysics = Geophysics
+Georgetown Dental Journal = Georgetown Dent. J.
+Georgetown Law Journal = Georgetown Law J.
+Georgetown University School of Dentistry Mirror = Georgetown Univ. Sch. Dent. Mirror
+Georgia Hospitals Today = Ga. Hosp. Today
+Georgia Nursing = Ga. Nurse.
+Geriatric Nephrology and Urology = Geriatr. Nephrol. Urol.
+Geriatric Nursing = Geriatr. Nur. (Lond.)
+Geriatric Nursing and Home Care = Geriatr. Nur. Home Care
+Geriatrics = Geriatrics
+German Journal of Ophthalmology = Ger. J. Ophthalmol.
+German Medical Monthly = Ger. Med. Mon.
+German Medicine = Ger. Med.
+Gerodontics = Gerodontics
+Gerodontology = Gerodontology
+Geron = Geron
+Gerontion = Gerontion
+Gerontologia = Gerontologia
+Gerontologia Clinica = Gerontol. Clin. (Basel)
+Gerontologie = Gerontologie
+Gerontologist = Gerontologist
+Gerontology = Gerontology
+Gerontology and Geriatrics Education = Gerontol. Geriatr. Educ.
+Gesnerus = Gesnerus
+Gesnerus. Supplement = Gesnerus. Suppl.
+Gesundheits-Ingenieur = Gesund. Ing.
+Gesundheitswesen = Gesundheitswesen
+Ghana Medical Journal = Ghana Med. J.
+Ghanaian Nurse = Ghana. Nurse
+Gifu Shika Gakkai Zasshi (Journal of Gifu Dental Society) = Gifu Shika Gakkai Zasshi
+Gigiena Truda i Professionalnye Zabolevaniia = Gig. Tr. Prof. Zabol.
+Gigiena i Sanitariia = Gig. Sanit.
+Ginecologia y Obstetricia de Mexico = Ginecol. Obstet. Mex.
+Ginekologia Polska = Ginekol. Pol.
+Giornale Italiano della Tubercolosi e delle Malattie del Torace = G. Ital. Tuberc. Mal. Torace
+Giornale Italiano delle Malattie del Torace = G. Ital. Mal. Torace
+Giornale Italiano di Cardiologia = G. Ital. Cardiol.
+Giornale Italiano di Chemioterapia = G. Ital. Chemioter.
+Giornale Italiano di Chirurgia = G. Ital. Chir.
+Giornale Italiano di Dermatologia e Venereologia = G. Ital. Dermatol. Venereol.
+Giornale Italiano di Dermatologia. Minerva Dermatologica = G. Ital. Dermatol. Minerva Dermatol.
+Giornale Italiano di Endodonzia = G. Ital. Endodonzia
+Giornale Italiano di Medicina del Lavoro = G. Ital. Med. Lav.
+Giornale Italiano di Medicina del Lavoro ed Ergonomia = G. Ital. Med. Lav. Ergon.
+Giornale Italiano di Oftalmologia = G. Ital. Oftalmol.
+Giornale Italiano di Oncologia = G. Ital. Oncol.
+Giornale Veneto di Scienze Mediche = G. Veneto Sci. Med.
+Giornale di Anestesia Stomatologica = G. Anest. Stomatol.
+Giornale di Batteriologia, Virologia ed Immunologia = G. Batteriol. Virol. Immunol.
+Giornale di Batteriologia, Virologia ed Immunologia ed Annali dell Ospedale Maria Vittoria di Torino = G. Batteriol. Virol. Immunol.
+Giornale di Batteriologia, Virologia ed Immunologia ed Annali dell Ospedale Maria Vittoria di Torino. Parte 2, Sezione Clinica = G. Batteriol. Virol. Immunol. [Clin.]
+Giornale di Chirurgia = G. Chir.
+Giornale di Clinica Medica = G. Clin. Med.
+Giornale di Endodonzia = G. Endodonzia
+Giornale di Fisica Sanitaria e Protezione Contro le Radiazioni = G. Fis. Sanit. Prot. Radiaz.
+Giornale di Gerontologia = G. Gerontol.
+Giornale di Gerontologia. Supplemento = G. Gerontol. Suppl.
+Giornale di Igiene e Medicina Preventiva = G. Ig. Med. Prev.
+Giornale di Malattie Infettive e Parassitarie = G. Mal. Infett. Parassit.
+Giornale di Medicina Militare = G. Med. Mil.
+Giornale di Pneumologia = G. Pneumol.
+Giornale di Psichiatria e di Neuropatologia = G. Psichiatr. Neuropatol.
+Giornale di Stomatologia e di Ortognatodonzia = G. Stomatol. Ortognatodonzia
+Glasgow Dental Journal = Glasg. Dent. J.
+Glasnik, Srpska Akademija Nauka i Umetnosti, Odeljenje Medicinskih Nauka = Glas. Srp. Akad. Nauka [Med.]
+Glass Physics and Chemistry=Glass Phys. Chem.;GPHCEE;BM
+Glass Science and Technology (Offenbach, Germany)=Glass Sci. Technol. (Offenbach, Ger.);GSTEEX;BM
+Glass Technology=Glass Technol.;GLSTAK;BM
+GlassResearcher=GlassResearcher;GRESER;SA
+Glia = Glia
+Global Biogeochemical Cycles=Global Biogeochem. Cycles;GBCYEP;Q
+Globe = Globe
+Glycobiology = Glycobiology
+Glycoconjugate Journal = Glycoconj. J.
+Godisen Zbornik na Medicinskiot Fakultet vo Skopje = God. Zb. Med. Fak. Skopje
+Godisnjak Vojnomedicinske Akademije = God. Vojnomed. Akad.
+Gongneng Gaofenzi Xuebao=Gongneng Gaofenzi Xuebao;GGXUEH;Q
+Goteborgs Tandlakare-Sallskaps Arsbok = Goteb. Tandlak. Sallsk. Arsb.
+Government Relations Note = Gov. Relat. Note
+Graefe's Archive for Clinical and Experimental Ophthalmology = Graefes Arch. Clin. Exp. Ophthalmol.
+Grants Magazine = Grants Mag.
+Grantsmanship Center News = Grantsmanship Cent. News
+Greater Milwaukee Dental Bulletin = Greater Milw. Dent. Bull.
+Greater St Louis Dental Society Bulletin = Greater St Louis Dent. Soc. Bull.
+Ground Water=Ground Water;GRWAAP;BM
+Group Health Journal = Group Health J.
+Group Practice = Group Pract.
+Group Practice Journal = Group Pract. J.
+Growth = Growth
+Growth Factors = Growth Factors
+Growth Hormone and IGF Research = Growth Horm. IGF Res.
+Growth Regulation = Growth Regul.
+Growth, Development and Aging = Growth. Dev. Aging
+Grudnaia Khirurgiia = Grudn. Khir.
+Grudnaia i Serdechno-Sosudistaia Khirurgiia = Grud. Serdechnososudistaia. Khir.
+Gruzlica i Choroby Pluc = Gruzlica
+Guangpuxue Yu Guangpu Fenxi=Guangpuxue Yu Guangpu Fenxi;GYGFED;M
+Guijinshu=Guijinshu;GUIJE7;Q
+Guisuanyan Xuebao=Guisuanyan Xuebao;KSYHA5;M
+Gunma Journal of Medical Sciences = Gunma J. Med. Sci.
+Guocheng Gongcheng Xuebao=Guocheng Gongcheng Xuebao;CJPEB5;BM
+Gut = Gut
+Guy's Hospital Reports = Guys Hosp. Rep.
+Gynaecologia = Gynaecologia
+Gynakologe = Gynakologe
+Gynakologisch-Geburtshilfliche Rundschau = Gynakol. Geburtshilfliche Rundsch.
+Gynakologische Rundschau = Gynakol. Rundsch.
+Gynecologic Investigation = Gynecol. Invest.
+Gynecologic Oncology = Gynecol. Oncol.
+Gynecologic and Obstetric Investigation = Gynecol. Obstet. Invest.
+Gynecological Endocrinology = Gynecol. Endocrinol.
+Gynecologie = Gynecologie
+Gynecologie Pratique = Gynecol. Prat.
+Gynecologie et Obstetrique = Gynecol. Obstet. (Paris)
+Gynecologie, Obstetrique et Fertilite = Gynecol. Obstet. Fertil.
+HASL Reports = HASL Rep.
+HBI Report = HBI Rep.
+HEC Forum = HEC Forum
+HIV Clinical Trials = HIV Clin. Trials
+HIV Medicine = HIV Med.
+HMO = HMO
+HMO Practice = HMO Pract.
+HNO = HNO
+HPB Surgery = HPB Surg.
+HPN: Hospital Purchasing News = HPN Hosp. Purch. News
+HRMagazine = HRMAGAZINE
+HSMHA Health Reports = HSMHA Health Rep.
+Haematologia = Haematologia (Budap.)
+Haematologica = Haematologica
+Haematologica Latina = Haematol. Lat.
+Haemophilia = Haemophilia
+Haemostasis = Haemostasis
+Hamatologie und Bluttransfusion = Hamatol. Bluttransfus.
+Hand = Hand
+Hand Clinics = Hand Clin.
+Hand Surgery = Hand Surg.
+Handchirurgie = Handchirurgie
+Handchirurgie, Mikrochirurgie, Plastische Chirurgie = Handchir. Mikrochir. Plast. Chir.
+Hansenologia Internationalis = Hansenol. Int.
+Harbor Dental Log = Harb. Dent. Log
+Harefuah = Harefuah
+Harvard Business Review = Harv. Bus. Rev.
+Harvard Dental Alumni Bulletin = Harv. Dent. Alumni Bull.
+Harvard Dental Bulletin = Harv. Dent. Bull.
+Harvard Health Letter = Harv. Health Lett.
+Harvard Heart Letter = Harv. Heart Lett.
+Harvard Law Review = Harv. Law Rev.
+Harvard Men's Health Watch = Harv. Mens Health Watch
+Harvard Mental Health Letter = Harv. Ment. Health Lett.
+Harvard Review of Psychiatry = Harv. Rev. Psychiatry
+Harvard Women's Health Watch = Harv. Womens Health Watch
+Harvey Lectures = Harvey Lect.
+Hastings Center Report = Hastings Cent. Rep.
+Hastings Center Studies = Hastings Cent. Stud.
+Hautarzt = Hautarzt
+Hawaii Dental Journal = Hawaii Dent. J.
+Hawaii Medical Journal = Hawaii Med. J.
+Hawaii Nurse = Hawaii Nurse
+Hawaii Nurses Pipeline = Hawaii Nurses Pipeline
+Head and Neck = Head Neck
+Head and Neck Surgery = Head Neck Surg.
+Headache = Headache
+Healing Light = Heal. Light
+Health = Health (N. Y.)
+Health Affairs = Health Aff. (Millwood)
+Health Bulletin = Health Bull. (Edinb.)
+Health Care = Health Care (Don Mills)
+Health Care Analysis = Health Care Anal.
+Health Care Cost Reengineering Report = Health Care Cost Reengineering Rep.
+Health Care Dimensions = Health Care Dimen.
+Health Care Education = Health Care Educ.
+Health Care Financing Review = Health Care Financ. Rev.
+Health Care Financing Review. Annual Supplement = Health Care Financ. Rev. Annu. Suppl.
+Health Care Financing Review. Statistical Supplement = Health Care Financ. Rev. Stat. Suppl.
+Health Care Financing Trends = Health Care Financ. Trends
+Health Care Food and Nutrition Focus = Health Care Food Nutr. Focus
+Health Care Innovations = Health Care Innov.
+Health Care Law Monthly = Health Care Law Mon.
+Health Care Law Newsletter = Health Care Law Newsl.
+Health Care Management = Health Care Manag.
+Health Care Management Review = Health Care Manage. Rev.
+Health Care Management Science = Health Care Manag. Sci.
+Health Care Marketer = Health Care Mark.
+Health Care Marketer and Target Market = Health Care Mark. Target Market
+Health Care Newsletter = Health Care Newsl.
+Health Care Planning and Marketing = Health Care Plann. Mark.
+Health Care Reform Week = Health Care Reform Week
+Health Care Security and Safety Management = Health Care Secur. Saf. Manage.
+Health Care Strategic Management = Health Care Strateg. Manage.
+Health Care Supervisor = Health Care Superv.
+Health Care Systems = Health Care Syst.
+Health Care Week = Health Care Week
+Health Care for Women International = Health Care Women Int.
+Health Care in Canada = Health Care Can.
+Health Communications and Informatics = Health Commun. Informatics
+Health Cost Management = Health Cost Manage.
+Health Data Management = Health Data Manag.
+Health Devices = Health Devices
+Health Economics = Health Econ.
+Health Education = Health Educ.
+Health Education Journal = Health Educ. J.
+Health Education Monographs = Health Educ. Monogr.
+Health Education Quarterly = Health Educ. Q.
+Health Education Reports = Health Educ. Rep.
+Health Education Research = Health Educ. Res.
+Health Education and Behavior = Health Educ. Behav.
+Health Estate = Health Estate
+Health Estate Journal = Health Estate J.
+Health Expectations = Health Expect.
+Health Facilities Management = Health Facil. Manage.
+Health Forum Journal = Health Forum J.
+Health Industry Today = Health Ind. Today
+Health Information Management = Health Inf. Manag.
+Health Information Systems and Telemedicine = Health Inf. Syst. Telemed.
+Health Laboratory Science = Health Lab. Sci.
+Health Law Project Library Bulletin = Health Law Proj. Libr. Bull.
+Health Law Vigil = Health Law Vigil
+Health Law in Canada = Health Law Can.
+Health Libraries Review = Health Libr. Rev.
+Health Management Forum = Health Manage. Forum
+Health Management Quarterly = Health Manage. Q.
+Health Management Technology = Health Manag. Technol.
+Health Manpower Literature = Health Manpow. Lit.
+Health Manpower Management = Health Manpow. Manage.
+Health Manpower Report = Health Manpow. Rep.
+Health Marketing Quarterly = Health Mark. Q.
+Health Matrix = Health Matrix
+Health News = Health News
+Health PAC Bulletin = Health PAC Bull.
+Health Perspectives = Health Perspect.
+Health Physics = Health Phys.
+Health Planning and Manpower Report = Health Plann. Manpow. Rep.
+Health Planning and Manpower Reports = Health Plann. Manpow. Rep.
+Health Policy = Health Policy
+Health Policy Quarterly = Health Policy Q.
+Health Policy Week = Health Policy Week
+Health Policy and Education = Health Policy Educ.
+Health Policy and Planning = Health Policy Plan.
+Health Practitioner. Physician Assistant = Health Pract. Physician Assist.
+Health Progress = Health Prog.
+Health Promotion = Health Promot.
+Health Psychology = Health Psychol.
+Health Reports = Health Rep.
+Health Service Journal = Health Serv. J.
+Health Services Management = Health Serv. Manage.
+Health Services Management Research = Health Serv. Manage. Res.
+Health Services Manager = Health Serv. Manager
+Health Services Manpower Review = Health Serv. Manpow. Rev.
+Health Services Reports = Health Serv. Rep.
+Health Services Research = Health Serv. Res.
+Health System Leader = Health Syst. Lead.
+Health Systems Management = Health Syst. Manage.
+Health Systems Review = Health Syst. Rev.
+Health Technology = Health Technol.
+Health Technology Assessment = Health Technol. Assess.
+Health Technology Assessment Reports = Health Technol. Assess. Rep.
+Health Transition Review = Health Transit. Rev.
+Health Trends = Health Trends
+Health Values = Health Values
+Health Visitor = Health Visit.
+Health and Human Rights = Health Hum. Rights
+Health and Medical Care Services Review = Health Med. Care Serv. Rev.
+Health and Medicine = Health Med.
+Health and Population: Perspectives and Issues = Health Popul. Perspect. Issues
+Health and Quality of Life Outcomes = Health Qual. Life Outcomes
+Health and Social Service Journal = Health Soc. Serv. J.
+Health and Social Work = Health Soc. Work
+Health of the People = Health People
+Healthcare Alabama = Healthc. Ala.
+Healthcare Benchmarks = Healthc. Benchmarks
+Healthcare Bottom Line = Healthc. Bottom Line
+Healthcare Computing and Communications = Healthc. Comput. Commun.
+Healthcare Demand and Disease Management = Healthc. Demand Dis. Manag.
+Healthcare Executive = Healthc. Exec.
+Healthcare Executive Currents = Healthc. Exec. Curr.
+Healthcare Facilities Management Series = Healthc. Facil. Manag. Ser.
+Healthcare Financial Management = Healthc. Financ. Manage.
+Healthcare Foodservice = Healthc. Foodserv.
+Healthcare Forum = Healthc. Forum
+Healthcare Forum Journal = Healthc. Forum J.
+Healthcare Hazardous Materials Management = Healthc. Hazard. Mater. Manage.
+Healthcare Human Resources = Healthc. Hum. Resour.
+Healthcare Informatics = Healthc. Inform.
+Healthcare Information Management = Healthc. Inf. Manage.
+Healthcare Management Forum = Healthc. Manage. Forum
+Healthcare Protection Management = Healthc. Prot. Manage.
+Healthcare Strategist = Healthc. Strateg.
+Healthcare Systems Strategy Report = Healthc. Syst. Strategy Rep.
+Healthcare Trends and Transition = Healthc. Trends Transit.
+Healthcarepapers = Healthc. Pap.
+Healthmarketing = Healthmarketing
+Healthplan = Healthplan
+Healthspan = Healthspan
+Healthtexas = Healthtexas
+Hearing Research = Hear. Res.
+Heart = Heart
+Heart Disease = Heart Dis.
+Heart Disease and Stroke = Heart Dis. Stroke
+Heart Failure Reviews = Heart Fail. Rev.
+Heart Rhythm = Heart Rhythm
+Heart Surgery Forum = Heart Surg. Forum
+Heart and Lung = Heart Lung
+Heart and Vessels = Heart Vessels
+Heart and Vessels. Supplement = Heart Vessels. Suppl.
+Heartbeat = Heartbeat
+Heat Transfer Engineering=Heat Transfer Eng.;HTEND2;8/YR
+Heating, Piping and Air Conditioning = Heat. Piping Air Cond.
+Hecheng Xiangjiao Gongye=Hecheng Xiangjiao Gongye;HXGOEA;BM
+Hefte zur Unfallheilkunde = Hefte Unfallheilkd.
+Helicobacter = Helicobacter
+Hellenic Journal of Cardiology = Hellenic J. Cardiol.
+Hellenic Journal of Nuclear Medicine = Hell. J. Nucl. Med.
+Hellenika Stomatologika Chronika = Hell. Stomatol. Chron.
+Helleniko Periodiko gia Stomatike kai Gnathoprosopike Cheirourgike = Hell. Period. Stomat. Gnathopathoprosopike. Cheir.
+Hellenis Adelphe = Hell. Adelphe
+Helvetica Chimica Acta = Helv. Chim. Acta
+Helvetica Chirurgica Acta = Helv. Chir. Acta
+Helvetica Chirurgica Acta. Supplementum = Helv. Chir. Acta. Suppl.
+Helvetica Medica Acta = Helv. Med. Acta
+Helvetica Medica Acta. Supplement = Helv. Med. Acta. Suppl.
+Helvetica Odontologica Acta = Helv. Odontol. Acta
+Helvetica Paediatrica Acta = Helv. Paediatr. Acta
+Helvetica Paediatrica Acta. Supplementum = Helv. Paediatr. Acta. Suppl.
+Helvetica Physiologica et Pharmacologica Acta = Helv. Physiol. Pharmacol. Acta
+Hematologic Pathology = Hematol. Pathol.
+Hematological Oncology = Hematol. Oncol.
+Hematology = Hematology
+Hematology Journal = Hematol. J.
+Hematology and Cell Therapy = Hematol. Cell Ther.
+Hematology/Oncology Clinics of North America = Hematol. Oncol. Clin. North Am.
+Hematopathology and Molecular Hematology = Hematopathol. Mol. Hematol.
+Hemoglobin = Hemoglobin
+Hemostase = Hemostase
+Henry E. Sigerist Supplements to the Bulletin of the History of Medicine = Henry E. Sigerist Suppl. Bull. Hist. Med.
+Henry Ford Hospital Medical Journal = Henry Ford Hosp. Med. J.
+Hepato-Gastroenterology = Hepatogastroenterology.
+Hepatobiliary and Pancreatic Diseases International = Hepatobiliary Pancreat. Dis. Int.
+Hepatology = Hepatology
+Hereditas = Hereditas
+Heredity = Heredity
+Hernia = Hernia
+Herz = Herz
+Heteroatom Chemistry=Heteroat. Chem.;HETCE8;7/YR
+Heterocycles=Heterocycles;HTCYAM;14/YR
+Heterocyclic Communications=Heterocycl. Commun.;HCOMEX;BM
+Hifuka Kiyo (Acta Dermatologica) = Hifuka Kiyo
+Higashi Nippon Shigaku Zasshi = Higashi Nippon Shigaku Zasshi
+High Altitude Medicine and Biology = High Alt. Med. Biol.
+High Energy Chemistry=High Energy Chem.;HIECAP;BM
+High Performance Polymers=High Perform. Polym.;HPPOEX;Q
+High Temperature=High Temp.;HITEA4;BM
+High Temperature Materials and Processes (London, United Kingdom)=High Temp. Mater. Processes (London, U. K.);HTMPEF;6/YR
+High Temperatures - High Pressures=High Temp. - High Pressures;HTHPAK;BM
+Higijena: Casopis za Higijenu, Mikrobiologiju, Epidemiologiju i Sanitarnu Tehniku = Hig. Cas. Hig. Mikrobiol. Epidemiol. Sanit. Teh.
+Hillside Journal of Clinical Psychiatry = Hillside J. Clin. Psychiatry
+Hindustan Antibiotics Bulletin = Hindustan Antibiot. Bull.
+Hinyokika Kiyo (Acta Urologica Japonica) = Hinyokika Kiyo
+Hip = Hip
+Hippocampus = Hippocampus
+Hippokrates = Hippokrates
+Hiroshima Daigaku Shigaku Zasshi (Journal of Hiroshima University Dental Society) = Hiroshima Daigaku Shigaku Zasshi
+Hiroshima Journal of Medical Sciences = Hiroshima J. Med. Sci.
+Hispalis Medica = Hisp. Med.
+Histochemical Journal = Histochem. J.
+Histochemie = Histochemie
+Histochemistry = Histochemistry
+Histochemistry and Cell Biology = Histochem. Cell Biol.
+Histology and Histopathology = Histol. Histopathol.
+Histopathology = Histopathology
+Hoitotiede = Hoitotiede
+Hoja Tisiologica = Hoja Tisiol.
+Hokenfu Zasshi (Japanese Journal for Public Health Nurse) = Hokenfu Zasshi
+Hokkaido Igaku Zasshi (Hokkaido Journal of Medical Science) = Hokkaido Igaku Zasshi
+Hokkaido Shika Ishikai Shi = Hokkaido Shika Ishikai Shi
+Holistic Assertive Nurse = Holistic Assertive Nurse
+Holistic Nursing Practice = Holist. Nurs. Pract.
+Holzforschung=Holzforschung;HOLZAZ;BM
+Home Care Economics = Home Care Econ.
+Home Care Provider = Home Care Provid.
+Home Health Care Services Quarterly = Home Health Care Serv. Q.
+Home Health Journal = Home Health J.
+Home Health Review = Home Health Rev.
+Home Healthcare Nurse = Home Healthc. Nurse
+Homeopathy = Homeopathy
+Homeostasis in Health and Disease = Homeost. Health Dis.
+Hoppe-Seylers Zeitschrift fur Physiologische Chemie = Hoppe. Seylers Z. Physiol. Chem.
+Horizons in Biochemistry and Biophysics = Horiz. Biochem. Biophys.
+Hormone Research = Horm. Res.
+Hormone and Metabolic Research = Horm. Metab. Res.
+Hormone and Metabolic Research. Supplement = Horm. Metab. Res. Suppl.
+Hormones = Hormones
+Hormones and Behavior = Horm. Behav.
+Horumon to Rinsho (Clinical Endocrinology) = Horumon To Rinsho
+Hospice Journal = Hosp. J.
+Hospital = Hospital (Rio J.)
+Hospital Administration = Hosp. Adm. (Chic.)
+Hospital Administration Currents = Hosp. Admin. Curr.
+Hospital Administration in Canada = Hosp. Adm. Can.
+Hospital Admitting Monthly = Hosp. Admitting Mon.
+Hospital Aviation = Hosp. Aviat.
+Hospital Bond Review = Hosp. Bond Rev.
+Hospital Capital Finance = Hosp. Cap. Finance
+Hospital Case Management = Hosp. Case Manag.
+Hospital Cost Management and Accounting = Hosp. Cost Manag. Account.
+Hospital Development = Hosp. Dev.
+Hospital Employee Health = Hosp. Employee Health
+Hospital Engineering = Hosp. Eng.
+Hospital Entrepreneurs Newsletter = Hosp. Entrep. Newsl.
+Hospital Equipment and Supplies = Hosp. Equip. Supplies
+Hospital Ethics = Hosp. Ethics
+Hospital Financial Management = Hosp. Financ. Manage.
+Hospital Food and Nutrition Focus = Hosp. Food Nutr. Focus
+Hospital Formulary = Hosp. Formul.
+Hospital Forum = Hosp. Forum
+Hospital Gift Shop Management = Hosp. Gift Shop Manage.
+Hospital Guest Relations Report = Hosp. Guest Relations Rep.
+Hospital Hazardous Materials Management = Hosp. Hazard. Mater. Manage.
+Hospital Health Care Newsletter = Hosp. Health Care Newsl.
+Hospital Infection Control = Hosp. Infect. Control
+Hospital Law Newsletter = Hosp. Law Newsl.
+Hospital Libraries = Hosp. Libr.
+Hospital Management = Hosp. Manage.
+Hospital Management Communications = Hosp. Manage. Commun.
+Hospital Management Quarterly = Hosp. Manage. Q.
+Hospital Manager = Hosp. Manager
+Hospital Materials Management = Hosp. Mater. Manage.
+Hospital Materiel Management Quarterly = Hosp. Mater. Manage. Q.
+Hospital Medical Staff = Hosp. Med. Staff
+Hospital Medicine = Hosp. Med.
+Hospital Outlook = Hosp. Outlook
+Hospital Patient Relations Report = Hosp. Patient Relat. Rep.
+Hospital Peer Review = Hosp. Peer Rev.
+Hospital Pharmacy = Hosp. Pharm.
+Hospital Physician = Hosp. Physician
+Hospital Practice = Hosp. Pract.
+Hospital Practice (Hospital Edition) = Hosp. Pract. (Hosp. Ed.)
+Hospital Practice (Office Edition) = Hosp. Pract. (Off. Ed.)
+Hospital Progress = Hosp. Prog.
+Hospital Purchasing Management = Hosp. Purch. Manage.
+Hospital Quarterly = Hosp. Q.
+Hospital Revenue Report = Hosp. Revenue Rep.
+Hospital Risk Management = Hosp. Risk Manage.
+Hospital Security and Safety Management = Hosp. Secur. Saf. Manage.
+Hospital Strategy Report = Hosp. Strategy Rep.
+Hospital Supervision = Hosp. Superv.
+Hospital Supervisors Bulletin = Hosp. Superv. Bull.
+Hospital Technology Series = Hosp. Technol. Ser.
+Hospital Topics = Hosp. Top.
+Hospital Trustee = Hosp. Trustee
+Hospital and Community Psychiatry = Hosp. Community Psychiatry
+Hospital and Health Services Administration = Hosp. Health Serv. Adm.
+Hospital and Health Services Review = Hosp. Health Serv. Rev.
+Hospitalist = Hosp. Natl. Assoc. Inpatient. Physicians.
+Hospitals = Hospitals
+Hospitals and Health Networks = Hosp. Health Netw.
+Hotetsu Rinsho (Practice in Prosthodontics) = Hotetsu Rinsho
+How to Evaluate Health Programs = How Eval. Health Programs
+Hu Li Za Zhi (Journal of Nursing) = Hu Li Za Zhi
+Hua Xi Yi Ke Da Xue Xue Bao (Journal of West China University of Medical Sciences) = Hua Xi Yi Ke Da Xue Xue Bao
+Huadong Ligong Daxue Xuebao, Ziran Kexueban=Huadong Ligong Daxue Xuebao, Ziran Kexueban;HLIXEV;BM
+Huagong Xuebao (Chinese Edition)=Huagong Xuebao (Chin. Ed.);HUKHAI;M
+Huanjing Huaxue=Huanjing Huaxue;HUHUDB;BM
+Huanjing Kexue Xuebao=Huanjing Kexue Xuebao;HKXUDL;M
+Huaxue=Huaxue;HUHSA2;Q
+Huaxue Fanying Gongcheng Yu Gongyi=Huaxue Fanying Gongcheng Yu Gongyi;HFGGEU;BM
+Huaxue Shiji=Huaxue Shiji;HUSHDR;M
+Huaxue Tongbao=Huaxue Tongbao;HHTPAU;M
+Huaxue Wuli Xuebao=Huaxue Wuli Xuebao;HWXUE4;BM
+Huaxue Xuebao=Huaxue Xuebao;HHHPA4;SM
+Human Antibodies = Hum. Antibodies
+Human Antibodies and Hybridomas = Hum. Antibodies Hybridomas
+Human Biology = Hum. Biol.
+Human Biology in Oceania = Hum. Biol. Oceania
+Human Brain Mapping = Hum. Brain Mapp.
+Human Cell = Hum. Cell
+Human Development = Hum. Dev.
+Human Factors = Hum. Factors
+Human Fertility = Hum. Fertil.
+Human Gene Therapy = Hum. Gene Ther.
+Human Genetics = Hum. Genet.
+Human Genetics. Supplement = Hum. Genet. Suppl.
+Human Genomics = Hum. Genomics
+Human Heredity = Hum. Hered.
+Human Immunology = Hum. Immunol.
+Human Molecular Genetics = Hum. Mol. Genet.
+Human Mutation = Hum. Mutat.
+Human Neurobiology = Hum. Neurobiol.
+Human Nutrition. Applied Nutrition = Hum. Nutr. Appl. Nutr.
+Human Nutrition. Clinical Nutrition = Hum. Nutr. Clin. Nutr.
+Human Organization = Hum. Organ.
+Human Pathology = Hum. Pathol.
+Human Physiology = Hum. Physiol.
+Human Reproduction = Hum. Reprod.
+Human Reproduction Update = Hum. Reprod. Update
+Human Resource Management = Hum. Resour. Manage.
+Human Toxicology = Hum. Toxicol.
+Human Vaccines = Hum. Vaccin.
+Human and Experimental Toxicology = Hum. Exp. Toxicol.
+Humangenetik = Humangenetik
+Hunan Yi Ke Da Xue Xue Bao (Bulletin of Hunan Medical University) = Hunan Yi Ke Da Xue Xue Bao
+Hungarian Journal of Industrial Chemistry=Hung. J. Ind. Chem.;HJICAI;4/YR
+Hwahak Konghak=Hwahak Konghak;HHKHAT;BM
+Hybridoma = Hybridoma
+Hybridoma and Hybridomics = Hybrid. Hybridomics
+Hydrometallurgy=Hydrometallurgy;HYDRDA;M
+Hygie = Hygie
+Hygiene Mentale = Hyg. Ment.
+Hyperfine Interactions=Hyperfine Interact.;HYINDN;28/YR
+Hypertension = Hypertension
+Hypertension Research = Hypertens. Res.
+IADS Newsletter = IADS Newsl.
+IARC Monographs on the Evaluation of Carcinogenic Risk of Chemicals to Man = IARC Monogr. Eval. Carcinog. Risk Chem. Man
+IARC Monographs on the Evaluation of Carcinogenic Risks to Humans = IARC Monogr. Eval. Carcinog. Risks Hum.
+IARC Monographs on the Evaluation of Carcinogenic Risks to Humans. Supplement = IARC Monogr. Eval. Carcinog. Risks Hum. Suppl.
+IARC Monographs on the Evaluation of the Carcinogenic Risk of Chemicals to Humans = IARC Monogr. Eval. Carcinog. Risk Chem. Hum.
+IARC Monographs on the Evaluation of the Carcinogenic Risk of Chemicals to Humans. Supplement = IARC Monogr. Eval. Carcinog. Risk Chem. Hum. Suppl.
+IARC Scientific Publications = IARC Sci. Publ.
+ICD Scientific and Educational Journal = ICD Sci. Educ. J.
+IDAA Communique = IDAA Commun.
+IDO Reports = IDO Rep.
+IEE Proceedings. Nanobiotechnology = IEE Proc. Nanobiotechnol.
+IEEE Aerospace and Electronic Systems Magazine = IEEE Aero. El. Sys. Mag.
+IEEE Annals of the History of Computing = IEEE Ann. Hist. Comput.
+IEEE Antennas and Propagation Magazine = IEEE Antennas. Propag.
+IEEE Antennas and Wireless Propagation Letters = IEEE Antenn. Wirel. Pr.
+IEEE Circuits & Devices = IEEE Circuits. Device.
+IEEE Circuits and Devices Magazine = IEEE Circuit. Devic.
+IEEE Communications Letters = IEEE Commun. Lett.
+IEEE Communications Magazine = IEEE Commun. Mag.
+IEEE Computational Science & Engineering = IEEE Comput. Sci. Eng.
+IEEE Computer Applications in Power = IEEE Comput. Appl. Pow.
+IEEE Computer Graphics and Applications = IEEE Comput. Graph.
+IEEE Computer Group News = IEEE Comput. Group. N.
+IEEE Concurrency = IEEE Concurr.
+IEEE Control Systems Magazine = IEEE Contr. Syst. Mag.
+IEEE Design & Test of Computers = IEEE Des. Test. Comput.
+IEEE Electrical Insulation Magazine = IEEE Electr. Insul. M.
+IEEE Electromagnetic Compatibility Symposium Record = IEEE Electroman. Comp.
+IEEE Electron Device Letters = IEEE Electr. Device. L.
+IEEE Engineering in Medicine and Biology Magazine = IEEE Eng. Med. Biol. Mag.
+IEEE Expert-intelligent Systems & their Applications = IEEE Expert.
+IEEE Geoscience and Remote Sensing Letters = IEEE Geosci. Remote. S.
+IEEE Industry Applications Magazine = IEEE Ind. Appl. Mag.
+IEEE Instrumentation & Measurement Magazine = IEEE Instru. Meas. Mag.
+IEEE Intelligent Systems = IEEE Intell. Syst.
+IEEE Intelligent Systems & their Applications = IEEE Intell. Syst. App.
+IEEE Internet Computing = IEEE Internet. Comput.
+IEEE Journal of Oceanic Engineering = IEEE J. Oceanic. Eng.
+IEEE Journal of Quantum Electronics = IEEE J. Quantum. Electron.
+IEEE Journal of Robotics and Automation = IEEE T. Robotic. Autom.
+IEEE Journal of Selected Topics in Quantum Electronics = IEEE J. Sel. Topics in Quantum Electron.
+IEEE Journal of Solid-State Circuits = IEEE J. Solid-St. Circ.
+IEEE Journal on Selected Areas in Communications = IEEE J. Sel. Area. Comm.
+IEEE Micro = IEEE Micro.
+IEEE Microwave Magazine = IEEE Microw. Mag.
+IEEE Microwave and Guided Wave Letters = IEEE Microw. Guided. W.
+IEEE Microwave and Wireless Components Letters = IEEE Microw. Wirel. Co.
+IEEE Multimedia = IEEE Multimedia.
+IEEE Network = IEEE Network.
+IEEE Parallel & Distributed Technology = IEEE Parall. Distrib.
+IEEE Personal Communications = IEEE Pers. Commun.
+IEEE Pervasive Computing = IEEE Pervas. Comput.
+IEEE Photonics Technology Letters = IEEE Photonic. Tech. L.
+IEEE Potentials = IEEE Potentials.
+IEEE Robotics & Automation Magazine = IEEE Robot. Autom. Mag.
+IEEE Security & Privacy = IEEE Secur. Priv.
+IEEE Sensors Journal = IEEE Sens. J.
+IEEE Signal Processing Letters = IEEE Signal. Proc. Let.
+IEEE Signal Processing Magazine = IEEE Signal. Proc. Mag.
+IEEE Software = IEEE Software.
+IEEE Spectrum = IEEE Spectrum.
+IEEE Technology and Society Magazine = IEEE Technol. Soc. Mag.
+IEEE Transactions on Acoustics Speech and Signal Processing = IEEE T. Acoust. Speech.
+IEEE Transactions on Advanced Packaging = IEEE Trans. Adv. Pack.
+IEEE Transactions on Aerospace = IEEE T. Aerosp.
+IEEE Transactions on Aerospace and Electronic Systems = IEEE T. Aero. Elec. Sys.
+IEEE Transactions on Aerospace and Naval Electronics = IEEE T. Aero. Nav. Elec.
+IEEE Transactions on Aerospace and Navigational Electronics = IEEE Trans. Aerosp. N.
+IEEE Transactions on Antennas and Propagation = IEEE Trans. Antennas Propag.
+IEEE Transactions on Applications and Industry = IEEE T. Appl. Ind.
+IEEE Transactions on Applied Superconductivity = IEEE T. Appl. Supercon.
+IEEE Transactions on Audio = IEEE Trans. Audio.
+IEEE Transactions on Audio Speech and Language Processing = IEEE T. Audio. Speech.
+IEEE Transactions on Audio and Electroacoustics = IEEE T. Acoust. Speech.
+IEEE Transactions on Automatic Control = IEEE T. Automat. Contr.
+IEEE Transactions on Automation Science and Engineering = IEEE T. Autom. Sci. Eng.
+IEEE Transactions on Biomedical Engineering = IEEE Trans. Biomed. Eng.
+IEEE Transactions on Broadcast and Television Receivers = IEEE T. Broadc. Telev.
+IEEE Transactions on Broadcasting = IEEE T. Broadcast.
+IEEE Transactions on Circuit Theory = IEEE T. Circuits. Syst.
+IEEE Transactions on Circuits and Systems = IEEE T. Circuits. Syst.
+IEEE Transactions on Circuits and Systems For Video Technology = IEEE T. Circ. Syst. Vid.
+IEEE Transactions on Circuits and Systems I-Fundamental Theory and Applications = IEEE T. Circuits-I.
+IEEE Transactions on Circuits and Systems I-Regular Papers = IEEE T. Circuits-I.
+IEEE Transactions on Circuits and Systems Ii-Analog and Digital Signal Processing = IEEE T. Circuits-Ii.
+IEEE Transactions on Circuits and Systems Ii-Express Briefs = IEEE T. Circuits-Ii.
+IEEE Transactions on Communication Technology = IEEE T. Commun. Techn.
+IEEE Transactions on Communication and Electronics = IEEE T. Commun. Electr.
+IEEE Transactions on Communications = IEEE T. Commun.
+IEEE Transactions on Communications Systems = IEEE T. Commun. Syst.
+IEEE Transactions on Component Parts = IEEE T. Compon. Parts.
+IEEE Transactions on Components Hybrids and Manufacturing Technology = IEEE T. Compon. Hybr.
+IEEE Transactions on Components Packaging and Manufacturing Technology Part A = IEEE T. Compon. Pack. A.
+IEEE Transactions on Components Packaging and Manufacturing Technology Part B-Advanced Packaging = IEEE T. Compon. Pack. B.
+IEEE Transactions on Components and Packaging Technologies = IEEE T. Compon. Pack. T.
+IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems = IEEE T. Comput. Aid. D.
+IEEE Transactions on Computers = IEEE T. Comput.
+IEEE Transactions on Consumer Electronics = IEEE T. Consum. Electr.
+IEEE Transactions on Control Systems Technology = IEEE T. Contr. Syst. T.
+IEEE Transactions on Dependable and Secure Computing = IEEE T. Depend. Secure.
+IEEE Transactions on Device and Materials Reliability = IEEE T. Device. Mat. Re.
+IEEE Transactions on Dielectrics and Electrical Insulation = IEEE T. Dielect. El. In.
+IEEE Transactions on Education = IEEE T. Educ.
+IEEE Transactions on Electrical Insulation = IEEE T. Electr. Insul.
+IEEE Transactions on Electromagnetic Compatibility = IEEE T. Electromagn. C.
+IEEE Transactions on Electron Devices = IEEE T. Electron. Dev.
+IEEE Transactions on Electronic Computers = IEEE Trans. Electron.
+IEEE Transactions on Electronics Packaging Manufacturing = IEEE T. Electron. Pack.
+IEEE Transactions on Energy Conversion = IEEE T. Energy. Conver.
+IEEE Transactions on Engineering Management = IEEE T. Eng. Manage.
+IEEE Transactions on Engineering Writing and Speech = IEEE T. Prof. Commun.
+IEEE Transactions on Evolutionary Computation = IEEE T. Evolut. Comput.
+IEEE Transactions on Fuzzy Systems = IEEE T. Fuzzy. Syst.
+IEEE Transactions on Geoscience Electronics = IEEE T. Geosci. Elect.
+IEEE Transactions on Geoscience and Remote Sensing = IEEE Trans. Geosci. Remote Sens.
+IEEE Transactions on Human Factors in Electronics = IEEE Trans. Hum. Fact.
+IEEE Transactions on Human Factors in Engineering = IEEE T. Hum. Fact. Eng.
+IEEE Transactions on Image Processing = IEEE T. Image. Process.
+IEEE Transactions on Industrial Electronics = IEEE T. Ind. Electron.
+IEEE Transactions on Industrial Electronics and Control Instrumentation = IEEE T. Ind. El. Con. In.
+IEEE Transactions on Industry Applications = IEEE T. Ind. Appl.
+IEEE Transactions on Industry and General Applications = IEEE Trans. Ind. Gen. A.
+IEEE Transactions on Information Technology in Biomedicine = IEEE Trans. Inf. Technol. Biomed.
+IEEE Transactions on Information Theory = IEEE T. Inform. Theory.
+IEEE Transactions on Instrumentation and Measurement = IEEE T. Instrum. Meas.
+IEEE Transactions on Intelligent Transportation Systems = IEEE T. Intell. Transp.
+IEEE Transactions on Knowledge and Data Engineering = IEEE T. Knowl. Data. En.
+IEEE Transactions on Magnetics = IEEE T. Magn.
+IEEE Transactions on Man-Machine Systems = IEEE T. Man. Machine.
+IEEE Transactions on Manufacturing Technology = IEEE T. Manuf. Tech.
+IEEE Transactions on Medical Imaging = IEEE Trans. Med. Imaging
+IEEE Transactions on Microwave Theory and Techniques = IEEE T. Microw. Theory.
+IEEE Transactions on Military Electronics = IEEE T. Mil. Electron.
+IEEE Transactions on Mobile Computing = IEEE T. Mobile. Comput.
+IEEE Transactions on Multimedia = IEEE T. Multimedia.
+IEEE Transactions on Nanobioscience = IEEE Trans. Nanobioscience
+IEEE Transactions on Nanotechnology = IEEE T. Nanotechnol.
+IEEE Transactions on Neural Networks = IEEE T. Neural. Networ.
+IEEE Transactions on Neural Systems and Rehabilitation Engineering = IEEE Trans. Neural Syst. Rehabil. Eng.
+IEEE Transactions on Nuclear Science = IEEE T. Nucl. Sci.
+IEEE Transactions on Parallel and Distributed Systems = IEEE T. Parall. Distr.
+IEEE Transactions on Parts Hybrids and Packaging = IEEE T. Parts. Hyb. Pac.
+IEEE Transactions on Parts Materials and Packaging = IEEE Tr. Parts. Mater.
+IEEE Transactions on Pattern Analysis and Machine Intelligence = IEEE T. Pattern. Anal.
+IEEE Transactions on Plasma Science = IEEE T. Plasma. Sci.
+IEEE Transactions on Power Apparatus and Systems = IEEE T. Power. Ap. Syst.
+IEEE Transactions on Power Delivery = IEEE T. Power. Deliver.
+IEEE Transactions on Power Electronics = IEEE T. Power. Electr.
+IEEE Transactions on Power Systems = IEEE T. Power. Syst.
+IEEE Transactions on Product Engineering and Production = IEEE T. Prod. Eng. Prod.
+IEEE Transactions on Professional Communication = IEEE T. Prof. Commun.
+IEEE Transactions on Rehabilitation Engineering = IEEE Trans. Rehabil. Eng.
+IEEE Transactions on Reliability = IEEE T. Reliab.
+IEEE Transactions on Robotics = IEEE T. Robot.
+IEEE Transactions on Robotics and Automation = IEEE T. Robotic. Autom.
+IEEE Transactions on Semiconductor Manufacturing = IEEE T. Semiconduct. M.
+IEEE Transactions on Signal Processing = IEEE T. Signal. Proces.
+IEEE Transactions on Software Engineering = IEEE T. Software. Eng.
+IEEE Transactions on Sonics and Ultrasonics = IEEE T. Son. Ultrason.
+IEEE Transactions on Space Electronics and Telemetry = IEEE T. Space. El. Tel.
+IEEE Transactions on Speech and Audio Processing = IEEE T. Speech. Audi. P.
+IEEE Transactions on Systems Man and Cybernetics = IEEE T. Syst. Man. Cyb.
+IEEE Transactions on Systems Man and Cybernetics Part A-Systems and Humans = IEEE T. Syst. Man. Cy. A.
+IEEE Transactions on Systems Man and Cybernetics Part B-Cybernetics = IEEE T. Syst. Man. Cy. B.
+IEEE Transactions on Systems Man and Cybernetics Part C-Applications and Reviews = IEEE T. Syst. Man. Cy. C.
+IEEE Transactions on Systems Science and Cybernetics = IEEE T. Syst. Sci. Cyb.
+IEEE Transactions on Systems, Man and Cybernetics = IEEE Trans. Syst. Man Cybern.
+IEEE Transactions on Ultrasonics Ferroelectrics and Frequency Control = IEEE T. Ultrason. Ferr.
+IEEE Transactions on Vehicular Communications = IEEE T. Veh. Commun.
+IEEE Transactions on Vehicular Technology = IEEE T. Veh. Technol.
+IEEE Transactions on Very Large Scale Integration Vlsi Systems = IEEE T. Vlsi. Syst.
+IEEE Transactions on Visualization and Computer Graphics = IEEE T. Vis. Comput. Gr.
+IEEE Transactions on Wireless Communications = IEEE T. Wirel. Commun.
+IEEE Vehicular Technology Group-Annual Conference = IEEE Veh. Technol. Gr.
+IEEE Wireless Communications = IEEE Wirel. Commun.
+IEEE-ACM Transactions on Computational Biology and Bioinformatics = IEEE-ACM T. Comput. Bi.
+IEEE-ACM Transactions on Computational Biology and Bioinformatiocs = IEEE-ACM T. Comput. Bi.
+IEEE-ACM Transactions on Networking = IEEE ACM T. Network.
+IEEE-ASMETransactions on Mechatronics = IEEE-ASME T. Mech.
+IEEE/ACM Transactions on Computational Biology and Bioinformatics = IEEE/ACM Trans. Comput. Biol. Bioinform.
+IHRIM = IHRIM
+ILAR Journal=ILAR J.;IJLOAC;Q
+IMA Journal of Mathematics Applied in Medicine and Biology = IMA J. Math. Appl. Med. Biol.
+IMJ, Illinois Medical Journal = IMJ Ill. Med. J.
+IMS, Industrial Medicine and Surgery = IMS Ind. Med. Surg.
+IPPF Medical Bulletin = IPPF Med. Bull.
+IRB; A Review of Human Subjects Research = IRB.
+IRCS Journal of Medical Science = IRCS J. Med. Sci.
+IRM; Information and Records Management = IRM.
+ISA Transactions = ISA Trans.
+ISIJ International=ISIJ Int.;IINTEY;M
+IUBMB Life = IUBMB Life
+Igaku Kenkyu (Acta Medica) = Igaku Kenkyu
+Igaku to Seibutsugaku (Medicine and Biology) = Igaku To Seibutsugaku
+Igiene Moderna = Ig. Mod.
+Illinois Dental Journal = Ill. Dent. J.
+Image = Image (IN)
+Image; The Journal of Nursing Scholarship = Image J. Nurs. Sch.
+Images; Marquette University Dental Reflections = Images. Marquette Univ. Dent. Reflections
+Immunitat und Infektion = Immun. Infekt.
+Immunity = Immunity
+Immunobiology = Immunobiology
+Immunobiology. Supplement = Immunobiol. Suppl.
+Immunochemistry = Immunochemistry
+Immunodeficiency = Immunodeficiency
+Immunodeficiency Reviews = Immunodefic. Rev.
+Immunogenetics = Immunogenetics
+Immunologic Research = Immunol. Res.
+Immunological Communications = Immunol. Commun.
+Immunological Investigations = Immunol. Invest.
+Immunological Reviews = Immunol. Rev.
+Immunology = Immunology
+Immunology Letters = Immunol. Lett.
+Immunology Series = Immunol. Ser.
+Immunology Today = Immunol. Today
+Immunology and Cell Biology = Immunol. Cell Biol.
+Immunology. Supplement = Immunol. Suppl.
+Immunomethods = Immunomethods
+Immunopharmacology = Immunopharmacology
+Immunopharmacology and Immunotoxicology = Immunopharmacol. Immunotoxicol.
+Immunotechnology = Immunotechnology
+Impact of Science on Society = Impact Sci. Soc.
+Implant Dentistry = Implant Dent.
+Implant Society = Implant Soc.
+Implantologist = Implantologist
+Important Advances in Oncology = Important Adv. Oncol.
+Impressions = Impressions (Orange)
+Imprint = Imprint
+In Practice = In Pract.
+In Silico Biology = In Silico Biol.
+In Vitro = In Vitro
+In Vitro Cellular and Developmental Biology = In Vitro Cell. Dev. Biol.
+In Vitro Cellular and Developmental Biology. Animal = In Vitro Cell. Dev. Biol. Anim.
+In Vitro and Molecular Toxicology = In Vitr. Mol. Toxicol.
+In Vitro. Monograph = In Vitro. Monogr.
+In Vivo = In Vivo
+Incisivo = Incisivo
+Indent; Journal of International Dentistry; English Edition = Indent [Engl.]
+Indian Chemical Engineer=Indian Chem. Eng.;ICENFW;Q
+Indian Heart Journal = Indian Heart J.
+Indian Heart Journal. Teaching Series = Indian Heart J. Teach. Ser.
+Indian Journal of Animal Sciences = Indian J. Anim. Sci.
+Indian Journal of Biochemistry = Indian J. Biochem.
+Indian Journal of Biochemistry & Biophysics=Indian J. Biochem. Biophys.;IJBBBQ;BM
+Indian Journal of Biochemistry and Biophysics = Indian J. Biochem. Biophys.
+Indian Journal of Cancer = Indian J. Cancer
+Indian Journal of Chemical Technology=Indian J. Chem. Technol.;ICHTEU;BM
+Indian Journal of Chemistry = Indian J. Chem.
+Indian Journal of Chemistry, Section B: Organic Chemistry Including Medicinal Chemistry=Indian J. Chem., Sect. B: Org. Chem. Incl. Med. Chem.;IJSBDB;M
+Indian Journal of Chest Diseases = Indian J. Chest Dis.
+Indian Journal of Chest Diseases and Allied Sciences = Indian J. Chest Dis. Allied Sci.
+Indian Journal of Dental Research = Indian J. Dent. Res.
+Indian Journal of Dermatology = Indian J. Dermatol.
+Indian Journal of Experimental Biology = Indian J. Exp. Biol.
+Indian Journal of Fibre & Textile Research=Indian J. Fibre Text. Res.;IJFRET;Q
+Indian Journal of Gastroenterology = Indian J. Gastroenterol.
+Indian Journal of Heterocyclic Chemistry=Indian J. Heterocycl. Chem.;IJCHEI;Q
+Indian Journal of Leprosy = Indian J. Lepr.
+Indian Journal of Malariology = Indian J. Malariol.
+Indian Journal of Medical Research = Indian J. Med. Res.
+Indian Journal of Medical Sciences = Indian J. Med. Sci.
+Indian Journal of Ophthalmology = Indian J. Ophthalmol.
+Indian Journal of Pathology and Bacteriology = Indian J. Pathol. Bacteriol.
+Indian Journal of Pathology and Microbiology = Indian J. Pathol. Microbiol.
+Indian Journal of Pediatrics = Indian J. Pediatr.
+Indian Journal of Physics=Indian J. Phys.;IJPNCV;M
+Indian Journal of Physiology and Pharmacology = Indian J. Physiol. Pharmacol.
+Indian Journal of Public Health = Indian J. Public Health
+Indian Journal of Pure and Applied Physics=Indian J. Pure Appl. Phys.;IJOPAU;M
+Indian Medical Journal = Indian Med. J.
+Indian Pediatrics = Indian Pediatr.
+Indian Practitioner = Indian Pract.
+Indian Veterinary Journal = Indian Vet. J.
+Indiana Medicine = Indiana Med.
+Indiana Nurse = Indiana Nurse
+Indicator = Indicator
+Indoor Air = Indoor Air
+Industrial & Engineering Chemistry Research=Ind. Eng. Chem. Res.;IECRED;BW
+Industrial Engineering = Ind. Eng.
+Industrial Health = Ind. Health
+Industrial Medicine and Surgery = Ind. Med. Surg.
+Industrial and Labor Relations Review = Ind. Labor Relat. Rev.
+Industry and Health Care = Ind. Health Care (Cambridge Ma.)
+Infection = Infection
+Infection Control = Infect. Control
+Infection Control Canada = Infect. Control Can.
+Infection Control Digest = Infect. Control Dig.
+Infection Control Rounds = Infect. Control Rounds
+Infection Control and Hospital Epidemiology = Infect. Control Hosp. Epidemiol.
+Infection Control and Urological Care = Infect. Control Urol. Care
+Infection and Immunity = Infect. Immun.
+Infection, Genetics and Evolution = Infect. Genet. Evol.
+Infectious Agents and Disease = Infect. Agents Dis.
+Infectious Disease Clinics of North America = Infect. Dis. Clin. North Am.
+Infectious Diseases in Obstetrics and Gynecology = Infect. Dis. Obstet. Gynecol.
+Infectious Disorders Drug Targets = Infect. Disord. Drug Targets
+Infirmiere = Infirmiere
+Infirmiere Auxiliaire = Infirm. Aux.
+Infirmiere Canadienne = Infirm. Can.
+Infirmiere Francaise = Infirm. Fr.
+Infirmiere Haitienne = Infirm. Haiti.
+Infirmiere du Quebec = Infirm. Que.
+Infirmiers = Infirmiers
+Inflammation = Inflammation
+Inflammation Research = Inflamm. Res.
+Inflammation and Allergy Drug Targets = Inflamm. Allergy Drug Targets
+Inflammatory Bowel Diseases = Inflamm. Bowel Dis.
+Infocare = Infocare
+Inform = Inform
+Information Dentaire = Inf. Dent.
+Information Management = Inf. Manage.
+Information Psychiatrique = Inf. Psychiatr.
+Informationen aus Orthodontie und Kieferorthopadie mit Beitragen aus der Internationalen Literatur = Inf. Orthod. Kieferorthop.
+Informatore Odonto-Stomatologico = Inf. Odontostomatol.
+Inforum = Inforum
+Infrared Physics = Infrared Phys.
+Infusionstherapie = Infusionstherapie
+Infusionstherapie und Klinische Ernahrung = Infusionsther. Klin. Ernahr.
+Infusionstherapie und Klinische Ernahrung. Sonderheft = Infusionsther. Klin. Ernahr. Sonderh.
+Infusionstherapie und Transfusionsmedizin = Infusionsther. Transfusionsmed.
+Inhalation Toxicology = Inhal. Toxicol.
+Inhaled Particles = Inhaled Part.
+Injury = Injury
+Injury Prevention = Inj. Prev.
+Innovations = Innovations
+Inorganic Chemistry=Inorg. Chem.;INOCAJ;BW
+Inorganic Chemistry Communications=Inorg. Chem. Commun.;ICCOFP;M
+Inorganic Materials=Inorg. Mater.;INOMAF;M
+Inorganic Reaction Mechanisms (Philadelphia, PA, United States)=Inorg. React. Mech. (Philadelphia, PA, U. S.);IRMEFE;4/YR
+Inorganica Chimica Acta=Inorg. Chim. Acta;ICHAA3;15/YR
+Inquiry = Inquiry
+Insect Biochemistry and Molecular Biology = Insect Biochem. Mol. Biol.
+Insect Molecular Biology = Insect Mol. Biol.
+Insight = Insight
+Institutions = Institutions
+Institutions/Volume Feeding = Inst. Vol. Feed.
+Instructional Course Lectures = Instr. Course Lect.
+Instrumentation Science & Technology=Instrum. Sci. Technol.;ISCTEF;6/YR
+Integrated Environmental Assessment and Management = Integr. Environ. Assess. Manag.
+Integrated Healthcare Report = Integr. Healthc. Rep.
+Integrative Cancer Therapies = Integr. Cancer Ther.
+Integrative Physiological and Behavioral Science = Integr. Physiol. Behav. Sci.
+Intensive Care Medicine = Intensive Care Med.
+Intensive Care Nursing = Intensive Care Nurs.
+Intensive Care World = Intensive Care World
+Intensive and Critical Care Nursing = Intensive Crit. Care Nurs.
+Intensivmedizinische Praxis = Intensivmed. Prax.
+Inter-University Faculty Work Conference = Interuniv. Fac. Work Conf.
+Intercom = Intercom
+Interferon = Interferon
+Interior Design = Inter. Des.
+Interiors = Interiors
+Intermetallics=Intermetallics;IERME5;M
+Internal Medicine = Intern. Med.
+Internal Medicine Journal = Intern. Med. J.
+Internal and Emergency Medicine = Intern. Emerg. Med.
+International Advances in Surgical Oncology = Int. Adv. Surg. Oncol.
+International Anesthesiology Clinics = Int. Anesthesiol. Clin.
+International Angiology = Int. Angiol.
+International Archives of Allergy and Applied Immunology = Int. Arch. Allergy Appl. Immunol.
+International Archives of Allergy and Immunology = Int. Arch. Allergy Immunol.
+International Archives of Occupational and Environmental Health = Int. Arch. Occup. Environ. Health
+International Braz J Urol = Int. Braz. J. Urol.
+International Clinical Psychopharmacology = Int. Clin. Psychopharmacol.
+International DATA Series, Selected Data on Mixtures, Series A: Thermodynamic Properties of Non-Reacting Binary Systems of Organic Substances=Int. DATA Ser., Sel. Data Mixtures, Ser. A;ISDMAT;Q
+International Dental Journal = Int. Dent. J.
+International Digest of Health Legislation = Int. Dig. Health Legis.
+International Disability Studies = Int. Disabil. Stud.
+International Endodontic Journal = Int. Endod. J.
+International Family Planning Digest = Int. Fam. Plann. Dig.
+International Heart Journal = Int. Heart. J.
+International Immunology = Int. Immunol.
+International Immunopharmacology = Int. Immunopharmacol.
+International Journal for Parasitology = Int. J. Parasitol.
+International Journal for Quality in Health Care = Int. J. Qual. Health Care
+International Journal for Vitamin and Nutrition Research = Int. J. Vitam. Nutr. Res.
+International Journal for Vitamin and Nutrition Research. Supplement = Int. J. Vitam. Nutr. Res. Suppl.
+International Journal of Adhesion and Adhesives=Int. J. Adhes. Adhes.;IJAADK;BM
+International Journal of Adult Orthodontics and Orthognathic Surgery = Int. J. Adult Orthodon. Orthognath. Surg.
+International Journal of Aging and Human Development = Int. J. Aging Hum. Dev.
+International Journal of Air and Water Pollution = Int. J. Air Water Pollut.
+International Journal of Andrology = Int. J. Androl.
+International Journal of Antimicrobial Agents = Int. J. Antimicrob. Agents
+International Journal of Applied Ceramic Technology=Int. J. Appl. Ceram. Technol.;IJACCP;BM
+International Journal of Applied Radiation and Isotopes = Int. J. Appl. Radiat. Isot.
+International Journal of Artificial Organs = Int. J. Artif. Organs
+International Journal of Audiology = Int. J. Audiol.
+International Journal of Bio-Medical Computing = Int. J. Biomed. Comput.
+International Journal of Biochemistry = Int. J. Biochem.
+International Journal of Biochemistry & Cell Biology=Int. J. Biochem. Cell Biol.;IJBBFU;M
+International Journal of Biochemistry and Cell Biology = Int. J. Biochem. Cell Biol.
+International Journal of Biological Macromolecules = Int. J. Biol. Macromol.
+International Journal of Biological Markers = Int. J. Biol. Markers
+International Journal of Biological Research in Pregnancy = Int. J. Biol. Res. Pregnancy
+International Journal of Biometeorology = Int. J. Biometeorol.
+International Journal of Cancer = Int. J. Cancer
+International Journal of Cancer. Supplement = Int. J. Cancer. Suppl.
+International Journal of Cardiac Imaging = Int. J. Card. Imaging
+International Journal of Cardiology = Int. J. Cardiol.
+International Journal of Cardiovascular Imaging = Int. J. Cardiovasc. Imaging
+International Journal of Cardiovascular Interventions = Int. J. Cardiovasc. Intervent.
+International Journal of Cell Cloning = Int. J. Cell Cloning
+International Journal of Chemical Kinetics=Int. J. Chem. Kinet.;IJCKBO;M
+International Journal of Chemistry=Int. J. Chem.;INJCEW;Q
+International Journal of Chronobiology = Int. J. Chronobiol.
+International Journal of Circumpolar Health = Int. J. Circumpolar Health
+International Journal of Clinical Monitoring and Computing = Int. J. Clin. Monit. Comput.
+International Journal of Clinical Oncology = Int. J. Clin. Oncol.
+International Journal of Clinical Pharmacology Research = Int. J. Clin. Pharmacol. Res.
+International Journal of Clinical Pharmacology and Biopharmacy = Int. J. Clin. Pharmacol. Biopharm.
+International Journal of Clinical Pharmacology and Therapeutics = Int. J. Clin. Pharmacol. Ther.
+International Journal of Clinical Pharmacology, Therapy and Toxicology = Int. J. Clin. Pharmacol.
+International Journal of Clinical Practice = Int. J. Clin. Pract.
+International Journal of Clinical Practice. Supplement = Int. J. Clin. Pract. Suppl.
+International Journal of Clinical and Experimental Hypnosis = Int. J. Clin. Exp. Hypn.
+International Journal of Clinical and Laboratory Research = Int. J. Clin. Lab. Res.
+International Journal of Coal Geology=Int. J. Coal Geol.;IJCGDE;M
+International Journal of Colorectal Disease = Int. J. Colorectal Dis.
+International Journal of Dental Hygiene = Int. J. Dent. Hyg.
+International Journal of Dental Symposia = Int. J. Dent. Symp.
+International Journal of Dermatology = Int. J. Dermatol.
+International Journal of Developmental Biology = Int. J. Dev. Biol.
+International Journal of Developmental Neuroscience = Int. J. Dev. Neurosci.
+International Journal of Eating Disorders = Int. J. Eat. Disord.
+International Journal of Emergency Mental Health = Int. J. Emerg. Ment. Health
+International Journal of Environment and Pollution=Int. J. Environ. Pollut.;IJVLEN;12/YR
+International Journal of Environmental Analytical Chemistry = Int. J. Environ. Anal. Chem.
+International Journal of Environmental Research and Public Health = Int. J. Environ. Res. Public. Health
+International Journal of Epidemiology = Int. J. Epidemiol.
+International Journal of Equilibrium Research = Int. J. Equilib. Res.
+International Journal of Experimental Diabetes Research = Int. J. Exp. Diabetes Res.
+International Journal of Experimental Pathology = Int. J. Exp. Pathol.
+International Journal of Fertility = Int. J. Fertil.
+International Journal of Fertility and Menopausal Studies = Int. J. Fertil. Menopausal Stud.
+International Journal of Fertility and Women's Medicine = Int. J. Fertil. Womens Med.
+International Journal of Food Microbiology = Int. J. Food Microbiol.
+International Journal of Food Science and Technology=Int. J. Food Sci. Technol.;IJFTEZ;10/YR
+International Journal of Food Sciences and Nutrition = Int. J. Food Sci. Nutr.
+International Journal of Forensic Dentistry = Int. J. Forensic Dent.
+International Journal of Gastrointestinal Cancer = Int. J. Gastrointest. Cancer
+International Journal of Geriatric Psychiatry = Int. J. Geriatr. Psychiatry
+International Journal of Group Psychotherapy = Int. J. Group Psychother.
+International Journal of Gynaecology and Obstetrics = Int. J. Gynaecol. Obstet.
+International Journal of Gynecological Pathology = Int. J. Gynecol. Pathol.
+International Journal of Health Care Finance and Economics = Int. J. Health Care Finance Econ.
+International Journal of Health Care Quality Assurance = Int. J. Health Care Qual. Assur.
+International Journal of Health Care Quality Assurance Incorporating Leadership in Health Services = Int. J. Health Care Qual. Assur. Inc. Leadersh. Health Serv.
+International Journal of Health Education = Int. J. Health Educ.
+International Journal of Health Planning and Management = Int. J. Health Plann. Manage.
+International Journal of Health Services = Int. J. Health Serv.
+International Journal of Hematology = Int. J. Hematol.
+International Journal of Hydrogen Energy=Int. J. Hydrogen Energy;IJHEDX;15/YR
+International Journal of Hygiene and Environmental Health = Int. J. Hyg. Environ. Health
+International Journal of Hyperthermia = Int. J. Hyperthermia
+International Journal of Immunogenetics = Int. J. Immunogenet.
+International Journal of Immunopharmacology = Int. J. Immunopharmacol.
+International Journal of Impotence Research = Int. J. Impot. Res.
+International Journal of Infectious Diseases = Int. J. Infect. Dis.
+International Journal of Injury Control and Safety Promotion = Int. J. Inj. Contr. Saf. Promot.
+International Journal of Instructional Media = Int. J. Instr. Media
+International Journal of Language and Communication Disorders = Int. J. Lang. Commun. Disord.
+International Journal of Law and Psychiatry = Int. J. Law Psychiatry
+International Journal of Legal Medicine = Int. J. Legal Med.
+International Journal of Leprosy = Int. J. Lepr.
+International Journal of Leprosy and Other Mycobacterial Diseases = Int. J. Lepr. Other Mycobact. Dis.
+International Journal of Lower Extremity Wounds = Int. J. Low. Extrem. Wounds
+International Journal of Mass Spectrometry=Int. J. Mass Spectrom.;IMSPF8;SM
+International Journal of Medical Informatics = Int. J. Med. Inf.
+International Journal of Medical Microbiology = Int. J. Med. Microbiol.
+International Journal of Medical Microbiology, Virology, Parasitology and Infectious Diseases = Int. J. Med. Microbiol. Virol. Parasitol. Infect. Dis.
+International Journal of Microcirculation; Clinical and Experimental = Int. J. Microcirc. Clin. Exp.
+International Journal of Mineral Processing=Int. J. Miner. Process.;IJMPBL;M
+International Journal of Molecular Medicine = Int. J. Mol. Med.
+International Journal of Multiphase Flow=Int. J. Multiphase Flow;IJMFBP;M
+International Journal of Nanoscience=Int. J. Nanosci.;IJNNAJ;BM
+International Journal of Neural Systems = Int. J. Neural Syst.
+International Journal of Neurology = Int. J. Neurol.
+International Journal of Neuropharmacology = Int. J. Neuropharmacol.
+International Journal of Neuropsychiatry = Int. J. Neuropsychiatry
+International Journal of Neuropsychopharmacology = Int. J. Neuropsychopharmacol.
+International Journal of Neuroscience = Int. J. Neurosci.
+International Journal of Non-Equilibrium Processing=Int. J. Non-Equilib. Process.;IJNPFU;IRR
+International Journal of Nuclear Medicine and Biology = Int. J. Nucl. Med. Biol.
+International Journal of Nursing Education Scholarship = Int. J. Nurs. Educ. Scholarsh.
+International Journal of Nursing Practice = Int. J. Nurs. Pract.
+International Journal of Nursing Studies = Int. J. Nurs. Stud.
+International Journal of Obesity = Int. J. Obes.
+International Journal of Obesity and Related Metabolic Disorders = Int. J. Obes. Relat. Metab. Disord.
+International Journal of Occupational Health and Safety = Int. J. Occup. Health Saf.
+International Journal of Occupational Medicine and Environmental Health = Int. J. Occup. Med. Environ. Health
+International Journal of Occupational and Environmental Health = Int. J. Occup. Environ. Health
+International Journal of Oncology = Int. J. Oncol.
+International Journal of Oral Implantology = Int. J. Oral Implantol.
+International Journal of Oral Myology = Int. J. Oral Myol.
+International Journal of Oral Surgery = Int. J. Oral Surg.
+International Journal of Oral and Maxillofacial Implants = Int. J. Oral Maxillofac. Implants
+International Journal of Oral and Maxillofacial Surgery = Int. J. Oral Maxillofac. Surg.
+International Journal of Orofacial Myology = Int. J. Orofacial Myology
+International Journal of Orthodontics = Int. J. Orthod.
+International Journal of PIXE=Int. J. PIXE;IJPXET;2/YR
+International Journal of Paediatric Dentistry = Int. J. Paediatr. Dent.
+International Journal of Pancreatology = Int. J. Pancreatol.
+International Journal of Partial Hospitalization = Int. J. Partial Hosp.
+International Journal of Pediatric Nephrology = Int. J. Pediatr. Nephrol.
+International Journal of Pediatric Otorhinolaryngology = Int. J. Pediatr. Otorhinolaryngol.
+International Journal of Peptide Research and Therapeutics=Int. J. Pept. Res. Ther.;IJPRFC;Q
+International Journal of Peptide and Protein Research = Int. J. Pept. Protein Res.
+International Journal of Periodontics and Restorative Dentistry = Int. J. Periodontics Restorative Dent.
+International Journal of Pharmaceutics = Int. J. Pharm.
+International Journal of Polymer Analysis and Characterization=Int. J. Polym. Anal. Charact.;IPACEZ;BM
+International Journal of Polymeric Materials=Int. J. Polym. Mater.;IJPMCS;M
+International Journal of Powder Metallurgy (Princeton, New Jersey)=Int. J. Powder Metall. (Princeton, N. J.);IPMTEA;BM
+International Journal of Prosthodontics = Int. J. Prosthodont.
+International Journal of Protein Research = Int. J. Protein Res.
+International Journal of Psychiatry = Int. J. Psychiatry
+International Journal of Psychiatry in Medicine = Int. J. Psychiatry Med.
+International Journal of Psycho-Analysis = Int. J. Psychoanal.
+International Journal of Psychoanalytic Psychotherapy = Int. J. Psychoanal. Psychother.
+International Journal of Psychophysiology = Int. J. Psychophysiol.
+International Journal of Psychosomatics = Int. J. Psychosom.
+International Journal of Quantum Chemistry=Int. J. Quantum Chem.;IJQCB2;30/YR
+International Journal of Radiation Applications and Instrumentation. Part A, Applied Radiation and Isotopes = Int. J. Rad. Appl. Instrum. [A]
+International Journal of Radiation Applications and Instrumentation. Part B, Nuclear Medicine and Biology = Int. J. Rad. Appl. Instrum. B
+International Journal of Radiation Biology = Int. J. Radiat. Biol.
+International Journal of Radiation Biology and Related Studies in Physics, Chemistry and Medicine = Int. J. Radiat. Biol. Relat. Stud. Phys. Chem. Med.
+International Journal of Radiation Oncology, Biology, Physics = Int. J. Radiat. Oncol. Biol. Phys.
+International Journal of Refractory Metals & Hard Materials=Int. J. Refract. Met. Hard Mater.;IRMME3;BM
+International Journal of Rehabilitation Research = Int. J. Rehabil. Res.
+International Journal of Remote Sensing = Int. J. Remote Sens.
+International Journal of STD and AIDS = Int. J. STD AIDS
+International Journal of Social Psychiatry = Int. J. Soc. Psychiatry
+International Journal of Sport Nutrition = Int. J. Sport Nutr.
+International Journal of Sport Nutrition and Exercise Metabolism = Int. J. Sport Nutr. Exerc. Metab.
+International Journal of Sports Medicine = Int. J. Sports Med.
+International Journal of Surgical Investigation = Int. J. Surg. Investig.
+International Journal of Systematic Bacteriology = Int. J. Syst. Bacteriol.
+International Journal of Systematic and Evolutionary Microbiology = Int. J. Syst. Evol. Microbiol.
+International Journal of Technology Assessment in Health Care = Int. J. Technol. Assess. Health Care
+International Journal of Thermophysics=Int. J. Thermophys.;IJTHDY;BM
+International Journal of Tissue Reactions = Int. J. Tissue React.
+International Journal of Toxicology = Int. J. Toxicol.
+International Journal of Trauma Nursing = Int. J. Trauma Nurs.
+International Journal of Tuberculosis and Lung Disease = Int. J. Tuberc. Lung Dis.
+International Journal of Urology = Int. J. Urol.
+International Journal of Zoonoses = Int. J. Zoonoses
+International Journal of the Addictions = Int. J. Addict.
+International Maritime Health = Int. Marit. Health
+International Materials Reviews=Int. Mater. Rev.;INMREO;BM
+International Microbiology = Int. Microbiol.
+International Nursing Review = Int. Nurs. Rev.
+International Ophthalmology = Int. Ophthalmol.
+International Ophthalmology Clinics = Int. Ophthalmol. Clin.
+International Orthopaedics = Int. Orthop.
+International Pharmacopsychiatry = Int. Pharmacopsychiatry
+International Polymer Processing=Int. Polym. Process.;IPPREJ;Q
+International Psychiatry Clinics = Int. Psychiatry Clin.
+International Psychogeriatrics = Int. Psychogeriatr.
+International Rehabilitation Medicine = Int. Rehabil. Med.
+International Rescuer = Int. Rescuer
+International Review of Connective Tissue Research = Int. Rev. Connect. Tissue Res.
+International Review of Cytology = Int. Rev. Cytol.
+International Review of Cytology. Supplement = Int. Rev. Cytol. Suppl.
+International Review of Experimental Pathology = Int. Rev. Exp. Pathol.
+International Review of Neurobiology = Int. Rev. Neurobiol.
+International Review of Physiology = Int. Rev. Physiol.
+International Review of Tropical Medicine = Int. Rev. Trop. Med.
+International Reviews in Physical Chemistry=Int. Rev. Phys. Chem.;IRPCDL;Q
+International Reviews of Immunology = Int. Rev. Immunol.
+International Surgery = Int. Surg.
+International Symposium on Fluoridation and Preventive Dentistry = Int. Symp. Fluorid. Prev. Dent.
+International Urogynecology Journal and Pelvic Floor Dysfunction = Int. Urogynecol. J. Pelvic Floor Dysfunct.
+International Urology and Nephrology = Int. Urol. Nephrol.
+International Wound Journal = Int. Wound J.
+Internationale Zeitschrift fur Angewandte Physiologie Einschliesslich Arbeitsphysiologie = Int. Z. Angew. Physiol.
+Internationale Zeitschrift fur Klinische Pharmakologie, Therapie und Toxikologie = Int. Z. Klin. Pharmakol. Ther. Toxikol.
+Internationale Zeitschrift fur Vitamin- und Ernahrungsforschung. Beiheft = Int. Z. Vitam. Ernahrungsforsch. Beih.
+Internationale Zeitschrift fur Vitaminforschung (International Journal of Vitamin Research) = Int. Z. Vitaminforsch.
+Internationales Archiv fur Arbeitsmedizin = Int. Arch. Arbeitsmed.
+Internist = Internist
+Internistische Praxis = Internist. Prax.
+Intervirology = Intervirology
+Invasion and Metastasis = Invasion Metastasis
+Invertebrate Neuroscience = Invert. Neurosci.
+Investigacion Clinica = Invest. Clin.
+Investigation and Practice in Pediatric Pathology = Investig. Pract. Pediatr. Pathol.
+Investigational New Drugs = Invest. New Drugs
+Investigative Ophthalmology = Invest. Ophthalmol.
+Investigative Ophthalmology and Visual Science = Invest. Ophthalmol. Vis. Sci.
+Investigative Radiology = Invest. Radiol.
+Investigative Urology = Invest. Urol.
+Investigative and Cell Pathology = Invest. Cell Pathol.
+Investor-Owned Hospital Review = Investor. Owned Hosp. Rev.
+Ion Channels = Ion Channels
+Ion Exchange and Membranes = Ion Exch. Membr.
+Ionics=Ionics;IONIFA;BM
+Iowa Dental Bulletin = Iowa Dent. Bull.
+Iowa Dental Journal = Iowa Dent. J.
+Iowa Medicine = Iowa Med.
+Iowa Orthopaedic Journal = Iowa Orthop. J.
+Iowa State University Veterinarian = Iowa State Univ. Vet.
+Iraqi Dental Journal = Iraqi Dent. J.
+Irish Journal of Medical Science = Ir. J. Med. Sci.
+Irish Medical Journal = Ir. Med. J.
+Irish Nurses Journal = Ir. Nurses J.
+Irish Nursing News = Ir. Nurs. News
+Irish Nursing and Hospital World = Ir. Nurs. Hosp. World
+Ironmaking and Steelmaking=Ironmaking Steelmaking;IMKSB7;BM
+Iryo = Iryo
+Isis = Isis
+Isotopes in Environmental and Health Studies = Isotopes Environ. Health Stud.
+Isozymes; Current Topics in Biological Medical Research = Isozymes Curr. Top. Biol. Med. Res.
+Israel Annals of Psychiatry and Related Disciplines = Isr. Ann. Psychiatr. Relat. Discip.
+Israel Journal of Chemistry=Isr. J. Chem.;ISJCAT;Q
+Israel Journal of Dental Medicine = Isr. J. Dent. Med.
+Israel Journal of Dental Sciences = Isr. J. Dent. Sci.
+Israel Journal of Medical Sciences = Isr. J. Med. Sci.
+Israel Journal of Psychiatry and Related Sciences = Isr. J. Psychiatry Relat. Sci.
+Israel Journal of Zoology = Isr. J. Zool.
+Israel Medical Association Journal = Isr. Med. Assoc. J.
+Issledovaniia po Genetike = Issled. Genet.
+Issue Brief, National Health Policy Forum = Issue Brief Natl. Health Policy Forum
+Issues = Issues
+Issues in Comprehensive Pediatric Nursing = Issues Compr. Pediatr. Nurs.
+Issues in Health Care = Issues Health Care
+Issues in Health Care of Women = Issues Health Care Women
+Issues in Law and Medicine = Issues Law Med.
+Issues in Mental Health Nursing = Issues Ment. Health Nurs.
+Issues in Science and Technology = Issues Sci. Technol.
+Istanbul Universitesi Dishekimligi Fakultesi Dergisi = Istanbul Univ. Dishekim. Fak. Derg.
+Italian General Review of Dermatology = Ital. Gen. Rev. Dermatol.
+Italian Heart Journal = Ital. Heart J.
+Italian Journal of Anatomy and Embryology = Ital. J. Anat. Embryol.
+Italian Journal of Biochemistry = Ital. J. Biochem.
+Italian Journal of Gastroenterology = Ital. J. Gastroenterol.
+Italian Journal of Gastroenterology and Hepatology = Ital. J. Gastroenterol. Hepatol.
+Italian Journal of Neurological Sciences = Ital. J. Neurol. Sci.
+Italian Journal of Orthopaedics and Traumatology = Ital. J. Orthop. Traumatol.
+Italian Journal of Orthopaedics and Traumatology. Supplementum = Ital. J. Orthop. Traumatol. Suppl.
+Italian Journal of Surgical Sciences = Ital. J. Surg. Sci.
+Iugoslavica Physiologica et Pharmacologica Acta = Iugosl. Physiol. Pharmacol. Acta
+Iyo Denshi to Seitai Kogaku = Iyodenshi To Seitai Kogaku
+Izvestiia Akademii Nauk SSSR. Seriia Biologicheskaia = Izv. Akad. Nauk SSSR. Biol.
+Izvestiia Akademii Nauk. Seriia Biologicheskaia = Izv. Akad. Nauk. Ser. Biol.
+Izvestiia na Instituta po Fiziologiia = Izv. Inst. Fiziol. (Sofiia)
+Izvestiia na Mikrobiologicheskiia Institut = Izv. Mikrobiol. Inst. (Sofiia)
+Izvestiya Natsional'noi Akademii Nauk Respubliki Kazakhstan, Seriya Khimicheskaya=Izv. Nats. Akad. Nauk Resp. Kaz., Ser. Khim.;INANDJ;BM
+Izvestiya Rossiiskoi Akademii Nauk, Seriya Fizicheskaya=Izv. Ross. Akad. Nauk, Ser. Fiz.;IRAFEO;M
+Izvestiya Vysshikh Uchebnykh Zavedenii, Khimiya i Khimicheskaya Tekhnologiya=Izv. Vyssh. Uchebn. Zaved., Khim. Khim. Tekhnol.;IVUKAR;9/YR
+Izvestiya Vysshikh Uchebnykh Zavedenii, Tsvetnaya Metallurgiya=Izv. Vyssh. Uchebn. Zaved., Tsvetn. Metall.;IVUTAK;6/YR
+Izvestiya, Academy of Sciences, USSR, Atmospheric = Izv. Acad. Sci. USSR, Atmos. Oceanic Phys.
+JAAMI; Journal of the Association for the Advancement of Medical Instrumentation = J. Assoc. Adv. Med. Instrum.
+JACEP = JACEP
+JAMA = JAMA
+JAMA, the Journal of the American Medical Association=JAMA, J. Am. Med. Assoc.;JAMAAP;48/YR
+JAPCA = JAPCA
+JBIC, Journal of Biological Inorganic Chemistry=JBIC, J. Biol. Inorg. Chem.;JJBCFA;8/YR
+JBR-BTR = JBR-BTR
+JCAH Perspectives = JCAH Perspect.
+JCT Research=JCT Res.;JRCEB5;Q
+JETP Letters=JETP Lett.;JTPLA2;SM
+JFMA; Journal of the Florida Medical Association = JFMA.
+JFORL; Journal Francais d'Oto-Rhino Laryngologie, Audiophonologie et Chirurgie Maxillo-Faciale = JFORL J. Fr. Otorhinolaryngol. Audiophonol. Chir. Maxillofac.
+JOGN Nursing = JOGN Nurs.
+JOP = JOP
+JPEN: Journal of Parenteral and Enteral Nutrition = JPEN J. Parenter. Enteral Nutr.
+JPMA: Journal of the Pakistan Medical Association = JPMA J. Pak. Med. Assoc.
+JPO: Journal of Practical Orthodontics = JPO J. Pract. Orthod.
+JSLS: Journal of the Society of Laparoendoscopic Surgeons = JSLS
+Jaarboek van Kankeronderzoek en Kankerbestrijding in Nederland = Jaarb. Kankeronderz. Kankerbestrijd. Ned.
+Jahresbericht, Schweizerische Akademie der Medizinischen Wissenschaften = Jahresber. Schweiz. Akad. Med. Wiss.
+Jamaican Nurse = Jamaican Nurse
+Japan-Hospitals = Jpn. Hosp.
+Japanese Circulation Journal = Jpn. Circ. J.
+Japanese Dental Journal = Jpn. Dent. J.
+Japanese Heart Journal = Jpn. Heart J.
+Japanese Journal of Antibiotics = Jpn. J. Antibiot.
+Japanese Journal of Applied Physics, Part 1: Regular Papers, Brief Communications & Review Papers=Jpn. J. Appl. Phys., Part 1;JAPNDE;M
+Japanese Journal of Applied Physics, Part 2: Letters & Express Letters=Jpn. J. Appl. Phys., Part 2;JAPLD8;SM
+Japanese Journal of Cancer Research = Jpn. J. Cancer Res.
+Japanese Journal of Clinical Oncology = Jpn. J. Clin. Oncol.
+Japanese Journal of Dermatology: Series B = Jpn. J. Dermatol. B
+Japanese Journal of Experimental Medicine = Jpn. J. Exp. Med.
+Japanese Journal of Genetics = Jpn. J. Genet.
+Japanese Journal of Human Genetics = Jpn. J. Hum. Genet.
+Japanese Journal of Infectious Diseases = Jpn. J. Infect. Dis.
+Japanese Journal of Medical Science and Biology = Jpn. J. Med. Sci. Biol.
+Japanese Journal of Medicine = Jpn. J. Med.
+Japanese Journal of Microbiology = Jpn. J. Microbiol.
+Japanese Journal of Ophthalmology = Jpn. J. Ophthalmol.
+Japanese Journal of Pharmacology = Jpn. J. Pharmacol.
+Japanese Journal of Physiology = Jpn. J. Physiol.
+Japanese Journal of Psychiatry and Neurology = Jpn. J. Psychiatry Neurol.
+Japanese Journal of Surgery = Jpn. J. Surg.
+Japanese Journal of Thoracic and Cardiovascular Surgery = Jpn. J. Thorac. Cardiovasc. Surg.
+Japanese Journal of Tuberculosis = Jpn. J. Tuberc.
+Japanese Journal of Tuberculosis and Chest Diseases = Jpn. J. Tuberc. Chest Dis.
+Japanese Journal of Veterinary Research = Jpn. J. Vet. Res.
+Ji Sheng Chong Xue Yu Ji Sheng Chong Bing Za Zhi (Journal of Parasitology and Parasitic Diseases) = Ji Sheng Chong Xue Yu Ji Sheng Chong Bing Za Zhi
+Jibiinkoka = Jibiinkoka
+Jiegou Huaxue=Jiegou Huaxue;JHUADF;M
+Jikeikai Medical Journal = Jikeikai Med. J.
+Jikken Dobutsu (Experimental Animals) = Jikken Dobutsu
+Jinrui Idengaku Zasshi = Jinrui Idengaku Zasshi
+Jinshu Xuebao=Jinshu Xuebao;CHSPA4;M
+Jisuanji Yu Yingyong Huaxue=Jisuanji Yu Yingyong Huaxue;JYYHE6;M
+Johns Hopkins Medical Journal = Johns Hopkins Med. J.
+Johns Hopkins Medical Journal. Supplement = Johns Hopkins Med. J. Suppl.
+Johns Hopkins Medical Letter, Health After 50 = Johns Hopkins Med. Lett. Health After 50
+Johns Hopkins Nurses Alumni Magazine = Johns Hopkins Nurses Alumni Mag.
+Joint Commission Journal on Quality Improvement = Jt. Comm. J. Qual. Improv.
+Joint Commission Journal on Quality and Patient Safety = Jt. Comm. J. Qual. Patient Saf.
+Joint Commission Perspectives = Jt. Comm. Perspect.
+Joint, Bone, Spine = Joint Bone Spine
+Jordan Dental Journal = Jordan Dent. J.
+Jordemodern = Jordemodern
+Jordmorbladet = Jordmorbladet
+Jornal Brasileiro de Doencas Toracicas = J. Bras. Doencas Torac.
+Jornal Brasileiro de Psiquiatria = J. Bras. Psiquiatr.
+Jornal da Sociedade das Ciencias Medicas de Lisboa = J. Soc. Cienc. Med. Lisb.
+Jornal de Pediatria = J. Pediatr. (Rio J.)
+Jornal do Medico = J. Med. (Oporto)
+Josai Shika Daigaku Kiyo (Bulletin of the Josai Dental University) = Josai Shika Daigaku Kiyo
+Josanpu Zasshi (Japanese Journal for Midwives) = Josanpu Zasshi
+Journal - American Water Works Association=J. - Am. Water Works Assoc.;JAWWA5;M
+Journal Belge de Medecine Physique = J. Belge Med. Phys.
+Journal Belge de Medecine Physique et de Rehabilitation = J. Belge Med. Phys. Rehabil.
+Journal Belge de Radiologie = J. Belge Radiol.
+Journal Belge de Rhumatologie et de Medecine Physique = J. Belge Rhumatol. Med. Phys.
+Journal CANNT = J. CANNT
+Journal Dentaire du Quebec = J. Dent. Que.
+Journal Francais d'Ophtalmologie = J. Fr. Ophtalmol.
+Journal Francais d'Oto-Rhino-Laryngologie et Chirurgie Maxillo-Faciale = J. Fr. Otorhinolaryngol. Chir. Maxillofac.
+Journal Francais d'Oto-Rhino-Laryngologie, Audio-Phonologie et Chirurgie Maxillo-Faciale = J. Fr. Otorhinolaryngol. Audiophonol. Chir. Maxillofac.
+Journal Francais d'Oto-Rhino-Laryngologie, Audiophonologie, Chirurgie Maxillo-Faciale = J. Fr. Otorhinolaryngol. Audiophonol. Chir. Maxillofac.
+Journal Francais de Medecine et Chirurgie Thoraciques = J. Fr. Med. Chir. Thorac.
+Journal Medical Libanais (Lebanese Medical Journal) = J. Med. Liban.
+Journal d'Odontologie Conservatrice = J. Odontol. Conserv.
+Journal d'Urologie = J. Urol. (Paris)
+Journal d'Urologie et de Nephrologie = J. Urol. Nephrol. (Paris)
+Journal das Auxiliares Odontologicas = J. Aux. Odontol.
+Journal de Biologie Buccale = J. Biol. Buccale
+Journal de Biomateriaux Dentaires = J. Biomater. Dent.
+Journal de Chirurgie = J. Chir. (Paris)
+Journal de Genetique Humaine = J. Genet. Hum.
+Journal de Gynecologie, Obstetrique et Biologie de la Reproduction = J. Gynecol. Obstet. Biol. Reprod. (Paris)
+Journal de Medecine de Bordeaux et du Sud-Ouest = J. Med. Bord.
+Journal de Medecine de Lyon = J. Med. Lyon
+Journal de Microscopie = J. Microsc. (Paris)
+Journal de Microscopie et de Biologie Cellulaire = J. Microsc. Biol. Cell.
+Journal de Parodontologie = J. Parodontol.
+Journal de Pharmacie de Belgique = J. Pharm. Belg.
+Journal de Pharmacologie = J. Pharmacol.
+Journal de Physiologie = J. Physiol. (Paris)
+Journal de Physiologie. Supplement = J. Physiol. Suppl. (Paris)
+Journal de Psychologie Normale et Pathologique = J. Psychol. Norm. Pathol. (Paris)
+Journal de Radiologie = J. Radiol.
+Journal de Radiologie, d'Electrologie, et de Medecine Nucleaire = J. Radiol. Electrol. Med. Nucl.
+Journal de Recherches Atmospheriques = J. Rech. Atmos.
+Journal de Stomatologie de Belgique = J. Stomatol. Belg.
+Journal de Toxicologie Clinique et Experimentale = J. Toxicol. Clin. Exp.
+Journal de la Societe de Biologie = J. Soc. Biol.
+Journal der Deutschen Dermatologischen Gesellschaft (Journal of the German Society of Dermatology) = J. Dtsch. Dermatol. Ges.
+Journal des Maladies Vasculaires = J. Mal. Vasc.
+Journal des Sciences Medicales de Lille = J. Sci. Med. Lille
+Journal for Healthcare Quality = J. Healthc. Qual.
+Journal for Hospital Admitting Management = J. Hosp. Admit. Manage.
+Journal for Medicaid Management = J. Medicaid Manage.
+Journal for Nurses in Staff Development = J. Nurses Staff Dev.
+Journal for Specialists in Pediatric Nursing = J. Spec. Pediatr. Nurs.
+Journal fur Hirnforschung = J. Hirnforsch.
+Journal of AAPOS = J. AAPOS
+Journal of AHIMA = J. AHIMA
+Journal of AOAC International = J. AOAC Int.
+Journal of APDSA; Asian Pacific Dental Student Association = J. APDSA (Tokyo)
+Journal of Abnormal Child Psychology = J. Abnorm. Child Psychol.
+Journal of Abnormal Psychology = J. Abnorm. Psychol.
+Journal of Accident and Emergency Medicine = J. Accid. Emerg. Med.
+Journal of Acquired Immune Deficiency Syndromes = J. Acquir. Immune Defic. Syndr.
+Journal of Acquired Immune Deficiency Syndromes and Human Retrovirology = J. Acquir. Immune Defic. Syndr. Hum. Retrovirol.
+Journal of Addictive Diseases = J. Addict. Dis.
+Journal of Adhesion=J. Adhes.;JADNAJ;M
+Journal of Adhesion Science and Technology=J. Adhes. Sci. Technol.;JATEE8;16/YR
+Journal of Adhesive Dentistry = J. Adhes. Dent.
+Journal of Adolescence = J. Adolesc.
+Journal of Adolescent Health = J. Adolesc. Health
+Journal of Adolescent Health Care = J. Adolesc. Health Care
+Journal of Advanced Medical-Surgical Nursing = J. Adv. Med. Surg. Nurs.
+Journal of Advanced Nursing = J. Adv. Nurs.
+Journal of Advances in Chemical Physics=J. Adv. Chem. Phys.;JACPCM;M
+Journal of Aerosol Medicine = J. Aerosol Med.
+Journal of Aerosol Science = J. Aerosol Sci.
+Journal of Affective Disorders = J. Affect. Disord.
+Journal of Aging and Health = J. Aging Health
+Journal of Aging and Social Policy = J. Aging Soc. Policy
+Journal of Agricultural and Food Chemistry = J. Agric. Food Chem.
+Journal of Air Medical Transport = J. Air Med. Transp.
+Journal of Allergy = J. Allergy
+Journal of Allergy and Clinical Immunology = J. Allergy Clin. Immunol.
+Journal of Allied Health = J. Allied Health
+Journal of Alloys and Compounds=J. Alloys Compd.;JALCEU;36/YR
+Journal of Alternative and Complementary Medicine = J. Altern. Complement. Med.
+Journal of Alzheimer's Disease = J. Alzheimers Dis.
+Journal of Ambulatory Care Management = J. Ambulatory Care Manage.
+Journal of Ambulatory Care Marketing = J. Ambul. Care Mark.
+Journal of American College Health = J. Am. Coll. Health
+Journal of American Health Care = J. Am. Health Care
+Journal of American Health Policy = J. Am. Health Policy
+Journal of American Insurance = J. Am. Insur.
+Journal of Analytical Atomic Spectrometry=J. Anal. At. Spectrom.;JASPE2;M
+Journal of Analytical Chemistry=J. Anal. Chem.;JACTE2;M
+Journal of Analytical Psychology = J. Anal. Psychol.
+Journal of Analytical Toxicology = J. Anal. Toxicol.
+Journal of Analytical and Applied Pyrolysis=J. Anal. Appl. Pyrolysis;JAAPDD;BM
+Journal of Anatomy = J. Anat.
+Journal of Andrology = J. Androl.
+Journal of Animal Ecology = J. Anim. Ecol.
+Journal of Animal Physiology and Animal Nutrition = J. Anim. Physiol. Anim. Nutr.
+Journal of Animal Science = J. Anim. Sci.
+Journal of Animal Science (Savoy, IL, United States)=J. Anim. Sci. (Savoy, IL, U. S.);JANSAG;M
+Journal of Antibiotics = J. Antibiot. (Tokyo)
+Journal of Antibiotics. Ser. B. = J. Antibiot. [B]
+Journal of Antimicrobial Chemotherapy = J. Antimicrob. Chemother.
+Journal of Anxiety Disorders = J. Anxiety Disord.
+Journal of Applied Animal Welfare Science=J. Appl. Anim. Welfare Sci.;JAAWAV;Q
+Journal of Applied Bacteriology = J. Appl. Bacteriol.
+Journal of Applied Behavior Analysis = J. Appl. Behav. Anal.
+Journal of Applied Behavioral Science = J. Appl. Behav. Sci.
+Journal of Applied Biochemistry = J. Appl. Biochem.
+Journal of Applied Biomaterials = J. Appl. Biomater.
+Journal of Applied Clinical Medical Physics = J. Appl. Clin. Med. Phys.
+Journal of Applied Crystallography=J. Appl. Crystallogr.;JACGAR;BM
+Journal of Applied Electrochemistry=J. Appl. Electrochem.;JAELBJ;M
+Journal of Applied Gerontology = J. Appl. Gerontol.
+Journal of Applied Measurement = J. Appl. Meas.
+Journal of Applied Meteorology = J. Appl. Meteor.
+Journal of Applied Microbiology = J. Appl. Microbiol.
+Journal of Applied Nutrition = J. Appl. Nutr.
+Journal of Applied Physics = J. Appl. Phys.
+Journal of Applied Physiology = J. Appl. Physiol.
+Journal of Applied Physiology: Respiratory, Environmental and Exercise Physiology = J. Appl. Physiol.
+Journal of Applied Polymer Science=J. Appl. Polym. Sci.;JAPNAB;SM
+Journal of Applied Psychology = J. Appl. Psychol.
+Journal of Applied Spectroscopy=J. Appl. Spectrosc.;JASYAP;BM
+Journal of Applied Toxicology = J. Appl. Toxicol.
+Journal of Arthroplasty = J. Arthroplasty
+Journal of Asian Natural Products Research = J. Asian Nat. Prod. Res.
+Journal of Assisted Reproduction and Genetics = J. Assist. Reprod. Genet.
+Journal of Asthma = J. Asthma
+Journal of Asthma Research = J. Asthma Res.
+Journal of Atherosclerosis Research = J. Atheroscler. Res.
+Journal of Atmospheric Chemistry=J. Atmos. Chem.;JATCE2;9/YR
+Journal of Atmospheric and Oceanic Technology = J. Atmos. Oceanic Technol.
+Journal of Atmospheric and Terrestrial Physics = J. Atmos. Terr. Phys.
+Journal of Attention Disorders = J. Atten. Disord.
+Journal of Audiovisual Media in Medicine = J. Audiov. Media Med.
+Journal of Auditory Research = J. Aud. Res.
+Journal of Autism and Childhood Schizophrenia = J. Autism Child. Schizophr.
+Journal of Autism and Developmental Disorders = J. Autism Dev. Disord.
+Journal of Autoimmunity = J. Autoimmun.
+Journal of Automated Methods & Management in Chemistry=J. Autom. Methods Manage. Chem.;JAMCF2;BM
+Journal of Autonomic Pharmacology = J. Auton. Pharmacol.
+Journal of Bacteriology = J. Bacteriol.
+Journal of Basic Microbiology = J. Basic Microbiol.
+Journal of Basic and Clinical Physiology and Pharmacology = J. Basic Clin. Physiol. Pharmacol.
+Journal of Behavior Therapy and Experimental Psychiatry = J. Behav. Ther. Exp. Psychiatry
+Journal of Behavioral Health Services and Research = J. Behav. Health Serv. Res.
+Journal of Behavioral Medicine = J. Behav. Med.
+Journal of Biochemical Toxicology = J. Biochem. Toxicol.
+Journal of Biochemical and Biophysical Methods = J. Biochem. Biophys. Methods
+Journal of Biochemical and Molecular Toxicology = J. Biochem. Mol. Toxicol.
+Journal of Biochemistry = J. Biochem. (Tokyo)
+Journal of Biochemistry (Tokyo, Japan)=J. Biochem. (Tokyo, Jpn.);JOBIAO;M
+Journal of Biochemistry and Molecular Biology=J. Biochem. Mol. Biol.;JBMBE5;BM
+Journal of Biochemistry, Molecular Biology, and Biophysics = J. Biochem. Mol. Biol. Biophys.
+Journal of Biocommunication = J. Biocommun.
+Journal of Bioenergetics = J. Bioenerg.
+Journal of Bioenergetics and Biomembranes = J. Bioenerg. Biomembr.
+Journal of Bioengineering = J. Bioeng.
+Journal of Bioethics = J. Bioeth.
+Journal of Bioinformatics and Computational Biology = J. Bioinform. Comput. Biol.
+Journal of Biological Chemistry = J. Biol. Chem.
+Journal of Biological Inorganic Chemistry = J. Biol. Inorg. Chem.
+Journal of Biological Photography = J. Biol. Photogr.
+Journal of Biological Regulators and Homeostatic Agents = J. Biol. Regul. Homeost. Agents
+Journal of Biological Response Modifiers = J. Biol. Response Mod.
+Journal of Biological Rhythms = J. Biol. Rhythms
+Journal of Biological Standardization = J. Biol. Stand.
+Journal of Biology = J. Biol.
+Journal of Bioluminescence and Chemiluminescence = J. Biolumin. Chemilumin.
+Journal of Biomaterials Applications = J. Biomater. Appl.
+Journal of Biomaterials Science, Polymer Edition = J. Biomater. Sci. Polym. Ed.
+Journal of Biomechanical Engineering = J. Biomech. Eng.
+Journal of Biomechanics = J. Biomech.
+Journal of Biomedical Engineering = J. Biomed. Eng.
+Journal of Biomedical Informatics = J. Biomed. Inform.
+Journal of Biomedical Materials Research = J. Biomed. Mater. Res.
+Journal of Biomedical Materials Research, Part A=J. Biomed. Mater. Res., Part A;JBMRCH;16/YR
+Journal of Biomedical Materials Research, Part B: Applied Biomaterials=J. Biomed. Mater. Res., Part B;JBMRGL;8/YR
+Journal of Biomedical Materials Research. Part A = J. Biomed. Mater. Res. A
+Journal of Biomedical Materials Research. Part B, Applied Biomaterials = J. Biomed. Mater. Res. B Appl. Biomater.
+Journal of Biomedical Nanotechnology=J. Biomed. Nanotechnol.;JBNOAB;Q
+Journal of Biomedical Optics = J. Biomed. Opt.
+Journal of Biomedical Science = J. Biomed. Sci.
+Journal of Biomolecular NMR = J. Biomol. NMR
+Journal of Biomolecular Screening = J. Biomol. Screen.
+Journal of Biomolecular Structure & Dynamics=J. Biomol. Struct. Dyn.;JBSDD6;BM
+Journal of Biomolecular Structure and Dynamics = J. Biomol. Struct. Dyn.
+Journal of Biopharmaceutical Statistics = J. Biopharm. Stat.
+Journal of Bioscience and Bioengineering=J. Biosci. Bioeng.;JBBIF6;M
+Journal of Biosocial Science = J. Biosoc. Sci.
+Journal of Biosocial Science. Supplement = J. Biosoc. Sci. Suppl.
+Journal of Biotechnology = J. Biotechnol.
+Journal of Bone and Joint Surgery. American Volume = J. Bone Joint Surg. Am.
+Journal of Bone and Joint Surgery. British Volume = J. Bone Joint Surg. Br.
+Journal of Bone and Mineral Metabolism = J. Bone Miner. Metab.
+Journal of Bone and Mineral Research = J. Bone Miner. Res.
+Journal of Burn Care and Rehabilitation = J. Burn Care Rehabil.
+Journal of Burn Care and Research = J. Burn Care Res.
+Journal of Business Strategy = J. Bus. Strategy
+Journal of Cancer Education = J. Cancer Educ.
+Journal of Cancer Epidemiology and Prevention = J. Cancer Epidemiol. Prev.
+Journal of Cancer Research and Clinical Oncology = J. Cancer Res. Clin. Oncol.
+Journal of Capillary Electrophoresis = J. Capillary Electrophor.
+Journal of Capillary Electrophoresis and Microchip Technology=J. Capillary Electrophor. Microchip Technol.;JCEMF6;6/YR
+Journal of Carbohydrate Chemistry=J. Carbohydr. Chem.;JCACDM;9/YR
+Journal of Cardiac Failure = J. Card. Fail.
+Journal of Cardiac Surgery = J. Card. Surg.
+Journal of Cardiography = J. Cardiogr.
+Journal of Cardiography. Supplement = J. Cardiogr. Suppl.
+Journal of Cardiology = J. Cardiol.
+Journal of Cardiology. Supplement = J. Cardiol. Suppl.
+Journal of Cardiopulmonary Rehabilitation = J. Cardpulm. Rehabil.
+Journal of Cardiothoracic Anesthesia = J. Cardiothorac. Anesth.
+Journal of Cardiothoracic and Vascular Anesthesia = J. Cardiothorac. Vasc. Anesth.
+Journal of Cardiovascular Electrophysiology = J. Cardiovasc. Electrophysiol.
+Journal of Cardiovascular Magnetic Resonance = J. Cardiovasc. Magn. Reson.
+Journal of Cardiovascular Management = J. Cardiovasc. Manag.
+Journal of Cardiovascular Medicine = J. Cardiovasc. Med.
+Journal of Cardiovascular Nursing = J. Cardiovasc. Nurs.
+Journal of Cardiovascular Pharmacology = J. Cardiovasc. Pharmacol.
+Journal of Cardiovascular Pharmacology and Therapeutics = J. Cardiovasc. Pharmacol. Ther.
+Journal of Cardiovascular Risk = J. Cardiovasc. Risk
+Journal of Cardiovascular Surgery = J. Cardiovasc. Surg. (Torino)
+Journal of Case Management = J. Case Manag.
+Journal of Catalysis=J. Catal.;JCTLA5;16/YR
+Journal of Cataract and Refractive Surgery = J. Cataract Refract. Surg.
+Journal of Cell Biology = J. Cell Biol.
+Journal of Cell Science = J. Cell Sci.
+Journal of Cell Science. Supplement = J. Cell Sci. Suppl.
+Journal of Cellular Biochemistry = J. Cell. Biochem.
+Journal of Cellular Biochemistry. Supplement = J. Cell. Biochem. Suppl.
+Journal of Cellular Physiology = J. Cell. Physiol.
+Journal of Cellular Physiology. Supplement = J. Cell. Physiol. Suppl.
+Journal of Cellular and Molecular Medicine = J. Cell. Mol. Med.
+Journal of Cerebral Blood Flow and Metabolism = J. Cereb. Blood Flow Metab.
+Journal of Chemical Crystallography=J. Chem. Crystallogr.;JCCYEV;M
+Journal of Chemical Documentation = J. Chem. Doc.
+Journal of Chemical Ecology=J. Chem. Ecol.;JCECD8;M
+Journal of Chemical Education = J. Chem. Educ.
+Journal of Chemical Engineering of Japan=J. Chem. Eng. Jpn.;JCEJAQ;M
+Journal of Chemical Information and Computer Sciences = J. Chem. Inf. Comput. Sci.
+Journal of Chemical Information and Modeling = J. Chem. Inf. Model.
+Journal of Chemical Neuroanatomy = J. Chem. Neuroanat.
+Journal of Chemical Physics = J. Chem. Phys.
+Journal of Chemical Research=J. Chem. Res.;JCROA4;M
+Journal of Chemical Sciences (Bangalore, India)=J. Chem. Sci. (Bangalore, India);JCSBB5;BM
+Journal of Chemical Technology and Biotechnology = J. Chem. Technol. Biotechnol.
+Journal of Chemical Theory and Computation=J. Chem. Theory Comput.;JCTCCE;BM
+Journal of Chemical Thermodynamics=J. Chem. Thermodyn.;JCTDAF;M
+Journal of Chemical and Engineering Data=J. Chem. Eng. Data;JCEAAX;BM
+Journal of Chemometrics=J. Chemom.;JOCHEU;M
+Journal of Chemotherapy = J. Chemother.
+Journal of Child Language = J. Child Lang.
+Journal of Child Neurology = J. Child Neurol.
+Journal of Child Psychology and Psychiatry and Allied Disciplines = J. Child Psychol. Psychiatry
+Journal of Child and Adolescent Psychiatric Nursing = J. Child Adolesc. Psychiatr. Nurs.
+Journal of Child and Adolescent Psychiatric and Mental Health Nursing = J. Child Adolesc. Psychiatr. Ment. Health Nurs.
+Journal of Child and Adolescent Psychopharmacology = J. Child Adolesc. Psychopharmacol.
+Journal of Christian Nursing = J. Christ. Nurs.
+Journal of Chromatographic Science = J. Chromatogr. Sci.
+Journal of Chromatography = J. Chromatogr.
+Journal of Chromatography A = J. Chromatogr. A
+Journal of Chromatography B, Biomedical Applications = J. Chromatogr. B Biomed. Appl.
+Journal of Chromatography, A=J. Chromatogr., A;JCRAEY;78/YR
+Journal of Chromatography, B: Analytical Technologies in the Biomedical and Life Sciences=J. Chromatogr., B: Anal. Technol. Biomed. Life Sci.;JCBAAI;23/YR
+Journal of Chromatography. B, Analytical Technologies in the Biomedical and Life Sciences = J. Chromatogr. B Analyt. Technol. Biomed. Life. Sci.
+Journal of Chromatography. B, Biomedical Sciences and Applications = J. Chromatogr. B. Biomed. Sci. App.
+Journal of Chromatography. Supplementary Volume = J. Chromatogr. Suppl.
+Journal of Chronic Diseases = J. Chronic Dis.
+Journal of Climate = J. Climate
+Journal of Climate Meteorology = J. Climate Meteor.
+Journal of Climate and Applied Meteorology = J. Climate Appl. Meteor.
+Journal of Climatology = J. Climatol.
+Journal of Clinical Anesthesia = J. Clin. Anesth.
+Journal of Clinical Apheresis = J. Clin. Apheresis
+Journal of Clinical Chemistry and Clinical Biochemistry = J. Clin. Chem. Clin. Biochem.
+Journal of Clinical Child Psychology = J. Clin. Child Psychol.
+Journal of Clinical Child and Adolescent Psychology = J. Clin. Child Adolesc. Psychol.
+Journal of Clinical Computing = J. Clin. Comput.
+Journal of Clinical Densitometry = J. Clin. Densitom.
+Journal of Clinical Dentistry = J. Clin. Dent.
+Journal of Clinical Dysmorphology = J. Clin. Dysmorphol.
+Journal of Clinical Endocrinology and Metabolism = J. Clin. Endocrinol. Metab.
+Journal of Clinical Engineering = J. Clin. Eng.
+Journal of Clinical Epidemiology = J. Clin. Epidemiol.
+Journal of Clinical Ethics = J. Clin. Ethics
+Journal of Clinical Gastroenterology = J. Clin. Gastroenterol.
+Journal of Clinical Hypertension = J. Clin. Hypertens.
+Journal of Clinical Immunology = J. Clin. Immunol.
+Journal of Clinical Investigation = J. Clin. Invest.
+Journal of Clinical Laboratory Analysis = J. Clin. Lab. Anal.
+Journal of Clinical Laser Medicine and Surgery = J. Clin. Laser Med. Surg.
+Journal of Clinical Microbiology = J. Clin. Microbiol.
+Journal of Clinical Monitoring = J. Clin. Monit.
+Journal of Clinical Monitoring and Computing = J. Clin. Monit. Comput.
+Journal of Clinical Neuro-Ophthalmology = J. Clin. Neuroophthalmol.
+Journal of Clinical Neurophysiology = J. Clin. Neurophysiol.
+Journal of Clinical Neuropsychology = J. Clin. Neuropsychol.
+Journal of Clinical Nursing = J. Clin. Nurs.
+Journal of Clinical Oncology = J. Clin. Oncol.
+Journal of Clinical Orthodontics = J. Clin. Orthod.
+Journal of Clinical Pathology = J. Clin. Pathol.
+Journal of Clinical Pathology. Supplement (Association of Clinical Pathologists) = J. Clin. Pathol. Suppl. (Assoc. Clin. Pathol.)
+Journal of Clinical Pathology. Supplement (Royal College of Pathologists) = J. Clin. Pathol. Suppl. (R. Coll. Pathol.)
+Journal of Clinical Pediatric Dentistry = J. Clin. Pediatr. Dent.
+Journal of Clinical Periodontology = J. Clin. Periodontol.
+Journal of Clinical Pharmacology = J. Clin. Pharmacol.
+Journal of Clinical Pharmacology and New Drugs = J. Clin. Pharmacol. New Drugs
+Journal of Clinical Pharmacology and the Journal of New Drugs = J. Clin. Pharmacol. J. New Drugs
+Journal of Clinical Pharmacy and Therapeutics = J. Clin. Pharm. Ther.
+Journal of Clinical Psychiatry = J. Clin. Psychiatry
+Journal of Clinical Psychology = J. Clin. Psychol.
+Journal of Clinical Psychopharmacology = J. Clin. Psychopharmacol.
+Journal of Clinical Stomatology Conferences = J. Clin. Stomatol. Conf.
+Journal of Clinical Ultrasound = J. Clin. Ultrasound
+Journal of Clinical Virology = J. Clin. Virol.
+Journal of Clinical and Experimental Hematopathology = J. Clin. Exp. Hematop.
+Journal of Clinical and Experimental Neuropsychology = J. Clin. Exp. Neuropsychol.
+Journal of Clinical and Hospital Pharmacy = J. Clin. Hosp. Pharm.
+Journal of Clinical and Laboratory Immunology = J. Clin. Lab. Immunol.
+Journal of Cluster Science=J. Cluster Sci.;JCSCEB;Q
+Journal of Cognitive Neuroscience = J. Cogn. Neurosci.
+Journal of Collective Negotiations in the Public Sector = J. Collect. Negotiations Public Sect.
+Journal of Colloid Science = J. Colloid Sci.
+Journal of Colloid and Interface Science = J. Colloid Interface Sci.
+Journal of Combinatorial Chemistry = J. Comb. Chem.
+Journal of Communicable Diseases = J. Commun. Dis.
+Journal of Communication = J. Commun.
+Journal of Communication Disorders = J. Commun. Disord.
+Journal of Community Health = J. Community Health
+Journal of Community Health Nursing = J. Community Health Nurs.
+Journal of Community Psychology = J. Community Psychol.
+Journal of Comparative Economics = J. Comp. Econ.
+Journal of Comparative Neurology = J. Comp. Neurol.
+Journal of Comparative Pathology = J. Comp. Pathol.
+Journal of Comparative Physiology. A, Neuroethology, Sensory, Neural, and Behavioral Physiology = J. Comp. Physiol. A Neuroethol. Sens. Neural. Behav. Physiol.
+Journal of Comparative Physiology. A, Sensory, Neural, and Behavioral Physiology = J. Comp. Physiol. [A]
+Journal of Comparative Physiology. B, Biochemical, Systemic, and Environmental Physiology = J. Comp. Physiol. [B]
+Journal of Comparative Psychology = J. Comp. Psychol.
+Journal of Comparative and Physiological Psychology = J. Comp. Physiol. Psychol.
+Journal of Compliance in Health Care = J. Compliance Health Care
+Journal of Computational Biology = J. Comput. Biol.
+Journal of Computational Chemistry=J. Comput. Chem.;JCCHDD;16/YR
+Journal of Computational Neuroscience = J. Comput. Neurosci.
+Journal of Computational Physics = J. Comput. Phys.
+Journal of Computational and Theoretical Nanoscience=J. Comput. Theor. Nanosci.;JCTNAB;4/YR
+Journal of Computed Tomography = J. Comput. Tomogr.
+Journal of Computer Assisted Tomography = J. Comput. Assist. Tomogr.
+Journal of Computer Chemistry, Japan=J. Comput. Chem., Jpn.;JCCJAG;Q
+Journal of Computer-Aided Molecular Design = J. Comput. Aided Mol. Des.
+Journal of Consulting Psychology = J. Consult. Psychol.
+Journal of Consulting and Clinical Psychology = J. Consult. Clin. Psychol.
+Journal of Contaminant Hydrology=J. Contam. Hydrol.;JCOHE6;32/YR
+Journal of Contemporary Dental Practice = J. Contemp. Dent. Pract.
+Journal of Contemporary Health Law and Policy = J. Contemp. Health Law Policy
+Journal of Continuing Education in Nursing = J. Contin. Educ. Nurs.
+Journal of Continuing Education in the Health Professions = J. Contin. Educ. Health Prof.
+Journal of Controlled Release = J. Controlled Release
+Journal of Coordination Chemistry=J. Coord. Chem.;JCCMBQ;18/YR
+Journal of Cosmetic Science = J. Cosmet. Sci.
+Journal of Cosmetic and Laser Therapy = J. Cosmet. Laser Ther.
+Journal of Cranio-Mandibular Practice = J. Craniomandibular. Pract.
+Journal of Cranio-Maxillo-Facial Surgery = J. Craniomaxillofac. Surg.
+Journal of Craniofacial Genetics and Developmental Biology = J. Craniofac. Genet. Dev. Biol.
+Journal of Craniofacial Genetics and Developmental Biology. Supplement = J. Craniofac. Genet. Dev. Biol. Suppl.
+Journal of Craniofacial Surgery = J. Craniofac. Surg.
+Journal of Craniomandibular Disorders = J. Craniomandib. Disord.
+Journal of Critical Care = J. Crit. Care
+Journal of Critical Illness = J. Crit. Illn.
+Journal of Crystal Growth=J. Cryst. Growth;JCRGAE;SM
+Journal of Cultural Diversity = J. Cult. Divers.
+Journal of Cutaneous Laser Therapy = J. Cutan. Laser. Ther.
+Journal of Cutaneous Medicine and Surgery = J. Cutan. Med. Surg.
+Journal of Cutaneous Pathology = J. Cutan. Pathol.
+Journal of Cyclic Nucleotide Research = J. Cyclic Nucleotide Res.
+Journal of Cyclic Nucleotide and Protein Phosphorylation Research = J. Cyclic Nucleotide Protein Phosphor. Res.
+Journal of Cystic Fibrosis = J. Cyst. Fibros.
+Journal of Dairy Research = J. Dairy Res.
+Journal of Dairy Science = J. Dairy Sci.
+Journal of Dental Education = J. Dent. Educ.
+Journal of Dental Hygiene = J. Dent. Hyg.
+Journal of Dental Medicine = J. Dent. Med.
+Journal of Dental Practice Administration = J. Dent. Pract. Adm.
+Journal of Dental Research = J. Dent. Res.
+Journal of Dental Symposia = J. Dent. Symp.
+Journal of Dental Technology = J. Dent. Technol.
+Journal of Dentistry = J. Dent.
+Journal of Dentistry for Children = J. Dent. Child.
+Journal of Dentistry for the Handicapped = J. Dent. Handicap.
+Journal of Dermatologic Surgery = J. Dermatol. Surg.
+Journal of Dermatologic Surgery and Oncology = J. Dermatol. Surg. Oncol.
+Journal of Dermatological Science = J. Dermatol. Sci.
+Journal of Dermatology = J. Dermatol.
+Journal of Developmental Physiology = J. Dev. Physiol.
+Journal of Developmental and Behavioral Pediatrics = J. Dev. Behav. Pediatr.
+Journal of Diabetes and Its Complications = J. Diabetes Complications
+Journal of Diabetic Complications = J. Diabet. Complications
+Journal of Dialysis = J. Dial.
+Journal of Diarrhoeal Diseases Research = J. Diarrhoeal Dis. Res.
+Journal of Digital Imaging = J. Digit. Imaging
+Journal of Dispersion Science and Technology=J. Dispersion Sci. Technol.;JDTEDS;BM
+Journal of Drug Education = J. Drug Educ.
+Journal of Drug Targeting = J. Drug Target.
+Journal of Drugs in Dermatology = J. Drugs Dermatol.
+Journal of ECT = J. ECT
+Journal of ET Nursing = J. ET Nurs.
+Journal of Economic Entomology = J. Econ. Entomol.
+Journal of Economic Literature = J. Econ. Lit.
+Journal of Economic Perspectives = J. Econ. Perspect.
+Journal of Economic and Social Measurement = J. Econ. Soc. Meas.
+Journal of Economics and Business = J. Econ. Bus.
+Journal of Educational Psychology = J. Educ. Psychol.
+Journal of Electroanalytical Chemistry=J. Electroanal. Chem.;JECHES;26/YR
+Journal of Electrocardiology = J. Electrocardiol.
+Journal of Electromyography and Kinesiology = J. Electromyogr. Kinesiol.
+Journal of Electron Microscopy = J. Electron Microsc. (Tokyo)
+Journal of Electron Microscopy Technique = J. Electron Microsc. Tech.
+Journal of Electron Spectroscopy and Related Phenomena=J. Electron Spectrosc. Relat. Phenom.;JESRAW;21/YR
+Journal of Electronic Materials=J. Electron. Mater.;JECMA5;M
+Journal of Embryology and Experimental Morphology = J. Embryol. Exp. Morphol.
+Journal of Emergency Medical Services = J. Emerg. Med. Serv. JEMS
+Journal of Emergency Medicine = J. Emerg. Med.
+Journal of Emergency Nursing = J. Emerg. Nurs.
+Journal of Endocrinological Investigation = J. Endocrinol. Invest.
+Journal of Endocrinology = J. Endocrinol.
+Journal of Endodontics = J. Endod.
+Journal of Endotoxin Research=J. Endotoxin Res.;JENREB;BM
+Journal of Endourology = J. Endourol.
+Journal of Endovascular Surgery = J. Endovasc. Surg.
+Journal of Endovascular Therapy = J. Endovasc. Ther.
+Journal of Energetic Materials=J. Energ. Mater.;JOEMDK;Q
+Journal of Engineering Psychology = J. Eng. Psychol.
+Journal of Enterostomal Therapy = J. Enterostomal Ther.
+Journal of Environmental Engineering (Reston, VA, United States)=J. Environ. Eng. (Reston, VA, U. S.);JOEEDU;M
+Journal of Environmental Health = J. Environ. Health
+Journal of Environmental Monitoring = J. Environ. Monit.
+Journal of Environmental Pathology and Toxicology = J. Environ. Pathol. Toxicol.
+Journal of Environmental Pathology, Toxicology and Oncology = J. Environ. Pathol. Toxicol. Oncol.
+Journal of Environmental Quality=J. Environ. Qual.;JEVQAA;BM
+Journal of Environmental Radioactivity=J. Environ. Radioact.;JERAEE;21/YR
+Journal of Environmental Science & Engineering=J. Environ. Sci. Eng.;JESEAR;Q
+Journal of Environmental Science and Engineering = J. Environ. Sci. Eng.
+Journal of Environmental Science and Health, Part B: Pesticides, Food Contaminants, and Agricultural Wastes=J. Environ. Sci. Health, Part B;JPFCD2;BM
+Journal of Environmental Science and Health. Part A, Toxic/Hazardous Substances and Environmental Engineering = J. Environ. Sci. Health Part A Tox. Hazard. Subst. Environ. Eng.
+Journal of Environmental Science and Health. Part B, Pesticides, Food Contaminants, and Agricultural Wastes = J. Environ. Sci. Health B
+Journal of Environmental Science and Health. Part C, Environmental Health Sciences = J. Environ. Sci. Health [C]
+Journal of Enzyme Inhibition = J. Enzym. Inhib.
+Journal of Enzyme Inhibition and Medicinal Chemistry = J. Enzyme Inhib. Med. Chem.
+Journal of Epidemiology = J. Epidemiol.
+Journal of Epidemiology and Biostatistics = J. Epidemiol. Biostat.
+Journal of Epidemiology and Community Health = J. Epidemiol. Community Health
+Journal of Esthetic Dentistry = J. Esthet. Dent.
+Journal of Ethnicity in Substance Abuse = J. Ethn. Subst. Abuse.
+Journal of Ethnopharmacology = J. Ethnopharmacol.
+Journal of Eukaryotic Microbiology = J. Eukaryot. Microbiol.
+Journal of Evaluation in Clinical Practice = J. Eval. Clin. Pract.
+Journal of Existentialism = J. Existent.
+Journal of Experimental Animal Science = J. Exp. Anim. Sci.
+Journal of Experimental Biology = J. Exp. Biol.
+Journal of Experimental Botany=J. Exp. Bot.;JEBOA6;M
+Journal of Experimental Child Psychology = J. Exp. Child Psychol.
+Journal of Experimental Medical Sciences = J. Exp. Med. Sci.
+Journal of Experimental Medicine = J. Exp. Med.
+Journal of Experimental Pathology = J. Exp. Pathol.
+Journal of Experimental Psychology = J. Exp. Psychol.
+Journal of Experimental Psychology: Animal Behavior Processes = J. Exp. Psychol. Anim. Behav. Process.
+Journal of Experimental Psychology: General = J. Exp. Psychol. Gen.
+Journal of Experimental Psychology: Human Learning and Memory = J. Exp. Psychol. [Hum. Learn.]
+Journal of Experimental Psychology: Human Perception and Performance = J. Exp. Psychol. Hum. Percept. Perform.
+Journal of Experimental Psychology: Learning, Memory, and Cognition = J. Exp. Psychol. Learn. Mem. Cogn.
+Journal of Experimental Social Psychology = J. Exp. Soc. Psychol.
+Journal of Experimental Therapeutics and Oncology = J. Exp. Ther. Oncol.
+Journal of Experimental Zoology = J. Exp. Zool.
+Journal of Experimental Zoology. Part A, Comparative Experimental Biology = J. Exp. Zoolog. A Comp. Exp. Biol.
+Journal of Experimental Zoology. Part B, Molecular and Developmental Evolution = J. Exp. Zoolog. B Mol. Dev. Evol.
+Journal of Experimental Zoology. Supplement = J. Exp. Zool. Suppl.
+Journal of Experimental and Clinical Cancer Research = J. Exp. Clin. Cancer Res.
+Journal of Experimental and Theoretical Physics=J. Exp. Theor. Phys.;JTPHES;M
+Journal of Exposure Analysis and Environmental Epidemiology = J. Expo. Anal. Environ. Epidemiol.
+Journal of Exposure Science and Environmental Epidemiology = J. Expo. Sci. Environ. Epidemiol.
+Journal of Extra-Corporeal Technology = J. Extra. Corpor. Technol.
+Journal of Family Planning and Reproductive Health Care = J. Fam. Plann. Reprod. Health Care
+Journal of Family Practice = J. Fam. Pract.
+Journal of Feline Medicine and Surgery = J. Feline Med. Surg.
+Journal of Fish Biology = J. Fish Biol.
+Journal of Fluid Mechanics = J. Fluid Mech.
+Journal of Fluorine Chemistry=J. Fluorine Chem.;JFLCAR;M
+Journal of Food Protection = J. Food Prot.
+Journal of Food Science=J. Food Sci.;JFDSAZ;9/YR
+Journal of Foot Surgery = J. Foot Surg.
+Journal of Foot and Ankle Surgery = J. Foot Ankle Surg.
+Journal of Forensic Medicine = J. Forensic Med.
+Journal of Forensic Nursing = J. Forensic. Nurs.
+Journal of Forensic Odonto-Stomatology = J. Forensic Odontostomatol.
+Journal of Forensic Sciences = J. Forensic Sci.
+Journal of Free Radicals in Biology and Medicine = J. Free Radic. Biol. Med.
+Journal of Fusion Energy=J. Fusion Energy;JFENDS;Q
+Journal of Gastroenterology = J. Gastroenterol.
+Journal of Gastroenterology and Hepatology = J. Gastroenterol. Hepatol.
+Journal of Gastrointestinal Surgery = J. Gastrointest. Surg.
+Journal of Gastrointestinal and Liver Diseases = J. Gastrointestin. Liver Dis.
+Journal of Gender-Specific Medicine = J. Gend. Specif. Med.
+Journal of Gene Medicine = J. Gene Med.
+Journal of General Internal Medicine = J. Gen. Intern. Med.
+Journal of General Microbiology = J. Gen. Microbiol.
+Journal of General Orthodontics = J. Gen. Orthod.
+Journal of General Physiology = J. Gen. Physiol.
+Journal of General Psychology = J. Gen. Psychol.
+Journal of General Virology = J. Gen. Virol.
+Journal of General and Applied Microbiology=J. Gen. Appl. Microbiol.;JGAMA9;BM
+Journal of Genetic Psychology = J. Genet. Psychol.
+Journal of Genome Science and Technology=J. Genome Sci. Technol.;JGSTAI;Q
+Journal of Geochemical Exploration=J. Geochem. Explor.;JGCEAT;BM
+Journal of Geophysical Research = J. Geophys. Res.
+Journal of Geriatric Physical Therapy = J. Geriatr. Phys. Ther.
+Journal of Geriatric Psychiatry = J. Geriatr. Psychiatry
+Journal of Geriatric Psychiatry and Neurology = J. Geriatr. Psychiatry Neurol.
+Journal of Gerontological Nursing = J. Gerontol. Nurs.
+Journal of Gerontology = J. Gerontol.
+Journal of Glaciology = J. Glaciol.
+Journal of Glaucoma = J. Glaucoma
+Journal of Gnathology = J. Gnathol.
+Journal of Gynecologic Surgery = J. Gynecol. Surg.
+Journal of HIV Therapy = J. HIV Ther.
+Journal of Hand Surgery. American Volume = J. Hand Surg. [Am.]
+Journal of Hand Surgery. British Volume = J. Hand Surg. [Br.]
+Journal of Hand Therapy = J. Hand Ther.
+Journal of Hazardous Materials = J. Hazard. Mater.
+Journal of Head Trauma Rehabilitation = J. Head Trauma Rehabil.
+Journal of Health Administration Education = J. Health Adm. Educ.
+Journal of Health Care Benefits = J. Health Care Benefits
+Journal of Health Care Chaplaincy = J. Health Care Chaplain.
+Journal of Health Care Finance = J. Health Care Finance
+Journal of Health Care Interior Design = J. Health Care Inter. Des.
+Journal of Health Care Marketing = J. Health Care Mark.
+Journal of Health Care Technology = J. Health Care Technol.
+Journal of Health Care for the Poor and Underserved = J. Health Care Poor Underserved
+Journal of Health Economics = J. Health Econ.
+Journal of Health Education = J. Health Educ.
+Journal of Health Politics, Policy and Law = J. Health Polit. Policy Law
+Journal of Health Services Research and Policy = J. Health Serv. Res. Policy
+Journal of Health and Hospital Law = J. Health Hosp. Law
+Journal of Health and Human Behavior = J. Health Hum. Behav.
+Journal of Health and Human Resources Administration = J. Health Hum. Resour. Adm.
+Journal of Health and Human Services Administration = J. Health Hum. Serv. Adm.
+Journal of Health and Social Behavior = J. Health Soc. Behav.
+Journal of Health and Social Policy = J. Health Soc. Policy
+Journal of Health, Population, and Nutrition = J. Health Popul. Nutr.
+Journal of Healthcare Design = J. Healthc. Des.
+Journal of Healthcare Education and Training = J. Healthc. Educ. Train.
+Journal of Healthcare Information Management = J. Healthc. Inf. Manag.
+Journal of Healthcare Management = J. Healthc. Manag.
+Journal of Healthcare Materiel Management = J. Healthc. Mater. Manage.
+Journal of Healthcare Protection Management = J. Healthc. Prot. Manage.
+Journal of Healthcare Resource Management = J. Healthc. Resour. Manag.
+Journal of Healthcare Risk Management = J. Healthc. Risk Manag.
+Journal of Heart Transplantation = J. Heart Transplant.
+Journal of Heart Valve Disease = J. Heart Valve Dis.
+Journal of Heart and Lung Transplantation = J. Heart Lung Transplant.
+Journal of Helminthology = J. Helminthol.
+Journal of Hematotherapy = J. Hematother.
+Journal of Hematotherapy and Stem Cell Research = J. Hematother. Stem Cell Res.
+Journal of Hepato-Biliary-Pancreatic Surgery = J. Hepatobiliary. Pancreat. Surg.
+Journal of Hepatology = J. Hepatol.
+Journal of Hepatology. Supplement = J. Hepatol. Suppl.
+Journal of Herbal Pharmacotherapy = J. Herb. Pharmacother.
+Journal of Heredity = J. Hered.
+Journal of Heterocyclic Chemistry=J. Heterocycl. Chem.;JHTCAD;BM
+Journal of Histochemistry and Cytochemistry = J. Histochem. Cytochem.
+Journal of Holistic Nursing = J. Holist. Nurs.
+Journal of Homosexuality = J. Homosex.
+Journal of Hospital Dental Practice = J. Hosp. Dent. Pract.
+Journal of Hospital Infection = J. Hosp. Infect.
+Journal of Hospital Marketing = J. Hosp. Mark.
+Journal of Hospital Supply, Processing and Distribution = J. Hosp. Supply. Process. Distrib.
+Journal of Huazhong University of Science and Technology. Medical Sciences = J. Huazhong Univ. Sci. Technolog. Med. Sci.
+Journal of Human Ergology = J. Hum. Ergol. (Tokyo)
+Journal of Human Evolution = J. Hum. Evol.
+Journal of Human Genetics = J. Hum. Genet.
+Journal of Human Hypertension = J. Hum. Hypertens.
+Journal of Human Lactation = J. Hum. Lact.
+Journal of Human Nutrition = J. Hum. Nutr.
+Journal of Human Resources = J. Hum. Resour.
+Journal of Human Stress = J. Human Stress
+Journal of Human Virology = J. Hum. Virol.
+Journal of Hydrology = J. Hydrol.
+Journal of Hygiene = J. Hyg. (Lond.)
+Journal of Hygiene, Epidemiology, Microbiology and Immunology = J. Hyg. Epidemiol. Microbiol. Immunol.
+Journal of Hypertension = J. Hypertens.
+Journal of Hypertension. Supplement = J. Hypertens. Suppl.
+Journal of Image Guided Surgery = J. Image Guid. Surg.
+Journal of Imaging Science and Technology=J. Imaging Sci. Technol.;JIMTE6;BM
+Journal of Immigrant and Minority Health = J. Immigr. Minor. Health
+Journal of Immunoassay = J. Immunoassay
+Journal of Immunoassay & Immunochemistry=J. Immunoassay Immunochem.;JIIOAZ;Q
+Journal of Immunoassay and Immunochemistry = J. Immunoassay Immunochem.
+Journal of Immunogenetics = J. Immunogenet.
+Journal of Immunological Methods = J. Immunol. Methods
+Journal of Immunology = J. Immunol.
+Journal of Immunopharmacology = J. Immunopharmacol.
+Journal of Immunotherapy = J. Immunother.
+Journal of Immunotherapy with Emphasis on Tumor Immunology = J. Immunother. Emphasis Tumor Immunol.
+Journal of In Vitro Fertilization and Embryo Transfer = J. In Vitro Fert. Embryo Transf.
+Journal of Inclusion Phenomena and Macrocyclic Chemistry=J. Inclusion Phenom. Macrocyclic Chem.;JIPCF5;M
+Journal of Individual Psychology = J. Individ. Psychol.
+Journal of Industrial Microbiology = J. Ind. Microbiol.
+Journal of Industrial Microbiology & Biotechnology=J. Ind. Microbiol. Biotechnol.;JIMBFL;M
+Journal of Industrial Microbiology and Biotechnology = J. Ind. Microbiol. Biotechnol.
+Journal of Industrial and Engineering Chemistry (Seoul, Republic of Korea)=J. Ind. Eng. Chem. (Seoul, Repub. Korea);JIECFI;BM
+Journal of Infection = J. Infect.
+Journal of Infectious Diseases = J. Infect. Dis.
+Journal of Inflammation = J. Inflamm.
+Journal of Information and Image Management = J. Inf. Image Manage.
+Journal of Infusional Chemotherapy = J. Infus. Chemother.
+Journal of Inherited Metabolic Disease = J. Inherit. Metab. Dis.
+Journal of Inorganic Biochemistry = J. Inorg. Biochem.
+Journal of Inorganic and Organometallic Polymers and Materials=J. Inorg. Organomet. Polym. Mater.;JIOPAY;Q
+Journal of Insect Physiology = J. Insect Physiol.
+Journal of Insect Science = J. Insect Sci.
+Journal of Insurance Medicine = J. Insur. Med.
+Journal of Integrative Neuroscience = J. Integr. Neurosci.
+Journal of Intellectual Disabilities = J. Intellect. Disabil.
+Journal of Intellectual Disability Research = J. Intellect. Disabil. Res.
+Journal of Intensive Care Medicine = J. Intensive Care Med.
+Journal of Interferon & Cytokine Research=J. Interferon Cytokine Res.;JICRFJ;M
+Journal of Interferon Research = J. Interferon Res.
+Journal of Interferon and Cytokine Research = J. Interferon Cytokine Res.
+Journal of Internal Medicine = J. Intern. Med.
+Journal of Internal Medicine. Supplement = J. Intern. Med. Suppl.
+Journal of International Medical Research = J. Int. Med. Res.
+Journal of International Research Communications = J. Int. Res. Commun.
+Journal of Interventional Cardiac Electrophysiology = J. Interv. Card. Electrophysiol.
+Journal of Interventional Cardiology = J. Intervent. Cardiol.
+Journal of Intravenous Nursing = J. Intraven. Nurs.
+Journal of Invasive Cardiology = J. Invasive Cardiol.
+Journal of Invertebrate Pathology = J. Invertebr. Pathol.
+Journal of Investigational Allergology and Clinical Immunology = J. Investig. Allergol. Clin. Immunol.
+Journal of Investigative Dermatology = J. Invest. Dermatol.
+Journal of Investigative Dermatology. Symposium Proceedings = J. Investig. Dermatol. Symp. Proc.
+Journal of Investigative Medicine = J. Investig. Med.
+Journal of Investigative Surgery = J. Invest. Surg.
+Journal of Knee Surgery = J. Knee Surg.
+Journal of Korean Medical Science = J. Korean Med. Sci.
+Journal of LGBT Health Research = J. LGBT Health Res.
+Journal of Labelled Compounds & Radiopharmaceuticals=J. Labelled Compd. Radiopharm.;JLCRD4;14/YR
+Journal of Laboratory and Clinical Medicine = J. Lab. Clin. Med.
+Journal of Laparoendoscopic Surgery = J. Laparoendosc. Surg.
+Journal of Laparoendoscopic and Advanced Surgical Techniques. Part A = J. Laparoendosc. Adv. Surg. Tech. A
+Journal of Laryngology and Otology = J. Laryngol. Otol.
+Journal of Laryngology and Otology. Supplement = J. Laryngol. Otol. Suppl.
+Journal of Laser Applications = J. Laser Appl.
+Journal of Law and Ethics in Dentistry = J. Law Ethics Dent.
+Journal of Law and Health = J. Law Health
+Journal of Law, Medicine and Ethics = J. Law. Med. Ethics
+Journal of Learning Disabilities = J. Learn. Disabil.
+Journal of Legal Medicine = J. Leg. Med.
+Journal of Leukocyte Biology = J. Leukoc. Biol.
+Journal of Leukocyte Biology. Supplement = J. Leukoc. Biol. Suppl.
+Journal of Lipid Mediators = J. Lipid Mediat.
+Journal of Lipid Mediators and Cell Signalling = J. Lipid Mediat. Cell Signal.
+Journal of Lipid Research = J. Lipid Res.
+Journal of Liquid Chromatography & Related Technologies=J. Liq. Chromatogr. Relat. Technol.;JLCTFC;20/YR
+Journal of Lithotripsy and Stone Disease = J. Lithotr. Stone Dis.
+Journal of Long Term Care Administration = J. Long Term Care Adm.
+Journal of Long Term Home Health Care = J. Long Term Home Health Care
+Journal of Long-Term Effects of Medical Implants = J. Long. Term Eff. Med. Implants
+Journal of Low Temperature Physics=J. Low Temp. Phys.;JLTPAC;M
+Journal of Luminescence=J. Lumin.;JLUMA8;20/YR
+Journal of Macromolecular Science, Part A: Pure and Applied Chemistry=J. Macromol. Sci., Part A: Pure Appl. Chem.;JSPCE6;M
+Journal of Macromolecular Science, Part B: Physics=J. Macromol. Sci., Part B: Phys.;JMAPBR;BM
+Journal of Macromolecular Science, Polymer Reviews=J. Macromol. Sci., Polym. Rev.;JMSPCG;Q
+Journal of Magnetic Resonance = J. Magn. Reson.
+Journal of Magnetic Resonance Imaging = J. Magn. Reson. Imaging
+Journal of Magnetic Resonance. Series A = J. Magn. Reson. A
+Journal of Magnetic Resonance. Series B = J. Magn. Reson. B
+Journal of Magnetism and Magnetic Materials=J. Magn. Magn. Mater.;JMMMDC;45/YR
+Journal of Mammalogy = J. Mammal.
+Journal of Mammary Gland Biology and Neoplasia = J. Mammary Gland Biol. Neoplasia
+Journal of Management in Medicine = J. Manag. Med.
+Journal of Manipulative and Physiological Therapeutics = J. Manipulative Physiol. Ther.
+Journal of Marine Research = J. Mar. Res.
+Journal of Marine Systems = J. Mar. Syst.
+Journal of Marital and Family Therapy = J. Marital Fam. Ther.
+Journal of Marketing for Mental Health = J. Mark. Ment. Health
+Journal of Marketing for Professions = J. Mark. Prof.
+Journal of Marmara University Dental Faculty = J. Marmara Univ. Dent. Fac.
+Journal of Mass Spectrometry = J. Mass Spectrom.
+Journal of Materials Chemistry=J. Mater. Chem.;JMACEP;48/YR
+Journal of Materials Engineering and Performance=J. Mater. Eng. Perform.;JMEPEG;BM
+Journal of Materials Research=J. Mater. Res.;JMREEE;M
+Journal of Materials Science=J. Mater. Sci.;JMTSAS;SM
+Journal of Materials Science: Materials in Electronics=J. Mater. Sci.: Mater. Electron.;JSMEEV;M
+Journal of Materials Science: Materials in Medicine=J. Mater. Sci.: Mater. Med.;JSMMEL;M
+Journal of Maternal-Fetal Medicine = J. Matern. Fetal Med.
+Journal of Maternal-Fetal and Neonatal Medicine = J. Matern. Fetal Neonatal Med.
+Journal of Mathematical Biology = J. Math. Biol.
+Journal of Mathematical Chemistry=J. Math. Chem.;JMCHEG;8/YR
+Journal of Mathematical Psychology = J. Math. Psychol.
+Journal of Maxillofacial Orthopedics = J. Maxillofac. Orthop.
+Journal of Maxillofacial Surgery = J. Maxillofac. Surg.
+Journal of Mechanochemistry and Cell Motility = J. Mechanochem. Cell Motil.
+Journal of Medical Education = J. Med. Educ.
+Journal of Medical Engineering and Technology = J. Med. Eng. Technol.
+Journal of Medical Entomology = J. Med. Entomol.
+Journal of Medical Entomology. Supplement = J. Med. Entomol. Suppl.
+Journal of Medical Ethics = J. Med. Ethics
+Journal of Medical Genetics = J. Med. Genet.
+Journal of Medical Humanities = J. Med. Humanit.
+Journal of Medical Humanities and Bioethics = J. Med. Humanit. Bioeth.
+Journal of Medical Internet Research = J. Med. Internet Res.
+Journal of Medical Investigation = J. Med. Invest.
+Journal of Medical Laboratory Technology = J. Med. Lab. Technol.
+Journal of Medical Microbiology = J. Med. Microbiol.
+Journal of Medical Practice Management = J. Med. Pract. Manage.
+Journal of Medical Primatology = J. Med. Primatol.
+Journal of Medical Screening = J. Med. Screen.
+Journal of Medical Systems = J. Med. Syst.
+Journal of Medical Virology = J. Med. Virol.
+Journal of Medical and Dental Sciences = J. Med. Dent. Sci.
+Journal of Medical and Veterinary Mycology = J. Med. Vet. Mycol.
+Journal of Medicinal Chemistry = J. Med. Chem.
+Journal of Medicine = J. Med.
+Journal of Medicine and Philosophy = J. Med. Philos.
+Journal of Membrane Biology = J. Membr. Biol.
+Journal of Membrane Science=J. Membr. Sci.;JMESDO;36/YR
+Journal of Mental Deficiency Research = J. Ment. Defic. Res.
+Journal of Mental Health Administration = J. Ment. Health Adm.
+Journal of Mental Health Policy and Economics = J. Ment. Health Policy Econ.
+Journal of Meteorological Research, Japan = J. Meteor. Res. Japan
+Journal of Meteorology = J. Meteor.
+Journal of Michigan Dental Association = J. Mich. Dent. Assoc.
+Journal of Microbiological Methods = J. Microbiol. Methods
+Journal of Microbiology, Immunology, and Infection = J. Microbiol. Immunol. Infect.
+Journal of Microencapsulation = J. Microencapsul.
+Journal of Micrographics = J. Microgr.
+Journal of Microscopy = J. Microsc.
+Journal of Microsurgery = J. Microsurg.
+Journal of Microwave Power = J. Microw. Power
+Journal of Microwave Power and Electromagnetic Energy = J. Microw. Power Electromagn. Energy
+Journal of Midwifery and Women's Health = J. Midwifery Womens Health
+Journal of Minimally Invasive Gynecology = J. Minim. Invasive Gynecol.
+Journal of Modern Optics=J. Mod. Opt.
+Journal of Molecular Biology = J. Mol. Biol.
+Journal of Molecular Catalysis A: Chemical=J. Mol. Catal. A: Chem.;JMCCF2;SM
+Journal of Molecular Catalysis B: Enzymatic=J. Mol. Catal. B: Enzym.;JMCEF8;8/YR
+Journal of Molecular Diagnostics = J. Mol. Diagn.
+Journal of Molecular Endocrinology = J. Mol. Endocrinol.
+Journal of Molecular Evolution = J. Mol. Evol.
+Journal of Molecular Graphics = J. Mol. Graph.
+Journal of Molecular Graphics & Modelling=J. Mol. Graphics Modell.;JMGMFI;BM
+Journal of Molecular Graphics and Modelling = J. Mol. Graph. Model.
+Journal of Molecular Histology = J. Mol. Histol.
+Journal of Molecular Liquids=J. Mol. Liq.;JMLIDT;21/YR
+Journal of Molecular Medicine = J. Mol. Med.
+Journal of Molecular Microbiology and Biotechnology = J. Mol. Microbiol. Biotechnol.
+Journal of Molecular Neuroscience = J. Mol. Neurosci.
+Journal of Molecular Recognition = J. Mol. Recognit.
+Journal of Molecular Spectroscopy = J. Mol. Spectrosc.
+Journal of Molecular Structure=J. Mol. Struct.;JMOSB4;66/YR
+Journal of Molecular and Applied Genetics = J. Mol. Appl. Genet.
+Journal of Molecular and Cellular Cardiology = J. Mol. Cell. Cardiol.
+Journal of Molecular and Cellular Immunology = J. Mol. Cell. Immunol.
+Journal of Molecular and Cellular Pathology = J. Mol. Cell. Pathol.
+Journal of Morphology = J. Morphol.
+Journal of Muscle Research and Cell Motility = J. Muscle Res. Cell Motil.
+Journal of Music Therapy = J. Music Ther.
+Journal of Nanoscience and Nanotechnology = J. Nanosci. Nanotechnol.
+Journal of National Black Nurses Association = J. Natl. Black Nurses Assoc.
+Journal of Natural Gas Chemistry=J. Nat. Gas Chem.;JGCHE8;Q
+Journal of Natural Products = J. Nat. Prod.
+Journal of Natural Toxins = J. Nat. Toxins
+Journal of Near Infrared Spectroscopy=J. Near Infrared Spectrosc.;JNISEI;BM
+Journal of Negative Results in Biomedicine = J. Negat. Results Biomed.
+Journal of Nephrology Nursing = J. Nephrol. Nurs.
+Journal of Nervous and Mental Disease = J. Nerv. Ment. Dis.
+Journal of Neural Engineering = J. Neural Eng.
+Journal of Neural Transmission = J. Neural Transm.
+Journal of Neural Transmission. General Section = J. Neural Transm. Gen. Sect.
+Journal of Neural Transmission. Parkinsons Disease and Dementia Section = J. Neural Transm. Park. Dis. Dement. Sect.
+Journal of Neural Transmission. Supplementum = J. Neural Transm. Suppl.
+Journal of Neural Transplantation = J. Neural Transplant.
+Journal of Neural Transplantation and Plasticity = J. Neural Transplant. Plast.
+Journal of Neuro-Oncology = J. Neurooncol.
+Journal of Neuro-Ophthalmology = J. Neuroophthalmol.
+Journal of Neuro-Visceral Relations = J. Neurovisc. Relat.
+Journal of Neurobiology = J. Neurobiol.
+Journal of Neurochemistry = J. Neurochem.
+Journal of Neurocytology = J. Neurocytol.
+Journal of Neuroendocrinology = J. Neuroendocrinol.
+Journal of Neurogenetics = J. Neurogenet.
+Journal of Neuroimaging = J. Neuroimaging
+Journal of Neuroimmunology = J. Neuroimmunol.
+Journal of Neuroimmunology. Supplement = J. Neuroimmunol. Suppl.
+Journal of Neurologic Physical Therapy = J. Neurol. Phys. Ther.
+Journal of Neurology = J. Neurol.
+Journal of Neurology, Neurosurgery and Psychiatry = J. Neurol. Neurosurg. Psychiatry
+Journal of Neuropathology and Experimental Neurology = J. Neuropathol. Exp. Neurol.
+Journal of Neurophysiology = J. Neurophysiol.
+Journal of Neuropsychiatry and Clinical Neurosciences = J. Neuropsychiatry Clin. Neurosci.
+Journal of Neuroradiology = J. Neuroradiol.
+Journal of Neuroscience = J. Neurosci.
+Journal of Neuroscience Methods = J. Neurosci. Methods
+Journal of Neuroscience Nursing = J. Neurosci. Nurs.
+Journal of Neuroscience Research = J. Neurosci. Res.
+Journal of Neurosurgery = J. Neurosurg.
+Journal of Neurosurgery. Spine = J. Neurosurg. Spine
+Journal of Neurosurgical Anesthesiology = J. Neurosurg. Anesthesiol.
+Journal of Neurosurgical Nursing = J. Neurosurg. Nurs.
+Journal of Neurosurgical Sciences = J. Neurosurg. Sci.
+Journal of Neurotrauma = J. Neurotrauma
+Journal of Neurovirology = J. Neurovirol.
+Journal of New Drugs = J. New Drugs
+Journal of New Zealand Society of Periodontology = J. N. Z. Soc. Periodontol.
+Journal of Nihon University School of Dentistry = J. Nihon Univ. Sch. Dent.
+Journal of Nippon Medical School = J. Nippon Med. Sch.
+Journal of Non-Crystalline Solids=J. Non-Cryst. Solids;JNCSBJ;54/YR
+Journal of Non-Newtonian Fluid Mechanics=J. Non-Newtonian Fluid Mech.;JNFMDI;24/YR
+Journal of Nuclear Biology and Medicine = J. Nucl. Biol. Med.
+Journal of Nuclear Cardiology = J. Nucl. Cardiol.
+Journal of Nuclear Materials=J. Nucl. Mater.;JNUMAM;36/YR
+Journal of Nuclear Medicine = J. Nucl. Med.
+Journal of Nuclear Medicine Technology = J. Nucl. Med. Technol.
+Journal of Nuclear Medicine and Allied Sciences = J. Nucl. Med. Allied Sci.
+Journal of Nuclear Science and Technology (Tokyo, Japan)=J. Nucl. Sci. Technol. (Tokyo, Jpn.);JNSTAX;M
+Journal of Nurse-Midwifery = J. Nurse. Midwifery
+Journal of Nursing Administration = J. Nurs. Adm.
+Journal of Nursing Care = J. Nurs. Care
+Journal of Nursing Care Quality = J. Nurs. Care Qual.
+Journal of Nursing Education = J. Nurs. Educ.
+Journal of Nursing Ethics = J. Nurs. Ethics
+Journal of Nursing History = J. Nurs. Hist.
+Journal of Nursing Management = J. Nurs. Manag.
+Journal of Nursing Measurement = J. Nurs. Meas.
+Journal of Nursing Quality Assurance = J. Nurs. Qual. Assur.
+Journal of Nursing Research = J. Nurs. Res.
+Journal of Nursing Scholarship = J. Nurs. Scholarsh.
+Journal of Nursing Staff Development = J. Nurs. Staff Dev.
+Journal of Nutrition = J. Nutr.
+Journal of Nutrition Education and Behavior = J. Nutr. Educ. Behav.
+Journal of Nutrition for the Elderly = J. Nutr. Elder.
+Journal of Nutrition, Health and Aging = J. Nutr. Health Aging
+Journal of Nutritional Biochemistry=J. Nutr. Biochem.;JNBIEL;M
+Journal of Nutritional Science and Vitaminology = J. Nutr. Sci. Vitaminol. (Tokyo)
+Journal of Obstetric, Gynecologic, and Neonatal Nursing = J. Obstet. Gynecol. Neonatal Nurs.
+Journal of Obstetrics and Gynaecology = J. Obstet. Gynaecol.
+Journal of Obstetrics and Gynaecology Canada = J. Obstet. Gynaecol. Can.
+Journal of Obstetrics and Gynaecology Research = J. Obstet. Gynaecol. Res.
+Journal of Obstetrics and Gynaecology of India = J. Obstet. Gynaecol. India
+Journal of Obstetrics and Gynaecology of the British Commonwealth = J. Obstet. Gynaecol. Br. Commonw.
+Journal of Occupational Health Psychology = J. Occup. Health Psychol.
+Journal of Occupational Medicine = J. Occup. Med.
+Journal of Occupational and Environmental Hygiene = J. Occup. Environ. Hyg.
+Journal of Occupational and Environmental Medicine = J. Occup. Environ. Med.
+Journal of Ocular Pharmacology = J. Ocul. Pharmacol.
+Journal of Ocular Pharmacology and Therapeutics = J. Ocul. Pharmacol. Ther.
+Journal of Oleo Science=J. Oleo Sci.;JOSOAP;M
+Journal of Oncology Management = J. Oncol. Manag.
+Journal of Ophthalmic Nursing and Technology = J. Ophthalmic Nurs. Technol.
+Journal of Oral Implant and Transplant Surgery = J. Oral Implant Transplant Surg.
+Journal of Oral Implantology = J. Oral Implantol.
+Journal of Oral Medicine = J. Oral Med.
+Journal of Oral Pathology = J. Oral Pathol.
+Journal of Oral Pathology and Medicine = J. Oral Pathol. Med.
+Journal of Oral Rehabilitation = J. Oral Rehabil.
+Journal of Oral Science = J. Oral Sci.
+Journal of Oral Surgery = J. Oral Surg.
+Journal of Oral Therapeutics and Pharmacology = J. Oral Ther. Pharmacol.
+Journal of Oral and Maxillofacial Surgery = J. Oral Maxillofac. Surg.
+Journal of Organic Chemistry = J. Org. Chem.
+Journal of Organometallic Chemistry=J. Organomet. Chem.;JORCAI;BW
+Journal of Orofacial Orthopedics = J. Orofac. Orthop.
+Journal of Orofacial Pain = J. Orofac. Pain
+Journal of Orthodontics = J. Orthod.
+Journal of Orthopaedic Research = J. Orthop. Res.
+Journal of Orthopaedic Science = J. Orthop. Sci.
+Journal of Orthopaedic Trauma = J. Orthop. Trauma
+Journal of Orthopaedic and Sports Physical Therapy = J. Orthop. Sports Phys. Ther.
+Journal of Osaka Dental University = J. Osaka Dent. Univ.
+Journal of Otolaryngology = J. Otolaryngol.
+Journal of Otolaryngology. Supplement = J. Otolaryngol. Suppl.
+Journal of Outcome Measurement = J. Outcome Meas.
+Journal of Paediatric Dentistry = J. Paediatr. Dent.
+Journal of Paediatrics and Child Health = J. Paediatr. Child Health
+Journal of Pain and Palliative Care Pharmacotherapy = J. Pain Palliat. Care Pharmacother.
+Journal of Pain and Symptom Management = J. Pain Symptom Manage.
+Journal of Palliative Care = J. Palliat. Care
+Journal of Palliative Medicine = J. Palliat. Med.
+Journal of Parasitology = J. Parasitol.
+Journal of Parenteral Science and Technology = J. Parenter. Sci. Technol.
+Journal of Pastoral Care = J. Pastoral Care
+Journal of Pathology = J. Pathol.
+Journal of Pathology and Bacteriology = J. Pathol. Bacteriol.
+Journal of Patient Account Management = J. Patient Acc. Manage.
+Journal of Pediatric Endocrinology = J. Pediatr. Endocrinol.
+Journal of Pediatric Endocrinology and Metabolism = J. Pediatr. Endocrinol. Metab.
+Journal of Pediatric Gastroenterology and Nutrition = J. Pediatr. Gastroenterol. Nutr.
+Journal of Pediatric Health Care = J. Pediatr. Health Care
+Journal of Pediatric Hematology/Oncology = J. Pediatr. Hematol. Oncol.
+Journal of Pediatric Nursing = J. Pediatr. Nurs.
+Journal of Pediatric Oncology Nursing = J. Pediatr. Oncol. Nurs.
+Journal of Pediatric Ophthalmology = J. Pediatr. Ophthalmol.
+Journal of Pediatric Ophthalmology and Strabismus = J. Pediatr. Ophthalmol. Strabismus
+Journal of Pediatric Orthopaedics. Part B = J. Pediatr. Orthop. B
+Journal of Pediatric Orthopedics = J. Pediatr. Orthop.
+Journal of Pediatric Psychology = J. Pediatr. Psychol.
+Journal of Pediatric Surgery = J. Pediatr. Surg.
+Journal of Pediatric and Adolescent Gynecology = J. Pediatr. Adolesc. Gynecol.
+Journal of Pediatric and Perinatal Nutrition = J. Pediatr. Perinat. Nutr.
+Journal of Pediatrics = J. Pediatr.
+Journal of Pedodontics = J. Pedod.
+Journal of Peptide Research = J. Pept. Res.
+Journal of Peptide Science=J. Pept. Sci.;JPSIEI;M
+Journal of Perianesthesia Nursing = J. Perianesth. Nurs.
+Journal of Perinatal Medicine = J. Perinat. Med.
+Journal of Perinatal and Neonatal Nursing = J. Perinat. Neonatal Nurs.
+Journal of Perinatology = J. Perinatol.
+Journal of Periodontal Research = J. Periodontal Res.
+Journal of Periodontal Research. Supplement = J. Periodontal Res. Suppl.
+Journal of Periodontology = J. Periodontol.
+Journal of Personality = J. Pers.
+Journal of Personality Assessment = J. Pers. Assess.
+Journal of Personality Disorders = J. Personal. Disord.
+Journal of Personality and Social Psychology = J. Pers. Soc. Psychol.
+Journal of Petroleum Science & Engineering=J. Pet. Sci. Eng.;JPSEE6;8/YR
+Journal of Petrology=J. Petrol.;JPTGAD;M
+Journal of Pharmaceutical Marketing and Management = J. Pharm. Mark. Manage.
+Journal of Pharmaceutical Science and Technology = J. Pharm. Sci. Technol.
+Journal of Pharmaceutical Sciences = J. Pharm. Sci.
+Journal of Pharmaceutical and Biomedical Analysis = J. Pharm. Biomed. Anal.
+Journal of Pharmacobio-Dynamics = J. Pharmacobiodyn.
+Journal of Pharmacokinetics and Biopharmaceutics = J. Pharmacokinet. Biopharm.
+Journal of Pharmacokinetics and Pharmacodynamics = J. Pharmacokinet. Pharmacodyn.
+Journal of Pharmacological Methods = J. Pharmacol. Methods
+Journal of Pharmacological Sciences = J. Pharmacol. Sci.
+Journal of Pharmacological Sciences (Tokyo, Japan)=J. Pharmacol. Sci. (Tokyo, Jpn.);JPSTGJ;M
+Journal of Pharmacological and Toxicological Methods = J. Pharmacol. Toxicol. Methods
+Journal of Pharmacology and Experimental Therapeutics = J. Pharmacol. Exp. Ther.
+Journal of Pharmacy Technology = J. Pharm. Technol.
+Journal of Pharmacy and Pharmaceutical Sciences = J. Pharm. Pharm. Sci.
+Journal of Pharmacy and Pharmacology = J. Pharm. Pharmacol.
+Journal of Phase Equilibria and Diffusion=J. Phase Equilib. Diffus.;JPEDAV;BM
+Journal of Philosophy, Science and Law = J. Philos. Sci. Law
+Journal of Photochemistry and Photobiology, A: Chemistry=J. Photochem. Photobiol., A;JPPCEJ;30/YR
+Journal of Photochemistry and Photobiology, B: Biology=J. Photochem. Photobiol., B;JPPBEG;M
+Journal of Photochemistry and Photobiology, C: Photochemistry Reviews=J. Photochem. Photobiol., C;JPPCAF;4/YR
+Journal of Photochemistry and Photobiology. B, Biology = J. Photochem. Photobiol. B
+Journal of Photopolymer Science and Technology=J. Photopolym. Sci. Technol.;JSTEEW;5/YR
+Journal of Physical Chemistry = J. Phys. Chem.
+Journal of Physical Chemistry A=J. Phys. Chem. A;JPCAFH;W
+Journal of Physical Chemistry B=J. Phys. Chem. B;JPCBFK;W
+Journal of Physical Oceanography = J. Phys. Oceanogr.
+Journal of Physical Organic Chemistry=J. Phys. Org. Chem.;JPOCEE;M
+Journal of Physical and Chemical Reference Data=J. Phys. Chem. Ref. Data;JPCRBU;Q
+Journal of Physics B: Atomic, Molecular and Optical Physics=J. Phys. B: At., Mol. Opt. Phys.;JPAPEH;SM
+Journal of Physics D: Applied Physics=J. Phys. D: Appl. Phys.;JPAPBE;SM
+Journal of Physics G: Nuclear and Particle Physics=J. Phys. G: Nucl. Part. Phys.;JPGPED;M
+Journal of Physics and Chemistry of Solids=J. Phys. Chem. Solids;JPCSAW;M
+Journal of Physics. E, Scientific Instruments = J. Phys. [E]
+Journal of Physics: Condensed Matter=J. Phys.: Condens. Matter;JCOMEL;50/YR
+Journal of Physiological Anthropology = J. Physiol. Anthropol.
+Journal of Physiological Anthropology and Applied Human Science = J. Physiol. Anthropol. Appl. Human Sci.
+Journal of Physiological Sciences = J. Physiol. Sci.
+Journal of Physiology = J. Physiol. (Lond.)
+Journal of Physiology (Oxford, United Kingdom)=J. Physiol. (Oxford, U. K.);JPHYA7;SM
+Journal of Physiology and Biochemistry = J. Physiol. Biochem.
+Journal of Physiology and Pharmacology = J. Physiol. Pharmacol.
+Journal of Physiology, Paris = J. Physiol. Paris
+Journal of Pierre Fauchard Academy = J. Pierre Fauchard Acad.
+Journal of Pineal Research = J. Pineal Res.
+Journal of Planar Chromatography--Modern TLC=J. Planar Chromatogr.--Mod. TLC;JPCTE5;BM
+Journal of Plankton Research = J. Plankton Res.
+Journal of Plant Growth Regulation=J. Plant Growth Regul.;JPGRDI;Q
+Journal of Plant Nutrition=J. Plant Nutr.;JPNUDS;M
+Journal of Plant Nutrition and Soil Science=J. Plant Nutr. Soil Sci.;JNSSFZ;BM
+Journal of Plant Physiology=J. Plant Physiol.;JPPHEY;M
+Journal of Plastic and Reconstructive Surgical Nursing = J. Plast. Reconstr. Surg. Nurs.
+Journal of Plastic, Reconstructive and Aesthetic Surgery = J. Plast. Reconstr. Aesthet. Surg.
+Journal of Policy Analysis and Management = J. Policy Anal. Manage.
+Journal of Polymer Materials=J. Polym. Mater.;JOPME8;Q
+Journal of Polymer Research=J. Polym. Res.;JPOREP;Q
+Journal of Polymer Science, Part A: Polymer Chemistry=J. Polym. Sci., Part A: Polym. Chem.;JPACEC;SM
+Journal of Polymer Science, Part B: Polymer Physics=J. Polym. Sci., Part B: Polym. Phys.;JPBPEM;SM
+Journal of Polymer Science. Part A, General Papers = J. Polym. Sci. A
+Journal of Polymer Science. Part A-1, Polymer Chemistry = J. Polym. Sci. [A1]
+Journal of Polymer Science. Part B, Polymer Letters = J. Polym. Sci. [B]
+Journal of Polymers and the Environment=J. Polym. Environ.;JPENFW;Q
+Journal of Porphyrins and Phthalocyanines=J. Porphyrins Phthalocyanines;JPPHFZ;M
+Journal of Post Anesthesia Nursing = J. Post Anesth. Nurs.
+Journal of Postgraduate Medicine = J. Postgrad. Med.
+Journal of Power Sources=J. Power Sources;JPSODZ;24/YR
+Journal of Practical Nursing = J. Pract. Nurs.
+Journal of Preventive Dentistry = J. Prev. Dent.
+Journal of Preventive Medicine and Public Health = J. Prev. Med. Pub. Health
+Journal of Process Control=J. Process Control;JPCOEO;8/YR
+Journal of Professional Nursing = J. Prof. Nurs.
+Journal of Professional Services Marketing = J. Prof. Serv. Mark.
+Journal of Projective Techniques and Personality Assessment = J. Proj. Tech. Pers. Assess.
+Journal of Prosthetic Dentistry = J. Prosthet. Dent.
+Journal of Prosthodontics = J. Prosthodont.
+Journal of Protein Chemistry = J. Protein Chem.
+Journal of Proteome Research = J. Proteome Res.
+Journal of Protozoology = J. Protozool.
+Journal of Psychedelic Drugs = J. Psychedelic Drugs
+Journal of Psychiatric Nursing and Mental Health Services = J. Psychiatr. Nurs.
+Journal of Psychiatric Research = J. Psychiatr. Res.
+Journal of Psychiatric and Mental Health Nursing = J. Psychiatr. Ment. Health Nurs.
+Journal of Psychiatry and Neuroscience = J. Psychiatry Neurosci.
+Journal of Psychoactive Drugs = J. Psychoactive Drugs
+Journal of Psycholinguistic Research = J. Psycholinguist. Res.
+Journal of Psychology = J. Psychol.
+Journal of Psychopharmacology = J. Psychopharmacol. (Oxf.)
+Journal of Psychosocial Nursing and Mental Health Services = J. Psychosoc. Nurs. Ment. Health Serv.
+Journal of Psychosomatic Obstetrics and Gynaecology = J. Psychosom. Obstet. Gynaecol.
+Journal of Psychosomatic Research = J. Psychosom. Res.
+Journal of Psychotherapy Practice and Research = J. Psychother. Pract. Res.
+Journal of Public Health = J. Public Health
+Journal of Public Health Dentistry = J. Public Health Dent.
+Journal of Public Health Management and Practice = J. Public Health Manag. Pract.
+Journal of Public Health Medicine = J. Public Health Med.
+Journal of Public Health Policy = J. Public Health Policy
+Journal of Pulp and Paper Science=J. Pulp Pap. Sci.;JPUSDN;Q
+Journal of Quality Assurance = J. Qual. Assur.
+Journal of Quality in Clinical Practice = J. Qual. Clin. Pract.
+Journal of Quantitative Spectroscopy & Radiative Transfer=J. Quant. Spectrosc. Radiat. Transfer;JQSRAE;28/YR
+Journal of Radiation Research = J. Radiat. Res. (Tokyo)
+Journal of Radioanalytical and Nuclear Chemistry=J. Radioanal. Nucl. Chem.;JRNCDM;M
+Journal of Radiological Protection = J. Radiol. Prot.
+Journal of Raman Spectroscopy=J. Raman Spectrosc.;JRSPAF;M
+Journal of Receptor Research = J. Recept. Res.
+Journal of Receptor and Signal Transduction Research = J. Recept. Signal Transduct. Res.
+Journal of Receptors and Signal Transduction=J. Recept. Signal Transduction;JRSTCT;Q
+Journal of Reconstructive Microsurgery = J. Reconstr. Microsurg.
+Journal of Refractive Surgery = J. Refract. Surg.
+Journal of Refractive and Corneal Surgery = J. Refract. Corneal Surg.
+Journal of Rehabilitation = J. Rehabil.
+Journal of Rehabilitation Medicine = J. Rehabil. Med.
+Journal of Rehabilitation R and D = J. Rehabil. R D
+Journal of Rehabilitation Research and Development = J. Rehabil. Res. Dev.
+Journal of Rehabilitation Research and Development. Clinical Supplement = J. Rehabil. Res. Dev. Clin. Suppl.
+Journal of Reinforced Plastics and Composites=J. Reinf. Plast. Compos.;JRPCDW;18/YR
+Journal of Renal Nutrition = J. Ren. Nutr.
+Journal of Reproduction and Fertility = J. Reprod. Fertil.
+Journal of Reproduction and Fertility. Abstract Series = J. Reprod. Fertil. Abstr. Ser.
+Journal of Reproduction and Fertility. Supplement = J. Reprod. Fertil. Suppl.
+Journal of Reproductive Immunology = J. Reprod. Immunol.
+Journal of Reproductive Medicine = J. Reprod. Med.
+Journal of Rheology (New York, NY, United States)=J. Rheol. (N. Y., NY, U. S.);JORHD2;BM
+Journal of Rheumatology = J. Rheumatol.
+Journal of Rheumatology. Supplement = J. Rheumatol. Suppl.
+Journal of Risk and Insurance = J. Risk Insur.
+Journal of Rural Health = J. Rural Health
+Journal of School Health = J. Sch. Health
+Journal of School Nursing = J. Sch. Nurs.
+Journal of Science and Medicine in Sport = J. Sci. Med. Sport
+Journal of Scientific Instruments = J. Sci. Instrum.
+Journal of Separation Science = J. Sep. Sci.
+Journal of Sex Research = J. Sex Res.
+Journal of Sex and Marital Therapy = J. Sex Marital Ther.
+Journal of Sexual Medicine = J. Sex. Med.
+Journal of Shoulder and Elbow Surgery = J. Shoulder Elbow Surg.
+Journal of Sleep Research = J. Sleep Res.
+Journal of Small Animal Practice = J. Small Anim. Pract.
+Journal of Smooth Muscle Research = J. Smooth Muscle Res.
+Journal of Social Policy = J. Soc. Policy
+Journal of Social Psychology = J. Soc. Psychol.
+Journal of Sol-Gel Science and Technology=J. Sol-Gel Sci. Technol.;JSGTEC;12/YR
+Journal of Solid State Chemistry=J. Solid State Chem.;JSSCBI;12/YR
+Journal of Solid State Electrochemistry=J. Solid State Electrochem.;JSSEFS;12/YR
+Journal of Solution Chemistry=J. Solution Chem.;JSLCAG;M
+Journal of Speech and Hearing Disorders = J. Speech Hear. Disord.
+Journal of Speech and Hearing Research = J. Speech Hear. Res.
+Journal of Speech, Language, and Hearing Research = J. Speech Lang. Hear. Res.
+Journal of Spinal Cord Medicine = J. Spinal Cord Med.
+Journal of Spinal Disorders = J. Spinal Disord.
+Journal of Spinal Disorders and Techniques = J. Spinal Disord. Tech.
+Journal of Sports Medicine = J. Sports Med.
+Journal of Sports Medicine and Physical Fitness = J. Sports Med. Phys. Fitness
+Journal of Sports Sciences = J. Sports Sci.
+Journal of State Government = J. State Gov.
+Journal of Sterile Services Management = J. Sterile Serv. Manage.
+Journal of Steroid Biochemistry = J. Steroid Biochem.
+Journal of Steroid Biochemistry and Molecular Biology = J. Steroid Biochem. Mol. Biol.
+Journal of Stone Disease = J. Stone Dis.
+Journal of Structural Biology = J. Struct. Biol.
+Journal of Structural Chemistry=J. Struct. Chem.;JSTCAM;BM
+Journal of Structural and Functional Genomics=J. Struct. Funct. Genomics;JSFGAW;Q
+Journal of Studies on Alcohol = J. Stud. Alcohol
+Journal of Studies on Alcohol. Supplement = J. Stud. Alcohol. Suppl.
+Journal of Submicroscopic Cytology = J. Submicrosc. Cytol.
+Journal of Submicroscopic Cytology and Pathology = J. Submicrosc. Cytol. Pathol.
+Journal of Substance Abuse = J. Subst. Abuse
+Journal of Substance Abuse Treatment = J. Subst. Abuse Treat.
+Journal of Sulfur Chemistry=J. Sulfur Chem.;JSCOFC;BM
+Journal of Superconductivity=J. Supercond.;JOUSEH;BM
+Journal of Supercritical Fluids=J. Supercrit. Fluids;JSFLEH;9/yr
+Journal of Supportive Oncology = J. Support. Oncol.
+Journal of Supramolecular Structure = J. Supramol. Struct.
+Journal of Supramolecular Structure and Cellular Biochemistry = J. Supramol. Struct. Cell. Biochem.
+Journal of Supramolecular Structure and Cellular Biochemistry. Supplement = J. Supramol. Struct. Cell. Biochem. Suppl.
+Journal of Supramolecular Structure. Supplement = J. Supramol. Struct. Suppl.
+Journal of Surfactants and Detergents=J. Surfactants Deterg.;JSDEFL;Q
+Journal of Surgical Oncology = J. Surg. Oncol.
+Journal of Surgical Oncology. Supplement = J. Surg. Oncol. Suppl.
+Journal of Surgical Orthopaedic Advances = J. Surg. Orthop. Adv.
+Journal of Surgical Research = J. Surg. Res.
+Journal of Telemedicine and Telecare = J. Telemed. Telecare
+Journal of The American Statistical Association = J. Am. Stat. Assoc.
+Journal of Theoretical & Computational Chemistry=J. Theor. Comput. Chem.;JTCCAC;Q
+Journal of Theoretical Biology = J. Theor. Biol.
+Journal of Thermal Analysis and Calorimetry=J. Therm. Anal. Calorim.;JTACF7;M
+Journal of Thermophysics and Heat Transfer=J. Thermophys. Heat Transfer;JTHTEO;Q
+Journal of Thoracic Imaging = J. Thorac. Imaging
+Journal of Thoracic and Cardiovascular Surgery = J. Thorac. Cardiovasc. Surg.
+Journal of Thrombosis and Haemostasis = J. Thromb. Haemost.
+Journal of Thrombosis and Thrombolysis = J. Thromb. Thrombolysis
+Journal of Tongji Medical University = J. Tongji Med. Univ.
+Journal of Toxicological Sciences = J. Toxicol. Sci.
+Journal of Toxicology and Environmental Health = J. Toxicol. Environ. Health
+Journal of Toxicology and Environmental Health, Part A=J. Toxicol. Environ. Health, Part A;JTEHF8;SM
+Journal of Toxicology and Environmental Health, Part B: Critical Reviews=J. Toxicol. Environ. Health, Part B;JTECFR;BM
+Journal of Toxicology and Environmental Health. Part A = J. Toxicol. Environ. Health A
+Journal of Toxicology and Environmental Health. Part B, Critical Reviews = J. Toxicol. Environ. Health B Crit. Rev.
+Journal of Toxicology and Environmental Health. Supplement = J. Toxicol. Environ. Health. Suppl.
+Journal of Toxicology. Clinical Toxicology = J. Toxicol. Clin. Toxicol.
+Journal of Trace Elements and Electrolytes in Health and Disease = J. Trace Elem. Electrolytes Health Dis.
+Journal of Trace Elements in Medicine and Biology = J. Trace Elem. Med. Biol.
+Journal of Traditional Chinese Medicine = J. Tradit. Chin. Med.
+Journal of Transcultural Nursing = J. Transcult. Nurs.
+Journal of Transplant Coordination = J. Transpl. Coord.
+Journal of Trauma = J. Trauma
+Journal of Trauma Nursing = J. Trauma Nurs.
+Journal of Traumatic Stress = J. Trauma. Stress
+Journal of Travel Medicine = J. Travel Med.
+Journal of Tropical Medicine and Hygiene = J. Trop. Med. Hyg.
+Journal of Tropical Pediatrics = J. Trop. Pediatr.
+Journal of Tropical Pediatrics and African Child Health = J. Trop. Pediatr. Afr. Child Health
+Journal of Tropical Pediatrics and Environmental Child Health = J. Trop. Pediatr. Environ. Child Health
+Journal of UOEH, University of Occupational and Environmental Health = J. UOEH
+Journal of Ultrasound in Medicine = J. Ultrasound Med.
+Journal of Ultrastructure Research = J. Ultrastruct. Res.
+Journal of Ultrastructure and Molecular Structure Research = J. Ultrastruct. Mol. Struct. Res.
+Journal of Urban Health = J. Urban Health
+Journal of Urology = J. Urol.
+Journal of Vacuum Science & Technology, A: Vacuum, Surfaces, and Films=J. Vac. Sci. Technol., A;JVTAD6;BM
+Journal of Vascular Nursing = J. Vasc. Nurs.
+Journal of Vascular Research = J. Vasc. Res.
+Journal of Vascular Surgery = J. Vasc. Surg.
+Journal of Vascular and Interventional Radiology = J. Vasc. Interv. Radiol.
+Journal of Vector Borne Diseases = J. Vector Borne Dis.
+Journal of Vector Ecology = J. Vector Ecol.
+Journal of Vestibular Research = J. Vestib. Res.
+Journal of Veterinary Dentistry = J. Vet. Dent.
+Journal of Veterinary Diagnostic Investigation = J. Vet. Diagn. Invest.
+Journal of Veterinary Internal Medicine = J. Vet. Intern. Med.
+Journal of Veterinary Medical Science = J. Vet. Med. Sci.
+Journal of Veterinary Medicine. A, Physiology, Pathology, Clinical Medicine = J. Vet. Med. A Physiol. Pathol. Clin. Med.
+Journal of Veterinary Medicine. B, Infectious Diseases and Veterinary Public Health = J. Vet. Med. B Infect. Dis. Vet. Public Health
+Journal of Veterinary Pharmacology and Therapeutics = J. Vet. Pharmacol. Ther.
+Journal of Veterinary Science = J. Vet. Sci.
+Journal of Vinyl & Additive Technology=J. Vinyl Addit. Technol.;JVATF4;Q
+Journal of Viral Hepatitis = J. Viral Hepat.
+Journal of Virological Methods = J. Virol. Methods
+Journal of Virology = J. Virol.
+Journal of Vision = J. Vis.
+Journal of Visual Communication in Medicine = J. Vis. Commun. Med.
+Journal of Vitaminology = J. Vitaminol. (Kyoto)
+Journal of Vocational Behavior = J. Vocat. Behav.
+Journal of Voice = J. Voice
+Journal of Volcanology and Geothermal Research=J. Volcanol. Geotherm. Res.;JVGRDQ;40/YR
+Journal of Volunteer Administration = J. Volunt. Adm.
+Journal of Water and Health = J. Water Health
+Journal of Wildlife Diseases = J. Wildl. Dis.
+Journal of Women and Aging = J. Women Aging
+Journal of Women's Health = J. Womens Health
+Journal of Women's Health and Gender-Based Medicine = J. Womens Health Gend. Based Med.
+Journal of Wood Chemistry and Technology=J. Wood Chem. Technol.;JWCTDJ;4/YR
+Journal of Wound Care = J. Wound Care
+Journal of Wound, Ostomy and Continence Nursing = J. Wound. Ostomy Continence Nurs.
+Journal of Zhejiang University. Science. B = J. Zhejiang Univ. Sci. B
+Journal of Zoology = J. Zool.
+Journal of the Acoustical Society of America = J. Acoust. Soc. Am.
+Journal of the Aeronautical Sciences = J. Aeronaut. Sci.
+Journal of the Air Pollution Control Association = J. Air Pollut. Control Assoc.
+Journal of the Air and Waste Management Association = J. Air Waste Manag. Assoc.
+Journal of the All India Dental Association = J. All India Dent. Assoc.
+Journal of the All-India Ophthalmological Society = J. All. India Ophthalmol. Soc.
+Journal of the American Academy of Audiology = J. Am. Acad. Audiol.
+Journal of the American Academy of Child Psychiatry = J. Am. Acad. Child Psychiatry
+Journal of the American Academy of Child and Adolescent Psychiatry = J. Am. Acad. Child Adolesc. Psychiatry
+Journal of the American Academy of Dermatology = J. Am. Acad. Dermatol.
+Journal of the American Academy of Gold Foil Operators = J. Am. Acad. Gold Foil Oper.
+Journal of the American Academy of Nurse Practitioners = J. Am. Acad. Nurse Pract.
+Journal of the American Academy of Orthopaedic Surgeons = J. Am. Acad. Orthop. Surg.
+Journal of the American Academy of Psychiatry and the Law = J. Am. Acad. Psychiatry Law
+Journal of the American Academy of Psychoanalysis = J. Am. Acad. Psychoanal.
+Journal of the American Academy of Psychoanalysis and Dynamic Psychiatry = J. Am. Acad. Psychoanal. Dyn. Psychiatry
+Journal of the American Animal Hospital Association = J. Am. Anim. Hosp. Assoc.
+Journal of the American Association for Laboratory Animal Science = J. Am. Assoc. Lab. Anim. Sci.
+Journal of the American Association of Gynecologic Laparoscopists = J. Am. Assoc. Gynecol. Laparosc.
+Journal of the American Association of Nephrology Nurses and Technicians = J. Am. Assoc. Nephrol. Nurses Tech.
+Journal of the American Association of Nurse Anesthetists = J. Am. Assoc. Nurse Anesth.
+Journal of the American Audiology Society = J. Am. Audiol. Soc.
+Journal of the American Auditory Society = J. Am. Aud. Soc.
+Journal of the American Board of Family Medicine = J. Am. Board Fam. Med.
+Journal of the American Board of Family Practice = J. Am. Board Fam. Pract.
+Journal of the American Ceramic Society=J. Am. Ceram. Soc.;JACTAW;M
+Journal of the American Chemical Society = J. Am. Chem. Soc.
+Journal of the American College Health Association = J. Am. Coll. Health Assoc.
+Journal of the American College of Cardiology = J. Am. Coll. Cardiol.
+Journal of the American College of Dentists = J. Am. Coll. Dent.
+Journal of the American College of Nutrition = J. Am. Coll. Nutr.
+Journal of the American College of Surgeons = J. Am. Coll. Surg.
+Journal of the American Dental Association = J. Am. Dent. Assoc.
+Journal of the American Dental Association (Edizione Italiana) = J. Am. Dent. Assoc. (Ed. Ital.)
+Journal of the American Dental Hygienists Association = J. Am. Dent. Hyg. Assoc.
+Journal of the American Dental Society of Anesthesiology = J. Am. Dent. Soc. Anesthesiol.
+Journal of the American Dietetic Association = J. Am. Diet. Assoc.
+Journal of the American Geriatrics Society = J. Am. Geriatr. Soc.
+Journal of the American Institute of Homeopathy = J. Am. Inst. Homeopath.
+Journal of the American Institute of Planners = J. Am. Inst. Plann.
+Journal of the American Medical Informatics Association = J. Am. Med. Inform. Assoc.
+Journal of the American Medical Record Association = J. Am. Med. Rec. Assoc.
+Journal of the American Medical Womens Association = J. Am. Med. Wom. Assoc.
+Journal of the American Mosquito Control Association = J. Am. Mosq. Control Assoc.
+Journal of the American Mosquito Control Association. Supplement = J. Am. Mosq. Control Assoc. Suppl.
+Journal of the American Oil Chemists Society = J. Am. Oil Chem. Soc.
+Journal of the American Oil Chemists' Society=J. Am. Oil Chem. Soc.;JAOCA7;M
+Journal of the American Optometric Association = J. Am. Optom. Assoc.
+Journal of the American Osteopathic Association = J. Am. Osteopath. Assoc.
+Journal of the American Paraplegia Society = J. Am. Paraplegia Soc.
+Journal of the American Pharmaceutical Association = J. Am. Pharm. Assoc.
+Journal of the American Pharmaceutical Association (Washington, D.C.) = J. Am. Pharm. Assoc. (Wash.)
+Journal of the American Pharmacists Association = J. Am. Pharm. Assoc.
+Journal of the American Planning Association = J. Am. Plann. Assoc.
+Journal of the American Podiatric Medical Association = J. Am. Podiatr. Med. Assoc.
+Journal of the American Podiatry Association = J. Am. Podiatry Assoc.
+Journal of the American Psychoanalytic Association = J. Am. Psychoanal. Assoc.
+Journal of the American Society for Geriatric Dentistry = J. Am. Soc. Geriatr. Dent.
+Journal of the American Society for Information Science = J. Am. Soc. Inf. Sci.
+Journal of the American Society for Mass Spectrometry = J. Am. Soc. Mass Spectrom.
+Journal of the American Society for Preventive Dentistry = J. Am. Soc. Prev. Dent.
+Journal of the American Society of Brewing Chemists=J. Am. Soc. Brew. Chem.;JSBCD3;Q
+Journal of the American Society of Echocardiography = J. Am. Soc. Echocardiogr.
+Journal of the American Society of Nephrology = J. Am. Soc. Nephrol.
+Journal of the American Society of Psychosomatic Dentistry and Medicine = J. Am. Soc. Psychosom. Dent. Med.
+Journal of the American Venereal Disease Association = J. Am. Vener. Dis. Assoc.
+Journal of the American Veterinary Medical Association = J. Am. Vet. Med. Assoc.
+Journal of the Anatomical Society of India = J. Anat. Soc. India
+Journal of the Argentine Chemical Society=J. Argent. Chem. Soc.;JACSFY;2/YR
+Journal of the Arkansas Medical Society = J. Ark. Med. Soc.
+Journal of the Association for Academic Minority Physicians = J. Assoc. Acad. Minor. Phys.
+Journal of the Association for Physical and Mental Rehabilitation = J. Assoc. Phys. Ment. Rehabil.
+Journal of the Association for Research in Otolaryngology = J. Assoc. Res. Otolaryngol.
+Journal of the Association for the Care of Children in Hospitals = J. Assoc. Care Child. Hosp.
+Journal of the Association for the Care of Children's Health = J. Assoc. Care Child. Health
+Journal of the Association of Nurses in AIDS Care = J. Assoc. Nurses AIDS Care
+Journal of the Association of Pediatric Oncology Nurses = J. Assoc. Pediatr. Oncol. Nurses
+Journal of the Association of Physicians of India = J. Assoc. Physicians India
+Journal of the Atmospheric Sciences = J. Atmos. Sci.
+Journal of the Australian Institute of Surgical and Dental Technicians (Melbourne) = J. Aust. Inst. Surg. Dent. Tech.
+Journal of the Autonomic Nervous System = J. Auton. Nerv. Syst.
+Journal of the Baltimore College of Dental Surgery = J. Baltimore Coll. Dent. Surg.
+Journal of the Bergen County Dental Society = J. Bergen Cty. Dent. Soc.
+Journal of the Biological Photographic Association = J. Biol. Photogr. Assoc.
+Journal of the Brazilian Chemical Society=J. Braz. Chem. Soc.;JOCSET;BM
+Journal of the British Endodontic Society = J. Br. Endod. Soc.
+Journal of the California Dental Association = J. Calif. Dent. Assoc.
+Journal of the Canadian Association of Radiologists = J. Can. Assoc. Radiol.
+Journal of the Canadian Dental Association = J. Can. Dent. Assoc.
+Journal of the Canadian Dietetic Association = J. Can. Diet. Assoc.
+Journal of the Catholic Nurses Guild of England and Wales = J. Cathol. Nurses Guild Engl. Wales
+Journal of the Ceramic Society of Japan=J. Ceram. Soc. Jpn.;JCSJEW;M
+Journal of the Charles H. Tweed International Foundation = J. Charles H. Tweed Int. Found.
+Journal of the Chemical Society of Pakistan=J. Chem. Soc. Pak.;JCSPDF;Q
+Journal of the Chemical Society. Perkin Transactions 1 = J. Chem. Soc. [Perkin 1]
+Journal of the Chilean Chemical Society=J. Chil. Chem. Soc.;JCCSCB;Q
+Journal of the Chinese Chemical Society (Taipei, Taiwan)=J. Chin. Chem. Soc. (Taipei, Taiwan);JCCTAC;BM
+Journal of the Chinese Institute of Chemical Engineers=J. Chin. Inst. Chem. Eng.;JCICAP;BM
+Journal of the Chinese Medical Association = J. Chin. Med. Assoc.
+Journal of the College of General Practitioners = J. Coll. Gen. Pract.
+Journal of the College of Radiologists of Australasia = J. Coll. Radiol. Australas.
+Journal of the Colorado Dental Association = J. Colo. Dent. Assoc.
+Journal of the Dental Association of South Africa = J. Dent. Assoc. S. Afr.
+Journal of the Dental Association of Thailand = J. Dent. Assoc. Thai.
+Journal of the Dental Auxiliaries = J. Dent. Aux.
+Journal of the Dental Guidance Council on the Handicapped = J. Dent. Guid. Counc. Handicap.
+Journal of the Dental School, National University of Iran = J. Dent. Sch. Natl. Univ. Iran
+Journal of the Egyptian Medical Association = J. Egypt. Med. Assoc.
+Journal of the Egyptian Public Health Association = J. Egypt. Public Health Assoc.
+Journal of the Egyptian Society of Parasitology = J. Egypt. Soc. Parasitol.
+Journal of the Electrochemical Society=J. Electrochem. Soc.;JESOAN;M
+Journal of the Electrochemical Society of India=J. Electrochem. Soc. India;JESIA5;Q
+Journal of the Energy Institute=J. Energy Inst.;JEIOB8;4/YR
+Journal of the European Academy of Dermatology and Venereology = J. Eur. Acad. Dermatol. Venereol.
+Journal of the European Ceramic Society=J. Eur. Ceram. Soc.;JECSER;16/YR
+Journal of the Experimental Analysis of Behavior = J. Exp. Anal. Behav.
+Journal of the Florida Medical Association = J. Fla. Med. Assoc.
+Journal of the Florida State Dental Society = J. Fla. State Dent. Soc.
+Journal of the Formosan Medical Association = J. Formos. Med. Assoc.
+Journal of the Georgia Dental Association = J. Ga. Dent. Assoc.
+Journal of the Greater Houston Dental Society = J. Gt. Houst. Dent. Soc.
+Journal of the Hawaii Dental Association = J. Hawaii Dent. Assoc.
+Journal of the Hawaii State Dental Association = J. Hawaii State Dent. Assoc.
+Journal of the History of Dentistry = J. Hist. Dent.
+Journal of the History of Medicine and Allied Sciences = J. Hist. Med. Allied Sci.
+Journal of the History of the Behavioral Sciences = J. Hist. Behav. Sci.
+Journal of the Houston District Dental Society = J. Houston Dist. Dent. Soc.
+Journal of the Indian Academy of Dentistry = J. Indian Acad. Dent.
+Journal of the Indian Chemical Society=J. Indian Chem. Soc.;JICSAH;M
+Journal of the Indian Dental Association = J. Indian Dent. Assoc.
+Journal of the Indian Medical Association = J. Indian Med. Assoc.
+Journal of the Indian Medical Profession = J. Indian Med. Prof.
+Journal of the Indian Orthodontic Society = J. Indian Orthod. Soc.
+Journal of the Indian Society of Pedodontics and Preventive Dentistry = J. Indian Soc. Pedod. Prev. Dent.
+Journal of the Indiana Dental Association = J. Indiana Dent. Assoc.
+Journal of the Indiana State Dental Association = J. Indiana State Dent. Assoc.
+Journal of the Indiana State Medical Association = J. Indiana State Med. Assoc.
+Journal of the Indianapolis District Dental Society = J. Indianap. Dist. Dent. Soc.
+Journal of the Institute of Hospital Engineering = J. Inst. Hosp. Eng.
+Journal of the Institution of Chemists (India)=J. Inst. Chem. (India);JOICA7;BM
+Journal of the International Association of Dentistry for Children = J. Int. Assoc. Dent. Child.
+Journal of the International Association of Physicians in AIDS Care = J. Int. Assoc. Physicians AIDS Care
+Journal of the International College of Dentists, Japan Section = J. Int. Coll. Dent. (Jpn.)
+Journal of the International College of Surgeons = J. Int. Coll. Surg.
+Journal of the International Federation of Clinical Chemistry = J. Int. Fed. Clin. Chem.
+Journal of the International Neuropsychological Society = J. Int. Neuropsychol. Soc.
+Journal of the Iowa Medical Society = J. Iowa Med. Soc.
+Journal of the Iran Dental Association = J. Iran Dent. Assoc.
+Journal of the Irish Dental Association = J. Ir. Dent. Assoc.
+Journal of the Irish Medical Association = J. Ir. Med. Assoc.
+Journal of the Japan Petroleum Institute=J. Jpn. Pet. Inst.;JJPIAP;BM
+Journal of the Japanese Obstetrical and Gynecological Society = J. Jpn. Obstet. Gynecol. Soc.
+Journal of the Kansas Dental Association = J. Kans. Dent. Assoc.
+Journal of the Kansas Medical Society = J. Kans. Med. Soc.
+Journal of the Kansas State Dental Association = J. Kans. State Dent. Assoc.
+Journal of the Kentucky Dental Association = J. Ky. Dent. Assoc.
+Journal of the Kentucky Medical Association = J. Ky. Med. Assoc.
+Journal of the Korean Ceramic Society=J. Korean Ceram. Soc.;JKCSBW;M
+Journal of the Korean Chemical Society=J. Korean Chem. Soc.;JKCSEZ;BM
+Journal of the Korean Research Society for Dental Hypnosis = J. Korean Res. Soc. Dent. Hypn.
+Journal of the Louisiana Dental Association = J. La. Dent. Assoc.
+Journal of the Louisiana State Medical Society = J. La. State Med. Soc.
+Journal of the Macomb Dental Society = J. Macomb Dent. Soc.
+Journal of the Maine Medical Association = J. Maine Med. Assoc.
+Journal of the Marine Biology Association of the United Kingdom = J. mar. biol. Ass. U.K.
+Journal of the Marine Technology Society = J. Mar. Technol. Soc.
+Journal of the Maryland State Dental Association = J. Md. State Dent. Assoc.
+Journal of the Massachusetts Dental Society = J. Mass. Dent. Soc.
+Journal of the Medical Association of Georgia = J. Med. Assoc. Ga.
+Journal of the Medical Association of Thailand = J. Med. Assoc. Thai.
+Journal of the Medical Association of the State of Alabama = J. Med. Assoc. State Ala.
+Journal of the Medical Library Association = J. Med. Libr. Assoc.
+Journal of the Medical Society of New Jersey = J. Med. Soc. N. J.
+Journal of the Mercer Dental Society = J. Mercer Dent. Soc.
+Journal of the Meteorological Society of Japan = J. Meteor. Soc. Japan
+Journal of the Michigan State Dental Association = J. Mich. State Dent. Assoc.
+Journal of the Mississippi State Medical Association = J. Miss. State Med. Assoc.
+Journal of the Missouri Dental Association = J. Mo. Dent. Assoc.
+Journal of the Mount Sinai Hospital, New York = J. Mt. Sinai Hosp. N. Y.
+Journal of the National Analgesia Society = J. Natl. Analg. Soc.
+Journal of the National Association of Seventh-Day Adventist Dentists = J. Natl. Assoc. Seventh. Day Advent. Dent.
+Journal of the National Cancer Institute = J. Natl. Cancer Inst.
+Journal of the National Cancer Institute. Monographs. = J. Natl. Cancer Inst. Monogr.
+Journal of the National Comprehensive Cancer Network = J. Natl. Compr. Canc. Netw.
+Journal of the National Medical Association = J. Natl. Med. Assoc.
+Journal of the Nebraska Dental Association = J. Nebr. Dent. Assoc.
+Journal of the Neurological Sciences = J. Neurol. Sci.
+Journal of the New Jersey Dental Association = J. N. J. Dent. Assoc.
+Journal of the New Jersey Dental Hygienists Association = J. N. J. Dent. Hyg. Assoc.
+Journal of the New Jersey State Dental Society = J. N. J. State Dent. Soc.
+Journal of the New York State Nurses Association = J. N. Y. State Nurses Assoc.
+Journal of the New York State School Nurse Teachers Association = J. N. Y. State Sch. Nurse Teach. Assoc.
+Journal of the Nigeria Association of Dental Students = J. Niger. Assoc. Dent. Stud.
+Journal of the North Carolina Dental Society = J. N. C. Dent. Soc.
+Journal of the Oceanographical Society of Japan = J. Oceanogr. Soc. Japan
+Journal of the Ontario Dental Association = J. Ont. Dent. Assoc.
+Journal of the Operating Room Research Institute = J. Oper. Room Res. Inst.
+Journal of the Operational Research Society = J. Oper. Res. Soc.
+Journal of the Optical Society of America = J. Opt. Soc. Am.
+Journal of the Optical Society of America A, Optics and Image Science = J. Opt. Soc. Am. A
+Journal of the Optical Society of America A, Optics, Image Science, and Vision = J. Opt. Soc. Am. A Opt. Image Sci. Vis.
+Journal of the Optical Society of America B: Optical Physics=J. Opt. Soc. Am. B;JOBPDE;M
+Journal of the Oregon Dental Association = J. Oreg. Dent. Assoc.
+Journal of the Osaka University Dental School = J. Osaka Univ. Dent. Sch.
+Journal of the Oslo City Hospitals = J. Oslo City Hosp.
+Journal of the Oto-Laryngological Society of Australia = J. Otolaryngol. Soc. Aust.
+Journal of the Parenteral Drug Association = J. Parenter. Drug Assoc.
+Journal of the Peripheral Nervous System = J. Peripher. Nerv. Syst.
+Journal of the Philadelphia County Dental Society = J. Phila. Cty. Dent. Soc.
+Journal of the Philippine Dental Association = J. Philipp. Dent. Assoc.
+Journal of the Philippine Federation of Private Medical Practitioners = J. Philipp. Fed. Priv. Med. Pract.
+Journal of the Philippine Medical Association = J. Philipp. Med. Assoc.
+Journal of the Physical Society of Japan=J. Phys. Soc. Jpn.;JUPSAU;M
+Journal of the Renin-Angiotensin-Aldosterone System = J. Renin Angiotensin Aldosterone Syst.
+Journal of the Reticuloendothelial Society = J. Reticuloendothel. Soc.
+Journal of the Rhode Island State Dental Society = J. R. I. State Dent. Soc.
+Journal of the Rocky Mountain Analgesia Society = J. Rocky Mt. Analg. Soc.
+Journal of the Royal Army Medical Corps = J. R. Army Med. Corps
+Journal of the Royal College of General Practitioners = J. R. Coll. Gen. Pract.
+Journal of the Royal College of General Practitioners. Occasional Paper = J. R. Coll. Gen. Pract. Occas. Pap.
+Journal of the Royal College of Physicians of London = J. R. Coll. Physicians Lond.
+Journal of the Royal College of Surgeons of Edinburgh = J. R. Coll. Surg. Edinb.
+Journal of the Royal Microscopical Society = J. R. Microsc. Soc.
+Journal of the Royal Naval Medical Service = J. R. Nav. Med. Serv.
+Journal of the Royal Society of Health = J. R. Soc. Health
+Journal of the Royal Society of Medicine = J. R. Soc. Med.
+Journal of the Royal Society, Interface = J. R. Soc. Interface
+Journal of the San Antonio District Dental Society = J. San Antonio Dent. Soc.
+Journal of the Science of Food and Agriculture = J. Sci. Food Agric.
+Journal of the Seattle District Dental Society = J. Seattle Dist. Dent. Soc.
+Journal of the Serbian Chemical Society=J. Serb. Chem. Soc.;JSCSEN;M
+Journal of the Singapore Paediatric Society = J. Singapore Paediatr. Soc.
+Journal of the Society for Gynecologic Investigation = J. Soc. Gynecol. Investig.
+Journal of the Society for Health Systems = J. Soc. Health Syst.
+Journal of the Society for Integrative Oncology = J. Soc. Integr. Oncol.
+Journal of the Society of Inorganic Materials, Japan=J. Soc. Inorg. Mater., Jpn.;JSIJFR;BM
+Journal of the Society of Laparoendoscopic Surgeons = J. Soc. Laparoendosc. Surg.
+Journal of the Society of Occupational Medicine = J. Soc. Occup. Med.
+Journal of the Society of Pediatric Nurses = J. Soc. Pediatr. Nurs.
+Journal of the South African Speech and Hearing Association = J. S. Afr. Speech Hear. Assoc.
+Journal of the South African Veterinary Association = J. S. Afr. Vet. Assoc.
+Journal of the South African Veterinary Medical Association = J. S. Afr. Vet. Med. Assoc.
+Journal of the Southern California Dental Hygienists Association = J. South. Calif. State. Dent. Hyg. Assoc.
+Journal of the Southern Orthopaedic Association = J. South. Orthop. Assoc.
+Journal of the Tennessee Dental Association = J. Tenn. Dent. Assoc.
+Journal of the Tennessee Medical Association = J. Tenn. Med. Assoc.
+Journal of the Texas Dental Hygienists Association = J. Texas Dent. Hyg. Assoc.
+Journal of the West Australian Nurses = J. West Aust. Nurses
+Journal of the Western Society of Periodontology / Periodontal Abstracts = J. West. Soc. Periodontal Periodontal Abstr.
+Journal of the Wisconsin Dental Association = J. Wis. Dent. Assoc.
+Journal of the Wisconsin State Dental Society = J. Wis. State Dent. Soc.
+Journal of the World Aquaculture Society = J. World Aquacult. Soc.
+Journal, Academy of General Dentistry = J. Acad. Gen. Dent.
+Journal, Academy of Hospital Administration = J. Acad. Hosp. Adm.
+Journal, Alabama Dental Association = J. Ala. Dent. Assoc.
+Journal, American Academy of Gnathologic Orthopedics = J. Am. Acad. Gnathol. Orthop.
+Journal, American Association for Medical Transcription = J. Am. Assoc. Med. Transcr.
+Journal, American Health Care Association = J. Am. Health Care Assoc.
+Journal, American Intra-Ocular Implant Society = J. Am. Intraocul. Implant Soc.
+Journal, American Medical Record Association = J. Am. Med. Rec. Assoc.
+Journal, American Society for the Study of Orthodontics = J. Am. Soc. Study Orthod.
+Journal, Anglo-Continental Dental Society = J. Anglocont. Dent. Soc.
+Journal, Association for Healthcare Philanthropy = J. Assoc. Healthc. Philanthr.
+Journal, Association for Hospital Medical Education = J. Assoc. Hosp. Med. Educ.
+Journal, Association of Official Analytical Chemists = J. Assoc. Off. Anal. Chem.
+Journal, Australian College of Midwives = J. Aust. Coll. Midwives
+Journal, California Dental Association = J. Calif. Dent. Assoc.
+Journal, Canadian Dental Association = J. Can. Dent. Assoc.
+Journal, Connecticut State Dental Association = J. Conn. State Dent. Assoc.
+Journal, Contra Costa Dental Society = J. Contra Costa Dent. Soc.
+Journal, District of Columbia Dental Society = J. Dist. Columbia Dent. Soc.
+Journal, Forensic Science Society = J. Forensic Sci. Soc.
+Journal, Indiana Dental Association = J. Indiana Dent. Assoc.
+Journal, Institute of Sterile Services Management = J. Inst. Sterile Serv. Manage.
+Journal, Maine Dental Association = J. Maine Dent. Assoc.
+Journal, Mississippi Dental Association = J. Miss. Dent. Assoc.
+Journal, National Association for Hospital Development = J. Natl. Assoc. Hosp. Dev.
+Journal, National Association of Private Psychiatric Hospitals = J. Natl. Assoc. Priv. Psychiatr. Hosp.
+Journal, New Hampshire Dental Society = J. N. H. Dent. Soc.
+Journal, Oklahoma Dental Association = J. Okla. Dent. Assoc.
+Journal, Oklahoma State Dental Association = J. Okla. State Dent. Assoc.
+Journal, Oklahoma State Medical Association = J. Okla. State Med. Assoc.
+Journal, Seattle-King County Dental Society = J. Seattle. King Cty. Dent. Soc.
+Journal, South Carolina Medical Association = J. S. C. Med. Assoc.
+Journal, Southern California Dental Assistants Association = J. South. Calif. Dent. Assistants Assoc.
+Journal, Southern California Dental Association = J. South. Calif. Dent. Assoc.
+Journal, Southern California State Dental Association = J. South. Calif. State Dent. Assoc.
+Journal, Tennessee State Dental Association = J. Tenn. State Dent. Assoc.
+Journal, Water Pollution Control Federation = J. Water Pollut. Control Fed.
+Journal-Lancet = J. Lancet
+Journalen Sykepleien = J. Sykepleien
+Journalism Conference and Workshop = J. Conf. Workshop
+Journals of Gerontology. Series A, Biological Sciences and Medical Sciences = J. Gerontol. A. Biol. Sci. Med. Sci.
+Journals of Gerontology. Series B, Psychological Sciences and Social Sciences = J. Gerontol. B. Psychol. Sci. Soc. Sci.
+Journees Annuelles de Diabetologie de l'Hotel-Dieu = Journ. Annu. Diabetol. Hotel Dieu
+Jugoslavenska Ginekologija i Opstetricija = Jugosl. Ginekol. Opstet.
+Jugoslavenska Ginekologija i Perinatologija = Jugosl. Ginekol. Perinatol.
+Justus Liebigs Annalen der Chemie = Justus Liebigs Ann. Chem.
+K Reports = K Rep.
+KGK, Kautschuk Gummi Kunststoffe=KGK, Kautsch. Gummi Kunstst.;KKGKB5;10/YR
+KY Reports = KY Rep.
+Kagaku Kogaku=Kagaku Kogaku;KKGKA4;M
+Kagaku Kogaku Ronbunshu=Kagaku Kogaku Ronbunshu;KKRBAW;BM
+Kaibogaku Zasshi (Journal of Anatomy) = Kaibogaku Zasshi
+Kaku Igaku (Japanese Journal of Nuclear Medicine) = Kaku Igaku
+Kanagawa Shigaku (Journal of the Kanagawa Odontological Society) = Kanagawa Shigaku
+Kango = Kango
+Kango Gijutsu (Japanese Journal of Nursing Art) = Kango Gijutsu
+Kango Kenkyu (Japanese Journal of Nursing Research) = Kango Kenkyu
+Kango Kyoiku (Japanese Journal of Nurses' Education) = Kango Kyoiku
+Kango Kyoshitsu (Japanese Journal of the Nursing Class) = Kango Kyoshitsu
+Kango Tenbo (Japanese Journal of Nursing Science) = Kango Tenbo
+Kangogaku Zasshi (Japanese Journal of Nursing) = Kangogaku Zasshi
+Kanho Hakhoe Chi (Journal of Nurses' Academic Society) = Kanho Hakhoe Chi
+Kansas Medicine = Kans. Med.
+Kansas Nurse = Kans. Nurse
+Kansenshogaku Zasshi (Journal of the Japanese Association for Infectious Diseases) = Kansenshogaku Zasshi
+Kaohsiung Journal of Medical Sciences = Kaohsiung J. Med. Sci.
+Kardiologia Polska = Kardiol. Pol.
+Kardiologiia = Kardiologiia
+Kassenzahnarzt; Colloquium Med Dent = Kassenzahnarzt Colloq. Med. Dent.
+Kathmandu University Medical Journal = Kathmandu Univ. Med. J.
+Katilolehti (Tidskrift for Barnmorskor) = Katilolehti
+Keio Journal of Medicine = Keio J. Med.
+Keisei Geka (Japanese Journal of Plastic and Reconstructive Surgery) = Keisei Geka
+Kekkaku (Tuberculosis) = Kekkaku
+Kemija u Industriji=Kem. Ind.;KJUIAR;M
+Kennedy Institute of Ethics Journal = Kennedy Inst. Ethics J.
+Kentucky Dental Journal = Ky. Dent. J.
+Kentucky Hospitals Magazine = Ky. Hosp. Mag.
+Kentucky Nurse = Ky. Nurse
+Kentucky Nurses Association Newsletter = Ky. Nurses Assoc. Newsl.
+Kenya Nursing Journal = Kenya Nurs. J.
+Khimicheskaya Promyshlennost (St. Petersburg, Russian Federation)=Khim. Prom-st. (St. Petersburg, Russ. Fed.);KPRMAW;M
+Khimicheskaya Promyshlennost Segodnya=Khim. Prom-st. Segodnya;KPSHBN;M
+Khimiya Tverdogo Topliva (Moscow, Russian Federation)=Khim. Tverd. Topl. (Moscow, Russ. Fed.);KTVTBY;BM
+Khimiya i Tekhnologiya Vody=Khim. Tekhnol. Vody;KTVODL;BM
+Khimiya v Interesakh Ustoichivogo Razvitiya=Khim. Interesakh Ustoich. Razvit.;KIURFI;BM
+Khirurgiia = Khirurgiia (Sofiia)
+Kidney International = Kidney Int.
+Kidney International. Supplement = Kidney Int. Suppl.
+Kidney and Blood Pressure Research = Kidney Blood Press. Res.
+Kinderarztliche Praxis = Kinderarztl. Prax.
+Kinderkrankenschwester = Kinderkrankenschwester
+Kinetics and Catalysis=Kinet. Catal.;KICAA8;BM
+King Faisal Specialist Hospital Medical Journal = King Faisal Spec. Hosp. Med. J.
+Kisaengchunghak Chapchi (Korean Journal of Parasitology) = Kisaengchunghak Chapchi
+Kitasato Archives of Experimental Medicine = Kitasato Arch. Exp. Med.
+Klinicheskaia Laboratornaia Diagnostika = Klin. Lab. Diagn.
+Klinicheskaia Meditsina = Klin. Med. (Mosk.)
+Klinichna Khirurhiia = Klin. Khir.
+Klinika Oczna = Klin. Oczna
+Klinika i Lechenie Zlokachestvennykh Novoobrazovanii = Klin. Lech. Zlokach. Novoobraz.
+Klinische Anasthesiologie und Intensivtherapie = Klin. Anasthesiol. Intensivther.
+Klinische Medizin; Osterreichische Zeitschrift fur Wissenschaftliche und Praktische Medizin = Klin. Med. Osterr. Z. Wiss. Prakt. Med.
+Klinische Monatsblatter fur Augenheilkunde = Klin. Monatsbl. Augenheilkd.
+Klinische Padiatrie = Klin. Padiatr.
+Klinische Wochenschrift = Klin. Wochenschr.
+Klinisk Sygepleje = Klin. Sygepleje
+Knee Surgery, Sports Traumatology, Arthroscopy = Knee Surg. Sports Traumatol. Arthrosc.
+Kobe Daigaku Igakubu Kiyo (Medical Journal of Kobe University) = Kobe Daigaku Igakubu Kiyo
+Kobe Ika Daigaku Kiyo = Kobe Ika Daigaku Kiyo
+Kobe Journal of Medical Sciences = Kobe J. Med. Sci.
+Kobunshi Ronbunshu=Kobunshi Ronbunshu;KBRBA3;M
+Koks i Khimiya=Koks Khim.;KOKKAI;M
+Koku Eisei Gakkai Zasshi = Koku Eisei Gakkai Zasshi
+Kokubyo Gakkai Zasshi (Journal of the Stomatological Society, Japan) = Kokubyo Gakkai Zasshi
+Kokuritsu Iyakuhin Shokuhin Eisei Kenkyujo Hokoku (Bulletin of National Institute of Health Sciences) = Kokuritsu Iyakuhin Shokuhin Eisei Kenkyusho Hokoku
+Kokuritsu Iyakuhin Shokuhin Eisei Kenkyusho Hokoku (Bulletin of National Institute of Health Sciences) = Kokuritsu Iyakuhin Shokuhin Eisei Kenkyusho Hokoku
+Kokyu to Junkan (Respiration and Circulation) = Kokyu To Junkan
+Kongressband, Deutsche Gesellschaft fur Chirurgie = Kongressbd. Dtsch. Ges. Chir. Kongr.
+Korean Journal of Chemical Engineering=Korean J. Chem. Eng.;KJCHE6;BM
+Korean Journal of Gastroenterology = Korean J. Gastroenterol.
+Korean Journal of Hepatology = Korean J. Hepatol.
+Korean Journal of Internal Medicine = Korean J. Intern. Med.
+Korean Journal of Ophthalmology = Korean J. Ophthalmol.
+Korean Journal of Parasitology = Korean J. Parasitol.
+Korean Journal of Radiology = Korean J. Radiol.
+Kosmicheskaia Biologiia i Aviakosmicheskaia Meditsina = Kosm. Biol. Aviakosm. Med.
+Kosmicheskaia Biologiia i Meditsina = Kosm. Biol. Med.
+Krankenpflege = Krankenpflege (Frankf.)
+Krankenpflege (Soins Infirmiers) = Krankenpfl. Soins Infirm.
+Krankenpflege Journal = Krankenpfl. J.
+Krankenschwester = Krankenschwester
+Krebsarzt = Krebsarzt
+Krebsforschung und Krebsbekampfung = Krebsforsch. Krebsbekampf.
+Kritiek = Kritiek
+Kroc Foundation Series = Kroc Found. Ser.
+Kumamoto Igakkai Zasshi (Journal of the Kumamoto Medical Society) = Kumamoto Igakkai Zasshi
+Kumamoto Medical Journal = Kumamoto Med. J.
+Kurinikaru Sutadi (Clinical Study) = Kurinikaru Sutadi
+Kurume Medical Journal = Kurume Med. J.
+Kybernetik = Kybernetik
+Kyobu Geka (Japanese Journal of Thoracic Surgery) = Kyobu Geka
+Kyoto Daigaku Kokukagaku Kiyo (Bulletin of Stomatology, Kyoto University) = Kyoto Daigaku Kokukagaku Kiyo
+Kyushu Journal of Medical Science = Kyushu J. Med. Sci.
+LA Reports = LA Rep.
+LARC Medical = LARC Med.
+LCGC North America=LCGC North Am.;LNACBH;M
+LDA Journal = LDA J.
+LMT; Lab Management Today = LMT
+LWT--Food Science and Technology=LWT--Food Sci. Technol.;LSTWB3;8/YR
+Lab on a Chip = Lab. Chip
+Labor Law Journal = Labor Law J.
+Laboratorio = Laboratorio
+Laboratornoe Delo = Lab. Delo
+Laboratory Animal Care = Lab. Anim. Care
+Laboratory Animal Science = Lab. Anim. Sci.
+Laboratory Animals = Lab. Anim.
+Laboratory Investigation = Lab. Invest.
+Laboratory Practice = Lab. Pract.
+Laboratory and Research Methods in Biology and Medicine = Lab. Res. Methods Biol. Med.
+Lahey Clinic Foundation Bulletin = Lahey Clin. Found. Bull.
+Lakartidningen = Lakartidningen
+Lamp = Lamp
+Lampada = Lampada
+Lancet = Lancet
+Lancet Infectious Diseases = Lancet Infect. Dis.
+Lancet Neurology = Lancet Neurol.
+Lancet Oncology = Lancet Oncol.
+Landarzt = Landarzt
+Langenbeck's Archives of Surgery = Langenbecks Arch. Surg.
+Langenbecks Archiv fur Chirurgie = Langenbecks Arch. Chir.
+Langenbecks Archiv fur Chirurgie. Supplement II, Verhandlungen der Deutschen Gesellschaft fur Chirurgie = Langenbecks Arch. Chir. Suppl. II Verh. Dtsch. Ges. Chir.
+Langenbecks Archiv fur Chirurgie. Supplement, Kongressband = Langenbecks Arch. Chir. Suppl. Kongressbd.
+Langmuir=Langmuir;LANGD5;BW
+Language and Speech = Lang. Speech
+Laryngo- Rhino- Otologie = Laryngorhinootologie.
+Laryngologie, Rhinologie, Otologie = Laryngol. Rhinol. Otol. (Stuttg.)
+Laryngoscope = Laryngoscope
+Laser and Particle Beams=Laser Part. Beams;LPBEDA;Q
+Lasers in Surgery and Medicine = Lasers Surg. Med.
+Lasers in Surgery and Medicine. Supplement = Lasers Surg. Med. Suppl.
+Lattante = Lattante
+Latvijas Kimijas Zurnals=Latv. Kim. Z.;LKZUE8;Q
+Laundry News = Laund. News
+Laval Medical = Laval Med.
+Lavori dell'Istituto di Anatomia e Istologia Patologica, Universita degli Studi di Perugia = Lav. Ist. Anat. Istol. Patol. Univ. Studi Perugia
+Lavoro Umano = Lav. Um.
+Law and Contemporary Problems = Law Contemp. Probl.
+Law and Human Behavior = Law Hum. Behav.
+Law and the Human Genome Review = Law Hum. Genome Rev.
+Law, Medicine and Health Care = Law. Med. Health Care
+Leadership in Health Services = Leadersh. Health Serv.
+League Exchange = League Exch.
+League Lines = League Lines
+Learning Curve = Learn. Curve
+Learning and Behavior = Learn. Behav.
+Learning and Memory = Learn. Mem.
+Learning and Motivation = Learn. Motiv.
+Lebensversicherungs Medizin = Lebensversicher. Med.
+Leber, Magen, Darm = Leber. Magen. Darm
+Leeds Dental Journal = Leeds Dent. J.
+Legal Aspects of Medical Practice = Leg. Aspects Med. Pract.
+Legal Medical Quarterly = Leg. Med. Q.
+Legal Medicine = Leg. Med.
+Legal Medicine Annual = Leg. Med. Annu.
+Lekarska Veda v Zahranici = Lek. Veda Zahr.
+Lekarske Prace = Lek. Pr.
+Lens and Eye Toxicity Research = Lens Eye Toxic. Res.
+Leprosy Review = Lepr. Rev.
+Leprosy in India = Lepr. India
+Letters in Applied Microbiology = Lett. Appl. Microbiol.
+Letters in Drug Design & Discovery=Lett. Drug Des. Discovery;LDDDAW;8/YR
+Letters in Organic Chemistry=Lett. Org. Chem.;LOCEC7;8/YR
+Leukemia = Leukemia
+Leukemia Research = Leuk. Res.
+Leukemia and Lymphoma = Leuk. Lymphoma
+Library Journal = Libr. J.
+Library Resources and Technical Services = Libr. Resources Tech. Serv.
+Library Technology Reports = Libr. Technol. Rep.
+Life Sciences = Life Sci.
+Life Sciences. Part 1, Physiology and Pharmacology = Life Sci. I
+Life Sciences. Part 2, Biochemistry, General and Molecular Biology = Life Sci. II
+Life Support Systems = Life Support Syst.
+Life-Threatening Behavior = Life. Threat. Behav.
+Lifelong Learning; The Adult Years = Lifelong Learn. Adult Years
+Lifetime Data Analysis = Lifetime Data Anal.
+Ligament = Ligament
+Lijecnicki Vjesnik = Lijec. Vjesn.
+Likarska Sprava = Lik. Sprava
+Lille Chirurgical = Lille Chir.
+Lille Medical = Lille Med.
+Limnology and Oceanography = Limnol. Oceanogr.
+Lin Chuang Er Bi Yan Hou Ke Za Zhi (Journal of Clinical Otorhinolaryngology) = Lin Chuang Er Bi Yan Hou Ke Za Zhi
+Linchan Huaxue Yu Gongye=Linchan Huaxue Yu Gongye;LHYGD7;Q
+Linen Supply News = Linen Supply News
+Lipids = Lipids
+Lipids in Health and Disease = Lipids Health Dis.
+Lippincott Health Promotion Letter = Lippincott Health Promot. Lett.
+Lippincott's Primary Care Practice = Lippincotts Prim. Care Pract.
+Liquid Crystals=Liq. Cryst.;LICRE6;M
+Literature and Medicine = Lit. Med.
+Lithos=Lithos;LITHAN;28/YR
+Liver = Liver
+Liver International = Liver Int.
+Liver Transplantation = Liver Transpl.
+Liver Transplantation and Surgery = Liver Transpl. Surg.
+Lloydia = Lloydia
+Log = Log
+Logopedics, Phoniatrics, Vocology = Logoped. Phoniatr. Vocol.
+Loma Linda University Dentist Magazine = Loma Linda Univ. Dent. Mag.
+London Clinic Medical Journal = Lond. Clin. Med. J.
+Long Range Planning = Long Range Plann.
+Long Term Care = Long Term Care (Don Mills)
+Long Term Care Quarterly = Long Term Care Q.
+Long Term Care and Health Services Administration Quarterly = Long Term Care Health Serv. Adm. Q.
+Lotta Contro la Tubercolosi = Lotta Contro Tuberc.
+Luminescence = Luminescence
+Lung = Lung
+Lung Cancer = Lung Cancer
+Lupus = Lupus
+Lutte Contre le Cancer = Lutte Cancer
+Lymphatic Research and Biology = Lymphat. Res. Biol.
+Lymphokine Research = Lymphokine Res.
+Lymphokine and Cytokine Research = Lymphokine Cytokine Res.
+Lymphology = Lymphology
+Lyon Chirurgical = Lyon Chir.
+Lyon Medical = Lyon Med.
+MAGMA = MAGMA
+MASA Review = MASA Rev.
+MCN; American Journal of Maternal Child Nursing = MCN. Am. J. Matern. Child Nurs.
+MD = MD
+MD Computing = MD Comput.
+MH; Mental Hygiene = MH
+MLM Reports = MLM Rep.
+MLN Bulletin = MLN Bull.
+MLO; Medical Laboratory Observer = MLO. Med. Lab. Obs.
+MMW Fortschritte der Medizin = MMW Fortschr. Med.
+MMW; Munchener Medizinische Wochenschrift = MMW Munch. Med. Wochenschr.
+MMWR CDC Surveillance Summaries = MMWR CDC Surveill. Summ.
+MMWR Surveillance Summaries = MMWR Surveill. Summ.
+MMWR; Morbidity and Mortality Weekly Report = MMWR Morb. Mortal. Wkly. Rep.
+MNA Accent = MNA Accent
+MPS; Medical Products Salesman = MPS
+MSDA Journal = MSDA J.
+Maandschrift voor Kindergeneeskunde = Maandschr. Kindergeneeskd.
+Maanedsskrift for Praktisk Laegegerning = Manedsskr. Prakt. Laegegern.
+Macromolecular Bioscience = Macromol. Biosci.
+Macromolecular Chemistry and Physics=Macromol. Chem. Phys.;MCHPES;SM
+Macromolecular Materials and Engineering=Macromol. Mater. Eng.;MMENFA;M
+Macromolecular Rapid Communications=Macromol. Rapid Commun.;MRCOE3;24/YR
+Macromolecular Research=Macromol. Res.;MRAECT;BM
+Macromolecular Symposia=Macromol. Symp.;MSYMEC;IRR
+Macromolecular Theory and Simulations=Macromol. Theory Simul.;MTHSEK;9/YR
+Macromolecules = Macromolecules
+Madjalah Persatuan Dokter Gigi Indonesia (Journal of the Indonesian Dental Association) = Madj. Persat. Dokt. Gigi Indones.
+Magnesium = Magnesium
+Magnesium Research = Magnes. Res.
+Magnesium and Trace Elements = Magnes. Trace Elem.
+Magnetic Resonance Annual = Magn. Reson. Annu.
+Magnetic Resonance Imaging = Magn. Reson. Imaging
+Magnetic Resonance Imaging Clinics of North America = Magn. Reson. Imaging Clin. N. Am.
+Magnetic Resonance Quarterly = Magn. Reson. Q.
+Magnetic Resonance in Chemistry=Magn. Reson. Chem.;MRCHEG;M
+Magnetic Resonance in Medical Sciences = Magn. Reson. Med. Sci.
+Magnetic Resonance in Medicine = Magn. Reson. Med.
+Magyar Kemiai Folyoirat, Kemiai Kozlemenyek=Magy. Kem. Foly., Kem. Kozl.;MKFKAL;Q
+Magyar Traumatologia, Orthopaedia es Helyreallito Sebeszet = Magy. Traumatol. Orthop. Helyreallito Seb.
+Magyar Traumatologia, Ortopedia, Kezsebeszet, Plasztikai Sebeszet = Magy. Traumatol. Ortop. Kezseb. Plasztikai Seb.
+Main Group Metal Chemistry=Main Group Met. Chem.;MGMCE8;BM
+Maine Nurse = Maine Nurse
+Mainlines = Mainlines
+Major Problems in Clinical Pediatrics = Major Probl. Clin. Pediatr.
+Major Problems in Clinical Surgery = Major Probl. Clin. Surg.
+Major Problems in Internal Medicine = Major Probl. Intern. Med.
+Major Problems in Obstetrics and Gynecology = Major Probl. Obstet. Gynecol.
+Major Problems in Pathology = Major Probl. Pathol.
+Malacologia = Malacologia
+Malaria Journal = Malar. J.
+Malattie Cardiovascolari = Mal. Cardiovasc.
+Malaysian Dental Journal = Malays. Dent. J.
+Malaysian Journal of Pathology = Malays. J. Pathol.
+Male Nurses Journal = Male Nurses J.
+Mammalia = Mammalia
+Mammalian Genome = Mamm. Genome
+Man and Medicine = Man Med.
+Managed Care = Manag. Care
+Managed Care Interface = Manag. Care Interface
+Managed Care Quarterly = Manag. Care Q.
+Managed Care Strategies = Manag. Care Strateg.
+Managed Medicare and Medicaid News = Manag. Medicare Medicaid News
+Management Focus = Manage. Focus
+Management Review = Manage. Rev.
+Management World = Manage. World
+Management and Compliance Series = Manag. Compliance Ser.
+Manchester Medical Gazette = Manch. Med. Gaz.
+Manitoba Medical Review = Manit. Med. Rev.
+Marine & Freshwater Research = Mar. Freshwater Res.
+Marine Biology = Mar. Biol.
+Marine Biotechnology=Mar. Biotechnol.;MABIFW;BM
+Marine Chemistry=Mar. Chem.;MRCHBD;20/YR
+Marine Ecology Progress Series = Mar. Ecol. Prog. Ser.
+Marine Environmental Research=Mar. Environ. Res.;MERSDW;10/YR
+Marine Pollution Bulletin=Mar. Pollut. Bull.;MPNBAZ;IRR
+Mariners Weather Log = Mar. Wea. Log
+Maritime Occupational Health = Marit. Occup. Health
+Marketing Health Services = Mark. Health Serv.
+Maroc Medical = Maroc Med.
+Marseille Chirurgical = Mars. Chir.
+Marseille Medical = Mars. Med.
+Maryland Medical Journal = Md. Med. J.
+Maryland Medicine = Md. Med.
+Maryland Nurse = Md. Nurse
+Maryland Nursing News = Md. Nurs. News
+Maryland State Medical Journal = Md. State Med. J.
+Mass Spectrometry Reviews = Mass Spectrom. Rev.
+Massachusetts Nurse = Mass. Nurse
+Masui (Japanese Journal of Anesthesiology) = Masui.
+Materia Medica Polona = Mater. Med. Pol.
+Materials Characterization=Mater. Charact.;MACHEX;10/YR
+Materials Chemistry and Physics=Mater. Chem. Phys.;MCHPDR;M
+Materials Forum=Mater. Forum;MFOREM;A
+Materials Letters=Mater. Lett.;MLETDJ;SM
+Materials Management in Health Care = Mater. Manag. Health Care
+Materials Research Bulletin=Mater. Res. Bull.;MRBUAC;15/YR
+Materials Research Innovations=Mater. Res. Innovations;MRINFV;6/YR
+Materials Research Society Symposium Proceedings=Mater. Res. Soc. Symp. Proc.;MRSPDH;IRR
+Materials Science & Engineering, A: Structural Materials: Properties, Microstructure and Processing=Mater. Sci. Eng., A;MSAPE3;46/YR
+Materials Science & Engineering, B: Solid-State Materials for Advanced Technology=Mater. Sci. Eng., B;MSBTEK;30/YR
+Materials Science & Engineering, C: Biomimetic and Supramolecular Systems=Mater. Sci. Eng., C;MSCEEE;8/YR
+Materials Science and Technology=Mater. Sci. Technol.;MSCTEP;M
+Materials Science in Semiconductor Processing=Mater. Sci. Semicond. Process.;MSSPFQ;BM
+Materials Transactions=Mater. Trans.;MTARCE;M
+Materials and Corrosion=Mater. Corros.;MTCREQ;M
+Materials and Manufacturing Processes=Mater. Manuf. Processes;MMAPET;BM
+Maternal and Child Health Journal = Matern. Child Health J.
+Maternal and Child Nutrition = Matern. Child. Nutr.
+Maternal-Child Nursing Journal = Matern. Child Nurs. J.
+Maternidade e Infancia = Matern. Infanc. (Sao Paulo)
+Maternite = Maternite
+Mathematical Biosciences = Math. Biosci.
+Mathematical Medicine and Biology = Math. Med. Biol.
+Matrix = Matrix
+Matrix Biology = Matrix Biol.
+Matrix. Supplement = Matrix. Suppl.
+Maturitas = Maturitas
+Mayan = Mayan
+Mayo Clinic Health Letter = Mayo Clin. Health Lett.
+Mayo Clinic Proceedings = Mayo Clin. Proc.
+McGill Dental Review = McGill Dent. Rev.
+McGraw-Hill's Medicine and Health = McGraw Hills Med. Health
+McGraw-Hill's Washington Report on Medicine and Health = McGraw Hills Wash. Rep. Med. Health
+Mead Johnson Symposium on Perinatal and Developmental Medicine = Mead Johnson Symp. Perinat. Dev. Med.
+Measurement Science and Technology=Meas. Sci. Technol.;MSTCEP;M
+Mechanisms of Ageing and Development = Mech. Ageing Dev.
+Mechanisms of Development = Mech. Dev.
+MedGenMed = MedGenMed
+Medecine Infantile = Med. Infant. (Paris)
+Medecine Interne = Med. Interne
+Medecine Legale et Dommage Corporel = Med. Leg. Dommage Corpor.
+Medecine Tropicale = Med. Trop. (Mars.)
+Medecine et Audio Vision = Med. Audio Vis.
+Medecine et Chirurgie Digestives = Med. Chir. Dig.
+Medecine et Hygiene = Med. Hyg. (Geneve)
+Mediators of Inflammation = Mediators Inflamm.
+Medical Affairs = Med. Aff.
+Medical Annals of the District of Columbia = Med. Ann. Dist. Columbia
+Medical Anthropology = Med. Anthropol.
+Medical Anthropology Quarterly = Med. Anthropol. Q.
+Medical Art = Med. Art
+Medical Arts and Sciences = Med. Arts Sci.
+Medical Aspects of Human Sexuality = Med. Aspects Hum. Sex.
+Medical Biology = Med. Biol.
+Medical Bulletin, Veterans Administration = Med. Bull. Vet. Adm.
+Medical Care = Med. Care
+Medical Care Research and Review = Med. Care Res. Rev.
+Medical Care Review = Med. Care Rev.
+Medical Claims Management = Med. Claims Manag.
+Medical Clinics of North America = Med. Clin. North Am.
+Medical Decision Making = Med. Decis. Making
+Medical Design and Material = Med. Des. Mater.
+Medical Device Technology = Med. Device Technol.
+Medical Dosimetry = Med. Dosim.
+Medical Economics = Med. Econ.
+Medical Education = Med. Educ.
+Medical Electronics = Med. Electron.
+Medical Electronics and Biological Engineering = Med. Electron. Biol. Eng.
+Medical Engineering and Physics = Med. Eng. Phys.
+Medical Group Management = Med. Group Manage.
+Medical Group Management Journal = Med. Group Manage. J.
+Medical Gynaecology, Andrology, and Sociology = Med. Gynaecol. Androl. Sociol.
+Medical History = Med. Hist.
+Medical History. Supplement = Med. Hist. Suppl.
+Medical Hypotheses = Med. Hypotheses
+Medical Image Analysis = Med. Image Anal.
+Medical Informatics = Med. Inform. (Lond.)
+Medical Informatics and the Internet in Medicine = Med. Inform. Internet Med.
+Medical Instrumentation = Med. Instrum.
+Medical Interface = Med. Interface
+Medical Journal of Australia = Med. J. Aust.
+Medical Journal of Malaya = Med. J. Malaya
+Medical Journal of Malaysia = Med. J. Malaysia
+Medical Journal of Osaka University = Med. J. Osaka Univ.
+Medical Journal of Zambia = Med. J. Zambia
+Medical Laboratory Sciences = Med. Lab. Sci.
+Medical Laboratory Technology = Med. Lab. Technol.
+Medical Letter on Drugs and Therapeutics = Med. Lett. Drugs Ther.
+Medical Malpractice Cost Containment Journal = Med. Malpract. Cost Containment J.
+Medical Management Network = Med. Manag. Netw.
+Medical Marketing and Media = Med. Mark. Media
+Medical Microbiology and Immunology = Med. Microbiol. Immunol. (Berl.)
+Medical Molecular Morphology = Med. Mol. Morphol.
+Medical Mycology = Med. Mycol.
+Medical Network Strategy Report = Med. Netw. Strategy Rep.
+Medical Newsletter = Med. Newsl. (London)
+Medical Oncology = Med. Oncol.
+Medical Oncology and Tumor Pharmacotherapy = Med. Oncol. Tumor Pharmacother.
+Medical Physics = Med. Phys.
+Medical Products Sales = Med. Prod. Sales
+Medical Progress Through Technology = Med. Prog. Technol.
+Medical Radiography and Photography = Med. Radiogr. Photogr.
+Medical Record News = Med. Rec. News
+Medical Record and Health Care Information Journal = Med. Rec. Health Care Inf. J.
+Medical Reference Services Quarterly = Med. Ref. Serv. Q.
+Medical Research Council Special Report Series = Med. Res. Counc. Spec. Rep. Ser. (Lond.)
+Medical Research Engineering = Med. Res. Eng.
+Medical Section Proceedings = Med. Sect. Proc.
+Medical Service = Med. Serv.
+Medical Services Journal, Canada = Med. Serv. J. Can.
+Medical Staff Counselor = Med. Staff Couns.
+Medical Teacher = Med. Teach.
+Medical Times = Med. Times
+Medical Toxicology = Med. Toxicol.
+Medical Toxicology and Adverse Drug Experience = Med. Toxicol. Adverse Drug Exp.
+Medical Trial Technique Quarterly = Med. Trial Tech. Q.
+Medical Waste Analyst = Med. Waste Anal.
+Medical World News = Med. World News
+Medical and Biological Engineering = Med. Biol. Eng.
+Medical and Biological Engineering and Computing = Med. Biol. Eng. Comput.
+Medical and Biological Illustration = Med. Biol. Illus.
+Medical and Pediatric Oncology = Med. Pediatr. Oncol.
+Medical and Pediatric Oncology. Supplement = Med. Pediatr. Oncol. Suppl.
+Medical and Veterinary Entomology = Med. Vet. Entomol.
+Medical/Dental Journal = Med. Dent. J.
+Medicamundi = Medicamundi
+Medicina = Medicina (Mex.)
+Medicina Clinica = Med. Clin. (Barc.)
+Medicina Clinica e Sperimentale = Med. Clin. Sper.
+Medicina Contemporanea = Med. Contemp.
+Medicina Cutanea Ibero-Latino-Americana = Med. Cutan. Ibero. Lat. Am.
+Medicina Espanola = Med. Esp.
+Medicina Experimentalis (International Journal of Experimental Medicine) = Med. Exp. Int. J. Exp. Med.
+Medicina Fisica y Rehabilitacion = Med. Fis. Rehabil.
+Medicina Interna = Med. Interna
+Medicina Oral = Med. Oral
+Medicina Panamericana = Med. Panam.
+Medicina Thoracalis = Med. Thorac.
+Medicina Tropical = Med. Trop. (Madr.)
+Medicina del Lavoro = Med. Lav.
+Medicina dello Sport = Med. Sport (Roma)
+Medicina et Pharmacologia Experimentalis (International Journal of Experimental Medicine) = Med. Pharmacol. Exp. Int. J. Exp. Med.
+Medicina nei Secoli = Med. Secoli
+Medicina y Cirugia de Guerra = Med. Cir. Guerra
+Medicinal Chemistry = Med. Chem.
+Medicinal Chemistry Research=Med. Chem. Res.;MCREEB;9/YR
+Medicinal Research Reviews = Med. Res. Rev.
+Medicine = Medicine (Baltimore)
+Medicine and Health = Med. Health
+Medicine and Health, Rhode Island = Med. Health R. I.
+Medicine and Law = Med. Law
+Medicine and Science in Sports = Med. Sci. Sports
+Medicine and Science in Sports and Exercise = Med. Sci. Sports Exerc.
+Medicine and War = Med. War
+Medicine, Conflict and Survival = Med. Confl. Surviv.
+Medicine, Health Care, and Philosophy = Med. Health Care Philos.
+Medicine, Science and the Law = Med. Sci. Law
+Medicinski Arhiv = Med. Arh.
+Medicinski Glasnik = Med. Glas.
+Medicinski Pregled = Med. Pregl.
+Medico-Legal Bulletin = Med. Leg. Bull.
+Medico-Legal Journal = Med. Leg. J.
+Medicolegal News = Medicoleg. News
+Medinfo = Medinfo
+Meditsina Truda i Promyshlennaia Ekologiia = Med. Tr. Prom. Ekol.
+Meditsinskaia Parazitologiia i Parazitarnye Bolezni = Med. Parazitol. (Mosk.)
+Meditsinskaia Promyshlennost SSSR = Med. Prom. SSSR
+Meditsinskaia Radiologiia = Med. Radiol. (Mosk.)
+Meditsinskaia Sestra = Med. Sestra
+Meditsinskaia Tekhnika = Med. Tekh.
+Medizin und Gesellschaft = Med. Ges.
+Medizinhistorisches Journal = Medizinhist. J.
+Medizinische Klinik = Med. Klin.
+Medizinische Klinik. Supplement = Med. Klin. Suppl.
+Medizinische Laboratorium = Med. Lab. (Stuttg.)
+Medizinische Monatsschrift = Med. Monatsschr.
+Medizinische Monatsschrift fur Pharmazeuten = Med. Monatsschr. Pharm.
+Medizinische Welt = Med. Welt
+Medscape Women's Health = Medscape Womens Health
+Medsurg Nursing = Medsurg Nurs.
+Medycyna Doswiadczalna = Med. Dosw.
+Medycyna Doswiadczalna i Mikrobiologia = Med. Dosw. Mikrobiol.
+Medycyna Pracy = Med. Pr.
+Medycyna Weterynaryjna = Med. Weter.
+Medycyna Wieku Rozwojowego = Med. Wieku Rozwoj.
+Meharri-Dent = Meharri. Dent
+Meikai Daigaku Shigaku Zasshi = Meikai Daigaku Shigaku Zasshi
+Melanoma Research = Melanoma Res.
+Membrane Biochemistry = Membr. Biochem.
+Membrane and Cell Biology = Membr. Cell Biol.
+Membranes = Membranes
+Memoires de l Academie Royale de Medecine de Belgique = Mem. Acad. R. Med. Belg.
+Memoires de l'Academie de Chirurgie = Mem. Acad. Chir. (Paris)
+Memorandum, Medical Research Council = Memo. Med. Res. Counc.
+Memorias do Instituto Butantan = Mem. Inst. Butantan
+Memorias do Instituto Oswaldo Cruz = Mem. Inst. Oswaldo Cruz
+Memory = Memory
+Memory and Cognition = Mem. Cognit.
+Mendeleev Communications=Mendeleev Commun.;MENCEX;BM
+Menopause = Menopause
+Mental Health Care = Ment. Health Care
+Mental Health Nursing = Ment. Health Nurs.
+Mental Health Services Research = Ment. Health Serv. Res.
+Mental Health Statistical Note = Ment. Health Stat. Note
+Mental Health and Society = Ment. Health Soc.
+Mental Hospitals = Ment. Hosp.
+Mental Hygiene = Ment. Hyg.
+Mental Retardation = Ment. Retard.
+Mental Retardation Abstracts = Ment. Retard. Abstr.
+Mentalis = Mentalis
+Mercer Dental Society Newsletter = Mercer Dent. Soc. Newsl.
+Metabolic Bone Disease and Related Research = Metab. Bone Dis. Relat. Res.
+Metabolic Brain Disease = Metab. Brain Dis.
+Metabolic Engineering = Metab. Eng.
+Metabolic Ophthalmology = Metab. Ophthalmol.
+Metabolic and Pediatric Ophthalmology = Metab. Pediatr. Ophthalmol.
+Metabolic, Pediatric and Systemic Ophthalmology = Metab. Pediatr. Syst. Ophthalmol.
+Metabolism, Clinical and Experimental=Metab., Clin. Exp.;METAAJ;M
+Metabolism: Clinical and Experimental = Metabolism.
+Metal Ions in Biological Systems = Met. Ions Biol. Syst.
+Metal Science and Heat Treatment=Met. Sci. Heat Treat.;MHTRAN;BM
+Metallofizika i Noveishie Tekhnologii=Metallofiz. Noveishie Tekhnol.;MNTEEU;M
+Metallurgical and Materials Transactions A: Physical Metallurgy and Materials Science=Metall. Mater. Trans. A;MMTAEB;M
+Metallurgical and Materials Transactions B: Process Metallurgy and Materials Processing Science=Metall. Mater. Trans. B;MTBSEO;BM
+Metally=Metally;MEALET;BM
+Meteoritics & Planetary Science=Meteorit. Planet. Sci.;MPSCFY;M
+Meteorological Magazine = Meteor. Mag.
+Meteorological Monographs = Meteor. Monogr.
+Meteorologische Rundschau = Meteor. Rundsch.
+Meteorologische Zeitschrift = Meteor. Z.
+Meteorologiya i Gidrologiya = Meteor. Gidrol.
+Meteorology and Atmospheric Physics = Meteor. Atmos. Phys.
+Methods = Methods
+Methods (San Diego, CA, United States)=Methods (San Diego, CA, U. S.);MTHDE9;M
+Methods and Achievements in Experimental Pathology = Methods Achiev. Exp. Pathol.
+Methods and Findings in Experimental and Clinical Pharmacology = Methods Find. Exp. Clin. Pharmacol.
+Methods in Cell Biology = Methods Cell Biol.
+Methods in Enzymology = Methods Enzymol.
+Methods in Medical Research = Methods Med. Res.
+Methods in Molecular Biology = Methods Mol. Biol.
+Methods in Molecular Medicine = Methods Mol. Med.
+Methods of Biochemical Analysis = Methods Biochem. Anal.
+Methods of Information in Medicine = Methods Inf. Med.
+Methods of Information in Medicine. Supplement = Methods Inf. Med. Suppl.
+Michigan Health and Hospitals = Mich. Health Hosp.
+Michigan Hospitals = Mich. Hosp.
+Michigan Law Review = Mich. Law Rev.
+Michigan Medicine = Mich. Med.
+Michigan Nurse = Mich. Nurse
+Microbes and Infection = Microbes Infect.
+Microbial Ecology = Microb. Ecol.
+Microbial Pathogenesis = Microb. Pathog.
+Microbial Releases = Microb. Releases
+Microbial and Comparative Genomics = Microb. Comp. Genomics
+Microbiologia = Microbiologia
+Microbiologia Espanola = Microbiol. Esp.
+Microbiologia, Parazitologia, Epidemiologia = Microbiol. Parazitol. Epidemiol. (Bucur.)
+Microbiologica = Microbiologica
+Microbiological Research = Microbiol. Res.
+Microbiological Reviews = Microbiol. Rev.
+Microbiological Sciences = Microbiol. Sci.
+Microbiology = Microbiology
+Microbiology (New York, NY, United States)=Microbiology (N. Y., NY, U. S.);MIBLAO;BM
+Microbiology (Reading, United Kingdom)=Microbiology (Reading, U. K.);MROBEO;M
+Microbiology and Immunology = Microbiol. Immunol.
+Microbiology and Molecular Biology Reviews = Microbiol. Mol. Biol. Rev.
+Microbios = Microbios
+Microchemical Journal = Microchem. J.
+Microchimica Acta=Microchim. Acta;MIACAQ;12/YR
+Microcirculation = Microcirculation
+Microcirculation, Endothelium, and Lymphatics = Microcirc. Endothelium. Lymphatics
+Microelectronic Engineering=Microelectron. Eng.;MIENEF;8/YR
+Micron = Micron
+Microporous and Mesoporous Materials=Microporous Mesoporous Mater.;MIMMFJ;30/YR
+Microscopia Electronica y Biologia Celular = Microsc. Electron. Biol. Celular
+Microscopica Acta = Microsc. Acta
+Microscopica Acta. Supplement = Microsc. Acta. Suppl.
+Microscopy Research and Technique = Microsc. Res. Tech.
+Microscopy and Microanalysis=Microsc. Microanal.;MIMIF7;BM
+Microsurgery = Microsurgery
+Microvascular Research = Microvasc. Res.
+Middle East Dentistry and Oral Health = Middle East Dent. Oral Health
+Middle East Health = Middle East Health
+Middle East Journal of Anaesthesiology = Middle East J. Anaesthesiol.
+Middle East Journal of Anesthesiology = Middle East J. Anesthesiol.
+Midwest Alliance in Nursing Journal = Midwest Alliance Nurs. J.
+Midwestern Dentist = Midwest. Dent.
+Midwife and Health Visitor = Midwife Health Visit.
+Midwife, Health Visitor and Community Nurse = Midwife. Health Visit. Community Nurse
+Midwifery = Midwifery
+Midwifery Today and Childbirth Education = Midwifery Today Childbirth Educ.
+Midwifery Today with International Midwife = Midwifery Today Int. Midwife
+Midwives = Midwives
+Midwives Chronicle = Midwives Chron.
+Mie Medical Journal = Mie Med. J.
+Mikrobiologicheskii Zhurnal = Mikrobiol. Zh.
+Mikrobiologiia = Mikrobiologiia
+Mikrobiolohichnyi Zhurnal = Mikrobiol. Zh.
+Mikrobiyoloji Bulteni = Mikrobiyol. Bul.
+Mikrochimica Acta = Mikrochim. Acta
+Mikrochimica et Ichnoanalytica Acta = Mikrochim. Ichnoanal. Acta
+Mikroskopie = Mikroskopie
+Milbank Memorial Fund Quarterly = Milbank Mem. Fund Q.
+Milbank Memorial Fund Quarterly. Health and Society = Milbank Mem. Fund Q. Health Soc.
+Milbank Quarterly = Milbank Q.
+Milchwissenschaft=Milchwissenschaft;MILCAD;4/YR
+Militaerlaegen = Militaerlaegen
+Military Medicine = Mil. Med.
+Mineral and Electrolyte Metabolism = Miner. Electrolyte Metab.
+Mineralium Deposita=Miner. Deposita;MIDEBE;8/YR
+Mineralogical Magazine=Mineral. Mag.;MNLMBB;BM
+Mineralogy and Petrology=Mineral. Petrol.;MIPEE9;12/YR
+Minerals & Metallurgical Processing=Miner. Metall. Process.;MMPRE8;Q
+Minerals Engineering=Miner. Eng.;MENGEB;15/YR
+Minerva Anestesiologica = Minerva Anestesiol.
+Minerva Cardioangiologica = Minerva Cardioangiol.
+Minerva Chirurgica = Minerva Chir.
+Minerva Dermatologica = Minerva Dermatol.
+Minerva Dietologica e Gastroenterologica = Minerva Dietol. Gastroenterol.
+Minerva Ecologica, Idroclimatologica e Fisiconucleare = Minerva Ecol. Idroclimatol. Fisiconucl.
+Minerva Ecologica, Idroclimatologica, Fisicosanitaria = Minerva Ecol. Idroclimatol. Fis. Sanit.
+Minerva Endocrinologica = Minerva Endocrinol.
+Minerva Fisiconucleare = Minerva Fisiconucl.
+Minerva Gastroenterologica e Dietologica = Minerva Gastroenterol. Dietol.
+Minerva Ginecologica = Minerva Ginecol.
+Minerva Medica = Minerva Med.
+Minerva Medicolegale = Minerva Medicoleg.
+Minerva Nefrologica = Minerva Nefrol.
+Minerva Neurochirurgica = Minerva Neurochir.
+Minerva Nipiologica = Minerva Nipiol.
+Minerva Nucleare = Minerva Nucl.
+Minerva Oftalmologica = Minerva Oftalmol.
+Minerva Ortognatodontica = Minerva Ortognatod.
+Minerva Ortopedica = Minerva Ortop.
+Minerva Otorinolaringologica = Minerva Otorinolaringol.
+Minerva Pediatrica = Minerva Pediatr.
+Minerva Psichiatrica = Minerva Psichiatr.
+Minerva Radiologica = Minerva Radiol.
+Minerva Stomatologica = Minerva Stomatol.
+Minerva Urologica = Minerva Urol.
+Minerva Urologica e Nefrologica = Minerva Urol. Nefrol.
+Mini Reviews in Medicinal Chemistry = Mini Rev. Med. Chem.
+Mini-Reviews in Medicinal Chemistry=Mini-Rev. Med. Chem.;MMCIAE;12/YR
+Mini-Reviews in Organic Chemistry=Mini-Rev. Org. Chem.;MOCIBT;4/YR
+Minimally Invasive Neurosurgery = Minim. Invasive Neurosurg.
+Minimally Invasive Surgical Nursing = Minim. Invasive Surg. Nurs.
+Minneapolis District Dental Journal = Minneap. Dist. Dent. J.
+Minnesota Medicine = Minn. Med.
+Minnesota Nursing Accent = Minn. Nurs. Accent
+Minority Nurse Newsletter = Minor. Nurse Newsl.
+Mississippi Dental Association Journal = Miss. Dent. Assoc. J.
+Mississippi RN = Miss. RN
+Missouri Dental Journal = Mo. Dent. J.
+Missouri Medicine = Mo. Med.
+Missouri Nurse = Mo. Nurse
+Mitochondrion = Mitochondrion
+Mitteilungen der Deutschen Pharmazeutischen Gesellschaft und der Pharmazeutischen Gesellschaft der DDR = Mitt. Dtsch. Pharm. Ges. Pharm. Ges. DDR
+Mobius = Mobius
+Modern Concepts of Cardiovascular Disease = Mod. Concepts Cardiovasc. Dis.
+Modern Dental Practice = Mod. Dent. Pract.
+Modern Healthcare = Mod. Healthc.
+Modern Healthcare (Short Term Care) = Mod. Healthc. (Short Term Care)
+Modern Hospital = Mod. Hosp.
+Modern Medicine of Asia = Mod. Med. Asia
+Modern Midwife = Mod. Midwife
+Modern Nursing Home = Mod. Nurs. Home
+Modern Pathology = Mod. Pathol.
+Modern Physics Letters B=Mod. Phys. Lett. B;MPLBET;30/YR
+Modern Problems in Ophthalmology = Mod. Probl. Ophthalmol.
+Modern Problems in Paediatrics = Mod. Probl. Paediatr.
+Modern Problems of Pharmacopsychiatry = Mod. Probl. Pharmacopsychiatry
+Modern Treatment = Mod. Treat.
+Modern Trends in Immunology = Mod. Trends Immunol.
+Modern Trends in Medical Virology = Mod. Trends Med. Virol.
+Modern Trends in Neurology = Mod. Trends Neurol.
+Modern Trends in Orthopaedics = Mod. Trends Orthop.
+Modern Trends in Plastic Surgery = Mod. Trends Plast. Surg.
+Modern Trends in Radiotherapy = Mod. Trends Radiother.
+Modern Trends in Rheumatology = Mod. Trends Rheumatol.
+Modern Trends in Surgery = Mod. Trends Surg.
+Modern Veterinary Practice = Mod. Vet. Pract.
+Molecular Aspects of Medicine = Mol. Aspects Med.
+Molecular BioSystems=Mol. BioSyst.;MBOIBW;6/YR
+Molecular Biology = Mol. Biol.
+Molecular Biology (New York, NY, United States, English Edition)=Mol. Biol. (N. Y., NY, U. S., Engl. Ed.);MOLBBJ;BM
+Molecular Biology Reports = Mol. Biol. Rep.
+Molecular Biology and Evolution = Mol. Biol. Evol.
+Molecular Biology and Medicine = Mol. Biol. Med.
+Molecular Biology of the Cell = Mol. Biol. Cell
+Molecular Biology, Biochemistry and Biophysics = Mol. Biol. Biochem. Biophys.
+Molecular Biosystems = Mol. Biosyst.
+Molecular Biotechnology = Mol. Biotechnol.
+Molecular Biotherapy = Mol. Biother.
+Molecular Brain Research=Mol. Brain Res.;MBREE4;22/YR
+Molecular Cancer = Mol. Cancer
+Molecular Cancer Research = Mol. Cancer Res.
+Molecular Cancer Therapeutics = Mol. Cancer Ther.
+Molecular Carcinogenesis = Mol. Carcinog.
+Molecular Cell = Mol. Cell
+Molecular Cell Biology Research Communications = Mol. Cell Biol. Res. Commun.
+Molecular Crystals and Liquid Crystals=Mol. Cryst. Liq. Cryst.;MCLCD8;18/YR
+Molecular Diagnosis = Mol. Diagn.
+Molecular Diagnosis and Therapy = Mol. Diagn. Ther.
+Molecular Diversity = Mol. Divers.
+Molecular Ecology = Mol. Ecol.
+Molecular Endocrinology = Mol. Endocrinol.
+Molecular Genetic Medicine = Mol. Genet. Med.
+Molecular Genetics and Genomics = Mol. Genet. Genomics
+Molecular Genetics and Metabolism = Mol. Genet. Metab.
+Molecular Human Reproduction = Mol. Hum. Reprod.
+Molecular Imaging = Mol. Imaging
+Molecular Imaging and Biology = Mol. Imaging Biol.
+Molecular Immunology = Mol. Immunol.
+Molecular Interventions = Mol. Interv.
+Molecular Marine Biology and Biotechnology = Mol. Mar. Biol. Biotechnol.
+Molecular Medicine = Mol. Med.
+Molecular Medicine Today = Mol. Med. Today
+Molecular Membrane Biology = Mol. Membr. Biol.
+Molecular Microbiology = Mol. Microbiol.
+Molecular Neurobiology = Mol. Neurobiol.
+Molecular Nutrition and Food Research = Mol. Nutr. Food Res.
+Molecular Pain = Mol. Pain
+Molecular Pathology = Mol. Pathol.
+Molecular Pharmaceutics = Mol. Pharm.
+Molecular Pharmacology = Mol. Pharmacol.
+Molecular Phylogenetics and Evolution = Mol. Phylogenet. Evol.
+Molecular Physics=Mol. Phys.;MOPHAM;SM
+Molecular Plant-Microbe Interactions = Mol. Plant. Microbe Interact.
+Molecular Psychiatry = Mol. Psychiatry
+Molecular Reproduction and Development = Mol. Reprod. Dev.
+Molecular Simulation=Mol. Simul.;MOSIEA;15/YR
+Molecular Systems Biology = Mol. Syst. Biol.
+Molecular Therapy = Mol. Ther.
+Molecular Toxicology = Mol. Toxicol.
+Molecular Urology = Mol. Urol.
+Molecular Vision = Mol. Vis.
+Molecular and Biochemical Parasitology = Mol. Biochem. Parasitol.
+Molecular and Cell Biology of Human Diseases Series = Mol. Cell Biol. Hum. Dis. Ser.
+Molecular and Cellular Biochemistry = Mol. Cell. Biochem.
+Molecular and Cellular Biology = Mol. Cell. Biol.
+Molecular and Cellular Biomechanics = Mol. Cell. Biomech.
+Molecular and Cellular Endocrinology = Mol. Cell. Endocrinol.
+Molecular and Cellular Neuroscience=Mol. Cell. Neurosci.;MOCNED;M
+Molecular and Cellular Neurosciences = Mol. Cell. Neurosci.
+Molecular and Cellular Probes = Mol. Cell. Probes
+Molecular and Cellular Proteomics = Mol. Cell. Proteomics
+Molecular and Chemical Neuropathology = Mol. Chem. Neuropathol.
+Molecular and General Genetics = Mol. Gen. Genet.
+Molecules = Molecules
+Molecules and Cells = Mol. Cells
+Molekuliarna Meditsina = Mol. Med. (Sofia)
+Molekuliarnaia Biologiia = Mol. Biol. (Mosk.)
+Molekuliarnaia Genetika, Mikrobiologiia i Virusologia = Mol. Gen. Mikrobiol. Virusol.
+Monaldi Archives for Chest Disease = Monaldi Arch. Chest Dis.
+Monatshefte fuer Chemie=Monatsh. Chem.;MOCMB7;M
+Monatshefte fur Veterinarmedizin = Monatsh. Veterinarmed.
+Monatsschrift Deutscher Zahnarzte; Der Freie Zahnarzt = Monatsschr. Dtsch. Zahnarzte Freie Zahnarzt
+Monatsschrift Kinderheilkunde = Monatsschr. Kinderheilkd.
+Monatsschrift fur Kinderheilkunde = Monatsschr. Kinderheilkd.
+Monatsschrift fur Ohrenheilkunde und Laryngo-Rhinologie = Monatsschr. Ohrenheilkd. Laryngorhinol.
+Monatsschrift fur Unfallheilkunde = Monatsschr. Unfallheilkd.
+Monatsschrift fur Unfallheilkunde, Versicherungs-, Versorgungs- und Verkehrsmedizin = Monatsschr. Unfallheilkd. Versicher. Versorg. Verkehrsmed.
+Monde Dentaire = Monde Dent.
+Mondo Odontostomatologico = Mondo Odontostomatol.
+Mondo Ortodontico = Mondo Ortod.
+Monograph of the American Association of Mental Deficiency = Monogr. Am. Assoc. Ment. Defic.
+Monographien aus dem Gesamtgebiete der Neurologie und Psychiatrie = Monogr. Gesamtgeb. Neurol. Psychiatr. (Berlin)
+Monographien aus dem Gesamtgebiete der Psychiatrie. Psychiatry Series = Monogr. Gesamtgeb. Psychiatr. Psychiatry Ser.
+Monographs in Allergy = Monogr. Allergy
+Monographs in Clinical Cytology = Monogr. Clin. Cytol.
+Monographs in Developmental Biology = Monogr. Dev. Biol.
+Monographs in Human Genetics = Monogr. Hum. Genet.
+Monographs in Neural Sciences = Monogr. Neural Sci.
+Monographs in Oral Science = Monogr. Oral Sci.
+Monographs in Paediatrics = Monogr. Paediatr.
+Monographs in Pathology = Monogr. Pathol.
+Monographs in Population Biology = Monogr. Popul. Biol.
+Monographs in Virology = Monogr. Virol.
+Monographs in the Surgical Sciences = Monogr. Surg. Sci.
+Monographs of the American Association on Mental Deficiency = Monogr. Am. Assoc. Ment. Defic.
+Monographs of the American Association on Mental Retardation = Monogr. Am. Assoc. Ment. Retard.
+Monographs of the Physiological Society = Monogr. Physiol. Soc.
+Monographs of the Society for Research in Child Development = Monogr. Soc. Res. Child Dev.
+Monographs on Atherosclerosis = Monogr. Atheroscler.
+Monographs on Endocrinology = Monogr. Endocrinol.
+Monthly Bulletin of the Ministry of Health and the Public Health Laboratory Service = Mon. Bull. Minist. Health Public Health Lab. Serv.
+Monthly Labor Review = Mon. Labor Rev.
+Monthly Vital Statistics Report = Mon. Vital Stat. Rep.
+Monthly Weather Review = Mon. Wea. Rev.
+Montpellier Medical = Montp. Med.
+Morfologiia = Morfologiia
+Morphologia Medica = Morphol. Med.
+Morphologiai es Igazsagugyi Orvosi Szemle = Morphol. Igazsagugyi Orv. Sz.
+Morphologie = Morphologie
+Morphologie et Embryologie = Morphol. Embryol. (Bucur.)
+Motor Control = Motor Control
+Mount Sinai Journal of Medicine = Mt. Sinai J. Med.
+Movement Disorders = Mov. Disord.
+Mucopolysaccharides Biochimica et Biophysica Acta, Specialized Section on Mucoproteins and Mucopolysaccharides=Biochim. Biophys. Acta, Spec. Sect. Mucoproteins;BBASFB;
+Multiple Sclerosis = Mult. Scler.
+Multis = Multis
+Munca Sanitara = Munca Sanit.
+Munchener Medizinische Wochenschrift = Munch. Med. Wochenschr.
+Mund-, Kiefer- und Gesichtschirurgie = Mund. Kiefer. Gesichtschir.
+Munnpleien = Munnpleien
+Muscle Biology = Muscle Biol.
+Muscle and Nerve = Muscle Nerve
+Muscle and Nerve. Supplement = Muscle Nerve. Suppl.
+Musculoskeletal Care = Musculoskeletal Care
+Mutagenesis = Mutagenesis
+Mutation Research = Mutat. Res.
+Mycologia = Mycologia
+Mycopathologia = Mycopathologia
+Mycopathologia et Mycologia Applicata = Mycopathol. Mycol. Appl.
+Mycoses = Mycoses
+Mykosen = Mykosen
+Mykosen. Supplement = Mykosen. Suppl.
+N and HC Perspectives on Community = N HC Perspect. Community
+NAACOG Newsletter = NAACOG Newsl.
+NAACOG Technical Bulletin = NAACOG Tech. Bull.
+NAACOG's Clinical Issues in Perinatal and Women's Health Nursing = NAACOGs Clin. Issu. Perinat. Womens Health Nurs.
+NACDL Journal = NACDL J.
+NADL Journal = NADL J.
+NAHAM Management Journal = NAHAM Manage. J.
+NANR News = NANR News
+NASNewsletter = Nasnewsletter
+NATNEWS = NATNEWS
+NCI Monographs = NCI Monogr.
+NCSDHA Dental Hygienist = NCSDHA Dent. Hyg.
+NDA Journal = NDA J.
+NEHW Health Watch = NEHW Health Watch
+NFPA Journal = NFPA J.
+NIDA Research Monograph = NIDA Res. Monogr.
+NIH Consensus Statement = NIH Consens. Statement
+NIH Consensus and State-of-the-Science Statements = NIH Consens. State Sci. Statements
+NIH Guide for Grants and Contracts = NIH Guide Grants Contracts
+NIHAE Bulletin = NIHAE Bull.
+NIPH Annals = NIPH Ann.
+NITA = NITA
+NJPC Bulletin = NJPC Bull.
+NJSNA Newsletter = NJSNA Newsl.
+NLN Convention Papers = NLN Conv. Pap.
+NLN Publications = NLN Publ.
+NLN Update = NLN Update
+NMR in Biomedicine = NMR Biomed.
+NP News = NP News
+NYO Reports = NYO Rep.
+NYSSNTA Journal = NYSSNTA J.
+Nagoya Journal of Medical Science = Nagoya J. Med. Sci.
+Nagoya Medical Journal = Nagoya Med. J.
+Nahrung = Nahrung
+Naika (Internal Medicine) = Naika
+Naika Hokan (Japanese Archives of Internal Medicine) = Naika Hokan
+Nan Fang Yi Ke Da Xue Xue Bao (Journal of Southern Medical University) = Nan Fang Yi Ke Da Xue Xue Bao
+Nano Letters = Nano Lett.
+NanoBiotechnology=NanoBiotechnology;NANOCG;4/YR
+Nanomedicine=Nanomedicine;NANOBF;Q
+Narodno Zdravlje = Nar. Zdrav.
+Nasu Suteshon (Journal of Nursing Administration for Patients) = Nasu Suteshon
+Nation's Business = Nations Bus.
+National Cancer Institute Monographs = Natl. Cancer Inst. Monogr.
+National Cancer Institute Research Report = Natl. Cancer Inst. Res. Rep.
+National Clearinghouse for Poison Control Centers Bulletin = Natl. Clgh. Poison Control Cent. Bull.
+National Conference on Dental Public Relations = Natl. Conf. Dent. Public Relat.
+National Dental Association Journal = Natl. Dent. Assoc. J.
+National Dental Health Conference = Natl. Dent. Health Conf.
+National Engineer = Natl. Eng.
+National Forum on Hospital and Health Affairs = Natl. Forum Hosp. Health Aff.
+National Hospital and Health Care = Natl. Hosp. Health Care
+National Institute of Animal Health Quarterly = Natl. Inst. Anim. Health Q. (Tokyo)
+National Institute on Drug Abuse Research Monograph Series = Natl. Inst. Drug Abuse Res. Monogr. Ser.
+National Institutes of Health Consensus Development Conference Consensus Statement = Natl. Inst. Health Consens. Dev. Conf. Consens. Statement
+National Institutes of Health Consensus Development Conference Summaries = Natl. Inst. Health Consens. Dev. Conf. Summ.
+National Institutes of Health Consensus Development Conference Summary = Natl. Inst. Health Consens. Dev. Conf. Summ.
+National Journal = Natl. J. (Wash.)
+National Medical Care Utilization and Expenditure Survey. Series B, Descriptive Report = Natl. Med. Care Util. Expend. Surv. B.
+National Medical Care Utilization and Expenditure Survey. Series C, Analytical Report = Natl. Med. Care Util. Expend. Surv. C.
+National Medical Journal of India = Natl. Med. J. India
+National Medical-Legal Journal = Natl. Med. Leg. J.
+National Network = Natl. Netw.
+National Nosocomial Infections Study Report = Natl. Nosocomial Infect. Study Rep.
+National Safety Congress Transactions = Natl. Saf. Congr. Trans.
+National Safety News = Natl. Saf. News
+National Underwriter = Natl. Underwrit. [Life Health]
+National Vital Statistics Reports = Natl. Vital Stat. Rep.
+National Weather Digest = Natl. Wea. Dig.
+Natonal Report on Subacute Care = Natl. Rep. Subacute Care
+Natural Immunity = Nat. Immun.
+Natural Immunity and Cell Growth Regulation = Nat. Immun. Cell Growth Regul.
+Natural Product Reports = Nat. Prod. Rep.
+Natural Product Research = Nat. Prod. Res.
+Natural Product Sciences=Nat. Prod. Sci.;NPSCFB;Q
+Natural Toxins = Nat. Toxins
+Nature = Nature
+Nature (London, United Kingdom)=Nature (London, U. K.);NATUAS;W
+Nature Biotechnology = Nat. Biotechnol.
+Nature Cell Biology = Nat. Cell Biol.
+Nature Chemical Biology = Nat. Chem. Biol.
+Nature Clinical Practice. Cardiovascular Medicine = Nat. Clin. Pract. Cardiovasc. Med.
+Nature Clinical Practice. Endocrinology and Metabolism = Nat. Clin. Pract. Endocrinol. Metab.
+Nature Clinical Practice. Gastroenterology and Hepatology = Nat. Clin. Pract. Gastroenterol. Hepatol.
+Nature Clinical Practice. Nephrology = Nat. Clin. Pract. Nephrol.
+Nature Clinical Practice. Neurology = Nat. Clin. Pract. Neurol.
+Nature Clinical Practice. Oncology = Nat. Clin. Pract. Oncol.
+Nature Clinical Practice. Rheumatology = Nat. Clin. Pract. Rheumatol.
+Nature Clinical Practice. Urology = Nat. Clin. Pract. Urol.
+Nature Genetics = Nat. Genet.
+Nature Immunology = Nat. Immunol.
+Nature Materials = Nat. Mater.
+Nature Medicine = Nat. Med.
+Nature Medicine (New York, NY, United States)=Nat. Med. (N. Y., NY, U. S.);NAMEFI;M
+Nature Methods = Nat. Methods
+Nature Neuroscience = Nat. Neurosci.
+Nature Reviews Cancer=Nat. Rev. Cancer;NRCAC4;M
+Nature Reviews Drug Discovery=Nat. Rev. Drug Discovery;NRDDAG;M
+Nature Reviews Genetics=Nat. Rev. Genet.;NRGAAM;M
+Nature Reviews Immunology=Nat. Rev. Immunol.;NRIABX;M
+Nature Reviews Microbiology=Nat. Rev. Microbiol.;NRMACK;M
+Nature Reviews Molecular Cell Biology=Nat. Rev. Mol. Cell Biol.;NRMCBP;M
+Nature Reviews Neuroscience=Nat. Rev. Neurosci.;NRNAAN;M
+Nature Reviews. Cancer = Nat. Rev. Cancer
+Nature Reviews. Drug Discovery = Nat. Rev. Drug Discov.
+Nature Reviews. Genetics = Nat. Rev. Genet.
+Nature Reviews. Immunology = Nat. Rev. Immunol.
+Nature Reviews. Microbiology = Nat. Rev. Microbiol.
+Nature Reviews. Molecular Cell Biology = Nat. Rev. Mol. Cell Biol.
+Nature Reviews. Neuroscience = Nat. Rev. Neurosci.
+Nature Structural & Molecular Biology=Nat. Struct. Mol. Biol.;NSMBCU;M
+Nature Structural Biology = Nat. Struct. Biol.
+Nature Structural and Molecular Biology = Nat. Struct. Mol. Biol.
+Nature. New Biology = Nature. New Biol.
+Naturwissenschaften = Naturwissenschaften
+Nauchni Trudove na Nauchno-Izsledovatelskiia Stomatologichen Institut = Nauchni Tr. Nauchnoizsled. Stomatol. Inst. (Sofiia)
+Nauchni Trudove na Visshiia Meditsinski Institut, Sofiia = Nauchni Tr. Vissh. Med. Inst. Sofiia
+Naunyn-Schmiedeberg's Archives of Pharmacology = Naunyn. Schmiedebergs Arch. Pharmacol.
+Naunyn-Schmiedebergs Archiv fur Experimentelle Pathologie und Pharmakologie = Naunyn. Schmiedebergs Arch. Exp. Pathol. Pharmakol.
+Naunyn-Schmiedebergs Archiv fur Pharmakologie = Naunyn. Schmiedebergs Arch. Pharmakol.
+Navy Medicine = Navy Med.
+Nebraska Medical Journal = Nebr. Med. J.
+Nebraska Nurse = Nebr. Nurse
+Nebraska State Medical Journal = Nebr. State Med. J.
+Nebraska Symposium on Motivation = Nebr. Symp. Motiv.
+Nederlands Militair Geneeskundig Tijdschrift = Ned. Milit. Geneeskd. Tijdschr.
+Nederlands Tandartsenblad = Ned. Tandartsenbl.
+Nederlands Tijdschrift voor Geneeskunde = Ned. Tijdschr. Geneeskd.
+Nederlands Tijdschrift voor Gerontologie = Ned. Tijdschr. Gerontol.
+Nederlands Tijdschrift voor Tandheelkunde = Ned. Tijdschr. Tandheelkd.
+Nederlands Tijdschrift voor de Psychologie en haar Grensgebieden = Ned. Tijdschr. Psychol.
+Nederlandsch Tijdschrift voor Verloskunde en Gynaecologie = Ned. Tijdschr. Verloskd. Gynaecol.
+Neftekhimiya=Neftekhimiya;NEFTAH;BM
+Neirofiziologiia = Neirofiziologiia
+Neonatal Intensive Care = Neonatal Intensive Care
+Neonatal Network = Neonatal Netw.
+Neonatology = Neonatology
+Neoplasia = Neoplasia
+Neoplasma = Neoplasma
+Neoplastic Disease at Various Sites = Monogr. Neoplast. Dis. Var. Sites
+Neotropical Entomology = Neotrop. Entomol.
+Nephrologie = Nephrologie
+Nephrologie et Therapeutique = Nephrol. Ther.
+Nephrology News and Issues = Nephrol. News Issues
+Nephrology Nurse = Nephrol. Nurse
+Nephrology, Dialysis, Transplantation = Nephrol. Dial. Transplant.
+Nephron = Nephron
+Nephron. Clinical Practice = Nephron Clin. Pract.
+Nephron. Experimental Nephrology = Nephron Exp. Nephrol.
+Nephron. Physiology = Nephron Physiol.
+Nervenarzt = Nervenarzt
+Nervnaia Sistema = Nerv. Sist.
+Nestle Nutrition Workshop Series. Clinical and Performance Programme = Nestle Nutr. Workshop Ser. Clin. Perform. Programme
+Netherlands Journal of Medicine = Neth. J. Med.
+Netherlands Journal of Surgery = Neth. J. Surg.
+Network = Network
+Neue Munchner Beitrage zur Geschichte der Medizin und Naturwissenschaften. Medizinhistorische Reihe = Neue Munch. Beitr. Gesch. Med. Naturwiss. Medizinhist. Reihe
+Neues Jahrbuch fuer Mineralogie, Abhandlungen=Neues Jahrb. Mineral., Abh.;NJMIAK;IRR
+Neural Computation = Neural Comput.
+Neural Plasticity = Neural Plast.
+Neuro-Chirurgie = Neurochirurgie.
+Neuro-Degenerative Diseases = Neurodegener. Dis.
+Neuro-oncology = Neuro-oncol.
+Neuro-signals = Neurosignals
+NeuroImmunoModulation=NeuroImmunoModulation;NROIEM;BM
+NeuroMolecular Medicine=NeuroMol. Med.;NMEEAN;6/YR
+Neurobehavioral Toxicology = Neurobehav. Toxicol.
+Neurobehavioral Toxicology and Teratology = Neurobehav. Toxicol. Teratol.
+Neurobiology = Neurobiology
+Neurobiology of Aging = Neurobiol. Aging
+Neurobiology of Disease = Neurobiol. Dis.
+Neurobiology of Learning and Memory = Neurobiol. Learn. Mem.
+Neurochemical Pathology = Neurochem. Pathol.
+Neurochemical Research = Neurochem. Res.
+Neurochemistry International = Neurochem. Int.
+Neurochirurgia = Neurochirurgia (Stuttg.)
+Neurocirugia = Neurocirugia
+Neurocritical Care = Neurocrit. Care
+Neurodegeneration = Neurodegeneration
+Neuroendocrinology = Neuroendocrinology
+Neuroepidemiology = Neuroepidemiology
+Neurofibromatosis = Neurofibromatosis
+Neurogastroenterology and Motility = Neurogastroenterol. Motil.
+Neurogenetics = Neurogenetics
+Neuroimage = Neuroimage
+Neuroimaging Clinics of North America = Neuroimaging Clin. N. Am.
+Neuroimmunomodulation = Neuroimmunomodulation
+Neuroinformatics = Neuroinformatics
+Neurologia = Neurologia
+Neurologia Croatica = Neurol. Croat.
+Neurologia Medico-Chirurgica = Neurol. Med. Chir. (Tokyo)
+Neurologia i Neurochirurgia Polska = Neurol. Neurochir. Pol.
+Neurologia, Neurochirurgia i Psychiatria Polska = Neurol. Neurochir. Psychiatr. Pol.
+Neurologia, Psihiatria, Neurochirurgia = Neurol. Psihiatr. Neurochir.
+Neurologia-Neurocirugia-Psiquiatria = Neurol. Neurocir. Psiquiatr.
+Neurologic Clinics = Neurol. Clin.
+Neurological Research = Neurol. Res.
+Neurological Sciences = Neurol. Sci.
+Neurologie et Psychiatrie = Neurol. Psychiatr. (Bucur.)
+Neurologija = Neurologija
+Neurology = Neurology
+Neurology India = Neurol. India
+Neurology and Clinical Neurophysiology = Neurol. Clin. Neurophysiol.
+Neurology, Neurophysiology, and Neuroscience = Neurol. Neurophysiol. Neurosci.
+Neuromolecular Medicine = Neuromolecular Med.
+Neuromuscular Disorders = Neuromuscul. Disord.
+Neuron = Neuron
+Neuropadiatrie = Neuropadiatrie
+Neuropathology and Applied Neurobiology = Neuropathol. Appl. Neurobiol.
+Neuropatologia Polska = Neuropatol. Pol.
+Neuropediatrics = Neuropediatrics
+Neuropeptides = Neuropeptides
+Neuropeptides (Amsterdam, Netherlands)=Neuropeptides (Amsterdam, Neth.);NRPPDD;BM
+Neuropharmacology = Neuropharmacology
+Neurophysiologie Clinique = Neurophysiol. Clin.
+Neuropsihijatrija = Neuropsihijatrija
+Neuropsychiatrie de l'Enfance et de l'Adolescence = Neuropsychiatr. Enfance Adolesc.
+Neuropsychiatry, Neuropsychology, and Behavioral Neurology = Neuropsychiatry. Neuropsychol. Behav. Neurol.
+Neuropsychobiology = Neuropsychobiology
+Neuropsychologia = Neuropsychologia
+Neuropsychology = Neuropsychology
+Neuropsychology Review = Neuropsychol. Rev.
+Neuropsychopharmacology = Neuropsychopharmacology
+Neuroradiology = Neuroradiology
+Neurorehabilitation and Neural Repair = Neurorehabil. Neural Repair
+Neuroreport = Neuroreport
+Neurorx = Neurorx
+Neuroscience = Neuroscience
+Neuroscience (Oxford, United Kingdom)=Neuroscience (Oxford, U. K.);NRSCDN;28/YR
+Neuroscience Letters = Neurosci. Lett.
+Neuroscience Letters. Supplement = Neurosci. Lett. Suppl.
+Neuroscience Research = Neurosci. Res.
+Neuroscience Research. Supplement = Neurosci. Res. Suppl.
+Neuroscience and Behavioral Physiology = Neurosci. Behav. Physiol.
+Neuroscience and Biobehavioral Reviews = Neurosci. Biobehav. Rev.
+Neurosciences Research = Neurosci. Res. (N. Y.)
+Neurosciences Research Program Bulletin = Neurosci. Res. Program Bull.
+Neurosignals=Neurosignals;NEURIQ;BM
+Neurosurgery = Neurosurgery
+Neurosurgery Clinics of North America = Neurosurg. Clin. N. Am.
+Neurosurgical Focus = Neurosurg. Focus
+Neurosurgical Review = Neurosurg. Rev.
+Neurotoxicology = Neurotoxicology
+Neurotoxicology and Teratology = Neurotoxicol. Teratol.
+Neurotoxins = Neurotoxins
+Neurourology and Urodynamics = Neurourol. Urodyn.
+Nevada Nurses Association Quarterly Newsletter = Nev. Nurses Assoc. Q. Newsl.
+Nevada RNformation = Nev. Rnformation
+New Biologist = New Biol.
+New Dentist = New Dent.
+New Diamond and Frontier Carbon Technology=New Diamond Front. Carbon Technol.;NDFTFF;6/YR
+New Directions for Child Development = New Dir. Child Dev.
+New Directions for Child and Adolescent Development = New Dir. Child Adolesc. Dev.
+New Directions for Mental Health Services = New Dir. Ment. Health Serv.
+New Directions for Youth Development = New Dir. Youth Dev.
+New England Journal of Human Services = N. Engl. J. Hum. Serv.
+New England Journal of Medicine = N. Engl. J. Med.
+New England and Regional Allergy Proceedings = N. Engl. Reg. Allergy Proc.
+New Era Nursing Image International = New Era Nurs. Image Int.
+New Horizons = New Horiz.
+New Istanbul Contribution to Clinical Science = New Istanbul Contrib. Clin. Sci.
+New Jersey Healthcare = N. J. Healthc.
+New Jersey League for Nursing News = N. J. League Nurs. News
+New Jersey Medicine = N. J. Med.
+New Jersey Nurse = N. J. Nurse
+New Journal of Chemistry=New J. Chem.;NJCHE5;M
+New Mexico Dental Journal = N. M. Dent. J.
+New Mexico Nurse = N. M. Nurse
+New Microbiologica = New Microbiol.
+New Physician = New Physician
+New York Journal of Dentistry = N. Y. J. Dent.
+New York State Dental Journal = N. Y. State Dent. J.
+New York State Journal of Medicine = N. Y. State J. Med.
+New York State Nurse = N. Y. State Nurse
+New York Times Magazine = N. Y. Times Mag.
+New York University Journal of Dentistry = N. Y. Univ. J. Dent.
+New Zealand Dental Journal = N. Z. Dent. J.
+New Zealand Health and Hospital = N. Z. Health Hospital
+New Zealand Hospital = N. Z. Hosp.
+New Zealand Journal of Marine and Freshwater Research = N. Z. J. Mar. Freshwater Res.
+New Zealand Medical Journal = N. Z. Med. J.
+New Zealand Nursing Forum = N. Z. Nurs. Forum
+New Zealand Nursing Journal = N. Z. Nurs. J.
+New Zealand School Dental Service Gazette = N. Z. Sch. Dent. Serv. Gaz.
+New Zealand Veterinary Journal = N. Z. Vet. J.
+News Bulletin, Indian Dental Association = News Bull. Indian Dent. Assoc.
+News Letter, Florence Nightingale International Nurses Association = News Lett. Florence Nightingale Int. Nurs. Assoc.
+News Letter, Maine State Nurses Association = News Lett. Maine State Nurses Assoc.
+News Notes, Ohio Dental Journal = News Notes Ohio Dent. J.
+Newsette = Newsette
+Newsletter of Biomedical Safety and Standards = Newsl. Biomed. Saf. Stand.
+Newsletter of the American Academy of Implant Dentistry = Newsl. Am. Acad. Implant Dent.
+Newsletter, American Academy of Health Administration = Newsl. Am. Acad. Health Adm.
+Newsletter, International Academy of Periodontology = Newsl. Int. Acad. Periodontol.
+Newsletter, International College of Dentists, India Section = Newsl. Int. Coll. Dent. India Sect.
+Newsletter, Springfield Dental Society = Newsl. Springfield Dent. Soc.
+Newsletter, Wisconsin League for Nursing = Newsl. Wis. League Nurs.
+Newsweek = Newsweek
+Nicaragua Odontologica = Nicar. Odontol.
+Nichidai Koko Kagaku (Nihon University Journal of Oral Science) = Nichidai Koko Kagaku
+Nicotine and Tobacco Research = Nicotine Tob. Res.
+Niedersachsisches Zahnarzteblatt = Niedersachs. Zahnarztebl.
+Nigerian Dental Journal = Niger. Dent. J.
+Nigerian Medical Journal = Niger. Med. J.
+Nigerian Nurse = Niger. Nurse
+Nihon Ago Kansetsu Gakkai Zasshi = Nihon Ago Kansetsu Gakkai Zasshi
+Nihon Arukoru Yakubutsu Igakkai Zasshi (Japanese Journal of Alcohol Studies and Drug Dependence) = Nihon Arukoru Yakubutsu Igakkai Zasshi
+Nihon Hansenbyo Gakkai Zasshi (Japanese Journal of Leprosy) = Nihon Hansenbyo Gakkai Zasshi
+Nihon Kango Kagakkai Shi (Journal of Japan Academy of Nursing Science) = Nihon Kango Kagakkaishi
+Nihon Kokyuki Gakkai Zasshi (Journal of the Japanese Respiratory Society) = Nihon Kokyuki Gakkai Zasshi
+Nihon Reoroji Gakkaishi=Nihon Reoroji Gakkaishi;NRGIAC;IRR
+Nihon Rinsho Meneki Gakkai Kaishi (Japanese Journal of Clinical Immunology) = Nihon Rinsho Meneki Gakkai Kaishi
+Nihon Rinsho Shishubyo Danwakai Kaishi (Journal of the Japanese Society of Periodontists) = Nihon Rinsho Shishubyo Danwakai Kaishi
+Nihon Shinkei Seishin Yakurigaku Zasshi (Japanese Journal of Psychopharmacology) = Nihon Shinkei Seishin Yakurigaku Zasshi
+Nippon Byori Gakkai Kaishi (Transactiones Societatis Pathologicae Japonicae) = Nippon Byori Gakkai Kaishi
+Nippon Daicho Komonbyo Gakkai Zasshi (Journal of Japan Society of Colo-Proctology) = Nippon Daicho Komonbyo Gakkai Zasshi
+Nippon Densenbyo Gakkai Zasshi = Nippon Densenbyo Gakkai Zasshi
+Nippon Eiseigaku Zasshi (Japanese Journal of Hygiene) = Nippon Eiseigaku Zasshi
+Nippon Funin Gakkai Zasshi (Japanese Journal of Fertility and Sterility) = Nippon Funin Gakkai Zasshi
+Nippon Gan Chiryo Gakkai Shi (Journal of Japan Society for Cancer Therapy) = Nippon Gan Chiryo Gakkai Shi
+Nippon Ganka Gakkai Zasshi (Acta Societatis Ophthalmologicae Japonicae) = Nippon Ganka Gakkai Zasshi
+Nippon Ganka Kiyo (Folia Ophthalmologica Japonica. Bulletin of Japanese Ophthalmology) = Nippon Ganka Kiyo
+Nippon Geka Gakkai Zasshi (Journal of Japan Surgical Society) = Nippon Geka Gakkai Zasshi
+Nippon Geka Hokan (Archiv fur Japanische Chirurgie) = Nippon Geka Hokan.
+Nippon Heikatsukin Gakkai Zasshi = Nippon Heikatsukin Gakkai Zasshi
+Nippon Hifuka Gakkai Zasshi (Japanese Journal of Dermatology) = Nippon Hifuka Gakkai Zasshi
+Nippon Hinyokika Gakkai Zasshi (Japanese Journal of Urology) = Nippon Hinyokika Gakkai Zasshi
+Nippon Hoigaku Zasshi (Japanese Journal of Legal Medicine) = Nippon Hoigaku Zasshi
+Nippon Hotetsu Shika Gakkai Zasshi = Nippon Hotetsu Shika Gakkai Zasshi
+Nippon Igaku Hoshasen Gakkai Zasshi (Nippon Acta Radiologica) = Nippon Igaku Hoshasen Gakkai Zasshi
+Nippon Ika Daigaku Zasshi (Journal of the Nippon Medical School) = Nippon Ika Daigaku Zasshi
+Nippon Ishikai Zasshi (Journal of the Japan Medical Association) = Nippon Ishikai Zasshi
+Nippon Ishinkin Gakkai Zasshi (Japanese Journal of Medical Mycology) = Nippon Ishinkin Gakkai Zasshi
+Nippon Jibiinkoka Gakkai Kaiho = Nippon Jibiinkoka Gakkai Kaiho
+Nippon Jinzo Gakkai Shi = Nippon Jinzo Gakkai Shi
+Nippon Juigaku Zasshi (Japanese Journal of Veterinary Science) = Nippon Juigaku Zasshi
+Nippon Ketsueki Gakkai Zasshi (Acta Haematologica Japonica) = Nippon Ketsueki Gakkai Zasshi
+Nippon Kinzoku Gakkaishi=Nippon Kinzoku Gakkaishi;NIKGAV;M
+Nippon Koku Geka Gakkai Zasshi = Nippon Koku Geka Gakkai Zasshi
+Nippon Kontakuto Renzu Gakkai Kaiin Dayori (Journal of Japan Contact Lens Society) = Nippon Kontakuto Renzu Gakkai Kaiin Dayori.
+Nippon Koshu Eisei Zasshi (Japanese journal of Public Health) = Nippon Koshu Eisei Zasshi
+Nippon Kyobu Geka Gakkai Zasshi (Journal of the Japanese Association for Thoracic Surgery) = Nippon Kyobu Geka Gakkai Zasshi
+Nippon Kyobu Shikkan Gakkai Zasshi (Japanese Journal of Thoracic Diseases) = Nippon Kyobu Shikkan Gakkai Zasshi
+Nippon Kyosei Shika Gakkai Zasshi (Journal of Japan Orthodontic Society) = Nippon Kyosei Shika Gakkai Zasshi
+Nippon Naibunpi Gakkai Zasshi (Folia Endocrinologica Japonica) = Nippon Naibunpi Gakkai Zasshi
+Nippon Naika Gakkai Zasshi (Journal of Japanese Society of Internal Medicine) = Nippon Naika Gakkai Zasshi
+Nippon Rai Gakkai Zasshi (Japanese Journal of Leprosy) = Nippon Rai Gakkai Zasshi
+Nippon Rinsho (Japanese Journal of Clinical Medicine) = Nippon Rinsho
+Nippon Ronen Igakkai Zasshi (Japanese Journal of Geriatrics) = Nippon Ronen Igakkai Zasshi
+Nippon Saikingaku Zasshi (Japanese Journal of Bacteriology) = Nippon Saikingaku Zasshi
+Nippon Sanka Fujinka Gakkai Zasshi (Acta Obstetrica et Gynaecologica Japonica) = Nippon Sanka Fujinka Gakkai Zasshi
+Nippon Seikeigeka Gakkai Zasshi (Journal of the Japanese Orthopaedic Association) = Nippon Seikeigeka Gakkai Zasshi
+Nippon Seirigaku Zasshi (Journal of the Physiological Society of Japan) = Nippon Seirigaku Zasshi
+Nippon Shika Hyoron (Nippon Dental Review) = Nippon Shika Hyoron.
+Nippon Shika Ishikai Zasshi (Journal of the Japan Dental Association) = Nippon Shika Ishikai Zasshi
+Nippon Shika Zairyo Kikai Gakkai Zasshi (Journal of the Japan Research Society of Dental Materials and Appliances) = Nippon Shika Zairyo Kikai Gakkai Zasshi
+Nippon Shishubyo Gakkai Kaishi (Journal of the Japanese Association of Periodontology) = Nippon Shishubyo Gakkai Kaishi
+Nippon Shokakibyo Gakkai Zasshi (Japanese Journal of Gastroenterology) = Nippon Shokakibyo Gakkai Zasshi
+Nippon Shonika Gakkai Zasshi (Acta Paediatrica Japonica) = Nippon Shonika Gakkai Zasshi
+Nippon Yakurigaku Zasshi (Folia Pharmacologica Japonica) = Nippon Yakurigaku Zasshi
+Nitric Oxide = Nitric Oxide
+No Shinkei Geka (Neurological Surgery) = No Shinkei Geka.
+No to Hattatsu = No To Hattatsu
+No to Shinkei (Brain and Nerve) = No To Shinkei
+Nobel Symposium = Nobel Symp.
+Nonprofit Management and Leadership = Nonprofit Manag. Leadersh.
+Nordic Journal of Psychiatry = Nord. J. Psychiatry
+Nordic Pulp & Paper Research Journal=Nord. Pulp Pap. Res. J.;NPPJEG;Q
+Nordisk Hygienisk Tidskrift = Nord. Hyg. Tidskr.
+Nordisk Hygienisk Tidskrift. Supplement = Nord. Hyg. Tidskr. Suppl.
+Nordisk Medicin = Nord. Med.
+Nordisk Psykiatrisk Tidsskrift = Nord. Psykiatr. Tidsskr.
+Nordisk Veterinaermedicin = Nord. Vet. Med.
+Normale und Pathologische Anatomie = Norm. Pathol. Anat. (Stuttg.)
+Norske Tannlaegeforenings Tidende = Nor. Tannlaegeforen. Tid.
+North Carolina Dental Gazette = N. C. Dent. Gaz.
+North Carolina Dental Journal = N. C. Dent. J.
+North Carolina Medical Journal = N. C. Med. J.
+Northwest Dentistry = Northwest Dent.
+Northwest Medicine = Northwest Med.
+Northwestern Dental Research = Northwest. Dent. Res.
+Northwestern University Bulletin, Dental Research and Graduate Study = Northwest. Univ. Bull. Dent. Res. Grad. Study
+Noseleutike = Noseleutike
+Noshuyo Byori (Brain Tumor Pathology) = Noshuyo Byori
+Nouvelle Presse Medicale = Nouv. Presse Med.
+Nouvelle Revue Francaise d'Hematologie = Nouv. Rev. Fr. Hematol.
+Nouvelle Revue Francaise d'Hematologie (Blood Cells) = Nouv. Rev. Fr. Hematol. Blood Cells
+Nova Scotia Medical Bulletin = N. S. Med. Bull.
+Novartis Foundation Symposium = Novartis Found. Symp.
+Novosti Meditsinskogo Priborostroeniia = Nov. Med. Priborostr.
+Novosti Meditsinskoi Tekhniki = Nov. Med. Tekh.
+Nowotwory = Nowotwory
+Nuclear Engineering and Design=Nucl. Eng. Des.;NEDEAU;24/YR
+Nuclear Fusion=Nucl. Fusion;NUFUAU;M
+Nuclear Instruments & Methods in Physics Research, Section A: Accelerators, Spectrometers, Detectors, and Associated Equipment=Nucl. Instrum. Methods Phys. Res., Sect. A;NIMAER;36/YR
+Nuclear Instruments & Methods in Physics Research, Section B: Beam Interactions with Materials and Atoms=Nucl. Instrum. Methods Phys. Res., Sect. B;NIMBEU;21/YR
+Nuclear Medicine Communications = Nucl. Med. Commun.
+Nuclear Medicine and Biology = Nucl. Med. Biol.
+Nuclear Physics A=Nucl. Phys. A;NUPABL;68/YR
+Nuclear Physics B=Nucl. Phys. B;NUPBBO;84/yr
+Nuclear Physics B, Proceedings Supplements=Nucl. Phys. B, Proc. Suppl.;NPBSE7;IRR
+Nuclear Science and Engineering=Nucl. Sci. Eng.;NSENAO;9/YR
+Nuclear Technology=Nucl. Technol.;NUTYBB;M
+Nuclear-Medizin = Nucl. Med. (Stuttg.)
+Nucleic Acids Research = Nucleic Acids Res.
+Nucleic Acids Research Supplement=Nucleic Acids Res. Suppl.;NARSCE;A
+Nucleic Acids Symposium Series = Nucleic Acids Symp. Ser.
+Nucleosides and Nucleotides = Nucleosides Nucleotides
+Nucleosides, Nucleotides & Nucleic Acids=Nucleosides, Nucleotides Nucleic Acids;NNNAFY;M
+Nucleosides, Nucleotides and Nucleic Acids = Nucleosides Nucleotides Nucleic Acids
+Nueva Enfermeria = Nueva Enferm.
+Nuklearmedizin = Nuklearmedizin
+Nukleonika=Nukleonika;NUKLAS;Q
+Nuntius Radiologicus = Nunt. Radiol.
+Nuova Rivista di Neurologia = Nuova Riv. Neurol.
+Nuovi Annali d'Igiene e Microbiologia = Nuovi Ann. Ig. Microbiol.
+Nuovo Cimento = Nuovo Cimento
+Nurse Anesthesia = Nurse Anesth.
+Nurse Author and Editor = Nurse Author Ed.
+Nurse Education Today = Nurse Educ. Today
+Nurse Educator = Nurse Educ.
+Nurse Educators Opportunities and Innovations = Nurse Educ. Oppor. Innov.
+Nurse Managers Bookshelf = Nurse Managers Bookshelf
+Nurse Practitioner = Nurse Pract.
+Nurse Practitioner Forum = Nurse Pract. Forum
+Nurses Lamp = Nurses Lamp
+Nursing = Nursing (Lond.)
+Nursing Administration Quarterly = Nurs. Adm. Q.
+Nursing BC = Nurs. BC
+Nursing Care = Nurs. Care
+Nursing Careers = Nurs. Careers
+Nursing Case Management = Nurs. Case Manag.
+Nursing Clinics of North America = Nurs. Clin. North Am.
+Nursing Diagnosis = Nurs. Diagn.
+Nursing Dynamics = Nurs. Dyn.
+Nursing Economics = Nurs. Econ.
+Nursing Education Monographs = Nurs. Educ. Monogr.
+Nursing Educators Microworld = Nurs. Educ. Microworld
+Nursing Ethics = Nurs. Ethics
+Nursing Focus = Nurs. Focus
+Nursing Forum = Nurs. Forum (Auckl.)
+Nursing History Review = Nurs. Hist. Rev.
+Nursing Homes = Nurs. Homes
+Nursing Homes and Senior Citizen Care = Nurs. Homes Sr. Citiz. Care
+Nursing Inquiry = Nurs. Inq.
+Nursing Journal = Nurs. J. (Manila)
+Nursing Journal of India = Nurs. J. India
+Nursing Journal of Singapore = Nurs. J. Singapore
+Nursing Law and Ethics = Nurs. Law Ethics
+Nursing Leadership = Nurs. Leadersh.
+Nursing Life = Nurs. Life
+Nursing Management = Nurs. Manag. (Harrow)
+Nursing Mirror = Nurs. Mirror
+Nursing Mirror and Midwives Journal = Nurs. Mirror Midwives J.
+Nursing Montreal = Nurs. Montreal
+Nursing New Zealand = Nurs. N. Z.
+Nursing News = Nurs. News (Meriden)
+Nursing Outlook = Nurs. Outlook
+Nursing Papers = Nurs. Pap.
+Nursing Practice = Nurs. Pract.
+Nursing Praxis in New Zealand = Nurs. Prax. N. Z.
+Nursing Quality Connection = Nurs. Qual. Connect.
+Nursing Quebec = Nurs. Que.
+Nursing RSA = Nurs. RSA
+Nursing Research = Nurs. Res.
+Nursing Research Conference = Nurs. Res. Conf.
+Nursing Research Report = Nurs. Res. Rep.
+Nursing Science = Nurs. Sci.
+Nursing Science Quarterly = Nurs. Sci. Q.
+Nursing Spectrum (D.C./Baltimore Metro Edition) = Nurs. Spectr. (Wash. D. C.)
+Nursing Spectrum (Florida Edition) = Nurs. Spectr. (Fla. Ed.)
+Nursing Spectrum (Greater Chicago/NE Illinois and NW Indiana Edition) = Nurs. Spectr. (Gt. Chic. NE Ill. NW Indiana Ed.)
+Nursing Spectrum (Greater Philadelphia/Tri-State ed) = Nurs. Spectr. (Gt. Phila. Tri State Ed.)
+Nursing Spectrum (New England Edition) = Nurs. Spectr. (N. Engl. Ed.)
+Nursing Staff Development Insider = Nurs. Staff Dev. Insid.
+Nursing Standard = Nurs. Stand.
+Nursing Standard. Special Supplement = Nurs. Stand. Spec. Suppl.
+Nursing Success Today = Nurs. Success Today
+Nursing Times = Nurs. Times
+Nursing and Health Care = Nurs. Health Care
+Nursing and Health Care Perspectives = Nurs. Health Care Perspect.
+Nursing in Critical Care = Nurs. Crit. Care
+Nursing the Elderly = Nurs. Elder.
+Nursingconnections = Nursingconnections
+Nutricion Hospitalaria = Nutr. Hosp.
+Nutritio et Dieta (European Review of Nutrition and Dietetics) = Nutr. Dieta Eur. Rev. Nutr. Diet.
+Nutrition = Nutrition
+Nutrition Abstracts and Reviews = Nutr. Abstr. Rev.
+Nutrition Journal = Nutr. J.
+Nutrition Research (New York, NY, United States)=Nutr. Res. (N. Y., NY, U. S.);NTRSDC;M
+Nutrition Reviews = Nutr. Rev.
+Nutrition and Cancer = Nutr. Cancer
+Nutrition and Health = Nutr. Health
+Nutrition and Metabolism = Nutr. Metab.
+Nutrition in Clinical Care = Nutr. Clin. Care
+Nutrition in Clinical Practice = Nutr. Clin. Pract.
+Nutritional Neuroscience = Nutr. Neurosci.
+O'zbekiston Kimyo Jurnali=O'zb. Kim. J.;OKJZA6;BM
+OH; Osteopathic Hospitals = OH
+OHMS Digest = OHMS Dig.
+OMICS=OMICS;OMICAE;Q
+ONA Journal = ONA J.
+ONS News = ONS News
+OOQ; Occupational Outlook Quarterly = OOQ Occup. Outlook Q.
+OR Manager = OR Manager
+OR Tech = OR Tech
+ORL-Head and Neck Nursing = ORL. Head Neck Nurs.
+ORL; Journal of Oto-Rhino-Laryngology and Its Related Specialties = ORL. J. Otorhinolaryngol. Relat. Spec.
+ORNL = ORNL
+ORO Reports = ORO Rep.
+Obesity = Obesity
+Obesity Research = Obes. Res.
+Obesity Reviews = Obes. Rev.
+Obesity Surgery = Obes. Surg.
+Obstetrica si Ginecologia = Obstet. Ginecol. (Bucur.)
+Obstetrical and Gynecological Survey = Obstet. Gynecol. Surv.
+Obstetricia y Ginecologia Latino-Americanas = Obstet. Ginecol. Lat. Am.
+Obstetrics and Gynecology = Obstet. Gynecol.
+Obstetrics and Gynecology Annual = Obstet. Gynecol. Annu.
+Obstetrics and Gynecology Clinics of North America = Obstet. Gynecol. Clin. North Am.
+Occasional Newsletter, Lindsay Club = Occas. Newsl. Lindsay Club
+Occasional Paper, Royal College of General Practitioners = Occas. Pap. R. Coll. Gen. Pract.
+Occupational Health = Occup. Health (Lond.)
+Occupational Health Nurse = Occup. Health Nurse (Auckl.)
+Occupational Health Nursing = Occup. Health Nurs.
+Occupational Health Review = Occup. Health Rev.
+Occupational Health and Safety = Occup. Health Saf.
+Occupational Medicine = Occup. Med.
+Occupational and Environmental Medicine = Occup. Environ. Med.
+Oceanography and Meteorology = Oceanogr. Meteor.
+Ocular Immunology and Inflammation = Ocul. Immunol. Inflamm.
+Ocular Surface = Ocul. Surf.
+Odont = Odont
+Odontes = Odontes
+Odontiatriki = Odontiatriki
+Odonto-Stomatologie Tropicale = Odontostomatol. Trop.
+Odontoestomatologia = Odontoestomatologia
+Odontoiatria Pratica = Odontoiatr. Prat.
+Odontoiatria; Revista Ibero-Americana de Medicina de la Boca = Odontoiatr. Rev. Iberoam. Med. Boca
+Odontologia = Odontologia
+Odontologia Atual = Odontol. Atual
+Odontologia Bonaerense = Ondontol. Bonaer.
+Odontologia Capixaba = Odontol. Capixaba
+Odontologia Chilena = Odontol. Chil.
+Odontologia Clinica = Odontol. Clin.
+Odontologia Dinamica = Odontol. Din.
+Odontologia Jalisciense = Odontol. Jalisc.
+Odontologia Peruana = Odontol. Peru.
+Odontologia Practica = Odontol. Pract.
+Odontologia Uruguaya = Odontol. Urug.
+Odontologia de Postgrado = Odontol. Postgrado
+Odontological Bulletin = Odontol. Bull.
+Odontologie Conservatrice = Odontol. Conserv.
+Odontologisk Revy = Odontol. Revy
+Odontologisk Revy. Supplement = Odontol. Revy. Suppl.
+Odontologisk Tidskrift = Odontol. Tidskr.
+Odontologiska Foreningens Tidskrift = Odontol. Foren. Tidskr.
+Odontologiska Samfundet i Finland Arsbok = Odontol. Samf. Finl. Arsb.
+Odontologo = Odontologo
+Odontology = Odontology
+Odontoprotesi = Odontoprotesi
+Odontostomatologia e Implantoprotesi = Odontostomatol. Implantoprotesi
+Odontostomatologike Proodos = Odontostomatol. Proodos
+Offentliche Gesundheitsdienst = Offentl. Gesundheitsdienst
+Offentliche Gesundheitswesen = Offentl. Gesundheitswes.
+Office = Office
+Official Journal of the Canadian Association of Critical Care Nurses = Off. J. Can. Assoc. Crit. Care Nurs.
+Official Publication, Dental Hygienists Association of the State of New York = Off. Publ. Dent. Hyg. Assoc. State N. Y.
+Oftalmologia = Oftalmologia
+Oftalmologicheskii Zhurnal = Oftalmol. Zh.
+Ohio Dental Journal = Ohio Dent. J.
+Ohio Medicine = Ohio Med.
+Ohio Nurses Review = Ohio Nurses Rev.
+Ohio State Medical Journal = Ohio State Med. J.
+Oil, Gas (Hamburg, Germany)=Oil, Gas (Hamburg, Ger.);OGEMDJ;Q
+Okajimas Folia Anatomica Japonica = Okajimas Folia Anat. Jpn.
+Oklahoma Nurse = Okla. Nurse
+Oligonucleotides = Oligonucleotides
+Omics = OMICS
+Omnia Medica et Therapeutica = Omnia Med. Ther.
+Omvardaren = Omvardaren
+Oncodevelopmental Biology and Medicine = Oncodev. Biol. Med.
+Oncogene = Oncogene
+Oncogene Research = Oncogene Res.
+Oncologia = Oncologia
+Oncologica = Oncologica
+Oncologist = Oncologist
+Oncology = Oncology
+Oncology Nursing Forum = Oncol. Nurs. Forum
+Oncology Reports = Oncol. Rep.
+Oncology Research = Oncol. Res.
+Onderstepoort Journal of Veterinary Research = Onderstepoort J. Vet. Res.
+One on One = One One
+Onkologie = Onkologie
+Online Journal of Current Clinical Trials = Online J. Curr. Clin. Trials
+Online Journal of Issues in Nursing = Online J. Issues Nurs.
+Ontario Dentist = Ont. Dent.
+Ontogenez = Ontogenez
+Operational Research Quarterly = Oper. Res. Q.
+Operations Research = Oper. Res.
+Operative Dentistry = Oper. Dent.
+Operative Dentistry. Supplement = Oper. Dent. Suppl.
+Ophthalmic Epidemiology = Ophthalmic Epidemiol.
+Ophthalmic Genetics = Ophthalmic Genet.
+Ophthalmic Paediatrics and Genetics = Ophthalmic Paediatr. Genet.
+Ophthalmic Plastic and Reconstructive Surgery = Ophthal. Plast. Reconstr. Surg.
+Ophthalmic Research = Ophthalmic Res.
+Ophthalmic Seminars = Ophthalmic Semin.
+Ophthalmic Surgery = Ophthalmic Surg.
+Ophthalmic Surgery and Lasers = Ophthalmic Surg. Lasers
+Ophthalmic Surgery, Lasers and Imaging = Ophthalmic Surg. Lasers Imaging
+Ophthalmic and Physiological Optics = Ophthalmic Physiol. Opt.
+Ophthalmologe = Ophthalmologe
+Ophthalmologica = Ophthalmologica
+Ophthalmologie = Ophtalmologie
+Ophthalmology = Ophthalmology
+Optica Acta = Opt. Acta (Lond.)
+Optical Engineering=Opt. Eng.
+Optical and Quantum Electronics=Opt. Quantum. Electron.
+Optics Communications=Opt. Commun.;OPCOB8;84/YR
+Optics Express=Opt. Express
+Optics Letters=Opt. Lett.
+Optics and Spectroscopy=Opt. Spectrosc.;OPSUA3;M
+Optometry = Optometry
+Optometry Clinics = Optom. Clin.
+Optometry and Vision Science = Optom. Vis. Sci.
+Opuscula Medica = Opusc. Med.
+Oral Diseases = Oral Dis.
+Oral Health = Oral Health
+Oral Health and Preventive Dentistry = Oral Health Prev. Dent.
+Oral Hygiene = Oral Hyg.
+Oral Implantology = Oral Implantol.
+Oral Microbiology and Immunology = Oral Microbiol. Immunol.
+Oral Oncology = Oral Oncol.
+Oral Sciences Reviews = Oral Sci. Rev.
+Oral Surgery, Oral Diagnosis = Oral Surg. Oral Diagn.
+Oral Surgery, Oral Medicine, Oral Pathology = Oral Surg. Oral Med. Oral Pathol.
+Oral Surgery, Oral Medicine, Oral Pathology, Oral Radiology and Endodontics = Oral Surg. Oral Med. Oral Pathol. Oral Radiol. Endod.
+Oral-Prophylaxe = Oralprophylaxe.
+Orale Implantologie = Orale Implantol.
+Orange County Dental Society Bulletin = Orange Cty. Dent. Soc. Bull.
+Oregon Nurse = Oreg. Nurse
+Oregon State Dental Journal = Oreg. State Dent. J.
+Organic & Biomolecular Chemistry=Org. Biomol. Chem.;OBCRAK;24/YR
+Organic Geochemistry=Org. Geochem.;ORGEDE;M
+Organic Letters = Org. Lett.
+Organic Preparations and Procedures International=Org. Prep. Proced. Int.;OPPIAK;BM
+Organic Process Research & Development=Org. Process Res. Dev.;OPRDFK;BM
+Organic Syntheses=Org. Synth.;ORSYAT;A
+Organic and Biomolecular Chemistry = Org. Biomol. Chem.
+Organizational Behavior and Human Decision Processes = Organ. Behav. Hum. Decis. Process.
+Organizational Behavior and Human Performance = Organ. Behav. Hum. Perform.
+Organizational Dynamics = Organ. Dyn.
+Organometallics=Organometallics;ORGND7;BW
+Oriental Journal of Chemistry=Orient. J. Chem.;OJCHEG;3/YR
+Origins of Life = Orig. Life
+Origins of Life and Evolution of the Biosphere = Orig. Life Evol. Biosph.
+Orizzonti della Ortopedia Odierna e della Riabilitazione = Orizz. Ortop. Odie. Riabil.
+Orthodontic Review = Orthod. Rev.
+Orthodontics and Craniofacial Research = Orthod. Craniofac. Res.
+Orthodontie Francaise = Orthod. Fr.
+Orthodontike Epitheorese = Orthod. Epitheorese
+Orthodontist = Orthodontist
+Orthopade = Orthopade
+Orthopaedic Nursing = Orthop. Nurs.
+Orthopaedic Review = Orthop. Rev.
+Orthopedic Clinics of North America = Orthop. Clin. North Am.
+Orthopedic Nursing = Orthop. Nurs.
+Orthopedics = Orthopedics
+Ortodoncia = Ortodoncia
+Ortodontia = Ortodontia
+Ortopedia Maxilar = Ortop. Maxilar
+Ortopediia Travmatologiia i Protezirovanie = Ortop. Travmatol. Protez.
+Orvosi Hetilap = Orv. Hetil.
+Osaka City Medical Journal = Osaka City Med. J.
+Osaka Daigaku Shigaku Zasshi (Journal of the Osaka University Dental Society) = Osaka Daigaku Shigaku Zasshi
+Ospedale Maggiore = Osp. Maggiore
+Ospedale Psichiatrico = Osp. Psichiatr.
+Ospedali d'Italia Chirurgia = Osp. Ital. Chir.
+Osteoarthritis and Cartilage = Osteoarthritis Cartilage
+Osteopathic Hospital = Osteopath. Hosp.
+Osteopathic Hospital Leadership = Osteopath. Hosp. Leadersh.
+Osteoporosis International = Osteoporos. Int.
+Osterreichische Dentisten Zeitschrift = Osterr. Dent. Z.
+Osterreichische Hebammenzeitung = Osterr. Hebammenztg.
+Osterreichische Kneipp-Magazin = Osterr. Kneipp. Mag.
+Osterreichische Krankenpflegezeitschrift = Osterr. Krankenpflegez.
+Osterreichische Schwesternzeitung = Osterr. Schwesternztg.
+Osterreichische Zahnarzte-Zeitung = Osterr. Zahnarzteztg.
+Osterreichische Zahnprothetik = Osterr. Zahnprothet.
+Osterreichische Zahntechniker Handwerk = Osterr. Zahntech. Handwerk
+Osterreichische Zeitschrift fur Erforschung und Bekampfung der Krebskrankheit = Osterr. Z. Erforsch. Bekampf. Krebskr.
+Osterreichische Zeitschrift fur Stomatologie = Osterr. Z. Stomatol.
+Ostomy/Wound Management = Ostomy. Wound Manage.
+Oto-Rino-Laringologia Italiana = Otorinolaringol. Ital.
+Oto-Rino-Laringologie = Otorinolaringologie.
+Otolaryngologia Polska = Otolaryngol. Pol.
+Otolaryngologic Clinics of North America = Otolaryngol. Clin. North Am.
+Otolaryngology = Otolaryngology
+Otolaryngology - Head and Neck Surgery = Otolaryngol. Head Neck Surg.
+Otolaryngology and Head and Neck Surgery = Otolaryngol. Head Neck Surg.
+Otology and Neurotology = Otol. Neurotol.
+Ou Daigaku Shigakushi = Ou Daigaku Shigakushi
+Outcomes Management for Nursing Practice = Outcomes Manag. Nurs. Pract.
+Outlook and Bulletin, Southern Dental Society of New Jersey = Outlook Bull. South. Dent. Soc. N. J.
+Oxford Reviews of Reproductive Biology = Oxf. Rev. Reprod. Biol.
+Oxford Surveys on Eukaryotic Genes = Oxf. Surv. Eukaryot. Genes
+Oxidation Communications=Oxid. Commun.;OXCODW;4/YR
+Oxidation of Metals=Oxid. Met.;OXMEAF;BM
+Oyo Yakuri=Oyo Yakuri;OYYAA2;BM
+Ozone: Science & Engineering=Ozone: Sci. Eng.;OZSEDS;BM
+PA Journal = PA J.
+PAS Reporter = PAS Rep.
+PCR Methods and Applications = PCR Methods Appl.
+PCR Reporter = PCR Rep.
+PDA Journal of Pharmaceutical Science and Technology = PDA J. Pharm. Sci. Technol.
+PDM; Physicians Drug Manual = PDM.
+PFCA Review = PFCA Rev.
+PLoS Biology = PLoS Biol.
+PLoS Computational Biology = PLoS Comput. Biol.
+PLoS Genetics = PLoS Genet.
+PLoS Medicine = PLoS Med.
+PLoS Pathogens = PLoS Pathog.
+PMSE Preprints=PMSE Prepr.;PPMRA9;SA
+PRN Forum = PRN Forum
+Pacific Medicine and Surgery = Pac. Med. Surg.
+Pacific Symposium on Biocomputing = Pac. Symp. Biocomput.
+Pacing and Clinical Electrophysiology = Pacing Clin. Electrophysiol.
+Padiatrie und Grenzgebiete = Padiatr. Grenzgeb.
+Padiatrie und Padologie = Padiatr. Padol.
+Padiatrie und Padologie. Supplementum = Padiatr. Padol. Suppl.
+Paediatria Universitatis Tokyo = Paediatr. Univ. Tokyo
+Paediatric Anaesthesia = Paediatr. Anaesth.
+Paediatric Drugs = Paediatr. Drugs
+Paediatric Nursing = Paediatr. Nurs.
+Paediatric Respiratory Reviews = Paediatr. Respir. Rev.
+Paediatric and Perinatal Epidemiology = Paediatr. Perinat. Epidemiol.
+Paediatrica Indonesiana = Paediatr. Indones.
+Paediatrician = Paediatrician
+Paedovita = Paedovita
+Pahlavi Medical Journal = Pahlavi Med. J.
+Pain = Pain
+Pain Management Nursing = Pain Manag. Nurs.
+Pain Research and Management = Pain Res. Manag.
+Pain and Headache = Pain Headache
+Pain. Supplement = Pain. Suppl.
+Pakistan Dental Review = Pak. Dent. Rev.
+Pakistan Journal of Surgery, Gynaecology and Obstetrics = Pak. J. Surg. Gynaecol. Obstet.
+Pakistan Nursing and Health Review = Pak. Nurs. Health Rev.
+Palliative Medicine = Palliat. Med.
+Palliative and Supportive Care = Palliat. Support. Care
+Pancreas = Pancreas
+Pancreatology = Pancreatology
+Panminerva Medica = Panminerva Med.
+Paper Series, United Hospital Fund of New York = Pap. Ser. United Hosp. Fund N. Y.
+Papers in Meteorology and Geophysics = Pap. Meteor. Geophys.
+Papers in Physical Oceanography and Meteorology = Pap. Phys. Oceanogr. Meteor.
+Papers, National Conference for Professional Nurses and Physicians = Pap. Natl. Conf. Prof. Nurses Physicians
+Papua New Guinea Medical Journal = P. N. G. Med. J.
+Paramedics International = Paramed. Int.
+Paraplegia = Paraplegia
+Parasite = Parasite
+Parasite Immunology = Parasite Immunol.
+Parasitology = Parasitology
+Parasitology International = Parasitol. Int.
+Parasitology Research = Parasitol. Res.
+Parassitologia = Parassitologia
+Parazitologiia = Parazitologiia
+Parking = Parking
+Parodontologia e Stomatologia (Nuova) = Parodontol. Stomatol. (Nuova)
+Parodontologie = Parodontologie
+Parodontologie and Academy Review = Parodontol. Acad. Rev.
+Paroi Arterielle = Paroi Arterielle
+Particulate Science and Technology=Part. Sci. Technol.;PTCHDS;Q
+Pathobiology = Pathobiology
+Pathobiology Annual = Pathobiol. Annu.
+Pathologe = Pathologe
+Pathologia Europaea = Pathol. Eur.
+Pathologia Veterinaria = Pathol. Vet.
+Pathologia et Microbiologia = Pathol. Microbiol. (Basel)
+Pathologica = Pathologica
+Pathologie et Biologie = Pathol. Biol.
+Pathologie-Biologie = Pathol. Biol. (Paris)
+Pathologist = Pathologist
+Pathology = Pathology (Phila.)
+Pathology Annual = Pathol. Annu.
+Pathology International = Pathol. Int.
+Pathology Oncology Research = Pathol. Oncol. Res.
+Pathology and Immunopathology Research = Pathol. Immunopathol. Res.
+Pathology, Research and Practice = Pathol. Res. Pract.
+Pathophysiology of Haemostasis and Thrombosis = Pathophysiol. Haemost. Thromb.
+Patient Accounts = Patient Acc.
+Patient Care = Patient Care
+Patient Counselling and Health Education = Patient Couns. Health Educ.
+Patient Education Newsletter = Patient Educ. Newsl.
+Patient Education and Counseling = Patient Educ. Couns.
+Patient-Focused Care = Patient. Focus. Care
+Patient-Focused Care and Satisfaction = Patient. Focus. Care Satisf.
+Patologia Polska = Patol. Pol.
+Patologia e Clinica Ostetrica e Ginecologica = Patol. Clin. Ostet. Ginecol.
+Patologicheskaia Fiziologiia i Eksperimentalnaia Terapiia = Patol. Fiziol. Eksp. Ter.
+Pavlovian Journal of Biological Science = Pavlov. J. Biol. Sci.
+Pediatria = Pediatria (Santiago)
+Pediatria Medica e Chirurgica = Pediatr. Med. Chir.
+Pediatria Panamericana = Pediatr. Panam.
+Pediatria Polska = Pediatr. Pol.
+Pediatria Pratica = Pediatr. Prat.
+Pediatric Allergy and Immunology = Pediatr. Allergy Immunol.
+Pediatric Annals = Pediatr. Ann.
+Pediatric Blood and Cancer = Pediatr. Blood Cancer
+Pediatric Cardiology = Pediatr. Cardiol.
+Pediatric Case Reviews = Pediatr. Case Rev.
+Pediatric Clinics of North America = Pediatr. Clin. North Am.
+Pediatric Dentistry = Pediatr. Dent.
+Pediatric Dermatology = Pediatr. Dermatol.
+Pediatric Emergency Care = Pediatr. Emerg. Care
+Pediatric Endocrinology Reviews = Pediatr. Endocrinol. Rev.
+Pediatric Hematology and Oncology = Pediatr. Hematol. Oncol.
+Pediatric Infectious Disease = Pediatr. Infect. Dis.
+Pediatric Infectious Disease Journal = Pediatr. Infect. Dis. J.
+Pediatric Nephrology = Pediatr. Nephrol.
+Pediatric Neurology = Pediatr. Neurol.
+Pediatric Neuroscience = Pediatr. Neurosci.
+Pediatric Neurosurgery = Pediatr. Neurosurg.
+Pediatric Nursing = Pediatr. Nurs.
+Pediatric Pathology = Pediatr. Pathol.
+Pediatric Pathology and Laboratory Medicine = Pediatr. Pathol. Lab. Med.
+Pediatric Pathology and Molecular Medicine = Pediatr. Pathol. Mol. Med.
+Pediatric Pharmacology = Pediatr. Pharmacol. (New York)
+Pediatric Pulmonology = Pediatr. Pulmonol.
+Pediatric Pulmonology. Supplement = Pediatr. Pulmonol. Suppl.
+Pediatric Radiology = Pediatr. Radiol.
+Pediatric Rehabilitation = Pediatr. Rehabil.
+Pediatric Research = Pediatr. Res.
+Pediatric Surgery International = Pediatr. Surg. Int.
+Pediatric Transplantation = Pediatr. Transplant.
+Pediatric and Developmental Pathology = Pediatr. Dev. Pathol.
+Pediatrician = Pediatrician
+Pediatrics = Pediatrics
+Pediatrics International = Pediatr. Int.
+Pediatrics in Review = Pediatr. Rev.
+Pediatrie = Pediatrie
+Pediatriia = Pediatriia
+Pediatriia, Akusherstvo i Ginekologiia = Pediatr. Akush. Ginekol.
+Pedodontie Francaise = Pedod. Fr.
+Pelican News = Pelican News
+Penn Dental Journal = Penn Dent. J. (Phila.)
+Pennsylvania Dental Journal = Pa. Dent. J. (Harrisb.)
+Pennsylvania Health and You = Pa. Health You
+Pennsylvania Medical Journal = Pa. Med. J.
+Pennsylvania Medicine = Pa. Med.
+Pennsylvania Nurse = Pa. Nurse
+People = People
+Peptide Research = Pept. Res.
+Peptides = Peptides
+Peptides (New York, NY, United States)=Peptides (N. Y., NY, U. S.);PPTDD5;M
+Perception = Perception
+Perception and Psychophysics = Percept. Psychophys.
+Perceptual and Motor Skills = Percept. Mot. Skills
+Perfusion = Perfusion
+Periodontal Abstracts / Journal of the Western Society of Periodontology = Periodontal Abstr.
+Periodontal Case Reports = Periodontal Case Rep.
+Periodontal Clinical Investigations = Periodontal Clin. Investig.
+Periodontics = Periodontics
+Periodontology 2000 = Periodontol. 2000
+Perioperative Nursing Quarterly = Perioper. Nurs. Q.
+Peritoneal Dialysis International = Perit. Dial. Int.
+Personnel = Personnel
+Personnel Administrator = Pers. Adm.
+Personnel Journal = Pers. J.
+Perspectivas = Perspectivas
+Perspectives = Perspectives (Montclair)
+Perspectives in Biology and Medicine = Perspect. Biol. Med.
+Perspectives in Healthcare Risk Management = Perspect. Healthc. Risk Manage.
+Perspectives in Nephrology and Hypertension = Perspect. Nephrol. Hypertens.
+Perspectives in Pediatric Pathology = Perspect. Pediatr. Pathol.
+Perspectives in Psychiatric Care = Perspect. Psychiatr. Care
+Perspectives in Respiratory Nursing = Perspect. Respir. Nurs.
+Perspectives on Accreditation = Perspect. Accredit.
+Perspectives on Addictions Nursing = Perspect. Addict. Nurs.
+Perspectives on Developmental Neurobiology = Perspect. Dev. Neurobiol.
+Perspectives on Medicaid Management = Perspect. Medicaid Manage.
+Perspectives on Medicaid and Medicare Management = Perspect. Medicaid Medicare Manage.
+Perspectives on Sexual and Reproductive Health = Perspect. Sex. Reprod. Health
+Pesquisa Odontologica Brasileira = Pesqui. Odontol. Bras.
+Pest Management Science = Pest Manag. Sci.
+Pesticide Biochemistry and Physiology = Pestic. Biochem. Physiol.
+Pesticides Monitoring Journal = Pestic. Monit. J.
+Petroleum Science and Technology=Pet. Sci. Technol.;PSTEFV;M
+Pflege = Pflege
+Pflege Aktuell = Pflege Aktuell
+Pflege Zeitschrift = Pflege Z.
+Pfluegers Archiv=Pfluegers Arch.;PFLABK;M
+Pflugers Archiv (European Journal of Physiology) = Pflugers Arch.
+Pflugers Archiv fur die Gesamte Physiologie des Menschen und der Tiere = Pflugers Arch. Gesamte Physiol. Menschen Tiere
+Pharmaceutica Acta Helvetiae = Pharm. Acta Helv.
+Pharmaceutical Biotechnology = Pharm. Biotechnol.
+Pharmaceutical Chemistry Journal=Pharm. Chem. J.;PCJOAU;M
+Pharmaceutical Development and Technology = Pharm. Dev. Technol.
+Pharmaceutical Research = Pharm. Res.
+Pharmaceutical Statistics = Pharm. Stat.
+Pharmaceutisch Weekblad = Pharm. Weekbl.
+Pharmaceutisch Weekblad. Scientific Edition = Pharm. Weekbl. Sci.
+Pharmacoeconomics = Pharmacoeconomics
+Pharmacogenetics = Pharmacogenetics
+Pharmacogenetics and Genomics = Pharmacogenet. Genomics
+Pharmacogenomics = Pharmacogenomics
+Pharmacogenomics Journal = Pharmacogenomics J.
+Pharmacological Reports = Pharmacol. Rep.
+Pharmacological Research = Pharmacol. Res.
+Pharmacological Research Communications = Pharmacol. Res. Commun.
+Pharmacological Reviews = Pharmacol. Rev.
+Pharmacology = Pharmacology
+Pharmacology & Therapeutics=Pharmacol. Ther.;PHTHDT;M
+Pharmacology and Therapeutics = Pharmacol. Ther.
+Pharmacology and Therapeutics in Dentistry = Pharmacol. Ther. Dent.
+Pharmacology and Therapeutics. Part B, General and Systematic Pharmacology = Pharmacol. Ther. [B]
+Pharmacology and Toxicology = Pharmacol. Toxicol.
+Pharmacology for Physicians = Pharmacol. Physicians
+Pharmacology, Biochemistry and Behavior = Pharmacol. Biochem. Behav.
+Pharmacopsychiatria = Pharmacopsychiatria
+Pharmacopsychiatry = Pharmacopsychiatry
+Pharmacotherapy = Pharmacotherapy
+Pharmacy Management Combined with the American Journal of Pharmacy = Pharm. Manage. Comb. Am. J. Pharm.
+Pharmacy Practice Management Quarterly = Pharm. Pract. Manag. Q.
+Pharmacy Times = Pharm. Times
+Pharmacy World and Science = Pharm. World Sci.
+Pharmakopsychiatrie Neuro-Psychopharmakologie = Pharmakopsychiatr. Neuropsychopharmakol.
+Pharmakotherapia = Pharmakotherapia
+Pharmatherapeutica = Pharmatherapeutica
+Pharmazeutische Praxis = Pharm. Prax.
+Pharmazeutische Zentralhalle fur Deutschland = Pharm. Zentralhalle Dtschl.
+Pharmazie = Pharmazie
+Pharmazie in Unserer Zeit = Pharm. Unserer Zeit
+Pharmeuropa Bio = Pharmeuropa Bio
+Pharos of Alpha Omega Alpha Honor Medical Society = Pharos
+Phase Transitions=Phase Transitions;PHTRDP;M
+Philippine Journal of Nursing = Philipp. J. Nurs.
+Philippine Journal of Surgery and Surgical Specialties = Philipp. J. Surg. Surg. Spec.
+Phillip Journal = Phillip J.
+Phillip Journal fur Restaurative Zahnmedizin = Phillip J. Restaur. Zahnmed.
+Philosophical Magazine=Philos. Mag.;PMHABF;36/YR
+Philosophical Magazine Letters=Philos. Mag. Lett.;PMLEEG;M
+Philosophical Transactions of the Royal Society of London = Philos. Trans. Roy. Soc. London
+Philosophical Transactions of the Royal Society of London. Series B, Biological Sciences = Philos. Trans. R. Soc. Lond. B. Biol. Sci.
+Phlebologie = Phlebologie
+Phonetica = Phonetica
+Phosphorus, Sulfur and Silicon and the Related Elements=Phosphorus, Sulfur Silicon Relat. Elem.;PSSLEC;M
+Photo-Dermatology = Photodermatol.
+Photochemical & Photobiological Sciences=Photochem. Photobiol. Sci.;PPSHCB;M
+Photochemical and Photobiological Sciences = Photochem. Photobiol. Sci.
+Photochemistry and Photobiology = Photochem. Photobiol.
+Photodermatology, Photoimmunology and Photomedicine = Photodermatol. Photoimmunol. Photomed.
+Photomedicine and Laser Surgery = Photomed. Laser Surg.
+Photophysiology = Photophysiology
+Photosynthesis Research=Photosynth. Res.;PHRSDI;M
+Physica B: Condensed Matter (Amsterdam, Netherlands)=Physica B (Amsterdam, Neth.);PHYBE3;16/YR
+Physica C: Superconductivity and Its Applications (Amsterdam, Netherlands)=Physica C (Amsterdam, Neth.);PHYCE6;68/YR
+Physica Scripta=Phys. Scr.;PHSTBO;M
+Physica Scripta, T=Phys. Scr., T;PHSTER;IRR
+Physica Status Solidi A: Applications and Materials Science=Phys. Status Solidi A;PSSABA;15/YR
+Physica Status Solidi B: Basic Solid State Physics=Phys. Status Solidi B;PSSBBD;15/YR
+Physica Status Solidi C: Conferences and Critical Reviews=Phys. Status Solidi C;PSSCGL;12/YR
+Physical Biology = Phys. Biol.
+Physical Chemistry Chemical Physics=Phys. Chem. Chem. Phys.;PPCPFQ;SM
+Physical Medicine and Rehabilitation Clinics of North America = Phys. Med. Rehabil. Clin. N. Am.
+Physical Review = Phys. Rev.
+Physical Review A: Atomic, Molecular, and Optical Physics=Phys. Rev. A: At., Mol., Opt. Phys.;PLRAAN;M
+Physical Review B: Condensed Matter and Materials Physics=Phys. Rev. B: Condens. Matter Mater. Phys.;PRBMDO;48/YR
+Physical Review C: Nuclear Physics=Phys. Rev. C: Nucl. Phys.;PRVCAN;M
+Physical Review D: Particles and Fields=Phys. Rev. D: Part. Fields;PRVDAQ;SM
+Physical Review E: Statistical, Nonlinear, and Soft Matter Physics=Phys. Rev. E: Stat., Nonlinear, Soft Matter Phys.;PRESCM;M
+Physical Review Letters = Phys. Rev. Lett.
+Physical Review. E, Statistical, Nonlinear, and Soft Matter Physics = Phys. Rev. E Stat. Nonlin. Soft Matter Phys.
+Physical Therapy = Phys. Ther.
+Physician Assistant = Physician Assist.
+Physician Assistant. Health Practitioner = Physician Assist. Health Pract.
+Physician Executive = Physician Exec.
+Physician Relations Update = Physician Relat. Update
+Physicians Management = Physicians Manage.
+Physics Letters A=Phys. Lett. A;PYLAAG;84/YR
+Physics Letters B=Phys. Lett. B;PYLBAJ;W
+Physics and Chemistry of Glasses=Phys. Chem. Glasses;PCGLA6;BM
+Physics and Chemistry of Liquids=Phys. Chem. Liq.;PCLQAC;6/YR
+Physics and Chemistry of Minerals=Phys. Chem. Miner.;PCMIDU;10/YR
+Physics and Chemistry of the Earth B = Phys. Chem Earth B
+Physics in Medicine and Biology = Phys. Med. Biol.
+Physics of Atomic Nuclei=Phys. At. Nucl.;PANUEO;M
+Physics of Fluids = Phys. Fluids
+Physics of Plasmas=Phys. Plasmas;PHPAEN;M
+Physics of the Solid State=Phys. Solid State;PSOSED;M
+Physikalische Zeitschrift = Phys. Z.
+Physiologia Bohemoslovaca = Physiol. Bohemoslov.
+Physiologia Bohemoslovenica = Physiol. Bohemoslov.
+Physiologia Plantarum=Physiol. Plant.;PHPLAI;M
+Physiological Chemistry and Physics = Physiol. Chem. Phys.
+Physiological Chemistry and Physics and Medical NMR = Physiol. Chem. Phys. Med. NMR
+Physiological Genomics = Physiol. Genomics
+Physiological Measurement = Physiol. Meas.
+Physiological Research = Physiol. Res.
+Physiological Reviews = Physiol. Rev.
+Physiological Zoology = Physiol. Zool.
+Physiological and Biochemical Zoology = Physiol. Biochem. Zool.
+Physiologie = Physiologie
+Physiologist = Physiologist
+Physiology = Physiology
+Physiology & Behavior=Physiol. Behav.;PHBHA4;15/YR
+Physiology Teacher = Physiol. Teach.
+Physiology and Behavior = Physiol. Behav.
+Physiology and Pharmacology for Physicians = Physiol. Pharmacol. Physicians
+Physiotherapy = Physiotherapy
+Physiotherapy Canada = Physiother. Can.
+Physiotherapy Research International = Physiother. Res. Int.
+Phytochemical Analysis=Phytochem. Anal.;PHANEL;BM
+Phytochemistry = Phytochemistry
+Phytochemistry (Elsevier)=Phytochemistry (Elsevier);PYTCAS;SM
+Phytochemistry Reviews=Phytochem. Rev.;PRHEBS;3/YR
+Phytomedicine = Phytomedicine
+Phytopathology = Phytopathology
+Phytotherapy Research = Phytother. Res.
+Pielegniarka i Polozna = Pieleg. Polozna
+Pigment Cell Research = Pigment Cell Res.
+Pituitary = Pituitary
+Placenta = Placenta
+Placenta. Supplement = Placenta. Suppl.
+Plant Cell = Plant Cell
+Plant Cell Reports=Plant Cell Rep.;PCRPD8;12/YR
+Plant Foods for Human Nutrition = Plant Foods Hum. Nutr.
+Plant Growth Regulation=Plant Growth Regul.;PGRED3;9/YR
+Plant Journal = Plant J.
+Plant Molecular Biology = Plant Mol. Biol.
+Plant Physiology = Plant Physiol.
+Plant Physiology and Biochemistry (Amsterdam, Netherlands)=Plant Physiol. Biochem. (Amsterdam, Neth.);PPBIEX;M
+Plant Science (Amsterdam, Netherlands)=Plant Sci. (Amsterdam, Neth.);PLSCE4;M
+Plant and Cell Physiology = Plant Cell Physiol.
+Plant and Soil=Plant Soil;PLSOA2;20/YR
+Planta = Planta
+Planta Medica = Planta Med.
+Plasma Chemistry and Plasma Processing=Plasma Chem. Plasma Process.;PCPPDW;BM
+Plasma Processes and Polymers=Plasma Processes Polym.;PPPLA6;9/YR
+Plasmid = Plasmid
+Plastic Surgical Nursing = Plast. Surg. Nurs.
+Plastic and Reconstructive Surgery = Plast. Reconstr. Surg.
+Plasticheskie Massy=Plast. Massy;PLMSAI;IRR
+Plastics, Rubber and Composites=Plast., Rubber Compos.;PRUCFN;10/YR
+Platelets=Platelets;PLTEEF;8/YR
+Plucne Bolesti = Plucne Bolesti
+Plucne Bolesti i Tuberkuloza = Plucne Bolesti Tuberk.
+Plugger; Iowa Dental Assistants Journal = Plugger.
+Pneumoftiziologia = Pneumoftiziologia
+Pneumologie = Pneumologie
+Pneumonologia Polska = Pneumonol. Pol.
+Pneumonologia i Alergologia Polska = Pneumonol. Alergol. Pol.
+Pneumonologie = Pneumonologie
+Policlinico. Sezione Chirurgica = Policlinico. [Chir.]
+Policlinico. Sezione Medica = Policlinico. [Med.]
+Policlinico. Sezione Pratica = Policlinico. [Prat.]
+Policy Analysis = Policy Anal.
+Policy Statement, Royal College of General Practitioners = Policy Statement R. Coll. Gen. Pract.
+Polimery w Medycynie = Polim. Med.
+Polish Journal of Chemistry=Pol. J. Chem.;PJCHDQ;M
+Polish Journal of Microbiology = Pol. J. Microbiol.
+Polish Journal of Occupational Medicine = Pol. J. Occup. Med.
+Polish Journal of Occupational Medicine and Environmental Health = Pol. J. Occup. Med. Environ. Health
+Polish Journal of Pathology = Pol. J. Pathol.
+Polish Journal of Pharmacology = Pol. J. Pharmacol.
+Polish Journal of Pharmacology and Pharmacy = Pol. J. Pharmacol. Pharm.
+Polish Journal of Veterinary Sciences = Pol. J. Vet. Sci.
+Polish Medical Journal = Pol. Med. J.
+Polish Medical Sciences and History Bulletin = Pol. Med. Sci. Hist. Bull.
+Polski Merkuriusz Lekarski = Pol. Merkuriusz Lek.
+Polski Przeglad Chirurgiczny = Pol. Przegl. Chir.
+Polski Przeglad Radiologii = Pol. Przegl. Radiol.
+Polski Przeglad Radiologii i Medycyny Nuklearnej = Pol. Przegl. Radiol. Med. Nukl.
+Polski Tygodnik Lekarski = Pol. Tyg. Lek.
+Polskie Archiwum Medycyny Wewnetrznej = Pol. Arch. Med. Wewn.
+Polskie Archiwum Weterynaryjne = Pol. Arch. Weter.
+Polycyclic Aromatic Compounds=Polycyclic Aromat. Compd.;PARCEO;5/YR
+Polyhedron=Polyhedron;PLYHDE;18/YR
+Polymer=Polymer;POLMAG;BW
+Polymer (Korea)=Polymer (Korea);POLLDG;BM
+Polymer Bulletin (Heidelberg, Germany)=Polym. Bull. (Heidelberg, Ger.);POBUDR;M
+Polymer Composites=Polym. Compos.;PCOMDI;BM
+Polymer Degradation and Stability=Polym. Degrad. Stab.;PDSTDW;M
+Polymer Engineering and Science=Polym. Eng. Sci.;PYESAZ;M
+Polymer International=Polym. Int.;PLYIEI;M
+Polymer Journal (Tokyo, Japan)=Polym. J. (Tokyo, Jpn.);POLJB8;M
+Polymer Preprints (American Chemical Society, Division of Polymer Chemistry)=Polym. Prepr. (Am. Chem. Soc., Div. Polym. Chem.);ACPPAY;SA
+Polymer Testing=Polym. Test.;POTEDZ;8/YR
+Polymer-Plastics Technology and Engineering=Polym.-Plast. Technol. Eng.;PPTEC7;9/YR
+Polymers & Polymer Composites=Polym. Polym. Compos.;PPOCEC;8/YR
+Polymers for Advanced Technologies=Polym. Adv. Technol.;PADTE5;M
+Population Reports. Series A, Oral Contraceptives = Popul. Rep. A
+Population Reports. Series B, Intrauterine Devices = Popul. Rep. B
+Population Reports. Series C, Female Sterilization = Popul. Rep. C
+Population Reports. Series C, Sterilization Female = Popul. Rep. C
+Population Reports. Series D, Male Sterilization = Popul. Rep. D
+Population Reports. Series D, Sterilization Male = Popul. Rep. D
+Population Reports. Series E, Law and Policy = Popul. Rep. E
+Population Reports. Series F, Pregnancy Termination = Popul. Rep. F
+Population Reports. Series G, Prostaglandins = Popul. Rep. G
+Population Reports. Series H, Barrier Methods = Popul. Rep. H
+Population Reports. Series I, Periodic Abstinence = Popul. Rep. I
+Population Reports. Series J, Family Planning Programs = Popul. Rep. J
+Population Reports. Series K, Injectables and Implants = Popul. Rep. K
+Population Reports. Series L, Issues in World Health = Popul. Rep. L
+Population Reports. Series M, Special Topic Monographs = Popul. Rep. M
+Population Reports. Series M, Special Topics = Popul. Rep. M
+Population Reports. Special Topic Monographs = Popul. Rep. Spec. Top. Monogr.
+Population Trends = Popul. Trends
+Postepy Biochemii = Postepy Biochem.
+Postepy Higieny i Medycyny Doswiadczalnej = Postepy Hig. Med. Dosw.
+Postgraduate Medical Journal = Postgrad. Med. J.
+Postgraduate Medicine = Postgrad. Med.
+Poultry Science = Poult. Sci.
+Poumon et le Coeur = Poumon Coeur
+Poverkhnost=Poverkhnost;PFKMDJ;M
+Powder Diffraction=Powder Diffr.;PODIE2;Q
+Powder Metallurgy=Powder Metall.;PWMTAU;Q
+Powder Metallurgy and Metal Ceramics=Powder Metall. Met. Ceram.;PMMCEF;BM
+Powder Technology=Powder Technol.;POTEBX;33/YR
+Prace, Lodzkie Towarzystwo Naukowe, Wydzial IV, Nauk Lekarskich = Pr. Lodz. Tow. Nauk. [IV]
+Pracovni Lekarstvi = Prac. Lek.
+Practica Odontologica = Pract. Odontol.
+Practica Oto-Rhino-Laryngologica = Pract. Otorhinolaryngol. (Basel)
+Practical Dental Monographs = Pract. Dent. Monogr.
+Practical Periodontics and Aesthetic Dentistry = Pract. Periodontics Aesthet. Dent.
+Practical Spectroscopy=Pract. Spectrosc.;PSPED9;IRR
+Practice Digest = Pract. Dig.
+Practicing Midwife = Pract. Midwife
+Practitioner = Practitioner
+Prague Medical Report = Prague Med. Rep.
+Prairie Rose = Prairie Rose
+Prakticke Zubni Lekarstvi = Prakt. Zubn. Lek.
+Praktische Anaesthesie, Wiederbelebung und Intensivtherapie = Prakt. Anaesth.
+Praktische Kieferorthopadie = Prakt. Kieferorthop.
+Praxis = Praxis
+Praxis der Kinderpsychologie und Kinderpsychiatrie = Prax. Kinderpsychol. Kinderpsychiatr.
+Praxis der Kinderpsychologie und Kinderpsychiatrie. Beiheft = Prax. Kinderpsychol. Kinderpsychiatr. Beih.
+Praxis der Pneumologie = Prax. Pneumol.
+Praxis und Klinik der Pneumologie = Prax. Klin. Pneumol.
+Precambrian Research=Precambrian Res.;PCBRBY;32/YR
+Prehospital Emergency Care = Prehosp. Emerg. Care
+Prehospital and Disaster Medicine = Prehospital Disaster Med.
+Prenatal Diagnosis = Prenat. Diagn.
+Prensa Medica Argentina = Prensa Med. Argent.
+Prensa Medica Mexicana = Prensa Med. Mex.
+Preparative Biochemistry = Prep. Biochem.
+Preparative Biochemistry & Biotechnology=Prep. Biochem. Biotechnol.;PBBIF4;Q
+Preparative Biochemistry and Biotechnology = Prep. Biochem. Biotechnol.
+Preprints - American Chemical Society, Division of Petroleum Chemistry=Prepr. - Am. Chem. Soc., Div. Pet. Chem.;ACPCAT;4/YR
+Preprints of Symposia - American Chemical Society, Division of Fuel Chemistry=Prepr. Symp. - Am. Chem. Soc., Div. Fuel Chem.;PSADFZ;2/YR
+Prescrire International = Prescrire Int.
+Presse Medicale = Presse Med.
+Presse Thermale et Climatique = Presse Therm. Clim.
+Preventing Chronic Disease = Prev. Chronic. Dis.
+Prevention Science = Prev. Sci.
+Prevention in Human Services = Prev. Hum. Serv.
+Preventive Cardiology = Prev. Cardiol.
+Preventive Medicine = Prev. Med.
+Preventive Veterinary Medicine = Prev. Vet. Med.
+Prevenzione Stomatologica = Prev. Stomatol.
+Prevenzione e Assistenza Dentale = Prev. Assist. Dent.
+Pride Institute Journal of Long Term Home Health Care = Pride Inst. J. Long Term Home Health Care
+Prikladnaia Biokhimiia i Mikrobiologiia = Prikl. Biokhim. Mikrobiol.
+Primary Care = Prim. Care
+Primary Dental Care = Prim. Dent. Care
+Primates in Medicine = Primates Med.
+Princess Takamatsu Symposia = Princess Takamatsu Symp.
+Pro Re Nata = Pro Re Nata
+Probe = Probe
+Problemes Actuels d Oto-Rhino-Laryngologie = Probl. Actuels Otorhinolaryngol.
+Problemes Actuels d'Endocrinologie et de Nutrition = Probl. Actuels Endocrinol. Nutr.
+Problemi na Khigienata = Probl. Khig.
+Problems in Veterinary Medicine = Probl. Vet. Med.
+Problemy Endokrinologii = Probl. Endokrinol. (Mosk.)
+Problemy Endokrinologii i Gormonoterapii = Probl. Endokrinol. Gormonoter.
+Problemy Gematologii i Perelivaniia Krovi = Probl. Gematol. Pereliv. Krovi
+Problemy Kosmicheskoi Biologii = Probl. Kosm. Biol.
+Problemy Medycyny Wieku Rozwojowego = Probl. Med. Wieku Rozwoj.
+Problemy Severa = Probl. Sev.
+Problemy Sotsialnoi Gigieny i Istoriia Meditsiny = Probl. Sotsialnoi Gig. Istor. Med.
+Problemy Tuberkuleza = Probl. Tuberk.
+Proceedings - Electrochemical Society=Proc. - Electrochem. Soc.;PESODO;IRR
+Proceedings and Papers of the Annual Conference of the California Mosquito Control Association = Proc. Pap. Annu. Conf. Calif. Mosq. Control Assoc.
+Proceedings of the American Thoracic Society = Proc. Am. Thorac. Soc.
+Proceedings of the Annual Clinical Spinal Cord Injury Conference = Proc. Annu. Clin. Spinal Cord Inj. Conf.
+Proceedings of the Annual Conference on Research in Medical Education = Proc. Annu. Conf. Res. Med. Educ.
+Proceedings of the Annual Meeting of the American Psychopathological Association = Proc. Annu. Meet. Am. Psychopathol. Assoc.
+Proceedings of the Annual Symposium of the Eugenics Society = Proc. Annu. Symp. Eugen. Soc.
+Proceedings of the Association of American Physicians = Proc. Assoc. Am. Physicians
+Proceedings of the Australian Association of Neurologists = Proc. Aust. Assoc. Neurol.
+Proceedings of the British Paedodontic Society = Proc. Br. Paedod. Soc.
+Proceedings of the British Society of Dental and Maxillofacial Radiology = Proc. Br. Soc. Dent. Maxillofac. Radiol.
+Proceedings of the Cardiff Medical Society = Proc. Cardiff Med. Soc.
+Proceedings of the Chinese Academy of Medical Sciences and the Peking Union Medical College = Proc. Chin. Acad. Med. Sci. Peking Union Med. Coll.
+Proceedings of the Clinical Dialysis and Transplant Forum = Proc. Clin. Dial. Transplant Forum
+Proceedings of the Estonian Academy of Sciences, Chemistry=Proc. Est. Acad. Sci., Chem.;PESCFO;Q
+Proceedings of the European Dialysis and Transplant Association = Proc. Eur. Dial. Transplant Assoc.
+Proceedings of the European Dialysis and Transplant Association - European Renal Association = Proc. Eur. Dial. Transplant Assoc. Eur. Ren. Assoc.
+Proceedings of the European Prosthodontic Association = Proc. Eur. Prosthodontic Assoc.
+Proceedings of the Finnish Dental Society = Proc. Finn. Dent. Soc.
+Proceedings of the Health Policy Forum = Proc. Health Policy Forum
+Proceedings of the Institute of Medicine of Chicago = Proc. Inst. Med. Chic.
+Proceedings of the Institution of Mechanical Engineers. Part H, Journal of Engineering in Medicine = Proc. Inst. Mech. Eng. [H]
+Proceedings of the International Academy of Oral Pathology = Proc. Int. Acad. Oral Pathol.
+Proceedings of the Koninklijke Nederlandse Akademie Van Wetenschappen. Series C: Biological and Medical Sciences = Proc. K. Ned. Akad. Wet. C
+Proceedings of the Mine Medical Officers Association = Proc. Mine Med. Off. Assoc.
+Proceedings of the Mine Medical Officers Association of SA = Proc. Mine Med. Off. Assoc. SA
+Proceedings of the National Academy of Sciences of the United States of America = Proc. Natl. Acad. Sci. U. S. A.
+Proceedings of the National Cancer Conference = Proc. Natl. Cancer Conf.
+Proceedings of the National Science Council, Republic of China. Part B, Life Sciences = Proc. Natl. Sci. Counc. Repub. China B
+Proceedings of the Nutrition Society = Proc. Nutr. Soc.
+Proceedings of the Physiological Society = Proc. Physiol. Soc.
+Proceedings of the Royal Irish Academy. Section B: Biological, Geological and Chemical Science = Proc. R. Ir. Acad. [B]
+Proceedings of the Royal Society of London = Proc. Roy. Soc. London
+Proceedings of the Royal Society of London. Series B: Biological Sciences = Proc. R. Soc. Lond. B Biol. Sci.
+Proceedings of the Royal Society of Medicine = Proc. R. Soc. Med.
+Proceedings of the Rudolf Virchow Medical Society in the City of New York = Proc. Rudolf Virchow Med. Soc. City N. Y.
+Proceedings of the Society for Experimental Biology and Medicine = Proc. Soc. Exp. Biol. Med.
+Proceedings of the Veterans Administration Spinal Cord Injury Conference = Proc. Veterans Adm. Spinal Cord Inj. Conf.
+Proceedings of the Virchow-Pirquet Medical Society = Proc. Virchow. Pirquet Med. Soc.
+Proceedings of the Weekly Seminar in Neurology = Proc. Wkly. Semin. Neurol.
+Proceedings of the Western Pharmacology Society = Proc. West. Pharmacol. Soc.
+Proceedings, AMIA Annual Fall Symposium = Proc. AMIA Annu. Fall Symp.
+Proceedings, AMIA Annual Symposium = Proc. AMIA Symp.
+Proceedings, AMIA Symposium = Proc. AMIA Symp.
+Proceedings, Annual Management Conference, American Dental Association = Proc. Annu. Manage. Conf. Am. Dent. Assoc.
+Proceedings, Annual Meeting of the Medical Section of the American Council of Life Insurance = Proc. Annu. Meet. Med. Sect. Am. Counc. Life Insur.
+Proceedings, Annual Meeting of the Medical Section of the American Life Convention = Proc. Annu. Meet. Med. Sect. Am. Life Conv.
+Proceedings, Annual Meeting of the Medical Section of the American Life Insurance Association = Proc. Annu. Meet. Med. Sect. Am. Life Insur. Assoc.
+Proceedings, Annual Meeting of the United States Animal Health Association = Proc. Annu. Meet. U. S. Anim. Health Assoc.
+Proceedings, Annual Symposium on Computer Applications in Medical Care = Proc. Annu. Symp. Comput. Appl. Med. Care
+Proceedings, Foundation for Orthodontic Research = Proc. Found. Orthod. Res.
+Proceedings, International Conference on Intelligent Systems for Molecular Biology = Proc. Int. Conf. Intell. Syst. Mol. Biol.
+Proceedings, National Conference on Methadone Treatment = Proc. Natl. Conf. Methadone Treat.
+Proceedings, Nursing Theory Conference = Proc. Nurs. Theory Conf.
+Proceedings, Royal Society of Edinburgh. Section B: Biology = Proc. R. Soc. Edinb. [Biol.]
+Proceedings, Royal Society of Edinburgh. Section B: Natural Environment = Proc. R. Soc. Edinb. [Nat. Environ.]
+Proceedings, State Secretaries Management Conference, American Dental Association = Proc. State Secr. Manage. Conf. Am. Dent. Assoc.
+Process Biochemistry (Oxford, United Kingdom)=Process Biochem. (Oxford, U. K.);PBCHE5;12/YR
+Process Safety and Environmental Protection=Process Saf. Environ. Prot.;PSEPEM;6/YR
+Produits et Problemes Pharmaceutiques = Prod. Probl. Pharm.
+Professional Care of Mother and Child = Prof. Care Mother Child
+Professional Flashes = Prof. Flashes
+Professional Nurse = Prof. Nurse
+Professional Nursing Home = Prof. Nurs. Home
+Professional Safety = Prof. Saf.
+Professional Sanitation Management = Prof. Sanit. Manage.
+Professioni Infermieristiche = Prof. Inferm.
+Profile of Medical Practice = Profile Med. Pract.
+Profiles in Healthcare Marketing = Profiles Healthc. Mark.
+Profiles in Hospital Marketing = Profiles Hosp. Mark.
+Program Notes, Association of University Programs in Health Administration = Program Notes Assoc. Univ. Programs Health Adm.
+Progres Medical = Progr. Med. (Paris.)
+Progres Odonto-Stomatologique = Prog. Odontostomatol.
+Progres en Urologie = Prog. Urol.
+Progresos de Terapeutica Clinica = Progr. Ter. Clin.
+Progress in AIDS Pathology = Prog. AIDS Pathol.
+Progress in Allergy = Prog. Allergy
+Progress in Atomic Medicine = Prog. At. Med.
+Progress in Behavior Modification = Prog. Behav. Modif.
+Progress in Biochemical Pharmacology = Prog. Biochem. Pharmacol.
+Progress in Biocybernetics = Prog. Biocybern.
+Progress in Biometeorology, Division A: Progress in Human Biometeorology = Prog. Biometeorol.
+Progress in Biophysics and Molecular Biology = Prog. Biophys. Mol. Biol.
+Progress in Brain Research = Prog. Brain Res.
+Progress in Cardiovascular Diseases = Prog. Cardiovasc. Dis.
+Progress in Cardiovascular Nursing = Prog. Cardiovasc. Nurs.
+Progress in Cell Cycle Research = Prog. Cell Cycle Res.
+Progress in Chemical Toxicology = Prog. Chem. Toxicol.
+Progress in Clinical Cancer = Prog. Clin. Cancer
+Progress in Clinical Immunology = Prog. Clin. Immunol.
+Progress in Clinical Parasitology = Prog. Clin. Parasitol.
+Progress in Clinical Pathology = Prog. Clin. Pathol.
+Progress in Clinical and Biological Research = Prog. Clin. Biol. Res.
+Progress in Colloid & Polymer Science=Prog. Colloid Polym. Sci.;PCPSD7;IRR
+Progress in Crystal Growth and Characterization of Materials=Prog. Cryst. Growth Charact. Mater.;PCGMED;BM
+Progress in Drug Research = Prog. Drug Res.
+Progress in Experimental Personality Research = Prog. Exp. Pers. Res.
+Progress in Experimental Personality and Psychopathology Research = Prog. Exp. Pers. Psychopathol. Res.
+Progress in Experimental Tumor Research = Prog. Exp. Tumor Res.
+Progress in Food and Nutrition Science = Prog. Food Nutr. Sci.
+Progress in Growth Factor Research = Prog. Growth Factor Res.
+Progress in Hematology = Prog. Hematol.
+Progress in Hemostasis and Thrombosis = Prog. Hemost. Thromb.
+Progress in Histochemistry and Cytochemistry = Prog. Histochem. Cytochem.
+Progress in Immunobiological Standardization = Prog. Immunobiol. Stand.
+Progress in Industrial Microbiology = Prog. Ind. Microbiol.
+Progress in Inorganic Chemistry=Prog. Inorg. Chem.;PIOCAR;IRR
+Progress in Lipid Research = Prog. Lipid Res.
+Progress in Liver Diseases = Prog. Liver Dis.
+Progress in Medical Genetics = Prog. Med. Genet.
+Progress in Medical Virology = Prog. Med. Virol.
+Progress in Medicinal Chemistry = Prog. Med. Chem.
+Progress in Molecular and Subcellular Biology = Prog. Mol. Subcell. Biol.
+Progress in Neuro-Psychopharmacology = Prog. Neuropsychopharmacol.
+Progress in Neuro-Psychopharmacology and Biological Psychiatry = Prog. Neuropsychopharmacol. Biol. Psychiatry
+Progress in Neurobiology = Prog. Neurobiol.
+Progress in Neurology and Psychiatry = Prog. Neurol. Psychiatry
+Progress in Nuclear Magnetic Resonance Spectroscopy=Prog. Nucl. Magn. Reson. Spectrosc.;PNMRAT;8/YR
+Progress in Nuclear Medicine = Prog. Nucl. Med.
+Progress in Nucleic Acid Research and Molecular Biology = Prog. Nucleic Acid Res. Mol. Biol.
+Progress in Organic Coatings=Prog. Org. Coat.;POGCAT;12/YR
+Progress in Pediatric Surgery = Prog. Pediatr. Surg.
+Progress in Physical Therapy = Prog. Phys. Ther.
+Progress in Polymer Science=Prog. Polym. Sci.;PRPSB8;M
+Progress in Reaction Kinetics and Mechanism=Prog. React. Kinet. Mech.;PRKMF3;4/YR
+Progress in Retinal and Eye Research = Prog. Retin. Eye Res.
+Progress in Solid State Chemistry=Prog. Solid State Chem.;PSSTAW;Q
+Progress in Surface Science=Prog. Surf. Sci.;PSSFBP;SM
+Progress in Surgery = Prog. Surg.
+Progress in Veterinary Microbiology and Immunology = Prog. Vet. Microbiol. Immunol.
+Progress in the Chemistry of Fats and Other Lipids = Prog. Chem. Fats Other Lipids
+Progressive Architecture = Prog. Archit.
+Progressive Nurse = Progress. Nurse
+Progresso Medico = Progr. Med. (Napoli)
+Progresso Odontoiatrico = Prog. Odontoiatr.
+Promoting Health = Promot. Health
+Promotion Dentaire = Promot. Dent.
+Promotion et Education = Promot. Educ.
+Propellants, Explosives, Pyrotechnics=Propellants, Explos., Pyrotech.;PEPYD5;BM
+Prophylaxie Sanitaire et Morale = Prophyl. Sanit. Morale
+Prostaglandins = Prostaglandins
+Prostaglandins & Other Lipid Mediators=Prostaglandins Other Lipid Mediators;POLMFL;3/yr
+Prostaglandins Leukotrienes and Essential Fatty Acids = Prostaglandins Leukot. Essent. Fatty Acids
+Prostaglandins and Medicine = Prostaglandins Med.
+Prostaglandins and Other Lipid Mediators = Prostaglandins Other Lipid Mediat.
+Prostaglandins, Leukotrienes and Essential Fatty Acids=Prostaglandins, Leukotrienes Essent. Fatty Acids;PLEAEU;M
+Prostaglandins, Leukotrienes and Medicine = Prostaglandins. Leukot. Med.
+Prostate = Prostate
+Prostate. Supplement = Prostate. Suppl.
+Prosthetics and Orthotics International = Prosthet. Orthot. Int.
+Protection of Metals=Prot. Met.;PTNMAR;BM
+Protein Engineering = Protein Eng.
+Protein Engineering, Design & Selection=Protein Eng., Des. Sel.;PEDSBR;M
+Protein Engineering, Design and Selection = Protein Eng. Des. Sel.
+Protein Expression and Purification = Protein Expr. Purif.
+Protein Journal = Protein J.
+Protein Profile = Protein Profile
+Protein Reviews on the Web = Protein Rev. Web
+Protein Science = Protein Sci.
+Protein Sequences and Data Analysis = Protein Seq. Data Anal.
+Protein and Peptide Letters=Protein Pept. Lett.;PPELEN;8/YR
+Proteins = Proteins
+Proteins: Structure, Function, and Bioinformatics=Proteins: Struct., Funct., Bioinf.;PSFBAF;16/YR
+Proteomics = Proteomics
+Protesista Dental = Protes. Dent.
+Protetyka Stomatologiczna = Protet. Stomatol.
+Protist = Protist
+Protoplasma = Protoplasma
+Provider = Provider
+Przeglad Dermatologiczny = Przegl. Dermatol.
+Przeglad Epidemiologiczny = Przegl. Epidemiol.
+Przeglad Lekarski = Przegl. Lek.
+Przemysl Chemiczny=Przem. Chem.;PRCHAB;M
+Psihoterapija = Psihoterapija
+Psyche = Psyche (Stuttg.)
+Psychiatria Clinica = Psychiatr. Clin. (Basel)
+Psychiatria Polska = Psychiatr. Pol.
+Psychiatria et Neurologia = Psychiatr. Neurol. (Basel)
+Psychiatria, Neurologia, Neurochirurgia = Psychiatr. Neurol. Neurochir.
+Psychiatric Clinics of North America = Psychiatr. Clin. North Am.
+Psychiatric Communications = Psychiatr. Commun.
+Psychiatric Developments = Psychiatr. Dev.
+Psychiatric Genetics = Psychiatr. Genet.
+Psychiatric Hospital = Psychiatr. Hosp.
+Psychiatric Journal of the University of Ottawa = Psychiatr. J. Univ. Ott.
+Psychiatric Medicine = Psychiatr. Med.
+Psychiatric News = Psychiatr. News
+Psychiatric Quarterly = Psychiatr. Q.
+Psychiatric Quarterly. Supplement = Psychiatr. Q. Suppl.
+Psychiatric Research Reports = Psychiatr. Res. Rep. Am. Psychiatr. Assoc.
+Psychiatric Services = Psychiatr. Serv.
+Psychiatrie de l'Enfant = Psychiatr. Enfant
+Psychiatrie, Neurologie und Medizinische Psychologie = Psychiatr. Neurol. Med. Psychol. (Leipz.)
+Psychiatrie, Neurologie und Medizinische Psychologie. Beihefte = Psychiatr. Neurol. Med. Psychol. Beih.
+Psychiatrische Praxis = Psychiatr. Prax.
+Psychiatry = Psychiatry
+Psychiatry Digest = Psychiatry Dig.
+Psychiatry Research = Psychiatry Res.
+Psychiatry and Clinical Neurosciences = Psychiatry Clin. Neurosci.
+Psychiatry in Medicine = Psychiatry Med.
+Psycho-Oncology = Psychooncology.
+Psychoanalytic Quarterly = Psychoanal. Q.
+Psychoanalytic Review = Psychoanal. Rev.
+Psychoanalytic Study of the Child = Psychoanal. Study Child
+Psychological Bulletin = Psychol. Bull.
+Psychological Issues = Psychol. Issues
+Psychological Medicine = Psychol. Med.
+Psychological Medicine. Monograph Supplement = Psychol. Med. Monogr. Suppl.
+Psychological Methods = Psychol. Methods
+Psychological Monographs = Psychol. Monogr.
+Psychological Reports = Psychol. Rep.
+Psychological Research = Psychol. Res.
+Psychological Review = Psychol. Rev.
+Psychologie et Neuropsychiatrie du Vieillissement = Psychol. Neuropsychiatr. Vieil.
+Psychologische Forschung = Psychol. Forsch.
+Psychologische Praxis = Psychol. Prax.
+Psychology and Aging = Psychol. Aging
+Psychology and Psychotherapy = Psychol. Psychother.
+Psychometrika = Psychometrika
+Psychoneuroendocrinology = Psychoneuroendocrinology
+Psychopathology = Psychopathology
+Psychopharmacologia = Psychopharmacologia
+Psychopharmacologie = Psychopharmacologie
+Psychopharmacology = Psychopharmacology (Berl.)
+Psychopharmacology (Berlin, Germany)=Psychopharmacology (Berlin, Ger.);PSCHDL;SM
+Psychopharmacology Bulletin = Psychopharmacol. Bull.
+Psychopharmacology Communications = Psychopharmacol. Commun.
+Psychopharmacology Series = Psychopharmacol. Ser.
+Psychopharmacology. Supplementum = Psychopharmacology. Suppl.
+Psychophysiology = Psychophysiology
+Psychosomatic Medicine = Psychosom. Med.
+Psychosomatics = Psychosomatics
+Psychotherapie und Medizinische Psychologie = Psychother. Med. Psychol. (Stuttg.)
+Psychotherapie, Medizinische Psychologie = Psychother. Med. Psychol. (Stuttg.)
+Psychotherapie, Psychosomatik, Medizinische Psychologie = Psychother. Psychosom. Med. Psychol.
+Psychotherapy and Psychosomatics = Psychother. Psychosom.
+Pteridines=Pteridines;PTRDEO;Q
+Pubblicazioni della Stazione Zoologica di Napoli. Section II: History and Philosophy of the Life Sciences = Pubbl. Stn. Zool. Napoli II
+Public Administration Review = Public Adm. Rev.
+Public Affairs Report = Public Aff. Rep.
+Public Health = Public Health
+Public Health Monograph = Public Health Monogr.
+Public Health Nursing = Public Health Nurs.
+Public Health Nutrition = Public Health Nutr.
+Public Health Papers = Public Health Pap.
+Public Health Reports = Public Health Rep.
+Public Health Reviews = Public Health Rev.
+Public Interest = Public Interest
+Public Opinion Quarterly = Public Opin. Q.
+Public Policy = Public Policy
+Public Relations Journal = Public Relat. J.
+Public Sector Contracting Report = Public Sect. Contract. Rep.
+Public Sector, Health Care Risk Management = Public Sector. Health Care Risk Manage.
+Public Welfare = Public Welf.
+Publication, Group for the Advancement of Psychiatry = Publ. Group Adv. Psychiatry
+Puerto Rico Health Sciences Journal = P. R. Health Sci. J.
+Puerto Rico y Su Enfermera = P. R. Enferm.
+Pulmonary Pharmacology = Pulm. Pharmacol.
+Pulmonary Pharmacology & Therapeutics=Pulm. Pharmacol. Ther.;PPTHFJ;BM
+Pulmonary Pharmacology and Therapeutics = Pulm. Pharmacol. Ther.
+Pulse of the Montana State Nurses Association = Pulse
+Purchasing Administration = Purch. Adm.
+Pure and Applied Chemistry = Pure Appl. Chem.
+Pure and Applied Geophysics = Pure Appl. Geophys.
+Purinergic Signalling=Purinergic Signalling;PSUIA9;Q
+QA Review = QA Rev.
+QJM = QJM
+QRB; Quality Review Bulletin = QRB Qual. Rev. Bull.
+QRC Advisor = QRC Advis.
+QSAR & Combinatorial Science=QSAR Comb. Sci.;QCSSAU;10/YR
+Quaderni Sclavo di Diagnostica Clinica e di Laboratorio = Quad. Sclavo Diagn.
+Quaderni di Clinica Ostetrica e Ginecologica = Quad. Clin. Ostet. Ginecol.
+Quaderni di Criminologia Clinica = Quad. Criminol. Clin.
+Quaderni di Radiologia = Quad. Radiol.
+Qualitative Health Research = Qual. Health Res.
+Quality Assurance = Qual. Assur.
+Quality Assurance and Utilization Review = Qual. Assur. Util. Rev.
+Quality Assurance in Health Care = Qual. Assur. Health Care
+Quality Connection = Qual. Connect.
+Quality Letter for Healthcare Leaders = Qual. Lett. Healthc. Lead.
+Quality Management in Health Care = Qual. Manag. Health Care
+Quality in Health Care = Qual. Health Care
+Quality of Life Research = Qual. Life Res.
+Quantum Electronics=Quantum Electron.;QUELEZ;M
+Quarterly Dental Review = Q. Dent. Rev.
+Quarterly Journal of Experimental Physiology = Q. J. Exp. Physiol.
+Quarterly Journal of Experimental Physiology and Cognate Medical Sciences = Q. J. Exp. Physiol. Cogn. Med. Sci.
+Quarterly Journal of Experimental Psychology = Q. J. Exp. Psychol.
+Quarterly Journal of Experimental Psychology. A, Human Experimental Psychology = Q. J. Exp. Psychol. A
+Quarterly Journal of Experimental Psychology. B, Comparative and Physiological Psychology = Q. J. Exp. Psychol. B
+Quarterly Journal of Medicine = Q. J. Med.
+Quarterly Journal of Microscopical Science = Q. J. Microsc. Sci.
+Quarterly Journal of Nuclear Medicine = Q. J. Nucl. Med.
+Quarterly Journal of Nuclear Medicine and Molecular Imaging = Q. J. Nucl. Med. Mol. Imaging
+Quarterly Journal of Studies on Alcohol = Q. J. Stud. Alcohol
+Quarterly Journal of the Royal Meteorological Society = Quart. J. Roy. Meteor. Soc.
+Quarterly Medical Review = Q. Med. Rev.
+Quarterly Review = Q. Rev. DC. Nurses. Assoc.
+Quarterly Review of Biology = Q. Rev. Biol.
+Quarterly Review of Economics and Business = Q. Rev. Econ. Bus.
+Quarterly Review of Economics and Finance = Q. Rev. Econ. Finance
+Quarterly Reviews of Biophysics = Q. Rev. Biophys.
+Quarterly Reviews on Drug Metabolism and Drug Interactions = Q. Rev. Drug Metab. Drug Interact.
+Quarterly of the National Dental Association = Q. Natl. Dent. Assoc.
+Queens Nursing Journal = Queens Nurs. J.
+Queensland Nurse = Qld. Nurse
+Queensland Nurses Journal = Qld. Nurses J.
+Quimica Nova=Quim. Nova;QUNODK;BM
+Quintessence International = Quintessence Int.
+Quintessence International. Edition Francaise = Quintessence Int. [Fr.]
+Quintessence of Dental Technology = Quintessence Dent. Technol.
+Quintessencia = Quintessencia
+Quintessencia de Protese de Laboratorio = Quintessencia Protese Lab.
+Quintessenz = Quintessenz
+Quintessenz Journal = Quintessenz J.
+Quintessenz der Zahntechnik = Quintessenz Zahntech.
+Quintessenz-Impulse = Quintessenz. Impulse
+Quintessenza = Quintessenza
+R.I. Medical Journal = R. I. Med. J.
+RANF Review = RANF Rev.
+RCN Nursing Standard = RCN Nurs. Stand.
+RDH = RDH
+RGO = RGO
+RISO Report = RISO Rep.
+RN = RN
+RN (for Managers) = RN (For. Managers)
+RN Idaho = RN Ida.
+RNA = RNA
+RNA Biology=RNA Biol.;RBNIBE;BM
+RNABC News, Registered Nurses Association of British Columbia = RNABC News.
+RNAO News = RNAO News
+ROFO. Fortschritte auf dem Gebiete der Rontgenstrahlen und der Nuklearmedizin = ROFO. Fortschr. Geb. Rontgenstr. Nuklearmed.
+Radiation Data and Reports = Radiat. Data Rep.
+Radiation Effects and Defects in Solids=Radiat. Eff. Defects Solids;REDSEI;M
+Radiation Measurements=Radiat. Meas.;RMEAEP;BM
+Radiation Medicine = Radiat. Med.
+Radiation Oncology Investigations = Radiat. Oncol. Investig.
+Radiation Physics and Chemistry=Radiat. Phys. Chem.;RPCHDM;18/YR
+Radiation Research = Radiat. Res.
+Radiation Research. Supplement = Radiat. Res. Suppl.
+Radiation and Environmental Biophysics = Radiat. Environ. Biophys.
+Radiatsionnaia Biologiia, Radioecologiia = Radiats. Biol. Radioecol.
+Radio Science = Radio Sci.
+Radiobiologia, Radioterapia e Fisica Medica = Radiobiol. Radioter. Fis. Med.
+Radiobiologia, Radiotherapia = Radiobiol. Radiother. (Berl.)
+Radiobiologiia = Radiobiologiia
+Radiochemistry (New York, NY, United States)=Radiochemistry (N. Y., NY, U. S.);RDIOEO;BM
+Radiochimica Acta=Radiochim. Acta;RAACAP;12/YR
+Radiographics = Radiographics
+Radiography = Radiography
+Radiography Today = Radiogr. Today
+Radioisotopes = Radioisotopes
+Radiologe = Radiologe
+Radiologia Austriaca = Radiol. Austriaca
+Radiologia Clinica = Radiol. Clin. (Basel)
+Radiologia Clinica et Biologica = Radiol. Clin. Biol.
+Radiologia Diagnostica = Radiol. Diagn. (Berl.)
+Radiologia Medica = Radiol. Med. (Torino)
+Radiologic Clinics of North America = Radiol. Clin. North Am.
+Radiologic Technology = Radiol. Technol.
+Radiological Health Data and Reports = Radiol. Health Data Rep.
+Radiology = Radiology
+Radiology Management = Radiol. Manage.
+Radioprotection=Radioprotection;RAPRBA;Q
+Radiotherapy and Oncology = Radiother. Oncol.
+Radovi Medicinskog Fakulteta u Zagrebu = Rad. Med. Fak. Zagrebu
+Rand Journal of Economics = Rand J. Econ.
+Ranliao Huaxue Xuebao=Ranliao Huaxue Xuebao;RHXUD8;BM
+Rapid Communications in Mass Spectrometry = Rapid Commun. Mass Spectrom.
+Rare Metals (Beijing, China)=Rare Met. (Beijing, China);RARME8;Q
+Rasplavy=Rasplavy;RASPEM;BM
+Rassegna Clinico-Scientifica = Rass. Clin. Sci.
+Rassegna Internazionale di Clinica e Terapia = Rass. Int. Clin. Ter.
+Rassegna Internazionale di Stomatologia Pratica = Rass. Int. Stomatol. Prat.
+Rassegna Medica Sarda = Rass. Med. Sarda
+Rassegna Odontotecnica = Rass. Odontotec.
+Rassegna Penitenziaria e Criminologica = Rass. Penititenziaria. Crim.
+Rassegna Trimestrale di Odontoiatria = Rass. Trimest. Odontoiatr.
+Rassegna di Clinica Terapia e Scienze Affini = Rass. Clin. Ter.
+Rassegna di Dermatologia e Sifilografia = Rass. Dermatol. Sifilogr.
+Rassegna di Fisiopatologia Clinica e Terapeutica = Rass. Fisiopatol. Clin. Ter.
+Rassegna di Neurologia Vegetativa = Rass. Neurol. Veg.
+Rassegna di Neuropsichiatria e Scienze Affini = Rass. Neuropsichiatr.
+Rassegna di Studi Psichiatrici = Rass. Studi Psichiatr.
+Rational Drug Therapy = Ration. Drug Ther.
+Rays = Rays
+Reaction Kinetics and Catalysis Letters=React. Kinet. Catal. Lett.;RKCLAU;6/YR
+Reactive & Functional Polymers=React. Funct. Polym.;RFPOF6;12/YR
+Readers Digest = Read. Dig.
+Realites Cliniques = Real. Clin.
+Reanimation et Organes Artificiels = Reanim. Organes Artif.
+Recent Advances in Biological Psychiatry = Recent Adv. Biol. Psychiatry
+Recent Advances in Clinical Nuclear Medicine = Recent Adv. Clin. Nucl. Med.
+Recent Advances in Nursing = Recent Adv. Nurs.
+Recent Advances in Studies on Cardiac Structure and Metabolism = Recent Adv. Stud. Cardiac Struct. Metab.
+Recent Developments in Alcoholism = Recent Dev. Alcohol.
+Recent Progress in Hormone Research = Recent Prog. Horm. Res.
+Recent Results in Cancer Research = Recent Results Cancer Res.
+Recenti Progressi in Medicina = Recenti Prog. Med.
+Receptor = Receptor
+Receptors and Channels = Receptors Channels
+Receptors and Signal Transduction = Recept. Signal Transduct.
+Recherche en Soins Infirmiers = Rech. Soins Infirm.
+Recombinant DNA Technical Bulletin = Recomb. DNA Tech. Bull.
+Reconstruction Surgery and Traumatology = Reconstr. Surg. Traumatol.
+Record of Chemical Progress = Rec. Chem. Prog.
+Recruit and Retain = Recruit Retain
+Recruitment and Retention Report = Recruit. Retent. Rep.
+Recruitment, Retention and Restructuring Report = Recruit. Retent. Restruct. Rep.
+Reflections = Reflections
+Refractive and Corneal Surgery = Refract. Corneal Surg.
+Refuat ha-Shinayim = Refu. Hashinayim
+Regan Report on Nursing Law = Regan Rep. Nurs. Law
+Regional Anaesthesie = Reg. Anaesth.
+Regional Anesthesia = Reg. Anesth.
+Regional Anesthesia and Pain Medicine = Reg. Anesth. Pain Med.
+Regional Immunology = Reg. Immunol.
+Registered Nurse = Regist. Nurse
+Regulation = Regulation
+Regulatory Analyst. Medical Waste = Regul. Anal. Med. Waste
+Regulatory Peptides = Regul. Pept.
+Regulatory Peptides. Supplement = Regul. Pept. Suppl.
+Regulatory Toxicology and Pharmacology = Regul. Toxicol. Pharmacol.
+Rehab Management = Rehab Manag.
+Rehabilitation = Rehabilitation (Stuttg.)
+Rehabilitation Literature = Rehabil. Lit.
+Rehabilitation Nursing = Rehabil. Nurs.
+Rehabilitation Record = Rehabil. Rec.
+Rehabilitation; Sozialmedizin, Physikalischemedizin, Praventivmedizin = Rehabilitation (Bonn)
+Rein et Foie = Rein Foie
+Rejuvenation Research = Rejuvenation Res.
+Remote Sensing of the Environment = Remote Sens. Environ.
+Renal Failure = Ren. Fail.
+Renal Physiology = Renal Physiol.
+Renal Physiology and Biochemistry = Ren. Physiol. Biochem.
+Rengong Jingti Xuebao=Rengong Jingti Xuebao;RJXUEN;BM
+Report of the Congress, European Orthodontic Society = Rep. Congr. Eur. Orthod. Soc.
+Report, Commission on Accreditation of Rehabilitation Facilities = Rep. Comm. Accredit. Rehabil. Facil.
+Report, Group for the Advancement of Psychiatry = Rep. Group Adv. Psychiatry
+Report, Navy Medical Neuropsychiatric Research Unit = Rep. Nav. Med. Neuropsychiatr. Res. Unit
+Report, U.S. Army Medical Research Laboratory = Rep. US. Army Med. Res. Lab.
+Report, U.S. Army Medical Research and Nutrition Laboratory, Denver = Rep. US. Army Med. Res. Nutr. Lab. Denver
+Report, U.S. Navy Experimental Diving Unit = Rep. US. Navy Exp. Diving Unit
+Report, US Naval Submarine Medical Center = Rep. US Nav. Submar. Med. Cent.
+Reporter, Delaware Nurses Association = Rep. Del. Nurses Assoc.
+Reports on Health and Social Subjects = Rep. Health Soc. Subj. (Lond.)
+Reports on Population/Family Planning = Rep. Popul. Fam. Plann.
+Reports on Public Health and Medical Subjects = Rep. Public Health Med. Subj. (Lond.)
+Reports on Rheumatic Diseases = Rep. Rheum. Dis.
+Reproduccion = Reproduccion
+Reproduction = Reproduction
+Reproduction (Bristol, United Kingdom)=Reproduction (Bristol, U. K.);RCUKBS;M
+Reproduction, Fertility, and Development = Reprod. Fertil. Dev.
+Reproduction, Nutrition, Development = Reprod. Nutr. Dev.
+Reproduction, Nutrition, Developpement = Reprod. Nutr. Dev.
+Reproduction. Abstract Series = Reprod. Abstr. Ser.
+Reproduction. Supplement = Reprod. Suppl.
+Reproductive Biology = Reprod. Biol.
+Reproductive Biology and Endocrinology = Reprod. Biol. Endocrinol.
+Reproductive Biomedicine Online = Reprod. Biomed. Online
+Reproductive Toxicology = Reprod. Toxicol.
+Repura (Leprosy) = Repura
+Research Communications in Biochemistry and Cell & Molecular Biology=Res. Commun. Biochem. Cell Mol. Biol.;RCBBFC;Q
+Research Communications in Chemical Pathology and Pharmacology = Res. Commun. Chem. Pathol. Pharmacol.
+Research Communications in Molecular Pathology and Pharmacology = Res. Commun. Mol. Pathol. Pharmacol.
+Research Communications in Pharmacology and Toxicology=Res. Commun. Pharmacol. Toxicol.;RCPTFY;Q
+Research Communications, Institute for Fermentation = Res. Commun. Inst. Ferment.
+Research Progress in Organic, Biological and Medicinal Chemistry = Res. Prog. Org. Biol. Med. Chem.
+Research Publications, Association for Research in Nervous and Mental Disease = Res. Publ. Assoc. Res. Nerv. Ment. Dis.
+Research Quarterly = Res. Q.
+Research Quarterly for Exercise and Sport = Res. Q. Exerc. Sport
+Research Report, Health Effects Institute = Res. Rep. Health Eff. Inst.
+Research Report, United States Naval School of Aviation Medicine = Res. Rep. U. S. Nav. Sch. Aviat. Med.
+Research Reports, United States Naval Medical Field Research Laboratory = Res. Rep. U. S. Nav. Med. Field Res. Lab.
+Research and Clinical Studies in Headache = Res. Clin. Stud. Headache
+Research and Statistics Note, Health Care Financing Administration, Office of Policy, Planning, and Research = Res. Stat. Note Health Care Financ. Adm. Off. Policy. Plan. Res.
+Research and Statistics Note, Social Security Administration, Office of Research and Statistics = Res. Stat. Note
+Research and Theory for Nursing Practice = Res. Theory Nurs. Pract.
+Research in Developmental Disabilities = Res. Dev. Disabil.
+Research in Experimental Medicine = Res. Exp. Med. (Berl.)
+Research in Health Economics = Res. Health Econ.
+Research in Immunology = Res. Immunol.
+Research in Microbiology = Res. Microbiol.
+Research in Nursing and Health = Res. Nurs. Health
+Research in Reproduction = Res. Reprod.
+Research in Sports Medicine = Res. Sports Med.
+Research in Veterinary Science = Res. Vet. Sci.
+Research in Virology = Res. Virol.
+Research on Aging = Res. Aging
+Research on Chemical Intermediates=Res. Chem. Intermed.;RCINEE;9/YR
+Resenha Clinico-Cientifica = Resen. Clin. Cient.
+Resident and Staff Physician = Resid. Staff Physician
+Residue Reviews = Residue Rev.
+Resources for Biomedical Research and Education = Resour. Biomed. Res. Educ.
+Respiration = Respiration
+Respiration Physiology = Respir. Physiol.
+Respiratory Care = Respir. Care
+Respiratory Care Clinics of North America = Respir. Care Clin. N. Am.
+Respiratory Management = Respir. Manage.
+Respiratory Medicine = Respir. Med.
+Respiratory Physiology and Neurobiology = Respir. Physiol. Neurobiol.
+Respiratory Research = Respir. Res.
+Respiratory Therapy = Respir. Ther.
+Respirology = Respirology
+Restaurants and Institutions = Restaurants Inst.
+Restorative Dentistry = Restorative Dent.
+Results and Problems in Cell Differentiation = Results Probl. Cell Differ.
+Resuscitation = Resuscitation
+Retina = Retina
+Retrovirology = Retrovirology
+Reumatismo = Reumatismo
+Reumatizam = Reumatizam
+Reumatologia = Reumatologia
+Review of Allergy = Rev. Allergy
+Review of Czechoslovak Medicine = Rev. Czech. Med.
+Review of Economics and Statistics = Rev. Econ. Stat.
+Review of Public Data Use = Rev. Public Data Use
+Review of Scientific Instruments = Rev. Sci. Instrum.
+Review of Surgery = Rev. Surg.
+Review, Federation of American Health Systems = Rev. Fed. Am. Health Syst.
+Review, Federation of American Hospitals = Rev. Fed. Am. Hosp.
+Review, Patient Focused Care Association = Rev. Patient Focus. Care Assoc.
+Reviews in Analytical Chemistry=Rev. Anal. Chem.;RACYAX;4/YR
+Reviews in Cardiovascular Medicine = Rev. Cardiovasc. Med.
+Reviews in Clinical and Basic Pharmacology = Rev. Clin. Basic Pharm.
+Reviews in Clinical and Experimental Hematology = Rev. Clin. Exp. Hematol.
+Reviews in Endocrine and Metabolic Disorders = Rev. Endocr. Metab. Disord.
+Reviews in Gastroenterological Disorders = Rev. Gastroenterol. Disord.
+Reviews in Immunogenetics = Rev. Immunogenet.
+Reviews in Inorganic Chemistry=Rev. Inorg. Chem.;RICHD7;Q
+Reviews in Medical Virology = Rev. Med. Virol.
+Reviews in Neurological Diseases = Rev. Neurol. Dis.
+Reviews in Pure and Applied Pharmacological Sciences = Rev. Pure Appl. Pharmacol. Sci.
+Reviews in the Neurosciences = Rev. Neurosci.
+Reviews of Environmental Contamination and Toxicology = Rev. Environ. Contam. Toxicol.
+Reviews of Geophysics = Rev. Geophys.
+Reviews of Geophysics and Space Physics = Rev. Geophys. Space Phys.
+Reviews of Infectious Diseases = Rev. Infect. Dis.
+Reviews of Oculomotor Research = Rev. Oculomot. Res.
+Reviews of Physiology, Biochemistry and Pharmacology = Rev. Physiol. Biochem. Pharmacol.
+Reviews of Reproduction = Rev. Reprod.
+Reviews on Drug Metabolism and Drug Interactions = Rev. Drug Metabol. Drug Interact.
+Reviews on Environmental Health = Rev. Environ. Health
+Revisiones sobre Biologia Celular = Revis. Biol. Celular
+Revista ADM = Rev. ADM
+Revista Alergia = Rev. Alerg.
+Revista Alergia Mexico = Rev. Alerg. Mex.
+Revista Argentina de Cirugia = Rev. Argent. Cir.
+Revista Argentina de Endocrinologia y Metabolismo = Rev. Argent. Endocrinol. Metab.
+Revista Argentina de Implantologia Estomatologica = Rev. Argent. Implantol. Estomatol.
+Revista Argentina de Microbiologia = Rev. Argent. Microbiol.
+Revista Argentina de Urologia y Nefrologia = Rev. Argent. Urol. Nefrol.
+Revista Brasileira de Anestesiologia = Rev. Bras. Anestesiol.
+Revista Brasileira de Biologia = Rev. Bras. Biol.
+Revista Brasileira de Cirurgia = Rev. Bras. Cir.
+Revista Brasileira de Enfermagem = Rev. Bras. Enferm.
+Revista Brasileira de Gastroenterologia = Rev. Bras. Gastroenterol.
+Revista Brasileira de Leprologia = Rev. Bras. Leprol.
+Revista Brasileira de Malariologia e Doencas Tropicais = Rev. Bras. Malariol. Doencas Trop.
+Revista Brasileira de Medicina = Rev. Bras. Med.
+Revista Brasileira de Odontologia = Rev. Bras. Odontol.
+Revista Brasileira de Odontologia Militar = Rev. Bras. Odontol. Mil.
+Revista Brasileira de Oftalmologia = Rev. Bras. Oftalmol.
+Revista Brasileira de Pesquisas Medicas e Biologicas = Rev. Bras. Pesqui. Med. Biol.
+Revista Catarinense de Odontologia = Rev. Catarinense Odontol.
+Revista Centro America Odontologica = Rev. Cent. Am. Odontol.
+Revista Chilena de Obstetricia y Ginecologia = Rev. Chil. Obstet. Ginecol.
+Revista Chilena de Odontoestomatologia = Rev. Chil. Odontoestomatol.
+Revista Chilena de Pediatria = Rev. Chil. Pediatr.
+Revista Clinica Espanola = Rev. Clin. Esp.
+Revista Clinica, Instituto Maternal, Lisbon = Rev. Clin. Inst. Matern. Lisb.
+Revista Colombiana de Obstetricia y Ginecologia = Rev. Colomb. Obstet. Ginecol.
+Revista Colombiana de Pediatria y Puericultura = Rev. Colomb. Pediatr. Pueric.
+Revista Costarricense de Ciencias Medicas = Rev. Costarric. Cienc. Med.
+Revista Cubana de Enfermeria = Rev. Cubana Enferm.
+Revista Cubana de Estomatologia = Rev. Cubana Estomatol.
+Revista Cubana de Medicina Tropical = Rev. Cubana Med. Trop.
+Revista Dental = Rev. Dent. (St. Domingo)
+Revista Dental de Chile = Rev. Dent. Chile
+Revista Ecuatoriana de Higiene y Medicina Tropical = Rev. Ecuat. Hig. Med. Trop.
+Revista Enfermagem em Novas Dimensoes = Rev. Enferm. Nov. Dimens.
+Revista Espanola de Anestesiologia = Rev. Esp. Anestesiol.
+Revista Espanola de Anestesiologia y Reanimacion = Rev. Esp. Anestesiol. Reanim.
+Revista Espanola de Cardiologia = Rev. Esp. Cardiol.
+Revista Espanola de Endodoncia = Rev. Esp. Endodoncia
+Revista Espanola de Enfermedades Digestivas = Rev. Esp. Enferm. Dig.
+Revista Espanola de Estomatologia = Rev. Esp. Estomatol.
+Revista Espanola de Fisiologia = Rev. Esp. Fisiol.
+Revista Espanola de Medicina Nuclear = Rev. Esp. Med. Nucl.
+Revista Espanola de Obstetricia y Ginecologia = Rev. Esp. Obstet. Ginecol.
+Revista Espanola de Oncologia = Rev. Esp. Oncol.
+Revista Espanola de Oto-Neuro-Oftalmologia y Neurocirugia = Rev. Esp. Otoneurooftalmol. Neurocir.
+Revista Espanola de Paradoncia = Rev. Esp. Parad.
+Revista Espanola de Pediatria = Rev. Esp. Pediatr.
+Revista Espanola de Quimioterapia = Rev. Esp. Quimioter.
+Revista Espanola de Reumatismo y Enfermedades Osteo-Articulares = Rev. Esp. Reum. Enferm. Osteoartic.
+Revista Espanola de Salud Publica = Rev. Esp. Salud Publica
+Revista Espanola de Tuberculosis = Rev. Esp. Tuberc.
+Revista Espanola de las Enfermedades del Aparato Digestivo = Rev. Esp. Enferm. Apar. Dig.
+Revista Europea de Odonto-Estomatologia = Rev. Eur. Odontoestomatol.
+Revista FOA = Rev. FOA
+Revista Gaucha de Enfermagem = Rev. Gaucha Enferm.
+Revista Gaucha de Odontologia = Rev. Gaucha Odontol.
+Revista Guatemalteca de Estomatologia = Rev. Guatem. Estomatol.
+Revista Iberica de Endocrinologia = Rev. Iber. Endocrinol.
+Revista Ibero-Americana de Ortodoncia = Rev. Iberoam. Ortod.
+Revista Interamericana de Radiologia = Rev. Interam. Radiol.
+Revista Latino-Americana de Enfermagem = Rev. Lat. Am. Enfermagem
+Revista Latinoamericana de Cirugia Plastica = Rev. Latinoam. Cir. Plast.
+Revista Latinoamericana de Microbiologia = Rev. Latinoam. Microbiol.
+Revista Latinoamericana de Microbiologia y Parasitologia = Rev. Latinoam. Microbiol. Parasitol. (Mex.)
+Revista Latinoamericana de Patologia = Rev. Latinoam. Patol.
+Revista Medica Hondurena = Rev. Med. Hondur.
+Revista Medica de Chile = Rev. Med. Chil.
+Revista Medica de Costa Rica = Rev. Med. Costa Rica
+Revista Medica de Panama = Rev. Med. Panama
+Revista Medica del Hospital General = Rev. Med. Hosp. Gen. (Mex.)
+Revista Medico-Chirurgicala a Societatii de Medici si Naturalisti Din Iasi = Rev. Med. Chir. Soc. Med. Nat. Iasi
+Revista Meteorologica = Rev. Meteor.
+Revista Mexicana de Cirugia, Ginecologia y Cancer = Rev. Mex. Cir. Ginecol. Cancer
+Revista Mexicana de Ingenieria Quimica=Rev. Mex. Ing. Quim.;RMIQBM;3/YR
+Revista Mexicana de Urologia = Rev. Mex. Urol.
+Revista Odonto-Estomatologica = Rev. Odontoestomatol.
+Revista Odontologica = Rev. Odontol. (La Paz)
+Revista Odontologica Ecuatoriana = Rev. Odontol. Ecuat.
+Revista Odontologica de Concepcion = Rev. Odontol. Concepcion
+Revista Odontologica de Costa Rica = Rev. Odontol. Costa Rica
+Revista Odontologica de Puerto Rico = Rev. Odontol. P. R.
+Revista Odontologica del Circulo de Odontologos del Paraguay = Rev. Odontol. Circ. Odontol. Parag.
+Revista Odontologica, Facultad de Odontologia, Universidad Nacional de Cordoba = Rev. Odontol. (Cordoba)
+Revista Panamericana de Salud Publica = Rev. Panam. Salud Publica
+Revista Paulista de Endodontia = Rev. Paul. Endodontia
+Revista Paulista de Enfermagem = Rev. Paul. Enferm.
+Revista Paulista de Medicina = Rev. Paul. Med.
+Revista Paulista de Odontologia = Rev. Paul. Odontol.
+Revista Pernambucana de Odontologia = Rev. Pernambucana Odontol.
+Revista Portuguesa de Cardiologia = Rev. Port. Cardiol.
+Revista Portuguesa de Estomatologia e Cirurgia Maxilofacial = Rev. Port. Estomatol. Cir. Maxilofac.
+Revista Portuguesa de Pediatria = Rev. Port. Pediatr.
+Revista Portuguesa de Pediatria e Puericultura = Rev. Port. Pediatr. Pueric.
+Revista Quirurgica Espanola = Rev. Quir. Esp.
+Revista Regional de Aracatuba Associacao Paulista de Cirurgioes Dentistas = Rev. Reg. Aracatuba Assoc. Paul. Cir. Dent.
+Revista Romana de Materiale=Rev. Rom. Mater.;RRMEB7;Q
+Revista Venezolana de Sanidad y Asistencia Social = Rev. Venez. Sanid. Asist. Soc.
+Revista Venezolana de Urologia = Rev. Venez. Urol.
+Revista da Associacao Medica Brasileira = Rev. Assoc. Med. Bras.
+Revista da Associacao Paulista de Cirurgioes Dentistas = Rev. Assoc. Paul. Cir. Dent.
+Revista da Escola de Enfermagem da USP = Rev. Esc. Enferm. USP
+Revista da Faculdade de Farmacia e Odontologia de Araraquara = Rev. Fac. Farm. Odontol. Araraquara
+Revista da Faculdade de Farmacia e Odontologia de Ribeirao Preto = Rev. Fac. Farm. Odontol. Ribeiro. Preto
+Revista da Faculdade de Odontologia da FZL = Rev. Faculdade Odontol. FZL
+Revista da Faculdade de Odontologia da Universidade Federal da Bahia = Rev. Fac. Odontol. Univ. Fed. Bahia
+Revista da Faculdade de Odontologia da Universidade de Sao Paulo = Rev. Fac. Odontol. Sao Paulo
+Revista da Faculdade de Odontologia de Aracatuba = Rev. Fac. Odontol. Aracatuba
+Revista da Faculdade de Odontologia de Lins = Rev. Faculdade Odontol. Lins
+Revista da Faculdade de Odontologia de Pernambuco = Rev. Fac. Odontol. Pernambuco
+Revista da Faculdade de Odontologia de Ribeirao Preto = Rev. Fac. Odontol. Ribeiro Preto
+Revista da Faculdade de Odontologia de Sao Jose dos Campos = Rev. Fac. Odontol. Sao Jose dos Campos
+Revista da Faculdade de Odontologia, Porto Alegre = Rev. Fac. Odontol. P. Alegre
+Revista da Sociedade Brasileira de Medicina Tropical = Rev. Soc. Bras. Med. Trop.
+Revista de Actualidad Estomatologica Espanola = Rev. Actual. Estomatol. Esp.
+Revista de Actualidad Odontoestomatologica Espanola = Rev. Actual. Odontoestomatol. Esp.
+Revista de Biologia Oral = Rev. Biol. Oral
+Revista de Biologia Tropical = Rev. Biol. Trop.
+Revista de Chimie (Bucharest, Romania)=Rev. Chim. (Bucharest, Rom.);RCBUAU;M
+Revista de Chirurgie, Oncologie, Radiologie, O.R.L., Oftalmologie, Stomatologie. Chirurgie = Rev. Chir. Oncol. Radiol. O. R. L. Oftalmol. Stomatol. Chir.
+Revista de Chirurgie, Oncologie, Radiologie, O.R.L., Oftalmologie, Stomatologie. Oto-Rino-Laringologia = Rev. Chir. Oncol. Radiol. O. R. L. Oftalmol. Stomatol. Otorinolaringol.
+Revista de Chirurgie, Oncologie, Radiologie, O.R.L., Oftalmologie, Stomatologie. Seria Oftalmologie = Rev. Chir. Oncol. Radiol. O. R. L. Oftalmol. Stomatol. Ser. Oftalmol.
+Revista de Chirurgie, Oncologie, Radiologie, O.R.L., Oftalmologie, Stomatologie. Seria Stomatologie = Rev. Chir. Oncol. Radiol. O. R. L. Oftalmol. Stomatol. Ser. Stomatol.
+Revista de Cirugia del Uruguay = Rev. Cir. Urug.
+Revista de Enfermagem = Rev. Enferm. (Lisboa)
+Revista de Enfermeria = Rev. Enferm.
+Revista de Farmacia e Bioquimica da Universidade de Sao Paulo = Rev. Farm. Bioquim. Univ. Sao Paulo
+Revista de Farmacia e Odontologia = Rev. Farm. Odontol.
+Revista de Gastroenterologia de Mexico = Rev. Gastroenterol. Mex.
+Revista de Gastroenterologia del Peru = Rev. Gastroenterol. Peru
+Revista de Geofisica = Rev. Geofis.
+Revista de Ginecologia e d'Obstetricia = Rev. Ginecol. Obstet. (Sao Paulo)
+Revista de Igiena, Bacteriologie, Virusologie, Parazitologie, Epidemiologie, Pneumoftiziologie. Bacteriologia, Virusologia, Parazitologia, Epidemiologia = Rev. Ig. Bacteriol. Virusol. Parazitol. Epidemiol. Pneumoftiziol. Bacteriol. Virusol. Parazitol. Epi
+Revista de Igiena, Bacteriologie, Virusologie, Parazitologie, Epidemiologie, Pneumoftiziologie. Pneumoftiziologia = Rev. Ig. Bacteriol. Virusol. Parazitol. Epidemiol. Pneumoftiziol. Pneumoftiziol.
+Revista de Investigacion = Rev. Invest. (Guadalajara)
+Revista de Investigacion Clinica = Rev. Invest. Clin.
+Revista de Investigacion en Salud Publica = Rev. Invest. Salud Publica
+Revista de Medicina Interna, Neurologie, Psihiatrie, Neurochirurgie, Dermato-Venerologie. Medicina Interna = Rev. Med. Interna Neurol. Psihiatr. Neurochir. Dermatovenerol. Med. Intern.
+Revista de Medicina Interna, Neurologie, Psihiatrie, Neurochirurgie, Dermato-Venerologie. Neurologie, Psihiatrie, Neurochirurgie = Rev. Med. Interna Neurol. Psihiatr. Neurochir. Dermatovenerol. Neurol. Psihiatr. Neurochir.
+Revista de Medicina de la Universidad de Navarra = Rev. Med. Univ. Navarra
+Revista de Neuro-Psiquiatria = Rev. Neuropsiquiatr.
+Revista de Neurologia = Rev. Neurol.
+Revista de Obstetricia y Ginecologia de Venezuela = Rev. Obstet. Ginecol. Venez.
+Revista de Odontologia da UNESP = Rev. Odontol. UNESP
+Revista de Odontologia da Universidade Federal de Santa Catarina = Rev. Odontol. St. Catarina
+Revista de Odontologia da Universidade de Sao Paulo = Rev. Odontol. Univ. Sao Paulo
+Revista de Pediatrie, Obstetrica si Ginecologie. Obstetrica si Ginecologie = Rev. Pediatr. Obstet. Ginecol. Obstet. Ginecol.
+Revista de Pediatrie, Obstetrica si Ginecologie. Pediatria = Rev. Pediatr. Obstet. Ginecol. Pediatr.
+Revista de Sanidad e Higiene Publica = Rev. Sanid. Hig. Publica (Madr.)
+Revista de Saude Publica = Rev. Saude Publica
+Revista de la Agrupacion Odontologica de la Capital Federal = Rev. Agrup. Odontol. Cap. Fed.
+Revista de la Asociacion Argentina de Microbiologia = Rev. Asoc. Argent. Microbiol.
+Revista de la Asociacion Medica Argentina = Rev. Asoc. Med. Argent.
+Revista de la Asociacion Mexicana de Enfermeras = Rev. Asoc. Mex. Enferm.
+Revista de la Asociacion Odontologica Argentina = Rev. Asoc. Odontol. Argent.
+Revista de la Asociacion Odontologica de Costa Rica = Rev. Asoc. Odontol. Costa Rica
+Revista de la Asociacion de Profesionales del Hospital Nacional de Odontologia = Rev. Asoc. Prof. Hosp. Nac. Odontol.
+Revista de la Escuela de Odontologia, Universidad Nacional de Tucuman, Facultad de Medicina = Rev. Esc. Odontol. Tucuman.
+Revista de la Facultad de Ciencias Medicas de Cordoba = Rev. Fac. Cienc. Med. Cordoba
+Revista de la Facultad de Ciencias Medicas de la Universidad Nacional de Cordoba = Rev. Fac. Cien. Med. Univ. Nac. Cordoba
+Revista de la Facultad de Ciencias Medicas, Universidad Nacional de Cordoba = Rev. Fac. Cien. Med. Univ. Nac. Cordoba
+Revista de la Facultad de Medicina, Universidad Nacional de Colombia = Rev. Fac. Med. Univ. Nac. Colomb.
+Revista de la Facultad de Odontologia = Rev. Fac. Odontol. Univ. Nac. (Cordoba)
+Revista de la Facultad de Odontologia de la Universidad Nacional de Colombia = Rev. Fac. Odontol. Univ. Nac. Colomb.
+Revista de la Facultad de Odontologia, Universidad Nacional de Tucuman = Rev. Fac. Odontol. Tucuman
+Revista de la Facultad de Odontologia, Universidad de Antioquia = Rev. Fac. Odontol. Univ. Antioq.
+Revista de la Federacion Odontologica Colombiana = Rev. Fed. Odontol. Colomb.
+Revista de la Federacion Odontologica Ecuatoriana = Rev. Fed. Odontol. Ecuat.
+Revista de la Sanidad Militar Argentina = Rev. Sanid. Milit. Argent.
+Revista de la Sociedad Argentina de Biologia = Rev. Soc. Argent. Biol.
+Revista de la Sociedad Colombiana de Ortodoncia = Rev. Soc. Colomb. Ortod.
+Revista de la Sociedad Odontologica de la Plata = Rev. Soc. Odontol. La. Plata
+Revista de la Sociedad Peruana de Endocrinologia = Rev. Soc. Peru. Endocrinol.
+Revista de la Sociedad Quimica del Peru=Rev. Soc. Quim. Peru;RSQPAW;Q
+Revista del Ateneo Argentino de Odontologia = Rev. Ateneo Argent. Odontol.
+Revista del Ateneo de la Catedra de Tecnica de Operatoria Dental = Rev. Ateneo Catedra Tec. Oper. Dent.
+Revista del Circulo Argentino de Odontologia = Rev. Circ. Argent. Odontol.
+Revista del Circulo Odontologico de Cordoba = Rev. Circ. Odontol. Cordoba
+Revista del Circulo Odontologico de Rosario = Rev. Circul. Ondontol. Ros.
+Revista del Circulo Odontologico del Sur = Rev. Circ. Odontol. Sur
+Revista del Colegio Estomatologico de Guatemala = Rev. Col. Estomatol. Guatem.
+Revista del Colegio Medico de Guatemala = Rev. Col. Med. Guatem.
+Revista del Colegio Nacional de Enfermeras = Rev. Col. Nac. Enferm.
+Revista del Instituto Nacional de Cancerologia = Rev. Inst. Nac. Cancerol. (Mex.)
+Revista del Instituto de Salubridad y Enfermedades Tropicales = Rev. Inst. Salubr. Enferm. Trop.
+Revista del Museo de la Facultad de Odontologia de Buenos Aires = Rev. Museo Fac. Odontol. B. Aires
+Revista do Centro de Ciencias Biomedicas da Universidade Federal de Uberlandia = Rev. Centro Cienc. Biomed. Univ. Fed. Uberlandia
+Revista do Hospital das Clinicas, Faculdade de Medicina da Universidade de Sao Paulo = Rev. Hosp. Clin. Fac. Med. Sao Paulo
+Revista do Instituto de Antibioticos, Universidade Federal de Pernambuco = Rev. Inst. Antibiot. (Recife)
+Revista do Instituto de Medicina Tropical de Sao Paulo = Rev. Inst. Med. Trop. Sao Paulo
+Revmatologiia = Revmatologiia (Mosk.)
+Revolution = Revolution
+Revue Annuelle, Societe Odonto-Stomatologique du Nord-Est = Rev. Annu. Soc. Odontostomatol. Nordest.
+Revue Belge de Medecine Dentaire = Rev. Belge Med. Dent.
+Revue Belge de Pathologie et de Medecine Experimentale = Rev. Belg. Pathol. Med. Exp.
+Revue Canadienne de Biologie = Rev. Can. Biol.
+Revue Canadienne de Biologie Experimentale = Rev. Can. Biol. Exp.
+Revue Dentaire Libanaise (Lebanese Dental Magazine) = Rev. Dent. Liban.
+Revue Europeenne d'Etudes Cliniques et Biologiques = Rev. Eur. Etud. Clin. Biol.
+Revue Francaise d'Allergologie = Rev. Fr. Allergol.
+Revue Francaise d'Endocrinologie Clinique, Nutrition et Metabolisme = Rev. Fr. Endocrinol. Clin.
+Revue Francaise d'Endodontie = Rev. Fr. Endod.
+Revue Francaise d'Etudes Cliniques et Biologiques = Rev. Fr. Etud. Clin. Biol.
+Revue Francaise d'Odonto-Stomatologie = Rev. Fr. Odontostomatol.
+Revue Francaise de Gynecologie et d'Obstetrique = Rev. Fr. Gynecol. Obstet.
+Revue Francaise de Psychanalyse = Rev. Fr. Psychanal.
+Revue Francaise de Transfusion = Rev. Fr. Transfus.
+Revue Francaise de Transfusion et Immuno-Hematologie = Rev. Fr. Transfus. Immunohematol.
+Revue Francaise de Transfusion et d'Hemobiologie = Rev. Fr. Transfus. Hemobiol.
+Revue Francaise de la Prothese Dentaire = Rev. Fr. Prothese Dent.
+Revue Francaise des Maladies Respiratoires = Rev. Fr. Mal. Respir.
+Revue Francaise des Prothesistes Dentaires = Rev. Fr. Prothes. Dent.
+Revue Internationale d'Hepatologie = Rev. Int. Hepatol.
+Revue Internationale des Services de Sante des Armees de Terre, de Mer et de l Air = Rev. Int. Serv. Sante Armees
+Revue Internationale du Trachome = Rev. Int. Trach.
+Revue Internationale du Trachome et de Pathologie Oculaire Tropicale et Subtropicale = Rev. Int. Trach. Pathol. Ocul. Trop. Subtrop.
+Revue Internationale du Trachome et de Pathologie Oculaire Tropicale et Subtropicale et de Sante Publique = Rev. Int. Trach. Pathol. Ocul. Trop. Subtrop. Sante Publique
+Revue Lyonnaise de Medecine = Rev. Lyon. Med.
+Revue Medicale Internationale de Photo, Cinema, Television (International Journal of Medical Photography, Cinematography and Television) = Rev. Med. Int. Photo Cinema Telev.
+Revue Medicale Suisse = Rev. Med. Suisse
+Revue Medicale de Bruxelles = Rev. Med. Brux.
+Revue Medicale de Liege = Rev. Med. Liege
+Revue Medicale de la Suisse Romande = Rev. Med. Suisse Romande
+Revue Medicale du Moyen-Orient = Rev. Med. Moyen. Orient
+Revue Medico-Chirurgicale des Maladies du Foie = Rev. Med. Chir. Mal. Foie
+Revue Neurologique = Rev. Neurol. (Paris)
+Revue Odonto-Implantologique = Rev. Odontoimplantol.
+Revue Odonto-Stomatologique du Nord-Est = Rev. Odontostomatol. Nordest.
+Revue Roumaine d'Endocrinologie = Rev. Roum. Endocrinol.
+Revue Roumaine d'Inframicrobiologie = Rev. Roum. Inframicrobiol.
+Revue Roumaine de Chimie=Rev. Roum. Chim.;RRCHAX;M
+Revue Roumaine de Medecine = Rev. Roum. Med.
+Revue Roumaine de Medecine Interne = Rev. Roum. Med. Intern.
+Revue Roumaine de Morphologie et d'Embryologie = Rev. Roum. Morphol. Embryol.
+Revue Roumaine de Morphologie et de Physiologie = Rev. Roum. Morphol. Physiol.
+Revue Roumaine de Neurologie = Rev. Roum. Neurol.
+Revue Roumaine de Neurologie et de Psychiatrie = Rev. Roum. Neurol. Psychiatr.
+Revue Roumaine de Physiologie = Rev. Roum. Physiol.
+Revue Roumaine de Virologie = Rev. Roum. Virol.
+Revue Scientifique et Technique, Office International des Epizooties = Rev. Sci. Tech.
+Revue Stomato-Odontologique du Nord de la France = Rev. Stomatoodontol. Nord Fr.
+Revue Suisse de Zoologie = Rev. Suisse Zool.
+Revue d'Electroencephalographie et de Neurophysiologie Clinique = Rev. Electroencephalogr. Neurophysiol. Clin.
+Revue d'Elevage et de Medecine Veterinaire des Pays Tropicaux = Rev. Elev. Med. Vet. Pays Trop.
+Revue d'Epidemiologie et de Sante Publique = Rev. Epidemiol. Sante Publique
+Revue d'Epidemiologie, Medecine Sociale et Sante Publique = Rev. Epidemiol. Med. Soc. Sante Publique
+Revue d'Histoire de l'Art Dentaire = Rev. Hist. Art Dent.
+Revue d'Hygiene et de Medecine Sociale = Rev. Hyg. Med. Soc.
+Revue d'Immunologie = Rev. Immunol. (Paris)
+Revue d'Immunologie et de Therapie Antimicrobienne = Rev. Immunol. Ther. Antimicrob.
+Revue d'Odonto-Stomatologie = Rev. Odontostomatol. (Paris)
+Revue d'Odonto-Stomatologie du Midi de la France = Rev. Odontostomatol. Midi Fr.
+Revue d'Orthopedie Dento-Faciale = Rev. Orthop. Dento. Faciale
+Revue d'Oto-Neuro-Ophtalmologie = Rev. Otoneuroophtalmol.
+Revue de Chirurgie Orthopedique et Reparatrice de l'Appareil Moteur = Rev. Chir. Orthop. Reparatrice Appar. Mot.
+Revue de Gerontologie d'Expression Francaise = Rev. Gerontol. Expr. Fr.
+Revue de Laryngologie Otologie Rhinologie = Rev. Laryngol. Otol. Rhinol. (Bord.)
+Revue de Medecine Aeronautique = Rev. Med. Aeronaut.
+Revue de Medecine Interne = Rev. Med. Interne
+Revue de Medecine Psychosomatique et de Psychologie Medicale = Rev. Med. Psychosom. Psychol. Med.
+Revue de Neuropsychiatrie Infantile et d'Hygiene Mentale de l'Enfance = Rev. Neuropsychiatr. Infant.
+Revue de Pathologie Comparee = Rev. Pathol. Comp.
+Revue de Pneumologie Clinique = Rev. Pneumol. Clin.
+Revue de Stomatologie et de Chirurgie Maxillo-Faciale = Rev. Stomatol. Chir. Maxillofac.
+Revue de Tuberculose et de Pneumologie = Rev. Tuberc. Pneumol. (Paris)
+Revue de l'Atherosclerose et des Arteriopathies Peripheriques = Rev. Atheroscler. (Paris)
+Revue de l'Infirmiere = Rev. Infirm.
+Revue de l'Infirmiere et de l'Assistante Sociale = Rev. Infirm. Assist. Soc.
+Revue de l'Infirmiere. Informations = Rev. Infirm. [Inf.]
+Revue de l'Institut d Hygiene des Mines = Rev. Inst. Hyg. Mines (Hasselt)
+Revue des Corps de Sante des Armees, Terre, Mer, Air = Rev. Corps Sante Armees. Terre. Mer. Air
+Revue des Infirmieres et Infirmiers Auxiliaires du Quebec = Rev. Infirm. Infirm. Aux. Que.
+Revue des Maladies Respiratoires = Rev. Mal. Respir.
+Revue du Praticien = Rev. Prat.
+Revue du Rhumatisme et des Maladies Osteo-Articulaires = Rev. Rhum. Mal. Osteoartic.
+Revue du Rhumatisme. Edition Francaise = Rev. Rhum. Ed. Fr.
+Revue du Rhumatisme. English Edition = Rev. Rhum. Engl. Ed.
+Revue du SESDA = Rev. SESDA
+Rheologica Acta=Rheol. Acta;RHEAAK;BM
+Rheumatic Diseases Clinics of North America = Rheum. Dis. Clin. North Am.
+Rheumatism = Rheumatism
+Rheumatology = Rheumatology
+Rheumatology International = Rheumatol. Int.
+Rheumatology and Physical Medicine = Rheumatol. Phys. Med.
+Rheumatology and Rehabilitation = Rheumatol. Rehabil.
+Rhinology = Rhinology
+Rhinology. Supplement = Rhinol. Suppl.
+Rhode Island Dental Journal = R. I. Dent. J.
+Rhode Island Medical Journal = R. I. Med. J.
+Rhode Island Medicine = R. I. Med.
+Rhodesia Nurse = Rhod. Nurse
+Rhodesian Nurse = Rhod. Nurse
+Rhumatologie = Rhumatologie
+Ricerca Scientifica = Ric. Sci.
+Ricerca Scientifica. 2 Ser. Parte 1, Rivista = Ric. Sci. 2 Ser. Pt. 1 Riv.
+Ricerca Scientifica. 2 Ser. Parte 2, Rendiconti. Sezione B, Biologica = Ric. Sci. 2 Ser. Pt 2 Rend. [B]
+Ricerca in Clinica e in Laboratorio = Ric. Clin. Lab.
+Riforma Medica = Riforma Med.
+Rinsho Biseibutshu Jinsoku Shindan Kenkyukai Shi (Journal of the Association for Rapid Method and Automation in Microbiology) = Rinsho Biseibutshu Jinsoku Shindan Kenkyukai Shi
+Rinsho Byori (Japanese Journal of Clinical Pathology) = Rinsho Byori
+Rinsho Hoshasen (Japanese Journal of Clinical Radiology) = Rinsho Hoshasen
+Rinsho Ketsueki (Japanese Journal of Clinical Hematology) = Rinsho Ketsueki
+Rinsho Kyobu Geka (Japanese Annals of Thoracic Surgery) = Rinsho Kyobu Geka
+Rinsho Shika (Clinical Dentistry) = Rinsho Shika
+Rinsho Shinkeigaku (Clinical Neurology) = Rinsho Shinkeigaku
+Rinsho Shishubyo Danwakai Kaishi = Rinsho Shishubyo Danwakai Kaishi
+Risk Analysis = Risk Anal.
+Risk Management = Risk Manage.
+Rivista Critica di Clinica Medica = Riv. Crit. Clin. Med.
+Rivista Europea per le Scienze Mediche e Farmacologiche = Riv. Eur. Sci. Med. Farmacol.
+Rivista Italiana Degli Odontotecnici = Riv. Ital. Odontotec.
+Rivista Italiana d'Igiene = Riv. Ital. Ig.
+Rivista Italiana di Ginecologia = Riv. Ital. Ginecol.
+Rivista Italiana di Odontoiatria Infantile = Riv. Ital. Odontoiatr. Infant.
+Rivista Italiana di Stomatologia = Riv. Ital. Stomatol.
+Rivista Oto-Neuro-Oftalmologica = Riv. Otoneurooftalmol.
+Rivista Sperimentale di Freniatria e Medicina Legale delle Alienazioni Mentali = Riv. Sper. Freniatr.
+Rivista d'Ostetricia e Ginecologia Pratica = Riv. Ostet. Ginecol. Prat.
+Rivista degli Infortuni e delle Malattie Professionali = Riv. Infort. Mal. Prof.
+Rivista dell'Infermiere = Riv. Inferm.
+Rivista dell'Istituto Sieroterapico Italiano = Riv. Ist. Sieroter. Ital.
+Rivista di Anatomia Patologica e di Oncologia = Riv. Anat. Patol. Oncol.
+Rivista di Biologia = Riv. Biol.
+Rivista di Clinica Pediatrica = Riv. Clin. Pediatr.
+Rivista di Emoterapia ed Immunoematologia = Riv. Emoter. Immunoematol.
+Rivista di Gastro-Enterologia = Riv. Gastroenterol.
+Rivista di Istochimica, Normale e Patologica = Riv. Istochim. Norm. Patol.
+Rivista di Malariologia = Riv. Malariol.
+Rivista di Medicina Aeronautica e Spaziale = Riv. Med. Aeronaut. Spaz.
+Rivista di Neurobiologia = Riv. Neurobiol.
+Rivista di Neurologia = Riv. Neurol.
+Rivista di Odontoiatria degli Amici di Brugg = Riv. Odontoiatr. Amici Brugg
+Rivista di Odontostomatologia e Implantoprotesi = Riv. Odontostomatol. Implantoprotesi
+Rivista di Ostetricia Ginecologia Pratica e Medicina Perinatale = Riv. Ostet. Ginecol. Prat. Med. Perinat.
+Rivista di Ostetricia e Ginecologia = Riv. Ostet. Ginecol.
+Rivista di Parassitologia = Riv. Parassitol.
+Rivista di Patologia Clinica e Sperimentale = Riv. Patol. Clin. Sper.
+Rivista di Patologia Nervosa e Mentale = Riv. Patol. Nerv. Ment.
+Rivista di Patologia e Clinica = Riv. Patol. Clin.
+Rivista di Storia della Medicina = Riv. Stor. Med.
+Rocky Mountain Medical Journal = Rocky Mt. Med. J.
+Rocznik Pomorskiej Akademii Medycznej im. Gen. Karola Swierczewskiego w Szczecinie = Rocz. Pomor. Akad. Med.
+Roczniki Akademii Medycznej im. Juliana Marchlewskiego w Bialymstoku = Rocz. Akad. Med. Im. Juliana Marchlewskiego Bialymst.
+Roczniki Akademii Medycznej im. Juliana Marchlewskiego w Bialymstoku. Supplement = Rocz. Akad. Med. Im. Juliana Marchlewskiego Bialymst. Suppl.
+Roczniki Akademii Medycznej w Bialymstoku = Rocz. Akad. Med. Bialymst.
+Roczniki Akademii Medycznej w Bialymstoku. Supplement = Rocz. Akad. Med. Bialymst. Supl.
+Roczniki Panstwowego Zakladu Higieny = Rocz. Panstw. Zakl. Hig.
+Rofo; Fortschritte auf dem Gebiete der Rontgenstrahlen und der Neuen Bildgebenden Verfahren = Rofo. Fortschr. Geb. Rontgenstr. Neuen Bildgeb. Verfahr.
+Rogerian Nursing Science News = Rogerian Nurs. Sci. News
+Romanian Journal of Endocrinology = Rom. J. Endocrinol.
+Romanian Journal of Internal Medicine = Rom. J. Intern. Med.
+Romanian Journal of Morphology and Embryology = Rom. J. Morphol. Embryol.
+Romanian Journal of Neurology and Psychiatry = Rom. J. Neurol. Psychiatry
+Romanian Journal of Physics=Rom. J. Phys.;RJPHEC;10/YR
+Romanian Journal of Physiology = Rom. J. Physiol.
+Romanian Journal of Virology = Rom. J. Virol.
+Romanian Medical Review = Rom. Med. Rev.
+Rontgen-Blatter = Rontgenblatter.
+Rontgenpraxis = Rontgenpraxis
+Rossiiskii Fiziologicheskii Zhurnal imeni I. M. Sechenova = Ross. Fiziol. Zh. Im. I. M. Sechenova
+Rossiiskii Fiziologicheskii Zhurnal imeni I.M. Sechenova = Ross. Fiziol. Zh. Im. I M Sechenova
+Rossiiskii Khimicheskii Zhurnal=Ross. Khim. Zh.;RKZHEZ;BM
+Rossiiskii Meditsinskii Zhurnal = Ross. Med. Zh.
+Roumanian Archives of Microbiology and Immunology = Roum. Arch. Microbiol. Immunol.
+Royal Canadian Dental Corps Quarterly = R. Can. Dent. Corps Q.
+Royal Institute of Public Health and Hygiene Journal = R. Inst. Public Health Hyg. J.
+Royal Society of Health Journal = R. Soc. Health J.
+Rozhledy v Chirurgii = Rozhl. Chir.
+Rozprawy Wydzialu Nauk Medycznych = Rozpr. Wydz. Nauk Med.
+Rubber Chemistry and Technology=Rubber Chem. Technol.;RCTEA4;5/YR
+Rumanian Medical Review = Rum. Med. Rev.
+Rural and Remote Health = Rural Remote Health
+Russ Coile's Health Trends = Russ Coiles Health Trends
+Russian Chemical Bulletin=Russ. Chem. Bull.;RCBUEY;M
+Russian Chemical Reviews=Russ. Chem. Rev.;RCRVAB;M
+Russian Journal of Applied Chemistry=Russ. J. Appl. Chem.;RJACEO;M
+Russian Journal of Bioorganic Chemistry=Russ. J. Bioorg. Chem.;RJBCET;BM
+Russian Journal of Coordination Chemistry=Russ. J. Coord. Chem.;RJCCEY;M
+Russian Journal of Electrochemistry=Russ. J. Electrochem.;RJELE3;M
+Russian Journal of General Chemistry=Russ. J. Gen. Chem.;RJGCEK;M
+Russian Journal of Genetics=Russ. J. Genet.;RJGEEQ;M
+Russian Journal of Organic Chemistry=Russ. J. Org. Chem.;RJOCEQ;M
+Russian Journal of Physical Chemistry=Russ. J. Phys. Chem.;RJPCAR;M
+Russian Journal of Plant Physiology=Russ. J. Plant Physiol.;RJPPE2;BM
+Ryan Advisory for Health Services Governing Boards = Ryan Advis. Health Serv. Gov. Boards
+Ryoikibetsu Shokogun Shirizu (Series on Symptomatic Syndrome by Area) = Ryoikibetsu Shokogun Shirizu
+Ryumachi = Ryumachi
+S e TA e NU; Rivista di Scienza e Tecnologia Degli Alimenti e di Nutrizione Umana = S TA NU
+SA Nursing Journal = SA Nurs. J.
+SAAD Digest = SAAD Dig.
+SAAS Bulletin, Biochemistry and Biotechnology = SAAS Bull. Biochem. Biotechnol.
+SADJ = SADJ
+SAR and QSAR in Environmental Research = SAR QSAR Environ. Res.
+SC Reports = SC Rep.
+SC Trodent = SC Trodent
+SCADA Journal = SCADA J.
+SCHA Journal = SCHA J.
+SCI Nursing = SCI Nurs.
+SCNA Newsletter = SCNA Newsl.
+SDA Dentist = SDA Dent.
+SHSTF = SHSTF
+SMU Law Review = SMU Law Rev.
+SOLAIAT (Sociedad Odontologica Latino-Americana de Implantes Aloplasticos y Transplantes) = SOLAIAT
+SPE Production & Facilities=SPE Prod. Facil.;SPRFEZ;Q
+SPE Reservoir Evaluation & Engineering=SPE Reservoir Eval. Eng.;SREEFG;BM
+SPVN = SPVN
+SSO; Schweizerische Monatsschrift fur Zahnheilkunde = SSO Schweiz. Monatsschr. Zahnheilkd.
+STAL, Sciences et Techniques de l'Animal de Laboratoire=STAL, Sci. Tech. Anim. Lab.;STALDT;Q
+STNS Journal of Trauma Nursing = STNS J. Trauma Nurs.
+Sabouraudia = Sabouraudia
+Sac Explorer = Sac Explor.
+Sairaanhoidon Vuosikirja = Sairaanh. Vuosik.
+Sairaanhoitaja = Sairaanhoitaja
+Sairaanhoitajalehti = Sairaanhoitajalehti
+Saishin Igaku (Recent Medicine) = Saishin Igaku
+Salud Bucal = Salud Bucal
+Salud Publica de Mexico = Salud Publica Mex.
+Same-Day Surgery = Same. Day Surg.
+Sammlung Zwangloser Abhandlungen aus dem Gebiete der Psychiatrie und Neurologie = Samml. Zwangl. Abh. Geb. Psychiatr. Neurol.
+San Fernando Valley Dental Society Bulletin = San Fernando Val. Dent. Soc. Bull.
+San Gabriel Valley Dental Society Bulletin = San Gabriel Val. Dent. Soc. Bull.
+Sanfujinka no Jissai (Practice of Gynecology and Obstetrics) = Sanfujinka No Jissai
+Sangre = Sangre (Barc.)
+Sangyo Eiseigaku Zasshi (Journal of Occupational Health) = Sangyo Eiseigaku Zasshi
+Sangyo Igaku (Japanese Journal of Industrial Health) = Sangyo Igaku
+Sante = Sante
+Sante Mentale au Quebec = Sante Ment. Que.
+Sante Publique = Sante Publique (Bucur.)
+Sante Quebec = Sante Que.
+Santo Tomas Nursing Journal = St. Tomas Nurs. J.
+Sapporo Igaku Zasshi (Sapporo Medical Journal) = Sapporo Igaku Zasshi
+Sarcoidosis = Sarcoidosis
+Sarcoidosis, Vasculitis, and Diffuse Lung Diseases = Sarcoidosis Vasc. Diffuse Lung Dis.
+Saturday Review = Saturday Rev.
+Sbornik Lekarsky = Sb. Lek.
+Sbornik Vedeckych Praci Lekarske Fakulty Karlovy Univerzity v Hradci Kralove = Sb. Ved. Pr. Lek. Fak. Karlovy Univerzity Hradci Kralove
+Sbornik Vedeckych Praci Lekarske Fakulty Karlovy Univerzity v Hradci Kralove. Supplementum = Sb. Ved. Pr. Lek. Fak. Karlovy Univerzity Hradci Kralove. Suppl.
+Scalpel = Scalpel (Brux.)
+Scandinavian Audiology = Scand. Audiol.
+Scandinavian Audiology. Supplementum = Scand. Audiol. Suppl.
+Scandinavian Cardiovascular Journal = Scand. Cardiovasc. J.
+Scandinavian Cardiovascular Journal. Supplement = Scand. Cardiovasc. J. Suppl.
+Scandinavian Journal of Caring Sciences = Scand. J. Caring Sci.
+Scandinavian Journal of Clinical and Laboratory Investigation = Scand. J. Clin. Lab. Invest.
+Scandinavian Journal of Clinical and Laboratory Investigation. Supplement = Scand. J. Clin. Lab. Invest. Suppl.
+Scandinavian Journal of Dental Research = Scand. J. Dent. Res.
+Scandinavian Journal of Gastroenterology = Scand. J. Gastroenterol.
+Scandinavian Journal of Gastroenterology. Supplement = Scand. J. Gastroenterol. Suppl.
+Scandinavian Journal of Haematology = Scand. J. Haematol.
+Scandinavian Journal of Haematology. Supplementum = Scand. J. Haematol. Suppl.
+Scandinavian Journal of Immunology = Scand. J. Immunol.
+Scandinavian Journal of Immunology. Supplement = Scand. J. Immunol. Suppl.
+Scandinavian Journal of Infectious Diseases = Scand. J. Infect. Dis.
+Scandinavian Journal of Infectious Diseases. Supplementum = Scand. J. Infect. Dis. Suppl.
+Scandinavian Journal of Laboratory Animal Science=Scand. J. Lab. Anim. Sci.;SJLSE2;Q
+Scandinavian Journal of Medicine and Science in Sports = Scand. J. Med. Sci. Sports
+Scandinavian Journal of Metallurgy=Scand. J. Metall.;SJMLAG;BM
+Scandinavian Journal of Plastic and Reconstructive Surgery = Scand. J. Plast. Reconstr. Surg.
+Scandinavian Journal of Plastic and Reconstructive Surgery and Hand Surgery = Scand. J. Plast. Reconstr. Surg. Hand Surg.
+Scandinavian Journal of Plastic and Reconstructive Surgery and Hand Surgery. Supplementum = Scand. J. Plast. Reconstr. Surg. Hand Surg. Suppl.
+Scandinavian Journal of Plastic and Reconstructive Surgery. Supplementum = Scand. J. Plast. Reconstr. Surg. Suppl.
+Scandinavian Journal of Primary Health Care = Scand. J. Prim. Health Care
+Scandinavian Journal of Primary Health Care. Supplement = Scand. J. Prim. Health Care Suppl.
+Scandinavian Journal of Psychology = Scand. J. Psychol.
+Scandinavian Journal of Public Health = Scand. J. Public Health
+Scandinavian Journal of Public Health. Supplement = Scand. J. Public Health Suppl.
+Scandinavian Journal of Rehabilitation Medicine = Scand. J. Rehabil. Med.
+Scandinavian Journal of Rehabilitation Medicine. Supplement = Scand. J. Rehabil. Med. Suppl.
+Scandinavian Journal of Respiratory Diseases = Scand. J. Respir. Dis.
+Scandinavian Journal of Respiratory Diseases. Supplementum = Scand. J. Respir. Dis. Suppl.
+Scandinavian Journal of Rheumatology = Scand. J. Rheumatol.
+Scandinavian Journal of Rheumatology. Supplement = Scand. J. Rheumatol. Suppl.
+Scandinavian Journal of Social Medicine = Scand. J. Soc. Med.
+Scandinavian Journal of Social Medicine. Supplementum = Scand. J. Soc. Med. Suppl.
+Scandinavian Journal of Surgery = Scand. J. Surg.
+Scandinavian Journal of Thoracic and Cardiovascular Surgery = Scand. J. Thorac. Cardiovasc. Surg.
+Scandinavian Journal of Thoracic and Cardiovascular Surgery. Supplementum = Scand. J. Thorac. Cardiovasc. Surg. Suppl.
+Scandinavian Journal of Urology and Nephrology = Scand. J. Urol. Nephrol.
+Scandinavian Journal of Urology and Nephrology. Supplementum = Scand. J. Urol. Nephrol. Suppl.
+Scandinavian Journal of Work, Environment and Health = Scand. J. Work. Environ. Health
+Scandinavian Society of Forensic Odontology Newsletter = Scand. Soc. Forensic Odontol. Newsl.
+Scanning = Scanning
+Scanning Electron Microscopy = Scan. Electron Microsc.
+Scanning Microscopy = Scanning Microsc.
+Scanning Microscopy. Supplement = Scanning Microsc. Suppl.
+Scanodont = Scanodont
+Schizophrenia Bulletin = Schizophr. Bull.
+Schizophrenia Research = Schizophr. Res.
+Scholarly Inquiry for Nursing Practice = Sch. Inq. Nurs. Pract.
+School Dental Services Gazette = Sch. Dent. Serv. Gaz. N. Z.
+School Health Review = Sch. Health Rev.
+Schriftenreihe Neurologie (Neurology Series) = Schriftenr. Neurol.
+Schriftenreihe Zentralblatt fur Arbeitsmedizin Arbeitsschutz und Prophylaxe = Schriftenr. Zentralbl. Arbeitsmed. Arbeitsschutz Prophyl.
+Schriftenreihe Zentralblatt fur Arbeitsmedizin, Arbeitsschutz, Prophylaxe, und Ergonomie = Schriftenr. Zentralbl. Arbeitsmed. Arbeitsschutz. Prophyl. Ergonomie
+Schriftenreihe aus dem Gebiete des Offentlichen Gesundheitswesens = Schriftenr. Geb. Off. Gesundheitswes.
+Schriftenreihe des Vereins fur Wasser-, Boden-, und Lufthygiene = Schriftenr. Ver. Wasser. Boden. Lufthyg.
+Schweizer Archiv fur Neurologie und Psychiatrie = Schweiz. Arch. Neurol. Psychiatr.
+Schweizer Archiv fur Neurologie, Neurochirurgie und Psychiatrie = Schweiz. Arch. Neurol. Neurochir. Psychiatr.
+Schweizer Archiv fur Tierheilkunde = Schweiz. Arch. Tierheilkd.
+Schweizer Monatsschrift fur Zahnmedizin = Schweiz. Monatsschr. Zahnmed.
+Schweizerische Apotheker-Zeitung = Schweiz. Apoth. Ztg.
+Schweizerische Medizinische Wochenschrift = Schweiz. Med. Wochenschr.
+Schweizerische Medizinische Wochenschrift. Supplementum = Schweiz. Med. Wochenschr. Suppl.
+Schweizerische Monatsschrift fur Zahnmedizin = Schweiz. Monatsschr. Zahnmed.
+Schweizerische Rundschau fur Medizin Praxis = Schweiz. Rundsch. Med. Prax.
+Schweizerische Zeitschrift fur Medizin und Traumatologie = Schweiz. Z. Med. Traumatol.
+Schweizerische Zeitschrift fur Psychologie und Ihre Anwendungen = Schweiz. Z. Psychol. Anwend.
+Schweizerische Zeitschrift fur Sportmedizin = Schweiz. Z. Sportmed.
+Schwestern Revue = Schwest. Rev.
+Science = Science
+Science (Washington, DC, United States)=Science (Washington, DC, U. S.);SCIEAS;W
+Science Digest = Sci. Dig.
+Science News = Sci. News
+Science Progress = Sci. Prog.
+Science Reports of the Research Institute, Tohoku University. Ser. C, Medicine = Sci. Rep. Res. Inst. Tohoku Univ. [Med.]
+Science and Justice = Sci. Justice
+Science et Recherche Odontostomatologiques = Sci. Rech. Odontostomatol.
+Science in China, Series B: Chemistry=Sci. China, Ser. B: Chem.;SCBCFQ;BM
+Science in China. Series B, Chemistry, Life Sciences and Earth Sciences = Sci. China B
+Science in China. Series C, Life Sciences = Sci. China C Life Sci.
+Science in Progress = Sci. Prog. (New Haven)
+Science of the Total Environment = Sci. Total Environ.
+Science's STKE = Sci. STKE
+Science, Medicine, and Man = Sci. Med. Man
+Scientia Sinica = Sci. Sin.
+Scientia Sinica. Series B, Chemical, Biological, Agricultural, Medical and Earth Sciences = Sci. Sin. [B]
+Scientific American = Sci. Amer.
+Scientific Basis of Medicine Annual Reviews = Sci. Basis Med. Annu. Rev.
+Scientific Proceedings of the Cardiff Medical Society = Sci. Proc. Cardiff Med. Soc.
+Scientific and Educational Bulletin = Sci. Educ. Bull.
+Scientific and Educational Journal = Sci. Educ. J.
+Scottish Medical Journal = Scott. Med. J.
+Scripta Materialia=Scr. Mater.;SCMAF7;SM
+Scripta Medica = Scr. Med. (Brno)
+Second Messengers and Phosphoproteins = Second Messengers Phosphoproteins
+Second Opinion = Second Opin.
+Second Opinions of Health Care Issues = Second Opin. Health Care Issues
+Seibutsu Kogaku Kaishi=Seibutsu Kogaku Kaishi;SEKAEA;M
+Seikagaku (Journal of Japanese Biochemical Society) = Seikagaku
+Seikei Geka (Orthopedic Surgery) = Seikei Geka
+Seiroka Kango Daigaku Kiyo = Seiroka Kango Daigaku Kiyo
+Seishin Igaku Kenkyusho Gyosekishu (Bulletin of the Seishin-Igaku Institute) = Seishin Igaku Kenkyusho Gyosekishu
+Seishin Shinkeigaku Zasshi (Psychiatria et Neurologia Japonica) = Seishin Shinkeigaku Zasshi
+Seizure = Seizure
+Selecoes Odontologicas = Sel. Odontol. (Sao Paulo)
+Selective Cancer Therapeutics = Sel. Cancer Ther.
+Semaine Therapeutique = Sem. Ther.
+Semaine des Hopitaux = Sem. Hop.
+Semaine des Hopitaux Therapeutique = Sem. Hop. Ther.
+Semiconductor Science and Technology=Semicond. Sci. Technol.;SSTEET;M
+Semiconductors=Semiconductors;SMICES;M
+Semina = Semina
+Seminario de Ensenanza de la Odontopediatria = Semin. Ensen. Odontopediatr.
+Seminars for Nurse Managers = Semin. Nurse Manag.
+Seminars in Adolescent Medicine = Semin. Adolesc. Med.
+Seminars in Arthritis and Rheumatism = Semin. Arthritis Rheum.
+Seminars in Arthroplasty = Semin. Arthroplasty
+Seminars in Cancer Biology = Semin. Cancer Biol.
+Seminars in Cell Biology = Semin. Cell Biol.
+Seminars in Cell and Developmental Biology = Semin. Cell Dev. Biol.
+Seminars in Clinical Neuropsychiatry = Semin. Clin. Neuropsychiatry
+Seminars in Cutaneous Medicine and Surgery = Semin. Cutan. Med. Surg.
+Seminars in Dental Hygiene = Semin. Dent. Hyg.
+Seminars in Dermatology = Semin. Dermatol.
+Seminars in Diagnostic Pathology = Semin. Diagn. Pathol.
+Seminars in Drug Treatment = Semin. Drug Treat.
+Seminars in Fetal and Neonatal Medicine = Semin. Fetal. Neonatal Med.
+Seminars in Gastrointestinal Disease = Semin. Gastrointest. Dis.
+Seminars in Hematology = Semin. Hematol.
+Seminars in Immunology = Semin. Immunol.
+Seminars in Interventional Cardiology = Semin. Interv. Cardiol.
+Seminars in Laparoscopic Surgery = Semin. Laparosc. Surg.
+Seminars in Liver Disease = Semin. Liver Dis.
+Seminars in Musculoskeletal Radiology = Semin. Musculoskelet. Radiol.
+Seminars in Neonatology = Semin. Neonatol.
+Seminars in Nephrology = Semin. Nephrol.
+Seminars in Neurology = Semin. Neurol.
+Seminars in Nuclear Medicine = Semin. Nucl. Med.
+Seminars in Oncology = Semin. Oncol.
+Seminars in Oncology Nursing = Semin. Oncol. Nurs.
+Seminars in Ophthalmology = Semin. Ophthalmol.
+Seminars in Orthodontics = Semin. Orthod.
+Seminars in Pediatric Neurology = Semin. Pediatr. Neurol.
+Seminars in Pediatric Surgery = Semin. Pediatr. Surg.
+Seminars in Perinatology = Semin. Perinatol.
+Seminars in Perioperative Nursing = Semin. Perioper. Nurs.
+Seminars in Psychiatry = Semin. Psychiatry
+Seminars in Radiation Oncology = Semin. Radiat. Oncol.
+Seminars in Reproductive Endocrinology = Semin. Reprod. Endocrinol.
+Seminars in Reproductive Medicine = Semin. Reprod. Med.
+Seminars in Respiratory Infections = Semin. Respir. Infect.
+Seminars in Roentgenology = Semin. Roentgenol.
+Seminars in Speech and Language = Semin. Speech Lang.
+Seminars in Surgical Oncology = Semin. Surg. Oncol.
+Seminars in Thoracic and Cardiovascular Surgery = Semin. Thorac. Cardiovasc. Surg.
+Seminars in Thoracic and Cardiovascular Surgery. Pediatric Cardiac Surgery Annual = Semin. Thorac. Cardiovasc. Surg. Pediatr. Card. Surg. Annu.
+Seminars in Thrombosis and Hemostasis = Semin. Thromb. Hemost.
+Seminars in Ultrasound, CT and MR = Semin. Ultrasound. CT MR
+Seminars in Urologic Oncology = Semin. Urol. Oncol.
+Seminars in Urology = Semin. Urol.
+Seminars in Vascular Surgery = Semin. Vasc. Surg.
+Seminars in Veterinary Medicine and Surgery (Small Animal) = Semin. Vet. Med. Surg. (Small Anim.)
+Senior Nurse = Sr. Nurse
+Sensors and Actuators, A: Physical=Sens. Actuators, A;SAAPEB;16/yr
+Sensors and Actuators, B: Chemical=Sens. Actuators, B;SABCEB;BW
+Sensory Processes = Sens. Processes
+Separation Science and Technology=Sep. Sci. Technol.;SSTEDS;16/YR
+Separation and Purification Technology=Sep. Purif. Technol.;SPUTFP;18/yr
+Sepu=Sepu;SEPUER;BM
+Series Haematologica = Ser. Haematol.
+Series Paedopsychiatrica = Ser. Paedopsychiatr.
+Series on Nursing Administration = Ser. Nurs. Adm.
+Servir = Servir
+Sexual Abuse = Sex. Abuse
+Sexual Health = Sex. Health
+Sexually Transmitted Diseases = Sex. Transm. Dis.
+Sexually Transmitted Infections = Sex. Transm. Infect.
+Sheng Li Ke Xue Jin Zhan (Progress in Physiology) = Sheng Li Ke Xue Jin Zhan
+Sheng Li Xue Bao (Acta Physiologica Sinica) = Sheng Li Xue Bao
+Sheng Wu Yi Xue Gong Cheng Xue Za Zhi (Journal of Biomedical Engineering) = Sheng Wu Yi Xue Gong Cheng Xue Za Zhi
+Shi Yan Sheng Wu Xue Bao (Bulletin of Experimental Biology) = Shi Yan Sheng Wu Xue Bao
+Shigaku (Odontology) = Shigaku
+Shika Igaku (Journal of Osaka Odontological Society) = Shika Igaku
+Shika Kiso Igakkai Zasshi (Japanese Journal of Oral Biology) = Shika Kiso Igakkai Zasshi
+Shika Rikogaku Zasshi (Journal of the Japan Society for Dental Apparatus and Materials) = Shika Rikogaku Zasshi
+Shika Zairyo, Kikai (Journal of the Japanese Society for Dental Materials and Devices) = Shika Zairyo Kikai
+Shikai Tenbo (Dental Outlook) = Shikai Tenbo
+Shikwa Gakuho (Dental Science Reports) = Shikwa Gakuho
+Shinkei Kenkyu No Shimpo (Advances in Neurological Sciences) = Shinkei Kenkyu No Shimpo
+Shinrigaku Kenkyu (Japanese Journal of Psychology) = Shinrigaku Kenkyu
+Shiyo (Journal of the Tokyo Dental Association) = Shiyo
+Shiyou Huagong=Shiyou Huagong;SHHUE8;M
+Shiyou Xuebao, Shiyou Jiagong=Shiyou Xuebao, Shiyou Jiagong;SXSHEY;BM
+Shock = Shock
+Shoni Shikagaku Zasshi (Japanese Journal of Pedodontics) = Shoni Shikagaku Zasshi
+Showa Igakkai Zasshi (Journal of the Showa Medical Association) = Showa Igakkai Zasshi
+Showa Shigakkai Zasshi (Journal of Showa University Dental Society) = Showa Shigakkai Zasshi
+Shuichuli Jishu=Shuichuli Jishu;SHJIEG;M
+Shujutsu (Operation) = Shujutsu
+Sichuan Da Xue Xue Bao. Yi Xue Ban (Journal of Sichuan University. Medical Science Edition) = Sichuan Da Xue Xue Bao Yi Xue Ban
+Sichuan Yi Xue Yuan Xue Bao (Acta Academiae Medicinae Sichuan) = Sichuan Yi Xue Yuan Xue Bao
+Sicilia Sanitaria = Sicil. Sanit.
+Sight-Saving Review = Sight. Sav. Rev.
+Sightsaving = Sightsaving
+Sightsaving Review = Sightsav. Rev.
+Signal Transduction=Signal Transduction;STIRCI;6/YR
+Signature = Signature
+Silicon Chemistry=Silicon Chem.;SCIHB4;BM
+Singapore Dental Journal = Singapore Dent. J.
+Singapore Medical Journal = Singapore Med. J.
+Sistema Nervoso = Sist. Nerv.
+Sistole = Sistole
+Sjukskoterskan = Sjukskoterskan
+Skeletal Radiology = Skeletal Radiol.
+Skin Pharmacology = Skin Pharmacol.
+Skin Pharmacology and Applied Skin Physiology = Skin Pharmacol. Appl. Skin Physiol.
+Skin Pharmacology and Physiology = Skin Pharmacol. Physiol.
+Skinmed = Skinmed
+Sleep = Sleep
+Sleep Research Online = Sleep Res. Online
+Sloan Management Review = Sloan Manage. Rev.
+Small=Small;SMALBC;12/YR
+Social Biology = Soc. Biol.
+Social Casework = Soc. Casework
+Social Forces = Soc. Forces
+Social Policy = Soc. Policy
+Social Problems = Soc. Probl.
+Social Psychiatry = Soc. Psychiatry
+Social Psychiatry and Psychiatric Epidemiology = Soc. Psychiatry Psychiatr. Epidemiol.
+Social Psychology = Soc. Psychol.
+Social Psychology Quarterly = Soc. Psychol. Q.
+Social Science Research = Soc. Sci. Res.
+Social Science and Medicine = Soc. Sci. Med.
+Social Science and Medicine. Medical Anthropology = Soc. Sci. Med. [Med. Anthropol.]
+Social Science and Medicine. Medical Economics = Soc. Sci. Med. [Med. Econ.]
+Social Science and Medicine. Medical Geography = Soc. Sci. Med. [Med. Geogr.]
+Social Science and Medicine. Medical Psychology and Medical Sociology = Soc. Sci. Med. [Med. Psychol. Med. Sociol.]
+Social Science and Medicine. Part A, Medical Sociology = Soc. Sci. Med. [A]
+Social Science and Medicine. Part B, Medical Anthropology = Soc. Sci. Med. [B]
+Social Science and Medicine. Part C, Medical Economics = Soc. Sci. Med. [C]
+Social Science and Medicine. Part D, Medical Geography = Soc. Sci. Med. [D]
+Social Science and Medicine. Part E, Medical Psychology = Soc. Sci. Med. [E]
+Social Science and Medicine. Part F, Medical and Social Ethics = Soc. Sci. Med. [F]
+Social Security Bulletin = Soc. Secur. Bull.
+Social Security Bulletin. Annual Statistical Supplement. = Soc. Secur. Bull. Annu. Stat. Suppl.
+Social Service Review = Soc. Serv. Rev.
+Social Work = Soc. Work
+Social Work Research = Soc. Work Res.
+Social Work Research and Abstracts = Soc. Work Res. Abstr.
+Social Work in Health Care = Soc. Work Health Care
+Social and Rehabilitation Record = Soc. Rehabil. Rec.
+Social-Medicinsk Tidskrift = Soc. Med. Tidskr.
+Society = Society
+Society for Applied Bacteriology Symposium Series = Soc. Appl. Bacteriol. Symp. Ser.
+Society for Nursing History Gazette = Soc. Nurs. Hist. Gaz.
+Society of General Physiologists Series = Soc. Gen. Physiol. Ser.
+Socio-Economic Planning Sciences = Socioecon. Plann. Sci.
+Socioeconomic Issues of Health = Socioecon. Issues Health
+Sociological Review = Sociol. Rev.
+Sociological Review Monograph = Sociol. Rev. [Monogr.]
+Sociology of Health and Illness = Sociol. Health Illn.
+Sociometry = Sociometry
+Soft Matter=Soft Matter;SMOABF;6/YR
+Software in Healthcare = Softw. Healthc.
+Sogo Kango (Comprehensive Nursing Quarterly) = Sogo Kango
+Soil Biology & Biochemistry=Soil Biol. Biochem.;SBIOAH;M
+Soil Science=Soil Sci.;SOSCAK;M
+Soil Science Society of America Journal=Soil Sci. Soc. Am. J.;SSSJD4;BM
+Soins = Soins
+Soins. Cardiologie = Soins. Cardiol.
+Soins. Chirurgie = Soins. Chir.
+Soins. Chirurgie Generale et Specialisee = Soins. Chir. Gen. Spec.
+Soins. Formation, Pedagogie, Encadrement = Soins. Form. Pedagog. Encadr.
+Soins. Gerontologie = Soins. Gerontol.
+Soins. Gynecologie, Obstetrique, Puericulture = Soins. Gynecol. Obstet. Pueric.
+Soins. Gynecologie, Obstetrique, Puericulture, Pediatrie = Soins. Gynecol. Obstet. Pueric. Pediatr.
+Soins. Pathologie Tropicale = Soins. Pathol. Trop.
+Soins. Pediatrie, Puericulture = Soins. Pediatr. Pueric.
+Soins. Psychiatrie = Soins. Psychiatr.
+Solar Energy Materials & Solar Cells=Sol. Energy Mater. Sol. Cells;SEMCEQ;20/YR
+Solid State Communications=Solid State Commun.;SSCOA4;48/YR
+Solid State Ionics=Solid State Ionics;SSIOD3;40/YR
+Solid State Nuclear Magnetic Resonance = Solid State Nucl. Magn. Reson.
+Solid State Sciences=Solid State Sci.;SSSCFJ;M
+Solid-State Electronics=Solid-State Electron.;SSELA5;M
+Solvent Extraction Research and Development, Japan=Solvent Extr. Res. Dev., Jpn.;SERDEK;A
+Solvent Extraction and Ion Exchange=Solvent Extr. Ion Exch.;SEIEDB;BM
+Somatic Cell Genetics = Somatic Cell Genet.
+Somatic Cell and Molecular Genetics = Somat. Cell Mol. Genet.
+Somatosensory Research = Somatosens. Res.
+Somatosensory and Motor Research = Somatosens. Mot. Res.
+Sonde = Sonde
+Sonderband der Zeitschrift Strahlentherapie und Onkologie = Sonderb. Z. Strahlenther. Onkol.
+Sonderbande zur Strahlentherapie und Onkologie = Sonderb. Strahlenther. Onkol.
+Soproden = Soproden
+Sotilaslaaketieteellinen Aikakauslehti = Sotilaslaak. Aikak.
+Soudni Lekarstvi = Soud. Lek.
+Soundings = Soundings
+South African Journal of Chemistry=S. Afr. J. Chem.;SAJCDG;IRR
+South African Journal of Communication Disorders = S. Afr. J. Commun. Disord.
+South African Journal of Medical Sciences = S. Afr. J. Med. Sci.
+South African Journal of Surgery = S. Afr. J. Surg.
+South African Medical Journal = S. Afr. Med. J.
+South Carolina Dental Journal = S. C. Dent. J.
+South Carolina Nurse = S. C. Nurse
+South Carolina Nursing = S. C. Nurs.
+South Dakota Journal of Medicine = S. D. J. Med.
+South Dakota Medicine = S. D. Med.
+South Dakota Nurse = S. D. Nurse
+Southeast Asian Journal of Tropical Medicine and Public Health = Southeast Asian J. Trop. Med. Public Health
+Southern Hospitals = South. Hosp.
+Southern Medical Journal = South. Med. J.
+Southern Medicine = South. Med.
+Southwestern Medicine = Southwest. Med.
+Sovetskaia Meditsina = Sov. Med.
+Sovetskoe Zdravookhranenie = Sov. Zdravookhr.
+Sovetskoe Zdravookhranenie Kirgizii = Sov. Zdravookhr. Kirg.
+Soviet Genetics = Sov. Genet.
+Soviet Journal of Developmental Biology = Sov. J. Dev. Biol.
+Soviet Journal of Ecology = Sov. J. Ecol.
+Sozial- und Praventivmedizin = Soz. Praventivmed.
+Sozialmedizinische und Padagogische Jugendkunde = Sozialmed. Padagog. Jugendkd.
+Space Life Sciences = Space Life Sci.
+Space Science Review = Space Sci. Rev.
+Spanish Journal of Psychology = Span. J. Psychol.
+Spatial Vision = Spat. Vis.
+Special Care in Dentistry = Spec. Care Dentist.
+Special Education = Spec. Educ.
+Special Education: Forward Trends = Spec. Educ. Forward Trends
+Special Libraries = Spec. Libr.
+Special Report Series, Indian Council of Medical Research = Spec. Rep. Ser. Indian Counc. Med. Res.
+Special Topics in Endocrinology and Metabolism = Spec. Top. Endocrinol. Metab.
+Specialty Law Digest. Health Care (Monthly) = Spec. Law Dig. Health Care (Mon.)
+Specialty Law Digest. Health Care Law = Spec. Law Dig. Health Care Law
+Specifying Engineer = Specif. Eng.
+Spectrochimica Acta, Part A: Molecular and Biomolecular Spectroscopy=Spectrochim. Acta, Part A;SAMCAS;14/YR
+Spectrochimica Acta, Part B: Atomic Spectroscopy=Spectrochim. Acta, Part B;SAASBH;M
+Spectrochimica Acta. Part A, Molecular and Biomolecular Spectroscopy = Spectrochim. Acta. A. Mol. Biomol. Spectrosc.
+Spectroscopy (Amsterdam, Netherlands)=Spectroscopy (Amsterdam, Neth.);SPIJDZ;6/YR
+Spectroscopy Letters=Spectrosc. Lett.;SPLEBX;6/YR
+Spectrum = Spectrum
+Speech Pathology and Therapy = Speech Pathol. Ther.
+Sperimentale = Sperimentale
+Spinal Cord = Spinal Cord
+Spine = Spine
+Spine Journal = Spine J.
+Sports Biomechanics = Sports Biomech.
+Sports Medicine = Sports Med.
+Sportverletzung Sportschaden = Sportverletz. Sportschaden
+Springer Seminars in Immunopathology = Springer Semin. Immunopathol.
+Springer Series on Health Care and Society = Springer Ser. Health Care Soc.
+Srpski Arhiv za Celokupno Lekarstvo = Srp. Arh. Celok. Lek.
+St Luke's Hospital Gazette = St Lukes Hosp. Gaz. (Guardamangia)
+Stain Technology = Stain Technol.
+Stanford Law Review = Stanford Law Rev.
+Starch/Staerke=Starch/Staerke;STARDD;M
+Stat; Bulletin of the Wisconsin Nurses Association = Stat.
+State Government = State Gov.
+State Nursing Legislation Quarterly = State Nurs. Legis. Q.
+State of Health Care in America = State Health Care Am.
+Statistical Applications in Genetics and Molecular Biology = Stat. Appl. Genet. Mol. Biol.
+Statistical Bulletin, Metropolitan Insurance Companies = Stat. Bull. Metrop. Insur. Co.
+Statistical Bulletin, Metropolitan Life Foundation = Stat. Bull. Metrop. Life Found.
+Statistical Bulletin, Metropolitan Life Insurance Company = Stat. Bull. Metropol. Life Insur. Co.
+Statistical Methods in Medical Research = Stat. Methods Med. Res.
+Statistical Notes for Health Planners = Stat. Notes Health Plann.
+Statistics in Medicine = Stat. Med.
+Steel Research International=Steel Res. Int.;SRITB9;M
+Stem Cells = Stem Cells
+Stem Cells and Development = Stem Cells Dev.
+Stereotactic and Functional Neurosurgery = Stereotact. Funct. Neurosurg.
+Sterile World = Sterile World
+Steroidologia = Steroidologia
+Steroids = Steroids
+Steroids and Lipids Research = Steroids Lipids Res.
+Stoma = Stoma (Lisb.)
+Stomatologia = Stomatologia (Bucur.)
+Stomatologia Mediterranea = Stomatol. Mediterr.
+Stomatologica = Stomatologica (Genova)
+Stomatologicke Zpravy = Stomatol. Zpr.
+Stomatologie = Stomatologie
+Stomatologie der DDR = Stomatol. DDR
+Stomatologiia = Stomatologiia (Sofiia)
+Stomatologika Chronika = Stomatol. Chron. (Athenai)
+Stomatoloski Glasnik Srbije = Stomatol. Glas. Srb.
+Stomatoloski Vjesnik (Stomatological Review) = Stomatol. Vjesn.
+Strabismus = Strabismus
+Strahlenschutz in Forschung und Praxis = Strahlenschutz Forsch. Prax.
+Strahlentherapie = Strahlentherapie
+Strahlentherapie und Onkologie = Strahlenther. Onkol.
+Strahlentherapie. Sonderbande = Strahlentherapie [Sonderb.]
+Strasbourg Medical = Strasb. Med.
+Strategies for Healthcare Excellence = Strateg. Healthc. Excell.
+Stress = Stress
+Stroke = Stroke
+Struct.--Process., Meas., Phenom. Journal of Vacuum Science & Technology, B: Microelectronics and Nanometer Structures--Processing, Measurement, and Phenomena=J. Vac. Sci. Technol., B: Microelectron. Nanometer;JVSTBM;BM
+Structural Chemistry=Struct. Chem.;STCHES;BM
+Structure = Structure
+Structure (Cambridge, MA, United States)=Structure (Cambridge, MA, U. S.);STRUE6;M
+Structure with Folding and Design = Structure Fold. Des.
+Studi Sassaresi = Studi Sassar.
+Studies in Applied Mathematics = Stud. Appl. Math.
+Studies in Family Planning = Stud. Fam. Plann.
+Studies in Health Technology and Informatics = Stud. Health Technol. Inform.
+Studies in Human Ecology = Stud. Hum. Ecol.
+Studies in Neuro-Anatomy = Stud. Neuroanat.
+Studii si Cercetari de Endocrinologie = Stud. Cercet. Endocrinol.
+Studii si Cercetari de Fiziologie = Stud. Cercet. Fiziol.
+Studii si Cercetari de Inframicrobiologie = Stud. Cercet. Inframicrobiol.
+Studii si Cercetari de Medicina Interna = Stud. Cercet. Med. Interna
+Studii si Cercetari de Neurologie = Stud. Cercet. Neurol.
+Studii si Cercetari de Virusologie = Stud. Cercet. Virusol.
+Studium Generale = Stud. Gen. (Berl.)
+Sub-Cellular Biochemistry = Subcell. Biochem.
+Subacute Care = Subacute Care
+Subj. Biochimica et Biophysica Acta, Specialized Section on Nucleic Acids and Related Subjects=Biochim. Biophys. Acta, Spec. Sect. Nucleic Acids Relat.;BBASB7;
+Subsidia Medica = Subsid. Med.
+Substance Use and Misuse = Subst. Use Misuse
+Substance and Alcohol Actions/Misuse = Subst. Alcohol Actions. Misuse
+Sudebno-Meditsinskaia Ekspertiza = Sud. Med. Ekspert.
+Sudhoffs Archiv; Vierteljahrsschrift fur Geschichte der Medizin und der Naturwissenschaften, der Pharmazie und der Mathematik = Sudhoffs Arch. Vierteljahrsschr. Gesch. Med. Naturwiss. Pharm. Math.
+Sudhoffs Archiv; Zeitschrift fur Wissenschaftsgeschichte = Sudhoffs Arch. Z. Wissenschaftsgesch.
+Sudhoffs Archiv; Zeitschrift fur Wissenschaftsgeschichte. Beihefte = Sudhoffs Arch. Z. Wissenschaftsgesch. Beih.
+Suicide = Suicide
+Suicide and Life-Threatening Behavior = Suicide Life. Threat. Behav.
+Suomen Hammaslaakarilehti = Suom. Hammaslaakarilehti
+Suomen Hammaslaakariseuran Toimituksia = Suom. Hammaslaak. Toim.
+Suomen Laakarilehti = Suom. Laakaril.
+Suomen Naishammaslaakarit Ryhma Julkaisu = Suom. Naishammaslaak. Julk.
+Superconductor Science and Technology=Supercond. Sci. Technol.;SUSTEF;M
+Superlattices and Microstructures=Superlattices Microstruct.;SUMIEK;M
+Supervisor Nurse = Superv. Nurse
+Supervisory Management = Superv. Manage.
+Supplement ... To the Journal Medical Oncology and Tumor Pharmacotherapy = Suppl. J. Med. Oncol. Tumor Pharmacother.
+Supplement to International Journal of Gynecology and Obstetrics = Suppl. Int. J. Gynecol. Obstet.
+Supplement to the European Journal Neuroscience = Suppl. Eur. J. Neurosci.
+Supplementi di Tumori = Suppl. Tumori
+Supplements to Clinical Neurophysiology = Suppl. Clin. Neurophysiol.
+Supplementum ad Thrombosis and Haemostasis = Suppl. Thromb. Haemost.
+Supportive Care in Cancer = Support. Care Cancer
+Supramolecular Chemistry=Supramol. Chem.;SCHEER;8/YR
+Surface Engineering=Surf. Eng.;SUENET;6/YR
+Surface Review and Letters=Surf. Rev. Lett.;SRLEFH;BM
+Surface Science=Surf. Sci.;SUSCAS;36/YR
+Surface Science Reports=Surf. Sci. Rep.;SSREDI;32/YR
+Surface and Coatings Technology=Surf. Coat. Technol.;SCTEEJ;39/YR
+Surface and Interface Analysis=Surf. Interface Anal.;SIANDQ;13/YR
+Surgeon = Surgeon
+Surgery = Surgery
+Surgery Annual = Surg. Annu.
+Surgery Today = Surg. Today
+Surgery for Obesity and Related Diseases = Surg. Obes. Relat. Dis.
+Surgery, Gynecology and Obstetrics = Surg. Gynecol. Obstet.
+Surgical Business = Surg. Bus.
+Surgical Clinics of North America = Surg. Clin. North Am.
+Surgical Endoscopy = Surg. Endosc.
+Surgical Forum = Surg. Forum
+Surgical Gastroenterology = Surg. Gastroenterol.
+Surgical Innovation = Surg. Innov.
+Surgical Laparoscopy and Endoscopy = Surg. Laparosc. Endosc.
+Surgical Laparoscopy, Endoscopy and Percutaneous Techniques = Surg. Laparosc. Endosc. Percutan. Tech.
+Surgical Neurology = Surg. Neurol.
+Surgical Oncology = Surg. Oncol.
+Surgical Oncology Clinics of North America = Surg. Oncol. Clin. N. Am.
+Surgical Technologist = Surg. Technol.
+Surgical and Radiologic Anatomy = Surg. Radiol. Anat.
+Survey and Synthesis of Pathology Research = Surv. Synth. Pathol. Res.
+Survey of Immunologic Research = Surv. Immunol. Res.
+Survey of Ophthalmology = Surv. Ophthalmol.
+Suvremenna Meditsina = Suvr. Med. (Sofiia)
+Svensk Farmaceutisk Tidskrift = Sven. Farm. Tidskr.
+Svensk Tandlakaretidskrift = Sven. Tandlak. Tidskr.
+Sveriges Tandlakarforbund Tidning = Sver. Tandlakarforb. Tidn.
+Swedish Dental Journal = Swed. Dent. J.
+Swedish Dental Journal. Supplement = Swed. Dent. J. Suppl.
+Swiss Dent = Swiss Dent
+Swiss Medical Weekly = Swiss Med. Wkly.
+Swiss Surgery = Swiss Surg.
+Swiss Surgery. Supplement = Swiss Surg. Suppl.
+Sygeplejersken = Sygeplejersken
+Sykepleien = Sykepleien
+Sykepleien Fag = Sykepl. Fag
+Symposia of the Society for Experimental Biology = Symp. Soc. Exp. Biol.
+Symposia of the Swedish Nutrition Foundation = Symp. Swed. Nutr. Found.
+Symposium Series, Society for Applied Microbiology = Symp. Ser. Soc. Appl. Microbiol.
+Symposium of the Pharmacology, Therapeutics and Toxicology Group, International Association for Dental Research = Symp. Pharmacol. Ther. Toxicol. Group.
+Symposium of the Society for Developmental Biology = Symp. Soc. Dev. Biol.
+Symposium on Fundamental Cancer Research = Symp. Fundam. Cancer Res.
+Symposium on Oral Sensation and Perception = Symp. Oral Sens. Percept.
+Synapse = Synapse
+Synapse (New York, NY, United States)=Synapse (N. Y., NY, U. S.);SYNAET;16/YR
+Synlett=Synlett;SYNLES;20/YR
+Synthesis=Synthesis;SYNTBF;20/YR
+Synthesis and Reactivity in Inorganic, Metal-Organic, and Nano-Metal Chemistry=Synth. React. Inorg., Met.-Org., Nano-Met. Chem.;SRIMDO;10/YR
+Synthetic Communications=Synth. Commun.;SYNCAV;SM
+Synthetic Lubrication=Synth. Lubr.;SYLUEB;Q
+Synthetic Metals=Synth. Met.;SYMEDZ;24/YR
+Systematic Zoology = Syst. Zool.
+Systematic and Applied Microbiology = Syst. Appl. Microbiol.
+Systems Biology = Syst. Biol.
+THEOCHEM=THEOCHEM;THEODJ;72/YR
+TIC = TIC
+TID Reports = TID Rep.
+TIT Journal of Life Sciences = TIT J. Life Sci.
+TMJ Update = TMJ Update
+TVZ = TVZ
+Taehan Chikkwa Uisa Hyophoe Chi (Journal of the Korean Dental Association) = Taehan Chikkwa Uisa Hyophoe Chi
+Taehan Kanho (Korean Nurse) = Taehan Kanho
+Taehan Kanho Hakhoe Chi = Taehan Kanho Hakhoe Chi
+Taehan Kumsok, Chaeryo Hakhoechi=Taehan Kumsok, Chaeryo Hakhoechi;TKHABB;M
+Taiwan Yi Xue Hui Za Zhi (Journal of the Formosan Medical Association) = Taiwan Yi Xue Hui Za Zhi
+Talanta=Talanta;TLNTA2;M
+Tandlaegebladet = Tandlaegebladet
+Tandlaegernes Nye Tidsskrift = Tandlaegernes Tidsskr.
+Tandlakartidningen = Tandlakartidningen
+Tandteknikern = Tandteknikern
+Tannlaeknabladid = Tannlaeknabladid
+Tanpakushitsu Kakusan Koso (Protein, Nucleic Acid, Enzyme) = Tanpakushitsu Kakusan Koso.
+Tappi Journal=Tappi J.;TAJODT;M
+Tar Heel Nurse = Tar Heel Nurse
+Targeted Diagnosis and Therapy = Targeted Diagn. Ther.
+Technical Bulletin of the Registry of Medical Technologists = Tech. Bull. Regist. Med. Technol.
+Technical Physics=Tech. Phys.;TEPHEX;M
+Technical Physics Letters=Tech. Phys. Lett.;TPLEED;M
+Technicien Belge en Prothese Dentaire = Tech. Belge Prothese Dent.
+Techniques in Urology = Tech. Urol.
+Techniques in Vascular and Interventional Radiology = Tech. Vasc. Interv. Radiol.
+Technology Review = Technol. Rev.
+Technology and Health Care = Technol. Health Care
+Technology in Cancer Research and Treatment = Technol. Cancer Res. Treat.
+Tecnologica = Tecnologica
+Tecnologica. MAP Supplement = Tecnologica. MAP Suppl.
+Telemedicine Journal = Telemed. J.
+Telemedicine Journal and E-Health = Telemed. J. E Health
+Telemedicine Today = Telemed. Today
+Telemedicine and Telehealth Networks = Telemed. Telehealth Netw.
+Telemedicine and Virtual Reality = Telemed. Virtual Real.
+Tellus = Tellus
+Temas Odontologicos = Temas Odontol.
+Temple Dental Review = Temple Dent. Rev.
+Tennessee Medicine = Tenn. Med.
+Tennessee Nurse = Tenn. Nurse
+Tenside, Surfactants, Detergents=Tenside, Surfactants, Deterg.;TSDEES;BM
+Terapevticheskii Arkhiv = Ter. Arkh.
+Teratogenesis, Carcinogenesis, and Mutagenesis = Teratog. Carcinog. Mutagen.
+Teratology = Teratology
+Tetrahedron = Tetrahedron
+Tetrahedron Letters = Tetrahedron Lett.
+Tetrahedron: Asymmetry=Tetrahedron: Asymmetry;TASYE3;SM
+Tetsu to Hagane=Tetsu to Hagane;TEHAA2;M
+Texas Dental Assistants Association Bulletin = Tex. Dent. Assist. Assoc. Bull.
+Texas Dental Journal = Tex. Dent. J.
+Texas Heart Institute Journal = Tex. Heart Inst. J.
+Texas Hospitals = Tex. Hosp.
+Texas Medicine = Tex. Med.
+Texas Nursing = Tex. Nurs.
+Texas Reports on Biology and Medicine = Tex. Rep. Biol. Med.
+Textile Rental = Text. Rent.
+Textile Research Journal=Text. Res. J.;TRJOA9;M
+Thai Journal of Nursing = Thai J. Nurs.
+The American Naturalist = Am. Nat.
+TheScientificWorldJournal = ScientificWorldJournal
+Theoretical Biology and Medical Modelling = Theor. Biol. Med. Model.
+Theoretical Chemistry Accounts=Theor. Chem. Acc.;TCACFW;10/YR
+Theoretical Foundations of Chemical Engineering=Theor. Found. Chem. Eng.;TFCEAU;BM
+Theoretical Medicine = Theor. Med.
+Theoretical Medicine and Bioethics = Theor. Med. Bioeth.
+Theoretical Population Biology = Theor. Popul. Biol.
+Theoretical and Applied Climatology = Theor. Appl. Climatol.
+Theoretical and Experimental Chemistry=Theor. Exp. Chem.;TEXCAK;BM
+Therapeutic Apheresis = Ther. Apher.
+Therapeutic Apheresis and Dialysis = Ther. Apher. Dial.
+Therapeutic Drug Monitoring = Ther. Drug Monit.
+Therapeutic Immunology = Ther. Immunol.
+Therapeutic Recreation Journal = Ther. Recreation J.
+Therapeutique = Therapeutique
+Therapeutische Umschau = Ther. Umsch.
+Therapia Hungarica = Ther. Hung.
+Therapie = Therapie
+Therapie der Gegenwart = Ther. Ggw.
+Therapiewoche = Therapiewoche
+Theriogenology = Theriogenology
+Thermochimica Acta=Thermochim. Acta;THACAS;SM
+Thin Solid Films=Thin Solid Films;THSFAP;46/YR
+Thoracic Surgery Clinics = Thorac. Surg. Clin.
+Thoracic and Cardiovascular Surgeon = Thorac. Cardiovasc. Surg.
+Thorax = Thorax
+Thoraxchirurgie Vaskulare Chirurgie = Thoraxchir. Vask. Chir.
+Thrombosis Research = Thromb. Res.
+Thrombosis Research. Supplement = Thromb. Res. Suppl.
+Thrombosis and Haemostasis = Thromb. Haemost.
+Thrombosis et Diathesis Haemorrhagica = Thromb. Diath. Haemorrh.
+Thrombosis et Diathesis Haemorrhagica. Supplementum = Thromb. Diath. Haemorrh. Suppl.
+Thymus = Thymus
+Thyroid = Thyroid
+Thyroidology = Thyroidology
+Tidens Tann = Tid. Tann
+Tidskrift for Sjukvardspedagoger = Tidskr. Sjukvardspedagog.
+Tidskrift for Sveriges Sjukskoterskor = Tidskr. Sver. Sjukskot.
+Tidsskrift for Den Norske Laegeforening = Tidsskr. Nor. Laegeforen.
+Tidsskrift for Praktiserende Tandlaeger = Tidsskr. Prakt. Tandlaeg.
+Tidsskrift for Sygeplejersker = Tidsskr. Sygepl.
+Tidsskrift for Tandlaeger = Tidsskr. Tandlaeger
+Tidsskriftet Sykepleien = Tidsskr. Sykepl.
+Tierarztliche Praxis = Tierarztl. Prax.
+Tierarztliche Praxis. Ausgabe G, Grosstiere/Nutztiere = Tierarztl. Prax. Ausg. G Grosstiere Nutztiere
+Tierarztliche Praxis. Ausgabe K, Kleintiere/Heimtiere = Tierarztl. Prax. Ausg. K Klientiere Heimtiere
+Tierarztliche Praxis. Supplement = Tierarztl. Prax. Suppl.
+Tierarztliche Umschau = Tierarztl. Umsch.
+Tijdschrift voor Bejaarden- Kraam- en Ziekenverzorging = Tijdschr. Bejaarden. Kraam. Ziekenverzorging
+Tijdschrift voor Diergeneeskunde = Tijdschr. Diergeneeskd.
+Tijdschrift voor Gastro-Enterologie = Tijdschr. Gastroenterol.
+Tijdschrift voor Gerontologie en Geriatrie = Tijdschr. Gerontol. Geriatr.
+Tijdschrift voor Kindergeneeskunde = Tijdschr. Kindergeneeskd.
+Tijdschrift voor Sociale Geneeskunde = Tijdschr. Soc. Geneeskd.
+Tijdschrift voor Ziekenverpleging = Tijdschr. Ziekenverpl.
+Timarit Hjukrunarfelags Islands = Timarit Hjukrunarfel. Isl.
+Time = Time
+Times = Times
+Tip Fakultesi Mecmuasi, Istanbul Universitesi = Tip Fak. Mecm.
+Tissue Antigens = Tissue Antigens
+Tissue Engineering = Tissue Eng.
+Tissue and Cell = Tissue Cell
+Tobacco Control = Tob. Control
+Today's OR Nurse = Todays OR Nurse
+Today's Surgical Nurse = Todays Surg. Nurse
+Todays FDA = Todays FDA
+Todays Nursing Home = Todays Nurs. Home
+Tohoku Journal of Experimental Medicine = Tohoku J. Exp. Med.
+Tohoku Shika Daigaku Gakkai Shi = Tohoku Shika Daigaku Gakkai Shi
+Tokai Journal of Experimental and Clinical Medicine = Tokai J. Exp. Clin. Med.
+Toko-Ginecologia Practica = Tokoginecol. Pract.
+Tokushima Journal of Experimental Medicine = Tokushima J. Exp. Med.
+Tokyo Ika Daigaku Zasshi (Journal of Tokyo Medical College) = Tokyo Ika Daigaku Zasshi
+Tokyo Ika Shika Daigaku Iyo Kizai Kenkyusho Hokoku (Reports of the Institute for Medical and Dental Engineering, Tokyo Medical and Dental University) = Tokyo Ika Shika Daigaku Iyo Kizai Kenkyusho Hokoku
+Topics in Catalysis=Top. Catal.;TOCAFI;20/YR
+Topics in Clinical Nursing = Top. Clin. Nurs.
+Topics in Current Chemistry = Top. Curr. Chem.
+Topics in Emergency Medicine = Top. Emerg. Med.
+Topics in Health Care Financing = Top. Health Care Financ.
+Topics in Health Information Management = Top. Health Inf. Manage.
+Topics in Health Record Management = Top. Health Rec. Manage.
+Topics in Hospital Pharmacy Management = Top. Hosp. Pharm. Manage.
+Topics in Magnetic Resonance Imaging = Top. Magn. Reson. Imaging
+Torace = Torace
+Torax = Torax
+Tort and Insurance Law Journal = Tort Insur. Law J.
+Toxicologic Pathology = Toxicol. Pathol.
+Toxicological European Research = Toxicol. Eur. Res.
+Toxicological Reviews = Toxicol. Rev.
+Toxicological Sciences = Toxicol. Sci.
+Toxicological and Environmental Chemistry=Toxicol. Environ. Chem.;TECSDY;BM
+Toxicology = Toxicology
+Toxicology Letters = Toxicol. Lett.
+Toxicology Mechanisms and Methods=Toxicol. Mech. Methods;TMMOCP;BM
+Toxicology and Applied Pharmacology = Toxicol. Appl. Pharmacol.
+Toxicology and Industrial Health = Toxicol. Ind. Health
+Toxicology in Vitro=Toxicol. in Vitro;TIVIEQ;8/YR
+Toxicon = Toxicon
+TrAC, Trends in Analytical Chemistry=TrAC, Trends Anal. Chem.;TTAEDJ;11/YR
+Trabajos del Instituto Cajal = Trab. Inst. Cajal
+Trabajos del Instituto Cajal de Investigaciones Biologicas = Trab. Inst. Cajal Invest. Biol.
+Tradimus = Tradimus
+Traffic = Traffic
+Traffic (Oxford, United Kingdom)=Traffic (Oxford, U. K.);TRAFFA;M
+Traffic Injury Prevention = Traffic Inj. Prev.
+Training = Training
+Training School Bulletin = Train. Sch. Bull. (Vinel)
+Training and Development Journal = Train. Dev. J.
+Transactions and Studies of the College of Physicians of Philadelphia = Trans. Stud. Coll. Physicians Phila.
+Transactions of the American Academy of Insurance Medicine = Trans. Am. Acad. Insur. Med.
+Transactions of the American Association of Genito-Urinary Surgeons = Trans. Am. Assoc. Genitourin. Surg.
+Transactions of the American Clinical and Climatological Association = Trans. Am. Clin. Climatol. Assoc.
+Transactions of the American Laryngological, Rhinological and Otological Society = Trans. Am. Laryngol. Rhinol. Otol. Soc.
+Transactions of the American Microscopical Society = Trans. Am. Microsc. Soc.
+Transactions of the American Neurological Association = Trans. Am. Neurol. Assoc.
+Transactions of the American Ophthalmological Society = Trans. Am. Ophthalmol. Soc.
+Transactions of the Annual Meeting of the American Broncho-Esophagological Association = Trans. Annu. Meet. Am. Bronchoesophagol. Assoc.
+Transactions of the Annual Meeting of the American Laryngological Association = Trans. Am. Laryngol. Assoc.
+Transactions of the Association of American Physicians = Trans. Assoc. Am. Physicians
+Transactions of the Association of Industrial Medical Officers = Trans. Assoc. Ind. Med. Off.
+Transactions of the Association of Life Insurance Medical Directors of America = Trans. Assoc. Life Insur. Med. Dir. Am.
+Transactions of the Australian College of Ophthalmologists = Trans. Aust. Coll. Ophthalmol.
+Transactions of the British Society for the Study of Orthodontics = Trans. Br. Soc. Study Orthod.
+Transactions of the European Orthodontic Society = Trans. Eur. Orthod. Soc.
+Transactions of the Indian Ceramic Society=Trans. Indian Ceram. Soc.;TICSAP;Q
+Transactions of the Institute of Metal Finishing=Trans. Inst. Met. Finish.;TIMFA2;BM
+Transactions of the International Conference on Endodontics = Trans. Int. Conf. Endod.
+Transactions of the International Conference on Oral Surgery = Trans. Int. Conf. Oral Surg.
+Transactions of the Kansas Academy of Science = Trans. Kans. Acad. Sci.
+Transactions of the Medical Society of London = Trans. Med. Soc. Lond.
+Transactions of the New England Obstetrical and Gynecological Society = Trans. N. Engl. Obstet. Gynecol. Soc.
+Transactions of the New York Academy of Sciences = Trans. N. Y. Acad. Sci.
+Transactions of the Ophthalmological Societies of the United Kingdom = Trans. Ophthalmol. Soc. U. K.
+Transactions of the Ophthalmological Society of Australia = Trans. Ophthalmol. Soc. Aust.
+Transactions of the Ophthalmological Society of New Zealand = Trans. Ophthalmol. Soc. N. Z.
+Transactions of the Pacific Coast Obstetrical and Gynecological Society = Trans. Pac. Coast Obstet. Gynecol. Soc.
+Transactions of the Pacific Coast Oto-Ophthalmological Society Annual Meeting = Trans. Pac. Coast Otoophthalmol. Soc. Annu. Meet.
+Transactions of the Royal Schools of Dentistry, Stockholm and Umea = Trans. R. Sch. Dent. Stockh. Umea
+Transactions of the Royal Society of Tropical Medicine and Hygiene = Trans. R. Soc. Trop. Med. Hyg.
+Transactions of the SAEST=Trans. SAEST;TSETA6;Q
+Transactions of the Society of Occupational Medicine = Trans. Soc. Occup. Med.
+Transactions of the St Johns Hospital Dermatological Society = Trans. St Johns Hosp. Dermatol. Soc.
+Transactions, American Academy of Ophthalmology and Otolaryngology = Trans. Am. Acad. Ophthalmol. Otolaryngol.
+Transactions, American Otological Society = Trans. Am. Otol. Soc.
+Transactions, American Society for Artificial Internal Organs = Trans. Am. Soc. Artif. Intern. Organs
+Transactions, Indiana Academy of Ophthalmology and Otolaryngology = Trans. Indiana Acad. Ophthalmol. Otolaryngol.
+Transactions, New Orleans Academy of Ophthalmology = Trans. New Orleans Acad. Ophthalmol.
+Transactions, Pennsylvania Academy of Ophthalmology and Otolaryngology = Trans. Pa. Acad. Ophthalmol. Otolaryngol.
+Transfusion = Transfusion (Paris)
+Transfusion Clinique et Biologique = Transfus. Clin. Biol.
+Transfusion Medicine = Transfus. Med.
+Transfusion Medicine Reviews = Transfus. Med. Rev.
+Transfusion Science = Transfus. Sci.
+Transgenic Research = Transgenic Res.
+Transition Metal Chemistry (Dordrecht, Netherlands)=Transition Met. Chem. (Dordrecht, Neth.);TMCHDN;8/YR
+Translational Research = Transl. Res.
+Transplant Immunology = Transpl. Immunol.
+Transplant Infectious Disease = Transpl. Infect. Dis.
+Transplant International = Transpl. Int.
+Transplantation = Transplantation
+Transplantation Proceedings = Transplant. Proc.
+Transplantation Reviews = Transplant. Rev.
+Transplantation Science = Transplant. Sci.
+Travel Medicine and Infectious Disease = Travel Med. Infect. Dis.
+Treatment Guidelines from the Medical Letter = Treat. Guidel. Med. Lett.
+Treatments in Endocrinology = Treat. Endocrinol.
+Treatments in Respiratory Medicine = Treat. Respir. Med.
+Trends and Techniques in the Contemporary Dental Laboratory = Trends Tech. Contemp. Dent. Lab.
+Trends in Biochemical Sciences = Trends Biochem. Sci.
+Trends in Biotechnology = Trends Biotechnol.
+Trends in Cardiovascular Medicine = Trends Cardiovasc. Med.
+Trends in Cell Biology = Trends Cell Biol.
+Trends in Endocrinology and Metabolism=Trends Endocrinol. Metab.;TENME4;10/YR
+Trends in Food Science & Technology=Trends Food Sci. Technol.;TFTEEH;M
+Trends in Genetics = Trends Genet.
+Trends in Health Care, Law and Ethics = Trends Health Care Law Ethics
+Trends in Immunology = Trends Immunol.
+Trends in Microbiology = Trends Microbiol.
+Trends in Molecular Medicine = Trends Mol. Med.
+Trends in Neurosciences = Trends Neurosci.
+Trends in Parasitology = Trends Parasitol.
+Trends in Pharmacological Sciences = Trends Pharmacol. Sci.
+Trends in Plant Science = Trends Plant Sci.
+Trial = Trial
+Triangle = Triangle
+Tribology Transactions=Tribol. Trans.;TRTRE4;Q
+Tribuna Odontologica = Trib. Odontol. (B. Aires)
+Tribuna Odontologica do Sindicato dos Odontologistas do Estado da Guanabara = Trib. Odontol. (Guanabara)
+Trodent = Trodent
+Tropenmedizin und Parasitologie = Tropenmed. Parasitol.
+Tropical Animal Health and Production = Trop. Anim. Health Prod.
+Tropical Diseases Bulletin = Trop. Dis. Bull.
+Tropical Doctor = Trop. Doct.
+Tropical Gastroenterology = Trop. Gastroenterol.
+Tropical Medicine and International Health = Trop. Med. Int. Health
+Tropical Medicine and Parasitology = Trop. Med. Parasitol.
+Tropical and Geographical Medicine = Trop. Geogr. Med.
+Trudy Geofizicheskogo Instituta, Akademiya Nauk SSSR = Tr. Geofiz. Inst., Akad. Nauk SSSR
+Trudy Glavnoi Geofizicheskoi Observatorii = Tr. Gl. Geofiz. Obs.
+Trudy Instituta Fiziologii Akademiia Nauk Gruzinskoi SSR = Tr. Inst. Fiz. Akad. Nauk Gruz. SSR
+Trudy Instituta imeni Pastera = Tr. Inst. Im. Pastera
+Trudy Leningradskogo Instituta Epidemiologii i Mikrobiologii im. Pastera = Tr. Leningr. Inst. Epidemiol. Mikrobiol.
+Trudy Leningradskogo Nauchno-Issledovatelskogo Instituta Epidemiologii i Mikrobiologii im. Pastera = Tr. Leningr. Nauchnoissled. Inst. Epidemiol. Mikrobiol.
+Trudy, Akademiia Nauk SSSR, Institut Genetiki = Tr. Akad. Nauk SSSR. Inst. Genet.
+Trustee = Trustee
+Tsitologiia = Tsitologiia
+Tsitologiia i Genetika = Tsitol. Genet.
+Tsurumi Shigaku (Tsurumi University Dental Journal) = Tsurumi Shigaku
+Tubercle = Tubercle
+Tubercle and Lung Disease = Tuber. Lung Dis.
+Tuberculology and Thoracic Diseases = Tuberculol. Thorac. Dis.
+Tuberculosis = Tuberculosis
+Tuberkulose und Ihre Grenzgebiete in Einzeldarstellungen = Tuberk. Grenzgeb. Einzeldarst.
+Tuberkuloza = Tuberkuloza
+Tufts Dental Outlook = Tufts Dent. Outlook
+Tufts Health Science Review = Tufts Health Sci. Rev.
+Tumori = Tumori
+Tumour Biology = Tumour Biol.
+Tunisie Medicale = Tunis. Med.
+Turk Hemsireler Dergisi (Turkish Journal of Nursing) = Turk Hemsire. Derg.
+Turk Hijiyen ve Deneysel Biyoloji Dergisi (Turkish Bulletin of Hygiene and Experimental Biology) = Turk Hij. Deney. Biyol. Derg.
+Turk Hijiyen ve Tecrubi Biyoloji Dergisi = Turk Hij. Tecr. Biyol. Derg.
+Turk Hijiyen ve Tecrubi Biyoloji Dergisi (Turkish Bulletin of Hygiene and Experimental Biology) = Turk Hij. Tecr. Biyol. Derg.
+Turk Ortodonti Dergisi = Turk Ortodonti Derg.
+Turk Tip Cemiyeti Mecmuasi = Turk Tip Cemiy. Mecm.
+Turk Tip Dernegi Dergisi = Turk Tip Dernegi Derg.
+Turkish Journal of Chemistry=Turk. J. Chem.;TJCHE3;6/YR
+Turkish Journal of Pediatrics = Turk. J. Pediatr.
+Twin Research = Twin Res.
+Twin Research and Human Genetics = Twin Res. Hum. Genet.
+U.S. Healthcare = US. Healthc.
+U.S. Medicine = US. Med.
+U.S. Navy Medicine = US Navy Med.
+UCLA Forum in Medical Sciences = UCLA Forum Med. Sci.
+UCLA Reports = UCLA Rep.
+UJCD; Union des Jeunes Chirurgiens-Dentistes = UJCD. Union Jeunes Chir. Dent.
+UNA Communique = UNA Commun.
+UNA Nursing Journal = UNA Nurs. J.
+UR Reports = UR Rep.
+US News and World Report = US News World Rep.
+UWFL Reports = UWFL Rep.
+Ugeskrift for Laeger = Ugeskr. Laeger
+Uirusu = Uirusu
+Ukrains'kii Biokhimichnii Zhurnal=Ukr. Biokhim. Zh.;UBZKAA;BM
+Ukrains'kii Fizichnii Zhurnal=Ukr. Fiz. Zh.;UFZHFY;M
+Ukrainskii Biokhimicheskii Zhurnal = Ukr. Biokhim. Zh.
+Ukrainskii Khimicheskii Zhurnal (Russian Edition)=Ukr. Khim. Zh. (Russ. Ed.);UKZHAU;6/YR
+Ukrainskyi Biokhimichnyi Zhurnal = Ukr. Biokhim. Zh.
+Ulster Medical Journal = Ulster Med. J.
+Ultramicroscopy = Ultramicroscopy
+Ultraschall in der Medizin = Ultraschall Med.
+Ultrasonic Imaging = Ultrason. Imaging
+Ultrasonics = Ultrasonics
+Ultrasonics Sonochemistry = Ultrason. Sonochem.
+Ultrasound in Medicine and Biology = Ultrasound Med. Biol.
+Ultrasound in Obstetrics and Gynecology = Ultrasound Obstet. Gynecol.
+Ultrastructural Pathology = Ultrastruct. Pathol.
+Ulusal Travma Ve Acil Cerrahi Dergisi (Turkish Journal of Trauma and Emergency Surgery) = Ulus. Travma Acil Cerrahi Derg.
+Undersea Biomedical Research = Undersea Biomed. Res.
+Undersea and Hyperbaric Medicine = Undersea Hyperb. Med.
+Unfallchirurg = Unfallchirurg
+Unfallchirurgie = Unfallchirurgie
+Unfallheilkunde = Unfallheilkunde
+Union Medicale du Canada = Union Med. Can.
+University of Michigan Medical Center Journal = Univ. Mich. Med. Cent. J.
+University of Newcastle upon Tyne Medical Gazette = Univ. Newcastle Tyne Med. Gaz.
+University of Toronto Dental Journal = Univ. Tor. Dent. J.
+University of Toronto Undergraduate Dental Journal = Univ. Toronto Undergrad. Dent. J.
+Update in Pediatric Dentistry = Update Pediatr. Dent.
+Update on Ethics = Update Ethics
+Upsala Journal of Medical Sciences = Ups. J. Med. Sci.
+Upsala Journal of Medical Sciences. Supplement = Ups. J. Med. Sci. Suppl.
+Urban Health = Urban Health
+Uremia Investigation = Uremia Invest.
+Urologe = Urologe
+Urologe. Ausgabe A = Urologe. A
+Urologia Internationalis = Urol. Int.
+Urologic Clinics of North America = Urol. Clin. North Am.
+Urologic Nursing = Urol. Nurs.
+Urologic Radiology = Urol. Radiol.
+Urological Research = Urol. Res.
+Urological Survey = Urol. Surv.
+Urologiia = Urologiia
+Urologiia i Nefrologiia = Urol. Nefrol. (Mosk.)
+Urology = Urology
+Uspekhi Fiziologicheskikh Nauk = Usp. Fiziol. Nauk
+Uspekhi Sovremennoi Biologii = Usp. Sovrem. Biol.
+Utah Nurse = Utah Nurse
+Uttar Pradesh State Dental Journal = Uttar Pradesh State Dent. J.
+VINA Quarterly = VINA Q.
+Vaccine = Vaccine
+Vacuum=Vacuum;VACUAV;16/yr
+Valsalva = Valsalva
+Value in Health = Value Health
+Vard i Norden = Vard Nord. Utveckl. Forsk.
+Vardfacket = Vardfacket
+Vasa = Vasa
+Vasa. Supplementum = Vasa. Suppl.
+Vascular = Vascular
+Vascular Diseases = Vasc. Dis.
+Vascular Medicine = Vasc. Med.
+Vascular Pharmacology = Vascul. Pharmacol.
+Vascular Surgery = Vasc. Surg.
+Vascular and Endovascular Surgery = Vasc. Endovascular Surg.
+Vector Borne and Zoonotic Diseases = Vector Borne Zoonotic Dis.
+Venezuela Odontologica = Venez. Odontol.
+Verhandelingen, Koninklijke Academie voor Geneeskunde van Belgie = Verh. K. Acad. Geneeskd. Belg.
+Verhandelingen, Koninklijke Vlaamse Academie voor Geneeskunde van Belgie = Verh. K. Vlaam. Acad. Geneeskd. Belg.
+Verhandlungen der Anatomischen Gesellschaft = Verh. Anat. Ges.
+Verhandlungen der Deutschen Gesellschaft fur Herz- und Kreislaufforschung = Verh. Dtsch. Ges. Herz. Kreislaufforsch.
+Verhandlungen der Deutschen Gesellschaft fur Innere Medizin = Verh. Dtsch. Ges. Inn. Med.
+Verhandlungen der Deutschen Gesellschaft fur Kreislaufforschung = Verh. Dtsch. Ges. Kreislaufforsch.
+Verhandlungen der Deutschen Gesellschaft fur Pathologie = Verh. Dtsch. Ges. Pathol.
+Verhandlungen der Deutschen Gesellschaft fur Rheumatologie = Verh. Dtsch. Ges. Rheumatol.
+Vermont Registered Nurse = Vt. Regist. Nurse
+Veroffentlichungen aus der Morphologischen Pathologie = Veroff. Morphol. Pathol.
+Veroffentlichungen aus der Pathologie = Veroff. Pathol.
+Verpleegkunde = Verpleegkunde
+Versicherungsmedizin = Versicherungsmedizin
+Vestnik Akademii Meditsinskikh Nauk SSSR = Vestn. Akad. Med. Nauk SSSR
+Vestnik Akademii Nauk SSSR = Vestn. Akad. Nauk SSSR
+Vestnik Dermatologii i Venerologii = Vestn. Dermatol. Venerol.
+Vestnik Khirurgii imeni I. I. Grekova = Vestn. Khir. Im. I. I. Grek.
+Vestnik Leningradskogo Universiteta. Biologiia = Vestn. Leningr. Univ. [Biol.]
+Vestnik Moskovskogo Universiteta, Seriya 2: Khimiya=Vestn. Mosk. Univ., Ser. 2: Khim.;VMUKA5;BM
+Vestnik Oftalmologii = Vestn. Oftalmol.
+Vestnik Otorinolaringologii = Vestn. Otorinolaringol.
+Vestnik Rentgenologii i Radiologii = Vestn. Rentgenol. Radiol.
+Vestnik Rossiiskoi Akademii Meditsinskikh Nauk = Vestn. Ross. Akad. Med. Nauk
+Vestnik Sankt-Peterburgskogo Universiteta, Seriya 4: Fizika, Khimiya=Vestn. S.-Peterb. Univ., Ser. 4: Fiz., Khim.;VSUKEH;Q
+Vestsi Natsyyanal'nai Akademii Navuk Belarusi, Seryya Khimichnykh Navuk=Vestsi Nats. Akad. Navuk Belarusi, Ser. Khim. Navuk;VNBNFX;Q
+Veterinarian = Veterinarian
+Veterinariia = Veterinariia
+Veterinarni Medicina = Vet. Med. (Praha)
+Veterinarnomeditsinski Nauki = Vet. Med. Nauki
+Veterinarstvi = Veterinarstvi
+Veterinary Clinics of North America = Vet. Clin. North Am.
+Veterinary Clinics of North America. Equine Practice = Vet. Clin. North Am. Equine Pract.
+Veterinary Clinics of North America. Exotic Animal Practice = Veterinary Clin. North Am. Exot. Anim. Pract.
+Veterinary Clinics of North America. Food Animal Practice = Vet. Clin. North Am. Food Anim. Pract.
+Veterinary Clinics of North America. Large Animal Practice = Vet. Clin. North Am. Large Anim. Pract.
+Veterinary Clinics of North America. Small Animal Practice = Vet. Clin. North Am. Small Anim. Pract.
+Veterinary Immunology and Immunopathology = Vet. Immunol. Immunopathol.
+Veterinary Journal = Vet. J.
+Veterinary Medical Review = Vet. Med. Rev.
+Veterinary Medicine, Small Animal Clinician = Vet. Med. Small Anim. Clin.
+Veterinary Microbiology = Vet. Microbiol.
+Veterinary Ophthalmology = Vet. Ophthalmol.
+Veterinary Parasitology = Vet. Parasitol.
+Veterinary Pathology = Vet. Pathol.
+Veterinary Pathology. Supplement = Vet. Pathol. Suppl.
+Veterinary Quarterly = Vet. Q.
+Veterinary Radiology and Ultrasound = Vet. Radiol. Ultrasound
+Veterinary Record = Vet. Rec.
+Veterinary Research = Vet. Res.
+Veterinary Research Communications = Vet. Res. Commun.
+Veterinary Surgery = Vet. Surg.
+Veterinary Therapeutics = Vet. Ther.
+Veterinary and Human Toxicology = Vet. Hum. Toxicol.
+Viata Medicala; Revista de Informare Profesionala si Stiintifica a Cadrelor Medii Sanitare = Viata Med. Rev. Inf. Prof. Stiint. Cadrelor Medii Sanit.
+Vibrational Spectroscopy=Vib. Spectrosc.;VISPEK;BM
+Vida Odontologica = Vida Odontol.
+Vie Medicale au Canada Francais = Vie Med. Can. Fr.
+Vierteljahrsschrift fur Schweizerische Sanitatsoffiziere = Vierteljahrsschr. Schweiz. Sanitatsoff.
+Vigilando = Vigilando
+Violence and Victims = Violence Vict.
+Viral Immunology = Viral Immunol.
+Virchows Archiv = Virchows Arch.
+Virchows Archiv fur Pathologische Anatomie und Physiologie und fur Klinische Medizin = Virchows Arch. Pathol. Anat. Physiol. Klin. Med.
+Virchows Archiv. A, Pathological Anatomy and Histopathology = Virchows Arch. A Pathol. Anat. Histopathol.
+Virchows Archiv. A, Pathology, Pathologische Anatomie = Virchows Arch. A Pathol. Pathol. Anat.
+Virchows Archiv. A. Pathological Anatomy and Histology = Virchows Arch. A Pathol. Anat. Histol.
+Virchows Archiv. B, Cell Pathology Including Molecular Pathology = Virchows Arch. B Cell Pathol. Incl. Mol. Pathol.
+Virchows Archiv. B. Cell Pathology = Virchows Arch. B Cell Pathol.
+Virginia Dental Journal = Va. Dent. J.
+Virginia Medical = Va. Med.
+Virginia Medical Monthly = Va. Med. Mon.
+Virginia Medical Quarterly = Va. Med. Q.
+Virginia Nurse = Va. Nurse
+Virginia Nurse Quarterly = Va. Nurse Q.
+Virologie = Virologie
+Virology = Virology
+Virology Journal = Virol. J.
+Virology Monographs = Virol. Monogr.
+Virus Genes = Virus Genes
+Virus Research = Virus Res.
+Virus Research. Supplement = Virus Res. Suppl.
+Vision Research = Vision Res.
+Visual Neuroscience = Vis. Neurosci.
+Vital Signs = Vital Signs
+Vital Speeches of the Day = Vital Speeches Day
+Vital and Health Statistics. Series 10: Data from the National Health Survey = Vital Health Stat. 10.
+Vital and Health Statistics. Series 11: Data from the National Health Survey = Vital Health Stat. 11.
+Vital and Health Statistics. Series 13: Data from the National Health Survey = Vital Health Stat. 13.
+Vital and Health Statistics. Series 14: Data from the National Health Survey = Vital Health Stat. 14.
+Vital and Health Statistics. Series 14: Data from the National Inventory of Family Planning Services = Vital Health Stat. 14.
+Vital and Health Statistics. Series 14: Data on National Health Resources = Vital Health Stat. 14.
+Vital and Health Statistics. Series 1: Programs and Collection Procedures = Vital Health Stat. 1.
+Vital and Health Statistics. Series 20: Data from the National Vital Statistics System = Vital Health Stat. 20. Data Natl. Vital Stat. Syst.
+Vital and Health Statistics. Series 21: Data from the National Vital Statistics System = Vital Health Stat. 21.
+Vital and Health Statistics. Series 21: Data on Natality, Marriage, and Divorce = Vital Health Stat. 21.
+Vital and Health Statistics. Series 23: Data from the National Survey of Family Growth = Vital Health Stat. 23.
+Vital and Health Statistics. Series 2: Data Evaluation and Methods Research = Vital Health Stat. 2.
+Vital and Health Statistics. Series 3: Analytical Studies = Vital Health Stat. 3.
+Vital and Health Statistics. Series 3: Analytical and Epidemiological Studies = Vital Health Stat. 3.
+Vital and Health Statistics. Series 4: Documents and Committee Reports = Vital Health Stat. 4.
+Vital and Health Statistics. Series 5: Comparative International Vital and Health Statistics Reports = Vital Health Stat. 5.
+Vitamins and Hormones = Vitam. Horm.
+Vnitrni Lekarstvi = Vnitr. Lek.
+Voeding = Voeding
+Voenno-Meditsinskii Zhurnal = Voen. Med. Zh.
+Voix Dentaire = Voix Dent.
+Vojenske Zdravotnicke Listy = Vojen. Zdrav. Listy
+Vojenskozdravotnicka Knihovna = Vojenskozdrav. Knih.
+Vojnosanitetski Pregled = Vojnosanit. Pregl.
+Voluntary Action Leadership = Volunt. Action Leadersh.
+Volunteer Administration = Volunt. Adm.
+Volunteer Leader = Volunt. Leader
+Voprosy Biokhimii Mozga = Vopr. Biokhim. Mozga
+Voprosy Kurortologii, Fizioterapii i Lechebnoi Fizicheskoi Kultury = Vopr. Kurortol. Fizioter. Lech. Fiz. Kult.
+Voprosy Meditsinskoi Khimii = Vopr. Med. Khim.
+Voprosy Neirokhirurgii = Vopr. Neirokhir.
+Voprosy Okhrany Materinstva i Detstva = Vopr. Okhr. Materin. Det.
+Voprosy Onkologii = Vopr. Onkol.
+Voprosy Pitaniia = Vopr. Pitan.
+Voprosy Psikhiatrii i Nevropatologii = Vopr. Psikhiatr. Nevropatol.
+Voprosy Revmatizma = Vopr. Revm.
+Voprosy Virusologii = Vopr. Virusol.
+Vox Sanguinis = Vox Sang.
+Vrachebnoe Delo = Vrach. Delo
+Vutreshni Bolesti = Vutr. Boles.
+Vysokomolekulyarnye Soedineniya, Seriya A i Seriya B=Vysokomol. Soedin., Ser. A Ser. B;VSSBEE;M
+WASH Reports = WASH Rep.
+WDA Journal = WDA J.
+WHO Chronicle = WHO Chron.
+WHO Offset Publication = WHO Offset Publ.
+WHO Regional Publications European Series = WHO Reg. Publ. Eur. Ser.
+WMJ = WMJ
+Wakayama Medical Reports = Wakayama Med. Rep.
+Waking and Sleeping = Waking Sleeping
+Wall Street Journal. Midwest Edition = Wall St. J. [Midwest. Ed.]
+Washington Nurse = Wash. Nurse
+Washington Report on Medicine and Health = Wash. Rep. Med. Health
+Washington State Dental Journal = Wash. State Dent. J.
+Washington State Journal of Nursing = Wash. State J. Nurs.
+Washington University Dental Journal = Wash. Univ. Dent. J.
+Water Environment Research=Water Environ. Res.;WAERED;7/YR
+Water Quality Research Journal of Canada=Water Qual. Res. J. Can.;WQRCFA;Q
+Water Research=Water Res.;WATRAG;20/YR
+Water Resources=Water Resour.;WARED4;BM
+Water Resources Research = Water Resour. Res.
+Water, Air, & Soil Pollution=Water, Air, Soil Pollut.;WAPLAC;36/YR
+Water, Air, and Soil Pollution = Water. Air. Soil Pollut.
+Way = Way
+Wear=Wear;WEARAH;M
+Weather = Weather
+Weather Vane = Weather Vane
+Weather and Forecasting = Wea. Forecasting
+Weatherwise = Weatherwise
+Weed Science=Weed Sci.;WEESA6;BM
+Weekly Epidemiological Record = Wkly. Epidemiol. Rec.
+Wei Sheng Wu Xue Bao (Acta Microbiologica Sinica) = Wei Sheng Wu Xue Bao
+Wei Sheng Yan Jiu (Journal of Hygiene Research) = Wei Sheng Yan Jiu
+West African Journal of Medicine = West Afr. J. Med.
+West African Journal of Pharmacology and Drug Research = West Afr. J. Pharmacol. Drug Res.
+West African Medical Journal = West Afr. Med. J.
+West African Medical Journal and Nigerian Medical and Dental Practitioner = West Afr. Med. J. Niger. Med. Dent. Pract.
+West African Medical Journal and Nigerian Practitioner = West Afr. Med. J. Niger. Pract.
+West Indian Medical Journal = West Indian Med. J.
+West Virginia Dental Journal = W. V. Dent. J.
+West Virginia Medical Journal = W. V. Med. J.
+West of England Medical Journal = West Engl. Med. J.
+Western Dental Society Bulletin = West. Dent. Soc. Bull.
+Western Journal of Medicine = West. J. Med.
+Western Journal of Nursing Research = West. J. Nurs. Res.
+Western Medicine; The Medical Journal of the West = West Med. Med. J. West
+Wiadomosci Lekarskie = Wiad. Lek.
+Wiadomosci Parazytologiczne = Wiad. Parazytol.
+Wiederherstellungschirurgie und Traumatologie = Wiederherstellungschir. Traumatol.
+Wiener Klinische Wochenschrift = Wien. Klin. Wochenschr.
+Wiener Klinische Wochenschrift. Supplementum = Wien. Klin. Wochenschr. Suppl.
+Wiener Medizinische Wochenschrift = Wien. Med. Wochenschr.
+Wiener Medizinische Wochenschrift. Beihefte = Wien. Med. Wochenschr. Beih.
+Wiener Medizinische Wochenschrift. Supplement = Wien. Med. Wochenschr. Suppl.
+Wiener Tierarztliche Monatsschrift = Wien. Tierarztl. Monatsschr.
+Wiener Zeitschrift fur Innere Medizin und Ihre Grenzgebiete = Wien. Z. Inn. Med.
+Wiener Zeitschrift fur Nervenheilkunde und deren Grenzgebiete = Wien. Z. Nervenheilkd. Grenzgeb.
+Wilderness and Environmental Medicine = Wilderness Environ. Med.
+Wildlife Disease = Wildl. Dis.
+Wisconsin Dental Association Journal = Wis. Dent. Assoc. J.
+Wisconsin Medical Journal = Wis. Med. J.
+Wissenschaftliche Zeitschrift der Humboldt-Universitat zu Berlin. Mathematisch-Naturwissenschaftliche Reihe = Wiss. Z. Humboldt Univ. Berl. [Math. Naturwiss.]
+Wistar Institute Symposium Monograph = Wistar Inst. Symp. Monogr.
+Woman Physician = Woman Physician
+Women and Health = Women Health
+Women's Health = Womens Health
+Women's Health Data Book = Womens Health Data Book
+Women's Health Issues = Womens Health Issues
+Wood Science and Technology=Wood Sci. Technol.;WOSTBE;8/YR
+Wood and Fiber Science=Wood Fiber Sci.;WFSCD4;Q
+Worcester Medical News = Worcester Med. News
+Work, Environment, Health = Work. Environ. Health
+Worklife = Worklife
+World Health Forum = World Health Forum
+World Health Organization Monograph Series = World Health Organ. Monogr. Ser.
+World Health Organization Technical Report Series = World Health Organ. Tech. Rep. Ser.
+World Health Statistics Quarterly = World Health Stat. Q.
+World Health Statistics Report = World Health Stat. Rep.
+World Hospitals = World Hosp.
+World Hospitals and Health Services = World Hosp. Health Serv.
+World Journal of Gastroenterology = World J. Gastroenterol.
+World Journal of Surgery = World J. Surg.
+World Journal of Urology = World J. Urol.
+World Medical Journal = World Med. J.
+World Meteorological Organization Bulletin = WMO Bull.
+World News on Maxillofacial Radiology = World News Maxillofac. Radiol.
+World Review of Nutrition and Dietetics = World Rev. Nutr. Diet.
+World of Irish Nursing = World Ir. Nurs.
+Worlds Poultry Science Journal = Worlds Poult. Sci. J.
+Worldviews on Evidence-Based Nursing = Worldviews Evid. Based Nurs.
+Wound Repair and Regeneration = Wound Repair Regen.
+Wuji Huaxue Xuebao=Wuji Huaxue Xuebao;WHUXEO;M
+Wuli Huaxue Xuebao=Wuli Huaxue Xuebao;WHXUEU;M
+Wuli Xuebao=Wuli Xuebao;WLHPAR;M
+Wyoming Nurses Newsletter = Wyo. Nurses Newsl.
+X-Ray Spectrometry=X-Ray Spectrom.;XRSPAX;BM
+X-Ray Structure Analysis Online=X-Ray Struct. Anal. Online;XSAOAF;IRR
+Xenobiotica = Xenobiotica
+Xi Psi Phi Quarterly = Xi Psi Phi Q.
+Xianggang Hu Li Za Zhi (Hong Kong Nursing Journal) = Xianggang Hu Li Za Zhi
+Y Reports = Y Rep.
+Yakhak Hoechi=Yakhak Hoechi;YAHOA3;BM
+Yakubutsu, Seishin, Kodo (Japanese Journal of Psychopharmacology) = Yakubutsu Seishin Kodo
+Yakugaku Zasshi=Yakugaku Zasshi;YKKZAJ;M
+Yakugaku Zasshi (Journal of the Pharmaceutical Society of Japan) = Yakugaku Zasshi
+Yale Journal of Biology and Medicine = Yale J. Biol. Med.
+Yale Journal of Health Policy, Law, and Ethics = Yale J. Health Policy Law Ethics
+Yale Law Journal = Yale Law J.
+Yan Ke Xue Bao (Eye Science) = Yan Ke Xue Bao
+Yao Xue Xue Bao (Acta Pharmaceutica Sinica) = Yao Xue Xue Bao
+Year in Immunology = Year Immunol.
+Yeast = Yeast
+Yi Chuan Xue Bao (Acta Genetica Sinica) = Yi Chuan Xue Bao
+Yingyong Huaxue=Yingyong Huaxue;YIHUED;M
+Yngre Laeger = Yngre Laeger
+Yokohama Medical Bulletin = Yokohama Med. Bull.
+Yonago Acta Medica = Yonago Acta Med.
+Yonsei Medical Journal = Yonsei Med. J.
+Yosetsu Gakkai Ronbunshu=Yosetsu Gakkai Ronbunshu;YGRODU;Q
+Youji Huaxue=Youji Huaxue;YCHHDX;M
+Your Child Patient = Your Child Patient
+Your Oklahoma Dental Association Journal = Your Okla. Dent. Assoc. J.
+Yuki Gosei Kagaku Kyokaishi=Yuki Gosei Kagaku Kyokaishi;YGKKAE;M
+ZFA; Zeitschrift fur Allgemeinmedizin = ZFA (Stuttgart)
+ZFA; Zeitschrift fur Alternsforschung = ZFA
+ZWR = ZWR
+Zacchia = Zacchia
+Zahn-, Mund-, und Kieferheilkunde mit Zentralblatt = Zahn. Mund. Kieferheilkd. Zentralbl.
+Zahnarzt = Zahnarzt
+Zahnarzteblatt Baden-Wurttemberg = Zahnarztebl. Baden. Wurttemb.
+Zahnarztliche Mitteilungen = Zahnarztl. Mitt.
+Zahnarztliche Nachrichten Sudwurttemburg-Hohenzollern = Zahnarztl. Nachr. Sudwurttemb.
+Zahnarztliche Praxis = Zahnarztl. Prax.
+Zahnarztliche Praxisfuhrung = Zahnarztl. Praxisfuhr.
+Zahnarztliche Rundschau = Zahnarztl. Rundsch.
+Zahnarztliche Welt, Zahnarztliche Rundschau, ZWR, Vereinigt mit Zahnarztliche Reform = Zahnarztl. Welt. Zahnarztl. Rundsch. ZWR. Zahnarztl. Reform
+Zahnarztlicher Gesundheitsdienst = Zahnarztl. Gesundheitsdienst
+Zahntechnik = Zahntechnik (Zur.)
+Zambia Nurse = Zambia Nurse
+Zambia Nurse Journal = Zambia Nurse J.
+Zbornik Vojnomedicinske Akademije = Zb. Vojnomed. Akad.
+Zdravookhranenie Kirgizii = Zdravookhr. Kirg.
+Zdravookhranenie Rossiiskoi Federatsii = Zdravookhr. Ross. Fed.
+Zdravotnicka Pracovnice = Zdrav. Prac.
+Zdravotnicke Aktuality = Zdrav. Aktual.
+Zdravstveni Vestnik = Zdrav. Vestn.
+Zdrowie Publiczne = Zdrow. Publiczne
+Zeitschrift fuer Anorganische und Allgemeine Chemie=Z. Anorg. Allg. Chem.;ZAACAB;M
+Zeitschrift fuer Kristallographie=Z. Kristallogr.;ZEKRDZ;12/YR
+Zeitschrift fuer Kristallographie - New Crystal Structures=Z. Kristallogr. - New Cryst. Struct.;ZKNSFT;4/YR
+Zeitschrift fuer Metallkunde=Z. Metallkd.;ZEMTAE;M
+Zeitschrift fuer Naturforschung, A: Physical Sciences=Z. Naturforsch., A: Phys. Sci.;ZNASEI;M
+Zeitschrift fuer Naturforschung, B: Chemical Sciences=Z. Naturforsch., B: Chem. Sci.;ZNBSEN;M
+Zeitschrift fuer Naturforschung, C: Journal of Biosciences=Z. Naturforsch., C: J. Biosci.;ZNCBDA;BM
+Zeitschrift fuer Physikalische Chemie (Muenchen, Germany)=Z. Phys. Chem. (Muenchen, Ger.);ZPCFAX;12/YR
+Zeitschrift fur Allgemeine Mikrobiologie = Z. Allg. Mikrobiol.
+Zeitschrift fur Allgemeinmedizin = Z. Allgemeinmed.
+Zeitschrift fur Alternsforschung = Z. Alternsforsch.
+Zeitschrift fur Anatomie und Entwicklungsgeschichte = Z. Anat. Entwicklungsgesch.
+Zeitschrift fur Arztliche Fortbildung = Z. Arztl. Fortbild. (Jena)
+Zeitschrift fur Arztliche Fortbildung und Qualitatssicherung = Z. Arztl. Fortbild. Qualitatssich.
+Zeitschrift fur Arztliche Fortbildung. Beiheft = Z. Arztl. Fortbild. Beih. (Jena)
+Zeitschrift fur Biologie = Z. Biol.
+Zeitschrift fur Erkrankungen der Atmungsorgane = Z. Erkr. Atmungsorgane
+Zeitschrift fur Erkrankungen der Atmungsorgane, mit Folia Bronchologica = Z. Erkr. Atmungsorgane. Folia Bronchol.
+Zeitschrift fur Ernahrungswissenschaft = Z. Ernahrungswiss.
+Zeitschrift fur Ernahrungswissenschaft (Journal of Nutritional Sciences) Supplementa = Z. Ernahrungswiss. Suppl.
+Zeitschrift fur Experimentelle Chirurgie = Z. Exp. Chir.
+Zeitschrift fur Experimentelle Chirurgie, Transplantation, und Kunstliche Organe = Z. Exp. Chir. Transplant. Kunstliche Organe
+Zeitschrift fur Experimentelle Psychologie = Z. Exp. Psychol.
+Zeitschrift fur Experimentelle und Angewandte Psychologie = Z. Exp. Angew. Psychol.
+Zeitschrift fur Gastroenterologie = Z. Gastroenterol.
+Zeitschrift fur Gastroenterologie. Verhandlungsband = Z. Gastroenterol. Verh.
+Zeitschrift fur Geburtshilfe und Neonatologie = Z. Geburtshilfe Neonatol.
+Zeitschrift fur Geburtshilfe und Perinatologie = Z. Geburtshilfe Perinatol.
+Zeitschrift fur Gerontologie = Z. Gerontol.
+Zeitschrift fur Gerontologie und Geriatrie = Z. Gerontol. Geriatr.
+Zeitschrift fur Haut- und Geschlechtskrankheiten = Z. Haut. Geschlechtskr.
+Zeitschrift fur Hautkrankheiten = Z. Hautkr.
+Zeitschrift fur Hygiene und Infektionskrankheiten = Z. Hyg. Infektionskr.
+Zeitschrift fur Immunitatsforschung (Immunobiology) = Z. Immunitatsforsch. Immunobiol.
+Zeitschrift fur Immunitatsforschung, Allergie und Klinische Immunologie = Z. Immunitatsforsch. Allerg. Klin. Immunol.
+Zeitschrift fur Immunitatsforschung, Experimentelle und Klinische Immunologie = Z. Immunitatsforsch. Exp. Klin. Immunol.
+Zeitschrift fur Kardiologie = Z. Kardiol.
+Zeitschrift fur Kardiologie. Supplementum = Z. Kardiol. Suppl.
+Zeitschrift fur Kinder- und Jugendpsychiatrie = Z. Kinder. Jugenpsychiatr.
+Zeitschrift fur Kinder- und Jugendpsychiatrie und Psychotherapie = Z. Kinder. Jugendpsychiatr. Psychother.
+Zeitschrift fur Kinderchirurgie = Z. Kinderchir.
+Zeitschrift fur Kinderchirurgie und Grenzgebiete = Z. Kinderchir. Grenzgeb.
+Zeitschrift fur Kinderheilkunde = Z. Kinderheilkd.
+Zeitschrift fur Klinische Chemie und Klinische Biochemie = Z. Klin. Chem. Klin. Biochem.
+Zeitschrift fur Klinische Medizin = Z. Klin. Med.
+Zeitschrift fur Klinische Psychologie und Psychotherapie = Z. Klin. Psychol. Psychother.
+Zeitschrift fur Klinische Psychologie, Psychiatrie und Psychotherapie = Z. Klin. Psychol. Psychiatr. Psychother.
+Zeitschrift fur Klinische Psychologie, Psychopathologie und Psychotherapie = Z. Klin. Psychol. Psychopathol. Psychother.
+Zeitschrift fur Krankenpflege = Z. Krankenpfl.
+Zeitschrift fur Krebsforschung = Z. Krebsforsch.
+Zeitschrift fur Krebsforschung und Klinische Onkologie (Cancer Research and Clinical Oncology) = Z. Krebsforsch. Klin. Onkol. Cancer Res. Clin. Oncol.
+Zeitschrift fur Kreislaufforschung = Z. Kreislaufforsch.
+Zeitschrift fur Laryngologie, Rhinologie, Otologie und Ihre Grenzgebiete = Z. Laryngol. Rhinol. Otol.
+Zeitschrift fur Lebensmittel-Untersuchung und -Forschung = Z. Lebensm. Unters. Forsch.
+Zeitschrift fur Lymphologie (Journal of Lymphology) = Z. Lymphol.
+Zeitschrift fur Medizinische Laboratoriumsdiagnostik = Z. Med. Lab. Diagn.
+Zeitschrift fur Medizinische Labortechnik = Z. Med. Labortech.
+Zeitschrift fur Medizinische Mikrobiologie und Immunologie = Z. Med. Mikrobiol. Immunol.
+Zeitschrift fur Mikroskopisch-Anatomische Forschung = Z. Mikrosk. Anat. Forsch.
+Zeitschrift fur Morphologie und Anthropologie = Z. Morphol. Anthropol.
+Zeitschrift fur Naturforschung. Section C, Biosciences = Z. Naturforsch. [C]
+Zeitschrift fur Naturforschung. Section C, Journal of Biosciences = Z. Naturforsch. [C]
+Zeitschrift fur Naturforschung. Teil B, Anorganische Chemie, Organische Chemie, Biochemie, Biophysik, Biologie = Z. Naturforsch. [B]
+Zeitschrift fur Naturforschung. Teil B, Chemie, Biochemie, Biophysik, Biologie und Verwandte Gebiete = Z. Naturforsch. B
+Zeitschrift fur Naturwissenschaftlich-Medizinische Grundlagenforschung = Z. Naturwiss. Med. Grundlagenforsch.
+Zeitschrift fur Neurologie = Z. Neurol.
+Zeitschrift fur Orthopadie und Ihre Grenzgebiete = Z. Orthop. Ihre Grenzgeb.
+Zeitschrift fur Parasitenkunde = Z. Parasitenkd.
+Zeitschrift fur Physiotherapie = Z. Physiother.
+Zeitschrift fur Plastische Chirurgie = Z. Plast. Chir.
+Zeitschrift fur Praktische Anasthesie und Wiederbelebung = Z. Prakt. Anasth.
+Zeitschrift fur Praktische Anasthesie, Wiederbelebung und Intensivtherapie = Z. Prakt. Anasth. Wiederbeleb. Intensivther.
+Zeitschrift fur Praventivmedizin = Z. Praventivmed.
+Zeitschrift fur Psychologie mit Zeitschrift fur Angewandte Psychologie = Z. Psychol. Z. Angew. Psychol.
+Zeitschrift fur Psychosomatische Medizin und Psychoanalyse = Z. Psychosom. Med. Psychoanal.
+Zeitschrift fur Psychosomatische Medizin und Psychotherapie = Z. Psychosom. Med. Psychother.
+Zeitschrift fur Psychotherapie und Medizinische Psychologie = Z. Psychother. Med. Psychol.
+Zeitschrift fur Rechtsmedizin (Journal of Legal Medicine) = Z. Rechtsmed.
+Zeitschrift fur Rheumaforschung = Z. Rheumaforsch.
+Zeitschrift fur Rheumatologie = Z. Rheumatol.
+Zeitschrift fur Stomatologie = Z. Stomatol.
+Zeitschrift fur Tierphysiologie, Tierernahrung und Futtermittelkunde = Z. Tierphysiol. Tierernahr. Futtermittelkd.
+Zeitschrift fur Tierpsychologie = Z. Tierpsychol.
+Zeitschrift fur Tierzuchtung und Zuchtungsbiologie = Z. Tierzuecht. Zuechtungsbiol.
+Zeitschrift fur Tropenmedizin und Parasitologie = Z. Tropenmed. Parasitol.
+Zeitschrift fur Tuberkulose und Erkrankungen der Thoraxorgane = Z. Tuberk. Erkr. Thoraxorg.
+Zeitschrift fur Unfallchirurgie und Versicherungsmedizin = Z. Unfallchir. Versicherungsmed.
+Zeitschrift fur Unfallchirurgie, Versicherungsmedizin und Berufskrankheiten = Z. Unfallchir. Versicherungsmed. Berufskr.
+Zeitschrift fur Unfallmedizin und Berufskrankheiten = Z. Unfallmed. Berufskr.
+Zeitschrift fur Urologie und Nephrologie = Z. Urol. Nephrol.
+Zeitschrift fur Vererbungslehre = Z. Vererbungsl.
+Zeitschrift fur Versuchstierkunde = Z. Versuchstierkd.
+Zeitschrift fur Vitamin- Hormon- und Fermentforschung = Z. Vitam. Horm. Fermentforsch.
+Zeitschrift fur Wissenschaftliche Mikroskopie und fur Mikroskopische Technik = Z. Wiss. Mikrosk.
+Zeitschrift fur Zellforschung und Mikroskopische Anatomie = Z. Zellforsch. Mikrosk. Anat.
+Zeitschrift fur die Gesamte Experimentelle Medizin einschliesslich Experimentelle Chirurgie = Z. Gesamte Exp. Med.
+Zeitschrift fur die Gesamte Hygiene und Ihre Grenzgebiete = Z. Gesamte Hyg.
+Zeitschrift fur die Gesamte Innere Medizin und Ihre Grenzgebiete = Z. Gesamte Inn. Med.
+Zeitschrift für Meteorologie = Z. Meteor.
+Zentralblatt fur Allgemeine Pathologie und Pathologische Anatomie = Zentralbl. Allg. Pathol.
+Zentralblatt fur Arbeitsmedizin und Arbeitsschutz = Zentralbl. Arbeitsmed.
+Zentralblatt fur Arbeitsmedizin, Arbeitsschutz und Prophylaxe = Zentralbl. Arbeitsmed. Arbeitsschutz Prophyl.
+Zentralblatt fur Arbeitsmedizin, Arbeitsschutz, Prophylaxe und Ergonomie = Zentralbl. Arbeitsmed. Arbeitsschutz. Prophyl. Ergonomie
+Zentralblatt fur Bakteriologie, Mikrobiologie und Hygiene. 1. Abt. Originale B, Hygiene = Zentralbl. Bakteriol. Mikrobiol. Hyg. [B]
+Zentralblatt fur Bakteriologie, Mikrobiologie und Hygiene. Serie B, Umwelthygiene, Krankenhaushygiene, Arbeitshygiene, Praventive Medizin = Zentralbl. Bakteriol. Mikrobiol. Hyg. [B]
+Zentralblatt fur Bakteriologie, Mikrobiologie, und Hygiene. Series A, Medical Microbiology, Infectious Diseases, Virology, Parasitology = Zentralbl. Bakteriol. Mikrobiol. Hyg. [A]
+Zentralblatt fur Bakteriologie, Parasitenkunde, Infektionskrankheiten und Hygiene. 1. Abt., = Zentralbl. Bakteriol. [Orig.]
+Zentralblatt fur Bakteriologie, Parasitenkunde, Infektionskrankheiten und Hygiene. Erste = Zentralbl. Bakteriol. [Orig. B]
+Zentralblatt fur Bakteriologie, Parasitenkunde, Infektionskrankheiten und Hygiene. Erste Abteilung, Originale. Reihe B, Hygiene, Betriebshygiene, Praventive Medizin = Zentralbl. Bakteriol. [B]
+Zentralblatt fur Bakteriologie, Parasitenkunde, Infektionskrankheiten und Hygiene. Zweite = Zentralbl. Bakteriol. Parasitenkd. Infektionskr. Hyg.
+Zentralblatt fur Bakteriologie. 1. Abt., Originale. A, Medizinische Mikrobiologie, Infektionskrankheiten und Parasitiologie = Zentralbl. Bakteriol. A.
+Zentralblatt fur Bakteriologie. 1. Abt., Originale. B, Hygiene, Krankenhaushygiene, Betriebshygiene, Praventive Medizin = Zentralbl. Bakteriol. [B]
+Zentralblatt fur Biologische Aerosolforschung = Zentralbl. Biol. Aerosolforsch.
+Zentralblatt fur Chirurgie = Zentralbl. Chir.
+Zentralblatt fur Gynakologie = Zentralbl. Gynakol.
+Zentralblatt fur Hygiene und Umweltmedizin = Zentralbl. Hyg. Umweltmed.
+Zentralblatt fur Mikrobiologie = Zentralbl. Mikrobiol.
+Zentralblatt fur Neurochirurgie = Zentralbl. Neurochir.
+Zentralblatt fur Pathologie = Zentralbl. Pathol.
+Zentralblatt fur Phlebologie = Zentralbl. Phlebol.
+Zentralblatt fur Veterinarmedizin. Reihe A = Zentralbl. Veterinarmed. A
+Zentralblatt fur Veterinarmedizin. Reihe B = Zentralbl. Veterinarmed. [B]
+Zentralblatt fur Veterinarmedizin. Reihe C, Anatomia, Histologia, Embryologia = Zentralbl. Veterinarmed. [C]
+Zhi Wu Sheng Li Yu Fen Zi Sheng Wu Xue Xue Bao (Journal of Plant Physiology and Molecular Biology) = Zhi Wu Sheng Li Yu Fen Zi Sheng Wu Xue Xue Bao
+Zhipu Xuebao=Zhipu Xuebao;ZXHUBO;Q
+Zhong Nan Da Xue Xue Bao. Yi Xue Ban (Journal of Central South University. Medical Sciences) = Zhong Nan Da Xue Xue Bao Yi Xue Ban
+Zhong Xi Yi Jie He Xue Bao (Journal of Chinese Integrative Medicine) = Zhong Xi Yi Jie He Xue Bao
+Zhong Xi Yi Jie He Za Zhi (Chinese Journal of Modern Developments in Traditional Medicine) = Zhong Xi Yi Jie He Za Zhi
+Zhong Yao Tong Bao (Bulletin of Chinese Materia Medica) = Zhong Yao Tong Bao
+Zhongguo Ji Sheng Chong Xue Yu Ji Sheng Chong Bing Za Zhi (Chinese Journal of Parasitology and Parasitic Diseases) = Zhongguo Ji Sheng Chong Xue Yu Ji Sheng Chong Bing Za Zhi
+Zhongguo Shengwu Huaxue Yu Fenzi Shengwu Xuebao=Zhongguo Shengwu Huaxue Yu Fenzi Shengwu Xuebao;ZSHXF2;BM
+Zhongguo Xiu Fu Chong Jian Wai Ke Za Zhi (Chinese Journal of Reparative and Reconstructive Surgery) = Zhongguo Xiu Fu Chong Jian Wai Ke Za Zhi
+Zhongguo Yao Li Xue Bao (Acta Pharmacologica Sinica) = Zhongguo Yao Li Xue Bao
+Zhongguo Yi Liao Qi Xie Za Zhi (Chinese Journal of Medical Instrumentation) = Zhongguo Yi Liao Qi Xie Za Zhi
+Zhongguo Yi Xue Ke Xue Yuan Xue Bao (Acta Academiae Medicinae Sinicae) = Zhongguo Yi Xue Ke Xue Yuan Xue Bao
+Zhongguo Ying Yong Sheng Li Xue Za Zhi (Chinese Journal of Applied Physiology) = Zhongguo Ying Yong Sheng Li Xue Za Zhi
+Zhongguo Zhong Xi Yi Jie He Za Zhi (Chinese Journal of Integrated Traditional and Western Medicine) = Zhongguo Zhong Xi Yi Jie He Za Zhi
+Zhongguo Zhong Yao Za Zhi (China Journal of Chinese Materia Medica) = Zhongguo Zhong Yao Za Zhi
+Zhonghua Bing Li Xue Za Zhi (Chinese Journal of Pathology) = Zhonghua Bing Li Xue Za Zhi
+Zhonghua Er Bi Yan Hou Ke Za Zhi (Chinese Journal of Otorhinolaryngology) = Zhonghua Er Bi Yan Hou Ke Za Zhi
+Zhonghua Er Bi Yan Hou Tou Jing Wai Ke Za Zhi (Chinese Journal of Otorhinolaryngology Head and Neck Surgery) = Zhonghua Er Bi Yan Hou Tou Jing Wai Ke Za Zhi
+Zhonghua Fang She Xue Za Zhi (Chinese Journal of Radiology) = Zhonghua Fang She Xue Za Zhi
+Zhonghua Fu Chan Ke Za Zhi (Chinese Journal of Obstetrics and Gynecology) = Zhonghua Fu Chan Ke Za Zhi
+Zhonghua Gan Zang Bing Za Zhi (Chinese Journal of Hepatology) = Zhonghua Gan Zang Bing Za Zhi
+Zhonghua Hu Li Za Zhi (Chinese Journal of Nursing) = Zhonghua Hu Li Za Zhi
+Zhonghua Jie He He Hu Xi Xi Ji Bing Za Zhi (Chinese Journal of Tuberculosis and Respiratory Diseases) = Zhonghua Jie He He Hu Xi Xi Ji Bing Za Zhi
+Zhonghua Jie He He Hu Xi Za Zhi (Chinese Journal of Tuberculosis and Respiratory Diseases) = Zhonghua Jie He He Hu Xi Za Zhi
+Zhonghua Kou Qiang Ke Za Zhi (Chinese Journal of Stomatology) = Zhonghua Kou Qiang Ke Za Zhi
+Zhonghua Kou Qiang Yi Xue Za Zhi (Chinese Journal of Stomatology) = Zhonghua Kou Qiang Yi Xue Za Zhi
+Zhonghua Liu Xing Bing Xue Za Zhi = Zhonghua Liu Xing Bing Xue Za Zhi
+Zhonghua Minguo Wei Sheng Wu Ji Mian Yi Xue Za Zhi (Chinese Journal of Microbiology and Immunology) = Zhonghua Min Guo Wei Sheng Wu Ji Mian Yi Xue Za Zhi
+Zhonghua Minguo Wei Sheng Wu Xue Za Zhi (Chinese Journal of Microbiology) = Zhonghua Min Guo Wei Sheng Wu Xue Za Zhi
+Zhonghua Minguo Xiao Er Ke Yi Xue Hui Za Zhi = Zhonghua Min Guo Xiao Er Ke Yi Xue Hui Za Zhi
+Zhonghua Nei Ke Za Zhi (Chinese Journal of Internal Medicine) = Zhonghua Nei Ke Za Zhi
+Zhonghua Shao Shang Za Zhi = Zhonghua Shao Shang Za Zhi
+Zhonghua Shen Jing Jing Shen Ke Za Zhi (Chinese Journal of Neurology and Psychiatry) = Zhonghua Shen Jing Jing Shen Ke Za Zhi
+Zhonghua Wai Ke Za Zhi (Chinese Journal of Surgery) = Zhonghua Wai Ke Za Zhi
+Zhonghua Xin Xue Guan Bing Za Zhi (Chinese Journal of Cardiovascular Diseases) = Zhonghua Xin Xue Guan Bing Za Zhi
+Zhonghua Yi Xue Yi Chuan Xue Za Zhi (Chinese Journal of Medical Genetics) = Zhonghua Yi Xue Yi Chuan Xue Za Zhi
+Zhonghua Yi Xue Za Zhi (Chinese Medical Journal, Taipei) = Zhonghua Yi Xue Za Zhi (Taipei)
+Zhonghua Yu Fang Yi Xue Za Zhi (Chinese Journal of Preventive Medicine) = Zhonghua Yu Fang Yi Xue Za Zhi
+Zhonghua Zheng Xing Shao Shang Wai Ke Za Zhi (Chinese Journal of Plastic Surgery and Burns) = Zhonghua Zheng Xing Shao Shang Wai Ke Za Zhi
+Zhonghua Zheng Xing Wai Ke Za Zhi = Zhonghua Zheng Xing Wai Ke Za Zhi
+Zhonghua Zhong Liu Za Zhi (Chinese Journal of Oncology) = Zhonghua Zhong Liu Za Zhi
+Zhurnal Eksperimentalnoi i Klinicheskoi Meditsiny = Zh. Eksp. Klin. Med.
+Zhurnal Evoliutsionnoi Biokhimii i Fiziologii = Zh. Evol. Biokhim. Fiziol.
+Zhurnal Mikrobiologii, Epidemiologii i Immunobiologii = Zh. Mikrobiol. Epidemiol. Immunobiol.
+Zhurnal Neorganicheskoi Khimii=Zh. Neorg. Khim.;ZNOKAQ;M
+Zhurnal Nevrologii i Psikhiatrii imeni S.S. Korsakova = Zh. Nevrol. Psikhiatr. Im. S. S. Korsakova
+Zhurnal Nevropatologii i Psikhiatrii imeni S. S. Korsakova = Zh. Nevropatol. Psikhiatr. Im. S. S. Korsakova
+Zhurnal Obshchei Biologii = Zh. Obshch. Biol.
+Zhurnal Organichnoi ta Farmatsevtichnoi Khimii=Zh. Org. Farm. Khim.;ZOFKAM;4/YR
+Zhurnal Ushnykh, Nosovykh i Gorlovykh Boleznei = Zh. Ushn. Nos. Gorl. Bolezn.
+Zhurnal Voprosy Neirokhirurgii Imeni N. N. Burdenko = Zh. Vopr. Neirokhir. Im. N. N. Burdenko
+Zhurnal Vysshei Nervnoi Deiatelnosti Imeni I. P. Pavlova = Zh. Vyssh. Nerv. Deiat. Im. I. P. Pavlova
+Zimbabwe Nurse = Zimbabwe Nurse
+Zimbabwe Rhodesia Nurse = Zimbabwe Rhod. Nurse
+Zobozdravstveni Vestnik = Zobozdrav. Vestn.
+Zoological Science = Zoolog. Sci.
+Zoonoses Research = Zoonoses Res.
+Zuchthygiene = Zuchthygiene
+Zygote = Zygote
diff --git a/src/resource/layout/bibordf.article.layout b/src/resource/layout/bibordf.article.layout
index a6a6a84..a175828 100644
--- a/src/resource/layout/bibordf.article.layout
+++ b/src/resource/layout/bibordf.article.layout
@@ -1,14 +1,14 @@
-<bibo:Article rdf:about="http://dx.doi.org/\format[XMLChars]{\doi}">
-
-\begin{title}    <dc:title>\format[XMLChars]{\title}</dc:title>\end{title}
-\begin{year}    <dc:date>\year</dc:date>\end{year}
-\begin{journal}    <dcterms:isPartOf><bibo:Journal><dc:title>\format[XMLChars]{\journal}</dc:title></bibo:Journal></dcterms:isPartOf>\end{journal}
-\begin{volume}    <bibo:volume>\format[XMLChars]{\volume}</bibo:volume>\end{volume}
-\begin{doi}    <bibo:doi>\format[XMLChars]{\doi}</bibo:doi>\end{doi}
-
-
-\begin{author}
-   \format[XMLChars,CreateBibORDFAuthors]{\author}
-\end{author}
-
-</bibo:Article>
+<bibo:Article rdf:about="http://dx.doi.org/\format[XMLChars]{\doi}">
+
+\begin{title}    <dc:title>\format[XMLChars]{\title}</dc:title>\end{title}
+\begin{year}    <dc:date>\year</dc:date>\end{year}
+\begin{journal}    <dcterms:isPartOf><bibo:Journal><dc:title>\format[XMLChars]{\journal}</dc:title></bibo:Journal></dcterms:isPartOf>\end{journal}
+\begin{volume}    <bibo:volume>\format[XMLChars]{\volume}</bibo:volume>\end{volume}
+\begin{doi}    <bibo:doi>\format[XMLChars]{\doi}</bibo:doi>\end{doi}
+
+
+\begin{author}
+   \format[XMLChars,CreateBibORDFAuthors]{\author}
+\end{author}
+
+</bibo:Article>
diff --git a/src/resource/layout/bibordf.begin.layout b/src/resource/layout/bibordf.begin.layout
index 7684f55..5668b7b 100644
--- a/src/resource/layout/bibordf.begin.layout
+++ b/src/resource/layout/bibordf.begin.layout
@@ -1,10 +1,10 @@
-<?xml version="1.0"?>
-<rdf:RDF
-      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-      xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
-      xmlns:bibo="http://purl.org/ontology/biblio/"
-      xmlns:dc="http://purl.org/dc/elements/1.1/"
-      xmlns:dcterms="http://purl.org/dc/terms/"
-      xmlns:foaf="http://xmlns.com/foaf/0.1/"
->
-
+<?xml version="1.0"?>
+<rdf:RDF
+      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+      xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+      xmlns:bibo="http://purl.org/ontology/biblio/"
+      xmlns:dc="http://purl.org/dc/elements/1.1/"
+      xmlns:dcterms="http://purl.org/dc/terms/"
+      xmlns:foaf="http://xmlns.com/foaf/0.1/"
+>
+
diff --git a/src/resource/layout/bibordf.end.layout b/src/resource/layout/bibordf.end.layout
index 7edcd78..59b62d4 100644
--- a/src/resource/layout/bibordf.end.layout
+++ b/src/resource/layout/bibordf.end.layout
@@ -1 +1 @@
-</rdf:RDF>
+</rdf:RDF>
diff --git a/src/resource/layout/bibordf.layout b/src/resource/layout/bibordf.layout
index 2100489..f7a2fe4 100644
--- a/src/resource/layout/bibordf.layout
+++ b/src/resource/layout/bibordf.layout
@@ -1,11 +1,11 @@
-<bibo:Document rdf:about="http://dx.doi.org/\doi">
-
-\begin{title}    <dc:title>\format[XMLChars]{\title}</dc:title>\end{title}
-\begin{year}    <dc:date>\year</dc:date>\end{year}
-\begin{doi}    <bibo:doi>\format[XMLChars]{\doi}</bibo:doi>\end{doi}
-
-\begin{author}
-   \format[XMLChars,CreateBibORDFAuthors]{\author}
-\end{author}
-
-</bibo:Document>
+<bibo:Document rdf:about="http://dx.doi.org/\doi">
+
+\begin{title}    <dc:title>\format[XMLChars]{\title}</dc:title>\end{title}
+\begin{year}    <dc:date>\year</dc:date>\end{year}
+\begin{doi}    <bibo:doi>\format[XMLChars]{\doi}</bibo:doi>\end{doi}
+
+\begin{author}
+   \format[XMLChars,CreateBibORDFAuthors]{\author}
+\end{author}
+
+</bibo:Document>
diff --git a/src/resource/layout/bibtexml.begin.layout b/src/resource/layout/bibtexml.begin.layout
index 140a9b8..197b074 100644
--- a/src/resource/layout/bibtexml.begin.layout
+++ b/src/resource/layout/bibtexml.begin.layout
@@ -1,5 +1,5 @@
-<?xml version="1.0" ?>
-<bibtex:file xmlns:bibtex="http://bibtexml.sf.net/">
-<!-- This file was exported from JabRef jabref.sf.net -->
-<!-- 2006-01-17 added DOI XML character formatting, because DOI can contain < and > -->
-
+<?xml version="1.0" ?>
+<bibtex:file xmlns:bibtex="http://bibtexml.sf.net/">
+<!-- This file was exported from JabRef jabref.sf.net -->
+<!-- 2006-01-17 added DOI XML character formatting, because DOI can contain < and > -->
+
diff --git a/src/resource/layout/bibtexml.end.layout b/src/resource/layout/bibtexml.end.layout
index 0447a2f..621d51f 100644
--- a/src/resource/layout/bibtexml.end.layout
+++ b/src/resource/layout/bibtexml.end.layout
@@ -1 +1 @@
-</bibtex:file>
+</bibtex:file>
diff --git a/src/resource/layout/bibtexml.layout b/src/resource/layout/bibtexml.layout
old mode 100755
new mode 100644
index 62eb681..bb4db9e
--- a/src/resource/layout/bibtexml.layout
+++ b/src/resource/layout/bibtexml.layout
@@ -1,37 +1,37 @@
-<bibtex:entry id="\bibtexkey">
-  <bibtex:\format[ToLowerCase]{\bibtextype}>
-\begin{author}    <bibtex:author>\format[XMLChars,AuthorFirstFirst]{\author}</bibtex:author>\end{author}
-\begin{editor}    <bibtex:editor>\format[XMLChars,AuthorFirstFirst]{\editor}</bibtex:editor>\end{editor}
-\begin{title}    <bibtex:title>\format[XMLChars]{\title}</bibtex:title>\end{title}
-\begin{booktitle}    <bibtex:booktitle>\format[XMLChars]{\booktitle}</bibtex:booktitle>\end{booktitle}
-\begin{journal}    <bibtex:journal>\format[XMLChars]{\journal}</bibtex:journal>\end{journal}
-\begin{publisher}    <bibtex:publisher>\format[XMLChars]{\publisher}</bibtex:publisher>\end{publisher}
-\begin{year}    <bibtex:year>\year</bibtex:year>\end{year}
-\begin{volume}    <bibtex:volume>\format[XMLChars]{\volume}</bibtex:volume>\end{volume}
-\begin{month}    <bibtex:month>\format[XMLChars]{\month}</bibtex:month>\end{month}
-\begin{chapter}    <bibtex:chapter>\format[XMLChars]{\chapter}</bibtex:chapter>\end{chapter}
-\begin{pages}    <bibtex:pages>\format[FormatPagesForXML]{\pages}</bibtex:pages>\end{pages}
-\begin{number}    <bibtex:number>\format[XMLChars]{\number}</bibtex:number>\end{number}
-\begin{edition}    <bibtex:edition>\format[XMLChars]{\edition}</bibtex:edition>\end{edition}
-\begin{series}    <bibtex:series>\format[XMLChars]{\series}</bibtex:series>\end{series}
-\begin{institution}    <bibtex:institution>\format[XMLChars]{\institution}</bibtex:institution>\end{institution}
-\begin{organization}    <bibtex:organization>\format[XMLChars]{\organization}</bibtex:organization>\end{organization}
-\begin{school}    <bibtex:school>\format[XMLChars]{\school}</bibtex:school>\end{school}
-\begin{address}    <bibtex:address>\format[XMLChars]{\address}</bibtex:address>\end{address}
-\begin{howpublished}    <bibtex:howpublished>\format[XMLChars]{\howpublished}</bibtex:howpublished>\end{howpublished}
-\begin{abstract}    <bibtex:abstract>\format[XMLChars]{\abstract}</bibtex:abstract>\end{abstract}
-\begin{url}    <bibtex:url>\format[XMLChars]{\url}</bibtex:url>\end{url}
-\begin{doi}    <bibtex:doi>\format[XMLChars]{\doi}</bibtex:doi>\end{doi}
-\begin{eid}    <bibtex:eid>\format[XMLChars]{\eid}</bibtex:eid>\end{eid}
-\begin{pdf}    <bibtex:pdf>\format[ResolvePDF,XMLChars]{\pdf}</bibtex:pdf>\end{pdf}
-\begin{type}    <bibtex:type>\format[XMLChars]{\type}</bibtex:type>\end{type}
-\begin{crossref}    <bibtex:crossref>\format[XMLChars]{\crossref}</bibtex:crossref>\end{crossref}
-\begin{annote}    <bibtex:annote>\format[XMLChars]{\annote}</bibtex:annote>\end{annote}
-\begin{keywords}    <bibtex:keywords>\format[XMLChars]{\keywords}</bibtex:keywords>\end{keywords}
-\begin{comment}    <bibtex:comment>\format[XMLChars]{\comment}</bibtex:comment>\end{comment}
-\begin{note}    <bibtex:note>\format[XMLChars]{\note}</bibtex:note>\end{note}
-\begin{key}    <bibtex:key>\format[XMLChars]{\key}</bibtex:key>\end{key}
-\begin{review}    <bibtex:nstandard name="review">\format[XMLChars]{\review}</bibtex:nstandard>\end{review}
-\begin{file}\format[WrapFileLinks(    <bibtex:nstandard name="file" type="\x" description="\d">\p</bibtex:nstandard>\n)]{\file}\end{file}
-  </bibtex:\format[ToLowerCase]{\bibtextype}>
-</bibtex:entry>
+<bibtex:entry id="\bibtexkey">
+  <bibtex:\format[ToLowerCase]{\bibtextype}>
+\begin{author}    <bibtex:author>\format[XMLChars,AuthorFirstFirst]{\author}</bibtex:author>\end{author}
+\begin{editor}    <bibtex:editor>\format[XMLChars,AuthorFirstFirst]{\editor}</bibtex:editor>\end{editor}
+\begin{title}    <bibtex:title>\format[XMLChars]{\title}</bibtex:title>\end{title}
+\begin{booktitle}    <bibtex:booktitle>\format[XMLChars]{\booktitle}</bibtex:booktitle>\end{booktitle}
+\begin{journal}    <bibtex:journal>\format[XMLChars]{\journal}</bibtex:journal>\end{journal}
+\begin{publisher}    <bibtex:publisher>\format[XMLChars]{\publisher}</bibtex:publisher>\end{publisher}
+\begin{year}    <bibtex:year>\year</bibtex:year>\end{year}
+\begin{volume}    <bibtex:volume>\format[XMLChars]{\volume}</bibtex:volume>\end{volume}
+\begin{month}    <bibtex:month>\format[XMLChars]{\month}</bibtex:month>\end{month}
+\begin{chapter}    <bibtex:chapter>\format[XMLChars]{\chapter}</bibtex:chapter>\end{chapter}
+\begin{pages}    <bibtex:pages>\format[FormatPagesForXML]{\pages}</bibtex:pages>\end{pages}
+\begin{number}    <bibtex:number>\format[XMLChars]{\number}</bibtex:number>\end{number}
+\begin{edition}    <bibtex:edition>\format[XMLChars]{\edition}</bibtex:edition>\end{edition}
+\begin{series}    <bibtex:series>\format[XMLChars]{\series}</bibtex:series>\end{series}
+\begin{institution}    <bibtex:institution>\format[XMLChars]{\institution}</bibtex:institution>\end{institution}
+\begin{organization}    <bibtex:organization>\format[XMLChars]{\organization}</bibtex:organization>\end{organization}
+\begin{school}    <bibtex:school>\format[XMLChars]{\school}</bibtex:school>\end{school}
+\begin{address}    <bibtex:address>\format[XMLChars]{\address}</bibtex:address>\end{address}
+\begin{howpublished}    <bibtex:howpublished>\format[XMLChars]{\howpublished}</bibtex:howpublished>\end{howpublished}
+\begin{abstract}    <bibtex:abstract>\format[XMLChars]{\abstract}</bibtex:abstract>\end{abstract}
+\begin{url}    <bibtex:url>\format[XMLChars]{\url}</bibtex:url>\end{url}
+\begin{doi}    <bibtex:doi>\format[XMLChars]{\doi}</bibtex:doi>\end{doi}
+\begin{eid}    <bibtex:eid>\format[XMLChars]{\eid}</bibtex:eid>\end{eid}
+\begin{pdf}    <bibtex:pdf>\format[ResolvePDF,XMLChars]{\pdf}</bibtex:pdf>\end{pdf}
+\begin{type}    <bibtex:type>\format[XMLChars]{\type}</bibtex:type>\end{type}
+\begin{crossref}    <bibtex:crossref>\format[XMLChars]{\crossref}</bibtex:crossref>\end{crossref}
+\begin{annote}    <bibtex:annote>\format[XMLChars]{\annote}</bibtex:annote>\end{annote}
+\begin{keywords}    <bibtex:keywords>\format[XMLChars]{\keywords}</bibtex:keywords>\end{keywords}
+\begin{comment}    <bibtex:comment>\format[XMLChars]{\comment}</bibtex:comment>\end{comment}
+\begin{note}    <bibtex:note>\format[XMLChars]{\note}</bibtex:note>\end{note}
+\begin{key}    <bibtex:key>\format[XMLChars]{\key}</bibtex:key>\end{key}
+\begin{review}    <bibtex:nstandard name="review">\format[XMLChars]{\review}</bibtex:nstandard>\end{review}
+\begin{file}\format[WrapFileLinks(    <bibtex:nstandard name="file" type="\x" description="\d">\p</bibtex:nstandard>\n)]{\file}\end{file}
+  </bibtex:\format[ToLowerCase]{\bibtextype}>
+</bibtex:entry>
diff --git a/src/resource/layout/din1505/README.txt b/src/resource/layout/din1505/README.txt
index 151ddc5..9e238d1 100644
--- a/src/resource/layout/din1505/README.txt
+++ b/src/resource/layout/din1505/README.txt
@@ -1,7 +1,7 @@
-Custom Export for DIN1505 style by Thorsten Bothe
-
-This is a custom export to allow a reference output in DIN1505 conform style. That means e.g. authors in capitals and Book/article title in italic.
-
-This export is not yet complete and some issues cannot be resolved without extension of the internal format modifier. E. g. the last author is separates by '&' but should have a ',' only.
-
+Custom Export for DIN1505 style by Thorsten Bothe
+
+This is a custom export to allow a reference output in DIN1505 conform style. That means e.g. authors in capitals and Book/article title in italic.
+
+This export is not yet complete and some issues cannot be resolved without extension of the internal format modifier. E. g. the last author is separates by '&' but should have a ',' only.
+
 At least this could be helpful for writing German documents outside TeX (which has working DIN1505 TeX styles) like OO and Word. Some manual postprocessing necessary.
\ No newline at end of file
diff --git a/src/resource/layout/din1505/din1505winword.article.layout b/src/resource/layout/din1505/din1505winword.article.layout
index d3d1be8..8cbc199 100644
--- a/src/resource/layout/din1505/din1505winword.article.layout
+++ b/src/resource/layout/din1505/din1505winword.article.layout
@@ -1,16 +1,16 @@
-{[\Bibtexkey]:}	
-{\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}}
-: \format[RTFChars]{\title}}
-. In: {\\i \format[RTFChars,RemoveLatexCommands]{\journal}}
-\begin{volume}
- {\volume}
-\end{volume}
- (\year)
-\begin{number}
-, Nr. \number
-\end{number}
-\begin{pages}
-, S. \pages
-\end{pages}
-\\par
+{[\Bibtexkey]:}	
+{\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}}
+: \format[RTFChars]{\title}}
+. In: {\\i \format[RTFChars,RemoveLatexCommands]{\journal}}
+\begin{volume}
+ {\volume}
+\end{volume}
+ (\year)
+\begin{number}
+, Nr. \number
+\end{number}
+\begin{pages}
+, S. \pages
+\end{pages}
+\\par
 {
\ No newline at end of file
diff --git a/src/resource/layout/din1505/din1505winword.begin.layout b/src/resource/layout/din1505/din1505winword.begin.layout
index 105836d..aa3aef6 100644
--- a/src/resource/layout/din1505/din1505winword.begin.layout
+++ b/src/resource/layout/din1505/din1505winword.begin.layout
@@ -1,3 +1,3 @@
-{\\rtf1\\ansi\\ansicpg1252\\uc1 \\deff0\\deflang1031\\deflangfe1031{\\fonttbl{\\f0\\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\f28\\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\f29\\froman\\fcharset204\\fprq2 Times New Roman Cyr;}
-{\\f31\\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\f32\\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\f33\\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}{\\f34\\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}
+{\\rtf1\\ansi\\ansicpg1252\\uc1 \\deff0\\deflang1031\\deflangfe1031{\\fonttbl{\\f0\\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\f28\\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\f29\\froman\\fcharset204\\fprq2 Times New Roman Cyr;}
+{\\f31\\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\f32\\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\f33\\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}{\\f34\\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}
 {\\f35\\froman\\fcharset186\\fprq2 Times New Roman Baltic;}}{
\ No newline at end of file
diff --git a/src/resource/layout/din1505/din1505winword.conference.layout b/src/resource/layout/din1505/din1505winword.conference.layout
index a5541d4..e851d5f 100644
--- a/src/resource/layout/din1505/din1505winword.conference.layout
+++ b/src/resource/layout/din1505/din1505winword.conference.layout
@@ -1,23 +1,23 @@
-{[\Bibtexkey]:}	
-{\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}}
-: \format[RTFChars]{\title}}
-. In:
-\begin{editor}
- {\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}} (Hrsg.)
-\end{editor}
-: {\\i \format[RTFChars]{\publisher}}.
-\begin{volume}
- {\volume}
-\end{volume}
-\begin{number}
-, Nr. \number
-\end{number}
-\begin{booktitle}
- : {\\i \format[RTFChars]{\booktitle}}.
-\end{booktitle}
-, \year
-\begin{pages}
-, S. \pages
-\end{pages}
-\\par
+{[\Bibtexkey]:}	
+{\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}}
+: \format[RTFChars]{\title}}
+. In:
+\begin{editor}
+ {\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}} (Hrsg.)
+\end{editor}
+: {\\i \format[RTFChars]{\publisher}}.
+\begin{volume}
+ {\volume}
+\end{volume}
+\begin{number}
+, Nr. \number
+\end{number}
+\begin{booktitle}
+ : {\\i \format[RTFChars]{\booktitle}}.
+\end{booktitle}
+, \year
+\begin{pages}
+, S. \pages
+\end{pages}
+\\par
 {
\ No newline at end of file
diff --git a/src/resource/layout/din1505/din1505winword.inproceedings.layout b/src/resource/layout/din1505/din1505winword.inproceedings.layout
index a5541d4..e851d5f 100644
--- a/src/resource/layout/din1505/din1505winword.inproceedings.layout
+++ b/src/resource/layout/din1505/din1505winword.inproceedings.layout
@@ -1,23 +1,23 @@
-{[\Bibtexkey]:}	
-{\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}}
-: \format[RTFChars]{\title}}
-. In:
-\begin{editor}
- {\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}} (Hrsg.)
-\end{editor}
-: {\\i \format[RTFChars]{\publisher}}.
-\begin{volume}
- {\volume}
-\end{volume}
-\begin{number}
-, Nr. \number
-\end{number}
-\begin{booktitle}
- : {\\i \format[RTFChars]{\booktitle}}.
-\end{booktitle}
-, \year
-\begin{pages}
-, S. \pages
-\end{pages}
-\\par
+{[\Bibtexkey]:}	
+{\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}}
+: \format[RTFChars]{\title}}
+. In:
+\begin{editor}
+ {\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}} (Hrsg.)
+\end{editor}
+: {\\i \format[RTFChars]{\publisher}}.
+\begin{volume}
+ {\volume}
+\end{volume}
+\begin{number}
+, Nr. \number
+\end{number}
+\begin{booktitle}
+ : {\\i \format[RTFChars]{\booktitle}}.
+\end{booktitle}
+, \year
+\begin{pages}
+, S. \pages
+\end{pages}
+\\par
 {
\ No newline at end of file
diff --git a/src/resource/layout/din1505/din1505winword.layout b/src/resource/layout/din1505/din1505winword.layout
index 3e06e34..cea20e1 100644
--- a/src/resource/layout/din1505/din1505winword.layout
+++ b/src/resource/layout/din1505/din1505winword.layout
@@ -1,51 +1,51 @@
-{[\Bibtexkey]:}	
-{\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}}
-: \format[RTFChars]{\title}}
-\begin{journal}
-. In:
-{\\i \format[RTFChars,RemoveLatexCommands]{\journal}}
-\end{journal}
-\begin{editor}
-. In:
- {\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}} (Hrsg.)
-\end{editor}
-\begin{organization}
-, \format[RTFChars]{\organization}
-\end{organization}
-\begin{institution}
-, Bericht, \format[RTFChars]{\institution}
-\end{institution}
-
-\begin{school}
-, Dissertation
- (\type)
-, \format[RTFChars]{\school}
-\end{school}
-
-\begin{howpublished}
-, \format[RTFChars]{\howpublished}
-\end{howpublished}
-
-\begin{address}
-, \format[RTFChars]{\address}
-\end{address}
-
-\begin{publisher}
-: {\\i \format[RTFChars]{\publisher}}.
-\end{publisher}
-
-\begin{volume}
- {\volume}
-\end{volume}
-\begin{number}
-, Nr. \number
-\end{number}
-\begin{booktitle}
- : {\\i \format[RTFChars]{\booktitle}}.
-\end{booktitle}
-, \year
-\begin{pages}
-, S. \pages
-\end{pages}
-\\par
+{[\Bibtexkey]:}	
+{\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}}
+: \format[RTFChars]{\title}}
+\begin{journal}
+. In:
+{\\i \format[RTFChars,RemoveLatexCommands]{\journal}}
+\end{journal}
+\begin{editor}
+. In:
+ {\\scaps \format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}} (Hrsg.)
+\end{editor}
+\begin{organization}
+, \format[RTFChars]{\organization}
+\end{organization}
+\begin{institution}
+, Bericht, \format[RTFChars]{\institution}
+\end{institution}
+
+\begin{school}
+, Dissertation
+ (\type)
+, \format[RTFChars]{\school}
+\end{school}
+
+\begin{howpublished}
+, \format[RTFChars]{\howpublished}
+\end{howpublished}
+
+\begin{address}
+, \format[RTFChars]{\address}
+\end{address}
+
+\begin{publisher}
+: {\\i \format[RTFChars]{\publisher}}.
+\end{publisher}
+
+\begin{volume}
+ {\volume}
+\end{volume}
+\begin{number}
+, Nr. \number
+\end{number}
+\begin{booktitle}
+ : {\\i \format[RTFChars]{\booktitle}}.
+\end{booktitle}
+, \year
+\begin{pages}
+, S. \pages
+\end{pages}
+\\par
 {
\ No newline at end of file
diff --git a/src/resource/layout/docbook.begin.layout b/src/resource/layout/docbook.begin.layout
index 1f90f5c..68a20b7 100644
--- a/src/resource/layout/docbook.begin.layout
+++ b/src/resource/layout/docbook.begin.layout
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!DOCTYPE bibliography PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<!-- This file was exported from JabRef -->
-<bibliography>
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE bibliography PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!-- This file was exported from JabRef -->
+<bibliography>
diff --git a/src/resource/layout/docbook.end.layout b/src/resource/layout/docbook.end.layout
index 0dd396c..4f91d96 100644
--- a/src/resource/layout/docbook.end.layout
+++ b/src/resource/layout/docbook.end.layout
@@ -1 +1 @@
-</bibliography>
+</bibliography>
diff --git a/src/resource/layout/docbook.layout b/src/resource/layout/docbook.layout
old mode 100755
new mode 100644
index 07ea776..2ea62cc
--- a/src/resource/layout/docbook.layout
+++ b/src/resource/layout/docbook.layout
@@ -1,20 +1,20 @@
-<biblioentry xreflabel="\bibtexkey" id="\bibtexkey">
-   <authorgroup>
-\begin{author}       \format[CreateDocBookAuthors]{\author} \end{author}
-\begin{editor}       \format[CreateDocBookEditors]{\editor} \end{editor}
-   </authorgroup>
-   <citetitle pubwork="article">\format[XMLChars,RemoveLatexCommands]{\title}</citetitle>
-\begin{journal}   <citetitle pubwork="journal">\format[XMLChars]{\journal}</citetitle>\end{journal}
-\begin{publisher}   <publisher>
-      <publishername>\format[XMLChars]{\publisher}</publishername>
-   </publisher>\end{publisher}
-\begin{volume}   <volumenum>\volume</volumenum> \end{volume}
-\begin{edition}   <edition>\format[XMLChars,RemoveLatexCommands]{\edition}</edition> \end{edition}
-\begin{pages}   <artpagenums>\format[FormatPagesForXML]{\pages}</artpagenums> \end{pages}
-\begin{year}   <pubdate>\year</pubdate>  \end{year}
-\begin{url}  <bibliomisc><ulink url="\format[XMLChars]{\url}">\format[XMLChars]{\url}</ulink></bibliomisc>\end{url}
-\begin{abstract}   <abstract>
-      <para>\format[XMLChars,RemoveLatexCommands]{\abstract}
-      </para>
-   </abstract>\end{abstract}
-</biblioentry>
+<biblioentry xreflabel="\bibtexkey" id="\bibtexkey">
+   <authorgroup>
+\begin{author}       \format[CreateDocBookAuthors]{\author} \end{author}
+\begin{editor}       \format[CreateDocBookEditors]{\editor} \end{editor}
+   </authorgroup>
+   <citetitle pubwork="article">\format[XMLChars,RemoveLatexCommands]{\title}</citetitle>
+\begin{journal}   <citetitle pubwork="journal">\format[XMLChars]{\journal}</citetitle>\end{journal}
+\begin{publisher}   <publisher>
+      <publishername>\format[XMLChars]{\publisher}</publishername>
+   </publisher>\end{publisher}
+\begin{volume}   <volumenum>\volume</volumenum> \end{volume}
+\begin{edition}   <edition>\format[XMLChars,RemoveLatexCommands]{\edition}</edition> \end{edition}
+\begin{pages}   <artpagenums>\format[FormatPagesForXML]{\pages}</artpagenums> \end{pages}
+\begin{year}   <pubdate>\year</pubdate>  \end{year}
+\begin{url}  <bibliomisc><ulink url="\format[XMLChars]{\url}">\format[XMLChars]{\url}</ulink></bibliomisc>\end{url}
+\begin{abstract}   <abstract>
+      <para>\format[XMLChars,RemoveLatexCommands]{\abstract}
+      </para>
+   </abstract>\end{abstract}
+</biblioentry>
diff --git a/src/resource/layout/docbook.mastersthesis.layout b/src/resource/layout/docbook.mastersthesis.layout
index 8523421..5e2a419 100644
--- a/src/resource/layout/docbook.mastersthesis.layout
+++ b/src/resource/layout/docbook.mastersthesis.layout
@@ -1,11 +1,11 @@
-<biblioentry xreflabel="\bibtexkey" id="\bibtexkey">
-   <authorgroup>
-\begin{author}       \format[CreateDocBookAuthors]{\author} \end{author}
-   </authorgroup>
-   <citetitle pubwork="manuscript">\format[XMLChars,RemoveLatexCommands]{\title}</citetitle>
-\begin{school}   <publisher>
-      <publishername>\format[XMLChars]{\school}</publishername>
-   </publisher>\end{school}
-\begin{year}   <pubdate>\year</pubdate>  \end{year}
-\begin{url}  <bibliomisc><ulink url="\format[XMLChars]{\url}">\format[XMLChars]{\url}</ulink></bibliomisc>\end{url}
-</biblioentry>
+<biblioentry xreflabel="\bibtexkey" id="\bibtexkey">
+   <authorgroup>
+\begin{author}       \format[CreateDocBookAuthors]{\author} \end{author}
+   </authorgroup>
+   <citetitle pubwork="manuscript">\format[XMLChars,RemoveLatexCommands]{\title}</citetitle>
+\begin{school}   <publisher>
+      <publishername>\format[XMLChars]{\school}</publishername>
+   </publisher>\end{school}
+\begin{year}   <pubdate>\year</pubdate>  \end{year}
+\begin{url}  <bibliomisc><ulink url="\format[XMLChars]{\url}">\format[XMLChars]{\url}</ulink></bibliomisc>\end{url}
+</biblioentry>
diff --git a/src/resource/layout/endnote/EndNote.article.layout b/src/resource/layout/endnote/EndNote.article.layout
old mode 100755
new mode 100644
index f52bee1..bbe8ba8
--- a/src/resource/layout/endnote/EndNote.article.layout
+++ b/src/resource/layout/endnote/EndNote.article.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Journal Article
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E 
-%B \journal
-%C 
-%I \publisher
-%V \volume
-%6
-%N \number
-%P \format[FormatPagesForHTML]{\pages}
-%& 
-%Y 
-%S 
-%7
-%8 \month
-%9
-%? 
-%! \shorttitle
-%Z 
-%@ \issn
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 article
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Journal Article
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E 
+%B \journal
+%C 
+%I \publisher
+%V \volume
+%6
+%N \number
+%P \format[FormatPagesForHTML]{\pages}
+%& 
+%Y 
+%S 
+%7
+%8 \month
+%9
+%? 
+%! \shorttitle
+%Z 
+%@ \issn
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 article
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.book.layout b/src/resource/layout/endnote/EndNote.book.layout
old mode 100755
new mode 100644
index 92cb46b..e7b293f
--- a/src/resource/layout/endnote/EndNote.book.layout
+++ b/src/resource/layout/endnote/EndNote.book.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Book
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\editor}
-%B \series
-%C \address
-%I \publisher
-%V \volume
-%6
-%N \number
-%P \format[FormatPagesForHTML]{\pages}
-%& 
-%Y 
-%S 
-%7 \edition
-%8 \month
-%9
-%? 
-%! \shorttitle
-%Z 
-%@ \isbn
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 book
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Book
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\editor}
+%B \series
+%C \address
+%I \publisher
+%V \volume
+%6
+%N \number
+%P \format[FormatPagesForHTML]{\pages}
+%& 
+%Y 
+%S 
+%7 \edition
+%8 \month
+%9
+%? 
+%! \shorttitle
+%Z 
+%@ \isbn
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 book
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.booklet.layout b/src/resource/layout/endnote/EndNote.booklet.layout
old mode 100755
new mode 100644
index 9635c2d..d180527
--- a/src/resource/layout/endnote/EndNote.booklet.layout
+++ b/src/resource/layout/endnote/EndNote.booklet.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Personal Communication
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E
-%B
-%C \address
-%I \howpublished
-%V
-%6
-%N \lastchecked
-%P \format[FormatPagesForHTML]{\pages}
-%& 
-%Y 
-%S 
-%7
-%8 \month
-%9
-%? 
-%! \shorttitle
-%Z 
-%@ 
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 booklet
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Personal Communication
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E
+%B
+%C \address
+%I \howpublished
+%V
+%6
+%N \lastchecked
+%P \format[FormatPagesForHTML]{\pages}
+%& 
+%Y 
+%S 
+%7
+%8 \month
+%9
+%? 
+%! \shorttitle
+%Z 
+%@ 
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 booklet
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.inbook.layout b/src/resource/layout/endnote/EndNote.inbook.layout
old mode 100755
new mode 100644
index dca0ff3..b67ffdd
--- a/src/resource/layout/endnote/EndNote.inbook.layout
+++ b/src/resource/layout/endnote/EndNote.inbook.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Book Section
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\editor}
-%B \booktitle
-%C \address
-%I \publisher
-%V \volume
-%6
-%N 
-%P \format[FormatPagesForHTML]{\pages}
-%& \chapter
-%Y 
-%S \series
-%7 \edition
-%8 \month
-%9 \type
-%? 
-%! \shorttitle
-%Z 
-%@ \isbn
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 inbook
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Book Section
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\editor}
+%B \booktitle
+%C \address
+%I \publisher
+%V \volume
+%6
+%N 
+%P \format[FormatPagesForHTML]{\pages}
+%& \chapter
+%Y 
+%S \series
+%7 \edition
+%8 \month
+%9 \type
+%? 
+%! \shorttitle
+%Z 
+%@ \isbn
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 inbook
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.incollection.layout b/src/resource/layout/endnote/EndNote.incollection.layout
old mode 100755
new mode 100644
index 0956822..b9d9d7d
--- a/src/resource/layout/endnote/EndNote.incollection.layout
+++ b/src/resource/layout/endnote/EndNote.incollection.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Book Section
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\editor}
-%B \booktitle
-%C \address
-%I \publisher
-%V \volume
-%6
-%N 
-%P \format[FormatPagesForHTML]{\pages}
-%& \chapter
-%Y 
-%S \series
-%7 \edition
-%8 \month
-%9 \type
-%? 
-%! \shorttitle
-%Z 
-%@ \isbn
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 incollection
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Book Section
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\editor}
+%B \booktitle
+%C \address
+%I \publisher
+%V \volume
+%6
+%N 
+%P \format[FormatPagesForHTML]{\pages}
+%& \chapter
+%Y 
+%S \series
+%7 \edition
+%8 \month
+%9 \type
+%? 
+%! \shorttitle
+%Z 
+%@ \isbn
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 incollection
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.inproceedings.layout b/src/resource/layout/endnote/EndNote.inproceedings.layout
old mode 100755
new mode 100644
index 7ca4100..608d01d
--- a/src/resource/layout/endnote/EndNote.inproceedings.layout
+++ b/src/resource/layout/endnote/EndNote.inproceedings.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Conference Proceedings
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\editor}
-%B \booktitle
-%C \address
-%I \publisher
-%V \volume
-%6
-%N 
-%P \format[FormatPagesForHTML]{\pages}
-%& 
-%Y \organization
-%S \series
-%7
-%8 \month
-%9
-%? 
-%! \shorttitle
-%Z 
-%@ \isbn
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 inproceedings
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Conference Proceedings
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\editor}
+%B \booktitle
+%C \address
+%I \publisher
+%V \volume
+%6
+%N 
+%P \format[FormatPagesForHTML]{\pages}
+%& 
+%Y \organization
+%S \series
+%7
+%8 \month
+%9
+%? 
+%! \shorttitle
+%Z 
+%@ \isbn
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 inproceedings
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.layout b/src/resource/layout/endnote/EndNote.layout
old mode 100755
new mode 100644
index 3ef5296..0d7475c
--- a/src/resource/layout/endnote/EndNote.layout
+++ b/src/resource/layout/endnote/EndNote.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Generic
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E
-%B 
-%C
-%I \howpublished
-%V 
-%6
-%N 
-%P \format[FormatPagesForHTML]{\pages}
-%& 
-%Y 
-%S 
-%7
-%8 \month
-%9
-%? 
-%! \shorttitle
-%Z 
-%@ 
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 \entrytype
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Generic
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E
+%B 
+%C
+%I \howpublished
+%V 
+%6
+%N 
+%P \format[FormatPagesForHTML]{\pages}
+%& 
+%Y 
+%S 
+%7
+%8 \month
+%9
+%? 
+%! \shorttitle
+%Z 
+%@ 
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 \entrytype
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.manual.layout b/src/resource/layout/endnote/EndNote.manual.layout
old mode 100755
new mode 100644
index 084b94e..6f3b0ac
--- a/src/resource/layout/endnote/EndNote.manual.layout
+++ b/src/resource/layout/endnote/EndNote.manual.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Computer Program
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E
-%B 
-%C \address
-%I \organization
-%V 
-%6
-%N 
-%P \format[FormatPagesForHTML]{\pages}
-%& 
-%Y 
-%S 
-%7 \edition
-%8 \month
-%9
-%? 
-%! \shorttitle
-%Z 
-%@ \isbn
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 manual
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Computer Program
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E
+%B 
+%C \address
+%I \organization
+%V 
+%6
+%N 
+%P \format[FormatPagesForHTML]{\pages}
+%& 
+%Y 
+%S 
+%7 \edition
+%8 \month
+%9
+%? 
+%! \shorttitle
+%Z 
+%@ \isbn
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 manual
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.mastersthesis.layout b/src/resource/layout/endnote/EndNote.mastersthesis.layout
old mode 100755
new mode 100644
index 86af2d9..ffe4f65
--- a/src/resource/layout/endnote/EndNote.mastersthesis.layout
+++ b/src/resource/layout/endnote/EndNote.mastersthesis.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Thesis
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E 
-%B 
-%C \address
-%I \school
-%V 
-%6
-%N 
-%P \format[FormatPagesForHTML]{\pages}
-%& 
-%Y 
-%S 
-%7
-%8 \month
-%9 \type
-%? 
-%! \shorttitle
-%Z 
-%@ 
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 mastersthesis
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Thesis
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E 
+%B 
+%C \address
+%I \school
+%V 
+%6
+%N 
+%P \format[FormatPagesForHTML]{\pages}
+%& 
+%Y 
+%S 
+%7
+%8 \month
+%9 \type
+%? 
+%! \shorttitle
+%Z 
+%@ 
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 mastersthesis
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.misc.layout b/src/resource/layout/endnote/EndNote.misc.layout
old mode 100755
new mode 100644
index 7df4a94..20a64ab
--- a/src/resource/layout/endnote/EndNote.misc.layout
+++ b/src/resource/layout/endnote/EndNote.misc.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Generic
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E
-%B 
-%C
-%I \howpublished
-%V 
-%6
-%N 
-%P \format[FormatPagesForHTML]{\pages}
-%& 
-%Y 
-%S 
-%7
-%8 \month
-%9
-%? 
-%! \shorttitle
-%Z 
-%@ 
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 misc
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Generic
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E
+%B 
+%C
+%I \howpublished
+%V 
+%6
+%N 
+%P \format[FormatPagesForHTML]{\pages}
+%& 
+%Y 
+%S 
+%7
+%8 \month
+%9
+%? 
+%! \shorttitle
+%Z 
+%@ 
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 misc
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.other.layout b/src/resource/layout/endnote/EndNote.other.layout
old mode 100755
new mode 100644
index bd45e46..e05e141
--- a/src/resource/layout/endnote/EndNote.other.layout
+++ b/src/resource/layout/endnote/EndNote.other.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Generic
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E
-%B 
-%C
-%I \howpublished
-%V 
-%6
-%N 
-%P \format[FormatPagesForHTML]{\pages}
-%& 
-%Y 
-%S 
-%7
-%8 \month
-%9
-%? 
-%! \shorttitle
-%Z 
-%@ 
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 other
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Generic
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E
+%B 
+%C
+%I \howpublished
+%V 
+%6
+%N 
+%P \format[FormatPagesForHTML]{\pages}
+%& 
+%Y 
+%S 
+%7
+%8 \month
+%9
+%? 
+%! \shorttitle
+%Z 
+%@ 
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 other
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.phdthesis.layout b/src/resource/layout/endnote/EndNote.phdthesis.layout
old mode 100755
new mode 100644
index 3fe2498..f0ecd81
--- a/src/resource/layout/endnote/EndNote.phdthesis.layout
+++ b/src/resource/layout/endnote/EndNote.phdthesis.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Thesis
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E 
-%B 
-%C \address
-%I \school
-%V 
-%6
-%N 
-%P \format[FormatPagesForHTML]{\pages}
-%& 
-%Y 
-%S 
-%7
-%8 \month
-%9 \type
-%? 
-%! \shorttitle
-%Z 
-%@ 
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 phdthesis
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Thesis
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E 
+%B 
+%C \address
+%I \school
+%V 
+%6
+%N 
+%P \format[FormatPagesForHTML]{\pages}
+%& 
+%Y 
+%S 
+%7
+%8 \month
+%9 \type
+%? 
+%! \shorttitle
+%Z 
+%@ 
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 phdthesis
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.proceedings.layout b/src/resource/layout/endnote/EndNote.proceedings.layout
old mode 100755
new mode 100644
index 9133c41..6f22daf
--- a/src/resource/layout/endnote/EndNote.proceedings.layout
+++ b/src/resource/layout/endnote/EndNote.proceedings.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Conference Proceedings
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\editor}
-%B \booktitle
-%C \address
-%I \publisher
-%V \volume
-%6
-%N 
-%P \format[FormatPagesForHTML]{\pages}
-%& 
-%Y \organization
-%S \series
-%7
-%8 \month
-%9
-%? 
-%! \shorttitle
-%Z 
-%@ \isbn
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 proceedings
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Conference Proceedings
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\editor}
+%B \booktitle
+%C \address
+%I \publisher
+%V \volume
+%6
+%N 
+%P \format[FormatPagesForHTML]{\pages}
+%& 
+%Y \organization
+%S \series
+%7
+%8 \month
+%9
+%? 
+%! \shorttitle
+%Z 
+%@ \isbn
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 proceedings
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.techreport.layout b/src/resource/layout/endnote/EndNote.techreport.layout
old mode 100755
new mode 100644
index 4a78bcb..007ea89
--- a/src/resource/layout/endnote/EndNote.techreport.layout
+++ b/src/resource/layout/endnote/EndNote.techreport.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Report
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E 
-%B 
-%C \address
-%I \institution
-%V 
-%6
-%N 
-%P \format[FormatPagesForHTML]{\pages}
-%& 
-%Y 
-%S 
-%7
-%8 \month
-%9 \type
-%? 
-%! \shorttitle
-%Z 
-%@ \number
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 techreport
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Report
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E 
+%B 
+%C \address
+%I \institution
+%V 
+%6
+%N 
+%P \format[FormatPagesForHTML]{\pages}
+%& 
+%Y 
+%S 
+%7
+%8 \month
+%9 \type
+%? 
+%! \shorttitle
+%Z 
+%@ \number
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 techreport
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/EndNote.unpublished.layout b/src/resource/layout/endnote/EndNote.unpublished.layout
old mode 100755
new mode 100644
index 556fe11..eebd096
--- a/src/resource/layout/endnote/EndNote.unpublished.layout
+++ b/src/resource/layout/endnote/EndNote.unpublished.layout
@@ -1,44 +1,44 @@
-%0 \endnotereftype
-%0 Manuscript
-%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
-%D \year
-%T \format[RemoveLatexCommands]{\title}
-%E
-%B 
-%C
-%I
-%V 
-%6
-%N 
-%P \format[FormatPagesForHTML]{\pages}
-%& 
-%Y 
-%S 
-%7
-%8 \month
-%9
-%? 
-%! \shorttitle
-%Z 
-%@ 
-%(
-%)
-%*
-%L
-%M
-\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
-\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
-%2 \comment
-%3 unpublished
-%4 \crossref
-%# \owner
-%$ \key
-%F \bibtexkey
-%K \keywords
-%X \abstract
-%Z \note
-\format[WrapContent(%U ,)]{\url}
-\format[FileLink(url),WrapContent(%U ,)]{\file}
-%+
-%^
-
+%0 \endnotereftype
+%0 Manuscript
+%A \format[AuthorLastFirst,RemoveBracketsAddComma,AuthorAndsReplacer]{\author}
+%D \year
+%T \format[RemoveLatexCommands]{\title}
+%E
+%B 
+%C
+%I
+%V 
+%6
+%N 
+%P \format[FormatPagesForHTML]{\pages}
+%& 
+%Y 
+%S 
+%7
+%8 \month
+%9
+%? 
+%! \shorttitle
+%Z 
+%@ 
+%(
+%)
+%*
+%L
+%M
+\format[ResolvePDF,WrapContent(%1 ,)]{\pdf}
+\format[FileLink(pdf),WrapContent(%1 ,)]{\file}
+%2 \comment
+%3 unpublished
+%4 \crossref
+%# \owner
+%$ \key
+%F \bibtexkey
+%K \keywords
+%X \abstract
+%Z \note
+\format[WrapContent(%U ,)]{\url}
+\format[FileLink(url),WrapContent(%U ,)]{\file}
+%+
+%^
+
diff --git a/src/resource/layout/endnote/Readme.txt b/src/resource/layout/endnote/Readme.txt
old mode 100755
new mode 100644
index ce91dd8..735f90e
--- a/src/resource/layout/endnote/Readme.txt
+++ b/src/resource/layout/endnote/Readme.txt
@@ -1,70 +1,70 @@
-EndNote Export Filter for JabRef
-version 1.0
-2004-12-02
-
-Written by Alex Montgomery (ahm at stanford.edu)
-
-*********************************************************************************
-Overview:
-*********************************************************************************
-
-The EndNote Export Filter for JabRef (when combined with the "EndNote Import from JabRef.enf" filter for EndNote, derived from the "EndNote Import" filter) allows for most of the default JabRef fields to be imported into the appropriate EndNote fields. Two export styles from EndNote ("BibTeX Export to JabRef") are also included that support the same fields. Note that the default EndNote Reference Types must be modified by the user to support the import of certain fields.
-
-*********************************************************************************
-Installation:
-*********************************************************************************
-EndNote Import from JabRef.eni
-This file must be placed in your EndNote Filters directory. On a Mac OS X system, the default directory is /Applications/EndNote 7/Filters. On a Windows XP system, the default directory is C:\Program Files\EndNote\Filters. The default EndNote Import filter will be able to import the files from JabRef, but supports fewer fields. You should then open up the Filter Manager (Edit->Import Filters->Open Filter Manager) and add it to your Favorites.
-
-EndNote Preferences
-The filter provided will only work if certain fields are added to EndNote's default Reference Types. Open up Preferences and click on Reference Types, then Modify Reference Types. The following table lists the field names that must be added to certain reference types for EndNote to support these fields. For example, the Publisher field for Journal Article is blank by default; Type in Publisher in this field. 
-
-Tag	Generic Name 	New Field Name	Ref Types
-%I	Publisher	Publisher	(Journal Article)
-%& 	Section		Section 	(Book Section)
-%9 	Type of Work	Type of Work 	(Book Section)
-%8 	Date		Date 		(Book, Book Section, Thesis)
-%1 	Custom 1	pdf		(All)
-%2 	Custom 2	comment		(All)
-%3 	Custom 3	entrytype	(All)
-%4 	Custom 4	crossref	(All)
-%# 	Custom 5	owner		(All)
-%$ 	Custom 6	key		(All)
-(All = Journal Article, Book, Book Section, Conference Proceedings, Report, Thesis)
-
-EndNote.*.layout:
-These files must be kept together in a single directory.
-Start JabRef. In the "Options" menu you will find the button "Manage custom exports". The "Manage custom exports" interface will appear. Click the "Add new" button. You can choose a name for the export filter (e.g. "EndNote"). Specify the location of the main layout file (which is the file "EndNote.layout") by typing the full path or by using the "Browse" button. The file extension should be set to ".txt" Click "OK". Now you will find the new custom export filter in the "File" menu under [...]
-
-EndNote.tab:
-This is the tab-delimited spreadsheet containing a list of all the Refer codes, how they map to the Generic EndNote fields, and how the JabRef fields for the default BibTeX types are mapped to the Generic EndNote fields.
-
-BibTeX Export to JabRef, BibTeX Export to JabRef*
-These file are optional for if you wish to re-export these entries to JabRef. They must be placed in your EndNote Styles directory. On a Mac OS X system, the default directory is /Applications/EndNote 7/Styles. On a Windows XP system, the default directory is C:\Program Files\EndNote\Styles. You may then want to open up the Filter Manager (Edit->Output Styles->Open Style Manager) and add it to your Favorites.
-
-*********************************************************************************
-Usage
-*********************************************************************************
-To export the entries of your database select File->Custom Export->EndNote and type in the output filename.
-
-To import the entries into Endnote, open up a (or create a new) database. Select File->Import, then select "EndNote Import from JabRef." Click on Choose File, then select the output file you created in the previous step.
-
-To re-export to JabRef, two EndNote Styles are provided. Select a style (see "Notes" for the problems with each), then select File->Export. The exported text file is a BibTeX file ready to be read by JabRef.
-
-*********************************************************************************
-Notes:
-*********************************************************************************
-The export format implemented is the EndNote Import format, an extension of the Refer format.
-
-Only two JabRef fields are unsupported due to a lack of Custom fields in EndNote: doi and citeseerurl. Enterprising users should be able to modify the enclosed files in order to swap out two other fields (e.g. pdf and owner) instead. Note that EndNote 8 has additional fields that could be ideal for doi and citeseerurl (part of the reason why these are excluded here). In particular, Electronic Resource Number (DOI) and Link to PDF. The latter is actually a URL field, not a relative field  [...]
-
-This has been tested on Mac OS X 10.3.6 using JabRef 1.6 and EndNote 7. It should work on Windows XP using EndNote 7, or EndNote 8 on either platform.
-
-BibTeX Export to JabRef munges together some BibTeX types (e.g. misc/unpublished/other/manual -> misc). Use BibTeX Export to JabRef* instead if you need better mapping - but only if you are using field Custom 3 (entrytype) to store the BibTeX entrytypes. Note that this export filter ONLY currently covers the reference types that the EndNote Export Filter uses (i.e. Journal Article, Book, Book Section, Conference Proceedings, Report, Thesis).
-
-BibTeX Export to JabRef* is ONLY for use if you are re-exporting a file that was imported from JabRef. This is because it uses Custom 3 (entrytype) to store and output the entrytype rather than guessing from the EndNote reference type. If this field isn't filled in, it will export bad BibTeX code. You have been warned.
-
-Booklet, when exported back to JabRef using either BibTeX Export to JabRef,
-has \publisher filled instead of \howpublished; \lastchecked is not re-exported. This is due to the fact that EndNote doesn't have export filters sophisticated enough to fix this properly; however, the Book EndNote reference type is the only one appropriate for the "booklet" BibTeX type.
-
+EndNote Export Filter for JabRef
+version 1.0
+2004-12-02
+
+Written by Alex Montgomery (ahm at stanford.edu)
+
+*********************************************************************************
+Overview:
+*********************************************************************************
+
+The EndNote Export Filter for JabRef (when combined with the "EndNote Import from JabRef.enf" filter for EndNote, derived from the "EndNote Import" filter) allows for most of the default JabRef fields to be imported into the appropriate EndNote fields. Two export styles from EndNote ("BibTeX Export to JabRef") are also included that support the same fields. Note that the default EndNote Reference Types must be modified by the user to support the import of certain fields.
+
+*********************************************************************************
+Installation:
+*********************************************************************************
+EndNote Import from JabRef.eni
+This file must be placed in your EndNote Filters directory. On a Mac OS X system, the default directory is /Applications/EndNote 7/Filters. On a Windows XP system, the default directory is C:\Program Files\EndNote\Filters. The default EndNote Import filter will be able to import the files from JabRef, but supports fewer fields. You should then open up the Filter Manager (Edit->Import Filters->Open Filter Manager) and add it to your Favorites.
+
+EndNote Preferences
+The filter provided will only work if certain fields are added to EndNote's default Reference Types. Open up Preferences and click on Reference Types, then Modify Reference Types. The following table lists the field names that must be added to certain reference types for EndNote to support these fields. For example, the Publisher field for Journal Article is blank by default; Type in Publisher in this field. 
+
+Tag	Generic Name 	New Field Name	Ref Types
+%I	Publisher	Publisher	(Journal Article)
+%& 	Section		Section 	(Book Section)
+%9 	Type of Work	Type of Work 	(Book Section)
+%8 	Date		Date 		(Book, Book Section, Thesis)
+%1 	Custom 1	pdf		(All)
+%2 	Custom 2	comment		(All)
+%3 	Custom 3	entrytype	(All)
+%4 	Custom 4	crossref	(All)
+%# 	Custom 5	owner		(All)
+%$ 	Custom 6	key		(All)
+(All = Journal Article, Book, Book Section, Conference Proceedings, Report, Thesis)
+
+EndNote.*.layout:
+These files must be kept together in a single directory.
+Start JabRef. In the "Options" menu you will find the button "Manage custom exports". The "Manage custom exports" interface will appear. Click the "Add new" button. You can choose a name for the export filter (e.g. "EndNote"). Specify the location of the main layout file (which is the file "EndNote.layout") by typing the full path or by using the "Browse" button. The file extension should be set to ".txt" Click "OK". Now you will find the new custom export filter in the "File" menu under [...]
+
+EndNote.tab:
+This is the tab-delimited spreadsheet containing a list of all the Refer codes, how they map to the Generic EndNote fields, and how the JabRef fields for the default BibTeX types are mapped to the Generic EndNote fields.
+
+BibTeX Export to JabRef, BibTeX Export to JabRef*
+These file are optional for if you wish to re-export these entries to JabRef. They must be placed in your EndNote Styles directory. On a Mac OS X system, the default directory is /Applications/EndNote 7/Styles. On a Windows XP system, the default directory is C:\Program Files\EndNote\Styles. You may then want to open up the Filter Manager (Edit->Output Styles->Open Style Manager) and add it to your Favorites.
+
+*********************************************************************************
+Usage
+*********************************************************************************
+To export the entries of your database select File->Custom Export->EndNote and type in the output filename.
+
+To import the entries into Endnote, open up a (or create a new) database. Select File->Import, then select "EndNote Import from JabRef." Click on Choose File, then select the output file you created in the previous step.
+
+To re-export to JabRef, two EndNote Styles are provided. Select a style (see "Notes" for the problems with each), then select File->Export. The exported text file is a BibTeX file ready to be read by JabRef.
+
+*********************************************************************************
+Notes:
+*********************************************************************************
+The export format implemented is the EndNote Import format, an extension of the Refer format.
+
+Only two JabRef fields are unsupported due to a lack of Custom fields in EndNote: doi and citeseerurl. Enterprising users should be able to modify the enclosed files in order to swap out two other fields (e.g. pdf and owner) instead. Note that EndNote 8 has additional fields that could be ideal for doi and citeseerurl (part of the reason why these are excluded here). In particular, Electronic Resource Number (DOI) and Link to PDF. The latter is actually a URL field, not a relative field  [...]
+
+This has been tested on Mac OS X 10.3.6 using JabRef 1.6 and EndNote 7. It should work on Windows XP using EndNote 7, or EndNote 8 on either platform.
+
+BibTeX Export to JabRef munges together some BibTeX types (e.g. misc/unpublished/other/manual -> misc). Use BibTeX Export to JabRef* instead if you need better mapping - but only if you are using field Custom 3 (entrytype) to store the BibTeX entrytypes. Note that this export filter ONLY currently covers the reference types that the EndNote Export Filter uses (i.e. Journal Article, Book, Book Section, Conference Proceedings, Report, Thesis).
+
+BibTeX Export to JabRef* is ONLY for use if you are re-exporting a file that was imported from JabRef. This is because it uses Custom 3 (entrytype) to store and output the entrytype rather than guessing from the EndNote reference type. If this field isn't filled in, it will export bad BibTeX code. You have been warned.
+
+Booklet, when exported back to JabRef using either BibTeX Export to JabRef,
+has \publisher filled instead of \howpublished; \lastchecked is not re-exported. This is due to the fact that EndNote doesn't have export filters sophisticated enough to fix this properly; however, the Book EndNote reference type is the only one appropriate for the "booklet" BibTeX type.
+
 Corporate Authors (e.g. {Central Intelligence Agency} should be mapped to "Central Intelligence Agency," in EndNote, but aren't (this would require a new formatter in JabRef).
\ No newline at end of file
diff --git a/src/resource/layout/harvard/harvard.article.layout b/src/resource/layout/harvard/harvard.article.layout
index 16ba02f..4377087 100644
--- a/src/resource/layout/harvard/harvard.article.layout
+++ b/src/resource/layout/harvard/harvard.article.layout
@@ -1,13 +1,13 @@
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
-'\format[RTFChars]{\title}', }{\\i \format[RTFChars]{\journal}}{
-\begin{volume}
- }{\\b \volume}{
-\end{volume}
-\begin{number}
-(\number)
-\end{number}
-\begin{pages}
-, \pages
-\end{pages}.
-\\par
-\\par
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
+'\format[RTFChars]{\title}', }{\\i \format[RTFChars]{\journal}}{
+\begin{volume}
+ }{\\b \volume}{
+\end{volume}
+\begin{number}
+(\number)
+\end{number}
+\begin{pages}
+, \pages
+\end{pages}.
+\\par
+\\par
diff --git a/src/resource/layout/harvard/harvard.begin.layout b/src/resource/layout/harvard/harvard.begin.layout
index 92c728c..c28880f 100644
--- a/src/resource/layout/harvard/harvard.begin.layout
+++ b/src/resource/layout/harvard/harvard.begin.layout
@@ -1,3 +1,3 @@
-{\\rtf1\\ansi\\ansicpg1251\\uc1\\deff0\\stshfdbch0\\stshfloch0\\stshfhich0\\stshfbi0\\deflang1049\\deflangfe1049{\\fonttbl{\\f0\\froman\\fcharset204\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\f39\\froman\\fcharset0\\fprq2 Times New Roman;}
-{\\f37\\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\f40\\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\f41\\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\f42\\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}
-{\\f43\\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}{\\f44\\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\f45\\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}}{
+{\\rtf1\\ansi\\ansicpg1251\\uc1\\deff0\\stshfdbch0\\stshfloch0\\stshfhich0\\stshfbi0\\deflang1049\\deflangfe1049{\\fonttbl{\\f0\\froman\\fcharset204\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\f39\\froman\\fcharset0\\fprq2 Times New Roman;}
+{\\f37\\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\f40\\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\f41\\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\f42\\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}
+{\\f43\\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}{\\f44\\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\f45\\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}}{
diff --git a/src/resource/layout/harvard/harvard.book.layout b/src/resource/layout/harvard/harvard.book.layout
index 78748e9..22be5e4 100644
--- a/src/resource/layout/harvard/harvard.book.layout
+++ b/src/resource/layout/harvard/harvard.book.layout
@@ -1,18 +1,18 @@
-\begin{author}
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
-\end{author}
-\begin{editor}
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed. \end{editor}
- (\year), 
-}{\\i \format[RTFChars]{\title}}{
-\begin{volume}
-, Vol. \volume
-\end{volume}
-\begin{publisher}
-, \format[RTFChars]{\publisher}
-\end{publisher}
-\begin{address}
-, \format[RTFChars]{\address}
-\end{address}.
-\\par
-\\par
+\begin{author}
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
+\end{author}
+\begin{editor}
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed. \end{editor}
+ (\year), 
+}{\\i \format[RTFChars]{\title}}{
+\begin{volume}
+, Vol. \volume
+\end{volume}
+\begin{publisher}
+, \format[RTFChars]{\publisher}
+\end{publisher}
+\begin{address}
+, \format[RTFChars]{\address}
+\end{address}.
+\\par
+\\par
diff --git a/src/resource/layout/harvard/harvard.inbook.layout b/src/resource/layout/harvard/harvard.inbook.layout
index 5a6c549..fdfeef4 100644
--- a/src/resource/layout/harvard/harvard.inbook.layout
+++ b/src/resource/layout/harvard/harvard.inbook.layout
@@ -1,21 +1,21 @@
-\begin{author}
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
-\end{author}
-\begin{editor}
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed., \end{editor}
- (\year), 
-}{\\i \format[RTFChars]{\title}}{
-\begin{publisher}
-, \format[RTFChars]{\publisher}
-\end{publisher}
-\begin{address}
-, \format[RTFChars]{\address}
-\end{address}
-\begin{chapter}
-, chapter \chapter
-\end{chapter}
-\begin{pages}
-, pp. \pages
-\end{pages}.
-\\par
-\\par
+\begin{author}
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
+\end{author}
+\begin{editor}
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed., \end{editor}
+ (\year), 
+}{\\i \format[RTFChars]{\title}}{
+\begin{publisher}
+, \format[RTFChars]{\publisher}
+\end{publisher}
+\begin{address}
+, \format[RTFChars]{\address}
+\end{address}
+\begin{chapter}
+, chapter \chapter
+\end{chapter}
+\begin{pages}
+, pp. \pages
+\end{pages}.
+\\par
+\\par
diff --git a/src/resource/layout/harvard/harvard.incollection.layout b/src/resource/layout/harvard/harvard.incollection.layout
index 239241d..8a09012 100644
--- a/src/resource/layout/harvard/harvard.incollection.layout
+++ b/src/resource/layout/harvard/harvard.incollection.layout
@@ -1,15 +1,15 @@
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
-}{\format[RTFChars]{\title}}{
-\begin{editor}
-, }{\\i in }{\format[RTFChars,AuthorFirstFirst,AuthorAndsReplacer]{\editor}, ed., \end{editor}
-\begin{booktitle}
-'\format[RTFChars]{\booktitle}'
-\end{booktitle}
-\begin{publisher}
-, \format[RTFChars]{\publisher}, \format[RTFChars]{\address}
-\end{publisher}
-\begin{pages}
-, pp. \pages
-\end{pages}.
-\\par
-\\par
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
+}{\format[RTFChars]{\title}}{
+\begin{editor}
+, }{\\i in }{\format[RTFChars,AuthorFirstFirst,AuthorAndsReplacer]{\editor}, ed., \end{editor}
+\begin{booktitle}
+'\format[RTFChars]{\booktitle}'
+\end{booktitle}
+\begin{publisher}
+, \format[RTFChars]{\publisher}, \format[RTFChars]{\address}
+\end{publisher}
+\begin{pages}
+, pp. \pages
+\end{pages}.
+\\par
+\\par
diff --git a/src/resource/layout/harvard/harvard.inproceedings.layout b/src/resource/layout/harvard/harvard.inproceedings.layout
index d76fcf0..f1cacee 100644
--- a/src/resource/layout/harvard/harvard.inproceedings.layout
+++ b/src/resource/layout/harvard/harvard.inproceedings.layout
@@ -1,16 +1,16 @@
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
-\format[RTFChars]{\title}
-, }{\\i in }{
-\begin{editor}
-\format[RTFChars,AuthorFirstFirst,AuthorAndsReplacer]{\editor}, ed., \end{editor}
-\begin{booktitle}
-'\format[RTFChars]{\booktitle}'
-\end{booktitle}
-\begin{publisher}
-, \format[RTFChars]{\publisher}, \format[RTFChars]{\address}
-\end{publisher}
-\begin{pages}
-, pp. \pages
-\end{pages}.
-\\par
-\\par
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
+\format[RTFChars]{\title}
+, }{\\i in }{
+\begin{editor}
+\format[RTFChars,AuthorFirstFirst,AuthorAndsReplacer]{\editor}, ed., \end{editor}
+\begin{booktitle}
+'\format[RTFChars]{\booktitle}'
+\end{booktitle}
+\begin{publisher}
+, \format[RTFChars]{\publisher}, \format[RTFChars]{\address}
+\end{publisher}
+\begin{pages}
+, pp. \pages
+\end{pages}.
+\\par
+\\par
diff --git a/src/resource/layout/harvard/harvard.layout b/src/resource/layout/harvard/harvard.layout
index 8362549..1c480ab 100644
--- a/src/resource/layout/harvard/harvard.layout
+++ b/src/resource/layout/harvard/harvard.layout
@@ -1,36 +1,36 @@
-\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,RTFChars]{\author} (\year), 
-'\format[RTFChars]{\title}'
-\begin{journal}
-, }{\\i \format[RTFChars]{\journal}} {\\b \volume}{
-\end{journal}
-\begin{number}
-(\number)
-\end{number}
-\begin{editor}
-, }{\\i in }{\format[AuthorFirstFirst,AuthorAndsReplacer,RTFChars]{\editor}, ed., \end{editor}
-\begin{booktitle}
-'\format[RTFChars]{\booktitle}'
-\end{booktitle}
-\begin{organization}
-, \format[RTFChars]{\organization}
-\end{organization}
-\begin{institution}
-, Technical report, \format[RTFChars]{\institution}
-\end{institution}
-\begin{publisher}
-, \format[RTFChars]{\publisher}
-\end{publisher}
-\begin{howpublished}
-, \format[RTFChars]{\howpublished}
-\end{howpublished}
-\begin{address}
-, \format[RTFChars]{\address}
-\end{address}
-\begin{note}
-, \format[RTFChars]{\note}
-\end{note}
-\begin{pages}
-, \pages
-\end{pages}.
-\\par
-\\par
+\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,RTFChars]{\author} (\year), 
+'\format[RTFChars]{\title}'
+\begin{journal}
+, }{\\i \format[RTFChars]{\journal}} {\\b \volume}{
+\end{journal}
+\begin{number}
+(\number)
+\end{number}
+\begin{editor}
+, }{\\i in }{\format[AuthorFirstFirst,AuthorAndsReplacer,RTFChars]{\editor}, ed., \end{editor}
+\begin{booktitle}
+'\format[RTFChars]{\booktitle}'
+\end{booktitle}
+\begin{organization}
+, \format[RTFChars]{\organization}
+\end{organization}
+\begin{institution}
+, Technical report, \format[RTFChars]{\institution}
+\end{institution}
+\begin{publisher}
+, \format[RTFChars]{\publisher}
+\end{publisher}
+\begin{howpublished}
+, \format[RTFChars]{\howpublished}
+\end{howpublished}
+\begin{address}
+, \format[RTFChars]{\address}
+\end{address}
+\begin{note}
+, \format[RTFChars]{\note}
+\end{note}
+\begin{pages}
+, \pages
+\end{pages}.
+\\par
+\\par
diff --git a/src/resource/layout/harvard/harvard.mastersthesis.layout b/src/resource/layout/harvard/harvard.mastersthesis.layout
index c0fc134..66e153b 100644
--- a/src/resource/layout/harvard/harvard.mastersthesis.layout
+++ b/src/resource/layout/harvard/harvard.mastersthesis.layout
@@ -1,7 +1,7 @@
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
-'\format[RTFChars]{\title}'
-\begin{school}
-, Master's thesis, \format[RTFChars]{\school}
-\end{school}.
-\\par
-\\par
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
+'\format[RTFChars]{\title}'
+\begin{school}
+, Master's thesis, \format[RTFChars]{\school}
+\end{school}.
+\\par
+\\par
diff --git a/src/resource/layout/harvard/harvard.phdthesis.layout b/src/resource/layout/harvard/harvard.phdthesis.layout
index d45be87..426e16b 100644
--- a/src/resource/layout/harvard/harvard.phdthesis.layout
+++ b/src/resource/layout/harvard/harvard.phdthesis.layout
@@ -1,7 +1,7 @@
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
-'\format[RTFChars]{\title}'
-\begin{school}
-, PhD thesis, \format[RTFChars]{\school}
-\end{school}.
-\\par
-\\par
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year), 
+'\format[RTFChars]{\title}'
+\begin{school}
+, PhD thesis, \format[RTFChars]{\school}
+\end{school}.
+\\par
+\\par
diff --git a/src/resource/layout/harvard/harvard.proceedings.layout b/src/resource/layout/harvard/harvard.proceedings.layout
index 34768d3..a7c4dd3 100644
--- a/src/resource/layout/harvard/harvard.proceedings.layout
+++ b/src/resource/layout/harvard/harvard.proceedings.layout
@@ -1,18 +1,18 @@
-\begin{author}
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
-\end{author}
-\begin{editor}
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed., \end{editor}
- (\year), 
-}{\\i \format[RTFChars]{\title}}{
-\begin{volume}
-, Vol. \volume
-\end{volume}
-\begin{publisher}
-, \format[RTFChars]{\publisher}
-\end{publisher}
-\begin{address}
-, \format[RTFChars]{\address}
-\end{address}.
-\\par
-\\par
+\begin{author}
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
+\end{author}
+\begin{editor}
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed., \end{editor}
+ (\year), 
+}{\\i \format[RTFChars]{\title}}{
+\begin{volume}
+, Vol. \volume
+\end{volume}
+\begin{publisher}
+, \format[RTFChars]{\publisher}
+\end{publisher}
+\begin{address}
+, \format[RTFChars]{\address}
+\end{address}.
+\\par
+\\par
diff --git a/src/resource/layout/harvard/harvard.readme b/src/resource/layout/harvard/harvard.readme
index 1b4ea74..660afe7 100644
--- a/src/resource/layout/harvard/harvard.readme
+++ b/src/resource/layout/harvard/harvard.readme
@@ -1,55 +1,55 @@
-************************************************
-
-*******                                 ********
-*******  Readme: Harvard Export Filter  ********
-*******                                 ******** 
-*******           for JabRef            ********
-*******                                 ********
-*******           version 1.0           ********
-*******            04/12/01             ********
-*******                                 ******** 
-************************************************
-
-
-written by gottfried (vosgerau at uni-tuebingen.de)
-
-
-
-The harvard export filter allows you to export your biliography entries into an Rich Text Format file (*.rtf) according to the Harvard citation standards often used in arts and humanities. The Rich Text Format file can be opened with word processing programms like Word, Open Office, Star Writer, etc. on all systems and then be copied directly into the other files.
-
-
-Installation
-************
-
-The following 11 files are needed for the harvard export filter:
-	harvard.article.layout
-	harvard.begin.layout
-	harvard.book.layout
-	harvard.end.layout
-	harvard.inbook.layout
-	harvard.incollection.layout
-	harvard.inproceedings.layout
-	harvard.layout
-	harvard.mastersthesis.layout
-	harvard.phdthesis.layout
-	harvard.proceedings.layout
-
-Put all of these 11 files in one directory. Note that all have to be in the same directory.
-
-Start JabRef. In the "Options" menu you will find the button "Manage costum exports". The "Manage costum exports" interface will appear. Click the "Add new" button. You can choose a name for the export filter (e.g. "Harvard"). Specify the location of the main layout file (which is the file "harvard.layout") by typing the full path or by using the "Browse" button. The file extension should be set to ".rtf". Click "OK".
-
-Now you will find the new costum export filter in the "File" menu under the pop-up menu "Custom export". To export the entries of your database just click on the name of the new filter and specify the output file.
-
-
-Important Notes
-***************
-
-Although we tried to make the filter as good as possible, please note that formatting command like \emph or \textbf are ignored. 
-
-The use of special characters such as \"a or \`a may lead to strange results. Therefore, if you use special characters check the output and use the find and replace command to correct the output.
-
-The ordering of the entries may not match the usual alphabetic order in some cases. Please check your file before usage.
-
-
-**************************
-end of file harvard.readme
+************************************************
+
+*******                                 ********
+*******  Readme: Harvard Export Filter  ********
+*******                                 ******** 
+*******           for JabRef            ********
+*******                                 ********
+*******           version 1.0           ********
+*******            04/12/01             ********
+*******                                 ******** 
+************************************************
+
+
+written by gottfried (vosgerau at uni-tuebingen.de)
+
+
+
+The harvard export filter allows you to export your biliography entries into an Rich Text Format file (*.rtf) according to the Harvard citation standards often used in arts and humanities. The Rich Text Format file can be opened with word processing programms like Word, Open Office, Star Writer, etc. on all systems and then be copied directly into the other files.
+
+
+Installation
+************
+
+The following 11 files are needed for the harvard export filter:
+	harvard.article.layout
+	harvard.begin.layout
+	harvard.book.layout
+	harvard.end.layout
+	harvard.inbook.layout
+	harvard.incollection.layout
+	harvard.inproceedings.layout
+	harvard.layout
+	harvard.mastersthesis.layout
+	harvard.phdthesis.layout
+	harvard.proceedings.layout
+
+Put all of these 11 files in one directory. Note that all have to be in the same directory.
+
+Start JabRef. In the "Options" menu you will find the button "Manage costum exports". The "Manage costum exports" interface will appear. Click the "Add new" button. You can choose a name for the export filter (e.g. "Harvard"). Specify the location of the main layout file (which is the file "harvard.layout") by typing the full path or by using the "Browse" button. The file extension should be set to ".rtf". Click "OK".
+
+Now you will find the new costum export filter in the "File" menu under the pop-up menu "Custom export". To export the entries of your database just click on the name of the new filter and specify the output file.
+
+
+Important Notes
+***************
+
+Although we tried to make the filter as good as possible, please note that formatting command like \emph or \textbf are ignored. 
+
+The use of special characters such as \"a or \`a may lead to strange results. Therefore, if you use special characters check the output and use the find and replace command to correct the output.
+
+The ordering of the entries may not match the usual alphabetic order in some cases. Please check your file before usage.
+
+
+**************************
+end of file harvard.readme
diff --git a/src/resource/layout/html.begin.layout b/src/resource/layout/html.begin.layout
index bc9fee5..cc9a553 100644
--- a/src/resource/layout/html.begin.layout
+++ b/src/resource/layout/html.begin.layout
@@ -1,64 +1,64 @@
-<!-- jabref.sf.net generated HTML layout  -->
-<!-- 2006-01-17 wegner added PMID linkout -->
-<html>
-<header>
-	<title>JabRef Output</title>
-	<style type="text/css">
-body {
-    font-family:Georgia, Garamond, Serif;
-    background-color:#ddd;
-}
-
-.bibtex_entry {
-    border:2px solid black;
-    margin:1em;
-}
-
-.bibtex_header {
-    border-bottom:solid gray 2px;
-}
-.bibtex_key {
-    font-size:small;
-    color:#555;
-    display:inline;
-	font-weight:bold;
-}
-
-.bibtex_content {
-    padding-bottom:1em;
-}
-
-.bibtex_author {
-    font-weight:bold;
-    padding-bottom:1em;
-}
-
-.bibtex_title {
-    font-weight:bold;
-    padding-bottom:1em;
-}
-
-.bibtex_url, .bibtex_pmid, .bibtex_doi, .bibtex_citeseer {
-    display:inline;
-	font-size:small;
-	float:right;
-	padding-left:1em;
-	padding-right:1em;
-}
-
-.bibtex_url a, .bibtex_pdf a, .bibtex_pmid a,.bibtex_pmid a:visited, .bibtex_doi a, .bibtex_pdf a:visited, .bibtex_citeseer a , .bibtex_url a:visited, .bibtex_doi a:visited, .bibtex_citeseer a:visited {
-	text-decoration:none;
-	font-weight:bold;
-	color:darkblue;
-
-}
-
-.bibtex_journal, .bibtex_year, .bibtex_volume, .bibtex_pages, .bibtex_publisher {
-    display:inline;
-}
-	</style>
-</header>
-<body>
-
-
+<!-- jabref.sf.net generated HTML layout  -->
+<!-- 2006-01-17 wegner added PMID linkout -->
+<html>
+<header>
+	<title>JabRef Output</title>
+	<style type="text/css">
+body {
+    font-family:Georgia, Garamond, Serif;
+    background-color:#ddd;
+}
+
+.bibtex_entry {
+    border:2px solid black;
+    margin:1em;
+}
+
+.bibtex_header {
+    border-bottom:solid gray 2px;
+}
+.bibtex_key {
+    font-size:small;
+    color:#555;
+    display:inline;
+	font-weight:bold;
+}
+
+.bibtex_content {
+    padding-bottom:1em;
+}
+
+.bibtex_author {
+    font-weight:bold;
+    padding-bottom:1em;
+}
+
+.bibtex_title {
+    font-weight:bold;
+    padding-bottom:1em;
+}
+
+.bibtex_url, .bibtex_pmid, .bibtex_doi, .bibtex_citeseer {
+    display:inline;
+	font-size:small;
+	float:right;
+	padding-left:1em;
+	padding-right:1em;
+}
+
+.bibtex_url a, .bibtex_pdf a, .bibtex_pmid a,.bibtex_pmid a:visited, .bibtex_doi a, .bibtex_pdf a:visited, .bibtex_citeseer a , .bibtex_url a:visited, .bibtex_doi a:visited, .bibtex_citeseer a:visited {
+	text-decoration:none;
+	font-weight:bold;
+	color:darkblue;
+
+}
+
+.bibtex_journal, .bibtex_year, .bibtex_volume, .bibtex_pages, .bibtex_publisher {
+    display:inline;
+}
+	</style>
+</header>
+<body>
+
+
 <hr>
\ No newline at end of file
diff --git a/src/resource/layout/html.book.layout b/src/resource/layout/html.book.layout
old mode 100755
new mode 100644
index 4a848d2..22d5c33
--- a/src/resource/layout/html.book.layout
+++ b/src/resource/layout/html.book.layout
@@ -1,57 +1,57 @@
-<div class="bibtex_entry">
-
-	<div class="bibtex_header">
-		<div class="bibtex_key">
-			<a name="\bibtexkey">\bibtexkey</a>
-		</div>
-
-        \begin{file}
-		<div class="bibtex_pdf">
-			\format[FileLink(pdf),WrapContent(<a href=",">pdf</a>)]{\file}
-		</div>
-		\end{file}
-
-		\begin{pdf}
-		<div class="bibtex_pdf">
-			<a href="\format[ResolvePDF]{\pdf}">pdf</a>
-		</div>
-		\end{pdf}
-
-		\begin{url}
-		<div class="bibtex_url">
-			<a href="\url">url</a>
-		</div>
-		\end{url}
-	</div>
-
-	<div class="bibtex_content">
-
-		\begin{title}
-		<div class="bibtex_title">
-			\format[HTMLChars,RemoveLatexCommands]{\title}
-		</div>
- 		\end{title}
-
-		\begin{author}
-		<div class="bibtex_author">
-			\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,HTMLChars]{\author}
-		</div>
-		\end{author}
-
-		\begin{publisher}
-		<div class="bibtex_publisher">
-			\format[HTMLChars]{\publisher}
-		</div>,
-		\end{publisher}
-
-		\begin{pages}
-		<div class="bibtex_pages">
-			pp. \format[FormatPagesForHTML]{\pages}
-		</div>,
-		\end{pages}
-
-		<div class="bibtex_year">
-			\year
-		</div>
-	</div>
-</div>
+<div class="bibtex_entry">
+
+	<div class="bibtex_header">
+		<div class="bibtex_key">
+			<a name="\bibtexkey">\bibtexkey</a>
+		</div>
+
+        \begin{file}
+		<div class="bibtex_pdf">
+			\format[FileLink(pdf),WrapContent(<a href=",">pdf</a>)]{\file}
+		</div>
+		\end{file}
+
+		\begin{pdf}
+		<div class="bibtex_pdf">
+			<a href="\format[ResolvePDF]{\pdf}">pdf</a>
+		</div>
+		\end{pdf}
+
+		\begin{url}
+		<div class="bibtex_url">
+			<a href="\url">url</a>
+		</div>
+		\end{url}
+	</div>
+
+	<div class="bibtex_content">
+
+		\begin{title}
+		<div class="bibtex_title">
+			\format[HTMLChars,RemoveLatexCommands]{\title}
+		</div>
+ 		\end{title}
+
+		\begin{author}
+		<div class="bibtex_author">
+			\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,HTMLChars]{\author}
+		</div>
+		\end{author}
+
+		\begin{publisher}
+		<div class="bibtex_publisher">
+			\format[HTMLChars]{\publisher}
+		</div>,
+		\end{publisher}
+
+		\begin{pages}
+		<div class="bibtex_pages">
+			pp. \format[FormatPagesForHTML]{\pages}
+		</div>,
+		\end{pages}
+
+		<div class="bibtex_year">
+			\year
+		</div>
+	</div>
+</div>
diff --git a/src/resource/layout/html.end.layout b/src/resource/layout/html.end.layout
index 0947425..42828b5 100644
--- a/src/resource/layout/html.end.layout
+++ b/src/resource/layout/html.end.layout
@@ -1,6 +1,6 @@
-
-<hr>
-<p style="font-size: smaller;">Generated on \format[CurrentDate]{}</p>
-
-</body>
-</html>
+
+<hr>
+<p style="font-size: smaller;">Generated on \format[CurrentDate]{}</p>
+
+</body>
+</html>
diff --git a/src/resource/layout/html.inbook.layout b/src/resource/layout/html.inbook.layout
index 6eee6c4..8b45f0e 100644
--- a/src/resource/layout/html.inbook.layout
+++ b/src/resource/layout/html.inbook.layout
@@ -1,75 +1,75 @@
-<div class="bibtex_entry">
-
-	<div class="bibtex_header">
-		<div class="bibtex_key">
-			<a name="\bibtexkey">\bibtexkey</a>
-		</div>
-
-		\begin{doi}
-		<div class="bibtex_doi">
-			<a href="http://dx.doi.org/\doi">doi</a>
-		</div>
-		\end{doi}
-
-		\begin{pmid}
-		<div class="bibtex_pmid">
-			<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&query_hl=1&itool=pubmed_docsum&list_uids=\pmid">pmid</a>
-		</div>
-		\end{pmid}
-
-        \begin{file}
-		<div class="bibtex_pdf">
-			\format[FileLink(pdf),WrapContent(<a href=",">pdf</a>)]{\file}
-		</div>
-		\end{file}
-
-		\begin{pdf}
-		<div class="bibtex_pdf">
-			<a href="\format[ResolvePDF]{\pdf}">pdf</a>
-		</div>
-		\end{pdf}
-
-		\begin{url}
-		<div class="bibtex_url">
-			<a href="\url">url</a>
-		</div>
-		\end{url}
-	</div>
-
-	<div class="bibtex_content">
-
-		\begin{title}
-		<div class="bibtex_title">
-			In: \format[HTMLChars,RemoveLatexCommands]{\title}
-		</div>
-		\end{title}
-
-		\begin{author}
-		<div class="bibtex_author">
-			\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,HTMLChars]{\author}
-		</div>
-		\end{author}
-
-		\begin{publisher}
-		<div class="bibtex_journal">
-			\format[HTMLChars]{\publisher}
-		</div>,
-		\end{publisher}
-
-		\begin{volume}
-		<div class="bibtex_volume">
-			Vol. \volume
-		</div>,
-		\end{volume}
-
-		\begin{pages}
-		<div class="bibtex_pages">
-			pp. \format[FormatPagesForHTML]{\pages}
-		</div>,
-		\end{pages}
-
-		<div class="bibtex_year">
-			\year
-		</div>
-	</div>
-</div>
+<div class="bibtex_entry">
+
+	<div class="bibtex_header">
+		<div class="bibtex_key">
+			<a name="\bibtexkey">\bibtexkey</a>
+		</div>
+
+		\begin{doi}
+		<div class="bibtex_doi">
+			<a href="http://dx.doi.org/\doi">doi</a>
+		</div>
+		\end{doi}
+
+		\begin{pmid}
+		<div class="bibtex_pmid">
+			<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&query_hl=1&itool=pubmed_docsum&list_uids=\pmid">pmid</a>
+		</div>
+		\end{pmid}
+
+        \begin{file}
+		<div class="bibtex_pdf">
+			\format[FileLink(pdf),WrapContent(<a href=",">pdf</a>)]{\file}
+		</div>
+		\end{file}
+
+		\begin{pdf}
+		<div class="bibtex_pdf">
+			<a href="\format[ResolvePDF]{\pdf}">pdf</a>
+		</div>
+		\end{pdf}
+
+		\begin{url}
+		<div class="bibtex_url">
+			<a href="\url">url</a>
+		</div>
+		\end{url}
+	</div>
+
+	<div class="bibtex_content">
+
+		\begin{title}
+		<div class="bibtex_title">
+			In: \format[HTMLChars,RemoveLatexCommands]{\title}
+		</div>
+		\end{title}
+
+		\begin{author}
+		<div class="bibtex_author">
+			\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,HTMLChars]{\author}
+		</div>
+		\end{author}
+
+		\begin{publisher}
+		<div class="bibtex_journal">
+			\format[HTMLChars]{\publisher}
+		</div>,
+		\end{publisher}
+
+		\begin{volume}
+		<div class="bibtex_volume">
+			Vol. \volume
+		</div>,
+		\end{volume}
+
+		\begin{pages}
+		<div class="bibtex_pages">
+			pp. \format[FormatPagesForHTML]{\pages}
+		</div>,
+		\end{pages}
+
+		<div class="bibtex_year">
+			\year
+		</div>
+	</div>
+</div>
diff --git a/src/resource/layout/html.inproceedings.layout b/src/resource/layout/html.inproceedings.layout
index 87c74af..19fbaef 100644
--- a/src/resource/layout/html.inproceedings.layout
+++ b/src/resource/layout/html.inproceedings.layout
@@ -1,75 +1,75 @@
-<div class="bibtex_entry">
-
-	<div class="bibtex_header">
-		<div class="bibtex_key">
-			<a name="\bibtexkey">\bibtexkey</a>
-		</div>
-
-		\begin{doi}
-		<div class="bibtex_doi">
-			<a href="http://dx.doi.org/\doi">doi</a>
-		</div>
-		\end{doi}
-
-		\begin{pmid}
-		<div class="bibtex_pmid">
-			<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&query_hl=1&itool=pubmed_docsum&list_uids=\pmid">pmid</a>
-		</div>
-		\end{pmid}
-
-		\begin{file}
-		<div class="bibtex_pdf">
-			\format[FileLink(pdf),WrapContent(<a href=",">pdf</a>)]{\file}
-		</div>
-		\end{file}
-
-		\begin{pdf}
-		<div class="bibtex_pdf">
-			<a href="\format[ResolvePDF]{\pdf}">pdf</a>
-		</div>
-		\end{pdf}
-
-		\begin{url}
-		<div class="bibtex_url">
-			<a href="\url">url</a>
-		</div>
-		\end{url}
-	</div>
-
-	<div class="bibtex_content">
-
-		\begin{title}
-		<div class="bibtex_title">
-			\format[HTMLChars,RemoveLatexCommands]{\title}
-		</div>
-		\end{title}
-
-		\begin{author}
-		<div class="bibtex_author">
-			\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,HTMLChars]{\author}
-		</div>
-		\end{author}
-
-		\begin{booktitle}
-		<div class="bibtex_journal">
-			\format[HTMLChars]{\booktitle}
-		</div>,
-		\end{booktitle}
-
-		\begin{volume}
-		<div class="bibtex_volume">
-			Vol. \volume
-		</div>,
-		\end{volume}
-
-		\begin{pages}
-		<div class="bibtex_pages">
-			pp. \format[FormatPagesForHTML]{\pages}
-		</div>,
-		\end{pages}
-
-		<div class="bibtex_year">
-			\year
-		</div>
-	</div>
-</div>
+<div class="bibtex_entry">
+
+	<div class="bibtex_header">
+		<div class="bibtex_key">
+			<a name="\bibtexkey">\bibtexkey</a>
+		</div>
+
+		\begin{doi}
+		<div class="bibtex_doi">
+			<a href="http://dx.doi.org/\doi">doi</a>
+		</div>
+		\end{doi}
+
+		\begin{pmid}
+		<div class="bibtex_pmid">
+			<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&query_hl=1&itool=pubmed_docsum&list_uids=\pmid">pmid</a>
+		</div>
+		\end{pmid}
+
+		\begin{file}
+		<div class="bibtex_pdf">
+			\format[FileLink(pdf),WrapContent(<a href=",">pdf</a>)]{\file}
+		</div>
+		\end{file}
+
+		\begin{pdf}
+		<div class="bibtex_pdf">
+			<a href="\format[ResolvePDF]{\pdf}">pdf</a>
+		</div>
+		\end{pdf}
+
+		\begin{url}
+		<div class="bibtex_url">
+			<a href="\url">url</a>
+		</div>
+		\end{url}
+	</div>
+
+	<div class="bibtex_content">
+
+		\begin{title}
+		<div class="bibtex_title">
+			\format[HTMLChars,RemoveLatexCommands]{\title}
+		</div>
+		\end{title}
+
+		\begin{author}
+		<div class="bibtex_author">
+			\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,HTMLChars]{\author}
+		</div>
+		\end{author}
+
+		\begin{booktitle}
+		<div class="bibtex_journal">
+			\format[HTMLChars]{\booktitle}
+		</div>,
+		\end{booktitle}
+
+		\begin{volume}
+		<div class="bibtex_volume">
+			Vol. \volume
+		</div>,
+		\end{volume}
+
+		\begin{pages}
+		<div class="bibtex_pages">
+			pp. \format[FormatPagesForHTML]{\pages}
+		</div>,
+		\end{pages}
+
+		<div class="bibtex_year">
+			\year
+		</div>
+	</div>
+</div>
diff --git a/src/resource/layout/html.layout b/src/resource/layout/html.layout
old mode 100755
new mode 100644
index 69fff25..10e7299
--- a/src/resource/layout/html.layout
+++ b/src/resource/layout/html.layout
@@ -1,81 +1,81 @@
-<div class="bibtex_entry" title="Generated on \format[CurrentDate]{mm|dd|yyyy}">
-
-	<div class="bibtex_header">
-		<div class="bibtex_key">
-			<a name="\bibtexkey">\bibtexkey</a>
-		</div>
-
-		\begin{doi}
-		<div class="bibtex_doi">
-			<a href="http://dx.doi.org/\doi">doi</a>
-		</div>
-		\end{doi}
-
-		\begin{pmid}
-		<div class="bibtex_pmid">
-			<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&query_hl=1&itool=pubmed_docsum&list_uids=\pmid">pmid</a>
-		</div>
-		\end{pmid}
-
-		\begin{citeseerurl}
-		<div class="bibtex_citeseer">
-			<a href="http://citeseer.ist.psu.edu/\citeseerurl">cs</a>
-		</div>
-		\end{citeseerurl}
-
-		\begin{file}
-		<div class="bibtex_pdf">
-			\format[FileLink(pdf),WrapContent(<a href=",">pdf</a>)]{\file}
-		</div>
-		\end{file}
-
-		\begin{pdf}
-		<div class="bibtex_pdf">
-			<a href="\format[ResolvePDF]{\pdf}">pdf</a>
-		</div>
-		\end{pdf}
-
-		\begin{url}
-		<div class="bibtex_url">
-			<a href="\url">url</a>
-		</div>
-		\end{url}
-	</div>
-
-	<div class="bibtex_content">
-
-		\begin{title}
-		<div class="bibtex_title">
-			\format[HTMLChars,RemoveLatexCommands]{\title}
-		</div>
-		\end{title}
-
-		\begin{author}
-		<div class="bibtex_author">
-			\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,HTMLChars]{\author}
-		</div>
-		\end{author}
-
-		\begin{journal}
-		<div class="bibtex_journal">
-			\format[HTMLChars]{\journal}
-		</div>,
-		\end{journal}
-
-		\begin{volume}
-		<div class="bibtex_volume">
-			Vol. \volume
-		</div>,
-		\end{volume}
-
-		\begin{pages}
-		<div class="bibtex_pages">
-			pp. \format[FormatPagesForHTML]{\pages}
-		</div>,
-		\end{pages}
-
-		<div class="bibtex_year">
-			\year
-		</div>
-	</div>
-</div>
+<div class="bibtex_entry" title="Generated on \format[CurrentDate]{mm|dd|yyyy}">
+
+	<div class="bibtex_header">
+		<div class="bibtex_key">
+			<a name="\bibtexkey">\bibtexkey</a>
+		</div>
+
+		\begin{doi}
+		<div class="bibtex_doi">
+			<a href="http://dx.doi.org/\doi">doi</a>
+		</div>
+		\end{doi}
+
+		\begin{pmid}
+		<div class="bibtex_pmid">
+			<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&query_hl=1&itool=pubmed_docsum&list_uids=\pmid">pmid</a>
+		</div>
+		\end{pmid}
+
+		\begin{citeseerurl}
+		<div class="bibtex_citeseer">
+			<a href="http://citeseer.ist.psu.edu/\citeseerurl">cs</a>
+		</div>
+		\end{citeseerurl}
+
+		\begin{file}
+		<div class="bibtex_pdf">
+			\format[FileLink(pdf),WrapContent(<a href=",">pdf</a>)]{\file}
+		</div>
+		\end{file}
+
+		\begin{pdf}
+		<div class="bibtex_pdf">
+			<a href="\format[ResolvePDF]{\pdf}">pdf</a>
+		</div>
+		\end{pdf}
+
+		\begin{url}
+		<div class="bibtex_url">
+			<a href="\url">url</a>
+		</div>
+		\end{url}
+	</div>
+
+	<div class="bibtex_content">
+
+		\begin{title}
+		<div class="bibtex_title">
+			\format[HTMLChars,RemoveLatexCommands]{\title}
+		</div>
+		\end{title}
+
+		\begin{author}
+		<div class="bibtex_author">
+			\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,HTMLChars]{\author}
+		</div>
+		\end{author}
+
+		\begin{journal}
+		<div class="bibtex_journal">
+			\format[HTMLChars]{\journal}
+		</div>,
+		\end{journal}
+
+		\begin{volume}
+		<div class="bibtex_volume">
+			Vol. \volume
+		</div>,
+		\end{volume}
+
+		\begin{pages}
+		<div class="bibtex_pages">
+			pp. \format[FormatPagesForHTML]{\pages}
+		</div>,
+		\end{pages}
+
+		<div class="bibtex_year">
+			\year
+		</div>
+	</div>
+</div>
diff --git a/src/resource/layout/html.mastersthesis.layout b/src/resource/layout/html.mastersthesis.layout
index 813c31d..fd68d57 100644
--- a/src/resource/layout/html.mastersthesis.layout
+++ b/src/resource/layout/html.mastersthesis.layout
@@ -1,51 +1,51 @@
-<div class="bibtex_entry">
-
-	<div class="bibtex_header">
-		<div class="bibtex_key">
-			<a name="\bibtexkey">\bibtexkey</a>
-		</div>
-
-		\begin{file}
-		<div class="bibtex_pdf">
-			\format[FileLink(pdf),WrapContent(<a href=",">pdf</a>)]{\file}
-		</div>
-		\end{file}
-
-		\begin{pdf}
-		<div class="bibtex_pdf">
-			<a href="\format[ResolvePDF]{\pdf}">pdf</a>
-		</div>
-		\end{pdf}
-
-		\begin{url}
-		<div class="bibtex_url">
-			<a href="\url">url</a>
-		</div>
-		\end{url}
-	</div>
-
-	<div class="bibtex_content">
-
-		\begin{title}
-		<div class="bibtex_title">
-			\format[HTMLChars,RemoveLatexCommands]{\title}
-		</div>
-		\end{title}
-
-		\begin{author}
-		<div class="bibtex_author">
-			\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,HTMLChars]{\author}
-		</div>
-		\end{author}
-
-		\begin{school}
-		<div class="bibtex_journal">
-			\format[HTMLChars]{\school}
-		</div>,
-		\end{school}
-
-		<div class="bibtex_year">
-			\year
-		</div>
-	</div>
-</div>
+<div class="bibtex_entry">
+
+	<div class="bibtex_header">
+		<div class="bibtex_key">
+			<a name="\bibtexkey">\bibtexkey</a>
+		</div>
+
+		\begin{file}
+		<div class="bibtex_pdf">
+			\format[FileLink(pdf),WrapContent(<a href=",">pdf</a>)]{\file}
+		</div>
+		\end{file}
+
+		\begin{pdf}
+		<div class="bibtex_pdf">
+			<a href="\format[ResolvePDF]{\pdf}">pdf</a>
+		</div>
+		\end{pdf}
+
+		\begin{url}
+		<div class="bibtex_url">
+			<a href="\url">url</a>
+		</div>
+		\end{url}
+	</div>
+
+	<div class="bibtex_content">
+
+		\begin{title}
+		<div class="bibtex_title">
+			\format[HTMLChars,RemoveLatexCommands]{\title}
+		</div>
+		\end{title}
+
+		\begin{author}
+		<div class="bibtex_author">
+			\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,HTMLChars]{\author}
+		</div>
+		\end{author}
+
+		\begin{school}
+		<div class="bibtex_journal">
+			\format[HTMLChars]{\school}
+		</div>,
+		\end{school}
+
+		<div class="bibtex_year">
+			\year
+		</div>
+	</div>
+</div>
diff --git a/src/resource/layout/html.phdthesis.layout b/src/resource/layout/html.phdthesis.layout
index 813c31d..fd68d57 100644
--- a/src/resource/layout/html.phdthesis.layout
+++ b/src/resource/layout/html.phdthesis.layout
@@ -1,51 +1,51 @@
-<div class="bibtex_entry">
-
-	<div class="bibtex_header">
-		<div class="bibtex_key">
-			<a name="\bibtexkey">\bibtexkey</a>
-		</div>
-
-		\begin{file}
-		<div class="bibtex_pdf">
-			\format[FileLink(pdf),WrapContent(<a href=",">pdf</a>)]{\file}
-		</div>
-		\end{file}
-
-		\begin{pdf}
-		<div class="bibtex_pdf">
-			<a href="\format[ResolvePDF]{\pdf}">pdf</a>
-		</div>
-		\end{pdf}
-
-		\begin{url}
-		<div class="bibtex_url">
-			<a href="\url">url</a>
-		</div>
-		\end{url}
-	</div>
-
-	<div class="bibtex_content">
-
-		\begin{title}
-		<div class="bibtex_title">
-			\format[HTMLChars,RemoveLatexCommands]{\title}
-		</div>
-		\end{title}
-
-		\begin{author}
-		<div class="bibtex_author">
-			\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,HTMLChars]{\author}
-		</div>
-		\end{author}
-
-		\begin{school}
-		<div class="bibtex_journal">
-			\format[HTMLChars]{\school}
-		</div>,
-		\end{school}
-
-		<div class="bibtex_year">
-			\year
-		</div>
-	</div>
-</div>
+<div class="bibtex_entry">
+
+	<div class="bibtex_header">
+		<div class="bibtex_key">
+			<a name="\bibtexkey">\bibtexkey</a>
+		</div>
+
+		\begin{file}
+		<div class="bibtex_pdf">
+			\format[FileLink(pdf),WrapContent(<a href=",">pdf</a>)]{\file}
+		</div>
+		\end{file}
+
+		\begin{pdf}
+		<div class="bibtex_pdf">
+			<a href="\format[ResolvePDF]{\pdf}">pdf</a>
+		</div>
+		\end{pdf}
+
+		\begin{url}
+		<div class="bibtex_url">
+			<a href="\url">url</a>
+		</div>
+		\end{url}
+	</div>
+
+	<div class="bibtex_content">
+
+		\begin{title}
+		<div class="bibtex_title">
+			\format[HTMLChars,RemoveLatexCommands]{\title}
+		</div>
+		\end{title}
+
+		\begin{author}
+		<div class="bibtex_author">
+			\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer,HTMLChars]{\author}
+		</div>
+		\end{author}
+
+		\begin{school}
+		<div class="bibtex_journal">
+			\format[HTMLChars]{\school}
+		</div>,
+		\end{school}
+
+		<div class="bibtex_year">
+			\year
+		</div>
+	</div>
+</div>
diff --git a/src/resource/layout/openoffice/README b/src/resource/layout/openoffice/README
index 1396661..2add061 100644
--- a/src/resource/layout/openoffice/README
+++ b/src/resource/layout/openoffice/README
@@ -1,15 +1,15 @@
-A very simple export filter that outputs a comma-separated file that can be used by Openoffice (OO) as a bibliography database.
-
-Uses two new custom formaters: 
-
-  - GetOpenofficeType: 
-      converts the default bibtextype entries into the numeric codes that
-	  OO uses to identify the kind of publication.
-  - RemoveWhitespace: 
-      removes all whitespace chars (newlines, tabs, form-feeds, etc) except
-	  for the "space character".
-
-Enjoy.
-
-Juan M. Peralta
-peralta_jm at earthlink.net
+A very simple export filter that outputs a comma-separated file that can be used by Openoffice (OO) as a bibliography database.
+
+Uses two new custom formaters: 
+
+  - GetOpenofficeType: 
+      converts the default bibtextype entries into the numeric codes that
+	  OO uses to identify the kind of publication.
+  - RemoveWhitespace: 
+      removes all whitespace chars (newlines, tabs, form-feeds, etc) except
+	  for the "space character".
+
+Enjoy.
+
+Juan M. Peralta
+peralta_jm at earthlink.net
diff --git a/src/resource/layout/openoffice/openoffice-csv.begin.layout b/src/resource/layout/openoffice/openoffice-csv.begin.layout
index 0b19bc9..e697065 100644
--- a/src/resource/layout/openoffice/openoffice-csv.begin.layout
+++ b/src/resource/layout/openoffice/openoffice-csv.begin.layout
@@ -1 +1 @@
-BibliographyType,ISBN,Identifier,Author,Title,Journal,Volume,Number,Month,Pages,Year,Address,Note,URL,Booktitle,Chapter,Edition,Series,Editor,Publisher,ReportType,Howpublished,Institution,Organizations,School,Annote,Custom1,Custom2,Custom3,Custom4,Custom5
+BibliographyType,ISBN,Identifier,Author,Title,Journal,Volume,Number,Month,Pages,Year,Address,Note,URL,Booktitle,Chapter,Edition,Series,Editor,Publisher,ReportType,Howpublished,Institution,Organizations,School,Annote,Custom1,Custom2,Custom3,Custom4,Custom5
diff --git a/src/resource/layout/openoffice/openoffice-csv.layout b/src/resource/layout/openoffice/openoffice-csv.layout
index 467a31d..17b522a 100644
--- a/src/resource/layout/openoffice/openoffice-csv.layout
+++ b/src/resource/layout/openoffice/openoffice-csv.layout
@@ -1 +1 @@
-\format[GetOpenOfficeType]{\bibtextype},"\begin{isbn}\isbn\end{isbn}","\bibtexkey","\format[AuthorLastFirst,AuthorAndsReplacer]{\author}","\format[RemoveBrackets,RemoveWhitespace]{\title}","\journal",\volume,\number,"\month","\pages",\year,"\address","\note","\url","\booktitle","\chapter","\edition","\series","\format[AuthorLastFirst,AuthorAndsReplacer]{\editor}","\publisher","\begin{reporttype}\reporttype\end{reporttype}","\howpublished","\institution","\organization","\school","\annote [...]
+\format[GetOpenOfficeType]{\bibtextype},"\begin{isbn}\isbn\end{isbn}","\bibtexkey","\format[AuthorLastFirst,AuthorAndsReplacer]{\author}","\format[RemoveBrackets,RemoveWhitespace]{\title}","\journal",\volume,\number,"\month","\pages",\year,"\address","\note","\url","\booktitle","\chapter","\edition","\series","\format[AuthorLastFirst,AuthorAndsReplacer]{\editor}","\publisher","\begin{reporttype}\reporttype\end{reporttype}","\howpublished","\institution","\organization","\school","\annote [...]
diff --git a/src/resource/layout/ris/ris.article.layout b/src/resource/layout/ris/ris.article.layout
index cbb49b2..3a30148 100644
--- a/src/resource/layout/ris/ris.article.layout
+++ b/src/resource/layout/ris/ris.article.layout
@@ -1,20 +1,20 @@
-TY  - JOUR
-\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
-\begin{title}T1  - \format[FormatChars]{\title}\end{title}
-\begin{journal}JO  - \format[FormatChars]{\journal}\end{journal}
-\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
-\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
-\begin{number}IS  - \format[FormatChars]{\number}\end{number}
-\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
-EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
-\begin{url}UR  - \url\end{url}
-\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
-\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
-\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
-\begin{issn}U1  - \format[FormatChars]{\issn}\end{issn}
-\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
-\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
-\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
-\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
-\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
-ER  -
+TY  - JOUR
+\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
+\begin{title}T1  - \format[FormatChars]{\title}\end{title}
+\begin{journal}JO  - \format[FormatChars]{\journal}\end{journal}
+\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
+\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
+\begin{number}IS  - \format[FormatChars]{\number}\end{number}
+\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
+EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
+\begin{url}UR  - \url\end{url}
+\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
+\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
+\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
+\begin{issn}U1  - \format[FormatChars]{\issn}\end{issn}
+\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
+\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
+\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
+\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
+\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
+ER  -
diff --git a/src/resource/layout/ris/ris.book.layout b/src/resource/layout/ris/ris.book.layout
index b4829aa..759ffd9 100644
--- a/src/resource/layout/ris/ris.book.layout
+++ b/src/resource/layout/ris/ris.book.layout
@@ -1,22 +1,22 @@
-TY  - BOOK
-\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
-\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
-\begin{title}T1  - \format[FormatChars]{\title}\end{title}
-\begin{publisher}PB  - \format[FormatChars]{\publisher}\end{publisher}
-\begin{address}AD  - \format[FormatChars]{\address}\end{address}
-\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
-\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
-\begin{number}IS  - \format[FormatChars]{\number}\end{number}
-\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
-EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
-\begin{url}UR  - \url\end{url}
-\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
-\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
-\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
-\begin{issn}U1  - \format[FormatChars]{\issn}\end{issn}
-\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
-\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
-\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
-\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
-\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
-ER  -
+TY  - BOOK
+\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
+\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
+\begin{title}T1  - \format[FormatChars]{\title}\end{title}
+\begin{publisher}PB  - \format[FormatChars]{\publisher}\end{publisher}
+\begin{address}AD  - \format[FormatChars]{\address}\end{address}
+\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
+\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
+\begin{number}IS  - \format[FormatChars]{\number}\end{number}
+\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
+EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
+\begin{url}UR  - \url\end{url}
+\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
+\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
+\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
+\begin{issn}U1  - \format[FormatChars]{\issn}\end{issn}
+\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
+\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
+\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
+\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
+\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
+ER  -
diff --git a/src/resource/layout/ris/ris.conference.layout b/src/resource/layout/ris/ris.conference.layout
index ee1d3e1..f4a16a2 100644
--- a/src/resource/layout/ris/ris.conference.layout
+++ b/src/resource/layout/ris/ris.conference.layout
@@ -1,23 +1,23 @@
-TY  - CONF
-\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
-\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
-\begin{title}T1  - \format[FormatChars]{\title}\end{title}
-\begin{booktitle}T2  - \format[FormatChars]{\booktitle}\end{booktitle}
-\begin{publisher}PB  - \format[FormatChars]{\publisher}\end{publisher}
-\begin{address}AD  - \format[FormatChars]{\address}\end{address}
-\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
-\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
-\begin{number}IS  - \format[FormatChars]{\number}\end{number}
-\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
-EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
-\begin{url}UR  - \url\end{url}
-\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
-\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
-\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
-\begin{issn}U1  - \format[FormatChars]{\issn}\end{issn}
-\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
-\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
-\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
-\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
-\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
-ER  -
+TY  - CONF
+\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
+\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
+\begin{title}T1  - \format[FormatChars]{\title}\end{title}
+\begin{booktitle}T2  - \format[FormatChars]{\booktitle}\end{booktitle}
+\begin{publisher}PB  - \format[FormatChars]{\publisher}\end{publisher}
+\begin{address}AD  - \format[FormatChars]{\address}\end{address}
+\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
+\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
+\begin{number}IS  - \format[FormatChars]{\number}\end{number}
+\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
+EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
+\begin{url}UR  - \url\end{url}
+\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
+\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
+\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
+\begin{issn}U1  - \format[FormatChars]{\issn}\end{issn}
+\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
+\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
+\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
+\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
+\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
+ER  -
diff --git a/src/resource/layout/ris/ris.incollection.layout b/src/resource/layout/ris/ris.incollection.layout
index 569664d..4cc638e 100644
--- a/src/resource/layout/ris/ris.incollection.layout
+++ b/src/resource/layout/ris/ris.incollection.layout
@@ -1,23 +1,23 @@
-TY  - CHAP
-\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
-\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
-\begin{title}T1  - \format[FormatChars]{\title}\end{title}
-\begin{booktitle}T2  - \format[FormatChars]{\booktitle}\end{booktitle}
-\begin{publisher}PB  - \format[FormatChars]{\publisher}\end{publisher}
-\begin{address}AD  - \format[FormatChars]{\address}\end{address}
-\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
-\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
-\begin{number}IS  - \format[FormatChars]{\number}\end{number}
-\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
-EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
-\begin{url}UR  - \url\end{url}
-\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
-\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
-\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
-\begin{issn}U1  - \format[FormatChars]{\issn}\end{issn}
-\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
-\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
-\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
-\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
-\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
-ER  -
+TY  - CHAP
+\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
+\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
+\begin{title}T1  - \format[FormatChars]{\title}\end{title}
+\begin{booktitle}T2  - \format[FormatChars]{\booktitle}\end{booktitle}
+\begin{publisher}PB  - \format[FormatChars]{\publisher}\end{publisher}
+\begin{address}AD  - \format[FormatChars]{\address}\end{address}
+\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
+\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
+\begin{number}IS  - \format[FormatChars]{\number}\end{number}
+\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
+EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
+\begin{url}UR  - \url\end{url}
+\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
+\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
+\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
+\begin{issn}U1  - \format[FormatChars]{\issn}\end{issn}
+\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
+\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
+\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
+\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
+\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
+ER  -
diff --git a/src/resource/layout/ris/ris.inproceedings.layout b/src/resource/layout/ris/ris.inproceedings.layout
index ee1d3e1..f4a16a2 100644
--- a/src/resource/layout/ris/ris.inproceedings.layout
+++ b/src/resource/layout/ris/ris.inproceedings.layout
@@ -1,23 +1,23 @@
-TY  - CONF
-\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
-\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
-\begin{title}T1  - \format[FormatChars]{\title}\end{title}
-\begin{booktitle}T2  - \format[FormatChars]{\booktitle}\end{booktitle}
-\begin{publisher}PB  - \format[FormatChars]{\publisher}\end{publisher}
-\begin{address}AD  - \format[FormatChars]{\address}\end{address}
-\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
-\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
-\begin{number}IS  - \format[FormatChars]{\number}\end{number}
-\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
-EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
-\begin{url}UR  - \url\end{url}
-\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
-\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
-\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
-\begin{issn}U1  - \format[FormatChars]{\issn}\end{issn}
-\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
-\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
-\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
-\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
-\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
-ER  -
+TY  - CONF
+\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
+\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
+\begin{title}T1  - \format[FormatChars]{\title}\end{title}
+\begin{booktitle}T2  - \format[FormatChars]{\booktitle}\end{booktitle}
+\begin{publisher}PB  - \format[FormatChars]{\publisher}\end{publisher}
+\begin{address}AD  - \format[FormatChars]{\address}\end{address}
+\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
+\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
+\begin{number}IS  - \format[FormatChars]{\number}\end{number}
+\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
+EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
+\begin{url}UR  - \url\end{url}
+\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
+\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
+\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
+\begin{issn}U1  - \format[FormatChars]{\issn}\end{issn}
+\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
+\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
+\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
+\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
+\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
+ER  -
diff --git a/src/resource/layout/ris/ris.layout b/src/resource/layout/ris/ris.layout
index f3062fc..5ac75f1 100644
--- a/src/resource/layout/ris/ris.layout
+++ b/src/resource/layout/ris/ris.layout
@@ -1,22 +1,22 @@
-TY  - GEN
-\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
-\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
-\begin{title}T1  - \format[FormatChars]{\title}\end{title}
-\begin{journal}JO  - \format[FormatChars]{\journal}\end{journal}
-\begin{publisher}PB  - \format[FormatChars]{\publisher}\end{publisher}
-\begin{address}AD  - \format[FormatChars]{\address}\end{address}
-\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
-\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
-\begin{number}IS  - \format[FormatChars]{\number}\end{number}
-\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
-EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
-\begin{url}UR  - \url\end{url}
-\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
-\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
-\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
-\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
-\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
-\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
-\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
-\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
-ER  -
+TY  - GEN
+\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
+\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
+\begin{title}T1  - \format[FormatChars]{\title}\end{title}
+\begin{journal}JO  - \format[FormatChars]{\journal}\end{journal}
+\begin{publisher}PB  - \format[FormatChars]{\publisher}\end{publisher}
+\begin{address}AD  - \format[FormatChars]{\address}\end{address}
+\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
+\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
+\begin{number}IS  - \format[FormatChars]{\number}\end{number}
+\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
+EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
+\begin{url}UR  - \url\end{url}
+\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
+\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
+\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
+\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
+\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
+\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
+\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
+\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
+ER  -
diff --git a/src/resource/layout/ris/ris.mastersthesis.layout b/src/resource/layout/ris/ris.mastersthesis.layout
index f89ef7a..f4aecb7 100644
--- a/src/resource/layout/ris/ris.mastersthesis.layout
+++ b/src/resource/layout/ris/ris.mastersthesis.layout
@@ -1,17 +1,17 @@
-TY  - THES
-\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
-\begin{title}T1  - \format[FormatChars]{\title}\end{title}
-\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
-\begin{school}PB  - \format[FormatChars]{\school}\end{school}
-\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
-EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
-\begin{url}UR  - \url\end{url}
-\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
-\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
-\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
-\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
-\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
-\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
-\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
-\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
-ER  -
+TY  - THES
+\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
+\begin{title}T1  - \format[FormatChars]{\title}\end{title}
+\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
+\begin{school}PB  - \format[FormatChars]{\school}\end{school}
+\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
+EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
+\begin{url}UR  - \url\end{url}
+\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
+\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
+\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
+\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
+\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
+\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
+\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
+\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
+ER  -
diff --git a/src/resource/layout/ris/ris.patent.layout b/src/resource/layout/ris/ris.patent.layout
index 8fd9fe6..03c6386 100644
--- a/src/resource/layout/ris/ris.patent.layout
+++ b/src/resource/layout/ris/ris.patent.layout
@@ -1,18 +1,18 @@
-TY  - PAT
-\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
-\begin{assignee}\format[FormatChars,RisAuthors(A2)]{\assignee}\end{assignee}
-\begin{title}T1  - \format[FormatChars]{\title}\end{title}
-\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
-\begin{number}IS  - \format[FormatChars]{\number}\end{number}
-\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
-EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
-\begin{url}UR  - \url\end{url}
-\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
-\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
-\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
-\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
-\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
-\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
-\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
-\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
-ER  -
+TY  - PAT
+\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
+\begin{assignee}\format[FormatChars,RisAuthors(A2)]{\assignee}\end{assignee}
+\begin{title}T1  - \format[FormatChars]{\title}\end{title}
+\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
+\begin{number}IS  - \format[FormatChars]{\number}\end{number}
+\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
+EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
+\begin{url}UR  - \url\end{url}
+\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
+\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
+\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
+\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
+\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
+\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
+\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
+\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
+ER  -
diff --git a/src/resource/layout/ris/ris.phdthesis.layout b/src/resource/layout/ris/ris.phdthesis.layout
index f89ef7a..f4aecb7 100644
--- a/src/resource/layout/ris/ris.phdthesis.layout
+++ b/src/resource/layout/ris/ris.phdthesis.layout
@@ -1,17 +1,17 @@
-TY  - THES
-\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
-\begin{title}T1  - \format[FormatChars]{\title}\end{title}
-\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
-\begin{school}PB  - \format[FormatChars]{\school}\end{school}
-\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
-EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
-\begin{url}UR  - \url\end{url}
-\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
-\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
-\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
-\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
-\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
-\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
-\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
-\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
-ER  -
+TY  - THES
+\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
+\begin{title}T1  - \format[FormatChars]{\title}\end{title}
+\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
+\begin{school}PB  - \format[FormatChars]{\school}\end{school}
+\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
+EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
+\begin{url}UR  - \url\end{url}
+\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
+\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
+\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
+\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
+\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
+\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
+\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
+\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
+ER  -
diff --git a/src/resource/layout/ris/ris.techreport.layout b/src/resource/layout/ris/ris.techreport.layout
index 89356b8..1b59331 100644
--- a/src/resource/layout/ris/ris.techreport.layout
+++ b/src/resource/layout/ris/ris.techreport.layout
@@ -1,21 +1,21 @@
-TY  - RPRT
-\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
-\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
-\begin{title}T1  - \format[FormatChars]{\title}\end{title}
-\begin{journal}JO  - \format[FormatChars]{\journal}\end{journal}
-\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
-\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
-\begin{number}IS  - \format[FormatChars]{\number}\end{number}
-\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
-EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
-\begin{url}UR  - \url\end{url}
-\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
-\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
-\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
-\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
-\begin{type}N1  - \format[FormatChars]{\type}\end{type}
-\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
-\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
-\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
-\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
-ER  -
+TY  - RPRT
+\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
+\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
+\begin{title}T1  - \format[FormatChars]{\title}\end{title}
+\begin{journal}JO  - \format[FormatChars]{\journal}\end{journal}
+\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
+\begin{volume}VL  - \format[FormatChars]{\volume}\end{volume}
+\begin{number}IS  - \format[FormatChars]{\number}\end{number}
+\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
+EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
+\begin{url}UR  - \url\end{url}
+\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
+\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
+\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
+\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
+\begin{type}N1  - \format[FormatChars]{\type}\end{type}
+\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
+\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
+\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
+\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
+ER  -
diff --git a/src/resource/layout/ris/ris.unpublished.layout b/src/resource/layout/ris/ris.unpublished.layout
index 977baa2..ebe76ce 100644
--- a/src/resource/layout/ris/ris.unpublished.layout
+++ b/src/resource/layout/ris/ris.unpublished.layout
@@ -1,17 +1,17 @@
-TY  - UNPB
-\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
-\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
-\begin{title}T1  - \format[FormatChars]{\title}\end{title}
-\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
-\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
-EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
-\begin{url}UR  - \url\end{url}
-\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
-\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
-\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
-\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
-\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
-\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
-\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
-\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
-ER  -
+TY  - UNPB
+\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
+\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
+\begin{title}T1  - \format[FormatChars]{\title}\end{title}
+\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
+\begin{pages}SP  - \format[FormatChars,FirstPage]{\pages}
+EP  - \format[FormatChars,LastPage]{\pages}\end{pages}
+\begin{url}UR  - \url\end{url}
+\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
+\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
+\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
+\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
+\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
+\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
+\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
+\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
+ER  -
diff --git a/src/resource/layout/ris/ris.www.layout b/src/resource/layout/ris/ris.www.layout
index 7d84e9c..36651dc 100644
--- a/src/resource/layout/ris/ris.www.layout
+++ b/src/resource/layout/ris/ris.www.layout
@@ -1,15 +1,15 @@
-TY  - ELEC
-\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
-\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
-\begin{title}T1  - \format[FormatChars]{\title}\end{title}
-\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
-\begin{url}UR  - \url\end{url}
-\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
-\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
-\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
-\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
-\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
-\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
-\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
-\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
-ER  -
+TY  - ELEC
+\begin{author}\format[FormatChars,RisAuthors(AU)]{\author}\end{author}
+\begin{editor}\format[FormatChars,RisAuthors(A2)]{\editor}\end{editor}
+\begin{title}T1  - \format[FormatChars]{\title}\end{title}
+\begin{year}Y1  - \format[FormatChars]{\year}\end{year}\begin{month}/\format[FormatChars,RisMonth]{\month}\end{month}
+\begin{url}UR  - \url\end{url}
+\begin{doi}M3  - http://dx.doi.org/\doi\end{doi}
+\begin{keywords}\format[FormatChars,RisKeywords]{\keywords}\end{keywords}
+\begin{file}L1  - \format[FileLink(pdf)]{\file}\end{file}
+\begin{comment}N1  - \format[FormatChars]{\comment}\end{comment}
+\begin{notes}N1  - \format[FormatChars]{\notes}\end{notes}
+\begin{owner}N1  - Owner: \format[FormatChars]{\owner}\end{owner}
+\begin{timestamp}N1  - Added to JabRef: \format[FormatChars]{\timestamp}\end{timestamp}
+\begin{abstract}N2  - \format[FormatChars]{\abstract}\end{abstract}
+ER  -
diff --git a/src/resource/layout/simplehtml.layout b/src/resource/layout/simplehtml.layout
old mode 100755
new mode 100644
index f01b8ef..48b8757
--- a/src/resource/layout/simplehtml.layout
+++ b/src/resource/layout/simplehtml.layout
@@ -1,8 +1,8 @@
-<dt>\format[ToLowerCase]{\bibtextype} \begin{bibtexkey}<a name="\bibtexkey">(\bibtexkey)</a>\end{bibtexkey}</dt>
-\begin{author}<dd>\format[Authors(LastFirst,InititialsNoSpace),HTMLChars]{\author}</dd>\end{author}\begin{title}
-<dd><i>\format[HTMLChars]{\title}</i></dd>\end{title}\begin{editor}
-<dd>\format[AuthorLastFirst,AuthorLastFirstAbbreviator,AuthorAndsCommaReplacer,HTMLChars]{\editor} <i>(ed.)</i></dd>\end{editor}\begin{booktitle}
-<dd>\format[HTMLChars]{\booktitle}</dd>\end{booktitle}\begin{chapter}
-<dd>Chapter \format[HTMLChars]{\chapter}</dd>\end{chapter}
-<dd>\begin{journal}\format[HTMLChars]{\journal}, \end{journal}\begin{school}\format[HTMLChars]{\school}, \end{school}\begin{institution}\format[HTMLChars]{\institution}, \end{institution}\begin{publisher}\format[HTMLChars]{\publisher}, \end{publisher}\begin{howpublished}\format[HTMLChars]{\howpublished}, \end{howpublished}\begin{year}<b>\year</b>\end{year}\begin{volume}, Vol. \volume\end{volume}\begin{number}(\format[FormatPagesForHTML]{\number})\end{number}\begin{pages}, pp. \format[For [...]
-
+<dt>\format[ToLowerCase]{\bibtextype} \begin{bibtexkey}<a name="\bibtexkey">(\bibtexkey)</a>\end{bibtexkey}</dt>
+\begin{author}<dd>\format[Authors(LastFirst,InititialsNoSpace),HTMLChars]{\author}</dd>\end{author}\begin{title}
+<dd><i>\format[HTMLChars]{\title}</i></dd>\end{title}\begin{editor}
+<dd>\format[AuthorLastFirst,AuthorLastFirstAbbreviator,AuthorAndsCommaReplacer,HTMLChars]{\editor} <i>(ed.)</i></dd>\end{editor}\begin{booktitle}
+<dd>\format[HTMLChars]{\booktitle}</dd>\end{booktitle}\begin{chapter}
+<dd>Chapter \format[HTMLChars]{\chapter}</dd>\end{chapter}
+<dd>\begin{journal}\format[HTMLChars]{\journal}, \end{journal}\begin{school}\format[HTMLChars]{\school}, \end{school}\begin{institution}\format[HTMLChars]{\institution}, \end{institution}\begin{publisher}\format[HTMLChars]{\publisher}, \end{publisher}\begin{howpublished}\format[HTMLChars]{\howpublished}, \end{howpublished}\begin{year}<b>\year</b>\end{year}\begin{volume}, Vol. \volume\end{volume}\begin{number}(\format[FormatPagesForHTML]{\number})\end{number}\begin{pages}, pp. \format[For [...]
+
diff --git a/src/resource/layout/tablerefs/tablerefs.begin.layout b/src/resource/layout/tablerefs/tablerefs.begin.layout
index 9f4d773..6e51c32 100644
--- a/src/resource/layout/tablerefs/tablerefs.begin.layout
+++ b/src/resource/layout/tablerefs/tablerefs.begin.layout
@@ -1,319 +1,319 @@
-<!DOCTYPE HTML>
-<html>
-<head>
-<title>JabRef references</title>
-<meta http-equiv="Content-Type" content="text/html; charset=\encoding">
-<script type="text/javascript">
-<!--
-// QuickSearch script for JabRef HTML export (no Abstract/BibTeX)
-// Version: 3.0
-//
-// Copyright (c) 2006-2011, Mark Schenk
-//
-// This software is distributed under a Creative Commons Attribution 3.0 License
-// http://creativecommons.org/licenses/by/3.0/
-//
-// Features:
-// - intuitive find-as-you-type searching
-//    ~ case insensitive
-//    ~ ignore diacritics (optional)
-//
-// - search with/without Regular Expressions
-// - match BibTeX key
-//
-
-// Search settings
-var noSquiggles = true; 	// ignore diacritics when searching
-var searchRegExp = false; 	// enable RegExp searches
-
-
-if (window.addEventListener) {
-	window.addEventListener("load",initSearch,false); }
-else if (window.attachEvent) {
-	window.attachEvent("onload", initSearch); }
-
-function initSearch() {
-	// check for quick search table and searchfield
-	if (!document.getElementById('qs_table')||!document.getElementById('quicksearch')) { return; }
-
-	// load all the rows and sort into arrays
-	loadTableData();
-	
-	//find the query field
-	qsfield = document.getElementById('qs_field');
-
-	// previous search term; used for speed optimisation
-	prevSearch = '';
-
-	//find statistics location
-	stats = document.getElementById('stat');
-	setStatistics(-1);
-	
-	// set up preferences
-	initPreferences();
-
-	// shows the searchfield
-	document.getElementById('quicksearch').style.display = 'block';
-	document.getElementById('qs_field').onkeyup = quickSearch;
-}
-
-function loadTableData() {
-	// find table and appropriate rows
-	searchTable = document.getElementById('qs_table');
-	var allRows = searchTable.getElementsByTagName('tbody')[0].getElementsByTagName('tr');
-
-	// split all rows into entryRows and infoRows (e.g. abstract, review, bibtex)
-	entryRows = new Array();
-
-	// get data from each row
-	entryRowsData = new Array();
-	
-	BibTeXKeys = new Array();
-	
-	for (var i=0, k=0, j=0; i<allRows.length;i++) {
-		if (allRows[i].className.match(/entry/)) {
-			entryRows[j] = allRows[i];
-			entryRowsData[j] = stripDiacritics(getTextContent(allRows[i]));
-			allRows[i].id ? BibTeXKeys[j] = allRows[i].id : allRows[i].id = 'autokey_'+j;
-			j ++;
-		}
-	}
-	//number of entries and rows
-	numEntries = entryRows.length;
-}
-
-function quickSearch(){
-	
-	tInput = qsfield;
-
-	if (tInput.value.length == 0) {
-		showAll();
-		setStatistics(-1);
-		qsfield.className = '';
-		return;
-	} else {
-		t = stripDiacritics(tInput.value);
-
-		if(!searchRegExp) { t = escapeRegExp(t); }
-			
-		// only search for valid RegExp
-		try {
-			textRegExp = new RegExp(t,"i");
-			qsfield.className = '';
-		}
-			catch(err) {
-			prevSearch = tInput.value;
-			qsfield.className = 'invalidsearch';
-			return;
-		}
-	}
-	
-	// count number of hits
-	var hits = 0;
-
-	// start looping through all entry rows
-	for (var i = 0; cRow = entryRows[i]; i++){
-
-		// only show search the cells if it isn't already hidden OR if the search term is getting shorter, then search all
-		if(cRow.className.indexOf('noshow')==-1 || tInput.value.length <= prevSearch.length){
-			var found = false; 
-
-			if (entryRowsData[i].search(textRegExp) != -1 || BibTeXKeys[i].search(textRegExp) != -1){ 
-				found = true;
-			}
-			
-			if (found){
-				cRow.className = 'entry show';
-				hits++;
-			} else {
-				cRow.className = 'entry noshow';
-			}
-		}
-	}
-
-	// update statistics
-	setStatistics(hits)
-	
-	// set previous search value
-	prevSearch = tInput.value;
-}
-
-
-// Strip Diacritics from text
-// http://stackoverflow.com/questions/990904/javascript-remove-accents-in-strings
-
-// String containing replacement characters for stripping accents 
-var stripstring = 
-    'AAAAAAACEEEEIIII'+
-    'DNOOOOO.OUUUUY..'+
-    'aaaaaaaceeeeiiii'+
-    'dnooooo.ouuuuy.y'+
-    'AaAaAaCcCcCcCcDd'+
-    'DdEeEeEeEeEeGgGg'+
-    'GgGgHhHhIiIiIiIi'+
-    'IiIiJjKkkLlLlLlL'+
-    'lJlNnNnNnnNnOoOo'+
-    'OoOoRrRrRrSsSsSs'+
-    'SsTtTtTtUuUuUuUu'+
-    'UuUuWwYyYZzZzZz.';
-
-function stripDiacritics(str){
-
-    if(noSquiggles==false){
-        return str;
-    }
-
-    var answer='';
-    for(var i=0;i<str.length;i++){
-        var ch=str[i];
-        var chindex=ch.charCodeAt(0)-192;   // Index of character code in the strip string
-        if(chindex>=0 && chindex<stripstring.length){
-            // Character is within our table, so we can strip the accent...
-            var outch=stripstring.charAt(chindex);
-            // ...unless it was shown as a '.'
-            if(outch!='.')ch=outch;
-        }
-        answer+=ch;
-    }
-    return answer;
-}
-
-// http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
-// NOTE: must escape every \\ in the export code because of the JabRef Export...
-function escapeRegExp(str) {
-  return str.replace(/[-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, "\\\\$&");
-}
-
-function setStatistics (hits) {
-	if(hits < 0) { hits=numEntries; }
-	if(stats) { stats.firstChild.data = hits + '/' + numEntries}
-}
-
-function getTextContent(node) {
-	// Function written by Arve Bersvendsen
-	// http://www.virtuelvis.com
-	
-	if (node.nodeType == 3) {
-	return node.nodeValue;
-	} // text node
-	if (node.nodeType == 1 && node.className != "infolinks") { // element node
-	var text = [];
-	for (var chld = node.firstChild;chld;chld=chld.nextSibling) {
-		text.push(getTextContent(chld));
-	}
-	return text.join("");
-	} return ""; // some other node, won't contain text nodes.
-}
-
-function showAll(){
-	for (var i = 0; i < numEntries; i++){ entryRows[i].className = 'entry show'; }
-}
-
-function clearQS() {
-	qsfield.value = '';
-	showAll();
-}
-
-function redoQS(){
-	showAll();
-	quickSearch(qsfield);
-}
-
-function updateSetting(obj){
-	var option = obj.id;
-	var checked = obj.value;
-
-	switch(option)
-	 {
-	 case "opt_useRegExp":
-	   searchRegExp=!searchRegExp;
-	   redoQS();
-	   break;
-	 case "opt_noAccents":
-	   noSquiggles=!noSquiggles;
-	   loadTableData();
-	   redoQS();
-	   break;
-	 }
-}
-
-function initPreferences(){
-	if(noSquiggles){document.getElementById("opt_noAccents").checked = true;}
-	if(searchRegExp){document.getElementById("opt_useRegExp").checked = true;}
-}
-
-function toggleSettings(){
-	var togglebutton = document.getElementById('showsettings');
-	var settings = document.getElementById('settings');
-	
-	if(settings.className == "hidden"){
-		settings.className = "show";
-		togglebutton.innerText = "close settings";
-		togglebutton.textContent = "close settings";
-	}else{
-		settings.className = "hidden";
-		togglebutton.innerText = "settings...";		
-		togglebutton.textContent = "settings...";
-	}
-}
-
--->
-</script>
-<style type="text/css">
-body { background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 1.2; padding: 1em; color: #2E2E2E; margin: auto 2em; }
-
-form#quicksearch { width: auto; border-style: solid; border-color: gray; border-width: 1px 0px; padding: 0.7em 0.5em; display:none; position:relative; }
-span#searchstat {padding-left: 1em;}
-
-div#settings { margin-top:0.7em; /* border-bottom: 1px transparent solid; background-color: #efefef; border: 1px grey solid; */ }
-div#settings ul {margin: 0; padding: 0; }
-div#settings li {margin: 0; padding: 0 1em 0 0; display: inline; list-style: none; }
-div#settings li + li { border-left: 2px #efefef solid; padding-left: 0.5em;}
-div#settings input { margin-bottom: 0px;}
-
-div#settings.hidden {display:none;}
-
-#showsettings { border: 1px grey solid; padding: 0 0.5em; float:right; line-height: 1.6em; text-align: right; }
-#showsettings:hover { cursor: pointer; }
-
-.invalidsearch { background-color: red; }
-input[type="button"] { background-color: #efefef; border: 1px #2E2E2E solid;}
-
-table { width: 100%; empty-cells: show; border-spacing: 0em 0.2em; margin: 1em 0em; border-style: none; }
-th, td { border: 1px gray solid; border-width: 1px 1px; padding: 0.5em; vertical-align: top; text-align: left; }
-th { background-color: #efefef; }
-td + td, th + th { border-left: none; }
-
-td a { color: navy; text-decoration: none; }
-td a:hover  { text-decoration: underline; }
-
-tr.noshow { display: none;}
-tr.highlight td { background-color: #EFEFEF; border-top: 2px #2E2E2E solid; font-weight: bold; }
-tr.abstract td, tr.review td, tr.bibtex td { background-color: #EFEFEF; text-align: justify; border-bottom: 2px #2E2E2E solid; }
-tr.nextshow td { border-bottom: 1px gray solid; }
-
-tr.bibtex pre { width: 100%; overflow: auto; white-space: pre-wrap;}
-p.infolinks { margin: 0.3em 0em 0em 0em; padding: 0px; }
-
- at media print {
-	p.infolinks, #qs_settings, #quicksearch, t.bibtex { display: none !important; }
-	tr { page-break-inside: avoid; }
-}
-</style>
-</head>
-<body>
-
-<form action="" id="quicksearch">
-<input type="text" id="qs_field" autocomplete="off" placeholder="Type to search..." /> <input type="button" onclick="clearQS()" value="clear" />
-<span id="searchstat">Matching entries: <span id="stat">0</span></span>
-<div id="showsettings" onclick="toggleSettings()">settings...</div>
-<div id="settings" class="hidden">
-<ul>
-<li><input type="checkbox" class="search_setting" id="opt_useRegExp" onchange="updateSetting(this)"><label for="opt_useRegExp"> use RegExp</label></li>
-<li><input type="checkbox" class="search_setting" id="opt_noAccents" onchange="updateSetting(this)"><label for="opt_noAccents"> ignore accents</label></li>
-</ul>
-</div>
-</form>
-<table id="qs_table" border="1">
-<thead><tr><th width="20%">Author</th><th width="30%">Title</th><th width="5%">Year</th><th width="30%">Journal/Proceedings</th><th width="10%">Reftype</th><th width="5%">DOI/URL</th></tr></thead>
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>JabRef references</title>
+<meta http-equiv="Content-Type" content="text/html; charset=\encoding">
+<script type="text/javascript">
+<!--
+// QuickSearch script for JabRef HTML export (no Abstract/BibTeX)
+// Version: 3.0
+//
+// Copyright (c) 2006-2011, Mark Schenk
+//
+// This software is distributed under a Creative Commons Attribution 3.0 License
+// http://creativecommons.org/licenses/by/3.0/
+//
+// Features:
+// - intuitive find-as-you-type searching
+//    ~ case insensitive
+//    ~ ignore diacritics (optional)
+//
+// - search with/without Regular Expressions
+// - match BibTeX key
+//
+
+// Search settings
+var noSquiggles = true; 	// ignore diacritics when searching
+var searchRegExp = false; 	// enable RegExp searches
+
+
+if (window.addEventListener) {
+	window.addEventListener("load",initSearch,false); }
+else if (window.attachEvent) {
+	window.attachEvent("onload", initSearch); }
+
+function initSearch() {
+	// check for quick search table and searchfield
+	if (!document.getElementById('qs_table')||!document.getElementById('quicksearch')) { return; }
+
+	// load all the rows and sort into arrays
+	loadTableData();
+	
+	//find the query field
+	qsfield = document.getElementById('qs_field');
+
+	// previous search term; used for speed optimisation
+	prevSearch = '';
+
+	//find statistics location
+	stats = document.getElementById('stat');
+	setStatistics(-1);
+	
+	// set up preferences
+	initPreferences();
+
+	// shows the searchfield
+	document.getElementById('quicksearch').style.display = 'block';
+	document.getElementById('qs_field').onkeyup = quickSearch;
+}
+
+function loadTableData() {
+	// find table and appropriate rows
+	searchTable = document.getElementById('qs_table');
+	var allRows = searchTable.getElementsByTagName('tbody')[0].getElementsByTagName('tr');
+
+	// split all rows into entryRows and infoRows (e.g. abstract, review, bibtex)
+	entryRows = new Array();
+
+	// get data from each row
+	entryRowsData = new Array();
+	
+	BibTeXKeys = new Array();
+	
+	for (var i=0, k=0, j=0; i<allRows.length;i++) {
+		if (allRows[i].className.match(/entry/)) {
+			entryRows[j] = allRows[i];
+			entryRowsData[j] = stripDiacritics(getTextContent(allRows[i]));
+			allRows[i].id ? BibTeXKeys[j] = allRows[i].id : allRows[i].id = 'autokey_'+j;
+			j ++;
+		}
+	}
+	//number of entries and rows
+	numEntries = entryRows.length;
+}
+
+function quickSearch(){
+	
+	tInput = qsfield;
+
+	if (tInput.value.length == 0) {
+		showAll();
+		setStatistics(-1);
+		qsfield.className = '';
+		return;
+	} else {
+		t = stripDiacritics(tInput.value);
+
+		if(!searchRegExp) { t = escapeRegExp(t); }
+			
+		// only search for valid RegExp
+		try {
+			textRegExp = new RegExp(t,"i");
+			qsfield.className = '';
+		}
+			catch(err) {
+			prevSearch = tInput.value;
+			qsfield.className = 'invalidsearch';
+			return;
+		}
+	}
+	
+	// count number of hits
+	var hits = 0;
+
+	// start looping through all entry rows
+	for (var i = 0; cRow = entryRows[i]; i++){
+
+		// only show search the cells if it isn't already hidden OR if the search term is getting shorter, then search all
+		if(cRow.className.indexOf('noshow')==-1 || tInput.value.length <= prevSearch.length){
+			var found = false; 
+
+			if (entryRowsData[i].search(textRegExp) != -1 || BibTeXKeys[i].search(textRegExp) != -1){ 
+				found = true;
+			}
+			
+			if (found){
+				cRow.className = 'entry show';
+				hits++;
+			} else {
+				cRow.className = 'entry noshow';
+			}
+		}
+	}
+
+	// update statistics
+	setStatistics(hits)
+	
+	// set previous search value
+	prevSearch = tInput.value;
+}
+
+
+// Strip Diacritics from text
+// http://stackoverflow.com/questions/990904/javascript-remove-accents-in-strings
+
+// String containing replacement characters for stripping accents 
+var stripstring = 
+    'AAAAAAACEEEEIIII'+
+    'DNOOOOO.OUUUUY..'+
+    'aaaaaaaceeeeiiii'+
+    'dnooooo.ouuuuy.y'+
+    'AaAaAaCcCcCcCcDd'+
+    'DdEeEeEeEeEeGgGg'+
+    'GgGgHhHhIiIiIiIi'+
+    'IiIiJjKkkLlLlLlL'+
+    'lJlNnNnNnnNnOoOo'+
+    'OoOoRrRrRrSsSsSs'+
+    'SsTtTtTtUuUuUuUu'+
+    'UuUuWwYyYZzZzZz.';
+
+function stripDiacritics(str){
+
+    if(noSquiggles==false){
+        return str;
+    }
+
+    var answer='';
+    for(var i=0;i<str.length;i++){
+        var ch=str[i];
+        var chindex=ch.charCodeAt(0)-192;   // Index of character code in the strip string
+        if(chindex>=0 && chindex<stripstring.length){
+            // Character is within our table, so we can strip the accent...
+            var outch=stripstring.charAt(chindex);
+            // ...unless it was shown as a '.'
+            if(outch!='.')ch=outch;
+        }
+        answer+=ch;
+    }
+    return answer;
+}
+
+// http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
+// NOTE: must escape every \\ in the export code because of the JabRef Export...
+function escapeRegExp(str) {
+  return str.replace(/[-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, "\\\\$&");
+}
+
+function setStatistics (hits) {
+	if(hits < 0) { hits=numEntries; }
+	if(stats) { stats.firstChild.data = hits + '/' + numEntries}
+}
+
+function getTextContent(node) {
+	// Function written by Arve Bersvendsen
+	// http://www.virtuelvis.com
+	
+	if (node.nodeType == 3) {
+	return node.nodeValue;
+	} // text node
+	if (node.nodeType == 1 && node.className != "infolinks") { // element node
+	var text = [];
+	for (var chld = node.firstChild;chld;chld=chld.nextSibling) {
+		text.push(getTextContent(chld));
+	}
+	return text.join("");
+	} return ""; // some other node, won't contain text nodes.
+}
+
+function showAll(){
+	for (var i = 0; i < numEntries; i++){ entryRows[i].className = 'entry show'; }
+}
+
+function clearQS() {
+	qsfield.value = '';
+	showAll();
+}
+
+function redoQS(){
+	showAll();
+	quickSearch(qsfield);
+}
+
+function updateSetting(obj){
+	var option = obj.id;
+	var checked = obj.value;
+
+	switch(option)
+	 {
+	 case "opt_useRegExp":
+	   searchRegExp=!searchRegExp;
+	   redoQS();
+	   break;
+	 case "opt_noAccents":
+	   noSquiggles=!noSquiggles;
+	   loadTableData();
+	   redoQS();
+	   break;
+	 }
+}
+
+function initPreferences(){
+	if(noSquiggles){document.getElementById("opt_noAccents").checked = true;}
+	if(searchRegExp){document.getElementById("opt_useRegExp").checked = true;}
+}
+
+function toggleSettings(){
+	var togglebutton = document.getElementById('showsettings');
+	var settings = document.getElementById('settings');
+	
+	if(settings.className == "hidden"){
+		settings.className = "show";
+		togglebutton.innerText = "close settings";
+		togglebutton.textContent = "close settings";
+	}else{
+		settings.className = "hidden";
+		togglebutton.innerText = "settings...";		
+		togglebutton.textContent = "settings...";
+	}
+}
+
+-->
+</script>
+<style type="text/css">
+body { background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 1.2; padding: 1em; color: #2E2E2E; margin: auto 2em; }
+
+form#quicksearch { width: auto; border-style: solid; border-color: gray; border-width: 1px 0px; padding: 0.7em 0.5em; display:none; position:relative; }
+span#searchstat {padding-left: 1em;}
+
+div#settings { margin-top:0.7em; /* border-bottom: 1px transparent solid; background-color: #efefef; border: 1px grey solid; */ }
+div#settings ul {margin: 0; padding: 0; }
+div#settings li {margin: 0; padding: 0 1em 0 0; display: inline; list-style: none; }
+div#settings li + li { border-left: 2px #efefef solid; padding-left: 0.5em;}
+div#settings input { margin-bottom: 0px;}
+
+div#settings.hidden {display:none;}
+
+#showsettings { border: 1px grey solid; padding: 0 0.5em; float:right; line-height: 1.6em; text-align: right; }
+#showsettings:hover { cursor: pointer; }
+
+.invalidsearch { background-color: red; }
+input[type="button"] { background-color: #efefef; border: 1px #2E2E2E solid;}
+
+table { width: 100%; empty-cells: show; border-spacing: 0em 0.2em; margin: 1em 0em; border-style: none; }
+th, td { border: 1px gray solid; border-width: 1px 1px; padding: 0.5em; vertical-align: top; text-align: left; }
+th { background-color: #efefef; }
+td + td, th + th { border-left: none; }
+
+td a { color: navy; text-decoration: none; }
+td a:hover  { text-decoration: underline; }
+
+tr.noshow { display: none;}
+tr.highlight td { background-color: #EFEFEF; border-top: 2px #2E2E2E solid; font-weight: bold; }
+tr.abstract td, tr.review td, tr.bibtex td { background-color: #EFEFEF; text-align: justify; border-bottom: 2px #2E2E2E solid; }
+tr.nextshow td { border-bottom: 1px gray solid; }
+
+tr.bibtex pre { width: 100%; overflow: auto; white-space: pre-wrap;}
+p.infolinks { margin: 0.3em 0em 0em 0em; padding: 0px; }
+
+ at media print {
+	p.infolinks, #qs_settings, #quicksearch, t.bibtex { display: none !important; }
+	tr { page-break-inside: avoid; }
+}
+</style>
+</head>
+<body>
+
+<form action="" id="quicksearch">
+<input type="text" id="qs_field" autocomplete="off" placeholder="Type to search..." /> <input type="button" onclick="clearQS()" value="clear" />
+<span id="searchstat">Matching entries: <span id="stat">0</span></span>
+<div id="showsettings" onclick="toggleSettings()">settings...</div>
+<div id="settings" class="hidden">
+<ul>
+<li><input type="checkbox" class="search_setting" id="opt_useRegExp" onchange="updateSetting(this)"><label for="opt_useRegExp"> use RegExp</label></li>
+<li><input type="checkbox" class="search_setting" id="opt_noAccents" onchange="updateSetting(this)"><label for="opt_noAccents"> ignore accents</label></li>
+</ul>
+</div>
+</form>
+<table id="qs_table" border="1">
+<thead><tr><th width="20%">Author</th><th width="30%">Title</th><th width="5%">Year</th><th width="30%">Journal/Proceedings</th><th width="10%">Reftype</th><th width="5%">DOI/URL</th></tr></thead>
 <tbody>
\ No newline at end of file
diff --git a/src/resource/layout/tablerefs/tablerefs.end.layout b/src/resource/layout/tablerefs/tablerefs.end.layout
index f59a0f8..0aa2351 100644
--- a/src/resource/layout/tablerefs/tablerefs.end.layout
+++ b/src/resource/layout/tablerefs/tablerefs.end.layout
@@ -1,10 +1,10 @@
-</tbody>
-</table>
-<footer>
- <small>Created by <a href="http://jabref.sourceforge.net">JabRef</a> on \format[CurrentDate]{dd/MM/yyyy}.</small>
-</footer>
-
-<!-- file generated by JabRef -->
-
-</body>
+</tbody>
+</table>
+<footer>
+ <small>Created by <a href="http://jabref.sourceforge.net">JabRef</a> on \format[CurrentDate]{dd/MM/yyyy}.</small>
+</footer>
+
+<!-- file generated by JabRef -->
+
+</body>
 </html>
\ No newline at end of file
diff --git a/src/resource/layout/tablerefs/tablerefs.layout b/src/resource/layout/tablerefs/tablerefs.layout
index 196d1f3..7cf3c3d 100644
--- a/src/resource/layout/tablerefs/tablerefs.layout
+++ b/src/resource/layout/tablerefs/tablerefs.layout
@@ -1,8 +1,8 @@
-<tr id="\format{\bibtexkey}" class="entry">
-	<td>\format[Authors(LastFirst,InitialsNoSpace),HTMLChars]{\author}</td>
-	<td>\format[HTMLChars]{\title}</td>
-	<td>\year</td>
-	<td>\format[HTMLChars]{\journal}\begin{volume}<br/>Vol. \volume\end{volume}\begin{number}(\format[FormatPagesForHTML]{\number})\end{number}\format[HTMLChars]{\booktitle}\begin{pages}, pp. \format[FormatPagesForHTML]{\pages}\end{pages}\begin{school}<i>School</i>: \format[HTMLChars]{\school}\end{school}\begin{howpublished}\format[HTMLChars]{\howpublished}\end{howpublished} </td>
-	<td>\format[ToLowerCase]{\bibtextype}</td>
-	<td>\begin{doi}<a href="\format[DOICheck]{\doi}">DOI</a> \end{doi}\begin{url}<a href="\format{\url}">URL</a>\end{url} </td>
-</tr>
+<tr id="\format{\bibtexkey}" class="entry">
+	<td>\format[Authors(LastFirst,InitialsNoSpace),HTMLChars]{\author}</td>
+	<td>\format[HTMLChars]{\title}</td>
+	<td>\year</td>
+	<td>\format[HTMLChars]{\journal}\begin{volume}<br/>Vol. \volume\end{volume}\begin{number}(\format[FormatPagesForHTML]{\number})\end{number}\format[HTMLChars]{\booktitle}\begin{pages}, pp. \format[FormatPagesForHTML]{\pages}\end{pages}\begin{school}<i>School</i>: \format[HTMLChars]{\school}\end{school}\begin{howpublished}\format[HTMLChars]{\howpublished}\end{howpublished} </td>
+	<td>\format[ToLowerCase]{\bibtextype}</td>
+	<td>\begin{doi}<a href="\format[DOICheck]{\doi}">DOI</a> \end{doi}\begin{url}<a href="\format{\url}">URL</a>\end{url} </td>
+</tr>
diff --git a/src/resource/layout/tablerefsabsbib/tablerefsabsbib.begin.layout b/src/resource/layout/tablerefsabsbib/tablerefsabsbib.begin.layout
index 955bcc2..2e5dd47 100644
--- a/src/resource/layout/tablerefsabsbib/tablerefsabsbib.begin.layout
+++ b/src/resource/layout/tablerefsabsbib/tablerefsabsbib.begin.layout
@@ -1,409 +1,409 @@
-<!DOCTYPE HTML>
-<html>
-<head>
-<title>JabRef references</title>
-<meta http-equiv="Content-Type" content="text/html; charset=\encoding">
-<script type="text/javascript">
-<!--
-// QuickSearch script for JabRef HTML export 
-// Version: 3.0
-//
-// Copyright (c) 2006-2011, Mark Schenk
-//
-// This software is distributed under a Creative Commons Attribution 3.0 License
-// http://creativecommons.org/licenses/by/3.0/
-//
-// Features:
-// - intuitive find-as-you-type searching
-//    ~ case insensitive
-//    ~ ignore diacritics (optional)
-//
-// - search with/without Regular Expressions
-// - match BibTeX key
-//
-
-// Search settings
-var searchAbstract = true;	// search in abstract
-var searchReview = true;	// search in review
-
-var noSquiggles = true; 	// ignore diacritics when searching
-var searchRegExp = false; 	// enable RegExp searches
-
-
-if (window.addEventListener) {
-	window.addEventListener("load",initSearch,false); }
-else if (window.attachEvent) {
-	window.attachEvent("onload", initSearch); }
-
-function initSearch() {
-	// check for quick search table and searchfield
-	if (!document.getElementById('qs_table')||!document.getElementById('quicksearch')) { return; }
-
-	// load all the rows and sort into arrays
-	loadTableData();
-	
-	//find the query field
-	qsfield = document.getElementById('qs_field');
-
-	// previous search term; used for speed optimisation
-	prevSearch = '';
-
-	//find statistics location
-	stats = document.getElementById('stat');
-	setStatistics(-1);
-	
-	// set up preferences
-	initPreferences();
-
-	// shows the searchfield
-	document.getElementById('quicksearch').style.display = 'block';
-	document.getElementById('qs_field').onkeyup = quickSearch;
-}
-
-function loadTableData() {
-	// find table and appropriate rows
-	searchTable = document.getElementById('qs_table');
-	var allRows = searchTable.getElementsByTagName('tbody')[0].getElementsByTagName('tr');
-
-	// split all rows into entryRows and infoRows (e.g. abstract, review, bibtex)
-	entryRows = new Array(); infoRows = new Array(); absRows = new Array(); revRows = new Array();
-
-	// get data from each row
-	entryRowsData = new Array(); absRowsData = new Array(); revRowsData = new Array(); 
-	
-	BibTeXKeys = new Array();
-	
-	for (var i=0, k=0, j=0; i<allRows.length;i++) {
-		if (allRows[i].className.match(/entry/)) {
-			entryRows[j] = allRows[i];
-			entryRowsData[j] = stripDiacritics(getTextContent(allRows[i]));
-			allRows[i].id ? BibTeXKeys[j] = allRows[i].id : allRows[i].id = 'autokey_'+j;
-			j ++;
-		} else {
-			infoRows[k++] = allRows[i];
-			// check for abstract/review
-			if (allRows[i].className.match(/abstract/)) {
-				absRows.push(allRows[i]);
-				absRowsData[j-1] = stripDiacritics(getTextContent(allRows[i]));
-			} else if (allRows[i].className.match(/review/)) {
-				revRows.push(allRows[i]);
-				revRowsData[j-1] = stripDiacritics(getTextContent(allRows[i]));
-			}
-		}
-	}
-	//number of entries and rows
-	numEntries = entryRows.length;
-	numInfo = infoRows.length;
-	numAbs = absRows.length;
-	numRev = revRows.length;
-}
-
-function quickSearch(){
-	
-	tInput = qsfield;
-
-	if (tInput.value.length == 0) {
-		showAll();
-		setStatistics(-1);
-		qsfield.className = '';
-		return;
-	} else {
-		t = stripDiacritics(tInput.value);
-
-		if(!searchRegExp) { t = escapeRegExp(t); }
-			
-		// only search for valid RegExp
-		try {
-			textRegExp = new RegExp(t,"i");
-			closeAllInfo();
-			qsfield.className = '';
-		}
-			catch(err) {
-			prevSearch = tInput.value;
-			qsfield.className = 'invalidsearch';
-			return;
-		}
-	}
-	
-	// count number of hits
-	var hits = 0;
-
-	// start looping through all entry rows
-	for (var i = 0; cRow = entryRows[i]; i++){
-
-		// only show search the cells if it isn't already hidden OR if the search term is getting shorter, then search all
-		if(cRow.className.indexOf('noshow')==-1 || tInput.value.length <= prevSearch.length){
-			var found = false; 
-
-			if (entryRowsData[i].search(textRegExp) != -1 || BibTeXKeys[i].search(textRegExp) != -1){ 
-				found = true;
-			} else {
-				if(searchAbstract && absRowsData[i]!=undefined) {
-					if (absRowsData[i].search(textRegExp) != -1){ found=true; } 
-				}
-				if(searchReview && revRowsData[i]!=undefined) {
-					if (revRowsData[i].search(textRegExp) != -1){ found=true; } 
-				}
-			}
-			
-			if (found){
-				cRow.className = 'entry show';
-				hits++;
-			} else {
-				cRow.className = 'entry noshow';
-			}
-		}
-	}
-
-	// update statistics
-	setStatistics(hits)
-	
-	// set previous search value
-	prevSearch = tInput.value;
-}
-
-
-// Strip Diacritics from text
-// http://stackoverflow.com/questions/990904/javascript-remove-accents-in-strings
-
-// String containing replacement characters for stripping accents 
-var stripstring = 
-    'AAAAAAACEEEEIIII'+
-    'DNOOOOO.OUUUUY..'+
-    'aaaaaaaceeeeiiii'+
-    'dnooooo.ouuuuy.y'+
-    'AaAaAaCcCcCcCcDd'+
-    'DdEeEeEeEeEeGgGg'+
-    'GgGgHhHhIiIiIiIi'+
-    'IiIiJjKkkLlLlLlL'+
-    'lJlNnNnNnnNnOoOo'+
-    'OoOoRrRrRrSsSsSs'+
-    'SsTtTtTtUuUuUuUu'+
-    'UuUuWwYyYZzZzZz.';
-
-function stripDiacritics(str){
-
-    if(noSquiggles==false){
-        return str;
-    }
-
-    var answer='';
-    for(var i=0;i<str.length;i++){
-        var ch=str[i];
-        var chindex=ch.charCodeAt(0)-192;   // Index of character code in the strip string
-        if(chindex>=0 && chindex<stripstring.length){
-            // Character is within our table, so we can strip the accent...
-            var outch=stripstring.charAt(chindex);
-            // ...unless it was shown as a '.'
-            if(outch!='.')ch=outch;
-        }
-        answer+=ch;
-    }
-    return answer;
-}
-
-// http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
-// NOTE: must escape every \\ in the export code because of the JabRef Export...
-function escapeRegExp(str) {
-  return str.replace(/[-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, "\\\\$&");
-}
-
-function toggleInfo(articleid,info) {
-
-	var entry = document.getElementById(articleid);
-	var abs = document.getElementById('abs_'+articleid);
-	var rev = document.getElementById('rev_'+articleid);
-	var bib = document.getElementById('bib_'+articleid);
-	
-	if (abs && info == 'abstract') {
-		abs.className.indexOf('noshow') == -1?abs.className = 'abstract noshow':abs.className = 'abstract show';
-	} else if (rev && info == 'review') {
-		rev.className.indexOf('noshow') == -1?rev.className = 'review noshow':rev.className = 'review show';
-	} else if (bib && info == 'bibtex') {
-		bib.className.indexOf('noshow') == -1?bib.className = 'bibtex noshow':bib.className = 'bibtex show';
-	} else { 
-		return;
-	}
-
-	// check if one or the other is available
-	var revshow; var absshow; var bibshow;
-	(abs && abs.className.indexOf('noshow') == -1)? absshow = true: absshow = false;
-	(rev && rev.className.indexOf('noshow') == -1)? revshow = true: revshow = false;	
-	(bib && bib.className.indexOf('noshow') == -1)? bibshow = true: bibshow = false;
-	
-	// highlight original entry
-	if(entry) {
-		if (revshow || absshow || bibshow) {
-		entry.className = 'entry highlight show';
-		} else {
-		entry.className = 'entry show';
-		}
-	}
-	
-	// When there's a combination of abstract/review/bibtex showing, need to add class for correct styling
-	if(absshow) {
-		(revshow||bibshow)?abs.className = 'abstract nextshow':abs.className = 'abstract';
-	} 
-	if (revshow) {
-		bibshow?rev.className = 'review nextshow': rev.className = 'review';
-	}	
-	
-}
-
-function setStatistics (hits) {
-	if(hits < 0) { hits=numEntries; }
-	if(stats) { stats.firstChild.data = hits + '/' + numEntries}
-}
-
-function getTextContent(node) {
-	// Function written by Arve Bersvendsen
-	// http://www.virtuelvis.com
-	
-	if (node.nodeType == 3) {
-	return node.nodeValue;
-	} // text node
-	if (node.nodeType == 1 && node.className != "infolinks") { // element node
-	var text = [];
-	for (var chld = node.firstChild;chld;chld=chld.nextSibling) {
-		text.push(getTextContent(chld));
-	}
-	return text.join("");
-	} return ""; // some other node, won't contain text nodes.
-}
-
-function showAll(){
-	closeAllInfo();
-	for (var i = 0; i < numEntries; i++){ entryRows[i].className = 'entry show'; }
-}
-
-function closeAllInfo(){
-	for (var i=0; i < numInfo; i++){
-		if (infoRows[i].className.indexOf('noshow') ==-1) {
-			infoRows[i].className = infoRows[i].className + ' noshow';
-		}
-	}
-}
-
-function clearQS() {
-	qsfield.value = '';
-	showAll();
-}
-
-function redoQS(){
-	showAll();
-	quickSearch(qsfield);
-}
-
-function updateSetting(obj){
-	var option = obj.id;
-	var checked = obj.value;
-
-	switch(option)
-	 {
-	 case "opt_searchAbs":
-	   searchAbstract=!searchAbstract;
-	   redoQS();
-	   break;
-	 case "opt_searchRev":
-	   searchReview=!searchReview;
-	   redoQS();
-	   break;
-	 case "opt_useRegExp":
-	   searchRegExp=!searchRegExp;
-	   redoQS();
-	   break;
-	 case "opt_noAccents":
-	   noSquiggles=!noSquiggles;
-	   loadTableData();
-	   redoQS();
-	   break;
-	 }
-}
-
-function initPreferences(){
-	if(searchAbstract){document.getElementById("opt_searchAbs").checked = true;}
-	if(searchReview){document.getElementById("opt_searchRev").checked = true;}
-	if(noSquiggles){document.getElementById("opt_noAccents").checked = true;}
-	if(searchRegExp){document.getElementById("opt_useRegExp").checked = true;}
-	
-	if(numAbs==0) {document.getElementById("opt_searchAbs").parentNode.style.display = 'none';}
-	if(numRev==0) {document.getElementById("opt_searchRev").parentNode.style.display = 'none';}
-}
-
-function toggleSettings(){
-	var togglebutton = document.getElementById('showsettings');
-	var settings = document.getElementById('settings');
-	
-	if(settings.className == "hidden"){
-		settings.className = "show";
-		togglebutton.innerText = "close settings";
-		togglebutton.textContent = "close settings";
-	}else{
-		settings.className = "hidden";
-		togglebutton.innerText = "settings...";		
-		togglebutton.textContent = "settings...";
-	}
-}
-
--->
-</script>
-<style type="text/css">
-body { background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 1.2; padding: 1em; color: #2E2E2E; margin: auto 2em; }
-
-form#quicksearch { width: auto; border-style: solid; border-color: gray; border-width: 1px 0px; padding: 0.7em 0.5em; display:none; position:relative; }
-span#searchstat {padding-left: 1em;}
-
-div#settings { margin-top:0.7em; /* border-bottom: 1px transparent solid; background-color: #efefef; border: 1px grey solid; */ }
-div#settings ul {margin: 0; padding: 0; }
-div#settings li {margin: 0; padding: 0 1em 0 0; display: inline; list-style: none; }
-div#settings li + li { border-left: 2px #efefef solid; padding-left: 0.5em;}
-div#settings input { margin-bottom: 0px;}
-
-div#settings.hidden {display:none;}
-
-#showsettings { border: 1px grey solid; padding: 0 0.5em; float:right; line-height: 1.6em; text-align: right; }
-#showsettings:hover { cursor: pointer; }
-
-.invalidsearch { background-color: red; }
-input[type="button"] { background-color: #efefef; border: 1px #2E2E2E solid;}
-
-table { width: 100%; empty-cells: show; border-spacing: 0em 0.2em; margin: 1em 0em; border-style: none; }
-th, td { border: 1px gray solid; border-width: 1px 1px; padding: 0.5em; vertical-align: top; text-align: left; }
-th { background-color: #efefef; }
-td + td, th + th { border-left: none; }
-
-td a { color: navy; text-decoration: none; }
-td a:hover  { text-decoration: underline; }
-
-tr.noshow { display: none;}
-tr.highlight td { background-color: #EFEFEF; border-top: 2px #2E2E2E solid; font-weight: bold; }
-tr.abstract td, tr.review td, tr.bibtex td { background-color: #EFEFEF; text-align: justify; border-bottom: 2px #2E2E2E solid; }
-tr.nextshow td { border-bottom: 1px gray solid; }
-
-tr.bibtex pre { width: 100%; overflow: auto; white-space: pre-wrap;}
-p.infolinks { margin: 0.3em 0em 0em 0em; padding: 0px; }
-
- at media print {
-	p.infolinks, #qs_settings, #quicksearch, t.bibtex { display: none !important; }
-	tr { page-break-inside: avoid; }
-}
-</style>
-</head>
-<body>
-
-<form action="" id="quicksearch">
-<input type="text" id="qs_field" autocomplete="off" placeholder="Type to search..." /> <input type="button" onclick="clearQS()" value="clear" />
-<span id="searchstat">Matching entries: <span id="stat">0</span></span>
-<div id="showsettings" onclick="toggleSettings()">settings...</div>
-<div id="settings" class="hidden">
-<ul>
-<li><input type="checkbox" class="search_setting" id="opt_searchAbs" onchange="updateSetting(this)"><label for="opt_searchAbs"> include abstract</label></li>
-<li><input type="checkbox" class="search_setting" id="opt_searchRev" onchange="updateSetting(this)"><label for="opt_searchRev"> include review</label></li>
-<li><input type="checkbox" class="search_setting" id="opt_useRegExp" onchange="updateSetting(this)"><label for="opt_useRegExp"> use RegExp</label></li>
-<li><input type="checkbox" class="search_setting" id="opt_noAccents" onchange="updateSetting(this)"><label for="opt_noAccents"> ignore accents</label></li>
-</ul>
-</div>
-</form>
-<table id="qs_table" border="1">
-<thead><tr><th width="20%">Author</th><th width="30%">Title</th><th width="5%">Year</th><th width="30%">Journal/Proceedings</th><th width="10%">Reftype</th><th width="5%">DOI/URL</th></tr></thead>
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>JabRef references</title>
+<meta http-equiv="Content-Type" content="text/html; charset=\encoding">
+<script type="text/javascript">
+<!--
+// QuickSearch script for JabRef HTML export 
+// Version: 3.0
+//
+// Copyright (c) 2006-2011, Mark Schenk
+//
+// This software is distributed under a Creative Commons Attribution 3.0 License
+// http://creativecommons.org/licenses/by/3.0/
+//
+// Features:
+// - intuitive find-as-you-type searching
+//    ~ case insensitive
+//    ~ ignore diacritics (optional)
+//
+// - search with/without Regular Expressions
+// - match BibTeX key
+//
+
+// Search settings
+var searchAbstract = true;	// search in abstract
+var searchReview = true;	// search in review
+
+var noSquiggles = true; 	// ignore diacritics when searching
+var searchRegExp = false; 	// enable RegExp searches
+
+
+if (window.addEventListener) {
+	window.addEventListener("load",initSearch,false); }
+else if (window.attachEvent) {
+	window.attachEvent("onload", initSearch); }
+
+function initSearch() {
+	// check for quick search table and searchfield
+	if (!document.getElementById('qs_table')||!document.getElementById('quicksearch')) { return; }
+
+	// load all the rows and sort into arrays
+	loadTableData();
+	
+	//find the query field
+	qsfield = document.getElementById('qs_field');
+
+	// previous search term; used for speed optimisation
+	prevSearch = '';
+
+	//find statistics location
+	stats = document.getElementById('stat');
+	setStatistics(-1);
+	
+	// set up preferences
+	initPreferences();
+
+	// shows the searchfield
+	document.getElementById('quicksearch').style.display = 'block';
+	document.getElementById('qs_field').onkeyup = quickSearch;
+}
+
+function loadTableData() {
+	// find table and appropriate rows
+	searchTable = document.getElementById('qs_table');
+	var allRows = searchTable.getElementsByTagName('tbody')[0].getElementsByTagName('tr');
+
+	// split all rows into entryRows and infoRows (e.g. abstract, review, bibtex)
+	entryRows = new Array(); infoRows = new Array(); absRows = new Array(); revRows = new Array();
+
+	// get data from each row
+	entryRowsData = new Array(); absRowsData = new Array(); revRowsData = new Array(); 
+	
+	BibTeXKeys = new Array();
+	
+	for (var i=0, k=0, j=0; i<allRows.length;i++) {
+		if (allRows[i].className.match(/entry/)) {
+			entryRows[j] = allRows[i];
+			entryRowsData[j] = stripDiacritics(getTextContent(allRows[i]));
+			allRows[i].id ? BibTeXKeys[j] = allRows[i].id : allRows[i].id = 'autokey_'+j;
+			j ++;
+		} else {
+			infoRows[k++] = allRows[i];
+			// check for abstract/review
+			if (allRows[i].className.match(/abstract/)) {
+				absRows.push(allRows[i]);
+				absRowsData[j-1] = stripDiacritics(getTextContent(allRows[i]));
+			} else if (allRows[i].className.match(/review/)) {
+				revRows.push(allRows[i]);
+				revRowsData[j-1] = stripDiacritics(getTextContent(allRows[i]));
+			}
+		}
+	}
+	//number of entries and rows
+	numEntries = entryRows.length;
+	numInfo = infoRows.length;
+	numAbs = absRows.length;
+	numRev = revRows.length;
+}
+
+function quickSearch(){
+	
+	tInput = qsfield;
+
+	if (tInput.value.length == 0) {
+		showAll();
+		setStatistics(-1);
+		qsfield.className = '';
+		return;
+	} else {
+		t = stripDiacritics(tInput.value);
+
+		if(!searchRegExp) { t = escapeRegExp(t); }
+			
+		// only search for valid RegExp
+		try {
+			textRegExp = new RegExp(t,"i");
+			closeAllInfo();
+			qsfield.className = '';
+		}
+			catch(err) {
+			prevSearch = tInput.value;
+			qsfield.className = 'invalidsearch';
+			return;
+		}
+	}
+	
+	// count number of hits
+	var hits = 0;
+
+	// start looping through all entry rows
+	for (var i = 0; cRow = entryRows[i]; i++){
+
+		// only show search the cells if it isn't already hidden OR if the search term is getting shorter, then search all
+		if(cRow.className.indexOf('noshow')==-1 || tInput.value.length <= prevSearch.length){
+			var found = false; 
+
+			if (entryRowsData[i].search(textRegExp) != -1 || BibTeXKeys[i].search(textRegExp) != -1){ 
+				found = true;
+			} else {
+				if(searchAbstract && absRowsData[i]!=undefined) {
+					if (absRowsData[i].search(textRegExp) != -1){ found=true; } 
+				}
+				if(searchReview && revRowsData[i]!=undefined) {
+					if (revRowsData[i].search(textRegExp) != -1){ found=true; } 
+				}
+			}
+			
+			if (found){
+				cRow.className = 'entry show';
+				hits++;
+			} else {
+				cRow.className = 'entry noshow';
+			}
+		}
+	}
+
+	// update statistics
+	setStatistics(hits)
+	
+	// set previous search value
+	prevSearch = tInput.value;
+}
+
+
+// Strip Diacritics from text
+// http://stackoverflow.com/questions/990904/javascript-remove-accents-in-strings
+
+// String containing replacement characters for stripping accents 
+var stripstring = 
+    'AAAAAAACEEEEIIII'+
+    'DNOOOOO.OUUUUY..'+
+    'aaaaaaaceeeeiiii'+
+    'dnooooo.ouuuuy.y'+
+    'AaAaAaCcCcCcCcDd'+
+    'DdEeEeEeEeEeGgGg'+
+    'GgGgHhHhIiIiIiIi'+
+    'IiIiJjKkkLlLlLlL'+
+    'lJlNnNnNnnNnOoOo'+
+    'OoOoRrRrRrSsSsSs'+
+    'SsTtTtTtUuUuUuUu'+
+    'UuUuWwYyYZzZzZz.';
+
+function stripDiacritics(str){
+
+    if(noSquiggles==false){
+        return str;
+    }
+
+    var answer='';
+    for(var i=0;i<str.length;i++){
+        var ch=str[i];
+        var chindex=ch.charCodeAt(0)-192;   // Index of character code in the strip string
+        if(chindex>=0 && chindex<stripstring.length){
+            // Character is within our table, so we can strip the accent...
+            var outch=stripstring.charAt(chindex);
+            // ...unless it was shown as a '.'
+            if(outch!='.')ch=outch;
+        }
+        answer+=ch;
+    }
+    return answer;
+}
+
+// http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
+// NOTE: must escape every \\ in the export code because of the JabRef Export...
+function escapeRegExp(str) {
+  return str.replace(/[-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, "\\\\$&");
+}
+
+function toggleInfo(articleid,info) {
+
+	var entry = document.getElementById(articleid);
+	var abs = document.getElementById('abs_'+articleid);
+	var rev = document.getElementById('rev_'+articleid);
+	var bib = document.getElementById('bib_'+articleid);
+	
+	if (abs && info == 'abstract') {
+		abs.className.indexOf('noshow') == -1?abs.className = 'abstract noshow':abs.className = 'abstract show';
+	} else if (rev && info == 'review') {
+		rev.className.indexOf('noshow') == -1?rev.className = 'review noshow':rev.className = 'review show';
+	} else if (bib && info == 'bibtex') {
+		bib.className.indexOf('noshow') == -1?bib.className = 'bibtex noshow':bib.className = 'bibtex show';
+	} else { 
+		return;
+	}
+
+	// check if one or the other is available
+	var revshow; var absshow; var bibshow;
+	(abs && abs.className.indexOf('noshow') == -1)? absshow = true: absshow = false;
+	(rev && rev.className.indexOf('noshow') == -1)? revshow = true: revshow = false;	
+	(bib && bib.className.indexOf('noshow') == -1)? bibshow = true: bibshow = false;
+	
+	// highlight original entry
+	if(entry) {
+		if (revshow || absshow || bibshow) {
+		entry.className = 'entry highlight show';
+		} else {
+		entry.className = 'entry show';
+		}
+	}
+	
+	// When there's a combination of abstract/review/bibtex showing, need to add class for correct styling
+	if(absshow) {
+		(revshow||bibshow)?abs.className = 'abstract nextshow':abs.className = 'abstract';
+	} 
+	if (revshow) {
+		bibshow?rev.className = 'review nextshow': rev.className = 'review';
+	}	
+	
+}
+
+function setStatistics (hits) {
+	if(hits < 0) { hits=numEntries; }
+	if(stats) { stats.firstChild.data = hits + '/' + numEntries}
+}
+
+function getTextContent(node) {
+	// Function written by Arve Bersvendsen
+	// http://www.virtuelvis.com
+	
+	if (node.nodeType == 3) {
+	return node.nodeValue;
+	} // text node
+	if (node.nodeType == 1 && node.className != "infolinks") { // element node
+	var text = [];
+	for (var chld = node.firstChild;chld;chld=chld.nextSibling) {
+		text.push(getTextContent(chld));
+	}
+	return text.join("");
+	} return ""; // some other node, won't contain text nodes.
+}
+
+function showAll(){
+	closeAllInfo();
+	for (var i = 0; i < numEntries; i++){ entryRows[i].className = 'entry show'; }
+}
+
+function closeAllInfo(){
+	for (var i=0; i < numInfo; i++){
+		if (infoRows[i].className.indexOf('noshow') ==-1) {
+			infoRows[i].className = infoRows[i].className + ' noshow';
+		}
+	}
+}
+
+function clearQS() {
+	qsfield.value = '';
+	showAll();
+}
+
+function redoQS(){
+	showAll();
+	quickSearch(qsfield);
+}
+
+function updateSetting(obj){
+	var option = obj.id;
+	var checked = obj.value;
+
+	switch(option)
+	 {
+	 case "opt_searchAbs":
+	   searchAbstract=!searchAbstract;
+	   redoQS();
+	   break;
+	 case "opt_searchRev":
+	   searchReview=!searchReview;
+	   redoQS();
+	   break;
+	 case "opt_useRegExp":
+	   searchRegExp=!searchRegExp;
+	   redoQS();
+	   break;
+	 case "opt_noAccents":
+	   noSquiggles=!noSquiggles;
+	   loadTableData();
+	   redoQS();
+	   break;
+	 }
+}
+
+function initPreferences(){
+	if(searchAbstract){document.getElementById("opt_searchAbs").checked = true;}
+	if(searchReview){document.getElementById("opt_searchRev").checked = true;}
+	if(noSquiggles){document.getElementById("opt_noAccents").checked = true;}
+	if(searchRegExp){document.getElementById("opt_useRegExp").checked = true;}
+	
+	if(numAbs==0) {document.getElementById("opt_searchAbs").parentNode.style.display = 'none';}
+	if(numRev==0) {document.getElementById("opt_searchRev").parentNode.style.display = 'none';}
+}
+
+function toggleSettings(){
+	var togglebutton = document.getElementById('showsettings');
+	var settings = document.getElementById('settings');
+	
+	if(settings.className == "hidden"){
+		settings.className = "show";
+		togglebutton.innerText = "close settings";
+		togglebutton.textContent = "close settings";
+	}else{
+		settings.className = "hidden";
+		togglebutton.innerText = "settings...";		
+		togglebutton.textContent = "settings...";
+	}
+}
+
+-->
+</script>
+<style type="text/css">
+body { background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 1.2; padding: 1em; color: #2E2E2E; margin: auto 2em; }
+
+form#quicksearch { width: auto; border-style: solid; border-color: gray; border-width: 1px 0px; padding: 0.7em 0.5em; display:none; position:relative; }
+span#searchstat {padding-left: 1em;}
+
+div#settings { margin-top:0.7em; /* border-bottom: 1px transparent solid; background-color: #efefef; border: 1px grey solid; */ }
+div#settings ul {margin: 0; padding: 0; }
+div#settings li {margin: 0; padding: 0 1em 0 0; display: inline; list-style: none; }
+div#settings li + li { border-left: 2px #efefef solid; padding-left: 0.5em;}
+div#settings input { margin-bottom: 0px;}
+
+div#settings.hidden {display:none;}
+
+#showsettings { border: 1px grey solid; padding: 0 0.5em; float:right; line-height: 1.6em; text-align: right; }
+#showsettings:hover { cursor: pointer; }
+
+.invalidsearch { background-color: red; }
+input[type="button"] { background-color: #efefef; border: 1px #2E2E2E solid;}
+
+table { width: 100%; empty-cells: show; border-spacing: 0em 0.2em; margin: 1em 0em; border-style: none; }
+th, td { border: 1px gray solid; border-width: 1px 1px; padding: 0.5em; vertical-align: top; text-align: left; }
+th { background-color: #efefef; }
+td + td, th + th { border-left: none; }
+
+td a { color: navy; text-decoration: none; }
+td a:hover  { text-decoration: underline; }
+
+tr.noshow { display: none;}
+tr.highlight td { background-color: #EFEFEF; border-top: 2px #2E2E2E solid; font-weight: bold; }
+tr.abstract td, tr.review td, tr.bibtex td { background-color: #EFEFEF; text-align: justify; border-bottom: 2px #2E2E2E solid; }
+tr.nextshow td { border-bottom: 1px gray solid; }
+
+tr.bibtex pre { width: 100%; overflow: auto; white-space: pre-wrap;}
+p.infolinks { margin: 0.3em 0em 0em 0em; padding: 0px; }
+
+ at media print {
+	p.infolinks, #qs_settings, #quicksearch, t.bibtex { display: none !important; }
+	tr { page-break-inside: avoid; }
+}
+</style>
+</head>
+<body>
+
+<form action="" id="quicksearch">
+<input type="text" id="qs_field" autocomplete="off" placeholder="Type to search..." /> <input type="button" onclick="clearQS()" value="clear" />
+<span id="searchstat">Matching entries: <span id="stat">0</span></span>
+<div id="showsettings" onclick="toggleSettings()">settings...</div>
+<div id="settings" class="hidden">
+<ul>
+<li><input type="checkbox" class="search_setting" id="opt_searchAbs" onchange="updateSetting(this)"><label for="opt_searchAbs"> include abstract</label></li>
+<li><input type="checkbox" class="search_setting" id="opt_searchRev" onchange="updateSetting(this)"><label for="opt_searchRev"> include review</label></li>
+<li><input type="checkbox" class="search_setting" id="opt_useRegExp" onchange="updateSetting(this)"><label for="opt_useRegExp"> use RegExp</label></li>
+<li><input type="checkbox" class="search_setting" id="opt_noAccents" onchange="updateSetting(this)"><label for="opt_noAccents"> ignore accents</label></li>
+</ul>
+</div>
+</form>
+<table id="qs_table" border="1">
+<thead><tr><th width="20%">Author</th><th width="30%">Title</th><th width="5%">Year</th><th width="30%">Journal/Proceedings</th><th width="10%">Reftype</th><th width="5%">DOI/URL</th></tr></thead>
 <tbody>
\ No newline at end of file
diff --git a/src/resource/layout/tablerefsabsbib/tablerefsabsbib.end.layout b/src/resource/layout/tablerefsabsbib/tablerefsabsbib.end.layout
index b3b7bb8..11ef871 100644
--- a/src/resource/layout/tablerefsabsbib/tablerefsabsbib.end.layout
+++ b/src/resource/layout/tablerefsabsbib/tablerefsabsbib.end.layout
@@ -1,8 +1,8 @@
-</tbody>
-</table>
-<footer>
- <small>Created by <a href="http://jabref.sourceforge.net">JabRef</a> on \format[CurrentDate]{dd/MM/yyyy}.</small>
-</footer>
-<!-- file generated by JabRef -->
-</body>
+</tbody>
+</table>
+<footer>
+ <small>Created by <a href="http://jabref.sourceforge.net">JabRef</a> on \format[CurrentDate]{dd/MM/yyyy}.</small>
+</footer>
+<!-- file generated by JabRef -->
+</body>
 </html>
\ No newline at end of file
diff --git a/src/resource/layout/tablerefsabsbib/tablerefsabsbib.layout b/src/resource/layout/tablerefsabsbib/tablerefsabsbib.layout
index 56d205b..e4f82c9 100644
--- a/src/resource/layout/tablerefsabsbib/tablerefsabsbib.layout
+++ b/src/resource/layout/tablerefsabsbib/tablerefsabsbib.layout
@@ -1,35 +1,35 @@
-<tr id="\format{\bibtexkey}" class="entry">
-	<td>\format[Authors(LastFirst,InitialsNoSpace),HTMLChars]{\author}</td>
-	<td>\format[HTMLChars]{\title} <p class="infolinks">\begin{abstract}[<a href="javascript:toggleInfo('\format{\bibtexkey}','abstract')">Abstract</a>] \end{abstract}\begin{review}[<a href="javascript:toggleInfo('\format{\bibtexkey}','review')">Review</a>] \end{review}[<a href="javascript:toggleInfo('\format{\bibtexkey}','bibtex')">BibTeX</a>]</p></td>
-	<td>\year</td>
-	<td>\format[HTMLChars]{\journal}\begin{volume}<br/>Vol. \volume\end{volume}\begin{number}(\format[FormatPagesForHTML]{\number})\end{number}\format[HTMLChars]{\booktitle}\begin{pages}, pp. \format[FormatPagesForHTML]{\pages}\end{pages}\begin{school}<i>School</i>: \format[HTMLChars]{\school}\end{school}\begin{howpublished}\format[HTMLChars]{\howpublished}\end{howpublished} </td>
-	<td>\format[ToLowerCase]{\bibtextype}</td>
-	<td>\begin{doi}<a href="\format[DOICheck]{\doi}">DOI</a> \end{doi}\begin{url}<a href="\format{\url}">URL</a>\end{url} </td>
-</tr>\begin{abstract}
-<tr id="abs_\format{\bibtexkey}" class="abstract noshow">
-	<td colspan="6"><b>Abstract</b>: \format[HTMLChars]{\abstract}</td>
-</tr>\end{abstract}\begin{review}
-<tr id="rev_\format{\bibtexkey}" class="review noshow">
-	<td colspan="6"><b>Review</b>: \format[HTMLChars]{\review}</td>
-</tr>\end{review}
-<tr id="bib_\format{\bibtexkey}" class="bibtex noshow">
-<td colspan="6"><b>BibTeX</b>:
-<pre>
-@\format[ToLowerCase]{\bibtextype}{\bibtexkey,\begin{author}
-  author = {\format[HTMLChars]{\author}}\end{author}\begin{title},
-  title = {\format[HTMLChars]{\title}}\end{title}\begin{booktitle},
-  booktitle = {\format[HTMLChars]{\booktitle}}\end{booktitle}\begin{journal},
-  journal = {\format[HTMLChars]{\journal}}\end{journal}\begin{publisher},
-  publisher = {\format[HTMLChars]{\publisher}}\end{publisher}\begin{school},
-  school = {\format[HTMLChars]{\school}}\end{school}\begin{year},
-  year = {\format[HTMLChars]{\year}}\end{year}\begin{volume},
-  volume = {\format[HTMLChars]{\volume}}\end{volume}\begin{number},
-  number = {\format[HTMLChars]{\number}}\end{number}\begin{pages},
-  pages = {\format[HTMLChars]{\pages}}\end{pages}\begin{edition},
-  edition = {\format[HTMLChars]{\edition}}\end{edition}\begin{note},
-  note = {\format[HTMLChars]{\note}}\end{note}\begin{url},
-  url = {\format[HTMLChars]{\url}}\end{url}\begin{doi},
-  doi = {\format[DOICheck]{\doi}}\end{doi}
-}
-</pre></td>
-</tr>
+<tr id="\format{\bibtexkey}" class="entry">
+	<td>\format[Authors(LastFirst,InitialsNoSpace),HTMLChars]{\author}</td>
+	<td>\format[HTMLChars]{\title} <p class="infolinks">\begin{abstract}[<a href="javascript:toggleInfo('\format{\bibtexkey}','abstract')">Abstract</a>] \end{abstract}\begin{review}[<a href="javascript:toggleInfo('\format{\bibtexkey}','review')">Review</a>] \end{review}[<a href="javascript:toggleInfo('\format{\bibtexkey}','bibtex')">BibTeX</a>]</p></td>
+	<td>\year</td>
+	<td>\format[HTMLChars]{\journal}\begin{volume}<br/>Vol. \volume\end{volume}\begin{number}(\format[FormatPagesForHTML]{\number})\end{number}\format[HTMLChars]{\booktitle}\begin{pages}, pp. \format[FormatPagesForHTML]{\pages}\end{pages}\begin{school}<i>School</i>: \format[HTMLChars]{\school}\end{school}\begin{howpublished}\format[HTMLChars]{\howpublished}\end{howpublished} </td>
+	<td>\format[ToLowerCase]{\bibtextype}</td>
+	<td>\begin{doi}<a href="\format[DOICheck]{\doi}">DOI</a> \end{doi}\begin{url}<a href="\format{\url}">URL</a>\end{url} </td>
+</tr>\begin{abstract}
+<tr id="abs_\format{\bibtexkey}" class="abstract noshow">
+	<td colspan="6"><b>Abstract</b>: \format[HTMLChars]{\abstract}</td>
+</tr>\end{abstract}\begin{review}
+<tr id="rev_\format{\bibtexkey}" class="review noshow">
+	<td colspan="6"><b>Review</b>: \format[HTMLChars]{\review}</td>
+</tr>\end{review}
+<tr id="bib_\format{\bibtexkey}" class="bibtex noshow">
+<td colspan="6"><b>BibTeX</b>:
+<pre>
+@\format[ToLowerCase]{\bibtextype}{\bibtexkey,\begin{author}
+  author = {\format[HTMLChars]{\author}}\end{author}\begin{title},
+  title = {\format[HTMLChars]{\title}}\end{title}\begin{booktitle},
+  booktitle = {\format[HTMLChars]{\booktitle}}\end{booktitle}\begin{journal},
+  journal = {\format[HTMLChars]{\journal}}\end{journal}\begin{publisher},
+  publisher = {\format[HTMLChars]{\publisher}}\end{publisher}\begin{school},
+  school = {\format[HTMLChars]{\school}}\end{school}\begin{year},
+  year = {\format[HTMLChars]{\year}}\end{year}\begin{volume},
+  volume = {\format[HTMLChars]{\volume}}\end{volume}\begin{number},
+  number = {\format[HTMLChars]{\number}}\end{number}\begin{pages},
+  pages = {\format[HTMLChars]{\pages}}\end{pages}\begin{edition},
+  edition = {\format[HTMLChars]{\edition}}\end{edition}\begin{note},
+  note = {\format[HTMLChars]{\note}}\end{note}\begin{url},
+  url = {\format[HTMLChars]{\url}}\end{url}\begin{doi},
+  doi = {\format[DOICheck]{\doi}}\end{doi}
+}
+</pre></td>
+</tr>
diff --git a/src/resource/layout/text.layout b/src/resource/layout/text.layout
old mode 100755
new mode 100644
index 525cab8..f3637cd
--- a/src/resource/layout/text.layout
+++ b/src/resource/layout/text.layout
@@ -1,10 +1,10 @@
-@\bibtextype{\bibtexkey,
-\begin{author}  author = {\author},\end{author}
-\begin{title}  title  = {\format[RemoveBrackets]{\title}},\end{title}
-\begin{journal}  journal = {\journal},\end{journal}
-  year   = {\year},
-  number = {\number},
-  url    = {\url},
-\begin{doi}  doi = {\doi},\end{doi}
-  const  = {\\ text}
-}
+@\bibtextype{\bibtexkey,
+\begin{author}  author = {\author},\end{author}
+\begin{title}  title  = {\format[RemoveBrackets]{\title}},\end{title}
+\begin{journal}  journal = {\journal},\end{journal}
+  year   = {\year},
+  number = {\number},
+  url    = {\url},
+\begin{doi}  doi = {\doi},\end{doi}
+  const  = {\\ text}
+}
diff --git a/src/resource/log4j.properties b/src/resource/log4j.properties
index c596db8..d9a4e35 100644
--- a/src/resource/log4j.properties
+++ b/src/resource/log4j.properties
@@ -1,7 +1,7 @@
-#Uncomment next line for debugging
-#log4j.rootCategory=ALL,stderr
-log4j.rootCategory=WARN,stderr
-log4j.appender.stderr=org.apache.log4j.ConsoleAppender
-log4j.appender.stderr.target=System.err
-log4j.appender.stderr.layout=org.apache.log4j.PatternLayout
+#Uncomment next line for debugging
+#log4j.rootCategory=ALL,stderr
+log4j.rootCategory=WARN,stderr
+log4j.appender.stderr=org.apache.log4j.ConsoleAppender
+log4j.appender.stderr.target=System.err
+log4j.appender.stderr.layout=org.apache.log4j.PatternLayout
 log4j.appender.stderr.layout.ConversionPattern=[%d{ABSOLUTE}] <%t> %5p (%c{2}:%L) %m%n
\ No newline at end of file
diff --git a/src/resource/ods/manifest.xml b/src/resource/ods/manifest.xml
index 745c622..7e1931c 100644
--- a/src/resource/ods/manifest.xml
+++ b/src/resource/ods/manifest.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
-<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
- <manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.spreadsheet" manifest:full-path="/"/>
- <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/>
- <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="meta.xml"/>
- <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="settings.xml"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
+<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
+ <manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.spreadsheet" manifest:full-path="/"/>
+ <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/>
+ <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="meta.xml"/>
+ <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="settings.xml"/>
 </manifest:manifest>
\ No newline at end of file
diff --git a/src/resource/ods/meta.xml b/src/resource/ods/meta.xml
index 043813a..c421b21 100644
--- a/src/resource/ods/meta.xml
+++ b/src/resource/ods/meta.xml
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" office:version="1.0">
- <office:meta>
-  <meta:generator>JabRef version @version@
-  </meta:generator>
-<!--  <meta:creation-date>2005-11-01T22:55:38</meta:creation-date>  <dc:date>2005-11-01T22:59:26</dc:date>  <dc:language>en-US</dc:language>  <meta:editing-cycles>3</meta:editing-cycles>  <meta:editing-duration>PT3M50S</meta:editing-duration>-->
-  <meta:user-defined meta:name="Info 1"/>
-  <meta:user-defined meta:name="Info 2"/>
-  <meta:user-defined meta:name="Info 3"/>
-  <meta:user-defined meta:name="Info 4"/>
-<!--  <meta:document-statistic meta:table-count="3" meta:cell-count="4"/>-->
- </office:meta>
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" office:version="1.0">
+ <office:meta>
+  <meta:generator>JabRef version @version@
+  </meta:generator>
+<!--  <meta:creation-date>2005-11-01T22:55:38</meta:creation-date>  <dc:date>2005-11-01T22:59:26</dc:date>  <dc:language>en-US</dc:language>  <meta:editing-cycles>3</meta:editing-cycles>  <meta:editing-duration>PT3M50S</meta:editing-duration>-->
+  <meta:user-defined meta:name="Info 1"/>
+  <meta:user-defined meta:name="Info 2"/>
+  <meta:user-defined meta:name="Info 3"/>
+  <meta:user-defined meta:name="Info 4"/>
+<!--  <meta:document-statistic meta:table-count="3" meta:cell-count="4"/>-->
+ </office:meta>
 </office:document-meta>
\ No newline at end of file
diff --git a/src/resource/ods/settings.xml b/src/resource/ods/settings.xml
index 711c200..4d7fb0c 100644
--- a/src/resource/ods/settings.xml
+++ b/src/resource/ods/settings.xml
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<office:document-settings xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" office:version="1.0">
-
-
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document-settings xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" office:version="1.0">
+
+
 </office:document-settings>
\ No newline at end of file
diff --git a/src/resource/openoffice/default_authoryear.jstyle b/src/resource/openoffice/default_authoryear.jstyle
index dca7b18..9cc2746 100644
--- a/src/resource/openoffice/default_authoryear.jstyle
+++ b/src/resource/openoffice/default_authoryear.jstyle
@@ -1,56 +1,56 @@
-# Written by Morten O. Alver.
-# This file is licensed under the terms of the GPL version 2 (or later).
-
-NAME
-Example style file for JabRef-oo plugin.
-
-JOURNALS
-Journal name 1
-Journal name 2
-
-PROPERTIES
-Title="References"
-IsSortByPosition="false"
-IsNumberEntries="false"
-ReferenceParagraphFormat="Text body"
-ReferenceHeaderParagraphFormat="Heading 2"
-
-CITATION
-BibtexKeyCitations=false
-AuthorField="author/editor"
-YearField="year"
-MaxAuthors="2"
-MaxAuthorsFirst="6"
-AuthorSeparator=","
-AuthorLastSeparator=" & "
-AuthorLastSeparatorInText=" and "
-EtAlString=" et al."
-ItalicEtAl="false"
-YearSeparator=" "
-InTextYearSeparator=" "
-BracketBefore="["
-BracketAfter="]"
-BracketBeforeInList="["
-BracketAfterInList="] "
-CitationSeparator="; "
-UniquefierSeparator=","
-GroupedNumbersSeparator="-"
-MinimumGroupingCount="3"
-FormatCitations="false"
-CitationCharacterFormat="Default"
-MultiCiteChronological="true"
-PageInfoSeparator="; "
-
-LAYOUT
-article=<b>\format[Authors(LastFirst,Semicolon)]{\author}</b> (<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} : \format[FormatPagesForHTML]{\pages}\end{pages}.
-
-book=\format[Authors(LastFirst,Semicolon)]{\author}\begin{editor}\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.)\end{editor}, <b>\year\uniq</b>. <i>\title</i>. \publisher, \address.
-
-incollection=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\title</i>. In: \format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\booktitle</i>, \publisher.
-
-inbook=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\chapter</i>. In: \format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\title</i>, \publisher.
-
-phdthesis=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\title</i>, \school.
-
-default=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} : \format[FormatPagesForHTML]{\pages}\end{pages}.
-
+# Written by Morten O. Alver.
+# This file is licensed under the terms of the GPL version 2 (or later).
+
+NAME
+Example style file for JabRef-oo plugin.
+
+JOURNALS
+Journal name 1
+Journal name 2
+
+PROPERTIES
+Title="References"
+IsSortByPosition="false"
+IsNumberEntries="false"
+ReferenceParagraphFormat="Text body"
+ReferenceHeaderParagraphFormat="Heading 2"
+
+CITATION
+BibtexKeyCitations=false
+AuthorField="author/editor"
+YearField="year"
+MaxAuthors="2"
+MaxAuthorsFirst="6"
+AuthorSeparator=","
+AuthorLastSeparator=" & "
+AuthorLastSeparatorInText=" and "
+EtAlString=" et al."
+ItalicEtAl="false"
+YearSeparator=" "
+InTextYearSeparator=" "
+BracketBefore="["
+BracketAfter="]"
+BracketBeforeInList="["
+BracketAfterInList="] "
+CitationSeparator="; "
+UniquefierSeparator=","
+GroupedNumbersSeparator="-"
+MinimumGroupingCount="3"
+FormatCitations="false"
+CitationCharacterFormat="Default"
+MultiCiteChronological="true"
+PageInfoSeparator="; "
+
+LAYOUT
+article=<b>\format[Authors(LastFirst,Semicolon)]{\author}</b> (<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} : \format[FormatPagesForHTML]{\pages}\end{pages}.
+
+book=\format[Authors(LastFirst,Semicolon)]{\author}\begin{editor}\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.)\end{editor}, <b>\year\uniq</b>. <i>\title</i>. \publisher, \address.
+
+incollection=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\title</i>. In: \format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\booktitle</i>, \publisher.
+
+inbook=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\chapter</i>. In: \format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\title</i>, \publisher.
+
+phdthesis=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\title</i>, \school.
+
+default=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} : \format[FormatPagesForHTML]{\pages}\end{pages}.
+
diff --git a/src/resource/openoffice/default_numerical.jstyle b/src/resource/openoffice/default_numerical.jstyle
index 3e2bbba..3ff568b 100644
--- a/src/resource/openoffice/default_numerical.jstyle
+++ b/src/resource/openoffice/default_numerical.jstyle
@@ -1,42 +1,42 @@
-# Written by Morten O. Alver.
-# This file is licensed under the terms of the GPL version 2 (or later).
-
-NAME
-Example style file for JabRef-oo plugin.
-
-JOURNALS
-Journal name 1
-Journal name 2
-
-PROPERTIES
-Title="References"
-IsSortByPosition="true"
-IsNumberEntries="true"
-ReferenceParagraphFormat="Text body"
-ReferenceHeaderParagraphFormat="Heading 2"
-
-CITATION
-BracketBefore="["
-BracketAfter="]"
-BracketBeforeInList="["
-BracketAfterInList="] "
-CitationSeparator="; "
-UniquefierSeparator=","
-GroupedNumbersSeparator="-"
-MinimumGroupingCount="3"
-FormatCitations="false"
-CitationCharacterFormat="Default"
-PageInfoSeparator="; "
-
-LAYOUT
-article=<b>\format[Authors(LastFirst,Semicolon)]{\author}</b> (<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} : \format[FormatPagesForHTML]{\pages}\end{pages}.
-
-book=\format[Authors(LastFirst,Semicolon)]{\author}\begin{editor}\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.)\end{editor}, <b>\year\uniq</b>. <i>\title</i>. \publisher, \address.
-
-incollection=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\title</i>. In: \format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\booktitle</i>, \publisher.
-
-inbook=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\chapter</i>. In: \format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\title</i>, \publisher.
-
-phdthesis=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\title</i>, \school.
-
-default=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} : \format[FormatPagesForHTML]{\pages}\end{pages}.
+# Written by Morten O. Alver.
+# This file is licensed under the terms of the GPL version 2 (or later).
+
+NAME
+Example style file for JabRef-oo plugin.
+
+JOURNALS
+Journal name 1
+Journal name 2
+
+PROPERTIES
+Title="References"
+IsSortByPosition="true"
+IsNumberEntries="true"
+ReferenceParagraphFormat="Text body"
+ReferenceHeaderParagraphFormat="Heading 2"
+
+CITATION
+BracketBefore="["
+BracketAfter="]"
+BracketBeforeInList="["
+BracketAfterInList="] "
+CitationSeparator="; "
+UniquefierSeparator=","
+GroupedNumbersSeparator="-"
+MinimumGroupingCount="3"
+FormatCitations="false"
+CitationCharacterFormat="Default"
+PageInfoSeparator="; "
+
+LAYOUT
+article=<b>\format[Authors(LastFirst,Semicolon)]{\author}</b> (<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} : \format[FormatPagesForHTML]{\pages}\end{pages}.
+
+book=\format[Authors(LastFirst,Semicolon)]{\author}\begin{editor}\format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.)\end{editor}, <b>\year\uniq</b>. <i>\title</i>. \publisher, \address.
+
+incollection=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\title</i>. In: \format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\booktitle</i>, \publisher.
+
+inbook=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\chapter</i>. In: \format[AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor} (Ed.), <i>\title</i>, \publisher.
+
+phdthesis=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\title</i>, \school.
+
+default=\format[Authors(LastFirst,Semicolon)]{\author} (<b>\year\uniq</b>). <i>\title</i>, \journal \volume\begin{pages} : \format[FormatPagesForHTML]{\pages}\end{pages}.
diff --git a/src/resource/openoffice/manifest.xml b/src/resource/openoffice/manifest.xml
index 4bd2223..3d5b5fe 100644
--- a/src/resource/openoffice/manifest.xml
+++ b/src/resource/openoffice/manifest.xml
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
-<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
- <manifest:file-entry manifest:media-type="application/vnd.sun.xml.calc" manifest:full-path="/"/>
- <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/>
- <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="meta.xml"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
+<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
+ <manifest:file-entry manifest:media-type="application/vnd.sun.xml.calc" manifest:full-path="/"/>
+ <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/>
+ <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="meta.xml"/>
 </manifest:manifest>
\ No newline at end of file
diff --git a/src/resource/openoffice/meta.xml b/src/resource/openoffice/meta.xml
index b05cddf..03b7cd3 100644
--- a/src/resource/openoffice/meta.xml
+++ b/src/resource/openoffice/meta.xml
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE office:document-meta PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "office.dtd">
-<office:document-meta xmlns:office="http://openoffice.org/2000/office" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" office:version="1.0">
- <office:meta>
-  <meta:generator>JabRef 2.6</meta:generator>
- </office:meta>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE office:document-meta PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "office.dtd">
+<office:document-meta xmlns:office="http://openoffice.org/2000/office" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" office:version="1.0">
+ <office:meta>
+  <meta:generator>JabRef 2.6</meta:generator>
+ </office:meta>
 </office:document-meta>
\ No newline at end of file
diff --git a/src/tests/net/sf/jabref/bibtexFiles/test.bib b/src/tests/net/sf/jabref/bibtexFiles/test.bib
index cc5bcc1..6c205f2 100644
--- a/src/tests/net/sf/jabref/bibtexFiles/test.bib
+++ b/src/tests/net/sf/jabref/bibtexFiles/test.bib
@@ -1,279 +1,279 @@
-% This file was created with JabRef devel - 1st edition family.
-% Encoding: MacRoman
-
- at ARTICLE{1102917,
-  author = {E. Bardram},
-  title = {The trouble with login: on usability and computer security in ubiquitous
-	computing},
-  journal = {Personal Ubiquitous Comput.},
-  year = {2005},
-  volume = {9},
-  pages = {357--367},
-  number = {6},
-  address = {London, UK},
-  bdsk-url-1 = {http://dx.doi.org/10.1007/s00779-005-0347-6},
-  doi = {http://dx.doi.org/10.1007/s00779-005-0347-6},
-  issn = {1617-4909},
-  publisher = {Springer-Verlag}
-}
-
- at INPROCEEDINGS{1137631,
-  author = {Gustav Bostr\"{o}m and Jaana W\"{a}yrynen and Marine Bod\'{e}n and
-	Konstantin Beznosov and Philippe Kruchten},
-  title = {Extending XP practices to support security requirements engineering},
-  booktitle = {SESS '06: Proceedings of the 2006 international workshop on Software
-	engineering for secure systems},
-  year = {2006},
-  pages = {11--18},
-  address = {New York, NY, USA},
-  publisher = {ACM},
-  bdsk-url-1 = {http://doi.acm.org/10.1145/1137627.1137631},
-  doi = {http://doi.acm.org/10.1145/1137627.1137631},
-  file = {:/Volumes/iDisk/Freie Universit�t Berlin/Semester 9/Softwareprozesse/p11-bostrom.pdf:PDF},
-  isbn = {1-59593-411-1},
-  location = {Shanghai, China}
-}
-
- at INPROCEEDINGS{1132768,
-  author = {Christina Braz and Jean-Marc Robert},
-  title = {Security and usability: the case of the user authentication methods},
-  booktitle = {IHM '06: Proceedings of the 18th International Conferenceof the Association
-	Francophone d'Interaction Homme-Machine},
-  year = {2006},
-  pages = {199--203},
-  address = {New York, NY, USA},
-  publisher = {ACM},
-  bdsk-url-1 = {http://doi.acm.org/10.1145/1132736.1132768},
-  doi = {http://doi.acm.org/10.1145/1132736.1132768},
-  isbn = {1-59593-350-6},
-  location = {Montreal, Canada}
-}
-
- at INPROCEEDINGS{1137628,
-  author = {Danilo Bruschi and Bart De Win and Mattia Monga},
-  title = {Introduction to software engineering for secure systems: SESS06 --
-	secure by design},
-  booktitle = {SESS '06: Proceedings of the 2006 international workshop on Software
-	engineering for secure systems},
-  year = {2006},
-  pages = {1--2},
-  address = {New York, NY, USA},
-  publisher = {ACM},
-  bdsk-url-1 = {http://doi.acm.org/10.1145/1137627.1137628},
-  doi = {http://doi.acm.org/10.1145/1137627.1137628},
-  isbn = {1-59593-411-1},
-  location = {Shanghai, China}
-}
-
- at ARTICLE{1373163,
-  author = {Elizabeth Churchill and Les Nelson and Diana K. Smetters},
-  title = {Useful Computer Security},
-  journal = {IEEE Internet Computing},
-  year = {2008},
-  volume = {12},
-  pages = {10--12},
-  number = {3},
-  address = {Piscataway, NJ, USA},
-  bdsk-url-1 = {http://dx.doi.org/10.1109/MIC.2008.67},
-  doi = {http://dx.doi.org/10.1109/MIC.2008.67},
-  issn = {1089-7801},
-  publisher = {IEEE Educational Activities Department}
-}
-
- at ARTICLE{820136,
-  author = {Tony Clear},
-  title = {Design and usability in security systems: daily life as a context
-	of use?},
-  journal = {SIGCSE Bull.},
-  year = {2002},
-  volume = {34},
-  pages = {13--14},
-  number = {4},
-  address = {New York, NY, USA},
-  bdsk-url-1 = {http://doi.acm.org/10.1145/820127.820136},
-  doi = {http://doi.acm.org/10.1145/820127.820136},
-  issn = {0097-8418},
-  publisher = {ACM}
-}
-
- at BOOK{1098730,
-  title = {Security and Usability},
-  publisher = {O'Reilly Media, Inc.},
-  year = {2005},
-  author = {Lorrie Cranor and Simson Garfinkel},
-  isbn = {0596008279}
-}
-
- at INPROCEEDINGS{1143122,
-  author = {Alexander J. DeWitt and Jasna Kuljis},
-  title = {Aligning usability and security: a usability study of Polaris},
-  booktitle = {SOUPS '06: Proceedings of the second symposium on Usable privacy
-	and security},
-  year = {2006},
-  pages = {1--7},
-  address = {New York, NY, USA},
-  publisher = {ACM},
-  bdsk-url-1 = {http://doi.acm.org/10.1145/1143120.1143122},
-  doi = {http://doi.acm.org/10.1145/1143120.1143122},
-  isbn = {1-59593-448-0},
-  location = {Pittsburgh, Pennsylvania}
-}
-
- at INPROCEEDINGS{1233448,
-  author = {Cheryl Hinds and Chinedu Ekwueme},
-  title = {Increasing security and usability of computer systems with graphical
-	passwords},
-  booktitle = {ACM-SE 45: Proceedings of the 45th annual southeast regional conference},
-  year = {2007},
-  pages = {529--530},
-  address = {New York, NY, USA},
-  publisher = {ACM},
-  bdsk-url-1 = {http://doi.acm.org/10.1145/1233341.1233448},
-  doi = {http://doi.acm.org/10.1145/1233341.1233448},
-  isbn = {978-1-59593-629-5},
-  location = {Winston-Salem, North Carolina}
-}
-
- at INPROCEEDINGS{1314293,
-  author = {Mariusz H. Jakubowski and Ramarathnam Venkatesan},
-  title = {Randomized radon transforms for biometric authentication via fingerprint
-	hashing},
-  booktitle = {DRM '07: Proceedings of the 2007 ACM workshop on Digital Rights Management},
-  year = {2007},
-  pages = {90--94},
-  address = {New York, NY, USA},
-  publisher = {ACM},
-  bdsk-url-1 = {http://doi.acm.org/10.1145/1314276.1314293},
-  doi = {http://doi.acm.org/10.1145/1314276.1314293},
-  isbn = {978-1-59593-884-8},
-  location = {Alexandria, Virginia, USA}
-}
-
- at INPROCEEDINGS{1358810,
-  author = {Vassilis Kostakos},
-  title = {Human-in-the-loop: rethinking security in mobile and pervasive systems},
-  booktitle = {CHI '08: CHI '08 extended abstracts on Human factors in computing
-	systems},
-  year = {2008},
-  pages = {3075--3080},
-  address = {New York, NY, USA},
-  publisher = {ACM},
-  bdsk-url-1 = {http://doi.acm.org/10.1145/1358628.1358810},
-  doi = {http://doi.acm.org/10.1145/1358628.1358810},
-  isbn = {978-1-60558-012-X},
-  location = {Florence, Italy}
-}
-
- at INPROCEEDINGS{1137636,
-  author = {Martin Naedele and Thomas E. Koch},
-  title = {Trust and tamper-proof software delivery},
-  booktitle = {SESS '06: Proceedings of the 2006 international workshop on Software
-	engineering for secure systems},
-  year = {2006},
-  pages = {51--58},
-  address = {New York, NY, USA},
-  publisher = {ACM},
-  bdsk-url-1 = {http://doi.acm.org/10.1145/1137627.1137636},
-  doi = {http://doi.acm.org/10.1145/1137627.1137636},
-  isbn = {1-59593-411-1},
-  location = {Shanghai, China}
-}
-
- at INPROCEEDINGS{1182529,
-  author = {Ann Nosseir and Richard Connor and Crawford Revie and Sotirios Terzis},
-  title = {Question-based authentication using context data},
-  booktitle = {NordiCHI '06: Proceedings of the 4th Nordic conference on Human-computer
-	interaction},
-  year = {2006},
-  pages = {429--432},
-  address = {New York, NY, USA},
-  publisher = {ACM},
-  bdsk-url-1 = {http://doi.acm.org/10.1145/1182475.1182529},
-  doi = {http://doi.acm.org/10.1145/1182475.1182529},
-  isbn = {1-59593-325-5},
-  location = {Oslo, Norway}
-}
-
- at INPROCEEDINGS{1073004,
-  author = {Rog\'{e}rio de Paula and Xianghua Ding and Paul Dourish and Kari
-	Nies and Ben Pillet and David Redmiles and Jie Ren and Jennifer Rode
-	and Roberto Silva Filho},
-  title = {Two experiences designing for effective security},
-  booktitle = {SOUPS '05: Proceedings of the 2005 symposium on Usable privacy and
-	security},
-  year = {2005},
-  pages = {25--34},
-  address = {New York, NY, USA},
-  publisher = {ACM},
-  bdsk-url-1 = {http://doi.acm.org/10.1145/1073001.1073004},
-  doi = {http://doi.acm.org/10.1145/1073001.1073004},
-  isbn = {1-59593-178-3},
-  location = {Pittsburgh, Pennsylvania}
-}
-
- at INPROCEEDINGS{00000000,
-  author = {Konstantin Rozinov},
-  title = {Are Usability and Security Two Opposite Directions in Computer Systems?},
-  year = {2004},
-  bdsk-url-1 = {http://rozinov.sfs.poly.edu/papers/security_vs_usability.pdf},
-  date-added = {2009-02-23 04:41:08 +0100},
-  date-modified = {2009-02-23 04:42:54 +0100},
-  rating = {2}
-}
-
- at INPROCEEDINGS{1251435,
-  author = {Alma Whitten and J. D. Tygar},
-  title = {Why Johnny can't encrypt: a usability evaluation of PGP 5.0},
-  booktitle = {SSYM'99: Proceedings of the 8th conference on USENIX Security Symposium},
-  year = {1999},
-  pages = {14--14},
-  address = {Berkeley, CA, USA},
-  publisher = {USENIX Association},
-  location = {Washington, D.C.}
-}
-
- at INPROCEEDINGS{1137633,
-  author = {Bart De Win and Frank Piessens and Wouter Joosen},
-  title = {How secure is AOP and what can we do about it?},
-  booktitle = {SESS '06: Proceedings of the 2006 international workshop on Software
-	engineering for secure systems},
-  year = {2006},
-  pages = {27--34},
-  address = {New York, NY, USA},
-  publisher = {ACM},
-  bdsk-url-1 = {http://doi.acm.org/10.1145/1137627.1137633},
-  doi = {http://doi.acm.org/10.1145/1137627.1137633},
-  isbn = {1-59593-411-1},
-  location = {Shanghai, China}
-}
-
- at ARTICLE{1025014,
-  author = {Jeff Yan and Alan Blackwell and Ross Anderson and Alasdair Grant},
-  title = {Password Memorability and Security: Empirical Results},
-  journal = {IEEE Security and Privacy},
-  year = {2004},
-  volume = {2},
-  pages = {25--31},
-  number = {5},
-  address = {Piscataway, NJ, USA},
-  bdsk-url-1 = {http://dx.doi.org/10.1109/MSP.2004.81},
-  doi = {http://dx.doi.org/10.1109/MSP.2004.81},
-  issn = {1540-7993},
-  publisher = {IEEE Educational Activities Department}
-}
-
- at ARTICLE{10250999,
-  author = {von Hippel, Eric and Reagle, Jr., Joseph M. and Sherry, John F., Jr. and van den Huevel, Jr., Johan A},
-  title = {Article with complex Authornames},
-  journal = {IEEE Security and Privacy},
-  year = {2004},
-  volume = {2},
-  pages = {25--31},
-  number = {5},
-  address = {Piscataway, NJ, USA},
-  bdsk-url-1 = {http://dx.doi.org/10.1109/MSP.2004.81},
-  doi = {http://dx.doi.org/10.1109/MSP.2004.81},
-  issn = {1540-7993},
-  publisher = {IEEE Educational Activities Department}
-}
-
+% This file was created with JabRef devel - 1st edition family.
+% Encoding: MacRoman
+
+ at ARTICLE{1102917,
+  author = {E. Bardram},
+  title = {The trouble with login: on usability and computer security in ubiquitous
+	computing},
+  journal = {Personal Ubiquitous Comput.},
+  year = {2005},
+  volume = {9},
+  pages = {357--367},
+  number = {6},
+  address = {London, UK},
+  bdsk-url-1 = {http://dx.doi.org/10.1007/s00779-005-0347-6},
+  doi = {http://dx.doi.org/10.1007/s00779-005-0347-6},
+  issn = {1617-4909},
+  publisher = {Springer-Verlag}
+}
+
+ at INPROCEEDINGS{1137631,
+  author = {Gustav Bostr\"{o}m and Jaana W\"{a}yrynen and Marine Bod\'{e}n and
+	Konstantin Beznosov and Philippe Kruchten},
+  title = {Extending XP practices to support security requirements engineering},
+  booktitle = {SESS '06: Proceedings of the 2006 international workshop on Software
+	engineering for secure systems},
+  year = {2006},
+  pages = {11--18},
+  address = {New York, NY, USA},
+  publisher = {ACM},
+  bdsk-url-1 = {http://doi.acm.org/10.1145/1137627.1137631},
+  doi = {http://doi.acm.org/10.1145/1137627.1137631},
+  file = {:/Volumes/iDisk/Freie Universit�t Berlin/Semester 9/Softwareprozesse/p11-bostrom.pdf:PDF},
+  isbn = {1-59593-411-1},
+  location = {Shanghai, China}
+}
+
+ at INPROCEEDINGS{1132768,
+  author = {Christina Braz and Jean-Marc Robert},
+  title = {Security and usability: the case of the user authentication methods},
+  booktitle = {IHM '06: Proceedings of the 18th International Conferenceof the Association
+	Francophone d'Interaction Homme-Machine},
+  year = {2006},
+  pages = {199--203},
+  address = {New York, NY, USA},
+  publisher = {ACM},
+  bdsk-url-1 = {http://doi.acm.org/10.1145/1132736.1132768},
+  doi = {http://doi.acm.org/10.1145/1132736.1132768},
+  isbn = {1-59593-350-6},
+  location = {Montreal, Canada}
+}
+
+ at INPROCEEDINGS{1137628,
+  author = {Danilo Bruschi and Bart De Win and Mattia Monga},
+  title = {Introduction to software engineering for secure systems: SESS06 --
+	secure by design},
+  booktitle = {SESS '06: Proceedings of the 2006 international workshop on Software
+	engineering for secure systems},
+  year = {2006},
+  pages = {1--2},
+  address = {New York, NY, USA},
+  publisher = {ACM},
+  bdsk-url-1 = {http://doi.acm.org/10.1145/1137627.1137628},
+  doi = {http://doi.acm.org/10.1145/1137627.1137628},
+  isbn = {1-59593-411-1},
+  location = {Shanghai, China}
+}
+
+ at ARTICLE{1373163,
+  author = {Elizabeth Churchill and Les Nelson and Diana K. Smetters},
+  title = {Useful Computer Security},
+  journal = {IEEE Internet Computing},
+  year = {2008},
+  volume = {12},
+  pages = {10--12},
+  number = {3},
+  address = {Piscataway, NJ, USA},
+  bdsk-url-1 = {http://dx.doi.org/10.1109/MIC.2008.67},
+  doi = {http://dx.doi.org/10.1109/MIC.2008.67},
+  issn = {1089-7801},
+  publisher = {IEEE Educational Activities Department}
+}
+
+ at ARTICLE{820136,
+  author = {Tony Clear},
+  title = {Design and usability in security systems: daily life as a context
+	of use?},
+  journal = {SIGCSE Bull.},
+  year = {2002},
+  volume = {34},
+  pages = {13--14},
+  number = {4},
+  address = {New York, NY, USA},
+  bdsk-url-1 = {http://doi.acm.org/10.1145/820127.820136},
+  doi = {http://doi.acm.org/10.1145/820127.820136},
+  issn = {0097-8418},
+  publisher = {ACM}
+}
+
+ at BOOK{1098730,
+  title = {Security and Usability},
+  publisher = {O'Reilly Media, Inc.},
+  year = {2005},
+  author = {Lorrie Cranor and Simson Garfinkel},
+  isbn = {0596008279}
+}
+
+ at INPROCEEDINGS{1143122,
+  author = {Alexander J. DeWitt and Jasna Kuljis},
+  title = {Aligning usability and security: a usability study of Polaris},
+  booktitle = {SOUPS '06: Proceedings of the second symposium on Usable privacy
+	and security},
+  year = {2006},
+  pages = {1--7},
+  address = {New York, NY, USA},
+  publisher = {ACM},
+  bdsk-url-1 = {http://doi.acm.org/10.1145/1143120.1143122},
+  doi = {http://doi.acm.org/10.1145/1143120.1143122},
+  isbn = {1-59593-448-0},
+  location = {Pittsburgh, Pennsylvania}
+}
+
+ at INPROCEEDINGS{1233448,
+  author = {Cheryl Hinds and Chinedu Ekwueme},
+  title = {Increasing security and usability of computer systems with graphical
+	passwords},
+  booktitle = {ACM-SE 45: Proceedings of the 45th annual southeast regional conference},
+  year = {2007},
+  pages = {529--530},
+  address = {New York, NY, USA},
+  publisher = {ACM},
+  bdsk-url-1 = {http://doi.acm.org/10.1145/1233341.1233448},
+  doi = {http://doi.acm.org/10.1145/1233341.1233448},
+  isbn = {978-1-59593-629-5},
+  location = {Winston-Salem, North Carolina}
+}
+
+ at INPROCEEDINGS{1314293,
+  author = {Mariusz H. Jakubowski and Ramarathnam Venkatesan},
+  title = {Randomized radon transforms for biometric authentication via fingerprint
+	hashing},
+  booktitle = {DRM '07: Proceedings of the 2007 ACM workshop on Digital Rights Management},
+  year = {2007},
+  pages = {90--94},
+  address = {New York, NY, USA},
+  publisher = {ACM},
+  bdsk-url-1 = {http://doi.acm.org/10.1145/1314276.1314293},
+  doi = {http://doi.acm.org/10.1145/1314276.1314293},
+  isbn = {978-1-59593-884-8},
+  location = {Alexandria, Virginia, USA}
+}
+
+ at INPROCEEDINGS{1358810,
+  author = {Vassilis Kostakos},
+  title = {Human-in-the-loop: rethinking security in mobile and pervasive systems},
+  booktitle = {CHI '08: CHI '08 extended abstracts on Human factors in computing
+	systems},
+  year = {2008},
+  pages = {3075--3080},
+  address = {New York, NY, USA},
+  publisher = {ACM},
+  bdsk-url-1 = {http://doi.acm.org/10.1145/1358628.1358810},
+  doi = {http://doi.acm.org/10.1145/1358628.1358810},
+  isbn = {978-1-60558-012-X},
+  location = {Florence, Italy}
+}
+
+ at INPROCEEDINGS{1137636,
+  author = {Martin Naedele and Thomas E. Koch},
+  title = {Trust and tamper-proof software delivery},
+  booktitle = {SESS '06: Proceedings of the 2006 international workshop on Software
+	engineering for secure systems},
+  year = {2006},
+  pages = {51--58},
+  address = {New York, NY, USA},
+  publisher = {ACM},
+  bdsk-url-1 = {http://doi.acm.org/10.1145/1137627.1137636},
+  doi = {http://doi.acm.org/10.1145/1137627.1137636},
+  isbn = {1-59593-411-1},
+  location = {Shanghai, China}
+}
+
+ at INPROCEEDINGS{1182529,
+  author = {Ann Nosseir and Richard Connor and Crawford Revie and Sotirios Terzis},
+  title = {Question-based authentication using context data},
+  booktitle = {NordiCHI '06: Proceedings of the 4th Nordic conference on Human-computer
+	interaction},
+  year = {2006},
+  pages = {429--432},
+  address = {New York, NY, USA},
+  publisher = {ACM},
+  bdsk-url-1 = {http://doi.acm.org/10.1145/1182475.1182529},
+  doi = {http://doi.acm.org/10.1145/1182475.1182529},
+  isbn = {1-59593-325-5},
+  location = {Oslo, Norway}
+}
+
+ at INPROCEEDINGS{1073004,
+  author = {Rog\'{e}rio de Paula and Xianghua Ding and Paul Dourish and Kari
+	Nies and Ben Pillet and David Redmiles and Jie Ren and Jennifer Rode
+	and Roberto Silva Filho},
+  title = {Two experiences designing for effective security},
+  booktitle = {SOUPS '05: Proceedings of the 2005 symposium on Usable privacy and
+	security},
+  year = {2005},
+  pages = {25--34},
+  address = {New York, NY, USA},
+  publisher = {ACM},
+  bdsk-url-1 = {http://doi.acm.org/10.1145/1073001.1073004},
+  doi = {http://doi.acm.org/10.1145/1073001.1073004},
+  isbn = {1-59593-178-3},
+  location = {Pittsburgh, Pennsylvania}
+}
+
+ at INPROCEEDINGS{00000000,
+  author = {Konstantin Rozinov},
+  title = {Are Usability and Security Two Opposite Directions in Computer Systems?},
+  year = {2004},
+  bdsk-url-1 = {http://rozinov.sfs.poly.edu/papers/security_vs_usability.pdf},
+  date-added = {2009-02-23 04:41:08 +0100},
+  date-modified = {2009-02-23 04:42:54 +0100},
+  rating = {2}
+}
+
+ at INPROCEEDINGS{1251435,
+  author = {Alma Whitten and J. D. Tygar},
+  title = {Why Johnny can't encrypt: a usability evaluation of PGP 5.0},
+  booktitle = {SSYM'99: Proceedings of the 8th conference on USENIX Security Symposium},
+  year = {1999},
+  pages = {14--14},
+  address = {Berkeley, CA, USA},
+  publisher = {USENIX Association},
+  location = {Washington, D.C.}
+}
+
+ at INPROCEEDINGS{1137633,
+  author = {Bart De Win and Frank Piessens and Wouter Joosen},
+  title = {How secure is AOP and what can we do about it?},
+  booktitle = {SESS '06: Proceedings of the 2006 international workshop on Software
+	engineering for secure systems},
+  year = {2006},
+  pages = {27--34},
+  address = {New York, NY, USA},
+  publisher = {ACM},
+  bdsk-url-1 = {http://doi.acm.org/10.1145/1137627.1137633},
+  doi = {http://doi.acm.org/10.1145/1137627.1137633},
+  isbn = {1-59593-411-1},
+  location = {Shanghai, China}
+}
+
+ at ARTICLE{1025014,
+  author = {Jeff Yan and Alan Blackwell and Ross Anderson and Alasdair Grant},
+  title = {Password Memorability and Security: Empirical Results},
+  journal = {IEEE Security and Privacy},
+  year = {2004},
+  volume = {2},
+  pages = {25--31},
+  number = {5},
+  address = {Piscataway, NJ, USA},
+  bdsk-url-1 = {http://dx.doi.org/10.1109/MSP.2004.81},
+  doi = {http://dx.doi.org/10.1109/MSP.2004.81},
+  issn = {1540-7993},
+  publisher = {IEEE Educational Activities Department}
+}
+
+ at ARTICLE{10250999,
+  author = {von Hippel, Eric and Reagle, Jr., Joseph M. and Sherry, John F., Jr. and van den Huevel, Jr., Johan A},
+  title = {Article with complex Authornames},
+  journal = {IEEE Security and Privacy},
+  year = {2004},
+  volume = {2},
+  pages = {25--31},
+  number = {5},
+  address = {Piscataway, NJ, USA},
+  bdsk-url-1 = {http://dx.doi.org/10.1109/MSP.2004.81},
+  doi = {http://dx.doi.org/10.1109/MSP.2004.81},
+  issn = {1540-7993},
+  publisher = {IEEE Educational Activities Department}
+}
+
diff --git a/src/tests/net/sf/jabref/bst/abbrv.bst b/src/tests/net/sf/jabref/bst/abbrv.bst
index 2e7fe53..e0eb8ed 100644
--- a/src/tests/net/sf/jabref/bst/abbrv.bst
+++ b/src/tests/net/sf/jabref/bst/abbrv.bst
@@ -1,1098 +1,1098 @@
-% BibTeX standard bibliography style `abbrv'
-        % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
-        % Copyright (C) 1985, all rights reserved.
-        % Copying of this file is authorized only if either
-        % (1) you make absolutely no changes to your copy, including name, or
-        % (2) if you do make changes, you name it something other than
-        % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
-        % This restriction helps ensure that all standard styles are identical.
-        % The file btxbst.doc has the documentation for this style.
-
-
-ENTRY
-  { address
-    author
-    booktitle
-    chapter
-    edition
-    editor
-    howpublished
-    institution
-    journal
-    key
-    month
-    note
-    number
-    organization
-    pages
-    publisher
-    school
-    series
-    title
-    type
-    volume
-    year
-  }
-  {}
-  { label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-FUNCTION {init.state.consts}
-{ #0 'before.all :=
-  #1 'mid.sentence :=
-  #2 'after.sentence :=
-  #3 'after.block :=
-}
-
-STRINGS { s t }
-
-FUNCTION {output.nonnull}
-{ 's :=
-  output.state mid.sentence =
-    { ", " * write$ }
-    { output.state after.block =
-        { add.period$ write$
-          newline$
-          "\newblock " write$
-        }
-        { output.state before.all =
-            'write$
-            { add.period$ " " * write$ }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION {output}
-{ duplicate$ empty$
-    'pop$
-    'output.nonnull
-  if$
-}
-
-FUNCTION {output.check}
-{ 't :=
-  duplicate$ empty$
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull
-  if$
-}
-
-FUNCTION {output.bibitem}
-{ newline$
-  "\bibitem{" write$
-  cite$ write$
-  "}" write$
-  newline$
-  ""
-  before.all 'output.state :=
-}
-
-FUNCTION {fin.entry}
-{ add.period$
-  write$
-  newline$
-}
-
-FUNCTION {new.block}
-{ output.state before.all =
-    'skip$
-    { after.block 'output.state := }
-  if$
-}
-
-FUNCTION {new.sentence}
-{ output.state after.block =
-    'skip$
-    { output.state before.all =
-        'skip$
-        { after.sentence 'output.state := }
-      if$
-    }
-  if$
-}
-
-FUNCTION {not}
-{   { #0 }
-    { #1 }
-  if$
-}
-
-FUNCTION {and}
-{   'skip$
-    { pop$ #0 }
-  if$
-}
-
-FUNCTION {or}
-{   { pop$ #1 }
-    'skip$
-  if$
-}
-
-FUNCTION {new.block.checka}
-{ empty$
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {new.block.checkb}
-{ empty$
-  swap$ empty$
-  and
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {new.sentence.checka}
-{ empty$
-    'skip$
-    'new.sentence
-  if$
-}
-
-FUNCTION {new.sentence.checkb}
-{ empty$
-  swap$ empty$
-  and
-    'skip$
-    'new.sentence
-  if$
-}
-
-FUNCTION {field.or.null}
-{ duplicate$ empty$
-    { pop$ "" }
-    'skip$
-  if$
-}
-
-FUNCTION {emphasize}
-{ duplicate$ empty$
-    { pop$ "" }
-    { "{\em " swap$ * "}" * }
-  if$
-}
-
-INTEGERS { nameptr namesleft numnames }
-
-FUNCTION {format.names}
-{ 's :=
-  #1 'nameptr :=
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
-      nameptr #1 >
-        { namesleft #1 >
-            { ", " * t * }
-            { numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "others" =
-                { " et~al." * }
-                { " and " * t * }
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION {format.authors}
-{ author empty$
-    { "" }
-    { author format.names }
-  if$
-}
-
-FUNCTION {format.editors}
-{ editor empty$
-    { "" }
-    { editor format.names
-      editor num.names$ #1 >
-        { ", editors" * }
-        { ", editor" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.title}
-{ title empty$
-    { "" }
-    { title "t" change.case$ }
-  if$
-}
-
-FUNCTION {n.dashify}
-{ 't :=
-  ""
-    { t empty$ not }
-    { t #1 #1 substring$ "-" =
-        { t #1 #2 substring$ "--" = not
-            { "--" *
-              t #2 global.max$ substring$ 't :=
-            }
-            {   { t #1 #1 substring$ "-" = }
-                { "-" *
-                  t #2 global.max$ substring$ 't :=
-                }
-              while$
-            }
-          if$
-        }
-        { t #1 #1 substring$ *
-          t #2 global.max$ substring$ 't :=
-        }
-      if$
-    }
-  while$
-}
-
-FUNCTION {format.date}
-{ year empty$
-    { month empty$
-        { "" }
-        { "there's a month but no year in " cite$ * warning$
-          month
-        }
-      if$
-    }
-    { month empty$
-        'year
-        { month " " * year * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.btitle}
-{ title emphasize
-}
-
-FUNCTION {tie.or.space.connect}
-{ duplicate$ text.length$ #3 <
-    { "~" }
-    { " " }
-  if$
-  swap$ * *
-}
-
-FUNCTION {either.or.check}
-{ empty$
-    'pop$
-    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
-  if$
-}
-
-FUNCTION {format.bvolume}
-{ volume empty$
-    { "" }
-    { "volume" volume tie.or.space.connect
-      series empty$
-        'skip$
-        { " of " * series emphasize * }
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION {format.number.series}
-{ volume empty$
-    { number empty$
-        { series field.or.null }
-        { output.state mid.sentence =
-            { "number" }
-            { "Number" }
-          if$
-          number tie.or.space.connect
-          series empty$
-            { "there's a number but no series in " cite$ * warning$ }
-            { " in " * series * }
-          if$
-        }
-      if$
-    }
-    { "" }
-  if$
-}
-
-FUNCTION {format.edition}
-{ edition empty$
-    { "" }
-    { output.state mid.sentence =
-        { edition "l" change.case$ " edition" * }
-        { edition "t" change.case$ " edition" * }
-      if$
-    }
-  if$
-}
-
-INTEGERS { multiresult }
-
-FUNCTION {multi.page.check}
-{ 't :=
-  #0 'multiresult :=
-    { multiresult not
-      t empty$ not
-      and
-    }
-    { t #1 #1 substring$
-      duplicate$ "-" =
-      swap$ duplicate$ "," =
-      swap$ "+" =
-      or or
-        { #1 'multiresult := }
-        { t #2 global.max$ substring$ 't := }
-      if$
-    }
-  while$
-  multiresult
-}
-
-FUNCTION {format.pages}
-{ pages empty$
-    { "" }
-    { pages multi.page.check
-        { "pages" pages n.dashify tie.or.space.connect }
-        { "page" pages tie.or.space.connect }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.vol.num.pages}
-{ volume field.or.null
-  number empty$
-    'skip$
-    { "(" number * ")" * *
-      volume empty$
-        { "there's a number but no volume in " cite$ * warning$ }
-        'skip$
-      if$
-    }
-  if$
-  pages empty$
-    'skip$
-    { duplicate$ empty$
-        { pop$ format.pages }
-        { ":" * pages n.dashify * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.chapter.pages}
-{ chapter empty$
-    'format.pages
-    { type empty$
-        { "chapter" }
-        { type "l" change.case$ }
-      if$
-      chapter tie.or.space.connect
-      pages empty$
-        'skip$
-        { ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.in.ed.booktitle}
-{ booktitle empty$
-    { "" }
-    { editor empty$
-        { "In " booktitle emphasize * }
-        { "In " format.editors * ", " * booktitle emphasize * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {empty.misc.check}
-{ author empty$ title empty$ howpublished empty$
-  month empty$ year empty$ note empty$
-  and and and and and
-  key empty$ not and
-    { "all relevant fields are empty in " cite$ * warning$ }
-    'skip$
-  if$
-}
-
-FUNCTION {format.thesis.type}
-{ type empty$
-    'skip$
-    { pop$
-      type "t" change.case$
-    }
-  if$
-}
-
-FUNCTION {format.tr.number}
-{ type empty$
-    { "Technical Report" }
-    'type
-  if$
-  number empty$
-    { "t" change.case$ }
-    { number tie.or.space.connect }
-  if$
-}
-
-FUNCTION {format.article.crossref}
-{ key empty$
-    { journal empty$
-        { "need key or journal for " cite$ * " to crossref " * crossref *
-          warning$
-          ""
-        }
-        { "In {\em " journal * "\/}" * }
-      if$
-    }
-    { "In " key * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {format.crossref.editor}
-{ editor #1 "{vv~}{ll}" format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { pop$ " et~al." * }
-    { #2 <
-        'skip$
-        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-            { " et~al." * }
-            { " and " * editor #2 "{vv~}{ll}" format.name$ * }
-          if$
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.book.crossref}
-{ volume empty$
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
-      "In "
-    }
-    { "Volume" volume tie.or.space.connect
-      " of " *
-    }
-  if$
-  editor empty$
-  editor field.or.null author field.or.null =
-  or
-    { key empty$
-        { series empty$
-            { "need editor, key, or series for " cite$ * " to crossref " *
-              crossref * warning$
-              "" *
-            }
-            { "{\em " * series * "\/}" * }
-          if$
-        }
-        { key * }
-      if$
-    }
-    { format.crossref.editor * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {format.incoll.inproc.crossref}
-{ editor empty$
-  editor field.or.null author field.or.null =
-  or
-    { key empty$
-        { booktitle empty$
-            { "need editor, key, or booktitle for " cite$ * " to crossref " *
-              crossref * warning$
-              ""
-            }
-            { "In {\em " booktitle * "\/}" * }
-          if$
-        }
-        { "In " key * }
-      if$
-    }
-    { "In " format.crossref.editor * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {article}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { journal emphasize "journal" output.check
-      format.vol.num.pages output
-      format.date "year" output.check
-    }
-    { format.article.crossref output.nonnull
-      format.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {book}
-{ output.bibitem
-  author empty$
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-        { "author and editor" editor either.or.check }
-        'skip$
-      if$
-    }
-  if$
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.edition output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {booklet}
-{ output.bibitem
-  format.authors output
-  new.block
-  format.title "title" output.check
-  howpublished address new.block.checkb
-  howpublished output
-  address output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {inbook}
-{ output.bibitem
-  author empty$
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-        { "author and editor" editor either.or.check }
-        'skip$
-      if$
-    }
-  if$
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { format.bvolume output
-      format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-    }
-    { format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.edition output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {incollection}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      format.bvolume output
-      format.number.series output
-      format.chapter.pages output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-      format.edition output
-      format.date "year" output.check
-    }
-    { format.incoll.inproc.crossref output.nonnull
-      format.chapter.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {inproceedings}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      format.bvolume output
-      format.number.series output
-      format.pages output
-      address empty$
-        { organization publisher new.sentence.checkb
-          organization output
-          publisher output
-          format.date "year" output.check
-        }
-        { address output.nonnull
-          format.date "year" output.check
-          new.sentence
-          organization output
-          publisher output
-        }
-      if$
-    }
-    { format.incoll.inproc.crossref output.nonnull
-      format.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {conference} { inproceedings }
-
-FUNCTION {manual}
-{ output.bibitem
-  author empty$
-    { organization empty$
-        'skip$
-        { organization output.nonnull
-          address output
-        }
-      if$
-    }
-    { format.authors output.nonnull }
-  if$
-  new.block
-  format.btitle "title" output.check
-  author empty$
-    { organization empty$
-        { address new.block.checka
-          address output
-        }
-        'skip$
-      if$
-    }
-    { organization address new.block.checkb
-      organization output
-      address output
-    }
-  if$
-  format.edition output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {mastersthesis}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  "Master's thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {misc}
-{ output.bibitem
-  format.authors output
-  title howpublished new.block.checkb
-  format.title output
-  howpublished new.block.checka
-  howpublished output
-  format.date output
-  new.block
-  note output
-  fin.entry
-  empty.misc.check
-}
-
-FUNCTION {phdthesis}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.btitle "title" output.check
-  new.block
-  "PhD thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {proceedings}
-{ output.bibitem
-  editor empty$
-    { organization output }
-    { format.editors output.nonnull }
-  if$
-  new.block
-  format.btitle "title" output.check
-  format.bvolume output
-  format.number.series output
-  address empty$
-    { editor empty$
-        { publisher new.sentence.checka }
-        { organization publisher new.sentence.checkb
-          organization output
-        }
-      if$
-      publisher output
-      format.date "year" output.check
-    }
-    { address output.nonnull
-      format.date "year" output.check
-      new.sentence
-      editor empty$
-        'skip$
-        { organization output }
-      if$
-      publisher output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {techreport}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  format.tr.number output.nonnull
-  institution "institution" output.check
-  address output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {unpublished}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  note "note" output.check
-  format.date output
-  fin.entry
-}
-
-FUNCTION {default.type} { misc }
-
-MACRO {jan} {"Jan."}
-
-MACRO {feb} {"Feb."}
-
-MACRO {mar} {"Mar."}
-
-MACRO {apr} {"Apr."}
-
-MACRO {may} {"May"}
-
-MACRO {jun} {"June"}
-
-MACRO {jul} {"July"}
-
-MACRO {aug} {"Aug."}
-
-MACRO {sep} {"Sept."}
-
-MACRO {oct} {"Oct."}
-
-MACRO {nov} {"Nov."}
-
-MACRO {dec} {"Dec."}
-
-MACRO {acmcs} {"ACM Comput. Surv."}
-
-MACRO {acta} {"Acta Inf."}
-
-MACRO {cacm} {"Commun. ACM"}
-
-MACRO {ibmjrd} {"IBM J. Res. Dev."}
-
-MACRO {ibmsj} {"IBM Syst.~J."}
-
-MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
-
-MACRO {ieeetc} {"IEEE Trans. Comput."}
-
-MACRO {ieeetcad}
- {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
-
-MACRO {ipl} {"Inf. Process. Lett."}
-
-MACRO {jacm} {"J.~ACM"}
-
-MACRO {jcss} {"J.~Comput. Syst. Sci."}
-
-MACRO {scp} {"Sci. Comput. Programming"}
-
-MACRO {sicomp} {"SIAM J. Comput."}
-
-MACRO {tocs} {"ACM Trans. Comput. Syst."}
-
-MACRO {tods} {"ACM Trans. Database Syst."}
-
-MACRO {tog} {"ACM Trans. Gr."}
-
-MACRO {toms} {"ACM Trans. Math. Softw."}
-
-MACRO {toois} {"ACM Trans. Office Inf. Syst."}
-
-MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."}
-
-MACRO {tcs} {"Theoretical Comput. Sci."}
-
-READ
-
-FUNCTION {sortify}
-{ purify$
-  "l" change.case$
-}
-
-INTEGERS { len }
-
-FUNCTION {chop.word}
-{ 's :=
-  'len :=
-  s #1 len substring$ =
-    { s len #1 + global.max$ substring$ }
-    's
-  if$
-}
-
-FUNCTION {sort.format.names}
-{ 's :=
-  #1 'nameptr :=
-  ""
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 >
-        { "   " * }
-        'skip$
-      if$
-      s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=
-      nameptr numnames = t "others" = and
-        { "et al" * }
-        { t sortify * }
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION {sort.format.title}
-{ 't :=
-  "A " #2
-    "An " #3
-      "The " #4 t chop.word
-    chop.word
-  chop.word
-  sortify
-  #1 global.max$ substring$
-}
-
-FUNCTION {author.sort}
-{ author empty$
-    { key empty$
-        { "to sort, need author or key in " cite$ * warning$
-          ""
-        }
-        { key sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {author.editor.sort}
-{ author empty$
-    { editor empty$
-        { key empty$
-            { "to sort, need author, editor, or key in " cite$ * warning$
-              ""
-            }
-            { key sortify }
-          if$
-        }
-        { editor sort.format.names }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {author.organization.sort}
-{ author empty$
-    { organization empty$
-        { key empty$
-            { "to sort, need author, organization, or key in " cite$ * warning$
-              ""
-            }
-            { key sortify }
-          if$
-        }
-        { "The " #4 organization chop.word sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {editor.organization.sort}
-{ editor empty$
-    { organization empty$
-        { key empty$
-            { "to sort, need editor, organization, or key in " cite$ * warning$
-              ""
-            }
-            { key sortify }
-          if$
-        }
-        { "The " #4 organization chop.word sortify }
-      if$
-    }
-    { editor sort.format.names }
-  if$
-}
-
-FUNCTION {presort}
-{ type$ "book" =
-  type$ "inbook" =
-  or
-    'author.editor.sort
-    { type$ "proceedings" =
-        'editor.organization.sort
-        { type$ "manual" =
-            'author.organization.sort
-            'author.sort
-          if$
-        }
-      if$
-    }
-  if$
-  "    "
-  *
-  year field.or.null sortify
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE {presort}
-
-SORT
-
-STRINGS { longest.label }
-
-INTEGERS { number.label longest.label.width }
-
-FUNCTION {initialize.longest.label}
-{ "" 'longest.label :=
-  #1 'number.label :=
-  #0 'longest.label.width :=
-}
-
-FUNCTION {longest.label.pass}
-{ number.label int.to.str$ 'label :=
-  number.label #1 + 'number.label :=
-  label width$ longest.label.width >
-    { label 'longest.label :=
-      label width$ 'longest.label.width :=
-    }
-    'skip$
-  if$
-}
-
-EXECUTE {initialize.longest.label}
-
-ITERATE {longest.label.pass}
-
-FUNCTION {begin.bib}
-{ preamble$ empty$
-    'skip$
-    { preamble$ write$ newline$ }
-  if$
-  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION {end.bib}
-{ newline$
-  "\end{thebibliography}" write$ newline$
-}
-
-EXECUTE {end.bib}
+% BibTeX standard bibliography style `abbrv'
+        % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+        % Copyright (C) 1985, all rights reserved.
+        % Copying of this file is authorized only if either
+        % (1) you make absolutely no changes to your copy, including name, or
+        % (2) if you do make changes, you name it something other than
+        % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+        % This restriction helps ensure that all standard styles are identical.
+        % The file btxbst.doc has the documentation for this style.
+
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    volume
+    year
+  }
+  {}
+  { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+        { add.period$ write$
+          newline$
+          "\newblock " write$
+        }
+        { output.state before.all =
+            'write$
+            { add.period$ " " * write$ }
+          if$
+        }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem{" write$
+  cite$ write$
+  "}" write$
+  newline$
+  ""
+  before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+        'skip$
+        { after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "{\em " swap$ * "}" * }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
+      nameptr #1 >
+        { namesleft #1 >
+            { ", " * t * }
+            { numnames #2 >
+                { "," * }
+                'skip$
+              if$
+              t "others" =
+                { " et~al." * }
+                { " and " * t * }
+              if$
+            }
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+        { ", editors" * }
+        { ", editor" * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+    { title "t" change.case$ }
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+        { t #1 #2 substring$ "--" = not
+            { "--" *
+              t #2 global.max$ substring$ 't :=
+            }
+            {   { t #1 #1 substring$ "-" = }
+                { "-" *
+                  t #2 global.max$ substring$ 't :=
+                }
+              while$
+            }
+          if$
+        }
+        { t #1 #1 substring$ *
+          t #2 global.max$ substring$ 't :=
+        }
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+    { month empty$
+        { "" }
+        { "there's a month but no year in " cite$ * warning$
+          month
+        }
+      if$
+    }
+    { month empty$
+        'year
+        { month " " * year * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { " " }
+  if$
+  swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+    'pop$
+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+  if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+    { "" }
+    { "volume" volume tie.or.space.connect
+      series empty$
+        'skip$
+        { " of " * series emphasize * }
+      if$
+      "volume and number" number either.or.check
+    }
+  if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+    { number empty$
+        { series field.or.null }
+        { output.state mid.sentence =
+            { "number" }
+            { "Number" }
+          if$
+          number tie.or.space.connect
+          series empty$
+            { "there's a number but no series in " cite$ * warning$ }
+            { " in " * series * }
+          if$
+        }
+      if$
+    }
+    { "" }
+  if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+    { "" }
+    { output.state mid.sentence =
+        { edition "l" change.case$ " edition" * }
+        { edition "t" change.case$ " edition" * }
+      if$
+    }
+  if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+        { #1 'multiresult := }
+        { t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+        { "pages" pages n.dashify tie.or.space.connect }
+        { "page" pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+  number empty$
+    'skip$
+    { "(" number * ")" * *
+      volume empty$
+        { "there's a number but no volume in " cite$ * warning$ }
+        'skip$
+      if$
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+        { pop$ format.pages }
+        { ":" * pages n.dashify * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+        { "chapter" }
+        { type "l" change.case$ }
+      if$
+      chapter tie.or.space.connect
+      pages empty$
+        'skip$
+        { ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+    { "" }
+    { editor empty$
+        { "In " booktitle emphasize * }
+        { "In " format.editors * ", " * booktitle emphasize * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+  key empty$ not and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+    'skip$
+    { pop$
+      type "t" change.case$
+    }
+  if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+    { "Technical Report" }
+    'type
+  if$
+  number empty$
+    { "t" change.case$ }
+    { number tie.or.space.connect }
+  if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+    { journal empty$
+        { "need key or journal for " cite$ * " to crossref " * crossref *
+          warning$
+          ""
+        }
+        { "In {\em " journal * "\/}" * }
+      if$
+    }
+    { "In " key * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+  editor num.names$ duplicate$
+  #2 >
+    { pop$ " et~al." * }
+    { #2 <
+        'skip$
+        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+            { " et~al." * }
+            { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      "In "
+    }
+    { "Volume" volume tie.or.space.connect
+      " of " *
+    }
+  if$
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { series empty$
+            { "need editor, key, or series for " cite$ * " to crossref " *
+              crossref * warning$
+              "" *
+            }
+            { "{\em " * series * "\/}" * }
+          if$
+        }
+        { key * }
+      if$
+    }
+    { format.crossref.editor * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { booktitle empty$
+            { "need editor, key, or booktitle for " cite$ * " to crossref " *
+              crossref * warning$
+              ""
+            }
+            { "In {\em " booktitle * "\/}" * }
+          if$
+        }
+        { "In " key * }
+      if$
+    }
+    { "In " format.crossref.editor * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { journal emphasize "journal" output.check
+      format.vol.num.pages output
+      format.date "year" output.check
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  new.block
+  format.title "title" output.check
+  howpublished address new.block.checkb
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.chapter.pages output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+      format.edition output
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.pages output
+      address empty$
+        { organization publisher new.sentence.checkb
+          organization output
+          publisher output
+          format.date "year" output.check
+        }
+        { address output.nonnull
+          format.date "year" output.check
+          new.sentence
+          organization output
+          publisher output
+        }
+      if$
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+  author empty$
+    { organization empty$
+        'skip$
+        { organization output.nonnull
+          address output
+        }
+      if$
+    }
+    { format.authors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  author empty$
+    { organization empty$
+        { address new.block.checka
+          address output
+        }
+        'skip$
+      if$
+    }
+    { organization address new.block.checkb
+      organization output
+      address output
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  "Master's thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.authors output
+  title howpublished new.block.checkb
+  format.title output
+  howpublished new.block.checka
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.btitle "title" output.check
+  new.block
+  "PhD thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  editor empty$
+    { organization output }
+    { format.editors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  format.bvolume output
+  format.number.series output
+  address empty$
+    { editor empty$
+        { publisher new.sentence.checka }
+        { organization publisher new.sentence.checkb
+          organization output
+        }
+      if$
+      publisher output
+      format.date "year" output.check
+    }
+    { address output.nonnull
+      format.date "year" output.check
+      new.sentence
+      editor empty$
+        'skip$
+        { organization output }
+      if$
+      publisher output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  note "note" output.check
+  format.date output
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sept."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Programming"}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Gr."}
+
+MACRO {toms} {"ACM Trans. Math. Softw."}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."}
+
+MACRO {tcs} {"Theoretical Comput. Sci."}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+        { "   " * }
+        'skip$
+      if$
+      s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+        { "et al" * }
+        { t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+        { "to sort, need author or key in " cite$ * warning$
+          ""
+        }
+        { key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+        { key empty$
+            { "to sort, need author, editor, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+        { key empty$
+            { "to sort, need author, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+        { key empty$
+            { "to sort, need editor, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+        'editor.organization.sort
+        { type$ "manual" =
+            'author.organization.sort
+            'author.sort
+          if$
+        }
+      if$
+    }
+  if$
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #1 'number.label :=
+  #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+  number.label #1 + 'number.label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/src/tests/net/sf/jabref/imports/CopacImporterTest1.txt b/src/tests/net/sf/jabref/imports/CopacImporterTest1.txt
index 8c82a7d..d26dfdd 100644
--- a/src/tests/net/sf/jabref/imports/CopacImporterTest1.txt
+++ b/src/tests/net/sf/jabref/imports/CopacImporterTest1.txt
@@ -1,9 +1,9 @@
-
-TI- The SIS project : software reuse with a natural language approach
-AU- Prechelt, Lutz
-AU- Universit�t Karlsruhe. Fakult�t f�r Informatik
-SE- Interner Bericht ; Nr.2/92
-PU- Karlsruhe :  Universitat Karlsruhe, Fakultat fur Informatik
-PY- 1992
-HL- Edinburgh
-
+
+TI- The SIS project : software reuse with a natural language approach
+AU- Prechelt, Lutz
+AU- Universit�t Karlsruhe. Fakult�t f�r Informatik
+SE- Interner Bericht ; Nr.2/92
+PU- Karlsruhe :  Universitat Karlsruhe, Fakultat fur Informatik
+PY- 1992
+HL- Edinburgh
+
diff --git a/src/tests/net/sf/jabref/imports/CopacImporterTest2.txt b/src/tests/net/sf/jabref/imports/CopacImporterTest2.txt
index 65707c5..10ba9f0 100644
--- a/src/tests/net/sf/jabref/imports/CopacImporterTest2.txt
+++ b/src/tests/net/sf/jabref/imports/CopacImporterTest2.txt
@@ -1,34 +1,34 @@
-TI- Computing and operational research at the London Hospital
-AU- Barber, Barry
-AU- Abbott, W.
-SE- Computers in medicine series
-PU- London :  Butterworths
-PY- 1972
-PD- x, 102p, leaf : ill., form, port ; 22cm
-IS- 0407517006 (Pbk)
-NT- Bibl.p.94-97. - Index
-KW- London Hospital and Medical College
-KW- Electronic data processing - Medicine
-KW- Computers - Hospital administration
-KW- Hospital planning
-KW- Operations research
-KW- Hospital equipment and supplies
-KW- Electronic data processing - Hospitals - Administration
-KW- Hospitals, London, London Hospital and Medical College, Records
-    management, Applications of computer systems, to 1971
-HL- Aberdeen ; Birmingham ; Edinburgh ; Trinity College Dublin ;
-    UCL (University College London)
-
-
-TI- Real time systems : management and design
-AU- Tebbs, David
-AU- Collins, Garfield
-PU- London ; New York :  McGraw-Hill
-PY- 1977
-PD- ix, 357p : ill., forms ; 24cm
-IS- 0070844828
-NT- Index
-KW- Real-time data processing - Management
-KW- Real time computer systems, Design
-HL- Aberdeen ; Birmingham ; Edinburgh ; Imperial College ;
-    Liverpool ; Manchester ; Oxford ; Trinity College Dublin
+TI- Computing and operational research at the London Hospital
+AU- Barber, Barry
+AU- Abbott, W.
+SE- Computers in medicine series
+PU- London :  Butterworths
+PY- 1972
+PD- x, 102p, leaf : ill., form, port ; 22cm
+IS- 0407517006 (Pbk)
+NT- Bibl.p.94-97. - Index
+KW- London Hospital and Medical College
+KW- Electronic data processing - Medicine
+KW- Computers - Hospital administration
+KW- Hospital planning
+KW- Operations research
+KW- Hospital equipment and supplies
+KW- Electronic data processing - Hospitals - Administration
+KW- Hospitals, London, London Hospital and Medical College, Records
+    management, Applications of computer systems, to 1971
+HL- Aberdeen ; Birmingham ; Edinburgh ; Trinity College Dublin ;
+    UCL (University College London)
+
+
+TI- Real time systems : management and design
+AU- Tebbs, David
+AU- Collins, Garfield
+PU- London ; New York :  McGraw-Hill
+PY- 1977
+PD- ix, 357p : ill., forms ; 24cm
+IS- 0070844828
+NT- Index
+KW- Real-time data processing - Management
+KW- Real time computer systems, Design
+HL- Aberdeen ; Birmingham ; Edinburgh ; Imperial College ;
+    Liverpool ; Manchester ; Oxford ; Trinity College Dublin
diff --git a/src/tests/net/sf/jabref/imports/IEEEImport1.txt b/src/tests/net/sf/jabref/imports/IEEEImport1.txt
index 81599a3..f90dd56 100644
--- a/src/tests/net/sf/jabref/imports/IEEEImport1.txt
+++ b/src/tests/net/sf/jabref/imports/IEEEImport1.txt
@@ -1,60 +1,60 @@
-TY  - JOUR
-
-JO  - Geoscience and Remote Sensing Letters, IEEE
-
-TI  - Improving Urban Road Extraction in High-Resolution
-Images Exploiting Directional Filtering, Perceptual
-Grouping, and Simple Topological Concepts
-
-IS  - 3
-
-SN  - 1545-598X  
-
-SP  -  387
-
-EP  -  391
-
-AU  - Gamba, P.
-
-AU  - Dell'Acqua, F.
-
-AU  - Lisini, G.
-
-PY  - 2006
-
-KW  - Perceptual grouping
-
-KW  - street extraction
-
-KW  - urban remote sensing
-
-KW  - Perceptual grouping
-
-KW  - street extraction
-
-KW  - urban remote sensing
-
-VL  - 4
-
-JA  - Geoscience and Remote Sensing Letters, IEEE
-
-AB  -  In this letter, the problem of detecting urban road
-networks from high-resolution optical/synthetic aperture
-radar (SAR) images is addressed. To this end, this letter
-exploits a priori knowledge about road direction
-distribution in urban areas. In particular, this letter
-presents an adaptive filtering procedure able to capture the
-predominant directions of these roads and enhance the
-extraction results. After road element extraction, to both
-discard redundant segments and avoid gaps, a special
-perceptual grouping algorithm is devised, exploiting
-colinearity as well as proximity concepts. Finally, the road
-network topology is considered, checking for road
-intersections and regularizing the overall patterns using
-these focal points. The proposed procedure was tested on a
-pair of very high resolution images, one from an optical
-sensor and one from a SAR sensor. The experiments show an
-increase in both the completeness and the quality indexes
-for the extracted road network.
-
+TY  - JOUR
+
+JO  - Geoscience and Remote Sensing Letters, IEEE
+
+TI  - Improving Urban Road Extraction in High-Resolution
+Images Exploiting Directional Filtering, Perceptual
+Grouping, and Simple Topological Concepts
+
+IS  - 3
+
+SN  - 1545-598X  
+
+SP  -  387
+
+EP  -  391
+
+AU  - Gamba, P.
+
+AU  - Dell'Acqua, F.
+
+AU  - Lisini, G.
+
+PY  - 2006
+
+KW  - Perceptual grouping
+
+KW  - street extraction
+
+KW  - urban remote sensing
+
+KW  - Perceptual grouping
+
+KW  - street extraction
+
+KW  - urban remote sensing
+
+VL  - 4
+
+JA  - Geoscience and Remote Sensing Letters, IEEE
+
+AB  -  In this letter, the problem of detecting urban road
+networks from high-resolution optical/synthetic aperture
+radar (SAR) images is addressed. To this end, this letter
+exploits a priori knowledge about road direction
+distribution in urban areas. In particular, this letter
+presents an adaptive filtering procedure able to capture the
+predominant directions of these roads and enhance the
+extraction results. After road element extraction, to both
+discard redundant segments and avoid gaps, a special
+perceptual grouping algorithm is devised, exploiting
+colinearity as well as proximity concepts. Finally, the road
+network topology is considered, checking for road
+intersections and regularizing the overall patterns using
+these focal points. The proposed procedure was tested on a
+pair of very high resolution images, one from an optical
+sensor and one from a SAR sensor. The experiments show an
+increase in both the completeness and the quality indexes
+for the extracted road network.
+
 ER  - 
\ No newline at end of file
diff --git a/src/tests/net/sf/jabref/imports/IsiImporterTest1.isi b/src/tests/net/sf/jabref/imports/IsiImporterTest1.isi
index 49fe70b..d3538ff 100644
--- a/src/tests/net/sf/jabref/imports/IsiImporterTest1.isi
+++ b/src/tests/net/sf/jabref/imports/IsiImporterTest1.isi
@@ -1,25 +1,25 @@
-FN ISI Export Format
-VR 1.0
-
-PT J
-TI Optical properties of MgO doped LiNbO/sub 3/ single
-   crystals
-AU James Brown
-   James Marc Brown
-   Brown, JM
-   Brown, J
-   Brown, J.M.
-   Brown, J.
-SO Optical Materials
-PY 2006
-PD 04 2006
-VL 28
-IS 5
-JI Opt. Mater. (Netherlands)
-BP 467
-EP 472
-PS 467-72
-UT INSPEC:8863438
-ER
-
+FN ISI Export Format
+VR 1.0
+
+PT J
+TI Optical properties of MgO doped LiNbO/sub 3/ single
+   crystals
+AU James Brown
+   James Marc Brown
+   Brown, JM
+   Brown, J
+   Brown, J.M.
+   Brown, J.
+SO Optical Materials
+PY 2006
+PD 04 2006
+VL 28
+IS 5
+JI Opt. Mater. (Netherlands)
+BP 467
+EP 472
+PS 467-72
+UT INSPEC:8863438
+ER
+
 EF
\ No newline at end of file
diff --git a/src/tests/net/sf/jabref/imports/IsiImporterTestInspec.isi b/src/tests/net/sf/jabref/imports/IsiImporterTestInspec.isi
index 09ceb92..c1dfca1 100644
--- a/src/tests/net/sf/jabref/imports/IsiImporterTestInspec.isi
+++ b/src/tests/net/sf/jabref/imports/IsiImporterTestInspec.isi
@@ -1,122 +1,122 @@
-FN ISI Export Format
-VR 1.0
-PT J
-AN 9027814
-DT Journal Paper
-TI Second harmonic generation of continuous wave ultraviolet light and
-   production of beta -BaB/sub 2/O/sub 4/ optical waveguides
-AU Degl'Innocenti, R.
-   Guarino, A.
-   Poberaj, G.
-   Gunter, P.
-SO Applied Physics Letters
-PY 2006
-PD 07 2006
-VL 89
-IS 4
-JI Appl. Phys. Lett. (USA)
-BP 41103-1
-EP 41103-41103-3
-PS 41103-1-3
-LA English
-AB We report on the generation of continuous-wave (cw) ultraviolet (UV)
-   laser light at lambda =278 nm by optical frequency doubling of visible
-   light in beta -BaB/sub 2/O/sub 4/ waveguides. Ridge-type waveguides
-   were produced by He/sup +/ implantation, photolithography masking, and
-   plasma etching. The final waveguides have core dimension of a few mu
-   m/sup 2/ and show transmission losses of 5 dB/cm at 532 nm and less
-   than 10 dB/cm at 266 nm. In our first experiments, a second harmonic
-   power of 24 mu W has been generated at 278 nm in an 8 mm long waveguide
-   pumped by 153 mW at 556 nm.
-DE Experimental/ barium compounds; ion implantation; optical harmonic generation;
-   optical losses; optical pumping; photolithography; solid lasers;
-   sputter etching; ultraviolet sources; waveguide lasers/ second harmonic generation; continuous-wave light; beta -BaB/sub
-   2/O/sub 4/ optical waveguides; UV laser light; optical frequency
-   doubling; visible light; ridge-type waveguides; He/sup +/ implantation;
-   photolithography masking; plasma etching; transmission losses; optical
-   pumping; 278 nm; 532 nm; 266 nm; 24 muW; 8 mm; 153 mW; 556 nm; BaB/sub
-   2/O/sub 4// A4265K Optical harmonic generation, frequency conversion, parametric
-   oscillation and amplification
-   A4255R Lasing action in other solids
-   A4260B Design of specific laser systems
-   B4340K Optical harmonic generation, frequency conversion, parametric
-   oscillation and amplification
-   B4320G Solid lasers/ wavelength 2.78E-07 m; wavelength 5.32E-07 m; wavelength 2.66E-07 m;
-   power 2.4E-05 W; size 8.0E-03 m; power 1.53E-01 W; wavelength 5.56E-07 m/ BaB2O4/ss B2/ss Ba/ss O4/ss B/ss O/ss
-C1 Degl'Innocenti, R.; Guarino, A.; Poberaj, G.; Gunter, P.; Nonlinear
-   Opt. Lab., Inst. of Quantum Electron., Zurich, Switzerland
-PU AIP
-PV USA
-NR 11
-CO APPLAB
-SN 0003-6951
-ID 0003-6951/2006/89(4)/041103-1(3)/$23.00],[0003-6951(20060724)89:4L.41103:SHGC;1-T],[S0003-6951(06)22430-6],[10.1063/1.2234275]
-UT INSPEC:9027814
-ER
-
-PT J
-AN 9023788
-DT Journal Paper
-TI Optical and photoelectric spectroscopy of photorefractive Sn/sub 2
-   /P/sub 2/S/sub 6/ crystals
-AU Gamernyk, R.V.
-   Gnatenko, Yu.P.
-   Bukivskij, P.M.
-   Skubenko, P.A.
-   Slivka, V.Y.
-SO Journal of Physics: Condensed Matter
-PY 2006
-PD 06 2006
-VL 18
-IS 23
-JI J. Phys., Condens. Matter. (UK)
-BP 5323
-EP 5331
-PS 5323-31
-LA English
-AB Low-temperature studies of the absorption, photoluminescence,
-   photodiffusion and photoconductivity spectra of Sn/sub 2/P/sub 2 /S/sub
-   6/ crystals were carried out in the wide spectral range 0.8-3.5 eV. The
-   position of defect energy levels relative to the crystal energy bands
-   has been determined. It was shown that the photoionization transitions
-   from the valence band to the level with the energy E/sub v /+1.35 eV
-   are caused by the presence of the hole metastable state. In the optical
-   and photoelectric spectra several bands were revealed with energy
-   greater than the band gap of the crystal (E/sub g/ = 2.5 eV). It was
-   established that these bands are caused by the optical transitions
-   between the valence band and upper conduction bands. It was shown that
-   the electron-hole recombination, caused by the band-to-band transitions
-   with the participation of the upper conduction subbands, is fast and
-   corresponds to the nanosecond region. The combined scheme of the defect
-   energy level and the band-to-band electronic phototransitions in Sn/sub
-   2/P/sub 2/S/sub 6/ crystals was constructed. A mechanism for the
-   photorefractive effect in these crystals is proposed.
-DE Experimental/ conduction bands; defect states; electron-hole recombination; infrared
-   spectra; metastable states; photoconductivity; photoionisation;
-   photoluminescence; photorefractive effect; ternary semiconductors; tin
-   compounds; ultraviolet spectra; valence bands; visible spectra/ photoelectric spectroscopy; optical spectroscopy; photorefractive
-   Sn/sub 2/P/sub 2/S/sub 6/ crystals; low-temperature studies; absorption
-   spectra; photoluminescence spectra; photodiffusion; photoconductivity
-   spectra; defect energy levels; crystal energy bands; photoionization
-   transitions; valency band; hole metastable state; photoelectric
-   spectra; band gap; optical transitions; conduction bands; electron-hole
-   recombination; band-to-band transitions; upper conduction subbands;
-   nanosecond region; defect energy-level; band-to-band electronic
-   phototransitions; mechanism; photorefractive effect; 0.8 to 3.5 eV;
-   Sn/sub 2/P/sub 2/S/sub 6// A7820W Other optical properties of condensed matter
-   A7855H Photoluminescence in other inorganic materials
-   A7240 Photoconduction and photovoltaic effects; photodielectric effects
-   A7155H Impurity and defect levels in other nonmetals
-   A7830G Infrared and Raman spectra in inorganic crystals
-   A7840H Visible and ultraviolet spectra of other nonmetals/ electron volt energy 8.0E-01 to 3.5E+00 eV/ Sn2P2S6/ss Sn2/ss P2/ss S6/ss Sn/ss P/ss S/ss
-C1 Gamernyk, R.V.; Lviv Nat. Univ., Ukraine
-PU IOP Publishing
-PV UK
-NR 18
-CO JCOMEL
-SN 0953-8984
-ID 0953-8984/06/235323+09$30.00],[0953-8984(20060614)18:23L.5323:OPSP;1-Y],[S0953-8984(06)16823-X],[10.1088/0953-8984/18/23/006]
-UT INSPEC:9023788
-ER
-
+FN ISI Export Format
+VR 1.0
+PT J
+AN 9027814
+DT Journal Paper
+TI Second harmonic generation of continuous wave ultraviolet light and
+   production of beta -BaB/sub 2/O/sub 4/ optical waveguides
+AU Degl'Innocenti, R.
+   Guarino, A.
+   Poberaj, G.
+   Gunter, P.
+SO Applied Physics Letters
+PY 2006
+PD 07 2006
+VL 89
+IS 4
+JI Appl. Phys. Lett. (USA)
+BP 41103-1
+EP 41103-41103-3
+PS 41103-1-3
+LA English
+AB We report on the generation of continuous-wave (cw) ultraviolet (UV)
+   laser light at lambda =278 nm by optical frequency doubling of visible
+   light in beta -BaB/sub 2/O/sub 4/ waveguides. Ridge-type waveguides
+   were produced by He/sup +/ implantation, photolithography masking, and
+   plasma etching. The final waveguides have core dimension of a few mu
+   m/sup 2/ and show transmission losses of 5 dB/cm at 532 nm and less
+   than 10 dB/cm at 266 nm. In our first experiments, a second harmonic
+   power of 24 mu W has been generated at 278 nm in an 8 mm long waveguide
+   pumped by 153 mW at 556 nm.
+DE Experimental/ barium compounds; ion implantation; optical harmonic generation;
+   optical losses; optical pumping; photolithography; solid lasers;
+   sputter etching; ultraviolet sources; waveguide lasers/ second harmonic generation; continuous-wave light; beta -BaB/sub
+   2/O/sub 4/ optical waveguides; UV laser light; optical frequency
+   doubling; visible light; ridge-type waveguides; He/sup +/ implantation;
+   photolithography masking; plasma etching; transmission losses; optical
+   pumping; 278 nm; 532 nm; 266 nm; 24 muW; 8 mm; 153 mW; 556 nm; BaB/sub
+   2/O/sub 4// A4265K Optical harmonic generation, frequency conversion, parametric
+   oscillation and amplification
+   A4255R Lasing action in other solids
+   A4260B Design of specific laser systems
+   B4340K Optical harmonic generation, frequency conversion, parametric
+   oscillation and amplification
+   B4320G Solid lasers/ wavelength 2.78E-07 m; wavelength 5.32E-07 m; wavelength 2.66E-07 m;
+   power 2.4E-05 W; size 8.0E-03 m; power 1.53E-01 W; wavelength 5.56E-07 m/ BaB2O4/ss B2/ss Ba/ss O4/ss B/ss O/ss
+C1 Degl'Innocenti, R.; Guarino, A.; Poberaj, G.; Gunter, P.; Nonlinear
+   Opt. Lab., Inst. of Quantum Electron., Zurich, Switzerland
+PU AIP
+PV USA
+NR 11
+CO APPLAB
+SN 0003-6951
+ID 0003-6951/2006/89(4)/041103-1(3)/$23.00],[0003-6951(20060724)89:4L.41103:SHGC;1-T],[S0003-6951(06)22430-6],[10.1063/1.2234275]
+UT INSPEC:9027814
+ER
+
+PT J
+AN 9023788
+DT Journal Paper
+TI Optical and photoelectric spectroscopy of photorefractive Sn/sub 2
+   /P/sub 2/S/sub 6/ crystals
+AU Gamernyk, R.V.
+   Gnatenko, Yu.P.
+   Bukivskij, P.M.
+   Skubenko, P.A.
+   Slivka, V.Y.
+SO Journal of Physics: Condensed Matter
+PY 2006
+PD 06 2006
+VL 18
+IS 23
+JI J. Phys., Condens. Matter. (UK)
+BP 5323
+EP 5331
+PS 5323-31
+LA English
+AB Low-temperature studies of the absorption, photoluminescence,
+   photodiffusion and photoconductivity spectra of Sn/sub 2/P/sub 2 /S/sub
+   6/ crystals were carried out in the wide spectral range 0.8-3.5 eV. The
+   position of defect energy levels relative to the crystal energy bands
+   has been determined. It was shown that the photoionization transitions
+   from the valence band to the level with the energy E/sub v /+1.35 eV
+   are caused by the presence of the hole metastable state. In the optical
+   and photoelectric spectra several bands were revealed with energy
+   greater than the band gap of the crystal (E/sub g/ = 2.5 eV). It was
+   established that these bands are caused by the optical transitions
+   between the valence band and upper conduction bands. It was shown that
+   the electron-hole recombination, caused by the band-to-band transitions
+   with the participation of the upper conduction subbands, is fast and
+   corresponds to the nanosecond region. The combined scheme of the defect
+   energy level and the band-to-band electronic phototransitions in Sn/sub
+   2/P/sub 2/S/sub 6/ crystals was constructed. A mechanism for the
+   photorefractive effect in these crystals is proposed.
+DE Experimental/ conduction bands; defect states; electron-hole recombination; infrared
+   spectra; metastable states; photoconductivity; photoionisation;
+   photoluminescence; photorefractive effect; ternary semiconductors; tin
+   compounds; ultraviolet spectra; valence bands; visible spectra/ photoelectric spectroscopy; optical spectroscopy; photorefractive
+   Sn/sub 2/P/sub 2/S/sub 6/ crystals; low-temperature studies; absorption
+   spectra; photoluminescence spectra; photodiffusion; photoconductivity
+   spectra; defect energy levels; crystal energy bands; photoionization
+   transitions; valency band; hole metastable state; photoelectric
+   spectra; band gap; optical transitions; conduction bands; electron-hole
+   recombination; band-to-band transitions; upper conduction subbands;
+   nanosecond region; defect energy-level; band-to-band electronic
+   phototransitions; mechanism; photorefractive effect; 0.8 to 3.5 eV;
+   Sn/sub 2/P/sub 2/S/sub 6// A7820W Other optical properties of condensed matter
+   A7855H Photoluminescence in other inorganic materials
+   A7240 Photoconduction and photovoltaic effects; photodielectric effects
+   A7155H Impurity and defect levels in other nonmetals
+   A7830G Infrared and Raman spectra in inorganic crystals
+   A7840H Visible and ultraviolet spectra of other nonmetals/ electron volt energy 8.0E-01 to 3.5E+00 eV/ Sn2P2S6/ss Sn2/ss P2/ss S6/ss Sn/ss P/ss S/ss
+C1 Gamernyk, R.V.; Lviv Nat. Univ., Ukraine
+PU IOP Publishing
+PV UK
+NR 18
+CO JCOMEL
+SN 0953-8984
+ID 0953-8984/06/235323+09$30.00],[0953-8984(20060614)18:23L.5323:OPSP;1-Y],[S0953-8984(06)16823-X],[10.1088/0953-8984/18/23/006]
+UT INSPEC:9023788
+ER
+
 EF
\ No newline at end of file
diff --git a/src/tests/net/sf/jabref/imports/IsiImporterTestMedline.isi b/src/tests/net/sf/jabref/imports/IsiImporterTestMedline.isi
index e19fb54..3ae8a38 100644
--- a/src/tests/net/sf/jabref/imports/IsiImporterTestMedline.isi
+++ b/src/tests/net/sf/jabref/imports/IsiImporterTestMedline.isi
@@ -1,27 +1,27 @@
-FN ISI Export Format
-VR 1.0
-PT J
-TI Effects of modafinil on cognitive performance and alertness during sleep deprivation.
-AU Wesensten, Nancy J
-SO Curr Pharm Des
-VL 12
-IS 20
-PS 2457-71
-PY 2006
-PD 2006  
-UT MEDLINE:16842170
-ER
-
-PT J
-TI Estrogen therapy selectively enhances prefrontal cognitive processes: a randomized, double-blind, placebo-controlled study with functional magnetic resonance imaging in perimenopausal and recently postmenopausal women.
-AU Joffe, Hadine; Hall, Janet E; Gruber, Staci; Sarmiento, Ingrid A; Cohen, Lee S; Yurgelun-Todd, Deborah; Martin, Kathryn A
-SO Menopause
-VL 13
-IS 3
-PS 411-22
-PY 2006
-PD 2006 May-Jun
-UT MEDLINE:16735938
-ER
-
+FN ISI Export Format
+VR 1.0
+PT J
+TI Effects of modafinil on cognitive performance and alertness during sleep deprivation.
+AU Wesensten, Nancy J
+SO Curr Pharm Des
+VL 12
+IS 20
+PS 2457-71
+PY 2006
+PD 2006  
+UT MEDLINE:16842170
+ER
+
+PT J
+TI Estrogen therapy selectively enhances prefrontal cognitive processes: a randomized, double-blind, placebo-controlled study with functional magnetic resonance imaging in perimenopausal and recently postmenopausal women.
+AU Joffe, Hadine; Hall, Janet E; Gruber, Staci; Sarmiento, Ingrid A; Cohen, Lee S; Yurgelun-Todd, Deborah; Martin, Kathryn A
+SO Menopause
+VL 13
+IS 3
+PS 411-22
+PY 2006
+PD 2006 May-Jun
+UT MEDLINE:16735938
+ER
+
 EF
\ No newline at end of file
diff --git a/src/tests/net/sf/jabref/imports/IsiImporterTestWOS.isi b/src/tests/net/sf/jabref/imports/IsiImporterTestWOS.isi
index ee5dec9..9c3a047 100644
--- a/src/tests/net/sf/jabref/imports/IsiImporterTestWOS.isi
+++ b/src/tests/net/sf/jabref/imports/IsiImporterTestWOS.isi
@@ -1,135 +1,135 @@
-FN ISI Export Format
-VR 1.0
-PT J
-AU Gamernyk, RV
-   Gnatenko, YP
-   Bukivskij, PM
-   Skubenko, PA
-   Slivka, VY
-TI Optical and photoelectric spectroscopy of photorefractive Sn2P2S6
-   crystals
-SO JOURNAL OF PHYSICS-CONDENSED MATTER
-LA English
-DT Article
-ID ELECTRIC-FIELD
-AB Low-temperature studies of the absorption, photoluminescence,
-   photodiffusion and photoconductivity spectra of Sn2P2S6 crystals were
-   carried out in the wide spectral range 0.8-3.5 eV. The position of
-   defect energy levels relative to the crystal energy bands has been
-   determined. It was shown that the photoionization transitions from the
-   valence band to the level with the energy E-v + 1.35 eV are caused by
-   the presence of the hole metastable state. In the optical and
-   photoelectric spectra several bands were revealed with energy greater
-   than the band gap of the crystal (E-g = 2.5 eV). It was established
-   that these bands are caused by the optical transitions between the
-   valence band and upper conduction bands. It was shown that the
-   electron-hole recombination, caused by the band-to-band transitions
-   with the participation of the upper conduction subbands, is fast and
-   corresponds to the nanosecond region. The combined scheme of the defect
-   energy level and the band-to-band electronic phototransitions in
-   Sn2P2S6 crystals was constructed. A mechanism for the photorefractive
-   effect in these crystals is proposed.
-C1 NAS Ukraine, Inst Phys, UA-03028 Kiev, Ukraine.
-   Lviv Natl Univ, UA-29005 Lvov, Ukraine.
-RP Gnatenko, YP, NAS Ukraine, Inst Phys, 46 Prospect Nauky, UA-03028 Kiev,
-   Ukraine.
-EM gnatenko at iop.kiev.ua
-CR BERCHA DM, 1997, FIZ TVERD TELA, V39, P1219
-   BRAVINA SL, 1997, FERROELECTRICS, V192, P197
-   CARPENTIER CD, 1974, MAT RES B, V9, P401
-   ENJALBERT R, 1999, EUR PHYS J B, V8, P169
-   FENCHAK VY, 1997, FERROELECTRICS, V192, P129
-   GNATENKO YP, 2003, J APPL PHYS, V94, P4896
-   GRABAR AA, 1997, FERROELECTRICS, V192, P155
-   GRABAR AA, 2001, OPT COMMUN, V188, P187
-   HLINKA J, 2002, PHYS REV B, V65
-   KEDYULICH VM, 2001, FERROELECTRICS, V254, P243
-   KITYK IV, 1995, FIZ TEKH POLUPROV, V29, P697
-   KUEPPER E, 2003, PHYS REV B, V67
-   LUPASCU DC, 2006, J AM CERAM SOC, V89, P224
-   ODOULOV SG, 1996, J OPT SOC AM B, V13, P2352
-   PETROV MP, 1990, J APPL PHYS, V68, P2216
-   RUEDIGER A, 2001, OPT MATER, V18, P123
-   SHUMELYUK A, 2001, APPL PHYS B-LASERS O, V72, P707
-NR 17
-TC 0
-PU IOP PUBLISHING LTD
-PI BRISTOL
-PA DIRAC HOUSE, TEMPLE BACK, BRISTOL BS1 6BE, ENGLAND
-SN 0953-8984
-J9 J PHYS-CONDENS MATTER
-JI J. Phys.-Condes. Matter
-PD JUN 14
-PY 2006
-VL 18
-IS 23
-BP 5323
-EP 5331
-PG 9
-SC Physics, Condensed Matter
-GA 057JR
-UT ISI:000238592600006
-ER
-
-PT J
-AU Guarino, A
-   Jazbinsek, M
-   Herzog, C
-   Degl'Innocenti, R
-   Poberaj, G
-   Gunter, P
-TI Optical waveguides in Sn2P2S6 by low fluence MeV He+ ion implantation
-SO OPTICS EXPRESS
-LA English
-DT Article
-ID REFRACTIVE-INDEX PROFILES; INFRARED WAVELENGTHS; PHASE-CONJUGATION;
-   KNBO3; MODES
-AB Planar waveguides in nonlinear optical crystals of Sn2P2S6 have been
-   produced by He+ ion implantation. The effective indices of the
-   waveguide have been determined and refractive index profiles have been
-   evaluated for the indices along all three principal axes of the optical
-   indicatrix. The depth of the induced optical barrier is. Delta n(1) = -
-   0.07, Delta n(2) = - 0.07 and Delta n(3) = - 0.09 lambda = 0.633 mu m
-   for a fluence Phi = 0.5 x 10(15) ions/cm(2). Propagation losses for
-   hybrid-n(1) modes are alpha similar or equal to 10dB/cm. (c) 2006
-   Optical Society of America.
-C1 ETH, Inst Quantum Elect, Nonlinear Opt Lab, CH-8093 Zurich, Switzerland.
-RP Guarino, A, ETH, Inst Quantum Elect, Nonlinear Opt Lab, CH-8093 Zurich,
-   Switzerland.
-EM guarino at phys.ethz.ch
-CR BACH T, 2005, OPT EXPRESS, V13, P9890
-   CHANDLER PJ, 1986, OPT ACTA, V33, P127
-   CHIANG KS, 1985, J LIGHTWAVE TECHNOL, V3, P385
-   DEROSSI A, 2005, J APPL PHYS, V97
-   FLUCK D, 1992, FERROELECTRICS, V128, P79
-   FLUCK D, 1993, J APPL PHYS, V74, P6023
-   GUARINO A, 2005, OPT LETT, V18, P2412
-   HAERTLE D, 2005, OPT EXPRESS, V13, P2047
-   HAERTLE D, 2005, OPT EXPRESS, V13, P3765
-   JAZBINSEK M, 2005, J OPT SOC AM B, V22, P2459
-   MALDONADO TA, 1996, J LIGHTWAVE TECHNOL, V14, P486
-   MARCUSE D, 1978, IEEE J QUANTUM ELECT, V14, P736
-   TOWNSEND PD, 1994, OPTICAL EFFECTS ION
-   YARIV A, 1984, OPTICAL WAVES CRYSTA
-   ZHA M, 1993, OPT LETT, V18, P577
-NR 15
-TC 0
-PU OPTICAL SOC AMER
-PI WASHINGTON
-PA 2010 MASSACHUSETTS AVE NW, WASHINGTON, DC 20036 USA
-SN 1094-4087
-J9 OPT EXPRESS
-JI Opt. Express
-PD MAR 20
-PY 2006
-VL 14
-IS 6
-BP 2344
-EP 2358
-PG 15
-SC Optics
-GA 024NR
-UT ISI:000236202800037
-ER
-
+FN ISI Export Format
+VR 1.0
+PT J
+AU Gamernyk, RV
+   Gnatenko, YP
+   Bukivskij, PM
+   Skubenko, PA
+   Slivka, VY
+TI Optical and photoelectric spectroscopy of photorefractive Sn2P2S6
+   crystals
+SO JOURNAL OF PHYSICS-CONDENSED MATTER
+LA English
+DT Article
+ID ELECTRIC-FIELD
+AB Low-temperature studies of the absorption, photoluminescence,
+   photodiffusion and photoconductivity spectra of Sn2P2S6 crystals were
+   carried out in the wide spectral range 0.8-3.5 eV. The position of
+   defect energy levels relative to the crystal energy bands has been
+   determined. It was shown that the photoionization transitions from the
+   valence band to the level with the energy E-v + 1.35 eV are caused by
+   the presence of the hole metastable state. In the optical and
+   photoelectric spectra several bands were revealed with energy greater
+   than the band gap of the crystal (E-g = 2.5 eV). It was established
+   that these bands are caused by the optical transitions between the
+   valence band and upper conduction bands. It was shown that the
+   electron-hole recombination, caused by the band-to-band transitions
+   with the participation of the upper conduction subbands, is fast and
+   corresponds to the nanosecond region. The combined scheme of the defect
+   energy level and the band-to-band electronic phototransitions in
+   Sn2P2S6 crystals was constructed. A mechanism for the photorefractive
+   effect in these crystals is proposed.
+C1 NAS Ukraine, Inst Phys, UA-03028 Kiev, Ukraine.
+   Lviv Natl Univ, UA-29005 Lvov, Ukraine.
+RP Gnatenko, YP, NAS Ukraine, Inst Phys, 46 Prospect Nauky, UA-03028 Kiev,
+   Ukraine.
+EM gnatenko at iop.kiev.ua
+CR BERCHA DM, 1997, FIZ TVERD TELA, V39, P1219
+   BRAVINA SL, 1997, FERROELECTRICS, V192, P197
+   CARPENTIER CD, 1974, MAT RES B, V9, P401
+   ENJALBERT R, 1999, EUR PHYS J B, V8, P169
+   FENCHAK VY, 1997, FERROELECTRICS, V192, P129
+   GNATENKO YP, 2003, J APPL PHYS, V94, P4896
+   GRABAR AA, 1997, FERROELECTRICS, V192, P155
+   GRABAR AA, 2001, OPT COMMUN, V188, P187
+   HLINKA J, 2002, PHYS REV B, V65
+   KEDYULICH VM, 2001, FERROELECTRICS, V254, P243
+   KITYK IV, 1995, FIZ TEKH POLUPROV, V29, P697
+   KUEPPER E, 2003, PHYS REV B, V67
+   LUPASCU DC, 2006, J AM CERAM SOC, V89, P224
+   ODOULOV SG, 1996, J OPT SOC AM B, V13, P2352
+   PETROV MP, 1990, J APPL PHYS, V68, P2216
+   RUEDIGER A, 2001, OPT MATER, V18, P123
+   SHUMELYUK A, 2001, APPL PHYS B-LASERS O, V72, P707
+NR 17
+TC 0
+PU IOP PUBLISHING LTD
+PI BRISTOL
+PA DIRAC HOUSE, TEMPLE BACK, BRISTOL BS1 6BE, ENGLAND
+SN 0953-8984
+J9 J PHYS-CONDENS MATTER
+JI J. Phys.-Condes. Matter
+PD JUN 14
+PY 2006
+VL 18
+IS 23
+BP 5323
+EP 5331
+PG 9
+SC Physics, Condensed Matter
+GA 057JR
+UT ISI:000238592600006
+ER
+
+PT J
+AU Guarino, A
+   Jazbinsek, M
+   Herzog, C
+   Degl'Innocenti, R
+   Poberaj, G
+   Gunter, P
+TI Optical waveguides in Sn2P2S6 by low fluence MeV He+ ion implantation
+SO OPTICS EXPRESS
+LA English
+DT Article
+ID REFRACTIVE-INDEX PROFILES; INFRARED WAVELENGTHS; PHASE-CONJUGATION;
+   KNBO3; MODES
+AB Planar waveguides in nonlinear optical crystals of Sn2P2S6 have been
+   produced by He+ ion implantation. The effective indices of the
+   waveguide have been determined and refractive index profiles have been
+   evaluated for the indices along all three principal axes of the optical
+   indicatrix. The depth of the induced optical barrier is. Delta n(1) = -
+   0.07, Delta n(2) = - 0.07 and Delta n(3) = - 0.09 lambda = 0.633 mu m
+   for a fluence Phi = 0.5 x 10(15) ions/cm(2). Propagation losses for
+   hybrid-n(1) modes are alpha similar or equal to 10dB/cm. (c) 2006
+   Optical Society of America.
+C1 ETH, Inst Quantum Elect, Nonlinear Opt Lab, CH-8093 Zurich, Switzerland.
+RP Guarino, A, ETH, Inst Quantum Elect, Nonlinear Opt Lab, CH-8093 Zurich,
+   Switzerland.
+EM guarino at phys.ethz.ch
+CR BACH T, 2005, OPT EXPRESS, V13, P9890
+   CHANDLER PJ, 1986, OPT ACTA, V33, P127
+   CHIANG KS, 1985, J LIGHTWAVE TECHNOL, V3, P385
+   DEROSSI A, 2005, J APPL PHYS, V97
+   FLUCK D, 1992, FERROELECTRICS, V128, P79
+   FLUCK D, 1993, J APPL PHYS, V74, P6023
+   GUARINO A, 2005, OPT LETT, V18, P2412
+   HAERTLE D, 2005, OPT EXPRESS, V13, P2047
+   HAERTLE D, 2005, OPT EXPRESS, V13, P3765
+   JAZBINSEK M, 2005, J OPT SOC AM B, V22, P2459
+   MALDONADO TA, 1996, J LIGHTWAVE TECHNOL, V14, P486
+   MARCUSE D, 1978, IEEE J QUANTUM ELECT, V14, P736
+   TOWNSEND PD, 1994, OPTICAL EFFECTS ION
+   YARIV A, 1984, OPTICAL WAVES CRYSTA
+   ZHA M, 1993, OPT LETT, V18, P577
+NR 15
+TC 0
+PU OPTICAL SOC AMER
+PI WASHINGTON
+PA 2010 MASSACHUSETTS AVE NW, WASHINGTON, DC 20036 USA
+SN 1094-4087
+J9 OPT EXPRESS
+JI Opt. Express
+PD MAR 20
+PY 2006
+VL 14
+IS 6
+BP 2344
+EP 2358
+PG 15
+SC Optics
+GA 024NR
+UT ISI:000236202800037
+ER
+
 EF
\ No newline at end of file
diff --git a/src/tests/net/sf/jabref/imports/oai2.xml b/src/tests/net/sf/jabref/imports/oai2.xml
index 2de0a64..fa3e84c 100644
--- a/src/tests/net/sf/jabref/imports/oai2.xml
+++ b/src/tests/net/sf/jabref/imports/oai2.xml
@@ -1,38 +1,38 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
-<responseDate>2006-11-17T15:29:52Z</responseDate>
-<request verb="GetRecord" identifier="oai:arXiv.org:hep-ph/0408155" metadataPrefix="arXiv">http://arXiv.org/oai2</request>
-<GetRecord>
-<record>
-<header>
- <identifier>oai:arXiv.org:hep-ph/0408155</identifier>
- <datestamp>2005-09-18</datestamp>
- <setSpec>physics:astro-ph</setSpec>
- <setSpec>physics:hep-ph</setSpec>
- <setSpec>physics:hep-th</setSpec>
-</header>
-<metadata>
- <arXiv xmlns="http://arxiv.org/OAI/arXiv/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://arxiv.org/OAI/arXiv/ http://arXiv.org/OAI/arXiv.xsd">
- <id>hep-ph/0408155</id>
- <authors>
- 	<author><keyname>Giudice</keyname><forenames>G. F.</forenames></author>
- 	<author><keyname>Riotto</keyname><forenames>A.</forenames></author>
- 	<author><keyname>Zaffaroni</keyname><forenames>A.</forenames></author>
- 	<author><keyname>López-Peña</keyname><forenames>J.</forenames></author>
- </authors>
- 
- 	<title>Heavy Particles from Inflation</title><categories>hep-ph astro-ph hep-th</categories><comments>23 pages</comments><report-no>CERN-PH-TH/2004-151</report-no><journal-ref>Nucl.Phys. B710 (2005) 511-525</journal-ref><doi>10.1016/j.nuclphysb.2004.12.037</doi><abstract>  We describe a simple and efficient mechanism by which very heavy particles
-are copiously created from a primordial inflationary epoch. It works for scalar
-fields which are massless or very light during inflation and acquire a large
-mass right after the end of inflation. Such particles can exist in realistic
-scenarios, as we illustrate with several examples in the context of both field
-and string theory. Long-wavelength fluctuations of these fields are generated
-during inflation with an almost scale-invariant spectrum and may give the
-dominant contribution to the energy density of the heavy fields at late times.
-Applications of our results to superheavy dark matter and leptogenesis are
-discussed.
-</abstract></arXiv>
-</metadata>
-</record>
-</GetRecord>
-</OAI-PMH>
+<?xml version="1.0" encoding="UTF-8"?>
+<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
+<responseDate>2006-11-17T15:29:52Z</responseDate>
+<request verb="GetRecord" identifier="oai:arXiv.org:hep-ph/0408155" metadataPrefix="arXiv">http://arXiv.org/oai2</request>
+<GetRecord>
+<record>
+<header>
+ <identifier>oai:arXiv.org:hep-ph/0408155</identifier>
+ <datestamp>2005-09-18</datestamp>
+ <setSpec>physics:astro-ph</setSpec>
+ <setSpec>physics:hep-ph</setSpec>
+ <setSpec>physics:hep-th</setSpec>
+</header>
+<metadata>
+ <arXiv xmlns="http://arxiv.org/OAI/arXiv/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://arxiv.org/OAI/arXiv/ http://arXiv.org/OAI/arXiv.xsd">
+ <id>hep-ph/0408155</id>
+ <authors>
+ 	<author><keyname>Giudice</keyname><forenames>G. F.</forenames></author>
+ 	<author><keyname>Riotto</keyname><forenames>A.</forenames></author>
+ 	<author><keyname>Zaffaroni</keyname><forenames>A.</forenames></author>
+ 	<author><keyname>López-Peña</keyname><forenames>J.</forenames></author>
+ </authors>
+ 
+ 	<title>Heavy Particles from Inflation</title><categories>hep-ph astro-ph hep-th</categories><comments>23 pages</comments><report-no>CERN-PH-TH/2004-151</report-no><journal-ref>Nucl.Phys. B710 (2005) 511-525</journal-ref><doi>10.1016/j.nuclphysb.2004.12.037</doi><abstract>  We describe a simple and efficient mechanism by which very heavy particles
+are copiously created from a primordial inflationary epoch. It works for scalar
+fields which are massless or very light during inflation and acquire a large
+mass right after the end of inflation. Such particles can exist in realistic
+scenarios, as we illustrate with several examples in the context of both field
+and string theory. Long-wavelength fluctuations of these fields are generated
+during inflation with an almost scale-invariant spectrum and may give the
+dominant contribution to the energy density of the heavy fields at late times.
+Applications of our results to superheavy dark matter and leptogenesis are
+discussed.
+</abstract></arXiv>
+</metadata>
+</record>
+</GetRecord>
+</OAI-PMH>
diff --git a/src/tests/net/sf/jabref/imports/oai22.xml b/src/tests/net/sf/jabref/imports/oai22.xml
index 4eec30b..62e9ccf 100644
--- a/src/tests/net/sf/jabref/imports/oai22.xml
+++ b/src/tests/net/sf/jabref/imports/oai22.xml
@@ -1,30 +1,30 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
-<responseDate>2006-11-17T15:29:52Z</responseDate>
-<request verb="GetRecord" identifier="oai:arXiv.org:hep-ph/0408155" metadataPrefix="arXiv">http://arXiv.org/oai2</request>
-<GetRecord>
-<record>
-<header>
- <identifier>oai:arXiv.org:hep-ph/0408155</identifier>
- <datestamp>2005-09-18</datestamp>
- <setSpec>physics:astro-ph</setSpec>
- <setSpec>physics:hep-ph</setSpec>
- <setSpec>physics:hep-th</setSpec>
-</header>
-<metadata>
- <arXiv xmlns="http://arxiv.org/OAI/arXiv/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://arxiv.org/OAI/arXiv/ http://arXiv.org/OAI/arXiv.xsd">
- <id>hep-ph/0408155</id><authors><author><keyname>Giudice</keyname><forenames>G. F.</forenames></author><author><keyname>Riotto</keyname><forenames>A.</forenames></author><author><keyname>Zaffaroni</keyname><forenames>A.</forenames></author></authors><title>Heavy Particles from Inflation</title><categories>hep-ph astro-ph hep-th</categories><comments>23 pages</comments><report-no>CERN-PH-TH/2004-151</report-no><doi>10.1016/j.nuclphysb.2004.12.037</doi><abstract>  We describe a simple and [...]
-are copiously created from a primordial inflationary epoch. It works for scalar
-fields which are massless or very light during inflation and acquire a large
-mass right after the end of inflation. Such particles can exist in realistic
-scenarios, as we illustrate with several examples in the context of both field
-and string theory. Long-wavelength fluctuations of these fields are generated
-during inflation with an almost scale-invariant spectrum and may give the
-dominant contribution to the energy density of the heavy fields at late times.
-Applications of our results to superheavy dark matter and leptogenesis are
-discussed.
-</abstract></arXiv>
-</metadata>
-</record>
-</GetRecord>
+<?xml version="1.0" encoding="UTF-8"?>
+<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
+<responseDate>2006-11-17T15:29:52Z</responseDate>
+<request verb="GetRecord" identifier="oai:arXiv.org:hep-ph/0408155" metadataPrefix="arXiv">http://arXiv.org/oai2</request>
+<GetRecord>
+<record>
+<header>
+ <identifier>oai:arXiv.org:hep-ph/0408155</identifier>
+ <datestamp>2005-09-18</datestamp>
+ <setSpec>physics:astro-ph</setSpec>
+ <setSpec>physics:hep-ph</setSpec>
+ <setSpec>physics:hep-th</setSpec>
+</header>
+<metadata>
+ <arXiv xmlns="http://arxiv.org/OAI/arXiv/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://arxiv.org/OAI/arXiv/ http://arXiv.org/OAI/arXiv.xsd">
+ <id>hep-ph/0408155</id><authors><author><keyname>Giudice</keyname><forenames>G. F.</forenames></author><author><keyname>Riotto</keyname><forenames>A.</forenames></author><author><keyname>Zaffaroni</keyname><forenames>A.</forenames></author></authors><title>Heavy Particles from Inflation</title><categories>hep-ph astro-ph hep-th</categories><comments>23 pages</comments><report-no>CERN-PH-TH/2004-151</report-no><doi>10.1016/j.nuclphysb.2004.12.037</doi><abstract>  We describe a simple and [...]
+are copiously created from a primordial inflationary epoch. It works for scalar
+fields which are massless or very light during inflation and acquire a large
+mass right after the end of inflation. Such particles can exist in realistic
+scenarios, as we illustrate with several examples in the context of both field
+and string theory. Long-wavelength fluctuations of these fields are generated
+during inflation with an almost scale-invariant spectrum and may give the
+dominant contribution to the energy density of the heavy fields at late times.
+Applications of our results to superheavy dark matter and leptogenesis are
+discussed.
+</abstract></arXiv>
+</metadata>
+</record>
+</GetRecord>
 </OAI-PMH>
\ No newline at end of file
diff --git a/src/tests/net/sf/jabref/imports/oai23.xml b/src/tests/net/sf/jabref/imports/oai23.xml
index 106320d..dae4250 100644
--- a/src/tests/net/sf/jabref/imports/oai23.xml
+++ b/src/tests/net/sf/jabref/imports/oai23.xml
@@ -1,37 +1,37 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
-<responseDate>2007-02-08T22:18:16Z</responseDate>
-<request verb="GetRecord" identifier="oai:arXiv.org:math/0612188" metadataPrefix="arXiv">http://arXiv.org/oai2</request>
-<GetRecord>
-<record>
-<header>
- <identifier>oai:arXiv.org:math/0612188</identifier>
- <datestamp>2006-12-15</datestamp>
- <setSpec>math</setSpec>
-</header>
-<metadata>
- <arXiv xmlns="http://arxiv.org/OAI/arXiv/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://arxiv.org/OAI/arXiv/ http://arXiv.org/OAI/arXiv.xsd">
- <id>math/0612188</id>
- <authors>
- <author>
- 	<keyname>Peña</keyname>
-	<forenames>Javier López</forenames>
- </author>
- <author>
- 	<keyname>Navarro</keyname>
- 	<forenames>Gabriel</forenames>
- </author>
-</authors>
-
-<title>On the classification and properties of noncommutative duplicates</title><categories>math.RA math.KT math.QA</categories><comments>11 pages, no figures</comments><subj-class>Rings and Algebras; K-Theory and Homology; Quantum Algebra</subj-class><msc-class>16W35; 16S35; 16E40</msc-class><abstract>  We give an explicit description of the set of all factorization structures,
-or twisting maps, existing between the algebras k^2 and k^2, and classify the
-resulting algebras up to isomorphism. In the process we relate several
-different approaches formerly taken to deal with this problem, filling a gap
-that appeared in a recent paper by Cibils. We also provide a counterexample to
-a result concerning the Hochschild (co)homology appeared in a paper by J.A.
-Guccione and J.J. Guccione.
-</abstract></arXiv>
-</metadata>
-</record>
-</GetRecord>
-</OAI-PMH>
+<?xml version="1.0" encoding="UTF-8"?>
+<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
+<responseDate>2007-02-08T22:18:16Z</responseDate>
+<request verb="GetRecord" identifier="oai:arXiv.org:math/0612188" metadataPrefix="arXiv">http://arXiv.org/oai2</request>
+<GetRecord>
+<record>
+<header>
+ <identifier>oai:arXiv.org:math/0612188</identifier>
+ <datestamp>2006-12-15</datestamp>
+ <setSpec>math</setSpec>
+</header>
+<metadata>
+ <arXiv xmlns="http://arxiv.org/OAI/arXiv/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://arxiv.org/OAI/arXiv/ http://arXiv.org/OAI/arXiv.xsd">
+ <id>math/0612188</id>
+ <authors>
+ <author>
+ 	<keyname>Peña</keyname>
+	<forenames>Javier López</forenames>
+ </author>
+ <author>
+ 	<keyname>Navarro</keyname>
+ 	<forenames>Gabriel</forenames>
+ </author>
+</authors>
+
+<title>On the classification and properties of noncommutative duplicates</title><categories>math.RA math.KT math.QA</categories><comments>11 pages, no figures</comments><subj-class>Rings and Algebras; K-Theory and Homology; Quantum Algebra</subj-class><msc-class>16W35; 16S35; 16E40</msc-class><abstract>  We give an explicit description of the set of all factorization structures,
+or twisting maps, existing between the algebras k^2 and k^2, and classify the
+resulting algebras up to isomorphism. In the process we relate several
+different approaches formerly taken to deal with this problem, filling a gap
+that appeared in a recent paper by Cibils. We also provide a counterexample to
+a result concerning the Hochschild (co)homology appeared in a paper by J.A.
+Guccione and J.J. Guccione.
+</abstract></arXiv>
+</metadata>
+</record>
+</GetRecord>
+</OAI-PMH>
diff --git a/src/tests/net/sf/jabref/util/twente.bib b/src/tests/net/sf/jabref/util/twente.bib
index f8d4d51..5b57f8d 100644
--- a/src/tests/net/sf/jabref/util/twente.bib
+++ b/src/tests/net/sf/jabref/util/twente.bib
@@ -1,159 +1,159 @@
-This file was created with JabRef 2.2.
-Encoding: UTF-8
-
- at STRING{Aggarwal = {Aggarwal, G.}}
-
- at STRING{Ahn = {Ahn, Jung Ho}}
-
- at STRING{Arvind = {Arvind}}
-
- at STRING{Asanovic = {Asanov\'\i{}c, Krste}}
-
- at STRING{Bartic = {Bartic, T.}}
-
- at STRING{Bekooij = {Bekooij, Marco}}
-
- at STRING{Borkar = {Borkar, Nitin}}
-
- at STRING{Chiou = {Chiou, Derek}}
-
- at STRING{Compton = {Compton, K.}}
-
- at STRING{Cooley = {Cooley, J.}}
-
- at STRING{Dally = {Dally, William James}}
-
- at STRING{Das = {Das, Abhishek}}
-
- at STRING{Day = {Day, Michael N.}}
-
- at STRING{Dighe = {Dighe, Saurabh}}
-
- at STRING{Finan = {Finan, David}}
-
- at STRING{Fu = {Fu, W.}}
-
- at STRING{Gheorghita = {Gheorghita, Valentin}}
-
- at STRING{Hauck = {Hauck, S.}}
-
- at STRING{Hoe = {Hoe, James}}
-
- at STRING{Hoes = {Hoes, Rob}}
-
- at STRING{Hofstee = {Hofstee, H. Peter}}
-
- at STRING{Hoskote = {Hoskote, Yatin}}
-
- at STRING{Howard = {Howard, James}}
-
- at STRING{Hurink = {Hurink, J.L.}}
-
- at STRING{Iyer = {Iyer, Priya}}
-
- at STRING{Jacob = {Jacob, Tiju}}
-
- at STRING{Jain = {Jain, Shailendra}}
-
- at STRING{Johns = {Johns, Charles R.}}
-
- at STRING{Kahle = {Kahle, James A.}}
-
- at STRING{Kapasi = {Kapasi, Ujval J.}}
-
- at STRING{Khailany = {Khailany, Brucek}}
-
- at STRING{Knol = {Knol, S.}}
-
- at STRING{Kozyrakis = {Kozyrakis, Christos}}
-
- at STRING{Lauwereins = {Lauwereins, R.}}
-
- at STRING{Leeser = {Leeser, M.}}
-
- at STRING{Li = {Li, Z.}}
-
- at STRING{Lu = {Lu, S{hih-Lien}}}
-
- at STRING{Maeurer = {Maeurer, Theodore R.}}
-
- at STRING{Meerbergen = {van Meerbergen, Jef}}
-
- at STRING{Mesman = {Mesman, Bart}}
-
- at STRING{Mignolet = {Mignolet, J.}}
-
- at STRING{Mol = {Mol, Jan David}}
-
- at STRING{Moreira = {Moreira, Orlando}}
-
- at STRING{Motwani = {Motwani, R.}}
-
- at STRING{Nollet = {Nollet, V.}}
-
- at STRING{Oskin = {Oskin, Mark}}
-
- at STRING{Pastrnak = {Pastrnak, Milan}}
-
- at STRING{Patterson = {Patterson, David}}
-
- at STRING{Poplavko = {Peter Poplavko}}
-
- at STRING{Quinn = {Quinn, H.}}
-
- at STRING{Rabaey = {Rabaey, Jan}}
-
- at STRING{Ruhl = {Ruhl, Gregory}}
-
- at STRING{Shippy = {Shippy, David}}
-
- at STRING{Singh = {Singh, Arvind}}
-
- at STRING{SmitGJM = {Smit, G.J.M.}}
-
- at STRING{Smith = {Smith, L. A.}}
-
- at STRING{SmitLT = {Smit, L.T.}}
-
- at STRING{Stok = {van der Stok, Peter}}
-
- at STRING{Stuijk = {Stuijk, Sander}}
-
- at STRING{Tschanz = {Tschanz, James}}
-
- at STRING{Vangal = {Vangal, Sriram}}
-
- at STRING{Venkataraman = {Venkataraman, Sriram}}
-
- at STRING{Verkest = {Verkest, D.}}
-
- at STRING{Vernalde = {Vernalde, S.}}
-
- at STRING{Wawrzynek = {Wawrzynek, John}}
-
- at STRING{Wilson = {Wilson, Howard}}
-
- at STRING{Zhu = {Zhu, A.}}
-
- at TECHREPORT{Patterson06,
-  author = Patterson # { and } # Arvind # { and } # Asanovic # { and } # Chiou
-	# { and } # Hoe # { and } # Kozyrakis # { and } # Lu # { and } #
-	Oskin # { and } # Rabaey # { and } # Wawrzynek,
-  title = {RAMP: Research Accelerator for Multiple Processors},
-  institution = {M{assachusetts} I{nstitute} {of} T{echnology}},
-  year = {2006},
-  type = {Presentation},
-  address = {Palo Alto, CA},
-  month = {August},
-  pdf = {Patterson06.pdf},
-  url = {http://www.hotchips.org/hc18/program/conference_day_one.htm}
-}
-
- at comment{jabref-meta: selector_journal:}
-
- at comment{jabref-meta: selector_author:}
-
- at comment{jabref-meta: selector_keywords:}
-
- at comment{jabref-meta: selector_publisher:}
-
+This file was created with JabRef 2.2.
+Encoding: UTF-8
+
+ at STRING{Aggarwal = {Aggarwal, G.}}
+
+ at STRING{Ahn = {Ahn, Jung Ho}}
+
+ at STRING{Arvind = {Arvind}}
+
+ at STRING{Asanovic = {Asanov\'\i{}c, Krste}}
+
+ at STRING{Bartic = {Bartic, T.}}
+
+ at STRING{Bekooij = {Bekooij, Marco}}
+
+ at STRING{Borkar = {Borkar, Nitin}}
+
+ at STRING{Chiou = {Chiou, Derek}}
+
+ at STRING{Compton = {Compton, K.}}
+
+ at STRING{Cooley = {Cooley, J.}}
+
+ at STRING{Dally = {Dally, William James}}
+
+ at STRING{Das = {Das, Abhishek}}
+
+ at STRING{Day = {Day, Michael N.}}
+
+ at STRING{Dighe = {Dighe, Saurabh}}
+
+ at STRING{Finan = {Finan, David}}
+
+ at STRING{Fu = {Fu, W.}}
+
+ at STRING{Gheorghita = {Gheorghita, Valentin}}
+
+ at STRING{Hauck = {Hauck, S.}}
+
+ at STRING{Hoe = {Hoe, James}}
+
+ at STRING{Hoes = {Hoes, Rob}}
+
+ at STRING{Hofstee = {Hofstee, H. Peter}}
+
+ at STRING{Hoskote = {Hoskote, Yatin}}
+
+ at STRING{Howard = {Howard, James}}
+
+ at STRING{Hurink = {Hurink, J.L.}}
+
+ at STRING{Iyer = {Iyer, Priya}}
+
+ at STRING{Jacob = {Jacob, Tiju}}
+
+ at STRING{Jain = {Jain, Shailendra}}
+
+ at STRING{Johns = {Johns, Charles R.}}
+
+ at STRING{Kahle = {Kahle, James A.}}
+
+ at STRING{Kapasi = {Kapasi, Ujval J.}}
+
+ at STRING{Khailany = {Khailany, Brucek}}
+
+ at STRING{Knol = {Knol, S.}}
+
+ at STRING{Kozyrakis = {Kozyrakis, Christos}}
+
+ at STRING{Lauwereins = {Lauwereins, R.}}
+
+ at STRING{Leeser = {Leeser, M.}}
+
+ at STRING{Li = {Li, Z.}}
+
+ at STRING{Lu = {Lu, S{hih-Lien}}}
+
+ at STRING{Maeurer = {Maeurer, Theodore R.}}
+
+ at STRING{Meerbergen = {van Meerbergen, Jef}}
+
+ at STRING{Mesman = {Mesman, Bart}}
+
+ at STRING{Mignolet = {Mignolet, J.}}
+
+ at STRING{Mol = {Mol, Jan David}}
+
+ at STRING{Moreira = {Moreira, Orlando}}
+
+ at STRING{Motwani = {Motwani, R.}}
+
+ at STRING{Nollet = {Nollet, V.}}
+
+ at STRING{Oskin = {Oskin, Mark}}
+
+ at STRING{Pastrnak = {Pastrnak, Milan}}
+
+ at STRING{Patterson = {Patterson, David}}
+
+ at STRING{Poplavko = {Peter Poplavko}}
+
+ at STRING{Quinn = {Quinn, H.}}
+
+ at STRING{Rabaey = {Rabaey, Jan}}
+
+ at STRING{Ruhl = {Ruhl, Gregory}}
+
+ at STRING{Shippy = {Shippy, David}}
+
+ at STRING{Singh = {Singh, Arvind}}
+
+ at STRING{SmitGJM = {Smit, G.J.M.}}
+
+ at STRING{Smith = {Smith, L. A.}}
+
+ at STRING{SmitLT = {Smit, L.T.}}
+
+ at STRING{Stok = {van der Stok, Peter}}
+
+ at STRING{Stuijk = {Stuijk, Sander}}
+
+ at STRING{Tschanz = {Tschanz, James}}
+
+ at STRING{Vangal = {Vangal, Sriram}}
+
+ at STRING{Venkataraman = {Venkataraman, Sriram}}
+
+ at STRING{Verkest = {Verkest, D.}}
+
+ at STRING{Vernalde = {Vernalde, S.}}
+
+ at STRING{Wawrzynek = {Wawrzynek, John}}
+
+ at STRING{Wilson = {Wilson, Howard}}
+
+ at STRING{Zhu = {Zhu, A.}}
+
+ at TECHREPORT{Patterson06,
+  author = Patterson # { and } # Arvind # { and } # Asanovic # { and } # Chiou
+	# { and } # Hoe # { and } # Kozyrakis # { and } # Lu # { and } #
+	Oskin # { and } # Rabaey # { and } # Wawrzynek,
+  title = {RAMP: Research Accelerator for Multiple Processors},
+  institution = {M{assachusetts} I{nstitute} {of} T{echnology}},
+  year = {2006},
+  type = {Presentation},
+  address = {Palo Alto, CA},
+  month = {August},
+  pdf = {Patterson06.pdf},
+  url = {http://www.hotchips.org/hc18/program/conference_day_one.htm}
+}
+
+ at comment{jabref-meta: selector_journal:}
+
+ at comment{jabref-meta: selector_author:}
+
+ at comment{jabref-meta: selector_keywords:}
+
+ at comment{jabref-meta: selector_publisher:}
+
diff --git a/src/tests/net/sf/jabref/util/unlinkedFilesTestBib.bib b/src/tests/net/sf/jabref/util/unlinkedFilesTestBib.bib
index 1a2d7a8..89df19c 100644
--- a/src/tests/net/sf/jabref/util/unlinkedFilesTestBib.bib
+++ b/src/tests/net/sf/jabref/util/unlinkedFilesTestBib.bib
@@ -1,27 +1,27 @@
-% This file was created with JabRef devel - 1st edition family.
-% Encoding: Cp1252
-
- at BOOK{entry1,
-  title = {MyBook},
-  author = {Janosch},
-  file = {:D\:\\Janosh\\_UNI\\_Eclipse_WS\\Jabref_WC\\src\\tests\\net\\sf\\jabref\\imports\\unlinkedFilesTestFolder\\pdfInDatabase.pdf:PDF},
-  owner = {Nosh},
-  timestamp = {2008.11.09}
-}
-
- at ARTICLE{entry2,
-  author = {Janos Kutscherauer},
-  title = {Testarticle},
-  file = {:D\:\\Janosh\\_UNI\\_Eclipse_WS\\Jabref\\pdfTestFolder\\sub2\\sub22\\d1anl2.pdf:PDF;:D\:\\Janosh\\_UNI\\_Eclipse_WS\\Jabref\\pdfTestFolder\\metaDataPdf.pdf:PDF},
-  owner = {Nosh},
-  timestamp = {2008.11.09}
-}
-
- at comment{jabref-meta: selector_publisher:}
-
- at comment{jabref-meta: selector_author:}
-
- at comment{jabref-meta: selector_journal:}
-
- at comment{jabref-meta: selector_keywords:}
-
+% This file was created with JabRef devel - 1st edition family.
+% Encoding: Cp1252
+
+ at BOOK{entry1,
+  title = {MyBook},
+  author = {Janosch},
+  file = {:D\:\\Janosh\\_UNI\\_Eclipse_WS\\Jabref_WC\\src\\tests\\net\\sf\\jabref\\imports\\unlinkedFilesTestFolder\\pdfInDatabase.pdf:PDF},
+  owner = {Nosh},
+  timestamp = {2008.11.09}
+}
+
+ at ARTICLE{entry2,
+  author = {Janos Kutscherauer},
+  title = {Testarticle},
+  file = {:D\:\\Janosh\\_UNI\\_Eclipse_WS\\Jabref\\pdfTestFolder\\sub2\\sub22\\d1anl2.pdf:PDF;:D\:\\Janosh\\_UNI\\_Eclipse_WS\\Jabref\\pdfTestFolder\\metaDataPdf.pdf:PDF},
+  owner = {Nosh},
+  timestamp = {2008.11.09}
+}
+
+ at comment{jabref-meta: selector_publisher:}
+
+ at comment{jabref-meta: selector_author:}
+
+ at comment{jabref-meta: selector_journal:}
+
+ at comment{jabref-meta: selector_keywords:}
+
diff --git a/src/txt/CHANGELOG b/src/txt/CHANGELOG
index 0aeec84..c68e90e 100644
--- a/src/txt/CHANGELOG
+++ b/src/txt/CHANGELOG
@@ -1,1171 +1,1177 @@
-2.9
-    - Fixed bug: in OO/LO reference lists, entries may fall out when multiple entries with same
-      author and year are cited.
-    - Added support for converting HTML combining accents to LaTeX
-    - When generating subdatabase from AUX file, preamble and strings are now included from
-      the source database.
-    - Added cleanup action for removing redundant $, {, and }
-    - Fix for removing starting and ending spaces in the page number cleanup action
-    - Fix for a more liberal detection in the month cleanup action
-2.9 beta 2
-    - Added DiVA fetcher
-    - Can control if the HTML converter should create subscripts and superscripts
-      as text or an equation via the preferences
-    - Added initial support for adding curly brackets {} for certain
-      key words to keep the character case independent of .bst, e.g., for
-      names and abbreviations (use via "Cleanup entries") and can be controlled 
-      via preferences if it should be used at searches
-    - Fixed author and DOI import from IEEE Xplore 
-    - Improved import of equations in IEEE Xplore titles handling images, (sub) and /spl / representations
-    - Rewrote the HTML import in a more general way. A few characters need to be added.
-    - IEEE Xplore abstract fetching should now be working again.
-    - Added DOI to BibTex entry fetcher.
-    - Added ADS (The SAO/NASA Astrophysics Data System) fetcher by Ryo Igarashi (patch #120).
-    - Reintroduced Google Scholar and ACM portal fetcher with entry preview to reduce server load.
-    - Added alternate entry fetcher type where a preview can be displayed so the user can choose
-      which entries to download. This can reduce server load significantly and prevent users from
-      getting locked out of search services.
-    - Fix for exception and minor bugs in HTML import parsing (patch 3575998 by Daniel Sv�rd)
-    - HTML import handles more characters. Cleanup can also do HTML cleanup. (Patch 3582375 by Oscar Gustafsson)
-    - During file renaming: More illegal characters are removed (idea by Sarel Botha)
-    - Rudimentary support for IEEEtranBSTCTL added (patch 3582376 by Oscar Gustafsson)
-    - ":" is not filtered from the BibTeX keys any more (patch 3582376 by Oscar Gustafsson)
-    - Changed internal look&feel setting (based on patch 3580605)
-    - Custom importers nested in jars should be supported now (bug 3582838)
-    - PDFContentImporter uses the DOI fetcher to fetch the BibTeX for the entry (if a DOI exists at the first page).
-    - Moved migration of legacy PDF/PS fields from legacy tools to clean up dialog.
-    - MHT files can now also be linked by drag'n'drop without the need to configure "external file types".
-    - Adds support for Ubunut's global menu and HUD integration by using java-swing-ayatana (feature #796).
-    - Updates PostgreSQL support to PostgreSQL 9.2
-    - New Mac OS X icon (patch #61)
-2.9 beta
-    - Replaced notification dialog after moving/renaming linked file by status message.
-    - Replaced dialog warnings about empty/duplicate key in entry editor by status line messages,
-      to prevent lockup if Save button is pressed directly.
-    - Replaced window icon with 48x48 image.
-    - [experimental] Added local undo/redo handling for entry editor text fields.
-    - Added special field functionality for ranking, marking as relevant,
-      marking as quality assured, and prioritizing. Can be enabled by "Entry table columns".
-      Based on the work by Igor Chernyavsky, Florian Straßer, and Marius Kleiner.
-    - Added PDF preview functionality to the preview panel. Configurable via "Entry preview" settings.
-    - Group edit dialog now closes when Escape is pressed.
-    - Fixed MS bib import, month was lost on import.
-    - Generate key action in entry editor now honors key overwrite settings.
-    - Fixed bug when importing XMP data from PDF, file will now be linked from the new entry.
-    - Fixed bug in layout processing - quoted formatter argments are now handled correctly.
-    - Fixed bug 3545394: null and curly brackets in custom export filter.
-    - Added "Manage keywords" popup menu to manage common keywords of selected entries.
-    - Added support for pushing citations to TeXstudio (requires TeXstudio >=2.4)
-    - Text-based citations can now be imported using FreeCite by Brown University
-      (http://freecite.library.brown.edu). By Kai Mindermann and Daniel Maurer.
-    - JabRef supports synchronization of unlinked PDFs. Feature request "[2163626] Scan database - find unlinked files".
-      Based on patch 3122104. 
-    - Added command line argument -d/-prdef for resetting preferences to default values. Can
-      reset a comma-separated list of preference values, or all values.
-    - Added small right-click popup menu at each tab
-    - A PDF can also be dropped to the preview panel to trigger linking it
-    - Drag'n'drop of text from the preview panel to other applications is now working
-    - Added highlighting in preview area for search text (based on patch 3121914 by
-      Maximilian Lengsfeld).
-    - New context menu option "Switch preview layout" in the preview panel. 
-    - BibTeX key generator patterns can now be stored in per database (implements feature 3495993)
-    - Braces around author names are now dropped internally. They remain in the .bib though
-      Effects (incomplete list): Authors in the main window are shown without braces,
-      autocompletion does not show these braces
-    - Autocompletion: ";" is now also a delimiter allowing "keyword1; keyword2" in the keyword fields
-    - Autocompletion: the amount of characters to trigger autocompletion may now be configured
-      (default is 2)
-    - Autocompletion: in case lower case letters are used, the search is case-insenstive,
-      otherwise the search is case sensitive.
-    - Autocompletion: new preference to choose how to deal with first names 
-      (always full/always abbreviated/both full and abbreviated)
-    - Added functionality "clean up entries" 
-      - Includes clean up DOI functionality by Florian Straßer and Marius Kleiner
-        (move of DOIs from ee, note, and url field is supported)
-      - Option to rename PDF of entry according to configured PDF-naming-scheme
-        (by Florian Straßer and Marius Kleiner)
-      - make file paths relative
-      - clean up month (functionality based on patch 3470076 by Mathias Walter)
-      - clean up pages
-      - fix superscripts
-    - New "ISBN to BibTeX" fetcher. Uses the online "ISBN to BibTeX Converter" service by Manas Tungare.
-    - Added support for drag'n'drop of tabs by Florian Straßer and Marius Kleiner.
-    - PDF import dialog now always stores settings: checkbox removed
-    - float search now also jumps to first entry if entry editor is opened
-    - usability improvements of "content selectors"
-2.8.1
-    - New DBLP fetcher. Patch 3462232 by Sascha Hunold.
-    - Disabled ACM portal fetcher to avoid users of getting banned.
-    - Fixed bug in PostgreSQL export/import.
-    - Improved handling of file fields written in the style exported from Zotero.
-2.8
-    - Applied Oscar Gustafsson's fix for IEEEXplore fetcher.
-    - Added capability to remove databases from SQL database.
-    - Fixed customization of entries in Biblatex mode.
-2.8 beta 2
-    - Improvements to SQL export and import. Fixed bug where subsequent exports to same
-      database would fail. Can now save multiple bib bases to a single SQL database.
-    - "abbr" modifier in BibTeX key generator now skips parentheses.
-    - Minor change to FirstPage formatter. Now splits at spaces as well as hyphens,
-      and returns original field content if only one page number is found.
-    - When using the preferences import command line option, preferences are now imported
-      before load/import/export operations are handled.
-    - Applied Nicolas Pavillon's patch for proper keystroke handling on Mac OS X.
-    - Applied Ivanilton Polato's patch for handling multi-line fields in CSV export.
-    - Fixed bug: "Send as Email" did not handle absolute paths correctly.
-    - Fixed bug 3472991: Search: "Highlight Words" inconsistent
-    - Fixed bug 2933201: Exporting InProceedings to Word 2007
-    - Fixed bug 3146059: Error in translating author field to MS Office
-    - Fixed bug: entering field names containing capital letters in table columns tab
-      in Preferences makes the columns empty.
-2.8 beta
-    - Fixed issues with ACM portal fetcher using Benjamin Langmann's patch, plus an
-      additional minor fix.
-    - A large list of journal abbreviations is now loaded by default.
-    - Added global option to allow file links relative to the bib file location, in addition
-      to the global or database- or user-specific file directory.
-    - Fixed bug 3434674: Reviewing changes overwrites groups.
-    - Integrated the plugin for interaction with OpenOffice/LibreOffice as a standard part
-      of JabRef.
-    - Added keyboard shortcuts Ctrl-Up and Ctrl-Down to move file links up and down in a list
-      of external links in the entry editor.
-    - Applied "bjoerntm"'s patch for making the loading of group information less sensitive
-      to white space, in order to prevent trouble loading files written by other tools.
-    - Added optional autocompletion of author/editor last names in search field.
-    - Changed entry fetcher system so all fetchers are accessed from a single side pane
-      component with a selector.
-    - Added INSPIRE fetcher by Sheer El-Showk.
-    - Improved error handling when importing in specific format.
-    - Prevented crash when calling invalid import format on startup.
-    - Improved duplicate detection.
-    - Added markers \filename and \filepath for ".begin.layout" and ".end.layout" files
-      in order to output the name or full path of the bib file of the exported database.
-    - Fixed possible array index exception in LastPage formatter.
-    - Improved author/editor normalization in entry editor.
-    - Added metadata extraction from text when PDFs are dragged into JabRef.
-    - The filename pattern for renaming a file when dropping a PDF can now be
-      configured at "Options"/"Preferences"/"Import"/"File name format pattern".
-    - The defaults of the ImportDialog shown when PDFs are dragged into JabRef
-      can now be configured at "Options"/"Preferences"/"Import". It is possible to
-      override showing the ImportDialog.
-    - An entry can be sent by a right click on an entry and select "Send as Email"
-      (patch 3306271).
-    - Added option to "copy BibTeX key and title" (patch 3370471).
-    - The command for pushing to emacs can be configured now. New command for Emacs 23.
-      New default for Windows: emacsclient.
-    - Added export support for DIN1505 style (based on patch 1874662).
-    - Added support for PostgreSQL import/export (patch 3368760 by Fred Stevens).
-    - Added formatter "JournalAbbreviator" (patch 3013311 by Meigel).
-    - RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
-      (patch 2905383 by Russell Almond).
-    - Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).
-    - ToggleButton added to GroupSelector to ease adding/removing references to/from groups
-      (based on patch 3313564 updated by Andreas Schlicker).
-    - Export filter "tablerefsandbib" updated to contain links to files and notes 
-      (patch 2787096 by Thomas Arildsen).
-    - "of" added to the list of skip words (patch 2781830).
-    - Added cli-function for exporting entries filtered by a search term 
-      (patch 1817093 by Silberer, Zirn)
-    - Added highlighting in textarea for search text (patch 3117881 by Ben).
-      Slightly modified to cope with words[]={""}, support for "BibTeX source" tab, and that
-      "Clear" also clears the highlighting.
-    - Switched from PDFBox 0.7.3 to PDFBox 1.6.0.
-2.7.2
-    - Fixed bug that prevented search functions from working under Java 7.
-2.7.1
-    - Fixed problem with search function under Java 7.
-    - Made Database properties dialog modal to prevent database from being closed
-      while properties window is open.
-    - Fixed error handling in custom import dialog when invalid jar files or class
-      files are specified.
-    - Added OR operator for conditional export formatting.
-    - DocBook export format switched to 4.4 (based on patch 3313898).
-    - Fixed bug that made the key generator combination [shorttitle:abbr] return
-      only a single letter.
-    - "of" added to the list of skip words (patch 2781830).
-    - Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).
-    - RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
-      (patch 2905383 by Russell Almond).
-    - Fixed bug that made menu items for marking in specific colors invisible
-      under Windows 7.
-    - In case a new entry is added, this entry is highlighted and the editor is opened
-      if configured in the settings (patch 3370466). The UI behavior of adding an entry
-      at "new entry from plain text" is now similar to "new entry".
-    - Fixed bug in focus handling that affected some actions.
-    - Running JabRef under the Oracle JVM will no longer give a warning.
-2.7
-    - Medline importer now wraps multipart last names in braces.
-    - RIS importer now handles multiple title fields by concatenation.
-    - Disallowed "comment" as entry type name, since this conflicts with the BibTeX format.
-    - Fixed handling of suffix name parts (Jr, etc.) in Medline importer.
-    - Added optional second numeric argument to Authors formatter, which determines
-      how many authors are shown if the maximum number is exceeded.
-    - Added content selector for "review" field in entry editor.
-    - Improved detection of file type when adding new link. Can now recognize double
-      extensions such as ".ps.gz".
-    - Improved autocompletion of author names. Added options to complete either in
-      'Firstname Lastname' or 'Lastname, Firstname' formats, or in both.
-    - Fixed bug in import function if no suitable import filter is found.
-2.7 beta 2
-    - Added support for MrdLib lookup or metadata extraction when PDFs are dragged into
-      JabRef.
-    - Added option under "External programs" for disabling the automatic opening of the
-      Browse dialog when creating a new file link.
-    - Fixed shortcut key collision. Shortcut for Import to new database is now Ctrl-Alt-I.
-    - The "Open URL or DOI" action now uses URL links in the "file" field as fallback if
-      no links are found in the "url" or "doi" fields.
-    - Restricted remote listener port numbers to interval 1025-65535.
-    - Added Japanese translation by Koji Yokota.
-    - Added scrollbar to entry editor when it is too high to fit in its panel. Patch
-      by Matthias Erll 
-    - Made it possible to copy entries from the search dialog.    
-    - Added proper error message when trying to search with invalid regular expression.
-    - Added error dialog on startup if custom look and feel cannot be loaded.
-    - Applied Alexander Hug's patch for correctly importing doi from ScienceDirect RIS files.
-    - Removed potential NullPointerException in SearchExpressionTreeParser.
-2.7 beta
-    - Some improvements to MS Office export filter.
-    - Introduced three choices for ensuring unique generated keys. The default one (marking
-      with a, b, etc.), a modified one (marking with b, c, etc.) and always adding a letter
-      (a, b, etc.).
-    - Font and background colors are now customizable in the entry editor (Options ->
-      Preferences -> Appearance).
-    - Window title now includes the full path to the current file.
-    - Entries can now be marked in a series of different colors. Automarking of imported
-      entries is now done in separate color without affecting other marked entries.
-    - Added new feature (Tools -> Scan database... -> Resolve duplicate BibTeX keys) to
-      search for duplicate keys and offer to generate new keys to resolve the duplicates.
-      Instead of being listed in a warning dialog after opening a bib file, duplicate keys
-      now trigger a dialog asking whether the user wants to resolve the duplicates.
-    - Added check that ensures that application doesn't quit while a large save operation
-      is still in progress. Shows wait message with cancel button.
-    - Added apostrophe (') as illegal character in BibTeX keys.
-    - BibTeX strings that refer each other are now sorted correctly when saving bib file.
-    - Fixed bug in merging external changes - file would still be reported as modified
-      externally after merging changes.
-    - Fixed bug in Move/rename file link feature that could cause the wrong link to be
-      stored for certain directory structures.
-    - Fixed bug: curly braces can now be used in arguments to formatters. 
-    - Fixed lockup bug when generating key for entries with crossref fields.
-    - BibTeX strings are now resolved before attempting to (un)abbreviate journal names.
-    - Modified [shorttitle] and [veryshorttitle] key generator markers so they consider
-      a hyphen a word boundary, and remove punctuation characters (keep only numbers and
-      letters).
-    - deprecate various export formatters with new Authors formatter, which provides flexible 
-      formatting options.
-2.6
-    - Fixed IEEExplorer and ACM fetchers to adapt to web site changes.
-    - Active preview (1 or 2) is now remembered.
-    - Applied patch by Igor L. Chernyavsky. to prevent loss of entry selection after
-      generating key.
-    - Changed OpenDocument Spreadsheet export so the mimetype file is written correctly
-      at the start of the zip file.
-    - Fixed bug when importing preferences: custom export filters would not be updated
-      after import.
-    - Changed help page loading procedure so help pages can be loaded for plugin entry
-      fetchers.
-    - Made it possible to define customized entry types with either-or conditions on
-      required fields, e.g. using a pseudo-field called "author/editor" will indicate
-      that the entry requires either the "author" or the "editor" field set.
-    - Fixed bug: entries of a customized type could be indicated as complete even if
-      BibTeX key was not set.
-    - Changed deletion process for some temporary files to avoid leftover files.
-2.6b3
-    - Added ScienceDirect entry fetcher that utilizes the BibSonomy scraper.
-    - Changed non-native file dialog setting so files cannot be renamed. This prevents
-      accidentally entering rename mode when trying to enter directory. Can be enabled
-      again in Options -> Preferences -> Advanced.
-    - Added new JStor fetcher that utilizes the BibSonomy scraper to obtain BibTeX data.
-    - Fixed bug in CookieHandlerImpl.
-    - Fixed bug; when dragging a file into JabRef and asking to move it to the file
-      directory, warning will now be given if the destination file already exists. Patch
-      by Alastair Mailer.
-    - When dragging a file into JabRef and asking to copy or move it to the file directory,
-      it is now possible to rename to an arbitrary name. Patch by Alastair Mailer.
-    - Added "review" field to BibTeXML export.
-    - Added Reset button to entry fetchers. Patch by Dennis Hartrampf and Ines Moosdorf.
-    - Changed Microsoft Office XML export so "number" rather than "issue" is exported
-      as <b:Issue>, which conforms with import format. 
-    - Added confirmation dialog that allows saving without backup in cases when
-      backup creation fails.
-    - Fixed bug 2938562: using the move/rename feature on a file link could give an
-      absolute link even if the file was put below the main file directory. 
-    - Fixed bug 2931293: error generating key with [authorsAlpha] for short names.
-    - When checking for external modifications, file size is now checked in addition
-      to the time stamp.
-    - Fixed handling of maximised state when shutting down and starting up JabRef.
-      Patch by Igor L. Chernyavsky.
-    - Fixed bug that prevented correct handling of DOS short file names. Patch
-      by Igor L. Chernyavsky.
-    - Added support for KOI8_R character set.
-    - Removed DocumentPrinter class, using standard API functions instead. Patch by
-      Tony Mancill.
-    - Removed HightlightFilter class, using standard API functions instead. Patch by
-      Tony Mancill.
-    - Changed keyboard shortcut for IEEXplorer search to Alt-F8.
-    - Disabled JStor search, which doesn't work due to API changes.
-    - External file type manager now removes "." prefix in file type extension if the user
-      has typed it that way.
-    - Preview panel now defaults to preview layout 1 instead of 2. Switched default layouts.
-    - Added IfPlural formatter by Russell Almond. The formatter outputs its first argument
-      if the input field contains " and " and the second one otherwise.
-    - Applied patch by Philipp Cordes and Björn Kahlert for improved handling of names by
-      autocompleter. The patch also reorganizes the autocompleter classes.
-    - Table will now scroll to keep the currently edited entry visible if an edit leads to
-      the entry getting sorted to a different position.
-    - Reworked author and editor handling in Docbook export. Added Docbook XML header.
-    - Database will no longer be marked as changed after accepting external changes, unless one or
-      more changes were not accepted before merging, and unless database was already marked as
-      changed.
-    - Fixed bug: undesired autocompletion when saving file.
-    - Fixed bug: entry editor doesn't appear when new entry is added while a filtering search or
-      group selection is active.
-    - Fixed bug in writing of metadata on Windows. For certain metadata lengths newlines would be
-      messed up after the metadata comment in a bib file.
-    - Search dialog now automatically previews first hit, and hides preview if there are no hits. 
-2.6b2
-    - Added export formatter "Default" which takes a single argument. Outputs the string to format
-      unchanged if it is non-empty, otherwise outputs the argument.
-    - Added option under Options -> Preferences -> General for disabling the strict enforcing of
-      correct BibTeX keys. Disabling this makes it possible to use e.g. umlaut characters in keys.
-    - Modified launcher script for Windows installer to give higher heap size limit.
-    - Improved autocompletion. All fields with autocompletion which have content selectors will now
-      autocomplete on content selector values. For the "journal" field, the autocompleter will now
-      additionally use entries from the current journal abbreviations list, and will also complete
-      on the entire field up to the cursor rather than just looking at the last word only.
-    - Added support for postformatter in Layout. The postformatter will be run after
-      the formatters called from a layout.
-    - Improved group autogeneration. Added option to generate groups based on author or editor
-      last names. Autogenerated groups are now alphabetized.
-    - Modified Endnote export filter so "--" gets converted to "-" in the "pages" field.
-    - Changed keyword groups so they will match on whole words only. E.g. a keyword group for the
-      keyword "can" will no longer match the keyword "scanner".
-    - Improved entry type determination and author parsing for some varieties of CSA files.
-    - Minor change to Harvard RTF export. Added space after "ed.", and added editor to output for
-      inbook entries.
-    - Set limit to the number of displayed characters in group names in groups tree in order to
-      avoid group panel width problems.
-    - Changed file link handling so all remote links classified as URL can be opened through
-      the browser. Setting a different file type manually makes JabRef call a remote link using
-      the handler application instead.
-    - Modified Endnote/refer import filter to strip "doi:" from the %R field.
-    - Modified HTML conversion so single newline is displayed in the preview (and HTML exports) as
-      <br>, while multiple newlines are displayed as <p>.
-    - Fixed bug: switching entry editor between entries of different type may result in switching
-      of entry editor tabs.
-    - Fixed bug: adding external file link leads to relative path from root directory if file
-      directory is set to an empty string.
-    - Fixed error message when a # in a BibTeX string prevents saving. No longer states that the
-      problem is in an entry, but specifies that it is in a string.
-    - Fixed bug: ODS export doesn't resolve BibTeX strings.
-    - Fixed bug: content selector for "editor" field uses "," instead of " and " as delimiter.
-    - Fixed bug: editing source doesn't allow change of entry type.
-    - RTFChars formatter now converts --- to \emdash and -- to \endash.
-
-2.6b
-    - Added pages information to several entry types in Endnote export.
-    - Modified LastPage formatter so it returns the number when only the number of pages is given.
-    - Modified search algorithms so LaTeX commands are removed before search. For instance, this
-      means that the value "test \textit{case}" now matches the search string "test case".
-    - Changed default table font family to "SansSerif".
-    - Can now create lock file while writing a bib file. The lock file is checked before
-      saving, and before scanning an externally changed file, in order to avoid reading an
-      unfinished file.
-    - Added support for dragging a file link from the file column to another application.
-    - Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.
-    - Improved ISI import filter so DOI information is included.
-    - Fixed bug: metadata changes would not be detected as external changes to a database.
-    - Fixed bug: when accepting external changes and not saving before new changes are
-      detected, the previously accepted changes would also be listed.
-    - Fixed bug in Scifinder import where an empty Inventor field could overwrite the
-      author field.
-    - Fixed bug in autocompleter. Current suggested completion would be added to the field
-      if the user closed the entry editor or mouse clicked on another field.
-    - Fixed problem with exporting to some MySql versions. Patch by François Dorin. 
-    - Fixed bug in handling of LaTeX character sequences - now sequences with = as command
-      character (e.g. "\={A}") are recognized.
-    - Fixed bug: gray out / hide setting in groups panel is overridden on startup
-      by search mode selection. Added separate prefs key for the groups setting.
-      Fix suggested by Igor L. Chernyavsky.
-    - Fixed bug: cookie manager installed by Download button in file field editor throws
-      an exception when trying to fetch from Medline.
-    - Fixed bug: temporary files don't get deleted on shutdown.
-    - Disabled table column reordering in import inspection window, since a user reported
-      problems when using this.
-    - Changed years from 2008 to 2009 in splash image.
-2.5
-    - Modified export layout procedure so missing formatters can be reported in the error
-      output. Export now succeeds with warnings added where formatters are missing.
-    - Conditional blocks (\begin{field}...\end{field}) in layout files can now be given a
-      semicolon-separated list of fields as argument. All fields must then be set for output
-      to be given.
-    - Changed RIS import so multiple abstract fields in an entry are concatenated.
-    - Added quoting of some special characters in SQL export, based on Kyle Crabtree's patch.
-    - Fixed bug in MS Office 2007 XML export - editor names missing.
-    - Fixed bug in plugin manager that prevented the "Download plugin" button from working.
-    - Fixed bug in plugin manager routine that checks for installed versions of a plugin.
-    - Fixed bug in startup that could show warnings multiple times when loading
-      from autosave files.
-2.5b2
-    - Plugin manager now handles plugin versions correctly based on the version number in their
-      plugin.xml file.
-    - Added formatter "Number" that outputs a sequence number for the current entry in the current
-      export operation. This formatter can be used to produce a numbered list of entries.
-    - Added autosave feature.
-    - Fixed bug in file link handling in BibTeXML export.
-    - Improved handling of patents in Scifinder import.
-2.5b
-    - Added Simplified Chinese translation.
-    - Added simple plugin manager.
-    - Added ~/.jabref/plugins as user-specific plugin directory.
-    - Added \r marker to WrapFileLinks formatter that outputs file links without expanding
-      relative links.
-    - Added [authorsAlpha] key marker that formats authors according to the "alpha" BibTeX style.
-      Patch submitted by Oliver Kopp.
-    - Table sort order set by clicking and Ctrl-clicking table columns is now immediately set
-      as default sort order in preferences.
-    - Changed LyX pipe setting so it works whether ".in" is included or omitted.
-    - Modified ISI importer so the words "of", "and" and "the" will not be capitalized in the title,
-      journal or publisher fields.
-    - When adding new local file link, browse dialog now appears immediately when opening file link
-      editor, saving one mouse click.
-    - Added "Remove all broken links" option in the resolver dialog for broken links when
-      synchronizing file links.
-    - Added rename option to Set/clear field dialog, to move contents from one field to another.
-    - Added Back and Forward actions, for switching between recently edited BibTeX entries.
-    - Added option under "Entry table" to designate fields as numeric for sorting purposes.
-    - Added possibility for custom export filters to define their own name formatters.
-      This is done by adding a file named "<filtername>.formatters". This file defines
-      one formatter on each line, with each line containing the name of the formatter and
-      the formatter definition, separated by a colon (:).
-    - Added menu items for increasing/decreasing table font size, with shortcut keys Ctrl-plus and
-      Ctrl-minus.
-    - Added options to automatically mark entries imported into an existing database, and to unmark
-      previously marked entries when importing.
-    - Added ":(x)" modifier to key generator, specifying that the arbitrary string x
-      should be used as a fallback value if the value returned by the field marker is empty.
-    - Added ":upper" modifier to key generator, to force uppercase for a field marker.
-    - Added buttons in External programs tab in Preferences for modifying settings for
-      "Push to"-features, and removed obsolete fields.
-    - Added support for DOI field in Endnote importer.
-    - Added support for language and publication status fields in Medline import (publication status
-      stored in "medline-pst" field).
-    - Enabled cookie handling for downloading full-text articles.
-    - Improved handling of invalid BibTeX keys containing white space. Parser will now try to
-      piece together the key and avoid disturbing the continued parsing. Patch submitted by
-      Stephan Lau.
-    - Cosmetic change to the entry type label to the left in the entry editor.
-    - Changed name handling so a single-entry name without a capital initial letter, such as
-      "unknown", will be treated as a solitary last name rather than a von particle.
-    - Changed table selection coloring so entries that are grayed out or marked can be
-      distinguished from normal entries when selected.
-    - Changed handling of "affiliation" in Medline import - now makes sure to escape
-      # characters before storing.
-    - Modified ACM portal fetcher due to web site changes.
-    - Improvements to IEEEXplore fetcher - better handling of month and page fields.
-    - Changed behaviour of source panel when an entry contains imbalanced # characters -
-      the panel can now show the entry in its invalid form, allowing the user to fix the problem.
-    - Improved handling of PDF files without XMP metadata - other metadata will now be retained.
-      Patch submitted by Felix Langner.
-    - Fixed bug in parsing file field - double spaces in file names would be reduced to single
-      spaces, breaking the file link. Fix submitted by Uwe Kuehn.
-    - Fixed NullPointerException when downloading external file and file directory is undefined.
-    - Fixed bug in HTMLConverter.
-    - Fixed NullPointerException in key generator for incomplete names.
-    - Fixed bug in removing custom export filters.
-    - Fixed bug 2225371: restart is no longer required after adding a new custom export filter. 
-    - Fixed bug in "Move/rename file" feature in file field editor with regard to undefined
-      file directory.
-    - Fixed bug in Ris importer.
-    - Fixed NullPointerException in Endnote importer.
-2.4.2
-    - Added missing layout formatters FirstPage and LastPage.
-    - Fixed a bug regarding ParamLayoutFormatter loaded from plugin.
-    - Fixed crash during initalization of journal abbreviation list.
-    - Added option to have JabRef search for external file when "Open file" function is chosen
-      for an entry without any linked files. This is similar to what was always done in
-      JabRef 2.3.1 and earlier. 
-    - Improved regular expression file search, so the regular expression can contain field
-      markers as used for BibTeX key generation in addition to just regular fields. It is
-      no longer possible to call arbitrary layout formatters, but the modifiers "upper",
-      "lower" and "abbr" (for case conversion and abbreviation) can be used.
-    - Ris importer now imports PB as "school" instead of "publisher" for THES entries.
-    - Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.
-2.4.1
-    - Fixed bug: layout formatter arguments were not set when using a ParamLayoutFormatter
-      loaded from plugin.
-    - Fixed bug: when abbreviating first names, for authors with first names connected
-      with "-", only the first letter is shown.
-    - Enhanced ExportFormatTemplate plugins with an optional property "encoding" which
-      overrides the default encoding with the given one.
-    - Fixed menu colors under Windows Vista.
-    - Fixed bug 2137771: Missing file extension when downloading.
-    - Fixed bug 2105329: Ensure that newly added entry is visible in table.
-    - Fixed bug 1908222: Preference "Fit table horizontally on screen" doesn't work
-    - Fixed bug 2119059: Handling of the A1 tag in the RIS format.
-    - Added missing help file for ACM digital library fetcher.
-    - Added option for whether to use IEEE LaTeX journal abbreviation list.
-    - Added tooltip to menu items in push-to-application popup menu.
-2.4
-    - Added mappings for some special characters that need to be sanitized when generating
-      BibTeX keys.
-    - Added ACM Digital Library fetcher by Aaron Chen.
-    - Added new entry types (conference, patent, standard, electronic).
-    - Improvements to IEEEXplore fetcher.
-    - Added explanatory text to indicate that "ps" and "pdf" files are legacy features.
-    - Fixed unexpected behaviour of "Open PDF or PS" menu item - now looks in "file" field,
-      and does not launch search for external files.
-    - Fixed bug 1827568: 'Save database' might not store current edit in entry editor.
-    - Fixed bug 2027944: updating custom export definitions requires restart.
-2.4b2
-    - Opening external files on Linux now uses "xdg-open" as application if no other is specified
-      for the file type. xdg-open should be available to call the appropriate application according
-      to the user's settings on all freedesktop compliant Linux distributions.
-    - Download external file now attempts to determine file type based on MIME type, using
-      file extension as fallback.
-    - Changed the way names are handled under autocompletion. Last and first names are
-      now indexed separately.
-    - A table column can now be set up with fallback fields used if the main field is
-      empty. Fallback fields are set in Options -> Preferences -> Main table columns by
-      setting a column to "field1/field2/...". The fields will be checked in succession
-      until a non-empty value has been found or al fields have been checked. For instance,
-      specifying "author/editor" will result in a column displaying the author field where,
-      set, and the editor field for entries with an empty author field.
-    - Added special handling of autocompletion for the "crossref" field - now indexes
-      words from the BibTeX key field instead of the "crossref" field. Added crossref
-      to the default fields using autocompletion.
-    - Added menu item and shortcut (ctrl shift E) to shift focus to the entry table.
-    - Main window now remembers maximisation state from last time.
-    - Improved SQL export feature so the complete information about groups, strings and preamble
-      is included. Added SQL import feature supporting the same database schema.
-    - Added new implementation of regular expression file search that can handler multiple files
-      and file types. Added regexp search as a third option for autolink feature.
-    - Added support for BibO RDF format, contributed by Egon Willighagen.
-    - Fixed bug in autocompletion; continuing writing the suggested word after cycling
-      through alternatives would give wrong result in editor.
-    - Fixed bug where selection would jump back if an entry of different type was selected
-      by mouse click while editing a field of the current entry.
-    - Fixed missing name formatting in search dialog. Now uses same formatting as main table.
-2.4b
-    - Added Export to SQL database feature. Supports MySQL.
-    - Added "protection" flag in Database properties. When this flag is set, JabRef will
-      refuse to save the database when the file has been externally modified, until the
-      changes have been reviewed and partly or completely accepted.
-    - Fixed bug where the external update notification in the side pane would remain
-      even if the referred database was closed.
-    - Added two new search modes - display search results in a dialog, and global search.
-    - Support for fetching from the command line using --fetch (contributed by 
-      Jan F. Boldt and David Kaltschmidt).
-    - Support for fetching from Spires (contributed by Fedor Bezrukov).
-    - Support for fetching from JSTOR (contributed by Tobias Langner, Juliane 
-      Doege, Sebastian de Hoog and Christoph Jacob)
-    - Added context menu for file list editor with options to move/rename linked file
-      as well as to automatically move the file to file directory and optionally rename
-      after BibTeX key.
-	- JabRef can now be extended by plugins (using the Java Plugin Framework 
-	  JPF as the underlying technology). Currently extension points exist for:
-		- ImportFormat
-		- ExportFormat based on Templates
-		- ExportFormat based on IExportFormat (contributed by Kariem Hussein)
-		- LayoutFormatter
-		- EntryFetcher
-		- PushToApplication
-	  JabRef uses JPFCodeGenerator (which was written just for JabRef) to
-	  generate helper classes for making JPF easier. Current version used: 0.4
-	  http://forge.spline.inf.fu-berlin.de/projects/jpfcodegen/
-	- Print warnings if insufficient Java version is used or if JRE is not from Sun.
-	- Memory Stick Mode: JabRef automatically loads configuration settings from 
-	  jabref.xml and also writes them there if enabled.
-	- Improved handling of crossrefs. Fields are now resolved in preview and export.
-	- Updated dependencies, now using: JempBox-0.2
-	- Improved handling of ArXiv URIs.
-	- Changed default preference value: now using import inspection dialog also
-	  when just a single entry is imported.
-	- Parsing of field lists for non-wrappable fields and fields for which to automatically
-	  add braces around capitals now ignores whitespace between entries.
-	- [ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch
-	- [ 1738920 ] Fixed: Windows Position in Multi-Monitor environment
-	- [ 1795355 ] Fixed: LatexFieldFormatter omits "{" on beginning of optional field
-	- [ 1297576 ] New feature: Printing of entry preview (use right-click menu)
-	- [ 1717849 ] Fixed: Bug in aux import (contributed by Kai Eckert)
-    - [ 1749613 ] Fixed: About translation
-    - [ 1709449 ] Fixed: Clicking a DOI from context menu fails
-    - [ 1869331 ] Fixed: Uninstall after silent install removes Windows start menu
-    - [ 1723219 ] Fixed: Strange message (LyX) while installing
-2.3
-    - Added handling of unknown file types when synchronizing the file field.
-    - Changed the way customized external file types are stored. Types are now stored in a
-      way analogous to a diff from the default types. This allows default types added in later
-      versions to appear immediately, even if the user has customized the list.
-    - Moved file preferences from General tab to new File tab.
-    - Reduced horizontal size of preferences dialog.
-    - Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug
-      #448917).
-    - Download file procedure now strips query string in order to find correct file extension
-      (Debian bug #448027).    
-2.3b3
-    - Export formats that output the character encoding now use common names for encodings
-      instead of Java-specific names.
-    - Added "Open" button in external link dialog box to test or use the link.
-    - Added formatter WrapFileLinks which iterates over file links, producing a formatted
-      string for each containing any desired information about the file link.
-    - Applied Fedor Bezrukov patch (setting User-Agent in URLDownload to solve ArXiv problem).
-    - Applied Aaron Chen's patch for fixing bugs in IEEExplore fetcher.
-    - Applied Edward Valeev's patch for handling article numbers replacing pages in Refer/Endnote
-      import.
-    - Added toolbar button to entry editor for writing XMP-metadata.
-    - Added paste and drag & drop support to file list editor.
-    - Added "authorLast" and "editorLast" markers for using last author's last name in BibTeX keys.
-    - Added support for file field in Write XMP action.
-    - Numeric fields (year, volume, number, pmid, citeseercitationcount) are now sorted as numbers
-      when possible.
-    - Improvements to the Ovid import filter.
-    - Modified AuthorLastFirstAbbreviator and AuthorAbbreviator to accept names in both last-first
-      and first-first format, but always return in last-first format. These two formatters are
-      identical.
-    - [ 1648789 ] Fixed: Problem on writing XMP when option to leave out some fields was active.
-    - [ 1561990 ] Fixed: Exporting to WinEdt - apostrophe.
-    - Fixed bug in entry editor: source panel edits were not properly stored when clicking a
-      different entry in the main table.
-    - Fixed problem with "Synchronize file links" not honouring database specific file directory.
-    - Fixed problem with file type selection in external file link editor not being up-to-date.
-    - Fixed problem with wrong enable/disable behaviour of Clear search button when switching
-      between tabs.
-    - Fixed argument parsing in AbstractParamLayoutFormatter so \t and \n can be used for
-      tabs and newlines.
-2.3b2
-	- Added % at start of signature text in BibTeX output. Parser now reads both
-	  old and new style.
-    - When user chooses to save to an existing file, and answers that the file should not be
-      overwritten, a new file dialog now appears instead of the operation cancelling.
-    - Removed antialias setting for main table, because it interferes with proper rendering
-      on LCDs when running under JRE 6. Removed non-optional antialias settings for entry
-      editor for the same reason.
-    - Changed external link handling so remote (http) links can be sent to the external
-      application. Applications like Evince and Gimp can open remote links.
-    - Replaced Simle HTML export filter with improved version by Mark Schenk.
-    - Introduced ParamLayoutFormatter interface for layout formatters that can take an
-      argument by the following syntax: \format[MyFormatter(argument)]{\field}
-      Implementing classes contain a setArgument(String) method that receives the argument
-      (if any) before the format() method is called.
-    - Timestamp and owner fields are now set also when appending a bib file, and new options
-      have been introduced to control whether imported/appended/pasted entries should have
-      these fields overwritten if already set.
-    - Added operations for adding file links in import inspection window, and made file
-      and URL icons in the table clickable.
-    - Removed PDF and PS columns and operations in import inspection window (replaced by
-      operations on the "file" field).
-    - File field column in main table now shows file type icon instead of generic icon.
-    - Modified Endnote export to take "file" field into account, and to resolve full
-      paths to PDF files.
-    - Added "Auto" button to automatically set "owner" field to the default username.
-    - Added \encoding tag for begin/end layouts in export filters to print the name of the
-      character encoding used for the export. The tag is not available in entry layouts.
-    - Added \% as a supported LaTeX command, producing '%'.
-    - Fixed bug in HTMLChars: commands like {\aa} and {\o} were not processed properly, even
-      though defined in Globals.HTMLCHARS.
-    - Fixed bug that made it possible to accidentally close database without saving, when error
-      occurs during the save operation.
-2.3b
-	- Added MIS Quarterly export format.
-	- Added support for COPAC file format.
-	- Added RemoveTilde LayoutFormatter to deal with Bibtex non-breakable spaces.
-	- Added autocompletion feature for author/editors and other fields.
-	- Added feature to save all open databases.
-	- Added support for pushing citations to Vim when Vim server is enabled.
-	- Added missing option for specifying the path to LEd.exe.
-	- Added -s/--nosplash command line option for disabling the splash screen.
-	- Added new field marker [auth.etal] for key generation.
-	- Added support in XMP metadata handling for bibtex string resolution.
-	- When opening databases, already open files are now skipped.
-	- Option to use native instead of Swing file dialogs is now available on all OSes.
-	- Synchronize external links now searches entire database, not selected entries.
-	- Medline import now adds <Affiliation> information into the "institution" field.
-	- Improved handling of external links. The 'file' field can now specify a list
-	  of external links, and arbitrary file types are supported. Old-style PDF and
-	  PS links can be moved automatically into the 'file' field.
-	- Fixed minor bug in importing preferences. General fields for entry editors are
-	  now updated without restarting JabRef.
-	- Fixed bug in RIS and Refer/Endnote imports. Entries with editors but no authors
-	  are now imported properly.
-	- Fixed missing export formatter AuthorFirstFirstCommas.
-	- Fixed minor bug in Harvard export with missing space between year and title.
-	- Fixed bug that caused lockup when connection to IEEExplore fails.
-	- Fixed wrong dependency in OAI2/ArXiv Fetcher.
-	- Fixed problem with foreign characters in OAI2/ArXiv Fetcher.
-	- Fixed problem with key generation in OAI2/ArXiv Fetcher.
-	- Fixed bug in duplicate search that made misc entries never get
-	  detected as duplicates.
-	- Fixed bug in XMP reimport from DublinCore related to month strings.
-2.2  	- Added progress bar to indicate progress when synchronizing PS/PDF links.
-        - Option to autogenerate key for imported entries now also affects entries imported
-          without using the import inspection window.
-        - Modified quick jump behaviour so sequences of letters can be found. Timeout or
-          ESC resets the search.
-        - Width of side pane is now remembered.
-        - Improved XMP support:
-          - JabRef now reads and write DublinCore and Legacy Document Properties
-            Caution needs to be used though since, JabRef does overwrite existing values.
-          - XMP privacy filter can be used to prevent sensitive fields to be exported.
-        - Support for OAI2 identifiers with subcategories, e.g. math.RA/0601001
-        - Fixed bug that made explicit groups appear empty after updating group tree from external
-          change.
-        - New windows installer thanks to Uwe St�hr.
-        - [ 1641247 ] Fixed: No update of preview after generating bibtex key
-        - [ 1631548 ] Fixed: Absolute paths should be stored for last open files.
-        - [ 1598777 ] Fixed: Month sorting
-        - [ 1570570 ] New Feature: Deselect all duplicates on import
-        - [ 1574773 ] Fixed: sanitizeUrl() breaks ftp:// and file:///
-        - [ 1609991 ] Fixed: Silverplatter Import: Publisher and Year confused
-        - [ 1608391 ] Fixed: Medline Search Editbox size gets to big
-2.2b2   - Redesigned export functions to simplify GUI and provide "Export selected
-          entries" functionality. Export filter is now chosen using the file type
-          dropdown menu in the file dialog.
-        - Fixed bug that caused UnsupportedEncodingException on Windows when saving.
-        - Added warning dialog when exporting failed.
-        - Added fix for exporting special chars in RTF like ���...
-        - Added NameFormat LayoutFormatter based on Bibtex method name.format$
-        - Added Fetch from ArXiv.org to Web Search
-          [ 1587342 ] Quering ArXiv (and any OAI2 Repository)
-        - [ 1594123 ] Fixed: Failure to import big numbers in Bibtex
-        - [ 1594169 ] Fixed: Entry editor navigation between panels faulty
-        - [ 1588028 ] Fixed: Export HTML table has relative DOI URL
-        - [ 1601651 ] Fixed: PDF subdirectory - missing first character
-2.2b    - Added Mark Schenk's advanced HTML export filter.
-        - Added options to copy/move/link to dragged linkable file (pdf, ps, etc.).
-        - Removed unnecessary output text when scanning for external file changes.
-        - Changed layout of entry editor to solve problem with collapsing text fields.
-        - Added first version of support for XMP-metadata in PDFs.
-          - "Import into..."
-          - Integrate with copy/move/link.
-          - Added option to write all/selected PDFs in database
-        - Added tooltips to database tabs showing the file's full path.
-        - Added function for setting or clearing specific fields in selected or
-          all entries.
-        - Setting a relative PDF/PS path in Database Properties now makes JabRef
-          look for the directory relative to the bib file's location.
-        - Removed Oxford comma from AuthorList...Comma-LayoutFormatters.
-        - Added LayoutFormatters that print the Oxford comma.
-        - Added missing space between abbreviated author first names:
-          William Andrew Paul => W. A. Paul (used to be W.A. Paul)
-        - Added LayoutFormatter for HTML paragraphs.
-        - Changing Database Properties now causes the database to be marked as changed.
-        - Improved simple search. Words are now treated as separate search terms,
-          and phrases can be indicated with "double quotes".
-        - When a letter key is pressed in the table, the first entry starting with the
-          same letter (in the current sort column) is selected.
-        - Bib files dragged into JabRef now appear in the Recent files menu.
-        - Fixed bug in import dialog.
-        - Better support for ISI files in general (should basically be better than INSPEC) including IEEE parsing.
-        - Added regular expression search for auto-linking. Search is now more flexible by default.
-        - Search operation also now search relative to the JabRef directory.
-        - General improvements in Inspec ISI handling.
-        - New LayoutFormatter: AuthorOrgSci - first author is in "last, first"
-          all others in "first last". First names are abbreviated.
-        - New LayoutFormatter: NoSpaceBetweenAbbreviations - spaces between multiple
-          abbreviated first names are removed.
-        - Improved PDF link resolver to produce proper URIs.                                                 s
-        - [ 1503956 ] Fixed: Help text instead of Help icon.
-        - [ 1542552 ] Fixed: Wrong author import from ISI file.
-        - [ 1534537 ] Fixed: resize groups interface
-        - [ 1465610 ] Fixed: (Double-)Names containing hyphen (-) not handled correctly
-        - [ 1436014 ] Fixed: No comma added to separate keywords
-		- [ 1548875 ] Fixed: download pdf produces unsupported filename
-		- [ 1545601 ] Fixed: downloading pdf corrupts pdf field text
-        - [ 1285977 ] Fixed: Impossible to properly sort a numeric field
-	    - [ 1535044 ] Fixed: Month sorting
-        - [ 1540646 ] Fixed: Default sort order: bibtexkey
-        - [ 1553552 ] Fixed: Not properly detecting changes to flag as changed
-2.1     - Added capability to drag files and WWW links into JabRef. BibTeX files will be
-          opened normally, other files imported, and WWW links downloaded and imported.
-        - The -v command line option now makes the application only print version number
-          and quit immediately.
-        - Duplicates within a set of imported entries are now found and shown in the
-          import inspection window.
-        - Mac users can now choose between native and Swing file chooser under
-          Preferences -> Advanced.
-        - Fixed missing duplicate warning when importing without import inspection window.
-        - Fixed error in ISI import which allowed empty fields to be set, causing errors
-          when saving and reloading entries.
-        - Fixed missing time and owner stamps when importing entries (only in 2.1b/2.1b2).
-        - Fixed erroneous updates in entry editor if user switches to a different entry
-          while downloading PDF/PS file.
-        - Fixed bug (only in 2.1b2) in calling file open/save dialog on Mac OS X.
-        - Fixed bug that made duplicate resolver dialog pop under import inspection dialog.
-        - Fixed bug in windows-installer which prevented running JabRef from the
-          command-line with arguments.
-        - Added windows-installer-option to associate JabRef with .bib files.
-2.1b2   - Added option to toggle floating of marked entries to the top of the table.
-        - Added option to open, append and import multiple BibTeX files.
-        - Improved support for LaTeX special characters in HTML and RTF representations.
-        - Improved generation of subdatabase from AUX file. Crossreferenced entries are
-          now included automatically.
-        - Fixed bug that made entry selection get lost when an edit modifies the entry's
-          position in the main table.
-        - Fixed bug in BibTeXML export (entry type name missing in tag).
-        - Fixed name handling in (non-compliant) Endnote files giving all author names
-          on the same line.
-        - Fixed problem with keyword handling in Medline import.
-        - Fixed (harmless) NullPointerException when medline fetch is cancelled.
-        - Fixed bug in parser that made {"} illegal in fields quoted with ".
-2.1b    - Known issue: font sizes cannot be changed, but should follow OS settings on
-          Windows and Mac.
-        - Known issue: some HTML may be handled inappropriately when downloading from
-          IEEEXplore.
-        - Changed Paste function so timestamp and owner fields are updated.
-        - Added "Other" item to the "New entry ..." menu.
-        - Changed sorting order so marked entries are displayed at the top of the table.
-        - Added IEEEXplore search and download feature.
-        - Added option to store entries in their original order. Unsorted table view now
-          shows entries in their original order.
-        - Added option to autogenerate keys for entries with missing keys before each save.
-        - Improved handling of external URLs to prevent problems with special characters.
-        - Medline and Endnote imports no longer automatically add curly braces around capital
-          letters in title.
-        - Float search now scrolls table to the top.
-        - Fixed lockup problem in preview with uneven number of # characters in fields.
-        - Fixed problem with default content selector fields reappearing after removal.
-        - Fixed problem with unsupported character encodings being selectable and causing
-          unreported save errors.
-        - Fixed bug that blocked last line in table columns setup from being removed.
-        - Fixed missing export formats from command line.
-        - Fixed bug that made Review tab impossible to remove from entry editor.
-        - Fixed bug in Medline XML import that assigned wrong PMID for some entries.
-        - Fixed bug in custom export that collapsed sequences of two or more backslashes
-          into a single backslash in output.
-        - Fixed bug (misspelled formatter name) in Harvard RTF export.
-2.0.1:	- Fixed bug that made a hidden entry editor under some circumstances store a
-	      field value to the wrong entry.
-	    - Fixed synchronization bug that made the opening of a new database sometimes fail.
-	    - Fixed bug in setting external journal lists when no personal list is set.
-2.0:    - Changed sorting selection interface for main table for more intuitive
-          operation.
-        - Made import operation update "working directory".
-        - Removed hard-coded author/editor name rearrangement in OpenOffice and
-          OpenDocument exports.
-        - Fixed hangup when parsing RIS files from Nature.
-        - Fixed NullPointerException when generating database from AUX file on Mac OS X.
-        - Fixed bug in routine for adding braces around capital letters.
-        - Fixed bug in switching preview layouts.
-        - Fixed bug in link handling in entry preview.
-2.0b2:  - Changed field order in OpenDocument export to comply with bibliography requirement.
-        - Added support for inserting citations into Emacs using gnuserv/gnuclient.
-        - Added option to set a regular expression replace operation on generated bibtex keys.
-        - Added support for custom importers inside a jar file.
-        - Fixed bug in opening URLs containing '&' on Windows.
-2.0b:   - Added a system for registering custom import formats in the form of Java classes.
-        - Added export option for OpenDocument spreadsheet.
-        - Added new options for name formatting in main table.
-        - Added REPEC-NEP import filter.
-        - Added option for non-field parameters for export formatters. If the parameters does not start with the
-          backslash character, it will be passed unchanged to the formatter in place of any field value.
-        - Added export formatter CurrentDate, which returns the current date, and takes a format string as
-          parameter.
-        - Added customization of table colors, accessible from Tools -> Preferences -> Entry table.
-        - Added new Appearance tab to preferences dialog to gather appearance related options.
-        - Added toggling of abbreviated and full journal names. The list of journals is realized as
-           an external file, but editable from a Manage Journal Abbreviations panel. Secondary lists can also
-           be linked, but not edited. There is a download option to quickly get a list available on the internet,
-           and we will provide one or more lists for download from the SourceForge web server.
-        - Added functionality for new JabRef instances to detect a running instance, and send
-          command line parameters to the running instance for processing.
-        - Added handling of HTML links in preview panel.
-        - Added confirmation dialog when database is saved and the chosen encoding doesn't support all characters.
-          Gives options to save, cancel or try a different encoding.
-        - The encoding used when opening a database is now remembered, and used when database is stored.
-        - Added review field for research comments, paper reviews, etc.
-        - Added option to disable wrapping for certain fields. Wrapping of pdf, ps, doi and url is disabled by
-          default.
-        - Antialiasing option now affects entry editor text fields as well as table text.
-        - Changed to monospaced font in source editor field.
-        - Removed option to put double braces around BibTeX fields, but retained option to remove double braces
-          when loading. Added option to put braces around capital letters of a chosen set of fields.
-        - Improved Ovid import.
-        - Fixed problem with ordering of BibTeX strings that are referred to by other strings.
-        - Fixed problem with loading 16-bit encoded bib files with 8-bit encoding as default, and vice versa.
-        - Fixed multiplying authors bug when author/editor field appears both in Required and Optional tabs.
-        - Fixed startup freeze when trying to load certain malformed bib files.
-        - Fixed bug related to multi-line fields in RIS import.
-        - Fixed bug related to looking up a fully qualified DOI
-        - Included review field to preview panel 1, which shows the abstract
-        - Fixed bug where booktitle field was not displayed in preview
-          for conference proceedings, similar to journal field
-        - By default preserve capitalization on the following fields: title;journal;booktitle;review;abstract
-1.8.1:  - Added automatic timestamp with configurable format for entries.
-        - Added new key generator modifier ":abbr" to abbreviate field contents.
-        - Added Help button in Preferences -> Entry preview
-        - Added Big5, Big5_HKSCS and GBK encodings for Chinese.
-        - Improved marking feature. Username is now used for marking, so different users can mark
-          entries separately without interference.
-        - Improved handling of names such as "Firstname de la Lastname jr.", with different handling
-          for presentation and sorting purposes. Key generation now should always use the genuine last
-          name, and not produce keys like "de2001".
-        - Removed duplicate warning from inspection dialog for non-selected entries.
-        - Fixed setting of sheet name in OpenOffice.org Calc export.
-        - Fixed bug that prevented PDF/PS opening by F4 from automatically finding files in
-          subdirectories below the main PDF/PS dir.
-        - Fixed BibTeX parser bug that made it choke on short comment strings.
-        - Fixed bug that made regexp search fail for fields containing newline characters.
-        - Fixed platform-dependent handling of newline characters.
-        - Fixed bug that prevented command line import with explicit format.
-        - Fixed bug that made it impossible to disable table antialiasing.
-        - Fixed AuthorAndsCommaReplacer.
-1.8:    - Search panel now starts visible if it was visible at last shutdown.
-        - Added option to disable import inspection window when only one entry is being imported.
-        - Fixed parser bug that caused problems for bib files containing extra characters after the
-          last entry.
-        - Fixed missing month in JStor import.
-	    - Fixed some bugs in "new from plain-text" wizard
-1.8b2:  - Changed handling of external updates so the notification is suppressed when there are
-          no actual changes.
-        - Changed autodetecting import so BibTeX files are handled more similarly to other formats.
-        - Enabled sorting by icon columns.
-        - Added option to remove BibTeX source panel from entry editor.
-        - Added command line option to not load any files at startup. Will override any autoloading
-          or other command line options that normally load or import files.
-        - Added handling of duplicates to import inspection window.
-        - Made entry preview be updated whenever the selection is expanded by one row, to make
-          it more useful while selecting a set of entries.
-        - Changed BibTeX field parsing to avoid inserting line breaks at wrong places.
-        - Improved handling of page numbers in Medline import.
-        - Fixed import of file links when importing SixPack files.
-        - Fixed bug that prevented closing of search interface when no databases are open.
-        - Fixed OpenOffice Calc export to be compatible with OpenOffice.org 2.0 beta.
-        - Fixed bugs in Refer/Endnote import filter.
-        - Fixed bug that caused changes to be lost in some cases when the same field is present
-          in multiple entry editor tabs.
-        - Fixed bug that prevented command line autodetecting import from working with BibTeX files.
-        - Fixed minor bug in routine for removing double braces.
-1.8b:   - Added option to store bib file with double braces.
-        - Follow @input tags in aux files to indicate nested aux files for
-          generating subdatabases.
-        - Improved wrapping and formatting of bib files, to preserve paragraph separator (empty line).
-        - Added test buttons for customization of preview layouts.
-        - Added inspection dialog for previewing and generating keys for imported entries,
-          and deciding which ones to keep and discard. The dialog allows inspection during long import
-          processes such as Medline search.
-        - Restructured layout to use a common side pane with all tabs.
-        - Added import filter for Cambridge Scientific Abstracts (CSA) format.
-        - Added PS directory with similar options as PDF.
-	    - Added [authshort] and [edtrshort] key field markers. Patch submitted by
-	      Kolja Brix.
-        - Made the program remember preview enable setting.
-        - Improved handling of illegal regular expressions in search.
-        - Removed options to search only Required, Optional and/or General fields,
-          in order to simplify search interface.
-        - Changed keys for Next and Previous tab to CTRL-PGDN and CTRL-PGUP to match shortcuts in a
-          certain popular web browser.
-        - Minor change to Preferences -> Table columns to enable insertion of column in position 2.
-        - Fixed parser bug that caused problems for files with >10000 entries.
-        - Fixed bug in entry editor that caused the source edit panel to remove marking from entries.
-        - Fixed export bug that made "\begin" tags fail if encountered immediately after an "\end" tag.
-        - Fixed export bug that made whitespace disappear after empty field values.
-        - Fixed ISI import bug that handled SO fields with line breaks wrong.
-        - Fixed bug occuring when choosing not to import duplicate imported entry.
-        - Fixed problem with detecting popup trigger on Mac OSX with one button mouse.
-        - Fixed erroneous relative paths for PDF files when PDF directory is not set.
-        - Fixed entry preview to resolve string references.
-1.7.1   - Removed unnecessary stack traces when opening external viewer.
-        - Fixed bug that made Ctrl-E destroy current edit in entry editor.
-        - Fixed problem when copying modified BibTeX key gave old value.
-        - Fixed missing 'booktitle' import in CONF entries in RIS import.
-        - Fixed bug that made group tree disappear for certain keyword expressions.
-        - Fixed bug that made standard BibTeX fields be saved without line wrapping.
-1.7     - When fetching from Medline or CiteSeer, fetched entry is now opened in editor.
-        - Added French translations of help files.
-        - Added color highlighting of focused text field in entry editor.
-        - Added option in context menu of entry editor for changing capitalization
-              of field contents.
-            - Added name conversion "Smith, RA" -> "Smith, R. A." to Medline import.
-            - Fixed bug that left some search settings items disabled when they shouldn't be.
-        - Fixed bug that caused requirement for restart to register change in default
-          key pattern.
-        - Fixed bug that caused crash some times after adding/removing field content selectors.
-        - Fixed bug in recognizing custom entry types when reading bib files.
-        - Fixed bug that allowed a deleted entry to stay visible in the entry editor.
-1.7b2:  - Made side pane resizable.
-        - Replaced entry customization dialog with improved interface.
-        - Added standard entry type "conference", similar to "inproceedings".
-        - Added default key pattern to avoid the need to set similar patterns manually.
-        - Added line wrapping to metadata in saved .bib file to avoid long lines.
-        - Added "bibtexkey" as implicit fourth sort criterion, to minimize problem with almost
-          similar entries swapping places.
-        - Added OpenOffice.org Calc export filter that exports spreadsheet compatible with the
-          OpenOffice.org bibliography feature.
-        - Added a couple of previously unsupported publication types in SciFinder.
-        - Added extra shortcuts CTRL-+ and CTRL-- for switching tabs in entry editor, since
-          original shortcuts CTRL[-SHIFT]-TAB is used by some window managers.
-        - Updated Endnote export filter.
-        - Fixed focus and key binding problems for switching tabs/entries in entry editor
-        - Fixed bug that prevented required fields tab from appearing for entries with only bibtex key
-          as required field.
-        - Fixed bug that prevented the user from changing the default encoding.
-        - Fixed bugs in RIS import.
-        - Fixed bug 1112050; freeze when reading certain author fields with mismatched braces.
-1.7b:	- Changed routine for rearranging author names (Lastname, Firstname) so bracketed
-            expressions are treated as units.
-        - Grouping controls now allow group hierarchies, and now allow explicit and search
-          expression groups as well as keyword groups.
-        - Added full customization of general fields tabs
-        - Added option to preserve formatting for non-BibTeX fields.
-        - Added integrity check for database.
-        - Added export filters EndNote and Harvard RTF.
-        - Added automatic import format chooser for import (same as wildcard import below).
-        - Added wildcard (*) option for command-line import, to try to automatically
-          determine the correct format.
-        - Improved layout of Preferences dialog.
-        - Improved several import filters.
-        - Added authIniN/edtrIniN key formatters.
-        - Marked entries now float to the top when no searching or grouping reordering is active.
-        - Fixed problem with opening file dialog on Win NT - AWT dialog is now opened if
-          Swing dialog fails.
-1.6:    - Improved handling of entry selection in various ways. E.g. selected entry is now scrolled
-          into view when opening entry editor and entry is kept selected when importing CiteSeer
-          fields.
-        - Fixed update bug between autogenerated bibtex key and source panel.
-        - Fixed missing . at the end of last author name in RIS import.
-        - Fixed NullPointerException on certain special characters when exporting to BibTeXML.
-        - Fixed bug that sometimes prevented the unmarking of entries.
-        - Fixed problem with formatting one-name authors.
-1.6b:	- Added mnemonic keys to menus and menu items.
-        - Added MODS and tab-separated file export
-        - Added facility for detecting and handling external changes to open bib files.
-        - Added scan option for exact duplicates with automatic removal.
-        - Bibtex strings are now sorted automatically.
-        - Bibtex strings are now resolved when exporting database.
-        - Fixed problem with field content selector getting too wide. Limited width.
-        - Fixed PDF/PS view routine to remove problems with filenames
-          containing spaces.
-        - Fixed bug that interfered with Fetch Medline by ID, and fixed
-          parsing problem with certain Medline entries.
-        - Fixed bug that interfered with Push to WinEdt.
-        - Fixed HTML output so \c{c} is handled correctly.
-        - command line option for generating a sub-database from LaTex aux file
-          entries
-        - simple copy/paste menu in entry editor
-        - experimental: text-input-area with underlying infotext in plaintext import dialog
-1.55:	- Made method for opening PDF files robust with regard to file separators (/ and \),
-          so bib files can easier be used across platforms.
-        - Improved Medline fetcher. Can now fetch entries based on a search expression.
-        - Added features for fetching fields and referring publications from the CiteSeer
-          database.
-        - Added option to always save database ordered by author/editor/year, and made this
-          the default setting.
-        - When a single entry is selected, right-click menu now shows a checkbox menu for group
-          memberships instead of the regular "Add to" and "Remove from" menus.
-        - Improved [shorttitle] and [veryshorttitle] special key pattern fields.
-        - Added dialog box for conveniently setting the fields of an entry from a
-          plain text description.
-        - Added formatter "ResolvePDF" to create correct PDF/PS links in HTML export when
-          relative file names are used.
-        - Added Abstract panel in entry editor.
-        - Added alternate preview with abstract, and made both previews configurable.
-        - Added the option to create a subset of a database based on an .aux file.
-        - Added 'Cancel' button to duplicate resolver dialog, so the process can be stopped.
-        - Added check for spaces in custom entry type names.
-        - Added several new key pattern markers.
-        - Added toolbar buttons for Mark/Unmark to improve discoverability.
-        - Fixed bug that made export filters ignore the chosen character encoding.
-        - Fixed bug that interfered with author name formatting.
-        - Fixed various bugs in import filters.
-        - Fixed bug that prevented confirmation dialog when deleting entry from the entry editor.
-        - Fixed bug that made the next entry be opened instead of the current, when pressing
-          Enter in table.
-        - Fixed bug that made it possible to leave a source edit when the source didn't validate
-          properly. Also made it impossible to change table selection until source validates.
-1.5:	- Enabled selection of default encoding, and started storing encoding information in
-          saved .bib files, which is used when reopening.
-        - Added Highlight and select options to the group interface, and made it possible
-            to change the number of visible lines in the list.
-              - Added option to allow or disallow direct table editing.
-        - Added optional confirmation dialog for deleting entries.
-              - Added optional warning dialog for duplicate BibTeX keys.
-        - Added warnings to bibtex parser, and prevented failure to load files with
-          duplicate string definitions.
-              - Added JStor import filter.
-        - Changed the look and feel to JGoodies Forms on non-Macintosh platforms.
-        - Optimized performance in several areas.
-        - Numerous usability improvements.
-        - Fixed RIS import bug caused by short lines.
-              - Fixed bug in SciFinder import.
-              - Fixed bug that made entire field get cleared when removing from group.
-1.4:	- Added advanced search feature.
-        - Added facility for using custom export formats.
-        - Added command line options for importing/exporting files, importing/exporting
-          user preferences, loading session and for suppressing the GUI (using RitOpt for
-          parsing options).
-        - Added automatic stripping of \url{} when opening url.
-        - Improved export filters.
-        - Fixed focus bug which sometimes interfered with cut/copy/paste.
-1.3.1:	- Bugfix.
-1.3:	- Added entry preview.
-        - Added detection of duplicate entries.
-              - Added possibility to mark entries persistently.
-        - Added import filter for Sixpack and Biblioscape Tag files.
-              - Added option to use a standard directory for PDFs. PDFs placed in or below this directory
-          and named after an entry's BibTeX key can be automatically found.
-            - Added optional columns showing clickable icons for pdf/ps and url/doi links.
-        - Added menu and toolbar actions for open pdf/ps and url/doi.
-        - Added web lookup of DOI.
-        - Added several new special field markers to the key autogenerator.
-              - Added BibTeXML and simple HTML export.
-              - Changed browsing of entries. Entry editor now shows the selected entry.
-              - Improved HTML export for several entry types.
-              - Improved compatibility with Mac OS X.
-        - Made it possible to set custom secondary and tertiary sort fields.
-        - Made the entry number column width customizable.
-              - Fixed bug that caused database to always be marked as changed after viewing source.
-               - Fixed bug in selector word removal.
-               - Fixed	bug that made the file chooser unable to interpret Mac OS X aliases.
-1.2:	- Replaced the icon set.
-        - Added support for French language.
-        - Added customization of key generation.
-        - Improved HTML export.
-        - Added Replace string feature.
-            - Made a couple of adaptations for Mac OS X users.
-        - Added option in Table Preferences to set current column widths as default.
-            - Added import filter for BibTeXML.
-        - Fixed bug that allowed non-lowercase grouping field, leading to problems.
-        - Fixed bug that made selector words added in the dialog to be lowercased.
-        - Fixed bug relating to translated help files.
-1.19:	- Entry editor is now opened for an entry that causes an error when saving.
-        - Added options to display names in harmonised format in the main table.
-        - Added Docbook and (experimental) HTML export.
-        - Enabled 'doi' and 'pii' fields for Medline import.
-        - Enabled antialiasing fonts.
-        - Added the Kunststoff look&feel to give a more pleasant user interface.
-        - Added font selector for the main table.
-        - Improved table column customization.
-        - Added word selector feature for selected fields (keywords, journal).
-        - Added support for German and Norwegian language.
-        - Generalized copy cite key features for multiple entries.
-        - Added quick load/save session feature.
-        - Fixed issue/number bug in ISI import.
-        - Added "Open pdf/ps" item in right-click menu.
-        - Fixed bug causing external viewer to only work in General fields.
-        - Added functionality for using Browse buttons for file-related fields
-          (ps, pdf, etc.).
-        - Added Browse buttons to External programs tab in Preferences.
-        - Fixed bug related to Save database and Source field which caused changes
-          to disappear.
-1.1:	- Added bibtex key uniqueness checking, and prevented autogeneration
-          from generating non-unique keys.
-        - Added command line option to load file on startup.
-        - Fixed problem with autogeneration creating invalid keys.
-        - Improved Refer/Endnote import.
-        - Added feature for importing entries and/or strings and/or group
-          definitions from another BibTeX database.
-        - Added menu choices to import into open database.
-              - Added toolbar button for closing current database.
-              - Fixed shortcut key for "Store field" in entry editor, and fixed
-                problem that made shortcut for "Save database" unavailable from
-          entry editor.
-        - Added option to fetch Medline entries automatically by
-          ID, based on a patch submitted by Mike Smoot.
-        - Fixed bug in RIS import.
-        - Added options to copy key and copy "\cite{key}" to right-click menu.
-        - Fixed bug that caused some General fields not to get displayed.
-        - Enabled customization of General fields.
-        - Enabled customization of existing entry types, and definition of
-          new types.
-1.0:	First release.
+2.9.1
+    - Command line option --importToOpen now also adds to an open tab when JabRef is launched.
+    - Importing of entries works again. Fixes bug 1121.
+    - Import inspection dialog is now modal.
+    - Replaced Java launcher by launch4j. Fixes bugs 1100, 1103, 1123.
+    - Menu font size can now be changed again. Help contents are also enlarged accordingly. Fixes bug 1122.
+2.9
+    - Fixed bug: in OO/LO reference lists, entries may fall out when multiple entries with same
+      author and year are cited.
+    - Added support for converting HTML combining accents to LaTeX
+    - When generating subdatabase from AUX file, preamble and strings are now included from
+      the source database.
+    - Added cleanup action for removing redundant $, {, and }
+    - Fix for removing starting and ending spaces in the page number cleanup action
+    - Fix for a more liberal detection in the month cleanup action
+2.9 beta 2
+    - Added DiVA fetcher
+    - Can control if the HTML converter should create subscripts and superscripts
+      as text or an equation via the preferences
+    - Added initial support for adding curly brackets {} for certain
+      key words to keep the character case independent of .bst, e.g., for
+      names and abbreviations (use via "Cleanup entries") and can be controlled 
+      via preferences if it should be used at searches
+    - Fixed author and DOI import from IEEE Xplore 
+    - Improved import of equations in IEEE Xplore titles handling images, (sub) and /spl / representations
+    - Rewrote the HTML import in a more general way. A few characters need to be added.
+    - IEEE Xplore abstract fetching should now be working again.
+    - Added DOI to BibTex entry fetcher.
+    - Added ADS (The SAO/NASA Astrophysics Data System) fetcher by Ryo Igarashi (patch #120).
+    - Reintroduced Google Scholar and ACM portal fetcher with entry preview to reduce server load.
+    - Added alternate entry fetcher type where a preview can be displayed so the user can choose
+      which entries to download. This can reduce server load significantly and prevent users from
+      getting locked out of search services.
+    - Fix for exception and minor bugs in HTML import parsing (patch 3575998 by Daniel Sv�rd)
+    - HTML import handles more characters. Cleanup can also do HTML cleanup. (Patch 3582375 by Oscar Gustafsson)
+    - During file renaming: More illegal characters are removed (idea by Sarel Botha)
+    - Rudimentary support for IEEEtranBSTCTL added (patch 3582376 by Oscar Gustafsson)
+    - ":" is not filtered from the BibTeX keys any more (patch 3582376 by Oscar Gustafsson)
+    - Changed internal look&feel setting (based on patch 3580605)
+    - Custom importers nested in jars should be supported now (bug 3582838)
+    - PDFContentImporter uses the DOI fetcher to fetch the BibTeX for the entry (if a DOI exists at the first page).
+    - Moved migration of legacy PDF/PS fields from legacy tools to clean up dialog.
+    - MHT files can now also be linked by drag'n'drop without the need to configure "external file types".
+    - Adds support for Ubunut's global menu and HUD integration by using java-swing-ayatana (feature #796).
+    - Updates PostgreSQL support to PostgreSQL 9.2
+    - New Mac OS X icon (patch #61)
+2.9 beta
+    - Replaced notification dialog after moving/renaming linked file by status message.
+    - Replaced dialog warnings about empty/duplicate key in entry editor by status line messages,
+      to prevent lockup if Save button is pressed directly.
+    - Replaced window icon with 48x48 image.
+    - [experimental] Added local undo/redo handling for entry editor text fields.
+    - Added special field functionality for ranking, marking as relevant,
+      marking as quality assured, and prioritizing. Can be enabled by "Entry table columns".
+      Based on the work by Igor Chernyavsky, Florian Straßer, and Marius Kleiner.
+    - Added PDF preview functionality to the preview panel. Configurable via "Entry preview" settings.
+    - Group edit dialog now closes when Escape is pressed.
+    - Fixed MS bib import, month was lost on import.
+    - Generate key action in entry editor now honors key overwrite settings.
+    - Fixed bug when importing XMP data from PDF, file will now be linked from the new entry.
+    - Fixed bug in layout processing - quoted formatter argments are now handled correctly.
+    - Fixed bug 3545394: null and curly brackets in custom export filter.
+    - Added "Manage keywords" popup menu to manage common keywords of selected entries.
+    - Added support for pushing citations to TeXstudio (requires TeXstudio >=2.4)
+    - Text-based citations can now be imported using FreeCite by Brown University
+      (http://freecite.library.brown.edu). By Kai Mindermann and Daniel Maurer.
+    - JabRef supports synchronization of unlinked PDFs. Feature request "[2163626] Scan database - find unlinked files".
+      Based on patch 3122104. 
+    - Added command line argument -d/-prdef for resetting preferences to default values. Can
+      reset a comma-separated list of preference values, or all values.
+    - Added small right-click popup menu at each tab
+    - A PDF can also be dropped to the preview panel to trigger linking it
+    - Drag'n'drop of text from the preview panel to other applications is now working
+    - Added highlighting in preview area for search text (based on patch 3121914 by
+      Maximilian Lengsfeld).
+    - New context menu option "Switch preview layout" in the preview panel. 
+    - BibTeX key generator patterns can now be stored in per database (implements feature 3495993)
+    - Braces around author names are now dropped internally. They remain in the .bib though
+      Effects (incomplete list): Authors in the main window are shown without braces,
+      autocompletion does not show these braces
+    - Autocompletion: ";" is now also a delimiter allowing "keyword1; keyword2" in the keyword fields
+    - Autocompletion: the amount of characters to trigger autocompletion may now be configured
+      (default is 2)
+    - Autocompletion: in case lower case letters are used, the search is case-insenstive,
+      otherwise the search is case sensitive.
+    - Autocompletion: new preference to choose how to deal with first names 
+      (always full/always abbreviated/both full and abbreviated)
+    - Added functionality "clean up entries" 
+      - Includes clean up DOI functionality by Florian Straßer and Marius Kleiner
+        (move of DOIs from ee, note, and url field is supported)
+      - Option to rename PDF of entry according to configured PDF-naming-scheme
+        (by Florian Straßer and Marius Kleiner)
+      - make file paths relative
+      - clean up month (functionality based on patch 3470076 by Mathias Walter)
+      - clean up pages
+      - fix superscripts
+    - New "ISBN to BibTeX" fetcher. Uses the online "ISBN to BibTeX Converter" service by Manas Tungare.
+    - Added support for drag'n'drop of tabs by Florian Straßer and Marius Kleiner.
+    - PDF import dialog now always stores settings: checkbox removed
+    - float search now also jumps to first entry if entry editor is opened
+    - usability improvements of "content selectors"
+2.8.1
+    - New DBLP fetcher. Patch 3462232 by Sascha Hunold.
+    - Disabled ACM portal fetcher to avoid users of getting banned.
+    - Fixed bug in PostgreSQL export/import.
+    - Improved handling of file fields written in the style exported from Zotero.
+2.8
+    - Applied Oscar Gustafsson's fix for IEEEXplore fetcher.
+    - Added capability to remove databases from SQL database.
+    - Fixed customization of entries in Biblatex mode.
+2.8 beta 2
+    - Improvements to SQL export and import. Fixed bug where subsequent exports to same
+      database would fail. Can now save multiple bib bases to a single SQL database.
+    - "abbr" modifier in BibTeX key generator now skips parentheses.
+    - Minor change to FirstPage formatter. Now splits at spaces as well as hyphens,
+      and returns original field content if only one page number is found.
+    - When using the preferences import command line option, preferences are now imported
+      before load/import/export operations are handled.
+    - Applied Nicolas Pavillon's patch for proper keystroke handling on Mac OS X.
+    - Applied Ivanilton Polato's patch for handling multi-line fields in CSV export.
+    - Fixed bug: "Send as Email" did not handle absolute paths correctly.
+    - Fixed bug 3472991: Search: "Highlight Words" inconsistent
+    - Fixed bug 2933201: Exporting InProceedings to Word 2007
+    - Fixed bug 3146059: Error in translating author field to MS Office
+    - Fixed bug: entering field names containing capital letters in table columns tab
+      in Preferences makes the columns empty.
+2.8 beta
+    - Fixed issues with ACM portal fetcher using Benjamin Langmann's patch, plus an
+      additional minor fix.
+    - A large list of journal abbreviations is now loaded by default.
+    - Added global option to allow file links relative to the bib file location, in addition
+      to the global or database- or user-specific file directory.
+    - Fixed bug 3434674: Reviewing changes overwrites groups.
+    - Integrated the plugin for interaction with OpenOffice/LibreOffice as a standard part
+      of JabRef.
+    - Added keyboard shortcuts Ctrl-Up and Ctrl-Down to move file links up and down in a list
+      of external links in the entry editor.
+    - Applied "bjoerntm"'s patch for making the loading of group information less sensitive
+      to white space, in order to prevent trouble loading files written by other tools.
+    - Added optional autocompletion of author/editor last names in search field.
+    - Changed entry fetcher system so all fetchers are accessed from a single side pane
+      component with a selector.
+    - Added INSPIRE fetcher by Sheer El-Showk.
+    - Improved error handling when importing in specific format.
+    - Prevented crash when calling invalid import format on startup.
+    - Improved duplicate detection.
+    - Added markers \filename and \filepath for ".begin.layout" and ".end.layout" files
+      in order to output the name or full path of the bib file of the exported database.
+    - Fixed possible array index exception in LastPage formatter.
+    - Improved author/editor normalization in entry editor.
+    - Added metadata extraction from text when PDFs are dragged into JabRef.
+    - The filename pattern for renaming a file when dropping a PDF can now be
+      configured at "Options"/"Preferences"/"Import"/"File name format pattern".
+    - The defaults of the ImportDialog shown when PDFs are dragged into JabRef
+      can now be configured at "Options"/"Preferences"/"Import". It is possible to
+      override showing the ImportDialog.
+    - An entry can be sent by a right click on an entry and select "Send as Email"
+      (patch 3306271).
+    - Added option to "copy BibTeX key and title" (patch 3370471).
+    - The command for pushing to emacs can be configured now. New command for Emacs 23.
+      New default for Windows: emacsclient.
+    - Added export support for DIN1505 style (based on patch 1874662).
+    - Added support for PostgreSQL import/export (patch 3368760 by Fred Stevens).
+    - Added formatter "JournalAbbreviator" (patch 3013311 by Meigel).
+    - RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
+      (patch 2905383 by Russell Almond).
+    - Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).
+    - ToggleButton added to GroupSelector to ease adding/removing references to/from groups
+      (based on patch 3313564 updated by Andreas Schlicker).
+    - Export filter "tablerefsandbib" updated to contain links to files and notes 
+      (patch 2787096 by Thomas Arildsen).
+    - "of" added to the list of skip words (patch 2781830).
+    - Added cli-function for exporting entries filtered by a search term 
+      (patch 1817093 by Silberer, Zirn)
+    - Added highlighting in textarea for search text (patch 3117881 by Ben).
+      Slightly modified to cope with words[]={""}, support for "BibTeX source" tab, and that
+      "Clear" also clears the highlighting.
+    - Switched from PDFBox 0.7.3 to PDFBox 1.6.0.
+2.7.2
+    - Fixed bug that prevented search functions from working under Java 7.
+2.7.1
+    - Fixed problem with search function under Java 7.
+    - Made Database properties dialog modal to prevent database from being closed
+      while properties window is open.
+    - Fixed error handling in custom import dialog when invalid jar files or class
+      files are specified.
+    - Added OR operator for conditional export formatting.
+    - DocBook export format switched to 4.4 (based on patch 3313898).
+    - Fixed bug that made the key generator combination [shorttitle:abbr] return
+      only a single letter.
+    - "of" added to the list of skip words (patch 2781830).
+    - Bugfix for NullPointerException in Biblatex mode (patch 3222388 by Matthias Erll).
+    - RTFExport: Replaces ligatures `` and '' with RTF control sequences {\ldblquote} and {\rdblquote}.
+      (patch 2905383 by Russell Almond).
+    - Fixed bug that made menu items for marking in specific colors invisible
+      under Windows 7.
+    - In case a new entry is added, this entry is highlighted and the editor is opened
+      if configured in the settings (patch 3370466). The UI behavior of adding an entry
+      at "new entry from plain text" is now similar to "new entry".
+    - Fixed bug in focus handling that affected some actions.
+    - Running JabRef under the Oracle JVM will no longer give a warning.
+2.7
+    - Medline importer now wraps multipart last names in braces.
+    - RIS importer now handles multiple title fields by concatenation.
+    - Disallowed "comment" as entry type name, since this conflicts with the BibTeX format.
+    - Fixed handling of suffix name parts (Jr, etc.) in Medline importer.
+    - Added optional second numeric argument to Authors formatter, which determines
+      how many authors are shown if the maximum number is exceeded.
+    - Added content selector for "review" field in entry editor.
+    - Improved detection of file type when adding new link. Can now recognize double
+      extensions such as ".ps.gz".
+    - Improved autocompletion of author names. Added options to complete either in
+      'Firstname Lastname' or 'Lastname, Firstname' formats, or in both.
+    - Fixed bug in import function if no suitable import filter is found.
+2.7 beta 2
+    - Added support for MrdLib lookup or metadata extraction when PDFs are dragged into
+      JabRef.
+    - Added option under "External programs" for disabling the automatic opening of the
+      Browse dialog when creating a new file link.
+    - Fixed shortcut key collision. Shortcut for Import to new database is now Ctrl-Alt-I.
+    - The "Open URL or DOI" action now uses URL links in the "file" field as fallback if
+      no links are found in the "url" or "doi" fields.
+    - Restricted remote listener port numbers to interval 1025-65535.
+    - Added Japanese translation by Koji Yokota.
+    - Added scrollbar to entry editor when it is too high to fit in its panel. Patch
+      by Matthias Erll 
+    - Made it possible to copy entries from the search dialog.    
+    - Added proper error message when trying to search with invalid regular expression.
+    - Added error dialog on startup if custom look and feel cannot be loaded.
+    - Applied Alexander Hug's patch for correctly importing doi from ScienceDirect RIS files.
+    - Removed potential NullPointerException in SearchExpressionTreeParser.
+2.7 beta
+    - Some improvements to MS Office export filter.
+    - Introduced three choices for ensuring unique generated keys. The default one (marking
+      with a, b, etc.), a modified one (marking with b, c, etc.) and always adding a letter
+      (a, b, etc.).
+    - Font and background colors are now customizable in the entry editor (Options ->
+      Preferences -> Appearance).
+    - Window title now includes the full path to the current file.
+    - Entries can now be marked in a series of different colors. Automarking of imported
+      entries is now done in separate color without affecting other marked entries.
+    - Added new feature (Tools -> Scan database... -> Resolve duplicate BibTeX keys) to
+      search for duplicate keys and offer to generate new keys to resolve the duplicates.
+      Instead of being listed in a warning dialog after opening a bib file, duplicate keys
+      now trigger a dialog asking whether the user wants to resolve the duplicates.
+    - Added check that ensures that application doesn't quit while a large save operation
+      is still in progress. Shows wait message with cancel button.
+    - Added apostrophe (') as illegal character in BibTeX keys.
+    - BibTeX strings that refer each other are now sorted correctly when saving bib file.
+    - Fixed bug in merging external changes - file would still be reported as modified
+      externally after merging changes.
+    - Fixed bug in Move/rename file link feature that could cause the wrong link to be
+      stored for certain directory structures.
+    - Fixed bug: curly braces can now be used in arguments to formatters. 
+    - Fixed lockup bug when generating key for entries with crossref fields.
+    - BibTeX strings are now resolved before attempting to (un)abbreviate journal names.
+    - Modified [shorttitle] and [veryshorttitle] key generator markers so they consider
+      a hyphen a word boundary, and remove punctuation characters (keep only numbers and
+      letters).
+    - deprecate various export formatters with new Authors formatter, which provides flexible 
+      formatting options.
+2.6
+    - Fixed IEEExplorer and ACM fetchers to adapt to web site changes.
+    - Active preview (1 or 2) is now remembered.
+    - Applied patch by Igor L. Chernyavsky. to prevent loss of entry selection after
+      generating key.
+    - Changed OpenDocument Spreadsheet export so the mimetype file is written correctly
+      at the start of the zip file.
+    - Fixed bug when importing preferences: custom export filters would not be updated
+      after import.
+    - Changed help page loading procedure so help pages can be loaded for plugin entry
+      fetchers.
+    - Made it possible to define customized entry types with either-or conditions on
+      required fields, e.g. using a pseudo-field called "author/editor" will indicate
+      that the entry requires either the "author" or the "editor" field set.
+    - Fixed bug: entries of a customized type could be indicated as complete even if
+      BibTeX key was not set.
+    - Changed deletion process for some temporary files to avoid leftover files.
+2.6b3
+    - Added ScienceDirect entry fetcher that utilizes the BibSonomy scraper.
+    - Changed non-native file dialog setting so files cannot be renamed. This prevents
+      accidentally entering rename mode when trying to enter directory. Can be enabled
+      again in Options -> Preferences -> Advanced.
+    - Added new JStor fetcher that utilizes the BibSonomy scraper to obtain BibTeX data.
+    - Fixed bug in CookieHandlerImpl.
+    - Fixed bug; when dragging a file into JabRef and asking to move it to the file
+      directory, warning will now be given if the destination file already exists. Patch
+      by Alastair Mailer.
+    - When dragging a file into JabRef and asking to copy or move it to the file directory,
+      it is now possible to rename to an arbitrary name. Patch by Alastair Mailer.
+    - Added "review" field to BibTeXML export.
+    - Added Reset button to entry fetchers. Patch by Dennis Hartrampf and Ines Moosdorf.
+    - Changed Microsoft Office XML export so "number" rather than "issue" is exported
+      as <b:Issue>, which conforms with import format. 
+    - Added confirmation dialog that allows saving without backup in cases when
+      backup creation fails.
+    - Fixed bug 2938562: using the move/rename feature on a file link could give an
+      absolute link even if the file was put below the main file directory. 
+    - Fixed bug 2931293: error generating key with [authorsAlpha] for short names.
+    - When checking for external modifications, file size is now checked in addition
+      to the time stamp.
+    - Fixed handling of maximised state when shutting down and starting up JabRef.
+      Patch by Igor L. Chernyavsky.
+    - Fixed bug that prevented correct handling of DOS short file names. Patch
+      by Igor L. Chernyavsky.
+    - Added support for KOI8_R character set.
+    - Removed DocumentPrinter class, using standard API functions instead. Patch by
+      Tony Mancill.
+    - Removed HightlightFilter class, using standard API functions instead. Patch by
+      Tony Mancill.
+    - Changed keyboard shortcut for IEEXplorer search to Alt-F8.
+    - Disabled JStor search, which doesn't work due to API changes.
+    - External file type manager now removes "." prefix in file type extension if the user
+      has typed it that way.
+    - Preview panel now defaults to preview layout 1 instead of 2. Switched default layouts.
+    - Added IfPlural formatter by Russell Almond. The formatter outputs its first argument
+      if the input field contains " and " and the second one otherwise.
+    - Applied patch by Philipp Cordes and Björn Kahlert for improved handling of names by
+      autocompleter. The patch also reorganizes the autocompleter classes.
+    - Table will now scroll to keep the currently edited entry visible if an edit leads to
+      the entry getting sorted to a different position.
+    - Reworked author and editor handling in Docbook export. Added Docbook XML header.
+    - Database will no longer be marked as changed after accepting external changes, unless one or
+      more changes were not accepted before merging, and unless database was already marked as
+      changed.
+    - Fixed bug: undesired autocompletion when saving file.
+    - Fixed bug: entry editor doesn't appear when new entry is added while a filtering search or
+      group selection is active.
+    - Fixed bug in writing of metadata on Windows. For certain metadata lengths newlines would be
+      messed up after the metadata comment in a bib file.
+    - Search dialog now automatically previews first hit, and hides preview if there are no hits. 
+2.6b2
+    - Added export formatter "Default" which takes a single argument. Outputs the string to format
+      unchanged if it is non-empty, otherwise outputs the argument.
+    - Added option under Options -> Preferences -> General for disabling the strict enforcing of
+      correct BibTeX keys. Disabling this makes it possible to use e.g. umlaut characters in keys.
+    - Modified launcher script for Windows installer to give higher heap size limit.
+    - Improved autocompletion. All fields with autocompletion which have content selectors will now
+      autocomplete on content selector values. For the "journal" field, the autocompleter will now
+      additionally use entries from the current journal abbreviations list, and will also complete
+      on the entire field up to the cursor rather than just looking at the last word only.
+    - Added support for postformatter in Layout. The postformatter will be run after
+      the formatters called from a layout.
+    - Improved group autogeneration. Added option to generate groups based on author or editor
+      last names. Autogenerated groups are now alphabetized.
+    - Modified Endnote export filter so "--" gets converted to "-" in the "pages" field.
+    - Changed keyword groups so they will match on whole words only. E.g. a keyword group for the
+      keyword "can" will no longer match the keyword "scanner".
+    - Improved entry type determination and author parsing for some varieties of CSA files.
+    - Minor change to Harvard RTF export. Added space after "ed.", and added editor to output for
+      inbook entries.
+    - Set limit to the number of displayed characters in group names in groups tree in order to
+      avoid group panel width problems.
+    - Changed file link handling so all remote links classified as URL can be opened through
+      the browser. Setting a different file type manually makes JabRef call a remote link using
+      the handler application instead.
+    - Modified Endnote/refer import filter to strip "doi:" from the %R field.
+    - Modified HTML conversion so single newline is displayed in the preview (and HTML exports) as
+      <br>, while multiple newlines are displayed as <p>.
+    - Fixed bug: switching entry editor between entries of different type may result in switching
+      of entry editor tabs.
+    - Fixed bug: adding external file link leads to relative path from root directory if file
+      directory is set to an empty string.
+    - Fixed error message when a # in a BibTeX string prevents saving. No longer states that the
+      problem is in an entry, but specifies that it is in a string.
+    - Fixed bug: ODS export doesn't resolve BibTeX strings.
+    - Fixed bug: content selector for "editor" field uses "," instead of " and " as delimiter.
+    - Fixed bug: editing source doesn't allow change of entry type.
+    - RTFChars formatter now converts --- to \emdash and -- to \endash.
+
+2.6b
+    - Added pages information to several entry types in Endnote export.
+    - Modified LastPage formatter so it returns the number when only the number of pages is given.
+    - Modified search algorithms so LaTeX commands are removed before search. For instance, this
+      means that the value "test \textit{case}" now matches the search string "test case".
+    - Changed default table font family to "SansSerif".
+    - Can now create lock file while writing a bib file. The lock file is checked before
+      saving, and before scanning an externally changed file, in order to avoid reading an
+      unfinished file.
+    - Added support for dragging a file link from the file column to another application.
+    - Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.
+    - Improved ISI import filter so DOI information is included.
+    - Fixed bug: metadata changes would not be detected as external changes to a database.
+    - Fixed bug: when accepting external changes and not saving before new changes are
+      detected, the previously accepted changes would also be listed.
+    - Fixed bug in Scifinder import where an empty Inventor field could overwrite the
+      author field.
+    - Fixed bug in autocompleter. Current suggested completion would be added to the field
+      if the user closed the entry editor or mouse clicked on another field.
+    - Fixed problem with exporting to some MySql versions. Patch by François Dorin. 
+    - Fixed bug in handling of LaTeX character sequences - now sequences with = as command
+      character (e.g. "\={A}") are recognized.
+    - Fixed bug: gray out / hide setting in groups panel is overridden on startup
+      by search mode selection. Added separate prefs key for the groups setting.
+      Fix suggested by Igor L. Chernyavsky.
+    - Fixed bug: cookie manager installed by Download button in file field editor throws
+      an exception when trying to fetch from Medline.
+    - Fixed bug: temporary files don't get deleted on shutdown.
+    - Disabled table column reordering in import inspection window, since a user reported
+      problems when using this.
+    - Changed years from 2008 to 2009 in splash image.
+2.5
+    - Modified export layout procedure so missing formatters can be reported in the error
+      output. Export now succeeds with warnings added where formatters are missing.
+    - Conditional blocks (\begin{field}...\end{field}) in layout files can now be given a
+      semicolon-separated list of fields as argument. All fields must then be set for output
+      to be given.
+    - Changed RIS import so multiple abstract fields in an entry are concatenated.
+    - Added quoting of some special characters in SQL export, based on Kyle Crabtree's patch.
+    - Fixed bug in MS Office 2007 XML export - editor names missing.
+    - Fixed bug in plugin manager that prevented the "Download plugin" button from working.
+    - Fixed bug in plugin manager routine that checks for installed versions of a plugin.
+    - Fixed bug in startup that could show warnings multiple times when loading
+      from autosave files.
+2.5b2
+    - Plugin manager now handles plugin versions correctly based on the version number in their
+      plugin.xml file.
+    - Added formatter "Number" that outputs a sequence number for the current entry in the current
+      export operation. This formatter can be used to produce a numbered list of entries.
+    - Added autosave feature.
+    - Fixed bug in file link handling in BibTeXML export.
+    - Improved handling of patents in Scifinder import.
+2.5b
+    - Added Simplified Chinese translation.
+    - Added simple plugin manager.
+    - Added ~/.jabref/plugins as user-specific plugin directory.
+    - Added \r marker to WrapFileLinks formatter that outputs file links without expanding
+      relative links.
+    - Added [authorsAlpha] key marker that formats authors according to the "alpha" BibTeX style.
+      Patch submitted by Oliver Kopp.
+    - Table sort order set by clicking and Ctrl-clicking table columns is now immediately set
+      as default sort order in preferences.
+    - Changed LyX pipe setting so it works whether ".in" is included or omitted.
+    - Modified ISI importer so the words "of", "and" and "the" will not be capitalized in the title,
+      journal or publisher fields.
+    - When adding new local file link, browse dialog now appears immediately when opening file link
+      editor, saving one mouse click.
+    - Added "Remove all broken links" option in the resolver dialog for broken links when
+      synchronizing file links.
+    - Added rename option to Set/clear field dialog, to move contents from one field to another.
+    - Added Back and Forward actions, for switching between recently edited BibTeX entries.
+    - Added option under "Entry table" to designate fields as numeric for sorting purposes.
+    - Added possibility for custom export filters to define their own name formatters.
+      This is done by adding a file named "<filtername>.formatters". This file defines
+      one formatter on each line, with each line containing the name of the formatter and
+      the formatter definition, separated by a colon (:).
+    - Added menu items for increasing/decreasing table font size, with shortcut keys Ctrl-plus and
+      Ctrl-minus.
+    - Added options to automatically mark entries imported into an existing database, and to unmark
+      previously marked entries when importing.
+    - Added ":(x)" modifier to key generator, specifying that the arbitrary string x
+      should be used as a fallback value if the value returned by the field marker is empty.
+    - Added ":upper" modifier to key generator, to force uppercase for a field marker.
+    - Added buttons in External programs tab in Preferences for modifying settings for
+      "Push to"-features, and removed obsolete fields.
+    - Added support for DOI field in Endnote importer.
+    - Added support for language and publication status fields in Medline import (publication status
+      stored in "medline-pst" field).
+    - Enabled cookie handling for downloading full-text articles.
+    - Improved handling of invalid BibTeX keys containing white space. Parser will now try to
+      piece together the key and avoid disturbing the continued parsing. Patch submitted by
+      Stephan Lau.
+    - Cosmetic change to the entry type label to the left in the entry editor.
+    - Changed name handling so a single-entry name without a capital initial letter, such as
+      "unknown", will be treated as a solitary last name rather than a von particle.
+    - Changed table selection coloring so entries that are grayed out or marked can be
+      distinguished from normal entries when selected.
+    - Changed handling of "affiliation" in Medline import - now makes sure to escape
+      # characters before storing.
+    - Modified ACM portal fetcher due to web site changes.
+    - Improvements to IEEEXplore fetcher - better handling of month and page fields.
+    - Changed behaviour of source panel when an entry contains imbalanced # characters -
+      the panel can now show the entry in its invalid form, allowing the user to fix the problem.
+    - Improved handling of PDF files without XMP metadata - other metadata will now be retained.
+      Patch submitted by Felix Langner.
+    - Fixed bug in parsing file field - double spaces in file names would be reduced to single
+      spaces, breaking the file link. Fix submitted by Uwe Kuehn.
+    - Fixed NullPointerException when downloading external file and file directory is undefined.
+    - Fixed bug in HTMLConverter.
+    - Fixed NullPointerException in key generator for incomplete names.
+    - Fixed bug in removing custom export filters.
+    - Fixed bug 2225371: restart is no longer required after adding a new custom export filter. 
+    - Fixed bug in "Move/rename file" feature in file field editor with regard to undefined
+      file directory.
+    - Fixed bug in Ris importer.
+    - Fixed NullPointerException in Endnote importer.
+2.4.2
+    - Added missing layout formatters FirstPage and LastPage.
+    - Fixed a bug regarding ParamLayoutFormatter loaded from plugin.
+    - Fixed crash during initalization of journal abbreviation list.
+    - Added option to have JabRef search for external file when "Open file" function is chosen
+      for an entry without any linked files. This is similar to what was always done in
+      JabRef 2.3.1 and earlier. 
+    - Improved regular expression file search, so the regular expression can contain field
+      markers as used for BibTeX key generation in addition to just regular fields. It is
+      no longer possible to call arbitrary layout formatters, but the modifiers "upper",
+      "lower" and "abbr" (for case conversion and abbreviation) can be used.
+    - Ris importer now imports PB as "school" instead of "publisher" for THES entries.
+    - Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.
+2.4.1
+    - Fixed bug: layout formatter arguments were not set when using a ParamLayoutFormatter
+      loaded from plugin.
+    - Fixed bug: when abbreviating first names, for authors with first names connected
+      with "-", only the first letter is shown.
+    - Enhanced ExportFormatTemplate plugins with an optional property "encoding" which
+      overrides the default encoding with the given one.
+    - Fixed menu colors under Windows Vista.
+    - Fixed bug 2137771: Missing file extension when downloading.
+    - Fixed bug 2105329: Ensure that newly added entry is visible in table.
+    - Fixed bug 1908222: Preference "Fit table horizontally on screen" doesn't work
+    - Fixed bug 2119059: Handling of the A1 tag in the RIS format.
+    - Added missing help file for ACM digital library fetcher.
+    - Added option for whether to use IEEE LaTeX journal abbreviation list.
+    - Added tooltip to menu items in push-to-application popup menu.
+2.4
+    - Added mappings for some special characters that need to be sanitized when generating
+      BibTeX keys.
+    - Added ACM Digital Library fetcher by Aaron Chen.
+    - Added new entry types (conference, patent, standard, electronic).
+    - Improvements to IEEEXplore fetcher.
+    - Added explanatory text to indicate that "ps" and "pdf" files are legacy features.
+    - Fixed unexpected behaviour of "Open PDF or PS" menu item - now looks in "file" field,
+      and does not launch search for external files.
+    - Fixed bug 1827568: 'Save database' might not store current edit in entry editor.
+    - Fixed bug 2027944: updating custom export definitions requires restart.
+2.4b2
+    - Opening external files on Linux now uses "xdg-open" as application if no other is specified
+      for the file type. xdg-open should be available to call the appropriate application according
+      to the user's settings on all freedesktop compliant Linux distributions.
+    - Download external file now attempts to determine file type based on MIME type, using
+      file extension as fallback.
+    - Changed the way names are handled under autocompletion. Last and first names are
+      now indexed separately.
+    - A table column can now be set up with fallback fields used if the main field is
+      empty. Fallback fields are set in Options -> Preferences -> Main table columns by
+      setting a column to "field1/field2/...". The fields will be checked in succession
+      until a non-empty value has been found or al fields have been checked. For instance,
+      specifying "author/editor" will result in a column displaying the author field where,
+      set, and the editor field for entries with an empty author field.
+    - Added special handling of autocompletion for the "crossref" field - now indexes
+      words from the BibTeX key field instead of the "crossref" field. Added crossref
+      to the default fields using autocompletion.
+    - Added menu item and shortcut (ctrl shift E) to shift focus to the entry table.
+    - Main window now remembers maximisation state from last time.
+    - Improved SQL export feature so the complete information about groups, strings and preamble
+      is included. Added SQL import feature supporting the same database schema.
+    - Added new implementation of regular expression file search that can handler multiple files
+      and file types. Added regexp search as a third option for autolink feature.
+    - Added support for BibO RDF format, contributed by Egon Willighagen.
+    - Fixed bug in autocompletion; continuing writing the suggested word after cycling
+      through alternatives would give wrong result in editor.
+    - Fixed bug where selection would jump back if an entry of different type was selected
+      by mouse click while editing a field of the current entry.
+    - Fixed missing name formatting in search dialog. Now uses same formatting as main table.
+2.4b
+    - Added Export to SQL database feature. Supports MySQL.
+    - Added "protection" flag in Database properties. When this flag is set, JabRef will
+      refuse to save the database when the file has been externally modified, until the
+      changes have been reviewed and partly or completely accepted.
+    - Fixed bug where the external update notification in the side pane would remain
+      even if the referred database was closed.
+    - Added two new search modes - display search results in a dialog, and global search.
+    - Support for fetching from the command line using --fetch (contributed by 
+      Jan F. Boldt and David Kaltschmidt).
+    - Support for fetching from Spires (contributed by Fedor Bezrukov).
+    - Support for fetching from JSTOR (contributed by Tobias Langner, Juliane 
+      Doege, Sebastian de Hoog and Christoph Jacob)
+    - Added context menu for file list editor with options to move/rename linked file
+      as well as to automatically move the file to file directory and optionally rename
+      after BibTeX key.
+	- JabRef can now be extended by plugins (using the Java Plugin Framework 
+	  JPF as the underlying technology). Currently extension points exist for:
+		- ImportFormat
+		- ExportFormat based on Templates
+		- ExportFormat based on IExportFormat (contributed by Kariem Hussein)
+		- LayoutFormatter
+		- EntryFetcher
+		- PushToApplication
+	  JabRef uses JPFCodeGenerator (which was written just for JabRef) to
+	  generate helper classes for making JPF easier. Current version used: 0.4
+	  http://forge.spline.inf.fu-berlin.de/projects/jpfcodegen/
+	- Print warnings if insufficient Java version is used or if JRE is not from Sun.
+	- Memory Stick Mode: JabRef automatically loads configuration settings from 
+	  jabref.xml and also writes them there if enabled.
+	- Improved handling of crossrefs. Fields are now resolved in preview and export.
+	- Updated dependencies, now using: JempBox-0.2
+	- Improved handling of ArXiv URIs.
+	- Changed default preference value: now using import inspection dialog also
+	  when just a single entry is imported.
+	- Parsing of field lists for non-wrappable fields and fields for which to automatically
+	  add braces around capitals now ignores whitespace between entries.
+	- [ 1620792 ] Fixed: JabRef randomly hangs during Medline fetch
+	- [ 1738920 ] Fixed: Windows Position in Multi-Monitor environment
+	- [ 1795355 ] Fixed: LatexFieldFormatter omits "{" on beginning of optional field
+	- [ 1297576 ] New feature: Printing of entry preview (use right-click menu)
+	- [ 1717849 ] Fixed: Bug in aux import (contributed by Kai Eckert)
+    - [ 1749613 ] Fixed: About translation
+    - [ 1709449 ] Fixed: Clicking a DOI from context menu fails
+    - [ 1869331 ] Fixed: Uninstall after silent install removes Windows start menu
+    - [ 1723219 ] Fixed: Strange message (LyX) while installing
+2.3
+    - Added handling of unknown file types when synchronizing the file field.
+    - Changed the way customized external file types are stored. Types are now stored in a
+      way analogous to a diff from the default types. This allows default types added in later
+      versions to appear immediately, even if the user has customized the list.
+    - Moved file preferences from General tab to new File tab.
+    - Reduced horizontal size of preferences dialog.
+    - Fixed handling of quotes when using the "abbr" modifier for key generator (Debian bug
+      #448917).
+    - Download file procedure now strips query string in order to find correct file extension
+      (Debian bug #448027).    
+2.3b3
+    - Export formats that output the character encoding now use common names for encodings
+      instead of Java-specific names.
+    - Added "Open" button in external link dialog box to test or use the link.
+    - Added formatter WrapFileLinks which iterates over file links, producing a formatted
+      string for each containing any desired information about the file link.
+    - Applied Fedor Bezrukov patch (setting User-Agent in URLDownload to solve ArXiv problem).
+    - Applied Aaron Chen's patch for fixing bugs in IEEExplore fetcher.
+    - Applied Edward Valeev's patch for handling article numbers replacing pages in Refer/Endnote
+      import.
+    - Added toolbar button to entry editor for writing XMP-metadata.
+    - Added paste and drag & drop support to file list editor.
+    - Added "authorLast" and "editorLast" markers for using last author's last name in BibTeX keys.
+    - Added support for file field in Write XMP action.
+    - Numeric fields (year, volume, number, pmid, citeseercitationcount) are now sorted as numbers
+      when possible.
+    - Improvements to the Ovid import filter.
+    - Modified AuthorLastFirstAbbreviator and AuthorAbbreviator to accept names in both last-first
+      and first-first format, but always return in last-first format. These two formatters are
+      identical.
+    - [ 1648789 ] Fixed: Problem on writing XMP when option to leave out some fields was active.
+    - [ 1561990 ] Fixed: Exporting to WinEdt - apostrophe.
+    - Fixed bug in entry editor: source panel edits were not properly stored when clicking a
+      different entry in the main table.
+    - Fixed problem with "Synchronize file links" not honouring database specific file directory.
+    - Fixed problem with file type selection in external file link editor not being up-to-date.
+    - Fixed problem with wrong enable/disable behaviour of Clear search button when switching
+      between tabs.
+    - Fixed argument parsing in AbstractParamLayoutFormatter so \t and \n can be used for
+      tabs and newlines.
+2.3b2
+	- Added % at start of signature text in BibTeX output. Parser now reads both
+	  old and new style.
+    - When user chooses to save to an existing file, and answers that the file should not be
+      overwritten, a new file dialog now appears instead of the operation cancelling.
+    - Removed antialias setting for main table, because it interferes with proper rendering
+      on LCDs when running under JRE 6. Removed non-optional antialias settings for entry
+      editor for the same reason.
+    - Changed external link handling so remote (http) links can be sent to the external
+      application. Applications like Evince and Gimp can open remote links.
+    - Replaced Simle HTML export filter with improved version by Mark Schenk.
+    - Introduced ParamLayoutFormatter interface for layout formatters that can take an
+      argument by the following syntax: \format[MyFormatter(argument)]{\field}
+      Implementing classes contain a setArgument(String) method that receives the argument
+      (if any) before the format() method is called.
+    - Timestamp and owner fields are now set also when appending a bib file, and new options
+      have been introduced to control whether imported/appended/pasted entries should have
+      these fields overwritten if already set.
+    - Added operations for adding file links in import inspection window, and made file
+      and URL icons in the table clickable.
+    - Removed PDF and PS columns and operations in import inspection window (replaced by
+      operations on the "file" field).
+    - File field column in main table now shows file type icon instead of generic icon.
+    - Modified Endnote export to take "file" field into account, and to resolve full
+      paths to PDF files.
+    - Added "Auto" button to automatically set "owner" field to the default username.
+    - Added \encoding tag for begin/end layouts in export filters to print the name of the
+      character encoding used for the export. The tag is not available in entry layouts.
+    - Added \% as a supported LaTeX command, producing '%'.
+    - Fixed bug in HTMLChars: commands like {\aa} and {\o} were not processed properly, even
+      though defined in Globals.HTMLCHARS.
+    - Fixed bug that made it possible to accidentally close database without saving, when error
+      occurs during the save operation.
+2.3b
+	- Added MIS Quarterly export format.
+	- Added support for COPAC file format.
+	- Added RemoveTilde LayoutFormatter to deal with Bibtex non-breakable spaces.
+	- Added autocompletion feature for author/editors and other fields.
+	- Added feature to save all open databases.
+	- Added support for pushing citations to Vim when Vim server is enabled.
+	- Added missing option for specifying the path to LEd.exe.
+	- Added -s/--nosplash command line option for disabling the splash screen.
+	- Added new field marker [auth.etal] for key generation.
+	- Added support in XMP metadata handling for bibtex string resolution.
+	- When opening databases, already open files are now skipped.
+	- Option to use native instead of Swing file dialogs is now available on all OSes.
+	- Synchronize external links now searches entire database, not selected entries.
+	- Medline import now adds <Affiliation> information into the "institution" field.
+	- Improved handling of external links. The 'file' field can now specify a list
+	  of external links, and arbitrary file types are supported. Old-style PDF and
+	  PS links can be moved automatically into the 'file' field.
+	- Fixed minor bug in importing preferences. General fields for entry editors are
+	  now updated without restarting JabRef.
+	- Fixed bug in RIS and Refer/Endnote imports. Entries with editors but no authors
+	  are now imported properly.
+	- Fixed missing export formatter AuthorFirstFirstCommas.
+	- Fixed minor bug in Harvard export with missing space between year and title.
+	- Fixed bug that caused lockup when connection to IEEExplore fails.
+	- Fixed wrong dependency in OAI2/ArXiv Fetcher.
+	- Fixed problem with foreign characters in OAI2/ArXiv Fetcher.
+	- Fixed problem with key generation in OAI2/ArXiv Fetcher.
+	- Fixed bug in duplicate search that made misc entries never get
+	  detected as duplicates.
+	- Fixed bug in XMP reimport from DublinCore related to month strings.
+2.2  	- Added progress bar to indicate progress when synchronizing PS/PDF links.
+        - Option to autogenerate key for imported entries now also affects entries imported
+          without using the import inspection window.
+        - Modified quick jump behaviour so sequences of letters can be found. Timeout or
+          ESC resets the search.
+        - Width of side pane is now remembered.
+        - Improved XMP support:
+          - JabRef now reads and write DublinCore and Legacy Document Properties
+            Caution needs to be used though since, JabRef does overwrite existing values.
+          - XMP privacy filter can be used to prevent sensitive fields to be exported.
+        - Support for OAI2 identifiers with subcategories, e.g. math.RA/0601001
+        - Fixed bug that made explicit groups appear empty after updating group tree from external
+          change.
+        - New windows installer thanks to Uwe St�hr.
+        - [ 1641247 ] Fixed: No update of preview after generating bibtex key
+        - [ 1631548 ] Fixed: Absolute paths should be stored for last open files.
+        - [ 1598777 ] Fixed: Month sorting
+        - [ 1570570 ] New Feature: Deselect all duplicates on import
+        - [ 1574773 ] Fixed: sanitizeUrl() breaks ftp:// and file:///
+        - [ 1609991 ] Fixed: Silverplatter Import: Publisher and Year confused
+        - [ 1608391 ] Fixed: Medline Search Editbox size gets to big
+2.2b2   - Redesigned export functions to simplify GUI and provide "Export selected
+          entries" functionality. Export filter is now chosen using the file type
+          dropdown menu in the file dialog.
+        - Fixed bug that caused UnsupportedEncodingException on Windows when saving.
+        - Added warning dialog when exporting failed.
+        - Added fix for exporting special chars in RTF like ���...
+        - Added NameFormat LayoutFormatter based on Bibtex method name.format$
+        - Added Fetch from ArXiv.org to Web Search
+          [ 1587342 ] Quering ArXiv (and any OAI2 Repository)
+        - [ 1594123 ] Fixed: Failure to import big numbers in Bibtex
+        - [ 1594169 ] Fixed: Entry editor navigation between panels faulty
+        - [ 1588028 ] Fixed: Export HTML table has relative DOI URL
+        - [ 1601651 ] Fixed: PDF subdirectory - missing first character
+2.2b    - Added Mark Schenk's advanced HTML export filter.
+        - Added options to copy/move/link to dragged linkable file (pdf, ps, etc.).
+        - Removed unnecessary output text when scanning for external file changes.
+        - Changed layout of entry editor to solve problem with collapsing text fields.
+        - Added first version of support for XMP-metadata in PDFs.
+          - "Import into..."
+          - Integrate with copy/move/link.
+          - Added option to write all/selected PDFs in database
+        - Added tooltips to database tabs showing the file's full path.
+        - Added function for setting or clearing specific fields in selected or
+          all entries.
+        - Setting a relative PDF/PS path in Database Properties now makes JabRef
+          look for the directory relative to the bib file's location.
+        - Removed Oxford comma from AuthorList...Comma-LayoutFormatters.
+        - Added LayoutFormatters that print the Oxford comma.
+        - Added missing space between abbreviated author first names:
+          William Andrew Paul => W. A. Paul (used to be W.A. Paul)
+        - Added LayoutFormatter for HTML paragraphs.
+        - Changing Database Properties now causes the database to be marked as changed.
+        - Improved simple search. Words are now treated as separate search terms,
+          and phrases can be indicated with "double quotes".
+        - When a letter key is pressed in the table, the first entry starting with the
+          same letter (in the current sort column) is selected.
+        - Bib files dragged into JabRef now appear in the Recent files menu.
+        - Fixed bug in import dialog.
+        - Better support for ISI files in general (should basically be better than INSPEC) including IEEE parsing.
+        - Added regular expression search for auto-linking. Search is now more flexible by default.
+        - Search operation also now search relative to the JabRef directory.
+        - General improvements in Inspec ISI handling.
+        - New LayoutFormatter: AuthorOrgSci - first author is in "last, first"
+          all others in "first last". First names are abbreviated.
+        - New LayoutFormatter: NoSpaceBetweenAbbreviations - spaces between multiple
+          abbreviated first names are removed.
+        - Improved PDF link resolver to produce proper URIs.                                                 s
+        - [ 1503956 ] Fixed: Help text instead of Help icon.
+        - [ 1542552 ] Fixed: Wrong author import from ISI file.
+        - [ 1534537 ] Fixed: resize groups interface
+        - [ 1465610 ] Fixed: (Double-)Names containing hyphen (-) not handled correctly
+        - [ 1436014 ] Fixed: No comma added to separate keywords
+		- [ 1548875 ] Fixed: download pdf produces unsupported filename
+		- [ 1545601 ] Fixed: downloading pdf corrupts pdf field text
+        - [ 1285977 ] Fixed: Impossible to properly sort a numeric field
+	    - [ 1535044 ] Fixed: Month sorting
+        - [ 1540646 ] Fixed: Default sort order: bibtexkey
+        - [ 1553552 ] Fixed: Not properly detecting changes to flag as changed
+2.1     - Added capability to drag files and WWW links into JabRef. BibTeX files will be
+          opened normally, other files imported, and WWW links downloaded and imported.
+        - The -v command line option now makes the application only print version number
+          and quit immediately.
+        - Duplicates within a set of imported entries are now found and shown in the
+          import inspection window.
+        - Mac users can now choose between native and Swing file chooser under
+          Preferences -> Advanced.
+        - Fixed missing duplicate warning when importing without import inspection window.
+        - Fixed error in ISI import which allowed empty fields to be set, causing errors
+          when saving and reloading entries.
+        - Fixed missing time and owner stamps when importing entries (only in 2.1b/2.1b2).
+        - Fixed erroneous updates in entry editor if user switches to a different entry
+          while downloading PDF/PS file.
+        - Fixed bug (only in 2.1b2) in calling file open/save dialog on Mac OS X.
+        - Fixed bug that made duplicate resolver dialog pop under import inspection dialog.
+        - Fixed bug in windows-installer which prevented running JabRef from the
+          command-line with arguments.
+        - Added windows-installer-option to associate JabRef with .bib files.
+2.1b2   - Added option to toggle floating of marked entries to the top of the table.
+        - Added option to open, append and import multiple BibTeX files.
+        - Improved support for LaTeX special characters in HTML and RTF representations.
+        - Improved generation of subdatabase from AUX file. Crossreferenced entries are
+          now included automatically.
+        - Fixed bug that made entry selection get lost when an edit modifies the entry's
+          position in the main table.
+        - Fixed bug in BibTeXML export (entry type name missing in tag).
+        - Fixed name handling in (non-compliant) Endnote files giving all author names
+          on the same line.
+        - Fixed problem with keyword handling in Medline import.
+        - Fixed (harmless) NullPointerException when medline fetch is cancelled.
+        - Fixed bug in parser that made {"} illegal in fields quoted with ".
+2.1b    - Known issue: font sizes cannot be changed, but should follow OS settings on
+          Windows and Mac.
+        - Known issue: some HTML may be handled inappropriately when downloading from
+          IEEEXplore.
+        - Changed Paste function so timestamp and owner fields are updated.
+        - Added "Other" item to the "New entry ..." menu.
+        - Changed sorting order so marked entries are displayed at the top of the table.
+        - Added IEEEXplore search and download feature.
+        - Added option to store entries in their original order. Unsorted table view now
+          shows entries in their original order.
+        - Added option to autogenerate keys for entries with missing keys before each save.
+        - Improved handling of external URLs to prevent problems with special characters.
+        - Medline and Endnote imports no longer automatically add curly braces around capital
+          letters in title.
+        - Float search now scrolls table to the top.
+        - Fixed lockup problem in preview with uneven number of # characters in fields.
+        - Fixed problem with default content selector fields reappearing after removal.
+        - Fixed problem with unsupported character encodings being selectable and causing
+          unreported save errors.
+        - Fixed bug that blocked last line in table columns setup from being removed.
+        - Fixed missing export formats from command line.
+        - Fixed bug that made Review tab impossible to remove from entry editor.
+        - Fixed bug in Medline XML import that assigned wrong PMID for some entries.
+        - Fixed bug in custom export that collapsed sequences of two or more backslashes
+          into a single backslash in output.
+        - Fixed bug (misspelled formatter name) in Harvard RTF export.
+2.0.1:	- Fixed bug that made a hidden entry editor under some circumstances store a
+	      field value to the wrong entry.
+	    - Fixed synchronization bug that made the opening of a new database sometimes fail.
+	    - Fixed bug in setting external journal lists when no personal list is set.
+2.0:    - Changed sorting selection interface for main table for more intuitive
+          operation.
+        - Made import operation update "working directory".
+        - Removed hard-coded author/editor name rearrangement in OpenOffice and
+          OpenDocument exports.
+        - Fixed hangup when parsing RIS files from Nature.
+        - Fixed NullPointerException when generating database from AUX file on Mac OS X.
+        - Fixed bug in routine for adding braces around capital letters.
+        - Fixed bug in switching preview layouts.
+        - Fixed bug in link handling in entry preview.
+2.0b2:  - Changed field order in OpenDocument export to comply with bibliography requirement.
+        - Added support for inserting citations into Emacs using gnuserv/gnuclient.
+        - Added option to set a regular expression replace operation on generated bibtex keys.
+        - Added support for custom importers inside a jar file.
+        - Fixed bug in opening URLs containing '&' on Windows.
+2.0b:   - Added a system for registering custom import formats in the form of Java classes.
+        - Added export option for OpenDocument spreadsheet.
+        - Added new options for name formatting in main table.
+        - Added REPEC-NEP import filter.
+        - Added option for non-field parameters for export formatters. If the parameters does not start with the
+          backslash character, it will be passed unchanged to the formatter in place of any field value.
+        - Added export formatter CurrentDate, which returns the current date, and takes a format string as
+          parameter.
+        - Added customization of table colors, accessible from Tools -> Preferences -> Entry table.
+        - Added new Appearance tab to preferences dialog to gather appearance related options.
+        - Added toggling of abbreviated and full journal names. The list of journals is realized as
+           an external file, but editable from a Manage Journal Abbreviations panel. Secondary lists can also
+           be linked, but not edited. There is a download option to quickly get a list available on the internet,
+           and we will provide one or more lists for download from the SourceForge web server.
+        - Added functionality for new JabRef instances to detect a running instance, and send
+          command line parameters to the running instance for processing.
+        - Added handling of HTML links in preview panel.
+        - Added confirmation dialog when database is saved and the chosen encoding doesn't support all characters.
+          Gives options to save, cancel or try a different encoding.
+        - The encoding used when opening a database is now remembered, and used when database is stored.
+        - Added review field for research comments, paper reviews, etc.
+        - Added option to disable wrapping for certain fields. Wrapping of pdf, ps, doi and url is disabled by
+          default.
+        - Antialiasing option now affects entry editor text fields as well as table text.
+        - Changed to monospaced font in source editor field.
+        - Removed option to put double braces around BibTeX fields, but retained option to remove double braces
+          when loading. Added option to put braces around capital letters of a chosen set of fields.
+        - Improved Ovid import.
+        - Fixed problem with ordering of BibTeX strings that are referred to by other strings.
+        - Fixed problem with loading 16-bit encoded bib files with 8-bit encoding as default, and vice versa.
+        - Fixed multiplying authors bug when author/editor field appears both in Required and Optional tabs.
+        - Fixed startup freeze when trying to load certain malformed bib files.
+        - Fixed bug related to multi-line fields in RIS import.
+        - Fixed bug related to looking up a fully qualified DOI
+        - Included review field to preview panel 1, which shows the abstract
+        - Fixed bug where booktitle field was not displayed in preview
+          for conference proceedings, similar to journal field
+        - By default preserve capitalization on the following fields: title;journal;booktitle;review;abstract
+1.8.1:  - Added automatic timestamp with configurable format for entries.
+        - Added new key generator modifier ":abbr" to abbreviate field contents.
+        - Added Help button in Preferences -> Entry preview
+        - Added Big5, Big5_HKSCS and GBK encodings for Chinese.
+        - Improved marking feature. Username is now used for marking, so different users can mark
+          entries separately without interference.
+        - Improved handling of names such as "Firstname de la Lastname jr.", with different handling
+          for presentation and sorting purposes. Key generation now should always use the genuine last
+          name, and not produce keys like "de2001".
+        - Removed duplicate warning from inspection dialog for non-selected entries.
+        - Fixed setting of sheet name in OpenOffice.org Calc export.
+        - Fixed bug that prevented PDF/PS opening by F4 from automatically finding files in
+          subdirectories below the main PDF/PS dir.
+        - Fixed BibTeX parser bug that made it choke on short comment strings.
+        - Fixed bug that made regexp search fail for fields containing newline characters.
+        - Fixed platform-dependent handling of newline characters.
+        - Fixed bug that prevented command line import with explicit format.
+        - Fixed bug that made it impossible to disable table antialiasing.
+        - Fixed AuthorAndsCommaReplacer.
+1.8:    - Search panel now starts visible if it was visible at last shutdown.
+        - Added option to disable import inspection window when only one entry is being imported.
+        - Fixed parser bug that caused problems for bib files containing extra characters after the
+          last entry.
+        - Fixed missing month in JStor import.
+	    - Fixed some bugs in "new from plain-text" wizard
+1.8b2:  - Changed handling of external updates so the notification is suppressed when there are
+          no actual changes.
+        - Changed autodetecting import so BibTeX files are handled more similarly to other formats.
+        - Enabled sorting by icon columns.
+        - Added option to remove BibTeX source panel from entry editor.
+        - Added command line option to not load any files at startup. Will override any autoloading
+          or other command line options that normally load or import files.
+        - Added handling of duplicates to import inspection window.
+        - Made entry preview be updated whenever the selection is expanded by one row, to make
+          it more useful while selecting a set of entries.
+        - Changed BibTeX field parsing to avoid inserting line breaks at wrong places.
+        - Improved handling of page numbers in Medline import.
+        - Fixed import of file links when importing SixPack files.
+        - Fixed bug that prevented closing of search interface when no databases are open.
+        - Fixed OpenOffice Calc export to be compatible with OpenOffice.org 2.0 beta.
+        - Fixed bugs in Refer/Endnote import filter.
+        - Fixed bug that caused changes to be lost in some cases when the same field is present
+          in multiple entry editor tabs.
+        - Fixed bug that prevented command line autodetecting import from working with BibTeX files.
+        - Fixed minor bug in routine for removing double braces.
+1.8b:   - Added option to store bib file with double braces.
+        - Follow @input tags in aux files to indicate nested aux files for
+          generating subdatabases.
+        - Improved wrapping and formatting of bib files, to preserve paragraph separator (empty line).
+        - Added test buttons for customization of preview layouts.
+        - Added inspection dialog for previewing and generating keys for imported entries,
+          and deciding which ones to keep and discard. The dialog allows inspection during long import
+          processes such as Medline search.
+        - Restructured layout to use a common side pane with all tabs.
+        - Added import filter for Cambridge Scientific Abstracts (CSA) format.
+        - Added PS directory with similar options as PDF.
+	    - Added [authshort] and [edtrshort] key field markers. Patch submitted by
+	      Kolja Brix.
+        - Made the program remember preview enable setting.
+        - Improved handling of illegal regular expressions in search.
+        - Removed options to search only Required, Optional and/or General fields,
+          in order to simplify search interface.
+        - Changed keys for Next and Previous tab to CTRL-PGDN and CTRL-PGUP to match shortcuts in a
+          certain popular web browser.
+        - Minor change to Preferences -> Table columns to enable insertion of column in position 2.
+        - Fixed parser bug that caused problems for files with >10000 entries.
+        - Fixed bug in entry editor that caused the source edit panel to remove marking from entries.
+        - Fixed export bug that made "\begin" tags fail if encountered immediately after an "\end" tag.
+        - Fixed export bug that made whitespace disappear after empty field values.
+        - Fixed ISI import bug that handled SO fields with line breaks wrong.
+        - Fixed bug occuring when choosing not to import duplicate imported entry.
+        - Fixed problem with detecting popup trigger on Mac OSX with one button mouse.
+        - Fixed erroneous relative paths for PDF files when PDF directory is not set.
+        - Fixed entry preview to resolve string references.
+1.7.1   - Removed unnecessary stack traces when opening external viewer.
+        - Fixed bug that made Ctrl-E destroy current edit in entry editor.
+        - Fixed problem when copying modified BibTeX key gave old value.
+        - Fixed missing 'booktitle' import in CONF entries in RIS import.
+        - Fixed bug that made group tree disappear for certain keyword expressions.
+        - Fixed bug that made standard BibTeX fields be saved without line wrapping.
+1.7     - When fetching from Medline or CiteSeer, fetched entry is now opened in editor.
+        - Added French translations of help files.
+        - Added color highlighting of focused text field in entry editor.
+        - Added option in context menu of entry editor for changing capitalization
+              of field contents.
+            - Added name conversion "Smith, RA" -> "Smith, R. A." to Medline import.
+            - Fixed bug that left some search settings items disabled when they shouldn't be.
+        - Fixed bug that caused requirement for restart to register change in default
+          key pattern.
+        - Fixed bug that caused crash some times after adding/removing field content selectors.
+        - Fixed bug in recognizing custom entry types when reading bib files.
+        - Fixed bug that allowed a deleted entry to stay visible in the entry editor.
+1.7b2:  - Made side pane resizable.
+        - Replaced entry customization dialog with improved interface.
+        - Added standard entry type "conference", similar to "inproceedings".
+        - Added default key pattern to avoid the need to set similar patterns manually.
+        - Added line wrapping to metadata in saved .bib file to avoid long lines.
+        - Added "bibtexkey" as implicit fourth sort criterion, to minimize problem with almost
+          similar entries swapping places.
+        - Added OpenOffice.org Calc export filter that exports spreadsheet compatible with the
+          OpenOffice.org bibliography feature.
+        - Added a couple of previously unsupported publication types in SciFinder.
+        - Added extra shortcuts CTRL-+ and CTRL-- for switching tabs in entry editor, since
+          original shortcuts CTRL[-SHIFT]-TAB is used by some window managers.
+        - Updated Endnote export filter.
+        - Fixed focus and key binding problems for switching tabs/entries in entry editor
+        - Fixed bug that prevented required fields tab from appearing for entries with only bibtex key
+          as required field.
+        - Fixed bug that prevented the user from changing the default encoding.
+        - Fixed bugs in RIS import.
+        - Fixed bug 1112050; freeze when reading certain author fields with mismatched braces.
+1.7b:	- Changed routine for rearranging author names (Lastname, Firstname) so bracketed
+            expressions are treated as units.
+        - Grouping controls now allow group hierarchies, and now allow explicit and search
+          expression groups as well as keyword groups.
+        - Added full customization of general fields tabs
+        - Added option to preserve formatting for non-BibTeX fields.
+        - Added integrity check for database.
+        - Added export filters EndNote and Harvard RTF.
+        - Added automatic import format chooser for import (same as wildcard import below).
+        - Added wildcard (*) option for command-line import, to try to automatically
+          determine the correct format.
+        - Improved layout of Preferences dialog.
+        - Improved several import filters.
+        - Added authIniN/edtrIniN key formatters.
+        - Marked entries now float to the top when no searching or grouping reordering is active.
+        - Fixed problem with opening file dialog on Win NT - AWT dialog is now opened if
+          Swing dialog fails.
+1.6:    - Improved handling of entry selection in various ways. E.g. selected entry is now scrolled
+          into view when opening entry editor and entry is kept selected when importing CiteSeer
+          fields.
+        - Fixed update bug between autogenerated bibtex key and source panel.
+        - Fixed missing . at the end of last author name in RIS import.
+        - Fixed NullPointerException on certain special characters when exporting to BibTeXML.
+        - Fixed bug that sometimes prevented the unmarking of entries.
+        - Fixed problem with formatting one-name authors.
+1.6b:	- Added mnemonic keys to menus and menu items.
+        - Added MODS and tab-separated file export
+        - Added facility for detecting and handling external changes to open bib files.
+        - Added scan option for exact duplicates with automatic removal.
+        - Bibtex strings are now sorted automatically.
+        - Bibtex strings are now resolved when exporting database.
+        - Fixed problem with field content selector getting too wide. Limited width.
+        - Fixed PDF/PS view routine to remove problems with filenames
+          containing spaces.
+        - Fixed bug that interfered with Fetch Medline by ID, and fixed
+          parsing problem with certain Medline entries.
+        - Fixed bug that interfered with Push to WinEdt.
+        - Fixed HTML output so \c{c} is handled correctly.
+        - command line option for generating a sub-database from LaTex aux file
+          entries
+        - simple copy/paste menu in entry editor
+        - experimental: text-input-area with underlying infotext in plaintext import dialog
+1.55:	- Made method for opening PDF files robust with regard to file separators (/ and \),
+          so bib files can easier be used across platforms.
+        - Improved Medline fetcher. Can now fetch entries based on a search expression.
+        - Added features for fetching fields and referring publications from the CiteSeer
+          database.
+        - Added option to always save database ordered by author/editor/year, and made this
+          the default setting.
+        - When a single entry is selected, right-click menu now shows a checkbox menu for group
+          memberships instead of the regular "Add to" and "Remove from" menus.
+        - Improved [shorttitle] and [veryshorttitle] special key pattern fields.
+        - Added dialog box for conveniently setting the fields of an entry from a
+          plain text description.
+        - Added formatter "ResolvePDF" to create correct PDF/PS links in HTML export when
+          relative file names are used.
+        - Added Abstract panel in entry editor.
+        - Added alternate preview with abstract, and made both previews configurable.
+        - Added the option to create a subset of a database based on an .aux file.
+        - Added 'Cancel' button to duplicate resolver dialog, so the process can be stopped.
+        - Added check for spaces in custom entry type names.
+        - Added several new key pattern markers.
+        - Added toolbar buttons for Mark/Unmark to improve discoverability.
+        - Fixed bug that made export filters ignore the chosen character encoding.
+        - Fixed bug that interfered with author name formatting.
+        - Fixed various bugs in import filters.
+        - Fixed bug that prevented confirmation dialog when deleting entry from the entry editor.
+        - Fixed bug that made the next entry be opened instead of the current, when pressing
+          Enter in table.
+        - Fixed bug that made it possible to leave a source edit when the source didn't validate
+          properly. Also made it impossible to change table selection until source validates.
+1.5:	- Enabled selection of default encoding, and started storing encoding information in
+          saved .bib files, which is used when reopening.
+        - Added Highlight and select options to the group interface, and made it possible
+            to change the number of visible lines in the list.
+              - Added option to allow or disallow direct table editing.
+        - Added optional confirmation dialog for deleting entries.
+              - Added optional warning dialog for duplicate BibTeX keys.
+        - Added warnings to bibtex parser, and prevented failure to load files with
+          duplicate string definitions.
+              - Added JStor import filter.
+        - Changed the look and feel to JGoodies Forms on non-Macintosh platforms.
+        - Optimized performance in several areas.
+        - Numerous usability improvements.
+        - Fixed RIS import bug caused by short lines.
+              - Fixed bug in SciFinder import.
+              - Fixed bug that made entire field get cleared when removing from group.
+1.4:	- Added advanced search feature.
+        - Added facility for using custom export formats.
+        - Added command line options for importing/exporting files, importing/exporting
+          user preferences, loading session and for suppressing the GUI (using RitOpt for
+          parsing options).
+        - Added automatic stripping of \url{} when opening url.
+        - Improved export filters.
+        - Fixed focus bug which sometimes interfered with cut/copy/paste.
+1.3.1:	- Bugfix.
+1.3:	- Added entry preview.
+        - Added detection of duplicate entries.
+              - Added possibility to mark entries persistently.
+        - Added import filter for Sixpack and Biblioscape Tag files.
+              - Added option to use a standard directory for PDFs. PDFs placed in or below this directory
+          and named after an entry's BibTeX key can be automatically found.
+            - Added optional columns showing clickable icons for pdf/ps and url/doi links.
+        - Added menu and toolbar actions for open pdf/ps and url/doi.
+        - Added web lookup of DOI.
+        - Added several new special field markers to the key autogenerator.
+              - Added BibTeXML and simple HTML export.
+              - Changed browsing of entries. Entry editor now shows the selected entry.
+              - Improved HTML export for several entry types.
+              - Improved compatibility with Mac OS X.
+        - Made it possible to set custom secondary and tertiary sort fields.
+        - Made the entry number column width customizable.
+              - Fixed bug that caused database to always be marked as changed after viewing source.
+               - Fixed bug in selector word removal.
+               - Fixed	bug that made the file chooser unable to interpret Mac OS X aliases.
+1.2:	- Replaced the icon set.
+        - Added support for French language.
+        - Added customization of key generation.
+        - Improved HTML export.
+        - Added Replace string feature.
+            - Made a couple of adaptations for Mac OS X users.
+        - Added option in Table Preferences to set current column widths as default.
+            - Added import filter for BibTeXML.
+        - Fixed bug that allowed non-lowercase grouping field, leading to problems.
+        - Fixed bug that made selector words added in the dialog to be lowercased.
+        - Fixed bug relating to translated help files.
+1.19:	- Entry editor is now opened for an entry that causes an error when saving.
+        - Added options to display names in harmonised format in the main table.
+        - Added Docbook and (experimental) HTML export.
+        - Enabled 'doi' and 'pii' fields for Medline import.
+        - Enabled antialiasing fonts.
+        - Added the Kunststoff look&feel to give a more pleasant user interface.
+        - Added font selector for the main table.
+        - Improved table column customization.
+        - Added word selector feature for selected fields (keywords, journal).
+        - Added support for German and Norwegian language.
+        - Generalized copy cite key features for multiple entries.
+        - Added quick load/save session feature.
+        - Fixed issue/number bug in ISI import.
+        - Added "Open pdf/ps" item in right-click menu.
+        - Fixed bug causing external viewer to only work in General fields.
+        - Added functionality for using Browse buttons for file-related fields
+          (ps, pdf, etc.).
+        - Added Browse buttons to External programs tab in Preferences.
+        - Fixed bug related to Save database and Source field which caused changes
+          to disappear.
+1.1:	- Added bibtex key uniqueness checking, and prevented autogeneration
+          from generating non-unique keys.
+        - Added command line option to load file on startup.
+        - Fixed problem with autogeneration creating invalid keys.
+        - Improved Refer/Endnote import.
+        - Added feature for importing entries and/or strings and/or group
+          definitions from another BibTeX database.
+        - Added menu choices to import into open database.
+              - Added toolbar button for closing current database.
+              - Fixed shortcut key for "Store field" in entry editor, and fixed
+                problem that made shortcut for "Save database" unavailable from
+          entry editor.
+        - Added option to fetch Medline entries automatically by
+          ID, based on a patch submitted by Mike Smoot.
+        - Fixed bug in RIS import.
+        - Added options to copy key and copy "\cite{key}" to right-click menu.
+        - Fixed bug that caused some General fields not to get displayed.
+        - Enabled customization of General fields.
+        - Enabled customization of existing entry types, and definition of
+          new types.
+1.0:	First release.
diff --git a/src/txt/INSTALL b/src/txt/INSTALL
index b784cb6..ec3265b 100644
--- a/src/txt/INSTALL
+++ b/src/txt/INSTALL
@@ -1,29 +1,29 @@
-Quick instructions, compiling JabRef from source
-------------------------------------------------
-
-To compile JabRef from source, you need:
-
-* A Java compiler, supporting Java 1.5 or higher.
-* Jakarta Ant (http://ant.apache.org).
-
-To compile, use the command "ant jars".
-After the build is finished, you can find the executable jar file
-named "JabRef-$VERSION.jar" (where $VERSION is the current version of the
-source tree) in the "build/lib" directory. Enjoy!
-
-You can also build and run JabRef directly with the command "ant run".
-
-On Mac OS X you should include the targets osx and osxjar,
-making the correct command "ant compile unjarlib osx jars osxjar".
-AFter the build is finished, you will find the OS X application
-"JabRef.app" in the "build/lib" directory along with the executable
-jar.
-
-If you have the required libraries (found as jar files in the "lib" directory
-in your classpath, you can edit the build.xml file to skip the "unjarlib"
-target, in order to avoid these libraries being bundled inside the JabRef jar.
-
-
-
-Morten Alver
-Revised October 9, 2007.
+Quick instructions, compiling JabRef from source
+------------------------------------------------
+
+To compile JabRef from source, you need:
+
+* A Java compiler, supporting Java 1.5 or higher.
+* Jakarta Ant (http://ant.apache.org).
+
+To compile, use the command "ant jars".
+After the build is finished, you can find the executable jar file
+named "JabRef-$VERSION.jar" (where $VERSION is the current version of the
+source tree) in the "build/lib" directory. Enjoy!
+
+You can also build and run JabRef directly with the command "ant run".
+
+On Mac OS X you should include the targets osx and osxjar,
+making the correct command "ant compile unjarlib osx jars osxjar".
+AFter the build is finished, you will find the OS X application
+"JabRef.app" in the "build/lib" directory along with the executable
+jar.
+
+If you have the required libraries (found as jar files in the "lib" directory
+in your classpath, you can edit the build.xml file to skip the "unjarlib"
+target, in order to avoid these libraries being bundled inside the JabRef jar.
+
+
+
+Morten Alver
+Revised October 9, 2007.
diff --git a/src/txt/README b/src/txt/README
index 8deb405..c2a6d45 100644
--- a/src/txt/README
+++ b/src/txt/README
@@ -1,102 +1,102 @@
-
-JabRef 2.9
-----------
-
-Introduction:
-
-JabRef is a graphical Java application for editing bibtex (.bib)
-databases. JabRef lets you organize your entries into overlapping
-logical groups, and with a single click limit your view to a single
-group or an intersection or union of several groups. You can customize
-the entry information shown in the main window, and sort by any of the
-standard Bibtex fields. JabRef can autogenerate bibtex keys for your
-entries. JabRef also lets you easily link to PDF or web sources for your
-reference entries.
-
-JabRef can import from and export to several formats, and you can
-customize export filters. JabRef can be run as a command line application
-to convert from any import format to any export format.
-
-
-License:
-JabRef is free software: you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the Free Software
-Foundation, either version 2 of the License, or (at your option) any later
-version.  dialog, for details about the GPL. See the enclosed text files
-'gpl2.txt' and 'gpl3.txt' for the full details.
-
-JabRef also uses libraries distributed by other parties; see the About
-box for details.
-
-
-Requirements:
-JabRef runs on any system equipped with the Java Virtual Machine
-(1.5 or newer), which can be downloaded at no cost from
-http://java.sun.com. If you do not plan to compile JabRef, the Java
-Runtime Environment may be a better choice than the Java Development
-Kit.
-
-
-Installing and running, Windows:
-JabRef is available in Windows Installer (.msi) format. To install,
-double-click the .msi file. A shortcut to JabRef will be added to your
-start menu.
-
-The Windows installation was made by Dale Visser, using the following open-source tools:
-JSmooth (.exe wrapper for Java apps), available at http://jsmooth.sf.net/
-Wix (tool for compiling MSI files from an XML specification), available at http://wix.sf.net/
-
-
-Installing and running, general:
-JabRef can be downloaded as an executable .jar file. Run the
-program as follows:
-If you are using the Java Development Kit:
-     java -jar <path to jar>
-or, if you are using the Java Runtime Environment:
-     jre -new -jar <path to jar> or
-     jrew -new -jar <path to jar>
-
-If you run JabRef under Java 1.5, you can add the option "-Dswing.aatext=true" before the
-"-jar" option, to activate antialiased text throughout the application.
-
-
-The jar file containing JabRef can be unpacked with the command:
-    jar xf <path to jar>
-or  jar xf <path to jar> <list of files to extract>
-Unpacking the jar file is not necessary to run the program.
-
-
-
-Building JabRef from source:
-Please see the INSTALL file for instructions for building from source.
-
-Documentation:
-JabRef comes with an online help function, accessed by pressing F1 or
-clicking on a question mark icon. The help files are probably not
-exhaustive enough to satisfy everyone yet, but they should help sort
-out the most important issues about using the program. The help files
-can also be viewed outside the program with a standard HTML browser.
-If you choose languages other than English, some or all help pages may
-appear in your chosen languages.
-
-
-Bug reports, suggestions, other feedback:
-We are thankful for any bug reports or other feedback. If there are
-features you want included in JabRef, tell us!
-
-
-JabRef homepage:
-http://jabref.sourceforge.net
-
-You can always get the very latest version of the program from our SVN
-repository; instructions for downloading are found on the
-homepage. Note that the SVN version may contain untested features, or
-have other stability issues.
-
-Bug submission and Open Discussions and Help forums are found at:
-http://sourceforge.net/projects/jabref
-
-
-Corresponding authors:
-mortenalver _ users.sourceforge.net
-nbatada _ users.sourceforge.net
+
+JabRef 2.9
+----------
+
+Introduction:
+
+JabRef is a graphical Java application for editing bibtex (.bib)
+databases. JabRef lets you organize your entries into overlapping
+logical groups, and with a single click limit your view to a single
+group or an intersection or union of several groups. You can customize
+the entry information shown in the main window, and sort by any of the
+standard Bibtex fields. JabRef can autogenerate bibtex keys for your
+entries. JabRef also lets you easily link to PDF or web sources for your
+reference entries.
+
+JabRef can import from and export to several formats, and you can
+customize export filters. JabRef can be run as a command line application
+to convert from any import format to any export format.
+
+
+License:
+JabRef is free software: you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation, either version 2 of the License, or (at your option) any later
+version.  dialog, for details about the GPL. See the enclosed text files
+'gpl2.txt' and 'gpl3.txt' for the full details.
+
+JabRef also uses libraries distributed by other parties; see the About
+box for details.
+
+
+Requirements:
+JabRef runs on any system equipped with the Java Virtual Machine
+(1.5 or newer), which can be downloaded at no cost from
+http://java.sun.com. If you do not plan to compile JabRef, the Java
+Runtime Environment may be a better choice than the Java Development
+Kit.
+
+
+Installing and running, Windows:
+JabRef is available in Windows Installer (.msi) format. To install,
+double-click the .msi file. A shortcut to JabRef will be added to your
+start menu.
+
+The Windows installation was made by Dale Visser, using the following open-source tools:
+JSmooth (.exe wrapper for Java apps), available at http://jsmooth.sf.net/
+Wix (tool for compiling MSI files from an XML specification), available at http://wix.sf.net/
+
+
+Installing and running, general:
+JabRef can be downloaded as an executable .jar file. Run the
+program as follows:
+If you are using the Java Development Kit:
+     java -jar <path to jar>
+or, if you are using the Java Runtime Environment:
+     jre -new -jar <path to jar> or
+     jrew -new -jar <path to jar>
+
+If you run JabRef under Java 1.5, you can add the option "-Dswing.aatext=true" before the
+"-jar" option, to activate antialiased text throughout the application.
+
+
+The jar file containing JabRef can be unpacked with the command:
+    jar xf <path to jar>
+or  jar xf <path to jar> <list of files to extract>
+Unpacking the jar file is not necessary to run the program.
+
+
+
+Building JabRef from source:
+Please see the INSTALL file for instructions for building from source.
+
+Documentation:
+JabRef comes with an online help function, accessed by pressing F1 or
+clicking on a question mark icon. The help files are probably not
+exhaustive enough to satisfy everyone yet, but they should help sort
+out the most important issues about using the program. The help files
+can also be viewed outside the program with a standard HTML browser.
+If you choose languages other than English, some or all help pages may
+appear in your chosen languages.
+
+
+Bug reports, suggestions, other feedback:
+We are thankful for any bug reports or other feedback. If there are
+features you want included in JabRef, tell us!
+
+
+JabRef homepage:
+http://jabref.sourceforge.net
+
+You can always get the very latest version of the program from our SVN
+repository; instructions for downloading are found on the
+homepage. Note that the SVN version may contain untested features, or
+have other stability issues.
+
+Bug submission and Open Discussions and Help forums are found at:
+http://sourceforge.net/projects/jabref
+
+
+Corresponding authors:
+mortenalver _ users.sourceforge.net
+nbatada _ users.sourceforge.net
diff --git a/src/txt/TODO b/src/txt/TODO
index 5cec3d4..38a81c0 100644
--- a/src/txt/TODO
+++ b/src/txt/TODO
@@ -1,28 +1,28 @@
-
-Chris:
-------
-  * Think about synchronizing XMP.
-  * Document data schema used (BibteXmp)
-  * Add build.xml target to export standalone XMPUtil for the CLI.
-  * Allow search relativ to bibtex-file
-  * Plugin-System may crash...
-  
-Morten:
-
-* Encoding used for reading URLs. URLDownload.java
-
-* Look into whether incremental search could be made more persistent when search panel loses focus.
-* Problem: when looking at group with hiding non-hits, newly created entry doesn't appear in entry editor.
-
-* Plugins like SVN plugin might need hooks for performing actions before a database is
-  closed, and may need the ability to cancel the closing, and to avoid questions about
-  saving changes.
-
-* Enable "Open spires entry" ("openSpires" action)? Think about better integration of this?
-  Look into which viewer is used.
-* Add "Copy all externally linked files for this set of entries"-feature.
-  Basic functionality in AccessLinksForEntries.
-* Problem setting today with Microba calendar.
-
-* [POSTPONE] Icon selection for external file types: - select arbitrary images from disk?
-
+
+Chris:
+------
+  * Think about synchronizing XMP.
+  * Document data schema used (BibteXmp)
+  * Add build.xml target to export standalone XMPUtil for the CLI.
+  * Allow search relativ to bibtex-file
+  * Plugin-System may crash...
+  
+Morten:
+
+* Encoding used for reading URLs. URLDownload.java
+
+* Look into whether incremental search could be made more persistent when search panel loses focus.
+* Problem: when looking at group with hiding non-hits, newly created entry doesn't appear in entry editor.
+
+* Plugins like SVN plugin might need hooks for performing actions before a database is
+  closed, and may need the ability to cancel the closing, and to avoid questions about
+  saving changes.
+
+* Enable "Open spires entry" ("openSpires" action)? Think about better integration of this?
+  Look into which viewer is used.
+* Add "Copy all externally linked files for this set of entries"-feature.
+  Basic functionality in AccessLinksForEntries.
+* Problem setting today with Microba calendar.
+
+* [POSTPONE] Icon selection for external file types: - select arbitrary images from disk?
+
diff --git a/src/txt/gpl2.txt b/src/txt/gpl2.txt
index d159169..89e08fb 100644
--- a/src/txt/gpl2.txt
+++ b/src/txt/gpl2.txt
@@ -1,339 +1,339 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                            NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/src/txt/gpl3.txt b/src/txt/gpl3.txt
index 20d40b6..3d90694 100644
--- a/src/txt/gpl3.txt
+++ b/src/txt/gpl3.txt
@@ -1,674 +1,674 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If 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 convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If 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 convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
 <http://www.gnu.org/philosophy/why-not-lgpl.html>.
\ No newline at end of file
diff --git a/src/txt/lesser.txt b/src/txt/lesser.txt
index 4362b49..3394995 100644
--- a/src/txt/lesser.txt
+++ b/src/txt/lesser.txt
@@ -1,502 +1,502 @@
-                  GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-

-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-

-                  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-

-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-

-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-

-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-

-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-

-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-

-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                            NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-

-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+

+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+

+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+

+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+

+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+

+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+

+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+

+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+

+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+

+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/src/windows/nsis/README.txt b/src/windows/nsis/README.txt
index 7e4bfa4..f48ad67 100644
--- a/src/windows/nsis/README.txt
+++ b/src/windows/nsis/README.txt
@@ -1,43 +1,44 @@
-
-JabRef Installer Documentation
-------------------------------
-
-How to build the installer:
-
-  * Create a build.properties file in root-directory and set the
-    nsis.executable variable to point to makensis.exe
-  * Run the win.installer.build target from the ant-file in root-directory.
-
-What is here?
-
-  * dist
-    * Should contain everything that is supposed to be shipped to the user.
-  * launcher.nsi - Will create the exe-wrapper.
-  * setup.nsi - Will create the installer.
-  * fileassoc.nsh - Helper script to set file-associations
-
-Requirements + Current Status
-
-	Exe-Wrapper:
-	  * Pass arguments to JabRef [done]
-	  * JabRef-Ico 16x16, 32x32, 48x48 [done]
-	
-	Installer:
-	  * Display GPL [done]
-	  * Add file association for .bib (if desired) [done]
-	  * Install into custom start-menu location (if desired) [done]
-	  * Can only run as administrator [done, Uwe]
-	  * Install onto desktop (if desired)
-	  * Install onto quicklaunch (if desired)
-	
-	Uninstaller:
-	  * Uninstaller
-	    * Allow to keep configuration
-	    
-	All:
-	  * Localization
-	  
-Credits
-
-	Uwe St�hr rewrote the installer and fixed a lot of issues with the old one.
+
+JabRef Installer Documentation
+------------------------------
+
+How to build the installer:
+
+  * Create a user.properties file in root-directory
+    * Set the nsis.executable variable to point to makensis.exe
+    * Set the launch4.jar variable to point to launch4j.jar
+  * Run the win.installer.build target from the ant-file in root-directory.
+
+What is here?
+
+  * dist
+    * Should contain everything that is supposed to be shipped to the user.
+  * jabref-launch4j.xml - used by launch4j to create the exe-wrapper.
+  * fileassoc.nsh - Helper script to set file-associations. Source: http://nsis.sourceforge.net/FileAssoc
+  * setup.nsi - Will create the installer.
+
+Requirements + Current Status
+
+	Exe-Wrapper:
+	  * Pass arguments to JabRef [done]
+	  * JabRef-Ico 16x16, 32x32, 48x48 [done]
+	
+	Installer:
+	  * Display GPL [done]
+	  * Add file association for .bib (if desired) [done]
+	  * Install into custom start-menu location (if desired) [done]
+	  * Can only run as administrator [done, Uwe]
+	  * Install onto desktop (if desired)
+	  * Install onto quicklaunch (if desired)
+	
+	Uninstaller:
+	  * Uninstaller
+	    * Allow to keep configuration
+	    
+	All:
+	  * Localization
+	  
+Credits
+
+	Uwe St�hr rewrote the installer and fixed a lot of issues with the old one.
 		  
\ No newline at end of file
diff --git a/src/windows/nsis/fileassoc.nsh b/src/windows/nsis/fileassoc.nsh
new file mode 100644
index 0000000..6942437
--- /dev/null
+++ b/src/windows/nsis/fileassoc.nsh
@@ -0,0 +1,119 @@
+; fileassoc.nsh
+; File association helper macros
+; Written by Saivert
+;
+; Features automatic backup system and UPDATEFILEASSOC macro for
+; shell change notification.
+;
+; |> How to use <|
+; To associate a file with an application so you can double-click it in explorer, use
+; the APP_ASSOCIATE macro like this:
+;
+;   Example:
+;   !insertmacro APP_ASSOCIATE "txt" "myapp.textfile" "$INSTDIR\myapp.exe,0" \
+;     "Open with myapp" "$INSTDIR\myapp.exe $\"%1$\""
+;
+; Never insert the APP_ASSOCIATE macro multiple times, it is only ment
+; to associate an application with a single file and using the
+; the "open" verb as default. To add more verbs (actions) to a file
+; use the APP_ASSOCIATE_ADDVERB macro.
+;
+;   Example:
+;   !insertmacro APP_ASSOCIATE_ADDVERB "myapp.textfile" "edit" "Edit with myapp" \
+;     "$INSTDIR\myapp.exe /edit $\"%1$\""
+;
+; To have access to more options when registering the file association use the
+; APP_ASSOCIATE_EX macro. Here you can specify the verb and what verb is to be the
+; standard action (default verb).
+;
+; And finally: To remove the association from the registry use the APP_UNASSOCIATE
+; macro. Here is another example just to wrap it up:
+;   !insertmacro APP_UNASSOCIATE "txt" "myapp.textfile"
+;
+; |> Note <|
+; When defining your file class string always use the short form of your application title
+; then a period (dot) and the type of file. This keeps the file class sort of unique.
+;   Examples:
+;   Winamp.Playlist
+;   NSIS.Script
+;   Photoshop.JPEGFile
+;
+; |> Tech info <|
+; The registry key layout for a file association is:
+; HKEY_CLASSES_ROOT
+;     <applicationID> = <"description">
+;         shell
+;             <verb> = <"menu-item text">
+;                 command = <"command string">
+;
+ 
+!macro APP_ASSOCIATE EXT FILECLASS DESCRIPTION ICON COMMANDTEXT COMMAND
+  ; Backup the previously associated file class
+  ReadRegStr $R0 HKCR ".${EXT}" ""
+  WriteRegStr HKCR ".${EXT}" "${FILECLASS}_backup" "$R0"
+ 
+  WriteRegStr HKCR ".${EXT}" "" "${FILECLASS}"
+ 
+  WriteRegStr HKCR "${FILECLASS}" "" `${DESCRIPTION}`
+  WriteRegStr HKCR "${FILECLASS}\DefaultIcon" "" `${ICON}`
+  WriteRegStr HKCR "${FILECLASS}\shell" "" "open"
+  WriteRegStr HKCR "${FILECLASS}\shell\open" "" `${COMMANDTEXT}`
+  WriteRegStr HKCR "${FILECLASS}\shell\open\command" "" `${COMMAND}`
+!macroend
+ 
+!macro APP_ASSOCIATE_EX EXT FILECLASS DESCRIPTION ICON VERB DEFAULTVERB SHELLNEW COMMANDTEXT COMMAND
+  ; Backup the previously associated file class
+  ReadRegStr $R0 HKCR ".${EXT}" ""
+  WriteRegStr HKCR ".${EXT}" "${FILECLASS}_backup" "$R0"
+ 
+  WriteRegStr HKCR ".${EXT}" "" "${FILECLASS}"
+  StrCmp "${SHELLNEW}" "0" +2
+  WriteRegStr HKCR ".${EXT}\ShellNew" "NullFile" ""
+ 
+  WriteRegStr HKCR "${FILECLASS}" "" `${DESCRIPTION}`
+  WriteRegStr HKCR "${FILECLASS}\DefaultIcon" "" `${ICON}`
+  WriteRegStr HKCR "${FILECLASS}\shell" "" `${DEFAULTVERB}`
+  WriteRegStr HKCR "${FILECLASS}\shell\${VERB}" "" `${COMMANDTEXT}`
+  WriteRegStr HKCR "${FILECLASS}\shell\${VERB}\command" "" `${COMMAND}`
+!macroend
+ 
+!macro APP_ASSOCIATE_ADDVERB FILECLASS VERB COMMANDTEXT COMMAND
+  WriteRegStr HKCR "${FILECLASS}\shell\${VERB}" "" `${COMMANDTEXT}`
+  WriteRegStr HKCR "${FILECLASS}\shell\${VERB}\command" "" `${COMMAND}`
+!macroend
+ 
+!macro APP_ASSOCIATE_REMOVEVERB FILECLASS VERB
+  DeleteRegKey HKCR `${FILECLASS}\shell\${VERB}`
+!macroend
+ 
+ 
+!macro APP_UNASSOCIATE EXT FILECLASS
+  ; Backup the previously associated file class
+  ReadRegStr $R0 HKCR ".${EXT}" `${FILECLASS}_backup`
+  WriteRegStr HKCR ".${EXT}" "" "$R0"
+ 
+  DeleteRegKey HKCR `${FILECLASS}`
+!macroend
+ 
+!macro APP_ASSOCIATE_GETFILECLASS OUTPUT EXT
+  ReadRegStr ${OUTPUT} HKCR ".${EXT}" ""
+!macroend
+ 
+ 
+; !defines for use with SHChangeNotify
+!ifdef SHCNE_ASSOCCHANGED
+!undef SHCNE_ASSOCCHANGED
+!endif
+!define SHCNE_ASSOCCHANGED 0x08000000
+!ifdef SHCNF_FLUSH
+!undef SHCNF_FLUSH
+!endif
+!define SHCNF_FLUSH        0x1000
+ 
+!macro UPDATEFILEASSOC
+; Using the system.dll plugin to call the SHChangeNotify Win32 API function so we
+; can update the shell.
+  System::Call "shell32::SHChangeNotify(i,i,i,i) (${SHCNE_ASSOCCHANGED}, ${SHCNF_FLUSH}, 0, 0)"
+!macroend
+ 
+;EOF
diff --git a/src/windows/nsis/installer_languages/english.nsh b/src/windows/nsis/installer_languages/english.nsh
index 6b5960b..7501474 100644
--- a/src/windows/nsis/installer_languages/english.nsh
+++ b/src/windows/nsis/installer_languages/english.nsh
@@ -1,33 +1,33 @@
-!ifndef _JabRef_LANGUAGES_ENGLISH_NSH_
-!define _JabRef_LANGUAGES_ENGLISH_NSH_
-
-!ifdef JabRef_LANG
-  !undef JabRef_LANG
-!endif
-!define JabRef_LANG ${LANG_ENGLISH}
-
-LicenseLangString JabRefLicenseData ${JabRef_LANG} "${PRODUCT_LICENSE_FILE}"
-
-LangString WelcomePageText "${JabRef_LANG}" "This wizard will guide you through the installation of JabRef.\r\n\
-					     \r\n\
-					     $_CLICK"
-
-LangString SecAssociateBibTitle "${JabRef_LANG}" "Associate BibTeX-files"
-LangString SecDesktopTitle "${JabRef_LANG}" "Desktop icon"
-
-LangString SecAssociateBibDescription "${JabRef_LANG}" "Files with the extension .bib will automatically be opened with JabRef."
-LangString SecDesktopDescription "${JabRef_LANG}" "Puts JabRef icon on the desktop."
-
-LangString StillInstalled "${JabRef_LANG}" "JabRef ${Version} is already installed!"
-
-LangString FinishPageMessage "${JabRef_LANG}" "Congratulations! JabRef has been installed successfully."
-LangString FinishPageRun "${JabRef_LANG}" "Launch JabRef"
-
-LangString UnNotAdminLabel "${JabRef_LANG}" "You must have administrator privileges to uninstall JabRef!"
-LangString UnReallyRemoveLabel "${JabRef_LANG}" "Are you sure you want to completely remove JabRef?"
-LangString UnRemoveSuccessLabel "${JabRef_LANG}" "JabRef was successfully removed from your computer."
-
-
-!undef JabRef_LANG
-
-!endif ; _JabRef_LANGUAGES_ENGLISH_NSH_
+!ifndef _JabRef_LANGUAGES_ENGLISH_NSH_
+!define _JabRef_LANGUAGES_ENGLISH_NSH_
+
+!ifdef JabRef_LANG
+  !undef JabRef_LANG
+!endif
+!define JabRef_LANG ${LANG_ENGLISH}
+
+LicenseLangString JabRefLicenseData ${JabRef_LANG} "${PRODUCT_LICENSE_FILE}"
+
+LangString WelcomePageText "${JabRef_LANG}" "This wizard will guide you through the installation of JabRef.\r\n\
+					     \r\n\
+					     $_CLICK"
+
+LangString SecAssociateBibTitle "${JabRef_LANG}" "Associate BibTeX-files"
+LangString SecDesktopTitle "${JabRef_LANG}" "Desktop icon"
+
+LangString SecAssociateBibDescription "${JabRef_LANG}" "Files with the extension .bib will automatically be opened with JabRef."
+LangString SecDesktopDescription "${JabRef_LANG}" "Puts JabRef icon on the desktop."
+
+LangString StillInstalled "${JabRef_LANG}" "JabRef ${Version} is already installed!"
+
+LangString FinishPageMessage "${JabRef_LANG}" "Congratulations! JabRef has been installed successfully."
+LangString FinishPageRun "${JabRef_LANG}" "Launch JabRef"
+
+LangString UnNotAdminLabel "${JabRef_LANG}" "You must have administrator privileges to uninstall JabRef!"
+LangString UnReallyRemoveLabel "${JabRef_LANG}" "Are you sure you want to completely remove JabRef?"
+LangString UnRemoveSuccessLabel "${JabRef_LANG}" "JabRef was successfully removed from your computer."
+
+
+!undef JabRef_LANG
+
+!endif ; _JabRef_LANGUAGES_ENGLISH_NSH_
diff --git a/src/windows/nsis/installer_languages/french.nsh b/src/windows/nsis/installer_languages/french.nsh
index 5ae5d51..1116f89 100644
--- a/src/windows/nsis/installer_languages/french.nsh
+++ b/src/windows/nsis/installer_languages/french.nsh
@@ -1,33 +1,33 @@
-!ifndef _JabRef_LANGUAGES_FRENCH_NSH_
-!define _JabRef_LANGUAGES_FRENCH_NSH_
-
-!ifdef JabRef_LANG
-  !undef JabRef_LANG
-!endif
-!define JabRef_LANG ${LANG_FRENCH}
-
-LicenseLangString JabRefLicenseData ${JabRef_LANG} "${PRODUCT_LICENSE_FILE}"
-
-LangString WelcomePageText "${JabRef_LANG}" "Cet assistant va vous guider au cours de l'installation de JabRef.\r\n\
-                                            \r\n\
-					    $_CLICK"
-
-LangString SecAssociateBibTitle "${JabRef_LANG}" "Association aux fichiers BibTeX"
-LangString SecDesktopTitle "${JabRef_LANG}" "Ic�ne du bureau"
-
-LangString SecAssociateBibDescription "${JabRef_LANG}" "Les fichiers ayant l'extension .bib seront automatiquement ouverts avec JabRef."
-LangString SecDesktopDescription "${JabRef_LANG}" "Ajoute l'ic�ne de JabRef sur le bureau."
-
-LangString StillInstalled "${JabRef_LANG}" "JabRef ${Version} est dej� install�!"
-
-LangString FinishPageMessage "${JabRef_LANG}" "F�licitations ! JabRef a �t� correctement install�."
-LangString FinishPageRun "${JabRef_LANG}" "Lancer JabRef"
-
-LangString UnNotAdminLabel "${JabRef_LANG}" "Vous devez avoir les droits d'administration pour d�sinstaller JabRef !"
-LangString UnReallyRemoveLabel "${JabRef_LANG}" "Etes-vous s�r de vouloir d�sinstaller compl�tement JabRef ?"
-LangString UnRemoveSuccessLabel "${JabRef_LANG}" "JabRef a �t� correctement d�sinstall� de votre ordinateur."
-
-
-!undef JabRef_LANG
-
-!endif ; _JabRef_LANGUAGES_FRENCH_NSH_
+!ifndef _JabRef_LANGUAGES_FRENCH_NSH_
+!define _JabRef_LANGUAGES_FRENCH_NSH_
+
+!ifdef JabRef_LANG
+  !undef JabRef_LANG
+!endif
+!define JabRef_LANG ${LANG_FRENCH}
+
+LicenseLangString JabRefLicenseData ${JabRef_LANG} "${PRODUCT_LICENSE_FILE}"
+
+LangString WelcomePageText "${JabRef_LANG}" "Cet assistant va vous guider au cours de l'installation de JabRef.\r\n\
+                                            \r\n\
+					    $_CLICK"
+
+LangString SecAssociateBibTitle "${JabRef_LANG}" "Association aux fichiers BibTeX"
+LangString SecDesktopTitle "${JabRef_LANG}" "Ic�ne du bureau"
+
+LangString SecAssociateBibDescription "${JabRef_LANG}" "Les fichiers ayant l'extension .bib seront automatiquement ouverts avec JabRef."
+LangString SecDesktopDescription "${JabRef_LANG}" "Ajoute l'ic�ne de JabRef sur le bureau."
+
+LangString StillInstalled "${JabRef_LANG}" "JabRef ${Version} est dej� install�!"
+
+LangString FinishPageMessage "${JabRef_LANG}" "F�licitations ! JabRef a �t� correctement install�."
+LangString FinishPageRun "${JabRef_LANG}" "Lancer JabRef"
+
+LangString UnNotAdminLabel "${JabRef_LANG}" "Vous devez avoir les droits d'administration pour d�sinstaller JabRef !"
+LangString UnReallyRemoveLabel "${JabRef_LANG}" "Etes-vous s�r de vouloir d�sinstaller compl�tement JabRef ?"
+LangString UnRemoveSuccessLabel "${JabRef_LANG}" "JabRef a �t� correctement d�sinstall� de votre ordinateur."
+
+
+!undef JabRef_LANG
+
+!endif ; _JabRef_LANGUAGES_FRENCH_NSH_
diff --git a/src/windows/nsis/installer_languages/german.nsh b/src/windows/nsis/installer_languages/german.nsh
index eec1f23..10fc995 100644
--- a/src/windows/nsis/installer_languages/german.nsh
+++ b/src/windows/nsis/installer_languages/german.nsh
@@ -1,33 +1,33 @@
-!ifndef _JabRef_LANGUAGES_GERMAN_NSH_
-!define _JabRef_LANGUAGES_GERMAN_NSH_
-
-!ifdef JabRef_LANG
-  !undef JabRef_LANG
-!endif
-!define JabRef_LANG ${LANG_GERMAN}
-
-LicenseLangString JabRefLicenseData ${JabRef_LANG} "${PRODUCT_LICENSE_FILE}"
-
-LangString WelcomePageText "${JabRef_LANG}" "Dieser Assistent wird Sie durch die Installation von JabRef begleiten.\r\n\
-					     \r\n\
-					     $_CLICK"
-
-LangString SecAssociateBibTitle "${JabRef_LANG}" "Dateizuordnung f�r BibTeX-Dateien"
-LangString SecDesktopTitle "${JabRef_LANG}" "Desktopsymbol"
-
-LangString SecAssociateBibDescription "${JabRef_LANG}" "Dateien mit der Endung .bib werden automatisch mit JabRef ge�ffnet."
-LangString SecDesktopDescription "${JabRef_LANG}" "Erstellt Verkn�pfung zu JabRef auf dem Desktop."
-
-LangString StillInstalled "${JabRef_LANG}" "JabRef ${Version} ist bereits installiert!"
-
-LangString FinishPageMessage "${JabRef_LANG}" "Gl�ckwunsch! JabRef wurde erfolgreich installiert."
-LangString FinishPageRun "${JabRef_LANG}" "JabRef starten"
-
-LangString UnNotAdminLabel "${JabRef_LANG}" "Sie ben�tigen Administratorrechte um JabRef zu deinstallieren!"
-LangString UnReallyRemoveLabel "${JabRef_LANG}" "Sind Sie sicher, dass sie JabRef deinstallieren m�chten?"
-LangString UnRemoveSuccessLabel "${JabRef_LANG}" "JabRef wurde erfolgreich von ihrem Computer entfernt."
-
-
-!undef JabRef_LANG
-
-!endif ; _JabRef_LANGUAGES_GERMAN_NSH_
+!ifndef _JabRef_LANGUAGES_GERMAN_NSH_
+!define _JabRef_LANGUAGES_GERMAN_NSH_
+
+!ifdef JabRef_LANG
+  !undef JabRef_LANG
+!endif
+!define JabRef_LANG ${LANG_GERMAN}
+
+LicenseLangString JabRefLicenseData ${JabRef_LANG} "${PRODUCT_LICENSE_FILE}"
+
+LangString WelcomePageText "${JabRef_LANG}" "Dieser Assistent wird Sie durch die Installation von JabRef begleiten.\r\n\
+					     \r\n\
+					     $_CLICK"
+
+LangString SecAssociateBibTitle "${JabRef_LANG}" "Dateizuordnung f�r BibTeX-Dateien"
+LangString SecDesktopTitle "${JabRef_LANG}" "Desktopsymbol"
+
+LangString SecAssociateBibDescription "${JabRef_LANG}" "Dateien mit der Endung .bib werden automatisch mit JabRef ge�ffnet."
+LangString SecDesktopDescription "${JabRef_LANG}" "Erstellt Verkn�pfung zu JabRef auf dem Desktop."
+
+LangString StillInstalled "${JabRef_LANG}" "JabRef ${Version} ist bereits installiert!"
+
+LangString FinishPageMessage "${JabRef_LANG}" "Gl�ckwunsch! JabRef wurde erfolgreich installiert."
+LangString FinishPageRun "${JabRef_LANG}" "JabRef starten"
+
+LangString UnNotAdminLabel "${JabRef_LANG}" "Sie ben�tigen Administratorrechte um JabRef zu deinstallieren!"
+LangString UnReallyRemoveLabel "${JabRef_LANG}" "Sind Sie sicher, dass sie JabRef deinstallieren m�chten?"
+LangString UnRemoveSuccessLabel "${JabRef_LANG}" "JabRef wurde erfolgreich von ihrem Computer entfernt."
+
+
+!undef JabRef_LANG
+
+!endif ; _JabRef_LANGUAGES_GERMAN_NSH_
diff --git a/src/windows/nsis/launcher.nsi b/src/windows/nsis/launcher.nsi
deleted file mode 100644
index b2940a4..0000000
--- a/src/windows/nsis/launcher.nsi
+++ /dev/null
@@ -1,117 +0,0 @@
-;
-; JabRef Application launcher
-;
-; Script based upon:
-; Jelude launcher - http://www.sfu.ca/~tyuen/jelude/ 
-; Java Launcher http://nsis.sourceforge.net/archive/nsisweb.php?page=326&instances=0,64
-;
-; Christopher Oezbek - oezi at oezi.de - 2006
-
-;--------- CONFIGURATION ---------
-!define APPNAME "JabRef"
-!ifndef JARFILE
-    !define JARFILE "JabRef.jar"
-!endif
-!ifdef APPICON
-    Icon "${APPICON}"
-!endif
-Name "${APPNAME}"
-Caption "${APPNAME}"
-OutFile "dist\${APPNAME}.exe"
-;-------- END CONFIGURATION ------
-
-SilentInstall silent
-XPStyle on
-RequestExecutionLevel user
-
-Section ""
-
-  Call GetJRE
-  Pop $R0
-
-  StrCpy $R1 ""
-  Call GetParameters
-  Pop $R1
-
-  StrCpy $R0 '"$R0" -Xms32m -Xmx512m -jar "${JARFILE}" $R1'
- 
-  SetOutPath $EXEDIR
-  Exec "$R0"
-
-  Quit
-SectionEnd
-
-Function GetParameters
-  Push $R0
-  Push $R1
-  Push $R2
-  StrCpy $R0 $CMDLINE 1
-  StrCpy $R1 '"'
-  StrCpy $R2 1
-  StrCmp $R0 '"' loop
-  StrCpy $R1 ' '
-  loop:
-    StrCpy $R0 $CMDLINE 1 $R2
-    StrCmp $R0 $R1 loop2
-    StrCmp $R0 "" loop2
-    IntOp $R2 $R2 + 1
-    Goto loop
-  loop2:
-    IntOp $R2 $R2 + 1
-    StrCpy $R0 $CMDLINE 1 $R2
-    StrCmp $R0 " " loop2
-  StrCpy $R0 $CMDLINE "" $R2
-  Pop $R2
-  Pop $R1
-  Exch $R0
-FunctionEnd
-
-Function GetJRE
-!include x64.nsh
-;
-;  Find JRE (Java.exe)
-;  1 - in .\jre directory (JRE Installed with application)
-;  2 - in JAVA_HOME environment variable
-;  3 - in the registry
-;  4 - in the 64bit registry for 64bit Java
-;  5 - assume java.exe in current dir or PATH
-  Push $R0
-  Push $R1
-
-  ClearErrors
-  StrCpy $R0 "$EXEDIR\jre\bin\javaw.exe"
-  IfFileExists $R0 JreFound
-  StrCpy $R0 ""
-
-  ClearErrors
-  ReadEnvStr $R0 "JAVA_HOME"
-  StrCpy $R0 "$R0\bin\javaw.exe"
-  IfErrors 0 JreFound
-
-  ClearErrors
-  ReadRegStr $R1 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" "CurrentVersion"
-  ReadRegStr $R0 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment\$R1" "JavaHome"
-  StrCpy $R0 "$R0\bin\javaw.exe"
-  
-  ${If} ${RunningX64}
-   SetRegView 64
-   ClearErrors
-   ReadRegStr $R1 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" "CurrentVersion"
-   ReadRegStr $R0 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment\$R1" "JavaHome"
-   StrCpy $R0 "$R0\bin\javaw.exe"
-  ${EndIf}
-
-  IfErrors 0 JreFound
-  Sleep 800
-  MessageBox MB_ICONEXCLAMATION|MB_YESNO \
-               'Could not find a Java Runtime Environment installed on your computer. \
-               $\nWithout it you cannot run "${APPNAME}". \
-               $\n$\nWould you like to visit the Java website to download it?' \
-               IDNO +2
-  ExecShell open "http://java.sun.com/getjava"
-  Quit
-        
- JreFound:
-  Pop $R1
-  Exch $R0
-FunctionEnd
diff --git a/src/windows/nsis/setup.nsi b/src/windows/nsis/setup.nsi
index 19696d0..4ce7e98 100644
--- a/src/windows/nsis/setup.nsi
+++ b/src/windows/nsis/setup.nsi
@@ -1,266 +1,273 @@
-# owner		JabRef Team
-# license	GPL version 2
-# author	Uwe Stöhr
-# file version	1.0	date	18-01-2007
-
-; To compile this script NSIS 2.23 and newer are required
-; http://nsis.sourceforge.net/
-
-
-; Do a Cyclic Redundancy Check to make sure the installer
-; was not corrupted by the download.
-CRCCheck force
-
-; Make the installer as small as possible.
-SetCompressor lzma
-
-
-# general definitions
-; you only need to change this section for new releases
-VIProductVersion "2.2.0.0" ; file version for the installer in the scheme "x.x.x.x"
-!define VERSION "2.2"
-Name "JabRef ${VERSION}"
-!define REGKEY "SOFTWARE\JabRef"
-!define COMPANY "JabRef Team"
-!define URL "http://jabref.sourceforge.net"
-!define PRODUCT_EXE "JabRef.exe"
-!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
-!define PRODUCT_LICENSE_FILE "dist\gpl3.txt"
-
-
-# Variables
-Var StartmenuFolder
-Var CreateDesktopIcon
-Var Answer
-Var UserName
-Var InstDestination
-
-
-# Included files
-!include "MUI.nsh"
-!include "fileassoc.nsh"
-!include "LogicLib.nsh"
-
-
-# macros
-!macro IsUserAdmin Result UName
-
- ClearErrors
- UserInfo::GetName
- IfErrors Win9x
- Pop $0
- StrCpy ${UName} $0
- UserInfo::GetAccountType
- Pop $1
- ${if} $1 == "Admin"
-  StrCpy ${Result} "yes"
- ${else}
-  StrCpy ${Result} "no"
- ${endif}
- Goto done
-
- Win9x:
-  StrCpy ${Result} "yes"
- done:
-
-!macroend
-
-
-# Installer pages
-; Remember the installer language
-!define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
-!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
-!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
-
-; let warning appear when installation is canceled
-!define MUI_ABORTWARNING
-
-; Icons for the installer program
-!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install-full.ico"
-!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-full.ico"
-
-; Welcome page
-!define MUI_WELCOMEPAGE_TEXT "$(WelcomePageText)"
-!insertmacro MUI_PAGE_WELCOME
-
-; Show the license.
-!insertmacro MUI_PAGE_LICENSE "${PRODUCT_LICENSE_FILE}"
-
-; Specify the installation directory.
-!insertmacro MUI_PAGE_DIRECTORY
-
-; choose the components to install.
-!insertmacro MUI_PAGE_COMPONENTS
-
-; Specify where to install program shortcuts.
-!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM"
-!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
-!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
-!define MUI_STARTMENUPAGE_DEFAULTFOLDER "$(^Name)"
-!insertmacro MUI_PAGE_STARTMENU ${PRODUCT_NAME} $StartmenuFolder
-
-; Watch the components being installed.
-!insertmacro MUI_PAGE_INSTFILES
-
-; Finish page
-!define MUI_FINISHPAGE_RUN "$INSTDIR\${PRODUCT_EXE}"
-!define MUI_FINISHPAGE_TEXT "$(FinishPageMessage)"
-!define MUI_FINISHPAGE_RUN_TEXT "$(FinishPageRun)"
-!insertmacro MUI_PAGE_FINISH
-
-; The uninstaller
-!insertmacro MUI_UNPAGE_CONFIRM
-!insertmacro MUI_UNPAGE_INSTFILES
-
-
-# Installer languages
-!insertmacro MUI_LANGUAGE "English" # first language is the default language
-!insertmacro MUI_LANGUAGE "German"
-
-!include "installer_languages\english.nsh"
-!include "installer_languages\german.nsh"
-
-
-# Installer attributes
-OutFile JabRefSetup.exe
-InstallDir "$PROGRAMFILES\JabRef"
-BrandingText "$(^Name) installer" ; appear at the bottom of the installer windows
-XPStyle on ; use XP style for installer windows
-LicenseData "$(JabRefLicenseData)"
-
-; creates file informations for the JabRefSetup.exe
-VIAddVersionKey ProductName "JabRef"
-VIAddVersionKey ProductVersion "${VERSION}"
-VIAddVersionKey CompanyName "${COMPANY}"
-VIAddVersionKey CompanyWebsite "${URL}"
-VIAddVersionKey FileDescription "JabRef installation program"
-VIAddVersionKey LegalCopyright "under the GPL version 2"
-VIAddVersionKey FileVersion ""
-
-
-# Installer sections
-Section "!JabRef" SecCore
- SectionIn RO
-SectionEnd
-
-Section "$(SecAssociateBibTitle)" SecAssociateBib
- !insertmacro APP_ASSOCIATE "bib" "JabRef.BibTeX" "$(FileTypeTitle)" "$INSTDIR\${PRODUCT_EXE},0" "$(OpenIn)" "$INSTDIR\${PRODUCT_EXE} $\"%1$\""
-SectionEnd
-
-Section "$(SecDesktopTitle)" SecDesktop
- StrCpy $CreateDesktopIcon "true"
-SectionEnd
-
-; section descriptions
-!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
-!insertmacro MUI_DESCRIPTION_TEXT ${SecAssociateBib} "$(SecAssociateBibDescription)"
-!insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} "$(SecDesktopDescription)"
-!insertmacro MUI_FUNCTION_DESCRIPTION_END
-
-Section "-Installation actions" SecInstallation
-
-  ; copy files
-  SetOutPath "$INSTDIR"
-  SetOverwrite on
-  File /r dist\*.*
-  WriteRegStr SHCTX "${REGKEY}\Components" Main 1
-  ; register JabRef
-  WriteRegStr SHCTX "${REGKEY}" Path $INSTDIR
-  WriteUninstaller $INSTDIR\uninstall.exe
-  ; create shortcuts to startmenu
-  SetOutPath "$INSTDIR"
-  CreateDirectory "$SMPROGRAMS\$StartmenuFolder"
-  CreateShortCut "$SMPROGRAMS\$StartmenuFolder\$(^Name).lnk" "$INSTDIR\${PRODUCT_EXE}" "" "$INSTDIR\JabRef.exe"
-  CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Uninstall $(^Name).lnk" "$INSTDIR\uninstall.exe"
-  ; create desktop icon
-  ${if} $CreateDesktopIcon == "true"
-   SetOutPath "$INSTDIR"
-   CreateShortCut "$DESKTOP\$(^Name).lnk" "$INSTDIR\${PRODUCT_EXE}" "" "$INSTDIR\${PRODUCT_EXE}" ;$(^Name).lnk
-  ${endif}
-  WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu" "$SMPROGRAMS\$StartmenuFolder"
-  ${if} $Answer == "yes" ; if user is admin
-   ; register information that appear in Windows' software listing
-   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
-   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${VERSION}"
-   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "Publisher" "${COMPANY}"
-   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${URL}"
-   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_EXE}"
-   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninstall.exe"   
-   WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "NoModify" 0x00000001
-   WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "NoRepair" 0x00000001
-  ${endif}
-
-SectionEnd
-
-
-# Uninstaller sections
-Section "un.JabRef" un.SecUnProgramFiles
-
-  SectionIn RO
-  ; delete installation folder
-  RMDir /r $INSTDIR	
-  ; delete start menu entry
-  ReadRegStr $0 SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu"
-  RMDir /r "$0"
-  ; delete desktop icon
-  Delete "$DESKTOP\$(^Name).lnk"
-  ; delete registry entries
-  DeleteRegKey HKCU "${PRODUCT_UNINST_KEY}"
-  DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}"
-  DeleteRegKey HKCR "Applications\${PRODUCT_EXE}"
-  DeleteRegValue HKCR ".bib" "JabRef.BibTeX_backup"
-  DeleteRegValue HKCU "Software\Classes\.bib" "JabRef.BibTeX_backup"
-  DeleteRegValue SHCTX "Software\Classes\.bib" "JabRef.BibTeX_backup"
-  DeleteRegKey HKCU "${REGKEY}"
-  DeleteRegKey SHCTX "${REGKEY}"
-  ; remove file association with .bib-files
-  !insertmacro APP_UNASSOCIATE "bib" "JabRef.BibTeX"
-  ; close uninstaller automatically
-  SetAutoClose true
-
-SectionEnd
-
-
-# Installer functions
-Function .onInit
-
- InitPluginsDir
-  ; If the user does *not* have administrator privileges, abort
-  StrCpy $Answer ""
-  StrCpy $UserName ""
-  !insertmacro IsUserAdmin $Answer $UserName ; macro from LyXUtils.nsh
-  ${if} $Answer == "yes"
-   SetShellVarContext all ; set that e.g. shortcuts will be created for all users
-  ${else}
-   SetShellVarContext current
-   StrCpy $INSTDIR "$APPDATA\$(^Name)"
-  ${endif}
-
-FunctionEnd
-
-
-# Uninstaller functions
-Function un.onInit
-
-  ; If the user does *not* have administrator privileges, abort
-  StrCpy $Answer ""
-  !insertmacro IsUserAdmin $Answer $UserName
-  ${if} $Answer == "yes"
-   SetShellVarContext all
-  ${else}
-   SetShellVarContext current
-  ${endif}
-  
-  ; ask if it should really be removed
-  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(UnReallyRemoveLabel)" IDYES +2
-  Abort
-
-FunctionEnd
-
-Function un.onUninstSuccess
-
-  HideWindow
-  MessageBox MB_ICONINFORMATION|MB_OK "$(UnRemoveSuccessLabel)"
-
-FunctionEnd
-
+# owner		JabRef Team
+# license	GPL version 2
+# author	Uwe Stöhr
+# file version	1.0	date	18-01-2007
+
+; To compile this script NSIS 2.23 and newer are required
+; http://nsis.sourceforge.net/
+
+
+; Do a Cyclic Redundancy Check to make sure the installer
+; was not corrupted by the download.
+CRCCheck force
+
+; Make the installer as small as possible.
+SetCompressor lzma
+
+
+# general definitions
+; you only need to change this section for new releases
+VIProductVersion "2.2.0.0" ; file version for the installer in the scheme "x.x.x.x"
+#!define VERSION "2.2" #Already set by command line parameter
+Name "JabRef ${VERSION}"
+!define REGKEY "SOFTWARE\JabRef"
+!define COMPANY "JabRef Team"
+!define URL "http://jabref.sourceforge.net"
+!define PRODUCT_EXE "JabRef.exe"
+!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
+!define PRODUCT_LICENSE_FILE "dist\gpl3.txt"
+
+
+# Variables
+Var StartmenuFolder
+Var CreateDesktopIcon
+Var Answer
+Var UserName
+Var InstDestination
+
+
+# Included files
+#from nullsoft distribution
+!include "MUI.nsh"
+#taken from http://nsis.sourceforge.net/FileAssoc
+!include "fileassoc.nsh"
+#from nullsoft distribution
+!include "LogicLib.nsh"
+
+
+# macros
+!macro IsUserAdmin Result UName
+
+ ClearErrors
+ UserInfo::GetName
+ IfErrors Win9x
+ Pop $0
+ StrCpy ${UName} $0
+ UserInfo::GetAccountType
+ Pop $1
+ ${if} $1 == "Admin"
+  StrCpy ${Result} "yes"
+ ${else}
+  StrCpy ${Result} "no"
+ ${endif}
+ Goto done
+
+ Win9x:
+  StrCpy ${Result} "yes"
+ done:
+
+!macroend
+
+
+# Installer pages
+; Remember the installer language
+!define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
+!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
+!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
+
+; let warning appear when installation is canceled
+!define MUI_ABORTWARNING
+
+; Icons for the installer program
+!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install-full.ico"
+!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-full.ico"
+
+; Welcome page
+!define MUI_WELCOMEPAGE_TEXT "$(WelcomePageText)"
+!insertmacro MUI_PAGE_WELCOME
+
+; Show the license.
+!insertmacro MUI_PAGE_LICENSE "${PRODUCT_LICENSE_FILE}"
+
+; Specify the installation directory.
+!insertmacro MUI_PAGE_DIRECTORY
+
+; choose the components to install.
+!insertmacro MUI_PAGE_COMPONENTS
+
+; Specify where to install program shortcuts.
+!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM"
+!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
+!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
+!define MUI_STARTMENUPAGE_DEFAULTFOLDER "$(^Name)"
+!insertmacro MUI_PAGE_STARTMENU ${PRODUCT_NAME} $StartmenuFolder
+
+; Watch the components being installed.
+!insertmacro MUI_PAGE_INSTFILES
+
+; Finish page
+!define MUI_FINISHPAGE_RUN "$INSTDIR\${PRODUCT_EXE}"
+!define MUI_FINISHPAGE_TEXT "$(FinishPageMessage)"
+!define MUI_FINISHPAGE_RUN_TEXT "$(FinishPageRun)"
+!insertmacro MUI_PAGE_FINISH
+
+; The uninstaller
+!insertmacro MUI_UNPAGE_CONFIRM
+!insertmacro MUI_UNPAGE_INSTFILES
+
+
+# Installer languages
+!insertmacro MUI_LANGUAGE "English" # first language is the default language
+!insertmacro MUI_LANGUAGE "French"
+!insertmacro MUI_LANGUAGE "German"
+!insertmacro MUI_LANGUAGE "Italian"
+
+!include "installer_languages\english.nsh"
+!include "installer_languages\french.nsh"
+!include "installer_languages\german.nsh"
+!include "installer_languages\italian.nsh"
+
+
+# Installer attributes
+OutFile JabRefSetup.exe
+InstallDir "$PROGRAMFILES\JabRef"
+BrandingText "$(^Name) installer" ; appear at the bottom of the installer windows
+XPStyle on ; use XP style for installer windows
+LicenseData "$(JabRefLicenseData)"
+
+; creates file informations for the JabRefSetup.exe
+VIAddVersionKey ProductName "JabRef"
+VIAddVersionKey ProductVersion "${VERSION}"
+VIAddVersionKey CompanyName "${COMPANY}"
+VIAddVersionKey CompanyWebsite "${URL}"
+VIAddVersionKey FileDescription "JabRef installation program"
+VIAddVersionKey LegalCopyright "under the GPL version 2"
+VIAddVersionKey FileVersion ""
+
+
+# Installer sections
+Section "!JabRef" SecCore
+ SectionIn RO
+SectionEnd
+
+Section "$(SecAssociateBibTitle)" SecAssociateBib
+ !insertmacro APP_ASSOCIATE "bib" "JabRef.BibTeX" "$(FileTypeTitle)" "$INSTDIR\${PRODUCT_EXE},0" "$(OpenIn)" "$INSTDIR\${PRODUCT_EXE} $\"%1$\""
+SectionEnd
+
+Section "$(SecDesktopTitle)" SecDesktop
+ StrCpy $CreateDesktopIcon "true"
+SectionEnd
+
+; section descriptions
+!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+!insertmacro MUI_DESCRIPTION_TEXT ${SecAssociateBib} "$(SecAssociateBibDescription)"
+!insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} "$(SecDesktopDescription)"
+!insertmacro MUI_FUNCTION_DESCRIPTION_END
+
+Section "-Installation actions" SecInstallation
+
+  ; copy files
+  SetOutPath "$INSTDIR"
+  SetOverwrite on
+  File /r dist\*.*
+  WriteRegStr SHCTX "${REGKEY}\Components" Main 1
+  ; register JabRef
+  WriteRegStr SHCTX "${REGKEY}" Path $INSTDIR
+  WriteUninstaller $INSTDIR\uninstall.exe
+  ; create shortcuts to startmenu
+  SetOutPath "$INSTDIR"
+  CreateDirectory "$SMPROGRAMS\$StartmenuFolder"
+  CreateShortCut "$SMPROGRAMS\$StartmenuFolder\$(^Name).lnk" "$INSTDIR\${PRODUCT_EXE}" "" "$INSTDIR\JabRef.exe"
+  CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Uninstall $(^Name).lnk" "$INSTDIR\uninstall.exe"
+  ; create desktop icon
+  ${if} $CreateDesktopIcon == "true"
+   SetOutPath "$INSTDIR"
+   CreateShortCut "$DESKTOP\$(^Name).lnk" "$INSTDIR\${PRODUCT_EXE}" "" "$INSTDIR\${PRODUCT_EXE}" ;$(^Name).lnk
+  ${endif}
+  WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu" "$SMPROGRAMS\$StartmenuFolder"
+  ${if} $Answer == "yes" ; if user is admin
+   ; register information that appear in Windows' software listing
+   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
+   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${VERSION}"
+   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "Publisher" "${COMPANY}"
+   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${URL}"
+   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_EXE}"
+   WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninstall.exe"   
+   WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "NoModify" 0x00000001
+   WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "NoRepair" 0x00000001
+  ${endif}
+
+SectionEnd
+
+
+# Uninstaller sections
+Section "un.JabRef" un.SecUnProgramFiles
+
+  SectionIn RO
+  ; delete installation folder
+  RMDir /r $INSTDIR	
+  ; delete start menu entry
+  ReadRegStr $0 SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu"
+  RMDir /r "$0"
+  ; delete desktop icon
+  Delete "$DESKTOP\$(^Name).lnk"
+  ; delete registry entries
+  DeleteRegKey HKCU "${PRODUCT_UNINST_KEY}"
+  DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}"
+  DeleteRegKey HKCR "Applications\${PRODUCT_EXE}"
+  DeleteRegValue HKCR ".bib" "JabRef.BibTeX_backup"
+  DeleteRegValue HKCU "Software\Classes\.bib" "JabRef.BibTeX_backup"
+  DeleteRegValue SHCTX "Software\Classes\.bib" "JabRef.BibTeX_backup"
+  DeleteRegKey HKCU "${REGKEY}"
+  DeleteRegKey SHCTX "${REGKEY}"
+  ; remove file association with .bib-files
+  !insertmacro APP_UNASSOCIATE "bib" "JabRef.BibTeX"
+  ; close uninstaller automatically
+  SetAutoClose true
+
+SectionEnd
+
+
+# Installer functions
+Function .onInit
+
+ InitPluginsDir
+  ; If the user does *not* have administrator privileges, abort
+  StrCpy $Answer ""
+  StrCpy $UserName ""
+  !insertmacro IsUserAdmin $Answer $UserName ; macro from LyXUtils.nsh
+  ${if} $Answer == "yes"
+   SetShellVarContext all ; set that e.g. shortcuts will be created for all users
+  ${else}
+   SetShellVarContext current
+   StrCpy $INSTDIR "$APPDATA\$(^Name)"
+  ${endif}
+
+FunctionEnd
+
+
+# Uninstaller functions
+Function un.onInit
+
+  ; If the user does *not* have administrator privileges, abort
+  StrCpy $Answer ""
+  !insertmacro IsUserAdmin $Answer $UserName
+  ${if} $Answer == "yes"
+   SetShellVarContext all
+  ${else}
+   SetShellVarContext current
+  ${endif}
+  
+  ; ask if it should really be removed
+  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(UnReallyRemoveLabel)" IDYES +2
+  Abort
+
+FunctionEnd
+
+Function un.onUninstSuccess
+
+  HideWindow
+  MessageBox MB_ICONINFORMATION|MB_OK "$(UnRemoveSuccessLabel)"
+
+FunctionEnd
+
diff --git a/syncLang.py b/syncLang.py
index ad83540..ef9070c 100644
--- a/syncLang.py
+++ b/syncLang.py
@@ -1,374 +1,374 @@
-import sys
-import os
-import re
-
-keyFiles = {}
-
-# Builds a list of all translation keys in the list of lines.
-def indexFile(lines):
-    allKeys = []
-    for line in lines:
-        comment = line.find("#")
-        if (comment != 0):
-            index = line.find("=")
-            while ((index > 0) and (line[index-1]=="\\")):
-                index = line.find("=", index+1)
-            if (index > 0):
-                allKeys.append(line[0:index])
-    allKeys.sort()
-    return allKeys
-        
-
-# Finds all keys in the first list that are not present in the second list:
-def findMissingKeys(first, second):
-    missing = []
-    for key in first:
-        if not key in second:
-            missing.append(key)
-    return missing
-
-
-# Appends all the given keys to the file:
-def appendMissingKeys(filename, keys):
-    file = open(filename, "a")
-    file.write("\n")
-    for key in keys:
-        file.write(key+"=\n")
-
-def handleFileSet(mainFile, files, changeFiles):
-    f1 = open(mainFile)
-    lines = f1.readlines()
-    f1.close()
-    keys = indexFile(lines)
-    keysPresent = []
-    for i in range(0, len(files)):
-        f2 = open(files[i])
-        lines = f2.readlines()
-        f2.close()
-        keysPresent.append(indexFile(lines))
-        missing = findMissingKeys(keys, keysPresent[i])
-        
-        print "\n\nFile '"+files[i]+"'\n"
-        if len(missing) == 0:
-            print "----> No missing keys."
-        else:
-            print "----> Missing keys:"
-            for key in missing:
-                print key
-
-            if changeFiles == 1:
-                print "Update file?",
-                if raw_input() in ['y', 'Y']:
-                    appendMissingKeys(files[i], missing)
-            print ""
-        
-        # See if this file has keys that are not in the main file:
-        redundant = findMissingKeys(keysPresent[i], keys)
-        if len(redundant) > 0:
-            print "----> Possible obsolete keys (not in English language file):"
-            for key in redundant:
-                print key
-                
-            #if changeFiles == 1:
-            #   print "Update file?",
-            #   if raw_input() in ['y', 'Y']:
-            #       removeRedundantKeys(files[i], redundant)
-            print ""
-        
-def handleJavaCode(filename, lines, keyList, notTermList):
-    #Extract first string parameter from Globals.lang call. E.g., Globals.lang("Default")
-    reOnlyString = r'"((\\"|[^"])*)"[^"]*'
-    patt = re.compile(r'Globals\s*\.\s*lang\s*\(\s*' + reOnlyString)
-    #second pattern as Mr Dlib contribution indirectly uses Global.lang
-    patta = re.compile(r'LocalizationSupport.message\(' + reOnlyString)
-    pattOnlyString = re.compile(reOnlyString)
-
-    #Find multiline Globals lang statements. E.g.:
-    #Globals.lang("This is my string" +
-    # "with a long text")
-    patt2 = re.compile(r'Globals\s*\.\s*lang\s*\(([^)])*$')
-
-    pattPlus = re.compile(r'^\s*\+')
-
-    eList = list(enumerate(lines.split("\n")))
-    i = 0
-    while i < len(eList):
-        linenum, curline = eList[i]
-        
-        #Remove Java single line comments
-        if curline.find("http://") < 0:
-            curline = re.sub("//.*", "", curline)
-
-        while (curline != ""):
-            result = patt.search(curline)
-            if (not result):
-                result = patta.search(curline)
-            result2 = patt2.search(curline)
-
-            found = ""
-
-            if result2 and curline.find('",') < 0:
-                # not terminated
-                # but it could be a multiline string
-                if result:
-                    curText = result.group(1)
-                    searchForPlus = True
-                else:
-                    curText = ""
-                    searchForPlus = False
-                origI = i
-                #inspect next line
-                while i+1 < len(eList):
-                    linenum2, curline2 = eList[i+1]
-                    if (not searchForPlus) or pattPlus.search(curline2):
-                        #from now on, we always have to search for a plus
-                        searchForPlus = True
-
-                        #The current line has been handled here, therefore indicate to handle the next line
-                        i = i+1
-                        linenum = linenum2
-                        curline = curline2
-
-                        #Search for the occurence of a string
-                        result = pattOnlyString.search(curline2)
-                        if result:
-                            curText = curText + result.group(1)
-                            #check for several strings in this line
-                            if curline2.count('\"') > 2:
-                                break
-                            #check for several arguments in the line
-                            if curline2.find('",') > 0:
-                                break
-                            if curline2.endswith(")"):
-                                break
-                        else:
-                            #plus sign at the beginning found, but no string
-                            break
-                    else:
-                        #no continuation found
-                        break
-
-                if origI == i:
-                    print "%s:%d: Not terminated: %s"%(filename, linenum+1, curline)
-                else:
-                    found = curText
-
-            if result or (found != ""):
-                if (found == ""):
-                    #not a multiline string, found via the single line matching
-                    #full string in one line
-                    found = result.group(1)
-
-                found = found.replace(" ", "_")
-                #replace characters that need to be escaped in the language file
-                found = found.replace("=", r"\=").replace(":",r"\:")
-                #replace Java-escaped " to plain "
-                found = found.replace(r'\"','"')
-                #Java-escaped \ to plain \ need not to be converted - they have to be kept
-                #e.g., "\\#" has to be contained as "\\#" in the key
-                #found = found.replace('\\\\','\\')
-                if (found != "") and (found not in keyList):
-                    keyList.append(found)
-                    keyFiles[found] = (filename, linenum)
-                    #print "Adding ", found
-                #else:
-                #   print "Not adding: "+found
-                    
-            #Prepare a possible second run (multiple Globals.lang on this line)
-            if result:
-                lastPos = result.span()[1]
-                #regular expression is greedy. It will match until Globals.lang("
-                #therefore, we have to adjust lastPos
-                lastPos = lastPos - 14
-                if len(curline) <= lastPos:
-                    curline = ""
-                else:
-                    curline = curline[lastPos:]
-            else:
-                #terminate processing of this line, continue to next line
-                curline = ""
-                
-        i = i+1
-            
-# Find all Java source files in the given directory, and read the lines of each,
-# calling handleJavaCode on the contents:   
-def handleDir(lists, dirname, fnames):
-    keyList, notTermList = lists    
-    for file in fnames:
-        if len(file) > 6 and file[(len(file)-5):len(file)] == ".java":
-            fl = open(dirname+os.sep+file)
-            lines = fl.read()
-            fl.close()
-            handleJavaCode(dirname + os.sep + file, lines, keyList, notTermList)
-            
-# Go through subdirectories and call handleDir on all diroctories:                      
-def traverseFileTree(dir):
-    keyList = []
-    notTermList = []
-    os.path.walk(dir, handleDir, (keyList, notTermList))
-    print "Keys found: "+str(len(keyList))
-    return keyList
-
-    
-# Searches out all translation calls in the Java source files, and reports which
-# are not present in the given resource file.
-#
-# arg: mainFile: a .properties file with the keys to sync with
-def findNewKeysInJavaCode(mainFile, dir, update):
-    keystempo = []
-    keyListtempo = []
-    f1 = open(mainFile)
-    lines = f1.readlines()
-    f1.close()
-    keys = indexFile(lines)
-    keyList = traverseFileTree(dir)
-   
-    # Open the file again, for appending:
-    if update:
-        f1 = open(mainFile, "a")
-        f1.write("\n")
-        
-    # Look for keys that are used in the code, but not present in the language file:
-    for key in keyList:
-        value = key.replace("\\:",":").replace("\\=", "=")
-        if key not in keys:
-            fileName, lineNum = keyFiles[key]
-            print "%s:%i:Missing key: %s"%(fileName, lineNum + 1, value)
-            if update:
-                f1.write(key+"="+value+"\n")
-    
-    # Look for keys in the language file that are not used in the code:
-    for key in keys:
-        if key not in keyList:
-            print "Possible obsolete key: "+key
-        
-    if update:
-        f1.close()
-    
-    
-def lookForDuplicates(file, displayKeys):
-    duplicount = 0
-    f1 = open(file)
-    lines = f1.readlines()
-    f1.close()
-    mappings = {}
-    emptyVals = 0
-    for line in lines:
-        comment = line.find("#")
-        index = line.find("=")
-        if (comment != 0) and (index > 0):
-            key = line[0:index]
-            value = line[index+1:].strip()
-            if key in mappings:
-                mappings[key].append(value)
-                duplicount += 1
-                if displayKeys:
-		  print "Duplicate: "+file+": "+key+" =",
-		  print mappings[key]
-            else:
-                mappings[key] = [value]
-                if value == "":
-		    emptyVals = emptyVals + 1
-                    if displayKeys:
-		      print "Empty value: "+file+": "+key
-                #print "New: "+value
-    if duplicount > 0:
-	dupstring = str(duplicount)+" duplicates. "
-    else:
-	dupstring = ""
-    if emptyVals > 0:
-        emptStr = str(emptyVals)+" empty values. "
-    else:
-	emptStr = ""
-    if duplicount+emptyVals > 0:
-	okString = ""
-    else:
-	okString = "ok"
-    print file+": "+dupstring+emptStr+okString
-    #print file+": "+str(emptyVals)+" empty values."
-        
-        
-############# Main part ###################
-
-if len(sys.argv) == 1:
-    print """This program must be run from the "src" directory right below the jabref base directory.
-    
-Usage: syncLang.py option   
-Option can be one of the following:
- 
-    -c: Search the language files for empty and duplicate translations. Display only
-        counts for duplicated and empty values in each language file.
-
-    -d: Search the language files for empty and duplicate translations. 
-        For each duplicate set found, a list will be printed showing the various 
-        translations for the same key. There is currently to option to remove duplicates
-        automatically.
-        
-    -s [-u]: Search the Java source files for language keys. All keys that are found in the source files
-        but not in "JabRef_en.properties" are listed. If the -u option is specified, these keys will
-        automatically be added to "JabRef_en.properties".
-        
-        The program will also list "Not terminated" keys. These are keys that are concatenated over 
-        more than one line, that the program is not (currently) able to resolve.
-        
-        Finally, the program will list "Possible obsolete keys". These are keys that are present in
-        "JabRef_en.properties", but could not be found in the Java source code. Note that the 
-        "Not terminated" keys will be likely to appear here, since they were not resolved.
-        
-    -t [-u]: Compare the contents of "JabRef_en.properties" and "Menu_en.properties" against the other 
-        language files. The program will list for all the other files which keys from the English
-        file are missing. Additionally, the program will list keys in the other files which are
-        not present in the English file - possible obsolete keys.
-        
-        If the -u option is specified, all missing keys will automatically be added to the files.
-        There is currently no option to remove obsolete keys automatically.
-"""
-    
-elif (len(sys.argv) >= 2) and (sys.argv[1] == "-s"):
-    if (len(sys.argv) >= 3) and (sys.argv[2] == "-u"):
-        update = 1
-    else:
-        update = 0
-    findNewKeysInJavaCode("resource/JabRef_en.properties", ".", update)
-    
-elif (len(sys.argv) >= 2) and (sys.argv[1] == "-t"):
-    if (len(sys.argv) >= 3) and (sys.argv[2] == "-u"):
-        changeFiles = 1
-    else:
-        changeFiles = 0
-        
-    handleFileSet("resource/JabRef_en.properties", ("resource/JabRef_de.properties",\
-        "resource/JabRef_fr.properties", "resource/JabRef_it.properties",\
-        "resource/JabRef_ja.properties", "resource/JabRef_pt_BR.properties",\
-        "resource/JabRef_nl.properties", "resource/JabRef_da.properties",\
-        "resource/JabRef_no.properties", "resource/JabRef_tr.properties",\
-        "resource/JabRef_vi.properties", "resource/JabRef_in.properties", \
-        "resource/JabRef_zh.properties"), changeFiles)
-    handleFileSet("resource/Menu_en.properties", ("resource/Menu_de.properties",\
-        "resource/Menu_fr.properties", "resource/Menu_it.properties",\
-        "resource/Menu_ja.properties", "resource/Menu_pt_BR.properties",\
-        "resource/Menu_nl.properties", "resource/Menu_da.properties",\
-        "resource/Menu_es.properties",\
-        "resource/Menu_no.properties", "resource/Menu_tr.properties",\
-        "resource/Menu_vi.properties", "resource/Menu_in.properties",\
-        "resource/Menu_zh.properties"), changeFiles)
-        
-elif (len(sys.argv) >= 2) and ((sys.argv[1] == "-d") or (sys.argv[1] == "-c")):
-    files = ("resource/JabRef_en.properties", "resource/JabRef_de.properties",\
-        "resource/JabRef_fr.properties", "resource/JabRef_it.properties",\
-        "resource/JabRef_ja.properties", "resource/JabRef_pt_BR.properties",\
-        "resource/JabRef_no.properties", "resource/JabRef_nl.properties",\
-        "resource/JabRef_da.properties",\
-        "resource/JabRef_tr.properties",\
-        "resource/JabRef_vi.properties", "resource/JabRef_in.properties",\
-        "resource/JabRef_zh.properties",\
-        "resource/Menu_en.properties", "resource/Menu_de.properties",\
-        "resource/Menu_fr.properties", "resource/Menu_it.properties",\
-        "resource/Menu_ja.properties", "resource/Menu_pt_BR.properties",\
-        "resource/Menu_no.properties", "resource/Menu_nl.properties",\
-        "resource/Menu_da.properties", "resource/Menu_es.properties", \
-        "resource/Menu_tr.properties",\
-        "resource/Menu_vi.properties", "resource/Menu_in.properties",\
-        "resource/Menu_zh.properties")
-    for file in files:
-        lookForDuplicates(file, sys.argv[1] == "-d")
+import sys
+import os
+import re
+
+keyFiles = {}
+
+# Builds a list of all translation keys in the list of lines.
+def indexFile(lines):
+    allKeys = []
+    for line in lines:
+        comment = line.find("#")
+        if (comment != 0):
+            index = line.find("=")
+            while ((index > 0) and (line[index-1]=="\\")):
+                index = line.find("=", index+1)
+            if (index > 0):
+                allKeys.append(line[0:index])
+    allKeys.sort()
+    return allKeys
+        
+
+# Finds all keys in the first list that are not present in the second list:
+def findMissingKeys(first, second):
+    missing = []
+    for key in first:
+        if not key in second:
+            missing.append(key)
+    return missing
+
+
+# Appends all the given keys to the file:
+def appendMissingKeys(filename, keys):
+    file = open(filename, "a")
+    file.write("\n")
+    for key in keys:
+        file.write(key+"=\n")
+
+def handleFileSet(mainFile, files, changeFiles):
+    f1 = open(mainFile)
+    lines = f1.readlines()
+    f1.close()
+    keys = indexFile(lines)
+    keysPresent = []
+    for i in range(0, len(files)):
+        f2 = open(files[i])
+        lines = f2.readlines()
+        f2.close()
+        keysPresent.append(indexFile(lines))
+        missing = findMissingKeys(keys, keysPresent[i])
+        
+        print "\n\nFile '"+files[i]+"'\n"
+        if len(missing) == 0:
+            print "----> No missing keys."
+        else:
+            print "----> Missing keys:"
+            for key in missing:
+                print key
+
+            if changeFiles == 1:
+                print "Update file?",
+                if raw_input() in ['y', 'Y']:
+                    appendMissingKeys(files[i], missing)
+            print ""
+        
+        # See if this file has keys that are not in the main file:
+        redundant = findMissingKeys(keysPresent[i], keys)
+        if len(redundant) > 0:
+            print "----> Possible obsolete keys (not in English language file):"
+            for key in redundant:
+                print key
+                
+            #if changeFiles == 1:
+            #   print "Update file?",
+            #   if raw_input() in ['y', 'Y']:
+            #       removeRedundantKeys(files[i], redundant)
+            print ""
+        
+def handleJavaCode(filename, lines, keyList, notTermList):
+    #Extract first string parameter from Globals.lang call. E.g., Globals.lang("Default")
+    reOnlyString = r'"((\\"|[^"])*)"[^"]*'
+    patt = re.compile(r'Globals\s*\.\s*lang\s*\(\s*' + reOnlyString)
+    #second pattern as Mr Dlib contribution indirectly uses Global.lang
+    patta = re.compile(r'LocalizationSupport.message\(' + reOnlyString)
+    pattOnlyString = re.compile(reOnlyString)
+
+    #Find multiline Globals lang statements. E.g.:
+    #Globals.lang("This is my string" +
+    # "with a long text")
+    patt2 = re.compile(r'Globals\s*\.\s*lang\s*\(([^)])*$')
+
+    pattPlus = re.compile(r'^\s*\+')
+
+    eList = list(enumerate(lines.split("\n")))
+    i = 0
+    while i < len(eList):
+        linenum, curline = eList[i]
+        
+        #Remove Java single line comments
+        if curline.find("http://") < 0:
+            curline = re.sub("//.*", "", curline)
+
+        while (curline != ""):
+            result = patt.search(curline)
+            if (not result):
+                result = patta.search(curline)
+            result2 = patt2.search(curline)
+
+            found = ""
+
+            if result2 and curline.find('",') < 0:
+                # not terminated
+                # but it could be a multiline string
+                if result:
+                    curText = result.group(1)
+                    searchForPlus = True
+                else:
+                    curText = ""
+                    searchForPlus = False
+                origI = i
+                #inspect next line
+                while i+1 < len(eList):
+                    linenum2, curline2 = eList[i+1]
+                    if (not searchForPlus) or pattPlus.search(curline2):
+                        #from now on, we always have to search for a plus
+                        searchForPlus = True
+
+                        #The current line has been handled here, therefore indicate to handle the next line
+                        i = i+1
+                        linenum = linenum2
+                        curline = curline2
+
+                        #Search for the occurence of a string
+                        result = pattOnlyString.search(curline2)
+                        if result:
+                            curText = curText + result.group(1)
+                            #check for several strings in this line
+                            if curline2.count('\"') > 2:
+                                break
+                            #check for several arguments in the line
+                            if curline2.find('",') > 0:
+                                break
+                            if curline2.endswith(")"):
+                                break
+                        else:
+                            #plus sign at the beginning found, but no string
+                            break
+                    else:
+                        #no continuation found
+                        break
+
+                if origI == i:
+                    print "%s:%d: Not terminated: %s"%(filename, linenum+1, curline)
+                else:
+                    found = curText
+
+            if result or (found != ""):
+                if (found == ""):
+                    #not a multiline string, found via the single line matching
+                    #full string in one line
+                    found = result.group(1)
+
+                found = found.replace(" ", "_")
+                #replace characters that need to be escaped in the language file
+                found = found.replace("=", r"\=").replace(":",r"\:")
+                #replace Java-escaped " to plain "
+                found = found.replace(r'\"','"')
+                #Java-escaped \ to plain \ need not to be converted - they have to be kept
+                #e.g., "\\#" has to be contained as "\\#" in the key
+                #found = found.replace('\\\\','\\')
+                if (found != "") and (found not in keyList):
+                    keyList.append(found)
+                    keyFiles[found] = (filename, linenum)
+                    #print "Adding ", found
+                #else:
+                #   print "Not adding: "+found
+                    
+            #Prepare a possible second run (multiple Globals.lang on this line)
+            if result:
+                lastPos = result.span()[1]
+                #regular expression is greedy. It will match until Globals.lang("
+                #therefore, we have to adjust lastPos
+                lastPos = lastPos - 14
+                if len(curline) <= lastPos:
+                    curline = ""
+                else:
+                    curline = curline[lastPos:]
+            else:
+                #terminate processing of this line, continue to next line
+                curline = ""
+                
+        i = i+1
+            
+# Find all Java source files in the given directory, and read the lines of each,
+# calling handleJavaCode on the contents:   
+def handleDir(lists, dirname, fnames):
+    keyList, notTermList = lists    
+    for file in fnames:
+        if len(file) > 6 and file[(len(file)-5):len(file)] == ".java":
+            fl = open(dirname+os.sep+file)
+            lines = fl.read()
+            fl.close()
+            handleJavaCode(dirname + os.sep + file, lines, keyList, notTermList)
+            
+# Go through subdirectories and call handleDir on all diroctories:                      
+def traverseFileTree(dir):
+    keyList = []
+    notTermList = []
+    os.path.walk(dir, handleDir, (keyList, notTermList))
+    print "Keys found: "+str(len(keyList))
+    return keyList
+
+    
+# Searches out all translation calls in the Java source files, and reports which
+# are not present in the given resource file.
+#
+# arg: mainFile: a .properties file with the keys to sync with
+def findNewKeysInJavaCode(mainFile, dir, update):
+    keystempo = []
+    keyListtempo = []
+    f1 = open(mainFile)
+    lines = f1.readlines()
+    f1.close()
+    keys = indexFile(lines)
+    keyList = traverseFileTree(dir)
+   
+    # Open the file again, for appending:
+    if update:
+        f1 = open(mainFile, "a")
+        f1.write("\n")
+        
+    # Look for keys that are used in the code, but not present in the language file:
+    for key in keyList:
+        value = key.replace("\\:",":").replace("\\=", "=")
+        if key not in keys:
+            fileName, lineNum = keyFiles[key]
+            print "%s:%i:Missing key: %s"%(fileName, lineNum + 1, value)
+            if update:
+                f1.write(key+"="+value+"\n")
+    
+    # Look for keys in the language file that are not used in the code:
+    for key in keys:
+        if key not in keyList:
+            print "Possible obsolete key: "+key
+        
+    if update:
+        f1.close()
+    
+    
+def lookForDuplicates(file, displayKeys):
+    duplicount = 0
+    f1 = open(file)
+    lines = f1.readlines()
+    f1.close()
+    mappings = {}
+    emptyVals = 0
+    for line in lines:
+        comment = line.find("#")
+        index = line.find("=")
+        if (comment != 0) and (index > 0):
+            key = line[0:index]
+            value = line[index+1:].strip()
+            if key in mappings:
+                mappings[key].append(value)
+                duplicount += 1
+                if displayKeys:
+		  print "Duplicate: "+file+": "+key+" =",
+		  print mappings[key]
+            else:
+                mappings[key] = [value]
+                if value == "":
+		    emptyVals = emptyVals + 1
+                    if displayKeys:
+		      print "Empty value: "+file+": "+key
+                #print "New: "+value
+    if duplicount > 0:
+	dupstring = str(duplicount)+" duplicates. "
+    else:
+	dupstring = ""
+    if emptyVals > 0:
+        emptStr = str(emptyVals)+" empty values. "
+    else:
+	emptStr = ""
+    if duplicount+emptyVals > 0:
+	okString = ""
+    else:
+	okString = "ok"
+    print file+": "+dupstring+emptStr+okString
+    #print file+": "+str(emptyVals)+" empty values."
+        
+        
+############# Main part ###################
+
+if len(sys.argv) == 1:
+    print """This program must be run from the "src" directory right below the jabref base directory.
+    
+Usage: syncLang.py option   
+Option can be one of the following:
+ 
+    -c: Search the language files for empty and duplicate translations. Display only
+        counts for duplicated and empty values in each language file.
+
+    -d: Search the language files for empty and duplicate translations. 
+        For each duplicate set found, a list will be printed showing the various 
+        translations for the same key. There is currently to option to remove duplicates
+        automatically.
+        
+    -s [-u]: Search the Java source files for language keys. All keys that are found in the source files
+        but not in "JabRef_en.properties" are listed. If the -u option is specified, these keys will
+        automatically be added to "JabRef_en.properties".
+        
+        The program will also list "Not terminated" keys. These are keys that are concatenated over 
+        more than one line, that the program is not (currently) able to resolve.
+        
+        Finally, the program will list "Possible obsolete keys". These are keys that are present in
+        "JabRef_en.properties", but could not be found in the Java source code. Note that the 
+        "Not terminated" keys will be likely to appear here, since they were not resolved.
+        
+    -t [-u]: Compare the contents of "JabRef_en.properties" and "Menu_en.properties" against the other 
+        language files. The program will list for all the other files which keys from the English
+        file are missing. Additionally, the program will list keys in the other files which are
+        not present in the English file - possible obsolete keys.
+        
+        If the -u option is specified, all missing keys will automatically be added to the files.
+        There is currently no option to remove obsolete keys automatically.
+"""
+    
+elif (len(sys.argv) >= 2) and (sys.argv[1] == "-s"):
+    if (len(sys.argv) >= 3) and (sys.argv[2] == "-u"):
+        update = 1
+    else:
+        update = 0
+    findNewKeysInJavaCode("resource/JabRef_en.properties", ".", update)
+    
+elif (len(sys.argv) >= 2) and (sys.argv[1] == "-t"):
+    if (len(sys.argv) >= 3) and (sys.argv[2] == "-u"):
+        changeFiles = 1
+    else:
+        changeFiles = 0
+        
+    handleFileSet("resource/JabRef_en.properties", ("resource/JabRef_de.properties",\
+        "resource/JabRef_fr.properties", "resource/JabRef_it.properties",\
+        "resource/JabRef_ja.properties", "resource/JabRef_pt_BR.properties",\
+        "resource/JabRef_nl.properties", "resource/JabRef_da.properties",\
+        "resource/JabRef_no.properties", "resource/JabRef_tr.properties",\
+        "resource/JabRef_vi.properties", "resource/JabRef_in.properties", \
+        "resource/JabRef_zh.properties"), changeFiles)
+    handleFileSet("resource/Menu_en.properties", ("resource/Menu_de.properties",\
+        "resource/Menu_fr.properties", "resource/Menu_it.properties",\
+        "resource/Menu_ja.properties", "resource/Menu_pt_BR.properties",\
+        "resource/Menu_nl.properties", "resource/Menu_da.properties",\
+        "resource/Menu_es.properties",\
+        "resource/Menu_no.properties", "resource/Menu_tr.properties",\
+        "resource/Menu_vi.properties", "resource/Menu_in.properties",\
+        "resource/Menu_zh.properties"), changeFiles)
+        
+elif (len(sys.argv) >= 2) and ((sys.argv[1] == "-d") or (sys.argv[1] == "-c")):
+    files = ("resource/JabRef_en.properties", "resource/JabRef_de.properties",\
+        "resource/JabRef_fr.properties", "resource/JabRef_it.properties",\
+        "resource/JabRef_ja.properties", "resource/JabRef_pt_BR.properties",\
+        "resource/JabRef_no.properties", "resource/JabRef_nl.properties",\
+        "resource/JabRef_da.properties",\
+        "resource/JabRef_tr.properties",\
+        "resource/JabRef_vi.properties", "resource/JabRef_in.properties",\
+        "resource/JabRef_zh.properties",\
+        "resource/Menu_en.properties", "resource/Menu_de.properties",\
+        "resource/Menu_fr.properties", "resource/Menu_it.properties",\
+        "resource/Menu_ja.properties", "resource/Menu_pt_BR.properties",\
+        "resource/Menu_no.properties", "resource/Menu_nl.properties",\
+        "resource/Menu_da.properties", "resource/Menu_es.properties", \
+        "resource/Menu_tr.properties",\
+        "resource/Menu_vi.properties", "resource/Menu_in.properties",\
+        "resource/Menu_zh.properties")
+    for file in files:
+        lookForDuplicates(file, sys.argv[1] == "-d")

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



More information about the pkg-java-commits mailing list